summaryrefslogtreecommitdiff
path: root/graphics/ketcindy/ketcindyfolder
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /graphics/ketcindy/ketcindyfolder
Initial commit
Diffstat (limited to 'graphics/ketcindy/ketcindyfolder')
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/ketmanual/KeTCindyGuideE.pdfbin0 -> 840869 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/ketmanual/KeTCindyGuideJ.pdfbin0 -> 1416401 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/ketmanual/KeTCindyReferenceE.pdfbin0 -> 2028322 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/ketmanual/KeTCindyReferenceJ.pdfbin0 -> 2658951 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/ketmanual/KeTPicStyleE.pdfbin0 -> 67897 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/ketmanual/KeTPicStyleJ.pdfbin0 -> 118724 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/KetCindyPlugin/KetCindyPlugin.iml31
-rwxr-xr-xgraphics/ketcindy/ketcindyfolder/doc/source/KetCindyPlugin/build.xml67
-rwxr-xr-xgraphics/ketcindy/ketcindyfolder/doc/source/KetCindyPlugin/config/META-INF/services/de.cinderella.api.cs.CindyScriptPlugin1
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/KetCindyPlugin/src/KetCindyPlugin.java549
-rwxr-xr-xgraphics/ketcindy/ketcindyfolder/doc/source/KetCindyPlugin/srcold/KetCindyPlugin150906.java150
-rwxr-xr-xgraphics/ketcindy/ketcindyfolder/doc/source/KetCindyPlugin/srcold/KetCindyPlugin160515.java137
-rwxr-xr-xgraphics/ketcindy/ketcindyfolder/doc/source/KetCindyPlugin/srcold/KetCindyPlugin160518.java154
-rwxr-xr-xgraphics/ketcindy/ketcindyfolder/doc/source/KetCindyPlugin/srcold/KetCindyPlugin160530.java154
-rwxr-xr-xgraphics/ketcindy/ketcindyfolder/doc/source/KetCindyPlugin/srcold/KetCindyPlugin160601.java154
-rwxr-xr-xgraphics/ketcindy/ketcindyfolder/doc/source/KetCindyPlugin/srcold/KetCindyPlugin160604.java205
-rwxr-xr-xgraphics/ketcindy/ketcindyfolder/doc/source/KetCindyPlugin/srcold/KetCindyPlugin160609.java259
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/KetCindyPlugin/srcold/KetCindyPlugin160723.java269
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/KetCindyPlugin/srcold/KetCindyPlugin161019.java311
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/KetCindyPlugin/srcold/KetCindyPlugin161021.java330
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/KetCindyPlugin/srcold/KetCindyPlugin161209.java372
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/KetCindyPlugin/srcold/KetCindyPlugin170605.java377
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/KetCindyPlugin/srcold/KetCindyPlugin170906.java388
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/KetCindyPlugin/srcold/KetCindyPlugin171112.java399
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/cdy-templates/Makefile25
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/howtoinstall/HowToInstallE.tex70
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/howtoinstall/HowToInstallJ.tex68
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/3dscreen.pdfbin0 -> 64406 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/3dstart.pdfbin0 -> 68956 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/CindyhelpE.pdfbin0 -> 209302 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/Dotfill.tex245
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/FigE.tex25
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ForRef-Arrowhead-1.tex64
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ForRef-Arrowhead-10.tex24
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ForRef-Arrowhead-2.tex46
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ForRef-Arrowhead-3.tex46
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ForRef-Arrowhead-4.tex46
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ForRef-Arrowhead-5.tex43
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ForRef-Arrowhead-6.tex26
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ForRef-Arrowhead-7.tex24
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ForRef-Arrowhead-8.tex24
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ForRef-Arrowhead-9.tex21
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ForRef-Arrowhead-ya1.tex32
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/Framedata.pdfbin0 -> 4319 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/HatchZuKita1.tex128
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/HatchZuKita5E.tex50
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/HatchZuKita6E.tex72
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/HatchZuKita7.tex32
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/HatchZuKita7E.tex34
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/HatchZuKita8.tex82
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/HatchZuKita9.tex86
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/HatchZuKitaE.cdybin0 -> 4545 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/Intersectcurvsf.pdfbin0 -> 26868 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/IntersectsgpL0.pdfbin0 -> 67029 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/IntersectsgpL1.tex68
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/IntersectsgpL2.tex118
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/Nearestpt.tex71
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/Nearestpt1.tex57
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/PutcellE.tex75
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/addax1.tex44
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/addgraph.tex651
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/angle-mark.pdfbin0 -> 3344 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/angle.pdfbin0 -> 3215 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/anglemark.tex48
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/anglemark2.tex26
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/animestart.tex83
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/arrowdata.tex88
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/arrowhead.tex38
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/assign.tex361
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/bbdata.pdfbin0 -> 37091 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/bezier3d1.tex123
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/binvsnormal.tex94
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/bisector.pdfbin0 -> 3398 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/bowdata.tex74
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/bowdata2.tex240
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/boxframeslide.tex25
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/boxplot.tex115
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/boxplot01.tex63
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/calcbyr01.pdfbin0 -> 67743 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/calling.tex165
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/cardioid1.tex76
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/changetable.pdfbin0 -> 14207 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/checkCR.tex42
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/checkb10.tex175
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/checkb11.tex78
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/checkb8.tex75
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/checkb9.tex57
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/checkbe1.tex38
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/checkbe2.tex47
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/checkbe3.tex65
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/checkbe4.tex66
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/checkbe5.tex63
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/checkbe6.tex92
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/checkbe7.tex105
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/checkbe8.tex100
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/checkbmain.tex17
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/checkbs1.tex61
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/checkbs2.tex56
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/checkmc1.tex146
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/checksm1.tex112
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/checksm2.tex112
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/checksy1.tex104
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/checksy2.tex104
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/circle-by-radius.pdfbin0 -> 3356 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/circledata1.tex76
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/circledata2.tex51
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/circledata3.pdfbin0 -> 13886 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/circledata4.tex40
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/circledata5.tex26
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/coloring.pdfbin0 -> 32919 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/colortable.tex1767
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/concatobj.tex42
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/concept.tex892
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/conceptE.tex644
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/crosspoint.tex68
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/crvsfparadata1.tex74
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/crvsfparadata2.tex139
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/deffun01.tex41
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/deffun02.tex55
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/deffun03.tex41
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/delete.pdfbin0 -> 3227 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/deqplot1.tex56
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/deqplot2.tex56
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/deqplot3.tex69
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/derivative.tex63
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/diffeq1.pdfbin0 -> 36338 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/drawfigures1.tex748
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/drawpoint.tex14
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/drwxy.tex82
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ellipse-by-foci.pdfbin0 -> 3165 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ellipsecindy.pdfbin0 -> 28245 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ellipseplot1.tex92
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ellipseplot2.tex72
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/embed01.tex79
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/embed02.tex82
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/embed03.pdfbin0 -> 57123 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/enclosing.tex55
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ewns.tex43
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ewsn.tex99
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/execcmdc1.tex138
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/expr.tex70
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/exprrot.pdfbin0 -> 8423 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/exprrot.tex38
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/fontsize.tex70
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/fourier.tex99
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/fourierseries.tex79
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/frustume.tex71
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/frustumew.tex89
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/frustumewn.tex105
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/frustumw.tex55
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/gpro01.pdfbin0 -> 43561 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/gpro02.tex26
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/greenring.tex125
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/grid-less.pdfbin0 -> 3046 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/grid-more.pdfbin0 -> 3144 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/hatch.pdfbin0 -> 36368 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/hatch1.tex70
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/hatch2.tex126
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/hatch3.tex123
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/hatch4.tex111
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/hatch5.tex68
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/histgram.tex137
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/htickmark.cdybin0 -> 3838 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/htickmark.tex114
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/htickmark01.tex72
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/hyper1.tex145
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/hyperbola-by-foci.pdfbin0 -> 3185 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/implicit.cdybin0 -> 3840 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/implicit.tex94
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/implicit1.tex62
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/incenter01.pdfbin0 -> 46856 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/incenter02.pdfbin0 -> 105147 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/incenter02E.pdfbin0 -> 108684 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/incenter03.pdfbin0 -> 14267 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/intersectcrvs1.tex83
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/intersectcrvs2.tex83
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/intersection.pdfbin0 -> 3139 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/intlog.tex247
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/inversefun.tex48
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/invparapt.tex110
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/joincrvs.tex106
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/kobayashi.tex206
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/kobayashiE.tex206
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/letter.tex57
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/letter2.tex61
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/letter3d.tex70
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/letter4.tex545
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/lineplot.tex80
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/listplot1.tex10
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/listplot2.tex376
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/listplot3.tex94
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/listplot3view.pdfbin0 -> 21941 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/makeslide.tex252
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/maxfun01.tex49
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/maxfun02.tex75
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/maxima1.tex55
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/meshlab01.pdfbin0 -> 342320 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/meshlab02.pdfbin0 -> 46997 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/meshlab03.pdfbin0 -> 16211 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/meshlab06.pdfbin0 -> 17451 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/middle.pdfbin0 -> 3010 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/mirror.pdfbin0 -> 3295 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/mkpttable.tex595
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/mkpttableE.tex1084
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/move.pdfbin0 -> 3229 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/moviedata01.pdfbin0 -> 49649 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/moviedata02.pdfbin0 -> 21434 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/multi-add-circle.pdfbin0 -> 3381 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/multi-add-line.pdfbin0 -> 3115 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/multi-add-parallel.pdfbin0 -> 3312 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/multi-add-perp.pdfbin0 -> 3230 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/mvgaiyou01.pdfbin0 -> 50685 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/mxbatch.tex430
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/mxtex01.pdfbin0 -> 21280 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/mxtex01E.pdfbin0 -> 12962 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/mxtex02.tex18
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/mxtex03.tex64
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/nohiddenbyfaces1.tex101
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/nohiddenbyfaces2.tex56
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/numptcrv.pdfbin0 -> 15897 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/oresenex01.tex68
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ospline1.tex27
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ospline2.tex42
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ovaldata.tex123
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/parabola-by-foci.pdfbin0 -> 3194 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/parabola.tex335
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/parabolaplot.pdfbin0 -> 59989 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/parabolaplot.tex71
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/parabolaplotE.tex56
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/paramark.tex41
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/paramoncrv.tex118
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/paramplot1.tex40
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/paramplot2.tex77
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/partcrv.tex101
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/partcrv1.tex63
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/partcrv2.tex69
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/partcrv3.tex134
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/partcrv3d1.tex80
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/partcrv3d2.tex94
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/partcrv4.tex137
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/pdexample.tex49
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/pdtoconsole.pdfbin0 -> 18576 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/periodfun.tex289
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/periodfun2.tex286
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/perpplane.tex76
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/perppt.tex58
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/phparadata01.pdfbin0 -> 120655 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/phparadata02.tex118
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/phparadata03.tex272
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/phparadata04.tex34
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/plotdata1.tex37
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/plotdata2.tex40
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/plotdata3.tex100
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/plotdata4.tex62
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/plotdata5.tex79
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/plotdatar1.tex58
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/plotdatatan1.tex82
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/plotdatatan2.tex78
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/pointdata.tex32
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/pointoncrv.tex118
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/pointsize.tex43
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/poison01.tex87
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/polar-of-point.pdfbin0 -> 3080 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/polygon.pdfbin0 -> 3243 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/polygonplane1.tex126
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/polygonplane2.tex60
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/polygonplot1.tex26
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/polygonplot2.pdfbin0 -> 33291 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ptcrv.tex101
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ptselected01.pdfbin0 -> 17433 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ptselected02.pdfbin0 -> 19002 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ptstart.tex125
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/putcell.tex94
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/putcol.tex122
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/putcolE.tex122
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/putintersect.tex99
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/putoncurve.pdfbin0 -> 20091 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/putoncurve.tex48
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/putonline1.pdfbin0 -> 11703 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/putonseg.pdfbin0 -> 11784 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/rasen.tex84
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/readobj.tex64
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/reflectdata.tex161
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/reflectdata3d01.tex93
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/reflectdata3d02.tex125
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/reflectdata3d03.tex101
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/reflectpoint.tex128
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/rotatedata.tex126
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/rotatedata3d01.tex85
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/rotatedata3d02.tex85
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/rotatepoint.tex140
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/rshade.tex72
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ruler.tex66
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ruler1.tex74
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/s106bowhatch.tex173
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/s10diffint.tex177
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/s210diffeq1.tex76
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/s305graphforincanddec.tex50
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/s305incanddec.tex208
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/saddle1.tex326
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/saddle1E.tex181
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/saddle2E.tex379
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/scaledata.tex126
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/scaledata3d.tex113
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/scalepoint.tex95
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/scatter.tex154
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/segmark.tex52
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/segment.pdfbin0 -> 3003 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/select-lines.pdfbin0 -> 3275 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/select-points.pdfbin0 -> 2958 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/setax-theta.tex43
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/setcolor.pdfbin0 -> 8589 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/setorigin.pdfbin0 -> 22324 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/setorigin.tex37
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/setscaling.tex80
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/setwindow.pdfbin0 -> 18272 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/sf3ddata3.tex312
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/sf3ddata4.tex326
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/sfbdpara01.tex72
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/sfbdpara02.tex91
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/sfbdpara03.tex42
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/sfbdpara04.tex51
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/sfbdpara05.tex170
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/sfcut.tex85
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/shade.tex103
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/shade01.tex179
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/shade01E.tex72
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/shadeE.tex65
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/single-add.pdfbin0 -> 2841 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/skeletonparadata01.tex81
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/skeletonparadata02.tex76
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/skeletonparadata03.tex68
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/slide01.pdfbin0 -> 147197 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/slide01E.pdfbin0 -> 147643 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/slidepdf1.pdfbin0 -> 22662 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/slidepdf2.pdfbin0 -> 20879 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/slidepdf3.pdfbin0 -> 31028 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/slider.pdfbin0 -> 26292 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/sliderepeat.pdfbin0 -> 43429 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/sliderepeatE.pdfbin0 -> 41670 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/slidescreen.pdfbin0 -> 106194 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/slidescript.pdfbin0 -> 116962 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/slot.pdfbin0 -> 304044 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/slotE.pdfbin0 -> 130249 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/snap.pdfbin0 -> 3193 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/spacelinecurve1.tex80
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/spacelinecurve2.tex99
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/start01.pdfbin0 -> 323806 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/start02.pdfbin0 -> 29010 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/start03.pdfbin0 -> 36577 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/start04.pdfbin0 -> 40697 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/start05.pdfbin0 -> 39958 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/start06.pdfbin0 -> 40505 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/start07.pdfbin0 -> 39770 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/start08.pdfbin0 -> 40139 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/start09.pdfbin0 -> 54754 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/start10.pdfbin0 -> 19237 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/surfacemodel.tex2204
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/surfacemodelE.tex2204
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/tab2list00.pdfbin0 -> 31818 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/tab2list001.pdfbin0 -> 32382 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/tab2list001E.pdfbin0 -> 30279 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/tab2list01.pdfbin0 -> 21916 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/tab2list01E.pdfbin0 -> 42450 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/tab2list02.pdfbin0 -> 23862 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/tab2list02E.pdfbin0 -> 18487 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/tab2list03.pdfbin0 -> 61906 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/tab2list03E.pdfbin0 -> 33070 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/tab2list04.pdfbin0 -> 37888 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/tab2list04E.pdfbin0 -> 35367 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/table01.pdfbin0 -> 21238 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/table02.tex106
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/table03.pdfbin0 -> 21671 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/tablesample1.tex172
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/tablesample1E.tex184
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/tablesample2.tex258
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/tablesample2E.tex258
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/tangent.tex45
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/taylor.tex60
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/tetrahedron.tex138
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/translate-view.pdfbin0 -> 3217 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/translate01.tex53
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/translatedata.tex141
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/translatepoint.tex127
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/trimarrow.tex53
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/trimseg.tex49
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/vertex01.tex20
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/wire01.tex30
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/wire02.tex30
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/wire03.tex30
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/wire04.tex30
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/wirepara1.tex324
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/wirepara2.tex287
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/wirepara3.tex649
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/wirepara4.tex320
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/wirepara5.tex253
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/xsinx.tex86
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/xsinx01.pdfbin0 -> 44178 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/xsinx02.pdfbin0 -> 31120 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/xsinx03.pdfbin0 -> 32848 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/zogen3.tex196
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/zoom-in.pdfbin0 -> 3005 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/zoom-out.pdfbin0 -> 3013 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/KeTCindyGuideE.tex1100
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/KeTCindyGuideJ.tex583
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/KeTCindyReferenceE.tex5901
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/KeTCindyReferenceJ.tex8423
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/KeTPicStyleE.tex552
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/KeTPicStyleJ.tex572
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/readme/ReadmeLinuxE.tex109
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/readme/ReadmeLinuxJ.tex118
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/readme/ReadmeMacE.tex133
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/readme/ReadmeMacJ.tex183
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/readme/ReadmeWinE.tex135
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/readme/ReadmeWinJ.tex179
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/spacekc/SpacekcReferenceE.tex619
-rw-r--r--graphics/ketcindy/ketcindyfolder/doc/source/spacekc/SpacekcReferenceJ.tex831
-rw-r--r--graphics/ketcindy/ketcindyfolder/scripts/data/fontF/0Small.pngbin0 -> 44733 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/scripts/data/fontF/0Smalla-h.pngbin0 -> 53016 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/scripts/data/fontF/0Smalli-o.pngbin0 -> 50904 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/scripts/data/fontF/0Smallp-w.pngbin0 -> 50873 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/scripts/data/fontF/0Smallxyz.pngbin0 -> 25488 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/scripts/data/fontF/nsi.cdybin0 -> 150809 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/scripts/data/fontF/nsi.txt29
-rw-r--r--graphics/ketcindy/ketcindyfolder/scripts/data/fontF/pcr.cdybin0 -> 17929 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/scripts/data/fontF/pcr.txt26
-rw-r--r--graphics/ketcindy/ketcindyfolder/scripts/data/fontF/qcr.cdybin0 -> 17298 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/scripts/data/fontF/qcr.txt23
-rw-r--r--graphics/ketcindy/ketcindyfolder/scripts/data/fontF/rcr.cdybin0 -> 18491 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/scripts/data/fontF/rcr.txt34
-rw-r--r--graphics/ketcindy/ketcindyfolder/scripts/data/fontF/tsi.cdybin0 -> 149969 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/scripts/data/fontF/tsi.txt23
-rw-r--r--graphics/ketcindy/ketcindyfolder/scripts/data/fontF/xsi.cdybin0 -> 150258 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/scripts/data/fontF/xsi.txt26
-rw-r--r--graphics/ketcindy/ketcindyfolder/scripts/data/fontF/ysi.cdybin0 -> 150465 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/scripts/data/fontF/ysi.txt26
-rw-r--r--graphics/ketcindy/ketcindyfolder/scripts/data/fontF/zsi.cdybin0 -> 150287 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/scripts/data/fontF/zsi.txt28
-rw-r--r--graphics/ketcindy/ketcindyfolder/scripts/data/polyhedrons_obj/r01.obj8
-rw-r--r--graphics/ketcindy/ketcindyfolder/scripts/data/polyhedrons_obj/r02.obj14
-rw-r--r--graphics/ketcindy/ketcindyfolder/scripts/data/polyhedrons_obj/r03.obj14
-rw-r--r--graphics/ketcindy/ketcindyfolder/scripts/data/polyhedrons_obj/r04.obj32
-rw-r--r--graphics/ketcindy/ketcindyfolder/scripts/data/polyhedrons_obj/r05.obj32
-rw-r--r--graphics/ketcindy/ketcindyfolder/scripts/data/polyhedrons_obj/readme.pdfbin0 -> 8143 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/scripts/data/polyhedrons_obj/readme.txt3
-rw-r--r--graphics/ketcindy/ketcindyfolder/scripts/ketcindy.ini6
-rwxr-xr-xgraphics/ketcindy/ketcindyfolder/scripts/ketcindy.pl203
-rwxr-xr-xgraphics/ketcindy/ketcindyfolder/scripts/ketcindy.sh105
-rw-r--r--graphics/ketcindy/ketcindyfolder/scripts/ketcindyjs/3dlist.txt84
-rw-r--r--graphics/ketcindy/ketcindyfolder/scripts/ketcindyjs/Cindy.js809
-rw-r--r--graphics/ketcindy/ketcindyfolder/scripts/ketcindyjs/Cindy.js.map7
-rw-r--r--graphics/ketcindy/ketcindyfolder/scripts/ketcindyjs/CindyJS.css121
-rw-r--r--graphics/ketcindy/ketcindyfolder/scripts/ketcindyjs/basic1list.txt149
-rw-r--r--graphics/ketcindy/ketcindyfolder/scripts/ketcindyjs/basic2list.txt97
-rw-r--r--graphics/ketcindy/ketcindyfolder/scripts/ketcindyjs/basic3list.txt56
-rw-r--r--graphics/ketcindy/ketcindyfolder/scripts/ketcindyjs/ignoredfun.txt57
-rw-r--r--graphics/ketcindy/ketcindyfolder/scripts/ketcindyjs/katex-plugin.js296
-rw-r--r--graphics/ketcindy/ketcindyfolder/scripts/ketcindyjs/katex/fonts/KaTeX_Main-Regular.ttfbin0 -> 67996 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/scripts/ketcindyjs/katex/fonts/KaTeX_Main-Regular.woffbin0 -> 37620 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/scripts/ketcindyjs/katex/fonts/KaTeX_Main-Regular.woff2bin0 -> 31220 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/scripts/ketcindyjs/katex/fonts/KaTeX_Math-Italic.ttfbin0 -> 41448 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/scripts/ketcindyjs/katex/fonts/KaTeX_Math-Italic.woffbin0 -> 23820 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/scripts/ketcindyjs/katex/fonts/KaTeX_Math-Italic.woff2bin0 -> 20432 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/scripts/ketcindyjs/katex/katex.min.css1
-rw-r--r--graphics/ketcindy/ketcindyfolder/scripts/ketcindyjs/katex/katex.min.js5
-rw-r--r--graphics/ketcindy/ketcindyfolder/scripts/ketcindyjs/makefunlist.cdybin0 -> 5516 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/scripts/ketcindyjs/webfont.js45
-rwxr-xr-xgraphics/ketcindy/ketcindyfolder/scripts/ketlib/ketcindylib3dhelpE.txt29
-rwxr-xr-xgraphics/ketcindy/ketcindyfolder/scripts/ketlib/ketcindylib3dhelpJ.txt44
-rw-r--r--graphics/ketcindy/ketcindyfolder/scripts/ketlib/ketcindylib3dlogr.txt190
-rw-r--r--graphics/ketcindy/ketcindyfolder/scripts/ketlib/ketcindylib3dr.cs5132
-rw-r--r--graphics/ketcindy/ketcindyfolder/scripts/ketlib/ketcindylibbasic1logr.txt370
-rw-r--r--graphics/ketcindy/ketcindyfolder/scripts/ketlib/ketcindylibbasic1r.cs5422
-rw-r--r--graphics/ketcindy/ketcindyfolder/scripts/ketlib/ketcindylibbasic2logr.txt361
-rw-r--r--graphics/ketcindy/ketcindyfolder/scripts/ketlib/ketcindylibbasic2r.cs5260
-rw-r--r--graphics/ketcindy/ketcindyfolder/scripts/ketlib/ketcindylibbasic3logr.txt61
-rw-r--r--graphics/ketcindy/ketcindyfolder/scripts/ketlib/ketcindylibbasic3r.cs4162
-rwxr-xr-xgraphics/ketcindy/ketcindyfolder/scripts/ketlib/ketcindylibhelpE.txt115
-rwxr-xr-xgraphics/ketcindy/ketcindyfolder/scripts/ketlib/ketcindylibhelpJ.txt136
-rwxr-xr-xgraphics/ketcindy/ketcindyfolder/scripts/ketlib/ketcindylibmvhelpE.txt2
-rwxr-xr-xgraphics/ketcindy/ketcindyfolder/scripts/ketlib/ketcindylibmvhelpJ.txt2
-rw-r--r--graphics/ketcindy/ketcindyfolder/scripts/ketlib/ketcindylibmvlogr.txt68
-rwxr-xr-xgraphics/ketcindy/ketcindyfolder/scripts/ketlib/ketcindylibmvr.cs660
-rw-r--r--graphics/ketcindy/ketcindyfolder/scripts/ketlib/ketcindyliboutlogr.txt232
-rw-r--r--graphics/ketcindy/ketcindyfolder/scripts/ketlib/ketcindyliboutr.cs6634
-rw-r--r--graphics/ketcindy/ketcindyfolder/scripts/ketlib/ketpicR/ketpic5_2_4.r14413
-rwxr-xr-xgraphics/ketcindy/ketcindyfolder/scripts/ketlib/ketpiccurrent.r14960
-rwxr-xr-xgraphics/ketcindy/ketcindyfolder/scripts/ketlib/ketpiccurrent_rep2e.r531
-rw-r--r--graphics/ketcindy/ketcindyfolder/scripts/ketlib/ketpiccurrent_reptikz.r705
-rw-r--r--graphics/ketcindy/ketcindyfolder/scripts/ketlib/maximaL/fourier_sec.max260
-rw-r--r--graphics/ketcindy/ketcindyfolder/scripts/ketlib/maximaL/matoperation.max47
-rw-r--r--graphics/ketcindy/ketcindyfolder/scripts/ketlib/maximaL/pdefourier.mac1199
-rw-r--r--graphics/ketcindy/ketcindyfolder/scripts/ketlib/maximaL/poincare.mac71
-rw-r--r--graphics/ketcindy/ketcindyfolder/scripts/ketlib/maximaL/rkfun.lisp99
-rw-r--r--graphics/ketcindy/ketcindyfolder/scripts/ketlib/oshima/os_muldif.pdfbin0 -> 2278676 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/scripts/ketlib/oshima/os_muldif.rr19295
-rw-r--r--graphics/ketcindy/ketcindyfolder/scripts/ketlibC/ketcommon.h2418
-rw-r--r--graphics/ketcindy/ketcindyfolder/scripts/ketlibC/ketcommonhead.h112
-rw-r--r--graphics/ketcindy/ketcindyfolder/scripts/ketlibC/ketlibClog.txt38
-rw-r--r--graphics/ketcindy/ketcindyfolder/scripts/ketlibC/surflib.h2074
-rw-r--r--graphics/ketcindy/ketcindyfolder/scripts/ketlibC/surflibhead.h56
-rw-r--r--graphics/ketcindy/ketcindyfolder/scripts/ketoutset.txt48
-rwxr-xr-xgraphics/ketcindy/ketcindyfolder/scripts/setketcindy.txt13
-rwxr-xr-xgraphics/ketcindy/ketcindyfolder/style/ketlayer.sty2836
-rw-r--r--graphics/ketcindy/ketcindyfolder/style/ketlayer2e.sty3155
-rw-r--r--graphics/ketcindy/ketcindyfolder/style/ketmedia.sty108
-rw-r--r--graphics/ketcindy/ketcindyfolder/style/ketpic.sty844
-rw-r--r--graphics/ketcindy/ketcindyfolder/style/ketpic2e.sty699
-rw-r--r--graphics/ketcindy/ketcindyfolder/style/ketslide.sty151
-rw-r--r--graphics/ketcindy/ketcindyfolder/style/ketslide2.sty151
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/Scriptkelib.txt4
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/allbuttons.cdybin0 -> 5408 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/ketcindy.conf2
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s01figure/s0101figure.cdybin0 -> 4880 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s01figure/s0101figurepdf.cdybin0 -> 4730 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s01figure/s0102figure2.cdybin0 -> 5957 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s01figure/s0103polygon.cdybin0 -> 4767 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s01figure/s0104shade.cdybin0 -> 6189 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s01figure/s0105vector.cdybin0 -> 5607 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s01figure/s0106bowdotfill.cdybin0 -> 6270 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s01figure/s0106bowhatch.cdybin0 -> 6326 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s01figure/s0107hyperbolahatch.cdybin0 -> 4929 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s01figure/s0108cycloid.cdybin0 -> 4930 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s01figure/s0109epitrochoid.cdybin0 -> 5020 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s01figure/s0110hypotrochoid.cdybin0 -> 5164 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s02graph/s0201basic.cdybin0 -> 4265 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s02graph/s0202graph1.cdybin0 -> 4997 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s02graph/s0203graph2.cdybin0 -> 5137 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s02graph/s0204graph3.cdybin0 -> 5035 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s02graph/s0205coniccurve.cdybin0 -> 5171 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s02graph/s0206defexp.cdybin0 -> 5135 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s02graph/s0207envelope.cdybin0 -> 4707 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s02graph/s0208intersecthatch.cdybin0 -> 4672 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s02graph/s0209diffeq.cdybin0 -> 4832 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s02graph/s0210diffeq2.cdybin0 -> 5175 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s02graph/s0212implicit.cdybin0 -> 4669 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s02graph/s0213implicithatch.cdybin0 -> 5331 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s02graph/s0214inputvalue.cdybin0 -> 5710 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s02graph/s0215quacurve.cdybin0 -> 9243 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s03table/s0301table.cdybin0 -> 3976 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s03table/s0302table2.cdybin0 -> 4611 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s03table/s0302table2line.cdybin0 -> 3934 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s03table/s0303gridpaper.cdybin0 -> 5083 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s03table/s0303gridpaper1.cdybin0 -> 4083 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s03table/s0303gridpaperlog.cdybin0 -> 5204 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s03table/s0303gridpaperloglog.cdybin0 -> 6135 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s03table/s0304graphforincanddec.cdybin0 -> 4181 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s03table/s0304multitables.cdybin0 -> 4057 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s03table/s0305twotables.cdybin0 -> 3959 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s03table/s0306tenkey.cdybin0 -> 6922 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s04bezier/dogwalk.pngbin0 -> 118714 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s04bezier/heart.pngbin0 -> 66003 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s04bezier/mtfuji.pngbin0 -> 9171 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s04bezier/s0401bezierbasic.cdybin0 -> 7102 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s04bezier/s0402ospline.cdybin0 -> 4891 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s04bezier/s0403oshimaspline.cdybin0 -> 3966 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s04bezier/s0403osplinecrspline.cdybin0 -> 4622 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s04bezier/s0404heart.cdybin0 -> 84471 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s04bezier/s0405dogwalk.cdybin0 -> 73052 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s04bezier/s0406mtfuji.cdybin0 -> 12644 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s05spacefigure/DownloadPolyhedrons_objE.txt9
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s05spacefigure/DownloadPolyhedrons_objJ.txt10
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s05spacefigure/s0501basic.cdybin0 -> 5997 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s05spacefigure/s0501plane.cdybin0 -> 8196 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s05spacefigure/s0502spacecurve.cdybin0 -> 5747 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s05spacefigure/s0503perp.cdybin0 -> 6028 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s05spacefigure/s0504embed.cdybin0 -> 6109 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s05spacefigure/s0505bezier3d.cdybin0 -> 6951 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s05spacefigure/s0506embedhatch.cdybin0 -> 6140 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s05spacefigure/s0507polyhedron.cdybin0 -> 6637 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s05spacefigure/s0508concatobj.cdybin0 -> 4298 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s05spacefigure/s0509cubiccut.cdybin0 -> 6258 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s05spacefigure/s0510cubiccut2.cdybin0 -> 8450 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s05spacefigure/s0511tetra.cdybin0 -> 6963 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s05spacefigure/s0521totaldiffskeleton.cdybin0 -> 6266 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s05spacefigure/s0522conecutmaxima.cdybin0 -> 7534 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s06animation/s0601cycloid.cdybin0 -> 5556 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s06animation/s0602diffeq.cdybin0 -> 5598 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s06animation/s0603envelope.cdybin0 -> 5440 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s06animation/s0604diffeq2.cdybin0 -> 5781 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s06animation/s0605cycloid2.cdybin0 -> 5825 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s06animation/s0606epitrochoid.cdybin0 -> 5848 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s06animation/s0607hypotrochoid.cdybin0 -> 5843 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s06animation/s0608ellipsefocus.cdybin0 -> 7037 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s06animation/s0609hyperbolafocus.cdybin0 -> 7171 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s06animation/s0610parabolafocus.cdybin0 -> 6975 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s06animation/s0611generalangle.cdybin0 -> 5417 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s07slides/figwall/wallpaper.tex12
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s07slides/howtouseslideE.txt79
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s07slides/howtouseslideJ.txt140
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s07slides/s0701basic.cdybin0 -> 4885 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s07slides/s0701basic.txt24
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s07slides/s0701basicE.cdybin0 -> 4890 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s07slides/s0701basicE.txt24
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s07slides/s0702graph.cdybin0 -> 5306 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s07slides/s0702graph.txt28
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s07slides/s0702graphE.cdybin0 -> 5750 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s07slides/s0702graphE.txt23
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s07slides/s0703repeat.cdybin0 -> 5757 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s07slides/s0703repeat.txt36
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s07slides/s0703repeatE.cdybin0 -> 5342 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s07slides/s0703repeatE.txt35
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s07slides/s0704thin.cdybin0 -> 4848 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s07slides/s0704thin.txt45
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s07slides/s0704thinE.cdybin0 -> 4816 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s07slides/s0704thinE.txt16
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s07slides/s0705para.cdybin0 -> 5908 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s07slides/s0705para.txt12
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s07slides/s0705paraE.cdybin0 -> 5785 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s07slides/s0705paraE.txt11
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s07slides/s0706animate.cdybin0 -> 5978 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s07slides/s0706animate.txt21
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s07slides/s0706animateE.cdybin0 -> 5827 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s07slides/s0706animateE.txt21
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s08R/s0801plotR.cdybin0 -> 4922 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s08R/s0802plotR2.cdybin0 -> 5109 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s08R/s0803plotdiscR.cdybin0 -> 4925 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s08R/s0804boxplot.cdybin0 -> 4787 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s08R/s0805histplot.cdybin0 -> 4881 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s08R/s0806random.cdybin0 -> 3786 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s08R/s0807dataframe.cdybin0 -> 3840 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s08R/s0808ttest.cdybin0 -> 3938 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s09surfaceC/s0901paraboloid.cdybin0 -> 5285 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s09surfaceC/s0902cone.cdybin0 -> 5210 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s09surfaceC/s0903saddle.cdybin0 -> 5180 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s09surfaceC/s0904mant.cdybin0 -> 5240 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s09surfaceC/s0905sphere.cdybin0 -> 5220 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s09surfaceC/s0906curveonsurf.cdybin0 -> 5278 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s09surfaceC/s0907intersectcrvsf.cdybin0 -> 5332 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s09surfaceC/s0908wiredata.cdybin0 -> 5281 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s09surfaceC/s0909conecut.cdybin0 -> 5274 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s09surfaceC/s0910multisurfaces.cdybin0 -> 5290 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s09surfaceC/s0911saddleskeleton.cdybin0 -> 5219 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s09surfaceC/s0912animesaddle.cdybin0 -> 6105 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s09surfaceC/s0913animeparaboloid.cdybin0 -> 6979 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s09surfaceC/s0914animemobius.cdybin0 -> 6939 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s09surfaceC/s0915discont.cdybin0 -> 5226 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s09surfaceC/s0916multiandcut.cdybin0 -> 5276 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s10maxima/s1001basic.cdybin0 -> 4701 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s10maxima/s1001factorial.cdybin0 -> 4834 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s10maxima/s1002equation.cdybin0 -> 4529 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s10maxima/s1003trig.cdybin0 -> 4569 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s10maxima/s1004calcby.cdybin0 -> 4751 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s10maxima/s1005diffint.cdybin0 -> 4508 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s10maxima/s1005intplot.cdybin0 -> 4865 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s10maxima/s1006calculus.cdybin0 -> 4616 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s10maxima/s1007linalg.cdybin0 -> 4805 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s10maxima/s1008idtable.cdybin0 -> 4888 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s10maxima/s1009diffeq.cdybin0 -> 4778 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s10maxima/s1010fourier.cdybin0 -> 4971 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s10maxima/s1011matrixop.cdybin0 -> 5640 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s10maxima/s1012for.cdybin0 -> 4562 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s10maxima/s1012odefor.cdybin0 -> 5103 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s10maxima/s1013incdec.cdybin0 -> 5214 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s10maxima/s1014primenumber.cdybin0 -> 4615 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s11asir/s1100list.cdybin0 -> 5386 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s11asir/s1101calculator1.cdybin0 -> 5458 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s11asir/s1102calculator2.cdybin0 -> 5448 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s11asir/s1103calcby.cdybin0 -> 5470 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s11asir/s1104diff.cdybin0 -> 5481 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s11asir/s1105fint101.cdybin0 -> 5513 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s11asir/s1105fzero109.cdybin0 -> 5462 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s11asir/s1106fmmx110.cdybin0 -> 5450 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s11asir/s1110integrate.cdybin0 -> 5593 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s11asir/s1111grobner1.cdybin0 -> 4171 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s11asir/s1112residue.cdybin0 -> 5778 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s12fricas/s1201integrate.cdybin0 -> 5669 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s12fricas/s1201integrate2.cdybin0 -> 5406 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s12fricas/s1202calcby.cdybin0 -> 4217 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s12fricas/s1202equations.cdybin0 -> 4282 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s13objview/s1301basic.cdybin0 -> 5284 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s13objview/s1303objparts.cdybin0 -> 5550 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s13objview/s1304symbol.cdybin0 -> 5376 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s13objview/s1305hyperpara.cdybin0 -> 5411 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s13objview/s1306poly.cdybin0 -> 6954 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s13objview/s1307poly2.cdybin0 -> 8224 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s13objview/s1308discont.cdybin0 -> 5744 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s13objview/s1309discont2.cdybin0 -> 5953 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s13objview/s1310totaldiff.cdybin0 -> 4610 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s13objview/s1311plate.cdybin0 -> 6679 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s13objview/s1312plane.cdybin0 -> 7326 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s13objview/s1313changescale.cdybin0 -> 8571 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s14dataprocessing/s1401csvprocessing.cdybin0 -> 5534 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s14dataprocessing/s1402copypaste.cdybin0 -> 6247 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s14dataprocessing/s1403maketableJ.cdybin0 -> 9346 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s14dataprocessing/sample1.csv10
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s14dataprocessing/sample2.csv10
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s15surfaceR/s1501paraboloidR.cdybin0 -> 5287 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s15surfaceR/s1502coneR.cdybin0 -> 5290 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s15surfaceR/s1503saddleR.cdybin0 -> 5186 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s15surfaceR/s1504mantR.cdybin0 -> 5222 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s15surfaceR/s1505sphereR.cdybin0 -> 5207 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s15surfaceR/s1506curveonsurfR.cdybin0 -> 5277 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s15surfaceR/s1507intersectcrvsfR.cdybin0 -> 5469 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s15surfaceR/s1508multisurfacesR.cdybin0 -> 5252 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s15surfaceR/s1509wiredataR.cdybin0 -> 5237 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s15surfaceR/s1510conecutR.cdybin0 -> 5250 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s16ketJSmisc/howtouseketcindyjsE.txt24
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s16ketJSmisc/howtouseketcindyjsJ.txt24
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s16ketJSmisc/s1601basic.cdybin0 -> 3904 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s16ketJSmisc/s1602diffeq2.cdybin0 -> 4861 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s16ketJSmisc/s1603gamow.cdybin0 -> 4995 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s16ketJSmisc/s1604putoncurve.cdybin0 -> 4948 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s16ketJSmisc/s1605triangle.cdybin0 -> 4032 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s16ketJSmisc/s1606morley.cdybin0 -> 4885 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s16ketJSmisc/s1607inputbox.cdybin0 -> 4469 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s16ketJSmisc/s1608texcalc.cdybin0 -> 5255 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s16ketJSmisc/s1609trigratio.cdybin0 -> 5730 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s17spacekc/ReadmeE.txt6
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s17spacekc/ReadmeJ.txt6
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s17spacekc/Spacekc.cdybin0 -> 12099 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s17spacekc/Spacekc.pdfbin0 -> 265937 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/samples/s17spacekc/SpacekcReference.pdfbin0 -> 112718 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/template0.cdybin0 -> 4402 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/template1basic.cdybin0 -> 4889 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/template3Dfigure.cdybin0 -> 6592 bytes
-rw-r--r--graphics/ketcindy/ketcindyfolder/work/template4ketcindyjs.cdybin0 -> 5146 bytes
717 files changed, 156994 insertions, 0 deletions
diff --git a/graphics/ketcindy/ketcindyfolder/doc/ketmanual/KeTCindyGuideE.pdf b/graphics/ketcindy/ketcindyfolder/doc/ketmanual/KeTCindyGuideE.pdf
new file mode 100644
index 0000000000..f37232ef1e
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/ketmanual/KeTCindyGuideE.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/ketmanual/KeTCindyGuideJ.pdf b/graphics/ketcindy/ketcindyfolder/doc/ketmanual/KeTCindyGuideJ.pdf
new file mode 100644
index 0000000000..44fd8f0530
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/ketmanual/KeTCindyGuideJ.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/ketmanual/KeTCindyReferenceE.pdf b/graphics/ketcindy/ketcindyfolder/doc/ketmanual/KeTCindyReferenceE.pdf
new file mode 100644
index 0000000000..adf119eae9
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/ketmanual/KeTCindyReferenceE.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/ketmanual/KeTCindyReferenceJ.pdf b/graphics/ketcindy/ketcindyfolder/doc/ketmanual/KeTCindyReferenceJ.pdf
new file mode 100644
index 0000000000..a24668ebcd
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/ketmanual/KeTCindyReferenceJ.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/ketmanual/KeTPicStyleE.pdf b/graphics/ketcindy/ketcindyfolder/doc/ketmanual/KeTPicStyleE.pdf
new file mode 100644
index 0000000000..5c8a3c7feb
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/ketmanual/KeTPicStyleE.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/ketmanual/KeTPicStyleJ.pdf b/graphics/ketcindy/ketcindyfolder/doc/ketmanual/KeTPicStyleJ.pdf
new file mode 100644
index 0000000000..f251a35572
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/ketmanual/KeTPicStyleJ.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/KetCindyPlugin/KetCindyPlugin.iml b/graphics/ketcindy/ketcindyfolder/doc/source/KetCindyPlugin/KetCindyPlugin.iml
new file mode 100644
index 0000000000..2ecc1971e3
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/KetCindyPlugin/KetCindyPlugin.iml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module relativePaths="true" type="JAVA_MODULE" version="4">
+ <component name="NewModuleRootManager" inherit-compiler-output="false">
+ <output url="file://$MODULE_DIR$/classes" />
+ <exclude-output />
+ <content url="file://$MODULE_DIR$">
+ <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
+ </content>
+ <orderEntry type="inheritedJdk" />
+ <orderEntry type="sourceFolder" forTests="false" />
+ <orderEntry type="module-library" scope="PROVIDED">
+ <library>
+ <CLASSES>
+ <root url="jar:///private/tmp/KetCindyPlugin/lib/cindy2.jar!/" />
+ </CLASSES>
+ <JAVADOC />
+ <SOURCES />
+ </library>
+ </orderEntry>
+ <orderEntry type="module-library">
+ <library>
+ <CLASSES>
+ <root url="jar:///private/tmp/KetCindyPlugin/lib/commons-math.jar!/" />
+ </CLASSES>
+ <JAVADOC />
+ <SOURCES />
+ </library>
+ </orderEntry>
+ </component>
+</module>
+
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/KetCindyPlugin/build.xml b/graphics/ketcindy/ketcindyfolder/doc/source/KetCindyPlugin/build.xml
new file mode 100755
index 0000000000..2f3eeff2c6
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/KetCindyPlugin/build.xml
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="ExamplePlugin" default="copy">
+
+ <target name="init" description="setup paths">
+ <mkdir dir="target"/>
+ <property name="cindy2jar" location="lib/cindy2.jar"/>
+ <property name="pluginfolder" location="target/Plugins"/>
+ <property name="plugin" location="KetCindyPlugin.jar"/>
+ <mkdir dir="target/Plugins"/>
+ </target>
+ <path id="libraries">
+ <fileset dir="lib" includes="*.jar"/>
+ </path>
+
+ <!-- no changes necessary below this line -->
+
+
+ <target name="compile" depends="init" description="compile Example Plugin for Cinderella">
+ <mkdir dir="target/classes"/>
+ <javac encoding="utf-8" debug="on" optimize="on"
+ srcdir="src" destdir="target/classes" target="1.6"
+ source="1.6">
+ <classpath>
+ <pathelement location="${cindy2jar}"/>
+ <path refid="libraries"/>
+ </classpath>
+ </javac>
+ </target>
+
+ <target name="build" depends="compile" description="create the complete jRealityPlugin for Cinderella">
+
+ <delete file="${plugin}"/>
+
+ <!-- add compiled classes -->
+ <jar basedir="target/classes" destfile="${plugin}" includes="**/*">
+ </jar>
+
+ <!-- add class path -->
+ <pathconvert property="mf.classpath" pathsep=" ">
+ <path refid="libraries"/>
+ <flattenmapper/>
+ </pathconvert>
+ <jar destfile="${plugin}" update="true" index="true">
+ <manifest>
+ <attribute name="Class-Path" value="${mf.classpath}"/>
+ </manifest>
+ <zipgroupfileset dir="lib" includes="*.jar">
+ <exclude name="cindy2.jar"/>
+ </zipgroupfileset>
+ </jar>
+
+ <!-- Add services file -->
+ <jar destfile="${plugin}" basedir="config" update="true">
+ <file file="META-INF/services/de.cinderella.api.cs.CindyScriptPlugin"/>
+ </jar>
+ </target>
+
+ <target name="copy" depends="build" description="Copy plugin to Plugins folder">
+ <copy file="${plugin}" todir="${pluginfolder}"/>
+ </target>
+
+
+ <target name="clean">
+ <delete dir="target"/>
+ </target>
+
+</project> \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/KetCindyPlugin/config/META-INF/services/de.cinderella.api.cs.CindyScriptPlugin b/graphics/ketcindy/ketcindyfolder/doc/source/KetCindyPlugin/config/META-INF/services/de.cinderella.api.cs.CindyScriptPlugin
new file mode 100755
index 0000000000..66f6d6c326
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/KetCindyPlugin/config/META-INF/services/de.cinderella.api.cs.CindyScriptPlugin
@@ -0,0 +1 @@
+KetCindyPlugin
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/KetCindyPlugin/src/KetCindyPlugin.java b/graphics/ketcindy/ketcindyfolder/doc/source/KetCindyPlugin/src/KetCindyPlugin.java
new file mode 100644
index 0000000000..a202817b68
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/KetCindyPlugin/src/KetCindyPlugin.java
@@ -0,0 +1,549 @@
+import de.cinderella.api.cs.CindyScript;
+import de.cinderella.api.cs.CindyScriptPlugin;
+import org.apache.commons.math.linear.MatrixUtils;
+import org.apache.commons.math.linear.RealMatrix;
+
+import java.awt.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.io.*;
+import java.util.Date;
+import java.nio.file.Files;
+
+public class KetCindyPlugin extends CindyScriptPlugin {
+
+ @CindyScript("ketjavaversion")
+ public String ketjavaversion() {
+ return "Ketjava 20181125";
+ }
+
+ public String getName() {
+ return "KetCindy Plugin";
+ }
+
+ public String getAuthor() {
+ return "The KetCindy Project Team";
+ }
+
+ @CindyScript("systemproperty")
+ public String getUserID(String s) {
+ return System.getProperty(s);
+ }
+
+ @CindyScript("square")
+ public double quadrieren(double x) {
+ return x * x;
+ }
+
+ @CindyScript("grayvalue")
+ public double getGray(Color c) {
+ return (c.getBlue() + c.getRed() + c.getGreen()) / 3.;
+ }
+
+ @CindyScript("isincludefull")//180331
+ public static boolean isincludefull(String str){
+ char[] chars = str.toCharArray();
+ for (int i = 0; i < chars.length; i++) {
+ if (String.valueOf(chars[i]).getBytes().length==2) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ @CindyScript("getdir")
+ public String getdir() {
+ return System.getProperty("user.dir");
+ }
+
+ @CindyScript("gethome")
+ public String gethome() {
+ return System.getProperty("user.home");
+ }
+
+ @CindyScript("getname")
+ // 17.10.08
+ public String getname() {
+ return System.getProperty("user.name");
+ }
+
+ @CindyScript("iswindows")
+ public static boolean iswindows(){
+ String os=System.getProperty("os.name").toLowerCase();
+ if(os!=null && os.startsWith("windows")){
+ return true;
+ }
+ else{
+ return false;
+ }
+ }
+
+ @CindyScript("ismacosx")
+ public static boolean ismacosx(){
+ String os=System.getProperty("os.name").toLowerCase();
+ if(os!=null && os.startsWith("mac")){
+ return true;
+ }
+ else{
+ return false;
+ }
+ }
+ @CindyScript("islinux")
+ public static boolean islinux(){
+ String os=System.getProperty("os.name").toLowerCase();
+ if(os!=null && os.startsWith("linux")){
+ return true;
+ }
+ else{
+ return false;
+ }
+ }
+
+ @CindyScript("iswin")
+ public static boolean iswin() {
+ String OS_NAME = System.getProperty("os.name").toLowerCase();
+ return OS_NAME.startsWith("windows");
+ }
+
+ @CindyScript("kc")
+ public static String kc(String args){
+ return "Improper call";
+ }
+
+ @CindyScript("nkfwin") //180408
+ public static String nkfwin(String path,String dir,String fn1,String fn2)
+ throws IOException {
+ String src="\""+dir+"\\"+fn1+"\"";
+ String out="\""+dir+"\\"+fn2+"\"";
+ ProcessBuilder pb = new ProcessBuilder();
+ pb.command("cmd","/c","\""+path+"\\nkf32\"","-s","<"+src,">"+out);
+ Process process = pb.start();
+ return out+" generated";
+ }
+
+ @CindyScript("kc")
+ public static String kc(String args,String args2,String args3) throws IOException {
+ ProcessBuilder pb = new ProcessBuilder();
+ File f = new File(args);
+ int flg=0;
+ int pos=0;
+ String kst="";
+ BufferedReader br = new BufferedReader(new FileReader(f));
+ String str;
+ while((str = br.readLine()) != null){
+ if(str.indexOf("*")>-1|| str.indexOf("?")>-1){
+ flg=1;
+ }
+ else{
+ str=str.toUpperCase();
+ str=str.replaceAll("\""," "); /* 16.06.08 */
+ if(str.indexOf("RM ")>-1 || str.indexOf("DEL ")>-1){
+ //16.07.21from
+ if(str.indexOf(".DVI")==-1 && str.indexOf(".TXT")==-1){
+ flg=2;
+ }
+ // 16.07.21upto
+ }
+// if(str.indexOf("MV ")>-1 || str.indexOf("MOVE ")>-1){
+ if(str.indexOf("MV ")>-1){ /*180727*/
+ flg=3;
+ }
+ if(str.indexOf("RD ")>-1 || str.indexOf("RMDIR ")>-1){
+ flg=4;
+ }
+ // 16.04.09from
+ if(str.indexOf("SHUTDOWN ")>-1 || str.indexOf("SLEEP ")>-1){
+ flg=5;
+ }
+ if(str.indexOf("CLEAR ")>-1 || str.indexOf("CLS ")>-1){
+ flg=6;
+ }
+ if(str.indexOf("FTP ")>-1|| str.indexOf("TELNET ")>-1){
+ flg=7;
+ }
+ if(str.indexOf("USERMOD ")>-1 || str.indexOf("USERDEL ")>-1){
+ flg=8;
+ }
+ if(str.indexOf("USERADD ")>-1 || str.indexOf("USERMOD ")>-1){
+ flg=9;
+ }
+ if(str.indexOf("CHMOD ")>-1){
+ if(str.indexOf("CHMOD +")==-1){
+ flg=10;
+ }
+ }
+ if(str.indexOf("CRONTAB ")>-1 || str.indexOf("KILL ")>-1){
+ flg=11;
+ }
+ if(str.indexOf("AT ")>-1){
+ pos=str.indexOf("AT ");
+ if(pos==0){
+ flg=12;
+ }
+ else{
+ kst=str.substring(pos-1,pos);
+ if(!kst.equals("B")){
+ flg=12;
+ }
+ }
+ // 16.04.09upto
+ }
+// if(str.indexOf("PATH ")>-1 || str.indexOf("PAUSE ")>-1 || str.indexOf("ARP ")>-1){
+ if(str.indexOf("PAUSE ")>-1 || str.indexOf("ARP ")>-1){
+ flg=13;
+ }
+ if(str.indexOf("RENAME ")>-1 || str.indexOf("START ")>-1){
+ flg=14;
+ }
+ // 16.07.21
+ if(str.indexOf(".SH")>-1|| str.indexOf(".SH")>-1 || str.indexOf(".BAT")>-1){
+ //181125
+ if(str.indexOf("MAXIMA.")==-1 && str.indexOf("KC.")==-1){ /* 2016.07.22 */
+ flg=15;
+ }
+ }
+ }
+ if(flg>0){
+ br.close();
+ return "Improper file "+String.valueOf(flg)+" "+str;
+ }
+ }
+ br.close();
+ // 16.06.05from
+ Long tm=System.currentTimeMillis()-f.lastModified();
+ if(tm>10000 || tm<0){ /* 16.06.08 */
+ flg=50;
+ return "Time expired";
+ }
+ if((args.indexOf("kc.")==-1|| args2.indexOf("ketlib")==-1) || args3.indexOf(".t")==-1){
+ flg=60;
+ return "Improper form";
+ }
+ if(flg==0){
+ if(iswindows()){
+ if((args.indexOf(" ")==-1)&&(args.indexOf("-")==-1)
+ &&(args.indexOf(" ")==-1)){ //180405
+ pb.command("cmd.exe","/c","start",args);
+ }else{
+ pb.command("cmd.exe","/c","","\""+args+"\"");//180331to
+ }
+ }
+ else{
+ if(ismacosx()){
+ if(args2.indexOf("open")>-1){ /* 2016.06.07from */
+ pb.command("open",args);
+ }
+ else{
+ pb.command("sh",args);
+ } /* 2016.06.07upto */
+ }
+ else{
+ pb.command("sh",args);
+ }
+ }
+ }
+ Process process = pb.start();
+ return "Normal end";
+ // 16.06.05upto
+ }
+
+ @CindyScript("ispaulvisiting")
+ public static boolean ispaulvisiting() {
+ return true;
+ }
+
+ @CindyScript("texv")
+ public static void texv( String s, String d, String sf, String tf) throws Exception{
+ ProcessBuilder pb = new ProcessBuilder();
+ String[] cmd = {s,d,sf,tf};
+ pb.command(cmd);
+ Process process = pb.start();
+ return ;
+ }
+
+ @CindyScript("givemeamatrix2")
+ public static Object givemeamatrix2() {
+ try {
+ return "the Matrix: " + theGiveMeAMatrix().toString();
+ } catch (Throwable e) {
+ e.printStackTrace();
+ return "no Matrix: " + e.toString();
+ }
+ }
+
+ public static Object theGiveMeAMatrix() {
+ double[][] matrixData = { {1d,2d,3d}, {2d,5d,3d}};
+ RealMatrix m = MatrixUtils.createRealMatrix(matrixData);
+ return m;
+ }
+
+ @CindyScript("getdirhead")
+ public static String getdirhead(){
+ if(iswindows()){
+ return System.getProperty("user.home")+"\\ketcindy";
+ }
+ else if(ismacosx()){
+ return System.getProperty("user.home")+"/ketcindy";
+ }
+ else if(islinux()){
+ return System.getProperty("user.home")+"/ketcindy";
+ // "/usr/share/ketcindy";
+ }
+ else{
+ return "unknown";
+ }
+ }
+
+ @CindyScript("getdirhead")
+ public static String getdirhead(String dir){
+ if(iswindows()){
+ return dir+"\\ketcindy";
+ }
+ else if(ismacosx()){
+ return dir+"/ketcindy";
+ }
+ else if(islinux()){
+ return dir+"/ketcindy";
+ }
+ else{
+ return "unknown";
+ }
+ }
+
+ @CindyScript("iskcexists")
+ public static boolean iskcexists(String dir){
+ if(ismacosx()){
+ File file = new File(dir+"/kc.command");
+ if(file.exists()){
+ file.setExecutable(true,false);
+ //16.10.19
+ return true;
+ }
+ else{
+ return false;
+ }
+ }
+ if(islinux()){
+ File file = new File(dir+"/kc.sh");
+ if(file.exists()){
+ file.setExecutable(true,false);
+ //16.10.19
+ return true;
+ }
+ else{
+ return false;
+ }
+ }
+ return false;
+ }
+
+ @CindyScript("pathsep")
+ // 17.09.06
+ public static String pathsep(){
+ return File.separator;
+ }
+
+ @CindyScript("isexists")
+ // 16.10.02
+ public static boolean isexists(String dir,String fname){
+ File file = new File(dir+File.separator+fname);
+ if(file.exists()){
+ return true;
+ }
+ else{
+ return false;
+ }
+ }
+
+ @CindyScript("filepath")
+ // 18.03.29
+ public static String isexists(String fname){
+ File file = new File(fname);
+ String path = file.getAbsolutePath();
+ return path;
+ }
+
+ @CindyScript("readfile2str")
+ // 18.11.25
+ public static String readfile2str(String dir,String fname){
+ String res = "";
+ try {
+ File file = new File(dir+File.separator+fname);
+ if (!file.exists()) {
+ return "";
+ }
+// FileReader fileReader = new FileReader(file);
+// BufferedReader bufferedReader = new BufferedReader(fileReader);
+ BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file),"UTF-8"));
+ String data;
+ while ((data = br.readLine()) != null) {
+ res=res+data+"/LF/";
+ }
+ br.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ return res;
+ }
+
+
+ @CindyScript("makedir")
+ // 17.09.06
+ public static String makedir(String dir,String dirname){
+ File newfile = new File(dir+File.separator+dirname);
+ if (newfile.mkdir()){
+ return dirname+" created";
+ }else{
+ return dirname+" already exists";
+ }
+ }
+
+ @CindyScript("fileslength")
+ // 16.12.09
+ public static int fileslength(String dirname){
+ File dir=new File(dirname);
+ File[] files=dir.listFiles();
+ String str;
+ String head;
+ int ctr=0;
+ if(dir.exists()){
+ for(int i=0;i<files.length;i++){
+ str=files[i].getName();
+ head=str.substring(0,1);
+ if(head.equals(".")){ctr=ctr+1;}
+ }
+ return files.length-ctr;
+ }
+ else{
+ return -1;
+ }
+ }
+
+ @CindyScript("fileslist")
+ // 16.12.09
+ public static String fileslist(String dirname){
+ File dir=new File(dirname);
+ File[] files=dir.listFiles();
+ String str;
+ String head;
+ String strall="";
+ if(dir.exists()){
+ for(int i=0;i<files.length;i++){
+ str=files[i].getName();
+ head=str.substring(0,1);
+ if(!head.equals(".")){strall=strall+","+str;}
+ }
+ return strall.substring(1);
+ }
+ else{
+ return "";
+ }
+ }
+
+ @CindyScript("setexec")
+ // 16.10.19
+ public static String setexec(String dir,String fname){
+ File file = new File(dir+File.separator+fname);
+ File path = new File(dir);
+ if(path.exists()){
+ if(file.exists()){
+ file.setExecutable(true,false);
+ return fname+" executable";
+ }
+ else{
+// file.createNewFile();
+// file.setExecutable(true,false);
+ return fname+" not exists";
+ }
+ }
+ else{
+ return dir+" not exists";
+ }
+ }
+
+ @CindyScript("getdatetime")
+ // 16.10.21
+ public static String getdatetime(){
+ Date date=new Date();
+ return date.toString();
+ }
+
+ @CindyScript("gettexmfdist")
+ public static String gettexmfdist() {
+ try {
+ return kpsewhich("-var-value=TEXMFDIST");
+ } catch ( Exception e ) {
+ e.printStackTrace();
+ return "";
+ }
+ }
+
+
+ /**
+ * The following function is copied from TeXOSQuery.java
+ * which is under LPPL
+ */
+ /**
+ * Runs kpsewhich and returns the result. This is for single
+ * argument lookups through kpsewhich, such as a file location
+ * or variable value.
+ * @param arg The argument to pass to kpsewhich
+ * @return The result read from the first line of STDIN
+ * @since 1.2
+ */
+ protected static String kpsewhich(String arg)
+ throws IOException,InterruptedException
+ {
+ // Create and start the process.
+ Process process =
+ new ProcessBuilder("kpsewhich", arg).start();
+
+ int exitCode = process.waitFor();
+
+ String line = null;
+
+ if (exitCode == 0)
+ {
+ // kpsewhich completed with exit code 0.
+ // Read STDIN to find the result.
+
+ InputStream stream = process.getInputStream();
+
+ if (stream == null)
+ {
+ throw new IOException(String.format(
+ "Unable to open input stream from process: kpsewhich '%s'",
+ arg));
+ }
+
+ BufferedReader reader = null;
+
+ try
+ {
+ reader = new BufferedReader(new InputStreamReader(stream));
+
+ // only read a single line, nothing further is required
+ // for a variable or file location query.
+ line = reader.readLine();
+ }
+ finally
+ {
+ if (reader != null)
+ {
+ reader.close();
+ }
+ }
+ }
+ else
+ {
+ // kpsewhich failed.
+
+ throw new IOException(String.format(
+ "\"kpsewhich '%s'\" failed with exit code: %d", arg, exitCode));
+ }
+
+ return line;
+ }
+
+
+}
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/KetCindyPlugin/srcold/KetCindyPlugin150906.java b/graphics/ketcindy/ketcindyfolder/doc/source/KetCindyPlugin/srcold/KetCindyPlugin150906.java
new file mode 100755
index 0000000000..09da2d3b79
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/KetCindyPlugin/srcold/KetCindyPlugin150906.java
@@ -0,0 +1,150 @@
+import de.cinderella.api.cs.CindyScript;
+import de.cinderella.api.cs.CindyScriptPlugin;
+import org.apache.commons.math.linear.MatrixUtils;
+import org.apache.commons.math.linear.RealMatrix;
+
+import java.awt.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.io.*;
+
+
+public class KetCindyPlugin extends CindyScriptPlugin {
+
+ public String getName() {
+ return "KetCindy Plugin";
+ }
+
+ public String getAuthor() {
+ return "The KetCindy Project Team";
+ }
+
+ @CindyScript("systemproperty")
+ public String getUserID(String s) {
+ return System.getProperty(s);
+ }
+
+ @CindyScript("square")
+ public double quadrieren(double x) {
+ return x * x;
+ }
+
+ @CindyScript("grayvalue")
+ public double getGray(Color c) {
+ return (c.getBlue() + c.getRed() + c.getGreen()) / 3.;
+ }
+
+ @CindyScript("testarray")
+ public String writeArray(ArrayList<Double> al) {
+ return Arrays.toString(al.toArray());
+ }
+
+ @CindyScript("getdir")
+ public String getdir() {
+ return System.getProperty("user.dir");
+ }
+
+ @CindyScript("gethome")
+ public String gethome() {
+ return System.getProperty("user.home");
+ }
+
+ @CindyScript("iswindows")
+ static public boolean iswindows(){
+ String os=System.getProperty("os.name").toLowerCase();
+ if(os!=null && os.startsWith("windows")){
+ return true;
+ }
+ else{
+ return false;
+ }
+ }
+ @CindyScript("ismacosx")
+ public static boolean ismacosx(){
+ String os=System.getProperty("os.name").toLowerCase();
+ if(os!=null && os.startsWith("mac")){
+ return true;
+ }
+ else{
+ return false;
+ }
+ }
+ @CindyScript("islinux")
+ public static boolean islinux(){
+ String os=System.getProperty("os.name").toLowerCase();
+ if(os!=null && os.startsWith("linux")){
+ return true;
+ }
+ else{
+ return false;
+ }
+ }
+
+ @CindyScript("iswin")
+ public static boolean iswin() {
+ String OS_NAME = System.getProperty("os.name").toLowerCase();
+ return OS_NAME.startsWith("windows");
+ }
+
+ @CindyScript("getDirhead")
+ public String getDirhead() {
+ if(iswindows()){
+ return "C:\ketcindy";
+ }
+ if(ismacosx()){
+ return "/Applications/ketcindy";
+ }
+ if(islinux()){
+ return "/usr/share/ketcindy";
+ }
+ }
+
+ @CindyScript("kc")
+ public static void kc(String args) throws IOException {
+ ProcessBuilder pb = new ProcessBuilder();
+ if(iswindows()){
+ pb.command("cmd.exe","/c","start",args);
+ }
+ else{
+ if(ismacosx()){
+ pb.command("open",args);
+ }
+ else{
+ pb.command("sh",args);
+ }
+ };
+ Process process = pb.start();
+ return;
+ }
+
+ @CindyScript("ispaulvisiting")
+ public static boolean ispaulvisiting() {
+ return true;
+ }
+
+ @CindyScript("texv")
+ public static void texv( String s, String d, String sf, String tf) throws Exception{
+ ProcessBuilder pb = new ProcessBuilder();
+ String[] cmd = {s,d,sf,tf};
+ pb.command(cmd);
+ Process process = pb.start();
+ return ;
+ }
+
+ @CindyScript("givemeamatrix2")
+ public static Object givemeamatrix2() {
+ try {
+ return "the Matrix: " + theGiveMeAMatrix().toString();
+ } catch (Throwable e) {
+ e.printStackTrace();
+ return "no Matrix: " + e.toString();
+ }
+ }
+
+ public static Object theGiveMeAMatrix() {
+ double[][] matrixData = { {1d,2d,3d}, {2d,5d,3d}};
+ RealMatrix m = MatrixUtils.createRealMatrix(matrixData);
+ return m;
+ }
+
+}
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/KetCindyPlugin/srcold/KetCindyPlugin160515.java b/graphics/ketcindy/ketcindyfolder/doc/source/KetCindyPlugin/srcold/KetCindyPlugin160515.java
new file mode 100755
index 0000000000..d0834fe0b1
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/KetCindyPlugin/srcold/KetCindyPlugin160515.java
@@ -0,0 +1,137 @@
+import de.cinderella.api.cs.CindyScript;
+import de.cinderella.api.cs.CindyScriptPlugin;
+import org.apache.commons.math.linear.MatrixUtils;
+import org.apache.commons.math.linear.RealMatrix;
+
+import java.awt.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.io.*;
+
+
+public class KetCindyPlugin extends CindyScriptPlugin {
+
+ public String getName() {
+ return "KetCindy Plugin";
+ }
+
+ public String getAuthor() {
+ return "The KetCindy Project Team";
+ }
+
+ @CindyScript("systemproperty")
+ public String getUserID(String s) {
+ return System.getProperty(s);
+ }
+
+ @CindyScript("square")
+ public double quadrieren(double x) {
+ return x * x;
+ }
+
+ @CindyScript("grayvalue")
+ public double getGray(Color c) {
+ return (c.getBlue() + c.getRed() + c.getGreen()) / 3.;
+ }
+
+ @CindyScript("testarray")
+ public String writeArray(ArrayList<Double> al) {
+ return Arrays.toString(al.toArray());
+ }
+
+ @CindyScript("getdir")
+ public String getdir() {
+ return System.getProperty("user.dir");
+ }
+
+ @CindyScript("gethome")
+ public String gethome() {
+ return System.getProperty("user.home");
+ }
+
+ @CindyScript("iswindows")
+ static public boolean iswindows(){
+ String os=System.getProperty("os.name").toLowerCase();
+ if(os!=null && os.startsWith("windows")){
+ return true;
+ }
+ else{
+ return false;
+ }
+ }
+ @CindyScript("ismacosx")
+ public static boolean ismacosx(){
+ String os=System.getProperty("os.name").toLowerCase();
+ if(os!=null && os.startsWith("mac")){
+ return true;
+ }
+ else{
+ return false;
+ }
+ }
+ @CindyScript("islinux")
+ public static boolean islinux(){
+ String os=System.getProperty("os.name").toLowerCase();
+ if(os!=null && os.startsWith("linux")){
+ return true;
+ }
+ else{
+ return false;
+ }
+ }
+
+ @CindyScript("iswin")
+ public static boolean iswin() {
+ String OS_NAME = System.getProperty("os.name").toLowerCase();
+ return OS_NAME.startsWith("windows");
+ }
+
+ @CindyScript("kc")
+ public static void kc(String args) throws IOException {
+ ProcessBuilder pb = new ProcessBuilder();
+ if(iswindows()){
+ pb.command("cmd.exe","/c","start",args);
+ }
+ else{
+ if(ismacosx()){
+ pb.command("open",args);
+ }
+ else{
+ pb.command("sh",args);
+ }
+ };
+ Process process = pb.start();
+ return;
+ }
+
+ @CindyScript("ispaulvisiting")
+ public static boolean ispaulvisiting() {
+ return true;
+ }
+
+ @CindyScript("texv")
+ public static void texv( String s, String d, String sf, String tf) throws Exception{
+ ProcessBuilder pb = new ProcessBuilder();
+ String[] cmd = {s,d,sf,tf};
+ pb.command(cmd);
+ Process process = pb.start();
+ return ;
+ }
+
+ @CindyScript("givemeamatrix2")
+ public static Object givemeamatrix2() {
+ try {
+ return "the Matrix: " + theGiveMeAMatrix().toString();
+ } catch (Throwable e) {
+ e.printStackTrace();
+ return "no Matrix: " + e.toString();
+ }
+ }
+
+ public static Object theGiveMeAMatrix() {
+ double[][] matrixData = { {1d,2d,3d}, {2d,5d,3d}};
+ RealMatrix m = MatrixUtils.createRealMatrix(matrixData);
+ return m;
+ }
+
+}
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/KetCindyPlugin/srcold/KetCindyPlugin160518.java b/graphics/ketcindy/ketcindyfolder/doc/source/KetCindyPlugin/srcold/KetCindyPlugin160518.java
new file mode 100755
index 0000000000..443ac0ebb0
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/KetCindyPlugin/srcold/KetCindyPlugin160518.java
@@ -0,0 +1,154 @@
+import de.cinderella.api.cs.CindyScript;
+import de.cinderella.api.cs.CindyScriptPlugin;
+import org.apache.commons.math.linear.MatrixUtils;
+import org.apache.commons.math.linear.RealMatrix;
+
+import java.awt.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.io.*;
+
+
+public class KetCindyPlugin extends CindyScriptPlugin {
+
+ public String getName() {
+ return "KetCindy Plugin";
+ }
+
+ public String getAuthor() {
+ return "The KetCindy Project Team";
+ }
+
+ @CindyScript("systemproperty")
+ public String getUserID(String s) {
+ return System.getProperty(s);
+ }
+
+ @CindyScript("square")
+ public double quadrieren(double x) {
+ return x * x;
+ }
+
+ @CindyScript("grayvalue")
+ public double getGray(Color c) {
+ return (c.getBlue() + c.getRed() + c.getGreen()) / 3.;
+ }
+
+ @CindyScript("testarray")
+ public String writeArray(ArrayList<Double> al) {
+ return Arrays.toString(al.toArray());
+ }
+
+ @CindyScript("getdir")
+ public String getdir() {
+ return System.getProperty("user.dir");
+ }
+
+ @CindyScript("gethome")
+ public String gethome() {
+ return System.getProperty("user.home");
+ }
+
+ @CindyScript("iswindows")
+ static public boolean iswindows(){
+ String os=System.getProperty("os.name").toLowerCase();
+ if(os!=null && os.startsWith("windows")){
+ return true;
+ }
+ else{
+ return false;
+ }
+ }
+ @CindyScript("ismacosx")
+ public static boolean ismacosx(){
+ String os=System.getProperty("os.name").toLowerCase();
+ if(os!=null && os.startsWith("mac")){
+ return true;
+ }
+ else{
+ return false;
+ }
+ }
+ @CindyScript("islinux")
+ public static boolean islinux(){
+ String os=System.getProperty("os.name").toLowerCase();
+ if(os!=null && os.startsWith("linux")){
+ return true;
+ }
+ else{
+ return false;
+ }
+ }
+
+ @CindyScript("iswin")
+ public static boolean iswin() {
+ String OS_NAME = System.getProperty("os.name").toLowerCase();
+ return OS_NAME.startsWith("windows");
+ }
+
+ @CindyScript("kc")
+ public static void kc(String args) throws IOException {
+ ProcessBuilder pb = new ProcessBuilder();
+ if(iswindows()){
+ pb.command("cmd.exe","/c","start",args);
+ }
+ else{
+ if(ismacosx()){
+ pb.command("open",args);
+ }
+ else{
+ pb.command("sh",args);
+ }
+ };
+ Process process = pb.start();
+ return;
+ }
+
+ @CindyScript("ispaulvisiting")
+ public static boolean ispaulvisiting() {
+ return true;
+ }
+
+ @CindyScript("texv")
+ public static void texv( String s, String d, String sf, String tf) throws Exception{
+ ProcessBuilder pb = new ProcessBuilder();
+ String[] cmd = {s,d,sf,tf};
+ pb.command(cmd);
+ Process process = pb.start();
+ return ;
+ }
+
+ @CindyScript("givemeamatrix2")
+ public static Object givemeamatrix2() {
+ try {
+ return "the Matrix: " + theGiveMeAMatrix().toString();
+ } catch (Throwable e) {
+ e.printStackTrace();
+ return "no Matrix: " + e.toString();
+ }
+ }
+
+ public static Object theGiveMeAMatrix() {
+ double[][] matrixData = { {1d,2d,3d}, {2d,5d,3d}};
+ RealMatrix m = MatrixUtils.createRealMatrix(matrixData);
+ return m;
+ }
+
+ @CindyScript("getdirhead")
+ public static String getdirhead(){
+ if(iswindows()){
+ return "C:\\ketcindy";
+ }
+ else if(ismacosx()){
+ return "/Applications/ketcindy";
+ }
+ else if(islinux()){
+ return "/usr/share/ketcindy";
+ }
+ else{
+ return "/Applications/ketcindy";
+ }
+ }
+
+
+}
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/KetCindyPlugin/srcold/KetCindyPlugin160530.java b/graphics/ketcindy/ketcindyfolder/doc/source/KetCindyPlugin/srcold/KetCindyPlugin160530.java
new file mode 100755
index 0000000000..1e2351c48a
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/KetCindyPlugin/srcold/KetCindyPlugin160530.java
@@ -0,0 +1,154 @@
+import de.cinderella.api.cs.CindyScript;
+import de.cinderella.api.cs.CindyScriptPlugin;
+import org.apache.commons.math.linear.MatrixUtils;
+import org.apache.commons.math.linear.RealMatrix;
+
+import java.awt.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.io.*;
+
+
+public class KetCindyPlugin extends CindyScriptPlugin {
+
+ public String getName() {
+ return "KetCindy Plugin";
+ }
+
+ public String getAuthor() {
+ return "The KetCindy Project Team";
+ }
+
+ @CindyScript("systemproperty")
+ public String getUserID(String s) {
+ return System.getProperty(s);
+ }
+
+ @CindyScript("square")
+ public double quadrieren(double x) {
+ return x * x;
+ }
+
+ @CindyScript("grayvalue")
+ public double getGray(Color c) {
+ return (c.getBlue() + c.getRed() + c.getGreen()) / 3.;
+ }
+
+ @CindyScript("testarray")
+ public String writeArray(ArrayList<Double> al) {
+ return Arrays.toString(al.toArray());
+ }
+
+ @CindyScript("getdir")
+ public String getdir() {
+ return System.getProperty("user.dir");
+ }
+
+ @CindyScript("gethome")
+ public String gethome() {
+ return System.getProperty("user.home");
+ }
+
+ @CindyScript("iswindows")
+ static public boolean iswindows(){
+ String os=System.getProperty("os.name").toLowerCase();
+ if(os!=null && os.startsWith("windows")){
+ return true;
+ }
+ else{
+ return false;
+ }
+ }
+ @CindyScript("ismacosx")
+ public static boolean ismacosx(){
+ String os=System.getProperty("os.name").toLowerCase();
+ if(os!=null && os.startsWith("mac")){
+ return true;
+ }
+ else{
+ return false;
+ }
+ }
+ @CindyScript("islinux")
+ public static boolean islinux(){
+ String os=System.getProperty("os.name").toLowerCase();
+ if(os!=null && os.startsWith("linux")){
+ return true;
+ }
+ else{
+ return false;
+ }
+ }
+
+ @CindyScript("iswin")
+ public static boolean iswin() {
+ String OS_NAME = System.getProperty("os.name").toLowerCase();
+ return OS_NAME.startsWith("windows");
+ }
+
+ @CindyScript("kc")
+ public static void kc(String args) throws IOException {
+ ProcessBuilder pb = new ProcessBuilder();
+ if(iswindows()){
+ pb.command("cmd.exe","/c","start",args);
+ }
+ else{
+ if(ismacosx()){
+ pb.command("sh",args);
+ }
+ else{
+ pb.command("sh",args);
+ }
+ };
+ Process process = pb.start();
+ return;
+ }
+
+ @CindyScript("ispaulvisiting")
+ public static boolean ispaulvisiting() {
+ return true;
+ }
+
+ @CindyScript("texv")
+ public static void texv( String s, String d, String sf, String tf) throws Exception{
+ ProcessBuilder pb = new ProcessBuilder();
+ String[] cmd = {s,d,sf,tf};
+ pb.command(cmd);
+ Process process = pb.start();
+ return ;
+ }
+
+ @CindyScript("givemeamatrix2")
+ public static Object givemeamatrix2() {
+ try {
+ return "the Matrix: " + theGiveMeAMatrix().toString();
+ } catch (Throwable e) {
+ e.printStackTrace();
+ return "no Matrix: " + e.toString();
+ }
+ }
+
+ public static Object theGiveMeAMatrix() {
+ double[][] matrixData = { {1d,2d,3d}, {2d,5d,3d}};
+ RealMatrix m = MatrixUtils.createRealMatrix(matrixData);
+ return m;
+ }
+
+ @CindyScript("getdirhead")
+ public static String getdirhead(){
+ if(iswindows()){
+ return "C:\\ketcindy";
+ }
+ else if(ismacosx()){
+ return "/Applications/ketcindy";
+ }
+ else if(islinux()){
+ return "/usr/share/ketcindy";
+ }
+ else{
+ return "/Applications/ketcindy";
+ }
+ }
+
+
+}
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/KetCindyPlugin/srcold/KetCindyPlugin160601.java b/graphics/ketcindy/ketcindyfolder/doc/source/KetCindyPlugin/srcold/KetCindyPlugin160601.java
new file mode 100755
index 0000000000..086cebdc20
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/KetCindyPlugin/srcold/KetCindyPlugin160601.java
@@ -0,0 +1,154 @@
+import de.cinderella.api.cs.CindyScript;
+import de.cinderella.api.cs.CindyScriptPlugin;
+import org.apache.commons.math.linear.MatrixUtils;
+import org.apache.commons.math.linear.RealMatrix;
+
+import java.awt.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.io.*;
+
+
+public class KetCindyPlugin extends CindyScriptPlugin {
+
+ public String getName() {
+ return "KetCindy Plugin";
+ }
+
+ public String getAuthor() {
+ return "The KetCindy Project Team";
+ }
+
+ @CindyScript("systemproperty")
+ public String getUserID(String s) {
+ return System.getProperty(s);
+ }
+
+ @CindyScript("square")
+ public double quadrieren(double x) {
+ return x * x;
+ }
+
+ @CindyScript("grayvalue")
+ public double getGray(Color c) {
+ return (c.getBlue() + c.getRed() + c.getGreen()) / 3.;
+ }
+
+ @CindyScript("testarray")
+ public String writeArray(ArrayList<Double> al) {
+ return Arrays.toString(al.toArray());
+ }
+
+ @CindyScript("getdir")
+ public String getdir() {
+ return System.getProperty("user.dir");
+ }
+
+ @CindyScript("gethome")
+ public String gethome() {
+ return System.getProperty("user.home");
+ }
+
+ @CindyScript("iswindows")
+ static public boolean iswindows(){
+ String os=System.getProperty("os.name").toLowerCase();
+ if(os!=null && os.startsWith("windows")){
+ return true;
+ }
+ else{
+ return false;
+ }
+ }
+ @CindyScript("ismacosx")
+ public static boolean ismacosx(){
+ String os=System.getProperty("os.name").toLowerCase();
+ if(os!=null && os.startsWith("mac")){
+ return true;
+ }
+ else{
+ return false;
+ }
+ }
+ @CindyScript("islinux")
+ public static boolean islinux(){
+ String os=System.getProperty("os.name").toLowerCase();
+ if(os!=null && os.startsWith("linux")){
+ return true;
+ }
+ else{
+ return false;
+ }
+ }
+
+ @CindyScript("iswin")
+ public static boolean iswin() {
+ String OS_NAME = System.getProperty("os.name").toLowerCase();
+ return OS_NAME.startsWith("windows");
+ }
+
+ @CindyScript("kc")
+ public static void kc(String args) throws IOException {
+ ProcessBuilder pb = new ProcessBuilder();
+ if(iswindows()){
+ pb.command("cmd.exe","/c","start",args);
+ }
+ else{
+ if(ismacosx()){
+ pb.command("sh",args);
+ }
+ else{
+ pb.command("sh",args);
+ }
+ };
+ Process process = pb.start();
+ return;
+ }
+
+ @CindyScript("ispaulvisiting")
+ public static boolean ispaulvisiting() {
+ return true;
+ }
+
+ @CindyScript("texv")
+ public static void texv( String s, String d, String sf, String tf) throws Exception{
+ ProcessBuilder pb = new ProcessBuilder();
+ String[] cmd = {s,d,sf,tf};
+ pb.command(cmd);
+ Process process = pb.start();
+ return ;
+ }
+
+ @CindyScript("givemeamatrix2")
+ public static Object givemeamatrix2() {
+ try {
+ return "the Matrix: " + theGiveMeAMatrix().toString();
+ } catch (Throwable e) {
+ e.printStackTrace();
+ return "no Matrix: " + e.toString();
+ }
+ }
+
+ public static Object theGiveMeAMatrix() {
+ double[][] matrixData = { {1d,2d,3d}, {2d,5d,3d}};
+ RealMatrix m = MatrixUtils.createRealMatrix(matrixData);
+ return m;
+ }
+
+ @CindyScript("getdirhead")
+ public static String getdirhead(){
+ if(iswindows()){
+ return System.getProperty("user.home")+"\\ketcindy";
+ }
+ else if(ismacosx()){
+ return System.getProperty("user.home")+"/ketcindy";
+ }
+ else if(islinux()){
+ return "/usr/share/ketcindy";
+ }
+ else{
+ return "unknown";
+ }
+ }
+
+
+}
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/KetCindyPlugin/srcold/KetCindyPlugin160604.java b/graphics/ketcindy/ketcindyfolder/doc/source/KetCindyPlugin/srcold/KetCindyPlugin160604.java
new file mode 100755
index 0000000000..a32b50fac7
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/KetCindyPlugin/srcold/KetCindyPlugin160604.java
@@ -0,0 +1,205 @@
+import de.cinderella.api.cs.CindyScript;
+import de.cinderella.api.cs.CindyScriptPlugin;
+import org.apache.commons.math.linear.MatrixUtils;
+import org.apache.commons.math.linear.RealMatrix;
+
+import java.awt.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.io.*;
+
+public class KetCindyPlugin extends CindyScriptPlugin {
+
+ public String getName() {
+ return "KetCindy Plugin";
+ }
+
+ public String getAuthor() {
+ return "The KetCindy Project Team";
+ }
+
+ @CindyScript("systemproperty")
+ public String getUserID(String s) {
+ return System.getProperty(s);
+ }
+
+ @CindyScript("square")
+ public double quadrieren(double x) {
+ return x * x;
+ }
+
+ @CindyScript("grayvalue")
+ public double getGray(Color c) {
+ return (c.getBlue() + c.getRed() + c.getGreen()) / 3.;
+ }
+
+ @CindyScript("testarray")
+ public String writeArray(ArrayList<Double> al) {
+ return Arrays.toString(al.toArray());
+ }
+
+ @CindyScript("getdir")
+ public String getdir() {
+ return System.getProperty("user.dir");
+ }
+
+ @CindyScript("gethome")
+ public String gethome() {
+ return System.getProperty("user.home");
+ }
+
+ @CindyScript("iswindows")
+ static public boolean iswindows(){
+ String os=System.getProperty("os.name").toLowerCase();
+ if(os!=null && os.startsWith("windows")){
+ return true;
+ }
+ else{
+ return false;
+ }
+ }
+ @CindyScript("ismacosx")
+ public static boolean ismacosx(){
+ String os=System.getProperty("os.name").toLowerCase();
+ if(os!=null && os.startsWith("mac")){
+ return true;
+ }
+ else{
+ return false;
+ }
+ }
+ @CindyScript("islinux")
+ public static boolean islinux(){
+ String os=System.getProperty("os.name").toLowerCase();
+ if(os!=null && os.startsWith("linux")){
+ return true;
+ }
+ else{
+ return false;
+ }
+ }
+
+ @CindyScript("iswin")
+ public static boolean iswin() {
+ String OS_NAME = System.getProperty("os.name").toLowerCase();
+ return OS_NAME.startsWith("windows");
+ }
+
+ @CindyScript("kcnow")
+ public static Long kcnow(String args){
+ return System.currentTimeMillis();
+ }
+
+ @CindyScript("kcmodified")
+ public static Long kcmodified(String args){
+ File f = new File(args);
+ return System.currentTimeMillis()-f.lastModified();
+ }
+
+ @CindyScript("kc")
+ public static void kc(String args) throws IOException {}
+
+ @CindyScript("kc")
+ public static void kc(String args,String args2,String args3) throws IOException {
+ ProcessBuilder pb = new ProcessBuilder();
+ // 16.06.04from
+ File f = new File(args);
+ int flg=0;
+ BufferedReader br = new BufferedReader(new FileReader(f));
+ String str;
+ while((str = br.readLine()) != null){
+ str=str.toUpperCase();
+ if(str.indexOf("RM ")>-1){
+ flg=1;
+ }
+ if(str.indexOf("DEL ")>-1){
+ flg=1;
+ }
+ if(str.indexOf("MV ")>-1){
+ flg=1;
+ }
+ if(str.indexOf("RD ")>-1){
+ flg=1;
+ }
+ if(str.indexOf("*")>-1){
+ flg=1;
+ }
+ if(str.indexOf("?")>-1){
+ flg=1;
+ }
+ }
+ br.close();
+ Long tm=System.currentTimeMillis()-f.lastModified();
+// if(tm<5000 && flg==0){
+ if(flg==0){
+ if(iswindows()){
+ if((args.endsWith("\\kc.bat")&&args2.endsWith("\\ketbin"))&&args3.endsWith(".tex")){
+ pb.command("cmd.exe","/c","start",args);
+ }
+ }
+ else{
+ if(ismacosx()){
+ if((args.endsWith("/kc.sh")&&args2.endsWith("/ketbin"))&&args3.endsWith(".tex")){
+ pb.command("sh",args);
+ }
+ }
+ else{
+ if((args.endsWith("/kc.sh")&&args2.endsWith("/ketbin"))&&args3.endsWith(".tex")){
+ pb.command("sh",args);
+ }
+ }
+ }
+ }
+ // 16.06.04upto
+ Process process = pb.start();
+ return;
+ }
+
+ @CindyScript("ispaulvisiting")
+ public static boolean ispaulvisiting() {
+ return true;
+ }
+
+ @CindyScript("texv")
+ public static void texv( String s, String d, String sf, String tf) throws Exception{
+ ProcessBuilder pb = new ProcessBuilder();
+ String[] cmd = {s,d,sf,tf};
+ pb.command(cmd);
+ Process process = pb.start();
+ return ;
+ }
+
+ @CindyScript("givemeamatrix2")
+ public static Object givemeamatrix2() {
+ try {
+ return "the Matrix: " + theGiveMeAMatrix().toString();
+ } catch (Throwable e) {
+ e.printStackTrace();
+ return "no Matrix: " + e.toString();
+ }
+ }
+
+ public static Object theGiveMeAMatrix() {
+ double[][] matrixData = { {1d,2d,3d}, {2d,5d,3d}};
+ RealMatrix m = MatrixUtils.createRealMatrix(matrixData);
+ return m;
+ }
+
+ @CindyScript("getdirhead")
+ public static String getdirhead(){
+ if(iswindows()){
+ return System.getProperty("user.home")+"\\ketcindy";
+ }
+ else if(ismacosx()){
+ return System.getProperty("user.home")+"/ketcindy";
+ }
+ else if(islinux()){
+ return "/usr/share/ketcindy";
+ }
+ else{
+ return "unknown";
+ }
+ }
+
+
+}
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/KetCindyPlugin/srcold/KetCindyPlugin160609.java b/graphics/ketcindy/ketcindyfolder/doc/source/KetCindyPlugin/srcold/KetCindyPlugin160609.java
new file mode 100755
index 0000000000..f5c5ea4112
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/KetCindyPlugin/srcold/KetCindyPlugin160609.java
@@ -0,0 +1,259 @@
+import de.cinderella.api.cs.CindyScript;
+import de.cinderella.api.cs.CindyScriptPlugin;
+import org.apache.commons.math.linear.MatrixUtils;
+import org.apache.commons.math.linear.RealMatrix;
+
+import java.awt.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.io.*;
+
+public class KetCindyPlugin extends CindyScriptPlugin {
+
+ public String getName() {
+ return "KetCindy Plugin";
+ }
+
+ public String getAuthor() {
+ return "The KetCindy Project Team";
+ }
+
+ @CindyScript("systemproperty")
+ public String getUserID(String s) {
+ return System.getProperty(s);
+ }
+
+ @CindyScript("square")
+ public double quadrieren(double x) {
+ return x * x;
+ }
+
+ @CindyScript("grayvalue")
+ public double getGray(Color c) {
+ return (c.getBlue() + c.getRed() + c.getGreen()) / 3.;
+ }
+
+ @CindyScript("testarray")
+ public String writeArray(ArrayList<Double> al) {
+ return Arrays.toString(al.toArray());
+ }
+
+ @CindyScript("getdir")
+ public String getdir() {
+ return System.getProperty("user.dir");
+ }
+
+ @CindyScript("gethome")
+ public String gethome() {
+ return System.getProperty("user.home");
+ }
+
+ @CindyScript("iswindows")
+ static public boolean iswindows(){
+ String os=System.getProperty("os.name").toLowerCase();
+ if(os!=null && os.startsWith("windows")){
+ return true;
+ }
+ else{
+ return false;
+ }
+ }
+ @CindyScript("ismacosx")
+ public static boolean ismacosx(){
+ String os=System.getProperty("os.name").toLowerCase();
+ if(os!=null && os.startsWith("mac")){
+ return true;
+ }
+ else{
+ return false;
+ }
+ }
+ @CindyScript("islinux")
+ public static boolean islinux(){
+ String os=System.getProperty("os.name").toLowerCase();
+ if(os!=null && os.startsWith("linux")){
+ return true;
+ }
+ else{
+ return false;
+ }
+ }
+
+ @CindyScript("iswin")
+ public static boolean iswin() {
+ String OS_NAME = System.getProperty("os.name").toLowerCase();
+ return OS_NAME.startsWith("windows");
+ }
+
+ @CindyScript("kc")
+ public static String kc(String args){
+ return "Improper call";
+ }
+
+ @CindyScript("kc")
+ public static String kc(String args,String args2,String args3) throws IOException {
+ ProcessBuilder pb = new ProcessBuilder();
+ File f = new File(args);
+ int flg=0;
+ int pos=0;
+ String kst="";
+ BufferedReader br = new BufferedReader(new FileReader(f));
+ String str;
+ while((str = br.readLine()) != null){
+ if(str.indexOf("*")>-1|| str.indexOf("?")>-1){
+ flg=1;
+ }
+ else{
+ str=str.toUpperCase();
+ str=str.replaceAll("\""," "); /* 16.06.08 */
+ if(str.indexOf("RM ")>-1 || str.indexOf("DEL ")>-1){
+ if(str.indexOf(args3.toUpperCase())==-1){
+ flg=2;
+ }
+ }
+ if(str.indexOf("MV ")>-1 || str.indexOf("MOVE ")>-1){
+ flg=3;
+ }
+ if(str.indexOf("RD ")>-1 || str.indexOf("RMDIR ")>-1){
+ flg=4;
+ }
+ // 16.04.09from
+ if(str.indexOf("SHUTDOWN ")>-1 || str.indexOf("SLEEP ")>-1){
+ flg=5;
+ }
+ if(str.indexOf("CLEAR ")>-1 || str.indexOf("CLS ")>-1){
+ flg=6;
+ }
+ if(str.indexOf("FTP ")>-1|| str.indexOf("TELNET ")>-1){
+ flg=7;
+ }
+ if(str.indexOf("USERMOD ")>-1 || str.indexOf("USERDEL ")>-1){
+ flg=8;
+ }
+ if(str.indexOf("USERADD ")>-1 || str.indexOf("USERMOD ")>-1){
+ flg=9;
+ }
+ if(str.indexOf("CHMOD ")>-1){
+ if(str.indexOf("CHMOD +")==-1){
+ flg=10;
+ }
+ }
+ if(str.indexOf("CRONTAB ")>-1 || str.indexOf("KILL ")>-1){
+ flg=11;
+ }
+ if(str.indexOf("AT ")>-1){
+ pos=str.indexOf("AT ");
+ if(pos==0){
+ flg=12;
+ }
+ else{
+ kst=str.substring(pos-1,pos);
+ if(!kst.equals("B")){
+ flg=12;
+ }
+ }
+ // 16.04.09upto
+ }
+ if(str.indexOf("PATH ")>-1 || str.indexOf("PAUSE ")>-1 || str.indexOf("ARP ")>-1){
+ flg=13;
+ }
+ if(str.indexOf("RENAME ")>-1 || str.indexOf("START ")>-1){
+ flg=14;
+ }
+ }
+ }
+ br.close();
+ // 16.06.05from
+ if(flg>0){
+ return "Improper file "+String.valueOf(flg);
+ }
+ Long tm=System.currentTimeMillis()-f.lastModified();
+ if(tm>10000 || tm<0){ /* 16.06.08 */
+ flg=50;
+ return "Time expired";
+ }
+ if((args.indexOf("kc.")==-1|| args2.indexOf("ketbin")==-1) || args3.indexOf(".t")==-1){
+ flg=60;
+ return "Improper form";
+ }
+ if(flg==0){
+ if(iswindows()){
+ pb.command("cmd.exe","/c","start",args);
+ }
+ else{
+ if(ismacosx()){
+ if(args2.indexOf("open")>-1){ /* 2016.06.07from */
+ pb.command("open",args);
+ }
+ else{
+ pb.command("sh",args);
+ } /* 2016.06.07upto */
+ }
+ else{
+ pb.command("sh",args);
+ }
+ }
+ }
+ Process process = pb.start();
+ return "Normal end";
+ // 16.06.05upto
+ }
+
+ @CindyScript("ispaulvisiting")
+ public static boolean ispaulvisiting() {
+ return true;
+ }
+
+ @CindyScript("texv")
+ public static void texv( String s, String d, String sf, String tf) throws Exception{
+ ProcessBuilder pb = new ProcessBuilder();
+ String[] cmd = {s,d,sf,tf};
+ pb.command(cmd);
+ Process process = pb.start();
+ return ;
+ }
+
+ @CindyScript("givemeamatrix2")
+ public static Object givemeamatrix2() {
+ try {
+ return "the Matrix: " + theGiveMeAMatrix().toString();
+ } catch (Throwable e) {
+ e.printStackTrace();
+ return "no Matrix: " + e.toString();
+ }
+ }
+
+ public static Object theGiveMeAMatrix() {
+ double[][] matrixData = { {1d,2d,3d}, {2d,5d,3d}};
+ RealMatrix m = MatrixUtils.createRealMatrix(matrixData);
+ return m;
+ }
+
+ @CindyScript("getdirhead")
+ public static String getdirhead(){
+ if(iswindows()){
+ return System.getProperty("user.home")+"\\ketcindy";
+ }
+ else if(ismacosx()){
+ return System.getProperty("user.home")+"/ketcindy";
+ }
+ else if(islinux()){
+ return "/usr/share/ketcindy";
+ }
+ else{
+ return "unknown";
+ }
+ }
+
+ @CindyScript("iskcexists")
+ public static boolean iskcexists(String dir){
+ File file = new File(dir+"/kc.sh");
+ if(file.exists()){
+ return true;
+ }
+ else{
+ return false;
+ }
+ }
+
+}
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/KetCindyPlugin/srcold/KetCindyPlugin160723.java b/graphics/ketcindy/ketcindyfolder/doc/source/KetCindyPlugin/srcold/KetCindyPlugin160723.java
new file mode 100644
index 0000000000..fb287873d9
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/KetCindyPlugin/srcold/KetCindyPlugin160723.java
@@ -0,0 +1,269 @@
+import de.cinderella.api.cs.CindyScript;
+import de.cinderella.api.cs.CindyScriptPlugin;
+import org.apache.commons.math.linear.MatrixUtils;
+import org.apache.commons.math.linear.RealMatrix;
+
+import java.awt.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.io.*;
+
+public class KetCindyPlugin extends CindyScriptPlugin {
+
+ public String getName() {
+ return "KetCindy Plugin";
+ }
+
+ public String getAuthor() {
+ return "The KetCindy Project Team";
+ }
+
+ @CindyScript("systemproperty")
+ public String getUserID(String s) {
+ return System.getProperty(s);
+ }
+
+ @CindyScript("square")
+ public double quadrieren(double x) {
+ return x * x;
+ }
+
+ @CindyScript("grayvalue")
+ public double getGray(Color c) {
+ return (c.getBlue() + c.getRed() + c.getGreen()) / 3.;
+ }
+
+ @CindyScript("testarray")
+ public String writeArray(ArrayList<Double> al) {
+ return Arrays.toString(al.toArray());
+ }
+
+ @CindyScript("getdir")
+ public String getdir() {
+ return System.getProperty("user.dir");
+ }
+
+ @CindyScript("gethome")
+ public String gethome() {
+ return System.getProperty("user.home");
+ }
+
+ @CindyScript("iswindows")
+ static public boolean iswindows(){
+ String os=System.getProperty("os.name").toLowerCase();
+ if(os!=null && os.startsWith("windows")){
+ return true;
+ }
+ else{
+ return false;
+ }
+ }
+ @CindyScript("ismacosx")
+ public static boolean ismacosx(){
+ String os=System.getProperty("os.name").toLowerCase();
+ if(os!=null && os.startsWith("mac")){
+ return true;
+ }
+ else{
+ return false;
+ }
+ }
+ @CindyScript("islinux")
+ public static boolean islinux(){
+ String os=System.getProperty("os.name").toLowerCase();
+ if(os!=null && os.startsWith("linux")){
+ return true;
+ }
+ else{
+ return false;
+ }
+ }
+
+ @CindyScript("iswin")
+ public static boolean iswin() {
+ String OS_NAME = System.getProperty("os.name").toLowerCase();
+ return OS_NAME.startsWith("windows");
+ }
+
+ @CindyScript("kc")
+ public static String kc(String args){
+ return "Improper call";
+ }
+
+ @CindyScript("kc")
+ public static String kc(String args,String args2,String args3) throws IOException {
+ ProcessBuilder pb = new ProcessBuilder();
+ File f = new File(args);
+ int flg=0;
+ int pos=0;
+ String kst="";
+ BufferedReader br = new BufferedReader(new FileReader(f));
+ String str;
+ while((str = br.readLine()) != null){
+ if(str.indexOf("*")>-1|| str.indexOf("?")>-1){
+ flg=1;
+ }
+ else{
+ str=str.toUpperCase();
+ str=str.replaceAll("\""," "); /* 16.06.08 */
+ if(str.indexOf("RM ")>-1 || str.indexOf("DEL ")>-1){
+ //16.07.21from
+ if(str.indexOf(".DVI")==-1 && str.indexOf(".TXT")==-1){
+ flg=2;
+ }
+ // 16.07.21upto
+ }
+ if(str.indexOf("MV ")>-1 || str.indexOf("MOVE ")>-1){
+ flg=3;
+ }
+ if(str.indexOf("RD ")>-1 || str.indexOf("RMDIR ")>-1){
+ flg=4;
+ }
+ // 16.04.09from
+ if(str.indexOf("SHUTDOWN ")>-1 || str.indexOf("SLEEP ")>-1){
+ flg=5;
+ }
+ if(str.indexOf("CLEAR ")>-1 || str.indexOf("CLS ")>-1){
+ flg=6;
+ }
+ if(str.indexOf("FTP ")>-1|| str.indexOf("TELNET ")>-1){
+ flg=7;
+ }
+ if(str.indexOf("USERMOD ")>-1 || str.indexOf("USERDEL ")>-1){
+ flg=8;
+ }
+ if(str.indexOf("USERADD ")>-1 || str.indexOf("USERMOD ")>-1){
+ flg=9;
+ }
+ if(str.indexOf("CHMOD ")>-1){
+ if(str.indexOf("CHMOD +")==-1){
+ flg=10;
+ }
+ }
+ if(str.indexOf("CRONTAB ")>-1 || str.indexOf("KILL ")>-1){
+ flg=11;
+ }
+ if(str.indexOf("AT ")>-1){
+ pos=str.indexOf("AT ");
+ if(pos==0){
+ flg=12;
+ }
+ else{
+ kst=str.substring(pos-1,pos);
+ if(!kst.equals("B")){
+ flg=12;
+ }
+ }
+ // 16.04.09upto
+ }
+// if(str.indexOf("PATH ")>-1 || str.indexOf("PAUSE ")>-1 || str.indexOf("ARP ")>-1){
+ if(str.indexOf("PAUSE ")>-1 || str.indexOf("ARP ")>-1){
+ flg=13;
+ }
+ if(str.indexOf("RENAME ")>-1 || str.indexOf("START ")>-1){
+ flg=14;
+ }
+ // 16.07.21
+ if(str.indexOf(".SH")>-1 || str.indexOf(".BAT")>-1){
+ if(str.indexOf("MAXIMA.")==-1 && str.indexOf("KC.")==-1){ /* 2016.07.22 */
+ flg=15;
+ }
+ }
+ }
+ if(flg>0){
+ br.close();
+ return "Improper file "+String.valueOf(flg)+" "+str;
+ }
+ }
+ br.close();
+ // 16.06.05from
+ Long tm=System.currentTimeMillis()-f.lastModified();
+ if(tm>10000 || tm<0){ /* 16.06.08 */
+ flg=50;
+ return "Time expired";
+ }
+ if((args.indexOf("kc.")==-1|| args2.indexOf("ketlib")==-1) || args3.indexOf(".t")==-1){
+ flg=60;
+ return "Improper form";
+ }
+ if(flg==0){
+ if(iswindows()){
+ pb.command("cmd.exe","/c","start",args);
+ }
+ else{
+ if(ismacosx()){
+ if(args2.indexOf("open")>-1){ /* 2016.06.07from */
+ pb.command("open",args);
+ }
+ else{
+ pb.command("sh",args);
+ } /* 2016.06.07upto */
+ }
+ else{
+ pb.command("sh",args);
+ }
+ }
+ }
+ Process process = pb.start();
+ return "Normal end";
+ // 16.06.05upto
+ }
+
+ @CindyScript("ispaulvisiting")
+ public static boolean ispaulvisiting() {
+ return true;
+ }
+
+ @CindyScript("texv")
+ public static void texv( String s, String d, String sf, String tf) throws Exception{
+ ProcessBuilder pb = new ProcessBuilder();
+ String[] cmd = {s,d,sf,tf};
+ pb.command(cmd);
+ Process process = pb.start();
+ return ;
+ }
+
+ @CindyScript("givemeamatrix2")
+ public static Object givemeamatrix2() {
+ try {
+ return "the Matrix: " + theGiveMeAMatrix().toString();
+ } catch (Throwable e) {
+ e.printStackTrace();
+ return "no Matrix: " + e.toString();
+ }
+ }
+
+ public static Object theGiveMeAMatrix() {
+ double[][] matrixData = { {1d,2d,3d}, {2d,5d,3d}};
+ RealMatrix m = MatrixUtils.createRealMatrix(matrixData);
+ return m;
+ }
+
+ @CindyScript("getdirhead")
+ public static String getdirhead(){
+ if(iswindows()){
+ return System.getProperty("user.home")+"\\ketcindy";
+ }
+ else if(ismacosx()){
+ return System.getProperty("user.home")+"/ketcindy";
+ }
+ else if(islinux()){
+ return "/usr/share/ketcindy";
+ }
+ else{
+ return "unknown";
+ }
+ }
+
+ @CindyScript("iskcexists")
+ public static boolean iskcexists(String dir){
+ File file = new File(dir+"/kc.sh");
+ if(file.exists()){
+ return true;
+ }
+ else{
+ return false;
+ }
+ }
+
+}
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/KetCindyPlugin/srcold/KetCindyPlugin161019.java b/graphics/ketcindy/ketcindyfolder/doc/source/KetCindyPlugin/srcold/KetCindyPlugin161019.java
new file mode 100644
index 0000000000..13c303ac0c
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/KetCindyPlugin/srcold/KetCindyPlugin161019.java
@@ -0,0 +1,311 @@
+import de.cinderella.api.cs.CindyScript;
+import de.cinderella.api.cs.CindyScriptPlugin;
+import org.apache.commons.math.linear.MatrixUtils;
+import org.apache.commons.math.linear.RealMatrix;
+
+import java.awt.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.io.*;
+
+public class KetCindyPlugin extends CindyScriptPlugin {
+
+ public String getName() {
+ return "KetCindy Plugin";
+ }
+
+ public String getAuthor() {
+ return "The KetCindy Project Team";
+ }
+
+ @CindyScript("systemproperty")
+ public String getUserID(String s) {
+ return System.getProperty(s);
+ }
+
+ @CindyScript("square")
+ public double quadrieren(double x) {
+ return x * x;
+ }
+
+ @CindyScript("grayvalue")
+ public double getGray(Color c) {
+ return (c.getBlue() + c.getRed() + c.getGreen()) / 3.;
+ }
+
+ @CindyScript("testarray")
+ public String writeArray(ArrayList<Double> al) {
+ return Arrays.toString(al.toArray());
+ }
+
+ @CindyScript("getdir")
+ public String getdir() {
+ return System.getProperty("user.dir");
+ }
+
+ @CindyScript("gethome")
+ public String gethome() {
+ return System.getProperty("user.home");
+ }
+
+ @CindyScript("iswindows")
+ static public boolean iswindows(){
+ String os=System.getProperty("os.name").toLowerCase();
+ if(os!=null && os.startsWith("windows")){
+ return true;
+ }
+ else{
+ return false;
+ }
+ }
+ @CindyScript("ismacosx")
+ public static boolean ismacosx(){
+ String os=System.getProperty("os.name").toLowerCase();
+ if(os!=null && os.startsWith("mac")){
+ return true;
+ }
+ else{
+ return false;
+ }
+ }
+ @CindyScript("islinux")
+ public static boolean islinux(){
+ String os=System.getProperty("os.name").toLowerCase();
+ if(os!=null && os.startsWith("linux")){
+ return true;
+ }
+ else{
+ return false;
+ }
+ }
+
+ @CindyScript("iswin")
+ public static boolean iswin() {
+ String OS_NAME = System.getProperty("os.name").toLowerCase();
+ return OS_NAME.startsWith("windows");
+ }
+
+ @CindyScript("kc")
+ public static String kc(String args){
+ return "Improper call";
+ }
+
+ @CindyScript("kc")
+ public static String kc(String args,String args2,String args3) throws IOException {
+ ProcessBuilder pb = new ProcessBuilder();
+ File f = new File(args);
+ int flg=0;
+ int pos=0;
+ String kst="";
+ BufferedReader br = new BufferedReader(new FileReader(f));
+ String str;
+ while((str = br.readLine()) != null){
+ if(str.indexOf("*")>-1|| str.indexOf("?")>-1){
+ flg=1;
+ }
+ else{
+ str=str.toUpperCase();
+ str=str.replaceAll("\""," "); /* 16.06.08 */
+ if(str.indexOf("RM ")>-1 || str.indexOf("DEL ")>-1){
+ //16.07.21from
+ if(str.indexOf(".DVI")==-1 && str.indexOf(".TXT")==-1){
+ flg=2;
+ }
+ // 16.07.21upto
+ }
+ if(str.indexOf("MV ")>-1 || str.indexOf("MOVE ")>-1){
+ flg=3;
+ }
+ if(str.indexOf("RD ")>-1 || str.indexOf("RMDIR ")>-1){
+ flg=4;
+ }
+ // 16.04.09from
+ if(str.indexOf("SHUTDOWN ")>-1 || str.indexOf("SLEEP ")>-1){
+ flg=5;
+ }
+ if(str.indexOf("CLEAR ")>-1 || str.indexOf("CLS ")>-1){
+ flg=6;
+ }
+ if(str.indexOf("FTP ")>-1|| str.indexOf("TELNET ")>-1){
+ flg=7;
+ }
+ if(str.indexOf("USERMOD ")>-1 || str.indexOf("USERDEL ")>-1){
+ flg=8;
+ }
+ if(str.indexOf("USERADD ")>-1 || str.indexOf("USERMOD ")>-1){
+ flg=9;
+ }
+ if(str.indexOf("CHMOD ")>-1){
+ if(str.indexOf("CHMOD +")==-1){
+ flg=10;
+ }
+ }
+ if(str.indexOf("CRONTAB ")>-1 || str.indexOf("KILL ")>-1){
+ flg=11;
+ }
+ if(str.indexOf("AT ")>-1){
+ pos=str.indexOf("AT ");
+ if(pos==0){
+ flg=12;
+ }
+ else{
+ kst=str.substring(pos-1,pos);
+ if(!kst.equals("B")){
+ flg=12;
+ }
+ }
+ // 16.04.09upto
+ }
+// if(str.indexOf("PATH ")>-1 || str.indexOf("PAUSE ")>-1 || str.indexOf("ARP ")>-1){
+ if(str.indexOf("PAUSE ")>-1 || str.indexOf("ARP ")>-1){
+ flg=13;
+ }
+ if(str.indexOf("RENAME ")>-1 || str.indexOf("START ")>-1){
+ flg=14;
+ }
+ // 16.07.21
+ if(str.indexOf(".SH")>-1 || str.indexOf(".BAT")>-1){
+ if(str.indexOf("MAXIMA.")==-1 && str.indexOf("KC.")==-1){ /* 2016.07.22 */
+ flg=15;
+ }
+ }
+ }
+ if(flg>0){
+ br.close();
+ return "Improper file "+String.valueOf(flg)+" "+str;
+ }
+ }
+ br.close();
+ // 16.06.05from
+ Long tm=System.currentTimeMillis()-f.lastModified();
+ if(tm>10000 || tm<0){ /* 16.06.08 */
+ flg=50;
+ return "Time expired";
+ }
+ if((args.indexOf("kc.")==-1|| args2.indexOf("ketlib")==-1) || args3.indexOf(".t")==-1){
+ flg=60;
+ return "Improper form";
+ }
+ if(flg==0){
+ if(iswindows()){
+ pb.command("cmd.exe","/c","start",args);
+ }
+ else{
+ if(ismacosx()){
+ if(args2.indexOf("open")>-1){ /* 2016.06.07from */
+ pb.command("open",args);
+ }
+ else{
+ pb.command("sh",args);
+ } /* 2016.06.07upto */
+ }
+ else{
+ pb.command("sh",args);
+ }
+ }
+ }
+ Process process = pb.start();
+ return "Normal end";
+ // 16.06.05upto
+ }
+
+ @CindyScript("ispaulvisiting")
+ public static boolean ispaulvisiting() {
+ return true;
+ }
+
+ @CindyScript("texv")
+ public static void texv( String s, String d, String sf, String tf) throws Exception{
+ ProcessBuilder pb = new ProcessBuilder();
+ String[] cmd = {s,d,sf,tf};
+ pb.command(cmd);
+ Process process = pb.start();
+ return ;
+ }
+
+ @CindyScript("givemeamatrix2")
+ public static Object givemeamatrix2() {
+ try {
+ return "the Matrix: " + theGiveMeAMatrix().toString();
+ } catch (Throwable e) {
+ e.printStackTrace();
+ return "no Matrix: " + e.toString();
+ }
+ }
+
+ public static Object theGiveMeAMatrix() {
+ double[][] matrixData = { {1d,2d,3d}, {2d,5d,3d}};
+ RealMatrix m = MatrixUtils.createRealMatrix(matrixData);
+ return m;
+ }
+
+ @CindyScript("getdirhead")
+ public static String getdirhead(){
+ if(iswindows()){
+ return System.getProperty("user.home")+"\\ketcindy";
+ }
+ else if(ismacosx()){
+ return System.getProperty("user.home")+"/ketcindy";
+ }
+ else if(islinux()){
+ return System.getProperty("user.home")+"/ketcindy";
+ // "/usr/share/ketcindy";
+ }
+ else{
+ return "unknown";
+ }
+ }
+
+ @CindyScript("getdirhead")
+ public static String getdirhead(String dir){
+ if(iswindows()){
+ return dir+"\\ketcindy";
+ }
+ else if(ismacosx()){
+ return dir+"/ketcindy";
+ }
+ else if(islinux()){
+ return dir+"/ketcindy";
+ }
+ else{
+ return "unknown";
+ }
+ }
+
+ @CindyScript("iskcexists")
+ public static boolean iskcexists(String dir){
+ File file = new File(dir+"/kc.sh");
+ if(file.exists()){
+ return true;
+ }
+ else{
+ return false;
+ }
+ }
+
+ @CindyScript("isexists")
+ // 16.10.02
+ public static boolean isheadexists(String dir,String fname){
+ File file = new File(dir+"/"+fname);
+ if(file.exists()){
+ return true;
+ }
+ else{
+ return false;
+ }
+ }
+
+ @CindyScript("setexec")
+ // 16.10.19
+ public static boolean setexec(String dir,String fname){
+ File file = new File(dir+"/"+fname);
+ if(file.exists()){
+ file.setExecutable(true);
+ return true;
+ }
+ else{
+ return false;
+ }
+ }
+
+}
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/KetCindyPlugin/srcold/KetCindyPlugin161021.java b/graphics/ketcindy/ketcindyfolder/doc/source/KetCindyPlugin/srcold/KetCindyPlugin161021.java
new file mode 100644
index 0000000000..67decd5b86
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/KetCindyPlugin/srcold/KetCindyPlugin161021.java
@@ -0,0 +1,330 @@
+import de.cinderella.api.cs.CindyScript;
+import de.cinderella.api.cs.CindyScriptPlugin;
+import org.apache.commons.math.linear.MatrixUtils;
+import org.apache.commons.math.linear.RealMatrix;
+
+import java.awt.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.io.*;
+import java.util.Date;
+//16.10.21
+
+public class KetCindyPlugin extends CindyScriptPlugin {
+
+ public String getName() {
+ return "KetCindy Plugin";
+ }
+
+ public String getAuthor() {
+ return "The KetCindy Project Team";
+ }
+
+ @CindyScript("systemproperty")
+ public String getUserID(String s) {
+ return System.getProperty(s);
+ }
+
+ @CindyScript("square")
+ public double quadrieren(double x) {
+ return x * x;
+ }
+
+ @CindyScript("grayvalue")
+ public double getGray(Color c) {
+ return (c.getBlue() + c.getRed() + c.getGreen()) / 3.;
+ }
+
+ @CindyScript("testarray")
+ public String writeArray(ArrayList<Double> al) {
+ return Arrays.toString(al.toArray());
+ }
+
+ @CindyScript("getdir")
+ public String getdir() {
+ return System.getProperty("user.dir");
+ }
+
+ @CindyScript("gethome")
+ public String gethome() {
+ return System.getProperty("user.home");
+ }
+
+ @CindyScript("iswindows")
+ static public boolean iswindows(){
+ String os=System.getProperty("os.name").toLowerCase();
+ if(os!=null && os.startsWith("windows")){
+ return true;
+ }
+ else{
+ return false;
+ }
+ }
+ @CindyScript("ismacosx")
+ public static boolean ismacosx(){
+ String os=System.getProperty("os.name").toLowerCase();
+ if(os!=null && os.startsWith("mac")){
+ return true;
+ }
+ else{
+ return false;
+ }
+ }
+ @CindyScript("islinux")
+ public static boolean islinux(){
+ String os=System.getProperty("os.name").toLowerCase();
+ if(os!=null && os.startsWith("linux")){
+ return true;
+ }
+ else{
+ return false;
+ }
+ }
+
+ @CindyScript("iswin")
+ public static boolean iswin() {
+ String OS_NAME = System.getProperty("os.name").toLowerCase();
+ return OS_NAME.startsWith("windows");
+ }
+
+ @CindyScript("kc")
+ public static String kc(String args){
+ return "Improper call";
+ }
+
+ @CindyScript("kc")
+ public static String kc(String args,String args2,String args3) throws IOException {
+ ProcessBuilder pb = new ProcessBuilder();
+ File f = new File(args);
+ int flg=0;
+ int pos=0;
+ String kst="";
+ BufferedReader br = new BufferedReader(new FileReader(f));
+ String str;
+ while((str = br.readLine()) != null){
+ if(str.indexOf("*")>-1|| str.indexOf("?")>-1){
+ flg=1;
+ }
+ else{
+ str=str.toUpperCase();
+ str=str.replaceAll("\""," "); /* 16.06.08 */
+ if(str.indexOf("RM ")>-1 || str.indexOf("DEL ")>-1){
+ //16.07.21from
+ if(str.indexOf(".DVI")==-1 && str.indexOf(".TXT")==-1){
+ flg=2;
+ }
+ // 16.07.21upto
+ }
+ if(str.indexOf("MV ")>-1 || str.indexOf("MOVE ")>-1){
+ flg=3;
+ }
+ if(str.indexOf("RD ")>-1 || str.indexOf("RMDIR ")>-1){
+ flg=4;
+ }
+ // 16.04.09from
+ if(str.indexOf("SHUTDOWN ")>-1 || str.indexOf("SLEEP ")>-1){
+ flg=5;
+ }
+ if(str.indexOf("CLEAR ")>-1 || str.indexOf("CLS ")>-1){
+ flg=6;
+ }
+ if(str.indexOf("FTP ")>-1|| str.indexOf("TELNET ")>-1){
+ flg=7;
+ }
+ if(str.indexOf("USERMOD ")>-1 || str.indexOf("USERDEL ")>-1){
+ flg=8;
+ }
+ if(str.indexOf("USERADD ")>-1 || str.indexOf("USERMOD ")>-1){
+ flg=9;
+ }
+ if(str.indexOf("CHMOD ")>-1){
+ if(str.indexOf("CHMOD +")==-1){
+ flg=10;
+ }
+ }
+ if(str.indexOf("CRONTAB ")>-1 || str.indexOf("KILL ")>-1){
+ flg=11;
+ }
+ if(str.indexOf("AT ")>-1){
+ pos=str.indexOf("AT ");
+ if(pos==0){
+ flg=12;
+ }
+ else{
+ kst=str.substring(pos-1,pos);
+ if(!kst.equals("B")){
+ flg=12;
+ }
+ }
+ // 16.04.09upto
+ }
+// if(str.indexOf("PATH ")>-1 || str.indexOf("PAUSE ")>-1 || str.indexOf("ARP ")>-1){
+ if(str.indexOf("PAUSE ")>-1 || str.indexOf("ARP ")>-1){
+ flg=13;
+ }
+ if(str.indexOf("RENAME ")>-1 || str.indexOf("START ")>-1){
+ flg=14;
+ }
+ // 16.07.21
+ if(str.indexOf(".SH")>-1 || str.indexOf(".BAT")>-1){
+ if(str.indexOf("MAXIMA.")==-1 && str.indexOf("KC.")==-1){ /* 2016.07.22 */
+ flg=15;
+ }
+ }
+ }
+ if(flg>0){
+ br.close();
+ return "Improper file "+String.valueOf(flg)+" "+str;
+ }
+ }
+ br.close();
+ // 16.06.05from
+ Long tm=System.currentTimeMillis()-f.lastModified();
+ if(tm>10000 || tm<0){ /* 16.06.08 */
+ flg=50;
+ return "Time expired";
+ }
+ if((args.indexOf("kc.")==-1|| args2.indexOf("ketlib")==-1) || args3.indexOf(".t")==-1){
+ flg=60;
+ return "Improper form";
+ }
+ if(flg==0){
+ if(iswindows()){
+ pb.command("cmd.exe","/c","start",args);
+ }
+ else{
+ if(ismacosx()){
+ if(args2.indexOf("open")>-1){ /* 2016.06.07from */
+ pb.command("open",args);
+ }
+ else{
+ pb.command("sh",args);
+ } /* 2016.06.07upto */
+ }
+ else{
+ pb.command("sh",args);
+ }
+ }
+ }
+ Process process = pb.start();
+ return "Normal end";
+ // 16.06.05upto
+ }
+
+ @CindyScript("ispaulvisiting")
+ public static boolean ispaulvisiting() {
+ return true;
+ }
+
+ @CindyScript("texv")
+ public static void texv( String s, String d, String sf, String tf) throws Exception{
+ ProcessBuilder pb = new ProcessBuilder();
+ String[] cmd = {s,d,sf,tf};
+ pb.command(cmd);
+ Process process = pb.start();
+ return ;
+ }
+
+ @CindyScript("givemeamatrix2")
+ public static Object givemeamatrix2() {
+ try {
+ return "the Matrix: " + theGiveMeAMatrix().toString();
+ } catch (Throwable e) {
+ e.printStackTrace();
+ return "no Matrix: " + e.toString();
+ }
+ }
+
+ public static Object theGiveMeAMatrix() {
+ double[][] matrixData = { {1d,2d,3d}, {2d,5d,3d}};
+ RealMatrix m = MatrixUtils.createRealMatrix(matrixData);
+ return m;
+ }
+
+ @CindyScript("getdirhead")
+ public static String getdirhead(){
+ if(iswindows()){
+ return System.getProperty("user.home")+"\\ketcindy";
+ }
+ else if(ismacosx()){
+ return System.getProperty("user.home")+"/ketcindy";
+ }
+ else if(islinux()){
+ return System.getProperty("user.home")+"/ketcindy";
+ // "/usr/share/ketcindy";
+ }
+ else{
+ return "unknown";
+ }
+ }
+
+ @CindyScript("getdirhead")
+ public static String getdirhead(String dir){
+ if(iswindows()){
+ return dir+"\\ketcindy";
+ }
+ else if(ismacosx()){
+ return dir+"/ketcindy";
+ }
+ else if(islinux()){
+ return dir+"/ketcindy";
+ }
+ else{
+ return "unknown";
+ }
+ }
+
+ @CindyScript("iskcexists")
+ public static boolean iskcexists(String dir){
+ File file = new File(dir+"/kc.sh");
+ if(file.exists()){
+ file.setExecutable(true,false);
+ //16.10.19
+ return true;
+ }
+ else{
+ return false;
+ }
+ }
+
+ @CindyScript("isexists")
+ // 16.10.02
+ public static boolean isexists(String dir,String fname){
+ File file = new File(dir+"/"+fname);
+ if(file.exists()){
+ return true;
+ }
+ else{
+ return false;
+ }
+ }
+
+ @CindyScript("setexec")
+ // 16.10.19
+ public static String setexec(String dir,String fname){
+ File file = new File(dir+"/"+fname);
+ File path = new File(dir);
+ if(path.exists()){
+ if(file.exists()){
+ file.setExecutable(true,false);
+ return fname+" executable";
+ }
+ else{
+// file.createNewFile();
+// file.setExecutable(true,false);
+ return fname+" not exists";
+ }
+ }
+ else{
+ return dir+" not exists";
+ }
+ }
+
+ @CindyScript("getdatetime")
+ // 16.10.21
+ public static String getdatetime(){
+ Date date=new Date();
+ return date.toString();
+ }
+
+}
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/KetCindyPlugin/srcold/KetCindyPlugin161209.java b/graphics/ketcindy/ketcindyfolder/doc/source/KetCindyPlugin/srcold/KetCindyPlugin161209.java
new file mode 100644
index 0000000000..bf997abf3e
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/KetCindyPlugin/srcold/KetCindyPlugin161209.java
@@ -0,0 +1,372 @@
+import de.cinderella.api.cs.CindyScript;
+import de.cinderella.api.cs.CindyScriptPlugin;
+import org.apache.commons.math.linear.MatrixUtils;
+import org.apache.commons.math.linear.RealMatrix;
+
+import java.awt.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.io.*;
+import java.util.Date;
+//16.10.21
+
+public class KetCindyPlugin extends CindyScriptPlugin {
+
+ public String getName() {
+ return "KetCindy Plugin";
+ }
+
+ public String getAuthor() {
+ return "The KetCindy Project Team";
+ }
+
+ @CindyScript("systemproperty")
+ public String getUserID(String s) {
+ return System.getProperty(s);
+ }
+
+ @CindyScript("square")
+ public double quadrieren(double x) {
+ return x * x;
+ }
+
+ @CindyScript("grayvalue")
+ public double getGray(Color c) {
+ return (c.getBlue() + c.getRed() + c.getGreen()) / 3.;
+ }
+
+ @CindyScript("testarray")
+ public String writeArray(ArrayList<Double> al) {
+ return Arrays.toString(al.toArray());
+ }
+
+ @CindyScript("getdir")
+ public String getdir() {
+ return System.getProperty("user.dir");
+ }
+
+ @CindyScript("gethome")
+ public String gethome() {
+ return System.getProperty("user.home");
+ }
+
+ @CindyScript("iswindows")
+ static public boolean iswindows(){
+ String os=System.getProperty("os.name").toLowerCase();
+ if(os!=null && os.startsWith("windows")){
+ return true;
+ }
+ else{
+ return false;
+ }
+ }
+ @CindyScript("ismacosx")
+ public static boolean ismacosx(){
+ String os=System.getProperty("os.name").toLowerCase();
+ if(os!=null && os.startsWith("mac")){
+ return true;
+ }
+ else{
+ return false;
+ }
+ }
+ @CindyScript("islinux")
+ public static boolean islinux(){
+ String os=System.getProperty("os.name").toLowerCase();
+ if(os!=null && os.startsWith("linux")){
+ return true;
+ }
+ else{
+ return false;
+ }
+ }
+
+ @CindyScript("iswin")
+ public static boolean iswin() {
+ String OS_NAME = System.getProperty("os.name").toLowerCase();
+ return OS_NAME.startsWith("windows");
+ }
+
+ @CindyScript("kc")
+ public static String kc(String args){
+ return "Improper call";
+ }
+
+ @CindyScript("kc")
+ public static String kc(String args,String args2,String args3) throws IOException {
+ ProcessBuilder pb = new ProcessBuilder();
+ File f = new File(args);
+ int flg=0;
+ int pos=0;
+ String kst="";
+ BufferedReader br = new BufferedReader(new FileReader(f));
+ String str;
+ while((str = br.readLine()) != null){
+ if(str.indexOf("*")>-1|| str.indexOf("?")>-1){
+ flg=1;
+ }
+ else{
+ str=str.toUpperCase();
+ str=str.replaceAll("\""," "); /* 16.06.08 */
+ if(str.indexOf("RM ")>-1 || str.indexOf("DEL ")>-1){
+ //16.07.21from
+ if(str.indexOf(".DVI")==-1 && str.indexOf(".TXT")==-1){
+ flg=2;
+ }
+ // 16.07.21upto
+ }
+ if(str.indexOf("MV ")>-1 || str.indexOf("MOVE ")>-1){
+ flg=3;
+ }
+ if(str.indexOf("RD ")>-1 || str.indexOf("RMDIR ")>-1){
+ flg=4;
+ }
+ // 16.04.09from
+ if(str.indexOf("SHUTDOWN ")>-1 || str.indexOf("SLEEP ")>-1){
+ flg=5;
+ }
+ if(str.indexOf("CLEAR ")>-1 || str.indexOf("CLS ")>-1){
+ flg=6;
+ }
+ if(str.indexOf("FTP ")>-1|| str.indexOf("TELNET ")>-1){
+ flg=7;
+ }
+ if(str.indexOf("USERMOD ")>-1 || str.indexOf("USERDEL ")>-1){
+ flg=8;
+ }
+ if(str.indexOf("USERADD ")>-1 || str.indexOf("USERMOD ")>-1){
+ flg=9;
+ }
+ if(str.indexOf("CHMOD ")>-1){
+ if(str.indexOf("CHMOD +")==-1){
+ flg=10;
+ }
+ }
+ if(str.indexOf("CRONTAB ")>-1 || str.indexOf("KILL ")>-1){
+ flg=11;
+ }
+ if(str.indexOf("AT ")>-1){
+ pos=str.indexOf("AT ");
+ if(pos==0){
+ flg=12;
+ }
+ else{
+ kst=str.substring(pos-1,pos);
+ if(!kst.equals("B")){
+ flg=12;
+ }
+ }
+ // 16.04.09upto
+ }
+// if(str.indexOf("PATH ")>-1 || str.indexOf("PAUSE ")>-1 || str.indexOf("ARP ")>-1){
+ if(str.indexOf("PAUSE ")>-1 || str.indexOf("ARP ")>-1){
+ flg=13;
+ }
+ if(str.indexOf("RENAME ")>-1 || str.indexOf("START ")>-1){
+ flg=14;
+ }
+ // 16.07.21
+ if(str.indexOf(".SH")>-1 || str.indexOf(".BAT")>-1){
+ if(str.indexOf("MAXIMA.")==-1 && str.indexOf("KC.")==-1){ /* 2016.07.22 */
+ flg=15;
+ }
+ }
+ }
+ if(flg>0){
+ br.close();
+ return "Improper file "+String.valueOf(flg)+" "+str;
+ }
+ }
+ br.close();
+ // 16.06.05from
+ Long tm=System.currentTimeMillis()-f.lastModified();
+ if(tm>10000 || tm<0){ /* 16.06.08 */
+ flg=50;
+ return "Time expired";
+ }
+ if((args.indexOf("kc.")==-1|| args2.indexOf("ketlib")==-1) || args3.indexOf(".t")==-1){
+ flg=60;
+ return "Improper form";
+ }
+ if(flg==0){
+ if(iswindows()){
+ pb.command("cmd.exe","/c","start",args);
+ }
+ else{
+ if(ismacosx()){
+ if(args2.indexOf("open")>-1){ /* 2016.06.07from */
+ pb.command("open",args);
+ }
+ else{
+ pb.command("sh",args);
+ } /* 2016.06.07upto */
+ }
+ else{
+ pb.command("sh",args);
+ }
+ }
+ }
+ Process process = pb.start();
+ return "Normal end";
+ // 16.06.05upto
+ }
+
+ @CindyScript("ispaulvisiting")
+ public static boolean ispaulvisiting() {
+ return true;
+ }
+
+ @CindyScript("texv")
+ public static void texv( String s, String d, String sf, String tf) throws Exception{
+ ProcessBuilder pb = new ProcessBuilder();
+ String[] cmd = {s,d,sf,tf};
+ pb.command(cmd);
+ Process process = pb.start();
+ return ;
+ }
+
+ @CindyScript("givemeamatrix2")
+ public static Object givemeamatrix2() {
+ try {
+ return "the Matrix: " + theGiveMeAMatrix().toString();
+ } catch (Throwable e) {
+ e.printStackTrace();
+ return "no Matrix: " + e.toString();
+ }
+ }
+
+ public static Object theGiveMeAMatrix() {
+ double[][] matrixData = { {1d,2d,3d}, {2d,5d,3d}};
+ RealMatrix m = MatrixUtils.createRealMatrix(matrixData);
+ return m;
+ }
+
+ @CindyScript("getdirhead")
+ public static String getdirhead(){
+ if(iswindows()){
+ return System.getProperty("user.home")+"\\ketcindy";
+ }
+ else if(ismacosx()){
+ return System.getProperty("user.home")+"/ketcindy";
+ }
+ else if(islinux()){
+ return System.getProperty("user.home")+"/ketcindy";
+ // "/usr/share/ketcindy";
+ }
+ else{
+ return "unknown";
+ }
+ }
+
+ @CindyScript("getdirhead")
+ public static String getdirhead(String dir){
+ if(iswindows()){
+ return dir+"\\ketcindy";
+ }
+ else if(ismacosx()){
+ return dir+"/ketcindy";
+ }
+ else if(islinux()){
+ return dir+"/ketcindy";
+ }
+ else{
+ return "unknown";
+ }
+ }
+
+ @CindyScript("iskcexists")
+ public static boolean iskcexists(String dir){
+ File file = new File(dir+"/kc.sh");
+ if(file.exists()){
+ file.setExecutable(true,false);
+ //16.10.19
+ return true;
+ }
+ else{
+ return false;
+ }
+ }
+
+ @CindyScript("isexists")
+ // 16.10.02
+ public static boolean isexists(String dir,String fname){
+ File file = new File(dir+"/"+fname);
+ if(file.exists()){
+ return true;
+ }
+ else{
+ return false;
+ }
+ }
+
+ @CindyScript("fileslength")
+ // 16.12.09
+ public static int fileslength(String dirname){
+ File dir=new File(dirname);
+ File[] files=dir.listFiles();
+ String str;
+ String head;
+ int ctr=0;
+ if(dir.exists()){
+ for(int i=0;i<files.length;i++){
+ str=files[i].getName();
+ head=str.substring(0,1);
+ if(head.equals(".")){ctr=ctr+1;}
+ }
+ return files.length-ctr;
+ }
+ else{
+ return -1;
+ }
+ }
+
+ @CindyScript("fileslist")
+ // 16.12.09
+ public static String fileslist(String dirname){
+ File dir=new File(dirname);
+ File[] files=dir.listFiles();
+ String str;
+ String head;
+ String strall="";
+ if(dir.exists()){
+ for(int i=0;i<files.length;i++){
+ str=files[i].getName();
+ head=str.substring(0,1);
+ if(!head.equals(".")){strall=strall+","+str;}
+ }
+ return strall.substring(1);
+ }
+ else{
+ return "";
+ }
+ }
+
+ @CindyScript("setexec")
+ // 16.10.19
+ public static String setexec(String dir,String fname){
+ File file = new File(dir+"/"+fname);
+ File path = new File(dir);
+ if(path.exists()){
+ if(file.exists()){
+ file.setExecutable(true,false);
+ return fname+" executable";
+ }
+ else{
+// file.createNewFile();
+// file.setExecutable(true,false);
+ return fname+" not exists";
+ }
+ }
+ else{
+ return dir+" not exists";
+ }
+ }
+
+ @CindyScript("getdatetime")
+ // 16.10.21
+ public static String getdatetime(){
+ Date date=new Date();
+ return date.toString();
+ }
+
+}
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/KetCindyPlugin/srcold/KetCindyPlugin170605.java b/graphics/ketcindy/ketcindyfolder/doc/source/KetCindyPlugin/srcold/KetCindyPlugin170605.java
new file mode 100644
index 0000000000..3a34639335
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/KetCindyPlugin/srcold/KetCindyPlugin170605.java
@@ -0,0 +1,377 @@
+import de.cinderella.api.cs.CindyScript;
+import de.cinderella.api.cs.CindyScriptPlugin;
+import org.apache.commons.math.linear.MatrixUtils;
+import org.apache.commons.math.linear.RealMatrix;
+
+import java.awt.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.io.*;
+import java.util.Date;
+//17.06.05
+
+public class KetCindyPlugin extends CindyScriptPlugin {
+
+ public String getName() {
+ return "KetCindy Plugin";
+ }
+
+ public String getAuthor() {
+ return "The KetCindy Project Team";
+ }
+
+ @CindyScript("ketjavaversion")
+ public String ketjavaversion() {
+ return "Ketjava 2017.06.05";
+ }
+
+ @CindyScript("systemproperty")
+ public String getUserID(String s) {
+ return System.getProperty(s);
+ }
+
+ @CindyScript("square")
+ public double quadrieren(double x) {
+ return x * x;
+ }
+
+ @CindyScript("grayvalue")
+ public double getGray(Color c) {
+ return (c.getBlue() + c.getRed() + c.getGreen()) / 3.;
+ }
+
+ @CindyScript("testarray")
+ public String writeArray(ArrayList<Double> al) {
+ return Arrays.toString(al.toArray());
+ }
+
+ @CindyScript("getdir")
+ public String getdir() {
+ return System.getProperty("user.dir");
+ }
+
+ @CindyScript("gethome")
+ public String gethome() {
+ return System.getProperty("user.home");
+ }
+
+ @CindyScript("iswindows")
+ static public boolean iswindows(){
+ String os=System.getProperty("os.name").toLowerCase();
+ if(os!=null && os.startsWith("windows")){
+ return true;
+ }
+ else{
+ return false;
+ }
+ }
+ @CindyScript("ismacosx")
+ public static boolean ismacosx(){
+ String os=System.getProperty("os.name").toLowerCase();
+ if(os!=null && os.startsWith("mac")){
+ return true;
+ }
+ else{
+ return false;
+ }
+ }
+ @CindyScript("islinux")
+ public static boolean islinux(){
+ String os=System.getProperty("os.name").toLowerCase();
+ if(os!=null && os.startsWith("linux")){
+ return true;
+ }
+ else{
+ return false;
+ }
+ }
+
+ @CindyScript("iswin")
+ public static boolean iswin() {
+ String OS_NAME = System.getProperty("os.name").toLowerCase();
+ return OS_NAME.startsWith("windows");
+ }
+
+ @CindyScript("kc")
+ public static String kc(String args){
+ return "Improper call";
+ }
+
+ @CindyScript("kc")
+ public static String kc(String args,String args2,String args3) throws IOException {
+ ProcessBuilder pb = new ProcessBuilder();
+ File f = new File(args);
+ int flg=0;
+ int pos=0;
+ String kst="";
+ BufferedReader br = new BufferedReader(new FileReader(f));
+ String str;
+ while((str = br.readLine()) != null){
+ if(str.indexOf("*")>-1|| str.indexOf("?")>-1){
+ flg=1;
+ }
+ else{
+ str=str.toUpperCase();
+ str=str.replaceAll("\""," "); /* 16.06.08 */
+ if(str.indexOf("RM ")>-1 || str.indexOf("DEL ")>-1){
+ //16.07.21from
+ if(str.indexOf(".DVI")==-1 && str.indexOf(".TXT")==-1){
+ flg=2;
+ }
+ // 16.07.21upto
+ }
+ if(str.indexOf("MV ")>-1 || str.indexOf("MOVE ")>-1){
+ flg=3;
+ }
+ if(str.indexOf("RD ")>-1 || str.indexOf("RMDIR ")>-1){
+ flg=4;
+ }
+ // 16.04.09from
+ if(str.indexOf("SHUTDOWN ")>-1 || str.indexOf("SLEEP ")>-1){
+ flg=5;
+ }
+ if(str.indexOf("CLEAR ")>-1 || str.indexOf("CLS ")>-1){
+ flg=6;
+ }
+ if(str.indexOf("FTP ")>-1|| str.indexOf("TELNET ")>-1){
+ flg=7;
+ }
+ if(str.indexOf("USERMOD ")>-1 || str.indexOf("USERDEL ")>-1){
+ flg=8;
+ }
+ if(str.indexOf("USERADD ")>-1 || str.indexOf("USERMOD ")>-1){
+ flg=9;
+ }
+ if(str.indexOf("CHMOD ")>-1){
+ if(str.indexOf("CHMOD +")==-1){
+ flg=10;
+ }
+ }
+ if(str.indexOf("CRONTAB ")>-1 || str.indexOf("KILL ")>-1){
+ flg=11;
+ }
+ if(str.indexOf("AT ")>-1){
+ pos=str.indexOf("AT ");
+ if(pos==0){
+ flg=12;
+ }
+ else{
+ kst=str.substring(pos-1,pos);
+ if(!kst.equals("B")){
+ flg=12;
+ }
+ }
+ // 16.04.09upto
+ }
+// if(str.indexOf("PATH ")>-1 || str.indexOf("PAUSE ")>-1 || str.indexOf("ARP ")>-1){
+ if(str.indexOf("PAUSE ")>-1 || str.indexOf("ARP ")>-1){
+ flg=13;
+ }
+ if(str.indexOf("RENAME ")>-1 || str.indexOf("START ")>-1){
+ flg=14;
+ }
+ // 16.07.21
+ if(str.indexOf(".SH")>-1 || str.indexOf(".BAT")>-1){
+ if(str.indexOf("MAXIMA.")==-1 && str.indexOf("KC.")==-1){ /* 2016.07.22 */
+ flg=15;
+ }
+ }
+ }
+ if(flg>0){
+ br.close();
+ return "Improper file "+String.valueOf(flg)+" "+str;
+ }
+ }
+ br.close();
+ // 16.06.05from
+ Long tm=System.currentTimeMillis()-f.lastModified();
+ if(tm>10000 || tm<0){ /* 16.06.08 */
+ flg=50;
+ return "Time expired";
+ }
+ if((args.indexOf("kc.")==-1|| args2.indexOf("ketlib")==-1) || args3.indexOf(".t")==-1){
+ flg=60;
+ return "Improper form";
+ }
+ if(flg==0){
+ if(iswindows()){
+ pb.command("cmd.exe","/c","start",args);
+ }
+ else{
+ if(ismacosx()){
+ if(args2.indexOf("open")>-1){ /* 2016.06.07from */
+ pb.command("open",args);
+ }
+ else{
+ pb.command("sh",args);
+ } /* 2016.06.07upto */
+ }
+ else{
+ pb.command("sh",args);
+ }
+ }
+ }
+ Process process = pb.start();
+ return "Normal end";
+ // 16.06.05upto
+ }
+
+ @CindyScript("ispaulvisiting")
+ public static boolean ispaulvisiting() {
+ return true;
+ }
+
+ @CindyScript("texv")
+ public static void texv( String s, String d, String sf, String tf) throws Exception{
+ ProcessBuilder pb = new ProcessBuilder();
+ String[] cmd = {s,d,sf,tf};
+ pb.command(cmd);
+ Process process = pb.start();
+ return ;
+ }
+
+ @CindyScript("givemeamatrix2")
+ public static Object givemeamatrix2() {
+ try {
+ return "the Matrix: " + theGiveMeAMatrix().toString();
+ } catch (Throwable e) {
+ e.printStackTrace();
+ return "no Matrix: " + e.toString();
+ }
+ }
+
+ public static Object theGiveMeAMatrix() {
+ double[][] matrixData = { {1d,2d,3d}, {2d,5d,3d}};
+ RealMatrix m = MatrixUtils.createRealMatrix(matrixData);
+ return m;
+ }
+
+ @CindyScript("getdirhead")
+ public static String getdirhead(){
+ if(iswindows()){
+ return System.getProperty("user.home")+"\\ketcindy";
+ }
+ else if(ismacosx()){
+ return System.getProperty("user.home")+"/ketcindy";
+ }
+ else if(islinux()){
+ return System.getProperty("user.home")+"/ketcindy";
+ // "/usr/share/ketcindy";
+ }
+ else{
+ return "unknown";
+ }
+ }
+
+ @CindyScript("getdirhead")
+ public static String getdirhead(String dir){
+ if(iswindows()){
+ return dir+"\\ketcindy";
+ }
+ else if(ismacosx()){
+ return dir+"/ketcindy";
+ }
+ else if(islinux()){
+ return dir+"/ketcindy";
+ }
+ else{
+ return "unknown";
+ }
+ }
+
+ @CindyScript("iskcexists")
+ public static boolean iskcexists(String dir){
+ File file = new File(dir+"/kc.sh");
+ if(file.exists()){
+ file.setExecutable(true,false);
+ //16.10.19
+ return true;
+ }
+ else{
+ return false;
+ }
+ }
+
+ @CindyScript("isexists")
+ // 16.10.02
+ public static boolean isexists(String dir,String fname){
+ File file = new File(dir+"/"+fname);
+ if(file.exists()){
+ return true;
+ }
+ else{
+ return false;
+ }
+ }
+
+ @CindyScript("fileslength")
+ // 16.12.09
+ public static int fileslength(String dirname){
+ File dir=new File(dirname);
+ File[] files=dir.listFiles();
+ String str;
+ String head;
+ int ctr=0;
+ if(dir.exists()){
+ for(int i=0;i<files.length;i++){
+ str=files[i].getName();
+ head=str.substring(0,1);
+ if(head.equals(".")){ctr=ctr+1;}
+ }
+ return files.length-ctr;
+ }
+ else{
+ return -1;
+ }
+ }
+
+ @CindyScript("fileslist")
+ // 16.12.09
+ public static String fileslist(String dirname){
+ File dir=new File(dirname);
+ File[] files=dir.listFiles();
+ String str;
+ String head;
+ String strall="";
+ if(dir.exists()){
+ for(int i=0;i<files.length;i++){
+ str=files[i].getName();
+ head=str.substring(0,1);
+ if(!head.equals(".")){strall=strall+","+str;}
+ }
+ return strall.substring(1);
+ }
+ else{
+ return "";
+ }
+ }
+
+ @CindyScript("setexec")
+ // 16.10.19
+ public static String setexec(String dir,String fname){
+ File file = new File(dir+"/"+fname);
+ File path = new File(dir);
+ if(path.exists()){
+ if(file.exists()){
+ file.setExecutable(true,false);
+ return fname+" executable";
+ }
+ else{
+// file.createNewFile();
+// file.setExecutable(true,false);
+ return fname+" not exists";
+ }
+ }
+ else{
+ return dir+" not exists";
+ }
+ }
+
+ @CindyScript("getdatetime")
+ // 16.10.21
+ public static String getdatetime(){
+ Date date=new Date();
+ return date.toString();
+ }
+
+}
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/KetCindyPlugin/srcold/KetCindyPlugin170906.java b/graphics/ketcindy/ketcindyfolder/doc/source/KetCindyPlugin/srcold/KetCindyPlugin170906.java
new file mode 100644
index 0000000000..404d9e3e16
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/KetCindyPlugin/srcold/KetCindyPlugin170906.java
@@ -0,0 +1,388 @@
+import de.cinderella.api.cs.CindyScript;
+import de.cinderella.api.cs.CindyScriptPlugin;
+import org.apache.commons.math.linear.MatrixUtils;
+import org.apache.commons.math.linear.RealMatrix;
+
+import java.awt.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.io.*;
+import java.util.Date;
+//17.06.05
+
+public class KetCindyPlugin extends CindyScriptPlugin {
+
+ public String getName() {
+ return "KetCindy Plugin";
+ }
+
+ public String getAuthor() {
+ return "The KetCindy Project Team";
+ }
+
+ @CindyScript("ketjavaversion")
+ public String ketjavaversion() {
+ return "Ketjava 2017.06.05";
+ }
+
+ @CindyScript("systemproperty")
+ public String getUserID(String s) {
+ return System.getProperty(s);
+ }
+
+ @CindyScript("square")
+ public double quadrieren(double x) {
+ return x * x;
+ }
+
+ @CindyScript("grayvalue")
+ public double getGray(Color c) {
+ return (c.getBlue() + c.getRed() + c.getGreen()) / 3.;
+ }
+
+ @CindyScript("testarray")
+ public String writeArray(ArrayList<Double> al) {
+ return Arrays.toString(al.toArray());
+ }
+
+ @CindyScript("getdir")
+ public String getdir() {
+ return System.getProperty("user.dir");
+ }
+
+ @CindyScript("gethome")
+ public String gethome() {
+ return System.getProperty("user.home");
+ }
+
+ @CindyScript("iswindows")
+ static public boolean iswindows(){
+ String os=System.getProperty("os.name").toLowerCase();
+ if(os!=null && os.startsWith("windows")){
+ return true;
+ }
+ else{
+ return false;
+ }
+ }
+ @CindyScript("ismacosx")
+ public static boolean ismacosx(){
+ String os=System.getProperty("os.name").toLowerCase();
+ if(os!=null && os.startsWith("mac")){
+ return true;
+ }
+ else{
+ return false;
+ }
+ }
+ @CindyScript("islinux")
+ public static boolean islinux(){
+ String os=System.getProperty("os.name").toLowerCase();
+ if(os!=null && os.startsWith("linux")){
+ return true;
+ }
+ else{
+ return false;
+ }
+ }
+
+ @CindyScript("iswin")
+ public static boolean iswin() {
+ String OS_NAME = System.getProperty("os.name").toLowerCase();
+ return OS_NAME.startsWith("windows");
+ }
+
+ @CindyScript("kc")
+ public static String kc(String args){
+ return "Improper call";
+ }
+
+ @CindyScript("kc")
+ public static String kc(String args,String args2,String args3) throws IOException {
+ ProcessBuilder pb = new ProcessBuilder();
+ File f = new File(args);
+ int flg=0;
+ int pos=0;
+ String kst="";
+ BufferedReader br = new BufferedReader(new FileReader(f));
+ String str;
+ while((str = br.readLine()) != null){
+ if(str.indexOf("*")>-1|| str.indexOf("?")>-1){
+ flg=1;
+ }
+ else{
+ str=str.toUpperCase();
+ str=str.replaceAll("\""," "); /* 16.06.08 */
+ if(str.indexOf("RM ")>-1 || str.indexOf("DEL ")>-1){
+ //16.07.21from
+ if(str.indexOf(".DVI")==-1 && str.indexOf(".TXT")==-1){
+ flg=2;
+ }
+ // 16.07.21upto
+ }
+ if(str.indexOf("MV ")>-1 || str.indexOf("MOVE ")>-1){
+ flg=3;
+ }
+ if(str.indexOf("RD ")>-1 || str.indexOf("RMDIR ")>-1){
+ flg=4;
+ }
+ // 16.04.09from
+ if(str.indexOf("SHUTDOWN ")>-1 || str.indexOf("SLEEP ")>-1){
+ flg=5;
+ }
+ if(str.indexOf("CLEAR ")>-1 || str.indexOf("CLS ")>-1){
+ flg=6;
+ }
+ if(str.indexOf("FTP ")>-1|| str.indexOf("TELNET ")>-1){
+ flg=7;
+ }
+ if(str.indexOf("USERMOD ")>-1 || str.indexOf("USERDEL ")>-1){
+ flg=8;
+ }
+ if(str.indexOf("USERADD ")>-1 || str.indexOf("USERMOD ")>-1){
+ flg=9;
+ }
+ if(str.indexOf("CHMOD ")>-1){
+ if(str.indexOf("CHMOD +")==-1){
+ flg=10;
+ }
+ }
+ if(str.indexOf("CRONTAB ")>-1 || str.indexOf("KILL ")>-1){
+ flg=11;
+ }
+ if(str.indexOf("AT ")>-1){
+ pos=str.indexOf("AT ");
+ if(pos==0){
+ flg=12;
+ }
+ else{
+ kst=str.substring(pos-1,pos);
+ if(!kst.equals("B")){
+ flg=12;
+ }
+ }
+ // 16.04.09upto
+ }
+// if(str.indexOf("PATH ")>-1 || str.indexOf("PAUSE ")>-1 || str.indexOf("ARP ")>-1){
+ if(str.indexOf("PAUSE ")>-1 || str.indexOf("ARP ")>-1){
+ flg=13;
+ }
+ if(str.indexOf("RENAME ")>-1 || str.indexOf("START ")>-1){
+ flg=14;
+ }
+ // 16.07.21
+ if(str.indexOf(".SH")>-1 || str.indexOf(".BAT")>-1){
+ if(str.indexOf("MAXIMA.")==-1 && str.indexOf("KC.")==-1){ /* 2016.07.22 */
+ flg=15;
+ }
+ }
+ }
+ if(flg>0){
+ br.close();
+ return "Improper file "+String.valueOf(flg)+" "+str;
+ }
+ }
+ br.close();
+ // 16.06.05from
+ Long tm=System.currentTimeMillis()-f.lastModified();
+ if(tm>10000 || tm<0){ /* 16.06.08 */
+ flg=50;
+ return "Time expired";
+ }
+ if((args.indexOf("kc.")==-1|| args2.indexOf("ketlib")==-1) || args3.indexOf(".t")==-1){
+ flg=60;
+ return "Improper form";
+ }
+ if(flg==0){
+ if(iswindows()){
+ pb.command("cmd.exe","/c","start",args);
+ }
+ else{
+ if(ismacosx()){
+ if(args2.indexOf("open")>-1){ /* 2016.06.07from */
+ pb.command("open",args);
+ }
+ else{
+ pb.command("sh",args);
+ } /* 2016.06.07upto */
+ }
+ else{
+ pb.command("sh",args);
+ }
+ }
+ }
+ Process process = pb.start();
+ return "Normal end";
+ // 16.06.05upto
+ }
+
+ @CindyScript("ispaulvisiting")
+ public static boolean ispaulvisiting() {
+ return true;
+ }
+
+ @CindyScript("texv")
+ public static void texv( String s, String d, String sf, String tf) throws Exception{
+ ProcessBuilder pb = new ProcessBuilder();
+ String[] cmd = {s,d,sf,tf};
+ pb.command(cmd);
+ Process process = pb.start();
+ return ;
+ }
+
+ @CindyScript("givemeamatrix2")
+ public static Object givemeamatrix2() {
+ try {
+ return "the Matrix: " + theGiveMeAMatrix().toString();
+ } catch (Throwable e) {
+ e.printStackTrace();
+ return "no Matrix: " + e.toString();
+ }
+ }
+
+ public static Object theGiveMeAMatrix() {
+ double[][] matrixData = { {1d,2d,3d}, {2d,5d,3d}};
+ RealMatrix m = MatrixUtils.createRealMatrix(matrixData);
+ return m;
+ }
+
+ @CindyScript("getdirhead")
+ public static String getdirhead(){
+ if(iswindows()){
+ return System.getProperty("user.home")+"\\ketcindy";
+ }
+ else if(ismacosx()){
+ return System.getProperty("user.home")+"/ketcindy";
+ }
+ else if(islinux()){
+ return System.getProperty("user.home")+"/ketcindy";
+ // "/usr/share/ketcindy";
+ }
+ else{
+ return "unknown";
+ }
+ }
+
+ @CindyScript("getdirhead")
+ public static String getdirhead(String dir){
+ if(iswindows()){
+ return dir+"\\ketcindy";
+ }
+ else if(ismacosx()){
+ return dir+"/ketcindy";
+ }
+ else if(islinux()){
+ return dir+"/ketcindy";
+ }
+ else{
+ return "unknown";
+ }
+ }
+
+ @CindyScript("iskcexists")
+ public static boolean iskcexists(String dir){
+ File file = new File(dir+"/kc.sh");
+ if(file.exists()){
+ file.setExecutable(true,false);
+ //16.10.19
+ return true;
+ }
+ else{
+ return false;
+ }
+ }
+
+ @CindyScript("isexists")
+ // 16.10.02
+ public static boolean isexists(String dir,String fname){
+ File file = new File(dir+"/"+fname);
+ if(file.exists()){
+ return true;
+ }
+ else{
+ return false;
+ }
+ }
+
+ @CindyScript("makedir")
+ // 17.09.06
+ public static boolean makedir(String dir,String dirname){
+ File newfile = new File(dir+"/"+dirname);
+ if (newfile.mkdir()){
+ return true;
+ }else{
+ return false;
+ }
+ }
+
+ @CindyScript("fileslength")
+ // 16.12.09
+ public static int fileslength(String dirname){
+ File dir=new File(dirname);
+ File[] files=dir.listFiles();
+ String str;
+ String head;
+ int ctr=0;
+ if(dir.exists()){
+ for(int i=0;i<files.length;i++){
+ str=files[i].getName();
+ head=str.substring(0,1);
+ if(head.equals(".")){ctr=ctr+1;}
+ }
+ return files.length-ctr;
+ }
+ else{
+ return -1;
+ }
+ }
+
+ @CindyScript("fileslist")
+ // 16.12.09
+ public static String fileslist(String dirname){
+ File dir=new File(dirname);
+ File[] files=dir.listFiles();
+ String str;
+ String head;
+ String strall="";
+ if(dir.exists()){
+ for(int i=0;i<files.length;i++){
+ str=files[i].getName();
+ head=str.substring(0,1);
+ if(!head.equals(".")){strall=strall+","+str;}
+ }
+ return strall.substring(1);
+ }
+ else{
+ return "";
+ }
+ }
+
+ @CindyScript("setexec")
+ // 16.10.19
+ public static String setexec(String dir,String fname){
+ File file = new File(dir+"/"+fname);
+ File path = new File(dir);
+ if(path.exists()){
+ if(file.exists()){
+ file.setExecutable(true,false);
+ return fname+" executable";
+ }
+ else{
+// file.createNewFile();
+// file.setExecutable(true,false);
+ return fname+" not exists";
+ }
+ }
+ else{
+ return dir+" not exists";
+ }
+ }
+
+ @CindyScript("getdatetime")
+ // 16.10.21
+ public static String getdatetime(){
+ Date date=new Date();
+ return date.toString();
+ }
+
+}
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/KetCindyPlugin/srcold/KetCindyPlugin171112.java b/graphics/ketcindy/ketcindyfolder/doc/source/KetCindyPlugin/srcold/KetCindyPlugin171112.java
new file mode 100644
index 0000000000..3e7d631280
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/KetCindyPlugin/srcold/KetCindyPlugin171112.java
@@ -0,0 +1,399 @@
+import de.cinderella.api.cs.CindyScript;
+import de.cinderella.api.cs.CindyScriptPlugin;
+import org.apache.commons.math.linear.MatrixUtils;
+import org.apache.commons.math.linear.RealMatrix;
+
+import java.awt.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.io.*;
+import java.util.Date;
+
+public class KetCindyPlugin extends CindyScriptPlugin {
+
+ @CindyScript("ketjavaversion")
+ public String ketjavaversion() {
+ return "Ketjava 2017.11.08";
+ }
+
+ public String getName() {
+ return "KetCindy Plugin";
+ }
+
+ public String getAuthor() {
+ return "The KetCindy Project Team";
+ }
+
+ @CindyScript("systemproperty")
+ public String getUserID(String s) {
+ return System.getProperty(s);
+ }
+
+ @CindyScript("square")
+ public double quadrieren(double x) {
+ return x * x;
+ }
+
+ @CindyScript("grayvalue")
+ public double getGray(Color c) {
+ return (c.getBlue() + c.getRed() + c.getGreen()) / 3.;
+ }
+
+ @CindyScript("testarray")
+ public String writeArray(ArrayList<Double> al) {
+ return Arrays.toString(al.toArray());
+ }
+
+ @CindyScript("getdir")
+ public String getdir() {
+ return System.getProperty("user.dir");
+ }
+
+ @CindyScript("gethome")
+ public String gethome() {
+ return System.getProperty("user.home");
+ }
+
+ @CindyScript("getname")
+ // 17.10.08
+ public String getname() {
+ return System.getProperty("user.name");
+ }
+
+ @CindyScript("iswindows")
+ static public boolean iswindows(){
+ String os=System.getProperty("os.name").toLowerCase();
+ if(os!=null && os.startsWith("windows")){
+ return true;
+ }
+ else{
+ return false;
+ }
+ }
+ @CindyScript("ismacosx")
+ public static boolean ismacosx(){
+ String os=System.getProperty("os.name").toLowerCase();
+ if(os!=null && os.startsWith("mac")){
+ return true;
+ }
+ else{
+ return false;
+ }
+ }
+ @CindyScript("islinux")
+ public static boolean islinux(){
+ String os=System.getProperty("os.name").toLowerCase();
+ if(os!=null && os.startsWith("linux")){
+ return true;
+ }
+ else{
+ return false;
+ }
+ }
+
+ @CindyScript("iswin")
+ public static boolean iswin() {
+ String OS_NAME = System.getProperty("os.name").toLowerCase();
+ return OS_NAME.startsWith("windows");
+ }
+
+ @CindyScript("kc")
+ public static String kc(String args){
+ return "Improper call";
+ }
+
+ @CindyScript("kc")
+ public static String kc(String args,String args2,String args3) throws IOException {
+ ProcessBuilder pb = new ProcessBuilder();
+ File f = new File(args);
+ int flg=0;
+ int pos=0;
+ String kst="";
+ BufferedReader br = new BufferedReader(new FileReader(f));
+ String str;
+ while((str = br.readLine()) != null){
+ if(str.indexOf("*")>-1|| str.indexOf("?")>-1){
+ flg=1;
+ }
+ else{
+ str=str.toUpperCase();
+ str=str.replaceAll("\""," "); /* 16.06.08 */
+ if(str.indexOf("RM ")>-1 || str.indexOf("DEL ")>-1){
+ //16.07.21from
+ if(str.indexOf(".DVI")==-1 && str.indexOf(".TXT")==-1){
+ flg=2;
+ }
+ // 16.07.21upto
+ }
+ if(str.indexOf("MV ")>-1 || str.indexOf("MOVE ")>-1){
+ flg=3;
+ }
+ if(str.indexOf("RD ")>-1 || str.indexOf("RMDIR ")>-1){
+ flg=4;
+ }
+ // 16.04.09from
+ if(str.indexOf("SHUTDOWN ")>-1 || str.indexOf("SLEEP ")>-1){
+ flg=5;
+ }
+ if(str.indexOf("CLEAR ")>-1 || str.indexOf("CLS ")>-1){
+ flg=6;
+ }
+ if(str.indexOf("FTP ")>-1|| str.indexOf("TELNET ")>-1){
+ flg=7;
+ }
+ if(str.indexOf("USERMOD ")>-1 || str.indexOf("USERDEL ")>-1){
+ flg=8;
+ }
+ if(str.indexOf("USERADD ")>-1 || str.indexOf("USERMOD ")>-1){
+ flg=9;
+ }
+ if(str.indexOf("CHMOD ")>-1){
+ if(str.indexOf("CHMOD +")==-1){
+ flg=10;
+ }
+ }
+ if(str.indexOf("CRONTAB ")>-1 || str.indexOf("KILL ")>-1){
+ flg=11;
+ }
+ if(str.indexOf("AT ")>-1){
+ pos=str.indexOf("AT ");
+ if(pos==0){
+ flg=12;
+ }
+ else{
+ kst=str.substring(pos-1,pos);
+ if(!kst.equals("B")){
+ flg=12;
+ }
+ }
+ // 16.04.09upto
+ }
+// if(str.indexOf("PATH ")>-1 || str.indexOf("PAUSE ")>-1 || str.indexOf("ARP ")>-1){
+ if(str.indexOf("PAUSE ")>-1 || str.indexOf("ARP ")>-1){
+ flg=13;
+ }
+ if(str.indexOf("RENAME ")>-1 || str.indexOf("START ")>-1){
+ flg=14;
+ }
+ // 16.07.21
+ if(str.indexOf(".SH")>-1 || str.indexOf(".BAT")>-1){
+ if(str.indexOf("MAXIMA.")==-1 && str.indexOf("KC.")==-1){ /* 2016.07.22 */
+ flg=15;
+ }
+ }
+ }
+ if(flg>0){
+ br.close();
+ return "Improper file "+String.valueOf(flg)+" "+str;
+ }
+ }
+ br.close();
+ // 16.06.05from
+ Long tm=System.currentTimeMillis()-f.lastModified();
+ if(tm>10000 || tm<0){ /* 16.06.08 */
+ flg=50;
+ return "Time expired";
+ }
+ if((args.indexOf("kc.")==-1|| args2.indexOf("ketlib")==-1) || args3.indexOf(".t")==-1){
+ flg=60;
+ return "Improper form";
+ }
+ if(flg==0){
+ if(iswindows()){
+ pb.command("cmd.exe","/c","start",args);
+ }
+ else{
+ if(ismacosx()){
+ if(args2.indexOf("open")>-1){ /* 2016.06.07from */
+ pb.command("open",args);
+ }
+ else{
+ pb.command("sh",args);
+ } /* 2016.06.07upto */
+ }
+ else{
+ pb.command("sh",args);
+ }
+ }
+ }
+ Process process = pb.start();
+ return "Normal end";
+ // 16.06.05upto
+ }
+
+ @CindyScript("ispaulvisiting")
+ public static boolean ispaulvisiting() {
+ return true;
+ }
+
+ @CindyScript("texv")
+ public static void texv( String s, String d, String sf, String tf) throws Exception{
+ ProcessBuilder pb = new ProcessBuilder();
+ String[] cmd = {s,d,sf,tf};
+ pb.command(cmd);
+ Process process = pb.start();
+ return ;
+ }
+
+ @CindyScript("givemeamatrix2")
+ public static Object givemeamatrix2() {
+ try {
+ return "the Matrix: " + theGiveMeAMatrix().toString();
+ } catch (Throwable e) {
+ e.printStackTrace();
+ return "no Matrix: " + e.toString();
+ }
+ }
+
+ public static Object theGiveMeAMatrix() {
+ double[][] matrixData = { {1d,2d,3d}, {2d,5d,3d}};
+ RealMatrix m = MatrixUtils.createRealMatrix(matrixData);
+ return m;
+ }
+
+ @CindyScript("getdirhead")
+ public static String getdirhead(){
+ if(iswindows()){
+ return System.getProperty("user.home")+"\\ketcindy";
+ }
+ else if(ismacosx()){
+ return System.getProperty("user.home")+"/ketcindy";
+ }
+ else if(islinux()){
+ return System.getProperty("user.home")+"/ketcindy";
+ // "/usr/share/ketcindy";
+ }
+ else{
+ return "unknown";
+ }
+ }
+
+ @CindyScript("getdirhead")
+ public static String getdirhead(String dir){
+ if(iswindows()){
+ return dir+"\\ketcindy";
+ }
+ else if(ismacosx()){
+ return dir+"/ketcindy";
+ }
+ else if(islinux()){
+ return dir+"/ketcindy";
+ }
+ else{
+ return "unknown";
+ }
+ }
+
+ @CindyScript("iskcexists")
+ public static boolean iskcexists(String dir){
+ File file = new File(dir+"/kc.sh");
+ if(file.exists()){
+ file.setExecutable(true,false);
+ //16.10.19
+ return true;
+ }
+ else{
+ return false;
+ }
+ }
+
+ @CindyScript("pathsep")
+ // 17.09.06
+ public static String pathsep(){
+ return File.separator;
+ }
+
+ @CindyScript("isexists")
+ // 16.10.02
+ public static boolean isexists(String dir,String fname){
+ File file = new File(dir+File.separator+fname);
+ if(file.exists()){
+ return true;
+ }
+ else{
+ return false;
+ }
+ }
+
+ @CindyScript("makedir")
+ // 17.09.06
+ public static String makedir(String dir,String dirname){
+ File newfile = new File(dir+File.separator+dirname);
+ if (newfile.mkdir()){
+ return dirname+" created";
+ }else{
+ return dirname+" already exists";
+ }
+ }
+
+ @CindyScript("fileslength")
+ // 16.12.09
+ public static int fileslength(String dirname){
+ File dir=new File(dirname);
+ File[] files=dir.listFiles();
+ String str;
+ String head;
+ int ctr=0;
+ if(dir.exists()){
+ for(int i=0;i<files.length;i++){
+ str=files[i].getName();
+ head=str.substring(0,1);
+ if(head.equals(".")){ctr=ctr+1;}
+ }
+ return files.length-ctr;
+ }
+ else{
+ return -1;
+ }
+ }
+
+ @CindyScript("fileslist")
+ // 16.12.09
+ public static String fileslist(String dirname){
+ File dir=new File(dirname);
+ File[] files=dir.listFiles();
+ String str;
+ String head;
+ String strall="";
+ if(dir.exists()){
+ for(int i=0;i<files.length;i++){
+ str=files[i].getName();
+ head=str.substring(0,1);
+ if(!head.equals(".")){strall=strall+","+str;}
+ }
+ return strall.substring(1);
+ }
+ else{
+ return "";
+ }
+ }
+
+ @CindyScript("setexec")
+ // 16.10.19
+ public static String setexec(String dir,String fname){
+ File file = new File(dir+File.separator+fname);
+ File path = new File(dir);
+ if(path.exists()){
+ if(file.exists()){
+ file.setExecutable(true,false);
+ return fname+" executable";
+ }
+ else{
+// file.createNewFile();
+// file.setExecutable(true,false);
+ return fname+" not exists";
+ }
+ }
+ else{
+ return dir+" not exists";
+ }
+ }
+
+ @CindyScript("getdatetime")
+ // 16.10.21
+ public static String getdatetime(){
+ Date date=new Date();
+ return date.toString();
+ }
+
+}
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/cdy-templates/Makefile b/graphics/ketcindy/ketcindyfolder/doc/source/cdy-templates/Makefile
new file mode 100644
index 0000000000..2185d1bf1f
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/cdy-templates/Makefile
@@ -0,0 +1,25 @@
+WORK := $(abspath ../../../work)
+
+all: $(WORK)/template1basic.cdy $(WORK)/template2advanced.cdy
+
+$(WORK)/template1basic.cdy: $(WORK)/Scriptkelib.txt
+ rm -rf tmp
+ mkdir tmp
+ cd tmp && unzip $(WORK)/template1basic.cdy
+ cp $(WORK)/Scriptkelib.txt tmp/private/de.cinderella/scripts/Init/0/KETlib.cs
+ rm $(WORK)/template1basic.cdy
+ cd tmp && zip -r $(WORK)/template1basic.cdy *
+ rm -rf tmp
+
+$(WORK)/template2advanced.cdy: $(WORK)/Scriptkelib.txt
+ rm -rf tmp
+ mkdir tmp
+ cd tmp && unzip $(WORK)/template2advanced.cdy
+ cp $(WORK)/Scriptkelib.txt tmp/private/de.cinderella/scripts/Init/0/KETlib.cs
+ rm $(WORK)/template2advanced.cdy
+ cd tmp && zip -r $(WORK)/template2advanced.cdy *
+ rm -rf tmp
+
+.PHONY: all
+
+
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/howtoinstall/HowToInstallE.tex b/graphics/ketcindy/ketcindyfolder/doc/source/howtoinstall/HowToInstallE.tex
new file mode 100644
index 0000000000..68675beb10
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/howtoinstall/HowToInstallE.tex
@@ -0,0 +1,70 @@
+\documentclass{article}
+\usepackage{ketpic,ketlayer}
+\usepackage{amsmath,amssymb}
+\usepackage{graphicx}
+\usepackage{xcolor}
+\usepackage{bm,enumerate}
+\usepackage[colorlinks=true,urlcolor=blue]{hyperref}
+
+\setmargin{20}{20}{20}{20}
+
+\renewcommand{\labelitemi}{$\cdot$}
+
+\begin{document}
+
+\begin{center}
+installing of KeTCindy
+\end{center}
+
+\hfill Modified\ :\ \today
+
+\begin{enumerate}[\bf\large 1.]
+\item Install Cinderella, R and Maxima.
+ \begin{itemize}
+ \item \url{https://beta.cinderella.de} (Cinderella)
+ \item \url{https://cran.r-project.org} (R)
+ \item \url{https://sourceforge.net/projects/maxima/files} (Maxima)
+ \item \url{https://www.sumatrapdfreader.org/download-free-pdf-viewer.html} (Sumatra)\\
+ \hspace*{10mm}Rem) Sumatra is only for Windows.
+
+ \end{itemize}
+\item Install TeX if any TeX has not been installed.
+ \begin{enumerate}[(1)]
+ \item TeXLive is recommended.
+ \begin{itemize}
+ \item Files necessary for KeTCindy have been implemented (2018 or later).
+ \begin{enumerate}[i)]
+ \item texmf-dist/scripts/ketcindy ketlib, setketcindy, ketoutset, etc.
+ \item texmf-dist/tex/latex/ketcindy Style files for ketcindy
+ \item texmf-dist/doc/support/ketcindy Manuals and source files
+ \end{enumerate}
+ \end{itemize}
+ \item KeTTeX is a light-weight TeXLive.
+ \begin{itemize}
+ \item Download from\\
+ \hspace*{5mm}Mac (kettex.dmg)\\
+ \hspace*{10mm}\url{https://www.dropbox.com/s/dc4inuk06t07g26/kettex.dmg?dl=0}\\
+ \hspace*{5mm}Windows (kettex.exe)\\
+ \hspace*{10mm}\url{https://www.dropbox.com/s/fthw4btjqqs33tc/kettex.exe?dl=0}\\
+ \hspace*{5mm}Linux (kettex.tar.xz)\\
+ \hspace*{10mm}\url{https://www.dropbox.com/s/vg8p07832e9hzlk/KeTTeX-linux-20171022.tar.xz?dl=0}
+ \item Move kettex generated by double clicking to the folder as follows.\\
+ \hspace*{10mm}Mac\ \ /Applications,Windows\ \ C:\
+ \end{itemize}
+ \item In case of other TeX, see Readme in ketcindy of {\bf 3.}(2).
+ \end{enumerate}
+
+\item Install KeTCindy
+ \begin{enumerate}[(1)]
+ \item Download ketcindy from CTAN(\url{https://ctan.org}).\\
+ \hspace*{10mm}Search ketcindy $>$ Pack­age ketcindy $>$ download
+ \begin{itemize}
+ \item[Rem)]The latest version can be downloaded from Repository:\\
+ \hspace*{5mm}\url{https://github.com/ketpic/ketcindy}\\
+ \hspace*{10mm}Clone or download $>$ Download ZIP
+ \end{itemize}
+ \item Install KeTCindy according to Readme in forMac/forWindows/forLinux.
+ \end{enumerate}
+\end{enumerate}
+
+\end{document} \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/howtoinstall/HowToInstallJ.tex b/graphics/ketcindy/ketcindyfolder/doc/source/howtoinstall/HowToInstallJ.tex
new file mode 100644
index 0000000000..040eda3d56
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/howtoinstall/HowToInstallJ.tex
@@ -0,0 +1,68 @@
+\documentclass{ujarticle}
+\usepackage{ketpic,ketlayer}
+\usepackage{amsmath,amssymb}
+\usepackage{graphicx}
+\usepackage{xcolor}
+\usepackage{bm,enumerate}
+\usepackage[dvipdfmx,colorlinks=true,urlcolor=blue]{hyperref}
+
+\setmargin{20}{20}{20}{20}
+
+\西暦
+
+\renewcommand{\labelitemi}{・}
+
+\begin{document}
+
+\begin{center}
+KETCindyのインストール
+\end{center}
+
+\hfill 修正日:\today
+
+\begin{enumerate}[\bf\large 1.]
+\item Cinderella, R, Maxima をインストールする.
+ \begin{itemize}
+ \item \url{https://beta.cinderella.de} (Cinderella)
+ \item \url{https://cran.r-project.org} (R)
+ \item \url{https://sourceforge.net/projects/maxima/files} (Maxima)
+ \item \url{https://www.sumatrapdfreader.org/download-free-pdf-viewer.html} (Sumatra)\\
+ \hspace*{10mm}注)SumatraはWindowsだけである.
+ \end{itemize}
+\item TeXをインストールしていない場合はインストールする.
+ \begin{enumerate}[(1)]
+ \item TeXLiveを推奨
+ \begin{itemize}
+ \item 2018以降ではketcindyが既に入っている.
+ \end{itemize}
+ \item KeTTeXはTeXLiveの軽量版
+ \begin{itemize}
+ \item 以下からダウンロードできる.\\
+ \hspace*{5mm}Mac (kettex.dmg)\\
+ \hspace*{10mm}\url{https://www.dropbox.com/s/dc4inuk06t07g26/kettex.dmg?dl=0}\\
+ \hspace*{5mm}Windows (kettex.exe)\\
+ \hspace*{10mm}\url{https://www.dropbox.com/s/fthw4btjqqs33tc/kettex.exe?dl=0}\\
+ \hspace*{5mm}Linux (kettex.tar.xz)\\
+ \hspace*{10mm}\url{https://www.dropbox.com/s/vg8p07832e9hzlk/KeTTeX-linux-20171022.tar.xz?dl=0}
+ \item ダブルクリックしてできるkettexを以下に入れる.\\
+ \hspace*{10mm}Mac\ \ /Applications,Windows\ \ C:\
+ \end{itemize}
+ \item 他のTeXの場合は,{\bf 3.}(2)のReadmeを参照する.
+ \end{enumerate}
+
+\item KeTCindyのインストール
+ \begin{enumerate}[(1)]
+ \item ketcindyをCTAN(\url{https://ctan.org})からダウンロードする.\\
+ \hspace*{10mm}ketcindyで検索 $>$ Package ketcindy $>$ download
+ \begin{itemize}
+ \item[注)]最新版は,Repositoryのサイト\\
+ \hspace*{10mm}\url{https://github.com/ketpic/ketcindy}\\
+ から以下のようにダウンロードできる.\\
+ \hspace*{10mm}Clone or download $>$ Download ZIP
+ \item[注)]この場合は,ketcindy-masterになる.
+ \end{itemize}
+ \item forMac/forWindows/forLinuxにあるReadmeに従って,インストールする.
+ \end{enumerate}
+\end{enumerate}
+
+\end{document} \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/3dscreen.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/3dscreen.pdf
new file mode 100644
index 0000000000..e6911f6fd8
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/3dscreen.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/3dstart.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/3dstart.pdf
new file mode 100644
index 0000000000..8b400a0fd8
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/3dstart.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/CindyhelpE.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/CindyhelpE.pdf
new file mode 100644
index 0000000000..e968c4153d
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/CindyhelpE.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/Dotfill.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/Dotfill.tex
new file mode 100644
index 0000000000..22ffea7c3e
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/Dotfill.tex
@@ -0,0 +1,245 @@
+%%% /Users/Hannya/Desktop/fig/dotfill.tex
+%%% Generator=hachtest.cdy
+{\unitlength=7mm%
+\begin{picture}%
+(7.03,6.7)(-3.5,-3.2)%
+\special{pn 8}%
+%
+\special{pa 827 -0}\special{pa 820 -104}\special{pa 801 -206}\special{pa 769 -304}%
+\special{pa 725 -398}\special{pa 669 -486}\special{pa 603 -566}\special{pa 527 -637}%
+\special{pa 443 -698}\special{pa 352 -748}\special{pa 255 -786}\special{pa 155 -812}%
+\special{pa 52 -825}\special{pa -52 -825}\special{pa -155 -812}\special{pa -255 -786}%
+\special{pa -352 -748}\special{pa -443 -698}\special{pa -527 -637}\special{pa -603 -566}%
+\special{pa -669 -486}\special{pa -725 -398}\special{pa -769 -304}\special{pa -801 -206}%
+\special{pa -820 -104}\special{pa -827 0}\special{pa -820 104}\special{pa -801 206}%
+\special{pa -769 304}\special{pa -725 398}\special{pa -669 486}\special{pa -603 566}%
+\special{pa -527 637}\special{pa -443 698}\special{pa -352 748}\special{pa -255 786}%
+\special{pa -155 812}\special{pa -52 825}\special{pa 52 825}\special{pa 155 812}%
+\special{pa 255 786}\special{pa 352 748}\special{pa 443 698}\special{pa 527 637}%
+\special{pa 603 566}\special{pa 669 486}\special{pa 725 398}\special{pa 769 304}%
+\special{pa 801 206}\special{pa 820 104}\special{pa 827 0}%
+\special{fp}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -0}\special{pa 0 -827}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -0}\special{pa 716 413}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -0}\special{pa -585 585}%
+\special{fp}%
+}%
+\special{pa 715 413}\special{pa 725 398}\special{pa 769 304}\special{pa 801 206}%
+\special{pa 820 104}\special{pa 827 0}\special{pa 820 -104}\special{pa 801 -206}%
+\special{pa 769 -304}\special{pa 725 -398}\special{pa 669 -486}\special{pa 603 -566}%
+\special{pa 527 -637}\special{pa 443 -698}\special{pa 352 -748}\special{pa 255 -786}%
+\special{pa 155 -812}\special{pa 52 -825}\special{pa -0 -825}%
+\special{fp}%
+\special{pa 0 -0}\special{pa 715 413}\special{pa 725 398}\special{pa 769 304}%
+\special{pa 801 206}\special{pa 820 104}\special{pa 827 0}\special{pa 820 -104}%
+\special{pa 801 -206}\special{pa 769 -304}\special{pa 725 -398}\special{pa 669 -486}%
+\special{pa 603 -566}\special{pa 527 -637}\special{pa 443 -698}\special{pa 352 -748}%
+\special{pa 255 -786}\special{pa 155 -812}\special{pa 52 -825}\special{pa -0 -825}%
+\special{pa 0 -0}%
+\special{fp}%
+\special{pa -584 584}\special{pa -527 637}\special{pa -443 698}\special{pa -352 748}%
+\special{pa -255 786}\special{pa -155 812}\special{pa -52 825}\special{pa 52 825}%
+\special{pa 155 812}\special{pa 255 786}\special{pa 352 748}\special{pa 443 698}%
+\special{pa 527 637}\special{pa 603 566}\special{pa 669 486}\special{pa 715 413}%
+\special{fp}%
+\special{pa 0 -0}\special{pa -584 584}\special{pa -527 637}\special{pa -443 698}%
+\special{pa -352 748}\special{pa -255 786}\special{pa -155 812}\special{pa -52 825}%
+\special{pa 52 825}\special{pa 155 812}\special{pa 255 786}\special{pa 352 748}%
+\special{pa 443 698}\special{pa 527 637}\special{pa 603 566}\special{pa 669 486}%
+\special{pa 715 413}\special{pa 0 -0}%
+\special{fp}%
+\special{pa 706 371}\special{pa 694 371}\special{pa 694 382}\special{pa 706 382}\special{pa 706 371}\special{sh 1}\special{fp}%
+\special{pa 752 324}\special{pa 741 324}\special{pa 741 335}\special{pa 752 335}\special{pa 752 324}\special{sh 1}\special{fp}%
+\special{pa 659 324}\special{pa 648 324}\special{pa 648 335}\special{pa 659 335}\special{pa 659 324}\special{sh 1}\special{fp}%
+\special{pa 706 278}\special{pa 694 278}\special{pa 694 289}\special{pa 706 289}\special{pa 706 278}\special{sh 1}\special{fp}%
+\special{pa 752 232}\special{pa 741 232}\special{pa 741 243}\special{pa 752 243}\special{pa 752 232}\special{sh 1}\special{fp}%
+\special{pa 798 185}\special{pa 787 185}\special{pa 787 196}\special{pa 798 196}\special{pa 798 185}\special{sh 1}\special{fp}%
+\special{pa 613 278}\special{pa 602 278}\special{pa 602 289}\special{pa 613 289}\special{pa 613 278}\special{sh 1}\special{fp}%
+\special{pa 659 232}\special{pa 648 232}\special{pa 648 243}\special{pa 659 243}\special{pa 659 232}\special{sh 1}\special{fp}%
+\special{pa 706 185}\special{pa 694 185}\special{pa 694 196}\special{pa 706 196}\special{pa 706 185}\special{sh 1}\special{fp}%
+\special{pa 752 139}\special{pa 741 139}\special{pa 741 150}\special{pa 752 150}\special{pa 752 139}\special{sh 1}\special{fp}%
+\special{pa 798 92}\special{pa 787 92}\special{pa 787 104}\special{pa 798 104}\special{pa 798 92}\special{sh 1}\special{fp}%
+\special{pa 520 278}\special{pa 509 278}\special{pa 509 289}\special{pa 520 289}\special{pa 520 278}\special{sh 1}\special{fp}%
+\special{pa 566 232}\special{pa 555 232}\special{pa 555 243}\special{pa 566 243}\special{pa 566 232}\special{sh 1}\special{fp}%
+\special{pa 613 185}\special{pa 602 185}\special{pa 602 196}\special{pa 613 196}\special{pa 613 185}\special{sh 1}\special{fp}%
+\special{pa 659 139}\special{pa 648 139}\special{pa 648 150}\special{pa 659 150}\special{pa 659 139}\special{sh 1}\special{fp}%
+\special{pa 706 92}\special{pa 694 92}\special{pa 694 104}\special{pa 706 104}\special{pa 706 92}\special{sh 1}\special{fp}%
+\special{pa 752 46}\special{pa 741 46}\special{pa 741 57}\special{pa 752 57}\special{pa 752 46}\special{sh 1}\special{fp}%
+\special{pa 798 0}\special{pa 787 0}\special{pa 787 11}\special{pa 798 11}\special{pa 798 0}\special{sh 1}\special{fp}%
+\special{pa 474 232}\special{pa 462 232}\special{pa 462 243}\special{pa 474 243}\special{pa 474 232}\special{sh 1}\special{fp}%
+\special{pa 520 185}\special{pa 509 185}\special{pa 509 196}\special{pa 520 196}\special{pa 520 185}\special{sh 1}\special{fp}%
+\special{pa 566 139}\special{pa 555 139}\special{pa 555 150}\special{pa 566 150}\special{pa 566 139}\special{sh 1}\special{fp}%
+\special{pa 613 92}\special{pa 602 92}\special{pa 602 104}\special{pa 613 104}\special{pa 613 92}\special{sh 1}\special{fp}%
+\special{pa 659 46}\special{pa 648 46}\special{pa 648 57}\special{pa 659 57}\special{pa 659 46}\special{sh 1}\special{fp}%
+\special{pa 706 0}\special{pa 694 0}\special{pa 694 11}\special{pa 706 11}\special{pa 706 0}\special{sh 1}\special{fp}%
+\special{pa 752 -47}\special{pa 741 -47}\special{pa 741 -36}\special{pa 752 -36}\special{pa 752 -47}\special{sh 1}\special{fp}%
+\special{pa 798 -93}\special{pa 787 -93}\special{pa 787 -82}\special{pa 798 -82}\special{pa 798 -93}\special{sh 1}\special{fp}%
+\special{pa 427 185}\special{pa 416 185}\special{pa 416 196}\special{pa 427 196}\special{pa 427 185}\special{sh 1}\special{fp}%
+\special{pa 474 139}\special{pa 462 139}\special{pa 462 150}\special{pa 474 150}\special{pa 474 139}\special{sh 1}\special{fp}%
+\special{pa 520 92}\special{pa 509 92}\special{pa 509 104}\special{pa 520 104}\special{pa 520 92}\special{sh 1}\special{fp}%
+\special{pa 566 46}\special{pa 555 46}\special{pa 555 57}\special{pa 566 57}\special{pa 566 46}\special{sh 1}\special{fp}%
+\special{pa 613 0}\special{pa 602 0}\special{pa 602 11}\special{pa 613 11}\special{pa 613 0}\special{sh 1}\special{fp}%
+\special{pa 659 -47}\special{pa 648 -47}\special{pa 648 -36}\special{pa 659 -36}\special{pa 659 -47}\special{sh 1}\special{fp}%
+\special{pa 706 -93}\special{pa 694 -93}\special{pa 694 -82}\special{pa 706 -82}\special{pa 706 -93}\special{sh 1}\special{fp}%
+\special{pa 752 -140}\special{pa 741 -140}\special{pa 741 -128}\special{pa 752 -128}\special{pa 752 -140}\special{sh 1}\special{fp}%
+\special{pa 798 -186}\special{pa 787 -186}\special{pa 787 -175}\special{pa 798 -175}\special{pa 798 -186}\special{sh 1}\special{fp}%
+\special{pa 381 139}\special{pa 370 139}\special{pa 370 150}\special{pa 381 150}\special{pa 381 139}\special{sh 1}\special{fp}%
+\special{pa 427 92}\special{pa 416 92}\special{pa 416 104}\special{pa 427 104}\special{pa 427 92}\special{sh 1}\special{fp}%
+\special{pa 474 46}\special{pa 462 46}\special{pa 462 57}\special{pa 474 57}\special{pa 474 46}\special{sh 1}\special{fp}%
+\special{pa 520 0}\special{pa 509 0}\special{pa 509 11}\special{pa 520 11}\special{pa 520 0}\special{sh 1}\special{fp}%
+\special{pa 566 -47}\special{pa 555 -47}\special{pa 555 -36}\special{pa 566 -36}\special{pa 566 -47}\special{sh 1}\special{fp}%
+\special{pa 613 -93}\special{pa 602 -93}\special{pa 602 -82}\special{pa 613 -82}\special{pa 613 -93}\special{sh 1}\special{fp}%
+\special{pa 659 -140}\special{pa 648 -140}\special{pa 648 -128}\special{pa 659 -128}\special{pa 659 -140}\special{sh 1}\special{fp}%
+\special{pa 706 -186}\special{pa 694 -186}\special{pa 694 -175}\special{pa 706 -175}\special{pa 706 -186}\special{sh 1}\special{fp}%
+\special{pa 752 -232}\special{pa 741 -232}\special{pa 741 -221}\special{pa 752 -221}\special{pa 752 -232}\special{sh 1}\special{fp}%
+\special{pa 288 139}\special{pa 277 139}\special{pa 277 150}\special{pa 288 150}\special{pa 288 139}\special{sh 1}\special{fp}%
+\special{pa 334 92}\special{pa 323 92}\special{pa 323 104}\special{pa 334 104}\special{pa 334 92}\special{sh 1}\special{fp}%
+\special{pa 381 46}\special{pa 370 46}\special{pa 370 57}\special{pa 381 57}\special{pa 381 46}\special{sh 1}\special{fp}%
+\special{pa 427 0}\special{pa 416 0}\special{pa 416 11}\special{pa 427 11}\special{pa 427 0}\special{sh 1}\special{fp}%
+\special{pa 474 -47}\special{pa 462 -47}\special{pa 462 -36}\special{pa 474 -36}\special{pa 474 -47}\special{sh 1}\special{fp}%
+\special{pa 520 -93}\special{pa 509 -93}\special{pa 509 -82}\special{pa 520 -82}\special{pa 520 -93}\special{sh 1}\special{fp}%
+\special{pa 566 -140}\special{pa 555 -140}\special{pa 555 -128}\special{pa 566 -128}\special{pa 566 -140}\special{sh 1}\special{fp}%
+\special{pa 613 -186}\special{pa 602 -186}\special{pa 602 -175}\special{pa 613 -175}\special{pa 613 -186}\special{sh 1}\special{fp}%
+\special{pa 659 -232}\special{pa 648 -232}\special{pa 648 -221}\special{pa 659 -221}\special{pa 659 -232}\special{sh 1}\special{fp}%
+\special{pa 706 -279}\special{pa 694 -279}\special{pa 694 -268}\special{pa 706 -268}\special{pa 706 -279}\special{sh 1}\special{fp}%
+\special{pa 752 -325}\special{pa 741 -325}\special{pa 741 -314}\special{pa 752 -314}\special{pa 752 -325}\special{sh 1}\special{fp}%
+\special{pa 242 92}\special{pa 230 92}\special{pa 230 104}\special{pa 242 104}\special{pa 242 92}\special{sh 1}\special{fp}%
+\special{pa 288 46}\special{pa 277 46}\special{pa 277 57}\special{pa 288 57}\special{pa 288 46}\special{sh 1}\special{fp}%
+\special{pa 334 0}\special{pa 323 0}\special{pa 323 11}\special{pa 334 11}\special{pa 334 0}\special{sh 1}\special{fp}%
+\special{pa 381 -47}\special{pa 370 -47}\special{pa 370 -36}\special{pa 381 -36}\special{pa 381 -47}\special{sh 1}\special{fp}%
+\special{pa 427 -93}\special{pa 416 -93}\special{pa 416 -82}\special{pa 427 -82}\special{pa 427 -93}\special{sh 1}\special{fp}%
+\special{pa 474 -140}\special{pa 462 -140}\special{pa 462 -128}\special{pa 474 -128}\special{pa 474 -140}\special{sh 1}\special{fp}%
+\special{pa 520 -186}\special{pa 509 -186}\special{pa 509 -175}\special{pa 520 -175}\special{pa 520 -186}\special{sh 1}\special{fp}%
+\special{pa 566 -232}\special{pa 555 -232}\special{pa 555 -221}\special{pa 566 -221}\special{pa 566 -232}\special{sh 1}\special{fp}%
+\special{pa 613 -279}\special{pa 602 -279}\special{pa 602 -268}\special{pa 613 -268}\special{pa 613 -279}\special{sh 1}\special{fp}%
+\special{pa 659 -325}\special{pa 648 -325}\special{pa 648 -314}\special{pa 659 -314}\special{pa 659 -325}\special{sh 1}\special{fp}%
+\special{pa 706 -372}\special{pa 694 -372}\special{pa 694 -360}\special{pa 706 -360}\special{pa 706 -372}\special{sh 1}\special{fp}%
+\special{pa 195 46}\special{pa 184 46}\special{pa 184 57}\special{pa 195 57}\special{pa 195 46}\special{sh 1}\special{fp}%
+\special{pa 242 0}\special{pa 230 0}\special{pa 230 11}\special{pa 242 11}\special{pa 242 0}\special{sh 1}\special{fp}%
+\special{pa 288 -47}\special{pa 277 -47}\special{pa 277 -36}\special{pa 288 -36}\special{pa 288 -47}\special{sh 1}\special{fp}%
+\special{pa 334 -93}\special{pa 323 -93}\special{pa 323 -82}\special{pa 334 -82}\special{pa 334 -93}\special{sh 1}\special{fp}%
+\special{pa 381 -140}\special{pa 370 -140}\special{pa 370 -128}\special{pa 381 -128}\special{pa 381 -140}\special{sh 1}\special{fp}%
+\special{pa 427 -186}\special{pa 416 -186}\special{pa 416 -175}\special{pa 427 -175}\special{pa 427 -186}\special{sh 1}\special{fp}%
+\special{pa 474 -232}\special{pa 462 -232}\special{pa 462 -221}\special{pa 474 -221}\special{pa 474 -232}\special{sh 1}\special{fp}%
+\special{pa 520 -279}\special{pa 509 -279}\special{pa 509 -268}\special{pa 520 -268}\special{pa 520 -279}\special{sh 1}\special{fp}%
+\special{pa 566 -325}\special{pa 555 -325}\special{pa 555 -314}\special{pa 566 -314}\special{pa 566 -325}\special{sh 1}\special{fp}%
+\special{pa 613 -372}\special{pa 602 -372}\special{pa 602 -360}\special{pa 613 -360}\special{pa 613 -372}\special{sh 1}\special{fp}%
+\special{pa 659 -418}\special{pa 648 -418}\special{pa 648 -407}\special{pa 659 -407}\special{pa 659 -418}\special{sh 1}\special{fp}%
+\special{pa 102 46}\special{pa 91 46}\special{pa 91 57}\special{pa 102 57}\special{pa 102 46}\special{sh 1}\special{fp}%
+\special{pa 149 0}\special{pa 138 0}\special{pa 138 11}\special{pa 149 11}\special{pa 149 0}\special{sh 1}\special{fp}%
+\special{pa 195 -47}\special{pa 184 -47}\special{pa 184 -36}\special{pa 195 -36}\special{pa 195 -47}\special{sh 1}\special{fp}%
+\special{pa 242 -93}\special{pa 230 -93}\special{pa 230 -82}\special{pa 242 -82}\special{pa 242 -93}\special{sh 1}\special{fp}%
+\special{pa 288 -140}\special{pa 277 -140}\special{pa 277 -128}\special{pa 288 -128}\special{pa 288 -140}\special{sh 1}\special{fp}%
+\special{pa 334 -186}\special{pa 323 -186}\special{pa 323 -175}\special{pa 334 -175}\special{pa 334 -186}\special{sh 1}\special{fp}%
+\special{pa 381 -232}\special{pa 370 -232}\special{pa 370 -221}\special{pa 381 -221}\special{pa 381 -232}\special{sh 1}\special{fp}%
+\special{pa 427 -279}\special{pa 416 -279}\special{pa 416 -268}\special{pa 427 -268}\special{pa 427 -279}\special{sh 1}\special{fp}%
+\special{pa 474 -325}\special{pa 462 -325}\special{pa 462 -314}\special{pa 474 -314}\special{pa 474 -325}\special{sh 1}\special{fp}%
+\special{pa 520 -372}\special{pa 509 -372}\special{pa 509 -360}\special{pa 520 -360}\special{pa 520 -372}\special{sh 1}\special{fp}%
+\special{pa 566 -418}\special{pa 555 -418}\special{pa 555 -407}\special{pa 566 -407}\special{pa 566 -418}\special{sh 1}\special{fp}%
+\special{pa 613 -464}\special{pa 602 -464}\special{pa 602 -453}\special{pa 613 -453}\special{pa 613 -464}\special{sh 1}\special{fp}%
+\special{pa 56 0}\special{pa 45 0}\special{pa 45 11}\special{pa 56 11}\special{pa 56 0}\special{sh 1}\special{fp}%
+\special{pa 102 -47}\special{pa 91 -47}\special{pa 91 -36}\special{pa 102 -36}\special{pa 102 -47}\special{sh 1}\special{fp}%
+\special{pa 149 -93}\special{pa 138 -93}\special{pa 138 -82}\special{pa 149 -82}\special{pa 149 -93}\special{sh 1}\special{fp}%
+\special{pa 195 -140}\special{pa 184 -140}\special{pa 184 -128}\special{pa 195 -128}\special{pa 195 -140}\special{sh 1}\special{fp}%
+\special{pa 242 -186}\special{pa 230 -186}\special{pa 230 -175}\special{pa 242 -175}\special{pa 242 -186}\special{sh 1}\special{fp}%
+\special{pa 288 -232}\special{pa 277 -232}\special{pa 277 -221}\special{pa 288 -221}\special{pa 288 -232}\special{sh 1}\special{fp}%
+\special{pa 334 -279}\special{pa 323 -279}\special{pa 323 -268}\special{pa 334 -268}\special{pa 334 -279}\special{sh 1}\special{fp}%
+\special{pa 381 -325}\special{pa 370 -325}\special{pa 370 -314}\special{pa 381 -314}\special{pa 381 -325}\special{sh 1}\special{fp}%
+\special{pa 427 -372}\special{pa 416 -372}\special{pa 416 -360}\special{pa 427 -360}\special{pa 427 -372}\special{sh 1}\special{fp}%
+\special{pa 474 -418}\special{pa 462 -418}\special{pa 462 -407}\special{pa 474 -407}\special{pa 474 -418}\special{sh 1}\special{fp}%
+\special{pa 520 -464}\special{pa 509 -464}\special{pa 509 -453}\special{pa 520 -453}\special{pa 520 -464}\special{sh 1}\special{fp}%
+\special{pa 566 -511}\special{pa 555 -511}\special{pa 555 -500}\special{pa 566 -500}\special{pa 566 -511}\special{sh 1}\special{fp}%
+\special{pa 613 -557}\special{pa 602 -557}\special{pa 602 -546}\special{pa 613 -546}\special{pa 613 -557}\special{sh 1}\special{fp}%
+\special{pa 10 -47}\special{pa -2 -47}\special{pa -2 -36}\special{pa 10 -36}\special{pa 10 -47}\special{sh 1}\special{fp}%
+\special{pa 56 -93}\special{pa 45 -93}\special{pa 45 -82}\special{pa 56 -82}\special{pa 56 -93}\special{sh 1}\special{fp}%
+\special{pa 102 -140}\special{pa 91 -140}\special{pa 91 -128}\special{pa 102 -128}\special{pa 102 -140}\special{sh 1}\special{fp}%
+\special{pa 149 -186}\special{pa 138 -186}\special{pa 138 -175}\special{pa 149 -175}\special{pa 149 -186}\special{sh 1}\special{fp}%
+\special{pa 195 -232}\special{pa 184 -232}\special{pa 184 -221}\special{pa 195 -221}\special{pa 195 -232}\special{sh 1}\special{fp}%
+\special{pa 242 -279}\special{pa 230 -279}\special{pa 230 -268}\special{pa 242 -268}\special{pa 242 -279}\special{sh 1}\special{fp}%
+\special{pa 288 -325}\special{pa 277 -325}\special{pa 277 -314}\special{pa 288 -314}\special{pa 288 -325}\special{sh 1}\special{fp}%
+\special{pa 334 -372}\special{pa 323 -372}\special{pa 323 -360}\special{pa 334 -360}\special{pa 334 -372}\special{sh 1}\special{fp}%
+\special{pa 381 -418}\special{pa 370 -418}\special{pa 370 -407}\special{pa 381 -407}\special{pa 381 -418}\special{sh 1}\special{fp}%
+\special{pa 427 -464}\special{pa 416 -464}\special{pa 416 -453}\special{pa 427 -453}\special{pa 427 -464}\special{sh 1}\special{fp}%
+\special{pa 474 -511}\special{pa 462 -511}\special{pa 462 -500}\special{pa 474 -500}\special{pa 474 -511}\special{sh 1}\special{fp}%
+\special{pa 520 -557}\special{pa 509 -557}\special{pa 509 -546}\special{pa 520 -546}\special{pa 520 -557}\special{sh 1}\special{fp}%
+\special{pa 566 -604}\special{pa 555 -604}\special{pa 555 -592}\special{pa 566 -592}\special{pa 566 -604}\special{sh 1}\special{fp}%
+\special{pa 10 -140}\special{pa -2 -140}\special{pa -2 -128}\special{pa 10 -128}\special{pa 10 -140}\special{sh 1}\special{fp}%
+\special{pa 56 -186}\special{pa 45 -186}\special{pa 45 -175}\special{pa 56 -175}\special{pa 56 -186}\special{sh 1}\special{fp}%
+\special{pa 102 -232}\special{pa 91 -232}\special{pa 91 -221}\special{pa 102 -221}\special{pa 102 -232}\special{sh 1}\special{fp}%
+\special{pa 149 -279}\special{pa 138 -279}\special{pa 138 -268}\special{pa 149 -268}\special{pa 149 -279}\special{sh 1}\special{fp}%
+\special{pa 195 -325}\special{pa 184 -325}\special{pa 184 -314}\special{pa 195 -314}\special{pa 195 -325}\special{sh 1}\special{fp}%
+\special{pa 242 -372}\special{pa 230 -372}\special{pa 230 -360}\special{pa 242 -360}\special{pa 242 -372}\special{sh 1}\special{fp}%
+\special{pa 288 -418}\special{pa 277 -418}\special{pa 277 -407}\special{pa 288 -407}\special{pa 288 -418}\special{sh 1}\special{fp}%
+\special{pa 334 -464}\special{pa 323 -464}\special{pa 323 -453}\special{pa 334 -453}\special{pa 334 -464}\special{sh 1}\special{fp}%
+\special{pa 381 -511}\special{pa 370 -511}\special{pa 370 -500}\special{pa 381 -500}\special{pa 381 -511}\special{sh 1}\special{fp}%
+\special{pa 427 -557}\special{pa 416 -557}\special{pa 416 -546}\special{pa 427 -546}\special{pa 427 -557}\special{sh 1}\special{fp}%
+\special{pa 474 -604}\special{pa 462 -604}\special{pa 462 -592}\special{pa 474 -592}\special{pa 474 -604}\special{sh 1}\special{fp}%
+\special{pa 520 -650}\special{pa 509 -650}\special{pa 509 -639}\special{pa 520 -639}\special{pa 520 -650}\special{sh 1}\special{fp}%
+\special{pa 10 -232}\special{pa -2 -232}\special{pa -2 -221}\special{pa 10 -221}\special{pa 10 -232}\special{sh 1}\special{fp}%
+\special{pa 56 -279}\special{pa 45 -279}\special{pa 45 -268}\special{pa 56 -268}\special{pa 56 -279}\special{sh 1}\special{fp}%
+\special{pa 102 -325}\special{pa 91 -325}\special{pa 91 -314}\special{pa 102 -314}\special{pa 102 -325}\special{sh 1}\special{fp}%
+\special{pa 149 -372}\special{pa 138 -372}\special{pa 138 -360}\special{pa 149 -360}\special{pa 149 -372}\special{sh 1}\special{fp}%
+\special{pa 195 -418}\special{pa 184 -418}\special{pa 184 -407}\special{pa 195 -407}\special{pa 195 -418}\special{sh 1}\special{fp}%
+\special{pa 242 -464}\special{pa 230 -464}\special{pa 230 -453}\special{pa 242 -453}\special{pa 242 -464}\special{sh 1}\special{fp}%
+\special{pa 288 -511}\special{pa 277 -511}\special{pa 277 -500}\special{pa 288 -500}\special{pa 288 -511}\special{sh 1}\special{fp}%
+\special{pa 334 -557}\special{pa 323 -557}\special{pa 323 -546}\special{pa 334 -546}\special{pa 334 -557}\special{sh 1}\special{fp}%
+\special{pa 381 -604}\special{pa 370 -604}\special{pa 370 -592}\special{pa 381 -592}\special{pa 381 -604}\special{sh 1}\special{fp}%
+\special{pa 427 -650}\special{pa 416 -650}\special{pa 416 -639}\special{pa 427 -639}\special{pa 427 -650}\special{sh 1}\special{fp}%
+\special{pa 10 -325}\special{pa -2 -325}\special{pa -2 -314}\special{pa 10 -314}\special{pa 10 -325}\special{sh 1}\special{fp}%
+\special{pa 56 -372}\special{pa 45 -372}\special{pa 45 -360}\special{pa 56 -360}\special{pa 56 -372}\special{sh 1}\special{fp}%
+\special{pa 102 -418}\special{pa 91 -418}\special{pa 91 -407}\special{pa 102 -407}\special{pa 102 -418}\special{sh 1}\special{fp}%
+\special{pa 149 -464}\special{pa 138 -464}\special{pa 138 -453}\special{pa 149 -453}\special{pa 149 -464}\special{sh 1}\special{fp}%
+\special{pa 195 -511}\special{pa 184 -511}\special{pa 184 -500}\special{pa 195 -500}\special{pa 195 -511}\special{sh 1}\special{fp}%
+\special{pa 242 -557}\special{pa 230 -557}\special{pa 230 -546}\special{pa 242 -546}\special{pa 242 -557}\special{sh 1}\special{fp}%
+\special{pa 288 -604}\special{pa 277 -604}\special{pa 277 -592}\special{pa 288 -592}\special{pa 288 -604}\special{sh 1}\special{fp}%
+\special{pa 334 -650}\special{pa 323 -650}\special{pa 323 -639}\special{pa 334 -639}\special{pa 334 -650}\special{sh 1}\special{fp}%
+\special{pa 381 -696}\special{pa 370 -696}\special{pa 370 -685}\special{pa 381 -685}\special{pa 381 -696}\special{sh 1}\special{fp}%
+\special{pa 10 -418}\special{pa -2 -418}\special{pa -2 -407}\special{pa 10 -407}\special{pa 10 -418}\special{sh 1}\special{fp}%
+\special{pa 56 -464}\special{pa 45 -464}\special{pa 45 -453}\special{pa 56 -453}\special{pa 56 -464}\special{sh 1}\special{fp}%
+\special{pa 102 -511}\special{pa 91 -511}\special{pa 91 -500}\special{pa 102 -500}\special{pa 102 -511}\special{sh 1}\special{fp}%
+\special{pa 149 -557}\special{pa 138 -557}\special{pa 138 -546}\special{pa 149 -546}\special{pa 149 -557}\special{sh 1}\special{fp}%
+\special{pa 195 -604}\special{pa 184 -604}\special{pa 184 -592}\special{pa 195 -592}\special{pa 195 -604}\special{sh 1}\special{fp}%
+\special{pa 242 -650}\special{pa 230 -650}\special{pa 230 -639}\special{pa 242 -639}\special{pa 242 -650}\special{sh 1}\special{fp}%
+\special{pa 288 -696}\special{pa 277 -696}\special{pa 277 -685}\special{pa 288 -685}\special{pa 288 -696}\special{sh 1}\special{fp}%
+\special{pa 334 -743}\special{pa 323 -743}\special{pa 323 -732}\special{pa 334 -732}\special{pa 334 -743}\special{sh 1}\special{fp}%
+\special{pa 10 -511}\special{pa -2 -511}\special{pa -2 -500}\special{pa 10 -500}\special{pa 10 -511}\special{sh 1}\special{fp}%
+\special{pa 56 -557}\special{pa 45 -557}\special{pa 45 -546}\special{pa 56 -546}\special{pa 56 -557}\special{sh 1}\special{fp}%
+\special{pa 102 -604}\special{pa 91 -604}\special{pa 91 -592}\special{pa 102 -592}\special{pa 102 -604}\special{sh 1}\special{fp}%
+\special{pa 149 -650}\special{pa 138 -650}\special{pa 138 -639}\special{pa 149 -639}\special{pa 149 -650}\special{sh 1}\special{fp}%
+\special{pa 195 -696}\special{pa 184 -696}\special{pa 184 -685}\special{pa 195 -685}\special{pa 195 -696}\special{sh 1}\special{fp}%
+\special{pa 242 -743}\special{pa 230 -743}\special{pa 230 -732}\special{pa 242 -732}\special{pa 242 -743}\special{sh 1}\special{fp}%
+\special{pa 10 -604}\special{pa -2 -604}\special{pa -2 -592}\special{pa 10 -592}\special{pa 10 -604}\special{sh 1}\special{fp}%
+\special{pa 56 -650}\special{pa 45 -650}\special{pa 45 -639}\special{pa 56 -639}\special{pa 56 -650}\special{sh 1}\special{fp}%
+\special{pa 102 -696}\special{pa 91 -696}\special{pa 91 -685}\special{pa 102 -685}\special{pa 102 -696}\special{sh 1}\special{fp}%
+\special{pa 149 -743}\special{pa 138 -743}\special{pa 138 -732}\special{pa 149 -732}\special{pa 149 -743}\special{sh 1}\special{fp}%
+\special{pa 195 -789}\special{pa 184 -789}\special{pa 184 -778}\special{pa 195 -778}\special{pa 195 -789}\special{sh 1}\special{fp}%
+\special{pa 10 -696}\special{pa -2 -696}\special{pa -2 -685}\special{pa 10 -685}\special{pa 10 -696}\special{sh 1}\special{fp}%
+\special{pa 56 -743}\special{pa 45 -743}\special{pa 45 -732}\special{pa 56 -732}\special{pa 56 -743}\special{sh 1}\special{fp}%
+\special{pa 102 -789}\special{pa 91 -789}\special{pa 91 -778}\special{pa 102 -778}\special{pa 102 -789}\special{sh 1}\special{fp}%
+\special{pa 10 -789}\special{pa -2 -789}\special{pa -2 -778}\special{pa 10 -778}\special{pa 10 -789}\special{sh 1}\special{fp}%
+\special{pa 427 649}\special{pa 416 649}\special{pa 416 660}\special{pa 427 660}\special{pa 427 649}\special{sh 1}\special{fp}%
+\special{pa 566 510}\special{pa 555 510}\special{pa 555 521}\special{pa 566 521}\special{pa 566 510}\special{sh 1}\special{fp}%
+\special{pa 10 788}\special{pa -2 788}\special{pa -2 799}\special{pa 10 799}\special{pa 10 788}\special{sh 1}\special{fp}%
+\special{pa 149 649}\special{pa 138 649}\special{pa 138 660}\special{pa 149 660}\special{pa 149 649}\special{sh 1}\special{fp}%
+\special{pa 288 510}\special{pa 277 510}\special{pa 277 521}\special{pa 288 521}\special{pa 288 510}\special{sh 1}\special{fp}%
+\special{pa 427 371}\special{pa 416 371}\special{pa 416 382}\special{pa 427 382}\special{pa 427 371}\special{sh 1}\special{fp}%
+\special{pa -130 649}\special{pa -141 649}\special{pa -141 660}\special{pa -130 660}\special{pa -130 649}\special{sh 1}\special{fp}%
+\special{pa 10 510}\special{pa -2 510}\special{pa -2 521}\special{pa 10 521}\special{pa 10 510}\special{sh 1}\special{fp}%
+\special{pa 149 371}\special{pa 138 371}\special{pa 138 382}\special{pa 149 382}\special{pa 149 371}\special{sh 1}\special{fp}%
+\special{pa 288 232}\special{pa 277 232}\special{pa 277 243}\special{pa 288 243}\special{pa 288 232}\special{sh 1}\special{fp}%
+\special{pa -408 649}\special{pa -419 649}\special{pa -419 660}\special{pa -408 660}\special{pa -408 649}\special{sh 1}\special{fp}%
+\special{pa -269 510}\special{pa -280 510}\special{pa -280 521}\special{pa -269 521}\special{pa -269 510}\special{sh 1}\special{fp}%
+\special{pa -130 371}\special{pa -141 371}\special{pa -141 382}\special{pa -130 382}\special{pa -130 371}\special{sh 1}\special{fp}%
+\special{pa 10 232}\special{pa -2 232}\special{pa -2 243}\special{pa 10 243}\special{pa 10 232}\special{sh 1}\special{fp}%
+\special{pa 149 92}\special{pa 138 92}\special{pa 138 104}\special{pa 149 104}\special{pa 149 92}\special{sh 1}\special{fp}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/FigE.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/FigE.tex
new file mode 100644
index 0000000000..68b951d2f4
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/FigE.tex
@@ -0,0 +1,25 @@
+%%% test.tex 2014-10-16 21:51
+%%% test.sce 2014-10-16 21:50
+{\unitlength=1cm%
+\begin{picture}%
+( 4.00000, 3.50000)( -1.00000, -1.00000)%
+\special{pn 8}%
+%
+\settowidth{\Width}{A}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{A}\settodepth{\Depth}{A}\setlength{\Height}{\Depth}%
+\put(1.0300,1.7900){\hspace*{\Width}\raisebox{\Height}{A}}%
+%
+%
+\settowidth{\Width}{B}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{B}\settodepth{\Depth}{B}\setlength{\Height}{-\Height}%
+\put(-0.0500,-0.0500){\hspace*{\Width}\raisebox{\Height}{B}}%
+%
+%
+\settowidth{\Width}{C}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{C}\settodepth{\Depth}{C}\setlength{\Height}{-\Height}%
+\put(2.0500,-0.0500){\hspace*{\Width}\raisebox{\Height}{C}}%
+%
+%
+\special{pa 0 0}\special{pa 386 -685}\special{pa 787 0}\special{pa 0 0}%
+\special{fp}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ForRef-Arrowhead-1.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ForRef-Arrowhead-1.tex
new file mode 100644
index 0000000000..5931d08bd8
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ForRef-Arrowhead-1.tex
@@ -0,0 +1,64 @@
+%%% ForRef-Arrowhead-1.tex 2014-11-10 7:14
+%%% ForRef-Arrowhead5all.sce~ 2014-11-10 6:59
+{\unitlength=1cm%
+\begin{picture}%
+( 2.03000, 2.02000)( -0.56000, -0.53000)%
+\special{pn 8}%
+%
+\special{pn 8}%
+\special{pa 394 4}\special{pa 394 -4}\special{fp}\special{pa 394 -35}\special{pa 394 -43}\special{fp}%
+\special{pa 394 -75}\special{pa 394 -83}\special{fp}\special{pa 394 -114}\special{pa 394 -122}\special{fp}%
+\special{pa 394 -153}\special{pa 394 -161}\special{fp}\special{pa 394 -193}\special{pa 394 -201}\special{fp}%
+\special{pa 394 -232}\special{pa 394 -240}\special{fp}\special{pa 394 -272}\special{pa 394 -280}\special{fp}%
+\special{pa 394 -311}\special{pa 394 -319}\special{fp}\special{pa 394 -350}\special{pa 394 -358}\special{fp}%
+\special{pa 397 -391}\special{pa 391 -397}\special{fp}\special{pa 358 -394}\special{pa 350 -394}\special{fp}%
+\special{pa 319 -394}\special{pa 311 -394}\special{fp}\special{pa 280 -394}\special{pa 272 -394}\special{fp}%
+\special{pa 240 -394}\special{pa 232 -394}\special{fp}\special{pa 201 -394}\special{pa 193 -394}\special{fp}%
+\special{pa 161 -394}\special{pa 153 -394}\special{fp}\special{pa 122 -394}\special{pa 114 -394}\special{fp}%
+\special{pa 83 -394}\special{pa 75 -394}\special{fp}\special{pa 43 -394}\special{pa 35 -394}\special{fp}%
+\special{pa 4 -394}\special{pa -4 -394}\special{fp}\special{pn 8}%
+\special{pa 408 -408}\special{pa 400 -412}\special{pa 390 -413}\special{pa 382 -409}%
+\special{pa 376 -402}\special{pa 374 -393}\special{pa 377 -384}\special{pa 384 -377}%
+\special{pa 393 -374}\special{pa 402 -376}\special{pa 409 -382}\special{pa 413 -390}%
+\special{pa 412 -400}\special{pa 408 -408}\special{sh 1}\special{fp}%
+\settowidth{\Width}{A}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{A}\settodepth{\Depth}{A}\setlength{\Height}{\Depth}%
+\put(1.1000,1.1000){\hspace*{\Width}\raisebox{\Height}{A}}%
+%
+%
+\special{pa 394 -20}\special{pa 394 20}%
+\special{fp}%
+\settowidth{\Width}{$1$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$1$}\settodepth{\Depth}{$1$}\setlength{\Height}{-\Height}%
+\put(1.0000,-0.1000){\hspace*{\Width}\raisebox{\Height}{$1$}}%
+%
+%
+%
+\special{pa 20 -394}\special{pa -20 -394}%
+\special{fp}%
+\settowidth{\Width}{$1$}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{$1$}\settodepth{\Depth}{$1$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-0.1000,1.0000){\hspace*{\Width}\raisebox{\Height}{$1$}}%
+%
+%
+%
+\special{pa -220 0}\special{pa 579 0}%
+\special{fp}%
+\special{pa 0 209}\special{pa 0 -587}%
+\special{fp}%
+\settowidth{\Width}{$x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(1.5200,0.0000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{\Depth}%
+\put(0.0000,1.5400){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+%
+\settowidth{\Width}{O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(-0.0500,-0.0500){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ForRef-Arrowhead-10.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ForRef-Arrowhead-10.tex
new file mode 100644
index 0000000000..bfc9fe69c0
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ForRef-Arrowhead-10.tex
@@ -0,0 +1,24 @@
+%%% ForRef-Arrowhead-10.tex 2014-11-10 7:14
+%%% ForRef-Arrowhead5all.sce~ 2014-11-10 6:59
+{\unitlength=1cm%
+\begin{picture}%
+( 2.03000, 2.02000)( -0.56000, -0.53000)%
+\special{pn 8}%
+%
+\special{pa 118 -350}\special{pa 197 -343}\special{pa 138 -394}\special{pa 128 -372}%
+\special{pa 118 -350}\special{sh 1}\special{ip}%
+\special{pn 8}%
+\special{pa 118 -350}\special{pa 197 -343}\special{pa 138 -394}\special{pa 128 -372}%
+\special{pa 118 -350}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 394 0}\special{pa 391 -49}\special{pa 381 -98}\special{pa 366 -145}\special{pa 345 -190}%
+\special{pa 319 -231}\special{pa 287 -270}\special{pa 251 -303}\special{pa 211 -332}%
+\special{pa 168 -356}\special{pa 122 -374}\special{pa 74 -387}\special{pa 25 -393}%
+\special{pa -25 -393}\special{pa -74 -387}\special{pa -122 -374}\special{pa -168 -356}%
+\special{pa -211 -332}\special{pa -220 -325}%
+\special{fp}%
+\special{pa 333 209}\special{pa 345 190}\special{pa 366 145}\special{pa 381 98}\special{pa 391 49}%
+\special{pa 394 0}%
+\special{fp}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ForRef-Arrowhead-2.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ForRef-Arrowhead-2.tex
new file mode 100644
index 0000000000..2876d4a66f
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ForRef-Arrowhead-2.tex
@@ -0,0 +1,46 @@
+%%% ForRef-Arrowhead-2.tex 2014-11-10 7:14
+%%% ForRef-Arrowhead5all.sce~ 2014-11-10 6:59
+{\unitlength=1cm%
+\begin{picture}%
+( 2.03000, 2.02000)( -0.56000, -0.53000)%
+\special{pn 8}%
+%
+\special{pn 8}%
+\special{pa 394 4}\special{pa 394 -4}\special{fp}\special{pa 394 -35}\special{pa 394 -43}\special{fp}%
+\special{pa 394 -75}\special{pa 394 -83}\special{fp}\special{pa 394 -114}\special{pa 394 -122}\special{fp}%
+\special{pa 394 -153}\special{pa 394 -161}\special{fp}\special{pa 394 -193}\special{pa 394 -201}\special{fp}%
+\special{pa 394 -232}\special{pa 394 -240}\special{fp}\special{pa 394 -272}\special{pa 394 -280}\special{fp}%
+\special{pa 394 -311}\special{pa 394 -319}\special{fp}\special{pa 394 -350}\special{pa 394 -358}\special{fp}%
+\special{pa 397 -391}\special{pa 391 -397}\special{fp}\special{pa 358 -394}\special{pa 350 -394}\special{fp}%
+\special{pa 319 -394}\special{pa 311 -394}\special{fp}\special{pa 280 -394}\special{pa 272 -394}\special{fp}%
+\special{pa 240 -394}\special{pa 232 -394}\special{fp}\special{pa 201 -394}\special{pa 193 -394}\special{fp}%
+\special{pa 161 -394}\special{pa 153 -394}\special{fp}\special{pa 122 -394}\special{pa 114 -394}\special{fp}%
+\special{pa 83 -394}\special{pa 75 -394}\special{fp}\special{pa 43 -394}\special{pa 35 -394}\special{fp}%
+\special{pa 4 -394}\special{pa -4 -394}\special{fp}\special{pn 8}%
+\special{pa 464 -358}\special{pa 394 -394}\special{pa 429 -324}\special{pa 447 -341}%
+\special{pa 464 -358}\special{sh 1}\special{ip}%
+\special{pn 8}%
+\special{pa 464 -358}\special{pa 394 -394}\special{pa 429 -324}\special{pa 447 -341}%
+\special{pa 464 -358}%
+\special{fp}%
+\special{pn 8}%
+\special{pa -220 0}\special{pa 579 0}%
+\special{fp}%
+\special{pa 0 209}\special{pa 0 -587}%
+\special{fp}%
+\settowidth{\Width}{$x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(1.5200,0.0000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{\Depth}%
+\put(0.0000,1.5400){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+%
+\settowidth{\Width}{O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(-0.0500,-0.0500){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ForRef-Arrowhead-3.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ForRef-Arrowhead-3.tex
new file mode 100644
index 0000000000..e2ba3929ab
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ForRef-Arrowhead-3.tex
@@ -0,0 +1,46 @@
+%%% ForRef-Arrowhead-3.tex 2014-11-10 7:14
+%%% ForRef-Arrowhead5all.sce~ 2014-11-10 6:59
+{\unitlength=1cm%
+\begin{picture}%
+( 2.03000, 2.02000)( -0.56000, -0.53000)%
+\special{pn 8}%
+%
+\special{pn 8}%
+\special{pa 394 4}\special{pa 394 -4}\special{fp}\special{pa 394 -35}\special{pa 394 -43}\special{fp}%
+\special{pa 394 -75}\special{pa 394 -83}\special{fp}\special{pa 394 -114}\special{pa 394 -122}\special{fp}%
+\special{pa 394 -153}\special{pa 394 -161}\special{fp}\special{pa 394 -193}\special{pa 394 -201}\special{fp}%
+\special{pa 394 -232}\special{pa 394 -240}\special{fp}\special{pa 394 -272}\special{pa 394 -280}\special{fp}%
+\special{pa 394 -311}\special{pa 394 -319}\special{fp}\special{pa 394 -350}\special{pa 394 -358}\special{fp}%
+\special{pa 397 -391}\special{pa 391 -397}\special{fp}\special{pa 358 -394}\special{pa 350 -394}\special{fp}%
+\special{pa 319 -394}\special{pa 311 -394}\special{fp}\special{pa 280 -394}\special{pa 272 -394}\special{fp}%
+\special{pa 240 -394}\special{pa 232 -394}\special{fp}\special{pa 201 -394}\special{pa 193 -394}\special{fp}%
+\special{pa 161 -394}\special{pa 153 -394}\special{fp}\special{pa 122 -394}\special{pa 114 -394}\special{fp}%
+\special{pa 83 -394}\special{pa 75 -394}\special{fp}\special{pa 43 -394}\special{pa 35 -394}\special{fp}%
+\special{pa 4 -394}\special{pa -4 -394}\special{fp}\special{pn 8}%
+\special{pa 546 -434}\special{pa 394 -394}\special{pa 353 -242}\special{pa 449 -338}%
+\special{pa 546 -434}\special{sh 1}\special{ip}%
+\special{pn 8}%
+\special{pa 546 -434}\special{pa 394 -394}\special{pa 353 -242}\special{pa 449 -338}%
+\special{pa 546 -434}%
+\special{fp}%
+\special{pn 8}%
+\special{pa -220 0}\special{pa 579 0}%
+\special{fp}%
+\special{pa 0 209}\special{pa 0 -587}%
+\special{fp}%
+\settowidth{\Width}{$x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(1.5200,0.0000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{\Depth}%
+\put(0.0000,1.5400){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+%
+\settowidth{\Width}{O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(-0.0500,-0.0500){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ForRef-Arrowhead-4.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ForRef-Arrowhead-4.tex
new file mode 100644
index 0000000000..5f77aadf9a
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ForRef-Arrowhead-4.tex
@@ -0,0 +1,46 @@
+%%% ForRef-Arrowhead-4.tex 2014-11-10 7:14
+%%% ForRef-Arrowhead5all.sce~ 2014-11-10 6:59
+{\unitlength=1cm%
+\begin{picture}%
+( 2.03000, 2.02000)( -0.56000, -0.53000)%
+\special{pn 8}%
+%
+\special{pn 8}%
+\special{pa 394 4}\special{pa 394 -4}\special{fp}\special{pa 394 -35}\special{pa 394 -43}\special{fp}%
+\special{pa 394 -75}\special{pa 394 -83}\special{fp}\special{pa 394 -114}\special{pa 394 -122}\special{fp}%
+\special{pa 394 -153}\special{pa 394 -161}\special{fp}\special{pa 394 -193}\special{pa 394 -201}\special{fp}%
+\special{pa 394 -232}\special{pa 394 -240}\special{fp}\special{pa 394 -272}\special{pa 394 -280}\special{fp}%
+\special{pa 394 -311}\special{pa 394 -319}\special{fp}\special{pa 394 -350}\special{pa 394 -358}\special{fp}%
+\special{pa 397 -391}\special{pa 391 -397}\special{fp}\special{pa 358 -394}\special{pa 350 -394}\special{fp}%
+\special{pa 319 -394}\special{pa 311 -394}\special{fp}\special{pa 280 -394}\special{pa 272 -394}\special{fp}%
+\special{pa 240 -394}\special{pa 232 -394}\special{fp}\special{pa 201 -394}\special{pa 193 -394}\special{fp}%
+\special{pa 161 -394}\special{pa 153 -394}\special{fp}\special{pa 122 -394}\special{pa 114 -394}\special{fp}%
+\special{pa 83 -394}\special{pa 75 -394}\special{fp}\special{pa 43 -394}\special{pa 35 -394}\special{fp}%
+\special{pa 4 -394}\special{pa -4 -394}\special{fp}\special{pn 8}%
+\special{pa 449 -449}\special{pa 297 -490}\special{pa 338 -338}\special{pa 394 -394}%
+\special{pa 449 -449}\special{sh 1}\special{ip}%
+\special{pn 8}%
+\special{pa 449 -449}\special{pa 297 -490}\special{pa 338 -338}\special{pa 394 -394}%
+\special{pa 449 -449}%
+\special{fp}%
+\special{pn 8}%
+\special{pa -220 0}\special{pa 579 0}%
+\special{fp}%
+\special{pa 0 209}\special{pa 0 -587}%
+\special{fp}%
+\settowidth{\Width}{$x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(1.5200,0.0000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{\Depth}%
+\put(0.0000,1.5400){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+%
+\settowidth{\Width}{O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(-0.0500,-0.0500){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ForRef-Arrowhead-5.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ForRef-Arrowhead-5.tex
new file mode 100644
index 0000000000..fe3dc7034e
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ForRef-Arrowhead-5.tex
@@ -0,0 +1,43 @@
+%%% ForRef-Arrowhead-5.tex 2014-11-10 7:14
+%%% ForRef-Arrowhead5all.sce~ 2014-11-10 6:59
+{\unitlength=1cm%
+\begin{picture}%
+( 2.03000, 2.02000)( -0.56000, -0.53000)%
+\special{pn 8}%
+%
+\special{pn 8}%
+\special{pa 394 4}\special{pa 394 -4}\special{fp}\special{pa 394 -35}\special{pa 394 -43}\special{fp}%
+\special{pa 394 -75}\special{pa 394 -83}\special{fp}\special{pa 394 -114}\special{pa 394 -122}\special{fp}%
+\special{pa 394 -153}\special{pa 394 -161}\special{fp}\special{pa 394 -193}\special{pa 394 -201}\special{fp}%
+\special{pa 394 -232}\special{pa 394 -240}\special{fp}\special{pa 394 -272}\special{pa 394 -280}\special{fp}%
+\special{pa 394 -311}\special{pa 394 -319}\special{fp}\special{pa 394 -350}\special{pa 394 -358}\special{fp}%
+\special{pa 397 -391}\special{pa 391 -397}\special{fp}\special{pa 358 -394}\special{pa 350 -394}\special{fp}%
+\special{pa 319 -394}\special{pa 311 -394}\special{fp}\special{pa 280 -394}\special{pa 272 -394}\special{fp}%
+\special{pa 240 -394}\special{pa 232 -394}\special{fp}\special{pa 201 -394}\special{pa 193 -394}\special{fp}%
+\special{pa 161 -394}\special{pa 153 -394}\special{fp}\special{pa 122 -394}\special{pa 114 -394}\special{fp}%
+\special{pa 83 -394}\special{pa 75 -394}\special{fp}\special{pa 43 -394}\special{pa 35 -394}\special{fp}%
+\special{pa 4 -394}\special{pa -4 -394}\special{fp}\special{pn 8}%
+\special{pn 4}%
+\special{pa 484 -379}\special{pa 341 -446}\special{pa 408 -303}%
+\special{fp}%
+\special{pn 8}%
+\special{pa -220 0}\special{pa 579 0}%
+\special{fp}%
+\special{pa 0 209}\special{pa 0 -587}%
+\special{fp}%
+\settowidth{\Width}{$x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(1.5200,0.0000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{\Depth}%
+\put(0.0000,1.5400){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+%
+\settowidth{\Width}{O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(-0.0500,-0.0500){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ForRef-Arrowhead-6.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ForRef-Arrowhead-6.tex
new file mode 100644
index 0000000000..174e0a6909
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ForRef-Arrowhead-6.tex
@@ -0,0 +1,26 @@
+%%% ForRef-Arrowhead-6.tex 2014-11-10 7:14
+%%% ForRef-Arrowhead5all.sce~ 2014-11-10 6:59
+{\unitlength=1cm%
+\begin{picture}%
+( 2.03000, 2.02000)( -0.56000, -0.53000)%
+\special{pn 8}%
+%
+\special{pa 211 -356}\special{pa 203 -361}\special{pa 193 -362}\special{pa 185 -358}%
+\special{pa 179 -351}\special{pa 177 -341}\special{pa 180 -332}\special{pa 187 -326}%
+\special{pa 196 -323}\special{pa 205 -325}\special{pa 212 -330}\special{pa 216 -339}%
+\special{pa 216 -348}\special{pa 211 -356}\special{sh 1}\special{fp}%
+\settowidth{\Width}{D}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{D}\settodepth{\Depth}{D}\setlength{\Height}{\Depth}%
+\put(0.6000,0.9700){\hspace*{\Width}\raisebox{\Height}{D}}%
+%
+%
+\special{pa 394 0}\special{pa 391 -49}\special{pa 381 -98}\special{pa 366 -145}\special{pa 345 -190}%
+\special{pa 319 -231}\special{pa 287 -270}\special{pa 251 -303}\special{pa 211 -332}%
+\special{pa 168 -356}\special{pa 122 -374}\special{pa 74 -387}\special{pa 25 -393}%
+\special{pa -25 -393}\special{pa -74 -387}\special{pa -122 -374}\special{pa -168 -356}%
+\special{pa -211 -332}\special{pa -220 -325}%
+\special{fp}%
+\special{pa 333 209}\special{pa 345 190}\special{pa 366 145}\special{pa 381 98}\special{pa 391 49}%
+\special{pa 394 0}%
+\special{fp}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ForRef-Arrowhead-7.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ForRef-Arrowhead-7.tex
new file mode 100644
index 0000000000..ce0e0d5649
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ForRef-Arrowhead-7.tex
@@ -0,0 +1,24 @@
+%%% ForRef-Arrowhead-7.tex 2014-11-10 7:14
+%%% ForRef-Arrowhead5all.sce~ 2014-11-10 6:59
+{\unitlength=1cm%
+\begin{picture}%
+( 2.03000, 2.02000)( -0.56000, -0.53000)%
+\special{pn 8}%
+%
+\special{pa 271 -317}\special{pa 197 -343}\special{pa 242 -278}\special{pa 257 -298}%
+\special{pa 271 -317}\special{sh 1}\special{ip}%
+\special{pn 8}%
+\special{pa 271 -317}\special{pa 197 -343}\special{pa 242 -278}\special{pa 257 -298}%
+\special{pa 271 -317}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 394 0}\special{pa 391 -49}\special{pa 381 -98}\special{pa 366 -145}\special{pa 345 -190}%
+\special{pa 319 -231}\special{pa 287 -270}\special{pa 251 -303}\special{pa 211 -332}%
+\special{pa 168 -356}\special{pa 122 -374}\special{pa 74 -387}\special{pa 25 -393}%
+\special{pa -25 -393}\special{pa -74 -387}\special{pa -122 -374}\special{pa -168 -356}%
+\special{pa -211 -332}\special{pa -220 -325}%
+\special{fp}%
+\special{pa 333 209}\special{pa 345 190}\special{pa 366 145}\special{pa 381 98}\special{pa 391 49}%
+\special{pa 394 0}%
+\special{fp}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ForRef-Arrowhead-8.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ForRef-Arrowhead-8.tex
new file mode 100644
index 0000000000..59fea650f6
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ForRef-Arrowhead-8.tex
@@ -0,0 +1,24 @@
+%%% ForRef-Arrowhead-8.tex 2014-11-10 7:14
+%%% ForRef-Arrowhead5all.sce~ 2014-11-10 6:59
+{\unitlength=1cm%
+\begin{picture}%
+( 2.03000, 2.02000)( -0.56000, -0.53000)%
+\special{pn 8}%
+%
+\special{pa 341 -280}\special{pa 197 -343}\special{pa 277 -207}\special{pa 309 -244}%
+\special{pa 341 -280}\special{sh 1}\special{ip}%
+\special{pn 8}%
+\special{pa 341 -280}\special{pa 197 -343}\special{pa 277 -207}\special{pa 309 -244}%
+\special{pa 341 -280}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 394 0}\special{pa 391 -49}\special{pa 381 -98}\special{pa 366 -145}\special{pa 345 -190}%
+\special{pa 319 -231}\special{pa 287 -270}\special{pa 251 -303}\special{pa 211 -332}%
+\special{pa 168 -356}\special{pa 122 -374}\special{pa 74 -387}\special{pa 25 -393}%
+\special{pa -25 -393}\special{pa -74 -387}\special{pa -122 -374}\special{pa -168 -356}%
+\special{pa -211 -332}\special{pa -220 -325}%
+\special{fp}%
+\special{pa 333 209}\special{pa 345 190}\special{pa 366 145}\special{pa 381 98}\special{pa 391 49}%
+\special{pa 394 0}%
+\special{fp}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ForRef-Arrowhead-9.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ForRef-Arrowhead-9.tex
new file mode 100644
index 0000000000..866d650177
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ForRef-Arrowhead-9.tex
@@ -0,0 +1,21 @@
+%%% ForRef-Arrowhead-9.tex 2014-11-10 7:14
+%%% ForRef-Arrowhead5all.sce~ 2014-11-10 6:59
+{\unitlength=1cm%
+\begin{picture}%
+( 2.03000, 2.02000)( -0.56000, -0.53000)%
+\special{pn 8}%
+%
+\special{pn 4}%
+\special{pa 352 -314}\special{pa 197 -343}\special{pa 249 -194}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 394 0}\special{pa 391 -49}\special{pa 381 -98}\special{pa 366 -145}\special{pa 345 -190}%
+\special{pa 319 -231}\special{pa 287 -270}\special{pa 251 -303}\special{pa 211 -332}%
+\special{pa 168 -356}\special{pa 122 -374}\special{pa 74 -387}\special{pa 25 -393}%
+\special{pa -25 -393}\special{pa -74 -387}\special{pa -122 -374}\special{pa -168 -356}%
+\special{pa -211 -332}\special{pa -220 -325}%
+\special{fp}%
+\special{pa 333 209}\special{pa 345 190}\special{pa 366 145}\special{pa 381 98}\special{pa 391 49}%
+\special{pa 394 0}%
+\special{fp}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ForRef-Arrowhead-ya1.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ForRef-Arrowhead-ya1.tex
new file mode 100644
index 0000000000..9941b4c42f
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ForRef-Arrowhead-ya1.tex
@@ -0,0 +1,32 @@
+%%% spline1.tex 2014-11-9 6:32
+%%% spline1.sce 2014-11-8 22:24
+{\unitlength=1cm%
+\begin{picture}%
+( 15.60000, 12.54000)( -0.03000, -12.57000)%
+\special{pn 8}%
+%
+\special{pn 0}%
+\special{pa 3972 2358}\special{pa 3693 2220}\special{pa 3366 2189}\special{pa 3075 2228}%
+\special{pa 2839 2339}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 3695 2190}\special{pa 3673 2171}\special{pa 3650 2153}\special{pa 3625 2137}%
+\special{pa 3600 2123}\special{pa 3573 2109}\special{pa 3545 2097}\special{pa 3517 2086}%
+\special{pa 3488 2076}\special{pa 3458 2068}\special{pa 3428 2060}\special{pa 3397 2053}%
+\special{pa 3366 2048}\special{pa 3334 2043}\special{pa 3303 2039}\special{pa 3271 2036}%
+\special{pa 3240 2034}\special{pa 3208 2033}\special{pa 3177 2032}\special{pa 3147 2032}%
+\special{pa 3116 2033}\special{pa 3086 2034}\special{pa 3057 2036}\special{pa 3028 2039}%
+\special{pa 3000 2042}\special{pa 2972 2045}\special{pa 2945 2050}\special{pa 2918 2055}%
+\special{pa 2892 2061}\special{pa 2867 2067}\special{pa 2842 2074}\special{pa 2817 2082}%
+\special{pa 2793 2091}\special{pa 2769 2100}\special{pa 2747 2110}\special{pa 2724 2121}%
+\special{pa 2702 2132}\special{pa 2681 2145}\special{pa 2661 2158}\special{pa 2641 2171}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 2691 2111}\special{pa 2641 2171}\special{pa 2717 2152}\special{pa 2704 2132}%
+\special{pa 2691 2111}\special{sh 1}\special{ip}%
+\special{pn 8}%
+\special{pa 2691 2111}\special{pa 2641 2171}\special{pa 2717 2152}\special{pa 2704 2132}%
+\special{pa 2691 2111}%
+\special{fp}%
+\special{pn 8}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/Framedata.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/Framedata.pdf
new file mode 100644
index 0000000000..b306edf386
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/Framedata.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/HatchZuKita1.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/HatchZuKita1.tex
new file mode 100644
index 0000000000..61ef55a43f
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/HatchZuKita1.tex
@@ -0,0 +1,128 @@
+%%% /Users/Hannya/Desktop/fig/HatchZuKita1.tex
+%%% Generator=hachtest.cdy
+{\unitlength=6mm%
+\begin{picture}%
+(19.61,4.64)(-2.3,-2.27)%
+\special{pn 8}%
+%
+\special{pa 472 -0}\special{pa 469 -59}\special{pa 458 -117}\special{pa 439 -174}%
+\special{pa 414 -228}\special{pa 382 -278}\special{pa 344 -323}\special{pa 301 -364}%
+\special{pa 253 -399}\special{pa 201 -427}\special{pa 146 -449}\special{pa 89 -464}%
+\special{pa 30 -472}\special{pa -30 -472}\special{pa -89 -464}\special{pa -146 -449}%
+\special{pa -201 -427}\special{pa -253 -399}\special{pa -301 -364}\special{pa -344 -323}%
+\special{pa -382 -278}\special{pa -414 -228}\special{pa -439 -174}\special{pa -458 -117}%
+\special{pa -469 -59}\special{pa -472 0}\special{pa -469 59}\special{pa -458 117}%
+\special{pa -439 174}\special{pa -414 228}\special{pa -382 278}\special{pa -344 323}%
+\special{pa -301 364}\special{pa -253 399}\special{pa -201 427}\special{pa -146 449}%
+\special{pa -89 464}\special{pa -30 472}\special{pa 30 472}\special{pa 89 464}%
+\special{pa 146 449}\special{pa 201 427}\special{pa 253 399}\special{pa 301 364}%
+\special{pa 344 323}\special{pa 382 278}\special{pa 414 228}\special{pa 439 174}%
+\special{pa 458 117}\special{pa 469 59}\special{pa 472 0}%
+\special{fp}%
+\special{pa 1654 -0}\special{pa 1650 -59}\special{pa 1639 -117}\special{pa 1620 -174}%
+\special{pa 1595 -228}\special{pa 1563 -278}\special{pa 1525 -323}\special{pa 1482 -364}%
+\special{pa 1434 -399}\special{pa 1382 -427}\special{pa 1327 -449}\special{pa 1270 -464}%
+\special{pa 1211 -472}\special{pa 1151 -472}\special{pa 1093 -464}\special{pa 1035 -449}%
+\special{pa 980 -427}\special{pa 928 -399}\special{pa 880 -364}\special{pa 837 -323}%
+\special{pa 799 -278}\special{pa 767 -228}\special{pa 742 -174}\special{pa 724 -117}%
+\special{pa 712 -59}\special{pa 709 0}\special{pa 712 59}\special{pa 724 117}%
+\special{pa 742 174}\special{pa 767 228}\special{pa 799 278}\special{pa 837 323}%
+\special{pa 880 364}\special{pa 928 399}\special{pa 980 427}\special{pa 1035 449}%
+\special{pa 1093 464}\special{pa 1151 472}\special{pa 1211 472}\special{pa 1270 464}%
+\special{pa 1327 449}\special{pa 1382 427}\special{pa 1434 399}\special{pa 1482 364}%
+\special{pa 1525 323}\special{pa 1563 278}\special{pa 1595 228}\special{pa 1620 174}%
+\special{pa 1639 117}\special{pa 1650 59}\special{pa 1654 0}%
+\special{fp}%
+\special{pa 2835 -0}\special{pa 2831 -59}\special{pa 2820 -117}\special{pa 2801 -174}%
+\special{pa 2776 -228}\special{pa 2744 -278}\special{pa 2707 -323}\special{pa 2663 -364}%
+\special{pa 2615 -399}\special{pa 2563 -427}\special{pa 2508 -449}\special{pa 2451 -464}%
+\special{pa 2392 -472}\special{pa 2333 -472}\special{pa 2274 -464}\special{pa 2216 -449}%
+\special{pa 2161 -427}\special{pa 2109 -399}\special{pa 2061 -364}\special{pa 2018 -323}%
+\special{pa 1980 -278}\special{pa 1948 -228}\special{pa 1923 -174}\special{pa 1905 -117}%
+\special{pa 1893 -59}\special{pa 1890 0}\special{pa 1893 59}\special{pa 1905 117}%
+\special{pa 1923 174}\special{pa 1948 228}\special{pa 1980 278}\special{pa 2018 323}%
+\special{pa 2061 364}\special{pa 2109 399}\special{pa 2161 427}\special{pa 2216 449}%
+\special{pa 2274 464}\special{pa 2333 472}\special{pa 2392 472}\special{pa 2451 464}%
+\special{pa 2508 449}\special{pa 2563 427}\special{pa 2615 399}\special{pa 2663 364}%
+\special{pa 2707 323}\special{pa 2744 278}\special{pa 2776 228}\special{pa 2801 174}%
+\special{pa 2820 117}\special{pa 2831 59}\special{pa 2835 0}%
+\special{fp}%
+\special{pa 4016 -0}\special{pa 4012 -59}\special{pa 4001 -117}\special{pa 3983 -174}%
+\special{pa 3957 -228}\special{pa 3926 -278}\special{pa 3888 -323}\special{pa 3844 -364}%
+\special{pa 3796 -399}\special{pa 3744 -427}\special{pa 3689 -449}\special{pa 3632 -464}%
+\special{pa 3573 -472}\special{pa 3514 -472}\special{pa 3455 -464}\special{pa 3397 -449}%
+\special{pa 3342 -427}\special{pa 3290 -399}\special{pa 3242 -364}\special{pa 3199 -323}%
+\special{pa 3161 -278}\special{pa 3129 -228}\special{pa 3104 -174}\special{pa 3086 -117}%
+\special{pa 3075 -59}\special{pa 3071 0}\special{pa 3075 59}\special{pa 3086 117}%
+\special{pa 3104 174}\special{pa 3129 228}\special{pa 3161 278}\special{pa 3199 323}%
+\special{pa 3242 364}\special{pa 3290 399}\special{pa 3342 427}\special{pa 3397 449}%
+\special{pa 3455 464}\special{pa 3514 472}\special{pa 3573 472}\special{pa 3632 464}%
+\special{pa 3689 449}\special{pa 3744 427}\special{pa 3796 399}\special{pa 3844 364}%
+\special{pa 3888 323}\special{pa 3926 278}\special{pa 3957 228}\special{pa 3983 174}%
+\special{pa 4001 117}\special{pa 4012 59}\special{pa 4016 0}%
+\special{fp}%
+\special{pa 243 404}\special{pa 404 244}%
+\special{fp}%
+\special{pa 38 470}\special{pa 470 38}%
+\special{fp}%
+\special{pa -94 463}\special{pa 462 -93}%
+\special{fp}%
+\special{pa -199 428}\special{pa 428 -198}%
+\special{fp}%
+\special{pa -285 376}\special{pa 376 -285}%
+\special{fp}%
+\special{pa -357 308}\special{pa 309 -357}%
+\special{fp}%
+\special{pa -414 227}\special{pa 226 -414}%
+\special{fp}%
+\special{pa -454 127}\special{pa 127 -454}%
+\special{fp}%
+\special{pa -472 6}\special{pa 5 -472}%
+\special{fp}%
+\special{pa -443 -162}\special{pa -162 -443}%
+\special{fp}%
+\special{pa 732 142}\special{pa 1119 467}%
+\special{fp}%
+\special{pa 725 -121}\special{pa 1379 429}%
+\special{fp}%
+\special{pa 817 -300}\special{pa 1540 306}%
+\special{fp}%
+\special{pa 975 -425}\special{pa 1635 129}%
+\special{fp}%
+\special{pa 1228 -469}\special{pa 1636 -127}%
+\special{fp}%
+\special{pn 2}%
+\special{pa 2614 399}\special{pa 2759 255}%
+\special{fp}%
+\special{pa 2405 470}\special{pa 2832 43}%
+\special{fp}%
+\special{pa 2272 464}\special{pa 2825 -90}%
+\special{fp}%
+\special{pa 2167 430}\special{pa 2791 -195}%
+\special{fp}%
+\special{pa 2080 377}\special{pa 2740 -283}%
+\special{fp}%
+\special{pa 2007 311}\special{pa 2673 -355}%
+\special{fp}%
+\special{pa 1949 229}\special{pa 2591 -412}%
+\special{fp}%
+\special{pa 1909 131}\special{pa 2493 -453}%
+\special{fp}%
+\special{pa 1890 10}\special{pa 2372 -472}%
+\special{fp}%
+\special{pa 1917 -156}\special{pa 2206 -445}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 2}%
+\special{pa 3135 237}\special{pa 3306 407}%
+\special{fp}%
+\special{pa 3081 -95}\special{pa 3639 462}%
+\special{fp}%
+\special{pa 3168 -287}\special{pa 3830 375}%
+\special{fp}%
+\special{pa 3319 -415}\special{pa 3958 225}%
+\special{fp}%
+\special{pa 3540 -472}\special{pa 4016 4}%
+\special{fp}%
+\special{pn 8}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/HatchZuKita5E.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/HatchZuKita5E.tex
new file mode 100644
index 0000000000..83460a6c65
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/HatchZuKita5E.tex
@@ -0,0 +1,50 @@
+%%% /Users/takatoosetsuo/Dropbox/kettoday/0716Enhatch/fig/HatchZuKita5.tex
+%%% Generator=hatch2.cdy
+{\unitlength=5mm%
+\begin{picture}%
+(8,8)(-4,-4)%
+\special{pn 8}%
+%
+\special{pn 12}%
+\special{pa 689 -0}\special{pa 684 -86}\special{pa 667 -171}\special{pa 641 -254}%
+\special{pa 604 -332}\special{pa 557 -405}\special{pa 502 -472}\special{pa 439 -531}%
+\special{pa 369 -582}\special{pa 293 -623}\special{pa 213 -655}\special{pa 129 -677}%
+\special{pa 43 -688}\special{pa -43 -688}\special{pa -129 -677}\special{pa -213 -655}%
+\special{pa -293 -623}\special{pa -369 -582}\special{pa -439 -531}\special{pa -502 -472}%
+\special{pa -557 -405}\special{pa -604 -332}\special{pa -641 -254}\special{pa -667 -171}%
+\special{pa -684 -86}\special{pa -689 0}\special{pa -684 86}\special{pa -667 171}%
+\special{pa -641 254}\special{pa -604 332}\special{pa -557 405}\special{pa -502 472}%
+\special{pa -439 531}\special{pa -369 582}\special{pa -293 623}\special{pa -213 655}%
+\special{pa -129 677}\special{pa -43 688}\special{pa 43 688}\special{pa 129 677}%
+\special{pa 213 655}\special{pa 293 623}\special{pa 369 582}\special{pa 439 531}%
+\special{pa 502 472}\special{pa 557 405}\special{pa 604 332}\special{pa 641 254}%
+\special{pa 667 171}\special{pa 684 86}\special{pa 689 0}%
+\special{fp}%
+\special{pn 8}%
+\special{pa -787 -0}\special{pa 787 -0}%
+\special{fp}%
+\special{pa 499 787}\special{pa -499 -787}%
+\special{fp}%
+\special{pa 557 -0}\special{pa 677 -120}%
+\special{fp}%
+\special{pa 418 -0}\special{pa 648 -231}%
+\special{fp}%
+\special{pa 278 -0}\special{pa 606 -327}%
+\special{fp}%
+\special{pa 139 -0}\special{pa 551 -412}%
+\special{fp}%
+\special{pa 0 -0}\special{pa 486 -486}%
+\special{fp}%
+\special{pa -54 -85}\special{pa 412 -551}%
+\special{fp}%
+\special{pa -108 -170}\special{pa 327 -605}%
+\special{fp}%
+\special{pa -162 -256}\special{pa 231 -648}%
+\special{fp}%
+\special{pa -216 -341}\special{pa 121 -678}%
+\special{fp}%
+\special{pa -270 -426}\special{pa -8 -688}%
+\special{fp}%
+\special{pa -324 -511}\special{pa -169 -667}%
+\special{fp}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/HatchZuKita6E.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/HatchZuKita6E.tex
new file mode 100644
index 0000000000..5c9f27b014
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/HatchZuKita6E.tex
@@ -0,0 +1,72 @@
+%%% /Users/takatoosetsuo/Dropbox/kettoday/0716Enhatch/fig/HatchZuKita6.tex
+%%% Generator=hatch2.cdy
+{\unitlength=5mm%
+\begin{picture}%
+(8,8)(-4,-4)%
+\special{pn 8}%
+%
+\special{pn 12}%
+\special{pa 689 -0}\special{pa 684 -86}\special{pa 667 -171}\special{pa 641 -254}%
+\special{pa 604 -332}\special{pa 557 -405}\special{pa 502 -472}\special{pa 439 -531}%
+\special{pa 369 -582}\special{pa 293 -623}\special{pa 213 -655}\special{pa 129 -677}%
+\special{pa 43 -688}\special{pa -43 -688}\special{pa -129 -677}\special{pa -213 -655}%
+\special{pa -293 -623}\special{pa -369 -582}\special{pa -439 -531}\special{pa -502 -472}%
+\special{pa -557 -405}\special{pa -604 -332}\special{pa -641 -254}\special{pa -667 -171}%
+\special{pa -684 -86}\special{pa -689 0}\special{pa -684 86}\special{pa -667 171}%
+\special{pa -641 254}\special{pa -604 332}\special{pa -557 405}\special{pa -502 472}%
+\special{pa -439 531}\special{pa -369 582}\special{pa -293 623}\special{pa -213 655}%
+\special{pa -129 677}\special{pa -43 688}\special{pa 43 688}\special{pa 129 677}%
+\special{pa 213 655}\special{pa 293 623}\special{pa 369 582}\special{pa 439 531}%
+\special{pa 502 472}\special{pa 557 405}\special{pa 604 332}\special{pa 641 254}%
+\special{pa 667 171}\special{pa 684 86}\special{pa 689 0}%
+\special{fp}%
+\special{pn 8}%
+\special{pa -787 -0}\special{pa 787 -0}%
+\special{fp}%
+\special{pa 499 787}\special{pa -499 -787}%
+\special{fp}%
+\special{pa 557 -0}\special{pa 677 -120}%
+\special{fp}%
+\special{pa 418 -0}\special{pa 648 -231}%
+\special{fp}%
+\special{pa 278 -0}\special{pa 606 -327}%
+\special{fp}%
+\special{pa 139 -0}\special{pa 551 -412}%
+\special{fp}%
+\special{pa 0 -0}\special{pa 486 -486}%
+\special{fp}%
+\special{pa -54 -85}\special{pa 412 -551}%
+\special{fp}%
+\special{pa -108 -170}\special{pa 327 -605}%
+\special{fp}%
+\special{pa -162 -256}\special{pa 231 -648}%
+\special{fp}%
+\special{pa -216 -341}\special{pa 121 -678}%
+\special{fp}%
+\special{pa -270 -426}\special{pa -8 -688}%
+\special{fp}%
+\special{pa -324 -511}\special{pa -169 -667}%
+\special{fp}%
+\special{pa 169 667}\special{pa 324 511}%
+\special{fp}%
+\special{pa 8 688}\special{pa 270 426}%
+\special{fp}%
+\special{pa -121 678}\special{pa 216 341}%
+\special{fp}%
+\special{pa -231 648}\special{pa 162 256}%
+\special{fp}%
+\special{pa -327 605}\special{pa 108 170}%
+\special{fp}%
+\special{pa -412 551}\special{pa 54 85}%
+\special{fp}%
+\special{pa -486 486}\special{pa 0 -0}%
+\special{fp}%
+\special{pa -551 412}\special{pa -139 -0}%
+\special{fp}%
+\special{pa -606 327}\special{pa -278 -0}%
+\special{fp}%
+\special{pa -648 231}\special{pa -418 -0}%
+\special{fp}%
+\special{pa -677 120}\special{pa -557 -0}%
+\special{fp}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/HatchZuKita7.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/HatchZuKita7.tex
new file mode 100644
index 0000000000..9dc55c8234
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/HatchZuKita7.tex
@@ -0,0 +1,32 @@
+%%% /Users/Hannya/Desktop/fig/HatchZuKita7.tex
+%%% Generator=hachtest.cdy
+{\unitlength=1cm%
+\begin{picture}%
+(3.5,3.35)(-1.77,-1.61)%
+\special{pn 8}%
+%
+\special{pa 287 515}\special{pa 518 284}%
+\special{fp}%
+\special{pa 78 584}\special{pa 585 77}%
+\special{fp}%
+\special{pa -63 586}\special{pa 587 -63}%
+\special{fp}%
+\special{pa -179 563}\special{pa 562 -178}%
+\special{fp}%
+\special{pa -276 521}\special{pa 521 -276}%
+\special{fp}%
+\special{pa -361 466}\special{pa 466 -361}%
+\special{fp}%
+\special{pa -434 400}\special{pa 400 -433}%
+\special{fp}%
+\special{pa -494 321}\special{pa 322 -495}%
+\special{fp}%
+\special{pa -543 231}\special{pa 231 -543}%
+\special{fp}%
+\special{pa -576 125}\special{pa 125 -576}%
+\special{fp}%
+\special{pa -591 0}\special{pa -1 -589}%
+\special{fp}%
+\special{pa -567 -163}\special{pa -163 -567}%
+\special{fp}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/HatchZuKita7E.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/HatchZuKita7E.tex
new file mode 100644
index 0000000000..bac3c11e23
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/HatchZuKita7E.tex
@@ -0,0 +1,34 @@
+%%% /Users/takatoosetsuo/Dropbox/kettoday/0716Enhatch/fig/HatchZuKita7.tex
+%%% Generator=hatch2.cdy
+{\unitlength=5mm%
+\begin{picture}%
+(8,8)(-4,-4)%
+\special{pn 8}%
+%
+\special{pa 169 667}\special{pa 668 167}%
+\special{fp}%
+\special{pa 8 688}\special{pa 689 7}%
+\special{fp}%
+\special{pa -121 678}\special{pa 677 -120}%
+\special{fp}%
+\special{pa -231 648}\special{pa 648 -231}%
+\special{fp}%
+\special{pa -327 605}\special{pa 606 -327}%
+\special{fp}%
+\special{pa -412 551}\special{pa 551 -412}%
+\special{fp}%
+\special{pa -486 486}\special{pa 486 -486}%
+\special{fp}%
+\special{pa -551 412}\special{pa 412 -551}%
+\special{fp}%
+\special{pa -606 327}\special{pa 327 -605}%
+\special{fp}%
+\special{pa -648 231}\special{pa 231 -648}%
+\special{fp}%
+\special{pa -677 120}\special{pa 121 -678}%
+\special{fp}%
+\special{pa -689 -7}\special{pa -8 -688}%
+\special{fp}%
+\special{pa -668 -167}\special{pa -169 -667}%
+\special{fp}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/HatchZuKita8.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/HatchZuKita8.tex
new file mode 100644
index 0000000000..9b1c3dbd77
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/HatchZuKita8.tex
@@ -0,0 +1,82 @@
+%%% /Users/Hannya/Desktop/fig/HatchZuKita8.tex
+%%% Generator=hachtest.cdy
+{\unitlength=1cm%
+\begin{picture}%
+(3.5,3.35)(-1.77,-1.61)%
+\special{pn 8}%
+%
+\special{pa 591 0}\special{pa 588 -39}\special{fp}\special{pa 585 -77}\special{pa 578 -115}\special{fp}%
+\special{pa 570 -153}\special{pa 558 -189}\special{fp}\special{pa 545 -226}\special{pa 529 -261}\special{fp}%
+\special{pa 511 -295}\special{pa 490 -328}\special{fp}\special{pa 468 -359}\special{pa 443 -389}\special{fp}%
+\special{pa 417 -417}\special{pa 389 -443}\special{fp}\special{pa 359 -468}\special{pa 328 -490}\special{fp}%
+\special{pa 295 -511}\special{pa 261 -529}\special{fp}\special{pa 226 -545}\special{pa 190 -559}\special{fp}%
+\special{pa 153 -569}\special{pa 115 -579}\special{fp}\special{pa 77 -584}\special{pa 39 -589}\special{fp}%
+\special{pa 0 -589}\special{pa -37 -589}\special{pa -39 -589}\special{fp}\special{pa -77 -584}\special{pa -111 -580}\special{pa -115 -579}\special{fp}%
+\special{pa -153 -569}\special{pa -182 -562}\special{pa -190 -559}\special{fp}\special{pa -226 -545}\special{pa -251 -534}\special{pa -261 -529}\special{fp}%
+\special{pa -295 -511}\special{pa -316 -499}\special{pa -328 -490}\special{fp}\special{pa -359 -468}\special{pa -376 -455}\special{pa -389 -443}\special{fp}%
+\special{pa -417 -417}\special{pa -430 -404}\special{pa -443 -389}\special{fp}\special{pa -468 -359}\special{pa -478 -347}\special{pa -490 -328}\special{fp}%
+\special{pa -511 -295}\special{pa -518 -285}\special{pa -529 -261}\special{fp}\special{pa -545 -226}\special{pa -549 -217}\special{pa -558 -189}\special{fp}%
+\special{pa -570 -153}\special{pa -572 -147}\special{pa -578 -115}\special{fp}\special{pa -585 -77}\special{pa -586 -74}\special{pa -588 -39}\special{fp}%
+\special{pa -591 0}\special{pa -588 39}\special{fp}\special{pa -585 77}\special{pa -578 115}\special{fp}%
+\special{pa -570 153}\special{pa -558 189}\special{fp}\special{pa -545 226}\special{pa -529 261}\special{fp}%
+\special{pa -511 295}\special{pa -490 328}\special{fp}\special{pa -468 359}\special{pa -443 389}\special{fp}%
+\special{pa -417 417}\special{pa -389 443}\special{fp}\special{pa -359 468}\special{pa -328 490}\special{fp}%
+\special{pa -295 511}\special{pa -261 529}\special{fp}\special{pa -226 545}\special{pa -190 559}\special{fp}%
+\special{pa -153 569}\special{pa -115 579}\special{fp}\special{pa -77 584}\special{pa -39 589}\special{fp}%
+\special{pa 0 589}\special{pa 37 589}\special{pa 39 589}\special{fp}\special{pa 77 584}\special{pa 111 580}\special{pa 115 579}\special{fp}%
+\special{pa 153 569}\special{pa 182 562}\special{pa 190 559}\special{fp}\special{pa 226 545}\special{pa 251 534}\special{pa 261 529}\special{fp}%
+\special{pa 295 511}\special{pa 316 499}\special{pa 328 490}\special{fp}\special{pa 359 468}\special{pa 376 455}\special{pa 389 443}\special{fp}%
+\special{pa 417 417}\special{pa 430 404}\special{pa 443 389}\special{fp}\special{pa 468 359}\special{pa 478 347}\special{pa 490 328}\special{fp}%
+\special{pa 511 295}\special{pa 518 285}\special{pa 529 261}\special{fp}\special{pa 545 226}\special{pa 549 217}\special{pa 558 189}\special{fp}%
+\special{pa 570 153}\special{pa 572 147}\special{pa 578 115}\special{fp}\special{pa 585 77}\special{pa 586 74}\special{pa 588 39}\special{fp}%
+%
+%
+\special{pa 287 515}\special{pa 518 284}%
+\special{fp}%
+\special{pa 78 584}\special{pa 585 77}%
+\special{fp}%
+\special{pa -63 586}\special{pa 587 -63}%
+\special{fp}%
+\special{pa -179 563}\special{pa 562 -178}%
+\special{fp}%
+\special{pa -276 521}\special{pa 521 -276}%
+\special{fp}%
+\special{pa -361 466}\special{pa 466 -361}%
+\special{fp}%
+\special{pa -434 400}\special{pa 400 -433}%
+\special{fp}%
+\special{pa -494 321}\special{pa 322 -495}%
+\special{fp}%
+\special{pa -543 231}\special{pa 231 -543}%
+\special{fp}%
+\special{pa -576 125}\special{pa 125 -576}%
+\special{fp}%
+\special{pa -591 0}\special{pa -1 -589}%
+\special{fp}%
+\special{pa -567 -163}\special{pa -163 -567}%
+\special{fp}%
+\special{pa 287 515}\special{pa 518 284}%
+\special{fp}%
+\special{pa 78 584}\special{pa 585 77}%
+\special{fp}%
+\special{pa -63 586}\special{pa 587 -63}%
+\special{fp}%
+\special{pa -179 563}\special{pa 562 -178}%
+\special{fp}%
+\special{pa -276 521}\special{pa 521 -276}%
+\special{fp}%
+\special{pa -361 466}\special{pa 466 -361}%
+\special{fp}%
+\special{pa -434 400}\special{pa 400 -433}%
+\special{fp}%
+\special{pa -494 321}\special{pa 322 -495}%
+\special{fp}%
+\special{pa -543 231}\special{pa 231 -543}%
+\special{fp}%
+\special{pa -576 125}\special{pa 125 -576}%
+\special{fp}%
+\special{pa -591 0}\special{pa -1 -589}%
+\special{fp}%
+\special{pa -567 -163}\special{pa -163 -567}%
+\special{fp}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/HatchZuKita9.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/HatchZuKita9.tex
new file mode 100644
index 0000000000..0080872d2e
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/HatchZuKita9.tex
@@ -0,0 +1,86 @@
+%%% /Users/Hannya/Desktop/fig/HatchZuKita9.tex
+%%% Generator=hachtest.cdy
+{\unitlength=1cm%
+\begin{picture}%
+(3.5,3.35)(-1.77,-1.61)%
+\special{pn 8}%
+%
+\special{pa 591 -0}\special{pa 586 -74}\special{pa 572 -147}\special{pa 549 -217}%
+\special{pa 518 -285}\special{pa 478 -347}\special{pa 430 -404}\special{pa 376 -455}%
+\special{pa 316 -499}\special{pa 251 -534}\special{pa 182 -562}\special{pa 111 -580}%
+\special{pa 37 -589}\special{pa -37 -589}\special{pa -111 -580}\special{pa -182 -562}%
+\special{pa -251 -534}\special{pa -316 -499}\special{pa -376 -455}\special{pa -430 -404}%
+\special{pa -478 -347}\special{pa -518 -285}\special{pa -549 -217}\special{pa -572 -147}%
+\special{pa -586 -74}\special{pa -591 0}\special{pa -586 74}\special{pa -572 147}%
+\special{pa -549 217}\special{pa -518 285}\special{pa -478 347}\special{pa -430 404}%
+\special{pa -376 455}\special{pa -316 499}\special{pa -251 534}\special{pa -182 562}%
+\special{pa -111 580}\special{pa -37 589}\special{pa 37 589}\special{pa 111 580}%
+\special{pa 182 562}\special{pa 251 534}\special{pa 316 499}\special{pa 376 455}%
+\special{pa 430 404}\special{pa 478 347}\special{pa 518 285}\special{pa 549 217}%
+\special{pa 572 147}\special{pa 586 74}\special{pa 591 0}%
+\special{fp}%
+\special{pa -697 -0}\special{pa 681 -0}%
+\special{fp}%
+\special{pa -685 -685}\special{pa 634 634}%
+\special{fp}%
+\special{pa 523 -0}\special{pa 587 -63}%
+\special{fp}%
+\special{pa 384 -0}\special{pa 562 -178}%
+\special{fp}%
+\special{pa 245 -0}\special{pa 521 -276}%
+\special{fp}%
+\special{pa 106 -0}\special{pa 466 -361}%
+\special{fp}%
+\special{pa -17 -17}\special{pa 400 -433}%
+\special{fp}%
+\special{pa -86 -86}\special{pa 322 -495}%
+\special{fp}%
+\special{pa -156 -156}\special{pa 231 -543}%
+\special{fp}%
+\special{pa -226 -226}\special{pa 125 -576}%
+\special{fp}%
+\special{pa -295 -295}\special{pa -1 -589}%
+\special{fp}%
+\special{pa -365 -365}\special{pa -163 -567}%
+\special{fp}%
+\special{pa 386 446}\special{pa 386 386}%
+\special{fp}%
+\special{pa 337 484}\special{pa 337 337}%
+\special{fp}%
+\special{pa 287 515}\special{pa 287 287}%
+\special{fp}%
+\special{pa 238 540}\special{pa 238 238}%
+\special{fp}%
+\special{pa 189 559}\special{pa 189 189}%
+\special{fp}%
+\special{pa 140 573}\special{pa 140 140}%
+\special{fp}%
+\special{pa 91 583}\special{pa 91 91}%
+\special{fp}%
+\special{pa 41 589}\special{pa 41 41}%
+\special{fp}%
+\special{pa -8 589}\special{pa -8 -0}%
+\special{fp}%
+\special{pa -57 587}\special{pa -57 -0}%
+\special{fp}%
+\special{pa -106 581}\special{pa -106 -0}%
+\special{fp}%
+\special{pa -156 569}\special{pa -156 -0}%
+\special{fp}%
+\special{pa -205 553}\special{pa -205 -0}%
+\special{fp}%
+\special{pa -254 533}\special{pa -254 -0}%
+\special{fp}%
+\special{pa -303 506}\special{pa -303 -0}%
+\special{fp}%
+\special{pa -352 473}\special{pa -352 -0}%
+\special{fp}%
+\special{pa -402 431}\special{pa -402 -0}%
+\special{fp}%
+\special{pa -451 380}\special{pa -451 -0}%
+\special{fp}%
+\special{pa -500 312}\special{pa -500 -0}%
+\special{fp}%
+\special{pa -549 217}\special{pa -549 -0}%
+\special{fp}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/HatchZuKitaE.cdy b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/HatchZuKitaE.cdy
new file mode 100644
index 0000000000..328c4eb830
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/HatchZuKitaE.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/Intersectcurvsf.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/Intersectcurvsf.pdf
new file mode 100644
index 0000000000..875cfc7224
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/Intersectcurvsf.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/IntersectsgpL0.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/IntersectsgpL0.pdf
new file mode 100644
index 0000000000..d68c2c65e4
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/IntersectsgpL0.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/IntersectsgpL1.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/IntersectsgpL1.tex
new file mode 100644
index 0000000000..dc1340de48
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/IntersectsgpL1.tex
@@ -0,0 +1,68 @@
+%%% /Users/Hannya/ketcindy/ketwork/template.tex 2016-8-9 13:39
+%%% template.sce 2016-8-9 13:39
+{\unitlength=8mm%
+\begin{picture}%
+( 7.00000, 6.00000)( -3.00000, -2.00000)%
+\special{pn 8}%
+%
+\special{pn 8}%
+\special{pa 4 -2}\special{pa -4 2}\special{fp}\special{pa -32 14}\special{pa -39 17}\special{fp}%
+\special{pa -68 29}\special{pa -75 32}\special{fp}\special{pa -103 44}\special{pa -111 47}\special{fp}%
+\special{pa -139 59}\special{pa -147 62}\special{fp}\special{pa -175 74}\special{pa -182 77}\special{fp}%
+\special{pa -211 89}\special{pa -218 92}\special{fp}\special{pa -246 104}\special{pa -254 107}\special{fp}%
+\special{pa -282 119}\special{pa -290 122}\special{fp}\special{pa -318 134}\special{pa -325 137}\special{fp}%
+\special{pa -354 149}\special{pa -361 153}\special{fp}\special{pa -389 164}\special{pa -397 168}\special{fp}%
+\special{pa -425 180}\special{pa -432 183}\special{fp}\special{pa -461 195}\special{pa -468 198}\special{fp}%
+\special{pa -496 210}\special{pa -504 213}\special{fp}\special{pa -532 225}\special{pa -540 228}\special{fp}%
+\special{pa -568 240}\special{pa -575 243}\special{fp}\special{pa -604 255}\special{pa -611 258}\special{fp}%
+\special{pn 8}%
+\special{pa -607 257}\special{pa 116 472}%
+\special{fp}%
+\special{pa 116 472}\special{pa 724 215}%
+\special{fp}%
+\special{pn 8}%
+\special{pa -4 -1}\special{pa 4 1}\special{fp}\special{pa 34 10}\special{pa 42 12}\special{fp}%
+\special{pa 72 22}\special{pa 80 24}\special{fp}\special{pa 110 33}\special{pa 118 35}\special{fp}%
+\special{pa 149 44}\special{pa 156 46}\special{fp}\special{pa 187 56}\special{pa 194 58}\special{fp}%
+\special{pa 225 67}\special{pa 232 69}\special{fp}\special{pa 263 78}\special{pa 271 80}\special{fp}%
+\special{pa 301 90}\special{pa 309 92}\special{fp}\special{pa 339 101}\special{pa 347 103}\special{fp}%
+\special{pa 377 112}\special{pa 385 114}\special{fp}\special{pa 415 124}\special{pa 423 126}\special{fp}%
+\special{pa 453 135}\special{pa 461 137}\special{fp}\special{pa 491 146}\special{pa 499 148}\special{fp}%
+\special{pa 530 158}\special{pa 537 160}\special{fp}\special{pa 568 169}\special{pa 575 171}\special{fp}%
+\special{pa 606 180}\special{pa 613 182}\special{fp}\special{pa 644 192}\special{pa 651 194}\special{fp}%
+\special{pa 682 203}\special{pa 690 205}\special{fp}\special{pa 720 214}\special{pa 728 216}\special{fp}%
+\special{pn 8}%
+\special{pa 116 472}\special{pa 116 160}%
+\special{fp}%
+\special{pa 116 160}\special{pa -607 -315}%
+\special{fp}%
+\special{pa -607 257}\special{pa -607 -315}%
+\special{fp}%
+\special{pa 724 215}\special{pa 724 -539}%
+\special{fp}%
+\special{pa 116 160}\special{pa 724 -539}%
+\special{fp}%
+\special{pa 724 -539}\special{pa 367 -774}%
+\special{fp}%
+\special{pa 367 -774}\special{pa 0 -883}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 0 4}\special{pa 0 -4}\special{fp}\special{pa 0 -36}\special{pa 0 -44}\special{fp}%
+\special{pa 0 -76}\special{pa 0 -84}\special{fp}\special{pa 0 -116}\special{pa 0 -124}\special{fp}%
+\special{pa 0 -157}\special{pa 0 -165}\special{fp}\special{pa 0 -197}\special{pa 0 -205}\special{fp}%
+\special{pa 0 -237}\special{pa 0 -245}\special{fp}\special{pa 0 -277}\special{pa 0 -285}\special{fp}%
+\special{pa 0 -317}\special{pa 0 -325}\special{fp}\special{pa 0 -357}\special{pa 0 -365}\special{fp}%
+\special{pa 0 -398}\special{pa 0 -406}\special{fp}\special{pa 0 -438}\special{pa 0 -446}\special{fp}%
+\special{pa 0 -478}\special{pa 0 -486}\special{fp}\special{pa 0 -518}\special{pa 0 -526}\special{fp}%
+\special{pa 0 -558}\special{pa 0 -566}\special{fp}\special{pa 0 -598}\special{pa 0 -606}\special{fp}%
+\special{pa 0 -639}\special{pa 0 -647}\special{fp}\special{pa 0 -679}\special{pa 0 -687}\special{fp}%
+\special{pa 0 -719}\special{pa 0 -727}\special{fp}\special{pa 0 -759}\special{pa 0 -767}\special{fp}%
+\special{pa 0 -799}\special{pa 0 -807}\special{fp}\special{pa 0 -839}\special{pa 0 -847}\special{fp}%
+\special{pa 0 -879}\special{pa 0 -887}\special{fp}\special{pn 8}%
+\special{pa 0 -883}\special{pa -180 -807}%
+\special{fp}%
+\special{pa -607 -315}\special{pa -180 -807}%
+\special{fp}%
+\special{pa 367 -774}\special{pa -180 -807}%
+\special{fp}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/IntersectsgpL2.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/IntersectsgpL2.tex
new file mode 100644
index 0000000000..51a3442a89
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/IntersectsgpL2.tex
@@ -0,0 +1,118 @@
+%%% /Users/Hannya/ketcindy/ketwork/template.tex 2016-8-9 13:37
+%%% template.sce 2016-8-9 13:37
+{\unitlength=8mm%
+\begin{picture}%
+( 7.00000, 6.00000)( -3.00000, -2.00000)%
+\special{pn 8}%
+%
+\special{pn 8}%
+\special{pa 4 -2}\special{pa -4 2}\special{fp}\special{pa -32 14}\special{pa -39 17}\special{fp}%
+\special{pa -68 29}\special{pa -75 32}\special{fp}\special{pa -103 44}\special{pa -111 47}\special{fp}%
+\special{pa -139 59}\special{pa -147 62}\special{fp}\special{pa -175 74}\special{pa -182 77}\special{fp}%
+\special{pa -211 89}\special{pa -218 92}\special{fp}\special{pa -246 104}\special{pa -254 107}\special{fp}%
+\special{pa -282 119}\special{pa -290 122}\special{fp}\special{pa -318 134}\special{pa -325 137}\special{fp}%
+\special{pa -354 149}\special{pa -361 153}\special{fp}\special{pa -389 164}\special{pa -397 168}\special{fp}%
+\special{pa -425 180}\special{pa -432 183}\special{fp}\special{pa -461 195}\special{pa -468 198}\special{fp}%
+\special{pa -496 210}\special{pa -504 213}\special{fp}\special{pa -532 225}\special{pa -540 228}\special{fp}%
+\special{pa -568 240}\special{pa -575 243}\special{fp}\special{pa -604 255}\special{pa -611 258}\special{fp}%
+\special{pn 8}%
+\special{pa -607 257}\special{pa 116 472}%
+\special{fp}%
+\special{pa 116 472}\special{pa 724 215}%
+\special{fp}%
+\special{pn 8}%
+\special{pa -4 -1}\special{pa 4 1}\special{fp}\special{pa 34 10}\special{pa 42 12}\special{fp}%
+\special{pa 72 22}\special{pa 80 24}\special{fp}\special{pa 110 33}\special{pa 118 35}\special{fp}%
+\special{pa 149 44}\special{pa 156 46}\special{fp}\special{pa 187 56}\special{pa 194 58}\special{fp}%
+\special{pa 225 67}\special{pa 232 69}\special{fp}\special{pa 263 78}\special{pa 271 80}\special{fp}%
+\special{pa 301 90}\special{pa 309 92}\special{fp}\special{pa 339 101}\special{pa 347 103}\special{fp}%
+\special{pa 377 112}\special{pa 385 114}\special{fp}\special{pa 415 124}\special{pa 423 126}\special{fp}%
+\special{pa 453 135}\special{pa 461 137}\special{fp}\special{pa 491 146}\special{pa 499 148}\special{fp}%
+\special{pa 530 158}\special{pa 537 160}\special{fp}\special{pa 568 169}\special{pa 575 171}\special{fp}%
+\special{pa 606 180}\special{pa 613 182}\special{fp}\special{pa 644 192}\special{pa 651 194}\special{fp}%
+\special{pa 682 203}\special{pa 690 205}\special{fp}\special{pa 720 214}\special{pa 728 216}\special{fp}%
+\special{pn 8}%
+\special{pa 116 472}\special{pa 116 160}%
+\special{fp}%
+\special{pa 116 160}\special{pa -607 -315}%
+\special{fp}%
+\special{pa -607 257}\special{pa -607 -315}%
+\special{fp}%
+\special{pa 724 215}\special{pa 724 -539}%
+\special{fp}%
+\special{pa 116 160}\special{pa 724 -539}%
+\special{fp}%
+\special{pa 724 -539}\special{pa 367 -774}%
+\special{fp}%
+\special{pa 367 -774}\special{pa 0 -883}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 0 4}\special{pa 0 -4}\special{fp}\special{pa 0 -36}\special{pa 0 -44}\special{fp}%
+\special{pa 0 -76}\special{pa 0 -84}\special{fp}\special{pa 0 -116}\special{pa 0 -124}\special{fp}%
+\special{pa 0 -157}\special{pa 0 -165}\special{fp}\special{pa 0 -197}\special{pa 0 -205}\special{fp}%
+\special{pa 0 -237}\special{pa 0 -245}\special{fp}\special{pa 0 -277}\special{pa 0 -285}\special{fp}%
+\special{pa 0 -317}\special{pa 0 -325}\special{fp}\special{pa 0 -357}\special{pa 0 -365}\special{fp}%
+\special{pa 0 -398}\special{pa 0 -406}\special{fp}\special{pa 0 -438}\special{pa 0 -446}\special{fp}%
+\special{pa 0 -478}\special{pa 0 -486}\special{fp}\special{pa 0 -518}\special{pa 0 -526}\special{fp}%
+\special{pa 0 -558}\special{pa 0 -566}\special{fp}\special{pa 0 -598}\special{pa 0 -606}\special{fp}%
+\special{pa 0 -639}\special{pa 0 -647}\special{fp}\special{pa 0 -679}\special{pa 0 -687}\special{fp}%
+\special{pa 0 -719}\special{pa 0 -727}\special{fp}\special{pa 0 -759}\special{pa 0 -767}\special{fp}%
+\special{pa 0 -799}\special{pa 0 -807}\special{fp}\special{pa 0 -839}\special{pa 0 -847}\special{fp}%
+\special{pa 0 -879}\special{pa 0 -887}\special{fp}\special{pn 8}%
+\special{pa 0 -883}\special{pa -180 -807}%
+\special{fp}%
+\special{pa -607 -315}\special{pa -180 -807}%
+\special{fp}%
+\special{pa 367 -774}\special{pa -180 -807}%
+\special{fp}%
+\special{pn 8}%
+\special{pa -607 -311}\special{pa -607 -319}\special{fp}\special{pa -607 -349}\special{pa -607 -357}\special{fp}%
+\special{pa -607 -388}\special{pa -607 -396}\special{fp}\special{pa -607 -427}\special{pa -607 -435}\special{fp}%
+\special{pa -607 -466}\special{pa -607 -474}\special{fp}\special{pa -607 -505}\special{pa -607 -513}\special{fp}%
+\special{pa -607 -543}\special{pa -607 -551}\special{fp}\special{pa -607 -582}\special{pa -607 -590}\special{fp}%
+\special{pa -609 -622}\special{pa -605 -628}\special{fp}\special{pa -577 -640}\special{pa -570 -643}\special{fp}%
+\special{pa -541 -655}\special{pa -534 -658}\special{fp}\special{pa -505 -670}\special{pa -498 -673}\special{fp}%
+\special{pa -470 -685}\special{pa -462 -688}\special{fp}\special{pa -434 -700}\special{pa -427 -703}\special{fp}%
+\special{pa -398 -715}\special{pa -391 -718}\special{fp}\special{pa -363 -730}\special{pa -355 -733}\special{fp}%
+\special{pa -327 -745}\special{pa -319 -749}\special{fp}\special{pa -291 -761}\special{pa -284 -764}\special{fp}%
+\special{pa -255 -776}\special{pa -248 -779}\special{fp}\special{pa -220 -791}\special{pa -212 -794}\special{fp}%
+\special{pa -184 -806}\special{pa -176 -809}\special{fp}\special{pn 8}%
+\special{pn 8}%
+\special{pa -611 -628}\special{pa -604 -626}\special{fp}\special{pa -574 -617}\special{pa -566 -615}\special{fp}%
+\special{pa -536 -606}\special{pa -529 -603}\special{fp}\special{pa -499 -595}\special{pa -491 -592}\special{fp}%
+\special{pa -462 -584}\special{pa -454 -581}\special{fp}\special{pa -424 -572}\special{pa -417 -570}\special{fp}%
+\special{pa -387 -561}\special{pa -379 -559}\special{fp}\special{pa -349 -550}\special{pa -342 -548}\special{fp}%
+\special{pa -312 -539}\special{pa -304 -537}\special{fp}\special{pa -275 -528}\special{pa -267 -526}\special{fp}%
+\special{pa -237 -517}\special{pa -230 -514}\special{fp}\special{pa -200 -506}\special{pa -192 -503}\special{fp}%
+\special{pa -162 -495}\special{pa -155 -492}\special{fp}\special{pa -125 -483}\special{pa -117 -481}\special{fp}%
+\special{pa -88 -472}\special{pa -80 -470}\special{fp}\special{pa -50 -461}\special{pa -43 -459}\special{fp}%
+\special{pa -13 -450}\special{pa -5 -448}\special{fp}\special{pa 25 -439}\special{pa 32 -437}\special{fp}%
+\special{pa 62 -428}\special{pa 70 -425}\special{fp}\special{pa 100 -418}\special{pa 106 -413}\special{fp}%
+\special{pa 116 -390}\special{pa 117 -382}\special{fp}\special{pa 116 -351}\special{pa 116 -343}\special{fp}%
+\special{pa 116 -312}\special{pa 116 -304}\special{fp}\special{pa 116 -273}\special{pa 116 -265}\special{fp}%
+\special{pa 116 -234}\special{pa 116 -226}\special{fp}\special{pa 116 -195}\special{pa 116 -187}\special{fp}%
+\special{pa 116 -156}\special{pa 116 -148}\special{fp}\special{pa 116 -117}\special{pa 116 -109}\special{fp}%
+\special{pa 116 -78}\special{pa 116 -70}\special{fp}\special{pa 116 -39}\special{pa 116 -31}\special{fp}%
+\special{pa 116 0}\special{pa 116 8}\special{fp}\special{pa 116 39}\special{pa 116 47}\special{fp}%
+\special{pa 116 78}\special{pa 116 86}\special{fp}\special{pa 116 117}\special{pa 116 125}\special{fp}%
+\special{pa 116 156}\special{pa 116 164}\special{fp}\special{pn 8}%
+\special{pn 8}%
+\special{pa 113 -410}\special{pa 120 -413}\special{fp}\special{pa 149 -425}\special{pa 156 -428}\special{fp}%
+\special{pa 185 -441}\special{pa 193 -444}\special{fp}\special{pa 222 -456}\special{pa 229 -459}\special{fp}%
+\special{pa 258 -471}\special{pa 265 -474}\special{fp}\special{pa 294 -487}\special{pa 302 -490}\special{fp}%
+\special{pa 331 -502}\special{pa 338 -505}\special{fp}\special{pa 367 -517}\special{pa 374 -521}\special{fp}%
+\special{pa 403 -533}\special{pa 411 -536}\special{fp}\special{pa 440 -548}\special{pa 447 -551}\special{fp}%
+\special{pa 476 -564}\special{pa 484 -567}\special{fp}\special{pa 512 -579}\special{pa 520 -582}\special{fp}%
+\special{pa 549 -594}\special{pa 556 -597}\special{fp}\special{pa 585 -610}\special{pa 593 -613}\special{fp}%
+\special{pa 621 -625}\special{pa 629 -628}\special{fp}\special{pa 658 -640}\special{pa 665 -643}\special{fp}%
+\special{pa 694 -656}\special{pa 702 -658}\special{fp}\special{pa 721 -660}\special{pa 727 -654}\special{fp}%
+\special{pa 724 -621}\special{pa 724 -613}\special{fp}\special{pa 724 -582}\special{pa 724 -574}\special{fp}%
+\special{pa 724 -543}\special{pa 724 -535}\special{fp}\special{pn 8}%
+\special{pn 8}%
+\special{pa 728 -667}\special{pa 720 -669}\special{fp}\special{pa 688 -679}\special{pa 680 -681}\special{fp}%
+\special{pa 648 -691}\special{pa 641 -693}\special{fp}\special{pa 609 -702}\special{pa 601 -705}\special{fp}%
+\special{pa 569 -714}\special{pa 561 -717}\special{fp}\special{pa 529 -726}\special{pa 522 -728}\special{fp}%
+\special{pa 490 -738}\special{pa 482 -740}\special{fp}\special{pa 450 -750}\special{pa 442 -752}\special{fp}%
+\special{pa 410 -761}\special{pa 403 -764}\special{fp}\special{pa 371 -773}\special{pa 363 -776}\special{fp}%
+\special{pn 8}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/Nearestpt.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/Nearestpt.tex
new file mode 100644
index 0000000000..7a0b71212d
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/Nearestpt.tex
@@ -0,0 +1,71 @@
+%%% /Users/Hannya/Desktop/KeTCindy/fig/nearestpt.tex
+%%% Generator=template1basic.cdy
+{\unitlength=8mm%
+\begin{picture}%
+(6,5)(-2,-1)%
+\special{pn 8}%
+%
+\special{pa -445 -1260}\special{pa -428 -1212}\special{pa -403 -1146}\special{pa -378 -1083}%
+\special{pa -353 -1025}\special{pa -328 -971}\special{pa -302 -920}\special{pa -277 -874}%
+\special{pa -252 -831}\special{pa -227 -793}\special{pa -202 -759}\special{pa -176 -729}%
+\special{pa -151 -702}\special{pa -126 -680}\special{pa -101 -662}\special{pa -76 -648}%
+\special{pa -50 -638}\special{pa -25 -632}\special{pa 0 -630}\special{pa 25 -632}%
+\special{pa 50 -638}\special{pa 76 -648}\special{pa 101 -662}\special{pa 126 -680}%
+\special{pa 151 -702}\special{pa 176 -729}\special{pa 202 -759}\special{pa 227 -793}%
+\special{pa 252 -831}\special{pa 277 -874}\special{pa 302 -920}\special{pa 328 -971}%
+\special{pa 353 -1025}\special{pa 378 -1083}\special{pa 403 -1146}\special{pa 428 -1212}%
+\special{pa 445 -1260}%
+\special{fp}%
+\special{pa 185 315}\special{pa 202 268}\special{pa 227 201}\special{pa 252 139}%
+\special{pa 277 80}\special{pa 302 26}\special{pa 328 -25}\special{pa 353 -71}%
+\special{pa 378 -113}\special{pa 403 -152}\special{pa 428 -186}\special{pa 454 -216}%
+\special{pa 479 -242}\special{pa 504 -265}\special{pa 529 -283}\special{pa 554 -297}%
+\special{pa 580 -307}\special{pa 605 -313}\special{pa 630 -315}\special{pa 655 -313}%
+\special{pa 680 -307}\special{pa 706 -297}\special{pa 731 -283}\special{pa 756 -265}%
+\special{pa 781 -242}\special{pa 806 -216}\special{pa 831 -186}\special{pa 857 -152}%
+\special{pa 882 -113}\special{pa 907 -71}\special{pa 932 -25}\special{pa 957 26}%
+\special{pa 983 80}\special{pa 1008 139}\special{pa 1033 201}\special{pa 1058 268}%
+\special{pa 1075 315}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 123 -683}\special{pa 129 -677}\special{fp}\special{pa 150 -653}\special{pa 155 -647}\special{fp}%
+\special{pa 176 -623}\special{pa 182 -617}\special{fp}\special{pa 203 -593}\special{pa 208 -587}\special{fp}%
+\special{pa 229 -563}\special{pa 235 -557}\special{fp}\special{pa 256 -533}\special{pa 261 -527}\special{fp}%
+\special{pa 282 -503}\special{pa 288 -497}\special{fp}\special{pa 309 -472}\special{pa 314 -466}\special{fp}%
+\special{pa 335 -442}\special{pa 341 -436}\special{fp}\special{pa 362 -412}\special{pa 367 -406}\special{fp}%
+\special{pa 388 -382}\special{pa 394 -376}\special{fp}\special{pa 415 -352}\special{pa 420 -346}\special{fp}%
+\special{pa 441 -322}\special{pa 447 -316}\special{fp}\special{pa 468 -292}\special{pa 473 -286}\special{fp}%
+\special{pa 494 -262}\special{pa 500 -256}\special{fp}\special{pn 8}%
+\special{pn 2}%
+\special{pa 137 -691}\special{pa 126 -696}\special{pa 115 -691}\special{pa 110 -680}\special{pa 115 -669}\special{pa 126 -665}\special{pa 137 -669}\special{pa 142 -680}\special{pa 137 -691}\special{sh 1}\special{fp}%
+\special{pa 508 -270}\special{pa 497 -274}\special{pa 486 -270}\special{pa 481 -259}\special{pa 486 -247}\special{pa 497 -243}\special{pa 508 -247}\special{pa 513 -259}\special{pa 508 -270}\special{sh 1}\special{fp}%
+\special{pn 8}%
+\settowidth{\Width}{A}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{A}\settodepth{\Depth}{A}\setlength{\Height}{\Depth}%
+\put(0.3375000,2.3475000){\hspace*{\Width}\raisebox{\Height}{A}}%
+%
+\settowidth{\Width}{B}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{B}\settodepth{\Depth}{B}\setlength{\Height}{-\Height}%
+\put(1.6425000,0.6325000){\hspace*{\Width}\raisebox{\Height}{B}}%
+%
+\settowidth{\Width}{1.78}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{1.78}\settodepth{\Depth}{1.78}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(1.0525000,1.4900000){\hspace*{\Width}\raisebox{\Height}{1.78}}%
+%
+\special{pa -630 -0}\special{pa 1260 -0}%
+\special{fp}%
+\special{pa 0 315}\special{pa 0 -1260}%
+\special{fp}%
+\settowidth{\Width}{$x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.0625000,0.0000000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{\Depth}%
+\put(0.0000000,4.0625000){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+\settowidth{\Width}{O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(-0.0625000,-0.0625000){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/Nearestpt1.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/Nearestpt1.tex
new file mode 100644
index 0000000000..80f46a640c
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/Nearestpt1.tex
@@ -0,0 +1,57 @@
+%%% /Users/Hannya/Desktop/KeTCindy/fig/Nearestpt1.tex
+%%% Generator=template1basic.cdy
+{\unitlength=8mm%
+\begin{picture}%
+(6,5)(-2,-1)%
+\special{pn 8}%
+%
+\special{pa -630 -1260}\special{pa -592 -1113}\special{pa -554 -976}\special{pa -517 -847}%
+\special{pa -479 -728}\special{pa -441 -617}\special{pa -403 -516}\special{pa -365 -424}%
+\special{pa -328 -341}\special{pa -290 -267}\special{pa -252 -202}\special{pa -214 -146}%
+\special{pa -176 -99}\special{pa -139 -61}\special{pa -101 -32}\special{pa -63 -13}%
+\special{pa -25 -2}\special{pa 13 -1}\special{pa 50 -8}\special{pa 88 -25}%
+\special{pa 126 -50}\special{pa 164 -85}\special{pa 202 -129}\special{pa 239 -182}%
+\special{pa 277 -244}\special{pa 315 -315}\special{pa 353 -395}\special{pa 391 -484}%
+\special{pa 428 -583}\special{pa 466 -690}\special{pa 504 -806}\special{pa 542 -932}%
+\special{pa 580 -1066}\special{pa 617 -1210}\special{pa 630 -1260}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 948 2}\special{pa 941 -2}\special{fp}\special{pa 913 -16}\special{pa 906 -19}\special{fp}%
+\special{pa 878 -33}\special{pa 871 -37}\special{fp}\special{pa 843 -51}\special{pa 836 -54}\special{fp}%
+\special{pa 808 -68}\special{pa 801 -72}\special{fp}\special{pa 773 -86}\special{pa 766 -89}\special{fp}%
+\special{pa 738 -103}\special{pa 731 -107}\special{fp}\special{pa 703 -121}\special{pa 696 -124}\special{fp}%
+\special{pa 668 -138}\special{pa 661 -142}\special{fp}\special{pa 633 -156}\special{pa 626 -159}\special{fp}%
+\special{pa 599 -173}\special{pa 591 -177}\special{fp}\special{pa 564 -191}\special{pa 556 -194}\special{fp}%
+\special{pa 529 -208}\special{pa 521 -212}\special{fp}\special{pa 494 -226}\special{pa 486 -229}\special{fp}%
+\special{pa 459 -243}\special{pa 451 -247}\special{fp}\special{pa 424 -261}\special{pa 416 -264}\special{fp}%
+\special{pa 389 -278}\special{pa 381 -282}\special{fp}\special{pa 354 -296}\special{pa 346 -299}\special{fp}%
+\special{pa 319 -313}\special{pa 311 -317}\special{fp}\special{pn 8}%
+\special{pn 1}%
+\special{pa 956 -11}\special{pa 945 -16}\special{pa 934 -11}\special{pa 929 0}\special{pa 934 11}\special{pa 945 16}\special{pa 956 11}\special{pa 961 0}\special{pa 956 -11}\special{sh 1}\special{fp}%
+\special{pa 326 -326}\special{pa 315 -331}\special{pa 304 -326}\special{pa 299 -315}\special{pa 304 -304}\special{pa 315 -299}\special{pa 326 -304}\special{pa 331 -315}\special{pa 326 -326}\special{sh 1}\special{fp}%
+\special{pn 8}%
+\settowidth{\Width}{A}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{A}\settodepth{\Depth}{A}\setlength{\Height}{\Depth}%
+\put(3.0625000,0.0625000){\hspace*{\Width}\raisebox{\Height}{A}}%
+%
+\settowidth{\Width}{B}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{B}\settodepth{\Depth}{B}\setlength{\Height}{\Depth}%
+\put(0.9375000,1.0625000){\hspace*{\Width}\raisebox{\Height}{B}}%
+%
+\special{pa -630 -0}\special{pa 1260 -0}%
+\special{fp}%
+\special{pa 0 315}\special{pa 0 -1260}%
+\special{fp}%
+\settowidth{\Width}{$x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.0625000,0.0000000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{\Depth}%
+\put(0.0000000,4.0625000){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+\settowidth{\Width}{O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(-0.0625000,-0.0625000){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/PutcellE.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/PutcellE.tex
new file mode 100644
index 0000000000..3796caae89
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/PutcellE.tex
@@ -0,0 +1,75 @@
+%%% /Users/takatoosetsuo/Dropbox/kettoday/0721forManual/fig/PutcellE.tex
+%%% Generator=changetable.cdy
+{\unitlength=1cm%
+\begin{picture}%
+(10,4)(0,0)%
+\special{pn 8}%
+%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -1575}\special{pa 0 -0}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 1575 -1575}\special{pa 1575 -0}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 2362 -1575}\special{pa 2362 -0}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 3937 -1575}\special{pa 3937 -0}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -1575}\special{pa 3937 -1575}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -787}\special{pa 3937 -787}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -0}\special{pa 3937 -0}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 787 -1575}\special{pa 787 -787}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 3150 -1575}\special{pa 3150 -787}%
+\special{fp}%
+}%
+\settowidth{\Width}{A}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{A}\settodepth{\Depth}{A}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(1.0000000,3.0000000){\hspace*{\Width}\raisebox{\Height}{A}}%
+%
+\settowidth{\Width}{B}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{B}\settodepth{\Depth}{B}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.1500000,3.0000000){\hspace*{\Width}\raisebox{\Height}{B}}%
+%
+\settowidth{\Width}{C}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{C}\settodepth{\Depth}{C}\setlength{\Height}{-\Height}%
+\put(3.9500000,1.9500000){\hspace*{\Width}\raisebox{\Height}{C}}%
+%
+\settowidth{\Width}{D}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{D}\settodepth{\Depth}{D}\setlength{\Height}{\Depth}%
+\put(6.0500000,0.0500000){\hspace*{\Width}\raisebox{\Height}{D}}%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/addax1.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/addax1.tex
new file mode 100644
index 0000000000..66325812b3
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/addax1.tex
@@ -0,0 +1,44 @@
+%%% test.tex 2014-10-16 21:49
+%%% test.sce 2014-10-16 21:49
+{\unitlength=1cm%
+\begin{picture}%
+( 4.00000, 3.50000)( -1.00000, -1.00000)%
+\special{pn 8}%
+%
+\settowidth{\Width}{A}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{A}\settodepth{\Depth}{A}\setlength{\Height}{\Depth}%
+\put(1.0300,1.7900){\hspace*{\Width}\raisebox{\Height}{A}}%
+%
+%
+\settowidth{\Width}{B}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{B}\settodepth{\Depth}{B}\setlength{\Height}{-\Height}%
+\put(0.0500,-0.0500){\hspace*{\Width}\raisebox{\Height}{B}}%
+%
+%
+\settowidth{\Width}{C}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{C}\settodepth{\Depth}{C}\setlength{\Height}{-\Height}%
+\put(2.0500,-0.0500){\hspace*{\Width}\raisebox{\Height}{C}}%
+%
+%
+\special{pa 0 0}\special{pa 386 -685}\special{pa 787 0}%
+\special{fp}%
+\special{pa -394 0}\special{pa 1181 0}%
+\special{fp}%
+\special{pa 0 394}\special{pa 0 -984}%
+\special{fp}%
+\settowidth{\Width}{$x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(3.0500,0.0000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{\Depth}%
+\put(0.0000,2.5500){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+%
+\settowidth{\Width}{O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(-0.0500,-0.0500){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/addgraph.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/addgraph.tex
new file mode 100644
index 0000000000..335f0bf49a
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/addgraph.tex
@@ -0,0 +1,651 @@
+%%% ex0409addgraph.tex 2016-4-11 15:14
+%%% ex0409addgraph.sce 2016-4-11 15:14
+{\unitlength=1cm%
+\begin{picture}%
+( 9.47000, 3.15000)( -1.51000, -0.56000)%
+\special{pn 8}%
+%
+\special{pa 394 -394}\special{pa 391 -443}\special{pa 381 -492}\special{pa 366 -539}%
+\special{pa 345 -583}\special{pa 319 -625}\special{pa 287 -663}\special{pa 251 -697}%
+\special{pa 211 -726}\special{pa 168 -750}\special{pa 122 -768}\special{pa 74 -780}%
+\special{pa 25 -787}\special{pa -25 -787}\special{pa -74 -780}\special{pa -122 -768}%
+\special{pa -168 -750}\special{pa -211 -726}\special{pa -251 -697}\special{pa -287 -663}%
+\special{pa -319 -625}\special{pa -345 -583}\special{pa -366 -539}\special{pa -381 -492}%
+\special{pa -391 -443}\special{pa -394 -394}\special{pa -391 -344}\special{pa -381 -296}%
+\special{pa -366 -249}\special{pa -345 -204}\special{pa -319 -162}\special{pa -287 -124}%
+\special{pa -251 -90}\special{pa -211 -61}\special{pa -168 -37}\special{pa -122 -19}%
+\special{pa -74 -7}\special{pa -25 -1}\special{pa 25 -1}\special{pa 74 -7}\special{pa 122 -19}%
+\special{pa 168 -37}\special{pa 211 -61}\special{pa 251 -90}\special{pa 287 -124}%
+\special{pa 319 -162}\special{pa 345 -204}\special{pa 366 -249}\special{pa 381 -296}%
+\special{pa 391 -344}\special{pa 394 -394}%
+\special{fp}%
+\special{pn 1}%
+\special{pa 8 -8}\special{pa 2 -12}\special{pa -5 -11}\special{pa -11 -5}\special{pa -12 2}%
+\special{pa -8 8}\special{pa -2 12}\special{pa 5 11}\special{pa 11 5}\special{pa 12 -2}%
+\special{pa 8 -8}\special{sh 1}\special{fp}%
+\special{pn 8}%
+\special{pn 2}%
+\special{pa 9 -16}\special{pa 2 -19}\special{pa -5 -18}\special{pa -10 -13}\special{pa -11 -6}%
+\special{pa -8 1}\special{pa -1 4}\special{pa 6 3}\special{pa 11 -2}\special{pa 12 -9}%
+\special{pa 9 -16}\special{sh 1}\special{fp}%
+\special{pa 463 -317}\special{pa 470 -366}\special{pa 470 -415}\special{pa 465 -464}%
+\special{pa 453 -512}\special{pa 435 -559}\special{pa 411 -602}\special{pa 383 -642}%
+\special{pa 349 -679}\special{pa 311 -710}\special{pa 270 -737}\special{pa 225 -759}%
+\special{pa 178 -774}\special{pa 130 -784}\special{pa 80 -787}\special{pa 31 -785}%
+\special{pa -18 -776}\special{pa -65 -761}\special{pa -110 -740}\special{pa -152 -714}%
+\special{pa -190 -683}\special{pa -224 -647}\special{pa -253 -607}\special{pa -278 -564}%
+\special{pa -296 -518}\special{pa -309 -471}\special{pa -315 -422}\special{pa -316 -372}%
+\special{pa -310 -323}\special{pa -298 -275}\special{pa -280 -229}\special{pa -257 -185}%
+\special{pa -228 -145}\special{pa -194 -109}\special{pa -157 -77}\special{pa -115 -50}%
+\special{pa -70 -29}\special{pa -24 -13}\special{pa 25 -4}\special{pa 74 0}\special{pa 124 -3}%
+\special{pa 172 -12}\special{pa 219 -27}\special{pa 264 -47}\special{pa 306 -73}\special{pa 345 -105}%
+\special{pa 379 -140}\special{pa 408 -180}\special{pa 432 -223}\special{pa 451 -269}%
+\special{pa 463 -317}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 2}%
+\special{pa 12 -38}\special{pa 6 -42}\special{pa -1 -40}\special{pa -7 -35}\special{pa -8 -28}%
+\special{pa -4 -22}\special{pa 2 -18}\special{pa 9 -19}\special{pa 14 -25}\special{pa 16 -32}%
+\special{pa 12 -38}\special{sh 1}\special{fp}%
+\special{pa 518 -243}\special{pa 534 -290}\special{pa 544 -338}\special{pa 548 -388}%
+\special{pa 546 -437}\special{pa 537 -486}\special{pa 523 -533}\special{pa 503 -578}%
+\special{pa 477 -620}\special{pa 446 -659}\special{pa 410 -693}\special{pa 371 -723}%
+\special{pa 328 -747}\special{pa 282 -766}\special{pa 234 -779}\special{pa 185 -786}%
+\special{pa 136 -787}\special{pa 87 -782}\special{pa 39 -770}\special{pa -7 -753}%
+\special{pa -51 -729}\special{pa -92 -701}\special{pa -128 -668}\special{pa -160 -630}%
+\special{pa -187 -589}\special{pa -209 -544}\special{pa -225 -498}\special{pa -235 -449}%
+\special{pa -239 -400}\special{pa -237 -351}\special{pa -228 -302}\special{pa -214 -255}%
+\special{pa -193 -209}\special{pa -168 -167}\special{pa -137 -129}\special{pa -101 -94}%
+\special{pa -62 -65}\special{pa -19 -40}\special{pa 27 -21}\special{pa 75 -8}\special{pa 124 -1}%
+\special{pa 173 0}\special{pa 222 -6}\special{pa 270 -17}\special{pa 317 -35}\special{pa 360 -58}%
+\special{pa 401 -86}\special{pa 437 -120}\special{pa 469 -157}\special{pa 497 -199}%
+\special{pa 518 -243}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 2}%
+\special{pa 22 -75}\special{pa 15 -78}\special{pa 8 -77}\special{pa 3 -72}\special{pa 2 -65}%
+\special{pa 5 -58}\special{pa 11 -55}\special{pa 19 -56}\special{pa 24 -61}\special{pa 25 -68}%
+\special{pa 22 -75}\special{sh 1}\special{fp}%
+\special{pa 559 -175}\special{pa 584 -218}\special{pa 603 -263}\special{pa 617 -311}%
+\special{pa 624 -360}\special{pa 625 -409}\special{pa 620 -458}\special{pa 609 -507}%
+\special{pa 592 -553}\special{pa 569 -597}\special{pa 541 -637}\special{pa 508 -674}%
+\special{pa 471 -707}\special{pa 430 -734}\special{pa 385 -756}\special{pa 339 -773}%
+\special{pa 290 -783}\special{pa 241 -787}\special{pa 192 -785}\special{pa 143 -777}%
+\special{pa 96 -763}\special{pa 50 -743}\special{pa 8 -718}\special{pa -31 -687}\special{pa -65 -652}%
+\special{pa -95 -612}\special{pa -120 -570}\special{pa -140 -524}\special{pa -153 -477}%
+\special{pa -160 -428}\special{pa -161 -378}\special{pa -156 -329}\special{pa -145 -281}%
+\special{pa -128 -235}\special{pa -105 -191}\special{pa -77 -150}\special{pa -44 -113}%
+\special{pa -7 -81}\special{pa 34 -53}\special{pa 78 -31}\special{pa 125 -15}\special{pa 173 -4}%
+\special{pa 223 0}\special{pa 272 -2}\special{pa 321 -10}\special{pa 368 -24}\special{pa 413 -44}%
+\special{pa 456 -70}\special{pa 495 -100}\special{pa 529 -136}\special{pa 559 -175}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 2}%
+\special{pa 39 -124}\special{pa 33 -127}\special{pa 25 -126}\special{pa 20 -121}\special{pa 19 -113}%
+\special{pa 22 -107}\special{pa 29 -104}\special{pa 36 -105}\special{pa 41 -110}\special{pa 42 -117}%
+\special{pa 39 -124}\special{sh 1}\special{fp}%
+\special{pa 588 -115}\special{pa 620 -152}\special{pa 648 -193}\special{pa 671 -237}%
+\special{pa 687 -284}\special{pa 698 -332}\special{pa 703 -381}\special{pa 701 -431}%
+\special{pa 693 -480}\special{pa 680 -527}\special{pa 660 -572}\special{pa 635 -615}%
+\special{pa 605 -654}\special{pa 570 -689}\special{pa 531 -719}\special{pa 488 -744}%
+\special{pa 443 -764}\special{pa 395 -778}\special{pa 346 -786}\special{pa 297 -787}%
+\special{pa 248 -783}\special{pa 199 -772}\special{pa 153 -755}\special{pa 109 -733}%
+\special{pa 68 -705}\special{pa 31 -672}\special{pa -2 -635}\special{pa -30 -594}%
+\special{pa -52 -550}\special{pa -69 -504}\special{pa -80 -455}\special{pa -84 -406}%
+\special{pa -83 -357}\special{pa -75 -308}\special{pa -61 -260}\special{pa -42 -215}%
+\special{pa -16 -172}\special{pa 14 -133}\special{pa 49 -98}\special{pa 88 -68}\special{pa 130 -43}%
+\special{pa 176 -23}\special{pa 223 -9}\special{pa 272 -2}\special{pa 322 0}\special{pa 371 -5}%
+\special{pa 419 -16}\special{pa 466 -32}\special{pa 510 -55}\special{pa 551 -83}\special{pa 588 -115}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 2}%
+\special{pa 68 -183}\special{pa 61 -187}\special{pa 54 -185}\special{pa 49 -180}\special{pa 47 -173}%
+\special{pa 51 -167}\special{pa 57 -163}\special{pa 65 -164}\special{pa 70 -170}\special{pa 71 -177}%
+\special{pa 68 -183}\special{sh 1}\special{fp}%
+\special{pa 605 -66}\special{pa 645 -96}\special{pa 680 -131}\special{pa 710 -170}%
+\special{pa 736 -212}\special{pa 756 -257}\special{pa 770 -305}\special{pa 778 -354}%
+\special{pa 780 -403}\special{pa 776 -452}\special{pa 765 -501}\special{pa 749 -547}%
+\special{pa 727 -591}\special{pa 699 -633}\special{pa 667 -670}\special{pa 630 -703}%
+\special{pa 590 -731}\special{pa 546 -754}\special{pa 499 -771}\special{pa 451 -782}%
+\special{pa 402 -787}\special{pa 353 -786}\special{pa 304 -779}\special{pa 256 -765}%
+\special{pa 211 -746}\special{pa 168 -721}\special{pa 128 -691}\special{pa 93 -656}%
+\special{pa 63 -618}\special{pa 37 -575}\special{pa 17 -530}\special{pa 3 -483}\special{pa -5 -434}%
+\special{pa -7 -384}\special{pa -3 -335}\special{pa 8 -287}\special{pa 24 -240}\special{pa 46 -196}%
+\special{pa 74 -155}\special{pa 106 -118}\special{pa 143 -85}\special{pa 183 -56}%
+\special{pa 227 -34}\special{pa 274 -17}\special{pa 322 -5}\special{pa 371 0}\special{pa 420 -1}%
+\special{pa 469 -9}\special{pa 517 -22}\special{pa 562 -42}\special{pa 605 -66}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 2}%
+\special{pa 108 -251}\special{pa 102 -255}\special{pa 95 -254}\special{pa 90 -248}%
+\special{pa 88 -241}\special{pa 92 -235}\special{pa 98 -231}\special{pa 105 -233}%
+\special{pa 111 -238}\special{pa 112 -245}\special{pa 108 -251}\special{sh 1}\special{fp}%
+\special{pa 614 -30}\special{pa 659 -52}\special{pa 700 -79}\special{pa 738 -111}%
+\special{pa 771 -148}\special{pa 800 -188}\special{pa 823 -232}\special{pa 840 -278}%
+\special{pa 852 -326}\special{pa 857 -375}\special{pa 856 -425}\special{pa 849 -474}%
+\special{pa 836 -521}\special{pa 817 -567}\special{pa 793 -610}\special{pa 763 -649}%
+\special{pa 729 -685}\special{pa 690 -716}\special{pa 648 -742}\special{pa 603 -762}%
+\special{pa 556 -777}\special{pa 507 -785}\special{pa 458 -787}\special{pa 408 -783}%
+\special{pa 360 -773}\special{pa 313 -757}\special{pa 269 -736}\special{pa 227 -709}%
+\special{pa 190 -676}\special{pa 157 -640}\special{pa 128 -599}\special{pa 105 -556}%
+\special{pa 88 -509}\special{pa 76 -461}\special{pa 71 -412}\special{pa 71 -363}\special{pa 78 -314}%
+\special{pa 91 -266}\special{pa 110 -220}\special{pa 135 -178}\special{pa 164 -138}%
+\special{pa 199 -103}\special{pa 237 -72}\special{pa 280 -46}\special{pa 325 -25}%
+\special{pa 372 -11}\special{pa 421 -2}\special{pa 470 0}\special{pa 519 -4}\special{pa 568 -14}%
+\special{pa 614 -30}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 2}%
+\special{pa 163 -325}\special{pa 157 -329}\special{pa 150 -327}\special{pa 144 -322}%
+\special{pa 143 -315}\special{pa 147 -309}\special{pa 153 -305}\special{pa 160 -306}%
+\special{pa 166 -312}\special{pa 167 -319}\special{pa 163 -325}\special{sh 1}\special{fp}%
+\special{pa 618 -8}\special{pa 666 -20}\special{pa 712 -39}\special{pa 755 -63}\special{pa 794 -92}%
+\special{pa 830 -126}\special{pa 861 -165}\special{pa 888 -207}\special{pa 908 -252}%
+\special{pa 923 -299}\special{pa 932 -347}\special{pa 935 -397}\special{pa 931 -446}%
+\special{pa 922 -495}\special{pa 906 -542}\special{pa 885 -586}\special{pa 858 -628}%
+\special{pa 826 -665}\special{pa 790 -699}\special{pa 749 -728}\special{pa 706 -751}%
+\special{pa 660 -769}\special{pa 612 -781}\special{pa 563 -787}\special{pa 513 -786}%
+\special{pa 464 -780}\special{pa 417 -767}\special{pa 371 -749}\special{pa 328 -724}%
+\special{pa 288 -695}\special{pa 252 -661}\special{pa 221 -623}\special{pa 195 -581}%
+\special{pa 174 -536}\special{pa 159 -489}\special{pa 150 -440}\special{pa 147 -391}%
+\special{pa 151 -341}\special{pa 161 -293}\special{pa 176 -246}\special{pa 198 -201}%
+\special{pa 224 -160}\special{pa 256 -122}\special{pa 293 -88}\special{pa 333 -60}%
+\special{pa 376 -36}\special{pa 422 -18}\special{pa 470 -6}\special{pa 519 -1}\special{pa 569 -1}%
+\special{pa 618 -8}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 2}%
+\special{pa 233 -402}\special{pa 227 -405}\special{pa 219 -404}\special{pa 214 -399}%
+\special{pa 213 -392}\special{pa 216 -385}\special{pa 223 -382}\special{pa 230 -383}%
+\special{pa 235 -388}\special{pa 236 -396}\special{pa 233 -402}\special{sh 1}\special{fp}%
+\special{pa 618 0}\special{pa 668 -3}\special{pa 716 -12}\special{pa 763 -28}\special{pa 808 -49}%
+\special{pa 850 -75}\special{pa 888 -107}\special{pa 922 -143}\special{pa 951 -183}%
+\special{pa 975 -226}\special{pa 993 -272}\special{pa 1005 -320}\special{pa 1011 -369}%
+\special{pa 1011 -418}\special{pa 1005 -467}\special{pa 993 -515}\special{pa 975 -561}%
+\special{pa 951 -605}\special{pa 922 -645}\special{pa 888 -681}\special{pa 850 -712}%
+\special{pa 808 -739}\special{pa 763 -760}\special{pa 716 -775}\special{pa 668 -784}%
+\special{pa 618 -787}\special{pa 569 -784}\special{pa 521 -775}\special{pa 473 -760}%
+\special{pa 429 -739}\special{pa 387 -712}\special{pa 349 -681}\special{pa 315 -645}%
+\special{pa 286 -605}\special{pa 262 -561}\special{pa 244 -515}\special{pa 232 -467}%
+\special{pa 226 -418}\special{pa 225 -369}\special{pa 232 -320}\special{pa 244 -272}%
+\special{pa 262 -226}\special{pa 286 -183}\special{pa 315 -143}\special{pa 349 -107}%
+\special{pa 387 -75}\special{pa 429 -49}\special{pa 473 -28}\special{pa 521 -12}\special{pa 569 -3}%
+\special{pa 618 0}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 2}%
+\special{pa 318 -479}\special{pa 311 -482}\special{pa 304 -481}\special{pa 299 -476}%
+\special{pa 298 -469}\special{pa 301 -462}\special{pa 308 -459}\special{pa 315 -460}%
+\special{pa 320 -465}\special{pa 321 -472}\special{pa 318 -479}\special{sh 1}\special{fp}%
+\special{pa 619 -8}\special{pa 668 -1}\special{pa 717 -1}\special{pa 766 -6}\special{pa 814 -18}%
+\special{pa 861 -36}\special{pa 904 -60}\special{pa 944 -88}\special{pa 981 -122}%
+\special{pa 1012 -160}\special{pa 1039 -201}\special{pa 1061 -246}\special{pa 1076 -293}%
+\special{pa 1086 -341}\special{pa 1089 -391}\special{pa 1087 -440}\special{pa 1078 -489}%
+\special{pa 1063 -536}\special{pa 1042 -581}\special{pa 1016 -623}\special{pa 985 -661}%
+\special{pa 949 -695}\special{pa 909 -724}\special{pa 866 -749}\special{pa 820 -767}%
+\special{pa 773 -780}\special{pa 724 -786}\special{pa 674 -787}\special{pa 625 -781}%
+\special{pa 577 -769}\special{pa 531 -751}\special{pa 487 -728}\special{pa 447 -699}%
+\special{pa 411 -665}\special{pa 379 -628}\special{pa 352 -586}\special{pa 331 -542}%
+\special{pa 315 -495}\special{pa 306 -446}\special{pa 302 -397}\special{pa 305 -347}%
+\special{pa 314 -299}\special{pa 329 -252}\special{pa 349 -207}\special{pa 375 -165}%
+\special{pa 407 -126}\special{pa 442 -92}\special{pa 482 -63}\special{pa 525 -39}%
+\special{pa 571 -20}\special{pa 619 -8}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 2}%
+\special{pa 418 -553}\special{pa 411 -556}\special{pa 404 -555}\special{pa 399 -550}%
+\special{pa 398 -543}\special{pa 401 -536}\special{pa 407 -533}\special{pa 415 -534}%
+\special{pa 420 -539}\special{pa 421 -546}\special{pa 418 -553}\special{sh 1}\special{fp}%
+\special{pa 622 -30}\special{pa 669 -14}\special{pa 718 -4}\special{pa 767 0}\special{pa 816 -2}%
+\special{pa 865 -11}\special{pa 912 -25}\special{pa 957 -46}\special{pa 999 -72}\special{pa 1038 -103}%
+\special{pa 1072 -138}\special{pa 1102 -178}\special{pa 1127 -220}\special{pa 1146 -266}%
+\special{pa 1159 -314}\special{pa 1166 -363}\special{pa 1166 -412}\special{pa 1161 -461}%
+\special{pa 1149 -509}\special{pa 1132 -556}\special{pa 1109 -599}\special{pa 1080 -640}%
+\special{pa 1047 -676}\special{pa 1009 -709}\special{pa 968 -736}\special{pa 924 -757}%
+\special{pa 877 -773}\special{pa 829 -783}\special{pa 779 -787}\special{pa 730 -785}%
+\special{pa 681 -777}\special{pa 634 -762}\special{pa 589 -742}\special{pa 547 -716}%
+\special{pa 508 -685}\special{pa 474 -649}\special{pa 444 -610}\special{pa 419 -567}%
+\special{pa 401 -521}\special{pa 388 -474}\special{pa 381 -425}\special{pa 380 -375}%
+\special{pa 385 -326}\special{pa 397 -278}\special{pa 414 -232}\special{pa 437 -188}%
+\special{pa 466 -148}\special{pa 499 -111}\special{pa 537 -79}\special{pa 578 -52}%
+\special{pa 622 -30}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 2}%
+\special{pa 531 -621}\special{pa 525 -624}\special{pa 518 -623}\special{pa 512 -618}%
+\special{pa 511 -611}\special{pa 515 -604}\special{pa 521 -601}\special{pa 528 -602}%
+\special{pa 534 -607}\special{pa 535 -614}\special{pa 531 -621}\special{sh 1}\special{fp}%
+\special{pa 632 -66}\special{pa 674 -42}\special{pa 720 -22}\special{pa 767 -9}\special{pa 816 -1}%
+\special{pa 866 0}\special{pa 915 -5}\special{pa 963 -17}\special{pa 1010 -34}\special{pa 1053 -56}%
+\special{pa 1094 -85}\special{pa 1131 -118}\special{pa 1163 -155}\special{pa 1191 -196}%
+\special{pa 1213 -240}\special{pa 1229 -287}\special{pa 1240 -335}\special{pa 1244 -384}%
+\special{pa 1242 -434}\special{pa 1234 -483}\special{pa 1220 -530}\special{pa 1200 -575}%
+\special{pa 1174 -618}\special{pa 1144 -656}\special{pa 1108 -691}\special{pa 1069 -721}%
+\special{pa 1026 -746}\special{pa 981 -765}\special{pa 933 -779}\special{pa 884 -786}%
+\special{pa 835 -787}\special{pa 786 -782}\special{pa 738 -771}\special{pa 691 -754}%
+\special{pa 647 -731}\special{pa 607 -703}\special{pa 570 -670}\special{pa 537 -633}%
+\special{pa 510 -591}\special{pa 488 -547}\special{pa 471 -501}\special{pa 461 -452}%
+\special{pa 457 -403}\special{pa 459 -354}\special{pa 467 -305}\special{pa 481 -257}%
+\special{pa 501 -212}\special{pa 526 -170}\special{pa 557 -131}\special{pa 592 -96}%
+\special{pa 632 -66}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 2}%
+\special{pa 658 -680}\special{pa 651 -684}\special{pa 644 -683}\special{pa 639 -677}%
+\special{pa 638 -670}\special{pa 641 -664}\special{pa 647 -660}\special{pa 655 -662}%
+\special{pa 660 -667}\special{pa 661 -674}\special{pa 658 -680}\special{sh 1}\special{fp}%
+\special{pa 649 -115}\special{pa 686 -83}\special{pa 727 -55}\special{pa 771 -32}%
+\special{pa 818 -16}\special{pa 866 -5}\special{pa 915 0}\special{pa 965 -2}\special{pa 1014 -9}%
+\special{pa 1061 -23}\special{pa 1106 -43}\special{pa 1149 -68}\special{pa 1188 -98}%
+\special{pa 1223 -133}\special{pa 1253 -172}\special{pa 1278 -215}\special{pa 1298 -260}%
+\special{pa 1312 -308}\special{pa 1320 -357}\special{pa 1321 -406}\special{pa 1316 -455}%
+\special{pa 1306 -504}\special{pa 1289 -550}\special{pa 1267 -594}\special{pa 1239 -635}%
+\special{pa 1206 -672}\special{pa 1169 -705}\special{pa 1128 -733}\special{pa 1084 -755}%
+\special{pa 1037 -772}\special{pa 989 -783}\special{pa 940 -787}\special{pa 891 -786}%
+\special{pa 842 -778}\special{pa 794 -764}\special{pa 749 -744}\special{pa 706 -719}%
+\special{pa 667 -689}\special{pa 632 -654}\special{pa 602 -615}\special{pa 577 -572}%
+\special{pa 557 -527}\special{pa 543 -480}\special{pa 536 -431}\special{pa 534 -381}%
+\special{pa 539 -332}\special{pa 550 -284}\special{pa 566 -237}\special{pa 589 -193}%
+\special{pa 617 -152}\special{pa 649 -115}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 2}%
+\special{pa 795 -729}\special{pa 788 -733}\special{pa 781 -732}\special{pa 776 -726}%
+\special{pa 775 -719}\special{pa 778 -713}\special{pa 784 -709}\special{pa 792 -711}%
+\special{pa 797 -716}\special{pa 798 -723}\special{pa 795 -729}\special{sh 1}\special{fp}%
+\special{pa 678 -175}\special{pa 708 -136}\special{pa 742 -100}\special{pa 781 -70}%
+\special{pa 823 -44}\special{pa 869 -24}\special{pa 916 -10}\special{pa 965 -2}\special{pa 1014 0}%
+\special{pa 1063 -4}\special{pa 1112 -15}\special{pa 1158 -31}\special{pa 1203 -53}%
+\special{pa 1244 -81}\special{pa 1281 -113}\special{pa 1314 -150}\special{pa 1342 -191}%
+\special{pa 1365 -235}\special{pa 1382 -281}\special{pa 1393 -329}\special{pa 1398 -378}%
+\special{pa 1397 -428}\special{pa 1390 -477}\special{pa 1376 -524}\special{pa 1357 -570}%
+\special{pa 1332 -612}\special{pa 1302 -652}\special{pa 1268 -687}\special{pa 1229 -718}%
+\special{pa 1186 -743}\special{pa 1141 -763}\special{pa 1094 -777}\special{pa 1045 -785}%
+\special{pa 996 -787}\special{pa 946 -783}\special{pa 898 -773}\special{pa 851 -756}%
+\special{pa 807 -734}\special{pa 766 -707}\special{pa 729 -674}\special{pa 696 -637}%
+\special{pa 668 -597}\special{pa 645 -553}\special{pa 628 -507}\special{pa 617 -458}%
+\special{pa 612 -409}\special{pa 613 -360}\special{pa 620 -311}\special{pa 633 -263}%
+\special{pa 653 -218}\special{pa 678 -175}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 2}%
+\special{pa 940 -766}\special{pa 933 -769}\special{pa 926 -768}\special{pa 921 -763}%
+\special{pa 920 -756}\special{pa 923 -749}\special{pa 930 -746}\special{pa 937 -747}%
+\special{pa 942 -752}\special{pa 943 -759}\special{pa 940 -766}\special{sh 1}\special{fp}%
+\special{pa 719 -243}\special{pa 740 -199}\special{pa 767 -157}\special{pa 800 -120}%
+\special{pa 836 -86}\special{pa 877 -58}\special{pa 920 -35}\special{pa 966 -17}\special{pa 1015 -6}%
+\special{pa 1064 0}\special{pa 1113 -1}\special{pa 1162 -8}\special{pa 1210 -21}\special{pa 1255 -40}%
+\special{pa 1298 -65}\special{pa 1338 -94}\special{pa 1373 -129}\special{pa 1404 -167}%
+\special{pa 1430 -209}\special{pa 1451 -255}\special{pa 1465 -302}\special{pa 1474 -351}%
+\special{pa 1476 -400}\special{pa 1472 -449}\special{pa 1462 -498}\special{pa 1446 -544}%
+\special{pa 1424 -589}\special{pa 1397 -630}\special{pa 1365 -668}\special{pa 1328 -701}%
+\special{pa 1288 -729}\special{pa 1244 -753}\special{pa 1198 -770}\special{pa 1150 -782}%
+\special{pa 1101 -787}\special{pa 1051 -786}\special{pa 1002 -779}\special{pa 955 -766}%
+\special{pa 909 -747}\special{pa 866 -723}\special{pa 827 -693}\special{pa 791 -659}%
+\special{pa 760 -620}\special{pa 734 -578}\special{pa 714 -533}\special{pa 699 -486}%
+\special{pa 691 -437}\special{pa 689 -388}\special{pa 692 -338}\special{pa 702 -290}%
+\special{pa 719 -243}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 2}%
+\special{pa 1091 -788}\special{pa 1085 -792}\special{pa 1077 -790}\special{pa 1072 -785}%
+\special{pa 1071 -778}\special{pa 1074 -771}\special{pa 1081 -768}\special{pa 1088 -769}%
+\special{pa 1093 -774}\special{pa 1094 -782}\special{pa 1091 -788}\special{sh 1}\special{fp}%
+\special{pa 773 -317}\special{pa 786 -269}\special{pa 805 -223}\special{pa 829 -180}%
+\special{pa 858 -140}\special{pa 892 -105}\special{pa 931 -73}\special{pa 973 -47}%
+\special{pa 1017 -27}\special{pa 1065 -12}\special{pa 1113 -3}\special{pa 1163 0}%
+\special{pa 1212 -4}\special{pa 1260 -13}\special{pa 1307 -29}\special{pa 1352 -50}%
+\special{pa 1393 -77}\special{pa 1431 -109}\special{pa 1465 -145}\special{pa 1494 -185}%
+\special{pa 1517 -229}\special{pa 1535 -275}\special{pa 1547 -323}\special{pa 1553 -372}%
+\special{pa 1552 -422}\special{pa 1546 -471}\special{pa 1533 -518}\special{pa 1514 -564}%
+\special{pa 1490 -607}\special{pa 1461 -647}\special{pa 1427 -683}\special{pa 1388 -714}%
+\special{pa 1346 -740}\special{pa 1302 -761}\special{pa 1254 -776}\special{pa 1206 -785}%
+\special{pa 1156 -787}\special{pa 1107 -784}\special{pa 1059 -774}\special{pa 1012 -759}%
+\special{pa 967 -737}\special{pa 926 -710}\special{pa 888 -679}\special{pa 854 -642}%
+\special{pa 825 -602}\special{pa 802 -559}\special{pa 784 -512}\special{pa 772 -464}%
+\special{pa 766 -415}\special{pa 767 -366}\special{pa 773 -317}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 2}%
+\special{pa 1245 -796}\special{pa 1239 -799}\special{pa 1231 -798}\special{pa 1226 -793}%
+\special{pa 1225 -786}\special{pa 1228 -779}\special{pa 1235 -776}\special{pa 1242 -777}%
+\special{pa 1247 -782}\special{pa 1249 -789}\special{pa 1245 -796}\special{sh 1}\special{fp}%
+\special{pa 843 -394}\special{pa 846 -344}\special{pa 856 -296}\special{pa 871 -249}%
+\special{pa 892 -204}\special{pa 918 -162}\special{pa 950 -124}\special{pa 986 -90}%
+\special{pa 1026 -61}\special{pa 1069 -37}\special{pa 1115 -19}\special{pa 1163 -7}%
+\special{pa 1212 -1}\special{pa 1262 -1}\special{pa 1311 -7}\special{pa 1359 -19}%
+\special{pa 1404 -37}\special{pa 1448 -61}\special{pa 1488 -90}\special{pa 1524 -124}%
+\special{pa 1555 -162}\special{pa 1582 -204}\special{pa 1603 -249}\special{pa 1618 -296}%
+\special{pa 1627 -344}\special{pa 1631 -394}\special{pa 1627 -443}\special{pa 1618 -492}%
+\special{pa 1603 -539}\special{pa 1582 -583}\special{pa 1555 -625}\special{pa 1524 -663}%
+\special{pa 1488 -697}\special{pa 1448 -726}\special{pa 1404 -750}\special{pa 1359 -768}%
+\special{pa 1311 -780}\special{pa 1262 -787}\special{pa 1212 -787}\special{pa 1163 -780}%
+\special{pa 1115 -768}\special{pa 1069 -750}\special{pa 1026 -726}\special{pa 986 -697}%
+\special{pa 950 -663}\special{pa 918 -625}\special{pa 892 -583}\special{pa 871 -539}%
+\special{pa 856 -492}\special{pa 846 -443}\special{pa 843 -394}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 2}%
+\special{pa 1399 -788}\special{pa 1393 -792}\special{pa 1386 -790}\special{pa 1380 -785}%
+\special{pa 1379 -778}\special{pa 1383 -771}\special{pa 1389 -768}\special{pa 1396 -769}%
+\special{pa 1401 -774}\special{pa 1403 -782}\special{pa 1399 -788}\special{sh 1}\special{fp}%
+\special{pa 928 -471}\special{pa 921 -422}\special{pa 921 -372}\special{pa 927 -323}%
+\special{pa 939 -275}\special{pa 957 -229}\special{pa 980 -185}\special{pa 1009 -145}%
+\special{pa 1042 -109}\special{pa 1080 -77}\special{pa 1122 -50}\special{pa 1166 -29}%
+\special{pa 1213 -13}\special{pa 1262 -4}\special{pa 1311 0}\special{pa 1360 -3}\special{pa 1409 -12}%
+\special{pa 1456 -27}\special{pa 1501 -47}\special{pa 1543 -73}\special{pa 1581 -105}%
+\special{pa 1616 -140}\special{pa 1645 -180}\special{pa 1669 -223}\special{pa 1688 -269}%
+\special{pa 1700 -317}\special{pa 1707 -366}\special{pa 1707 -415}\special{pa 1701 -464}%
+\special{pa 1690 -512}\special{pa 1672 -559}\special{pa 1648 -602}\special{pa 1619 -642}%
+\special{pa 1586 -679}\special{pa 1548 -710}\special{pa 1507 -737}\special{pa 1462 -759}%
+\special{pa 1415 -774}\special{pa 1367 -784}\special{pa 1317 -787}\special{pa 1268 -785}%
+\special{pa 1219 -776}\special{pa 1172 -761}\special{pa 1127 -740}\special{pa 1085 -714}%
+\special{pa 1047 -683}\special{pa 1013 -647}\special{pa 983 -607}\special{pa 959 -564}%
+\special{pa 941 -518}\special{pa 928 -471}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 2}%
+\special{pa 1550 -766}\special{pa 1544 -769}\special{pa 1537 -768}\special{pa 1532 -763}%
+\special{pa 1530 -756}\special{pa 1534 -749}\special{pa 1540 -746}\special{pa 1547 -747}%
+\special{pa 1553 -752}\special{pa 1554 -759}\special{pa 1550 -766}\special{sh 1}\special{fp}%
+\special{pa 1028 -544}\special{pa 1012 -498}\special{pa 1002 -449}\special{pa 998 -400}%
+\special{pa 1000 -350}\special{pa 1009 -302}\special{pa 1023 -255}\special{pa 1044 -209}%
+\special{pa 1069 -167}\special{pa 1100 -129}\special{pa 1136 -94}\special{pa 1175 -65}%
+\special{pa 1218 -40}\special{pa 1264 -21}\special{pa 1312 -8}\special{pa 1361 -1}%
+\special{pa 1410 0}\special{pa 1459 -6}\special{pa 1507 -17}\special{pa 1553 -35}%
+\special{pa 1597 -58}\special{pa 1638 -86}\special{pa 1674 -120}\special{pa 1706 -157}%
+\special{pa 1733 -199}\special{pa 1755 -243}\special{pa 1771 -290}\special{pa 1781 -338}%
+\special{pa 1785 -388}\special{pa 1783 -437}\special{pa 1774 -486}\special{pa 1760 -533}%
+\special{pa 1739 -578}\special{pa 1714 -620}\special{pa 1683 -659}\special{pa 1647 -693}%
+\special{pa 1608 -723}\special{pa 1565 -747}\special{pa 1519 -766}\special{pa 1471 -779}%
+\special{pa 1422 -786}\special{pa 1373 -787}\special{pa 1324 -782}\special{pa 1276 -770}%
+\special{pa 1229 -753}\special{pa 1186 -729}\special{pa 1145 -701}\special{pa 1109 -668}%
+\special{pa 1077 -630}\special{pa 1049 -589}\special{pa 1028 -544}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 2}%
+\special{pa 1696 -729}\special{pa 1689 -733}\special{pa 1682 -732}\special{pa 1677 -726}%
+\special{pa 1676 -719}\special{pa 1679 -713}\special{pa 1686 -709}\special{pa 1693 -711}%
+\special{pa 1698 -716}\special{pa 1699 -723}\special{pa 1696 -729}\special{sh 1}\special{fp}%
+\special{pa 1141 -612}\special{pa 1117 -570}\special{pa 1097 -524}\special{pa 1084 -477}%
+\special{pa 1077 -428}\special{pa 1075 -378}\special{pa 1080 -329}\special{pa 1092 -281}%
+\special{pa 1109 -235}\special{pa 1131 -191}\special{pa 1160 -150}\special{pa 1193 -113}%
+\special{pa 1230 -81}\special{pa 1271 -53}\special{pa 1315 -31}\special{pa 1362 -15}%
+\special{pa 1410 -4}\special{pa 1459 0}\special{pa 1509 -2}\special{pa 1558 -10}\special{pa 1605 -24}%
+\special{pa 1650 -44}\special{pa 1693 -70}\special{pa 1731 -100}\special{pa 1766 -136}%
+\special{pa 1796 -175}\special{pa 1821 -218}\special{pa 1840 -263}\special{pa 1854 -311}%
+\special{pa 1861 -360}\special{pa 1862 -409}\special{pa 1857 -458}\special{pa 1846 -507}%
+\special{pa 1829 -553}\special{pa 1806 -597}\special{pa 1778 -637}\special{pa 1745 -674}%
+\special{pa 1708 -707}\special{pa 1666 -734}\special{pa 1622 -756}\special{pa 1576 -773}%
+\special{pa 1527 -783}\special{pa 1478 -787}\special{pa 1429 -785}\special{pa 1380 -777}%
+\special{pa 1332 -763}\special{pa 1287 -743}\special{pa 1245 -718}\special{pa 1206 -687}%
+\special{pa 1171 -652}\special{pa 1141 -612}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 2}%
+\special{pa 1833 -680}\special{pa 1826 -684}\special{pa 1819 -683}\special{pa 1814 -677}%
+\special{pa 1813 -670}\special{pa 1816 -664}\special{pa 1823 -660}\special{pa 1830 -662}%
+\special{pa 1835 -667}\special{pa 1836 -674}\special{pa 1833 -680}\special{sh 1}\special{fp}%
+\special{pa 1268 -672}\special{pa 1235 -635}\special{pa 1207 -594}\special{pa 1185 -550}%
+\special{pa 1168 -504}\special{pa 1157 -455}\special{pa 1153 -406}\special{pa 1154 -357}%
+\special{pa 1162 -308}\special{pa 1176 -260}\special{pa 1195 -215}\special{pa 1220 -172}%
+\special{pa 1251 -133}\special{pa 1286 -98}\special{pa 1325 -68}\special{pa 1367 -43}%
+\special{pa 1413 -23}\special{pa 1460 -9}\special{pa 1509 -2}\special{pa 1558 0}\special{pa 1608 -5}%
+\special{pa 1656 -16}\special{pa 1702 -32}\special{pa 1746 -55}\special{pa 1787 -83}%
+\special{pa 1824 -115}\special{pa 1857 -152}\special{pa 1885 -193}\special{pa 1907 -237}%
+\special{pa 1924 -284}\special{pa 1935 -332}\special{pa 1940 -381}\special{pa 1938 -431}%
+\special{pa 1930 -480}\special{pa 1916 -527}\special{pa 1897 -572}\special{pa 1872 -615}%
+\special{pa 1841 -654}\special{pa 1806 -689}\special{pa 1767 -719}\special{pa 1725 -744}%
+\special{pa 1679 -764}\special{pa 1632 -778}\special{pa 1583 -786}\special{pa 1534 -787}%
+\special{pa 1484 -783}\special{pa 1436 -772}\special{pa 1390 -755}\special{pa 1346 -733}%
+\special{pa 1305 -705}\special{pa 1268 -672}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 2}%
+\special{pa 1959 -621}\special{pa 1953 -624}\special{pa 1945 -623}\special{pa 1940 -618}%
+\special{pa 1939 -611}\special{pa 1942 -604}\special{pa 1949 -601}\special{pa 1956 -602}%
+\special{pa 1961 -607}\special{pa 1962 -614}\special{pa 1959 -621}\special{sh 1}\special{fp}%
+\special{pa 1405 -721}\special{pa 1365 -691}\special{pa 1330 -656}\special{pa 1299 -618}%
+\special{pa 1274 -575}\special{pa 1254 -530}\special{pa 1240 -483}\special{pa 1232 -434}%
+\special{pa 1230 -384}\special{pa 1234 -335}\special{pa 1244 -287}\special{pa 1261 -240}%
+\special{pa 1283 -196}\special{pa 1310 -155}\special{pa 1343 -118}\special{pa 1380 -85}%
+\special{pa 1420 -56}\special{pa 1464 -34}\special{pa 1511 -17}\special{pa 1559 -5}%
+\special{pa 1608 0}\special{pa 1657 -1}\special{pa 1706 -9}\special{pa 1754 -22}\special{pa 1799 -42}%
+\special{pa 1842 -66}\special{pa 1881 -96}\special{pa 1917 -131}\special{pa 1947 -170}%
+\special{pa 1973 -212}\special{pa 1993 -257}\special{pa 2007 -305}\special{pa 2015 -354}%
+\special{pa 2017 -403}\special{pa 2013 -452}\special{pa 2002 -501}\special{pa 1986 -547}%
+\special{pa 1964 -591}\special{pa 1936 -633}\special{pa 1904 -670}\special{pa 1867 -703}%
+\special{pa 1826 -731}\special{pa 1783 -754}\special{pa 1736 -771}\special{pa 1688 -782}%
+\special{pa 1639 -787}\special{pa 1589 -786}\special{pa 1540 -779}\special{pa 1493 -765}%
+\special{pa 1447 -746}\special{pa 1405 -721}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 2}%
+\special{pa 2073 -553}\special{pa 2066 -556}\special{pa 2059 -555}\special{pa 2054 -550}%
+\special{pa 2053 -543}\special{pa 2056 -536}\special{pa 2063 -533}\special{pa 2070 -534}%
+\special{pa 2075 -539}\special{pa 2076 -546}\special{pa 2073 -553}\special{sh 1}\special{fp}%
+\special{pa 1550 -757}\special{pa 1506 -736}\special{pa 1464 -709}\special{pa 1427 -676}%
+\special{pa 1393 -640}\special{pa 1365 -599}\special{pa 1342 -556}\special{pa 1324 -509}%
+\special{pa 1313 -461}\special{pa 1307 -412}\special{pa 1308 -363}\special{pa 1315 -314}%
+\special{pa 1328 -266}\special{pa 1347 -220}\special{pa 1372 -178}\special{pa 1401 -138}%
+\special{pa 1436 -103}\special{pa 1474 -72}\special{pa 1516 -46}\special{pa 1562 -25}%
+\special{pa 1609 -11}\special{pa 1657 -2}\special{pa 1707 0}\special{pa 1756 -4}\special{pa 1805 -14}%
+\special{pa 1851 -30}\special{pa 1896 -52}\special{pa 1937 -79}\special{pa 1975 -111}%
+\special{pa 2008 -148}\special{pa 2036 -188}\special{pa 2059 -232}\special{pa 2077 -278}%
+\special{pa 2089 -326}\special{pa 2094 -375}\special{pa 2093 -425}\special{pa 2086 -474}%
+\special{pa 2073 -521}\special{pa 2054 -567}\special{pa 2030 -610}\special{pa 2000 -649}%
+\special{pa 1966 -685}\special{pa 1927 -716}\special{pa 1885 -742}\special{pa 1840 -762}%
+\special{pa 1793 -777}\special{pa 1744 -785}\special{pa 1694 -787}\special{pa 1645 -783}%
+\special{pa 1597 -773}\special{pa 1550 -757}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 2}%
+\special{pa 2172 -479}\special{pa 2166 -482}\special{pa 2159 -481}\special{pa 2154 -476}%
+\special{pa 2152 -469}\special{pa 2156 -462}\special{pa 2162 -459}\special{pa 2169 -460}%
+\special{pa 2175 -465}\special{pa 2176 -472}\special{pa 2172 -479}\special{sh 1}\special{fp}%
+\special{pa 1701 -780}\special{pa 1653 -767}\special{pa 1608 -749}\special{pa 1564 -724}%
+\special{pa 1525 -695}\special{pa 1489 -661}\special{pa 1458 -623}\special{pa 1431 -581}%
+\special{pa 1411 -536}\special{pa 1396 -489}\special{pa 1387 -440}\special{pa 1384 -391}%
+\special{pa 1388 -341}\special{pa 1397 -293}\special{pa 1413 -246}\special{pa 1434 -201}%
+\special{pa 1461 -160}\special{pa 1493 -122}\special{pa 1529 -88}\special{pa 1570 -60}%
+\special{pa 1613 -36}\special{pa 1659 -18}\special{pa 1707 -6}\special{pa 1756 -1}%
+\special{pa 1806 -1}\special{pa 1855 -8}\special{pa 1903 -20}\special{pa 1948 -39}%
+\special{pa 1992 -63}\special{pa 2031 -92}\special{pa 2067 -126}\special{pa 2098 -165}%
+\special{pa 2124 -207}\special{pa 2145 -252}\special{pa 2160 -299}\special{pa 2169 -347}%
+\special{pa 2172 -397}\special{pa 2168 -446}\special{pa 2159 -495}\special{pa 2143 -542}%
+\special{pa 2121 -586}\special{pa 2095 -628}\special{pa 2063 -665}\special{pa 2027 -699}%
+\special{pa 1986 -728}\special{pa 1943 -751}\special{pa 1897 -769}\special{pa 1849 -781}%
+\special{pa 1800 -787}\special{pa 1750 -786}\special{pa 1701 -780}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 2}%
+\special{pa 2257 -402}\special{pa 2251 -405}\special{pa 2244 -404}\special{pa 2238 -399}%
+\special{pa 2237 -392}\special{pa 2241 -385}\special{pa 2247 -382}\special{pa 2254 -383}%
+\special{pa 2259 -388}\special{pa 2261 -396}\special{pa 2257 -402}\special{sh 1}\special{fp}%
+\special{pa 1855 -787}\special{pa 1806 -784}\special{pa 1757 -775}\special{pa 1710 -760}%
+\special{pa 1666 -739}\special{pa 1624 -712}\special{pa 1586 -681}\special{pa 1552 -645}%
+\special{pa 1523 -605}\special{pa 1499 -561}\special{pa 1481 -515}\special{pa 1469 -467}%
+\special{pa 1462 -418}\special{pa 1462 -369}\special{pa 1469 -320}\special{pa 1481 -272}%
+\special{pa 1499 -226}\special{pa 1523 -183}\special{pa 1552 -143}\special{pa 1586 -107}%
+\special{pa 1624 -75}\special{pa 1666 -49}\special{pa 1710 -28}\special{pa 1757 -12}%
+\special{pa 1806 -3}\special{pa 1855 0}\special{pa 1905 -3}\special{pa 1953 -12}\special{pa 2000 -28}%
+\special{pa 2045 -49}\special{pa 2087 -75}\special{pa 2125 -107}\special{pa 2159 -143}%
+\special{pa 2188 -183}\special{pa 2212 -226}\special{pa 2230 -272}\special{pa 2242 -320}%
+\special{pa 2248 -369}\special{pa 2248 -418}\special{pa 2242 -467}\special{pa 2230 -515}%
+\special{pa 2212 -561}\special{pa 2188 -605}\special{pa 2159 -645}\special{pa 2125 -681}%
+\special{pa 2087 -712}\special{pa 2045 -739}\special{pa 2000 -760}\special{pa 1953 -775}%
+\special{pa 1905 -784}\special{pa 1855 -787}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 2}%
+\special{pa 2327 -325}\special{pa 2321 -329}\special{pa 2313 -327}\special{pa 2308 -322}%
+\special{pa 2307 -315}\special{pa 2310 -309}\special{pa 2317 -305}\special{pa 2324 -306}%
+\special{pa 2329 -312}\special{pa 2330 -319}\special{pa 2327 -325}\special{sh 1}\special{fp}%
+\special{pa 2009 -780}\special{pa 1960 -786}\special{pa 1911 -787}\special{pa 1862 -781}%
+\special{pa 1814 -769}\special{pa 1768 -751}\special{pa 1724 -728}\special{pa 1684 -699}%
+\special{pa 1648 -665}\special{pa 1616 -628}\special{pa 1589 -586}\special{pa 1568 -542}%
+\special{pa 1552 -495}\special{pa 1542 -446}\special{pa 1539 -397}\special{pa 1542 -347}%
+\special{pa 1550 -299}\special{pa 1565 -252}\special{pa 1586 -207}\special{pa 1612 -165}%
+\special{pa 1643 -126}\special{pa 1679 -92}\special{pa 1719 -63}\special{pa 1762 -39}%
+\special{pa 1808 -20}\special{pa 1856 -8}\special{pa 1905 -1}\special{pa 1954 -1}%
+\special{pa 2003 -6}\special{pa 2051 -18}\special{pa 2097 -36}\special{pa 2141 -60}%
+\special{pa 2181 -88}\special{pa 2217 -122}\special{pa 2249 -160}\special{pa 2276 -201}%
+\special{pa 2297 -246}\special{pa 2313 -293}\special{pa 2323 -341}\special{pa 2326 -391}%
+\special{pa 2324 -440}\special{pa 2315 -489}\special{pa 2300 -536}\special{pa 2279 -581}%
+\special{pa 2253 -623}\special{pa 2222 -661}\special{pa 2186 -695}\special{pa 2146 -724}%
+\special{pa 2103 -749}\special{pa 2057 -767}\special{pa 2009 -780}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 2}%
+\special{pa 2382 -251}\special{pa 2375 -255}\special{pa 2368 -254}\special{pa 2363 -248}%
+\special{pa 2362 -241}\special{pa 2365 -235}\special{pa 2372 -231}\special{pa 2379 -233}%
+\special{pa 2384 -238}\special{pa 2385 -245}\special{pa 2382 -251}\special{sh 1}\special{fp}%
+\special{pa 2161 -757}\special{pa 2114 -773}\special{pa 2065 -783}\special{pa 2016 -787}%
+\special{pa 1967 -785}\special{pa 1918 -777}\special{pa 1871 -762}\special{pa 1826 -742}%
+\special{pa 1783 -716}\special{pa 1745 -685}\special{pa 1711 -649}\special{pa 1681 -610}%
+\special{pa 1656 -567}\special{pa 1637 -521}\special{pa 1624 -474}\special{pa 1617 -425}%
+\special{pa 1617 -375}\special{pa 1622 -326}\special{pa 1634 -278}\special{pa 1651 -232}%
+\special{pa 1674 -188}\special{pa 1703 -148}\special{pa 1736 -111}\special{pa 1773 -79}%
+\special{pa 1815 -52}\special{pa 1859 -30}\special{pa 1906 -14}\special{pa 1954 -4}%
+\special{pa 2004 0}\special{pa 2053 -2}\special{pa 2102 -11}\special{pa 2149 -25}%
+\special{pa 2194 -46}\special{pa 2236 -72}\special{pa 2275 -103}\special{pa 2309 -138}%
+\special{pa 2339 -178}\special{pa 2363 -220}\special{pa 2382 -266}\special{pa 2395 -314}%
+\special{pa 2402 -363}\special{pa 2403 -412}\special{pa 2398 -461}\special{pa 2386 -509}%
+\special{pa 2369 -556}\special{pa 2346 -599}\special{pa 2317 -640}\special{pa 2284 -676}%
+\special{pa 2246 -709}\special{pa 2205 -736}\special{pa 2161 -757}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 2}%
+\special{pa 2423 -183}\special{pa 2416 -187}\special{pa 2409 -185}\special{pa 2404 -180}%
+\special{pa 2403 -173}\special{pa 2406 -167}\special{pa 2413 -163}\special{pa 2420 -164}%
+\special{pa 2425 -170}\special{pa 2426 -177}\special{pa 2423 -183}\special{sh 1}\special{fp}%
+\special{pa 2306 -721}\special{pa 2263 -746}\special{pa 2218 -765}\special{pa 2170 -779}%
+\special{pa 2121 -786}\special{pa 2072 -787}\special{pa 2023 -782}\special{pa 1974 -771}%
+\special{pa 1928 -754}\special{pa 1884 -731}\special{pa 1843 -703}\special{pa 1807 -670}%
+\special{pa 1774 -633}\special{pa 1747 -591}\special{pa 1725 -547}\special{pa 1708 -501}%
+\special{pa 1698 -452}\special{pa 1694 -403}\special{pa 1696 -354}\special{pa 1704 -305}%
+\special{pa 1718 -257}\special{pa 1738 -212}\special{pa 1763 -170}\special{pa 1794 -131}%
+\special{pa 1829 -96}\special{pa 1868 -66}\special{pa 1911 -42}\special{pa 1957 -22}%
+\special{pa 2004 -9}\special{pa 2053 -1}\special{pa 2103 0}\special{pa 2152 -5}\special{pa 2200 -17}%
+\special{pa 2246 -34}\special{pa 2290 -56}\special{pa 2331 -85}\special{pa 2368 -118}%
+\special{pa 2400 -155}\special{pa 2428 -196}\special{pa 2450 -240}\special{pa 2466 -287}%
+\special{pa 2477 -335}\special{pa 2481 -384}\special{pa 2479 -434}\special{pa 2471 -483}%
+\special{pa 2457 -530}\special{pa 2437 -575}\special{pa 2411 -618}\special{pa 2380 -656}%
+\special{pa 2345 -691}\special{pa 2306 -721}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 2}%
+\special{pa 2451 -124}\special{pa 2445 -127}\special{pa 2438 -126}\special{pa 2432 -121}%
+\special{pa 2431 -113}\special{pa 2435 -107}\special{pa 2441 -104}\special{pa 2448 -105}%
+\special{pa 2453 -110}\special{pa 2455 -117}\special{pa 2451 -124}\special{sh 1}\special{fp}%
+\special{pa 2443 -672}\special{pa 2406 -705}\special{pa 2365 -733}\special{pa 2321 -755}%
+\special{pa 2274 -772}\special{pa 2226 -783}\special{pa 2177 -787}\special{pa 2127 -786}%
+\special{pa 2079 -778}\special{pa 2031 -764}\special{pa 1986 -744}\special{pa 1943 -719}%
+\special{pa 1904 -689}\special{pa 1869 -654}\special{pa 1839 -615}\special{pa 1814 -572}%
+\special{pa 1794 -527}\special{pa 1780 -480}\special{pa 1773 -431}\special{pa 1771 -381}%
+\special{pa 1776 -332}\special{pa 1786 -284}\special{pa 1803 -237}\special{pa 1826 -193}%
+\special{pa 1853 -152}\special{pa 1886 -115}\special{pa 1923 -83}\special{pa 1964 -55}%
+\special{pa 2008 -32}\special{pa 2055 -16}\special{pa 2103 -5}\special{pa 2152 0}%
+\special{pa 2202 -2}\special{pa 2250 -9}\special{pa 2298 -23}\special{pa 2343 -43}%
+\special{pa 2386 -68}\special{pa 2425 -98}\special{pa 2460 -133}\special{pa 2490 -172}%
+\special{pa 2515 -215}\special{pa 2535 -260}\special{pa 2549 -308}\special{pa 2556 -357}%
+\special{pa 2558 -406}\special{pa 2553 -455}\special{pa 2543 -504}\special{pa 2526 -550}%
+\special{pa 2503 -594}\special{pa 2476 -635}\special{pa 2443 -672}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 2}%
+\special{pa 2469 -75}\special{pa 2462 -78}\special{pa 2455 -77}\special{pa 2450 -72}%
+\special{pa 2449 -65}\special{pa 2452 -58}\special{pa 2459 -55}\special{pa 2466 -56}%
+\special{pa 2471 -61}\special{pa 2472 -68}\special{pa 2469 -75}\special{sh 1}\special{fp}%
+\special{pa 2569 -612}\special{pa 2539 -652}\special{pa 2504 -687}\special{pa 2466 -718}%
+\special{pa 2423 -743}\special{pa 2378 -763}\special{pa 2331 -777}\special{pa 2282 -785}%
+\special{pa 2233 -787}\special{pa 2183 -783}\special{pa 2135 -773}\special{pa 2088 -756}%
+\special{pa 2044 -734}\special{pa 2003 -707}\special{pa 1966 -674}\special{pa 1933 -637}%
+\special{pa 1904 -597}\special{pa 1882 -553}\special{pa 1865 -507}\special{pa 1853 -458}%
+\special{pa 1848 -409}\special{pa 1850 -360}\special{pa 1857 -311}\special{pa 1870 -263}%
+\special{pa 1890 -218}\special{pa 1914 -175}\special{pa 1944 -136}\special{pa 1979 -100}%
+\special{pa 2018 -70}\special{pa 2060 -44}\special{pa 2106 -24}\special{pa 2153 -10}%
+\special{pa 2202 -2}\special{pa 2251 0}\special{pa 2300 -4}\special{pa 2349 -15}\special{pa 2395 -31}%
+\special{pa 2440 -53}\special{pa 2481 -81}\special{pa 2518 -113}\special{pa 2551 -150}%
+\special{pa 2579 -191}\special{pa 2602 -235}\special{pa 2619 -281}\special{pa 2630 -329}%
+\special{pa 2635 -378}\special{pa 2634 -428}\special{pa 2627 -477}\special{pa 2613 -524}%
+\special{pa 2594 -570}\special{pa 2569 -612}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 2}%
+\special{pa 2478 -38}\special{pa 2472 -42}\special{pa 2464 -40}\special{pa 2459 -35}%
+\special{pa 2458 -28}\special{pa 2461 -22}\special{pa 2468 -18}\special{pa 2475 -19}%
+\special{pa 2480 -25}\special{pa 2481 -32}\special{pa 2478 -38}\special{sh 1}\special{fp}%
+\special{pa 2683 -544}\special{pa 2661 -589}\special{pa 2634 -630}\special{pa 2602 -668}%
+\special{pa 2565 -701}\special{pa 2525 -729}\special{pa 2481 -753}\special{pa 2435 -770}%
+\special{pa 2387 -782}\special{pa 2338 -787}\special{pa 2288 -786}\special{pa 2239 -779}%
+\special{pa 2192 -766}\special{pa 2146 -747}\special{pa 2103 -723}\special{pa 2063 -693}%
+\special{pa 2028 -659}\special{pa 1997 -620}\special{pa 1971 -578}\special{pa 1951 -533}%
+\special{pa 1936 -486}\special{pa 1928 -437}\special{pa 1925 -388}\special{pa 1929 -338}%
+\special{pa 1939 -290}\special{pa 1955 -243}\special{pa 1977 -199}\special{pa 2004 -157}%
+\special{pa 2036 -120}\special{pa 2073 -86}\special{pa 2113 -58}\special{pa 2157 -35}%
+\special{pa 2203 -17}\special{pa 2251 -6}\special{pa 2301 0}\special{pa 2350 -1}\special{pa 2399 -8}%
+\special{pa 2447 -21}\special{pa 2492 -40}\special{pa 2535 -65}\special{pa 2575 -94}%
+\special{pa 2610 -129}\special{pa 2641 -167}\special{pa 2667 -209}\special{pa 2687 -255}%
+\special{pa 2702 -302}\special{pa 2710 -350}\special{pa 2713 -400}\special{pa 2709 -449}%
+\special{pa 2699 -498}\special{pa 2683 -544}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 2}%
+\special{pa 2482 -16}\special{pa 2475 -19}\special{pa 2468 -18}\special{pa 2463 -13}%
+\special{pa 2462 -6}\special{pa 2465 1}\special{pa 2471 4}\special{pa 2479 3}\special{pa 2484 -2}%
+\special{pa 2485 -9}\special{pa 2482 -16}\special{sh 1}\special{fp}%
+\special{pa 2783 -471}\special{pa 2770 -518}\special{pa 2751 -564}\special{pa 2727 -607}%
+\special{pa 2698 -647}\special{pa 2664 -683}\special{pa 2625 -714}\special{pa 2583 -740}%
+\special{pa 2538 -761}\special{pa 2491 -776}\special{pa 2443 -785}\special{pa 2393 -787}%
+\special{pa 2344 -784}\special{pa 2295 -774}\special{pa 2249 -759}\special{pa 2204 -737}%
+\special{pa 2162 -710}\special{pa 2125 -679}\special{pa 2091 -642}\special{pa 2062 -602}%
+\special{pa 2039 -559}\special{pa 2021 -512}\special{pa 2009 -464}\special{pa 2003 -415}%
+\special{pa 2004 -366}\special{pa 2010 -317}\special{pa 2023 -269}\special{pa 2041 -223}%
+\special{pa 2066 -180}\special{pa 2095 -140}\special{pa 2129 -105}\special{pa 2167 -73}%
+\special{pa 2209 -47}\special{pa 2254 -27}\special{pa 2301 -12}\special{pa 2350 -3}%
+\special{pa 2399 0}\special{pa 2449 -4}\special{pa 2497 -13}\special{pa 2544 -29}%
+\special{pa 2589 -50}\special{pa 2630 -77}\special{pa 2668 -109}\special{pa 2702 -145}%
+\special{pa 2730 -185}\special{pa 2754 -229}\special{pa 2772 -275}\special{pa 2784 -323}%
+\special{pa 2789 -372}\special{pa 2789 -422}\special{pa 2783 -471}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 2}%
+\special{pa 2482 -8}\special{pa 2476 -12}\special{pa 2468 -11}\special{pa 2463 -5}%
+\special{pa 2462 2}\special{pa 2465 8}\special{pa 2472 12}\special{pa 2479 11}\special{pa 2484 5}%
+\special{pa 2485 -2}\special{pa 2482 -8}\special{sh 1}\special{fp}%
+\special{pa 2867 -394}\special{pa 2864 -443}\special{pa 2855 -492}\special{pa 2840 -539}%
+\special{pa 2819 -583}\special{pa 2792 -625}\special{pa 2761 -663}\special{pa 2725 -697}%
+\special{pa 2685 -726}\special{pa 2641 -750}\special{pa 2595 -768}\special{pa 2547 -780}%
+\special{pa 2498 -787}\special{pa 2449 -787}\special{pa 2400 -780}\special{pa 2352 -768}%
+\special{pa 2306 -750}\special{pa 2263 -726}\special{pa 2223 -697}\special{pa 2187 -663}%
+\special{pa 2155 -625}\special{pa 2129 -583}\special{pa 2108 -539}\special{pa 2092 -492}%
+\special{pa 2083 -443}\special{pa 2080 -394}\special{pa 2083 -344}\special{pa 2092 -296}%
+\special{pa 2108 -249}\special{pa 2129 -204}\special{pa 2155 -162}\special{pa 2187 -124}%
+\special{pa 2223 -90}\special{pa 2263 -61}\special{pa 2306 -37}\special{pa 2352 -19}%
+\special{pa 2400 -7}\special{pa 2449 -1}\special{pa 2498 -1}\special{pa 2547 -7}\special{pa 2595 -19}%
+\special{pa 2641 -37}\special{pa 2685 -61}\special{pa 2725 -90}\special{pa 2761 -124}%
+\special{pa 2792 -162}\special{pa 2819 -204}\special{pa 2840 -249}\special{pa 2855 -296}%
+\special{pa 2864 -344}\special{pa 2867 -394}%
+\special{fp}%
+\special{pn 8}%
+\special{pa -594 0}\special{pa 3134 0}%
+\special{fp}%
+\special{pa 0 220}\special{pa 0 -1020}%
+\special{fp}%
+\settowidth{\Width}{$x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(8.0100,0.0000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{\Depth}%
+\put(0.0000,2.6400){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+%
+\settowidth{\Width}{O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(-0.0500,-0.0500){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/angle-mark.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/angle-mark.pdf
new file mode 100644
index 0000000000..bc05afce22
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/angle-mark.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/angle.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/angle.pdf
new file mode 100644
index 0000000000..e60d742699
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/angle.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/anglemark.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/anglemark.tex
new file mode 100644
index 0000000000..e57367e43f
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/anglemark.tex
@@ -0,0 +1,48 @@
+%%% anglemark.tex 2014-11-10 8:47
+%%% anglemark.sce 2014-11-10 8:36
+{\unitlength=1cm%
+\begin{picture}%
+( 6.00000, 5.00000)( -3.00000, -2.00000)%
+\special{pn 8}%
+%
+\settowidth{\Width}{A}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{A}\settodepth{\Depth}{A}\setlength{\Height}{\Depth}%
+\put(-0.4600,2.1100){\hspace*{\Width}\raisebox{\Height}{A}}%
+%
+%
+\settowidth{\Width}{B}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{B}\settodepth{\Depth}{B}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-2.1000,-1.0000){\hspace*{\Width}\raisebox{\Height}{B}}%
+%
+%
+\settowidth{\Width}{C}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{C}\settodepth{\Depth}{C}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.1000,-1.0000){\hspace*{\Width}\raisebox{\Height}{C}}%
+%
+%
+\settowidth{\Width}{$\theta$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\theta$}\settodepth{\Depth}{$\theta$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-1.3600,-0.6100){\hspace*{\Width}\raisebox{\Height}{$\theta$}}%
+%
+%
+\settowidth{\Width}{$\alpha$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\alpha$}\settodepth{\Depth}{$\alpha$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(0.1900,-0.1400){\hspace*{\Width}\raisebox{\Height}{$\alpha$}}%
+%
+%
+\special{pn 24}%
+\special{pa 538 89}\special{pa 536 90}\special{pa 500 124}\special{pa 469 162}\special{pa 442 204}%
+\special{pa 421 249}\special{pa 406 296}\special{pa 397 344}\special{pa 394 394}%
+\special{fp}%
+\special{pn 8}%
+\special{pa -181 -791}\special{pa -787 394}\special{pa 787 394}\special{pa -181 -791}%
+\special{fp}%
+\special{pa -271 -616}\special{pa -265 -613}\special{pa -242 -604}\special{pa -218 -598}%
+\special{pa -193 -595}\special{pa -169 -595}\special{pa -144 -598}\special{pa -120 -604}%
+\special{pa -97 -613}\special{pa -76 -625}\special{pa -57 -639}%
+\special{fp}%
+\special{pa -591 394}\special{pa -592 369}\special{pa -597 345}\special{pa -604 321}%
+\special{pa -615 299}\special{pa -628 278}\special{pa -644 259}\special{pa -662 242}%
+\special{pa -682 227}\special{pa -698 219}%
+\special{fp}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/anglemark2.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/anglemark2.tex
new file mode 100644
index 0000000000..5963f1e89e
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/anglemark2.tex
@@ -0,0 +1,26 @@
+%%% /Users/hannya/Desktop/fig/template1.tex
+%%% Generator=template1.cdy
+{\unitlength=8mm%
+\begin{picture}%
+(5.55,5.2)(-3,-1)%
+\special{pn 8}%
+%
+\special{pa -263 -1165}\special{pa -630 -0}\special{pa 630 -0}\special{pa -263 -1165}%
+\special{fp}%
+\settowidth{\Width}{A}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{A}\settodepth{\Depth}{A}\setlength{\Height}{\Depth}%
+\put(-0.8300000,3.8250000){\hspace*{\Width}\raisebox{\Height}{A}}%
+%
+\settowidth{\Width}{B}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{B}\settodepth{\Depth}{B}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-2.1250000,0.0000000){\hspace*{\Width}\raisebox{\Height}{B}}%
+%
+\settowidth{\Width}{C}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{C}\settodepth{\Depth}{C}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.1250000,0.0000000){\hspace*{\Width}\raisebox{\Height}{C}}%
+%
+\settowidth{\Width}{$\circ$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\circ$}\settodepth{\Depth}{$\circ$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-1.5200000,0.3500000){\hspace*{\Width}\raisebox{\Height}{$\circ$}}%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/animestart.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/animestart.tex
new file mode 100644
index 0000000000..a9f1a6b56f
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/animestart.tex
@@ -0,0 +1,83 @@
+%%% /Users/Hannya/Desktop/KeTCindy/fig/middle/p001.tex
+%%% Generator=movietemp.cdy
+{\unitlength=1cm%
+\begin{picture}%
+(8,6)(-3,-3)%
+\special{pn 8}%
+%
+{%
+\color[rgb]{0,0,0}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 787 -0}\special{pa 781 -99}\special{pa 763 -196}\special{pa 732 -290}%
+\special{pa 690 -379}\special{pa 637 -463}\special{pa 574 -539}\special{pa 502 -607}%
+\special{pa 422 -665}\special{pa 335 -712}\special{pa 243 -749}\special{pa 148 -773}%
+\special{pa 49 -786}\special{pa -49 -786}\special{pa -148 -773}\special{pa -243 -749}%
+\special{pa -335 -712}\special{pa -422 -665}\special{pa -502 -607}\special{pa -574 -539}%
+\special{pa -637 -463}\special{pa -690 -379}\special{pa -732 -290}\special{pa -763 -196}%
+\special{pa -781 -99}\special{pa -787 0}\special{pa -781 99}\special{pa -763 196}%
+\special{pa -732 290}\special{pa -690 379}\special{pa -637 463}\special{pa -574 539}%
+\special{pa -502 607}\special{pa -422 665}\special{pa -335 712}\special{pa -243 749}%
+\special{pa -148 773}\special{pa -49 786}\special{pa 49 786}\special{pa 148 773}%
+\special{pa 243 749}\special{pa 335 712}\special{pa 422 665}\special{pa 502 607}%
+\special{pa 574 539}\special{pa 637 463}\special{pa 690 379}\special{pa 732 290}%
+\special{pa 763 196}\special{pa 781 99}\special{pa 787 0}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 1575 -0}\special{pa 787 -0}%
+\special{fp}%
+}%
+\special{pn 2}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 1192 -11}\special{pa 1181 -16}\special{pa 1170 -11}\special{pa 1165 0}\special{pa 1170 11}\special{pa 1181 16}\special{pa 1192 11}\special{pa 1197 0}\special{pa 1192 -11}\special{sh 1}\special{fp}%
+\special{pa 799 -11}\special{pa 787 -16}\special{pa 776 -11}\special{pa 772 0}\special{pa 776 11}\special{pa 787 16}\special{pa 799 11}\special{pa 803 0}\special{pa 799 -11}\special{sh 1}\special{fp}%
+}%
+\special{pn 8}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{A}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{A}\settodepth{\Depth}{A}\setlength{\Height}{-\Height}%
+\put(4.0000000,-0.0500000){\hspace*{\Width}\raisebox{\Height}{A}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{P}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{P}\settodepth{\Depth}{P}\setlength{\Height}{\Depth}%
+\put(2.0500000,0.0500000){\hspace*{\Width}\raisebox{\Height}{P}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{Q}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{Q}\settodepth{\Depth}{Q}\setlength{\Height}{\Depth}%
+\put(3.0500000,0.0500000){\hspace*{\Width}\raisebox{\Height}{Q}}%
+%
+}%
+\special{pn 2}%
+{%
+\color[rgb]{1,0,0}%
+\special{pa 1192 -11}\special{pa 1181 -16}\special{pa 1170 -11}\special{pa 1165 0}\special{pa 1170 11}\special{pa 1181 16}\special{pa 1192 11}\special{pa 1197 0}\special{pa 1192 -11}\special{sh 1}\special{fp}%
+}%
+\special{pn 8}%
+\special{pa -1181 -0}\special{pa 1969 -0}%
+\special{fp}%
+\special{pa 0 1181}\special{pa 0 -1181}%
+\special{fp}%
+\settowidth{\Width}{$x$}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-\Height}%
+\put(4.9500000,-0.0500000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{-\Height}%
+\put(-0.0500000,2.9500000){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+\settowidth{\Width}{O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(-0.0500000,-0.0500000){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/arrowdata.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/arrowdata.tex
new file mode 100644
index 0000000000..5b610afa95
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/arrowdata.tex
@@ -0,0 +1,88 @@
+%%% /Users/hannya/Desktop/fig/template1.tex
+%%% Generator=template1.cdy
+{\unitlength=8mm%
+\begin{picture}%
+(9.49,4.44)(-0.57,-0.66)%
+\special{pn 8}%
+%
+\special{pa 0 -0}\special{pa 315 -945}%
+\special{fp}%
+\special{pa 314 -866}\special{pa 315 -945}\special{pa 268 -882}\special{pa 291 -874}%
+\special{pa 314 -866}\special{pa 314 -866}\special{sh 1}\special{ip}%
+\special{pn 1}%
+\special{pa 314 -866}\special{pa 315 -945}\special{pa 268 -882}\special{pa 291 -874}%
+\special{pa 314 -866}\special{pa 315 -945}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 315 -0}\special{pa 630 -945}%
+\special{fp}%
+\special{pa 629 -787}\special{pa 630 -945}\special{pa 536 -818}\special{pa 583 -803}%
+\special{pa 629 -787}\special{pa 629 -787}\special{sh 1}\special{ip}%
+\special{pn 1}%
+\special{pa 629 -787}\special{pa 630 -945}\special{pa 536 -818}\special{pa 583 -803}%
+\special{pa 629 -787}\special{pa 630 -945}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 630 -0}\special{pa 945 -945}%
+\special{fp}%
+\special{pa 1051 -734}\special{pa 945 -945}\special{pa 734 -839}\special{pa 892 -786}%
+\special{pa 1051 -734}\special{pa 1051 -734}\special{sh 1}\special{ip}%
+\special{pn 1}%
+\special{pa 1051 -734}\special{pa 945 -945}\special{pa 734 -839}\special{pa 892 -786}%
+\special{pa 1051 -734}\special{pa 945 -945}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 945 -0}\special{pa 1260 -945}%
+\special{fp}%
+\special{pa 1101 -236}\special{pa 1102 -472}\special{pa 962 -282}\special{pa 1031 -259}%
+\special{pa 1101 -236}\special{pa 1101 -236}\special{sh 1}\special{ip}%
+\special{pn 1}%
+\special{pa 1101 -236}\special{pa 1102 -472}\special{pa 962 -282}\special{pa 1031 -259}%
+\special{pa 1101 -236}\special{pa 1102 -472}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 1260 -0}\special{pa 1575 -945}%
+\special{fp}%
+\special{pa 1573 -709}\special{pa 1575 -945}\special{pa 1435 -755}\special{pa 1539 -838}%
+\special{pa 1573 -709}\special{pa 1573 -709}\special{sh 1}\special{ip}%
+\special{pn 1}%
+\special{pa 1573 -709}\special{pa 1575 -945}\special{pa 1435 -755}\special{pa 1539 -838}%
+\special{pa 1573 -709}\special{pa 1575 -945}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 1575 -0}\special{pa 1890 -945}%
+\special{fp}%
+\special{pa 1888 -709}\special{pa 1890 -945}\special{pa 1749 -755}\special{pa 1890 -945}%
+\special{pa 1888 -709}\special{pa 1888 -709}\special{sh 1}\special{ip}%
+\special{pn 1}%
+\special{pa 1888 -709}\special{pa 1890 -945}\special{pa 1749 -755}\special{pa 1890 -945}%
+\special{pa 1888 -709}\special{pa 1890 -945}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 16}%
+\special{pa 1890 -0}\special{pa 2205 -945}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 2203 -709}\special{pa 2205 -945}\special{pa 2064 -755}\special{pa 2134 -732}%
+\special{pa 2203 -709}\special{pa 2203 -709}\special{sh 1}\special{ip}%
+\special{pn 1}%
+\special{pa 2203 -709}\special{pa 2205 -945}\special{pa 2064 -755}\special{pa 2134 -732}%
+\special{pa 2203 -709}\special{pa 2205 -945}%
+\special{fp}%
+\special{pn 8}%
+{%
+\color[rgb]{1,0,0}%
+\special{pa 2205 -0}\special{pa 2520 -945}%
+\special{fp}%
+}%
+{%
+\color[rgb]{1,0,0}%
+\special{pa 2518 -709}\special{pa 2520 -945}\special{pa 2379 -755}\special{pa 2484 -838}%
+\special{pa 2518 -709}\special{pa 2518 -709}\special{sh 1}\special{ip}%
+\special{pn 1}%
+\special{pa 2518 -709}\special{pa 2520 -945}\special{pa 2379 -755}\special{pa 2484 -838}%
+\special{pa 2518 -709}\special{pa 2520 -945}%
+\special{fp}%
+\special{pn 8}%
+}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/arrowhead.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/arrowhead.tex
new file mode 100644
index 0000000000..d61b5ee62d
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/arrowhead.tex
@@ -0,0 +1,38 @@
+%%% test.tex 2014-10-16 20:32
+%%% test.sce 2014-10-16 20:32
+{\unitlength=1cm%
+\begin{picture}%
+( 4.00000, 3.00000)( -1.00000, -0.50000)%
+\special{pn 8}%
+%
+\special{pa 271 -315}\special{pa 197 -343}\special{pa 240 -277}\special{pa 255 -296}%
+\special{pa 271 -315}\special{sh 1}\special{ip}%
+\special{pn 8}%
+\special{pa 271 -315}\special{pa 197 -343}\special{pa 240 -277}\special{pa 255 -296}%
+\special{pa 271 -315}%
+\special{fp}%
+\special{pn 8}%
+\settowidth{\Width}{θ}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{θ}\settodepth{\Depth}{θ}\setlength{\Height}{\Depth}%
+\put(1.0500,0.5500){\hspace*{\Width}\raisebox{\Height}{θ}}%
+%
+%
+\special{pa 394 0}\special{pa 394 -8}\special{pa 393 -16}\special{pa 393 -25}\special{pa 392 -33}%
+\special{pa 392 -41}\special{pa 391 -49}\special{pa 389 -58}\special{pa 388 -66}\special{pa 387 -74}%
+\special{pa 385 -82}\special{pa 383 -90}\special{pa 381 -98}\special{pa 379 -106}%
+\special{pa 377 -114}\special{pa 374 -122}\special{pa 372 -129}\special{pa 369 -137}%
+\special{pa 366 -145}\special{pa 363 -153}\special{pa 360 -160}\special{pa 356 -168}%
+\special{pa 353 -175}\special{pa 349 -182}\special{pa 345 -190}\special{pa 341 -197}%
+\special{pa 337 -204}\special{pa 332 -211}\special{pa 328 -218}\special{pa 323 -225}%
+\special{pa 319 -231}\special{pa 314 -238}\special{pa 309 -245}\special{pa 303 -251}%
+\special{pa 298 -257}\special{pa 293 -263}\special{pa 287 -270}\special{pa 281 -275}%
+\special{pa 275 -281}\special{pa 270 -287}\special{pa 263 -293}\special{pa 257 -298}%
+\special{pa 251 -303}\special{pa 245 -309}\special{pa 238 -314}\special{pa 231 -319}%
+\special{pa 225 -323}\special{pa 218 -328}\special{pa 211 -332}\special{pa 204 -337}%
+\special{pa 197 -341}%
+\special{fp}%
+\special{pa 0 0}\special{pa 787 0}%
+\special{fp}%
+\special{pa 0 0}\special{pa 394 -681}%
+\special{fp}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/assign.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/assign.tex
new file mode 100644
index 0000000000..ab6bcf7d32
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/assign.tex
@@ -0,0 +1,361 @@
+%%% fig.tex 2016-4-28 10:9
+%%% fig.sce 2016-4-28 10:9
+{\unitlength=4mm%
+\begin{picture}%
+( 10.00000, 10.00000)( -5.00000, -2.00000)%
+\special{pn 8}%
+%
+\special{pa -787 -151}\special{pa -756 0}\special{pa -724 151}\special{pa -693 302}%
+\special{pa -690 315}%
+\special{fp}%
+\special{pa -787 -290}\special{pa -756 -145}\special{pa -724 0}\special{pa -693 145}%
+\special{pa -661 290}\special{pa -656 315}%
+\special{fp}%
+\special{pa -787 -416}\special{pa -756 -277}\special{pa -724 -139}\special{pa -693 0}%
+\special{pa -661 139}\special{pa -630 277}\special{pa -621 315}%
+\special{fp}%
+\special{pa -787 -529}\special{pa -756 -397}\special{pa -724 -265}\special{pa -693 -132}%
+\special{pa -661 0}\special{pa -630 132}\special{pa -598 265}\special{pa -586 315}%
+\special{fp}%
+\special{pa -787 -630}\special{pa -756 -504}\special{pa -724 -378}\special{pa -693 -252}%
+\special{pa -661 -126}\special{pa -630 0}\special{pa -598 126}\special{pa -567 252}%
+\special{pa -551 315}%
+\special{fp}%
+\special{pa -787 -718}\special{pa -756 -598}\special{pa -724 -479}\special{pa -693 -359}%
+\special{pa -661 -239}\special{pa -630 -120}\special{pa -598 0}\special{pa -567 120}%
+\special{pa -535 239}\special{pa -516 315}%
+\special{fp}%
+\special{pa -787 -794}\special{pa -756 -680}\special{pa -724 -567}\special{pa -693 -454}%
+\special{pa -661 -340}\special{pa -630 -227}\special{pa -598 -113}\special{pa -567 0}%
+\special{pa -535 113}\special{pa -504 227}\special{pa -479 315}%
+\special{fp}%
+\special{pa -787 -857}\special{pa -756 -750}\special{pa -724 -643}\special{pa -693 -535}%
+\special{pa -661 -428}\special{pa -630 -321}\special{pa -598 -214}\special{pa -567 -107}%
+\special{pa -535 0}\special{pa -504 107}\special{pa -472 214}\special{pa -443 315}%
+\special{fp}%
+\special{pa -787 -907}\special{pa -756 -806}\special{pa -724 -706}\special{pa -693 -605}%
+\special{pa -661 -504}\special{pa -630 -403}\special{pa -598 -302}\special{pa -567 -202}%
+\special{pa -535 -101}\special{pa -504 0}\special{pa -472 101}\special{pa -441 202}%
+\special{pa -409 302}\special{pa -406 315}%
+\special{fp}%
+\special{pa -787 -945}\special{pa -756 -850}\special{pa -724 -756}\special{pa -693 -661}%
+\special{pa -661 -567}\special{pa -630 -472}\special{pa -598 -378}\special{pa -567 -283}%
+\special{pa -535 -189}\special{pa -504 -94}\special{pa -472 0}\special{pa -441 94}%
+\special{pa -409 189}\special{pa -378 283}\special{pa -367 315}%
+\special{fp}%
+\special{pa -787 -970}\special{pa -756 -882}\special{pa -724 -794}\special{pa -693 -706}%
+\special{pa -661 -617}\special{pa -630 -529}\special{pa -598 -441}\special{pa -567 -353}%
+\special{pa -535 -265}\special{pa -504 -176}\special{pa -472 -88}\special{pa -441 0}%
+\special{pa -409 88}\special{pa -378 176}\special{pa -346 265}\special{pa -328 315}%
+\special{fp}%
+\special{pa -787 -983}\special{pa -756 -901}\special{pa -724 -819}\special{pa -693 -737}%
+\special{pa -661 -655}\special{pa -630 -573}\special{pa -598 -491}\special{pa -567 -409}%
+\special{pa -535 -328}\special{pa -504 -246}\special{pa -472 -164}\special{pa -441 -82}%
+\special{pa -409 0}\special{pa -378 82}\special{pa -346 164}\special{pa -315 246}%
+\special{pa -288 315}%
+\special{fp}%
+\special{pa -787 -983}\special{pa -756 -907}\special{pa -724 -831}\special{pa -693 -756}%
+\special{pa -661 -680}\special{pa -630 -605}\special{pa -598 -529}\special{pa -567 -454}%
+\special{pa -535 -378}\special{pa -504 -302}\special{pa -472 -227}\special{pa -441 -151}%
+\special{pa -409 -76}\special{pa -378 0}\special{pa -346 76}\special{pa -315 151}%
+\special{pa -283 227}\special{pa -252 302}\special{pa -247 315}%
+\special{fp}%
+\special{pa -787 -970}\special{pa -756 -901}\special{pa -724 -831}\special{pa -693 -762}%
+\special{pa -661 -693}\special{pa -630 -624}\special{pa -598 -554}\special{pa -567 -485}%
+\special{pa -535 -416}\special{pa -504 -346}\special{pa -472 -277}\special{pa -441 -208}%
+\special{pa -409 -139}\special{pa -378 -69}\special{pa -346 0}\special{pa -315 69}%
+\special{pa -283 139}\special{pa -252 208}\special{pa -220 277}\special{pa -203 315}%
+\special{fp}%
+\special{pa -787 -945}\special{pa -756 -882}\special{pa -724 -819}\special{pa -693 -756}%
+\special{pa -661 -693}\special{pa -630 -630}\special{pa -598 -567}\special{pa -567 -504}%
+\special{pa -535 -441}\special{pa -504 -378}\special{pa -472 -315}\special{pa -441 -252}%
+\special{pa -409 -189}\special{pa -378 -126}\special{pa -346 -63}\special{pa -315 0}%
+\special{pa -283 63}\special{pa -252 126}\special{pa -220 189}\special{pa -189 252}%
+\special{pa -157 315}%
+\special{fp}%
+\special{pa -787 -907}\special{pa -756 -850}\special{pa -724 -794}\special{pa -693 -737}%
+\special{pa -661 -680}\special{pa -630 -624}\special{pa -598 -567}\special{pa -567 -510}%
+\special{pa -535 -454}\special{pa -504 -397}\special{pa -472 -340}\special{pa -441 -283}%
+\special{pa -409 -227}\special{pa -378 -170}\special{pa -346 -113}\special{pa -315 -57}%
+\special{pa -283 0}\special{pa -252 57}\special{pa -220 113}\special{pa -189 170}%
+\special{pa -157 227}\special{pa -126 283}\special{pa -108 315}%
+\special{fp}%
+\special{pa -787 -857}\special{pa -756 -806}\special{pa -724 -756}\special{pa -693 -706}%
+\special{pa -661 -655}\special{pa -630 -605}\special{pa -598 -554}\special{pa -567 -504}%
+\special{pa -535 -454}\special{pa -504 -403}\special{pa -472 -353}\special{pa -441 -302}%
+\special{pa -409 -252}\special{pa -378 -202}\special{pa -346 -151}\special{pa -315 -101}%
+\special{pa -283 -50}\special{pa -252 0}\special{pa -220 50}\special{pa -189 101}%
+\special{pa -157 151}\special{pa -126 202}\special{pa -94 252}\special{pa -63 302}%
+\special{pa -55 315}%
+\special{fp}%
+\special{pa -787 -794}\special{pa -756 -750}\special{pa -724 -706}\special{pa -693 -661}%
+\special{pa -661 -617}\special{pa -630 -573}\special{pa -598 -529}\special{pa -567 -485}%
+\special{pa -535 -441}\special{pa -504 -397}\special{pa -472 -353}\special{pa -441 -309}%
+\special{pa -409 -265}\special{pa -378 -220}\special{pa -346 -176}\special{pa -315 -132}%
+\special{pa -283 -88}\special{pa -252 -44}\special{pa -220 0}\special{pa -189 44}%
+\special{pa -157 88}\special{pa -126 132}\special{pa -94 176}\special{pa -63 220}%
+\special{pa -31 265}\special{pa 0 309}\special{pa 4 315}%
+\special{fp}%
+\special{pa -787 -718}\special{pa -756 -680}\special{pa -724 -643}\special{pa -693 -605}%
+\special{pa -661 -567}\special{pa -630 -529}\special{pa -598 -491}\special{pa -567 -454}%
+\special{pa -535 -416}\special{pa -504 -378}\special{pa -472 -340}\special{pa -441 -302}%
+\special{pa -409 -265}\special{pa -378 -227}\special{pa -346 -189}\special{pa -315 -151}%
+\special{pa -283 -113}\special{pa -252 -76}\special{pa -220 -38}\special{pa -189 0}%
+\special{pa -157 38}\special{pa -126 76}\special{pa -94 113}\special{pa -63 151}\special{pa -31 189}%
+\special{pa 0 227}\special{pa 31 265}\special{pa 63 302}\special{pa 73 315}%
+\special{fp}%
+\special{pa -787 -630}\special{pa -756 -598}\special{pa -724 -567}\special{pa -693 -535}%
+\special{pa -661 -504}\special{pa -630 -472}\special{pa -598 -441}\special{pa -567 -409}%
+\special{pa -535 -378}\special{pa -504 -346}\special{pa -472 -315}\special{pa -441 -283}%
+\special{pa -409 -252}\special{pa -378 -220}\special{pa -346 -189}\special{pa -315 -157}%
+\special{pa -283 -126}\special{pa -252 -94}\special{pa -220 -63}\special{pa -189 -31}%
+\special{pa -157 0}\special{pa -126 31}\special{pa -94 63}\special{pa -63 94}\special{pa -31 126}%
+\special{pa 0 157}\special{pa 31 189}\special{pa 63 220}\special{pa 94 252}\special{pa 126 283}%
+\special{pa 157 315}%
+\special{fp}%
+\special{pa -787 -529}\special{pa -756 -504}\special{pa -724 -479}\special{pa -693 -454}%
+\special{pa -661 -428}\special{pa -630 -403}\special{pa -598 -378}\special{pa -567 -353}%
+\special{pa -535 -328}\special{pa -504 -302}\special{pa -472 -277}\special{pa -441 -252}%
+\special{pa -409 -227}\special{pa -378 -202}\special{pa -346 -176}\special{pa -315 -151}%
+\special{pa -283 -126}\special{pa -252 -101}\special{pa -220 -76}\special{pa -189 -50}%
+\special{pa -157 -25}\special{pa -126 0}\special{pa -94 25}\special{pa -63 50}\special{pa -31 76}%
+\special{pa 0 101}\special{pa 31 126}\special{pa 63 151}\special{pa 94 176}\special{pa 126 202}%
+\special{pa 157 227}\special{pa 189 252}\special{pa 220 277}\special{pa 252 302}\special{pa 268 315}%
+\special{fp}%
+\special{pa -787 -416}\special{pa -756 -397}\special{pa -724 -378}\special{pa -693 -359}%
+\special{pa -661 -340}\special{pa -630 -321}\special{pa -598 -302}\special{pa -567 -283}%
+\special{pa -535 -265}\special{pa -504 -246}\special{pa -472 -227}\special{pa -441 -208}%
+\special{pa -409 -189}\special{pa -378 -170}\special{pa -346 -151}\special{pa -315 -132}%
+\special{pa -283 -113}\special{pa -252 -94}\special{pa -220 -76}\special{pa -189 -57}%
+\special{pa -157 -38}\special{pa -126 -19}\special{pa -94 0}\special{pa -63 19}\special{pa -31 38}%
+\special{pa 0 57}\special{pa 31 76}\special{pa 63 94}\special{pa 94 113}\special{pa 126 132}%
+\special{pa 157 151}\special{pa 189 170}\special{pa 220 189}\special{pa 252 208}\special{pa 283 227}%
+\special{pa 315 246}\special{pa 346 265}\special{pa 378 283}\special{pa 409 302}\special{pa 430 315}%
+\special{fp}%
+\special{pa -787 -290}\special{pa -756 -277}\special{pa -724 -265}\special{pa -693 -252}%
+\special{pa -661 -239}\special{pa -630 -227}\special{pa -598 -214}\special{pa -567 -202}%
+\special{pa -535 -189}\special{pa -504 -176}\special{pa -472 -164}\special{pa -441 -151}%
+\special{pa -409 -139}\special{pa -378 -126}\special{pa -346 -113}\special{pa -315 -101}%
+\special{pa -283 -88}\special{pa -252 -76}\special{pa -220 -63}\special{pa -189 -50}%
+\special{pa -157 -38}\special{pa -126 -25}\special{pa -94 -13}\special{pa -63 0}\special{pa -31 13}%
+\special{pa 0 25}\special{pa 31 38}\special{pa 63 50}\special{pa 94 63}\special{pa 126 76}%
+\special{pa 157 88}\special{pa 189 101}\special{pa 220 113}\special{pa 252 126}\special{pa 283 139}%
+\special{pa 315 151}\special{pa 346 164}\special{pa 378 176}\special{pa 409 189}\special{pa 441 202}%
+\special{pa 472 214}\special{pa 504 227}\special{pa 535 239}\special{pa 567 252}\special{pa 598 265}%
+\special{pa 630 277}\special{pa 661 290}\special{pa 693 302}\special{pa 724 315}%
+\special{fp}%
+\special{pa -787 -151}\special{pa -756 -145}\special{pa -724 -139}\special{pa -693 -132}%
+\special{pa -661 -126}\special{pa -630 -120}\special{pa -598 -113}\special{pa -567 -107}%
+\special{pa -535 -101}\special{pa -504 -94}\special{pa -472 -88}\special{pa -441 -82}%
+\special{pa -409 -76}\special{pa -378 -69}\special{pa -346 -63}\special{pa -315 -57}%
+\special{pa -283 -50}\special{pa -252 -44}\special{pa -220 -38}\special{pa -189 -31}%
+\special{pa -157 -25}\special{pa -126 -19}\special{pa -94 -13}\special{pa -63 -6}%
+\special{pa -31 0}\special{pa 0 6}\special{pa 31 13}\special{pa 63 19}\special{pa 94 25}%
+\special{pa 126 31}\special{pa 157 38}\special{pa 189 44}\special{pa 220 50}\special{pa 252 57}%
+\special{pa 283 63}\special{pa 315 69}\special{pa 346 76}\special{pa 378 82}\special{pa 409 88}%
+\special{pa 441 94}\special{pa 472 101}\special{pa 504 107}\special{pa 535 113}\special{pa 567 120}%
+\special{pa 598 126}\special{pa 630 132}\special{pa 661 139}\special{pa 693 145}\special{pa 724 151}%
+\special{pa 756 157}\special{pa 787 164}%
+\special{fp}%
+\special{pa -787 0}\special{pa -756 0}\special{pa -724 0}\special{pa -693 0}\special{pa -661 0}%
+\special{pa -630 0}\special{pa -598 0}\special{pa -567 0}\special{pa -535 0}\special{pa -504 0}%
+\special{pa -472 0}\special{pa -441 0}\special{pa -409 0}\special{pa -378 0}\special{pa -346 0}%
+\special{pa -315 0}\special{pa -283 0}\special{pa -252 0}\special{pa -220 0}\special{pa -189 0}%
+\special{pa -157 0}\special{pa -126 0}\special{pa -94 0}\special{pa -63 0}\special{pa -31 0}%
+\special{pa 0 0}\special{pa 31 0}\special{pa 63 0}\special{pa 94 0}\special{pa 126 0}%
+\special{pa 157 0}\special{pa 189 0}\special{pa 220 0}\special{pa 252 0}\special{pa 283 0}%
+\special{pa 315 0}\special{pa 346 0}\special{pa 378 0}\special{pa 409 0}\special{pa 441 0}%
+\special{pa 472 0}\special{pa 504 0}\special{pa 535 0}\special{pa 567 0}\special{pa 598 0}%
+\special{pa 630 0}\special{pa 661 0}\special{pa 693 0}\special{pa 724 0}\special{pa 756 0}%
+\special{pa 787 0}%
+\special{fp}%
+\special{pa -787 164}\special{pa -756 157}\special{pa -724 151}\special{pa -693 145}%
+\special{pa -661 139}\special{pa -630 132}\special{pa -598 126}\special{pa -567 120}%
+\special{pa -535 113}\special{pa -504 107}\special{pa -472 101}\special{pa -441 94}%
+\special{pa -409 88}\special{pa -378 82}\special{pa -346 76}\special{pa -315 69}\special{pa -283 63}%
+\special{pa -252 57}\special{pa -220 50}\special{pa -189 44}\special{pa -157 38}\special{pa -126 31}%
+\special{pa -94 25}\special{pa -63 19}\special{pa -31 13}\special{pa 0 6}\special{pa 31 0}%
+\special{pa 63 -6}\special{pa 94 -13}\special{pa 126 -19}\special{pa 157 -25}\special{pa 189 -31}%
+\special{pa 220 -38}\special{pa 252 -44}\special{pa 283 -50}\special{pa 315 -57}\special{pa 346 -63}%
+\special{pa 378 -69}\special{pa 409 -76}\special{pa 441 -82}\special{pa 472 -88}\special{pa 504 -94}%
+\special{pa 535 -101}\special{pa 567 -107}\special{pa 598 -113}\special{pa 630 -120}%
+\special{pa 661 -126}\special{pa 693 -132}\special{pa 724 -139}\special{pa 756 -145}%
+\special{pa 787 -151}%
+\special{fp}%
+\special{pa -724 315}\special{pa -693 302}\special{pa -661 290}\special{pa -630 277}%
+\special{pa -598 265}\special{pa -567 252}\special{pa -535 239}\special{pa -504 227}%
+\special{pa -472 214}\special{pa -441 202}\special{pa -409 189}\special{pa -378 176}%
+\special{pa -346 164}\special{pa -315 151}\special{pa -283 139}\special{pa -252 126}%
+\special{pa -220 113}\special{pa -189 101}\special{pa -157 88}\special{pa -126 76}%
+\special{pa -94 63}\special{pa -63 50}\special{pa -31 38}\special{pa 0 25}\special{pa 31 13}%
+\special{pa 63 0}\special{pa 94 -13}\special{pa 126 -25}\special{pa 157 -38}\special{pa 189 -50}%
+\special{pa 220 -63}\special{pa 252 -76}\special{pa 283 -88}\special{pa 315 -101}%
+\special{pa 346 -113}\special{pa 378 -126}\special{pa 409 -139}\special{pa 441 -151}%
+\special{pa 472 -164}\special{pa 504 -176}\special{pa 535 -189}\special{pa 567 -202}%
+\special{pa 598 -214}\special{pa 630 -227}\special{pa 661 -239}\special{pa 693 -252}%
+\special{pa 724 -265}\special{pa 756 -277}\special{pa 787 -290}%
+\special{fp}%
+\special{pa -430 315}\special{pa -409 302}\special{pa -378 283}\special{pa -346 265}%
+\special{pa -315 246}\special{pa -283 227}\special{pa -252 208}\special{pa -220 189}%
+\special{pa -189 170}\special{pa -157 151}\special{pa -126 132}\special{pa -94 113}%
+\special{pa -63 94}\special{pa -31 76}\special{pa 0 57}\special{pa 31 38}\special{pa 63 19}%
+\special{pa 94 0}\special{pa 126 -19}\special{pa 157 -38}\special{pa 189 -57}\special{pa 220 -76}%
+\special{pa 252 -94}\special{pa 283 -113}\special{pa 315 -132}\special{pa 346 -151}%
+\special{pa 378 -170}\special{pa 409 -189}\special{pa 441 -208}\special{pa 472 -227}%
+\special{pa 504 -246}\special{pa 535 -265}\special{pa 567 -283}\special{pa 598 -302}%
+\special{pa 630 -321}\special{pa 661 -340}\special{pa 693 -359}\special{pa 724 -378}%
+\special{pa 756 -397}\special{pa 787 -416}%
+\special{fp}%
+\special{pa -268 315}\special{pa -252 302}\special{pa -220 277}\special{pa -189 252}%
+\special{pa -157 227}\special{pa -126 202}\special{pa -94 176}\special{pa -63 151}%
+\special{pa -31 126}\special{pa 0 101}\special{pa 31 76}\special{pa 63 50}\special{pa 94 25}%
+\special{pa 126 0}\special{pa 157 -25}\special{pa 189 -50}\special{pa 220 -76}\special{pa 252 -101}%
+\special{pa 283 -126}\special{pa 315 -151}\special{pa 346 -176}\special{pa 378 -202}%
+\special{pa 409 -227}\special{pa 441 -252}\special{pa 472 -277}\special{pa 504 -302}%
+\special{pa 535 -328}\special{pa 567 -353}\special{pa 598 -378}\special{pa 630 -403}%
+\special{pa 661 -428}\special{pa 693 -454}\special{pa 724 -479}\special{pa 756 -504}%
+\special{pa 787 -529}%
+\special{fp}%
+\special{pa -157 315}\special{pa -126 283}\special{pa -94 252}\special{pa -63 220}%
+\special{pa -31 189}\special{pa 0 157}\special{pa 31 126}\special{pa 63 94}\special{pa 94 63}%
+\special{pa 126 31}\special{pa 157 0}\special{pa 189 -31}\special{pa 220 -63}\special{pa 252 -94}%
+\special{pa 283 -126}\special{pa 315 -157}\special{pa 346 -189}\special{pa 378 -220}%
+\special{pa 409 -252}\special{pa 441 -283}\special{pa 472 -315}\special{pa 504 -346}%
+\special{pa 535 -378}\special{pa 567 -409}\special{pa 598 -441}\special{pa 630 -472}%
+\special{pa 661 -504}\special{pa 693 -535}\special{pa 724 -567}\special{pa 756 -598}%
+\special{pa 787 -630}%
+\special{fp}%
+\special{pa -73 315}\special{pa -63 302}\special{pa -31 265}\special{pa 0 227}\special{pa 31 189}%
+\special{pa 63 151}\special{pa 94 113}\special{pa 126 76}\special{pa 157 38}\special{pa 189 0}%
+\special{pa 220 -38}\special{pa 252 -76}\special{pa 283 -113}\special{pa 315 -151}%
+\special{pa 346 -189}\special{pa 378 -227}\special{pa 409 -265}\special{pa 441 -302}%
+\special{pa 472 -340}\special{pa 504 -378}\special{pa 535 -416}\special{pa 567 -454}%
+\special{pa 598 -491}\special{pa 630 -529}\special{pa 661 -567}\special{pa 693 -605}%
+\special{pa 724 -643}\special{pa 756 -680}\special{pa 787 -718}%
+\special{fp}%
+\special{pa -4 315}\special{pa 0 309}\special{pa 31 265}\special{pa 63 220}\special{pa 94 176}%
+\special{pa 126 132}\special{pa 157 88}\special{pa 189 44}\special{pa 220 0}\special{pa 252 -44}%
+\special{pa 283 -88}\special{pa 315 -132}\special{pa 346 -176}\special{pa 378 -220}%
+\special{pa 409 -265}\special{pa 441 -309}\special{pa 472 -353}\special{pa 504 -397}%
+\special{pa 535 -441}\special{pa 567 -485}\special{pa 598 -529}\special{pa 630 -573}%
+\special{pa 661 -617}\special{pa 693 -661}\special{pa 724 -706}\special{pa 756 -750}%
+\special{pa 787 -794}%
+\special{fp}%
+\special{pa 55 315}\special{pa 63 302}\special{pa 94 252}\special{pa 126 202}\special{pa 157 151}%
+\special{pa 189 101}\special{pa 220 50}\special{pa 252 0}\special{pa 283 -50}\special{pa 315 -101}%
+\special{pa 346 -151}\special{pa 378 -202}\special{pa 409 -252}\special{pa 441 -302}%
+\special{pa 472 -353}\special{pa 504 -403}\special{pa 535 -454}\special{pa 567 -504}%
+\special{pa 598 -554}\special{pa 630 -605}\special{pa 661 -655}\special{pa 693 -706}%
+\special{pa 724 -756}\special{pa 756 -806}\special{pa 787 -857}%
+\special{fp}%
+\special{pa 108 315}\special{pa 126 283}\special{pa 157 227}\special{pa 189 170}\special{pa 220 113}%
+\special{pa 252 57}\special{pa 283 0}\special{pa 315 -57}\special{pa 346 -113}\special{pa 378 -170}%
+\special{pa 409 -227}\special{pa 441 -283}\special{pa 472 -340}\special{pa 504 -397}%
+\special{pa 535 -454}\special{pa 567 -510}\special{pa 598 -567}\special{pa 630 -624}%
+\special{pa 661 -680}\special{pa 693 -737}\special{pa 724 -794}\special{pa 756 -850}%
+\special{pa 787 -907}%
+\special{fp}%
+\special{pa 157 315}\special{pa 189 252}\special{pa 220 189}\special{pa 252 126}\special{pa 283 63}%
+\special{pa 315 0}\special{pa 346 -63}\special{pa 378 -126}\special{pa 409 -189}\special{pa 441 -252}%
+\special{pa 472 -315}\special{pa 504 -378}\special{pa 535 -441}\special{pa 567 -504}%
+\special{pa 598 -567}\special{pa 630 -630}\special{pa 661 -693}\special{pa 693 -756}%
+\special{pa 724 -819}\special{pa 756 -882}\special{pa 787 -945}%
+\special{fp}%
+\special{pa 203 315}\special{pa 220 277}\special{pa 252 208}\special{pa 283 139}\special{pa 315 69}%
+\special{pa 346 0}\special{pa 378 -69}\special{pa 409 -139}\special{pa 441 -208}\special{pa 472 -277}%
+\special{pa 504 -346}\special{pa 535 -416}\special{pa 567 -485}\special{pa 598 -554}%
+\special{pa 630 -624}\special{pa 661 -693}\special{pa 693 -762}\special{pa 724 -831}%
+\special{pa 756 -901}\special{pa 787 -970}%
+\special{fp}%
+\special{pa 247 315}\special{pa 252 302}\special{pa 283 227}\special{pa 315 151}\special{pa 346 76}%
+\special{pa 378 0}\special{pa 409 -76}\special{pa 441 -151}\special{pa 472 -227}\special{pa 504 -302}%
+\special{pa 535 -378}\special{pa 567 -454}\special{pa 598 -529}\special{pa 630 -605}%
+\special{pa 661 -680}\special{pa 693 -756}\special{pa 724 -831}\special{pa 756 -907}%
+\special{pa 787 -983}%
+\special{fp}%
+\special{pa 288 315}\special{pa 315 246}\special{pa 346 164}\special{pa 378 82}\special{pa 409 0}%
+\special{pa 441 -82}\special{pa 472 -164}\special{pa 504 -246}\special{pa 535 -328}%
+\special{pa 567 -409}\special{pa 598 -491}\special{pa 630 -573}\special{pa 661 -655}%
+\special{pa 693 -737}\special{pa 724 -819}\special{pa 756 -901}\special{pa 787 -983}%
+\special{fp}%
+\special{pa 328 315}\special{pa 346 265}\special{pa 378 176}\special{pa 409 88}\special{pa 441 0}%
+\special{pa 472 -88}\special{pa 504 -176}\special{pa 535 -265}\special{pa 567 -353}%
+\special{pa 598 -441}\special{pa 630 -529}\special{pa 661 -617}\special{pa 693 -706}%
+\special{pa 724 -794}\special{pa 756 -882}\special{pa 787 -970}%
+\special{fp}%
+\special{pa 367 315}\special{pa 378 283}\special{pa 409 189}\special{pa 441 94}\special{pa 472 0}%
+\special{pa 504 -94}\special{pa 535 -189}\special{pa 567 -283}\special{pa 598 -378}%
+\special{pa 630 -472}\special{pa 661 -567}\special{pa 693 -661}\special{pa 724 -756}%
+\special{pa 756 -850}\special{pa 787 -945}%
+\special{fp}%
+\special{pa 406 315}\special{pa 409 302}\special{pa 441 202}\special{pa 472 101}\special{pa 504 0}%
+\special{pa 535 -101}\special{pa 567 -202}\special{pa 598 -302}\special{pa 630 -403}%
+\special{pa 661 -504}\special{pa 693 -605}\special{pa 724 -706}\special{pa 756 -806}%
+\special{pa 787 -907}%
+\special{fp}%
+\special{pa 443 315}\special{pa 472 214}\special{pa 504 107}\special{pa 535 0}\special{pa 567 -107}%
+\special{pa 598 -214}\special{pa 630 -321}\special{pa 661 -428}\special{pa 693 -535}%
+\special{pa 724 -643}\special{pa 756 -750}\special{pa 787 -857}%
+\special{fp}%
+\special{pa 479 315}\special{pa 504 227}\special{pa 535 113}\special{pa 567 0}\special{pa 598 -113}%
+\special{pa 630 -227}\special{pa 661 -340}\special{pa 693 -454}\special{pa 724 -567}%
+\special{pa 756 -680}\special{pa 787 -794}%
+\special{fp}%
+\special{pa 516 315}\special{pa 535 239}\special{pa 567 120}\special{pa 598 0}\special{pa 630 -120}%
+\special{pa 661 -239}\special{pa 693 -359}\special{pa 724 -479}\special{pa 756 -598}%
+\special{pa 787 -718}%
+\special{fp}%
+\special{pa 551 315}\special{pa 567 252}\special{pa 598 126}\special{pa 630 0}\special{pa 661 -126}%
+\special{pa 693 -252}\special{pa 724 -378}\special{pa 756 -504}\special{pa 787 -630}%
+\special{fp}%
+\special{pa 586 315}\special{pa 598 265}\special{pa 630 132}\special{pa 661 0}\special{pa 693 -132}%
+\special{pa 724 -265}\special{pa 756 -397}\special{pa 787 -529}%
+\special{fp}%
+\special{pa 621 315}\special{pa 630 277}\special{pa 661 139}\special{pa 693 0}\special{pa 724 -139}%
+\special{pa 756 -277}\special{pa 787 -416}%
+\special{fp}%
+\special{pa 656 315}\special{pa 661 290}\special{pa 693 145}\special{pa 724 0}\special{pa 756 -145}%
+\special{pa 787 -290}%
+\special{fp}%
+\special{pa 690 315}\special{pa 693 302}\special{pa 724 151}\special{pa 756 0}\special{pa 787 -151}%
+\special{fp}%
+\special{pa 724 315}\special{pa 756 157}\special{pa 787 0}%
+\special{fp}%
+\special{pn 8}%
+\special{pa -787 0}\special{pa 772 0}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 713 24}\special{pa 787 0}\special{pa 713 -24}\special{pa 713 0}\special{pa 713 24}%
+\special{sh 1}\special{ip}%
+\special{pn 1}%
+\special{pa 713 24}\special{pa 787 0}\special{pa 713 -24}\special{pa 713 0}\special{pa 713 24}%
+\special{pa 787 0}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 8}%
+\special{pa 0 315}\special{pa 0 -1244}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 24 -1185}\special{pa 0 -1260}\special{pa -24 -1185}\special{pa 0 -1185}%
+\special{pa 24 -1185}\special{sh 1}\special{ip}%
+\special{pn 1}%
+\special{pa 24 -1185}\special{pa 0 -1260}\special{pa -24 -1185}\special{pa 0 -1185}%
+\special{pa 24 -1185}\special{pa 0 -1260}%
+\special{fp}%
+\special{pn 8}%
+\settowidth{\Width}{$x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(5.0500,0.0000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{\Depth}%
+\put(0.0000,8.0500){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+%
+\settowidth{\Width}{O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(-0.0500,-0.0500){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/bbdata.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/bbdata.pdf
new file mode 100644
index 0000000000..39c5ba7d29
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/bbdata.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/bezier3d1.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/bezier3d1.tex
new file mode 100644
index 0000000000..477861e1c5
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/bezier3d1.tex
@@ -0,0 +1,123 @@
+%%% /Users/Hannya/ketcindy/ketwork/template.tex 2016-8-14 11:12
+%%% template.sce 2016-8-14 11:12
+{\unitlength=8mm%
+\begin{picture}%
+( 9.74000, 5.94000)( -4.74000, -1.94000)%
+\special{pn 8}%
+%
+\settowidth{\Width}{$x$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-3.2520,-1.0065){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(3.3782,-1.4998){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+%
+\settowidth{\Width}{$z$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$z$}\settodepth{\Depth}{$z$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(0.0000,3.9050){\hspace*{\Width}\raisebox{\Height}{$z$}}%
+%
+%
+\special{pa 1209 -374}\special{pa -967 299}%
+\special{fp}%
+\special{pa -1009 -448}\special{pa 1009 448}%
+\special{fp}%
+\special{pa 0 611}\special{pa 0 -1170}%
+\special{fp}%
+\special{pa -903 254}\special{pa -967 299}\special{pa -888 300}\special{pa -896 277}%
+\special{pa -903 254}\special{sh 1}\special{ip}%
+\special{pn 1}%
+\special{pa -903 254}\special{pa -967 299}\special{pa -888 300}\special{pa -896 277}%
+\special{pa -903 254}\special{pa -967 299}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 931 440}\special{pa 1009 448}\special{pa 951 395}\special{pa 941 418}%
+\special{pa 931 440}\special{sh 1}\special{ip}%
+\special{pn 1}%
+\special{pa 931 440}\special{pa 1009 448}\special{pa 951 395}\special{pa 941 418}%
+\special{pa 931 440}\special{pa 1009 448}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 24 -1095}\special{pa 0 -1170}\special{pa -24 -1095}\special{pa 0 -1095}%
+\special{pa 24 -1095}\special{sh 1}\special{ip}%
+\special{pn 1}%
+\special{pa 24 -1095}\special{pa 0 -1170}\special{pa -24 -1095}\special{pa 0 -1095}%
+\special{pa 24 -1095}\special{pa 0 -1170}%
+\special{fp}%
+\special{pn 8}%
+\settowidth{\Width}{O}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{\Depth}%
+\put(0.1500,0.1500){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+%
+\special{pa -484 150}\special{pa -437 81}\special{pa -387 31}\special{pa -335 -1}%
+\special{pa -282 -19}\special{pa -227 -23}\special{pa -171 -16}\special{pa -115 0}%
+\special{pa -60 23}\special{pa -5 52}\special{pa 49 84}\special{pa 101 116}\special{pa 151 148}%
+\special{pa 199 177}\special{pa 243 201}\special{pa 284 219}\special{pa 321 227}\special{pa 354 225}%
+\special{pa 382 209}\special{pa 404 179}\special{pa 423 90}\special{pa 433 13}\special{pa 435 -52}%
+\special{pa 429 -108}\special{pa 417 -154}\special{pa 399 -193}\special{pa 376 -226}%
+\special{pa 349 -253}\special{pa 319 -277}\special{pa 286 -298}\special{pa 251 -319}%
+\special{pa 215 -339}\special{pa 178 -360}\special{pa 143 -384}\special{pa 108 -411}%
+\special{pa 76 -444}\special{pa 47 -483}\special{pa 21 -530}\special{pa 0 -585}%
+\special{fp}%
+\special{pn 1}%
+\special{pa -475 141}\special{pa -482 138}\special{pa -489 139}\special{pa -494 144}%
+\special{pa -495 152}\special{pa -492 158}\special{pa -485 161}\special{pa -478 160}%
+\special{pa -473 155}\special{pa -472 148}\special{pa -475 141}\special{sh 1}\special{fp}%
+\special{pa 412 171}\special{pa 406 168}\special{pa 398 169}\special{pa 393 174}\special{pa 392 181}%
+\special{pa 395 188}\special{pa 402 191}\special{pa 409 190}\special{pa 414 185}\special{pa 415 177}%
+\special{pa 412 171}\special{sh 1}\special{fp}%
+\special{pa 8 -593}\special{pa 2 -597}\special{pa -5 -596}\special{pa -11 -590}\special{pa -12 -583}%
+\special{pa -8 -577}\special{pa -2 -573}\special{pa 5 -575}\special{pa 11 -580}\special{pa 12 -587}%
+\special{pa 8 -593}\special{sh 1}\special{fp}%
+\special{pa -187 -360}\special{pa -194 -363}\special{pa -201 -362}\special{pa -206 -357}%
+\special{pa -207 -350}\special{pa -204 -343}\special{pa -197 -340}\special{pa -190 -341}%
+\special{pa -185 -346}\special{pa -184 -354}\special{pa -187 -360}\special{sh 1}\special{fp}%
+\special{pa 290 414}\special{pa 283 410}\special{pa 276 411}\special{pa 271 417}\special{pa 270 424}%
+\special{pa 273 430}\special{pa 279 434}\special{pa 287 433}\special{pa 292 427}\special{pa 293 420}%
+\special{pa 290 414}\special{sh 1}\special{fp}%
+\special{pa 563 -438}\special{pa 557 -441}\special{pa 549 -440}\special{pa 544 -435}%
+\special{pa 543 -428}\special{pa 546 -421}\special{pa 553 -418}\special{pa 560 -419}%
+\special{pa 565 -424}\special{pa 567 -432}\special{pa 563 -438}\special{sh 1}\special{fp}%
+\special{pa 126 -212}\special{pa 119 -215}\special{pa 112 -214}\special{pa 107 -209}%
+\special{pa 106 -201}\special{pa 109 -195}\special{pa 115 -192}\special{pa 123 -193}%
+\special{pa 128 -198}\special{pa 129 -205}\special{pa 126 -212}\special{sh 1}\special{fp}%
+\special{pn 8}%
+\settowidth{\Width}{A}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{A}\settodepth{\Depth}{A}\setlength{\Height}{-\Height}%
+\put(-1.5352,-0.5252){\hspace*{\Width}\raisebox{\Height}{A}}%
+%
+%
+\settowidth{\Width}{B}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{B}\settodepth{\Depth}{B}\setlength{\Height}{\Depth}%
+\put(1.3318,-0.5191){\hspace*{\Width}\raisebox{\Height}{B}}%
+%
+%
+\settowidth{\Width}{C}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{C}\settodepth{\Depth}{C}\setlength{\Height}{\Depth}%
+\put(0.0500,1.9075){\hspace*{\Width}\raisebox{\Height}{C}}%
+%
+%
+\settowidth{\Width}{D}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{D}\settodepth{\Depth}{D}\setlength{\Height}{\Depth}%
+\put(-0.5703,1.1665){\hspace*{\Width}\raisebox{\Height}{D}}%
+%
+%
+\settowidth{\Width}{E}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{E}\settodepth{\Depth}{E}\setlength{\Height}{-\Height}%
+\put(0.9432,-1.3898){\hspace*{\Width}\raisebox{\Height}{E}}%
+%
+%
+\settowidth{\Width}{F}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{F}\settodepth{\Depth}{F}\setlength{\Height}{\Depth}%
+\put(1.8116,1.4146){\hspace*{\Width}\raisebox{\Height}{F}}%
+%
+%
+\settowidth{\Width}{G}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{G}\settodepth{\Depth}{G}\setlength{\Height}{\Depth}%
+\put(0.4222,0.6951){\hspace*{\Width}\raisebox{\Height}{G}}%
+%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/binvsnormal.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/binvsnormal.tex
new file mode 100644
index 0000000000..3b5a66a1c6
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/binvsnormal.tex
@@ -0,0 +1,94 @@
+%%% fig.tex 2016-4-23 11:39
+%%% fig.sce 2016-4-23 11:39
+{\unitlength=8mm%
+\begin{picture}%
+( 11.02000, 6.60000)( -0.82000, -0.80000)%
+\special{pn 8}%
+%
+\special{pa 0 -38}\special{pa 315 -254}\special{pa 630 -762}\special{pa 945 -1354}%
+\special{pa 1260 -1580}\special{pa 1575 -1264}\special{pa 1890 -702}\special{pa 2205 -268}%
+\special{pa 2520 -67}\special{pa 2835 -10}\special{pa 3150 -1}%
+\special{fp}%
+\special{pn 8}%
+\special{pa -4 -57}\special{pa 4 -59}\special{fp}\special{pa 33 -70}\special{pa 41 -72}\special{fp}%
+\special{pa 70 -84}\special{pa 78 -87}\special{fp}\special{pa 106 -100}\special{pa 114 -103}\special{fp}%
+\special{pa 141 -118}\special{pa 148 -122}\special{fp}\special{pa 175 -138}\special{pa 182 -142}\special{fp}%
+\special{pa 208 -160}\special{pa 215 -165}\special{fp}\special{pa 240 -184}\special{pa 246 -189}\special{fp}%
+\special{pa 270 -209}\special{pa 276 -214}\special{fp}\special{pa 300 -235}\special{pa 305 -241}\special{fp}%
+\special{pa 328 -263}\special{pa 334 -268}\special{fp}\special{pa 355 -292}\special{pa 360 -298}\special{fp}%
+\special{pa 381 -321}\special{pa 387 -327}\special{fp}\special{pa 406 -352}\special{pa 411 -358}\special{fp}%
+\special{pa 430 -383}\special{pa 435 -389}\special{fp}\special{pa 454 -415}\special{pa 458 -421}\special{fp}%
+\special{pa 476 -447}\special{pa 480 -454}\special{fp}\special{pa 498 -480}\special{pa 502 -487}\special{fp}%
+\special{pa 519 -513}\special{pa 524 -520}\special{fp}\special{pa 540 -547}\special{pa 544 -554}\special{fp}%
+\special{pa 560 -581}\special{pa 564 -588}\special{fp}\special{pa 580 -615}\special{pa 584 -622}\special{fp}%
+\special{pa 599 -649}\special{pa 603 -656}\special{fp}\special{pa 618 -684}\special{pa 622 -691}\special{fp}%
+\special{pa 637 -719}\special{pa 641 -726}\special{fp}\special{pa 656 -754}\special{pa 659 -761}\special{fp}%
+\special{pa 674 -789}\special{pa 677 -796}\special{fp}\special{pa 692 -824}\special{pa 695 -831}\special{fp}%
+\special{pa 710 -859}\special{pa 713 -866}\special{fp}\special{pa 727 -894}\special{pa 731 -901}\special{fp}%
+\special{pa 745 -930}\special{pa 749 -937}\special{fp}\special{pa 763 -965}\special{pa 766 -972}\special{fp}%
+\special{pa 780 -1000}\special{pa 784 -1008}\special{fp}\special{pa 798 -1036}\special{pa 801 -1043}\special{fp}%
+\special{pa 815 -1071}\special{pa 819 -1078}\special{fp}\special{pa 833 -1106}\special{pa 837 -1114}\special{fp}%
+\special{pa 851 -1142}\special{pa 855 -1149}\special{fp}\special{pa 869 -1177}\special{pa 873 -1184}\special{fp}%
+\special{pa 887 -1212}\special{pa 891 -1219}\special{fp}\special{pa 906 -1247}\special{pa 910 -1254}\special{fp}%
+\special{pa 925 -1281}\special{pa 929 -1288}\special{fp}\special{pa 945 -1315}\special{pa 949 -1322}\special{fp}%
+\special{pa 964 -1350}\special{pa 968 -1357}\special{fp}\special{pa 985 -1383}\special{pa 990 -1390}\special{fp}%
+\special{pa 1007 -1416}\special{pa 1011 -1423}\special{fp}\special{pa 1028 -1449}\special{pa 1033 -1456}\special{fp}%
+\special{pa 1053 -1480}\special{pa 1058 -1486}\special{fp}\special{pa 1078 -1511}\special{pa 1083 -1517}\special{fp}%
+\special{pa 1105 -1540}\special{pa 1110 -1545}\special{fp}\special{pa 1134 -1566}\special{pa 1140 -1571}\special{fp}%
+\special{pa 1165 -1590}\special{pa 1172 -1594}\special{fp}\special{pa 1200 -1608}\special{pa 1208 -1610}\special{fp}%
+\special{pa 1238 -1617}\special{pa 1246 -1619}\special{fp}\special{pa 1277 -1620}\special{pa 1285 -1619}\special{fp}%
+\special{pa 1314 -1609}\special{pa 1322 -1606}\special{fp}\special{pa 1351 -1594}\special{pa 1358 -1589}\special{fp}%
+\special{pa 1382 -1569}\special{pa 1388 -1564}\special{fp}\special{pa 1413 -1545}\special{pa 1418 -1539}\special{fp}%
+\special{pa 1438 -1515}\special{pa 1443 -1509}\special{fp}\special{pa 1464 -1485}\special{pa 1469 -1478}\special{fp}%
+\special{pa 1488 -1453}\special{pa 1492 -1447}\special{fp}\special{pa 1510 -1420}\special{pa 1514 -1414}\special{fp}%
+\special{pa 1532 -1388}\special{pa 1536 -1381}\special{fp}\special{pa 1553 -1354}\special{pa 1557 -1347}\special{fp}%
+\special{pa 1572 -1320}\special{pa 1576 -1313}\special{fp}\special{pa 1592 -1286}\special{pa 1596 -1279}\special{fp}%
+\special{pa 1611 -1251}\special{pa 1615 -1244}\special{fp}\special{pa 1630 -1216}\special{pa 1633 -1209}\special{fp}%
+\special{pa 1648 -1181}\special{pa 1652 -1174}\special{fp}\special{pa 1666 -1146}\special{pa 1670 -1139}\special{fp}%
+\special{pa 1684 -1111}\special{pa 1688 -1104}\special{fp}\special{pa 1702 -1076}\special{pa 1705 -1069}\special{fp}%
+\special{pa 1720 -1040}\special{pa 1723 -1033}\special{fp}\special{pa 1737 -1005}\special{pa 1741 -998}\special{fp}%
+\special{pa 1755 -970}\special{pa 1758 -963}\special{fp}\special{pa 1772 -934}\special{pa 1776 -927}\special{fp}%
+\special{pa 1790 -899}\special{pa 1794 -892}\special{fp}\special{pa 1808 -864}\special{pa 1811 -857}\special{fp}%
+\special{pa 1826 -829}\special{pa 1829 -821}\special{fp}\special{pa 1844 -793}\special{pa 1847 -786}\special{fp}%
+\special{pa 1862 -758}\special{pa 1865 -751}\special{fp}\special{pa 1880 -723}\special{pa 1884 -716}\special{fp}%
+\special{pa 1899 -689}\special{pa 1903 -682}\special{fp}\special{pa 1918 -654}\special{pa 1922 -647}\special{fp}%
+\special{pa 1937 -619}\special{pa 1941 -613}\special{fp}\special{pa 1957 -585}\special{pa 1961 -579}\special{fp}%
+\special{pa 1977 -551}\special{pa 1981 -545}\special{fp}\special{pa 1998 -518}\special{pa 2002 -511}\special{fp}%
+\special{pa 2019 -485}\special{pa 2024 -478}\special{fp}\special{pa 2041 -452}\special{pa 2045 -445}\special{fp}%
+\special{pa 2063 -419}\special{pa 2068 -412}\special{fp}\special{pa 2087 -387}\special{pa 2092 -381}\special{fp}%
+\special{pa 2110 -356}\special{pa 2115 -349}\special{fp}\special{pa 2135 -325}\special{pa 2141 -319}\special{fp}%
+\special{pa 2162 -296}\special{pa 2167 -290}\special{fp}\special{pa 2188 -266}\special{pa 2194 -260}\special{fp}%
+\special{pa 2216 -239}\special{pa 2222 -233}\special{fp}\special{pa 2245 -212}\special{pa 2251 -206}\special{fp}%
+\special{pa 2276 -187}\special{pa 2282 -182}\special{fp}\special{pa 2307 -163}\special{pa 2314 -158}\special{fp}%
+\special{pa 2340 -141}\special{pa 2347 -137}\special{fp}\special{pa 2373 -120}\special{pa 2380 -116}\special{fp}%
+\special{pa 2409 -102}\special{pa 2416 -99}\special{fp}\special{pa 2444 -85}\special{pa 2452 -82}\special{fp}%
+\special{pa 2481 -71}\special{pa 2489 -69}\special{fp}\special{pa 2519 -59}\special{pa 2526 -56}\special{fp}%
+\special{pa 2557 -48}\special{pa 2564 -46}\special{fp}\special{pa 2595 -39}\special{pa 2603 -37}\special{fp}%
+\special{pa 2634 -31}\special{pa 2642 -29}\special{fp}\special{pa 2673 -25}\special{pa 2681 -24}\special{fp}%
+\special{pa 2712 -20}\special{pa 2720 -19}\special{fp}\special{pa 2751 -15}\special{pa 2759 -14}\special{fp}%
+\special{pa 2790 -12}\special{pa 2798 -11}\special{fp}\special{pa 2830 -9}\special{pa 2838 -9}\special{fp}%
+\special{pa 2869 -7}\special{pa 2877 -7}\special{fp}\special{pa 2909 -6}\special{pa 2917 -5}\special{fp}%
+\special{pa 2948 -4}\special{pa 2956 -4}\special{fp}\special{pa 2988 -3}\special{pa 2996 -3}\special{fp}%
+\special{pa 3027 -2}\special{pa 3035 -2}\special{fp}\special{pa 3067 -2}\special{pa 3075 -1}\special{fp}%
+\special{pa 3106 -1}\special{pa 3114 -1}\special{fp}\special{pa 3146 -1}\special{pa 3154 -1}\special{fp}%
+\special{pn 8}%
+\special{pa -258 0}\special{pa 3213 0}%
+\special{fp}%
+\special{pa 0 252}\special{pa 0 -1827}%
+\special{fp}%
+\settowidth{\Width}{$x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(10.2500,0.0000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{\Depth}%
+\put(0.0000,5.8500){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+%
+\settowidth{\Width}{O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(-0.0500,-0.0500){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/bisector.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/bisector.pdf
new file mode 100644
index 0000000000..4bf29280be
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/bisector.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/bowdata.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/bowdata.tex
new file mode 100644
index 0000000000..fce1a01104
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/bowdata.tex
@@ -0,0 +1,74 @@
+%%% fig.tex 2016-5-1 19:10
+%%% fig.sce 2016-5-1 19:10
+{\unitlength=8mm%
+\begin{picture}%
+( 4.50000, 5.00000)( -1.00000, -1.00000)%
+\special{pn 8}%
+%
+\special{pa 414 -922}\special{pa 0 0}\special{pa 787 0}\special{pa 414 -922}%
+\special{fp}%
+\settowidth{\Width}{A}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{A}\settodepth{\Depth}{A}\setlength{\Height}{\Depth}%
+\put(1.3150,3.0277){\hspace*{\Width}\raisebox{\Height}{A}}%
+%
+%
+\settowidth{\Width}{B}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{B}\settodepth{\Depth}{B}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-0.1000,0.0000){\hspace*{\Width}\raisebox{\Height}{B}}%
+%
+%
+\settowidth{\Width}{C}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{C}\settodepth{\Depth}{C}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.6000,0.0000){\hspace*{\Width}\raisebox{\Height}{C}}%
+%
+%
+\special{pa 414 -922}\special{pa 399 -908}\special{pa 384 -893}\special{pa 370 -878}%
+\special{pa 355 -863}\special{pa 341 -848}\special{pa 328 -833}\special{pa 314 -817}%
+\special{pa 301 -801}\special{pa 288 -785}\special{pa 275 -769}\special{pa 262 -752}%
+\special{pa 250 -736}\special{pa 238 -719}\special{pa 226 -702}\special{pa 214 -684}%
+\special{pa 203 -667}\special{pa 192 -649}\special{pa 182 -631}\special{pa 171 -613}%
+\special{pa 161 -595}\special{pa 151 -577}\special{pa 142 -559}\special{pa 132 -540}%
+\special{pa 124 -521}\special{pa 115 -502}\special{pa 107 -483}\special{pa 98 -464}%
+\special{pa 91 -445}\special{pa 83 -426}\special{pa 76 -406}\special{pa 69 -387}\special{pa 63 -367}%
+\special{pa 57 -347}\special{pa 51 -327}\special{pa 45 -307}\special{pa 40 -287}\special{pa 35 -267}%
+\special{pa 30 -247}\special{pa 26 -227}\special{pa 22 -206}\special{pa 18 -186}\special{pa 15 -165}%
+\special{pa 12 -145}\special{pa 9 -124}\special{pa 7 -104}\special{pa 5 -83}\special{pa 3 -62}%
+\special{pa 2 -41}\special{pa 1 -21}\special{pa 0 0}%
+\special{fp}%
+\settowidth{\Width}{$a$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$a$}\settodepth{\Depth}{$a$}\setlength{\Height}{-\Height}%
+\put(1.2500,-0.4500){\hspace*{\Width}\raisebox{\Height}{$a$}}%
+%
+%
+\special{pa 0 0}\special{pa 15 6}\special{pa 30 12}\special{pa 45 18}\special{pa 60 23}%
+\special{pa 76 28}\special{pa 91 33}\special{pa 107 38}\special{pa 122 42}\special{pa 138 46}%
+\special{pa 153 50}\special{pa 169 54}\special{pa 185 57}\special{pa 201 60}\special{pa 217 63}%
+\special{pa 233 66}\special{pa 249 68}\special{pa 265 71}\special{pa 281 72}\special{pa 297 74}%
+\special{pa 313 76}\special{pa 329 77}\special{pa 345 78}\special{pa 361 78}\special{pa 378 79}%
+\special{pa 394 79}\special{pa 410 79}\special{pa 426 78}\special{pa 442 78}\special{pa 458 77}%
+\special{pa 474 76}\special{pa 491 74}\special{pa 507 72}\special{pa 523 71}\special{pa 539 68}%
+\special{pa 555 66}\special{pa 571 63}\special{pa 587 60}\special{pa 602 57}\special{pa 618 54}%
+\special{pa 634 50}\special{pa 650 46}\special{pa 665 42}\special{pa 681 38}\special{pa 696 33}%
+\special{pa 712 28}\special{pa 727 23}\special{pa 742 18}\special{pa 757 12}\special{pa 772 6}%
+\special{pa 787 0}%
+\special{fp}%
+\settowidth{\Width}{$10$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$10$}\settodepth{\Depth}{$10$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.4930,1.7009){\hspace*{\Width}\raisebox{\Height}{$10$}}%
+%
+%
+\special{pa 787 0}\special{pa 790 -7}\special{pa 793 -13}\special{pa 795 -20}\special{pa 797 -27}\special{pa 799 -31}\special{fp}%
+\special{pa 809 -62}\special{pa 810 -68}\special{pa 812 -75}\special{pa 814 -82}\special{pa 816 -89}\special{pa 817 -93}\special{fp}%
+\special{pa 824 -125}\special{pa 825 -131}\special{pa 827 -138}\special{pa 828 -145}\special{pa 829 -152}\special{pa 830 -158}\special{fp}%
+\special{pa 834 -190}\special{pa 835 -195}\special{pa 835 -202}\special{pa 836 -210}\special{pa 836 -217}\special{pa 837 -223}\special{fp}%
+\special{pa 838 -255}\special{pa 838 -260}\special{pa 838 -267}\special{pa 838 -274}\special{pa 838 -282}\special{pa 838 -288}\special{fp}%
+\special{pa 836 -321}\special{pa 835 -325}\special{pa 835 -332}\special{pa 834 -339}\special{pa 833 -346}\special{pa 832 -353}\special{fp}%
+\special{pa 692 -700}\special{pa 688 -705}\special{pa 684 -711}\special{pa 679 -717}\special{pa 674 -722}\special{pa 672 -725}\special{fp}%
+\special{pa 651 -750}\special{pa 646 -755}\special{pa 641 -760}\special{pa 636 -765}\special{pa 631 -770}\special{pa 628 -774}\special{fp}%
+\special{pa 604 -796}\special{pa 600 -800}\special{pa 595 -805}\special{pa 589 -810}\special{pa 584 -815}\special{pa 580 -818}\special{fp}%
+\special{pa 554 -838}\special{pa 550 -842}\special{pa 544 -846}\special{pa 539 -850}\special{pa 533 -854}\special{pa 528 -858}\special{fp}%
+\special{pa 501 -876}\special{pa 497 -878}\special{pa 491 -882}\special{pa 484 -886}\special{pa 478 -889}\special{pa 472 -892}\special{fp}%
+\special{pa 444 -908}\special{pa 440 -910}\special{pa 434 -913}\special{pa 427 -916}\special{pa 421 -919}\special{pa 414 -922}\special{fp}%
+%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/bowdata2.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/bowdata2.tex
new file mode 100644
index 0000000000..9f2c926f2d
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/bowdata2.tex
@@ -0,0 +1,240 @@
+%%% /Users/Hannya/Desktop/KeTCindy/fig/bowdata2.tex
+%%% Generator=bowdata2.cdy
+{\unitlength=7mm%
+\begin{picture}%
+(13.37,6.5)(-4.61,-0.85)%
+\special{pn 8}%
+%
+\special{pa -1102 -0}\special{pa -551 -1378}%
+\special{fp}%
+\special{pa -551 -0}\special{pa 0 -1378}%
+\special{fp}%
+\special{pa 0 -0}\special{pa 551 -1378}%
+\special{fp}%
+\special{pa 551 -0}\special{pa 1102 -1378}%
+\special{fp}%
+\special{pa 1102 -0}\special{pa 1654 -1378}%
+\special{fp}%
+\special{pa 1654 -0}\special{pa 2205 -1378}%
+\special{fp}%
+\settowidth{\Width}{\rotatebox[origin=c]{68}{$a$}}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{\rotatebox[origin=c]{68}{$a$}}\settodepth{\Depth}{\rotatebox[origin=c]{68}{$a$}}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-3.5000000,2.7000000){\hspace*{\Width}\raisebox{\Height}{\rotatebox[origin=c]{68}{$a$}}}%
+%
+\special{pa -551 -1378}\special{pa -560 -1369}\special{pa -569 -1360}\special{pa -577 -1351}%
+\special{pa -586 -1342}\special{pa -594 -1333}\special{pa -603 -1323}\special{pa -611 -1314}%
+\special{pa -619 -1305}\special{pa -627 -1296}\special{pa -636 -1286}\special{pa -644 -1277}%
+\special{pa -652 -1267}\special{pa -660 -1257}\special{pa -668 -1248}\special{pa -675 -1238}%
+\special{pa -683 -1228}\special{pa -691 -1219}\special{pa -699 -1209}\special{pa -706 -1199}%
+\special{pa -714 -1189}\special{pa -721 -1179}\special{pa -729 -1169}\special{pa -736 -1159}%
+\special{pa -743 -1149}\special{pa -751 -1139}\special{pa -758 -1128}\special{pa -765 -1118}%
+\special{pa -772 -1108}\special{pa -779 -1097}\special{pa -786 -1087}\special{pa -793 -1076}%
+\special{pa -799 -1066}\special{pa -806 -1055}\special{pa -813 -1045}\special{pa -819 -1034}%
+\special{pa -826 -1024}\special{pa -832 -1013}\special{pa -838 -1002}\special{pa -845 -991}%
+\special{pa -851 -981}\special{pa -857 -970}\special{pa -863 -959}\special{pa -869 -948}%
+\special{pa -875 -937}\special{pa -881 -926}\special{pa -886 -915}\special{pa -892 -904}%
+\special{pa -898 -892}\special{pa -903 -881}\special{pa -909 -870}%
+\special{fp}%
+\special{pa -1011 -614}\special{pa -1015 -603}\special{pa -1019 -591}\special{pa -1022 -579}%
+\special{pa -1026 -567}\special{pa -1029 -555}\special{pa -1033 -543}\special{pa -1036 -531}%
+\special{pa -1039 -519}\special{pa -1042 -507}\special{pa -1045 -494}\special{pa -1048 -482}%
+\special{pa -1051 -470}\special{pa -1054 -458}\special{pa -1057 -446}\special{pa -1059 -434}%
+\special{pa -1062 -421}\special{pa -1064 -409}\special{pa -1067 -397}\special{pa -1069 -385}%
+\special{pa -1071 -372}\special{pa -1074 -360}\special{pa -1076 -348}\special{pa -1078 -336}%
+\special{pa -1080 -323}\special{pa -1082 -311}\special{pa -1083 -299}\special{pa -1085 -286}%
+\special{pa -1087 -274}\special{pa -1088 -261}\special{pa -1090 -249}\special{pa -1091 -237}%
+\special{pa -1093 -224}\special{pa -1094 -212}\special{pa -1095 -199}\special{pa -1096 -187}%
+\special{pa -1097 -175}\special{pa -1098 -162}\special{pa -1099 -150}\special{pa -1099 -137}%
+\special{pa -1100 -125}\special{pa -1101 -112}\special{pa -1101 -100}\special{pa -1102 -87}%
+\special{pa -1102 -75}\special{pa -1102 -62}\special{pa -1102 -50}\special{pa -1103 -37}%
+\special{pa -1103 -25}\special{pa -1103 -12}\special{pa -1102 -0}%
+\special{fp}%
+\settowidth{\Width}{\rotatebox[origin=c]{68}{$a$}}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{\rotatebox[origin=c]{68}{$a$}}\settodepth{\Depth}{\rotatebox[origin=c]{68}{$a$}}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-1.4200000,2.9000000){\hspace*{\Width}\raisebox{\Height}{\rotatebox[origin=c]{68}{$a$}}}%
+%
+\special{pa -0 -1378}\special{pa -9 -1369}\special{pa -17 -1360}\special{pa -26 -1351}%
+\special{pa -34 -1342}\special{pa -43 -1333}\special{pa -51 -1323}\special{pa -60 -1314}%
+\special{pa -68 -1305}\special{pa -76 -1296}\special{pa -84 -1286}\special{pa -93 -1277}%
+\special{pa -101 -1267}\special{pa -109 -1257}\special{pa -116 -1248}\special{pa -124 -1238}%
+\special{pa -132 -1228}\special{pa -140 -1219}\special{pa -148 -1209}\special{pa -155 -1199}%
+\special{pa -163 -1189}\special{pa -170 -1179}\special{pa -178 -1169}\special{pa -185 -1159}%
+\special{pa -192 -1149}\special{pa -199 -1139}\special{pa -207 -1128}\special{pa -214 -1118}%
+\special{pa -221 -1108}\special{pa -228 -1097}\special{pa -235 -1087}\special{pa -241 -1076}%
+\special{pa -248 -1066}\special{pa -255 -1055}\special{pa -261 -1045}\special{pa -268 -1034}%
+\special{pa -274 -1024}\special{pa -281 -1013}\special{pa -287 -1002}\special{pa -293 -991}%
+\special{pa -300 -981}\special{pa -306 -970}\special{pa -312 -959}\special{pa -318 -948}%
+\special{pa -324 -937}\special{pa -330 -926}\special{pa -335 -915}\special{pa -341 -904}%
+\special{pa -347 -892}\special{pa -352 -881}\special{pa -358 -870}%
+\special{fp}%
+\special{pa -460 -614}\special{pa -464 -603}\special{pa -467 -591}\special{pa -471 -579}%
+\special{pa -475 -567}\special{pa -478 -555}\special{pa -481 -543}\special{pa -485 -531}%
+\special{pa -488 -519}\special{pa -491 -507}\special{pa -494 -494}\special{pa -497 -482}%
+\special{pa -500 -470}\special{pa -503 -458}\special{pa -505 -446}\special{pa -508 -434}%
+\special{pa -511 -421}\special{pa -513 -409}\special{pa -516 -397}\special{pa -518 -385}%
+\special{pa -520 -372}\special{pa -522 -360}\special{pa -525 -348}\special{pa -527 -336}%
+\special{pa -529 -323}\special{pa -530 -311}\special{pa -532 -299}\special{pa -534 -286}%
+\special{pa -536 -274}\special{pa -537 -261}\special{pa -539 -249}\special{pa -540 -237}%
+\special{pa -541 -224}\special{pa -543 -212}\special{pa -544 -199}\special{pa -545 -187}%
+\special{pa -546 -175}\special{pa -547 -162}\special{pa -548 -150}\special{pa -548 -137}%
+\special{pa -549 -125}\special{pa -550 -112}\special{pa -550 -100}\special{pa -550 -87}%
+\special{pa -551 -75}\special{pa -551 -62}\special{pa -551 -50}\special{pa -551 -37}%
+\special{pa -551 -25}\special{pa -551 -12}\special{pa -551 0}%
+\special{fp}%
+\settowidth{\Width}{\rotatebox[origin=c]{68}{$a$}}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{\rotatebox[origin=c]{68}{$a$}}\settodepth{\Depth}{\rotatebox[origin=c]{68}{$a$}}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(0.4200000,2.5000000){\hspace*{\Width}\raisebox{\Height}{\rotatebox[origin=c]{68}{$a$}}}%
+%
+\special{pa 551 -1378}\special{pa 542 -1369}\special{pa 534 -1360}\special{pa 525 -1351}%
+\special{pa 517 -1342}\special{pa 508 -1333}\special{pa 500 -1323}\special{pa 491 -1314}%
+\special{pa 483 -1305}\special{pa 475 -1296}\special{pa 467 -1286}\special{pa 459 -1277}%
+\special{pa 451 -1267}\special{pa 443 -1257}\special{pa 435 -1248}\special{pa 427 -1238}%
+\special{pa 419 -1228}\special{pa 411 -1219}\special{pa 404 -1209}\special{pa 396 -1199}%
+\special{pa 389 -1189}\special{pa 381 -1179}\special{pa 374 -1169}\special{pa 366 -1159}%
+\special{pa 359 -1149}\special{pa 352 -1139}\special{pa 345 -1128}\special{pa 338 -1118}%
+\special{pa 331 -1108}\special{pa 324 -1097}\special{pa 317 -1087}\special{pa 310 -1076}%
+\special{pa 303 -1066}\special{pa 296 -1055}\special{pa 290 -1045}\special{pa 283 -1034}%
+\special{pa 277 -1024}\special{pa 270 -1013}\special{pa 264 -1002}\special{pa 258 -991}%
+\special{pa 252 -981}\special{pa 245 -970}\special{pa 239 -959}\special{pa 233 -948}%
+\special{pa 227 -937}\special{pa 222 -926}\special{pa 216 -915}\special{pa 210 -904}%
+\special{pa 205 -892}\special{pa 199 -881}\special{pa 193 -870}%
+\special{fp}%
+\special{pa 91 -614}\special{pa 87 -603}\special{pa 84 -591}\special{pa 80 -579}%
+\special{pa 77 -567}\special{pa 73 -555}\special{pa 70 -543}\special{pa 67 -531}%
+\special{pa 63 -519}\special{pa 60 -507}\special{pa 57 -494}\special{pa 54 -482}%
+\special{pa 51 -470}\special{pa 48 -458}\special{pa 46 -446}\special{pa 43 -434}%
+\special{pa 40 -421}\special{pa 38 -409}\special{pa 36 -397}\special{pa 33 -385}%
+\special{pa 31 -372}\special{pa 29 -360}\special{pa 27 -348}\special{pa 25 -336}%
+\special{pa 23 -323}\special{pa 21 -311}\special{pa 19 -299}\special{pa 17 -286}%
+\special{pa 16 -274}\special{pa 14 -261}\special{pa 13 -249}\special{pa 11 -237}%
+\special{pa 10 -224}\special{pa 9 -212}\special{pa 7 -199}\special{pa 6 -187}%
+\special{pa 5 -175}\special{pa 4 -162}\special{pa 4 -150}\special{pa 3 -137}%
+\special{pa 2 -125}\special{pa 2 -112}\special{pa 1 -100}\special{pa 1 -87}%
+\special{pa 0 -75}\special{pa 0 -62}\special{pa -0 -50}\special{pa -0 -37}%
+\special{pa -0 -25}\special{pa -0 -12}\special{pa 0 -0}%
+\special{fp}%
+\settowidth{\Width}{\rotatebox[origin=c]{68}{$a$}}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{\rotatebox[origin=c]{68}{$a$}}\settodepth{\Depth}{\rotatebox[origin=c]{68}{$a$}}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.3000000,2.7800000){\hspace*{\Width}\raisebox{\Height}{\rotatebox[origin=c]{68}{$a$}}}%
+%
+\special{pa 1102 -1378}\special{pa 1094 -1369}\special{pa 1085 -1360}\special{pa 1076 -1351}%
+\special{pa 1068 -1342}\special{pa 1059 -1333}\special{pa 1051 -1323}\special{pa 1043 -1314}%
+\special{pa 1034 -1305}\special{pa 1026 -1296}\special{pa 1018 -1286}\special{pa 1010 -1277}%
+\special{pa 1002 -1267}\special{pa 994 -1257}\special{pa 986 -1248}\special{pa 978 -1238}%
+\special{pa 970 -1228}\special{pa 963 -1219}\special{pa 955 -1209}\special{pa 947 -1199}%
+\special{pa 940 -1189}\special{pa 932 -1179}\special{pa 925 -1169}\special{pa 917 -1159}%
+\special{pa 910 -1149}\special{pa 903 -1139}\special{pa 896 -1128}\special{pa 889 -1118}%
+\special{pa 882 -1108}\special{pa 875 -1097}\special{pa 868 -1087}\special{pa 861 -1076}%
+\special{pa 854 -1066}\special{pa 848 -1055}\special{pa 841 -1045}\special{pa 834 -1034}%
+\special{pa 828 -1024}\special{pa 822 -1013}\special{pa 815 -1002}\special{pa 809 -991}%
+\special{pa 803 -981}\special{pa 797 -970}\special{pa 791 -959}\special{pa 785 -948}%
+\special{pa 779 -937}\special{pa 773 -926}\special{pa 767 -915}\special{pa 761 -904}%
+\special{pa 756 -892}\special{pa 750 -881}\special{pa 745 -870}%
+\special{fp}%
+\special{pa 642 -614}\special{pa 639 -603}\special{pa 635 -591}\special{pa 631 -579}%
+\special{pa 628 -567}\special{pa 624 -555}\special{pa 621 -543}\special{pa 618 -531}%
+\special{pa 615 -519}\special{pa 611 -507}\special{pa 608 -494}\special{pa 605 -482}%
+\special{pa 602 -470}\special{pa 600 -458}\special{pa 597 -446}\special{pa 594 -434}%
+\special{pa 592 -421}\special{pa 589 -409}\special{pa 587 -397}\special{pa 584 -385}%
+\special{pa 582 -372}\special{pa 580 -360}\special{pa 578 -348}\special{pa 576 -336}%
+\special{pa 574 -323}\special{pa 572 -311}\special{pa 570 -299}\special{pa 568 -286}%
+\special{pa 567 -274}\special{pa 565 -261}\special{pa 564 -249}\special{pa 562 -237}%
+\special{pa 561 -224}\special{pa 560 -212}\special{pa 559 -199}\special{pa 558 -187}%
+\special{pa 557 -175}\special{pa 556 -162}\special{pa 555 -150}\special{pa 554 -137}%
+\special{pa 553 -125}\special{pa 553 -112}\special{pa 552 -100}\special{pa 552 -87}%
+\special{pa 552 -75}\special{pa 551 -62}\special{pa 551 -50}\special{pa 551 -37}%
+\special{pa 551 -25}\special{pa 551 -12}\special{pa 551 -0}%
+\special{fp}%
+\settowidth{\Width}{\rotatebox[units=-360,origin=c]{112}{$a$}}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{\rotatebox[units=-360,origin=c]{112}{$a$}}\settodepth{\Depth}{\rotatebox[units=-360,origin=c]{112}{$a$}}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.5000000,2.7000000){\hspace*{\Width}\raisebox{\Height}{\rotatebox[units=-360,origin=c]{112}{$a$}}}%
+%
+\special{pa 1654 -1378}\special{pa 1645 -1369}\special{pa 1636 -1360}\special{pa 1628 -1351}%
+\special{pa 1619 -1342}\special{pa 1611 -1333}\special{pa 1602 -1323}\special{pa 1594 -1314}%
+\special{pa 1586 -1305}\special{pa 1577 -1296}\special{pa 1569 -1286}\special{pa 1561 -1277}%
+\special{pa 1553 -1267}\special{pa 1545 -1257}\special{pa 1537 -1248}\special{pa 1529 -1238}%
+\special{pa 1521 -1228}\special{pa 1514 -1219}\special{pa 1506 -1209}\special{pa 1498 -1199}%
+\special{pa 1491 -1189}\special{pa 1483 -1179}\special{pa 1476 -1169}\special{pa 1469 -1159}%
+\special{pa 1461 -1149}\special{pa 1454 -1139}\special{pa 1447 -1128}\special{pa 1440 -1118}%
+\special{pa 1433 -1108}\special{pa 1426 -1097}\special{pa 1419 -1087}\special{pa 1412 -1076}%
+\special{pa 1405 -1066}\special{pa 1399 -1055}\special{pa 1392 -1045}\special{pa 1386 -1034}%
+\special{pa 1379 -1024}\special{pa 1373 -1013}\special{pa 1366 -1002}\special{pa 1360 -991}%
+\special{pa 1354 -981}\special{pa 1348 -970}\special{pa 1342 -959}\special{pa 1336 -948}%
+\special{pa 1330 -937}\special{pa 1324 -926}\special{pa 1318 -915}\special{pa 1313 -904}%
+\special{pa 1307 -892}\special{pa 1301 -881}\special{pa 1296 -870}%
+\special{fp}%
+\special{pa 1194 -614}\special{pa 1190 -603}\special{pa 1186 -591}\special{pa 1183 -579}%
+\special{pa 1179 -567}\special{pa 1176 -555}\special{pa 1172 -543}\special{pa 1169 -531}%
+\special{pa 1166 -519}\special{pa 1163 -507}\special{pa 1160 -494}\special{pa 1157 -482}%
+\special{pa 1154 -470}\special{pa 1151 -458}\special{pa 1148 -446}\special{pa 1145 -434}%
+\special{pa 1143 -421}\special{pa 1140 -409}\special{pa 1138 -397}\special{pa 1136 -385}%
+\special{pa 1133 -372}\special{pa 1131 -360}\special{pa 1129 -348}\special{pa 1127 -336}%
+\special{pa 1125 -323}\special{pa 1123 -311}\special{pa 1121 -299}\special{pa 1120 -286}%
+\special{pa 1118 -274}\special{pa 1116 -261}\special{pa 1115 -249}\special{pa 1114 -237}%
+\special{pa 1112 -224}\special{pa 1111 -212}\special{pa 1110 -199}\special{pa 1109 -187}%
+\special{pa 1108 -175}\special{pa 1107 -162}\special{pa 1106 -150}\special{pa 1105 -137}%
+\special{pa 1105 -125}\special{pa 1104 -112}\special{pa 1104 -100}\special{pa 1103 -87}%
+\special{pa 1103 -75}\special{pa 1102 -62}\special{pa 1102 -50}\special{pa 1102 -37}%
+\special{pa 1102 -25}\special{pa 1102 -12}\special{pa 1102 0}%
+\special{fp}%
+\settowidth{\Width}{\rotatebox[units=-360,origin=c]{112}{$a$}}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{\rotatebox[units=-360,origin=c]{112}{$a$}}\settodepth{\Depth}{\rotatebox[units=-360,origin=c]{112}{$a$}}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(6.5800000,2.9000000){\hspace*{\Width}\raisebox{\Height}{\rotatebox[units=-360,origin=c]{112}{$a$}}}%
+%
+\special{pa 2205 -1378}\special{pa 2196 -1369}\special{pa 2187 -1360}\special{pa 2179 -1351}%
+\special{pa 2170 -1342}\special{pa 2162 -1333}\special{pa 2153 -1323}\special{pa 2145 -1314}%
+\special{pa 2137 -1305}\special{pa 2129 -1296}\special{pa 2120 -1286}\special{pa 2112 -1277}%
+\special{pa 2104 -1267}\special{pa 2096 -1257}\special{pa 2088 -1248}\special{pa 2080 -1238}%
+\special{pa 2073 -1228}\special{pa 2065 -1219}\special{pa 2057 -1209}\special{pa 2050 -1199}%
+\special{pa 2042 -1189}\special{pa 2035 -1179}\special{pa 2027 -1169}\special{pa 2020 -1159}%
+\special{pa 2013 -1149}\special{pa 2005 -1139}\special{pa 1998 -1128}\special{pa 1991 -1118}%
+\special{pa 1984 -1108}\special{pa 1977 -1097}\special{pa 1970 -1087}\special{pa 1963 -1076}%
+\special{pa 1957 -1066}\special{pa 1950 -1055}\special{pa 1943 -1045}\special{pa 1937 -1034}%
+\special{pa 1930 -1024}\special{pa 1924 -1013}\special{pa 1918 -1002}\special{pa 1911 -991}%
+\special{pa 1905 -981}\special{pa 1899 -970}\special{pa 1893 -959}\special{pa 1887 -948}%
+\special{pa 1881 -937}\special{pa 1875 -926}\special{pa 1869 -915}\special{pa 1864 -904}%
+\special{pa 1858 -892}\special{pa 1853 -881}\special{pa 1847 -870}%
+\special{fp}%
+\special{pa 1745 -614}\special{pa 1741 -603}\special{pa 1737 -591}\special{pa 1734 -579}%
+\special{pa 1730 -567}\special{pa 1727 -555}\special{pa 1723 -543}\special{pa 1720 -531}%
+\special{pa 1717 -519}\special{pa 1714 -507}\special{pa 1711 -494}\special{pa 1708 -482}%
+\special{pa 1705 -470}\special{pa 1702 -458}\special{pa 1699 -446}\special{pa 1697 -434}%
+\special{pa 1694 -421}\special{pa 1691 -409}\special{pa 1689 -397}\special{pa 1687 -385}%
+\special{pa 1684 -372}\special{pa 1682 -360}\special{pa 1680 -348}\special{pa 1678 -336}%
+\special{pa 1676 -323}\special{pa 1674 -311}\special{pa 1672 -299}\special{pa 1671 -286}%
+\special{pa 1669 -274}\special{pa 1668 -261}\special{pa 1666 -249}\special{pa 1665 -237}%
+\special{pa 1663 -224}\special{pa 1662 -212}\special{pa 1661 -199}\special{pa 1660 -187}%
+\special{pa 1659 -175}\special{pa 1658 -162}\special{pa 1657 -150}\special{pa 1656 -137}%
+\special{pa 1656 -125}\special{pa 1655 -112}\special{pa 1655 -100}\special{pa 1654 -87}%
+\special{pa 1654 -75}\special{pa 1654 -62}\special{pa 1653 -50}\special{pa 1653 -37}%
+\special{pa 1653 -25}\special{pa 1653 -12}\special{pa 1654 0}%
+\special{fp}%
+\settowidth{\Width}{no}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{no}\settodepth{\Depth}{no}\setlength{\Height}{-\Height}%
+\put(-4.0000000,-0.0714286){\hspace*{\Width}\raisebox{\Height}{no}}%
+%
+\settowidth{\Width}{option}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{option}\settodepth{\Depth}{option}\setlength{\Height}{-\Height}%
+\put(-4.0000000,-0.3571429){\hspace*{\Width}\raisebox{\Height}{option}}%
+%
+\settowidth{\Width}{t3n0}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{t3n0}\settodepth{\Depth}{t3n0}\setlength{\Height}{-\Height}%
+\put(-2.0000000,-0.0714286){\hspace*{\Width}\raisebox{\Height}{t3n0}}%
+%
+\settowidth{\Width}{t-3n0}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{t-3n0}\settodepth{\Depth}{t-3n0}\setlength{\Height}{-\Height}%
+\put(0.0000000,-0.0714286){\hspace*{\Width}\raisebox{\Height}{t-3n0}}%
+%
+\settowidth{\Width}{t0n3}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{t0n3}\settodepth{\Depth}{t0n3}\setlength{\Height}{-\Height}%
+\put(2.0000000,-0.0714286){\hspace*{\Width}\raisebox{\Height}{t0n3}}%
+%
+\settowidth{\Width}{t0n0r}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{t0n0r}\settodepth{\Depth}{t0n0r}\setlength{\Height}{-\Height}%
+\put(4.0000000,-0.0714286){\hspace*{\Width}\raisebox{\Height}{t0n0r}}%
+%
+\settowidth{\Width}{t3n0r}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{t3n0r}\settodepth{\Depth}{t3n0r}\setlength{\Height}{-\Height}%
+\put(6.0000000,-0.0714286){\hspace*{\Width}\raisebox{\Height}{t3n0r}}%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/boxframeslide.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/boxframeslide.tex
new file mode 100644
index 0000000000..fa0a570fa7
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/boxframeslide.tex
@@ -0,0 +1,25 @@
+%%% /Users/Hannya/Desktop/KeTCindy/fig/boxframeslide.tex
+%%% Generator=template1basic.cdy
+{\unitlength=1cm%
+\begin{picture}%
+(5.89,8.46)(-0.17,-4.19)%
+\special{pn 8}%
+%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 2130 -24}\special{pa 2130 -1504}\special{pa 2129 -1516}\special{pa 2126 -1528}%
+\special{pa 2121 -1540}\special{pa 2115 -1550}\special{pa 2107 -1560}\special{pa 2097 -1568}%
+\special{pa 2087 -1574}\special{pa 2076 -1579}\special{pa 2063 -1582}\special{pa 2051 -1583}%
+\special{pa 1075 -1583}\special{pa 98 -1583}\special{pa 86 -1582}\special{pa 74 -1579}%
+\special{pa 63 -1574}\special{pa 52 -1568}\special{pa 43 -1560}\special{pa 35 -1550}%
+\special{pa 28 -1540}\special{pa 24 -1528}\special{pa 21 -1516}\special{pa 20 -1504}%
+\special{pa 20 -24}\special{pa 20 1457}\special{pa 21 1469}\special{pa 24 1481}%
+\special{pa 28 1492}\special{pa 35 1503}\special{pa 43 1512}\special{pa 52 1520}%
+\special{pa 63 1527}\special{pa 74 1532}\special{pa 86 1534}\special{pa 98 1535}%
+\special{pa 1075 1535}\special{pa 2051 1535}\special{pa 2063 1534}\special{pa 2076 1532}%
+\special{pa 2087 1527}\special{pa 2097 1520}\special{pa 2107 1512}\special{pa 2115 1503}%
+\special{pa 2121 1492}\special{pa 2126 1481}\special{pa 2129 1469}\special{pa 2130 1457}%
+\special{pa 2130 -24}%
+\special{fp}%
+}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/boxplot.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/boxplot.tex
new file mode 100644
index 0000000000..4960d1a652
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/boxplot.tex
@@ -0,0 +1,115 @@
+%%% t4boxplot2.tex 2016-4-23 9:27
+%%% t4boxplot2.sce 2016-4-23 9:27
+{\unitlength=1cm%
+\begin{picture}%
+( 8.00000, 6.00000)( -1.00000, -1.00000)%
+\special{pn 8}%
+%
+\special{pa 394 -295}\special{pa 394 -492}%
+\special{fp}%
+\special{pa 1181 -197}\special{pa 1181 -591}\special{pa 1713 -591}\special{pa 1713 -197}%
+\special{pa 1181 -197}%
+\special{fp}%
+\special{pa 1949 -295}\special{pa 1949 -492}%
+\special{fp}%
+\special{pn 16}%
+\special{pa 1378 -197}\special{pa 1378 -591}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 394 -394}\special{pa 431 -394}\special{fp}\special{pa 469 -394}\special{pa 506 -394}\special{fp}%
+\special{pa 544 -394}\special{pa 581 -394}\special{fp}\special{pa 619 -394}\special{pa 656 -394}\special{fp}%
+\special{pa 694 -394}\special{pa 731 -394}\special{fp}\special{pa 769 -394}\special{pa 806 -394}\special{fp}%
+\special{pa 844 -394}\special{pa 881 -394}\special{fp}\special{pa 919 -394}\special{pa 956 -394}\special{fp}%
+\special{pa 994 -394}\special{pa 1031 -394}\special{fp}\special{pa 1069 -394}\special{pa 1106 -394}\special{fp}%
+\special{pa 1144 -394}\special{pa 1181 -394}\special{fp}%
+%
+\special{pa 1713 -394}\special{pa 1746 -394}\special{fp}\special{pa 1780 -394}\special{pa 1814 -394}\special{fp}%
+\special{pa 1848 -394}\special{pa 1881 -394}\special{fp}\special{pa 1915 -394}\special{pa 1949 -394}\special{fp}%
+%
+%
+\special{pa 787 -1083}\special{pa 787 -1280}%
+\special{fp}%
+\special{pa 1299 -984}\special{pa 1299 -1378}\special{pa 1673 -1378}\special{pa 1673 -984}%
+\special{pa 1299 -984}%
+\special{fp}%
+\special{pa 1969 -1083}\special{pa 1969 -1280}%
+\special{fp}%
+\special{pn 16}%
+\special{pa 1378 -984}\special{pa 1378 -1378}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 787 -1181}\special{pa 827 -1181}\special{fp}\special{pa 866 -1181}\special{pa 906 -1181}\special{fp}%
+\special{pa 945 -1181}\special{pa 984 -1181}\special{fp}\special{pa 1024 -1181}\special{pa 1063 -1181}\special{fp}%
+\special{pa 1102 -1181}\special{pa 1142 -1181}\special{fp}\special{pa 1181 -1181}\special{pa 1220 -1181}\special{fp}%
+\special{pa 1260 -1181}\special{pa 1299 -1181}\special{fp}%
+%
+\special{pa 1673 -1181}\special{pa 1706 -1181}\special{fp}\special{pa 1739 -1181}\special{pa 1772 -1181}\special{fp}%
+\special{pa 1804 -1181}\special{pa 1837 -1181}\special{fp}\special{pa 1870 -1181}\special{pa 1903 -1181}\special{fp}%
+\special{pa 1936 -1181}\special{pa 1969 -1181}\special{fp}%
+%
+\special{pa 0 0}\special{pa 2386 0}\special{pa 2386 -1709}\special{pa 0 -1709}\special{pa 0 0}%
+\special{fp}%
+\settowidth{\Width}{$0$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$0$}\settodepth{\Depth}{$0$}\setlength{\Height}{-\Height}%
+\put(0.0000,-0.1500){\hspace*{\Width}\raisebox{\Height}{$0$}}%
+%
+%
+\special{pa 0 0}\special{pa 0 39}%
+\special{fp}%
+\settowidth{\Width}{$1$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$1$}\settodepth{\Depth}{$1$}\setlength{\Height}{-\Height}%
+\put(1.0000,-0.1500){\hspace*{\Width}\raisebox{\Height}{$1$}}%
+%
+%
+\special{pa 394 0}\special{pa 394 39}%
+\special{fp}%
+\settowidth{\Width}{$2$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$2$}\settodepth{\Depth}{$2$}\setlength{\Height}{-\Height}%
+\put(2.0000,-0.1500){\hspace*{\Width}\raisebox{\Height}{$2$}}%
+%
+%
+\special{pa 787 0}\special{pa 787 39}%
+\special{fp}%
+\settowidth{\Width}{$3$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$3$}\settodepth{\Depth}{$3$}\setlength{\Height}{-\Height}%
+\put(3.0000,-0.1500){\hspace*{\Width}\raisebox{\Height}{$3$}}%
+%
+%
+\special{pa 1181 0}\special{pa 1181 39}%
+\special{fp}%
+\settowidth{\Width}{$4$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$4$}\settodepth{\Depth}{$4$}\setlength{\Height}{-\Height}%
+\put(4.0000,-0.1500){\hspace*{\Width}\raisebox{\Height}{$4$}}%
+%
+%
+\special{pa 1575 0}\special{pa 1575 39}%
+\special{fp}%
+\settowidth{\Width}{$5$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$5$}\settodepth{\Depth}{$5$}\setlength{\Height}{-\Height}%
+\put(5.0000,-0.1500){\hspace*{\Width}\raisebox{\Height}{$5$}}%
+%
+%
+\special{pa 1969 0}\special{pa 1969 39}%
+\special{fp}%
+\settowidth{\Width}{$6$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$6$}\settodepth{\Depth}{$6$}\setlength{\Height}{-\Height}%
+\put(6.0000,-0.1500){\hspace*{\Width}\raisebox{\Height}{$6$}}%
+%
+%
+\special{pa 2362 0}\special{pa 2362 39}%
+\special{fp}%
+\settowidth{\Width}{$\mbox{dt1}$}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{$\mbox{dt1}$}\settodepth{\Depth}{$\mbox{dt1}$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-0.1500,1.0000){\hspace*{\Width}\raisebox{\Height}{$\mbox{dt1}$}}%
+%
+%
+\special{pa 0 -394}\special{pa -39 -394}%
+\special{fp}%
+\settowidth{\Width}{$\mbox{dt2}$}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{$\mbox{dt2}$}\settodepth{\Depth}{$\mbox{dt2}$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-0.1500,3.0000){\hspace*{\Width}\raisebox{\Height}{$\mbox{dt2}$}}%
+%
+%
+\special{pa 0 -1181}\special{pa -39 -1181}%
+\special{fp}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/boxplot01.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/boxplot01.tex
new file mode 100644
index 0000000000..ecd80ce2ed
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/boxplot01.tex
@@ -0,0 +1,63 @@
+%%% /Users/Hannya/Desktop/fig/boxplot01.tex
+%%% Generator=hachtest.cdy
+{\unitlength=10mm%
+\begin{picture}%
+(5.91,2.32)(-0.38,-0.27)%
+\special{pn 8}%
+%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 21 -295}\special{pa 21 -492}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 338 -197}\special{pa 338 -591}\special{pa 1436 -591}\special{pa 1436 -197}%
+\special{pa 338 -197}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 1962 -295}\special{pa 1962 -492}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pn 16}%
+\special{pa 794 -197}\special{pa 794 -591}%
+\special{fp}%
+\special{pn 8}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 21 -394}\special{pa 56 -394}\special{fp}\special{pa 92 -394}\special{pa 127 -394}\special{fp}%
+\special{pa 162 -394}\special{pa 197 -394}\special{fp}\special{pa 233 -394}\special{pa 268 -394}\special{fp}%
+\special{pa 303 -394}\special{pa 338 -394}\special{fp}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 1436 -394}\special{pa 1471 -394}\special{fp}\special{pa 1506 -394}\special{pa 1541 -394}\special{fp}%
+\special{pa 1576 -394}\special{pa 1611 -394}\special{fp}\special{pa 1646 -394}\special{pa 1681 -394}\special{fp}%
+\special{pa 1717 -394}\special{pa 1752 -394}\special{fp}\special{pa 1787 -394}\special{pa 1822 -394}\special{fp}%
+\special{pa 1857 -394}\special{pa 1892 -394}\special{fp}\special{pa 1927 -394}\special{pa 1962 -394}\special{fp}%
+%
+%
+}%
+\special{pa -150 -0}\special{pa 2177 -0}%
+\special{fp}%
+\special{pa 0 106}\special{pa 0 -807}%
+\special{fp}%
+\settowidth{\Width}{$x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(5.5800000,0.0000000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{\Depth}%
+\put(0.0000000,2.1000000){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+\settowidth{\Width}{O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(-0.0500000,-0.0500000){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/calcbyr01.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/calcbyr01.pdf
new file mode 100644
index 0000000000..597cb7a180
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/calcbyr01.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/calling.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/calling.tex
new file mode 100644
index 0000000000..3c8a549c4e
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/calling.tex
@@ -0,0 +1,165 @@
+%%% /Users/takatoosetsuo/Dropbox/2016ketpic/0801ACA/ACAedutakato/fig/calling.tex 2016-11-24 19:57
+%%% calling.sce 2016-11-24 19:57
+{\unitlength=1cm%
+\begin{picture}%
+( 9.78000, 5.50000)( -4.28000, -2.50000)%
+\linethickness{0.008in}%
+%
+\linethickness{0.024in}%
+\polyline(1.50000,0.00000)(1.50000,0.10000)(1.49508,0.16257)(1.48042,0.22361)(1.45640,0.28160)%
+(1.42361,0.33511)(1.38284,0.38284)(1.33511,0.42361)(1.28160,0.45640)(1.22361,0.48042)%
+(1.16257,0.49508)(1.10000,0.50000)(0.00000,0.50000)(-1.10000,0.50000)(-1.16257,0.49508)%
+(-1.22361,0.48042)(-1.28160,0.45640)(-1.33511,0.42361)(-1.38284,0.38284)(-1.42361,0.33511)%
+(-1.45640,0.28160)(-1.48042,0.22361)(-1.49508,0.16257)(-1.50000,0.10000)(-1.50000,0.00000)%
+(-1.50000,-0.10000)(-1.49508,-0.16257)(-1.48042,-0.22361)(-1.45640,-0.28160)(-1.42361,-0.33511)%
+(-1.38284,-0.38284)(-1.33511,-0.42361)(-1.28160,-0.45640)(-1.22361,-0.48042)(-1.16257,-0.49508)%
+(-1.10000,-0.50000)(0.00000,-0.50000)(1.10000,-0.50000)(1.16257,-0.49508)(1.22361,-0.48042)%
+(1.28160,-0.45640)(1.33511,-0.42361)(1.38284,-0.38284)(1.42361,-0.33511)(1.45640,-0.28160)%
+(1.48042,-0.22361)(1.49508,-0.16257)(1.50000,-0.10000)(1.50000,0.00000)%
+%
+\linethickness{0.008in}%
+\polyline(4.00000,-1.75000)(4.00000,-1.65121)\polyline(3.98695,-1.55357)(3.98042,-1.52639)(3.95640,-1.46840)(3.95218,-1.46152)%
+\polyline(3.89496,-1.38135)(3.88284,-1.36716)(3.83511,-1.32639)(3.82031,-1.31732)%
+\polyline(3.73227,-1.27317)(3.72361,-1.26958)(3.66257,-1.25492)(3.63601,-1.25283)%
+\polyline(3.53733,-1.25000)(3.43853,-1.25000)\polyline(3.33974,-1.25000)(3.24095,-1.25000)%
+\polyline(3.14216,-1.25000)(3.04336,-1.25000)\polyline(2.94457,-1.25000)(2.84578,-1.25000)%
+\polyline(2.74698,-1.25000)(2.64819,-1.25000)\polyline(2.54940,-1.25000)(2.50000,-1.25000)(2.45060,-1.25000)%
+\polyline(2.35181,-1.25000)(2.25302,-1.25000)\polyline(2.15422,-1.25000)(2.05543,-1.25000)%
+\polyline(1.95664,-1.25000)(1.85784,-1.25000)\polyline(1.75905,-1.25000)(1.66026,-1.25000)%
+\polyline(1.56147,-1.25000)(1.46267,-1.25000)\polyline(1.36399,-1.25283)(1.33743,-1.25492)(1.27639,-1.26958)(1.26773,-1.27317)%
+\polyline(1.17969,-1.31732)(1.16489,-1.32639)(1.11716,-1.36716)(1.10504,-1.38135)%
+\polyline(1.04782,-1.46152)(1.04360,-1.46840)(1.01958,-1.52639)(1.01305,-1.55357)%
+\polyline(1.00000,-1.65121)(1.00000,-1.75000)(1.00000,-1.75000)\polyline(1.00000,-1.84879)(1.00000,-1.85000)(1.00492,-1.91257)(1.01305,-1.94643)%
+\polyline(1.04782,-2.03848)(1.07639,-2.08511)(1.10504,-2.11865)\polyline(1.17969,-2.18268)(1.21840,-2.20640)(1.26773,-2.22683)%
+\polyline(1.36399,-2.24717)(1.40000,-2.25000)(1.46267,-2.25000)\polyline(1.56147,-2.25000)(1.66026,-2.25000)%
+\polyline(1.75905,-2.25000)(1.85784,-2.25000)\polyline(1.95664,-2.25000)(2.05543,-2.25000)%
+\polyline(2.15422,-2.25000)(2.25302,-2.25000)\polyline(2.35181,-2.25000)(2.45060,-2.25000)%
+\polyline(2.54940,-2.25000)(2.64819,-2.25000)\polyline(2.74698,-2.25000)(2.84578,-2.25000)%
+\polyline(2.94457,-2.25000)(3.04336,-2.25000)\polyline(3.14216,-2.25000)(3.24095,-2.25000)%
+\polyline(3.33974,-2.25000)(3.43853,-2.25000)\polyline(3.53733,-2.25000)(3.60000,-2.25000)(3.63601,-2.24717)%
+\polyline(3.73227,-2.22683)(3.78160,-2.20640)(3.82031,-2.18268)\polyline(3.89496,-2.11865)(3.92361,-2.08511)(3.95218,-2.03848)%
+\polyline(3.98695,-1.94643)(3.99508,-1.91257)(4.00000,-1.85000)(4.00000,-1.84879)%
+%
+%
+\polyline(-1.00000,-1.75000)(-1.00000,-1.65121)\polyline(-1.01305,-1.55357)(-1.01958,-1.52639)(-1.04360,-1.46840)(-1.04782,-1.46152)%
+\polyline(-1.10504,-1.38135)(-1.11716,-1.36716)(-1.16489,-1.32639)(-1.17969,-1.31732)%
+\polyline(-1.26773,-1.27317)(-1.27639,-1.26958)(-1.33743,-1.25492)(-1.36399,-1.25283)%
+\polyline(-1.46267,-1.25000)(-1.56147,-1.25000)\polyline(-1.66026,-1.25000)(-1.75905,-1.25000)%
+\polyline(-1.85784,-1.25000)(-1.95664,-1.25000)\polyline(-2.05543,-1.25000)(-2.15422,-1.25000)%
+\polyline(-2.25302,-1.25000)(-2.35181,-1.25000)\polyline(-2.45060,-1.25000)(-2.50000,-1.25000)(-2.54940,-1.25000)%
+\polyline(-2.64819,-1.25000)(-2.74698,-1.25000)\polyline(-2.84578,-1.25000)(-2.94457,-1.25000)%
+\polyline(-3.04336,-1.25000)(-3.14216,-1.25000)\polyline(-3.24095,-1.25000)(-3.33974,-1.25000)%
+\polyline(-3.43853,-1.25000)(-3.53733,-1.25000)\polyline(-3.63601,-1.25283)(-3.66257,-1.25492)(-3.72361,-1.26958)(-3.73227,-1.27317)%
+\polyline(-3.82031,-1.31732)(-3.83511,-1.32639)(-3.88284,-1.36716)(-3.89496,-1.38135)%
+\polyline(-3.95218,-1.46152)(-3.95640,-1.46840)(-3.98042,-1.52639)(-3.98695,-1.55357)%
+\polyline(-4.00000,-1.65121)(-4.00000,-1.75000)(-4.00000,-1.75000)\polyline(-4.00000,-1.84879)(-4.00000,-1.85000)(-3.99508,-1.91257)(-3.98695,-1.94643)%
+\polyline(-3.95218,-2.03848)(-3.92361,-2.08511)(-3.89496,-2.11865)\polyline(-3.82031,-2.18268)(-3.78160,-2.20640)(-3.73227,-2.22683)%
+\polyline(-3.63601,-2.24717)(-3.60000,-2.25000)(-3.53733,-2.25000)\polyline(-3.43853,-2.25000)(-3.33974,-2.25000)%
+\polyline(-3.24095,-2.25000)(-3.14216,-2.25000)\polyline(-3.04336,-2.25000)(-2.94457,-2.25000)%
+\polyline(-2.84578,-2.25000)(-2.74698,-2.25000)\polyline(-2.64819,-2.25000)(-2.54940,-2.25000)%
+\polyline(-2.45060,-2.25000)(-2.35181,-2.25000)\polyline(-2.25302,-2.25000)(-2.15422,-2.25000)%
+\polyline(-2.05543,-2.25000)(-1.95664,-2.25000)\polyline(-1.85784,-2.25000)(-1.75905,-2.25000)%
+\polyline(-1.66026,-2.25000)(-1.56147,-2.25000)\polyline(-1.46267,-2.25000)(-1.40000,-2.25000)(-1.36399,-2.24717)%
+\polyline(-1.26773,-2.22683)(-1.21840,-2.20640)(-1.17969,-2.18268)\polyline(-1.10504,-2.11865)(-1.07639,-2.08511)(-1.04782,-2.03848)%
+\polyline(-1.01305,-1.94643)(-1.00492,-1.91257)(-1.00000,-1.85000)(-1.00000,-1.84879)%
+%
+%
+\linethickness{0.012in}%
+\polyline(1.52000,2.25000)(1.52000,2.29000)(1.51508,2.35257)(1.50042,2.41361)(1.47640,2.47160)%
+(1.44361,2.52511)(1.40284,2.57284)(1.35511,2.61361)(1.30160,2.64640)(1.24361,2.67042)%
+(1.18257,2.68508)(1.12000,2.69000)(0.00000,2.69000)(-1.12000,2.69000)(-1.18257,2.68508)%
+(-1.24361,2.67042)(-1.30160,2.64640)(-1.35511,2.61361)(-1.40284,2.57284)(-1.44361,2.52511)%
+(-1.47640,2.47160)(-1.50042,2.41361)(-1.51508,2.35257)(-1.52000,2.29000)(-1.52000,2.25000)%
+(-1.52000,2.21000)(-1.51508,2.14743)(-1.50042,2.08639)(-1.47640,2.02840)(-1.44361,1.97489)%
+(-1.40284,1.92716)(-1.35511,1.88639)(-1.30160,1.85360)(-1.24361,1.82958)(-1.18257,1.81492)%
+(-1.12000,1.81000)(0.00000,1.81000)(1.12000,1.81000)(1.18257,1.81492)(1.24361,1.82958)%
+(1.30160,1.85360)(1.35511,1.88639)(1.40284,1.92716)(1.44361,1.97489)(1.47640,2.02840)%
+(1.50042,2.08639)(1.51508,2.14743)(1.52000,2.21000)(1.52000,2.25000)%
+%
+\linethickness{0.008in}%
+\settowidth{\Width}{\ketcindy}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{\ketcindy}\settodepth{\Depth}{\ketcindy}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(0.0000,0.0000){\hspace*{\Width}\raisebox{\Height}{\ketcindy}}%
+%
+%
+\settowidth{\Width}{Scilab}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{Scilab}\settodepth{\Depth}{Scilab}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-2.5000,-1.7500){\hspace*{\Width}\raisebox{\Height}{Scilab}}%
+%
+%
+\settowidth{\Width}{\LaTeX}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{\LaTeX}\settodepth{\Depth}{\LaTeX}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.5000,-1.7500){\hspace*{\Width}\raisebox{\Height}{\LaTeX}}%
+%
+%
+\settowidth{\Width}{Maxima}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{Maxima}\settodepth{\Depth}{Maxima}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(0.0000,2.2500){\hspace*{\Width}\raisebox{\Height}{Maxima}}%
+%
+%
+\settowidth{\Width}{\begin{minipage}{40mm} Source File\\ Batch File\end{minipage}}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{\begin{minipage}{40mm} Source File\\ Batch File\end{minipage}}\settodepth{\Depth}{\begin{minipage}{40mm} Source File\\ Batch File\end{minipage}}\setlength{\Height}{-\Height}%
+\put(-3.1800,1.3900){\hspace*{\Width}\raisebox{\Height}{\begin{minipage}{40mm} Source File\\ Batch File\end{minipage}}}%
+%
+%
+\settowidth{\Width}{Returned Results (textfile)}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{Returned Results (textfile)}\settodepth{\Depth}{Returned Results (textfile)}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(0.7200,1.1100){\hspace*{\Width}\raisebox{\Height}{Returned Results (textfile)}}%
+%
+%
+\settowidth{\Width}{Further Use in \ketcindy}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{Further Use in \ketcindy}\settodepth{\Depth}{Further Use in \ketcindy}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(1.6600,0.1000){\hspace*{\Width}\raisebox{\Height}{Further Use in \ketcindy}}%
+%
+%
+\linethickness{0.024in}%
+\polyline(-0.50000,-0.75000)(-0.92929,-1.17929)%
+%
+\linethickness{0.008in}%
+\polygon*(-0.90920,-1.07180)(-1.00000,-1.25000)(-0.82180,-1.15920)(-0.86550,-1.11550)%
+(-0.90920,-1.07180)\linethickness{0.001in}%
+\polyline(-0.90920,-1.07180)(-1.00000,-1.25000)(-0.82180,-1.15920)(-0.86550,-1.11550)%
+(-0.90920,-1.07180)(-1.00000,-1.25000)%
+%
+\linethickness{0.008in}%
+\linethickness{0.024in}%
+\polyline(1.05150,-1.21856)(0.57621,-0.81475)%
+%
+\linethickness{0.008in}%
+\polygon*(0.68497,-0.82606)(0.50000,-0.75000)(0.60494,-0.92026)(0.64496,-0.87316)%
+(0.68497,-0.82606)\linethickness{0.001in}%
+\polyline(0.68497,-0.82606)(0.50000,-0.75000)(0.60494,-0.92026)(0.64496,-0.87316)%
+(0.68497,-0.82606)(0.50000,-0.75000)%
+%
+\linethickness{0.008in}%
+\linethickness{0.024in}%
+\polyline(-0.75000,-1.75000)(0.58426,-1.76113)%
+%
+\linethickness{0.008in}%
+\polygon*(0.49354,-1.82218)(0.68426,-1.76197)(0.49457,-1.69858)(0.49406,-1.76038)%
+(0.49354,-1.82218)\linethickness{0.001in}%
+\polyline(0.49354,-1.82218)(0.68426,-1.76197)(0.49457,-1.69858)(0.49406,-1.76038)%
+(0.49354,-1.82218)(0.68426,-1.76197)%
+%
+\linethickness{0.008in}%
+\linethickness{0.024in}%
+\polyline(-0.20528,0.77111)(-0.19842,1.37117)%
+%
+\linethickness{0.008in}%
+\polygon*(-0.13765,1.28025)(-0.19728,1.47116)(-0.26125,1.28167)(-0.19945,1.28096)%
+(-0.13765,1.28025)\linethickness{0.001in}%
+\polyline(-0.13765,1.28025)(-0.19728,1.47116)(-0.26125,1.28167)(-0.19945,1.28096)%
+(-0.13765,1.28025)(-0.19728,1.47116)%
+%
+\linethickness{0.008in}%
+\linethickness{0.024in}%
+\polyline(0.30272,1.47116)(0.29586,0.87110)%
+%
+\linethickness{0.008in}%
+\polygon*(0.23509,0.96202)(0.29472,0.77111)(0.35869,0.96060)(0.29689,0.96131)(0.23509,0.96202)%
+\linethickness{0.001in}%
+\polyline(0.23509,0.96202)(0.29472,0.77111)(0.35869,0.96060)(0.29689,0.96131)(0.23509,0.96202)%
+(0.29472,0.77111)%
+%
+\linethickness{0.008in}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/cardioid1.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/cardioid1.tex
new file mode 100644
index 0000000000..662427ea27
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/cardioid1.tex
@@ -0,0 +1,76 @@
+%%% /Users/takatoosetsuo/Dropbox/kettoday/0928polar/fig/cardioid1.tex
+%%% Generator=cardioid1.cdy
+{\unitlength=1cm%
+\begin{picture}%
+(6.54,6.21)(-1.5,-3)%
+\special{pn 8}%
+%
+\special{pa 1575 -0}\special{pa 1574 -49}\special{pa 1570 -99}\special{pa 1564 -148}%
+\special{pa 1556 -197}\special{pa 1546 -245}\special{pa 1533 -292}\special{pa 1518 -339}%
+\special{pa 1501 -385}\special{pa 1482 -431}\special{pa 1461 -475}\special{pa 1438 -518}%
+\special{pa 1413 -559}\special{pa 1386 -600}\special{pa 1357 -639}\special{pa 1327 -676}%
+\special{pa 1295 -712}\special{pa 1261 -746}\special{pa 1226 -778}\special{pa 1190 -809}%
+\special{pa 1152 -837}\special{pa 1114 -864}\special{pa 1074 -889}\special{pa 1034 -911}%
+\special{pa 992 -932}\special{pa 950 -950}\special{pa 908 -967}\special{pa 865 -981}%
+\special{pa 822 -993}\special{pa 778 -1004}\special{pa 735 -1011}\special{pa 691 -1017}%
+\special{pa 648 -1021}\special{pa 605 -1023}\special{pa 562 -1022}\special{pa 520 -1020}%
+\special{pa 478 -1016}\special{pa 437 -1010}\special{pa 397 -1002}\special{pa 357 -992}%
+\special{pa 319 -980}\special{pa 281 -967}\special{pa 245 -952}\special{pa 209 -936}%
+\special{pa 175 -918}\special{pa 142 -899}\special{pa 111 -879}\special{pa 81 -858}%
+\special{pa 53 -835}\special{pa 26 -812}\special{pa -0 -787}\special{pa -24 -762}%
+\special{pa -46 -737}\special{pa -67 -710}\special{pa -86 -683}\special{pa -104 -656}%
+\special{pa -120 -629}\special{pa -134 -601}\special{pa -147 -573}\special{pa -158 -545}%
+\special{pa -168 -517}\special{pa -176 -490}\special{pa -183 -463}\special{pa -189 -436}%
+\special{pa -193 -409}\special{pa -195 -383}\special{pa -197 -358}\special{pa -197 -333}%
+\special{pa -196 -309}\special{pa -194 -285}\special{pa -191 -263}\special{pa -187 -241}%
+\special{pa -182 -220}\special{pa -176 -200}\special{pa -170 -181}\special{pa -163 -163}%
+\special{pa -156 -146}\special{pa -148 -130}\special{pa -139 -115}\special{pa -131 -101}%
+\special{pa -122 -88}\special{pa -113 -77}\special{pa -103 -66}\special{pa -94 -56}%
+\special{pa -85 -47}\special{pa -76 -39}\special{pa -68 -32}\special{pa -59 -26}%
+\special{pa -51 -20}\special{pa -44 -16}\special{pa -37 -12}\special{pa -30 -9}%
+\special{pa -24 -6}\special{pa -19 -4}\special{pa -14 -3}\special{pa -10 -2}%
+\special{pa -6 -1}\special{pa -3 -0}\special{pa -2 -0}\special{pa -0 -0}%
+\special{pa 0 -0}\special{pa -0 0}\special{pa -2 0}\special{pa -3 0}%
+\special{pa -6 1}\special{pa -10 2}\special{pa -14 3}\special{pa -19 4}%
+\special{pa -24 6}\special{pa -30 9}\special{pa -37 12}\special{pa -44 16}%
+\special{pa -51 20}\special{pa -59 26}\special{pa -68 32}\special{pa -76 39}%
+\special{pa -85 47}\special{pa -94 56}\special{pa -103 66}\special{pa -113 77}%
+\special{pa -122 88}\special{pa -131 101}\special{pa -139 115}\special{pa -148 130}%
+\special{pa -156 146}\special{pa -163 163}\special{pa -170 181}\special{pa -176 200}%
+\special{pa -182 220}\special{pa -187 241}\special{pa -191 263}\special{pa -194 285}%
+\special{pa -196 309}\special{pa -197 333}\special{pa -197 358}\special{pa -195 383}%
+\special{pa -193 409}\special{pa -189 436}\special{pa -183 463}\special{pa -176 490}%
+\special{pa -168 517}\special{pa -158 545}\special{pa -147 573}\special{pa -134 601}%
+\special{pa -120 629}\special{pa -104 656}\special{pa -86 683}\special{pa -67 710}%
+\special{pa -46 737}\special{pa -24 762}\special{pa -0 787}\special{pa 26 812}%
+\special{pa 53 835}\special{pa 81 858}\special{pa 111 879}\special{pa 142 899}%
+\special{pa 175 918}\special{pa 209 936}\special{pa 245 952}\special{pa 281 967}%
+\special{pa 319 980}\special{pa 357 992}\special{pa 397 1002}\special{pa 437 1010}%
+\special{pa 478 1016}\special{pa 520 1020}\special{pa 562 1022}\special{pa 605 1023}%
+\special{pa 648 1021}\special{pa 691 1017}\special{pa 735 1011}\special{pa 778 1004}%
+\special{pa 822 993}\special{pa 865 981}\special{pa 908 967}\special{pa 950 950}%
+\special{pa 992 932}\special{pa 1034 911}\special{pa 1074 889}\special{pa 1114 864}%
+\special{pa 1152 837}\special{pa 1190 809}\special{pa 1226 778}\special{pa 1261 746}%
+\special{pa 1295 712}\special{pa 1327 676}\special{pa 1357 639}\special{pa 1386 600}%
+\special{pa 1413 559}\special{pa 1438 518}\special{pa 1461 475}\special{pa 1482 431}%
+\special{pa 1501 385}\special{pa 1518 339}\special{pa 1533 292}\special{pa 1546 245}%
+\special{pa 1556 197}\special{pa 1564 148}\special{pa 1570 99}\special{pa 1574 49}%
+\special{pa 1575 -0}%
+\special{fp}%
+\special{pa -591 -0}\special{pa 1984 -0}%
+\special{fp}%
+\special{pa 0 1181}\special{pa 0 -1264}%
+\special{fp}%
+\settowidth{\Width}{$x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(5.0900000,0.0000000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{\Depth}%
+\put(0.0000000,3.2600000){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+\settowidth{\Width}{O}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(0.0500000,-0.0500000){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/changetable.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/changetable.pdf
new file mode 100644
index 0000000000..1247812850
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/changetable.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/checkCR.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/checkCR.tex
new file mode 100644
index 0000000000..0ec744993a
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/checkCR.tex
@@ -0,0 +1,42 @@
+%%% /Users/Hannya/Desktop/KeTCindy/fig/checkCR.tex
+%%% Generator=template1basic.cdy
+{\unitlength=7mm%
+\begin{picture}%
+(8.1,3.45)(-5.1,-1.45)%
+\special{pn 8}%
+%
+\special{pn 1}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa -1095 169}\special{pa -1106 165}\special{pa -1117 169}\special{pa -1121 181}\special{pa -1117 192}\special{pa -1106 196}\special{pa -1095 192}\special{pa -1090 181}\special{pa -1095 169}\special{sh 1}\special{fp}%
+\special{pa -922 -199}\special{pa -933 -204}\special{pa -944 -199}\special{pa -948 -188}\special{pa -944 -177}\special{pa -933 -172}\special{pa -922 -177}\special{pa -917 -188}\special{pa -922 -199}\special{sh 1}\special{fp}%
+\special{pa 342 139}\special{pa 331 135}\special{pa 320 139}\special{pa 315 150}\special{pa 320 162}\special{pa 331 166}\special{pa 342 162}\special{pa 347 150}\special{pa 342 139}\special{sh 1}\special{fp}%
+\special{pa 562 -287}\special{pa 551 -291}\special{pa 540 -287}\special{pa 535 -276}\special{pa 540 -264}\special{pa 551 -260}\special{pa 562 -264}\special{pa 567 -276}\special{pa 562 -287}\special{sh 1}\special{fp}%
+}%
+\special{pn 8}%
+\special{pa -1106 181}\special{pa -1158 157}\special{pa -1192 121}\special{pa -1206 77}%
+\special{pa -1205 28}\special{pa -1188 -23}\special{pa -1158 -72}\special{pa -1115 -117}%
+\special{pa -1063 -153}\special{pa -1001 -178}\special{pa -933 -188}\special{pa -846 -179}%
+\special{pa -733 -153}\special{pa -601 -114}\special{pa -456 -67}\special{pa -304 -15}%
+\special{pa -152 36}\special{pa -6 83}\special{pa 128 120}\special{pa 242 144}%
+\special{pa 331 150}\special{pa 403 136}\special{pa 469 106}\special{pa 527 63}%
+\special{pa 576 10}\special{pa 613 -47}\special{pa 636 -105}\special{pa 643 -161}%
+\special{pa 633 -211}\special{pa 603 -250}\special{pa 551 -276}%
+\special{fp}%
+\settowidth{\Width}{A}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{A}\settodepth{\Depth}{A}\setlength{\Height}{-\Height}%
+\put(-4.0100000,-0.8742857){\hspace*{\Width}\raisebox{\Height}{A}}%
+%
+\settowidth{\Width}{B}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{B}\settodepth{\Depth}{B}\setlength{\Height}{\Depth}%
+\put(-3.3800000,0.8942857){\hspace*{\Width}\raisebox{\Height}{B}}%
+%
+\settowidth{\Width}{C}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{C}\settodepth{\Depth}{C}\setlength{\Height}{-\Height}%
+\put(1.2000000,-0.7642857){\hspace*{\Width}\raisebox{\Height}{C}}%
+%
+\settowidth{\Width}{D}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{D}\settodepth{\Depth}{D}\setlength{\Height}{\Depth}%
+\put(2.0000000,1.2142857){\hspace*{\Width}\raisebox{\Height}{D}}%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/checkb10.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/checkb10.tex
new file mode 100644
index 0000000000..46709db074
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/checkb10.tex
@@ -0,0 +1,175 @@
+%%% checkb.tex 2015-1-6 10:57
+%%% checkb.sce 2015-1-6 6:35
+{\unitlength=1cm%
+\begin{picture}%
+( 18.13000, 4.08000)( -4.96000, -1.99000)%
+\special{pn 8}%
+%
+\special{pa -1356 171}\special{pa -1364 166}\special{pa -1374 166}\special{pa -1382 170}%
+\special{pa -1388 177}\special{pa -1390 186}\special{pa -1387 195}\special{pa -1380 202}%
+\special{pa -1371 205}\special{pa -1362 203}\special{pa -1355 197}\special{pa -1351 189}%
+\special{pa -1351 179}\special{pa -1356 171}\special{sh 1}\special{fp}%
+\special{pa -982 -321}\special{pa -990 -326}\special{pa -1000 -326}\special{pa -1008 -323}%
+\special{pa -1014 -315}\special{pa -1016 -306}\special{pa -1013 -297}\special{pa -1006 -290}%
+\special{pa -997 -287}\special{pa -988 -289}\special{pa -981 -295}\special{pa -977 -304}%
+\special{pa -977 -313}\special{pa -982 -321}\special{sh 1}\special{fp}%
+\special{pa -69 293}\special{pa -77 288}\special{pa -86 288}\special{pa -95 292}\special{pa -101 299}%
+\special{pa -102 308}\special{pa -100 317}\special{pa -93 324}\special{pa -84 327}%
+\special{pa -75 325}\special{pa -67 319}\special{pa -63 311}\special{pa -64 301}\special{pa -69 293}%
+\special{sh 1}\special{fp}%
+\special{pa 754 344}\special{pa 746 339}\special{pa 737 339}\special{pa 728 343}\special{pa 722 350}%
+\special{pa 721 359}\special{pa 723 368}\special{pa 730 375}\special{pa 739 378}\special{pa 748 376}%
+\special{pa 756 370}\special{pa 760 362}\special{pa 759 352}\special{pa 754 344}\special{sh 1}\special{fp}%
+\special{pa 1341 -321}\special{pa 1333 -326}\special{pa 1323 -326}\special{pa 1315 -323}%
+\special{pa 1309 -315}\special{pa 1307 -306}\special{pa 1310 -297}\special{pa 1317 -290}%
+\special{pa 1326 -287}\special{pa 1335 -289}\special{pa 1342 -295}\special{pa 1346 -304}%
+\special{pa 1346 -313}\special{pa 1341 -321}\special{sh 1}\special{fp}%
+\special{pa 2010 376}\special{pa 2002 371}\special{pa 1993 370}\special{pa 1984 374}%
+\special{pa 1978 382}\special{pa 1976 391}\special{pa 1979 400}\special{pa 1986 407}%
+\special{pa 1995 409}\special{pa 2004 408}\special{pa 2012 402}\special{pa 2015 393}%
+\special{pa 2015 384}\special{pa 2010 376}\special{sh 1}\special{fp}%
+\special{pa 2679 -396}\special{pa 2671 -401}\special{pa 2662 -401}\special{pa 2653 -397}%
+\special{pa 2647 -390}\special{pa 2646 -381}\special{pa 2649 -372}\special{pa 2655 -365}%
+\special{pa 2664 -362}\special{pa 2673 -364}\special{pa 2681 -370}\special{pa 2685 -378}%
+\special{pa 2684 -388}\special{pa 2679 -396}\special{sh 1}\special{fp}%
+\special{pa -1230 6}\special{pa -1238 1}\special{pa -1248 0}\special{pa -1256 4}\special{pa -1262 12}%
+\special{pa -1264 21}\special{pa -1261 30}\special{pa -1254 37}\special{pa -1245 39}%
+\special{pa -1236 38}\special{pa -1229 32}\special{pa -1225 23}\special{pa -1225 14}%
+\special{pa -1230 6}\special{sh 1}\special{fp}%
+\special{pa -1108 -160}\special{pa -1116 -164}\special{pa -1126 -165}\special{pa -1134 -161}%
+\special{pa -1140 -154}\special{pa -1142 -144}\special{pa -1139 -135}\special{pa -1132 -129}%
+\special{pa -1123 -126}\special{pa -1114 -128}\special{pa -1107 -134}\special{pa -1103 -142}%
+\special{pa -1103 -152}\special{pa -1108 -160}\special{sh 1}\special{fp}%
+\special{pa -679 -116}\special{pa -687 -121}\special{pa -696 -122}\special{pa -705 -118}%
+\special{pa -711 -110}\special{pa -713 -101}\special{pa -710 -92}\special{pa -703 -86}%
+\special{pa -694 -83}\special{pa -685 -84}\special{pa -677 -90}\special{pa -674 -99}%
+\special{pa -674 -108}\special{pa -679 -116}\special{sh 1}\special{fp}%
+\special{pa -372 88}\special{pa -380 84}\special{pa -389 83}\special{pa -398 87}\special{pa -404 94}%
+\special{pa -405 104}\special{pa -403 113}\special{pa -396 119}\special{pa -387 122}%
+\special{pa -378 120}\special{pa -370 115}\special{pa -366 106}\special{pa -367 97}%
+\special{pa -372 88}\special{sh 1}\special{fp}%
+\special{pa 951 124}\special{pa 943 119}\special{pa 933 118}\special{pa 925 122}\special{pa 919 130}%
+\special{pa 917 139}\special{pa 920 148}\special{pa 927 155}\special{pa 936 157}\special{pa 945 156}%
+\special{pa 953 150}\special{pa 956 141}\special{pa 956 132}\special{pa 951 124}\special{sh 1}\special{fp}%
+\special{pa 1144 -101}\special{pa 1136 -105}\special{pa 1126 -106}\special{pa 1118 -102}%
+\special{pa 1112 -95}\special{pa 1110 -85}\special{pa 1113 -76}\special{pa 1120 -70}%
+\special{pa 1129 -67}\special{pa 1138 -69}\special{pa 1145 -74}\special{pa 1149 -83}%
+\special{pa 1149 -92}\special{pa 1144 -101}\special{sh 1}\special{fp}%
+\special{pa 1565 -89}\special{pa 1557 -94}\special{pa 1548 -94}\special{pa 1539 -90}%
+\special{pa 1533 -83}\special{pa 1532 -74}\special{pa 1534 -65}\special{pa 1541 -58}%
+\special{pa 1550 -55}\special{pa 1559 -57}\special{pa 1567 -63}\special{pa 1571 -71}%
+\special{pa 1570 -81}\special{pa 1565 -89}\special{sh 1}\special{fp}%
+\special{pa 1786 144}\special{pa 1778 139}\special{pa 1768 138}\special{pa 1760 142}%
+\special{pa 1754 149}\special{pa 1752 159}\special{pa 1755 168}\special{pa 1761 174}%
+\special{pa 1770 177}\special{pa 1780 175}\special{pa 1787 170}\special{pa 1791 161}%
+\special{pa 1790 152}\special{pa 1786 144}\special{sh 1}\special{fp}%
+\special{pa 2234 120}\special{pa 2226 115}\special{pa 2217 114}\special{pa 2208 118}%
+\special{pa 2203 126}\special{pa 2201 135}\special{pa 2204 144}\special{pa 2210 151}%
+\special{pa 2219 154}\special{pa 2229 152}\special{pa 2236 146}\special{pa 2240 137}%
+\special{pa 2239 128}\special{pa 2234 120}\special{sh 1}\special{fp}%
+\special{pa 2455 -136}\special{pa 2447 -141}\special{pa 2437 -141}\special{pa 2429 -138}%
+\special{pa 2423 -130}\special{pa 2421 -121}\special{pa 2424 -112}\special{pa 2431 -105}%
+\special{pa 2440 -102}\special{pa 2449 -104}\special{pa 2456 -110}\special{pa 2460 -118}%
+\special{pa 2460 -128}\special{pa 2455 -136}\special{sh 1}\special{fp}%
+\settowidth{\Width}{A}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{A}\settodepth{\Depth}{A}\setlength{\Height}{-\Height}%
+\put(-3.6300,-0.6200){\hspace*{\Width}\raisebox{\Height}{A}}%
+%
+%
+\settowidth{\Width}{Ap1}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{Ap1}\settodepth{\Depth}{Ap1}\setlength{\Height}{\Depth}%
+\put(-3.3100,0.1000){\hspace*{\Width}\raisebox{\Height}{Ap1}}%
+%
+%
+\settowidth{\Width}{Aq1}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{Aq1}\settodepth{\Depth}{Aq1}\setlength{\Height}{\Depth}%
+\put(-3.0000,0.5200){\hspace*{\Width}\raisebox{\Height}{Aq1}}%
+%
+%
+\settowidth{\Width}{Ap2}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{Ap2}\settodepth{\Depth}{Ap2}\setlength{\Height}{\Depth}%
+\put(-1.6100,0.4100){\hspace*{\Width}\raisebox{\Height}{Ap2}}%
+%
+%
+\settowidth{\Width}{Aq2}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{Aq2}\settodepth{\Depth}{Aq2}\setlength{\Height}{\Depth}%
+\put(-0.8300,-0.1100){\hspace*{\Width}\raisebox{\Height}{Aq2}}%
+%
+%
+\settowidth{\Width}{Bp1}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{Bp1}\settodepth{\Depth}{Bp1}\setlength{\Height}{\Depth}%
+\put(2.2300,-0.2000){\hspace*{\Width}\raisebox{\Height}{Bp1}}%
+%
+%
+\settowidth{\Width}{Bq1}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{Bq1}\settodepth{\Depth}{Bq1}\setlength{\Height}{\Depth}%
+\put(2.7200,0.3700){\hspace*{\Width}\raisebox{\Height}{Bq1}}%
+%
+%
+\settowidth{\Width}{Bp2}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{Bp2}\settodepth{\Depth}{Bp2}\setlength{\Height}{\Depth}%
+\put(4.0900,0.3400){\hspace*{\Width}\raisebox{\Height}{Bp2}}%
+%
+%
+\settowidth{\Width}{Bq2}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{Bq2}\settodepth{\Depth}{Bq2}\setlength{\Height}{\Depth}%
+\put(4.6500,-0.2500){\hspace*{\Width}\raisebox{\Height}{Bq2}}%
+%
+%
+\settowidth{\Width}{Bp3}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{Bp3}\settodepth{\Depth}{Bp3}\setlength{\Height}{-\Height}%
+\put(5.7900,-0.4900){\hspace*{\Width}\raisebox{\Height}{Bp3}}%
+%
+%
+\settowidth{\Width}{Bq3}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{Bq3}\settodepth{\Depth}{Bq3}\setlength{\Height}{-\Height}%
+\put(6.3500,0.1600){\hspace*{\Width}\raisebox{\Height}{Bq3}}%
+%
+%
+\settowidth{\Width}{B}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{B}\settodepth{\Depth}{B}\setlength{\Height}{\Depth}%
+\put(-2.5300,0.9300){\hspace*{\Width}\raisebox{\Height}{B}}%
+%
+%
+\settowidth{\Width}{C}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{C}\settodepth{\Depth}{C}\setlength{\Height}{-\Height}%
+\put(-0.0600,-0.9300){\hspace*{\Width}\raisebox{\Height}{C}}%
+%
+%
+\settowidth{\Width}{D}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{D}\settodepth{\Depth}{D}\setlength{\Height}{-\Height}%
+\put(1.7300,-1.0600){\hspace*{\Width}\raisebox{\Height}{D}}%
+%
+%
+\settowidth{\Width}{E}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{E}\settodepth{\Depth}{E}\setlength{\Height}{\Depth}%
+\put(3.3700,0.9300){\hspace*{\Width}\raisebox{\Height}{E}}%
+%
+%
+\settowidth{\Width}{F}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{F}\settodepth{\Depth}{F}\setlength{\Height}{-\Height}%
+\put(5.0700,-1.1400){\hspace*{\Width}\raisebox{\Height}{F}}%
+%
+%
+\settowidth{\Width}{G}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{G}\settodepth{\Depth}{G}\setlength{\Height}{\Depth}%
+\put(6.9200,1.1200){\hspace*{\Width}\raisebox{\Height}{G}}%
+%
+%
+\special{pa -1370 185}\special{pa -1332 135}\special{pa -1295 86}\special{pa -1258 36}%
+\special{pa -1220 -13}\special{pa -1183 -63}\special{pa -1146 -112}\special{pa -1109 -161}%
+\special{pa -1071 -210}\special{pa -1034 -259}\special{pa -996 -307}\special{pa -905 -246}%
+\special{pa -814 -184}\special{pa -722 -123}\special{pa -631 -61}\special{pa -539 0}%
+\special{pa -448 61}\special{pa -356 123}\special{pa -265 184}\special{pa -174 246}%
+\special{pa -83 307}%
+\special{fp}%
+\special{pa 740 358}\special{pa 799 292}\special{pa 858 226}\special{pa 916 159}\special{pa 975 92}%
+\special{pa 1033 26}\special{pa 1092 -41}\special{pa 1150 -108}\special{pa 1209 -174}%
+\special{pa 1268 -241}\special{pa 1327 -307}\special{pa 1394 -237}\special{pa 1461 -168}%
+\special{pa 1528 -98}\special{pa 1595 -28}\special{pa 1661 41}\special{pa 1728 111}%
+\special{pa 1795 181}\special{pa 1862 250}\special{pa 1929 320}\special{pa 1996 390}%
+\special{pa 2063 313}\special{pa 2130 236}\special{pa 2197 159}\special{pa 2264 82}%
+\special{pa 2331 5}\special{pa 2397 -72}\special{pa 2464 -149}\special{pa 2531 -226}%
+\special{pa 2598 -304}\special{pa 2665 -382}%
+\special{fp}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/checkb11.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/checkb11.tex
new file mode 100644
index 0000000000..692c9c0013
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/checkb11.tex
@@ -0,0 +1,78 @@
+%%% checkb.tex 2015-1-6 11:11
+%%% checkb.sce 2015-1-6 6:35
+{\unitlength=1cm%
+\begin{picture}%
+( 18.13000, 4.08000)( -4.96000, -1.99000)%
+\special{pn 8}%
+%
+\special{pa -1356 171}\special{pa -1364 166}\special{pa -1374 166}\special{pa -1382 170}%
+\special{pa -1388 177}\special{pa -1390 186}\special{pa -1387 195}\special{pa -1380 202}%
+\special{pa -1371 205}\special{pa -1362 203}\special{pa -1355 197}\special{pa -1351 189}%
+\special{pa -1351 179}\special{pa -1356 171}\special{sh 1}\special{fp}%
+\special{pa -821 191}\special{pa -829 186}\special{pa -838 185}\special{pa -847 189}%
+\special{pa -853 197}\special{pa -854 206}\special{pa -851 215}\special{pa -845 222}%
+\special{pa -836 224}\special{pa -827 223}\special{pa -819 217}\special{pa -815 208}%
+\special{pa -816 199}\special{pa -821 191}\special{sh 1}\special{fp}%
+\special{pa -69 293}\special{pa -77 288}\special{pa -86 288}\special{pa -95 292}\special{pa -101 299}%
+\special{pa -102 308}\special{pa -100 317}\special{pa -93 324}\special{pa -84 327}%
+\special{pa -75 325}\special{pa -67 319}\special{pa -63 311}\special{pa -64 301}\special{pa -69 293}%
+\special{sh 1}\special{fp}%
+\special{pa -1466 -77}\special{pa -1474 -82}\special{pa -1484 -82}\special{pa -1492 -78}%
+\special{pa -1498 -71}\special{pa -1500 -62}\special{pa -1497 -53}\special{pa -1490 -46}%
+\special{pa -1482 -43}\special{pa -1472 -45}\special{pa -1465 -51}\special{pa -1461 -59}%
+\special{pa -1462 -69}\special{pa -1466 -77}\special{sh 1}\special{fp}%
+\special{pa -1179 -313}\special{pa -1187 -318}\special{pa -1196 -319}\special{pa -1205 -315}%
+\special{pa -1211 -307}\special{pa -1213 -298}\special{pa -1210 -289}\special{pa -1203 -282}%
+\special{pa -1194 -280}\special{pa -1185 -281}\special{pa -1177 -287}\special{pa -1174 -296}%
+\special{pa -1174 -305}\special{pa -1179 -313}\special{sh 1}\special{fp}%
+\special{pa -522 573}\special{pa -530 568}\special{pa -539 567}\special{pa -548 571}%
+\special{pa -553 579}\special{pa -555 588}\special{pa -552 597}\special{pa -546 603}%
+\special{pa -537 606}\special{pa -527 605}\special{pa -520 599}\special{pa -516 590}%
+\special{pa -517 581}\special{pa -522 573}\special{sh 1}\special{fp}%
+\special{pa -183 553}\special{pa -191 548}\special{pa -200 548}\special{pa -209 551}%
+\special{pa -215 559}\special{pa -216 568}\special{pa -214 577}\special{pa -207 584}%
+\special{pa -198 587}\special{pa -189 585}\special{pa -181 579}\special{pa -177 570}%
+\special{pa -178 561}\special{pa -183 553}\special{sh 1}\special{fp}%
+\settowidth{\Width}{A}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{A}\settodepth{\Depth}{A}\setlength{\Height}{-\Height}%
+\put(-3.6300,-0.6200){\hspace*{\Width}\raisebox{\Height}{A}}%
+%
+%
+\settowidth{\Width}{Ap1}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{Ap1}\settodepth{\Depth}{Ap1}\setlength{\Height}{\Depth}%
+\put(-3.9100,0.3100){\hspace*{\Width}\raisebox{\Height}{Ap1}}%
+%
+%
+\settowidth{\Width}{Aq1}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{Aq1}\settodepth{\Depth}{Aq1}\setlength{\Height}{\Depth}%
+\put(-2.8800,0.9100){\hspace*{\Width}\raisebox{\Height}{Aq1}}%
+%
+%
+\settowidth{\Width}{Ap2}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{Ap2}\settodepth{\Depth}{Ap2}\setlength{\Height}{-\Height}%
+\put(-1.3600,-1.6400){\hspace*{\Width}\raisebox{\Height}{Ap2}}%
+%
+%
+\settowidth{\Width}{Aq2}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{Aq2}\settodepth{\Depth}{Aq2}\setlength{\Height}{-\Height}%
+\put(-0.3500,-1.5900){\hspace*{\Width}\raisebox{\Height}{Aq2}}%
+%
+%
+\settowidth{\Width}{B}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{B}\settodepth{\Depth}{B}\setlength{\Height}{\Depth}%
+\put(-1.9700,-0.3700){\hspace*{\Width}\raisebox{\Height}{B}}%
+%
+%
+\settowidth{\Width}{C}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{C}\settodepth{\Depth}{C}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-0.0600,-0.7800){\hspace*{\Width}\raisebox{\Height}{C}}%
+%
+%
+\special{pa -1370 185}\special{pa -1392 112}\special{pa -1391 43}\special{pa -1371 -15}%
+\special{pa -1332 -60}\special{pa -1278 -87}\special{pa -1210 -91}\special{pa -1129 -69}%
+\special{pa -1038 -15}\special{pa -940 75}\special{pa -835 205}\special{pa -744 307}%
+\special{pa -653 387}\special{pa -562 444}\special{pa -474 481}\special{pa -389 497}%
+\special{pa -311 493}\special{pa -239 472}\special{pa -176 433}\special{pa -123 378}%
+\special{pa -83 307}%
+\special{fp}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/checkb8.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/checkb8.tex
new file mode 100644
index 0000000000..9681e71d54
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/checkb8.tex
@@ -0,0 +1,75 @@
+%%% checkb.tex 2015-1-6 10:38
+%%% checkb.sce 2015-1-6 6:35
+{\unitlength=1cm%
+\begin{picture}%
+( 10.00000, 4.00000)( -4.96000, -1.99000)%
+\special{pn 8}%
+%
+\special{pa -1356 171}\special{pa -1364 166}\special{pa -1374 166}\special{pa -1382 170}%
+\special{pa -1388 177}\special{pa -1390 186}\special{pa -1387 195}\special{pa -1380 202}%
+\special{pa -1371 205}\special{pa -1362 203}\special{pa -1355 197}\special{pa -1351 189}%
+\special{pa -1351 179}\special{pa -1356 171}\special{sh 1}\special{fp}%
+\special{pa -726 -321}\special{pa -734 -326}\special{pa -744 -326}\special{pa -752 -323}%
+\special{pa -758 -315}\special{pa -760 -306}\special{pa -757 -297}\special{pa -750 -290}%
+\special{pa -741 -287}\special{pa -732 -289}\special{pa -725 -295}\special{pa -721 -304}%
+\special{pa -721 -313}\special{pa -726 -321}\special{sh 1}\special{fp}%
+\special{pa 805 159}\special{pa 797 154}\special{pa 788 154}\special{pa 779 158}\special{pa 773 165}%
+\special{pa 772 174}\special{pa 774 183}\special{pa 781 190}\special{pa 790 193}\special{pa 799 191}%
+\special{pa 807 185}\special{pa 811 177}\special{pa 810 167}\special{pa 805 159}\special{sh 1}\special{fp}%
+\special{pa -1144 6}\special{pa -1152 1}\special{pa -1161 0}\special{pa -1170 4}\special{pa -1175 12}%
+\special{pa -1177 21}\special{pa -1174 30}\special{pa -1168 37}\special{pa -1159 39}%
+\special{pa -1149 38}\special{pa -1142 32}\special{pa -1138 23}\special{pa -1139 14}%
+\special{pa -1144 6}\special{sh 1}\special{fp}%
+\special{pa -935 -160}\special{pa -943 -164}\special{pa -952 -165}\special{pa -961 -161}%
+\special{pa -967 -154}\special{pa -968 -144}\special{pa -966 -135}\special{pa -959 -129}%
+\special{pa -950 -126}\special{pa -941 -128}\special{pa -933 -134}\special{pa -929 -142}%
+\special{pa -930 -152}\special{pa -935 -160}\special{sh 1}\special{fp}%
+\special{pa -214 -160}\special{pa -222 -164}\special{pa -232 -165}\special{pa -240 -161}%
+\special{pa -246 -154}\special{pa -248 -144}\special{pa -245 -135}\special{pa -239 -129}%
+\special{pa -230 -126}\special{pa -220 -128}\special{pa -213 -134}\special{pa -209 -142}%
+\special{pa -210 -152}\special{pa -214 -160}\special{sh 1}\special{fp}%
+\special{pa 293 -2}\special{pa 285 -7}\special{pa 276 -8}\special{pa 267 -4}\special{pa 262 4}%
+\special{pa 260 13}\special{pa 263 22}\special{pa 269 29}\special{pa 278 31}\special{pa 288 30}%
+\special{pa 295 24}\special{pa 299 15}\special{pa 298 6}\special{pa 293 -2}\special{sh 1}\special{fp}%
+\settowidth{\Width}{A}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{A}\settodepth{\Depth}{A}\setlength{\Height}{-\Height}%
+\put(-3.6300,-0.6200){\hspace*{\Width}\raisebox{\Height}{A}}%
+%
+%
+\settowidth{\Width}{Ap1}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{Ap1}\settodepth{\Depth}{Ap1}\setlength{\Height}{\Depth}%
+\put(-3.0900,0.1000){\hspace*{\Width}\raisebox{\Height}{Ap1}}%
+%
+%
+\settowidth{\Width}{Aq1}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{Aq1}\settodepth{\Depth}{Aq1}\setlength{\Height}{\Depth}%
+\put(-2.5600,0.5200){\hspace*{\Width}\raisebox{\Height}{Aq1}}%
+%
+%
+\settowidth{\Width}{Ap2}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{Ap2}\settodepth{\Depth}{Ap2}\setlength{\Height}{\Depth}%
+\put(-0.4300,0.5200){\hspace*{\Width}\raisebox{\Height}{Ap2}}%
+%
+%
+\settowidth{\Width}{Aq2}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{Aq2}\settodepth{\Depth}{Aq2}\setlength{\Height}{\Depth}%
+\put(0.8600,0.1200){\hspace*{\Width}\raisebox{\Height}{Aq2}}%
+%
+%
+\settowidth{\Width}{B}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{B}\settodepth{\Depth}{B}\setlength{\Height}{\Depth}%
+\put(-1.8800,0.9300){\hspace*{\Width}\raisebox{\Height}{B}}%
+%
+%
+\settowidth{\Width}{C}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{C}\settodepth{\Depth}{C}\setlength{\Height}{-\Height}%
+\put(2.1600,-0.5900){\hspace*{\Width}\raisebox{\Height}{C}}%
+%
+%
+\special{pa -1370 185}\special{pa -1306 135}\special{pa -1243 86}\special{pa -1180 36}%
+\special{pa -1117 -13}\special{pa -1054 -63}\special{pa -991 -112}\special{pa -928 -161}%
+\special{pa -865 -210}\special{pa -803 -259}\special{pa -740 -307}\special{pa -587 -259}%
+\special{pa -433 -211}\special{pa -280 -163}\special{pa -127 -115}\special{pa 26 -67}%
+\special{pa 179 -19}\special{pa 332 29}\special{pa 485 77}\special{pa 638 125}\special{pa 791 173}%
+\special{fp}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/checkb9.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/checkb9.tex
new file mode 100644
index 0000000000..f36427ebae
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/checkb9.tex
@@ -0,0 +1,57 @@
+%%% checkb.tex 2015-1-6 10:35
+%%% checkb.sce 2015-1-6 6:35
+{\unitlength=1cm%
+\begin{picture}%
+( 10.00000, 4.00000)( -4.96000, -1.99000)%
+\special{pn 8}%
+%
+\special{pa -1356 171}\special{pa -1364 166}\special{pa -1374 166}\special{pa -1382 170}%
+\special{pa -1388 177}\special{pa -1390 186}\special{pa -1387 195}\special{pa -1380 202}%
+\special{pa -1371 205}\special{pa -1362 203}\special{pa -1355 197}\special{pa -1351 189}%
+\special{pa -1351 179}\special{pa -1356 171}\special{sh 1}\special{fp}%
+\special{pa -726 -321}\special{pa -734 -326}\special{pa -744 -326}\special{pa -752 -323}%
+\special{pa -758 -315}\special{pa -760 -306}\special{pa -757 -297}\special{pa -750 -290}%
+\special{pa -741 -287}\special{pa -732 -289}\special{pa -725 -295}\special{pa -721 -304}%
+\special{pa -721 -313}\special{pa -726 -321}\special{sh 1}\special{fp}%
+\special{pa 805 159}\special{pa 797 154}\special{pa 788 154}\special{pa 779 158}\special{pa 773 165}%
+\special{pa 772 174}\special{pa 774 183}\special{pa 781 190}\special{pa 790 193}\special{pa 799 191}%
+\special{pa 807 185}\special{pa 811 177}\special{pa 810 167}\special{pa 805 159}\special{sh 1}\special{fp}%
+\special{pa -1041 -77}\special{pa -1049 -82}\special{pa -1059 -82}\special{pa -1067 -78}%
+\special{pa -1073 -71}\special{pa -1075 -62}\special{pa -1072 -53}\special{pa -1065 -46}%
+\special{pa -1056 -43}\special{pa -1047 -45}\special{pa -1040 -51}\special{pa -1036 -59}%
+\special{pa -1036 -69}\special{pa -1041 -77}\special{sh 1}\special{fp}%
+\special{pa 41 -81}\special{pa 33 -86}\special{pa 24 -86}\special{pa 15 -82}\special{pa 10 -75}%
+\special{pa 8 -66}\special{pa 11 -57}\special{pa 17 -50}\special{pa 26 -47}\special{pa 36 -49}%
+\special{pa 43 -55}\special{pa 47 -63}\special{pa 46 -73}\special{pa 41 -81}\special{sh 1}\special{fp}%
+\settowidth{\Width}{A}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{A}\settodepth{\Depth}{A}\setlength{\Height}{-\Height}%
+\put(-3.6300,-0.6200){\hspace*{\Width}\raisebox{\Height}{A}}%
+%
+%
+\settowidth{\Width}{Ap1}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{Ap1}\settodepth{\Depth}{Ap1}\setlength{\Height}{\Depth}%
+\put(-2.8300,0.3100){\hspace*{\Width}\raisebox{\Height}{Ap1}}%
+%
+%
+\settowidth{\Width}{Ap2}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{Ap2}\settodepth{\Depth}{Ap2}\setlength{\Height}{\Depth}%
+\put(0.2200,0.3200){\hspace*{\Width}\raisebox{\Height}{Ap2}}%
+%
+%
+\settowidth{\Width}{B}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{B}\settodepth{\Depth}{B}\setlength{\Height}{\Depth}%
+\put(-1.8800,0.9300){\hspace*{\Width}\raisebox{\Height}{B}}%
+%
+%
+\settowidth{\Width}{C}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{C}\settodepth{\Depth}{C}\setlength{\Height}{-\Height}%
+\put(2.1600,-0.5900){\hspace*{\Width}\raisebox{\Height}{C}}%
+%
+%
+\special{pa -1370 185}\special{pa -1307 135}\special{pa -1244 86}\special{pa -1181 37}%
+\special{pa -1118 -13}\special{pa -1055 -62}\special{pa -992 -111}\special{pa -929 -160}%
+\special{pa -866 -209}\special{pa -803 -258}\special{pa -740 -307}\special{pa -587 -259}%
+\special{pa -433 -211}\special{pa -280 -163}\special{pa -127 -115}\special{pa 27 -67}%
+\special{pa 180 -19}\special{pa 333 29}\special{pa 486 77}\special{pa 639 125}\special{pa 791 173}%
+\special{fp}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/checkbe1.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/checkbe1.tex
new file mode 100644
index 0000000000..73d7f6f447
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/checkbe1.tex
@@ -0,0 +1,38 @@
+%%% checkb.tex 2015-1-6 7:22
+%%% checkb.sce 2015-1-6 6:35
+{\unitlength=1cm%
+\begin{picture}%
+( 5.95000, 4.06000)( -3.00000, -2.00000)%
+\special{pn 8}%
+%
+\special{pa -738 419}\special{pa -746 414}\special{pa -756 414}\special{pa -764 418}%
+\special{pa -770 425}\special{pa -772 434}\special{pa -769 443}\special{pa -762 450}%
+\special{pa -753 453}\special{pa -744 451}\special{pa -736 445}\special{pa -733 437}%
+\special{pa -733 427}\special{pa -738 419}\special{sh 1}\special{fp}%
+\special{pa 888 470}\special{pa 880 465}\special{pa 870 465}\special{pa 862 469}\special{pa 856 476}%
+\special{pa 854 485}\special{pa 857 494}\special{pa 864 501}\special{pa 873 504}\special{pa 882 502}%
+\special{pa 890 496}\special{pa 893 488}\special{pa 893 478}\special{pa 888 470}\special{sh 1}\special{fp}%
+\special{pa -439 -238}\special{pa -447 -243}\special{pa -456 -244}\special{pa -465 -240}%
+\special{pa -471 -232}\special{pa -472 -223}\special{pa -470 -214}\special{pa -463 -208}%
+\special{pa -454 -205}\special{pa -445 -206}\special{pa -437 -212}\special{pa -433 -221}%
+\special{pa -434 -230}\special{pa -439 -238}\special{sh 1}\special{fp}%
+\settowidth{\Width}{A}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{A}\settodepth{\Depth}{A}\setlength{\Height}{-\Height}%
+\put(-2.0600,-1.2500){\hspace*{\Width}\raisebox{\Height}{A}}%
+%
+%
+\settowidth{\Width}{B}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{B}\settodepth{\Depth}{B}\setlength{\Height}{-\Height}%
+\put(2.3700,-1.3800){\hspace*{\Width}\raisebox{\Height}{B}}%
+%
+%
+\settowidth{\Width}{C}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{C}\settodepth{\Depth}{C}\setlength{\Height}{\Depth}%
+\put(-1.3000,0.7200){\hspace*{\Width}\raisebox{\Height}{C}}%
+%
+%
+\special{pa -752 433}\special{pa -682 315}\special{pa -591 225}\special{pa -480 162}%
+\special{pa -348 126}\special{pa -196 117}\special{pa -23 136}\special{pa 170 182}%
+\special{pa 384 255}\special{pa 619 356}\special{pa 874 484}%
+\special{fp}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/checkbe2.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/checkbe2.tex
new file mode 100644
index 0000000000..135a8ea0d3
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/checkbe2.tex
@@ -0,0 +1,47 @@
+%%% checkb.tex 2015-1-6 7:20
+%%% checkb.sce 2015-1-6 6:35
+{\unitlength=1cm%
+\begin{picture}%
+( 5.95000, 4.06000)( -3.00000, -2.00000)%
+\special{pn 8}%
+%
+\special{pa -738 419}\special{pa -746 414}\special{pa -756 414}\special{pa -764 418}%
+\special{pa -770 425}\special{pa -772 434}\special{pa -769 443}\special{pa -762 450}%
+\special{pa -753 453}\special{pa -744 451}\special{pa -736 445}\special{pa -733 437}%
+\special{pa -733 427}\special{pa -738 419}\special{sh 1}\special{fp}%
+\special{pa 888 470}\special{pa 880 465}\special{pa 870 465}\special{pa 862 469}\special{pa 856 476}%
+\special{pa 854 485}\special{pa 857 494}\special{pa 864 501}\special{pa 873 504}\special{pa 882 502}%
+\special{pa 890 496}\special{pa 893 488}\special{pa 893 478}\special{pa 888 470}\special{sh 1}\special{fp}%
+\special{pa -439 -238}\special{pa -447 -243}\special{pa -456 -244}\special{pa -465 -240}%
+\special{pa -471 -232}\special{pa -472 -223}\special{pa -470 -214}\special{pa -463 -208}%
+\special{pa -454 -205}\special{pa -445 -206}\special{pa -437 -212}\special{pa -433 -221}%
+\special{pa -434 -230}\special{pa -439 -238}\special{sh 1}\special{fp}%
+\special{pa 427 -282}\special{pa 419 -287}\special{pa 410 -287}\special{pa 401 -283}%
+\special{pa 395 -276}\special{pa 394 -267}\special{pa 397 -258}\special{pa 403 -251}%
+\special{pa 412 -248}\special{pa 421 -250}\special{pa 429 -256}\special{pa 433 -264}%
+\special{pa 432 -274}\special{pa 427 -282}\special{sh 1}\special{fp}%
+\settowidth{\Width}{A}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{A}\settodepth{\Depth}{A}\setlength{\Height}{-\Height}%
+\put(-2.0600,-1.2500){\hspace*{\Width}\raisebox{\Height}{A}}%
+%
+%
+\settowidth{\Width}{B}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{B}\settodepth{\Depth}{B}\setlength{\Height}{-\Height}%
+\put(2.3700,-1.3800){\hspace*{\Width}\raisebox{\Height}{B}}%
+%
+%
+\settowidth{\Width}{C}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{C}\settodepth{\Depth}{C}\setlength{\Height}{\Depth}%
+\put(-1.3000,0.7200){\hspace*{\Width}\raisebox{\Height}{C}}%
+%
+%
+\settowidth{\Width}{D}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{D}\settodepth{\Depth}{D}\setlength{\Height}{\Depth}%
+\put(0.9000,0.8300){\hspace*{\Width}\raisebox{\Height}{D}}%
+%
+%
+\special{pa -752 433}\special{pa -646 254}\special{pa -512 114}\special{pa -356 12}%
+\special{pa -183 -50}\special{pa 0 -70}\special{pa 189 -48}\special{pa 376 17}\special{pa 557 127}%
+\special{pa 725 282}\special{pa 874 484}%
+\special{fp}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/checkbe3.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/checkbe3.tex
new file mode 100644
index 0000000000..25709dcee3
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/checkbe3.tex
@@ -0,0 +1,65 @@
+%%% checkb.tex 2015-1-6 7:31
+%%% checkb.sce 2015-1-6 6:35
+{\unitlength=1cm%
+\begin{picture}%
+( 5.95000, 4.06000)( -3.00000, -2.00000)%
+\special{pn 8}%
+%
+\special{pa -911 368}\special{pa -919 363}\special{pa -929 363}\special{pa -937 366}%
+\special{pa -943 374}\special{pa -945 383}\special{pa -942 392}\special{pa -935 399}%
+\special{pa -926 402}\special{pa -917 400}\special{pa -910 394}\special{pa -906 385}%
+\special{pa -906 376}\special{pa -911 368}\special{sh 1}\special{fp}%
+\special{pa -254 356}\special{pa -262 351}\special{pa -271 351}\special{pa -280 355}%
+\special{pa -286 362}\special{pa -287 371}\special{pa -285 380}\special{pa -278 387}%
+\special{pa -269 390}\special{pa -260 388}\special{pa -252 382}\special{pa -248 374}%
+\special{pa -249 364}\special{pa -254 356}\special{sh 1}\special{fp}%
+\special{pa 888 478}\special{pa 880 473}\special{pa 870 473}\special{pa 862 477}\special{pa 856 484}%
+\special{pa 854 493}\special{pa 857 502}\special{pa 864 509}\special{pa 873 512}\special{pa 882 510}%
+\special{pa 890 504}\special{pa 893 496}\special{pa 893 486}\special{pa 888 478}\special{sh 1}\special{fp}%
+\special{pa -655 -45}\special{pa -663 -50}\special{pa -673 -51}\special{pa -681 -47}%
+\special{pa -687 -40}\special{pa -689 -30}\special{pa -686 -21}\special{pa -679 -15}%
+\special{pa -670 -12}\special{pa -661 -14}\special{pa -654 -19}\special{pa -650 -28}%
+\special{pa -650 -37}\special{pa -655 -45}\special{sh 1}\special{fp}%
+\special{pa 116 -53}\special{pa 108 -58}\special{pa 99 -59}\special{pa 90 -55}\special{pa 84 -47}%
+\special{pa 83 -38}\special{pa 86 -29}\special{pa 92 -23}\special{pa 101 -20}\special{pa 110 -21}%
+\special{pa 118 -27}\special{pa 122 -36}\special{pa 121 -45}\special{pa 116 -53}\special{sh 1}\special{fp}%
+\special{pa 518 -77}\special{pa 510 -82}\special{pa 500 -82}\special{pa 492 -78}\special{pa 486 -71}%
+\special{pa 484 -62}\special{pa 487 -53}\special{pa 494 -46}\special{pa 503 -43}\special{pa 512 -45}%
+\special{pa 519 -51}\special{pa 523 -59}\special{pa 523 -69}\special{pa 518 -77}\special{sh 1}\special{fp}%
+\settowidth{\Width}{A}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{A}\settodepth{\Depth}{A}\setlength{\Height}{-\Height}%
+\put(-2.5000,-1.1200){\hspace*{\Width}\raisebox{\Height}{A}}%
+%
+%
+\settowidth{\Width}{B}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{B}\settodepth{\Depth}{B}\setlength{\Height}{-\Height}%
+\put(-0.6800,-1.0900){\hspace*{\Width}\raisebox{\Height}{B}}%
+%
+%
+\settowidth{\Width}{C}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{C}\settodepth{\Depth}{C}\setlength{\Height}{-\Height}%
+\put(2.3700,-1.4000){\hspace*{\Width}\raisebox{\Height}{C}}%
+%
+%
+\settowidth{\Width}{D}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{D}\settodepth{\Depth}{D}\setlength{\Height}{\Depth}%
+\put(-1.7000,0.2300){\hspace*{\Width}\raisebox{\Height}{D}}%
+%
+%
+\settowidth{\Width}{E}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{E}\settodepth{\Depth}{E}\setlength{\Height}{\Depth}%
+\put(0.1100,0.2500){\hspace*{\Width}\raisebox{\Height}{E}}%
+%
+%
+\settowidth{\Width}{F}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{F}\settodepth{\Depth}{F}\setlength{\Height}{\Depth}%
+\put(1.4300,0.3100){\hspace*{\Width}\raisebox{\Height}{F}}%
+%
+%
+\special{pa -925 382}\special{pa -873 307}\special{pa -817 249}\special{pa -759 207}%
+\special{pa -697 182}\special{pa -633 172}\special{pa -566 179}\special{pa -496 202}%
+\special{pa -423 242}\special{pa -347 298}\special{pa -268 370}\special{pa -156 259}%
+\special{pa -42 172}\special{pa 72 111}\special{pa 187 76}\special{pa 303 69}\special{pa 419 91}%
+\special{pa 534 144}\special{pa 649 227}\special{pa 762 343}\special{pa 874 492}%
+\special{fp}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/checkbe4.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/checkbe4.tex
new file mode 100644
index 0000000000..e05f41701e
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/checkbe4.tex
@@ -0,0 +1,66 @@
+%%% checkb.tex 2015-1-6 8:23
+%%% checkb.sce 2015-1-6 6:35
+{\unitlength=1cm%
+\begin{picture}%
+( 14.00000, 3.95000)( -3.03000, -1.91000)%
+\special{pn 8}%
+%
+\special{pa -974 -167}\special{pa -982 -172}\special{pa -992 -173}\special{pa -1000 -169}%
+\special{pa -1006 -162}\special{pa -1008 -152}\special{pa -1005 -143}\special{pa -998 -137}%
+\special{pa -989 -134}\special{pa -980 -136}\special{pa -973 -141}\special{pa -969 -150}%
+\special{pa -969 -159}\special{pa -974 -167}\special{sh 1}\special{fp}%
+\special{pa -273 -128}\special{pa -282 -133}\special{pa -291 -134}\special{pa -300 -130}%
+\special{pa -305 -122}\special{pa -307 -113}\special{pa -304 -104}\special{pa -298 -97}%
+\special{pa -289 -95}\special{pa -279 -96}\special{pa -272 -102}\special{pa -268 -111}%
+\special{pa -269 -120}\special{pa -273 -128}\special{sh 1}\special{fp}%
+\special{pa 919 -167}\special{pa 911 -172}\special{pa 902 -173}\special{pa 893 -169}%
+\special{pa 888 -162}\special{pa 886 -152}\special{pa 889 -143}\special{pa 895 -137}%
+\special{pa 904 -134}\special{pa 914 -136}\special{pa 921 -141}\special{pa 925 -150}%
+\special{pa 924 -159}\special{pa 919 -167}\special{sh 1}\special{fp}%
+\special{pa -644 -538}\special{pa -652 -542}\special{pa -661 -543}\special{pa -670 -539}%
+\special{pa -675 -532}\special{pa -677 -522}\special{pa -674 -513}\special{pa -668 -507}%
+\special{pa -659 -504}\special{pa -649 -506}\special{pa -642 -511}\special{pa -638 -520}%
+\special{pa -639 -529}\special{pa -644 -538}\special{sh 1}\special{fp}%
+\special{pa 128 305}\special{pa 120 300}\special{pa 111 300}\special{pa 102 303}\special{pa 96 311}%
+\special{pa 95 320}\special{pa 97 329}\special{pa 104 336}\special{pa 113 339}\special{pa 122 337}%
+\special{pa 130 331}\special{pa 134 322}\special{pa 133 313}\special{pa 128 305}\special{sh 1}\special{fp}%
+\special{pa 734 325}\special{pa 726 320}\special{pa 717 319}\special{pa 708 323}\special{pa 703 331}%
+\special{pa 701 340}\special{pa 704 349}\special{pa 710 355}\special{pa 719 358}\special{pa 729 357}%
+\special{pa 736 351}\special{pa 740 342}\special{pa 739 333}\special{pa 734 325}\special{sh 1}\special{fp}%
+\settowidth{\Width}{A}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{A}\settodepth{\Depth}{A}\setlength{\Height}{-\Height}%
+\put(-2.6600,0.2400){\hspace*{\Width}\raisebox{\Height}{A}}%
+%
+%
+\settowidth{\Width}{B}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{B}\settodepth{\Depth}{B}\setlength{\Height}{-\Height}%
+\put(-0.7300,0.1400){\hspace*{\Width}\raisebox{\Height}{B}}%
+%
+%
+\settowidth{\Width}{C}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{C}\settodepth{\Depth}{C}\setlength{\Height}{\Depth}%
+\put(2.4500,0.5400){\hspace*{\Width}\raisebox{\Height}{C}}%
+%
+%
+\settowidth{\Width}{D}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{D}\settodepth{\Depth}{D}\setlength{\Height}{\Depth}%
+\put(-1.6700,1.4800){\hspace*{\Width}\raisebox{\Height}{D}}%
+%
+%
+\settowidth{\Width}{E}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{E}\settodepth{\Depth}{E}\setlength{\Height}{-\Height}%
+\put(0.1400,-0.9600){\hspace*{\Width}\raisebox{\Height}{E}}%
+%
+%
+\settowidth{\Width}{F}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{F}\settodepth{\Depth}{F}\setlength{\Height}{-\Height}%
+\put(1.9800,-1.0100){\hspace*{\Width}\raisebox{\Height}{F}}%
+%
+%
+\special{pa -988 -154}\special{pa -922 -220}\special{pa -854 -270}\special{pa -786 -305}%
+\special{pa -717 -325}\special{pa -648 -329}\special{pa -577 -317}\special{pa -506 -290}%
+\special{pa -434 -247}\special{pa -361 -188}\special{pa -287 -114}\special{pa -161 3}%
+\special{pa -27 95}\special{pa 112 161}\special{pa 253 201}\special{pa 390 213}\special{pa 521 198}%
+\special{pa 642 154}\special{pa 749 81}\special{pa 838 -21}\special{pa 906 -154}%
+\special{fp}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/checkbe5.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/checkbe5.tex
new file mode 100644
index 0000000000..2515fb39fc
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/checkbe5.tex
@@ -0,0 +1,63 @@
+%%% checkb.tex 2015-1-6 8:30
+%%% checkb.sce 2015-1-6 6:35
+{\unitlength=1cm%
+\begin{picture}%
+( 14.00000, 3.95000)( -3.03000, -1.91000)%
+\special{pn 8}%
+%
+\special{pa -974 -167}\special{pa -982 -172}\special{pa -992 -173}\special{pa -1000 -169}%
+\special{pa -1006 -162}\special{pa -1008 -152}\special{pa -1005 -143}\special{pa -998 -137}%
+\special{pa -989 -134}\special{pa -980 -136}\special{pa -973 -141}\special{pa -969 -150}%
+\special{pa -969 -159}\special{pa -974 -167}\special{sh 1}\special{fp}%
+\special{pa -273 -128}\special{pa -282 -133}\special{pa -291 -134}\special{pa -300 -130}%
+\special{pa -305 -122}\special{pa -307 -113}\special{pa -304 -104}\special{pa -298 -97}%
+\special{pa -289 -95}\special{pa -279 -96}\special{pa -272 -102}\special{pa -268 -111}%
+\special{pa -269 -120}\special{pa -273 -128}\special{sh 1}\special{fp}%
+\special{pa 919 -167}\special{pa 911 -172}\special{pa 902 -173}\special{pa 893 -169}%
+\special{pa 888 -162}\special{pa 886 -152}\special{pa 889 -143}\special{pa 895 -137}%
+\special{pa 904 -134}\special{pa 914 -136}\special{pa 921 -141}\special{pa 925 -150}%
+\special{pa 924 -159}\special{pa 919 -167}\special{sh 1}\special{fp}%
+\special{pa -644 -538}\special{pa -652 -542}\special{pa -661 -543}\special{pa -670 -539}%
+\special{pa -675 -532}\special{pa -677 -522}\special{pa -674 -513}\special{pa -668 -507}%
+\special{pa -659 -504}\special{pa -649 -506}\special{pa -642 -511}\special{pa -638 -520}%
+\special{pa -639 -529}\special{pa -644 -538}\special{sh 1}\special{fp}%
+\special{pa 128 305}\special{pa 120 300}\special{pa 111 300}\special{pa 102 303}\special{pa 96 311}%
+\special{pa 95 320}\special{pa 97 329}\special{pa 104 336}\special{pa 113 339}\special{pa 122 337}%
+\special{pa 130 331}\special{pa 134 322}\special{pa 133 313}\special{pa 128 305}\special{sh 1}\special{fp}%
+\special{pa 734 325}\special{pa 726 320}\special{pa 717 319}\special{pa 708 323}\special{pa 703 331}%
+\special{pa 701 340}\special{pa 704 349}\special{pa 710 355}\special{pa 719 358}\special{pa 729 357}%
+\special{pa 736 351}\special{pa 740 342}\special{pa 739 333}\special{pa 734 325}\special{sh 1}\special{fp}%
+\settowidth{\Width}{A}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{A}\settodepth{\Depth}{A}\setlength{\Height}{-\Height}%
+\put(-2.6600,0.2400){\hspace*{\Width}\raisebox{\Height}{A}}%
+%
+%
+\settowidth{\Width}{B}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{B}\settodepth{\Depth}{B}\setlength{\Height}{-\Height}%
+\put(-0.7300,0.1400){\hspace*{\Width}\raisebox{\Height}{B}}%
+%
+%
+\settowidth{\Width}{C}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{C}\settodepth{\Depth}{C}\setlength{\Height}{\Depth}%
+\put(2.4500,0.5400){\hspace*{\Width}\raisebox{\Height}{C}}%
+%
+%
+\settowidth{\Width}{D}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{D}\settodepth{\Depth}{D}\setlength{\Height}{\Depth}%
+\put(-1.6700,1.4800){\hspace*{\Width}\raisebox{\Height}{D}}%
+%
+%
+\settowidth{\Width}{E}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{E}\settodepth{\Depth}{E}\setlength{\Height}{-\Height}%
+\put(0.1400,-0.9600){\hspace*{\Width}\raisebox{\Height}{E}}%
+%
+%
+\settowidth{\Width}{F}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{F}\settodepth{\Depth}{F}\setlength{\Height}{-\Height}%
+\put(1.9800,-1.0100){\hspace*{\Width}\raisebox{\Height}{F}}%
+%
+%
+\special{pa -988 -154}\special{pa -763 -314}\special{pa -530 -301}\special{pa -287 -114}%
+\special{pa 159 177}\special{pa 603 172}\special{pa 906 -154}%
+\special{fp}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/checkbe6.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/checkbe6.tex
new file mode 100644
index 0000000000..23e8a1e9fb
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/checkbe6.tex
@@ -0,0 +1,92 @@
+%%% checkb.tex 2015-1-6 9:16
+%%% checkb.sce 2015-1-6 6:35
+{\unitlength=1cm%
+\begin{picture}%
+( 14.00000, 3.95000)( -3.03000, -1.91000)%
+\special{pn 8}%
+%
+\special{pa -988 -154}\special{pa -985 -157}\special{pa -982 -161}\special{pa -978 -164}\special{pa -975 -168}\special{pa -972 -172}\special{pa -968 -175}\special{pa -965 -178}\special{pa -962 -182}\special{fp}%
+\special{pa -934 -209}\special{pa -932 -211}\special{pa -928 -214}\special{pa -925 -217}\special{pa -922 -220}\special{pa -918 -223}\special{pa -915 -226}\special{pa -912 -228}\special{pa -908 -231}\special{pa -905 -234}\special{fp}%
+\special{pa -874 -257}\special{pa -871 -259}\special{pa -868 -262}\special{pa -864 -264}\special{pa -861 -266}\special{pa -858 -268}\special{pa -854 -270}\special{pa -851 -273}\special{pa -848 -275}\special{pa -844 -277}\special{pa -842 -278}\special{fp}%
+\special{pa -808 -296}\special{pa -807 -297}\special{pa -803 -298}\special{pa -800 -300}\special{pa -796 -301}\special{pa -793 -303}\special{pa -790 -304}\special{pa -786 -305}\special{pa -783 -307}\special{pa -779 -308}\special{pa -776 -309}\special{pa -773 -311}\special{pa -772 -311}\special{fp}%
+\special{pa -735 -321}\special{pa -735 -321}\special{pa -731 -322}\special{pa -728 -323}\special{pa -724 -324}\special{pa -721 -324}\special{pa -717 -325}\special{pa -714 -325}\special{pa -710 -326}\special{pa -707 -326}\special{pa -703 -327}\special{pa -700 -327}\special{pa -697 -328}\special{fp}%
+\special{pa -658 -329}\special{pa -658 -329}\special{pa -655 -329}\special{pa -651 -329}\special{pa -648 -329}\special{pa -644 -329}\special{pa -641 -328}\special{pa -637 -328}\special{pa -634 -328}\special{pa -630 -327}\special{pa -627 -327}\special{pa -623 -326}\special{pa -620 -326}\special{fp}%
+\special{pa -582 -318}\special{pa -581 -318}\special{pa -577 -317}\special{pa -574 -316}\special{pa -570 -315}\special{pa -567 -314}\special{pa -563 -313}\special{pa -559 -312}\special{pa -556 -310}\special{pa -552 -309}\special{pa -549 -308}\special{pa -545 -307}\special{fp}%
+\special{pa -510 -292}\special{pa -509 -291}\special{pa -506 -290}\special{pa -502 -288}\special{pa -499 -286}\special{pa -495 -284}\special{pa -492 -282}\special{pa -488 -280}\special{pa -484 -278}\special{pa -481 -276}\special{pa -477 -274}\special{pa -476 -274}\special{fp}%
+\special{pa -443 -253}\special{pa -441 -252}\special{pa -437 -249}\special{pa -434 -247}\special{pa -430 -244}\special{pa -427 -242}\special{pa -423 -239}\special{pa -419 -236}\special{pa -416 -234}\special{pa -412 -231}\special{pa -412 -231}\special{fp}%
+\special{pa -382 -206}\special{pa -379 -204}\special{pa -376 -201}\special{pa -372 -198}\special{pa -368 -195}\special{pa -365 -192}\special{pa -361 -188}\special{pa -357 -185}\special{pa -354 -182}\special{pa -353 -181}\special{fp}%
+\special{pa -325 -154}\special{pa -324 -153}\special{pa -321 -149}\special{pa -317 -146}\special{pa -313 -142}\special{pa -310 -138}\special{pa -306 -134}\special{pa -302 -130}\special{pa -298 -126}\special{pa -298 -126}\special{fp}%
+\special{pa -272 -98}\special{pa -269 -95}\special{pa -263 -89}\special{pa -257 -82}\special{pa -251 -76}\special{pa -245 -71}\special{fp}%
+\special{pa -217 -44}\special{pa -213 -41}\special{pa -207 -35}\special{pa -200 -29}\special{pa -194 -24}\special{pa -188 -19}\special{fp}%
+\special{pa -158 6}\special{pa -155 8}\special{pa -148 14}\special{pa -142 19}\special{pa -135 24}\special{pa -128 29}\special{pa -128 29}\special{fp}%
+\special{pa -96 52}\special{pa -95 52}\special{pa -88 57}\special{pa -81 62}\special{pa -75 66}\special{pa -68 70}\special{pa -64 73}\special{fp}%
+\special{pa -31 93}\special{pa -27 95}\special{pa -20 99}\special{pa -13 103}\special{pa -6 107}\special{pa 1 111}\special{pa 3 112}\special{fp}%
+\special{pa 37 129}\special{pa 42 132}\special{pa 49 135}\special{pa 56 138}\special{pa 63 141}\special{pa 70 144}\special{pa 72 145}\special{fp}%
+\special{pa 108 160}\special{pa 112 161}\special{pa 119 164}\special{pa 126 166}\special{pa 133 169}\special{pa 140 171}\special{pa 144 173}\special{fp}%
+\special{pa 181 184}\special{pa 183 184}\special{pa 190 186}\special{pa 197 188}\special{pa 204 190}\special{pa 211 192}\special{pa 218 193}\special{pa 219 194}\special{fp}%
+\special{pa 256 201}\special{pa 260 202}\special{pa 267 203}\special{pa 274 204}\special{pa 281 205}\special{pa 287 206}\special{pa 294 207}\special{pa 294 207}\special{fp}%
+\special{pa 333 211}\special{pa 336 211}\special{pa 343 212}\special{pa 349 212}\special{pa 356 213}\special{pa 363 213}\special{pa 370 213}\special{pa 371 213}\special{fp}%
+\special{pa 410 213}\special{pa 410 213}\special{pa 417 212}\special{pa 424 212}\special{pa 430 211}\special{pa 437 211}\special{pa 444 210}\special{pa 448 210}\special{fp}%
+\special{pa 487 205}\special{pa 489 204}\special{pa 496 203}\special{pa 502 202}\special{pa 509 200}\special{pa 515 199}\special{pa 521 198}\special{pa 524 197}\special{fp}%
+\special{pa 562 187}\special{pa 565 186}\special{pa 571 184}\special{pa 577 181}\special{pa 583 179}\special{pa 589 177}\special{pa 595 175}\special{pa 598 174}\special{fp}%
+\special{pa 633 158}\special{pa 636 157}\special{pa 642 154}\special{pa 648 151}\special{pa 654 148}\special{pa 659 145}\special{pa 665 142}\special{pa 667 140}\special{fp}%
+\special{pa 700 119}\special{pa 703 117}\special{pa 708 114}\special{pa 713 110}\special{pa 719 106}\special{pa 724 102}\special{pa 729 98}\special{pa 731 96}\special{fp}%
+\special{pa 760 71}\special{pa 764 68}\special{pa 768 63}\special{pa 773 58}\special{pa 778 54}\special{pa 782 49}\special{pa 787 44}\special{pa 787 44}\special{fp}%
+\special{pa 812 14}\special{pa 813 13}\special{pa 818 7}\special{pa 822 2}\special{pa 826 -4}\special{pa 830 -10}\special{pa 834 -15}\special{pa 835 -17}\special{fp}%
+\special{pa 856 -49}\special{pa 857 -51}\special{pa 861 -58}\special{pa 864 -64}\special{pa 868 -70}\special{pa 871 -77}\special{pa 874 -83}\special{fp}%
+\special{pa 891 -118}\special{pa 894 -125}\special{pa 897 -132}\special{pa 900 -139}\special{pa 903 -146}\special{pa 906 -154}\special{fp}%
+%
+%
+\special{pa -974 -167}\special{pa -982 -172}\special{pa -992 -173}\special{pa -1000 -169}%
+\special{pa -1006 -162}\special{pa -1008 -152}\special{pa -1005 -143}\special{pa -998 -137}%
+\special{pa -989 -134}\special{pa -980 -136}\special{pa -973 -141}\special{pa -969 -150}%
+\special{pa -969 -159}\special{pa -974 -167}\special{sh 1}\special{fp}%
+\special{pa -273 -128}\special{pa -282 -133}\special{pa -291 -134}\special{pa -300 -130}%
+\special{pa -305 -122}\special{pa -307 -113}\special{pa -304 -104}\special{pa -298 -97}%
+\special{pa -289 -95}\special{pa -279 -96}\special{pa -272 -102}\special{pa -268 -111}%
+\special{pa -269 -120}\special{pa -273 -128}\special{sh 1}\special{fp}%
+\special{pa 919 -167}\special{pa 911 -172}\special{pa 902 -173}\special{pa 893 -169}%
+\special{pa 888 -162}\special{pa 886 -152}\special{pa 889 -143}\special{pa 895 -137}%
+\special{pa 904 -134}\special{pa 914 -136}\special{pa 921 -141}\special{pa 925 -150}%
+\special{pa 924 -159}\special{pa 919 -167}\special{sh 1}\special{fp}%
+\special{pa -644 -538}\special{pa -652 -542}\special{pa -661 -543}\special{pa -670 -539}%
+\special{pa -675 -532}\special{pa -677 -522}\special{pa -674 -513}\special{pa -668 -507}%
+\special{pa -659 -504}\special{pa -649 -506}\special{pa -642 -511}\special{pa -638 -520}%
+\special{pa -639 -529}\special{pa -644 -538}\special{sh 1}\special{fp}%
+\special{pa 128 305}\special{pa 120 300}\special{pa 111 300}\special{pa 102 303}\special{pa 96 311}%
+\special{pa 95 320}\special{pa 97 329}\special{pa 104 336}\special{pa 113 339}\special{pa 122 337}%
+\special{pa 130 331}\special{pa 134 322}\special{pa 133 313}\special{pa 128 305}\special{sh 1}\special{fp}%
+\special{pa 734 325}\special{pa 726 320}\special{pa 717 319}\special{pa 708 323}\special{pa 703 331}%
+\special{pa 701 340}\special{pa 704 349}\special{pa 710 355}\special{pa 719 358}\special{pa 729 357}%
+\special{pa 736 351}\special{pa 740 342}\special{pa 739 333}\special{pa 734 325}\special{sh 1}\special{fp}%
+\settowidth{\Width}{A}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{A}\settodepth{\Depth}{A}\setlength{\Height}{-\Height}%
+\put(-2.6600,0.2400){\hspace*{\Width}\raisebox{\Height}{A}}%
+%
+%
+\settowidth{\Width}{B}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{B}\settodepth{\Depth}{B}\setlength{\Height}{-\Height}%
+\put(-0.7300,0.1400){\hspace*{\Width}\raisebox{\Height}{B}}%
+%
+%
+\settowidth{\Width}{C}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{C}\settodepth{\Depth}{C}\setlength{\Height}{\Depth}%
+\put(2.4500,0.5400){\hspace*{\Width}\raisebox{\Height}{C}}%
+%
+%
+\settowidth{\Width}{D}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{D}\settodepth{\Depth}{D}\setlength{\Height}{\Depth}%
+\put(-1.6700,1.4800){\hspace*{\Width}\raisebox{\Height}{D}}%
+%
+%
+\settowidth{\Width}{E}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{E}\settodepth{\Depth}{E}\setlength{\Height}{-\Height}%
+\put(0.1400,-0.9600){\hspace*{\Width}\raisebox{\Height}{E}}%
+%
+%
+\settowidth{\Width}{F}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{F}\settodepth{\Depth}{F}\setlength{\Height}{-\Height}%
+\put(1.9800,-1.0100){\hspace*{\Width}\raisebox{\Height}{F}}%
+%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/checkbe7.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/checkbe7.tex
new file mode 100644
index 0000000000..5b9c081ba3
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/checkbe7.tex
@@ -0,0 +1,105 @@
+%%% checkb.tex 2015-1-13 20:23
+%%% checkb.sce 2015-1-13 13:55
+{\unitlength=1cm%
+\begin{picture}%
+( 11.00000, 2.95000)( -4.99000, -0.99000)%
+\special{pn 8}%
+%
+\special{pa -1472 173}\special{pa -1407 65}\special{pa -1323 -21}\special{pa -1224 -85}%
+\special{pa -1114 -128}\special{pa -997 -149}\special{pa -876 -150}\special{pa -754 -130}%
+\special{pa -635 -89}\special{pa -523 -29}\special{pa -421 51}\special{pa -312 -68}%
+\special{pa -182 -172}\special{pa -38 -255}\special{pa 114 -314}\special{pa 271 -344}%
+\special{pa 426 -343}\special{pa 575 -306}\special{pa 711 -228}\special{pa 829 -107}%
+\special{pa 925 63}\special{pa 1009 -73}\special{pa 1105 -167}\special{pa 1208 -223}%
+\special{pa 1315 -246}\special{pa 1423 -240}\special{pa 1526 -209}\special{pa 1622 -157}%
+\special{pa 1706 -88}\special{pa 1774 -7}\special{pa 1823 83}%
+\special{fp}%
+\special{pa -1459 159}\special{pa -1467 154}\special{pa -1476 154}\special{pa -1485 158}%
+\special{pa -1490 165}\special{pa -1492 174}\special{pa -1489 183}\special{pa -1483 190}%
+\special{pa -1474 193}\special{pa -1464 191}\special{pa -1457 185}\special{pa -1453 177}%
+\special{pa -1454 167}\special{pa -1459 159}\special{sh 1}\special{fp}%
+\special{pa -407 37}\special{pa -415 32}\special{pa -425 32}\special{pa -433 36}\special{pa -439 43}%
+\special{pa -441 52}\special{pa -438 61}\special{pa -431 68}\special{pa -422 71}\special{pa -413 69}%
+\special{pa -406 63}\special{pa -402 55}\special{pa -402 45}\special{pa -407 37}\special{sh 1}\special{fp}%
+\special{pa 939 49}\special{pa 931 44}\special{pa 922 44}\special{pa 913 47}\special{pa 907 55}%
+\special{pa 906 64}\special{pa 908 73}\special{pa 915 80}\special{pa 924 83}\special{pa 933 81}%
+\special{pa 941 75}\special{pa 945 67}\special{pa 944 57}\special{pa 939 49}\special{sh 1}\special{fp}%
+\special{pa 1837 69}\special{pa 1829 64}\special{pa 1819 63}\special{pa 1811 67}\special{pa 1805 75}%
+\special{pa 1803 84}\special{pa 1806 93}\special{pa 1813 100}\special{pa 1822 102}%
+\special{pa 1831 101}\special{pa 1838 95}\special{pa 1842 86}\special{pa 1842 77}%
+\special{pa 1837 69}\special{sh 1}\special{fp}%
+\special{pa -1273 -238}\special{pa -1282 -243}\special{pa -1291 -244}\special{pa -1300 -240}%
+\special{pa -1305 -232}\special{pa -1307 -223}\special{pa -1304 -214}\special{pa -1298 -208}%
+\special{pa -1289 -205}\special{pa -1279 -206}\special{pa -1272 -212}\special{pa -1268 -221}%
+\special{pa -1269 -230}\special{pa -1273 -238}\special{sh 1}\special{fp}%
+\special{pa -726 -262}\special{pa -734 -267}\special{pa -744 -267}\special{pa -752 -264}%
+\special{pa -758 -256}\special{pa -760 -247}\special{pa -757 -238}\special{pa -750 -231}%
+\special{pa -741 -228}\special{pa -732 -230}\special{pa -725 -236}\special{pa -721 -244}%
+\special{pa -721 -254}\special{pa -726 -262}\special{sh 1}\special{fp}%
+\special{pa -81 -384}\special{pa -89 -389}\special{pa -98 -389}\special{pa -107 -386}%
+\special{pa -112 -378}\special{pa -114 -369}\special{pa -111 -360}\special{pa -105 -353}%
+\special{pa -96 -350}\special{pa -86 -352}\special{pa -79 -358}\special{pa -75 -367}%
+\special{pa -76 -376}\special{pa -81 -384}\special{sh 1}\special{fp}%
+\special{pa 664 -601}\special{pa 655 -605}\special{pa 646 -606}\special{pa 637 -602}%
+\special{pa 632 -595}\special{pa 630 -585}\special{pa 633 -576}\special{pa 639 -570}%
+\special{pa 648 -567}\special{pa 658 -569}\special{pa 665 -574}\special{pa 669 -583}%
+\special{pa 668 -592}\special{pa 664 -601}\special{sh 1}\special{fp}%
+\special{pa 1195 -478}\special{pa 1187 -483}\special{pa 1178 -484}\special{pa 1169 -480}%
+\special{pa 1163 -473}\special{pa 1161 -463}\special{pa 1164 -454}\special{pa 1171 -448}%
+\special{pa 1180 -445}\special{pa 1189 -447}\special{pa 1197 -452}\special{pa 1200 -461}%
+\special{pa 1200 -470}\special{pa 1195 -478}\special{sh 1}\special{fp}%
+\special{pa 1711 -238}\special{pa 1703 -243}\special{pa 1693 -244}\special{pa 1685 -240}%
+\special{pa 1679 -232}\special{pa 1677 -223}\special{pa 1680 -214}\special{pa 1687 -208}%
+\special{pa 1696 -205}\special{pa 1705 -206}\special{pa 1712 -212}\special{pa 1716 -221}%
+\special{pa 1716 -230}\special{pa 1711 -238}\special{sh 1}\special{fp}%
+\settowidth{\Width}{A}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{A}\settodepth{\Depth}{A}\setlength{\Height}{-\Height}%
+\put(-3.7400,-0.5900){\hspace*{\Width}\raisebox{\Height}{A}}%
+%
+%
+\settowidth{\Width}{B}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{B}\settodepth{\Depth}{B}\setlength{\Height}{-\Height}%
+\put(-1.0700,-0.2800){\hspace*{\Width}\raisebox{\Height}{B}}%
+%
+%
+\settowidth{\Width}{C}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{C}\settodepth{\Depth}{C}\setlength{\Height}{-\Height}%
+\put(2.3500,-0.3100){\hspace*{\Width}\raisebox{\Height}{C}}%
+%
+%
+\settowidth{\Width}{D}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{D}\settodepth{\Depth}{D}\setlength{\Height}{-\Height}%
+\put(4.6300,-0.3600){\hspace*{\Width}\raisebox{\Height}{D}}%
+%
+%
+\settowidth{\Width}{E}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{E}\settodepth{\Depth}{E}\setlength{\Height}{\Depth}%
+\put(-3.2700,0.7200){\hspace*{\Width}\raisebox{\Height}{E}}%
+%
+%
+\settowidth{\Width}{F}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{F}\settodepth{\Depth}{F}\setlength{\Height}{\Depth}%
+\put(-1.8800,0.7800){\hspace*{\Width}\raisebox{\Height}{F}}%
+%
+%
+\settowidth{\Width}{G}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{G}\settodepth{\Depth}{G}\setlength{\Height}{\Depth}%
+\put(-0.2400,1.0900){\hspace*{\Width}\raisebox{\Height}{G}}%
+%
+%
+\settowidth{\Width}{H}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{H}\settodepth{\Depth}{H}\setlength{\Height}{\Depth}%
+\put(1.6500,1.6400){\hspace*{\Width}\raisebox{\Height}{H}}%
+%
+%
+\settowidth{\Width}{K}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{K}\settodepth{\Depth}{K}\setlength{\Height}{\Depth}%
+\put(3.0000,1.3300){\hspace*{\Width}\raisebox{\Height}{K}}%
+%
+%
+\settowidth{\Width}{L}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{L}\settodepth{\Depth}{L}\setlength{\Height}{\Depth}%
+\put(4.3100,0.7200){\hspace*{\Width}\raisebox{\Height}{L}}%
+%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/checkbe8.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/checkbe8.tex
new file mode 100644
index 0000000000..9203e9dcf1
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/checkbe8.tex
@@ -0,0 +1,100 @@
+%%% checkb.tex 2015-1-13 21:9
+%%% checkb.sce 2015-1-13 13:55
+{\unitlength=1cm%
+\begin{picture}%
+( 11.00000, 2.95000)( -4.99000, -0.99000)%
+\special{pn 8}%
+%
+\special{pa -1472 173}\special{pa -997 -149}\special{pa -421 51}\special{pa 12 -277}%
+\special{pa 526 -322}\special{pa 925 63}\special{pa 1156 -200}\special{pa 1423 -240}%
+\special{pa 1665 -124}\special{pa 1823 83}%
+\special{fp}%
+\special{pa -1459 159}\special{pa -1467 154}\special{pa -1476 154}\special{pa -1485 158}%
+\special{pa -1490 165}\special{pa -1492 174}\special{pa -1489 183}\special{pa -1483 190}%
+\special{pa -1474 193}\special{pa -1464 191}\special{pa -1457 185}\special{pa -1453 177}%
+\special{pa -1454 167}\special{pa -1459 159}\special{sh 1}\special{fp}%
+\special{pa -407 37}\special{pa -415 32}\special{pa -425 32}\special{pa -433 36}\special{pa -439 43}%
+\special{pa -441 52}\special{pa -438 61}\special{pa -431 68}\special{pa -422 71}\special{pa -413 69}%
+\special{pa -406 63}\special{pa -402 55}\special{pa -402 45}\special{pa -407 37}\special{sh 1}\special{fp}%
+\special{pa 939 49}\special{pa 931 44}\special{pa 922 44}\special{pa 913 47}\special{pa 907 55}%
+\special{pa 906 64}\special{pa 908 73}\special{pa 915 80}\special{pa 924 83}\special{pa 933 81}%
+\special{pa 941 75}\special{pa 945 67}\special{pa 944 57}\special{pa 939 49}\special{sh 1}\special{fp}%
+\special{pa 1837 69}\special{pa 1829 64}\special{pa 1819 63}\special{pa 1811 67}\special{pa 1805 75}%
+\special{pa 1803 84}\special{pa 1806 93}\special{pa 1813 100}\special{pa 1822 102}%
+\special{pa 1831 101}\special{pa 1838 95}\special{pa 1842 86}\special{pa 1842 77}%
+\special{pa 1837 69}\special{sh 1}\special{fp}%
+\special{pa -1273 -238}\special{pa -1282 -243}\special{pa -1291 -244}\special{pa -1300 -240}%
+\special{pa -1305 -232}\special{pa -1307 -223}\special{pa -1304 -214}\special{pa -1298 -208}%
+\special{pa -1289 -205}\special{pa -1279 -206}\special{pa -1272 -212}\special{pa -1268 -221}%
+\special{pa -1269 -230}\special{pa -1273 -238}\special{sh 1}\special{fp}%
+\special{pa -726 -262}\special{pa -734 -267}\special{pa -744 -267}\special{pa -752 -264}%
+\special{pa -758 -256}\special{pa -760 -247}\special{pa -757 -238}\special{pa -750 -231}%
+\special{pa -741 -228}\special{pa -732 -230}\special{pa -725 -236}\special{pa -721 -244}%
+\special{pa -721 -254}\special{pa -726 -262}\special{sh 1}\special{fp}%
+\special{pa -81 -384}\special{pa -89 -389}\special{pa -98 -389}\special{pa -107 -386}%
+\special{pa -112 -378}\special{pa -114 -369}\special{pa -111 -360}\special{pa -105 -353}%
+\special{pa -96 -350}\special{pa -86 -352}\special{pa -79 -358}\special{pa -75 -367}%
+\special{pa -76 -376}\special{pa -81 -384}\special{sh 1}\special{fp}%
+\special{pa 664 -601}\special{pa 655 -605}\special{pa 646 -606}\special{pa 637 -602}%
+\special{pa 632 -595}\special{pa 630 -585}\special{pa 633 -576}\special{pa 639 -570}%
+\special{pa 648 -567}\special{pa 658 -569}\special{pa 665 -574}\special{pa 669 -583}%
+\special{pa 668 -592}\special{pa 664 -601}\special{sh 1}\special{fp}%
+\special{pa 1195 -478}\special{pa 1187 -483}\special{pa 1178 -484}\special{pa 1169 -480}%
+\special{pa 1163 -473}\special{pa 1161 -463}\special{pa 1164 -454}\special{pa 1171 -448}%
+\special{pa 1180 -445}\special{pa 1189 -447}\special{pa 1197 -452}\special{pa 1200 -461}%
+\special{pa 1200 -470}\special{pa 1195 -478}\special{sh 1}\special{fp}%
+\special{pa 1711 -238}\special{pa 1703 -243}\special{pa 1693 -244}\special{pa 1685 -240}%
+\special{pa 1679 -232}\special{pa 1677 -223}\special{pa 1680 -214}\special{pa 1687 -208}%
+\special{pa 1696 -205}\special{pa 1705 -206}\special{pa 1712 -212}\special{pa 1716 -221}%
+\special{pa 1716 -230}\special{pa 1711 -238}\special{sh 1}\special{fp}%
+\settowidth{\Width}{A}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{A}\settodepth{\Depth}{A}\setlength{\Height}{-\Height}%
+\put(-3.7400,-0.5900){\hspace*{\Width}\raisebox{\Height}{A}}%
+%
+%
+\settowidth{\Width}{B}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{B}\settodepth{\Depth}{B}\setlength{\Height}{-\Height}%
+\put(-1.0700,-0.2800){\hspace*{\Width}\raisebox{\Height}{B}}%
+%
+%
+\settowidth{\Width}{C}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{C}\settodepth{\Depth}{C}\setlength{\Height}{-\Height}%
+\put(2.3500,-0.3100){\hspace*{\Width}\raisebox{\Height}{C}}%
+%
+%
+\settowidth{\Width}{D}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{D}\settodepth{\Depth}{D}\setlength{\Height}{-\Height}%
+\put(4.6300,-0.3600){\hspace*{\Width}\raisebox{\Height}{D}}%
+%
+%
+\settowidth{\Width}{E}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{E}\settodepth{\Depth}{E}\setlength{\Height}{\Depth}%
+\put(-3.2700,0.7200){\hspace*{\Width}\raisebox{\Height}{E}}%
+%
+%
+\settowidth{\Width}{F}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{F}\settodepth{\Depth}{F}\setlength{\Height}{\Depth}%
+\put(-1.8800,0.7800){\hspace*{\Width}\raisebox{\Height}{F}}%
+%
+%
+\settowidth{\Width}{G}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{G}\settodepth{\Depth}{G}\setlength{\Height}{\Depth}%
+\put(-0.2400,1.0900){\hspace*{\Width}\raisebox{\Height}{G}}%
+%
+%
+\settowidth{\Width}{H}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{H}\settodepth{\Depth}{H}\setlength{\Height}{\Depth}%
+\put(1.6500,1.6400){\hspace*{\Width}\raisebox{\Height}{H}}%
+%
+%
+\settowidth{\Width}{K}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{K}\settodepth{\Depth}{K}\setlength{\Height}{\Depth}%
+\put(3.0000,1.3300){\hspace*{\Width}\raisebox{\Height}{K}}%
+%
+%
+\settowidth{\Width}{L}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{L}\settodepth{\Depth}{L}\setlength{\Height}{\Depth}%
+\put(4.3100,0.7200){\hspace*{\Width}\raisebox{\Height}{L}}%
+%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/checkbmain.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/checkbmain.tex
new file mode 100644
index 0000000000..657cfb4760
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/checkbmain.tex
@@ -0,0 +1,17 @@
+\documentclass{article}
+\usepackage{ketpic,ketlayer}
+\usepackage{amsmath,amssymb}
+\usepackage{graphicx,color}
+
+\def\ketcindy{{K\kern-.20em%
+\lower.5ex\hbox{E}\kern-.125em{TCindy}}}
+
+\setmargin{20}{20}{20}{20}
+
+\begin{document}
+checkb
+\vspace{5mm}
+
+\input{checkb.tex}
+
+\end{document}
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/checkbs1.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/checkbs1.tex
new file mode 100644
index 0000000000..adf01c568d
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/checkbs1.tex
@@ -0,0 +1,61 @@
+%%% checkb.tex 2015-1-13 17:48
+%%% checkb.sce 2015-1-13 13:55
+{\unitlength=1cm%
+\begin{picture}%
+( 8.99000, 3.00000)( -4.99000, -0.99000)%
+\special{pn 8}%
+%
+\special{pa -1480 94}\special{pa -1458 -3}\special{pa -1433 -83}\special{pa -1405 -148}%
+\special{pa -1373 -195}\special{pa -1339 -226}\special{pa -1301 -241}\special{pa -1260 -239}%
+\special{pa -1216 -220}\special{pa -1169 -185}\special{pa -1118 -134}\special{pa -1067 -81}%
+\special{pa -1018 -41}\special{pa -973 -15}\special{pa -930 -2}\special{pa -890 -2}%
+\special{pa -853 -16}\special{pa -818 -43}\special{pa -787 -83}\special{pa -758 -137}%
+\special{pa -732 -205}\special{pa -699 -268}\special{pa -651 -308}\special{pa -587 -326}%
+\special{pa -507 -322}\special{pa -411 -295}\special{pa -300 -246}\special{pa -174 -175}%
+\special{pa -32 -81}\special{pa 126 35}\special{pa 299 173}%
+\special{fp}%
+\special{pa -1466 81}\special{pa -1474 76}\special{pa -1484 75}\special{pa -1492 79}%
+\special{pa -1498 86}\special{pa -1500 96}\special{pa -1497 105}\special{pa -1490 111}%
+\special{pa -1482 114}\special{pa -1472 112}\special{pa -1465 107}\special{pa -1461 98}%
+\special{pa -1462 89}\special{pa -1466 81}\special{sh 1}\special{fp}%
+\special{pa -1364 -447}\special{pa -1372 -452}\special{pa -1382 -452}\special{pa -1390 -449}%
+\special{pa -1396 -441}\special{pa -1398 -432}\special{pa -1395 -423}\special{pa -1388 -416}%
+\special{pa -1379 -413}\special{pa -1370 -415}\special{pa -1362 -421}\special{pa -1359 -430}%
+\special{pa -1359 -439}\special{pa -1364 -447}\special{sh 1}\special{fp}%
+\special{pa -840 151}\special{pa -848 147}\special{pa -858 146}\special{pa -866 150}%
+\special{pa -872 157}\special{pa -874 167}\special{pa -871 176}\special{pa -865 182}%
+\special{pa -856 185}\special{pa -846 183}\special{pa -839 177}\special{pa -835 169}%
+\special{pa -836 159}\special{pa -840 151}\special{sh 1}\special{fp}%
+\special{pa -592 -589}\special{pa -600 -594}\special{pa -610 -594}\special{pa -618 -590}%
+\special{pa -624 -583}\special{pa -626 -574}\special{pa -623 -565}\special{pa -616 -558}%
+\special{pa -607 -555}\special{pa -598 -557}\special{pa -591 -563}\special{pa -587 -571}%
+\special{pa -588 -581}\special{pa -592 -589}\special{sh 1}\special{fp}%
+\special{pa 313 159}\special{pa 305 154}\special{pa 296 154}\special{pa 287 158}\special{pa 281 165}%
+\special{pa 280 174}\special{pa 282 183}\special{pa 289 190}\special{pa 298 193}\special{pa 307 191}%
+\special{pa 315 185}\special{pa 319 177}\special{pa 318 167}\special{pa 313 159}\special{sh 1}\special{fp}%
+\settowidth{\Width}{A}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{A}\settodepth{\Depth}{A}\setlength{\Height}{-\Height}%
+\put(-3.7600,-0.3900){\hspace*{\Width}\raisebox{\Height}{A}}%
+%
+%
+\settowidth{\Width}{B}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{B}\settodepth{\Depth}{B}\setlength{\Height}{\Depth}%
+\put(-3.5000,1.2500){\hspace*{\Width}\raisebox{\Height}{B}}%
+%
+%
+\settowidth{\Width}{C}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{C}\settodepth{\Depth}{C}\setlength{\Height}{-\Height}%
+\put(-2.1700,-0.5700){\hspace*{\Width}\raisebox{\Height}{C}}%
+%
+%
+\settowidth{\Width}{D}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{D}\settodepth{\Depth}{D}\setlength{\Height}{\Depth}%
+\put(-1.5400,1.6100){\hspace*{\Width}\raisebox{\Height}{D}}%
+%
+%
+\settowidth{\Width}{E}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{E}\settodepth{\Depth}{E}\setlength{\Height}{-\Height}%
+\put(0.7600,-0.5900){\hspace*{\Width}\raisebox{\Height}{E}}%
+%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/checkbs2.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/checkbs2.tex
new file mode 100644
index 0000000000..b5c181a408
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/checkbs2.tex
@@ -0,0 +1,56 @@
+%%% checkb.tex 2015-1-13 18:11
+%%% checkb.sce 2015-1-13 13:55
+{\unitlength=1cm%
+\begin{picture}%
+( 8.99000, 3.00000)( -4.99000, -0.99000)%
+\special{pn 8}%
+%
+\special{pa -1465 -173}\special{pa -1458 -240}\special{pa -1441 -300}\special{pa -1414 -353}%
+\special{pa -1375 -399}\special{pa -1326 -439}\special{pa -1266 -472}\special{pa -1195 -498}%
+\special{pa -1113 -517}\special{pa -1021 -530}\special{pa -917 -535}\special{pa -813 -534}%
+\special{pa -720 -528}\special{pa -637 -516}\special{pa -565 -499}\special{pa -503 -476}%
+\special{pa -452 -449}\special{pa -412 -415}\special{pa -382 -377}\special{pa -363 -333}%
+\special{pa -354 -283}\special{pa -357 -232}\special{pa -371 -185}\special{pa -397 -140}%
+\special{pa -435 -99}\special{pa -484 -61}\special{pa -545 -26}\special{pa -618 5}%
+\special{pa -702 33}\special{pa -798 57}\special{pa -906 79}\special{pa -1013 93}%
+\special{pa -1109 99}\special{pa -1194 96}\special{pa -1267 84}\special{pa -1329 63}%
+\special{pa -1379 33}\special{pa -1418 -5}\special{pa -1445 -52}\special{pa -1460 -108}%
+\special{pa -1465 -173}%
+\special{fp}%
+\special{pa -1459 159}\special{pa -1467 154}\special{pa -1476 154}\special{pa -1485 158}%
+\special{pa -1490 165}\special{pa -1492 174}\special{pa -1489 183}\special{pa -1483 190}%
+\special{pa -1474 193}\special{pa -1464 191}\special{pa -1457 185}\special{pa -1453 177}%
+\special{pa -1454 167}\special{pa -1459 159}\special{sh 1}\special{fp}%
+\special{pa -1447 -538}\special{pa -1455 -542}\special{pa -1464 -543}\special{pa -1473 -539}%
+\special{pa -1479 -532}\special{pa -1480 -522}\special{pa -1477 -513}\special{pa -1471 -507}%
+\special{pa -1462 -504}\special{pa -1453 -506}\special{pa -1445 -511}\special{pa -1441 -520}%
+\special{pa -1442 -529}\special{pa -1447 -538}\special{sh 1}\special{fp}%
+\special{pa -356 -557}\special{pa -364 -562}\special{pa -374 -563}\special{pa -382 -559}%
+\special{pa -388 -551}\special{pa -390 -542}\special{pa -387 -533}\special{pa -380 -526}%
+\special{pa -371 -524}\special{pa -362 -525}\special{pa -355 -531}\special{pa -351 -540}%
+\special{pa -351 -549}\special{pa -356 -557}\special{sh 1}\special{fp}%
+\special{pa -325 -34}\special{pa -333 -38}\special{pa -342 -39}\special{pa -351 -35}%
+\special{pa -357 -28}\special{pa -358 -18}\special{pa -355 -10}\special{pa -349 -3}%
+\special{pa -340 0}\special{pa -331 -2}\special{pa -323 -8}\special{pa -319 -16}\special{pa -320 -26}%
+\special{pa -325 -34}\special{sh 1}\special{fp}%
+\settowidth{\Width}{A}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{A}\settodepth{\Depth}{A}\setlength{\Height}{-\Height}%
+\put(-3.8900,-0.5900){\hspace*{\Width}\raisebox{\Height}{A}}%
+%
+%
+\settowidth{\Width}{B}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{B}\settodepth{\Depth}{B}\setlength{\Height}{\Depth}%
+\put(-3.8600,1.4800){\hspace*{\Width}\raisebox{\Height}{B}}%
+%
+%
+\settowidth{\Width}{C}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{C}\settodepth{\Depth}{C}\setlength{\Height}{\Depth}%
+\put(-0.7900,1.5300){\hspace*{\Width}\raisebox{\Height}{C}}%
+%
+%
+\settowidth{\Width}{D}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{D}\settodepth{\Depth}{D}\setlength{\Height}{-\Height}%
+\put(-0.7100,-0.1000){\hspace*{\Width}\raisebox{\Height}{D}}%
+%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/checkmc1.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/checkmc1.tex
new file mode 100644
index 0000000000..37773a2adc
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/checkmc1.tex
@@ -0,0 +1,146 @@
+%%% checkb.tex 2015-1-6 7:41
+%%% checkb.sce 2015-1-6 6:35
+{\unitlength=1cm%
+\begin{picture}%
+( 14.00000, 3.95000)( -3.03000, -1.91000)%
+\special{pn 8}%
+%
+\special{pa -911 368}\special{pa -919 363}\special{pa -929 363}\special{pa -937 366}%
+\special{pa -943 374}\special{pa -945 383}\special{pa -942 392}\special{pa -935 399}%
+\special{pa -926 402}\special{pa -917 400}\special{pa -910 394}\special{pa -906 385}%
+\special{pa -906 376}\special{pa -911 368}\special{sh 1}\special{fp}%
+\special{pa -254 356}\special{pa -262 351}\special{pa -271 351}\special{pa -280 355}%
+\special{pa -286 362}\special{pa -287 371}\special{pa -285 380}\special{pa -278 387}%
+\special{pa -269 390}\special{pa -260 388}\special{pa -252 382}\special{pa -248 374}%
+\special{pa -249 364}\special{pa -254 356}\special{sh 1}\special{fp}%
+\special{pa 888 478}\special{pa 880 473}\special{pa 870 473}\special{pa 862 477}\special{pa 856 484}%
+\special{pa 854 493}\special{pa 857 502}\special{pa 864 509}\special{pa 873 512}\special{pa 882 510}%
+\special{pa 890 504}\special{pa 893 496}\special{pa 893 486}\special{pa 888 478}\special{sh 1}\special{fp}%
+\special{pa -655 -45}\special{pa -663 -50}\special{pa -673 -51}\special{pa -681 -47}%
+\special{pa -687 -40}\special{pa -689 -30}\special{pa -686 -21}\special{pa -679 -15}%
+\special{pa -670 -12}\special{pa -661 -14}\special{pa -654 -19}\special{pa -650 -28}%
+\special{pa -650 -37}\special{pa -655 -45}\special{sh 1}\special{fp}%
+\special{pa 116 -53}\special{pa 108 -58}\special{pa 99 -59}\special{pa 90 -55}\special{pa 84 -47}%
+\special{pa 83 -38}\special{pa 86 -29}\special{pa 92 -23}\special{pa 101 -20}\special{pa 110 -21}%
+\special{pa 118 -27}\special{pa 122 -36}\special{pa 121 -45}\special{pa 116 -53}\special{sh 1}\special{fp}%
+\special{pa 518 -77}\special{pa 510 -82}\special{pa 500 -82}\special{pa 492 -78}\special{pa 486 -71}%
+\special{pa 484 -62}\special{pa 487 -53}\special{pa 494 -46}\special{pa 503 -43}\special{pa 512 -45}%
+\special{pa 519 -51}\special{pa 523 -59}\special{pa 523 -69}\special{pa 518 -77}\special{sh 1}\special{fp}%
+\special{pa 1475 325}\special{pa 1466 320}\special{pa 1457 319}\special{pa 1448 323}%
+\special{pa 1443 331}\special{pa 1441 340}\special{pa 1444 349}\special{pa 1450 355}%
+\special{pa 1459 358}\special{pa 1469 357}\special{pa 1476 351}\special{pa 1480 342}%
+\special{pa 1479 333}\special{pa 1475 325}\special{sh 1}\special{fp}%
+\special{pa 2156 171}\special{pa 2148 166}\special{pa 2138 166}\special{pa 2130 170}%
+\special{pa 2124 177}\special{pa 2122 186}\special{pa 2125 195}\special{pa 2132 202}%
+\special{pa 2141 205}\special{pa 2150 203}\special{pa 2157 197}\special{pa 2161 189}%
+\special{pa 2161 179}\special{pa 2156 171}\special{sh 1}\special{fp}%
+\special{pa 3112 242}\special{pa 3104 237}\special{pa 3095 237}\special{pa 3086 240}%
+\special{pa 3080 248}\special{pa 3079 257}\special{pa 3082 266}\special{pa 3088 273}%
+\special{pa 3097 276}\special{pa 3107 274}\special{pa 3114 268}\special{pa 3118 259}%
+\special{pa 3117 250}\special{pa 3112 242}\special{sh 1}\special{fp}%
+\special{pa 3853 285}\special{pa 3844 280}\special{pa 3835 280}\special{pa 3826 284}%
+\special{pa 3821 291}\special{pa 3819 300}\special{pa 3822 309}\special{pa 3828 316}%
+\special{pa 3837 319}\special{pa 3847 317}\special{pa 3854 311}\special{pa 3858 303}%
+\special{pa 3857 293}\special{pa 3853 285}\special{sh 1}\special{fp}%
+\special{pa 1805 -148}\special{pa 1797 -153}\special{pa 1788 -153}\special{pa 1779 -149}%
+\special{pa 1773 -142}\special{pa 1772 -133}\special{pa 1774 -124}\special{pa 1781 -117}%
+\special{pa 1790 -114}\special{pa 1799 -116}\special{pa 1807 -122}\special{pa 1811 -130}%
+\special{pa 1810 -140}\special{pa 1805 -148}\special{sh 1}\special{fp}%
+\special{pa 2482 -167}\special{pa 2474 -172}\special{pa 2465 -173}\special{pa 2456 -169}%
+\special{pa 2451 -162}\special{pa 2449 -152}\special{pa 2452 -143}\special{pa 2458 -137}%
+\special{pa 2467 -134}\special{pa 2477 -136}\special{pa 2484 -141}\special{pa 2488 -150}%
+\special{pa 2487 -159}\special{pa 2482 -167}\special{sh 1}\special{fp}%
+\special{pa 2896 -167}\special{pa 2888 -172}\special{pa 2878 -173}\special{pa 2870 -169}%
+\special{pa 2864 -162}\special{pa 2862 -152}\special{pa 2865 -143}\special{pa 2872 -137}%
+\special{pa 2881 -134}\special{pa 2890 -136}\special{pa 2897 -141}\special{pa 2901 -150}%
+\special{pa 2901 -159}\special{pa 2896 -167}\special{sh 1}\special{fp}%
+\special{pa 3624 -160}\special{pa 3616 -164}\special{pa 3607 -165}\special{pa 3598 -161}%
+\special{pa 3592 -154}\special{pa 3591 -144}\special{pa 3593 -135}\special{pa 3600 -129}%
+\special{pa 3609 -126}\special{pa 3618 -128}\special{pa 3626 -134}\special{pa 3630 -142}%
+\special{pa 3629 -152}\special{pa 3624 -160}\special{sh 1}\special{fp}%
+\settowidth{\Width}{A}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{A}\settodepth{\Depth}{A}\setlength{\Height}{-\Height}%
+\put(-2.5000,-1.1200){\hspace*{\Width}\raisebox{\Height}{A}}%
+%
+%
+\settowidth{\Width}{B}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{B}\settodepth{\Depth}{B}\setlength{\Height}{-\Height}%
+\put(-0.6800,-1.0900){\hspace*{\Width}\raisebox{\Height}{B}}%
+%
+%
+\settowidth{\Width}{C}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{C}\settodepth{\Depth}{C}\setlength{\Height}{-\Height}%
+\put(2.3700,-1.4000){\hspace*{\Width}\raisebox{\Height}{C}}%
+%
+%
+\settowidth{\Width}{D}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{D}\settodepth{\Depth}{D}\setlength{\Height}{\Depth}%
+\put(-1.7000,0.2300){\hspace*{\Width}\raisebox{\Height}{D}}%
+%
+%
+\settowidth{\Width}{E}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{E}\settodepth{\Depth}{E}\setlength{\Height}{\Depth}%
+\put(0.1100,0.2500){\hspace*{\Width}\raisebox{\Height}{E}}%
+%
+%
+\settowidth{\Width}{F}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{F}\settodepth{\Depth}{F}\setlength{\Height}{\Depth}%
+\put(1.4300,0.3100){\hspace*{\Width}\raisebox{\Height}{F}}%
+%
+%
+\settowidth{\Width}{G}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{G}\settodepth{\Depth}{G}\setlength{\Height}{-\Height}%
+\put(3.5600,-1.0100){\hspace*{\Width}\raisebox{\Height}{G}}%
+%
+%
+\settowidth{\Width}{H}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{H}\settodepth{\Depth}{H}\setlength{\Height}{-\Height}%
+\put(5.4400,-0.6200){\hspace*{\Width}\raisebox{\Height}{H}}%
+%
+%
+\settowidth{\Width}{K}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{K}\settodepth{\Depth}{K}\setlength{\Height}{-\Height}%
+\put(7.8700,-0.8000){\hspace*{\Width}\raisebox{\Height}{K}}%
+%
+%
+\settowidth{\Width}{L}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{L}\settodepth{\Depth}{L}\setlength{\Height}{-\Height}%
+\put(9.9000,-0.9100){\hspace*{\Width}\raisebox{\Height}{L}}%
+%
+%
+\settowidth{\Width}{M}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{M}\settodepth{\Depth}{M}\setlength{\Height}{\Depth}%
+\put(4.5500,0.4900){\hspace*{\Width}\raisebox{\Height}{M}}%
+%
+%
+\settowidth{\Width}{N}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{N}\settodepth{\Depth}{N}\setlength{\Height}{\Depth}%
+\put(6.2200,0.5400){\hspace*{\Width}\raisebox{\Height}{N}}%
+%
+%
+\settowidth{\Width}{O}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{\Depth}%
+\put(7.3700,0.5400){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+%
+\settowidth{\Width}{P}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{P}\settodepth{\Depth}{P}\setlength{\Height}{\Depth}%
+\put(9.1700,0.5200){\hspace*{\Width}\raisebox{\Height}{P}}%
+%
+%
+\special{pa -925 382}\special{pa -873 307}\special{pa -817 249}\special{pa -759 207}%
+\special{pa -697 182}\special{pa -633 172}\special{pa -566 179}\special{pa -496 202}%
+\special{pa -423 242}\special{pa -347 298}\special{pa -268 370}\special{pa -156 259}%
+\special{pa -42 172}\special{pa 72 111}\special{pa 187 76}\special{pa 303 69}\special{pa 419 91}%
+\special{pa 534 144}\special{pa 649 227}\special{pa 762 343}\special{pa 874 492}%
+\special{fp}%
+\special{pa 1461 339}\special{pa 1527 252}\special{pa 1594 181}\special{pa 1661 126}%
+\special{pa 1728 87}\special{pa 1796 64}\special{pa 1865 57}\special{pa 1933 65}\special{pa 2002 89}%
+\special{pa 2072 129}\special{pa 2142 185}\special{pa 2242 94}\special{pa 2346 23}%
+\special{pa 2452 -26}\special{pa 2557 -54}\special{pa 2661 -60}\special{pa 2762 -43}%
+\special{pa 2858 -4}\special{pa 2947 59}\special{pa 3028 145}\special{pa 3098 256}%
+\special{pa 3198 184}\special{pa 3292 129}\special{pa 3380 91}\special{pa 3463 70}%
+\special{pa 3539 66}\special{pa 3611 79}\special{pa 3676 108}\special{pa 3736 155}%
+\special{pa 3790 219}\special{pa 3839 299}%
+\special{fp}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/checksm1.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/checksm1.tex
new file mode 100644
index 0000000000..e465dfe23f
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/checksm1.tex
@@ -0,0 +1,112 @@
+%%% checkb.tex 2015-1-13 16:26
+%%% checkb.sce 2015-1-13 13:55
+{\unitlength=1cm%
+\begin{picture}%
+( 8.99000, 3.00000)( -4.99000, -0.99000)%
+\special{pn 8}%
+%
+\special{pn 2}%
+\special{pa -1721 390}\special{pa -744 -791}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 2}%
+\special{pa -1759 -791}\special{pa 1029 390}%
+\special{fp}%
+\special{pn 8}%
+\special{pa -1466 81}\special{pa -1474 76}\special{pa -1484 75}\special{pa -1492 79}%
+\special{pa -1498 86}\special{pa -1500 96}\special{pa -1497 105}\special{pa -1490 111}%
+\special{pa -1482 114}\special{pa -1472 112}\special{pa -1465 107}\special{pa -1461 98}%
+\special{pa -1462 89}\special{pa -1466 81}\special{sh 1}\special{fp}%
+\special{pa -994 -486}\special{pa -1002 -491}\special{pa -1011 -492}\special{pa -1020 -488}%
+\special{pa -1026 -481}\special{pa -1028 -471}\special{pa -1025 -462}\special{pa -1018 -456}%
+\special{pa -1009 -453}\special{pa -1000 -454}\special{pa -992 -460}\special{pa -989 -469}%
+\special{pa -989 -478}\special{pa -994 -486}\special{sh 1}\special{fp}%
+\special{pa 415 108}\special{pa 407 103}\special{pa 398 103}\special{pa 389 107}\special{pa 384 114}%
+\special{pa 382 123}\special{pa 385 132}\special{pa 391 139}\special{pa 400 142}\special{pa 410 140}%
+\special{pa 417 134}\special{pa 421 126}\special{pa 420 116}\special{pa 415 108}\special{sh 1}\special{fp}%
+\special{pa 1207 -427}\special{pa 1199 -432}\special{pa 1189 -433}\special{pa 1181 -429}%
+\special{pa 1175 -421}\special{pa 1173 -412}\special{pa 1176 -403}\special{pa 1183 -397}%
+\special{pa 1192 -394}\special{pa 1201 -395}\special{pa 1208 -401}\special{pa 1212 -410}%
+\special{pa 1212 -419}\special{pa 1207 -427}\special{sh 1}\special{fp}%
+\special{pa -1372 -34}\special{pa -1380 -38}\special{pa -1389 -39}\special{pa -1398 -35}%
+\special{pa -1404 -28}\special{pa -1405 -18}\special{pa -1403 -10}\special{pa -1396 -3}%
+\special{pa -1387 0}\special{pa -1378 -2}\special{pa -1370 -8}\special{pa -1366 -16}%
+\special{pa -1367 -26}\special{pa -1372 -34}\special{sh 1}\special{fp}%
+\special{pa -1088 -372}\special{pa -1097 -377}\special{pa -1106 -378}\special{pa -1115 -374}%
+\special{pa -1120 -366}\special{pa -1122 -357}\special{pa -1119 -348}\special{pa -1113 -341}%
+\special{pa -1104 -339}\special{pa -1094 -340}\special{pa -1087 -346}\special{pa -1083 -355}%
+\special{pa -1084 -364}\special{pa -1088 -372}\special{sh 1}\special{fp}%
+\special{pa -899 -601}\special{pa -908 -605}\special{pa -917 -606}\special{pa -926 -602}%
+\special{pa -931 -595}\special{pa -933 -585}\special{pa -930 -576}\special{pa -924 -570}%
+\special{pa -915 -567}\special{pa -905 -569}\special{pa -898 -574}\special{pa -894 -583}%
+\special{pa -895 -592}\special{pa -899 -601}\special{sh 1}\special{fp}%
+\special{pa 132 -10}\special{pa 124 -15}\special{pa 115 -15}\special{pa 106 -12}\special{pa 100 -4}%
+\special{pa 98 5}\special{pa 101 14}\special{pa 108 21}\special{pa 117 24}\special{pa 126 22}%
+\special{pa 134 16}\special{pa 137 7}\special{pa 137 -2}\special{pa 132 -10}\special{sh 1}\special{fp}%
+\special{pa 699 230}\special{pa 691 225}\special{pa 681 225}\special{pa 673 229}\special{pa 667 236}%
+\special{pa 665 245}\special{pa 668 254}\special{pa 675 261}\special{pa 684 264}\special{pa 693 262}%
+\special{pa 701 256}\special{pa 704 248}\special{pa 704 238}\special{pa 699 230}\special{sh 1}\special{fp}%
+\special{pa 1049 -317}\special{pa 1041 -322}\special{pa 1032 -323}\special{pa 1023 -319}%
+\special{pa 1017 -311}\special{pa 1016 -302}\special{pa 1019 -293}\special{pa 1025 -286}%
+\special{pa 1034 -284}\special{pa 1044 -285}\special{pa 1051 -291}\special{pa 1055 -300}%
+\special{pa 1054 -309}\special{pa 1049 -317}\special{sh 1}\special{fp}%
+\settowidth{\Width}{A}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{A}\settodepth{\Depth}{A}\setlength{\Height}{-\Height}%
+\put(-3.7600,-0.3900){\hspace*{\Width}\raisebox{\Height}{A}}%
+%
+%
+\settowidth{\Width}{B}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{B}\settodepth{\Depth}{B}\setlength{\Height}{\Depth}%
+\put(-2.5600,1.3500){\hspace*{\Width}\raisebox{\Height}{B}}%
+%
+%
+\settowidth{\Width}{C}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{C}\settodepth{\Depth}{C}\setlength{\Height}{-\Height}%
+\put(1.0200,-0.4600){\hspace*{\Width}\raisebox{\Height}{C}}%
+%
+%
+\settowidth{\Width}{D}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{D}\settodepth{\Depth}{D}\setlength{\Height}{\Depth}%
+\put(3.0300,1.2000){\hspace*{\Width}\raisebox{\Height}{D}}%
+%
+%
+\settowidth{\Width}{C1p}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{C1p}\settodepth{\Depth}{C1p}\setlength{\Height}{\Depth}%
+\put(-3.6700,0.2000){\hspace*{\Width}\raisebox{\Height}{C1p}}%
+%
+%
+\settowidth{\Width}{C1q}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{C1q}\settodepth{\Depth}{C1q}\setlength{\Height}{\Depth}%
+\put(-2.9500,1.0600){\hspace*{\Width}\raisebox{\Height}{C1q}}%
+%
+%
+\settowidth{\Width}{C2p}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{C2p}\settodepth{\Depth}{C2p}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-2.1700,1.4900){\hspace*{\Width}\raisebox{\Height}{C2p}}%
+%
+%
+\settowidth{\Width}{C2q}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{C2q}\settodepth{\Depth}{C2q}\setlength{\Height}{-\Height}%
+\put(0.1500,-0.1600){\hspace*{\Width}\raisebox{\Height}{C2q}}%
+%
+%
+\settowidth{\Width}{C3p}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{C3p}\settodepth{\Depth}{C3p}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(1.8900,-0.6200){\hspace*{\Width}\raisebox{\Height}{C3p}}%
+%
+%
+\settowidth{\Width}{C3q}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{C3q}\settodepth{\Depth}{C3q}\setlength{\Height}{\Depth}%
+\put(2.4800,0.9200){\hspace*{\Width}\raisebox{\Height}{C3q}}%
+%
+%
+\special{pa -1480 94}\special{pa -1447 54}\special{pa -1404 3}\special{pa -1354 -57}%
+\special{pa -1300 -122}\special{pa -1244 -189}\special{pa -1188 -256}\special{pa -1134 -321}%
+\special{pa -1084 -381}\special{pa -1042 -432}\special{pa -1008 -472}\special{pa -953 -487}%
+\special{pa -852 -466}\special{pa -715 -417}\special{pa -553 -347}\special{pa -374 -262}%
+\special{pa -190 -171}\special{pa -10 -80}\special{pa 155 4}\special{pa 296 74}\special{pa 402 122}%
+\special{pa 488 140}\special{pa 578 124}\special{pa 668 81}\special{pa 757 18}\special{pa 844 -59}%
+\special{pa 928 -142}\special{pa 1006 -226}\special{pa 1077 -304}\special{pa 1140 -368}%
+\special{pa 1193 -413}%
+\special{fp}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/checksm2.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/checksm2.tex
new file mode 100644
index 0000000000..b76357fa80
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/checksm2.tex
@@ -0,0 +1,112 @@
+%%% checkb.tex 2015-1-13 16:40
+%%% checkb.sce 2015-1-13 13:55
+{\unitlength=1cm%
+\begin{picture}%
+( 8.99000, 3.00000)( -4.99000, -0.99000)%
+\special{pn 8}%
+%
+\special{pn 2}%
+\special{pa -1965 -251}\special{pa 360 -791}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 2}%
+\special{pa -1965 -299}\special{pa 1575 333}%
+\special{fp}%
+\special{pn 8}%
+\special{pa -1466 81}\special{pa -1474 76}\special{pa -1484 75}\special{pa -1492 79}%
+\special{pa -1498 86}\special{pa -1500 96}\special{pa -1497 105}\special{pa -1490 111}%
+\special{pa -1482 114}\special{pa -1472 112}\special{pa -1465 107}\special{pa -1461 98}%
+\special{pa -1462 89}\special{pa -1466 81}\special{sh 1}\special{fp}%
+\special{pa -994 -486}\special{pa -1002 -491}\special{pa -1011 -492}\special{pa -1020 -488}%
+\special{pa -1026 -481}\special{pa -1028 -471}\special{pa -1025 -462}\special{pa -1018 -456}%
+\special{pa -1009 -453}\special{pa -1000 -454}\special{pa -992 -460}\special{pa -989 -469}%
+\special{pa -989 -478}\special{pa -994 -486}\special{sh 1}\special{fp}%
+\special{pa 415 108}\special{pa 407 103}\special{pa 398 103}\special{pa 389 107}\special{pa 384 114}%
+\special{pa 382 123}\special{pa 385 132}\special{pa 391 139}\special{pa 400 142}\special{pa 410 140}%
+\special{pa 417 134}\special{pa 421 126}\special{pa 420 116}\special{pa 415 108}\special{sh 1}\special{fp}%
+\special{pa 1207 -427}\special{pa 1199 -432}\special{pa 1189 -433}\special{pa 1181 -429}%
+\special{pa 1175 -421}\special{pa 1173 -412}\special{pa 1176 -403}\special{pa 1183 -397}%
+\special{pa 1192 -394}\special{pa 1201 -395}\special{pa 1208 -401}\special{pa 1212 -410}%
+\special{pa 1212 -419}\special{pa 1207 -427}\special{sh 1}\special{fp}%
+\special{pa -1415 -108}\special{pa -1423 -113}\special{pa -1433 -114}\special{pa -1441 -110}%
+\special{pa -1447 -103}\special{pa -1449 -93}\special{pa -1446 -84}\special{pa -1439 -78}%
+\special{pa -1430 -75}\special{pa -1421 -77}\special{pa -1414 -82}\special{pa -1410 -91}%
+\special{pa -1410 -100}\special{pa -1415 -108}\special{sh 1}\special{fp}%
+\special{pa -1167 -447}\special{pa -1175 -452}\special{pa -1185 -452}\special{pa -1193 -449}%
+\special{pa -1199 -441}\special{pa -1201 -432}\special{pa -1198 -423}\special{pa -1191 -416}%
+\special{pa -1182 -413}\special{pa -1173 -415}\special{pa -1166 -421}\special{pa -1162 -430}%
+\special{pa -1162 -439}\special{pa -1167 -447}\special{sh 1}\special{fp}%
+\special{pa -270 -656}\special{pa -278 -661}\special{pa -287 -661}\special{pa -296 -657}%
+\special{pa -301 -650}\special{pa -303 -641}\special{pa -300 -632}\special{pa -294 -625}%
+\special{pa -285 -622}\special{pa -275 -624}\special{pa -268 -630}\special{pa -264 -638}%
+\special{pa -265 -648}\special{pa -270 -656}\special{sh 1}\special{fp}%
+\special{pa 77 49}\special{pa 69 44}\special{pa 59 44}\special{pa 51 47}\special{pa 45 55}%
+\special{pa 43 64}\special{pa 46 73}\special{pa 53 80}\special{pa 62 83}\special{pa 71 81}%
+\special{pa 78 75}\special{pa 82 67}\special{pa 82 57}\special{pa 77 49}\special{sh 1}\special{fp}%
+\special{pa 805 179}\special{pa 797 174}\special{pa 788 174}\special{pa 779 177}\special{pa 773 185}%
+\special{pa 772 194}\special{pa 774 203}\special{pa 781 210}\special{pa 790 213}\special{pa 799 211}%
+\special{pa 807 205}\special{pa 811 196}\special{pa 810 187}\special{pa 805 179}\special{sh 1}\special{fp}%
+\special{pa 1116 -116}\special{pa 1108 -121}\special{pa 1099 -122}\special{pa 1090 -118}%
+\special{pa 1084 -110}\special{pa 1083 -101}\special{pa 1086 -92}\special{pa 1092 -86}%
+\special{pa 1101 -83}\special{pa 1110 -84}\special{pa 1118 -90}\special{pa 1122 -99}%
+\special{pa 1121 -108}\special{pa 1116 -116}\special{sh 1}\special{fp}%
+\settowidth{\Width}{A}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{A}\settodepth{\Depth}{A}\setlength{\Height}{-\Height}%
+\put(-3.7600,-0.3900){\hspace*{\Width}\raisebox{\Height}{A}}%
+%
+%
+\settowidth{\Width}{B}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{B}\settodepth{\Depth}{B}\setlength{\Height}{\Depth}%
+\put(-2.5600,1.3500){\hspace*{\Width}\raisebox{\Height}{B}}%
+%
+%
+\settowidth{\Width}{C}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{C}\settodepth{\Depth}{C}\setlength{\Height}{-\Height}%
+\put(1.0200,-0.4600){\hspace*{\Width}\raisebox{\Height}{C}}%
+%
+%
+\settowidth{\Width}{D}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{D}\settodepth{\Depth}{D}\setlength{\Height}{\Depth}%
+\put(3.0300,1.2000){\hspace*{\Width}\raisebox{\Height}{D}}%
+%
+%
+\settowidth{\Width}{C1p}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{C1p}\settodepth{\Depth}{C1p}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-3.7800,0.2400){\hspace*{\Width}\raisebox{\Height}{C1p}}%
+%
+%
+\settowidth{\Width}{C1q}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{C1q}\settodepth{\Depth}{C1q}\setlength{\Height}{\Depth}%
+\put(-3.1500,1.2500){\hspace*{\Width}\raisebox{\Height}{C1q}}%
+%
+%
+\settowidth{\Width}{C2p}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{C2p}\settodepth{\Depth}{C2p}\setlength{\Height}{\Depth}%
+\put(-0.7200,1.7800){\hspace*{\Width}\raisebox{\Height}{C2p}}%
+%
+%
+\settowidth{\Width}{C2q}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{C2q}\settodepth{\Depth}{C2q}\setlength{\Height}{-\Height}%
+\put(0.1600,-0.3100){\hspace*{\Width}\raisebox{\Height}{C2q}}%
+%
+%
+\settowidth{\Width}{C3p}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{C3p}\settodepth{\Depth}{C3p}\setlength{\Height}{-\Height}%
+\put(2.0100,-0.6400){\hspace*{\Width}\raisebox{\Height}{C3p}}%
+%
+%
+\settowidth{\Width}{C3q}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{C3q}\settodepth{\Depth}{C3q}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.9500,0.2600){\hspace*{\Width}\raisebox{\Height}{C3q}}%
+%
+%
+\special{pa -1480 94}\special{pa -1459 34}\special{pa -1428 -33}\special{pa -1388 -104}%
+\special{pa -1342 -175}\special{pa -1290 -245}\special{pa -1234 -310}\special{pa -1177 -368}%
+\special{pa -1119 -417}\special{pa -1062 -452}\special{pa -1008 -472}\special{pa -802 -499}%
+\special{pa -616 -481}\special{pa -448 -430}\special{pa -296 -353}\special{pa -158 -261}%
+\special{pa -32 -161}\special{pa 85 -64}\special{pa 195 21}\special{pa 299 86}\special{pa 402 122}%
+\special{pa 516 133}\special{pa 625 123}\special{pa 727 96}\special{pa 822 54}\special{pa 909 -2}%
+\special{pa 987 -70}\special{pa 1056 -147}\special{pa 1113 -231}\special{pa 1159 -321}%
+\special{pa 1193 -413}%
+\special{fp}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/checksy1.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/checksy1.tex
new file mode 100644
index 0000000000..06ebaa0d27
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/checksy1.tex
@@ -0,0 +1,104 @@
+%%% checkb.tex 2015-1-13 17:12
+%%% checkb.sce 2015-1-13 13:55
+{\unitlength=1cm%
+\begin{picture}%
+( 8.99000, 3.00000)( -4.99000, -0.99000)%
+\special{pn 8}%
+%
+\special{pa -1480 94}\special{pa -1447 54}\special{pa -1404 3}\special{pa -1354 -57}%
+\special{pa -1300 -122}\special{pa -1244 -189}\special{pa -1188 -256}\special{pa -1134 -321}%
+\special{pa -1084 -381}\special{pa -1042 -432}\special{pa -1008 -472}\special{pa -953 -487}%
+\special{pa -852 -466}\special{pa -715 -417}\special{pa -553 -347}\special{pa -374 -262}%
+\special{pa -190 -171}\special{pa -10 -80}\special{pa 155 4}\special{pa 296 74}\special{pa 402 122}%
+\special{pa 488 140}\special{pa 578 124}\special{pa 668 81}\special{pa 757 18}\special{pa 844 -59}%
+\special{pa 928 -142}\special{pa 1006 -226}\special{pa 1077 -304}\special{pa 1140 -368}%
+\special{pa 1193 -413}%
+\special{fp}%
+\special{pa -1466 81}\special{pa -1474 76}\special{pa -1484 75}\special{pa -1492 79}%
+\special{pa -1498 86}\special{pa -1500 96}\special{pa -1497 105}\special{pa -1490 111}%
+\special{pa -1482 114}\special{pa -1472 112}\special{pa -1465 107}\special{pa -1461 98}%
+\special{pa -1462 89}\special{pa -1466 81}\special{sh 1}\special{fp}%
+\special{pa -994 -486}\special{pa -1002 -491}\special{pa -1011 -492}\special{pa -1020 -488}%
+\special{pa -1026 -481}\special{pa -1028 -471}\special{pa -1025 -462}\special{pa -1018 -456}%
+\special{pa -1009 -453}\special{pa -1000 -454}\special{pa -992 -460}\special{pa -989 -469}%
+\special{pa -989 -478}\special{pa -994 -486}\special{sh 1}\special{fp}%
+\special{pa 415 108}\special{pa 407 103}\special{pa 398 103}\special{pa 389 107}\special{pa 384 114}%
+\special{pa 382 123}\special{pa 385 132}\special{pa 391 139}\special{pa 400 142}\special{pa 410 140}%
+\special{pa 417 134}\special{pa 421 126}\special{pa 420 116}\special{pa 415 108}\special{sh 1}\special{fp}%
+\special{pa 1207 -427}\special{pa 1199 -432}\special{pa 1189 -433}\special{pa 1181 -429}%
+\special{pa 1175 -421}\special{pa 1173 -412}\special{pa 1176 -403}\special{pa 1183 -397}%
+\special{pa 1192 -394}\special{pa 1201 -395}\special{pa 1208 -401}\special{pa 1212 -410}%
+\special{pa 1212 -419}\special{pa 1207 -427}\special{sh 1}\special{fp}%
+\special{pa -1372 -34}\special{pa -1380 -38}\special{pa -1389 -39}\special{pa -1398 -35}%
+\special{pa -1404 -28}\special{pa -1405 -18}\special{pa -1403 -10}\special{pa -1396 -3}%
+\special{pa -1387 0}\special{pa -1378 -2}\special{pa -1370 -8}\special{pa -1366 -16}%
+\special{pa -1367 -26}\special{pa -1372 -34}\special{sh 1}\special{fp}%
+\special{pa -1088 -372}\special{pa -1097 -377}\special{pa -1106 -378}\special{pa -1115 -374}%
+\special{pa -1120 -366}\special{pa -1122 -357}\special{pa -1119 -348}\special{pa -1113 -341}%
+\special{pa -1104 -339}\special{pa -1094 -340}\special{pa -1087 -346}\special{pa -1083 -355}%
+\special{pa -1084 -364}\special{pa -1088 -372}\special{sh 1}\special{fp}%
+\special{pa 132 -10}\special{pa 124 -15}\special{pa 115 -15}\special{pa 106 -12}\special{pa 100 -4}%
+\special{pa 98 5}\special{pa 101 14}\special{pa 108 21}\special{pa 117 24}\special{pa 126 22}%
+\special{pa 134 16}\special{pa 137 7}\special{pa 137 -2}\special{pa 132 -10}\special{sh 1}\special{fp}%
+\special{pa 1049 -317}\special{pa 1041 -322}\special{pa 1032 -323}\special{pa 1023 -319}%
+\special{pa 1017 -311}\special{pa 1016 -302}\special{pa 1019 -293}\special{pa 1025 -286}%
+\special{pa 1034 -284}\special{pa 1044 -285}\special{pa 1051 -291}\special{pa 1055 -300}%
+\special{pa 1054 -309}\special{pa 1049 -317}\special{sh 1}\special{fp}%
+\special{pa -899 -601}\special{pa -908 -605}\special{pa -917 -606}\special{pa -926 -602}%
+\special{pa -931 -595}\special{pa -933 -585}\special{pa -930 -576}\special{pa -924 -570}%
+\special{pa -915 -567}\special{pa -905 -569}\special{pa -898 -574}\special{pa -894 -583}%
+\special{pa -895 -592}\special{pa -899 -601}\special{sh 0}\special{fp}%
+\special{pa 699 230}\special{pa 691 225}\special{pa 681 225}\special{pa 673 229}\special{pa 667 236}%
+\special{pa 665 245}\special{pa 668 254}\special{pa 675 261}\special{pa 684 264}\special{pa 693 262}%
+\special{pa 701 256}\special{pa 704 248}\special{pa 704 238}\special{pa 699 230}\special{sh 0}\special{fp}%
+\settowidth{\Width}{A}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{A}\settodepth{\Depth}{A}\setlength{\Height}{-\Height}%
+\put(-3.7600,-0.3900){\hspace*{\Width}\raisebox{\Height}{A}}%
+%
+%
+\settowidth{\Width}{B}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{B}\settodepth{\Depth}{B}\setlength{\Height}{\Depth}%
+\put(-2.6600,1.3500){\hspace*{\Width}\raisebox{\Height}{B}}%
+%
+%
+\settowidth{\Width}{C}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{C}\settodepth{\Depth}{C}\setlength{\Height}{-\Height}%
+\put(1.0200,-0.4600){\hspace*{\Width}\raisebox{\Height}{C}}%
+%
+%
+\settowidth{\Width}{D}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{D}\settodepth{\Depth}{D}\setlength{\Height}{\Depth}%
+\put(3.0300,1.2000){\hspace*{\Width}\raisebox{\Height}{D}}%
+%
+%
+\settowidth{\Width}{C1p}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{C1p}\settodepth{\Depth}{C1p}\setlength{\Height}{\Depth}%
+\put(-3.6700,0.2000){\hspace*{\Width}\raisebox{\Height}{C1p}}%
+%
+%
+\settowidth{\Width}{C1q}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{C1q}\settodepth{\Depth}{C1q}\setlength{\Height}{\Depth}%
+\put(-2.9500,1.0600){\hspace*{\Width}\raisebox{\Height}{C1q}}%
+%
+%
+\settowidth{\Width}{C2p}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{C2p}\settodepth{\Depth}{C2p}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-2.1700,1.4900){\hspace*{\Width}\raisebox{\Height}{C2p}}%
+%
+%
+\settowidth{\Width}{C2q}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{C2q}\settodepth{\Depth}{C2q}\setlength{\Height}{-\Height}%
+\put(0.3000,-0.1600){\hspace*{\Width}\raisebox{\Height}{C2q}}%
+%
+%
+\settowidth{\Width}{C3p}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{C3p}\settodepth{\Depth}{C3p}\setlength{\Height}{-\Height}%
+\put(1.7400,-0.7700){\hspace*{\Width}\raisebox{\Height}{C3p}}%
+%
+%
+\settowidth{\Width}{C3q}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{C3q}\settodepth{\Depth}{C3q}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.4800,0.7700){\hspace*{\Width}\raisebox{\Height}{C3q}}%
+%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/checksy2.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/checksy2.tex
new file mode 100644
index 0000000000..eeb56db6f5
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/checksy2.tex
@@ -0,0 +1,104 @@
+%%% checkb.tex 2015-1-13 19:31
+%%% checkb.sce 2015-1-13 13:55
+{\unitlength=1cm%
+\begin{picture}%
+( 8.99000, 3.00000)( -4.99000, -0.99000)%
+\special{pn 8}%
+%
+\special{pa -1472 173}\special{pa -1458 115}\special{pa -1440 46}\special{pa -1418 -28}%
+\special{pa -1389 -104}\special{pa -1353 -177}\special{pa -1309 -243}\special{pa -1256 -298}%
+\special{pa -1192 -337}\special{pa -1116 -356}\special{pa -1028 -350}\special{pa -924 -320}%
+\special{pa -806 -269}\special{pa -674 -203}\special{pa -533 -128}\special{pa -383 -48}%
+\special{pa -229 31}\special{pa -73 104}\special{pa 83 166}\special{pa 235 212}\special{pa 382 236}%
+\special{pa 515 239}\special{pa 633 225}\special{pa 736 196}\special{pa 826 153}\special{pa 905 97}%
+\special{pa 973 31}\special{pa 1033 -46}\special{pa 1085 -130}\special{pa 1131 -222}%
+\special{pa 1173 -319}%
+\special{fp}%
+\special{pa -1459 159}\special{pa -1467 154}\special{pa -1476 154}\special{pa -1485 158}%
+\special{pa -1490 165}\special{pa -1492 174}\special{pa -1489 183}\special{pa -1483 190}%
+\special{pa -1474 193}\special{pa -1464 191}\special{pa -1457 185}\special{pa -1453 177}%
+\special{pa -1454 167}\special{pa -1459 159}\special{sh 1}\special{fp}%
+\special{pa -1014 -364}\special{pa -1022 -369}\special{pa -1031 -370}\special{pa -1040 -366}%
+\special{pa -1046 -358}\special{pa -1047 -349}\special{pa -1044 -340}\special{pa -1038 -334}%
+\special{pa -1029 -331}\special{pa -1019 -332}\special{pa -1012 -338}\special{pa -1008 -347}%
+\special{pa -1009 -356}\special{pa -1014 -364}\special{sh 1}\special{fp}%
+\special{pa 396 222}\special{pa 388 217}\special{pa 378 217}\special{pa 370 221}\special{pa 364 228}%
+\special{pa 362 237}\special{pa 365 246}\special{pa 372 253}\special{pa 381 256}\special{pa 390 254}%
+\special{pa 397 248}\special{pa 401 240}\special{pa 401 230}\special{pa 396 222}\special{sh 1}\special{fp}%
+\special{pa 1187 -333}\special{pa 1179 -338}\special{pa 1170 -338}\special{pa 1161 -334}%
+\special{pa 1155 -327}\special{pa 1154 -318}\special{pa 1156 -309}\special{pa 1163 -302}%
+\special{pa 1172 -299}\special{pa 1181 -301}\special{pa 1189 -307}\special{pa 1193 -315}%
+\special{pa 1192 -325}\special{pa 1187 -333}\special{sh 1}\special{fp}%
+\special{pa -1415 -14}\special{pa -1423 -19}\special{pa -1433 -19}\special{pa -1441 -15}%
+\special{pa -1447 -8}\special{pa -1449 1}\special{pa -1446 10}\special{pa -1439 17}%
+\special{pa -1430 20}\special{pa -1421 18}\special{pa -1414 12}\special{pa -1410 4}%
+\special{pa -1410 -6}\special{pa -1415 -14}\special{sh 1}\special{fp}%
+\special{pa -1333 -427}\special{pa -1341 -432}\special{pa -1350 -433}\special{pa -1359 -429}%
+\special{pa -1364 -421}\special{pa -1366 -412}\special{pa -1363 -403}\special{pa -1357 -397}%
+\special{pa -1348 -394}\special{pa -1338 -395}\special{pa -1331 -401}\special{pa -1327 -410}%
+\special{pa -1328 -419}\special{pa -1333 -427}\special{sh 1}\special{fp}%
+\special{pa -81 183}\special{pa -89 178}\special{pa -98 177}\special{pa -107 181}%
+\special{pa -112 189}\special{pa -114 198}\special{pa -111 207}\special{pa -105 214}%
+\special{pa -96 216}\special{pa -86 215}\special{pa -79 209}\special{pa -75 200}\special{pa -76 191}%
+\special{pa -81 183}\special{sh 1}\special{fp}%
+\special{pa 1053 -2}\special{pa 1045 -7}\special{pa 1036 -8}\special{pa 1027 -4}\special{pa 1021 4}%
+\special{pa 1020 13}\special{pa 1023 22}\special{pa 1029 29}\special{pa 1038 31}\special{pa 1047 30}%
+\special{pa 1055 24}\special{pa 1059 15}\special{pa 1058 6}\special{pa 1053 -2}\special{sh 1}\special{fp}%
+\special{pa -699 -301}\special{pa -707 -306}\special{pa -716 -307}\special{pa -725 -303}%
+\special{pa -731 -295}\special{pa -732 -286}\special{pa -729 -277}\special{pa -723 -271}%
+\special{pa -714 -268}\special{pa -705 -269}\special{pa -697 -275}\special{pa -693 -284}%
+\special{pa -694 -293}\special{pa -699 -301}\special{sh 0}\special{fp}%
+\special{pa 868 262}\special{pa 860 257}\special{pa 851 256}\special{pa 842 260}\special{pa 836 268}%
+\special{pa 835 277}\special{pa 837 286}\special{pa 844 292}\special{pa 853 295}\special{pa 862 294}%
+\special{pa 870 288}\special{pa 874 279}\special{pa 873 270}\special{pa 868 262}\special{sh 0}\special{fp}%
+\settowidth{\Width}{A}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{A}\settodepth{\Depth}{A}\setlength{\Height}{-\Height}%
+\put(-3.7400,-0.5900){\hspace*{\Width}\raisebox{\Height}{A}}%
+%
+%
+\settowidth{\Width}{B}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{B}\settodepth{\Depth}{B}\setlength{\Height}{\Depth}%
+\put(-2.7100,1.0400){\hspace*{\Width}\raisebox{\Height}{B}}%
+%
+%
+\settowidth{\Width}{C}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{C}\settodepth{\Depth}{C}\setlength{\Height}{-\Height}%
+\put(0.9700,-0.7500){\hspace*{\Width}\raisebox{\Height}{C}}%
+%
+%
+\settowidth{\Width}{D}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{D}\settodepth{\Depth}{D}\setlength{\Height}{\Depth}%
+\put(2.9800,0.9600){\hspace*{\Width}\raisebox{\Height}{D}}%
+%
+%
+\settowidth{\Width}{C1p}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{C1p}\settodepth{\Depth}{C1p}\setlength{\Height}{\Depth}%
+\put(-3.7800,0.1500){\hspace*{\Width}\raisebox{\Height}{C1p}}%
+%
+%
+\settowidth{\Width}{C1q}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{C1q}\settodepth{\Depth}{C1q}\setlength{\Height}{\Depth}%
+\put(-3.5700,1.2000){\hspace*{\Width}\raisebox{\Height}{C1q}}%
+%
+%
+\settowidth{\Width}{C2p}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{C2p}\settodepth{\Depth}{C2p}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-1.6600,0.7300){\hspace*{\Width}\raisebox{\Height}{C2p}}%
+%
+%
+\settowidth{\Width}{C2q}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{C2q}\settodepth{\Depth}{C2q}\setlength{\Height}{-\Height}%
+\put(-0.2400,-0.6500){\hspace*{\Width}\raisebox{\Height}{C2q}}%
+%
+%
+\settowidth{\Width}{C3p}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{C3p}\settodepth{\Depth}{C3p}\setlength{\Height}{-\Height}%
+\put(2.1700,-0.8500){\hspace*{\Width}\raisebox{\Height}{C3p}}%
+%
+%
+\settowidth{\Width}{C3q}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{C3q}\settodepth{\Depth}{C3q}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.7900,-0.0300){\hspace*{\Width}\raisebox{\Height}{C3q}}%
+%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/circle-by-radius.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/circle-by-radius.pdf
new file mode 100644
index 0000000000..547df8a055
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/circle-by-radius.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/circledata1.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/circledata1.tex
new file mode 100644
index 0000000000..c0f2fda9b8
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/circledata1.tex
@@ -0,0 +1,76 @@
+%%% /Users/Hannya/Desktop/KeTCindy/fig/circledata1.tex
+%%% Generator=template1basic.cdy
+{\unitlength=5mm%
+\begin{picture}%
+(15.16,4.65)(-7.66,-2.31)%
+\special{pn 8}%
+%
+\special{pn 16}%
+\special{pa -591 -0}\special{pa -594 -49}\special{pa -603 -98}\special{pa -618 -145}%
+\special{pa -639 -190}\special{pa -666 -231}\special{pa -697 -270}\special{pa -733 -303}%
+\special{pa -773 -332}\special{pa -817 -356}\special{pa -863 -374}\special{pa -910 -387}%
+\special{pa -960 -393}\special{pa -1009 -393}\special{pa -1058 -387}\special{pa -1106 -374}%
+\special{pa -1152 -356}\special{pa -1195 -332}\special{pa -1235 -303}\special{pa -1271 -270}%
+\special{pa -1303 -231}\special{pa -1329 -190}\special{pa -1350 -145}\special{pa -1366 -98}%
+\special{pa -1375 -49}\special{pa -1378 0}\special{pa -1375 49}\special{pa -1366 98}%
+\special{pa -1350 145}\special{pa -1329 190}\special{pa -1303 231}\special{pa -1271 270}%
+\special{pa -1235 303}\special{pa -1195 332}\special{pa -1152 356}\special{pa -1106 374}%
+\special{pa -1058 387}\special{pa -1009 393}\special{pa -960 393}\special{pa -910 387}%
+\special{pa -863 374}\special{pa -817 356}\special{pa -773 332}\special{pa -733 303}%
+\special{pa -697 270}\special{pa -666 231}\special{pa -639 190}\special{pa -618 145}%
+\special{pa -603 98}\special{pa -594 49}\special{pa -591 0}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 394 0}\special{pa 391 -39}\special{fp}\special{pa 385 -77}\special{pa 381 -98}\special{pa 376 -114}\special{fp}%
+\special{pa 363 -151}\special{pa 347 -185}\special{fp}\special{pa 327 -218}\special{pa 319 -231}\special{pa 304 -249}\special{fp}%
+\special{pa 278 -278}\special{pa 251 -303}\special{pa 250 -304}\special{fp}\special{pa 218 -327}\special{pa 211 -332}\special{pa 185 -347}\special{fp}%
+\special{pa 150 -363}\special{pa 122 -374}\special{pa 114 -376}\special{fp}\special{pa 77 -386}\special{pa 74 -387}\special{pa 39 -391}\special{fp}%
+\special{pa 0 -393}\special{pa -25 -393}\special{pa -39 -391}\special{fp}\special{pa -77 -386}\special{pa -114 -376}\special{fp}%
+\special{pa -150 -363}\special{pa -168 -356}\special{pa -185 -347}\special{fp}\special{pa -218 -327}\special{pa -250 -304}\special{fp}%
+\special{pa -278 -278}\special{pa -287 -270}\special{pa -304 -249}\special{fp}\special{pa -327 -218}\special{pa -345 -190}\special{pa -347 -185}\special{fp}%
+\special{pa -363 -151}\special{pa -366 -145}\special{pa -376 -114}\special{fp}\special{pa -385 -77}\special{pa -391 -49}\special{pa -391 -39}\special{fp}%
+\special{pa -394 0}\special{pa -391 39}\special{fp}\special{pa -385 77}\special{pa -381 98}\special{pa -376 114}\special{fp}%
+\special{pa -363 151}\special{pa -347 185}\special{fp}\special{pa -327 218}\special{pa -319 231}\special{pa -304 249}\special{fp}%
+\special{pa -278 278}\special{pa -251 303}\special{pa -250 304}\special{fp}\special{pa -218 327}\special{pa -211 332}\special{pa -185 347}\special{fp}%
+\special{pa -150 363}\special{pa -122 374}\special{pa -114 376}\special{fp}\special{pa -77 386}\special{pa -74 387}\special{pa -39 391}\special{fp}%
+\special{pa 0 393}\special{pa 25 393}\special{pa 39 391}\special{fp}\special{pa 77 386}\special{pa 114 376}\special{fp}%
+\special{pa 150 363}\special{pa 168 356}\special{pa 185 347}\special{fp}\special{pa 218 327}\special{pa 250 304}\special{fp}%
+\special{pa 278 278}\special{pa 287 270}\special{pa 304 249}\special{fp}\special{pa 327 218}\special{pa 345 190}\special{pa 347 185}\special{fp}%
+\special{pa 363 151}\special{pa 366 145}\special{pa 376 114}\special{fp}\special{pa 385 77}\special{pa 391 49}\special{pa 391 39}\special{fp}%
+%
+%
+\special{pn 8}%
+\special{pa 1378 4}\special{pa 1378 -4}\special{fp}\special{pa 1376 -35}\special{pa 1375 -43}\special{fp}%
+\special{pa 1370 -74}\special{pa 1369 -82}\special{fp}\special{pa 1361 -112}\special{pa 1359 -120}\special{fp}%
+\special{pa 1348 -149}\special{pa 1345 -156}\special{fp}\special{pa 1332 -185}\special{pa 1328 -192}\special{fp}%
+\special{pa 1311 -218}\special{pa 1307 -225}\special{fp}\special{pa 1288 -250}\special{pa 1283 -256}\special{fp}%
+\special{pa 1262 -279}\special{pa 1256 -284}\special{fp}\special{pa 1233 -305}\special{pa 1226 -310}\special{fp}%
+\special{pa 1201 -328}\special{pa 1194 -333}\special{fp}\special{pa 1167 -348}\special{pa 1160 -352}\special{fp}%
+\special{pa 1132 -364}\special{pa 1124 -367}\special{fp}\special{pa 1095 -377}\special{pa 1087 -379}\special{fp}%
+\special{pa 1057 -387}\special{pa 1049 -388}\special{fp}\special{pa 1018 -392}\special{pa 1010 -393}\special{fp}%
+\special{pa 978 -393}\special{pa 970 -393}\special{fp}\special{pa 939 -390}\special{pa 931 -389}\special{fp}%
+\special{pa 901 -384}\special{pa 893 -382}\special{fp}\special{pa 863 -374}\special{pa 855 -372}\special{fp}%
+\special{pa 826 -360}\special{pa 819 -357}\special{fp}\special{pa 791 -342}\special{pa 784 -338}\special{fp}%
+\special{pa 758 -321}\special{pa 752 -317}\special{fp}\special{pa 727 -297}\special{pa 721 -292}\special{fp}%
+\special{pa 698 -271}\special{pa 693 -265}\special{fp}\special{pa 673 -241}\special{pa 668 -234}\special{fp}%
+\special{pa 651 -208}\special{pa 647 -201}\special{fp}\special{pa 632 -174}\special{pa 628 -167}\special{fp}%
+\special{pa 616 -138}\special{pa 613 -131}\special{fp}\special{pa 604 -101}\special{pa 602 -93}\special{fp}%
+\special{pa 596 -63}\special{pa 595 -55}\special{fp}\special{pa 592 -24}\special{pa 592 -16}\special{fp}%
+\special{pa 592 16}\special{pa 592 24}\special{fp}\special{pa 595 55}\special{pa 596 63}\special{fp}%
+\special{pa 602 93}\special{pa 604 101}\special{fp}\special{pa 613 131}\special{pa 616 138}\special{fp}%
+\special{pa 628 167}\special{pa 632 174}\special{fp}\special{pa 647 201}\special{pa 651 208}\special{fp}%
+\special{pa 668 234}\special{pa 673 241}\special{fp}\special{pa 693 265}\special{pa 698 271}\special{fp}%
+\special{pa 721 292}\special{pa 727 297}\special{fp}\special{pa 752 317}\special{pa 758 321}\special{fp}%
+\special{pa 784 338}\special{pa 791 342}\special{fp}\special{pa 819 357}\special{pa 826 360}\special{fp}%
+\special{pa 855 372}\special{pa 863 374}\special{fp}\special{pa 893 382}\special{pa 901 384}\special{fp}%
+\special{pa 931 389}\special{pa 939 390}\special{fp}\special{pa 970 393}\special{pa 978 393}\special{fp}%
+\special{pa 1010 393}\special{pa 1018 392}\special{fp}\special{pa 1049 388}\special{pa 1057 387}\special{fp}%
+\special{pa 1087 379}\special{pa 1095 377}\special{fp}\special{pa 1124 367}\special{pa 1132 364}\special{fp}%
+\special{pa 1160 352}\special{pa 1167 348}\special{fp}\special{pa 1194 333}\special{pa 1201 328}\special{fp}%
+\special{pa 1226 310}\special{pa 1233 305}\special{fp}\special{pa 1256 284}\special{pa 1262 279}\special{fp}%
+\special{pa 1283 256}\special{pa 1288 250}\special{fp}\special{pa 1307 225}\special{pa 1311 218}\special{fp}%
+\special{pa 1328 192}\special{pa 1332 185}\special{fp}\special{pa 1345 156}\special{pa 1348 149}\special{fp}%
+\special{pa 1359 120}\special{pa 1361 112}\special{fp}\special{pa 1369 82}\special{pa 1370 74}\special{fp}%
+\special{pa 1375 43}\special{pa 1376 35}\special{fp}\special{pa 1378 4}\special{pa 1378 -4}\special{fp}%
+\special{pn 8}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/circledata2.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/circledata2.tex
new file mode 100644
index 0000000000..9a0d758c97
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/circledata2.tex
@@ -0,0 +1,51 @@
+%%% /Users/Hannya/Desktop/KeTCindy/fig/circledata2.tex
+%%% Generator=template1basic.cdy
+{\unitlength=1cm%
+\begin{picture}%
+(3.82,3.94)(-2.6,-0.57)%
+\special{pn 8}%
+%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 201 -357}\special{pa 193 -377}\special{pa 185 -398}\special{pa 176 -418}%
+\special{pa 167 -438}\special{pa 158 -458}\special{pa 148 -478}\special{pa 138 -497}%
+\special{pa 127 -516}\special{pa 116 -535}\special{pa 105 -554}\special{pa 93 -573}%
+\special{pa 81 -591}\special{pa 68 -609}\special{pa 55 -627}\special{pa 42 -644}%
+\special{pa 28 -662}\special{pa 14 -679}\special{pa -0 -695}\special{pa -15 -712}%
+\special{pa -30 -728}\special{pa -45 -743}\special{pa -61 -759}\special{pa -77 -774}%
+\special{pa -93 -788}\special{pa -110 -803}\special{pa -127 -817}\special{pa -144 -830}%
+\special{pa -162 -844}\special{pa -180 -857}\special{pa -198 -869}\special{pa -216 -881}%
+\special{pa -235 -893}\special{pa -253 -904}\special{pa -272 -915}\special{pa -292 -926}%
+\special{pa -311 -936}\special{pa -331 -946}\special{pa -351 -955}\special{pa -371 -964}%
+\special{pa -391 -973}\special{pa -412 -981}\special{pa -432 -988}\special{pa -453 -996}%
+\special{pa -474 -1002}\special{pa -495 -1009}\special{pa -516 -1015}\special{pa -538 -1020}%
+\special{pa -559 -1025}\special{pa -581 -1030}\special{pa -602 -1034}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 201 -357}\special{pa -787 -0}\special{pa -602 -1034}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{A}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{A}\settodepth{\Depth}{A}\setlength{\Height}{-\Height}%
+\put(-2.0000000,-0.0500000){\hspace*{\Width}\raisebox{\Height}{A}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{B}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{B}\settodepth{\Depth}{B}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(0.5600000,0.9100000){\hspace*{\Width}\raisebox{\Height}{B}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{C}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{C}\settodepth{\Depth}{C}\setlength{\Height}{\Depth}%
+\put(-1.5800000,2.6800000){\hspace*{\Width}\raisebox{\Height}{C}}%
+%
+}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/circledata3.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/circledata3.pdf
new file mode 100644
index 0000000000..6ca4d6e43a
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/circledata3.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/circledata4.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/circledata4.tex
new file mode 100644
index 0000000000..355424cb44
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/circledata4.tex
@@ -0,0 +1,40 @@
+%%% /Users/Hannya/Desktop/KeTCindy/fig/circledata4.tex
+%%% Generator=template1basic.cdy
+{\unitlength=5mm%
+\begin{picture}%
+(8,8)(-4,-4)%
+\special{pn 8}%
+%
+\special{pa 591 -0}\special{pa 586 -74}\special{pa 572 -147}\special{pa 549 -217}%
+\special{pa 518 -285}\special{pa 478 -347}\special{pa 430 -404}\special{pa 376 -455}%
+\special{pa 316 -499}\special{pa 251 -534}\special{pa 182 -562}\special{pa 111 -580}%
+\special{pa 37 -589}\special{pa -37 -589}\special{pa -111 -580}\special{pa -182 -562}%
+\special{pa -251 -534}\special{pa -316 -499}\special{pa -376 -455}\special{pa -430 -404}%
+\special{pa -478 -347}\special{pa -518 -285}\special{pa -549 -217}\special{pa -572 -147}%
+\special{pa -586 -74}\special{pa -591 0}\special{pa -586 74}\special{pa -572 147}%
+\special{pa -549 217}\special{pa -518 285}\special{pa -478 347}\special{pa -430 404}%
+\special{pa -376 455}\special{pa -316 499}\special{pa -251 534}\special{pa -182 562}%
+\special{pa -111 580}\special{pa -37 589}\special{pa 37 589}\special{pa 111 580}%
+\special{pa 182 562}\special{pa 251 534}\special{pa 316 499}\special{pa 376 455}%
+\special{pa 430 404}\special{pa 478 347}\special{pa 518 285}\special{pa 549 217}%
+\special{pa 572 147}\special{pa 586 74}\special{pa 591 0}%
+\special{fp}%
+\special{pa 591 -0}\special{pa 295 -511}\special{pa -295 -511}\special{pa -591 -0}%
+\special{pa -295 511}\special{pa 295 511}\special{pa 591 0}%
+\special{fp}%
+\special{pn 1}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 11 -11}\special{pa 0 -16}\special{pa -11 -11}\special{pa -16 0}\special{pa -11 11}\special{pa 0 16}\special{pa 11 11}\special{pa 16 0}\special{pa 11 -11}\special{sh 1}\special{fp}%
+\special{pa 602 -11}\special{pa 591 -16}\special{pa 579 -11}\special{pa 575 0}\special{pa 579 11}\special{pa 591 16}\special{pa 602 11}\special{pa 606 0}\special{pa 602 -11}\special{sh 1}\special{fp}%
+}%
+\special{pn 8}%
+\settowidth{\Width}{A}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{A}\settodepth{\Depth}{A}\setlength{\Height}{\Depth}%
+\put(0.3000000,0.1000000){\hspace*{\Width}\raisebox{\Height}{A}}%
+%
+\settowidth{\Width}{B}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{B}\settodepth{\Depth}{B}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(3.3000000,0.0000000){\hspace*{\Width}\raisebox{\Height}{B}}%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/circledata5.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/circledata5.tex
new file mode 100644
index 0000000000..5ffba5a81e
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/circledata5.tex
@@ -0,0 +1,26 @@
+%%% /Users/Hannya/Desktop/KeTCindy/fig/circledata5.tex
+%%% Generator=template1basic.cdy
+{\unitlength=5mm%
+\begin{picture}%
+(8,8)(-4,-4)%
+\special{pn 8}%
+%
+\special{pa 511 -295}\special{pa 0 -591}\special{pa -511 -295}\special{pa -511 295}%
+\special{pa -0 591}\special{pa 511 295}\special{pa 511 -295}%
+\special{fp}%
+\special{pn 1}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 11 -11}\special{pa 0 -16}\special{pa -11 -11}\special{pa -16 0}\special{pa -11 11}\special{pa 0 16}\special{pa 11 11}\special{pa 16 0}\special{pa 11 -11}\special{sh 1}\special{fp}%
+\special{pa 602 -11}\special{pa 591 -16}\special{pa 579 -11}\special{pa 575 0}\special{pa 579 11}\special{pa 591 16}\special{pa 602 11}\special{pa 606 0}\special{pa 602 -11}\special{sh 1}\special{fp}%
+}%
+\special{pn 8}%
+\settowidth{\Width}{A}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{A}\settodepth{\Depth}{A}\setlength{\Height}{\Depth}%
+\put(0.3000000,0.1000000){\hspace*{\Width}\raisebox{\Height}{A}}%
+%
+\settowidth{\Width}{B}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{B}\settodepth{\Depth}{B}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(3.3000000,0.0000000){\hspace*{\Width}\raisebox{\Height}{B}}%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/coloring.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/coloring.pdf
new file mode 100644
index 0000000000..9622a34767
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/coloring.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/colortable.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/colortable.tex
new file mode 100644
index 0000000000..a62b0a6bf9
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/colortable.tex
@@ -0,0 +1,1767 @@
+%%% /Users/Hannya/Desktop/fig/colortable.tex
+%%% Generator=colortable.cdy
+{\unitlength=6mm%
+\begin{picture}%
+(26,35)(0,0)%
+\special{pn 8}%
+%
+{%
+\color[cmyk]{0.15,0,0.69,0}%
+\special{pa 2386 -7819}\special{pa 3047 -7819}\special{pa 3047 -8008}\special{pa 2386 -8008}%
+\special{pa 2386 -7819}\special{sh 1}\special{ip}%
+}%
+{%
+\color[cmyk]{0.75,0.9,0,0}%
+\special{pa 5457 -7819}\special{pa 6118 -7819}\special{pa 6118 -8008}\special{pa 5457 -8008}%
+\special{pa 5457 -7819}\special{sh 1}\special{ip}%
+}%
+{%
+\color[cmyk]{0,0,1,0}%
+\special{pa 2386 -7583}\special{pa 3047 -7583}\special{pa 3047 -7772}\special{pa 2386 -7772}%
+\special{pa 2386 -7583}\special{sh 1}\special{ip}%
+}%
+{%
+\color[cmyk]{0.86,0.91,0,0.04}%
+\special{pa 5457 -7583}\special{pa 6118 -7583}\special{pa 6118 -7772}\special{pa 5457 -7772}%
+\special{pa 5457 -7583}\special{sh 1}\special{ip}%
+}%
+{%
+\color[cmyk]{0,0.1,0.84,0}%
+\special{pa 2386 -7346}\special{pa 3047 -7346}\special{pa 3047 -7535}\special{pa 2386 -7535}%
+\special{pa 2386 -7346}\special{sh 1}\special{ip}%
+}%
+{%
+\color[cmyk]{0.57,0.55,0,0}%
+\special{pa 5457 -7346}\special{pa 6118 -7346}\special{pa 6118 -7535}\special{pa 5457 -7535}%
+\special{pa 5457 -7346}\special{sh 1}\special{ip}%
+}%
+{%
+\color[cmyk]{0,0.29,0.84,0}%
+\special{pa 2386 -7110}\special{pa 3047 -7110}\special{pa 3047 -7299}\special{pa 2386 -7299}%
+\special{pa 2386 -7110}\special{sh 1}\special{ip}%
+}%
+{%
+\color[cmyk]{0.62,0.57,0.23,0}%
+\special{pa 5457 -7110}\special{pa 6118 -7110}\special{pa 6118 -7299}\special{pa 5457 -7299}%
+\special{pa 5457 -7110}\special{sh 1}\special{ip}%
+}%
+{%
+\color[cmyk]{0,0.32,0.52,0}%
+\special{pa 2386 -6874}\special{pa 3047 -6874}\special{pa 3047 -7063}\special{pa 2386 -7063}%
+\special{pa 2386 -6874}\special{sh 1}\special{ip}%
+}%
+{%
+\color[cmyk]{0.65,0.13,0,0}%
+\special{pa 5457 -6874}\special{pa 6118 -6874}\special{pa 6118 -7063}\special{pa 5457 -7063}%
+\special{pa 5457 -6874}\special{sh 1}\special{ip}%
+}%
+{%
+\color[cmyk]{0,0.5,0.7,0}%
+\special{pa 2386 -6638}\special{pa 3047 -6638}\special{pa 3047 -6827}\special{pa 2386 -6827}%
+\special{pa 2386 -6638}\special{sh 1}\special{ip}%
+}%
+{%
+\color[cmyk]{0.98,0.13,0,0.43}%
+\special{pa 5457 -6638}\special{pa 6118 -6638}\special{pa 6118 -6827}\special{pa 5457 -6827}%
+\special{pa 5457 -6638}\special{sh 1}\special{ip}%
+}%
+{%
+\color[cmyk]{0,0.46,0.5,0}%
+\special{pa 2386 -6402}\special{pa 3047 -6402}\special{pa 3047 -6591}\special{pa 2386 -6591}%
+\special{pa 2386 -6402}\special{sh 1}\special{ip}%
+}%
+{%
+\color[cmyk]{0.94,0.54,0,0}%
+\special{pa 5457 -6402}\special{pa 6118 -6402}\special{pa 6118 -6591}\special{pa 5457 -6591}%
+\special{pa 5457 -6402}\special{sh 1}\special{ip}%
+}%
+{%
+\color[cmyk]{0,0.42,1,0}%
+\special{pa 2386 -6165}\special{pa 3047 -6165}\special{pa 3047 -6354}\special{pa 2386 -6354}%
+\special{pa 2386 -6165}\special{sh 1}\special{ip}%
+}%
+{%
+\color[cmyk]{1,0.5,0,0}%
+\special{pa 5457 -6165}\special{pa 6118 -6165}\special{pa 6118 -6354}\special{pa 5457 -6354}%
+\special{pa 5457 -6165}\special{sh 1}\special{ip}%
+}%
+{%
+\color[cmyk]{0,0.61,0.87,0}%
+\special{pa 2386 -5929}\special{pa 3047 -5929}\special{pa 3047 -6118}\special{pa 2386 -6118}%
+\special{pa 2386 -5929}\special{sh 1}\special{ip}%
+}%
+{%
+\color[cmyk]{1,1,0,0}%
+\special{pa 5457 -5929}\special{pa 6118 -5929}\special{pa 6118 -6118}\special{pa 5457 -6118}%
+\special{pa 5457 -5929}\special{sh 1}\special{ip}%
+}%
+{%
+\color[cmyk]{0,0.51,1,0}%
+\special{pa 2386 -5693}\special{pa 3047 -5693}\special{pa 3047 -5882}\special{pa 2386 -5882}%
+\special{pa 2386 -5693}\special{sh 1}\special{ip}%
+}%
+{%
+\color[cmyk]{0.94,0.11,0,0}%
+\special{pa 5457 -5693}\special{pa 6118 -5693}\special{pa 6118 -5882}\special{pa 5457 -5882}%
+\special{pa 5457 -5693}\special{sh 1}\special{ip}%
+}%
+{%
+\color[cmyk]{0,0.75,1,0.24}%
+\special{pa 2386 -5457}\special{pa 3047 -5457}\special{pa 3047 -5646}\special{pa 2386 -5646}%
+\special{pa 2386 -5457}\special{sh 1}\special{ip}%
+}%
+{%
+\color[cmyk]{1,0,0,0}%
+\special{pa 5457 -5457}\special{pa 6118 -5457}\special{pa 6118 -5646}\special{pa 5457 -5646}%
+\special{pa 5457 -5457}\special{sh 1}\special{ip}%
+}%
+{%
+\color[cmyk]{0,0.77,0.87,0}%
+\special{pa 2386 -5220}\special{pa 3047 -5220}\special{pa 3047 -5409}\special{pa 2386 -5409}%
+\special{pa 2386 -5220}\special{sh 1}\special{ip}%
+}%
+{%
+\color[cmyk]{0.96,0,0,0}%
+\special{pa 5457 -5220}\special{pa 6118 -5220}\special{pa 6118 -5409}\special{pa 5457 -5409}%
+\special{pa 5457 -5220}\special{sh 1}\special{ip}%
+}%
+{%
+\color[cmyk]{0,0.85,0.87,0.35}%
+\special{pa 2386 -4984}\special{pa 3047 -4984}\special{pa 3047 -5173}\special{pa 2386 -5173}%
+\special{pa 2386 -4984}\special{sh 1}\special{ip}%
+}%
+{%
+\color[cmyk]{0.62,0,0.12,0}%
+\special{pa 5457 -4984}\special{pa 6118 -4984}\special{pa 6118 -5173}\special{pa 5457 -5173}%
+\special{pa 5457 -4984}\special{sh 1}\special{ip}%
+}%
+{%
+\color[cmyk]{0,0.87,0.68,0.32}%
+\special{pa 2386 -4748}\special{pa 3047 -4748}\special{pa 3047 -4937}\special{pa 2386 -4937}%
+\special{pa 2386 -4748}\special{sh 1}\special{ip}%
+}%
+{%
+\color[cmyk]{0.85,0,0.2,0}%
+\special{pa 5457 -4748}\special{pa 6118 -4748}\special{pa 6118 -4937}\special{pa 5457 -4937}%
+\special{pa 5457 -4748}\special{sh 1}\special{ip}%
+}%
+{%
+\color[cmyk]{0,0.89,0.94,0.28}%
+\special{pa 2386 -4512}\special{pa 3047 -4512}\special{pa 3047 -4701}\special{pa 2386 -4701}%
+\special{pa 2386 -4512}\special{sh 1}\special{ip}%
+}%
+{%
+\color[cmyk]{0.86,0,0.34,0.02}%
+\special{pa 5457 -4512}\special{pa 6118 -4512}\special{pa 6118 -4701}\special{pa 5457 -4701}%
+\special{pa 5457 -4512}\special{sh 1}\special{ip}%
+}%
+{%
+\color[cmyk]{0,1,1,0}%
+\special{pa 2386 -4276}\special{pa 3047 -4276}\special{pa 3047 -4465}\special{pa 2386 -4465}%
+\special{pa 2386 -4276}\special{sh 1}\special{ip}%
+}%
+{%
+\color[cmyk]{0.82,0,0.3,0}%
+\special{pa 5457 -4276}\special{pa 6118 -4276}\special{pa 6118 -4465}\special{pa 5457 -4465}%
+\special{pa 5457 -4276}\special{sh 1}\special{ip}%
+}%
+{%
+\color[cmyk]{0,1,0.5,0}%
+\special{pa 2386 -4039}\special{pa 3047 -4039}\special{pa 3047 -4228}\special{pa 2386 -4228}%
+\special{pa 2386 -4039}\special{sh 1}\special{ip}%
+}%
+{%
+\color[cmyk]{0.85,0,0.33,0}%
+\special{pa 5457 -4039}\special{pa 6118 -4039}\special{pa 6118 -4228}\special{pa 5457 -4228}%
+\special{pa 5457 -4039}\special{sh 1}\special{ip}%
+}%
+{%
+\color[cmyk]{0,1,0.13,0}%
+\special{pa 2386 -3803}\special{pa 3047 -3803}\special{pa 3047 -3992}\special{pa 2386 -3992}%
+\special{pa 2386 -3803}\special{sh 1}\special{ip}%
+}%
+{%
+\color[cmyk]{1,0,0.5,0}%
+\special{pa 5457 -3803}\special{pa 6118 -3803}\special{pa 6118 -3992}\special{pa 5457 -3992}%
+\special{pa 5457 -3803}\special{sh 1}\special{ip}%
+}%
+{%
+\color[cmyk]{0,0.96,0.39,0}%
+\special{pa 2386 -3567}\special{pa 3047 -3567}\special{pa 3047 -3756}\special{pa 2386 -3756}%
+\special{pa 2386 -3567}\special{sh 1}\special{ip}%
+}%
+{%
+\color[cmyk]{0.99,0,0.52,0}%
+\special{pa 5457 -3567}\special{pa 6118 -3567}\special{pa 6118 -3756}\special{pa 5457 -3756}%
+\special{pa 5457 -3567}\special{sh 1}\special{ip}%
+}%
+{%
+\color[cmyk]{0,0.53,0.38,0}%
+\special{pa 2386 -3331}\special{pa 3047 -3331}\special{pa 3047 -3520}\special{pa 2386 -3520}%
+\special{pa 2386 -3331}\special{sh 1}\special{ip}%
+}%
+{%
+\color[cmyk]{0.69,0,0.5,0}%
+\special{pa 5457 -3331}\special{pa 6118 -3331}\special{pa 6118 -3520}\special{pa 5457 -3520}%
+\special{pa 5457 -3331}\special{sh 1}\special{ip}%
+}%
+{%
+\color[cmyk]{0,0.63,0,0}%
+\special{pa 2386 -3094}\special{pa 3047 -3094}\special{pa 3047 -3283}\special{pa 2386 -3283}%
+\special{pa 2386 -3094}\special{sh 1}\special{ip}%
+}%
+{%
+\color[cmyk]{1,0,1,0}%
+\special{pa 5457 -3094}\special{pa 6118 -3094}\special{pa 6118 -3283}\special{pa 5457 -3283}%
+\special{pa 5457 -3094}\special{sh 1}\special{ip}%
+}%
+{%
+\color[cmyk]{0,1,0,0}%
+\special{pa 2386 -2858}\special{pa 3047 -2858}\special{pa 3047 -3047}\special{pa 2386 -3047}%
+\special{pa 2386 -2858}\special{sh 1}\special{ip}%
+}%
+{%
+\color[cmyk]{0.91,0,0.88,0.12}%
+\special{pa 5457 -2858}\special{pa 6118 -2858}\special{pa 6118 -3047}\special{pa 5457 -3047}%
+\special{pa 5457 -2858}\special{sh 1}\special{ip}%
+}%
+{%
+\color[cmyk]{0,0.81,0,0}%
+\special{pa 2386 -2622}\special{pa 3047 -2622}\special{pa 3047 -2811}\special{pa 2386 -2811}%
+\special{pa 2386 -2622}\special{sh 1}\special{ip}%
+}%
+{%
+\color[cmyk]{0.92,0,0.59,0.25}%
+\special{pa 5457 -2622}\special{pa 6118 -2622}\special{pa 6118 -2811}\special{pa 5457 -2811}%
+\special{pa 5457 -2622}\special{sh 1}\special{ip}%
+}%
+{%
+\color[cmyk]{0,0.82,0,0}%
+\special{pa 2386 -2386}\special{pa 3047 -2386}\special{pa 3047 -2575}\special{pa 2386 -2575}%
+\special{pa 2386 -2386}\special{sh 1}\special{ip}%
+}%
+{%
+\color[cmyk]{0.5,0,1,0}%
+\special{pa 5457 -2386}\special{pa 6118 -2386}\special{pa 6118 -2575}\special{pa 5457 -2575}%
+\special{pa 5457 -2386}\special{sh 1}\special{ip}%
+}%
+{%
+\color[cmyk]{0.34,0.9,0,0.02}%
+\special{pa 2386 -2150}\special{pa 3047 -2150}\special{pa 3047 -2339}\special{pa 2386 -2339}%
+\special{pa 2386 -2150}\special{sh 1}\special{ip}%
+}%
+{%
+\color[cmyk]{0.44,0,0.74,0}%
+\special{pa 5457 -2150}\special{pa 6118 -2150}\special{pa 6118 -2339}\special{pa 5457 -2339}%
+\special{pa 5457 -2150}\special{sh 1}\special{ip}%
+}%
+{%
+\color[cmyk]{0.07,0.9,0,0.34}%
+\special{pa 2386 -1913}\special{pa 3047 -1913}\special{pa 3047 -2102}\special{pa 2386 -2102}%
+\special{pa 2386 -1913}\special{sh 1}\special{ip}%
+}%
+{%
+\color[cmyk]{0.26,0,0.76,0}%
+\special{pa 5457 -1913}\special{pa 6118 -1913}\special{pa 6118 -2102}\special{pa 5457 -2102}%
+\special{pa 5457 -1913}\special{sh 1}\special{ip}%
+}%
+{%
+\color[cmyk]{0.47,0.91,0,0.08}%
+\special{pa 2386 -1677}\special{pa 3047 -1677}\special{pa 3047 -1866}\special{pa 2386 -1866}%
+\special{pa 2386 -1677}\special{sh 1}\special{ip}%
+}%
+{%
+\color[cmyk]{0.64,0,0.95,0.4}%
+\special{pa 5457 -1677}\special{pa 6118 -1677}\special{pa 6118 -1866}\special{pa 5457 -1866}%
+\special{pa 5457 -1677}\special{sh 1}\special{ip}%
+}%
+{%
+\color[cmyk]{0,0.48,0,0}%
+\special{pa 2386 -1441}\special{pa 3047 -1441}\special{pa 3047 -1630}\special{pa 2386 -1630}%
+\special{pa 2386 -1441}\special{sh 1}\special{ip}%
+}%
+{%
+\color[cmyk]{0,0.72,1,0.45}%
+\special{pa 5457 -1441}\special{pa 6118 -1441}\special{pa 6118 -1630}\special{pa 5457 -1630}%
+\special{pa 5457 -1441}\special{sh 1}\special{ip}%
+}%
+{%
+\color[cmyk]{0.12,0.59,0,0}%
+\special{pa 2386 -1205}\special{pa 3047 -1205}\special{pa 3047 -1394}\special{pa 2386 -1394}%
+\special{pa 2386 -1205}\special{sh 1}\special{ip}%
+}%
+{%
+\color[cmyk]{0,0.83,1,0.7}%
+\special{pa 5457 -1205}\special{pa 6118 -1205}\special{pa 6118 -1394}\special{pa 5457 -1394}%
+\special{pa 5457 -1205}\special{sh 1}\special{ip}%
+}%
+{%
+\color[cmyk]{0.32,0.64,0,0}%
+\special{pa 2386 -969}\special{pa 3047 -969}\special{pa 3047 -1157}\special{pa 2386 -1157}%
+\special{pa 2386 -969}\special{sh 1}\special{ip}%
+}%
+{%
+\color[cmyk]{0,0.81,1,0.6}%
+\special{pa 5457 -969}\special{pa 6118 -969}\special{pa 6118 -1157}\special{pa 5457 -1157}%
+\special{pa 5457 -969}\special{sh 1}\special{ip}%
+}%
+{%
+\color[cmyk]{0.4,0.8,0.2,0}%
+\special{pa 2386 -732}\special{pa 3047 -732}\special{pa 3047 -921}\special{pa 2386 -921}%
+\special{pa 2386 -732}\special{sh 1}\special{ip}%
+}%
+{%
+\color[cmyk]{0.14,0.42,0.56,0}%
+\special{pa 5457 -732}\special{pa 6118 -732}\special{pa 6118 -921}\special{pa 5457 -921}%
+\special{pa 5457 -732}\special{sh 1}\special{ip}%
+}%
+{%
+\color[cmyk]{0.45,0.86,0,0}%
+\special{pa 2386 -496}\special{pa 3047 -496}\special{pa 3047 -685}\special{pa 2386 -685}%
+\special{pa 2386 -496}\special{sh 1}\special{ip}%
+}%
+{%
+\color[cmyk]{0,0,0,0.5}%
+\special{pa 5457 -496}\special{pa 6118 -496}\special{pa 6118 -685}\special{pa 5457 -685}%
+\special{pa 5457 -496}\special{sh 1}\special{ip}%
+}%
+{%
+\color[cmyk]{0.5,1,0,0}%
+\special{pa 2386 -260}\special{pa 3047 -260}\special{pa 3047 -449}\special{pa 2386 -449}%
+\special{pa 2386 -260}\special{sh 1}\special{ip}%
+}%
+{%
+\color[cmyk]{0,0,0,1}%
+\special{pa 5457 -260}\special{pa 6118 -260}\special{pa 6118 -449}\special{pa 5457 -449}%
+\special{pa 5457 -260}\special{sh 1}\special{ip}%
+}%
+{%
+\color[cmyk]{0.79,0.88,0,0}%
+\special{pa 2386 -24}\special{pa 3047 -24}\special{pa 3047 -213}\special{pa 2386 -213}%
+\special{pa 2386 -24}\special{sh 1}\special{ip}%
+}%
+{%
+\color[cmyk]{0,0,0,0}%
+\special{pa 5457 -24}\special{pa 6118 -24}\special{pa 6118 -213}\special{pa 5457 -213}%
+\special{pa 5457 -24}\special{sh 1}\special{ip}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -8268}\special{pa 0 -0}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 1181 -8268}\special{pa 1181 -0}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 2362 -8268}\special{pa 2362 -0}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 3071 -8268}\special{pa 3071 -0}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -8268}\special{pa 3071 -8268}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -8031}\special{pa 3071 -8031}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -7795}\special{pa 3071 -7795}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -7559}\special{pa 3071 -7559}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -7323}\special{pa 3071 -7323}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -7087}\special{pa 3071 -7087}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -6850}\special{pa 3071 -6850}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -6614}\special{pa 3071 -6614}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -6378}\special{pa 3071 -6378}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -6142}\special{pa 3071 -6142}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -5906}\special{pa 3071 -5906}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -5669}\special{pa 3071 -5669}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -5433}\special{pa 3071 -5433}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -5197}\special{pa 3071 -5197}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -4961}\special{pa 3071 -4961}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -4724}\special{pa 3071 -4724}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -4488}\special{pa 3071 -4488}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -4252}\special{pa 3071 -4252}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -4016}\special{pa 3071 -4016}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -3780}\special{pa 3071 -3780}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -3543}\special{pa 3071 -3543}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -3307}\special{pa 3071 -3307}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -3071}\special{pa 3071 -3071}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -2835}\special{pa 3071 -2835}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -2598}\special{pa 3071 -2598}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -2362}\special{pa 3071 -2362}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -2126}\special{pa 3071 -2126}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -1890}\special{pa 3071 -1890}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -1654}\special{pa 3071 -1654}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -1417}\special{pa 3071 -1417}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -1181}\special{pa 3071 -1181}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -945}\special{pa 3071 -945}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -709}\special{pa 3071 -709}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -472}\special{pa 3071 -472}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -236}\special{pa 3071 -236}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -0}\special{pa 3071 -0}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -8268}\special{pa 0 -0}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 1181 -8268}\special{pa 1181 -0}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 2362 -8268}\special{pa 2362 -0}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 3071 -8268}\special{pa 3071 -0}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 4252 -8268}\special{pa 4252 -0}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 5433 -8268}\special{pa 5433 -0}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 6142 -8268}\special{pa 6142 -0}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -8268}\special{pa 6142 -8268}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -8031}\special{pa 6142 -8031}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -7795}\special{pa 6142 -7795}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -7559}\special{pa 6142 -7559}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -7323}\special{pa 6142 -7323}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -7087}\special{pa 6142 -7087}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -6850}\special{pa 6142 -6850}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -6614}\special{pa 6142 -6614}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -6378}\special{pa 6142 -6378}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -6142}\special{pa 6142 -6142}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -5906}\special{pa 6142 -5906}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -5669}\special{pa 6142 -5669}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -5433}\special{pa 6142 -5433}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -5197}\special{pa 6142 -5197}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -4961}\special{pa 6142 -4961}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -4724}\special{pa 6142 -4724}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -4488}\special{pa 6142 -4488}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -4252}\special{pa 6142 -4252}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -4016}\special{pa 6142 -4016}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -3780}\special{pa 6142 -3780}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -3543}\special{pa 6142 -3543}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -3307}\special{pa 6142 -3307}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -3071}\special{pa 6142 -3071}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -2835}\special{pa 6142 -2835}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -2598}\special{pa 6142 -2598}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -2362}\special{pa 6142 -2362}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -2126}\special{pa 6142 -2126}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -1890}\special{pa 6142 -1890}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -1654}\special{pa 6142 -1654}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -1417}\special{pa 6142 -1417}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -1181}\special{pa 6142 -1181}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -945}\special{pa 6142 -945}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -709}\special{pa 6142 -709}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -472}\special{pa 6142 -472}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -236}\special{pa 6142 -236}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -0}\special{pa 6142 -0}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 3083 -8268}\special{pa 3083 -0}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -8043}\special{pa 6142 -8043}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{name}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{name}\settodepth{\Depth}{name}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.5000000,34.5000000){\hspace*{\Width}\raisebox{\Height}{name}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{CMYK}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{CMYK}\settodepth{\Depth}{CMYK}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(7.5000000,34.5000000){\hspace*{\Width}\raisebox{\Height}{CMYK}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{Color}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{Color}\settodepth{\Depth}{Color}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(11.5000000,34.5000000){\hspace*{\Width}\raisebox{\Height}{Color}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{name}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{name}\settodepth{\Depth}{name}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(15.5000000,34.5000000){\hspace*{\Width}\raisebox{\Height}{name}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{CMYK}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{CMYK}\settodepth{\Depth}{CMYK}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(20.5000000,34.5000000){\hspace*{\Width}\raisebox{\Height}{CMYK}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{Color}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{Color}\settodepth{\Depth}{Color}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(24.5000000,34.5000000){\hspace*{\Width}\raisebox{\Height}{Color}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{greenyellow}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{greenyellow}\settodepth{\Depth}{greenyellow}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.5000000,33.5000000){\hspace*{\Width}\raisebox{\Height}{greenyellow}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{[0.15,0,0.69,0]}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{[0.15,0,0.69,0]}\settodepth{\Depth}{[0.15,0,0.69,0]}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(7.5000000,33.5000000){\hspace*{\Width}\raisebox{\Height}{[0.15,0,0.69,0]}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{royalpurple}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{royalpurple}\settodepth{\Depth}{royalpurple}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(15.5000000,33.5000000){\hspace*{\Width}\raisebox{\Height}{royalpurple}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{[0.75,0.9,0,0]}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{[0.75,0.9,0,0]}\settodepth{\Depth}{[0.75,0.9,0,0]}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(20.5000000,33.5000000){\hspace*{\Width}\raisebox{\Height}{[0.75,0.9,0,0]}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{yellow}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{yellow}\settodepth{\Depth}{yellow}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.5000000,32.5000000){\hspace*{\Width}\raisebox{\Height}{yellow}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{[0,0,1,0]}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{[0,0,1,0]}\settodepth{\Depth}{[0,0,1,0]}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(7.5000000,32.5000000){\hspace*{\Width}\raisebox{\Height}{[0,0,1,0]}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{blueviolet}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{blueviolet}\settodepth{\Depth}{blueviolet}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(15.5000000,32.5000000){\hspace*{\Width}\raisebox{\Height}{blueviolet}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{[0.86,0.91,0,0.04]}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{[0.86,0.91,0,0.04]}\settodepth{\Depth}{[0.86,0.91,0,0.04]}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(20.5000000,32.5000000){\hspace*{\Width}\raisebox{\Height}{[0.86,0.91,0,0.04]}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{goldenrod}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{goldenrod}\settodepth{\Depth}{goldenrod}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.5000000,31.5000000){\hspace*{\Width}\raisebox{\Height}{goldenrod}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{[0,0.1,0.84,0]}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{[0,0.1,0.84,0]}\settodepth{\Depth}{[0,0.1,0.84,0]}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(7.5000000,31.5000000){\hspace*{\Width}\raisebox{\Height}{[0,0.1,0.84,0]}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{periwinkle}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{periwinkle}\settodepth{\Depth}{periwinkle}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(15.5000000,31.5000000){\hspace*{\Width}\raisebox{\Height}{periwinkle}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{[0.57,0.55,0,0]}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{[0.57,0.55,0,0]}\settodepth{\Depth}{[0.57,0.55,0,0]}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(20.5000000,31.5000000){\hspace*{\Width}\raisebox{\Height}{[0.57,0.55,0,0]}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{dandelion}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{dandelion}\settodepth{\Depth}{dandelion}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.5000000,30.5000000){\hspace*{\Width}\raisebox{\Height}{dandelion}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{[0,0.29,0.84,0]}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{[0,0.29,0.84,0]}\settodepth{\Depth}{[0,0.29,0.84,0]}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(7.5000000,30.5000000){\hspace*{\Width}\raisebox{\Height}{[0,0.29,0.84,0]}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{cadetblue}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{cadetblue}\settodepth{\Depth}{cadetblue}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(15.5000000,30.5000000){\hspace*{\Width}\raisebox{\Height}{cadetblue}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{[0.62,0.57,0.23,0]}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{[0.62,0.57,0.23,0]}\settodepth{\Depth}{[0.62,0.57,0.23,0]}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(20.5000000,30.5000000){\hspace*{\Width}\raisebox{\Height}{[0.62,0.57,0.23,0]}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{apricot}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{apricot}\settodepth{\Depth}{apricot}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.5000000,29.5000000){\hspace*{\Width}\raisebox{\Height}{apricot}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{[0,0.32,0.52,0]}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{[0,0.32,0.52,0]}\settodepth{\Depth}{[0,0.32,0.52,0]}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(7.5000000,29.5000000){\hspace*{\Width}\raisebox{\Height}{[0,0.32,0.52,0]}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{cornflowerblue}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{cornflowerblue}\settodepth{\Depth}{cornflowerblue}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(15.5000000,29.5000000){\hspace*{\Width}\raisebox{\Height}{cornflowerblue}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{[0.65,0.13,0,0]}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{[0.65,0.13,0,0]}\settodepth{\Depth}{[0.65,0.13,0,0]}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(20.5000000,29.5000000){\hspace*{\Width}\raisebox{\Height}{[0.65,0.13,0,0]}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{peach}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{peach}\settodepth{\Depth}{peach}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.5000000,28.5000000){\hspace*{\Width}\raisebox{\Height}{peach}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{[0,0.5,0.7,0]}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{[0,0.5,0.7,0]}\settodepth{\Depth}{[0,0.5,0.7,0]}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(7.5000000,28.5000000){\hspace*{\Width}\raisebox{\Height}{[0,0.5,0.7,0]}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{midnightblue}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{midnightblue}\settodepth{\Depth}{midnightblue}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(15.5000000,28.5000000){\hspace*{\Width}\raisebox{\Height}{midnightblue}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{[0.98,0.13,0,0.43]}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{[0.98,0.13,0,0.43]}\settodepth{\Depth}{[0.98,0.13,0,0.43]}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(20.5000000,28.5000000){\hspace*{\Width}\raisebox{\Height}{[0.98,0.13,0,0.43]}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{melon}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{melon}\settodepth{\Depth}{melon}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.5000000,27.5000000){\hspace*{\Width}\raisebox{\Height}{melon}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{[0,0.46,0.5,0]}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{[0,0.46,0.5,0]}\settodepth{\Depth}{[0,0.46,0.5,0]}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(7.5000000,27.5000000){\hspace*{\Width}\raisebox{\Height}{[0,0.46,0.5,0]}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{navyblue}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{navyblue}\settodepth{\Depth}{navyblue}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(15.5000000,27.5000000){\hspace*{\Width}\raisebox{\Height}{navyblue}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{[0.94,0.54,0,0]}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{[0.94,0.54,0,0]}\settodepth{\Depth}{[0.94,0.54,0,0]}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(20.5000000,27.5000000){\hspace*{\Width}\raisebox{\Height}{[0.94,0.54,0,0]}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{yelloworange}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{yelloworange}\settodepth{\Depth}{yelloworange}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.5000000,26.5000000){\hspace*{\Width}\raisebox{\Height}{yelloworange}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{[0,0.42,1,0]}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{[0,0.42,1,0]}\settodepth{\Depth}{[0,0.42,1,0]}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(7.5000000,26.5000000){\hspace*{\Width}\raisebox{\Height}{[0,0.42,1,0]}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{royalblue}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{royalblue}\settodepth{\Depth}{royalblue}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(15.5000000,26.5000000){\hspace*{\Width}\raisebox{\Height}{royalblue}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{[1,0.5,0,0]}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{[1,0.5,0,0]}\settodepth{\Depth}{[1,0.5,0,0]}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(20.5000000,26.5000000){\hspace*{\Width}\raisebox{\Height}{[1,0.5,0,0]}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{orange}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{orange}\settodepth{\Depth}{orange}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.5000000,25.5000000){\hspace*{\Width}\raisebox{\Height}{orange}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{[0,0.61,0.87,0]}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{[0,0.61,0.87,0]}\settodepth{\Depth}{[0,0.61,0.87,0]}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(7.5000000,25.5000000){\hspace*{\Width}\raisebox{\Height}{[0,0.61,0.87,0]}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{blue}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{blue}\settodepth{\Depth}{blue}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(15.5000000,25.5000000){\hspace*{\Width}\raisebox{\Height}{blue}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{[1,1,0,0]}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{[1,1,0,0]}\settodepth{\Depth}{[1,1,0,0]}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(20.5000000,25.5000000){\hspace*{\Width}\raisebox{\Height}{[1,1,0,0]}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{burntorange}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{burntorange}\settodepth{\Depth}{burntorange}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.5000000,24.5000000){\hspace*{\Width}\raisebox{\Height}{burntorange}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{[0,0.51,1,0]}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{[0,0.51,1,0]}\settodepth{\Depth}{[0,0.51,1,0]}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(7.5000000,24.5000000){\hspace*{\Width}\raisebox{\Height}{[0,0.51,1,0]}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{cerulean}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{cerulean}\settodepth{\Depth}{cerulean}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(15.5000000,24.5000000){\hspace*{\Width}\raisebox{\Height}{cerulean}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{[0.94,0.11,0,0]}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{[0.94,0.11,0,0]}\settodepth{\Depth}{[0.94,0.11,0,0]}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(20.5000000,24.5000000){\hspace*{\Width}\raisebox{\Height}{[0.94,0.11,0,0]}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{bittersweet}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{bittersweet}\settodepth{\Depth}{bittersweet}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.5000000,23.5000000){\hspace*{\Width}\raisebox{\Height}{bittersweet}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{[0,0.75,1,0.24]}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{[0,0.75,1,0.24]}\settodepth{\Depth}{[0,0.75,1,0.24]}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(7.5000000,23.5000000){\hspace*{\Width}\raisebox{\Height}{[0,0.75,1,0.24]}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{cyan}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{cyan}\settodepth{\Depth}{cyan}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(15.5000000,23.5000000){\hspace*{\Width}\raisebox{\Height}{cyan}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{[1,0,0,0]}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{[1,0,0,0]}\settodepth{\Depth}{[1,0,0,0]}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(20.5000000,23.5000000){\hspace*{\Width}\raisebox{\Height}{[1,0,0,0]}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{redorange}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{redorange}\settodepth{\Depth}{redorange}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.5000000,22.5000000){\hspace*{\Width}\raisebox{\Height}{redorange}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{[0,0.77,0.87,0]}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{[0,0.77,0.87,0]}\settodepth{\Depth}{[0,0.77,0.87,0]}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(7.5000000,22.5000000){\hspace*{\Width}\raisebox{\Height}{[0,0.77,0.87,0]}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{processblue}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{processblue}\settodepth{\Depth}{processblue}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(15.5000000,22.5000000){\hspace*{\Width}\raisebox{\Height}{processblue}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{[0.96,0,0,0]}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{[0.96,0,0,0]}\settodepth{\Depth}{[0.96,0,0,0]}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(20.5000000,22.5000000){\hspace*{\Width}\raisebox{\Height}{[0.96,0,0,0]}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{mahogany}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{mahogany}\settodepth{\Depth}{mahogany}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.5000000,21.5000000){\hspace*{\Width}\raisebox{\Height}{mahogany}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{[0,0.85,0.87,0.35]}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{[0,0.85,0.87,0.35]}\settodepth{\Depth}{[0,0.85,0.87,0.35]}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(7.5000000,21.5000000){\hspace*{\Width}\raisebox{\Height}{[0,0.85,0.87,0.35]}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{skyblue}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{skyblue}\settodepth{\Depth}{skyblue}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(15.5000000,21.5000000){\hspace*{\Width}\raisebox{\Height}{skyblue}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{[0.62,0,0.12,0]}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{[0.62,0,0.12,0]}\settodepth{\Depth}{[0.62,0,0.12,0]}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(20.5000000,21.5000000){\hspace*{\Width}\raisebox{\Height}{[0.62,0,0.12,0]}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{maroon}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{maroon}\settodepth{\Depth}{maroon}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.5000000,20.5000000){\hspace*{\Width}\raisebox{\Height}{maroon}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{[0,0.87,0.68,0.32]}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{[0,0.87,0.68,0.32]}\settodepth{\Depth}{[0,0.87,0.68,0.32]}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(7.5000000,20.5000000){\hspace*{\Width}\raisebox{\Height}{[0,0.87,0.68,0.32]}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{turquoise}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{turquoise}\settodepth{\Depth}{turquoise}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(15.5000000,20.5000000){\hspace*{\Width}\raisebox{\Height}{turquoise}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{[0.85,0,0.2,0]}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{[0.85,0,0.2,0]}\settodepth{\Depth}{[0.85,0,0.2,0]}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(20.5000000,20.5000000){\hspace*{\Width}\raisebox{\Height}{[0.85,0,0.2,0]}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{brickred}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{brickred}\settodepth{\Depth}{brickred}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.5000000,19.5000000){\hspace*{\Width}\raisebox{\Height}{brickred}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{[0,0.89,0.94,0.28]}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{[0,0.89,0.94,0.28]}\settodepth{\Depth}{[0,0.89,0.94,0.28]}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(7.5000000,19.5000000){\hspace*{\Width}\raisebox{\Height}{[0,0.89,0.94,0.28]}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{tealblue}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{tealblue}\settodepth{\Depth}{tealblue}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(15.5000000,19.5000000){\hspace*{\Width}\raisebox{\Height}{tealblue}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{[0.86,0,0.34,0.02]}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{[0.86,0,0.34,0.02]}\settodepth{\Depth}{[0.86,0,0.34,0.02]}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(20.5000000,19.5000000){\hspace*{\Width}\raisebox{\Height}{[0.86,0,0.34,0.02]}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{red}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{red}\settodepth{\Depth}{red}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.5000000,18.5000000){\hspace*{\Width}\raisebox{\Height}{red}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{[0,1,1,0]}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{[0,1,1,0]}\settodepth{\Depth}{[0,1,1,0]}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(7.5000000,18.5000000){\hspace*{\Width}\raisebox{\Height}{[0,1,1,0]}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{aquamarine}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{aquamarine}\settodepth{\Depth}{aquamarine}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(15.5000000,18.5000000){\hspace*{\Width}\raisebox{\Height}{aquamarine}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{[0.82,0,0.3,0]}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{[0.82,0,0.3,0]}\settodepth{\Depth}{[0.82,0,0.3,0]}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(20.5000000,18.5000000){\hspace*{\Width}\raisebox{\Height}{[0.82,0,0.3,0]}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{orangered}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{orangered}\settodepth{\Depth}{orangered}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.5000000,17.5000000){\hspace*{\Width}\raisebox{\Height}{orangered}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{[0,1,0.5,0]}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{[0,1,0.5,0]}\settodepth{\Depth}{[0,1,0.5,0]}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(7.5000000,17.5000000){\hspace*{\Width}\raisebox{\Height}{[0,1,0.5,0]}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{bluegreen}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{bluegreen}\settodepth{\Depth}{bluegreen}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(15.5000000,17.5000000){\hspace*{\Width}\raisebox{\Height}{bluegreen}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{[0.85,0,0.33,0]}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{[0.85,0,0.33,0]}\settodepth{\Depth}{[0.85,0,0.33,0]}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(20.5000000,17.5000000){\hspace*{\Width}\raisebox{\Height}{[0.85,0,0.33,0]}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{rubinered}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{rubinered}\settodepth{\Depth}{rubinered}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.5000000,16.5000000){\hspace*{\Width}\raisebox{\Height}{rubinered}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{[0,1,0.13,0]}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{[0,1,0.13,0]}\settodepth{\Depth}{[0,1,0.13,0]}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(7.5000000,16.5000000){\hspace*{\Width}\raisebox{\Height}{[0,1,0.13,0]}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{emerald}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{emerald}\settodepth{\Depth}{emerald}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(15.5000000,16.5000000){\hspace*{\Width}\raisebox{\Height}{emerald}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{[1,0,0.5,0]}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{[1,0,0.5,0]}\settodepth{\Depth}{[1,0,0.5,0]}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(20.5000000,16.5000000){\hspace*{\Width}\raisebox{\Height}{[1,0,0.5,0]}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{wildstrawberry}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{wildstrawberry}\settodepth{\Depth}{wildstrawberry}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.5000000,15.5000000){\hspace*{\Width}\raisebox{\Height}{wildstrawberry}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{[0,0.96,0.39,0]}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{[0,0.96,0.39,0]}\settodepth{\Depth}{[0,0.96,0.39,0]}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(7.5000000,15.5000000){\hspace*{\Width}\raisebox{\Height}{[0,0.96,0.39,0]}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{janglegreen}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{janglegreen}\settodepth{\Depth}{janglegreen}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(15.5000000,15.5000000){\hspace*{\Width}\raisebox{\Height}{janglegreen}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{[0.99,0,0.52,0]}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{[0.99,0,0.52,0]}\settodepth{\Depth}{[0.99,0,0.52,0]}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(20.5000000,15.5000000){\hspace*{\Width}\raisebox{\Height}{[0.99,0,0.52,0]}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{salmon}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{salmon}\settodepth{\Depth}{salmon}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.5000000,14.5000000){\hspace*{\Width}\raisebox{\Height}{salmon}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{[0,0.53,0.38,0]}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{[0,0.53,0.38,0]}\settodepth{\Depth}{[0,0.53,0.38,0]}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(7.5000000,14.5000000){\hspace*{\Width}\raisebox{\Height}{[0,0.53,0.38,0]}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{seagreen}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{seagreen}\settodepth{\Depth}{seagreen}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(15.5000000,14.5000000){\hspace*{\Width}\raisebox{\Height}{seagreen}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{[0.69,0,0.5,0]}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{[0.69,0,0.5,0]}\settodepth{\Depth}{[0.69,0,0.5,0]}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(20.5000000,14.5000000){\hspace*{\Width}\raisebox{\Height}{[0.69,0,0.5,0]}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{carnationpink}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{carnationpink}\settodepth{\Depth}{carnationpink}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.5000000,13.5000000){\hspace*{\Width}\raisebox{\Height}{carnationpink}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{[0,0.63,0,0]}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{[0,0.63,0,0]}\settodepth{\Depth}{[0,0.63,0,0]}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(7.5000000,13.5000000){\hspace*{\Width}\raisebox{\Height}{[0,0.63,0,0]}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{green}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{green}\settodepth{\Depth}{green}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(15.5000000,13.5000000){\hspace*{\Width}\raisebox{\Height}{green}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{[1,0,1,0]}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{[1,0,1,0]}\settodepth{\Depth}{[1,0,1,0]}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(20.5000000,13.5000000){\hspace*{\Width}\raisebox{\Height}{[1,0,1,0]}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{magenta}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{magenta}\settodepth{\Depth}{magenta}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.5000000,12.5000000){\hspace*{\Width}\raisebox{\Height}{magenta}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{[0,1,0,0]}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{[0,1,0,0]}\settodepth{\Depth}{[0,1,0,0]}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(7.5000000,12.5000000){\hspace*{\Width}\raisebox{\Height}{[0,1,0,0]}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{forestgreen}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{forestgreen}\settodepth{\Depth}{forestgreen}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(15.5000000,12.5000000){\hspace*{\Width}\raisebox{\Height}{forestgreen}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{[0.91,0,0.88,0.12]}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{[0.91,0,0.88,0.12]}\settodepth{\Depth}{[0.91,0,0.88,0.12]}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(20.5000000,12.5000000){\hspace*{\Width}\raisebox{\Height}{[0.91,0,0.88,0.12]}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{violetred}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{violetred}\settodepth{\Depth}{violetred}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.5000000,11.5000000){\hspace*{\Width}\raisebox{\Height}{violetred}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{[0,0.81,0,0]}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{[0,0.81,0,0]}\settodepth{\Depth}{[0,0.81,0,0]}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(7.5000000,11.5000000){\hspace*{\Width}\raisebox{\Height}{[0,0.81,0,0]}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{pinegreen}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{pinegreen}\settodepth{\Depth}{pinegreen}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(15.5000000,11.5000000){\hspace*{\Width}\raisebox{\Height}{pinegreen}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{[0.92,0,0.59,0.25]}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{[0.92,0,0.59,0.25]}\settodepth{\Depth}{[0.92,0,0.59,0.25]}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(20.5000000,11.5000000){\hspace*{\Width}\raisebox{\Height}{[0.92,0,0.59,0.25]}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{rhodamine}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{rhodamine}\settodepth{\Depth}{rhodamine}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.5000000,10.5000000){\hspace*{\Width}\raisebox{\Height}{rhodamine}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{[0,0.82,0,0]}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{[0,0.82,0,0]}\settodepth{\Depth}{[0,0.82,0,0]}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(7.5000000,10.5000000){\hspace*{\Width}\raisebox{\Height}{[0,0.82,0,0]}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{limegreen}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{limegreen}\settodepth{\Depth}{limegreen}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(15.5000000,10.5000000){\hspace*{\Width}\raisebox{\Height}{limegreen}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{[0.5,0,1,0]}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{[0.5,0,1,0]}\settodepth{\Depth}{[0.5,0,1,0]}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(20.5000000,10.5000000){\hspace*{\Width}\raisebox{\Height}{[0.5,0,1,0]}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{mulberry}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{mulberry}\settodepth{\Depth}{mulberry}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.5000000,9.5000000){\hspace*{\Width}\raisebox{\Height}{mulberry}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{[0.34,0.9,0,0.02]}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{[0.34,0.9,0,0.02]}\settodepth{\Depth}{[0.34,0.9,0,0.02]}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(7.5000000,9.5000000){\hspace*{\Width}\raisebox{\Height}{[0.34,0.9,0,0.02]}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{yellowgreen}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{yellowgreen}\settodepth{\Depth}{yellowgreen}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(15.5000000,9.5000000){\hspace*{\Width}\raisebox{\Height}{yellowgreen}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{[0.44,0,0.74,0]}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{[0.44,0,0.74,0]}\settodepth{\Depth}{[0.44,0,0.74,0]}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(20.5000000,9.5000000){\hspace*{\Width}\raisebox{\Height}{[0.44,0,0.74,0]}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{redviolet}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{redviolet}\settodepth{\Depth}{redviolet}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.5000000,8.5000000){\hspace*{\Width}\raisebox{\Height}{redviolet}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{[0.07,0.9,0,0.34]}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{[0.07,0.9,0,0.34]}\settodepth{\Depth}{[0.07,0.9,0,0.34]}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(7.5000000,8.5000000){\hspace*{\Width}\raisebox{\Height}{[0.07,0.9,0,0.34]}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{springgreen}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{springgreen}\settodepth{\Depth}{springgreen}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(15.5000000,8.5000000){\hspace*{\Width}\raisebox{\Height}{springgreen}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{[0.26,0,0.76,0]}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{[0.26,0,0.76,0]}\settodepth{\Depth}{[0.26,0,0.76,0]}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(20.5000000,8.5000000){\hspace*{\Width}\raisebox{\Height}{[0.26,0,0.76,0]}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{fuchsia}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{fuchsia}\settodepth{\Depth}{fuchsia}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.5000000,7.5000000){\hspace*{\Width}\raisebox{\Height}{fuchsia}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{[0.47,0.91,0,0.08]}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{[0.47,0.91,0,0.08]}\settodepth{\Depth}{[0.47,0.91,0,0.08]}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(7.5000000,7.5000000){\hspace*{\Width}\raisebox{\Height}{[0.47,0.91,0,0.08]}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{olivegreen}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{olivegreen}\settodepth{\Depth}{olivegreen}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(15.5000000,7.5000000){\hspace*{\Width}\raisebox{\Height}{olivegreen}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{[0.64,0,0.95,0.4]}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{[0.64,0,0.95,0.4]}\settodepth{\Depth}{[0.64,0,0.95,0.4]}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(20.5000000,7.5000000){\hspace*{\Width}\raisebox{\Height}{[0.64,0,0.95,0.4]}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{lavender}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{lavender}\settodepth{\Depth}{lavender}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.5000000,6.5000000){\hspace*{\Width}\raisebox{\Height}{lavender}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{[0,0.48,0,0]}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{[0,0.48,0,0]}\settodepth{\Depth}{[0,0.48,0,0]}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(7.5000000,6.5000000){\hspace*{\Width}\raisebox{\Height}{[0,0.48,0,0]}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{rawsienna}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{rawsienna}\settodepth{\Depth}{rawsienna}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(15.5000000,6.5000000){\hspace*{\Width}\raisebox{\Height}{rawsienna}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{[0,0.72,1,0.45]}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{[0,0.72,1,0.45]}\settodepth{\Depth}{[0,0.72,1,0.45]}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(20.5000000,6.5000000){\hspace*{\Width}\raisebox{\Height}{[0,0.72,1,0.45]}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{thistle}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{thistle}\settodepth{\Depth}{thistle}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.5000000,5.5000000){\hspace*{\Width}\raisebox{\Height}{thistle}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{[0.12,0.59,0,0]}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{[0.12,0.59,0,0]}\settodepth{\Depth}{[0.12,0.59,0,0]}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(7.5000000,5.5000000){\hspace*{\Width}\raisebox{\Height}{[0.12,0.59,0,0]}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{sepia}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{sepia}\settodepth{\Depth}{sepia}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(15.5000000,5.5000000){\hspace*{\Width}\raisebox{\Height}{sepia}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{[0,0.83,1,0.7]}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{[0,0.83,1,0.7]}\settodepth{\Depth}{[0,0.83,1,0.7]}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(20.5000000,5.5000000){\hspace*{\Width}\raisebox{\Height}{[0,0.83,1,0.7]}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{orchid}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{orchid}\settodepth{\Depth}{orchid}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.5000000,4.5000000){\hspace*{\Width}\raisebox{\Height}{orchid}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{[0.32,0.64,0,0]}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{[0.32,0.64,0,0]}\settodepth{\Depth}{[0.32,0.64,0,0]}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(7.5000000,4.5000000){\hspace*{\Width}\raisebox{\Height}{[0.32,0.64,0,0]}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{brown}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{brown}\settodepth{\Depth}{brown}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(15.5000000,4.5000000){\hspace*{\Width}\raisebox{\Height}{brown}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{[0,0.81,1,0.6]}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{[0,0.81,1,0.6]}\settodepth{\Depth}{[0,0.81,1,0.6]}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(20.5000000,4.5000000){\hspace*{\Width}\raisebox{\Height}{[0,0.81,1,0.6]}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{darkorchid}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{darkorchid}\settodepth{\Depth}{darkorchid}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.5000000,3.5000000){\hspace*{\Width}\raisebox{\Height}{darkorchid}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{[0.4,0.8,0.2,0]}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{[0.4,0.8,0.2,0]}\settodepth{\Depth}{[0.4,0.8,0.2,0]}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(7.5000000,3.5000000){\hspace*{\Width}\raisebox{\Height}{[0.4,0.8,0.2,0]}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{tan}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{tan}\settodepth{\Depth}{tan}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(15.5000000,3.5000000){\hspace*{\Width}\raisebox{\Height}{tan}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{[0.14,0.42,0.56,0]}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{[0.14,0.42,0.56,0]}\settodepth{\Depth}{[0.14,0.42,0.56,0]}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(20.5000000,3.5000000){\hspace*{\Width}\raisebox{\Height}{[0.14,0.42,0.56,0]}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{purple}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{purple}\settodepth{\Depth}{purple}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.5000000,2.5000000){\hspace*{\Width}\raisebox{\Height}{purple}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{[0.45,0.86,0,0]}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{[0.45,0.86,0,0]}\settodepth{\Depth}{[0.45,0.86,0,0]}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(7.5000000,2.5000000){\hspace*{\Width}\raisebox{\Height}{[0.45,0.86,0,0]}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{gray}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{gray}\settodepth{\Depth}{gray}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(15.5000000,2.5000000){\hspace*{\Width}\raisebox{\Height}{gray}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{[0,0,0,0.5]}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{[0,0,0,0.5]}\settodepth{\Depth}{[0,0,0,0.5]}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(20.5000000,2.5000000){\hspace*{\Width}\raisebox{\Height}{[0,0,0,0.5]}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{plum}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{plum}\settodepth{\Depth}{plum}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.5000000,1.5000000){\hspace*{\Width}\raisebox{\Height}{plum}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{[0.5,1,0,0]}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{[0.5,1,0,0]}\settodepth{\Depth}{[0.5,1,0,0]}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(7.5000000,1.5000000){\hspace*{\Width}\raisebox{\Height}{[0.5,1,0,0]}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{black}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{black}\settodepth{\Depth}{black}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(15.5000000,1.5000000){\hspace*{\Width}\raisebox{\Height}{black}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{[0,0,0,1]}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{[0,0,0,1]}\settodepth{\Depth}{[0,0,0,1]}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(20.5000000,1.5000000){\hspace*{\Width}\raisebox{\Height}{[0,0,0,1]}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{violet}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{violet}\settodepth{\Depth}{violet}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.5000000,0.5000000){\hspace*{\Width}\raisebox{\Height}{violet}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{[0.79,0.88,0,0]}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{[0.79,0.88,0,0]}\settodepth{\Depth}{[0.79,0.88,0,0]}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(7.5000000,0.5000000){\hspace*{\Width}\raisebox{\Height}{[0.79,0.88,0,0]}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{white}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{white}\settodepth{\Depth}{white}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(15.5000000,0.5000000){\hspace*{\Width}\raisebox{\Height}{white}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{[0,0,0,0]}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{[0,0,0,0]}\settodepth{\Depth}{[0,0,0,0]}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(20.5000000,0.5000000){\hspace*{\Width}\raisebox{\Height}{[0,0,0,0]}}%
+%
+}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/concatobj.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/concatobj.tex
new file mode 100644
index 0000000000..ce7154114b
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/concatobj.tex
@@ -0,0 +1,42 @@
+%%% /Users/Hannya/ketcindy/ketwork/template.tex 2016-8-24 20:24
+%%% template.sce 2016-8-24 20:24
+{\unitlength=8mm%
+\begin{picture}%
+( 5.00000, 5.00000)( -3.00000, -1.00000)%
+\special{pn 8}%
+%
+\special{pa 483 -179}\special{pa 185 -147}%
+\special{fp}%
+\special{pa 137 -141}\special{pa -712 -48}%
+\special{fp}%
+\special{pa -712 -48}\special{pa 229 228}%
+\special{fp}%
+\special{pa 483 -179}\special{pa 229 228}%
+\special{fp}%
+\special{pa -712 -48}\special{pa 0 -1030}%
+\special{fp}%
+\special{pa 483 -179}\special{pa 0 -1030}%
+\special{fp}%
+\special{pa 229 228}\special{pa 0 -1030}%
+\special{fp}%
+\settowidth{\Width}{A}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{A}\settodepth{\Depth}{A}\setlength{\Height}{\Depth}%
+\put(-0.0500,3.3201){\hspace*{\Width}\raisebox{\Height}{A}}%
+%
+%
+\settowidth{\Width}{B}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{B}\settodepth{\Depth}{B}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-2.4118,0.1538){\hspace*{\Width}\raisebox{\Height}{B}}%
+%
+%
+\settowidth{\Width}{C}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{C}\settodepth{\Depth}{C}\setlength{\Height}{-\Height}%
+\put(0.7771,-0.7732){\hspace*{\Width}\raisebox{\Height}{C}}%
+%
+%
+\settowidth{\Width}{D}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{D}\settodepth{\Depth}{D}\setlength{\Height}{\Depth}%
+\put(1.5848,0.6193){\hspace*{\Width}\raisebox{\Height}{D}}%
+%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/concept.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/concept.tex
new file mode 100644
index 0000000000..5ac9abfa4a
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/concept.tex
@@ -0,0 +1,892 @@
+%%% /Users/Hannya/Desktop/KeTCindy/KeTCindyTools/fig/concept.tex
+%%% Generator=KeTCindy概念図.cdy
+{\unitlength=3.5mm%
+\begin{picture}%
+(39.08,22.04)(-24.72,-12.36)%
+\special{pn 8}%
+%
+{%
+\color[rgb]{0,1,0}%
+\special{pa 1058 -568}\special{pa 1054 -627}\special{pa 1043 -686}\special{pa 1025 -742}%
+\special{pa 999 -796}\special{pa 968 -846}\special{pa 930 -892}\special{pa 886 -933}%
+\special{pa 838 -968}\special{pa 786 -996}\special{pa 731 -1018}\special{pa 673 -1033}%
+\special{pa 614 -1041}\special{pa 555 -1041}\special{pa 495 -1033}\special{pa 438 -1018}%
+\special{pa 383 -996}\special{pa 330 -968}\special{pa 282 -933}\special{pa 239 -892}%
+\special{pa 201 -846}\special{pa 169 -796}\special{pa 144 -742}\special{pa 125 -686}%
+\special{pa 114 -627}\special{pa 110 -568}\special{pa 114 -508}\special{pa 125 -450}%
+\special{pa 144 -393}\special{pa 169 -339}\special{pa 201 -289}\special{pa 239 -243}%
+\special{pa 282 -203}\special{pa 330 -168}\special{pa 383 -139}\special{pa 438 -117}%
+\special{pa 495 -102}\special{pa 555 -95}\special{pa 614 -95}\special{pa 673 -102}%
+\special{pa 731 -117}\special{pa 786 -139}\special{pa 838 -168}\special{pa 886 -203}%
+\special{pa 930 -243}\special{pa 968 -289}\special{pa 999 -339}\special{pa 1025 -393}%
+\special{pa 1043 -450}\special{pa 1054 -508}\special{pa 1058 -568}\special{sh 1}\special{ip}%
+}%
+{%
+\color[rgb]{1,0,0}%
+\special{pa 1940 -579}\special{pa 1937 -631}\special{pa 1927 -681}\special{pa 1911 -731}%
+\special{pa 1889 -778}\special{pa 1861 -822}\special{pa 1828 -862}\special{pa 1790 -897}%
+\special{pa 1748 -928}\special{pa 1703 -953}\special{pa 1654 -972}\special{pa 1604 -985}%
+\special{pa 1553 -991}\special{pa 1501 -991}\special{pa 1449 -985}\special{pa 1399 -972}%
+\special{pa 1351 -953}\special{pa 1305 -928}\special{pa 1263 -897}\special{pa 1226 -862}%
+\special{pa 1193 -822}\special{pa 1165 -778}\special{pa 1143 -731}\special{pa 1127 -681}%
+\special{pa 1117 -631}\special{pa 1114 -579}\special{pa 1117 -527}\special{pa 1127 -476}%
+\special{pa 1143 -427}\special{pa 1165 -380}\special{pa 1193 -336}\special{pa 1226 -296}%
+\special{pa 1263 -260}\special{pa 1305 -230}\special{pa 1351 -205}\special{pa 1399 -186}%
+\special{pa 1449 -173}\special{pa 1501 -166}\special{pa 1553 -166}\special{pa 1604 -173}%
+\special{pa 1654 -186}\special{pa 1703 -205}\special{pa 1748 -230}\special{pa 1790 -260}%
+\special{pa 1828 -296}\special{pa 1861 -336}\special{pa 1889 -380}\special{pa 1911 -427}%
+\special{pa 1927 -476}\special{pa 1937 -527}\special{pa 1940 -579}\special{sh 1}\special{ip}%
+}%
+{%
+\color[cmyk]{0,0,0.5,0}%
+\special{pa 1538 292}\special{pa 1535 243}\special{pa 1526 195}\special{pa 1510 148}%
+\special{pa 1490 104}\special{pa 1463 62}\special{pa 1432 24}\special{pa 1396 -10}%
+\special{pa 1356 -38}\special{pa 1313 -62}\special{pa 1267 -80}\special{pa 1220 -92}%
+\special{pa 1171 -99}\special{pa 1122 -99}\special{pa 1073 -92}\special{pa 1025 -80}%
+\special{pa 980 -62}\special{pa 937 -38}\special{pa 897 -10}\special{pa 861 24}\special{pa 830 62}%
+\special{pa 803 104}\special{pa 782 148}\special{pa 767 195}\special{pa 758 243}\special{pa 755 292}%
+\special{pa 758 341}\special{pa 767 389}\special{pa 782 436}\special{pa 803 481}\special{pa 830 522}%
+\special{pa 861 560}\special{pa 897 594}\special{pa 937 623}\special{pa 980 646}\special{pa 1025 664}%
+\special{pa 1073 677}\special{pa 1122 683}\special{pa 1171 683}\special{pa 1220 677}%
+\special{pa 1267 664}\special{pa 1313 646}\special{pa 1356 623}\special{pa 1396 594}%
+\special{pa 1432 560}\special{pa 1463 522}\special{pa 1490 481}\special{pa 1510 436}%
+\special{pa 1526 389}\special{pa 1535 341}\special{pa 1538 292}\special{sh 1}\special{ip}%
+}%
+{%
+\color[cmyk]{0,0,1,0}%
+\special{pa 28 39}\special{pa 24 -9}\special{pa 11 -57}\special{pa -9 -103}\special{pa -36 -146}%
+\special{pa -71 -187}\special{pa -112 -224}\special{pa -159 -257}\special{pa -212 -285}%
+\special{pa -268 -308}\special{pa -329 -326}\special{pa -391 -338}\special{pa -455 -344}%
+\special{pa -520 -344}\special{pa -584 -338}\special{pa -647 -326}\special{pa -707 -308}%
+\special{pa -764 -285}\special{pa -816 -257}\special{pa -863 -224}\special{pa -905 -187}%
+\special{pa -939 -146}\special{pa -967 -103}\special{pa -987 -57}\special{pa -999 -9}%
+\special{pa -1003 39}\special{pa -999 87}\special{pa -987 134}\special{pa -967 180}%
+\special{pa -939 223}\special{pa -905 264}\special{pa -863 301}\special{pa -816 334}%
+\special{pa -764 362}\special{pa -707 385}\special{pa -647 403}\special{pa -584 415}%
+\special{pa -520 421}\special{pa -455 421}\special{pa -391 415}\special{pa -329 403}%
+\special{pa -268 385}\special{pa -212 362}\special{pa -159 334}\special{pa -112 301}%
+\special{pa -71 264}\special{pa -36 223}\special{pa -9 180}\special{pa 11 134}\special{pa 24 87}%
+\special{pa 28 39}\special{sh 1}\special{ip}%
+}%
+{%
+\color[cmyk]{0,0.2,0,0}%
+\special{pa -2458 39}\special{pa -2462 -5}\special{pa -2472 -47}\special{pa -2489 -88}%
+\special{pa -2513 -127}\special{pa -2542 -164}\special{pa -2578 -197}\special{pa -2618 -227}%
+\special{pa -2663 -252}\special{pa -2711 -273}\special{pa -2763 -289}\special{pa -2817 -300}%
+\special{pa -2872 -305}\special{pa -2927 -305}\special{pa -2982 -300}\special{pa -3036 -289}%
+\special{pa -3087 -273}\special{pa -3136 -252}\special{pa -3180 -227}\special{pa -3221 -197}%
+\special{pa -3256 -164}\special{pa -3286 -127}\special{pa -3309 -88}\special{pa -3327 -47}%
+\special{pa -3337 -5}\special{pa -3340 39}\special{pa -3337 82}\special{pa -3327 124}%
+\special{pa -3309 165}\special{pa -3286 205}\special{pa -3256 241}\special{pa -3221 274}%
+\special{pa -3180 304}\special{pa -3136 329}\special{pa -3087 350}\special{pa -3036 366}%
+\special{pa -2982 377}\special{pa -2927 382}\special{pa -2872 382}\special{pa -2817 377}%
+\special{pa -2763 366}\special{pa -2711 350}\special{pa -2663 329}\special{pa -2618 304}%
+\special{pa -2578 274}\special{pa -2542 241}\special{pa -2513 205}\special{pa -2489 165}%
+\special{pa -2472 124}\special{pa -2462 82}\special{pa -2458 39}\special{sh 1}\special{ip}%
+}%
+{%
+\color[cmyk]{0.2,0.2,0,0}%
+\special{pa -1298 39}\special{pa -1302 -5}\special{pa -1313 -47}\special{pa -1331 -89}%
+\special{pa -1356 -128}\special{pa -1387 -164}\special{pa -1424 -198}\special{pa -1467 -228}%
+\special{pa -1514 -253}\special{pa -1565 -274}\special{pa -1619 -290}\special{pa -1675 -301}%
+\special{pa -1733 -306}\special{pa -1792 -306}\special{pa -1849 -301}\special{pa -1906 -290}%
+\special{pa -1960 -274}\special{pa -2011 -253}\special{pa -2058 -228}\special{pa -2101 -198}%
+\special{pa -2138 -164}\special{pa -2169 -128}\special{pa -2194 -89}\special{pa -2212 -47}%
+\special{pa -2223 -5}\special{pa -2227 39}\special{pa -2223 82}\special{pa -2212 124}%
+\special{pa -2194 166}\special{pa -2169 205}\special{pa -2138 242}\special{pa -2101 275}%
+\special{pa -2058 305}\special{pa -2011 330}\special{pa -1960 351}\special{pa -1906 367}%
+\special{pa -1849 378}\special{pa -1792 383}\special{pa -1733 383}\special{pa -1675 378}%
+\special{pa -1619 367}\special{pa -1565 351}\special{pa -1514 330}\special{pa -1467 305}%
+\special{pa -1424 275}\special{pa -1387 242}\special{pa -1356 205}\special{pa -1331 166}%
+\special{pa -1313 124}\special{pa -1302 82}\special{pa -1298 39}\special{sh 1}\special{ip}%
+}%
+{%
+\color[cmyk]{0.2,0,0.2,0}%
+\special{pa -2458 1003}\special{pa -2462 960}\special{pa -2472 917}\special{pa -2489 876}%
+\special{pa -2513 837}\special{pa -2542 801}\special{pa -2578 767}\special{pa -2618 738}%
+\special{pa -2663 712}\special{pa -2711 691}\special{pa -2763 676}\special{pa -2817 665}%
+\special{pa -2872 659}\special{pa -2927 659}\special{pa -2982 665}\special{pa -3036 676}%
+\special{pa -3087 691}\special{pa -3136 712}\special{pa -3180 738}\special{pa -3221 767}%
+\special{pa -3256 801}\special{pa -3286 837}\special{pa -3309 876}\special{pa -3327 917}%
+\special{pa -3337 960}\special{pa -3340 1003}\special{pa -3337 1046}\special{pa -3327 1089}%
+\special{pa -3309 1130}\special{pa -3286 1169}\special{pa -3256 1206}\special{pa -3221 1239}%
+\special{pa -3180 1269}\special{pa -3136 1294}\special{pa -3087 1315}\special{pa -3036 1331}%
+\special{pa -2982 1342}\special{pa -2927 1347}\special{pa -2872 1347}\special{pa -2817 1342}%
+\special{pa -2763 1331}\special{pa -2711 1315}\special{pa -2663 1294}\special{pa -2618 1269}%
+\special{pa -2578 1239}\special{pa -2542 1206}\special{pa -2513 1169}\special{pa -2489 1130}%
+\special{pa -2472 1089}\special{pa -2462 1046}\special{pa -2458 1003}\special{sh 1}\special{ip}%
+}%
+{%
+\color[cmyk]{0,0.1,0.3,0}%
+\special{pa -1462 1003}\special{pa -1465 966}\special{pa -1475 930}\special{pa -1490 895}%
+\special{pa -1512 861}\special{pa -1539 830}\special{pa -1571 801}\special{pa -1608 776}%
+\special{pa -1649 754}\special{pa -1694 736}\special{pa -1741 722}\special{pa -1790 713}%
+\special{pa -1840 709}\special{pa -1891 709}\special{pa -1941 713}\special{pa -1991 722}%
+\special{pa -2038 736}\special{pa -2082 754}\special{pa -2123 776}\special{pa -2160 801}%
+\special{pa -2192 830}\special{pa -2220 861}\special{pa -2241 895}\special{pa -2257 930}%
+\special{pa -2266 966}\special{pa -2270 1003}\special{pa -2266 1040}\special{pa -2257 1077}%
+\special{pa -2241 1112}\special{pa -2220 1145}\special{pa -2192 1177}\special{pa -2160 1205}%
+\special{pa -2123 1231}\special{pa -2082 1252}\special{pa -2038 1270}\special{pa -1991 1284}%
+\special{pa -1941 1293}\special{pa -1891 1298}\special{pa -1840 1298}\special{pa -1790 1293}%
+\special{pa -1741 1284}\special{pa -1694 1270}\special{pa -1649 1252}\special{pa -1608 1231}%
+\special{pa -1571 1205}\special{pa -1539 1177}\special{pa -1512 1145}\special{pa -1490 1112}%
+\special{pa -1475 1077}\special{pa -1465 1040}\special{pa -1462 1003}\special{sh 1}\special{ip}%
+}%
+{%
+\color[cmyk]{0,0.1,0.3,0}%
+\special{pa 105 1240}\special{pa 102 1205}\special{pa 92 1171}\special{pa 76 1138}%
+\special{pa 54 1107}\special{pa 26 1078}\special{pa -7 1051}\special{pa -45 1027}%
+\special{pa -87 1007}\special{pa -133 990}\special{pa -182 977}\special{pa -232 969}%
+\special{pa -284 964}\special{pa -336 964}\special{pa -388 969}\special{pa -438 977}%
+\special{pa -487 990}\special{pa -533 1007}\special{pa -575 1027}\special{pa -613 1051}%
+\special{pa -646 1078}\special{pa -674 1107}\special{pa -696 1138}\special{pa -712 1171}%
+\special{pa -722 1205}\special{pa -725 1240}\special{pa -722 1275}\special{pa -712 1309}%
+\special{pa -696 1342}\special{pa -674 1373}\special{pa -646 1403}\special{pa -613 1429}%
+\special{pa -575 1453}\special{pa -533 1474}\special{pa -487 1490}\special{pa -438 1503}%
+\special{pa -388 1512}\special{pa -336 1516}\special{pa -284 1516}\special{pa -232 1512}%
+\special{pa -182 1503}\special{pa -133 1490}\special{pa -87 1474}\special{pa -45 1453}%
+\special{pa -7 1429}\special{pa 26 1403}\special{pa 54 1373}\special{pa 76 1342}\special{pa 92 1309}%
+\special{pa 102 1275}\special{pa 105 1240}\special{sh 1}\special{ip}%
+}%
+{%
+\color[cmyk]{0,0.1,0.3,0}%
+\special{pa 949 1033}\special{pa 945 996}\special{pa 935 959}\special{pa 918 923}%
+\special{pa 895 889}\special{pa 866 857}\special{pa 831 828}\special{pa 792 802}\special{pa 748 780}%
+\special{pa 701 762}\special{pa 650 748}\special{pa 598 738}\special{pa 544 734}\special{pa 490 734}%
+\special{pa 436 738}\special{pa 383 748}\special{pa 333 762}\special{pa 285 780}\special{pa 241 802}%
+\special{pa 202 828}\special{pa 167 857}\special{pa 138 889}\special{pa 115 923}\special{pa 99 959}%
+\special{pa 88 996}\special{pa 85 1033}\special{pa 88 1071}\special{pa 99 1108}\special{pa 115 1144}%
+\special{pa 138 1178}\special{pa 167 1210}\special{pa 202 1239}\special{pa 241 1265}%
+\special{pa 285 1287}\special{pa 333 1305}\special{pa 383 1319}\special{pa 436 1329}%
+\special{pa 490 1333}\special{pa 544 1333}\special{pa 598 1329}\special{pa 650 1319}%
+\special{pa 701 1305}\special{pa 748 1287}\special{pa 792 1265}\special{pa 831 1239}%
+\special{pa 866 1210}\special{pa 895 1178}\special{pa 918 1144}\special{pa 935 1108}%
+\special{pa 945 1071}\special{pa 949 1033}\special{sh 1}\special{ip}%
+}%
+{%
+\color[cmyk]{0,0.1,0.3,0}%
+\special{pa -801 1348}\special{pa -804 1315}\special{pa -812 1283}\special{pa -827 1252}%
+\special{pa -847 1223}\special{pa -873 1195}\special{pa -903 1170}\special{pa -937 1148}%
+\special{pa -976 1129}\special{pa -1017 1113}\special{pa -1061 1101}\special{pa -1107 1093}%
+\special{pa -1154 1089}\special{pa -1202 1089}\special{pa -1249 1093}\special{pa -1295 1101}%
+\special{pa -1339 1113}\special{pa -1380 1129}\special{pa -1419 1148}\special{pa -1453 1170}%
+\special{pa -1483 1195}\special{pa -1509 1223}\special{pa -1529 1252}\special{pa -1544 1283}%
+\special{pa -1552 1315}\special{pa -1555 1348}\special{pa -1552 1380}\special{pa -1544 1412}%
+\special{pa -1529 1443}\special{pa -1509 1472}\special{pa -1483 1500}\special{pa -1453 1525}%
+\special{pa -1419 1547}\special{pa -1380 1566}\special{pa -1339 1582}\special{pa -1295 1594}%
+\special{pa -1249 1602}\special{pa -1202 1606}\special{pa -1154 1606}\special{pa -1107 1602}%
+\special{pa -1061 1594}\special{pa -1017 1582}\special{pa -976 1566}\special{pa -937 1547}%
+\special{pa -903 1525}\special{pa -873 1500}\special{pa -847 1472}\special{pa -827 1443}%
+\special{pa -812 1412}\special{pa -804 1380}\special{pa -801 1348}\special{sh 1}\special{ip}%
+}%
+{%
+\color[cmyk]{0,0.4,0.3,0}%
+\special{pa -606 -650}\special{pa -610 -684}\special{pa -619 -718}\special{pa -635 -751}%
+\special{pa -657 -781}\special{pa -684 -810}\special{pa -717 -837}\special{pa -754 -860}%
+\special{pa -795 -880}\special{pa -840 -896}\special{pa -887 -909}\special{pa -937 -918}%
+\special{pa -987 -922}\special{pa -1038 -922}\special{pa -1089 -918}\special{pa -1138 -909}%
+\special{pa -1186 -896}\special{pa -1230 -880}\special{pa -1272 -860}\special{pa -1309 -837}%
+\special{pa -1341 -810}\special{pa -1369 -781}\special{pa -1390 -751}\special{pa -1406 -718}%
+\special{pa -1416 -684}\special{pa -1419 -650}\special{pa -1416 -616}\special{pa -1406 -583}%
+\special{pa -1390 -550}\special{pa -1369 -519}\special{pa -1341 -491}\special{pa -1309 -464}%
+\special{pa -1272 -441}\special{pa -1230 -421}\special{pa -1186 -404}\special{pa -1138 -392}%
+\special{pa -1089 -383}\special{pa -1038 -379}\special{pa -987 -379}\special{pa -937 -383}%
+\special{pa -887 -392}\special{pa -840 -404}\special{pa -795 -421}\special{pa -754 -441}%
+\special{pa -717 -464}\special{pa -684 -491}\special{pa -657 -519}\special{pa -635 -550}%
+\special{pa -619 -583}\special{pa -610 -616}\special{pa -606 -650}\special{sh 1}\special{ip}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 1973 -193}\special{pa 1973 -232}\special{fp}\special{pa 1973 -271}\special{pa 1973 -310}\special{fp}%
+\special{pa 1973 -350}\special{pa 1973 -389}\special{fp}\special{pa 1973 -428}\special{pa 1973 -467}\special{fp}%
+\special{pa 1973 -506}\special{pa 1973 -545}\special{fp}\special{pa 1973 -584}\special{pa 1973 -624}\special{fp}%
+\special{pa 1973 -663}\special{pa 1973 -702}\special{fp}\special{pa 1973 -741}\special{pa 1973 -780}\special{fp}%
+\special{pa 1973 -819}\special{pa 1973 -858}\special{fp}\special{pa 1973 -898}\special{pa 1973 -937}\special{fp}%
+\special{pa 1973 -976}\special{pa 1973 -1015}\special{fp}\special{pa 1973 -1054}\special{pa 1973 -1058}\special{pa 1973 -1063}\special{pa 1972 -1067}\special{pa 1970 -1071}\special{pa 1968 -1074}\special{pa 1965 -1078}\special{pa 1962 -1081}\special{pa 1958 -1083}\special{pa 1954 -1084}\special{pa 1954 -1085}\special{fp}%
+\special{pa 1915 -1086}\special{pa 1875 -1086}\special{fp}\special{pa 1836 -1086}\special{pa 1797 -1086}\special{fp}%
+\special{pa 1758 -1086}\special{pa 1719 -1086}\special{fp}\special{pa 1680 -1086}\special{pa 1641 -1086}\special{fp}%
+\special{pa 1601 -1086}\special{pa 1562 -1086}\special{fp}\special{pa 1523 -1086}\special{pa 1484 -1086}\special{fp}%
+\special{pa 1445 -1086}\special{pa 1406 -1086}\special{fp}\special{pa 1367 -1086}\special{pa 1327 -1086}\special{fp}%
+\special{pa 1288 -1086}\special{pa 1249 -1086}\special{fp}\special{pa 1210 -1086}\special{pa 1171 -1086}\special{fp}%
+\special{pa 1132 -1086}\special{pa 1092 -1086}\special{fp}\special{pa 1053 -1086}\special{pa 1014 -1086}\special{pa 1014 -1086}\special{fp}%
+\special{pa 975 -1086}\special{pa 936 -1086}\special{fp}\special{pa 897 -1086}\special{pa 858 -1086}\special{fp}%
+\special{pa 818 -1086}\special{pa 779 -1086}\special{fp}\special{pa 740 -1086}\special{pa 701 -1086}\special{fp}%
+\special{pa 662 -1086}\special{pa 623 -1086}\special{fp}\special{pa 584 -1086}\special{pa 544 -1086}\special{fp}%
+\special{pa 505 -1086}\special{pa 466 -1086}\special{fp}\special{pa 427 -1086}\special{pa 388 -1086}\special{fp}%
+\special{pa 349 -1086}\special{pa 309 -1086}\special{fp}\special{pa 270 -1086}\special{pa 231 -1086}\special{fp}%
+\special{pa 192 -1086}\special{pa 153 -1086}\special{fp}\special{pa 114 -1086}\special{pa 83 -1086}\special{pa 78 -1085}\special{pa 75 -1085}\special{fp}%
+\special{pa 55 -1054}\special{pa 55 -1015}\special{fp}\special{pa 55 -976}\special{pa 55 -937}\special{fp}%
+\special{pa 55 -898}\special{pa 55 -858}\special{fp}\special{pa 55 -819}\special{pa 55 -780}\special{fp}%
+\special{pa 55 -741}\special{pa 55 -702}\special{fp}\special{pa 55 -663}\special{pa 55 -624}\special{fp}%
+\special{pa 55 -584}\special{pa 55 -545}\special{fp}\special{pa 55 -506}\special{pa 55 -467}\special{fp}%
+\special{pa 55 -428}\special{pa 55 -389}\special{fp}\special{pa 55 -350}\special{pa 55 -310}\special{fp}%
+\special{pa 55 -271}\special{pa 55 -232}\special{fp}\special{pa 55 -193}\special{pa 55 -154}\special{fp}%
+\special{pa 55 -115}\special{pa 55 -75}\special{fp}\special{pa 55 -36}\special{pa 55 3}\special{fp}%
+\special{pa 55 42}\special{pa 55 81}\special{fp}\special{pa 55 120}\special{pa 55 159}\special{fp}%
+\special{pa 55 199}\special{pa 55 238}\special{fp}\special{pa 55 277}\special{pa 55 316}\special{fp}%
+\special{pa 55 355}\special{pa 55 394}\special{fp}\special{pa 55 434}\special{pa 55 473}\special{fp}%
+\special{pa 55 512}\special{pa 55 551}\special{fp}\special{pa 55 590}\special{pa 55 629}\special{fp}%
+\special{pa 55 668}\special{pa 55 672}\special{pa 55 677}\special{pa 56 681}\special{pa 58 685}\special{pa 60 689}\special{pa 63 692}\special{pa 66 695}\special{pa 70 697}\special{pa 74 699}\special{pa 75 699}\special{fp}%
+\special{pa 114 700}\special{pa 153 700}\special{fp}\special{pa 192 700}\special{pa 231 700}\special{fp}%
+\special{pa 270 700}\special{pa 309 700}\special{fp}\special{pa 349 700}\special{pa 388 700}\special{fp}%
+\special{pa 427 700}\special{pa 466 700}\special{fp}\special{pa 505 700}\special{pa 544 700}\special{fp}%
+\special{pa 584 700}\special{pa 623 700}\special{fp}\special{pa 662 700}\special{pa 701 700}\special{fp}%
+\special{pa 740 700}\special{pa 779 700}\special{fp}\special{pa 818 700}\special{pa 858 700}\special{fp}%
+\special{pa 897 700}\special{pa 936 700}\special{fp}\special{pa 975 700}\special{pa 1014 700}\special{pa 1014 700}\special{fp}%
+\special{pa 1053 700}\special{pa 1092 700}\special{fp}\special{pa 1132 700}\special{pa 1171 700}\special{fp}%
+\special{pa 1210 700}\special{pa 1249 700}\special{fp}\special{pa 1288 700}\special{pa 1327 700}\special{fp}%
+\special{pa 1367 700}\special{pa 1406 700}\special{fp}\special{pa 1445 700}\special{pa 1484 700}\special{fp}%
+\special{pa 1523 700}\special{pa 1562 700}\special{fp}\special{pa 1601 700}\special{pa 1641 700}\special{fp}%
+\special{pa 1680 700}\special{pa 1719 700}\special{fp}\special{pa 1758 700}\special{pa 1797 700}\special{fp}%
+\special{pa 1836 700}\special{pa 1875 700}\special{fp}\special{pa 1915 700}\special{pa 1946 700}\special{pa 1950 700}\special{pa 1954 699}\special{fp}%
+\special{pa 1973 668}\special{pa 1973 629}\special{fp}\special{pa 1973 590}\special{pa 1973 551}\special{fp}%
+\special{pa 1973 512}\special{pa 1973 473}\special{fp}\special{pa 1973 434}\special{pa 1973 394}\special{fp}%
+\special{pa 1973 355}\special{pa 1973 316}\special{fp}\special{pa 1973 277}\special{pa 1973 238}\special{fp}%
+\special{pa 1973 199}\special{pa 1973 159}\special{fp}\special{pa 1973 120}\special{pa 1973 81}\special{fp}%
+\special{pa 1973 42}\special{pa 1973 3}\special{fp}\special{pa 1973 -36}\special{pa 1973 -75}\special{fp}%
+\special{pa 1973 -115}\special{pa 1973 -154}\special{fp}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 1058 -568}\special{pa 1054 -627}\special{pa 1043 -686}\special{pa 1025 -742}%
+\special{pa 999 -796}\special{pa 968 -846}\special{pa 930 -892}\special{pa 886 -933}%
+\special{pa 838 -968}\special{pa 786 -996}\special{pa 731 -1018}\special{pa 673 -1033}%
+\special{pa 614 -1041}\special{pa 555 -1041}\special{pa 495 -1033}\special{pa 438 -1018}%
+\special{pa 383 -996}\special{pa 330 -968}\special{pa 282 -933}\special{pa 239 -892}%
+\special{pa 201 -846}\special{pa 169 -796}\special{pa 144 -742}\special{pa 125 -686}%
+\special{pa 114 -627}\special{pa 110 -568}\special{pa 114 -508}\special{pa 125 -450}%
+\special{pa 144 -393}\special{pa 169 -339}\special{pa 201 -289}\special{pa 239 -243}%
+\special{pa 282 -203}\special{pa 330 -168}\special{pa 383 -139}\special{pa 438 -117}%
+\special{pa 495 -102}\special{pa 555 -95}\special{pa 614 -95}\special{pa 673 -102}%
+\special{pa 731 -117}\special{pa 786 -139}\special{pa 838 -168}\special{pa 886 -203}%
+\special{pa 930 -243}\special{pa 968 -289}\special{pa 999 -339}\special{pa 1025 -393}%
+\special{pa 1043 -450}\special{pa 1054 -508}\special{pa 1058 -568}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 1940 -579}\special{pa 1937 -631}\special{pa 1927 -681}\special{pa 1911 -731}%
+\special{pa 1889 -778}\special{pa 1861 -822}\special{pa 1828 -862}\special{pa 1790 -897}%
+\special{pa 1748 -928}\special{pa 1703 -953}\special{pa 1654 -972}\special{pa 1604 -985}%
+\special{pa 1553 -991}\special{pa 1501 -991}\special{pa 1449 -985}\special{pa 1399 -972}%
+\special{pa 1351 -953}\special{pa 1305 -928}\special{pa 1263 -897}\special{pa 1226 -862}%
+\special{pa 1193 -822}\special{pa 1165 -778}\special{pa 1143 -731}\special{pa 1127 -681}%
+\special{pa 1117 -631}\special{pa 1114 -579}\special{pa 1117 -527}\special{pa 1127 -476}%
+\special{pa 1143 -427}\special{pa 1165 -380}\special{pa 1193 -336}\special{pa 1226 -296}%
+\special{pa 1263 -260}\special{pa 1305 -230}\special{pa 1351 -205}\special{pa 1399 -186}%
+\special{pa 1449 -173}\special{pa 1501 -166}\special{pa 1553 -166}\special{pa 1604 -173}%
+\special{pa 1654 -186}\special{pa 1703 -205}\special{pa 1748 -230}\special{pa 1790 -260}%
+\special{pa 1828 -296}\special{pa 1861 -336}\special{pa 1889 -380}\special{pa 1911 -427}%
+\special{pa 1927 -476}\special{pa 1937 -527}\special{pa 1940 -579}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 1538 292}\special{pa 1535 243}\special{pa 1526 195}\special{pa 1510 148}%
+\special{pa 1490 104}\special{pa 1463 62}\special{pa 1432 24}\special{pa 1396 -10}%
+\special{pa 1356 -38}\special{pa 1313 -62}\special{pa 1267 -80}\special{pa 1220 -92}%
+\special{pa 1171 -99}\special{pa 1122 -99}\special{pa 1073 -92}\special{pa 1025 -80}%
+\special{pa 980 -62}\special{pa 937 -38}\special{pa 897 -10}\special{pa 861 24}%
+\special{pa 830 62}\special{pa 803 104}\special{pa 782 148}\special{pa 767 195}%
+\special{pa 758 243}\special{pa 755 292}\special{pa 758 341}\special{pa 767 389}%
+\special{pa 782 436}\special{pa 803 481}\special{pa 830 522}\special{pa 861 560}%
+\special{pa 897 594}\special{pa 937 623}\special{pa 980 646}\special{pa 1025 664}%
+\special{pa 1073 677}\special{pa 1122 683}\special{pa 1171 683}\special{pa 1220 677}%
+\special{pa 1267 664}\special{pa 1313 646}\special{pa 1356 623}\special{pa 1396 594}%
+\special{pa 1432 560}\special{pa 1463 522}\special{pa 1490 481}\special{pa 1510 436}%
+\special{pa 1526 389}\special{pa 1535 341}\special{pa 1538 292}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pn 48}%
+\special{pa 816 -154}\special{pa 920 -28}%
+\special{fp}%
+\special{pn 8}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pn 48}%
+\special{pa 1058 -491}\special{pa 1124 -485}%
+\special{fp}%
+\special{pn 8}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pn 24}%
+\special{pa 1218 -94}\special{pa 1284 -230}%
+\special{fp}%
+\special{pn 8}%
+}%
+{%
+\color[rgb]{0,0,0}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 1279 -164}\special{pa 1290 -243}\special{pa 1235 -186}\special{pa 1257 -175}%
+\special{pa 1279 -164}\special{sh 1}\special{ip}%
+\special{pn 1}%
+\special{pa 1279 -164}\special{pa 1290 -243}\special{pa 1235 -186}\special{pa 1257 -175}%
+\special{pa 1279 -164}\special{pa 1290 -243}%
+\special{fp}%
+\special{pn 8}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pn 24}%
+\special{pa 1367 -193}\special{pa 1315 -81}%
+\special{fp}%
+\special{pn 8}%
+}%
+{%
+\color[rgb]{0,0,0}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 1319 -147}\special{pa 1309 -69}\special{pa 1363 -126}\special{pa 1341 -137}%
+\special{pa 1319 -147}\special{sh 1}\special{ip}%
+\special{pn 1}%
+\special{pa 1319 -147}\special{pa 1309 -69}\special{pa 1363 -126}\special{pa 1341 -137}%
+\special{pa 1319 -147}\special{pa 1309 -69}%
+\special{fp}%
+\special{pn 8}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 28 39}\special{pa 24 -9}\special{pa 11 -57}\special{pa -9 -103}%
+\special{pa -36 -146}\special{pa -71 -187}\special{pa -112 -224}\special{pa -159 -257}%
+\special{pa -212 -285}\special{pa -268 -308}\special{pa -329 -326}\special{pa -391 -338}%
+\special{pa -455 -344}\special{pa -520 -344}\special{pa -584 -338}\special{pa -647 -326}%
+\special{pa -707 -308}\special{pa -764 -285}\special{pa -816 -257}\special{pa -863 -224}%
+\special{pa -905 -187}\special{pa -939 -146}\special{pa -967 -103}\special{pa -987 -57}%
+\special{pa -999 -9}\special{pa -1003 39}\special{pa -999 87}\special{pa -987 134}%
+\special{pa -967 180}\special{pa -939 223}\special{pa -905 264}\special{pa -863 301}%
+\special{pa -816 334}\special{pa -764 362}\special{pa -707 385}\special{pa -647 403}%
+\special{pa -584 415}\special{pa -520 421}\special{pa -455 421}\special{pa -391 415}%
+\special{pa -329 403}\special{pa -268 385}\special{pa -212 362}\special{pa -159 334}%
+\special{pa -112 301}\special{pa -71 264}\special{pa -36 223}\special{pa -9 180}%
+\special{pa 11 134}\special{pa 24 87}\special{pa 28 39}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pn 24}%
+\special{pa 39 33}\special{pa 287 -193}%
+\special{fp}%
+\special{pn 8}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pn 24}%
+\special{pa 39 33}\special{pa 758 207}%
+\special{fp}%
+\special{pn 8}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa -2458 39}\special{pa -2462 -5}\special{pa -2472 -47}\special{pa -2489 -88}%
+\special{pa -2513 -127}\special{pa -2542 -164}\special{pa -2578 -197}\special{pa -2618 -227}%
+\special{pa -2663 -252}\special{pa -2711 -273}\special{pa -2763 -289}\special{pa -2817 -300}%
+\special{pa -2872 -305}\special{pa -2927 -305}\special{pa -2982 -300}\special{pa -3036 -289}%
+\special{pa -3087 -273}\special{pa -3136 -252}\special{pa -3180 -227}\special{pa -3221 -197}%
+\special{pa -3256 -164}\special{pa -3286 -127}\special{pa -3309 -88}\special{pa -3327 -47}%
+\special{pa -3337 -5}\special{pa -3340 39}\special{pa -3337 82}\special{pa -3327 124}%
+\special{pa -3309 165}\special{pa -3286 205}\special{pa -3256 241}\special{pa -3221 274}%
+\special{pa -3180 304}\special{pa -3136 329}\special{pa -3087 350}\special{pa -3036 366}%
+\special{pa -2982 377}\special{pa -2927 382}\special{pa -2872 382}\special{pa -2817 377}%
+\special{pa -2763 366}\special{pa -2711 350}\special{pa -2663 329}\special{pa -2618 304}%
+\special{pa -2578 274}\special{pa -2542 241}\special{pa -2513 205}\special{pa -2489 165}%
+\special{pa -2472 124}\special{pa -2462 82}\special{pa -2458 39}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa -1298 39}\special{pa -1302 -5}\special{pa -1313 -47}\special{pa -1331 -89}%
+\special{pa -1356 -128}\special{pa -1387 -164}\special{pa -1424 -198}\special{pa -1467 -228}%
+\special{pa -1514 -253}\special{pa -1565 -274}\special{pa -1619 -290}\special{pa -1675 -301}%
+\special{pa -1733 -306}\special{pa -1792 -306}\special{pa -1849 -301}\special{pa -1906 -290}%
+\special{pa -1960 -274}\special{pa -2011 -253}\special{pa -2058 -228}\special{pa -2101 -198}%
+\special{pa -2138 -164}\special{pa -2169 -128}\special{pa -2194 -89}\special{pa -2212 -47}%
+\special{pa -2223 -5}\special{pa -2227 39}\special{pa -2223 82}\special{pa -2212 124}%
+\special{pa -2194 166}\special{pa -2169 205}\special{pa -2138 242}\special{pa -2101 275}%
+\special{pa -2058 305}\special{pa -2011 330}\special{pa -1960 351}\special{pa -1906 367}%
+\special{pa -1849 378}\special{pa -1792 383}\special{pa -1733 383}\special{pa -1675 378}%
+\special{pa -1619 367}\special{pa -1565 351}\special{pa -1514 330}\special{pa -1467 305}%
+\special{pa -1424 275}\special{pa -1387 242}\special{pa -1356 205}\special{pa -1331 166}%
+\special{pa -1313 124}\special{pa -1302 82}\special{pa -1298 39}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa -2458 1003}\special{pa -2462 960}\special{pa -2472 917}\special{pa -2489 876}%
+\special{pa -2513 837}\special{pa -2542 801}\special{pa -2578 767}\special{pa -2618 738}%
+\special{pa -2663 712}\special{pa -2711 691}\special{pa -2763 676}\special{pa -2817 665}%
+\special{pa -2872 659}\special{pa -2927 659}\special{pa -2982 665}\special{pa -3036 676}%
+\special{pa -3087 691}\special{pa -3136 712}\special{pa -3180 738}\special{pa -3221 767}%
+\special{pa -3256 801}\special{pa -3286 837}\special{pa -3309 876}\special{pa -3327 917}%
+\special{pa -3337 960}\special{pa -3340 1003}\special{pa -3337 1046}\special{pa -3327 1089}%
+\special{pa -3309 1130}\special{pa -3286 1169}\special{pa -3256 1206}\special{pa -3221 1239}%
+\special{pa -3180 1269}\special{pa -3136 1294}\special{pa -3087 1315}\special{pa -3036 1331}%
+\special{pa -2982 1342}\special{pa -2927 1347}\special{pa -2872 1347}\special{pa -2817 1342}%
+\special{pa -2763 1331}\special{pa -2711 1315}\special{pa -2663 1294}\special{pa -2618 1269}%
+\special{pa -2578 1239}\special{pa -2542 1206}\special{pa -2513 1169}\special{pa -2489 1130}%
+\special{pa -2472 1089}\special{pa -2462 1046}\special{pa -2458 1003}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pn 16}%
+\special{pa -1003 33}\special{pa -1293 33}%
+\special{fp}%
+\special{pn 8}%
+}%
+{%
+\color[rgb]{0,0,0}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa -1231 9}\special{pa -1306 33}\special{pa -1231 57}\special{pa -1231 33}%
+\special{pa -1231 9}\special{sh 1}\special{ip}%
+\special{pn 1}%
+\special{pa -1231 9}\special{pa -1306 33}\special{pa -1231 57}\special{pa -1231 33}%
+\special{pa -1231 9}\special{pa -1306 33}%
+\special{fp}%
+\special{pn 8}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pn 16}%
+\special{pa -1306 33}\special{pa -1017 33}%
+\special{fp}%
+\special{pn 8}%
+}%
+{%
+\color[rgb]{0,0,0}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa -1078 57}\special{pa -1003 33}\special{pa -1078 9}\special{pa -1078 33}%
+\special{pa -1078 57}\special{sh 1}\special{ip}%
+\special{pn 1}%
+\special{pa -1078 57}\special{pa -1003 33}\special{pa -1078 9}\special{pa -1078 33}%
+\special{pa -1078 57}\special{pa -1003 33}%
+\special{fp}%
+\special{pn 8}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pn 16}%
+\special{pa -2238 33}\special{pa -2433 33}%
+\special{fp}%
+\special{pn 8}%
+}%
+{%
+\color[rgb]{0,0,0}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa -2372 9}\special{pa -2447 33}\special{pa -2372 57}\special{pa -2372 33}%
+\special{pa -2372 9}\special{sh 1}\special{ip}%
+\special{pn 1}%
+\special{pa -2372 9}\special{pa -2447 33}\special{pa -2372 57}\special{pa -2372 33}%
+\special{pa -2372 9}\special{pa -2447 33}%
+\special{fp}%
+\special{pn 8}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pn 16}%
+\special{pa -2899 383}\special{pa -2899 645}%
+\special{fp}%
+\special{pn 8}%
+}%
+{%
+\color[rgb]{0,0,0}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa -2924 584}\special{pa -2899 659}\special{pa -2875 584}\special{pa -2899 584}%
+\special{pa -2924 584}\special{sh 1}\special{ip}%
+\special{pn 1}%
+\special{pa -2924 584}\special{pa -2899 659}\special{pa -2875 584}\special{pa -2899 584}%
+\special{pa -2924 584}\special{pa -2899 659}%
+\special{fp}%
+\special{pn 8}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa -1462 1003}\special{pa -1465 966}\special{pa -1475 930}\special{pa -1490 895}%
+\special{pa -1512 861}\special{pa -1539 830}\special{pa -1571 801}\special{pa -1608 776}%
+\special{pa -1649 754}\special{pa -1694 736}\special{pa -1741 722}\special{pa -1790 713}%
+\special{pa -1840 709}\special{pa -1891 709}\special{pa -1941 713}\special{pa -1991 722}%
+\special{pa -2038 736}\special{pa -2082 754}\special{pa -2123 776}\special{pa -2160 801}%
+\special{pa -2192 830}\special{pa -2220 861}\special{pa -2241 895}\special{pa -2257 930}%
+\special{pa -2266 966}\special{pa -2270 1003}\special{pa -2266 1040}\special{pa -2257 1077}%
+\special{pa -2241 1112}\special{pa -2220 1145}\special{pa -2192 1177}\special{pa -2160 1205}%
+\special{pa -2123 1231}\special{pa -2082 1252}\special{pa -2038 1270}\special{pa -1991 1284}%
+\special{pa -1941 1293}\special{pa -1891 1298}\special{pa -1840 1298}\special{pa -1790 1293}%
+\special{pa -1741 1284}\special{pa -1694 1270}\special{pa -1649 1252}\special{pa -1608 1231}%
+\special{pa -1571 1205}\special{pa -1539 1177}\special{pa -1512 1145}\special{pa -1490 1112}%
+\special{pa -1475 1077}\special{pa -1465 1040}\special{pa -1462 1003}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 105 1240}\special{pa 102 1205}\special{pa 92 1171}\special{pa 76 1138}%
+\special{pa 54 1107}\special{pa 26 1078}\special{pa -7 1051}\special{pa -45 1027}%
+\special{pa -87 1007}\special{pa -133 990}\special{pa -182 977}\special{pa -232 969}%
+\special{pa -284 964}\special{pa -336 964}\special{pa -388 969}\special{pa -438 977}%
+\special{pa -487 990}\special{pa -533 1007}\special{pa -575 1027}\special{pa -613 1051}%
+\special{pa -646 1078}\special{pa -674 1107}\special{pa -696 1138}\special{pa -712 1171}%
+\special{pa -722 1205}\special{pa -725 1240}\special{pa -722 1275}\special{pa -712 1309}%
+\special{pa -696 1342}\special{pa -674 1373}\special{pa -646 1403}\special{pa -613 1429}%
+\special{pa -575 1453}\special{pa -533 1474}\special{pa -487 1490}\special{pa -438 1503}%
+\special{pa -388 1512}\special{pa -336 1516}\special{pa -284 1516}\special{pa -232 1512}%
+\special{pa -182 1503}\special{pa -133 1490}\special{pa -87 1474}\special{pa -45 1453}%
+\special{pa -7 1429}\special{pa 26 1403}\special{pa 54 1373}\special{pa 76 1342}%
+\special{pa 92 1309}\special{pa 102 1275}\special{pa 105 1240}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 949 1033}\special{pa 945 996}\special{pa 935 959}\special{pa 918 923}%
+\special{pa 895 889}\special{pa 866 857}\special{pa 831 828}\special{pa 792 802}%
+\special{pa 748 780}\special{pa 701 762}\special{pa 650 748}\special{pa 598 738}%
+\special{pa 544 734}\special{pa 490 734}\special{pa 436 738}\special{pa 383 748}%
+\special{pa 333 762}\special{pa 285 780}\special{pa 241 802}\special{pa 202 828}%
+\special{pa 167 857}\special{pa 138 889}\special{pa 115 923}\special{pa 99 959}%
+\special{pa 88 996}\special{pa 85 1033}\special{pa 88 1071}\special{pa 99 1108}%
+\special{pa 115 1144}\special{pa 138 1178}\special{pa 167 1210}\special{pa 202 1239}%
+\special{pa 241 1265}\special{pa 285 1287}\special{pa 333 1305}\special{pa 383 1319}%
+\special{pa 436 1329}\special{pa 490 1333}\special{pa 544 1333}\special{pa 598 1329}%
+\special{pa 650 1319}\special{pa 701 1305}\special{pa 748 1287}\special{pa 792 1265}%
+\special{pa 831 1239}\special{pa 866 1210}\special{pa 895 1178}\special{pa 918 1144}%
+\special{pa 935 1108}\special{pa 945 1071}\special{pa 949 1033}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa -801 1371}\special{pa -803 1338}\special{pa -811 1306}\special{pa -824 1274}%
+\special{pa -843 1244}\special{pa -868 1216}\special{pa -897 1190}\special{pa -931 1166}%
+\special{pa -968 1146}\special{pa -1009 1129}\special{pa -1053 1115}\special{pa -1099 1105}%
+\special{pa -1145 1100}\special{pa -1193 1098}\special{pa -1240 1100}\special{pa -1286 1107}%
+\special{pa -1331 1117}\special{pa -1373 1131}\special{pa -1412 1149}\special{pa -1447 1170}%
+\special{pa -1478 1194}\special{pa -1504 1221}\special{pa -1525 1250}\special{pa -1541 1280}%
+\special{pa -1551 1312}\special{pa -1555 1344}\special{pa -1554 1377}\special{pa -1546 1409}%
+\special{pa -1532 1440}\special{pa -1513 1470}\special{pa -1489 1499}\special{pa -1459 1525}%
+\special{pa -1426 1548}\special{pa -1388 1569}\special{pa -1347 1586}\special{pa -1303 1600}%
+\special{pa -1258 1609}\special{pa -1211 1615}\special{pa -1164 1617}\special{pa -1116 1614}%
+\special{pa -1070 1608}\special{pa -1026 1597}\special{pa -984 1583}\special{pa -945 1565}%
+\special{pa -909 1544}\special{pa -878 1520}\special{pa -852 1494}\special{pa -831 1465}%
+\special{pa -815 1435}\special{pa -805 1403}\special{pa -801 1371}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa -607 -663}\special{pa -610 -697}\special{pa -621 -731}\special{pa -637 -763}%
+\special{pa -659 -793}\special{pa -687 -822}\special{pa -720 -847}\special{pa -758 -870}%
+\special{pa -799 -889}\special{pa -844 -905}\special{pa -892 -917}\special{pa -942 -924}%
+\special{pa -992 -928}\special{pa -1043 -927}\special{pa -1094 -922}\special{pa -1143 -912}%
+\special{pa -1190 -899}\special{pa -1235 -882}\special{pa -1276 -861}\special{pa -1312 -837}%
+\special{pa -1344 -810}\special{pa -1371 -780}\special{pa -1392 -749}\special{pa -1407 -716}%
+\special{pa -1416 -683}\special{pa -1419 -648}\special{pa -1415 -614}\special{pa -1405 -581}%
+\special{pa -1389 -549}\special{pa -1366 -518}\special{pa -1339 -490}\special{pa -1306 -464}%
+\special{pa -1268 -442}\special{pa -1226 -422}\special{pa -1181 -407}\special{pa -1134 -395}%
+\special{pa -1084 -387}\special{pa -1033 -384}\special{pa -982 -385}\special{pa -932 -390}%
+\special{pa -883 -400}\special{pa -835 -413}\special{pa -791 -430}\special{pa -750 -451}%
+\special{pa -713 -475}\special{pa -681 -502}\special{pa -654 -531}\special{pa -633 -563}%
+\special{pa -618 -595}\special{pa -609 -629}\special{pa -607 -663}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pn 16}%
+\special{pa -871 325}\special{pa -1647 743}%
+\special{fp}%
+\special{pn 8}%
+}%
+{%
+\color[rgb]{0,0,0}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa -1605 693}\special{pa -1659 750}\special{pa -1582 736}\special{pa -1593 714}%
+\special{pa -1605 693}\special{sh 1}\special{ip}%
+\special{pn 1}%
+\special{pa -1605 693}\special{pa -1659 750}\special{pa -1582 736}\special{pa -1593 714}%
+\special{pa -1605 693}\special{pa -1659 750}%
+\special{fp}%
+\special{pn 8}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pn 16}%
+\special{pa -1659 750}\special{pa -883 332}%
+\special{fp}%
+\special{pn 8}%
+}%
+{%
+\color[rgb]{0,0,0}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa -925 382}\special{pa -871 325}\special{pa -948 339}\special{pa -937 361}%
+\special{pa -925 382}\special{sh 1}\special{ip}%
+\special{pn 1}%
+\special{pa -925 382}\special{pa -871 325}\special{pa -948 339}\special{pa -937 361}%
+\special{pa -925 382}\special{pa -871 325}%
+\special{fp}%
+\special{pn 8}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pn 16}%
+\special{pa -1119 1102}\special{pa -647 436}%
+\special{fp}%
+\special{pn 8}%
+}%
+{%
+\color[rgb]{0,0,0}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa -663 500}\special{pa -639 424}\special{pa -702 471}\special{pa -683 486}%
+\special{pa -663 500}\special{sh 1}\special{ip}%
+\special{pn 1}%
+\special{pa -663 500}\special{pa -639 424}\special{pa -702 471}\special{pa -683 486}%
+\special{pa -663 500}\special{pa -639 424}%
+\special{fp}%
+\special{pn 8}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pn 16}%
+\special{pa -639 424}\special{pa -1111 1091}%
+\special{fp}%
+\special{pn 8}%
+}%
+{%
+\color[rgb]{0,0,0}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa -1096 1027}\special{pa -1119 1102}\special{pa -1056 1055}\special{pa -1076 1041}%
+\special{pa -1096 1027}\special{sh 1}\special{ip}%
+\special{pn 1}%
+\special{pa -1096 1027}\special{pa -1119 1102}\special{pa -1056 1055}\special{pa -1076 1041}%
+\special{pa -1096 1027}\special{pa -1119 1102}%
+\special{fp}%
+\special{pn 8}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pn 16}%
+\special{pa -344 965}\special{pa -315 427}%
+\special{fp}%
+\special{pn 8}%
+}%
+{%
+\color[rgb]{0,0,0}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa -294 489}\special{pa -314 413}\special{pa -343 487}\special{pa -318 488}%
+\special{pa -294 489}\special{sh 1}\special{ip}%
+\special{pn 1}%
+\special{pa -294 489}\special{pa -314 413}\special{pa -343 487}\special{pa -318 488}%
+\special{pa -294 489}\special{pa -314 413}%
+\special{fp}%
+\special{pn 8}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pn 16}%
+\special{pa -314 413}\special{pa -344 951}%
+\special{fp}%
+\special{pn 8}%
+}%
+{%
+\color[rgb]{0,0,0}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa -365 888}\special{pa -344 965}\special{pa -316 891}\special{pa -340 890}%
+\special{pa -365 888}\special{sh 1}\special{ip}%
+\special{pn 1}%
+\special{pa -365 888}\special{pa -344 965}\special{pa -316 891}\special{pa -340 890}%
+\special{pa -365 888}\special{pa -344 965}%
+\special{fp}%
+\special{pn 8}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pn 16}%
+\special{pa 344 758}\special{pa -73 291}%
+\special{fp}%
+\special{pn 8}%
+}%
+{%
+\color[rgb]{0,0,0}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa -15 321}\special{pa -83 281}\special{pa -51 353}\special{pa -33 337}\special{pa -15 321}%
+\special{sh 1}\special{ip}%
+\special{pn 1}%
+\special{pa -15 321}\special{pa -83 281}\special{pa -51 353}\special{pa -33 337}%
+\special{pa -15 321}\special{pa -83 281}%
+\special{fp}%
+\special{pn 8}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pn 16}%
+\special{pa -83 281}\special{pa 335 748}%
+\special{fp}%
+\special{pn 8}%
+}%
+{%
+\color[rgb]{0,0,0}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 276 718}\special{pa 344 758}\special{pa 313 686}\special{pa 295 702}\special{pa 276 718}%
+\special{sh 1}\special{ip}%
+\special{pn 1}%
+\special{pa 276 718}\special{pa 344 758}\special{pa 313 686}\special{pa 295 702}%
+\special{pa 276 718}\special{pa 344 758}%
+\special{fp}%
+\special{pn 8}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pn 16}%
+\special{pa -761 -287}\special{pa -801 -411}%
+\special{fp}%
+\special{pn 8}%
+}%
+{%
+\color[rgb]{0,0,0}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa -759 -361}\special{pa -805 -424}\special{pa -805 -346}\special{pa -782 -353}%
+\special{pa -759 -361}\special{sh 1}\special{ip}%
+\special{pn 1}%
+\special{pa -759 -361}\special{pa -805 -424}\special{pa -805 -346}\special{pa -782 -353}%
+\special{pa -759 -361}\special{pa -805 -424}%
+\special{fp}%
+\special{pn 8}%
+}%
+\LARGE%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{KeTCindy System}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{KeTCindy System}\settodepth{\Depth}{KeTCindy System}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-19.0000000,7.0000000){\hspace*{\Width}\raisebox{\Height}{KeTCindy System}}%
+%
+}%
+\Large%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{Cinderella}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{Cinderella}\settodepth{\Depth}{Cinderella}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(5.1428571,9.0000000){\hspace*{\Width}\raisebox{\Height}{Cinderella}}%
+%
+}%
+\normalsize%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{CindyScript}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{CindyScript}\settodepth{\Depth}{CindyScript}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.2400000,4.1200000){\hspace*{\Width}\raisebox{\Height}{CindyScript}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{CindyLab}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{CindyLab}\settodepth{\Depth}{CindyLab}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(11.0800000,4.2000000){\hspace*{\Width}\raisebox{\Height}{CindyLab}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{Geometry}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{Geometry}\settodepth{\Depth}{Geometry}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(8.3200000,-2.1200000){\hspace*{\Width}\raisebox{\Height}{Geometry}}%
+%
+}%
+\large%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{KeTCindy}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{KeTCindy}\settodepth{\Depth}{KeTCindy}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-3.5400000,-0.2800000){\hspace*{\Width}\raisebox{\Height}{KeTCindy}}%
+%
+}%
+\normalsize%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{TeX}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{TeX}\settodepth{\Depth}{TeX}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-21.0400000,-0.2800000){\hspace*{\Width}\raisebox{\Height}{TeX}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{R / C}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{R / C}\settodepth{\Depth}{R / C}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-12.7900000,-0.2800000){\hspace*{\Width}\raisebox{\Height}{R / C}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{KeTpic}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{KeTpic}\settodepth{\Depth}{KeTpic}\setlength{\Height}{\Depth}%
+\put(-17.7600000,2.1885714){\hspace*{\Width}\raisebox{\Height}{KeTpic}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{Scilab}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{Scilab}\settodepth{\Depth}{Scilab}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-13.5400000,-7.2800000){\hspace*{\Width}\raisebox{\Height}{Scilab}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{Maxima}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{Maxima}\settodepth{\Depth}{Maxima}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-2.2500000,-9.0000000){\hspace*{\Width}\raisebox{\Height}{Maxima}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{Risa/Asir}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{Risa/Asir}\settodepth{\Depth}{Risa/Asir}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(3.7500000,-7.5000000){\hspace*{\Width}\raisebox{\Height}{Risa/Asir}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{FriCAS}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{FriCAS}\settodepth{\Depth}{FriCAS}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-9.8971429,-9.7800000){\hspace*{\Width}\raisebox{\Height}{FriCAS}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{MeshLab}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{MeshLab}\settodepth{\Depth}{MeshLab}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-9.3971429,4.7200000){\hspace*{\Width}\raisebox{\Height}{MeshLab}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{PDFReader}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{PDFReader}\settodepth{\Depth}{PDFReader}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-21.0400000,-7.2800000){\hspace*{\Width}\raisebox{\Height}{PDFReader}}%
+%
+}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/conceptE.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/conceptE.tex
new file mode 100644
index 0000000000..234a51cd19
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/conceptE.tex
@@ -0,0 +1,644 @@
+%%% /Users/Hannya/Desktop/KeTCindy/KeTCindyTools/fig/concept.tex
+%%% Generator=KeTCindy概念図.cdy
+{\unitlength=3.5mm%
+\begin{picture}%
+(38.44,22.12)(-24.68,-12.08)%
+\special{pn 8}%
+%
+\color[rgb]{0,1,0}%
+\special{pa 1041 -482}\special{pa 1038 -535}\special{pa 1028 -587}\special{pa 1011 -637}%
+\special{pa 989 -685}\special{pa 961 -730}\special{pa 927 -770}\special{pa 888 -807}%
+\special{pa 846 -838}\special{pa 799 -863}\special{pa 750 -882}\special{pa 699 -896}%
+\special{pa 647 -902}\special{pa 594 -902}\special{pa 541 -896}\special{pa 490 -882}%
+\special{pa 441 -863}\special{pa 395 -838}\special{pa 352 -807}\special{pa 313 -770}%
+\special{pa 280 -730}\special{pa 251 -685}\special{pa 229 -637}\special{pa 213 -587}%
+\special{pa 203 -535}\special{pa 199 -482}\special{pa 203 -430}\special{pa 213 -378}%
+\special{pa 229 -327}\special{pa 251 -280}\special{pa 280 -235}\special{pa 313 -194}%
+\special{pa 352 -158}\special{pa 395 -127}\special{pa 441 -102}\special{pa 490 -82}%
+\special{pa 541 -69}\special{pa 594 -62}\special{pa 647 -62}\special{pa 699 -69}\special{pa 750 -82}%
+\special{pa 799 -102}\special{pa 846 -127}\special{pa 888 -158}\special{pa 927 -194}%
+\special{pa 961 -235}\special{pa 989 -280}\special{pa 1011 -327}\special{pa 1028 -378}%
+\special{pa 1038 -430}\special{pa 1041 -482}\special{sh 1}\special{ip}%
+\color[rgb]{0,0,0}%
+\color[rgb]{1,0,0}%
+\special{pa 1766 -482}\special{pa 1764 -522}\special{pa 1756 -562}\special{pa 1744 -600}%
+\special{pa 1727 -636}\special{pa 1705 -670}\special{pa 1680 -701}\special{pa 1651 -729}%
+\special{pa 1618 -752}\special{pa 1583 -771}\special{pa 1546 -786}\special{pa 1507 -796}%
+\special{pa 1467 -801}\special{pa 1427 -801}\special{pa 1387 -796}\special{pa 1348 -786}%
+\special{pa 1311 -771}\special{pa 1276 -752}\special{pa 1243 -729}\special{pa 1214 -701}%
+\special{pa 1188 -670}\special{pa 1167 -636}\special{pa 1150 -600}\special{pa 1137 -562}%
+\special{pa 1130 -522}\special{pa 1127 -482}\special{pa 1130 -442}\special{pa 1137 -403}%
+\special{pa 1150 -365}\special{pa 1167 -328}\special{pa 1188 -294}\special{pa 1214 -263}%
+\special{pa 1243 -236}\special{pa 1276 -212}\special{pa 1311 -193}\special{pa 1348 -178}%
+\special{pa 1387 -168}\special{pa 1427 -163}\special{pa 1467 -163}\special{pa 1507 -168}%
+\special{pa 1546 -178}\special{pa 1583 -193}\special{pa 1618 -212}\special{pa 1651 -236}%
+\special{pa 1680 -263}\special{pa 1705 -294}\special{pa 1727 -328}\special{pa 1744 -365}%
+\special{pa 1756 -403}\special{pa 1764 -442}\special{pa 1766 -482}\special{sh 1}\special{ip}%
+\color[rgb]{0,0,0}%
+\color[cmyk]{0,0,0.5,0}%
+\special{pa 1439 248}\special{pa 1436 207}\special{pa 1429 167}\special{pa 1416 128}%
+\special{pa 1399 91}\special{pa 1377 57}\special{pa 1351 25}\special{pa 1321 -3}\special{pa 1288 -27}%
+\special{pa 1252 -47}\special{pa 1214 -62}\special{pa 1174 -72}\special{pa 1134 -77}%
+\special{pa 1093 -77}\special{pa 1052 -72}\special{pa 1013 -62}\special{pa 975 -47}%
+\special{pa 939 -27}\special{pa 906 -3}\special{pa 876 25}\special{pa 850 57}\special{pa 828 91}%
+\special{pa 811 128}\special{pa 798 167}\special{pa 790 207}\special{pa 788 248}\special{pa 790 289}%
+\special{pa 798 329}\special{pa 811 368}\special{pa 828 405}\special{pa 850 439}\special{pa 876 471}%
+\special{pa 906 499}\special{pa 939 523}\special{pa 975 543}\special{pa 1013 558}%
+\special{pa 1052 568}\special{pa 1093 573}\special{pa 1134 573}\special{pa 1174 568}%
+\special{pa 1214 558}\special{pa 1252 543}\special{pa 1288 523}\special{pa 1321 499}%
+\special{pa 1351 471}\special{pa 1377 439}\special{pa 1399 405}\special{pa 1416 368}%
+\special{pa 1429 329}\special{pa 1436 289}\special{pa 1439 248}\special{sh 1}\special{ip}%
+\color[rgb]{0,0,0}%
+\color[cmyk]{0.2,0,0,0}%
+\special{pa 33 0}\special{pa 29 -48}\special{pa 17 -95}\special{pa -3 -141}\special{pa -31 -185}%
+\special{pa -65 -225}\special{pa -107 -262}\special{pa -154 -295}\special{pa -206 -324}%
+\special{pa -263 -347}\special{pa -323 -365}\special{pa -386 -377}\special{pa -450 -383}%
+\special{pa -515 -383}\special{pa -579 -377}\special{pa -642 -365}\special{pa -702 -347}%
+\special{pa -758 -324}\special{pa -811 -295}\special{pa -858 -262}\special{pa -899 -225}%
+\special{pa -934 -185}\special{pa -961 -141}\special{pa -981 -95}\special{pa -994 -48}%
+\special{pa -998 0}\special{pa -994 48}\special{pa -981 95}\special{pa -961 141}\special{pa -934 185}%
+\special{pa -899 225}\special{pa -858 262}\special{pa -811 295}\special{pa -758 324}%
+\special{pa -702 347}\special{pa -642 365}\special{pa -579 377}\special{pa -515 383}%
+\special{pa -450 383}\special{pa -386 377}\special{pa -323 365}\special{pa -263 347}%
+\special{pa -206 324}\special{pa -154 295}\special{pa -107 262}\special{pa -65 225}%
+\special{pa -31 185}\special{pa -3 141}\special{pa 17 95}\special{pa 29 48}\special{pa 33 0}%
+\special{sh 1}\special{ip}%
+\color[rgb]{0,0,0}%
+\color[cmyk]{0,0.2,0,0}%
+\special{pa -2453 0}\special{pa -2456 -43}\special{pa -2466 -86}\special{pa -2484 -127}%
+\special{pa -2507 -166}\special{pa -2537 -202}\special{pa -2572 -236}\special{pa -2612 -265}%
+\special{pa -2657 -291}\special{pa -2706 -312}\special{pa -2757 -328}\special{pa -2811 -338}%
+\special{pa -2866 -344}\special{pa -2921 -344}\special{pa -2976 -338}\special{pa -3030 -328}%
+\special{pa -3082 -312}\special{pa -3130 -291}\special{pa -3175 -265}\special{pa -3215 -236}%
+\special{pa -3251 -202}\special{pa -3280 -166}\special{pa -3304 -127}\special{pa -3321 -86}%
+\special{pa -3331 -43}\special{pa -3335 0}\special{pa -3331 43}\special{pa -3321 86}%
+\special{pa -3304 127}\special{pa -3280 166}\special{pa -3251 202}\special{pa -3215 236}%
+\special{pa -3175 265}\special{pa -3130 291}\special{pa -3082 312}\special{pa -3030 328}%
+\special{pa -2976 338}\special{pa -2921 344}\special{pa -2866 344}\special{pa -2811 338}%
+\special{pa -2757 328}\special{pa -2706 312}\special{pa -2657 291}\special{pa -2612 265}%
+\special{pa -2572 236}\special{pa -2537 202}\special{pa -2507 166}\special{pa -2484 127}%
+\special{pa -2466 86}\special{pa -2456 43}\special{pa -2453 0}\special{sh 1}\special{ip}%
+\color[rgb]{0,0,0}%
+\color[cmyk]{0.2,0.2,0,0}%
+\special{pa -1293 0}\special{pa -1296 -43}\special{pa -1307 -86}\special{pa -1325 -127}%
+\special{pa -1350 -166}\special{pa -1381 -203}\special{pa -1419 -236}\special{pa -1461 -266}%
+\special{pa -1508 -292}\special{pa -1559 -313}\special{pa -1613 -329}\special{pa -1670 -339}%
+\special{pa -1728 -345}\special{pa -1786 -345}\special{pa -1844 -339}\special{pa -1900 -329}%
+\special{pa -1955 -313}\special{pa -2006 -292}\special{pa -2053 -266}\special{pa -2095 -236}%
+\special{pa -2132 -203}\special{pa -2164 -166}\special{pa -2188 -127}\special{pa -2206 -86}%
+\special{pa -2217 -43}\special{pa -2221 0}\special{pa -2217 43}\special{pa -2206 86}%
+\special{pa -2188 127}\special{pa -2164 166}\special{pa -2132 203}\special{pa -2095 236}%
+\special{pa -2053 266}\special{pa -2006 292}\special{pa -1955 313}\special{pa -1900 329}%
+\special{pa -1844 339}\special{pa -1786 345}\special{pa -1728 345}\special{pa -1670 339}%
+\special{pa -1613 329}\special{pa -1559 313}\special{pa -1508 292}\special{pa -1461 266}%
+\special{pa -1419 236}\special{pa -1381 203}\special{pa -1350 166}\special{pa -1325 127}%
+\special{pa -1307 86}\special{pa -1296 43}\special{pa -1293 0}\special{sh 1}\special{ip}%
+\color[rgb]{0,0,0}%
+\color[cmyk]{0.2,0,0.2,0}%
+\special{pa -2453 965}\special{pa -2456 921}\special{pa -2466 879}\special{pa -2484 838}%
+\special{pa -2507 799}\special{pa -2537 762}\special{pa -2572 729}\special{pa -2612 699}%
+\special{pa -2657 674}\special{pa -2706 653}\special{pa -2757 637}\special{pa -2811 626}%
+\special{pa -2866 621}\special{pa -2921 621}\special{pa -2976 626}\special{pa -3030 637}%
+\special{pa -3082 653}\special{pa -3130 674}\special{pa -3175 699}\special{pa -3215 729}%
+\special{pa -3251 762}\special{pa -3280 799}\special{pa -3304 838}\special{pa -3321 879}%
+\special{pa -3331 921}\special{pa -3335 965}\special{pa -3331 1008}\special{pa -3321 1050}%
+\special{pa -3304 1091}\special{pa -3280 1131}\special{pa -3251 1167}\special{pa -3215 1200}%
+\special{pa -3175 1230}\special{pa -3130 1255}\special{pa -3082 1276}\special{pa -3030 1292}%
+\special{pa -2976 1303}\special{pa -2921 1308}\special{pa -2866 1308}\special{pa -2811 1303}%
+\special{pa -2757 1292}\special{pa -2706 1276}\special{pa -2657 1255}\special{pa -2612 1230}%
+\special{pa -2572 1200}\special{pa -2537 1167}\special{pa -2507 1131}\special{pa -2484 1091}%
+\special{pa -2466 1050}\special{pa -2456 1008}\special{pa -2453 965}\special{sh 1}\special{ip}%
+\color[rgb]{0,0,0}%
+\color[cmyk]{0,0.1,0.3,0}%
+\special{pa -1456 965}\special{pa -1460 928}\special{pa -1469 891}\special{pa -1485 856}%
+\special{pa -1506 822}\special{pa -1534 791}\special{pa -1566 763}\special{pa -1603 737}%
+\special{pa -1644 715}\special{pa -1688 698}\special{pa -1735 684}\special{pa -1785 675}%
+\special{pa -1835 670}\special{pa -1886 670}\special{pa -1936 675}\special{pa -1985 684}%
+\special{pa -2032 698}\special{pa -2077 715}\special{pa -2118 737}\special{pa -2155 763}%
+\special{pa -2187 791}\special{pa -2214 822}\special{pa -2236 856}\special{pa -2251 891}%
+\special{pa -2261 928}\special{pa -2264 965}\special{pa -2261 1002}\special{pa -2251 1038}%
+\special{pa -2236 1073}\special{pa -2214 1107}\special{pa -2187 1138}\special{pa -2155 1167}%
+\special{pa -2118 1192}\special{pa -2077 1214}\special{pa -2032 1232}\special{pa -1985 1245}%
+\special{pa -1936 1254}\special{pa -1886 1259}\special{pa -1835 1259}\special{pa -1785 1254}%
+\special{pa -1735 1245}\special{pa -1688 1232}\special{pa -1644 1214}\special{pa -1603 1192}%
+\special{pa -1566 1167}\special{pa -1534 1138}\special{pa -1506 1107}\special{pa -1485 1073}%
+\special{pa -1469 1038}\special{pa -1460 1002}\special{pa -1456 965}\special{sh 1}\special{ip}%
+\color[rgb]{0,0,0}%
+\color[cmyk]{0,0.1,0.3,0}%
+\special{pa 187 1171}\special{pa 184 1134}\special{pa 174 1098}\special{pa 157 1063}%
+\special{pa 134 1029}\special{pa 105 998}\special{pa 71 969}\special{pa 32 944}\special{pa -12 922}%
+\special{pa -59 904}\special{pa -109 890}\special{pa -161 881}\special{pa -214 876}%
+\special{pa -268 876}\special{pa -321 881}\special{pa -373 890}\special{pa -423 904}%
+\special{pa -471 922}\special{pa -514 944}\special{pa -553 969}\special{pa -588 998}%
+\special{pa -616 1029}\special{pa -639 1063}\special{pa -656 1098}\special{pa -666 1134}%
+\special{pa -669 1171}\special{pa -666 1208}\special{pa -656 1245}\special{pa -639 1280}%
+\special{pa -616 1314}\special{pa -588 1345}\special{pa -553 1373}\special{pa -514 1399}%
+\special{pa -471 1421}\special{pa -423 1439}\special{pa -373 1452}\special{pa -321 1461}%
+\special{pa -268 1466}\special{pa -214 1466}\special{pa -161 1461}\special{pa -109 1452}%
+\special{pa -59 1439}\special{pa -12 1421}\special{pa 32 1399}\special{pa 71 1373}%
+\special{pa 105 1345}\special{pa 134 1314}\special{pa 157 1280}\special{pa 174 1245}%
+\special{pa 184 1208}\special{pa 187 1171}\special{sh 1}\special{ip}%
+\color[rgb]{0,0,0}%
+\color[cmyk]{0,0.1,0.3,0}%
+\special{pa 939 893}\special{pa 936 861}\special{pa 927 830}\special{pa 912 800}\special{pa 891 772}%
+\special{pa 864 745}\special{pa 833 721}\special{pa 797 699}\special{pa 757 681}\special{pa 713 666}%
+\special{pa 667 654}\special{pa 619 646}\special{pa 570 642}\special{pa 521 642}\special{pa 472 646}%
+\special{pa 424 654}\special{pa 378 666}\special{pa 335 681}\special{pa 295 699}\special{pa 259 721}%
+\special{pa 227 745}\special{pa 201 772}\special{pa 180 800}\special{pa 164 830}\special{pa 155 861}%
+\special{pa 152 893}\special{pa 155 924}\special{pa 164 955}\special{pa 180 985}\special{pa 201 1014}%
+\special{pa 227 1040}\special{pa 259 1065}\special{pa 295 1086}\special{pa 335 1105}%
+\special{pa 378 1120}\special{pa 424 1132}\special{pa 472 1140}\special{pa 521 1143}%
+\special{pa 570 1143}\special{pa 619 1140}\special{pa 667 1132}\special{pa 713 1120}%
+\special{pa 757 1105}\special{pa 797 1086}\special{pa 833 1065}\special{pa 864 1040}%
+\special{pa 891 1014}\special{pa 912 985}\special{pa 927 955}\special{pa 936 924}%
+\special{pa 939 893}\special{sh 1}\special{ip}%
+\color[rgb]{0,0,0}%
+\color[cmyk]{0,0.1,0.3,0}%
+\special{pa -716 1309}\special{pa -719 1273}\special{pa -729 1238}\special{pa -745 1204}%
+\special{pa -768 1172}\special{pa -796 1142}\special{pa -830 1114}\special{pa -868 1090}%
+\special{pa -911 1069}\special{pa -958 1051}\special{pa -1007 1038}\special{pa -1058 1029}%
+\special{pa -1110 1025}\special{pa -1163 1025}\special{pa -1216 1029}\special{pa -1267 1038}%
+\special{pa -1316 1051}\special{pa -1362 1069}\special{pa -1405 1090}\special{pa -1444 1114}%
+\special{pa -1477 1142}\special{pa -1506 1172}\special{pa -1528 1204}\special{pa -1545 1238}%
+\special{pa -1555 1273}\special{pa -1558 1309}\special{pa -1555 1345}\special{pa -1545 1380}%
+\special{pa -1528 1414}\special{pa -1506 1446}\special{pa -1477 1476}\special{pa -1444 1504}%
+\special{pa -1405 1529}\special{pa -1362 1550}\special{pa -1316 1567}\special{pa -1267 1580}%
+\special{pa -1216 1589}\special{pa -1163 1593}\special{pa -1110 1593}\special{pa -1058 1589}%
+\special{pa -1007 1580}\special{pa -958 1567}\special{pa -911 1550}\special{pa -868 1529}%
+\special{pa -830 1504}\special{pa -796 1476}\special{pa -768 1446}\special{pa -745 1414}%
+\special{pa -729 1380}\special{pa -719 1345}\special{pa -716 1309}\special{sh 1}\special{ip}%
+\color[rgb]{0,0,0}%
+\color[cmyk]{0,0.1,0.3,0}%
+\special{pa -601 -689}\special{pa -604 -723}\special{pa -614 -757}\special{pa -629 -789}%
+\special{pa -651 -820}\special{pa -679 -849}\special{pa -711 -875}\special{pa -748 -899}%
+\special{pa -790 -919}\special{pa -834 -935}\special{pa -882 -948}\special{pa -931 -956}%
+\special{pa -982 -960}\special{pa -1033 -960}\special{pa -1083 -956}\special{pa -1133 -948}%
+\special{pa -1180 -935}\special{pa -1225 -919}\special{pa -1266 -899}\special{pa -1303 -875}%
+\special{pa -1336 -849}\special{pa -1363 -820}\special{pa -1385 -789}\special{pa -1401 -757}%
+\special{pa -1410 -723}\special{pa -1414 -689}\special{pa -1410 -655}\special{pa -1401 -621}%
+\special{pa -1385 -589}\special{pa -1363 -558}\special{pa -1336 -529}\special{pa -1303 -503}%
+\special{pa -1266 -479}\special{pa -1225 -459}\special{pa -1180 -443}\special{pa -1133 -430}%
+\special{pa -1083 -422}\special{pa -1033 -418}\special{pa -982 -418}\special{pa -931 -422}%
+\special{pa -882 -430}\special{pa -834 -443}\special{pa -790 -459}\special{pa -748 -479}%
+\special{pa -711 -503}\special{pa -679 -529}\special{pa -651 -558}\special{pa -629 -589}%
+\special{pa -614 -621}\special{pa -604 -655}\special{pa -601 -689}\special{sh 1}\special{ip}%
+\color[rgb]{0,0,0}%
+\special{pa 1841 -270}\special{pa 1841 -309}\special{fp}\special{pa 1841 -348}\special{pa 1841 -387}\special{fp}%
+\special{pa 1841 -427}\special{pa 1841 -466}\special{fp}\special{pa 1841 -505}\special{pa 1841 -544}\special{fp}%
+\special{pa 1841 -583}\special{pa 1841 -622}\special{fp}\special{pa 1841 -661}\special{pa 1841 -701}\special{fp}%
+\special{pa 1841 -740}\special{pa 1841 -779}\special{fp}\special{pa 1841 -818}\special{pa 1841 -857}\special{fp}%
+\special{pa 1841 -896}\special{pa 1841 -935}\special{fp}\special{pa 1841 -974}\special{pa 1841 -1014}\special{fp}%
+\special{pa 1841 -1053}\special{pa 1841 -1092}\special{fp}\special{pa 1835 -1130}\special{pa 1833 -1133}\special{pa 1830 -1136}\special{pa 1826 -1138}\special{pa 1822 -1140}\special{pa 1818 -1141}\special{pa 1813 -1141}\special{pa 1800 -1141}\special{fp}%
+\special{pa 1761 -1141}\special{pa 1722 -1141}\special{fp}\special{pa 1682 -1141}\special{pa 1643 -1141}\special{fp}%
+\special{pa 1604 -1141}\special{pa 1565 -1141}\special{fp}\special{pa 1526 -1141}\special{pa 1487 -1141}\special{fp}%
+\special{pa 1448 -1141}\special{pa 1409 -1141}\special{fp}\special{pa 1369 -1141}\special{pa 1330 -1141}\special{fp}%
+\special{pa 1291 -1141}\special{pa 1252 -1141}\special{fp}\special{pa 1213 -1141}\special{pa 1174 -1141}\special{fp}%
+\special{pa 1135 -1141}\special{pa 1095 -1141}\special{fp}\special{pa 1056 -1141}\special{pa 1017 -1141}\special{fp}%
+\special{pa 978 -1141}\special{pa 939 -1141}\special{fp}\special{pa 900 -1141}\special{pa 861 -1141}\special{fp}%
+\special{pa 822 -1141}\special{pa 782 -1141}\special{fp}\special{pa 743 -1141}\special{pa 704 -1141}\special{fp}%
+\special{pa 665 -1141}\special{pa 626 -1141}\special{fp}\special{pa 587 -1141}\special{pa 548 -1141}\special{fp}%
+\special{pa 508 -1141}\special{pa 469 -1141}\special{fp}\special{pa 430 -1141}\special{pa 391 -1141}\special{fp}%
+\special{pa 352 -1141}\special{pa 313 -1141}\special{fp}\special{pa 274 -1141}\special{pa 235 -1141}\special{fp}%
+\special{pa 195 -1141}\special{pa 182 -1141}\special{pa 178 -1141}\special{pa 173 -1140}\special{pa 169 -1138}\special{pa 166 -1136}\special{pa 162 -1133}\special{pa 160 -1130}\special{fp}%
+\special{pa 154 -1092}\special{pa 154 -1053}\special{fp}\special{pa 154 -1014}\special{pa 154 -974}\special{fp}%
+\special{pa 154 -935}\special{pa 154 -896}\special{fp}\special{pa 154 -857}\special{pa 154 -818}\special{fp}%
+\special{pa 154 -779}\special{pa 154 -740}\special{fp}\special{pa 154 -701}\special{pa 154 -661}\special{fp}%
+\special{pa 154 -622}\special{pa 154 -583}\special{fp}\special{pa 154 -544}\special{pa 154 -505}\special{fp}%
+\special{pa 154 -466}\special{pa 154 -427}\special{fp}\special{pa 154 -387}\special{pa 154 -348}\special{fp}%
+\special{pa 154 -309}\special{pa 154 -270}\special{pa 154 -270}\special{fp}\special{pa 154 -231}\special{pa 154 -192}\special{fp}%
+\special{pa 154 -153}\special{pa 154 -114}\special{fp}\special{pa 154 -74}\special{pa 154 -35}\special{fp}%
+\special{pa 154 4}\special{pa 154 43}\special{fp}\special{pa 154 82}\special{pa 154 121}\special{fp}%
+\special{pa 154 160}\special{pa 154 200}\special{fp}\special{pa 154 239}\special{pa 154 278}\special{fp}%
+\special{pa 154 317}\special{pa 154 356}\special{fp}\special{pa 154 395}\special{pa 154 434}\special{fp}%
+\special{pa 154 473}\special{pa 154 513}\special{fp}\special{pa 154 552}\special{pa 154 573}\special{pa 155 578}\special{pa 156 582}\special{pa 157 586}\special{pa 160 589}\special{pa 160 590}\special{fp}%
+\special{pa 195 601}\special{pa 235 601}\special{fp}\special{pa 274 601}\special{pa 313 601}\special{fp}%
+\special{pa 352 601}\special{pa 391 601}\special{fp}\special{pa 430 601}\special{pa 469 601}\special{fp}%
+\special{pa 508 601}\special{pa 548 601}\special{fp}\special{pa 587 601}\special{pa 626 601}\special{fp}%
+\special{pa 665 601}\special{pa 704 601}\special{fp}\special{pa 743 601}\special{pa 782 601}\special{fp}%
+\special{pa 822 601}\special{pa 861 601}\special{fp}\special{pa 900 601}\special{pa 939 601}\special{fp}%
+\special{pa 978 601}\special{pa 998 601}\special{pa 1017 601}\special{fp}\special{pa 1056 601}\special{pa 1095 601}\special{fp}%
+\special{pa 1135 601}\special{pa 1174 601}\special{fp}\special{pa 1213 601}\special{pa 1252 601}\special{fp}%
+\special{pa 1291 601}\special{pa 1330 601}\special{fp}\special{pa 1369 601}\special{pa 1409 601}\special{fp}%
+\special{pa 1448 601}\special{pa 1487 601}\special{fp}\special{pa 1526 601}\special{pa 1565 601}\special{fp}%
+\special{pa 1604 601}\special{pa 1643 601}\special{fp}\special{pa 1682 601}\special{pa 1722 601}\special{fp}%
+\special{pa 1761 601}\special{pa 1800 601}\special{fp}\special{pa 1835 590}\special{pa 1836 589}\special{pa 1838 586}\special{pa 1840 582}\special{pa 1841 578}\special{pa 1841 573}\special{pa 1841 552}\special{fp}%
+\special{pa 1841 513}\special{pa 1841 473}\special{fp}\special{pa 1841 434}\special{pa 1841 395}\special{fp}%
+\special{pa 1841 356}\special{pa 1841 317}\special{fp}\special{pa 1841 278}\special{pa 1841 239}\special{fp}%
+\special{pa 1841 200}\special{pa 1841 160}\special{fp}\special{pa 1841 121}\special{pa 1841 82}\special{fp}%
+\special{pa 1841 43}\special{pa 1841 4}\special{fp}\special{pa 1841 -35}\special{pa 1841 -74}\special{fp}%
+\special{pa 1841 -114}\special{pa 1841 -153}\special{fp}\special{pa 1841 -192}\special{pa 1841 -231}\special{fp}%
+%
+%
+\special{pa 1041 -482}\special{pa 1038 -535}\special{pa 1028 -587}\special{pa 1011 -637}%
+\special{pa 989 -685}\special{pa 961 -730}\special{pa 927 -770}\special{pa 888 -807}%
+\special{pa 846 -838}\special{pa 799 -863}\special{pa 750 -882}\special{pa 699 -896}%
+\special{pa 647 -902}\special{pa 594 -902}\special{pa 541 -896}\special{pa 490 -882}%
+\special{pa 441 -863}\special{pa 395 -838}\special{pa 352 -807}\special{pa 313 -770}%
+\special{pa 280 -730}\special{pa 251 -685}\special{pa 229 -637}\special{pa 213 -587}%
+\special{pa 203 -535}\special{pa 199 -482}\special{pa 203 -430}\special{pa 213 -378}%
+\special{pa 229 -327}\special{pa 251 -280}\special{pa 280 -235}\special{pa 313 -194}%
+\special{pa 352 -158}\special{pa 395 -127}\special{pa 441 -102}\special{pa 490 -82}%
+\special{pa 541 -69}\special{pa 594 -62}\special{pa 647 -62}\special{pa 699 -69}%
+\special{pa 750 -82}\special{pa 799 -102}\special{pa 846 -127}\special{pa 888 -158}%
+\special{pa 927 -194}\special{pa 961 -235}\special{pa 989 -280}\special{pa 1011 -327}%
+\special{pa 1028 -378}\special{pa 1038 -430}\special{pa 1041 -482}%
+\special{fp}%
+\special{pa 1766 -482}\special{pa 1764 -522}\special{pa 1756 -562}\special{pa 1744 -600}%
+\special{pa 1727 -636}\special{pa 1705 -670}\special{pa 1680 -701}\special{pa 1651 -729}%
+\special{pa 1618 -752}\special{pa 1583 -771}\special{pa 1546 -786}\special{pa 1507 -796}%
+\special{pa 1467 -801}\special{pa 1427 -801}\special{pa 1387 -796}\special{pa 1348 -786}%
+\special{pa 1311 -771}\special{pa 1276 -752}\special{pa 1243 -729}\special{pa 1214 -701}%
+\special{pa 1188 -670}\special{pa 1167 -636}\special{pa 1150 -600}\special{pa 1137 -562}%
+\special{pa 1130 -522}\special{pa 1127 -482}\special{pa 1130 -442}\special{pa 1137 -403}%
+\special{pa 1150 -365}\special{pa 1167 -328}\special{pa 1188 -294}\special{pa 1214 -263}%
+\special{pa 1243 -236}\special{pa 1276 -212}\special{pa 1311 -193}\special{pa 1348 -178}%
+\special{pa 1387 -168}\special{pa 1427 -163}\special{pa 1467 -163}\special{pa 1507 -168}%
+\special{pa 1546 -178}\special{pa 1583 -193}\special{pa 1618 -212}\special{pa 1651 -236}%
+\special{pa 1680 -263}\special{pa 1705 -294}\special{pa 1727 -328}\special{pa 1744 -365}%
+\special{pa 1756 -403}\special{pa 1764 -442}\special{pa 1766 -482}%
+\special{fp}%
+\special{pa 1439 248}\special{pa 1436 207}\special{pa 1429 167}\special{pa 1416 128}%
+\special{pa 1399 91}\special{pa 1377 57}\special{pa 1351 25}\special{pa 1321 -3}%
+\special{pa 1288 -27}\special{pa 1252 -47}\special{pa 1214 -62}\special{pa 1174 -72}%
+\special{pa 1134 -77}\special{pa 1093 -77}\special{pa 1052 -72}\special{pa 1013 -62}%
+\special{pa 975 -47}\special{pa 939 -27}\special{pa 906 -3}\special{pa 876 25}%
+\special{pa 850 57}\special{pa 828 91}\special{pa 811 128}\special{pa 798 167}%
+\special{pa 790 207}\special{pa 788 248}\special{pa 790 289}\special{pa 798 329}%
+\special{pa 811 368}\special{pa 828 405}\special{pa 850 439}\special{pa 876 471}%
+\special{pa 906 499}\special{pa 939 523}\special{pa 975 543}\special{pa 1013 558}%
+\special{pa 1052 568}\special{pa 1093 573}\special{pa 1134 573}\special{pa 1174 568}%
+\special{pa 1214 558}\special{pa 1252 543}\special{pa 1288 523}\special{pa 1321 499}%
+\special{pa 1351 471}\special{pa 1377 439}\special{pa 1399 405}\special{pa 1416 368}%
+\special{pa 1429 329}\special{pa 1436 289}\special{pa 1439 248}%
+\special{fp}%
+\special{pn 24}%
+\special{pa 827 -116}\special{pa 931 -22}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 24}%
+\special{pa 1053 -529}\special{pa 1130 -524}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 16}%
+\special{pa 1185 -88}\special{pa 1250 -203}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 1241 -138}\special{pa 1257 -215}\special{pa 1199 -162}\special{pa 1220 -150}%
+\special{pa 1241 -138}\special{sh 1}\special{ip}%
+\special{pn 1}%
+\special{pa 1241 -138}\special{pa 1257 -215}\special{pa 1199 -162}\special{pa 1220 -150}%
+\special{pa 1241 -138}\special{pa 1257 -215}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 16}%
+\special{pa 1306 -193}\special{pa 1247 -81}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 1254 -146}\special{pa 1240 -69}\special{pa 1297 -124}\special{pa 1275 -135}%
+\special{pa 1254 -146}\special{sh 1}\special{ip}%
+\special{pn 1}%
+\special{pa 1254 -146}\special{pa 1240 -69}\special{pa 1297 -124}\special{pa 1275 -135}%
+\special{pa 1254 -146}\special{pa 1240 -69}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 33 -0}\special{pa 29 -48}\special{pa 17 -95}\special{pa -3 -141}%
+\special{pa -31 -185}\special{pa -65 -225}\special{pa -107 -262}\special{pa -154 -295}%
+\special{pa -206 -324}\special{pa -263 -347}\special{pa -323 -365}\special{pa -386 -377}%
+\special{pa -450 -383}\special{pa -515 -383}\special{pa -579 -377}\special{pa -642 -365}%
+\special{pa -702 -347}\special{pa -758 -324}\special{pa -811 -295}\special{pa -858 -262}%
+\special{pa -899 -225}\special{pa -934 -185}\special{pa -961 -141}\special{pa -981 -95}%
+\special{pa -994 -48}\special{pa -998 0}\special{pa -994 48}\special{pa -981 95}%
+\special{pa -961 141}\special{pa -934 185}\special{pa -899 225}\special{pa -858 262}%
+\special{pa -811 295}\special{pa -758 324}\special{pa -702 347}\special{pa -642 365}%
+\special{pa -579 377}\special{pa -515 383}\special{pa -450 383}\special{pa -386 377}%
+\special{pa -323 365}\special{pa -263 347}\special{pa -206 324}\special{pa -154 295}%
+\special{pa -107 262}\special{pa -65 225}\special{pa -31 185}\special{pa -3 141}%
+\special{pa 17 95}\special{pa 29 48}\special{pa 33 -0}%
+\special{fp}%
+\special{pn 24}%
+\special{pa 44 -6}\special{pa 314 -198}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 24}%
+\special{pa 44 -6}\special{pa 799 127}%
+\special{fp}%
+\special{pn 8}%
+\special{pa -2453 -0}\special{pa -2456 -43}\special{pa -2466 -86}\special{pa -2484 -127}%
+\special{pa -2507 -166}\special{pa -2537 -202}\special{pa -2572 -236}\special{pa -2612 -265}%
+\special{pa -2657 -291}\special{pa -2706 -312}\special{pa -2757 -328}\special{pa -2811 -338}%
+\special{pa -2866 -344}\special{pa -2921 -344}\special{pa -2976 -338}\special{pa -3030 -328}%
+\special{pa -3082 -312}\special{pa -3130 -291}\special{pa -3175 -265}\special{pa -3215 -236}%
+\special{pa -3251 -202}\special{pa -3280 -166}\special{pa -3304 -127}\special{pa -3321 -86}%
+\special{pa -3331 -43}\special{pa -3335 0}\special{pa -3331 43}\special{pa -3321 86}%
+\special{pa -3304 127}\special{pa -3280 166}\special{pa -3251 202}\special{pa -3215 236}%
+\special{pa -3175 265}\special{pa -3130 291}\special{pa -3082 312}\special{pa -3030 328}%
+\special{pa -2976 338}\special{pa -2921 344}\special{pa -2866 344}\special{pa -2811 338}%
+\special{pa -2757 328}\special{pa -2706 312}\special{pa -2657 291}\special{pa -2612 265}%
+\special{pa -2572 236}\special{pa -2537 202}\special{pa -2507 166}\special{pa -2484 127}%
+\special{pa -2466 86}\special{pa -2456 43}\special{pa -2453 -0}%
+\special{fp}%
+\special{pa -1293 -0}\special{pa -1296 -43}\special{pa -1307 -86}\special{pa -1325 -127}%
+\special{pa -1350 -166}\special{pa -1381 -203}\special{pa -1419 -236}\special{pa -1461 -266}%
+\special{pa -1508 -292}\special{pa -1559 -313}\special{pa -1613 -329}\special{pa -1670 -339}%
+\special{pa -1728 -345}\special{pa -1786 -345}\special{pa -1844 -339}\special{pa -1900 -329}%
+\special{pa -1955 -313}\special{pa -2006 -292}\special{pa -2053 -266}\special{pa -2095 -236}%
+\special{pa -2132 -203}\special{pa -2164 -166}\special{pa -2188 -127}\special{pa -2206 -86}%
+\special{pa -2217 -43}\special{pa -2221 0}\special{pa -2217 43}\special{pa -2206 86}%
+\special{pa -2188 127}\special{pa -2164 166}\special{pa -2132 203}\special{pa -2095 236}%
+\special{pa -2053 266}\special{pa -2006 292}\special{pa -1955 313}\special{pa -1900 329}%
+\special{pa -1844 339}\special{pa -1786 345}\special{pa -1728 345}\special{pa -1670 339}%
+\special{pa -1613 329}\special{pa -1559 313}\special{pa -1508 292}\special{pa -1461 266}%
+\special{pa -1419 236}\special{pa -1381 203}\special{pa -1350 166}\special{pa -1325 127}%
+\special{pa -1307 86}\special{pa -1296 43}\special{pa -1293 -0}%
+\special{fp}%
+\special{pa -2453 965}\special{pa -2456 921}\special{pa -2466 879}\special{pa -2484 838}%
+\special{pa -2507 799}\special{pa -2537 762}\special{pa -2572 729}\special{pa -2612 699}%
+\special{pa -2657 674}\special{pa -2706 653}\special{pa -2757 637}\special{pa -2811 626}%
+\special{pa -2866 621}\special{pa -2921 621}\special{pa -2976 626}\special{pa -3030 637}%
+\special{pa -3082 653}\special{pa -3130 674}\special{pa -3175 699}\special{pa -3215 729}%
+\special{pa -3251 762}\special{pa -3280 799}\special{pa -3304 838}\special{pa -3321 879}%
+\special{pa -3331 921}\special{pa -3335 965}\special{pa -3331 1008}\special{pa -3321 1050}%
+\special{pa -3304 1091}\special{pa -3280 1131}\special{pa -3251 1167}\special{pa -3215 1200}%
+\special{pa -3175 1230}\special{pa -3130 1255}\special{pa -3082 1276}\special{pa -3030 1292}%
+\special{pa -2976 1303}\special{pa -2921 1308}\special{pa -2866 1308}\special{pa -2811 1303}%
+\special{pa -2757 1292}\special{pa -2706 1276}\special{pa -2657 1255}\special{pa -2612 1230}%
+\special{pa -2572 1200}\special{pa -2537 1167}\special{pa -2507 1131}\special{pa -2484 1091}%
+\special{pa -2466 1050}\special{pa -2456 1008}\special{pa -2453 965}%
+\special{fp}%
+\special{pn 16}%
+\special{pa -998 -6}\special{pa -1287 -6}%
+\special{fp}%
+\special{pn 8}%
+\special{pa -1226 -30}\special{pa -1301 -6}\special{pa -1226 19}\special{pa -1226 -6}%
+\special{pa -1226 -30}\special{sh 1}\special{ip}%
+\special{pn 1}%
+\special{pa -1226 -30}\special{pa -1301 -6}\special{pa -1226 19}\special{pa -1226 -6}%
+\special{pa -1226 -30}\special{pa -1301 -6}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 16}%
+\special{pa -1301 -6}\special{pa -1011 -6}%
+\special{fp}%
+\special{pn 8}%
+\special{pa -1073 19}\special{pa -998 -6}\special{pa -1073 -30}\special{pa -1073 -6}%
+\special{pa -1073 19}\special{sh 1}\special{ip}%
+\special{pn 1}%
+\special{pa -1073 19}\special{pa -998 -6}\special{pa -1073 -30}\special{pa -1073 -6}%
+\special{pa -1073 19}\special{pa -998 -6}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 16}%
+\special{pa -2232 -6}\special{pa -2428 -6}%
+\special{fp}%
+\special{pn 8}%
+\special{pa -2367 -30}\special{pa -2442 -6}\special{pa -2367 19}\special{pa -2367 -6}%
+\special{pa -2367 -30}\special{sh 1}\special{ip}%
+\special{pn 1}%
+\special{pa -2367 -30}\special{pa -2442 -6}\special{pa -2367 19}\special{pa -2367 -6}%
+\special{pa -2367 -30}\special{pa -2442 -6}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 16}%
+\special{pa -2894 344}\special{pa -2894 606}%
+\special{fp}%
+\special{pn 8}%
+\special{pa -2918 545}\special{pa -2894 620}\special{pa -2869 545}\special{pa -2894 545}%
+\special{pa -2918 545}\special{sh 1}\special{ip}%
+\special{pn 1}%
+\special{pa -2918 545}\special{pa -2894 620}\special{pa -2869 545}\special{pa -2894 545}%
+\special{pa -2918 545}\special{pa -2894 620}%
+\special{fp}%
+\special{pn 8}%
+\special{pa -1456 965}\special{pa -1460 928}\special{pa -1469 891}\special{pa -1485 856}%
+\special{pa -1506 822}\special{pa -1534 791}\special{pa -1566 763}\special{pa -1603 737}%
+\special{pa -1644 715}\special{pa -1688 698}\special{pa -1735 684}\special{pa -1785 675}%
+\special{pa -1835 670}\special{pa -1886 670}\special{pa -1936 675}\special{pa -1985 684}%
+\special{pa -2032 698}\special{pa -2077 715}\special{pa -2118 737}\special{pa -2155 763}%
+\special{pa -2187 791}\special{pa -2214 822}\special{pa -2236 856}\special{pa -2251 891}%
+\special{pa -2261 928}\special{pa -2264 965}\special{pa -2261 1002}\special{pa -2251 1038}%
+\special{pa -2236 1073}\special{pa -2214 1107}\special{pa -2187 1138}\special{pa -2155 1167}%
+\special{pa -2118 1192}\special{pa -2077 1214}\special{pa -2032 1232}\special{pa -1985 1245}%
+\special{pa -1936 1254}\special{pa -1886 1259}\special{pa -1835 1259}\special{pa -1785 1254}%
+\special{pa -1735 1245}\special{pa -1688 1232}\special{pa -1644 1214}\special{pa -1603 1192}%
+\special{pa -1566 1167}\special{pa -1534 1138}\special{pa -1506 1107}\special{pa -1485 1073}%
+\special{pa -1469 1038}\special{pa -1460 1002}\special{pa -1456 965}%
+\special{fp}%
+\special{pa 187 1171}\special{pa 184 1134}\special{pa 174 1098}\special{pa 157 1063}%
+\special{pa 134 1029}\special{pa 105 998}\special{pa 71 969}\special{pa 32 944}%
+\special{pa -12 922}\special{pa -59 904}\special{pa -109 890}\special{pa -161 881}%
+\special{pa -214 876}\special{pa -268 876}\special{pa -321 881}\special{pa -373 890}%
+\special{pa -423 904}\special{pa -471 922}\special{pa -514 944}\special{pa -553 969}%
+\special{pa -588 998}\special{pa -616 1029}\special{pa -639 1063}\special{pa -656 1098}%
+\special{pa -666 1134}\special{pa -669 1171}\special{pa -666 1208}\special{pa -656 1245}%
+\special{pa -639 1280}\special{pa -616 1314}\special{pa -588 1345}\special{pa -553 1373}%
+\special{pa -514 1399}\special{pa -471 1421}\special{pa -423 1439}\special{pa -373 1452}%
+\special{pa -321 1461}\special{pa -268 1466}\special{pa -214 1466}\special{pa -161 1461}%
+\special{pa -109 1452}\special{pa -59 1439}\special{pa -12 1421}\special{pa 32 1399}%
+\special{pa 71 1373}\special{pa 105 1345}\special{pa 134 1314}\special{pa 157 1280}%
+\special{pa 174 1245}\special{pa 184 1208}\special{pa 187 1171}%
+\special{fp}%
+\special{pa 939 899}\special{pa 936 868}\special{pa 927 837}\special{pa 912 807}%
+\special{pa 892 778}\special{pa 865 751}\special{pa 834 726}\special{pa 798 705}%
+\special{pa 759 686}\special{pa 715 670}\special{pa 669 658}\special{pa 622 650}%
+\special{pa 573 645}\special{pa 523 645}\special{pa 474 648}\special{pa 426 656}%
+\special{pa 380 667}\special{pa 337 682}\special{pa 297 700}\special{pa 260 721}%
+\special{pa 229 745}\special{pa 202 772}\special{pa 181 800}\special{pa 165 830}%
+\special{pa 155 861}\special{pa 152 892}\special{pa 155 924}\special{pa 164 955}%
+\special{pa 179 985}\special{pa 200 1013}\special{pa 226 1040}\special{pa 257 1065}%
+\special{pa 293 1087}\special{pa 333 1106}\special{pa 376 1121}\special{pa 422 1133}%
+\special{pa 470 1142}\special{pa 519 1146}\special{pa 568 1146}\special{pa 617 1143}%
+\special{pa 665 1136}\special{pa 711 1124}\special{pa 755 1110}\special{pa 795 1091}%
+\special{pa 831 1070}\special{pa 863 1046}\special{pa 889 1020}\special{pa 911 991}%
+\special{pa 926 962}\special{pa 936 931}\special{pa 939 899}%
+\special{fp}%
+\special{pa -716 1309}\special{pa -719 1273}\special{pa -729 1238}\special{pa -745 1204}%
+\special{pa -768 1172}\special{pa -796 1142}\special{pa -830 1114}\special{pa -868 1090}%
+\special{pa -911 1069}\special{pa -958 1051}\special{pa -1007 1038}\special{pa -1058 1029}%
+\special{pa -1110 1025}\special{pa -1163 1025}\special{pa -1216 1029}\special{pa -1267 1038}%
+\special{pa -1316 1051}\special{pa -1362 1069}\special{pa -1405 1090}\special{pa -1444 1114}%
+\special{pa -1477 1142}\special{pa -1506 1172}\special{pa -1528 1204}\special{pa -1545 1238}%
+\special{pa -1555 1273}\special{pa -1558 1309}\special{pa -1555 1345}\special{pa -1545 1380}%
+\special{pa -1528 1414}\special{pa -1506 1446}\special{pa -1477 1476}\special{pa -1444 1504}%
+\special{pa -1405 1529}\special{pa -1362 1550}\special{pa -1316 1567}\special{pa -1267 1580}%
+\special{pa -1216 1589}\special{pa -1163 1593}\special{pa -1110 1593}\special{pa -1058 1589}%
+\special{pa -1007 1580}\special{pa -958 1567}\special{pa -911 1550}\special{pa -868 1529}%
+\special{pa -830 1504}\special{pa -796 1476}\special{pa -768 1446}\special{pa -745 1414}%
+\special{pa -729 1380}\special{pa -719 1345}\special{pa -716 1309}%
+\special{fp}%
+\special{pa -601 -702}\special{pa -605 -736}\special{pa -615 -769}\special{pa -631 -801}%
+\special{pa -654 -832}\special{pa -682 -860}\special{pa -715 -886}\special{pa -752 -909}%
+\special{pa -794 -928}\special{pa -839 -944}\special{pa -886 -955}\special{pa -936 -963}%
+\special{pa -987 -966}\special{pa -1038 -965}\special{pa -1088 -960}\special{pa -1138 -951}%
+\special{pa -1185 -937}\special{pa -1229 -920}\special{pa -1270 -899}\special{pa -1307 -875}%
+\special{pa -1339 -848}\special{pa -1366 -819}\special{pa -1387 -788}\special{pa -1402 -755}%
+\special{pa -1411 -721}\special{pa -1413 -687}\special{pa -1410 -653}\special{pa -1399 -620}%
+\special{pa -1383 -587}\special{pa -1361 -557}\special{pa -1333 -529}\special{pa -1300 -503}%
+\special{pa -1262 -480}\special{pa -1221 -461}\special{pa -1176 -445}\special{pa -1128 -434}%
+\special{pa -1079 -426}\special{pa -1028 -423}\special{pa -977 -424}\special{pa -926 -429}%
+\special{pa -877 -438}\special{pa -830 -452}\special{pa -785 -469}\special{pa -745 -490}%
+\special{pa -708 -514}\special{pa -676 -541}\special{pa -649 -570}\special{pa -628 -601}%
+\special{pa -613 -634}\special{pa -604 -668}\special{pa -601 -702}%
+\special{fp}%
+\special{pn 16}%
+\special{pa -865 287}\special{pa -1641 704}%
+\special{fp}%
+\special{pn 8}%
+\special{pa -1599 654}\special{pa -1654 711}\special{pa -1576 697}\special{pa -1588 676}%
+\special{pa -1599 654}\special{sh 1}\special{ip}%
+\special{pn 1}%
+\special{pa -1599 654}\special{pa -1654 711}\special{pa -1576 697}\special{pa -1588 676}%
+\special{pa -1599 654}\special{pa -1654 711}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 16}%
+\special{pa -1654 711}\special{pa -877 293}%
+\special{fp}%
+\special{pn 8}%
+\special{pa -920 344}\special{pa -865 287}\special{pa -943 301}\special{pa -931 322}%
+\special{pa -920 344}\special{sh 1}\special{ip}%
+\special{pn 1}%
+\special{pa -920 344}\special{pa -865 287}\special{pa -943 301}\special{pa -931 322}%
+\special{pa -920 344}\special{pa -865 287}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 16}%
+\special{pa -1047 1031}\special{pa -641 397}%
+\special{fp}%
+\special{pn 8}%
+\special{pa -654 462}\special{pa -634 386}\special{pa -695 436}\special{pa -674 449}%
+\special{pa -654 462}\special{sh 1}\special{ip}%
+\special{pn 1}%
+\special{pa -654 462}\special{pa -634 386}\special{pa -695 436}\special{pa -674 449}%
+\special{pa -654 462}\special{pa -634 386}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 16}%
+\special{pa -634 386}\special{pa -1040 1019}%
+\special{fp}%
+\special{pn 8}%
+\special{pa -1027 955}\special{pa -1047 1031}\special{pa -986 981}\special{pa -1007 968}%
+\special{pa -1027 955}\special{sh 1}\special{ip}%
+\special{pn 1}%
+\special{pa -1027 955}\special{pa -1047 1031}\special{pa -986 981}\special{pa -1007 968}%
+\special{pa -1027 955}\special{pa -1047 1031}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 16}%
+\special{pa -215 876}\special{pa -306 388}%
+\special{fp}%
+\special{pn 8}%
+\special{pa -271 444}\special{pa -309 375}\special{pa -319 453}\special{pa -295 448}%
+\special{pa -271 444}\special{sh 1}\special{ip}%
+\special{pn 1}%
+\special{pa -271 444}\special{pa -309 375}\special{pa -319 453}\special{pa -295 448}%
+\special{pa -271 444}\special{pa -309 375}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 16}%
+\special{pa -309 375}\special{pa -217 863}%
+\special{fp}%
+\special{pn 8}%
+\special{pa -253 807}\special{pa -215 876}\special{pa -205 798}\special{pa -229 803}%
+\special{pa -253 807}\special{sh 1}\special{ip}%
+\special{pn 1}%
+\special{pa -253 807}\special{pa -215 876}\special{pa -205 798}\special{pa -229 803}%
+\special{pa -253 807}\special{pa -215 876}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 16}%
+\special{pa 380 667}\special{pa -67 252}%
+\special{fp}%
+\special{pn 8}%
+\special{pa -6 276}\special{pa -77 243}\special{pa -39 311}\special{pa -22 293}\special{pa -6 276}%
+\special{sh 1}\special{ip}%
+\special{pn 1}%
+\special{pa -6 276}\special{pa -77 243}\special{pa -39 311}\special{pa -22 293}%
+\special{pa -6 276}\special{pa -77 243}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 16}%
+\special{pa -77 243}\special{pa 370 658}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 309 634}\special{pa 380 667}\special{pa 342 598}\special{pa 325 616}\special{pa 309 634}%
+\special{sh 1}\special{ip}%
+\special{pn 1}%
+\special{pa 309 634}\special{pa 380 667}\special{pa 342 598}\special{pa 325 616}%
+\special{pa 309 634}\special{pa 380 667}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 16}%
+\special{pa -755 -325}\special{pa -795 -450}%
+\special{fp}%
+\special{pn 8}%
+\special{pa -753 -399}\special{pa -799 -463}\special{pa -800 -384}\special{pa -776 -392}%
+\special{pa -753 -399}\special{sh 1}\special{ip}%
+\special{pn 1}%
+\special{pa -753 -399}\special{pa -799 -463}\special{pa -800 -384}\special{pa -776 -392}%
+\special{pa -753 -399}\special{pa -799 -463}%
+\special{fp}%
+\special{pn 8}%
+\LARGE%
+\settowidth{\Width}{KeTCindy System}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{KeTCindy System}\settodepth{\Depth}{KeTCindy System}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-19.0000000,6.0000000){\hspace*{\Width}\raisebox{\Height}{KeTCindy System}}%
+%
+\Large%
+\settowidth{\Width}{Cinderella}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{Cinderella}\settodepth{\Depth}{Cinderella}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(5.1428571,7.0000000){\hspace*{\Width}\raisebox{\Height}{Cinderella}}%
+%
+\normalsize%
+\settowidth{\Width}{CindyScript}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{CindyScript}\settodepth{\Depth}{CindyScript}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.5000000,3.5000000){\hspace*{\Width}\raisebox{\Height}{CindyScript}}%
+%
+\settowidth{\Width}{CindyLab}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{CindyLab}\settodepth{\Depth}{CindyLab}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(10.5000000,3.5000000){\hspace*{\Width}\raisebox{\Height}{CindyLab}}%
+%
+\settowidth{\Width}{Figures}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{Figures}\settodepth{\Depth}{Figures}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(8.0800000,-1.8000000){\hspace*{\Width}\raisebox{\Height}{Figures}}%
+%
+\settowidth{\Width}{KeTCindy}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{KeTCindy}\settodepth{\Depth}{KeTCindy}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-3.5000000,0.0000000){\hspace*{\Width}\raisebox{\Height}{KeTCindy}}%
+%
+\settowidth{\Width}{TeX}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{TeX}\settodepth{\Depth}{TeX}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-21.0000000,0.0000000){\hspace*{\Width}\raisebox{\Height}{TeX}}%
+%
+\settowidth{\Width}{R}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{R}\settodepth{\Depth}{R}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-12.7500000,0.0000000){\hspace*{\Width}\raisebox{\Height}{R}}%
+%
+\settowidth{\Width}{KeTpic}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{KeTpic}\settodepth{\Depth}{KeTpic}\setlength{\Height}{\Depth}%
+\put(-17.7200000,2.4685714){\hspace*{\Width}\raisebox{\Height}{KeTpic}}%
+%
+\settowidth{\Width}{Scilab}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{Scilab}\settodepth{\Depth}{Scilab}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-13.5000000,-7.0000000){\hspace*{\Width}\raisebox{\Height}{Scilab}}%
+%
+\settowidth{\Width}{Maxima}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{Maxima}\settodepth{\Depth}{Maxima}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-1.7500000,-8.5000000){\hspace*{\Width}\raisebox{\Height}{Maxima}}%
+%
+\settowidth{\Width}{Risa/Asir}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{Risa/Asir}\settodepth{\Depth}{Risa/Asir}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(3.9600000,-6.5000000){\hspace*{\Width}\raisebox{\Height}{Risa/Asir}}%
+%
+\settowidth{\Width}{FriCAS}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{FriCAS}\settodepth{\Depth}{FriCAS}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-9.8571429,-9.5000000){\hspace*{\Width}\raisebox{\Height}{FriCAS}}%
+%
+\settowidth{\Width}{MeshLab}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{MeshLab}\settodepth{\Depth}{MeshLab}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-9.0571429,5.0000000){\hspace*{\Width}\raisebox{\Height}{MeshLab}}%
+%
+\settowidth{\Width}{PDFReader}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{PDFReader}\settodepth{\Depth}{PDFReader}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-21.0000000,-7.0000000){\hspace*{\Width}\raisebox{\Height}{PDFReader}}%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/crosspoint.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/crosspoint.tex
new file mode 100644
index 0000000000..2e720d4869
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/crosspoint.tex
@@ -0,0 +1,68 @@
+%%% test.tex 2014-10-17 10:46
+%%% test.sce 2014-10-17 10:46
+{\unitlength=5mm%
+\begin{picture}%
+( 8.00000, 8.00000)( -4.00000, -4.00000)%
+\special{pn 8}%
+%
+\settowidth{\Width}{A}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{A}\settodepth{\Depth}{A}\setlength{\Height}{\Depth}%
+\put(-0.6400,2.4800){\hspace*{\Width}\raisebox{\Height}{A}}%
+%
+%
+\settowidth{\Width}{B}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{B}\settodepth{\Depth}{B}\setlength{\Height}{-\Height}%
+\put(1.4300,-2.9400){\hspace*{\Width}\raisebox{\Height}{B}}%
+%
+%
+\special{pa -469 787}\special{pa -463 709}\special{pa -455 611}\special{pa -447 518}%
+\special{pa -439 430}\special{pa -431 345}\special{pa -423 265}\special{pa -415 189}%
+\special{pa -408 117}\special{pa -400 49}\special{pa -392 -16}\special{pa -384 -76}%
+\special{pa -376 -133}\special{pa -368 -186}\special{pa -360 -236}\special{pa -352 -282}%
+\special{pa -344 -324}\special{pa -336 -364}\special{pa -328 -400}\special{pa -321 -432}%
+\special{pa -313 -462}\special{pa -305 -489}\special{pa -297 -513}\special{pa -289 -533}%
+\special{pa -281 -552}\special{pa -273 -567}\special{pa -265 -580}\special{pa -257 -590}%
+\special{pa -249 -597}\special{pa -241 -603}\special{pa -233 -605}\special{pa -226 -606}%
+\special{pa -218 -605}\special{pa -210 -601}\special{pa -202 -595}\special{pa -194 -587}%
+\special{pa -186 -578}\special{pa -178 -567}\special{pa -170 -553}\special{pa -162 -539}%
+\special{pa -154 -522}\special{pa -146 -505}\special{pa -138 -485}\special{pa -131 -465}%
+\special{pa -123 -443}\special{pa -115 -420}\special{pa -107 -396}\special{pa -99 -371}%
+\special{pa -91 -345}\special{pa -83 -318}\special{pa -75 -290}\special{pa -67 -261}%
+\special{pa -59 -232}\special{pa -51 -202}\special{pa -44 -172}\special{pa -36 -141}%
+\special{pa -28 -110}\special{pa -20 -79}\special{pa -12 -47}\special{pa -4 -16}\special{pa 4 16}%
+\special{pa 12 47}\special{pa 20 79}\special{pa 28 110}\special{pa 36 141}\special{pa 44 172}%
+\special{pa 51 202}\special{pa 59 232}\special{pa 67 261}\special{pa 75 290}\special{pa 83 318}%
+\special{pa 91 345}\special{pa 99 371}\special{pa 107 396}\special{pa 115 420}\special{pa 123 443}%
+\special{pa 131 465}\special{pa 138 485}\special{pa 146 505}\special{pa 154 522}\special{pa 162 539}%
+\special{pa 170 553}\special{pa 178 567}\special{pa 186 578}\special{pa 194 587}\special{pa 202 595}%
+\special{pa 210 601}\special{pa 218 605}\special{pa 226 606}\special{pa 233 605}\special{pa 241 603}%
+\special{pa 249 597}\special{pa 257 590}\special{pa 265 580}\special{pa 273 567}\special{pa 281 552}%
+\special{pa 289 533}\special{pa 297 513}\special{pa 305 489}\special{pa 313 462}\special{pa 321 432}%
+\special{pa 328 400}\special{pa 336 364}\special{pa 344 324}\special{pa 352 282}\special{pa 360 236}%
+\special{pa 368 186}\special{pa 376 133}\special{pa 384 76}\special{pa 392 16}\special{pa 400 -49}%
+\special{pa 408 -117}\special{pa 415 -189}\special{pa 423 -265}\special{pa 431 -345}%
+\special{pa 439 -430}\special{pa 447 -518}\special{pa 455 -611}\special{pa 463 -709}%
+\special{pa 469 -787}%
+\special{fp}%
+\special{pa -256 -787}\special{pa 356 787}%
+\special{fp}%
+\special{pa -787 0}\special{pa 787 0}%
+\special{fp}%
+\special{pa 0 787}\special{pa 0 -787}%
+\special{fp}%
+\settowidth{\Width}{$x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.0500,0.0000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{\Depth}%
+\put(0.0000,4.0500){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+%
+\settowidth{\Width}{O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(-0.0500,-0.0500){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/crvsfparadata1.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/crvsfparadata1.tex
new file mode 100644
index 0000000000..26edbc695a
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/crvsfparadata1.tex
@@ -0,0 +1,74 @@
+%%% /Users/Hannya/ketcindy/ketwork/template.tex 2016-8-24 21:8
+%%% template.sce 2016-8-24 21:8
+{\unitlength=6mm%
+\begin{picture}%
+( 6.81000, 6.95000)( -3.50000, -2.00000)%
+\special{pn 8}%
+%
+\settowidth{\Width}{$x$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-2.7936,-1.0660){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(3.9651,-1.1310){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+%
+\settowidth{\Width}{$z$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$z$}\settodepth{\Depth}{$z$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(0.0000,4.4380){\hspace*{\Width}\raisebox{\Height}{$z$}}%
+%
+%
+\special{pa 471 -14}\special{pa 461 -50}\special{pa 451 -85}\special{pa 442 -120}%
+\special{pa 432 -153}\special{pa 422 -186}\special{pa 413 -219}\special{pa 403 -250}%
+\special{pa 393 -281}\special{pa 383 -311}\special{pa 374 -341}\special{pa 364 -369}%
+\special{pa 354 -397}\special{pa 345 -424}\special{pa 335 -451}\special{pa 325 -476}%
+\special{pa 315 -501}\special{pa 306 -525}\special{pa 296 -549}\special{pa 286 -571}%
+\special{pa 277 -593}\special{pa 268 -611}\special{pa 257 -635}\special{pa 247 -654}%
+\special{pa 237 -673}\special{pa 228 -692}\special{pa 218 -709}\special{pa 208 -726}%
+\special{pa 198 -742}\special{pa 188 -757}\special{pa 178 -772}\special{pa 169 -785}%
+\special{pa 159 -798}\special{pa 149 -810}\special{pa 143 -817}\special{pa 139 -822}%
+\special{pa 129 -833}\special{pa 118 -843}\special{pa 108 -852}\special{pa 98 -861}%
+\special{pa 87 -868}\special{pa 76 -876}\special{pa 69 -880}\special{pa 53 -887}\special{pa 41 -892}%
+\special{pa 31 -895}\special{pa 25 -896}\special{pa 17 -898}\special{pa 6 -899}\special{pa -5 -899}%
+\special{pa -16 -898}\special{pa -23 -897}\special{pa -30 -895}\special{pa -39 -893}%
+\special{pa -51 -888}\special{pa -65 -882}\special{pa -76 -876}\special{pa -87 -868}%
+\special{pa -98 -861}\special{pa -108 -852}\special{pa -118 -843}\special{pa -129 -833}%
+\special{pa -135 -826}\special{pa -149 -810}\special{pa -159 -798}\special{pa -169 -785}%
+\special{pa -178 -772}\special{pa -188 -757}\special{pa -198 -742}\special{pa -208 -726}%
+\special{pa -218 -709}\special{pa -228 -692}\special{pa -237 -673}\special{pa -243 -662}%
+\special{pa -247 -654}\special{pa -257 -635}\special{pa -267 -614}\special{pa -277 -593}%
+\special{pa -286 -571}\special{pa -296 -549}\special{pa -306 -525}\special{pa -315 -501}%
+\special{pa -325 -476}\special{pa -335 -451}\special{pa -345 -424}\special{pa -354 -397}%
+\special{pa -364 -369}\special{pa -374 -341}\special{pa -383 -311}\special{pa -393 -281}%
+\special{pa -403 -250}\special{pa -413 -219}\special{pa -422 -186}\special{pa -432 -153}%
+\special{pa -442 -120}\special{pa -451 -85}\special{pa -461 -50}\special{pa -471 -14}%
+\special{fp}%
+\special{pa -309 118}\special{pa -262 130}\special{pa -210 140}\special{pa -156 147}%
+\special{pa -99 152}\special{pa -40 155}\special{pa 19 156}\special{pa 78 154}\special{pa 136 149}%
+\special{pa 192 142}\special{pa 244 133}\special{pa 293 122}\special{pa 337 109}\special{pa 376 94}%
+\special{pa 409 78}\special{pa 435 61}\special{pa 455 42}\special{pa 467 23}\special{pa 472 3}%
+\special{pa 470 -16}\special{pa 460 -35}%
+\special{fp}%
+\special{pa -467 -23}\special{pa -472 -3}\special{pa -470 16}\special{pa -460 35}%
+\special{pa -443 54}\special{pa -419 72}\special{pa -388 89}\special{pa -351 104}%
+\special{pa -309 118}%
+\special{fp}%
+\special{pa -536 -153}\special{pa -424 -191}%
+\special{fp}%
+\special{pa 241 -416}\special{pa 536 -516}%
+\special{fp}%
+\special{pa 772 -295}\special{pa 429 -164}%
+\special{fp}%
+\special{pa -309 118}\special{pa -618 236}%
+\special{fp}%
+\special{pa -827 -236}\special{pa -440 -125}%
+\special{fp}%
+\special{pa 357 102}\special{pa 782 223}%
+\special{fp}%
+\special{pa 0 472}\special{pa 0 156}%
+\special{fp}%
+\special{pa 0 -899}\special{pa 0 -1003}%
+\special{fp}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/crvsfparadata2.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/crvsfparadata2.tex
new file mode 100644
index 0000000000..130e59cbd7
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/crvsfparadata2.tex
@@ -0,0 +1,139 @@
+%%% /Users/Hannya/ketcindy/ketwork/template.tex 2016-8-24 21:3
+%%% template.sce 2016-8-24 21:3
+{\unitlength=6mm%
+\begin{picture}%
+( 6.81000, 6.95000)( -3.50000, -2.00000)%
+\special{pn 8}%
+%
+\settowidth{\Width}{$x$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-2.7936,-1.0660){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(3.9651,-1.1310){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+%
+\settowidth{\Width}{$z$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$z$}\settodepth{\Depth}{$z$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(0.0000,4.4380){\hspace*{\Width}\raisebox{\Height}{$z$}}%
+%
+%
+\special{pa 471 -14}\special{pa 461 -50}\special{pa 451 -85}\special{pa 442 -120}%
+\special{pa 432 -153}\special{pa 422 -186}\special{pa 413 -219}\special{pa 403 -250}%
+\special{pa 393 -281}\special{pa 383 -311}\special{pa 374 -341}\special{pa 364 -369}%
+\special{pa 354 -397}\special{pa 345 -424}\special{pa 335 -451}\special{pa 325 -476}%
+\special{pa 315 -501}\special{pa 306 -525}\special{pa 296 -549}\special{pa 286 -571}%
+\special{pa 277 -593}\special{pa 268 -611}\special{pa 257 -635}\special{pa 247 -654}%
+\special{pa 237 -673}\special{pa 228 -692}\special{pa 218 -709}\special{pa 208 -726}%
+\special{pa 198 -742}\special{pa 188 -757}\special{pa 178 -772}\special{pa 169 -785}%
+\special{pa 159 -798}\special{pa 149 -810}\special{pa 143 -817}\special{pa 139 -822}%
+\special{pa 129 -833}\special{pa 118 -843}\special{pa 108 -852}\special{pa 98 -861}%
+\special{pa 87 -868}\special{pa 76 -876}\special{pa 69 -880}\special{pa 53 -887}\special{pa 41 -892}%
+\special{pa 31 -895}\special{pa 25 -896}\special{pa 17 -898}\special{pa 6 -899}\special{pa -5 -899}%
+\special{pa -16 -898}\special{pa -23 -897}\special{pa -30 -895}\special{pa -39 -893}%
+\special{pa -51 -888}\special{pa -65 -882}\special{pa -76 -876}\special{pa -87 -868}%
+\special{pa -98 -861}\special{pa -108 -852}\special{pa -118 -843}\special{pa -129 -833}%
+\special{pa -135 -826}\special{pa -149 -810}\special{pa -159 -798}\special{pa -169 -785}%
+\special{pa -178 -772}\special{pa -188 -757}\special{pa -198 -742}\special{pa -208 -726}%
+\special{pa -218 -709}\special{pa -228 -692}\special{pa -237 -673}\special{pa -243 -662}%
+\special{pa -247 -654}\special{pa -257 -635}\special{pa -267 -614}\special{pa -277 -593}%
+\special{pa -286 -571}\special{pa -296 -549}\special{pa -306 -525}\special{pa -315 -501}%
+\special{pa -325 -476}\special{pa -335 -451}\special{pa -345 -424}\special{pa -354 -397}%
+\special{pa -364 -369}\special{pa -374 -341}\special{pa -383 -311}\special{pa -393 -281}%
+\special{pa -403 -250}\special{pa -413 -219}\special{pa -422 -186}\special{pa -432 -153}%
+\special{pa -442 -120}\special{pa -451 -85}\special{pa -461 -50}\special{pa -471 -14}%
+\special{fp}%
+\special{pa -309 118}\special{pa -262 130}\special{pa -210 140}\special{pa -156 147}%
+\special{pa -99 152}\special{pa -40 155}\special{pa 19 156}\special{pa 78 154}\special{pa 136 149}%
+\special{pa 192 142}\special{pa 244 133}\special{pa 293 122}\special{pa 337 109}\special{pa 376 94}%
+\special{pa 409 78}\special{pa 435 61}\special{pa 455 42}\special{pa 467 23}\special{pa 472 3}%
+\special{pa 470 -16}\special{pa 460 -35}%
+\special{fp}%
+\special{pa -467 -23}\special{pa -472 -3}\special{pa -470 16}\special{pa -460 35}%
+\special{pa -443 54}\special{pa -419 72}\special{pa -388 89}\special{pa -351 104}%
+\special{pa -309 118}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 463 -33}\special{pa 457 -38}\special{fp}\special{pa 435 -60}\special{pa 428 -65}\special{fp}%
+\special{pa 402 -82}\special{pa 395 -85}\special{fp}\special{pa 366 -98}\special{pa 358 -101}\special{fp}%
+\special{pa 329 -112}\special{pa 321 -114}\special{fp}\special{pa 291 -122}\special{pa 283 -124}\special{fp}%
+\special{pa 252 -132}\special{pa 244 -133}\special{fp}\special{pa 213 -139}\special{pa 205 -140}\special{fp}%
+\special{pa 174 -145}\special{pa 166 -146}\special{fp}\special{pa 135 -149}\special{pa 127 -150}\special{fp}%
+\special{pa 96 -153}\special{pa 88 -153}\special{fp}\special{pa 56 -155}\special{pa 48 -155}\special{fp}%
+\special{pa 17 -155}\special{pa 9 -156}\special{fp}\special{pa -23 -156}\special{pa -31 -155}\special{fp}%
+\special{pa -63 -154}\special{pa -71 -154}\special{fp}\special{pa -102 -152}\special{pa -110 -151}\special{fp}%
+\special{pa -141 -149}\special{pa -149 -148}\special{fp}\special{pa -181 -144}\special{pa -189 -143}\special{fp}%
+\special{pa -220 -138}\special{pa -228 -136}\special{fp}\special{pa -258 -130}\special{pa -266 -128}\special{fp}%
+\special{pa -297 -121}\special{pa -305 -119}\special{fp}\special{pa -335 -110}\special{pa -342 -107}\special{fp}%
+\special{pa -372 -96}\special{pa -379 -93}\special{fp}\special{pa -407 -79}\special{pa -414 -75}\special{fp}%
+\special{pa -440 -56}\special{pa -446 -51}\special{fp}\special{pa -465 -26}\special{pa -470 -20}\special{fp}%
+\special{pn 8}%
+\special{pa -536 -153}\special{pa -424 -191}%
+\special{fp}%
+\special{pa 241 -416}\special{pa 536 -516}%
+\special{fp}%
+\special{pn 8}%
+\special{pa -428 -190}\special{pa -420 -192}\special{fp}\special{pa -391 -202}\special{pa -383 -205}\special{fp}%
+\special{pa -354 -215}\special{pa -346 -217}\special{fp}\special{pa -317 -227}\special{pa -309 -230}\special{fp}%
+\special{pa -280 -240}\special{pa -272 -242}\special{fp}\special{pa -243 -252}\special{pa -235 -255}\special{fp}%
+\special{pa -206 -265}\special{pa -198 -267}\special{fp}\special{pa -169 -277}\special{pa -161 -280}\special{fp}%
+\special{pa -132 -290}\special{pa -124 -292}\special{fp}\special{pa -95 -302}\special{pa -87 -305}\special{fp}%
+\special{pa -58 -315}\special{pa -50 -317}\special{fp}\special{pa -21 -327}\special{pa -14 -330}\special{fp}%
+\special{pa 16 -340}\special{pa 23 -342}\special{fp}\special{pa 53 -352}\special{pa 60 -355}\special{fp}%
+\special{pa 90 -365}\special{pa 97 -367}\special{fp}\special{pa 127 -377}\special{pa 134 -380}\special{fp}%
+\special{pa 164 -390}\special{pa 171 -392}\special{fp}\special{pa 201 -402}\special{pa 208 -405}\special{fp}%
+\special{pa 238 -415}\special{pa 245 -418}\special{fp}\special{pn 8}%
+\special{pa 772 -295}\special{pa 429 -164}%
+\special{fp}%
+\special{pa -309 118}\special{pa -618 236}%
+\special{fp}%
+\special{pa -827 -236}\special{pa -440 -125}%
+\special{fp}%
+\special{pa 357 102}\special{pa 782 223}%
+\special{fp}%
+\special{pa 0 472}\special{pa 0 156}%
+\special{fp}%
+\special{pa 0 -899}\special{pa 0 -1003}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 433 -165}\special{pa 425 -162}\special{fp}\special{pa 396 -151}\special{pa 388 -148}\special{fp}%
+\special{pa 359 -137}\special{pa 351 -134}\special{fp}\special{pa 322 -123}\special{pa 314 -120}\special{fp}%
+\special{pa 285 -109}\special{pa 278 -106}\special{fp}\special{pa 248 -95}\special{pa 241 -92}\special{fp}%
+\special{pa 211 -81}\special{pa 204 -78}\special{fp}\special{pa 174 -67}\special{pa 167 -64}\special{fp}%
+\special{pa 137 -52}\special{pa 130 -50}\special{fp}\special{pa 101 -38}\special{pa 93 -36}\special{fp}%
+\special{pa 64 -24}\special{pa 56 -21}\special{fp}\special{pa 27 -10}\special{pa 19 -7}\special{fp}%
+\special{pa -10 4}\special{pa -18 7}\special{fp}\special{pa -47 18}\special{pa -54 21}\special{fp}%
+\special{pa -84 32}\special{pa -91 35}\special{fp}\special{pa -121 46}\special{pa -128 49}\special{fp}%
+\special{pa -158 60}\special{pa -165 63}\special{fp}\special{pa -195 74}\special{pa -202 77}\special{fp}%
+\special{pa -231 88}\special{pa -239 91}\special{fp}\special{pa -268 102}\special{pa -276 105}\special{fp}%
+\special{pa -305 116}\special{pa -313 119}\special{fp}\special{pn 8}%
+\special{pa -444 -127}\special{pa -436 -124}\special{fp}\special{pa -406 -116}\special{pa -398 -114}\special{fp}%
+\special{pa -368 -105}\special{pa -360 -103}\special{fp}\special{pa -330 -94}\special{pa -322 -92}\special{fp}%
+\special{pa -292 -83}\special{pa -284 -81}\special{fp}\special{pa -254 -72}\special{pa -246 -70}\special{fp}%
+\special{pa -216 -62}\special{pa -208 -59}\special{fp}\special{pa -178 -51}\special{pa -171 -49}\special{fp}%
+\special{pa -140 -40}\special{pa -133 -38}\special{fp}\special{pa -102 -29}\special{pa -95 -27}\special{fp}%
+\special{pa -64 -18}\special{pa -57 -16}\special{fp}\special{pa -26 -8}\special{pa -19 -5}\special{fp}%
+\special{pa 11 3}\special{pa 19 5}\special{fp}\special{pa 49 14}\special{pa 57 16}\special{fp}%
+\special{pa 87 25}\special{pa 95 27}\special{fp}\special{pa 125 36}\special{pa 133 38}\special{fp}%
+\special{pa 163 47}\special{pa 171 49}\special{fp}\special{pa 201 57}\special{pa 209 60}\special{fp}%
+\special{pa 239 68}\special{pa 247 70}\special{fp}\special{pa 277 79}\special{pa 285 81}\special{fp}%
+\special{pa 315 90}\special{pa 323 92}\special{fp}\special{pa 353 101}\special{pa 361 103}\special{fp}%
+\special{pn 8}%
+\special{pa 0 160}\special{pa 0 152}\special{fp}\special{pa 0 121}\special{pa 0 113}\special{fp}%
+\special{pa 0 82}\special{pa 0 74}\special{fp}\special{pa 0 42}\special{pa 0 34}\special{fp}%
+\special{pa 0 3}\special{pa 0 -5}\special{fp}\special{pa 0 -36}\special{pa 0 -44}\special{fp}%
+\special{pa 0 -75}\special{pa 0 -83}\special{fp}\special{pa 0 -114}\special{pa 0 -122}\special{fp}%
+\special{pa 0 -153}\special{pa 0 -161}\special{fp}\special{pa 0 -192}\special{pa 0 -200}\special{fp}%
+\special{pa 0 -231}\special{pa 0 -239}\special{fp}\special{pa 0 -270}\special{pa 0 -278}\special{fp}%
+\special{pa 0 -309}\special{pa 0 -317}\special{fp}\special{pa 0 -348}\special{pa 0 -356}\special{fp}%
+\special{pa 0 -387}\special{pa 0 -395}\special{fp}\special{pa 0 -426}\special{pa 0 -434}\special{fp}%
+\special{pa 0 -465}\special{pa 0 -473}\special{fp}\special{pa 0 -504}\special{pa 0 -512}\special{fp}%
+\special{pa 0 -543}\special{pa 0 -551}\special{fp}\special{pa 0 -582}\special{pa 0 -590}\special{fp}%
+\special{pa 0 -621}\special{pa 0 -629}\special{fp}\special{pa 0 -660}\special{pa 0 -668}\special{fp}%
+\special{pa 0 -699}\special{pa 0 -707}\special{fp}\special{pa 0 -738}\special{pa 0 -746}\special{fp}%
+\special{pa 0 -778}\special{pa 0 -786}\special{fp}\special{pa 0 -817}\special{pa 0 -825}\special{fp}%
+\special{pa 0 -856}\special{pa 0 -864}\special{fp}\special{pa 0 -895}\special{pa 0 -903}\special{fp}%
+\special{pn 8}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/deffun01.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/deffun01.tex
new file mode 100644
index 0000000000..13501cb7d4
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/deffun01.tex
@@ -0,0 +1,41 @@
+%%% /Users/Hannya/Desktop/KeTCindy/fig/deffun01.tex
+%%% Generator=template1basic.cdy
+{\unitlength=1cm%
+\begin{picture}%
+(6,3)(-3,-1)%
+\special{pn 8}%
+%
+{%
+\color[rgb]{0,0,0}%
+\special{pa -1181 -39}\special{pa -1134 -42}\special{pa -1087 -46}\special{pa -1039 -49}%
+\special{pa -992 -54}\special{pa -945 -58}\special{pa -898 -64}\special{pa -850 -69}%
+\special{pa -803 -76}\special{pa -756 -84}\special{pa -709 -93}\special{pa -661 -103}%
+\special{pa -614 -115}\special{pa -567 -128}\special{pa -520 -144}\special{pa -472 -161}%
+\special{pa -425 -182}\special{pa -378 -205}\special{pa -331 -231}\special{pa -283 -259}%
+\special{pa -236 -289}\special{pa -189 -320}\special{pa -142 -349}\special{pa -94 -372}%
+\special{pa -47 -388}\special{pa 0 -394}\special{pa 47 -388}\special{pa 94 -372}%
+\special{pa 142 -349}\special{pa 189 -320}\special{pa 236 -289}\special{pa 283 -259}%
+\special{pa 331 -231}\special{pa 378 -205}\special{pa 425 -182}\special{pa 472 -161}%
+\special{pa 520 -144}\special{pa 567 -128}\special{pa 614 -115}\special{pa 661 -103}%
+\special{pa 709 -93}\special{pa 756 -84}\special{pa 803 -76}\special{pa 850 -69}%
+\special{pa 898 -64}\special{pa 945 -58}\special{pa 992 -54}\special{pa 1039 -49}%
+\special{pa 1087 -46}\special{pa 1134 -42}\special{pa 1181 -39}%
+\special{fp}%
+}%
+\special{pa -1181 -0}\special{pa 1181 -0}%
+\special{fp}%
+\special{pa 0 394}\special{pa 0 -787}%
+\special{fp}%
+\settowidth{\Width}{$x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(3.0500000,0.0000000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{\Depth}%
+\put(0.0000000,2.0500000){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+\settowidth{\Width}{O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(-0.0500000,-0.0500000){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/deffun02.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/deffun02.tex
new file mode 100644
index 0000000000..daeeff605f
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/deffun02.tex
@@ -0,0 +1,55 @@
+%%% /Users/Hannya/Desktop/KeTCindy/fig/deffun02.tex
+%%% Generator=template1basic.cdy
+{\unitlength=1cm%
+\begin{picture}%
+(6,3.14)(-3,-1.5)%
+\special{pn 8}%
+%
+{%
+\color[rgb]{0,0,0}%
+\special{pa -1181 394}\special{pa -1157 394}\special{pa -1134 394}\special{pa -1110 394}%
+\special{pa -1087 394}\special{pa -1063 394}\special{pa -1039 394}\special{pa -1016 394}%
+\special{pa -992 394}\special{pa -969 394}\special{pa -945 394}\special{pa -921 394}%
+\special{pa -898 394}\special{pa -874 394}\special{pa -850 394}\special{pa -827 394}%
+\special{pa -803 394}\special{pa -780 394}\special{pa -756 394}\special{pa -732 394}%
+\special{pa -709 394}\special{pa -685 394}\special{pa -661 394}\special{pa -638 394}%
+\special{pa -614 394}\special{pa -591 394}\special{pa -567 394}\special{pa -543 394}%
+\special{pa -520 394}\special{pa -496 394}\special{pa -472 394}\special{pa -449 394}%
+\special{pa -425 394}\special{pa -402 394}\special{pa -378 394}\special{pa -354 394}%
+\special{pa -331 394}\special{pa -307 394}\special{pa -283 394}\special{pa -260 394}%
+\special{pa -236 394}\special{pa -213 394}\special{pa -189 394}\special{pa -165 394}%
+\special{pa -142 394}\special{pa -118 394}\special{pa -94 394}\special{pa -71 394}%
+\special{pa -47 394}\special{pa -24 394}%
+\special{fp}%
+\special{pa 0 -394}\special{pa 24 -394}\special{pa 47 -394}\special{pa 71 -394}%
+\special{pa 94 -394}\special{pa 118 -394}\special{pa 142 -394}\special{pa 165 -394}%
+\special{pa 189 -394}\special{pa 213 -394}\special{pa 236 -394}\special{pa 260 -394}%
+\special{pa 283 -394}\special{pa 307 -394}\special{pa 331 -394}\special{pa 354 -394}%
+\special{pa 378 -394}\special{pa 402 -394}\special{pa 425 -394}\special{pa 449 -394}%
+\special{pa 472 -394}\special{pa 496 -394}\special{pa 520 -394}\special{pa 543 -394}%
+\special{pa 567 -394}\special{pa 591 -394}\special{pa 614 -394}\special{pa 638 -394}%
+\special{pa 661 -394}\special{pa 685 -394}\special{pa 709 -394}\special{pa 732 -394}%
+\special{pa 756 -394}\special{pa 780 -394}\special{pa 803 -394}\special{pa 827 -394}%
+\special{pa 850 -394}\special{pa 874 -394}\special{pa 898 -394}\special{pa 921 -394}%
+\special{pa 945 -394}\special{pa 969 -394}\special{pa 992 -394}\special{pa 1016 -394}%
+\special{pa 1039 -394}\special{pa 1063 -394}\special{pa 1087 -394}\special{pa 1110 -394}%
+\special{pa 1134 -394}\special{pa 1157 -394}\special{pa 1181 -394}%
+\special{fp}%
+}%
+\special{pa -1181 -0}\special{pa 1181 -0}%
+\special{fp}%
+\special{pa 0 591}\special{pa 0 -646}%
+\special{fp}%
+\settowidth{\Width}{$x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(3.0500000,0.0000000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{\Depth}%
+\put(0.0000000,1.6900000){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+\settowidth{\Width}{O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(-0.0500000,-0.0500000){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/deffun03.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/deffun03.tex
new file mode 100644
index 0000000000..245702a31e
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/deffun03.tex
@@ -0,0 +1,41 @@
+%%% /Users/Hannya/Desktop/KeTCindy/fig/deffun03.tex
+%%% Generator=template1basic.cdy
+{\unitlength=1cm%
+\begin{picture}%
+(6.03,3.23)(-3.03,-1.67)%
+\special{pn 8}%
+%
+{%
+\color[rgb]{0,0,0}%
+\special{pa -1193 394}\special{pa -1145 394}\special{pa -1098 394}\special{pa -1050 394}%
+\special{pa -1003 394}\special{pa -956 394}\special{pa -908 394}\special{pa -861 394}%
+\special{pa -813 394}\special{pa -766 394}\special{pa -718 394}\special{pa -671 394}%
+\special{pa -623 394}\special{pa -576 394}\special{pa -528 394}\special{pa -481 394}%
+\special{pa -433 394}\special{pa -386 386}\special{pa -338 338}\special{pa -291 291}%
+\special{pa -243 243}\special{pa -196 196}\special{pa -148 148}\special{pa -101 101}%
+\special{pa -53 53}\special{pa -6 6}\special{pa 42 -42}\special{pa 89 -89}%
+\special{pa 137 -137}\special{pa 184 -184}\special{pa 231 -231}\special{pa 279 -279}%
+\special{pa 326 -326}\special{pa 374 -374}\special{pa 421 -394}\special{pa 469 -394}%
+\special{pa 516 -394}\special{pa 564 -394}\special{pa 611 -394}\special{pa 659 -394}%
+\special{pa 706 -394}\special{pa 754 -394}\special{pa 801 -394}\special{pa 849 -394}%
+\special{pa 896 -394}\special{pa 944 -394}\special{pa 991 -394}\special{pa 1039 -394}%
+\special{pa 1086 -394}\special{pa 1134 -394}\special{pa 1181 -394}%
+\special{fp}%
+}%
+\special{pa -1193 -0}\special{pa 1181 -0}%
+\special{fp}%
+\special{pa 0 657}\special{pa 0 -614}%
+\special{fp}%
+\settowidth{\Width}{$x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(3.0500000,0.0000000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{\Depth}%
+\put(0.0000000,1.6100000){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+\settowidth{\Width}{O}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(0.0500000,-0.0500000){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/delete.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/delete.pdf
new file mode 100644
index 0000000000..ff5d3ba54d
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/delete.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/deqplot1.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/deqplot1.tex
new file mode 100644
index 0000000000..6156fda6a6
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/deqplot1.tex
@@ -0,0 +1,56 @@
+%%% fig.tex 2015-8-9 21:16
+%%% fig.sce 2015-8-9 21:16
+{\unitlength=6mm%
+\begin{picture}%
+( 9.00000, 4.00000)( -4.00000, -2.00000)%
+\special{pn 8}%
+%
+\special{pa -911 178}\special{pa -868 204}\special{pa -824 222}\special{pa -781 233}%
+\special{pa -738 236}\special{pa -694 231}\special{pa -651 219}\special{pa -607 199}%
+\special{pa -564 172}\special{pa -521 140}\special{pa -477 103}\special{pa -434 62}%
+\special{pa -390 19}\special{pa -347 -24}\special{pa -304 -66}\special{pa -260 -107}%
+\special{pa -217 -143}\special{pa -174 -175}\special{pa -130 -201}\special{pa -87 -220}%
+\special{pa -43 -232}\special{pa 0 -236}\special{pa 43 -232}\special{pa 87 -220}\special{pa 130 -201}%
+\special{pa 174 -175}\special{pa 217 -143}\special{pa 260 -107}\special{pa 304 -66}%
+\special{pa 347 -24}\special{pa 390 19}\special{pa 434 62}\special{pa 477 103}\special{pa 521 140}%
+\special{pa 564 172}\special{pa 607 199}\special{pa 651 219}\special{pa 694 231}\special{pa 738 236}%
+\special{pa 781 233}\special{pa 824 222}\special{pa 868 204}\special{pa 911 178}\special{pa 955 147}%
+\special{pa 998 111}\special{pa 1041 71}\special{pa 1085 28}\special{pa 1128 -15}%
+\special{pa 1171 -58}%
+\special{fp}%
+\special{pn 8}%
+\special{pa -945 0}\special{pa 1181 0}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 1106 24}\special{pa 1181 0}\special{pa 1106 -24}\special{pa 1106 0}\special{pa 1106 24}%
+\special{sh 1}\special{ip}%
+\special{pn 8}%
+\special{pa 1106 24}\special{pa 1181 0}\special{pa 1106 -24}\special{pa 1106 0}\special{pa 1106 24}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 8}%
+\special{pa 0 472}\special{pa 0 -472}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 24 -398}\special{pa 0 -472}\special{pa -24 -398}\special{pa 0 -398}\special{pa 24 -398}%
+\special{sh 1}\special{ip}%
+\special{pn 8}%
+\special{pa 24 -398}\special{pa 0 -472}\special{pa -24 -398}\special{pa 0 -398}\special{pa 24 -398}%
+\special{fp}%
+\special{pn 8}%
+\settowidth{\Width}{$x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(5.0500,0.0000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{\Depth}%
+\put(0.0000,2.0500){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+%
+\settowidth{\Width}{O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(-0.0500,-0.0500){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/deqplot2.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/deqplot2.tex
new file mode 100644
index 0000000000..953302ea4f
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/deqplot2.tex
@@ -0,0 +1,56 @@
+%%% fig.tex 2015-8-9 21:18
+%%% fig.sce 2015-8-9 21:18
+{\unitlength=6mm%
+\begin{picture}%
+( 9.00000, 4.00000)( -4.00000, -2.00000)%
+\special{pn 8}%
+%
+\special{pa -911 -5}\special{pa -868 -6}\special{pa -824 -7}\special{pa -781 -8}\special{pa -738 -10}%
+\special{pa -694 -12}\special{pa -651 -14}\special{pa -607 -17}\special{pa -564 -20}%
+\special{pa -521 -23}\special{pa -477 -28}\special{pa -434 -32}\special{pa -390 -38}%
+\special{pa -347 -44}\special{pa -304 -51}\special{pa -260 -59}\special{pa -217 -67}%
+\special{pa -174 -77}\special{pa -130 -86}\special{pa -87 -97}\special{pa -43 -107}%
+\special{pa 0 -118}\special{pa 43 -129}\special{pa 87 -140}\special{pa 130 -150}\special{pa 174 -160}%
+\special{pa 217 -169}\special{pa 260 -177}\special{pa 304 -185}\special{pa 347 -192}%
+\special{pa 390 -198}\special{pa 434 -204}\special{pa 477 -209}\special{pa 521 -213}%
+\special{pa 564 -216}\special{pa 607 -219}\special{pa 651 -222}\special{pa 694 -224}%
+\special{pa 738 -226}\special{pa 781 -228}\special{pa 824 -229}\special{pa 868 -230}%
+\special{pa 911 -231}\special{pa 955 -232}\special{pa 998 -233}\special{pa 1041 -233}%
+\special{pa 1085 -234}\special{pa 1128 -234}\special{pa 1171 -235}%
+\special{fp}%
+\special{pn 8}%
+\special{pa -945 0}\special{pa 1181 0}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 1106 24}\special{pa 1181 0}\special{pa 1106 -24}\special{pa 1106 0}\special{pa 1106 24}%
+\special{sh 1}\special{ip}%
+\special{pn 8}%
+\special{pa 1106 24}\special{pa 1181 0}\special{pa 1106 -24}\special{pa 1106 0}\special{pa 1106 24}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 8}%
+\special{pa 0 472}\special{pa 0 -472}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 24 -398}\special{pa 0 -472}\special{pa -24 -398}\special{pa 0 -398}\special{pa 24 -398}%
+\special{sh 1}\special{ip}%
+\special{pn 8}%
+\special{pa 24 -398}\special{pa 0 -472}\special{pa -24 -398}\special{pa 0 -398}\special{pa 24 -398}%
+\special{fp}%
+\special{pn 8}%
+\settowidth{\Width}{$x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(5.0500,0.0000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{\Depth}%
+\put(0.0000,2.0500){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+%
+\settowidth{\Width}{O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(-0.0500,-0.0500){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/deqplot3.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/deqplot3.tex
new file mode 100644
index 0000000000..8b6626e48e
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/deqplot3.tex
@@ -0,0 +1,69 @@
+%%% fig.tex 2015-8-9 21:20
+%%% fig.sce 2015-8-9 21:20
+{\unitlength=8mm%
+\begin{picture}%
+( 5.15000, 2.67000)( -1.09000, -0.35000)%
+\special{pn 8}%
+%
+\special{pa 202 -166}\special{pa 233 -161}\special{pa 271 -159}\special{pa 315 -157}%
+\special{pa 366 -159}\special{pa 425 -162}\special{pa 491 -169}\special{pa 562 -180}%
+\special{pa 636 -195}\special{pa 707 -216}\special{pa 767 -244}\special{pa 807 -280}%
+\special{pa 818 -324}\special{pa 792 -373}\special{pa 730 -425}\special{pa 642 -473}%
+\special{pa 540 -513}\special{pa 440 -539}\special{pa 352 -552}\special{pa 280 -552}%
+\special{pa 224 -542}\special{pa 182 -524}\special{pa 150 -502}\special{pa 127 -477}%
+\special{pa 110 -451}\special{pa 98 -424}\special{pa 89 -398}\special{pa 83 -372}%
+\special{pa 80 -348}\special{pa 78 -325}\special{pa 78 -304}\special{pa 80 -284}\special{pa 83 -265}%
+\special{pa 88 -248}\special{pa 94 -233}\special{pa 103 -218}\special{pa 114 -206}%
+\special{pa 127 -195}\special{pa 143 -185}\special{pa 163 -176}\special{pa 187 -169}%
+\special{pa 216 -164}\special{pa 250 -160}\special{pa 290 -158}\special{pa 338 -158}%
+\special{pa 393 -160}\special{pa 455 -165}\special{pa 523 -174}\special{pa 596 -186}%
+\special{pa 669 -204}\special{pa 736 -228}\special{pa 789 -260}\special{pa 816 -300}%
+\special{pa 811 -346}\special{pa 768 -397}\special{pa 692 -448}\special{pa 595 -493}%
+\special{pa 493 -527}\special{pa 398 -547}\special{pa 317 -553}\special{pa 253 -548}%
+\special{pa 203 -534}\special{pa 166 -515}\special{pa 138 -491}\special{pa 118 -465}%
+\special{pa 104 -438}\special{pa 93 -412}\special{pa 86 -386}\special{pa 81 -361}%
+\special{pa 79 -337}\special{pa 78 -315}\special{pa 79 -294}\special{pa 81 -275}\special{pa 85 -257}%
+\special{pa 91 -241}\special{pa 98 -226}\special{pa 108 -212}\special{pa 119 -200}%
+\special{pa 134 -190}\special{pa 152 -181}\special{pa 173 -173}\special{pa 199 -166}%
+\special{pa 231 -162}\special{pa 268 -159}\special{pa 311 -157}\special{pa 362 -158}%
+\special{pa 420 -162}\special{pa 486 -169}\special{pa 557 -179}\special{pa 630 -194}%
+\special{pa 702 -214}\special{pa 763 -242}\special{pa 805 -277}\special{pa 818 -320}%
+\special{pa 795 -369}\special{pa 736 -421}\special{pa 649 -470}\special{pa 548 -510}%
+\special{pa 448 -538}%
+\special{fp}%
+\special{pn 8}%
+\special{pa -343 0}\special{pa 1279 0}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 1204 24}\special{pa 1279 0}\special{pa 1204 -24}\special{pa 1204 0}\special{pa 1204 24}%
+\special{sh 1}\special{ip}%
+\special{pn 8}%
+\special{pa 1204 24}\special{pa 1279 0}\special{pa 1204 -24}\special{pa 1204 0}\special{pa 1204 24}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 8}%
+\special{pa 0 110}\special{pa 0 -731}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 24 -656}\special{pa 0 -731}\special{pa -24 -656}\special{pa 0 -656}\special{pa 24 -656}%
+\special{sh 1}\special{ip}%
+\special{pn 8}%
+\special{pa 24 -656}\special{pa 0 -731}\special{pa -24 -656}\special{pa 0 -656}\special{pa 24 -656}%
+\special{fp}%
+\special{pn 8}%
+\settowidth{\Width}{$x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.1100,0.0000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{\Depth}%
+\put(0.0000,2.3700){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+%
+\settowidth{\Width}{O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(-0.0500,-0.0500){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/derivative.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/derivative.tex
new file mode 100644
index 0000000000..61b79121b3
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/derivative.tex
@@ -0,0 +1,63 @@
+%%% test.tex 2014-10-22 20:20
+%%% test.sce 2014-10-22 20:20
+{\unitlength=5mm%
+\begin{picture}%
+( 8.00000, 8.00000)( -4.00000, -4.00000)%
+\special{pn 8}%
+%
+\settowidth{\Width}{A}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{A}\settodepth{\Depth}{A}\setlength{\Height}{\Depth}%
+\put(-0.9500,3.0500){\hspace*{\Width}\raisebox{\Height}{A}}%
+%
+%
+\special{pa -469 787}\special{pa -463 709}\special{pa -455 611}\special{pa -447 518}%
+\special{pa -439 430}\special{pa -431 345}\special{pa -423 265}\special{pa -415 189}%
+\special{pa -408 117}\special{pa -400 49}\special{pa -392 -16}\special{pa -384 -76}%
+\special{pa -376 -133}\special{pa -368 -186}\special{pa -360 -236}\special{pa -352 -282}%
+\special{pa -344 -324}\special{pa -336 -364}\special{pa -328 -400}\special{pa -321 -432}%
+\special{pa -313 -462}\special{pa -305 -489}\special{pa -297 -513}\special{pa -289 -533}%
+\special{pa -281 -552}\special{pa -273 -567}\special{pa -265 -580}\special{pa -257 -590}%
+\special{pa -249 -597}\special{pa -241 -603}\special{pa -233 -605}\special{pa -226 -606}%
+\special{pa -218 -605}\special{pa -210 -601}\special{pa -202 -595}\special{pa -194 -587}%
+\special{pa -186 -578}\special{pa -178 -567}\special{pa -170 -553}\special{pa -162 -539}%
+\special{pa -154 -522}\special{pa -146 -505}\special{pa -138 -485}\special{pa -131 -465}%
+\special{pa -123 -443}\special{pa -115 -420}\special{pa -107 -396}\special{pa -99 -371}%
+\special{pa -91 -345}\special{pa -83 -318}\special{pa -75 -290}\special{pa -67 -261}%
+\special{pa -59 -232}\special{pa -51 -202}\special{pa -44 -172}\special{pa -36 -141}%
+\special{pa -28 -110}\special{pa -20 -79}\special{pa -12 -47}\special{pa -4 -16}\special{pa 4 16}%
+\special{pa 12 47}\special{pa 20 79}\special{pa 28 110}\special{pa 36 141}\special{pa 44 172}%
+\special{pa 51 202}\special{pa 59 232}\special{pa 67 261}\special{pa 75 290}\special{pa 83 318}%
+\special{pa 91 345}\special{pa 99 371}\special{pa 107 396}\special{pa 115 420}\special{pa 123 443}%
+\special{pa 131 465}\special{pa 138 485}\special{pa 146 505}\special{pa 154 522}\special{pa 162 539}%
+\special{pa 170 553}\special{pa 178 567}\special{pa 186 578}\special{pa 194 587}\special{pa 202 595}%
+\special{pa 210 601}\special{pa 218 605}\special{pa 226 606}\special{pa 233 605}\special{pa 241 603}%
+\special{pa 249 597}\special{pa 257 590}\special{pa 265 580}\special{pa 273 567}\special{pa 281 552}%
+\special{pa 289 533}\special{pa 297 513}\special{pa 305 489}\special{pa 313 462}\special{pa 321 432}%
+\special{pa 328 400}\special{pa 336 364}\special{pa 344 324}\special{pa 352 282}\special{pa 360 236}%
+\special{pa 368 186}\special{pa 376 133}\special{pa 384 76}\special{pa 392 16}\special{pa 400 -49}%
+\special{pa 408 -117}\special{pa 415 -189}\special{pa 423 -265}\special{pa 431 -345}%
+\special{pa 439 -430}\special{pa 447 -518}\special{pa 455 -611}\special{pa 463 -709}%
+\special{pa 469 -787}%
+\special{fp}%
+\special{pa -394 -787}\special{pa 787 394}%
+\special{fp}%
+\special{pa -787 0}\special{pa 787 0}%
+\special{fp}%
+\special{pa 0 787}\special{pa 0 -787}%
+\special{fp}%
+\settowidth{\Width}{$x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.0500,0.0000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{\Depth}%
+\put(0.0000,4.0500){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+%
+\settowidth{\Width}{O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(-0.0500,-0.0500){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/diffeq1.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/diffeq1.pdf
new file mode 100644
index 0000000000..19db8bb102
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/diffeq1.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/drawfigures1.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/drawfigures1.tex
new file mode 100644
index 0000000000..5371fa27dd
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/drawfigures1.tex
@@ -0,0 +1,748 @@
+%%% /Users/takatoosetsuo/Dropbox/kettoday/0426drawfigures/fig/example1.tex
+%%% Generator=example1.cdy
+{\unitlength=1cm%
+\begin{picture}%
+(10,4)(-2,-1)%
+\special{pn 8}%
+%
+\special{pa 394 -394}\special{pa 391 -443}\special{pa 381 -492}\special{pa 366 -539}%
+\special{pa 345 -583}\special{pa 319 -625}\special{pa 287 -663}\special{pa 251 -697}%
+\special{pa 211 -726}\special{pa 168 -750}\special{pa 122 -768}\special{pa 74 -780}%
+\special{pa 25 -787}\special{pa -25 -787}\special{pa -74 -780}\special{pa -122 -768}%
+\special{pa -168 -750}\special{pa -211 -726}\special{pa -251 -697}\special{pa -287 -663}%
+\special{pa -319 -625}\special{pa -345 -583}\special{pa -366 -539}\special{pa -381 -492}%
+\special{pa -391 -443}\special{pa -394 -394}\special{pa -391 -344}\special{pa -381 -296}%
+\special{pa -366 -249}\special{pa -345 -204}\special{pa -319 -162}\special{pa -287 -124}%
+\special{pa -251 -90}\special{pa -211 -61}\special{pa -168 -37}\special{pa -122 -19}%
+\special{pa -74 -7}\special{pa -25 -1}\special{pa 25 -1}\special{pa 74 -7}%
+\special{pa 122 -19}\special{pa 168 -37}\special{pa 211 -61}\special{pa 251 -90}%
+\special{pa 287 -124}\special{pa 319 -162}\special{pa 345 -204}\special{pa 366 -249}%
+\special{pa 381 -296}\special{pa 391 -344}\special{pa 394 -394}%
+\special{fp}%
+{%
+\color[rgb]{1,0,0}%
+{\special{pn 0}\color[rgb]{1,0,0}%
+\special{pa 11 -11}\special{pa 5 -15}\special{pa -2 -16}\special{pa -8 -13}\special{pa -13 -8}\special{pa -16 -2}\special{pa -15 5}\special{pa -11 11}\special{pa -5 15}\special{pa 2 16}\special{pa 8 13}\special{pa 13 8}\special{pa 16 2}\special{pa 15 -5}\special{pa 11 -11}\special{sh}\special{fp}}%
+\special{pn 4}\special{pa 11 -11}\special{pa 5 -15}\special{pa -2 -16}\special{pa -8 -13}\special{pa -13 -8}\special{pa -16 -2}\special{pa -15 5}\special{pa -11 11}\special{pa -5 15}\special{pa 2 16}\special{pa 8 13}\special{pa 13 8}\special{pa 16 2}\special{pa 15 -5}\special{pa 11 -11}\special{fp}%
+}%
+\special{pn 2}%
+\special{pa 463 -317}\special{pa 470 -366}\special{pa 470 -415}\special{pa 465 -464}%
+\special{pa 453 -512}\special{pa 435 -559}\special{pa 411 -602}\special{pa 383 -642}%
+\special{pa 349 -679}\special{pa 311 -710}\special{pa 270 -737}\special{pa 225 -759}%
+\special{pa 178 -774}\special{pa 130 -784}\special{pa 80 -787}\special{pa 31 -785}%
+\special{pa -18 -776}\special{pa -65 -761}\special{pa -110 -740}\special{pa -152 -714}%
+\special{pa -190 -683}\special{pa -224 -647}\special{pa -253 -607}\special{pa -278 -564}%
+\special{pa -296 -518}\special{pa -309 -471}\special{pa -315 -422}\special{pa -316 -372}%
+\special{pa -310 -323}\special{pa -298 -275}\special{pa -280 -229}\special{pa -257 -185}%
+\special{pa -228 -145}\special{pa -194 -109}\special{pa -157 -77}\special{pa -115 -50}%
+\special{pa -70 -29}\special{pa -24 -13}\special{pa 25 -4}\special{pa 74 -0}%
+\special{pa 124 -3}\special{pa 172 -12}\special{pa 219 -27}\special{pa 264 -47}%
+\special{pa 306 -73}\special{pa 345 -105}\special{pa 379 -140}\special{pa 408 -180}%
+\special{pa 432 -223}\special{pa 451 -269}\special{pa 463 -317}%
+\special{fp}%
+\special{pn 8}%
+{%
+\color[rgb]{1,0,0}%
+{\special{pn 0}\color[rgb]{1,0,0}%
+\special{pa 12 -19}\special{pa 6 -22}\special{pa -1 -23}\special{pa -8 -21}\special{pa -13 -16}\special{pa -15 -9}\special{pa -14 -2}\special{pa -11 4}\special{pa -5 7}\special{pa 2 8}\special{pa 9 6}\special{pa 14 1}\special{pa 16 -6}\special{pa 15 -13}\special{pa 12 -19}\special{sh}\special{fp}}%
+\special{pn 4}\special{pa 12 -19}\special{pa 6 -22}\special{pa -1 -23}\special{pa -8 -21}\special{pa -13 -16}\special{pa -15 -9}\special{pa -14 -2}\special{pa -11 4}\special{pa -5 7}\special{pa 2 8}\special{pa 9 6}\special{pa 14 1}\special{pa 16 -6}\special{pa 15 -13}\special{pa 12 -19}\special{fp}%
+}%
+\special{pn 2}%
+\special{pa 518 -243}\special{pa 534 -290}\special{pa 544 -338}\special{pa 548 -388}%
+\special{pa 546 -437}\special{pa 537 -486}\special{pa 523 -533}\special{pa 503 -578}%
+\special{pa 477 -620}\special{pa 446 -659}\special{pa 410 -693}\special{pa 371 -723}%
+\special{pa 328 -747}\special{pa 282 -766}\special{pa 234 -779}\special{pa 185 -786}%
+\special{pa 136 -787}\special{pa 87 -782}\special{pa 39 -770}\special{pa -7 -753}%
+\special{pa -51 -729}\special{pa -92 -701}\special{pa -128 -668}\special{pa -160 -630}%
+\special{pa -187 -589}\special{pa -209 -544}\special{pa -225 -498}\special{pa -235 -449}%
+\special{pa -239 -400}\special{pa -237 -350}\special{pa -228 -302}\special{pa -214 -255}%
+\special{pa -193 -209}\special{pa -168 -167}\special{pa -137 -129}\special{pa -101 -94}%
+\special{pa -62 -65}\special{pa -19 -40}\special{pa 27 -21}\special{pa 75 -8}%
+\special{pa 124 -1}\special{pa 173 -0}\special{pa 222 -6}\special{pa 270 -17}%
+\special{pa 317 -35}\special{pa 360 -58}\special{pa 401 -86}\special{pa 437 -120}%
+\special{pa 469 -157}\special{pa 497 -199}\special{pa 518 -243}%
+\special{fp}%
+\special{pn 8}%
+{%
+\color[rgb]{1,0,0}%
+{\special{pn 0}\color[rgb]{1,0,0}%
+\special{pa 15 -41}\special{pa 9 -45}\special{pa 2 -46}\special{pa -4 -43}\special{pa -9 -38}\special{pa -12 -32}\special{pa -11 -25}\special{pa -7 -19}\special{pa -1 -15}\special{pa 6 -14}\special{pa 12 -17}\special{pa 17 -22}\special{pa 20 -28}\special{pa 19 -35}\special{pa 15 -41}\special{sh}\special{fp}}%
+\special{pn 4}\special{pa 15 -41}\special{pa 9 -45}\special{pa 2 -46}\special{pa -4 -43}\special{pa -9 -38}\special{pa -12 -32}\special{pa -11 -25}\special{pa -7 -19}\special{pa -1 -15}\special{pa 6 -14}\special{pa 12 -17}\special{pa 17 -22}\special{pa 20 -28}\special{pa 19 -35}\special{pa 15 -41}\special{fp}%
+}%
+\special{pn 2}%
+\special{pa 559 -175}\special{pa 584 -218}\special{pa 603 -263}\special{pa 617 -311}%
+\special{pa 624 -360}\special{pa 625 -409}\special{pa 620 -458}\special{pa 609 -507}%
+\special{pa 592 -553}\special{pa 569 -597}\special{pa 541 -637}\special{pa 508 -674}%
+\special{pa 471 -707}\special{pa 430 -734}\special{pa 385 -756}\special{pa 339 -773}%
+\special{pa 290 -783}\special{pa 241 -787}\special{pa 192 -785}\special{pa 143 -777}%
+\special{pa 96 -763}\special{pa 50 -743}\special{pa 8 -718}\special{pa -31 -687}%
+\special{pa -65 -652}\special{pa -95 -612}\special{pa -120 -570}\special{pa -140 -524}%
+\special{pa -153 -477}\special{pa -160 -428}\special{pa -161 -378}\special{pa -156 -329}%
+\special{pa -145 -281}\special{pa -128 -235}\special{pa -105 -191}\special{pa -77 -150}%
+\special{pa -44 -113}\special{pa -7 -81}\special{pa 34 -53}\special{pa 78 -31}%
+\special{pa 125 -15}\special{pa 173 -4}\special{pa 223 -0}\special{pa 272 -2}%
+\special{pa 321 -10}\special{pa 368 -24}\special{pa 413 -44}\special{pa 456 -70}%
+\special{pa 495 -100}\special{pa 529 -136}\special{pa 559 -175}%
+\special{fp}%
+\special{pn 8}%
+{%
+\color[rgb]{1,0,0}%
+{\special{pn 0}\color[rgb]{1,0,0}%
+\special{pa 24 -77}\special{pa 18 -81}\special{pa 11 -82}\special{pa 5 -80}\special{pa 0 -75}\special{pa -2 -68}\special{pa -2 -61}\special{pa 2 -55}\special{pa 8 -51}\special{pa 15 -51}\special{pa 22 -53}\special{pa 27 -58}\special{pa 29 -65}\special{pa 28 -72}\special{pa 24 -77}\special{sh}\special{fp}}%
+\special{pn 4}\special{pa 24 -77}\special{pa 18 -81}\special{pa 11 -82}\special{pa 5 -80}\special{pa 0 -75}\special{pa -2 -68}\special{pa -2 -61}\special{pa 2 -55}\special{pa 8 -51}\special{pa 15 -51}\special{pa 22 -53}\special{pa 27 -58}\special{pa 29 -65}\special{pa 28 -72}\special{pa 24 -77}\special{fp}%
+}%
+\special{pn 2}%
+\special{pa 588 -115}\special{pa 620 -152}\special{pa 648 -193}\special{pa 671 -237}%
+\special{pa 687 -284}\special{pa 698 -332}\special{pa 703 -381}\special{pa 701 -431}%
+\special{pa 693 -480}\special{pa 680 -527}\special{pa 660 -572}\special{pa 635 -615}%
+\special{pa 605 -654}\special{pa 570 -689}\special{pa 531 -719}\special{pa 488 -744}%
+\special{pa 443 -764}\special{pa 395 -778}\special{pa 346 -786}\special{pa 297 -787}%
+\special{pa 248 -783}\special{pa 199 -772}\special{pa 153 -755}\special{pa 109 -733}%
+\special{pa 68 -705}\special{pa 31 -672}\special{pa -2 -635}\special{pa -30 -594}%
+\special{pa -52 -550}\special{pa -69 -504}\special{pa -80 -455}\special{pa -84 -406}%
+\special{pa -83 -357}\special{pa -75 -308}\special{pa -61 -260}\special{pa -42 -215}%
+\special{pa -16 -172}\special{pa 14 -133}\special{pa 49 -98}\special{pa 88 -68}%
+\special{pa 130 -43}\special{pa 176 -23}\special{pa 223 -9}\special{pa 272 -2}%
+\special{pa 322 -0}\special{pa 371 -5}\special{pa 419 -16}\special{pa 466 -32}%
+\special{pa 510 -55}\special{pa 551 -83}\special{pa 588 -115}%
+\special{fp}%
+\special{pn 8}%
+{%
+\color[rgb]{1,0,0}%
+{\special{pn 0}\color[rgb]{1,0,0}%
+\special{pa 42 -126}\special{pa 36 -130}\special{pa 29 -131}\special{pa 22 -129}\special{pa 17 -124}\special{pa 15 -117}\special{pa 16 -110}\special{pa 20 -104}\special{pa 26 -100}\special{pa 33 -100}\special{pa 39 -102}\special{pa 44 -107}\special{pa 46 -114}\special{pa 46 -121}\special{pa 42 -126}\special{sh}\special{fp}}%
+\special{pn 4}\special{pa 42 -126}\special{pa 36 -130}\special{pa 29 -131}\special{pa 22 -129}\special{pa 17 -124}\special{pa 15 -117}\special{pa 16 -110}\special{pa 20 -104}\special{pa 26 -100}\special{pa 33 -100}\special{pa 39 -102}\special{pa 44 -107}\special{pa 46 -114}\special{pa 46 -121}\special{pa 42 -126}\special{fp}%
+}%
+\special{pn 2}%
+\special{pa 605 -66}\special{pa 645 -96}\special{pa 680 -131}\special{pa 710 -170}%
+\special{pa 736 -212}\special{pa 756 -257}\special{pa 770 -305}\special{pa 778 -354}%
+\special{pa 780 -403}\special{pa 776 -452}\special{pa 765 -501}\special{pa 749 -547}%
+\special{pa 727 -591}\special{pa 699 -633}\special{pa 667 -670}\special{pa 630 -703}%
+\special{pa 590 -731}\special{pa 546 -754}\special{pa 499 -771}\special{pa 451 -782}%
+\special{pa 402 -787}\special{pa 353 -786}\special{pa 304 -779}\special{pa 256 -765}%
+\special{pa 211 -746}\special{pa 168 -721}\special{pa 128 -691}\special{pa 93 -656}%
+\special{pa 63 -618}\special{pa 37 -575}\special{pa 17 -530}\special{pa 3 -483}%
+\special{pa -5 -434}\special{pa -7 -384}\special{pa -3 -335}\special{pa 8 -287}%
+\special{pa 24 -240}\special{pa 46 -196}\special{pa 74 -155}\special{pa 106 -118}%
+\special{pa 143 -85}\special{pa 183 -56}\special{pa 227 -34}\special{pa 274 -17}%
+\special{pa 322 -5}\special{pa 371 -0}\special{pa 420 -1}\special{pa 469 -9}%
+\special{pa 517 -22}\special{pa 562 -42}\special{pa 605 -66}%
+\special{fp}%
+\special{pn 8}%
+{%
+\color[rgb]{1,0,0}%
+{\special{pn 0}\color[rgb]{1,0,0}%
+\special{pa 70 -186}\special{pa 64 -190}\special{pa 57 -191}\special{pa 51 -188}\special{pa 46 -183}\special{pa 44 -177}\special{pa 44 -170}\special{pa 48 -164}\special{pa 54 -160}\special{pa 61 -159}\special{pa 68 -162}\special{pa 72 -167}\special{pa 75 -173}\special{pa 74 -180}\special{pa 70 -186}\special{sh}\special{fp}}%
+\special{pn 4}\special{pa 70 -186}\special{pa 64 -190}\special{pa 57 -191}\special{pa 51 -188}\special{pa 46 -183}\special{pa 44 -177}\special{pa 44 -170}\special{pa 48 -164}\special{pa 54 -160}\special{pa 61 -159}\special{pa 68 -162}\special{pa 72 -167}\special{pa 75 -173}\special{pa 74 -180}\special{pa 70 -186}\special{fp}%
+}%
+\special{pn 2}%
+\special{pa 614 -30}\special{pa 659 -52}\special{pa 700 -79}\special{pa 738 -111}%
+\special{pa 771 -148}\special{pa 800 -188}\special{pa 823 -232}\special{pa 840 -278}%
+\special{pa 852 -326}\special{pa 857 -375}\special{pa 856 -425}\special{pa 849 -474}%
+\special{pa 836 -521}\special{pa 817 -567}\special{pa 793 -610}\special{pa 763 -649}%
+\special{pa 729 -685}\special{pa 690 -716}\special{pa 648 -742}\special{pa 603 -762}%
+\special{pa 556 -777}\special{pa 507 -785}\special{pa 458 -787}\special{pa 408 -783}%
+\special{pa 360 -773}\special{pa 313 -757}\special{pa 269 -736}\special{pa 227 -709}%
+\special{pa 190 -676}\special{pa 157 -640}\special{pa 128 -599}\special{pa 105 -556}%
+\special{pa 88 -509}\special{pa 76 -461}\special{pa 71 -412}\special{pa 71 -363}%
+\special{pa 78 -314}\special{pa 91 -266}\special{pa 110 -220}\special{pa 135 -178}%
+\special{pa 164 -138}\special{pa 199 -103}\special{pa 237 -72}\special{pa 280 -46}%
+\special{pa 325 -25}\special{pa 372 -11}\special{pa 421 -2}\special{pa 470 -0}%
+\special{pa 519 -4}\special{pa 568 -14}\special{pa 614 -30}%
+\special{fp}%
+\special{pn 8}%
+{%
+\color[rgb]{1,0,0}%
+{\special{pn 0}\color[rgb]{1,0,0}%
+\special{pa 111 -254}\special{pa 105 -258}\special{pa 98 -259}\special{pa 92 -256}\special{pa 87 -251}\special{pa 84 -245}\special{pa 85 -238}\special{pa 89 -232}\special{pa 95 -228}\special{pa 102 -227}\special{pa 108 -230}\special{pa 113 -235}\special{pa 116 -241}\special{pa 115 -248}\special{pa 111 -254}\special{sh}\special{fp}}%
+\special{pn 4}\special{pa 111 -254}\special{pa 105 -258}\special{pa 98 -259}\special{pa 92 -256}\special{pa 87 -251}\special{pa 84 -245}\special{pa 85 -238}\special{pa 89 -232}\special{pa 95 -228}\special{pa 102 -227}\special{pa 108 -230}\special{pa 113 -235}\special{pa 116 -241}\special{pa 115 -248}\special{pa 111 -254}\special{fp}%
+}%
+\special{pn 2}%
+\special{pa 618 -8}\special{pa 666 -20}\special{pa 712 -39}\special{pa 755 -63}%
+\special{pa 794 -92}\special{pa 830 -126}\special{pa 861 -165}\special{pa 888 -207}%
+\special{pa 908 -252}\special{pa 923 -299}\special{pa 932 -347}\special{pa 935 -397}%
+\special{pa 931 -446}\special{pa 922 -495}\special{pa 906 -542}\special{pa 885 -586}%
+\special{pa 858 -628}\special{pa 826 -665}\special{pa 790 -699}\special{pa 749 -728}%
+\special{pa 706 -751}\special{pa 660 -769}\special{pa 612 -781}\special{pa 563 -787}%
+\special{pa 513 -786}\special{pa 464 -780}\special{pa 417 -767}\special{pa 371 -749}%
+\special{pa 328 -724}\special{pa 288 -695}\special{pa 252 -661}\special{pa 221 -623}%
+\special{pa 195 -581}\special{pa 174 -536}\special{pa 159 -489}\special{pa 150 -440}%
+\special{pa 147 -391}\special{pa 151 -341}\special{pa 161 -293}\special{pa 176 -246}%
+\special{pa 198 -201}\special{pa 224 -160}\special{pa 256 -122}\special{pa 293 -88}%
+\special{pa 333 -60}\special{pa 376 -36}\special{pa 422 -18}\special{pa 470 -6}%
+\special{pa 519 -1}\special{pa 569 -1}\special{pa 618 -8}%
+\special{fp}%
+\special{pn 8}%
+{%
+\color[rgb]{1,0,0}%
+{\special{pn 0}\color[rgb]{1,0,0}%
+\special{pa 166 -328}\special{pa 160 -332}\special{pa 153 -333}\special{pa 147 -330}\special{pa 142 -325}\special{pa 139 -319}\special{pa 140 -312}\special{pa 144 -306}\special{pa 150 -302}\special{pa 157 -301}\special{pa 163 -304}\special{pa 168 -309}\special{pa 171 -315}\special{pa 170 -322}\special{pa 166 -328}\special{sh}\special{fp}}%
+\special{pn 4}\special{pa 166 -328}\special{pa 160 -332}\special{pa 153 -333}\special{pa 147 -330}\special{pa 142 -325}\special{pa 139 -319}\special{pa 140 -312}\special{pa 144 -306}\special{pa 150 -302}\special{pa 157 -301}\special{pa 163 -304}\special{pa 168 -309}\special{pa 171 -315}\special{pa 170 -322}\special{pa 166 -328}\special{fp}%
+}%
+\special{pn 2}%
+\special{pa 618 -0}\special{pa 668 -3}\special{pa 716 -12}\special{pa 763 -28}%
+\special{pa 808 -49}\special{pa 850 -75}\special{pa 888 -107}\special{pa 922 -143}%
+\special{pa 951 -183}\special{pa 975 -226}\special{pa 993 -272}\special{pa 1005 -320}%
+\special{pa 1011 -369}\special{pa 1011 -418}\special{pa 1005 -467}\special{pa 993 -515}%
+\special{pa 975 -561}\special{pa 951 -605}\special{pa 922 -645}\special{pa 888 -681}%
+\special{pa 850 -712}\special{pa 808 -739}\special{pa 763 -760}\special{pa 716 -775}%
+\special{pa 668 -784}\special{pa 618 -787}\special{pa 569 -784}\special{pa 521 -775}%
+\special{pa 473 -760}\special{pa 429 -739}\special{pa 387 -712}\special{pa 349 -681}%
+\special{pa 315 -645}\special{pa 286 -605}\special{pa 262 -561}\special{pa 244 -515}%
+\special{pa 232 -467}\special{pa 226 -418}\special{pa 226 -369}\special{pa 232 -320}%
+\special{pa 244 -272}\special{pa 262 -226}\special{pa 286 -183}\special{pa 315 -143}%
+\special{pa 349 -107}\special{pa 387 -75}\special{pa 429 -49}\special{pa 473 -28}%
+\special{pa 521 -12}\special{pa 569 -3}\special{pa 618 -0}%
+\special{fp}%
+\special{pn 8}%
+{%
+\color[rgb]{1,0,0}%
+{\special{pn 0}\color[rgb]{1,0,0}%
+\special{pa 236 -405}\special{pa 230 -409}\special{pa 223 -409}\special{pa 216 -407}\special{pa 211 -402}\special{pa 209 -395}\special{pa 210 -388}\special{pa 214 -383}\special{pa 220 -379}\special{pa 226 -378}\special{pa 233 -380}\special{pa 238 -385}\special{pa 240 -392}\special{pa 240 -399}\special{pa 236 -405}\special{sh}\special{fp}}%
+\special{pn 4}\special{pa 236 -405}\special{pa 230 -409}\special{pa 223 -409}\special{pa 216 -407}\special{pa 211 -402}\special{pa 209 -395}\special{pa 210 -388}\special{pa 214 -383}\special{pa 220 -379}\special{pa 226 -378}\special{pa 233 -380}\special{pa 238 -385}\special{pa 240 -392}\special{pa 240 -399}\special{pa 236 -405}\special{fp}%
+}%
+\special{pn 2}%
+\special{pa 619 -8}\special{pa 668 -1}\special{pa 717 -1}\special{pa 766 -6}%
+\special{pa 814 -18}\special{pa 861 -36}\special{pa 904 -60}\special{pa 944 -88}%
+\special{pa 981 -122}\special{pa 1012 -160}\special{pa 1039 -201}\special{pa 1061 -246}%
+\special{pa 1076 -293}\special{pa 1086 -341}\special{pa 1089 -391}\special{pa 1087 -440}%
+\special{pa 1078 -489}\special{pa 1063 -536}\special{pa 1042 -581}\special{pa 1016 -623}%
+\special{pa 985 -661}\special{pa 949 -695}\special{pa 909 -724}\special{pa 866 -749}%
+\special{pa 820 -767}\special{pa 773 -780}\special{pa 724 -786}\special{pa 674 -787}%
+\special{pa 625 -781}\special{pa 577 -769}\special{pa 531 -751}\special{pa 487 -728}%
+\special{pa 447 -699}\special{pa 411 -665}\special{pa 379 -628}\special{pa 352 -586}%
+\special{pa 331 -542}\special{pa 315 -495}\special{pa 306 -446}\special{pa 302 -397}%
+\special{pa 305 -347}\special{pa 314 -299}\special{pa 329 -252}\special{pa 349 -207}%
+\special{pa 375 -165}\special{pa 407 -126}\special{pa 442 -92}\special{pa 482 -63}%
+\special{pa 525 -39}\special{pa 571 -20}\special{pa 619 -8}%
+\special{fp}%
+\special{pn 8}%
+{%
+\color[rgb]{1,0,0}%
+{\special{pn 0}\color[rgb]{1,0,0}%
+\special{pa 321 -482}\special{pa 315 -485}\special{pa 308 -486}\special{pa 301 -484}\special{pa 296 -479}\special{pa 294 -472}\special{pa 295 -465}\special{pa 298 -459}\special{pa 304 -456}\special{pa 311 -455}\special{pa 318 -457}\special{pa 323 -462}\special{pa 325 -469}\special{pa 324 -476}\special{pa 321 -482}\special{sh}\special{fp}}%
+\special{pn 4}\special{pa 321 -482}\special{pa 315 -485}\special{pa 308 -486}\special{pa 301 -484}\special{pa 296 -479}\special{pa 294 -472}\special{pa 295 -465}\special{pa 298 -459}\special{pa 304 -456}\special{pa 311 -455}\special{pa 318 -457}\special{pa 323 -462}\special{pa 325 -469}\special{pa 324 -476}\special{pa 321 -482}\special{fp}%
+}%
+\special{pn 2}%
+\special{pa 622 -30}\special{pa 669 -14}\special{pa 718 -4}\special{pa 767 -0}%
+\special{pa 816 -2}\special{pa 865 -11}\special{pa 912 -25}\special{pa 957 -46}%
+\special{pa 999 -72}\special{pa 1038 -103}\special{pa 1072 -138}\special{pa 1102 -178}%
+\special{pa 1127 -220}\special{pa 1146 -266}\special{pa 1159 -314}\special{pa 1166 -363}%
+\special{pa 1166 -412}\special{pa 1161 -461}\special{pa 1149 -509}\special{pa 1132 -556}%
+\special{pa 1109 -599}\special{pa 1080 -640}\special{pa 1047 -676}\special{pa 1009 -709}%
+\special{pa 968 -736}\special{pa 924 -757}\special{pa 877 -773}\special{pa 829 -783}%
+\special{pa 779 -787}\special{pa 730 -785}\special{pa 681 -777}\special{pa 634 -762}%
+\special{pa 589 -742}\special{pa 547 -716}\special{pa 508 -685}\special{pa 474 -649}%
+\special{pa 444 -610}\special{pa 419 -567}\special{pa 401 -521}\special{pa 388 -474}%
+\special{pa 381 -425}\special{pa 380 -375}\special{pa 385 -326}\special{pa 397 -278}%
+\special{pa 414 -232}\special{pa 437 -188}\special{pa 466 -148}\special{pa 499 -111}%
+\special{pa 537 -79}\special{pa 578 -52}\special{pa 622 -30}%
+\special{fp}%
+\special{pn 8}%
+{%
+\color[rgb]{1,0,0}%
+{\special{pn 0}\color[rgb]{1,0,0}%
+\special{pa 420 -555}\special{pa 415 -559}\special{pa 408 -560}\special{pa 401 -558}\special{pa 396 -553}\special{pa 394 -546}\special{pa 394 -539}\special{pa 398 -533}\special{pa 404 -529}\special{pa 411 -529}\special{pa 418 -531}\special{pa 423 -536}\special{pa 425 -543}\special{pa 424 -550}\special{pa 420 -555}\special{sh}\special{fp}}%
+\special{pn 4}\special{pa 420 -555}\special{pa 415 -559}\special{pa 408 -560}\special{pa 401 -558}\special{pa 396 -553}\special{pa 394 -546}\special{pa 394 -539}\special{pa 398 -533}\special{pa 404 -529}\special{pa 411 -529}\special{pa 418 -531}\special{pa 423 -536}\special{pa 425 -543}\special{pa 424 -550}\special{pa 420 -555}\special{fp}%
+}%
+\special{pn 2}%
+\special{pa 632 -66}\special{pa 674 -42}\special{pa 720 -22}\special{pa 767 -9}%
+\special{pa 816 -1}\special{pa 866 -0}\special{pa 915 -5}\special{pa 963 -17}%
+\special{pa 1010 -34}\special{pa 1053 -56}\special{pa 1094 -85}\special{pa 1131 -118}%
+\special{pa 1163 -155}\special{pa 1191 -196}\special{pa 1213 -240}\special{pa 1229 -287}%
+\special{pa 1240 -335}\special{pa 1244 -384}\special{pa 1242 -434}\special{pa 1234 -483}%
+\special{pa 1220 -530}\special{pa 1200 -575}\special{pa 1174 -618}\special{pa 1144 -656}%
+\special{pa 1108 -691}\special{pa 1069 -721}\special{pa 1026 -746}\special{pa 981 -765}%
+\special{pa 933 -779}\special{pa 884 -786}\special{pa 835 -787}\special{pa 786 -782}%
+\special{pa 738 -771}\special{pa 691 -754}\special{pa 647 -731}\special{pa 607 -703}%
+\special{pa 570 -670}\special{pa 537 -633}\special{pa 510 -591}\special{pa 488 -547}%
+\special{pa 471 -501}\special{pa 461 -452}\special{pa 457 -403}\special{pa 459 -354}%
+\special{pa 467 -305}\special{pa 481 -257}\special{pa 501 -212}\special{pa 526 -170}%
+\special{pa 557 -131}\special{pa 592 -96}\special{pa 632 -66}%
+\special{fp}%
+\special{pn 8}%
+{%
+\color[rgb]{1,0,0}%
+{\special{pn 0}\color[rgb]{1,0,0}%
+\special{pa 534 -624}\special{pa 528 -627}\special{pa 521 -628}\special{pa 515 -626}\special{pa 510 -621}\special{pa 507 -614}\special{pa 508 -607}\special{pa 512 -601}\special{pa 518 -598}\special{pa 525 -597}\special{pa 531 -599}\special{pa 536 -604}\special{pa 539 -611}\special{pa 538 -618}\special{pa 534 -624}\special{sh}\special{fp}}%
+\special{pn 4}\special{pa 534 -624}\special{pa 528 -627}\special{pa 521 -628}\special{pa 515 -626}\special{pa 510 -621}\special{pa 507 -614}\special{pa 508 -607}\special{pa 512 -601}\special{pa 518 -598}\special{pa 525 -597}\special{pa 531 -599}\special{pa 536 -604}\special{pa 539 -611}\special{pa 538 -618}\special{pa 534 -624}\special{fp}%
+}%
+\special{pn 2}%
+\special{pa 649 -115}\special{pa 686 -83}\special{pa 727 -55}\special{pa 771 -32}%
+\special{pa 818 -16}\special{pa 866 -5}\special{pa 915 -0}\special{pa 965 -2}%
+\special{pa 1014 -9}\special{pa 1061 -23}\special{pa 1106 -43}\special{pa 1149 -68}%
+\special{pa 1188 -98}\special{pa 1223 -133}\special{pa 1253 -172}\special{pa 1278 -215}%
+\special{pa 1298 -260}\special{pa 1312 -308}\special{pa 1320 -357}\special{pa 1321 -406}%
+\special{pa 1316 -455}\special{pa 1306 -504}\special{pa 1289 -550}\special{pa 1267 -594}%
+\special{pa 1239 -635}\special{pa 1206 -672}\special{pa 1169 -705}\special{pa 1128 -733}%
+\special{pa 1084 -755}\special{pa 1037 -772}\special{pa 989 -783}\special{pa 940 -787}%
+\special{pa 891 -786}\special{pa 842 -778}\special{pa 794 -764}\special{pa 749 -744}%
+\special{pa 706 -719}\special{pa 667 -689}\special{pa 632 -654}\special{pa 602 -615}%
+\special{pa 577 -572}\special{pa 557 -527}\special{pa 543 -480}\special{pa 536 -431}%
+\special{pa 534 -381}\special{pa 539 -332}\special{pa 550 -284}\special{pa 566 -237}%
+\special{pa 589 -193}\special{pa 617 -152}\special{pa 649 -115}%
+\special{fp}%
+\special{pn 8}%
+{%
+\color[rgb]{1,0,0}%
+{\special{pn 0}\color[rgb]{1,0,0}%
+\special{pa 660 -683}\special{pa 654 -687}\special{pa 647 -688}\special{pa 641 -685}\special{pa 636 -680}\special{pa 634 -674}\special{pa 634 -667}\special{pa 638 -661}\special{pa 644 -657}\special{pa 651 -656}\special{pa 658 -659}\special{pa 663 -664}\special{pa 665 -670}\special{pa 664 -677}\special{pa 660 -683}\special{sh}\special{fp}}%
+\special{pn 4}\special{pa 660 -683}\special{pa 654 -687}\special{pa 647 -688}\special{pa 641 -685}\special{pa 636 -680}\special{pa 634 -674}\special{pa 634 -667}\special{pa 638 -661}\special{pa 644 -657}\special{pa 651 -656}\special{pa 658 -659}\special{pa 663 -664}\special{pa 665 -670}\special{pa 664 -677}\special{pa 660 -683}\special{fp}%
+}%
+\special{pn 2}%
+\special{pa 678 -175}\special{pa 708 -136}\special{pa 742 -100}\special{pa 781 -70}%
+\special{pa 823 -44}\special{pa 869 -24}\special{pa 916 -10}\special{pa 965 -2}%
+\special{pa 1014 -0}\special{pa 1063 -4}\special{pa 1112 -15}\special{pa 1158 -31}%
+\special{pa 1203 -53}\special{pa 1244 -81}\special{pa 1281 -113}\special{pa 1314 -150}%
+\special{pa 1342 -191}\special{pa 1365 -235}\special{pa 1382 -281}\special{pa 1393 -329}%
+\special{pa 1398 -378}\special{pa 1397 -428}\special{pa 1390 -477}\special{pa 1376 -524}%
+\special{pa 1357 -570}\special{pa 1332 -612}\special{pa 1302 -652}\special{pa 1268 -687}%
+\special{pa 1229 -718}\special{pa 1186 -743}\special{pa 1141 -763}\special{pa 1094 -777}%
+\special{pa 1045 -785}\special{pa 996 -787}\special{pa 946 -783}\special{pa 898 -773}%
+\special{pa 851 -756}\special{pa 807 -734}\special{pa 766 -707}\special{pa 729 -674}%
+\special{pa 696 -637}\special{pa 668 -597}\special{pa 645 -553}\special{pa 628 -507}%
+\special{pa 617 -458}\special{pa 612 -409}\special{pa 613 -360}\special{pa 620 -311}%
+\special{pa 633 -263}\special{pa 653 -218}\special{pa 678 -175}%
+\special{fp}%
+\special{pn 8}%
+{%
+\color[rgb]{1,0,0}%
+{\special{pn 0}\color[rgb]{1,0,0}%
+\special{pa 797 -732}\special{pa 791 -736}\special{pa 784 -737}\special{pa 778 -734}\special{pa 773 -729}\special{pa 771 -723}\special{pa 771 -716}\special{pa 775 -710}\special{pa 781 -706}\special{pa 788 -705}\special{pa 795 -708}\special{pa 800 -713}\special{pa 802 -719}\special{pa 801 -726}\special{pa 797 -732}\special{sh}\special{fp}}%
+\special{pn 4}\special{pa 797 -732}\special{pa 791 -736}\special{pa 784 -737}\special{pa 778 -734}\special{pa 773 -729}\special{pa 771 -723}\special{pa 771 -716}\special{pa 775 -710}\special{pa 781 -706}\special{pa 788 -705}\special{pa 795 -708}\special{pa 800 -713}\special{pa 802 -719}\special{pa 801 -726}\special{pa 797 -732}\special{fp}%
+}%
+\special{pn 2}%
+\special{pa 719 -243}\special{pa 740 -199}\special{pa 767 -157}\special{pa 800 -120}%
+\special{pa 836 -86}\special{pa 877 -58}\special{pa 920 -35}\special{pa 966 -17}%
+\special{pa 1015 -6}\special{pa 1064 -0}\special{pa 1113 -1}\special{pa 1162 -8}%
+\special{pa 1210 -21}\special{pa 1255 -40}\special{pa 1298 -65}\special{pa 1338 -94}%
+\special{pa 1373 -129}\special{pa 1404 -167}\special{pa 1430 -209}\special{pa 1451 -255}%
+\special{pa 1465 -302}\special{pa 1474 -350}\special{pa 1476 -400}\special{pa 1472 -449}%
+\special{pa 1462 -498}\special{pa 1446 -544}\special{pa 1424 -589}\special{pa 1397 -630}%
+\special{pa 1365 -668}\special{pa 1328 -701}\special{pa 1288 -729}\special{pa 1244 -753}%
+\special{pa 1198 -770}\special{pa 1150 -782}\special{pa 1101 -787}\special{pa 1051 -786}%
+\special{pa 1002 -779}\special{pa 955 -766}\special{pa 909 -747}\special{pa 866 -723}%
+\special{pa 827 -693}\special{pa 791 -659}\special{pa 760 -620}\special{pa 734 -578}%
+\special{pa 714 -533}\special{pa 699 -486}\special{pa 691 -437}\special{pa 689 -388}%
+\special{pa 692 -338}\special{pa 702 -290}\special{pa 719 -243}%
+\special{fp}%
+\special{pn 8}%
+{%
+\color[rgb]{1,0,0}%
+{\special{pn 0}\color[rgb]{1,0,0}%
+\special{pa 943 -769}\special{pa 937 -772}\special{pa 930 -773}\special{pa 923 -771}\special{pa 918 -766}\special{pa 916 -759}\special{pa 917 -752}\special{pa 920 -746}\special{pa 926 -743}\special{pa 933 -742}\special{pa 940 -744}\special{pa 945 -749}\special{pa 947 -756}\special{pa 946 -763}\special{pa 943 -769}\special{sh}\special{fp}}%
+\special{pn 4}\special{pa 943 -769}\special{pa 937 -772}\special{pa 930 -773}\special{pa 923 -771}\special{pa 918 -766}\special{pa 916 -759}\special{pa 917 -752}\special{pa 920 -746}\special{pa 926 -743}\special{pa 933 -742}\special{pa 940 -744}\special{pa 945 -749}\special{pa 947 -756}\special{pa 946 -763}\special{pa 943 -769}\special{fp}%
+}%
+\special{pn 2}%
+\special{pa 773 -317}\special{pa 786 -269}\special{pa 805 -223}\special{pa 829 -180}%
+\special{pa 858 -140}\special{pa 892 -105}\special{pa 931 -73}\special{pa 973 -47}%
+\special{pa 1017 -27}\special{pa 1065 -12}\special{pa 1113 -3}\special{pa 1163 -0}%
+\special{pa 1212 -4}\special{pa 1260 -13}\special{pa 1307 -29}\special{pa 1352 -50}%
+\special{pa 1393 -77}\special{pa 1431 -109}\special{pa 1465 -145}\special{pa 1494 -185}%
+\special{pa 1517 -229}\special{pa 1535 -275}\special{pa 1547 -323}\special{pa 1553 -372}%
+\special{pa 1552 -422}\special{pa 1546 -471}\special{pa 1533 -518}\special{pa 1514 -564}%
+\special{pa 1490 -607}\special{pa 1461 -647}\special{pa 1427 -683}\special{pa 1388 -714}%
+\special{pa 1346 -740}\special{pa 1302 -761}\special{pa 1254 -776}\special{pa 1206 -785}%
+\special{pa 1156 -787}\special{pa 1107 -784}\special{pa 1059 -774}\special{pa 1012 -759}%
+\special{pa 967 -737}\special{pa 926 -710}\special{pa 888 -679}\special{pa 854 -642}%
+\special{pa 825 -602}\special{pa 802 -559}\special{pa 784 -512}\special{pa 772 -464}%
+\special{pa 766 -415}\special{pa 767 -366}\special{pa 773 -317}%
+\special{fp}%
+\special{pn 8}%
+{%
+\color[rgb]{1,0,0}%
+{\special{pn 0}\color[rgb]{1,0,0}%
+\special{pa 1094 -791}\special{pa 1088 -795}\special{pa 1081 -795}\special{pa 1074 -793}\special{pa 1069 -788}\special{pa 1067 -782}\special{pa 1068 -775}\special{pa 1072 -769}\special{pa 1078 -765}\special{pa 1084 -764}\special{pa 1091 -767}\special{pa 1096 -771}\special{pa 1098 -778}\special{pa 1098 -785}\special{pa 1094 -791}\special{sh}\special{fp}}%
+\special{pn 4}\special{pa 1094 -791}\special{pa 1088 -795}\special{pa 1081 -795}\special{pa 1074 -793}\special{pa 1069 -788}\special{pa 1067 -782}\special{pa 1068 -775}\special{pa 1072 -769}\special{pa 1078 -765}\special{pa 1084 -764}\special{pa 1091 -767}\special{pa 1096 -771}\special{pa 1098 -778}\special{pa 1098 -785}\special{pa 1094 -791}\special{fp}%
+}%
+\special{pn 2}%
+\special{pa 843 -394}\special{pa 846 -344}\special{pa 856 -296}\special{pa 871 -249}%
+\special{pa 892 -204}\special{pa 918 -162}\special{pa 950 -124}\special{pa 986 -90}%
+\special{pa 1026 -61}\special{pa 1069 -37}\special{pa 1115 -19}\special{pa 1163 -7}%
+\special{pa 1212 -1}\special{pa 1262 -1}\special{pa 1311 -7}\special{pa 1359 -19}%
+\special{pa 1404 -37}\special{pa 1448 -61}\special{pa 1488 -90}\special{pa 1524 -124}%
+\special{pa 1555 -162}\special{pa 1582 -204}\special{pa 1603 -249}\special{pa 1618 -296}%
+\special{pa 1627 -344}\special{pa 1631 -394}\special{pa 1627 -443}\special{pa 1618 -492}%
+\special{pa 1603 -539}\special{pa 1582 -583}\special{pa 1555 -625}\special{pa 1524 -663}%
+\special{pa 1488 -697}\special{pa 1448 -726}\special{pa 1404 -750}\special{pa 1359 -768}%
+\special{pa 1311 -780}\special{pa 1262 -787}\special{pa 1212 -787}\special{pa 1163 -780}%
+\special{pa 1115 -768}\special{pa 1069 -750}\special{pa 1026 -726}\special{pa 986 -697}%
+\special{pa 950 -663}\special{pa 918 -625}\special{pa 892 -583}\special{pa 871 -539}%
+\special{pa 856 -492}\special{pa 846 -443}\special{pa 843 -394}%
+\special{fp}%
+\special{pn 8}%
+{%
+\color[rgb]{1,0,0}%
+{\special{pn 0}\color[rgb]{1,0,0}%
+\special{pa 1248 -799}\special{pa 1242 -802}\special{pa 1235 -803}\special{pa 1228 -801}\special{pa 1224 -796}\special{pa 1221 -789}\special{pa 1222 -782}\special{pa 1226 -776}\special{pa 1232 -773}\special{pa 1239 -772}\special{pa 1245 -774}\special{pa 1250 -779}\special{pa 1252 -786}\special{pa 1252 -793}\special{pa 1248 -799}\special{sh}\special{fp}}%
+\special{pn 4}\special{pa 1248 -799}\special{pa 1242 -802}\special{pa 1235 -803}\special{pa 1228 -801}\special{pa 1224 -796}\special{pa 1221 -789}\special{pa 1222 -782}\special{pa 1226 -776}\special{pa 1232 -773}\special{pa 1239 -772}\special{pa 1245 -774}\special{pa 1250 -779}\special{pa 1252 -786}\special{pa 1252 -793}\special{pa 1248 -799}\special{fp}%
+}%
+\special{pn 2}%
+\special{pa 928 -471}\special{pa 921 -422}\special{pa 921 -372}\special{pa 927 -323}%
+\special{pa 939 -275}\special{pa 957 -229}\special{pa 980 -185}\special{pa 1009 -145}%
+\special{pa 1042 -109}\special{pa 1080 -77}\special{pa 1122 -50}\special{pa 1166 -29}%
+\special{pa 1213 -13}\special{pa 1262 -4}\special{pa 1311 -0}\special{pa 1360 -3}%
+\special{pa 1409 -12}\special{pa 1456 -27}\special{pa 1501 -47}\special{pa 1543 -73}%
+\special{pa 1581 -105}\special{pa 1616 -140}\special{pa 1645 -180}\special{pa 1669 -223}%
+\special{pa 1688 -269}\special{pa 1700 -317}\special{pa 1707 -366}\special{pa 1707 -415}%
+\special{pa 1701 -464}\special{pa 1690 -512}\special{pa 1672 -559}\special{pa 1648 -602}%
+\special{pa 1619 -642}\special{pa 1586 -679}\special{pa 1548 -710}\special{pa 1507 -737}%
+\special{pa 1462 -759}\special{pa 1415 -774}\special{pa 1367 -784}\special{pa 1317 -787}%
+\special{pa 1268 -785}\special{pa 1219 -776}\special{pa 1172 -761}\special{pa 1127 -740}%
+\special{pa 1085 -714}\special{pa 1047 -683}\special{pa 1013 -647}\special{pa 983 -607}%
+\special{pa 959 -564}\special{pa 941 -518}\special{pa 928 -471}%
+\special{fp}%
+\special{pn 8}%
+{%
+\color[rgb]{1,0,0}%
+{\special{pn 0}\color[rgb]{1,0,0}%
+\special{pa 1402 -791}\special{pa 1396 -795}\special{pa 1389 -795}\special{pa 1383 -793}\special{pa 1378 -788}\special{pa 1375 -782}\special{pa 1376 -775}\special{pa 1380 -769}\special{pa 1386 -765}\special{pa 1393 -764}\special{pa 1399 -767}\special{pa 1404 -771}\special{pa 1407 -778}\special{pa 1406 -785}\special{pa 1402 -791}\special{sh}\special{fp}}%
+\special{pn 4}\special{pa 1402 -791}\special{pa 1396 -795}\special{pa 1389 -795}\special{pa 1383 -793}\special{pa 1378 -788}\special{pa 1375 -782}\special{pa 1376 -775}\special{pa 1380 -769}\special{pa 1386 -765}\special{pa 1393 -764}\special{pa 1399 -767}\special{pa 1404 -771}\special{pa 1407 -778}\special{pa 1406 -785}\special{pa 1402 -791}\special{fp}%
+}%
+\special{pn 2}%
+\special{pa 1028 -544}\special{pa 1012 -498}\special{pa 1002 -449}\special{pa 998 -400}%
+\special{pa 1000 -350}\special{pa 1009 -302}\special{pa 1023 -255}\special{pa 1044 -209}%
+\special{pa 1069 -167}\special{pa 1100 -129}\special{pa 1136 -94}\special{pa 1175 -65}%
+\special{pa 1218 -40}\special{pa 1264 -21}\special{pa 1312 -8}\special{pa 1361 -1}%
+\special{pa 1410 -0}\special{pa 1459 -6}\special{pa 1507 -17}\special{pa 1553 -35}%
+\special{pa 1597 -58}\special{pa 1638 -86}\special{pa 1674 -120}\special{pa 1706 -157}%
+\special{pa 1733 -199}\special{pa 1755 -243}\special{pa 1771 -290}\special{pa 1781 -338}%
+\special{pa 1785 -388}\special{pa 1783 -437}\special{pa 1774 -486}\special{pa 1760 -533}%
+\special{pa 1739 -578}\special{pa 1714 -620}\special{pa 1683 -659}\special{pa 1647 -693}%
+\special{pa 1608 -723}\special{pa 1565 -747}\special{pa 1519 -766}\special{pa 1471 -779}%
+\special{pa 1422 -786}\special{pa 1373 -787}\special{pa 1324 -782}\special{pa 1276 -770}%
+\special{pa 1229 -753}\special{pa 1186 -729}\special{pa 1145 -701}\special{pa 1109 -668}%
+\special{pa 1077 -630}\special{pa 1049 -589}\special{pa 1028 -544}%
+\special{fp}%
+\special{pn 8}%
+{%
+\color[rgb]{1,0,0}%
+{\special{pn 0}\color[rgb]{1,0,0}%
+\special{pa 1553 -769}\special{pa 1547 -772}\special{pa 1540 -773}\special{pa 1534 -771}\special{pa 1529 -766}\special{pa 1526 -759}\special{pa 1527 -752}\special{pa 1531 -746}\special{pa 1537 -743}\special{pa 1544 -742}\special{pa 1550 -744}\special{pa 1555 -749}\special{pa 1558 -756}\special{pa 1557 -763}\special{pa 1553 -769}\special{sh}\special{fp}}%
+\special{pn 4}\special{pa 1553 -769}\special{pa 1547 -772}\special{pa 1540 -773}\special{pa 1534 -771}\special{pa 1529 -766}\special{pa 1526 -759}\special{pa 1527 -752}\special{pa 1531 -746}\special{pa 1537 -743}\special{pa 1544 -742}\special{pa 1550 -744}\special{pa 1555 -749}\special{pa 1558 -756}\special{pa 1557 -763}\special{pa 1553 -769}\special{fp}%
+}%
+\special{pn 2}%
+\special{pa 1141 -612}\special{pa 1117 -570}\special{pa 1097 -524}\special{pa 1084 -477}%
+\special{pa 1077 -428}\special{pa 1075 -378}\special{pa 1080 -329}\special{pa 1092 -281}%
+\special{pa 1109 -235}\special{pa 1131 -191}\special{pa 1160 -150}\special{pa 1193 -113}%
+\special{pa 1230 -81}\special{pa 1271 -53}\special{pa 1315 -31}\special{pa 1362 -15}%
+\special{pa 1410 -4}\special{pa 1459 -0}\special{pa 1509 -2}\special{pa 1558 -10}%
+\special{pa 1605 -24}\special{pa 1650 -44}\special{pa 1693 -70}\special{pa 1731 -100}%
+\special{pa 1766 -136}\special{pa 1796 -175}\special{pa 1821 -218}\special{pa 1840 -263}%
+\special{pa 1854 -311}\special{pa 1861 -360}\special{pa 1862 -409}\special{pa 1857 -458}%
+\special{pa 1846 -507}\special{pa 1829 -553}\special{pa 1806 -597}\special{pa 1778 -637}%
+\special{pa 1745 -674}\special{pa 1708 -707}\special{pa 1667 -734}\special{pa 1622 -756}%
+\special{pa 1576 -773}\special{pa 1527 -783}\special{pa 1478 -787}\special{pa 1429 -785}%
+\special{pa 1380 -777}\special{pa 1332 -763}\special{pa 1287 -743}\special{pa 1245 -718}%
+\special{pa 1206 -687}\special{pa 1171 -652}\special{pa 1141 -612}%
+\special{fp}%
+\special{pn 8}%
+{%
+\color[rgb]{1,0,0}%
+{\special{pn 0}\color[rgb]{1,0,0}%
+\special{pa 1699 -732}\special{pa 1693 -736}\special{pa 1686 -737}\special{pa 1679 -734}\special{pa 1674 -729}\special{pa 1672 -723}\special{pa 1673 -716}\special{pa 1676 -710}\special{pa 1682 -706}\special{pa 1689 -705}\special{pa 1696 -708}\special{pa 1701 -713}\special{pa 1703 -719}\special{pa 1702 -726}\special{pa 1699 -732}\special{sh}\special{fp}}%
+\special{pn 4}\special{pa 1699 -732}\special{pa 1693 -736}\special{pa 1686 -737}\special{pa 1679 -734}\special{pa 1674 -729}\special{pa 1672 -723}\special{pa 1673 -716}\special{pa 1676 -710}\special{pa 1682 -706}\special{pa 1689 -705}\special{pa 1696 -708}\special{pa 1701 -713}\special{pa 1703 -719}\special{pa 1702 -726}\special{pa 1699 -732}\special{fp}%
+}%
+\special{pn 2}%
+\special{pa 1268 -672}\special{pa 1235 -635}\special{pa 1207 -594}\special{pa 1185 -550}%
+\special{pa 1168 -504}\special{pa 1157 -455}\special{pa 1153 -406}\special{pa 1154 -357}%
+\special{pa 1162 -308}\special{pa 1176 -260}\special{pa 1195 -215}\special{pa 1220 -172}%
+\special{pa 1251 -133}\special{pa 1286 -98}\special{pa 1325 -68}\special{pa 1367 -43}%
+\special{pa 1413 -23}\special{pa 1460 -9}\special{pa 1509 -2}\special{pa 1558 -0}%
+\special{pa 1608 -5}\special{pa 1656 -16}\special{pa 1702 -32}\special{pa 1746 -55}%
+\special{pa 1787 -83}\special{pa 1824 -115}\special{pa 1857 -152}\special{pa 1885 -193}%
+\special{pa 1907 -237}\special{pa 1924 -284}\special{pa 1935 -332}\special{pa 1940 -381}%
+\special{pa 1938 -431}\special{pa 1930 -480}\special{pa 1916 -527}\special{pa 1897 -572}%
+\special{pa 1872 -615}\special{pa 1841 -654}\special{pa 1806 -689}\special{pa 1767 -719}%
+\special{pa 1725 -744}\special{pa 1679 -764}\special{pa 1632 -778}\special{pa 1583 -786}%
+\special{pa 1534 -787}\special{pa 1484 -783}\special{pa 1436 -772}\special{pa 1390 -755}%
+\special{pa 1346 -733}\special{pa 1305 -705}\special{pa 1268 -672}%
+\special{fp}%
+\special{pn 8}%
+{%
+\color[rgb]{1,0,0}%
+{\special{pn 0}\color[rgb]{1,0,0}%
+\special{pa 1836 -683}\special{pa 1830 -687}\special{pa 1823 -688}\special{pa 1816 -685}\special{pa 1811 -680}\special{pa 1809 -674}\special{pa 1810 -667}\special{pa 1813 -661}\special{pa 1819 -657}\special{pa 1826 -656}\special{pa 1833 -659}\special{pa 1838 -664}\special{pa 1840 -670}\special{pa 1839 -677}\special{pa 1836 -683}\special{sh}\special{fp}}%
+\special{pn 4}\special{pa 1836 -683}\special{pa 1830 -687}\special{pa 1823 -688}\special{pa 1816 -685}\special{pa 1811 -680}\special{pa 1809 -674}\special{pa 1810 -667}\special{pa 1813 -661}\special{pa 1819 -657}\special{pa 1826 -656}\special{pa 1833 -659}\special{pa 1838 -664}\special{pa 1840 -670}\special{pa 1839 -677}\special{pa 1836 -683}\special{fp}%
+}%
+\special{pn 2}%
+\special{pa 1405 -721}\special{pa 1365 -691}\special{pa 1330 -656}\special{pa 1299 -618}%
+\special{pa 1274 -575}\special{pa 1254 -530}\special{pa 1240 -483}\special{pa 1232 -434}%
+\special{pa 1230 -384}\special{pa 1234 -335}\special{pa 1244 -287}\special{pa 1261 -240}%
+\special{pa 1283 -196}\special{pa 1310 -155}\special{pa 1343 -118}\special{pa 1380 -85}%
+\special{pa 1420 -56}\special{pa 1464 -34}\special{pa 1511 -17}\special{pa 1559 -5}%
+\special{pa 1608 -0}\special{pa 1657 -1}\special{pa 1706 -9}\special{pa 1754 -22}%
+\special{pa 1799 -42}\special{pa 1842 -66}\special{pa 1881 -96}\special{pa 1917 -131}%
+\special{pa 1947 -170}\special{pa 1973 -212}\special{pa 1993 -257}\special{pa 2007 -305}%
+\special{pa 2015 -354}\special{pa 2017 -403}\special{pa 2013 -452}\special{pa 2002 -501}%
+\special{pa 1986 -547}\special{pa 1964 -591}\special{pa 1936 -633}\special{pa 1904 -670}%
+\special{pa 1867 -703}\special{pa 1826 -731}\special{pa 1783 -754}\special{pa 1736 -771}%
+\special{pa 1688 -782}\special{pa 1639 -787}\special{pa 1589 -786}\special{pa 1540 -779}%
+\special{pa 1493 -765}\special{pa 1447 -746}\special{pa 1405 -721}%
+\special{fp}%
+\special{pn 8}%
+{%
+\color[rgb]{1,0,0}%
+{\special{pn 0}\color[rgb]{1,0,0}%
+\special{pa 1962 -624}\special{pa 1956 -627}\special{pa 1949 -628}\special{pa 1942 -626}\special{pa 1937 -621}\special{pa 1935 -614}\special{pa 1936 -607}\special{pa 1940 -601}\special{pa 1946 -598}\special{pa 1952 -597}\special{pa 1959 -599}\special{pa 1964 -604}\special{pa 1966 -611}\special{pa 1966 -618}\special{pa 1962 -624}\special{sh}\special{fp}}%
+\special{pn 4}\special{pa 1962 -624}\special{pa 1956 -627}\special{pa 1949 -628}\special{pa 1942 -626}\special{pa 1937 -621}\special{pa 1935 -614}\special{pa 1936 -607}\special{pa 1940 -601}\special{pa 1946 -598}\special{pa 1952 -597}\special{pa 1959 -599}\special{pa 1964 -604}\special{pa 1966 -611}\special{pa 1966 -618}\special{pa 1962 -624}\special{fp}%
+}%
+\special{pn 2}%
+\special{pa 1550 -757}\special{pa 1506 -736}\special{pa 1464 -709}\special{pa 1427 -676}%
+\special{pa 1393 -640}\special{pa 1365 -599}\special{pa 1342 -556}\special{pa 1324 -509}%
+\special{pa 1313 -461}\special{pa 1307 -412}\special{pa 1308 -363}\special{pa 1315 -314}%
+\special{pa 1328 -266}\special{pa 1347 -220}\special{pa 1372 -178}\special{pa 1401 -138}%
+\special{pa 1436 -103}\special{pa 1474 -72}\special{pa 1516 -46}\special{pa 1562 -25}%
+\special{pa 1609 -11}\special{pa 1657 -2}\special{pa 1707 -0}\special{pa 1756 -4}%
+\special{pa 1805 -14}\special{pa 1851 -30}\special{pa 1896 -52}\special{pa 1937 -79}%
+\special{pa 1975 -111}\special{pa 2008 -148}\special{pa 2036 -188}\special{pa 2059 -232}%
+\special{pa 2077 -278}\special{pa 2089 -326}\special{pa 2094 -375}\special{pa 2093 -425}%
+\special{pa 2086 -474}\special{pa 2073 -521}\special{pa 2054 -567}\special{pa 2030 -610}%
+\special{pa 2000 -649}\special{pa 1966 -685}\special{pa 1927 -716}\special{pa 1885 -742}%
+\special{pa 1840 -762}\special{pa 1793 -777}\special{pa 1744 -785}\special{pa 1694 -787}%
+\special{pa 1645 -783}\special{pa 1597 -773}\special{pa 1550 -757}%
+\special{fp}%
+\special{pn 8}%
+{%
+\color[rgb]{1,0,0}%
+{\special{pn 0}\color[rgb]{1,0,0}%
+\special{pa 2076 -555}\special{pa 2070 -559}\special{pa 2063 -560}\special{pa 2056 -558}\special{pa 2051 -553}\special{pa 2049 -546}\special{pa 2050 -539}\special{pa 2053 -533}\special{pa 2059 -529}\special{pa 2066 -529}\special{pa 2073 -531}\special{pa 2078 -536}\special{pa 2080 -543}\special{pa 2079 -550}\special{pa 2076 -555}\special{sh}\special{fp}}%
+\special{pn 4}\special{pa 2076 -555}\special{pa 2070 -559}\special{pa 2063 -560}\special{pa 2056 -558}\special{pa 2051 -553}\special{pa 2049 -546}\special{pa 2050 -539}\special{pa 2053 -533}\special{pa 2059 -529}\special{pa 2066 -529}\special{pa 2073 -531}\special{pa 2078 -536}\special{pa 2080 -543}\special{pa 2079 -550}\special{pa 2076 -555}\special{fp}%
+}%
+\special{pn 2}%
+\special{pa 1701 -780}\special{pa 1653 -767}\special{pa 1608 -749}\special{pa 1564 -724}%
+\special{pa 1525 -695}\special{pa 1489 -661}\special{pa 1458 -623}\special{pa 1431 -581}%
+\special{pa 1411 -536}\special{pa 1396 -489}\special{pa 1387 -440}\special{pa 1384 -391}%
+\special{pa 1388 -341}\special{pa 1397 -293}\special{pa 1413 -246}\special{pa 1434 -201}%
+\special{pa 1461 -160}\special{pa 1493 -122}\special{pa 1529 -88}\special{pa 1570 -60}%
+\special{pa 1613 -36}\special{pa 1659 -18}\special{pa 1707 -6}\special{pa 1756 -1}%
+\special{pa 1806 -1}\special{pa 1855 -8}\special{pa 1903 -20}\special{pa 1948 -39}%
+\special{pa 1992 -63}\special{pa 2031 -92}\special{pa 2067 -126}\special{pa 2098 -165}%
+\special{pa 2124 -207}\special{pa 2145 -252}\special{pa 2160 -299}\special{pa 2169 -347}%
+\special{pa 2172 -397}\special{pa 2168 -446}\special{pa 2159 -495}\special{pa 2143 -542}%
+\special{pa 2121 -586}\special{pa 2095 -628}\special{pa 2063 -665}\special{pa 2027 -699}%
+\special{pa 1986 -728}\special{pa 1943 -751}\special{pa 1897 -769}\special{pa 1849 -781}%
+\special{pa 1800 -787}\special{pa 1750 -786}\special{pa 1701 -780}%
+\special{fp}%
+\special{pn 8}%
+{%
+\color[rgb]{1,0,0}%
+{\special{pn 0}\color[rgb]{1,0,0}%
+\special{pa 2175 -482}\special{pa 2169 -485}\special{pa 2162 -486}\special{pa 2156 -484}\special{pa 2151 -479}\special{pa 2148 -472}\special{pa 2149 -465}\special{pa 2153 -459}\special{pa 2159 -456}\special{pa 2166 -455}\special{pa 2172 -457}\special{pa 2177 -462}\special{pa 2180 -469}\special{pa 2179 -476}\special{pa 2175 -482}\special{sh}\special{fp}}%
+\special{pn 4}\special{pa 2175 -482}\special{pa 2169 -485}\special{pa 2162 -486}\special{pa 2156 -484}\special{pa 2151 -479}\special{pa 2148 -472}\special{pa 2149 -465}\special{pa 2153 -459}\special{pa 2159 -456}\special{pa 2166 -455}\special{pa 2172 -457}\special{pa 2177 -462}\special{pa 2180 -469}\special{pa 2179 -476}\special{pa 2175 -482}\special{fp}%
+}%
+\special{pn 2}%
+\special{pa 1855 -787}\special{pa 1806 -784}\special{pa 1757 -775}\special{pa 1710 -760}%
+\special{pa 1666 -739}\special{pa 1624 -712}\special{pa 1586 -681}\special{pa 1552 -645}%
+\special{pa 1523 -605}\special{pa 1499 -561}\special{pa 1481 -515}\special{pa 1469 -467}%
+\special{pa 1462 -418}\special{pa 1462 -369}\special{pa 1469 -320}\special{pa 1481 -272}%
+\special{pa 1499 -226}\special{pa 1523 -183}\special{pa 1552 -143}\special{pa 1586 -107}%
+\special{pa 1624 -75}\special{pa 1666 -49}\special{pa 1710 -28}\special{pa 1757 -12}%
+\special{pa 1806 -3}\special{pa 1855 -0}\special{pa 1905 -3}\special{pa 1953 -12}%
+\special{pa 2000 -28}\special{pa 2045 -49}\special{pa 2087 -75}\special{pa 2125 -107}%
+\special{pa 2159 -143}\special{pa 2188 -183}\special{pa 2212 -226}\special{pa 2230 -272}%
+\special{pa 2242 -320}\special{pa 2248 -369}\special{pa 2248 -418}\special{pa 2242 -467}%
+\special{pa 2230 -515}\special{pa 2212 -561}\special{pa 2188 -605}\special{pa 2159 -645}%
+\special{pa 2125 -681}\special{pa 2087 -712}\special{pa 2045 -739}\special{pa 2000 -760}%
+\special{pa 1953 -775}\special{pa 1905 -784}\special{pa 1855 -787}%
+\special{fp}%
+\special{pn 8}%
+{%
+\color[rgb]{1,0,0}%
+{\special{pn 0}\color[rgb]{1,0,0}%
+\special{pa 2260 -405}\special{pa 2254 -409}\special{pa 2247 -409}\special{pa 2241 -407}\special{pa 2236 -402}\special{pa 2233 -395}\special{pa 2234 -388}\special{pa 2238 -383}\special{pa 2244 -379}\special{pa 2251 -378}\special{pa 2257 -380}\special{pa 2262 -385}\special{pa 2265 -392}\special{pa 2264 -399}\special{pa 2260 -405}\special{sh}\special{fp}}%
+\special{pn 4}\special{pa 2260 -405}\special{pa 2254 -409}\special{pa 2247 -409}\special{pa 2241 -407}\special{pa 2236 -402}\special{pa 2233 -395}\special{pa 2234 -388}\special{pa 2238 -383}\special{pa 2244 -379}\special{pa 2251 -378}\special{pa 2257 -380}\special{pa 2262 -385}\special{pa 2265 -392}\special{pa 2264 -399}\special{pa 2260 -405}\special{fp}%
+}%
+\special{pn 2}%
+\special{pa 2009 -780}\special{pa 1960 -786}\special{pa 1911 -787}\special{pa 1862 -781}%
+\special{pa 1814 -769}\special{pa 1768 -751}\special{pa 1724 -728}\special{pa 1684 -699}%
+\special{pa 1648 -665}\special{pa 1616 -628}\special{pa 1589 -586}\special{pa 1568 -542}%
+\special{pa 1552 -495}\special{pa 1542 -446}\special{pa 1539 -397}\special{pa 1542 -347}%
+\special{pa 1550 -299}\special{pa 1565 -252}\special{pa 1586 -207}\special{pa 1612 -165}%
+\special{pa 1643 -126}\special{pa 1679 -92}\special{pa 1719 -63}\special{pa 1762 -39}%
+\special{pa 1808 -20}\special{pa 1856 -8}\special{pa 1905 -1}\special{pa 1954 -1}%
+\special{pa 2003 -6}\special{pa 2051 -18}\special{pa 2097 -36}\special{pa 2141 -60}%
+\special{pa 2181 -88}\special{pa 2217 -122}\special{pa 2249 -160}\special{pa 2276 -201}%
+\special{pa 2297 -246}\special{pa 2313 -293}\special{pa 2323 -341}\special{pa 2326 -391}%
+\special{pa 2324 -440}\special{pa 2315 -489}\special{pa 2300 -536}\special{pa 2279 -581}%
+\special{pa 2253 -623}\special{pa 2222 -661}\special{pa 2186 -695}\special{pa 2146 -724}%
+\special{pa 2103 -749}\special{pa 2057 -767}\special{pa 2009 -780}%
+\special{fp}%
+\special{pn 8}%
+{%
+\color[rgb]{1,0,0}%
+{\special{pn 0}\color[rgb]{1,0,0}%
+\special{pa 2330 -328}\special{pa 2324 -332}\special{pa 2317 -333}\special{pa 2310 -330}\special{pa 2305 -325}\special{pa 2303 -319}\special{pa 2304 -312}\special{pa 2308 -306}\special{pa 2314 -302}\special{pa 2320 -301}\special{pa 2327 -304}\special{pa 2332 -309}\special{pa 2334 -315}\special{pa 2334 -322}\special{pa 2330 -328}\special{sh}\special{fp}}%
+\special{pn 4}\special{pa 2330 -328}\special{pa 2324 -332}\special{pa 2317 -333}\special{pa 2310 -330}\special{pa 2305 -325}\special{pa 2303 -319}\special{pa 2304 -312}\special{pa 2308 -306}\special{pa 2314 -302}\special{pa 2320 -301}\special{pa 2327 -304}\special{pa 2332 -309}\special{pa 2334 -315}\special{pa 2334 -322}\special{pa 2330 -328}\special{fp}%
+}%
+\special{pn 2}%
+\special{pa 2161 -757}\special{pa 2114 -773}\special{pa 2065 -783}\special{pa 2016 -787}%
+\special{pa 1967 -785}\special{pa 1918 -777}\special{pa 1871 -762}\special{pa 1826 -742}%
+\special{pa 1783 -716}\special{pa 1745 -685}\special{pa 1711 -649}\special{pa 1681 -610}%
+\special{pa 1656 -567}\special{pa 1637 -521}\special{pa 1624 -474}\special{pa 1617 -425}%
+\special{pa 1617 -375}\special{pa 1622 -326}\special{pa 1634 -278}\special{pa 1651 -232}%
+\special{pa 1674 -188}\special{pa 1703 -148}\special{pa 1736 -111}\special{pa 1773 -79}%
+\special{pa 1815 -52}\special{pa 1859 -30}\special{pa 1906 -14}\special{pa 1954 -4}%
+\special{pa 2004 -0}\special{pa 2053 -2}\special{pa 2102 -11}\special{pa 2149 -25}%
+\special{pa 2194 -46}\special{pa 2236 -72}\special{pa 2275 -103}\special{pa 2309 -138}%
+\special{pa 2339 -178}\special{pa 2363 -220}\special{pa 2382 -266}\special{pa 2395 -314}%
+\special{pa 2402 -363}\special{pa 2403 -412}\special{pa 2398 -461}\special{pa 2386 -509}%
+\special{pa 2369 -556}\special{pa 2346 -599}\special{pa 2317 -640}\special{pa 2284 -676}%
+\special{pa 2246 -709}\special{pa 2205 -736}\special{pa 2161 -757}%
+\special{fp}%
+\special{pn 8}%
+{%
+\color[rgb]{1,0,0}%
+{\special{pn 0}\color[rgb]{1,0,0}%
+\special{pa 2385 -254}\special{pa 2379 -258}\special{pa 2372 -259}\special{pa 2365 -256}\special{pa 2360 -251}\special{pa 2358 -245}\special{pa 2359 -238}\special{pa 2362 -232}\special{pa 2368 -228}\special{pa 2375 -227}\special{pa 2382 -230}\special{pa 2387 -235}\special{pa 2389 -241}\special{pa 2388 -248}\special{pa 2385 -254}\special{sh}\special{fp}}%
+\special{pn 4}\special{pa 2385 -254}\special{pa 2379 -258}\special{pa 2372 -259}\special{pa 2365 -256}\special{pa 2360 -251}\special{pa 2358 -245}\special{pa 2359 -238}\special{pa 2362 -232}\special{pa 2368 -228}\special{pa 2375 -227}\special{pa 2382 -230}\special{pa 2387 -235}\special{pa 2389 -241}\special{pa 2388 -248}\special{pa 2385 -254}\special{fp}%
+}%
+\special{pn 2}%
+\special{pa 2306 -721}\special{pa 2263 -746}\special{pa 2218 -765}\special{pa 2170 -779}%
+\special{pa 2121 -786}\special{pa 2072 -787}\special{pa 2023 -782}\special{pa 1974 -771}%
+\special{pa 1928 -754}\special{pa 1884 -731}\special{pa 1843 -703}\special{pa 1807 -670}%
+\special{pa 1774 -633}\special{pa 1747 -591}\special{pa 1725 -547}\special{pa 1708 -501}%
+\special{pa 1698 -452}\special{pa 1694 -403}\special{pa 1696 -354}\special{pa 1704 -305}%
+\special{pa 1718 -257}\special{pa 1738 -212}\special{pa 1763 -170}\special{pa 1794 -131}%
+\special{pa 1829 -96}\special{pa 1868 -66}\special{pa 1911 -42}\special{pa 1957 -22}%
+\special{pa 2004 -9}\special{pa 2053 -1}\special{pa 2103 -0}\special{pa 2152 -5}%
+\special{pa 2200 -17}\special{pa 2246 -34}\special{pa 2290 -56}\special{pa 2331 -85}%
+\special{pa 2368 -118}\special{pa 2400 -155}\special{pa 2428 -196}\special{pa 2450 -240}%
+\special{pa 2466 -287}\special{pa 2477 -335}\special{pa 2481 -384}\special{pa 2479 -434}%
+\special{pa 2471 -483}\special{pa 2457 -530}\special{pa 2437 -575}\special{pa 2411 -618}%
+\special{pa 2380 -656}\special{pa 2345 -691}\special{pa 2306 -721}%
+\special{fp}%
+\special{pn 8}%
+{%
+\color[rgb]{1,0,0}%
+{\special{pn 0}\color[rgb]{1,0,0}%
+\special{pa 2426 -186}\special{pa 2420 -190}\special{pa 2413 -191}\special{pa 2406 -188}\special{pa 2401 -183}\special{pa 2399 -177}\special{pa 2400 -170}\special{pa 2403 -164}\special{pa 2409 -160}\special{pa 2416 -159}\special{pa 2423 -162}\special{pa 2428 -167}\special{pa 2430 -173}\special{pa 2429 -180}\special{pa 2426 -186}\special{sh}\special{fp}}%
+\special{pn 4}\special{pa 2426 -186}\special{pa 2420 -190}\special{pa 2413 -191}\special{pa 2406 -188}\special{pa 2401 -183}\special{pa 2399 -177}\special{pa 2400 -170}\special{pa 2403 -164}\special{pa 2409 -160}\special{pa 2416 -159}\special{pa 2423 -162}\special{pa 2428 -167}\special{pa 2430 -173}\special{pa 2429 -180}\special{pa 2426 -186}\special{fp}%
+}%
+\special{pn 2}%
+\special{pa 2443 -672}\special{pa 2406 -705}\special{pa 2365 -733}\special{pa 2321 -755}%
+\special{pa 2274 -772}\special{pa 2226 -783}\special{pa 2177 -787}\special{pa 2127 -786}%
+\special{pa 2079 -778}\special{pa 2031 -764}\special{pa 1986 -744}\special{pa 1943 -719}%
+\special{pa 1904 -689}\special{pa 1869 -654}\special{pa 1839 -615}\special{pa 1814 -572}%
+\special{pa 1794 -527}\special{pa 1780 -480}\special{pa 1773 -431}\special{pa 1771 -381}%
+\special{pa 1776 -332}\special{pa 1786 -284}\special{pa 1803 -237}\special{pa 1826 -193}%
+\special{pa 1853 -152}\special{pa 1886 -115}\special{pa 1923 -83}\special{pa 1964 -55}%
+\special{pa 2008 -32}\special{pa 2055 -16}\special{pa 2103 -5}\special{pa 2152 -0}%
+\special{pa 2202 -2}\special{pa 2250 -9}\special{pa 2298 -23}\special{pa 2343 -43}%
+\special{pa 2386 -68}\special{pa 2425 -98}\special{pa 2460 -133}\special{pa 2490 -172}%
+\special{pa 2515 -215}\special{pa 2535 -260}\special{pa 2549 -308}\special{pa 2556 -357}%
+\special{pa 2558 -406}\special{pa 2553 -455}\special{pa 2543 -504}\special{pa 2526 -550}%
+\special{pa 2503 -594}\special{pa 2476 -635}\special{pa 2443 -672}%
+\special{fp}%
+\special{pn 8}%
+{%
+\color[rgb]{1,0,0}%
+{\special{pn 0}\color[rgb]{1,0,0}%
+\special{pa 2454 -126}\special{pa 2448 -130}\special{pa 2441 -131}\special{pa 2434 -129}\special{pa 2430 -124}\special{pa 2427 -117}\special{pa 2428 -110}\special{pa 2432 -104}\special{pa 2438 -100}\special{pa 2445 -100}\special{pa 2451 -102}\special{pa 2456 -107}\special{pa 2459 -114}\special{pa 2458 -121}\special{pa 2454 -126}\special{sh}\special{fp}}%
+\special{pn 4}\special{pa 2454 -126}\special{pa 2448 -130}\special{pa 2441 -131}\special{pa 2434 -129}\special{pa 2430 -124}\special{pa 2427 -117}\special{pa 2428 -110}\special{pa 2432 -104}\special{pa 2438 -100}\special{pa 2445 -100}\special{pa 2451 -102}\special{pa 2456 -107}\special{pa 2459 -114}\special{pa 2458 -121}\special{pa 2454 -126}\special{fp}%
+}%
+\special{pn 2}%
+\special{pa 2569 -612}\special{pa 2539 -652}\special{pa 2504 -687}\special{pa 2466 -718}%
+\special{pa 2423 -743}\special{pa 2378 -763}\special{pa 2331 -777}\special{pa 2282 -785}%
+\special{pa 2233 -787}\special{pa 2183 -783}\special{pa 2135 -773}\special{pa 2088 -756}%
+\special{pa 2044 -734}\special{pa 2003 -707}\special{pa 1966 -674}\special{pa 1933 -637}%
+\special{pa 1904 -597}\special{pa 1882 -553}\special{pa 1865 -507}\special{pa 1853 -458}%
+\special{pa 1848 -409}\special{pa 1850 -360}\special{pa 1857 -311}\special{pa 1870 -263}%
+\special{pa 1890 -218}\special{pa 1914 -175}\special{pa 1944 -136}\special{pa 1979 -100}%
+\special{pa 2018 -70}\special{pa 2060 -44}\special{pa 2106 -24}\special{pa 2153 -10}%
+\special{pa 2202 -2}\special{pa 2251 -0}\special{pa 2300 -4}\special{pa 2349 -15}%
+\special{pa 2395 -31}\special{pa 2440 -53}\special{pa 2481 -81}\special{pa 2518 -113}%
+\special{pa 2551 -150}\special{pa 2579 -191}\special{pa 2602 -235}\special{pa 2619 -281}%
+\special{pa 2630 -329}\special{pa 2635 -378}\special{pa 2634 -428}\special{pa 2627 -477}%
+\special{pa 2613 -524}\special{pa 2594 -570}\special{pa 2569 -612}%
+\special{fp}%
+\special{pn 8}%
+{%
+\color[rgb]{1,0,0}%
+{\special{pn 0}\color[rgb]{1,0,0}%
+\special{pa 2472 -77}\special{pa 2466 -81}\special{pa 2459 -82}\special{pa 2452 -80}\special{pa 2447 -75}\special{pa 2445 -68}\special{pa 2446 -61}\special{pa 2449 -55}\special{pa 2455 -51}\special{pa 2462 -51}\special{pa 2469 -53}\special{pa 2474 -58}\special{pa 2476 -65}\special{pa 2475 -72}\special{pa 2472 -77}\special{sh}\special{fp}}%
+\special{pn 4}\special{pa 2472 -77}\special{pa 2466 -81}\special{pa 2459 -82}\special{pa 2452 -80}\special{pa 2447 -75}\special{pa 2445 -68}\special{pa 2446 -61}\special{pa 2449 -55}\special{pa 2455 -51}\special{pa 2462 -51}\special{pa 2469 -53}\special{pa 2474 -58}\special{pa 2476 -65}\special{pa 2475 -72}\special{pa 2472 -77}\special{fp}%
+}%
+\special{pn 2}%
+\special{pa 2683 -544}\special{pa 2661 -589}\special{pa 2634 -630}\special{pa 2602 -668}%
+\special{pa 2565 -701}\special{pa 2525 -729}\special{pa 2481 -753}\special{pa 2435 -770}%
+\special{pa 2387 -782}\special{pa 2338 -787}\special{pa 2288 -786}\special{pa 2239 -779}%
+\special{pa 2192 -766}\special{pa 2146 -747}\special{pa 2103 -723}\special{pa 2063 -693}%
+\special{pa 2028 -659}\special{pa 1997 -620}\special{pa 1971 -578}\special{pa 1951 -533}%
+\special{pa 1936 -486}\special{pa 1928 -437}\special{pa 1925 -388}\special{pa 1929 -338}%
+\special{pa 1939 -290}\special{pa 1955 -243}\special{pa 1977 -199}\special{pa 2004 -157}%
+\special{pa 2036 -120}\special{pa 2073 -86}\special{pa 2113 -58}\special{pa 2157 -35}%
+\special{pa 2203 -17}\special{pa 2251 -6}\special{pa 2301 -0}\special{pa 2350 -1}%
+\special{pa 2399 -8}\special{pa 2447 -21}\special{pa 2492 -40}\special{pa 2535 -65}%
+\special{pa 2575 -94}\special{pa 2610 -129}\special{pa 2641 -167}\special{pa 2667 -209}%
+\special{pa 2687 -255}\special{pa 2702 -302}\special{pa 2710 -350}\special{pa 2713 -400}%
+\special{pa 2709 -449}\special{pa 2699 -498}\special{pa 2683 -544}%
+\special{fp}%
+\special{pn 8}%
+{%
+\color[rgb]{1,0,0}%
+{\special{pn 0}\color[rgb]{1,0,0}%
+\special{pa 2481 -41}\special{pa 2475 -45}\special{pa 2468 -46}\special{pa 2461 -43}\special{pa 2456 -38}\special{pa 2454 -32}\special{pa 2455 -25}\special{pa 2459 -19}\special{pa 2465 -15}\special{pa 2472 -14}\special{pa 2478 -17}\special{pa 2483 -22}\special{pa 2485 -28}\special{pa 2485 -35}\special{pa 2481 -41}\special{sh}\special{fp}}%
+\special{pn 4}\special{pa 2481 -41}\special{pa 2475 -45}\special{pa 2468 -46}\special{pa 2461 -43}\special{pa 2456 -38}\special{pa 2454 -32}\special{pa 2455 -25}\special{pa 2459 -19}\special{pa 2465 -15}\special{pa 2472 -14}\special{pa 2478 -17}\special{pa 2483 -22}\special{pa 2485 -28}\special{pa 2485 -35}\special{pa 2481 -41}\special{fp}%
+}%
+\special{pn 2}%
+\special{pa 2783 -471}\special{pa 2770 -518}\special{pa 2751 -564}\special{pa 2727 -607}%
+\special{pa 2698 -647}\special{pa 2664 -683}\special{pa 2625 -714}\special{pa 2583 -740}%
+\special{pa 2538 -761}\special{pa 2491 -776}\special{pa 2443 -785}\special{pa 2393 -787}%
+\special{pa 2344 -784}\special{pa 2295 -774}\special{pa 2249 -759}\special{pa 2204 -737}%
+\special{pa 2162 -710}\special{pa 2125 -679}\special{pa 2091 -642}\special{pa 2062 -602}%
+\special{pa 2039 -559}\special{pa 2021 -512}\special{pa 2009 -464}\special{pa 2003 -415}%
+\special{pa 2004 -366}\special{pa 2010 -317}\special{pa 2023 -269}\special{pa 2041 -223}%
+\special{pa 2066 -180}\special{pa 2095 -140}\special{pa 2129 -105}\special{pa 2167 -73}%
+\special{pa 2209 -47}\special{pa 2254 -27}\special{pa 2301 -12}\special{pa 2350 -3}%
+\special{pa 2399 -0}\special{pa 2449 -4}\special{pa 2497 -13}\special{pa 2544 -29}%
+\special{pa 2589 -50}\special{pa 2630 -77}\special{pa 2668 -109}\special{pa 2702 -145}%
+\special{pa 2730 -185}\special{pa 2754 -229}\special{pa 2772 -275}\special{pa 2784 -323}%
+\special{pa 2790 -372}\special{pa 2789 -422}\special{pa 2783 -471}%
+\special{fp}%
+\special{pn 8}%
+{%
+\color[rgb]{1,0,0}%
+{\special{pn 0}\color[rgb]{1,0,0}%
+\special{pa 2484 -19}\special{pa 2478 -22}\special{pa 2471 -23}\special{pa 2465 -21}\special{pa 2460 -16}\special{pa 2458 -9}\special{pa 2458 -2}\special{pa 2462 4}\special{pa 2468 7}\special{pa 2475 8}\special{pa 2482 6}\special{pa 2487 1}\special{pa 2489 -6}\special{pa 2488 -13}\special{pa 2484 -19}\special{sh}\special{fp}}%
+\special{pn 4}\special{pa 2484 -19}\special{pa 2478 -22}\special{pa 2471 -23}\special{pa 2465 -21}\special{pa 2460 -16}\special{pa 2458 -9}\special{pa 2458 -2}\special{pa 2462 4}\special{pa 2468 7}\special{pa 2475 8}\special{pa 2482 6}\special{pa 2487 1}\special{pa 2489 -6}\special{pa 2488 -13}\special{pa 2484 -19}\special{fp}%
+}%
+\special{pn 2}%
+\special{pa 2867 -394}\special{pa 2864 -443}\special{pa 2855 -492}\special{pa 2840 -539}%
+\special{pa 2819 -583}\special{pa 2792 -625}\special{pa 2761 -663}\special{pa 2725 -697}%
+\special{pa 2685 -726}\special{pa 2641 -750}\special{pa 2595 -768}\special{pa 2547 -780}%
+\special{pa 2498 -787}\special{pa 2449 -787}\special{pa 2400 -780}\special{pa 2352 -768}%
+\special{pa 2306 -750}\special{pa 2263 -726}\special{pa 2223 -697}\special{pa 2187 -663}%
+\special{pa 2155 -625}\special{pa 2129 -583}\special{pa 2108 -539}\special{pa 2092 -492}%
+\special{pa 2083 -443}\special{pa 2080 -394}\special{pa 2083 -344}\special{pa 2092 -296}%
+\special{pa 2108 -249}\special{pa 2129 -204}\special{pa 2155 -162}\special{pa 2187 -124}%
+\special{pa 2223 -90}\special{pa 2263 -61}\special{pa 2306 -37}\special{pa 2352 -19}%
+\special{pa 2400 -7}\special{pa 2449 -1}\special{pa 2498 -1}\special{pa 2547 -7}%
+\special{pa 2595 -19}\special{pa 2641 -37}\special{pa 2685 -61}\special{pa 2725 -90}%
+\special{pa 2761 -124}\special{pa 2792 -162}\special{pa 2819 -204}\special{pa 2840 -249}%
+\special{pa 2855 -296}\special{pa 2864 -344}\special{pa 2867 -394}%
+\special{fp}%
+\special{pn 8}%
+{%
+\color[rgb]{1,0,0}%
+{\special{pn 0}\color[rgb]{1,0,0}%
+\special{pa 2485 -11}\special{pa 2479 -15}\special{pa 2472 -16}\special{pa 2465 -13}\special{pa 2460 -8}\special{pa 2458 -2}\special{pa 2459 5}\special{pa 2463 11}\special{pa 2468 15}\special{pa 2475 16}\special{pa 2482 13}\special{pa 2487 8}\special{pa 2489 2}\special{pa 2489 -5}\special{pa 2485 -11}\special{sh}\special{fp}}%
+\special{pn 4}\special{pa 2485 -11}\special{pa 2479 -15}\special{pa 2472 -16}\special{pa 2465 -13}\special{pa 2460 -8}\special{pa 2458 -2}\special{pa 2459 5}\special{pa 2463 11}\special{pa 2468 15}\special{pa 2475 16}\special{pa 2482 13}\special{pa 2487 8}\special{pa 2489 2}\special{pa 2489 -5}\special{pa 2485 -11}\special{fp}%
+}%
+\special{pa -787 -0}\special{pa 3150 -0}%
+\special{fp}%
+\special{pa 0 394}\special{pa 0 -1181}%
+\special{fp}%
+\settowidth{\Width}{$x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(8.0500000,0.0000000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{\Depth}%
+\put(0.0000000,3.0500000){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+\settowidth{\Width}{O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(-0.0500000,-0.0500000){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/drawpoint.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/drawpoint.tex
new file mode 100644
index 0000000000..5e36da8d66
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/drawpoint.tex
@@ -0,0 +1,14 @@
+%%% test.tex 2014-10-21 18:7
+%%% test.sce 2014-10-21 18:7
+{\unitlength=1cm%
+\begin{picture}%
+( 5.00000, 2.00000)( -1.00000, -1.00000)%
+\special{pn 8}%
+%
+\special{pa 1198 -17}\special{pa 1190 -22}\special{pa 1180 -24}\special{pa 1170 -21}%
+\special{pa 1163 -15}\special{pa 1158 -6}\special{pa 1158 4}\special{pa 1161 13}\special{pa 1168 20}%
+\special{pa 1177 23}\special{pa 1187 23}\special{pa 1196 18}\special{pa 1202 11}\special{pa 1205 1}%
+\special{pa 1203 -8}\special{pa 1198 -17}\special{sh 0}\special{fp}%
+\special{pa 0 0}\special{pa 1181 0}%
+\special{fp}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/drwxy.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/drwxy.tex
new file mode 100644
index 0000000000..59292047b8
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/drwxy.tex
@@ -0,0 +1,82 @@
+%%% /Users/Hannya/Desktop/KeTCindy/fig/drwxy.tex
+%%% Generator=template1basic.cdy
+{\unitlength=6mm%
+\begin{picture}%
+(10.1,3.45)(-5.1,-1.45)%
+\special{pn 8}%
+%
+\special{pn 5}%
+\special{pa -714 -28}\special{pa -730 -38}\special{pa -749 -39}\special{pa -766 -31}\special{pa -778 -16}\special{pa -781 2}\special{pa -776 20}\special{pa -762 34}\special{pa -744 39}\special{pa -726 36}\special{pa -711 24}\special{pa -703 7}\special{pa -705 -12}\special{pa -714 -28}\special{sh 0}\special{fp}%
+\special{pn 8}%
+\special{pa -1205 -0}\special{pa 1181 -0}%
+\special{fp}%
+\special{pa 0 343}\special{pa 0 -472}%
+\special{fp}%
+\settowidth{\Width}{$x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(5.0833333,0.0000000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{\Depth}%
+\put(0.0000000,2.0833333){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+\settowidth{\Width}{O}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(0.0833333,-0.0833333){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+\special{pa -1205 -219}\special{pa -1193 -223}\special{pa -1181 -227}\special{pa -1169 -230}%
+\special{pa -1157 -232}\special{pa -1145 -234}\special{pa -1133 -235}\special{pa -1121 -236}%
+\special{pa -1109 -236}\special{pa -1097 -236}\special{pa -1085 -235}\special{pa -1074 -233}%
+\special{pa -1062 -231}\special{pa -1050 -228}\special{pa -1038 -224}\special{pa -1026 -220}%
+\special{pa -1014 -216}\special{pa -1002 -211}\special{pa -990 -205}\special{pa -978 -199}%
+\special{pa -966 -192}\special{pa -954 -185}\special{pa -942 -177}\special{pa -930 -169}%
+\special{pa -918 -160}\special{pa -906 -151}\special{pa -895 -142}\special{pa -883 -132}%
+\special{pa -871 -122}\special{pa -859 -112}\special{pa -847 -101}\special{pa -835 -90}%
+\special{pa -823 -79}\special{pa -811 -68}\special{pa -799 -56}\special{pa -787 -45}%
+\special{pa -775 -33}\special{pa -763 -21}\special{pa -751 -9}\special{pa -739 3}%
+\special{pa -728 15}\special{pa -716 26}\special{pa -704 38}\special{pa -692 50}%
+\special{pa -680 62}\special{pa -668 73}\special{pa -656 84}\special{pa -644 95}%
+\special{pa -632 106}\special{pa -620 117}\special{pa -608 127}\special{pa -596 137}%
+\special{pa -584 146}\special{pa -572 155}\special{pa -561 164}\special{pa -549 173}%
+\special{pa -537 180}\special{pa -525 188}\special{pa -513 195}\special{pa -501 201}%
+\special{pa -489 207}\special{pa -477 213}\special{pa -465 218}\special{pa -453 222}%
+\special{pa -441 226}\special{pa -429 229}\special{pa -417 232}\special{pa -405 234}%
+\special{pa -394 235}\special{pa -382 236}\special{pa -370 236}\special{pa -358 236}%
+\special{pa -346 235}\special{pa -334 233}\special{pa -322 231}\special{pa -310 228}%
+\special{pa -298 225}\special{pa -286 221}\special{pa -274 217}\special{pa -262 212}%
+\special{pa -250 206}\special{pa -238 200}\special{pa -227 193}\special{pa -215 186}%
+\special{pa -203 179}\special{pa -191 171}\special{pa -179 162}\special{pa -167 153}%
+\special{pa -155 144}\special{pa -143 134}\special{pa -131 124}\special{pa -119 114}%
+\special{pa -107 104}\special{pa -95 93}\special{pa -83 82}\special{pa -71 70}%
+\special{pa -60 59}\special{pa -48 47}\special{pa -36 36}\special{pa -24 24}%
+\special{pa -12 12}\special{pa 0 -0}\special{pa 12 -12}\special{pa 24 -24}%
+\special{pa 36 -36}\special{pa 48 -48}\special{pa 60 -59}\special{pa 72 -71}%
+\special{pa 84 -82}\special{pa 96 -93}\special{pa 107 -104}\special{pa 119 -114}%
+\special{pa 131 -125}\special{pa 143 -135}\special{pa 155 -144}\special{pa 167 -154}%
+\special{pa 179 -162}\special{pa 191 -171}\special{pa 203 -179}\special{pa 215 -186}%
+\special{pa 227 -194}\special{pa 239 -200}\special{pa 251 -206}\special{pa 263 -212}%
+\special{pa 274 -217}\special{pa 286 -221}\special{pa 298 -225}\special{pa 310 -228}%
+\special{pa 322 -231}\special{pa 334 -233}\special{pa 346 -235}\special{pa 358 -236}%
+\special{pa 370 -236}\special{pa 382 -236}\special{pa 394 -235}\special{pa 406 -234}%
+\special{pa 418 -232}\special{pa 430 -229}\special{pa 441 -226}\special{pa 453 -222}%
+\special{pa 465 -218}\special{pa 477 -213}\special{pa 489 -207}\special{pa 501 -201}%
+\special{pa 513 -195}\special{pa 525 -188}\special{pa 537 -180}\special{pa 549 -172}%
+\special{pa 561 -164}\special{pa 573 -155}\special{pa 585 -146}\special{pa 597 -137}%
+\special{pa 609 -127}\special{pa 620 -116}\special{pa 632 -106}\special{pa 644 -95}%
+\special{pa 656 -84}\special{pa 668 -73}\special{pa 680 -61}\special{pa 692 -50}%
+\special{pa 704 -38}\special{pa 716 -26}\special{pa 728 -14}\special{pa 740 -2}%
+\special{pa 752 10}\special{pa 764 21}\special{pa 776 33}\special{pa 787 45}%
+\special{pa 799 57}\special{pa 811 68}\special{pa 823 80}\special{pa 835 91}%
+\special{pa 847 102}\special{pa 859 112}\special{pa 871 123}\special{pa 883 133}%
+\special{pa 895 142}\special{pa 907 152}\special{pa 919 161}\special{pa 931 169}%
+\special{pa 943 177}\special{pa 954 185}\special{pa 966 192}\special{pa 978 199}%
+\special{pa 990 205}\special{pa 1002 211}\special{pa 1014 216}\special{pa 1026 220}%
+\special{pa 1038 224}\special{pa 1050 228}\special{pa 1062 231}\special{pa 1074 233}%
+\special{pa 1086 235}\special{pa 1098 236}\special{pa 1110 236}\special{pa 1121 236}%
+\special{pa 1133 235}\special{pa 1145 234}\special{pa 1157 232}\special{pa 1169 230}%
+\special{pa 1181 227}%
+\special{fp}%
+\special{pn 5}%
+\special{pa 770 -28}\special{pa 754 -38}\special{pa 735 -39}\special{pa 718 -31}\special{pa 706 -16}\special{pa 703 2}\special{pa 708 20}\special{pa 722 34}\special{pa 740 39}\special{pa 758 36}\special{pa 773 24}\special{pa 781 7}\special{pa 780 -12}\special{pa 770 -28}\special{sh 0}\special{fp}%
+\special{pn 8}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ellipse-by-foci.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ellipse-by-foci.pdf
new file mode 100644
index 0000000000..b3120f2e13
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ellipse-by-foci.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ellipsecindy.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ellipsecindy.pdf
new file mode 100644
index 0000000000..6f930f8e38
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ellipsecindy.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ellipseplot1.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ellipseplot1.tex
new file mode 100644
index 0000000000..ee58c7fbb3
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ellipseplot1.tex
@@ -0,0 +1,92 @@
+%%% fig.tex 2015-8-10 9:24
+%%% fig.sce 2015-8-10 9:24
+{\unitlength=8mm%
+\begin{picture}%
+( 7.62000, 5.82000)( -3.62000, -2.82000)%
+\special{pn 8}%
+%
+\special{pa 915 0}\special{pa 908 -85}\special{pa 886 -169}\special{pa 849 -249}\special{pa 798 -326}%
+\special{pa 734 -397}\special{pa 658 -462}\special{pa 571 -519}\special{pa 475 -568}%
+\special{pa 371 -607}\special{pa 260 -637}\special{pa 146 -656}\special{pa 29 -664}%
+\special{pa -88 -661}\special{pa -204 -648}\special{pa -316 -623}\special{pa -423 -589}%
+\special{pa -524 -545}\special{pa -615 -492}\special{pa -697 -431}\special{pa -767 -362}%
+\special{pa -825 -288}\special{pa -869 -209}\special{pa -899 -127}\special{pa -914 -43}%
+\special{pa -914 43}\special{pa -899 127}\special{pa -869 209}\special{pa -825 288}%
+\special{pa -767 362}\special{pa -697 431}\special{pa -615 492}\special{pa -524 545}%
+\special{pa -423 589}\special{pa -316 623}\special{pa -204 648}\special{pa -88 661}%
+\special{pa 29 664}\special{pa 146 656}\special{pa 260 637}\special{pa 371 607}\special{pa 475 568}%
+\special{pa 571 519}\special{pa 658 462}\special{pa 734 397}\special{pa 798 326}\special{pa 849 249}%
+\special{pa 886 169}\special{pa 908 85}\special{pa 915 0}%
+\special{fp}%
+\special{pa -59 888}\special{pa 290 -945}%
+\special{fp}%
+\special{pa -1140 -904}\special{pa 1260 -447}%
+\special{fp}%
+\special{pa -630 0}\special{pa 207 -624}%
+\special{fp}%
+\special{pa 187 -578}\special{pa 232 -643}\special{pa 158 -617}\special{pa 172 -598}%
+\special{pa 187 -578}\special{sh 1}\special{ip}%
+\special{pn 8}%
+\special{pa 187 -578}\special{pa 232 -643}\special{pa 158 -617}\special{pa 172 -598}%
+\special{pa 187 -578}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 232 -643}\special{pa 613 -27}%
+\special{fp}%
+\special{pa 570 -51}\special{pa 630 0}\special{pa 611 -76}\special{pa 591 -64}\special{pa 570 -51}%
+\special{sh 1}\special{ip}%
+\special{pn 8}%
+\special{pa 570 -51}\special{pa 630 0}\special{pa 611 -76}\special{pa 591 -64}\special{pa 570 -51}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 106 -549}\special{pa 118 -535}\special{pa 132 -521}\special{pa 148 -510}%
+\special{pa 165 -500}\special{pa 184 -493}\special{pa 203 -488}\special{pa 223 -485}%
+\special{pa 242 -485}\special{pa 262 -488}\special{pa 281 -493}\special{pa 299 -500}%
+\special{pa 315 -509}%
+\special{fp}%
+\settowidth{\Width}{$F_1$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$F_1$}\settodepth{\Depth}{$F_1$}\setlength{\Height}{-\Height}%
+\put(-2.0000,-0.1500){\hspace*{\Width}\raisebox{\Height}{$F_1$}}%
+%
+%
+\settowidth{\Width}{$F_2$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$F_2$}\settodepth{\Depth}{$F_2$}\setlength{\Height}{-\Height}%
+\put(2.0000,-0.1500){\hspace*{\Width}\raisebox{\Height}{$F_2$}}%
+%
+%
+\special{pn 8}%
+\special{pa -1140 0}\special{pa 1260 0}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 1185 24}\special{pa 1260 0}\special{pa 1185 -24}\special{pa 1185 0}\special{pa 1185 24}%
+\special{sh 1}\special{ip}%
+\special{pn 8}%
+\special{pa 1185 24}\special{pa 1260 0}\special{pa 1185 -24}\special{pa 1185 0}\special{pa 1185 24}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 8}%
+\special{pa 0 888}\special{pa 0 -945}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 24 -870}\special{pa 0 -945}\special{pa -24 -870}\special{pa 0 -870}\special{pa 24 -870}%
+\special{sh 1}\special{ip}%
+\special{pn 8}%
+\special{pa 24 -870}\special{pa 0 -945}\special{pa -24 -870}\special{pa 0 -870}\special{pa 24 -870}%
+\special{fp}%
+\special{pn 8}%
+\settowidth{\Width}{$x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.0500,0.0000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{\Depth}%
+\put(0.0000,3.0500){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+%
+\settowidth{\Width}{O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(-0.0500,-0.0500){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ellipseplot2.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ellipseplot2.tex
new file mode 100644
index 0000000000..a39aaa945f
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ellipseplot2.tex
@@ -0,0 +1,72 @@
+%%% fig.tex 2015-8-10 9:41
+%%% fig.sce 2015-8-10 9:41
+{\unitlength=8mm%
+\begin{picture}%
+( 7.62000, 5.82000)( -3.62000, -2.82000)%
+\special{pn 8}%
+%
+\special{pa 915 0}\special{pa 908 -85}\special{pa 886 -169}\special{pa 849 -249}\special{pa 798 -326}%
+\special{pa 734 -397}\special{pa 658 -462}\special{pa 571 -519}\special{pa 475 -568}%
+\special{pa 371 -607}\special{pa 260 -637}\special{pa 146 -656}\special{pa 29 -664}%
+\special{pa -88 -661}\special{pa -204 -648}\special{pa -316 -623}\special{pa -423 -589}%
+\special{pa -524 -545}\special{pa -615 -492}\special{pa -697 -431}\special{pa -767 -362}%
+\special{pa -825 -288}\special{pa -869 -209}\special{pa -899 -127}\special{pa -914 -43}%
+\special{pa -914 43}\special{pa -899 127}\special{pa -869 209}\special{pa -825 288}%
+\special{pa -767 362}\special{pa -697 431}\special{pa -615 492}\special{pa -524 545}%
+\special{pa -423 589}\special{pa -316 623}\special{pa -204 648}\special{pa -88 661}%
+\special{pa 29 664}\special{pa 146 656}\special{pa 260 637}\special{pa 371 607}\special{pa 475 568}%
+\special{pa 571 519}\special{pa 658 462}\special{pa 734 397}\special{pa 798 326}\special{pa 849 249}%
+\special{pa 886 169}\special{pa 908 85}\special{pa 915 0}%
+\special{fp}%
+\special{pa -630 0}\special{pa 232 -643}\special{pa 630 0}%
+\special{fp}%
+\special{pa -630 0}\special{pa -430 -586}\special{pa 630 0}%
+\special{fp}%
+\special{pa -630 0}\special{pa 694 -433}\special{pa 630 0}%
+\special{fp}%
+\settowidth{\Width}{$F_1$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$F_1$}\settodepth{\Depth}{$F_1$}\setlength{\Height}{-\Height}%
+\put(-2.0000,-0.1500){\hspace*{\Width}\raisebox{\Height}{$F_1$}}%
+%
+%
+\settowidth{\Width}{$F_2$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$F_2$}\settodepth{\Depth}{$F_2$}\setlength{\Height}{-\Height}%
+\put(2.0000,-0.1500){\hspace*{\Width}\raisebox{\Height}{$F_2$}}%
+%
+%
+\special{pn 8}%
+\special{pa -1140 0}\special{pa 1260 0}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 1185 24}\special{pa 1260 0}\special{pa 1185 -24}\special{pa 1185 0}\special{pa 1185 24}%
+\special{sh 1}\special{ip}%
+\special{pn 8}%
+\special{pa 1185 24}\special{pa 1260 0}\special{pa 1185 -24}\special{pa 1185 0}\special{pa 1185 24}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 8}%
+\special{pa 0 888}\special{pa 0 -945}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 24 -870}\special{pa 0 -945}\special{pa -24 -870}\special{pa 0 -870}\special{pa 24 -870}%
+\special{sh 1}\special{ip}%
+\special{pn 8}%
+\special{pa 24 -870}\special{pa 0 -945}\special{pa -24 -870}\special{pa 0 -870}\special{pa 24 -870}%
+\special{fp}%
+\special{pn 8}%
+\settowidth{\Width}{$x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.0500,0.0000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{\Depth}%
+\put(0.0000,3.0500){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+%
+\settowidth{\Width}{O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(-0.0500,-0.0500){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/embed01.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/embed01.tex
new file mode 100644
index 0000000000..78f074ba3b
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/embed01.tex
@@ -0,0 +1,79 @@
+%%% /Users/Hannya/ketcindy/ketwork/template.tex 2016-8-18 19:51
+%%% template.sce 2016-8-18 19:51
+{\unitlength=8mm%
+\begin{picture}%
+( 7.09000, 7.64000)( -4.39000, -1.91000)%
+\special{pn 8}%
+%
+\settowidth{\Width}{$x$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-3.9477,-0.3675){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(1.5243,-1.0700){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+%
+\settowidth{\Width}{$z$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$z$}\settodepth{\Depth}{$z$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(0.0000,5.0239){\hspace*{\Width}\raisebox{\Height}{$z$}}%
+%
+%
+\special{pa 850 -79}\special{pa -1184 110}%
+\special{fp}%
+\special{pa -1078 -757}\special{pa 431 303}%
+\special{fp}%
+\special{pa 0 602}\special{pa 0 -1522}%
+\special{fp}%
+\special{pa -1111 79}\special{pa -1184 110}\special{pa -1107 127}\special{pa -1109 103}%
+\special{pa -1111 79}\special{sh 1}\special{ip}%
+\special{pn 1}%
+\special{pa -1111 79}\special{pa -1184 110}\special{pa -1107 127}\special{pa -1109 103}%
+\special{pa -1111 79}\special{pa -1184 110}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 356 280}\special{pa 431 303}\special{pa 384 240}\special{pa 370 260}\special{pa 356 280}%
+\special{sh 1}\special{ip}%
+\special{pn 1}%
+\special{pa 356 280}\special{pa 431 303}\special{pa 384 240}\special{pa 370 260}\special{pa 356 280}%
+\special{pa 431 303}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 24 -1448}\special{pa 0 -1522}\special{pa -24 -1448}\special{pa 0 -1448}%
+\special{pa 24 -1448}\special{sh 1}\special{ip}%
+\special{pn 1}%
+\special{pa 24 -1448}\special{pa 0 -1522}\special{pa -24 -1448}\special{pa 0 -1448}%
+\special{pa 24 -1448}\special{pa 0 -1522}%
+\special{fp}%
+\special{pn 8}%
+\settowidth{\Width}{O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(-0.0500,-0.0500){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+%
+\special{pa -888 83}\special{pa -241 537}\special{pa -241 -1290}\special{pa -888 -1744}%
+\special{pa -888 83}%
+\special{fp}%
+\special{pa -349 -453}\special{pa -351 -530}\special{pa -356 -609}\special{pa -364 -687}%
+\special{pa -376 -765}\special{pa -390 -839}\special{pa -407 -910}\special{pa -427 -977}%
+\special{pa -449 -1037}\special{pa -473 -1090}\special{pa -498 -1136}\special{pa -524 -1174}%
+\special{pa -551 -1202}\special{pa -578 -1221}\special{pa -605 -1230}\special{pa -631 -1230}%
+\special{pa -656 -1219}\special{pa -680 -1199}\special{pa -702 -1170}\special{pa -722 -1131}%
+\special{pa -739 -1084}\special{pa -753 -1030}\special{pa -765 -969}\special{pa -773 -902}%
+\special{pa -778 -830}\special{pa -780 -755}\special{pa -778 -678}\special{pa -773 -599}%
+\special{pa -765 -520}\special{pa -753 -443}\special{pa -739 -368}\special{pa -722 -297}%
+\special{pa -702 -231}\special{pa -680 -171}\special{pa -656 -117}\special{pa -631 -71}%
+\special{pa -605 -34}\special{pa -578 -6}\special{pa -551 13}\special{pa -524 23}%
+\special{pa -498 22}\special{pa -473 12}\special{pa -449 -9}\special{pa -427 -38}%
+\special{pa -407 -77}\special{pa -390 -124}\special{pa -376 -178}\special{pa -364 -239}%
+\special{pa -356 -306}\special{pa -351 -377}\special{pa -349 -453}%
+\special{fp}%
+\special{pa -565 -1213}\special{pa -751 -430}\special{pa -378 -168}\special{pa -565 -1213}%
+\special{fp}%
+\special{pn 3}%
+\special{pa -556 -612}\special{pa -563 -616}\special{pa -570 -614}\special{pa -575 -609}%
+\special{pa -576 -602}\special{pa -573 -596}\special{pa -566 -592}\special{pa -559 -593}%
+\special{pa -554 -599}\special{pa -553 -606}\special{pa -556 -612}\special{sh 1}\special{fp}%
+\special{pn 8}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/embed02.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/embed02.tex
new file mode 100644
index 0000000000..115ca20d09
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/embed02.tex
@@ -0,0 +1,82 @@
+%%% /Users/Hannya/ketcindy/ketwork/template.tex 2016-8-18 21:20
+%%% template.sce 2016-8-18 21:20
+{\unitlength=8mm%
+\begin{picture}%
+( 9.18000, 7.71000)( -4.79000, -2.03000)%
+\special{pn 8}%
+%
+\settowidth{\Width}{$x$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-4.4289,-1.0449){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.8060,-1.7060){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+%
+\settowidth{\Width}{$z$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$z$}\settodepth{\Depth}{$z$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(0.0000,4.8175){\hspace*{\Width}\raisebox{\Height}{$z$}}%
+%
+%
+\special{pn 3}%
+\special{pa -92 -427}\special{pa -99 -430}\special{pa -106 -429}\special{pa -111 -424}%
+\special{pa -112 -417}\special{pa -109 -410}\special{pa -103 -407}\special{pa -95 -408}%
+\special{pa -90 -413}\special{pa -89 -421}\special{pa -92 -427}\special{sh 1}\special{fp}%
+\special{pn 8}%
+\special{pa 1337 -315}\special{pa 811 -191}%
+\special{fp}%
+\special{pa 758 -179}\special{pa 380 -90}%
+\special{fp}%
+\special{pa 305 -72}\special{pa -311 73}%
+\special{fp}%
+\special{pa -385 91}\special{pa -1166 275}%
+\special{fp}%
+\special{pa -1219 288}\special{pa -1337 315}%
+\special{fp}%
+\special{pa -1332 -810}\special{pa -1019 -619}%
+\special{fp}%
+\special{pa -976 -593}\special{pa -742 -451}%
+\special{fp}%
+\special{pa -697 -424}\special{pa -581 -353}%
+\special{fp}%
+\special{pa -538 -327}\special{pa -306 -186}%
+\special{fp}%
+\special{pa -238 -144}\special{pa 78 47}%
+\special{fp}%
+\special{pa 130 79}\special{pa 635 386}%
+\special{fp}%
+\special{pa 677 412}\special{pa 833 506}%
+\special{fp}%
+\special{pa 0 639}\special{pa 0 418}%
+\special{fp}%
+\special{pa 0 369}\special{pa 0 119}%
+\special{fp}%
+\special{pa 0 68}\special{pa 0 -117}%
+\special{fp}%
+\special{pa 0 -166}\special{pa 0 -1458}%
+\special{fp}%
+\special{pa 993 -1126}\special{pa 645 451}\special{pa -1195 289}\special{pa -846 -1288}%
+\special{pa -24 -1216}%
+\special{fp}%
+\special{pa 24 -1212}\special{pa 993 -1126}%
+\special{fp}%
+\special{pa 513 -365}\special{pa 523 -431}\special{pa 522 -497}\special{pa 513 -562}%
+\special{pa 493 -625}\special{pa 464 -684}\special{pa 426 -740}\special{pa 380 -790}%
+\special{pa 326 -834}\special{pa 266 -872}\special{pa 199 -903}\special{pa 129 -926}%
+\special{pa 54 -941}\special{pa 24 -943}%
+\special{fp}%
+\special{pa -24 -947}\special{pa -101 -946}\special{pa -180 -936}\special{pa -257 -918}%
+\special{pa -331 -892}\special{pa -402 -859}\special{pa -468 -818}\special{pa -529 -772}%
+\special{pa -582 -720}\special{pa -628 -663}\special{pa -666 -602}\special{pa -695 -538}%
+\special{pa -714 -473}\special{pa -724 -406}\special{pa -724 -340}\special{pa -714 -275}%
+\special{pa -695 -212}\special{pa -666 -153}\special{pa -628 -98}\special{pa -582 -48}%
+\special{pa -528 -3}\special{pa -467 35}\special{pa -401 65}\special{pa -330 88}\special{pa -255 103}%
+\special{pa -178 110}\special{pa -100 108}\special{pa -22 99}\special{pa 55 81}\special{pa 130 55}%
+\special{pa 201 21}\special{pa 267 -19}\special{pa 327 -66}\special{pa 381 -118}\special{pa 427 -175}%
+\special{pa 465 -235}\special{pa 493 -299}\special{pa 513 -365}%
+\special{fp}%
+\special{pa -22 -905}\special{pa -690 -202}\special{pa 372 -109}\special{pa 16 -945}%
+\special{fp}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/embed03.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/embed03.pdf
new file mode 100644
index 0000000000..0ba328b7fb
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/embed03.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/enclosing.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/enclosing.tex
new file mode 100644
index 0000000000..c82abc3ccf
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/enclosing.tex
@@ -0,0 +1,55 @@
+%%% /Users/Hannya/Desktop/KeTCindy/fig/enclosing.tex
+%%% Generator=template1basic.cdy
+{\unitlength=8mm%
+\begin{picture}%
+(5,6)(-2,-1)%
+\special{pn 8}%
+%
+\color[rgb]{1,0,0}%
+\special{pa 0 0}\special{pa 31 -3}\special{pa 63 -13}\special{pa 94 -28}\special{pa 126 -50}%
+\special{pa 157 -79}\special{pa 189 -113}\special{pa 220 -154}\special{pa 252 -202}%
+\special{pa 283 -255}\special{pa 315 -315}\special{pa 346 -381}\special{pa 378 -454}%
+\special{pa 409 -532}\special{pa 441 -617}\special{pa 472 -709}\special{pa 504 -806}%
+\special{pa 535 -910}\special{pa 567 -1020}\special{pa 598 -1137}\special{pa 630 -1260}%
+\special{pa 630 0}\special{pa 0 0}\special{sh 1}\special{ip}%
+\color[rgb]{0,0,0}%
+\special{pa -630 -1260}\special{pa -598 -1137}\special{pa -567 -1020}\special{pa -535 -910}%
+\special{pa -504 -806}\special{pa -472 -709}\special{pa -441 -617}\special{pa -409 -532}%
+\special{pa -378 -454}\special{pa -346 -381}\special{pa -315 -315}\special{pa -283 -255}%
+\special{pa -252 -202}\special{pa -220 -154}\special{pa -189 -113}\special{pa -157 -79}%
+\special{pa -126 -50}\special{pa -94 -28}\special{pa -63 -13}\special{pa -31 -3}%
+\special{pa 0 -0}\special{pa 31 -3}\special{pa 63 -13}\special{pa 94 -28}%
+\special{pa 126 -50}\special{pa 157 -79}\special{pa 189 -113}\special{pa 220 -154}%
+\special{pa 252 -202}\special{pa 283 -255}\special{pa 315 -315}\special{pa 346 -381}%
+\special{pa 378 -454}\special{pa 409 -532}\special{pa 441 -617}\special{pa 472 -709}%
+\special{pa 504 -806}\special{pa 535 -910}\special{pa 567 -1020}\special{pa 598 -1137}%
+\special{pa 630 -1260}\special{pa 661 -1389}\special{pa 693 -1524}\special{pa 704 -1575}%
+\special{fp}%
+\special{pa -630 -0}\special{pa 945 -0}%
+\special{fp}%
+\special{pa 630 315}\special{pa 630 -1575}%
+\special{fp}%
+\special{pa 0 -0}\special{pa 31 -3}\special{pa 63 -13}\special{pa 94 -28}%
+\special{pa 126 -50}\special{pa 157 -79}\special{pa 189 -113}\special{pa 220 -154}%
+\special{pa 252 -202}\special{pa 283 -255}\special{pa 315 -315}\special{pa 346 -381}%
+\special{pa 378 -454}\special{pa 409 -532}\special{pa 441 -617}\special{pa 472 -709}%
+\special{pa 504 -806}\special{pa 535 -910}\special{pa 567 -1020}\special{pa 598 -1137}%
+\special{pa 630 -1260}\special{pa 630 -0}\special{pa 0 -0}%
+\special{fp}%
+\special{pa -630 -0}\special{pa 945 -0}%
+\special{fp}%
+\special{pa 0 315}\special{pa 0 -1575}%
+\special{fp}%
+\settowidth{\Width}{$x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(3.0625000,0.0000000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{\Depth}%
+\put(0.0000000,5.0625000){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+\settowidth{\Width}{O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(-0.0625000,-0.0625000){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ewns.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ewns.tex
new file mode 100644
index 0000000000..9d062e4164
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ewns.tex
@@ -0,0 +1,43 @@
+%%% /Users/Hannya/Desktop/KeTCindy/fig/ewns.tex
+%%% Generator=template1basic.cdy
+{\unitlength=20mm%
+\begin{picture}%
+(1.39,1.36)(0.28,0.34)%
+\special{pn 8}%
+%
+\Large%
+\special{pn 1}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 804 -804}\special{pa 791 -811}\special{pa 777 -808}\special{pa 766 -798}\special{pa 764 -784}\special{pa 771 -771}\special{pa 784 -764}\special{pa 798 -766}\special{pa 808 -777}\special{pa 811 -791}\special{pa 804 -804}\special{sh 1}\special{fp}%
+}%
+\special{pn 8}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{e}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{e}\settodepth{\Depth}{e}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(1.1000000,1.0000000){\hspace*{\Width}\raisebox{\Height}{e}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{w}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{w}\settodepth{\Depth}{w}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(0.9000000,1.0000000){\hspace*{\Width}\raisebox{\Height}{w}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{n}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{n}\settodepth{\Depth}{n}\setlength{\Height}{\Depth}%
+\put(1.0000000,1.1000000){\hspace*{\Width}\raisebox{\Height}{n}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{s}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{s}\settodepth{\Depth}{s}\setlength{\Height}{-\Height}%
+\put(1.0000000,0.9000000){\hspace*{\Width}\raisebox{\Height}{s}}%
+%
+}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ewsn.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ewsn.tex
new file mode 100644
index 0000000000..b0e6490888
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ewsn.tex
@@ -0,0 +1,99 @@
+%%% /Users/Hannya/ketcindy/ketwork/ewsn.tex 2016-11-29 8:23
+%%% ewsn.sce 2016-11-29 8:23
+{\unitlength=8mm%
+\begin{picture}%
+( 4.29000, 5.46000)( -0.57000, -0.42000)%
+\special{pn 8}%
+%
+\special{pa 157 -1102}\special{pa 157 -315}\special{pa 630 -315}\special{pa 630 -1102}%
+\special{pa 157 -1102}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 161 -1102}\special{pa 153 -1102}\special{fp}\special{pa 122 -1102}\special{pa 114 -1102}\special{fp}%
+\special{pa 83 -1102}\special{pa 75 -1102}\special{fp}\special{pa 43 -1102}\special{pa 35 -1102}\special{fp}%
+\special{pa 4 -1102}\special{pa -4 -1102}\special{fp}\special{pn 8}%
+\special{pn 8}%
+\special{pa -4 -315}\special{pa 4 -315}\special{fp}\special{pa 35 -315}\special{pa 43 -315}\special{fp}%
+\special{pa 75 -315}\special{pa 83 -315}\special{fp}\special{pa 114 -315}\special{pa 122 -315}\special{fp}%
+\special{pa 153 -315}\special{pa 161 -315}\special{fp}\special{pn 8}%
+\special{pn 8}%
+\special{pa 157 -319}\special{pa 157 -311}\special{fp}\special{pa 157 -280}\special{pa 157 -272}\special{fp}%
+\special{pa 157 -240}\special{pa 157 -232}\special{fp}\special{pa 157 -201}\special{pa 157 -193}\special{fp}%
+\special{pa 157 -161}\special{pa 157 -153}\special{fp}\special{pa 157 -122}\special{pa 157 -114}\special{fp}%
+\special{pa 157 -83}\special{pa 157 -75}\special{fp}\special{pa 157 -43}\special{pa 157 -35}\special{fp}%
+\special{pa 157 -4}\special{pa 157 4}\special{fp}\special{pn 8}%
+\special{pn 8}%
+\special{pa 630 -319}\special{pa 630 -311}\special{fp}\special{pa 630 -280}\special{pa 630 -272}\special{fp}%
+\special{pa 630 -240}\special{pa 630 -232}\special{fp}\special{pa 630 -201}\special{pa 630 -193}\special{fp}%
+\special{pa 630 -161}\special{pa 630 -153}\special{fp}\special{pa 630 -122}\special{pa 630 -114}\special{fp}%
+\special{pa 630 -83}\special{pa 630 -75}\special{fp}\special{pa 630 -43}\special{pa 630 -35}\special{fp}%
+\special{pa 630 -4}\special{pa 630 4}\special{fp}\special{pn 8}%
+\settowidth{\Width}{a}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{a}\settodepth{\Depth}{a}\setlength{\Height}{-\Height}%
+\put(0.5000,-0.1500){\hspace*{\Width}\raisebox{\Height}{a}}%
+%
+%
+\settowidth{\Width}{b}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{b}\settodepth{\Depth}{b}\setlength{\Height}{-\Height}%
+\put(2.0000,-0.0500){\hspace*{\Width}\raisebox{\Height}{b}}%
+%
+%
+\settowidth{\Width}{c}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{c}\settodepth{\Depth}{c}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-0.0500,1.0000){\hspace*{\Width}\raisebox{\Height}{c}}%
+%
+%
+\settowidth{\Width}{d}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{d}\settodepth{\Depth}{d}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-0.0500,3.5000){\hspace*{\Width}\raisebox{\Height}{d}}%
+%
+%
+\settowidth{\Width}{e}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{e}\settodepth{\Depth}{e}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.3600,2.1600){\hspace*{\Width}\raisebox{\Height}{e}}%
+%
+%
+\settowidth{\Width}{s}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{s}\settodepth{\Depth}{s}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(1.1200,0.7400){\hspace*{\Width}\raisebox{\Height}{s}}%
+%
+%
+\settowidth{\Width}{w}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{w}\settodepth{\Depth}{w}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(0.1000,2.1800){\hspace*{\Width}\raisebox{\Height}{w}}%
+%
+%
+\settowidth{\Width}{n}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{n}\settodepth{\Depth}{n}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(1.1400,3.7700){\hspace*{\Width}\raisebox{\Height}{n}}%
+%
+%
+\settowidth{\Width}{u}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{u}\settodepth{\Depth}{u}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(3.0500,0.0000){\hspace*{\Width}\raisebox{\Height}{u}}%
+%
+%
+\settowidth{\Width}{v}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{v}\settodepth{\Depth}{v}\setlength{\Height}{\Depth}%
+\put(0.0000,4.5500){\hspace*{\Width}\raisebox{\Height}{v}}%
+%
+%
+\special{pa -180 0}\special{pa 913 0}%
+\special{fp}%
+\special{pa 870 24}\special{pa 945 0}\special{pa 870 -24}\special{pa 870 0}\special{pa 870 24}%
+\special{sh 1}\special{ip}%
+\special{pn 1}%
+\special{pa 870 24}\special{pa 945 0}\special{pa 870 -24}\special{pa 870 0}\special{pa 870 24}%
+\special{pa 945 0}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 0 132}\special{pa 0 -1386}%
+\special{fp}%
+\special{pa 24 -1342}\special{pa 0 -1417}\special{pa -24 -1342}\special{pa 0 -1342}%
+\special{pa 24 -1342}\special{sh 1}\special{ip}%
+\special{pn 1}%
+\special{pa 24 -1342}\special{pa 0 -1417}\special{pa -24 -1342}\special{pa 0 -1342}%
+\special{pa 24 -1342}\special{pa 0 -1417}%
+\special{fp}%
+\special{pn 8}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/execcmdc1.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/execcmdc1.tex
new file mode 100644
index 0000000000..3da9c9db0e
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/execcmdc1.tex
@@ -0,0 +1,138 @@
+%%% /Users/Hannya/Desktop/fig/template3D.tex
+%%% Generator=template3D.cdy
+{\unitlength=6mm%
+\begin{picture}%
+(7.66,6.16)(-3.76,-1.67)%
+\special{pn 8}%
+%
+\settowidth{\Width}{$x$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-3.0900000,-0.8500000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(3.9000000,-1.0000000){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+\settowidth{\Width}{$z$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$z$}\settodepth{\Depth}{$z$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(0.0000000,4.1700000){\hspace*{\Width}\raisebox{\Height}{$z$}}%
+%
+\special{pa 471 -9}\special{pa 462 -45}\special{pa 452 -80}\special{pa 443 -115}%
+\special{pa 433 -149}\special{pa 424 -182}\special{pa 414 -214}\special{pa 405 -246}%
+\special{pa 396 -277}\special{pa 386 -307}\special{pa 377 -337}\special{pa 367 -365}%
+\special{pa 358 -393}\special{pa 348 -421}\special{pa 339 -447}\special{pa 329 -473}%
+\special{pa 320 -498}\special{pa 310 -523}\special{pa 301 -546}\special{pa 291 -569}%
+\special{pa 282 -592}\special{pa 272 -613}\special{pa 263 -634}\special{pa 253 -654}%
+\special{pa 243 -673}\special{pa 234 -692}\special{pa 224 -710}\special{pa 215 -727}%
+\special{pa 205 -743}\special{pa 196 -759}\special{pa 187 -772}\special{pa 177 -788}%
+\special{pa 167 -802}\special{pa 157 -814}\special{pa 148 -826}\special{pa 138 -838}%
+\special{pa 128 -848}\special{pa 118 -858}\special{pa 109 -867}\special{pa 106 -869}%
+\special{pa 99 -875}\special{pa 89 -883}\special{pa 79 -890}\special{pa 72 -894}%
+\special{pa 68 -896}\special{pa 58 -902}\special{pa 53 -904}\special{pa 46 -906}%
+\special{pa 40 -909}\special{pa 34 -910}\special{pa 31 -911}\special{pa 24 -913}%
+\special{pa 19 -914}\special{pa 13 -915}\special{pa 9 -915}\special{pa 5 -915}%
+\special{pa 1 -915}\special{pa -4 -915}\special{pa -8 -915}\special{pa -12 -915}%
+\special{pa -17 -914}\special{pa -23 -913}\special{pa -29 -912}\special{pa -34 -910}%
+\special{pa -38 -909}\special{pa -46 -906}\special{pa -49 -905}\special{pa -58 -902}%
+\special{pa -66 -897}\special{pa -79 -890}\special{pa -89 -883}\special{pa -95 -879}%
+\special{pa -99 -875}\special{pa -109 -867}\special{pa -118 -858}\special{pa -128 -848}%
+\special{pa -138 -838}\special{pa -148 -826}\special{pa -157 -815}\special{pa -167 -802}%
+\special{pa -177 -788}\special{pa -186 -774}\special{pa -196 -759}\special{pa -205 -743}%
+\special{pa -215 -727}\special{pa -224 -710}\special{pa -234 -692}\special{pa -243 -673}%
+\special{pa -253 -654}\special{pa -263 -634}\special{pa -272 -613}\special{pa -282 -592}%
+\special{pa -291 -569}\special{pa -301 -546}\special{pa -310 -523}\special{pa -320 -498}%
+\special{pa -329 -473}\special{pa -339 -447}\special{pa -348 -421}\special{pa -358 -393}%
+\special{pa -367 -365}\special{pa -377 -337}\special{pa -386 -307}\special{pa -396 -277}%
+\special{pa -405 -246}\special{pa -411 -226}\special{pa -414 -214}\special{pa -424 -182}%
+\special{pa -433 -149}\special{pa -443 -115}\special{pa -452 -80}\special{pa -462 -45}%
+\special{pa -471 -9}%
+\special{fp}%
+\special{pa -329 90}\special{pa -284 100}\special{pa -234 109}\special{pa -181 116}%
+\special{pa -125 121}\special{pa -67 124}\special{pa -8 126}\special{pa 52 125}%
+\special{pa 110 122}\special{pa 167 117}\special{pa 221 111}\special{pa 271 103}%
+\special{pa 318 93}\special{pa 359 82}\special{pa 395 69}\special{pa 424 55}%
+\special{pa 447 41}\special{pa 463 26}\special{pa 471 10}\special{pa 472 -6}%
+\special{pa 471 -9}%
+\special{fp}%
+\special{pa -471 -9}\special{pa -472 6}\special{pa -465 22}\special{pa -452 37}%
+\special{pa -431 52}\special{pa -403 66}\special{pa -369 78}\special{pa -329 90}%
+\special{fp}%
+\special{pa -509 -131}\special{pa -429 -164}%
+\special{fp}%
+\special{pa 229 -436}\special{pa 328 -477}%
+\special{fp}%
+\special{pa 328 -477}\special{pa 509 -552}%
+\special{fp}%
+\special{pa 822 -225}\special{pa 441 -121}%
+\special{fp}%
+\special{pa -329 90}\special{pa -658 180}%
+\special{fp}%
+\special{pa -848 -219}\special{pa -443 -114}%
+\special{fp}%
+\special{pa 338 87}\special{pa 848 219}%
+\special{fp}%
+\special{pa 0 394}\special{pa 0 125}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 473 -6}\special{pa 468 -12}\special{fp}\special{pa 450 -38}\special{pa 444 -43}\special{fp}%
+\special{pa 416 -59}\special{pa 409 -63}\special{fp}\special{pa 379 -75}\special{pa 372 -77}\special{fp}%
+\special{pa 341 -87}\special{pa 333 -89}\special{fp}\special{pa 302 -96}\special{pa 294 -98}\special{fp}%
+\special{pa 263 -104}\special{pa 255 -105}\special{fp}\special{pa 223 -110}\special{pa 215 -112}\special{fp}%
+\special{pa 184 -116}\special{pa 176 -117}\special{fp}\special{pa 144 -119}\special{pa 136 -120}\special{fp}%
+\special{pa 104 -122}\special{pa 96 -123}\special{fp}\special{pa 64 -124}\special{pa 56 -125}\special{fp}%
+\special{pa 24 -125}\special{pa 16 -125}\special{fp}\special{pa -16 -125}\special{pa -24 -125}\special{fp}%
+\special{pa -56 -125}\special{pa -64 -124}\special{fp}\special{pa -96 -123}\special{pa -104 -122}\special{fp}%
+\special{pa -136 -120}\special{pa -144 -119}\special{fp}\special{pa -176 -116}\special{pa -184 -115}\special{fp}%
+\special{pa -216 -112}\special{pa -224 -111}\special{fp}\special{pa -255 -105}\special{pa -263 -104}\special{fp}%
+\special{pa -295 -98}\special{pa -302 -96}\special{fp}\special{pa -334 -89}\special{pa -341 -86}\special{fp}%
+\special{pa -372 -77}\special{pa -379 -74}\special{fp}\special{pa -409 -62}\special{pa -416 -59}\special{fp}%
+\special{pa -444 -43}\special{pa -450 -38}\special{fp}\special{pa -469 -12}\special{pa -473 -6}\special{fp}%
+\special{pn 8}%
+\special{pn 8}%
+\special{pa 445 -122}\special{pa 437 -120}\special{fp}\special{pa 407 -111}\special{pa 399 -109}\special{fp}%
+\special{pa 368 -101}\special{pa 360 -99}\special{fp}\special{pa 330 -90}\special{pa 322 -88}\special{fp}%
+\special{pa 291 -80}\special{pa 283 -78}\special{fp}\special{pa 252 -69}\special{pa 245 -67}\special{fp}%
+\special{pa 214 -59}\special{pa 206 -57}\special{fp}\special{pa 175 -48}\special{pa 168 -46}\special{fp}%
+\special{pa 137 -38}\special{pa 129 -35}\special{fp}\special{pa 98 -27}\special{pa 91 -25}\special{fp}%
+\special{pa 60 -16}\special{pa 52 -14}\special{fp}\special{pa 21 -6}\special{pa 14 -4}\special{fp}%
+\special{pa -17 5}\special{pa -25 7}\special{fp}\special{pa -56 15}\special{pa -63 17}\special{fp}%
+\special{pa -94 26}\special{pa -102 28}\special{fp}\special{pa -133 36}\special{pa -140 38}\special{fp}%
+\special{pa -171 47}\special{pa -179 49}\special{fp}\special{pa -210 57}\special{pa -217 60}\special{fp}%
+\special{pa -248 68}\special{pa -256 70}\special{fp}\special{pa -287 79}\special{pa -294 81}\special{fp}%
+\special{pa -325 89}\special{pa -333 91}\special{fp}\special{pn 8}%
+\special{pa -447 -115}\special{pa -439 -113}\special{fp}\special{pa -408 -105}\special{pa -400 -103}\special{fp}%
+\special{pa -369 -95}\special{pa -361 -93}\special{fp}\special{pa -330 -85}\special{pa -322 -83}\special{fp}%
+\special{pa -291 -75}\special{pa -283 -73}\special{fp}\special{pa -252 -65}\special{pa -244 -63}\special{fp}%
+\special{pa -212 -55}\special{pa -205 -53}\special{fp}\special{pa -173 -45}\special{pa -166 -43}\special{fp}%
+\special{pa -134 -35}\special{pa -127 -33}\special{fp}\special{pa -95 -25}\special{pa -87 -23}\special{fp}%
+\special{pa -56 -14}\special{pa -48 -12}\special{fp}\special{pa -17 -4}\special{pa -9 -2}\special{fp}%
+\special{pa 22 6}\special{pa 30 8}\special{fp}\special{pa 61 16}\special{pa 69 18}\special{fp}%
+\special{pa 100 26}\special{pa 108 28}\special{fp}\special{pa 139 36}\special{pa 147 38}\special{fp}%
+\special{pa 178 46}\special{pa 186 48}\special{fp}\special{pa 217 56}\special{pa 225 58}\special{fp}%
+\special{pa 256 66}\special{pa 264 68}\special{fp}\special{pa 295 76}\special{pa 303 78}\special{fp}%
+\special{pa 335 86}\special{pa 342 88}\special{fp}\special{pn 8}%
+\special{pa 0 129}\special{pa 0 121}\special{fp}\special{pa 0 90}\special{pa 0 82}\special{fp}%
+\special{pa 0 50}\special{pa 0 42}\special{fp}\special{pa 0 10}\special{pa 0 2}\special{fp}%
+\special{pa 0 -30}\special{pa 0 -38}\special{fp}\special{pa 0 -70}\special{pa 0 -78}\special{fp}%
+\special{pa 0 -110}\special{pa 0 -118}\special{fp}\special{pa 0 -150}\special{pa 0 -158}\special{fp}%
+\special{pa 0 -189}\special{pa 0 -197}\special{fp}\special{pa 0 -229}\special{pa 0 -237}\special{fp}%
+\special{pa 0 -269}\special{pa 0 -277}\special{fp}\special{pa 0 -309}\special{pa 0 -317}\special{fp}%
+\special{pa 0 -349}\special{pa 0 -357}\special{fp}\special{pa 0 -389}\special{pa 0 -397}\special{fp}%
+\special{pa 0 -429}\special{pa 0 -437}\special{fp}\special{pa 0 -468}\special{pa 0 -476}\special{fp}%
+\special{pa 0 -508}\special{pa 0 -516}\special{fp}\special{pa 0 -548}\special{pa 0 -556}\special{fp}%
+\special{pa 0 -588}\special{pa 0 -596}\special{fp}\special{pa 0 -628}\special{pa 0 -636}\special{fp}%
+\special{pa 0 -668}\special{pa 0 -676}\special{fp}\special{pa 0 -708}\special{pa 0 -716}\special{fp}%
+\special{pa 0 -747}\special{pa 0 -755}\special{fp}\special{pa 0 -787}\special{pa 0 -795}\special{fp}%
+\special{pa 0 -827}\special{pa 0 -835}\special{fp}\special{pa 0 -867}\special{pa 0 -875}\special{fp}%
+\special{pa 0 -907}\special{pa 0 -915}\special{fp}\special{pn 8}%
+{%
+\color[rgb]{1,0,0}%
+\special{pa -429 -164}\special{pa -394 -178}\special{fp}\special{pa -360 -193}\special{pa -325 -207}\special{fp}%
+\special{pa -290 -221}\special{pa -256 -236}\special{fp}\special{pa -221 -250}\special{pa -187 -264}\special{fp}%
+\special{pa -152 -279}\special{pa -117 -293}\special{fp}\special{pa -83 -307}\special{pa -48 -322}\special{fp}%
+\special{pa -13 -336}\special{pa 21 -350}\special{fp}\special{pa 56 -365}\special{pa 90 -379}\special{fp}%
+\special{pa 125 -393}\special{pa 160 -408}\special{fp}\special{pa 194 -422}\special{pa 229 -436}\special{fp}%
+%
+%
+}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/expr.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/expr.tex
new file mode 100644
index 0000000000..0d6fdae805
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/expr.tex
@@ -0,0 +1,70 @@
+%%% test.tex 2014-12-3 7:27
+%%% test.sce 2014-12-3 7:27
+{\unitlength=6mm%
+\begin{picture}%
+( 9.36000, 5.96000)( -4.36000, -0.96000)%
+\special{pn 8}%
+%
+\settowidth{\Width}{$f(x)=\frac{1}{4} x^2$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$f(x)=\frac{1}{4} x^2$}\settodepth{\Depth}{$f(x)=\frac{1}{4} x^2$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-2.9500,3.0000){\hspace*{\Width}\raisebox{\Height}{$f(x)=\frac{1}{4} x^2$}}%
+%
+%
+\settowidth{\Width}{$f'(x)=\frac{1}{2}x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$f'(x)=\frac{1}{2}x$}\settodepth{\Depth}{$f'(x)=\frac{1}{2}x$}\setlength{\Height}{-\Height}%
+\put(3.1500,1.3500){\hspace*{\Width}\raisebox{\Height}{$f'(x)=\frac{1}{2}x$}}%
+%
+%
+\settowidth{\Width}{$2$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$2$}\settodepth{\Depth}{$2$}\setlength{\Height}{-\Height}%
+\put(2.0000,-0.0500){\hspace*{\Width}\raisebox{\Height}{$2$}}%
+%
+%
+\settowidth{\Width}{$1$}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{$1$}\settodepth{\Depth}{$1$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-0.0500,1.0000){\hspace*{\Width}\raisebox{\Height}{$1$}}%
+%
+%
+\special{pa -1030 -1123}\special{pa -985 -1026}\special{pa -940 -934}\special{pa -895 -847}%
+\special{pa -849 -764}\special{pa -804 -685}\special{pa -759 -610}\special{pa -714 -540}%
+\special{pa -669 -474}\special{pa -624 -412}\special{pa -579 -354}\special{pa -534 -301}%
+\special{pa -488 -252}\special{pa -443 -208}\special{pa -398 -168}\special{pa -353 -132}%
+\special{pa -308 -100}\special{pa -263 -73}\special{pa -218 -50}\special{pa -173 -32}%
+\special{pa -127 -17}\special{pa -82 -7}\special{pa -37 -1}\special{pa 8 0}\special{pa 53 -3}%
+\special{pa 98 -10}\special{pa 143 -22}\special{pa 188 -38}\special{pa 234 -58}\special{pa 279 -82}%
+\special{pa 324 -111}\special{pa 369 -144}\special{pa 414 -181}\special{pa 459 -223}%
+\special{pa 504 -269}\special{pa 549 -319}\special{pa 595 -374}\special{pa 640 -433}%
+\special{pa 685 -496}\special{pa 730 -564}\special{pa 775 -636}\special{pa 820 -712}%
+\special{pa 865 -792}\special{pa 910 -877}\special{pa 955 -966}\special{pa 1001 -1060}%
+\special{pa 1046 -1157}\special{pa 1056 -1181}%
+\special{fp}%
+\special{pa -454 227}\special{pa -443 222}\special{pa -398 199}\special{pa -353 177}%
+\special{pa -308 154}\special{pa -263 131}\special{pa -218 109}\special{pa -173 86}%
+\special{pa -127 64}\special{pa -82 41}\special{pa -37 19}\special{pa 8 -4}\special{pa 53 -27}%
+\special{pa 98 -49}\special{pa 143 -72}\special{pa 188 -94}\special{pa 234 -117}\special{pa 279 -139}%
+\special{pa 324 -162}\special{pa 369 -184}\special{pa 414 -207}\special{pa 459 -230}%
+\special{pa 504 -252}\special{pa 549 -275}\special{pa 595 -297}\special{pa 640 -320}%
+\special{pa 685 -342}\special{pa 730 -365}\special{pa 775 -387}\special{pa 820 -410}%
+\special{pa 865 -433}\special{pa 910 -455}\special{pa 955 -478}\special{pa 1001 -500}%
+\special{pa 1046 -523}\special{pa 1091 -545}\special{pa 1136 -568}\special{pa 1181 -591}%
+\special{fp}%
+\special{pa -1030 0}\special{pa 1181 0}%
+\special{fp}%
+\special{pa 0 227}\special{pa 0 -1181}%
+\special{fp}%
+\settowidth{\Width}{$x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(5.0500,0.0000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{\Depth}%
+\put(0.0000,5.0500){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+%
+\settowidth{\Width}{O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(-0.0500,-0.0500){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/exprrot.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/exprrot.pdf
new file mode 100644
index 0000000000..d48c3c82de
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/exprrot.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/exprrot.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/exprrot.tex
new file mode 100644
index 0000000000..f2249baa6a
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/exprrot.tex
@@ -0,0 +1,38 @@
+%%% /Users/Hannya/Desktop/KeTCindy/fig/exprrot.tex
+%%% Generator=template1basic.cdy
+{\unitlength=8mm%
+\begin{picture}%
+(4.85,3.54)(-0.85,-0.54)%
+\special{pn 8}%
+%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{\rotatebox[origin=c]{27}{$\frac{2}{3}$}}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{\rotatebox[origin=c]{27}{$\frac{2}{3}$}}\settodepth{\Depth}{\rotatebox[origin=c]{27}{$\frac{2}{3}$}}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(1.0000000,2.0000000){\hspace*{\Width}\raisebox{\Height}{\rotatebox[origin=c]{27}{$\frac{2}{3}$}}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{\rotatebox[units=-360,origin=c]{27}{$\sqrt{3}$}}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{\rotatebox[units=-360,origin=c]{27}{$\sqrt{3}$}}\settodepth{\Depth}{\rotatebox[units=-360,origin=c]{27}{$\sqrt{3}$}}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(3.0279508,2.0559017){\hspace*{\Width}\raisebox{\Height}{\rotatebox[units=-360,origin=c]{27}{$\sqrt{3}$}}}%
+%
+}%
+\special{pa -268 -0}\special{pa 1260 -0}%
+\special{fp}%
+\special{pa 0 170}\special{pa 0 -945}%
+\special{fp}%
+\settowidth{\Width}{$x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.0625000,0.0000000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{\Depth}%
+\put(0.0000000,3.0625000){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+\settowidth{\Width}{O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(-0.0625000,-0.0625000){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/fontsize.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/fontsize.tex
new file mode 100644
index 0000000000..6e7257c821
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/fontsize.tex
@@ -0,0 +1,70 @@
+%%% test.tex 2014-11-28 20:51
+%%% test.sce 2014-11-28 20:51
+{\unitlength=6mm%
+\begin{picture}%
+( 14.00000, 2.00000)( -1.00000, 2.00000)%
+\special{pn 8}%
+%
+\special{pa 6 -714}\special{pa 0 -717}\special{pa -6 -714}\special{pa -8 -709}\special{pa -6 -703}%
+\special{pa 0 -701}\special{pa 6 -703}\special{pa 8 -709}\special{pa 6 -714}\special{sh 1}\special{fp}%
+\special{pa 478 -714}\special{pa 472 -717}\special{pa 467 -714}\special{pa 465 -709}%
+\special{pa 467 -703}\special{pa 472 -701}\special{pa 478 -703}\special{pa 480 -709}%
+\special{pa 478 -714}\special{sh 1}\special{fp}%
+\special{pa 950 -714}\special{pa 945 -717}\special{pa 939 -714}\special{pa 937 -709}%
+\special{pa 939 -703}\special{pa 945 -701}\special{pa 950 -703}\special{pa 953 -709}%
+\special{pa 950 -714}\special{sh 1}\special{fp}%
+\special{pa 1423 -714}\special{pa 1417 -717}\special{pa 1412 -714}\special{pa 1409 -709}%
+\special{pa 1412 -703}\special{pa 1417 -701}\special{pa 1423 -703}\special{pa 1425 -709}%
+\special{pa 1423 -714}\special{sh 1}\special{fp}%
+\special{pa 1895 -714}\special{pa 1890 -717}\special{pa 1884 -714}\special{pa 1882 -709}%
+\special{pa 1884 -703}\special{pa 1890 -701}\special{pa 1895 -703}\special{pa 1898 -709}%
+\special{pa 1895 -714}\special{sh 1}\special{fp}%
+\special{pa 2368 -714}\special{pa 2362 -717}\special{pa 2357 -714}\special{pa 2354 -709}%
+\special{pa 2357 -703}\special{pa 2362 -701}\special{pa 2368 -703}\special{pa 2370 -709}%
+\special{pa 2368 -714}\special{sh 1}\special{fp}%
+\special{pa 2840 -714}\special{pa 2835 -717}\special{pa 2829 -714}\special{pa 2827 -709}%
+\special{pa 2829 -703}\special{pa 2835 -701}\special{pa 2840 -703}\special{pa 2843 -709}%
+\special{pa 2840 -714}\special{sh 1}\special{fp}%
+\tiny%
+\settowidth{\Width}{A}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{A}\settodepth{\Depth}{A}\setlength{\Height}{-\Height}%
+\put(0.0000,2.8500){\hspace*{\Width}\raisebox{\Height}{A}}%
+%
+%
+\scriptsize%
+\settowidth{\Width}{B}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{B}\settodepth{\Depth}{B}\setlength{\Height}{-\Height}%
+\put(2.0000,2.8500){\hspace*{\Width}\raisebox{\Height}{B}}%
+%
+%
+\small%
+\settowidth{\Width}{C}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{C}\settodepth{\Depth}{C}\setlength{\Height}{-\Height}%
+\put(4.0000,2.8500){\hspace*{\Width}\raisebox{\Height}{C}}%
+%
+%
+\large%
+\settowidth{\Width}{D}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{D}\settodepth{\Depth}{D}\setlength{\Height}{-\Height}%
+\put(6.0000,2.8500){\hspace*{\Width}\raisebox{\Height}{D}}%
+%
+%
+\Large%
+\settowidth{\Width}{E}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{E}\settodepth{\Depth}{E}\setlength{\Height}{-\Height}%
+\put(8.0000,2.8500){\hspace*{\Width}\raisebox{\Height}{E}}%
+%
+%
+\huge%
+\settowidth{\Width}{F}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{F}\settodepth{\Depth}{F}\setlength{\Height}{-\Height}%
+\put(10.0000,2.8500){\hspace*{\Width}\raisebox{\Height}{F}}%
+%
+%
+\Huge%
+\settowidth{\Width}{G}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{G}\settodepth{\Depth}{G}\setlength{\Height}{-\Height}%
+\put(12.0000,2.8500){\hspace*{\Width}\raisebox{\Height}{G}}%
+%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/fourier.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/fourier.tex
new file mode 100644
index 0000000000..0a03f589f4
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/fourier.tex
@@ -0,0 +1,99 @@
+%%% /Users/Hannya/Desktop/KeTCindy/fig/fourier.tex
+%%% Generator=template1basic.cdy
+{\unitlength=5mm%
+\begin{picture}%
+(14,5)(-7,-1)%
+\special{pn 8}%
+%
+{%
+\color[rgb]{0,0,0}%
+\special{pa -1237 -309}\special{pa -1224 -614}\special{pa -1212 -663}\special{pa -1200 -595}%
+\special{pa -1187 -608}\special{pa -1175 -639}\special{pa -1163 -614}\special{pa -1150 -605}%
+\special{pa -1138 -629}\special{pa -1126 -623}\special{pa -1113 -607}\special{pa -1101 -621}%
+\special{pa -1088 -626}\special{pa -1076 -611}\special{pa -1064 -616}\special{pa -1051 -627}%
+\special{pa -1039 -616}\special{pa -1027 -612}\special{pa -1014 -624}\special{pa -1002 -621}%
+\special{pa -989 -612}\special{pa -977 -620}\special{pa -965 -624}\special{pa -952 -613}%
+\special{pa -940 -616}\special{pa -928 -625}\special{pa -915 -616}\special{pa -903 -613}%
+\special{pa -891 -624}\special{pa -878 -620}\special{pa -866 -612}\special{pa -853 -621}%
+\special{pa -841 -624}\special{pa -829 -612}\special{pa -816 -616}\special{pa -804 -627}%
+\special{pa -792 -616}\special{pa -779 -611}\special{pa -767 -626}\special{pa -754 -621}%
+\special{pa -742 -607}\special{pa -730 -623}\special{pa -717 -629}\special{pa -705 -605}%
+\special{pa -693 -614}\special{pa -680 -639}\special{pa -668 -608}\special{pa -656 -595}%
+\special{pa -643 -663}\special{pa -631 -614}\special{pa -618 -309}\special{pa -606 -4}%
+\special{pa -594 45}\special{pa -581 -24}\special{pa -569 -11}\special{pa -557 21}%
+\special{pa -544 -4}\special{pa -532 -13}\special{pa -519 10}\special{pa -507 4}%
+\special{pa -495 -11}\special{pa -482 3}\special{pa -470 8}\special{pa -458 -7}%
+\special{pa -445 -3}\special{pa -433 8}\special{pa -421 -2}\special{pa -408 -6}%
+\special{pa -396 6}\special{pa -383 2}\special{pa -371 -7}\special{pa -359 2}%
+\special{pa -346 5}\special{pa -334 -5}\special{pa -322 -2}\special{pa -309 7}%
+\special{pa -297 -2}\special{pa -284 -5}\special{pa -272 5}\special{pa -260 2}%
+\special{pa -247 -7}\special{pa -235 2}\special{pa -223 6}\special{pa -210 -6}%
+\special{pa -198 -2}\special{pa -186 8}\special{pa -173 -3}\special{pa -161 -7}%
+\special{pa -148 8}\special{pa -136 3}\special{pa -124 -11}\special{pa -111 4}%
+\special{pa -99 10}\special{pa -87 -13}\special{pa -74 -4}\special{pa -62 21}%
+\special{pa -49 -11}\special{pa -37 -24}\special{pa -25 45}\special{pa -12 -4}%
+\special{pa 0 -309}\special{pa 12 -614}\special{pa 25 -663}\special{pa 37 -595}%
+\special{pa 49 -608}\special{pa 62 -639}\special{pa 74 -614}\special{pa 87 -605}%
+\special{pa 99 -629}\special{pa 111 -623}\special{pa 124 -607}\special{pa 136 -621}%
+\special{pa 148 -626}\special{pa 161 -611}\special{pa 173 -616}\special{pa 186 -627}%
+\special{pa 198 -616}\special{pa 210 -612}\special{pa 223 -624}\special{pa 235 -621}%
+\special{pa 247 -612}\special{pa 260 -620}\special{pa 272 -624}\special{pa 284 -613}%
+\special{pa 297 -616}\special{pa 309 -625}\special{pa 322 -616}\special{pa 334 -613}%
+\special{pa 346 -624}\special{pa 359 -620}\special{pa 371 -612}\special{pa 383 -621}%
+\special{pa 396 -624}\special{pa 408 -612}\special{pa 421 -616}\special{pa 433 -627}%
+\special{pa 445 -616}\special{pa 458 -611}\special{pa 470 -626}\special{pa 482 -621}%
+\special{pa 495 -607}\special{pa 507 -623}\special{pa 519 -629}\special{pa 532 -605}%
+\special{pa 544 -614}\special{pa 557 -639}\special{pa 569 -608}\special{pa 581 -595}%
+\special{pa 594 -663}\special{pa 606 -614}\special{pa 618 -309}\special{pa 631 -4}%
+\special{pa 643 45}\special{pa 656 -24}\special{pa 668 -11}\special{pa 680 21}%
+\special{pa 693 -4}\special{pa 705 -13}\special{pa 717 10}\special{pa 730 4}%
+\special{pa 742 -11}\special{pa 754 3}\special{pa 767 8}\special{pa 779 -7}%
+\special{pa 792 -3}\special{pa 804 8}\special{pa 816 -2}\special{pa 829 -6}%
+\special{pa 841 6}\special{pa 853 2}\special{pa 866 -7}\special{pa 878 2}%
+\special{pa 891 5}\special{pa 903 -5}\special{pa 915 -2}\special{pa 928 7}%
+\special{pa 940 -2}\special{pa 952 -5}\special{pa 965 5}\special{pa 977 2}%
+\special{pa 989 -7}\special{pa 1002 2}\special{pa 1014 6}\special{pa 1027 -6}%
+\special{pa 1039 -2}\special{pa 1051 8}\special{pa 1064 -3}\special{pa 1076 -7}%
+\special{pa 1088 8}\special{pa 1101 3}\special{pa 1113 -11}\special{pa 1126 4}%
+\special{pa 1138 10}\special{pa 1150 -13}\special{pa 1163 -4}\special{pa 1175 21}%
+\special{pa 1187 -11}\special{pa 1200 -24}\special{pa 1212 45}\special{pa 1224 -4}%
+\special{pa 1237 -309}%
+\special{fp}%
+}%
+\settowidth{\Width}{$-2\pi$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$-2\pi$}\settodepth{\Depth}{$-2\pi$}\setlength{\Height}{-\Height}%
+\put(-6.2800000,-0.6000000){\hspace*{\Width}\raisebox{\Height}{$-2\pi$}}%
+%
+\settowidth{\Width}{$-\pi$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$-\pi$}\settodepth{\Depth}{$-\pi$}\setlength{\Height}{-\Height}%
+\put(-3.1400000,-0.6000000){\hspace*{\Width}\raisebox{\Height}{$-\pi$}}%
+%
+\settowidth{\Width}{$\pi$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\pi$}\settodepth{\Depth}{$\pi$}\setlength{\Height}{-\Height}%
+\put(3.1400000,-0.6000000){\hspace*{\Width}\raisebox{\Height}{$\pi$}}%
+%
+\settowidth{\Width}{$2\pi$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$2\pi$}\settodepth{\Depth}{$2\pi$}\setlength{\Height}{-\Height}%
+\put(6.2800000,-0.6000000){\hspace*{\Width}\raisebox{\Height}{$2\pi$}}%
+%
+\settowidth{\Width}{$\pi$}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{$\pi$}\settodepth{\Depth}{$\pi$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-0.3000000,3.1400000){\hspace*{\Width}\raisebox{\Height}{$\pi$}}%
+%
+\special{pa -1378 -0}\special{pa 1378 -0}%
+\special{fp}%
+\special{pa 0 197}\special{pa 0 -787}%
+\special{fp}%
+\settowidth{\Width}{$x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(7.1000000,0.0000000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{\Depth}%
+\put(0.0000000,4.1000000){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+\settowidth{\Width}{O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(-0.1000000,-0.1000000){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/fourierseries.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/fourierseries.tex
new file mode 100644
index 0000000000..18356587be
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/fourierseries.tex
@@ -0,0 +1,79 @@
+%%% /Users/Hannya/Desktop/fig/fourierseries.tex
+%%% Generator=hachtest.cdy
+{\unitlength=8mm%
+\begin{picture}%
+(10,3)(-5,-1)%
+\special{pn 8}%
+%
+{%
+\color[rgb]{0,0,0}%
+\special{pa -1575 -157}\special{pa -1559 -67}\special{pa -1543 -1}\special{pa -1528 28}%
+\special{pa -1512 24}\special{pa -1496 3}\special{pa -1480 -15}\special{pa -1465 -18}%
+\special{pa -1449 -6}\special{pa -1433 9}\special{pa -1417 16}\special{pa -1402 9}%
+\special{pa -1386 -6}\special{pa -1370 -18}\special{pa -1354 -15}\special{pa -1339 3}%
+\special{pa -1323 24}\special{pa -1307 28}\special{pa -1291 -1}\special{pa -1276 -67}%
+\special{pa -1260 -157}\special{pa -1244 -248}\special{pa -1228 -314}\special{pa -1213 -343}%
+\special{pa -1197 -339}\special{pa -1181 -318}\special{pa -1165 -300}\special{pa -1150 -297}%
+\special{pa -1134 -309}\special{pa -1118 -324}\special{pa -1102 -331}\special{pa -1087 -324}%
+\special{pa -1071 -309}\special{pa -1055 -297}\special{pa -1039 -300}\special{pa -1024 -318}%
+\special{pa -1008 -339}\special{pa -992 -343}\special{pa -976 -314}\special{pa -961 -248}%
+\special{pa -945 -157}\special{pa -929 -67}\special{pa -913 -1}\special{pa -898 28}%
+\special{pa -882 24}\special{pa -866 3}\special{pa -850 -15}\special{pa -835 -18}%
+\special{pa -819 -6}\special{pa -803 9}\special{pa -787 16}\special{pa -772 9}%
+\special{pa -756 -6}\special{pa -740 -18}\special{pa -724 -15}\special{pa -709 3}%
+\special{pa -693 24}\special{pa -677 28}\special{pa -661 -1}\special{pa -646 -67}%
+\special{pa -630 -157}\special{pa -614 -248}\special{pa -598 -314}\special{pa -583 -343}%
+\special{pa -567 -339}\special{pa -551 -318}\special{pa -535 -300}\special{pa -520 -297}%
+\special{pa -504 -309}\special{pa -488 -324}\special{pa -472 -331}\special{pa -457 -324}%
+\special{pa -441 -309}\special{pa -425 -297}\special{pa -409 -300}\special{pa -394 -318}%
+\special{pa -378 -339}\special{pa -362 -343}\special{pa -346 -314}\special{pa -331 -248}%
+\special{pa -315 -157}\special{pa -299 -67}\special{pa -283 -1}\special{pa -268 28}%
+\special{pa -252 24}\special{pa -236 3}\special{pa -220 -15}\special{pa -205 -18}%
+\special{pa -189 -6}\special{pa -173 9}\special{pa -157 16}\special{pa -142 9}%
+\special{pa -126 -6}\special{pa -110 -18}\special{pa -94 -15}\special{pa -79 3}%
+\special{pa -63 24}\special{pa -47 28}\special{pa -31 -1}\special{pa -16 -67}%
+\special{pa 0 -157}\special{pa 16 -248}\special{pa 31 -314}\special{pa 47 -343}%
+\special{pa 63 -339}\special{pa 79 -318}\special{pa 94 -300}\special{pa 110 -297}%
+\special{pa 126 -309}\special{pa 142 -324}\special{pa 157 -331}\special{pa 173 -324}%
+\special{pa 189 -309}\special{pa 205 -297}\special{pa 220 -300}\special{pa 236 -318}%
+\special{pa 252 -339}\special{pa 268 -343}\special{pa 283 -314}\special{pa 299 -248}%
+\special{pa 315 -157}\special{pa 331 -67}\special{pa 346 -1}\special{pa 362 28}%
+\special{pa 378 24}\special{pa 394 3}\special{pa 409 -15}\special{pa 425 -18}%
+\special{pa 441 -6}\special{pa 457 9}\special{pa 472 16}\special{pa 488 9}%
+\special{pa 504 -6}\special{pa 520 -18}\special{pa 535 -15}\special{pa 551 3}%
+\special{pa 567 24}\special{pa 583 28}\special{pa 598 -1}\special{pa 614 -67}%
+\special{pa 630 -157}\special{pa 646 -248}\special{pa 661 -314}\special{pa 677 -343}%
+\special{pa 693 -339}\special{pa 709 -318}\special{pa 724 -300}\special{pa 740 -297}%
+\special{pa 756 -309}\special{pa 772 -324}\special{pa 787 -331}\special{pa 803 -324}%
+\special{pa 819 -309}\special{pa 835 -297}\special{pa 850 -300}\special{pa 866 -318}%
+\special{pa 882 -339}\special{pa 898 -343}\special{pa 913 -314}\special{pa 929 -248}%
+\special{pa 945 -157}\special{pa 961 -67}\special{pa 976 -1}\special{pa 992 28}%
+\special{pa 1008 24}\special{pa 1024 3}\special{pa 1039 -15}\special{pa 1055 -18}%
+\special{pa 1071 -6}\special{pa 1087 9}\special{pa 1102 16}\special{pa 1118 9}%
+\special{pa 1134 -6}\special{pa 1150 -18}\special{pa 1165 -15}\special{pa 1181 3}%
+\special{pa 1197 24}\special{pa 1213 28}\special{pa 1228 -1}\special{pa 1244 -67}%
+\special{pa 1260 -157}\special{pa 1276 -248}\special{pa 1291 -314}\special{pa 1307 -343}%
+\special{pa 1323 -339}\special{pa 1339 -318}\special{pa 1354 -300}\special{pa 1370 -297}%
+\special{pa 1386 -309}\special{pa 1402 -324}\special{pa 1417 -331}\special{pa 1433 -324}%
+\special{pa 1449 -309}\special{pa 1465 -297}\special{pa 1480 -300}\special{pa 1496 -318}%
+\special{pa 1512 -339}\special{pa 1528 -343}\special{pa 1543 -314}\special{pa 1559 -248}%
+\special{pa 1575 -157}%
+\special{fp}%
+}%
+\special{pa -1575 -0}\special{pa 1575 -0}%
+\special{fp}%
+\special{pa 0 315}\special{pa 0 -630}%
+\special{fp}%
+\settowidth{\Width}{$x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(5.0625000,0.0000000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{\Depth}%
+\put(0.0000000,2.0625000){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+\settowidth{\Width}{O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(-0.0625000,-0.0625000){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/frustume.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/frustume.tex
new file mode 100644
index 0000000000..83d47a9539
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/frustume.tex
@@ -0,0 +1,71 @@
+%%% /Users/hannya/Desktop/fig/frustume.tex
+%%% Generator=template3D.cdy
+{\unitlength=7mm%
+\begin{picture}%
+(4.67,3.66)(-2.24,-1.05)%
+\special{pn 8}%
+%
+\special{pa 548 -13}\special{pa 544 -20}%
+\special{fp}%
+\special{pa 544 -20}\special{pa 542 -24}\special{pa 542 -24}%
+\special{fp}%
+\special{pa 542 -24}\special{pa 537 -34}\special{pa 531 -45}\special{pa 526 -56}%
+\special{pa 520 -66}\special{pa 515 -77}\special{pa 509 -87}\special{pa 504 -98}%
+\special{pa 499 -109}\special{pa 493 -119}\special{pa 488 -130}\special{pa 482 -141}%
+\special{pa 477 -151}\special{pa 471 -162}\special{pa 466 -173}\special{pa 460 -183}%
+\special{pa 455 -194}\special{pa 449 -204}\special{pa 444 -215}\special{pa 438 -226}%
+\special{pa 433 -236}\special{pa 427 -247}\special{pa 422 -258}\special{pa 416 -268}%
+\special{pa 411 -279}\special{pa 405 -290}\special{pa 400 -300}\special{pa 394 -311}%
+\special{pa 389 -321}\special{pa 383 -332}\special{pa 378 -343}\special{pa 373 -353}%
+\special{pa 367 -364}\special{pa 362 -375}\special{pa 356 -385}\special{pa 351 -396}%
+\special{pa 345 -407}\special{pa 340 -417}\special{pa 334 -428}\special{pa 329 -438}%
+\special{pa 323 -449}\special{pa 318 -460}\special{pa 312 -470}\special{pa 307 -481}%
+\special{pa 301 -492}\special{pa 296 -502}\special{pa 290 -513}\special{pa 285 -524}%
+\special{pa 279 -534}\special{pa 274 -545}%
+\special{fp}%
+\special{pa -548 -13}\special{pa -542 -24}\special{pa -542 -24}%
+\special{fp}%
+\special{pa -542 -24}\special{pa -537 -34}\special{pa -531 -45}\special{pa -526 -56}%
+\special{pa -520 -66}\special{pa -515 -77}\special{pa -509 -87}\special{pa -504 -98}%
+\special{pa -499 -109}\special{pa -493 -119}\special{pa -488 -130}\special{pa -482 -141}%
+\special{pa -477 -151}\special{pa -471 -162}\special{pa -466 -173}\special{pa -460 -183}%
+\special{pa -455 -194}\special{pa -449 -204}\special{pa -444 -215}\special{pa -438 -226}%
+\special{pa -433 -236}\special{pa -427 -247}\special{pa -422 -258}\special{pa -416 -268}%
+\special{pa -411 -279}\special{pa -405 -290}\special{pa -400 -300}\special{pa -394 -311}%
+\special{pa -389 -321}\special{pa -383 -332}\special{pa -378 -343}\special{pa -373 -353}%
+\special{pa -367 -364}\special{pa -362 -375}\special{pa -356 -385}\special{pa -351 -396}%
+\special{pa -345 -407}\special{pa -340 -417}\special{pa -334 -428}\special{pa -329 -438}%
+\special{pa -323 -449}\special{pa -318 -460}\special{pa -312 -470}\special{pa -307 -481}%
+\special{pa -301 -492}\special{pa -296 -502}\special{pa -290 -513}\special{pa -285 -524}%
+\special{pa -279 -534}\special{pa -274 -545}%
+\special{fp}%
+\special{pa -432 74}\special{pa -386 85}\special{pa -333 94}\special{pa -275 103}%
+\special{pa -213 109}\special{pa -148 114}\special{pa -80 117}\special{pa -11 118}%
+\special{pa 58 118}\special{pa 126 115}\special{pa 192 111}\special{pa 256 105}%
+\special{pa 315 97}\special{pa 369 88}\special{pa 417 77}\special{pa 459 65}%
+\special{pa 494 53}\special{pa 521 39}\special{pa 539 25}\special{pa 549 10}%
+\special{pa 551 -5}\special{pa 547 -13}%
+\special{fp}%
+\special{pa 547 -13}\special{pa 543 -20}\special{pa 541 -22}%
+\special{fp}%
+\special{pa -547 -13}\special{pa -549 -10}\special{pa -551 5}\special{pa -543 20}%
+\special{pa -528 34}\special{pa -503 48}\special{pa -471 61}\special{pa -432 74}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 544 -20}\special{pa 537 -25}\special{fp}\special{pa 513 -43}\special{pa 506 -47}\special{fp}%
+\special{pa 478 -59}\special{pa 470 -62}\special{fp}\special{pa 441 -71}\special{pa 433 -73}\special{fp}%
+\special{pa 403 -80}\special{pa 395 -82}\special{fp}\special{pa 365 -88}\special{pa 357 -90}\special{fp}%
+\special{pa 327 -95}\special{pa 319 -96}\special{fp}\special{pa 289 -101}\special{pa 281 -102}\special{fp}%
+\special{pa 250 -105}\special{pa 242 -106}\special{fp}\special{pa 211 -109}\special{pa 203 -110}\special{fp}%
+\special{pa 173 -112}\special{pa 165 -113}\special{fp}\special{pa 134 -115}\special{pa 126 -115}\special{fp}%
+\special{pa 95 -116}\special{pa 87 -117}\special{fp}\special{pa 56 -118}\special{pa 48 -118}\special{fp}%
+\special{pa 18 -118}\special{pa 10 -118}\special{fp}\special{pa -21 -118}\special{pa -29 -118}\special{fp}%
+\special{pa -60 -118}\special{pa -68 -117}\special{fp}\special{pa -99 -116}\special{pa -107 -116}\special{fp}%
+\special{pa -137 -114}\special{pa -145 -114}\special{fp}\special{pa -176 -112}\special{pa -184 -111}\special{fp}%
+\special{pa -215 -109}\special{pa -223 -108}\special{fp}\special{pa -254 -105}\special{pa -261 -104}\special{fp}%
+\special{pa -292 -100}\special{pa -300 -99}\special{fp}\special{pa -330 -94}\special{pa -338 -93}\special{fp}%
+\special{pa -369 -88}\special{pa -376 -86}\special{fp}\special{pa -407 -80}\special{pa -414 -78}\special{fp}%
+\special{pa -444 -70}\special{pa -452 -67}\special{fp}\special{pa -481 -58}\special{pa -488 -55}\special{fp}%
+\special{pa -516 -42}\special{pa -523 -37}\special{fp}\special{pa -544 -16}\special{pa -550 -10}\special{fp}%
+\special{pn 8}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/frustumew.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/frustumew.tex
new file mode 100644
index 0000000000..d4fc2f96b1
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/frustumew.tex
@@ -0,0 +1,89 @@
+%%% /Users/hannya/Desktop/fig/frustumew.tex
+%%% Generator=template3D.cdy
+{\unitlength=7mm%
+\begin{picture}%
+(4.67,3.66)(-2.24,-1.05)%
+\special{pn 8}%
+%
+\special{pa 548 -13}\special{pa 544 -20}%
+\special{fp}%
+\special{pa 544 -20}\special{pa 542 -24}\special{pa 542 -24}%
+\special{fp}%
+\special{pa 542 -24}\special{pa 537 -34}\special{pa 531 -45}\special{pa 526 -56}%
+\special{pa 520 -66}\special{pa 515 -77}\special{pa 509 -87}\special{pa 504 -98}%
+\special{pa 499 -109}\special{pa 493 -119}\special{pa 488 -130}\special{pa 482 -141}%
+\special{pa 477 -151}\special{pa 471 -162}\special{pa 466 -173}\special{pa 460 -183}%
+\special{pa 455 -194}\special{pa 449 -204}\special{pa 444 -215}\special{pa 438 -226}%
+\special{pa 433 -236}\special{pa 427 -247}\special{pa 422 -258}\special{pa 416 -268}%
+\special{pa 411 -279}\special{pa 405 -290}\special{pa 400 -300}\special{pa 394 -311}%
+\special{pa 389 -321}\special{pa 383 -332}\special{pa 378 -343}\special{pa 373 -353}%
+\special{pa 367 -364}\special{pa 362 -375}\special{pa 356 -385}\special{pa 351 -396}%
+\special{pa 345 -407}\special{pa 340 -417}\special{pa 334 -428}\special{pa 329 -438}%
+\special{pa 323 -449}\special{pa 318 -460}\special{pa 312 -470}\special{pa 307 -481}%
+\special{pa 301 -492}\special{pa 296 -502}\special{pa 290 -513}\special{pa 285 -524}%
+\special{pa 279 -534}\special{pa 274 -545}%
+\special{fp}%
+\special{pa -548 -13}\special{pa -542 -24}\special{pa -542 -24}%
+\special{fp}%
+\special{pa -542 -24}\special{pa -537 -34}\special{pa -531 -45}\special{pa -526 -56}%
+\special{pa -520 -66}\special{pa -515 -77}\special{pa -509 -87}\special{pa -504 -98}%
+\special{pa -499 -109}\special{pa -493 -119}\special{pa -488 -130}\special{pa -482 -141}%
+\special{pa -477 -151}\special{pa -471 -162}\special{pa -466 -173}\special{pa -460 -183}%
+\special{pa -455 -194}\special{pa -449 -204}\special{pa -444 -215}\special{pa -438 -226}%
+\special{pa -433 -236}\special{pa -427 -247}\special{pa -422 -258}\special{pa -416 -268}%
+\special{pa -411 -279}\special{pa -405 -290}\special{pa -400 -300}\special{pa -394 -311}%
+\special{pa -389 -321}\special{pa -383 -332}\special{pa -378 -343}\special{pa -373 -353}%
+\special{pa -367 -364}\special{pa -362 -375}\special{pa -356 -385}\special{pa -351 -396}%
+\special{pa -345 -407}\special{pa -340 -417}\special{pa -334 -428}\special{pa -329 -438}%
+\special{pa -323 -449}\special{pa -318 -460}\special{pa -312 -470}\special{pa -307 -481}%
+\special{pa -301 -492}\special{pa -296 -502}\special{pa -290 -513}\special{pa -285 -524}%
+\special{pa -279 -534}\special{pa -274 -545}%
+\special{fp}%
+\special{pa -432 74}\special{pa -386 85}\special{pa -333 94}\special{pa -275 103}%
+\special{pa -213 109}\special{pa -148 114}\special{pa -80 117}\special{pa -11 118}%
+\special{pa 58 118}\special{pa 126 115}\special{pa 192 111}\special{pa 256 105}%
+\special{pa 315 97}\special{pa 369 88}\special{pa 417 77}\special{pa 459 65}%
+\special{pa 494 53}\special{pa 521 39}\special{pa 539 25}\special{pa 549 10}%
+\special{pa 551 -5}\special{pa 547 -13}%
+\special{fp}%
+\special{pa 547 -13}\special{pa 543 -20}\special{pa 541 -22}%
+\special{fp}%
+\special{pa -547 -13}\special{pa -549 -10}\special{pa -551 5}\special{pa -543 20}%
+\special{pa -528 34}\special{pa -503 48}\special{pa -471 61}\special{pa -432 74}%
+\special{fp}%
+\special{pa -216 -502}\special{pa -193 -496}\special{pa -167 -491}\special{pa -138 -487}%
+\special{pa -107 -484}\special{pa -74 -481}\special{pa -40 -480}\special{pa -6 -479}%
+\special{pa 29 -479}\special{pa 63 -481}\special{pa 96 -483}\special{pa 128 -486}%
+\special{pa 157 -490}\special{pa 184 -494}\special{pa 209 -500}\special{pa 230 -506}%
+\special{pa 247 -512}\special{pa 260 -519}\special{pa 270 -526}\special{pa 275 -533}%
+\special{pa 275 -541}\special{pa 274 -544}%
+\special{fp}%
+\special{pa 274 -544}\special{pa 272 -548}\special{pa 264 -555}\special{pa 252 -562}%
+\special{pa 236 -569}\special{pa 216 -575}\special{pa 193 -581}\special{pa 167 -585}%
+\special{pa 138 -590}\special{pa 107 -593}\special{pa 74 -595}\special{pa 40 -597}%
+\special{pa 6 -597}\special{pa -29 -597}\special{pa -63 -596}\special{pa -96 -594}%
+\special{pa -128 -591}\special{pa -157 -587}\special{pa -184 -582}\special{pa -209 -577}%
+\special{pa -230 -571}\special{pa -247 -565}\special{pa -260 -558}\special{pa -270 -551}%
+\special{pa -274 -545}%
+\special{fp}%
+\special{pa -274 -545}\special{pa -275 -543}\special{pa -275 -536}\special{pa -272 -528}%
+\special{pa -264 -521}\special{pa -252 -514}\special{pa -236 -508}\special{pa -216 -502}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 544 -20}\special{pa 537 -25}\special{fp}\special{pa 513 -43}\special{pa 506 -47}\special{fp}%
+\special{pa 478 -59}\special{pa 470 -62}\special{fp}\special{pa 441 -71}\special{pa 433 -73}\special{fp}%
+\special{pa 403 -80}\special{pa 395 -82}\special{fp}\special{pa 365 -88}\special{pa 357 -90}\special{fp}%
+\special{pa 327 -95}\special{pa 319 -96}\special{fp}\special{pa 289 -101}\special{pa 281 -102}\special{fp}%
+\special{pa 250 -105}\special{pa 242 -106}\special{fp}\special{pa 211 -109}\special{pa 203 -110}\special{fp}%
+\special{pa 173 -112}\special{pa 165 -113}\special{fp}\special{pa 134 -115}\special{pa 126 -115}\special{fp}%
+\special{pa 95 -116}\special{pa 87 -117}\special{fp}\special{pa 56 -118}\special{pa 48 -118}\special{fp}%
+\special{pa 18 -118}\special{pa 10 -118}\special{fp}\special{pa -21 -118}\special{pa -29 -118}\special{fp}%
+\special{pa -60 -118}\special{pa -68 -117}\special{fp}\special{pa -99 -116}\special{pa -107 -116}\special{fp}%
+\special{pa -137 -114}\special{pa -145 -114}\special{fp}\special{pa -176 -112}\special{pa -184 -111}\special{fp}%
+\special{pa -215 -109}\special{pa -223 -108}\special{fp}\special{pa -254 -105}\special{pa -261 -104}\special{fp}%
+\special{pa -292 -100}\special{pa -300 -99}\special{fp}\special{pa -330 -94}\special{pa -338 -93}\special{fp}%
+\special{pa -369 -88}\special{pa -376 -86}\special{fp}\special{pa -407 -80}\special{pa -414 -78}\special{fp}%
+\special{pa -444 -70}\special{pa -452 -67}\special{fp}\special{pa -481 -58}\special{pa -488 -55}\special{fp}%
+\special{pa -516 -42}\special{pa -523 -37}\special{fp}\special{pa -544 -16}\special{pa -550 -10}\special{fp}%
+\special{pn 8}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/frustumewn.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/frustumewn.tex
new file mode 100644
index 0000000000..12ccd057bb
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/frustumewn.tex
@@ -0,0 +1,105 @@
+%%% /Users/hannya/Desktop/fig/frustumewn.tex
+%%% Generator=template3D.cdy
+{\unitlength=7mm%
+\begin{picture}%
+(4.67,3.66)(-2.24,-1.05)%
+\special{pn 8}%
+%
+\special{pa 548 -13}\special{pa 544 -20}%
+\special{fp}%
+\special{pa 544 -20}\special{pa 542 -24}\special{pa 542 -24}%
+\special{fp}%
+\special{pa 542 -24}\special{pa 537 -34}\special{pa 531 -45}\special{pa 526 -56}%
+\special{pa 520 -66}\special{pa 515 -77}\special{pa 509 -87}\special{pa 504 -98}%
+\special{pa 499 -109}\special{pa 493 -119}\special{pa 488 -130}\special{pa 482 -141}%
+\special{pa 477 -151}\special{pa 471 -162}\special{pa 466 -173}\special{pa 460 -183}%
+\special{pa 455 -194}\special{pa 449 -204}\special{pa 444 -215}\special{pa 438 -226}%
+\special{pa 433 -236}\special{pa 427 -247}\special{pa 422 -258}\special{pa 416 -268}%
+\special{pa 411 -279}\special{pa 405 -290}\special{pa 400 -300}\special{pa 394 -311}%
+\special{pa 389 -321}\special{pa 383 -332}\special{pa 378 -343}\special{pa 373 -353}%
+\special{pa 367 -364}\special{pa 362 -375}\special{pa 356 -385}\special{pa 351 -396}%
+\special{pa 345 -407}\special{pa 340 -417}\special{pa 334 -428}\special{pa 329 -438}%
+\special{pa 323 -449}\special{pa 318 -460}\special{pa 312 -470}\special{pa 307 -481}%
+\special{pa 301 -492}\special{pa 296 -502}\special{pa 290 -513}\special{pa 285 -524}%
+\special{pa 279 -534}\special{pa 274 -545}%
+\special{fp}%
+\special{pa -548 -13}\special{pa -542 -24}\special{pa -542 -24}%
+\special{fp}%
+\special{pa -542 -24}\special{pa -537 -34}\special{pa -531 -45}\special{pa -526 -56}%
+\special{pa -520 -66}\special{pa -515 -77}\special{pa -509 -87}\special{pa -504 -98}%
+\special{pa -499 -109}\special{pa -493 -119}\special{pa -488 -130}\special{pa -482 -141}%
+\special{pa -477 -151}\special{pa -471 -162}\special{pa -466 -173}\special{pa -460 -183}%
+\special{pa -455 -194}\special{pa -449 -204}\special{pa -444 -215}\special{pa -438 -226}%
+\special{pa -433 -236}\special{pa -427 -247}\special{pa -422 -258}\special{pa -416 -268}%
+\special{pa -411 -279}\special{pa -405 -290}\special{pa -400 -300}\special{pa -394 -311}%
+\special{pa -389 -321}\special{pa -383 -332}\special{pa -378 -343}\special{pa -373 -353}%
+\special{pa -367 -364}\special{pa -362 -375}\special{pa -356 -385}\special{pa -351 -396}%
+\special{pa -345 -407}\special{pa -340 -417}\special{pa -334 -428}\special{pa -329 -438}%
+\special{pa -323 -449}\special{pa -318 -460}\special{pa -312 -470}\special{pa -307 -481}%
+\special{pa -301 -492}\special{pa -296 -502}\special{pa -290 -513}\special{pa -285 -524}%
+\special{pa -279 -534}\special{pa -274 -545}%
+\special{fp}%
+\special{pa -432 74}\special{pa -386 85}\special{pa -333 94}\special{pa -275 103}%
+\special{pa -213 109}\special{pa -148 114}\special{pa -80 117}\special{pa -11 118}%
+\special{pa 58 118}\special{pa 126 115}\special{pa 192 111}\special{pa 256 105}%
+\special{pa 315 97}\special{pa 369 88}\special{pa 417 77}\special{pa 459 65}%
+\special{pa 494 53}\special{pa 521 39}\special{pa 539 25}\special{pa 549 10}%
+\special{pa 551 -5}\special{pa 547 -13}%
+\special{fp}%
+\special{pa 547 -13}\special{pa 543 -20}\special{pa 541 -22}%
+\special{fp}%
+\special{pa -547 -13}\special{pa -549 -10}\special{pa -551 5}\special{pa -543 20}%
+\special{pa -528 34}\special{pa -503 48}\special{pa -471 61}\special{pa -432 74}%
+\special{fp}%
+\special{pa -216 -502}\special{pa -220 -490}\special{pa -225 -479}\special{pa -229 -467}%
+\special{pa -233 -456}\special{pa -238 -444}\special{pa -242 -433}\special{pa -246 -421}%
+\special{pa -250 -410}\special{pa -255 -398}\special{pa -259 -387}\special{pa -263 -375}%
+\special{pa -268 -364}\special{pa -272 -352}\special{pa -276 -341}\special{pa -281 -329}%
+\special{pa -285 -318}\special{pa -289 -306}\special{pa -294 -294}\special{pa -298 -283}%
+\special{pa -302 -271}\special{pa -307 -260}\special{pa -311 -248}\special{pa -315 -237}%
+\special{pa -320 -225}\special{pa -324 -214}\special{pa -328 -202}\special{pa -333 -191}%
+\special{pa -337 -179}\special{pa -341 -168}\special{pa -345 -156}\special{pa -350 -145}%
+\special{pa -354 -133}\special{pa -358 -122}\special{pa -363 -110}\special{pa -367 -99}%
+\special{pa -371 -87}%
+\special{fp}%
+\special{pa -371 -87}\special{pa -371 -87}\special{pa -376 -76}\special{pa -380 -64}%
+\special{pa -384 -53}\special{pa -389 -41}\special{pa -393 -30}\special{pa -397 -18}%
+\special{pa -402 -7}\special{pa -406 5}\special{pa -410 16}\special{pa -415 28}%
+\special{pa -419 39}\special{pa -423 51}\special{pa -428 62}\special{pa -432 74}%
+\special{fp}%
+\special{pa -216 -502}\special{pa -193 -496}\special{pa -167 -491}\special{pa -138 -487}%
+\special{pa -107 -484}\special{pa -74 -481}\special{pa -40 -480}\special{pa -6 -479}%
+\special{pa 29 -479}\special{pa 63 -481}\special{pa 96 -483}\special{pa 128 -486}%
+\special{pa 157 -490}\special{pa 184 -494}\special{pa 209 -500}\special{pa 230 -506}%
+\special{pa 247 -512}\special{pa 260 -519}\special{pa 270 -526}\special{pa 275 -533}%
+\special{pa 275 -541}\special{pa 274 -544}%
+\special{fp}%
+\special{pa 274 -544}\special{pa 272 -548}\special{pa 264 -555}\special{pa 252 -562}%
+\special{pa 236 -569}\special{pa 216 -575}\special{pa 193 -581}\special{pa 167 -585}%
+\special{pa 138 -590}\special{pa 107 -593}\special{pa 74 -595}\special{pa 40 -597}%
+\special{pa 6 -597}\special{pa -29 -597}\special{pa -63 -596}\special{pa -96 -594}%
+\special{pa -128 -591}\special{pa -157 -587}\special{pa -184 -582}\special{pa -209 -577}%
+\special{pa -230 -571}\special{pa -247 -565}\special{pa -260 -558}\special{pa -270 -551}%
+\special{pa -274 -545}%
+\special{fp}%
+\special{pa -274 -545}\special{pa -275 -543}\special{pa -275 -536}\special{pa -272 -528}%
+\special{pa -264 -521}\special{pa -252 -514}\special{pa -236 -508}\special{pa -216 -502}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 544 -20}\special{pa 537 -25}\special{fp}\special{pa 513 -43}\special{pa 506 -47}\special{fp}%
+\special{pa 478 -59}\special{pa 470 -62}\special{fp}\special{pa 441 -71}\special{pa 433 -73}\special{fp}%
+\special{pa 403 -80}\special{pa 395 -82}\special{fp}\special{pa 365 -88}\special{pa 357 -90}\special{fp}%
+\special{pa 327 -95}\special{pa 319 -96}\special{fp}\special{pa 289 -101}\special{pa 281 -102}\special{fp}%
+\special{pa 250 -105}\special{pa 242 -106}\special{fp}\special{pa 211 -109}\special{pa 203 -110}\special{fp}%
+\special{pa 173 -112}\special{pa 165 -113}\special{fp}\special{pa 134 -115}\special{pa 126 -115}\special{fp}%
+\special{pa 95 -116}\special{pa 87 -117}\special{fp}\special{pa 56 -118}\special{pa 48 -118}\special{fp}%
+\special{pa 18 -118}\special{pa 10 -118}\special{fp}\special{pa -21 -118}\special{pa -29 -118}\special{fp}%
+\special{pa -60 -118}\special{pa -68 -117}\special{fp}\special{pa -99 -116}\special{pa -107 -116}\special{fp}%
+\special{pa -137 -114}\special{pa -145 -114}\special{fp}\special{pa -176 -112}\special{pa -184 -111}\special{fp}%
+\special{pa -215 -109}\special{pa -223 -108}\special{fp}\special{pa -254 -105}\special{pa -261 -104}\special{fp}%
+\special{pa -292 -100}\special{pa -300 -99}\special{fp}\special{pa -330 -94}\special{pa -338 -93}\special{fp}%
+\special{pa -369 -88}\special{pa -376 -86}\special{fp}\special{pa -407 -80}\special{pa -414 -78}\special{fp}%
+\special{pa -444 -70}\special{pa -452 -67}\special{fp}\special{pa -481 -58}\special{pa -488 -55}\special{fp}%
+\special{pa -516 -42}\special{pa -523 -37}\special{fp}\special{pa -544 -16}\special{pa -550 -10}\special{fp}%
+\special{pn 8}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/frustumw.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/frustumw.tex
new file mode 100644
index 0000000000..d481b7a48c
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/frustumw.tex
@@ -0,0 +1,55 @@
+%%% /Users/hannya/Desktop/fig/frustumw.tex
+%%% Generator=template3D.cdy
+{\unitlength=7mm%
+\begin{picture}%
+(4.67,3.66)(-2.24,-1.05)%
+\special{pn 8}%
+%
+\special{pa 548 -13}\special{pa 542 -24}\special{pa 537 -34}\special{pa 531 -45}%
+\special{pa 526 -56}\special{pa 520 -66}\special{pa 515 -77}\special{pa 509 -87}%
+\special{pa 504 -98}\special{pa 499 -109}\special{pa 493 -119}\special{pa 488 -130}%
+\special{pa 482 -141}\special{pa 477 -151}\special{pa 471 -162}\special{pa 466 -173}%
+\special{pa 460 -183}\special{pa 455 -194}\special{pa 449 -204}\special{pa 444 -215}%
+\special{pa 438 -226}\special{pa 433 -236}\special{pa 427 -247}\special{pa 422 -258}%
+\special{pa 416 -268}\special{pa 411 -279}\special{pa 405 -290}\special{pa 400 -300}%
+\special{pa 394 -311}\special{pa 389 -321}\special{pa 383 -332}\special{pa 378 -343}%
+\special{pa 373 -353}\special{pa 367 -364}\special{pa 362 -375}\special{pa 356 -385}%
+\special{pa 351 -396}\special{pa 345 -407}\special{pa 340 -417}\special{pa 334 -428}%
+\special{pa 329 -438}\special{pa 323 -449}\special{pa 318 -460}\special{pa 312 -470}%
+\special{pa 307 -481}\special{pa 301 -492}\special{pa 296 -502}\special{pa 290 -513}%
+\special{pa 285 -524}\special{pa 279 -534}\special{pa 274 -545}%
+\special{fp}%
+\special{pa -548 -13}\special{pa -542 -24}\special{pa -537 -34}\special{pa -531 -45}%
+\special{pa -526 -56}\special{pa -520 -66}\special{pa -515 -77}\special{pa -509 -87}%
+\special{pa -504 -98}\special{pa -499 -109}\special{pa -493 -119}\special{pa -488 -130}%
+\special{pa -482 -141}\special{pa -477 -151}\special{pa -471 -162}\special{pa -466 -173}%
+\special{pa -460 -183}\special{pa -455 -194}\special{pa -449 -204}\special{pa -444 -215}%
+\special{pa -438 -226}\special{pa -433 -236}\special{pa -427 -247}\special{pa -422 -258}%
+\special{pa -416 -268}\special{pa -411 -279}\special{pa -405 -290}\special{pa -400 -300}%
+\special{pa -394 -311}\special{pa -389 -321}\special{pa -383 -332}\special{pa -378 -343}%
+\special{pa -373 -353}\special{pa -367 -364}\special{pa -362 -375}\special{pa -356 -385}%
+\special{pa -351 -396}\special{pa -345 -407}\special{pa -340 -417}\special{pa -334 -428}%
+\special{pa -329 -438}\special{pa -323 -449}\special{pa -318 -460}\special{pa -312 -470}%
+\special{pa -307 -481}\special{pa -301 -492}\special{pa -296 -502}\special{pa -290 -513}%
+\special{pa -285 -524}\special{pa -279 -534}\special{pa -274 -545}%
+\special{fp}%
+\special{pa -216 -502}\special{pa -193 -496}\special{pa -167 -491}\special{pa -138 -487}%
+\special{pa -107 -484}\special{pa -74 -481}\special{pa -40 -480}\special{pa -6 -479}%
+\special{pa 29 -479}\special{pa 63 -481}\special{pa 96 -483}\special{pa 128 -486}%
+\special{pa 157 -490}\special{pa 184 -494}\special{pa 209 -500}\special{pa 230 -506}%
+\special{pa 247 -512}\special{pa 260 -519}\special{pa 270 -526}\special{pa 275 -533}%
+\special{pa 275 -541}\special{pa 274 -544}%
+\special{fp}%
+\special{pa 274 -544}\special{pa 272 -548}\special{pa 264 -555}\special{pa 252 -562}%
+\special{pa 236 -569}\special{pa 216 -575}\special{pa 193 -581}\special{pa 167 -585}%
+\special{pa 138 -590}\special{pa 107 -593}\special{pa 74 -595}\special{pa 40 -597}%
+\special{pa 6 -597}\special{pa -29 -597}\special{pa -63 -596}\special{pa -96 -594}%
+\special{pa -128 -591}\special{pa -157 -587}\special{pa -184 -582}\special{pa -209 -577}%
+\special{pa -230 -571}\special{pa -247 -565}\special{pa -260 -558}\special{pa -270 -551}%
+\special{pa -274 -545}%
+\special{fp}%
+\special{pa -274 -545}\special{pa -275 -543}\special{pa -275 -536}\special{pa -272 -528}%
+\special{pa -264 -521}\special{pa -252 -514}\special{pa -236 -508}\special{pa -216 -502}%
+\special{fp}%
+\special{pn 8}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/gpro01.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/gpro01.pdf
new file mode 100644
index 0000000000..2e9c5d2709
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/gpro01.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/gpro02.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/gpro02.tex
new file mode 100644
index 0000000000..82ce5ed975
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/gpro02.tex
@@ -0,0 +1,26 @@
+%%% /Users/Hannya/Desktop/KeTCindy/fig/test.tex
+%%% Generator=template1basic.cdy
+{\unitlength=5mm%
+\begin{picture}%
+(11,9)(-5,-3)%
+\special{pn 8}%
+%
+\special{pa 0 -984}\special{pa -591 197}%
+\special{fp}%
+\special{pa -591 197}\special{pa 984 197}%
+\special{fp}%
+\special{pa 984 197}\special{pa 0 -984}%
+\special{fp}%
+\special{pa -295 -394}\special{pa 197 197}%
+\special{fp}%
+\special{pa 197 197}\special{pa 492 -394}%
+\special{fp}%
+\special{pa 492 -394}\special{pa -295 -394}%
+\special{fp}%
+\special{pa 98 -394}\special{pa -49 -98}%
+\special{fp}%
+\special{pa -49 -98}\special{pa 344 -98}%
+\special{fp}%
+\special{pa 344 -98}\special{pa 98 -394}%
+\special{fp}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/greenring.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/greenring.tex
new file mode 100644
index 0000000000..8f0abeaa84
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/greenring.tex
@@ -0,0 +1,125 @@
+%%% /Users/Hannya/Desktop/KeTCindy/fig/greenring.tex
+%%% Generator=template1basic.cdy
+{\unitlength=7mm%
+\begin{picture}%
+(12,6)(-4,-3)%
+\special{pn 8}%
+%
+\color[rgb]{0,1,0}%
+\special{pa 1929 0}\special{pa 1925 69}\special{pa 1912 137}\special{pa 1890 203}%
+\special{pa 1861 266}\special{pa 1824 324}\special{pa 1780 377}\special{pa 1729 425}%
+\special{pa 1673 465}\special{pa 1613 499}\special{pa 1548 524}\special{pa 1481 541}%
+\special{pa 1413 550}\special{pa 1343 550}\special{pa 1275 541}\special{pa 1208 524}%
+\special{pa 1143 499}\special{pa 1083 465}\special{pa 1027 425}\special{pa 976 377}%
+\special{pa 932 324}\special{pa 895 266}\special{pa 865 203}\special{pa 844 137}\special{pa 831 69}%
+\special{pa 827 0}\special{pa 831 -69}\special{pa 844 -137}\special{pa 865 -203}\special{pa 895 -266}%
+\special{pa 932 -324}\special{pa 976 -377}\special{pa 1027 -425}\special{pa 1083 -465}%
+\special{pa 1143 -499}\special{pa 1208 -524}\special{pa 1275 -541}\special{pa 1343 -550}%
+\special{pa 1413 -550}\special{pa 1481 -541}\special{pa 1548 -524}\special{pa 1613 -499}%
+\special{pa 1673 -465}\special{pa 1729 -425}\special{pa 1780 -377}\special{pa 1824 -324}%
+\special{pa 1861 -266}\special{pa 1890 -203}\special{pa 1912 -137}\special{pa 1925 -69}%
+\special{pa 1929 0}\special{pa 1791 0}\special{pa 1788 -52}\special{pa 1778 -103}%
+\special{pa 1762 -152}\special{pa 1740 -199}\special{pa 1712 -243}\special{pa 1679 -283}%
+\special{pa 1641 -319}\special{pa 1599 -349}\special{pa 1554 -374}\special{pa 1506 -393}%
+\special{pa 1455 -406}\special{pa 1404 -413}\special{pa 1352 -413}\special{pa 1300 -406}%
+\special{pa 1250 -393}\special{pa 1202 -374}\special{pa 1156 -349}\special{pa 1114 -319}%
+\special{pa 1077 -283}\special{pa 1044 -243}\special{pa 1016 -199}\special{pa 994 -152}%
+\special{pa 978 -103}\special{pa 968 -52}\special{pa 965 0}\special{pa 968 52}\special{pa 978 103}%
+\special{pa 994 152}\special{pa 1016 199}\special{pa 1044 243}\special{pa 1077 283}%
+\special{pa 1114 319}\special{pa 1156 349}\special{pa 1202 374}\special{pa 1250 393}%
+\special{pa 1300 406}\special{pa 1352 413}\special{pa 1404 413}\special{pa 1455 406}%
+\special{pa 1506 393}\special{pa 1554 374}\special{pa 1599 349}\special{pa 1641 319}%
+\special{pa 1679 283}\special{pa 1712 243}\special{pa 1740 199}\special{pa 1762 152}%
+\special{pa 1778 103}\special{pa 1788 52}\special{pa 1791 0}\special{pa 1929 0}\special{sh 1}\special{ip}%
+\color[rgb]{0,0,0}%
+\special{pa 276 -0}\special{pa 271 -69}\special{pa 258 -137}\special{pa 237 -203}%
+\special{pa 207 -266}\special{pa 170 -324}\special{pa 126 -377}\special{pa 76 -425}%
+\special{pa 20 -465}\special{pa -41 -499}\special{pa -105 -524}\special{pa -172 -541}%
+\special{pa -241 -550}\special{pa -310 -550}\special{pa -379 -541}\special{pa -446 -524}%
+\special{pa -510 -499}\special{pa -571 -465}\special{pa -627 -425}\special{pa -677 -377}%
+\special{pa -722 -324}\special{pa -759 -266}\special{pa -788 -203}\special{pa -809 -137}%
+\special{pa -822 -69}\special{pa -827 0}\special{pa -822 69}\special{pa -809 137}%
+\special{pa -788 203}\special{pa -759 266}\special{pa -722 324}\special{pa -677 377}%
+\special{pa -627 425}\special{pa -571 465}\special{pa -510 499}\special{pa -446 524}%
+\special{pa -379 541}\special{pa -310 550}\special{pa -241 550}\special{pa -172 541}%
+\special{pa -105 524}\special{pa -41 499}\special{pa 20 465}\special{pa 76 425}%
+\special{pa 126 377}\special{pa 170 324}\special{pa 207 266}\special{pa 237 203}%
+\special{pa 258 137}\special{pa 271 69}\special{pa 276 0}%
+\special{fp}%
+\special{pa 138 -0}\special{pa 135 -52}\special{pa 125 -103}\special{pa 109 -152}%
+\special{pa 87 -199}\special{pa 59 -243}\special{pa 26 -283}\special{pa -12 -319}%
+\special{pa -54 -349}\special{pa -100 -374}\special{pa -148 -393}\special{pa -198 -406}%
+\special{pa -250 -413}\special{pa -302 -413}\special{pa -353 -406}\special{pa -403 -393}%
+\special{pa -452 -374}\special{pa -497 -349}\special{pa -539 -319}\special{pa -577 -283}%
+\special{pa -610 -243}\special{pa -638 -199}\special{pa -660 -152}\special{pa -676 -103}%
+\special{pa -686 -52}\special{pa -689 0}\special{pa -686 52}\special{pa -676 103}%
+\special{pa -660 152}\special{pa -638 199}\special{pa -610 243}\special{pa -577 283}%
+\special{pa -539 319}\special{pa -497 349}\special{pa -452 374}\special{pa -403 393}%
+\special{pa -353 406}\special{pa -302 413}\special{pa -250 413}\special{pa -198 406}%
+\special{pa -148 393}\special{pa -100 374}\special{pa -54 349}\special{pa -12 319}%
+\special{pa 26 283}\special{pa 59 243}\special{pa 87 199}\special{pa 109 152}%
+\special{pa 125 103}\special{pa 135 52}\special{pa 138 0}%
+\special{fp}%
+\special{pa 276 -0}\special{pa 138 -0}%
+\special{fp}%
+\special{pa 138 -0}\special{pa 276 -0}%
+\special{fp}%
+\settowidth{\Width}{cr1}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{cr1}\settodepth{\Depth}{cr1}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-0.7900000,2.3500000){\hspace*{\Width}\raisebox{\Height}{cr1}}%
+%
+\settowidth{\Width}{cr2}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{cr2}\settodepth{\Depth}{cr2}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-1.5800000,0.9600000){\hspace*{\Width}\raisebox{\Height}{cr2}}%
+%
+\settowidth{\Width}{sg1}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{sg1}\settodepth{\Depth}{sg1}\setlength{\Height}{-\Height}%
+\put(0.9800000,-1.7114286){\hspace*{\Width}\raisebox{\Height}{sg1}}%
+%
+\settowidth{\Width}{A}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{A}\settodepth{\Depth}{A}\setlength{\Height}{-\Height}%
+\put(-1.0000000,-0.2142857){\hspace*{\Width}\raisebox{\Height}{A}}%
+%
+\special{pn 1}%
+\special{pa -264 -11}\special{pa -276 -16}\special{pa -287 -11}\special{pa -291 0}\special{pa -287 11}\special{pa -276 16}\special{pa -264 11}\special{pa -260 0}\special{pa -264 -11}\special{sh 1}\special{fp}%
+\special{pn 8}%
+\special{pn 8}%
+\special{pa 271 451}\special{pa 208 87}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 240 130}\special{pa 203 60}\special{pa 192 138}\special{pa 216 134}\special{pa 240 130}%
+\special{sh 1}\special{ip}%
+\special{pn 1}%
+\special{pa 240 130}\special{pa 203 60}\special{pa 192 138}\special{pa 216 134}%
+\special{pa 240 130}\special{pa 203 60}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 1929 -0}\special{pa 1925 -69}\special{pa 1912 -137}\special{pa 1890 -203}%
+\special{pa 1861 -266}\special{pa 1824 -324}\special{pa 1780 -377}\special{pa 1729 -425}%
+\special{pa 1673 -465}\special{pa 1613 -499}\special{pa 1548 -524}\special{pa 1481 -541}%
+\special{pa 1413 -550}\special{pa 1343 -550}\special{pa 1275 -541}\special{pa 1208 -524}%
+\special{pa 1143 -499}\special{pa 1083 -465}\special{pa 1027 -425}\special{pa 976 -377}%
+\special{pa 932 -324}\special{pa 895 -266}\special{pa 865 -203}\special{pa 844 -137}%
+\special{pa 831 -69}\special{pa 827 0}\special{pa 831 69}\special{pa 844 137}%
+\special{pa 865 203}\special{pa 895 266}\special{pa 932 324}\special{pa 976 377}%
+\special{pa 1027 425}\special{pa 1083 465}\special{pa 1143 499}\special{pa 1208 524}%
+\special{pa 1275 541}\special{pa 1343 550}\special{pa 1413 550}\special{pa 1481 541}%
+\special{pa 1548 524}\special{pa 1613 499}\special{pa 1673 465}\special{pa 1729 425}%
+\special{pa 1780 377}\special{pa 1824 324}\special{pa 1861 266}\special{pa 1890 203}%
+\special{pa 1912 137}\special{pa 1925 69}\special{pa 1929 0}%
+\special{fp}%
+\special{pa 1791 -0}\special{pa 1788 -52}\special{pa 1778 -103}\special{pa 1762 -152}%
+\special{pa 1740 -199}\special{pa 1712 -243}\special{pa 1679 -283}\special{pa 1641 -319}%
+\special{pa 1599 -349}\special{pa 1554 -374}\special{pa 1506 -393}\special{pa 1455 -406}%
+\special{pa 1404 -413}\special{pa 1352 -413}\special{pa 1300 -406}\special{pa 1250 -393}%
+\special{pa 1202 -374}\special{pa 1156 -349}\special{pa 1114 -319}\special{pa 1077 -283}%
+\special{pa 1044 -243}\special{pa 1016 -199}\special{pa 994 -152}\special{pa 978 -103}%
+\special{pa 968 -52}\special{pa 965 0}\special{pa 968 52}\special{pa 978 103}%
+\special{pa 994 152}\special{pa 1016 199}\special{pa 1044 243}\special{pa 1077 283}%
+\special{pa 1114 319}\special{pa 1156 349}\special{pa 1202 374}\special{pa 1250 393}%
+\special{pa 1300 406}\special{pa 1352 413}\special{pa 1404 413}\special{pa 1455 406}%
+\special{pa 1506 393}\special{pa 1554 374}\special{pa 1599 349}\special{pa 1641 319}%
+\special{pa 1679 283}\special{pa 1712 243}\special{pa 1740 199}\special{pa 1762 152}%
+\special{pa 1778 103}\special{pa 1788 52}\special{pa 1791 0}%
+\special{fp}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/grid-less.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/grid-less.pdf
new file mode 100644
index 0000000000..f81145df85
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/grid-less.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/grid-more.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/grid-more.pdf
new file mode 100644
index 0000000000..4fb5277870
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/grid-more.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/hatch.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/hatch.pdf
new file mode 100644
index 0000000000..c97e966de9
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/hatch.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/hatch1.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/hatch1.tex
new file mode 100644
index 0000000000..3b05a11e4e
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/hatch1.tex
@@ -0,0 +1,70 @@
+%%% /Users/Hannya/Desktop/fig/hatch1.tex
+%%% Generator=paramark.cdy
+{\unitlength=6mm%
+\begin{picture}%
+(9.28,9.01)(-4.43,-4.39)%
+\special{pn 8}%
+%
+\special{pa 709 -0}\special{pa 703 -89}\special{pa 686 -176}\special{pa 659 -261}%
+\special{pa 621 -341}\special{pa 573 -417}\special{pa 517 -485}\special{pa 452 -546}%
+\special{pa 380 -598}\special{pa 302 -641}\special{pa 219 -674}\special{pa 133 -696}%
+\special{pa 44 -707}\special{pa -44 -707}\special{pa -133 -696}\special{pa -219 -674}%
+\special{pa -302 -641}\special{pa -380 -598}\special{pa -452 -546}\special{pa -517 -485}%
+\special{pa -573 -417}\special{pa -621 -341}\special{pa -659 -261}\special{pa -686 -176}%
+\special{pa -703 -89}\special{pa -709 0}\special{pa -703 89}\special{pa -686 176}%
+\special{pa -659 261}\special{pa -621 341}\special{pa -573 417}\special{pa -517 485}%
+\special{pa -452 546}\special{pa -380 598}\special{pa -302 641}\special{pa -219 674}%
+\special{pa -133 696}\special{pa -44 707}\special{pa 44 707}\special{pa 133 696}%
+\special{pa 219 674}\special{pa 302 641}\special{pa 380 598}\special{pa 452 546}%
+\special{pa 517 485}\special{pa 573 417}\special{pa 621 341}\special{pa 659 261}%
+\special{pa 686 176}\special{pa 703 89}\special{pa 709 0}%
+\special{fp}%
+\special{pn 6}%
+\special{pa 448 549}\special{pa 540 457}%
+\special{fp}%
+\special{pa 171 686}\special{pa 688 170}%
+\special{fp}%
+\special{pa 11 707}\special{pa 708 10}%
+\special{fp}%
+\special{pa -119 698}\special{pa 697 -118}%
+\special{fp}%
+\special{pa -230 670}\special{pa 669 -229}%
+\special{fp}%
+\special{pa -327 628}\special{pa 628 -327}%
+\special{fp}%
+\special{pa -413 574}\special{pa 575 -414}%
+\special{fp}%
+\special{pa -489 511}\special{pa 512 -489}%
+\special{fp}%
+\special{pa -555 438}\special{pa 439 -555}%
+\special{fp}%
+\special{pa -612 356}\special{pa 356 -612}%
+\special{fp}%
+\special{pa -658 263}\special{pa 262 -657}%
+\special{fp}%
+\special{pa -690 156}\special{pa 156 -690}%
+\special{fp}%
+\special{pa -707 33}\special{pa 34 -707}%
+\special{fp}%
+\special{pa -698 -115}\special{pa -114 -698}%
+\special{fp}%
+\special{pa -630 -322}\special{pa -322 -630}%
+\special{fp}%
+\special{pn 8}%
+\special{pa -1046 -0}\special{pa 1146 -0}%
+\special{fp}%
+\special{pa 0 1037}\special{pa 0 -1091}%
+\special{fp}%
+\settowidth{\Width}{$x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.9333333,0.0000000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{\Depth}%
+\put(0.0000000,4.7033333){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+\settowidth{\Width}{O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(-0.0833333,-0.0833333){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/hatch2.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/hatch2.tex
new file mode 100644
index 0000000000..037fb2495d
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/hatch2.tex
@@ -0,0 +1,126 @@
+%%% /Users/Hannya/Desktop/fig/hatch2.tex
+%%% Generator=paramark.cdy
+{\unitlength=6mm%
+\begin{picture}%
+(9.28,9.01)(-4.43,-4.39)%
+\special{pn 8}%
+%
+\special{pa 709 -0}\special{pa 703 -89}\special{pa 686 -176}\special{pa 659 -261}%
+\special{pa 621 -341}\special{pa 573 -417}\special{pa 517 -485}\special{pa 452 -546}%
+\special{pa 380 -598}\special{pa 302 -641}\special{pa 219 -674}\special{pa 133 -696}%
+\special{pa 44 -707}\special{pa -44 -707}\special{pa -133 -696}\special{pa -219 -674}%
+\special{pa -302 -641}\special{pa -380 -598}\special{pa -452 -546}\special{pa -517 -485}%
+\special{pa -573 -417}\special{pa -621 -341}\special{pa -659 -261}\special{pa -686 -176}%
+\special{pa -703 -89}\special{pa -709 0}\special{pa -703 89}\special{pa -686 176}%
+\special{pa -659 261}\special{pa -621 341}\special{pa -573 417}\special{pa -517 485}%
+\special{pa -452 546}\special{pa -380 598}\special{pa -302 641}\special{pa -219 674}%
+\special{pa -133 696}\special{pa -44 707}\special{pa 44 707}\special{pa 133 696}%
+\special{pa 219 674}\special{pa 302 641}\special{pa 380 598}\special{pa 452 546}%
+\special{pa 517 485}\special{pa 573 417}\special{pa 621 341}\special{pa 659 261}%
+\special{pa 686 176}\special{pa 703 89}\special{pa 709 0}%
+\special{fp}%
+\special{pa 945 -0}\special{pa 937 -59}\special{pa 915 -117}\special{pa 879 -174}%
+\special{pa 828 -228}\special{pa 764 -278}\special{pa 689 -323}\special{pa 602 -364}%
+\special{pa 506 -399}\special{pa 402 -427}\special{pa 292 -449}\special{pa 177 -464}%
+\special{pa 59 -472}\special{pa -59 -472}\special{pa -177 -464}\special{pa -292 -449}%
+\special{pa -402 -427}\special{pa -506 -399}\special{pa -602 -364}\special{pa -689 -323}%
+\special{pa -764 -278}\special{pa -828 -228}\special{pa -879 -174}\special{pa -915 -117}%
+\special{pa -937 -59}\special{pa -945 0}\special{pa -937 59}\special{pa -915 117}%
+\special{pa -879 174}\special{pa -828 228}\special{pa -764 278}\special{pa -689 323}%
+\special{pa -602 364}\special{pa -506 399}\special{pa -402 427}\special{pa -292 449}%
+\special{pa -177 464}\special{pa -59 472}\special{pa 59 472}\special{pa 177 464}%
+\special{pa 292 449}\special{pa 402 427}\special{pa 506 399}\special{pa 602 364}%
+\special{pa 689 323}\special{pa 764 278}\special{pa 828 228}\special{pa 879 174}%
+\special{pa 915 117}\special{pa 937 59}\special{pa 945 -0}%
+\special{fp}%
+\special{pa 472 -0}\special{pa 469 -118}\special{pa 458 -235}\special{pa 439 -348}%
+\special{pa 414 -455}\special{pa 382 -555}\special{pa 344 -647}\special{pa 301 -728}%
+\special{pa 253 -798}\special{pa 201 -855}\special{pa 146 -899}\special{pa 89 -928}%
+\special{pa 30 -943}\special{pa -30 -943}\special{pa -89 -928}\special{pa -146 -899}%
+\special{pa -201 -855}\special{pa -253 -798}\special{pa -301 -728}\special{pa -344 -647}%
+\special{pa -382 -555}\special{pa -414 -455}\special{pa -439 -348}\special{pa -458 -235}%
+\special{pa -469 -118}\special{pa -472 0}\special{pa -469 118}\special{pa -458 235}%
+\special{pa -439 348}\special{pa -414 455}\special{pa -382 555}\special{pa -344 647}%
+\special{pa -301 728}\special{pa -253 798}\special{pa -201 855}\special{pa -146 899}%
+\special{pa -89 928}\special{pa -30 943}\special{pa 30 943}\special{pa 89 928}%
+\special{pa 146 899}\special{pa 201 855}\special{pa 253 798}\special{pa 301 728}%
+\special{pa 344 647}\special{pa 382 555}\special{pa 414 455}\special{pa 439 348}%
+\special{pa 458 235}\special{pa 469 118}\special{pa 472 -0}%
+\special{fp}%
+\special{pn 6}%
+\special{pa 171 686}\special{pa 418 440}%
+\special{fp}%
+\special{pa 11 707}\special{pa 266 453}%
+\special{fp}%
+\special{pa -119 698}\special{pa 111 468}%
+\special{fp}%
+\special{pa -230 670}\special{pa -31 472}%
+\special{fp}%
+\special{pa -327 628}\special{pa -164 465}%
+\special{fp}%
+\special{pa -385 547}\special{pa -288 450}%
+\special{fp}%
+\special{pa -418 440}\special{pa -404 427}%
+\special{fp}%
+\special{pa 326 -443}\special{pa 396 -513}%
+\special{fp}%
+\special{pa 205 -461}\special{pa 356 -612}%
+\special{fp}%
+\special{pa 75 -470}\special{pa 262 -657}%
+\special{fp}%
+\special{pa -63 -471}\special{pa 156 -690}%
+\special{fp}%
+\special{pa -214 -459}\special{pa 34 -707}%
+\special{fp}%
+\special{pa -381 -432}\special{pa -114 -698}%
+\special{fp}%
+\special{pa -372 -580}\special{pa -322 -630}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 6}%
+\special{pa 441 417}\special{pa 688 170}%
+\special{fp}%
+\special{pa 453 266}\special{pa 708 10}%
+\special{fp}%
+\special{pa 469 110}\special{pa 697 -118}%
+\special{fp}%
+\special{pa 471 -31}\special{pa 669 -229}%
+\special{fp}%
+\special{pa 464 -164}\special{pa 628 -327}%
+\special{fp}%
+\special{pa 449 -287}\special{pa 546 -384}%
+\special{fp}%
+\special{pa 426 -404}\special{pa 440 -417}%
+\special{fp}%
+\special{pa -513 396}\special{pa -443 326}%
+\special{fp}%
+\special{pa -612 356}\special{pa -461 205}%
+\special{fp}%
+\special{pa -658 263}\special{pa -470 75}%
+\special{fp}%
+\special{pa -690 156}\special{pa -470 -64}%
+\special{fp}%
+\special{pa -707 33}\special{pa -460 -214}%
+\special{fp}%
+\special{pa -698 -115}\special{pa -431 -381}%
+\special{fp}%
+\special{pa -630 -322}\special{pa -580 -372}%
+\special{fp}%
+\special{pn 8}%
+\special{pa -1046 -0}\special{pa 1146 -0}%
+\special{fp}%
+\special{pa 0 1037}\special{pa 0 -1091}%
+\special{fp}%
+\settowidth{\Width}{$x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.9333333,0.0000000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{\Depth}%
+\put(0.0000000,4.7033333){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+\settowidth{\Width}{O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(-0.0833333,-0.0833333){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/hatch3.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/hatch3.tex
new file mode 100644
index 0000000000..e2a395d5dc
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/hatch3.tex
@@ -0,0 +1,123 @@
+%%% /Users/Hannya/Desktop/fig/hatch3.tex
+%%% Generator=hachtest.cdy
+{\unitlength=7mm%
+\begin{picture}%
+(11.84,5.92)(-2.59,-2.98)%
+\special{pn 8}%
+%
+\special{pa -714 288}\special{pa -693 324}\special{pa -658 377}\special{pa -623 425}%
+\special{pa -589 465}\special{pa -554 499}\special{pa -519 524}\special{pa -485 541}%
+\special{pa -450 550}\special{pa -416 550}\special{pa -381 541}\special{pa -346 524}%
+\special{pa -312 499}\special{pa -277 465}\special{pa -242 425}\special{pa -208 377}%
+\special{pa -173 324}\special{pa -139 266}\special{pa -104 203}\special{pa -69 137}%
+\special{pa -35 69}\special{pa 0 -0}\special{pa 35 -69}\special{pa 69 -137}%
+\special{pa 104 -203}\special{pa 139 -266}\special{pa 173 -324}\special{pa 208 -377}%
+\special{pa 242 -425}\special{pa 277 -465}\special{pa 312 -499}\special{pa 346 -524}%
+\special{pa 381 -541}\special{pa 416 -550}\special{pa 450 -550}\special{pa 485 -541}%
+\special{pa 519 -524}\special{pa 554 -499}\special{pa 589 -465}\special{pa 623 -425}%
+\special{pa 658 -377}\special{pa 693 -324}\special{pa 727 -266}\special{pa 762 -203}%
+\special{pa 797 -137}\special{pa 831 -69}\special{pa 866 0}\special{pa 900 69}%
+\special{pa 935 137}\special{pa 970 203}\special{pa 1004 266}\special{pa 1039 324}%
+\special{pa 1074 377}\special{pa 1108 425}\special{pa 1143 465}\special{pa 1177 499}%
+\special{pa 1212 524}\special{pa 1247 541}\special{pa 1281 550}\special{pa 1316 550}%
+\special{pa 1351 541}\special{pa 1385 524}\special{pa 1420 499}\special{pa 1455 465}%
+\special{pa 1489 425}\special{pa 1524 377}\special{pa 1558 324}\special{pa 1593 266}%
+\special{pa 1628 203}\special{pa 1662 137}\special{pa 1697 69}\special{pa 1732 0}%
+\special{pa 1766 -69}\special{pa 1801 -137}\special{pa 1835 -203}\special{pa 1870 -266}%
+\special{pa 1905 -324}\special{pa 1939 -377}\special{pa 1974 -425}\special{pa 2009 -465}%
+\special{pa 2043 -499}\special{pa 2078 -524}\special{pa 2113 -541}\special{pa 2147 -550}%
+\special{pa 2182 -550}\special{pa 2216 -541}\special{pa 2251 -524}\special{pa 2286 -499}%
+\special{pa 2320 -465}\special{pa 2355 -425}\special{pa 2390 -377}\special{pa 2424 -324}%
+\special{pa 2459 -266}\special{pa 2493 -203}\special{pa 2528 -137}\special{pa 2549 -96}%
+\special{fp}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa -714 220}\special{pa 2549 -246}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa -714 276}\special{pa 2549 276}%
+\special{fp}%
+}%
+\special{pn 6}%
+\special{pa 2401 -225}\special{pa 2452 -276}%
+\special{fp}%
+\special{pa 2238 -202}\special{pa 2399 -362}%
+\special{fp}%
+\special{pa 2076 -178}\special{pa 2340 -442}%
+\special{fp}%
+\special{pa 1914 -155}\special{pa 2269 -511}%
+\special{fp}%
+\special{pa 1852 -233}\special{pa 2169 -550}%
+\special{fp}%
+\special{pa 777 7}\special{pa 838 -54}%
+\special{fp}%
+\special{pa 615 30}\special{pa 791 -147}%
+\special{fp}%
+\special{pa 452 54}\special{pa 743 -237}%
+\special{fp}%
+\special{pa 290 77}\special{pa 692 -325}%
+\special{fp}%
+\special{pa 127 100}\special{pa 635 -408}%
+\special{fp}%
+\special{pa -35 123}\special{pa 571 -483}%
+\special{fp}%
+\special{pa 52 -103}\special{pa 488 -540}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 6}%
+\special{pa 1362 536}\special{pa 1530 367}%
+\special{fp}%
+\special{pa 1227 532}\special{pa 1483 276}%
+\special{fp}%
+\special{pa 1148 471}\special{pa 1344 276}%
+\special{fp}%
+\special{pa 1086 394}\special{pa 1204 276}%
+\special{fp}%
+\special{pa 1031 310}\special{pa 1065 276}%
+\special{fp}%
+\special{pa -460 548}\special{pa -188 276}%
+\special{fp}%
+\special{pa -552 501}\special{pa -327 276}%
+\special{fp}%
+\special{pa -620 429}\special{pa -466 276}%
+\special{fp}%
+\special{pa -677 348}\special{pa -605 276}%
+\special{fp}%
+\special{pn 8}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 20 -551}\special{pa -20 -551}%
+\special{fp}%
+}%
+\settowidth{\Width}{$2$}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{$2$}\settodepth{\Depth}{$2$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-0.1428571,2.0000000){\hspace*{\Width}\raisebox{\Height}{$2$}}%
+%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 20 551}\special{pa -20 551}%
+\special{fp}%
+}%
+\settowidth{\Width}{$-2$}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{$-2$}\settodepth{\Depth}{$-2$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-0.1428571,-2.0000000){\hspace*{\Width}\raisebox{\Height}{$-2$}}%
+%
+\special{pa -714 -0}\special{pa 2549 -0}%
+\special{fp}%
+\special{pa 0 821}\special{pa 0 -810}%
+\special{fp}%
+\settowidth{\Width}{$x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(9.3214286,0.0000000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{\Depth}%
+\put(0.0000000,3.0114286){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+\settowidth{\Width}{O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(-0.0714286,-0.0714286){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/hatch4.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/hatch4.tex
new file mode 100644
index 0000000000..d3a9bc703e
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/hatch4.tex
@@ -0,0 +1,111 @@
+%%% /Users/Hannya/Desktop/fig/hatch4.tex
+%%% Generator=hachtest.cdy
+{\unitlength=7mm%
+\begin{picture}%
+(11.84,5.92)(-2.59,-2.98)%
+\special{pn 8}%
+%
+\special{pa -714 288}\special{pa -693 324}\special{pa -658 377}\special{pa -623 425}%
+\special{pa -589 465}\special{pa -554 499}\special{pa -519 524}\special{pa -485 541}%
+\special{pa -450 550}\special{pa -416 550}\special{pa -381 541}\special{pa -346 524}%
+\special{pa -312 499}\special{pa -277 465}\special{pa -242 425}\special{pa -208 377}%
+\special{pa -173 324}\special{pa -139 266}\special{pa -104 203}\special{pa -69 137}%
+\special{pa -35 69}\special{pa 0 -0}\special{pa 35 -69}\special{pa 69 -137}%
+\special{pa 104 -203}\special{pa 139 -266}\special{pa 173 -324}\special{pa 208 -377}%
+\special{pa 242 -425}\special{pa 277 -465}\special{pa 312 -499}\special{pa 346 -524}%
+\special{pa 381 -541}\special{pa 416 -550}\special{pa 450 -550}\special{pa 485 -541}%
+\special{pa 519 -524}\special{pa 554 -499}\special{pa 589 -465}\special{pa 623 -425}%
+\special{pa 658 -377}\special{pa 693 -324}\special{pa 727 -266}\special{pa 762 -203}%
+\special{pa 797 -137}\special{pa 831 -69}\special{pa 866 0}\special{pa 900 69}%
+\special{pa 935 137}\special{pa 970 203}\special{pa 1004 266}\special{pa 1039 324}%
+\special{pa 1074 377}\special{pa 1108 425}\special{pa 1143 465}\special{pa 1177 499}%
+\special{pa 1212 524}\special{pa 1247 541}\special{pa 1281 550}\special{pa 1316 550}%
+\special{pa 1351 541}\special{pa 1385 524}\special{pa 1420 499}\special{pa 1455 465}%
+\special{pa 1489 425}\special{pa 1524 377}\special{pa 1558 324}\special{pa 1593 266}%
+\special{pa 1628 203}\special{pa 1662 137}\special{pa 1697 69}\special{pa 1732 0}%
+\special{pa 1766 -69}\special{pa 1801 -137}\special{pa 1835 -203}\special{pa 1870 -266}%
+\special{pa 1905 -324}\special{pa 1939 -377}\special{pa 1974 -425}\special{pa 2009 -465}%
+\special{pa 2043 -499}\special{pa 2078 -524}\special{pa 2113 -541}\special{pa 2147 -550}%
+\special{pa 2182 -550}\special{pa 2216 -541}\special{pa 2251 -524}\special{pa 2286 -499}%
+\special{pa 2320 -465}\special{pa 2355 -425}\special{pa 2390 -377}\special{pa 2424 -324}%
+\special{pa 2459 -266}\special{pa 2493 -203}\special{pa 2528 -137}\special{pa 2549 -96}%
+\special{fp}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa -714 220}\special{pa 2549 -246}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa -714 276}\special{pa 2549 276}%
+\special{fp}%
+}%
+\special{pa 2457 276}\special{pa 2549 184}%
+\special{fp}%
+\special{pa 2318 276}\special{pa 2549 44}%
+\special{fp}%
+\special{pa 2179 276}\special{pa 2549 -95}%
+\special{fp}%
+\special{pa 2040 276}\special{pa 2502 -187}%
+\special{fp}%
+\special{pa 1900 276}\special{pa 2401 -225}%
+\special{fp}%
+\special{pa 1761 276}\special{pa 2238 -202}%
+\special{fp}%
+\special{pa 1622 276}\special{pa 2076 -178}%
+\special{fp}%
+\special{pa 1705 54}\special{pa 1914 -155}%
+\special{fp}%
+\special{pa 926 276}\special{pa 980 222}%
+\special{fp}%
+\special{pa 787 276}\special{pa 932 131}%
+\special{fp}%
+\special{pa 648 276}\special{pa 885 38}%
+\special{fp}%
+\special{pa 508 276}\special{pa 777 7}%
+\special{fp}%
+\special{pa 369 276}\special{pa 615 30}%
+\special{fp}%
+\special{pa 230 276}\special{pa 452 54}%
+\special{fp}%
+\special{pa 91 276}\special{pa 290 77}%
+\special{fp}%
+\special{pa -48 276}\special{pa 127 100}%
+\special{fp}%
+\special{pa -92 180}\special{pa -35 123}%
+\special{fp}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 20 -551}\special{pa -20 -551}%
+\special{fp}%
+}%
+\settowidth{\Width}{$2$}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{$2$}\settodepth{\Depth}{$2$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-0.1428571,2.0000000){\hspace*{\Width}\raisebox{\Height}{$2$}}%
+%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 20 551}\special{pa -20 551}%
+\special{fp}%
+}%
+\settowidth{\Width}{$-2$}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{$-2$}\settodepth{\Depth}{$-2$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-0.1428571,-2.0000000){\hspace*{\Width}\raisebox{\Height}{$-2$}}%
+%
+\special{pa -714 -0}\special{pa 2549 -0}%
+\special{fp}%
+\special{pa 0 821}\special{pa 0 -810}%
+\special{fp}%
+\settowidth{\Width}{$x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(9.3214286,0.0000000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{\Depth}%
+\put(0.0000000,3.0114286){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+\settowidth{\Width}{O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(-0.0714286,-0.0714286){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/hatch5.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/hatch5.tex
new file mode 100644
index 0000000000..dc2cbf6a52
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/hatch5.tex
@@ -0,0 +1,68 @@
+%%% /Users/Hannya/Desktop/fig/hatch5.tex
+%%% Generator=hachtest.cdy
+{\unitlength=9mm%
+\begin{picture}%
+(4.5,5)(-2,-1.5)%
+\special{pn 8}%
+%
+\special{pa -602 531}\special{pa -597 501}\special{pa -581 401}\special{pa -565 307}%
+\special{pa -549 221}\special{pa -533 141}\special{pa -517 68}\special{pa -501 1}%
+\special{pa -485 -60}\special{pa -469 -115}\special{pa -454 -164}\special{pa -438 -208}%
+\special{pa -422 -246}\special{pa -406 -280}\special{pa -390 -308}\special{pa -374 -332}%
+\special{pa -358 -351}\special{pa -342 -365}\special{pa -326 -376}\special{pa -310 -383}%
+\special{pa -294 -386}\special{pa -278 -385}\special{pa -262 -381}\special{pa -246 -374}%
+\special{pa -230 -363}\special{pa -214 -350}\special{pa -198 -335}\special{pa -182 -317}%
+\special{pa -167 -296}\special{pa -151 -274}\special{pa -135 -250}\special{pa -119 -224}%
+\special{pa -103 -197}\special{pa -87 -168}\special{pa -71 -139}\special{pa -55 -109}%
+\special{pa -39 -77}\special{pa -23 -46}\special{pa -7 -14}\special{pa 9 18}%
+\special{pa 25 49}\special{pa 41 81}\special{pa 57 112}\special{pa 73 142}%
+\special{pa 89 172}\special{pa 105 200}\special{pa 120 227}\special{pa 136 253}%
+\special{pa 152 277}\special{pa 168 299}\special{pa 184 319}\special{pa 200 336}%
+\special{pa 216 352}\special{pa 232 365}\special{pa 248 375}\special{pa 264 381}%
+\special{pa 280 385}\special{pa 296 385}\special{pa 312 382}\special{pa 328 375}%
+\special{pa 344 364}\special{pa 360 349}\special{pa 376 329}\special{pa 392 305}%
+\special{pa 407 276}\special{pa 423 242}\special{pa 439 203}\special{pa 455 159}%
+\special{pa 471 109}\special{pa 487 53}\special{pa 503 -8}\special{pa 519 -76}%
+\special{pa 535 -150}\special{pa 551 -230}\special{pa 567 -317}\special{pa 583 -412}%
+\special{pa 599 -513}\special{pa 615 -621}\special{pa 631 -737}\special{pa 647 -860}%
+\special{pa 663 -992}\special{pa 679 -1131}\special{pa 690 -1240}%
+\special{fp}%
+\special{pa -709 -189}\special{pa 886 -969}%
+\special{fp}%
+\special{pa 217 352}\special{pa 476 94}%
+\special{fp}%
+\special{pa 153 277}\special{pa 523 -92}%
+\special{fp}%
+\special{pa 100 191}\special{pa 558 -267}%
+\special{fp}%
+\special{pa 51 101}\special{pa 587 -435}%
+\special{fp}%
+\special{pa 4 8}\special{pa 611 -599}%
+\special{fp}%
+\special{pa -42 -84}\special{pa 634 -760}%
+\special{fp}%
+\special{pa -91 -175}\special{pa 528 -794}%
+\special{fp}%
+\special{pa -143 -262}\special{pa 255 -660}%
+\special{fp}%
+\special{pa -204 -340}\special{pa -17 -527}%
+\special{fp}%
+\special{pa -299 -385}\special{pa -290 -394}%
+\special{fp}%
+\special{pa -709 -0}\special{pa 886 -0}%
+\special{fp}%
+\special{pa 0 531}\special{pa 0 -1240}%
+\special{fp}%
+\settowidth{\Width}{$x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.5555556,0.0000000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{\Depth}%
+\put(0.0000000,3.5555556){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+\settowidth{\Width}{O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(-0.0555556,-0.0555556){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/histgram.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/histgram.tex
new file mode 100644
index 0000000000..42c8635477
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/histgram.tex
@@ -0,0 +1,137 @@
+%%% t5histplot.tex 2016-4-23 11:21
+%%% t5histplot.sce 2016-4-23 11:21
+{\unitlength=0.6mm%
+\begin{picture}%
+( 132.11000, 89.65000)( -18.31000, -8.10000)%
+\special{pn 8}%
+%
+\special{pa 472 0}\special{pa 472 -709}\special{pa 709 -709}\special{pa 709 0}\special{pa 472 0}%
+\special{fp}%
+\special{pa 709 0}\special{pa 709 -236}\special{pa 945 -236}\special{pa 945 0}\special{pa 709 0}%
+\special{fp}%
+\special{pa 945 0}\special{pa 1181 0}\special{pa 945 0}%
+\special{fp}%
+\special{pa 1181 0}\special{pa 1181 -1654}\special{pa 1417 -1654}\special{pa 1417 0}%
+\special{pa 1181 0}%
+\special{fp}%
+\special{pa 1417 0}\special{pa 1417 -945}\special{pa 1654 -945}\special{pa 1654 0}%
+\special{pa 1417 0}%
+\special{fp}%
+\special{pa 1654 0}\special{pa 1654 -827}\special{pa 1890 -827}\special{pa 1890 0}%
+\special{pa 1654 0}%
+\special{fp}%
+\special{pa 1890 0}\special{pa 1890 -1654}\special{pa 2126 -1654}\special{pa 2126 0}%
+\special{pa 1890 0}%
+\special{fp}%
+\special{pa 2126 0}\special{pa 2126 -827}\special{pa 2362 -827}\special{pa 2362 0}%
+\special{pa 2126 0}%
+\special{fp}%
+\special{pa -118 0}\special{pa 2480 0}\special{pa 2480 -1772}\special{pa -118 -1772}%
+\special{pa -118 0}%
+\special{fp}%
+\settowidth{\Width}{$0$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$0$}\settodepth{\Depth}{$0$}\setlength{\Height}{-\Height}%
+\put(0.0000,-0.1500){\hspace*{\Width}\raisebox{\Height}{$0$}}%
+%
+%
+\special{pa 0 0}\special{pa 0 2}%
+\special{fp}%
+\settowidth{\Width}{$10$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$10$}\settodepth{\Depth}{$10$}\setlength{\Height}{-\Height}%
+\put(10.0000,-0.1500){\hspace*{\Width}\raisebox{\Height}{$10$}}%
+%
+%
+\special{pa 236 0}\special{pa 236 2}%
+\special{fp}%
+\settowidth{\Width}{$20$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$20$}\settodepth{\Depth}{$20$}\setlength{\Height}{-\Height}%
+\put(20.0000,-0.1500){\hspace*{\Width}\raisebox{\Height}{$20$}}%
+%
+%
+\special{pa 472 0}\special{pa 472 2}%
+\special{fp}%
+\settowidth{\Width}{$30$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$30$}\settodepth{\Depth}{$30$}\setlength{\Height}{-\Height}%
+\put(30.0000,-0.1500){\hspace*{\Width}\raisebox{\Height}{$30$}}%
+%
+%
+\special{pa 709 0}\special{pa 709 2}%
+\special{fp}%
+\settowidth{\Width}{$40$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$40$}\settodepth{\Depth}{$40$}\setlength{\Height}{-\Height}%
+\put(40.0000,-0.1500){\hspace*{\Width}\raisebox{\Height}{$40$}}%
+%
+%
+\special{pa 945 0}\special{pa 945 2}%
+\special{fp}%
+\settowidth{\Width}{$50$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$50$}\settodepth{\Depth}{$50$}\setlength{\Height}{-\Height}%
+\put(50.0000,-0.1500){\hspace*{\Width}\raisebox{\Height}{$50$}}%
+%
+%
+\special{pa 1181 0}\special{pa 1181 2}%
+\special{fp}%
+\settowidth{\Width}{$60$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$60$}\settodepth{\Depth}{$60$}\setlength{\Height}{-\Height}%
+\put(60.0000,-0.1500){\hspace*{\Width}\raisebox{\Height}{$60$}}%
+%
+%
+\special{pa 1417 0}\special{pa 1417 2}%
+\special{fp}%
+\settowidth{\Width}{$70$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$70$}\settodepth{\Depth}{$70$}\setlength{\Height}{-\Height}%
+\put(70.0000,-0.1500){\hspace*{\Width}\raisebox{\Height}{$70$}}%
+%
+%
+\special{pa 1654 0}\special{pa 1654 2}%
+\special{fp}%
+\settowidth{\Width}{$80$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$80$}\settodepth{\Depth}{$80$}\setlength{\Height}{-\Height}%
+\put(80.0000,-0.1500){\hspace*{\Width}\raisebox{\Height}{$80$}}%
+%
+%
+\special{pa 1890 0}\special{pa 1890 2}%
+\special{fp}%
+\settowidth{\Width}{$90$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$90$}\settodepth{\Depth}{$90$}\setlength{\Height}{-\Height}%
+\put(90.0000,-0.1500){\hspace*{\Width}\raisebox{\Height}{$90$}}%
+%
+%
+\special{pa 2126 0}\special{pa 2126 2}%
+\special{fp}%
+\settowidth{\Width}{$100$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$100$}\settodepth{\Depth}{$100$}\setlength{\Height}{-\Height}%
+\put(100.0000,-0.1500){\hspace*{\Width}\raisebox{\Height}{$100$}}%
+%
+%
+\special{pa 2362 0}\special{pa 2362 2}%
+\special{fp}%
+\settowidth{\Width}{$0$}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{$0$}\settodepth{\Depth}{$0$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-5.1500,0.0000){\hspace*{\Width}\raisebox{\Height}{$0$}}%
+%
+%
+\special{pa -118 0}\special{pa -120 0}%
+\special{fp}%
+\settowidth{\Width}{$5$}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{$5$}\settodepth{\Depth}{$5$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-5.1500,25.0000){\hspace*{\Width}\raisebox{\Height}{$5$}}%
+%
+%
+\special{pa -118 -591}\special{pa -120 -591}%
+\special{fp}%
+\settowidth{\Width}{$10$}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{$10$}\settodepth{\Depth}{$10$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-5.1500,50.0000){\hspace*{\Width}\raisebox{\Height}{$10$}}%
+%
+%
+\special{pa -118 -1181}\special{pa -120 -1181}%
+\special{fp}%
+\settowidth{\Width}{$15$}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{$15$}\settodepth{\Depth}{$15$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-5.1500,75.0000){\hspace*{\Width}\raisebox{\Height}{$15$}}%
+%
+%
+\special{pa -118 -1772}\special{pa -120 -1772}%
+\special{fp}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/htickmark.cdy b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/htickmark.cdy
new file mode 100644
index 0000000000..4e01ee9b38
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/htickmark.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/htickmark.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/htickmark.tex
new file mode 100644
index 0000000000..71bdd348fa
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/htickmark.tex
@@ -0,0 +1,114 @@
+%%% /Users/takatoosetsuo/Dropbox/kettoday/0717HtickImpli/fig/htickmark.tex
+%%% Generator=htickmark.cdy
+{\unitlength=1cm%
+\begin{picture}%
+(11,2)(-5.5,-1)%
+\special{pn 8}%
+%
+{%
+\color[rgb]{0,0,0}%
+\special{pa -1969 -20}\special{pa -1969 20}%
+\special{fp}%
+}%
+\settowidth{\Width}{$-5$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$-5$}\settodepth{\Depth}{$-5$}\setlength{\Height}{-\Height}%
+\put(-5.0000000,-0.1000000){\hspace*{\Width}\raisebox{\Height}{$-5$}}%
+%
+{%
+\color[rgb]{0,0,0}%
+\special{pa -1575 -20}\special{pa -1575 20}%
+\special{fp}%
+}%
+\settowidth{\Width}{$-4$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$-4$}\settodepth{\Depth}{$-4$}\setlength{\Height}{-\Height}%
+\put(-4.0000000,-0.1000000){\hspace*{\Width}\raisebox{\Height}{$-4$}}%
+%
+{%
+\color[rgb]{0,0,0}%
+\special{pa -1181 -20}\special{pa -1181 20}%
+\special{fp}%
+}%
+\settowidth{\Width}{$-3$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$-3$}\settodepth{\Depth}{$-3$}\setlength{\Height}{-\Height}%
+\put(-3.0000000,-0.1000000){\hspace*{\Width}\raisebox{\Height}{$-3$}}%
+%
+{%
+\color[rgb]{0,0,0}%
+\special{pa -787 -20}\special{pa -787 20}%
+\special{fp}%
+}%
+\settowidth{\Width}{$-2$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$-2$}\settodepth{\Depth}{$-2$}\setlength{\Height}{-\Height}%
+\put(-2.0000000,-0.1000000){\hspace*{\Width}\raisebox{\Height}{$-2$}}%
+%
+{%
+\color[rgb]{0,0,0}%
+\special{pa -394 -20}\special{pa -394 20}%
+\special{fp}%
+}%
+\settowidth{\Width}{$-1$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$-1$}\settodepth{\Depth}{$-1$}\setlength{\Height}{-\Height}%
+\put(-1.0000000,-0.1000000){\hspace*{\Width}\raisebox{\Height}{$-1$}}%
+%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 394 -20}\special{pa 394 20}%
+\special{fp}%
+}%
+\settowidth{\Width}{$1$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$1$}\settodepth{\Depth}{$1$}\setlength{\Height}{-\Height}%
+\put(1.0000000,-0.1000000){\hspace*{\Width}\raisebox{\Height}{$1$}}%
+%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 787 -20}\special{pa 787 20}%
+\special{fp}%
+}%
+\settowidth{\Width}{$2$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$2$}\settodepth{\Depth}{$2$}\setlength{\Height}{-\Height}%
+\put(2.0000000,-0.1000000){\hspace*{\Width}\raisebox{\Height}{$2$}}%
+%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 1181 -20}\special{pa 1181 20}%
+\special{fp}%
+}%
+\settowidth{\Width}{$3$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$3$}\settodepth{\Depth}{$3$}\setlength{\Height}{-\Height}%
+\put(3.0000000,-0.1000000){\hspace*{\Width}\raisebox{\Height}{$3$}}%
+%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 1575 -20}\special{pa 1575 20}%
+\special{fp}%
+}%
+\settowidth{\Width}{$4$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$4$}\settodepth{\Depth}{$4$}\setlength{\Height}{-\Height}%
+\put(4.0000000,-0.1000000){\hspace*{\Width}\raisebox{\Height}{$4$}}%
+%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 1969 -20}\special{pa 1969 20}%
+\special{fp}%
+}%
+\settowidth{\Width}{$5$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$5$}\settodepth{\Depth}{$5$}\setlength{\Height}{-\Height}%
+\put(5.0000000,-0.1000000){\hspace*{\Width}\raisebox{\Height}{$5$}}%
+%
+\special{pa -2165 -0}\special{pa 2165 -0}%
+\special{fp}%
+\special{pa 0 394}\special{pa 0 -394}%
+\special{fp}%
+\settowidth{\Width}{$x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(5.5500000,0.0000000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{\Depth}%
+\put(0.0000000,1.0500000){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+\settowidth{\Width}{O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(-0.0500000,-0.0500000){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/htickmark01.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/htickmark01.tex
new file mode 100644
index 0000000000..b464d29985
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/htickmark01.tex
@@ -0,0 +1,72 @@
+%%% /Users/Hannya/Desktop/KeTCindy/fig/htickmark01.tex
+%%% Generator=template1basic.cdy
+{\unitlength=6mm%
+\begin{picture}%
+(5.75,1.47)(-0.74,-0.71)%
+\special{pn 8}%
+%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 236 -20}\special{pa 236 20}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{$1$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$1$}\settodepth{\Depth}{$1$}\setlength{\Height}{-\Height}%
+\put(1.0000000,-0.1666667){\hspace*{\Width}\raisebox{\Height}{$1$}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 472 -20}\special{pa 472 20}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{$2$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$2$}\settodepth{\Depth}{$2$}\setlength{\Height}{\Depth}%
+\put(2.0000000,0.1666667){\hspace*{\Width}\raisebox{\Height}{$2$}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 709 -20}\special{pa 709 20}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{$3$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$3$}\settodepth{\Depth}{$3$}\setlength{\Height}{-\Height}%
+\put(3.0833333,-0.0833333){\hspace*{\Width}\raisebox{\Height}{$3$}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 945 -20}\special{pa 945 20}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{$4$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$4$}\settodepth{\Depth}{$4$}\setlength{\Height}{-\Height}%
+\put(4.0000000,-0.1666667){\hspace*{\Width}\raisebox{\Height}{$4$}}%
+%
+}%
+\special{pa -175 -0}\special{pa 1183 -0}%
+\special{fp}%
+\special{pa 0 168}\special{pa 0 -180}%
+\special{fp}%
+\settowidth{\Width}{$x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(5.0933333,0.0000000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{\Depth}%
+\put(0.0000000,0.8433333){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+\settowidth{\Width}{O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(-0.0833333,-0.0833333){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/hyper1.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/hyper1.tex
new file mode 100644
index 0000000000..bce4b6c593
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/hyper1.tex
@@ -0,0 +1,145 @@
+%%% fig.tex 2015-8-10 11:14
+%%% fig.sce 2015-8-10 11:14
+{\unitlength=8mm%
+\begin{picture}%
+( 7.00000, 5.00000)( -3.50000, -2.50000)%
+\special{pn 8}%
+%
+\special{pa 908 787}\special{pa 862 734}\special{pa 791 650}\special{pa 728 573}\special{pa 673 502}%
+\special{pa 625 436}\special{pa 584 374}\special{pa 548 317}\special{pa 519 263}\special{pa 494 211}%
+\special{pa 475 162}\special{pa 461 115}\special{pa 452 68}\special{pa 447 23}\special{pa 447 -23}%
+\special{pa 452 -68}\special{pa 461 -115}\special{pa 475 -162}\special{pa 494 -211}%
+\special{pa 519 -263}\special{pa 548 -317}\special{pa 584 -374}\special{pa 625 -436}%
+\special{pa 673 -502}\special{pa 728 -573}\special{pa 791 -650}\special{pa 862 -734}%
+\special{pa 908 -787}%
+\special{fp}%
+\special{pa -908 787}\special{pa -862 734}\special{pa -791 650}\special{pa -728 573}%
+\special{pa -673 502}\special{pa -625 436}\special{pa -584 374}\special{pa -548 317}%
+\special{pa -519 263}\special{pa -494 211}\special{pa -475 162}\special{pa -461 115}%
+\special{pa -452 68}\special{pa -447 23}\special{pa -447 -23}\special{pa -452 -68}%
+\special{pa -461 -115}\special{pa -475 -162}\special{pa -494 -211}\special{pa -519 -263}%
+\special{pa -548 -317}\special{pa -584 -374}\special{pa -625 -436}\special{pa -673 -502}%
+\special{pa -728 -573}\special{pa -791 -650}\special{pa -862 -734}\special{pa -908 -787}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 796 -790}\special{pa 790 -785}\special{fp}\special{pa 768 -763}\special{pa 762 -757}\special{fp}%
+\special{pa 740 -735}\special{pa 734 -729}\special{fp}\special{pa 712 -707}\special{pa 707 -702}\special{fp}%
+\special{pa 685 -680}\special{pa 679 -674}\special{fp}\special{pa 657 -652}\special{pa 651 -646}\special{fp}%
+\special{pa 629 -624}\special{pa 623 -619}\special{fp}\special{pa 601 -597}\special{pa 595 -591}\special{fp}%
+\special{pa 573 -569}\special{pa 568 -564}\special{fp}\special{pa 545 -542}\special{pa 540 -536}\special{fp}%
+\special{pa 518 -514}\special{pa 512 -508}\special{fp}\special{pa 490 -486}\special{pa 484 -481}\special{fp}%
+\special{pa 462 -459}\special{pa 456 -453}\special{fp}\special{pa 434 -431}\special{pa 428 -425}\special{fp}%
+\special{pa 406 -403}\special{pa 401 -398}\special{fp}\special{pa 378 -376}\special{pa 373 -370}\special{fp}%
+\special{pa 351 -348}\special{pa 345 -343}\special{fp}\special{pa 323 -321}\special{pa 317 -315}\special{fp}%
+\special{pa 295 -293}\special{pa 289 -287}\special{fp}\special{pa 267 -265}\special{pa 261 -260}\special{fp}%
+\special{pa 239 -238}\special{pa 234 -232}\special{fp}\special{pa 212 -210}\special{pa 206 -204}\special{fp}%
+\special{pa 184 -182}\special{pa 178 -177}\special{fp}\special{pa 156 -155}\special{pa 150 -149}\special{fp}%
+\special{pa 128 -127}\special{pa 122 -122}\special{fp}\special{pa 100 -100}\special{pa 95 -94}\special{fp}%
+\special{pa 72 -72}\special{pa 67 -66}\special{fp}\special{pa 45 -44}\special{pa 39 -39}\special{fp}%
+\special{pa 17 -17}\special{pa 11 -11}\special{fp}\special{pa -11 11}\special{pa -17 17}\special{fp}%
+\special{pa -39 39}\special{pa -45 44}\special{fp}\special{pa -67 66}\special{pa -72 72}\special{fp}%
+\special{pa -95 94}\special{pa -100 100}\special{fp}\special{pa -122 122}\special{pa -128 127}\special{fp}%
+\special{pa -150 149}\special{pa -156 155}\special{fp}\special{pa -178 177}\special{pa -184 182}\special{fp}%
+\special{pa -206 204}\special{pa -212 210}\special{fp}\special{pa -234 232}\special{pa -239 238}\special{fp}%
+\special{pa -261 260}\special{pa -267 265}\special{fp}\special{pa -289 287}\special{pa -295 293}\special{fp}%
+\special{pa -317 315}\special{pa -323 321}\special{fp}\special{pa -345 343}\special{pa -351 348}\special{fp}%
+\special{pa -373 370}\special{pa -378 376}\special{fp}\special{pa -401 398}\special{pa -406 403}\special{fp}%
+\special{pa -428 425}\special{pa -434 431}\special{fp}\special{pa -456 453}\special{pa -462 459}\special{fp}%
+\special{pa -484 481}\special{pa -490 486}\special{fp}\special{pa -512 508}\special{pa -518 514}\special{fp}%
+\special{pa -540 536}\special{pa -545 542}\special{fp}\special{pa -568 564}\special{pa -573 569}\special{fp}%
+\special{pa -595 591}\special{pa -601 597}\special{fp}\special{pa -623 619}\special{pa -629 624}\special{fp}%
+\special{pa -651 646}\special{pa -657 652}\special{fp}\special{pa -679 674}\special{pa -685 680}\special{fp}%
+\special{pa -707 702}\special{pa -712 707}\special{fp}\special{pa -734 729}\special{pa -740 735}\special{fp}%
+\special{pa -762 757}\special{pa -768 763}\special{fp}\special{pa -790 785}\special{pa -796 790}\special{fp}%
+\special{pn 8}%
+\special{pa -796 -790}\special{pa -790 -785}\special{fp}\special{pa -768 -763}\special{pa -762 -757}\special{fp}%
+\special{pa -740 -735}\special{pa -734 -729}\special{fp}\special{pa -712 -707}\special{pa -707 -702}\special{fp}%
+\special{pa -685 -680}\special{pa -679 -674}\special{fp}\special{pa -657 -652}\special{pa -651 -646}\special{fp}%
+\special{pa -629 -624}\special{pa -623 -619}\special{fp}\special{pa -601 -597}\special{pa -595 -591}\special{fp}%
+\special{pa -573 -569}\special{pa -568 -564}\special{fp}\special{pa -545 -542}\special{pa -540 -536}\special{fp}%
+\special{pa -518 -514}\special{pa -512 -508}\special{fp}\special{pa -490 -486}\special{pa -484 -481}\special{fp}%
+\special{pa -462 -459}\special{pa -456 -453}\special{fp}\special{pa -434 -431}\special{pa -428 -425}\special{fp}%
+\special{pa -406 -403}\special{pa -401 -398}\special{fp}\special{pa -378 -376}\special{pa -373 -370}\special{fp}%
+\special{pa -351 -348}\special{pa -345 -343}\special{fp}\special{pa -323 -321}\special{pa -317 -315}\special{fp}%
+\special{pa -295 -293}\special{pa -289 -287}\special{fp}\special{pa -267 -265}\special{pa -261 -260}\special{fp}%
+\special{pa -239 -238}\special{pa -234 -232}\special{fp}\special{pa -212 -210}\special{pa -206 -204}\special{fp}%
+\special{pa -184 -182}\special{pa -178 -177}\special{fp}\special{pa -156 -155}\special{pa -150 -149}\special{fp}%
+\special{pa -128 -127}\special{pa -122 -122}\special{fp}\special{pa -100 -100}\special{pa -95 -94}\special{fp}%
+\special{pa -72 -72}\special{pa -67 -66}\special{fp}\special{pa -45 -44}\special{pa -39 -39}\special{fp}%
+\special{pa -17 -17}\special{pa -11 -11}\special{fp}\special{pa 11 11}\special{pa 17 17}\special{fp}%
+\special{pa 39 39}\special{pa 45 44}\special{fp}\special{pa 67 66}\special{pa 72 72}\special{fp}%
+\special{pa 95 94}\special{pa 100 100}\special{fp}\special{pa 122 122}\special{pa 128 127}\special{fp}%
+\special{pa 150 149}\special{pa 156 155}\special{fp}\special{pa 178 177}\special{pa 184 182}\special{fp}%
+\special{pa 206 204}\special{pa 212 210}\special{fp}\special{pa 234 232}\special{pa 239 238}\special{fp}%
+\special{pa 261 260}\special{pa 267 265}\special{fp}\special{pa 289 287}\special{pa 295 293}\special{fp}%
+\special{pa 317 315}\special{pa 323 321}\special{fp}\special{pa 345 343}\special{pa 351 348}\special{fp}%
+\special{pa 373 370}\special{pa 378 376}\special{fp}\special{pa 401 398}\special{pa 406 403}\special{fp}%
+\special{pa 428 425}\special{pa 434 431}\special{fp}\special{pa 456 453}\special{pa 462 459}\special{fp}%
+\special{pa 484 481}\special{pa 490 486}\special{fp}\special{pa 512 508}\special{pa 518 514}\special{fp}%
+\special{pa 540 536}\special{pa 545 542}\special{fp}\special{pa 568 564}\special{pa 573 569}\special{fp}%
+\special{pa 595 591}\special{pa 601 597}\special{fp}\special{pa 623 619}\special{pa 629 624}\special{fp}%
+\special{pa 651 646}\special{pa 657 652}\special{fp}\special{pa 679 674}\special{pa 685 680}\special{fp}%
+\special{pa 707 702}\special{pa 712 707}\special{fp}\special{pa 734 729}\special{pa 740 735}\special{fp}%
+\special{pa 762 757}\special{pa 768 763}\special{fp}\special{pa 790 785}\special{pa 796 790}\special{fp}%
+\special{pn 8}%
+\special{pa -619 -11}\special{pa -626 -15}\special{pa -634 -15}\special{pa -641 -11}%
+\special{pa -645 -4}\special{pa -645 4}\special{pa -641 11}\special{pa -634 15}\special{pa -626 15}%
+\special{pa -619 11}\special{pa -615 4}\special{pa -615 -4}\special{pa -619 -11}\special{sh 1}\special{fp}%
+\special{pa 641 -11}\special{pa 634 -15}\special{pa 626 -15}\special{pa 619 -11}\special{pa 615 -4}%
+\special{pa 615 4}\special{pa 619 11}\special{pa 626 15}\special{pa 634 15}\special{pa 641 11}%
+\special{pa 645 4}\special{pa 645 -4}\special{pa 641 -11}\special{sh 1}\special{fp}%
+\special{pa 579 -360}\special{pa 571 -364}\special{pa 563 -364}\special{pa 556 -360}%
+\special{pa 552 -353}\special{pa 552 -345}\special{pa 556 -337}\special{pa 563 -333}%
+\special{pa 571 -333}\special{pa 579 -337}\special{pa 583 -345}\special{pa 583 -353}%
+\special{pa 579 -360}\special{sh 1}\special{fp}%
+\settowidth{\Width}{A}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{A}\settodepth{\Depth}{A}\setlength{\Height}{-\Height}%
+\put(-2.0000,-0.1500){\hspace*{\Width}\raisebox{\Height}{A}}%
+%
+%
+\settowidth{\Width}{B}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{B}\settodepth{\Depth}{B}\setlength{\Height}{-\Height}%
+\put(2.0000,-0.1500){\hspace*{\Width}\raisebox{\Height}{B}}%
+%
+%
+\settowidth{\Width}{C}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{C}\settodepth{\Depth}{C}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(1.9514,1.1069){\hspace*{\Width}\raisebox{\Height}{C}}%
+%
+%
+\special{pn 8}%
+\special{pa -1102 0}\special{pa 1102 0}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 1027 24}\special{pa 1102 0}\special{pa 1027 -24}\special{pa 1027 0}\special{pa 1027 24}%
+\special{sh 1}\special{ip}%
+\special{pn 8}%
+\special{pa 1027 24}\special{pa 1102 0}\special{pa 1027 -24}\special{pa 1027 0}\special{pa 1027 24}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 8}%
+\special{pa 0 787}\special{pa 0 -787}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 24 -713}\special{pa 0 -787}\special{pa -24 -713}\special{pa 0 -713}\special{pa 24 -713}%
+\special{sh 1}\special{ip}%
+\special{pn 8}%
+\special{pa 24 -713}\special{pa 0 -787}\special{pa -24 -713}\special{pa 0 -713}\special{pa 24 -713}%
+\special{fp}%
+\special{pn 8}%
+\settowidth{\Width}{$x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(3.5500,0.0000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{\Depth}%
+\put(0.0000,2.5500){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+%
+\settowidth{\Width}{O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(-0.0500,-0.0500){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/hyperbola-by-foci.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/hyperbola-by-foci.pdf
new file mode 100644
index 0000000000..8b719eefcd
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/hyperbola-by-foci.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/implicit.cdy b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/implicit.cdy
new file mode 100644
index 0000000000..9181ea8adc
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/implicit.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/implicit.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/implicit.tex
new file mode 100644
index 0000000000..012be56a1d
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/implicit.tex
@@ -0,0 +1,94 @@
+%%% /Users/takatoosetsuo/Dropbox/kettoday/0717HtickImpli/fig/implicit.tex
+%%% Generator=implicit.cdy
+{\unitlength=1cm%
+\begin{picture}%
+(5,5)(-2.5,-2.5)%
+\special{pn 8}%
+%
+\special{pa 216 -535}\special{pa 220 -534}\special{pa 252 -527}\special{pa 283 -519}%
+\special{pa 315 -510}\special{pa 334 -504}\special{pa 346 -500}\special{pa 378 -488}%
+\special{pa 409 -475}\special{pa 416 -472}\special{pa 441 -461}\special{pa 472 -445}%
+\special{pa 481 -441}\special{pa 504 -428}\special{pa 534 -409}\special{pa 535 -408}%
+\special{pa 567 -386}\special{pa 578 -378}\special{pa 598 -362}\special{pa 616 -346}%
+\special{pa 630 -334}\special{pa 649 -315}\special{pa 661 -302}\special{pa 678 -283}%
+\special{pa 693 -264}\special{pa 702 -252}\special{pa 723 -220}\special{pa 724 -218}%
+\special{pa 740 -189}\special{pa 755 -157}\special{pa 756 -156}\special{pa 767 -126}%
+\special{pa 776 -94}\special{pa 782 -63}\special{pa 786 -31}\special{pa 787 -0}%
+\special{pa 786 31}\special{pa 782 63}\special{pa 776 94}\special{pa 767 126}%
+\special{pa 756 156}\special{pa 755 157}\special{pa 740 189}\special{pa 724 218}%
+\special{pa 723 220}\special{pa 702 252}\special{pa 693 264}\special{pa 678 283}%
+\special{pa 661 302}\special{pa 649 315}\special{pa 630 334}\special{pa 616 346}%
+\special{pa 598 362}\special{pa 578 378}\special{pa 567 386}\special{pa 535 408}%
+\special{pa 534 409}\special{pa 504 428}\special{pa 481 441}\special{pa 472 445}%
+\special{pa 441 461}\special{pa 416 472}\special{pa 409 475}\special{pa 378 488}%
+\special{pa 346 500}\special{pa 334 504}\special{pa 315 510}\special{pa 283 519}%
+\special{pa 252 527}\special{pa 220 534}\special{pa 216 535}\special{pa 189 540}%
+\special{pa 157 545}\special{pa 126 549}\special{pa 94 553}\special{pa 63 555}%
+\special{pa 31 556}\special{pa 0 557}\special{pa -31 556}\special{pa -63 555}%
+\special{pa -94 553}\special{pa -126 549}\special{pa -157 545}\special{pa -189 540}%
+\special{pa -216 535}\special{pa -220 534}\special{pa -252 527}\special{pa -283 519}%
+\special{pa -315 510}\special{pa -334 504}\special{pa -346 500}\special{pa -378 488}%
+\special{pa -409 475}\special{pa -416 472}\special{pa -441 461}\special{pa -472 445}%
+\special{pa -481 441}\special{pa -504 428}\special{pa -534 409}\special{pa -535 408}%
+\special{pa -567 386}\special{pa -578 378}\special{pa -598 362}\special{pa -616 346}%
+\special{pa -630 334}\special{pa -649 315}\special{pa -661 302}\special{pa -678 283}%
+\special{pa -693 264}\special{pa -702 252}\special{pa -723 220}\special{pa -724 218}%
+\special{pa -740 189}\special{pa -755 157}\special{pa -756 156}\special{pa -767 126}%
+\special{pa -776 94}\special{pa -782 63}\special{pa -786 31}\special{pa -787 -0}%
+\special{pa -786 -31}\special{pa -782 -63}\special{pa -776 -94}\special{pa -767 -126}%
+\special{pa -756 -156}\special{pa -755 -157}\special{pa -740 -189}\special{pa -724 -218}%
+\special{pa -723 -220}\special{pa -702 -252}\special{pa -693 -264}\special{pa -678 -283}%
+\special{pa -661 -302}\special{pa -649 -315}\special{pa -630 -334}\special{pa -616 -346}%
+\special{pa -598 -362}\special{pa -578 -378}\special{pa -567 -386}\special{pa -535 -408}%
+\special{pa -534 -409}\special{pa -504 -428}\special{pa -481 -441}\special{pa -472 -445}%
+\special{pa -441 -461}\special{pa -416 -472}\special{pa -409 -475}\special{pa -378 -488}%
+\special{pa -346 -500}\special{pa -334 -504}\special{pa -315 -510}\special{pa -283 -519}%
+\special{pa -252 -527}\special{pa -220 -534}\special{pa -216 -535}\special{pa -189 -540}%
+\special{pa -157 -545}\special{pa -126 -549}\special{pa -94 -553}\special{pa -63 -555}%
+\special{pa -31 -556}\special{pa 0 -557}\special{pa 31 -556}\special{pa 63 -555}%
+\special{pa 94 -553}\special{pa 126 -549}\special{pa 157 -545}\special{pa 189 -540}%
+\special{pa 216 -535}%
+\special{fp}%
+\special{pa 330 505}\special{pa 784 51}%
+\special{fp}%
+\special{pa 150 546}\special{pa 778 -82}%
+\special{fp}%
+\special{pa 0 557}\special{pa 742 -185}%
+\special{fp}%
+\special{pa -131 549}\special{pa 688 -270}%
+\special{fp}%
+\special{pa -249 528}\special{pa 621 -342}%
+\special{fp}%
+\special{pa -357 496}\special{pa 542 -403}%
+\special{fp}%
+\special{pa -454 454}\special{pa 454 -454}%
+\special{fp}%
+\special{pa -542 403}\special{pa 357 -496}%
+\special{fp}%
+\special{pa -621 342}\special{pa 249 -528}%
+\special{fp}%
+\special{pa -688 270}\special{pa 131 -549}%
+\special{fp}%
+\special{pa -742 185}\special{pa -0 -557}%
+\special{fp}%
+\special{pa -778 82}\special{pa -150 -546}%
+\special{fp}%
+\special{pa -784 -51}\special{pa -330 -505}%
+\special{fp}%
+\special{pa -984 -0}\special{pa 984 -0}%
+\special{fp}%
+\special{pa 0 984}\special{pa 0 -984}%
+\special{fp}%
+\settowidth{\Width}{$x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.5500000,0.0000000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{\Depth}%
+\put(0.0000000,2.5500000){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+\settowidth{\Width}{O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(-0.0500000,-0.0500000){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/implicit1.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/implicit1.tex
new file mode 100644
index 0000000000..5022a68702
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/implicit1.tex
@@ -0,0 +1,62 @@
+%%% /Users/Hannya/Desktop/fig/implicit1.tex
+%%% Generator=hachtest.cdy
+{\unitlength=8mm%
+\begin{picture}%
+(6,4)(-3,-2)%
+\special{pn 8}%
+%
+\special{pa 418 -454}\special{pa 454 -442}\special{pa 489 -428}\special{pa 491 -427}%
+\special{pa 529 -408}\special{pa 536 -403}\special{pa 567 -382}\special{pa 572 -378}%
+\special{pa 599 -353}\special{pa 605 -347}\special{pa 621 -328}\special{pa 638 -302}%
+\special{pa 643 -293}\special{pa 651 -277}\special{pa 660 -252}\special{pa 667 -227}%
+\special{pa 671 -202}\special{pa 673 -176}\special{pa 673 -151}\special{pa 670 -126}%
+\special{pa 666 -101}\special{pa 659 -76}\special{pa 651 -50}\special{pa 643 -27}%
+\special{pa 642 -25}\special{pa 630 -0}\special{pa 616 25}\special{pa 605 45}%
+\special{pa 601 50}\special{pa 584 76}\special{pa 567 99}\special{pa 565 101}%
+\special{pa 544 126}\special{pa 529 143}\special{pa 522 151}\special{pa 497 176}%
+\special{pa 491 182}\special{pa 470 202}\special{pa 454 216}\special{pa 440 227}%
+\special{pa 416 246}\special{pa 408 252}\special{pa 378 274}\special{pa 373 277}%
+\special{pa 340 299}\special{pa 335 302}\special{pa 302 322}\special{pa 293 328}%
+\special{pa 265 343}\special{pa 246 353}\special{pa 227 363}\special{pa 194 378}%
+\special{pa 189 380}\special{pa 151 396}\special{pa 133 403}\special{pa 113 411}%
+\special{pa 76 424}\special{pa 60 428}\special{pa 38 435}\special{pa 0 445}%
+\special{pa -35 454}\special{pa -38 454}\special{pa -76 461}\special{pa -113 467}%
+\special{pa -151 472}\special{pa -189 475}\special{pa -227 476}\special{pa -265 476}%
+\special{pa -302 473}\special{pa -340 469}\special{pa -378 463}\special{pa -416 454}%
+\special{pa -418 454}\special{pa -454 442}\special{pa -489 428}\special{pa -491 427}%
+\special{pa -529 408}\special{pa -536 403}\special{pa -567 382}\special{pa -572 378}%
+\special{pa -599 353}\special{pa -605 347}\special{pa -621 328}\special{pa -638 302}%
+\special{pa -643 293}\special{pa -651 277}\special{pa -660 252}\special{pa -667 227}%
+\special{pa -671 202}\special{pa -673 176}\special{pa -673 151}\special{pa -670 126}%
+\special{pa -666 101}\special{pa -659 76}\special{pa -651 50}\special{pa -643 27}%
+\special{pa -642 25}\special{pa -630 -0}\special{pa -616 -25}\special{pa -605 -45}%
+\special{pa -601 -50}\special{pa -584 -76}\special{pa -567 -99}\special{pa -565 -101}%
+\special{pa -544 -126}\special{pa -529 -143}\special{pa -522 -151}\special{pa -497 -176}%
+\special{pa -491 -182}\special{pa -470 -202}\special{pa -454 -216}\special{pa -440 -227}%
+\special{pa -416 -246}\special{pa -408 -252}\special{pa -378 -274}\special{pa -373 -277}%
+\special{pa -340 -299}\special{pa -335 -302}\special{pa -302 -322}\special{pa -293 -328}%
+\special{pa -265 -343}\special{pa -246 -353}\special{pa -227 -363}\special{pa -194 -378}%
+\special{pa -189 -380}\special{pa -151 -396}\special{pa -133 -403}\special{pa -113 -411}%
+\special{pa -76 -424}\special{pa -60 -428}\special{pa -38 -435}\special{pa 0 -445}%
+\special{pa 35 -454}\special{pa 38 -454}\special{pa 76 -461}\special{pa 113 -467}%
+\special{pa 151 -472}\special{pa 189 -475}\special{pa 227 -476}\special{pa 265 -476}%
+\special{pa 302 -473}\special{pa 340 -469}\special{pa 378 -463}\special{pa 416 -454}%
+\special{pa 418 -454}%
+\special{fp}%
+\special{pa -945 -0}\special{pa 945 -0}%
+\special{fp}%
+\special{pa 0 630}\special{pa 0 -630}%
+\special{fp}%
+\settowidth{\Width}{$x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(3.0625000,0.0000000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{\Depth}%
+\put(0.0000000,2.0625000){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+\settowidth{\Width}{O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(-0.0625000,-0.0625000){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/incenter01.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/incenter01.pdf
new file mode 100644
index 0000000000..3d621fb105
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/incenter01.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/incenter02.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/incenter02.pdf
new file mode 100644
index 0000000000..6b9356b8a2
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/incenter02.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/incenter02E.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/incenter02E.pdf
new file mode 100644
index 0000000000..ef00e83c37
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/incenter02E.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/incenter03.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/incenter03.pdf
new file mode 100644
index 0000000000..40687139e2
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/incenter03.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/intersectcrvs1.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/intersectcrvs1.tex
new file mode 100644
index 0000000000..631e8c6f49
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/intersectcrvs1.tex
@@ -0,0 +1,83 @@
+%%% Intersectcrvs1.tex 2014-11-9 15:5
+%%% Intersectcrvs2.sce 2014-11-9 15:0
+{\unitlength=0.8cm%
+\begin{picture}%
+( 6.00000, 4.00000)( -2.00000, -2.00000)%
+\special{pn 8}%
+%
+\special{pa -105 102}\special{pa -112 98}\special{pa -121 98}\special{pa -128 102}%
+\special{pa -132 109}\special{pa -132 117}\special{pa -128 125}\special{pa -121 129}%
+\special{pa -112 129}\special{pa -105 125}\special{pa -101 117}\special{pa -101 109}%
+\special{pa -105 102}\special{sh 1}\special{fp}%
+\special{pa 682 -279}\special{pa 675 -283}\special{pa 667 -283}\special{pa 660 -279}%
+\special{pa 656 -272}\special{pa 656 -264}\special{pa 660 -257}\special{pa 667 -253}%
+\special{pa 675 -253}\special{pa 682 -257}\special{pa 686 -264}\special{pa 686 -272}%
+\special{pa 682 -279}\special{sh 1}\special{fp}%
+\settowidth{\Width}{P}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{P}\settodepth{\Depth}{P}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-0.4700,-0.3600){\hspace*{\Width}\raisebox{\Height}{P}}%
+%
+%
+\settowidth{\Width}{Q}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{Q}\settodepth{\Depth}{Q}\setlength{\Height}{\Depth}%
+\put(2.1800,0.9000){\hspace*{\Width}\raisebox{\Height}{Q}}%
+%
+%
+\special{pa -630 286}\special{pa -611 294}\special{pa -592 300}\special{pa -573 305}%
+\special{pa -554 309}\special{pa -534 312}\special{pa -515 314}\special{pa -496 315}%
+\special{pa -477 314}\special{pa -458 313}\special{pa -439 310}\special{pa -420 306}%
+\special{pa -401 301}\special{pa -382 295}\special{pa -363 288}\special{pa -344 279}%
+\special{pa -325 270}\special{pa -305 260}\special{pa -286 248}\special{pa -267 236}%
+\special{pa -248 223}\special{pa -229 209}\special{pa -210 195}\special{pa -191 179}%
+\special{pa -172 163}\special{pa -153 147}\special{pa -134 130}\special{pa -115 112}%
+\special{pa -95 94}\special{pa -76 76}\special{pa -57 57}\special{pa -38 38}\special{pa -19 19}%
+\special{pa 0 0}\special{pa 19 -19}\special{pa 38 -38}\special{pa 57 -57}\special{pa 76 -76}%
+\special{pa 95 -94}\special{pa 115 -112}\special{pa 134 -130}\special{pa 153 -147}%
+\special{pa 172 -163}\special{pa 191 -179}\special{pa 210 -195}\special{pa 229 -209}%
+\special{pa 248 -223}\special{pa 267 -236}\special{pa 286 -248}\special{pa 305 -260}%
+\special{pa 325 -270}\special{pa 344 -279}\special{pa 363 -288}\special{pa 382 -295}%
+\special{pa 401 -301}\special{pa 420 -306}\special{pa 439 -310}\special{pa 458 -313}%
+\special{pa 477 -314}\special{pa 496 -315}\special{pa 515 -314}\special{pa 534 -312}%
+\special{pa 554 -309}\special{pa 573 -305}\special{pa 592 -300}\special{pa 611 -294}%
+\special{pa 630 -286}\special{pa 649 -278}\special{pa 668 -268}\special{pa 687 -258}%
+\special{pa 706 -247}\special{pa 725 -234}\special{pa 744 -221}\special{pa 764 -207}%
+\special{pa 783 -192}\special{pa 802 -177}\special{pa 821 -161}\special{pa 840 -144}%
+\special{pa 859 -127}\special{pa 878 -109}\special{pa 897 -91}\special{pa 916 -73}%
+\special{pa 935 -54}\special{pa 954 -35}\special{pa 974 -16}\special{pa 993 3}\special{pa 1012 22}%
+\special{pa 1031 41}\special{pa 1050 60}\special{pa 1069 79}\special{pa 1088 97}\special{pa 1107 115}%
+\special{pa 1126 132}\special{pa 1145 150}\special{pa 1164 166}\special{pa 1183 182}%
+\special{pa 1203 197}\special{pa 1222 212}\special{pa 1241 225}\special{pa 1260 238}%
+\special{fp}%
+\special{pa 760 0}\special{pa 757 -56}\special{pa 746 -111}\special{pa 729 -164}\special{pa 705 -215}%
+\special{pa 675 -262}\special{pa 640 -305}\special{pa 599 -343}\special{pa 554 -376}%
+\special{pa 505 -403}\special{pa 453 -424}\special{pa 398 -438}\special{pa 343 -445}%
+\special{pa 287 -445}\special{pa 231 -438}\special{pa 177 -424}\special{pa 125 -403}%
+\special{pa 76 -376}\special{pa 31 -343}\special{pa -10 -305}\special{pa -45 -262}%
+\special{pa -75 -215}\special{pa -99 -164}\special{pa -116 -111}\special{pa -127 -56}%
+\special{pa -130 0}\special{pa -127 56}\special{pa -116 111}\special{pa -99 164}\special{pa -75 215}%
+\special{pa -45 262}\special{pa -10 305}\special{pa 31 343}\special{pa 76 376}\special{pa 125 403}%
+\special{pa 177 424}\special{pa 231 438}\special{pa 287 445}\special{pa 343 445}\special{pa 398 438}%
+\special{pa 453 424}\special{pa 505 403}\special{pa 554 376}\special{pa 599 343}\special{pa 640 305}%
+\special{pa 675 262}\special{pa 705 215}\special{pa 729 164}\special{pa 746 111}\special{pa 757 56}%
+\special{pa 760 0}%
+\special{fp}%
+\special{pa -630 0}\special{pa 1260 0}%
+\special{fp}%
+\special{pa 0 630}\special{pa 0 -630}%
+\special{fp}%
+\settowidth{\Width}{$x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.0500,0.0000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{\Depth}%
+\put(0.0000,2.0500){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+%
+\settowidth{\Width}{O}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(0.0500,-0.0500){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/intersectcrvs2.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/intersectcrvs2.tex
new file mode 100644
index 0000000000..4a15f46a6e
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/intersectcrvs2.tex
@@ -0,0 +1,83 @@
+%%% Intersectcrvs2.tex 2014-11-9 15:4
+%%% Intersectcrvs2.sce 2014-11-9 15:0
+{\unitlength=0.8cm%
+\begin{picture}%
+( 6.00000, 4.00000)( -2.00000, -2.00000)%
+\special{pn 8}%
+%
+\special{pa 682 -279}\special{pa 675 -283}\special{pa 667 -283}\special{pa 660 -279}%
+\special{pa 656 -272}\special{pa 656 -264}\special{pa 660 -257}\special{pa 667 -253}%
+\special{pa 675 -253}\special{pa 682 -257}\special{pa 686 -264}\special{pa 686 -272}%
+\special{pa 682 -279}\special{sh 1}\special{fp}%
+\special{pa -105 102}\special{pa -112 98}\special{pa -121 98}\special{pa -128 102}%
+\special{pa -132 109}\special{pa -132 117}\special{pa -128 125}\special{pa -121 129}%
+\special{pa -112 129}\special{pa -105 125}\special{pa -101 117}\special{pa -101 109}%
+\special{pa -105 102}\special{sh 1}\special{fp}%
+\settowidth{\Width}{P}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{P}\settodepth{\Depth}{P}\setlength{\Height}{\Depth}%
+\put(2.1800,0.9000){\hspace*{\Width}\raisebox{\Height}{P}}%
+%
+%
+\settowidth{\Width}{Q}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{Q}\settodepth{\Depth}{Q}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-0.4700,-0.3600){\hspace*{\Width}\raisebox{\Height}{Q}}%
+%
+%
+\special{pa -630 286}\special{pa -611 294}\special{pa -592 300}\special{pa -573 305}%
+\special{pa -554 309}\special{pa -534 312}\special{pa -515 314}\special{pa -496 315}%
+\special{pa -477 314}\special{pa -458 313}\special{pa -439 310}\special{pa -420 306}%
+\special{pa -401 301}\special{pa -382 295}\special{pa -363 288}\special{pa -344 279}%
+\special{pa -325 270}\special{pa -305 260}\special{pa -286 248}\special{pa -267 236}%
+\special{pa -248 223}\special{pa -229 209}\special{pa -210 195}\special{pa -191 179}%
+\special{pa -172 163}\special{pa -153 147}\special{pa -134 130}\special{pa -115 112}%
+\special{pa -95 94}\special{pa -76 76}\special{pa -57 57}\special{pa -38 38}\special{pa -19 19}%
+\special{pa 0 0}\special{pa 19 -19}\special{pa 38 -38}\special{pa 57 -57}\special{pa 76 -76}%
+\special{pa 95 -94}\special{pa 115 -112}\special{pa 134 -130}\special{pa 153 -147}%
+\special{pa 172 -163}\special{pa 191 -179}\special{pa 210 -195}\special{pa 229 -209}%
+\special{pa 248 -223}\special{pa 267 -236}\special{pa 286 -248}\special{pa 305 -260}%
+\special{pa 325 -270}\special{pa 344 -279}\special{pa 363 -288}\special{pa 382 -295}%
+\special{pa 401 -301}\special{pa 420 -306}\special{pa 439 -310}\special{pa 458 -313}%
+\special{pa 477 -314}\special{pa 496 -315}\special{pa 515 -314}\special{pa 534 -312}%
+\special{pa 554 -309}\special{pa 573 -305}\special{pa 592 -300}\special{pa 611 -294}%
+\special{pa 630 -286}\special{pa 649 -278}\special{pa 668 -268}\special{pa 687 -258}%
+\special{pa 706 -247}\special{pa 725 -234}\special{pa 744 -221}\special{pa 764 -207}%
+\special{pa 783 -192}\special{pa 802 -177}\special{pa 821 -161}\special{pa 840 -144}%
+\special{pa 859 -127}\special{pa 878 -109}\special{pa 897 -91}\special{pa 916 -73}%
+\special{pa 935 -54}\special{pa 954 -35}\special{pa 974 -16}\special{pa 993 3}\special{pa 1012 22}%
+\special{pa 1031 41}\special{pa 1050 60}\special{pa 1069 79}\special{pa 1088 97}\special{pa 1107 115}%
+\special{pa 1126 132}\special{pa 1145 150}\special{pa 1164 166}\special{pa 1183 182}%
+\special{pa 1203 197}\special{pa 1222 212}\special{pa 1241 225}\special{pa 1260 238}%
+\special{fp}%
+\special{pa 760 0}\special{pa 757 -56}\special{pa 746 -111}\special{pa 729 -164}\special{pa 705 -215}%
+\special{pa 675 -262}\special{pa 640 -305}\special{pa 599 -343}\special{pa 554 -376}%
+\special{pa 505 -403}\special{pa 453 -424}\special{pa 398 -438}\special{pa 343 -445}%
+\special{pa 287 -445}\special{pa 231 -438}\special{pa 177 -424}\special{pa 125 -403}%
+\special{pa 76 -376}\special{pa 31 -343}\special{pa -10 -305}\special{pa -45 -262}%
+\special{pa -75 -215}\special{pa -99 -164}\special{pa -116 -111}\special{pa -127 -56}%
+\special{pa -130 0}\special{pa -127 56}\special{pa -116 111}\special{pa -99 164}\special{pa -75 215}%
+\special{pa -45 262}\special{pa -10 305}\special{pa 31 343}\special{pa 76 376}\special{pa 125 403}%
+\special{pa 177 424}\special{pa 231 438}\special{pa 287 445}\special{pa 343 445}\special{pa 398 438}%
+\special{pa 453 424}\special{pa 505 403}\special{pa 554 376}\special{pa 599 343}\special{pa 640 305}%
+\special{pa 675 262}\special{pa 705 215}\special{pa 729 164}\special{pa 746 111}\special{pa 757 56}%
+\special{pa 760 0}%
+\special{fp}%
+\special{pa -630 0}\special{pa 1260 0}%
+\special{fp}%
+\special{pa 0 630}\special{pa 0 -630}%
+\special{fp}%
+\settowidth{\Width}{$x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.0500,0.0000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{\Depth}%
+\put(0.0000,2.0500){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+%
+\settowidth{\Width}{O}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(0.0500,-0.0500){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/intersection.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/intersection.pdf
new file mode 100644
index 0000000000..95e65b4d8e
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/intersection.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/intlog.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/intlog.tex
new file mode 100644
index 0000000000..6244c0a517
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/intlog.tex
@@ -0,0 +1,247 @@
+%%% test.tex 2014-11-26 19:58
+%%% test.sce 2014-11-26 19:58
+{\unitlength=5mm%
+\begin{picture}%
+( 12.71000, 6.84000)( -3.35000, -3.03000)%
+\special{pn 8}%
+%
+\special{pn 16}%
+\special{pa 90 153}\special{pa 91 152}\special{pa 101 132}\special{pa 111 113}\special{pa 121 97}%
+\special{pa 130 81}\special{pa 140 67}\special{pa 150 53}\special{pa 160 41}\special{pa 170 29}%
+\special{pa 180 18}\special{pa 190 7}\special{pa 200 -3}\special{pa 209 -12}\special{pa 219 -21}%
+\special{pa 229 -30}\special{pa 239 -38}\special{pa 249 -46}\special{pa 259 -54}\special{pa 269 -61}%
+\special{pa 279 -68}\special{pa 289 -75}\special{pa 298 -82}\special{pa 308 -88}\special{pa 318 -95}%
+\special{pa 328 -101}\special{pa 338 -106}\special{pa 348 -112}\special{pa 358 -118}%
+\special{pa 368 -123}\special{pa 377 -128}\special{pa 387 -133}\special{pa 397 -138}%
+\special{pa 407 -143}\special{pa 417 -148}\special{pa 427 -152}\special{pa 437 -157}%
+\special{pa 447 -161}\special{pa 457 -166}\special{pa 466 -170}\special{pa 476 -174}%
+\special{pa 486 -178}\special{pa 496 -182}\special{pa 506 -186}\special{pa 516 -190}%
+\special{pa 526 -193}\special{pa 536 -197}\special{pa 545 -201}\special{pa 555 -204}%
+\special{pa 565 -208}\special{pa 575 -211}\special{pa 585 -214}\special{pa 595 -218}%
+\special{pa 605 -221}\special{pa 615 -224}\special{pa 625 -227}\special{pa 634 -230}%
+\special{pa 644 -233}\special{pa 654 -236}\special{pa 664 -239}\special{pa 674 -242}%
+\special{pa 684 -245}\special{pa 694 -248}\special{pa 704 -251}\special{pa 713 -253}%
+\special{pa 723 -256}\special{pa 733 -259}\special{pa 743 -262}\special{pa 753 -264}%
+\special{pa 763 -267}\special{pa 773 -269}\special{pa 783 -272}\special{pa 793 -274}%
+\special{pa 802 -277}\special{pa 812 -279}\special{pa 822 -281}\special{pa 832 -284}%
+\special{pa 842 -286}\special{pa 852 -288}\special{pa 862 -291}\special{pa 872 -293}%
+\special{pa 881 -295}\special{pa 891 -297}\special{pa 901 -299}\special{pa 911 -302}%
+\special{pa 921 -304}\special{pa 931 -306}\special{pa 941 -308}\special{pa 945 -309}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 16}%
+\special{pa 90 153}\special{pa 91 152}\special{pa 101 132}\special{pa 111 113}\special{pa 121 97}%
+\special{pa 130 81}\special{pa 140 67}\special{pa 150 53}\special{pa 160 41}\special{pa 170 29}%
+\special{pa 180 18}\special{pa 190 7}\special{pa 197 0}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 91 154}\special{pa 91 0}\special{pa 945 0}\special{pa 945 -309}\special{pa 936 -307}%
+\special{pa 928 -305}\special{pa 919 -303}\special{pa 910 -301}\special{pa 902 -300}%
+\special{pa 893 -298}\special{pa 884 -296}\special{pa 876 -294}\special{pa 867 -292}%
+\special{pa 859 -290}\special{pa 850 -288}\special{pa 841 -286}\special{pa 833 -284}%
+\special{pa 824 -282}\special{pa 815 -280}\special{pa 807 -278}\special{pa 798 -276}%
+\special{pa 790 -273}\special{pa 781 -271}\special{pa 772 -269}\special{pa 764 -267}%
+\special{pa 755 -265}\special{pa 746 -262}\special{pa 738 -260}\special{pa 729 -258}%
+\special{pa 721 -255}\special{pa 712 -253}\special{pa 703 -251}\special{pa 695 -248}%
+\special{pa 686 -246}\special{pa 677 -243}\special{pa 669 -241}\special{pa 660 -238}%
+\special{pa 651 -236}\special{pa 643 -233}\special{pa 634 -230}\special{pa 626 -228}%
+\special{pa 617 -225}\special{pa 608 -222}\special{pa 600 -219}\special{pa 591 -216}%
+\special{pa 582 -214}\special{pa 574 -211}\special{pa 565 -208}\special{pa 557 -205}%
+\special{pa 548 -202}\special{pa 539 -198}\special{pa 531 -195}\special{pa 522 -192}%
+\special{pa 513 -189}\special{pa 505 -185}\special{pa 496 -182}\special{pa 488 -179}%
+\special{pa 479 -175}\special{pa 470 -171}\special{pa 462 -168}\special{pa 453 -164}%
+\special{pa 444 -160}\special{pa 436 -156}\special{pa 427 -152}\special{pa 418 -148}%
+\special{pa 410 -144}\special{pa 401 -140}\special{pa 393 -136}\special{pa 384 -132}%
+\special{pa 375 -127}\special{pa 367 -122}\special{pa 358 -118}\special{pa 349 -113}%
+\special{pa 341 -108}\special{pa 332 -103}\special{pa 324 -98}\special{pa 315 -92}%
+\special{pa 306 -87}\special{pa 298 -81}\special{pa 289 -76}\special{pa 280 -70}\special{pa 272 -63}%
+\special{pa 263 -57}\special{pa 255 -51}\special{pa 246 -44}\special{pa 237 -37}\special{pa 229 -29}%
+\special{pa 220 -22}\special{pa 211 -14}\special{pa 203 -6}\special{pa 194 3}\special{pa 185 12}%
+\special{pa 177 21}\special{pa 168 31}\special{pa 160 41}\special{pa 151 52}\special{pa 142 64}%
+\special{pa 134 76}\special{pa 125 89}\special{pa 116 103}\special{pa 108 119}\special{pa 99 135}%
+\special{pa 91 153}\special{pa 91 154}\special{sh 0.2}\special{ip}%
+\special{pn 8}%
+\special{pa 787 -591}\special{pa 518 -154}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 536 -230}\special{pa 518 -154}\special{pa 578 -204}\special{pa 557 -217}%
+\special{pa 536 -230}\special{sh 1}\special{ip}%
+\special{pn 8}%
+\special{pa 536 -230}\special{pa 518 -154}\special{pa 578 -204}\special{pa 557 -217}%
+\special{pa 536 -230}%
+\special{fp}%
+\special{pn 8}%
+\settowidth{\Width}{$\displaystyle \int_a^b \log x\,dx=3.55$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$\displaystyle \int_a^b \log x\,dx=3.55$}\settodepth{\Depth}{$\displaystyle \int_a^b \log x\,dx=3.55$}\setlength{\Height}{\Depth}%
+\put(4.2500,3.0500){\hspace*{\Width}\raisebox{\Height}{$\displaystyle \int_a^b \log x\,dx=3.55$}}%
+%
+%
+\settowidth{\Width}{$(a=0.46,\; b=4.8)$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$(a=0.46,\; b=4.8)$}\settodepth{\Depth}{$(a=0.46,\; b=4.8)$}\setlength{\Height}{-\Height}%
+\put(4.1500,2.9500){\hspace*{\Width}\raisebox{\Height}{$(a=0.46,\; b=4.8)$}}%
+%
+%
+\settowidth{\Width}{$a$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$a$}\settodepth{\Depth}{$a$}\setlength{\Height}{\Depth}%
+\put(0.4600,0.1500){\hspace*{\Width}\raisebox{\Height}{$a$}}%
+%
+%
+\settowidth{\Width}{$b$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$b$}\settodepth{\Depth}{$b$}\setlength{\Height}{-\Height}%
+\put(4.8000,-0.1500){\hspace*{\Width}\raisebox{\Height}{$b$}}%
+%
+%
+\special{pa 0 -217}\special{pa 0 -177}%
+\special{fp}%
+\settowidth{\Width}{$1$}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{$1$}\settodepth{\Depth}{$1$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-0.1500,1.1000){\hspace*{\Width}\raisebox{\Height}{$1$}}%
+%
+%
+%
+\special{pa 217 0}\special{pa 177 0}%
+\special{fp}%
+\settowidth{\Width}{$1$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$1$}\settodepth{\Depth}{$1$}\setlength{\Height}{-\Height}%
+\put(1.1000,-0.1500){\hspace*{\Width}\raisebox{\Height}{$1$}}%
+%
+%
+%
+\special{pa 555 0}\special{pa 516 0}%
+\special{fp}%
+\settowidth{\Width}{$e$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$e$}\settodepth{\Depth}{$e$}\setlength{\Height}{-\Height}%
+\put(2.8200,-0.1500){\hspace*{\Width}\raisebox{\Height}{$e$}}%
+%
+%
+%
+\special{pa -659 0}\special{pa 1843 0}%
+\special{fp}%
+\special{pa 11 596}\special{pa 12 553}\special{pa 22 434}\special{pa 32 360}\special{pa 41 306}%
+\special{pa 51 264}\special{pa 61 230}\special{pa 71 200}\special{pa 81 175}\special{pa 91 152}%
+\special{pa 101 132}\special{pa 111 113}\special{pa 121 97}\special{pa 130 81}\special{pa 140 67}%
+\special{pa 150 53}\special{pa 160 41}\special{pa 170 29}\special{pa 180 18}\special{pa 190 7}%
+\special{pa 200 -3}\special{pa 209 -12}\special{pa 219 -21}\special{pa 229 -30}\special{pa 239 -38}%
+\special{pa 249 -46}\special{pa 259 -54}\special{pa 269 -61}\special{pa 279 -68}\special{pa 289 -75}%
+\special{pa 298 -82}\special{pa 308 -88}\special{pa 318 -95}\special{pa 328 -101}%
+\special{pa 338 -106}\special{pa 348 -112}\special{pa 358 -118}\special{pa 368 -123}%
+\special{pa 377 -128}\special{pa 387 -133}\special{pa 397 -138}\special{pa 407 -143}%
+\special{pa 417 -148}\special{pa 427 -152}\special{pa 437 -157}\special{pa 447 -161}%
+\special{pa 457 -166}\special{pa 466 -170}\special{pa 476 -174}\special{pa 486 -178}%
+\special{pa 496 -182}\special{pa 506 -186}\special{pa 516 -190}\special{pa 526 -193}%
+\special{pa 536 -197}\special{pa 545 -201}\special{pa 555 -204}\special{pa 565 -208}%
+\special{pa 575 -211}\special{pa 585 -214}\special{pa 595 -218}\special{pa 605 -221}%
+\special{pa 615 -224}\special{pa 625 -227}\special{pa 634 -230}\special{pa 644 -233}%
+\special{pa 654 -236}\special{pa 664 -239}\special{pa 674 -242}\special{pa 684 -245}%
+\special{pa 694 -248}\special{pa 704 -251}\special{pa 713 -253}\special{pa 723 -256}%
+\special{pa 733 -259}\special{pa 743 -262}\special{pa 753 -264}\special{pa 763 -267}%
+\special{pa 773 -269}\special{pa 783 -272}\special{pa 793 -274}\special{pa 802 -277}%
+\special{pa 812 -279}\special{pa 822 -281}\special{pa 832 -284}\special{pa 842 -286}%
+\special{pa 852 -288}\special{pa 862 -291}\special{pa 872 -293}\special{pa 881 -295}%
+\special{pa 891 -297}\special{pa 901 -299}\special{pa 911 -302}\special{pa 921 -304}%
+\special{pa 931 -306}\special{pa 941 -308}\special{pa 951 -310}\special{pa 961 -312}%
+\special{pa 970 -314}\special{pa 980 -316}\special{pa 990 -318}\special{pa 1000 -320}%
+\special{pa 1010 -322}\special{pa 1020 -324}\special{pa 1030 -326}\special{pa 1040 -328}%
+\special{pa 1049 -329}\special{pa 1059 -331}\special{pa 1069 -333}\special{pa 1079 -335}%
+\special{pa 1089 -337}\special{pa 1099 -339}\special{pa 1109 -340}\special{pa 1119 -342}%
+\special{pa 1129 -344}\special{pa 1138 -345}\special{pa 1148 -347}\special{pa 1158 -349}%
+\special{pa 1168 -351}\special{pa 1178 -352}\special{pa 1188 -354}\special{pa 1198 -355}%
+\special{pa 1208 -357}\special{pa 1217 -359}\special{pa 1227 -360}\special{pa 1237 -362}%
+\special{pa 1247 -363}\special{pa 1257 -365}\special{pa 1267 -367}\special{pa 1277 -368}%
+\special{pa 1287 -370}\special{pa 1297 -371}\special{pa 1306 -373}\special{pa 1316 -374}%
+\special{pa 1326 -376}\special{pa 1336 -377}\special{pa 1346 -378}\special{pa 1356 -380}%
+\special{pa 1366 -381}\special{pa 1376 -383}\special{pa 1385 -384}\special{pa 1395 -386}%
+\special{pa 1405 -387}\special{pa 1415 -388}\special{pa 1425 -390}\special{pa 1435 -391}%
+\special{pa 1445 -392}\special{pa 1455 -394}\special{pa 1465 -395}\special{pa 1474 -396}%
+\special{pa 1484 -398}\special{pa 1494 -399}\special{pa 1504 -400}\special{pa 1514 -402}%
+\special{pa 1524 -403}\special{pa 1534 -404}\special{pa 1544 -405}\special{pa 1553 -407}%
+\special{pa 1563 -408}\special{pa 1573 -409}\special{pa 1583 -410}\special{pa 1593 -412}%
+\special{pa 1603 -413}\special{pa 1613 -414}\special{pa 1623 -415}\special{pa 1633 -416}%
+\special{pa 1642 -418}\special{pa 1652 -419}\special{pa 1662 -420}\special{pa 1672 -421}%
+\special{pa 1682 -422}\special{pa 1692 -423}\special{pa 1702 -425}\special{pa 1712 -426}%
+\special{pa 1721 -427}\special{pa 1731 -428}\special{pa 1741 -429}\special{pa 1751 -430}%
+\special{pa 1761 -431}\special{pa 1771 -432}\special{pa 1781 -434}\special{pa 1791 -435}%
+\special{pa 1801 -436}\special{pa 1810 -437}\special{pa 1820 -438}\special{pa 1830 -439}%
+\special{pa 1840 -440}\special{pa 1843 -440}%
+\special{fp}%
+\special{pa 91 153}\special{pa 99 135}\special{pa 108 119}\special{pa 116 103}\special{pa 125 89}%
+\special{pa 134 76}\special{pa 142 64}\special{pa 151 52}\special{pa 160 41}\special{pa 168 31}%
+\special{pa 177 21}\special{pa 185 12}\special{pa 194 3}\special{pa 203 -6}\special{pa 211 -14}%
+\special{pa 220 -22}\special{pa 229 -29}\special{pa 237 -37}\special{pa 246 -44}\special{pa 255 -51}%
+\special{pa 263 -57}\special{pa 272 -63}\special{pa 280 -70}\special{pa 289 -76}\special{pa 298 -81}%
+\special{pa 306 -87}\special{pa 315 -92}\special{pa 324 -98}\special{pa 332 -103}%
+\special{pa 341 -108}\special{pa 349 -113}\special{pa 358 -118}\special{pa 367 -122}%
+\special{pa 375 -127}\special{pa 384 -132}\special{pa 393 -136}\special{pa 401 -140}%
+\special{pa 410 -144}\special{pa 418 -148}\special{pa 427 -152}\special{pa 436 -156}%
+\special{pa 444 -160}\special{pa 453 -164}\special{pa 462 -168}\special{pa 470 -171}%
+\special{pa 479 -175}\special{pa 488 -179}\special{pa 496 -182}\special{pa 505 -185}%
+\special{pa 513 -189}\special{pa 522 -192}\special{pa 531 -195}\special{pa 539 -198}%
+\special{pa 548 -202}\special{pa 557 -205}\special{pa 565 -208}\special{pa 574 -211}%
+\special{pa 582 -214}\special{pa 591 -216}\special{pa 600 -219}\special{pa 608 -222}%
+\special{pa 617 -225}\special{pa 626 -228}\special{pa 634 -230}\special{pa 643 -233}%
+\special{pa 651 -236}\special{pa 660 -238}\special{pa 669 -241}\special{pa 677 -243}%
+\special{pa 686 -246}\special{pa 695 -248}\special{pa 703 -251}\special{pa 712 -253}%
+\special{pa 721 -255}\special{pa 729 -258}\special{pa 738 -260}\special{pa 746 -262}%
+\special{pa 755 -265}\special{pa 764 -267}\special{pa 772 -269}\special{pa 781 -271}%
+\special{pa 790 -273}\special{pa 798 -276}\special{pa 807 -278}\special{pa 815 -280}%
+\special{pa 824 -282}\special{pa 833 -284}\special{pa 841 -286}\special{pa 850 -288}%
+\special{pa 859 -290}\special{pa 867 -292}\special{pa 876 -294}\special{pa 884 -296}%
+\special{pa 893 -298}\special{pa 902 -300}\special{pa 910 -301}\special{pa 919 -303}%
+\special{pa 928 -305}\special{pa 936 -307}\special{pa 945 -309}%
+\special{fp}%
+\special{pa 91 154}\special{pa 91 0}%
+\special{fp}%
+\special{pa 945 0}\special{pa 945 -309}%
+\special{fp}%
+\special{pa 91 0}\special{pa 945 0}%
+\special{fp}%
+\special{pa 91 0}\special{pa 197 0}%
+\special{fp}%
+\special{pa 90 153}\special{pa 91 152}\special{pa 101 132}\special{pa 111 113}\special{pa 121 97}%
+\special{pa 130 81}\special{pa 140 67}\special{pa 150 53}\special{pa 160 41}\special{pa 170 29}%
+\special{pa 180 18}\special{pa 190 7}\special{pa 200 -3}\special{pa 209 -12}\special{pa 219 -21}%
+\special{pa 229 -30}\special{pa 239 -38}\special{pa 249 -46}\special{pa 259 -54}\special{pa 269 -61}%
+\special{pa 279 -68}\special{pa 289 -75}\special{pa 298 -82}\special{pa 308 -88}\special{pa 318 -95}%
+\special{pa 328 -101}\special{pa 338 -106}\special{pa 348 -112}\special{pa 358 -118}%
+\special{pa 368 -123}\special{pa 377 -128}\special{pa 387 -133}\special{pa 397 -138}%
+\special{pa 407 -143}\special{pa 417 -148}\special{pa 427 -152}\special{pa 437 -157}%
+\special{pa 447 -161}\special{pa 457 -166}\special{pa 466 -170}\special{pa 476 -174}%
+\special{pa 486 -178}\special{pa 496 -182}\special{pa 506 -186}\special{pa 516 -190}%
+\special{pa 526 -193}\special{pa 536 -197}\special{pa 545 -201}\special{pa 555 -204}%
+\special{pa 565 -208}\special{pa 575 -211}\special{pa 585 -214}\special{pa 595 -218}%
+\special{pa 605 -221}\special{pa 615 -224}\special{pa 625 -227}\special{pa 634 -230}%
+\special{pa 644 -233}\special{pa 654 -236}\special{pa 664 -239}\special{pa 674 -242}%
+\special{pa 684 -245}\special{pa 694 -248}\special{pa 704 -251}\special{pa 713 -253}%
+\special{pa 723 -256}\special{pa 733 -259}\special{pa 743 -262}\special{pa 753 -264}%
+\special{pa 763 -267}\special{pa 773 -269}\special{pa 783 -272}\special{pa 793 -274}%
+\special{pa 802 -277}\special{pa 812 -279}\special{pa 822 -281}\special{pa 832 -284}%
+\special{pa 842 -286}\special{pa 852 -288}\special{pa 862 -291}\special{pa 872 -293}%
+\special{pa 881 -295}\special{pa 891 -297}\special{pa 901 -299}\special{pa 911 -302}%
+\special{pa 921 -304}\special{pa 931 -306}\special{pa 941 -308}\special{pa 945 -309}%
+\special{pa 945 -309}\special{pa 945 0}\special{pa 91 0}\special{pa 91 154}%
+\special{fp}%
+\special{pa 90 153}\special{pa 91 152}\special{pa 101 132}\special{pa 111 113}\special{pa 121 97}%
+\special{pa 130 81}\special{pa 140 67}\special{pa 150 53}\special{pa 160 41}\special{pa 170 29}%
+\special{pa 180 18}\special{pa 190 7}\special{pa 197 0}\special{pa 197 0}\special{pa 91 0}%
+\special{pa 91 154}%
+\special{fp}%
+\special{pa -659 0}\special{pa 1843 0}%
+\special{fp}%
+\special{pa 0 596}\special{pa 0 -750}%
+\special{fp}%
+\settowidth{\Width}{$x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(9.4100,0.0000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{\Depth}%
+\put(0.0000,3.8600){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+%
+\settowidth{\Width}{O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(-0.0500,-0.0500){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/inversefun.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/inversefun.tex
new file mode 100644
index 0000000000..e2d0e91876
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/inversefun.tex
@@ -0,0 +1,48 @@
+%%% test.tex 2014-10-21 9:48
+%%% test.sce 2014-10-21 9:48
+{\unitlength=5mm%
+\begin{picture}%
+( 6.00000, 6.00000)( -3.00000, -3.00000)%
+\special{pn 8}%
+%
+\special{pa 200 -93}\special{pa 194 -93}\special{pa 194 -88}\special{pa 200 -88}\special{pa 200 -93}%
+\special{sh 1}\special{fp}%
+\settowidth{\Width}{P}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{P}\settodepth{\Depth}{P}\setlength{\Height}{\Depth}%
+\put(1.0500,0.5100){\hspace*{\Width}\raisebox{\Height}{P}}%
+%
+%
+\special{pa 394 0}\special{pa 384 -1}\special{pa 356 -6}\special{pa 314 -21}\special{pa 260 -47}%
+\special{pa 203 -84}\special{pa 146 -133}\special{pa 95 -188}\special{pa 55 -246}%
+\special{pa 26 -301}\special{pa 9 -347}\special{pa 2 -379}\special{pa 0 -393}\special{pa 0 -388}%
+\special{pa -4 -365}\special{pa -16 -325}\special{pa -39 -274}\special{pa -74 -217}%
+\special{pa -120 -160}\special{pa -174 -107}\special{pa -232 -64}\special{pa -288 -32}%
+\special{pa -337 -12}\special{pa -372 -3}\special{pa -391 0}\special{pa -391 0}\special{pa -372 3}%
+\special{pa -337 12}\special{pa -288 32}\special{pa -232 64}\special{pa -174 107}%
+\special{pa -120 160}\special{pa -74 217}\special{pa -39 274}\special{pa -16 325}%
+\special{pa -4 365}\special{pa 0 388}\special{pa 0 393}\special{pa 2 379}\special{pa 9 347}%
+\special{pa 26 301}\special{pa 55 246}\special{pa 95 188}\special{pa 146 133}\special{pa 203 84}%
+\special{pa 260 47}\special{pa 314 21}\special{pa 356 6}\special{pa 384 1}\special{pa 394 0}%
+\special{fp}%
+\special{pa 591 209}\special{pa -460 -591}%
+\special{fp}%
+\special{pa -591 0}\special{pa 591 0}%
+\special{fp}%
+\special{pa 0 591}\special{pa 0 -591}%
+\special{fp}%
+\settowidth{\Width}{$x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(3.0500,0.0000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{\Depth}%
+\put(0.0000,3.0500){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+%
+\settowidth{\Width}{O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(-0.0500,-0.0500){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/invparapt.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/invparapt.tex
new file mode 100644
index 0000000000..0b5684e232
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/invparapt.tex
@@ -0,0 +1,110 @@
+%%% /Users/Hannya/ketcindy/ketwork/template.tex 2016-8-23 9:12
+%%% template.sce 2016-8-23 9:12
+{\unitlength=8mm%
+\begin{picture}%
+( 7.55000, 6.27000)( -3.75000, -1.85000)%
+\special{pn 8}%
+%
+\settowidth{\Width}{$x$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-3.1557,-0.9707){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(3.5211,-1.3391){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+%
+\settowidth{\Width}{$z$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$z$}\settodepth{\Depth}{$z$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(0.0000,3.9488){\hspace*{\Width}\raisebox{\Height}{$z$}}%
+%
+%
+\special{pa 1171 -360}\special{pa -937 288}%
+\special{fp}%
+\special{pa -1053 -400}\special{pa 1053 400}%
+\special{fp}%
+\special{pa 0 583}\special{pa 0 -1184}%
+\special{fp}%
+\special{pa 24 144}\special{pa 187 -656}%
+\special{fp}%
+\special{pn 8}%
+\special{pa -472 143}\special{pa -464 145}\special{fp}\special{pa -434 150}\special{pa -426 151}\special{fp}%
+\special{pa -395 157}\special{pa -387 158}\special{fp}\special{pa -356 163}\special{pa -348 164}\special{fp}%
+\special{pa -317 167}\special{pa -309 167}\special{fp}\special{pa -278 169}\special{pa -270 170}\special{fp}%
+\special{pa -239 172}\special{pa -231 172}\special{fp}\special{pa -199 173}\special{pa -191 173}\special{fp}%
+\special{pa -160 173}\special{pa -152 172}\special{fp}\special{pa -121 172}\special{pa -113 171}\special{fp}%
+\special{pa -82 171}\special{pa -74 170}\special{fp}\special{pa -42 169}\special{pa -34 168}\special{fp}%
+\special{pa -3 165}\special{pa 5 164}\special{fp}\special{pa 36 160}\special{pa 44 160}\special{fp}%
+\special{pa 75 156}\special{pa 83 155}\special{fp}\special{pa 114 151}\special{pa 122 150}\special{fp}%
+\special{pa 152 143}\special{pa 160 142}\special{fp}\special{pa 191 136}\special{pa 199 134}\special{fp}%
+\special{pa 229 128}\special{pa 237 126}\special{fp}\special{pa 267 119}\special{pa 275 117}\special{fp}%
+\special{pa 305 107}\special{pa 312 105}\special{fp}\special{pa 342 95}\special{pa 350 93}\special{fp}%
+\special{pa 380 83}\special{pa 387 81}\special{fp}\special{pa 416 68}\special{pa 423 64}\special{fp}%
+\special{pa 451 51}\special{pa 458 47}\special{fp}\special{pa 487 34}\special{pa 493 30}\special{fp}%
+\special{pa 519 12}\special{pa 526 8}\special{fp}\special{pa 550 -12}\special{pa 556 -17}\special{fp}%
+\special{pa 581 -36}\special{pa 586 -42}\special{fp}\special{pa 602 -69}\special{pa 606 -76}\special{fp}%
+\special{pa 622 -103}\special{pa 624 -110}\special{fp}\special{pa 625 -142}\special{pa 625 -150}\special{fp}%
+\special{pa 621 -179}\special{pa 619 -187}\special{fp}\special{pa 604 -215}\special{pa 599 -221}\special{fp}%
+\special{pa 581 -246}\special{pa 576 -252}\special{fp}\special{pa 552 -272}\special{pa 546 -277}\special{fp}%
+\special{pa 522 -298}\special{pa 516 -302}\special{fp}\special{pa 488 -317}\special{pa 481 -321}\special{fp}%
+\special{pa 453 -335}\special{pa 446 -339}\special{fp}\special{pa 418 -353}\special{pa 411 -357}\special{fp}%
+\special{pa 381 -367}\special{pa 374 -369}\special{fp}\special{pa 344 -379}\special{pa 337 -382}\special{fp}%
+\special{pa 307 -392}\special{pa 300 -395}\special{fp}\special{pa 270 -403}\special{pa 262 -405}\special{fp}%
+\special{pa 231 -412}\special{pa 223 -414}\special{fp}\special{pa 193 -420}\special{pa 185 -422}\special{fp}%
+\special{pa 155 -429}\special{pa 147 -430}\special{fp}\special{pa 116 -436}\special{pa 108 -437}\special{fp}%
+\special{pa 77 -441}\special{pa 69 -442}\special{fp}\special{pa 38 -445}\special{pa 30 -446}\special{fp}%
+\special{pa -1 -450}\special{pa -9 -451}\special{fp}\special{pa -40 -454}\special{pa -48 -454}\special{fp}%
+\special{pa -79 -455}\special{pa -87 -456}\special{fp}\special{pa -119 -457}\special{pa -127 -457}\special{fp}%
+\special{pa -158 -458}\special{pa -166 -459}\special{fp}\special{pa -197 -458}\special{pa -205 -458}\special{fp}%
+\special{pa -236 -457}\special{pa -244 -456}\special{fp}\special{pa -276 -455}\special{pa -284 -454}\special{fp}%
+\special{pa -315 -453}\special{pa -323 -452}\special{fp}\special{pa -354 -448}\special{pa -362 -447}\special{fp}%
+\special{pa -393 -442}\special{pa -401 -441}\special{fp}\special{pa -432 -436}\special{pa -439 -435}\special{fp}%
+\special{pa -470 -428}\special{pa -477 -425}\special{fp}\special{pa -507 -417}\special{pa -515 -414}\special{fp}%
+\special{pa -545 -405}\special{pa -552 -402}\special{fp}\special{pa -579 -386}\special{pa -586 -382}\special{fp}%
+\special{pa -610 -364}\special{pa -615 -357}\special{fp}\special{pa -627 -330}\special{pa -627 -322}\special{fp}%
+\special{pa -613 -294}\special{pa -608 -288}\special{fp}\special{pa -581 -272}\special{pa -574 -268}\special{fp}%
+\special{pa -547 -254}\special{pa -539 -251}\special{fp}\special{pa -509 -241}\special{pa -502 -239}\special{fp}%
+\special{pa -472 -229}\special{pa -464 -227}\special{fp}\special{pa -434 -222}\special{pa -426 -221}\special{fp}%
+\special{pa -395 -215}\special{pa -387 -214}\special{fp}\special{pa -356 -208}\special{pa -348 -208}\special{fp}%
+\special{pa -317 -205}\special{pa -309 -205}\special{fp}\special{pa -278 -203}\special{pa -270 -202}\special{fp}%
+\special{pa -239 -200}\special{pa -231 -200}\special{fp}\special{pa -199 -199}\special{pa -191 -199}\special{fp}%
+\special{pa -160 -199}\special{pa -152 -200}\special{fp}\special{pa -121 -200}\special{pa -113 -200}\special{fp}%
+\special{pa -82 -201}\special{pa -74 -201}\special{fp}\special{pa -42 -203}\special{pa -34 -204}\special{fp}%
+\special{pa -3 -207}\special{pa 5 -208}\special{fp}\special{pa 36 -211}\special{pa 44 -212}\special{fp}%
+\special{pa 75 -216}\special{pa 83 -217}\special{fp}\special{pa 114 -221}\special{pa 122 -222}\special{fp}%
+\special{pa 152 -229}\special{pa 160 -230}\special{fp}\special{pa 191 -236}\special{pa 199 -238}\special{fp}%
+\special{pa 229 -244}\special{pa 237 -246}\special{fp}\special{pa 267 -253}\special{pa 275 -255}\special{fp}%
+\special{pa 305 -265}\special{pa 312 -267}\special{fp}\special{pa 342 -277}\special{pa 350 -279}\special{fp}%
+\special{pa 380 -288}\special{pa 387 -291}\special{fp}\special{pa 416 -304}\special{pa 423 -308}\special{fp}%
+\special{pa 451 -321}\special{pa 458 -325}\special{fp}\special{pa 487 -338}\special{pa 493 -342}\special{fp}%
+\special{pa 519 -360}\special{pa 526 -364}\special{fp}\special{pa 550 -384}\special{pa 556 -389}\special{fp}%
+\special{pa 581 -408}\special{pa 586 -414}\special{fp}\special{pa 602 -441}\special{pa 606 -448}\special{fp}%
+\special{pa 622 -474}\special{pa 624 -482}\special{fp}\special{pa 625 -514}\special{pa 625 -522}\special{fp}%
+\special{pa 621 -551}\special{pa 619 -559}\special{fp}\special{pa 604 -586}\special{pa 599 -593}\special{fp}%
+\special{pa 581 -618}\special{pa 576 -624}\special{fp}\special{pa 552 -644}\special{pa 546 -649}\special{fp}%
+\special{pa 522 -670}\special{pa 516 -674}\special{fp}\special{pa 488 -689}\special{pa 481 -692}\special{fp}%
+\special{pa 453 -707}\special{pa 446 -711}\special{fp}\special{pa 418 -725}\special{pa 411 -728}\special{fp}%
+\special{pa 381 -739}\special{pa 374 -741}\special{fp}\special{pa 344 -751}\special{pa 337 -754}\special{fp}%
+\special{pa 307 -764}\special{pa 300 -767}\special{fp}\special{pa 270 -775}\special{pa 262 -777}\special{fp}%
+\special{pa 231 -784}\special{pa 223 -786}\special{fp}\special{pa 193 -792}\special{pa 185 -794}\special{fp}%
+\special{pa 155 -801}\special{pa 147 -802}\special{fp}\special{pa 116 -808}\special{pa 108 -809}\special{fp}%
+\special{pa 77 -813}\special{pa 69 -813}\special{fp}\special{pa 38 -817}\special{pa 30 -818}\special{fp}%
+\special{pa -1 -822}\special{pa -9 -823}\special{fp}\special{pa -40 -826}\special{pa -48 -826}\special{fp}%
+\special{pa -79 -827}\special{pa -87 -828}\special{fp}\special{pa -119 -829}\special{pa -127 -829}\special{fp}%
+\special{pa -158 -830}\special{pa -166 -830}\special{fp}\special{pa -197 -830}\special{pa -205 -830}\special{fp}%
+\special{pa -236 -828}\special{pa -244 -828}\special{fp}\special{pa -276 -827}\special{pa -284 -826}\special{fp}%
+\special{pa -315 -825}\special{pa -323 -824}\special{fp}\special{pa -354 -820}\special{pa -362 -819}\special{fp}%
+\special{pa -393 -814}\special{pa -401 -813}\special{fp}\special{pa -432 -808}\special{pa -439 -807}\special{fp}%
+\special{pa -470 -799}\special{pa -477 -797}\special{fp}\special{pa -507 -789}\special{pa -515 -786}\special{fp}%
+\special{pa -545 -777}\special{pa -552 -774}\special{fp}\special{pa -579 -758}\special{pa -586 -754}\special{fp}%
+\special{pa -610 -735}\special{pa -615 -729}\special{fp}\special{pa -627 -702}\special{pa -627 -694}\special{fp}%
+\special{pa -613 -666}\special{pa -608 -660}\special{fp}\special{pa -581 -644}\special{pa -574 -640}\special{fp}%
+\special{pa -547 -626}\special{pa -539 -623}\special{fp}\special{pa -509 -613}\special{pa -502 -611}\special{fp}%
+\special{pa -472 -601}\special{pa -465 -599}\special{fp}\special{pn 8}%
+\special{pa 140 -432}\special{pa 131 -433}\special{pa -27 -452}\special{pa -182 -458}%
+\special{pa -326 -450}\special{pa -452 -435}\special{pa -545 -406}\special{pa -607 -372}%
+\special{pa -630 -333}\special{pa -612 -294}\special{pa -560 -258}\special{pa -468 -229}%
+\special{pa -349 -208}\special{pa -208 -200}\special{pa -53 -202}\special{pa 96 -220}%
+\special{fp}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/joincrvs.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/joincrvs.tex
new file mode 100644
index 0000000000..20a358778a
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/joincrvs.tex
@@ -0,0 +1,106 @@
+%%% /Users/Hannya/Desktop/KeTCindy/fig/joincrvs.tex
+%%% Generator=template1basic.cdy
+{\unitlength=7mm%
+\begin{picture}%
+(6,5)(-3,-2)%
+\special{pn 8}%
+%
+\color[rgb]{1,1,0}%
+\special{pa -390 390}\special{pa -374 374}\special{pa -359 359}\special{pa -343 343}%
+\special{pa -327 327}\special{pa -312 312}\special{pa -296 296}\special{pa -281 281}%
+\special{pa -265 265}\special{pa -249 249}\special{pa -234 234}\special{pa -218 218}%
+\special{pa -203 203}\special{pa -187 187}\special{pa -171 171}\special{pa -156 156}%
+\special{pa -140 140}\special{pa -125 125}\special{pa -109 109}\special{pa -94 94}%
+\special{pa -78 78}\special{pa -62 62}\special{pa -47 47}\special{pa -31 31}\special{pa -16 16}%
+\special{pa 0 0}\special{pa 16 -16}\special{pa 31 -31}\special{pa 47 -47}\special{pa 62 -62}%
+\special{pa 78 -78}\special{pa 94 -94}\special{pa 109 -109}\special{pa 125 -125}\special{pa 140 -140}%
+\special{pa 156 -156}\special{pa 171 -171}\special{pa 187 -187}\special{pa 203 -203}%
+\special{pa 218 -218}\special{pa 234 -234}\special{pa 249 -249}\special{pa 265 -265}%
+\special{pa 281 -281}\special{pa 296 -296}\special{pa 312 -312}\special{pa 327 -327}%
+\special{pa 343 -343}\special{pa 359 -359}\special{pa 374 -374}\special{pa 390 -390}%
+\special{pa 365 -413}\special{pa 338 -436}\special{pa 310 -456}\special{pa 281 -474}%
+\special{pa 250 -491}\special{pa 219 -506}\special{pa 187 -519}\special{pa 154 -529}%
+\special{pa 120 -538}\special{pa 86 -544}\special{pa 52 -549}\special{pa 17 -551}%
+\special{pa -17 -551}\special{pa -52 -549}\special{pa -86 -544}\special{pa -120 -538}%
+\special{pa -154 -529}\special{pa -187 -519}\special{pa -219 -506}\special{pa -250 -491}%
+\special{pa -281 -474}\special{pa -310 -456}\special{pa -338 -436}\special{pa -365 -413}%
+\special{pa -390 -390}\special{pa -413 -365}\special{pa -436 -338}\special{pa -456 -310}%
+\special{pa -474 -281}\special{pa -491 -250}\special{pa -506 -219}\special{pa -519 -187}%
+\special{pa -529 -154}\special{pa -538 -120}\special{pa -544 -86}\special{pa -549 -52}%
+\special{pa -551 -17}\special{pa -551 17}\special{pa -549 52}\special{pa -544 86}%
+\special{pa -538 120}\special{pa -529 154}\special{pa -519 187}\special{pa -506 219}%
+\special{pa -491 250}\special{pa -474 281}\special{pa -456 310}\special{pa -436 338}%
+\special{pa -413 365}\special{pa -390 390}\special{pa -390 390}\special{sh 1}\special{ip}%
+\color[rgb]{0,0,0}%
+\special{pa -390 390}\special{pa -374 374}\special{pa -359 359}\special{pa -343 343}%
+\special{pa -327 327}\special{pa -312 312}\special{pa -296 296}\special{pa -281 281}%
+\special{pa -265 265}\special{pa -249 249}\special{pa -234 234}\special{pa -218 218}%
+\special{pa -203 203}\special{pa -187 187}\special{pa -171 171}\special{pa -156 156}%
+\special{pa -140 140}\special{pa -125 125}\special{pa -109 109}\special{pa -94 94}%
+\special{pa -78 78}\special{pa -62 62}\special{pa -47 47}\special{pa -31 31}%
+\special{pa -16 16}\special{pa 0 -0}\special{pa 16 -16}\special{pa 31 -31}%
+\special{pa 47 -47}\special{pa 62 -62}\special{pa 78 -78}\special{pa 94 -94}%
+\special{pa 109 -109}\special{pa 125 -125}\special{pa 140 -140}\special{pa 156 -156}%
+\special{pa 171 -171}\special{pa 187 -187}\special{pa 203 -203}\special{pa 218 -218}%
+\special{pa 234 -234}\special{pa 249 -249}\special{pa 265 -265}\special{pa 281 -281}%
+\special{pa 296 -296}\special{pa 312 -312}\special{pa 327 -327}\special{pa 343 -343}%
+\special{pa 359 -359}\special{pa 374 -374}\special{pa 390 -390}%
+\special{fp}%
+\special{pa 390 -390}\special{pa 365 -413}\special{pa 338 -436}\special{pa 310 -456}%
+\special{pa 281 -474}\special{pa 250 -491}\special{pa 219 -506}\special{pa 187 -519}%
+\special{pa 154 -529}\special{pa 120 -538}\special{pa 86 -544}\special{pa 52 -549}%
+\special{pa 17 -551}\special{pa -17 -551}\special{pa -52 -549}\special{pa -86 -544}%
+\special{pa -120 -538}\special{pa -154 -529}\special{pa -187 -519}\special{pa -219 -506}%
+\special{pa -250 -491}\special{pa -281 -474}\special{pa -310 -456}\special{pa -338 -436}%
+\special{pa -365 -413}\special{pa -390 -390}\special{pa -413 -365}\special{pa -436 -338}%
+\special{pa -456 -310}\special{pa -474 -281}\special{pa -491 -250}\special{pa -506 -219}%
+\special{pa -519 -187}\special{pa -529 -154}\special{pa -538 -120}\special{pa -544 -86}%
+\special{pa -549 -52}\special{pa -551 -17}\special{pa -551 17}\special{pa -549 52}%
+\special{pa -544 86}\special{pa -538 120}\special{pa -529 154}\special{pa -519 187}%
+\special{pa -506 219}\special{pa -491 250}\special{pa -474 281}\special{pa -456 310}%
+\special{pa -436 338}\special{pa -413 365}\special{pa -390 390}%
+\special{fp}%
+\special{pa -390 390}\special{pa -374 374}\special{pa -359 359}\special{pa -343 343}%
+\special{pa -327 327}\special{pa -312 312}\special{pa -296 296}\special{pa -281 281}%
+\special{pa -265 265}\special{pa -249 249}\special{pa -234 234}\special{pa -218 218}%
+\special{pa -203 203}\special{pa -187 187}\special{pa -171 171}\special{pa -156 156}%
+\special{pa -140 140}\special{pa -125 125}\special{pa -109 109}\special{pa -94 94}%
+\special{pa -78 78}\special{pa -62 62}\special{pa -47 47}\special{pa -31 31}%
+\special{pa -16 16}\special{pa 0 -0}\special{pa 16 -16}\special{pa 31 -31}%
+\special{pa 47 -47}\special{pa 62 -62}\special{pa 78 -78}\special{pa 94 -94}%
+\special{pa 109 -109}\special{pa 125 -125}\special{pa 140 -140}\special{pa 156 -156}%
+\special{pa 171 -171}\special{pa 187 -187}\special{pa 203 -203}\special{pa 218 -218}%
+\special{pa 234 -234}\special{pa 249 -249}\special{pa 265 -265}\special{pa 281 -281}%
+\special{pa 296 -296}\special{pa 312 -312}\special{pa 327 -327}\special{pa 343 -343}%
+\special{pa 359 -359}\special{pa 374 -374}\special{pa 390 -390}\special{pa 365 -413}%
+\special{pa 338 -436}\special{pa 310 -456}\special{pa 281 -474}\special{pa 250 -491}%
+\special{pa 219 -506}\special{pa 187 -519}\special{pa 154 -529}\special{pa 120 -538}%
+\special{pa 86 -544}\special{pa 52 -549}\special{pa 17 -551}\special{pa -17 -551}%
+\special{pa -52 -549}\special{pa -86 -544}\special{pa -120 -538}\special{pa -154 -529}%
+\special{pa -187 -519}\special{pa -219 -506}\special{pa -250 -491}\special{pa -281 -474}%
+\special{pa -310 -456}\special{pa -338 -436}\special{pa -365 -413}\special{pa -390 -390}%
+\special{pa -413 -365}\special{pa -436 -338}\special{pa -456 -310}\special{pa -474 -281}%
+\special{pa -491 -250}\special{pa -506 -219}\special{pa -519 -187}\special{pa -529 -154}%
+\special{pa -538 -120}\special{pa -544 -86}\special{pa -549 -52}\special{pa -551 -17}%
+\special{pa -551 17}\special{pa -549 52}\special{pa -544 86}\special{pa -538 120}%
+\special{pa -529 154}\special{pa -519 187}\special{pa -506 219}\special{pa -491 250}%
+\special{pa -474 281}\special{pa -456 310}\special{pa -436 338}\special{pa -413 365}%
+\special{pa -390 390}%
+\special{fp}%
+\special{pa -827 -0}\special{pa 827 -0}%
+\special{fp}%
+\special{pa 0 551}\special{pa 0 -827}%
+\special{fp}%
+\settowidth{\Width}{$x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(3.0714286,0.0000000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{\Depth}%
+\put(0.0000000,3.0714286){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+\settowidth{\Width}{O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(-0.0714286,-0.0714286){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/kobayashi.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/kobayashi.tex
new file mode 100644
index 0000000000..d5f54f99eb
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/kobayashi.tex
@@ -0,0 +1,206 @@
+%%% /Users/Hannya/Desktop/KeTCindy/KeTCindyTools/fig/table.tex
+%%% Generator=作表.cdy
+{\unitlength=10mm%
+\begin{picture}%
+(13,5.6)(0,0)%
+\special{pn 8}%
+%
+\special{pa 0 -2205}\special{pa 0 -0}%
+\special{fp}%
+\special{pa 394 -2205}\special{pa 394 -0}%
+\special{fp}%
+\special{pa 1378 -2205}\special{pa 1378 -0}%
+\special{fp}%
+\special{pa 1772 -2205}\special{pa 1772 -0}%
+\special{fp}%
+\special{pa 2953 -2205}\special{pa 2953 -0}%
+\special{fp}%
+\special{pa 3543 -2205}\special{pa 3543 -0}%
+\special{fp}%
+\special{pa 5118 -2205}\special{pa 5118 -0}%
+\special{fp}%
+\special{pa 0 -2205}\special{pa 5118 -2205}%
+\special{fp}%
+\special{pa 0 -1890}\special{pa 5118 -1890}%
+\special{fp}%
+\special{pa 0 -1575}\special{pa 5118 -1575}%
+\special{fp}%
+\special{pa 0 -1260}\special{pa 5118 -1260}%
+\special{fp}%
+\special{pa 0 -945}\special{pa 5118 -945}%
+\special{fp}%
+\special{pa 0 -630}\special{pa 5118 -630}%
+\special{fp}%
+\special{pa 0 -315}\special{pa 5118 -315}%
+\special{fp}%
+\special{pa 0 -0}\special{pa 5118 -0}%
+\special{fp}%
+\settowidth{\Width}{番号}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{番号}\settodepth{\Depth}{番号}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(0.5000000,5.2000000){\hspace*{\Width}\raisebox{\Height}{番号}}%
+%
+\settowidth{\Width}{名称}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{名称}\settodepth{\Depth}{名称}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.2500000,5.2000000){\hspace*{\Width}\raisebox{\Height}{名称}}%
+%
+\settowidth{\Width}{番号}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{番号}\settodepth{\Depth}{番号}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.0000000,5.2000000){\hspace*{\Width}\raisebox{\Height}{番号}}%
+%
+\settowidth{\Width}{名称}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{名称}\settodepth{\Depth}{名称}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(6.0000000,5.2000000){\hspace*{\Width}\raisebox{\Height}{名称}}%
+%
+\settowidth{\Width}{番号}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{番号}\settodepth{\Depth}{番号}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(8.2500000,5.2000000){\hspace*{\Width}\raisebox{\Height}{番号}}%
+%
+\settowidth{\Width}{名称}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{名称}\settodepth{\Depth}{名称}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(11.0000000,5.2000000){\hspace*{\Width}\raisebox{\Height}{名称}}%
+%
+\settowidth{\Width}{r01}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{r01}\settodepth{\Depth}{r01}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(0.5000000,4.4000000){\hspace*{\Width}\raisebox{\Height}{r01}}%
+%
+\settowidth{\Width}{正四面体}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{正四面体}\settodepth{\Depth}{正四面体}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.2500000,4.4000000){\hspace*{\Width}\raisebox{\Height}{正四面体}}%
+%
+\settowidth{\Width}{s02}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{s02}\settodepth{\Depth}{s02}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.0000000,4.4000000){\hspace*{\Width}\raisebox{\Height}{s02}}%
+%
+\settowidth{\Width}{二十・十二面体}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{二十・十二面体}\settodepth{\Depth}{二十・十二面体}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(6.0000000,4.4000000){\hspace*{\Width}\raisebox{\Height}{二十・十二面体}}%
+%
+\settowidth{\Width}{s08}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{s08}\settodepth{\Depth}{s08}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(8.2500000,4.4000000){\hspace*{\Width}\raisebox{\Height}{s08}}%
+%
+\settowidth{\Width}{斜立方八面体}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{斜立方八面体}\settodepth{\Depth}{斜立方八面体}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(11.0000000,4.4000000){\hspace*{\Width}\raisebox{\Height}{斜立方八面体}}%
+%
+\settowidth{\Width}{r02}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{r02}\settodepth{\Depth}{r02}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(0.5000000,3.6000000){\hspace*{\Width}\raisebox{\Height}{r02}}%
+%
+\settowidth{\Width}{正八面体}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{正八面体}\settodepth{\Depth}{正八面体}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.2500000,3.6000000){\hspace*{\Width}\raisebox{\Height}{正八面体}}%
+%
+\settowidth{\Width}{s03}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{s03}\settodepth{\Depth}{s03}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.0000000,3.6000000){\hspace*{\Width}\raisebox{\Height}{s03}}%
+%
+\settowidth{\Width}{切頭四面体}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{切頭四面体}\settodepth{\Depth}{切頭四面体}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(6.0000000,3.6000000){\hspace*{\Width}\raisebox{\Height}{切頭四面体}}%
+%
+\settowidth{\Width}{s09}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{s09}\settodepth{\Depth}{s09}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(8.2500000,3.6000000){\hspace*{\Width}\raisebox{\Height}{s09}}%
+%
+\settowidth{\Width}{斜十二・二十面体}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{斜十二・二十面体}\settodepth{\Depth}{斜十二・二十面体}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(11.0000000,3.6000000){\hspace*{\Width}\raisebox{\Height}{斜十二・二十面体}}%
+%
+\settowidth{\Width}{r03}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{r03}\settodepth{\Depth}{r03}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(0.5000000,2.8000000){\hspace*{\Width}\raisebox{\Height}{r03}}%
+%
+\settowidth{\Width}{正六面体}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{正六面体}\settodepth{\Depth}{正六面体}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.2500000,2.8000000){\hspace*{\Width}\raisebox{\Height}{正六面体}}%
+%
+\settowidth{\Width}{s04}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{s04}\settodepth{\Depth}{s04}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.0000000,2.8000000){\hspace*{\Width}\raisebox{\Height}{s04}}%
+%
+\settowidth{\Width}{切頭八面体}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{切頭八面体}\settodepth{\Depth}{切頭八面体}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(6.0000000,2.8000000){\hspace*{\Width}\raisebox{\Height}{切頭八面体}}%
+%
+\settowidth{\Width}{s10}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{s10}\settodepth{\Depth}{s10}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(8.2500000,2.8000000){\hspace*{\Width}\raisebox{\Height}{s10}}%
+%
+\settowidth{\Width}{切頭立方八面体}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{切頭立方八面体}\settodepth{\Depth}{切頭立方八面体}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(11.0000000,2.8000000){\hspace*{\Width}\raisebox{\Height}{切頭立方八面体}}%
+%
+\settowidth{\Width}{r04}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{r04}\settodepth{\Depth}{r04}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(0.5000000,2.0000000){\hspace*{\Width}\raisebox{\Height}{r04}}%
+%
+\settowidth{\Width}{正十二面体}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{正十二面体}\settodepth{\Depth}{正十二面体}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.2500000,2.0000000){\hspace*{\Width}\raisebox{\Height}{正十二面体}}%
+%
+\settowidth{\Width}{s05}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{s05}\settodepth{\Depth}{s05}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.0000000,2.0000000){\hspace*{\Width}\raisebox{\Height}{s05}}%
+%
+\settowidth{\Width}{切頭立方体}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{切頭立方体}\settodepth{\Depth}{切頭立方体}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(6.0000000,2.0000000){\hspace*{\Width}\raisebox{\Height}{切頭立方体}}%
+%
+\settowidth{\Width}{s11}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{s11}\settodepth{\Depth}{s11}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(8.2500000,2.0000000){\hspace*{\Width}\raisebox{\Height}{s11}}%
+%
+\settowidth{\Width}{頭切二十・十二面体}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{頭切二十・十二面体}\settodepth{\Depth}{頭切二十・十二面体}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(11.0000000,2.0000000){\hspace*{\Width}\raisebox{\Height}{頭切二十・十二面体}}%
+%
+\settowidth{\Width}{r05}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{r05}\settodepth{\Depth}{r05}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(0.5000000,1.2000000){\hspace*{\Width}\raisebox{\Height}{r05}}%
+%
+\settowidth{\Width}{正二十面体}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{正二十面体}\settodepth{\Depth}{正二十面体}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.2500000,1.2000000){\hspace*{\Width}\raisebox{\Height}{正二十面体}}%
+%
+\settowidth{\Width}{s06}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{s06}\settodepth{\Depth}{s06}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.0000000,1.2000000){\hspace*{\Width}\raisebox{\Height}{s06}}%
+%
+\settowidth{\Width}{切頭二十面体}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{切頭二十面体}\settodepth{\Depth}{切頭二十面体}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(6.0000000,1.2000000){\hspace*{\Width}\raisebox{\Height}{切頭二十面体}}%
+%
+\settowidth{\Width}{s12L/R}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{s12L/R}\settodepth{\Depth}{s12L/R}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(8.2500000,1.2000000){\hspace*{\Width}\raisebox{\Height}{s12L/R}}%
+%
+\settowidth{\Width}{変形立方体}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{変形立方体}\settodepth{\Depth}{変形立方体}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(11.0000000,1.2000000){\hspace*{\Width}\raisebox{\Height}{変形立方体}}%
+%
+\settowidth{\Width}{s01}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{s01}\settodepth{\Depth}{s01}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(0.5000000,0.4000000){\hspace*{\Width}\raisebox{\Height}{s01}}%
+%
+\settowidth{\Width}{立方八面体}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{立方八面体}\settodepth{\Depth}{立方八面体}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.2500000,0.4000000){\hspace*{\Width}\raisebox{\Height}{立方八面体}}%
+%
+\settowidth{\Width}{s07}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{s07}\settodepth{\Depth}{s07}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.0000000,0.4000000){\hspace*{\Width}\raisebox{\Height}{s07}}%
+%
+\settowidth{\Width}{切頭十二面体}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{切頭十二面体}\settodepth{\Depth}{切頭十二面体}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(6.0000000,0.4000000){\hspace*{\Width}\raisebox{\Height}{切頭十二面体}}%
+%
+\settowidth{\Width}{s13L/R}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{s13L/R}\settodepth{\Depth}{s13L/R}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(8.2500000,0.4000000){\hspace*{\Width}\raisebox{\Height}{s13L/R}}%
+%
+\settowidth{\Width}{変形十二面体}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{変形十二面体}\settodepth{\Depth}{変形十二面体}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(11.0000000,0.4000000){\hspace*{\Width}\raisebox{\Height}{変形十二面体}}%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/kobayashiE.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/kobayashiE.tex
new file mode 100644
index 0000000000..04eaee6046
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/kobayashiE.tex
@@ -0,0 +1,206 @@
+%%% /Users/Hannya/Desktop/KeTCindy/KeTCindyTools/fig/kobayashiE.tex
+%%% Generator=作表.cdy
+{\unitlength=10mm%
+\begin{picture}%
+(16.02,5.6)(0,0)%
+\special{pn 8}%
+%
+\special{pa 0 -2205}\special{pa 0 -0}%
+\special{fp}%
+\special{pa 327 -2205}\special{pa 327 -0}%
+\special{fp}%
+\special{pa 1476 -2205}\special{pa 1476 -0}%
+\special{fp}%
+\special{pa 1772 -2205}\special{pa 1772 -0}%
+\special{fp}%
+\special{pa 3551 -2205}\special{pa 3551 -0}%
+\special{fp}%
+\special{pa 4224 -2205}\special{pa 4224 -0}%
+\special{fp}%
+\special{pa 6307 -2205}\special{pa 6307 -0}%
+\special{fp}%
+\special{pa 0 -2205}\special{pa 6307 -2205}%
+\special{fp}%
+\special{pa 0 -1890}\special{pa 6307 -1890}%
+\special{fp}%
+\special{pa 0 -1575}\special{pa 6307 -1575}%
+\special{fp}%
+\special{pa 0 -1260}\special{pa 6307 -1260}%
+\special{fp}%
+\special{pa 0 -945}\special{pa 6307 -945}%
+\special{fp}%
+\special{pa 0 -630}\special{pa 6307 -630}%
+\special{fp}%
+\special{pa 0 -315}\special{pa 6307 -315}%
+\special{fp}%
+\special{pa 0 -0}\special{pa 6307 -0}%
+\special{fp}%
+\settowidth{\Width}{No}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{No}\settodepth{\Depth}{No}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(0.4100000,5.2000000){\hspace*{\Width}\raisebox{\Height}{No}}%
+%
+\settowidth{\Width}{name}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{name}\settodepth{\Depth}{name}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.2900000,5.2000000){\hspace*{\Width}\raisebox{\Height}{name}}%
+%
+\settowidth{\Width}{No}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{No}\settodepth{\Depth}{No}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.1200000,5.2000000){\hspace*{\Width}\raisebox{\Height}{No}}%
+%
+\settowidth{\Width}{name}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{name}\settodepth{\Depth}{name}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(6.7600000,5.2000000){\hspace*{\Width}\raisebox{\Height}{name}}%
+%
+\settowidth{\Width}{No}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{No}\settodepth{\Depth}{No}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(9.8800000,5.2000000){\hspace*{\Width}\raisebox{\Height}{No}}%
+%
+\settowidth{\Width}{name}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{name}\settodepth{\Depth}{name}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(13.3800000,5.2000000){\hspace*{\Width}\raisebox{\Height}{name}}%
+%
+\settowidth{\Width}{r01}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{r01}\settodepth{\Depth}{r01}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(0.4100000,4.4000000){\hspace*{\Width}\raisebox{\Height}{r01}}%
+%
+\settowidth{\Width}{Tetrahedron}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{Tetrahedron}\settodepth{\Depth}{Tetrahedron}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.2900000,4.4000000){\hspace*{\Width}\raisebox{\Height}{Tetrahedron}}%
+%
+\settowidth{\Width}{s02}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{s02}\settodepth{\Depth}{s02}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.1200000,4.4000000){\hspace*{\Width}\raisebox{\Height}{s02}}%
+%
+\settowidth{\Width}{Icosidodecahedron}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{Icosidodecahedron}\settodepth{\Depth}{Icosidodecahedron}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(6.7600000,4.4000000){\hspace*{\Width}\raisebox{\Height}{Icosidodecahedron}}%
+%
+\settowidth{\Width}{s08}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{s08}\settodepth{\Depth}{s08}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(9.8800000,4.4000000){\hspace*{\Width}\raisebox{\Height}{s08}}%
+%
+\settowidth{\Width}{Rhombicuboctahedron}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{Rhombicuboctahedron}\settodepth{\Depth}{Rhombicuboctahedron}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(13.3800000,4.4000000){\hspace*{\Width}\raisebox{\Height}{Rhombicuboctahedron}}%
+%
+\settowidth{\Width}{r02}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{r02}\settodepth{\Depth}{r02}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(0.4100000,3.6000000){\hspace*{\Width}\raisebox{\Height}{r02}}%
+%
+\settowidth{\Width}{Octahedron}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{Octahedron}\settodepth{\Depth}{Octahedron}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.2900000,3.6000000){\hspace*{\Width}\raisebox{\Height}{Octahedron}}%
+%
+\settowidth{\Width}{s03}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{s03}\settodepth{\Depth}{s03}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.1200000,3.6000000){\hspace*{\Width}\raisebox{\Height}{s03}}%
+%
+\settowidth{\Width}{Truncatedtetrahedron}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{Truncatedtetrahedron}\settodepth{\Depth}{Truncatedtetrahedron}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(6.7600000,3.6000000){\hspace*{\Width}\raisebox{\Height}{Truncatedtetrahedron}}%
+%
+\settowidth{\Width}{s09}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{s09}\settodepth{\Depth}{s09}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(9.8800000,3.6000000){\hspace*{\Width}\raisebox{\Height}{s09}}%
+%
+\settowidth{\Width}{Rhombicosidodecahedron}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{Rhombicosidodecahedron}\settodepth{\Depth}{Rhombicosidodecahedron}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(13.3800000,3.6000000){\hspace*{\Width}\raisebox{\Height}{Rhombicosidodecahedron}}%
+%
+\settowidth{\Width}{r03}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{r03}\settodepth{\Depth}{r03}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(0.4100000,2.8000000){\hspace*{\Width}\raisebox{\Height}{r03}}%
+%
+\settowidth{\Width}{Cube}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{Cube}\settodepth{\Depth}{Cube}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.2900000,2.8000000){\hspace*{\Width}\raisebox{\Height}{Cube}}%
+%
+\settowidth{\Width}{s04}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{s04}\settodepth{\Depth}{s04}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.1200000,2.8000000){\hspace*{\Width}\raisebox{\Height}{s04}}%
+%
+\settowidth{\Width}{Truncatedoctahedron}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{Truncatedoctahedron}\settodepth{\Depth}{Truncatedoctahedron}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(6.7600000,2.8000000){\hspace*{\Width}\raisebox{\Height}{Truncatedoctahedron}}%
+%
+\settowidth{\Width}{s10}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{s10}\settodepth{\Depth}{s10}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(9.8800000,2.8000000){\hspace*{\Width}\raisebox{\Height}{s10}}%
+%
+\settowidth{\Width}{Truncatedcuboctahedron}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{Truncatedcuboctahedron}\settodepth{\Depth}{Truncatedcuboctahedron}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(13.3800000,2.8000000){\hspace*{\Width}\raisebox{\Height}{Truncatedcuboctahedron}}%
+%
+\settowidth{\Width}{r04}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{r04}\settodepth{\Depth}{r04}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(0.4100000,2.0000000){\hspace*{\Width}\raisebox{\Height}{r04}}%
+%
+\settowidth{\Width}{Dodecahedron}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{Dodecahedron}\settodepth{\Depth}{Dodecahedron}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.2900000,2.0000000){\hspace*{\Width}\raisebox{\Height}{Dodecahedron}}%
+%
+\settowidth{\Width}{s05}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{s05}\settodepth{\Depth}{s05}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.1200000,2.0000000){\hspace*{\Width}\raisebox{\Height}{s05}}%
+%
+\settowidth{\Width}{Truncatedcube}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{Truncatedcube}\settodepth{\Depth}{Truncatedcube}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(6.7600000,2.0000000){\hspace*{\Width}\raisebox{\Height}{Truncatedcube}}%
+%
+\settowidth{\Width}{s11}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{s11}\settodepth{\Depth}{s11}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(9.8800000,2.0000000){\hspace*{\Width}\raisebox{\Height}{s11}}%
+%
+\settowidth{\Width}{Truncatedicosidodecahedron}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{Truncatedicosidodecahedron}\settodepth{\Depth}{Truncatedicosidodecahedron}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(13.3800000,2.0000000){\hspace*{\Width}\raisebox{\Height}{Truncatedicosidodecahedron}}%
+%
+\settowidth{\Width}{r05}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{r05}\settodepth{\Depth}{r05}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(0.4100000,1.2000000){\hspace*{\Width}\raisebox{\Height}{r05}}%
+%
+\settowidth{\Width}{Icosahedron}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{Icosahedron}\settodepth{\Depth}{Icosahedron}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.2900000,1.2000000){\hspace*{\Width}\raisebox{\Height}{Icosahedron}}%
+%
+\settowidth{\Width}{s06}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{s06}\settodepth{\Depth}{s06}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.1200000,1.2000000){\hspace*{\Width}\raisebox{\Height}{s06}}%
+%
+\settowidth{\Width}{Truncatedicosahedron}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{Truncatedicosahedron}\settodepth{\Depth}{Truncatedicosahedron}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(6.7600000,1.2000000){\hspace*{\Width}\raisebox{\Height}{Truncatedicosahedron}}%
+%
+\settowidth{\Width}{s12L/R}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{s12L/R}\settodepth{\Depth}{s12L/R}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(9.8800000,1.2000000){\hspace*{\Width}\raisebox{\Height}{s12L/R}}%
+%
+\settowidth{\Width}{snubcube}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{snubcube}\settodepth{\Depth}{snubcube}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(13.3800000,1.2000000){\hspace*{\Width}\raisebox{\Height}{snubcube}}%
+%
+\settowidth{\Width}{s01}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{s01}\settodepth{\Depth}{s01}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(0.4100000,0.4000000){\hspace*{\Width}\raisebox{\Height}{s01}}%
+%
+\settowidth{\Width}{Cuboctahedron}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{Cuboctahedron}\settodepth{\Depth}{Cuboctahedron}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.2900000,0.4000000){\hspace*{\Width}\raisebox{\Height}{Cuboctahedron}}%
+%
+\settowidth{\Width}{s07}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{s07}\settodepth{\Depth}{s07}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.1200000,0.4000000){\hspace*{\Width}\raisebox{\Height}{s07}}%
+%
+\settowidth{\Width}{Truncateddodecahedron}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{Truncateddodecahedron}\settodepth{\Depth}{Truncateddodecahedron}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(6.7600000,0.4000000){\hspace*{\Width}\raisebox{\Height}{Truncateddodecahedron}}%
+%
+\settowidth{\Width}{s13L/R}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{s13L/R}\settodepth{\Depth}{s13L/R}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(9.8800000,0.4000000){\hspace*{\Width}\raisebox{\Height}{s13L/R}}%
+%
+\settowidth{\Width}{Snubdodecahedoron}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{Snubdodecahedoron}\settodepth{\Depth}{Snubdodecahedoron}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(13.3800000,0.4000000){\hspace*{\Width}\raisebox{\Height}{Snubdodecahedoron}}%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/letter.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/letter.tex
new file mode 100644
index 0000000000..00be9d149a
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/letter.tex
@@ -0,0 +1,57 @@
+%%% test.tex 2014-10-14 18:34
+%%% test.sce 2014-10-14 18:34
+{\unitlength=1cm%
+\begin{picture}%
+( 7.00000, 2.00000)( -2.00000, 1.00000)%
+\special{pn 8}%
+%
+\special{pa 14 -801}\special{pa 6 -806}\special{pa -4 -807}\special{pa -12 -803}\special{pa -18 -795}%
+\special{pa -20 -786}\special{pa -17 -777}\special{pa -10 -771}\special{pa -1 -768}%
+\special{pa 8 -769}\special{pa 15 -775}\special{pa 19 -784}\special{pa 19 -793}\special{pa 14 -801}%
+\special{sh 1}\special{fp}%
+\large%
+\settowidth{\Width}{e}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{e}\settodepth{\Depth}{e}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(0.2500,2.0000){\hspace*{\Width}\raisebox{\Height}{e}}%
+%
+%
+\settowidth{\Width}{n}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{n}\settodepth{\Depth}{n}\setlength{\Height}{\Depth}%
+\put(0.0000,2.2500){\hspace*{\Width}\raisebox{\Height}{n}}%
+%
+%
+\settowidth{\Width}{w}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{w}\settodepth{\Depth}{w}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-0.2500,2.0000){\hspace*{\Width}\raisebox{\Height}{w}}%
+%
+%
+\settowidth{\Width}{s}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{s}\settodepth{\Depth}{s}\setlength{\Height}{-\Height}%
+\put(0.0000,1.7500){\hspace*{\Width}\raisebox{\Height}{s}}%
+%
+%
+\special{pa 1195 -801}\special{pa 1187 -806}\special{pa 1178 -807}\special{pa 1169 -803}%
+\special{pa 1163 -795}\special{pa 1161 -786}\special{pa 1164 -777}\special{pa 1171 -771}%
+\special{pa 1180 -768}\special{pa 1189 -769}\special{pa 1197 -775}\special{pa 1200 -784}%
+\special{pa 1200 -793}\special{pa 1195 -801}\special{sh 1}\special{fp}%
+\settowidth{\Width}{ne}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{ne}\settodepth{\Depth}{ne}\setlength{\Height}{\Depth}%
+\put(3.2500,2.0500){\hspace*{\Width}\raisebox{\Height}{ne}}%
+%
+%
+\settowidth{\Width}{nw}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{nw}\settodepth{\Depth}{nw}\setlength{\Height}{\Depth}%
+\put(2.7500,2.0500){\hspace*{\Width}\raisebox{\Height}{nw}}%
+%
+%
+\settowidth{\Width}{sw}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{sw}\settodepth{\Depth}{sw}\setlength{\Height}{-\Height}%
+\put(2.7500,1.9500){\hspace*{\Width}\raisebox{\Height}{sw}}%
+%
+%
+\settowidth{\Width}{se}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{se}\settodepth{\Depth}{se}\setlength{\Height}{-\Height}%
+\put(3.2500,1.9500){\hspace*{\Width}\raisebox{\Height}{se}}%
+%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/letter2.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/letter2.tex
new file mode 100644
index 0000000000..06e726a2ba
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/letter2.tex
@@ -0,0 +1,61 @@
+%%% test.tex 2014-10-14 19:7
+%%% test.sce 2014-10-14 19:7
+{\unitlength=1cm%
+\begin{picture}%
+( 7.50000, 4.50000)( -3.50000, -0.50000)%
+\special{pn 8}%
+%
+\special{pa -588 -223}\special{pa -593 -223}\special{pa -593 -218}\special{pa -588 -218}%
+\special{pa -588 -223}\special{sh 1}\special{fp}%
+\special{pa 1184 -889}\special{pa 1178 -889}\special{pa 1178 -883}\special{pa 1184 -883}%
+\special{pa 1184 -889}\special{sh 1}\special{fp}%
+\settowidth{\Width}{A}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{A}\settodepth{\Depth}{A}\setlength{\Height}{-\Height}%
+\put(-1.5500,0.5100){\hspace*{\Width}\raisebox{\Height}{A}}%
+%
+%
+\settowidth{\Width}{B}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{B}\settodepth{\Depth}{B}\setlength{\Height}{-\Height}%
+\put(3.0500,2.2000){\hspace*{\Width}\raisebox{\Height}{B}}%
+%
+%
+\settowidth{\Width}{$f(x)=\frac{1}{4} x^2$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$f(x)=\frac{1}{4} x^2$}\settodepth{\Depth}{$f(x)=\frac{1}{4} x^2$}\setlength{\Height}{-\Height}%
+\put(2.3300,0.5400){\hspace*{\Width}\raisebox{\Height}{$f(x)=\frac{1}{4} x^2$}}%
+%
+%
+\special{pa -591 -220}\special{pa 1181 -886}%
+\special{fp}%
+\special{pa -1378 -1206}\special{pa -1318 -1103}\special{pa -1257 -1004}\special{pa -1197 -910}%
+\special{pa -1137 -821}\special{pa -1077 -736}\special{pa -1016 -656}\special{pa -956 -581}%
+\special{pa -896 -510}\special{pa -836 -443}\special{pa -775 -382}\special{pa -715 -325}%
+\special{pa -655 -272}\special{pa -595 -224}\special{pa -534 -181}\special{pa -474 -143}%
+\special{pa -414 -109}\special{pa -354 -79}\special{pa -293 -55}\special{pa -233 -34}%
+\special{pa -173 -19}\special{pa -112 -8}\special{pa -52 -2}\special{pa 8 0}\special{pa 68 -3}%
+\special{pa 129 -10}\special{pa 189 -23}\special{pa 249 -39}\special{pa 309 -61}\special{pa 370 -87}%
+\special{pa 430 -117}\special{pa 490 -153}\special{pa 550 -192}\special{pa 611 -237}%
+\special{pa 671 -286}\special{pa 731 -339}\special{pa 791 -398}\special{pa 852 -461}%
+\special{pa 912 -528}\special{pa 972 -600}\special{pa 1032 -677}\special{pa 1093 -758}%
+\special{pa 1153 -844}\special{pa 1213 -935}\special{pa 1274 -1030}\special{pa 1334 -1130}%
+\special{pa 1394 -1234}\special{pa 1454 -1343}\special{pa 1515 -1457}\special{pa 1575 -1575}%
+\special{fp}%
+\special{pa -1378 0}\special{pa 1575 0}%
+\special{fp}%
+\special{pa 0 197}\special{pa 0 -1575}%
+\special{fp}%
+\settowidth{\Width}{$x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.0500,0.0000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{\Depth}%
+\put(0.0000,4.0500){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+%
+\settowidth{\Width}{O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(-0.0500,-0.0500){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/letter3d.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/letter3d.tex
new file mode 100644
index 0000000000..7158782845
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/letter3d.tex
@@ -0,0 +1,70 @@
+%%% /Users/hannya/Desktop/fig/frustumewn.tex
+%%% Generator=template3D.cdy
+{\unitlength=7mm%
+\begin{picture}%
+(5.37,4.83)(-3.01,-1.14)%
+\special{pn 8}%
+%
+\special{pa 0 -879}\special{pa -618 -33}%
+\special{fp}%
+\special{pa -618 -33}\special{pa 176 131}%
+\special{fp}%
+\special{pa 0 -879}\special{pa 176 131}%
+\special{fp}%
+\special{pn 8}%
+\special{pa -622 -33}\special{pa -614 -33}\special{fp}\special{pa -582 -35}\special{pa -574 -36}\special{fp}%
+\special{pa -543 -38}\special{pa -535 -38}\special{fp}\special{pa -504 -40}\special{pa -496 -41}\special{fp}%
+\special{pa -465 -42}\special{pa -457 -43}\special{fp}\special{pa -425 -45}\special{pa -417 -45}\special{fp}%
+\special{pa -386 -47}\special{pa -378 -48}\special{fp}\special{pa -347 -50}\special{pa -339 -50}\special{fp}%
+\special{pa -308 -52}\special{pa -300 -53}\special{fp}\special{pa -268 -55}\special{pa -260 -55}\special{fp}%
+\special{pa -229 -57}\special{pa -221 -57}\special{fp}\special{pa -190 -59}\special{pa -182 -60}\special{fp}%
+\special{pa -151 -62}\special{pa -143 -62}\special{fp}\special{pa -111 -64}\special{pa -103 -65}\special{fp}%
+\special{pa -72 -67}\special{pa -64 -67}\special{fp}\special{pa -33 -69}\special{pa -25 -70}\special{fp}%
+\special{pa 6 -71}\special{pa 14 -72}\special{fp}\special{pa 46 -74}\special{pa 54 -74}\special{fp}%
+\special{pa 85 -76}\special{pa 93 -77}\special{fp}\special{pa 124 -79}\special{pa 132 -79}\special{fp}%
+\special{pa 163 -81}\special{pa 171 -82}\special{fp}\special{pa 203 -84}\special{pa 211 -84}\special{fp}%
+\special{pa 242 -86}\special{pa 250 -87}\special{fp}\special{pa 281 -88}\special{pa 289 -89}\special{fp}%
+\special{pa 320 -91}\special{pa 328 -91}\special{fp}\special{pa 360 -93}\special{pa 367 -94}\special{fp}%
+\special{pa 399 -96}\special{pa 407 -96}\special{fp}\special{pa 438 -98}\special{pa 446 -99}\special{fp}%
+\special{pn 8}%
+\special{pa 0 -879}\special{pa 442 -98}%
+\special{fp}%
+\special{pa 176 131}\special{pa 442 -98}%
+\special{fp}%
+\special{pa -0 -879}\special{pa -221 49}%
+\special{fp}%
+\special{pn 8}%
+\special{pa -225 50}\special{pa -217 48}\special{fp}\special{pa -186 42}\special{pa -178 40}\special{fp}%
+\special{pa -147 33}\special{pa -139 31}\special{fp}\special{pa -108 24}\special{pa -100 22}\special{fp}%
+\special{pa -69 16}\special{pa -61 14}\special{fp}\special{pa -30 7}\special{pa -22 5}\special{fp}%
+\special{pa 9 -2}\special{pa 17 -4}\special{fp}\special{pa 48 -11}\special{pa 56 -12}\special{fp}%
+\special{pa 87 -19}\special{pa 95 -21}\special{fp}\special{pa 126 -28}\special{pa 134 -30}\special{fp}%
+\special{pa 165 -37}\special{pa 173 -38}\special{fp}\special{pa 204 -45}\special{pa 212 -47}\special{fp}%
+\special{pa 243 -54}\special{pa 251 -56}\special{fp}\special{pa 282 -63}\special{pa 290 -64}\special{fp}%
+\special{pa 321 -71}\special{pa 329 -73}\special{fp}\special{pa 360 -80}\special{pa 368 -82}\special{fp}%
+\special{pa 399 -89}\special{pa 407 -90}\special{fp}\special{pa 438 -97}\special{pa 446 -99}\special{fp}%
+\special{pn 8}%
+\settowidth{\Width}{A}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{A}\settodepth{\Depth}{A}\setlength{\Height}{\Depth}%
+\put(0.0714286,3.2614286){\hspace*{\Width}\raisebox{\Height}{A}}%
+%
+\settowidth{\Width}{B}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{B}\settodepth{\Depth}{B}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-2.3114286,0.1200000){\hspace*{\Width}\raisebox{\Height}{B}}%
+%
+\settowidth{\Width}{C}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{C}\settodepth{\Depth}{C}\setlength{\Height}{-\Height}%
+\put(0.7114286,-0.5514286){\hspace*{\Width}\raisebox{\Height}{C}}%
+%
+\settowidth{\Width}{D}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{D}\settodepth{\Depth}{D}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(1.6714286,0.3600000){\hspace*{\Width}\raisebox{\Height}{D}}%
+%
+{%
+\color[rgb]{0,0,1}%
+\settowidth{\Width}{M}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{M}\settodepth{\Depth}{M}\setlength{\Height}{-\Height}%
+\put(-0.8714286,-0.2514286){\hspace*{\Width}\raisebox{\Height}{M}}%
+%
+}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/letter4.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/letter4.tex
new file mode 100644
index 0000000000..0c315fc6b4
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/letter4.tex
@@ -0,0 +1,545 @@
+%%% letter4.tex 2014-11-20 9:17
+%%% sampleu3.sce 2014-11-17 19:14
+{\unitlength=1cm%
+\begin{picture}%
+( 9.97000, 4.53000)( -5.83000, -2.11000)%
+\special{pn 8}%
+%
+\normalsize%
+\settowidth{\Width}{w}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{w}\settodepth{\Depth}{w}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-3.0000,0.0000){\hspace*{\Width}\raisebox{\Height}{w}}%
+%
+%
+\settowidth{\Width}{e}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{e}\settodepth{\Depth}{e}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-1.0000,0.0000){\hspace*{\Width}\raisebox{\Height}{e}}%
+%
+%
+\settowidth{\Width}{s}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{s}\settodepth{\Depth}{s}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-2.0000,-1.0000){\hspace*{\Width}\raisebox{\Height}{s}}%
+%
+%
+\settowidth{\Width}{n}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{n}\settodepth{\Depth}{n}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-2.0000,1.0000){\hspace*{\Width}\raisebox{\Height}{n}}%
+%
+%
+\settowidth{\Width}{w2}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{w2}\settodepth{\Depth}{w2}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-4.0000,0.0100){\hspace*{\Width}\raisebox{\Height}{w2}}%
+%
+%
+\settowidth{\Width}{e2}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{e2}\settodepth{\Depth}{e2}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-0.0300,0.0100){\hspace*{\Width}\raisebox{\Height}{e2}}%
+%
+%
+\settowidth{\Width}{c}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{c}\settodepth{\Depth}{c}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-2.0000,0.0000){\hspace*{\Width}\raisebox{\Height}{c}}%
+%
+%
+\settowidth{\Width}{nw}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{nw}\settodepth{\Depth}{nw}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-2.7800,0.7300){\hspace*{\Width}\raisebox{\Height}{nw}}%
+%
+%
+\settowidth{\Width}{sw}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{sw}\settodepth{\Depth}{sw}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-2.8100,-0.8100){\hspace*{\Width}\raisebox{\Height}{sw}}%
+%
+%
+\settowidth{\Width}{ne}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{ne}\settodepth{\Depth}{ne}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-1.1600,0.8200){\hspace*{\Width}\raisebox{\Height}{ne}}%
+%
+%
+\settowidth{\Width}{n2w2}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{n2w2}\settodepth{\Depth}{n2w2}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-3.6300,1.3800){\hspace*{\Width}\raisebox{\Height}{n2w2}}%
+%
+%
+\settowidth{\Width}{e4}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{e4}\settodepth{\Depth}{e4}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(1.9100,-0.0100){\hspace*{\Width}\raisebox{\Height}{e4}}%
+%
+%
+\settowidth{\Width}{se}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{se}\settodepth{\Depth}{se}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-1.1700,-0.7800){\hspace*{\Width}\raisebox{\Height}{se}}%
+%
+%
+\settowidth{\Width}{w3}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{w3}\settodepth{\Depth}{w3}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-4.6000,0.0100){\hspace*{\Width}\raisebox{\Height}{w3}}%
+%
+%
+\settowidth{\Width}{w4}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{w4}\settodepth{\Depth}{w4}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-5.4000,0.0200){\hspace*{\Width}\raisebox{\Height}{w4}}%
+%
+%
+\settowidth{\Width}{s2}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{s2}\settodepth{\Depth}{s2}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-1.9900,-1.2700){\hspace*{\Width}\raisebox{\Height}{s2}}%
+%
+%
+\settowidth{\Width}{s3}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{s3}\settodepth{\Depth}{s3}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-1.9900,-1.5700){\hspace*{\Width}\raisebox{\Height}{s3}}%
+%
+%
+\settowidth{\Width}{n2}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{n2}\settodepth{\Depth}{n2}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-2.0000,1.3800){\hspace*{\Width}\raisebox{\Height}{n2}}%
+%
+%
+\settowidth{\Width}{n3}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{n3}\settodepth{\Depth}{n3}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-2.0000,1.7600){\hspace*{\Width}\raisebox{\Height}{n3}}%
+%
+%
+\settowidth{\Width}{s4}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{s4}\settodepth{\Depth}{s4}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-1.9800,-1.9200){\hspace*{\Width}\raisebox{\Height}{s4}}%
+%
+%
+\settowidth{\Width}{n4}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{n4}\settodepth{\Depth}{n4}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-1.9800,2.0900){\hspace*{\Width}\raisebox{\Height}{n4}}%
+%
+%
+\settowidth{\Width}{s2w2}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{s2w2}\settodepth{\Depth}{s2w2}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-3.6300,-1.4400){\hspace*{\Width}\raisebox{\Height}{s2w2}}%
+%
+%
+\settowidth{\Width}{s2e2}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{s2e2}\settodepth{\Depth}{s2e2}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-0.2900,-1.4300){\hspace*{\Width}\raisebox{\Height}{s2e2}}%
+%
+%
+\settowidth{\Width}{n2e2}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{n2e2}\settodepth{\Depth}{n2e2}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-0.2400,1.4500){\hspace*{\Width}\raisebox{\Height}{n2e2}}%
+%
+%
+\settowidth{\Width}{ne2}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{ne2}\settodepth{\Depth}{ne2}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-0.2700,0.7400){\hspace*{\Width}\raisebox{\Height}{ne2}}%
+%
+%
+\settowidth{\Width}{e3}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{e3}\settodepth{\Depth}{e3}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(1.2300,0.0000){\hspace*{\Width}\raisebox{\Height}{e3}}%
+%
+%
+\special{pn 8}%
+\special{pa -925 4}\special{pa -1067 4}%
+\special{fp}%
+\special{pn 8}%
+\special{pa -992 -20}\special{pa -1067 4}\special{pa -992 28}\special{pa -992 4}\special{pa -992 -20}%
+\special{sh 1}\special{ip}%
+\special{pn 8}%
+\special{pa -992 -20}\special{pa -1067 4}\special{pa -992 28}\special{pa -992 4}\special{pa -992 -20}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 8}%
+\special{pa -787 -130}\special{pa -787 -276}%
+\special{fp}%
+\special{pn 8}%
+\special{pa -763 -201}\special{pa -787 -276}\special{pa -812 -201}\special{pa -787 -201}%
+\special{pa -763 -201}\special{sh 1}\special{ip}%
+\special{pn 8}%
+\special{pa -763 -201}\special{pa -787 -276}\special{pa -812 -201}\special{pa -787 -201}%
+\special{pa -763 -201}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 8}%
+\special{pa -787 134}\special{pa -787 295}%
+\special{fp}%
+\special{pn 8}%
+\special{pa -812 220}\special{pa -787 295}\special{pa -763 220}\special{pa -787 220}%
+\special{pa -812 220}\special{sh 1}\special{ip}%
+\special{pn 8}%
+\special{pa -812 220}\special{pa -787 295}\special{pa -763 220}\special{pa -787 220}%
+\special{pa -812 220}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 8}%
+\special{pa -661 -12}\special{pa -520 -4}%
+\special{fp}%
+\special{pn 8}%
+\special{pa -596 16}\special{pa -520 -4}\special{pa -593 -32}\special{pa -594 -8}%
+\special{pa -596 16}\special{sh 1}\special{ip}%
+\special{pn 8}%
+\special{pa -596 16}\special{pa -520 -4}\special{pa -593 -32}\special{pa -594 -8}%
+\special{pa -596 16}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 8}%
+\special{pa -1311 -4}\special{pa -1437 -4}%
+\special{fp}%
+\special{pn 8}%
+\special{pa -1362 -28}\special{pa -1437 -4}\special{pa -1362 20}\special{pa -1362 -4}%
+\special{pa -1362 -28}\special{sh 1}\special{ip}%
+\special{pn 8}%
+\special{pa -1362 -28}\special{pa -1437 -4}\special{pa -1362 20}\special{pa -1362 -4}%
+\special{pa -1362 -28}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 8}%
+\special{pa -295 8}\special{pa -177 0}%
+\special{fp}%
+\special{pn 8}%
+\special{pa -250 29}\special{pa -177 0}\special{pa -254 -19}\special{pa -252 5}\special{pa -250 29}%
+\special{sh 1}\special{ip}%
+\special{pn 8}%
+\special{pa -250 29}\special{pa -177 0}\special{pa -254 -19}\special{pa -252 5}\special{pa -250 29}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 8}%
+\special{pa 189 4}\special{pa 319 4}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 244 28}\special{pa 319 4}\special{pa 244 -20}\special{pa 244 4}\special{pa 244 28}%
+\special{sh 1}\special{ip}%
+\special{pn 8}%
+\special{pa 244 28}\special{pa 319 4}\special{pa 244 -20}\special{pa 244 4}\special{pa 244 28}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 8}%
+\special{pa -331 -402}\special{pa -213 -484}%
+\special{fp}%
+\special{pn 8}%
+\special{pa -260 -421}\special{pa -213 -484}\special{pa -288 -461}\special{pa -274 -441}%
+\special{pa -260 -421}\special{sh 1}\special{ip}%
+\special{pn 8}%
+\special{pa -260 -421}\special{pa -213 -484}\special{pa -288 -461}\special{pa -274 -441}%
+\special{pa -260 -421}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 8}%
+\special{pa -350 390}\special{pa -220 484}%
+\special{fp}%
+\special{pn 8}%
+\special{pa -295 460}\special{pa -220 484}\special{pa -267 421}\special{pa -281 440}%
+\special{pa -295 460}\special{sh 1}\special{ip}%
+\special{pn 8}%
+\special{pa -295 460}\special{pa -220 484}\special{pa -267 421}\special{pa -281 440}%
+\special{pa -295 460}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 8}%
+\special{pa -1181 390}\special{pa -1276 469}%
+\special{fp}%
+\special{pn 8}%
+\special{pa -1234 402}\special{pa -1276 469}\special{pa -1202 439}\special{pa -1218 421}%
+\special{pa -1234 402}\special{sh 1}\special{ip}%
+\special{pn 8}%
+\special{pa -1234 402}\special{pa -1276 469}\special{pa -1202 439}\special{pa -1218 421}%
+\special{pa -1234 402}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 8}%
+\special{pa -693 106}\special{pa -606 205}%
+\special{fp}%
+\special{pn 8}%
+\special{pa -674 165}\special{pa -606 205}\special{pa -638 132}\special{pa -656 149}%
+\special{pa -674 165}\special{sh 1}\special{ip}%
+\special{pn 8}%
+\special{pa -674 165}\special{pa -606 205}\special{pa -638 132}\special{pa -656 149}%
+\special{pa -674 165}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 8}%
+\special{pa -669 -106}\special{pa -594 -189}%
+\special{fp}%
+\special{pn 8}%
+\special{pa -627 -117}\special{pa -594 -189}\special{pa -663 -150}\special{pa -645 -133}%
+\special{pa -627 -117}\special{sh 1}\special{ip}%
+\special{pn 8}%
+\special{pa -627 -117}\special{pa -594 -189}\special{pa -663 -150}\special{pa -645 -133}%
+\special{pa -627 -117}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 8}%
+\special{pa -886 -87}\special{pa -1008 -205}%
+\special{fp}%
+\special{pn 8}%
+\special{pa -937 -170}\special{pa -1008 -205}\special{pa -971 -135}\special{pa -954 -153}%
+\special{pa -937 -170}\special{sh 1}\special{ip}%
+\special{pn 8}%
+\special{pa -937 -170}\special{pa -1008 -205}\special{pa -971 -135}\special{pa -954 -153}%
+\special{pa -937 -170}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 8}%
+\special{pa -917 122}\special{pa -992 220}%
+\special{fp}%
+\special{pn 8}%
+\special{pa -966 146}\special{pa -992 220}\special{pa -927 176}\special{pa -947 161}%
+\special{pa -966 146}\special{sh 1}\special{ip}%
+\special{pn 8}%
+\special{pa -966 146}\special{pa -992 220}\special{pa -927 176}\special{pa -947 161}%
+\special{pa -966 146}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 8}%
+\special{pa -1189 -370}\special{pa -1311 -457}%
+\special{fp}%
+\special{pn 8}%
+\special{pa -1236 -433}\special{pa -1311 -457}\special{pa -1264 -394}\special{pa -1250 -413}%
+\special{pa -1236 -433}\special{sh 1}\special{ip}%
+\special{pn 8}%
+\special{pa -1236 -433}\special{pa -1311 -457}\special{pa -1264 -394}\special{pa -1250 -413}%
+\special{pa -1236 -433}%
+\special{fp}%
+\special{pn 8}%
+\settowidth{\Width}{$\cdot$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\cdot$}\settodepth{\Depth}{$\cdot$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(3.4200,-0.0100){\hspace*{\Width}\raisebox{\Height}{$\cdot$}}%
+%
+%
+\settowidth{\Width}{$\cdot$}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{$\cdot$}\settodepth{\Depth}{$\cdot$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(3.3700,-0.0100){\hspace*{\Width}\raisebox{\Height}{$\cdot$}}%
+%
+%
+\settowidth{\Width}{$\cdot$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$\cdot$}\settodepth{\Depth}{$\cdot$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(3.4700,-0.0100){\hspace*{\Width}\raisebox{\Height}{$\cdot$}}%
+%
+%
+\settowidth{\Width}{$\cdot$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\cdot$}\settodepth{\Depth}{$\cdot$}\setlength{\Height}{\Depth}%
+\put(3.4200,0.0400){\hspace*{\Width}\raisebox{\Height}{$\cdot$}}%
+%
+%
+\settowidth{\Width}{$\cdot$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\cdot$}\settodepth{\Depth}{$\cdot$}\setlength{\Height}{-\Height}%
+\put(3.4200,-0.0600){\hspace*{\Width}\raisebox{\Height}{$\cdot$}}%
+%
+%
+\settowidth{\Width}{$\cdot$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$\cdot$}\settodepth{\Depth}{$\cdot$}\setlength{\Height}{\Depth}%
+\put(3.4700,0.0400){\hspace*{\Width}\raisebox{\Height}{$\cdot$}}%
+%
+%
+\settowidth{\Width}{$\cdot$}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{$\cdot$}\settodepth{\Depth}{$\cdot$}\setlength{\Height}{\Depth}%
+\put(3.3700,0.0400){\hspace*{\Width}\raisebox{\Height}{$\cdot$}}%
+%
+%
+\settowidth{\Width}{$\cdot$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$\cdot$}\settodepth{\Depth}{$\cdot$}\setlength{\Height}{-\Height}%
+\put(3.4700,-0.0600){\hspace*{\Width}\raisebox{\Height}{$\cdot$}}%
+%
+%
+\settowidth{\Width}{$\cdot$}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{$\cdot$}\settodepth{\Depth}{$\cdot$}\setlength{\Height}{-\Height}%
+\put(3.3700,-0.0600){\hspace*{\Width}\raisebox{\Height}{$\cdot$}}%
+%
+%
+\settowidth{\Width}{$\cdot$}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{$\cdot$}\settodepth{\Depth}{$\cdot$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(3.2700,-0.0100){\hspace*{\Width}\raisebox{\Height}{$\cdot$}}%
+%
+%
+\settowidth{\Width}{$\cdot$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$\cdot$}\settodepth{\Depth}{$\cdot$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(3.5700,-0.0100){\hspace*{\Width}\raisebox{\Height}{$\cdot$}}%
+%
+%
+\settowidth{\Width}{$\cdot$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\cdot$}\settodepth{\Depth}{$\cdot$}\setlength{\Height}{\Depth}%
+\put(3.4200,0.1400){\hspace*{\Width}\raisebox{\Height}{$\cdot$}}%
+%
+%
+\settowidth{\Width}{$\cdot$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\cdot$}\settodepth{\Depth}{$\cdot$}\setlength{\Height}{-\Height}%
+\put(3.4200,-0.1600){\hspace*{\Width}\raisebox{\Height}{$\cdot$}}%
+%
+%
+\settowidth{\Width}{$\cdot$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$\cdot$}\settodepth{\Depth}{$\cdot$}\setlength{\Height}{\Depth}%
+\put(3.5700,0.0400){\hspace*{\Width}\raisebox{\Height}{$\cdot$}}%
+%
+%
+\settowidth{\Width}{$\cdot$}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{$\cdot$}\settodepth{\Depth}{$\cdot$}\setlength{\Height}{\Depth}%
+\put(3.2700,0.0400){\hspace*{\Width}\raisebox{\Height}{$\cdot$}}%
+%
+%
+\settowidth{\Width}{$\cdot$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\cdot$}\settodepth{\Depth}{$\cdot$}\setlength{\Height}{\Depth}%
+\put(3.4200,0.1400){\hspace*{\Width}\raisebox{\Height}{$\cdot$}}%
+%
+%
+\settowidth{\Width}{$\cdot$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$\cdot$}\settodepth{\Depth}{$\cdot$}\setlength{\Height}{-\Height}%
+\put(3.5700,-0.0600){\hspace*{\Width}\raisebox{\Height}{$\cdot$}}%
+%
+%
+\settowidth{\Width}{$\cdot$}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{$\cdot$}\settodepth{\Depth}{$\cdot$}\setlength{\Height}{-\Height}%
+\put(3.2700,-0.0600){\hspace*{\Width}\raisebox{\Height}{$\cdot$}}%
+%
+%
+\settowidth{\Width}{$\cdot$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$\cdot$}\settodepth{\Depth}{$\cdot$}\setlength{\Height}{\Depth}%
+\put(3.4700,0.1400){\hspace*{\Width}\raisebox{\Height}{$\cdot$}}%
+%
+%
+\settowidth{\Width}{$\cdot$}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{$\cdot$}\settodepth{\Depth}{$\cdot$}\setlength{\Height}{\Depth}%
+\put(3.3700,0.1400){\hspace*{\Width}\raisebox{\Height}{$\cdot$}}%
+%
+%
+\settowidth{\Width}{$\cdot$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\cdot$}\settodepth{\Depth}{$\cdot$}\setlength{\Height}{\Depth}%
+\put(3.4200,0.2400){\hspace*{\Width}\raisebox{\Height}{$\cdot$}}%
+%
+%
+\settowidth{\Width}{$\cdot$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\cdot$}\settodepth{\Depth}{$\cdot$}\setlength{\Height}{\Depth}%
+\put(3.4200,0.3400){\hspace*{\Width}\raisebox{\Height}{$\cdot$}}%
+%
+%
+\settowidth{\Width}{$\cdot$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$\cdot$}\settodepth{\Depth}{$\cdot$}\setlength{\Height}{-\Height}%
+\put(3.4700,-0.1600){\hspace*{\Width}\raisebox{\Height}{$\cdot$}}%
+%
+%
+\settowidth{\Width}{$\cdot$}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{$\cdot$}\settodepth{\Depth}{$\cdot$}\setlength{\Height}{-\Height}%
+\put(3.3700,-0.1600){\hspace*{\Width}\raisebox{\Height}{$\cdot$}}%
+%
+%
+\settowidth{\Width}{$\cdot$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$\cdot$}\settodepth{\Depth}{$\cdot$}\setlength{\Height}{\Depth}%
+\put(3.5700,0.1400){\hspace*{\Width}\raisebox{\Height}{$\cdot$}}%
+%
+%
+\settowidth{\Width}{$\cdot$}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{$\cdot$}\settodepth{\Depth}{$\cdot$}\setlength{\Height}{\Depth}%
+\put(3.2700,0.1400){\hspace*{\Width}\raisebox{\Height}{$\cdot$}}%
+%
+%
+\settowidth{\Width}{$\cdot$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$\cdot$}\settodepth{\Depth}{$\cdot$}\setlength{\Height}{-\Height}%
+\put(3.5700,-0.1600){\hspace*{\Width}\raisebox{\Height}{$\cdot$}}%
+%
+%
+\settowidth{\Width}{$\cdot$}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{$\cdot$}\settodepth{\Depth}{$\cdot$}\setlength{\Height}{-\Height}%
+\put(3.2700,-0.1600){\hspace*{\Width}\raisebox{\Height}{$\cdot$}}%
+%
+%
+\settowidth{\Width}{$\cdot$}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{$\cdot$}\settodepth{\Depth}{$\cdot$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(3.2200,-0.0100){\hspace*{\Width}\raisebox{\Height}{$\cdot$}}%
+%
+%
+\settowidth{\Width}{$\cdot$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$\cdot$}\settodepth{\Depth}{$\cdot$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(3.6200,-0.0100){\hspace*{\Width}\raisebox{\Height}{$\cdot$}}%
+%
+%
+\settowidth{\Width}{$\cdot$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\cdot$}\settodepth{\Depth}{$\cdot$}\setlength{\Height}{\Depth}%
+\put(3.4200,0.1900){\hspace*{\Width}\raisebox{\Height}{$\cdot$}}%
+%
+%
+\settowidth{\Width}{$\cdot$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\cdot$}\settodepth{\Depth}{$\cdot$}\setlength{\Height}{-\Height}%
+\put(3.4200,-0.2100){\hspace*{\Width}\raisebox{\Height}{$\cdot$}}%
+%
+%
+\settowidth{\Width}{$\cdot$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$\cdot$}\settodepth{\Depth}{$\cdot$}\setlength{\Height}{\Depth}%
+\put(3.6200,0.0400){\hspace*{\Width}\raisebox{\Height}{$\cdot$}}%
+%
+%
+\settowidth{\Width}{$\cdot$}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{$\cdot$}\settodepth{\Depth}{$\cdot$}\setlength{\Height}{\Depth}%
+\put(3.2200,0.0400){\hspace*{\Width}\raisebox{\Height}{$\cdot$}}%
+%
+%
+\settowidth{\Width}{$\cdot$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\cdot$}\settodepth{\Depth}{$\cdot$}\setlength{\Height}{\Depth}%
+\put(3.4200,0.1900){\hspace*{\Width}\raisebox{\Height}{$\cdot$}}%
+%
+%
+\settowidth{\Width}{$\cdot$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$\cdot$}\settodepth{\Depth}{$\cdot$}\setlength{\Height}{-\Height}%
+\put(3.6200,-0.0600){\hspace*{\Width}\raisebox{\Height}{$\cdot$}}%
+%
+%
+\settowidth{\Width}{$\cdot$}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{$\cdot$}\settodepth{\Depth}{$\cdot$}\setlength{\Height}{-\Height}%
+\put(3.2200,-0.0600){\hspace*{\Width}\raisebox{\Height}{$\cdot$}}%
+%
+%
+\settowidth{\Width}{$\cdot$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$\cdot$}\settodepth{\Depth}{$\cdot$}\setlength{\Height}{\Depth}%
+\put(3.6200,0.1900){\hspace*{\Width}\raisebox{\Height}{$\cdot$}}%
+%
+%
+\settowidth{\Width}{$\cdot$}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{$\cdot$}\settodepth{\Depth}{$\cdot$}\setlength{\Height}{\Depth}%
+\put(3.2200,0.1900){\hspace*{\Width}\raisebox{\Height}{$\cdot$}}%
+%
+%
+\settowidth{\Width}{$\cdot$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\cdot$}\settodepth{\Depth}{$\cdot$}\setlength{\Height}{-\Height}%
+\put(3.4200,-0.2600){\hspace*{\Width}\raisebox{\Height}{$\cdot$}}%
+%
+%
+\settowidth{\Width}{$\cdot$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\cdot$}\settodepth{\Depth}{$\cdot$}\setlength{\Height}{-\Height}%
+\put(3.4200,-0.3600){\hspace*{\Width}\raisebox{\Height}{$\cdot$}}%
+%
+%
+\settowidth{\Width}{$\cdot$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$\cdot$}\settodepth{\Depth}{$\cdot$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(3.6700,-0.0100){\hspace*{\Width}\raisebox{\Height}{$\cdot$}}%
+%
+%
+\settowidth{\Width}{$\cdot$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$\cdot$}\settodepth{\Depth}{$\cdot$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(3.7700,-0.0100){\hspace*{\Width}\raisebox{\Height}{$\cdot$}}%
+%
+%
+\settowidth{\Width}{$\cdot$}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{$\cdot$}\settodepth{\Depth}{$\cdot$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(3.1700,-0.0100){\hspace*{\Width}\raisebox{\Height}{$\cdot$}}%
+%
+%
+\settowidth{\Width}{$\cdot$}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{$\cdot$}\settodepth{\Depth}{$\cdot$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(3.0700,-0.0100){\hspace*{\Width}\raisebox{\Height}{$\cdot$}}%
+%
+%
+\settowidth{\Width}{$\cdot$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$\cdot$}\settodepth{\Depth}{$\cdot$}\setlength{\Height}{-\Height}%
+\put(3.6200,-0.2100){\hspace*{\Width}\raisebox{\Height}{$\cdot$}}%
+%
+%
+\special{pa -508 0}\special{pa -510 -35}\special{pa -517 -70}\special{pa -527 -103}%
+\special{pa -542 -135}\special{pa -561 -164}\special{pa -584 -191}\special{pa -609 -215}%
+\special{pa -638 -236}\special{pa -668 -253}\special{pa -701 -266}\special{pa -735 -275}%
+\special{pa -770 -279}\special{pa -805 -279}\special{pa -840 -275}\special{pa -874 -266}%
+\special{pa -906 -253}\special{pa -937 -236}\special{pa -966 -215}\special{pa -991 -191}%
+\special{pa -1014 -164}\special{pa -1032 -135}\special{pa -1047 -103}\special{pa -1058 -70}%
+\special{pa -1065 -35}\special{pa -1067 0}\special{pa -1065 35}\special{pa -1058 70}%
+\special{pa -1047 103}\special{pa -1032 135}\special{pa -1014 164}\special{pa -991 191}%
+\special{pa -966 215}\special{pa -937 236}\special{pa -906 253}\special{pa -874 266}%
+\special{pa -840 275}\special{pa -805 279}\special{pa -770 279}\special{pa -735 275}%
+\special{pa -701 266}\special{pa -668 253}\special{pa -638 236}\special{pa -609 215}%
+\special{pa -584 191}\special{pa -561 164}\special{pa -542 135}\special{pa -527 103}%
+\special{pa -517 70}\special{pa -510 35}\special{pa -508 0}%
+\special{fp}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/lineplot.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/lineplot.tex
new file mode 100644
index 0000000000..306082bafb
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/lineplot.tex
@@ -0,0 +1,80 @@
+%%% test.tex 2014-10-19 15:24
+%%% test.sce 2014-10-19 15:24
+{\unitlength=5mm%
+\begin{picture}%
+( 11.00000, 5.00000)( -6.00000, -1.00000)%
+\special{pn 8}%
+%
+\special{pn 4}%
+\special{pa -787 -197}\special{pa 394 -787}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 16}%
+\special{pa -1181 197}\special{pa 787 -787}%
+\special{fp}%
+\special{pn 8}%
+\special{pa -787 197}\special{pa -753 179}\special{fp}\special{pa -718 162}\special{pa -683 145}\special{fp}%
+\special{pa -648 127}\special{pa -614 110}\special{fp}\special{pa -579 93}\special{pa -544 75}\special{fp}%
+\special{pa -509 58}\special{pa -475 41}\special{fp}\special{pa -440 23}\special{pa -405 6}\special{fp}%
+\special{pa -371 -12}\special{pa -336 -29}\special{fp}\special{pa -301 -46}\special{pa -266 -64}\special{fp}%
+\special{pa -232 -81}\special{pa -197 -98}\special{fp}\special{pa -162 -116}\special{pa -127 -133}\special{fp}%
+\special{pa -93 -151}\special{pa -58 -168}\special{fp}\special{pa -23 -185}\special{pa 12 -203}\special{fp}%
+\special{pa 46 -220}\special{pa 81 -237}\special{fp}\special{pa 116 -255}\special{pa 151 -272}\special{fp}%
+\special{pa 185 -289}\special{pa 220 -307}\special{fp}\special{pa 255 -324}\special{pa 289 -342}\special{fp}%
+\special{pa 324 -359}\special{pa 359 -376}\special{fp}\special{pa 394 -394}\special{pa 428 -411}\special{fp}%
+\special{pa 463 -428}\special{pa 498 -446}\special{fp}\special{pa 533 -463}\special{pa 567 -481}\special{fp}%
+\special{pa 602 -498}\special{pa 637 -515}\special{fp}\special{pa 672 -533}\special{pa 706 -550}\special{fp}%
+\special{pa 741 -567}\special{pa 776 -585}\special{fp}\special{pa 811 -602}\special{pa 845 -619}\special{fp}%
+\special{pa 880 -637}\special{pa 915 -654}\special{fp}\special{pa 950 -672}\special{pa 984 -689}\special{fp}%
+%
+%
+\special{pn 8}%
+\special{pa -397 199}\special{pa -390 195}\special{fp}\special{pa -362 181}\special{pa -355 177}\special{fp}%
+\special{pa -327 163}\special{pa -319 160}\special{fp}\special{pa -291 146}\special{pa -284 142}\special{fp}%
+\special{pa -256 128}\special{pa -249 124}\special{fp}\special{pa -221 110}\special{pa -213 107}\special{fp}%
+\special{pa -185 93}\special{pa -178 89}\special{fp}\special{pa -150 75}\special{pa -143 71}\special{fp}%
+\special{pa -115 57}\special{pa -107 54}\special{fp}\special{pa -79 40}\special{pa -72 36}\special{fp}%
+\special{pa -44 22}\special{pa -37 18}\special{fp}\special{pa -9 4}\special{pa -1 1}\special{fp}%
+\special{pa 27 -13}\special{pa 34 -17}\special{fp}\special{pa 62 -31}\special{pa 69 -35}\special{fp}%
+\special{pa 97 -49}\special{pa 105 -52}\special{fp}\special{pa 133 -66}\special{pa 140 -70}\special{fp}%
+\special{pa 168 -84}\special{pa 175 -88}\special{fp}\special{pa 203 -102}\special{pa 211 -105}\special{fp}%
+\special{pa 239 -119}\special{pa 246 -123}\special{fp}\special{pa 274 -137}\special{pa 281 -141}\special{fp}%
+\special{pa 309 -155}\special{pa 317 -158}\special{fp}\special{pa 345 -172}\special{pa 352 -176}\special{fp}%
+\special{pa 380 -190}\special{pa 387 -194}\special{fp}\special{pa 415 -208}\special{pa 423 -211}\special{fp}%
+\special{pa 451 -225}\special{pa 458 -229}\special{fp}\special{pa 486 -243}\special{pa 493 -247}\special{fp}%
+\special{pa 521 -261}\special{pa 529 -264}\special{fp}\special{pa 557 -278}\special{pa 564 -282}\special{fp}%
+\special{pa 592 -296}\special{pa 599 -300}\special{fp}\special{pa 627 -314}\special{pa 635 -317}\special{fp}%
+\special{pa 663 -331}\special{pa 670 -335}\special{fp}\special{pa 698 -349}\special{pa 705 -353}\special{fp}%
+\special{pa 733 -367}\special{pa 741 -370}\special{fp}\special{pa 769 -384}\special{pa 776 -388}\special{fp}%
+\special{pa 804 -402}\special{pa 811 -406}\special{fp}\special{pa 839 -420}\special{pa 847 -423}\special{fp}%
+\special{pa 875 -437}\special{pa 882 -441}\special{fp}\special{pa 910 -455}\special{pa 917 -459}\special{fp}%
+\special{pa 945 -473}\special{pa 952 -476}\special{fp}\special{pa 981 -490}\special{pa 988 -494}\special{fp}%
+\special{pn 8}%
+\special{pa -779 -205}\special{pa -786 -209}\special{pa -793 -207}\special{pa -798 -202}%
+\special{pa -799 -195}\special{pa -796 -188}\special{pa -789 -185}\special{pa -782 -186}%
+\special{pa -777 -191}\special{pa -776 -199}\special{pa -779 -205}\special{sh 1}\special{fp}%
+\settowidth{\Width}{A}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{A}\settodepth{\Depth}{A}\setlength{\Height}{\Depth}%
+\put(-4.0500,1.0500){\hspace*{\Width}\raisebox{\Height}{A}}%
+%
+%
+\special{pa -1181 0}\special{pa 984 0}%
+\special{fp}%
+\special{pa 0 197}\special{pa 0 -787}%
+\special{fp}%
+\settowidth{\Width}{$x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(5.0500,0.0000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{\Depth}%
+\put(0.0000,4.0500){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+%
+\settowidth{\Width}{O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(-0.0500,-0.0500){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/listplot1.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/listplot1.tex
new file mode 100644
index 0000000000..678392eb23
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/listplot1.tex
@@ -0,0 +1,10 @@
+%%% test.tex 2014-10-14 16:47
+%%% test.sce 2014-10-14 16:46
+{\unitlength=1cm%
+\begin{picture}%
+( 5.09000, 3.62000)( -2.60000, 0.13000)%
+\special{pn 8}%
+%
+\special{pa -394 -1181}\special{pa 787 -394}\special{pa -787 -394}\special{pa -394 -1181}%
+\special{fp}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/listplot2.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/listplot2.tex
new file mode 100644
index 0000000000..ecfe664ae4
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/listplot2.tex
@@ -0,0 +1,376 @@
+%%% test.tex 2014-10-15 13:37
+%%% test.sce 2014-10-15 13:37
+{\unitlength=1cm%
+\begin{picture}%
+( 6.50000, 6.00000)( -0.50000, -0.50000)%
+\special{pn 8}%
+%
+\special{pa 0 0}\special{pa 16 -28}\special{pa 31 -55}\special{pa 47 -87}\special{pa 67 -114}%
+\special{pa 83 -142}\special{pa 98 -169}\special{pa 114 -201}\special{pa 130 -228}%
+\special{pa 150 -256}\special{pa 165 -283}\special{pa 181 -311}\special{pa 197 -343}%
+\special{pa 213 -370}\special{pa 228 -398}\special{pa 244 -425}\special{pa 264 -453}%
+\special{pa 280 -484}\special{pa 295 -512}\special{pa 311 -539}\special{pa 327 -567}%
+\special{pa 343 -598}\special{pa 362 -626}\special{pa 378 -654}\special{pa 394 -681}%
+\special{pa 409 -709}\special{pa 425 -740}\special{pa 441 -768}\special{pa 461 -795}%
+\special{pa 476 -823}\special{pa 492 -854}\special{pa 508 -882}\special{pa 524 -909}%
+\special{pa 543 -882}\special{pa 559 -854}\special{pa 575 -823}\special{pa 591 -795}%
+\special{pa 606 -768}\special{pa 622 -740}\special{pa 642 -709}\special{pa 657 -681}%
+\special{pa 673 -654}\special{pa 689 -626}\special{pa 705 -598}\special{pa 720 -567}%
+\special{pa 740 -539}\special{pa 756 -512}\special{pa 772 -484}\special{pa 787 -453}%
+\special{pa 756 -453}\special{pa 720 -453}\special{pa 689 -453}\special{pa 657 -453}%
+\special{pa 622 -453}\special{pa 591 -453}\special{pa 559 -453}\special{pa 524 -453}%
+\special{pa 543 -484}\special{pa 559 -512}\special{pa 575 -539}\special{pa 591 -567}%
+\special{pa 606 -539}\special{pa 622 -512}\special{pa 591 -512}\special{pa 559 -512}%
+\special{pa 575 -484}\special{pa 591 -453}\special{pa 606 -484}\special{pa 622 -512}%
+\special{pa 642 -484}\special{pa 657 -453}\special{pa 673 -484}\special{pa 689 -512}%
+\special{pa 705 -484}\special{pa 720 -453}\special{pa 740 -484}\special{pa 756 -512}%
+\special{pa 720 -512}\special{pa 689 -512}\special{pa 705 -539}\special{pa 720 -567}%
+\special{pa 689 -567}\special{pa 657 -567}\special{pa 673 -598}\special{pa 689 -626}%
+\special{pa 657 -626}\special{pa 622 -626}\special{pa 642 -598}\special{pa 657 -567}%
+\special{pa 622 -567}\special{pa 591 -567}\special{pa 606 -598}\special{pa 622 -626}%
+\special{pa 642 -654}\special{pa 657 -681}\special{pa 622 -681}\special{pa 591 -681}%
+\special{pa 559 -681}\special{pa 524 -681}\special{pa 543 -709}\special{pa 559 -740}%
+\special{pa 575 -709}\special{pa 591 -681}\special{pa 606 -709}\special{pa 622 -740}%
+\special{pa 591 -740}\special{pa 559 -740}\special{pa 575 -768}\special{pa 591 -795}%
+\special{pa 559 -795}\special{pa 524 -795}\special{pa 543 -823}\special{pa 559 -854}%
+\special{pa 524 -854}\special{pa 492 -854}\special{pa 508 -823}\special{pa 524 -795}%
+\special{pa 492 -795}\special{pa 461 -795}\special{pa 476 -768}\special{pa 492 -740}%
+\special{pa 461 -740}\special{pa 425 -740}\special{pa 445 -709}\special{pa 461 -681}%
+\special{pa 476 -709}\special{pa 492 -740}\special{pa 508 -709}\special{pa 524 -681}%
+\special{pa 492 -681}\special{pa 461 -681}\special{pa 425 -681}\special{pa 394 -681}%
+\special{pa 409 -654}\special{pa 425 -626}\special{pa 445 -598}\special{pa 461 -567}%
+\special{pa 425 -567}\special{pa 394 -567}\special{pa 409 -598}\special{pa 425 -626}%
+\special{pa 394 -626}\special{pa 362 -626}\special{pa 378 -598}\special{pa 394 -567}%
+\special{pa 362 -567}\special{pa 327 -567}\special{pa 346 -539}\special{pa 362 -512}%
+\special{pa 327 -512}\special{pa 295 -512}\special{pa 311 -484}\special{pa 327 -453}%
+\special{pa 346 -484}\special{pa 362 -512}\special{pa 378 -484}\special{pa 394 -453}%
+\special{pa 409 -484}\special{pa 425 -512}\special{pa 445 -484}\special{pa 461 -453}%
+\special{pa 476 -484}\special{pa 492 -512}\special{pa 461 -512}\special{pa 425 -512}%
+\special{pa 445 -539}\special{pa 461 -567}\special{pa 476 -539}\special{pa 492 -512}%
+\special{pa 508 -484}\special{pa 524 -453}\special{pa 492 -453}\special{pa 461 -453}%
+\special{pa 425 -453}\special{pa 394 -453}\special{pa 362 -453}\special{pa 327 -453}%
+\special{pa 295 -453}\special{pa 264 -453}\special{pa 280 -425}\special{pa 295 -398}%
+\special{pa 311 -370}\special{pa 327 -343}\special{pa 346 -311}\special{pa 362 -283}%
+\special{pa 378 -256}\special{pa 394 -228}\special{pa 362 -228}\special{pa 327 -228}%
+\special{pa 295 -228}\special{pa 264 -228}\special{pa 280 -256}\special{pa 295 -283}%
+\special{pa 311 -256}\special{pa 327 -228}\special{pa 346 -256}\special{pa 362 -283}%
+\special{pa 327 -283}\special{pa 295 -283}\special{pa 311 -311}\special{pa 327 -343}%
+\special{pa 295 -343}\special{pa 264 -343}\special{pa 280 -370}\special{pa 295 -398}%
+\special{pa 264 -398}\special{pa 228 -398}\special{pa 248 -370}\special{pa 264 -343}%
+\special{pa 228 -343}\special{pa 197 -343}\special{pa 213 -311}\special{pa 228 -283}%
+\special{pa 197 -283}\special{pa 165 -283}\special{pa 181 -256}\special{pa 197 -228}%
+\special{pa 213 -256}\special{pa 228 -283}\special{pa 248 -256}\special{pa 264 -228}%
+\special{pa 228 -228}\special{pa 197 -228}\special{pa 165 -228}\special{pa 130 -228}%
+\special{pa 150 -201}\special{pa 165 -169}\special{pa 181 -142}\special{pa 197 -114}%
+\special{pa 165 -114}\special{pa 130 -114}\special{pa 150 -142}\special{pa 165 -169}%
+\special{pa 130 -169}\special{pa 98 -169}\special{pa 114 -142}\special{pa 130 -114}%
+\special{pa 98 -114}\special{pa 67 -114}\special{pa 83 -87}\special{pa 98 -55}\special{pa 67 -55}%
+\special{pa 31 -55}\special{pa 51 -28}\special{pa 67 0}\special{pa 83 -28}\special{pa 98 -55}%
+\special{pa 114 -28}\special{pa 130 0}\special{pa 150 -28}\special{pa 165 -55}\special{pa 181 -28}%
+\special{pa 197 0}\special{pa 213 -28}\special{pa 228 -55}\special{pa 197 -55}\special{pa 165 -55}%
+\special{fp}%
+\special{pa 165 -55}\special{pa 181 -87}\special{pa 197 -114}\special{pa 213 -87}%
+\special{pa 228 -55}\special{pa 248 -28}\special{pa 264 0}\special{pa 280 -28}\special{pa 295 -55}%
+\special{pa 311 -87}\special{pa 327 -114}\special{pa 346 -87}\special{pa 362 -55}%
+\special{pa 327 -55}\special{pa 295 -55}\special{pa 311 -28}\special{pa 327 0}\special{pa 346 -28}%
+\special{pa 362 -55}\special{pa 378 -28}\special{pa 394 0}\special{pa 409 -28}\special{pa 425 -55}%
+\special{pa 445 -28}\special{pa 461 0}\special{pa 476 -28}\special{pa 492 -55}\special{pa 461 -55}%
+\special{pa 425 -55}\special{pa 445 -87}\special{pa 461 -114}\special{pa 425 -114}%
+\special{pa 394 -114}\special{pa 409 -142}\special{pa 425 -169}\special{pa 394 -169}%
+\special{pa 362 -169}\special{pa 378 -142}\special{pa 394 -114}\special{pa 362 -114}%
+\special{pa 327 -114}\special{pa 346 -142}\special{pa 362 -169}\special{pa 378 -201}%
+\special{pa 394 -228}\special{pa 409 -201}\special{pa 425 -169}\special{pa 445 -142}%
+\special{pa 461 -114}\special{pa 476 -87}\special{pa 492 -55}\special{pa 508 -28}%
+\special{pa 524 0}\special{pa 539 -28}\special{pa 559 -55}\special{pa 575 -87}\special{pa 591 -114}%
+\special{pa 606 -142}\special{pa 622 -169}\special{pa 638 -201}\special{pa 657 -228}%
+\special{pa 673 -201}\special{pa 689 -169}\special{pa 705 -142}\special{pa 720 -114}%
+\special{pa 689 -114}\special{pa 657 -114}\special{pa 673 -142}\special{pa 689 -169}%
+\special{pa 657 -169}\special{pa 622 -169}\special{pa 638 -142}\special{pa 657 -114}%
+\special{pa 622 -114}\special{pa 591 -114}\special{pa 606 -87}\special{pa 622 -55}%
+\special{pa 591 -55}\special{pa 559 -55}\special{pa 575 -28}\special{pa 591 0}\special{pa 606 -28}%
+\special{pa 622 -55}\special{pa 638 -28}\special{pa 657 0}\special{pa 673 -28}\special{pa 689 -55}%
+\special{pa 705 -28}\special{pa 720 0}\special{pa 736 -28}\special{pa 756 -55}\special{pa 720 -55}%
+\special{pa 689 -55}\special{pa 705 -87}\special{pa 720 -114}\special{pa 736 -87}%
+\special{pa 756 -55}\special{pa 772 -28}\special{pa 787 0}\special{pa 803 -28}\special{pa 819 -55}%
+\special{pa 835 -87}\special{pa 854 -114}\special{pa 870 -87}\special{pa 886 -55}%
+\special{pa 854 -55}\special{pa 819 -55}\special{pa 835 -28}\special{pa 854 0}\special{pa 870 -28}%
+\special{pa 886 -55}\special{pa 902 -28}\special{pa 917 0}\special{pa 933 -28}\special{pa 953 -55}%
+\special{pa 969 -28}\special{pa 984 0}\special{pa 1000 -28}\special{pa 1016 -55}\special{pa 984 -55}%
+\special{pa 953 -55}\special{pa 969 -87}\special{pa 984 -114}\special{pa 953 -114}%
+\special{pa 917 -114}\special{pa 933 -142}\special{pa 953 -169}\special{pa 917 -169}%
+\special{pa 886 -169}\special{pa 902 -142}\special{pa 917 -114}\special{pa 886 -114}%
+\special{pa 854 -114}\special{pa 870 -142}\special{pa 886 -169}\special{pa 902 -201}%
+\special{pa 917 -228}\special{pa 886 -228}\special{pa 854 -228}\special{pa 819 -228}%
+\special{pa 787 -228}\special{pa 803 -256}\special{pa 819 -283}\special{pa 835 -256}%
+\special{pa 854 -228}\special{pa 870 -256}\special{pa 886 -283}\special{pa 854 -283}%
+\special{pa 819 -283}\special{pa 835 -311}\special{pa 854 -343}\special{pa 819 -343}%
+\special{pa 787 -343}\special{pa 803 -370}\special{pa 819 -398}\special{pa 787 -398}%
+\special{pa 756 -398}\special{pa 772 -370}\special{pa 787 -343}\special{pa 756 -343}%
+\special{pa 720 -343}\special{pa 736 -311}\special{pa 756 -283}\special{pa 720 -283}%
+\special{pa 689 -283}\special{pa 705 -256}\special{pa 720 -228}\special{pa 736 -256}%
+\special{pa 756 -283}\special{pa 772 -256}\special{pa 787 -228}\special{pa 756 -228}%
+\special{pa 720 -228}\special{pa 689 -228}\special{pa 657 -228}\special{pa 673 -256}%
+\special{pa 689 -283}\special{pa 705 -311}\special{pa 720 -343}\special{pa 736 -370}%
+\special{pa 756 -398}\special{pa 772 -425}\special{pa 787 -453}\special{pa 803 -425}%
+\special{pa 819 -398}\special{pa 835 -370}\special{pa 854 -343}\special{pa 870 -311}%
+\special{pa 886 -283}\special{pa 902 -256}\special{pa 917 -228}\special{pa 933 -201}%
+\special{pa 953 -169}\special{pa 969 -142}\special{pa 984 -114}\special{pa 1000 -87}%
+\special{pa 1016 -55}\special{pa 1031 -28}\special{pa 1051 0}\special{pa 1067 -28}%
+\special{pa 1083 -55}\special{pa 1098 -87}\special{pa 1114 -114}\special{pa 1130 -142}%
+\special{pa 1150 -169}\special{pa 1165 -201}\special{pa 1181 -228}\special{pa 1197 -256}%
+\special{pa 1213 -283}\special{pa 1228 -311}\special{pa 1248 -343}\special{pa 1264 -370}%
+\special{pa 1280 -398}\special{pa 1295 -425}\special{pa 1311 -453}\special{pa 1327 -425}%
+\special{pa 1346 -398}\special{pa 1362 -370}\special{pa 1378 -343}\special{pa 1394 -311}%
+\special{pa 1409 -283}\special{pa 1425 -256}\special{pa 1445 -228}\special{pa 1409 -228}%
+\special{pa 1378 -228}\special{pa 1346 -228}\special{pa 1311 -228}\special{pa 1327 -256}%
+\special{pa 1346 -283}\special{pa 1362 -256}\special{pa 1378 -228}\special{pa 1394 -256}%
+\special{pa 1409 -283}\special{pa 1378 -283}\special{pa 1346 -283}\special{pa 1362 -311}%
+\special{pa 1378 -343}\special{pa 1346 -343}\special{pa 1311 -343}\special{pa 1327 -370}%
+\special{pa 1346 -398}\special{pa 1311 -398}\special{pa 1280 -398}\special{pa 1295 -370}%
+\special{pa 1311 -343}\special{pa 1280 -343}\special{pa 1248 -343}\special{pa 1264 -311}%
+\special{pa 1280 -283}\special{pa 1248 -283}\special{pa 1213 -283}\special{pa 1228 -256}%
+\special{pa 1248 -228}\special{pa 1264 -256}\special{pa 1280 -283}\special{pa 1295 -256}%
+\special{pa 1311 -228}%
+\special{fp}%
+\special{pa 1311 -228}\special{pa 1280 -228}\special{pa 1248 -228}\special{pa 1213 -228}%
+\special{pa 1181 -228}\special{pa 1197 -201}\special{pa 1213 -169}\special{pa 1228 -142}%
+\special{pa 1248 -114}\special{pa 1213 -114}\special{pa 1181 -114}\special{pa 1197 -142}%
+\special{pa 1213 -169}\special{pa 1181 -169}\special{pa 1150 -169}\special{pa 1165 -142}%
+\special{pa 1181 -114}\special{pa 1150 -114}\special{pa 1114 -114}\special{pa 1130 -87}%
+\special{pa 1150 -55}\special{pa 1114 -55}\special{pa 1083 -55}\special{pa 1098 -28}%
+\special{pa 1114 0}\special{pa 1130 -28}\special{pa 1150 -55}\special{pa 1165 -28}%
+\special{pa 1181 0}\special{pa 1197 -28}\special{pa 1213 -55}\special{pa 1228 -28}%
+\special{pa 1248 0}\special{pa 1264 -28}\special{pa 1280 -55}\special{pa 1248 -55}%
+\special{pa 1213 -55}\special{pa 1228 -87}\special{pa 1248 -114}\special{pa 1264 -87}%
+\special{pa 1280 -55}\special{pa 1295 -28}\special{pa 1311 0}\special{pa 1327 -28}%
+\special{pa 1346 -55}\special{pa 1362 -87}\special{pa 1378 -114}\special{pa 1394 -87}%
+\special{pa 1409 -55}\special{pa 1378 -55}\special{pa 1346 -55}\special{pa 1362 -28}%
+\special{pa 1378 0}\special{pa 1394 -28}\special{pa 1409 -55}\special{pa 1425 -28}%
+\special{pa 1445 0}\special{pa 1461 -28}\special{pa 1476 -55}\special{pa 1492 -28}%
+\special{pa 1508 0}\special{pa 1524 -28}\special{pa 1543 -55}\special{pa 1508 -55}%
+\special{pa 1476 -55}\special{pa 1492 -87}\special{pa 1508 -114}\special{pa 1476 -114}%
+\special{pa 1445 -114}\special{pa 1461 -142}\special{pa 1476 -169}\special{pa 1445 -169}%
+\special{pa 1409 -169}\special{pa 1425 -142}\special{pa 1445 -114}\special{pa 1409 -114}%
+\special{pa 1378 -114}\special{pa 1394 -142}\special{pa 1409 -169}\special{pa 1425 -201}%
+\special{pa 1445 -228}\special{pa 1461 -201}\special{pa 1476 -169}\special{pa 1492 -142}%
+\special{pa 1508 -114}\special{pa 1524 -87}\special{pa 1543 -55}\special{pa 1559 -28}%
+\special{pa 1575 0}\special{pa 1591 -28}\special{pa 1606 -55}\special{pa 1622 -87}%
+\special{pa 1642 -114}\special{pa 1657 -142}\special{pa 1673 -169}\special{pa 1689 -201}%
+\special{pa 1705 -228}\special{pa 1720 -201}\special{pa 1740 -169}\special{pa 1756 -142}%
+\special{pa 1772 -114}\special{pa 1740 -114}\special{pa 1705 -114}\special{pa 1720 -142}%
+\special{pa 1740 -169}\special{pa 1705 -169}\special{pa 1673 -169}\special{pa 1689 -142}%
+\special{pa 1705 -114}\special{pa 1673 -114}\special{pa 1642 -114}\special{pa 1657 -87}%
+\special{pa 1673 -55}\special{pa 1642 -55}\special{pa 1606 -55}\special{pa 1622 -28}%
+\special{pa 1642 0}\special{pa 1657 -28}\special{pa 1673 -55}\special{pa 1689 -28}%
+\special{pa 1705 0}\special{pa 1720 -28}\special{pa 1740 -55}\special{pa 1756 -28}%
+\special{pa 1772 0}\special{pa 1787 -28}\special{pa 1803 -55}\special{pa 1772 -55}%
+\special{pa 1740 -55}\special{pa 1756 -87}\special{pa 1772 -114}\special{pa 1787 -87}%
+\special{pa 1803 -55}\special{pa 1819 -28}\special{pa 1839 0}\special{pa 1854 -28}%
+\special{pa 1870 -55}\special{pa 1886 -87}\special{pa 1902 -114}\special{pa 1917 -87}%
+\special{pa 1937 -55}\special{pa 1902 -55}\special{pa 1870 -55}\special{pa 1886 -28}%
+\special{pa 1902 0}\special{pa 1917 -28}\special{pa 1937 -55}\special{pa 1953 -28}%
+\special{pa 1969 0}\special{pa 1984 -28}\special{pa 2000 -55}\special{pa 2016 -28}%
+\special{pa 2035 0}\special{pa 2051 -28}\special{pa 2067 -55}\special{pa 2035 -55}%
+\special{pa 2000 -55}\special{pa 2016 -87}\special{pa 2035 -114}\special{pa 2000 -114}%
+\special{pa 1969 -114}\special{pa 1984 -142}\special{pa 2000 -169}\special{pa 1969 -169}%
+\special{pa 1937 -169}\special{pa 1953 -142}\special{pa 1969 -114}\special{pa 1937 -114}%
+\special{pa 1902 -114}\special{pa 1917 -142}\special{pa 1937 -169}\special{pa 1953 -201}%
+\special{pa 1969 -228}\special{pa 1937 -228}\special{pa 1902 -228}\special{pa 1870 -228}%
+\special{pa 1839 -228}\special{pa 1854 -256}\special{pa 1870 -283}\special{pa 1886 -256}%
+\special{pa 1902 -228}\special{pa 1917 -256}\special{pa 1937 -283}\special{pa 1902 -283}%
+\special{pa 1870 -283}\special{pa 1886 -311}\special{pa 1902 -343}\special{pa 1870 -343}%
+\special{pa 1839 -343}\special{pa 1854 -370}\special{pa 1870 -398}\special{pa 1839 -398}%
+\special{pa 1803 -398}\special{pa 1819 -370}\special{pa 1839 -343}\special{pa 1803 -343}%
+\special{pa 1772 -343}\special{pa 1787 -311}\special{pa 1803 -283}\special{pa 1772 -283}%
+\special{pa 1740 -283}\special{pa 1756 -256}\special{pa 1772 -228}\special{pa 1787 -256}%
+\special{pa 1803 -283}\special{pa 1819 -256}\special{pa 1839 -228}\special{pa 1803 -228}%
+\special{pa 1772 -228}\special{pa 1740 -228}\special{pa 1705 -228}\special{pa 1720 -256}%
+\special{pa 1740 -283}\special{pa 1756 -311}\special{pa 1772 -343}\special{pa 1787 -370}%
+\special{pa 1803 -398}\special{pa 1819 -425}\special{pa 1839 -453}\special{pa 1803 -453}%
+\special{pa 1772 -453}\special{pa 1740 -453}\special{pa 1705 -453}\special{pa 1673 -453}%
+\special{pa 1642 -453}\special{pa 1606 -453}\special{pa 1575 -453}\special{pa 1591 -484}%
+\special{pa 1606 -512}\special{pa 1622 -539}\special{pa 1642 -567}\special{pa 1657 -539}%
+\special{pa 1673 -512}\special{pa 1642 -512}\special{pa 1606 -512}\special{pa 1622 -484}%
+\special{pa 1642 -453}\special{pa 1657 -484}\special{pa 1673 -512}\special{pa 1689 -484}%
+\special{pa 1705 -453}\special{pa 1720 -484}\special{pa 1740 -512}\special{pa 1756 -484}%
+\special{pa 1772 -453}\special{pa 1787 -484}\special{pa 1803 -512}\special{pa 1772 -512}%
+\special{pa 1740 -512}\special{pa 1756 -539}\special{pa 1772 -567}\special{pa 1740 -567}%
+\special{pa 1705 -567}\special{pa 1720 -598}\special{pa 1740 -626}\special{pa 1705 -626}%
+\special{pa 1673 -626}%
+\special{fp}%
+\special{pa 1673 -626}\special{pa 1689 -598}\special{pa 1705 -567}\special{pa 1673 -567}%
+\special{pa 1642 -567}\special{pa 1657 -598}\special{pa 1673 -626}\special{pa 1689 -654}%
+\special{pa 1705 -681}\special{pa 1673 -681}\special{pa 1642 -681}\special{pa 1606 -681}%
+\special{pa 1575 -681}\special{pa 1591 -709}\special{pa 1606 -740}\special{pa 1622 -709}%
+\special{pa 1642 -681}\special{pa 1657 -709}\special{pa 1673 -740}\special{pa 1642 -740}%
+\special{pa 1606 -740}\special{pa 1622 -768}\special{pa 1642 -795}\special{pa 1606 -795}%
+\special{pa 1575 -795}\special{pa 1591 -823}\special{pa 1606 -854}\special{pa 1575 -854}%
+\special{pa 1543 -854}\special{pa 1559 -823}\special{pa 1575 -795}\special{pa 1543 -795}%
+\special{pa 1508 -795}\special{pa 1524 -768}\special{pa 1543 -740}\special{pa 1508 -740}%
+\special{pa 1476 -740}\special{pa 1492 -709}\special{pa 1508 -681}\special{pa 1524 -709}%
+\special{pa 1543 -740}\special{pa 1559 -709}\special{pa 1575 -681}\special{pa 1543 -681}%
+\special{pa 1508 -681}\special{pa 1476 -681}\special{pa 1445 -681}\special{pa 1461 -654}%
+\special{pa 1476 -626}\special{pa 1492 -598}\special{pa 1508 -567}\special{pa 1476 -567}%
+\special{pa 1445 -567}\special{pa 1461 -598}\special{pa 1476 -626}\special{pa 1445 -626}%
+\special{pa 1409 -626}\special{pa 1425 -598}\special{pa 1445 -567}\special{pa 1409 -567}%
+\special{pa 1378 -567}\special{pa 1394 -539}\special{pa 1409 -512}\special{pa 1378 -512}%
+\special{pa 1346 -512}\special{pa 1362 -484}\special{pa 1378 -453}\special{pa 1394 -484}%
+\special{pa 1409 -512}\special{pa 1425 -484}\special{pa 1445 -453}\special{pa 1461 -484}%
+\special{pa 1476 -512}\special{pa 1492 -484}\special{pa 1508 -453}\special{pa 1524 -484}%
+\special{pa 1543 -512}\special{pa 1508 -512}\special{pa 1476 -512}\special{pa 1492 -539}%
+\special{pa 1508 -567}\special{pa 1524 -539}\special{pa 1543 -512}\special{pa 1559 -484}%
+\special{pa 1575 -453}\special{pa 1543 -453}\special{pa 1508 -453}\special{pa 1476 -453}%
+\special{pa 1445 -453}\special{pa 1409 -453}\special{pa 1378 -453}\special{pa 1346 -453}%
+\special{pa 1311 -453}\special{pa 1327 -484}\special{pa 1346 -512}\special{pa 1362 -539}%
+\special{pa 1378 -567}\special{pa 1394 -598}\special{pa 1409 -626}\special{pa 1425 -654}%
+\special{pa 1445 -681}\special{pa 1461 -709}\special{pa 1476 -740}\special{pa 1492 -768}%
+\special{pa 1508 -795}\special{pa 1524 -823}\special{pa 1543 -854}\special{pa 1559 -882}%
+\special{pa 1575 -909}\special{pa 1543 -909}\special{pa 1508 -909}\special{pa 1476 -909}%
+\special{pa 1445 -909}\special{pa 1409 -909}\special{pa 1378 -909}\special{pa 1346 -909}%
+\special{pa 1311 -909}\special{pa 1280 -909}\special{pa 1248 -909}\special{pa 1213 -909}%
+\special{pa 1181 -909}\special{pa 1150 -909}\special{pa 1114 -909}\special{pa 1083 -909}%
+\special{pa 1051 -909}\special{pa 1067 -937}\special{pa 1083 -965}\special{pa 1098 -996}%
+\special{pa 1114 -1024}\special{pa 1130 -1051}\special{pa 1150 -1079}\special{pa 1165 -1106}%
+\special{pa 1181 -1138}\special{pa 1197 -1106}\special{pa 1213 -1079}\special{pa 1228 -1051}%
+\special{pa 1248 -1024}\special{pa 1213 -1024}\special{pa 1181 -1024}\special{pa 1197 -1051}%
+\special{pa 1213 -1079}\special{pa 1181 -1079}\special{pa 1150 -1079}\special{pa 1165 -1051}%
+\special{pa 1181 -1024}\special{pa 1150 -1024}\special{pa 1114 -1024}\special{pa 1130 -996}%
+\special{pa 1150 -965}\special{pa 1114 -965}\special{pa 1083 -965}\special{pa 1098 -937}%
+\special{pa 1114 -909}\special{pa 1130 -937}\special{pa 1150 -965}\special{pa 1165 -937}%
+\special{pa 1181 -909}\special{pa 1197 -937}\special{pa 1213 -965}\special{pa 1228 -937}%
+\special{pa 1248 -909}\special{pa 1264 -937}\special{pa 1280 -965}\special{pa 1248 -965}%
+\special{pa 1213 -965}\special{pa 1228 -996}\special{pa 1248 -1024}\special{pa 1264 -996}%
+\special{pa 1280 -965}\special{pa 1295 -937}\special{pa 1311 -909}\special{pa 1327 -937}%
+\special{pa 1346 -965}\special{pa 1362 -996}\special{pa 1378 -1024}\special{pa 1394 -996}%
+\special{pa 1409 -965}\special{pa 1378 -965}\special{pa 1346 -965}\special{pa 1362 -937}%
+\special{pa 1378 -909}\special{pa 1394 -937}\special{pa 1409 -965}\special{pa 1425 -937}%
+\special{pa 1445 -909}\special{pa 1461 -937}\special{pa 1476 -965}\special{pa 1492 -937}%
+\special{pa 1508 -909}\special{pa 1524 -937}\special{pa 1543 -965}\special{pa 1508 -965}%
+\special{pa 1476 -965}\special{pa 1492 -996}\special{pa 1508 -1024}\special{pa 1476 -1024}%
+\special{pa 1445 -1024}\special{pa 1461 -1051}\special{pa 1476 -1079}\special{pa 1445 -1079}%
+\special{pa 1409 -1079}\special{pa 1425 -1051}\special{pa 1445 -1024}\special{pa 1409 -1024}%
+\special{pa 1378 -1024}\special{pa 1394 -1051}\special{pa 1409 -1079}\special{pa 1425 -1106}%
+\special{pa 1445 -1138}\special{pa 1409 -1138}\special{pa 1378 -1138}\special{pa 1346 -1138}%
+\special{pa 1311 -1138}\special{pa 1327 -1165}\special{pa 1346 -1193}\special{pa 1362 -1165}%
+\special{pa 1378 -1138}\special{pa 1394 -1165}\special{pa 1409 -1193}\special{pa 1378 -1193}%
+\special{pa 1346 -1193}\special{pa 1362 -1220}\special{pa 1378 -1252}\special{pa 1346 -1252}%
+\special{pa 1311 -1252}\special{pa 1327 -1280}\special{pa 1346 -1307}\special{pa 1311 -1307}%
+\special{pa 1280 -1307}\special{pa 1295 -1280}\special{pa 1311 -1252}\special{pa 1280 -1252}%
+\special{pa 1248 -1252}\special{pa 1264 -1220}\special{pa 1280 -1193}\special{pa 1248 -1193}%
+\special{pa 1213 -1193}\special{pa 1228 -1165}\special{pa 1248 -1138}\special{pa 1264 -1165}%
+\special{pa 1280 -1193}\special{pa 1295 -1165}\special{pa 1311 -1138}\special{pa 1280 -1138}%
+\special{pa 1248 -1138}\special{pa 1213 -1138}\special{pa 1181 -1138}\special{pa 1197 -1165}%
+\special{pa 1213 -1193}\special{pa 1228 -1220}\special{pa 1248 -1252}\special{pa 1264 -1280}%
+\special{pa 1280 -1307}\special{pa 1295 -1335}\special{pa 1311 -1362}\special{pa 1280 -1362}%
+\special{pa 1248 -1362}%
+\special{fp}%
+\special{pa 1248 -1362}\special{pa 1213 -1362}\special{pa 1181 -1362}\special{pa 1150 -1362}%
+\special{pa 1114 -1362}\special{pa 1083 -1362}\special{pa 1051 -1362}\special{pa 1067 -1394}%
+\special{pa 1083 -1421}\special{pa 1098 -1449}\special{pa 1114 -1476}\special{pa 1130 -1449}%
+\special{pa 1150 -1421}\special{pa 1114 -1421}\special{pa 1083 -1421}\special{pa 1098 -1394}%
+\special{pa 1114 -1362}\special{pa 1130 -1394}\special{pa 1150 -1421}\special{pa 1165 -1394}%
+\special{pa 1181 -1362}\special{pa 1197 -1394}\special{pa 1213 -1421}\special{pa 1228 -1394}%
+\special{pa 1248 -1362}\special{pa 1264 -1394}\special{pa 1280 -1421}\special{pa 1248 -1421}%
+\special{pa 1213 -1421}\special{pa 1228 -1449}\special{pa 1248 -1476}\special{pa 1213 -1476}%
+\special{pa 1181 -1476}\special{pa 1197 -1504}\special{pa 1213 -1535}\special{pa 1181 -1535}%
+\special{pa 1150 -1535}\special{pa 1165 -1504}\special{pa 1181 -1476}\special{pa 1150 -1476}%
+\special{pa 1114 -1476}\special{pa 1130 -1504}\special{pa 1150 -1535}\special{pa 1165 -1563}%
+\special{pa 1181 -1591}\special{pa 1150 -1591}\special{pa 1114 -1591}\special{pa 1083 -1591}%
+\special{pa 1051 -1591}\special{pa 1067 -1618}\special{pa 1083 -1650}\special{pa 1098 -1618}%
+\special{pa 1114 -1591}\special{pa 1130 -1618}\special{pa 1150 -1650}\special{pa 1114 -1650}%
+\special{pa 1083 -1650}\special{pa 1098 -1677}\special{pa 1114 -1705}\special{pa 1083 -1705}%
+\special{pa 1051 -1705}\special{pa 1067 -1732}\special{pa 1083 -1760}\special{pa 1051 -1760}%
+\special{pa 1016 -1760}\special{pa 1031 -1732}\special{pa 1051 -1705}\special{pa 1016 -1705}%
+\special{pa 984 -1705}\special{pa 1000 -1677}\special{pa 1016 -1650}\special{pa 984 -1650}%
+\special{pa 953 -1650}\special{pa 969 -1618}\special{pa 984 -1591}\special{pa 1000 -1618}%
+\special{pa 1016 -1650}\special{pa 1031 -1618}\special{pa 1051 -1591}\special{pa 1016 -1591}%
+\special{pa 984 -1591}\special{pa 953 -1591}\special{pa 917 -1591}\special{pa 933 -1563}%
+\special{pa 953 -1535}\special{pa 969 -1504}\special{pa 984 -1476}\special{pa 953 -1476}%
+\special{pa 917 -1476}\special{pa 933 -1504}\special{pa 953 -1535}\special{pa 917 -1535}%
+\special{pa 886 -1535}\special{pa 902 -1504}\special{pa 917 -1476}\special{pa 886 -1476}%
+\special{pa 854 -1476}\special{pa 870 -1449}\special{pa 886 -1421}\special{pa 854 -1421}%
+\special{pa 819 -1421}\special{pa 839 -1394}\special{pa 854 -1362}\special{pa 870 -1394}%
+\special{pa 886 -1421}\special{pa 902 -1394}\special{pa 917 -1362}\special{pa 933 -1394}%
+\special{pa 953 -1421}\special{pa 969 -1394}\special{pa 984 -1362}\special{pa 1000 -1394}%
+\special{pa 1016 -1421}\special{pa 984 -1421}\special{pa 953 -1421}\special{pa 969 -1449}%
+\special{pa 984 -1476}\special{pa 1000 -1449}\special{pa 1016 -1421}\special{pa 1031 -1394}%
+\special{pa 1051 -1362}\special{pa 1016 -1362}\special{pa 984 -1362}\special{pa 953 -1362}%
+\special{pa 917 -1362}\special{pa 886 -1362}\special{pa 854 -1362}\special{pa 819 -1362}%
+\special{pa 787 -1362}\special{pa 803 -1335}\special{pa 819 -1307}\special{pa 839 -1280}%
+\special{pa 854 -1252}\special{pa 870 -1220}\special{pa 886 -1193}\special{pa 902 -1165}%
+\special{pa 917 -1138}\special{pa 886 -1138}\special{pa 854 -1138}\special{pa 819 -1138}%
+\special{pa 787 -1138}\special{pa 803 -1165}\special{pa 819 -1193}\special{pa 839 -1165}%
+\special{pa 854 -1138}\special{pa 870 -1165}\special{pa 886 -1193}\special{pa 854 -1193}%
+\special{pa 819 -1193}\special{pa 839 -1220}\special{pa 854 -1252}\special{pa 819 -1252}%
+\special{pa 787 -1252}\special{pa 803 -1280}\special{pa 819 -1307}\special{pa 787 -1307}%
+\special{pa 756 -1307}\special{pa 772 -1280}\special{pa 787 -1252}\special{pa 756 -1252}%
+\special{pa 720 -1252}\special{pa 740 -1220}\special{pa 756 -1193}\special{pa 720 -1193}%
+\special{pa 689 -1193}\special{pa 705 -1165}\special{pa 720 -1138}\special{pa 740 -1165}%
+\special{pa 756 -1193}\special{pa 772 -1165}\special{pa 787 -1138}\special{pa 756 -1138}%
+\special{pa 720 -1138}\special{pa 689 -1138}\special{pa 657 -1138}\special{pa 673 -1106}%
+\special{pa 689 -1079}\special{pa 705 -1051}\special{pa 720 -1024}\special{pa 689 -1024}%
+\special{pa 657 -1024}\special{pa 673 -1051}\special{pa 689 -1079}\special{pa 657 -1079}%
+\special{pa 622 -1079}\special{pa 642 -1051}\special{pa 657 -1024}\special{pa 622 -1024}%
+\special{pa 591 -1024}\special{pa 606 -996}\special{pa 622 -965}\special{pa 591 -965}%
+\special{pa 559 -965}\special{pa 575 -937}\special{pa 591 -909}\special{pa 606 -937}%
+\special{pa 622 -965}\special{pa 642 -937}\special{pa 657 -909}\special{pa 673 -937}%
+\special{pa 689 -965}\special{pa 705 -937}\special{pa 720 -909}\special{pa 740 -937}%
+\special{pa 756 -965}\special{pa 720 -965}\special{pa 689 -965}\special{pa 705 -996}%
+\special{pa 720 -1024}\special{pa 740 -996}\special{pa 756 -965}\special{pa 772 -937}%
+\special{pa 787 -909}\special{pa 803 -937}\special{pa 819 -965}\special{pa 839 -996}%
+\special{pa 854 -1024}\special{pa 870 -996}\special{pa 886 -965}\special{pa 854 -965}%
+\special{pa 819 -965}\special{pa 839 -937}\special{pa 854 -909}\special{pa 870 -937}%
+\special{pa 886 -965}\special{pa 902 -937}\special{pa 917 -909}\special{pa 937 -937}%
+\special{pa 953 -965}\special{pa 969 -937}\special{pa 984 -909}\special{pa 1000 -937}%
+\special{pa 1016 -965}\special{pa 984 -965}\special{pa 953 -965}\special{pa 969 -996}%
+\special{pa 984 -1024}\special{pa 953 -1024}\special{pa 917 -1024}\special{pa 937 -1051}%
+\special{pa 953 -1079}\special{pa 917 -1079}\special{pa 886 -1079}\special{pa 902 -1051}%
+\special{pa 917 -1024}\special{pa 886 -1024}\special{pa 854 -1024}\special{pa 870 -1051}%
+\special{pa 886 -1079}\special{pa 902 -1106}\special{pa 917 -1138}\special{pa 937 -1106}%
+\special{pa 953 -1079}\special{pa 969 -1051}\special{pa 984 -1024}\special{pa 1000 -996}%
+\special{pa 1016 -965}%
+\special{fp}%
+\special{pa 1016 -965}\special{pa 1031 -937}\special{pa 1051 -909}\special{pa 1016 -909}%
+\special{pa 984 -909}\special{pa 953 -909}\special{pa 917 -909}\special{pa 886 -909}%
+\special{pa 854 -909}\special{pa 819 -909}\special{pa 787 -909}\special{pa 756 -909}%
+\special{pa 720 -909}\special{pa 689 -909}\special{pa 657 -909}\special{pa 622 -909}%
+\special{pa 591 -909}\special{pa 559 -909}\special{pa 524 -909}\special{pa 543 -937}%
+\special{pa 559 -965}\special{pa 575 -996}\special{pa 591 -1024}\special{pa 606 -1051}%
+\special{pa 622 -1079}\special{pa 642 -1106}\special{pa 657 -1138}\special{pa 673 -1165}%
+\special{pa 689 -1193}\special{pa 705 -1220}\special{pa 720 -1252}\special{pa 740 -1280}%
+\special{pa 756 -1307}\special{pa 772 -1335}\special{pa 787 -1362}\special{pa 803 -1394}%
+\special{pa 819 -1421}\special{pa 839 -1449}\special{pa 854 -1476}\special{pa 870 -1504}%
+\special{pa 886 -1535}\special{pa 902 -1563}\special{pa 917 -1591}\special{pa 937 -1618}%
+\special{pa 953 -1650}\special{pa 969 -1677}\special{pa 984 -1705}\special{pa 1000 -1732}%
+\special{pa 1016 -1760}\special{pa 1031 -1791}\special{pa 1051 -1819}\special{pa 1067 -1791}%
+\special{pa 1083 -1760}\special{pa 1098 -1732}\special{pa 1114 -1705}\special{pa 1130 -1677}%
+\special{pa 1150 -1650}\special{pa 1165 -1618}\special{pa 1181 -1591}\special{pa 1197 -1563}%
+\special{pa 1213 -1535}\special{pa 1228 -1504}\special{pa 1248 -1476}\special{pa 1264 -1449}%
+\special{pa 1280 -1421}\special{pa 1295 -1394}\special{pa 1311 -1362}\special{pa 1327 -1335}%
+\special{pa 1346 -1307}\special{pa 1362 -1280}\special{pa 1378 -1252}\special{pa 1394 -1220}%
+\special{pa 1409 -1193}\special{pa 1425 -1165}\special{pa 1445 -1138}\special{pa 1461 -1106}%
+\special{pa 1476 -1079}\special{pa 1492 -1051}\special{pa 1508 -1024}\special{pa 1524 -996}%
+\special{pa 1543 -965}\special{pa 1559 -937}\special{pa 1575 -909}\special{pa 1591 -882}%
+\special{pa 1606 -854}\special{pa 1622 -823}\special{pa 1642 -795}\special{pa 1657 -768}%
+\special{pa 1673 -740}\special{pa 1689 -709}\special{pa 1705 -681}\special{pa 1720 -654}%
+\special{pa 1740 -626}\special{pa 1756 -598}\special{pa 1772 -567}\special{pa 1787 -539}%
+\special{pa 1803 -512}\special{pa 1819 -484}\special{pa 1839 -453}\special{pa 1854 -425}%
+\special{pa 1870 -398}\special{pa 1886 -370}\special{pa 1902 -343}\special{pa 1917 -311}%
+\special{pa 1937 -283}\special{pa 1953 -256}\special{pa 1969 -228}\special{pa 1984 -201}%
+\special{pa 2000 -169}\special{pa 2016 -142}\special{pa 2035 -114}\special{pa 2051 -87}%
+\special{pa 2067 -55}\special{pa 2083 -28}\special{pa 2098 0}\special{pa 2067 0}\special{pa 2035 0}%
+\special{pa 2000 0}\special{pa 1969 0}\special{pa 1937 0}\special{pa 1902 0}\special{pa 1870 0}%
+\special{pa 1839 0}\special{pa 1803 0}\special{pa 1772 0}\special{pa 1740 0}\special{pa 1705 0}%
+\special{pa 1673 0}\special{pa 1642 0}\special{pa 1606 0}\special{pa 1575 0}\special{pa 1543 0}%
+\special{pa 1508 0}\special{pa 1476 0}\special{pa 1445 0}\special{pa 1409 0}\special{pa 1378 0}%
+\special{pa 1346 0}\special{pa 1311 0}\special{pa 1280 0}\special{pa 1248 0}\special{pa 1213 0}%
+\special{pa 1181 0}\special{pa 1150 0}\special{pa 1114 0}\special{pa 1083 0}\special{pa 1051 0}%
+\special{pa 1016 0}\special{pa 984 0}\special{pa 953 0}\special{pa 917 0}\special{pa 886 0}%
+\special{pa 854 0}\special{pa 819 0}\special{pa 787 0}\special{pa 756 0}\special{pa 720 0}%
+\special{pa 689 0}\special{pa 657 0}\special{pa 622 0}\special{pa 591 0}\special{pa 559 0}%
+\special{pa 524 0}\special{pa 492 0}\special{pa 461 0}\special{pa 425 0}\special{pa 394 0}%
+\special{pa 362 0}\special{pa 327 0}\special{pa 295 0}\special{pa 264 0}\special{pa 228 0}%
+\special{pa 197 0}\special{pa 165 0}\special{pa 130 0}\special{pa 98 0}\special{pa 67 0}%
+\special{pa 31 0}\special{pa 0 0}%
+\special{fp}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/listplot3.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/listplot3.tex
new file mode 100644
index 0000000000..005fbf8498
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/listplot3.tex
@@ -0,0 +1,94 @@
+%%% /Users/Hannya/Desktop/KeTCindy/fig/listplot3.tex
+%%% Generator=template1basic.cdy
+{\unitlength=10mm%
+\begin{picture}%
+(9.22,4.16)(-0.42,-0.42)%
+\special{pn 8}%
+%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -0}\special{pa 394 -1181}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pn 16}%
+\special{pa 394 -0}\special{pa 787 -1181}%
+\special{fp}%
+\special{pn 8}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 787 0}\special{pa 799 -36}\special{fp}\special{pa 811 -72}\special{pa 823 -107}\special{fp}%
+\special{pa 835 -143}\special{pa 847 -179}\special{fp}\special{pa 859 -215}\special{pa 871 -251}\special{fp}%
+\special{pa 883 -286}\special{pa 895 -322}\special{fp}\special{pa 907 -358}\special{pa 919 -394}\special{fp}%
+\special{pa 931 -429}\special{pa 942 -465}\special{fp}\special{pa 954 -501}\special{pa 966 -537}\special{fp}%
+\special{pa 978 -573}\special{pa 990 -608}\special{fp}\special{pa 1002 -644}\special{pa 1014 -680}\special{fp}%
+\special{pa 1026 -716}\special{pa 1038 -752}\special{fp}\special{pa 1050 -787}\special{pa 1062 -823}\special{fp}%
+\special{pa 1074 -859}\special{pa 1086 -895}\special{fp}\special{pa 1098 -931}\special{pa 1110 -966}\special{fp}%
+\special{pa 1121 -1002}\special{pa 1133 -1038}\special{fp}\special{pa 1145 -1074}\special{pa 1157 -1110}\special{fp}%
+\special{pa 1169 -1145}\special{pa 1181 -1181}\special{fp}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 1181 0}\special{pa 1215 -101}\special{fp}\special{pa 1226 -135}\special{pa 1260 -236}\special{fp}%
+\special{pa 1271 -270}\special{pa 1305 -371}\special{fp}\special{pa 1316 -405}\special{pa 1350 -506}\special{fp}%
+\special{pa 1361 -540}\special{pa 1395 -641}\special{fp}\special{pa 1406 -675}\special{pa 1440 -776}\special{fp}%
+\special{pa 1451 -810}\special{pa 1485 -911}\special{fp}\special{pa 1496 -945}\special{pa 1530 -1046}\special{fp}%
+\special{pa 1541 -1080}\special{pa 1575 -1181}\special{fp}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 1575 0}\special{pa 1587 -36}\special{fp}\special{pa 1623 -143}\special{pa 1634 -179}\special{fp}%
+\special{pa 1670 -286}\special{pa 1682 -322}\special{fp}\special{pa 1718 -429}\special{pa 1730 -465}\special{fp}%
+\special{pa 1766 -573}\special{pa 1778 -608}\special{fp}\special{pa 1813 -716}\special{pa 1825 -752}\special{fp}%
+\special{pa 1861 -859}\special{pa 1873 -895}\special{fp}\special{pa 1909 -1002}\special{pa 1921 -1038}\special{fp}%
+\special{pa 1957 -1145}\special{pa 1969 -1181}\special{fp}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pn 8}%
+\special{pa 1967 4}\special{pa 1970 -4}\special{fp}\special{pa 1980 -33}\special{pa 1982 -41}\special{fp}%
+\special{pa 1992 -70}\special{pa 1994 -78}\special{fp}\special{pa 2004 -107}\special{pa 2007 -115}\special{fp}%
+\special{pa 2016 -144}\special{pa 2019 -151}\special{fp}\special{pa 2029 -181}\special{pa 2031 -188}\special{fp}%
+\special{pa 2041 -218}\special{pa 2044 -225}\special{fp}\special{pa 2053 -255}\special{pa 2056 -262}\special{fp}%
+\special{pa 2066 -291}\special{pa 2068 -299}\special{fp}\special{pa 2078 -328}\special{pa 2080 -336}\special{fp}%
+\special{pa 2090 -365}\special{pa 2093 -373}\special{fp}\special{pa 2103 -402}\special{pa 2105 -410}\special{fp}%
+\special{pa 2115 -439}\special{pa 2117 -447}\special{fp}\special{pa 2127 -476}\special{pa 2130 -484}\special{fp}%
+\special{pa 2139 -513}\special{pa 2142 -521}\special{fp}\special{pa 2152 -550}\special{pa 2154 -557}\special{fp}%
+\special{pa 2164 -587}\special{pa 2167 -594}\special{fp}\special{pa 2176 -624}\special{pa 2179 -631}\special{fp}%
+\special{pa 2189 -661}\special{pa 2191 -668}\special{fp}\special{pa 2201 -697}\special{pa 2204 -705}\special{fp}%
+\special{pa 2213 -734}\special{pa 2216 -742}\special{fp}\special{pa 2226 -771}\special{pa 2228 -779}\special{fp}%
+\special{pa 2238 -808}\special{pa 2240 -816}\special{fp}\special{pa 2250 -845}\special{pa 2253 -853}\special{fp}%
+\special{pa 2263 -882}\special{pa 2265 -890}\special{fp}\special{pa 2275 -919}\special{pa 2277 -927}\special{fp}%
+\special{pa 2287 -956}\special{pa 2290 -963}\special{fp}\special{pa 2299 -993}\special{pa 2302 -1000}\special{fp}%
+\special{pa 2312 -1030}\special{pa 2314 -1037}\special{fp}\special{pa 2324 -1067}\special{pa 2327 -1074}\special{fp}%
+\special{pa 2336 -1103}\special{pa 2339 -1111}\special{fp}\special{pa 2349 -1140}\special{pa 2351 -1148}\special{fp}%
+\special{pa 2361 -1177}\special{pa 2363 -1185}\special{fp}\special{pn 8}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pn 8}%
+\special{pa 2361 4}\special{pa 2363 -4}\special{fp}\special{pa 2397 -104}\special{pa 2399 -111}\special{fp}%
+\special{pa 2433 -211}\special{pa 2435 -219}\special{fp}\special{pa 2468 -318}\special{pa 2471 -326}\special{fp}%
+\special{pa 2504 -426}\special{pa 2507 -433}\special{fp}\special{pa 2540 -533}\special{pa 2542 -541}\special{fp}%
+\special{pa 2576 -640}\special{pa 2578 -648}\special{fp}\special{pa 2611 -748}\special{pa 2614 -755}\special{fp}%
+\special{pa 2647 -855}\special{pa 2650 -863}\special{fp}\special{pa 2683 -963}\special{pa 2686 -970}\special{fp}%
+\special{pa 2719 -1070}\special{pa 2721 -1078}\special{fp}\special{pa 2755 -1177}\special{pa 2757 -1185}\special{fp}%
+\special{pn 8}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pn 24}%
+\special{pa 2752 11}\special{pa 2760 -11}\special{fp}\special{pa 2788 -96}\special{pa 2795 -119}\special{fp}%
+\special{pa 2824 -203}\special{pa 2831 -226}\special{fp}\special{pa 2859 -311}\special{pa 2867 -334}\special{fp}%
+\special{pa 2895 -418}\special{pa 2903 -441}\special{fp}\special{pa 2931 -525}\special{pa 2939 -548}\special{fp}%
+\special{pa 2967 -633}\special{pa 2974 -656}\special{fp}\special{pa 3003 -740}\special{pa 3010 -763}\special{fp}%
+\special{pa 3038 -848}\special{pa 3046 -870}\special{fp}\special{pa 3074 -955}\special{pa 3082 -978}\special{fp}%
+\special{pa 3110 -1062}\special{pa 3118 -1085}\special{fp}\special{pa 3146 -1170}\special{pa 3153 -1192}\special{fp}%
+\special{pn 8}%
+}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/listplot3view.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/listplot3view.pdf
new file mode 100644
index 0000000000..aa0474c40d
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/listplot3view.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/makeslide.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/makeslide.tex
new file mode 100644
index 0000000000..95e966043d
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/makeslide.tex
@@ -0,0 +1,252 @@
+%%% /Users/Hannya/Desktop/fig/makeslide.tex
+%%% Generator=makeslide.cdy
+{\unitlength=1cm%
+\begin{picture}%
+(10.5,7.5)(-6.5,-2)%
+\special{pn 8}%
+%
+{%
+\color[rgb]{0,0,0}%
+\special{pa -1575 -787}\special{pa -1575 -906}\special{pa -1576 -918}\special{pa -1579 -930}%
+\special{pa -1583 -941}\special{pa -1590 -952}\special{pa -1598 -961}\special{pa -1607 -969}%
+\special{pa -1618 -976}\special{pa -1629 -980}\special{pa -1641 -983}\special{pa -1654 -984}%
+\special{pa -1969 -984}\special{pa -2283 -984}\special{pa -2296 -983}\special{pa -2308 -980}%
+\special{pa -2319 -976}\special{pa -2330 -969}\special{pa -2339 -961}\special{pa -2347 -952}%
+\special{pa -2354 -941}\special{pa -2358 -930}\special{pa -2361 -918}\special{pa -2362 -906}%
+\special{pa -2362 -787}\special{pa -2362 -669}\special{pa -2361 -657}\special{pa -2358 -645}%
+\special{pa -2354 -634}\special{pa -2347 -623}\special{pa -2339 -614}\special{pa -2330 -606}%
+\special{pa -2319 -599}\special{pa -2308 -594}\special{pa -2296 -592}\special{pa -2283 -591}%
+\special{pa -1969 -591}\special{pa -1654 -591}\special{pa -1641 -592}\special{pa -1629 -594}%
+\special{pa -1618 -599}\special{pa -1607 -606}\special{pa -1598 -614}\special{pa -1590 -623}%
+\special{pa -1583 -634}\special{pa -1579 -645}\special{pa -1576 -657}\special{pa -1575 -669}%
+\special{pa -1575 -787}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa -1575 -197}\special{pa -1575 -315}\special{pa -1576 -327}\special{pa -1579 -339}%
+\special{pa -1583 -351}\special{pa -1590 -361}\special{pa -1598 -371}\special{pa -1607 -379}%
+\special{pa -1618 -385}\special{pa -1629 -390}\special{pa -1641 -393}\special{pa -1654 -394}%
+\special{pa -1969 -394}\special{pa -2283 -394}\special{pa -2296 -393}\special{pa -2308 -390}%
+\special{pa -2319 -385}\special{pa -2330 -379}\special{pa -2339 -371}\special{pa -2347 -361}%
+\special{pa -2354 -351}\special{pa -2358 -339}\special{pa -2361 -327}\special{pa -2362 -315}%
+\special{pa -2362 -197}\special{pa -2362 -79}\special{pa -2361 -66}\special{pa -2358 -54}%
+\special{pa -2354 -43}\special{pa -2347 -32}\special{pa -2339 -23}\special{pa -2330 -15}%
+\special{pa -2319 -9}\special{pa -2308 -4}\special{pa -2296 -1}\special{pa -2283 -0}%
+\special{pa -1969 -0}\special{pa -1654 -0}\special{pa -1641 -1}\special{pa -1629 -4}%
+\special{pa -1618 -9}\special{pa -1607 -15}\special{pa -1598 -23}\special{pa -1590 -32}%
+\special{pa -1583 -43}\special{pa -1579 -54}\special{pa -1576 -66}\special{pa -1575 -79}%
+\special{pa -1575 -197}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa -1575 394}\special{pa -1575 276}\special{pa -1576 263}\special{pa -1579 251}%
+\special{pa -1583 240}\special{pa -1590 229}\special{pa -1598 220}\special{pa -1607 212}%
+\special{pa -1618 205}\special{pa -1629 201}\special{pa -1641 198}\special{pa -1654 197}%
+\special{pa -1969 197}\special{pa -2283 197}\special{pa -2296 198}\special{pa -2308 201}%
+\special{pa -2319 205}\special{pa -2330 212}\special{pa -2339 220}\special{pa -2347 229}%
+\special{pa -2354 240}\special{pa -2358 251}\special{pa -2361 263}\special{pa -2362 276}%
+\special{pa -2362 394}\special{pa -2362 512}\special{pa -2361 524}\special{pa -2358 536}%
+\special{pa -2354 548}\special{pa -2347 558}\special{pa -2339 567}\special{pa -2330 576}%
+\special{pa -2319 582}\special{pa -2308 587}\special{pa -2296 590}\special{pa -2283 591}%
+\special{pa -1969 591}\special{pa -1654 591}\special{pa -1641 590}\special{pa -1629 587}%
+\special{pa -1618 582}\special{pa -1607 576}\special{pa -1598 567}\special{pa -1590 558}%
+\special{pa -1583 548}\special{pa -1579 536}\special{pa -1576 524}\special{pa -1575 512}%
+\special{pa -1575 394}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa -114 -1189}\special{pa -114 -1701}\special{pa -115 -1713}\special{pa -118 -1725}%
+\special{pa -123 -1737}\special{pa -129 -1747}\special{pa -137 -1756}\special{pa -147 -1764}%
+\special{pa -157 -1771}\special{pa -169 -1776}\special{pa -181 -1779}\special{pa -193 -1780}%
+\special{pa -508 -1780}\special{pa -823 -1780}\special{pa -835 -1779}\special{pa -847 -1776}%
+\special{pa -859 -1771}\special{pa -869 -1764}\special{pa -879 -1756}\special{pa -887 -1747}%
+\special{pa -893 -1737}\special{pa -898 -1725}\special{pa -901 -1713}\special{pa -902 -1701}%
+\special{pa -902 -1189}\special{pa -902 -677}\special{pa -901 -665}\special{pa -898 -653}%
+\special{pa -893 -641}\special{pa -887 -631}\special{pa -879 -621}\special{pa -869 -613}%
+\special{pa -859 -607}\special{pa -847 -602}\special{pa -835 -599}\special{pa -823 -598}%
+\special{pa -508 -598}\special{pa -193 -598}\special{pa -181 -599}\special{pa -169 -602}%
+\special{pa -157 -607}\special{pa -147 -613}\special{pa -137 -621}\special{pa -129 -631}%
+\special{pa -123 -641}\special{pa -118 -653}\special{pa -115 -665}\special{pa -114 -677}%
+\special{pa -114 -1189}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 75 -0}\special{pa 75 -315}\special{pa 74 -327}\special{pa 71 -339}%
+\special{pa 66 -351}\special{pa 60 -361}\special{pa 52 -371}\special{pa 42 -379}%
+\special{pa 32 -385}\special{pa 20 -390}\special{pa 8 -393}\special{pa -4 -394}%
+\special{pa -516 -394}\special{pa -1028 -394}\special{pa -1040 -393}\special{pa -1052 -390}%
+\special{pa -1063 -385}\special{pa -1074 -379}\special{pa -1083 -371}\special{pa -1091 -361}%
+\special{pa -1098 -351}\special{pa -1102 -339}\special{pa -1105 -327}\special{pa -1106 -315}%
+\special{pa -1106 -0}\special{pa -1106 315}\special{pa -1105 327}\special{pa -1102 339}%
+\special{pa -1098 351}\special{pa -1091 361}\special{pa -1083 371}\special{pa -1074 379}%
+\special{pa -1063 385}\special{pa -1052 390}\special{pa -1040 393}\special{pa -1028 394}%
+\special{pa -516 394}\special{pa -4 394}\special{pa 8 393}\special{pa 20 390}%
+\special{pa 32 385}\special{pa 42 379}\special{pa 52 371}\special{pa 60 361}%
+\special{pa 66 351}\special{pa 71 339}\special{pa 74 327}\special{pa 75 315}%
+\special{pa 75 -0}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 1378 -0}\special{pa 1378 -315}\special{pa 1377 -327}\special{pa 1374 -339}%
+\special{pa 1369 -351}\special{pa 1363 -361}\special{pa 1355 -371}\special{pa 1345 -379}%
+\special{pa 1335 -385}\special{pa 1324 -390}\special{pa 1312 -393}\special{pa 1299 -394}%
+\special{pa 984 -394}\special{pa 669 -394}\special{pa 657 -393}\special{pa 645 -390}%
+\special{pa 634 -385}\special{pa 623 -379}\special{pa 614 -371}\special{pa 606 -361}%
+\special{pa 599 -351}\special{pa 594 -339}\special{pa 592 -327}\special{pa 591 -315}%
+\special{pa 591 -0}\special{pa 591 315}\special{pa 592 327}\special{pa 594 339}%
+\special{pa 599 351}\special{pa 606 361}\special{pa 614 371}\special{pa 623 379}%
+\special{pa 634 385}\special{pa 645 390}\special{pa 657 393}\special{pa 669 394}%
+\special{pa 984 394}\special{pa 1299 394}\special{pa 1312 393}\special{pa 1324 390}%
+\special{pa 1335 385}\special{pa 1345 379}\special{pa 1355 371}\special{pa 1363 361}%
+\special{pa 1369 351}\special{pa 1374 339}\special{pa 1377 327}\special{pa 1378 315}%
+\special{pa 1378 -0}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa -1575 -787}\special{pa -1378 -787}\special{pa -1378 394}\special{pa -1575 394}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa -1575 -197}\special{pa -1220 -197}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa -1256 -173}\special{pa -1181 -197}\special{pa -1256 -221}\special{pa -1256 -197}%
+\special{pa -1256 -173}\special{sh 1}\special{ip}%
+\special{pn 1}%
+\special{pa -1256 -173}\special{pa -1181 -197}\special{pa -1256 -221}\special{pa -1256 -197}%
+\special{pa -1256 -173}\special{pa -1181 -197}%
+\special{fp}%
+\special{pn 8}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa -551 -407}\special{pa -551 -564}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa -526 -529}\special{pa -551 -604}\special{pa -575 -529}\special{pa -551 -529}%
+\special{pa -526 -529}\special{sh 1}\special{ip}%
+\special{pn 1}%
+\special{pa -526 -529}\special{pa -551 -604}\special{pa -575 -529}\special{pa -551 -529}%
+\special{pa -526 -529}\special{pa -551 -604}%
+\special{fp}%
+\special{pn 8}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa -472 -604}\special{pa -472 -446}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa -496 -482}\special{pa -472 -407}\special{pa -447 -482}\special{pa -472 -482}%
+\special{pa -496 -482}\special{sh 1}\special{ip}%
+\special{pn 1}%
+\special{pa -496 -482}\special{pa -472 -407}\special{pa -447 -482}\special{pa -472 -482}%
+\special{pa -496 -482}\special{pa -472 -407}%
+\special{fp}%
+\special{pn 8}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 160 80}\special{pa 160 -78}\special{pa 396 -78}\special{pa 396 -156}%
+\special{pa 554 1}\special{pa 396 159}\special{pa 396 80}\special{pa 160 80}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{fig1.tex}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{fig1.tex}\settodepth{\Depth}{fig1.tex}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-5.0000000,2.0000000){\hspace*{\Width}\raisebox{\Height}{fig1.tex}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{fig2.tex}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{fig2.tex}\settodepth{\Depth}{fig2.tex}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-5.0000000,0.5000000){\hspace*{\Width}\raisebox{\Height}{fig2.tex}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{movie.tex}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{movie.tex}\settodepth{\Depth}{movie.tex}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-5.0000000,-1.0000000){\hspace*{\Width}\raisebox{\Height}{movie.tex}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{makeslide.txt}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{makeslide.txt}\settodepth{\Depth}{makeslide.txt}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-1.4200000,4.7800000){\hspace*{\Width}\raisebox{\Height}{makeslide.txt}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{makeslide.cdy}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{makeslide.cdy}\settodepth{\Depth}{makeslide.cdy}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-1.3100000,0.0000000){\hspace*{\Width}\raisebox{\Height}{makeslide.cdy}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{Slide.pdf}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{Slide.pdf}\settodepth{\Depth}{Slide.pdf}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.5000000,0.0000000){\hspace*{\Width}\raisebox{\Height}{Slide.pdf}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{Title}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{Title}\settodepth{\Depth}{Title}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-1.2900000,4.0200000){\hspace*{\Width}\raisebox{\Height}{Title}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{Text1}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{Text1}\settodepth{\Depth}{Text1}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-1.2900000,3.5200000){\hspace*{\Width}\raisebox{\Height}{Text1}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{fig1}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{fig1}\settodepth{\Depth}{fig1}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-1.2900000,3.0200000){\hspace*{\Width}\raisebox{\Height}{fig1}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{Text2}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{Text2}\settodepth{\Depth}{Text2}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-1.2900000,2.5200000){\hspace*{\Width}\raisebox{\Height}{Text2}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{$\dots$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\dots$}\settodepth{\Depth}{$\dots$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-1.2900000,2.0200000){\hspace*{\Width}\raisebox{\Height}{$\dots$}}%
+%
+}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/maxfun01.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/maxfun01.tex
new file mode 100644
index 0000000000..21b92d4ce5
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/maxfun01.tex
@@ -0,0 +1,49 @@
+%%% /Users/Hannya/Desktop/fig/maxfun01.tex
+%%% Generator=hachtest.cdy
+{\unitlength=8mm%
+\begin{picture}%
+(7.17,6.03)(-3.53,-0.91)%
+\special{pn 8}%
+%
+{%
+\color[rgb]{0,0,0}%
+\special{pa -729 -1613}\special{pa -705 -1495}\special{pa -660 -1300}\special{pa -615 -1132}%
+\special{pa -570 -987}\special{pa -525 -863}\special{pa -479 -756}\special{pa -434 -665}%
+\special{pa -389 -588}\special{pa -344 -522}\special{pa -299 -468}\special{pa -254 -423}%
+\special{pa -209 -387}\special{pa -163 -358}\special{pa -118 -337}\special{pa -73 -323}%
+\special{pa -28 -316}\special{pa 17 -315}\special{pa 62 -321}\special{pa 108 -334}%
+\special{pa 153 -353}\special{pa 198 -379}\special{pa 243 -414}\special{pa 288 -456}%
+\special{pa 333 -509}\special{pa 379 -571}\special{pa 424 -646}\special{pa 469 -734}%
+\special{pa 514 -836}\special{pa 559 -957}\special{pa 604 -1096}\special{pa 650 -1259}%
+\special{pa 695 -1447}\special{pa 729 -1613}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa -64 287}\special{pa 17 132}\special{pa 931 -1613}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{A}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{A}\settodepth{\Depth}{A}\setlength{\Height}{-\Height}%
+\put(1.4625000,2.0975000){\hspace*{\Width}\raisebox{\Height}{A}}%
+%
+}%
+\special{pa -1112 -0}\special{pa 1146 -0}%
+\special{fp}%
+\special{pa 0 287}\special{pa 0 -1613}%
+\special{fp}%
+\settowidth{\Width}{$x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(3.7025000,0.0000000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{\Depth}%
+\put(0.0000000,5.1825000){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+\settowidth{\Width}{O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(-0.0625000,-0.0625000){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/maxfun02.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/maxfun02.tex
new file mode 100644
index 0000000000..ca3cbcd44c
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/maxfun02.tex
@@ -0,0 +1,75 @@
+%%% fig.tex 2016-4-24 20:38
+%%% fig.sce 2016-4-24 20:38
+{\unitlength=8mm%
+\begin{picture}%
+( 8.00000, 4.00000)( -4.00000, -2.00000)%
+\special{pn 8}%
+%
+\special{pa 945 0}\special{pa 939 -59}\special{pa 923 -117}\special{pa 896 -171}\special{pa 859 -220}%
+\special{pa 813 -264}\special{pa 759 -301}\special{pa 700 -329}\special{pa 636 -350}%
+\special{pa 569 -361}\special{pa 500 -364}\special{pa 432 -358}\special{pa 366 -344}%
+\special{pa 303 -323}\special{pa 245 -296}\special{pa 192 -264}\special{pa 145 -229}%
+\special{pa 106 -192}\special{pa 73 -155}\special{pa 47 -119}\special{pa 28 -86}\special{pa 15 -57}%
+\special{pa 6 -33}\special{pa 2 -15}\special{pa 0 -4}\special{pa 0 0}\special{pa 0 -4}%
+\special{pa -2 -15}\special{pa -6 -33}\special{pa -15 -57}\special{pa -28 -86}\special{pa -47 -119}%
+\special{pa -73 -155}\special{pa -106 -192}\special{pa -145 -229}\special{pa -192 -264}%
+\special{pa -245 -296}\special{pa -303 -323}\special{pa -366 -344}\special{pa -432 -358}%
+\special{pa -500 -364}\special{pa -569 -361}\special{pa -636 -350}\special{pa -700 -329}%
+\special{pa -759 -301}\special{pa -813 -264}\special{pa -859 -220}\special{pa -896 -171}%
+\special{pa -923 -117}\special{pa -939 -59}\special{pa -945 0}\special{pa -939 59}%
+\special{pa -923 117}\special{pa -896 171}\special{pa -859 220}\special{pa -813 264}%
+\special{pa -759 301}\special{pa -700 329}\special{pa -636 350}\special{pa -569 361}%
+\special{pa -500 364}\special{pa -432 358}\special{pa -366 344}\special{pa -303 323}%
+\special{pa -245 296}\special{pa -192 264}\special{pa -145 229}\special{pa -106 192}%
+\special{pa -73 155}\special{pa -47 119}\special{pa -28 86}\special{pa -15 57}\special{pa -6 33}%
+\special{pa -2 15}\special{pa 0 4}\special{pa 0 0}\special{pa 0 4}\special{pa 2 15}%
+\special{pa 6 33}\special{pa 15 57}\special{pa 28 86}\special{pa 47 119}\special{pa 73 155}%
+\special{pa 106 192}\special{pa 145 229}\special{pa 192 264}\special{pa 245 296}\special{pa 303 323}%
+\special{pa 366 344}\special{pa 432 358}\special{pa 500 364}\special{pa 569 361}\special{pa 636 350}%
+\special{pa 700 329}\special{pa 759 301}\special{pa 813 264}\special{pa 859 220}\special{pa 896 171}%
+\special{pa 923 117}\special{pa 939 59}\special{pa 945 0}%
+\special{fp}%
+\special{pa 1260 -244}\special{pa 1244 -247}\special{pa 1116 -269}\special{pa 988 -291}%
+\special{pa 860 -313}\special{pa 731 -334}\special{pa 603 -356}\special{pa 475 -378}%
+\special{pa 346 -400}\special{pa 218 -422}\special{pa 90 -444}\special{pa -38 -465}%
+\special{pa -167 -487}\special{pa -295 -509}\special{pa -423 -531}\special{pa -551 -553}%
+\special{pa -680 -575}\special{pa -808 -596}\special{pa -936 -618}\special{pa -1004 -630}%
+\special{fp}%
+\special{pn 8}%
+\special{pa -1260 0}\special{pa 1228 0}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 1185 24}\special{pa 1260 0}\special{pa 1185 -24}\special{pa 1185 0}\special{pa 1185 24}%
+\special{sh 1}\special{ip}%
+\special{pn 1}%
+\special{pa 1185 24}\special{pa 1260 0}\special{pa 1185 -24}\special{pa 1185 0}\special{pa 1185 24}%
+\special{pa 1260 0}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 8}%
+\special{pa 0 630}\special{pa 0 -598}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 24 -555}\special{pa 0 -630}\special{pa -24 -555}\special{pa 0 -555}\special{pa 24 -555}%
+\special{sh 1}\special{ip}%
+\special{pn 1}%
+\special{pa 24 -555}\special{pa 0 -630}\special{pa -24 -555}\special{pa 0 -555}\special{pa 24 -555}%
+\special{pa 0 -630}%
+\special{fp}%
+\special{pn 8}%
+\settowidth{\Width}{$x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.0500,0.0000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{\Depth}%
+\put(0.0000,2.0500){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+%
+\settowidth{\Width}{O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(-0.0500,-0.0500){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/maxima1.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/maxima1.tex
new file mode 100644
index 0000000000..113b6fd572
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/maxima1.tex
@@ -0,0 +1,55 @@
+%%% /Users/takatoosetsuo/Dropbox/kettoday/0826/fig/maxima.tex
+%%% Generator=maxima.cdy
+{\unitlength=1cm%
+\begin{picture}%
+(10,2)(-5,-0.5)%
+\special{pn 8}%
+%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{$\cos x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$\cos x$}\settodepth{\Depth}{$\cos x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(1.0500000,1.0000000){\hspace*{\Width}\raisebox{\Height}{$\cos x$}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 394 -20}\special{pa 394 20}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{$1$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$1$}\settodepth{\Depth}{$1$}\setlength{\Height}{-\Height}%
+\put(1.0000000,-0.1000000){\hspace*{\Width}\raisebox{\Height}{$1$}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 20 -394}\special{pa -20 -394}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{$1$}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{$1$}\settodepth{\Depth}{$1$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-0.1000000,1.0000000){\hspace*{\Width}\raisebox{\Height}{$1$}}%
+%
+}%
+\special{pa -1969 -0}\special{pa 1969 -0}%
+\special{fp}%
+\special{pa 0 197}\special{pa 0 -591}%
+\special{fp}%
+\settowidth{\Width}{$x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(5.0500000,0.0000000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{\Depth}%
+\put(0.0000000,1.5500000){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+\settowidth{\Width}{O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(-0.0500000,-0.0500000){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/meshlab01.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/meshlab01.pdf
new file mode 100644
index 0000000000..02705e7830
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/meshlab01.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/meshlab02.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/meshlab02.pdf
new file mode 100644
index 0000000000..e4fedd9ea3
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/meshlab02.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/meshlab03.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/meshlab03.pdf
new file mode 100644
index 0000000000..06373e0a73
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/meshlab03.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/meshlab06.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/meshlab06.pdf
new file mode 100644
index 0000000000..0a06f8fae9
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/meshlab06.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/middle.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/middle.pdf
new file mode 100644
index 0000000000..92b2fd5e89
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/middle.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/mirror.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/mirror.pdf
new file mode 100644
index 0000000000..cc63669c78
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/mirror.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/mkpttable.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/mkpttable.tex
new file mode 100644
index 0000000000..14964c23bd
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/mkpttable.tex
@@ -0,0 +1,595 @@
+%%% /Users/hannya/Desktop/Ketcindy/リファレンス旧/fig/mkpttable.tex
+%%% Generator=点作図関数比較.cdy
+{\unitlength=10mm%
+\begin{picture}%
+(11.25,19.3)(0,1.5)%
+\special{pn 8}%
+%
+\small%
+\special{pa 0 -8189}\special{pa 0 -591}%
+\special{fp}%
+\special{pa 1280 -8189}\special{pa 1280 -591}%
+\special{fp}%
+\special{pa 2067 -8189}\special{pa 2067 -591}%
+\special{fp}%
+\special{pa 2854 -8189}\special{pa 2854 -591}%
+\special{fp}%
+\special{pa 3642 -8189}\special{pa 3642 -591}%
+\special{fp}%
+\special{pa 4429 -8189}\special{pa 4429 -591}%
+\special{fp}%
+\special{pa 0 -8189}\special{pa 4429 -8189}%
+\special{fp}%
+\special{pa 0 -7972}\special{pa 4429 -7972}%
+\special{fp}%
+\special{pa 0 -7677}\special{pa 4429 -7677}%
+\special{fp}%
+\special{pa 0 -7382}\special{pa 4429 -7382}%
+\special{fp}%
+\special{pa 0 -7087}\special{pa 4429 -7087}%
+\special{fp}%
+\special{pa 0 -6791}\special{pa 4429 -6791}%
+\special{fp}%
+\special{pa 0 -6496}\special{pa 4429 -6496}%
+\special{fp}%
+\special{pa 0 -6201}\special{pa 4429 -6201}%
+\special{fp}%
+\special{pa 0 -5906}\special{pa 4429 -5906}%
+\special{fp}%
+\special{pa 0 -5610}\special{pa 4429 -5610}%
+\special{fp}%
+\special{pa 0 -5315}\special{pa 4429 -5315}%
+\special{fp}%
+\special{pa 0 -5020}\special{pa 4429 -5020}%
+\special{fp}%
+\special{pa 0 -4724}\special{pa 4429 -4724}%
+\special{fp}%
+\special{pa 0 -4429}\special{pa 4429 -4429}%
+\special{fp}%
+\special{pa 0 -4134}\special{pa 4429 -4134}%
+\special{fp}%
+\special{pa 0 -3839}\special{pa 4429 -3839}%
+\special{fp}%
+\special{pa 0 -3543}\special{pa 4429 -3543}%
+\special{fp}%
+\special{pa 0 -3248}\special{pa 4429 -3248}%
+\special{fp}%
+\special{pa 0 -2953}\special{pa 4429 -2953}%
+\special{fp}%
+\special{pa 0 -2657}\special{pa 4429 -2657}%
+\special{fp}%
+\special{pa 0 -2362}\special{pa 4429 -2362}%
+\special{fp}%
+\special{pa 0 -2067}\special{pa 4429 -2067}%
+\special{fp}%
+\special{pa 0 -1772}\special{pa 4429 -1772}%
+\special{fp}%
+\special{pa 0 -1476}\special{pa 4429 -1476}%
+\special{fp}%
+\special{pa 0 -1181}\special{pa 4429 -1181}%
+\special{fp}%
+\special{pa 0 -886}\special{pa 4429 -886}%
+\special{fp}%
+\special{pa 0 -591}\special{pa 4429 -591}%
+\special{fp}%
+\settowidth{\Width}{関数}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{関数}\settodepth{\Depth}{関数}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(1.6200000,20.5200000){\hspace*{\Width}\raisebox{\Height}{関数}}%
+%
+\settowidth{\Width}{戻り値を使う}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{戻り値を使う}\settodepth{\Depth}{戻り値を使う}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.2500000,20.5200000){\hspace*{\Width}\raisebox{\Height}{戻り値を使う}}%
+%
+\settowidth{\Width}{描画する}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{描画する}\settodepth{\Depth}{描画する}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(6.2500000,20.5200000){\hspace*{\Width}\raisebox{\Height}{描画する}}%
+%
+\settowidth{\Width}{幾何点を作る}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{幾何点を作る}\settodepth{\Depth}{幾何点を作る}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(8.2500000,20.5200000){\hspace*{\Width}\raisebox{\Height}{幾何点を作る}}%
+%
+\settowidth{\Width}{TeXに出力}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{TeXに出力}\settodepth{\Depth}{TeXに出力}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(10.2500000,20.5200000){\hspace*{\Width}\raisebox{\Height}{TeXに出力}}%
+%
+\settowidth{\Width}{Pointdata}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{Pointdata}\settodepth{\Depth}{Pointdata}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(1.6200000,19.8800000){\hspace*{\Width}\raisebox{\Height}{Pointdata}}%
+%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.2500000,19.8800000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+\settowidth{\Width}{$\bigcirc$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\bigcirc$}\settodepth{\Depth}{$\bigcirc$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(6.2500000,19.8800000){\hspace*{\Width}\raisebox{\Height}{$\bigcirc$}}%
+%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(8.2500000,19.8800000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+\settowidth{\Width}{$\bigcirc$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\bigcirc$}\settodepth{\Depth}{$\bigcirc$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(10.2500000,19.8800000){\hspace*{\Width}\raisebox{\Height}{$\bigcirc$}}%
+%
+\settowidth{\Width}{Putpoint}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{Putpoint}\settodepth{\Depth}{Putpoint}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(1.6200000,19.1200000){\hspace*{\Width}\raisebox{\Height}{Putpoint}}%
+%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.2500000,19.1200000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(6.2500000,19.1200000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+\settowidth{\Width}{$\bigcirc$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\bigcirc$}\settodepth{\Depth}{$\bigcirc$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(8.2500000,19.1200000){\hspace*{\Width}\raisebox{\Height}{$\bigcirc$}}%
+%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(10.2500000,19.1200000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+\settowidth{\Width}{Putintersect}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{Putintersect}\settodepth{\Depth}{Putintersect}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(1.6200000,18.3800000){\hspace*{\Width}\raisebox{\Height}{Putintersect}}%
+%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.2500000,18.3800000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(6.2500000,18.3800000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+\settowidth{\Width}{$\bigcirc$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\bigcirc$}\settodepth{\Depth}{$\bigcirc$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(8.2500000,18.3800000){\hspace*{\Width}\raisebox{\Height}{$\bigcirc$}}%
+%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(10.2500000,18.3800000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+\settowidth{\Width}{PutonCurve}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{PutonCurve}\settodepth{\Depth}{PutonCurve}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(1.6200000,17.6200000){\hspace*{\Width}\raisebox{\Height}{PutonCurve}}%
+%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.2500000,17.6200000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(6.2500000,17.6200000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+\settowidth{\Width}{$\bigcirc$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\bigcirc$}\settodepth{\Depth}{$\bigcirc$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(8.2500000,17.6200000){\hspace*{\Width}\raisebox{\Height}{$\bigcirc$}}%
+%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(10.2500000,17.6200000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+\settowidth{\Width}{PutonLine}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{PutonLine}\settodepth{\Depth}{PutonLine}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(1.6200000,16.8800000){\hspace*{\Width}\raisebox{\Height}{PutonLine}}%
+%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.2500000,16.8800000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(6.2500000,16.8800000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+\settowidth{\Width}{$\bigcirc$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\bigcirc$}\settodepth{\Depth}{$\bigcirc$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(8.2500000,16.8800000){\hspace*{\Width}\raisebox{\Height}{$\bigcirc$}}%
+%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(10.2500000,16.8800000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+\settowidth{\Width}{PutonSeg}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{PutonSeg}\settodepth{\Depth}{PutonSeg}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(1.6200000,16.1200000){\hspace*{\Width}\raisebox{\Height}{PutonSeg}}%
+%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.2500000,16.1200000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(6.2500000,16.1200000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+\settowidth{\Width}{$\bigcirc$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\bigcirc$}\settodepth{\Depth}{$\bigcirc$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(8.2500000,16.1200000){\hspace*{\Width}\raisebox{\Height}{$\bigcirc$}}%
+%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(10.2500000,16.1200000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+\settowidth{\Width}{Reflectpoint}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{Reflectpoint}\settodepth{\Depth}{Reflectpoint}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(1.6200000,15.3800000){\hspace*{\Width}\raisebox{\Height}{Reflectpoint}}%
+%
+\settowidth{\Width}{$\bigcirc$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\bigcirc$}\settodepth{\Depth}{$\bigcirc$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.2500000,15.3800000){\hspace*{\Width}\raisebox{\Height}{$\bigcirc$}}%
+%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(6.2500000,15.3800000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(8.2500000,15.3800000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(10.2500000,15.3800000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+\settowidth{\Width}{Rotatepoint}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{Rotatepoint}\settodepth{\Depth}{Rotatepoint}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(1.6200000,14.6200000){\hspace*{\Width}\raisebox{\Height}{Rotatepoint}}%
+%
+\settowidth{\Width}{$\bigcirc$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\bigcirc$}\settodepth{\Depth}{$\bigcirc$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.2500000,14.6200000){\hspace*{\Width}\raisebox{\Height}{$\bigcirc$}}%
+%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(6.2500000,14.6200000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(8.2500000,14.6200000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(10.2500000,14.6200000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+\settowidth{\Width}{Scalepoint}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{Scalepoint}\settodepth{\Depth}{Scalepoint}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(1.6200000,13.8800000){\hspace*{\Width}\raisebox{\Height}{Scalepoint}}%
+%
+\settowidth{\Width}{$\bigcirc$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\bigcirc$}\settodepth{\Depth}{$\bigcirc$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.2500000,13.8800000){\hspace*{\Width}\raisebox{\Height}{$\bigcirc$}}%
+%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(6.2500000,13.8800000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(8.2500000,13.8800000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(10.2500000,13.8800000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+\settowidth{\Width}{Translatepoint}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{Translatepoint}\settodepth{\Depth}{Translatepoint}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(1.6200000,13.1200000){\hspace*{\Width}\raisebox{\Height}{Translatepoint}}%
+%
+\settowidth{\Width}{$\bigcirc$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\bigcirc$}\settodepth{\Depth}{$\bigcirc$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.2500000,13.1200000){\hspace*{\Width}\raisebox{\Height}{$\bigcirc$}}%
+%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(6.2500000,13.1200000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(8.2500000,13.1200000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(10.2500000,13.1200000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+\settowidth{\Width}{Pointdata3d}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{Pointdata3d}\settodepth{\Depth}{Pointdata3d}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(1.6200000,12.3800000){\hspace*{\Width}\raisebox{\Height}{Pointdata3d}}%
+%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.2500000,12.3800000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+\settowidth{\Width}{$\bigcirc$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\bigcirc$}\settodepth{\Depth}{$\bigcirc$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(6.2500000,12.3800000){\hspace*{\Width}\raisebox{\Height}{$\bigcirc$}}%
+%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(8.2500000,12.3800000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+\settowidth{\Width}{$\bigcirc$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\bigcirc$}\settodepth{\Depth}{$\bigcirc$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(10.2500000,12.3800000){\hspace*{\Width}\raisebox{\Height}{$\bigcirc$}}%
+%
+\settowidth{\Width}{Putpoint3d}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{Putpoint3d}\settodepth{\Depth}{Putpoint3d}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(1.6200000,11.6200000){\hspace*{\Width}\raisebox{\Height}{Putpoint3d}}%
+%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.2500000,11.6200000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(6.2500000,11.6200000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+\settowidth{\Width}{$\bigcirc$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\bigcirc$}\settodepth{\Depth}{$\bigcirc$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(8.2500000,11.6200000){\hspace*{\Width}\raisebox{\Height}{$\bigcirc$}}%
+%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(10.2500000,11.6200000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+\settowidth{\Width}{Intersectcrvsf}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{Intersectcrvsf}\settodepth{\Depth}{Intersectcrvsf}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(1.6200000,10.8800000){\hspace*{\Width}\raisebox{\Height}{Intersectcrvsf}}%
+%
+\settowidth{\Width}{$\triangle$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\triangle$}\settodepth{\Depth}{$\triangle$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.2500000,10.8800000){\hspace*{\Width}\raisebox{\Height}{$\triangle$}}%
+%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(6.2500000,10.8800000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+\settowidth{\Width}{$\bigcirc$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\bigcirc$}\settodepth{\Depth}{$\bigcirc$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(8.2500000,10.8800000){\hspace*{\Width}\raisebox{\Height}{$\bigcirc$}}%
+%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(10.2500000,10.8800000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+\settowidth{\Width}{IntersectsgpL}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{IntersectsgpL}\settodepth{\Depth}{IntersectsgpL}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(1.6200000,10.1200000){\hspace*{\Width}\raisebox{\Height}{IntersectsgpL}}%
+%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.2500000,10.1200000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+\settowidth{\Width}{$\bigcirc$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\bigcirc$}\settodepth{\Depth}{$\bigcirc$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(6.2500000,10.1200000){\hspace*{\Width}\raisebox{\Height}{$\bigcirc$}}%
+%
+\settowidth{\Width}{$\bigcirc$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\bigcirc$}\settodepth{\Depth}{$\bigcirc$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(8.2500000,10.1200000){\hspace*{\Width}\raisebox{\Height}{$\bigcirc$}}%
+%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(10.2500000,10.1200000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+\settowidth{\Width}{Invparapt}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{Invparapt}\settodepth{\Depth}{Invparapt}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(1.6200000,9.3800000){\hspace*{\Width}\raisebox{\Height}{Invparapt}}%
+%
+\settowidth{\Width}{$\bigcirc$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\bigcirc$}\settodepth{\Depth}{$\bigcirc$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.2500000,9.3800000){\hspace*{\Width}\raisebox{\Height}{$\bigcirc$}}%
+%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(6.2500000,9.3800000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(8.2500000,9.3800000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(10.2500000,9.3800000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+\settowidth{\Width}{Parapt}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{Parapt}\settodepth{\Depth}{Parapt}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(1.6200000,8.6200000){\hspace*{\Width}\raisebox{\Height}{Parapt}}%
+%
+\settowidth{\Width}{$\bigcirc$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\bigcirc$}\settodepth{\Depth}{$\bigcirc$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.2500000,8.6200000){\hspace*{\Width}\raisebox{\Height}{$\bigcirc$}}%
+%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(6.2500000,8.6200000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(8.2500000,8.6200000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(10.2500000,8.6200000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+\settowidth{\Width}{Perpplane}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{Perpplane}\settodepth{\Depth}{Perpplane}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(1.6200000,7.8800000){\hspace*{\Width}\raisebox{\Height}{Perpplane}}%
+%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.2500000,7.8800000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+\settowidth{\Width}{$\bigcirc$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\bigcirc$}\settodepth{\Depth}{$\bigcirc$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(6.2500000,7.8800000){\hspace*{\Width}\raisebox{\Height}{$\bigcirc$}}%
+%
+\settowidth{\Width}{$\bigcirc$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\bigcirc$}\settodepth{\Depth}{$\bigcirc$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(8.2500000,7.8800000){\hspace*{\Width}\raisebox{\Height}{$\bigcirc$}}%
+%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(10.2500000,7.8800000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+\settowidth{\Width}{Perppt}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{Perppt}\settodepth{\Depth}{Perppt}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(1.6200000,7.1200000){\hspace*{\Width}\raisebox{\Height}{Perppt}}%
+%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.2500000,7.1200000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+\settowidth{\Width}{$\bigcirc$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\bigcirc$}\settodepth{\Depth}{$\bigcirc$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(6.2500000,7.1200000){\hspace*{\Width}\raisebox{\Height}{$\bigcirc$}}%
+%
+\settowidth{\Width}{$\bigcirc$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\bigcirc$}\settodepth{\Depth}{$\bigcirc$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(8.2500000,7.1200000){\hspace*{\Width}\raisebox{\Height}{$\bigcirc$}}%
+%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(10.2500000,7.1200000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+\settowidth{\Width}{Pointdata3d}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{Pointdata3d}\settodepth{\Depth}{Pointdata3d}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(1.6200000,6.3800000){\hspace*{\Width}\raisebox{\Height}{Pointdata3d}}%
+%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.2500000,6.3800000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+\settowidth{\Width}{$\bigcirc$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\bigcirc$}\settodepth{\Depth}{$\bigcirc$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(6.2500000,6.3800000){\hspace*{\Width}\raisebox{\Height}{$\bigcirc$}}%
+%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(8.2500000,6.3800000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+\settowidth{\Width}{$\bigcirc$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\bigcirc$}\settodepth{\Depth}{$\bigcirc$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(10.2500000,6.3800000){\hspace*{\Width}\raisebox{\Height}{$\bigcirc$}}%
+%
+\settowidth{\Width}{PutonCurve3d}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{PutonCurve3d}\settodepth{\Depth}{PutonCurve3d}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(1.6200000,5.6200000){\hspace*{\Width}\raisebox{\Height}{PutonCurve3d}}%
+%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.2500000,5.6200000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(6.2500000,5.6200000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+\settowidth{\Width}{$\bigcirc$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\bigcirc$}\settodepth{\Depth}{$\bigcirc$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(8.2500000,5.6200000){\hspace*{\Width}\raisebox{\Height}{$\bigcirc$}}%
+%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(10.2500000,5.6200000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+\settowidth{\Width}{PutonSeg3d}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{PutonSeg3d}\settodepth{\Depth}{PutonSeg3d}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(1.6200000,4.8800000){\hspace*{\Width}\raisebox{\Height}{PutonSeg3d}}%
+%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.2500000,4.8800000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(6.2500000,4.8800000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+\settowidth{\Width}{$\bigcirc$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\bigcirc$}\settodepth{\Depth}{$\bigcirc$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(8.2500000,4.8800000){\hspace*{\Width}\raisebox{\Height}{$\bigcirc$}}%
+%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(10.2500000,4.8800000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+\settowidth{\Width}{Reflectpoint3d}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{Reflectpoint3d}\settodepth{\Depth}{Reflectpoint3d}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(1.6200000,4.1200000){\hspace*{\Width}\raisebox{\Height}{Reflectpoint3d}}%
+%
+\settowidth{\Width}{$\bigcirc$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\bigcirc$}\settodepth{\Depth}{$\bigcirc$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.2500000,4.1200000){\hspace*{\Width}\raisebox{\Height}{$\bigcirc$}}%
+%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(6.2500000,4.1200000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(8.2500000,4.1200000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(10.2500000,4.1200000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+\settowidth{\Width}{Rotatepoint3d}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{Rotatepoint3d}\settodepth{\Depth}{Rotatepoint3d}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(1.6200000,3.3800000){\hspace*{\Width}\raisebox{\Height}{Rotatepoint3d}}%
+%
+\settowidth{\Width}{$\bigcirc$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\bigcirc$}\settodepth{\Depth}{$\bigcirc$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.2500000,3.3800000){\hspace*{\Width}\raisebox{\Height}{$\bigcirc$}}%
+%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(6.2500000,3.3800000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(8.2500000,3.3800000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(10.2500000,3.3800000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+\settowidth{\Width}{Scalepoint3d}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{Scalepoint3d}\settodepth{\Depth}{Scalepoint3d}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(1.6200000,2.6200000){\hspace*{\Width}\raisebox{\Height}{Scalepoint3d}}%
+%
+\settowidth{\Width}{$\bigcirc$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\bigcirc$}\settodepth{\Depth}{$\bigcirc$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.2500000,2.6200000){\hspace*{\Width}\raisebox{\Height}{$\bigcirc$}}%
+%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(6.2500000,2.6200000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(8.2500000,2.6200000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(10.2500000,2.6200000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+\settowidth{\Width}{Translatepoint3d}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{Translatepoint3d}\settodepth{\Depth}{Translatepoint3d}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(1.6200000,1.8800000){\hspace*{\Width}\raisebox{\Height}{Translatepoint3d}}%
+%
+\settowidth{\Width}{$\bigcirc$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\bigcirc$}\settodepth{\Depth}{$\bigcirc$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.2500000,1.8800000){\hspace*{\Width}\raisebox{\Height}{$\bigcirc$}}%
+%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(6.2500000,1.8800000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(8.2500000,1.8800000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(10.2500000,1.8800000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/mkpttableE.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/mkpttableE.tex
new file mode 100644
index 0000000000..259da15766
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/mkpttableE.tex
@@ -0,0 +1,1084 @@
+%%% /Users/Hannya/Desktop/fig/mkpttableE.tex
+%%% Generator=点作図関数比較.cdy
+{\unitlength=10mm%
+\begin{picture}%
+(11.5,19.55)(0,1.25)%
+\special{pn 8}%
+%
+\small%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -8189}\special{pa 0 -492}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 1378 -8189}\special{pa 1378 -492}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 2165 -8189}\special{pa 2165 -492}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 2953 -8189}\special{pa 2953 -492}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 3740 -8189}\special{pa 3740 -492}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 4528 -8189}\special{pa 4528 -492}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -8189}\special{pa 4528 -8189}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -7874}\special{pa 4528 -7874}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -7579}\special{pa 4528 -7579}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -7283}\special{pa 4528 -7283}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -6988}\special{pa 4528 -6988}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -6693}\special{pa 4528 -6693}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -6398}\special{pa 4528 -6398}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -6102}\special{pa 4528 -6102}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -5807}\special{pa 4528 -5807}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -5512}\special{pa 4528 -5512}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -5217}\special{pa 4528 -5217}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -4921}\special{pa 4528 -4921}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -4626}\special{pa 4528 -4626}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -4331}\special{pa 4528 -4331}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -4035}\special{pa 4528 -4035}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -3740}\special{pa 4528 -3740}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -3445}\special{pa 4528 -3445}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -3150}\special{pa 4528 -3150}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -2854}\special{pa 4528 -2854}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -2559}\special{pa 4528 -2559}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -2264}\special{pa 4528 -2264}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -1969}\special{pa 4528 -1969}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -1673}\special{pa 4528 -1673}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -1378}\special{pa 4528 -1378}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -1083}\special{pa 4528 -1083}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -787}\special{pa 4528 -787}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -492}\special{pa 4528 -492}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{command}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{command}\settodepth{\Depth}{command}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(1.7500000,20.4000000){\hspace*{\Width}\raisebox{\Height}{command}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{return}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{return}\settodepth{\Depth}{return}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.5000000,20.4000000){\hspace*{\Width}\raisebox{\Height}{return}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{draw}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{draw}\settodepth{\Depth}{draw}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(6.5000000,20.4000000){\hspace*{\Width}\raisebox{\Height}{draw}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{geo}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{geo}\settodepth{\Depth}{geo}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(8.5000000,20.4000000){\hspace*{\Width}\raisebox{\Height}{geo}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{TeX}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{TeX}\settodepth{\Depth}{TeX}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(10.5000000,20.4000000){\hspace*{\Width}\raisebox{\Height}{TeX}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{Drawpoint}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{Drawpoint}\settodepth{\Depth}{Drawpoint}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(1.7500000,19.6200000){\hspace*{\Width}\raisebox{\Height}{Drawpoint}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.5000000,19.6200000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(6.5000000,19.6200000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(8.5000000,19.6200000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{$\bigcirc$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\bigcirc$}\settodepth{\Depth}{$\bigcirc$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(10.5000000,19.6200000){\hspace*{\Width}\raisebox{\Height}{$\bigcirc$}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{Pointdata}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{Pointdata}\settodepth{\Depth}{Pointdata}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(1.7500000,18.8800000){\hspace*{\Width}\raisebox{\Height}{Pointdata}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.5000000,18.8800000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{$\bigcirc$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\bigcirc$}\settodepth{\Depth}{$\bigcirc$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(6.5000000,18.8800000){\hspace*{\Width}\raisebox{\Height}{$\bigcirc$}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(8.5000000,18.8800000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{$\bigcirc$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\bigcirc$}\settodepth{\Depth}{$\bigcirc$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(10.5000000,18.8800000){\hspace*{\Width}\raisebox{\Height}{$\bigcirc$}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{Putpoint}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{Putpoint}\settodepth{\Depth}{Putpoint}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(1.7500000,18.1200000){\hspace*{\Width}\raisebox{\Height}{Putpoint}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.5000000,18.1200000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(6.5000000,18.1200000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{$\bigcirc$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\bigcirc$}\settodepth{\Depth}{$\bigcirc$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(8.5000000,18.1200000){\hspace*{\Width}\raisebox{\Height}{$\bigcirc$}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(10.5000000,18.1200000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{Putintersect}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{Putintersect}\settodepth{\Depth}{Putintersect}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(1.7500000,17.3800000){\hspace*{\Width}\raisebox{\Height}{Putintersect}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.5000000,17.3800000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(6.5000000,17.3800000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{$\bigcirc$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\bigcirc$}\settodepth{\Depth}{$\bigcirc$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(8.5000000,17.3800000){\hspace*{\Width}\raisebox{\Height}{$\bigcirc$}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(10.5000000,17.3800000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{PutonCurve}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{PutonCurve}\settodepth{\Depth}{PutonCurve}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(1.7500000,16.6200000){\hspace*{\Width}\raisebox{\Height}{PutonCurve}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.5000000,16.6200000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(6.5000000,16.6200000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{$\bigcirc$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\bigcirc$}\settodepth{\Depth}{$\bigcirc$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(8.5000000,16.6200000){\hspace*{\Width}\raisebox{\Height}{$\bigcirc$}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(10.5000000,16.6200000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{PutonLine}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{PutonLine}\settodepth{\Depth}{PutonLine}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(1.7500000,15.8800000){\hspace*{\Width}\raisebox{\Height}{PutonLine}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.5000000,15.8800000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(6.5000000,15.8800000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{$\bigcirc$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\bigcirc$}\settodepth{\Depth}{$\bigcirc$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(8.5000000,15.8800000){\hspace*{\Width}\raisebox{\Height}{$\bigcirc$}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(10.5000000,15.8800000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{PutonSeg}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{PutonSeg}\settodepth{\Depth}{PutonSeg}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(1.7500000,15.1200000){\hspace*{\Width}\raisebox{\Height}{PutonSeg}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.5000000,15.1200000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(6.5000000,15.1200000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{$\bigcirc$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\bigcirc$}\settodepth{\Depth}{$\bigcirc$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(8.5000000,15.1200000){\hspace*{\Width}\raisebox{\Height}{$\bigcirc$}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(10.5000000,15.1200000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{Reflectpoint}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{Reflectpoint}\settodepth{\Depth}{Reflectpoint}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(1.7500000,14.3800000){\hspace*{\Width}\raisebox{\Height}{Reflectpoint}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{$\bigcirc$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\bigcirc$}\settodepth{\Depth}{$\bigcirc$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.5000000,14.3800000){\hspace*{\Width}\raisebox{\Height}{$\bigcirc$}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(6.5000000,14.3800000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(8.5000000,14.3800000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(10.5000000,14.3800000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{Rotatepoint}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{Rotatepoint}\settodepth{\Depth}{Rotatepoint}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(1.7500000,13.6200000){\hspace*{\Width}\raisebox{\Height}{Rotatepoint}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{$\bigcirc$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\bigcirc$}\settodepth{\Depth}{$\bigcirc$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.5000000,13.6200000){\hspace*{\Width}\raisebox{\Height}{$\bigcirc$}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(6.5000000,13.6200000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(8.5000000,13.6200000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(10.5000000,13.6200000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{Scalepoint}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{Scalepoint}\settodepth{\Depth}{Scalepoint}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(1.7500000,12.8800000){\hspace*{\Width}\raisebox{\Height}{Scalepoint}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{$\bigcirc$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\bigcirc$}\settodepth{\Depth}{$\bigcirc$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.5000000,12.8800000){\hspace*{\Width}\raisebox{\Height}{$\bigcirc$}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(6.5000000,12.8800000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(8.5000000,12.8800000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(10.5000000,12.8800000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{Translatepoint}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{Translatepoint}\settodepth{\Depth}{Translatepoint}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(1.7500000,12.1200000){\hspace*{\Width}\raisebox{\Height}{Translatepoint}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{$\bigcirc$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\bigcirc$}\settodepth{\Depth}{$\bigcirc$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.5000000,12.1200000){\hspace*{\Width}\raisebox{\Height}{$\bigcirc$}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(6.5000000,12.1200000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(8.5000000,12.1200000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(10.5000000,12.1200000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{Drawpoint3d}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{Drawpoint3d}\settodepth{\Depth}{Drawpoint3d}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(1.7500000,11.3800000){\hspace*{\Width}\raisebox{\Height}{Drawpoint3d}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.5000000,11.3800000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{$\bigcirc$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\bigcirc$}\settodepth{\Depth}{$\bigcirc$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(6.5000000,11.3800000){\hspace*{\Width}\raisebox{\Height}{$\bigcirc$}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(8.5000000,11.3800000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(10.5000000,11.3800000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{Putpoint3d}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{Putpoint3d}\settodepth{\Depth}{Putpoint3d}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(1.7500000,10.6200000){\hspace*{\Width}\raisebox{\Height}{Putpoint3d}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.5000000,10.6200000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(6.5000000,10.6200000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{$\bigcirc$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\bigcirc$}\settodepth{\Depth}{$\bigcirc$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(8.5000000,10.6200000){\hspace*{\Width}\raisebox{\Height}{$\bigcirc$}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(10.5000000,10.6200000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{Intersectcrvsf}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{Intersectcrvsf}\settodepth{\Depth}{Intersectcrvsf}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(1.7500000,9.8800000){\hspace*{\Width}\raisebox{\Height}{Intersectcrvsf}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{$\triangle$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\triangle$}\settodepth{\Depth}{$\triangle$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.5000000,9.8800000){\hspace*{\Width}\raisebox{\Height}{$\triangle$}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(6.5000000,9.8800000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{$\bigcirc$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\bigcirc$}\settodepth{\Depth}{$\bigcirc$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(8.5000000,9.8800000){\hspace*{\Width}\raisebox{\Height}{$\bigcirc$}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(10.5000000,9.8800000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{IntersectsgpL}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{IntersectsgpL}\settodepth{\Depth}{IntersectsgpL}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(1.7500000,9.1200000){\hspace*{\Width}\raisebox{\Height}{IntersectsgpL}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.5000000,9.1200000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{$\bigcirc$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\bigcirc$}\settodepth{\Depth}{$\bigcirc$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(6.5000000,9.1200000){\hspace*{\Width}\raisebox{\Height}{$\bigcirc$}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{$\bigcirc$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\bigcirc$}\settodepth{\Depth}{$\bigcirc$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(8.5000000,9.1200000){\hspace*{\Width}\raisebox{\Height}{$\bigcirc$}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(10.5000000,9.1200000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{Invparapt}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{Invparapt}\settodepth{\Depth}{Invparapt}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(1.7500000,8.3800000){\hspace*{\Width}\raisebox{\Height}{Invparapt}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{$\bigcirc$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\bigcirc$}\settodepth{\Depth}{$\bigcirc$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.5000000,8.3800000){\hspace*{\Width}\raisebox{\Height}{$\bigcirc$}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(6.5000000,8.3800000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(8.5000000,8.3800000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(10.5000000,8.3800000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{Parapt}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{Parapt}\settodepth{\Depth}{Parapt}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(1.7500000,7.6200000){\hspace*{\Width}\raisebox{\Height}{Parapt}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{$\bigcirc$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\bigcirc$}\settodepth{\Depth}{$\bigcirc$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.5000000,7.6200000){\hspace*{\Width}\raisebox{\Height}{$\bigcirc$}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(6.5000000,7.6200000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(8.5000000,7.6200000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(10.5000000,7.6200000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{Perpplane}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{Perpplane}\settodepth{\Depth}{Perpplane}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(1.7500000,6.8800000){\hspace*{\Width}\raisebox{\Height}{Perpplane}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.5000000,6.8800000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{$\bigcirc$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\bigcirc$}\settodepth{\Depth}{$\bigcirc$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(6.5000000,6.8800000){\hspace*{\Width}\raisebox{\Height}{$\bigcirc$}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{$\bigcirc$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\bigcirc$}\settodepth{\Depth}{$\bigcirc$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(8.5000000,6.8800000){\hspace*{\Width}\raisebox{\Height}{$\bigcirc$}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(10.5000000,6.8800000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{Perppt}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{Perppt}\settodepth{\Depth}{Perppt}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(1.7500000,6.1200000){\hspace*{\Width}\raisebox{\Height}{Perppt}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.5000000,6.1200000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{$\bigcirc$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\bigcirc$}\settodepth{\Depth}{$\bigcirc$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(6.5000000,6.1200000){\hspace*{\Width}\raisebox{\Height}{$\bigcirc$}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{$\bigcirc$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\bigcirc$}\settodepth{\Depth}{$\bigcirc$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(8.5000000,6.1200000){\hspace*{\Width}\raisebox{\Height}{$\bigcirc$}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(10.5000000,6.1200000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{PutonCurve3d}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{PutonCurve3d}\settodepth{\Depth}{PutonCurve3d}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(1.7500000,5.3800000){\hspace*{\Width}\raisebox{\Height}{PutonCurve3d}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.5000000,5.3800000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(6.5000000,5.3800000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{$\bigcirc$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\bigcirc$}\settodepth{\Depth}{$\bigcirc$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(8.5000000,5.3800000){\hspace*{\Width}\raisebox{\Height}{$\bigcirc$}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(10.5000000,5.3800000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{PutonSeg3d}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{PutonSeg3d}\settodepth{\Depth}{PutonSeg3d}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(1.7500000,4.6200000){\hspace*{\Width}\raisebox{\Height}{PutonSeg3d}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.5000000,4.6200000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(6.5000000,4.6200000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{$\bigcirc$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\bigcirc$}\settodepth{\Depth}{$\bigcirc$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(8.5000000,4.6200000){\hspace*{\Width}\raisebox{\Height}{$\bigcirc$}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(10.5000000,4.6200000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{Reflectpoint3d}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{Reflectpoint3d}\settodepth{\Depth}{Reflectpoint3d}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(1.7500000,3.8800000){\hspace*{\Width}\raisebox{\Height}{Reflectpoint3d}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{$\bigcirc$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\bigcirc$}\settodepth{\Depth}{$\bigcirc$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.5000000,3.8800000){\hspace*{\Width}\raisebox{\Height}{$\bigcirc$}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(6.5000000,3.8800000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(8.5000000,3.8800000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(10.5000000,3.8800000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{Rotatepoint3d}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{Rotatepoint3d}\settodepth{\Depth}{Rotatepoint3d}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(1.7500000,3.1200000){\hspace*{\Width}\raisebox{\Height}{Rotatepoint3d}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{$\bigcirc$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\bigcirc$}\settodepth{\Depth}{$\bigcirc$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.5000000,3.1200000){\hspace*{\Width}\raisebox{\Height}{$\bigcirc$}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(6.5000000,3.1200000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(8.5000000,3.1200000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(10.5000000,3.1200000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{Scalepoint3d}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{Scalepoint3d}\settodepth{\Depth}{Scalepoint3d}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(1.7500000,2.3800000){\hspace*{\Width}\raisebox{\Height}{Scalepoint3d}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{$\bigcirc$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\bigcirc$}\settodepth{\Depth}{$\bigcirc$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.5000000,2.3800000){\hspace*{\Width}\raisebox{\Height}{$\bigcirc$}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(6.5000000,2.3800000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(8.5000000,2.3800000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(10.5000000,2.3800000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{Translatepoint3d}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{Translatepoint3d}\settodepth{\Depth}{Translatepoint3d}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(1.7500000,1.6200000){\hspace*{\Width}\raisebox{\Height}{Translatepoint3d}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{$\bigcirc$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\bigcirc$}\settodepth{\Depth}{$\bigcirc$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.5000000,1.6200000){\hspace*{\Width}\raisebox{\Height}{$\bigcirc$}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(6.5000000,1.6200000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(8.5000000,1.6200000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{-}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{-}\settodepth{\Depth}{-}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(10.5000000,1.6200000){\hspace*{\Width}\raisebox{\Height}{-}}%
+%
+}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/move.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/move.pdf
new file mode 100644
index 0000000000..de9693bccc
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/move.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/moviedata01.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/moviedata01.pdf
new file mode 100644
index 0000000000..8a4f93391c
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/moviedata01.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/moviedata02.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/moviedata02.pdf
new file mode 100644
index 0000000000..43641655b0
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/moviedata02.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/multi-add-circle.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/multi-add-circle.pdf
new file mode 100644
index 0000000000..1aaf7ff4f8
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/multi-add-circle.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/multi-add-line.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/multi-add-line.pdf
new file mode 100644
index 0000000000..c4137a7608
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/multi-add-line.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/multi-add-parallel.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/multi-add-parallel.pdf
new file mode 100644
index 0000000000..f02f71523b
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/multi-add-parallel.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/multi-add-perp.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/multi-add-perp.pdf
new file mode 100644
index 0000000000..95836f980e
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/multi-add-perp.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/mvgaiyou01.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/mvgaiyou01.pdf
new file mode 100644
index 0000000000..3a132c2db6
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/mvgaiyou01.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/mxbatch.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/mxbatch.tex
new file mode 100644
index 0000000000..cfcf53fd78
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/mxbatch.tex
@@ -0,0 +1,430 @@
+%%% /Users/Hannya/Desktop/fig/mxbatch.tex
+%%% Generator=ex2fourier2.cdy
+{\unitlength=1cm%
+\begin{picture}%
+(9.91,2.89)(-5,-1.35)%
+\special{pn 8}%
+%
+{%
+\color[rgb]{0,0,0}%
+}%
+\special{pn 8}%
+\special{pa -1969 -0}\special{pa 1894 -0}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 1858 24}\special{pa 1933 0}\special{pa 1858 -24}\special{pa 1858 0}\special{pa 1858 24}%
+\special{sh 1}\special{ip}%
+\special{pn 1}%
+\special{pa 1858 24}\special{pa 1933 -0}\special{pa 1858 -24}\special{pa 1858 -0}%
+\special{pa 1858 24}\special{pa 1933 -0}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 8}%
+\special{pa 0 531}\special{pa 0 -567}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 24 -531}\special{pa 0 -606}\special{pa -24 -531}\special{pa 0 -531}\special{pa 24 -531}%
+\special{sh 1}\special{ip}%
+\special{pn 1}%
+\special{pa 24 -531}\special{pa 0 -606}\special{pa -24 -531}\special{pa 0 -531}%
+\special{pa 24 -531}\special{pa 0 -606}%
+\special{fp}%
+\special{pn 8}%
+\settowidth{\Width}{$x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.9600000,0.0000000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{\Depth}%
+\put(0.0000000,1.5900000){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+\settowidth{\Width}{O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(-0.0500000,-0.0500000){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+{%
+\color[rgb]{1,0,0}%
+\special{pn 16}%
+\special{pa -1181 -394}\special{pa -787 -394}%
+\special{fp}%
+\special{pn 8}%
+}%
+{%
+\color[rgb]{1,0,0}%
+\special{pn 16}%
+\special{pa -787 -0}\special{pa -394 -0}%
+\special{fp}%
+\special{pn 8}%
+}%
+{%
+\color[rgb]{1,0,0}%
+\special{pn 16}%
+\special{pa -394 -394}\special{pa 394 394}%
+\special{fp}%
+\special{pn 8}%
+}%
+{%
+\color[rgb]{1,0,0}%
+\special{pn 16}%
+\special{pa 394 -0}\special{pa 787 -0}%
+\special{fp}%
+\special{pn 8}%
+}%
+{%
+\color[rgb]{1,0,0}%
+\special{pn 16}%
+\special{pa 787 394}\special{pa 1181 394}%
+\special{fp}%
+\special{pn 8}%
+}%
+{%
+\color[rgb]{1,0,0}%
+\special{pn 16}%
+\special{pa 1181 -394}\special{pa 1575 -394}%
+\special{fp}%
+\special{pn 8}%
+}%
+{%
+\color[rgb]{1,0,0}%
+\special{pn 16}%
+\special{pn 8}%
+}%
+{%
+\color[rgb]{1,0,0}%
+\special{pn 16}%
+\special{pa 1575 -0}\special{pa 1933 -0}%
+\special{fp}%
+\special{pn 8}%
+}%
+{%
+\color[rgb]{1,0,0}%
+\special{pn 16}%
+\special{pn 8}%
+}%
+{%
+\color[rgb]{1,0,0}%
+\special{pn 16}%
+\special{pn 8}%
+}%
+{%
+\color[rgb]{1,0,0}%
+\special{pn 16}%
+\special{pn 8}%
+}%
+{%
+\color[rgb]{1,0,0}%
+\special{pn 16}%
+\special{pn 8}%
+}%
+{%
+\color[rgb]{1,0,0}%
+\special{pn 16}%
+\special{pa -1969 -0}\special{pa -1575 -0}%
+\special{fp}%
+\special{pn 8}%
+}%
+{%
+\color[rgb]{1,0,0}%
+\special{pn 16}%
+\special{pn 8}%
+}%
+{%
+\color[rgb]{1,0,0}%
+\special{pn 16}%
+\special{pa -1575 394}\special{pa -1181 394}%
+\special{fp}%
+\special{pn 8}%
+}%
+{%
+\color[rgb]{1,0,0}%
+%
+%
+}%
+{%
+\color[rgb]{1,0,0}%
+%
+%
+}%
+{%
+\color[rgb]{1,0,0}%
+\special{pa -1969 394}\special{pa -1969 358}\special{fp}\special{pa -1969 322}\special{pa -1969 286}\special{fp}%
+\special{pa -1969 251}\special{pa -1969 215}\special{fp}\special{pa -1969 179}\special{pa -1969 143}\special{fp}%
+\special{pa -1969 107}\special{pa -1969 72}\special{fp}\special{pa -1969 36}\special{pa -1969 0}\special{fp}%
+%
+%
+}%
+{%
+\color[rgb]{1,0,0}%
+\special{pa -1575 0}\special{pa -1575 36}\special{fp}\special{pa -1575 72}\special{pa -1575 107}\special{fp}%
+\special{pa -1575 143}\special{pa -1575 179}\special{fp}\special{pa -1575 215}\special{pa -1575 251}\special{fp}%
+\special{pa -1575 286}\special{pa -1575 322}\special{fp}\special{pa -1575 358}\special{pa -1575 394}\special{fp}%
+%
+%
+}%
+{%
+\color[rgb]{1,0,0}%
+\special{pa -1181 394}\special{pa -1181 356}\special{fp}\special{pa -1181 319}\special{pa -1181 281}\special{fp}%
+\special{pa -1181 244}\special{pa -1181 206}\special{fp}\special{pa -1181 169}\special{pa -1181 131}\special{fp}%
+\special{pa -1181 94}\special{pa -1181 56}\special{fp}\special{pa -1181 19}\special{pa -1181 -19}\special{fp}%
+\special{pa -1181 -56}\special{pa -1181 -94}\special{fp}\special{pa -1181 -131}\special{pa -1181 -169}\special{fp}%
+\special{pa -1181 -206}\special{pa -1181 -244}\special{fp}\special{pa -1181 -281}\special{pa -1181 -319}\special{fp}%
+\special{pa -1181 -356}\special{pa -1181 -394}\special{fp}%
+%
+}%
+{%
+\color[rgb]{1,0,0}%
+\special{pa -787 -394}\special{pa -787 -358}\special{fp}\special{pa -787 -322}\special{pa -787 -286}\special{fp}%
+\special{pa -787 -251}\special{pa -787 -215}\special{fp}\special{pa -787 -179}\special{pa -787 -143}\special{fp}%
+\special{pa -787 -107}\special{pa -787 -72}\special{fp}\special{pa -787 -36}\special{pa -787 0}\special{fp}%
+%
+%
+}%
+{%
+\color[rgb]{1,0,0}%
+\special{pa -394 0}\special{pa -394 -36}\special{fp}\special{pa -394 -72}\special{pa -394 -107}\special{fp}%
+\special{pa -394 -143}\special{pa -394 -179}\special{fp}\special{pa -394 -215}\special{pa -394 -251}\special{fp}%
+\special{pa -394 -286}\special{pa -394 -322}\special{fp}\special{pa -394 -358}\special{pa -394 -394}\special{fp}%
+%
+%
+}%
+{%
+\color[rgb]{1,0,0}%
+\special{pa 394 394}\special{pa 394 358}\special{fp}\special{pa 394 322}\special{pa 394 286}\special{fp}%
+\special{pa 394 251}\special{pa 394 215}\special{fp}\special{pa 394 179}\special{pa 394 143}\special{fp}%
+\special{pa 394 107}\special{pa 394 72}\special{fp}\special{pa 394 36}\special{pa 394 0}\special{fp}%
+%
+%
+}%
+{%
+\color[rgb]{1,0,0}%
+\special{pa 787 0}\special{pa 787 36}\special{fp}\special{pa 787 72}\special{pa 787 107}\special{fp}%
+\special{pa 787 143}\special{pa 787 179}\special{fp}\special{pa 787 215}\special{pa 787 251}\special{fp}%
+\special{pa 787 286}\special{pa 787 322}\special{fp}\special{pa 787 358}\special{pa 787 394}\special{fp}%
+%
+%
+}%
+{%
+\color[rgb]{1,0,0}%
+\special{pa 1181 394}\special{pa 1181 356}\special{fp}\special{pa 1181 319}\special{pa 1181 281}\special{fp}%
+\special{pa 1181 244}\special{pa 1181 206}\special{fp}\special{pa 1181 169}\special{pa 1181 131}\special{fp}%
+\special{pa 1181 94}\special{pa 1181 56}\special{fp}\special{pa 1181 19}\special{pa 1181 -19}\special{fp}%
+\special{pa 1181 -56}\special{pa 1181 -94}\special{fp}\special{pa 1181 -131}\special{pa 1181 -169}\special{fp}%
+\special{pa 1181 -206}\special{pa 1181 -244}\special{fp}\special{pa 1181 -281}\special{pa 1181 -319}\special{fp}%
+\special{pa 1181 -356}\special{pa 1181 -394}\special{fp}%
+%
+}%
+{%
+\color[rgb]{1,0,0}%
+\special{pa 1575 -394}\special{pa 1575 -358}\special{fp}\special{pa 1575 -322}\special{pa 1575 -286}\special{fp}%
+\special{pa 1575 -251}\special{pa 1575 -215}\special{fp}\special{pa 1575 -179}\special{pa 1575 -143}\special{fp}%
+\special{pa 1575 -107}\special{pa 1575 -72}\special{fp}\special{pa 1575 -36}\special{pa 1575 0}\special{fp}%
+%
+%
+}%
+{%
+\color[rgb]{1,0,0}%
+%
+%
+}%
+{%
+\color[rgb]{1,0,0}%
+%
+%
+}%
+{%
+\color[rgb]{1,0,0}%
+%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa -394 -20}\special{pa -394 20}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{$1$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$1$}\settodepth{\Depth}{$1$}\setlength{\Height}{\Depth}%
+\put(1.0000000,0.0500000){\hspace*{\Width}\raisebox{\Height}{$1$}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 787 -20}\special{pa 787 20}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{$2$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$2$}\settodepth{\Depth}{$2$}\setlength{\Height}{\Depth}%
+\put(2.0000000,0.0500000){\hspace*{\Width}\raisebox{\Height}{$2$}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 1181 -20}\special{pa 1181 20}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{$3$}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{$3$}\settodepth{\Depth}{$3$}\setlength{\Height}{\Depth}%
+\put(2.9500000,0.0500000){\hspace*{\Width}\raisebox{\Height}{$3$}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa -394 -20}\special{pa -394 20}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{$-1$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$-1$}\settodepth{\Depth}{$-1$}\setlength{\Height}{-\Height}%
+\put(-1.0000000,-0.1000000){\hspace*{\Width}\raisebox{\Height}{$-1$}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa -787 -20}\special{pa -787 20}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{$-2$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$-2$}\settodepth{\Depth}{$-2$}\setlength{\Height}{-\Height}%
+\put(-2.0000000,-0.1000000){\hspace*{\Width}\raisebox{\Height}{$-2$}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa -1181 -20}\special{pa -1181 20}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{$-3$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$-3$}\settodepth{\Depth}{$-3$}\setlength{\Height}{-\Height}%
+\put(-3.0000000,-0.1000000){\hspace*{\Width}\raisebox{\Height}{$-3$}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa -1969 179}\special{pa -1959 126}\special{pa -1949 78}\special{pa -1939 36}%
+\special{pa -1929 5}\special{pa -1920 -16}\special{pa -1910 -26}\special{pa -1900 -27}%
+\special{pa -1890 -21}\special{pa -1881 -11}\special{pa -1871 1}\special{pa -1861 10}%
+\special{pa -1851 17}\special{pa -1842 19}\special{pa -1832 16}\special{pa -1822 9}%
+\special{pa -1812 0}\special{pa -1803 -9}\special{pa -1793 -16}\special{pa -1783 -20}%
+\special{pa -1773 -20}\special{pa -1764 -15}\special{pa -1754 -7}\special{pa -1744 3}%
+\special{pa -1734 14}\special{pa -1725 23}\special{pa -1715 27}\special{pa -1705 27}%
+\special{pa -1695 20}\special{pa -1686 9}\special{pa -1676 -6}\special{pa -1666 -22}%
+\special{pa -1656 -36}\special{pa -1647 -44}\special{pa -1637 -43}\special{pa -1627 -32}%
+\special{pa -1617 -8}\special{pa -1608 28}\special{pa -1598 74}\special{pa -1588 127}%
+\special{pa -1578 185}\special{pa -1569 243}\special{pa -1559 297}\special{pa -1549 344}%
+\special{pa -1539 380}\special{pa -1530 405}\special{pa -1520 418}\special{pa -1510 421}%
+\special{pa -1500 416}\special{pa -1491 407}\special{pa -1481 395}\special{pa -1471 385}%
+\special{pa -1461 378}\special{pa -1452 376}\special{pa -1442 379}\special{pa -1432 386}%
+\special{pa -1422 395}\special{pa -1413 405}\special{pa -1403 412}\special{pa -1393 416}%
+\special{pa -1383 415}\special{pa -1374 409}\special{pa -1364 398}\special{pa -1354 385}%
+\special{pa -1344 373}\special{pa -1334 363}\special{pa -1325 358}\special{pa -1315 361}%
+\special{pa -1305 371}\special{pa -1295 387}\special{pa -1286 409}\special{pa -1276 431}%
+\special{pa -1266 451}\special{pa -1256 462}\special{pa -1247 460}\special{pa -1237 442}%
+\special{pa -1227 404}\special{pa -1217 347}\special{pa -1208 271}\special{pa -1198 179}%
+\special{pa -1188 77}\special{pa -1178 -29}\special{pa -1169 -134}\special{pa -1159 -231}%
+\special{pa -1149 -315}\special{pa -1139 -381}\special{pa -1130 -427}\special{pa -1120 -454}%
+\special{pa -1110 -463}\special{pa -1100 -457}\special{pa -1091 -441}\special{pa -1081 -419}%
+\special{pa -1071 -397}\special{pa -1061 -377}\special{pa -1052 -364}\special{pa -1042 -358}%
+\special{pa -1032 -360}\special{pa -1022 -368}\special{pa -1013 -379}\special{pa -1003 -392}%
+\special{pa -993 -404}\special{pa -983 -413}\special{pa -974 -416}\special{pa -964 -414}%
+\special{pa -954 -408}\special{pa -944 -400}\special{pa -935 -390}\special{pa -925 -382}%
+\special{pa -915 -377}\special{pa -905 -377}\special{pa -896 -381}\special{pa -886 -390}%
+\special{pa -876 -401}\special{pa -866 -412}\special{pa -857 -420}\special{pa -847 -420}%
+\special{pa -837 -412}\special{pa -827 -392}\special{pa -818 -361}\special{pa -808 -319}%
+\special{pa -798 -268}\special{pa -788 -212}\special{pa -779 -153}\special{pa -769 -97}%
+\special{pa -759 -47}\special{pa -749 -7}\special{pa -740 22}\special{pa -730 39}%
+\special{pa -720 45}\special{pa -710 40}\special{pa -700 29}\special{pa -691 14}%
+\special{pa -681 -2}\special{pa -671 -15}\special{pa -661 -24}\special{pa -652 -28}%
+\special{pa -642 -25}\special{pa -632 -18}\special{pa -622 -8}\special{pa -613 3}%
+\special{pa -603 12}\special{pa -593 18}\special{pa -583 21}\special{pa -574 19}%
+\special{pa -564 12}\special{pa -554 4}\special{pa -544 -5}\special{pa -535 -13}%
+\special{pa -525 -18}\special{pa -515 -18}\special{pa -505 -14}\special{pa -496 -5}%
+\special{pa -486 6}\special{pa -476 17}\special{pa -466 25}\special{pa -457 28}%
+\special{pa -447 22}\special{pa -437 6}\special{pa -427 -21}\special{pa -418 -58}%
+\special{pa -408 -104}\special{pa -398 -155}\special{pa -388 -209}\special{pa -379 -260}%
+\special{pa -369 -306}\special{pa -359 -342}\special{pa -349 -367}\special{pa -340 -379}%
+\special{pa -330 -378}\special{pa -320 -367}\special{pa -310 -346}\special{pa -301 -321}%
+\special{pa -291 -294}\special{pa -281 -268}\special{pa -271 -246}\special{pa -262 -229}%
+\special{pa -252 -219}\special{pa -242 -215}\special{pa -232 -215}\special{pa -223 -218}%
+\special{pa -213 -220}\special{pa -203 -221}\special{pa -193 -219}\special{pa -184 -211}%
+\special{pa -174 -199}\special{pa -164 -183}\special{pa -154 -163}\special{pa -145 -142}%
+\special{pa -135 -122}\special{pa -125 -104}\special{pa -115 -90}\special{pa -106 -81}%
+\special{pa -96 -75}\special{pa -86 -73}\special{pa -76 -73}\special{pa -66 -74}%
+\special{pa -57 -73}\special{pa -47 -69}\special{pa -37 -62}\special{pa -27 -50}%
+\special{pa -18 -34}\special{pa -8 -16}\special{pa 2 4}\special{pa 12 23}%
+\special{pa 21 40}\special{pa 31 55}\special{pa 41 65}\special{pa 51 71}%
+\special{pa 60 73}\special{pa 70 74}\special{pa 80 73}\special{pa 90 74}%
+\special{pa 99 77}\special{pa 109 84}\special{pa 119 95}\special{pa 129 111}%
+\special{pa 138 129}\special{pa 148 150}\special{pa 158 171}\special{pa 168 189}%
+\special{pa 177 204}\special{pa 187 215}\special{pa 197 220}\special{pa 207 221}%
+\special{pa 216 219}\special{pa 226 216}\special{pa 236 214}\special{pa 246 216}%
+\special{pa 255 222}\special{pa 265 235}\special{pa 275 253}\special{pa 285 277}%
+\special{pa 294 304}\special{pa 304 331}\special{pa 314 355}\special{pa 324 372}%
+\special{pa 333 380}\special{pa 343 376}\special{pa 353 359}\special{pa 363 330}%
+\special{pa 372 290}\special{pa 382 242}\special{pa 392 189}\special{pa 402 136}%
+\special{pa 411 86}\special{pa 421 43}\special{pa 431 10}\special{pa 441 -13}%
+\special{pa 450 -25}\special{pa 460 -27}\special{pa 470 -22}\special{pa 480 -13}%
+\special{pa 489 -1}\special{pa 499 9}\special{pa 509 16}\special{pa 519 19}%
+\special{pa 529 17}\special{pa 538 11}\special{pa 548 2}\special{pa 558 -7}%
+\special{pa 568 -15}\special{pa 577 -20}\special{pa 587 -20}\special{pa 597 -17}%
+\special{pa 607 -9}\special{pa 616 1}\special{pa 626 12}\special{pa 636 21}%
+\special{pa 646 27}\special{pa 655 27}\special{pa 665 22}\special{pa 675 11}%
+\special{pa 685 -3}\special{pa 694 -19}\special{pa 704 -34}\special{pa 714 -43}%
+\special{pa 724 -44}\special{pa 733 -34}\special{pa 743 -13}\special{pa 753 20}%
+\special{pa 763 65}\special{pa 772 117}\special{pa 782 175}\special{pa 792 233}%
+\special{pa 802 288}\special{pa 811 336}\special{pa 821 374}\special{pa 831 401}%
+\special{pa 841 416}\special{pa 850 421}\special{pa 860 418}\special{pa 870 409}%
+\special{pa 880 397}\special{pa 889 387}\special{pa 899 379}\special{pa 909 376}%
+\special{pa 919 378}\special{pa 928 384}\special{pa 938 393}\special{pa 948 403}%
+\special{pa 958 411}\special{pa 967 416}\special{pa 977 415}\special{pa 987 410}%
+\special{pa 997 400}\special{pa 1006 388}\special{pa 1016 375}\special{pa 1026 364}%
+\special{pa 1036 358}\special{pa 1045 360}\special{pa 1055 368}\special{pa 1065 384}%
+\special{pa 1075 405}\special{pa 1084 427}\special{pa 1094 448}\special{pa 1104 461}%
+\special{pa 1114 462}\special{pa 1123 446}\special{pa 1133 412}\special{pa 1143 359}%
+\special{pa 1153 286}\special{pa 1163 197}\special{pa 1172 96}\special{pa 1182 -10}%
+\special{pa 1192 -116}\special{pa 1202 -215}\special{pa 1211 -301}\special{pa 1221 -370}%
+\special{pa 1231 -420}\special{pa 1241 -451}\special{pa 1250 -462}\special{pa 1260 -459}%
+\special{pa 1270 -444}\special{pa 1280 -423}\special{pa 1289 -401}\special{pa 1299 -381}%
+\special{pa 1309 -366}\special{pa 1319 -359}\special{pa 1328 -359}\special{pa 1338 -366}%
+\special{pa 1348 -377}\special{pa 1358 -390}\special{pa 1367 -402}\special{pa 1377 -411}%
+\special{pa 1387 -416}\special{pa 1397 -415}\special{pa 1406 -410}\special{pa 1416 -401}%
+\special{pa 1426 -392}\special{pa 1436 -383}\special{pa 1445 -377}\special{pa 1455 -376}%
+\special{pa 1465 -380}\special{pa 1475 -388}\special{pa 1484 -399}\special{pa 1494 -411}%
+\special{pa 1504 -419}\special{pa 1514 -421}\special{pa 1523 -414}\special{pa 1533 -397}%
+\special{pa 1543 -368}\special{pa 1553 -328}\special{pa 1562 -278}\special{pa 1572 -222}%
+\special{pa 1582 -164}\special{pa 1592 -107}\special{pa 1601 -56}\special{pa 1611 -13}%
+\special{pa 1621 18}\special{pa 1631 37}\special{pa 1640 44}\special{pa 1650 42}%
+\special{pa 1660 31}\special{pa 1670 16}\special{pa 1679 1}\special{pa 1689 -13}%
+\special{pa 1699 -23}\special{pa 1709 -27}\special{pa 1718 -26}\special{pa 1728 -20}%
+\special{pa 1738 -10}\special{pa 1748 1}\special{pa 1758 10}\special{pa 1767 18}%
+\special{pa 1777 21}\special{pa 1787 19}\special{pa 1797 14}\special{pa 1806 6}%
+\special{pa 1816 -4}\special{pa 1826 -12}\special{pa 1836 -17}\special{pa 1845 -18}%
+\special{pa 1855 -15}\special{pa 1865 -7}\special{pa 1875 4}\special{pa 1884 15}%
+\special{pa 1894 24}\special{pa 1904 28}\special{pa 1914 24}\special{pa 1923 10}%
+\special{pa 1933 -15}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{$s_n=-\frac{2\,\left(\pi\,n\,\cos \left(\frac{2\,\pi\,n}{3}\right)+3\, \sin \left(\frac{\pi\,n}{3}\right)-\pi\,n\,\cos \left(\frac{\pi\,n}{ 3}\right)-\pi\,n\,\left(-1\right)^{n}\right)}{\pi^2\,n^2}$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$s_n=-\frac{2\,\left(\pi\,n\,\cos \left(\frac{2\,\pi\,n}{3}\right)+3\, \sin \left(\frac{\pi\,n}{3}\right)-\pi\,n\,\cos \left(\frac{\pi\,n}{ 3}\right)-\pi\,n\,\left(-1\right)^{n}\right)}{\pi^2\,n^2}$}\settodepth{\Depth}{$s_n=-\frac{2\,\left(\pi\,n\,\cos \left(\frac{2\,\pi\,n}{3}\right)+3\, \sin \left(\frac{\pi\,n}{3}\right)-\pi\,n\,\cos \left(\frac{\pi\,n}{ 3}\right)-\pi\,n\,\left(-1\right)^{n}\right)}{\pi^2\,n^2}$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-4.9500000,-2.0000000){\hspace*{\Width}\raisebox{\Height}{$s_n=-\frac{2\,\left(\pi\,n\,\cos \left(\frac{2\,\pi\,n}{3}\right)+3\, \sin \left(\frac{\pi\,n}{3}\right)-\pi\,n\,\cos \left(\frac{\pi\,n}{ 3}\right)-\pi\,n\,\left(-1\right)^{n}\right)}{\pi^2\,n^2}$}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{$n=15$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$n=15$}\settodepth{\Depth}{$n=15$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.0500000,-2.0000000){\hspace*{\Width}\raisebox{\Height}{$n=15$}}%
+%
+}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/mxtex01.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/mxtex01.pdf
new file mode 100644
index 0000000000..df6e37b74b
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/mxtex01.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/mxtex01E.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/mxtex01E.pdf
new file mode 100644
index 0000000000..e90182cab0
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/mxtex01E.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/mxtex02.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/mxtex02.tex
new file mode 100644
index 0000000000..7059840ea9
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/mxtex02.tex
@@ -0,0 +1,18 @@
+%%% fig.tex 2016-4-25 8:55
+%%% fig.sce 2016-4-25 8:55
+{\unitlength=8mm%
+\begin{picture}%
+( 10.22000, 3.87000)( -0.61000, 2.03000)%
+\special{pn 8}%
+%
+\settowidth{\Width}{Decomposition into partial fractions}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{Decomposition into partial fractions}\settodepth{\Depth}{Decomposition into partial fractions}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(0.0500,5.0000){\hspace*{\Width}\raisebox{\Height}{Decomposition into partial fractions}}%
+%
+%
+\settowidth{\Width}{$\dfrac{x^3}{\left(x+1\right)\,\left(x+2\right)}=\dfrac{8}{x+2}-\dfrac{1}{x+1}+x-3$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$\dfrac{x^3}{\left(x+1\right)\,\left(x+2\right)}=\dfrac{8}{x+2}-\dfrac{1}{x+1}+x-3$}\settodepth{\Depth}{$\dfrac{x^3}{\left(x+1\right)\,\left(x+2\right)}=\dfrac{8}{x+2}-\dfrac{1}{x+1}+x-3$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(0.0500,3.5000){\hspace*{\Width}\raisebox{\Height}{$\dfrac{x^3}{\left(x+1\right)\,\left(x+2\right)}=\dfrac{8}{x+2}-\dfrac{1}{x+1}+x-3$}}%
+%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/mxtex03.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/mxtex03.tex
new file mode 100644
index 0000000000..a07b0fb8a3
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/mxtex03.tex
@@ -0,0 +1,64 @@
+%%% fig.tex 2016-4-25 11:28
+%%% fig.sce 2016-4-25 11:28
+{\unitlength=8mm%
+\begin{picture}%
+( 7.07000, 5.60000)( -3.07000, -3.60000)%
+\special{pn 8}%
+%
+\special{pa -564 -630}\special{pa -522 -440}\special{pa -477 -255}\special{pa -433 -82}%
+\special{pa -388 79}\special{pa -343 227}\special{pa -299 362}\special{pa -254 485}%
+\special{pa -210 595}\special{pa -165 693}\special{pa -121 778}\special{pa -76 850}%
+\special{pa -32 910}\special{pa 13 957}\special{pa 57 992}\special{pa 102 1014}\special{pa 146 1023}%
+\special{pa 191 1020}\special{pa 236 1004}\special{pa 280 976}\special{pa 325 935}%
+\special{pa 369 881}\special{pa 414 815}\special{pa 458 736}\special{pa 503 645}\special{pa 547 541}%
+\special{pa 592 425}\special{pa 636 296}\special{pa 681 154}\special{pa 725 0}\special{pa 770 -167}%
+\special{pa 814 -347}\special{pa 859 -539}\special{pa 879 -630}%
+\special{fp}%
+\settowidth{\Width}{$\frac{1-\sqrt{13}}{2}$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$\frac{1-\sqrt{13}}{2}$}\settodepth{\Depth}{$\frac{1-\sqrt{13}}{2}$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-1.9500,-0.5000){\hspace*{\Width}\raisebox{\Height}{$\frac{1-\sqrt{13}}{2}$}}%
+%
+%
+\settowidth{\Width}{$\frac{\sqrt{13}+1}{2}$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$\frac{\sqrt{13}+1}{2}$}\settodepth{\Depth}{$\frac{\sqrt{13}+1}{2}$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.0500,-0.5000){\hspace*{\Width}\raisebox{\Height}{$\frac{\sqrt{13}+1}{2}$}}%
+%
+%
+\special{pn 8}%
+\special{pa -967 0}\special{pa 1228 0}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 1185 24}\special{pa 1260 0}\special{pa 1185 -24}\special{pa 1185 0}\special{pa 1185 24}%
+\special{sh 1}\special{ip}%
+\special{pn 1}%
+\special{pa 1185 24}\special{pa 1260 0}\special{pa 1185 -24}\special{pa 1185 0}\special{pa 1185 24}%
+\special{pa 1260 0}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 8}%
+\special{pa 0 1134}\special{pa 0 -598}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 24 -555}\special{pa 0 -630}\special{pa -24 -555}\special{pa 0 -555}\special{pa 24 -555}%
+\special{sh 1}\special{ip}%
+\special{pn 1}%
+\special{pa 24 -555}\special{pa 0 -630}\special{pa -24 -555}\special{pa 0 -555}\special{pa 24 -555}%
+\special{pa 0 -630}%
+\special{fp}%
+\special{pn 8}%
+\settowidth{\Width}{$x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.0500,0.0000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{\Depth}%
+\put(0.0000,2.0500){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+%
+\settowidth{\Width}{O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(-0.0500,-0.0500){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/nohiddenbyfaces1.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/nohiddenbyfaces1.tex
new file mode 100644
index 0000000000..ad64335e03
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/nohiddenbyfaces1.tex
@@ -0,0 +1,101 @@
+%%% /Users/Hannya/Desktop/KeTCindy/fig/template3D.tex
+%%% Generator=template3D.cdy
+{\unitlength=6mm%
+\begin{picture}%
+(8.64,7.14)(-4.33,-1.91)%
+\special{pn 8}%
+%
+\settowidth{\Width}{$x$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-3.9700000,-1.1600000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(3.7000000,-1.2600000){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+\settowidth{\Width}{$z$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$z$}\settodepth{\Depth}{$z$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(0.0000000,5.0600000){\hspace*{\Width}\raisebox{\Height}{$z$}}%
+%
+\special{pa 867 -253}\special{pa 281 -82}%
+\special{fp}%
+\special{pa -231 67}\special{pa -867 253}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 284 -83}\special{pa 277 -81}\special{fp}\special{pa 248 -72}\special{pa 240 -70}\special{fp}%
+\special{pa 211 -62}\special{pa 204 -59}\special{fp}\special{pa 175 -51}\special{pa 167 -49}\special{fp}%
+\special{pa 138 -40}\special{pa 131 -38}\special{fp}\special{pa 102 -30}\special{pa 94 -27}\special{fp}%
+\special{pa 65 -19}\special{pa 57 -17}\special{fp}\special{pa 29 -8}\special{pa 21 -6}\special{fp}%
+\special{pa -8 2}\special{pa -16 5}\special{fp}\special{pa -45 13}\special{pa -52 15}\special{fp}%
+\special{pa -81 24}\special{pa -89 26}\special{fp}\special{pa -118 34}\special{pa -125 37}\special{fp}%
+\special{pa -154 45}\special{pa -162 47}\special{fp}\special{pa -191 56}\special{pa -198 58}\special{fp}%
+\special{pa -227 66}\special{pa -235 69}\special{fp}\special{pn 8}%
+\special{pa -802 -273}\special{pa -409 -140}%
+\special{fp}%
+\special{pa 370 126}\special{pa 802 273}%
+\special{fp}%
+\special{pn 8}%
+\special{pa -413 -141}\special{pa -406 -138}\special{fp}\special{pa -376 -128}\special{pa -368 -126}\special{fp}%
+\special{pa -339 -116}\special{pa -331 -113}\special{fp}\special{pa -302 -103}\special{pa -294 -100}\special{fp}%
+\special{pa -265 -90}\special{pa -257 -88}\special{fp}\special{pa -227 -78}\special{pa -220 -75}\special{fp}%
+\special{pa -190 -65}\special{pa -183 -62}\special{fp}\special{pa -153 -52}\special{pa -146 -50}\special{fp}%
+\special{pa -116 -40}\special{pa -108 -37}\special{fp}\special{pa -79 -27}\special{pa -71 -24}\special{fp}%
+\special{pa -42 -14}\special{pa -34 -12}\special{fp}\special{pa -5 -2}\special{pa 3 1}\special{fp}%
+\special{pa 32 11}\special{pa 40 14}\special{fp}\special{pa 70 24}\special{pa 77 26}\special{fp}%
+\special{pa 107 36}\special{pa 114 39}\special{fp}\special{pa 144 49}\special{pa 151 52}\special{fp}%
+\special{pa 181 62}\special{pa 189 64}\special{fp}\special{pa 218 74}\special{pa 226 77}\special{fp}%
+\special{pa 255 87}\special{pa 263 90}\special{fp}\special{pa 292 100}\special{pa 300 102}\special{fp}%
+\special{pa 330 112}\special{pa 337 115}\special{fp}\special{pa 367 125}\special{pa 374 128}\special{fp}%
+\special{pn 8}%
+\special{pa 0 451}\special{pa 0 90}%
+\special{fp}%
+\special{pa 0 -732}\special{pa 0 -1121}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 0 94}\special{pa 0 86}\special{fp}\special{pa 0 55}\special{pa 0 47}\special{fp}%
+\special{pa 0 16}\special{pa 0 8}\special{fp}\special{pa 0 -23}\special{pa 0 -31}\special{fp}%
+\special{pa 0 -63}\special{pa 0 -71}\special{fp}\special{pa 0 -102}\special{pa 0 -110}\special{fp}%
+\special{pa 0 -141}\special{pa 0 -149}\special{fp}\special{pa 0 -180}\special{pa 0 -188}\special{fp}%
+\special{pa 0 -219}\special{pa 0 -227}\special{fp}\special{pa 0 -258}\special{pa 0 -266}\special{fp}%
+\special{pa 0 -297}\special{pa 0 -305}\special{fp}\special{pa 0 -337}\special{pa 0 -345}\special{fp}%
+\special{pa 0 -376}\special{pa 0 -384}\special{fp}\special{pa 0 -415}\special{pa 0 -423}\special{fp}%
+\special{pa 0 -454}\special{pa 0 -462}\special{fp}\special{pa 0 -493}\special{pa 0 -501}\special{fp}%
+\special{pa 0 -532}\special{pa 0 -540}\special{fp}\special{pa 0 -572}\special{pa 0 -580}\special{fp}%
+\special{pa 0 -611}\special{pa 0 -619}\special{fp}\special{pa 0 -650}\special{pa 0 -658}\special{fp}%
+\special{pa 0 -689}\special{pa 0 -697}\special{fp}\special{pa 0 -728}\special{pa 0 -736}\special{fp}%
+\special{pn 8}%
+\special{pn 8}%
+\special{pa 165 -165}\special{pa 158 -163}\special{fp}\special{pa 127 -154}\special{pa 119 -152}\special{fp}%
+\special{pa 88 -143}\special{pa 81 -141}\special{fp}\special{pa 50 -132}\special{pa 42 -129}\special{fp}%
+\special{pa 11 -120}\special{pa 4 -118}\special{fp}\special{pa -27 -109}\special{pa -35 -107}\special{fp}%
+\special{pa -66 -98}\special{pa -73 -96}\special{fp}\special{pa -104 -87}\special{pa -112 -85}\special{fp}%
+\special{pa -143 -76}\special{pa -151 -73}\special{fp}\special{pa -181 -64}\special{pa -189 -62}\special{fp}%
+\special{pa -220 -53}\special{pa -228 -51}\special{fp}\special{pa -258 -42}\special{pa -266 -40}\special{fp}%
+\special{pa -297 -31}\special{pa -305 -28}\special{fp}\special{pa -336 -19}\special{pa -343 -17}\special{fp}%
+\special{pa -374 -8}\special{pa -382 -6}\special{fp}\special{pa -413 3}\special{pa -420 5}\special{fp}%
+\special{pa -451 14}\special{pa -459 17}\special{fp}\special{pa -490 26}\special{pa -497 28}\special{fp}%
+\special{pa -528 37}\special{pa -536 39}\special{fp}\special{pn 8}%
+\special{pa -532 38}\special{pa 370 126}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 159 -168}\special{pa 164 -161}\special{fp}\special{pa 182 -135}\special{pa 187 -129}\special{fp}%
+\special{pa 206 -103}\special{pa 210 -96}\special{fp}\special{pa 229 -71}\special{pa 234 -64}\special{fp}%
+\special{pa 252 -38}\special{pa 257 -32}\special{fp}\special{pa 275 -6}\special{pa 280 0}\special{fp}%
+\special{pa 298 26}\special{pa 303 33}\special{fp}\special{pa 322 58}\special{pa 326 65}\special{fp}%
+\special{pa 345 91}\special{pa 350 97}\special{fp}\special{pa 368 123}\special{pa 373 130}\special{fp}%
+\special{pn 8}%
+\special{pa -532 38}\special{pa 0 -732}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 163 -160}\special{pa 160 -168}\special{fp}\special{pa 152 -198}\special{pa 150 -206}\special{fp}%
+\special{pa 141 -236}\special{pa 139 -244}\special{fp}\special{pa 130 -274}\special{pa 128 -282}\special{fp}%
+\special{pa 120 -312}\special{pa 117 -320}\special{fp}\special{pa 109 -350}\special{pa 107 -357}\special{fp}%
+\special{pa 98 -388}\special{pa 96 -395}\special{fp}\special{pa 87 -425}\special{pa 85 -433}\special{fp}%
+\special{pa 76 -463}\special{pa 74 -471}\special{fp}\special{pa 66 -501}\special{pa 64 -509}\special{fp}%
+\special{pa 55 -539}\special{pa 53 -547}\special{fp}\special{pa 44 -577}\special{pa 42 -585}\special{fp}%
+\special{pa 33 -615}\special{pa 31 -622}\special{fp}\special{pa 23 -653}\special{pa 20 -660}\special{fp}%
+\special{pa 12 -690}\special{pa 10 -698}\special{fp}\special{pa 1 -728}\special{pa -1 -736}\special{fp}%
+\special{pn 8}%
+\special{pa 370 126}\special{pa 0 -732}%
+\special{fp}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/nohiddenbyfaces2.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/nohiddenbyfaces2.tex
new file mode 100644
index 0000000000..18f1d374cb
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/nohiddenbyfaces2.tex
@@ -0,0 +1,56 @@
+%%% /Users/Hannya/Desktop/KeTCindy/fig/template3D.tex
+%%% Generator=template3D.cdy
+{\unitlength=6mm%
+\begin{picture}%
+(8.64,7.14)(-4.33,-1.91)%
+\special{pn 8}%
+%
+\settowidth{\Width}{$x$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-3.9700000,-1.1600000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(3.7000000,-1.2600000){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+\settowidth{\Width}{$z$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$z$}\settodepth{\Depth}{$z$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(0.0000000,5.0600000){\hspace*{\Width}\raisebox{\Height}{$z$}}%
+%
+\special{pa 867 -253}\special{pa -867 253}%
+\special{fp}%
+\special{pa -802 -273}\special{pa 802 273}%
+\special{fp}%
+\special{pa 0 451}\special{pa 0 -1121}%
+\special{fp}%
+\special{pa 162 -164}\special{pa 125 -154}\special{fp}\special{pa 89 -143}\special{pa 52 -132}\special{fp}%
+\special{pa 16 -122}\special{pa -21 -111}\special{fp}\special{pa -57 -100}\special{pa -94 -90}\special{fp}%
+\special{pa -130 -79}\special{pa -167 -68}\special{fp}\special{pa -203 -58}\special{pa -240 -47}\special{fp}%
+\special{pa -276 -37}\special{pa -313 -26}\special{fp}\special{pa -350 -15}\special{pa -386 -5}\special{fp}%
+\special{pa -423 6}\special{pa -459 17}\special{fp}\special{pa -496 27}\special{pa -532 38}\special{fp}%
+%
+%
+\special{pn 16}%
+\special{pa -532 38}\special{pa 370 126}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 162 -164}\special{pa 181 -138}\special{fp}\special{pa 200 -111}\special{pa 219 -85}\special{fp}%
+\special{pa 238 -59}\special{pa 257 -32}\special{fp}\special{pa 276 -6}\special{pa 294 21}\special{fp}%
+\special{pa 313 47}\special{pa 332 73}\special{fp}\special{pa 351 100}\special{pa 370 126}\special{fp}%
+%
+%
+\special{pn 16}%
+\special{pa -532 38}\special{pa 0 -732}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 162 -164}\special{pa 151 -202}\special{fp}\special{pa 140 -240}\special{pa 129 -278}\special{fp}%
+\special{pa 118 -316}\special{pa 108 -354}\special{fp}\special{pa 97 -391}\special{pa 86 -429}\special{fp}%
+\special{pa 75 -467}\special{pa 65 -505}\special{fp}\special{pa 54 -543}\special{pa 43 -581}\special{fp}%
+\special{pa 32 -619}\special{pa 22 -656}\special{fp}\special{pa 11 -694}\special{pa 0 -732}\special{fp}%
+%
+%
+\special{pn 16}%
+\special{pa 370 126}\special{pa 0 -732}%
+\special{fp}%
+\special{pn 8}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/numptcrv.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/numptcrv.pdf
new file mode 100644
index 0000000000..694326e672
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/numptcrv.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/oresenex01.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/oresenex01.tex
new file mode 100644
index 0000000000..e592236024
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/oresenex01.tex
@@ -0,0 +1,68 @@
+%%% /Users/Hannya/Desktop/KeTCindy/fig/oresenex01.tex
+%%% Generator=3Dbasic.cdy
+{\unitlength=6mm%
+\begin{picture}%
+(7.98,6.47)(-3.8,-2.13)%
+\special{pn 8}%
+%
+{%
+\color[rgb]{0,0,0}%
+}%
+{%
+\color[rgb]{0,0,0}%
+}%
+\settowidth{\Width}{$x$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-3.4600000,-1.0500000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(3.3500000,-1.6700000){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+\settowidth{\Width}{$z$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$z$}\settodepth{\Depth}{$z$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(0.0000000,4.0000000){\hspace*{\Width}\raisebox{\Height}{$z$}}%
+%
+\special{pa 933 -282}\special{pa -746 225}%
+\special{fp}%
+\special{pa -725 -362}\special{pa 725 362}%
+\special{fp}%
+\special{pa 0 503}\special{pa 0 -871}%
+\special{fp}%
+\special{pa -681 180}\special{pa -746 225}\special{pa -667 227}\special{pa -674 204}%
+\special{pa -681 180}\special{sh 1}\special{ip}%
+\special{pn 1}%
+\special{pa -681 180}\special{pa -746 225}\special{pa -667 227}\special{pa -674 204}%
+\special{pa -681 180}\special{pa -746 225}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 647 351}\special{pa 725 362}\special{pa 669 307}\special{pa 658 329}\special{pa 647 351}%
+\special{sh 1}\special{ip}%
+\special{pn 1}%
+\special{pa 647 351}\special{pa 725 362}\special{pa 669 307}\special{pa 658 329}%
+\special{pa 647 351}\special{pa 725 362}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 24 -796}\special{pa 0 -871}\special{pa -24 -796}\special{pa 0 -796}\special{pa 24 -796}%
+\special{sh 1}\special{ip}%
+\special{pn 1}%
+\special{pa 24 -796}\special{pa 0 -871}\special{pa -24 -796}\special{pa 0 -796}%
+\special{pa 24 -796}\special{pa 0 -871}%
+\special{fp}%
+\special{pn 8}%
+\settowidth{\Width}{O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(-0.0833333,-0.0833333){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+\special{pa -373 113}\special{pa -373 -323}\special{pa -83 -178}\special{pa 290 -290}%
+\special{pa 580 -146}\special{pa 580 -581}%
+\special{fp}%
+\special{pn 3}%
+\special{pa -356 96}\special{pa -369 89}\special{pa -384 92}\special{pa -394 102}\special{pa -396 116}\special{pa -390 129}\special{pa -377 136}\special{pa -362 134}\special{pa -352 123}\special{pa -350 109}\special{pa -356 96}\special{sh 1}\special{fp}%
+\special{pa -356 -339}\special{pa -369 -346}\special{pa -384 -344}\special{pa -394 -333}\special{pa -396 -319}\special{pa -390 -306}\special{pa -377 -299}\special{pa -362 -302}\special{pa -352 -312}\special{pa -350 -326}\special{pa -356 -339}\special{sh 1}\special{fp}%
+\special{pa -66 -195}\special{pa -79 -201}\special{pa -94 -199}\special{pa -104 -189}\special{pa -106 -174}\special{pa -100 -161}\special{pa -87 -154}\special{pa -72 -157}\special{pa -62 -167}\special{pa -60 -182}\special{pa -66 -195}\special{sh 1}\special{fp}%
+\special{pa 307 -307}\special{pa 294 -314}\special{pa 279 -311}\special{pa 269 -301}\special{pa 267 -287}\special{pa 273 -274}\special{pa 286 -267}\special{pa 301 -269}\special{pa 311 -280}\special{pa 313 -294}\special{pa 307 -307}\special{sh 1}\special{fp}%
+\special{pa 597 -162}\special{pa 584 -169}\special{pa 569 -167}\special{pa 559 -156}\special{pa 557 -142}\special{pa 563 -129}\special{pa 576 -122}\special{pa 591 -125}\special{pa 601 -135}\special{pa 603 -149}\special{pa 597 -162}\special{sh 1}\special{fp}%
+\special{pa 597 -598}\special{pa 584 -604}\special{pa 569 -602}\special{pa 559 -592}\special{pa 557 -577}\special{pa 563 -564}\special{pa 576 -558}\special{pa 591 -560}\special{pa 601 -570}\special{pa 603 -585}\special{pa 597 -598}\special{sh 1}\special{fp}%
+\special{pn 8}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ospline1.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ospline1.tex
new file mode 100644
index 0000000000..bebaf4a5d8
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ospline1.tex
@@ -0,0 +1,27 @@
+%%% ospline1.tex
+%%% Generator=template1basic.cdy
+{\unitlength=6mm%
+\begin{picture}%
+(8,6)(-4,-3)%
+\special{pn 8}%
+%
+\special{pn 3}%
+\special{pa -692 456}\special{pa -705 449}\special{pa -719 451}\special{pa -730 462}\special{pa -732 476}\special{pa -725 489}\special{pa -712 496}\special{pa -698 493}\special{pa -688 483}\special{pa -685 469}\special{pa -692 456}\special{sh 1}\special{fp}%
+\special{pa 725 456}\special{pa 712 449}\special{pa 698 451}\special{pa 688 462}\special{pa 685 476}\special{pa 692 489}\special{pa 705 496}\special{pa 719 493}\special{pa 730 483}\special{pa 732 469}\special{pa 725 456}\special{sh 1}\special{fp}%
+\special{pa 619 -326}\special{pa 606 -332}\special{pa 591 -330}\special{pa 581 -320}\special{pa 579 -305}\special{pa 585 -292}\special{pa 598 -286}\special{pa 613 -288}\special{pa 623 -298}\special{pa 625 -313}\special{pa 619 -326}\special{sh 1}\special{fp}%
+\special{pa -303 -390}\special{pa -316 -396}\special{pa -330 -394}\special{pa -341 -384}\special{pa -343 -369}\special{pa -336 -356}\special{pa -323 -350}\special{pa -309 -352}\special{pa -299 -362}\special{pa -296 -377}\special{pa -303 -390}\special{sh 1}\special{fp}%
+\special{pa -703 282}\special{pa -716 275}\special{pa -730 277}\special{pa -740 288}\special{pa -743 302}\special{pa -736 315}\special{pa -723 322}\special{pa -709 319}\special{pa -698 309}\special{pa -696 295}\special{pa -703 282}\special{sh 1}\special{fp}%
+\special{pn 8}%
+\special{pa -709 472}\special{pa -494 505}\special{pa -296 531}\special{pa -114 549}%
+\special{pa 51 560}\special{pa 201 564}\special{pa 335 560}\special{pa 452 549}%
+\special{pa 554 531}\special{pa 639 505}\special{pa 709 472}\special{pa 787 412}%
+\special{pa 838 340}\special{pa 866 260}\special{pa 873 175}\special{pa 860 87}%
+\special{pa 832 -1}\special{pa 789 -88}\special{pa 735 -169}\special{pa 672 -244}%
+\special{pa 602 -309}\special{pa 525 -364}\special{pa 442 -407}\special{pa 354 -440}%
+\special{pa 262 -461}\special{pa 167 -471}\special{pa 71 -472}\special{pa -28 -462}%
+\special{pa -126 -442}\special{pa -224 -412}\special{pa -320 -373}\special{pa -381 -340}%
+\special{pa -437 -300}\special{pa -489 -251}\special{pa -535 -196}\special{pa -578 -132}%
+\special{pa -615 -61}\special{pa -648 17}\special{pa -677 103}\special{pa -700 197}%
+\special{pa -719 298}%
+\special{fp}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ospline2.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ospline2.tex
new file mode 100644
index 0000000000..b5e7fb4f4c
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ospline2.tex
@@ -0,0 +1,42 @@
+%%% ospline2.tex
+%%% Generator=template1basic.cdy
+{\unitlength=5mm%
+\begin{picture}%
+(8,6)(-4,-3)%
+\special{pn 8}%
+%
+\special{pn 3}%
+\special{pa -574 377}\special{pa -587 370}\special{pa -601 373}\special{pa -612 383}\special{pa -614 397}\special{pa -607 410}\special{pa -594 417}\special{pa -580 415}\special{pa -570 404}\special{pa -567 390}\special{pa -574 377}\special{sh 1}\special{fp}%
+\special{pa 607 377}\special{pa 594 370}\special{pa 580 373}\special{pa 570 383}\special{pa 567 397}\special{pa 574 410}\special{pa 587 417}\special{pa 601 415}\special{pa 612 404}\special{pa 614 390}\special{pa 607 377}\special{sh 1}\special{fp}%
+\special{pa 518 -274}\special{pa 505 -281}\special{pa 491 -279}\special{pa 481 -268}\special{pa 478 -254}\special{pa 485 -241}\special{pa 498 -234}\special{pa 512 -236}\special{pa 523 -247}\special{pa 525 -261}\special{pa 518 -274}\special{sh 1}\special{fp}%
+\special{pa -250 -328}\special{pa -263 -334}\special{pa -277 -332}\special{pa -287 -322}\special{pa -290 -307}\special{pa -283 -294}\special{pa -270 -287}\special{pa -256 -290}\special{pa -245 -300}\special{pa -243 -315}\special{pa -250 -328}\special{sh 1}\special{fp}%
+\special{pn 8}%
+\special{pa -591 394}\special{pa -492 462}\special{pa -386 515}\special{pa -273 552}%
+\special{pa -155 573}\special{pa -32 579}\special{pa 93 570}\special{pa 219 547}%
+\special{pa 345 509}\special{pa 469 458}\special{pa 591 394}\special{pa 655 343}%
+\special{pa 699 283}\special{pa 722 217}\special{pa 727 146}\special{pa 717 73}%
+\special{pa 693 -1}\special{pa 657 -73}\special{pa 612 -141}\special{pa 560 -203}%
+\special{pa 502 -258}\special{pa 438 -304}\special{pa 369 -342}\special{pa 295 -372}%
+\special{pa 218 -393}\special{pa 139 -405}\special{pa 57 -407}\special{pa -25 -399}%
+\special{pa -107 -381}\special{pa -187 -351}\special{pa -266 -311}\special{pa -355 -253}%
+\special{pa -438 -187}\special{pa -514 -116}\special{pa -579 -41}\special{pa -630 36}%
+\special{pa -665 114}\special{pa -682 190}\special{pa -676 263}\special{pa -647 332}%
+\special{pa -591 394}%
+\special{fp}%
+\settowidth{\Width}{A}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{A}\settodepth{\Depth}{A}\setlength{\Height}{-\Height}%
+\put(-3.0000000,-2.0500000){\hspace*{\Width}\raisebox{\Height}{A}}%
+%
+\settowidth{\Width}{B}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{B}\settodepth{\Depth}{B}\setlength{\Height}{-\Height}%
+\put(3.0500000,-2.0500000){\hspace*{\Width}\raisebox{\Height}{B}}%
+%
+\settowidth{\Width}{C}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{C}\settodepth{\Depth}{C}\setlength{\Height}{\Depth}%
+\put(2.6000000,1.3600000){\hspace*{\Width}\raisebox{\Height}{C}}%
+%
+\settowidth{\Width}{D}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{D}\settodepth{\Depth}{D}\setlength{\Height}{\Depth}%
+\put(-1.4000000,1.6300000){\hspace*{\Width}\raisebox{\Height}{D}}%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ovaldata.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ovaldata.tex
new file mode 100644
index 0000000000..6d8beff9e3
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ovaldata.tex
@@ -0,0 +1,123 @@
+%%% test.tex 2014-11-30 22:38
+%%% test.sce 2014-11-30 22:38
+{\unitlength=5mm%
+\begin{picture}%
+( 21.04000, 5.44000)( -3.04000, 0.56000)%
+\special{pn 8}%
+%
+\special{pn 24}%
+\special{pa 2268 -591}\special{pa 2268 -803}\special{pa 2265 -834}\special{pa 2258 -864}%
+\special{pa 2246 -893}\special{pa 2230 -919}\special{pa 2210 -942}\special{pa 2187 -962}%
+\special{pa 2160 -979}\special{pa 2132 -990}\special{pa 2102 -998}\special{pa 2071 -1000}%
+\special{pa 1969 -1000}\special{pa 1866 -1000}\special{pa 1835 -998}\special{pa 1805 -990}%
+\special{pa 1777 -979}\special{pa 1750 -962}\special{pa 1727 -942}\special{pa 1707 -919}%
+\special{pa 1691 -893}\special{pa 1679 -864}\special{pa 1672 -834}\special{pa 1669 -803}%
+\special{pa 1669 -591}\special{pa 1669 -378}\special{pa 1672 -347}\special{pa 1679 -317}%
+\special{pa 1691 -289}\special{pa 1707 -262}\special{pa 1727 -239}\special{pa 1750 -219}%
+\special{pa 1777 -203}\special{pa 1805 -191}\special{pa 1835 -184}\special{pa 1866 -181}%
+\special{pa 1969 -181}\special{pa 2071 -181}\special{pa 2102 -184}\special{pa 2132 -191}%
+\special{pa 2160 -203}\special{pa 2187 -219}\special{pa 2210 -239}\special{pa 2230 -262}%
+\special{pa 2246 -289}\special{pa 2258 -317}\special{pa 2265 -347}\special{pa 2268 -378}%
+\special{pa 2268 -591}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 3354 -591}\special{pa 3354 -602}\special{pa 3352 -629}\special{fp}\special{pa 3346 -667}\special{pa 3340 -694}\special{pa 3335 -705}\special{fp}%
+\special{pa 3320 -740}\special{pa 3300 -773}\special{fp}\special{pa 3275 -803}\special{pa 3268 -811}\special{pa 3247 -829}\special{fp}%
+\special{pa 3215 -852}\special{pa 3193 -865}\special{pa 3181 -870}\special{fp}\special{pa 3145 -884}\special{pa 3108 -893}\special{fp}%
+\special{pa 3069 -897}\special{pa 3059 -898}\special{pa 3030 -898}\special{fp}\special{pa 2992 -898}\special{pa 2953 -898}\special{pa 2953 -898}\special{fp}%
+\special{pa 2914 -898}\special{pa 2875 -898}\special{fp}\special{pa 2836 -897}\special{pa 2800 -894}\special{pa 2798 -893}\special{fp}%
+\special{pa 2760 -884}\special{pa 2755 -883}\special{pa 2724 -870}\special{fp}\special{pa 2690 -852}\special{pa 2673 -841}\special{pa 2659 -829}\special{fp}%
+\special{pa 2631 -803}\special{pa 2608 -776}\special{pa 2606 -773}\special{fp}\special{pa 2586 -740}\special{pa 2583 -736}\special{pa 2570 -705}\special{fp}%
+\special{pa 2559 -667}\special{pa 2555 -649}\special{pa 2553 -629}\special{fp}\special{pa 2551 -591}\special{pa 2551 -579}\special{pa 2553 -552}\special{fp}%
+\special{pa 2559 -514}\special{pa 2566 -487}\special{pa 2570 -477}\special{fp}\special{pa 2586 -441}\special{pa 2606 -408}\special{fp}%
+\special{pa 2631 -378}\special{pa 2638 -370}\special{pa 2659 -352}\special{fp}\special{pa 2690 -329}\special{pa 2712 -316}\special{pa 2724 -311}\special{fp}%
+\special{pa 2760 -297}\special{pa 2798 -288}\special{fp}\special{pa 2836 -284}\special{pa 2846 -283}\special{pa 2875 -283}\special{fp}%
+\special{pa 2914 -283}\special{pa 2953 -283}\special{pa 2953 -283}\special{fp}\special{pa 2992 -283}\special{pa 3030 -283}\special{fp}%
+\special{pa 3069 -284}\special{pa 3105 -287}\special{pa 3108 -288}\special{fp}\special{pa 3145 -297}\special{pa 3150 -298}\special{pa 3181 -311}\special{fp}%
+\special{pa 3215 -329}\special{pa 3233 -340}\special{pa 3247 -352}\special{fp}\special{pa 3275 -378}\special{pa 3298 -405}\special{pa 3300 -408}\special{fp}%
+\special{pa 3320 -441}\special{pa 3322 -445}\special{pa 3335 -477}\special{fp}\special{pa 3346 -514}\special{pa 3351 -533}\special{pa 3352 -552}\special{fp}%
+%
+%
+\special{pa 8 -599}\special{pa 2 -602}\special{pa -5 -601}\special{pa -11 -596}\special{pa -12 -589}%
+\special{pa -8 -582}\special{pa -2 -579}\special{pa 5 -580}\special{pa 11 -585}\special{pa 12 -592}%
+\special{pa 8 -599}\special{sh 1}\special{fp}%
+\special{pa 402 -993}\special{pa 396 -996}\special{pa 388 -995}\special{pa 383 -990}%
+\special{pa 382 -982}\special{pa 385 -976}\special{pa 392 -973}\special{pa 399 -974}%
+\special{pa 404 -979}\special{pa 405 -986}\special{pa 402 -993}\special{sh 1}\special{fp}%
+\special{pa 993 -599}\special{pa 986 -602}\special{pa 979 -601}\special{pa 974 -596}%
+\special{pa 973 -589}\special{pa 976 -582}\special{pa 982 -579}\special{pa 990 -580}%
+\special{pa 995 -585}\special{pa 996 -592}\special{pa 993 -599}\special{sh 1}\special{fp}%
+\special{pa 1386 -402}\special{pa 1380 -405}\special{pa 1373 -404}\special{pa 1367 -399}%
+\special{pa 1366 -392}\special{pa 1370 -385}\special{pa 1376 -382}\special{pa 1383 -383}%
+\special{pa 1388 -388}\special{pa 1390 -396}\special{pa 1386 -402}\special{sh 1}\special{fp}%
+\special{pa 1977 -599}\special{pa 1970 -602}\special{pa 1963 -601}\special{pa 1958 -596}%
+\special{pa 1957 -589}\special{pa 1960 -582}\special{pa 1967 -579}\special{pa 1974 -580}%
+\special{pa 1979 -585}\special{pa 1980 -592}\special{pa 1977 -599}\special{sh 1}\special{fp}%
+\special{pa 1678 -1008}\special{pa 1671 -1012}\special{pa 1664 -1011}\special{pa 1659 -1005}%
+\special{pa 1658 -998}\special{pa 1661 -992}\special{pa 1667 -988}\special{pa 1675 -989}%
+\special{pa 1680 -995}\special{pa 1681 -1002}\special{pa 1678 -1008}\special{sh 1}\special{fp}%
+\special{pa 2961 -599}\special{pa 2955 -602}\special{pa 2947 -601}\special{pa 2942 -596}%
+\special{pa 2941 -589}\special{pa 2944 -582}\special{pa 2951 -579}\special{pa 2958 -580}%
+\special{pa 2963 -585}\special{pa 2964 -592}\special{pa 2961 -599}\special{sh 1}\special{fp}%
+\special{pa 3363 -906}\special{pa 3356 -909}\special{pa 3349 -908}\special{pa 3344 -903}%
+\special{pa 3343 -896}\special{pa 3346 -889}\special{pa 3352 -886}\special{pa 3360 -887}%
+\special{pa 3365 -892}\special{pa 3366 -899}\special{pa 3363 -906}\special{sh 1}\special{fp}%
+\settowidth{\Width}{A}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{A}\settodepth{\Depth}{A}\setlength{\Height}{\Depth}%
+\put(0.0500,3.0500){\hspace*{\Width}\raisebox{\Height}{A}}%
+%
+%
+\settowidth{\Width}{B}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{B}\settodepth{\Depth}{B}\setlength{\Height}{\Depth}%
+\put(2.0500,5.0500){\hspace*{\Width}\raisebox{\Height}{B}}%
+%
+%
+\settowidth{\Width}{C}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{C}\settodepth{\Depth}{C}\setlength{\Height}{\Depth}%
+\put(5.0500,3.0500){\hspace*{\Width}\raisebox{\Height}{C}}%
+%
+%
+\settowidth{\Width}{D}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{D}\settodepth{\Depth}{D}\setlength{\Height}{-\Height}%
+\put(7.0500,1.9500){\hspace*{\Width}\raisebox{\Height}{D}}%
+%
+%
+\settowidth{\Width}{E}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{E}\settodepth{\Depth}{E}\setlength{\Height}{\Depth}%
+\put(10.0500,3.0500){\hspace*{\Width}\raisebox{\Height}{E}}%
+%
+%
+\settowidth{\Width}{F}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{F}\settodepth{\Depth}{F}\setlength{\Height}{\Depth}%
+\put(8.4300,5.1300){\hspace*{\Width}\raisebox{\Height}{F}}%
+%
+%
+\settowidth{\Width}{G}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{G}\settodepth{\Depth}{G}\setlength{\Height}{\Depth}%
+\put(15.0500,3.0500){\hspace*{\Width}\raisebox{\Height}{G}}%
+%
+%
+\settowidth{\Width}{H}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{H}\settodepth{\Depth}{H}\setlength{\Height}{\Depth}%
+\put(17.0900,4.6100){\hspace*{\Width}\raisebox{\Height}{H}}%
+%
+%
+\special{pa 394 -591}\special{pa 394 -945}\special{pa 393 -951}\special{pa 392 -957}%
+\special{pa 389 -963}\special{pa 386 -968}\special{pa 382 -973}\special{pa 377 -977}%
+\special{pa 372 -980}\special{pa 366 -982}\special{pa 360 -984}\special{pa 354 -984}%
+\special{pa 0 -984}\special{pa -354 -984}\special{pa -360 -984}\special{pa -366 -982}%
+\special{pa -372 -980}\special{pa -377 -977}\special{pa -382 -973}\special{pa -386 -968}%
+\special{pa -389 -963}\special{pa -392 -957}\special{pa -393 -951}\special{pa -394 -945}%
+\special{pa -394 -591}\special{pa -394 -236}\special{pa -393 -230}\special{pa -392 -224}%
+\special{pa -389 -218}\special{pa -386 -213}\special{pa -382 -208}\special{pa -377 -204}%
+\special{pa -372 -201}\special{pa -366 -199}\special{pa -360 -197}\special{pa -354 -197}%
+\special{pa 0 -197}\special{pa 354 -197}\special{pa 360 -197}\special{pa 366 -199}%
+\special{pa 372 -201}\special{pa 377 -204}\special{pa 382 -208}\special{pa 386 -213}%
+\special{pa 389 -218}\special{pa 392 -224}\special{pa 393 -230}\special{pa 394 -236}%
+\special{pa 394 -591}%
+\special{fp}%
+\special{pa 1378 -591}\special{pa 1378 -787}\special{pa 984 -787}\special{pa 591 -787}%
+\special{pa 591 -591}\special{pa 591 -394}\special{pa 984 -394}\special{pa 1378 -394}%
+\special{pa 1378 -591}%
+\special{fp}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/parabola-by-foci.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/parabola-by-foci.pdf
new file mode 100644
index 0000000000..bbd477bc5d
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/parabola-by-foci.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/parabola.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/parabola.tex
new file mode 100644
index 0000000000..437d8d6121
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/parabola.tex
@@ -0,0 +1,335 @@
+%%% /Users/Hannya/ketcindy/ketwork/template.tex 2016-8-7 19:8
+%%% template.sce 2016-8-7 19:8
+{\unitlength=6mm%
+\begin{picture}%
+( 10.01000, 7.51000)( -5.01000, -2.51000)%
+\special{pn 8}%
+%
+\settowidth{\Width}{$x$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-4.6011,-1.1540){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.4854,-2.2142){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+%
+\settowidth{\Width}{$z$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$z$}\settodepth{\Depth}{$z$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(0.0000,4.5961){\hspace*{\Width}\raisebox{\Height}{$z$}}%
+%
+%
+\special{pa 1043 -262}\special{pa -1043 262}%
+\special{fp}%
+\special{pa -554 -493}\special{pa 554 493}%
+\special{fp}%
+\special{pa 0 593}\special{pa 0 -1041}%
+\special{fp}%
+\special{pa 0 -833}\special{pa -17 -827}\special{pa -35 -818}\special{pa -52 -807}%
+\special{pa -70 -792}\special{pa -87 -775}\special{pa -104 -754}\special{pa -122 -731}%
+\special{pa -139 -705}\special{pa -156 -676}\special{pa -174 -644}\special{pa -191 -610}%
+\special{pa -209 -572}\special{pa -226 -532}\special{pa -243 -488}\special{pa -261 -442}%
+\special{pa -278 -393}\special{pa -296 -341}\special{pa -313 -286}\special{pa -330 -228}%
+\special{pa -348 -167}\special{pa -365 -104}\special{pa -383 -37}\special{pa -400 32}%
+\special{pa -417 105}%
+\special{fp}%
+\special{pa 0 -833}\special{pa -14 -825}\special{pa -27 -813}\special{pa -41 -800}%
+\special{pa -55 -783}\special{pa -68 -763}\special{pa -82 -740}\special{pa -96 -715}%
+\special{pa -109 -687}\special{pa -123 -655}\special{pa -137 -621}\special{pa -151 -584}%
+\special{pa -164 -544}\special{pa -178 -501}\special{pa -192 -456}\special{pa -205 -407}%
+\special{pa -219 -356}\special{pa -233 -301}\special{pa -246 -244}\special{pa -260 -184}%
+\special{pa -274 -121}\special{pa -287 -55}\special{pa -301 14}\special{pa -315 86}%
+\special{pa -328 161}%
+\special{fp}%
+\special{pa 0 -833}\special{pa -9 -823}\special{pa -17 -810}\special{pa -26 -795}%
+\special{pa -35 -776}\special{pa -43 -755}\special{pa -52 -730}\special{pa -61 -703}%
+\special{pa -69 -673}\special{pa -78 -640}\special{pa -86 -605}\special{pa -95 -566}%
+\special{pa -104 -524}\special{pa -112 -480}\special{pa -121 -432}\special{pa -130 -382}%
+\special{pa -138 -329}\special{pa -147 -273}\special{pa -156 -214}\special{pa -164 -152}%
+\special{pa -173 -87}\special{pa -182 -20}\special{pa -190 51}\special{pa -199 124}%
+\special{pa -207 201}%
+\special{fp}%
+\special{pa 0 -833}\special{pa -3 -822}\special{pa -6 -808}\special{pa -8 -792}\special{pa -11 -773}%
+\special{pa -14 -750}\special{pa -17 -725}\special{pa -19 -697}\special{pa -22 -666}%
+\special{pa -25 -633}\special{pa -28 -596}\special{pa -30 -556}\special{pa -33 -514}%
+\special{pa -36 -469}\special{pa -39 -420}\special{pa -41 -369}\special{pa -44 -315}%
+\special{pa -47 -258}\special{pa -50 -198}\special{pa -52 -136}\special{pa -55 -70}%
+\special{pa -58 -2}\special{pa -61 70}\special{pa -63 144}\special{pa -66 221}%
+\special{fp}%
+\special{pa 0 -833}\special{pa 3 -822}\special{pa 7 -809}\special{pa 10 -792}\special{pa 14 -773}%
+\special{pa 17 -751}\special{pa 20 -726}\special{pa 24 -698}\special{pa 27 -667}\special{pa 31 -633}%
+\special{pa 34 -596}\special{pa 37 -557}\special{pa 41 -515}\special{pa 44 -469}\special{pa 48 -421}%
+\special{pa 51 -370}\special{pa 54 -316}\special{pa 58 -259}\special{pa 61 -199}\special{pa 65 -137}%
+\special{pa 68 -71}\special{pa 71 -3}\special{pa 75 69}\special{pa 78 143}\special{pa 82 220}%
+\special{fp}%
+\special{pa 0 -833}\special{pa 9 -823}\special{pa 18 -810}\special{pa 28 -795}\special{pa 37 -777}%
+\special{pa 46 -755}\special{pa 55 -731}\special{pa 65 -704}\special{pa 74 -674}\special{pa 83 -642}%
+\special{pa 92 -606}\special{pa 101 -567}\special{pa 111 -526}\special{pa 120 -481}%
+\special{pa 129 -434}\special{pa 138 -384}\special{pa 148 -331}\special{pa 157 -275}%
+\special{pa 166 -216}\special{pa 175 -155}\special{pa 185 -90}\special{pa 194 -23}%
+\special{pa 203 48}\special{pa 212 121}\special{pa 221 197}%
+\special{fp}%
+\special{pa 0 -833}\special{pa 14 -825}\special{pa 28 -814}\special{pa 42 -800}\special{pa 57 -784}%
+\special{pa 71 -764}\special{pa 85 -742}\special{pa 99 -717}\special{pa 113 -688}%
+\special{pa 127 -657}\special{pa 141 -623}\special{pa 156 -587}\special{pa 170 -547}%
+\special{pa 184 -504}\special{pa 198 -459}\special{pa 212 -410}\special{pa 226 -359}%
+\special{pa 241 -305}\special{pa 255 -248}\special{pa 269 -188}\special{pa 283 -125}%
+\special{pa 297 -59}\special{pa 311 9}\special{pa 325 81}\special{pa 340 155}%
+\special{fp}%
+\special{pa 0 -833}\special{pa 18 -827}\special{pa 35 -819}\special{pa 53 -807}\special{pa 71 -793}%
+\special{pa 88 -776}\special{pa 106 -756}\special{pa 124 -733}\special{pa 141 -707}%
+\special{pa 159 -679}\special{pa 177 -647}\special{pa 195 -613}\special{pa 212 -575}%
+\special{pa 230 -535}\special{pa 248 -492}\special{pa 265 -446}\special{pa 283 -397}%
+\special{pa 301 -345}\special{pa 318 -291}\special{pa 336 -233}\special{pa 354 -173}%
+\special{pa 371 -109}\special{pa 389 -43}\special{pa 407 26}\special{pa 424 98}%
+\special{fp}%
+\special{pa 0 -833}\special{pa 19 -830}\special{pa 39 -824}\special{pa 58 -816}\special{pa 78 -804}%
+\special{pa 97 -790}\special{pa 117 -773}\special{pa 136 -753}\special{pa 156 -730}%
+\special{pa 175 -704}\special{pa 195 -675}\special{pa 214 -643}\special{pa 234 -609}%
+\special{pa 253 -571}\special{pa 273 -531}\special{pa 292 -488}\special{pa 312 -442}%
+\special{pa 331 -393}\special{pa 351 -341}\special{pa 370 -286}\special{pa 390 -228}%
+\special{pa 409 -168}\special{pa 429 -104}\special{pa 448 -38}\special{pa 468 31}%
+\special{fp}%
+\special{pa 0 -833}\special{pa 19 -833}\special{pa 39 -830}\special{pa 58 -824}\special{pa 78 -816}%
+\special{pa 97 -805}\special{pa 116 -790}\special{pa 136 -773}\special{pa 155 -753}%
+\special{pa 175 -730}\special{pa 194 -704}\special{pa 213 -675}\special{pa 233 -644}%
+\special{pa 252 -609}\special{pa 271 -572}\special{pa 291 -532}\special{pa 310 -488}%
+\special{pa 330 -442}\special{pa 349 -393}\special{pa 368 -341}\special{pa 388 -287}%
+\special{pa 407 -229}\special{pa 427 -168}\special{pa 446 -105}\special{pa 465 -39}%
+\special{fp}%
+\special{pa 0 -833}\special{pa 17 -836}\special{pa 35 -836}\special{pa 52 -833}\special{pa 70 -827}%
+\special{pa 87 -818}\special{pa 104 -807}\special{pa 122 -792}\special{pa 139 -775}%
+\special{pa 156 -755}\special{pa 174 -732}\special{pa 191 -706}\special{pa 209 -677}%
+\special{pa 226 -645}\special{pa 243 -610}\special{pa 261 -573}\special{pa 278 -532}%
+\special{pa 296 -489}\special{pa 313 -443}\special{pa 330 -394}\special{pa 348 -342}%
+\special{pa 365 -287}\special{pa 383 -229}\special{pa 400 -168}\special{pa 417 -105}%
+\special{fp}%
+\special{pa 0 -833}\special{pa 14 -838}\special{pa 27 -840}\special{pa 41 -840}\special{pa 55 -836}%
+\special{pa 68 -830}\special{pa 82 -821}\special{pa 96 -809}\special{pa 109 -794}%
+\special{pa 123 -776}\special{pa 137 -755}\special{pa 151 -731}\special{pa 164 -705}%
+\special{pa 178 -675}\special{pa 192 -643}\special{pa 205 -608}\special{pa 219 -570}%
+\special{pa 233 -529}\special{pa 246 -485}\special{pa 260 -438}\special{pa 274 -388}%
+\special{pa 287 -336}\special{pa 301 -280}\special{pa 315 -222}\special{pa 328 -161}%
+\special{fp}%
+\special{pa 0 -833}\special{pa 9 -840}\special{pa 17 -844}\special{pa 26 -845}\special{pa 35 -843}%
+\special{pa 43 -838}\special{pa 52 -831}\special{pa 61 -820}\special{pa 69 -807}\special{pa 78 -791}%
+\special{pa 86 -772}\special{pa 95 -750}\special{pa 104 -725}\special{pa 112 -697}%
+\special{pa 121 -666}\special{pa 130 -633}\special{pa 138 -596}\special{pa 147 -557}%
+\special{pa 156 -515}\special{pa 164 -470}\special{pa 173 -422}\special{pa 182 -371}%
+\special{pa 190 -317}\special{pa 199 -260}\special{pa 207 -201}%
+\special{fp}%
+\special{pa 0 -833}\special{pa 3 -840}\special{pa 6 -845}\special{pa 8 -847}\special{pa 11 -846}%
+\special{pa 14 -843}\special{pa 17 -836}\special{pa 19 -826}\special{pa 22 -814}\special{pa 25 -798}%
+\special{pa 28 -780}\special{pa 30 -759}\special{pa 33 -735}\special{pa 36 -708}\special{pa 39 -678}%
+\special{pa 41 -646}\special{pa 44 -610}\special{pa 47 -572}\special{pa 50 -530}\special{pa 52 -486}%
+\special{pa 55 -439}\special{pa 58 -389}\special{pa 61 -336}\special{pa 63 -280}\special{pa 66 -221}%
+\special{fp}%
+\special{pa 0 -833}\special{pa -3 -840}\special{pa -7 -845}\special{pa -10 -847}\special{pa -14 -846}%
+\special{pa -17 -842}\special{pa -20 -836}\special{pa -24 -826}\special{pa -27 -813}%
+\special{pa -31 -798}\special{pa -34 -780}\special{pa -37 -759}\special{pa -41 -734}%
+\special{pa -44 -707}\special{pa -48 -678}\special{pa -51 -645}\special{pa -54 -609}%
+\special{pa -58 -571}\special{pa -61 -529}\special{pa -65 -485}\special{pa -68 -438}%
+\special{pa -71 -388}\special{pa -75 -335}\special{pa -78 -279}\special{pa -82 -220}%
+\special{fp}%
+\special{pa 0 -833}\special{pa -9 -839}\special{pa -18 -843}\special{pa -28 -844}%
+\special{pa -37 -842}\special{pa -46 -838}\special{pa -55 -830}\special{pa -65 -819}%
+\special{pa -74 -806}\special{pa -83 -790}\special{pa -92 -770}\special{pa -101 -748}%
+\special{pa -111 -723}\special{pa -120 -695}\special{pa -129 -664}\special{pa -138 -631}%
+\special{pa -148 -594}\special{pa -157 -555}\special{pa -166 -512}\special{pa -175 -467}%
+\special{pa -185 -419}\special{pa -194 -368}\special{pa -203 -314}\special{pa -212 -257}%
+\special{pa -221 -197}%
+\special{fp}%
+\special{pa 0 -833}\special{pa -14 -838}\special{pa -28 -840}\special{pa -42 -839}%
+\special{pa -57 -835}\special{pa -71 -829}\special{pa -85 -819}\special{pa -99 -807}%
+\special{pa -113 -792}\special{pa -127 -774}\special{pa -141 -753}\special{pa -156 -729}%
+\special{pa -170 -702}\special{pa -184 -672}\special{pa -198 -640}\special{pa -212 -604}%
+\special{pa -226 -566}\special{pa -241 -525}\special{pa -255 -481}\special{pa -269 -434}%
+\special{pa -283 -384}\special{pa -297 -331}\special{pa -311 -275}\special{pa -325 -217}%
+\special{pa -340 -155}%
+\special{fp}%
+\special{pa 0 -833}\special{pa -18 -835}\special{pa -35 -835}\special{pa -53 -832}%
+\special{pa -71 -826}\special{pa -88 -817}\special{pa -106 -805}\special{pa -124 -790}%
+\special{pa -141 -773}\special{pa -159 -752}\special{pa -177 -729}\special{pa -195 -703}%
+\special{pa -212 -674}\special{pa -230 -641}\special{pa -248 -607}\special{pa -265 -569}%
+\special{pa -283 -528}\special{pa -301 -484}\special{pa -318 -438}\special{pa -336 -388}%
+\special{pa -354 -336}\special{pa -371 -281}\special{pa -389 -223}\special{pa -407 -162}%
+\special{pa -424 -98}%
+\special{fp}%
+\special{pa 0 -833}\special{pa -19 -833}\special{pa -39 -829}\special{pa -58 -824}%
+\special{pa -78 -815}\special{pa -97 -803}\special{pa -117 -788}\special{pa -136 -771}%
+\special{pa -156 -751}\special{pa -175 -727}\special{pa -195 -701}\special{pa -214 -672}%
+\special{pa -234 -640}\special{pa -253 -605}\special{pa -273 -568}\special{pa -292 -527}%
+\special{pa -312 -483}\special{pa -331 -437}\special{pa -351 -388}\special{pa -370 -336}%
+\special{pa -390 -280}\special{pa -409 -223}\special{pa -429 -162}\special{pa -448 -98}%
+\special{pa -468 -31}%
+\special{fp}%
+\special{pa 0 -833}\special{pa -19 -830}\special{pa -39 -824}\special{pa -58 -815}%
+\special{pa -78 -803}\special{pa -97 -788}\special{pa -116 -771}\special{pa -136 -751}%
+\special{pa -155 -727}\special{pa -175 -701}\special{pa -194 -672}\special{pa -213 -640}%
+\special{pa -233 -605}\special{pa -252 -567}\special{pa -271 -527}\special{pa -291 -483}%
+\special{pa -310 -437}\special{pa -330 -388}\special{pa -349 -335}\special{pa -368 -280}%
+\special{pa -388 -222}\special{pa -407 -161}\special{pa -427 -98}\special{pa -446 -31}%
+\special{pa -465 39}%
+\special{fp}%
+\special{pa 0 -833}\special{pa -17 -827}\special{pa -35 -818}\special{pa -52 -807}%
+\special{pa -70 -792}\special{pa -87 -775}\special{pa -104 -754}\special{pa -122 -731}%
+\special{pa -139 -705}\special{pa -156 -676}\special{pa -174 -644}\special{pa -191 -610}%
+\special{pa -209 -572}\special{pa -226 -532}\special{pa -243 -488}\special{pa -261 -442}%
+\special{pa -278 -393}\special{pa -296 -341}\special{pa -313 -286}\special{pa -330 -228}%
+\special{pa -348 -167}\special{pa -365 -104}\special{pa -383 -37}\special{pa -400 32}%
+\special{pa -417 105}%
+\special{fp}%
+\special{pa 3 -835}\special{pa -3 -835}\special{pa -3 -830}\special{pa 3 -830}\special{pa 3 -835}%
+\special{sh 1}\special{fp}%
+\special{pa -21 -825}\special{pa -17 -823}\special{pa -13 -821}\special{pa -7 -820}%
+\special{pa -1 -819}\special{pa 5 -820}\special{pa 11 -821}\special{pa 16 -822}\special{pa 20 -825}%
+\special{pa 23 -827}\special{pa 24 -830}\special{pa 23 -833}\special{pa 21 -836}\special{pa 17 -838}%
+\special{pa 13 -840}\special{pa 7 -841}\special{pa 1 -842}\special{pa -5 -841}\special{pa -11 -840}%
+\special{pa -16 -839}\special{pa -20 -836}\special{pa -23 -834}\special{pa -24 -831}%
+\special{pa -23 -828}\special{pa -21 -825}%
+\special{fp}%
+\special{pa -42 -814}\special{pa -35 -809}\special{pa -25 -805}\special{pa -14 -803}%
+\special{pa -2 -802}\special{pa 11 -803}\special{pa 22 -805}\special{pa 32 -808}\special{pa 40 -812}%
+\special{pa 45 -818}\special{pa 47 -824}\special{pa 46 -829}\special{pa 42 -835}\special{pa 35 -840}%
+\special{pa 25 -843}\special{pa 14 -846}\special{pa 2 -847}\special{pa -11 -846}\special{pa -22 -844}%
+\special{pa -32 -841}\special{pa -40 -836}\special{pa -45 -831}\special{pa -47 -825}%
+\special{pa -46 -819}\special{pa -42 -814}%
+\special{fp}%
+\special{pa -63 -798}\special{pa -52 -791}\special{pa -38 -786}\special{pa -21 -782}%
+\special{pa -3 -780}\special{pa 16 -781}\special{pa 33 -784}\special{pa 48 -789}\special{pa 60 -796}%
+\special{pa 68 -804}\special{pa 71 -813}\special{pa 69 -821}\special{pa 63 -830}\special{pa 52 -837}%
+\special{pa 38 -842}\special{pa 21 -846}\special{pa 3 -847}\special{pa -16 -847}\special{pa -33 -844}%
+\special{pa -48 -838}\special{pa -60 -832}\special{pa -68 -824}\special{pa -71 -815}%
+\special{pa -69 -806}\special{pa -63 -798}%
+\special{fp}%
+\special{pa -83 -778}\special{pa -69 -769}\special{pa -50 -761}\special{pa -28 -757}%
+\special{pa -3 -755}\special{pa 21 -756}\special{pa 44 -760}\special{pa 64 -767}\special{pa 80 -776}%
+\special{pa 90 -786}\special{pa 94 -798}\special{pa 92 -809}\special{pa 83 -820}\special{pa 69 -830}%
+\special{pa 50 -837}\special{pa 28 -842}\special{pa 3 -844}\special{pa -21 -843}\special{pa -44 -839}%
+\special{pa -64 -832}\special{pa -80 -823}\special{pa -90 -812}\special{pa -94 -801}%
+\special{pa -92 -789}\special{pa -83 -778}%
+\special{fp}%
+\special{pa -104 -754}\special{pa -86 -743}\special{pa -63 -733}\special{pa -35 -727}%
+\special{pa -4 -725}\special{pa 26 -726}\special{pa 55 -731}\special{pa 80 -740}\special{pa 100 -751}%
+\special{pa 113 -764}\special{pa 118 -779}\special{pa 115 -793}\special{pa 104 -807}%
+\special{pa 86 -819}\special{pa 63 -828}\special{pa 35 -834}\special{pa 4 -836}\special{pa -26 -835}%
+\special{pa -55 -830}\special{pa -80 -821}\special{pa -100 -810}\special{pa -113 -797}%
+\special{pa -118 -783}\special{pa -115 -768}\special{pa -104 -754}%
+\special{fp}%
+\special{pa -125 -726}\special{pa -104 -712}\special{pa -75 -701}\special{pa -42 -694}%
+\special{pa -5 -691}\special{pa 32 -692}\special{pa 66 -699}\special{pa 97 -709}\special{pa 120 -722}%
+\special{pa 136 -738}\special{pa 142 -755}\special{pa 138 -773}\special{pa 125 -789}%
+\special{pa 104 -803}\special{pa 75 -815}\special{pa 42 -822}\special{pa 5 -825}\special{pa -32 -823}%
+\special{pa -66 -817}\special{pa -97 -807}\special{pa -120 -793}\special{pa -136 -777}%
+\special{pa -142 -760}\special{pa -138 -743}\special{pa -125 -726}%
+\special{fp}%
+\special{pa -146 -694}\special{pa -121 -677}\special{pa -88 -664}\special{pa -48 -656}%
+\special{pa -6 -653}\special{pa 37 -654}\special{pa 78 -662}\special{pa 113 -673}%
+\special{pa 140 -689}\special{pa 158 -708}\special{pa 165 -728}\special{pa 161 -748}%
+\special{pa 146 -767}\special{pa 121 -784}\special{pa 88 -797}\special{pa 48 -805}%
+\special{pa 6 -809}\special{pa -37 -807}\special{pa -78 -800}\special{pa -113 -788}%
+\special{pa -140 -772}\special{pa -158 -754}\special{pa -165 -733}\special{pa -161 -713}%
+\special{pa -146 -694}%
+\special{fp}%
+\special{pa -167 -658}\special{pa -138 -639}\special{pa -100 -624}\special{pa -55 -614}%
+\special{pa -7 -610}\special{pa 42 -612}\special{pa 89 -621}\special{pa 129 -634}%
+\special{pa 160 -652}\special{pa 181 -673}\special{pa 189 -696}\special{pa 184 -719}%
+\special{pa 167 -741}\special{pa 138 -760}\special{pa 100 -775}\special{pa 55 -785}%
+\special{pa 7 -789}\special{pa -42 -786}\special{pa -89 -778}\special{pa -129 -765}%
+\special{pa -160 -747}\special{pa -181 -726}\special{pa -189 -703}\special{pa -184 -679}%
+\special{pa -167 -658}%
+\special{fp}%
+\special{pa -188 -617}\special{pa -156 -596}\special{pa -113 -579}\special{pa -62 -568}%
+\special{pa -8 -564}\special{pa 48 -566}\special{pa 100 -575}\special{pa 145 -590}%
+\special{pa 180 -611}\special{pa 203 -635}\special{pa 212 -660}\special{pa 207 -687}%
+\special{pa 188 -711}\special{pa 156 -733}\special{pa 113 -749}\special{pa 62 -760}%
+\special{pa 8 -764}\special{pa -48 -762}\special{pa -100 -753}\special{pa -145 -738}%
+\special{pa -180 -717}\special{pa -203 -694}\special{pa -212 -668}\special{pa -207 -642}%
+\special{pa -188 -617}%
+\special{fp}%
+\special{pa -209 -572}\special{pa -173 -548}\special{pa -125 -530}\special{pa -69 -518}%
+\special{pa -8 -513}\special{pa 53 -516}\special{pa 111 -526}\special{pa 161 -543}%
+\special{pa 200 -565}\special{pa 226 -592}\special{pa 236 -620}\special{pa 230 -650}%
+\special{pa 209 -677}\special{pa 173 -701}\special{pa 125 -719}\special{pa 69 -731}%
+\special{pa 8 -736}\special{pa -53 -733}\special{pa -111 -723}\special{pa -161 -706}%
+\special{pa -200 -684}\special{pa -226 -657}\special{pa -236 -628}\special{pa -230 -599}%
+\special{pa -209 -572}%
+\special{fp}%
+\special{pa -230 -523}\special{pa -190 -497}\special{pa -138 -477}\special{pa -76 -463}%
+\special{pa -9 -458}\special{pa 58 -461}\special{pa 122 -472}\special{pa 177 -491}%
+\special{pa 220 -516}\special{pa 248 -545}\special{pa 260 -576}\special{pa 253 -608}%
+\special{pa 230 -638}\special{pa 190 -664}\special{pa 138 -685}\special{pa 76 -698}%
+\special{pa 9 -704}\special{pa -58 -700}\special{pa -122 -689}\special{pa -177 -671}%
+\special{pa -220 -646}\special{pa -248 -617}\special{pa -260 -585}\special{pa -253 -553}%
+\special{pa -230 -523}%
+\special{fp}%
+\special{pa -250 -470}\special{pa -207 -442}\special{pa -150 -419}\special{pa -83 -405}%
+\special{pa -10 -399}\special{pa 64 -402}\special{pa 133 -415}\special{pa 193 -435}%
+\special{pa 240 -462}\special{pa 271 -494}\special{pa 283 -528}\special{pa 276 -563}%
+\special{pa 250 -596}\special{pa 207 -624}\special{pa 150 -646}\special{pa 83 -661}%
+\special{pa 10 -667}\special{pa -64 -663}\special{pa -133 -651}\special{pa -193 -631}%
+\special{pa -240 -604}\special{pa -271 -572}\special{pa -283 -538}\special{pa -276 -503}%
+\special{pa -250 -470}%
+\special{fp}%
+\special{pa -271 -413}\special{pa -225 -382}\special{pa -163 -358}\special{pa -90 -342}%
+\special{pa -11 -336}\special{pa 69 -339}\special{pa 144 -353}\special{pa 209 -375}%
+\special{pa 260 -404}\special{pa 294 -438}\special{pa 307 -476}\special{pa 299 -513}%
+\special{pa 271 -549}\special{pa 225 -580}\special{pa 163 -604}\special{pa 90 -620}%
+\special{pa 11 -626}\special{pa -69 -622}\special{pa -144 -609}\special{pa -209 -587}%
+\special{pa -260 -558}\special{pa -294 -523}\special{pa -307 -486}\special{pa -299 -448}%
+\special{pa -271 -413}%
+\special{fp}%
+\special{pa -292 -351}\special{pa -242 -318}\special{pa -175 -292}\special{pa -97 -275}%
+\special{pa -12 -268}\special{pa 74 -272}\special{pa 155 -287}\special{pa 225 -310}%
+\special{pa 280 -342}\special{pa 316 -379}\special{pa 330 -419}\special{pa 322 -460}%
+\special{pa 292 -498}\special{pa 242 -531}\special{pa 175 -557}\special{pa 97 -574}%
+\special{pa 12 -581}\special{pa -74 -577}\special{pa -155 -563}\special{pa -225 -539}%
+\special{pa -280 -508}\special{pa -316 -470}\special{pa -330 -430}\special{pa -322 -390}%
+\special{pa -292 -351}%
+\special{fp}%
+\special{pa -313 -286}\special{pa -259 -250}\special{pa -188 -222}\special{pa -104 -204}%
+\special{pa -13 -197}\special{pa 79 -201}\special{pa 166 -216}\special{pa 241 -242}%
+\special{pa 300 -275}\special{pa 339 -315}\special{pa 354 -358}\special{pa 345 -402}%
+\special{pa 313 -443}\special{pa 259 -478}\special{pa 188 -506}\special{pa 104 -524}%
+\special{pa 13 -532}\special{pa -79 -528}\special{pa -166 -512}\special{pa -241 -487}%
+\special{pa -300 -453}\special{pa -339 -413}\special{pa -354 -370}\special{pa -345 -327}%
+\special{pa -313 -286}%
+\special{fp}%
+\special{pa -334 -216}\special{pa -277 -178}\special{pa -201 -148}\special{pa -111 -129}%
+\special{pa -14 -121}\special{pa 85 -126}\special{pa 177 -142}\special{pa 258 -169}%
+\special{pa 320 -205}\special{pa 361 -247}\special{pa 378 -293}\special{pa 368 -340}%
+\special{pa 334 -383}\special{pa 277 -421}\special{pa 201 -451}\special{pa 111 -471}%
+\special{pa 14 -478}\special{pa -85 -474}\special{pa -177 -458}\special{pa -258 -431}%
+\special{pa -320 -395}\special{pa -361 -352}\special{pa -378 -306}\special{pa -368 -260}%
+\special{pa -334 -216}%
+\special{fp}%
+\special{pa -355 -142}\special{pa -294 -102}\special{pa -213 -70}\special{pa -118 -50}%
+\special{pa -14 -41}\special{pa 90 -46}\special{pa 188 -63}\special{pa 274 -92}\special{pa 340 -130}%
+\special{pa 384 -175}\special{pa 401 -224}\special{pa 391 -274}\special{pa 355 -320}%
+\special{pa 294 -360}\special{pa 213 -392}\special{pa 118 -413}\special{pa 14 -421}%
+\special{pa -90 -416}\special{pa -188 -399}\special{pa -274 -370}\special{pa -340 -332}%
+\special{pa -384 -287}\special{pa -401 -238}\special{pa -391 -189}\special{pa -355 -142}%
+\special{fp}%
+\special{pa -376 -64}\special{pa -311 -21}\special{pa -226 12}\special{pa -125 34}%
+\special{pa -15 43}\special{pa 95 38}\special{pa 199 19}\special{pa 290 -11}\special{pa 360 -52}%
+\special{pa 407 -99}\special{pa 425 -151}\special{pa 414 -203}\special{pa 376 -252}%
+\special{pa 311 -295}\special{pa 226 -329}\special{pa 125 -350}\special{pa 15 -359}%
+\special{pa -95 -354}\special{pa -199 -336}\special{pa -290 -305}\special{pa -360 -265}%
+\special{pa -407 -217}\special{pa -425 -165}\special{pa -414 -113}\special{pa -376 -64}%
+\special{fp}%
+\special{pa -396 18}\special{pa -329 63}\special{pa -238 99}\special{pa -132 122}%
+\special{pa -16 131}\special{pa 101 126}\special{pa 210 106}\special{pa 306 74}\special{pa 380 31}%
+\special{pa 429 -19}\special{pa 449 -74}\special{pa 437 -129}\special{pa 396 -181}%
+\special{pa 329 -226}\special{pa 238 -261}\special{pa 132 -284}\special{pa 16 -293}%
+\special{pa -101 -288}\special{pa -210 -269}\special{pa -306 -236}\special{pa -380 -194}%
+\special{pa -429 -143}\special{pa -449 -89}\special{pa -437 -34}\special{pa -396 18}%
+\special{fp}%
+\special{pa -417 105}\special{pa -346 152}\special{pa -251 189}\special{pa -139 214}%
+\special{pa -17 223}\special{pa 106 218}\special{pa 221 197}\special{pa 322 163}\special{pa 400 119}%
+\special{pa 452 65}\special{pa 472 8}\special{pa 460 -50}\special{pa 417 -105}\special{pa 346 -152}%
+\special{pa 251 -189}\special{pa 139 -214}\special{pa 17 -223}\special{pa -106 -218}%
+\special{pa -221 -197}\special{pa -322 -163}\special{pa -400 -119}\special{pa -452 -65}%
+\special{pa -472 -8}\special{pa -460 50}\special{pa -417 105}%
+\special{fp}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/parabolaplot.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/parabolaplot.pdf
new file mode 100644
index 0000000000..ccc0f1c0cf
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/parabolaplot.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/parabolaplot.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/parabolaplot.tex
new file mode 100644
index 0000000000..d4ed7811b5
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/parabolaplot.tex
@@ -0,0 +1,71 @@
+%%% /Users/Hannya/Desktop/fig/parabolaplot.tex
+%%% Generator=hachtest.cdy
+{\unitlength=6mm%
+\begin{picture}%
+(7.03,6.7)(-3.5,-3.2)%
+\special{pn 8}%
+%
+\special{pa -827 -724}\special{pa -803 -683}\special{pa -756 -605}\special{pa -709 -531}%
+\special{pa -661 -463}\special{pa -614 -399}\special{pa -567 -340}\special{pa -520 -286}%
+\special{pa -472 -236}\special{pa -425 -191}\special{pa -378 -151}\special{pa -331 -116}%
+\special{pa -283 -85}\special{pa -236 -59}\special{pa -189 -38}\special{pa -142 -21}%
+\special{pa -94 -9}\special{pa -47 -2}\special{pa 0 -0}\special{pa 47 -2}%
+\special{pa 94 -9}\special{pa 142 -21}\special{pa 189 -38}\special{pa 236 -59}%
+\special{pa 283 -85}\special{pa 331 -116}\special{pa 378 -151}\special{pa 425 -191}%
+\special{pa 472 -236}\special{pa 520 -286}\special{pa 567 -340}\special{pa 614 -399}%
+\special{pa 661 -463}\special{pa 709 -531}\special{pa 756 -605}\special{pa 803 -683}%
+\special{pa 834 -736}%
+\special{fp}%
+\special{pa 834 -730}\special{pa -90 756}%
+\special{fp}%
+\special{pa -827 -656}\special{pa 334 756}%
+\special{fp}%
+\special{pa 79 446}\special{pa 142 383}%
+\special{fp}%
+\special{pa 16 369}\special{pa 370 15}%
+\special{fp}%
+\special{pa -46 293}\special{pa 599 -353}%
+\special{fp}%
+\special{pa -109 216}\special{pa 124 -17}%
+\special{fp}%
+\special{pa 821 -713}\special{pa 828 -721}%
+\special{fp}%
+\special{pa -172 140}\special{pa -30 -2}%
+\special{fp}%
+\special{pa -235 64}\special{pa -148 -23}%
+\special{fp}%
+\special{pa -298 -13}\special{pa -246 -64}%
+\special{fp}%
+\special{pa -360 -89}\special{pa -332 -117}%
+\special{fp}%
+\special{pa -423 -165}\special{pa -410 -179}%
+\special{fp}%
+\special{pa -486 -242}\special{pa -482 -246}%
+\special{fp}%
+\special{pa -549 -318}\special{pa -548 -319}%
+\special{fp}%
+\special{pa -612 -395}\special{pa -611 -395}%
+\special{fp}%
+\special{pa -675 -471}\special{pa -670 -475}%
+\special{fp}%
+\special{pa -737 -547}\special{pa -726 -559}%
+\special{fp}%
+\special{pa -800 -624}\special{pa -780 -644}%
+\special{fp}%
+\special{pa -827 -0}\special{pa 834 -0}%
+\special{fp}%
+\special{pa 0 756}\special{pa 0 -827}%
+\special{fp}%
+\settowidth{\Width}{$x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(3.6133333,0.0000000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{\Depth}%
+\put(0.0000000,3.5833333){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+\settowidth{\Width}{O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(-0.0833333,-0.0833333){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/parabolaplotE.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/parabolaplotE.tex
new file mode 100644
index 0000000000..0decfa029a
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/parabolaplotE.tex
@@ -0,0 +1,56 @@
+%%% /Users/takatoosetsuo/Dropbox/kettoday/0718/fig/parabolaplot.tex
+%%% Generator=parabolaplot.cdy
+{\unitlength=5mm%
+\begin{picture}%
+(9,7)(-4,-3)%
+\special{pn 8}%
+%
+\special{pa -591 -787}\special{pa -551 -673}\special{pa -512 -567}\special{pa -472 -469}%
+\special{pa -433 -378}\special{pa -394 -295}\special{pa -354 -220}\special{pa -315 -154}%
+\special{pa -276 -94}\special{pa -236 -43}\special{pa -197 -0}\special{pa -157 35}%
+\special{pa -118 63}\special{pa -79 83}\special{pa -39 94}\special{pa 0 98}%
+\special{pa 39 94}\special{pa 79 83}\special{pa 118 63}\special{pa 157 35}%
+\special{pa 197 -0}\special{pa 236 -43}\special{pa 276 -94}\special{pa 315 -154}%
+\special{pa 354 -220}\special{pa 394 -295}\special{pa 433 -378}\special{pa 472 -469}%
+\special{pa 512 -567}\special{pa 551 -673}\special{pa 591 -787}%
+\special{fp}%
+\special{pa -738 -787}\special{pa 181 591}%
+\special{fp}%
+\special{pa -28 591}\special{pa 628 -787}%
+\special{fp}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 400 -308}\special{pa 59 407}\special{pa -289 -114}%
+\special{fp}%
+}%
+\special{pa 39 378}\special{pa 104 314}%
+\special{fp}%
+\special{pa -16 295}\special{pa 230 48}%
+\special{fp}%
+\special{pa -72 211}\special{pa 47 92}%
+\special{fp}%
+\special{pa 347 -208}\special{pa 357 -217}%
+\special{fp}%
+\special{pa -128 128}\special{pa -81 81}%
+\special{fp}%
+\special{pa -183 44}\special{pa -167 27}%
+\special{fp}%
+\special{pa -239 -39}\special{pa -236 -43}%
+\special{fp}%
+\special{pa -787 -0}\special{pa 984 -0}%
+\special{fp}%
+\special{pa 0 591}\special{pa 0 -787}%
+\special{fp}%
+\settowidth{\Width}{$x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(5.1000000,0.0000000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{\Depth}%
+\put(0.0000000,4.1000000){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+\settowidth{\Width}{O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(-0.1000000,-0.1000000){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/paramark.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/paramark.tex
new file mode 100644
index 0000000000..e9a95d0e39
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/paramark.tex
@@ -0,0 +1,41 @@
+%%% /Users/Hannya/Desktop/fig/paramark.tex
+%%% Generator=paramark.cdy
+{\unitlength=8mm%
+\begin{picture}%
+(5.48,5.15)(-0.63,-0.53)%
+\special{pn 8}%
+%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -1260}\special{pa 0 -0}\special{pa 1260 -0}\special{pa 0 -1260}%
+\special{fp}%
+}%
+\special{pa 157 -0}\special{pa 157 -157}\special{pa 0 -157}%
+\special{fp}%
+\settowidth{\Width}{$\alpha$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\alpha$}\settodepth{\Depth}{$\alpha$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(0.8500000,1.9500000){\hspace*{\Width}\raisebox{\Height}{$\alpha$}}%
+%
+\special{pa 0 -945}\special{pa 223 -722}\special{pa 223 -1037}%
+\special{fp}%
+\settowidth{\Width}{$\theta$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\theta$}\settodepth{\Depth}{$\theta$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.2900000,0.7100000){\hspace*{\Width}\raisebox{\Height}{$\theta$}}%
+%
+\special{pn 16}%
+\special{pa 1148 -111}\special{pa 991 -111}\special{pa 1102 -0}%
+\special{fp}%
+\special{pn 8}%
+\settowidth{\Width}{A}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{A}\settodepth{\Depth}{A}\setlength{\Height}{\Depth}%
+\put(0.0000000,4.0625000){\hspace*{\Width}\raisebox{\Height}{A}}%
+%
+\settowidth{\Width}{B}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{B}\settodepth{\Depth}{B}\setlength{\Height}{-\Height}%
+\put(-0.0625000,-0.0625000){\hspace*{\Width}\raisebox{\Height}{B}}%
+%
+\settowidth{\Width}{C}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{C}\settodepth{\Depth}{C}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.0625000,0.0000000){\hspace*{\Width}\raisebox{\Height}{C}}%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/paramoncrv.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/paramoncrv.tex
new file mode 100644
index 0000000000..75d6206b1c
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/paramoncrv.tex
@@ -0,0 +1,118 @@
+%%% fig.tex 2016-5-3 12:50
+%%% fig.sce 2016-5-3 12:50
+{\unitlength=10mm%
+\begin{picture}%
+( 4.99000, 3.72000)( -2.51000, -0.69000)%
+\special{pn 8}%
+%
+\special{pn 8}%
+\special{pa 788 4}\special{pa 787 -4}\special{fp}\special{pa 785 -35}\special{pa 785 -43}\special{fp}%
+\special{pa 783 -74}\special{pa 782 -82}\special{fp}\special{pa 778 -113}\special{pa 777 -121}\special{fp}%
+\special{pa 771 -152}\special{pa 770 -160}\special{fp}\special{pa 764 -191}\special{pa 762 -198}\special{fp}%
+\special{pa 752 -228}\special{pa 750 -236}\special{fp}\special{pa 740 -265}\special{pa 737 -273}\special{fp}%
+\special{pa 726 -302}\special{pa 723 -309}\special{fp}\special{pa 710 -338}\special{pa 706 -345}\special{fp}%
+\special{pa 693 -373}\special{pa 689 -380}\special{fp}\special{pa 673 -407}\special{pa 668 -414}\special{fp}%
+\special{pa 652 -440}\special{pa 647 -447}\special{fp}\special{pa 629 -472}\special{pa 624 -478}\special{fp}%
+\special{pa 604 -503}\special{pa 599 -509}\special{fp}\special{pa 579 -533}\special{pa 574 -539}\special{fp}%
+\special{pa 551 -560}\special{pa 545 -566}\special{fp}\special{pa 523 -587}\special{pa 517 -593}\special{fp}%
+\special{pa 493 -613}\special{pa 487 -618}\special{fp}\special{pa 461 -636}\special{pa 455 -641}\special{fp}%
+\special{pa 430 -659}\special{pa 423 -664}\special{fp}\special{pa 396 -679}\special{pa 389 -683}\special{fp}%
+\special{pa 361 -698}\special{pa 354 -702}\special{fp}\special{pa 326 -716}\special{pa 319 -719}\special{fp}%
+\special{pa 290 -730}\special{pa 282 -733}\special{fp}\special{pa 253 -745}\special{pa 246 -748}\special{fp}%
+\special{pa 216 -756}\special{pa 208 -758}\special{fp}\special{pa 178 -766}\special{pa 170 -768}\special{fp}%
+\special{pa 139 -774}\special{pa 132 -776}\special{fp}\special{pa 101 -779}\special{pa 93 -780}\special{fp}%
+\special{pa 62 -785}\special{pa 54 -785}\special{fp}\special{pa 22 -786}\special{pa 14 -786}\special{fp}%
+\special{pa -17 -786}\special{pa -25 -786}\special{fp}\special{pa -56 -785}\special{pa -64 -784}\special{fp}%
+\special{pa -95 -780}\special{pa -103 -779}\special{fp}\special{pa -134 -775}\special{pa -142 -774}\special{fp}%
+\special{pa -172 -767}\special{pa -180 -765}\special{fp}\special{pa -211 -757}\special{pa -218 -755}\special{fp}%
+\special{pa -248 -747}\special{pa -256 -744}\special{fp}\special{pa -285 -732}\special{pa -292 -729}\special{fp}%
+\special{pa -321 -718}\special{pa -329 -715}\special{fp}\special{pa -357 -701}\special{pa -364 -697}\special{fp}%
+\special{pa -391 -682}\special{pa -398 -678}\special{fp}\special{pa -425 -662}\special{pa -432 -658}\special{fp}%
+\special{pa -457 -639}\special{pa -463 -635}\special{fp}\special{pa -489 -616}\special{pa -495 -611}\special{fp}%
+\special{pa -519 -591}\special{pa -525 -586}\special{fp}\special{pa -547 -564}\special{pa -553 -559}\special{fp}%
+\special{pa -576 -537}\special{pa -581 -531}\special{fp}\special{pa -601 -507}\special{pa -606 -501}\special{fp}%
+\special{pa -626 -477}\special{pa -631 -470}\special{fp}\special{pa -649 -445}\special{pa -653 -438}\special{fp}%
+\special{pa -670 -411}\special{pa -674 -405}\special{fp}\special{pa -690 -378}\special{pa -694 -371}\special{fp}%
+\special{pa -707 -343}\special{pa -711 -335}\special{fp}\special{pa -724 -307}\special{pa -727 -300}\special{fp}%
+\special{pa -738 -271}\special{pa -741 -263}\special{fp}\special{pa -751 -233}\special{pa -753 -226}\special{fp}%
+\special{pa -762 -196}\special{pa -764 -188}\special{fp}\special{pa -770 -157}\special{pa -772 -149}\special{fp}%
+\special{pa -778 -119}\special{pa -779 -111}\special{fp}\special{pa -782 -80}\special{pa -783 -72}\special{fp}%
+\special{pa -785 -41}\special{pa -785 -33}\special{fp}\special{pa -787 -1}\special{pa -787 7}\special{fp}%
+\special{pa -785 38}\special{pa -785 46}\special{fp}\special{pa -783 77}\special{pa -782 85}\special{fp}%
+\special{pa -778 116}\special{pa -777 124}\special{fp}\special{pa -771 154}\special{pa -769 162}\special{fp}%
+\special{pa -763 193}\special{pa -761 201}\special{fp}\special{pa -751 230}\special{pa -749 238}\special{fp}%
+\special{pa -739 268}\special{pa -737 275}\special{fp}\special{pn 8}%
+\special{pa 737 275}\special{pa 739 268}\special{fp}\special{pa 749 238}\special{pa 752 230}\special{fp}%
+\special{pa 762 200}\special{pa 764 192}\special{fp}\special{pa 769 161}\special{pa 771 153}\special{fp}%
+\special{pa 777 122}\special{pa 778 114}\special{fp}\special{pa 782 83}\special{pa 783 75}\special{fp}%
+\special{pa 785 44}\special{pa 785 36}\special{fp}\special{pa 787 4}\special{pa 788 -4}\special{fp}%
+\special{pn 8}%
+\special{pa 787 0}\special{pa 637 -463}\special{pa 243 -749}\special{pa -243 -749}%
+\special{pa -637 -463}\special{pa -787 0}%
+\special{fp}%
+\special{pn 5}%
+\special{pa 483 -599}\special{pa 475 -604}\special{pa 465 -604}\special{pa 457 -600}%
+\special{pa 451 -593}\special{pa 449 -584}\special{pa 452 -575}\special{pa 459 -568}%
+\special{pa 468 -565}\special{pa 477 -567}\special{pa 484 -573}\special{pa 488 -581}%
+\special{pa 488 -591}\special{pa 483 -599}\special{sh 1}\special{fp}%
+\special{pa 801 -14}\special{pa 793 -19}\special{pa 784 -19}\special{pa 775 -15}\special{pa 769 -8}%
+\special{pa 768 1}\special{pa 771 10}\special{pa 777 17}\special{pa 786 20}\special{pa 795 18}%
+\special{pa 803 12}\special{pa 807 4}\special{pa 806 -6}\special{pa 801 -14}\special{sh 1}\special{fp}%
+\special{pa -773 -14}\special{pa -782 -19}\special{pa -791 -19}\special{pa -800 -15}%
+\special{pa -805 -8}\special{pa -807 1}\special{pa -804 10}\special{pa -798 17}\special{pa -789 20}%
+\special{pa -779 18}\special{pa -772 12}\special{pa -768 4}\special{pa -769 -6}\special{pa -773 -14}%
+\special{sh 1}\special{fp}%
+\special{pn 8}%
+\settowidth{\Width}{P}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{P}\settodepth{\Depth}{P}\setlength{\Height}{-\Height}%
+\put(2.0500,-0.0500){\hspace*{\Width}\raisebox{\Height}{P}}%
+%
+%
+\settowidth{\Width}{Q}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{Q}\settodepth{\Depth}{Q}\setlength{\Height}{-\Height}%
+\put(-2.0500,-0.0500){\hspace*{\Width}\raisebox{\Height}{Q}}%
+%
+%
+\settowidth{\Width}{A}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{A}\settodepth{\Depth}{A}\setlength{\Height}{\Depth}%
+\put(1.2409,1.5359){\hspace*{\Width}\raisebox{\Height}{A}}%
+%
+%
+\special{pn 8}%
+\special{pa -988 0}\special{pa 937 0}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 901 24}\special{pa 976 0}\special{pa 901 -24}\special{pa 901 0}\special{pa 901 24}%
+\special{sh 1}\special{ip}%
+\special{pn 1}%
+\special{pa 901 24}\special{pa 976 0}\special{pa 901 -24}\special{pa 901 0}\special{pa 901 24}%
+\special{pa 976 0}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 8}%
+\special{pa 0 272}\special{pa 0 -1154}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 24 -1118}\special{pa 0 -1193}\special{pa -24 -1118}\special{pa 0 -1118}%
+\special{pa 24 -1118}\special{sh 1}\special{ip}%
+\special{pn 1}%
+\special{pa 24 -1118}\special{pa 0 -1193}\special{pa -24 -1118}\special{pa 0 -1118}%
+\special{pa 24 -1118}\special{pa 0 -1193}%
+\special{fp}%
+\special{pn 8}%
+\settowidth{\Width}{$x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.5300,0.0000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{\Depth}%
+\put(0.0000,3.0800){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+%
+\settowidth{\Width}{O}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(0.0500,-0.0500){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/paramplot1.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/paramplot1.tex
new file mode 100644
index 0000000000..075d6fd7dc
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/paramplot1.tex
@@ -0,0 +1,40 @@
+%%% test.tex 2014-10-18 20:24
+%%% test.sce 2014-10-18 20:24
+{\unitlength=5mm%
+\begin{picture}%
+( 7.50000, 3.50000)( -0.50000, -0.50000)%
+\special{pn 8}%
+%
+\special{pa 0 0}\special{pa 0 -2}\special{pa 1 -6}\special{pa 2 -14}\special{pa 4 -25}%
+\special{pa 8 -39}\special{pa 15 -55}\special{pa 23 -74}\special{pa 34 -95}\special{pa 47 -117}%
+\special{pa 64 -141}\special{pa 83 -165}\special{pa 106 -191}\special{pa 132 -216}%
+\special{pa 161 -241}\special{pa 194 -265}\special{pa 229 -288}\special{pa 268 -309}%
+\special{pa 309 -329}\special{pa 352 -347}\special{pa 397 -362}\special{pa 445 -374}%
+\special{pa 493 -384}\special{pa 543 -390}\special{pa 593 -393}\special{pa 644 -393}%
+\special{pa 694 -390}\special{pa 744 -384}\special{pa 792 -374}\special{pa 839 -362}%
+\special{pa 885 -347}\special{pa 928 -329}\special{pa 969 -309}\special{pa 1008 -288}%
+\special{pa 1043 -265}\special{pa 1075 -241}\special{pa 1105 -216}\special{pa 1131 -191}%
+\special{pa 1154 -165}\special{pa 1173 -141}\special{pa 1190 -117}\special{pa 1203 -95}%
+\special{pa 1214 -74}\special{pa 1222 -55}\special{pa 1228 -39}\special{pa 1232 -25}%
+\special{pa 1235 -14}\special{pa 1236 -6}\special{pa 1237 -2}\special{pa 1237 0}%
+\special{fp}%
+\special{pa -98 0}\special{pa 1378 0}%
+\special{fp}%
+\special{pa 0 98}\special{pa 0 -591}%
+\special{fp}%
+\settowidth{\Width}{$x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(7.0500,0.0000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{\Depth}%
+\put(0.0000,3.0500){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+%
+\settowidth{\Width}{O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(-0.0500,-0.0500){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/paramplot2.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/paramplot2.tex
new file mode 100644
index 0000000000..0769ae8927
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/paramplot2.tex
@@ -0,0 +1,77 @@
+%%% test.tex 2014-10-18 18:55
+%%% test.sce 2014-10-18 18:55
+{\unitlength=5mm%
+\begin{picture}%
+( 20.00000, 3.00000)( -7.50000, -1.50000)%
+\special{pn 8}%
+%
+\special{pn 16}%
+\special{pa 394 0}\special{pa 390 -25}\special{pa 381 -50}\special{pa 365 -74}\special{pa 343 -97}%
+\special{pa 316 -118}\special{pa 283 -137}\special{pa 245 -154}\special{pa 204 -168}%
+\special{pa 159 -180}\special{pa 112 -189}\special{pa 63 -194}\special{pa 13 -197}%
+\special{pa -38 -196}\special{pa -88 -192}\special{pa -136 -185}\special{pa -182 -175}%
+\special{pa -225 -161}\special{pa -265 -146}\special{pa -300 -128}\special{pa -330 -107}%
+\special{pa -355 -85}\special{pa -374 -62}\special{pa -386 -38}\special{pa -393 -13}%
+\special{pa -393 13}\special{pa -386 38}\special{pa -374 62}\special{pa -355 85}\special{pa -330 107}%
+\special{pa -300 128}\special{pa -265 146}\special{pa -225 161}\special{pa -182 175}%
+\special{pa -136 185}\special{pa -88 192}\special{pa -38 196}\special{pa 13 197}\special{pa 63 194}%
+\special{pa 112 189}\special{pa 159 180}\special{pa 204 168}\special{pa 245 154}\special{pa 283 137}%
+\special{pa 316 118}\special{pa 343 97}\special{pa 365 74}\special{pa 381 50}\special{pa 390 25}%
+\special{pa 394 0}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 1378 0}\special{pa 1375 -25}\special{pa 1370 -37}\special{fp}\special{pa 1352 -70}\special{pa 1349 -74}\special{pa 1327 -97}\special{pa 1326 -98}\special{fp}%
+\special{pa 1295 -121}\special{pa 1267 -137}\special{pa 1262 -139}\special{fp}\special{pa 1227 -155}\special{pa 1191 -167}\special{fp}%
+\special{pa 1154 -177}\special{pa 1144 -180}\special{pa 1117 -185}\special{fp}\special{pa 1079 -191}\special{pa 1047 -194}\special{pa 1041 -195}\special{fp}%
+\special{pa 1003 -196}\special{pa 997 -197}\special{pa 965 -196}\special{fp}\special{pa 927 -194}\special{pa 897 -192}\special{pa 889 -191}\special{fp}%
+\special{pa 852 -185}\special{pa 848 -185}\special{pa 814 -177}\special{fp}\special{pa 778 -167}\special{pa 759 -161}\special{pa 742 -155}\special{fp}%
+\special{pa 707 -139}\special{pa 684 -128}\special{pa 674 -120}\special{fp}\special{pa 643 -98}\special{pa 630 -85}\special{pa 617 -70}\special{fp}%
+\special{pa 598 -37}\special{pa 591 -13}\special{pa 591 0}\special{fp}\special{pa 598 37}\special{pa 598 38}\special{pa 611 62}\special{pa 617 70}\special{fp}%
+\special{pa 643 98}\special{pa 654 107}\special{pa 674 120}\special{fp}\special{pa 707 139}\special{pa 720 146}\special{pa 742 155}\special{fp}%
+\special{pa 778 167}\special{pa 802 175}\special{pa 814 177}\special{fp}\special{pa 852 185}\special{pa 889 191}\special{fp}%
+\special{pa 927 194}\special{pa 946 196}\special{pa 965 196}\special{fp}\special{pa 1003 196}\special{pa 1041 195}\special{fp}%
+\special{pa 1079 191}\special{pa 1096 189}\special{pa 1117 185}\special{fp}\special{pa 1154 177}\special{pa 1188 168}\special{pa 1191 167}\special{fp}%
+\special{pa 1227 155}\special{pa 1230 154}\special{pa 1262 139}\special{fp}\special{pa 1295 121}\special{pa 1300 118}\special{pa 1326 98}\special{fp}%
+\special{pa 1352 70}\special{pa 1365 50}\special{pa 1370 37}\special{fp}%
+%
+\special{pn 8}%
+\special{pa 2363 4}\special{pa 2361 -4}\special{fp}\special{pa 2355 -35}\special{pa 2352 -42}\special{fp}%
+\special{pa 2337 -70}\special{pa 2332 -76}\special{fp}\special{pa 2309 -98}\special{pa 2303 -103}\special{fp}%
+\special{pa 2277 -122}\special{pa 2270 -126}\special{fp}\special{pa 2242 -141}\special{pa 2235 -144}\special{fp}%
+\special{pa 2206 -157}\special{pa 2199 -159}\special{fp}\special{pa 2168 -169}\special{pa 2161 -172}\special{fp}%
+\special{pa 2130 -179}\special{pa 2122 -181}\special{fp}\special{pa 2091 -187}\special{pa 2083 -188}\special{fp}%
+\special{pa 2052 -192}\special{pa 2044 -193}\special{fp}\special{pa 2012 -195}\special{pa 2004 -196}\special{fp}%
+\special{pa 1973 -197}\special{pa 1965 -197}\special{fp}\special{pa 1933 -196}\special{pa 1925 -196}\special{fp}%
+\special{pa 1893 -193}\special{pa 1885 -192}\special{fp}\special{pa 1854 -188}\special{pa 1846 -187}\special{fp}%
+\special{pa 1815 -181}\special{pa 1807 -179}\special{fp}\special{pa 1776 -171}\special{pa 1769 -169}\special{fp}%
+\special{pa 1738 -159}\special{pa 1731 -157}\special{fp}\special{pa 1702 -144}\special{pa 1694 -141}\special{fp}%
+\special{pa 1667 -126}\special{pa 1660 -122}\special{fp}\special{pa 1634 -103}\special{pa 1628 -98}\special{fp}%
+\special{pa 1606 -76}\special{pa 1601 -69}\special{fp}\special{pa 1584 -42}\special{pa 1581 -35}\special{fp}%
+\special{pa 1576 -4}\special{pa 1576 4}\special{fp}\special{pa 1581 35}\special{pa 1584 42}\special{fp}%
+\special{pa 1601 69}\special{pa 1606 76}\special{fp}\special{pa 1628 98}\special{pa 1634 103}\special{fp}%
+\special{pa 1660 122}\special{pa 1667 126}\special{fp}\special{pa 1694 141}\special{pa 1702 144}\special{fp}%
+\special{pa 1731 157}\special{pa 1738 159}\special{fp}\special{pa 1769 169}\special{pa 1776 171}\special{fp}%
+\special{pa 1807 179}\special{pa 1815 181}\special{fp}\special{pa 1846 187}\special{pa 1854 188}\special{fp}%
+\special{pa 1885 192}\special{pa 1893 193}\special{fp}\special{pa 1925 196}\special{pa 1933 196}\special{fp}%
+\special{pa 1965 197}\special{pa 1973 197}\special{fp}\special{pa 2004 196}\special{pa 2012 195}\special{fp}%
+\special{pa 2044 193}\special{pa 2052 192}\special{fp}\special{pa 2083 188}\special{pa 2091 187}\special{fp}%
+\special{pa 2122 181}\special{pa 2130 179}\special{fp}\special{pa 2161 172}\special{pa 2168 169}\special{fp}%
+\special{pa 2199 159}\special{pa 2206 157}\special{fp}\special{pa 2235 144}\special{pa 2242 141}\special{fp}%
+\special{pa 2270 126}\special{pa 2277 122}\special{fp}\special{pa 2303 103}\special{pa 2309 98}\special{fp}%
+\special{pa 2332 76}\special{pa 2337 70}\special{fp}\special{pa 2352 42}\special{pa 2355 35}\special{fp}%
+\special{pa 2361 4}\special{pa 2363 -4}\special{fp}\special{pn 8}%
+\special{pa -591 0}\special{pa -594 -25}\special{pa -603 -50}\special{pa -619 -74}%
+\special{pa -641 -97}\special{pa -669 -118}\special{pa -701 -137}\special{pa -739 -154}%
+\special{pa -780 -168}\special{pa -825 -180}\special{pa -872 -189}\special{pa -921 -194}%
+\special{pa -972 -197}\special{pa -1022 -196}\special{pa -1072 -192}\special{pa -1120 -185}%
+\special{pa -1166 -175}\special{pa -1209 -161}\special{pa -1249 -146}\special{pa -1284 -128}%
+\special{pa -1314 -107}\special{pa -1339 -85}\special{pa -1358 -62}\special{pa -1371 -38}%
+\special{pa -1377 -13}\special{pa -1377 13}\special{pa -1371 38}\special{pa -1358 62}%
+\special{pa -1339 85}\special{pa -1314 107}\special{pa -1284 128}\special{pa -1249 146}%
+\special{pa -1209 161}\special{pa -1166 175}\special{pa -1120 185}\special{pa -1072 192}%
+\special{pa -1022 196}\special{pa -972 197}\special{pa -921 194}\special{pa -872 189}%
+\special{pa -825 180}\special{pa -780 168}\special{pa -739 154}\special{pa -701 137}%
+\special{pa -669 118}\special{pa -641 97}\special{pa -619 74}\special{pa -603 50}%
+\special{pa -594 25}\special{pa -591 0}%
+\special{fp}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/partcrv.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/partcrv.tex
new file mode 100644
index 0000000000..f191287619
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/partcrv.tex
@@ -0,0 +1,101 @@
+%%% /Users/Hannya/Desktop/KeTCindy/fig/partcrv.tex
+%%% Generator=template1basic.cdy
+{\unitlength=7mm%
+\begin{picture}%
+(6,6)(-3,-1)%
+\special{pn 8}%
+%
+\special{pa 551 -551}\special{pa 549 -590}\special{fp}\special{pa 545 -630}\special{pa 538 -668}\special{fp}%
+\special{pa 528 -706}\special{pa 516 -744}\special{fp}\special{pa 500 -780}\special{pa 484 -815}\special{fp}%
+\special{pa 463 -849}\special{pa 446 -875}\special{pa 441 -881}\special{fp}\special{pa 416 -912}\special{pa 402 -928}\special{pa 389 -940}\special{fp}%
+\special{pa 361 -967}\special{pa 351 -976}\special{pa 330 -992}\special{fp}\special{pa 298 -1015}\special{pa 295 -1017}\special{pa 264 -1034}\special{fp}%
+\special{pa 229 -1052}\special{pa 192 -1067}\special{fp}\special{pa 155 -1079}\special{pa 117 -1089}\special{fp}%
+\special{pa 78 -1096}\special{pa 39 -1101}\special{fp}\special{pa 0 -1101}\special{pa -35 -1101}\special{pa -39 -1101}\special{fp}%
+\special{pa -78 -1096}\special{pa -103 -1093}\special{pa -117 -1089}\special{fp}\special{pa -155 -1079}\special{pa -170 -1075}\special{pa -192 -1067}\special{fp}%
+\special{pa -229 -1052}\special{pa -235 -1050}\special{pa -264 -1034}\special{fp}%
+\special{pa -298 -1015}\special{pa -330 -992}\special{fp}\special{pa -361 -967}\special{pa -389 -940}\special{fp}%
+\special{pa -416 -912}\special{pa -441 -881}\special{fp}\special{pa -463 -849}\special{pa -483 -817}\special{pa -484 -815}\special{fp}%
+\special{pa -500 -780}\special{pa -512 -754}\special{pa -516 -744}\special{fp}\special{pa -528 -706}\special{pa -534 -688}\special{pa -538 -668}\special{fp}%
+\special{pa -545 -630}\special{pa -547 -620}\special{pa -549 -590}\special{fp}\special{pa -551 -551}\special{pa -549 -512}\special{fp}%
+\special{pa -545 -473}\special{pa -538 -434}\special{fp}\special{pa -528 -396}\special{pa -516 -359}\special{fp}%
+\special{pa -500 -323}\special{pa -484 -287}\special{fp}\special{pa -463 -254}\special{pa -446 -227}\special{pa -441 -221}\special{fp}%
+\special{pa -416 -191}\special{pa -402 -174}\special{pa -389 -162}\special{fp}\special{pa -361 -135}\special{pa -351 -126}\special{pa -330 -111}\special{fp}%
+\special{pa -298 -88}\special{pa -295 -86}\special{pa -264 -68}\special{fp}\special{pa -229 -50}\special{pa -192 -36}\special{fp}%
+\special{pa -155 -23}\special{pa -117 -13}\special{fp}\special{pa -78 -7}\special{pa -39 -2}\special{fp}%
+\special{pa 0 -1}\special{pa 35 -1}\special{pa 39 -2}\special{fp}\special{pa 78 -7}\special{pa 103 -10}\special{pa 117 -13}\special{fp}%
+\special{pa 155 -23}\special{pa 170 -27}\special{pa 192 -36}\special{fp}\special{pa 229 -50}\special{pa 235 -52}\special{pa 264 -68}\special{fp}%
+\special{pa 298 -88}\special{pa 330 -111}\special{fp}\special{pa 361 -135}\special{pa 389 -162}\special{fp}%
+\special{pa 416 -191}\special{pa 441 -221}\special{fp}\special{pa 463 -254}\special{pa 483 -286}\special{pa 484 -287}\special{fp}%
+\special{pa 500 -323}\special{pa 512 -348}\special{pa 516 -359}\special{fp}\special{pa 528 -396}\special{pa 534 -414}\special{pa 538 -434}\special{fp}%
+\special{pa 545 -473}\special{pa 547 -482}\special{pa 549 -512}\special{fp}%
+%
+\special{pn 8}%
+\special{pa -617 -1382}\special{pa -615 -1374}\special{fp}\special{pa -608 -1343}\special{pa -606 -1335}\special{fp}%
+\special{pa -600 -1305}\special{pa -598 -1297}\special{fp}\special{pa -591 -1266}\special{pa -589 -1258}\special{fp}%
+\special{pa -581 -1228}\special{pa -580 -1220}\special{fp}\special{pa -572 -1189}\special{pa -570 -1181}\special{fp}%
+\special{pa -563 -1151}\special{pa -561 -1143}\special{fp}\special{pa -553 -1112}\special{pa -551 -1104}\special{fp}%
+\special{pa -544 -1074}\special{pa -542 -1066}\special{fp}\special{pa -534 -1035}\special{pa -532 -1028}\special{fp}%
+\special{pa -524 -997}\special{pa -522 -989}\special{fp}\special{pa -514 -959}\special{pa -512 -951}\special{fp}%
+\special{pa -504 -921}\special{pa -501 -913}\special{fp}\special{pa -493 -883}\special{pa -491 -875}\special{fp}%
+\special{pa -482 -844}\special{pa -480 -837}\special{fp}\special{pa -471 -806}\special{pa -469 -799}\special{fp}%
+\special{pa -460 -768}\special{pa -458 -761}\special{fp}\special{pa -448 -731}\special{pa -446 -723}\special{fp}%
+\special{pa -437 -693}\special{pa -434 -685}\special{fp}\special{pa -425 -655}\special{pa -422 -647}\special{fp}%
+\special{pa -412 -618}\special{pa -410 -610}\special{fp}\special{pa -400 -580}\special{pa -397 -572}\special{fp}%
+\special{pa -386 -543}\special{pa -384 -535}\special{fp}\special{pa -373 -505}\special{pa -370 -498}\special{fp}%
+\special{pa -359 -468}\special{pa -356 -461}\special{fp}\special{pa -345 -432}\special{pa -342 -424}\special{fp}%
+\special{pa -330 -395}\special{pa -327 -388}\special{fp}\special{pa -314 -359}\special{pa -311 -351}\special{fp}%
+\special{pa -298 -322}\special{pa -295 -315}\special{fp}\special{pa -281 -287}\special{pa -277 -280}\special{fp}%
+\special{pa -263 -251}\special{pa -259 -244}\special{fp}\special{pa -244 -217}\special{pa -240 -210}\special{fp}%
+\special{pa -224 -183}\special{pa -220 -176}\special{fp}\special{pa -203 -149}\special{pa -198 -143}\special{fp}%
+\special{pa -179 -117}\special{pa -174 -111}\special{fp}\special{pa -154 -87}\special{pa -149 -81}\special{fp}%
+\special{pa -126 -59}\special{pa -120 -53}\special{fp}\special{pa -96 -34}\special{pa -89 -29}\special{fp}%
+\special{pa -61 -14}\special{pa -54 -11}\special{fp}\special{pa -24 -3}\special{pa -16 -2}\special{fp}%
+\special{pa 16 -2}\special{pa 24 -3}\special{fp}\special{pa 54 -11}\special{pa 61 -14}\special{fp}%
+\special{pa 89 -29}\special{pa 96 -34}\special{fp}\special{pa 120 -53}\special{pa 126 -59}\special{fp}%
+\special{pa 149 -81}\special{pa 154 -87}\special{fp}\special{pa 174 -111}\special{pa 179 -117}\special{fp}%
+\special{pa 198 -143}\special{pa 203 -149}\special{fp}\special{pa 220 -176}\special{pa 224 -183}\special{fp}%
+\special{pa 240 -210}\special{pa 244 -217}\special{fp}\special{pa 259 -244}\special{pa 263 -251}\special{fp}%
+\special{pa 277 -280}\special{pa 281 -287}\special{fp}\special{pa 295 -315}\special{pa 298 -322}\special{fp}%
+\special{pa 311 -351}\special{pa 314 -359}\special{fp}\special{pa 327 -388}\special{pa 330 -395}\special{fp}%
+\special{pa 342 -424}\special{pa 345 -432}\special{fp}\special{pa 356 -461}\special{pa 359 -468}\special{fp}%
+\special{pa 370 -498}\special{pa 373 -505}\special{fp}\special{pa 384 -535}\special{pa 386 -543}\special{fp}%
+\special{pa 397 -572}\special{pa 400 -580}\special{fp}\special{pa 410 -610}\special{pa 412 -618}\special{fp}%
+\special{pa 422 -647}\special{pa 425 -655}\special{fp}\special{pa 434 -685}\special{pa 437 -693}\special{fp}%
+\special{pa 446 -723}\special{pa 448 -731}\special{fp}\special{pa 458 -761}\special{pa 460 -768}\special{fp}%
+\special{pa 469 -799}\special{pa 471 -806}\special{fp}\special{pa 480 -837}\special{pa 482 -844}\special{fp}%
+\special{pa 491 -875}\special{pa 493 -883}\special{fp}\special{pa 501 -913}\special{pa 504 -921}\special{fp}%
+\special{pa 512 -951}\special{pa 514 -959}\special{fp}\special{pa 522 -989}\special{pa 524 -997}\special{fp}%
+\special{pa 532 -1028}\special{pa 534 -1035}\special{fp}\special{pa 542 -1066}\special{pa 544 -1074}\special{fp}%
+\special{pa 551 -1104}\special{pa 553 -1112}\special{fp}\special{pa 561 -1143}\special{pa 563 -1151}\special{fp}%
+\special{pa 570 -1181}\special{pa 572 -1189}\special{fp}\special{pa 580 -1220}\special{pa 581 -1228}\special{fp}%
+\special{pa 589 -1258}\special{pa 591 -1266}\special{fp}\special{pa 598 -1297}\special{pa 600 -1305}\special{fp}%
+\special{pa 606 -1335}\special{pa 608 -1343}\special{fp}\special{pa 615 -1374}\special{pa 617 -1382}\special{fp}%
+\special{pn 8}%
+\special{pn 16}%
+\special{pa -477 -826}\special{pa -463 -778}\special{pa -430 -671}\special{pa -397 -571}%
+\special{pa -364 -480}\special{pa -331 -397}\special{pa -298 -321}\special{pa -265 -254}%
+\special{pa -231 -194}\special{pa -198 -143}\special{pa -165 -99}\special{pa -132 -63}%
+\special{pa -99 -36}\special{pa -66 -16}\special{pa -33 -4}\special{pa 0 -0}%
+\special{pa 33 -4}\special{pa 66 -16}\special{pa 99 -36}\special{pa 132 -63}%
+\special{pa 165 -99}\special{pa 198 -143}\special{pa 231 -194}\special{pa 265 -254}%
+\special{pa 298 -321}\special{pa 331 -397}\special{pa 364 -480}\special{pa 397 -571}%
+\special{pa 430 -671}\special{pa 463 -778}\special{pa 477 -826}%
+\special{fp}%
+\special{pn 8}%
+\special{pa -827 -0}\special{pa 827 -0}%
+\special{fp}%
+\special{pa 0 276}\special{pa 0 -1378}%
+\special{fp}%
+\settowidth{\Width}{$x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(3.0714286,0.0000000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{\Depth}%
+\put(0.0000000,5.0714286){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+\settowidth{\Width}{O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(-0.0714286,-0.0714286){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/partcrv1.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/partcrv1.tex
new file mode 100644
index 0000000000..7b6525eda3
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/partcrv1.tex
@@ -0,0 +1,63 @@
+%%% partcrv1.tex 2014-11-9 0:37
+%%% partcrv.sce 2014-11-9 0:30
+{\unitlength=0.8cm%
+\begin{picture}%
+( 4.00000, 3.50000)( -2.00000, -0.50000)%
+\special{pn 8}%
+%
+\special{pn 8}%
+\special{pa -547 -949}\special{pa -544 -941}\special{fp}\special{pa -536 -911}\special{pa -533 -903}\special{fp}%
+\special{pa -524 -873}\special{pa -522 -866}\special{fp}\special{pa -513 -836}\special{pa -511 -828}\special{fp}%
+\special{pa -501 -798}\special{pa -499 -791}\special{fp}\special{pa -489 -761}\special{pa -487 -754}\special{fp}%
+\special{pa -477 -724}\special{pa -475 -716}\special{fp}\special{pa -465 -687}\special{pa -462 -679}\special{fp}%
+\special{pa -452 -650}\special{pa -450 -642}\special{fp}\special{pa -439 -613}\special{pa -436 -605}\special{fp}%
+\special{pa -426 -576}\special{pa -423 -568}\special{fp}\special{pa -412 -539}\special{pa -409 -532}\special{fp}%
+\special{pa -398 -502}\special{pa -395 -495}\special{fp}\special{pa -383 -466}\special{pa -380 -459}\special{fp}%
+\special{pa -368 -430}\special{pa -365 -423}\special{fp}\special{pa -352 -394}\special{pa -349 -387}\special{fp}%
+\special{pa -336 -358}\special{pa -332 -351}\special{fp}\special{pa -319 -323}\special{pa -315 -316}\special{fp}%
+\special{pa -301 -288}\special{pa -297 -281}\special{fp}\special{pa -282 -254}\special{pa -278 -247}\special{fp}%
+\special{pa -263 -220}\special{pa -259 -213}\special{fp}\special{pa -242 -186}\special{pa -238 -180}\special{fp}%
+\special{pa -220 -154}\special{pa -215 -147}\special{fp}\special{pa -196 -123}\special{pa -191 -116}\special{fp}%
+\special{pa -171 -93}\special{pa -165 -87}\special{fp}\special{pa -143 -65}\special{pa -137 -60}\special{fp}%
+\special{pa -113 -41}\special{pa -106 -36}\special{fp}\special{pa -79 -20}\special{pa -72 -17}\special{fp}%
+\special{pa -43 -6}\special{pa -35 -4}\special{fp}\special{pa -4 -1}\special{pa 4 -1}\special{fp}%
+\special{pa 35 -4}\special{pa 43 -6}\special{fp}\special{pa 72 -17}\special{pa 79 -20}\special{fp}%
+\special{pa 106 -36}\special{pa 113 -41}\special{fp}\special{pa 137 -60}\special{pa 143 -65}\special{fp}%
+\special{pa 165 -87}\special{pa 171 -93}\special{fp}\special{pa 191 -116}\special{pa 196 -123}\special{fp}%
+\special{pa 215 -147}\special{pa 220 -154}\special{fp}\special{pa 238 -180}\special{pa 242 -186}\special{fp}%
+\special{pa 259 -213}\special{pa 263 -220}\special{fp}\special{pa 278 -247}\special{pa 282 -254}\special{fp}%
+\special{pa 297 -281}\special{pa 301 -288}\special{fp}\special{pa 315 -316}\special{pa 319 -323}\special{fp}%
+\special{pa 332 -351}\special{pa 336 -358}\special{fp}\special{pa 349 -387}\special{pa 352 -394}\special{fp}%
+\special{pa 365 -423}\special{pa 368 -430}\special{fp}\special{pa 380 -459}\special{pa 383 -466}\special{fp}%
+\special{pa 395 -495}\special{pa 398 -502}\special{fp}\special{pa 409 -532}\special{pa 412 -539}\special{fp}%
+\special{pa 423 -568}\special{pa 426 -576}\special{fp}\special{pa 436 -605}\special{pa 439 -613}\special{fp}%
+\special{pa 450 -642}\special{pa 452 -650}\special{fp}\special{pa 462 -679}\special{pa 465 -687}\special{fp}%
+\special{pa 475 -716}\special{pa 477 -724}\special{fp}\special{pa 487 -754}\special{pa 489 -761}\special{fp}%
+\special{pa 499 -791}\special{pa 501 -798}\special{fp}\special{pa 511 -828}\special{pa 513 -836}\special{fp}%
+\special{pa 522 -866}\special{pa 524 -873}\special{fp}\special{pa 533 -903}\special{pa 536 -911}\special{fp}%
+\special{pa 544 -941}\special{pa 547 -949}\special{fp}\special{pn 8}%
+\special{pa 0 -1}\special{pa 13 -1}\special{pa 39 -5}\special{pa 64 -13}\special{pa 90 -26}%
+\special{pa 116 -43}\special{pa 141 -63}\special{pa 167 -89}\special{pa 193 -118}%
+\special{pa 219 -152}\special{pa 244 -189}\special{pa 270 -231}\special{pa 296 -278}%
+\special{pa 315 -315}%
+\special{fp}%
+\special{pa -630 0}\special{pa 630 0}%
+\special{fp}%
+\special{pa 0 157}\special{pa 0 -945}%
+\special{fp}%
+\settowidth{\Width}{$x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.0500,0.0000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{\Depth}%
+\put(0.0000,3.0500){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+%
+\settowidth{\Width}{O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(-0.0500,-0.0500){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/partcrv2.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/partcrv2.tex
new file mode 100644
index 0000000000..2d4a06cae6
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/partcrv2.tex
@@ -0,0 +1,69 @@
+%%% partcrv2.tex 2014-11-9 0:37
+%%% partcrv.sce 2014-11-9 0:30
+{\unitlength=0.8cm%
+\begin{picture}%
+( 4.00000, 3.50000)( -2.00000, -0.50000)%
+\special{pn 8}%
+%
+\special{pn 8}%
+\special{pa -547 -949}\special{pa -544 -941}\special{fp}\special{pa -536 -911}\special{pa -533 -903}\special{fp}%
+\special{pa -524 -873}\special{pa -522 -866}\special{fp}\special{pa -513 -836}\special{pa -511 -828}\special{fp}%
+\special{pa -501 -798}\special{pa -499 -791}\special{fp}\special{pa -489 -761}\special{pa -487 -754}\special{fp}%
+\special{pa -477 -724}\special{pa -475 -716}\special{fp}\special{pa -465 -687}\special{pa -462 -679}\special{fp}%
+\special{pa -452 -650}\special{pa -450 -642}\special{fp}\special{pa -439 -613}\special{pa -436 -605}\special{fp}%
+\special{pa -426 -576}\special{pa -423 -568}\special{fp}\special{pa -412 -539}\special{pa -409 -532}\special{fp}%
+\special{pa -398 -502}\special{pa -395 -495}\special{fp}\special{pa -383 -466}\special{pa -380 -459}\special{fp}%
+\special{pa -368 -430}\special{pa -365 -423}\special{fp}\special{pa -352 -394}\special{pa -349 -387}\special{fp}%
+\special{pa -336 -358}\special{pa -332 -351}\special{fp}\special{pa -319 -323}\special{pa -315 -316}\special{fp}%
+\special{pa -301 -288}\special{pa -297 -281}\special{fp}\special{pa -282 -254}\special{pa -278 -247}\special{fp}%
+\special{pa -263 -220}\special{pa -259 -213}\special{fp}\special{pa -242 -186}\special{pa -238 -180}\special{fp}%
+\special{pa -220 -154}\special{pa -215 -147}\special{fp}\special{pa -196 -123}\special{pa -191 -116}\special{fp}%
+\special{pa -171 -93}\special{pa -165 -87}\special{fp}\special{pa -143 -65}\special{pa -137 -60}\special{fp}%
+\special{pa -113 -41}\special{pa -106 -36}\special{fp}\special{pa -79 -20}\special{pa -72 -17}\special{fp}%
+\special{pa -43 -6}\special{pa -35 -4}\special{fp}\special{pa -4 -1}\special{pa 4 -1}\special{fp}%
+\special{pa 35 -4}\special{pa 43 -6}\special{fp}\special{pa 72 -17}\special{pa 79 -20}\special{fp}%
+\special{pa 106 -36}\special{pa 113 -41}\special{fp}\special{pa 137 -60}\special{pa 143 -65}\special{fp}%
+\special{pa 165 -87}\special{pa 171 -93}\special{fp}\special{pa 191 -116}\special{pa 196 -123}\special{fp}%
+\special{pa 215 -147}\special{pa 220 -154}\special{fp}\special{pa 238 -180}\special{pa 242 -186}\special{fp}%
+\special{pa 259 -213}\special{pa 263 -220}\special{fp}\special{pa 278 -247}\special{pa 282 -254}\special{fp}%
+\special{pa 297 -281}\special{pa 301 -288}\special{fp}\special{pa 315 -316}\special{pa 319 -323}\special{fp}%
+\special{pa 332 -351}\special{pa 336 -358}\special{fp}\special{pa 349 -387}\special{pa 352 -394}\special{fp}%
+\special{pa 365 -423}\special{pa 368 -430}\special{fp}\special{pa 380 -459}\special{pa 383 -466}\special{fp}%
+\special{pa 395 -495}\special{pa 398 -502}\special{fp}\special{pa 409 -532}\special{pa 412 -539}\special{fp}%
+\special{pa 423 -568}\special{pa 426 -576}\special{fp}\special{pa 436 -605}\special{pa 439 -613}\special{fp}%
+\special{pa 450 -642}\special{pa 452 -650}\special{fp}\special{pa 462 -679}\special{pa 465 -687}\special{fp}%
+\special{pa 475 -716}\special{pa 477 -724}\special{fp}\special{pa 487 -754}\special{pa 489 -761}\special{fp}%
+\special{pa 499 -791}\special{pa 501 -798}\special{fp}\special{pa 511 -828}\special{pa 513 -836}\special{fp}%
+\special{pa 522 -866}\special{pa 524 -873}\special{fp}\special{pa 533 -903}\special{pa 536 -911}\special{fp}%
+\special{pa 544 -941}\special{pa 547 -949}\special{fp}\special{pn 8}%
+\special{pa 315 -315}\special{pa 321 -328}\special{pa 347 -383}\special{pa 373 -441}%
+\special{pa 399 -504}\special{pa 424 -571}\special{pa 450 -643}\special{pa 476 -718}%
+\special{pa 501 -798}\special{pa 527 -882}\special{pa 545 -945}%
+\special{fp}%
+\special{pa -545 -945}\special{pa -527 -882}\special{pa -501 -798}\special{pa -476 -718}%
+\special{pa -450 -643}\special{pa -424 -571}\special{pa -399 -504}\special{pa -373 -441}%
+\special{pa -347 -383}\special{pa -321 -328}\special{pa -296 -278}\special{pa -270 -231}%
+\special{pa -244 -189}\special{pa -219 -152}\special{pa -193 -118}\special{pa -167 -89}%
+\special{pa -141 -63}\special{pa -116 -43}\special{pa -90 -26}\special{pa -64 -13}%
+\special{pa -39 -5}\special{pa -13 -1}\special{pa 0 -1}%
+\special{fp}%
+\special{pa -630 0}\special{pa 630 0}%
+\special{fp}%
+\special{pa 0 157}\special{pa 0 -945}%
+\special{fp}%
+\settowidth{\Width}{$x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.0500,0.0000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{\Depth}%
+\put(0.0000,3.0500){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+%
+\settowidth{\Width}{O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(-0.0500,-0.0500){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/partcrv3.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/partcrv3.tex
new file mode 100644
index 0000000000..a2f5076a54
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/partcrv3.tex
@@ -0,0 +1,134 @@
+%%% partcrv3.tex 2014-11-9 0:37
+%%% partcrv.sce 2014-11-9 0:30
+{\unitlength=0.7cm%
+\begin{picture}%
+( 7.00000, 5.50000)( -3.00000, -0.50000)%
+\special{pn 8}%
+%
+\special{pn 8}%
+\special{pa 1032 -547}\special{pa 1032 -555}\special{fp}\special{pa 1030 -586}\special{pa 1029 -594}\special{fp}%
+\special{pa 1025 -625}\special{pa 1024 -633}\special{fp}\special{pa 1018 -664}\special{pa 1016 -672}\special{fp}%
+\special{pa 1007 -701}\special{pa 1004 -709}\special{fp}\special{pa 993 -738}\special{pa 990 -745}\special{fp}%
+\special{pa 977 -774}\special{pa 973 -781}\special{fp}\special{pa 957 -807}\special{pa 953 -814}\special{fp}%
+\special{pa 935 -840}\special{pa 930 -846}\special{fp}\special{pa 910 -870}\special{pa 905 -876}\special{fp}%
+\special{pa 883 -898}\special{pa 877 -903}\special{fp}\special{pa 854 -924}\special{pa 848 -929}\special{fp}%
+\special{pa 822 -948}\special{pa 816 -952}\special{fp}\special{pa 789 -968}\special{pa 782 -972}\special{fp}%
+\special{pa 754 -987}\special{pa 747 -990}\special{fp}\special{pa 718 -1001}\special{pa 711 -1004}\special{fp}%
+\special{pa 681 -1013}\special{pa 673 -1015}\special{fp}\special{pa 643 -1023}\special{pa 635 -1024}\special{fp}%
+\special{pa 604 -1028}\special{pa 596 -1029}\special{fp}\special{pa 565 -1031}\special{pa 557 -1031}\special{fp}%
+\special{pa 526 -1031}\special{pa 518 -1031}\special{fp}\special{pa 487 -1027}\special{pa 479 -1026}\special{fp}%
+\special{pa 448 -1020}\special{pa 440 -1018}\special{fp}\special{pa 410 -1011}\special{pa 403 -1008}\special{fp}%
+\special{pa 374 -997}\special{pa 366 -994}\special{fp}\special{pa 338 -981}\special{pa 331 -978}\special{fp}%
+\special{pa 303 -963}\special{pa 296 -958}\special{fp}\special{pa 271 -941}\special{pa 264 -936}\special{fp}%
+\special{pa 240 -917}\special{pa 234 -912}\special{fp}\special{pa 211 -890}\special{pa 205 -884}\special{fp}%
+\special{pa 185 -861}\special{pa 180 -855}\special{fp}\special{pa 160 -830}\special{pa 156 -824}\special{fp}%
+\special{pa 139 -798}\special{pa 135 -791}\special{fp}\special{pa 121 -763}\special{pa 117 -756}\special{fp}%
+\special{pa 104 -727}\special{pa 101 -720}\special{fp}\special{pa 92 -690}\special{pa 90 -683}\special{fp}%
+\special{pa 82 -652}\special{pa 80 -644}\special{fp}\special{pa 75 -614}\special{pa 74 -606}\special{fp}%
+\special{pa 72 -575}\special{pa 72 -567}\special{fp}\special{pa 72 -536}\special{pa 72 -528}\special{fp}%
+\special{pa 74 -496}\special{pa 75 -489}\special{fp}\special{pa 80 -458}\special{pa 82 -450}\special{fp}%
+\special{pa 90 -420}\special{pa 92 -412}\special{fp}\special{pa 101 -382}\special{pa 104 -375}\special{fp}%
+\special{pa 117 -347}\special{pa 121 -339}\special{fp}\special{pa 135 -312}\special{pa 139 -305}\special{fp}%
+\special{pa 156 -278}\special{pa 160 -272}\special{fp}\special{pa 180 -247}\special{pa 185 -241}\special{fp}%
+\special{pa 205 -218}\special{pa 211 -212}\special{fp}\special{pa 234 -191}\special{pa 240 -186}\special{fp}%
+\special{pa 264 -167}\special{pa 271 -162}\special{fp}\special{pa 296 -144}\special{pa 303 -140}\special{fp}%
+\special{pa 331 -125}\special{pa 338 -121}\special{fp}\special{pa 366 -108}\special{pa 374 -105}\special{fp}%
+\special{pa 403 -94}\special{pa 410 -92}\special{fp}\special{pa 440 -84}\special{pa 448 -82}\special{fp}%
+\special{pa 479 -77}\special{pa 487 -76}\special{fp}\special{pa 518 -72}\special{pa 526 -71}\special{fp}%
+\special{pa 557 -71}\special{pa 565 -71}\special{fp}\special{pa 596 -73}\special{pa 604 -74}\special{fp}%
+\special{pa 635 -78}\special{pa 643 -79}\special{fp}\special{pa 673 -87}\special{pa 681 -89}\special{fp}%
+\special{pa 711 -98}\special{pa 718 -101}\special{fp}\special{pa 747 -112}\special{pa 754 -116}\special{fp}%
+\special{pa 782 -130}\special{pa 789 -134}\special{fp}\special{pa 816 -150}\special{pa 822 -155}\special{fp}%
+\special{pa 848 -173}\special{pa 854 -178}\special{fp}\special{pa 877 -199}\special{pa 883 -204}\special{fp}%
+\special{pa 905 -226}\special{pa 910 -232}\special{fp}\special{pa 930 -256}\special{pa 935 -263}\special{fp}%
+\special{pa 953 -288}\special{pa 957 -295}\special{fp}\special{pa 973 -322}\special{pa 977 -329}\special{fp}%
+\special{pa 990 -357}\special{pa 993 -364}\special{fp}\special{pa 1004 -394}\special{pa 1007 -401}\special{fp}%
+\special{pa 1016 -431}\special{pa 1018 -439}\special{fp}\special{pa 1024 -469}\special{pa 1025 -477}\special{fp}%
+\special{pa 1029 -508}\special{pa 1030 -516}\special{fp}\special{pa 1032 -547}\special{pa 1032 -555}\special{fp}%
+\special{pn 8}%
+\special{pn 8}%
+\special{pa -617 -1382}\special{pa -615 -1374}\special{fp}\special{pa -608 -1343}\special{pa -606 -1335}\special{fp}%
+\special{pa -599 -1305}\special{pa -598 -1297}\special{fp}\special{pa -591 -1266}\special{pa -589 -1258}\special{fp}%
+\special{pa -581 -1228}\special{pa -580 -1220}\special{fp}\special{pa -572 -1189}\special{pa -570 -1181}\special{fp}%
+\special{pa -563 -1151}\special{pa -561 -1143}\special{fp}\special{pa -554 -1112}\special{pa -552 -1104}\special{fp}%
+\special{pa -544 -1074}\special{pa -542 -1066}\special{fp}\special{pa -534 -1035}\special{pa -532 -1028}\special{fp}%
+\special{pa -524 -997}\special{pa -522 -989}\special{fp}\special{pa -514 -959}\special{pa -512 -951}\special{fp}%
+\special{pa -503 -921}\special{pa -501 -913}\special{fp}\special{pa -493 -883}\special{pa -491 -875}\special{fp}%
+\special{pa -482 -844}\special{pa -480 -837}\special{fp}\special{pa -471 -806}\special{pa -469 -799}\special{fp}%
+\special{pa -460 -769}\special{pa -458 -761}\special{fp}\special{pa -448 -731}\special{pa -446 -723}\special{fp}%
+\special{pa -437 -693}\special{pa -434 -685}\special{fp}\special{pa -425 -655}\special{pa -422 -648}\special{fp}%
+\special{pa -412 -618}\special{pa -410 -610}\special{fp}\special{pa -400 -580}\special{pa -397 -573}\special{fp}%
+\special{pa -386 -543}\special{pa -384 -535}\special{fp}\special{pa -373 -506}\special{pa -370 -498}\special{fp}%
+\special{pa -359 -468}\special{pa -356 -461}\special{fp}\special{pa -344 -432}\special{pa -341 -424}\special{fp}%
+\special{pa -329 -395}\special{pa -326 -388}\special{fp}\special{pa -314 -359}\special{pa -311 -351}\special{fp}%
+\special{pa -298 -323}\special{pa -294 -315}\special{fp}\special{pa -281 -287}\special{pa -277 -280}\special{fp}%
+\special{pa -263 -252}\special{pa -259 -245}\special{fp}\special{pa -244 -217}\special{pa -240 -210}\special{fp}%
+\special{pa -224 -183}\special{pa -219 -176}\special{fp}\special{pa -203 -149}\special{pa -198 -143}\special{fp}%
+\special{pa -179 -118}\special{pa -174 -111}\special{fp}\special{pa -154 -87}\special{pa -149 -81}\special{fp}%
+\special{pa -126 -59}\special{pa -120 -53}\special{fp}\special{pa -95 -34}\special{pa -89 -30}\special{fp}%
+\special{pa -61 -15}\special{pa -54 -12}\special{fp}\special{pa -24 -3}\special{pa -16 -2}\special{fp}%
+\special{pa 16 -2}\special{pa 24 -3}\special{fp}\special{pa 54 -12}\special{pa 61 -15}\special{fp}%
+\special{pa 89 -30}\special{pa 95 -34}\special{fp}\special{pa 120 -53}\special{pa 126 -59}\special{fp}%
+\special{pa 149 -81}\special{pa 154 -87}\special{fp}\special{pa 174 -111}\special{pa 179 -118}\special{fp}%
+\special{pa 198 -143}\special{pa 203 -149}\special{fp}\special{pa 219 -176}\special{pa 224 -183}\special{fp}%
+\special{pa 240 -210}\special{pa 244 -217}\special{fp}\special{pa 259 -245}\special{pa 263 -252}\special{fp}%
+\special{pa 277 -280}\special{pa 281 -287}\special{fp}\special{pa 294 -315}\special{pa 298 -323}\special{fp}%
+\special{pa 311 -351}\special{pa 314 -359}\special{fp}\special{pa 326 -388}\special{pa 329 -395}\special{fp}%
+\special{pa 341 -424}\special{pa 344 -432}\special{fp}\special{pa 356 -461}\special{pa 359 -468}\special{fp}%
+\special{pa 370 -498}\special{pa 373 -506}\special{fp}\special{pa 384 -535}\special{pa 386 -543}\special{fp}%
+\special{pa 397 -573}\special{pa 400 -580}\special{fp}\special{pa 410 -610}\special{pa 412 -618}\special{fp}%
+\special{pa 422 -648}\special{pa 425 -655}\special{fp}\special{pa 434 -685}\special{pa 437 -693}\special{fp}%
+\special{pa 446 -723}\special{pa 448 -731}\special{fp}\special{pa 458 -761}\special{pa 460 -769}\special{fp}%
+\special{pa 469 -799}\special{pa 471 -806}\special{fp}\special{pa 480 -837}\special{pa 482 -844}\special{fp}%
+\special{pa 491 -875}\special{pa 493 -883}\special{fp}\special{pa 501 -913}\special{pa 503 -921}\special{fp}%
+\special{pa 512 -951}\special{pa 514 -959}\special{fp}\special{pa 522 -989}\special{pa 524 -997}\special{fp}%
+\special{pa 532 -1028}\special{pa 534 -1035}\special{fp}\special{pa 542 -1066}\special{pa 544 -1074}\special{fp}%
+\special{pa 552 -1104}\special{pa 554 -1112}\special{fp}\special{pa 561 -1143}\special{pa 563 -1151}\special{fp}%
+\special{pa 570 -1181}\special{pa 572 -1189}\special{fp}\special{pa 580 -1220}\special{pa 581 -1228}\special{fp}%
+\special{pa 589 -1258}\special{pa 591 -1266}\special{fp}\special{pa 598 -1297}\special{pa 599 -1305}\special{fp}%
+\special{pa 606 -1335}\special{pa 608 -1343}\special{fp}\special{pa 615 -1374}\special{pa 617 -1382}\special{fp}%
+\special{pn 8}%
+\special{pa 543 -1042}\special{pa 536 -1046}\special{pa 528 -1046}\special{pa 521 -1042}%
+\special{pa 517 -1035}\special{pa 517 -1027}\special{pa 521 -1020}\special{pa 528 -1015}%
+\special{pa 536 -1015}\special{pa 543 -1020}\special{pa 547 -1027}\special{pa 547 -1035}%
+\special{pa 543 -1042}\special{sh 1}\special{fp}%
+\special{pa 243 -207}\special{pa 236 -211}\special{pa 227 -211}\special{pa 220 -207}%
+\special{pa 216 -200}\special{pa 216 -192}\special{pa 220 -185}\special{pa 227 -180}%
+\special{pa 236 -180}\special{pa 243 -185}\special{pa 247 -192}\special{pa 247 -200}%
+\special{pa 243 -207}\special{sh 1}\special{fp}%
+\settowidth{\Width}{P}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{P}\settodepth{\Depth}{P}\setlength{\Height}{\Depth}%
+\put(1.8800,3.7900){\hspace*{\Width}\raisebox{\Height}{P}}%
+%
+%
+\settowidth{\Width}{Q}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{Q}\settodepth{\Depth}{Q}\setlength{\Height}{-\Height}%
+\put(0.8400,0.6100){\hspace*{\Width}\raisebox{\Height}{Q}}%
+%
+%
+\special{pa 532 -1031}\special{pa 521 -1031}\special{pa 461 -1023}\special{pa 403 -1008}%
+\special{pa 346 -986}\special{pa 294 -957}\special{pa 245 -922}\special{pa 201 -880}%
+\special{pa 162 -834}\special{pa 130 -783}\special{pa 104 -728}\special{pa 86 -671}%
+\special{pa 74 -611}\special{pa 70 -551}\special{pa 74 -491}\special{pa 86 -432}\special{pa 104 -374}%
+\special{pa 130 -320}\special{pa 162 -269}\special{pa 201 -222}\special{pa 230 -194}%
+\special{fp}%
+\special{pa -827 0}\special{pa 1102 0}%
+\special{fp}%
+\special{pa 0 138}\special{pa 0 -1378}%
+\special{fp}%
+\settowidth{\Width}{$x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.0500,0.0000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{\Depth}%
+\put(0.0000,5.0500){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+%
+\settowidth{\Width}{O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(-0.0500,-0.0500){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/partcrv3d1.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/partcrv3d1.tex
new file mode 100644
index 0000000000..e51ad85c0d
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/partcrv3d1.tex
@@ -0,0 +1,80 @@
+%%% /Users/Hannya/Desktop/KeTCindy/fig/partcrv3d1.tex
+%%% Generator=3Dbasic.cdy
+{\unitlength=7mm%
+\begin{picture}%
+(7.95,6.19)(-3.77,-1.85)%
+\special{pn 8}%
+%
+{%
+\color[rgb]{0,0,0}%
+}%
+{%
+\color[rgb]{0,0,0}%
+}%
+\settowidth{\Width}{$x$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-3.5300000,-1.0600000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.0500000,-0.9100000){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+\settowidth{\Width}{$z$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$z$}\settodepth{\Depth}{$z$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(0.0000000,4.1400000){\hspace*{\Width}\raisebox{\Height}{$z$}}%
+%
+\special{pa 901 -270}\special{pa -901 270}%
+\special{fp}%
+\special{pa -1039 -232}\special{pa 1042 233}%
+\special{fp}%
+\special{pa 0 510}\special{pa 0 -1065}%
+\special{fp}%
+\special{pa -360 108}\special{pa -305 112}\special{pa -245 114}\special{pa -182 115}%
+\special{pa -115 113}\special{pa -47 109}\special{pa 23 102}\special{pa 91 94}%
+\special{pa 159 83}\special{pa 224 70}\special{pa 285 55}\special{pa 342 38}%
+\special{pa 393 20}\special{pa 439 -1}\special{pa 477 -22}\special{pa 508 -45}%
+\special{pa 531 -69}\special{pa 545 -93}\special{pa 551 -117}\special{pa 548 -142}%
+\special{pa 537 -166}\special{pa 517 -190}\special{pa 489 -213}\special{pa 453 -235}%
+\special{pa 410 -256}\special{pa 360 -275}\special{pa 305 -293}\special{pa 245 -308}%
+\special{pa 182 -322}\special{pa 115 -334}\special{pa 47 -343}\special{pa -23 -350}%
+\special{pa -91 -355}\special{pa -159 -357}\special{pa -224 -358}\special{pa -285 -356}%
+\special{pa -342 -353}\special{pa -393 -347}\special{pa -439 -341}\special{pa -477 -332}%
+\special{pa -508 -323}\special{pa -531 -313}\special{pa -545 -302}\special{pa -551 -291}%
+\special{pa -548 -280}\special{pa -537 -269}\special{pa -517 -258}\special{pa -489 -248}%
+\special{pa -453 -240}\special{pa -410 -232}\special{pa -360 -227}\special{pa -305 -222}%
+\special{pa -245 -220}\special{pa -182 -220}\special{pa -115 -222}\special{pa -47 -226}%
+\special{pa 23 -232}\special{pa 91 -241}\special{pa 159 -251}\special{pa 224 -264}%
+\special{pa 285 -279}\special{pa 342 -296}\special{pa 393 -315}\special{pa 439 -335}%
+\special{pa 477 -357}\special{pa 508 -379}\special{pa 531 -403}\special{pa 545 -427}%
+\special{pa 551 -452}\special{pa 548 -476}\special{pa 537 -501}\special{pa 517 -525}%
+\special{pa 489 -548}\special{pa 453 -570}\special{pa 410 -590}\special{pa 360 -610}%
+\special{pa 305 -627}\special{pa 245 -643}\special{pa 182 -657}\special{pa 115 -668}%
+\special{pa 47 -677}\special{pa -23 -684}\special{pa -91 -689}\special{pa -159 -692}%
+\special{pa -224 -692}\special{pa -285 -691}\special{pa -342 -687}\special{pa -393 -682}%
+\special{pa -439 -675}\special{pa -477 -667}\special{pa -508 -658}\special{pa -531 -647}%
+\special{pa -545 -636}\special{pa -551 -625}\special{pa -548 -614}\special{pa -537 -603}%
+\special{pa -517 -593}\special{pa -489 -583}\special{pa -453 -574}\special{pa -410 -567}%
+\special{pa -360 -561}%
+\special{fp}%
+\special{pn 24}%
+\special{pa -311 -355}\special{pa -342 -353}\special{pa -393 -347}\special{pa -439 -341}%
+\special{pa -477 -332}\special{pa -508 -323}\special{pa -531 -313}\special{pa -545 -302}%
+\special{pa -551 -291}\special{pa -548 -280}\special{pa -537 -269}\special{pa -517 -258}%
+\special{pa -489 -248}\special{pa -453 -240}\special{pa -410 -232}\special{pa -360 -227}%
+\special{pa -305 -222}\special{pa -245 -220}\special{pa -182 -220}\special{pa -115 -222}%
+\special{pa -47 -226}\special{pa 23 -232}\special{pa 91 -241}\special{pa 159 -251}%
+\special{pa 224 -264}\special{pa 285 -279}\special{pa 342 -296}\special{pa 393 -315}%
+\special{pa 439 -335}\special{pa 477 -357}\special{pa 508 -379}\special{pa 531 -403}%
+\special{pa 545 -427}\special{pa 551 -452}\special{pa 548 -476}\special{pa 537 -501}%
+\special{pa 517 -525}\special{pa 489 -548}\special{pa 453 -570}\special{pa 421 -585}%
+\special{fp}%
+\special{pn 8}%
+\settowidth{\Width}{C}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{C}\settodepth{\Depth}{C}\setlength{\Height}{\Depth}%
+\put(-1.1300000,1.5042857){\hspace*{\Width}\raisebox{\Height}{C}}%
+%
+\settowidth{\Width}{D}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{D}\settodepth{\Depth}{D}\setlength{\Height}{\Depth}%
+\put(1.5300000,2.3342857){\hspace*{\Width}\raisebox{\Height}{D}}%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/partcrv3d2.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/partcrv3d2.tex
new file mode 100644
index 0000000000..9d5ebe7da1
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/partcrv3d2.tex
@@ -0,0 +1,94 @@
+%%% /Users/Hannya/Desktop/KeTCindy/fig/partcrv3d2.tex
+%%% Generator=3Dbasic.cdy
+{\unitlength=7mm%
+\begin{picture}%
+(7.95,6.19)(-3.77,-1.85)%
+\special{pn 8}%
+%
+{%
+\color[rgb]{0,0,0}%
+}%
+{%
+\color[rgb]{0,0,0}%
+}%
+\settowidth{\Width}{$x$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-3.5300000,-1.0600000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.0500000,-0.9100000){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+\settowidth{\Width}{$z$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$z$}\settodepth{\Depth}{$z$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(0.0000000,4.1400000){\hspace*{\Width}\raisebox{\Height}{$z$}}%
+%
+\special{pa 901 -270}\special{pa -901 270}%
+\special{fp}%
+\special{pa -1039 -232}\special{pa 1042 233}%
+\special{fp}%
+\special{pa 0 510}\special{pa 0 -1065}%
+\special{fp}%
+\special{pn 8}%
+\special{pa -364 108}\special{pa -356 108}\special{fp}\special{pa -325 105}\special{pa -317 104}\special{fp}%
+\special{pa -286 102}\special{pa -278 101}\special{fp}\special{pa -247 99}\special{pa -239 98}\special{fp}%
+\special{pa -208 95}\special{pa -200 95}\special{fp}\special{pa -169 92}\special{pa -161 92}\special{fp}%
+\special{pa -130 89}\special{pa -122 88}\special{fp}\special{pa -91 86}\special{pa -83 85}\special{fp}%
+\special{pa -52 83}\special{pa -44 82}\special{fp}\special{pa -13 80}\special{pa -5 79}\special{fp}%
+\special{pa 26 76}\special{pa 34 76}\special{fp}\special{pa 65 73}\special{pa 73 72}\special{fp}%
+\special{pa 104 70}\special{pa 112 69}\special{fp}\special{pa 144 67}\special{pa 152 66}\special{fp}%
+\special{pa 183 64}\special{pa 191 63}\special{fp}\special{pa 222 60}\special{pa 230 60}\special{fp}%
+\special{pa 261 58}\special{pa 269 56}\special{fp}\special{pa 296 45}\special{pa 303 41}\special{fp}%
+\special{pa 326 20}\special{pa 332 14}\special{fp}\special{pa 355 -6}\special{pa 361 -12}\special{fp}%
+\special{pa 385 -32}\special{pa 391 -38}\special{fp}\special{pa 414 -58}\special{pa 420 -64}\special{fp}%
+\special{pa 443 -84}\special{pa 449 -89}\special{fp}\special{pa 473 -110}\special{pa 479 -115}\special{fp}%
+\special{pa 502 -136}\special{pa 508 -141}\special{fp}\special{pa 535 -161}\special{pa 534 -168}\special{fp}%
+\special{pa 506 -177}\special{pa 499 -180}\special{fp}\special{pa 469 -191}\special{pa 462 -193}\special{fp}%
+\special{pa 432 -204}\special{pa 425 -207}\special{fp}\special{pa 395 -217}\special{pa 388 -220}\special{fp}%
+\special{pa 359 -230}\special{pa 351 -233}\special{fp}\special{pa 322 -244}\special{pa 314 -246}\special{fp}%
+\special{pa 285 -257}\special{pa 277 -260}\special{fp}\special{pa 248 -270}\special{pa 240 -273}\special{fp}%
+\special{pa 211 -284}\special{pa 203 -286}\special{fp}\special{pa 174 -297}\special{pa 167 -300}\special{fp}%
+\special{pa 137 -310}\special{pa 130 -313}\special{fp}\special{pa 100 -323}\special{pa 93 -326}\special{fp}%
+\special{pa 64 -337}\special{pa 56 -339}\special{fp}\special{pa 25 -342}\special{pa 17 -342}\special{fp}%
+\special{pa -14 -341}\special{pa -22 -340}\special{fp}\special{pa -53 -339}\special{pa -61 -339}\special{fp}%
+\special{pa -92 -338}\special{pa -100 -338}\special{fp}\special{pa -131 -336}\special{pa -139 -336}\special{fp}%
+\special{pa -171 -335}\special{pa -179 -335}\special{fp}\special{pa -210 -334}\special{pa -218 -333}\special{fp}%
+\special{pa -249 -332}\special{pa -257 -332}\special{fp}\special{pa -288 -331}\special{pa -296 -331}\special{fp}%
+\special{pa -327 -329}\special{pa -335 -329}\special{fp}\special{pa -367 -328}\special{pa -375 -328}\special{fp}%
+\special{pa -406 -327}\special{pa -414 -326}\special{fp}\special{pa -445 -325}\special{pa -453 -325}\special{fp}%
+\special{pa -485 -326}\special{pa -491 -321}\special{fp}\special{pa -493 -316}\special{pa -490 -309}\special{fp}%
+\special{pa -462 -293}\special{pa -456 -289}\special{fp}\special{pa -429 -272}\special{pa -423 -267}\special{fp}%
+\special{pa -397 -250}\special{pa -390 -246}\special{fp}\special{pa -364 -228}\special{pa -357 -226}\special{fp}%
+\special{pa -325 -229}\special{pa -317 -230}\special{fp}\special{pa -286 -233}\special{pa -278 -233}\special{fp}%
+\special{pa -247 -236}\special{pa -239 -237}\special{fp}\special{pa -208 -239}\special{pa -200 -240}\special{fp}%
+\special{pa -169 -242}\special{pa -161 -243}\special{fp}\special{pa -130 -245}\special{pa -122 -246}\special{fp}%
+\special{pa -91 -249}\special{pa -83 -249}\special{fp}\special{pa -52 -252}\special{pa -44 -252}\special{fp}%
+\special{pa -13 -255}\special{pa -5 -256}\special{fp}\special{pa 26 -258}\special{pa 34 -259}\special{fp}%
+\special{pa 65 -261}\special{pa 73 -262}\special{fp}\special{pa 104 -265}\special{pa 112 -265}\special{fp}%
+\special{pa 144 -268}\special{pa 152 -268}\special{fp}\special{pa 183 -271}\special{pa 191 -272}\special{fp}%
+\special{pa 222 -274}\special{pa 230 -275}\special{fp}\special{pa 261 -277}\special{pa 269 -279}\special{fp}%
+\special{pa 296 -290}\special{pa 303 -294}\special{fp}\special{pa 326 -315}\special{pa 332 -320}\special{fp}%
+\special{pa 355 -341}\special{pa 361 -346}\special{fp}\special{pa 385 -367}\special{pa 391 -372}\special{fp}%
+\special{pa 414 -393}\special{pa 420 -398}\special{fp}\special{pa 443 -419}\special{pa 449 -424}\special{fp}%
+\special{pa 473 -445}\special{pa 479 -450}\special{fp}\special{pa 502 -470}\special{pa 508 -476}\special{fp}%
+\special{pa 535 -495}\special{pa 534 -503}\special{fp}\special{pa 506 -512}\special{pa 499 -515}\special{fp}%
+\special{pa 469 -525}\special{pa 462 -528}\special{fp}\special{pa 432 -538}\special{pa 425 -541}\special{fp}%
+\special{pa 395 -552}\special{pa 388 -554}\special{fp}\special{pa 359 -565}\special{pa 351 -568}\special{fp}%
+\special{pa 322 -578}\special{pa 314 -581}\special{fp}\special{pa 285 -592}\special{pa 277 -594}\special{fp}%
+\special{pa 248 -605}\special{pa 240 -608}\special{fp}\special{pa 211 -618}\special{pa 203 -621}\special{fp}%
+\special{pa 174 -631}\special{pa 167 -634}\special{fp}\special{pa 137 -645}\special{pa 130 -647}\special{fp}%
+\special{pa 100 -658}\special{pa 93 -661}\special{fp}\special{pa 64 -672}\special{pa 56 -674}\special{fp}%
+\special{pa 25 -676}\special{pa 17 -677}\special{fp}\special{pa -14 -675}\special{pa -22 -675}\special{fp}%
+\special{pa -53 -674}\special{pa -61 -674}\special{fp}\special{pa -92 -672}\special{pa -100 -672}\special{fp}%
+\special{pa -131 -671}\special{pa -139 -671}\special{fp}\special{pa -171 -670}\special{pa -179 -669}\special{fp}%
+\special{pa -210 -668}\special{pa -218 -668}\special{fp}\special{pa -249 -667}\special{pa -257 -667}\special{fp}%
+\special{pa -288 -665}\special{pa -296 -665}\special{fp}\special{pa -327 -664}\special{pa -335 -664}\special{fp}%
+\special{pa -367 -663}\special{pa -375 -662}\special{fp}\special{pa -406 -661}\special{pa -414 -661}\special{fp}%
+\special{pa -445 -660}\special{pa -453 -659}\special{fp}\special{pa -485 -661}\special{pa -491 -656}\special{fp}%
+\special{pa -493 -651}\special{pa -490 -643}\special{fp}\special{pa -462 -628}\special{pa -456 -623}\special{fp}%
+\special{pa -429 -606}\special{pa -423 -602}\special{fp}\special{pa -397 -585}\special{pa -390 -580}\special{fp}%
+\special{pa -364 -563}\special{pa -357 -559}\special{fp}\special{pn 8}%
+\special{pa 390 -219}\special{pa 47 -343}\special{pa -508 -323}\special{pa -360 -227}%
+\special{pa 285 -279}\special{pa 537 -501}\special{pa 292 -589}%
+\special{fp}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/partcrv4.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/partcrv4.tex
new file mode 100644
index 0000000000..7acdc9dc11
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/partcrv4.tex
@@ -0,0 +1,137 @@
+%%% partcrv4.tex 2014-11-9 0:37
+%%% partcrv.sce 2014-11-9 0:30
+{\unitlength=0.7cm%
+\begin{picture}%
+( 7.00000, 5.50000)( -3.00000, -0.50000)%
+\special{pn 8}%
+%
+\special{pn 8}%
+\special{pa 1032 -547}\special{pa 1032 -555}\special{fp}\special{pa 1030 -586}\special{pa 1029 -594}\special{fp}%
+\special{pa 1025 -625}\special{pa 1024 -633}\special{fp}\special{pa 1018 -664}\special{pa 1016 -672}\special{fp}%
+\special{pa 1007 -701}\special{pa 1004 -709}\special{fp}\special{pa 993 -738}\special{pa 990 -745}\special{fp}%
+\special{pa 977 -774}\special{pa 973 -781}\special{fp}\special{pa 957 -807}\special{pa 953 -814}\special{fp}%
+\special{pa 935 -840}\special{pa 930 -846}\special{fp}\special{pa 910 -870}\special{pa 905 -876}\special{fp}%
+\special{pa 883 -898}\special{pa 877 -903}\special{fp}\special{pa 854 -924}\special{pa 848 -929}\special{fp}%
+\special{pa 822 -948}\special{pa 816 -952}\special{fp}\special{pa 789 -968}\special{pa 782 -972}\special{fp}%
+\special{pa 754 -987}\special{pa 747 -990}\special{fp}\special{pa 718 -1001}\special{pa 711 -1004}\special{fp}%
+\special{pa 681 -1013}\special{pa 673 -1015}\special{fp}\special{pa 643 -1023}\special{pa 635 -1024}\special{fp}%
+\special{pa 604 -1028}\special{pa 596 -1029}\special{fp}\special{pa 565 -1031}\special{pa 557 -1031}\special{fp}%
+\special{pa 526 -1031}\special{pa 518 -1031}\special{fp}\special{pa 487 -1027}\special{pa 479 -1026}\special{fp}%
+\special{pa 448 -1020}\special{pa 440 -1018}\special{fp}\special{pa 410 -1011}\special{pa 403 -1008}\special{fp}%
+\special{pa 374 -997}\special{pa 366 -994}\special{fp}\special{pa 338 -981}\special{pa 331 -978}\special{fp}%
+\special{pa 303 -963}\special{pa 296 -958}\special{fp}\special{pa 271 -941}\special{pa 264 -936}\special{fp}%
+\special{pa 240 -917}\special{pa 234 -912}\special{fp}\special{pa 211 -890}\special{pa 205 -884}\special{fp}%
+\special{pa 185 -861}\special{pa 180 -855}\special{fp}\special{pa 160 -830}\special{pa 156 -824}\special{fp}%
+\special{pa 139 -798}\special{pa 135 -791}\special{fp}\special{pa 121 -763}\special{pa 117 -756}\special{fp}%
+\special{pa 104 -727}\special{pa 101 -720}\special{fp}\special{pa 92 -690}\special{pa 90 -683}\special{fp}%
+\special{pa 82 -652}\special{pa 80 -644}\special{fp}\special{pa 75 -614}\special{pa 74 -606}\special{fp}%
+\special{pa 72 -575}\special{pa 72 -567}\special{fp}\special{pa 72 -536}\special{pa 72 -528}\special{fp}%
+\special{pa 74 -496}\special{pa 75 -489}\special{fp}\special{pa 80 -458}\special{pa 82 -450}\special{fp}%
+\special{pa 90 -420}\special{pa 92 -412}\special{fp}\special{pa 101 -382}\special{pa 104 -375}\special{fp}%
+\special{pa 117 -347}\special{pa 121 -339}\special{fp}\special{pa 135 -312}\special{pa 139 -305}\special{fp}%
+\special{pa 156 -278}\special{pa 160 -272}\special{fp}\special{pa 180 -247}\special{pa 185 -241}\special{fp}%
+\special{pa 205 -218}\special{pa 211 -212}\special{fp}\special{pa 234 -191}\special{pa 240 -186}\special{fp}%
+\special{pa 264 -167}\special{pa 271 -162}\special{fp}\special{pa 296 -144}\special{pa 303 -140}\special{fp}%
+\special{pa 331 -125}\special{pa 338 -121}\special{fp}\special{pa 366 -108}\special{pa 374 -105}\special{fp}%
+\special{pa 403 -94}\special{pa 410 -92}\special{fp}\special{pa 440 -84}\special{pa 448 -82}\special{fp}%
+\special{pa 479 -77}\special{pa 487 -76}\special{fp}\special{pa 518 -72}\special{pa 526 -71}\special{fp}%
+\special{pa 557 -71}\special{pa 565 -71}\special{fp}\special{pa 596 -73}\special{pa 604 -74}\special{fp}%
+\special{pa 635 -78}\special{pa 643 -79}\special{fp}\special{pa 673 -87}\special{pa 681 -89}\special{fp}%
+\special{pa 711 -98}\special{pa 718 -101}\special{fp}\special{pa 747 -112}\special{pa 754 -116}\special{fp}%
+\special{pa 782 -130}\special{pa 789 -134}\special{fp}\special{pa 816 -150}\special{pa 822 -155}\special{fp}%
+\special{pa 848 -173}\special{pa 854 -178}\special{fp}\special{pa 877 -199}\special{pa 883 -204}\special{fp}%
+\special{pa 905 -226}\special{pa 910 -232}\special{fp}\special{pa 930 -256}\special{pa 935 -263}\special{fp}%
+\special{pa 953 -288}\special{pa 957 -295}\special{fp}\special{pa 973 -322}\special{pa 977 -329}\special{fp}%
+\special{pa 990 -357}\special{pa 993 -364}\special{fp}\special{pa 1004 -394}\special{pa 1007 -401}\special{fp}%
+\special{pa 1016 -431}\special{pa 1018 -439}\special{fp}\special{pa 1024 -469}\special{pa 1025 -477}\special{fp}%
+\special{pa 1029 -508}\special{pa 1030 -516}\special{fp}\special{pa 1032 -547}\special{pa 1032 -555}\special{fp}%
+\special{pn 8}%
+\special{pn 8}%
+\special{pa -617 -1382}\special{pa -615 -1374}\special{fp}\special{pa -608 -1343}\special{pa -606 -1335}\special{fp}%
+\special{pa -599 -1305}\special{pa -598 -1297}\special{fp}\special{pa -591 -1266}\special{pa -589 -1258}\special{fp}%
+\special{pa -581 -1228}\special{pa -580 -1220}\special{fp}\special{pa -572 -1189}\special{pa -570 -1181}\special{fp}%
+\special{pa -563 -1151}\special{pa -561 -1143}\special{fp}\special{pa -554 -1112}\special{pa -552 -1104}\special{fp}%
+\special{pa -544 -1074}\special{pa -542 -1066}\special{fp}\special{pa -534 -1035}\special{pa -532 -1028}\special{fp}%
+\special{pa -524 -997}\special{pa -522 -989}\special{fp}\special{pa -514 -959}\special{pa -512 -951}\special{fp}%
+\special{pa -503 -921}\special{pa -501 -913}\special{fp}\special{pa -493 -883}\special{pa -491 -875}\special{fp}%
+\special{pa -482 -844}\special{pa -480 -837}\special{fp}\special{pa -471 -806}\special{pa -469 -799}\special{fp}%
+\special{pa -460 -769}\special{pa -458 -761}\special{fp}\special{pa -448 -731}\special{pa -446 -723}\special{fp}%
+\special{pa -437 -693}\special{pa -434 -685}\special{fp}\special{pa -425 -655}\special{pa -422 -648}\special{fp}%
+\special{pa -412 -618}\special{pa -410 -610}\special{fp}\special{pa -400 -580}\special{pa -397 -573}\special{fp}%
+\special{pa -386 -543}\special{pa -384 -535}\special{fp}\special{pa -373 -506}\special{pa -370 -498}\special{fp}%
+\special{pa -359 -468}\special{pa -356 -461}\special{fp}\special{pa -344 -432}\special{pa -341 -424}\special{fp}%
+\special{pa -329 -395}\special{pa -326 -388}\special{fp}\special{pa -314 -359}\special{pa -311 -351}\special{fp}%
+\special{pa -298 -323}\special{pa -294 -315}\special{fp}\special{pa -281 -287}\special{pa -277 -280}\special{fp}%
+\special{pa -263 -252}\special{pa -259 -245}\special{fp}\special{pa -244 -217}\special{pa -240 -210}\special{fp}%
+\special{pa -224 -183}\special{pa -219 -176}\special{fp}\special{pa -203 -149}\special{pa -198 -143}\special{fp}%
+\special{pa -179 -118}\special{pa -174 -111}\special{fp}\special{pa -154 -87}\special{pa -149 -81}\special{fp}%
+\special{pa -126 -59}\special{pa -120 -53}\special{fp}\special{pa -95 -34}\special{pa -89 -30}\special{fp}%
+\special{pa -61 -15}\special{pa -54 -12}\special{fp}\special{pa -24 -3}\special{pa -16 -2}\special{fp}%
+\special{pa 16 -2}\special{pa 24 -3}\special{fp}\special{pa 54 -12}\special{pa 61 -15}\special{fp}%
+\special{pa 89 -30}\special{pa 95 -34}\special{fp}\special{pa 120 -53}\special{pa 126 -59}\special{fp}%
+\special{pa 149 -81}\special{pa 154 -87}\special{fp}\special{pa 174 -111}\special{pa 179 -118}\special{fp}%
+\special{pa 198 -143}\special{pa 203 -149}\special{fp}\special{pa 219 -176}\special{pa 224 -183}\special{fp}%
+\special{pa 240 -210}\special{pa 244 -217}\special{fp}\special{pa 259 -245}\special{pa 263 -252}\special{fp}%
+\special{pa 277 -280}\special{pa 281 -287}\special{fp}\special{pa 294 -315}\special{pa 298 -323}\special{fp}%
+\special{pa 311 -351}\special{pa 314 -359}\special{fp}\special{pa 326 -388}\special{pa 329 -395}\special{fp}%
+\special{pa 341 -424}\special{pa 344 -432}\special{fp}\special{pa 356 -461}\special{pa 359 -468}\special{fp}%
+\special{pa 370 -498}\special{pa 373 -506}\special{fp}\special{pa 384 -535}\special{pa 386 -543}\special{fp}%
+\special{pa 397 -573}\special{pa 400 -580}\special{fp}\special{pa 410 -610}\special{pa 412 -618}\special{fp}%
+\special{pa 422 -648}\special{pa 425 -655}\special{fp}\special{pa 434 -685}\special{pa 437 -693}\special{fp}%
+\special{pa 446 -723}\special{pa 448 -731}\special{fp}\special{pa 458 -761}\special{pa 460 -769}\special{fp}%
+\special{pa 469 -799}\special{pa 471 -806}\special{fp}\special{pa 480 -837}\special{pa 482 -844}\special{fp}%
+\special{pa 491 -875}\special{pa 493 -883}\special{fp}\special{pa 501 -913}\special{pa 503 -921}\special{fp}%
+\special{pa 512 -951}\special{pa 514 -959}\special{fp}\special{pa 522 -989}\special{pa 524 -997}\special{fp}%
+\special{pa 532 -1028}\special{pa 534 -1035}\special{fp}\special{pa 542 -1066}\special{pa 544 -1074}\special{fp}%
+\special{pa 552 -1104}\special{pa 554 -1112}\special{fp}\special{pa 561 -1143}\special{pa 563 -1151}\special{fp}%
+\special{pa 570 -1181}\special{pa 572 -1189}\special{fp}\special{pa 580 -1220}\special{pa 581 -1228}\special{fp}%
+\special{pa 589 -1258}\special{pa 591 -1266}\special{fp}\special{pa 598 -1297}\special{pa 599 -1305}\special{fp}%
+\special{pa 606 -1335}\special{pa 608 -1343}\special{fp}\special{pa 615 -1374}\special{pa 617 -1382}\special{fp}%
+\special{pn 8}%
+\special{pa 543 -1042}\special{pa 536 -1046}\special{pa 528 -1046}\special{pa 521 -1042}%
+\special{pa 517 -1035}\special{pa 517 -1027}\special{pa 521 -1020}\special{pa 528 -1015}%
+\special{pa 536 -1015}\special{pa 543 -1020}\special{pa 547 -1027}\special{pa 547 -1035}%
+\special{pa 543 -1042}\special{sh 1}\special{fp}%
+\special{pa 243 -207}\special{pa 236 -211}\special{pa 227 -211}\special{pa 220 -207}%
+\special{pa 216 -200}\special{pa 216 -192}\special{pa 220 -185}\special{pa 227 -180}%
+\special{pa 236 -180}\special{pa 243 -185}\special{pa 247 -192}\special{pa 247 -200}%
+\special{pa 243 -207}\special{sh 1}\special{fp}%
+\settowidth{\Width}{P}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{P}\settodepth{\Depth}{P}\setlength{\Height}{\Depth}%
+\put(1.8800,3.7900){\hspace*{\Width}\raisebox{\Height}{P}}%
+%
+%
+\settowidth{\Width}{Q}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{Q}\settodepth{\Depth}{Q}\setlength{\Height}{-\Height}%
+\put(0.8400,0.6100){\hspace*{\Width}\raisebox{\Height}{Q}}%
+%
+%
+\special{pa 230 -194}\special{pa 245 -181}\special{pa 294 -145}\special{pa 346 -116}%
+\special{pa 403 -94}\special{pa 461 -79}\special{pa 521 -71}\special{pa 581 -71}\special{pa 641 -79}%
+\special{pa 700 -94}\special{pa 756 -116}\special{pa 809 -145}\special{pa 858 -181}%
+\special{pa 902 -222}\special{pa 940 -269}\special{pa 972 -320}\special{pa 998 -374}%
+\special{pa 1017 -432}\special{pa 1028 -491}\special{pa 1032 -551}\special{pa 1028 -611}%
+\special{pa 1017 -671}\special{pa 998 -728}\special{pa 972 -783}\special{pa 940 -834}%
+\special{pa 902 -880}\special{pa 858 -922}\special{pa 809 -957}\special{pa 756 -986}%
+\special{pa 700 -1008}\special{pa 641 -1023}\special{pa 581 -1031}\special{pa 532 -1031}%
+\special{fp}%
+\special{pa -827 0}\special{pa 1102 0}%
+\special{fp}%
+\special{pa 0 138}\special{pa 0 -1378}%
+\special{fp}%
+\settowidth{\Width}{$x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.0500,0.0000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{\Depth}%
+\put(0.0000,5.0500){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+%
+\settowidth{\Width}{O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(-0.0500,-0.0500){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/pdexample.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/pdexample.tex
new file mode 100644
index 0000000000..efd159f818
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/pdexample.tex
@@ -0,0 +1,49 @@
+%%% /Users/Hannya/Desktop/KeTCindy/fig/pdexample.tex
+%%% Generator=template1basic.cdy
+{\unitlength=8mm%
+\begin{picture}%
+(12.06,4.89)(-6.03,-2.53)%
+\special{pn 8}%
+%
+{%
+\color[rgb]{0,0,0}%
+\special{pa -315 -0}\special{pa -320 -79}\special{pa -335 -157}\special{pa -359 -232}%
+\special{pa -393 -303}\special{pa -435 -370}\special{pa -486 -431}\special{pa -543 -485}%
+\special{pa -607 -532}\special{pa -677 -570}\special{pa -750 -599}\special{pa -827 -619}%
+\special{pa -905 -629}\special{pa -984 -629}\special{pa -1063 -619}\special{pa -1140 -599}%
+\special{pa -1213 -570}\special{pa -1282 -532}\special{pa -1346 -485}\special{pa -1404 -431}%
+\special{pa -1454 -370}\special{pa -1497 -303}\special{pa -1531 -232}\special{pa -1555 -157}%
+\special{pa -1570 -79}\special{pa -1575 0}\special{pa -1570 79}\special{pa -1555 157}%
+\special{pa -1531 232}\special{pa -1497 303}\special{pa -1454 370}\special{pa -1404 431}%
+\special{pa -1346 485}\special{pa -1282 532}\special{pa -1213 570}\special{pa -1140 599}%
+\special{pa -1063 619}\special{pa -984 629}\special{pa -905 629}\special{pa -827 619}%
+\special{pa -750 599}\special{pa -677 570}\special{pa -607 532}\special{pa -543 485}%
+\special{pa -486 431}\special{pa -435 370}\special{pa -393 303}\special{pa -359 232}%
+\special{pa -335 157}\special{pa -320 79}\special{pa -315 0}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 1575 -0}\special{pa 1490 -315}\special{pa 1260 -546}\special{pa 945 -630}%
+\special{pa 630 -546}\special{pa 399 -315}\special{pa 315 -0}\special{pa 399 315}%
+\special{pa 630 546}\special{pa 945 630}\special{pa 1260 546}\special{pa 1490 315}%
+\special{pa 1575 0}%
+\special{fp}%
+}%
+\special{pa -1899 -0}\special{pa 1899 -0}%
+\special{fp}%
+\special{pa 0 797}\special{pa 0 -743}%
+\special{fp}%
+\settowidth{\Width}{$x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(6.0925000,0.0000000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{\Depth}%
+\put(0.0000000,2.4225000){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+\settowidth{\Width}{O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(-0.0625000,-0.0625000){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/pdtoconsole.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/pdtoconsole.pdf
new file mode 100644
index 0000000000..eadd1dbba6
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/pdtoconsole.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/periodfun.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/periodfun.tex
new file mode 100644
index 0000000000..45ef0c40fa
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/periodfun.tex
@@ -0,0 +1,289 @@
+%%% /Users/Hannya/Desktop/fig/periodfun.tex
+%%% Generator=hachtest.cdy
+{\unitlength=8mm%
+\begin{picture}%
+(10,3)(-5,-1)%
+\special{pn 8}%
+%
+{%
+\color[rgb]{0,0,0}%
+\special{pn 16}%
+\special{pa -315 -0}\special{pa 0 -0}%
+\special{fp}%
+\special{pn 8}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pn 16}%
+\special{pa 0 -315}\special{pa 315 -315}%
+\special{fp}%
+\special{pn 8}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pn 16}%
+\special{pa -630 -315}\special{pa -315 -315}%
+\special{fp}%
+\special{pn 8}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pn 16}%
+\special{pa -945 -0}\special{pa -630 -0}%
+\special{fp}%
+\special{pn 8}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pn 16}%
+\special{pa -1260 -315}\special{pa -945 -315}%
+\special{fp}%
+\special{pn 8}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pn 16}%
+\special{pa -1575 -0}\special{pa -1260 -0}%
+\special{fp}%
+\special{pn 8}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pn 16}%
+\special{pa 315 -0}\special{pa 630 -0}%
+\special{fp}%
+\special{pn 8}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pn 16}%
+\special{pa 630 -315}\special{pa 945 -315}%
+\special{fp}%
+\special{pn 8}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pn 16}%
+\special{pa 945 -0}\special{pa 1260 -0}%
+\special{fp}%
+\special{pn 8}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pn 16}%
+\special{pa 1260 -315}\special{pa 1575 -315}%
+\special{fp}%
+\special{pn 8}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa -1260 0}\special{pa -1260 -35}\special{fp}\special{pa -1260 -70}\special{pa -1260 -105}\special{fp}%
+\special{pa -1260 -140}\special{pa -1260 -175}\special{fp}\special{pa -1260 -210}\special{pa -1260 -245}\special{fp}%
+\special{pa -1260 -280}\special{pa -1260 -315}\special{fp}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa -945 -315}\special{pa -945 -280}\special{fp}\special{pa -945 -245}\special{pa -945 -210}\special{fp}%
+\special{pa -945 -175}\special{pa -945 -140}\special{fp}\special{pa -945 -105}\special{pa -945 -70}\special{fp}%
+\special{pa -945 -35}\special{pa -945 0}\special{fp}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa -630 0}\special{pa -630 -35}\special{fp}\special{pa -630 -70}\special{pa -630 -105}\special{fp}%
+\special{pa -630 -140}\special{pa -630 -175}\special{fp}\special{pa -630 -210}\special{pa -630 -245}\special{fp}%
+\special{pa -630 -280}\special{pa -630 -315}\special{fp}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa -315 -315}\special{pa -315 -280}\special{fp}\special{pa -315 -245}\special{pa -315 -210}\special{fp}%
+\special{pa -315 -175}\special{pa -315 -140}\special{fp}\special{pa -315 -105}\special{pa -315 -70}\special{fp}%
+\special{pa -315 -35}\special{pa -315 0}\special{fp}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 0}\special{pa 0 -35}\special{fp}\special{pa 0 -70}\special{pa 0 -105}\special{fp}%
+\special{pa 0 -140}\special{pa 0 -175}\special{fp}\special{pa 0 -210}\special{pa 0 -245}\special{fp}%
+\special{pa 0 -280}\special{pa 0 -315}\special{fp}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 315 -315}\special{pa 315 -280}\special{fp}\special{pa 315 -245}\special{pa 315 -210}\special{fp}%
+\special{pa 315 -175}\special{pa 315 -140}\special{fp}\special{pa 315 -105}\special{pa 315 -70}\special{fp}%
+\special{pa 315 -35}\special{pa 315 0}\special{fp}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 630 0}\special{pa 630 -35}\special{fp}\special{pa 630 -70}\special{pa 630 -105}\special{fp}%
+\special{pa 630 -140}\special{pa 630 -175}\special{fp}\special{pa 630 -210}\special{pa 630 -245}\special{fp}%
+\special{pa 630 -280}\special{pa 630 -315}\special{fp}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 945 -315}\special{pa 945 -280}\special{fp}\special{pa 945 -245}\special{pa 945 -210}\special{fp}%
+\special{pa 945 -175}\special{pa 945 -140}\special{fp}\special{pa 945 -105}\special{pa 945 -70}\special{fp}%
+\special{pa 945 -35}\special{pa 945 0}\special{fp}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 1260 0}\special{pa 1260 -35}\special{fp}\special{pa 1260 -70}\special{pa 1260 -105}\special{fp}%
+\special{pa 1260 -140}\special{pa 1260 -175}\special{fp}\special{pa 1260 -210}\special{pa 1260 -245}\special{fp}%
+\special{pa 1260 -280}\special{pa 1260 -315}\special{fp}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa -1575 -20}\special{pa -1575 20}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{$-5$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$-5$}\settodepth{\Depth}{$-5$}\setlength{\Height}{-\Height}%
+\put(-5.0000000,-0.1250000){\hspace*{\Width}\raisebox{\Height}{$-5$}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa -1260 -20}\special{pa -1260 20}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{$-4$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$-4$}\settodepth{\Depth}{$-4$}\setlength{\Height}{-\Height}%
+\put(-4.0000000,-0.1250000){\hspace*{\Width}\raisebox{\Height}{$-4$}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa -945 -20}\special{pa -945 20}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{$-3$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$-3$}\settodepth{\Depth}{$-3$}\setlength{\Height}{-\Height}%
+\put(-3.0000000,-0.1250000){\hspace*{\Width}\raisebox{\Height}{$-3$}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa -630 -20}\special{pa -630 20}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{$-2$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$-2$}\settodepth{\Depth}{$-2$}\setlength{\Height}{-\Height}%
+\put(-2.0000000,-0.1250000){\hspace*{\Width}\raisebox{\Height}{$-2$}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa -315 -20}\special{pa -315 20}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{$-1$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$-1$}\settodepth{\Depth}{$-1$}\setlength{\Height}{-\Height}%
+\put(-1.0000000,-0.1250000){\hspace*{\Width}\raisebox{\Height}{$-1$}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 315 -20}\special{pa 315 20}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{$1$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$1$}\settodepth{\Depth}{$1$}\setlength{\Height}{-\Height}%
+\put(1.0000000,-0.1250000){\hspace*{\Width}\raisebox{\Height}{$1$}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 630 -20}\special{pa 630 20}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{$2$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$2$}\settodepth{\Depth}{$2$}\setlength{\Height}{-\Height}%
+\put(2.0000000,-0.1250000){\hspace*{\Width}\raisebox{\Height}{$2$}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 945 -20}\special{pa 945 20}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{$3$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$3$}\settodepth{\Depth}{$3$}\setlength{\Height}{-\Height}%
+\put(3.0000000,-0.1250000){\hspace*{\Width}\raisebox{\Height}{$3$}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 1260 -20}\special{pa 1260 20}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{$4$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$4$}\settodepth{\Depth}{$4$}\setlength{\Height}{-\Height}%
+\put(4.0000000,-0.1250000){\hspace*{\Width}\raisebox{\Height}{$4$}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 1575 -20}\special{pa 1575 20}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{$5$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$5$}\settodepth{\Depth}{$5$}\setlength{\Height}{-\Height}%
+\put(5.0000000,-0.1250000){\hspace*{\Width}\raisebox{\Height}{$5$}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 20 -315}\special{pa -20 -315}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{$1$}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{$1$}\settodepth{\Depth}{$1$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-0.1250000,1.0000000){\hspace*{\Width}\raisebox{\Height}{$1$}}%
+%
+}%
+\special{pa -1575 -0}\special{pa 1575 -0}%
+\special{fp}%
+\special{pa 0 315}\special{pa 0 -630}%
+\special{fp}%
+\settowidth{\Width}{$x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(5.0625000,0.0000000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{\Depth}%
+\put(0.0000000,2.0625000){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+\settowidth{\Width}{O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(-0.0625000,-0.0625000){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/periodfun2.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/periodfun2.tex
new file mode 100644
index 0000000000..88077d60dc
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/periodfun2.tex
@@ -0,0 +1,286 @@
+%%% /Users/Hannya/Desktop/fig/periodfun2.tex
+%%% Generator=hachtest.cdy
+{\unitlength=8mm%
+\begin{picture}%
+(10,3)(-5,-1)%
+\special{pn 8}%
+%
+{%
+\color[rgb]{0,0,0}%
+\special{pn 16}%
+\special{pa -315 -0}\special{pa 0 -0}%
+\special{fp}%
+\special{pn 8}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pn 16}%
+\special{pa 0 -0}\special{pa 6 -0}\special{pa 13 -1}\special{pa 19 -1}%
+\special{pa 25 -2}\special{pa 31 -3}\special{pa 38 -5}\special{pa 44 -6}%
+\special{pa 50 -8}\special{pa 57 -10}\special{pa 63 -13}\special{pa 69 -15}%
+\special{pa 76 -18}\special{pa 82 -21}\special{pa 88 -25}\special{pa 94 -28}%
+\special{pa 101 -32}\special{pa 107 -36}\special{pa 113 -41}\special{pa 120 -45}%
+\special{pa 126 -50}\special{pa 132 -56}\special{pa 139 -61}\special{pa 145 -67}%
+\special{pa 151 -73}\special{pa 157 -79}\special{pa 164 -85}\special{pa 170 -92}%
+\special{pa 176 -99}\special{pa 183 -106}\special{pa 189 -113}\special{pa 195 -121}%
+\special{pa 202 -129}\special{pa 208 -137}\special{pa 214 -146}\special{pa 220 -154}%
+\special{pa 227 -163}\special{pa 233 -172}\special{pa 239 -182}\special{pa 246 -192}%
+\special{pa 252 -202}\special{pa 258 -212}\special{pa 265 -222}\special{pa 271 -233}%
+\special{pa 277 -244}\special{pa 283 -255}\special{pa 290 -267}\special{pa 296 -278}%
+\special{pa 302 -290}\special{pa 309 -302}\special{pa 315 -315}%
+\special{fp}%
+\special{pn 8}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pn 16}%
+\special{pa -630 -0}\special{pa -624 -0}\special{pa -617 -1}\special{pa -611 -1}%
+\special{pa -605 -2}\special{pa -598 -3}\special{pa -592 -5}\special{pa -586 -6}%
+\special{pa -580 -8}\special{pa -573 -10}\special{pa -567 -13}\special{pa -561 -15}%
+\special{pa -554 -18}\special{pa -548 -21}\special{pa -542 -25}\special{pa -535 -28}%
+\special{pa -529 -32}\special{pa -523 -36}\special{pa -517 -41}\special{pa -510 -45}%
+\special{pa -504 -50}\special{pa -498 -56}\special{pa -491 -61}\special{pa -485 -67}%
+\special{pa -479 -73}\special{pa -472 -79}\special{pa -466 -85}\special{pa -460 -92}%
+\special{pa -454 -99}\special{pa -447 -106}\special{pa -441 -113}\special{pa -435 -121}%
+\special{pa -428 -129}\special{pa -422 -137}\special{pa -416 -146}\special{pa -409 -154}%
+\special{pa -403 -163}\special{pa -397 -172}\special{pa -391 -182}\special{pa -384 -192}%
+\special{pa -378 -202}\special{pa -372 -212}\special{pa -365 -222}\special{pa -359 -233}%
+\special{pa -353 -244}\special{pa -346 -255}\special{pa -340 -267}\special{pa -334 -278}%
+\special{pa -328 -290}\special{pa -321 -302}\special{pa -315 -315}%
+\special{fp}%
+\special{pn 8}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pn 16}%
+\special{pa -945 -0}\special{pa -630 -0}%
+\special{fp}%
+\special{pn 8}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pn 16}%
+\special{pa -1260 -0}\special{pa -1254 -0}\special{pa -1247 -1}\special{pa -1241 -1}%
+\special{pa -1235 -2}\special{pa -1228 -3}\special{pa -1222 -5}\special{pa -1216 -6}%
+\special{pa -1209 -8}\special{pa -1203 -10}\special{pa -1197 -13}\special{pa -1191 -15}%
+\special{pa -1184 -18}\special{pa -1178 -21}\special{pa -1172 -25}\special{pa -1165 -28}%
+\special{pa -1159 -32}\special{pa -1153 -36}\special{pa -1146 -41}\special{pa -1140 -45}%
+\special{pa -1134 -50}\special{pa -1128 -56}\special{pa -1121 -61}\special{pa -1115 -67}%
+\special{pa -1109 -73}\special{pa -1102 -79}\special{pa -1096 -85}\special{pa -1090 -92}%
+\special{pa -1083 -99}\special{pa -1077 -106}\special{pa -1071 -113}\special{pa -1065 -121}%
+\special{pa -1058 -129}\special{pa -1052 -137}\special{pa -1046 -146}\special{pa -1039 -154}%
+\special{pa -1033 -163}\special{pa -1027 -172}\special{pa -1020 -182}\special{pa -1014 -192}%
+\special{pa -1008 -202}\special{pa -1002 -212}\special{pa -995 -222}\special{pa -989 -233}%
+\special{pa -983 -244}\special{pa -976 -255}\special{pa -970 -267}\special{pa -964 -278}%
+\special{pa -957 -290}\special{pa -951 -302}\special{pa -945 -315}%
+\special{fp}%
+\special{pn 8}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pn 16}%
+\special{pa -1575 -0}\special{pa -1260 -0}%
+\special{fp}%
+\special{pn 8}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pn 16}%
+\special{pa 315 -0}\special{pa 630 -0}%
+\special{fp}%
+\special{pn 8}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pn 16}%
+\special{pa 630 -0}\special{pa 636 -0}\special{pa 643 -1}\special{pa 649 -1}%
+\special{pa 655 -2}\special{pa 661 -3}\special{pa 668 -5}\special{pa 674 -6}%
+\special{pa 680 -8}\special{pa 687 -10}\special{pa 693 -13}\special{pa 699 -15}%
+\special{pa 706 -18}\special{pa 712 -21}\special{pa 718 -25}\special{pa 724 -28}%
+\special{pa 731 -32}\special{pa 737 -36}\special{pa 743 -41}\special{pa 750 -45}%
+\special{pa 756 -50}\special{pa 762 -56}\special{pa 769 -61}\special{pa 775 -67}%
+\special{pa 781 -73}\special{pa 787 -79}\special{pa 794 -85}\special{pa 800 -92}%
+\special{pa 806 -99}\special{pa 813 -106}\special{pa 819 -113}\special{pa 825 -121}%
+\special{pa 831 -129}\special{pa 838 -137}\special{pa 844 -146}\special{pa 850 -154}%
+\special{pa 857 -163}\special{pa 863 -172}\special{pa 869 -182}\special{pa 876 -192}%
+\special{pa 882 -202}\special{pa 888 -212}\special{pa 894 -222}\special{pa 901 -233}%
+\special{pa 907 -244}\special{pa 913 -255}\special{pa 920 -267}\special{pa 926 -278}%
+\special{pa 932 -290}\special{pa 939 -302}\special{pa 945 -315}%
+\special{fp}%
+\special{pn 8}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pn 16}%
+\special{pa 945 -0}\special{pa 1260 -0}%
+\special{fp}%
+\special{pn 8}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pn 16}%
+\special{pa 1260 -0}\special{pa 1266 -0}\special{pa 1272 -1}\special{pa 1279 -1}%
+\special{pa 1285 -2}\special{pa 1291 -3}\special{pa 1298 -5}\special{pa 1304 -6}%
+\special{pa 1310 -8}\special{pa 1317 -10}\special{pa 1323 -13}\special{pa 1329 -15}%
+\special{pa 1335 -18}\special{pa 1342 -21}\special{pa 1348 -25}\special{pa 1354 -28}%
+\special{pa 1361 -32}\special{pa 1367 -36}\special{pa 1373 -41}\special{pa 1380 -45}%
+\special{pa 1386 -50}\special{pa 1392 -56}\special{pa 1398 -61}\special{pa 1405 -67}%
+\special{pa 1411 -73}\special{pa 1417 -79}\special{pa 1424 -85}\special{pa 1430 -92}%
+\special{pa 1436 -99}\special{pa 1443 -106}\special{pa 1449 -113}\special{pa 1455 -121}%
+\special{pa 1461 -129}\special{pa 1468 -137}\special{pa 1474 -146}\special{pa 1480 -154}%
+\special{pa 1487 -163}\special{pa 1493 -172}\special{pa 1499 -182}\special{pa 1506 -192}%
+\special{pa 1512 -202}\special{pa 1518 -212}\special{pa 1524 -222}\special{pa 1531 -233}%
+\special{pa 1537 -244}\special{pa 1543 -255}\special{pa 1550 -267}\special{pa 1556 -278}%
+\special{pa 1562 -290}\special{pa 1569 -302}\special{pa 1575 -315}%
+\special{fp}%
+\special{pn 8}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa -1575 -20}\special{pa -1575 20}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{$-5$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$-5$}\settodepth{\Depth}{$-5$}\setlength{\Height}{-\Height}%
+\put(-5.0000000,-0.1250000){\hspace*{\Width}\raisebox{\Height}{$-5$}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa -1260 -20}\special{pa -1260 20}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{$-4$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$-4$}\settodepth{\Depth}{$-4$}\setlength{\Height}{-\Height}%
+\put(-4.0000000,-0.1250000){\hspace*{\Width}\raisebox{\Height}{$-4$}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa -945 -20}\special{pa -945 20}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{$-3$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$-3$}\settodepth{\Depth}{$-3$}\setlength{\Height}{-\Height}%
+\put(-3.0000000,-0.1250000){\hspace*{\Width}\raisebox{\Height}{$-3$}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa -630 -20}\special{pa -630 20}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{$-2$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$-2$}\settodepth{\Depth}{$-2$}\setlength{\Height}{-\Height}%
+\put(-2.0000000,-0.1250000){\hspace*{\Width}\raisebox{\Height}{$-2$}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa -315 -20}\special{pa -315 20}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{$-1$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$-1$}\settodepth{\Depth}{$-1$}\setlength{\Height}{-\Height}%
+\put(-1.0000000,-0.1250000){\hspace*{\Width}\raisebox{\Height}{$-1$}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 315 -20}\special{pa 315 20}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{$1$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$1$}\settodepth{\Depth}{$1$}\setlength{\Height}{-\Height}%
+\put(1.0000000,-0.1250000){\hspace*{\Width}\raisebox{\Height}{$1$}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 630 -20}\special{pa 630 20}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{$2$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$2$}\settodepth{\Depth}{$2$}\setlength{\Height}{-\Height}%
+\put(2.0000000,-0.1250000){\hspace*{\Width}\raisebox{\Height}{$2$}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 945 -20}\special{pa 945 20}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{$3$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$3$}\settodepth{\Depth}{$3$}\setlength{\Height}{-\Height}%
+\put(3.0000000,-0.1250000){\hspace*{\Width}\raisebox{\Height}{$3$}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 1260 -20}\special{pa 1260 20}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{$4$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$4$}\settodepth{\Depth}{$4$}\setlength{\Height}{-\Height}%
+\put(4.0000000,-0.1250000){\hspace*{\Width}\raisebox{\Height}{$4$}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 1575 -20}\special{pa 1575 20}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{$5$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$5$}\settodepth{\Depth}{$5$}\setlength{\Height}{-\Height}%
+\put(5.0000000,-0.1250000){\hspace*{\Width}\raisebox{\Height}{$5$}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 20 -315}\special{pa -20 -315}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{$1$}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{$1$}\settodepth{\Depth}{$1$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-0.1250000,1.0000000){\hspace*{\Width}\raisebox{\Height}{$1$}}%
+%
+}%
+\special{pa -1575 -0}\special{pa 1575 -0}%
+\special{fp}%
+\special{pa 0 315}\special{pa 0 -630}%
+\special{fp}%
+\settowidth{\Width}{$x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(5.0625000,0.0000000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{\Depth}%
+\put(0.0000000,2.0625000){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+\settowidth{\Width}{O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(-0.0625000,-0.0625000){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/perpplane.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/perpplane.tex
new file mode 100644
index 0000000000..865d1f529c
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/perpplane.tex
@@ -0,0 +1,76 @@
+%%% /Users/Hannya/Desktop/KeTCindy/fig/perpplane.tex
+%%% Generator=3Dbasic.cdy
+{\unitlength=6mm%
+\begin{picture}%
+(7.78,7.13)(-4.4,-2.64)%
+\special{pn 8}%
+%
+{%
+\color[rgb]{0,0,0}%
+}%
+{%
+\color[rgb]{0,0,0}%
+}%
+\settowidth{\Width}{$x$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-4.2200000,-0.2900000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(1.2600000,-1.7900000){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+\settowidth{\Width}{$z$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$z$}\settodepth{\Depth}{$z$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(0.0000000,4.1200000){\hspace*{\Width}\raisebox{\Height}{$z$}}%
+%
+\special{pn 16}%
+\special{pa 0 -0}\special{pa -161 -122}%
+\special{fp}%
+\special{pn 8}%
+\special{pa -105 -110}\special{pa -180 -136}\special{pa -135 -72}\special{pa -120 -91}%
+\special{pa -105 -110}\special{sh 1}\special{ip}%
+\special{pn 1}%
+\special{pa -105 -110}\special{pa -180 -136}\special{pa -135 -72}\special{pa -120 -91}%
+\special{pa -105 -110}\special{pa -180 -136}%
+\special{fp}%
+\special{pn 8}%
+\settowidth{\Width}{P}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{P}\settodepth{\Depth}{P}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-0.8433333,0.5800000){\hspace*{\Width}\raisebox{\Height}{P}}%
+%
+\settowidth{\Width}{A}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{A}\settodepth{\Depth}{A}\setlength{\Height}{\Depth}%
+\put(1.6333333,2.1833333){\hspace*{\Width}\raisebox{\Height}{A}}%
+%
+\settowidth{\Width}{B}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{B}\settodepth{\Depth}{B}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(0.3833333,-1.6200000){\hspace*{\Width}\raisebox{\Height}{B}}%
+%
+\settowidth{\Width}{C}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{C}\settodepth{\Depth}{C}\setlength{\Height}{-\Height}%
+\put(-3.1533333,-1.0233333){\hspace*{\Width}\raisebox{\Height}{C}}%
+%
+\settowidth{\Width}{D}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{D}\settodepth{\Depth}{D}\setlength{\Height}{\Depth}%
+\put(-1.9133333,2.8533333){\hspace*{\Width}\raisebox{\Height}{D}}%
+%
+\special{pa 798 -55}\special{pa 237 -16}%
+\special{fp}%
+\special{pa 172 -12}\special{pa -634 44}%
+\special{fp}%
+\special{pa -698 48}\special{pa -923 64}%
+\special{fp}%
+\special{pa -255 -361}\special{pa 114 162}%
+\special{fp}%
+\special{pa 156 221}\special{pa 255 361}%
+\special{fp}%
+\special{pa 0 624}\special{pa 0 398}%
+\special{fp}%
+\special{pa 0 336}\special{pa 0 -537}%
+\special{fp}%
+\special{pa 0 -598}\special{pa 0 -897}%
+\special{fp}%
+\special{pa 365 -495}\special{pa 72 382}\special{pa -725 223}\special{pa -431 -654}%
+\special{pa 365 -495}%
+\special{fp}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/perppt.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/perppt.tex
new file mode 100644
index 0000000000..e03004d7e1
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/perppt.tex
@@ -0,0 +1,58 @@
+%%% /Users/Hannya/ketcindy/ketwork/template.tex 2016-8-11 21:22
+%%% template.sce 2016-8-11 21:22
+{\unitlength=8mm%
+\begin{picture}%
+( 8.04000, 6.29000)( -3.00000, -2.00000)%
+\special{pn 8}%
+%
+\settowidth{\Width}{$x$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-1.9908,-1.0008){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.8460,-0.3726){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+%
+\settowidth{\Width}{$z$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$z$}\settodepth{\Depth}{$z$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(0.0000,4.1119){\hspace*{\Width}\raisebox{\Height}{$z$}}%
+%
+%
+\special{pa 574 -288}\special{pa -574 288}%
+\special{fp}%
+\special{pa -945 -73}\special{pa 1467 113}%
+\special{fp}%
+\special{pa 0 630}\special{pa 0 -1235}%
+\special{fp}%
+\special{pa -344 173}\special{pa 880 68}\special{pa 0 -926}\special{pa -344 173}%
+\special{fp}%
+\special{pa 0 0}\special{pa 179 -229}%
+\special{fp}%
+\settowidth{\Width}{A}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{A}\settodepth{\Depth}{A}\setlength{\Height}{\Depth}%
+\put(-1.1426,-0.4993){\hspace*{\Width}\raisebox{\Height}{A}}%
+%
+%
+\settowidth{\Width}{B}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{B}\settodepth{\Depth}{B}\setlength{\Height}{\Depth}%
+\put(2.8439,-0.1648){\hspace*{\Width}\raisebox{\Height}{B}}%
+%
+%
+\settowidth{\Width}{C}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{C}\settodepth{\Depth}{C}\setlength{\Height}{\Depth}%
+\put(0.0500,2.9915){\hspace*{\Width}\raisebox{\Height}{C}}%
+%
+%
+\settowidth{\Width}{O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{\Depth}%
+\put(-0.0500,0.0500){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+%
+\settowidth{\Width}{H}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{H}\settodepth{\Depth}{H}\setlength{\Height}{\Depth}%
+\put(0.6171,0.7758){\hspace*{\Width}\raisebox{\Height}{H}}%
+%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/phparadata01.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/phparadata01.pdf
new file mode 100644
index 0000000000..48ed12c6ec
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/phparadata01.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/phparadata02.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/phparadata02.tex
new file mode 100644
index 0000000000..050bcbd63e
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/phparadata02.tex
@@ -0,0 +1,118 @@
+%%% /Users/Hannya/ketcindy/ketwork/template.tex 2016-8-11 22:26
+%%% template.sce 2016-8-11 22:26
+{\unitlength=6mm%
+\begin{picture}%
+( 7.60000, 7.37000)( -3.60000, -3.37000)%
+\special{pn 8}%
+%
+\special{pa -98 -684}\special{pa -242 -660}%
+\special{fp}%
+\special{pa -242 -660}\special{pa -52 -640}%
+\special{fp}%
+\special{pa -52 -640}\special{pa 210 -651}%
+\special{fp}%
+\special{pa 210 -651}\special{pa 182 -678}%
+\special{fp}%
+\special{pa 182 -678}\special{pa -98 -684}%
+\special{fp}%
+\special{pa 182 -678}\special{pa 363 -543}%
+\special{fp}%
+\special{pa -582 -380}\special{pa -484 -508}%
+\special{fp}%
+\special{pa -484 -508}\special{pa -242 -660}%
+\special{fp}%
+\special{pa -662 100}\special{pa -694 -128}%
+\special{fp}%
+\special{pa -694 -128}\special{pa -582 -380}%
+\special{fp}%
+\special{pa -694 -128}\special{pa -666 -101}%
+\special{fp}%
+\special{pa -666 -101}\special{pa -536 -336}%
+\special{fp}%
+\special{pa -536 -336}\special{pa -484 -508}%
+\special{fp}%
+\special{pa -536 -336}\special{pa -346 -316}%
+\special{fp}%
+\special{pa -346 -316}\special{pa -104 -468}%
+\special{fp}%
+\special{pa -104 -468}\special{pa -52 -640}%
+\special{fp}%
+\special{pa 210 -651}\special{pa 420 -490}%
+\special{fp}%
+\special{pa 420 -490}\special{pa 602 -355}%
+\special{fp}%
+\special{pa 602 -355}\special{pa 573 -382}%
+\special{fp}%
+\special{pa 573 -382}\special{pa 363 -543}%
+\special{fp}%
+\special{pa -602 355}\special{pa -662 100}%
+\special{fp}%
+\special{pa -602 355}\special{pa -573 382}%
+\special{fp}%
+\special{pa -573 382}\special{pa -605 154}%
+\special{fp}%
+\special{pa -605 154}\special{pa -666 -101}%
+\special{fp}%
+\special{pa -605 154}\special{pa -415 174}%
+\special{fp}%
+\special{pa -415 174}\special{pa -285 -61}%
+\special{fp}%
+\special{pa -285 -61}\special{pa -346 -316}%
+\special{fp}%
+\special{pa -285 -61}\special{pa -6 -56}%
+\special{fp}%
+\special{pa -6 -56}\special{pa 106 -307}%
+\special{fp}%
+\special{pa 106 -307}\special{pa -104 -468}%
+\special{fp}%
+\special{pa 106 -307}\special{pa 368 -318}%
+\special{fp}%
+\special{pa 368 -318}\special{pa 420 -490}%
+\special{fp}%
+\special{pa 602 -355}\special{pa 662 -100}%
+\special{fp}%
+\special{pa 662 -100}\special{pa 694 128}%
+\special{fp}%
+\special{pa -182 678}\special{pa -363 543}%
+\special{fp}%
+\special{pa -363 543}\special{pa -573 382}%
+\special{fp}%
+\special{pa -363 543}\special{pa -265 415}%
+\special{fp}%
+\special{pa -265 415}\special{pa -415 174}%
+\special{fp}%
+\special{pa -265 415}\special{pa 14 420}%
+\special{fp}%
+\special{pa 14 420}\special{pa 144 185}%
+\special{fp}%
+\special{pa 144 185}\special{pa -6 -56}%
+\special{fp}%
+\special{pa 144 185}\special{pa 406 174}%
+\special{fp}%
+\special{pa 406 174}\special{pa 518 -77}%
+\special{fp}%
+\special{pa 518 -77}\special{pa 368 -318}%
+\special{fp}%
+\special{pa 518 -77}\special{pa 662 -100}%
+\special{fp}%
+\special{pa 694 128}\special{pa 582 380}%
+\special{fp}%
+\special{pa 582 380}\special{pa 484 508}%
+\special{fp}%
+\special{pa 484 508}\special{pa 242 660}%
+\special{fp}%
+\special{pa 242 660}\special{pa 98 684}%
+\special{fp}%
+\special{pa 98 684}\special{pa -182 678}%
+\special{fp}%
+\special{pa 98 684}\special{pa 196 555}%
+\special{fp}%
+\special{pa 196 555}\special{pa 14 420}%
+\special{fp}%
+\special{pa 196 555}\special{pa 438 403}%
+\special{fp}%
+\special{pa 438 403}\special{pa 406 174}%
+\special{fp}%
+\special{pa 438 403}\special{pa 582 380}%
+\special{fp}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/phparadata03.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/phparadata03.tex
new file mode 100644
index 0000000000..2b5d91ad71
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/phparadata03.tex
@@ -0,0 +1,272 @@
+%%% /Users/Hannya/ketcindy/ketwork/template.tex 2016-8-11 22:33
+%%% template.sce 2016-8-11 22:33
+{\unitlength=6mm%
+\begin{picture}%
+( 7.60000, 7.37000)( -3.60000, -3.37000)%
+\special{pn 8}%
+%
+\special{pn 16}%
+\special{pa -98 -684}\special{pa -242 -660}%
+\special{fp}%
+\special{pa -242 -660}\special{pa -52 -640}%
+\special{fp}%
+\special{pa -52 -640}\special{pa 210 -651}%
+\special{fp}%
+\special{pa 210 -651}\special{pa 182 -678}%
+\special{fp}%
+\special{pa 182 -678}\special{pa -98 -684}%
+\special{fp}%
+\special{pa 182 -678}\special{pa 363 -543}%
+\special{fp}%
+\special{pa -582 -380}\special{pa -484 -508}%
+\special{fp}%
+\special{pa -484 -508}\special{pa -242 -660}%
+\special{fp}%
+\special{pa -662 100}\special{pa -694 -128}%
+\special{fp}%
+\special{pa -694 -128}\special{pa -582 -380}%
+\special{fp}%
+\special{pa -694 -128}\special{pa -666 -101}%
+\special{fp}%
+\special{pa -666 -101}\special{pa -536 -336}%
+\special{fp}%
+\special{pa -536 -336}\special{pa -484 -508}%
+\special{fp}%
+\special{pa -536 -336}\special{pa -346 -316}%
+\special{fp}%
+\special{pa -346 -316}\special{pa -104 -468}%
+\special{fp}%
+\special{pa -104 -468}\special{pa -52 -640}%
+\special{fp}%
+\special{pa 210 -651}\special{pa 420 -490}%
+\special{fp}%
+\special{pa 420 -490}\special{pa 602 -355}%
+\special{fp}%
+\special{pa 602 -355}\special{pa 573 -382}%
+\special{fp}%
+\special{pa 573 -382}\special{pa 363 -543}%
+\special{fp}%
+\special{pa -602 355}\special{pa -662 100}%
+\special{fp}%
+\special{pa -602 355}\special{pa -573 382}%
+\special{fp}%
+\special{pa -573 382}\special{pa -605 154}%
+\special{fp}%
+\special{pa -605 154}\special{pa -666 -101}%
+\special{fp}%
+\special{pa -605 154}\special{pa -415 174}%
+\special{fp}%
+\special{pa -415 174}\special{pa -285 -61}%
+\special{fp}%
+\special{pa -285 -61}\special{pa -346 -316}%
+\special{fp}%
+\special{pa -285 -61}\special{pa -6 -56}%
+\special{fp}%
+\special{pa -6 -56}\special{pa 106 -307}%
+\special{fp}%
+\special{pa 106 -307}\special{pa -104 -468}%
+\special{fp}%
+\special{pa 106 -307}\special{pa 368 -318}%
+\special{fp}%
+\special{pa 368 -318}\special{pa 420 -490}%
+\special{fp}%
+\special{pa 602 -355}\special{pa 662 -100}%
+\special{fp}%
+\special{pa 662 -100}\special{pa 694 128}%
+\special{fp}%
+\special{pa -182 678}\special{pa -363 543}%
+\special{fp}%
+\special{pa -363 543}\special{pa -573 382}%
+\special{fp}%
+\special{pa -363 543}\special{pa -265 415}%
+\special{fp}%
+\special{pa -265 415}\special{pa -415 174}%
+\special{fp}%
+\special{pa -265 415}\special{pa 14 420}%
+\special{fp}%
+\special{pa 14 420}\special{pa 144 185}%
+\special{fp}%
+\special{pa 144 185}\special{pa -6 -56}%
+\special{fp}%
+\special{pa 144 185}\special{pa 406 174}%
+\special{fp}%
+\special{pa 406 174}\special{pa 518 -77}%
+\special{fp}%
+\special{pa 518 -77}\special{pa 368 -318}%
+\special{fp}%
+\special{pa 518 -77}\special{pa 662 -100}%
+\special{fp}%
+\special{pa 694 128}\special{pa 582 380}%
+\special{fp}%
+\special{pa 582 380}\special{pa 484 508}%
+\special{fp}%
+\special{pa 484 508}\special{pa 242 660}%
+\special{fp}%
+\special{pa 242 660}\special{pa 98 684}%
+\special{fp}%
+\special{pa 98 684}\special{pa -182 678}%
+\special{fp}%
+\special{pa 98 684}\special{pa 196 555}%
+\special{fp}%
+\special{pa 196 555}\special{pa 14 420}%
+\special{fp}%
+\special{pa 196 555}\special{pa 438 403}%
+\special{fp}%
+\special{pa 438 403}\special{pa 406 174}%
+\special{fp}%
+\special{pa 438 403}\special{pa 582 380}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 8}%
+\special{pa -95 -687}\special{pa -100 -680}\special{fp}\special{pa -120 -655}\special{pa -125 -648}\special{fp}%
+\special{pa -144 -622}\special{pa -149 -616}\special{fp}\special{pa -169 -590}\special{pa -174 -584}\special{fp}%
+\special{pa -193 -558}\special{pa -198 -552}\special{fp}\special{pn 8}%
+\special{pa -192 -557}\special{pa -199 -553}\special{fp}\special{pa -227 -535}\special{pa -234 -531}\special{fp}%
+\special{pa -261 -513}\special{pa -268 -509}\special{fp}\special{pa -296 -492}\special{pa -303 -488}\special{fp}%
+\special{pa -331 -470}\special{pa -337 -466}\special{fp}\special{pa -365 -448}\special{pa -372 -444}\special{fp}%
+\special{pa -400 -427}\special{pa -407 -422}\special{fp}\special{pa -434 -405}\special{pa -441 -401}\special{fp}%
+\special{pn 8}%
+\special{pa -586 -379}\special{pa -578 -380}\special{fp}\special{pa -550 -385}\special{pa -542 -386}\special{fp}%
+\special{pa -514 -391}\special{pa -506 -392}\special{fp}\special{pa -478 -396}\special{pa -470 -398}\special{fp}%
+\special{pa -442 -402}\special{pa -434 -403}\special{fp}\special{pn 8}%
+\special{pa -438 -407}\special{pa -437 -399}\special{fp}\special{pa -433 -369}\special{pa -432 -361}\special{fp}%
+\special{pa -428 -331}\special{pa -426 -323}\special{fp}\special{pa -422 -293}\special{pa -421 -285}\special{fp}%
+\special{pa -417 -254}\special{pa -416 -247}\special{fp}\special{pa -412 -216}\special{pa -410 -209}\special{fp}%
+\special{pa -406 -178}\special{pa -405 -170}\special{fp}\special{pn 8}%
+\special{pa -404 -178}\special{pa -407 -171}\special{fp}\special{pa -420 -142}\special{pa -423 -135}\special{fp}%
+\special{pa -436 -106}\special{pa -439 -99}\special{fp}\special{pa -452 -70}\special{pa -455 -63}\special{fp}%
+\special{pa -468 -34}\special{pa -471 -27}\special{fp}\special{pa -484 2}\special{pa -487 9}\special{fp}%
+\special{pa -500 38}\special{pa -504 45}\special{fp}\special{pa -516 74}\special{pa -520 81}\special{fp}%
+\special{pn 8}%
+\special{pa -666 101}\special{pa -658 100}\special{fp}\special{pa -630 95}\special{pa -622 94}\special{fp}%
+\special{pa -594 89}\special{pa -586 88}\special{fp}\special{pa -558 84}\special{pa -550 82}\special{fp}%
+\special{pa -522 78}\special{pa -514 77}\special{fp}\special{pn 8}%
+\special{pa -410 -174}\special{pa -402 -175}\special{fp}\special{pa -372 -176}\special{pa -364 -176}\special{fp}%
+\special{pa -335 -177}\special{pa -327 -178}\special{fp}\special{pa -297 -179}\special{pa -289 -179}\special{fp}%
+\special{pa -260 -180}\special{pa -252 -181}\special{fp}\special{pa -223 -182}\special{pa -215 -182}\special{fp}%
+\special{pa -185 -183}\special{pa -177 -184}\special{fp}\special{pa -148 -185}\special{pa -140 -185}\special{fp}%
+\special{pn 8}%
+\special{pa 366 -547}\special{pa 361 -540}\special{fp}\special{pa 341 -514}\special{pa 336 -508}\special{fp}%
+\special{pa 317 -482}\special{pa 312 -476}\special{fp}\special{pa 292 -450}\special{pa 287 -444}\special{fp}%
+\special{pa 268 -418}\special{pa 263 -411}\special{fp}\special{pn 8}%
+\special{pa 269 -414}\special{pa 261 -415}\special{fp}\special{pa 229 -415}\special{pa 221 -415}\special{fp}%
+\special{pa 190 -416}\special{pa 182 -416}\special{fp}\special{pa 150 -417}\special{pa 142 -417}\special{fp}%
+\special{pa 110 -418}\special{pa 102 -418}\special{fp}\special{pa 70 -419}\special{pa 62 -419}\special{fp}%
+\special{pa 30 -419}\special{pa 22 -420}\special{fp}\special{pa -10 -420}\special{pa -18 -420}\special{fp}%
+\special{pn 8}%
+\special{pa -199 -557}\special{pa -192 -552}\special{fp}\special{pa -169 -535}\special{pa -162 -530}\special{fp}%
+\special{pa -138 -512}\special{pa -132 -508}\special{fp}\special{pa -108 -490}\special{pa -102 -485}\special{fp}%
+\special{pa -78 -467}\special{pa -71 -463}\special{fp}\special{pa -48 -445}\special{pa -41 -440}\special{fp}%
+\special{pa -17 -423}\special{pa -11 -418}\special{fp}\special{pn 8}%
+\special{pa -146 -182}\special{pa -142 -189}\special{fp}\special{pa -127 -215}\special{pa -123 -222}\special{fp}%
+\special{pa -109 -249}\special{pa -105 -256}\special{fp}\special{pa -90 -282}\special{pa -86 -289}\special{fp}%
+\special{pa -72 -316}\special{pa -68 -323}\special{fp}\special{pa -53 -350}\special{pa -49 -357}\special{fp}%
+\special{pa -35 -383}\special{pa -31 -390}\special{fp}\special{pa -16 -417}\special{pa -12 -424}\special{fp}%
+\special{pn 8}%
+\special{pa -520 74}\special{pa -516 81}\special{fp}\special{pa -499 108}\special{pa -494 115}\special{fp}%
+\special{pa -477 143}\special{pa -473 149}\special{fp}\special{pa -456 177}\special{pa -452 184}\special{fp}%
+\special{pa -435 211}\special{pa -430 218}\special{fp}\special{pa -413 246}\special{pa -409 253}\special{fp}%
+\special{pa -392 280}\special{pa -388 287}\special{fp}\special{pa -370 315}\special{pa -366 321}\special{fp}%
+\special{pn 8}%
+\special{pa -367 314}\special{pa -369 322}\special{fp}\special{pa -378 349}\special{pa -380 356}\special{fp}%
+\special{pa -388 383}\special{pa -390 391}\special{fp}\special{pa -398 417}\special{pa -401 425}\special{fp}%
+\special{pa -409 452}\special{pa -411 459}\special{fp}\special{pa -419 486}\special{pa -421 494}\special{fp}%
+\special{pn 8}%
+\special{pa -605 353}\special{pa -599 358}\special{fp}\special{pa -575 375}\special{pa -568 380}\special{fp}%
+\special{pa -544 398}\special{pa -538 403}\special{fp}\special{pa -514 420}\special{pa -508 425}\special{fp}%
+\special{pa -484 443}\special{pa -477 447}\special{fp}\special{pa -454 465}\special{pa -447 470}\special{fp}%
+\special{pa -423 488}\special{pa -417 492}\special{fp}\special{pn 8}%
+\special{pa -146 -189}\special{pa -142 -182}\special{fp}\special{pa -125 -154}\special{pa -120 -147}\special{fp}%
+\special{pa -103 -120}\special{pa -99 -113}\special{fp}\special{pa -82 -85}\special{pa -78 -79}\special{fp}%
+\special{pa -60 -51}\special{pa -56 -44}\special{fp}\special{pa -39 -17}\special{pa -35 -10}\special{fp}%
+\special{pa -18 18}\special{pa -13 25}\special{fp}\special{pa 4 52}\special{pa 8 59}\special{fp}%
+\special{pn 8}%
+\special{pa 7 52}\special{pa 4 59}\special{fp}\special{pa -9 88}\special{pa -12 95}\special{fp}%
+\special{pa -25 124}\special{pa -28 131}\special{fp}\special{pa -41 160}\special{pa -44 167}\special{fp}%
+\special{pa -57 196}\special{pa -60 203}\special{fp}\special{pa -73 232}\special{pa -76 239}\special{fp}%
+\special{pa -89 268}\special{pa -92 275}\special{fp}\special{pa -105 304}\special{pa -108 311}\special{fp}%
+\special{pn 8}%
+\special{pa -372 318}\special{pa -364 318}\special{fp}\special{pa -335 317}\special{pa -327 316}\special{fp}%
+\special{pa -298 315}\special{pa -290 315}\special{fp}\special{pa -260 314}\special{pa -252 313}\special{fp}%
+\special{pa -223 312}\special{pa -215 312}\special{fp}\special{pa -185 310}\special{pa -177 310}\special{fp}%
+\special{pa -148 309}\special{pa -140 309}\special{fp}\special{pa -110 307}\special{pa -102 307}\special{fp}%
+\special{pn 8}%
+\special{pa 263 -418}\special{pa 268 -411}\special{fp}\special{pa 285 -384}\special{pa 289 -377}\special{fp}%
+\special{pa 306 -349}\special{pa 310 -342}\special{fp}\special{pa 327 -315}\special{pa 332 -308}\special{fp}%
+\special{pa 349 -280}\special{pa 353 -274}\special{fp}\special{pa 370 -246}\special{pa 374 -239}\special{fp}%
+\special{pa 392 -212}\special{pa 396 -205}\special{fp}\special{pa 413 -177}\special{pa 417 -170}\special{fp}%
+\special{pn 8}%
+\special{pa 417 -177}\special{pa 413 -170}\special{fp}\special{pa 398 -144}\special{pa 395 -137}\special{fp}%
+\special{pa 380 -110}\special{pa 376 -103}\special{fp}\special{pa 361 -77}\special{pa 357 -70}\special{fp}%
+\special{pa 343 -43}\special{pa 339 -36}\special{fp}\special{pa 324 -9}\special{pa 320 -2}\special{fp}%
+\special{pa 306 24}\special{pa 302 31}\special{fp}\special{pa 287 58}\special{pa 283 65}\special{fp}%
+\special{pn 8}%
+\special{pa 2 56}\special{pa 10 56}\special{fp}\special{pa 42 56}\special{pa 50 57}\special{fp}%
+\special{pa 82 57}\special{pa 90 57}\special{fp}\special{pa 122 58}\special{pa 130 58}\special{fp}%
+\special{pa 161 59}\special{pa 169 59}\special{fp}\special{pa 201 60}\special{pa 209 60}\special{fp}%
+\special{pa 241 60}\special{pa 249 61}\special{fp}\special{pa 281 61}\special{pa 289 61}\special{fp}%
+\special{pn 8}%
+\special{pa 573 -386}\special{pa 574 -378}\special{fp}\special{pa 578 -348}\special{pa 579 -340}\special{fp}%
+\special{pa 583 -310}\special{pa 585 -302}\special{fp}\special{pa 589 -272}\special{pa 590 -264}\special{fp}%
+\special{pa 594 -234}\special{pa 595 -226}\special{fp}\special{pa 599 -196}\special{pa 601 -188}\special{fp}%
+\special{pa 605 -158}\special{pa 606 -150}\special{fp}\special{pn 8}%
+\special{pa 411 -174}\special{pa 419 -173}\special{fp}\special{pa 449 -170}\special{pa 457 -169}\special{fp}%
+\special{pa 487 -166}\special{pa 495 -165}\special{fp}\special{pa 525 -162}\special{pa 533 -161}\special{fp}%
+\special{pa 563 -158}\special{pa 571 -157}\special{fp}\special{pa 601 -154}\special{pa 609 -153}\special{fp}%
+\special{pn 8}%
+\special{pa 56 640}\special{pa 48 641}\special{fp}\special{pa 18 642}\special{pa 10 642}\special{fp}%
+\special{pa -19 643}\special{pa -27 644}\special{fp}\special{pa -56 645}\special{pa -64 645}\special{fp}%
+\special{pa -94 646}\special{pa -102 647}\special{fp}\special{pa -131 648}\special{pa -139 648}\special{fp}%
+\special{pa -169 649}\special{pa -177 650}\special{fp}\special{pa -206 651}\special{pa -214 651}\special{fp}%
+\special{pn 8}%
+\special{pa -423 488}\special{pa -417 492}\special{fp}\special{pa -393 511}\special{pa -387 515}\special{fp}%
+\special{pa -363 534}\special{pa -357 538}\special{fp}\special{pa -333 557}\special{pa -327 561}\special{fp}%
+\special{pa -303 580}\special{pa -297 584}\special{fp}\special{pa -273 603}\special{pa -267 608}\special{fp}%
+\special{pa -243 626}\special{pa -237 631}\special{fp}\special{pa -213 649}\special{pa -207 654}\special{fp}%
+\special{pn 8}%
+\special{pa -213 648}\special{pa -207 654}\special{fp}\special{pa -185 675}\special{pa -179 681}\special{fp}%
+\special{pn 8}%
+\special{pa 284 57}\special{pa 286 65}\special{fp}\special{pa 293 94}\special{pa 295 102}\special{fp}%
+\special{pa 302 130}\special{pa 303 138}\special{fp}\special{pa 310 167}\special{pa 312 175}\special{fp}%
+\special{pa 319 203}\special{pa 321 211}\special{fp}\special{pa 327 240}\special{pa 329 247}\special{fp}%
+\special{pa 336 276}\special{pa 338 284}\special{fp}\special{pa 345 313}\special{pa 347 320}\special{fp}%
+\special{pn 8}%
+\special{pa 349 314}\special{pa 342 319}\special{fp}\special{pa 314 336}\special{pa 308 340}\special{fp}%
+\special{pa 280 358}\special{pa 273 362}\special{fp}\special{pa 245 379}\special{pa 239 384}\special{fp}%
+\special{pa 211 401}\special{pa 204 405}\special{fp}\special{pa 176 423}\special{pa 169 427}\special{fp}%
+\special{pa 142 445}\special{pa 135 449}\special{fp}\special{pa 107 466}\special{pa 100 471}\special{fp}%
+\special{pn 8}%
+\special{pa -110 305}\special{pa -103 310}\special{fp}\special{pa -80 328}\special{pa -73 333}\special{fp}%
+\special{pa -50 351}\special{pa -43 356}\special{fp}\special{pa -20 374}\special{pa -13 379}\special{fp}%
+\special{pa 10 397}\special{pa 17 402}\special{fp}\special{pa 40 420}\special{pa 47 425}\special{fp}%
+\special{pa 70 443}\special{pa 77 448}\special{fp}\special{pa 100 466}\special{pa 107 471}\special{fp}%
+\special{pn 8}%
+\special{pa 51 644}\special{pa 53 637}\special{fp}\special{pa 61 610}\special{pa 63 602}\special{fp}%
+\special{pa 71 575}\special{pa 74 568}\special{fp}\special{pa 82 541}\special{pa 84 533}\special{fp}%
+\special{pa 92 507}\special{pa 94 499}\special{fp}\special{pa 102 472}\special{pa 105 465}\special{fp}%
+\special{pn 8}%
+\special{pa 697 131}\special{pa 691 125}\special{fp}\special{pa 669 104}\special{pa 663 99}\special{fp}%
+\special{pn 8}%
+\special{pa 604 -158}\special{pa 606 -150}\special{fp}\special{pa 613 -121}\special{pa 615 -113}\special{fp}%
+\special{pa 622 -85}\special{pa 623 -77}\special{fp}\special{pa 630 -48}\special{pa 632 -41}\special{fp}%
+\special{pa 639 -12}\special{pa 641 -4}\special{fp}\special{pa 648 25}\special{pa 649 32}\special{fp}%
+\special{pa 656 61}\special{pa 658 69}\special{fp}\special{pa 665 97}\special{pa 667 105}\special{fp}%
+\special{pn 8}%
+\special{pa 668 98}\special{pa 664 105}\special{fp}\special{pa 649 131}\special{pa 645 138}\special{fp}%
+\special{pa 631 165}\special{pa 627 172}\special{fp}\special{pa 612 199}\special{pa 608 206}\special{fp}%
+\special{pa 593 232}\special{pa 590 239}\special{fp}\special{pa 575 266}\special{pa 571 273}\special{fp}%
+\special{pa 556 299}\special{pa 553 306}\special{fp}\special{pa 538 333}\special{pa 534 340}\special{fp}%
+\special{pn 8}%
+\special{pa 342 316}\special{pa 350 317}\special{fp}\special{pa 380 320}\special{pa 388 321}\special{fp}%
+\special{pa 418 324}\special{pa 426 325}\special{fp}\special{pa 456 328}\special{pa 464 329}\special{fp}%
+\special{pa 494 332}\special{pa 502 333}\special{fp}\special{pa 532 336}\special{pa 540 337}\special{fp}%
+\special{pn 8}%
+\special{pa 537 333}\special{pa 535 340}\special{fp}\special{pa 527 367}\special{pa 524 375}\special{fp}%
+\special{pa 516 401}\special{pa 514 409}\special{fp}\special{pa 506 436}\special{pa 504 443}\special{fp}%
+\special{pa 496 470}\special{pa 493 478}\special{fp}\special{pa 485 505}\special{pa 483 512}\special{fp}%
+\special{pn 8}%
+\special{pa 48 640}\special{pa 56 641}\special{fp}\special{pa 86 644}\special{pa 94 645}\special{fp}%
+\special{pa 124 648}\special{pa 132 649}\special{fp}\special{pa 162 652}\special{pa 170 653}\special{fp}%
+\special{pa 200 656}\special{pa 208 657}\special{fp}\special{pa 238 660}\special{pa 246 661}\special{fp}%
+\special{pn 8}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/phparadata04.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/phparadata04.tex
new file mode 100644
index 0000000000..f311689634
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/phparadata04.tex
@@ -0,0 +1,34 @@
+%%% /Users/hannya/Desktop/fig/template3D.tex
+%%% Generator=template3D.cdy
+{\unitlength=7mm%
+\begin{picture}%
+(8.08,7.82)(-4.08,-2.57)%
+\special{pn 8}%
+%
+\special{pa -598 -86}\special{pa 111 246}%
+\special{fp}%
+\special{pa 111 246}\special{pa 488 -161}%
+\special{fp}%
+\special{pa -598 -86}\special{pa 0 -878}%
+\special{fp}%
+\special{pa 0 -878}\special{pa 488 -161}%
+\special{fp}%
+\special{pa 111 246}\special{pa 0 -878}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 492 -161}\special{pa 484 -160}\special{fp}\special{pa 453 -158}\special{pa 445 -158}\special{fp}%
+\special{pa 414 -156}\special{pa 406 -155}\special{fp}\special{pa 375 -153}\special{pa 367 -152}\special{fp}%
+\special{pa 336 -150}\special{pa 328 -150}\special{fp}\special{pa 298 -148}\special{pa 290 -147}\special{fp}%
+\special{pa 259 -145}\special{pa 251 -144}\special{fp}\special{pa 220 -142}\special{pa 212 -142}\special{fp}%
+\special{pa 181 -140}\special{pa 173 -139}\special{fp}\special{pa 143 -137}\special{pa 135 -136}\special{fp}%
+\special{pa 104 -134}\special{pa 96 -134}\special{fp}\special{pa 65 -131}\special{pa 57 -131}\special{fp}%
+\special{pa 26 -129}\special{pa 18 -128}\special{fp}\special{pa -12 -126}\special{pa -20 -126}\special{fp}%
+\special{pa -51 -123}\special{pa -59 -123}\special{fp}\special{pa -90 -121}\special{pa -98 -120}\special{fp}%
+\special{pa -129 -118}\special{pa -137 -117}\special{fp}\special{pa -168 -115}\special{pa -176 -115}\special{fp}%
+\special{pa -206 -113}\special{pa -214 -112}\special{fp}\special{pa -245 -110}\special{pa -253 -109}\special{fp}%
+\special{pa -284 -107}\special{pa -292 -107}\special{fp}\special{pa -323 -105}\special{pa -331 -104}\special{fp}%
+\special{pa -361 -102}\special{pa -369 -101}\special{fp}\special{pa -400 -99}\special{pa -408 -99}\special{fp}%
+\special{pa -439 -97}\special{pa -447 -96}\special{fp}\special{pa -478 -94}\special{pa -486 -93}\special{fp}%
+\special{pa -517 -91}\special{pa -525 -91}\special{fp}\special{pa -555 -88}\special{pa -563 -88}\special{fp}%
+\special{pa -594 -86}\special{pa -602 -85}\special{fp}\special{pn 8}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/plotdata1.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/plotdata1.tex
new file mode 100644
index 0000000000..11b65ed1cb
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/plotdata1.tex
@@ -0,0 +1,37 @@
+%%% test.tex 2014-10-15 15:5
+%%% test.sce 2014-10-15 15:5
+{\unitlength=5mm%
+\begin{picture}%
+( 8.00000, 10.00000)( -3.00000, -2.00000)%
+\special{pn 8}%
+%
+\special{pa -394 -1575}\special{pa -366 -1410}\special{pa -333 -1232}\special{pa -301 -1064}%
+\special{pa -269 -906}\special{pa -237 -759}\special{pa -205 -623}\special{pa -173 -497}%
+\special{pa -141 -382}\special{pa -108 -277}\special{pa -76 -182}\special{pa -44 -98}%
+\special{pa -12 -25}\special{pa 20 38}\special{pa 52 91}\special{pa 84 133}\special{pa 117 164}%
+\special{pa 149 185}\special{pa 181 196}\special{pa 213 196}\special{pa 245 185}\special{pa 277 164}%
+\special{pa 309 133}\special{pa 341 91}\special{pa 374 38}\special{pa 406 -25}\special{pa 438 -98}%
+\special{pa 470 -182}\special{pa 502 -277}\special{pa 534 -382}\special{pa 566 -497}%
+\special{pa 599 -623}\special{pa 631 -759}\special{pa 663 -906}\special{pa 695 -1064}%
+\special{pa 727 -1232}\special{pa 759 -1410}\special{pa 787 -1575}%
+\special{fp}%
+\special{pa -591 0}\special{pa 984 0}%
+\special{fp}%
+\special{pa 0 394}\special{pa 0 -1575}%
+\special{fp}%
+\settowidth{\Width}{$x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(5.0500,0.0000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{\Depth}%
+\put(0.0000,8.0500){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+%
+\settowidth{\Width}{O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(-0.0500,-0.0500){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/plotdata2.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/plotdata2.tex
new file mode 100644
index 0000000000..b65c541f22
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/plotdata2.tex
@@ -0,0 +1,40 @@
+%%% test.tex 2014-10-15 15:36
+%%% test.sce 2014-10-15 15:35
+{\unitlength=5mm%
+\begin{picture}%
+( 8.13000, 6.16000)( -1.00000, -3.00000)%
+\special{pn 8}%
+%
+\special{pa 0 278}\special{pa 25 199}\special{pa 50 106}\special{pa 76 6}\special{pa 101 -94}%
+\special{pa 126 -188}\special{pa 151 -269}\special{pa 177 -333}\special{pa 202 -376}%
+\special{pa 227 -393}\special{pa 252 -385}\special{pa 278 -352}\special{pa 303 -296}%
+\special{pa 328 -220}\special{pa 353 -130}\special{pa 379 -32}\special{pa 404 69}%
+\special{pa 429 165}\special{pa 454 250}\special{pa 480 319}\special{pa 505 367}\special{pa 530 391}%
+\special{pa 555 390}\special{pa 581 363}\special{pa 606 312}\special{pa 631 241}\special{pa 656 154}%
+\special{pa 682 57}\special{pa 707 -44}\special{pa 732 -142}\special{pa 757 -230}%
+\special{pa 782 -304}\special{pa 808 -357}\special{pa 833 -388}\special{pa 858 -392}%
+\special{pa 883 -372}\special{pa 909 -326}\special{pa 934 -260}\special{pa 959 -176}%
+\special{pa 984 -81}\special{pa 1010 19}\special{pa 1035 118}\special{pa 1060 209}%
+\special{pa 1085 287}\special{pa 1111 346}\special{pa 1136 382}\special{pa 1161 394}%
+\special{pa 1186 379}\special{pa 1212 340}\special{pa 1237 278}%
+\special{fp}%
+\special{pa -197 0}\special{pa 1404 0}%
+\special{fp}%
+\special{pa 0 591}\special{pa 0 -622}%
+\special{fp}%
+\settowidth{\Width}{$x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(7.1800,0.0000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{\Depth}%
+\put(0.0000,3.2100){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+%
+\settowidth{\Width}{O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(-0.0500,-0.0500){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/plotdata3.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/plotdata3.tex
new file mode 100644
index 0000000000..c8c751380c
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/plotdata3.tex
@@ -0,0 +1,100 @@
+%%% test.tex 2014-10-18 20:29
+%%% test.sce 2014-10-18 20:29
+{\unitlength=5mm%
+\begin{picture}%
+( 7.95000, 5.63000)( -0.50000, -1.50000)%
+\special{pn 8}%
+%
+\special{pn 16}%
+\special{pa -98 -299}\special{pa -66 -328}\special{pa -35 -359}\special{pa -3 -391}%
+\special{pa 29 -423}\special{pa 61 -454}\special{pa 93 -483}\special{pa 125 -511}%
+\special{pa 157 -535}\special{pa 189 -555}\special{pa 221 -571}\special{pa 253 -583}%
+\special{pa 285 -589}\special{pa 317 -590}\special{pa 349 -587}\special{pa 381 -578}%
+\special{pa 413 -564}\special{pa 445 -546}\special{pa 476 -524}\special{pa 508 -498}%
+\special{pa 540 -470}\special{pa 572 -439}\special{pa 604 -408}\special{pa 636 -376}%
+\special{pa 668 -345}\special{pa 700 -314}\special{pa 732 -286}\special{pa 764 -261}%
+\special{pa 796 -239}\special{pa 828 -222}\special{pa 860 -208}\special{pa 892 -200}%
+\special{pa 924 -197}\special{pa 956 -199}\special{pa 987 -206}\special{pa 1019 -218}%
+\special{pa 1051 -234}\special{pa 1083 -255}\special{pa 1115 -280}\special{pa 1147 -307}%
+\special{pa 1179 -337}\special{pa 1211 -368}\special{pa 1243 -400}\special{pa 1275 -432}%
+\special{pa 1307 -462}\special{pa 1339 -491}\special{pa 1371 -517}\special{pa 1403 -541}%
+\special{pa 1435 -560}\special{pa 1467 -575}%
+\special{fp}%
+\special{pn 8}%
+\special{pa -98 -102}\special{pa -70 -128}\special{fp}\special{pa -43 -154}\special{pa -35 -162}\special{pa -16 -181}\special{fp}%
+\special{pa 11 -208}\special{pa 29 -226}\special{pa 38 -234}\special{fp}\special{pa 65 -261}\special{pa 93 -286}\special{fp}%
+\special{pa 122 -311}\special{pa 125 -314}\special{pa 152 -334}\special{fp}\special{pa 184 -355}\special{pa 189 -358}\special{pa 217 -372}\special{fp}%
+\special{pa 253 -386}\special{pa 253 -386}\special{pa 285 -392}\special{pa 290 -392}\special{fp}%
+\special{pa 328 -392}\special{pa 349 -390}\special{pa 365 -385}\special{fp}\special{pa 401 -372}\special{pa 413 -367}\special{pa 434 -355}\special{fp}%
+\special{pa 466 -334}\special{pa 476 -327}\special{pa 496 -311}\special{fp}\special{pa 525 -287}\special{pa 540 -273}\special{pa 553 -261}\special{fp}%
+\special{pa 580 -235}\special{pa 604 -211}\special{pa 607 -208}\special{fp}\special{pa 634 -181}\special{pa 636 -179}\special{pa 661 -155}\special{fp}%
+\special{pa 689 -128}\special{pa 700 -118}\special{pa 717 -103}\special{fp}\special{pa 746 -79}\special{pa 764 -64}\special{pa 776 -56}\special{fp}%
+\special{pa 808 -36}\special{pa 828 -25}\special{pa 842 -19}\special{fp}\special{pa 878 -7}\special{pa 892 -3}\special{pa 915 -1}\special{fp}%
+\special{pa 953 -2}\special{pa 956 -2}\special{pa 987 -9}\special{pa 990 -10}\special{fp}%
+\special{pa 1025 -24}\special{pa 1051 -38}\special{pa 1058 -42}\special{fp}\special{pa 1090 -63}\special{pa 1115 -83}\special{pa 1120 -87}\special{fp}%
+\special{pa 1149 -112}\special{pa 1176 -137}\special{fp}\special{pa 1204 -164}\special{pa 1211 -171}\special{pa 1230 -190}\special{fp}%
+\special{pa 1257 -217}\special{pa 1275 -235}\special{pa 1284 -244}\special{fp}\special{pa 1312 -270}\special{pa 1339 -294}\special{pa 1340 -295}\special{fp}%
+\special{pa 1369 -319}\special{pa 1371 -321}\special{pa 1400 -342}\special{fp}\special{pa 1432 -362}\special{pa 1435 -363}\special{pa 1467 -378}\special{fp}%
+%
+%
+\special{pn 8}%
+\special{pa -101 97}\special{pa -95 92}\special{fp}\special{pa -72 71}\special{pa -66 65}\special{fp}%
+\special{pa -44 43}\special{pa -38 38}\special{fp}\special{pa -16 15}\special{pa -10 10}\special{fp}%
+\special{pa 12 -12}\special{pa 18 -18}\special{fp}\special{pa 41 -40}\special{pa 46 -46}\special{fp}%
+\special{pa 69 -67}\special{pa 75 -73}\special{fp}\special{pa 98 -94}\special{pa 104 -99}\special{fp}%
+\special{pa 128 -119}\special{pa 135 -124}\special{fp}\special{pa 160 -143}\special{pa 167 -147}\special{fp}%
+\special{pa 194 -164}\special{pa 201 -167}\special{fp}\special{pa 229 -180}\special{pa 237 -183}\special{fp}%
+\special{pa 267 -192}\special{pa 275 -193}\special{fp}\special{pa 306 -196}\special{pa 314 -196}\special{fp}%
+\special{pa 345 -193}\special{pa 353 -192}\special{fp}\special{pa 383 -183}\special{pa 391 -180}\special{fp}%
+\special{pa 419 -166}\special{pa 426 -163}\special{fp}\special{pa 453 -146}\special{pa 460 -142}\special{fp}%
+\special{pa 485 -123}\special{pa 491 -118}\special{fp}\special{pa 516 -98}\special{pa 522 -93}\special{fp}%
+\special{pa 545 -72}\special{pa 551 -66}\special{fp}\special{pa 574 -44}\special{pa 579 -39}\special{fp}%
+\special{pa 602 -17}\special{pa 607 -11}\special{fp}\special{pa 630 11}\special{pa 635 17}\special{fp}%
+\special{pa 658 39}\special{pa 663 44}\special{fp}\special{pa 686 66}\special{pa 692 72}\special{fp}%
+\special{pa 715 93}\special{pa 721 98}\special{fp}\special{pa 746 118}\special{pa 752 123}\special{fp}%
+\special{pa 777 142}\special{pa 784 146}\special{fp}\special{pa 811 163}\special{pa 818 166}\special{fp}%
+\special{pa 846 180}\special{pa 854 183}\special{fp}\special{pa 884 192}\special{pa 892 193}\special{fp}%
+\special{pa 923 197}\special{pa 931 197}\special{fp}\special{pa 962 193}\special{pa 970 192}\special{fp}%
+\special{pa 1000 183}\special{pa 1008 180}\special{fp}\special{pa 1036 167}\special{pa 1043 163}\special{fp}%
+\special{pa 1070 147}\special{pa 1077 143}\special{fp}\special{pa 1102 124}\special{pa 1108 119}\special{fp}%
+\special{pa 1133 99}\special{pa 1139 94}\special{fp}\special{pa 1162 73}\special{pa 1168 67}\special{fp}%
+\special{pa 1191 46}\special{pa 1196 40}\special{fp}\special{pa 1219 18}\special{pa 1225 12}\special{fp}%
+\special{pa 1247 -10}\special{pa 1252 -16}\special{fp}\special{pa 1275 -38}\special{pa 1281 -43}\special{fp}%
+\special{pa 1303 -65}\special{pa 1309 -71}\special{fp}\special{pa 1332 -92}\special{pa 1338 -97}\special{fp}%
+\special{pa 1363 -117}\special{pa 1369 -122}\special{fp}\special{pa 1394 -141}\special{pa 1401 -145}\special{fp}%
+\special{pa 1427 -162}\special{pa 1434 -166}\special{fp}\special{pa 1463 -179}\special{pa 1470 -183}\special{fp}%
+\special{pn 8}%
+\special{pa -98 -496}\special{pa -66 -525}\special{pa -35 -556}\special{pa -3 -588}%
+\special{pa 29 -620}\special{pa 61 -651}\special{pa 93 -680}\special{pa 125 -707}%
+\special{pa 157 -731}\special{pa 189 -752}\special{pa 221 -768}\special{pa 253 -779}%
+\special{pa 285 -786}\special{pa 317 -787}\special{pa 349 -783}\special{pa 381 -775}%
+\special{pa 413 -761}\special{pa 445 -743}\special{pa 476 -721}\special{pa 508 -695}%
+\special{pa 540 -667}\special{pa 572 -636}\special{pa 604 -605}\special{pa 636 -573}%
+\special{pa 668 -541}\special{pa 700 -511}\special{pa 732 -483}\special{pa 764 -458}%
+\special{pa 796 -436}\special{pa 828 -418}\special{pa 860 -405}\special{pa 892 -397}%
+\special{pa 924 -394}\special{pa 956 -396}\special{pa 987 -403}\special{pa 1019 -415}%
+\special{pa 1051 -431}\special{pa 1083 -452}\special{pa 1115 -477}\special{pa 1147 -504}%
+\special{pa 1179 -534}\special{pa 1211 -565}\special{pa 1243 -597}\special{pa 1275 -628}%
+\special{pa 1307 -659}\special{pa 1339 -688}\special{pa 1371 -714}\special{pa 1403 -737}%
+\special{pa 1435 -757}\special{pa 1467 -772}%
+\special{fp}%
+\special{pa -98 0}\special{pa 1467 0}%
+\special{fp}%
+\special{pa 0 295}\special{pa 0 -813}%
+\special{fp}%
+\settowidth{\Width}{$x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(7.5000,0.0000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{\Depth}%
+\put(0.0000,4.1800){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+%
+\settowidth{\Width}{O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(-0.0500,-0.0500){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/plotdata4.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/plotdata4.tex
new file mode 100644
index 0000000000..f9180a4bf7
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/plotdata4.tex
@@ -0,0 +1,62 @@
+%%% test.tex 2014-10-21 10:21
+%%% test.sce 2014-10-21 10:21
+{\unitlength=1cm%
+\begin{picture}%
+( 8.00000, 4.00000)( -1.00000, -1.00000)%
+\special{pn 8}%
+%
+\special{pa -394 -1181}\special{pa -329 -934}\special{pa -265 -709}\special{pa -201 -504}%
+\special{pa -137 -321}\special{pa -72 -158}\special{pa -8 -16}\special{pa 56 -104}%
+\special{pa 121 -204}\special{pa 185 -283}\special{pa 249 -341}\special{pa 313 -377}%
+\special{pa 378 -393}\special{pa 442 -388}\special{pa 506 -362}\special{pa 570 -314}%
+\special{pa 635 -246}\special{pa 699 -157}\special{pa 763 -47}\special{pa 828 -84}%
+\special{pa 892 -237}\special{pa 956 -410}\special{pa 1020 -604}\special{pa 1085 -819}%
+\special{pa 1149 -1055}\special{pa 1180 -1181}%
+\special{fp}%
+\special{pa 1181 -1181}\special{pa 1189 -1150}\special{pa 1205 -1088}\special{pa 1221 -1027}%
+\special{pa 1236 -967}\special{pa 1252 -909}\special{pa 1268 -852}\special{pa 1284 -796}%
+\special{pa 1300 -742}\special{pa 1316 -689}\special{pa 1331 -637}\special{pa 1347 -587}%
+\special{pa 1363 -537}\special{pa 1379 -489}\special{pa 1395 -442}\special{pa 1411 -397}%
+\special{pa 1426 -353}\special{pa 1442 -310}\special{pa 1458 -268}\special{pa 1474 -228}%
+\special{pa 1490 -189}\special{pa 1506 -151}\special{pa 1521 -114}\special{pa 1537 -79}%
+\special{pa 1553 -45}\special{pa 1569 -12}\special{pa 1585 -20}\special{pa 1601 -50}%
+\special{pa 1616 -79}\special{pa 1632 -106}\special{pa 1648 -133}\special{pa 1664 -158}%
+\special{pa 1680 -182}\special{pa 1695 -204}\special{pa 1711 -226}\special{pa 1727 -246}%
+\special{pa 1743 -264}\special{pa 1759 -282}\special{pa 1775 -298}\special{pa 1790 -313}%
+\special{pa 1806 -327}\special{pa 1822 -339}\special{pa 1838 -350}\special{pa 1854 -360}%
+\special{pa 1870 -369}\special{pa 1885 -376}\special{pa 1901 -382}\special{pa 1917 -387}%
+\special{pa 1933 -390}\special{pa 1949 -393}\special{pa 1965 -394}\special{pa 1980 -393}%
+\special{pa 1996 -392}\special{pa 2012 -389}\special{pa 2028 -385}\special{pa 2044 -379}%
+\special{pa 2060 -373}\special{pa 2075 -365}\special{pa 2091 -355}\special{pa 2107 -345}%
+\special{pa 2123 -333}\special{pa 2139 -320}\special{pa 2154 -306}\special{pa 2170 -290}%
+\special{pa 2186 -273}\special{pa 2202 -255}\special{pa 2218 -236}\special{pa 2234 -215}%
+\special{pa 2249 -193}\special{pa 2265 -170}\special{pa 2281 -146}\special{pa 2297 -120}%
+\special{pa 2313 -93}\special{pa 2329 -64}\special{pa 2344 -35}\special{pa 2360 -4}%
+\special{pa 2376 -28}\special{pa 2392 -62}\special{pa 2408 -96}\special{pa 2424 -132}%
+\special{pa 2439 -169}\special{pa 2455 -208}\special{pa 2471 -248}\special{pa 2487 -289}%
+\special{pa 2503 -331}\special{pa 2518 -375}\special{pa 2534 -419}\special{pa 2550 -466}%
+\special{pa 2566 -513}\special{pa 2582 -562}\special{pa 2598 -612}\special{pa 2613 -663}%
+\special{pa 2629 -715}\special{pa 2645 -769}\special{pa 2661 -824}\special{pa 2677 -880}%
+\special{pa 2693 -938}\special{pa 2708 -997}\special{pa 2724 -1057}\special{pa 2740 -1118}%
+\special{pa 2756 -1181}%
+\special{fp}%
+\special{pa -394 0}\special{pa 2756 0}%
+\special{fp}%
+\special{pa 0 394}\special{pa 0 -1181}%
+\special{fp}%
+\settowidth{\Width}{$x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(7.0500,0.0000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{\Depth}%
+\put(0.0000,3.0500){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+%
+\settowidth{\Width}{O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(-0.0500,-0.0500){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/plotdata5.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/plotdata5.tex
new file mode 100644
index 0000000000..801161b154
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/plotdata5.tex
@@ -0,0 +1,79 @@
+%%% /Users/Hannya/Desktop/KeTCindy/fig/plotdata5.tex
+%%% Generator=template1basic.cdy
+{\unitlength=6mm%
+\begin{picture}%
+(8.06,6.94)(-2.76,-2.55)%
+\special{pn 8}%
+%
+{%
+\color[rgb]{0,0,0}%
+\special{pa -462 472}\special{pa -443 472}\special{pa -423 472}\special{pa -404 472}%
+\special{pa -385 472}\special{pa -366 472}\special{pa -347 472}\special{pa -328 472}%
+\special{pa -309 472}\special{pa -290 472}\special{pa -271 472}\special{pa -252 472}%
+\special{fp}%
+\special{pa -233 236}\special{pa -214 236}\special{pa -195 236}\special{pa -176 236}%
+\special{pa -157 236}\special{pa -138 236}\special{pa -119 236}\special{pa -100 236}%
+\special{pa -81 236}\special{pa -62 236}\special{pa -43 236}\special{pa -24 236}%
+\special{pa -5 236}%
+\special{fp}%
+\special{pa 14 -0}\special{pa 33 -0}\special{pa 52 -0}\special{pa 72 -0}%
+\special{pa 91 -0}\special{pa 110 -0}\special{pa 129 -0}\special{pa 148 -0}%
+\special{pa 167 -0}\special{pa 186 -0}\special{pa 205 -0}\special{pa 224 -0}%
+\special{fp}%
+\special{pa 243 -236}\special{pa 262 -236}\special{pa 281 -236}\special{pa 300 -236}%
+\special{pa 319 -236}\special{pa 338 -236}\special{pa 357 -236}\special{pa 376 -236}%
+\special{pa 395 -236}\special{pa 414 -236}\special{pa 433 -236}\special{pa 452 -236}%
+\special{pa 471 -236}%
+\special{fp}%
+\special{pa 490 -472}\special{pa 509 -472}\special{pa 528 -472}\special{pa 548 -472}%
+\special{pa 567 -472}\special{pa 586 -472}\special{pa 605 -472}\special{pa 624 -472}%
+\special{pa 643 -472}\special{pa 662 -472}\special{pa 681 -472}\special{pa 700 -472}%
+\special{fp}%
+\special{pa 719 -709}\special{pa 738 -709}\special{pa 757 -709}\special{pa 776 -709}%
+\special{pa 795 -709}\special{pa 814 -709}\special{pa 833 -709}\special{pa 852 -709}%
+\special{pa 871 -709}\special{pa 890 -709}\special{pa 909 -709}\special{pa 928 -709}%
+\special{fp}%
+\special{pa 947 -945}\special{pa 966 -945}\special{pa 985 -945}\special{pa 1004 -945}%
+\special{pa 1023 -945}\special{pa 1043 -945}\special{pa 1062 -945}\special{pa 1081 -945}%
+\special{pa 1100 -945}\special{pa 1119 -945}\special{pa 1138 -945}\special{pa 1157 -945}%
+\special{pa 1176 -945}%
+\special{fp}%
+}%
+\special{pa -652 -0}\special{pa 1252 -0}%
+\special{fp}%
+\special{pa 0 602}\special{pa 0 -1037}%
+\special{fp}%
+\settowidth{\Width}{$x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(5.3833333,0.0000000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{\Depth}%
+\put(0.0000000,4.4733333){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+\settowidth{\Width}{O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(-0.0833333,-0.0833333){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+\special{pn 3}%
+\special{pa -220 456}\special{pa -233 449}\special{pa -247 451}\special{pa -257 462}\special{pa -260 476}\special{pa -253 489}\special{pa -240 496}\special{pa -225 493}\special{pa -215 483}\special{pa -213 469}\special{pa -220 456}\special{sh 0}\special{fp}%
+\special{pn 8}%
+\special{pn 3}%
+\special{pa 17 220}\special{pa 4 213}\special{pa -11 215}\special{pa -21 225}\special{pa -23 240}\special{pa -17 253}\special{pa -4 260}\special{pa 11 257}\special{pa 21 247}\special{pa 23 233}\special{pa 17 220}\special{sh 0}\special{fp}%
+\special{pn 8}%
+\special{pn 3}%
+\special{pa 253 -17}\special{pa 240 -23}\special{pa 225 -21}\special{pa 215 -11}\special{pa 213 4}\special{pa 220 17}\special{pa 233 23}\special{pa 247 21}\special{pa 257 11}\special{pa 260 -4}\special{pa 253 -17}\special{sh 0}\special{fp}%
+\special{pn 8}%
+\special{pn 3}%
+\special{pa 489 -253}\special{pa 476 -260}\special{pa 462 -257}\special{pa 451 -247}\special{pa 449 -233}\special{pa 456 -220}\special{pa 469 -213}\special{pa 483 -215}\special{pa 493 -225}\special{pa 496 -240}\special{pa 489 -253}\special{sh 0}\special{fp}%
+\special{pn 8}%
+\special{pn 3}%
+\special{pa 725 -489}\special{pa 712 -496}\special{pa 698 -493}\special{pa 688 -483}\special{pa 685 -469}\special{pa 692 -456}\special{pa 705 -449}\special{pa 719 -451}\special{pa 730 -462}\special{pa 732 -476}\special{pa 725 -489}\special{sh 0}\special{fp}%
+\special{pn 8}%
+\special{pn 3}%
+\special{pa 962 -725}\special{pa 949 -732}\special{pa 934 -730}\special{pa 924 -719}\special{pa 922 -705}\special{pa 928 -692}\special{pa 941 -685}\special{pa 956 -688}\special{pa 966 -698}\special{pa 968 -712}\special{pa 962 -725}\special{sh 0}\special{fp}%
+\special{pn 8}%
+\special{pn 3}%
+\special{pa 1198 -962}\special{pa 1185 -968}\special{pa 1170 -966}\special{pa 1160 -956}\special{pa 1158 -941}\special{pa 1164 -928}\special{pa 1177 -922}\special{pa 1192 -924}\special{pa 1202 -934}\special{pa 1204 -949}\special{pa 1198 -962}\special{sh 0}\special{fp}%
+\special{pn 8}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/plotdatar1.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/plotdatar1.tex
new file mode 100644
index 0000000000..32d871e0a9
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/plotdatar1.tex
@@ -0,0 +1,58 @@
+%%% /Users/Hannya/Desktop/fig/plotdatar1.tex
+%%% Generator=hachtest.cdy
+{\unitlength=8mm%
+\begin{picture}%
+(11.77,3.16)(-1,-1)%
+\special{pn 8}%
+%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -3}\special{pa 63 -4}\special{pa 126 -4}\special{pa 189 -6}%
+\special{pa 252 -7}\special{pa 315 -9}\special{pa 378 -10}\special{pa 441 -12}%
+\special{pa 504 -15}\special{pa 567 -17}\special{pa 630 -20}\special{pa 693 -24}%
+\special{pa 756 -27}\special{pa 819 -31}\special{pa 882 -34}\special{pa 945 -38}%
+\special{pa 1008 -42}\special{pa 1071 -46}\special{pa 1134 -49}\special{pa 1197 -52}%
+\special{pa 1260 -55}\special{pa 1323 -58}\special{pa 1386 -60}\special{pa 1449 -62}%
+\special{pa 1512 -63}\special{pa 1575 -63}\special{pa 1638 -63}\special{pa 1701 -62}%
+\special{pa 1764 -60}\special{pa 1827 -58}\special{pa 1890 -55}\special{pa 1953 -52}%
+\special{pa 2016 -49}\special{pa 2079 -46}\special{pa 2142 -42}\special{pa 2205 -38}%
+\special{pa 2268 -34}\special{pa 2331 -31}\special{pa 2394 -27}\special{pa 2457 -24}%
+\special{pa 2520 -20}\special{pa 2583 -17}\special{pa 2646 -15}\special{pa 2709 -12}%
+\special{pa 2772 -10}\special{pa 2835 -9}\special{pa 2898 -7}\special{pa 2961 -6}%
+\special{pa 3024 -4}\special{pa 3087 -4}\special{pa 3150 -3}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -2}\special{pa 63 -3}\special{pa 126 -3}\special{pa 189 -4}%
+\special{pa 252 -6}\special{pa 315 -7}\special{pa 378 -9}\special{pa 441 -11}%
+\special{pa 504 -14}\special{pa 567 -17}\special{pa 630 -21}\special{pa 693 -25}%
+\special{pa 756 -30}\special{pa 819 -36}\special{pa 882 -43}\special{pa 945 -50}%
+\special{pa 1008 -58}\special{pa 1071 -67}\special{pa 1134 -76}\special{pa 1197 -86}%
+\special{pa 1260 -97}\special{pa 1323 -109}\special{pa 1386 -120}\special{pa 1449 -133}%
+\special{pa 1512 -145}\special{pa 1575 -157}\special{pa 1638 -170}\special{pa 1701 -182}%
+\special{pa 1764 -195}\special{pa 1827 -206}\special{pa 1890 -218}\special{pa 1953 -229}%
+\special{pa 2016 -239}\special{pa 2079 -248}\special{pa 2142 -257}\special{pa 2205 -265}%
+\special{pa 2268 -272}\special{pa 2331 -279}\special{pa 2394 -284}\special{pa 2457 -290}%
+\special{pa 2520 -294}\special{pa 2583 -298}\special{pa 2646 -301}\special{pa 2709 -304}%
+\special{pa 2772 -306}\special{pa 2835 -308}\special{pa 2898 -309}\special{pa 2961 -311}%
+\special{pa 3024 -312}\special{pa 3087 -312}\special{pa 3150 -313}%
+\special{fp}%
+}%
+\special{pa -315 -0}\special{pa 3392 -0}%
+\special{fp}%
+\special{pa 0 315}\special{pa 0 -680}%
+\special{fp}%
+\settowidth{\Width}{$x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(10.8325000,0.0000000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{\Depth}%
+\put(0.0000000,2.2225000){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+\settowidth{\Width}{O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(-0.0625000,-0.0625000){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/plotdatatan1.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/plotdatatan1.tex
new file mode 100644
index 0000000000..fe30134e3c
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/plotdatatan1.tex
@@ -0,0 +1,82 @@
+%%% /Users/Hannya/Desktop/KeTCindy/fig/plotdatatan1.tex
+%%% Generator=template1basic.cdy
+{\unitlength=5mm%
+\begin{picture}%
+(7,11)(-3,-5)%
+\special{pn 8}%
+%
+{%
+\color[rgb]{0,0,0}%
+\special{pa -591 -28}\special{pa -584 -35}\special{pa -577 -42}\special{pa -570 -50}%
+\special{pa -563 -57}\special{pa -556 -64}\special{pa -549 -72}\special{pa -542 -80}%
+\special{pa -535 -88}\special{pa -529 -97}\special{pa -522 -105}\special{pa -515 -114}%
+\special{pa -508 -124}\special{pa -501 -134}\special{pa -494 -144}\special{pa -487 -155}%
+\special{pa -480 -166}\special{pa -473 -179}\special{pa -467 -191}\special{pa -460 -205}%
+\special{pa -453 -220}\special{pa -446 -236}\special{pa -439 -254}\special{pa -432 -273}%
+\special{pa -425 -295}\special{pa -418 -318}\special{pa -411 -344}\special{pa -405 -374}%
+\special{pa -398 -408}\special{pa -391 -448}\special{pa -384 -494}\special{pa -377 -549}%
+\special{pa -370 -616}\special{pa -363 -700}\special{pa -356 -807}\special{pa -349 -951}%
+\special{pa -343 -1152}\special{pa -342 -1181}%
+\special{fp}%
+\special{pa -314 -1181}\special{pa -314 984}%
+\special{fp}%
+\special{pa -270 984}\special{pa -267 898}\special{pa -260 768}\special{pa -253 670}%
+\special{pa -246 592}\special{pa -239 530}\special{pa -232 478}\special{pa -225 434}%
+\special{pa -219 397}\special{pa -212 364}\special{pa -205 335}\special{pa -198 310}%
+\special{pa -191 287}\special{pa -184 267}\special{pa -177 248}\special{pa -170 231}%
+\special{pa -163 215}\special{pa -156 201}\special{pa -150 187}\special{pa -143 174}%
+\special{pa -136 162}\special{pa -129 151}\special{pa -122 141}\special{pa -115 130}%
+\special{pa -108 121}\special{pa -101 111}\special{pa -94 102}\special{pa -88 94}%
+\special{pa -81 86}\special{pa -74 77}\special{pa -67 70}\special{pa -60 62}%
+\special{pa -53 54}\special{pa -46 47}\special{pa -39 40}\special{pa -32 33}%
+\special{pa -26 26}\special{pa -19 19}\special{pa -12 12}\special{pa -5 5}%
+\special{pa 2 -2}\special{pa 9 -9}\special{pa 16 -16}\special{pa 23 -23}%
+\special{pa 30 -30}\special{pa 36 -37}\special{pa 43 -44}\special{pa 50 -51}%
+\special{pa 57 -59}\special{pa 64 -66}\special{pa 71 -74}\special{pa 78 -82}%
+\special{pa 85 -90}\special{pa 92 -99}\special{pa 98 -108}\special{pa 105 -117}%
+\special{pa 112 -126}\special{pa 119 -136}\special{pa 126 -147}\special{pa 133 -158}%
+\special{pa 140 -169}\special{pa 147 -182}\special{pa 154 -195}\special{pa 160 -209}%
+\special{pa 167 -224}\special{pa 174 -241}\special{pa 181 -259}\special{pa 188 -278}%
+\special{pa 195 -300}\special{pa 202 -324}\special{pa 209 -351}\special{pa 216 -382}%
+\special{pa 222 -417}\special{pa 229 -458}\special{pa 236 -506}\special{pa 243 -564}%
+\special{pa 250 -635}\special{pa 257 -723}\special{pa 264 -838}\special{pa 271 -993}%
+\special{pa 277 -1181}%
+\special{fp}%
+\special{pa 308 -1181}\special{pa 308 984}%
+\special{fp}%
+\special{pa 348 984}\special{pa 353 863}\special{pa 360 742}\special{pa 367 650}%
+\special{pa 374 576}\special{pa 381 516}\special{pa 388 467}\special{pa 395 425}%
+\special{pa 402 388}\special{pa 408 357}\special{pa 415 329}\special{pa 422 304}%
+\special{pa 429 282}\special{pa 436 262}\special{pa 443 244}\special{pa 450 227}%
+\special{pa 457 212}\special{pa 464 197}\special{pa 470 184}\special{pa 477 171}%
+\special{pa 484 160}\special{pa 491 149}\special{pa 498 138}\special{pa 505 128}%
+\special{pa 512 118}\special{pa 519 109}\special{pa 526 100}\special{pa 532 92}%
+\special{pa 539 84}\special{pa 546 76}\special{pa 553 68}\special{pa 560 60}%
+\special{pa 567 53}\special{pa 574 45}\special{pa 581 38}\special{pa 588 31}%
+\special{pa 594 24}\special{pa 601 17}\special{pa 608 10}\special{pa 615 3}%
+\special{pa 622 -4}\special{pa 629 -11}\special{pa 636 -17}\special{pa 643 -24}%
+\special{pa 650 -31}\special{pa 656 -39}\special{pa 663 -46}\special{pa 670 -53}%
+\special{pa 677 -61}\special{pa 684 -68}\special{pa 691 -76}\special{pa 698 -84}%
+\special{pa 705 -92}\special{pa 712 -101}\special{pa 719 -110}\special{pa 725 -119}%
+\special{pa 732 -129}\special{pa 739 -139}\special{pa 746 -149}\special{pa 753 -160}%
+\special{pa 760 -172}\special{pa 767 -185}\special{pa 774 -198}\special{pa 781 -212}%
+\special{pa 787 -228}%
+\special{fp}%
+}%
+\special{pa -591 -0}\special{pa 787 -0}%
+\special{fp}%
+\special{pa 0 984}\special{pa 0 -1181}%
+\special{fp}%
+\settowidth{\Width}{$x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.1000000,0.0000000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{\Depth}%
+\put(0.0000000,6.1000000){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+\settowidth{\Width}{O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(-0.1000000,-0.1000000){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/plotdatatan2.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/plotdatatan2.tex
new file mode 100644
index 0000000000..cb7e6417e2
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/plotdatatan2.tex
@@ -0,0 +1,78 @@
+%%% /Users/Hannya/Desktop/KeTCindy/fig/plotdatatan2.tex
+%%% Generator=template1basic.cdy
+{\unitlength=5mm%
+\begin{picture}%
+(7,11)(-3,-5)%
+\special{pn 8}%
+%
+{%
+\color[rgb]{0,0,0}%
+\special{pa -591 -28}\special{pa -584 -35}\special{pa -577 -42}\special{pa -570 -50}%
+\special{pa -563 -57}\special{pa -556 -64}\special{pa -549 -72}\special{pa -542 -80}%
+\special{pa -535 -88}\special{pa -529 -97}\special{pa -522 -105}\special{pa -515 -114}%
+\special{pa -508 -124}\special{pa -501 -134}\special{pa -494 -144}\special{pa -487 -155}%
+\special{pa -480 -166}\special{pa -473 -179}\special{pa -467 -191}\special{pa -460 -205}%
+\special{pa -453 -220}\special{pa -446 -236}\special{pa -439 -254}\special{pa -432 -273}%
+\special{pa -425 -295}\special{pa -418 -318}\special{pa -411 -344}\special{pa -405 -374}%
+\special{pa -398 -408}\special{pa -391 -448}\special{pa -384 -494}\special{pa -377 -549}%
+\special{pa -370 -616}\special{pa -363 -700}\special{pa -356 -807}\special{pa -349 -951}%
+\special{pa -343 -1152}\special{pa -342 -1181}%
+\special{fp}%
+\special{pa -270 984}\special{pa -267 898}\special{pa -260 768}\special{pa -253 670}%
+\special{pa -246 592}\special{pa -239 530}\special{pa -232 478}\special{pa -225 434}%
+\special{pa -219 397}\special{pa -212 364}\special{pa -205 335}\special{pa -198 310}%
+\special{pa -191 287}\special{pa -184 267}\special{pa -177 248}\special{pa -170 231}%
+\special{pa -163 215}\special{pa -156 201}\special{pa -150 187}\special{pa -143 174}%
+\special{pa -136 162}\special{pa -129 151}\special{pa -122 141}\special{pa -115 130}%
+\special{pa -108 121}\special{pa -101 111}\special{pa -94 102}\special{pa -88 94}%
+\special{pa -81 86}\special{pa -74 77}\special{pa -67 70}\special{pa -60 62}%
+\special{pa -53 54}\special{pa -46 47}\special{pa -39 40}\special{pa -32 33}%
+\special{pa -26 26}\special{pa -19 19}\special{pa -12 12}\special{pa -5 5}%
+\special{pa 2 -2}\special{pa 9 -9}\special{pa 16 -16}\special{pa 23 -23}%
+\special{pa 30 -30}\special{pa 36 -37}\special{pa 43 -44}\special{pa 50 -51}%
+\special{pa 57 -59}\special{pa 64 -66}\special{pa 71 -74}\special{pa 78 -82}%
+\special{pa 85 -90}\special{pa 92 -99}\special{pa 98 -108}\special{pa 105 -117}%
+\special{pa 112 -126}\special{pa 119 -136}\special{pa 126 -147}\special{pa 133 -158}%
+\special{pa 140 -169}\special{pa 147 -182}\special{pa 154 -195}\special{pa 160 -209}%
+\special{pa 167 -224}\special{pa 174 -241}\special{pa 181 -259}\special{pa 188 -278}%
+\special{pa 195 -300}\special{pa 202 -324}\special{pa 209 -351}\special{pa 216 -382}%
+\special{pa 222 -417}\special{pa 229 -458}\special{pa 236 -506}\special{pa 243 -564}%
+\special{pa 250 -635}\special{pa 257 -723}\special{pa 264 -838}\special{pa 271 -993}%
+\special{pa 277 -1181}%
+\special{fp}%
+\special{pa 348 984}\special{pa 353 863}\special{pa 360 742}\special{pa 367 650}%
+\special{pa 374 576}\special{pa 381 516}\special{pa 388 467}\special{pa 395 425}%
+\special{pa 402 388}\special{pa 408 357}\special{pa 415 329}\special{pa 422 304}%
+\special{pa 429 282}\special{pa 436 262}\special{pa 443 244}\special{pa 450 227}%
+\special{pa 457 212}\special{pa 464 197}\special{pa 470 184}\special{pa 477 171}%
+\special{pa 484 160}\special{pa 491 149}\special{pa 498 138}\special{pa 505 128}%
+\special{pa 512 118}\special{pa 519 109}\special{pa 526 100}\special{pa 532 92}%
+\special{pa 539 84}\special{pa 546 76}\special{pa 553 68}\special{pa 560 60}%
+\special{pa 567 53}\special{pa 574 45}\special{pa 581 38}\special{pa 588 31}%
+\special{pa 594 24}\special{pa 601 17}\special{pa 608 10}\special{pa 615 3}%
+\special{pa 622 -4}\special{pa 629 -11}\special{pa 636 -17}\special{pa 643 -24}%
+\special{pa 650 -31}\special{pa 656 -39}\special{pa 663 -46}\special{pa 670 -53}%
+\special{pa 677 -61}\special{pa 684 -68}\special{pa 691 -76}\special{pa 698 -84}%
+\special{pa 705 -92}\special{pa 712 -101}\special{pa 719 -110}\special{pa 725 -119}%
+\special{pa 732 -129}\special{pa 739 -139}\special{pa 746 -149}\special{pa 753 -160}%
+\special{pa 760 -172}\special{pa 767 -185}\special{pa 774 -198}\special{pa 781 -212}%
+\special{pa 787 -228}%
+\special{fp}%
+}%
+\special{pa -591 -0}\special{pa 787 -0}%
+\special{fp}%
+\special{pa 0 984}\special{pa 0 -1181}%
+\special{fp}%
+\settowidth{\Width}{$x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.1000000,0.0000000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{\Depth}%
+\put(0.0000000,6.1000000){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+\settowidth{\Width}{O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(-0.1000000,-0.1000000){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/pointdata.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/pointdata.tex
new file mode 100644
index 0000000000..e795a665e7
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/pointdata.tex
@@ -0,0 +1,32 @@
+%%% /Users/Hannya/Desktop/KeTCindy/fig/pointdata.tex
+%%% Generator=template1basic.cdy
+{\unitlength=5mm%
+\begin{picture}%
+(6.62,4.93)(-0.28,-0.4)%
+\special{pn 8}%
+%
+\special{pn 1}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 214 -410}\special{pa 201 -417}\special{pa 186 -415}\special{pa 176 -404}\special{pa 174 -390}\special{pa 180 -377}\special{pa 193 -370}\special{pa 208 -373}\special{pa 218 -383}\special{pa 220 -397}\special{pa 214 -410}\special{sh 1}\special{fp}%
+\special{pa 607 -804}\special{pa 594 -811}\special{pa 580 -808}\special{pa 570 -798}\special{pa 567 -784}\special{pa 574 -771}\special{pa 587 -764}\special{pa 601 -766}\special{pa 612 -777}\special{pa 614 -791}\special{pa 607 -804}\special{sh 1}\special{fp}%
+\special{pa 1001 -410}\special{pa 988 -417}\special{pa 974 -415}\special{pa 963 -404}\special{pa 961 -390}\special{pa 968 -377}\special{pa 981 -370}\special{pa 995 -373}\special{pa 1005 -383}\special{pa 1008 -397}\special{pa 1001 -410}\special{sh 1}\special{fp}%
+}%
+\special{pn 8}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -0}\special{pa 197 -394}\special{pa 591 -787}\special{pa 984 -394}%
+\special{pa 787 -0}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 197 -394}\special{pa 394 -0}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 984 -394}\special{pa 1181 -0}%
+\special{fp}%
+}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/pointoncrv.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/pointoncrv.tex
new file mode 100644
index 0000000000..2594029d34
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/pointoncrv.tex
@@ -0,0 +1,118 @@
+%%% fig.tex 2016-5-3 14:0
+%%% fig.sce 2016-5-3 14:0
+{\unitlength=10mm%
+\begin{picture}%
+( 4.99000, 3.72000)( -2.51000, -0.69000)%
+\special{pn 8}%
+%
+\special{pn 8}%
+\special{pa 788 4}\special{pa 787 -4}\special{fp}\special{pa 785 -35}\special{pa 785 -43}\special{fp}%
+\special{pa 783 -74}\special{pa 782 -82}\special{fp}\special{pa 778 -113}\special{pa 777 -121}\special{fp}%
+\special{pa 771 -152}\special{pa 770 -160}\special{fp}\special{pa 764 -191}\special{pa 762 -198}\special{fp}%
+\special{pa 752 -228}\special{pa 750 -236}\special{fp}\special{pa 740 -265}\special{pa 737 -273}\special{fp}%
+\special{pa 726 -302}\special{pa 723 -309}\special{fp}\special{pa 710 -338}\special{pa 706 -345}\special{fp}%
+\special{pa 693 -373}\special{pa 689 -380}\special{fp}\special{pa 673 -407}\special{pa 668 -414}\special{fp}%
+\special{pa 652 -440}\special{pa 647 -447}\special{fp}\special{pa 629 -472}\special{pa 624 -478}\special{fp}%
+\special{pa 604 -503}\special{pa 599 -509}\special{fp}\special{pa 579 -533}\special{pa 574 -539}\special{fp}%
+\special{pa 551 -560}\special{pa 545 -566}\special{fp}\special{pa 523 -587}\special{pa 517 -593}\special{fp}%
+\special{pa 493 -613}\special{pa 487 -618}\special{fp}\special{pa 461 -636}\special{pa 455 -641}\special{fp}%
+\special{pa 430 -659}\special{pa 423 -664}\special{fp}\special{pa 396 -679}\special{pa 389 -683}\special{fp}%
+\special{pa 361 -698}\special{pa 354 -702}\special{fp}\special{pa 326 -716}\special{pa 319 -719}\special{fp}%
+\special{pa 290 -730}\special{pa 282 -733}\special{fp}\special{pa 253 -745}\special{pa 246 -748}\special{fp}%
+\special{pa 216 -756}\special{pa 208 -758}\special{fp}\special{pa 178 -766}\special{pa 170 -768}\special{fp}%
+\special{pa 139 -774}\special{pa 132 -776}\special{fp}\special{pa 101 -779}\special{pa 93 -780}\special{fp}%
+\special{pa 62 -785}\special{pa 54 -785}\special{fp}\special{pa 22 -786}\special{pa 14 -786}\special{fp}%
+\special{pa -17 -786}\special{pa -25 -786}\special{fp}\special{pa -56 -785}\special{pa -64 -784}\special{fp}%
+\special{pa -95 -780}\special{pa -103 -779}\special{fp}\special{pa -134 -775}\special{pa -142 -774}\special{fp}%
+\special{pa -172 -767}\special{pa -180 -765}\special{fp}\special{pa -211 -757}\special{pa -218 -755}\special{fp}%
+\special{pa -248 -747}\special{pa -256 -744}\special{fp}\special{pa -285 -732}\special{pa -292 -729}\special{fp}%
+\special{pa -321 -718}\special{pa -329 -715}\special{fp}\special{pa -357 -701}\special{pa -364 -697}\special{fp}%
+\special{pa -391 -682}\special{pa -398 -678}\special{fp}\special{pa -425 -662}\special{pa -432 -658}\special{fp}%
+\special{pa -457 -639}\special{pa -463 -635}\special{fp}\special{pa -489 -616}\special{pa -495 -611}\special{fp}%
+\special{pa -519 -591}\special{pa -525 -586}\special{fp}\special{pa -547 -564}\special{pa -553 -559}\special{fp}%
+\special{pa -576 -537}\special{pa -581 -531}\special{fp}\special{pa -601 -507}\special{pa -606 -501}\special{fp}%
+\special{pa -626 -477}\special{pa -631 -470}\special{fp}\special{pa -649 -445}\special{pa -653 -438}\special{fp}%
+\special{pa -670 -411}\special{pa -674 -405}\special{fp}\special{pa -690 -378}\special{pa -694 -371}\special{fp}%
+\special{pa -707 -343}\special{pa -711 -335}\special{fp}\special{pa -724 -307}\special{pa -727 -300}\special{fp}%
+\special{pa -738 -271}\special{pa -741 -263}\special{fp}\special{pa -751 -233}\special{pa -753 -226}\special{fp}%
+\special{pa -762 -196}\special{pa -764 -188}\special{fp}\special{pa -770 -157}\special{pa -772 -149}\special{fp}%
+\special{pa -778 -119}\special{pa -779 -111}\special{fp}\special{pa -782 -80}\special{pa -783 -72}\special{fp}%
+\special{pa -785 -41}\special{pa -785 -33}\special{fp}\special{pa -787 -1}\special{pa -787 7}\special{fp}%
+\special{pa -785 38}\special{pa -785 46}\special{fp}\special{pa -783 77}\special{pa -782 85}\special{fp}%
+\special{pa -778 116}\special{pa -777 124}\special{fp}\special{pa -771 154}\special{pa -769 162}\special{fp}%
+\special{pa -763 193}\special{pa -761 201}\special{fp}\special{pa -751 230}\special{pa -749 238}\special{fp}%
+\special{pa -739 268}\special{pa -737 275}\special{fp}\special{pn 8}%
+\special{pa 737 275}\special{pa 739 268}\special{fp}\special{pa 749 238}\special{pa 752 230}\special{fp}%
+\special{pa 762 200}\special{pa 764 192}\special{fp}\special{pa 769 161}\special{pa 771 153}\special{fp}%
+\special{pa 777 122}\special{pa 778 114}\special{fp}\special{pa 782 83}\special{pa 783 75}\special{fp}%
+\special{pa 785 44}\special{pa 785 36}\special{fp}\special{pa 787 4}\special{pa 788 -4}\special{fp}%
+\special{pn 8}%
+\special{pa 787 0}\special{pa 637 -463}\special{pa 243 -749}\special{pa -243 -749}%
+\special{pa -637 -463}\special{pa -787 0}%
+\special{fp}%
+\special{pn 5}%
+\special{pa -426 -620}\special{pa -434 -625}\special{pa -444 -625}\special{pa -452 -621}%
+\special{pa -458 -614}\special{pa -460 -605}\special{pa -457 -596}\special{pa -450 -589}%
+\special{pa -441 -586}\special{pa -432 -588}\special{pa -425 -594}\special{pa -421 -602}%
+\special{pa -421 -612}\special{pa -426 -620}\special{sh 1}\special{fp}%
+\special{pa 801 -14}\special{pa 793 -19}\special{pa 784 -19}\special{pa 775 -15}\special{pa 769 -8}%
+\special{pa 768 1}\special{pa 771 10}\special{pa 777 17}\special{pa 786 20}\special{pa 795 18}%
+\special{pa 803 12}\special{pa 807 4}\special{pa 806 -6}\special{pa 801 -14}\special{sh 1}\special{fp}%
+\special{pa -773 -14}\special{pa -782 -19}\special{pa -791 -19}\special{pa -800 -15}%
+\special{pa -805 -8}\special{pa -807 1}\special{pa -804 10}\special{pa -798 17}\special{pa -789 20}%
+\special{pa -779 18}\special{pa -772 12}\special{pa -768 4}\special{pa -769 -6}\special{pa -773 -14}%
+\special{sh 1}\special{fp}%
+\special{pn 8}%
+\settowidth{\Width}{P}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{P}\settodepth{\Depth}{P}\setlength{\Height}{-\Height}%
+\put(2.0500,-0.0500){\hspace*{\Width}\raisebox{\Height}{P}}%
+%
+%
+\settowidth{\Width}{Q}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{Q}\settodepth{\Depth}{Q}\setlength{\Height}{-\Height}%
+\put(-2.0500,-0.0500){\hspace*{\Width}\raisebox{\Height}{Q}}%
+%
+%
+\settowidth{\Width}{A}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{A}\settodepth{\Depth}{A}\setlength{\Height}{\Depth}%
+\put(-1.1680,1.5888){\hspace*{\Width}\raisebox{\Height}{A}}%
+%
+%
+\special{pn 8}%
+\special{pa -988 0}\special{pa 937 0}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 901 24}\special{pa 976 0}\special{pa 901 -24}\special{pa 901 0}\special{pa 901 24}%
+\special{sh 1}\special{ip}%
+\special{pn 1}%
+\special{pa 901 24}\special{pa 976 0}\special{pa 901 -24}\special{pa 901 0}\special{pa 901 24}%
+\special{pa 976 0}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 8}%
+\special{pa 0 272}\special{pa 0 -1154}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 24 -1118}\special{pa 0 -1193}\special{pa -24 -1118}\special{pa 0 -1118}%
+\special{pa 24 -1118}\special{sh 1}\special{ip}%
+\special{pn 1}%
+\special{pa 24 -1118}\special{pa 0 -1193}\special{pa -24 -1118}\special{pa 0 -1118}%
+\special{pa 24 -1118}\special{pa 0 -1193}%
+\special{fp}%
+\special{pn 8}%
+\settowidth{\Width}{$x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.5300,0.0000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{\Depth}%
+\put(0.0000,3.0800){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+%
+\settowidth{\Width}{O}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(0.0500,-0.0500){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/pointsize.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/pointsize.tex
new file mode 100644
index 0000000000..76de567248
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/pointsize.tex
@@ -0,0 +1,43 @@
+%%% test.tex 2014-10-22 9:7
+%%% test.sce 2014-10-22 9:7
+{\unitlength=1cm%
+\begin{picture}%
+( 7.00000, 2.00000)( -3.00000, -1.00000)%
+\special{pn 8}%
+%
+\special{pa 3 -3}\special{pa -3 -3}\special{pa -3 3}\special{pa 3 3}\special{pa 3 -3}%
+\special{sh 1}\special{fp}%
+\special{pa 399 -6}\special{pa 394 -8}\special{pa 388 -6}\special{pa 386 0}\special{pa 388 6}%
+\special{pa 394 8}\special{pa 399 6}\special{pa 402 0}\special{pa 399 -6}\special{sh 1}\special{fp}%
+\special{pa 796 -8}\special{pa 789 -12}\special{pa 782 -11}\special{pa 777 -5}\special{pa 776 2}%
+\special{pa 779 8}\special{pa 786 12}\special{pa 793 11}\special{pa 798 5}\special{pa 799 -2}%
+\special{pa 796 -8}\special{sh 1}\special{fp}%
+\special{pa 1192 -11}\special{pa 1185 -15}\special{pa 1177 -15}\special{pa 1170 -11}%
+\special{pa 1166 -4}\special{pa 1166 4}\special{pa 1170 11}\special{pa 1177 15}\special{pa 1185 15}%
+\special{pa 1192 11}\special{pa 1196 4}\special{pa 1196 -4}\special{pa 1192 -11}\special{sh 1}\special{fp}%
+\settowidth{\Width}{Pointsize}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{Pointsize}\settodepth{\Depth}{Pointsize}\setlength{\Height}{\Depth}%
+\put(-1.4400,0.1500){\hspace*{\Width}\raisebox{\Height}{Pointsize}}%
+%
+%
+\settowidth{\Width}{1}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{1}\settodepth{\Depth}{1}\setlength{\Height}{\Depth}%
+\put(0.0000,0.1500){\hspace*{\Width}\raisebox{\Height}{1}}%
+%
+%
+\settowidth{\Width}{2}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{2}\settodepth{\Depth}{2}\setlength{\Height}{\Depth}%
+\put(1.0000,0.1500){\hspace*{\Width}\raisebox{\Height}{2}}%
+%
+%
+\settowidth{\Width}{3}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{3}\settodepth{\Depth}{3}\setlength{\Height}{\Depth}%
+\put(2.0000,0.1500){\hspace*{\Width}\raisebox{\Height}{3}}%
+%
+%
+\settowidth{\Width}{4}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{4}\settodepth{\Depth}{4}\setlength{\Height}{\Depth}%
+\put(3.0000,0.1500){\hspace*{\Width}\raisebox{\Height}{4}}%
+%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/poison01.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/poison01.tex
new file mode 100644
index 0000000000..957ec741d0
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/poison01.tex
@@ -0,0 +1,87 @@
+%%% fig.tex 2016-4-23 10:42
+%%% fig.sce 2016-4-23 10:41
+{\unitlength=5mm%
+\begin{picture}%
+( 14.89000, 9.57800)( -0.82000, -0.77000)%
+\special{pn 8}%
+%
+\special{pn 4}%
+\special{pa 0 0}\special{pa 0 -236}\special{pa 197 -236}\special{pa 197 0}\special{pa 0 0}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 4}%
+\special{pa 197 0}\special{pa 197 -748}\special{pa 394 -748}\special{pa 394 0}\special{pa 197 0}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 4}%
+\special{pa 394 0}\special{pa 394 -1181}\special{pa 591 -1181}\special{pa 591 0}\special{pa 394 0}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 4}%
+\special{pa 591 0}\special{pa 591 -1457}\special{pa 787 -1457}\special{pa 787 0}\special{pa 591 0}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 4}%
+\special{pa 787 0}\special{pa 787 -1339}\special{pa 984 -1339}\special{pa 984 0}\special{pa 787 0}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 4}%
+\special{pa 984 0}\special{pa 984 -1063}\special{pa 1181 -1063}\special{pa 1181 0}%
+\special{pa 984 0}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 4}%
+\special{pa 1181 0}\special{pa 1181 -827}\special{pa 1378 -827}\special{pa 1378 0}%
+\special{pa 1181 0}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 4}%
+\special{pa 1378 0}\special{pa 1378 -512}\special{pa 1575 -512}\special{pa 1575 0}%
+\special{pa 1378 0}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 4}%
+\special{pa 1575 0}\special{pa 1575 -394}\special{pa 1772 -394}\special{pa 1772 0}%
+\special{pa 1575 0}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 4}%
+\special{pa 1772 0}\special{pa 1969 0}\special{pa 1772 0}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 4}%
+\special{pa 1969 0}\special{pa 1969 -79}\special{pa 2165 -79}\special{pa 2165 0}\special{pa 1969 0}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 4}%
+\special{pa 2165 0}\special{pa 2165 -39}\special{pa 2362 -39}\special{pa 2362 0}\special{pa 2165 0}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 4}%
+\special{pa 2362 0}\special{pa 2559 0}\special{pa 2362 0}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 4}%
+\special{pa 2559 0}\special{pa 2756 0}\special{pa 2559 0}%
+\special{fp}%
+\special{pn 8}%
+\special{pa -161 0}\special{pa 2770 0}%
+\special{fp}%
+\special{pa 0 152}\special{pa 0 -1734}%
+\special{fp}%
+\settowidth{\Width}{$x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(14.1200,0.0000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{\Depth}%
+\put(0.0000,8.8580){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+%
+\settowidth{\Width}{O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(-0.0500,-0.0500){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/polar-of-point.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/polar-of-point.pdf
new file mode 100644
index 0000000000..910ef1a01e
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/polar-of-point.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/polygon.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/polygon.pdf
new file mode 100644
index 0000000000..4de77b666e
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/polygon.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/polygonplane1.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/polygonplane1.tex
new file mode 100644
index 0000000000..a792107558
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/polygonplane1.tex
@@ -0,0 +1,126 @@
+%%% /Users/takatoosetsuo/Dropbox/kettoday/0905spatialfigure/fig/polygonplane1.tex
+%%% Generator=2Dfigures.cdy
+{\unitlength=6mm%
+\begin{picture}%
+(10.11,8.52)(-5,-4)%
+\special{pn 8}%
+%
+\special{pa -581 -436}\special{pa -116 -683}%
+\special{fp}%
+\special{pn 8}%
+\special{pa -662 -394}\special{pa -655 -397}\special{fp}\special{pa -623 -414}\special{pa -616 -418}\special{fp}%
+\special{pa -585 -434}\special{pa -578 -438}\special{fp}\special{pn 8}%
+\special{pa -116 -683}\special{pa 658 -482}%
+\special{fp}%
+\special{pa 658 -482}\special{pa 116 -194}%
+\special{fp}%
+\special{pn 8}%
+\special{pa -662 483}\special{pa -655 480}\special{fp}\special{pa -628 465}\special{pa -621 462}\special{fp}%
+\special{pa -594 447}\special{pa -587 444}\special{fp}\special{pa -560 429}\special{pa -553 426}\special{fp}%
+\special{pa -526 411}\special{pa -519 408}\special{fp}\special{pa -492 393}\special{pa -485 390}\special{fp}%
+\special{pa -458 376}\special{pa -451 372}\special{fp}\special{pa -424 358}\special{pa -417 354}\special{fp}%
+\special{pa -390 340}\special{pa -383 336}\special{fp}\special{pa -356 322}\special{pa -349 318}\special{fp}%
+\special{pa -323 304}\special{pa -315 300}\special{fp}\special{pa -289 286}\special{pa -282 282}\special{fp}%
+\special{pa -255 268}\special{pa -248 264}\special{fp}\special{pa -221 250}\special{pa -214 246}\special{fp}%
+\special{pa -187 232}\special{pa -180 228}\special{fp}\special{pa -153 214}\special{pa -146 210}\special{fp}%
+\special{pa -119 196}\special{pa -112 192}\special{fp}\special{pn 8}%
+\special{pn 8}%
+\special{pa -116 198}\special{pa -116 190}\special{fp}\special{pa -116 158}\special{pa -116 150}\special{fp}%
+\special{pa -116 118}\special{pa -116 110}\special{fp}\special{pa -116 78}\special{pa -116 70}\special{fp}%
+\special{pa -116 38}\special{pa -116 30}\special{fp}\special{pa -116 -1}\special{pa -116 -9}\special{fp}%
+\special{pa -116 -41}\special{pa -116 -49}\special{fp}\special{pa -116 -81}\special{pa -116 -89}\special{fp}%
+\special{pa -116 -121}\special{pa -116 -129}\special{fp}\special{pa -116 -161}\special{pa -116 -169}\special{fp}%
+\special{pa -116 -201}\special{pa -116 -209}\special{fp}\special{pa -116 -241}\special{pa -116 -249}\special{fp}%
+\special{pa -116 -281}\special{pa -116 -289}\special{fp}\special{pa -116 -320}\special{pa -116 -328}\special{fp}%
+\special{pa -116 -360}\special{pa -116 -368}\special{fp}\special{pa -116 -400}\special{pa -116 -408}\special{fp}%
+\special{pa -116 -440}\special{pa -116 -448}\special{fp}\special{pa -116 -480}\special{pa -116 -488}\special{fp}%
+\special{pa -116 -520}\special{pa -116 -528}\special{fp}\special{pa -116 -560}\special{pa -116 -568}\special{fp}%
+\special{pa -116 -600}\special{pa -116 -608}\special{fp}\special{pa -116 -639}\special{pa -116 -647}\special{fp}%
+\special{pa -116 -679}\special{pa -116 -687}\special{fp}\special{pn 8}%
+\special{pa -581 -436}\special{pa -116 -683}%
+\special{fp}%
+\special{pn 8}%
+\special{pa -662 -394}\special{pa -655 -397}\special{fp}\special{pa -623 -414}\special{pa -616 -418}\special{fp}%
+\special{pa -585 -434}\special{pa -578 -438}\special{fp}\special{pn 8}%
+\special{pa -658 482}\special{pa -658 -256}%
+\special{fp}%
+\special{pn 8}%
+\special{pa -658 -252}\special{pa -658 -260}\special{fp}\special{pa -658 -287}\special{pa -658 -295}\special{fp}%
+\special{pa -658 -322}\special{pa -658 -330}\special{fp}\special{pa -658 -357}\special{pa -658 -365}\special{fp}%
+\special{pa -658 -392}\special{pa -658 -400}\special{fp}\special{pn 8}%
+\special{pa -330 -310}\special{pa 116 -194}%
+\special{fp}%
+\special{pn 8}%
+\special{pa -662 -397}\special{pa -654 -395}\special{fp}\special{pa -625 -387}\special{pa -618 -385}\special{fp}%
+\special{pa -589 -378}\special{pa -581 -376}\special{fp}\special{pa -552 -368}\special{pa -545 -366}\special{fp}%
+\special{pa -516 -359}\special{pa -508 -357}\special{fp}\special{pa -480 -349}\special{pa -472 -347}\special{fp}%
+\special{pa -443 -340}\special{pa -435 -337}\special{fp}\special{pa -407 -330}\special{pa -399 -328}\special{fp}%
+\special{pa -370 -320}\special{pa -362 -318}\special{fp}\special{pa -334 -311}\special{pa -326 -309}\special{fp}%
+\special{pn 8}%
+\special{pa 116 683}\special{pa 116 424}%
+\special{fp}%
+\special{pa 116 -40}\special{pa 116 -194}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 116 428}\special{pa 116 420}\special{fp}\special{pa 116 389}\special{pa 116 381}\special{fp}%
+\special{pa 116 351}\special{pa 116 343}\special{fp}\special{pa 116 312}\special{pa 116 304}\special{fp}%
+\special{pa 116 273}\special{pa 116 265}\special{fp}\special{pa 116 235}\special{pa 116 227}\special{fp}%
+\special{pa 116 196}\special{pa 116 188}\special{fp}\special{pa 116 157}\special{pa 116 149}\special{fp}%
+\special{pa 116 119}\special{pa 116 111}\special{fp}\special{pa 116 80}\special{pa 116 72}\special{fp}%
+\special{pa 116 41}\special{pa 116 33}\special{fp}\special{pa 116 3}\special{pa 116 -5}\special{fp}%
+\special{pa 116 -36}\special{pa 116 -44}\special{fp}\special{pn 8}%
+\special{pa -658 482}\special{pa 116 683}%
+\special{fp}%
+\special{pa 658 396}\special{pa 333 568}%
+\special{fp}%
+\special{pa 213 631}\special{pa 116 683}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 336 566}\special{pa 329 570}\special{fp}\special{pa 297 587}\special{pa 289 591}\special{fp}%
+\special{pa 257 608}\special{pa 250 612}\special{fp}\special{pa 217 629}\special{pa 210 633}\special{fp}%
+\special{pn 8}%
+\special{pn 8}%
+\special{pa -119 193}\special{pa -112 195}\special{fp}\special{pa -81 203}\special{pa -73 205}\special{fp}%
+\special{pa -42 213}\special{pa -34 215}\special{fp}\special{pa -3 223}\special{pa 4 225}\special{fp}%
+\special{pa 35 233}\special{pa 43 235}\special{fp}\special{pa 74 243}\special{pa 82 245}\special{fp}%
+\special{pa 113 253}\special{pa 120 255}\special{fp}\special{pa 151 263}\special{pa 159 265}\special{fp}%
+\special{pa 190 274}\special{pa 198 276}\special{fp}\special{pa 229 284}\special{pa 236 286}\special{fp}%
+\special{pa 267 294}\special{pa 275 296}\special{fp}\special{pa 306 304}\special{pa 314 306}\special{fp}%
+\special{pa 345 314}\special{pa 353 316}\special{fp}\special{pa 383 324}\special{pa 391 326}\special{fp}%
+\special{pa 422 334}\special{pa 430 336}\special{fp}\special{pa 461 344}\special{pa 469 346}\special{fp}%
+\special{pa 499 354}\special{pa 507 356}\special{fp}\special{pa 538 364}\special{pa 546 366}\special{fp}%
+\special{pa 577 374}\special{pa 585 376}\special{fp}\special{pa 616 385}\special{pa 623 387}\special{fp}%
+\special{pa 654 395}\special{pa 662 397}\special{fp}\special{pn 8}%
+\special{pa 658 396}\special{pa 658 -482}%
+\special{fp}%
+\special{pa -116 -683}\special{pa 658 -482}%
+\special{fp}%
+\special{pa 658 -482}\special{pa 116 -194}%
+\special{fp}%
+\special{pa 445 881}\special{pa -19 648}%
+\special{fp}%
+\special{pn 8}%
+\special{pa -16 650}\special{pa -23 646}\special{fp}\special{pa -51 632}\special{pa -58 628}\special{fp}%
+\special{pa -87 614}\special{pa -94 611}\special{fp}\special{pa -122 597}\special{pa -129 593}\special{fp}%
+\special{pa -158 579}\special{pa -165 575}\special{fp}\special{pa -193 561}\special{pa -200 557}\special{fp}%
+\special{pa -228 543}\special{pa -236 540}\special{fp}\special{pa -264 525}\special{pa -271 522}\special{fp}%
+\special{pa -299 508}\special{pa -306 504}\special{fp}\special{pa -335 490}\special{pa -342 486}\special{fp}%
+\special{pa -370 472}\special{pa -377 468}\special{fp}\special{pa -406 454}\special{pa -413 451}\special{fp}%
+\special{pa -441 436}\special{pa -448 433}\special{fp}\special{pn 8}%
+\special{pa -658 -163}\special{pa -794 -543}%
+\special{fp}%
+\special{pn 8}%
+\special{pa -443 438}\special{pa -446 431}\special{fp}\special{pa -457 401}\special{pa -459 393}\special{fp}%
+\special{pa -470 364}\special{pa -473 356}\special{fp}\special{pa -483 326}\special{pa -486 319}\special{fp}%
+\special{pa -497 289}\special{pa -499 281}\special{fp}\special{pa -510 252}\special{pa -513 244}\special{fp}%
+\special{pa -523 214}\special{pa -526 207}\special{fp}\special{pa -537 177}\special{pa -539 169}\special{fp}%
+\special{pa -550 139}\special{pa -553 132}\special{fp}\special{pa -563 102}\special{pa -566 95}\special{fp}%
+\special{pa -577 65}\special{pa -579 57}\special{fp}\special{pa -590 27}\special{pa -593 20}\special{fp}%
+\special{pa -603 -10}\special{pa -606 -18}\special{fp}\special{pa -617 -47}\special{pa -619 -55}\special{fp}%
+\special{pa -630 -85}\special{pa -633 -92}\special{fp}\special{pa -643 -122}\special{pa -646 -130}\special{fp}%
+\special{pa -657 -159}\special{pa -659 -167}\special{fp}\special{pn 8}%
+\special{pa 95 -96}\special{pa -794 -543}%
+\special{fp}%
+\special{pa 445 881}\special{pa 95 -96}%
+\special{fp}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/polygonplane2.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/polygonplane2.tex
new file mode 100644
index 0000000000..c4351ab567
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/polygonplane2.tex
@@ -0,0 +1,60 @@
+%%% /Users/takatoosetsuo/Dropbox/kettoday/0905spatialfigure/fig/polygonplane2.tex
+%%% Generator=2Dfigures.cdy
+{\unitlength=6mm%
+\begin{picture}%
+(10.11,8.52)(-5,-4)%
+\special{pn 8}%
+%
+\special{pa -658 482}\special{pa -116 194}%
+\special{fp}%
+\special{pa -116 194}\special{pa -116 -153}%
+\special{fp}%
+\special{pa -116 -300}\special{pa -116 -683}%
+\special{fp}%
+\special{pa -658 -396}\special{pa -628 -411}%
+\special{fp}%
+\special{pa -534 -461}\special{pa -116 -683}%
+\special{fp}%
+\special{pa -658 482}\special{pa -658 -396}%
+\special{fp}%
+\special{pa -658 -396}\special{pa -412 -331}%
+\special{fp}%
+\special{pa -248 -289}\special{pa 116 -194}%
+\special{fp}%
+\special{pa 116 683}\special{pa 116 40}%
+\special{fp}%
+\special{pa 116 -120}\special{pa 116 -194}%
+\special{fp}%
+\special{pa -658 482}\special{pa 116 683}%
+\special{fp}%
+\special{pa 658 396}\special{pa 372 547}%
+\special{fp}%
+\special{pa 293 589}\special{pa 116 683}%
+\special{fp}%
+\special{pa -116 194}\special{pa 71 243}%
+\special{fp}%
+\special{pa 160 266}\special{pa 180 271}%
+\special{fp}%
+\special{pa 283 298}\special{pa 658 396}%
+\special{fp}%
+\special{pa 658 396}\special{pa 658 -482}%
+\special{fp}%
+\special{pa -116 -683}\special{pa 658 -482}%
+\special{fp}%
+\special{pa 658 -482}\special{pa 116 -194}%
+\special{fp}%
+\special{pa 445 881}\special{pa 57 686}%
+\special{fp}%
+\special{pa -95 610}\special{pa -445 435}%
+\special{fp}%
+\special{pa -445 435}\special{pa -449 421}%
+\special{fp}%
+\special{pa -480 337}\special{pa -631 -88}%
+\special{fp}%
+\special{pa -685 -238}\special{pa -794 -543}%
+\special{fp}%
+\special{pa 95 -96}\special{pa -794 -543}%
+\special{fp}%
+\special{pa 445 881}\special{pa 95 -96}%
+\special{fp}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/polygonplot1.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/polygonplot1.tex
new file mode 100644
index 0000000000..a4bde14e36
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/polygonplot1.tex
@@ -0,0 +1,26 @@
+%%% /Users/Hannya/Desktop/KeTCindy/fig/polygonplot1.tex
+%%% Generator=template1basic.cdy
+{\unitlength=6mm%
+\begin{picture}%
+(16.33,5.71)(-6.82,-1.78)%
+\special{pn 8}%
+%
+{%
+\color[rgb]{0,0,0}%
+\special{pa -945 -709}\special{pa -1314 -531}\special{pa -1405 -131}\special{pa -1150 189}%
+\special{pa -740 189}\special{pa -484 -131}\special{pa -576 -531}\special{pa -945 -709}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 236 -709}\special{pa -133 -531}\special{pa -224 -131}\special{pa 31 189}%
+\special{pa 441 189}\special{pa 697 -131}\special{pa 606 -531}\special{pa 236 -709}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 1417 -709}\special{pa 1048 -531}\special{pa 957 -131}\special{pa 1212 189}%
+\special{pa 1622 189}\special{pa 1878 -131}\special{pa 1787 -531}\special{pa 1417 -709}%
+\special{fp}%
+}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/polygonplot2.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/polygonplot2.pdf
new file mode 100644
index 0000000000..9346b826f5
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/polygonplot2.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ptcrv.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ptcrv.tex
new file mode 100644
index 0000000000..72f4b876bf
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ptcrv.tex
@@ -0,0 +1,101 @@
+%%% /Users/Hannya/Desktop/KeTCindy/fig/ptcrv.tex
+%%% Generator=template1basic.cdy
+{\unitlength=5mm%
+\begin{picture}%
+(12,10)(-6,-5)%
+\special{pn 8}%
+%
+\special{pa 920 -379}\special{pa 886 -422}\special{pa 849 -463}\special{pa 809 -502}%
+\special{pa 765 -539}\special{pa 719 -574}\special{pa 669 -607}\special{pa 617 -637}%
+\special{pa -521 0}\special{pa 920 -379}\special{pa 920 -379}\special{sh 0.1}\special{ip}%
+\special{pa 1050 -0}\special{pa 1048 -49}\special{pa 1042 -99}\special{pa 1031 -148}%
+\special{pa 1017 -196}\special{pa 998 -243}\special{pa 976 -290}\special{pa 950 -335}%
+\special{pa 920 -379}\special{pa 886 -422}\special{pa 849 -463}\special{pa 809 -502}%
+\special{pa 765 -539}\special{pa 719 -574}\special{pa 669 -607}\special{pa 617 -637}%
+\special{pa 563 -665}\special{pa 506 -690}\special{pa 447 -712}\special{pa 386 -732}%
+\special{pa 324 -749}\special{pa 261 -763}\special{pa 197 -773}\special{pa 132 -781}%
+\special{pa 66 -786}\special{pa -0 -787}\special{pa -66 -786}\special{pa -132 -781}%
+\special{pa -197 -773}\special{pa -261 -763}\special{pa -324 -749}\special{pa -386 -732}%
+\special{pa -447 -712}\special{pa -506 -690}\special{pa -563 -665}\special{pa -617 -637}%
+\special{pa -669 -607}\special{pa -719 -574}\special{pa -765 -539}\special{pa -809 -502}%
+\special{pa -849 -463}\special{pa -886 -422}\special{pa -920 -379}\special{pa -950 -335}%
+\special{pa -976 -290}\special{pa -998 -243}\special{pa -1017 -196}\special{pa -1031 -148}%
+\special{pa -1042 -99}\special{pa -1048 -49}\special{pa -1050 0}\special{pa -1048 49}%
+\special{pa -1042 99}\special{pa -1031 148}\special{pa -1017 196}\special{pa -998 243}%
+\special{pa -976 290}\special{pa -950 335}\special{pa -920 379}\special{pa -886 422}%
+\special{pa -849 463}\special{pa -809 502}\special{pa -765 539}\special{pa -719 574}%
+\special{pa -669 607}\special{pa -617 637}\special{pa -563 665}\special{pa -506 690}%
+\special{pa -447 712}\special{pa -386 732}\special{pa -324 749}\special{pa -261 763}%
+\special{pa -197 773}\special{pa -132 781}\special{pa -66 786}\special{pa -0 787}%
+\special{pa 66 786}\special{pa 132 781}\special{pa 197 773}\special{pa 261 763}%
+\special{pa 324 749}\special{pa 386 732}\special{pa 447 712}\special{pa 506 690}%
+\special{pa 563 665}\special{pa 617 637}\special{pa 669 607}\special{pa 719 574}%
+\special{pa 765 539}\special{pa 809 502}\special{pa 849 463}\special{pa 886 422}%
+\special{pa 920 379}\special{pa 950 335}\special{pa 976 290}\special{pa 998 243}%
+\special{pa 1017 196}\special{pa 1031 148}\special{pa 1042 99}\special{pa 1048 49}%
+\special{pa 1050 0}%
+\special{fp}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 920 -379}\special{pa 882 -369}\special{fp}\special{pa 844 -359}\special{pa 806 -349}\special{fp}%
+\special{pa 768 -339}\special{pa 730 -329}\special{fp}\special{pa 692 -319}\special{pa 654 -309}\special{fp}%
+\special{pa 616 -299}\special{pa 578 -289}\special{fp}\special{pa 539 -279}\special{pa 501 -269}\special{fp}%
+\special{pa 463 -259}\special{pa 425 -249}\special{fp}\special{pa 387 -239}\special{pa 349 -229}\special{fp}%
+\special{pa 311 -219}\special{pa 273 -209}\special{fp}\special{pa 235 -199}\special{pa 197 -189}\special{fp}%
+\special{pa 159 -179}\special{pa 121 -169}\special{fp}\special{pa 83 -159}\special{pa 45 -149}\special{fp}%
+\special{pa 7 -139}\special{pa -31 -129}\special{fp}\special{pa -69 -119}\special{pa -107 -109}\special{fp}%
+\special{pa -146 -99}\special{pa -184 -89}\special{fp}\special{pa -222 -79}\special{pa -260 -69}\special{fp}%
+\special{pa -298 -59}\special{pa -336 -49}\special{fp}\special{pa -374 -39}\special{pa -412 -29}\special{fp}%
+\special{pa -450 -19}\special{pa -488 -9}\special{fp}\special{pa -516 -3}\special{pa -482 -22}\special{fp}%
+\special{pa -447 -41}\special{pa -413 -60}\special{fp}\special{pa -379 -80}\special{pa -344 -99}\special{fp}%
+\special{pa -310 -118}\special{pa -276 -137}\special{fp}\special{pa -241 -156}\special{pa -207 -176}\special{fp}%
+\special{pa -173 -195}\special{pa -138 -214}\special{fp}\special{pa -104 -233}\special{pa -70 -253}\special{fp}%
+\special{pa -35 -272}\special{pa -1 -291}\special{fp}\special{pa 33 -310}\special{pa 68 -329}\special{fp}%
+\special{pa 102 -349}\special{pa 136 -368}\special{fp}\special{pa 171 -387}\special{pa 205 -406}\special{fp}%
+\special{pa 239 -426}\special{pa 274 -445}\special{fp}\special{pa 308 -464}\special{pa 342 -483}\special{fp}%
+\special{pa 377 -502}\special{pa 411 -522}\special{fp}\special{pa 445 -541}\special{pa 480 -560}\special{fp}%
+\special{pa 514 -579}\special{pa 548 -599}\special{fp}\special{pa 583 -618}\special{pa 617 -637}\special{fp}%
+%
+%
+}%
+\special{pn 24}%
+\special{pa 920 -379}\special{pa 886 -422}\special{pa 849 -463}\special{pa 809 -502}%
+\special{pa 765 -539}\special{pa 719 -574}\special{pa 669 -607}\special{pa 617 -637}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 732 -609}\special{pa 617 -637}\special{pa 693 -547}\special{pa 713 -578}%
+\special{pa 732 -609}\special{sh 1}\special{ip}%
+\special{pn 1}%
+\special{pa 732 -609}\special{pa 617 -637}\special{pa 693 -547}\special{pa 713 -578}%
+\special{pa 732 -609}\special{pa 617 -637}%
+\special{fp}%
+\special{pn 8}%
+\settowidth{\Width}{A}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{A}\settodepth{\Depth}{A}\setlength{\Height}{\Depth}%
+\put(4.7700000,2.0300000){\hspace*{\Width}\raisebox{\Height}{A}}%
+%
+\settowidth{\Width}{B}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{B}\settodepth{\Depth}{B}\setlength{\Height}{\Depth}%
+\put(3.2300000,3.3400000){\hspace*{\Width}\raisebox{\Height}{B}}%
+%
+\settowidth{\Width}{F}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{F}\settodepth{\Depth}{F}\setlength{\Height}{-\Height}%
+\put(-2.6500000,-0.3000000){\hspace*{\Width}\raisebox{\Height}{F}}%
+%
+\special{pa -1181 -0}\special{pa 1181 -0}%
+\special{fp}%
+\special{pa 0 984}\special{pa 0 -984}%
+\special{fp}%
+\settowidth{\Width}{$x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(6.1000000,0.0000000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{\Depth}%
+\put(0.0000000,5.1000000){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+\settowidth{\Width}{O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(-0.1000000,-0.1000000){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ptselected01.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ptselected01.pdf
new file mode 100644
index 0000000000..637e9155f2
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ptselected01.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ptselected02.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ptselected02.pdf
new file mode 100644
index 0000000000..fe8e7c38bf
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ptselected02.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ptstart.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ptstart.tex
new file mode 100644
index 0000000000..fbe579fbea
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ptstart.tex
@@ -0,0 +1,125 @@
+%%% /Users/Hannya/Desktop/KeTCindy/fig/ptstart.tex
+%%% Generator=template1basic.cdy
+{\unitlength=7mm%
+\begin{picture}%
+(6,6)(-3,-1)%
+\special{pn 8}%
+%
+\special{pn 8}%
+\special{pa -617 -1382}\special{pa -615 -1374}\special{fp}\special{pa -608 -1343}\special{pa -606 -1335}\special{fp}%
+\special{pa -600 -1305}\special{pa -598 -1297}\special{fp}\special{pa -591 -1266}\special{pa -589 -1258}\special{fp}%
+\special{pa -581 -1228}\special{pa -580 -1220}\special{fp}\special{pa -572 -1189}\special{pa -570 -1181}\special{fp}%
+\special{pa -563 -1151}\special{pa -561 -1143}\special{fp}\special{pa -553 -1112}\special{pa -551 -1104}\special{fp}%
+\special{pa -544 -1074}\special{pa -542 -1066}\special{fp}\special{pa -534 -1035}\special{pa -532 -1028}\special{fp}%
+\special{pa -524 -997}\special{pa -522 -989}\special{fp}\special{pa -514 -959}\special{pa -512 -951}\special{fp}%
+\special{pa -504 -921}\special{pa -501 -913}\special{fp}\special{pa -493 -883}\special{pa -491 -875}\special{fp}%
+\special{pa -482 -844}\special{pa -480 -837}\special{fp}\special{pa -471 -806}\special{pa -469 -799}\special{fp}%
+\special{pa -460 -768}\special{pa -458 -761}\special{fp}\special{pa -448 -731}\special{pa -446 -723}\special{fp}%
+\special{pa -437 -693}\special{pa -434 -685}\special{fp}\special{pa -425 -655}\special{pa -422 -647}\special{fp}%
+\special{pa -412 -618}\special{pa -410 -610}\special{fp}\special{pa -400 -580}\special{pa -397 -572}\special{fp}%
+\special{pa -386 -543}\special{pa -384 -535}\special{fp}\special{pa -373 -505}\special{pa -370 -498}\special{fp}%
+\special{pa -359 -468}\special{pa -356 -461}\special{fp}\special{pa -345 -432}\special{pa -342 -424}\special{fp}%
+\special{pa -330 -395}\special{pa -327 -388}\special{fp}\special{pa -314 -359}\special{pa -311 -351}\special{fp}%
+\special{pa -298 -322}\special{pa -295 -315}\special{fp}\special{pa -281 -287}\special{pa -277 -280}\special{fp}%
+\special{pa -263 -251}\special{pa -259 -244}\special{fp}\special{pa -244 -217}\special{pa -240 -210}\special{fp}%
+\special{pa -224 -183}\special{pa -220 -176}\special{fp}\special{pa -203 -149}\special{pa -198 -143}\special{fp}%
+\special{pa -179 -117}\special{pa -174 -111}\special{fp}\special{pa -154 -87}\special{pa -149 -81}\special{fp}%
+\special{pa -126 -59}\special{pa -120 -53}\special{fp}\special{pa -96 -34}\special{pa -89 -29}\special{fp}%
+\special{pa -61 -14}\special{pa -54 -11}\special{fp}\special{pa -24 -3}\special{pa -16 -2}\special{fp}%
+\special{pa 16 -2}\special{pa 24 -3}\special{fp}\special{pa 54 -11}\special{pa 61 -14}\special{fp}%
+\special{pa 89 -29}\special{pa 96 -34}\special{fp}\special{pa 120 -53}\special{pa 126 -59}\special{fp}%
+\special{pa 149 -81}\special{pa 154 -87}\special{fp}\special{pa 174 -111}\special{pa 179 -117}\special{fp}%
+\special{pa 198 -143}\special{pa 203 -149}\special{fp}\special{pa 220 -176}\special{pa 224 -183}\special{fp}%
+\special{pa 240 -210}\special{pa 244 -217}\special{fp}\special{pa 259 -244}\special{pa 263 -251}\special{fp}%
+\special{pa 277 -280}\special{pa 281 -287}\special{fp}\special{pa 295 -315}\special{pa 298 -322}\special{fp}%
+\special{pa 311 -351}\special{pa 314 -359}\special{fp}\special{pa 327 -388}\special{pa 330 -395}\special{fp}%
+\special{pa 342 -424}\special{pa 345 -432}\special{fp}\special{pa 356 -461}\special{pa 359 -468}\special{fp}%
+\special{pa 370 -498}\special{pa 373 -505}\special{fp}\special{pa 384 -535}\special{pa 386 -543}\special{fp}%
+\special{pa 397 -572}\special{pa 400 -580}\special{fp}\special{pa 410 -610}\special{pa 412 -618}\special{fp}%
+\special{pa 422 -647}\special{pa 425 -655}\special{fp}\special{pa 434 -685}\special{pa 437 -693}\special{fp}%
+\special{pa 446 -723}\special{pa 448 -731}\special{fp}\special{pa 458 -761}\special{pa 460 -768}\special{fp}%
+\special{pa 469 -799}\special{pa 471 -806}\special{fp}\special{pa 480 -837}\special{pa 482 -844}\special{fp}%
+\special{pa 491 -875}\special{pa 493 -883}\special{fp}\special{pa 501 -913}\special{pa 504 -921}\special{fp}%
+\special{pa 512 -951}\special{pa 514 -959}\special{fp}\special{pa 522 -989}\special{pa 524 -997}\special{fp}%
+\special{pa 532 -1028}\special{pa 534 -1035}\special{fp}\special{pa 542 -1066}\special{pa 544 -1074}\special{fp}%
+\special{pa 551 -1104}\special{pa 553 -1112}\special{fp}\special{pa 561 -1143}\special{pa 563 -1151}\special{fp}%
+\special{pa 570 -1181}\special{pa 572 -1189}\special{fp}\special{pa 580 -1220}\special{pa 581 -1228}\special{fp}%
+\special{pa 589 -1258}\special{pa 591 -1266}\special{fp}\special{pa 598 -1297}\special{pa 600 -1305}\special{fp}%
+\special{pa 606 -1335}\special{pa 608 -1343}\special{fp}\special{pa 615 -1374}\special{pa 617 -1382}\special{fp}%
+\special{pn 8}%
+\special{pa -276 -276}\special{pa -259 -244}\special{pa -243 -213}\special{pa -226 -185}%
+\special{pa -209 -159}\special{pa -193 -135}\special{pa -176 -113}\special{pa -160 -93}%
+\special{pa -143 -75}\special{pa -127 -58}\special{pa -110 -44}\special{pa -94 -32}%
+\special{pa -77 -22}\special{pa -61 -13}\special{pa -44 -7}\special{pa -28 -3}%
+\special{pa -11 -0}\special{pa 6 -0}\special{pa 22 -2}\special{pa 39 -5}%
+\special{pa 55 -11}\special{pa 72 -19}\special{pa 88 -28}\special{pa 105 -40}%
+\special{pa 121 -53}\special{pa 138 -69}\special{pa 154 -86}\special{pa 171 -106}%
+\special{pa 187 -127}\special{pa 204 -151}\special{pa 220 -176}\special{pa 237 -204}%
+\special{pa 254 -233}\special{pa 270 -265}\special{pa 287 -298}\special{pa 303 -333}%
+\special{pa 320 -371}\special{pa 336 -410}\special{pa 353 -452}\special{pa 369 -495}%
+\special{pa 386 -540}\special{pa 402 -587}\special{pa 419 -637}\special{pa 435 -688}%
+\special{pa 452 -741}\special{pa 469 -796}\special{pa 485 -854}\special{pa 502 -913}%
+\special{pa 518 -974}\special{pa 535 -1037}\special{pa 551 -1102}%
+\special{fp}%
+\special{pn 8}%
+\special{pa -830 278}\special{pa -824 273}\special{fp}\special{pa -802 250}\special{pa -796 245}\special{fp}%
+\special{pa -774 222}\special{pa -768 217}\special{fp}\special{pa -746 194}\special{pa -740 189}\special{fp}%
+\special{pa -717 166}\special{pa -712 161}\special{fp}\special{pa -689 138}\special{pa -684 133}\special{fp}%
+\special{pa -661 110}\special{pa -656 105}\special{fp}\special{pa -633 82}\special{pa -628 77}\special{fp}%
+\special{pa -605 54}\special{pa -600 49}\special{fp}\special{pa -577 26}\special{pa -572 21}\special{fp}%
+\special{pa -549 -2}\special{pa -544 -7}\special{fp}\special{pa -521 -30}\special{pa -516 -36}\special{fp}%
+\special{pa -493 -58}\special{pa -488 -64}\special{fp}\special{pa -465 -86}\special{pa -460 -92}\special{fp}%
+\special{pa -437 -114}\special{pa -432 -120}\special{fp}\special{pa -409 -142}\special{pa -404 -148}\special{fp}%
+\special{pa -381 -170}\special{pa -376 -176}\special{fp}\special{pa -353 -198}\special{pa -347 -204}\special{fp}%
+\special{pa -325 -226}\special{pa -319 -232}\special{fp}\special{pa -297 -254}\special{pa -291 -260}\special{fp}%
+\special{pa -269 -282}\special{pa -263 -288}\special{fp}\special{pa -241 -310}\special{pa -235 -316}\special{fp}%
+\special{pa -213 -338}\special{pa -207 -344}\special{fp}\special{pa -185 -366}\special{pa -179 -372}\special{fp}%
+\special{pa -157 -394}\special{pa -151 -400}\special{fp}\special{pa -129 -422}\special{pa -123 -428}\special{fp}%
+\special{pa -101 -450}\special{pa -95 -456}\special{fp}\special{pa -73 -478}\special{pa -67 -484}\special{fp}%
+\special{pa -45 -506}\special{pa -39 -512}\special{fp}\special{pa -17 -534}\special{pa -11 -540}\special{fp}%
+\special{pa 11 -562}\special{pa 17 -568}\special{fp}\special{pa 39 -590}\special{pa 45 -596}\special{fp}%
+\special{pa 67 -618}\special{pa 73 -624}\special{fp}\special{pa 95 -646}\special{pa 101 -652}\special{fp}%
+\special{pa 123 -674}\special{pa 129 -680}\special{fp}\special{pa 151 -702}\special{pa 157 -708}\special{fp}%
+\special{pa 179 -731}\special{pa 185 -736}\special{fp}\special{pa 207 -759}\special{pa 213 -764}\special{fp}%
+\special{pa 235 -787}\special{pa 241 -792}\special{fp}\special{pa 263 -815}\special{pa 269 -820}\special{fp}%
+\special{pa 291 -843}\special{pa 297 -848}\special{fp}\special{pa 319 -871}\special{pa 325 -876}\special{fp}%
+\special{pa 347 -899}\special{pa 353 -904}\special{fp}\special{pa 376 -927}\special{pa 381 -932}\special{fp}%
+\special{pa 404 -955}\special{pa 409 -960}\special{fp}\special{pa 432 -983}\special{pa 437 -988}\special{fp}%
+\special{pa 460 -1011}\special{pa 465 -1016}\special{fp}\special{pa 488 -1039}\special{pa 493 -1044}\special{fp}%
+\special{pa 516 -1067}\special{pa 521 -1072}\special{fp}\special{pa 544 -1095}\special{pa 549 -1101}\special{fp}%
+\special{pa 572 -1123}\special{pa 577 -1129}\special{fp}\special{pa 600 -1151}\special{pa 605 -1157}\special{fp}%
+\special{pa 628 -1179}\special{pa 633 -1185}\special{fp}\special{pa 656 -1207}\special{pa 661 -1213}\special{fp}%
+\special{pa 684 -1235}\special{pa 689 -1241}\special{fp}\special{pa 712 -1263}\special{pa 717 -1269}\special{fp}%
+\special{pa 740 -1291}\special{pa 746 -1297}\special{fp}\special{pa 768 -1319}\special{pa 774 -1325}\special{fp}%
+\special{pa 796 -1347}\special{pa 802 -1353}\special{fp}\special{pa 824 -1375}\special{pa 830 -1381}\special{fp}%
+\special{pn 8}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa -276 -276}\special{pa 551 -1102}%
+\special{fp}%
+}%
+\settowidth{\Width}{A}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{A}\settodepth{\Depth}{A}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-1.2142857,1.0000000){\hspace*{\Width}\raisebox{\Height}{A}}%
+%
+\settowidth{\Width}{B}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{B}\settodepth{\Depth}{B}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.2142857,4.0000000){\hspace*{\Width}\raisebox{\Height}{B}}%
+%
+\special{pa -827 -0}\special{pa 827 -0}%
+\special{fp}%
+\special{pa 0 276}\special{pa 0 -1378}%
+\special{fp}%
+\settowidth{\Width}{$x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(3.0714286,0.0000000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{\Depth}%
+\put(0.0000000,5.0714286){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+\settowidth{\Width}{O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(-0.0714286,-0.0714286){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/putcell.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/putcell.tex
new file mode 100644
index 0000000000..cad4dabd6d
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/putcell.tex
@@ -0,0 +1,94 @@
+%%% /Users/Hannya/Desktop/KeTCindy/fig/putcell.tex
+%%% Generator=template1basic.cdy
+{\unitlength=7mm%
+\begin{picture}%
+(10,4)(0,0)%
+\special{pn 8}%
+%
+\special{pa 0 -1102}\special{pa 0 -0}%
+\special{fp}%
+\special{pa 1102 -1102}\special{pa 1102 -0}%
+\special{fp}%
+\special{pa 1654 -1102}\special{pa 1654 -0}%
+\special{fp}%
+\special{pa 2756 -1102}\special{pa 2756 -0}%
+\special{fp}%
+\special{pa 0 -1102}\special{pa 2756 -1102}%
+\special{fp}%
+\special{pa 0 -551}\special{pa 2756 -551}%
+\special{fp}%
+\special{pa 0 -0}\special{pa 2756 -0}%
+\special{fp}%
+\special{pa 551 -1102}\special{pa 551 -551}%
+\special{fp}%
+\special{pa 2205 -1102}\special{pa 2205 -551}%
+\special{fp}%
+\settowidth{\Width}{A}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{A}\settodepth{\Depth}{A}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(1.0000000,3.0000000){\hspace*{\Width}\raisebox{\Height}{A}}%
+%
+\settowidth{\Width}{B}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{B}\settodepth{\Depth}{B}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(3.9285714,3.0000000){\hspace*{\Width}\raisebox{\Height}{B}}%
+%
+\settowidth{\Width}{C}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{C}\settodepth{\Depth}{C}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.0714286,3.0000000){\hspace*{\Width}\raisebox{\Height}{C}}%
+%
+\settowidth{\Width}{D}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{D}\settodepth{\Depth}{D}\setlength{\Height}{-\Height}%
+\put(7.0000000,3.9285714){\hspace*{\Width}\raisebox{\Height}{D}}%
+%
+\settowidth{\Width}{E}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{E}\settodepth{\Depth}{E}\setlength{\Height}{\Depth}%
+\put(9.0000000,2.0714286){\hspace*{\Width}\raisebox{\Height}{E}}%
+%
+\settowidth{\Width}{F}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{F}\settodepth{\Depth}{F}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.0000000,1.0000000){\hspace*{\Width}\raisebox{\Height}{F}}%
+%
+\settowidth{\Width}{G}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{G}\settodepth{\Depth}{G}\setlength{\Height}{\Depth}%
+\put(4.0714286,0.0714286){\hspace*{\Width}\raisebox{\Height}{G}}%
+%
+\settowidth{\Width}{H}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{H}\settodepth{\Depth}{H}\setlength{\Height}{-\Height}%
+\put(9.9285714,1.9285714){\hspace*{\Width}\raisebox{\Height}{H}}%
+%
+\settowidth{\Width}{c0}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{c0}\settodepth{\Depth}{c0}\setlength{\Height}{\Depth}%
+\put(0.0714286,4.2142857){\hspace*{\Width}\raisebox{\Height}{c0}}%
+%
+\settowidth{\Width}{c1}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{c1}\settodepth{\Depth}{c1}\setlength{\Height}{\Depth}%
+\put(2.0714286,4.2142857){\hspace*{\Width}\raisebox{\Height}{c1}}%
+%
+\settowidth{\Width}{c2}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{c2}\settodepth{\Depth}{c2}\setlength{\Height}{\Depth}%
+\put(4.0714286,4.2142857){\hspace*{\Width}\raisebox{\Height}{c2}}%
+%
+\settowidth{\Width}{c3}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{c3}\settodepth{\Depth}{c3}\setlength{\Height}{\Depth}%
+\put(6.0714286,4.2142857){\hspace*{\Width}\raisebox{\Height}{c3}}%
+%
+\settowidth{\Width}{c4}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{c4}\settodepth{\Depth}{c4}\setlength{\Height}{\Depth}%
+\put(8.0714286,4.2142857){\hspace*{\Width}\raisebox{\Height}{c4}}%
+%
+\settowidth{\Width}{c5}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{c5}\settodepth{\Depth}{c5}\setlength{\Height}{\Depth}%
+\put(10.0714286,4.2142857){\hspace*{\Width}\raisebox{\Height}{c5}}%
+%
+\settowidth{\Width}{r2}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{r2}\settodepth{\Depth}{r2}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-0.0714286,0.0000000){\hspace*{\Width}\raisebox{\Height}{r2}}%
+%
+\settowidth{\Width}{r1}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{r1}\settodepth{\Depth}{r1}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-0.0714286,2.0000000){\hspace*{\Width}\raisebox{\Height}{r1}}%
+%
+\settowidth{\Width}{r0}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{r0}\settodepth{\Depth}{r0}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-0.0714286,4.0000000){\hspace*{\Width}\raisebox{\Height}{r0}}%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/putcol.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/putcol.tex
new file mode 100644
index 0000000000..fa7e744df1
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/putcol.tex
@@ -0,0 +1,122 @@
+%%% /Users/Hannya/Desktop/KeTCindy/fig/putcol.tex
+%%% Generator=template1basic.cdy
+{\unitlength=7mm%
+\begin{picture}%
+(10,4.5)(0,0)%
+\special{pn 8}%
+%
+\special{pa 0 -1240}\special{pa 0 -0}%
+\special{fp}%
+\special{pa 1102 -1240}\special{pa 1102 -0}%
+\special{fp}%
+\special{pa 1654 -1240}\special{pa 1654 -0}%
+\special{fp}%
+\special{pa 2205 -1240}\special{pa 2205 -0}%
+\special{fp}%
+\special{pa 2756 -1240}\special{pa 2756 -0}%
+\special{fp}%
+\special{pa 0 -1240}\special{pa 2756 -1240}%
+\special{fp}%
+\special{pa 0 -0}\special{pa 2756 -0}%
+\special{fp}%
+\special{pa 551 -1240}\special{pa 551 -827}%
+\special{fp}%
+\special{pa 551 -413}\special{pa 551 -0}%
+\special{fp}%
+\special{pa 0 -827}\special{pa 1102 -827}%
+\special{fp}%
+\special{pa 1654 -827}\special{pa 2756 -827}%
+\special{fp}%
+\special{pa 0 -413}\special{pa 1102 -413}%
+\special{fp}%
+\special{pa 1654 -413}\special{pa 2756 -413}%
+\special{fp}%
+\settowidth{\Width}{A}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{A}\settodepth{\Depth}{A}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(5.0000000,3.7500000){\hspace*{\Width}\raisebox{\Height}{A}}%
+%
+\settowidth{\Width}{B}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{B}\settodepth{\Depth}{B}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(5.0000000,2.2500000){\hspace*{\Width}\raisebox{\Height}{B}}%
+%
+\settowidth{\Width}{C}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{C}\settodepth{\Depth}{C}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(5.0000000,0.7500000){\hspace*{\Width}\raisebox{\Height}{C}}%
+%
+\settowidth{\Width}{$x^2$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$x^2$}\settodepth{\Depth}{$x^2$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(6.0714286,3.7500000){\hspace*{\Width}\raisebox{\Height}{$x^2$}}%
+%
+\settowidth{\Width}{$y=\sqrt{x^3}$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$y=\sqrt{x^3}$}\settodepth{\Depth}{$y=\sqrt{x^3}$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(6.0714286,2.2500000){\hspace*{\Width}\raisebox{\Height}{$y=\sqrt{x^3}$}}%
+%
+\settowidth{\Width}{1}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{1}\settodepth{\Depth}{1}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(1.0000000,3.7500000){\hspace*{\Width}\raisebox{\Height}{1}}%
+%
+\settowidth{\Width}{二}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{二}\settodepth{\Depth}{二}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(3.0000000,3.7500000){\hspace*{\Width}\raisebox{\Height}{二}}%
+%
+\settowidth{\Width}{$$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$$}\settodepth{\Depth}{$$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(1.0000000,0.7500000){\hspace*{\Width}\raisebox{\Height}{$$}}%
+%
+\settowidth{\Width}{$\frac{\pi}{2}$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\frac{\pi}{2}$}\settodepth{\Depth}{$\frac{\pi}{2}$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(3.0000000,0.7500000){\hspace*{\Width}\raisebox{\Height}{$\frac{\pi}{2}$}}%
+%
+\settowidth{\Width}{$$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$$}\settodepth{\Depth}{$$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(5.0000000,0.7500000){\hspace*{\Width}\raisebox{\Height}{$$}}%
+%
+\settowidth{\Width}{$$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$$}\settodepth{\Depth}{$$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(7.0000000,0.7500000){\hspace*{\Width}\raisebox{\Height}{$$}}%
+%
+\settowidth{\Width}{$\sum{x^2}$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\sum{x^2}$}\settodepth{\Depth}{$\sum{x^2}$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(9.0000000,0.7500000){\hspace*{\Width}\raisebox{\Height}{$\sum{x^2}$}}%
+%
+\settowidth{\Width}{c0}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{c0}\settodepth{\Depth}{c0}\setlength{\Height}{\Depth}%
+\put(0.0714286,4.7142857){\hspace*{\Width}\raisebox{\Height}{c0}}%
+%
+\settowidth{\Width}{c1}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{c1}\settodepth{\Depth}{c1}\setlength{\Height}{\Depth}%
+\put(2.0714286,4.7142857){\hspace*{\Width}\raisebox{\Height}{c1}}%
+%
+\settowidth{\Width}{c2}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{c2}\settodepth{\Depth}{c2}\setlength{\Height}{\Depth}%
+\put(4.0714286,4.7142857){\hspace*{\Width}\raisebox{\Height}{c2}}%
+%
+\settowidth{\Width}{c3}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{c3}\settodepth{\Depth}{c3}\setlength{\Height}{\Depth}%
+\put(6.0714286,4.7142857){\hspace*{\Width}\raisebox{\Height}{c3}}%
+%
+\settowidth{\Width}{c4}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{c4}\settodepth{\Depth}{c4}\setlength{\Height}{\Depth}%
+\put(8.0714286,4.7142857){\hspace*{\Width}\raisebox{\Height}{c4}}%
+%
+\settowidth{\Width}{c5}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{c5}\settodepth{\Depth}{c5}\setlength{\Height}{\Depth}%
+\put(10.0714286,4.7142857){\hspace*{\Width}\raisebox{\Height}{c5}}%
+%
+\settowidth{\Width}{r3}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{r3}\settodepth{\Depth}{r3}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-0.0714286,0.0000000){\hspace*{\Width}\raisebox{\Height}{r3}}%
+%
+\settowidth{\Width}{r2}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{r2}\settodepth{\Depth}{r2}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-0.0714286,1.5000000){\hspace*{\Width}\raisebox{\Height}{r2}}%
+%
+\settowidth{\Width}{r1}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{r1}\settodepth{\Depth}{r1}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-0.0714286,3.0000000){\hspace*{\Width}\raisebox{\Height}{r1}}%
+%
+\settowidth{\Width}{r0}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{r0}\settodepth{\Depth}{r0}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-0.0714286,4.5000000){\hspace*{\Width}\raisebox{\Height}{r0}}%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/putcolE.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/putcolE.tex
new file mode 100644
index 0000000000..07a1de3fe3
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/putcolE.tex
@@ -0,0 +1,122 @@
+%%% /Users/Hannya/Desktop/KeTCindy/fig/putcol.tex
+%%% Generator=template1basic.cdy
+{\unitlength=7mm%
+\begin{picture}%
+(10,4.5)(0,0)%
+\special{pn 8}%
+%
+\special{pa 0 -1240}\special{pa 0 -0}%
+\special{fp}%
+\special{pa 1102 -1240}\special{pa 1102 -0}%
+\special{fp}%
+\special{pa 1654 -1240}\special{pa 1654 -0}%
+\special{fp}%
+\special{pa 2205 -1240}\special{pa 2205 -0}%
+\special{fp}%
+\special{pa 2756 -1240}\special{pa 2756 -0}%
+\special{fp}%
+\special{pa 0 -1240}\special{pa 2756 -1240}%
+\special{fp}%
+\special{pa 0 -0}\special{pa 2756 -0}%
+\special{fp}%
+\special{pa 551 -1240}\special{pa 551 -827}%
+\special{fp}%
+\special{pa 551 -413}\special{pa 551 -0}%
+\special{fp}%
+\special{pa 0 -827}\special{pa 1102 -827}%
+\special{fp}%
+\special{pa 1654 -827}\special{pa 2756 -827}%
+\special{fp}%
+\special{pa 0 -413}\special{pa 1102 -413}%
+\special{fp}%
+\special{pa 1654 -413}\special{pa 2756 -413}%
+\special{fp}%
+\settowidth{\Width}{A}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{A}\settodepth{\Depth}{A}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(5.0000000,3.7500000){\hspace*{\Width}\raisebox{\Height}{A}}%
+%
+\settowidth{\Width}{B}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{B}\settodepth{\Depth}{B}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(5.0000000,2.2500000){\hspace*{\Width}\raisebox{\Height}{B}}%
+%
+\settowidth{\Width}{C}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{C}\settodepth{\Depth}{C}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(5.0000000,0.7500000){\hspace*{\Width}\raisebox{\Height}{C}}%
+%
+\settowidth{\Width}{{\footnotesize $x^2$}}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{{\footnotesize $x^2$}}\settodepth{\Depth}{{\footnotesize $x^2$}}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(6.0714286,3.7500000){\hspace*{\Width}\raisebox{\Height}{{\footnotesize $x^2$}}}%
+%
+\settowidth{\Width}{{\footnotesize $y=\sqrt{x^3}$}}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{{\footnotesize $y=\sqrt{x^3}$}}\settodepth{\Depth}{{\footnotesize $y=\sqrt{x^3}$}}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(6.0714286,2.2500000){\hspace*{\Width}\raisebox{\Height}{{\footnotesize $y=\sqrt{x^3}$}}}%
+%
+\settowidth{\Width}{1}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{1}\settodepth{\Depth}{1}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(1.0000000,3.7500000){\hspace*{\Width}\raisebox{\Height}{1}}%
+%
+\settowidth{\Width}{two}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{two}\settodepth{\Depth}{two}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(3.0000000,3.7500000){\hspace*{\Width}\raisebox{\Height}{two}}%
+%
+\settowidth{\Width}{$$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$$}\settodepth{\Depth}{$$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(1.0000000,0.7500000){\hspace*{\Width}\raisebox{\Height}{$$}}%
+%
+\settowidth{\Width}{$\frac{\pi}{2}$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\frac{\pi}{2}$}\settodepth{\Depth}{$\frac{\pi}{2}$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(3.0000000,0.7500000){\hspace*{\Width}\raisebox{\Height}{$\frac{\pi}{2}$}}%
+%
+\settowidth{\Width}{$$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$$}\settodepth{\Depth}{$$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(5.0000000,0.7500000){\hspace*{\Width}\raisebox{\Height}{$$}}%
+%
+\settowidth{\Width}{$$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$$}\settodepth{\Depth}{$$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(7.0000000,0.7500000){\hspace*{\Width}\raisebox{\Height}{$$}}%
+%
+\settowidth{\Width}{{\footnotesize $\sum{x^2}$}}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{{\footnotesize $\sum{x^2}$}}\settodepth{\Depth}{{\footnotesize $\sum{x^2}$}}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(9.0000000,0.7500000){\hspace*{\Width}\raisebox{\Height}{{\footnotesize $\sum{x^2}$}}}%
+%
+\settowidth{\Width}{c0}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{c0}\settodepth{\Depth}{c0}\setlength{\Height}{\Depth}%
+\put(0.0714286,4.7142857){\hspace*{\Width}\raisebox{\Height}{c0}}%
+%
+\settowidth{\Width}{c1}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{c1}\settodepth{\Depth}{c1}\setlength{\Height}{\Depth}%
+\put(2.0714286,4.7142857){\hspace*{\Width}\raisebox{\Height}{c1}}%
+%
+\settowidth{\Width}{c2}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{c2}\settodepth{\Depth}{c2}\setlength{\Height}{\Depth}%
+\put(4.0714286,4.7142857){\hspace*{\Width}\raisebox{\Height}{c2}}%
+%
+\settowidth{\Width}{c3}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{c3}\settodepth{\Depth}{c3}\setlength{\Height}{\Depth}%
+\put(6.0714286,4.7142857){\hspace*{\Width}\raisebox{\Height}{c3}}%
+%
+\settowidth{\Width}{c4}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{c4}\settodepth{\Depth}{c4}\setlength{\Height}{\Depth}%
+\put(8.0714286,4.7142857){\hspace*{\Width}\raisebox{\Height}{c4}}%
+%
+\settowidth{\Width}{c5}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{c5}\settodepth{\Depth}{c5}\setlength{\Height}{\Depth}%
+\put(10.0714286,4.7142857){\hspace*{\Width}\raisebox{\Height}{c5}}%
+%
+\settowidth{\Width}{r3}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{r3}\settodepth{\Depth}{r3}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-0.0714286,0.0000000){\hspace*{\Width}\raisebox{\Height}{r3}}%
+%
+\settowidth{\Width}{r2}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{r2}\settodepth{\Depth}{r2}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-0.0714286,1.5000000){\hspace*{\Width}\raisebox{\Height}{r2}}%
+%
+\settowidth{\Width}{r1}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{r1}\settodepth{\Depth}{r1}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-0.0714286,3.0000000){\hspace*{\Width}\raisebox{\Height}{r1}}%
+%
+\settowidth{\Width}{r0}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{r0}\settodepth{\Depth}{r0}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-0.0714286,4.5000000){\hspace*{\Width}\raisebox{\Height}{r0}}%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/putintersect.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/putintersect.tex
new file mode 100644
index 0000000000..81f6302dce
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/putintersect.tex
@@ -0,0 +1,99 @@
+%%% fig.tex 2015-8-3 21:32
+%%% fig.sce 2015-8-3 21:32
+{\unitlength=4mm%
+\begin{picture}%
+( 7.06000, 7.34000)( -3.06000, -3.34000)%
+\special{pn 8}%
+%
+\special{pa -367 526}\special{pa -365 495}\special{pa -359 429}\special{pa -353 366}%
+\special{pa -348 305}\special{pa -342 247}\special{pa -337 192}\special{pa -331 139}%
+\special{pa -325 88}\special{pa -320 40}\special{pa -314 -5}\special{pa -309 -49}%
+\special{pa -303 -90}\special{pa -298 -128}\special{pa -292 -165}\special{pa -286 -199}%
+\special{pa -281 -231}\special{pa -275 -261}\special{pa -270 -288}\special{pa -264 -314}%
+\special{pa -258 -338}\special{pa -253 -360}\special{pa -247 -380}\special{pa -242 -398}%
+\special{pa -236 -414}\special{pa -230 -428}\special{pa -225 -441}\special{pa -219 -452}%
+\special{pa -214 -461}\special{pa -208 -469}\special{pa -203 -475}\special{pa -197 -480}%
+\special{pa -191 -483}\special{pa -186 -485}\special{pa -180 -485}\special{pa -175 -484}%
+\special{pa -169 -481}\special{pa -163 -478}\special{pa -158 -473}\special{pa -152 -467}%
+\special{pa -147 -459}\special{pa -141 -451}\special{pa -135 -442}\special{pa -130 -431}%
+\special{pa -124 -420}\special{pa -119 -407}\special{pa -113 -394}\special{pa -108 -380}%
+\special{pa -102 -365}\special{pa -96 -349}\special{pa -91 -333}\special{pa -85 -316}%
+\special{pa -80 -298}\special{pa -74 -280}\special{pa -68 -261}\special{pa -63 -241}%
+\special{pa -57 -222}\special{pa -52 -201}\special{pa -46 -180}\special{pa -41 -159}%
+\special{pa -35 -138}\special{pa -29 -116}\special{pa -24 -94}\special{pa -18 -72}%
+\special{pa -13 -50}\special{pa -7 -28}\special{pa -1 -6}\special{pa 4 17}\special{pa 10 39}%
+\special{pa 15 61}\special{pa 21 83}\special{pa 27 105}\special{pa 32 127}\special{pa 38 149}%
+\special{pa 43 170}\special{pa 49 191}\special{pa 54 211}\special{pa 60 231}\special{pa 66 251}%
+\special{pa 71 270}\special{pa 77 289}\special{pa 82 307}\special{pa 88 324}\special{pa 94 341}%
+\special{pa 99 357}\special{pa 105 373}\special{pa 110 387}\special{pa 116 401}\special{pa 122 414}%
+\special{pa 127 426}\special{pa 133 437}\special{pa 138 446}\special{pa 144 455}\special{pa 149 463}%
+\special{pa 155 470}\special{pa 161 475}\special{pa 166 480}\special{pa 172 483}\special{pa 177 484}%
+\special{pa 183 485}\special{pa 189 484}\special{pa 194 482}\special{pa 200 478}\special{pa 205 472}%
+\special{pa 211 465}\special{pa 216 457}\special{pa 222 447}\special{pa 228 435}\special{pa 233 421}%
+\special{pa 239 406}\special{pa 244 389}\special{pa 250 370}\special{pa 256 349}\special{pa 261 326}%
+\special{pa 267 302}\special{pa 272 275}\special{pa 278 246}\special{pa 284 215}\special{pa 289 182}%
+\special{pa 295 147}\special{pa 300 109}\special{pa 306 70}\special{pa 311 28}\special{pa 317 -17}%
+\special{pa 323 -64}\special{pa 328 -113}\special{pa 334 -165}\special{pa 339 -219}%
+\special{pa 345 -276}\special{pa 351 -335}\special{pa 356 -397}\special{pa 362 -462}%
+\special{pa 367 -529}\special{pa 373 -600}\special{pa 375 -630}%
+\special{fp}%
+\special{pa -482 83}\special{pa -459 72}\special{pa -437 61}\special{pa -414 49}\special{pa -391 38}%
+\special{pa -368 27}\special{pa -346 15}\special{pa -323 4}\special{pa -300 -7}\special{pa -278 -19}%
+\special{pa -255 -30}\special{pa -232 -41}\special{pa -210 -53}\special{pa -187 -64}%
+\special{pa -164 -75}\special{pa -142 -87}\special{pa -119 -98}\special{pa -96 -109}%
+\special{pa -73 -121}\special{pa -51 -132}\special{pa -28 -143}\special{pa -5 -155}%
+\special{pa 17 -166}\special{pa 40 -177}\special{pa 63 -189}\special{pa 85 -200}\special{pa 108 -212}%
+\special{pa 131 -223}\special{pa 153 -234}\special{pa 176 -246}\special{pa 199 -257}%
+\special{pa 222 -268}\special{pa 244 -280}\special{pa 267 -291}\special{pa 290 -302}%
+\special{pa 312 -314}\special{pa 335 -325}\special{pa 358 -336}\special{pa 380 -348}%
+\special{pa 403 -359}\special{pa 426 -370}\special{pa 448 -382}\special{pa 471 -393}%
+\special{pa 494 -404}\special{pa 516 -416}\special{pa 539 -427}\special{pa 562 -438}%
+\special{pa 585 -450}\special{pa 607 -461}\special{pa 630 -472}%
+\special{fp}%
+\special{pa -304 -11}\special{pa -311 -15}\special{pa -319 -15}\special{pa -326 -11}%
+\special{pa -330 -4}\special{pa -330 4}\special{pa -326 11}\special{pa -319 15}\special{pa -311 15}%
+\special{pa -304 11}\special{pa -300 4}\special{pa -300 -4}\special{pa -304 -11}\special{sh 1}\special{fp}%
+\special{pa -24 -151}\special{pa -31 -155}\special{pa -39 -155}\special{pa -47 -151}%
+\special{pa -51 -144}\special{pa -51 -136}\special{pa -47 -129}\special{pa -39 -125}%
+\special{pa -31 -125}\special{pa -24 -129}\special{pa -20 -136}\special{pa -20 -144}%
+\special{pa -24 -151}\special{sh 1}\special{fp}%
+\special{pa 361 -344}\special{pa 354 -348}\special{pa 346 -348}\special{pa 339 -344}%
+\special{pa 335 -337}\special{pa 335 -329}\special{pa 339 -322}\special{pa 346 -317}%
+\special{pa 354 -317}\special{pa 361 -322}\special{pa 366 -329}\special{pa 366 -337}%
+\special{pa 361 -344}\special{sh 1}\special{fp}%
+\special{pn 8}%
+\special{pa -482 0}\special{pa 630 0}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 555 24}\special{pa 630 0}\special{pa 555 -24}\special{pa 555 0}\special{pa 555 24}%
+\special{sh 1}\special{ip}%
+\special{pn 8}%
+\special{pa 555 24}\special{pa 630 0}\special{pa 555 -24}\special{pa 555 0}\special{pa 555 24}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 8}%
+\special{pa 0 526}\special{pa 0 -630}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 24 -555}\special{pa 0 -630}\special{pa -24 -555}\special{pa 0 -555}\special{pa 24 -555}%
+\special{sh 1}\special{ip}%
+\special{pn 8}%
+\special{pa 24 -555}\special{pa 0 -630}\special{pa -24 -555}\special{pa 0 -555}\special{pa 24 -555}%
+\special{fp}%
+\special{pn 8}%
+\settowidth{\Width}{$x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.0500,0.0000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{\Depth}%
+\put(0.0000,4.0500){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+%
+\settowidth{\Width}{O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(-0.0500,-0.0500){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/putoncurve.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/putoncurve.pdf
new file mode 100644
index 0000000000..439acfe797
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/putoncurve.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/putoncurve.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/putoncurve.tex
new file mode 100644
index 0000000000..058a231bbb
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/putoncurve.tex
@@ -0,0 +1,48 @@
+%%% putoncurve.tex 2014-11-10 16:31
+%%% partcrv.sce 2014-11-10 13:44
+{\unitlength=1cm%
+\begin{picture}%
+( 6.00000, 6.00000)( -3.00000, -3.00000)%
+\special{pn 8}%
+%
+\special{pa -383 -188}\special{pa -390 -192}\special{pa -398 -192}\special{pa -405 -188}%
+\special{pa -409 -181}\special{pa -409 -173}\special{pa -405 -166}\special{pa -398 -162}%
+\special{pa -390 -162}\special{pa -383 -166}\special{pa -378 -173}\special{pa -378 -181}%
+\special{pa -383 -188}\special{sh 1}\special{fp}%
+\settowidth{\Width}{P}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{P}\settodepth{\Depth}{P}\setlength{\Height}{\Depth}%
+\put(-1.0500,0.5000){\hspace*{\Width}\raisebox{\Height}{P}}%
+%
+%
+\special{pa 787 0}\special{pa 768 -2}\special{pa 713 -13}\special{pa 627 -42}\special{pa 521 -93}%
+\special{pa 405 -168}\special{pa 292 -265}\special{pa 191 -376}\special{pa 110 -492}%
+\special{pa 52 -602}\special{pa 18 -694}\special{pa 3 -758}\special{pa 0 -786}\special{pa -1 -777}%
+\special{pa -9 -730}\special{pa -32 -651}\special{pa -78 -549}\special{pa -147 -434}%
+\special{pa -239 -319}\special{pa -348 -214}\special{pa -464 -128}\special{pa -576 -64}%
+\special{pa -673 -25}\special{pa -745 -6}\special{pa -783 0}\special{pa -783 0}\special{pa -745 6}%
+\special{pa -673 25}\special{pa -576 64}\special{pa -464 128}\special{pa -348 214}%
+\special{pa -239 319}\special{pa -147 434}\special{pa -78 549}\special{pa -32 651}%
+\special{pa -9 730}\special{pa -1 777}\special{pa 0 786}\special{pa 3 758}\special{pa 18 694}%
+\special{pa 52 602}\special{pa 110 492}\special{pa 191 376}\special{pa 292 265}\special{pa 405 168}%
+\special{pa 521 93}\special{pa 627 42}\special{pa 713 13}\special{pa 768 2}\special{pa 787 0}%
+\special{fp}%
+\special{pa -1181 0}\special{pa 1181 0}%
+\special{fp}%
+\special{pa 0 1181}\special{pa 0 -1181}%
+\special{fp}%
+\settowidth{\Width}{$x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(3.0500,0.0000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{\Depth}%
+\put(0.0000,3.0500){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+%
+\settowidth{\Width}{O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(-0.0500,-0.0500){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/putonline1.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/putonline1.pdf
new file mode 100644
index 0000000000..a5e84f4de5
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/putonline1.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/putonseg.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/putonseg.pdf
new file mode 100644
index 0000000000..da1770e366
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/putonseg.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/rasen.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/rasen.tex
new file mode 100644
index 0000000000..84b31ad90d
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/rasen.tex
@@ -0,0 +1,84 @@
+%%% /Users/Hannya/Desktop/KeTCindy/fig/rasen.tex
+%%% Generator=3Dbasic.cdy
+{\unitlength=6mm%
+\begin{picture}%
+(7.98,6.47)(-3.8,-2.13)%
+\special{pn 8}%
+%
+{%
+\color[rgb]{0,0,0}%
+}%
+{%
+\color[rgb]{0,0,0}%
+}%
+\settowidth{\Width}{$x$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-3.4600000,-1.0500000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(3.3500000,-1.6700000){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+\settowidth{\Width}{$z$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$z$}\settodepth{\Depth}{$z$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(0.0000000,4.0000000){\hspace*{\Width}\raisebox{\Height}{$z$}}%
+%
+\special{pa 933 -282}\special{pa -746 225}%
+\special{fp}%
+\special{pa -725 -362}\special{pa 725 362}%
+\special{fp}%
+\special{pa 0 503}\special{pa 0 -871}%
+\special{fp}%
+\special{pa -681 180}\special{pa -746 225}\special{pa -667 227}\special{pa -674 204}%
+\special{pa -681 180}\special{sh 1}\special{ip}%
+\special{pn 1}%
+\special{pa -681 180}\special{pa -746 225}\special{pa -667 227}\special{pa -674 204}%
+\special{pa -681 180}\special{pa -746 225}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 647 351}\special{pa 725 362}\special{pa 669 307}\special{pa 658 329}\special{pa 647 351}%
+\special{sh 1}\special{ip}%
+\special{pn 1}%
+\special{pa 647 351}\special{pa 725 362}\special{pa 669 307}\special{pa 658 329}%
+\special{pa 647 351}\special{pa 725 362}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 24 -796}\special{pa 0 -871}\special{pa -24 -796}\special{pa 0 -796}\special{pa 24 -796}%
+\special{sh 1}\special{ip}%
+\special{pn 1}%
+\special{pa 24 -796}\special{pa 0 -871}\special{pa -24 -796}\special{pa 0 -796}%
+\special{pa 24 -796}\special{pa 0 -871}%
+\special{fp}%
+\special{pn 8}%
+\settowidth{\Width}{O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(-0.0833333,-0.0833333){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+\special{pa -373 113}\special{pa -334 124}\special{pa -289 134}\special{pa -240 142}%
+\special{pa -187 147}\special{pa -131 149}\special{pa -73 148}\special{pa -14 145}%
+\special{pa 45 139}\special{pa 104 130}\special{pa 160 118}\special{pa 215 103}%
+\special{pa 266 86}\special{pa 313 66}\special{pa 355 45}\special{pa 391 21}%
+\special{pa 421 -4}\special{pa 445 -31}\special{pa 461 -59}\special{pa 470 -87}%
+\special{pa 472 -115}\special{pa 467 -144}\special{pa 454 -172}\special{pa 433 -199}%
+\special{pa 406 -225}\special{pa 373 -249}\special{pa 334 -272}\special{pa 289 -293}%
+\special{pa 240 -311}\special{pa 187 -327}\special{pa 131 -340}\special{pa 73 -351}%
+\special{pa 14 -358}\special{pa -45 -363}\special{pa -104 -365}\special{pa -160 -364}%
+\special{pa -215 -360}\special{pa -266 -354}\special{pa -313 -345}\special{pa -355 -335}%
+\special{pa -391 -322}\special{pa -421 -307}\special{pa -445 -292}\special{pa -461 -275}%
+\special{pa -470 -258}\special{pa -472 -240}\special{pa -467 -223}\special{pa -454 -206}%
+\special{pa -433 -190}\special{pa -406 -174}\special{pa -373 -161}\special{pa -334 -149}%
+\special{pa -289 -139}\special{pa -240 -132}\special{pa -187 -127}\special{pa -131 -125}%
+\special{pa -73 -125}\special{pa -14 -128}\special{pa 45 -135}\special{pa 104 -144}%
+\special{pa 160 -156}\special{pa 215 -170}\special{pa 266 -188}\special{pa 313 -207}%
+\special{pa 355 -229}\special{pa 391 -253}\special{pa 421 -278}\special{pa 445 -305}%
+\special{pa 461 -332}\special{pa 470 -360}\special{pa 472 -389}\special{pa 467 -417}%
+\special{pa 454 -445}\special{pa 433 -472}\special{pa 406 -498}\special{pa 373 -523}%
+\special{pa 334 -546}\special{pa 289 -566}\special{pa 240 -585}\special{pa 187 -601}%
+\special{pa 131 -614}\special{pa 73 -624}\special{pa 14 -632}\special{pa -45 -637}%
+\special{pa -104 -639}\special{pa -160 -638}\special{pa -215 -634}\special{pa -266 -628}%
+\special{pa -313 -619}\special{pa -355 -608}\special{pa -391 -595}\special{pa -421 -581}%
+\special{pa -445 -565}\special{pa -461 -549}\special{pa -470 -531}\special{pa -472 -514}%
+\special{pa -467 -496}\special{pa -454 -479}\special{pa -433 -463}\special{pa -406 -448}%
+\special{pa -373 -434}%
+\special{fp}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/readobj.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/readobj.tex
new file mode 100644
index 0000000000..5b9d71e680
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/readobj.tex
@@ -0,0 +1,64 @@
+%%% /Users/Hannya/ketcindy/ketwork/template.tex 2016-8-9 20:2
+%%% template.sce 2016-8-9 20:2
+{\unitlength=8mm%
+\begin{picture}%
+( 6.00000, 5.00000)( -3.00000, -2.00000)%
+\special{pn 8}%
+%
+\special{pn 8}%
+\special{pa -59 -253}\special{pa -51 -251}\special{fp}\special{pa -21 -240}\special{pa -13 -238}\special{fp}%
+\special{pa 17 -228}\special{pa 25 -225}\special{fp}\special{pa 55 -215}\special{pa 62 -212}\special{fp}%
+\special{pa 93 -202}\special{pa 100 -200}\special{fp}\special{pa 130 -189}\special{pa 138 -187}\special{fp}%
+\special{pa 168 -177}\special{pa 176 -174}\special{fp}\special{pa 206 -164}\special{pa 214 -161}\special{fp}%
+\special{pa 244 -151}\special{pa 251 -148}\special{fp}\special{pa 282 -138}\special{pa 289 -136}\special{fp}%
+\special{pa 319 -125}\special{pa 327 -123}\special{fp}\special{pa 357 -113}\special{pa 365 -110}\special{fp}%
+\special{pa 395 -100}\special{pa 403 -97}\special{fp}\special{pa 433 -87}\special{pa 440 -85}\special{fp}%
+\special{pa 471 -74}\special{pa 478 -72}\special{fp}\special{pa 508 -62}\special{pa 516 -59}\special{fp}%
+\special{pa 546 -49}\special{pa 554 -46}\special{fp}\special{pa 584 -36}\special{pa 592 -34}\special{fp}%
+\special{pa 622 -23}\special{pa 629 -21}\special{fp}\special{pn 8}%
+\special{pa 626 -22}\special{pa 0 577}%
+\special{fp}%
+\special{pn 8}%
+\special{pa -55 -256}\special{pa -54 -248}\special{fp}\special{pa -52 -216}\special{pa -52 -208}\special{fp}%
+\special{pa -50 -177}\special{pa -49 -169}\special{fp}\special{pa -47 -138}\special{pa -47 -130}\special{fp}%
+\special{pa -45 -98}\special{pa -44 -90}\special{fp}\special{pa -42 -59}\special{pa -41 -51}\special{fp}%
+\special{pa -39 -19}\special{pa -39 -11}\special{fp}\special{pa -37 20}\special{pa -36 28}\special{fp}%
+\special{pa -34 60}\special{pa -34 68}\special{fp}\special{pa -32 99}\special{pa -31 107}\special{fp}%
+\special{pa -29 139}\special{pa -28 147}\special{fp}\special{pa -26 178}\special{pa -26 186}\special{fp}%
+\special{pa -24 218}\special{pa -23 226}\special{fp}\special{pa -21 257}\special{pa -21 265}\special{fp}%
+\special{pa -19 296}\special{pa -18 304}\special{fp}\special{pa -16 336}\special{pa -15 344}\special{fp}%
+\special{pa -13 375}\special{pa -13 383}\special{fp}\special{pa -11 415}\special{pa -10 423}\special{fp}%
+\special{pa -8 454}\special{pa -8 462}\special{fp}\special{pa -5 494}\special{pa -5 502}\special{fp}%
+\special{pa -3 533}\special{pa -2 541}\special{fp}\special{pa 0 573}\special{pa 0 581}\special{fp}%
+\special{pn 8}%
+\special{pa -626 22}\special{pa 0 577}%
+\special{fp}%
+\special{pn 8}%
+\special{pa -51 -254}\special{pa -58 -250}\special{fp}\special{pa -87 -237}\special{pa -94 -233}\special{fp}%
+\special{pa -122 -219}\special{pa -130 -216}\special{fp}\special{pa -158 -202}\special{pa -165 -199}\special{fp}%
+\special{pa -194 -185}\special{pa -201 -182}\special{fp}\special{pa -230 -168}\special{pa -237 -165}\special{fp}%
+\special{pa -265 -151}\special{pa -272 -147}\special{fp}\special{pa -301 -134}\special{pa -308 -130}\special{fp}%
+\special{pa -337 -117}\special{pa -344 -113}\special{fp}\special{pa -372 -100}\special{pa -379 -96}\special{fp}%
+\special{pa -408 -82}\special{pa -415 -79}\special{fp}\special{pa -444 -65}\special{pa -451 -62}\special{fp}%
+\special{pa -479 -48}\special{pa -487 -45}\special{fp}\special{pa -515 -31}\special{pa -522 -28}\special{fp}%
+\special{pa -551 -14}\special{pa -558 -10}\special{fp}\special{pa -586 3}\special{pa -594 7}\special{fp}%
+\special{pa -622 20}\special{pa -629 24}\special{fp}\special{pn 8}%
+\special{pa -626 22}\special{pa 0 -577}%
+\special{fp}%
+\special{pn 8}%
+\special{pa -55 -248}\special{pa -54 -256}\special{fp}\special{pa -49 -289}\special{pa -47 -296}\special{fp}%
+\special{pa -42 -329}\special{pa -40 -337}\special{fp}\special{pa -35 -370}\special{pa -34 -378}\special{fp}%
+\special{pa -28 -410}\special{pa -27 -418}\special{fp}\special{pa -21 -451}\special{pa -20 -459}\special{fp}%
+\special{pa -14 -491}\special{pa -13 -499}\special{fp}\special{pa -8 -532}\special{pa -6 -540}\special{fp}%
+\special{pa -1 -573}\special{pa 1 -581}\special{fp}\special{pn 8}%
+\special{pa 626 -22}\special{pa 0 -577}%
+\special{fp}%
+\special{pa 626 -22}\special{pa 55 252}%
+\special{fp}%
+\special{pa 55 252}\special{pa 0 577}%
+\special{fp}%
+\special{pa 55 252}\special{pa 0 -577}%
+\special{fp}%
+\special{pa 55 252}\special{pa -626 22}%
+\special{fp}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/reflectdata.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/reflectdata.tex
new file mode 100644
index 0000000000..d673989834
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/reflectdata.tex
@@ -0,0 +1,161 @@
+%%% test.tex 2014-12-3 8:8
+%%% test.sce 2014-12-3 8:8
+{\unitlength=5mm%
+\begin{picture}%
+( 14.00000, 10.00000)( -6.00000, -3.00000)%
+\special{pn 8}%
+%
+\special{pa -188 -402}\special{pa -195 -405}\special{pa -202 -404}\special{pa -207 -399}%
+\special{pa -209 -392}\special{pa -205 -385}\special{pa -199 -382}\special{pa -191 -383}%
+\special{pa -186 -388}\special{pa -185 -396}\special{pa -188 -402}\special{sh 1}\special{fp}%
+\special{pa 402 -205}\special{pa 396 -209}\special{pa 388 -207}\special{pa 383 -202}%
+\special{pa 382 -195}\special{pa 385 -188}\special{pa 392 -185}\special{pa 399 -186}%
+\special{pa 404 -191}\special{pa 405 -199}\special{pa 402 -205}\special{sh 1}\special{fp}%
+\special{pa 205 -205}\special{pa 199 -209}\special{pa 191 -207}\special{pa 186 -202}%
+\special{pa 185 -195}\special{pa 188 -188}\special{pa 195 -185}\special{pa 202 -186}%
+\special{pa 207 -191}\special{pa 209 -199}\special{pa 205 -205}\special{sh 1}\special{fp}%
+\special{pa 599 -599}\special{pa 592 -602}\special{pa 585 -601}\special{pa 580 -596}%
+\special{pa 579 -589}\special{pa 582 -582}\special{pa 589 -579}\special{pa 596 -580}%
+\special{pa 601 -585}\special{pa 602 -592}\special{pa 599 -599}\special{sh 1}\special{fp}%
+\special{pa 1189 -599}\special{pa 1183 -602}\special{pa 1176 -601}\special{pa 1171 -596}%
+\special{pa 1169 -589}\special{pa 1173 -582}\special{pa 1179 -579}\special{pa 1186 -580}%
+\special{pa 1192 -585}\special{pa 1193 -592}\special{pa 1189 -599}\special{sh 1}\special{fp}%
+\special{pa 599 188}\special{pa 592 185}\special{pa 585 186}\special{pa 580 191}\special{pa 579 199}%
+\special{pa 582 205}\special{pa 589 209}\special{pa 596 207}\special{pa 601 202}\special{pa 602 195}%
+\special{pa 599 188}\special{sh 1}\special{fp}%
+\special{pn 8}%
+\special{pa 1577 -1119}\special{pa 1572 -1112}\special{fp}\special{pa 1554 -1087}\special{pa 1549 -1081}\special{fp}%
+\special{pa 1530 -1055}\special{pa 1525 -1049}\special{fp}\special{pa 1506 -1024}\special{pa 1501 -1018}\special{fp}%
+\special{pa 1482 -992}\special{pa 1478 -986}\special{fp}\special{pa 1459 -961}\special{pa 1454 -954}\special{fp}%
+\special{pa 1435 -929}\special{pa 1430 -923}\special{fp}\special{pa 1411 -898}\special{pa 1407 -891}\special{fp}%
+\special{pa 1388 -866}\special{pa 1383 -860}\special{fp}\special{pa 1364 -834}\special{pa 1359 -828}\special{fp}%
+\special{pa 1340 -803}\special{pa 1335 -796}\special{fp}\special{pa 1317 -771}\special{pa 1312 -765}\special{fp}%
+\special{pa 1293 -740}\special{pa 1288 -733}\special{fp}\special{pa 1269 -708}\special{pa 1264 -702}\special{fp}%
+\special{pa 1245 -676}\special{pa 1241 -670}\special{fp}\special{pa 1222 -645}\special{pa 1217 -638}\special{fp}%
+\special{pa 1198 -613}\special{pa 1193 -607}\special{fp}\special{pa 1174 -582}\special{pa 1170 -575}\special{fp}%
+\special{pa 1151 -550}\special{pa 1146 -544}\special{fp}\special{pa 1127 -518}\special{pa 1122 -512}\special{fp}%
+\special{pa 1103 -487}\special{pa 1099 -480}\special{fp}\special{pa 1080 -455}\special{pa 1075 -449}\special{fp}%
+\special{pa 1056 -424}\special{pa 1051 -417}\special{fp}\special{pa 1032 -392}\special{pa 1027 -386}\special{fp}%
+\special{pa 1009 -360}\special{pa 1004 -354}\special{fp}\special{pa 985 -329}\special{pa 980 -322}\special{fp}%
+\special{pa 961 -297}\special{pa 956 -291}\special{fp}\special{pa 937 -266}\special{pa 933 -259}\special{fp}%
+\special{pa 914 -234}\special{pa 909 -228}\special{fp}\special{pa 890 -202}\special{pa 885 -196}\special{fp}%
+\special{pa 866 -171}\special{pa 862 -164}\special{fp}\special{pa 843 -139}\special{pa 838 -133}\special{fp}%
+\special{pa 819 -108}\special{pa 814 -101}\special{fp}\special{pa 795 -76}\special{pa 790 -70}\special{fp}%
+\special{pa 772 -45}\special{pa 767 -38}\special{fp}\special{pa 748 -13}\special{pa 743 -7}\special{fp}%
+\special{pa 724 19}\special{pa 719 25}\special{fp}\special{pa 700 50}\special{pa 696 57}\special{fp}%
+\special{pa 677 82}\special{pa 672 88}\special{fp}\special{pa 653 113}\special{pa 648 120}\special{fp}%
+\special{pa 629 145}\special{pa 625 151}\special{fp}\special{pa 606 177}\special{pa 601 183}\special{fp}%
+\special{pa 582 208}\special{pa 577 215}\special{fp}\special{pa 558 240}\special{pa 554 246}\special{fp}%
+\special{pa 535 271}\special{pa 530 278}\special{fp}\special{pa 511 303}\special{pa 506 309}\special{fp}%
+\special{pa 487 335}\special{pa 482 341}\special{fp}\special{pa 464 366}\special{pa 459 373}\special{fp}%
+\special{pa 440 398}\special{pa 435 404}\special{fp}\special{pa 416 429}\special{pa 411 436}\special{fp}%
+\special{pa 392 461}\special{pa 388 467}\special{fp}\special{pa 369 493}\special{pa 364 499}\special{fp}%
+\special{pa 345 524}\special{pa 340 531}\special{fp}\special{pa 321 556}\special{pa 317 562}\special{fp}%
+\special{pa 298 587}\special{pa 293 594}\special{fp}\special{pn 8}%
+\settowidth{\Width}{(-1,2)}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{(-1,2)}\settodepth{\Depth}{(-1,2)}\setlength{\Height}{\Depth}%
+\put(-1.0000,2.1500){\hspace*{\Width}\raisebox{\Height}{(-1,2)}}%
+%
+%
+\settowidth{\Width}{A}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{A}\settodepth{\Depth}{A}\setlength{\Height}{-\Height}%
+\put(2.1500,0.9500){\hspace*{\Width}\raisebox{\Height}{A}}%
+%
+%
+\settowidth{\Width}{B}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{B}\settodepth{\Depth}{B}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(0.8500,1.0000){\hspace*{\Width}\raisebox{\Height}{B}}%
+%
+%
+\settowidth{\Width}{C}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{C}\settodepth{\Depth}{C}\setlength{\Height}{-\Height}%
+\put(3.1500,2.9500){\hspace*{\Width}\raisebox{\Height}{C}}%
+%
+%
+\settowidth{\Width}{D}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{D}\settodepth{\Depth}{D}\setlength{\Height}{-\Height}%
+\put(6.1500,2.9500){\hspace*{\Width}\raisebox{\Height}{D}}%
+%
+%
+\settowidth{\Width}{E}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{E}\settodepth{\Depth}{E}\setlength{\Height}{-\Height}%
+\put(3.1500,-1.0500){\hspace*{\Width}\raisebox{\Height}{E}}%
+%
+%
+\special{pn 16}%
+\special{pa -984 -591}\special{pa -983 -566}\special{pa -978 -542}\special{pa -970 -518}%
+\special{pa -960 -496}\special{pa -947 -475}\special{pa -931 -456}\special{pa -913 -439}%
+\special{pa -893 -424}\special{pa -871 -412}\special{pa -848 -403}\special{pa -824 -397}%
+\special{pa -800 -394}\special{pa -775 -394}\special{pa -751 -397}\special{pa -727 -403}%
+\special{pa -704 -412}\special{pa -682 -424}\special{pa -662 -439}\special{pa -644 -456}%
+\special{pa -628 -475}\special{pa -615 -496}\special{pa -604 -518}\special{pa -597 -542}%
+\special{pa -592 -566}\special{pa -591 -591}\special{pa -592 -615}\special{pa -597 -640}%
+\special{pa -604 -663}\special{pa -615 -685}\special{pa -628 -706}\special{pa -644 -725}%
+\special{pa -662 -742}\special{pa -682 -757}\special{pa -704 -769}\special{pa -727 -778}%
+\special{pa -751 -784}\special{pa -775 -787}\special{pa -800 -787}\special{pa -824 -784}%
+\special{pa -848 -778}\special{pa -871 -769}\special{pa -893 -757}\special{pa -913 -742}%
+\special{pa -931 -725}\special{pa -947 -706}\special{pa -960 -685}\special{pa -970 -663}%
+\special{pa -978 -640}\special{pa -983 -615}\special{pa -984 -591}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 969 87}\special{pa 993 81}\special{pa 1006 80}\special{fp}\special{pa 1045 80}\special{pa 1066 83}\special{pa 1083 88}\special{fp}%
+\special{pa 1118 103}\special{pa 1134 113}\special{pa 1150 125}\special{fp}\special{pa 1177 153}\special{pa 1186 165}\special{pa 1198 185}\special{fp}%
+\special{pa 1212 221}\special{pa 1216 232}\special{pa 1220 257}\special{pa 1220 258}\special{fp}%
+\special{pa 1219 297}\special{pa 1218 306}\special{pa 1213 330}\special{pa 1211 335}\special{fp}%
+\special{pa 1196 370}\special{pa 1193 376}\special{pa 1179 396}\special{pa 1174 402}\special{fp}%
+\special{pa 1147 429}\special{pa 1144 431}\special{pa 1124 445}\special{pa 1114 450}\special{fp}%
+\special{pa 1079 465}\special{pa 1055 470}\special{pa 1041 471}\special{fp}\special{pa 1002 471}\special{pa 981 468}\special{pa 965 463}\special{fp}%
+\special{pa 929 448}\special{pa 913 439}\special{pa 897 426}\special{fp}\special{pa 870 399}\special{pa 861 386}\special{pa 849 366}\special{fp}%
+\special{pa 835 331}\special{pa 832 319}\special{pa 828 294}\special{pa 828 293}\special{fp}%
+\special{pa 828 254}\special{pa 829 245}\special{pa 835 221}\special{pa 836 217}\special{fp}%
+\special{pa 851 181}\special{pa 854 176}\special{pa 868 155}\special{pa 873 149}\special{fp}%
+\special{pa 900 122}\special{pa 903 120}\special{pa 923 106}\special{pa 933 101}\special{fp}%
+%
+%
+\special{pa 591 -197}\special{pa 589 -222}\special{pa 584 -246}\special{pa 577 -269}%
+\special{pa 566 -292}\special{pa 553 -313}\special{pa 537 -332}\special{pa 519 -349}%
+\special{pa 499 -363}\special{pa 478 -375}\special{pa 455 -384}\special{pa 431 -390}%
+\special{pa 406 -393}\special{pa 381 -393}\special{pa 357 -390}\special{pa 333 -384}%
+\special{pa 310 -375}\special{pa 288 -363}\special{pa 268 -349}\special{pa 250 -332}%
+\special{pa 234 -313}\special{pa 221 -292}\special{pa 211 -269}\special{pa 203 -246}%
+\special{pa 198 -222}\special{pa 197 -197}\special{pa 198 -172}\special{pa 203 -148}%
+\special{pa 211 -124}\special{pa 221 -102}\special{pa 234 -81}\special{pa 250 -62}%
+\special{pa 268 -45}\special{pa 288 -31}\special{pa 310 -19}\special{pa 333 -10}\special{pa 357 -3}%
+\special{pa 381 0}\special{pa 406 0}\special{pa 431 -3}\special{pa 455 -10}\special{pa 478 -19}%
+\special{pa 499 -31}\special{pa 519 -45}\special{pa 537 -62}\special{pa 553 -81}\special{pa 566 -102}%
+\special{pa 577 -124}\special{pa 584 -148}\special{pa 589 -172}\special{pa 591 -197}%
+\special{fp}%
+\special{pa 591 -984}\special{pa 592 -960}\special{pa 597 -935}\special{pa 604 -912}%
+\special{pa 615 -889}\special{pa 628 -869}\special{pa 644 -849}\special{pa 662 -833}%
+\special{pa 682 -818}\special{pa 704 -806}\special{pa 727 -797}\special{pa 751 -791}%
+\special{pa 775 -788}\special{pa 800 -788}\special{pa 824 -791}\special{pa 848 -797}%
+\special{pa 871 -806}\special{pa 893 -818}\special{pa 913 -833}\special{pa 931 -849}%
+\special{pa 947 -869}\special{pa 960 -889}\special{pa 970 -912}\special{pa 978 -935}%
+\special{pa 983 -960}\special{pa 984 -984}\special{pa 983 -1009}\special{pa 978 -1033}%
+\special{pa 970 -1057}\special{pa 960 -1079}\special{pa 947 -1100}\special{pa 931 -1119}%
+\special{pa 913 -1136}\special{pa 893 -1150}\special{pa 871 -1162}\special{pa 848 -1171}%
+\special{pa 824 -1178}\special{pa 800 -1181}\special{pa 775 -1181}\special{pa 751 -1178}%
+\special{pa 727 -1171}\special{pa 704 -1162}\special{pa 682 -1150}\special{pa 662 -1136}%
+\special{pa 644 -1119}\special{pa 628 -1100}\special{pa 615 -1079}\special{pa 604 -1057}%
+\special{pa 597 -1033}\special{pa 592 -1009}\special{pa 591 -984}%
+\special{fp}%
+\special{pa -1181 0}\special{pa 1575 0}%
+\special{fp}%
+\special{pa 0 591}\special{pa 0 -1378}%
+\special{fp}%
+\settowidth{\Width}{$x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(8.0500,0.0000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{\Depth}%
+\put(0.0000,7.0500){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+%
+\settowidth{\Width}{O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(-0.0500,-0.0500){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/reflectdata3d01.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/reflectdata3d01.tex
new file mode 100644
index 0000000000..1893fc3a74
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/reflectdata3d01.tex
@@ -0,0 +1,93 @@
+%%% /Users/Hannya/Desktop/KeTCindy/fig/reflectdata3d01.tex
+%%% Generator=3Dbasic.cdy
+{\unitlength=8mm%
+\begin{picture}%
+(6.32,4.73)(-3.39,-1.08)%
+\special{pn 8}%
+%
+{%
+\color[rgb]{0,0,0}%
+}%
+{%
+\color[rgb]{0,0,0}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{$x$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-3.0700000,-0.8100000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.7000000,-0.3400000){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{$z$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$z$}\settodepth{\Depth}{$z$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(0.0000000,3.1900000){\hspace*{\Width}\raisebox{\Height}{$z$}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 896 -237}\special{pa -896 237}%
+\special{fp}%
+\special{pa -1068 -135}\special{pa 777 98}%
+\special{fp}%
+\special{pa 0 340}\special{pa 0 -929}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa -518 -66}\special{pa -876 29}\special{pa -697 -637}\special{pa -518 -66}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,1}%
+\special{pn 16}%
+\special{pa 160 -459}\special{pa 518 -554}\special{pa 339 113}\special{pa 160 -459}%
+\special{fp}%
+\special{pn 8}%
+}%
+\special{pn 1}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa -507 -77}\special{pa -518 -81}\special{pa -529 -77}\special{pa -534 -66}\special{pa -529 -54}\special{pa -518 -50}\special{pa -507 -54}\special{pa -502 -66}\special{pa -507 -77}\special{sh 1}\special{fp}%
+\special{pa -865 18}\special{pa -876 13}\special{pa -888 18}\special{pa -892 29}\special{pa -888 40}\special{pa -876 45}\special{pa -865 40}\special{pa -861 29}\special{pa -865 18}\special{sh 1}\special{fp}%
+\special{pa -686 -649}\special{pa -697 -653}\special{pa -708 -649}\special{pa -713 -637}\special{pa -708 -626}\special{pa -697 -622}\special{pa -686 -626}\special{pa -681 -637}\special{pa -686 -649}\special{sh 1}\special{fp}%
+\special{pa -168 -273}\special{pa -179 -278}\special{pa -190 -273}\special{pa -195 -262}\special{pa -190 -251}\special{pa -179 -247}\special{pa -168 -251}\special{pa -163 -262}\special{pa -168 -273}\special{sh 1}\special{fp}%
+}%
+\special{pn 8}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{A}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{A}\settodepth{\Depth}{A}\setlength{\Height}{-\Height}%
+\put(-1.5775000,0.1475000){\hspace*{\Width}\raisebox{\Height}{A}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{B}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{B}\settodepth{\Depth}{B}\setlength{\Height}{-\Height}%
+\put(-2.8425000,-0.1525000){\hspace*{\Width}\raisebox{\Height}{B}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{C}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{C}\settodepth{\Depth}{C}\setlength{\Height}{\Depth}%
+\put(-2.1475000,2.0825000){\hspace*{\Width}\raisebox{\Height}{C}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{D}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{D}\settodepth{\Depth}{D}\setlength{\Height}{\Depth}%
+\put(-0.5075000,0.8925000){\hspace*{\Width}\raisebox{\Height}{D}}%
+%
+}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/reflectdata3d02.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/reflectdata3d02.tex
new file mode 100644
index 0000000000..b1a65f7d4c
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/reflectdata3d02.tex
@@ -0,0 +1,125 @@
+%%% /Users/Hannya/Desktop/KeTCindy/fig/reflectdata3d02.tex
+%%% Generator=3Dbasic.cdy
+{\unitlength=8mm%
+\begin{picture}%
+(6.32,4.73)(-3.39,-1.08)%
+\special{pn 8}%
+%
+{%
+\color[rgb]{0,0,0}%
+}%
+{%
+\color[rgb]{0,0,0}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{$x$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-3.0700000,-0.8100000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.7000000,-0.3400000){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{$z$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$z$}\settodepth{\Depth}{$z$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(0.0000000,3.1900000){\hspace*{\Width}\raisebox{\Height}{$z$}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 896 -237}\special{pa -896 237}%
+\special{fp}%
+\special{pa -1068 -135}\special{pa 777 98}%
+\special{fp}%
+\special{pa 0 340}\special{pa 0 -929}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa -518 -66}\special{pa -876 29}\special{pa -697 -637}\special{pa -518 -66}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,1}%
+\special{pn 16}%
+\special{pa 160 160}\special{pa 518 66}\special{pa 339 -506}\special{pa 160 160}%
+\special{fp}%
+\special{pn 8}%
+}%
+\special{pn 1}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa -507 -77}\special{pa -518 -81}\special{pa -529 -77}\special{pa -534 -66}\special{pa -529 -54}\special{pa -518 -50}\special{pa -507 -54}\special{pa -502 -66}\special{pa -507 -77}\special{sh 1}\special{fp}%
+\special{pa -865 18}\special{pa -876 13}\special{pa -888 18}\special{pa -892 29}\special{pa -888 40}\special{pa -876 45}\special{pa -865 40}\special{pa -861 29}\special{pa -865 18}\special{sh 1}\special{fp}%
+\special{pa -686 -649}\special{pa -697 -653}\special{pa -708 -649}\special{pa -713 -637}\special{pa -708 -626}\special{pa -697 -622}\special{pa -686 -626}\special{pa -681 -637}\special{pa -686 -649}\special{sh 1}\special{fp}%
+\special{pa -168 -273}\special{pa -179 -278}\special{pa -190 -273}\special{pa -195 -262}\special{pa -190 -251}\special{pa -179 -247}\special{pa -168 -251}\special{pa -163 -262}\special{pa -168 -273}\special{sh 1}\special{fp}%
+\special{pa -168 36}\special{pa -179 32}\special{pa -190 36}\special{pa -195 47}\special{pa -190 58}\special{pa -179 63}\special{pa -168 58}\special{pa -163 47}\special{pa -168 36}\special{sh 1}\special{fp}%
+}%
+\special{pn 8}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{A}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{A}\settodepth{\Depth}{A}\setlength{\Height}{-\Height}%
+\put(-1.5775000,0.1475000){\hspace*{\Width}\raisebox{\Height}{A}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{B}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{B}\settodepth{\Depth}{B}\setlength{\Height}{-\Height}%
+\put(-2.8425000,-0.1525000){\hspace*{\Width}\raisebox{\Height}{B}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{C}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{C}\settodepth{\Depth}{C}\setlength{\Height}{\Depth}%
+\put(-2.1475000,2.0825000){\hspace*{\Width}\raisebox{\Height}{C}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{D}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{D}\settodepth{\Depth}{D}\setlength{\Height}{\Depth}%
+\put(-0.5075000,0.8925000){\hspace*{\Width}\raisebox{\Height}{D}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{E}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{E}\settodepth{\Depth}{E}\setlength{\Height}{-\Height}%
+\put(-0.5075000,-0.2125000){\hspace*{\Width}\raisebox{\Height}{E}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pn 8}%
+\special{pa -179 -1154}\special{pa -179 -1146}\special{fp}\special{pa -179 -1114}\special{pa -179 -1106}\special{fp}%
+\special{pa -179 -1075}\special{pa -179 -1067}\special{fp}\special{pa -179 -1036}\special{pa -179 -1028}\special{fp}%
+\special{pa -179 -997}\special{pa -179 -989}\special{fp}\special{pa -179 -958}\special{pa -179 -950}\special{fp}%
+\special{pa -179 -918}\special{pa -179 -910}\special{fp}\special{pa -179 -879}\special{pa -179 -871}\special{fp}%
+\special{pa -179 -840}\special{pa -179 -832}\special{fp}\special{pa -179 -801}\special{pa -179 -793}\special{fp}%
+\special{pa -179 -762}\special{pa -179 -754}\special{fp}\special{pa -179 -722}\special{pa -179 -714}\special{fp}%
+\special{pa -179 -683}\special{pa -179 -675}\special{fp}\special{pa -179 -644}\special{pa -179 -636}\special{fp}%
+\special{pa -179 -605}\special{pa -179 -597}\special{fp}\special{pa -179 -566}\special{pa -179 -558}\special{fp}%
+\special{pa -179 -526}\special{pa -179 -518}\special{fp}\special{pa -179 -487}\special{pa -179 -479}\special{fp}%
+\special{pa -179 -448}\special{pa -179 -440}\special{fp}\special{pa -179 -409}\special{pa -179 -401}\special{fp}%
+\special{pa -179 -370}\special{pa -179 -362}\special{fp}\special{pa -179 -330}\special{pa -179 -322}\special{fp}%
+\special{pa -179 -291}\special{pa -179 -283}\special{fp}\special{pa -179 -252}\special{pa -179 -244}\special{fp}%
+\special{pa -179 -213}\special{pa -179 -205}\special{fp}\special{pa -179 -173}\special{pa -179 -165}\special{fp}%
+\special{pa -179 -134}\special{pa -179 -126}\special{fp}\special{pa -179 -95}\special{pa -179 -87}\special{fp}%
+\special{pa -179 -56}\special{pa -179 -48}\special{fp}\special{pa -179 -17}\special{pa -179 -9}\special{fp}%
+\special{pa -179 23}\special{pa -179 31}\special{fp}\special{pa -179 62}\special{pa -179 70}\special{fp}%
+\special{pa -179 101}\special{pa -179 109}\special{fp}\special{pa -179 140}\special{pa -179 148}\special{fp}%
+\special{pa -179 179}\special{pa -179 187}\special{fp}\special{pa -179 219}\special{pa -179 227}\special{fp}%
+\special{pa -179 258}\special{pa -179 266}\special{fp}\special{pa -179 297}\special{pa -179 305}\special{fp}%
+\special{pa -179 336}\special{pa -179 344}\special{fp}\special{pn 8}%
+}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/reflectdata3d03.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/reflectdata3d03.tex
new file mode 100644
index 0000000000..d369621371
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/reflectdata3d03.tex
@@ -0,0 +1,101 @@
+%%% /Users/Hannya/Desktop/KeTCindy/fig/reflectdata3d03.tex
+%%% Generator=3Dbasic.cdy
+{\unitlength=8mm%
+\begin{picture}%
+(6.32,4.73)(-3.39,-1.08)%
+\special{pn 8}%
+%
+{%
+\color[rgb]{0,0,0}%
+}%
+{%
+\color[rgb]{0,0,0}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{$x$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-3.0700000,-0.8100000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.7000000,-0.3400000){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{$z$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$z$}\settodepth{\Depth}{$z$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(0.0000000,3.1900000){\hspace*{\Width}\raisebox{\Height}{$z$}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 896 -237}\special{pa -896 237}%
+\special{fp}%
+\special{pa -1068 -135}\special{pa 777 98}%
+\special{fp}%
+\special{pa 0 340}\special{pa 0 -929}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa -518 -66}\special{pa -876 29}\special{pa -697 -637}\special{pa -518 -66}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,1}%
+\special{pn 16}%
+\special{pa -677 138}\special{pa -876 29}\special{pa -777 -535}\special{pa -677 138}%
+\special{fp}%
+\special{pn 8}%
+}%
+\special{pn 1}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa -507 -77}\special{pa -518 -81}\special{pa -529 -77}\special{pa -534 -66}\special{pa -529 -54}\special{pa -518 -50}\special{pa -507 -54}\special{pa -502 -66}\special{pa -507 -77}\special{sh 1}\special{fp}%
+\special{pa -865 18}\special{pa -876 13}\special{pa -888 18}\special{pa -892 29}\special{pa -888 40}\special{pa -876 45}\special{pa -865 40}\special{pa -861 29}\special{pa -865 18}\special{sh 1}\special{fp}%
+\special{pa -686 -649}\special{pa -697 -653}\special{pa -708 -649}\special{pa -713 -637}\special{pa -708 -626}\special{pa -697 -622}\special{pa -686 -626}\special{pa -681 -637}\special{pa -686 -649}\special{sh 1}\special{fp}%
+\special{pa -168 -273}\special{pa -179 -278}\special{pa -190 -273}\special{pa -195 -262}\special{pa -190 -251}\special{pa -179 -247}\special{pa -168 -251}\special{pa -163 -262}\special{pa -168 -273}\special{sh 1}\special{fp}%
+\special{pa -168 36}\special{pa -179 32}\special{pa -190 36}\special{pa -195 47}\special{pa -190 58}\special{pa -179 63}\special{pa -168 58}\special{pa -163 47}\special{pa -168 36}\special{sh 1}\special{fp}%
+}%
+\special{pn 8}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{A}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{A}\settodepth{\Depth}{A}\setlength{\Height}{-\Height}%
+\put(-1.5775000,0.1475000){\hspace*{\Width}\raisebox{\Height}{A}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{B}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{B}\settodepth{\Depth}{B}\setlength{\Height}{-\Height}%
+\put(-2.8425000,-0.1525000){\hspace*{\Width}\raisebox{\Height}{B}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{C}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{C}\settodepth{\Depth}{C}\setlength{\Height}{\Depth}%
+\put(-2.1475000,2.0825000){\hspace*{\Width}\raisebox{\Height}{C}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{D}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{D}\settodepth{\Depth}{D}\setlength{\Height}{\Depth}%
+\put(-0.5075000,0.8925000){\hspace*{\Width}\raisebox{\Height}{D}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{E}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{E}\settodepth{\Depth}{E}\setlength{\Height}{-\Height}%
+\put(-0.5075000,-0.2125000){\hspace*{\Width}\raisebox{\Height}{E}}%
+%
+}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/reflectpoint.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/reflectpoint.tex
new file mode 100644
index 0000000000..baaa1db91b
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/reflectpoint.tex
@@ -0,0 +1,128 @@
+%%% test.tex 2014-12-3 7:41
+%%% test.sce 2014-12-3 7:41
+{\unitlength=6mm%
+\begin{picture}%
+( 10.00000, 8.00000)( -3.00000, -2.00000)%
+\special{pn 8}%
+%
+\special{pa 245 -8}\special{pa 238 -12}\special{pa 231 -11}\special{pa 226 -5}\special{pa 225 2}%
+\special{pa 228 8}\special{pa 234 12}\special{pa 242 11}\special{pa 247 5}\special{pa 248 -2}%
+\special{pa 245 -8}\special{sh 1}\special{fp}%
+\special{pa -228 -245}\special{pa -234 -248}\special{pa -242 -247}\special{pa -247 -242}%
+\special{pa -248 -234}\special{pa -245 -228}\special{pa -238 -225}\special{pa -231 -226}%
+\special{pa -226 -231}\special{pa -225 -238}\special{pa -228 -245}\special{sh 1}\special{fp}%
+\special{pa 481 -717}\special{pa 474 -720}\special{pa 467 -719}\special{pa 462 -714}%
+\special{pa 461 -707}\special{pa 464 -700}\special{pa 471 -697}\special{pa 478 -698}%
+\special{pa 483 -703}\special{pa 484 -711}\special{pa 481 -717}\special{sh 1}\special{fp}%
+\special{pa 245 -245}\special{pa 238 -248}\special{pa 231 -247}\special{pa 226 -242}%
+\special{pa 225 -234}\special{pa 228 -228}\special{pa 234 -225}\special{pa 242 -226}%
+\special{pa 247 -231}\special{pa 248 -238}\special{pa 245 -245}\special{sh 1}\special{fp}%
+\special{pa 717 -481}\special{pa 711 -484}\special{pa 703 -483}\special{pa 698 -478}%
+\special{pa 697 -471}\special{pa 700 -464}\special{pa 707 -461}\special{pa 714 -462}%
+\special{pa 719 -467}\special{pa 720 -474}\special{pa 717 -481}\special{sh 1}\special{fp}%
+\special{pa 1189 -717}\special{pa 1183 -720}\special{pa 1176 -719}\special{pa 1171 -714}%
+\special{pa 1169 -707}\special{pa 1173 -700}\special{pa 1179 -697}\special{pa 1186 -698}%
+\special{pa 1192 -703}\special{pa 1193 -711}\special{pa 1189 -717}\special{sh 1}\special{fp}%
+\special{pa 717 -1189}\special{pa 711 -1193}\special{pa 703 -1192}\special{pa 698 -1186}%
+\special{pa 697 -1179}\special{pa 700 -1173}\special{pa 707 -1169}\special{pa 714 -1171}%
+\special{pa 719 -1176}\special{pa 720 -1183}\special{pa 717 -1189}\special{sh 1}\special{fp}%
+\special{pa 717 228}\special{pa 711 225}\special{pa 703 226}\special{pa 698 231}\special{pa 697 238}%
+\special{pa 700 245}\special{pa 707 248}\special{pa 714 247}\special{pa 719 242}\special{pa 720 234}%
+\special{pa 717 228}\special{sh 1}\special{fp}%
+\special{pa 1378 322}\special{pa 1372 319}\special{pa 1365 320}\special{pa 1360 325}%
+\special{pa 1358 333}\special{pa 1362 339}\special{pa 1368 342}\special{pa 1375 341}%
+\special{pa 1381 336}\special{pa 1382 329}\special{pa 1378 322}\special{sh 1}\special{fp}%
+\settowidth{\Width}{(-1,1)}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{(-1,1)}\settodepth{\Depth}{(-1,1)}\setlength{\Height}{\Depth}%
+\put(-1.0000,1.1500){\hspace*{\Width}\raisebox{\Height}{(-1,1)}}%
+%
+%
+\settowidth{\Width}{(1,0)}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{(1,0)}\settodepth{\Depth}{(1,0)}\setlength{\Height}{-\Height}%
+\put(1.0000,-0.1500){\hspace*{\Width}\raisebox{\Height}{(1,0)}}%
+%
+%
+\settowidth{\Width}{(2,3)}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{(2,3)}\settodepth{\Depth}{(2,3)}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.1500,3.0000){\hspace*{\Width}\raisebox{\Height}{(2,3)}}%
+%
+%
+\settowidth{\Width}{A}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{A}\settodepth{\Depth}{A}\setlength{\Height}{-\Height}%
+\put(1.1500,0.9500){\hspace*{\Width}\raisebox{\Height}{A}}%
+%
+%
+\settowidth{\Width}{B}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{B}\settodepth{\Depth}{B}\setlength{\Height}{-\Height}%
+\put(3.1500,1.9500){\hspace*{\Width}\raisebox{\Height}{B}}%
+%
+%
+\settowidth{\Width}{C}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{C}\settodepth{\Depth}{C}\setlength{\Height}{-\Height}%
+\put(5.1500,2.9500){\hspace*{\Width}\raisebox{\Height}{C}}%
+%
+%
+\settowidth{\Width}{D}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{D}\settodepth{\Depth}{D}\setlength{\Height}{-\Height}%
+\put(3.1500,4.9500){\hspace*{\Width}\raisebox{\Height}{D}}%
+%
+%
+\settowidth{\Width}{E}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{E}\settodepth{\Depth}{E}\setlength{\Height}{-\Height}%
+\put(3.1500,-1.0500){\hspace*{\Width}\raisebox{\Height}{E}}%
+%
+%
+\settowidth{\Width}{F}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{F}\settodepth{\Depth}{F}\setlength{\Height}{-\Height}%
+\put(5.9500,-1.4500){\hspace*{\Width}\raisebox{\Height}{F}}%
+%
+%
+\special{pn 8}%
+\special{pa 1537 -1421}\special{pa 1534 -1414}\special{fp}\special{pa 1520 -1386}\special{pa 1516 -1379}\special{fp}%
+\special{pa 1502 -1351}\special{pa 1499 -1344}\special{fp}\special{pa 1485 -1316}\special{pa 1481 -1309}\special{fp}%
+\special{pa 1467 -1281}\special{pa 1464 -1274}\special{fp}\special{pa 1450 -1246}\special{pa 1446 -1239}\special{fp}%
+\special{pa 1432 -1211}\special{pa 1429 -1204}\special{fp}\special{pa 1415 -1176}\special{pa 1411 -1169}\special{fp}%
+\special{pa 1397 -1141}\special{pa 1394 -1134}\special{fp}\special{pa 1380 -1106}\special{pa 1376 -1099}\special{fp}%
+\special{pa 1362 -1071}\special{pa 1359 -1064}\special{fp}\special{pa 1345 -1036}\special{pa 1341 -1029}\special{fp}%
+\special{pa 1327 -1001}\special{pa 1324 -994}\special{fp}\special{pa 1310 -966}\special{pa 1306 -959}\special{fp}%
+\special{pa 1292 -931}\special{pa 1289 -924}\special{fp}\special{pa 1275 -896}\special{pa 1271 -889}\special{fp}%
+\special{pa 1257 -861}\special{pa 1254 -854}\special{fp}\special{pa 1240 -826}\special{pa 1236 -819}\special{fp}%
+\special{pa 1222 -791}\special{pa 1219 -784}\special{fp}\special{pa 1205 -756}\special{pa 1201 -749}\special{fp}%
+\special{pa 1187 -721}\special{pa 1184 -714}\special{fp}\special{pa 1170 -686}\special{pa 1166 -679}\special{fp}%
+\special{pa 1152 -651}\special{pa 1149 -644}\special{fp}\special{pa 1135 -616}\special{pa 1131 -609}\special{fp}%
+\special{pa 1117 -581}\special{pa 1114 -574}\special{fp}\special{pa 1100 -546}\special{pa 1096 -539}\special{fp}%
+\special{pa 1082 -511}\special{pa 1079 -504}\special{fp}\special{pa 1065 -476}\special{pa 1061 -469}\special{fp}%
+\special{pa 1047 -441}\special{pa 1044 -434}\special{fp}\special{pa 1030 -406}\special{pa 1026 -399}\special{fp}%
+\special{pa 1012 -371}\special{pa 1009 -364}\special{fp}\special{pa 995 -336}\special{pa 991 -329}\special{fp}%
+\special{pa 977 -301}\special{pa 974 -294}\special{fp}\special{pa 960 -266}\special{pa 956 -259}\special{fp}%
+\special{pa 942 -231}\special{pa 939 -224}\special{fp}\special{pa 925 -196}\special{pa 921 -189}\special{fp}%
+\special{pa 907 -161}\special{pa 904 -154}\special{fp}\special{pa 890 -126}\special{pa 886 -119}\special{fp}%
+\special{pa 872 -91}\special{pa 869 -84}\special{fp}\special{pa 855 -56}\special{pa 851 -49}\special{fp}%
+\special{pa 837 -21}\special{pa 834 -14}\special{fp}\special{pa 820 14}\special{pa 816 21}\special{fp}%
+\special{pa 802 49}\special{pa 799 56}\special{fp}\special{pa 785 84}\special{pa 781 91}\special{fp}%
+\special{pa 767 119}\special{pa 764 126}\special{fp}\special{pa 750 154}\special{pa 746 161}\special{fp}%
+\special{pa 732 189}\special{pa 729 196}\special{fp}\special{pa 715 224}\special{pa 711 231}\special{fp}%
+\special{pa 697 259}\special{pa 694 266}\special{fp}\special{pa 680 294}\special{pa 676 301}\special{fp}%
+\special{pa 662 329}\special{pa 659 336}\special{fp}\special{pa 645 364}\special{pa 641 371}\special{fp}%
+\special{pa 627 399}\special{pa 624 406}\special{fp}\special{pa 610 434}\special{pa 606 441}\special{fp}%
+\special{pa 592 469}\special{pa 589 476}\special{fp}\special{pn 8}%
+\special{pa -709 0}\special{pa 1654 0}%
+\special{fp}%
+\special{pa 0 472}\special{pa 0 -1417}%
+\special{fp}%
+\settowidth{\Width}{$x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(7.0500,0.0000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{\Depth}%
+\put(0.0000,6.0500){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+%
+\settowidth{\Width}{O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(-0.0500,-0.0500){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/rotatedata.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/rotatedata.tex
new file mode 100644
index 0000000000..68bf0eb085
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/rotatedata.tex
@@ -0,0 +1,126 @@
+%%% test.tex 2014-11-1 16:34
+%%% test.sce 2014-11-1 16:34
+{\unitlength=6mm%
+\begin{picture}%
+( 14.00000, 9.00000)( -6.00000, -2.00000)%
+\special{pn 8}%
+%
+\special{pn 16}%
+\special{pa 1222 -1001}\special{pa 1184 -1019}\special{pa 1145 -1033}\special{pa 1104 -1042}%
+\special{pa 1062 -1045}\special{pa 1020 -1043}\special{pa 979 -1036}\special{pa 939 -1024}%
+\special{pa 900 -1007}\special{pa 864 -985}\special{pa 832 -959}\special{pa 802 -929}%
+\special{pa 777 -895}\special{pa 756 -859}\special{pa 740 -820}\special{pa 729 -779}%
+\special{pa 723 -738}\special{pa 722 -696}\special{pa 727 -654}\special{pa 736 -614}%
+\special{pa 751 -574}\special{pa 771 -537}\special{pa 795 -503}\special{pa 823 -472}%
+\special{pa 855 -444}\special{pa 890 -421}\special{pa 927 -403}\special{pa 967 -389}%
+\special{pa 1008 -380}\special{pa 1050 -377}\special{pa 1092 -379}\special{pa 1133 -386}%
+\special{pa 1173 -398}\special{pa 1211 -415}\special{pa 1247 -437}\special{pa 1280 -463}%
+\special{pa 1309 -493}\special{pa 1335 -527}\special{pa 1355 -563}\special{pa 1372 -602}%
+\special{pa 1383 -642}\special{pa 1389 -684}\special{pa 1390 -726}\special{pa 1385 -768}%
+\special{pa 1375 -808}\special{pa 1361 -848}\special{pa 1341 -885}\special{pa 1317 -919}%
+\special{pa 1289 -950}\special{pa 1257 -978}\special{pa 1222 -1001}%
+\special{fp}%
+\special{pn 8}%
+\special{pa -773 194}\special{pa -741 172}\special{fp}\special{pa -711 147}\special{pa -706 143}\special{pa -684 119}\special{fp}%
+\special{pa -661 88}\special{pa -654 78}\special{pa -642 54}\special{fp}\special{pa -626 19}\special{pa -620 1}\special{pa -615 -18}\special{fp}%
+\special{pa -608 -57}\special{pa -606 -81}\special{pa -606 -95}\special{fp}\special{pa -608 -134}\special{pa -612 -165}\special{pa -615 -172}\special{fp}%
+\special{pa -625 -210}\special{pa -640 -244}\special{pa -641 -245}\special{fp}\special{pa -660 -279}\special{pa -661 -280}\special{pa -683 -310}\special{fp}%
+\special{pa -710 -338}\special{pa -715 -344}\special{pa -740 -363}\special{fp}\special{pa -772 -385}\special{pa -784 -392}\special{pa -807 -402}\special{fp}%
+\special{pa -843 -415}\special{pa -862 -421}\special{pa -881 -424}\special{fp}\special{pa -919 -429}\special{pa -946 -430}\special{pa -958 -429}\special{fp}%
+\special{pa -996 -425}\special{pa -1028 -418}\special{pa -1034 -416}\special{fp}\special{pa -1071 -403}\special{pa -1106 -386}\special{pa -1106 -386}\special{fp}%
+\special{pa -1138 -365}\special{pa -1141 -363}\special{pa -1168 -340}\special{fp}%
+\special{pa -1194 -311}\special{pa -1201 -304}\special{pa -1218 -280}\special{fp}%
+\special{pa -1237 -247}\special{pa -1244 -233}\special{pa -1252 -211}\special{fp}%
+\special{pa -1264 -174}\special{pa -1269 -153}\special{pa -1271 -136}\special{fp}%
+\special{pa -1273 -97}\special{pa -1272 -69}\special{pa -1271 -58}\special{fp}\special{pa -1264 -20}\special{pa -1255 13}\special{pa -1253 17}\special{fp}%
+\special{pa -1238 53}\special{pa -1219 86}\special{fp}\special{pa -1196 118}\special{pa -1193 121}\special{pa -1169 146}\special{fp}%
+\special{pa -1139 171}\special{pa -1131 178}\special{pa -1107 192}\special{fp}\special{pa -1072 210}\special{pa -1057 217}\special{pa -1036 223}\special{fp}%
+\special{pa -998 232}\special{pa -975 236}\special{pa -960 237}\special{fp}\special{pa -921 237}\special{pa -892 234}\special{pa -882 232}\special{fp}%
+\special{pa -845 224}\special{pa -811 212}\special{pa -808 211}\special{fp}%
+%
+\settowidth{\Width}{A}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{A}\settodepth{\Depth}{A}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(1.0500,1.0000){\hspace*{\Width}\raisebox{\Height}{A}}%
+%
+%
+\settowidth{\Width}{B}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{B}\settodepth{\Depth}{B}\setlength{\Height}{\Depth}%
+\put(-0.0500,2.0500){\hspace*{\Width}\raisebox{\Height}{B}}%
+%
+%
+\settowidth{\Width}{C}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{C}\settodepth{\Depth}{C}\setlength{\Height}{\Depth}%
+\put(2.9500,2.0500){\hspace*{\Width}\raisebox{\Height}{C}}%
+%
+%
+\settowidth{\Width}{D}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{D}\settodepth{\Depth}{D}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-1.9500,5.0000){\hspace*{\Width}\raisebox{\Height}{D}}%
+%
+%
+\settowidth{\Width}{(1,5)}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{(1,5)}\settodepth{\Depth}{(1,5)}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(1.0500,5.0000){\hspace*{\Width}\raisebox{\Height}{(1,5)}}%
+%
+%
+\special{pa 245 -245}\special{pa 238 -248}\special{pa 231 -247}\special{pa 226 -242}%
+\special{pa 225 -234}\special{pa 228 -228}\special{pa 234 -225}\special{pa 242 -226}%
+\special{pa 247 -231}\special{pa 248 -238}\special{pa 245 -245}\special{sh 1}\special{fp}%
+\special{pa 8 -481}\special{pa 2 -484}\special{pa -5 -483}\special{pa -11 -478}\special{pa -12 -471}%
+\special{pa -8 -464}\special{pa -2 -461}\special{pa 5 -462}\special{pa 11 -467}\special{pa 12 -474}%
+\special{pa 8 -481}\special{sh 1}\special{fp}%
+\special{pa 717 -481}\special{pa 711 -484}\special{pa 703 -483}\special{pa 698 -478}%
+\special{pa 697 -471}\special{pa 700 -464}\special{pa 707 -461}\special{pa 714 -462}%
+\special{pa 719 -467}\special{pa 720 -474}\special{pa 717 -481}\special{sh 1}\special{fp}%
+\special{pa -464 -1189}\special{pa -471 -1193}\special{pa -478 -1192}\special{pa -483 -1186}%
+\special{pa -484 -1179}\special{pa -481 -1173}\special{pa -474 -1169}\special{pa -467 -1171}%
+\special{pa -462 -1176}\special{pa -461 -1183}\special{pa -464 -1189}\special{sh 1}\special{fp}%
+\special{pa 245 -1189}\special{pa 238 -1193}\special{pa 231 -1192}\special{pa 226 -1186}%
+\special{pa 225 -1179}\special{pa 228 -1173}\special{pa 234 -1169}\special{pa 242 -1171}%
+\special{pa 247 -1176}\special{pa 248 -1183}\special{pa 245 -1189}\special{sh 1}\special{fp}%
+\special{pa 570 -236}\special{pa 568 -278}\special{pa 560 -319}\special{pa 547 -359}%
+\special{pa 529 -397}\special{pa 506 -433}\special{pa 480 -465}\special{pa 449 -494}%
+\special{pa 415 -518}\special{pa 378 -538}\special{pa 339 -554}\special{pa 299 -564}%
+\special{pa 257 -570}\special{pa 215 -570}\special{pa 174 -564}\special{pa 133 -554}%
+\special{pa 94 -538}\special{pa 57 -518}\special{pa 23 -494}\special{pa -7 -465}\special{pa -34 -433}%
+\special{pa -57 -397}\special{pa -74 -359}\special{pa -87 -319}\special{pa -95 -278}%
+\special{pa -98 -236}\special{pa -95 -194}\special{pa -87 -153}\special{pa -74 -113}%
+\special{pa -57 -75}\special{pa -34 -40}\special{pa -7 -8}\special{pa 23 21}\special{pa 57 46}%
+\special{pa 94 66}\special{pa 133 81}\special{pa 174 92}\special{pa 215 97}\special{pa 257 97}%
+\special{pa 299 92}\special{pa 339 81}\special{pa 378 66}\special{pa 415 46}\special{pa 449 21}%
+\special{pa 480 -8}\special{pa 506 -40}\special{pa 529 -75}\special{pa 547 -113}\special{pa 560 -153}%
+\special{pa 568 -194}\special{pa 570 -236}%
+\special{fp}%
+\special{pa 945 -334}\special{pa 903 -331}\special{pa 862 -323}\special{pa 822 -311}%
+\special{pa 784 -293}\special{pa 748 -270}\special{pa 716 -244}\special{pa 687 -213}%
+\special{pa 663 -179}\special{pa 642 -142}\special{pa 627 -103}\special{pa 616 -63}%
+\special{pa 611 -21}\special{pa 611 21}\special{pa 616 63}\special{pa 627 103}\special{pa 642 142}%
+\special{pa 662 179}\special{pa 687 213}\special{pa 716 244}\special{pa 748 270}\special{pa 783 293}%
+\special{pa 821 311}\special{pa 861 324}\special{pa 902 332}\special{pa 944 334}\special{pa 986 332}%
+\special{pa 1027 324}\special{pa 1067 311}\special{pa 1105 293}\special{pa 1141 271}%
+\special{pa 1173 244}\special{pa 1202 213}\special{pa 1226 179}\special{pa 1247 143}%
+\special{pa 1262 104}\special{pa 1273 63}\special{pa 1278 21}\special{pa 1278 -21}%
+\special{pa 1273 -62}\special{pa 1262 -103}\special{pa 1247 -142}\special{pa 1227 -179}%
+\special{pa 1202 -213}\special{pa 1173 -243}\special{pa 1141 -270}\special{pa 1106 -292}%
+\special{pa 1068 -310}\special{pa 1028 -323}\special{pa 987 -331}\special{pa 945 -334}%
+\special{fp}%
+\special{pa -1417 0}\special{pa 1890 0}%
+\special{fp}%
+\special{pa 0 472}\special{pa 0 -1654}%
+\special{fp}%
+\settowidth{\Width}{$x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(8.0500,0.0000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{\Depth}%
+\put(0.0000,7.0500){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+%
+\settowidth{\Width}{O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(-0.0500,-0.0500){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/rotatedata3d01.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/rotatedata3d01.tex
new file mode 100644
index 0000000000..1ab86842f4
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/rotatedata3d01.tex
@@ -0,0 +1,85 @@
+%%% /Users/Hannya/ketcindy/ketwork/template.tex 2016-8-15 20:33
+%%% template.sce 2016-8-15 20:33
+{\unitlength=8mm%
+\begin{picture}%
+( 7.77000, 5.78000)( -4.42000, -1.51000)%
+\special{pn 8}%
+%
+\settowidth{\Width}{$x$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-3.5455,-0.5866){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.8935,-1.1428){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+%
+\settowidth{\Width}{$z$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$z$}\settodepth{\Depth}{$z$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(0.0000,4.0571){\hspace*{\Width}\raisebox{\Height}{$z$}}%
+%
+%
+\special{pa 1055 -175}\special{pa -1058 175}%
+\special{fp}%
+\special{pa -856 -338}\special{pa 856 338}%
+\special{fp}%
+\special{pa 0 476}\special{pa 0 -1218}%
+\special{fp}%
+\special{pa -988 139}\special{pa -1058 175}\special{pa -980 187}\special{pa -984 163}%
+\special{pa -988 139}\special{sh 1}\special{ip}%
+\special{pn 1}%
+\special{pa -988 139}\special{pa -1058 175}\special{pa -980 187}\special{pa -984 163}%
+\special{pa -988 139}\special{pa -1058 175}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 777 333}\special{pa 856 338}\special{pa 795 288}\special{pa 786 310}\special{pa 777 333}%
+\special{sh 1}\special{ip}%
+\special{pn 1}%
+\special{pa 777 333}\special{pa 856 338}\special{pa 795 288}\special{pa 786 310}\special{pa 777 333}%
+\special{pa 856 338}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 24 -1143}\special{pa 0 -1218}\special{pa -24 -1143}\special{pa 0 -1143}%
+\special{pa 24 -1143}\special{sh 1}\special{ip}%
+\special{pn 1}%
+\special{pa 24 -1143}\special{pa 0 -1218}\special{pa -24 -1143}\special{pa 0 -1143}%
+\special{pa 24 -1143}\special{pa 0 -1218}%
+\special{fp}%
+\special{pn 8}%
+\settowidth{\Width}{O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(-0.0500,-0.0500){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+%
+\special{pa -342 -135}\special{pa -871 -48}\special{pa -607 -700}\special{pa -342 -135}%
+\special{fp}%
+\special{pa -607 -700}\special{pa -607 -1005}%
+\special{fp}%
+\special{pn 16}%
+\special{pa -529 87}\special{pa -187 223}\special{pa -358 -454}\special{pa -529 87}%
+\special{fp}%
+\special{pa -358 -454}\special{pa -358 -758}%
+\special{fp}%
+\special{pn 8}%
+\settowidth{\Width}{A}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{A}\settodepth{\Depth}{A}\setlength{\Height}{-\Height}%
+\put(-1.0867,0.3792){\hspace*{\Width}\raisebox{\Height}{A}}%
+%
+%
+\settowidth{\Width}{B}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{B}\settodepth{\Depth}{B}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-2.8157,0.1514){\hspace*{\Width}\raisebox{\Height}{B}}%
+%
+%
+\settowidth{\Width}{C}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{C}\settodepth{\Depth}{C}\setlength{\Height}{\Depth}%
+\put(-1.8762,2.2739){\hspace*{\Width}\raisebox{\Height}{C}}%
+%
+%
+\settowidth{\Width}{D}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{D}\settodepth{\Depth}{D}\setlength{\Height}{\Depth}%
+\put(-1.8762,3.2406){\hspace*{\Width}\raisebox{\Height}{D}}%
+%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/rotatedata3d02.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/rotatedata3d02.tex
new file mode 100644
index 0000000000..35cbc5258e
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/rotatedata3d02.tex
@@ -0,0 +1,85 @@
+%%% /Users/Hannya/ketcindy/ketwork/template.tex 2016-8-15 20:32
+%%% template.sce 2016-8-15 20:32
+{\unitlength=8mm%
+\begin{picture}%
+( 7.77000, 5.78000)( -4.42000, -1.51000)%
+\special{pn 8}%
+%
+\settowidth{\Width}{$x$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-3.5455,-0.5866){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.8935,-1.1428){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+%
+\settowidth{\Width}{$z$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$z$}\settodepth{\Depth}{$z$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(0.0000,4.0571){\hspace*{\Width}\raisebox{\Height}{$z$}}%
+%
+%
+\special{pa 1055 -175}\special{pa -1058 175}%
+\special{fp}%
+\special{pa -856 -338}\special{pa 856 338}%
+\special{fp}%
+\special{pa 0 476}\special{pa 0 -1218}%
+\special{fp}%
+\special{pa -988 139}\special{pa -1058 175}\special{pa -980 187}\special{pa -984 163}%
+\special{pa -988 139}\special{sh 1}\special{ip}%
+\special{pn 1}%
+\special{pa -988 139}\special{pa -1058 175}\special{pa -980 187}\special{pa -984 163}%
+\special{pa -988 139}\special{pa -1058 175}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 777 333}\special{pa 856 338}\special{pa 795 288}\special{pa 786 310}\special{pa 777 333}%
+\special{sh 1}\special{ip}%
+\special{pn 1}%
+\special{pa 777 333}\special{pa 856 338}\special{pa 795 288}\special{pa 786 310}\special{pa 777 333}%
+\special{pa 856 338}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 24 -1143}\special{pa 0 -1218}\special{pa -24 -1143}\special{pa 0 -1143}%
+\special{pa 24 -1143}\special{sh 1}\special{ip}%
+\special{pn 1}%
+\special{pa 24 -1143}\special{pa 0 -1218}\special{pa -24 -1143}\special{pa 0 -1143}%
+\special{pa 24 -1143}\special{pa 0 -1218}%
+\special{fp}%
+\special{pn 8}%
+\settowidth{\Width}{O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(-0.0500,-0.0500){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+%
+\special{pa -342 -135}\special{pa -871 -48}\special{pa -607 -700}\special{pa -342 -135}%
+\special{fp}%
+\special{pa -607 -700}\special{pa -607 -1005}%
+\special{fp}%
+\special{pn 16}%
+\special{pa -964 64}\special{pa -622 199}\special{pa -793 -478}\special{pa -964 64}%
+\special{fp}%
+\special{pa -793 -478}\special{pa -793 -782}%
+\special{fp}%
+\special{pn 8}%
+\settowidth{\Width}{A}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{A}\settodepth{\Depth}{A}\setlength{\Height}{-\Height}%
+\put(-1.0867,0.3792){\hspace*{\Width}\raisebox{\Height}{A}}%
+%
+%
+\settowidth{\Width}{B}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{B}\settodepth{\Depth}{B}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-2.8157,0.1514){\hspace*{\Width}\raisebox{\Height}{B}}%
+%
+%
+\settowidth{\Width}{C}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{C}\settodepth{\Depth}{C}\setlength{\Height}{\Depth}%
+\put(-1.8762,2.2739){\hspace*{\Width}\raisebox{\Height}{C}}%
+%
+%
+\settowidth{\Width}{D}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{D}\settodepth{\Depth}{D}\setlength{\Height}{\Depth}%
+\put(-1.8762,3.2406){\hspace*{\Width}\raisebox{\Height}{D}}%
+%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/rotatepoint.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/rotatepoint.tex
new file mode 100644
index 0000000000..882a741c16
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/rotatepoint.tex
@@ -0,0 +1,140 @@
+%%% test.tex 2014-12-3 8:22
+%%% test.sce 2014-12-3 8:22
+{\unitlength=6mm%
+\begin{picture}%
+( 8.04000, 8.12000)( -1.20000, -1.96000)%
+\special{pn 8}%
+%
+\special{pa 1189 -481}\special{pa 1183 -484}\special{pa 1176 -483}\special{pa 1171 -478}%
+\special{pa 1169 -471}\special{pa 1173 -464}\special{pa 1179 -461}\special{pa 1186 -462}%
+\special{pa 1192 -467}\special{pa 1193 -474}\special{pa 1189 -481}\special{sh 1}\special{fp}%
+\special{pa 245 -245}\special{pa 238 -248}\special{pa 231 -247}\special{pa 226 -242}%
+\special{pa 225 -234}\special{pa 228 -228}\special{pa 234 -225}\special{pa 242 -226}%
+\special{pa 247 -231}\special{pa 248 -238}\special{pa 245 -245}\special{sh 1}\special{fp}%
+\special{pa 481 -717}\special{pa 474 -720}\special{pa 467 -719}\special{pa 462 -714}%
+\special{pa 461 -707}\special{pa 464 -700}\special{pa 471 -697}\special{pa 478 -698}%
+\special{pa 483 -703}\special{pa 484 -711}\special{pa 481 -717}\special{sh 1}\special{fp}%
+\special{pa 1008 -748}\special{pa 1001 -751}\special{pa 994 -750}\special{pa 989 -745}%
+\special{pa 988 -738}\special{pa 991 -731}\special{pa 997 -728}\special{pa 1005 -729}%
+\special{pa 1010 -734}\special{pa 1011 -741}\special{pa 1008 -748}\special{sh 1}\special{fp}%
+\special{pa 1041 -1213}\special{pa 1034 -1216}\special{pa 1027 -1215}\special{pa 1022 -1210}%
+\special{pa 1021 -1203}\special{pa 1024 -1196}\special{pa 1030 -1193}\special{pa 1038 -1194}%
+\special{pa 1043 -1199}\special{pa 1044 -1207}\special{pa 1041 -1213}\special{sh 1}\special{fp}%
+\special{pa 412 256}\special{pa 406 253}\special{pa 399 254}\special{pa 393 259}\special{pa 392 266}%
+\special{pa 396 273}\special{pa 402 276}\special{pa 409 275}\special{pa 414 270}\special{pa 416 263}%
+\special{pa 412 256}\special{sh 1}\special{fp}%
+\settowidth{\Width}{(3,0)}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{(3,0)}\settodepth{\Depth}{(3,0)}\setlength{\Height}{-\Height}%
+\put(3.0000,-0.1500){\hspace*{\Width}\raisebox{\Height}{(3,0)}}%
+%
+%
+\settowidth{\Width}{(5,2)}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{(5,2)}\settodepth{\Depth}{(5,2)}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(5.1500,2.0000){\hspace*{\Width}\raisebox{\Height}{(5,2)}}%
+%
+%
+\settowidth{\Width}{A}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{A}\settodepth{\Depth}{A}\setlength{\Height}{-\Height}%
+\put(0.8500,0.9500){\hspace*{\Width}\raisebox{\Height}{A}}%
+%
+%
+\settowidth{\Width}{B}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{B}\settodepth{\Depth}{B}\setlength{\Height}{-\Height}%
+\put(1.8500,2.9500){\hspace*{\Width}\raisebox{\Height}{B}}%
+%
+%
+\settowidth{\Width}{C}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{C}\settodepth{\Depth}{C}\setlength{\Height}{-\Height}%
+\put(4.3800,3.0800){\hspace*{\Width}\raisebox{\Height}{C}}%
+%
+%
+\settowidth{\Width}{D}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{D}\settodepth{\Depth}{D}\setlength{\Height}{-\Height}%
+\put(4.5200,5.0500){\hspace*{\Width}\raisebox{\Height}{D}}%
+%
+%
+\settowidth{\Width}{E}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{E}\settodepth{\Depth}{E}\setlength{\Height}{-\Height}%
+\put(1.8600,-1.1700){\hspace*{\Width}\raisebox{\Height}{E}}%
+%
+%
+\special{pn 8}%
+\special{pa 234 -233}\special{pa 238 -240}\special{fp}\special{pa 253 -269}\special{pa 256 -276}\special{fp}%
+\special{pa 271 -305}\special{pa 274 -312}\special{fp}\special{pa 289 -342}\special{pa 293 -349}\special{fp}%
+\special{pa 307 -378}\special{pa 311 -385}\special{fp}\special{pa 325 -414}\special{pa 329 -422}\special{fp}%
+\special{pa 343 -451}\special{pa 347 -458}\special{fp}\special{pa 362 -487}\special{pa 365 -494}\special{fp}%
+\special{pa 380 -523}\special{pa 383 -531}\special{fp}\special{pa 398 -560}\special{pa 402 -567}\special{fp}%
+\special{pa 416 -596}\special{pa 420 -603}\special{fp}\special{pa 434 -632}\special{pa 438 -640}\special{fp}%
+\special{pa 452 -669}\special{pa 456 -676}\special{fp}\special{pa 471 -705}\special{pa 474 -712}\special{fp}%
+\special{pn 8}%
+\special{pn 8}%
+\special{pa 1003 -740}\special{pa 995 -739}\special{fp}\special{pa 963 -737}\special{pa 955 -737}\special{fp}%
+\special{pa 922 -735}\special{pa 914 -734}\special{fp}\special{pa 882 -733}\special{pa 874 -732}\special{fp}%
+\special{pa 841 -730}\special{pa 833 -730}\special{fp}\special{pa 801 -728}\special{pa 793 -727}\special{fp}%
+\special{pa 760 -725}\special{pa 752 -725}\special{fp}\special{pa 720 -723}\special{pa 712 -723}\special{fp}%
+\special{pa 679 -721}\special{pa 671 -720}\special{fp}\special{pa 639 -718}\special{pa 631 -718}\special{fp}%
+\special{pa 598 -716}\special{pa 590 -716}\special{fp}\special{pa 557 -714}\special{pa 549 -713}\special{fp}%
+\special{pa 517 -711}\special{pa 509 -711}\special{fp}\special{pa 476 -709}\special{pa 468 -708}\special{fp}%
+\special{pn 8}%
+\special{pn 8}%
+\special{pa 1035 -1207}\special{pa 1029 -1202}\special{fp}\special{pa 1006 -1181}\special{pa 1000 -1176}\special{fp}%
+\special{pa 976 -1155}\special{pa 970 -1150}\special{fp}\special{pa 947 -1129}\special{pa 941 -1124}\special{fp}%
+\special{pa 917 -1103}\special{pa 911 -1098}\special{fp}\special{pa 888 -1077}\special{pa 882 -1072}\special{fp}%
+\special{pa 858 -1051}\special{pa 852 -1045}\special{fp}\special{pa 829 -1025}\special{pa 823 -1019}\special{fp}%
+\special{pa 800 -999}\special{pa 794 -993}\special{fp}\special{pa 770 -972}\special{pa 764 -967}\special{fp}%
+\special{pa 741 -946}\special{pa 735 -941}\special{fp}\special{pa 711 -920}\special{pa 705 -915}\special{fp}%
+\special{pa 682 -894}\special{pa 676 -889}\special{fp}\special{pa 652 -868}\special{pa 646 -863}\special{fp}%
+\special{pa 623 -842}\special{pa 617 -837}\special{fp}\special{pa 593 -816}\special{pa 587 -810}\special{fp}%
+\special{pa 564 -790}\special{pa 558 -784}\special{fp}\special{pa 534 -764}\special{pa 528 -758}\special{fp}%
+\special{pa 505 -737}\special{pa 499 -732}\special{fp}\special{pa 475 -711}\special{pa 469 -706}\special{fp}%
+\special{pn 8}%
+\special{pn 8}%
+\special{pa 1185 -471}\special{pa 1177 -474}\special{fp}\special{pa 1148 -484}\special{pa 1140 -486}\special{fp}%
+\special{pa 1110 -496}\special{pa 1103 -499}\special{fp}\special{pa 1073 -508}\special{pa 1065 -511}\special{fp}%
+\special{pa 1036 -521}\special{pa 1028 -523}\special{fp}\special{pa 998 -533}\special{pa 991 -536}\special{fp}%
+\special{pa 961 -546}\special{pa 954 -548}\special{fp}\special{pa 924 -558}\special{pa 916 -561}\special{fp}%
+\special{pa 887 -571}\special{pa 879 -573}\special{fp}\special{pa 849 -583}\special{pa 842 -586}\special{fp}%
+\special{pa 812 -596}\special{pa 804 -598}\special{fp}\special{pa 775 -608}\special{pa 767 -610}\special{fp}%
+\special{pa 737 -620}\special{pa 730 -623}\special{fp}\special{pa 700 -633}\special{pa 692 -635}\special{fp}%
+\special{pa 663 -645}\special{pa 655 -648}\special{fp}\special{pa 625 -658}\special{pa 618 -660}\special{fp}%
+\special{pa 588 -670}\special{pa 581 -673}\special{fp}\special{pa 551 -683}\special{pa 543 -685}\special{fp}%
+\special{pa 514 -695}\special{pa 506 -697}\special{fp}\special{pa 476 -707}\special{pa 469 -710}\special{fp}%
+\special{pn 8}%
+\special{pn 8}%
+\special{pa 712 2}\special{pa 705 -2}\special{fp}\special{pa 676 -16}\special{pa 669 -20}\special{fp}%
+\special{pa 640 -35}\special{pa 632 -38}\special{fp}\special{pa 603 -53}\special{pa 596 -56}\special{fp}%
+\special{pa 567 -71}\special{pa 560 -74}\special{fp}\special{pa 531 -89}\special{pa 523 -93}\special{fp}%
+\special{pa 494 -107}\special{pa 487 -111}\special{fp}\special{pa 458 -125}\special{pa 451 -129}\special{fp}%
+\special{pa 422 -144}\special{pa 414 -147}\special{fp}\special{pa 385 -162}\special{pa 378 -165}\special{fp}%
+\special{pa 349 -180}\special{pa 342 -183}\special{fp}\special{pa 312 -198}\special{pa 305 -202}\special{fp}%
+\special{pa 276 -216}\special{pa 269 -220}\special{fp}\special{pa 240 -234}\special{pa 233 -238}\special{fp}%
+\special{pn 8}%
+\special{pn 8}%
+\special{pa 405 268}\special{pa 403 261}\special{fp}\special{pa 392 230}\special{pa 390 222}\special{fp}%
+\special{pa 379 191}\special{pa 377 184}\special{fp}\special{pa 367 153}\special{pa 364 145}\special{fp}%
+\special{pa 354 114}\special{pa 351 107}\special{fp}\special{pa 341 76}\special{pa 338 68}\special{fp}%
+\special{pa 328 37}\special{pa 325 30}\special{fp}\special{pa 315 -1}\special{pa 312 -9}\special{fp}%
+\special{pa 302 -40}\special{pa 299 -47}\special{fp}\special{pa 289 -78}\special{pa 287 -86}\special{fp}%
+\special{pa 276 -117}\special{pa 274 -124}\special{fp}\special{pa 263 -155}\special{pa 261 -163}\special{fp}%
+\special{pa 250 -194}\special{pa 248 -201}\special{fp}\special{pa 237 -232}\special{pa 235 -240}\special{fp}%
+\special{pn 8}%
+\special{pa -283 0}\special{pa 1616 0}%
+\special{fp}%
+\special{pa 0 463}\special{pa 0 -1455}%
+\special{fp}%
+\settowidth{\Width}{$x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(6.8900,0.0000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{\Depth}%
+\put(0.0000,6.2100){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+%
+\settowidth{\Width}{O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(-0.0500,-0.0500){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/rshade.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/rshade.tex
new file mode 100644
index 0000000000..92d0d90607
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/rshade.tex
@@ -0,0 +1,72 @@
+%%% fig.tex 2016-4-23 15:15
+%%% fig.sce 2016-4-23 15:15
+{\unitlength=10mm%
+\begin{picture}%
+( 6.00000, 3.00000)( -3.00000, -1.00000)%
+\special{pn 8}%
+%
+\color[cmyk]{0.2,0,0,0}%
+\color[cmyk]{0.2,0,0,0}%
+\special{pa 147 -293}\special{pa 139 -295}\special{pa 99 -304}\special{pa 60 -311}%
+\special{pa 20 -314}\special{pa -20 -314}\special{pa -60 -311}\special{pa -99 -304}%
+\special{pa -139 -295}\special{pa -179 -283}\special{pa -219 -269}\special{pa -259 -253}%
+\special{pa -298 -236}\special{pa -338 -217}\special{pa -378 -198}\special{pa -418 -179}%
+\special{pa -457 -160}\special{pa -497 -142}\special{pa -537 -124}\special{pa -577 -107}%
+\special{pa -616 -92}\special{pa -656 -78}\special{pa -696 -66}\special{pa -736 -55}%
+\special{pa -775 -45}\special{pa -815 -37}\special{pa -855 -30}\special{pa -895 -24}%
+\special{pa -935 -19}\special{pa -974 -15}\special{pa -1014 -11}\special{pa -1054 -9}%
+\special{pa -1094 -7}\special{pa -1133 -5}\special{pa -1173 -4}\special{pa -1213 -3}%
+\special{pa -1253 -2}\special{pa -1292 -1}\special{pa -1332 -1}\special{pa -1372 -1}%
+\special{pa -1412 0}\special{pa -1452 0}\special{pa -1491 0}\special{pa -1531 0}\special{pa 147 0}%
+\special{pa 147 -293}\special{sh 1}\special{ip}%
+\color[cmyk]{0,0,0,1}%
+\special{pa -1181 -4}\special{pa -1173 -4}\special{pa -1133 -5}\special{pa -1094 -7}%
+\special{pa -1054 -9}\special{pa -1014 -11}\special{pa -974 -15}\special{pa -935 -19}%
+\special{pa -895 -24}\special{pa -855 -30}\special{pa -815 -37}\special{pa -775 -45}%
+\special{pa -736 -55}\special{pa -696 -66}\special{pa -656 -78}\special{pa -616 -92}%
+\special{pa -577 -107}\special{pa -537 -124}\special{pa -497 -142}\special{pa -457 -160}%
+\special{pa -418 -179}\special{pa -378 -198}\special{pa -338 -217}\special{pa -298 -236}%
+\special{pa -259 -253}\special{pa -219 -269}\special{pa -179 -283}\special{pa -139 -295}%
+\special{pa -99 -304}\special{pa -60 -311}\special{pa -20 -314}\special{pa 20 -314}%
+\special{pa 60 -311}\special{pa 99 -304}\special{pa 139 -295}\special{pa 179 -283}%
+\special{pa 219 -269}\special{pa 259 -253}\special{pa 298 -236}\special{pa 338 -217}%
+\special{pa 378 -198}\special{pa 418 -179}\special{pa 457 -160}\special{pa 497 -142}%
+\special{pa 537 -124}\special{pa 577 -107}\special{pa 616 -92}\special{pa 656 -78}%
+\special{pa 696 -66}\special{pa 736 -55}\special{pa 775 -45}\special{pa 815 -37}\special{pa 855 -30}%
+\special{pa 895 -24}\special{pa 935 -19}\special{pa 974 -15}\special{pa 1014 -11}%
+\special{pa 1054 -9}\special{pa 1094 -7}\special{pa 1133 -5}\special{pa 1173 -4}\special{pa 1181 -4}%
+\special{fp}%
+\special{pa 147 0}\special{pa 147 -293}%
+\special{fp}%
+\special{pa -1181 0}\special{pa 1181 0}%
+\special{fp}%
+\settowidth{\Width}{$0.37$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$0.37$}\settodepth{\Depth}{$0.37$}\setlength{\Height}{-\Height}%
+\put(0.3722,-0.0500){\hspace*{\Width}\raisebox{\Height}{$0.37$}}%
+%
+%
+\settowidth{\Width}{$P=0.65$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$P=0.65$}\settodepth{\Depth}{$P=0.65$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-1.9500,1.0000){\hspace*{\Width}\raisebox{\Height}{$P=0.65$}}%
+%
+%
+\special{pa -1181 0}\special{pa 1181 0}%
+\special{fp}%
+\special{pa 0 394}\special{pa 0 -787}%
+\special{fp}%
+\settowidth{\Width}{$x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(3.0500,0.0000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{\Depth}%
+\put(0.0000,2.0500){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+%
+\settowidth{\Width}{O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(-0.0500,-0.0500){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ruler.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ruler.tex
new file mode 100644
index 0000000000..a976f1b795
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ruler.tex
@@ -0,0 +1,66 @@
+%%% fig.tex 2016-5-2 18:2
+%%% fig.sce 2016-5-2 18:2
+{\unitlength=8mm%
+\begin{picture}%
+( 6.62000, 3.97000)( -0.62000, -0.47000)%
+\special{pn 8}%
+%
+\special{pa 0 0}\special{pa 1726 0}\special{pa 1726 -901}\special{pa 0 -901}\special{pa 0 0}%
+\special{fp}%
+\settowidth{\Width}{$0$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$0$}\settodepth{\Depth}{$0$}\setlength{\Height}{-\Height}%
+\put(0.0000,-0.1500){\hspace*{\Width}\raisebox{\Height}{$0$}}%
+%
+%
+\special{pa 0 0}\special{pa 0 31}%
+\special{fp}%
+\settowidth{\Width}{$1$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$1$}\settodepth{\Depth}{$1$}\setlength{\Height}{-\Height}%
+\put(1.0000,-0.1500){\hspace*{\Width}\raisebox{\Height}{$1$}}%
+%
+%
+\special{pa 315 0}\special{pa 315 31}%
+\special{fp}%
+\settowidth{\Width}{$2$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$2$}\settodepth{\Depth}{$2$}\setlength{\Height}{-\Height}%
+\put(2.0000,-0.1500){\hspace*{\Width}\raisebox{\Height}{$2$}}%
+%
+%
+\special{pa 630 0}\special{pa 630 31}%
+\special{fp}%
+\settowidth{\Width}{$3$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$3$}\settodepth{\Depth}{$3$}\setlength{\Height}{-\Height}%
+\put(3.0000,-0.1500){\hspace*{\Width}\raisebox{\Height}{$3$}}%
+%
+%
+\special{pa 945 0}\special{pa 945 31}%
+\special{fp}%
+\settowidth{\Width}{$4$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$4$}\settodepth{\Depth}{$4$}\setlength{\Height}{-\Height}%
+\put(4.0000,-0.1500){\hspace*{\Width}\raisebox{\Height}{$4$}}%
+%
+%
+\special{pa 1260 0}\special{pa 1260 31}%
+\special{fp}%
+\settowidth{\Width}{$5$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$5$}\settodepth{\Depth}{$5$}\setlength{\Height}{-\Height}%
+\put(5.0000,-0.1500){\hspace*{\Width}\raisebox{\Height}{$5$}}%
+%
+%
+\special{pa 1575 0}\special{pa 1575 31}%
+\special{fp}%
+\settowidth{\Width}{$d1$}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{$d1$}\settodepth{\Depth}{$d1$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-0.1500,1.0000){\hspace*{\Width}\raisebox{\Height}{$d1$}}%
+%
+%
+\special{pa 0 -315}\special{pa -31 -315}%
+\special{fp}%
+\settowidth{\Width}{$d2$}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{$d2$}\settodepth{\Depth}{$d2$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-0.1500,3.0000){\hspace*{\Width}\raisebox{\Height}{$d2$}}%
+%
+%
+\special{pa 0 -945}\special{pa -31 -945}%
+\special{fp}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ruler1.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ruler1.tex
new file mode 100644
index 0000000000..6999d3578a
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ruler1.tex
@@ -0,0 +1,74 @@
+%%% /Users/Hannya/Desktop/fig/template1.tex
+%%% Generator=template1.cdy
+{\unitlength=1cm%
+\begin{picture}%
+(10.4,2.41)(-0.86,-0.56)%
+\special{pn 8}%
+%
+\special{pa 787 -394}\special{pa 3543 -394}%
+\special{fp}%
+\settowidth{\Width}{$20$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$20$}\settodepth{\Depth}{$20$}\setlength{\Height}{-\Height}%
+\put(2.0000000,0.8500000){\hspace*{\Width}\raisebox{\Height}{$20$}}%
+%
+\special{pa 787 -394}\special{pa 787 -354}%
+\special{fp}%
+\settowidth{\Width}{$30$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$30$}\settodepth{\Depth}{$30$}\setlength{\Height}{-\Height}%
+\put(3.0000000,0.8500000){\hspace*{\Width}\raisebox{\Height}{$30$}}%
+%
+\special{pa 1181 -394}\special{pa 1181 -354}%
+\special{fp}%
+\settowidth{\Width}{$40$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$40$}\settodepth{\Depth}{$40$}\setlength{\Height}{-\Height}%
+\put(4.0000000,0.8500000){\hspace*{\Width}\raisebox{\Height}{$40$}}%
+%
+\special{pa 1575 -394}\special{pa 1575 -354}%
+\special{fp}%
+\settowidth{\Width}{$50$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$50$}\settodepth{\Depth}{$50$}\setlength{\Height}{-\Height}%
+\put(5.0000000,0.8500000){\hspace*{\Width}\raisebox{\Height}{$50$}}%
+%
+\special{pa 1969 -394}\special{pa 1969 -354}%
+\special{fp}%
+\settowidth{\Width}{$60$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$60$}\settodepth{\Depth}{$60$}\setlength{\Height}{-\Height}%
+\put(6.0000000,0.8500000){\hspace*{\Width}\raisebox{\Height}{$60$}}%
+%
+\special{pa 2362 -394}\special{pa 2362 -354}%
+\special{fp}%
+\settowidth{\Width}{$70$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$70$}\settodepth{\Depth}{$70$}\setlength{\Height}{-\Height}%
+\put(7.0000000,0.8500000){\hspace*{\Width}\raisebox{\Height}{$70$}}%
+%
+\special{pa 2756 -394}\special{pa 2756 -354}%
+\special{fp}%
+\settowidth{\Width}{$80$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$80$}\settodepth{\Depth}{$80$}\setlength{\Height}{-\Height}%
+\put(8.0000000,0.8500000){\hspace*{\Width}\raisebox{\Height}{$80$}}%
+%
+\special{pa 3150 -394}\special{pa 3150 -354}%
+\special{fp}%
+\settowidth{\Width}{$90$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$90$}\settodepth{\Depth}{$90$}\setlength{\Height}{-\Height}%
+\put(9.0000000,0.8500000){\hspace*{\Width}\raisebox{\Height}{$90$}}%
+%
+\special{pa 3543 -394}\special{pa 3543 -354}%
+\special{fp}%
+\special{pa -339 -0}\special{pa 3756 -0}%
+\special{fp}%
+\special{pa 0 220}\special{pa 0 -728}%
+\special{fp}%
+\settowidth{\Width}{$x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(9.5900000,0.0000000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{\Depth}%
+\put(0.0000000,1.9000000){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+\settowidth{\Width}{O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(-0.0500000,-0.0500000){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/s106bowhatch.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/s106bowhatch.tex
new file mode 100644
index 0000000000..a92f9099cf
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/s106bowhatch.tex
@@ -0,0 +1,173 @@
+%%% /Users/takatoosetsuo/Dropbox/2016ketpic/0801ACA/ACAedutakato/fig/s106bowhatch.tex 2016-11-22 14:11
+%%% s106bowhatch.sce 2016-11-22 14:11
+{\unitlength=5mm%
+\begin{picture}%
+( 9.00000, 7.50000)( -4.50000, -4.00000)%
+\linethickness{0.008in}%
+%
+\polyline(-4.00000,-3.00000)(1.00000,3.00000)(4.00000,-3.00000)(-4.00000,-3.00000)%
+%
+\linethickness{0.008in}%
+\polyline(2.68261,-0.86841)(2.66580,-0.60125)(2.61564,-0.33831)(2.53292,-0.08372)%
+(2.41895,0.15849)(2.27551,0.38451)(2.10488,0.59076)(1.90975,0.77401)(1.69318,0.93135)%
+(1.45861,1.06031)(1.20972,1.15885)(0.95044,1.22542)(0.68486,1.25897)(0.41718,1.25897)%
+(0.15160,1.22542)(-0.10768,1.15885)(-0.35657,1.06031)(-0.59114,0.93135)(-0.80771,0.77401)%
+(-1.00284,0.59076)(-1.17347,0.38451)(-1.31691,0.15849)(-1.43088,-0.08372)(-1.51360,-0.33831)%
+(-1.56376,-0.60125)(-1.58057,-0.86841)(-1.56376,-1.13557)(-1.51360,-1.39851)(-1.43088,-1.65310)%
+(-1.31691,-1.89531)(-1.17347,-2.12133)(-1.00284,-2.32758)(-0.80771,-2.51083)(-0.59114,-2.66817)%
+(-0.35657,-2.79713)(-0.10768,-2.89567)(0.15160,-2.96224)(0.41718,-2.99579)(0.68486,-2.99579)%
+(0.95044,-2.96224)(1.20972,-2.89567)(1.45861,-2.79713)(1.69318,-2.66817)(1.90975,-2.51083)%
+(2.10488,-2.32758)(2.27551,-2.12133)(2.41895,-1.89531)(2.53292,-1.65310)(2.61564,-1.39851)%
+(2.66580,-1.13557)(2.68261,-0.86841)%
+%
+\linethickness{0.008in}%
+\settowidth{\Width}{$c$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$c$}\settodepth{\Depth}{$c$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-2.1000,0.5000){\hspace*{\Width}\raisebox{\Height}{$c$}}%
+%
+%
+\polyline(1.00000,3.00000)(0.93350,2.96496)(0.86726,2.92942)(0.82559,2.90667)\polyline(0.65300,2.81003)(0.60499,2.78242)(0.54011,2.74445)(0.48231,2.71006)%
+\polyline(0.31364,2.60672)(0.28345,2.58784)(0.22002,2.54751)(0.15689,2.50670)(0.14697,2.50018)%
+\polyline(-0.01756,2.39038)(-0.03066,2.38150)(-0.09255,2.33884)(-0.15413,2.29573)(-0.17992,2.27739)%
+\polyline(-0.34009,2.16131)(-0.39719,2.11876)(-0.45713,2.07340)(-0.49791,2.04206)%
+\polyline(-0.65340,1.91979)(-0.69348,1.88755)(-0.75170,1.84000)(-0.80652,1.79455)%
+\polyline(-0.95709,1.66627)(-0.98100,1.64553)(-1.03742,1.59586)(-1.09347,1.54578)(-1.10519,1.53514)%
+\polyline(-1.25070,1.40115)(-1.25938,1.39304)(-1.31392,1.34132)(-1.36808,1.28919)(-1.39355,1.26431)%
+\polyline(-1.53375,1.12477)(-1.58080,1.07672)(-1.63300,1.02262)(-1.67116,0.98248)%
+\polyline(-1.80578,0.83754)(-1.83771,0.80242)(-1.88787,0.74643)(-1.93761,0.69007)%
+\polyline(-2.25767,0.30599)(-2.30413,0.24691)(-2.35016,0.18748)(-2.37895,0.14973)%
+\polyline(-2.49723,-0.00882)(-2.52984,-0.05359)(-2.57364,-0.11468)(-2.61242,-0.16963)%
+\polyline(-2.72439,-0.33270)(-2.74427,-0.36224)(-2.78577,-0.42491)(-2.82682,-0.48788)(-2.83322,-0.49788)%
+\polyline(-2.93878,-0.66516)(-2.94713,-0.67861)(-2.98629,-0.74277)(-3.02497,-0.80722)(-3.04105,-0.83448)%
+\polyline(-3.14007,-1.00572)(-3.17490,-1.06784)(-3.21117,-1.13368)(-3.23565,-1.17891)%
+\polyline(-3.32788,-1.35390)(-3.35135,-1.39966)(-3.38516,-1.46680)(-3.41672,-1.53064)%
+\polyline(-3.50201,-1.70912)(-3.51540,-1.73779)(-3.54670,-1.80613)(-3.57750,-1.87470)(-3.58387,-1.88919)%
+\polyline(-3.66220,-2.07083)(-3.66682,-2.08176)(-3.69557,-2.15121)(-3.72381,-2.22088)(-3.73694,-2.25397)%
+\polyline(-3.80817,-2.43851)(-3.83158,-2.50156)(-3.85721,-2.57222)(-3.87572,-2.62443)%
+\polyline(-3.93965,-2.81162)(-3.95452,-2.85671)(-3.97752,-2.92827)(-4.00000,-3.00000)%
+%
+%
+\settowidth{\Width}{$a$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$a$}\settodepth{\Depth}{$a$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(3.1000,0.3000){\hspace*{\Width}\raisebox{\Height}{$a$}}%
+%
+%
+\polyline(4.00000,-3.00000)(3.99537,-2.93631)(3.99028,-2.87266)(3.98505,-2.81279)%
+\polyline(3.96607,-2.62594)(3.96525,-2.61847)(3.95783,-2.55504)(3.94995,-2.49168)(3.94307,-2.43954)%
+\polyline(3.91607,-2.25368)(3.91378,-2.23883)(3.90358,-2.17579)(3.89292,-2.11283)(3.88507,-2.06845)%
+\polyline(3.85010,-1.88392)(3.84569,-1.86182)(3.83273,-1.79929)(3.81931,-1.73686)(3.81115,-1.70020)%
+\polyline(3.76827,-1.51735)(3.76110,-1.48817)(3.74541,-1.42627)(3.72926,-1.36449)(3.72145,-1.33547)%
+\polyline(3.67074,-1.15464)(3.66018,-1.11859)(3.64178,-1.05744)(3.62294,-0.99642)(3.61614,-0.97494)%
+\polyline(3.55768,-0.79646)(3.54313,-0.75380)(3.52206,-0.69351)(3.50056,-0.63339)(3.49540,-0.61928)%
+\polyline(3.42932,-0.44348)(3.41016,-0.39450)(3.38648,-0.33520)(3.36235,-0.27608)(3.35946,-0.26914)%
+\polyline(3.28587,-0.09635)(3.26155,-0.04139)(3.23528,0.01681)(3.20858,0.07482)\polyline(2.98501,0.52197)(2.95462,0.57814)(2.92382,0.63407)(2.89445,0.68651)\polyline(2.80037,0.84905)(2.79655,0.85553)(2.76373,0.91030)(2.73050,0.96483)(2.70281,1.00954)%
+\polyline(2.60182,1.16788)(2.59363,1.18048)(2.55843,1.23376)(2.52284,1.28678)(2.49744,1.32402)%
+\polyline(2.38973,1.47787)(2.37663,1.49621)(2.33912,1.54789)(2.30124,1.59930)(2.27873,1.62937)%
+\polyline(2.16450,1.77844)(2.14597,1.80210)(2.10623,1.85209)(2.06612,1.90178)(2.04708,1.92502)%
+\polyline(1.92654,2.06904)(1.90210,2.09757)(1.86020,2.14576)(1.81795,2.19364)(1.80292,2.21043)%
+\polyline(1.67629,2.34913)(1.64549,2.38204)(1.60151,2.42834)(1.55720,2.47432)(1.54670,2.48507)%
+\polyline(1.41421,2.61818)(1.37663,2.65497)(1.33066,2.69929)(1.28438,2.74328)(1.27889,2.74842)%
+\polyline(1.14080,2.87571)(1.09604,2.91582)(1.04818,2.95809)(1.00000,3.00000)%
+%
+\settowidth{\Width}{$b$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$b$}\settodepth{\Depth}{$b$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(0.0000,-3.8000){\hspace*{\Width}\raisebox{\Height}{$b$}}%
+%
+%
+\polyline(-4.00000,-3.00000)(-3.92871,-3.02940)(-3.85720,-3.05826)(-3.82987,-3.06906)%
+\polyline(-3.65858,-3.13518)(-3.64141,-3.14167)(-3.56908,-3.16840)(-3.49654,-3.19460)(-3.48616,-3.19826)%
+\polyline(-3.31262,-3.25825)(-3.27782,-3.26995)(-3.20454,-3.29398)(-3.13808,-3.31524)%
+\polyline(-2.96254,-3.36906)(-2.90972,-3.38467)(-2.83560,-3.40597)(-2.78608,-3.41980)%
+\polyline(-2.60877,-3.46747)(-2.53762,-3.48566)(-2.46276,-3.50420)(-2.43062,-3.51190)%
+\polyline(-2.25173,-3.55326)(-2.23740,-3.55648)(-2.16203,-3.57279)(-2.08654,-3.58854)(-2.07214,-3.59143)%
+\polyline(-1.89189,-3.62640)(-1.85940,-3.63243)(-1.78347,-3.64594)(-1.71107,-3.65826)%
+\polyline(-1.52970,-3.68682)(-1.47884,-3.69432)(-1.40246,-3.70500)(-1.34786,-3.71223)%
+\polyline(-1.16560,-3.73445)(-1.09624,-3.74206)(-1.01953,-3.74991)(-0.98297,-3.75337)%
+\polyline(-0.80004,-3.76915)(-0.78906,-3.77002)(-0.71214,-3.77559)(-0.63519,-3.78058)(-0.61686,-3.78164)%
+\polyline(-0.43348,-3.79089)(-0.40413,-3.79215)(-0.32706,-3.79486)(-0.24998,-3.79700)%
+\polyline(0.24998,-3.79700)(0.32706,-3.79486)(0.40413,-3.79215)(0.43348,-3.79089)%
+\polyline(0.61686,-3.78164)(0.63519,-3.78058)(0.71214,-3.77559)(0.78906,-3.77002)(0.80004,-3.76915)%
+\polyline(0.98297,-3.75337)(1.01953,-3.74991)(1.09624,-3.74206)(1.16560,-3.73445)%
+\polyline(1.34786,-3.71223)(1.40246,-3.70500)(1.47884,-3.69432)(1.52970,-3.68682)%
+\polyline(1.71107,-3.65826)(1.78347,-3.64594)(1.85940,-3.63243)(1.89189,-3.62640)%
+\polyline(2.07214,-3.59143)(2.08654,-3.58854)(2.16203,-3.57279)(2.23740,-3.55648)(2.25173,-3.55326)%
+\polyline(2.43062,-3.51190)(2.46276,-3.50420)(2.53762,-3.48566)(2.60877,-3.46747)%
+\polyline(2.78608,-3.41980)(2.83560,-3.40597)(2.90972,-3.38467)(2.96254,-3.36906)%
+\polyline(3.13808,-3.31524)(3.20454,-3.29398)(3.27782,-3.26995)(3.31262,-3.25825)%
+\polyline(3.48616,-3.19826)(3.49655,-3.19460)(3.56908,-3.16840)(3.64141,-3.14167)(3.65858,-3.13518)%
+\polyline(3.82987,-3.06906)(3.85720,-3.05826)(3.92871,-3.02940)(4.00000,-3.00000)%
+%
+%
+\linethickness{0.006in}%
+\polyline(3.96750,-3.00000)(3.98920,-2.97830)%
+\polyline(3.61400,-3.00000)(3.87130,-2.74260)%
+\polyline(3.26040,-3.00000)(3.75350,-2.50690)%
+\polyline(2.90690,-3.00000)(3.63560,-2.27120)%
+\polyline(2.55330,-3.00000)(3.51780,-2.03550)%
+\polyline(2.19970,-3.00000)(3.39990,-1.79980)%
+\polyline(1.84620,-3.00000)(3.28210,-1.56410)%
+\polyline(1.49260,-3.00000)(3.16420,-1.32840)%
+\polyline(1.13910,-3.00000)(1.26550,-2.87360)%
+\polyline(2.55550,-1.58360)(3.04640,-1.09270)%
+\polyline(0.78550,-3.00000)(0.80490,-2.98060)%
+\polyline(2.66690,-1.11870)(2.92850,-0.85700)%
+\polyline(0.43200,-3.00000)(0.43620,-2.99580)%
+\polyline(2.67560,-0.75640)(2.81070,-0.62130)%
+\polyline(0.07840,-3.00000)(0.12340,-2.95500)%
+\polyline(2.63560,-0.44280)(2.69280,-0.38560)%
+\polyline(-0.27510,-3.00000)(-0.15290,-2.87780)%
+\polyline(2.55950,-0.16540)(2.57500,-0.14990)%
+\polyline(-0.62870,-3.00000)(-0.40120,-2.77260)%
+\polyline(2.45440,0.08310)(2.45710,0.08580)%
+\polyline(-0.98220,-3.00000)(-0.62550,-2.64320)%
+\polyline(2.32470,0.30700)(2.33930,0.32150)%
+\polyline(-1.33580,-3.00000)(-0.82780,-2.49200)%
+\polyline(2.17280,0.50860)(2.22140,0.55720)%
+\polyline(-1.68930,-3.00000)(-1.00920,-2.31990)%
+\polyline(2.00000,0.68930)(2.10360,0.79290)%
+\polyline(-2.04290,-3.00000)(-1.16930,-2.12640)%
+\polyline(1.80630,0.84920)(1.98570,1.02860)%
+\polyline(-2.39640,-3.00000)(-1.30710,-1.91070)%
+\polyline(1.59110,0.98750)(1.86790,1.26430)%
+\polyline(-2.75000,-3.00000)(-1.42200,-1.67200)%
+\polyline(1.35240,1.10240)(1.75000,1.50000)%
+\polyline(-3.10360,-3.00000)(-1.51080,-1.40720)%
+\polyline(1.08680,1.19040)(1.63210,1.73570)%
+\polyline(-3.45710,-3.00000)(-1.56550,-1.10840)%
+\polyline(0.78870,1.24590)(1.51430,1.97140)%
+\polyline(-3.81070,-3.00000)(-1.57400,-0.76330)%
+\polyline(0.44830,1.25900)(1.39640,2.20710)%
+\polyline(-3.17890,-2.01470)(-1.51620,-0.35200)%
+\polyline(0.03000,1.19420)(1.27860,2.44280)%
+\polyline(-1.41120,0.10660)(-1.24330,0.27450)%
+\polyline(-0.58060,0.93710)(1.16070,2.67850)%
+\polyline(0.35660,2.22790)(1.04290,2.91420)%
+%
+\linethickness{0.008in}%
+\linethickness{0.004in}%
+\put(0.55102,-0.86841){\circle*{0.160000}}
+
+\put(0.55102,-0.86841){\circle{0.160000}}
+%
+\linethickness{0.008in}%
+\settowidth{\Width}{A}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{A}\settodepth{\Depth}{A}\setlength{\Height}{-\Height}%
+\put(-4.0500,-3.0500){\hspace*{\Width}\raisebox{\Height}{A}}%
+%
+%
+\settowidth{\Width}{B}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{B}\settodepth{\Depth}{B}\setlength{\Height}{\Depth}%
+\put(1.0500,3.0500){\hspace*{\Width}\raisebox{\Height}{B}}%
+%
+%
+\settowidth{\Width}{C}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{C}\settodepth{\Depth}{C}\setlength{\Height}{-\Height}%
+\put(4.0500,-3.0500){\hspace*{\Width}\raisebox{\Height}{C}}%
+%
+%
+\settowidth{\Width}{I}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{I}\settodepth{\Depth}{I}\setlength{\Height}{-\Height}%
+\put(0.6000,-0.9200){\hspace*{\Width}\raisebox{\Height}{I}}%
+%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/s10diffint.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/s10diffint.tex
new file mode 100644
index 0000000000..576b020b49
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/s10diffint.tex
@@ -0,0 +1,177 @@
+%%% /Users/takatoosetsuo/Dropbox/2016ketpic/0801ACA/ACAedutakato/fig/s10diffint.tex 2016-11-22 14:39
+%%% s10diffint.sce 2016-11-22 14:39
+{\unitlength=6mm%
+\begin{picture}%
+( 14.00000, 6.00000)( -7.00000, -3.00000)%
+\linethickness{0.008in}%
+%
+\put(-7.00000,0.18631){\circle*{0.033867}}\put(-6.86435,0.09120){\circle*{0.033867}}%
+\put(-6.71067,0.02991){\circle*{0.033867}}\put(-6.54691,0.00506){\circle*{0.033867}}%
+\put(-6.38112,0.00015){\circle*{0.033867}}\put(-6.21521,0.00005){\circle*{0.033867}}%
+\put(-6.04937,0.00325){\circle*{0.033867}}\put(-5.88486,0.02306){\circle*{0.033867}}%
+\put(-5.72855,0.07727){\circle*{0.033867}}\put(-5.58956,0.16732){\circle*{0.033867}}%
+\put(-5.46869,0.28078){\circle*{0.033867}}\put(-5.35958,0.40566){\circle*{0.033867}}%
+\put(-5.25668,0.53579){\circle*{0.033867}}\put(-5.15473,0.66667){\circle*{0.033867}}%
+\put(-5.04816,0.79376){\circle*{0.033867}}\put(-4.92850,0.90824){\circle*{0.033867}}%
+\put(-4.78443,0.98726){\circle*{0.033867}}\put(-4.62201,0.98224){\circle*{0.033867}}%
+\put(-4.48126,0.89658){\circle*{0.033867}}\put(-4.36410,0.77946){\circle*{0.033867}}%
+\put(-4.25810,0.65189){\circle*{0.033867}}\put(-4.15645,0.52077){\circle*{0.033867}}%
+\put(-4.05329,0.39085){\circle*{0.033867}}\put(-3.94277,0.26722){\circle*{0.033867}}%
+\put(-3.81998,0.15598){\circle*{0.033867}}\put(-3.67893,0.06945){\circle*{0.033867}}%
+\put(-3.52122,0.01967){\circle*{0.033867}}\put(-3.35643,0.00230){\circle*{0.033867}}%
+\put(-3.19056,0.00001){\circle*{0.033867}}\put(-3.02466,0.00029){\circle*{0.033867}}%
+\put(-2.85891,0.00627){\circle*{0.033867}}\put(-2.69587,0.03518){\circle*{0.033867}}%
+\put(-2.54430,0.10126){\circle*{0.033867}}\put(-2.41092,0.19931){\circle*{0.033867}}%
+\put(-2.29373,0.31660){\circle*{0.033867}}\put(-2.18723,0.44376){\circle*{0.033867}}%
+\put(-2.08515,0.57453){\circle*{0.033867}}\put(-1.98241,0.70478){\circle*{0.033867}}%
+\put(-1.87335,0.82973){\circle*{0.033867}}\put(-1.74755,0.93726){\circle*{0.033867}}%
+\put(-1.59510,0.99741){\circle*{0.033867}}\put(-1.43551,0.96320){\circle*{0.033867}}%
+\put(-1.30272,0.86449){\circle*{0.033867}}\put(-1.19048,0.74243){\circle*{0.033867}}%
+\put(-1.08639,0.61328){\circle*{0.033867}}\put(-0.98474,0.48216){\circle*{0.033867}}%
+\put(-0.88030,0.35328){\circle*{0.033867}}\put(-0.76650,0.23267){\circle*{0.033867}}%
+\put(-0.63855,0.12756){\circle*{0.033867}}\put(-0.49203,0.05097){\circle*{0.033867}}%
+\put(-0.33133,0.01168){\circle*{0.033867}}\put(-0.16590,0.00082){\circle*{0.033867}}%
+\put(-0.00000,0.00000){\circle*{0.033867}}\put(0.16590,0.00082){\circle*{0.033867}}%
+\put(0.33133,0.01168){\circle*{0.033867}}\put(0.49203,0.05097){\circle*{0.033867}}%
+\put(0.63855,0.12756){\circle*{0.033867}}\put(0.76650,0.23267){\circle*{0.033867}}%
+\put(0.88030,0.35328){\circle*{0.033867}}\put(0.98474,0.48216){\circle*{0.033867}}%
+\put(1.08639,0.61328){\circle*{0.033867}}\put(1.19048,0.74243){\circle*{0.033867}}%
+\put(1.30272,0.86449){\circle*{0.033867}}\put(1.43551,0.96320){\circle*{0.033867}}%
+\put(1.59510,0.99741){\circle*{0.033867}}\put(1.74755,0.93726){\circle*{0.033867}}%
+\put(1.87335,0.82973){\circle*{0.033867}}\put(1.98241,0.70478){\circle*{0.033867}}%
+\put(2.08515,0.57453){\circle*{0.033867}}\put(2.18723,0.44376){\circle*{0.033867}}%
+\put(2.29373,0.31660){\circle*{0.033867}}\put(2.41092,0.19931){\circle*{0.033867}}%
+\put(2.54430,0.10126){\circle*{0.033867}}\put(2.69587,0.03518){\circle*{0.033867}}%
+\put(2.85891,0.00627){\circle*{0.033867}}\put(3.02466,0.00029){\circle*{0.033867}}%
+\put(3.19056,0.00001){\circle*{0.033867}}\put(3.35643,0.00230){\circle*{0.033867}}%
+\put(3.52122,0.01967){\circle*{0.033867}}\put(3.67893,0.06945){\circle*{0.033867}}%
+\put(3.81998,0.15598){\circle*{0.033867}}\put(3.94277,0.26722){\circle*{0.033867}}%
+\put(4.05329,0.39085){\circle*{0.033867}}\put(4.15645,0.52077){\circle*{0.033867}}%
+\put(4.25810,0.65189){\circle*{0.033867}}\put(4.36410,0.77946){\circle*{0.033867}}%
+\put(4.48126,0.89658){\circle*{0.033867}}\put(4.62201,0.98224){\circle*{0.033867}}%
+\put(4.78443,0.98726){\circle*{0.033867}}\put(4.92850,0.90824){\circle*{0.033867}}%
+\put(5.04816,0.79376){\circle*{0.033867}}\put(5.15473,0.66667){\circle*{0.033867}}%
+\put(5.25668,0.53579){\circle*{0.033867}}\put(5.35958,0.40566){\circle*{0.033867}}%
+\put(5.46869,0.28078){\circle*{0.033867}}\put(5.58956,0.16732){\circle*{0.033867}}%
+\put(5.72855,0.07727){\circle*{0.033867}}\put(5.88486,0.02306){\circle*{0.033867}}%
+\put(6.04937,0.00325){\circle*{0.033867}}\put(6.21521,0.00005){\circle*{0.033867}}%
+\put(6.38112,0.00015){\circle*{0.033867}}\put(6.54691,0.00506){\circle*{0.033867}}%
+\put(6.71067,0.02991){\circle*{0.033867}}\put(6.86435,0.09120){\circle*{0.033867}}%
+\put(7.00000,0.18631){\circle*{0.033867}}%
+\polyline(-7.00000,-0.85515)(-6.92965,-0.69786)(-6.85930,-0.54230)(-6.78894,-0.39790)%
+(-6.71859,-0.27213)(-6.64824,-0.17001)(-6.57789,-0.09379)(-6.50754,-0.04294)(-6.43719,-0.01427)%
+(-6.36683,-0.00232)(-6.29648,-0.00001)(-6.22613,0.00074)(-6.15578,0.00814)(-6.08543,0.02974)%
+(-6.01508,0.07171)(-5.94472,0.13812)(-5.87437,0.23056)(-5.80402,0.34784)(-5.73367,0.48595)%
+(-5.66332,0.63830)(-5.59296,0.79615)(-5.52261,0.94920)(-5.45226,1.08641)(-5.38191,1.19681)%
+(-5.31156,1.27039)(-5.24121,1.29890)(-5.17085,1.27654)(-5.10050,1.20051)(-5.03015,1.07130)%
+(-4.95980,0.89279)(-4.88945,0.67201)(-4.81910,0.41879)(-4.74874,0.14510)(-4.67839,-0.13573)%
+(-4.60804,-0.40988)(-4.53769,-0.66399)(-4.46734,-0.88603)(-4.39698,-1.06609)(-4.32663,-1.19703)%
+(-4.25628,-1.27486)(-4.18593,-1.29900)(-4.11558,-1.27212)(-4.04523,-1.19992)(-3.97487,-1.09060)%
+(-3.90452,-0.95411)(-3.83417,-0.80141)(-3.76382,-0.64356)(-3.69347,-0.49087)(-3.62312,-0.35216)%
+(-3.55276,-0.23411)(-3.48241,-0.14079)(-3.41206,-0.07352)(-3.34171,-0.03079)(-3.27136,-0.00859)%
+(-3.20101,-0.00084)(-3.13065,0.00001)(-3.06030,0.00213)(-2.98995,0.01363)(-2.91960,0.04165)%
+(-2.84925,0.09169)(-2.77889,0.16703)(-2.70854,0.26831)(-2.63819,0.39335)(-2.56784,0.53723)%
+(-2.49749,0.69256)(-2.42714,0.84997)(-2.35678,0.99882)(-2.28643,1.12800)(-2.21608,1.22678)%
+(-2.14573,1.28565)(-2.07538,1.29715)(-2.00503,1.25645)(-1.93467,1.16188)(-1.86432,1.01508)%
+(-1.79397,0.82106)(-1.72362,0.58787)(-1.65327,0.32616)(-1.58291,0.04846)(-1.51256,-0.23162)%
+(-1.44221,-0.50033)(-1.37186,-0.74465)(-1.30151,-0.95322)(-1.23116,-1.11702)(-1.16080,-1.22994)%
+(-1.09045,-1.28917)(-1.02010,-1.29527)(-0.94975,-1.25199)(-0.87940,-1.16598)(-0.80905,-1.04611)%
+(-0.73869,-0.90277)(-0.66834,-0.74707)(-0.59799,-0.58989)(-0.52764,-0.44112)(-0.45729,-0.30890)%
+(-0.38693,-0.19904)(-0.31658,-0.11470)(-0.24623,-0.05618)(-0.17588,-0.02110)(-0.10553,-0.00465)%
+(-0.03518,-0.00017)(0.03518,0.00017)(0.10553,0.00465)(0.17588,0.02110)(0.24623,0.05618)%
+(0.31658,0.11470)(0.38693,0.19904)(0.45729,0.30890)(0.52764,0.44112)(0.59799,0.58989)%
+(0.66834,0.74707)(0.73869,0.90277)(0.80905,1.04611)(0.87940,1.16598)(0.94975,1.25199)%
+(1.02010,1.29527)(1.09045,1.28917)(1.16080,1.22994)(1.23116,1.11702)(1.30151,0.95322)%
+(1.37186,0.74465)(1.44221,0.50033)(1.51256,0.23162)(1.58291,-0.04846)(1.65327,-0.32616)%
+(1.72362,-0.58787)(1.79397,-0.82106)(1.86432,-1.01508)(1.93467,-1.16188)(2.00503,-1.25645)%
+(2.07538,-1.29715)(2.14573,-1.28565)(2.21608,-1.22678)(2.28643,-1.12800)(2.35678,-0.99882)%
+(2.42714,-0.84997)(2.49749,-0.69256)(2.56784,-0.53723)(2.63819,-0.39335)(2.70854,-0.26831)%
+(2.77889,-0.16703)(2.84925,-0.09169)(2.91960,-0.04165)(2.98995,-0.01363)(3.06030,-0.00213)%
+(3.13065,-0.00001)(3.20101,0.00084)(3.27136,0.00859)(3.34171,0.03079)(3.41206,0.07352)%
+(3.48241,0.14079)(3.55276,0.23411)(3.62312,0.35216)(3.69347,0.49087)(3.76382,0.64356)%
+(3.83417,0.80141)(3.90452,0.95411)(3.97487,1.09060)(4.04523,1.19992)(4.11558,1.27212)%
+(4.18593,1.29900)(4.25628,1.27486)(4.32663,1.19703)(4.39698,1.06609)(4.46734,0.88603)%
+(4.53769,0.66399)(4.60804,0.40988)(4.67839,0.13573)(4.74874,-0.14510)(4.81910,-0.41879)%
+(4.88945,-0.67201)(4.95980,-0.89279)(5.03015,-1.07130)(5.10050,-1.20051)(5.17085,-1.27654)%
+(5.24121,-1.29890)(5.31156,-1.27039)(5.38191,-1.19681)(5.45226,-1.08641)(5.52261,-0.94920)%
+(5.59296,-0.79615)(5.66332,-0.63830)(5.73367,-0.48595)(5.80402,-0.34784)(5.87437,-0.23056)%
+(5.94472,-0.13812)(6.01508,-0.07171)(6.08543,-0.02974)(6.15578,-0.00814)(6.22613,-0.00074)%
+(6.29648,0.00001)(6.36683,0.00232)(6.43719,0.01427)(6.50754,0.04294)(6.57789,0.09379)%
+(6.64824,0.17001)(6.71859,0.27213)(6.78894,0.39790)(6.85930,0.54230)(6.92965,0.69786)%
+(7.00000,0.85515)%
+%
+\linethickness{0.008in}%
+\polyline(-7.00000,-2.38581)(-6.92965,-2.37469)(-6.85930,-2.36703)(-6.83473,-2.36529)%
+\polyline(-6.66831,-2.35788)(-6.64824,-2.35741)(-6.57789,-2.35662)(-6.50754,-2.35631)(-6.50170,-2.35630)%
+\polyline(-6.33509,-2.35619)(-6.29648,-2.35619)(-6.22613,-2.35619)(-6.16847,-2.35619)%
+\polyline(-6.00186,-2.35582)(-5.94472,-2.35535)(-5.87437,-2.35409)(-5.83528,-2.35274)%
+\polyline(-5.66908,-2.34149)(-5.66332,-2.34096)(-5.59296,-2.33123)(-5.52261,-2.31757)(-5.50506,-2.31299)%
+\polyline(-5.34707,-2.26083)(-5.31156,-2.24588)(-5.24121,-2.20998)(-5.19912,-2.18468)%
+\polyline(-5.06246,-2.08960)(-5.03015,-2.06456)(-4.95980,-2.00476)(-4.93512,-1.98224)%
+\polyline(-4.81392,-1.86793)(-4.74874,-1.80347)(-4.69573,-1.75050)\polyline(-4.57694,-1.63367)(-4.53769,-1.59595)(-4.46734,-1.53162)(-4.45452,-1.52069)%
+\polyline(-4.32507,-1.41586)(-4.25628,-1.36814)(-4.18593,-1.32562)(-4.18531,-1.32530)%
+\polyline(-4.03403,-1.25588)(-3.97487,-1.23577)(-3.90452,-1.21725)(-3.87373,-1.21121)%
+\polyline(-3.70879,-1.18840)(-3.69347,-1.18695)(-3.62312,-1.18273)(-3.55276,-1.18027)(-3.54242,-1.18007)%
+\polyline(-3.37581,-1.17827)(-3.34171,-1.17816)(-3.27136,-1.17810)(-3.20920,-1.17810)%
+\polyline(-3.04258,-1.17809)(-2.98995,-1.17808)(-2.91960,-1.17799)(-2.87597,-1.17780)%
+\polyline(-2.70937,-1.17533)(-2.70854,-1.17531)(-2.63819,-1.17237)(-2.56784,-1.16747)(-2.54313,-1.16481)%
+\polyline(-2.37875,-1.13846)(-2.35678,-1.13372)(-2.28643,-1.11359)(-2.21977,-1.08924)%
+\polyline(-2.07073,-1.01510)(-2.00503,-0.97354)(-1.93467,-0.92284)(-1.93299,-0.92149)%
+\polyline(-1.80512,-0.81473)(-1.79397,-0.80499)(-1.72362,-0.73952)(-1.68367,-0.70070)%
+\polyline(-1.56523,-0.58351)(-1.51256,-0.53095)(-1.44677,-0.46635)\polyline(-1.32465,-0.35302)(-1.30151,-0.33232)(-1.23116,-0.27408)(-1.19576,-0.24755)%
+\polyline(-1.05705,-0.15553)(-1.02010,-0.13436)(-0.94975,-0.10044)(-0.90702,-0.08359)%
+\polyline(-0.74756,-0.03602)(-0.73869,-0.03390)(-0.66834,-0.02155)(-0.59799,-0.01290)(-0.58285,-0.01166)%
+\polyline(-0.41652,-0.00246)(-0.38693,-0.00162)(-0.31658,-0.00061)(-0.24992,-0.00020)%
+\polyline(-0.08331,-0.00000)(-0.03518,-0.00000)(0.03518,0.00000)(0.08331,0.00000)%
+\polyline(0.24992,0.00020)(0.31658,0.00061)(0.38693,0.00162)(0.41652,0.00246)\polyline(0.58285,0.01166)(0.59799,0.01290)(0.66834,0.02155)(0.73869,0.03390)(0.74756,0.03602)%
+\polyline(0.90702,0.08359)(0.94975,0.10044)(1.02010,0.13436)(1.05705,0.15553)\polyline(1.19576,0.24755)(1.23116,0.27408)(1.30151,0.33232)(1.32465,0.35302)%
+\polyline(1.44677,0.46635)(1.51256,0.53095)(1.56523,0.58351)\polyline(1.68367,0.70070)(1.72362,0.73952)(1.79397,0.80499)(1.80512,0.81473)%
+\polyline(1.93299,0.92149)(1.93467,0.92284)(2.00503,0.97354)(2.07073,1.01510)\polyline(2.21977,1.08924)(2.28643,1.11359)(2.35678,1.13372)(2.37875,1.13846)%
+\polyline(2.54313,1.16481)(2.56784,1.16747)(2.63819,1.17237)(2.70854,1.17531)(2.70937,1.17533)%
+\polyline(2.87597,1.17780)(2.91960,1.17799)(2.98995,1.17808)(3.04258,1.17809)\polyline(3.20920,1.17810)(3.27136,1.17810)(3.34171,1.17816)(3.37581,1.17827)%
+\polyline(3.54242,1.18007)(3.55276,1.18027)(3.62312,1.18273)(3.69347,1.18695)(3.70879,1.18840)%
+\polyline(3.87373,1.21121)(3.90452,1.21725)(3.97487,1.23577)(4.03403,1.25588)\polyline(4.18531,1.32530)(4.18593,1.32562)(4.25628,1.36814)(4.32507,1.41586)%
+\polyline(4.45452,1.52069)(4.46734,1.53162)(4.53769,1.59595)(4.57694,1.63367)\polyline(4.69573,1.75050)(4.74874,1.80347)(4.81392,1.86793)%
+\polyline(4.93512,1.98224)(4.95980,2.00476)(5.03015,2.06456)(5.06246,2.08960)\polyline(5.19912,2.18468)(5.24121,2.20998)(5.31156,2.24588)(5.34707,2.26083)%
+\polyline(5.50506,2.31299)(5.52261,2.31757)(5.59296,2.33123)(5.66332,2.34096)(5.66908,2.34149)%
+\polyline(5.83528,2.35274)(5.87437,2.35409)(5.94472,2.35535)(6.00186,2.35582)\polyline(6.16847,2.35619)(6.22613,2.35619)(6.29648,2.35619)(6.33509,2.35619)%
+\polyline(6.50170,2.35630)(6.50754,2.35631)(6.57789,2.35662)(6.64824,2.35741)(6.66831,2.35788)%
+\polyline(6.83473,2.36529)(6.85930,2.36703)(6.92965,2.37469)(7.00000,2.38581)%
+%
+\settowidth{\Width}{$\sin ^4x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$\sin ^4x$}\settodepth{\Depth}{$\sin ^4x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(5.2100,1.2100){\hspace*{\Width}\raisebox{\Height}{$\sin ^4x$}}%
+%
+%
+\settowidth{\Width}{$4\,\cos x\,\sin ^3x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$4\,\cos x\,\sin ^3x$}\settodepth{\Depth}{$4\,\cos x\,\sin ^3x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(5.2400,-1.8300){\hspace*{\Width}\raisebox{\Height}{$4\,\cos x\,\sin ^3x$}}%
+%
+%
+\settowidth{\Width}{$\frac{\sin \left(4\,x\right)-8\,\sin \left(2\,x\right)+12\,x}{32}$}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{$\frac{\sin \left(4\,x\right)-8\,\sin \left(2\,x\right)+12\,x}{32}$}\settodepth{\Depth}{$\frac{\sin \left(4\,x\right)-8\,\sin \left(2\,x\right)+12\,x}{32}$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(5.5000,2.7300){\hspace*{\Width}\raisebox{\Height}{$\frac{\sin \left(4\,x\right)-8\,\sin \left(2\,x\right)+12\,x}{32}$}}%
+%
+%
+\polyline(-7.00000,0.00000)(7.00000,0.00000)%
+%
+\linethickness{0.008in}%
+\polyline(0.00000,-3.00000)(0.00000,3.00000)%
+%
+\linethickness{0.008in}%
+\settowidth{\Width}{$x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(7.0500,0.0000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{\Depth}%
+\put(0.0000,3.0500){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+%
+\settowidth{\Width}{O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(-0.0500,-0.0500){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/s210diffeq1.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/s210diffeq1.tex
new file mode 100644
index 0000000000..d75a4a04f7
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/s210diffeq1.tex
@@ -0,0 +1,76 @@
+%%% /Users/takatoosetsuo/Dropbox/2016ketpic/0801ACA/ACAedutakato/fig/s210diffeq1.tex 2016-11-22 12:24
+%%% s210diffeq1.sce 2016-11-22 12:24
+{\unitlength=4.5mm%
+\begin{picture}%
+( 12.61000, 13.04000)( -0.94000, -7.54000)%
+\linethickness{0.008in}%
+%
+\polyline(0.00000,2.59000)(0.05864,2.55661)(0.11729,2.45745)(0.17593,2.29535)(0.23457,2.07473)%
+(0.29322,1.80149)(0.35186,1.48287)(0.41050,1.12727)(0.46915,0.74400)(0.52779,0.34303)%
+(0.58643,-0.06524)(0.64508,-0.47024)(0.70372,-0.86157)(0.76236,-1.22918)(0.82101,-1.56370)%
+(0.87965,-1.85662)(0.93829,-2.10057)(0.99693,-2.28945)(1.05558,-2.41859)(1.11422,-2.48491)%
+(1.17286,-2.48693)(1.23151,-2.42486)(1.29015,-2.30053)(1.34879,-2.11740)(1.40744,-1.88041)%
+(1.46608,-1.59587)(1.52472,-1.27131)(1.58337,-0.91523)(1.64201,-0.53694)(1.70065,-0.14628)%
+(1.75930,0.24665)(1.81794,0.63170)(1.87658,0.99899)(1.93523,1.33912)(1.99387,1.64342)%
+(2.05251,1.90420)(2.11116,2.11490)(2.16980,2.27028)(2.22844,2.36655)(2.28709,2.40147)%
+(2.34573,2.37436)(2.40437,2.28617)(2.46302,2.13941)(2.52166,1.93807)(2.58030,1.68757)%
+(2.63894,1.39454)(2.69759,1.06671)(2.75623,0.71265)(2.81487,0.34159)(2.87352,-0.03684)%
+(2.93216,-0.41285)(2.99080,-0.77678)(3.04945,-1.11929)(3.10809,-1.43163)(3.16673,-1.70586)%
+(3.22538,-1.93508)(3.28402,-2.11355)(3.34266,-2.23686)(3.40131,-2.30205)(3.45995,-2.30766)%
+(3.51859,-2.25378)(3.57724,-2.14202)(3.63588,-1.97550)(3.69452,-1.75870)(3.75317,-1.49742)%
+(3.81181,-1.19856)(3.87045,-0.86997)(3.92910,-0.52022)(3.98774,-0.15842)(4.04638,0.20607)%
+(4.10503,0.56384)(4.16367,0.90570)(4.22231,1.22290)(4.28095,1.50736)(4.33960,1.75188)%
+(4.39824,1.95031)(4.45688,2.09770)(4.51553,2.19048)(4.57417,2.22644)(4.63281,2.20489)%
+(4.69146,2.12660)(4.75010,1.99380)(4.80874,1.81014)(4.86739,1.58054)(4.92603,1.31109)%
+(4.98467,1.00890)(5.04332,0.68187)(5.10196,0.33853)(5.16060,-0.01221)(5.21925,-0.36128)%
+(5.27789,-0.69969)(5.33653,-1.01877)(5.39518,-1.31036)(5.45382,-1.56705)(5.51246,-1.78237)%
+(5.57111,-1.95093)(5.62975,-2.06855)(5.68839,-2.13242)(5.74704,-2.14109)(5.80568,-2.09454)%
+(5.86432,-1.99420)(5.92296,-1.84285)(5.98161,-1.64459)(6.04025,-1.40472)(6.09889,-1.12957)%
+(6.15754,-0.82637)(6.21618,-0.50305)(6.27482,-0.16801)(6.33347,0.17006)(6.39211,0.50245)%
+(6.45075,0.82060)(6.50940,1.11639)(6.56804,1.38225)(6.62668,1.61148)(6.68533,1.79828)%
+(6.74397,1.93803)(6.80261,2.02729)(6.86126,2.06396)(6.91990,2.04730)(6.97854,1.97794)%
+(7.03719,1.85788)(7.09583,1.69040)(7.15447,1.48001)(7.21312,1.23228)(7.27176,0.95376)%
+(7.33040,0.65173)(7.38905,0.33407)(7.44769,0.00903)(7.50633,-0.31499)(7.56497,-0.62964)%
+(7.62362,-0.92685)(7.68226,-1.19903)(7.74090,-1.43926)(7.79955,-1.64147)(7.85819,-1.80059)%
+(7.91683,-1.91270)(7.97548,-1.97509)(8.03412,-1.98634)(8.09276,-1.94635)(8.15141,-1.85636)%
+(8.21005,-1.71887)(8.26869,-1.53762)(8.32734,-1.31745)(8.38598,-1.06417)(8.44462,-0.78444)%
+(8.50327,-0.48558)(8.56191,-0.17536)(8.62055,0.13818)(8.67920,0.44695)(8.73784,0.74302)%
+(8.79648,1.01879)(8.85513,1.26724)(8.91377,1.48208)(8.97241,1.65789)(9.03106,1.79030)%
+(9.08970,1.87606)(9.14834,1.91314)(9.20698,1.90077)(9.26563,1.83947)(9.32427,1.73100)%
+(9.38291,1.57834)(9.44156,1.38560)(9.50020,1.15789)(9.55884,0.90122)(9.61749,0.62231)%
+(9.67613,0.32845)(9.73477,0.02725)(9.79342,-0.27348)(9.85206,-0.56601)(9.91070,-0.84282)%
+(9.96935,-1.09685)(10.02799,-1.32162)(10.08663,-1.51147)(10.14528,-1.66164)(10.20392,-1.76840)%
+(10.26256,-1.82918)(10.32121,-1.84259)(10.37985,-1.80845)(10.43849,-1.72785)(10.49714,-1.60303)%
+(10.55578,-1.43737)(10.61442,-1.23532)(10.67307,-1.00221)(10.73171,-0.74417)(10.79035,-0.46795)%
+(10.84899,-0.18074)(10.90764,0.11002)(10.96628,0.39683)(11.02492,0.67230)(11.08357,0.92938)%
+(11.14221,1.16152)(11.20085,1.36283)(11.25950,1.52824)(11.31814,1.65363)(11.37678,1.73592)%
+(11.43543,1.77316)(11.49407,1.76456)(11.55271,1.71052)(11.61136,1.61260)(11.67000,1.47350)%
+%
+\linethickness{0.008in}%
+\settowidth{\Width}{$\displaystyle\frac{d^2 x}{dt^2}+0.07\frac{dx}{dt}+7.52x=0$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$\displaystyle\frac{d^2 x}{dt^2}+0.07\frac{dx}{dt}+7.52x=0$}\settodepth{\Depth}{$\displaystyle\frac{d^2 x}{dt^2}+0.07\frac{dx}{dt}+7.52x=0$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.0500,4.0000){\hspace*{\Width}\raisebox{\Height}{$\displaystyle\frac{d^2 x}{dt^2}+0.07\frac{dx}{dt}+7.52x=0$}}%
+%
+%
+\polyline(-0.94000,0.00000)(11.67000,0.00000)%
+%
+\linethickness{0.008in}%
+\polyline(0.00000,-7.54000)(0.00000,5.50000)%
+%
+\linethickness{0.008in}%
+\settowidth{\Width}{$x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(11.7200,0.0000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{\Depth}%
+\put(0.0000,5.5500){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+%
+\settowidth{\Width}{O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(-0.0500,-0.0500){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/s305graphforincanddec.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/s305graphforincanddec.tex
new file mode 100644
index 0000000000..62879b36d6
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/s305graphforincanddec.tex
@@ -0,0 +1,50 @@
+%%% /Users/takatoosetsuo/Dropbox/2016ketpic/0801ACA/ACAedutakato/fig/s305graphforincanddec.tex 2016-11-22 12:32
+%%% s305graphforincanddec.sce 2016-11-22 12:32
+{\unitlength=5mm%
+\begin{picture}%
+( 9.96000, 5.66000)( -0.65000, -1.22000)%
+\linethickness{0.008in}%
+%
+\polyline(0.89996,-1.22000)(0.94040,-0.65340)(1.03444,0.32737)(1.12848,1.07113)(1.22253,1.64347)%
+(1.31657,2.08897)(1.41061,2.43881)(1.50465,2.71531)(1.59869,2.93480)(1.69273,3.10943)%
+(1.78677,3.24837)(1.88081,3.35867)(1.97485,3.44579)(2.06889,3.51402)(2.16293,3.56675)%
+(2.25697,3.60671)(2.35101,3.63608)(2.44505,3.65664)(2.53909,3.66984)(2.63313,3.67689)%
+(2.72717,3.67877)(2.82121,3.67632)(2.91525,3.67020)(3.00929,3.66101)(3.10333,3.64923)%
+(3.19737,3.63526)(3.29141,3.61947)(3.38545,3.60214)(3.47949,3.58353)(3.57354,3.56385)%
+(3.66758,3.54330)(3.76162,3.52202)(3.85566,3.50016)(3.94970,3.47783)(4.04374,3.45514)%
+(4.13778,3.43218)(4.23182,3.40901)(4.32586,3.38571)(4.41990,3.36233)(4.51394,3.33892)%
+(4.60798,3.31553)(4.70202,3.29219)(4.79606,3.26892)(4.89010,3.24577)(4.98414,3.22274)%
+(5.07818,3.19987)(5.17222,3.17717)(5.26626,3.15465)(5.36030,3.13232)(5.45434,3.11020)%
+(5.54838,3.08830)(5.64242,3.06661)(5.73646,3.04516)(5.83051,3.02393)(5.92455,3.00294)%
+(6.01859,2.98218)(6.11263,2.96167)(6.20667,2.94139)(6.30071,2.92136)(6.39475,2.90156)%
+(6.48879,2.88201)(6.58283,2.86270)(6.67687,2.84362)(6.77091,2.82478)(6.86495,2.80618)%
+(6.95899,2.78781)(7.05303,2.76967)(7.14707,2.75176)(7.24111,2.73408)(7.33515,2.71661)%
+(7.42919,2.69937)(7.52323,2.68235)(7.61727,2.66555)(7.71131,2.64895)(7.80535,2.63256)%
+(7.89939,2.61639)(7.99343,2.60041)(8.08747,2.58463)(8.18152,2.56906)(8.27556,2.55367)%
+(8.36960,2.53848)(8.46364,2.52348)(8.55768,2.50866)(8.65172,2.49402)(8.74576,2.47957)%
+(8.83980,2.46529)(8.93384,2.45118)(9.02788,2.43725)(9.12192,2.42348)(9.21596,2.40988)%
+(9.31000,2.39644)%
+%
+\linethickness{0.008in}%
+\polyline(-0.65000,0.00000)(9.31000,0.00000)%
+%
+\linethickness{0.008in}%
+\polyline(0.00000,-1.22000)(0.00000,4.44000)%
+%
+\linethickness{0.008in}%
+\settowidth{\Width}{$x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(9.3600,0.0000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{\Depth}%
+\put(0.0000,4.4900){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+%
+\settowidth{\Width}{O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(-0.0500,-0.0500){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/s305incanddec.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/s305incanddec.tex
new file mode 100644
index 0000000000..fed8c78185
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/s305incanddec.tex
@@ -0,0 +1,208 @@
+%%% /Users/takatoosetsuo/Dropbox/2016ketpic/0801ACA/ACAedutakato/fig/s305incanddec.tex 2016-11-29 18:14
+%%%
+{\unitlength=6mm%
+\begin{picture}%
+( 10.50000, 11.00000)( -0.00000, -0.00000)%
+\linethickness{0.008in}%
+%
+\small%
+\polyline(0.00000,11.00000)(0.00000,0.00000)%
+%
+\linethickness{0.008in}%
+\polyline(10.50000,11.00000)(10.50000,0.00000)%
+%
+\linethickness{0.008in}%
+\polyline(0.00000,11.00000)(10.50000,11.00000)%
+%
+\linethickness{0.008in}%
+\polyline(0.00000,9.80000)(10.50000,9.80000)%
+%
+\linethickness{0.008in}%
+\polyline(0.00000,6.00000)(10.50000,6.00000)%
+%
+\linethickness{0.008in}%
+\polyline(0.00000,0.00000)(10.50000,0.00000)%
+%
+\linethickness{0.008in}%
+\polyline(1.50000,11.00000)(1.50000,6.00000)%
+%
+\linethickness{0.008in}%
+\polyline(3.00000,11.00000)(3.00000,6.00000)%
+%
+\linethickness{0.008in}%
+\polyline(4.50000,11.00000)(4.50000,6.00000)%
+%
+\linethickness{0.008in}%
+\polyline(6.00000,11.00000)(6.00000,6.00000)%
+%
+\linethickness{0.008in}%
+\polyline(7.50000,11.00000)(7.50000,6.00000)%
+%
+\linethickness{0.008in}%
+\polyline(9.00000,11.00000)(9.00000,6.00000)%
+%
+\linethickness{0.008in}%
+\polyline(0.00000,8.60000)(1.50000,8.60000)%
+%
+\linethickness{0.008in}%
+\polyline(3.00000,8.60000)(10.50000,8.60000)%
+%
+\linethickness{0.008in}%
+\polyline(0.00000,7.40000)(1.50000,7.40000)%
+%
+\linethickness{0.008in}%
+\polyline(3.00000,7.40000)(10.50000,7.40000)%
+%
+\linethickness{0.008in}%
+\polyline(1.50000,9.80000)(3.00000,6.00000)%
+%
+\linethickness{0.008in}%
+\polyline(3.00000,9.80000)(1.50000,6.00000)%
+%
+\linethickness{0.008in}%
+\settowidth{\Width}{$x$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(0.7500,10.4000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+%
+\settowidth{\Width}{$0$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$0$}\settodepth{\Depth}{$0$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.2500,10.4000){\hspace*{\Width}\raisebox{\Height}{$0$}}%
+%
+%
+\settowidth{\Width}{$\cdots$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\cdots$}\settodepth{\Depth}{$\cdots$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(3.7500,10.4000){\hspace*{\Width}\raisebox{\Height}{$\cdots$}}%
+%
+%
+\settowidth{\Width}{$e$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$e$}\settodepth{\Depth}{$e$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(5.2500,10.4000){\hspace*{\Width}\raisebox{\Height}{$e$}}%
+%
+%
+\settowidth{\Width}{$\cdots$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\cdots$}\settodepth{\Depth}{$\cdots$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(6.7500,10.4000){\hspace*{\Width}\raisebox{\Height}{$\cdots$}}%
+%
+%
+\settowidth{\Width}{$e\sqrt{e}$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$e\sqrt{e}$}\settodepth{\Depth}{$e\sqrt{e}$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(8.2500,10.4000){\hspace*{\Width}\raisebox{\Height}{$e\sqrt{e}$}}%
+%
+%
+\settowidth{\Width}{$\cdots$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\cdots$}\settodepth{\Depth}{$\cdots$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(9.7500,10.4000){\hspace*{\Width}\raisebox{\Height}{$\cdots$}}%
+%
+%
+\settowidth{\Width}{$y'$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y'$}\settodepth{\Depth}{$y'$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(0.7500,9.2000){\hspace*{\Width}\raisebox{\Height}{$y'$}}%
+%
+%
+\settowidth{\Width}{$$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$$}\settodepth{\Depth}{$$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.2500,9.2000){\hspace*{\Width}\raisebox{\Height}{$$}}%
+%
+%
+\settowidth{\Width}{$+$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$+$}\settodepth{\Depth}{$+$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(3.7500,9.2000){\hspace*{\Width}\raisebox{\Height}{$+$}}%
+%
+%
+\settowidth{\Width}{$0$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$0$}\settodepth{\Depth}{$0$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(5.2500,9.2000){\hspace*{\Width}\raisebox{\Height}{$0$}}%
+%
+%
+\settowidth{\Width}{$-$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$-$}\settodepth{\Depth}{$-$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(6.7500,9.2000){\hspace*{\Width}\raisebox{\Height}{$-$}}%
+%
+%
+\settowidth{\Width}{$-$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$-$}\settodepth{\Depth}{$-$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(8.2500,9.2000){\hspace*{\Width}\raisebox{\Height}{$-$}}%
+%
+%
+\settowidth{\Width}{$-$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$-$}\settodepth{\Depth}{$-$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(9.7500,9.2000){\hspace*{\Width}\raisebox{\Height}{$-$}}%
+%
+%
+\settowidth{\Width}{$y''$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y''$}\settodepth{\Depth}{$y''$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(0.7500,8.0000){\hspace*{\Width}\raisebox{\Height}{$y''$}}%
+%
+%
+\settowidth{\Width}{$$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$$}\settodepth{\Depth}{$$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.2500,8.0000){\hspace*{\Width}\raisebox{\Height}{$$}}%
+%
+%
+\settowidth{\Width}{$-$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$-$}\settodepth{\Depth}{$-$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(3.7500,8.0000){\hspace*{\Width}\raisebox{\Height}{$-$}}%
+%
+%
+\settowidth{\Width}{$-$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$-$}\settodepth{\Depth}{$-$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(5.2500,8.0000){\hspace*{\Width}\raisebox{\Height}{$-$}}%
+%
+%
+\settowidth{\Width}{$-$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$-$}\settodepth{\Depth}{$-$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(6.7500,8.0000){\hspace*{\Width}\raisebox{\Height}{$-$}}%
+%
+%
+\settowidth{\Width}{$0$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$0$}\settodepth{\Depth}{$0$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(8.2500,8.0000){\hspace*{\Width}\raisebox{\Height}{$0$}}%
+%
+%
+\settowidth{\Width}{$+$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$+$}\settodepth{\Depth}{$+$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(9.7500,8.0000){\hspace*{\Width}\raisebox{\Height}{$+$}}%
+%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(0.7500,6.7000){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+%
+\settowidth{\Width}{$$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$$}\settodepth{\Depth}{$$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.2500,6.7000){\hspace*{\Width}\raisebox{\Height}{$$}}%
+%
+%
+\settowidth{\Width}{$$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$$}\settodepth{\Depth}{$$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(3.7500,6.7000){\hspace*{\Width}\raisebox{\Height}{$$}}%
+%
+%
+\settowidth{\Width}{$\dfrac{10}{e}$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\dfrac{10}{e}$}\settodepth{\Depth}{$\dfrac{10}{e}$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(5.2500,6.7000){\hspace*{\Width}\raisebox{\Height}{$\dfrac{10}{e}$}}%
+%
+%
+\settowidth{\Width}{$$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$$}\settodepth{\Depth}{$$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(6.7500,6.7000){\hspace*{\Width}\raisebox{\Height}{$$}}%
+%
+%
+\settowidth{\Width}{$\dfrac{15}{e\sqrt{e}}$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\dfrac{15}{e\sqrt{e}}$}\settodepth{\Depth}{$\dfrac{15}{e\sqrt{e}}$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(8.2500,6.7000){\hspace*{\Width}\raisebox{\Height}{$\dfrac{15}{e\sqrt{e}}$}}%
+%
+%
+\settowidth{\Width}{$$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$$}\settodepth{\Depth}{$$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(9.7500,6.7000){\hspace*{\Width}\raisebox{\Height}{$$}}%
+%
+%
+\settowidth{\Width}{\input{fig/s305graphforincanddec}}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{\input{fig/s305graphforincanddec}}\settodepth{\Depth}{\input{fig/s305graphforincanddec}}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(5.2500,3.0000){\hspace*{\Width}\raisebox{\Height}{\input{fig/s305graphforincanddec}}}%
+%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/saddle1.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/saddle1.tex
new file mode 100644
index 0000000000..3ff0ce0436
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/saddle1.tex
@@ -0,0 +1,326 @@
+%%% /Users/Hannya/ketcindy/ketwork/template.tex 2016-8-7 16:45
+%%% template.sce 2016-8-7 16:45
+{\unitlength=4mm%
+\begin{picture}%
+( 10.00000, 10.00000)( -5.00000, -5.00000)%
+\special{pn 8}%
+%
+\settowidth{\Width}{$x$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-4.6011,-1.1540){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.4854,-2.2142){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+%
+\settowidth{\Width}{$z$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$z$}\settodepth{\Depth}{$z$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(0.0000,4.5961){\hspace*{\Width}\raisebox{\Height}{$z$}}%
+%
+%
+\special{pa 696 -174}\special{pa -696 174}%
+\special{fp}%
+\special{pa -369 -329}\special{pa 369 329}%
+\special{fp}%
+\special{pa 0 694}\special{pa 0 -694}%
+\special{fp}%
+\special{pa 131 -201}\special{pa 107 -107}\special{pa 84 -20}\special{pa 61 59}\special{pa 38 130}%
+\special{pa 15 194}\special{pa -9 250}\special{pa -32 298}\special{pa -55 339}\special{pa -78 371}%
+\special{pa -101 397}\special{pa -124 414}\special{pa -148 424}\special{pa -171 426}%
+\special{pa -194 420}\special{pa -217 406}\special{pa -240 385}\special{pa -264 356}%
+\special{pa -287 320}\special{pa -310 275}\special{pa -333 223}\special{pa -356 164}%
+\special{pa -379 96}\special{pa -403 21}\special{pa -426 -62}%
+\special{fp}%
+\special{pa 145 -294}\special{pa 122 -199}\special{pa 99 -112}\special{pa 76 -33}%
+\special{pa 53 38}\special{pa 29 102}\special{pa 6 158}\special{pa -17 206}\special{pa -40 246}%
+\special{pa -63 279}\special{pa -86 304}\special{pa -110 322}\special{pa -133 331}%
+\special{pa -156 333}\special{pa -179 327}\special{pa -202 314}\special{pa -226 293}%
+\special{pa -249 264}\special{pa -272 227}\special{pa -295 183}\special{pa -318 131}%
+\special{pa -342 71}\special{pa -365 4}\special{pa -388 -71}\special{pa -411 -154}%
+\special{fp}%
+\special{pa 160 -375}\special{pa 137 -280}\special{pa 114 -194}\special{pa 91 -115}%
+\special{pa 67 -43}\special{pa 44 20}\special{pa 21 76}\special{pa -2 125}\special{pa -25 165}%
+\special{pa -49 198}\special{pa -72 223}\special{pa -95 240}\special{pa -118 250}%
+\special{pa -141 252}\special{pa -164 246}\special{pa -188 233}\special{pa -211 212}%
+\special{pa -234 183}\special{pa -257 146}\special{pa -280 102}\special{pa -304 50}%
+\special{pa -327 -10}\special{pa -350 -77}\special{pa -373 -152}\special{pa -396 -235}%
+\special{fp}%
+\special{pa 175 -445}\special{pa 152 -350}\special{pa 129 -264}\special{pa 105 -185}%
+\special{pa 82 -113}\special{pa 59 -50}\special{pa 36 6}\special{pa 13 54}\special{pa -11 95}%
+\special{pa -34 128}\special{pa -57 153}\special{pa -80 170}\special{pa -103 180}%
+\special{pa -127 182}\special{pa -150 176}\special{pa -173 163}\special{pa -196 142}%
+\special{pa -219 113}\special{pa -242 76}\special{pa -266 32}\special{pa -289 -20}%
+\special{pa -312 -80}\special{pa -335 -147}\special{pa -358 -223}\special{pa -382 -305}%
+\special{fp}%
+\special{pa 190 -504}\special{pa 166 -409}\special{pa 143 -323}\special{pa 120 -244}%
+\special{pa 97 -172}\special{pa 74 -109}\special{pa 51 -53}\special{pa 27 -5}\special{pa 4 36}%
+\special{pa -19 69}\special{pa -42 94}\special{pa -65 111}\special{pa -89 121}\special{pa -112 123}%
+\special{pa -135 117}\special{pa -158 104}\special{pa -181 83}\special{pa -205 54}%
+\special{pa -228 17}\special{pa -251 -27}\special{pa -274 -79}\special{pa -297 -139}%
+\special{pa -320 -206}\special{pa -344 -282}\special{pa -367 -364}%
+\special{fp}%
+\special{pa 204 -552}\special{pa 181 -457}\special{pa 158 -371}\special{pa 135 -292}%
+\special{pa 112 -220}\special{pa 88 -157}\special{pa 65 -101}\special{pa 42 -52}\special{pa 19 -12}%
+\special{pa -4 21}\special{pa -27 46}\special{pa -51 63}\special{pa -74 73}\special{pa -97 75}%
+\special{pa -120 69}\special{pa -143 56}\special{pa -167 35}\special{pa -190 6}\special{pa -213 -31}%
+\special{pa -236 -75}\special{pa -259 -127}\special{pa -282 -187}\special{pa -306 -254}%
+\special{pa -329 -329}\special{pa -352 -412}%
+\special{fp}%
+\special{pa 219 -589}\special{pa 196 -494}\special{pa 173 -407}\special{pa 150 -328}%
+\special{pa 126 -257}\special{pa 103 -193}\special{pa 80 -137}\special{pa 57 -89}%
+\special{pa 34 -49}\special{pa 11 -16}\special{pa -13 9}\special{pa -36 27}\special{pa -59 36}%
+\special{pa -82 38}\special{pa -105 32}\special{pa -129 19}\special{pa -152 -2}\special{pa -175 -31}%
+\special{pa -198 -68}\special{pa -221 -112}\special{pa -245 -164}\special{pa -268 -224}%
+\special{pa -291 -291}\special{pa -314 -366}\special{pa -337 -449}%
+\special{fp}%
+\special{pa 234 -614}\special{pa 211 -520}\special{pa 188 -433}\special{pa 164 -354}%
+\special{pa 141 -283}\special{pa 118 -219}\special{pa 95 -163}\special{pa 72 -115}%
+\special{pa 48 -74}\special{pa 25 -42}\special{pa 2 -17}\special{pa -21 1}\special{pa -44 11}%
+\special{pa -67 12}\special{pa -91 7}\special{pa -114 -7}\special{pa -137 -28}\special{pa -160 -57}%
+\special{pa -183 -93}\special{pa -207 -138}\special{pa -230 -190}\special{pa -253 -249}%
+\special{pa -276 -317}\special{pa -299 -392}\special{pa -323 -475}%
+\special{fp}%
+\special{pa 249 -629}\special{pa 226 -535}\special{pa 202 -448}\special{pa 179 -369}%
+\special{pa 156 -297}\special{pa 133 -234}\special{pa 110 -178}\special{pa 86 -130}%
+\special{pa 63 -89}\special{pa 40 -56}\special{pa 17 -31}\special{pa -6 -14}\special{pa -30 -4}%
+\special{pa -53 -2}\special{pa -76 -8}\special{pa -99 -21}\special{pa -122 -43}\special{pa -145 -71}%
+\special{pa -169 -108}\special{pa -192 -152}\special{pa -215 -204}\special{pa -238 -264}%
+\special{pa -261 -331}\special{pa -285 -407}\special{pa -308 -489}%
+\special{fp}%
+\special{pa 263 -632}\special{pa 240 -538}\special{pa 217 -451}\special{pa 194 -372}%
+\special{pa 171 -301}\special{pa 148 -237}\special{pa 124 -181}\special{pa 101 -133}%
+\special{pa 78 -93}\special{pa 55 -60}\special{pa 32 -35}\special{pa 8 -17}\special{pa -15 -8}%
+\special{pa -38 -6}\special{pa -61 -11}\special{pa -84 -25}\special{pa -108 -46}\special{pa -131 -75}%
+\special{pa -154 -111}\special{pa -177 -156}\special{pa -200 -208}\special{pa -223 -268}%
+\special{pa -247 -335}\special{pa -270 -410}\special{pa -293 -493}%
+\special{fp}%
+\special{pa 278 -625}\special{pa 255 -530}\special{pa 232 -444}\special{pa 209 -365}%
+\special{pa 185 -293}\special{pa 162 -230}\special{pa 139 -174}\special{pa 116 -125}%
+\special{pa 93 -85}\special{pa 70 -52}\special{pa 46 -27}\special{pa 23 -10}\special{pa 0 0}%
+\special{pa -23 2}\special{pa -46 -4}\special{pa -70 -17}\special{pa -93 -38}\special{pa -116 -67}%
+\special{pa -139 -104}\special{pa -162 -148}\special{pa -185 -200}\special{pa -209 -260}%
+\special{pa -232 -327}\special{pa -255 -402}\special{pa -278 -485}%
+\special{fp}%
+\special{pa 293 -606}\special{pa 270 -512}\special{pa 247 -425}\special{pa 223 -346}%
+\special{pa 200 -275}\special{pa 177 -211}\special{pa 154 -155}\special{pa 131 -107}%
+\special{pa 108 -66}\special{pa 84 -33}\special{pa 61 -8}\special{pa 38 9}\special{pa 15 19}%
+\special{pa -8 21}\special{pa -32 15}\special{pa -55 1}\special{pa -78 -20}\special{pa -101 -49}%
+\special{pa -124 -85}\special{pa -148 -129}\special{pa -171 -181}\special{pa -194 -241}%
+\special{pa -217 -309}\special{pa -240 -384}\special{pa -263 -467}%
+\special{fp}%
+\special{pa 308 -576}\special{pa 285 -482}\special{pa 261 -395}\special{pa 238 -316}%
+\special{pa 215 -245}\special{pa 192 -181}\special{pa 169 -125}\special{pa 145 -77}%
+\special{pa 122 -36}\special{pa 99 -4}\special{pa 76 21}\special{pa 53 39}\special{pa 30 49}%
+\special{pa 6 50}\special{pa -17 45}\special{pa -40 31}\special{pa -63 10}\special{pa -86 -19}%
+\special{pa -110 -55}\special{pa -133 -100}\special{pa -156 -152}\special{pa -179 -211}%
+\special{pa -202 -279}\special{pa -226 -354}\special{pa -249 -437}%
+\special{fp}%
+\special{pa 323 -535}\special{pa 299 -441}\special{pa 276 -354}\special{pa 253 -275}%
+\special{pa 230 -204}\special{pa 207 -140}\special{pa 183 -84}\special{pa 160 -36}%
+\special{pa 137 4}\special{pa 114 37}\special{pa 91 62}\special{pa 67 80}\special{pa 44 89}%
+\special{pa 21 91}\special{pa -2 86}\special{pa -25 72}\special{pa -48 51}\special{pa -72 22}%
+\special{pa -95 -14}\special{pa -118 -59}\special{pa -141 -111}\special{pa -164 -170}%
+\special{pa -188 -238}\special{pa -211 -313}\special{pa -234 -396}%
+\special{fp}%
+\special{pa 337 -483}\special{pa 314 -389}\special{pa 291 -302}\special{pa 268 -223}%
+\special{pa 245 -152}\special{pa 221 -88}\special{pa 198 -32}\special{pa 175 16}\special{pa 152 56}%
+\special{pa 129 89}\special{pa 105 114}\special{pa 82 132}\special{pa 59 141}\special{pa 36 143}%
+\special{pa 13 138}\special{pa -11 124}\special{pa -34 103}\special{pa -57 74}\special{pa -80 38}%
+\special{pa -103 -7}\special{pa -126 -59}\special{pa -150 -118}\special{pa -173 -186}%
+\special{pa -196 -261}\special{pa -219 -344}%
+\special{fp}%
+\special{pa 352 -420}\special{pa 329 -326}\special{pa 306 -239}\special{pa 282 -160}%
+\special{pa 259 -89}\special{pa 236 -25}\special{pa 213 31}\special{pa 190 79}\special{pa 167 120}%
+\special{pa 143 152}\special{pa 120 177}\special{pa 97 195}\special{pa 74 205}\special{pa 51 206}%
+\special{pa 27 201}\special{pa 4 187}\special{pa -19 166}\special{pa -42 137}\special{pa -65 101}%
+\special{pa -88 56}\special{pa -112 4}\special{pa -135 -55}\special{pa -158 -123}%
+\special{pa -181 -198}\special{pa -204 -281}%
+\special{fp}%
+\special{pa 367 -346}\special{pa 344 -252}\special{pa 320 -165}\special{pa 297 -86}%
+\special{pa 274 -14}\special{pa 251 49}\special{pa 228 105}\special{pa 205 153}\special{pa 181 194}%
+\special{pa 158 227}\special{pa 135 252}\special{pa 112 269}\special{pa 89 279}\special{pa 65 281}%
+\special{pa 42 275}\special{pa 19 261}\special{pa -4 240}\special{pa -27 211}\special{pa -51 175}%
+\special{pa -74 131}\special{pa -97 79}\special{pa -120 19}\special{pa -143 -49}\special{pa -166 -124}%
+\special{pa -190 -207}%
+\special{fp}%
+\special{pa 382 -261}\special{pa 358 -166}\special{pa 335 -80}\special{pa 312 -1}%
+\special{pa 289 71}\special{pa 266 134}\special{pa 242 190}\special{pa 219 239}\special{pa 196 279}%
+\special{pa 173 312}\special{pa 150 337}\special{pa 127 354}\special{pa 103 364}\special{pa 80 366}%
+\special{pa 57 360}\special{pa 34 347}\special{pa 11 326}\special{pa -13 297}\special{pa -36 260}%
+\special{pa -59 216}\special{pa -82 164}\special{pa -105 104}\special{pa -129 37}%
+\special{pa -152 -38}\special{pa -175 -121}%
+\special{fp}%
+\special{pa 396 -164}\special{pa 373 -70}\special{pa 350 17}\special{pa 327 96}\special{pa 304 167}%
+\special{pa 280 231}\special{pa 257 287}\special{pa 234 335}\special{pa 211 376}\special{pa 188 408}%
+\special{pa 164 433}\special{pa 141 451}\special{pa 118 460}\special{pa 95 462}\special{pa 72 457}%
+\special{pa 49 443}\special{pa 25 422}\special{pa 2 393}\special{pa -21 357}\special{pa -44 312}%
+\special{pa -67 260}\special{pa -91 201}\special{pa -114 133}\special{pa -137 58}%
+\special{pa -160 -25}%
+\special{fp}%
+\special{pa 411 -57}\special{pa 388 38}\special{pa 365 124}\special{pa 342 203}\special{pa 318 275}%
+\special{pa 295 338}\special{pa 272 394}\special{pa 249 443}\special{pa 226 483}\special{pa 202 516}%
+\special{pa 179 541}\special{pa 156 558}\special{pa 133 568}\special{pa 110 570}\special{pa 86 564}%
+\special{pa 63 551}\special{pa 40 530}\special{pa 17 501}\special{pa -6 464}\special{pa -29 420}%
+\special{pa -53 368}\special{pa -76 308}\special{pa -99 241}\special{pa -122 166}%
+\special{pa -145 83}%
+\special{fp}%
+\special{pa 426 62}\special{pa 403 156}\special{pa 379 243}\special{pa 356 322}\special{pa 333 393}%
+\special{pa 310 457}\special{pa 287 513}\special{pa 264 561}\special{pa 240 602}\special{pa 217 634}%
+\special{pa 194 660}\special{pa 171 677}\special{pa 148 687}\special{pa 124 689}\special{pa 101 683}%
+\special{pa 78 669}\special{pa 55 648}\special{pa 32 619}\special{pa 9 583}\special{pa -15 538}%
+\special{pa -38 486}\special{pa -61 427}\special{pa -84 359}\special{pa -107 284}%
+\special{pa -131 201}%
+\special{fp}%
+\special{pa 131 -201}\special{pa 143 -279}\special{pa 155 -349}\special{pa 168 -411}%
+\special{pa 180 -466}\special{pa 192 -513}\special{pa 204 -552}\special{pa 217 -583}%
+\special{pa 229 -607}\special{pa 241 -623}\special{pa 254 -631}\special{pa 266 -632}%
+\special{pa 278 -625}\special{pa 291 -610}\special{pa 303 -588}\special{pa 315 -557}%
+\special{pa 327 -519}\special{pa 340 -474}\special{pa 352 -420}\special{pa 364 -359}%
+\special{pa 377 -290}\special{pa 389 -214}\special{pa 401 -130}\special{pa 414 -38}%
+\special{pa 426 62}%
+\special{fp}%
+\special{pa 103 -89}\special{pa 115 -167}\special{pa 127 -237}\special{pa 140 -299}%
+\special{pa 152 -353}\special{pa 164 -400}\special{pa 177 -439}\special{pa 189 -471}%
+\special{pa 201 -495}\special{pa 213 -511}\special{pa 226 -519}\special{pa 238 -520}%
+\special{pa 250 -512}\special{pa 263 -498}\special{pa 275 -475}\special{pa 287 -445}%
+\special{pa 300 -407}\special{pa 312 -361}\special{pa 324 -308}\special{pa 337 -247}%
+\special{pa 349 -178}\special{pa 361 -102}\special{pa 373 -17}\special{pa 386 75}%
+\special{pa 398 174}%
+\special{fp}%
+\special{pa 75 12}\special{pa 87 -65}\special{pa 100 -135}\special{pa 112 -197}\special{pa 124 -252}%
+\special{pa 136 -299}\special{pa 149 -338}\special{pa 161 -370}\special{pa 173 -393}%
+\special{pa 186 -409}\special{pa 198 -418}\special{pa 210 -418}\special{pa 223 -411}%
+\special{pa 235 -396}\special{pa 247 -374}\special{pa 259 -344}\special{pa 272 -306}%
+\special{pa 284 -260}\special{pa 296 -207}\special{pa 309 -145}\special{pa 321 -77}%
+\special{pa 333 0}\special{pa 346 84}\special{pa 358 176}\special{pa 370 276}%
+\special{fp}%
+\special{pa 47 103}\special{pa 59 25}\special{pa 72 -45}\special{pa 84 -107}\special{pa 96 -162}%
+\special{pa 109 -209}\special{pa 121 -248}\special{pa 133 -279}\special{pa 146 -303}%
+\special{pa 158 -319}\special{pa 170 -327}\special{pa 182 -328}\special{pa 195 -321}%
+\special{pa 207 -306}\special{pa 219 -284}\special{pa 232 -253}\special{pa 244 -215}%
+\special{pa 256 -170}\special{pa 269 -116}\special{pa 281 -55}\special{pa 293 14}%
+\special{pa 305 90}\special{pa 318 174}\special{pa 330 266}\special{pa 342 366}%
+\special{fp}%
+\special{pa 19 182}\special{pa 32 104}\special{pa 44 34}\special{pa 56 -28}\special{pa 69 -83}%
+\special{pa 81 -130}\special{pa 93 -169}\special{pa 105 -200}\special{pa 118 -224}%
+\special{pa 130 -240}\special{pa 142 -248}\special{pa 155 -249}\special{pa 167 -242}%
+\special{pa 179 -227}\special{pa 192 -204}\special{pa 204 -174}\special{pa 216 -136}%
+\special{pa 228 -91}\special{pa 241 -37}\special{pa 253 24}\special{pa 265 93}\special{pa 278 169}%
+\special{pa 290 253}\special{pa 302 345}\special{pa 315 445}%
+\special{fp}%
+\special{pa -9 250}\special{pa 4 172}\special{pa 16 102}\special{pa 28 40}\special{pa 41 -15}%
+\special{pa 53 -61}\special{pa 65 -101}\special{pa 78 -132}\special{pa 90 -156}\special{pa 102 -172}%
+\special{pa 115 -180}\special{pa 127 -181}\special{pa 139 -174}\special{pa 151 -159}%
+\special{pa 164 -136}\special{pa 176 -106}\special{pa 188 -68}\special{pa 201 -22}%
+\special{pa 213 31}\special{pa 225 92}\special{pa 238 161}\special{pa 250 237}\special{pa 262 321}%
+\special{pa 274 413}\special{pa 287 513}%
+\special{fp}%
+\special{pa -36 307}\special{pa -24 229}\special{pa -12 159}\special{pa 1 97}\special{pa 13 42}%
+\special{pa 25 -5}\special{pa 37 -44}\special{pa 50 -75}\special{pa 62 -99}\special{pa 74 -115}%
+\special{pa 87 -123}\special{pa 99 -124}\special{pa 111 -117}\special{pa 124 -102}%
+\special{pa 136 -79}\special{pa 148 -49}\special{pa 160 -11}\special{pa 173 34}\special{pa 185 88}%
+\special{pa 197 149}\special{pa 210 218}\special{pa 222 294}\special{pa 234 378}\special{pa 247 470}%
+\special{pa 259 570}%
+\special{fp}%
+\special{pa -64 353}\special{pa -52 275}\special{pa -40 205}\special{pa -27 143}\special{pa -15 88}%
+\special{pa -3 41}\special{pa 10 2}\special{pa 22 -29}\special{pa 34 -53}\special{pa 47 -69}%
+\special{pa 59 -77}\special{pa 71 -78}\special{pa 83 -71}\special{pa 96 -56}\special{pa 108 -34}%
+\special{pa 120 -3}\special{pa 133 35}\special{pa 145 80}\special{pa 157 134}\special{pa 170 195}%
+\special{pa 182 263}\special{pa 194 340}\special{pa 206 424}\special{pa 219 516}\special{pa 231 616}%
+\special{fp}%
+\special{pa -92 387}\special{pa -80 310}\special{pa -67 240}\special{pa -55 177}\special{pa -43 123}%
+\special{pa -30 76}\special{pa -18 37}\special{pa -6 5}\special{pa 6 -18}\special{pa 19 -34}%
+\special{pa 31 -43}\special{pa 43 -43}\special{pa 56 -36}\special{pa 68 -21}\special{pa 80 1}%
+\special{pa 93 31}\special{pa 105 69}\special{pa 117 115}\special{pa 129 168}\special{pa 142 229}%
+\special{pa 154 298}\special{pa 166 375}\special{pa 179 459}\special{pa 191 551}\special{pa 203 650}%
+\special{fp}%
+\special{pa -120 411}\special{pa -108 333}\special{pa -95 263}\special{pa -83 201}%
+\special{pa -71 147}\special{pa -58 100}\special{pa -46 60}\special{pa -34 29}\special{pa -21 5}%
+\special{pa -9 -11}\special{pa 3 -19}\special{pa 16 -20}\special{pa 28 -13}\special{pa 40 2}%
+\special{pa 52 25}\special{pa 65 55}\special{pa 77 93}\special{pa 89 139}\special{pa 102 192}%
+\special{pa 114 253}\special{pa 126 322}\special{pa 139 398}\special{pa 151 483}\special{pa 163 574}%
+\special{pa 175 674}%
+\special{fp}%
+\special{pa -148 424}\special{pa -135 346}\special{pa -123 276}\special{pa -111 214}%
+\special{pa -98 159}\special{pa -86 112}\special{pa -74 73}\special{pa -62 42}\special{pa -49 18}%
+\special{pa -37 2}\special{pa -25 -6}\special{pa -12 -7}\special{pa 0 0}\special{pa 12 15}%
+\special{pa 25 37}\special{pa 37 68}\special{pa 49 106}\special{pa 62 151}\special{pa 74 205}%
+\special{pa 86 266}\special{pa 98 334}\special{pa 111 411}\special{pa 123 495}\special{pa 135 587}%
+\special{pa 148 687}%
+\special{fp}%
+\special{pa -175 425}\special{pa -163 347}\special{pa -151 277}\special{pa -139 215}%
+\special{pa -126 160}\special{pa -114 114}\special{pa -102 74}\special{pa -89 43}%
+\special{pa -77 19}\special{pa -65 3}\special{pa -52 -5}\special{pa -40 -6}\special{pa -28 1}%
+\special{pa -16 16}\special{pa -3 39}\special{pa 9 69}\special{pa 21 107}\special{pa 34 153}%
+\special{pa 46 206}\special{pa 58 267}\special{pa 71 336}\special{pa 83 412}\special{pa 95 497}%
+\special{pa 108 588}\special{pa 120 688}%
+\special{fp}%
+\special{pa -203 415}\special{pa -191 338}\special{pa -179 268}\special{pa -166 205}%
+\special{pa -154 151}\special{pa -142 104}\special{pa -129 65}\special{pa -117 33}%
+\special{pa -105 10}\special{pa -93 -6}\special{pa -80 -15}\special{pa -68 -15}\special{pa -56 -8}%
+\special{pa -43 7}\special{pa -31 29}\special{pa -19 59}\special{pa -6 97}\special{pa 6 143}%
+\special{pa 18 196}\special{pa 30 257}\special{pa 43 326}\special{pa 55 403}\special{pa 67 487}%
+\special{pa 80 579}\special{pa 92 678}%
+\special{fp}%
+\special{pa -231 395}\special{pa -219 317}\special{pa -206 247}\special{pa -194 185}%
+\special{pa -182 130}\special{pa -170 83}\special{pa -157 44}\special{pa -145 13}%
+\special{pa -133 -11}\special{pa -120 -27}\special{pa -108 -36}\special{pa -96 -36}%
+\special{pa -83 -29}\special{pa -71 -14}\special{pa -59 8}\special{pa -47 39}\special{pa -34 76}%
+\special{pa -22 122}\special{pa -10 176}\special{pa 3 237}\special{pa 15 305}\special{pa 27 382}%
+\special{pa 40 466}\special{pa 52 558}\special{pa 64 658}%
+\special{fp}%
+\special{pa -259 363}\special{pa -247 285}\special{pa -234 215}\special{pa -222 153}%
+\special{pa -210 98}\special{pa -197 51}\special{pa -185 12}\special{pa -173 -19}%
+\special{pa -160 -43}\special{pa -148 -59}\special{pa -136 -67}\special{pa -124 -68}%
+\special{pa -111 -61}\special{pa -99 -46}\special{pa -87 -24}\special{pa -74 7}\special{pa -62 45}%
+\special{pa -50 90}\special{pa -37 144}\special{pa -25 205}\special{pa -13 273}\special{pa -1 350}%
+\special{pa 12 434}\special{pa 24 526}\special{pa 36 626}%
+\special{fp}%
+\special{pa -287 320}\special{pa -274 242}\special{pa -262 172}\special{pa -250 110}%
+\special{pa -238 55}\special{pa -225 8}\special{pa -213 -31}\special{pa -201 -62}%
+\special{pa -188 -86}\special{pa -176 -102}\special{pa -164 -110}\special{pa -151 -111}%
+\special{pa -139 -104}\special{pa -127 -89}\special{pa -115 -67}\special{pa -102 -36}%
+\special{pa -90 2}\special{pa -78 47}\special{pa -65 101}\special{pa -53 162}\special{pa -41 231}%
+\special{pa -28 307}\special{pa -16 391}\special{pa -4 483}\special{pa 9 583}%
+\special{fp}%
+\special{pa -315 266}\special{pa -302 188}\special{pa -290 118}\special{pa -278 56}%
+\special{pa -265 1}\special{pa -253 -46}\special{pa -241 -85}\special{pa -228 -116}%
+\special{pa -216 -140}\special{pa -204 -156}\special{pa -192 -164}\special{pa -179 -165}%
+\special{pa -167 -158}\special{pa -155 -143}\special{pa -142 -121}\special{pa -130 -90}%
+\special{pa -118 -52}\special{pa -105 -7}\special{pa -93 47}\special{pa -81 108}\special{pa -69 176}%
+\special{pa -56 253}\special{pa -44 337}\special{pa -32 429}\special{pa -19 529}%
+\special{fp}%
+\special{pa -342 200}\special{pa -330 123}\special{pa -318 53}\special{pa -305 -10}%
+\special{pa -293 -64}\special{pa -281 -111}\special{pa -269 -150}\special{pa -256 -182}%
+\special{pa -244 -205}\special{pa -232 -221}\special{pa -219 -230}\special{pa -207 -230}%
+\special{pa -195 -223}\special{pa -182 -208}\special{pa -170 -186}\special{pa -158 -156}%
+\special{pa -146 -118}\special{pa -133 -72}\special{pa -121 -19}\special{pa -109 42}%
+\special{pa -96 111}\special{pa -84 188}\special{pa -72 272}\special{pa -59 364}\special{pa -47 463}%
+\special{fp}%
+\special{pa -370 124}\special{pa -358 46}\special{pa -346 -24}\special{pa -333 -86}%
+\special{pa -321 -140}\special{pa -309 -187}\special{pa -296 -226}\special{pa -284 -258}%
+\special{pa -272 -282}\special{pa -259 -298}\special{pa -247 -306}\special{pa -235 -307}%
+\special{pa -223 -299}\special{pa -210 -285}\special{pa -198 -262}\special{pa -186 -232}%
+\special{pa -173 -194}\special{pa -161 -148}\special{pa -149 -95}\special{pa -136 -34}%
+\special{pa -124 35}\special{pa -112 111}\special{pa -100 196}\special{pa -87 288}%
+\special{pa -75 387}%
+\special{fp}%
+\special{pa -398 37}\special{pa -386 -41}\special{pa -373 -111}\special{pa -361 -173}%
+\special{pa -349 -228}\special{pa -337 -275}\special{pa -324 -314}\special{pa -312 -345}%
+\special{pa -300 -369}\special{pa -287 -385}\special{pa -275 -393}\special{pa -263 -394}%
+\special{pa -250 -387}\special{pa -238 -372}\special{pa -226 -349}\special{pa -213 -319}%
+\special{pa -201 -281}\special{pa -189 -236}\special{pa -177 -182}\special{pa -164 -121}%
+\special{pa -152 -52}\special{pa -140 24}\special{pa -127 108}\special{pa -115 200}%
+\special{pa -103 300}%
+\special{fp}%
+\special{pa -426 -62}\special{pa -414 -139}\special{pa -401 -209}\special{pa -389 -272}%
+\special{pa -377 -326}\special{pa -364 -373}\special{pa -352 -412}\special{pa -340 -444}%
+\special{pa -327 -467}\special{pa -315 -484}\special{pa -303 -492}\special{pa -291 -492}%
+\special{pa -278 -485}\special{pa -266 -471}\special{pa -254 -448}\special{pa -241 -418}%
+\special{pa -229 -380}\special{pa -217 -334}\special{pa -204 -281}\special{pa -192 -220}%
+\special{pa -180 -151}\special{pa -168 -74}\special{pa -155 10}\special{pa -143 102}%
+\special{pa -131 201}%
+\special{fp}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/saddle1E.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/saddle1E.tex
new file mode 100644
index 0000000000..38b4bca7fb
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/saddle1E.tex
@@ -0,0 +1,181 @@
+%%% /Users/takatoosetsuo/Dropbox/kettoday/0905spatialfigure/fig/saddle1E.tex
+%%% Generator=saddle.cdy
+{\unitlength=6mm%
+\begin{picture}%
+(9.59,9.56)(-4.62,-4.42)%
+\special{pn 8}%
+%
+\settowidth{\Width}{$x$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-3.3400000,-1.9500000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.2500000,-1.4900000){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+\settowidth{\Width}{$z$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$z$}\settodepth{\Depth}{$z$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(0.0000000,4.7700000){\hspace*{\Width}\raisebox{\Height}{$z$}}%
+%
+\special{pa -196 290}\special{pa -193 279}\special{pa -193 278}%
+\special{fp}%
+\special{pa -193 278}\special{pa -190 265}\special{pa -190 265}%
+\special{fp}%
+\special{pa -190 265}\special{pa -186 248}\special{pa -185 248}%
+\special{fp}%
+\special{pa -185 248}\special{pa -184 242}\special{pa -178 220}\special{pa -178 220}%
+\special{fp}%
+\special{pa -178 220}\special{pa -172 199}\special{pa -170 192}\special{pa -166 179}%
+\special{pa -162 167}\special{pa -160 160}\special{pa -155 144}\special{pa -154 142}%
+\special{pa -148 125}\special{pa -147 122}\special{pa -142 110}\special{pa -139 103}%
+\special{pa -136 95}\special{pa -132 85}\special{pa -130 82}\special{pa -124 69}%
+\special{pa -118 58}\special{pa -116 54}\special{pa -112 48}\special{pa -108 41}%
+\special{pa -106 38}\special{pa -101 31}\special{pa -94 23}\special{pa -93 22}%
+\special{pa -88 17}\special{pa -85 14}\special{pa -82 12}\special{pa -78 9}%
+\special{pa -76 8}\special{pa -70 6}\special{pa -64 4}\special{pa -62 4}%
+\special{pa -58 3}\special{pa -54 4}\special{pa -53 4}\special{pa -47 5}%
+\special{pa -41 8}\special{pa -39 9}\special{pa -35 12}\special{pa -31 14}%
+\special{pa -29 17}\special{pa -24 21}\special{pa -23 22}\special{pa -17 29}%
+\special{pa -16 30}\special{pa -11 37}\special{pa -8 41}\special{pa -5 47}%
+\special{pa -0 54}\special{pa 1 57}\special{pa 7 68}\special{pa 13 80}%
+\special{pa 15 84}\special{pa 19 94}\special{pa 23 102}\special{pa 25 108}%
+\special{pa 30 122}\special{pa 31 124}\special{pa 37 140}\special{pa 38 143}%
+\special{pa 43 158}\special{pa 46 167}\special{pa 49 177}\special{pa 54 192}%
+\special{pa 55 197}\special{pa 61 218}\special{pa 67 240}\special{pa 69 247}%
+\special{pa 73 263}\special{pa 77 278}\special{pa 79 287}\special{pa 84 310}%
+\special{fp}%
+\special{pa 84 310}\special{pa 85 312}\special{pa 91 337}%
+\special{fp}%
+\special{pa 91 337}\special{pa 91 339}\special{pa 92 342}%
+\special{fp}%
+\special{pa 92 342}\special{pa 92 344}\special{pa 95 358}%
+\special{fp}%
+\special{pa 95 358}\special{pa 97 366}\special{pa 100 380}%
+\special{fp}%
+\special{pa 100 380}\special{pa 103 394}%
+\special{fp}%
+\special{pa -663 38}\special{pa -648 -23}\special{pa -633 -81}\special{pa -618 -136}%
+\special{pa -603 -189}\special{pa -588 -239}\special{pa -573 -286}\special{pa -558 -331}%
+\special{pa -543 -373}\special{pa -528 -412}\special{pa -513 -448}\special{pa -498 -482}%
+\special{pa -484 -513}\special{pa -469 -542}\special{pa -454 -567}\special{pa -439 -591}%
+\special{pa -424 -611}\special{pa -409 -629}\special{pa -394 -644}\special{pa -379 -656}%
+\special{pa -364 -665}\special{pa -349 -672}\special{pa -334 -676}\special{pa -319 -678}%
+\special{pa -304 -677}\special{pa -289 -673}\special{pa -274 -666}\special{pa -259 -657}%
+\special{pa -245 -645}\special{pa -230 -630}\special{pa -215 -613}\special{pa -200 -593}%
+\special{pa -185 -570}\special{pa -170 -545}\special{pa -155 -516}\special{pa -140 -486}%
+\special{pa -125 -452}\special{pa -110 -416}\special{pa -95 -377}\special{pa -80 -335}%
+\special{pa -78 -327}%
+\special{fp}%
+\special{pa -78 -327}\special{pa -65 -291}\special{pa -50 -244}\special{pa -35 -194}%
+\special{pa -20 -142}\special{pa -5 -87}\special{pa 9 -29}\special{pa 24 32}%
+\special{pa 39 95}\special{pa 54 161}\special{pa 69 229}\special{pa 84 301}%
+\special{fp}%
+\special{pa 663 -38}\special{pa 651 35}\special{pa 640 105}\special{pa 628 172}%
+\special{pa 617 237}\special{pa 605 299}\special{pa 593 358}\special{pa 582 415}%
+\special{pa 570 469}\special{pa 559 520}\special{pa 547 569}\special{pa 536 614}%
+\special{pa 524 658}\special{pa 512 698}\special{pa 501 736}\special{pa 489 771}%
+\special{pa 478 803}\special{pa 466 833}\special{pa 454 860}\special{pa 443 884}%
+\special{pa 431 906}\special{pa 420 925}\special{pa 408 941}\special{pa 397 954}%
+\special{pa 385 965}\special{pa 373 973}\special{pa 362 979}\special{pa 350 982}%
+\special{pa 339 982}\special{pa 327 979}\special{pa 316 974}\special{pa 304 965}%
+\special{pa 292 955}\special{pa 281 941}\special{pa 269 925}\special{pa 258 906}%
+\special{pa 246 885}\special{pa 235 861}\special{pa 223 834}\special{pa 211 804}%
+\special{pa 200 772}\special{pa 188 737}\special{pa 177 699}\special{pa 165 659}%
+\special{pa 154 616}\special{pa 142 570}\special{pa 130 521}\special{pa 119 470}%
+\special{pa 107 416}\special{pa 103 394}%
+\special{fp}%
+\special{pa 103 394}\special{pa 100 380}%
+\special{fp}%
+\special{pa 100 380}\special{pa 97 366}%
+\special{fp}%
+\special{pa 97 366}\special{pa 96 360}\special{pa 93 344}%
+\special{fp}%
+\special{pa 93 344}\special{pa 91 337}%
+\special{fp}%
+\special{pa 91 337}\special{pa 86 312}%
+\special{fp}%
+\special{pa 86 312}\special{pa 84 301}%
+\special{fp}%
+\special{pa -78 -327}\special{pa -69 -361}\special{pa -54 -419}\special{pa -39 -475}%
+\special{pa -24 -527}\special{pa -9 -577}\special{pa 5 -625}\special{pa 20 -669}%
+\special{pa 35 -711}\special{pa 50 -751}\special{pa 65 -787}\special{pa 80 -821}%
+\special{pa 95 -852}\special{pa 110 -880}\special{pa 125 -906}\special{pa 140 -929}%
+\special{pa 155 -950}\special{pa 170 -967}\special{pa 185 -982}\special{pa 200 -994}%
+\special{pa 215 -1004}\special{pa 230 -1011}\special{pa 245 -1015}\special{pa 259 -1017}%
+\special{pa 274 -1015}\special{pa 289 -1012}\special{pa 304 -1005}\special{pa 319 -996}%
+\special{pa 334 -984}\special{pa 349 -969}\special{pa 364 -952}\special{pa 379 -932}%
+\special{pa 394 -909}\special{pa 409 -883}\special{pa 424 -855}\special{pa 439 -824}%
+\special{pa 454 -791}\special{pa 469 -755}\special{pa 484 -716}\special{pa 498 -674}%
+\special{pa 513 -630}\special{pa 528 -583}\special{pa 543 -533}\special{pa 558 -480}%
+\special{pa 573 -425}\special{pa 588 -368}\special{pa 603 -307}\special{pa 618 -244}%
+\special{pa 633 -178}\special{pa 648 -109}\special{pa 663 -38}%
+\special{fp}%
+\special{pa -196 289}\special{pa -200 306}\special{pa -211 352}\special{pa -223 395}%
+\special{pa -235 436}\special{pa -246 473}\special{pa -258 508}\special{pa -269 541}%
+\special{pa -281 571}\special{pa -292 598}\special{pa -304 622}\special{pa -316 643}%
+\special{pa -327 662}\special{pa -339 679}\special{pa -350 692}\special{pa -362 703}%
+\special{pa -373 711}\special{pa -385 716}\special{pa -397 719}\special{pa -408 719}%
+\special{pa -420 716}\special{pa -431 711}\special{pa -443 703}\special{pa -454 692}%
+\special{pa -466 679}\special{pa -478 663}\special{pa -489 644}\special{pa -501 622}%
+\special{pa -512 598}\special{pa -524 571}\special{pa -536 542}\special{pa -547 509}%
+\special{pa -559 474}\special{pa -570 437}\special{pa -582 396}\special{pa -593 353}%
+\special{pa -605 307}\special{pa -617 259}\special{pa -628 208}\special{pa -640 154}%
+\special{pa -651 97}\special{pa -663 38}%
+\special{fp}%
+\special{pa 723 -423}\special{pa 593 -347}%
+\special{fp}%
+\special{pa -29 17}\special{pa -127 74}%
+\special{fp}%
+\special{pa -127 74}\special{pa -595 348}%
+\special{fp}%
+\special{pa -595 348}\special{pa -723 423}%
+\special{fp}%
+\special{pa -934 -328}\special{pa -597 -210}%
+\special{fp}%
+\special{pa 18 6}\special{pa 620 218}%
+\special{fp}%
+\special{pa 620 218}\special{pa 934 328}%
+\special{fp}%
+\special{pa 0 1044}\special{pa 0 55}%
+\special{fp}%
+\special{pa 0 -65}\special{pa 0 -607}%
+\special{fp}%
+\special{pa 0 -607}\special{pa 0 -1053}%
+\special{fp}%
+\special{pn 8}%
+\special{pa -85 -297}\special{pa -83 -304}\special{fp}\special{pa -78 -324}\special{pa -77 -331}\special{fp}%
+\special{pn 8}%
+\special{pa -84 -304}\special{pa -85 -297}\special{fp}\special{pa -90 -265}\special{pa -91 -257}\special{fp}%
+\special{pa -96 -226}\special{pa -97 -218}\special{fp}\special{pa -103 -186}\special{pa -104 -178}\special{fp}%
+\special{pa -109 -147}\special{pa -111 -139}\special{fp}\special{pa -116 -107}\special{pa -117 -99}\special{fp}%
+\special{pa -123 -68}\special{pa -124 -60}\special{fp}\special{pa -130 -28}\special{pa -131 -21}\special{fp}%
+\special{pa -137 11}\special{pa -139 19}\special{fp}\special{pa -145 50}\special{pa -146 58}\special{fp}%
+\special{pa -152 89}\special{pa -154 97}\special{fp}\special{pa -160 129}\special{pa -162 136}\special{fp}%
+\special{pa -168 168}\special{pa -170 176}\special{fp}\special{pa -177 207}\special{pa -179 215}\special{fp}%
+\special{pa -186 246}\special{pa -187 254}\special{fp}\special{pa -195 285}\special{pa -197 292}\special{fp}%
+\special{pn 8}%
+\special{pn 8}%
+\special{pa 597 -349}\special{pa 590 -345}\special{fp}\special{pa 562 -329}\special{pa 555 -325}\special{fp}%
+\special{pa 528 -309}\special{pa 521 -305}\special{fp}\special{pa 493 -289}\special{pa 486 -285}\special{fp}%
+\special{pa 458 -268}\special{pa 452 -264}\special{fp}\special{pa 424 -248}\special{pa 417 -244}\special{fp}%
+\special{pa 389 -228}\special{pa 382 -224}\special{fp}\special{pa 355 -208}\special{pa 348 -204}\special{fp}%
+\special{pa 320 -187}\special{pa 313 -183}\special{fp}\special{pa 286 -167}\special{pa 279 -163}\special{fp}%
+\special{pa 251 -147}\special{pa 244 -143}\special{fp}\special{pa 217 -127}\special{pa 210 -123}\special{fp}%
+\special{pa 182 -107}\special{pa 175 -103}\special{fp}\special{pa 148 -86}\special{pa 141 -82}\special{fp}%
+\special{pa 113 -66}\special{pa 106 -62}\special{fp}\special{pa 79 -46}\special{pa 72 -42}\special{fp}%
+\special{pa 44 -26}\special{pa 37 -22}\special{fp}\special{pa 9 -6}\special{pa 3 -2}\special{fp}%
+\special{pa -25 15}\special{pa -32 19}\special{fp}\special{pn 8}%
+\special{pa -601 -211}\special{pa -593 -208}\special{fp}\special{pa -564 -198}\special{pa -557 -196}\special{fp}%
+\special{pa -528 -186}\special{pa -521 -183}\special{fp}\special{pa -492 -173}\special{pa -485 -170}\special{fp}%
+\special{pa -456 -160}\special{pa -448 -157}\special{fp}\special{pa -420 -147}\special{pa -412 -145}\special{fp}%
+\special{pa -384 -135}\special{pa -376 -132}\special{fp}\special{pa -347 -122}\special{pa -340 -119}\special{fp}%
+\special{pa -311 -109}\special{pa -304 -107}\special{fp}\special{pa -275 -97}\special{pa -267 -94}\special{fp}%
+\special{pa -239 -84}\special{pa -231 -81}\special{fp}\special{pa -203 -71}\special{pa -195 -69}\special{fp}%
+\special{pa -166 -58}\special{pa -159 -56}\special{fp}\special{pa -130 -46}\special{pa -123 -43}\special{fp}%
+\special{pa -94 -33}\special{pa -87 -30}\special{fp}\special{pa -58 -20}\special{pa -50 -18}\special{fp}%
+\special{pa -22 -8}\special{pa -14 -5}\special{fp}\special{pa 14 5}\special{pa 22 8}\special{fp}%
+\special{pn 8}%
+\special{pa 0 59}\special{pa 0 51}\special{fp}\special{pa 0 19}\special{pa 0 11}\special{fp}%
+\special{pa 0 -21}\special{pa 0 -29}\special{fp}\special{pa 0 -61}\special{pa 0 -69}\special{fp}%
+\special{pn 8}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/saddle2E.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/saddle2E.tex
new file mode 100644
index 0000000000..777e79e943
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/saddle2E.tex
@@ -0,0 +1,379 @@
+%%% /Users/takatoosetsuo/Dropbox/kettoday/0905spatialfigure/fig/saddle2E.tex
+%%% Generator=saddle.cdy
+{\unitlength=6mm%
+\begin{picture}%
+(9.59,9.56)(-4.62,-4.42)%
+\special{pn 8}%
+%
+\settowidth{\Width}{$x$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-3.3400000,-1.9500000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.2500000,-1.4900000){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+\settowidth{\Width}{$z$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$z$}\settodepth{\Depth}{$z$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(0.0000000,4.7700000){\hspace*{\Width}\raisebox{\Height}{$z$}}%
+%
+\special{pa -196 290}\special{pa -193 279}\special{pa -193 278}%
+\special{fp}%
+\special{pa -193 278}\special{pa -190 265}\special{pa -190 265}%
+\special{fp}%
+\special{pa -190 265}\special{pa -186 248}\special{pa -185 248}%
+\special{fp}%
+\special{pa -185 248}\special{pa -184 242}\special{pa -178 220}\special{pa -178 220}%
+\special{fp}%
+\special{pa -178 220}\special{pa -172 199}\special{pa -170 192}\special{pa -166 179}%
+\special{pa -162 167}\special{pa -160 160}\special{pa -155 144}\special{pa -154 142}%
+\special{pa -148 125}\special{pa -147 122}\special{pa -142 110}\special{pa -139 103}%
+\special{pa -136 95}\special{pa -132 85}\special{pa -130 82}\special{pa -124 69}%
+\special{pa -118 58}\special{pa -116 54}\special{pa -112 48}\special{pa -108 41}%
+\special{pa -106 38}\special{pa -101 31}\special{pa -94 23}\special{pa -93 22}%
+\special{pa -88 17}\special{pa -85 14}\special{pa -82 12}\special{pa -78 9}%
+\special{pa -76 8}\special{pa -70 6}\special{pa -64 4}\special{pa -62 4}%
+\special{pa -58 3}\special{pa -54 4}\special{pa -53 4}\special{pa -47 5}%
+\special{pa -41 8}\special{pa -39 9}\special{pa -35 12}\special{pa -31 14}%
+\special{pa -29 17}\special{pa -24 21}\special{pa -23 22}\special{pa -17 29}%
+\special{pa -16 30}\special{pa -11 37}\special{pa -8 41}\special{pa -5 47}%
+\special{pa -0 54}\special{pa 1 57}\special{pa 7 68}\special{pa 13 80}%
+\special{pa 15 84}\special{pa 19 94}\special{pa 23 102}\special{pa 25 108}%
+\special{pa 30 122}\special{pa 31 124}\special{pa 37 140}\special{pa 38 143}%
+\special{pa 43 158}\special{pa 46 167}\special{pa 49 177}\special{pa 54 192}%
+\special{pa 55 197}\special{pa 61 218}\special{pa 67 240}\special{pa 69 247}%
+\special{pa 73 263}\special{pa 77 278}\special{pa 79 287}\special{pa 84 310}%
+\special{fp}%
+\special{pa 84 310}\special{pa 85 312}\special{pa 91 337}%
+\special{fp}%
+\special{pa 91 337}\special{pa 91 339}\special{pa 92 342}%
+\special{fp}%
+\special{pa 92 342}\special{pa 92 344}\special{pa 95 358}%
+\special{fp}%
+\special{pa 95 358}\special{pa 97 366}\special{pa 100 380}%
+\special{fp}%
+\special{pa 100 380}\special{pa 103 394}%
+\special{fp}%
+\special{pa -663 38}\special{pa -648 -23}\special{pa -633 -81}\special{pa -618 -136}%
+\special{pa -603 -189}\special{pa -588 -239}\special{pa -573 -286}\special{pa -558 -331}%
+\special{pa -543 -373}\special{pa -528 -412}\special{pa -513 -448}\special{pa -498 -482}%
+\special{pa -484 -513}\special{pa -469 -542}\special{pa -454 -567}\special{pa -439 -591}%
+\special{pa -424 -611}\special{pa -409 -629}\special{pa -394 -644}\special{pa -379 -656}%
+\special{pa -364 -665}\special{pa -349 -672}\special{pa -334 -676}\special{pa -319 -678}%
+\special{pa -304 -677}\special{pa -289 -673}\special{pa -274 -666}\special{pa -259 -657}%
+\special{pa -245 -645}\special{pa -230 -630}\special{pa -215 -613}\special{pa -200 -593}%
+\special{pa -185 -570}\special{pa -170 -545}\special{pa -155 -516}\special{pa -140 -486}%
+\special{pa -125 -452}\special{pa -110 -416}\special{pa -95 -377}\special{pa -80 -335}%
+\special{pa -78 -327}%
+\special{fp}%
+\special{pa -78 -327}\special{pa -65 -291}\special{pa -50 -244}\special{pa -35 -194}%
+\special{pa -20 -142}\special{pa -5 -87}\special{pa 9 -29}\special{pa 24 32}%
+\special{pa 39 95}\special{pa 54 161}\special{pa 69 229}\special{pa 84 301}%
+\special{fp}%
+\special{pa 663 -38}\special{pa 651 35}\special{pa 640 105}\special{pa 628 172}%
+\special{pa 617 237}\special{pa 605 299}\special{pa 593 358}\special{pa 582 415}%
+\special{pa 570 469}\special{pa 559 520}\special{pa 547 569}\special{pa 536 614}%
+\special{pa 524 658}\special{pa 512 698}\special{pa 501 736}\special{pa 489 771}%
+\special{pa 478 803}\special{pa 466 833}\special{pa 454 860}\special{pa 443 884}%
+\special{pa 431 906}\special{pa 420 925}\special{pa 408 941}\special{pa 397 954}%
+\special{pa 385 965}\special{pa 373 973}\special{pa 362 979}\special{pa 350 982}%
+\special{pa 339 982}\special{pa 327 979}\special{pa 316 974}\special{pa 304 965}%
+\special{pa 292 955}\special{pa 281 941}\special{pa 269 925}\special{pa 258 906}%
+\special{pa 246 885}\special{pa 235 861}\special{pa 223 834}\special{pa 211 804}%
+\special{pa 200 772}\special{pa 188 737}\special{pa 177 699}\special{pa 165 659}%
+\special{pa 154 616}\special{pa 142 570}\special{pa 130 521}\special{pa 119 470}%
+\special{pa 107 416}\special{pa 103 394}%
+\special{fp}%
+\special{pa 103 394}\special{pa 100 380}%
+\special{fp}%
+\special{pa 100 380}\special{pa 97 366}%
+\special{fp}%
+\special{pa 97 366}\special{pa 96 360}\special{pa 93 344}%
+\special{fp}%
+\special{pa 93 344}\special{pa 91 337}%
+\special{fp}%
+\special{pa 91 337}\special{pa 86 312}%
+\special{fp}%
+\special{pa 86 312}\special{pa 84 301}%
+\special{fp}%
+\special{pa -78 -327}\special{pa -69 -361}\special{pa -54 -419}\special{pa -39 -475}%
+\special{pa -24 -527}\special{pa -9 -577}\special{pa 5 -625}\special{pa 20 -669}%
+\special{pa 35 -711}\special{pa 50 -751}\special{pa 65 -787}\special{pa 80 -821}%
+\special{pa 95 -852}\special{pa 110 -880}\special{pa 125 -906}\special{pa 140 -929}%
+\special{pa 155 -950}\special{pa 170 -967}\special{pa 185 -982}\special{pa 200 -994}%
+\special{pa 215 -1004}\special{pa 230 -1011}\special{pa 245 -1015}\special{pa 259 -1017}%
+\special{pa 274 -1015}\special{pa 289 -1012}\special{pa 304 -1005}\special{pa 319 -996}%
+\special{pa 334 -984}\special{pa 349 -969}\special{pa 364 -952}\special{pa 379 -932}%
+\special{pa 394 -909}\special{pa 409 -883}\special{pa 424 -855}\special{pa 439 -824}%
+\special{pa 454 -791}\special{pa 469 -755}\special{pa 484 -716}\special{pa 498 -674}%
+\special{pa 513 -630}\special{pa 528 -583}\special{pa 543 -533}\special{pa 558 -480}%
+\special{pa 573 -425}\special{pa 588 -368}\special{pa 603 -307}\special{pa 618 -244}%
+\special{pa 633 -178}\special{pa 648 -109}\special{pa 663 -38}%
+\special{fp}%
+\special{pa -196 289}\special{pa -200 306}\special{pa -211 352}\special{pa -223 395}%
+\special{pa -235 436}\special{pa -246 473}\special{pa -258 508}\special{pa -269 541}%
+\special{pa -281 571}\special{pa -292 598}\special{pa -304 622}\special{pa -316 643}%
+\special{pa -327 662}\special{pa -339 679}\special{pa -350 692}\special{pa -362 703}%
+\special{pa -373 711}\special{pa -385 716}\special{pa -397 719}\special{pa -408 719}%
+\special{pa -420 716}\special{pa -431 711}\special{pa -443 703}\special{pa -454 692}%
+\special{pa -466 679}\special{pa -478 663}\special{pa -489 644}\special{pa -501 622}%
+\special{pa -512 598}\special{pa -524 571}\special{pa -536 542}\special{pa -547 509}%
+\special{pa -559 474}\special{pa -570 437}\special{pa -582 396}\special{pa -593 353}%
+\special{pa -605 307}\special{pa -617 259}\special{pa -628 208}\special{pa -640 154}%
+\special{pa -651 97}\special{pa -663 38}%
+\special{fp}%
+\special{pa 723 -423}\special{pa 593 -347}%
+\special{fp}%
+\special{pa -29 17}\special{pa -127 74}%
+\special{fp}%
+\special{pa -127 74}\special{pa -595 348}%
+\special{fp}%
+\special{pa -595 348}\special{pa -723 423}%
+\special{fp}%
+\special{pa -934 -328}\special{pa -597 -210}%
+\special{fp}%
+\special{pa 18 6}\special{pa 620 218}%
+\special{fp}%
+\special{pa 620 218}\special{pa 934 328}%
+\special{fp}%
+\special{pa 0 1044}\special{pa 0 55}%
+\special{fp}%
+\special{pa 0 -65}\special{pa 0 -607}%
+\special{fp}%
+\special{pa 0 -607}\special{pa 0 -1053}%
+\special{fp}%
+\special{pa -45 -228}\special{pa -31 -263}\special{pa -16 -297}\special{pa -1 -328}%
+\special{pa 14 -356}\special{pa 29 -382}\special{pa 43 -405}\special{pa 58 -425}%
+\special{pa 73 -443}\special{pa 88 -458}\special{pa 103 -470}\special{pa 118 -480}%
+\special{pa 133 -487}\special{pa 148 -491}\special{pa 163 -492}\special{pa 178 -491}%
+\special{pa 193 -487}\special{pa 208 -481}\special{pa 223 -471}\special{pa 238 -459}%
+\special{pa 253 -445}\special{pa 268 -427}\special{pa 283 -407}\special{pa 297 -384}%
+\special{pa 312 -359}\special{pa 327 -331}\special{pa 342 -300}\special{pa 357 -266}%
+\special{pa 372 -230}\special{pa 387 -191}\special{pa 402 -150}\special{pa 417 -105}%
+\special{pa 432 -58}\special{pa 447 -9}\special{pa 462 44}\special{pa 477 99}%
+\special{pa 492 157}\special{pa 507 217}\special{pa 522 280}\special{pa 536 346}%
+\special{pa 551 415}\special{pa 566 486}%
+\special{fp}%
+\special{pa -277 560}\special{pa -262 500}\special{pa -247 442}\special{pa -232 387}%
+\special{pa -217 334}\special{pa -202 284}\special{pa -187 237}\special{pa -172 192}%
+\special{pa -158 150}\special{pa -158 150}\special{pa -147 124}\special{pa -145 117}%
+\special{pa -143 111}\special{pa -142 110}\special{pa -141 106}\special{pa -136 95}%
+\special{fp}%
+\special{pa -13 -116}\special{pa -8 -121}\special{pa 7 -133}\special{pa 22 -143}%
+\special{pa 37 -149}\special{pa 52 -154}\special{pa 67 -155}\special{pa 82 -154}%
+\special{pa 96 -150}\special{pa 111 -143}\special{pa 126 -134}\special{pa 141 -122}%
+\special{pa 156 -107}\special{pa 171 -90}\special{pa 186 -70}\special{pa 201 -47}%
+\special{pa 216 -22}\special{pa 231 6}\special{pa 246 37}\special{pa 261 71}%
+\special{pa 276 107}\special{pa 291 146}\special{pa 306 188}\special{pa 321 232}%
+\special{pa 335 279}\special{pa 350 329}\special{pa 365 381}\special{pa 380 436}%
+\special{pa 395 494}\special{pa 410 554}\special{pa 425 618}\special{pa 440 683}%
+\special{pa 455 752}\special{pa 470 823}%
+\special{fp}%
+\special{pa -373 711}\special{pa -359 650}\special{pa -344 592}\special{pa -329 537}%
+\special{pa -314 484}\special{pa -299 434}\special{pa -284 387}\special{pa -269 342}%
+\special{pa -254 300}\special{pa -239 261}\special{pa -224 224}\special{pa -209 191}%
+\special{pa -194 159}\special{pa -179 131}\special{pa -164 105}\special{pa -149 82}%
+\special{pa -134 62}\special{pa -120 44}\special{pa -105 29}\special{pa -90 17}%
+\special{pa -83 13}\special{pa -78 9}\special{pa -75 7}%
+\special{fp}%
+\special{pa 19 9}\special{pa 30 16}\special{pa 45 28}\special{pa 60 43}%
+\special{pa 75 60}\special{pa 90 80}\special{pa 105 103}\special{pa 120 128}%
+\special{pa 134 156}\special{pa 149 187}\special{pa 164 221}\special{pa 179 257}%
+\special{pa 194 296}\special{pa 209 338}\special{pa 224 382}\special{pa 239 429}%
+\special{pa 254 479}\special{pa 269 531}\special{pa 284 586}\special{pa 299 644}%
+\special{pa 314 704}\special{pa 329 768}\special{pa 344 834}\special{pa 359 902}%
+\special{pa 373 973}%
+\special{fp}%
+\special{pa -470 674}\special{pa -455 613}\special{pa -440 555}\special{pa -425 500}%
+\special{pa -410 447}\special{pa -395 397}\special{pa -380 350}\special{pa -365 305}%
+\special{pa -350 263}\special{pa -335 224}\special{pa -321 187}\special{pa -306 154}%
+\special{pa -291 122}\special{pa -276 94}\special{pa -261 68}\special{pa -246 45}%
+\special{pa -231 25}\special{pa -216 7}\special{pa -201 -8}\special{pa -186 -20}%
+\special{pa -171 -30}\special{pa -156 -37}\special{pa -141 -41}\special{pa -126 -42}%
+\special{pa -111 -41}\special{pa -96 -37}\special{pa -82 -31}\special{pa -67 -21}%
+\special{pa -52 -9}\special{pa -37 5}\special{pa -22 23}\special{pa -18 28}%
+\special{pa -16 30}\special{pa -12 36}\special{pa -9 40}%
+\special{fp}%
+\special{pa 51 146}\special{pa 53 150}\special{pa 68 184}\special{pa 83 220}%
+\special{pa 98 259}\special{pa 113 300}\special{pa 128 345}\special{pa 143 392}%
+\special{pa 158 442}\special{pa 172 494}\special{pa 187 549}\special{pa 202 607}%
+\special{pa 217 667}\special{pa 232 730}\special{pa 247 796}\special{pa 262 865}%
+\special{pa 277 936}%
+\special{fp}%
+\special{pa -566 450}\special{pa -551 389}\special{pa -536 331}\special{pa -522 275}%
+\special{pa -507 223}\special{pa -492 173}\special{pa -477 125}\special{pa -462 81}%
+\special{pa -447 39}\special{pa -432 -0}\special{pa -417 -37}\special{pa -402 -71}%
+\special{pa -387 -102}\special{pa -372 -130}\special{pa -357 -156}\special{pa -342 -179}%
+\special{pa -327 -199}\special{pa -312 -217}\special{pa -297 -232}\special{pa -283 -244}%
+\special{pa -268 -254}\special{pa -253 -261}\special{pa -238 -265}\special{pa -223 -266}%
+\special{pa -208 -265}\special{pa -193 -261}\special{pa -178 -255}\special{pa -163 -246}%
+\special{pa -148 -234}\special{pa -133 -219}\special{pa -118 -201}\special{pa -103 -181}%
+\special{pa -88 -159}\special{pa -73 -133}\special{pa -58 -105}\special{pa -43 -74}%
+\special{pa -29 -41}\special{pa -14 -4}\special{pa 1 35}\special{pa 16 76}%
+\special{pa 31 121}\special{pa 46 168}\special{pa 48 173}\special{pa 50 181}%
+\special{pa 56 200}%
+\special{fp}%
+\special{pa 83 296}\special{pa 91 325}\special{pa 106 383}\special{pa 121 443}%
+\special{pa 136 506}\special{pa 151 572}\special{pa 166 641}\special{pa 180 711}%
+\special{fp}%
+\special{pa 40 -725}\special{pa 29 -652}\special{pa 17 -582}\special{pa 6 -514}%
+\special{pa -6 -450}\special{pa -18 -388}\special{pa -29 -328}\special{pa -41 -272}%
+\special{pa -48 -237}%
+\special{fp}%
+\special{pa -145 117}\special{pa -147 123}\special{pa -148 126}\special{pa -155 142}%
+\special{pa -156 146}\special{pa -162 160}\special{pa -168 173}\special{pa -180 198}%
+\special{pa -191 219}\special{pa -203 238}\special{pa -214 254}\special{pa -226 268}%
+\special{pa -237 279}\special{pa -249 287}\special{pa -261 292}\special{pa -272 295}%
+\special{pa -284 295}\special{pa -295 292}\special{pa -307 287}\special{pa -318 279}%
+\special{pa -330 268}\special{pa -342 255}\special{pa -353 239}\special{pa -365 220}%
+\special{pa -376 198}\special{pa -388 174}\special{pa -399 147}\special{pa -411 118}%
+\special{pa -423 85}\special{pa -434 50}\special{pa -446 13}\special{pa -457 -28}%
+\special{pa -469 -71}\special{pa -480 -117}\special{pa -492 -165}\special{pa -504 -216}%
+\special{pa -515 -270}\special{pa -527 -327}\special{pa -538 -386}%
+\special{fp}%
+\special{pa 165 -962}\special{pa 153 -889}\special{pa 142 -819}\special{pa 130 -751}%
+\special{pa 119 -687}\special{pa 107 -625}\special{pa 95 -565}\special{pa 84 -509}%
+\special{pa 72 -455}\special{pa 61 -403}\special{pa 49 -355}\special{pa 38 -309}%
+\special{pa 26 -266}\special{pa 14 -225}\special{pa 3 -188}\special{pa -9 -153}%
+\special{pa -17 -129}%
+\special{fp}%
+\special{pa -96 25}\special{pa -101 31}\special{pa -108 37}\special{pa -113 42}%
+\special{pa -124 50}\special{pa -136 55}\special{pa -148 58}\special{pa -159 58}%
+\special{pa -171 55}\special{pa -182 50}\special{pa -194 42}\special{pa -206 31}%
+\special{pa -217 18}\special{pa -229 2}\special{pa -240 -17}\special{pa -252 -39}%
+\special{pa -263 -63}\special{pa -275 -90}\special{pa -287 -119}\special{pa -298 -152}%
+\special{pa -310 -187}\special{pa -321 -224}\special{pa -333 -265}\special{pa -344 -308}%
+\special{pa -356 -354}\special{pa -368 -402}\special{pa -379 -453}\special{pa -391 -507}%
+\special{pa -402 -564}\special{pa -414 -623}%
+\special{fp}%
+\special{pa 289 -1012}\special{pa 278 -939}\special{pa 266 -869}\special{pa 255 -801}%
+\special{pa 243 -736}\special{pa 231 -674}\special{pa 220 -615}\special{pa 208 -559}%
+\special{pa 197 -505}\special{pa 185 -453}\special{pa 174 -405}\special{pa 162 -359}%
+\special{pa 150 -316}\special{pa 139 -275}\special{pa 127 -238}\special{pa 116 -202}%
+\special{pa 104 -170}\special{pa 93 -140}\special{pa 81 -113}\special{pa 69 -89}%
+\special{pa 58 -68}\special{pa 46 -49}\special{pa 35 -32}\special{pa 23 -19}%
+\special{pa 14 -10}%
+\special{fp}%
+\special{pa -47 5}\special{pa -54 2}\special{pa -58 0}\special{pa -69 -8}%
+\special{pa -81 -19}\special{pa -93 -32}\special{pa -104 -48}\special{pa -116 -67}%
+\special{pa -127 -89}\special{pa -139 -113}\special{pa -150 -140}\special{pa -162 -169}%
+\special{pa -174 -202}\special{pa -185 -237}\special{pa -197 -274}\special{pa -208 -315}%
+\special{pa -220 -358}\special{pa -231 -404}\special{pa -243 -452}\special{pa -255 -503}%
+\special{pa -266 -557}\special{pa -278 -614}\special{pa -289 -673}%
+\special{fp}%
+\special{pa 414 -874}\special{pa 402 -801}\special{pa 391 -731}\special{pa 379 -664}%
+\special{pa 368 -599}\special{pa 356 -537}\special{pa 344 -478}\special{pa 333 -421}%
+\special{pa 321 -367}\special{pa 310 -316}\special{pa 298 -267}\special{pa 287 -222}%
+\special{pa 275 -178}\special{pa 263 -138}\special{pa 252 -100}\special{pa 240 -65}%
+\special{pa 229 -33}\special{pa 217 -3}\special{pa 206 24}\special{pa 194 48}%
+\special{pa 182 70}\special{pa 171 89}\special{pa 159 105}\special{pa 148 118}%
+\special{pa 136 129}\special{pa 124 137}\special{pa 113 143}\special{pa 101 145}%
+\special{pa 90 145}\special{pa 78 143}\special{pa 67 137}\special{pa 55 129}%
+\special{pa 45 120}%
+\special{fp}%
+\special{pa 4 61}\special{pa 1 57}\special{pa -0 53}\special{pa -3 49}%
+\special{pa -3 49}\special{pa -4 46}\special{pa -9 36}\special{pa -14 25}%
+\special{pa -26 -2}\special{pa -38 -32}\special{pa -49 -64}\special{pa -61 -99}%
+\special{pa -72 -137}\special{pa -84 -177}\special{pa -95 -220}\special{pa -107 -266}%
+\special{pa -119 -315}\special{pa -130 -366}\special{pa -142 -420}\special{pa -153 -476}%
+\special{pa -165 -535}%
+\special{fp}%
+\special{pa 538 -550}\special{pa 527 -477}\special{pa 515 -407}\special{pa 504 -339}%
+\special{pa 492 -275}\special{pa 480 -213}\special{pa 469 -153}\special{pa 457 -97}%
+\special{pa 446 -43}\special{pa 434 8}\special{pa 423 57}\special{pa 411 103}%
+\special{pa 399 146}\special{pa 388 186}\special{pa 376 224}\special{pa 365 259}%
+\special{pa 353 292}\special{pa 342 321}\special{pa 330 348}\special{pa 318 373}%
+\special{pa 307 394}\special{pa 295 413}\special{pa 284 429}\special{pa 272 443}%
+\special{pa 261 454}\special{pa 249 462}\special{pa 237 467}\special{pa 226 470}%
+\special{pa 214 470}\special{pa 203 467}\special{pa 191 462}\special{pa 180 454}%
+\special{pa 168 443}\special{pa 156 430}\special{pa 145 414}\special{pa 133 395}%
+\special{pa 122 373}\special{pa 110 349}\special{pa 99 322}\special{pa 87 292}%
+\special{pa 76 262}%
+\special{fp}%
+\special{pa 55 197}\special{pa 53 191}\special{pa 52 188}\special{pa 52 187}%
+\special{pa 49 176}\special{pa 46 166}\special{pa 44 157}\special{pa 41 147}%
+\special{pa 41 147}\special{pa 40 143}\special{pa 29 104}\special{pa 18 58}%
+\special{pa 6 10}\special{pa -6 -41}\special{pa -17 -95}\special{pa -29 -152}%
+\special{pa -40 -210}%
+\special{fp}%
+\special{pn 8}%
+\special{pa -85 -297}\special{pa -83 -304}\special{fp}\special{pa -78 -324}\special{pa -77 -331}\special{fp}%
+\special{pn 8}%
+\special{pa -84 -304}\special{pa -85 -297}\special{fp}\special{pa -90 -265}\special{pa -91 -257}\special{fp}%
+\special{pa -96 -226}\special{pa -97 -218}\special{fp}\special{pa -103 -186}\special{pa -104 -178}\special{fp}%
+\special{pa -109 -147}\special{pa -111 -139}\special{fp}\special{pa -116 -107}\special{pa -117 -99}\special{fp}%
+\special{pa -123 -68}\special{pa -124 -60}\special{fp}\special{pa -130 -28}\special{pa -131 -21}\special{fp}%
+\special{pa -137 11}\special{pa -139 19}\special{fp}\special{pa -145 50}\special{pa -146 58}\special{fp}%
+\special{pa -152 89}\special{pa -154 97}\special{fp}\special{pa -160 129}\special{pa -162 136}\special{fp}%
+\special{pa -168 168}\special{pa -170 176}\special{fp}\special{pa -177 207}\special{pa -179 215}\special{fp}%
+\special{pa -186 246}\special{pa -187 254}\special{fp}\special{pa -195 285}\special{pa -197 292}\special{fp}%
+\special{pn 8}%
+\special{pn 8}%
+\special{pa 597 -349}\special{pa 590 -345}\special{fp}\special{pa 562 -329}\special{pa 555 -325}\special{fp}%
+\special{pa 528 -309}\special{pa 521 -305}\special{fp}\special{pa 493 -289}\special{pa 486 -285}\special{fp}%
+\special{pa 458 -268}\special{pa 452 -264}\special{fp}\special{pa 424 -248}\special{pa 417 -244}\special{fp}%
+\special{pa 389 -228}\special{pa 382 -224}\special{fp}\special{pa 355 -208}\special{pa 348 -204}\special{fp}%
+\special{pa 320 -187}\special{pa 313 -183}\special{fp}\special{pa 286 -167}\special{pa 279 -163}\special{fp}%
+\special{pa 251 -147}\special{pa 244 -143}\special{fp}\special{pa 217 -127}\special{pa 210 -123}\special{fp}%
+\special{pa 182 -107}\special{pa 175 -103}\special{fp}\special{pa 148 -86}\special{pa 141 -82}\special{fp}%
+\special{pa 113 -66}\special{pa 106 -62}\special{fp}\special{pa 79 -46}\special{pa 72 -42}\special{fp}%
+\special{pa 44 -26}\special{pa 37 -22}\special{fp}\special{pa 9 -6}\special{pa 3 -2}\special{fp}%
+\special{pa -25 15}\special{pa -32 19}\special{fp}\special{pn 8}%
+\special{pa -601 -211}\special{pa -593 -208}\special{fp}\special{pa -564 -198}\special{pa -557 -196}\special{fp}%
+\special{pa -528 -186}\special{pa -521 -183}\special{fp}\special{pa -492 -173}\special{pa -485 -170}\special{fp}%
+\special{pa -456 -160}\special{pa -448 -157}\special{fp}\special{pa -420 -147}\special{pa -412 -145}\special{fp}%
+\special{pa -384 -135}\special{pa -376 -132}\special{fp}\special{pa -347 -122}\special{pa -340 -119}\special{fp}%
+\special{pa -311 -109}\special{pa -304 -107}\special{fp}\special{pa -275 -97}\special{pa -267 -94}\special{fp}%
+\special{pa -239 -84}\special{pa -231 -81}\special{fp}\special{pa -203 -71}\special{pa -195 -69}\special{fp}%
+\special{pa -166 -58}\special{pa -159 -56}\special{fp}\special{pa -130 -46}\special{pa -123 -43}\special{fp}%
+\special{pa -94 -33}\special{pa -87 -30}\special{fp}\special{pa -58 -20}\special{pa -50 -18}\special{fp}%
+\special{pa -22 -8}\special{pa -14 -5}\special{fp}\special{pa 14 5}\special{pa 22 8}\special{fp}%
+\special{pn 8}%
+\special{pa 0 59}\special{pa 0 51}\special{fp}\special{pa 0 19}\special{pa 0 11}\special{fp}%
+\special{pa 0 -21}\special{pa 0 -29}\special{fp}\special{pa 0 -61}\special{pa 0 -69}\special{fp}%
+\special{pn 8}%
+\special{pn 8}%
+\special{pa -182 228}\special{pa -180 220}\special{fp}\special{pa -172 189}\special{pa -170 182}\special{fp}%
+\special{pa -163 151}\special{pa -161 144}\special{fp}\special{pa -153 113}\special{pa -151 106}\special{fp}%
+\special{pa -143 75}\special{pa -141 68}\special{fp}\special{pa -132 37}\special{pa -130 30}\special{fp}%
+\special{pa -122 0}\special{pa -119 -8}\special{fp}\special{pa -110 -38}\special{pa -108 -46}\special{fp}%
+\special{pa -99 -76}\special{pa -96 -83}\special{fp}\special{pa -87 -113}\special{pa -84 -121}\special{fp}%
+\special{pa -74 -150}\special{pa -71 -158}\special{fp}\special{pa -61 -187}\special{pa -58 -195}\special{fp}%
+\special{pa -47 -224}\special{pa -44 -232}\special{fp}\special{pn 8}%
+\special{pn 8}%
+\special{pa -137 98}\special{pa -134 91}\special{fp}\special{pa -122 61}\special{pa -118 53}\special{fp}%
+\special{pa -105 24}\special{pa -101 16}\special{fp}\special{pa -86 -13}\special{pa -82 -20}\special{fp}%
+\special{pa -66 -48}\special{pa -61 -55}\special{fp}\special{pa -43 -82}\special{pa -38 -88}\special{fp}%
+\special{pa -16 -113}\special{pa -11 -119}\special{fp}\special{pn 8}%
+\special{pn 8}%
+\special{pa -79 8}\special{pa -71 6}\special{fp}\special{pa -32 -5}\special{pa -24 -5}\special{fp}%
+\special{pa 15 8}\special{pa 23 10}\special{fp}\special{pn 8}%
+\special{pn 8}%
+\special{pa -11 36}\special{pa -7 43}\special{fp}\special{pa 11 70}\special{pa 15 77}\special{fp}%
+\special{pa 31 106}\special{pa 35 113}\special{fp}\special{pa 49 142}\special{pa 53 149}\special{fp}%
+\special{pn 8}%
+\special{pn 8}%
+\special{pa 55 196}\special{pa 57 204}\special{fp}\special{pa 64 228}\special{pa 66 236}\special{fp}%
+\special{pa 73 260}\special{pa 76 268}\special{fp}\special{pa 82 293}\special{pa 84 300}\special{fp}%
+\special{pn 8}%
+\special{pn 8}%
+\special{pa -47 -241}\special{pa -49 -233}\special{fp}\special{pa -56 -201}\special{pa -58 -193}\special{fp}%
+\special{pa -65 -161}\special{pa -67 -153}\special{fp}\special{pa -75 -121}\special{pa -76 -114}\special{fp}%
+\special{pa -84 -82}\special{pa -86 -74}\special{fp}\special{pa -95 -43}\special{pa -97 -35}\special{fp}%
+\special{pa -106 -3}\special{pa -108 4}\special{fp}\special{pa -118 36}\special{pa -120 43}\special{fp}%
+\special{pa -130 75}\special{pa -133 82}\special{fp}\special{pa -143 113}\special{pa -146 120}\special{fp}%
+\special{pn 8}%
+\special{pn 8}%
+\special{pa -16 -133}\special{pa -19 -126}\special{fp}\special{pa -31 -92}\special{pa -34 -85}\special{fp}%
+\special{pa -49 -52}\special{pa -52 -45}\special{fp}\special{pa -69 -14}\special{pa -73 -7}\special{fp}%
+\special{pa -94 22}\special{pa -99 28}\special{fp}\special{pn 8}%
+\special{pn 8}%
+\special{pa 17 -12}\special{pa 11 -8}\special{fp}\special{pa -10 5}\special{pa -18 7}\special{fp}%
+\special{pa -42 6}\special{pa -50 5}\special{fp}\special{pn 8}%
+\special{pn 8}%
+\special{pa 48 123}\special{pa 43 117}\special{fp}\special{pa 25 95}\special{pa 20 89}\special{fp}%
+\special{pa 6 64}\special{pa 2 57}\special{fp}\special{pn 8}%
+\special{pn 8}%
+\special{pa 77 266}\special{pa 75 258}\special{fp}\special{pa 67 234}\special{pa 64 226}\special{fp}%
+\special{pa 56 201}\special{pa 54 193}\special{fp}\special{pn 8}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/scaledata.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/scaledata.tex
new file mode 100644
index 0000000000..d86235969d
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/scaledata.tex
@@ -0,0 +1,126 @@
+%%% test.tex 2014-11-1 19:5
+%%% test.sce 2014-11-1 19:5
+{\unitlength=6mm%
+\begin{picture}%
+( 15.00000, 8.00000)( -2.00000, -2.00000)%
+\special{pn 8}%
+%
+\special{pn 16}%
+\special{pa 2598 -709}\special{pa 2593 -768}\special{pa 2576 -826}\special{pa 2549 -883}%
+\special{pa 2511 -936}\special{pa 2463 -986}\special{pa 2406 -1032}\special{pa 2341 -1073}%
+\special{pa 2269 -1108}\special{pa 2191 -1136}\special{pa 2109 -1158}\special{pa 2023 -1173}%
+\special{pa 1934 -1180}\special{pa 1845 -1180}\special{pa 1757 -1173}\special{pa 1671 -1158}%
+\special{pa 1588 -1136}\special{pa 1510 -1108}\special{pa 1438 -1073}\special{pa 1373 -1032}%
+\special{pa 1316 -986}\special{pa 1269 -936}\special{pa 1231 -883}\special{pa 1203 -826}%
+\special{pa 1187 -768}\special{pa 1181 -709}\special{pa 1187 -649}\special{pa 1203 -591}%
+\special{pa 1231 -535}\special{pa 1269 -481}\special{pa 1316 -431}\special{pa 1373 -385}%
+\special{pa 1438 -345}\special{pa 1510 -310}\special{pa 1588 -281}\special{pa 1671 -259}%
+\special{pa 1757 -245}\special{pa 1845 -237}\special{pa 1934 -237}\special{pa 2023 -245}%
+\special{pa 2109 -259}\special{pa 2191 -281}\special{pa 2269 -310}\special{pa 2341 -345}%
+\special{pa 2406 -385}\special{pa 2463 -431}\special{pa 2511 -481}\special{pa 2549 -535}%
+\special{pa 2576 -591}\special{pa 2593 -649}\special{pa 2598 -709}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 2126 236}\special{pa 2120 266}\special{pa 2116 273}\special{fp}\special{pa 2094 304}\special{pa 2076 323}\special{pa 2066 330}\special{fp}%
+\special{pa 2034 352}\special{pa 2000 370}\special{fp}\special{pa 1965 385}\special{pa 1934 398}\special{pa 1929 399}\special{fp}%
+\special{pa 1893 411}\special{pa 1869 418}\special{pa 1856 421}\special{fp}\special{pa 1818 431}\special{pa 1797 436}\special{pa 1781 439}\special{fp}%
+\special{pa 1743 446}\special{pa 1719 450}\special{pa 1705 452}\special{fp}\special{pa 1667 457}\special{pa 1636 461}\special{pa 1629 462}\special{fp}%
+\special{pa 1590 465}\special{pa 1552 468}\special{fp}\special{pa 1513 470}\special{pa 1475 471}\special{fp}%
+\special{pa 1437 472}\special{pa 1398 472}\special{fp}\special{pa 1360 471}\special{pa 1321 470}\special{fp}%
+\special{pa 1283 468}\special{pa 1244 465}\special{fp}\special{pa 1206 462}\special{pa 1198 461}\special{pa 1168 457}\special{fp}%
+\special{pa 1130 452}\special{pa 1116 450}\special{pa 1092 446}\special{fp}\special{pa 1054 439}\special{pa 1038 436}\special{pa 1016 431}\special{fp}%
+\special{pa 979 421}\special{pa 966 418}\special{pa 942 411}\special{fp}\special{pa 905 399}\special{pa 901 398}\special{pa 869 385}\special{fp}%
+\special{pa 834 370}\special{pa 800 352}\special{fp}\special{pa 768 330}\special{pa 758 323}\special{pa 740 304}\special{fp}%
+\special{pa 718 273}\special{pa 714 266}\special{pa 709 236}\special{pa 709 236}\special{fp}%
+\special{pa 718 199}\special{pa 731 177}\special{pa 740 168}\special{fp}\special{pa 768 142}\special{pa 796 122}\special{pa 800 120}\special{fp}%
+\special{pa 834 102}\special{pa 844 97}\special{pa 869 87}\special{fp}\special{pa 905 73}\special{pa 942 62}\special{fp}%
+\special{pa 979 51}\special{pa 1016 42}\special{fp}\special{pa 1054 34}\special{pa 1092 27}\special{fp}%
+\special{pa 1130 21}\special{pa 1168 16}\special{fp}\special{pa 1206 11}\special{pa 1244 8}\special{fp}%
+\special{pa 1283 4}\special{pa 1285 4}\special{pa 1321 3}\special{fp}\special{pa 1360 1}\special{pa 1373 0}\special{pa 1398 0}\special{fp}%
+\special{pa 1437 0}\special{pa 1462 0}\special{pa 1475 1}\special{fp}\special{pa 1513 3}\special{pa 1550 4}\special{pa 1552 4}\special{fp}%
+\special{pa 1590 8}\special{pa 1629 11}\special{fp}\special{pa 1667 16}\special{pa 1705 21}\special{fp}%
+\special{pa 1743 27}\special{pa 1781 34}\special{fp}\special{pa 1818 42}\special{pa 1856 51}\special{fp}%
+\special{pa 1893 62}\special{pa 1929 73}\special{fp}\special{pa 1965 87}\special{pa 1991 97}\special{pa 2000 102}\special{fp}%
+\special{pa 2034 120}\special{pa 2038 122}\special{pa 2066 142}\special{fp}\special{pa 2094 168}\special{pa 2104 177}\special{pa 2116 199}\special{fp}%
+%
+%
+\settowidth{\Width}{A}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{A}\settodepth{\Depth}{A}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.0500,1.0000){\hspace*{\Width}\raisebox{\Height}{A}}%
+%
+%
+\settowidth{\Width}{B}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{B}\settodepth{\Depth}{B}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(0.8500,1.0000){\hspace*{\Width}\raisebox{\Height}{B}}%
+%
+%
+\settowidth{\Width}{C}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{C}\settodepth{\Depth}{C}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-0.9500,-1.0000){\hspace*{\Width}\raisebox{\Height}{C}}%
+%
+%
+\settowidth{\Width}{D}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{D}\settodepth{\Depth}{D}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(3.0500,-1.0000){\hspace*{\Width}\raisebox{\Height}{D}}%
+%
+%
+\special{pn 8}%
+\special{pa 0 0}\special{pa 709 236}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 630 236}\special{pa 709 236}\special{pa 645 189}\special{pa 638 213}\special{pa 630 236}%
+\special{sh 1}\special{ip}%
+\special{pn 8}%
+\special{pa 630 236}\special{pa 709 236}\special{pa 645 189}\special{pa 638 213}\special{pa 630 236}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 481 -245}\special{pa 474 -248}\special{pa 467 -247}\special{pa 462 -242}%
+\special{pa 461 -234}\special{pa 464 -228}\special{pa 471 -225}\special{pa 478 -226}%
+\special{pa 483 -231}\special{pa 484 -238}\special{pa 481 -245}\special{sh 1}\special{fp}%
+\special{pa 709 -236}\special{pa 707 -266}\special{pa 701 -295}\special{pa 692 -323}%
+\special{pa 679 -350}\special{pa 664 -375}\special{pa 645 -398}\special{pa 623 -418}%
+\special{pa 599 -436}\special{pa 573 -450}\special{pa 545 -461}\special{pa 517 -468}%
+\special{pa 487 -472}\special{pa 458 -472}\special{pa 428 -468}\special{pa 399 -461}%
+\special{pa 372 -450}\special{pa 346 -436}\special{pa 322 -418}\special{pa 300 -398}%
+\special{pa 281 -375}\special{pa 265 -350}\special{pa 253 -323}\special{pa 244 -295}%
+\special{pa 238 -266}\special{pa 236 -236}\special{pa 238 -207}\special{pa 244 -177}%
+\special{pa 253 -149}\special{pa 265 -122}\special{pa 281 -97}\special{pa 300 -75}%
+\special{pa 322 -54}\special{pa 346 -37}\special{pa 372 -22}\special{pa 399 -12}\special{pa 428 -4}%
+\special{pa 458 0}\special{pa 487 0}\special{pa 517 -4}\special{pa 545 -12}\special{pa 573 -22}%
+\special{pa 599 -37}\special{pa 623 -54}\special{pa 645 -75}\special{pa 664 -97}\special{pa 679 -122}%
+\special{pa 692 -149}\special{pa 701 -177}\special{pa 707 -207}\special{pa 709 -236}%
+\special{fp}%
+\special{pa 2126 -472}\special{pa 2120 -532}\special{pa 2104 -590}\special{pa 2076 -646}%
+\special{pa 2038 -700}\special{pa 1991 -750}\special{pa 1934 -796}\special{pa 1869 -836}%
+\special{pa 1797 -871}\special{pa 1719 -900}\special{pa 1636 -922}\special{pa 1550 -937}%
+\special{pa 1462 -944}\special{pa 1373 -944}\special{pa 1285 -937}\special{pa 1198 -922}%
+\special{pa 1116 -900}\special{pa 1038 -871}\special{pa 966 -836}\special{pa 901 -796}%
+\special{pa 844 -750}\special{pa 796 -700}\special{pa 758 -646}\special{pa 731 -590}%
+\special{pa 714 -532}\special{pa 709 -472}\special{pa 714 -413}\special{pa 731 -355}%
+\special{pa 758 -299}\special{pa 796 -245}\special{pa 844 -195}\special{pa 901 -149}%
+\special{pa 966 -108}\special{pa 1038 -74}\special{pa 1116 -45}\special{pa 1198 -23}%
+\special{pa 1285 -8}\special{pa 1373 -1}\special{pa 1462 -1}\special{pa 1550 -8}\special{pa 1636 -23}%
+\special{pa 1719 -45}\special{pa 1797 -74}\special{pa 1869 -108}\special{pa 1934 -149}%
+\special{pa 1991 -195}\special{pa 2038 -245}\special{pa 2076 -299}\special{pa 2104 -355}%
+\special{pa 2120 -413}\special{pa 2126 -472}%
+\special{fp}%
+\special{pa -472 0}\special{pa 3071 0}%
+\special{fp}%
+\special{pa 0 472}\special{pa 0 -1417}%
+\special{fp}%
+\settowidth{\Width}{$x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(13.0500,0.0000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{\Depth}%
+\put(0.0000,6.0500){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+%
+\settowidth{\Width}{O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(-0.0500,-0.0500){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/scaledata3d.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/scaledata3d.tex
new file mode 100644
index 0000000000..928409cceb
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/scaledata3d.tex
@@ -0,0 +1,113 @@
+%%% /Users/Hannya/Desktop/KeTCindy/fig/scaledata3d.tex
+%%% Generator=3Dbasic.cdy
+{\unitlength=6mm%
+\begin{picture}%
+(10.27,6.03)(-5.78,-1.36)%
+\special{pn 8}%
+%
+{%
+\color[rgb]{0,0,0}%
+}%
+{%
+\color[rgb]{0,0,0}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{$x$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-3.1500000,-0.8300000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.4300000,-0.5600000){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{$z$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$z$}\settodepth{\Depth}{$z$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(0.0000000,4.2500000){\hspace*{\Width}\raisebox{\Height}{$z$}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 672 -178}\special{pa -672 178}%
+\special{fp}%
+\special{pa -971 -123}\special{pa 971 123}%
+\special{fp}%
+\special{pa 0 321}\special{pa 0 -929}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa -388 -49}\special{pa -657 22}\special{pa -523 -478}\special{pa -388 -49}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa -75 -137}\special{pa -62 -135}\special{pa -49 -134}\special{pa -36 -133}%
+\special{pa -22 -132}\special{pa -8 -131}\special{pa 6 -130}\special{pa 21 -130}%
+\special{pa 36 -129}\special{pa 50 -129}\special{pa 65 -129}\special{pa 80 -129}%
+\special{pa 95 -129}\special{pa 109 -130}\special{pa 124 -131}\special{pa 138 -131}%
+\special{pa 152 -132}\special{pa 165 -133}\special{pa 178 -135}\special{pa 191 -136}%
+\special{pa 203 -138}\special{pa 215 -139}\special{pa 225 -141}\special{pa 236 -143}%
+\special{pa 245 -145}\special{pa 254 -148}\special{pa 262 -150}\special{pa 269 -152}%
+\special{pa 276 -155}\special{pa 281 -157}\special{pa 286 -160}\special{pa 290 -162}%
+\special{pa 293 -165}\special{pa 295 -168}\special{pa 296 -170}\special{pa 296 -173}%
+\special{pa 295 -176}\special{pa 293 -179}\special{pa 291 -181}\special{pa 287 -184}%
+\special{pa 283 -186}\special{pa 277 -189}\special{pa 271 -191}\special{pa 264 -194}%
+\special{pa 256 -196}\special{pa 248 -198}\special{pa 238 -200}\special{pa 228 -202}%
+\special{pa 218 -204}\special{pa 206 -206}\special{pa 194 -208}\special{pa 182 -209}%
+\special{pa 169 -210}\special{pa 155 -212}\special{pa 142 -213}\special{pa 128 -214}%
+\special{pa 113 -214}\special{pa 99 -215}\special{pa 84 -215}\special{pa 69 -215}%
+\special{pa 54 -215}\special{pa 40 -215}\special{pa 25 -215}\special{pa 10 -214}%
+\special{pa -4 -214}\special{pa -18 -213}\special{pa -32 -212}\special{pa -46 -211}%
+\special{pa -59 -210}\special{pa -71 -208}\special{pa -83 -206}\special{pa -95 -205}%
+\special{pa -106 -203}\special{pa -116 -201}\special{pa -126 -199}\special{pa -134 -197}%
+\special{pa -142 -194}\special{pa -150 -192}\special{pa -156 -190}\special{pa -162 -187}%
+\special{pa -166 -185}\special{pa -170 -182}\special{pa -173 -179}\special{pa -175 -177}%
+\special{pa -176 -174}\special{pa -176 -171}\special{pa -176 -168}\special{pa -174 -166}%
+\special{pa -171 -163}\special{pa -168 -160}\special{pa -163 -158}\special{pa -158 -155}%
+\special{pa -152 -153}\special{pa -145 -150}\special{pa -137 -148}\special{pa -128 -146}%
+\special{pa -119 -144}\special{pa -109 -142}\special{pa -98 -140}\special{pa -87 -138}%
+\special{pa -75 -137}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pn 16}%
+\special{pa -777 -98}\special{pa -1315 44}\special{pa -1046 -956}\special{pa -777 -98}%
+\special{fp}%
+\special{pa -149 -273}\special{pa -124 -270}\special{pa -98 -268}\special{pa -72 -265}%
+\special{pa -44 -263}\special{pa -16 -262}\special{pa 13 -260}\special{pa 42 -259}%
+\special{pa 71 -258}\special{pa 101 -258}\special{pa 130 -258}\special{pa 160 -258}%
+\special{pa 190 -259}\special{pa 219 -260}\special{pa 248 -261}\special{pa 276 -263}%
+\special{pa 304 -265}\special{pa 331 -267}\special{pa 357 -270}\special{pa 382 -272}%
+\special{pa 406 -276}\special{pa 429 -279}\special{pa 451 -283}\special{pa 471 -287}%
+\special{pa 490 -291}\special{pa 508 -295}\special{pa 524 -300}\special{pa 539 -304}%
+\special{pa 552 -309}\special{pa 563 -314}\special{pa 572 -319}\special{pa 580 -325}%
+\special{pa 586 -330}\special{pa 590 -335}\special{pa 592 -341}\special{pa 592 -346}%
+\special{pa 590 -352}\special{pa 587 -357}\special{pa 582 -362}\special{pa 574 -368}%
+\special{pa 565 -373}\special{pa 555 -378}\special{pa 542 -383}\special{pa 528 -388}%
+\special{pa 513 -392}\special{pa 495 -397}\special{pa 477 -401}\special{pa 457 -405}%
+\special{pa 435 -409}\special{pa 412 -412}\special{pa 388 -415}\special{pa 364 -418}%
+\special{pa 338 -421}\special{pa 311 -423}\special{pa 283 -425}\special{pa 255 -427}%
+\special{pa 227 -428}\special{pa 197 -429}\special{pa 168 -430}\special{pa 138 -431}%
+\special{pa 109 -431}\special{pa 79 -430}\special{pa 50 -430}\special{pa 20 -429}%
+\special{pa -8 -427}\special{pa -37 -426}\special{pa -64 -424}\special{pa -91 -422}%
+\special{pa -117 -419}\special{pa -143 -416}\special{pa -167 -413}\special{pa -190 -410}%
+\special{pa -212 -406}\special{pa -232 -402}\special{pa -251 -398}\special{pa -269 -393}%
+\special{pa -285 -389}\special{pa -299 -384}\special{pa -312 -379}\special{pa -324 -374}%
+\special{pa -333 -369}\special{pa -341 -364}\special{pa -346 -359}\special{pa -350 -353}%
+\special{pa -352 -348}\special{pa -353 -342}\special{pa -351 -337}\special{pa -348 -331}%
+\special{pa -342 -326}\special{pa -335 -321}\special{pa -326 -316}\special{pa -316 -311}%
+\special{pa -303 -306}\special{pa -289 -301}\special{pa -273 -296}\special{pa -256 -292}%
+\special{pa -237 -288}\special{pa -217 -284}\special{pa -196 -280}\special{pa -173 -276}%
+\special{pa -149 -273}%
+\special{fp}%
+\special{pn 8}%
+}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/scalepoint.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/scalepoint.tex
new file mode 100644
index 0000000000..371adc9de9
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/scalepoint.tex
@@ -0,0 +1,95 @@
+%%% /Users/Hannya/Desktop/KeTCindy/fig/scalepoint.tex
+%%% Generator=template1basic.cdy
+{\unitlength=6mm%
+\begin{picture}%
+(14,7.42)(-0.73,-1.66)%
+\special{pn 8}%
+%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -0}\special{pa 922 -230}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 878 -194}\special{pa 945 -236}\special{pa 866 -242}\special{pa 872 -218}%
+\special{pa 878 -194}\special{sh 1}\special{ip}%
+\special{pn 1}%
+\special{pa 878 -194}\special{pa 945 -236}\special{pa 866 -242}\special{pa 872 -218}%
+\special{pa 878 -194}\special{pa 945 -236}%
+\special{fp}%
+\special{pn 8}%
+}%
+\special{pn 2}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 720 -484}\special{pa 709 -488}\special{pa 698 -484}\special{pa 693 -472}\special{pa 698 -461}\special{pa 709 -457}\special{pa 720 -461}\special{pa 724 -472}\special{pa 720 -484}\special{sh 1}\special{fp}%
+\special{pa 484 225}\special{pa 472 220}\special{pa 461 225}\special{pa 457 236}\special{pa 461 247}\special{pa 472 252}\special{pa 484 247}\special{pa 488 236}\special{pa 484 225}\special{sh 1}\special{fp}%
+\special{pa 956 -247}\special{pa 945 -252}\special{pa 934 -247}\special{pa 929 -236}\special{pa 934 -225}\special{pa 945 -220}\special{pa 956 -225}\special{pa 961 -236}\special{pa 956 -247}\special{sh 1}\special{fp}%
+\special{pa 2137 -956}\special{pa 2126 -961}\special{pa 2115 -956}\special{pa 2110 -945}\special{pa 2115 -934}\special{pa 2126 -929}\special{pa 2137 -934}\special{pa 2142 -945}\special{pa 2137 -956}\special{sh 1}\special{fp}%
+\special{pa 1192 -1192}\special{pa 1181 -1197}\special{pa 1170 -1192}\special{pa 1165 -1181}\special{pa 1170 -1170}\special{pa 1181 -1165}\special{pa 1192 -1170}\special{pa 1197 -1181}\special{pa 1192 -1192}\special{sh 1}\special{fp}%
+\special{pa 2846 -484}\special{pa 2835 -488}\special{pa 2824 -484}\special{pa 2819 -472}\special{pa 2824 -461}\special{pa 2835 -457}\special{pa 2846 -461}\special{pa 2850 -472}\special{pa 2846 -484}\special{sh 1}\special{fp}%
+}%
+\special{pn 8}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{A(3,2)}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{A(3,2)}\settodepth{\Depth}{A(3,2)}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(3.2500000,2.0000000){\hspace*{\Width}\raisebox{\Height}{A(3,2)}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{B(2,-1)}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{B(2,-1)}\settodepth{\Depth}{B(2,-1)}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.2500000,-1.0000000){\hspace*{\Width}\raisebox{\Height}{B(2,-1)}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{C(4,1)}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{C(4,1)}\settodepth{\Depth}{C(4,1)}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.2500000,1.0000000){\hspace*{\Width}\raisebox{\Height}{C(4,1)}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{D(9,4)}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{D(9,4)}\settodepth{\Depth}{D(9,4)}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(9.2500000,4.0000000){\hspace*{\Width}\raisebox{\Height}{D(9,4)}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{E(5,5)}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{E(5,5)}\settodepth{\Depth}{E(5,5)}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(5.2500000,5.0000000){\hspace*{\Width}\raisebox{\Height}{E(5,5)}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{F(12,2)}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{F(12,2)}\settodepth{\Depth}{F(12,2)}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(12.2500000,2.0000000){\hspace*{\Width}\raisebox{\Height}{F(12,2)}}%
+%
+}%
+\special{pa -172 -0}\special{pa 3135 -0}%
+\special{fp}%
+\special{pa 0 392}\special{pa 0 -1361}%
+\special{fp}%
+\settowidth{\Width}{$x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(13.3533333,0.0000000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{\Depth}%
+\put(0.0000000,5.8433333){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+\settowidth{\Width}{O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(-0.0833333,-0.0833333){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/scatter.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/scatter.tex
new file mode 100644
index 0000000000..d02baeea4c
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/scatter.tex
@@ -0,0 +1,154 @@
+%%% /Users/Hannya/Desktop/fig/template1.tex
+%%% Generator=template1.cdy
+{\unitlength=1cm%
+\begin{picture}%
+(7.47,7.59)(-0.47,-0.59)%
+\special{pn 8}%
+%
+\special{pn 4}%
+{%
+\color[rgb]{0,0,1}%
+\special{pa 967 -707}\special{pa 953 -715}\special{pa 937 -715}\special{pa 923 -707}\special{pa 914 -693}\special{pa 914 -677}\special{pa 923 -663}\special{pa 937 -655}\special{pa 953 -655}\special{pa 967 -663}\special{pa 975 -677}\special{pa 975 -693}\special{pa 967 -707}\special{sh 1}\special{fp}%
+\special{pa 1203 -1286}\special{pa 1189 -1294}\special{pa 1173 -1294}\special{pa 1159 -1286}\special{pa 1151 -1272}\special{pa 1151 -1256}\special{pa 1159 -1242}\special{pa 1173 -1233}\special{pa 1189 -1233}\special{pa 1203 -1242}\special{pa 1212 -1256}\special{pa 1212 -1272}\special{pa 1203 -1286}\special{sh 1}\special{fp}%
+\special{pa 1144 -1203}\special{pa 1130 -1212}\special{pa 1114 -1212}\special{pa 1100 -1203}\special{pa 1092 -1189}\special{pa 1092 -1173}\special{pa 1100 -1159}\special{pa 1114 -1151}\special{pa 1130 -1151}\special{pa 1144 -1159}\special{pa 1152 -1173}\special{pa 1152 -1189}\special{pa 1144 -1203}\special{sh 1}\special{fp}%
+\special{pa 1144 -928}\special{pa 1130 -936}\special{pa 1114 -936}\special{pa 1100 -928}\special{pa 1092 -914}\special{pa 1092 -897}\special{pa 1100 -883}\special{pa 1114 -875}\special{pa 1130 -875}\special{pa 1144 -883}\special{pa 1152 -897}\special{pa 1152 -914}\special{pa 1144 -928}\special{sh 1}\special{fp}%
+\special{pa 1085 -751}\special{pa 1071 -759}\special{pa 1055 -759}\special{pa 1041 -751}\special{pa 1033 -736}\special{pa 1033 -720}\special{pa 1041 -706}\special{pa 1055 -698}\special{pa 1071 -698}\special{pa 1085 -706}\special{pa 1093 -720}\special{pa 1093 -736}\special{pa 1085 -751}\special{sh 1}\special{fp}%
+\special{pa 1203 -778}\special{pa 1189 -786}\special{pa 1173 -786}\special{pa 1159 -778}\special{pa 1151 -764}\special{pa 1151 -748}\special{pa 1159 -734}\special{pa 1173 -725}\special{pa 1189 -725}\special{pa 1203 -734}\special{pa 1212 -748}\special{pa 1212 -764}\special{pa 1203 -778}\special{sh 1}\special{fp}%
+\special{pa 1262 -881}\special{pa 1248 -889}\special{pa 1232 -889}\special{pa 1218 -881}\special{pa 1210 -866}\special{pa 1210 -850}\special{pa 1218 -836}\special{pa 1232 -828}\special{pa 1248 -828}\special{pa 1262 -836}\special{pa 1271 -850}\special{pa 1271 -866}\special{pa 1262 -881}\special{sh 1}\special{fp}%
+\special{pa 1440 -247}\special{pa 1425 -255}\special{pa 1409 -255}\special{pa 1395 -247}\special{pa 1387 -233}\special{pa 1387 -216}\special{pa 1395 -202}\special{pa 1409 -194}\special{pa 1425 -194}\special{pa 1440 -202}\special{pa 1448 -216}\special{pa 1448 -233}\special{pa 1440 -247}\special{sh 1}\special{fp}%
+\special{pa 1558 -1873}\special{pa 1544 -1881}\special{pa 1527 -1881}\special{pa 1513 -1873}\special{pa 1505 -1859}\special{pa 1505 -1842}\special{pa 1513 -1828}\special{pa 1527 -1820}\special{pa 1544 -1820}\special{pa 1558 -1828}\special{pa 1566 -1842}\special{pa 1566 -1859}\special{pa 1558 -1873}\special{sh 1}\special{fp}%
+\special{pa 1381 -837}\special{pa 1366 -845}\special{pa 1350 -845}\special{pa 1336 -837}\special{pa 1328 -823}\special{pa 1328 -807}\special{pa 1336 -793}\special{pa 1350 -785}\special{pa 1366 -785}\special{pa 1381 -793}\special{pa 1389 -807}\special{pa 1389 -823}\special{pa 1381 -837}\special{sh 1}\special{fp}%
+\special{pa 1558 -944}\special{pa 1544 -952}\special{pa 1527 -952}\special{pa 1513 -944}\special{pa 1505 -929}\special{pa 1505 -913}\special{pa 1513 -899}\special{pa 1527 -891}\special{pa 1544 -891}\special{pa 1558 -899}\special{pa 1566 -913}\special{pa 1566 -929}\special{pa 1558 -944}\special{sh 1}\special{fp}%
+\special{pa 1794 -1861}\special{pa 1780 -1869}\special{pa 1764 -1869}\special{pa 1749 -1861}\special{pa 1741 -1847}\special{pa 1741 -1830}\special{pa 1749 -1816}\special{pa 1764 -1808}\special{pa 1780 -1808}\special{pa 1794 -1816}\special{pa 1802 -1830}\special{pa 1802 -1847}\special{pa 1794 -1861}\special{sh 1}\special{fp}%
+\special{pa 1499 -1400}\special{pa 1485 -1408}\special{pa 1468 -1408}\special{pa 1454 -1400}\special{pa 1446 -1386}\special{pa 1446 -1370}\special{pa 1454 -1356}\special{pa 1468 -1348}\special{pa 1485 -1348}\special{pa 1499 -1356}\special{pa 1507 -1370}\special{pa 1507 -1386}\special{pa 1499 -1400}\special{sh 1}\special{fp}%
+\special{pa 1381 -1487}\special{pa 1366 -1495}\special{pa 1350 -1495}\special{pa 1336 -1487}\special{pa 1328 -1473}\special{pa 1328 -1456}\special{pa 1336 -1442}\special{pa 1350 -1434}\special{pa 1366 -1434}\special{pa 1381 -1442}\special{pa 1389 -1456}\special{pa 1389 -1473}\special{pa 1381 -1487}\special{sh 1}\special{fp}%
+\special{pa 1262 -1845}\special{pa 1248 -1853}\special{pa 1232 -1853}\special{pa 1218 -1845}\special{pa 1210 -1831}\special{pa 1210 -1815}\special{pa 1218 -1801}\special{pa 1232 -1792}\special{pa 1248 -1792}\special{pa 1262 -1801}\special{pa 1271 -1815}\special{pa 1271 -1831}\special{pa 1262 -1845}\special{sh 1}\special{fp}%
+\special{pa 790 -841}\special{pa 776 -849}\special{pa 760 -849}\special{pa 745 -841}\special{pa 737 -827}\special{pa 737 -811}\special{pa 745 -797}\special{pa 760 -788}\special{pa 776 -788}\special{pa 790 -797}\special{pa 798 -811}\special{pa 798 -827}\special{pa 790 -841}\special{sh 1}\special{fp}%
+\special{pa 849 -664}\special{pa 835 -672}\special{pa 819 -672}\special{pa 805 -664}\special{pa 796 -650}\special{pa 796 -634}\special{pa 805 -619}\special{pa 819 -611}\special{pa 835 -611}\special{pa 849 -619}\special{pa 857 -634}\special{pa 857 -650}\special{pa 849 -664}\special{sh 1}\special{fp}%
+\special{pa 1203 -873}\special{pa 1189 -881}\special{pa 1173 -881}\special{pa 1159 -873}\special{pa 1151 -859}\special{pa 1151 -842}\special{pa 1159 -828}\special{pa 1173 -820}\special{pa 1189 -820}\special{pa 1203 -828}\special{pa 1212 -842}\special{pa 1212 -859}\special{pa 1203 -873}\special{sh 1}\special{fp}%
+\special{pa 1262 -1255}\special{pa 1248 -1263}\special{pa 1232 -1263}\special{pa 1218 -1255}\special{pa 1210 -1240}\special{pa 1210 -1224}\special{pa 1218 -1210}\special{pa 1232 -1202}\special{pa 1248 -1202}\special{pa 1262 -1210}\special{pa 1271 -1224}\special{pa 1271 -1240}\special{pa 1262 -1255}\special{sh 1}\special{fp}%
+\special{pa 1381 -2007}\special{pa 1366 -2015}\special{pa 1350 -2015}\special{pa 1336 -2007}\special{pa 1328 -1992}\special{pa 1328 -1976}\special{pa 1336 -1962}\special{pa 1350 -1954}\special{pa 1366 -1954}\special{pa 1381 -1962}\special{pa 1389 -1976}\special{pa 1389 -1992}\special{pa 1381 -2007}\special{sh 1}\special{fp}%
+\special{pa 908 -321}\special{pa 894 -330}\special{pa 878 -330}\special{pa 864 -321}\special{pa 855 -307}\special{pa 855 -291}\special{pa 864 -277}\special{pa 878 -269}\special{pa 894 -269}\special{pa 908 -277}\special{pa 916 -291}\special{pa 916 -307}\special{pa 908 -321}\special{sh 1}\special{fp}%
+\special{pa 908 -936}\special{pa 894 -944}\special{pa 878 -944}\special{pa 864 -936}\special{pa 855 -922}\special{pa 855 -905}\special{pa 864 -891}\special{pa 878 -883}\special{pa 894 -883}\special{pa 908 -891}\special{pa 916 -905}\special{pa 916 -922}\special{pa 908 -936}\special{sh 1}\special{fp}%
+\special{pa 1735 -1278}\special{pa 1721 -1286}\special{pa 1704 -1286}\special{pa 1690 -1278}\special{pa 1682 -1264}\special{pa 1682 -1248}\special{pa 1690 -1234}\special{pa 1704 -1225}\special{pa 1721 -1225}\special{pa 1735 -1234}\special{pa 1743 -1248}\special{pa 1743 -1264}\special{pa 1735 -1278}\special{sh 1}\special{fp}%
+\special{pa 1026 -613}\special{pa 1012 -621}\special{pa 996 -621}\special{pa 982 -613}\special{pa 974 -599}\special{pa 974 -582}\special{pa 982 -568}\special{pa 996 -560}\special{pa 1012 -560}\special{pa 1026 -568}\special{pa 1034 -582}\special{pa 1034 -599}\special{pa 1026 -613}\special{sh 1}\special{fp}%
+\special{pa 908 -337}\special{pa 894 -345}\special{pa 878 -345}\special{pa 864 -337}\special{pa 855 -323}\special{pa 855 -307}\special{pa 864 -293}\special{pa 878 -285}\special{pa 894 -285}\special{pa 908 -293}\special{pa 916 -307}\special{pa 916 -323}\special{pa 908 -337}\special{sh 1}\special{fp}%
+\special{pa 1203 -1227}\special{pa 1189 -1235}\special{pa 1173 -1235}\special{pa 1159 -1227}\special{pa 1151 -1213}\special{pa 1151 -1197}\special{pa 1159 -1182}\special{pa 1173 -1174}\special{pa 1189 -1174}\special{pa 1203 -1182}\special{pa 1212 -1197}\special{pa 1212 -1213}\special{pa 1203 -1227}\special{sh 1}\special{fp}%
+\special{pa 1203 -818}\special{pa 1189 -826}\special{pa 1173 -826}\special{pa 1159 -818}\special{pa 1151 -803}\special{pa 1151 -787}\special{pa 1159 -773}\special{pa 1173 -765}\special{pa 1189 -765}\special{pa 1203 -773}\special{pa 1212 -787}\special{pa 1212 -803}\special{pa 1203 -818}\special{sh 1}\special{fp}%
+\special{pa 967 -664}\special{pa 953 -672}\special{pa 937 -672}\special{pa 923 -664}\special{pa 914 -650}\special{pa 914 -634}\special{pa 923 -619}\special{pa 937 -611}\special{pa 953 -611}\special{pa 967 -619}\special{pa 975 -634}\special{pa 975 -650}\special{pa 967 -664}\special{sh 1}\special{fp}%
+\special{pa 1499 -1381}\special{pa 1485 -1389}\special{pa 1468 -1389}\special{pa 1454 -1381}\special{pa 1446 -1366}\special{pa 1446 -1350}\special{pa 1454 -1336}\special{pa 1468 -1328}\special{pa 1485 -1328}\special{pa 1499 -1336}\special{pa 1507 -1350}\special{pa 1507 -1366}\special{pa 1499 -1381}\special{sh 1}\special{fp}%
+\special{pa 1321 -873}\special{pa 1307 -881}\special{pa 1291 -881}\special{pa 1277 -873}\special{pa 1269 -859}\special{pa 1269 -842}\special{pa 1277 -828}\special{pa 1291 -820}\special{pa 1307 -820}\special{pa 1321 -828}\special{pa 1330 -842}\special{pa 1330 -859}\special{pa 1321 -873}\special{sh 1}\special{fp}%
+\special{pa 908 -625}\special{pa 894 -633}\special{pa 878 -633}\special{pa 864 -625}\special{pa 855 -611}\special{pa 855 -594}\special{pa 864 -580}\special{pa 878 -572}\special{pa 894 -572}\special{pa 908 -580}\special{pa 916 -594}\special{pa 916 -611}\special{pa 908 -625}\special{sh 1}\special{fp}%
+\special{pa 1026 -369}\special{pa 1012 -377}\special{pa 996 -377}\special{pa 982 -369}\special{pa 974 -355}\special{pa 974 -338}\special{pa 982 -324}\special{pa 996 -316}\special{pa 1012 -316}\special{pa 1026 -324}\special{pa 1034 -338}\special{pa 1034 -355}\special{pa 1026 -369}\special{sh 1}\special{fp}%
+\special{pa 1144 -1400}\special{pa 1130 -1408}\special{pa 1114 -1408}\special{pa 1100 -1400}\special{pa 1092 -1386}\special{pa 1092 -1370}\special{pa 1100 -1356}\special{pa 1114 -1348}\special{pa 1130 -1348}\special{pa 1144 -1356}\special{pa 1152 -1370}\special{pa 1152 -1386}\special{pa 1144 -1400}\special{sh 1}\special{fp}%
+\special{pa 1321 -731}\special{pa 1307 -739}\special{pa 1291 -739}\special{pa 1277 -731}\special{pa 1269 -717}\special{pa 1269 -701}\special{pa 1277 -686}\special{pa 1291 -678}\special{pa 1307 -678}\special{pa 1321 -686}\special{pa 1330 -701}\special{pa 1330 -717}\special{pa 1321 -731}\special{sh 1}\special{fp}%
+\special{pa 1085 -790}\special{pa 1071 -798}\special{pa 1055 -798}\special{pa 1041 -790}\special{pa 1033 -776}\special{pa 1033 -760}\special{pa 1041 -745}\special{pa 1055 -737}\special{pa 1071 -737}\special{pa 1085 -745}\special{pa 1093 -760}\special{pa 1093 -776}\special{pa 1085 -790}\special{sh 1}\special{fp}%
+\special{pa 1440 -770}\special{pa 1425 -778}\special{pa 1409 -778}\special{pa 1395 -770}\special{pa 1387 -756}\special{pa 1387 -740}\special{pa 1395 -726}\special{pa 1409 -718}\special{pa 1425 -718}\special{pa 1440 -726}\special{pa 1448 -740}\special{pa 1448 -756}\special{pa 1440 -770}\special{sh 1}\special{fp}%
+\special{pa 1617 -1247}\special{pa 1603 -1255}\special{pa 1586 -1255}\special{pa 1572 -1247}\special{pa 1564 -1233}\special{pa 1564 -1216}\special{pa 1572 -1202}\special{pa 1586 -1194}\special{pa 1603 -1194}\special{pa 1617 -1202}\special{pa 1625 -1216}\special{pa 1625 -1233}\special{pa 1617 -1247}\special{sh 1}\special{fp}%
+\special{pa 1144 -688}\special{pa 1130 -696}\special{pa 1114 -696}\special{pa 1100 -688}\special{pa 1092 -674}\special{pa 1092 -657}\special{pa 1100 -643}\special{pa 1114 -635}\special{pa 1130 -635}\special{pa 1144 -643}\special{pa 1152 -657}\special{pa 1152 -674}\special{pa 1144 -688}\special{sh 1}\special{fp}%
+\special{pa 1203 -1947}\special{pa 1189 -1956}\special{pa 1173 -1956}\special{pa 1159 -1947}\special{pa 1151 -1933}\special{pa 1151 -1917}\special{pa 1159 -1903}\special{pa 1173 -1895}\special{pa 1189 -1895}\special{pa 1203 -1903}\special{pa 1212 -1917}\special{pa 1212 -1933}\special{pa 1203 -1947}\special{sh 1}\special{fp}%
+\special{pa 1144 -1262}\special{pa 1130 -1271}\special{pa 1114 -1271}\special{pa 1100 -1262}\special{pa 1092 -1248}\special{pa 1092 -1232}\special{pa 1100 -1218}\special{pa 1114 -1210}\special{pa 1130 -1210}\special{pa 1144 -1218}\special{pa 1152 -1232}\special{pa 1152 -1248}\special{pa 1144 -1262}\special{sh 1}\special{fp}%
+}%
+\special{pn 8}%
+{%
+\color[rgb]{0,1,0}%
+\special{pa -18 232}\special{pa 2756 -2567}%
+\special{fp}%
+}%
+\settowidth{\Width}{$r=0.535,\ y=1.009x-0.545$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$r=0.535,\ y=1.009x-0.545$}\settodepth{\Depth}{$r=0.535,\ y=1.009x-0.545$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(0.9500000,6.4300000){\hspace*{\Width}\raisebox{\Height}{$r=0.535,\ y=1.009x-0.545$}}%
+%
+\special{pa 0 -2756}\special{pa 0 -0}\special{pa 2756 -0}%
+\special{fp}%
+\settowidth{\Width}{$0$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$0$}\settodepth{\Depth}{$0$}\setlength{\Height}{-\Height}%
+\put(0.0000000,-0.1500000){\hspace*{\Width}\raisebox{\Height}{$0$}}%
+%
+\special{pa 0 -0}\special{pa 0 39}%
+\special{fp}%
+\settowidth{\Width}{$1$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$1$}\settodepth{\Depth}{$1$}\setlength{\Height}{-\Height}%
+\put(1.0000000,-0.1500000){\hspace*{\Width}\raisebox{\Height}{$1$}}%
+%
+\special{pa 394 -0}\special{pa 394 39}%
+\special{fp}%
+\settowidth{\Width}{$2$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$2$}\settodepth{\Depth}{$2$}\setlength{\Height}{-\Height}%
+\put(2.0000000,-0.1500000){\hspace*{\Width}\raisebox{\Height}{$2$}}%
+%
+\special{pa 787 -0}\special{pa 787 39}%
+\special{fp}%
+\settowidth{\Width}{$3$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$3$}\settodepth{\Depth}{$3$}\setlength{\Height}{-\Height}%
+\put(3.0000000,-0.1500000){\hspace*{\Width}\raisebox{\Height}{$3$}}%
+%
+\special{pa 1181 -0}\special{pa 1181 39}%
+\special{fp}%
+\settowidth{\Width}{$4$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$4$}\settodepth{\Depth}{$4$}\setlength{\Height}{-\Height}%
+\put(4.0000000,-0.1500000){\hspace*{\Width}\raisebox{\Height}{$4$}}%
+%
+\special{pa 1575 -0}\special{pa 1575 39}%
+\special{fp}%
+\settowidth{\Width}{$5$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$5$}\settodepth{\Depth}{$5$}\setlength{\Height}{-\Height}%
+\put(5.0000000,-0.1500000){\hspace*{\Width}\raisebox{\Height}{$5$}}%
+%
+\special{pa 1969 -0}\special{pa 1969 39}%
+\special{fp}%
+\settowidth{\Width}{$6$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$6$}\settodepth{\Depth}{$6$}\setlength{\Height}{-\Height}%
+\put(6.0000000,-0.1500000){\hspace*{\Width}\raisebox{\Height}{$6$}}%
+%
+\special{pa 2362 -0}\special{pa 2362 39}%
+\special{fp}%
+\settowidth{\Width}{$7$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$7$}\settodepth{\Depth}{$7$}\setlength{\Height}{-\Height}%
+\put(7.0000000,-0.1500000){\hspace*{\Width}\raisebox{\Height}{$7$}}%
+%
+\special{pa 2756 -0}\special{pa 2756 39}%
+\special{fp}%
+\settowidth{\Width}{$1$}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{$1$}\settodepth{\Depth}{$1$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-0.1500000,1.0000000){\hspace*{\Width}\raisebox{\Height}{$1$}}%
+%
+\special{pa 0 -394}\special{pa -39 -394}%
+\special{fp}%
+\settowidth{\Width}{$2$}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{$2$}\settodepth{\Depth}{$2$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-0.1500000,2.0000000){\hspace*{\Width}\raisebox{\Height}{$2$}}%
+%
+\special{pa 0 -787}\special{pa -39 -787}%
+\special{fp}%
+\settowidth{\Width}{$3$}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{$3$}\settodepth{\Depth}{$3$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-0.1500000,3.0000000){\hspace*{\Width}\raisebox{\Height}{$3$}}%
+%
+\special{pa 0 -1181}\special{pa -39 -1181}%
+\special{fp}%
+\settowidth{\Width}{$4$}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{$4$}\settodepth{\Depth}{$4$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-0.1500000,4.0000000){\hspace*{\Width}\raisebox{\Height}{$4$}}%
+%
+\special{pa 0 -1575}\special{pa -39 -1575}%
+\special{fp}%
+\settowidth{\Width}{$5$}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{$5$}\settodepth{\Depth}{$5$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-0.1500000,5.0000000){\hspace*{\Width}\raisebox{\Height}{$5$}}%
+%
+\special{pa 0 -1969}\special{pa -39 -1969}%
+\special{fp}%
+\settowidth{\Width}{$6$}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{$6$}\settodepth{\Depth}{$6$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-0.1500000,6.0000000){\hspace*{\Width}\raisebox{\Height}{$6$}}%
+%
+\special{pa 0 -2362}\special{pa -39 -2362}%
+\special{fp}%
+\settowidth{\Width}{$7$}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{$7$}\settodepth{\Depth}{$7$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-0.1500000,7.0000000){\hspace*{\Width}\raisebox{\Height}{$7$}}%
+%
+\special{pa 0 -2756}\special{pa -39 -2756}%
+\special{fp}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/segmark.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/segmark.tex
new file mode 100644
index 0000000000..0ca81c693a
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/segmark.tex
@@ -0,0 +1,52 @@
+%%% fig.tex 2015-8-8 7:41
+%%% fig.sce 2015-8-8 7:37
+{\unitlength=6mm%
+\begin{picture}%
+( 4.84000, 3.93000)( -0.24000, -0.41000)%
+\special{pn 8}%
+%
+\special{pa 236 -709}\special{pa 0 0}\special{pa 945 0}\special{pa 800 -564}\special{pa 236 -709}%
+\special{fp}%
+\special{pa 151 -343}\special{pa 85 -366}%
+\special{fp}%
+\special{pa 491 -35}\special{pa 491 35}%
+\special{fp}%
+\special{pa 454 -35}\special{pa 454 35}%
+\special{fp}%
+\special{pa 908 -281}\special{pa 908 -286}\special{pa 907 -290}\special{pa 905 -294}%
+\special{pa 903 -299}\special{pa 901 -302}\special{pa 898 -306}\special{pa 895 -309}%
+\special{pa 891 -312}\special{pa 887 -314}\special{pa 883 -315}\special{pa 878 -317}%
+\special{pa 874 -317}\special{pa 869 -317}\special{pa 865 -317}\special{pa 860 -315}%
+\special{pa 856 -314}\special{pa 852 -312}\special{pa 849 -309}\special{pa 845 -306}%
+\special{pa 842 -302}\special{pa 840 -299}\special{pa 838 -294}\special{pa 837 -290}%
+\special{pa 836 -286}\special{pa 836 -281}\special{pa 836 -277}\special{pa 837 -272}%
+\special{pa 838 -268}\special{pa 840 -264}\special{pa 842 -260}\special{pa 845 -256}%
+\special{pa 849 -253}\special{pa 852 -251}\special{pa 856 -248}\special{pa 860 -247}%
+\special{pa 865 -246}\special{pa 869 -245}\special{pa 874 -245}\special{pa 878 -246}%
+\special{pa 883 -247}\special{pa 887 -248}\special{pa 891 -251}\special{pa 895 -253}%
+\special{pa 898 -256}\special{pa 901 -260}\special{pa 903 -264}\special{pa 905 -268}%
+\special{pa 907 -272}\special{pa 908 -277}\special{pa 908 -281}%
+\special{fp}%
+\special{pa 508 -598}\special{pa 489 -664}\special{pa 557 -647}\special{pa 508 -598}%
+\special{fp}%
+\settowidth{\Width}{A}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{A}\settodepth{\Depth}{A}\setlength{\Height}{\Depth}%
+\put(1.0000,3.0500){\hspace*{\Width}\raisebox{\Height}{A}}%
+%
+%
+\settowidth{\Width}{B}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{B}\settodepth{\Depth}{B}\setlength{\Height}{-\Height}%
+\put(-0.0500,-0.0500){\hspace*{\Width}\raisebox{\Height}{B}}%
+%
+%
+\settowidth{\Width}{C}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{C}\settodepth{\Depth}{C}\setlength{\Height}{-\Height}%
+\put(4.0500,-0.0500){\hspace*{\Width}\raisebox{\Height}{C}}%
+%
+%
+\settowidth{\Width}{D}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{D}\settodepth{\Depth}{D}\setlength{\Height}{\Depth}%
+\put(3.4358,2.4374){\hspace*{\Width}\raisebox{\Height}{D}}%
+%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/segment.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/segment.pdf
new file mode 100644
index 0000000000..9d5848d837
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/segment.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/select-lines.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/select-lines.pdf
new file mode 100644
index 0000000000..d0f4978405
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/select-lines.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/select-points.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/select-points.pdf
new file mode 100644
index 0000000000..56c666d75d
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/select-points.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/setax-theta.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/setax-theta.tex
new file mode 100644
index 0000000000..89db63255e
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/setax-theta.tex
@@ -0,0 +1,43 @@
+%%% test.tex 2014-11-11 15:44
+%%% test.sce 2014-11-11 15:44
+{\unitlength=6mm%
+\begin{picture}%
+( 10.00000, 5.00000)( -5.00000, -2.00000)%
+\special{pn 8}%
+%
+\special{pn 8}%
+\special{pa -1181 0}\special{pa 1181 0}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 1106 24}\special{pa 1181 0}\special{pa 1106 -24}\special{pa 1106 0}\special{pa 1106 24}%
+\special{sh 1}\special{ip}%
+\special{pn 8}%
+\special{pa 1106 24}\special{pa 1181 0}\special{pa 1106 -24}\special{pa 1106 0}\special{pa 1106 24}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 8}%
+\special{pa 0 472}\special{pa 0 -709}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 24 -634}\special{pa 0 -709}\special{pa -24 -634}\special{pa 0 -634}\special{pa 24 -634}%
+\special{sh 1}\special{ip}%
+\special{pn 8}%
+\special{pa 24 -634}\special{pa 0 -709}\special{pa -24 -634}\special{pa 0 -634}\special{pa 24 -634}%
+\special{fp}%
+\special{pn 8}%
+\settowidth{\Width}{$\theta$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$\theta$}\settodepth{\Depth}{$\theta$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(5.0500,0.0000){\hspace*{\Width}\raisebox{\Height}{$\theta$}}%
+%
+%
+\settowidth{\Width}{$x$}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-0.0500,3.0000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+%
+\settowidth{\Width}{O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(-0.0500,-0.0500){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/setcolor.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/setcolor.pdf
new file mode 100644
index 0000000000..7e112dd6ad
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/setcolor.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/setorigin.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/setorigin.pdf
new file mode 100644
index 0000000000..2effbefce7
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/setorigin.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/setorigin.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/setorigin.tex
new file mode 100644
index 0000000000..b71a9ff29c
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/setorigin.tex
@@ -0,0 +1,37 @@
+%%% test.tex 2014-11-28 22:0
+%%% test.sce 2014-11-28 22:0
+{\unitlength=6mm%
+\begin{picture}%
+( 6.00000, 6.00000)( -1.00000, 0.00000)%
+\special{pn 8}%
+%
+\special{pa 245 -245}\special{pa 238 -248}\special{pa 231 -247}\special{pa 226 -242}%
+\special{pa 225 -234}\special{pa 228 -228}\special{pa 234 -225}\special{pa 242 -226}%
+\special{pa 247 -231}\special{pa 248 -238}\special{pa 245 -245}\special{sh 1}\special{fp}%
+\settowidth{\Width}{P}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{P}\settodepth{\Depth}{P}\setlength{\Height}{-\Height}%
+\put(1.0000,0.8500){\hspace*{\Width}\raisebox{\Height}{P}}%
+%
+%
+\special{pa 0 -709}\special{pa 472 -1181}\special{pa 945 -236}\special{pa 0 -709}%
+\special{fp}%
+\special{pa -236 -472}\special{pa 1181 -472}%
+\special{fp}%
+\special{pa 709 0}\special{pa 709 -1417}%
+\special{fp}%
+\settowidth{\Width}{$x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(5.0500,2.0000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{\Depth}%
+\put(3.0000,6.0500){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+%
+\settowidth{\Width}{O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(2.9500,1.9500){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/setscaling.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/setscaling.tex
new file mode 100644
index 0000000000..a0bcba93db
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/setscaling.tex
@@ -0,0 +1,80 @@
+%%% test.tex 2014-10-22 10:38
+%%% test.sce 2014-10-22 10:38
+{\unitlength=5mm%
+\begin{picture}%
+( 7.00000, 8.00000)( -1.00000, -1.00000)%
+\special{pn 8}%
+%
+\special{pn 8}%
+\special{pa -4 -1230}\special{pa 4 -1230}\special{fp}\special{pa 34 -1230}\special{pa 42 -1230}\special{fp}%
+\special{pa 72 -1230}\special{pa 80 -1230}\special{fp}\special{pa 110 -1230}\special{pa 118 -1230}\special{fp}%
+\special{pa 147 -1230}\special{pa 155 -1230}\special{fp}\special{pa 185 -1230}\special{pa 193 -1230}\special{fp}%
+\special{pa 223 -1230}\special{pa 231 -1230}\special{fp}\special{pa 261 -1230}\special{pa 269 -1230}\special{fp}%
+\special{pa 299 -1230}\special{pa 307 -1230}\special{fp}\special{pa 337 -1230}\special{pa 345 -1230}\special{fp}%
+\special{pa 375 -1230}\special{pa 383 -1230}\special{fp}\special{pa 412 -1230}\special{pa 420 -1230}\special{fp}%
+\special{pa 450 -1230}\special{pa 458 -1230}\special{fp}\special{pa 488 -1230}\special{pa 496 -1230}\special{fp}%
+\special{pn 8}%
+\special{pn 8}%
+\special{pa 492 4}\special{pa 492 -4}\special{fp}\special{pa 492 -36}\special{pa 492 -44}\special{fp}%
+\special{pa 492 -75}\special{pa 492 -83}\special{fp}\special{pa 492 -115}\special{pa 492 -123}\special{fp}%
+\special{pa 492 -155}\special{pa 492 -163}\special{fp}\special{pa 492 -194}\special{pa 492 -202}\special{fp}%
+\special{pa 492 -234}\special{pa 492 -242}\special{fp}\special{pa 492 -274}\special{pa 492 -282}\special{fp}%
+\special{pa 492 -314}\special{pa 492 -322}\special{fp}\special{pa 492 -353}\special{pa 492 -361}\special{fp}%
+\special{pa 492 -393}\special{pa 492 -401}\special{fp}\special{pa 492 -433}\special{pa 492 -441}\special{fp}%
+\special{pa 492 -472}\special{pa 492 -480}\special{fp}\special{pa 492 -512}\special{pa 492 -520}\special{fp}%
+\special{pa 492 -552}\special{pa 492 -560}\special{fp}\special{pa 492 -591}\special{pa 492 -599}\special{fp}%
+\special{pa 492 -631}\special{pa 492 -639}\special{fp}\special{pa 492 -671}\special{pa 492 -679}\special{fp}%
+\special{pa 492 -710}\special{pa 492 -718}\special{fp}\special{pa 492 -750}\special{pa 492 -758}\special{fp}%
+\special{pa 492 -790}\special{pa 492 -798}\special{fp}\special{pa 492 -829}\special{pa 492 -837}\special{fp}%
+\special{pa 492 -869}\special{pa 492 -877}\special{fp}\special{pa 492 -909}\special{pa 492 -917}\special{fp}%
+\special{pa 492 -949}\special{pa 492 -957}\special{fp}\special{pa 492 -988}\special{pa 492 -996}\special{fp}%
+\special{pa 492 -1028}\special{pa 492 -1036}\special{fp}\special{pa 492 -1068}\special{pa 492 -1076}\special{fp}%
+\special{pa 492 -1107}\special{pa 492 -1115}\special{fp}\special{pa 492 -1147}\special{pa 492 -1155}\special{fp}%
+\special{pa 492 -1187}\special{pa 492 -1195}\special{fp}\special{pa 492 -1226}\special{pa 492 -1234}\special{fp}%
+\special{pn 8}%
+\settowidth{\Width}{5}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{5}\settodepth{\Depth}{5}\setlength{\Height}{-\Height}%
+\put(4.9500,-0.1500){\hspace*{\Width}\raisebox{\Height}{5}}%
+%
+%
+\settowidth{\Width}{$\frac{25}{2}$}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{$\frac{25}{2}$}\settodepth{\Depth}{$\frac{25}{2}$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-0.1500,6.2500){\hspace*{\Width}\raisebox{\Height}{$\frac{25}{2}$}}%
+%
+%
+\settowidth{\Width}{$\frac{5}{2}$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\frac{5}{2}$}\settodepth{\Depth}{$\frac{5}{2}$}\setlength{\Height}{-\Height}%
+\put(2.5000,-0.2500){\hspace*{\Width}\raisebox{\Height}{$\frac{5}{2}$}}%
+%
+%
+\special{pa -38 197}\special{pa -28 145}\special{pa 0 0}\special{pa 28 -137}\special{pa 56 -265}%
+\special{pa 84 -386}\special{pa 112 -498}\special{pa 141 -603}\special{pa 169 -699}%
+\special{pa 197 -787}\special{pa 225 -868}\special{pa 253 -940}\special{pa 281 -1004}%
+\special{pa 309 -1061}\special{pa 337 -1109}\special{pa 366 -1149}\special{pa 394 -1181}%
+\special{pa 422 -1205}\special{pa 450 -1221}\special{pa 478 -1229}\special{pa 506 -1229}%
+\special{pa 534 -1221}\special{pa 562 -1205}\special{pa 591 -1181}\special{pa 619 -1149}%
+\special{pa 647 -1109}\special{pa 675 -1061}\special{pa 703 -1004}\special{pa 731 -940}%
+\special{pa 759 -868}\special{pa 787 -787}\special{pa 816 -699}\special{pa 844 -603}%
+\special{pa 872 -498}\special{pa 900 -386}\special{pa 928 -265}\special{pa 956 -137}%
+\special{pa 984 0}\special{pa 1012 145}\special{pa 1022 197}%
+\special{fp}%
+\special{pa -197 0}\special{pa 1181 0}%
+\special{fp}%
+\special{pa 0 197}\special{pa 0 -1378}%
+\special{fp}%
+\settowidth{\Width}{$x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(6.0500,0.0000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{\Depth}%
+\put(0.0000,7.0500){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+%
+\settowidth{\Width}{O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(-0.0500,-0.0500){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/setwindow.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/setwindow.pdf
new file mode 100644
index 0000000000..38d007daf7
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/setwindow.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/sf3ddata3.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/sf3ddata3.tex
new file mode 100644
index 0000000000..a2585b3117
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/sf3ddata3.tex
@@ -0,0 +1,312 @@
+%%% /Users/Hannya/ketcindy/ketwork/template.tex 2016-8-7 19:12
+%%% template.sce 2016-8-7 19:12
+{\unitlength=6mm%
+\begin{picture}%
+( 10.01000, 7.51000)( -5.01000, -2.51000)%
+\special{pn 8}%
+%
+\settowidth{\Width}{$x$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-4.6011,-1.1540){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.4854,-2.2142){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+%
+\settowidth{\Width}{$z$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$z$}\settodepth{\Depth}{$z$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(0.0000,4.5961){\hspace*{\Width}\raisebox{\Height}{$z$}}%
+%
+%
+\special{pa 1043 -262}\special{pa -1043 262}%
+\special{fp}%
+\special{pa -554 -493}\special{pa 554 493}%
+\special{fp}%
+\special{pa 0 593}\special{pa 0 -1041}%
+\special{fp}%
+\special{pa 0 0}\special{pa -26 -19}\special{pa -52 -38}\special{pa -78 -57}\special{pa -104 -74}%
+\special{pa -130 -89}\special{pa -156 -103}\special{pa -183 -114}\special{pa -209 -123}%
+\special{pa -235 -129}\special{pa -261 -132}\special{pa -287 -132}\special{pa -313 -129}%
+\special{pa -339 -123}\special{pa -365 -113}\special{pa -391 -100}\special{pa -417 -85}%
+\special{pa -443 -66}\special{pa -469 -44}\special{pa -496 -20}\special{pa -522 6}%
+\special{pa -548 35}\special{pa -574 64}\special{pa -600 96}\special{pa -626 128}%
+\special{fp}%
+\special{pa 0 0}\special{pa -21 -16}\special{pa -41 -31}\special{pa -62 -46}\special{pa -82 -60}%
+\special{pa -103 -72}\special{pa -123 -82}\special{pa -144 -90}\special{pa -164 -95}%
+\special{pa -185 -98}\special{pa -205 -97}\special{pa -226 -94}\special{pa -246 -87}%
+\special{pa -267 -77}\special{pa -287 -64}\special{pa -308 -48}\special{pa -328 -29}%
+\special{pa -349 -6}\special{pa -370 19}\special{pa -390 46}\special{pa -411 76}\special{pa -431 108}%
+\special{pa -452 141}\special{pa -472 176}\special{pa -493 211}%
+\special{fp}%
+\special{pa 0 0}\special{pa -13 -13}\special{pa -26 -26}\special{pa -39 -39}\special{pa -52 -50}%
+\special{pa -65 -59}\special{pa -78 -67}\special{pa -91 -72}\special{pa -104 -75}%
+\special{pa -117 -75}\special{pa -130 -72}\special{pa -143 -66}\special{pa -156 -57}%
+\special{pa -169 -45}\special{pa -182 -29}\special{pa -195 -11}\special{pa -207 11}%
+\special{pa -220 36}\special{pa -233 64}\special{pa -246 94}\special{pa -259 126}%
+\special{pa -272 161}\special{pa -285 196}\special{pa -298 234}\special{pa -311 272}%
+\special{fp}%
+\special{pa 0 0}\special{pa -4 -12}\special{pa -8 -24}\special{pa -12 -35}\special{pa -17 -45}%
+\special{pa -21 -53}\special{pa -25 -59}\special{pa -29 -63}\special{pa -33 -65}\special{pa -37 -63}%
+\special{pa -41 -59}\special{pa -45 -52}\special{pa -50 -42}\special{pa -54 -28}\special{pa -58 -11}%
+\special{pa -62 9}\special{pa -66 32}\special{pa -70 58}\special{pa -74 87}\special{pa -79 118}%
+\special{pa -83 152}\special{pa -87 187}\special{pa -91 225}\special{pa -95 263}\special{pa -99 302}%
+\special{fp}%
+\special{pa 0 0}\special{pa 5 -12}\special{pa 10 -24}\special{pa 15 -35}\special{pa 20 -45}%
+\special{pa 26 -53}\special{pa 31 -59}\special{pa 36 -64}\special{pa 41 -65}\special{pa 46 -64}%
+\special{pa 51 -60}\special{pa 56 -53}\special{pa 61 -43}\special{pa 66 -29}\special{pa 71 -12}%
+\special{pa 77 8}\special{pa 82 31}\special{pa 87 57}\special{pa 92 85}\special{pa 97 117}%
+\special{pa 102 150}\special{pa 107 186}\special{pa 112 223}\special{pa 117 261}\special{pa 122 301}%
+\special{fp}%
+\special{pa 0 0}\special{pa 14 -14}\special{pa 28 -27}\special{pa 42 -39}\special{pa 55 -50}%
+\special{pa 69 -60}\special{pa 83 -68}\special{pa 97 -73}\special{pa 111 -77}\special{pa 125 -77}%
+\special{pa 138 -74}\special{pa 152 -69}\special{pa 166 -60}\special{pa 180 -48}\special{pa 194 -32}%
+\special{pa 208 -14}\special{pa 221 8}\special{pa 235 33}\special{pa 249 60}\special{pa 263 90}%
+\special{pa 277 122}\special{pa 291 156}\special{pa 304 192}\special{pa 318 229}\special{pa 332 267}%
+\special{fp}%
+\special{pa 0 0}\special{pa 21 -16}\special{pa 42 -32}\special{pa 64 -47}\special{pa 85 -61}%
+\special{pa 106 -73}\special{pa 127 -84}\special{pa 149 -92}\special{pa 170 -98}\special{pa 191 -100}%
+\special{pa 212 -101}\special{pa 233 -97}\special{pa 255 -91}\special{pa 276 -82}%
+\special{pa 297 -69}\special{pa 318 -53}\special{pa 340 -34}\special{pa 361 -12}\special{pa 382 13}%
+\special{pa 403 40}\special{pa 424 70}\special{pa 446 101}\special{pa 467 134}\special{pa 488 168}%
+\special{pa 509 204}%
+\special{fp}%
+\special{pa 0 0}\special{pa 27 -20}\special{pa 53 -39}\special{pa 80 -58}\special{pa 106 -75}%
+\special{pa 133 -91}\special{pa 159 -105}\special{pa 186 -117}\special{pa 212 -126}%
+\special{pa 239 -133}\special{pa 265 -136}\special{pa 292 -137}\special{pa 318 -134}%
+\special{pa 345 -128}\special{pa 371 -119}\special{pa 398 -107}\special{pa 424 -91}%
+\special{pa 451 -73}\special{pa 478 -52}\special{pa 504 -28}\special{pa 531 -2}\special{pa 557 26}%
+\special{pa 584 55}\special{pa 610 86}\special{pa 637 118}%
+\special{fp}%
+\special{pa 0 0}\special{pa 29 -24}\special{pa 58 -48}\special{pa 88 -70}\special{pa 117 -92}%
+\special{pa 146 -112}\special{pa 175 -130}\special{pa 205 -146}\special{pa 234 -160}%
+\special{pa 263 -170}\special{pa 292 -178}\special{pa 322 -183}\special{pa 351 -184}%
+\special{pa 380 -182}\special{pa 409 -177}\special{pa 439 -169}\special{pa 468 -158}%
+\special{pa 497 -144}\special{pa 526 -127}\special{pa 555 -107}\special{pa 585 -85}%
+\special{pa 614 -62}\special{pa 643 -36}\special{pa 672 -10}\special{pa 702 18}%
+\special{fp}%
+\special{pa 0 0}\special{pa 29 -28}\special{pa 58 -56}\special{pa 87 -83}\special{pa 116 -109}%
+\special{pa 145 -134}\special{pa 175 -156}\special{pa 204 -177}\special{pa 233 -194}%
+\special{pa 262 -210}\special{pa 291 -222}\special{pa 320 -231}\special{pa 349 -237}%
+\special{pa 378 -239}\special{pa 407 -239}\special{pa 436 -235}\special{pa 465 -228}%
+\special{pa 494 -218}\special{pa 524 -205}\special{pa 553 -190}\special{pa 582 -173}%
+\special{pa 611 -153}\special{pa 640 -133}\special{pa 669 -110}\special{pa 698 -87}%
+\special{fp}%
+\special{pa 0 0}\special{pa 26 -32}\special{pa 52 -65}\special{pa 78 -96}\special{pa 104 -126}%
+\special{pa 130 -155}\special{pa 156 -181}\special{pa 183 -206}\special{pa 209 -227}%
+\special{pa 235 -247}\special{pa 261 -263}\special{pa 287 -276}\special{pa 313 -286}%
+\special{pa 339 -293}\special{pa 365 -296}\special{pa 391 -297}\special{pa 417 -294}%
+\special{pa 443 -288}\special{pa 469 -280}\special{pa 496 -269}\special{pa 522 -255}%
+\special{pa 548 -240}\special{pa 574 -223}\special{pa 600 -205}\special{pa 626 -186}%
+\special{fp}%
+\special{pa 0 0}\special{pa 21 -36}\special{pa 41 -72}\special{pa 62 -106}\special{pa 82 -140}%
+\special{pa 103 -172}\special{pa 123 -202}\special{pa 144 -230}\special{pa 164 -255}%
+\special{pa 185 -278}\special{pa 205 -298}\special{pa 226 -315}\special{pa 246 -328}%
+\special{pa 267 -338}\special{pa 287 -345}\special{pa 308 -349}\special{pa 328 -350}%
+\special{pa 349 -348}\special{pa 370 -343}\special{pa 390 -335}\special{pa 411 -325}%
+\special{pa 431 -313}\special{pa 452 -300}\special{pa 472 -286}\special{pa 493 -270}%
+\special{fp}%
+\special{pa 0 0}\special{pa 13 -38}\special{pa 26 -77}\special{pa 39 -114}\special{pa 52 -150}%
+\special{pa 65 -184}\special{pa 78 -217}\special{pa 91 -248}\special{pa 104 -275}%
+\special{pa 117 -301}\special{pa 130 -323}\special{pa 143 -342}\special{pa 156 -358}%
+\special{pa 169 -371}\special{pa 182 -380}\special{pa 195 -387}\special{pa 207 -390}%
+\special{pa 220 -390}\special{pa 233 -388}\special{pa 246 -383}\special{pa 259 -375}%
+\special{pa 272 -366}\special{pa 285 -355}\special{pa 298 -343}\special{pa 311 -330}%
+\special{fp}%
+\special{pa 0 0}\special{pa 4 -40}\special{pa 8 -79}\special{pa 12 -118}\special{pa 17 -155}%
+\special{pa 21 -191}\special{pa 25 -225}\special{pa 29 -257}\special{pa 33 -286}\special{pa 37 -312}%
+\special{pa 41 -336}\special{pa 45 -356}\special{pa 50 -373}\special{pa 54 -388}\special{pa 58 -398}%
+\special{pa 62 -406}\special{pa 66 -410}\special{pa 70 -412}\special{pa 74 -411}\special{pa 79 -407}%
+\special{pa 83 -401}\special{pa 87 -393}\special{pa 91 -383}\special{pa 95 -373}\special{pa 99 -361}%
+\special{fp}%
+\special{pa 0 0}\special{pa -5 -40}\special{pa -10 -79}\special{pa -15 -117}\special{pa -20 -155}%
+\special{pa -26 -191}\special{pa -31 -224}\special{pa -36 -256}\special{pa -41 -285}%
+\special{pa -46 -312}\special{pa -51 -335}\special{pa -56 -355}\special{pa -61 -373}%
+\special{pa -66 -387}\special{pa -71 -397}\special{pa -77 -405}\special{pa -82 -409}%
+\special{pa -87 -411}\special{pa -92 -409}\special{pa -97 -406}\special{pa -102 -400}%
+\special{pa -107 -392}\special{pa -112 -382}\special{pa -117 -371}\special{pa -122 -359}%
+\special{fp}%
+\special{pa 0 0}\special{pa -14 -38}\special{pa -28 -76}\special{pa -42 -113}\special{pa -55 -149}%
+\special{pa -69 -183}\special{pa -83 -216}\special{pa -97 -246}\special{pa -111 -274}%
+\special{pa -125 -299}\special{pa -138 -321}\special{pa -152 -340}\special{pa -166 -356}%
+\special{pa -180 -368}\special{pa -194 -377}\special{pa -208 -384}\special{pa -221 -387}%
+\special{pa -235 -387}\special{pa -249 -384}\special{pa -263 -379}\special{pa -277 -371}%
+\special{pa -291 -362}\special{pa -304 -351}\special{pa -318 -338}\special{pa -332 -325}%
+\special{fp}%
+\special{pa 0 0}\special{pa -21 -36}\special{pa -42 -71}\special{pa -64 -105}\special{pa -85 -139}%
+\special{pa -106 -170}\special{pa -127 -200}\special{pa -149 -228}\special{pa -170 -253}%
+\special{pa -191 -275}\special{pa -212 -295}\special{pa -233 -311}\special{pa -255 -324}%
+\special{pa -276 -334}\special{pa -297 -341}\special{pa -318 -344}\special{pa -340 -345}%
+\special{pa -361 -342}\special{pa -382 -337}\special{pa -403 -329}\special{pa -424 -319}%
+\special{pa -446 -307}\special{pa -467 -293}\special{pa -488 -278}\special{pa -509 -262}%
+\special{fp}%
+\special{pa 0 0}\special{pa -27 -32}\special{pa -53 -64}\special{pa -80 -95}\special{pa -106 -124}%
+\special{pa -133 -152}\special{pa -159 -179}\special{pa -186 -203}\special{pa -212 -224}%
+\special{pa -239 -243}\special{pa -265 -259}\special{pa -292 -272}\special{pa -318 -281}%
+\special{pa -345 -288}\special{pa -371 -291}\special{pa -398 -291}\special{pa -424 -287}%
+\special{pa -451 -281}\special{pa -478 -272}\special{pa -504 -261}\special{pa -531 -247}%
+\special{pa -557 -232}\special{pa -584 -214}\special{pa -610 -196}\special{pa -637 -176}%
+\special{fp}%
+\special{pa 0 0}\special{pa -29 -28}\special{pa -58 -55}\special{pa -88 -82}\special{pa -117 -108}%
+\special{pa -146 -132}\special{pa -175 -154}\special{pa -205 -173}\special{pa -234 -191}%
+\special{pa -263 -205}\special{pa -292 -217}\special{pa -322 -226}\special{pa -351 -231}%
+\special{pa -380 -233}\special{pa -409 -232}\special{pa -439 -228}\special{pa -468 -221}%
+\special{pa -497 -210}\special{pa -526 -197}\special{pa -555 -182}\special{pa -585 -164}%
+\special{pa -614 -144}\special{pa -643 -122}\special{pa -672 -100}\special{pa -702 -76}%
+\special{fp}%
+\special{pa 0 0}\special{pa -29 -24}\special{pa -58 -47}\special{pa -87 -69}\special{pa -116 -90}%
+\special{pa -145 -110}\special{pa -175 -127}\special{pa -204 -143}\special{pa -233 -156}%
+\special{pa -262 -166}\special{pa -291 -173}\special{pa -320 -178}\special{pa -349 -179}%
+\special{pa -378 -177}\special{pa -407 -171}\special{pa -436 -162}\special{pa -465 -151}%
+\special{pa -494 -136}\special{pa -524 -119}\special{pa -553 -99}\special{pa -582 -76}%
+\special{pa -611 -52}\special{pa -640 -26}\special{pa -669 1}\special{pa -698 29}%
+\special{fp}%
+\special{pa 0 0}\special{pa -26 -19}\special{pa -52 -38}\special{pa -78 -57}\special{pa -104 -74}%
+\special{pa -130 -89}\special{pa -156 -103}\special{pa -183 -114}\special{pa -209 -123}%
+\special{pa -235 -129}\special{pa -261 -132}\special{pa -287 -132}\special{pa -313 -129}%
+\special{pa -339 -123}\special{pa -365 -113}\special{pa -391 -100}\special{pa -417 -85}%
+\special{pa -443 -66}\special{pa -469 -44}\special{pa -496 -20}\special{pa -522 6}%
+\special{pa -548 35}\special{pa -574 64}\special{pa -600 96}\special{pa -626 128}%
+\special{fp}%
+\special{pa 3 -3}\special{pa -3 -3}\special{pa -3 3}\special{pa 3 3}\special{pa 3 -3}%
+\special{sh 1}\special{fp}%
+\special{pa -31 -23}\special{pa -26 -20}\special{pa -19 -17}\special{pa -10 -15}\special{pa -1 -14}%
+\special{pa 8 -15}\special{pa 17 -16}\special{pa 24 -19}\special{pa 30 -22}\special{pa 34 -26}%
+\special{pa 35 -31}\special{pa 35 -35}\special{pa 31 -39}\special{pa 26 -43}\special{pa 19 -45}%
+\special{pa 10 -47}\special{pa 1 -48}\special{pa -8 -47}\special{pa -17 -46}\special{pa -24 -43}%
+\special{pa -30 -40}\special{pa -34 -36}\special{pa -35 -32}\special{pa -35 -27}\special{pa -31 -23}%
+\special{fp}%
+\special{pa -63 -46}\special{pa -52 -39}\special{pa -38 -33}\special{pa -21 -29}\special{pa -3 -28}%
+\special{pa 16 -29}\special{pa 33 -32}\special{pa 48 -37}\special{pa 60 -44}\special{pa 68 -52}%
+\special{pa 71 -60}\special{pa 69 -69}\special{pa 63 -77}\special{pa 52 -84}\special{pa 38 -90}%
+\special{pa 21 -94}\special{pa 3 -95}\special{pa -16 -94}\special{pa -33 -91}\special{pa -48 -86}%
+\special{pa -60 -79}\special{pa -68 -71}\special{pa -71 -63}\special{pa -69 -54}\special{pa -63 -46}%
+\special{fp}%
+\special{pa -94 -67}\special{pa -78 -56}\special{pa -56 -48}\special{pa -31 -43}\special{pa -4 -40}%
+\special{pa 24 -42}\special{pa 50 -46}\special{pa 72 -54}\special{pa 90 -64}\special{pa 102 -76}%
+\special{pa 106 -89}\special{pa 104 -102}\special{pa 94 -114}\special{pa 78 -125}%
+\special{pa 56 -133}\special{pa 31 -139}\special{pa 4 -141}\special{pa -24 -140}\special{pa -50 -135}%
+\special{pa -72 -127}\special{pa -90 -117}\special{pa -102 -105}\special{pa -106 -92}%
+\special{pa -104 -79}\special{pa -94 -67}%
+\special{fp}%
+\special{pa -125 -86}\special{pa -104 -72}\special{pa -75 -61}\special{pa -42 -53}%
+\special{pa -5 -51}\special{pa 32 -52}\special{pa 66 -58}\special{pa 97 -69}\special{pa 120 -82}%
+\special{pa 136 -98}\special{pa 142 -115}\special{pa 138 -133}\special{pa 125 -149}%
+\special{pa 104 -163}\special{pa 75 -174}\special{pa 42 -182}\special{pa 5 -184}\special{pa -32 -183}%
+\special{pa -66 -177}\special{pa -97 -167}\special{pa -120 -153}\special{pa -136 -137}%
+\special{pa -142 -120}\special{pa -138 -103}\special{pa -125 -86}%
+\special{fp}%
+\special{pa -156 -103}\special{pa -130 -85}\special{pa -94 -71}\special{pa -52 -62}%
+\special{pa -6 -58}\special{pa 40 -60}\special{pa 83 -68}\special{pa 121 -81}\special{pa 150 -97}%
+\special{pa 169 -117}\special{pa 177 -139}\special{pa 173 -161}\special{pa 156 -181}%
+\special{pa 130 -199}\special{pa 94 -213}\special{pa 52 -222}\special{pa 6 -226}\special{pa -40 -224}%
+\special{pa -83 -216}\special{pa -121 -203}\special{pa -150 -186}\special{pa -169 -166}%
+\special{pa -177 -145}\special{pa -173 -123}\special{pa -156 -103}%
+\special{fp}%
+\special{pa -188 -116}\special{pa -156 -95}\special{pa -113 -78}\special{pa -62 -67}%
+\special{pa -8 -63}\special{pa 48 -65}\special{pa 100 -74}\special{pa 145 -90}\special{pa 180 -110}%
+\special{pa 203 -134}\special{pa 212 -159}\special{pa 207 -186}\special{pa 188 -210}%
+\special{pa 156 -232}\special{pa 113 -248}\special{pa 62 -259}\special{pa 8 -263}%
+\special{pa -48 -261}\special{pa -100 -252}\special{pa -145 -237}\special{pa -180 -216}%
+\special{pa -203 -193}\special{pa -212 -167}\special{pa -207 -141}\special{pa -188 -116}%
+\special{fp}%
+\special{pa -219 -126}\special{pa -182 -101}\special{pa -132 -81}\special{pa -73 -68}%
+\special{pa -9 -63}\special{pa 56 -66}\special{pa 116 -77}\special{pa 169 -95}\special{pa 210 -118}%
+\special{pa 237 -146}\special{pa 248 -176}\special{pa 242 -207}\special{pa 219 -236}%
+\special{pa 182 -260}\special{pa 132 -280}\special{pa 73 -293}\special{pa 9 -298}%
+\special{pa -56 -295}\special{pa -116 -284}\special{pa -169 -266}\special{pa -210 -243}%
+\special{pa -237 -215}\special{pa -248 -185}\special{pa -242 -154}\special{pa -219 -126}%
+\special{fp}%
+\special{pa -250 -131}\special{pa -207 -103}\special{pa -150 -80}\special{pa -83 -66}%
+\special{pa -10 -60}\special{pa 64 -63}\special{pa 133 -76}\special{pa 193 -96}\special{pa 240 -123}%
+\special{pa 271 -155}\special{pa 283 -189}\special{pa 276 -224}\special{pa 250 -257}%
+\special{pa 207 -285}\special{pa 150 -308}\special{pa 83 -322}\special{pa 10 -328}%
+\special{pa -64 -325}\special{pa -133 -312}\special{pa -193 -292}\special{pa -240 -265}%
+\special{pa -271 -233}\special{pa -283 -199}\special{pa -276 -164}\special{pa -250 -131}%
+\special{fp}%
+\special{pa -282 -132}\special{pa -233 -100}\special{pa -169 -75}\special{pa -94 -59}%
+\special{pa -11 -52}\special{pa 71 -56}\special{pa 149 -70}\special{pa 217 -93}\special{pa 270 -123}%
+\special{pa 305 -159}\special{pa 319 -198}\special{pa 311 -237}\special{pa 282 -274}%
+\special{pa 233 -306}\special{pa 169 -331}\special{pa 94 -347}\special{pa 11 -354}%
+\special{pa -71 -350}\special{pa -149 -336}\special{pa -217 -313}\special{pa -270 -283}%
+\special{pa -305 -247}\special{pa -319 -209}\special{pa -311 -169}\special{pa -282 -132}%
+\special{fp}%
+\special{pa -313 -129}\special{pa -259 -94}\special{pa -188 -66}\special{pa -104 -48}%
+\special{pa -13 -40}\special{pa 79 -44}\special{pa 166 -60}\special{pa 241 -85}\special{pa 300 -119}%
+\special{pa 339 -159}\special{pa 354 -202}\special{pa 345 -245}\special{pa 313 -286}%
+\special{pa 259 -322}\special{pa 188 -350}\special{pa 104 -368}\special{pa 13 -375}%
+\special{pa -79 -371}\special{pa -166 -356}\special{pa -241 -330}\special{pa -300 -297}%
+\special{pa -339 -257}\special{pa -354 -214}\special{pa -345 -170}\special{pa -313 -129}%
+\special{fp}%
+\special{pa -344 -121}\special{pa -285 -82}\special{pa -207 -51}\special{pa -114 -31}%
+\special{pa -14 -23}\special{pa 87 -28}\special{pa 183 -45}\special{pa 266 -73}\special{pa 330 -110}%
+\special{pa 373 -153}\special{pa 390 -201}\special{pa 380 -249}\special{pa 344 -294}%
+\special{pa 285 -333}\special{pa 207 -364}\special{pa 114 -384}\special{pa 14 -392}%
+\special{pa -87 -387}\special{pa -183 -370}\special{pa -266 -342}\special{pa -330 -305}%
+\special{pa -373 -262}\special{pa -390 -214}\special{pa -380 -166}\special{pa -344 -121}%
+\special{fp}%
+\special{pa -376 -109}\special{pa -311 -66}\special{pa -226 -32}\special{pa -125 -11}%
+\special{pa -15 -2}\special{pa 95 -7}\special{pa 199 -25}\special{pa 290 -56}\special{pa 360 -96}%
+\special{pa 407 -144}\special{pa 425 -196}\special{pa 414 -248}\special{pa 376 -297}%
+\special{pa 311 -340}\special{pa 226 -373}\special{pa 125 -395}\special{pa 15 -404}%
+\special{pa -95 -399}\special{pa -199 -380}\special{pa -290 -350}\special{pa -360 -309}%
+\special{pa -407 -262}\special{pa -425 -210}\special{pa -414 -158}\special{pa -376 -109}%
+\special{fp}%
+\special{pa -407 -91}\special{pa -337 -45}\special{pa -244 -9}\special{pa -135 15}%
+\special{pa -16 24}\special{pa 103 19}\special{pa 216 -1}\special{pa 314 -34}\special{pa 390 -78}%
+\special{pa 440 -130}\special{pa 460 -186}\special{pa 449 -242}\special{pa 407 -295}%
+\special{pa 337 -342}\special{pa 244 -378}\special{pa 135 -402}\special{pa 16 -411}%
+\special{pa -103 -406}\special{pa -216 -386}\special{pa -314 -353}\special{pa -390 -309}%
+\special{pa -440 -257}\special{pa -460 -201}\special{pa -449 -145}\special{pa -407 -91}%
+\special{fp}%
+\special{pa -438 -70}\special{pa -363 -20}\special{pa -263 19}\special{pa -145 44}%
+\special{pa -18 55}\special{pa 111 49}\special{pa 233 27}\special{pa 338 -8}\special{pa 420 -55}%
+\special{pa 474 -111}\special{pa 496 -171}\special{pa 483 -232}\special{pa 438 -290}%
+\special{pa 363 -339}\special{pa 263 -378}\special{pa 145 -404}\special{pa 18 -414}%
+\special{pa -111 -408}\special{pa -233 -387}\special{pa -338 -351}\special{pa -420 -304}%
+\special{pa -474 -248}\special{pa -496 -188}\special{pa -483 -127}\special{pa -438 -70}%
+\special{fp}%
+\special{pa -469 -44}\special{pa -389 9}\special{pa -282 51}\special{pa -156 78}\special{pa -19 89}%
+\special{pa 119 83}\special{pa 249 60}\special{pa 362 22}\special{pa 450 -29}\special{pa 508 -88}%
+\special{pa 531 -153}\special{pa 518 -218}\special{pa 469 -280}\special{pa 389 -333}%
+\special{pa 282 -375}\special{pa 156 -402}\special{pa 19 -413}\special{pa -119 -407}%
+\special{pa -249 -384}\special{pa -362 -346}\special{pa -450 -295}\special{pa -508 -236}%
+\special{pa -531 -171}\special{pa -518 -106}\special{pa -469 -44}%
+\special{fp}%
+\special{pa -501 -15}\special{pa -415 42}\special{pa -301 87}\special{pa -166 116}%
+\special{pa -20 127}\special{pa 127 121}\special{pa 266 96}\special{pa 386 56}\special{pa 481 2}%
+\special{pa 542 -62}\special{pa 567 -131}\special{pa 553 -201}\special{pa 501 -266}%
+\special{pa 415 -323}\special{pa 301 -368}\special{pa 166 -397}\special{pa 20 -408}%
+\special{pa -127 -402}\special{pa -266 -377}\special{pa -386 -337}\special{pa -481 -283}%
+\special{pa -542 -219}\special{pa -567 -150}\special{pa -553 -81}\special{pa -501 -15}%
+\special{fp}%
+\special{pa -532 17}\special{pa -441 78}\special{pa -320 125}\special{pa -177 156}%
+\special{pa -22 168}\special{pa 135 161}\special{pa 282 135}\special{pa 410 92}\special{pa 511 35}%
+\special{pa 576 -33}\special{pa 602 -106}\special{pa 587 -180}\special{pa 532 -250}%
+\special{pa 441 -310}\special{pa 320 -357}\special{pa 177 -388}\special{pa 22 -401}%
+\special{pa -135 -394}\special{pa -282 -368}\special{pa -410 -324}\special{pa -511 -267}%
+\special{pa -576 -200}\special{pa -602 -126}\special{pa -587 -52}\special{pa -532 17}%
+\special{fp}%
+\special{pa -563 52}\special{pa -467 116}\special{pa -338 167}\special{pa -187 199}%
+\special{pa -23 212}\special{pa 143 205}\special{pa 299 177}\special{pa 435 132}\special{pa 541 71}%
+\special{pa 610 -1}\special{pa 637 -78}\special{pa 622 -157}\special{pa 563 -230}%
+\special{pa 467 -294}\special{pa 338 -344}\special{pa 187 -377}\special{pa 23 -390}%
+\special{pa -143 -383}\special{pa -299 -355}\special{pa -435 -310}\special{pa -541 -249}%
+\special{pa -610 -177}\special{pa -637 -100}\special{pa -622 -21}\special{pa -563 52}%
+\special{fp}%
+\special{pa -595 89}\special{pa -493 157}\special{pa -357 210}\special{pa -197 244}%
+\special{pa -24 258}\special{pa 151 250}\special{pa 316 221}\special{pa 459 173}\special{pa 571 109}%
+\special{pa 644 33}\special{pa 673 -48}\special{pa 656 -131}\special{pa 595 -209}%
+\special{pa 493 -277}\special{pa 357 -330}\special{pa 197 -364}\special{pa 24 -378}%
+\special{pa -151 -370}\special{pa -316 -341}\special{pa -459 -293}\special{pa -571 -229}%
+\special{pa -644 -153}\special{pa -673 -71}\special{pa -656 11}\special{pa -595 89}%
+\special{fp}%
+\special{pa -626 128}\special{pa -519 199}\special{pa -376 255}\special{pa -208 291}%
+\special{pa -25 305}\special{pa 159 297}\special{pa 332 267}\special{pa 483 216}\special{pa 601 148}%
+\special{pa 678 69}\special{pa 708 -17}\special{pa 691 -104}\special{pa 626 -186}%
+\special{pa 519 -258}\special{pa 376 -313}\special{pa 208 -350}\special{pa 25 -364}%
+\special{pa -159 -356}\special{pa -332 -325}\special{pa -483 -275}\special{pa -601 -207}%
+\special{pa -678 -128}\special{pa -708 -41}\special{pa -691 46}\special{pa -626 128}%
+\special{fp}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/sf3ddata4.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/sf3ddata4.tex
new file mode 100644
index 0000000000..7c4fa9d6f4
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/sf3ddata4.tex
@@ -0,0 +1,326 @@
+%%% /Users/Hannya/ketcindy/ketwork/template.tex 2016-8-13 20:36
+%%% template.sce 2016-8-13 20:36
+{\unitlength=6mm%
+\begin{picture}%
+( 9.80000, 7.34000)( -4.79000, -3.00000)%
+\special{pn 8}%
+%
+\settowidth{\Width}{$x$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-3.8116,-0.8391){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.2443,-2.2778){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+%
+\settowidth{\Width}{$z$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$z$}\settodepth{\Depth}{$z$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(0.0000,3.7149){\hspace*{\Width}\raisebox{\Height}{$z$}}%
+%
+%
+\special{pa 1071 -236}\special{pa -857 189}%
+\special{fp}%
+\special{pa -499 -506}\special{pa 499 506}%
+\special{fp}%
+\special{pa 0 709}\special{pa 0 -833}%
+\special{fp}%
+\special{pa 0 -416}\special{pa -56 -400}\special{pa -111 -378}\special{pa -164 -349}%
+\special{pa -214 -313}\special{pa -261 -273}\special{pa -303 -228}\special{pa -340 -179}%
+\special{pa -371 -127}\special{pa -396 -72}\special{pa -414 -17}\special{pa -425 39}%
+\special{pa -428 94}\special{pa -425 148}\special{pa -414 199}\special{pa -396 246}%
+\special{pa -371 290}\special{pa -340 328}\special{pa -303 361}\special{pa -261 388}%
+\special{pa -214 408}\special{pa -164 421}\special{pa -111 427}\special{pa -56 425}%
+\special{pa 0 416}%
+\special{fp}%
+\special{pa 0 -416}\special{pa -45 -393}\special{pa -89 -363}\special{pa -132 -326}%
+\special{pa -173 -284}\special{pa -210 -238}\special{pa -244 -187}\special{pa -274 -133}%
+\special{pa -299 -76}\special{pa -319 -19}\special{pa -334 39}\special{pa -343 97}%
+\special{pa -346 152}\special{pa -343 205}\special{pa -334 255}\special{pa -319 300}%
+\special{pa -299 340}\special{pa -274 374}\special{pa -244 402}\special{pa -210 423}%
+\special{pa -173 437}\special{pa -132 443}\special{pa -89 442}\special{pa -45 433}%
+\special{pa 0 416}%
+\special{fp}%
+\special{pa 0 -416}\special{pa -30 -387}\special{pa -59 -352}\special{pa -88 -310}%
+\special{pa -115 -263}\special{pa -140 -211}\special{pa -162 -156}\special{pa -182 -99}%
+\special{pa -199 -39}\special{pa -212 21}\special{pa -221 81}\special{pa -227 139}%
+\special{pa -229 195}\special{pa -227 248}\special{pa -221 296}\special{pa -212 340}%
+\special{pa -199 377}\special{pa -182 408}\special{pa -162 432}\special{pa -140 449}%
+\special{pa -115 458}\special{pa -88 459}\special{pa -59 453}\special{pa -30 438}%
+\special{pa 0 416}%
+\special{fp}%
+\special{pa 0 -416}\special{pa -12 -384}\special{pa -23 -345}\special{pa -35 -301}%
+\special{pa -45 -251}\special{pa -55 -197}\special{pa -64 -139}\special{pa -72 -80}%
+\special{pa -78 -18}\special{pa -83 43}\special{pa -87 104}\special{pa -90 163}\special{pa -90 219}%
+\special{pa -90 272}\special{pa -87 319}\special{pa -83 362}\special{pa -78 398}\special{pa -72 427}%
+\special{pa -64 449}\special{pa -55 464}\special{pa -45 470}\special{pa -35 469}\special{pa -23 459}%
+\special{pa -12 441}\special{pa 0 416}%
+\special{fp}%
+\special{pa 0 -416}\special{pa 7 -384}\special{pa 15 -345}\special{pa 22 -300}\special{pa 29 -250}%
+\special{pa 35 -195}\special{pa 41 -138}\special{pa 46 -78}\special{pa 50 -16}\special{pa 53 45}%
+\special{pa 55 106}\special{pa 57 165}\special{pa 57 222}\special{pa 57 274}\special{pa 55 322}%
+\special{pa 53 364}\special{pa 50 400}\special{pa 46 429}\special{pa 41 451}\special{pa 35 465}%
+\special{pa 29 471}\special{pa 22 469}\special{pa 15 460}\special{pa 7 442}\special{pa 0 416}%
+\special{fp}%
+\special{pa 0 -416}\special{pa 26 -386}\special{pa 52 -350}\special{pa 76 -307}\special{pa 100 -259}%
+\special{pa 121 -207}\special{pa 141 -151}\special{pa 158 -93}\special{pa 173 -33}%
+\special{pa 184 28}\special{pa 193 88}\special{pa 198 146}\special{pa 199 202}\special{pa 198 255}%
+\special{pa 193 303}\special{pa 184 346}\special{pa 173 383}\special{pa 158 414}\special{pa 141 438}%
+\special{pa 121 454}\special{pa 100 462}\special{pa 76 462}\special{pa 52 455}\special{pa 26 439}%
+\special{pa 0 416}%
+\special{fp}%
+\special{pa 0 -416}\special{pa 42 -391}\special{pa 83 -360}\special{pa 123 -322}\special{pa 161 -279}%
+\special{pa 196 -231}\special{pa 228 -179}\special{pa 255 -124}\special{pa 279 -67}%
+\special{pa 298 -8}\special{pa 311 50}\special{pa 319 108}\special{pa 322 163}\special{pa 319 216}%
+\special{pa 311 266}\special{pa 298 310}\special{pa 279 350}\special{pa 255 383}\special{pa 228 410}%
+\special{pa 196 430}\special{pa 161 442}\special{pa 123 447}\special{pa 83 444}\special{pa 42 434}%
+\special{pa 0 416}%
+\special{fp}%
+\special{pa 0 -416}\special{pa 54 -399}\special{pa 107 -374}\special{pa 158 -343}%
+\special{pa 207 -306}\special{pa 251 -264}\special{pa 292 -218}\special{pa 328 -167}%
+\special{pa 358 -114}\special{pa 382 -59}\special{pa 399 -3}\special{pa 410 53}\special{pa 413 108}%
+\special{pa 410 162}\special{pa 399 212}\special{pa 382 259}\special{pa 358 302}\special{pa 328 339}%
+\special{pa 292 371}\special{pa 251 396}\special{pa 207 415}\special{pa 158 426}\special{pa 107 430}%
+\special{pa 54 427}\special{pa 0 416}%
+\special{fp}%
+\special{pa 0 -416}\special{pa 61 -407}\special{pa 120 -391}\special{pa 177 -368}%
+\special{pa 232 -339}\special{pa 282 -304}\special{pa 328 -264}\special{pa 368 -220}%
+\special{pa 402 -171}\special{pa 428 -120}\special{pa 448 -66}\special{pa 460 -12}%
+\special{pa 464 43}\special{pa 460 97}\special{pa 448 149}\special{pa 428 199}\special{pa 402 245}%
+\special{pa 368 287}\special{pa 328 325}\special{pa 282 356}\special{pa 232 382}\special{pa 177 401}%
+\special{pa 120 413}\special{pa 61 418}\special{pa 0 416}%
+\special{fp}%
+\special{pa 0 -416}\special{pa 61 -416}\special{pa 121 -409}\special{pa 179 -395}%
+\special{pa 234 -374}\special{pa 285 -347}\special{pa 332 -314}\special{pa 372 -275}%
+\special{pa 406 -232}\special{pa 433 -184}\special{pa 453 -134}\special{pa 465 -81}%
+\special{pa 469 -27}\special{pa 465 27}\special{pa 453 82}\special{pa 433 134}\special{pa 406 185}%
+\special{pa 372 232}\special{pa 332 275}\special{pa 285 314}\special{pa 234 347}\special{pa 179 374}%
+\special{pa 121 395}\special{pa 61 409}\special{pa 0 416}%
+\special{fp}%
+\special{pa 0 -416}\special{pa 56 -425}\special{pa 111 -427}\special{pa 164 -421}%
+\special{pa 214 -408}\special{pa 261 -388}\special{pa 303 -361}\special{pa 340 -328}%
+\special{pa 371 -290}\special{pa 396 -246}\special{pa 414 -199}\special{pa 425 -148}%
+\special{pa 428 -94}\special{pa 425 -39}\special{pa 414 17}\special{pa 396 72}\special{pa 371 127}%
+\special{pa 340 179}\special{pa 303 228}\special{pa 261 273}\special{pa 214 313}\special{pa 164 349}%
+\special{pa 111 378}\special{pa 56 400}\special{pa 0 416}%
+\special{fp}%
+\special{pa 0 -416}\special{pa 45 -433}\special{pa 89 -442}\special{pa 132 -443}\special{pa 173 -437}%
+\special{pa 210 -423}\special{pa 244 -402}\special{pa 274 -374}\special{pa 299 -340}%
+\special{pa 319 -300}\special{pa 334 -255}\special{pa 343 -205}\special{pa 346 -152}%
+\special{pa 343 -97}\special{pa 334 -39}\special{pa 319 19}\special{pa 299 76}\special{pa 274 133}%
+\special{pa 244 187}\special{pa 210 238}\special{pa 173 284}\special{pa 132 326}\special{pa 89 363}%
+\special{pa 45 393}\special{pa 0 416}%
+\special{fp}%
+\special{pa 0 -416}\special{pa 30 -438}\special{pa 59 -453}\special{pa 88 -459}\special{pa 115 -458}%
+\special{pa 140 -449}\special{pa 162 -432}\special{pa 182 -408}\special{pa 199 -377}%
+\special{pa 212 -340}\special{pa 221 -296}\special{pa 227 -248}\special{pa 229 -195}%
+\special{pa 227 -139}\special{pa 221 -81}\special{pa 212 -21}\special{pa 199 39}\special{pa 182 99}%
+\special{pa 162 156}\special{pa 140 211}\special{pa 115 263}\special{pa 88 310}\special{pa 59 352}%
+\special{pa 30 387}\special{pa 0 416}%
+\special{fp}%
+\special{pa 0 -416}\special{pa 12 -441}\special{pa 23 -459}\special{pa 35 -469}\special{pa 45 -470}%
+\special{pa 55 -464}\special{pa 64 -449}\special{pa 72 -427}\special{pa 78 -398}\special{pa 83 -362}%
+\special{pa 87 -319}\special{pa 90 -272}\special{pa 90 -219}\special{pa 90 -163}\special{pa 87 -104}%
+\special{pa 83 -43}\special{pa 78 18}\special{pa 72 80}\special{pa 64 139}\special{pa 55 197}%
+\special{pa 45 251}\special{pa 35 301}\special{pa 23 345}\special{pa 12 384}\special{pa 0 416}%
+\special{fp}%
+\special{pa 0 -416}\special{pa -7 -442}\special{pa -15 -460}\special{pa -22 -469}%
+\special{pa -29 -471}\special{pa -35 -465}\special{pa -41 -451}\special{pa -46 -429}%
+\special{pa -50 -400}\special{pa -53 -364}\special{pa -55 -322}\special{pa -57 -274}%
+\special{pa -57 -222}\special{pa -57 -165}\special{pa -55 -106}\special{pa -53 -45}%
+\special{pa -50 16}\special{pa -46 78}\special{pa -41 138}\special{pa -35 195}\special{pa -29 250}%
+\special{pa -22 300}\special{pa -15 345}\special{pa -7 384}\special{pa 0 416}%
+\special{fp}%
+\special{pa 0 -416}\special{pa -26 -439}\special{pa -52 -455}\special{pa -76 -462}%
+\special{pa -100 -462}\special{pa -121 -454}\special{pa -141 -438}\special{pa -158 -414}%
+\special{pa -173 -383}\special{pa -184 -346}\special{pa -193 -303}\special{pa -198 -255}%
+\special{pa -199 -202}\special{pa -198 -146}\special{pa -193 -88}\special{pa -184 -28}%
+\special{pa -173 33}\special{pa -158 93}\special{pa -141 151}\special{pa -121 207}%
+\special{pa -100 259}\special{pa -76 307}\special{pa -52 350}\special{pa -26 386}%
+\special{pa 0 416}%
+\special{fp}%
+\special{pa 0 -416}\special{pa -42 -434}\special{pa -83 -444}\special{pa -123 -447}%
+\special{pa -161 -442}\special{pa -196 -430}\special{pa -228 -410}\special{pa -255 -383}%
+\special{pa -279 -350}\special{pa -298 -310}\special{pa -311 -266}\special{pa -319 -216}%
+\special{pa -322 -163}\special{pa -319 -108}\special{pa -311 -50}\special{pa -298 8}%
+\special{pa -279 67}\special{pa -255 124}\special{pa -228 179}\special{pa -196 231}%
+\special{pa -161 279}\special{pa -123 322}\special{pa -83 360}\special{pa -42 391}%
+\special{pa 0 416}%
+\special{fp}%
+\special{pa 0 -416}\special{pa -54 -427}\special{pa -107 -430}\special{pa -158 -426}%
+\special{pa -207 -415}\special{pa -251 -396}\special{pa -292 -371}\special{pa -328 -339}%
+\special{pa -358 -302}\special{pa -382 -259}\special{pa -399 -212}\special{pa -410 -162}%
+\special{pa -413 -108}\special{pa -410 -53}\special{pa -399 3}\special{pa -382 59}%
+\special{pa -358 114}\special{pa -328 167}\special{pa -292 218}\special{pa -251 264}%
+\special{pa -207 306}\special{pa -158 343}\special{pa -107 374}\special{pa -54 399}%
+\special{pa 0 416}%
+\special{fp}%
+\special{pa 0 -416}\special{pa -61 -418}\special{pa -120 -413}\special{pa -177 -401}%
+\special{pa -232 -382}\special{pa -282 -356}\special{pa -328 -325}\special{pa -368 -287}%
+\special{pa -402 -245}\special{pa -428 -199}\special{pa -448 -149}\special{pa -460 -97}%
+\special{pa -464 -43}\special{pa -460 12}\special{pa -448 66}\special{pa -428 120}%
+\special{pa -402 171}\special{pa -368 220}\special{pa -328 264}\special{pa -282 304}%
+\special{pa -232 339}\special{pa -177 368}\special{pa -120 391}\special{pa -61 407}%
+\special{pa 0 416}%
+\special{fp}%
+\special{pa 0 -416}\special{pa -61 -409}\special{pa -121 -395}\special{pa -179 -374}%
+\special{pa -234 -347}\special{pa -285 -314}\special{pa -332 -275}\special{pa -372 -232}%
+\special{pa -406 -185}\special{pa -433 -134}\special{pa -453 -82}\special{pa -465 -27}%
+\special{pa -469 27}\special{pa -465 81}\special{pa -453 134}\special{pa -433 184}%
+\special{pa -406 232}\special{pa -372 275}\special{pa -332 314}\special{pa -285 347}%
+\special{pa -234 374}\special{pa -179 395}\special{pa -121 409}\special{pa -61 416}%
+\special{pa 0 416}%
+\special{fp}%
+\special{pa 0 -416}\special{pa -56 -400}\special{pa -111 -378}\special{pa -164 -349}%
+\special{pa -214 -313}\special{pa -261 -273}\special{pa -303 -228}\special{pa -340 -179}%
+\special{pa -371 -127}\special{pa -396 -72}\special{pa -414 -17}\special{pa -425 39}%
+\special{pa -428 94}\special{pa -425 148}\special{pa -414 199}\special{pa -396 246}%
+\special{pa -371 290}\special{pa -340 328}\special{pa -303 361}\special{pa -261 388}%
+\special{pa -214 408}\special{pa -164 421}\special{pa -111 427}\special{pa -56 425}%
+\special{pa 0 416}%
+\special{fp}%
+\special{pa 3 -419}\special{pa -3 -419}\special{pa -3 -414}\special{pa 3 -414}\special{pa 3 -419}%
+\special{sh 1}\special{fp}%
+\special{pa -67 -396}\special{pa -57 -389}\special{pa -42 -383}\special{pa -25 -378}%
+\special{pa -6 -376}\special{pa 13 -377}\special{pa 31 -380}\special{pa 47 -384}\special{pa 61 -391}%
+\special{pa 69 -399}\special{pa 74 -408}\special{pa 73 -417}\special{pa 67 -426}\special{pa 57 -434}%
+\special{pa 42 -440}\special{pa 25 -444}\special{pa 6 -446}\special{pa -13 -446}\special{pa -31 -443}%
+\special{pa -47 -438}\special{pa -61 -431}\special{pa -69 -423}\special{pa -74 -414}%
+\special{pa -73 -405}\special{pa -67 -396}%
+\special{fp}%
+\special{pa -132 -367}\special{pa -112 -352}\special{pa -84 -339}\special{pa -50 -331}%
+\special{pa -13 -327}\special{pa 25 -328}\special{pa 62 -333}\special{pa 94 -343}%
+\special{pa 120 -356}\special{pa 137 -372}\special{pa 145 -390}\special{pa 144 -408}%
+\special{pa 132 -425}\special{pa 112 -440}\special{pa 84 -452}\special{pa 50 -461}%
+\special{pa 13 -465}\special{pa -25 -464}\special{pa -62 -459}\special{pa -94 -449}%
+\special{pa -120 -436}\special{pa -137 -420}\special{pa -145 -402}\special{pa -144 -384}%
+\special{pa -132 -367}%
+\special{fp}%
+\special{pa -194 -328}\special{pa -164 -306}\special{pa -123 -288}\special{pa -73 -276}%
+\special{pa -19 -270}\special{pa 37 -271}\special{pa 91 -279}\special{pa 138 -293}%
+\special{pa 176 -313}\special{pa 202 -336}\special{pa 214 -362}\special{pa 211 -389}%
+\special{pa 194 -414}\special{pa 164 -436}\special{pa 123 -454}\special{pa 73 -466}%
+\special{pa 19 -472}\special{pa -37 -471}\special{pa -91 -463}\special{pa -138 -449}%
+\special{pa -176 -429}\special{pa -202 -406}\special{pa -214 -380}\special{pa -211 -353}%
+\special{pa -194 -328}%
+\special{fp}%
+\special{pa -252 -281}\special{pa -213 -252}\special{pa -159 -229}\special{pa -95 -213}%
+\special{pa -24 -206}\special{pa 48 -208}\special{pa 117 -218}\special{pa 178 -236}%
+\special{pa 227 -261}\special{pa 261 -292}\special{pa 277 -325}\special{pa 273 -360}%
+\special{pa 252 -392}\special{pa 213 -421}\special{pa 159 -444}\special{pa 95 -460}%
+\special{pa 24 -468}\special{pa -48 -466}\special{pa -117 -456}\special{pa -178 -437}%
+\special{pa -227 -412}\special{pa -261 -382}\special{pa -277 -348}\special{pa -273 -314}%
+\special{pa -252 -281}%
+\special{fp}%
+\special{pa -303 -228}\special{pa -256 -193}\special{pa -192 -165}\special{pa -114 -146}%
+\special{pa -29 -137}\special{pa 58 -139}\special{pa 141 -151}\special{pa 215 -173}%
+\special{pa 274 -204}\special{pa 314 -240}\special{pa 333 -281}\special{pa 329 -322}%
+\special{pa 303 -361}\special{pa 256 -396}\special{pa 192 -424}\special{pa 114 -443}%
+\special{pa 29 -452}\special{pa -58 -450}\special{pa -141 -438}\special{pa -215 -415}%
+\special{pa -274 -385}\special{pa -314 -348}\special{pa -333 -308}\special{pa -329 -267}%
+\special{pa -303 -228}%
+\special{fp}%
+\special{pa -346 -168}\special{pa -293 -129}\special{pa -219 -97}\special{pa -131 -75}%
+\special{pa -33 -65}\special{pa 66 -67}\special{pa 161 -81}\special{pa 246 -106}\special{pa 313 -141}%
+\special{pa 359 -183}\special{pa 381 -229}\special{pa 376 -276}\special{pa 346 -321}%
+\special{pa 293 -361}\special{pa 219 -393}\special{pa 131 -414}\special{pa 33 -425}%
+\special{pa -66 -423}\special{pa -161 -408}\special{pa -246 -383}\special{pa -313 -348}%
+\special{pa -359 -307}\special{pa -381 -261}\special{pa -376 -213}\special{pa -346 -168}%
+\special{fp}%
+\special{pa -382 -105}\special{pa -323 -61}\special{pa -242 -26}\special{pa -144 -2}%
+\special{pa -37 9}\special{pa 73 7}\special{pa 178 -9}\special{pa 270 -37}\special{pa 345 -75}%
+\special{pa 395 -121}\special{pa 419 -172}\special{pa 415 -223}\special{pa 382 -273}%
+\special{pa 323 -317}\special{pa 242 -352}\special{pa 144 -376}\special{pa 37 -387}%
+\special{pa -73 -385}\special{pa -178 -369}\special{pa -270 -341}\special{pa -345 -303}%
+\special{pa -395 -257}\special{pa -419 -206}\special{pa -415 -155}\special{pa -382 -105}%
+\special{fp}%
+\special{pa -407 -39}\special{pa -344 8}\special{pa -258 45}\special{pa -154 71}\special{pa -39 83}%
+\special{pa 78 81}\special{pa 190 64}\special{pa 289 34}\special{pa 368 -7}\special{pa 422 -56}%
+\special{pa 448 -110}\special{pa 443 -165}\special{pa 407 -218}\special{pa 344 -265}%
+\special{pa 258 -303}\special{pa 154 -328}\special{pa 39 -340}\special{pa -78 -338}%
+\special{pa -190 -321}\special{pa -289 -291}\special{pa -368 -251}\special{pa -422 -201}%
+\special{pa -448 -147}\special{pa -443 -92}\special{pa -407 -39}%
+\special{fp}%
+\special{pa -423 28}\special{pa -358 77}\special{pa -268 115}\special{pa -160 142}%
+\special{pa -41 155}\special{pa 81 152}\special{pa 197 135}\special{pa 300 104}\special{pa 382 61}%
+\special{pa 438 10}\special{pa 465 -46}\special{pa 460 -103}\special{pa 423 -158}%
+\special{pa 358 -207}\special{pa 268 -246}\special{pa 160 -272}\special{pa 41 -285}%
+\special{pa -81 -282}\special{pa -197 -265}\special{pa -300 -234}\special{pa -382 -192}%
+\special{pa -438 -141}\special{pa -465 -84}\special{pa -460 -27}\special{pa -423 28}%
+\special{fp}%
+\special{pa -428 94}\special{pa -362 143}\special{pa -271 183}\special{pa -162 210}%
+\special{pa -41 222}\special{pa 82 220}\special{pa 199 202}\special{pa 304 171}\special{pa 387 128}%
+\special{pa 444 76}\special{pa 471 20}\special{pa 465 -39}\special{pa 428 -94}\special{pa 362 -143}%
+\special{pa 271 -183}\special{pa 162 -210}\special{pa 41 -222}\special{pa -82 -220}%
+\special{pa -199 -202}\special{pa -304 -171}\special{pa -387 -128}\special{pa -444 -76}%
+\special{pa -471 -20}\special{pa -465 39}\special{pa -428 94}%
+\special{fp}%
+\special{pa -423 158}\special{pa -358 207}\special{pa -268 246}\special{pa -160 272}%
+\special{pa -41 285}\special{pa 81 282}\special{pa 197 265}\special{pa 300 234}\special{pa 382 192}%
+\special{pa 438 141}\special{pa 465 84}\special{pa 460 27}\special{pa 423 -28}\special{pa 358 -77}%
+\special{pa 268 -115}\special{pa 160 -142}\special{pa 41 -155}\special{pa -81 -152}%
+\special{pa -197 -135}\special{pa -300 -104}\special{pa -382 -61}\special{pa -438 -10}%
+\special{pa -465 46}\special{pa -460 103}\special{pa -423 158}%
+\special{fp}%
+\special{pa -407 218}\special{pa -344 265}\special{pa -258 303}\special{pa -154 328}%
+\special{pa -39 340}\special{pa 78 338}\special{pa 190 321}\special{pa 289 291}\special{pa 368 251}%
+\special{pa 422 201}\special{pa 448 147}\special{pa 443 92}\special{pa 407 39}\special{pa 344 -8}%
+\special{pa 258 -45}\special{pa 154 -71}\special{pa 39 -83}\special{pa -78 -81}\special{pa -190 -64}%
+\special{pa -289 -34}\special{pa -368 7}\special{pa -422 56}\special{pa -448 110}%
+\special{pa -443 165}\special{pa -407 218}%
+\special{fp}%
+\special{pa -382 273}\special{pa -323 317}\special{pa -242 352}\special{pa -144 376}%
+\special{pa -37 387}\special{pa 73 385}\special{pa 178 369}\special{pa 270 341}\special{pa 345 303}%
+\special{pa 395 257}\special{pa 419 206}\special{pa 415 155}\special{pa 382 105}\special{pa 323 61}%
+\special{pa 242 26}\special{pa 144 2}\special{pa 37 -9}\special{pa -73 -7}\special{pa -178 9}%
+\special{pa -270 37}\special{pa -345 75}\special{pa -395 121}\special{pa -419 172}%
+\special{pa -415 223}\special{pa -382 273}%
+\special{fp}%
+\special{pa -346 321}\special{pa -293 361}\special{pa -219 393}\special{pa -131 414}%
+\special{pa -33 425}\special{pa 66 423}\special{pa 161 408}\special{pa 246 383}\special{pa 313 348}%
+\special{pa 359 307}\special{pa 381 261}\special{pa 376 213}\special{pa 346 168}\special{pa 293 129}%
+\special{pa 219 97}\special{pa 131 75}\special{pa 33 65}\special{pa -66 67}\special{pa -161 81}%
+\special{pa -246 106}\special{pa -313 141}\special{pa -359 183}\special{pa -381 229}%
+\special{pa -376 276}\special{pa -346 321}%
+\special{fp}%
+\special{pa -303 361}\special{pa -256 396}\special{pa -192 424}\special{pa -114 443}%
+\special{pa -29 452}\special{pa 58 450}\special{pa 141 438}\special{pa 215 415}\special{pa 274 385}%
+\special{pa 314 348}\special{pa 333 308}\special{pa 329 267}\special{pa 303 228}\special{pa 256 193}%
+\special{pa 192 165}\special{pa 114 146}\special{pa 29 137}\special{pa -58 139}\special{pa -141 151}%
+\special{pa -215 173}\special{pa -274 204}\special{pa -314 240}\special{pa -333 281}%
+\special{pa -329 322}\special{pa -303 361}%
+\special{fp}%
+\special{pa -252 392}\special{pa -213 421}\special{pa -159 444}\special{pa -95 460}%
+\special{pa -24 468}\special{pa 48 466}\special{pa 117 456}\special{pa 178 437}\special{pa 227 412}%
+\special{pa 261 382}\special{pa 277 348}\special{pa 273 314}\special{pa 252 281}\special{pa 213 252}%
+\special{pa 159 229}\special{pa 95 213}\special{pa 24 206}\special{pa -48 208}\special{pa -117 218}%
+\special{pa -178 236}\special{pa -227 261}\special{pa -261 292}\special{pa -277 325}%
+\special{pa -273 360}\special{pa -252 392}%
+\special{fp}%
+\special{pa -194 414}\special{pa -164 436}\special{pa -123 454}\special{pa -73 466}%
+\special{pa -19 472}\special{pa 37 471}\special{pa 91 463}\special{pa 138 449}\special{pa 176 429}%
+\special{pa 202 406}\special{pa 214 380}\special{pa 211 353}\special{pa 194 328}\special{pa 164 306}%
+\special{pa 123 288}\special{pa 73 276}\special{pa 19 270}\special{pa -37 271}\special{pa -91 279}%
+\special{pa -138 293}\special{pa -176 313}\special{pa -202 336}\special{pa -214 362}%
+\special{pa -211 389}\special{pa -194 414}%
+\special{fp}%
+\special{pa -132 425}\special{pa -112 440}\special{pa -84 452}\special{pa -50 461}%
+\special{pa -13 465}\special{pa 25 464}\special{pa 62 459}\special{pa 94 449}\special{pa 120 436}%
+\special{pa 137 420}\special{pa 145 402}\special{pa 144 384}\special{pa 132 367}\special{pa 112 352}%
+\special{pa 84 339}\special{pa 50 331}\special{pa 13 327}\special{pa -25 328}\special{pa -62 333}%
+\special{pa -94 343}\special{pa -120 356}\special{pa -137 372}\special{pa -145 390}%
+\special{pa -144 408}\special{pa -132 425}%
+\special{fp}%
+\special{pa -67 426}\special{pa -57 434}\special{pa -42 440}\special{pa -25 444}\special{pa -6 446}%
+\special{pa 13 446}\special{pa 31 443}\special{pa 47 438}\special{pa 61 431}\special{pa 69 423}%
+\special{pa 74 414}\special{pa 73 405}\special{pa 67 396}\special{pa 57 389}\special{pa 42 383}%
+\special{pa 25 378}\special{pa 6 376}\special{pa -13 377}\special{pa -31 380}\special{pa -47 384}%
+\special{pa -61 391}\special{pa -69 399}\special{pa -74 408}\special{pa -73 417}\special{pa -67 426}%
+\special{fp}%
+\special{pa 0 416}\special{pa 0 416}\special{pa 0 416}\special{pa 0 416}\special{pa 0 416}%
+\special{pa 0 416}\special{pa 0 416}\special{pa 0 416}\special{pa 0 416}\special{pa 0 416}%
+\special{pa 0 416}\special{pa 0 416}\special{pa 0 416}\special{pa 0 416}\special{pa 0 416}%
+\special{pa 0 416}\special{pa 0 416}\special{pa 0 416}\special{pa 0 416}%
+\special{fp}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/sfbdpara01.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/sfbdpara01.tex
new file mode 100644
index 0000000000..d96415aa03
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/sfbdpara01.tex
@@ -0,0 +1,72 @@
+%%% /Users/Hannya/ketcindy/ketwork/template.tex 2016-8-22 17:52
+%%% template.sce 2016-8-22 17:52
+{\unitlength=5mm%
+\begin{picture}%
+( 7.04000, 9.33000)( -3.57000, -4.74000)%
+\special{pn 8}%
+%
+\special{pa -260 -469}\special{pa -253 -441}\special{pa -250 -430}\special{pa -240 -393}%
+\special{pa -235 -374}\special{pa -231 -357}\special{pa -221 -323}\special{pa -218 -312}%
+\special{pa -211 -291}\special{pa -201 -261}\special{pa -191 -232}\special{pa -182 -206}%
+\special{pa -172 -179}\special{pa -165 -161}\special{pa -162 -156}\special{pa -152 -134}%
+\special{pa -147 -122}\special{pa -143 -114}\special{pa -133 -95}\special{pa -129 -89}%
+\special{pa -123 -78}\special{pa -113 -63}\special{pa -104 -50}\special{pa -94 -38}%
+\special{pa -84 -28}\special{pa -76 -21}\special{pa -65 -13}\special{pa -59 -10}\special{pa -45 -5}%
+\special{pa -35 -4}\special{pa -26 -4}\special{pa -16 -6}\special{pa -6 -9}\special{pa 4 -15}%
+\special{pa 12 -20}\special{pa 23 -30}\special{pa 30 -37}\special{pa 33 -41}\special{pa 43 -53}%
+\special{pa 47 -59}\special{pa 53 -67}\special{pa 62 -82}\special{pa 65 -87}\special{pa 72 -100}%
+\special{pa 82 -119}\special{pa 92 -139}\special{pa 100 -159}\special{pa 111 -186}%
+\special{pa 118 -203}\special{pa 121 -211}\special{pa 131 -239}\special{pa 136 -253}%
+\special{pa 140 -268}\special{pa 150 -299}\special{pa 153 -309}\special{pa 160 -331}%
+\special{pa 170 -366}\special{pa 179 -402}\special{pa 188 -436}\special{pa 199 -479}%
+\special{pa 206 -509}\special{pa 209 -520}\special{pa 219 -563}%
+\special{fp}%
+\special{pa -535 -55}\special{pa -527 -107}\special{pa -520 -158}\special{pa -512 -206}%
+\special{pa -505 -252}\special{pa -497 -295}\special{pa -489 -336}\special{pa -482 -375}%
+\special{pa -474 -411}\special{pa -466 -445}\special{pa -459 -477}\special{pa -451 -506}%
+\special{pa -444 -533}\special{pa -436 -558}\special{pa -428 -580}\special{pa -421 -600}%
+\special{pa -413 -617}\special{pa -405 -632}\special{pa -398 -645}\special{pa -390 -656}%
+\special{pa -383 -664}\special{pa -375 -669}\special{pa -367 -673}\special{pa -360 -674}%
+\special{pa -352 -672}\special{pa -345 -669}\special{pa -337 -663}\special{pa -329 -654}%
+\special{pa -322 -643}\special{pa -314 -630}\special{pa -306 -615}\special{pa -299 -597}%
+\special{pa -291 -577}\special{pa -284 -554}\special{pa -276 -529}\special{pa -268 -502}%
+\special{pa -261 -472}\special{pa -253 -440}\special{pa -245 -406}\special{pa -238 -369}%
+\special{pa -230 -330}\special{pa -223 -289}\special{pa -215 -245}\special{pa -207 -199}%
+\special{pa -200 -151}\special{pa -192 -100}\special{pa -184 -47}\special{pa -177 9}%
+\special{pa -169 67}\special{pa -162 127}\special{pa -154 190}%
+\special{fp}%
+\special{pa 535 55}\special{pa 521 115}\special{pa 508 173}\special{pa 494 229}\special{pa 480 282}%
+\special{pa 466 333}\special{pa 452 382}\special{pa 439 428}\special{pa 425 472}\special{pa 411 514}%
+\special{pa 397 553}\special{pa 383 590}\special{pa 370 624}\special{pa 356 656}\special{pa 342 686}%
+\special{pa 328 714}\special{pa 315 739}\special{pa 301 761}\special{pa 287 782}\special{pa 273 800}%
+\special{pa 259 815}\special{pa 246 829}\special{pa 232 840}\special{pa 218 848}\special{pa 204 855}%
+\special{pa 191 858}\special{pa 177 860}\special{pa 163 859}\special{pa 149 856}\special{pa 135 850}%
+\special{pa 122 842}\special{pa 108 832}\special{pa 94 820}\special{pa 80 805}\special{pa 66 787}%
+\special{pa 53 768}\special{pa 39 746}\special{pa 25 721}\special{pa 11 694}\special{pa -2 665}%
+\special{pa -16 634}\special{pa -30 600}\special{pa -44 564}\special{pa -58 525}\special{pa -71 484}%
+\special{pa -85 441}\special{pa -99 396}\special{pa -113 348}\special{pa -126 297}%
+\special{pa -140 245}\special{pa -154 190}%
+\special{fp}%
+\special{pa 219 -563}\special{pa 223 -580}\special{pa 230 -612}\special{pa 238 -641}%
+\special{pa 245 -668}\special{pa 253 -693}\special{pa 261 -715}\special{pa 268 -735}%
+\special{pa 276 -752}\special{pa 284 -768}\special{pa 291 -780}\special{pa 299 -791}%
+\special{pa 306 -799}\special{pa 314 -804}\special{pa 322 -808}\special{pa 329 -809}%
+\special{pa 337 -808}\special{pa 345 -804}\special{pa 352 -798}\special{pa 360 -789}%
+\special{pa 367 -779}\special{pa 375 -765}\special{pa 383 -750}\special{pa 390 -732}%
+\special{pa 398 -712}\special{pa 405 -689}\special{pa 413 -664}\special{pa 421 -637}%
+\special{pa 428 -608}\special{pa 436 -576}\special{pa 444 -541}\special{pa 451 -505}%
+\special{pa 459 -465}\special{pa 466 -424}\special{pa 474 -380}\special{pa 482 -334}%
+\special{pa 489 -286}\special{pa 497 -235}\special{pa 505 -182}\special{pa 512 -126}%
+\special{pa 520 -68}\special{pa 527 -8}\special{pa 535 55}%
+\special{fp}%
+\special{pa -66 494}\special{pa -80 517}\special{pa -94 537}\special{pa -108 555}%
+\special{pa -122 571}\special{pa -135 584}\special{pa -149 595}\special{pa -163 604}%
+\special{pa -177 610}\special{pa -191 614}\special{pa -204 616}\special{pa -218 615}%
+\special{pa -232 612}\special{pa -246 606}\special{pa -259 598}\special{pa -273 588}%
+\special{pa -287 575}\special{pa -301 560}\special{pa -315 543}\special{pa -328 523}%
+\special{pa -342 501}\special{pa -356 477}\special{pa -370 450}\special{pa -383 421}%
+\special{pa -397 390}\special{pa -411 356}\special{pa -425 320}\special{pa -439 281}%
+\special{pa -452 240}\special{pa -466 197}\special{pa -480 151}\special{pa -494 103}%
+\special{pa -508 53}\special{pa -521 0}\special{pa -535 -55}%
+\special{fp}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/sfbdpara02.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/sfbdpara02.tex
new file mode 100644
index 0000000000..dcf3cd7f9a
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/sfbdpara02.tex
@@ -0,0 +1,91 @@
+%%% /Users/Hannya/ketcindy/ketwork/template.tex 2016-8-22 17:51
+%%% template.sce 2016-8-22 17:51
+{\unitlength=5mm%
+\begin{picture}%
+( 7.04000, 9.33000)( -3.57000, -4.74000)%
+\special{pn 8}%
+%
+\special{pn 16}%
+\special{pa -260 -469}\special{pa -253 -441}\special{pa -250 -430}\special{pa -240 -393}%
+\special{pa -235 -374}\special{pa -231 -357}\special{pa -221 -323}\special{pa -218 -312}%
+\special{pa -211 -291}\special{pa -201 -261}\special{pa -191 -232}\special{pa -182 -206}%
+\special{pa -172 -179}\special{pa -165 -161}\special{pa -162 -156}\special{pa -152 -134}%
+\special{pa -147 -122}\special{pa -143 -114}\special{pa -133 -95}\special{pa -129 -89}%
+\special{pa -123 -78}\special{pa -113 -63}\special{pa -104 -50}\special{pa -94 -38}%
+\special{pa -84 -28}\special{pa -76 -21}\special{pa -65 -13}\special{pa -59 -10}\special{pa -45 -5}%
+\special{pa -35 -4}\special{pa -26 -4}\special{pa -16 -6}\special{pa -6 -9}\special{pa 4 -15}%
+\special{pa 12 -20}\special{pa 23 -30}\special{pa 30 -37}\special{pa 33 -41}\special{pa 43 -53}%
+\special{pa 47 -59}\special{pa 53 -67}\special{pa 62 -82}\special{pa 65 -87}\special{pa 72 -100}%
+\special{pa 82 -119}\special{pa 92 -139}\special{pa 100 -159}\special{pa 111 -186}%
+\special{pa 118 -203}\special{pa 121 -211}\special{pa 131 -239}\special{pa 136 -253}%
+\special{pa 140 -268}\special{pa 150 -299}\special{pa 153 -309}\special{pa 160 -331}%
+\special{pa 170 -366}\special{pa 179 -402}\special{pa 188 -436}\special{pa 199 -479}%
+\special{pa 206 -509}\special{pa 209 -520}\special{pa 219 -563}%
+\special{fp}%
+\special{pa -535 -55}\special{pa -527 -107}\special{pa -520 -158}\special{pa -512 -206}%
+\special{pa -505 -252}\special{pa -497 -295}\special{pa -489 -336}\special{pa -482 -375}%
+\special{pa -474 -411}\special{pa -466 -445}\special{pa -459 -477}\special{pa -451 -506}%
+\special{pa -444 -533}\special{pa -436 -558}\special{pa -428 -580}\special{pa -421 -600}%
+\special{pa -413 -617}\special{pa -405 -632}\special{pa -398 -645}\special{pa -390 -656}%
+\special{pa -383 -664}\special{pa -375 -669}\special{pa -367 -673}\special{pa -360 -674}%
+\special{pa -352 -672}\special{pa -345 -669}\special{pa -337 -663}\special{pa -329 -654}%
+\special{pa -322 -643}\special{pa -314 -630}\special{pa -306 -615}\special{pa -299 -597}%
+\special{pa -291 -577}\special{pa -284 -554}\special{pa -276 -529}\special{pa -268 -502}%
+\special{pa -261 -472}\special{pa -253 -440}\special{pa -245 -406}\special{pa -238 -369}%
+\special{pa -230 -330}\special{pa -223 -289}\special{pa -215 -245}\special{pa -207 -199}%
+\special{pa -200 -151}\special{pa -192 -100}\special{pa -184 -47}\special{pa -177 9}%
+\special{pa -169 67}\special{pa -162 127}\special{pa -154 190}%
+\special{fp}%
+\special{pa 535 55}\special{pa 521 115}\special{pa 508 173}\special{pa 494 229}\special{pa 480 282}%
+\special{pa 466 333}\special{pa 452 382}\special{pa 439 428}\special{pa 425 472}\special{pa 411 514}%
+\special{pa 397 553}\special{pa 383 590}\special{pa 370 624}\special{pa 356 656}\special{pa 342 686}%
+\special{pa 328 714}\special{pa 315 739}\special{pa 301 761}\special{pa 287 782}\special{pa 273 800}%
+\special{pa 259 815}\special{pa 246 829}\special{pa 232 840}\special{pa 218 848}\special{pa 204 855}%
+\special{pa 191 858}\special{pa 177 860}\special{pa 163 859}\special{pa 149 856}\special{pa 135 850}%
+\special{pa 122 842}\special{pa 108 832}\special{pa 94 820}\special{pa 80 805}\special{pa 66 787}%
+\special{pa 53 768}\special{pa 39 746}\special{pa 25 721}\special{pa 11 694}\special{pa -2 665}%
+\special{pa -16 634}\special{pa -30 600}\special{pa -44 564}\special{pa -58 525}\special{pa -71 484}%
+\special{pa -85 441}\special{pa -99 396}\special{pa -113 348}\special{pa -126 297}%
+\special{pa -140 245}\special{pa -154 190}%
+\special{fp}%
+\special{pa 219 -563}\special{pa 223 -580}\special{pa 230 -612}\special{pa 238 -641}%
+\special{pa 245 -668}\special{pa 253 -693}\special{pa 261 -715}\special{pa 268 -735}%
+\special{pa 276 -752}\special{pa 284 -768}\special{pa 291 -780}\special{pa 299 -791}%
+\special{pa 306 -799}\special{pa 314 -804}\special{pa 322 -808}\special{pa 329 -809}%
+\special{pa 337 -808}\special{pa 345 -804}\special{pa 352 -798}\special{pa 360 -789}%
+\special{pa 367 -779}\special{pa 375 -765}\special{pa 383 -750}\special{pa 390 -732}%
+\special{pa 398 -712}\special{pa 405 -689}\special{pa 413 -664}\special{pa 421 -637}%
+\special{pa 428 -608}\special{pa 436 -576}\special{pa 444 -541}\special{pa 451 -505}%
+\special{pa 459 -465}\special{pa 466 -424}\special{pa 474 -380}\special{pa 482 -334}%
+\special{pa 489 -286}\special{pa 497 -235}\special{pa 505 -182}\special{pa 512 -126}%
+\special{pa 520 -68}\special{pa 527 -8}\special{pa 535 55}%
+\special{fp}%
+\special{pa -66 494}\special{pa -80 517}\special{pa -94 537}\special{pa -108 555}%
+\special{pa -122 571}\special{pa -135 584}\special{pa -149 595}\special{pa -163 604}%
+\special{pa -177 610}\special{pa -191 614}\special{pa -204 616}\special{pa -218 615}%
+\special{pa -232 612}\special{pa -246 606}\special{pa -259 598}\special{pa -273 588}%
+\special{pa -287 575}\special{pa -301 560}\special{pa -315 543}\special{pa -328 523}%
+\special{pa -342 501}\special{pa -356 477}\special{pa -370 450}\special{pa -383 421}%
+\special{pa -397 390}\special{pa -411 356}\special{pa -425 320}\special{pa -439 281}%
+\special{pa -452 240}\special{pa -466 197}\special{pa -480 151}\special{pa -494 103}%
+\special{pa -508 53}\special{pa -521 0}\special{pa -535 -55}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 8}%
+\special{pa 153 -186}\special{pa 155 -194}\special{fp}\special{pa 159 -223}\special{pa 160 -231}\special{fp}%
+\special{pa 164 -261}\special{pa 166 -269}\special{fp}\special{pa 170 -298}\special{pa 171 -306}\special{fp}%
+\special{pa 176 -335}\special{pa 177 -343}\special{fp}\special{pa 182 -373}\special{pa 183 -381}\special{fp}%
+\special{pa 189 -410}\special{pa 190 -418}\special{fp}\special{pa 195 -447}\special{pa 197 -455}\special{fp}%
+\special{pa 202 -485}\special{pa 204 -492}\special{fp}\special{pa 210 -522}\special{pa 211 -529}\special{fp}%
+\special{pa 218 -559}\special{pa 219 -566}\special{fp}\special{pn 8}%
+\special{pa 155 -194}\special{pa 153 -186}\special{fp}\special{pa 146 -155}\special{pa 144 -147}\special{fp}%
+\special{pa 137 -116}\special{pa 135 -108}\special{fp}\special{pa 128 -77}\special{pa 126 -69}\special{fp}%
+\special{pa 118 -38}\special{pa 116 -30}\special{fp}\special{pa 108 1}\special{pa 106 9}\special{fp}%
+\special{pa 98 40}\special{pa 96 48}\special{fp}\special{pa 88 79}\special{pa 86 86}\special{fp}%
+\special{pa 77 117}\special{pa 75 125}\special{fp}\special{pa 66 156}\special{pa 64 163}\special{fp}%
+\special{pa 54 194}\special{pa 52 202}\special{fp}\special{pa 42 232}\special{pa 40 240}\special{fp}%
+\special{pa 30 270}\special{pa 27 278}\special{fp}\special{pa 16 308}\special{pa 14 315}\special{fp}%
+\special{pa 2 345}\special{pa -1 353}\special{fp}\special{pa -13 383}\special{pa -16 390}\special{fp}%
+\special{pa -29 419}\special{pa -32 427}\special{fp}\special{pa -46 455}\special{pa -49 463}\special{fp}%
+\special{pa -65 491}\special{pa -68 498}\special{fp}\special{pn 8}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/sfbdpara03.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/sfbdpara03.tex
new file mode 100644
index 0000000000..15121319fe
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/sfbdpara03.tex
@@ -0,0 +1,42 @@
+%%% /Users/Hannya/ketcindy/ketwork/template.tex 2016-8-22 17:46
+%%% template.sce 2016-8-22 17:46
+{\unitlength=6mm%
+\begin{picture}%
+( 6.00000, 6.59000)( -3.00000, -2.00000)%
+\special{pn 8}%
+%
+\special{pa 470 -16}\special{pa 461 -52}\special{pa 451 -87}\special{pa 441 -121}%
+\special{pa 432 -154}\special{pa 422 -187}\special{pa 412 -219}\special{pa 402 -250}%
+\special{pa 393 -281}\special{pa 383 -311}\special{pa 373 -340}\special{pa 364 -368}%
+\special{pa 354 -396}\special{pa 344 -423}\special{pa 334 -449}\special{pa 325 -474}%
+\special{pa 315 -499}\special{pa 305 -523}\special{pa 296 -546}\special{pa 286 -568}%
+\special{pa 276 -590}\special{pa 266 -611}\special{pa 256 -631}\special{pa 247 -651}%
+\special{pa 240 -664}\special{pa 237 -669}\special{pa 227 -687}\special{pa 217 -705}%
+\special{pa 207 -721}\special{pa 197 -737}\special{pa 188 -752}\special{pa 178 -767}%
+\special{pa 168 -780}\special{pa 158 -793}\special{pa 148 -805}\special{pa 138 -816}%
+\special{pa 127 -827}\special{pa 117 -837}\special{pa 107 -846}\special{pa 96 -855}%
+\special{pa 85 -863}\special{pa 74 -870}\special{pa 63 -876}\special{pa 53 -880}\special{pa 41 -885}%
+\special{pa 32 -888}\special{pa 24 -889}\special{pa 18 -890}\special{pa 10 -891}\special{pa -1 -891}%
+\special{pa -13 -891}\special{pa -19 -890}\special{pa -26 -889}\special{pa -35 -887}%
+\special{pa -45 -883}\special{pa -59 -878}\special{pa -74 -870}\special{pa -85 -863}%
+\special{pa -96 -855}\special{pa -107 -846}\special{pa -117 -837}\special{pa -127 -827}%
+\special{pa -137 -817}\special{pa -148 -805}\special{pa -158 -793}\special{pa -165 -783}%
+\special{pa -178 -767}\special{pa -188 -752}\special{pa -197 -737}\special{pa -207 -721}%
+\special{pa -217 -705}\special{pa -227 -687}\special{pa -237 -669}\special{pa -247 -651}%
+\special{pa -256 -631}\special{pa -266 -611}\special{pa -276 -590}\special{pa -286 -568}%
+\special{pa -296 -546}\special{pa -305 -523}\special{pa -315 -499}\special{pa -325 -474}%
+\special{pa -327 -468}\special{pa -334 -449}\special{pa -344 -422}\special{pa -354 -396}%
+\special{pa -364 -368}\special{pa -373 -340}\special{pa -383 -311}\special{pa -393 -281}%
+\special{pa -402 -250}\special{pa -412 -219}\special{pa -422 -187}\special{pa -432 -154}%
+\special{pa -441 -121}\special{pa -451 -87}\special{pa -461 -52}\special{pa -470 -16}%
+\special{fp}%
+\special{pa -413 81}\special{pa -382 99}\special{pa -344 115}\special{pa -300 129}%
+\special{pa -252 142}\special{pa -200 152}\special{pa -145 159}\special{pa -87 165}%
+\special{pa -28 167}\special{pa 31 167}\special{pa 90 164}\special{pa 147 159}\special{pa 202 151}%
+\special{pa 254 141}\special{pa 302 129}\special{pa 345 114}\special{pa 383 98}\special{pa 415 80}%
+\special{pa 440 61}\special{pa 458 41}\special{pa 469 21}\special{pa 472 0}\special{pa 470 -16}%
+\special{fp}%
+\special{pa -469 -21}\special{pa -472 0}\special{pa -469 21}\special{pa -457 42}\special{pa -439 62}%
+\special{pa -413 81}%
+\special{fp}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/sfbdpara04.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/sfbdpara04.tex
new file mode 100644
index 0000000000..4ea7e247a6
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/sfbdpara04.tex
@@ -0,0 +1,51 @@
+%%% /Users/Hannya/ketcindy/ketwork/template.tex 2016-8-22 17:48
+%%% template.sce 2016-8-22 17:48
+{\unitlength=6mm%
+\begin{picture}%
+( 6.00000, 6.59000)( -3.00000, -2.00000)%
+\special{pn 8}%
+%
+\special{pa 470 -16}\special{pa 461 -52}\special{pa 451 -87}\special{pa 441 -121}%
+\special{pa 432 -154}\special{pa 422 -187}\special{pa 412 -219}\special{pa 402 -250}%
+\special{pa 393 -281}\special{pa 383 -311}\special{pa 373 -340}\special{pa 364 -368}%
+\special{pa 354 -396}\special{pa 344 -423}\special{pa 334 -449}\special{pa 325 -474}%
+\special{pa 315 -499}\special{pa 305 -523}\special{pa 296 -546}\special{pa 286 -568}%
+\special{pa 276 -590}\special{pa 266 -611}\special{pa 256 -631}\special{pa 247 -651}%
+\special{pa 240 -664}\special{pa 237 -669}\special{pa 227 -687}\special{pa 217 -705}%
+\special{pa 207 -721}\special{pa 197 -737}\special{pa 188 -752}\special{pa 178 -767}%
+\special{pa 168 -780}\special{pa 158 -793}\special{pa 148 -805}\special{pa 138 -816}%
+\special{pa 127 -827}\special{pa 117 -837}\special{pa 107 -846}\special{pa 96 -855}%
+\special{pa 85 -863}\special{pa 74 -870}\special{pa 63 -876}\special{pa 53 -880}\special{pa 41 -885}%
+\special{pa 32 -888}\special{pa 24 -889}\special{pa 18 -890}\special{pa 10 -891}\special{pa -1 -891}%
+\special{pa -13 -891}\special{pa -19 -890}\special{pa -26 -889}\special{pa -35 -887}%
+\special{pa -45 -883}\special{pa -59 -878}\special{pa -74 -870}\special{pa -85 -863}%
+\special{pa -96 -855}\special{pa -107 -846}\special{pa -117 -837}\special{pa -127 -827}%
+\special{pa -137 -817}\special{pa -148 -805}\special{pa -158 -793}\special{pa -165 -783}%
+\special{pa -178 -767}\special{pa -188 -752}\special{pa -197 -737}\special{pa -207 -721}%
+\special{pa -217 -705}\special{pa -227 -687}\special{pa -237 -669}\special{pa -247 -651}%
+\special{pa -256 -631}\special{pa -266 -611}\special{pa -276 -590}\special{pa -286 -568}%
+\special{pa -296 -546}\special{pa -305 -523}\special{pa -315 -499}\special{pa -325 -474}%
+\special{pa -327 -468}\special{pa -334 -449}\special{pa -344 -422}\special{pa -354 -396}%
+\special{pa -364 -368}\special{pa -373 -340}\special{pa -383 -311}\special{pa -393 -281}%
+\special{pa -402 -250}\special{pa -412 -219}\special{pa -422 -187}\special{pa -432 -154}%
+\special{pa -441 -121}\special{pa -451 -87}\special{pa -461 -52}\special{pa -470 -16}%
+\special{fp}%
+\special{pa -413 81}\special{pa -382 99}\special{pa -344 115}\special{pa -300 129}%
+\special{pa -252 142}\special{pa -200 152}\special{pa -145 159}\special{pa -87 165}%
+\special{pa -28 167}\special{pa 31 167}\special{pa 90 164}\special{pa 147 159}\special{pa 202 151}%
+\special{pa 254 141}\special{pa 302 129}\special{pa 345 114}\special{pa 383 98}\special{pa 415 80}%
+\special{pa 440 61}\special{pa 458 41}\special{pa 469 21}\special{pa 472 0}\special{pa 470 -16}%
+\special{fp}%
+\special{pa -469 -21}\special{pa -472 0}\special{pa -469 21}\special{pa -457 42}\special{pa -439 62}%
+\special{pa -413 81}%
+\special{fp}%
+\special{pa 470 -16}\special{pa 469 -21}\special{pa 457 -42}\special{pa 451 -48}\special{fp}%
+\special{pa 423 -74}\special{pa 413 -81}\special{pa 391 -94}\special{fp}\special{pa 356 -109}\special{pa 344 -115}\special{pa 321 -123}\special{fp}%
+\special{pa 284 -133}\special{pa 252 -142}\special{pa 248 -143}\special{fp}\special{pa 210 -150}\special{pa 200 -152}\special{pa 173 -156}\special{fp}%
+\special{pa 135 -160}\special{pa 97 -164}\special{fp}\special{pa 59 -166}\special{pa 28 -167}\special{pa 21 -167}\special{fp}%
+\special{pa -17 -167}\special{pa -31 -167}\special{pa -55 -166}\special{fp}\special{pa -92 -164}\special{pa -130 -161}\special{fp}%
+\special{pa -168 -156}\special{pa -202 -151}\special{pa -206 -151}\special{fp}\special{pa -243 -143}\special{pa -254 -141}\special{pa -280 -135}\special{fp}%
+\special{pa -316 -124}\special{pa -345 -114}\special{pa -352 -111}\special{fp}\special{pa -387 -96}\special{pa -415 -80}\special{pa -419 -77}\special{fp}%
+\special{pa -448 -52}\special{pa -458 -41}\special{pa -469 -21}\special{fp}%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/sfbdpara05.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/sfbdpara05.tex
new file mode 100644
index 0000000000..1de3e3649c
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/sfbdpara05.tex
@@ -0,0 +1,170 @@
+%%% /Users/hannya/Desktop/fig/sfbdpara05.tex
+%%% Generator=template3D.cdy
+{\unitlength=8mm%
+\begin{picture}%
+(10.34,6.13)(-3.36,-1.77)%
+\special{pn 8}%
+%
+\settowidth{\Width}{$x$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-3.3600000,-0.8900000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(3.3300000,-1.3900000){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+\settowidth{\Width}{$z$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$z$}\settodepth{\Depth}{$z$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(0.0000000,4.0100000){\hspace*{\Width}\raisebox{\Height}{$z$}}%
+%
+\special{pa 1234 -325}\special{pa -987 260}%
+\special{fp}%
+\special{pa -979 -410}\special{pa 979 410}%
+\special{fp}%
+\special{pa 0 557}\special{pa 0 -1188}%
+\special{fp}%
+\special{pa 620 -37}\special{pa 614 -48}\special{pa 613 -49}%
+\special{fp}%
+\special{pa 613 -49}\special{pa 608 -60}\special{pa 607 -60}%
+\special{fp}%
+\special{pa 607 -60}\special{pa 601 -71}\special{pa 595 -83}\special{pa 589 -94}%
+\special{pa 583 -106}\special{pa 577 -117}\special{pa 570 -129}\special{pa 564 -141}%
+\special{pa 558 -152}\special{pa 552 -164}\special{pa 546 -175}\special{pa 539 -187}%
+\special{pa 533 -198}\special{pa 527 -210}\special{pa 521 -221}\special{pa 515 -233}%
+\special{pa 508 -244}\special{pa 502 -256}\special{pa 496 -267}\special{pa 490 -279}%
+\special{pa 484 -290}\special{pa 477 -302}\special{pa 471 -313}\special{pa 465 -325}%
+\special{pa 459 -336}\special{pa 453 -348}\special{pa 446 -359}\special{pa 440 -371}%
+\special{pa 434 -382}\special{pa 428 -394}\special{pa 422 -405}\special{pa 415 -417}%
+\special{pa 409 -428}\special{pa 403 -440}\special{pa 397 -451}\special{pa 391 -463}%
+\special{pa 384 -474}\special{pa 378 -486}\special{pa 372 -497}\special{pa 366 -509}%
+\special{pa 360 -520}\special{pa 353 -532}\special{pa 347 -543}\special{pa 341 -555}%
+\special{pa 335 -567}\special{pa 329 -578}\special{pa 322 -590}\special{pa 316 -601}%
+\special{fp}%
+\special{pa 316 -601}\special{pa 316 -601}\special{pa 310 -612}%
+\special{fp}%
+\special{pa -620 -37}\special{pa -614 -48}\special{pa -614 -49}%
+\special{fp}%
+\special{pa -614 -49}\special{pa -608 -60}\special{pa -601 -71}\special{pa -595 -83}%
+\special{pa -589 -94}\special{pa -583 -106}\special{pa -577 -118}\special{pa -570 -129}%
+\special{pa -564 -141}\special{pa -558 -152}\special{pa -552 -164}\special{pa -546 -175}%
+\special{pa -539 -187}\special{pa -533 -198}\special{pa -527 -210}\special{pa -521 -221}%
+\special{pa -515 -233}\special{pa -508 -244}\special{pa -502 -256}\special{pa -496 -267}%
+\special{pa -490 -279}\special{pa -484 -290}\special{pa -477 -302}\special{pa -471 -313}%
+\special{pa -465 -325}\special{pa -459 -336}\special{pa -453 -348}\special{pa -446 -359}%
+\special{pa -440 -371}\special{pa -434 -382}\special{pa -428 -394}\special{pa -422 -405}%
+\special{pa -415 -417}\special{pa -409 -428}\special{pa -403 -440}\special{pa -397 -451}%
+\special{pa -391 -463}\special{pa -384 -474}\special{pa -378 -486}\special{pa -372 -497}%
+\special{pa -366 -509}\special{pa -360 -520}\special{pa -353 -532}\special{pa -347 -544}%
+\special{pa -341 -555}\special{pa -335 -567}\special{pa -329 -578}\special{pa -322 -590}%
+\special{pa -316 -601}%
+\special{fp}%
+\special{pa -316 -601}\special{pa -310 -612}%
+\special{fp}%
+\special{pa -494 130}\special{pa -441 150}\special{pa -381 167}\special{pa -315 181}%
+\special{pa -244 193}\special{pa -169 202}\special{pa -92 207}\special{pa -13 209}%
+\special{pa 66 208}\special{pa 144 204}\special{pa 220 196}\special{pa 292 185}%
+\special{pa 360 172}\special{pa 422 155}\special{pa 477 137}\special{pa 525 116}%
+\special{pa 564 93}\special{pa 595 69}\special{pa 616 43}\special{pa 628 17}%
+\special{pa 629 -9}\special{pa 621 -35}\special{pa 619 -37}%
+\special{fp}%
+\special{pa -619 -37}\special{pa -628 -17}\special{pa -629 9}\special{pa -621 35}%
+\special{pa -603 61}\special{pa -575 85}\special{pa -539 108}\special{pa -494 130}%
+\special{fp}%
+\special{pa -247 -529}\special{pa -220 -519}\special{pa -190 -511}\special{pa -157 -504}%
+\special{pa -122 -498}\special{pa -85 -493}\special{pa -46 -491}\special{pa -6 -490}%
+\special{pa 33 -490}\special{pa 72 -492}\special{pa 110 -496}\special{pa 146 -501}%
+\special{pa 180 -508}\special{pa 211 -516}\special{pa 238 -526}\special{pa 262 -536}%
+\special{pa 282 -548}\special{pa 297 -560}\special{pa 308 -572}\special{pa 314 -585}%
+\special{pa 315 -599}\special{pa 314 -600}%
+\special{fp}%
+\special{pa 314 -600}\special{pa 311 -612}\special{pa 310 -612}%
+\special{fp}%
+\special{pa 310 -612}\special{pa 301 -624}\special{pa 288 -637}\special{pa 269 -648}%
+\special{pa 247 -659}\special{pa 220 -669}\special{pa 190 -678}\special{pa 157 -685}%
+\special{pa 122 -691}\special{pa 85 -695}\special{pa 46 -698}\special{pa 6 -699}%
+\special{pa -33 -698}\special{pa -72 -696}\special{pa -110 -692}\special{pa -146 -687}%
+\special{pa -180 -680}\special{pa -211 -672}\special{pa -238 -662}\special{pa -262 -652}%
+\special{pa -282 -641}\special{pa -297 -629}\special{pa -308 -616}\special{pa -310 -612}%
+\special{fp}%
+\special{pa -310 -612}\special{pa -314 -603}\special{pa -314 -600}%
+\special{fp}%
+\special{pa -314 -600}\special{pa -315 -590}\special{pa -311 -577}\special{pa -301 -564}%
+\special{pa -288 -552}\special{pa -269 -540}\special{pa -247 -529}%
+\special{fp}%
+\special{pa 1948 14}\special{pa 1935 -9}\special{pa 1923 -32}\special{pa 1910 -55}%
+\special{pa 1898 -78}\special{pa 1886 -101}\special{pa 1873 -124}\special{pa 1861 -147}%
+\special{pa 1848 -170}\special{pa 1836 -193}\special{pa 1824 -216}\special{pa 1811 -239}%
+\special{pa 1799 -262}\special{pa 1786 -285}\special{pa 1774 -308}\special{pa 1762 -331}%
+\special{pa 1749 -354}\special{pa 1737 -377}\special{pa 1724 -401}\special{pa 1712 -424}%
+\special{pa 1699 -447}\special{pa 1687 -470}\special{pa 1675 -493}\special{pa 1662 -516}%
+\special{pa 1650 -539}\special{pa 1637 -562}\special{pa 1625 -585}\special{pa 1613 -608}%
+\special{pa 1600 -631}\special{pa 1588 -654}\special{pa 1575 -677}\special{pa 1563 -700}%
+\special{pa 1551 -723}\special{pa 1538 -746}\special{pa 1526 -769}\special{pa 1513 -792}%
+\special{pa 1501 -815}\special{pa 1489 -838}\special{pa 1476 -861}\special{pa 1464 -884}%
+\special{pa 1451 -907}\special{pa 1439 -930}\special{pa 1427 -953}\special{pa 1414 -976}%
+\special{pa 1402 -999}\special{pa 1389 -1022}\special{pa 1377 -1045}\special{pa 1365 -1068}%
+\special{pa 1352 -1091}\special{pa 1340 -1114}\special{pa 1327 -1137}%
+\special{fp}%
+\special{pa 707 14}\special{pa 720 -9}\special{pa 732 -32}\special{pa 745 -55}%
+\special{pa 757 -78}\special{pa 769 -101}\special{pa 782 -124}\special{pa 794 -147}%
+\special{pa 807 -170}\special{pa 819 -193}\special{pa 831 -216}\special{pa 844 -239}%
+\special{pa 856 -262}\special{pa 869 -285}\special{pa 881 -308}\special{pa 893 -331}%
+\special{pa 906 -354}\special{pa 918 -377}\special{pa 931 -401}\special{pa 943 -424}%
+\special{pa 955 -447}\special{pa 968 -470}\special{pa 980 -493}\special{pa 993 -516}%
+\special{pa 1005 -539}\special{pa 1017 -562}\special{pa 1030 -585}\special{pa 1042 -608}%
+\special{pa 1055 -631}\special{pa 1067 -654}\special{pa 1079 -677}\special{pa 1092 -700}%
+\special{pa 1104 -723}\special{pa 1117 -746}\special{pa 1129 -769}\special{pa 1141 -792}%
+\special{pa 1154 -815}\special{pa 1166 -838}\special{pa 1179 -861}\special{pa 1191 -884}%
+\special{pa 1203 -907}\special{pa 1216 -930}\special{pa 1228 -953}\special{pa 1241 -976}%
+\special{pa 1253 -999}\special{pa 1265 -1022}\special{pa 1278 -1045}\special{pa 1290 -1068}%
+\special{pa 1303 -1091}\special{pa 1315 -1114}\special{pa 1327 -1137}%
+\special{fp}%
+\special{pa 834 181}\special{pa 887 200}\special{pa 947 218}\special{pa 1013 232}%
+\special{pa 1084 244}\special{pa 1158 252}\special{pa 1236 258}\special{pa 1314 260}%
+\special{pa 1394 259}\special{pa 1472 255}\special{pa 1547 247}\special{pa 1619 236}%
+\special{pa 1687 223}\special{pa 1749 206}\special{pa 1804 188}\special{pa 1852 167}%
+\special{pa 1892 144}\special{pa 1922 120}\special{pa 1944 94}\special{pa 1955 68}%
+\special{pa 1957 42}\special{pa 1949 16}\special{pa 1946 12}%
+\special{fp}%
+\special{pa 708 14}\special{pa 700 33}\special{pa 698 60}\special{pa 706 86}%
+\special{pa 724 111}\special{pa 752 136}\special{pa 789 159}\special{pa 834 181}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 622 -34}\special{pa 617 -40}\special{fp}\special{pa 598 -65}\special{pa 592 -70}\special{fp}%
+\special{pa 568 -90}\special{pa 562 -94}\special{fp}\special{pa 535 -110}\special{pa 528 -114}\special{fp}%
+\special{pa 500 -127}\special{pa 493 -130}\special{fp}\special{pa 464 -141}\special{pa 456 -144}\special{fp}%
+\special{pa 427 -153}\special{pa 419 -156}\special{fp}\special{pa 389 -164}\special{pa 382 -166}\special{fp}%
+\special{pa 352 -173}\special{pa 344 -175}\special{fp}\special{pa 314 -181}\special{pa 306 -183}\special{fp}%
+\special{pa 275 -188}\special{pa 267 -189}\special{fp}\special{pa 237 -194}\special{pa 229 -195}\special{fp}%
+\special{pa 198 -198}\special{pa 190 -199}\special{fp}\special{pa 159 -202}\special{pa 151 -203}\special{fp}%
+\special{pa 120 -205}\special{pa 112 -206}\special{fp}\special{pa 82 -207}\special{pa 74 -208}\special{fp}%
+\special{pa 43 -208}\special{pa 35 -209}\special{fp}\special{pa 4 -209}\special{pa -4 -209}\special{fp}%
+\special{pa -35 -209}\special{pa -43 -208}\special{fp}\special{pa -74 -208}\special{pa -82 -207}\special{fp}%
+\special{pa -113 -206}\special{pa -121 -205}\special{fp}\special{pa -152 -203}\special{pa -160 -202}\special{fp}%
+\special{pa -191 -199}\special{pa -199 -198}\special{fp}\special{pa -229 -195}\special{pa -237 -194}\special{fp}%
+\special{pa -268 -189}\special{pa -276 -188}\special{fp}\special{pa -306 -183}\special{pa -314 -181}\special{fp}%
+\special{pa -344 -175}\special{pa -352 -173}\special{fp}\special{pa -382 -166}\special{pa -390 -164}\special{fp}%
+\special{pa -420 -156}\special{pa -428 -154}\special{fp}\special{pa -457 -144}\special{pa -464 -141}\special{fp}%
+\special{pa -493 -130}\special{pa -500 -126}\special{fp}\special{pa -528 -113}\special{pa -536 -110}\special{fp}%
+\special{pa -562 -94}\special{pa -569 -90}\special{fp}\special{pa -593 -70}\special{pa -599 -65}\special{fp}%
+\special{pa -617 -40}\special{pa -622 -33}\special{fp}\special{pn 8}%
+\special{pn 8}%
+\special{pa 1949 15}\special{pa 1943 9}\special{fp}\special{pa 1924 -15}\special{pa 1919 -20}\special{fp}%
+\special{pa 1894 -39}\special{pa 1888 -44}\special{fp}\special{pa 1861 -60}\special{pa 1854 -63}\special{fp}%
+\special{pa 1826 -77}\special{pa 1819 -80}\special{fp}\special{pa 1790 -91}\special{pa 1782 -93}\special{fp}%
+\special{pa 1753 -103}\special{pa 1746 -105}\special{fp}\special{pa 1716 -114}\special{pa 1708 -116}\special{fp}%
+\special{pa 1678 -123}\special{pa 1670 -124}\special{fp}\special{pa 1640 -131}\special{pa 1632 -132}\special{fp}%
+\special{pa 1602 -137}\special{pa 1594 -138}\special{fp}\special{pa 1563 -143}\special{pa 1555 -144}\special{fp}%
+\special{pa 1524 -148}\special{pa 1517 -148}\special{fp}\special{pa 1486 -151}\special{pa 1478 -152}\special{fp}%
+\special{pa 1447 -154}\special{pa 1439 -155}\special{fp}\special{pa 1408 -156}\special{pa 1400 -157}\special{fp}%
+\special{pa 1369 -158}\special{pa 1361 -158}\special{fp}\special{pa 1330 -158}\special{pa 1322 -158}\special{fp}%
+\special{pa 1292 -158}\special{pa 1284 -158}\special{fp}\special{pa 1253 -157}\special{pa 1245 -156}\special{fp}%
+\special{pa 1214 -155}\special{pa 1206 -154}\special{fp}\special{pa 1175 -152}\special{pa 1167 -151}\special{fp}%
+\special{pa 1136 -148}\special{pa 1128 -147}\special{fp}\special{pa 1098 -144}\special{pa 1090 -143}\special{fp}%
+\special{pa 1059 -138}\special{pa 1051 -137}\special{fp}\special{pa 1021 -132}\special{pa 1013 -130}\special{fp}%
+\special{pa 983 -124}\special{pa 975 -122}\special{fp}\special{pa 945 -115}\special{pa 937 -113}\special{fp}%
+\special{pa 907 -105}\special{pa 900 -103}\special{fp}\special{pa 870 -93}\special{pa 863 -90}\special{fp}%
+\special{pa 834 -79}\special{pa 827 -76}\special{fp}\special{pa 799 -63}\special{pa 792 -59}\special{fp}%
+\special{pa 765 -43}\special{pa 758 -39}\special{fp}\special{pa 734 -20}\special{pa 729 -14}\special{fp}%
+\special{pa 711 11}\special{pa 706 17}\special{fp}\special{pn 8}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/sfcut.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/sfcut.tex
new file mode 100644
index 0000000000..f5ec71d0da
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/sfcut.tex
@@ -0,0 +1,85 @@
+%%% /Users/hannya/Desktop/fig/template3D.tex
+%%% Generator=template3D.cdy
+{\unitlength=7mm%
+\begin{picture}%
+(8.08,7.82)(-4.08,-2.57)%
+\special{pn 8}%
+%
+\special{pa -270 -327}\special{pa -255 -302}\special{pa -249 -293}\special{pa -230 -269}%
+\special{pa -222 -259}\special{pa -202 -238}\special{pa -190 -225}\special{pa -170 -207}%
+\special{pa -152 -192}\special{pa -133 -178}\special{pa -108 -160}\special{pa -92 -150}%
+\special{pa -61 -131}\special{pa -45 -123}\special{pa -9 -105}\special{pa 9 -98}%
+\special{pa 46 -84}\special{pa 74 -75}\special{pa 102 -68}\special{pa 158 -58}%
+\special{pa 158 -58}\special{pa 212 -55}\special{pa 262 -59}\special{pa 307 -70}%
+\special{pa 346 -88}\special{pa 376 -111}\special{pa 377 -111}\special{pa 399 -140}%
+\special{pa 406 -157}\special{pa 412 -173}\special{pa 416 -198}\special{pa 417 -209}%
+\special{pa 416 -236}\special{pa 414 -247}\special{pa 408 -272}\special{pa 403 -286}%
+\special{pa 394 -307}\special{pa 386 -324}\special{pa 376 -341}\special{pa 363 -361}%
+\special{pa 353 -374}\special{pa 336 -396}\special{pa 327 -406}\special{pa 304 -429}%
+\special{pa 296 -437}\special{pa 270 -459}\special{pa 261 -467}\special{pa 234 -487}%
+\special{pa 221 -495}\special{pa 196 -511}\special{pa 176 -523}\special{pa 158 -533}%
+\special{pa 125 -549}\special{pa 119 -551}\special{pa 81 -567}\special{pa 64 -572}%
+\special{pa 43 -579}\special{pa 6 -588}\special{pa -12 -592}\special{pa -30 -595}%
+\special{pa -64 -599}\special{pa -97 -600}\special{pa -128 -598}\special{pa -157 -594}%
+\special{pa -185 -587}\special{pa -209 -578}\special{pa -232 -567}\special{pa -252 -553}%
+\special{pa -269 -536}\special{pa -276 -527}\special{pa -283 -518}\special{pa -293 -496}%
+\special{pa -298 -483}\special{pa -300 -473}\special{pa -303 -448}\special{pa -303 -444}%
+\special{pa -302 -420}\special{pa -300 -406}\special{pa -296 -391}\special{pa -290 -370}%
+\special{pa -286 -360}\special{pa -274 -335}\special{pa -270 -327}%
+\special{fp}%
+\special{pa 544 -28}\special{pa 533 -48}\special{pa 522 -69}\special{pa 511 -89}%
+\special{pa 500 -109}\special{pa 489 -130}\special{pa 479 -150}\special{pa 468 -171}%
+\special{pa 457 -191}\special{pa 446 -211}\special{pa 435 -232}\special{pa 424 -252}%
+\special{pa 413 -273}\special{pa 402 -293}\special{pa 392 -313}\special{pa 381 -334}%
+\special{pa 370 -354}\special{pa 359 -375}\special{pa 348 -395}\special{pa 337 -416}%
+\special{pa 326 -436}\special{pa 315 -456}\special{pa 305 -477}\special{pa 294 -497}%
+\special{pa 283 -518}\special{pa 272 -538}\special{pa 261 -558}\special{pa 250 -579}%
+\special{pa 239 -599}\special{pa 228 -620}\special{pa 218 -640}\special{pa 207 -661}%
+\special{pa 196 -681}\special{pa 185 -701}\special{pa 174 -722}\special{pa 163 -742}%
+\special{pa 152 -763}\special{pa 141 -783}\special{pa 131 -803}\special{pa 120 -824}%
+\special{pa 109 -844}\special{pa 98 -865}\special{pa 87 -885}\special{pa 76 -905}%
+\special{pa 65 -926}\special{pa 54 -946}\special{pa 44 -967}\special{pa 33 -987}%
+\special{pa 22 -1008}\special{pa 11 -1028}\special{pa 0 -1048}%
+\special{fp}%
+\special{pa -544 -28}\special{pa -533 -48}\special{pa -522 -69}\special{pa -511 -89}%
+\special{pa -500 -109}\special{pa -489 -130}\special{pa -479 -150}\special{pa -468 -171}%
+\special{pa -457 -191}\special{pa -446 -211}\special{pa -435 -232}\special{pa -424 -252}%
+\special{pa -413 -273}\special{pa -402 -293}\special{pa -392 -314}\special{pa -381 -334}%
+\special{pa -370 -354}\special{pa -359 -375}\special{pa -348 -395}\special{pa -337 -416}%
+\special{pa -326 -436}\special{pa -315 -456}\special{pa -305 -477}\special{pa -294 -497}%
+\special{pa -283 -518}\special{pa -272 -538}\special{pa -261 -558}\special{pa -250 -579}%
+\special{pa -239 -599}\special{pa -228 -620}\special{pa -218 -640}\special{pa -207 -661}%
+\special{pa -196 -681}\special{pa -185 -701}\special{pa -174 -722}\special{pa -163 -742}%
+\special{pa -152 -763}\special{pa -141 -783}\special{pa -131 -803}\special{pa -120 -824}%
+\special{pa -109 -844}\special{pa -98 -865}\special{pa -87 -885}\special{pa -76 -905}%
+\special{pa -65 -926}\special{pa -54 -946}\special{pa -44 -967}\special{pa -33 -987}%
+\special{pa -22 -1008}\special{pa -11 -1028}\special{pa 0 -1048}%
+\special{fp}%
+\special{pa -432 106}\special{pa -386 122}\special{pa -333 136}\special{pa -275 148}%
+\special{pa -213 157}\special{pa -148 164}\special{pa -80 169}\special{pa -11 170}%
+\special{pa 58 169}\special{pa 126 166}\special{pa 192 160}\special{pa 256 151}%
+\special{pa 315 140}\special{pa 369 127}\special{pa 417 111}\special{pa 459 94}%
+\special{pa 494 76}\special{pa 521 56}\special{pa 539 35}\special{pa 549 14}%
+\special{pa 551 -7}\special{pa 544 -28}%
+\special{fp}%
+\special{pa -543 -28}\special{pa -549 -14}\special{pa -551 7}\special{pa -543 28}%
+\special{pa -528 49}\special{pa -503 69}\special{pa -471 88}\special{pa -432 106}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 546 -25}\special{pa 541 -31}\special{fp}\special{pa 521 -55}\special{pa 515 -60}\special{fp}%
+\special{pa 488 -78}\special{pa 481 -82}\special{fp}\special{pa 453 -96}\special{pa 446 -100}\special{fp}%
+\special{pa 416 -111}\special{pa 409 -114}\special{fp}\special{pa 378 -124}\special{pa 371 -126}\special{fp}%
+\special{pa 340 -134}\special{pa 332 -136}\special{fp}\special{pa 301 -142}\special{pa 293 -144}\special{fp}%
+\special{pa 262 -150}\special{pa 254 -151}\special{fp}\special{pa 222 -156}\special{pa 214 -157}\special{fp}%
+\special{pa 183 -160}\special{pa 175 -161}\special{fp}\special{pa 143 -164}\special{pa 135 -165}\special{fp}%
+\special{pa 104 -167}\special{pa 96 -168}\special{fp}\special{pa 64 -169}\special{pa 56 -169}\special{fp}%
+\special{pa 24 -170}\special{pa 16 -170}\special{fp}\special{pa -16 -170}\special{pa -24 -170}\special{fp}%
+\special{pa -56 -169}\special{pa -64 -169}\special{fp}\special{pa -95 -167}\special{pa -103 -167}\special{fp}%
+\special{pa -135 -165}\special{pa -143 -164}\special{fp}\special{pa -175 -161}\special{pa -183 -160}\special{fp}%
+\special{pa -214 -157}\special{pa -222 -156}\special{fp}\special{pa -254 -151}\special{pa -262 -150}\special{fp}%
+\special{pa -293 -144}\special{pa -301 -142}\special{fp}\special{pa -332 -136}\special{pa -340 -134}\special{fp}%
+\special{pa -371 -126}\special{pa -378 -124}\special{fp}\special{pa -409 -114}\special{pa -416 -112}\special{fp}%
+\special{pa -446 -100}\special{pa -453 -97}\special{fp}\special{pa -481 -82}\special{pa -488 -78}\special{fp}%
+\special{pa -515 -61}\special{pa -521 -55}\special{fp}\special{pa -540 -31}\special{pa -545 -25}\special{fp}%
+\special{pn 8}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/shade.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/shade.tex
new file mode 100644
index 0000000000..3a7aa867f0
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/shade.tex
@@ -0,0 +1,103 @@
+%%% test.tex 2014-11-29 21:58
+%%% test.sce 2014-11-29 21:58
+{\unitlength=5mm%
+\begin{picture}%
+( 11.00000, 6.00000)( -1.00000, -3.00000)%
+\special{pn 8}%
+%
+\special{pa 515 -197}\special{pa 524 -182}\special{pa 532 -167}\special{pa 540 -152}%
+\special{pa 549 -137}\special{pa 557 -121}\special{pa 565 -105}\special{pa 574 -89}%
+\special{pa 582 -72}\special{pa 590 -56}\special{pa 599 -39}\special{pa 607 -23}\special{pa 615 -6}%
+\special{pa 624 10}\special{pa 632 27}\special{pa 640 44}\special{pa 649 60}\special{pa 657 77}%
+\special{pa 665 93}\special{pa 674 109}\special{pa 682 125}\special{pa 690 141}\special{pa 699 156}%
+\special{pa 707 171}\special{pa 715 186}\special{pa 724 200}\special{pa 732 215}\special{pa 740 228}%
+\special{pa 749 242}\special{pa 757 255}\special{pa 765 267}\special{pa 774 279}\special{pa 782 291}%
+\special{pa 790 302}\special{pa 799 312}\special{pa 807 322}\special{pa 815 331}\special{pa 824 340}%
+\special{pa 832 348}\special{pa 840 355}\special{pa 849 362}\special{pa 857 369}\special{pa 865 374}%
+\special{pa 873 379}\special{pa 882 383}\special{pa 890 387}\special{pa 898 389}\special{pa 907 392}%
+\special{pa 915 393}\special{pa 923 394}\special{pa 932 394}\special{pa 940 393}\special{pa 948 392}%
+\special{pa 957 389}\special{pa 965 387}\special{pa 973 383}\special{pa 982 379}\special{pa 990 374}%
+\special{pa 998 369}\special{pa 1007 362}\special{pa 1015 355}\special{pa 1023 348}%
+\special{pa 1032 340}\special{pa 1040 331}\special{pa 1048 322}\special{pa 1057 312}%
+\special{pa 1065 302}\special{pa 1073 291}\special{pa 1082 279}\special{pa 1090 267}%
+\special{pa 1098 255}\special{pa 1107 242}\special{pa 1115 228}\special{pa 1123 215}%
+\special{pa 1132 200}\special{pa 1140 186}\special{pa 1148 171}\special{pa 1157 156}%
+\special{pa 1165 141}\special{pa 1173 125}\special{pa 1182 109}\special{pa 1190 93}%
+\special{pa 1198 77}\special{pa 1207 60}\special{pa 1215 44}\special{pa 1223 27}\special{pa 1232 10}%
+\special{pa 1240 -6}\special{pa 1248 -23}\special{pa 1257 -39}\special{pa 1265 -56}%
+\special{pa 1273 -72}\special{pa 1282 -89}\special{pa 1290 -105}\special{pa 1298 -121}%
+\special{pa 1307 -137}\special{pa 1315 -152}\special{pa 1323 -167}\special{pa 1332 -182}%
+\special{pa 1340 -197}\special{pa 516 -197}\special{pa 515 -197}\special{sh 0.5}\special{ip}%
+\special{pa -197 331}\special{pa -175 306}\special{pa -153 276}\special{pa -131 243}%
+\special{pa -109 208}\special{pa -87 169}\special{pa -66 129}\special{pa -44 87}\special{pa -22 44}%
+\special{pa 0 0}\special{pa 22 -44}\special{pa 44 -87}\special{pa 66 -129}\special{pa 87 -169}%
+\special{pa 109 -208}\special{pa 131 -243}\special{pa 153 -276}\special{pa 175 -306}%
+\special{pa 197 -331}\special{pa 219 -353}\special{pa 241 -370}\special{pa 262 -383}%
+\special{pa 284 -391}\special{pa 306 -394}\special{pa 328 -392}\special{pa 350 -385}%
+\special{pa 372 -374}\special{pa 394 -358}\special{pa 416 -338}\special{pa 437 -313}%
+\special{pa 459 -285}\special{pa 481 -253}\special{pa 503 -218}\special{pa 525 -180}%
+\special{pa 547 -140}\special{pa 569 -98}\special{pa 591 -56}\special{pa 612 -12}%
+\special{pa 634 32}\special{pa 656 75}\special{pa 678 117}\special{pa 700 158}\special{pa 722 197}%
+\special{pa 744 234}\special{pa 766 268}\special{pa 787 298}\special{pa 809 325}\special{pa 831 347}%
+\special{pa 853 366}\special{pa 875 380}\special{pa 897 389}\special{pa 919 393}\special{pa 941 393}%
+\special{pa 962 388}\special{pa 984 378}\special{pa 1006 363}\special{pa 1028 344}%
+\special{pa 1050 320}\special{pa 1072 293}\special{pa 1094 262}\special{pa 1115 228}%
+\special{pa 1137 191}\special{pa 1159 151}\special{pa 1181 110}\special{pa 1203 67}%
+\special{pa 1225 24}\special{pa 1247 -20}\special{pa 1269 -63}\special{pa 1290 -106}%
+\special{pa 1312 -147}\special{pa 1334 -187}\special{pa 1356 -224}\special{pa 1378 -259}%
+\special{pa 1400 -290}\special{pa 1422 -318}\special{pa 1444 -342}\special{pa 1465 -361}%
+\special{pa 1487 -376}\special{pa 1509 -387}\special{pa 1531 -393}\special{pa 1553 -393}%
+\special{pa 1575 -390}\special{pa 1597 -381}\special{pa 1619 -367}\special{pa 1640 -349}%
+\special{pa 1662 -327}\special{pa 1684 -301}\special{pa 1706 -271}\special{pa 1728 -237}%
+\special{pa 1750 -201}\special{pa 1772 -162}\special{pa 1794 -121}\special{pa 1815 -79}%
+\special{pa 1837 -36}\special{pa 1859 8}\special{pa 1881 51}\special{pa 1903 94}\special{pa 1925 136}%
+\special{pa 1947 176}\special{pa 1969 214}%
+\special{fp}%
+\special{pa 515 -197}\special{pa 524 -182}\special{pa 532 -167}\special{pa 540 -152}%
+\special{pa 549 -137}\special{pa 557 -121}\special{pa 565 -105}\special{pa 574 -89}%
+\special{pa 582 -72}\special{pa 590 -56}\special{pa 599 -39}\special{pa 607 -23}\special{pa 615 -6}%
+\special{pa 624 10}\special{pa 632 27}\special{pa 640 44}\special{pa 649 60}\special{pa 657 77}%
+\special{pa 665 93}\special{pa 674 109}\special{pa 682 125}\special{pa 690 141}\special{pa 699 156}%
+\special{pa 707 171}\special{pa 715 186}\special{pa 724 200}\special{pa 732 215}\special{pa 740 228}%
+\special{pa 749 242}\special{pa 757 255}\special{pa 765 267}\special{pa 774 279}\special{pa 782 291}%
+\special{pa 790 302}\special{pa 799 312}\special{pa 807 322}\special{pa 815 331}\special{pa 824 340}%
+\special{pa 832 348}\special{pa 840 355}\special{pa 849 362}\special{pa 857 369}\special{pa 865 374}%
+\special{pa 873 379}\special{pa 882 383}\special{pa 890 387}\special{pa 898 389}\special{pa 907 392}%
+\special{pa 915 393}\special{pa 923 394}\special{pa 932 394}\special{pa 940 393}\special{pa 948 392}%
+\special{pa 957 389}\special{pa 965 387}\special{pa 973 383}\special{pa 982 379}\special{pa 990 374}%
+\special{pa 998 369}\special{pa 1007 362}\special{pa 1015 355}\special{pa 1023 348}%
+\special{pa 1032 340}\special{pa 1040 331}\special{pa 1048 322}\special{pa 1057 312}%
+\special{pa 1065 302}\special{pa 1073 291}\special{pa 1082 279}\special{pa 1090 267}%
+\special{pa 1098 255}\special{pa 1107 242}\special{pa 1115 228}\special{pa 1123 215}%
+\special{pa 1132 200}\special{pa 1140 186}\special{pa 1148 171}\special{pa 1157 156}%
+\special{pa 1165 141}\special{pa 1173 125}\special{pa 1182 109}\special{pa 1190 93}%
+\special{pa 1198 77}\special{pa 1207 60}\special{pa 1215 44}\special{pa 1223 27}\special{pa 1232 10}%
+\special{pa 1240 -6}\special{pa 1248 -23}\special{pa 1257 -39}\special{pa 1265 -56}%
+\special{pa 1273 -72}\special{pa 1282 -89}\special{pa 1290 -105}\special{pa 1298 -121}%
+\special{pa 1307 -137}\special{pa 1315 -152}\special{pa 1323 -167}\special{pa 1332 -182}%
+\special{pa 1340 -197}%
+\special{fp}%
+\special{pa -197 -197}\special{pa 1969 -197}%
+\special{fp}%
+\special{pa 516 -197}\special{pa 1341 -197}%
+\special{fp}%
+\special{pa -197 0}\special{pa 1969 0}%
+\special{fp}%
+\special{pa 0 591}\special{pa 0 -591}%
+\special{fp}%
+\settowidth{\Width}{$x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(10.0500,0.0000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{\Depth}%
+\put(0.0000,3.0500){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+%
+\settowidth{\Width}{O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{\Depth}%
+\put(-0.0500,0.0500){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/shade01.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/shade01.tex
new file mode 100644
index 0000000000..056b4ffd7e
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/shade01.tex
@@ -0,0 +1,179 @@
+%%% /Users/Hannya/Desktop/KeTCindy/fig/shade01.tex
+%%% Generator=template1basic.cdy
+{\unitlength=8mm%
+\begin{picture}%
+(4.18,5.1)(-2.18,-2.1)%
+\special{pn 8}%
+%
+\color[rgb]{1,0,0}%
+\special{pa -445 -315}\special{pa -437 -302}\special{pa -428 -290}\special{pa -419 -278}%
+\special{pa -410 -267}\special{pa -401 -255}\special{pa -392 -244}\special{pa -383 -233}%
+\special{pa -374 -222}\special{pa -365 -212}\special{pa -356 -202}\special{pa -347 -192}%
+\special{pa -339 -182}\special{pa -330 -172}\special{pa -321 -163}\special{pa -312 -154}%
+\special{pa -303 -146}\special{pa -294 -137}\special{pa -285 -129}\special{pa -276 -121}%
+\special{pa -267 -113}\special{pa -258 -106}\special{pa -249 -99}\special{pa -241 -92}%
+\special{pa -232 -85}\special{pa -223 -79}\special{pa -214 -73}\special{pa -205 -67}%
+\special{pa -196 -61}\special{pa -187 -56}\special{pa -178 -50}\special{pa -169 -45}%
+\special{pa -160 -41}\special{pa -151 -36}\special{pa -143 -32}\special{pa -134 -28}%
+\special{pa -125 -25}\special{pa -116 -21}\special{pa -107 -18}\special{pa -98 -15}%
+\special{pa -89 -13}\special{pa -80 -10}\special{pa -71 -8}\special{pa -62 -6}\special{pa -53 -5}%
+\special{pa -45 -3}\special{pa -36 -2}\special{pa -27 -1}\special{pa -18 -1}\special{pa -9 0}%
+\special{pa 0 0}\special{pa 9 0}\special{pa 18 -1}\special{pa 27 -1}\special{pa 36 -2}%
+\special{pa 45 -3}\special{pa 53 -5}\special{pa 62 -6}\special{pa 71 -8}\special{pa 80 -10}%
+\special{pa 89 -13}\special{pa 98 -15}\special{pa 107 -18}\special{pa 116 -21}\special{pa 125 -25}%
+\special{pa 134 -28}\special{pa 143 -32}\special{pa 151 -36}\special{pa 160 -41}\special{pa 169 -45}%
+\special{pa 178 -50}\special{pa 187 -56}\special{pa 196 -61}\special{pa 205 -67}\special{pa 214 -73}%
+\special{pa 223 -79}\special{pa 232 -85}\special{pa 241 -92}\special{pa 249 -99}\special{pa 258 -106}%
+\special{pa 267 -113}\special{pa 276 -121}\special{pa 285 -129}\special{pa 294 -137}%
+\special{pa 303 -146}\special{pa 312 -154}\special{pa 321 -163}\special{pa 330 -172}%
+\special{pa 339 -182}\special{pa 347 -192}\special{pa 356 -202}\special{pa 365 -212}%
+\special{pa 374 -222}\special{pa 383 -233}\special{pa 392 -244}\special{pa 401 -255}%
+\special{pa 410 -267}\special{pa 419 -278}\special{pa 428 -290}\special{pa 437 -302}%
+\special{pa 445 -315}\special{pa 437 -290}\special{pa 428 -266}\special{pa 419 -242}%
+\special{pa 410 -218}\special{pa 401 -195}\special{pa 392 -173}\special{pa 383 -151}%
+\special{pa 374 -130}\special{pa 365 -109}\special{pa 356 -88}\special{pa 347 -68}%
+\special{pa 339 -49}\special{pa 330 -30}\special{pa 321 -12}\special{pa 312 6}\special{pa 303 24}%
+\special{pa 294 41}\special{pa 285 57}\special{pa 276 73}\special{pa 267 88}\special{pa 258 103}%
+\special{pa 249 117}\special{pa 241 131}\special{pa 232 145}\special{pa 223 157}\special{pa 214 170}%
+\special{pa 205 182}\special{pa 196 193}\special{pa 187 204}\special{pa 178 214}\special{pa 169 224}%
+\special{pa 160 233}\special{pa 151 242}\special{pa 143 250}\special{pa 134 258}\special{pa 125 266}%
+\special{pa 116 272}\special{pa 107 279}\special{pa 98 284}\special{pa 89 290}\special{pa 80 295}%
+\special{pa 71 299}\special{pa 62 303}\special{pa 53 306}\special{pa 45 309}\special{pa 36 311}%
+\special{pa 27 313}\special{pa 18 314}\special{pa 9 315}\special{pa 0 315}\special{pa -9 315}%
+\special{pa -18 314}\special{pa -27 313}\special{pa -36 311}\special{pa -45 309}\special{pa -53 306}%
+\special{pa -62 303}\special{pa -71 299}\special{pa -80 295}\special{pa -89 290}\special{pa -98 284}%
+\special{pa -107 279}\special{pa -116 272}\special{pa -125 266}\special{pa -134 258}%
+\special{pa -143 250}\special{pa -151 242}\special{pa -160 233}\special{pa -169 224}%
+\special{pa -178 214}\special{pa -187 204}\special{pa -196 193}\special{pa -205 182}%
+\special{pa -214 170}\special{pa -223 157}\special{pa -232 145}\special{pa -241 131}%
+\special{pa -249 117}\special{pa -258 103}\special{pa -267 88}\special{pa -276 73}%
+\special{pa -285 57}\special{pa -294 41}\special{pa -303 24}\special{pa -312 6}\special{pa -321 -12}%
+\special{pa -330 -30}\special{pa -339 -49}\special{pa -347 -68}\special{pa -356 -88}%
+\special{pa -365 -109}\special{pa -374 -130}\special{pa -383 -151}\special{pa -392 -173}%
+\special{pa -401 -195}\special{pa -410 -218}\special{pa -419 -242}\special{pa -428 -266}%
+\special{pa -437 -290}\special{pa -445 -315}\special{sh 1}\special{ip}%
+\color[rgb]{0,0,0}%
+\special{pa -630 -945}\special{pa -621 -909}\special{pa -608 -857}\special{pa -594 -807}%
+\special{pa -581 -758}\special{pa -568 -710}\special{pa -555 -663}\special{pa -542 -617}%
+\special{pa -529 -572}\special{pa -515 -529}\special{pa -502 -486}\special{pa -489 -445}%
+\special{pa -476 -404}\special{pa -463 -365}\special{pa -450 -327}\special{pa -436 -290}%
+\special{pa -423 -254}\special{pa -410 -219}\special{pa -397 -185}\special{pa -384 -153}%
+\special{pa -371 -121}\special{pa -357 -91}\special{pa -344 -61}\special{pa -331 -33}%
+\special{pa -318 -6}\special{pa -305 20}\special{pa -292 45}\special{pa -278 69}%
+\special{pa -265 91}\special{pa -252 113}\special{pa -239 134}\special{pa -226 153}%
+\special{pa -213 171}\special{pa -199 189}\special{pa -186 205}\special{pa -173 220}%
+\special{pa -160 234}\special{pa -147 247}\special{pa -134 258}\special{pa -121 269}%
+\special{pa -107 278}\special{pa -94 287}\special{pa -81 294}\special{pa -68 300}%
+\special{pa -55 305}\special{pa -42 309}\special{pa -28 312}\special{pa -15 314}%
+\special{pa -2 315}\special{pa 11 315}\special{pa 24 313}\special{pa 37 311}%
+\special{pa 51 307}\special{pa 64 302}\special{pa 77 296}\special{pa 90 289}%
+\special{pa 103 281}\special{pa 116 272}\special{pa 130 262}\special{pa 143 250}%
+\special{pa 156 238}\special{pa 169 224}\special{pa 182 209}\special{pa 195 194}%
+\special{pa 209 177}\special{pa 222 159}\special{pa 235 140}\special{pa 248 119}%
+\special{pa 261 98}\special{pa 274 76}\special{pa 288 52}\special{pa 301 28}%
+\special{pa 314 2}\special{pa 327 -25}\special{pa 340 -53}\special{pa 353 -82}%
+\special{pa 367 -112}\special{pa 380 -143}\special{pa 393 -175}\special{pa 406 -209}%
+\special{pa 419 -243}\special{pa 432 -279}\special{pa 446 -315}\special{pa 459 -353}%
+\special{pa 472 -392}\special{pa 485 -432}\special{pa 498 -473}\special{pa 511 -516}%
+\special{pa 525 -559}\special{pa 538 -603}\special{pa 551 -649}\special{pa 564 -695}%
+\special{pa 577 -743}\special{pa 590 -792}\special{pa 604 -842}\special{pa 617 -893}%
+\special{pa 630 -945}%
+\special{fp}%
+\special{pa -687 -748}\special{pa -673 -720}\special{pa -660 -692}\special{pa -647 -665}%
+\special{pa -634 -638}\special{pa -621 -612}\special{pa -608 -586}\special{pa -594 -561}%
+\special{pa -581 -536}\special{pa -568 -512}\special{pa -555 -489}\special{pa -542 -466}%
+\special{pa -529 -444}\special{pa -515 -422}\special{pa -502 -401}\special{pa -489 -380}%
+\special{pa -476 -360}\special{pa -463 -340}\special{pa -450 -321}\special{pa -436 -302}%
+\special{pa -423 -284}\special{pa -410 -267}\special{pa -397 -250}\special{pa -384 -234}%
+\special{pa -371 -218}\special{pa -357 -203}\special{pa -344 -188}\special{pa -331 -174}%
+\special{pa -318 -161}\special{pa -305 -148}\special{pa -292 -135}\special{pa -278 -123}%
+\special{pa -265 -112}\special{pa -252 -101}\special{pa -239 -91}\special{pa -226 -81}%
+\special{pa -213 -72}\special{pa -199 -63}\special{pa -186 -55}\special{pa -173 -48}%
+\special{pa -160 -41}\special{pa -147 -34}\special{pa -134 -28}\special{pa -121 -23}%
+\special{pa -107 -18}\special{pa -94 -14}\special{pa -81 -10}\special{pa -68 -7}%
+\special{pa -55 -5}\special{pa -42 -3}\special{pa -28 -1}\special{pa -15 -0}%
+\special{pa -2 -0}\special{pa 11 -0}\special{pa 24 -1}\special{pa 37 -2}%
+\special{pa 51 -4}\special{pa 64 -6}\special{pa 77 -9}\special{pa 90 -13}%
+\special{pa 103 -17}\special{pa 116 -22}\special{pa 130 -27}\special{pa 143 -32}%
+\special{pa 156 -39}\special{pa 169 -45}\special{pa 182 -53}\special{pa 195 -61}%
+\special{pa 209 -69}\special{pa 222 -78}\special{pa 235 -88}\special{pa 248 -98}%
+\special{pa 261 -108}\special{pa 274 -120}\special{pa 288 -131}\special{pa 301 -144}%
+\special{pa 314 -156}\special{pa 327 -170}\special{pa 340 -184}\special{pa 353 -198}%
+\special{pa 367 -213}\special{pa 380 -229}\special{pa 393 -245}\special{pa 406 -262}%
+\special{pa 419 -279}\special{pa 432 -297}\special{pa 446 -315}\special{pa 459 -334}%
+\special{pa 472 -354}\special{pa 485 -374}\special{pa 498 -394}\special{pa 511 -415}%
+\special{pa 525 -437}\special{pa 538 -459}\special{pa 551 -482}\special{pa 564 -505}%
+\special{pa 577 -529}\special{pa 590 -553}\special{pa 604 -578}\special{pa 617 -604}%
+\special{pa 630 -630}%
+\special{fp}%
+\special{pa -445 -315}\special{pa -437 -290}\special{pa -428 -266}\special{pa -419 -242}%
+\special{pa -410 -218}\special{pa -401 -195}\special{pa -392 -173}\special{pa -383 -151}%
+\special{pa -374 -130}\special{pa -365 -109}\special{pa -356 -88}\special{pa -347 -68}%
+\special{pa -339 -49}\special{pa -330 -30}\special{pa -321 -12}\special{pa -312 6}%
+\special{pa -303 24}\special{pa -294 41}\special{pa -285 57}\special{pa -276 73}%
+\special{pa -267 88}\special{pa -258 103}\special{pa -249 117}\special{pa -241 131}%
+\special{pa -232 145}\special{pa -223 157}\special{pa -214 170}\special{pa -205 182}%
+\special{pa -196 193}\special{pa -187 204}\special{pa -178 214}\special{pa -169 224}%
+\special{pa -160 233}\special{pa -151 242}\special{pa -143 250}\special{pa -134 258}%
+\special{pa -125 266}\special{pa -116 272}\special{pa -107 279}\special{pa -98 284}%
+\special{pa -89 290}\special{pa -80 295}\special{pa -71 299}\special{pa -62 303}%
+\special{pa -53 306}\special{pa -45 309}\special{pa -36 311}\special{pa -27 313}%
+\special{pa -18 314}\special{pa -9 315}\special{pa 0 315}\special{pa 9 315}%
+\special{pa 18 314}\special{pa 27 313}\special{pa 36 311}\special{pa 45 309}%
+\special{pa 53 306}\special{pa 62 303}\special{pa 71 299}\special{pa 80 295}%
+\special{pa 89 290}\special{pa 98 284}\special{pa 107 279}\special{pa 116 272}%
+\special{pa 125 266}\special{pa 134 258}\special{pa 143 250}\special{pa 151 242}%
+\special{pa 160 233}\special{pa 169 224}\special{pa 178 214}\special{pa 187 204}%
+\special{pa 196 193}\special{pa 205 182}\special{pa 214 170}\special{pa 223 157}%
+\special{pa 232 145}\special{pa 241 131}\special{pa 249 117}\special{pa 258 103}%
+\special{pa 267 88}\special{pa 276 73}\special{pa 285 57}\special{pa 294 41}%
+\special{pa 303 24}\special{pa 312 6}\special{pa 321 -12}\special{pa 330 -30}%
+\special{pa 339 -49}\special{pa 347 -68}\special{pa 356 -88}\special{pa 365 -109}%
+\special{pa 374 -130}\special{pa 383 -151}\special{pa 392 -173}\special{pa 401 -195}%
+\special{pa 410 -218}\special{pa 419 -242}\special{pa 428 -266}\special{pa 437 -290}%
+\special{pa 445 -315}%
+\special{fp}%
+\special{pa -445 -315}\special{pa -437 -302}\special{pa -428 -290}\special{pa -419 -278}%
+\special{pa -410 -267}\special{pa -401 -255}\special{pa -392 -244}\special{pa -383 -233}%
+\special{pa -374 -222}\special{pa -365 -212}\special{pa -356 -202}\special{pa -347 -192}%
+\special{pa -339 -182}\special{pa -330 -172}\special{pa -321 -163}\special{pa -312 -154}%
+\special{pa -303 -146}\special{pa -294 -137}\special{pa -285 -129}\special{pa -276 -121}%
+\special{pa -267 -113}\special{pa -258 -106}\special{pa -249 -99}\special{pa -241 -92}%
+\special{pa -232 -85}\special{pa -223 -79}\special{pa -214 -73}\special{pa -205 -67}%
+\special{pa -196 -61}\special{pa -187 -56}\special{pa -178 -50}\special{pa -169 -45}%
+\special{pa -160 -41}\special{pa -151 -36}\special{pa -143 -32}\special{pa -134 -28}%
+\special{pa -125 -25}\special{pa -116 -21}\special{pa -107 -18}\special{pa -98 -15}%
+\special{pa -89 -13}\special{pa -80 -10}\special{pa -71 -8}\special{pa -62 -6}%
+\special{pa -53 -5}\special{pa -45 -3}\special{pa -36 -2}\special{pa -27 -1}%
+\special{pa -18 -1}\special{pa -9 -0}\special{pa 0 -0}\special{pa 9 -0}%
+\special{pa 18 -1}\special{pa 27 -1}\special{pa 36 -2}\special{pa 45 -3}%
+\special{pa 53 -5}\special{pa 62 -6}\special{pa 71 -8}\special{pa 80 -10}%
+\special{pa 89 -13}\special{pa 98 -15}\special{pa 107 -18}\special{pa 116 -21}%
+\special{pa 125 -25}\special{pa 134 -28}\special{pa 143 -32}\special{pa 151 -36}%
+\special{pa 160 -41}\special{pa 169 -45}\special{pa 178 -50}\special{pa 187 -56}%
+\special{pa 196 -61}\special{pa 205 -67}\special{pa 214 -73}\special{pa 223 -79}%
+\special{pa 232 -85}\special{pa 241 -92}\special{pa 249 -99}\special{pa 258 -106}%
+\special{pa 267 -113}\special{pa 276 -121}\special{pa 285 -129}\special{pa 294 -137}%
+\special{pa 303 -146}\special{pa 312 -154}\special{pa 321 -163}\special{pa 330 -172}%
+\special{pa 339 -182}\special{pa 347 -192}\special{pa 356 -202}\special{pa 365 -212}%
+\special{pa 374 -222}\special{pa 383 -233}\special{pa 392 -244}\special{pa 401 -255}%
+\special{pa 410 -267}\special{pa 419 -278}\special{pa 428 -290}\special{pa 437 -302}%
+\special{pa 445 -315}%
+\special{fp}%
+\special{pa -687 -0}\special{pa 630 -0}%
+\special{fp}%
+\special{pa 0 661}\special{pa 0 -945}%
+\special{fp}%
+\settowidth{\Width}{$x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.0625000,0.0000000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{\Depth}%
+\put(0.0000000,3.0625000){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+\settowidth{\Width}{O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(-0.0625000,-0.0625000){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/shade01E.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/shade01E.tex
new file mode 100644
index 0000000000..d4adb21d8a
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/shade01E.tex
@@ -0,0 +1,72 @@
+%%% /Users/takatoosetsuo/Dropbox/kettoday/0718/fig/shade01E.tex
+%%% Generator=shadetest.cdy
+{\unitlength=1cm%
+\begin{picture}%
+(4,5)(-2,-2)%
+\special{pn 8}%
+%
+\color[rgb]{1,0,0}%
+\special{pa -557 -394}\special{pa -535 -334}\special{pa -504 -251}\special{pa -472 -173}%
+\special{pa -441 -100}\special{pa -409 -32}\special{pa -378 31}\special{pa -346 89}%
+\special{pa -315 142}\special{pa -283 190}\special{pa -252 232}\special{pa -220 270}%
+\special{pa -189 303}\special{pa -157 331}\special{pa -126 353}\special{pa -94 371}%
+\special{pa -63 384}\special{pa -31 391}\special{pa 0 394}\special{pa 31 391}\special{pa 63 384}%
+\special{pa 94 371}\special{pa 126 353}\special{pa 157 331}\special{pa 189 303}\special{pa 220 270}%
+\special{pa 252 232}\special{pa 283 190}\special{pa 315 142}\special{pa 346 89}\special{pa 378 31}%
+\special{pa 409 -32}\special{pa 441 -100}\special{pa 472 -173}\special{pa 504 -251}%
+\special{pa 535 -334}\special{pa 557 -394}\special{pa 535 -364}\special{pa 504 -323}%
+\special{pa 472 -283}\special{pa 441 -247}\special{pa 409 -213}\special{pa 378 -181}%
+\special{pa 346 -152}\special{pa 315 -126}\special{pa 283 -102}\special{pa 252 -81}%
+\special{pa 220 -62}\special{pa 189 -45}\special{pa 157 -31}\special{pa 126 -20}\special{pa 94 -11}%
+\special{pa 63 -5}\special{pa 31 -1}\special{pa 0 0}\special{pa -31 -1}\special{pa -63 -5}%
+\special{pa -94 -11}\special{pa -126 -20}\special{pa -157 -31}\special{pa -189 -45}%
+\special{pa -220 -62}\special{pa -252 -81}\special{pa -283 -102}\special{pa -315 -126}%
+\special{pa -346 -152}\special{pa -378 -181}\special{pa -409 -213}\special{pa -441 -247}%
+\special{pa -472 -283}\special{pa -504 -323}\special{pa -535 -364}\special{pa -557 -394}%
+\special{sh 1}\special{ip}%
+\color[rgb]{0,0,0}%
+\special{pa -787 -1181}\special{pa -756 -1058}\special{pa -724 -939}\special{pa -693 -826}%
+\special{pa -661 -717}\special{pa -630 -614}\special{pa -598 -516}\special{pa -567 -423}%
+\special{pa -535 -334}\special{pa -504 -251}\special{pa -472 -173}\special{pa -441 -100}%
+\special{pa -409 -32}\special{pa -378 31}\special{pa -346 89}\special{pa -315 142}%
+\special{pa -283 190}\special{pa -252 232}\special{pa -220 270}\special{pa -189 303}%
+\special{pa -157 331}\special{pa -126 353}\special{pa -94 371}\special{pa -63 384}%
+\special{pa -31 391}\special{pa 0 394}\special{pa 31 391}\special{pa 63 384}%
+\special{pa 94 371}\special{pa 126 353}\special{pa 157 331}\special{pa 189 303}%
+\special{pa 220 270}\special{pa 252 232}\special{pa 283 190}\special{pa 315 142}%
+\special{pa 346 89}\special{pa 378 31}\special{pa 409 -32}\special{pa 441 -100}%
+\special{pa 472 -173}\special{pa 504 -251}\special{pa 535 -334}\special{pa 567 -423}%
+\special{pa 598 -516}\special{pa 630 -614}\special{pa 661 -717}\special{pa 693 -826}%
+\special{pa 724 -939}\special{pa 756 -1058}\special{pa 787 -1181}%
+\special{fp}%
+\special{pa -787 -787}\special{pa -756 -726}\special{pa -724 -666}\special{pa -693 -610}%
+\special{pa -661 -556}\special{pa -630 -504}\special{pa -598 -455}\special{pa -567 -408}%
+\special{pa -535 -364}\special{pa -504 -323}\special{pa -472 -283}\special{pa -441 -247}%
+\special{pa -409 -213}\special{pa -378 -181}\special{pa -346 -152}\special{pa -315 -126}%
+\special{pa -283 -102}\special{pa -252 -81}\special{pa -220 -62}\special{pa -189 -45}%
+\special{pa -157 -31}\special{pa -126 -20}\special{pa -94 -11}\special{pa -63 -5}%
+\special{pa -31 -1}\special{pa 0 -0}\special{pa 31 -1}\special{pa 63 -5}%
+\special{pa 94 -11}\special{pa 126 -20}\special{pa 157 -31}\special{pa 189 -45}%
+\special{pa 220 -62}\special{pa 252 -81}\special{pa 283 -102}\special{pa 315 -126}%
+\special{pa 346 -152}\special{pa 378 -181}\special{pa 409 -213}\special{pa 441 -247}%
+\special{pa 472 -283}\special{pa 504 -323}\special{pa 535 -364}\special{pa 567 -408}%
+\special{pa 598 -455}\special{pa 630 -504}\special{pa 661 -556}\special{pa 693 -610}%
+\special{pa 724 -666}\special{pa 756 -726}\special{pa 787 -787}%
+\special{fp}%
+\special{pa -787 -0}\special{pa 787 -0}%
+\special{fp}%
+\special{pa 0 787}\special{pa 0 -1181}%
+\special{fp}%
+\settowidth{\Width}{$x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.0500000,0.0000000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{\Depth}%
+\put(0.0000000,3.0500000){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+\settowidth{\Width}{O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(-0.0500000,-0.0500000){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/shadeE.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/shadeE.tex
new file mode 100644
index 0000000000..7729cf5d1a
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/shadeE.tex
@@ -0,0 +1,65 @@
+%%% /Users/takatoosetsuo/Dropbox/kettoday/0718/fig/shadeE.tex
+%%% Generator=shadetest.cdy
+{\unitlength=5mm%
+\begin{picture}%
+(11,6)(-1,-3)%
+\special{pn 8}%
+%
+\color[rgb]{0,0,0.5}%
+\special{pa 515 -197}\special{pa 1340 -197}\special{pa 1319 -159}\special{pa 1297 -119}%
+\special{pa 1276 -77}\special{pa 1254 -34}\special{pa 1232 9}\special{pa 1211 52}%
+\special{pa 1189 95}\special{pa 1167 136}\special{pa 1146 176}\special{pa 1124 214}%
+\special{pa 1102 249}\special{pa 1081 281}\special{pa 1059 309}\special{pa 1037 334}%
+\special{pa 1016 355}\special{pa 994 371}\special{pa 972 384}\special{pa 951 391}%
+\special{pa 929 394}\special{pa 907 392}\special{pa 886 385}\special{pa 864 373}\special{pa 843 357}%
+\special{pa 821 337}\special{pa 799 313}\special{pa 778 285}\special{pa 756 253}\special{pa 734 219}%
+\special{pa 713 181}\special{pa 691 142}\special{pa 669 101}\special{pa 648 58}\special{pa 626 15}%
+\special{pa 604 -28}\special{pa 583 -71}\special{pa 561 -113}\special{pa 539 -154}%
+\special{pa 518 -193}\special{pa 515 -197}\special{sh 0.5}\special{ip}%
+\color[rgb]{0,0,0}%
+\special{pa -197 331}\special{pa -175 306}\special{pa -154 277}\special{pa -132 244}%
+\special{pa -110 209}\special{pa -89 171}\special{pa -67 131}\special{pa -45 90}%
+\special{pa -24 47}\special{pa -2 4}\special{pa 20 -39}\special{pa 41 -82}%
+\special{pa 63 -124}\special{pa 85 -164}\special{pa 106 -202}\special{pa 128 -238}%
+\special{pa 150 -271}\special{pa 171 -301}\special{pa 193 -327}\special{pa 215 -349}%
+\special{pa 236 -367}\special{pa 258 -380}\special{pa 280 -389}\special{pa 301 -393}%
+\special{pa 323 -393}\special{pa 344 -387}\special{pa 366 -377}\special{pa 388 -363}%
+\special{pa 409 -344}\special{pa 431 -321}\special{pa 453 -294}\special{pa 474 -263}%
+\special{pa 496 -229}\special{pa 518 -193}\special{pa 539 -154}\special{pa 561 -113}%
+\special{pa 583 -71}\special{pa 604 -28}\special{pa 626 15}\special{pa 648 58}%
+\special{pa 669 101}\special{pa 691 142}\special{pa 713 181}\special{pa 734 219}%
+\special{pa 756 253}\special{pa 778 285}\special{pa 799 313}\special{pa 821 337}%
+\special{pa 843 357}\special{pa 864 373}\special{pa 886 385}\special{pa 907 392}%
+\special{pa 929 394}\special{pa 951 391}\special{pa 972 384}\special{pa 994 371}%
+\special{pa 1016 355}\special{pa 1037 334}\special{pa 1059 309}\special{pa 1081 281}%
+\special{pa 1102 249}\special{pa 1124 214}\special{pa 1146 176}\special{pa 1167 136}%
+\special{pa 1189 95}\special{pa 1211 52}\special{pa 1232 9}\special{pa 1254 -34}%
+\special{pa 1276 -77}\special{pa 1297 -119}\special{pa 1319 -159}\special{pa 1341 -198}%
+\special{pa 1362 -234}\special{pa 1384 -267}\special{pa 1406 -298}\special{pa 1427 -324}%
+\special{pa 1449 -347}\special{pa 1470 -365}\special{pa 1492 -379}\special{pa 1514 -388}%
+\special{pa 1535 -393}\special{pa 1557 -393}\special{pa 1579 -388}\special{pa 1600 -379}%
+\special{pa 1622 -365}\special{pa 1644 -346}\special{pa 1665 -324}\special{pa 1687 -297}%
+\special{pa 1709 -267}\special{pa 1730 -233}\special{pa 1752 -197}\special{pa 1774 -159}%
+\special{pa 1795 -118}\special{pa 1817 -76}\special{pa 1839 -33}\special{pa 1860 10}%
+\special{pa 1882 53}\special{pa 1904 96}\special{pa 1925 137}\special{pa 1947 177}%
+\special{pa 1969 214}%
+\special{fp}%
+\special{pa -197 -197}\special{pa 1969 -197}%
+\special{fp}%
+\special{pa -197 -0}\special{pa 1969 -0}%
+\special{fp}%
+\special{pa 0 591}\special{pa 0 -591}%
+\special{fp}%
+\settowidth{\Width}{$x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(10.1000000,0.0000000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{\Depth}%
+\put(0.0000000,3.1000000){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+\settowidth{\Width}{O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{\Depth}%
+\put(-0.1000000,0.1000000){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/single-add.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/single-add.pdf
new file mode 100644
index 0000000000..9c18546979
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/single-add.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/skeletonparadata01.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/skeletonparadata01.tex
new file mode 100644
index 0000000000..0d8dfb8d25
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/skeletonparadata01.tex
@@ -0,0 +1,81 @@
+%%% /Users/Hannya/ketcindy/ketwork/template.tex 2016-8-17 20:38
+%%% template.sce 2016-8-17 20:38
+{\unitlength=6mm%
+\begin{picture}%
+( 5.73000, 5.88000)( -2.98000, -1.69000)%
+\special{pn 8}%
+%
+\settowidth{\Width}{$x$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-2.7060,-0.4477){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.3501,-0.9282){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+%
+\settowidth{\Width}{$z$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$z$}\settodepth{\Depth}{$z$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(0.0000,4.0571){\hspace*{\Width}\raisebox{\Height}{$z$}}%
+%
+%
+\special{pa 650 -107}\special{pa 479 -79}%
+\special{fp}%
+\special{pa 434 -72}\special{pa -595 98}%
+\special{fp}%
+\special{pa -642 -253}\special{pa 115 45}%
+\special{fp}%
+\special{pa 167 66}\special{pa 513 203}%
+\special{fp}%
+\special{pa 0 399}\special{pa 0 94}%
+\special{fp}%
+\special{pa 0 57}\special{pa 0 -193}%
+\special{fp}%
+\special{pa 0 -230}\special{pa 0 -913}%
+\special{fp}%
+\special{pa -257 355}\special{pa -111 100}%
+\special{fp}%
+\special{pa -90 64}\special{pa -71 29}%
+\special{fp}%
+\special{pa -35 -33}\special{pa -14 -70}%
+\special{fp}%
+\special{pa 14 -120}\special{pa 61 -201}%
+\special{fp}%
+\special{pa 83 -240}\special{pa 327 -667}%
+\special{fp}%
+\special{pa -397 66}\special{pa -361 72}\special{pa -319 77}\special{pa -273 81}\special{pa -222 83}%
+\special{pa -167 84}\special{pa -110 83}\special{pa -51 79}\special{pa 9 74}\special{pa 69 67}%
+\special{pa 127 58}\special{pa 184 47}\special{pa 238 35}\special{pa 287 21}\special{pa 332 5}%
+\special{pa 372 -13}\special{pa 406 -31}\special{pa 433 -51}\special{pa 454 -71}\special{pa 467 -91}%
+\special{pa 472 -113}\special{pa 470 -134}\special{pa 460 -155}\special{pa 443 -175}%
+\special{pa 419 -195}\special{pa 388 -214}\special{pa 351 -232}\special{pa 308 -248}%
+\special{pa 293 -253}%
+\special{fp}%
+\special{pa 242 -268}\special{pa 208 -277}\special{pa 153 -288}\special{pa 133 -292}%
+\special{fp}%
+\special{pa 96 -298}\special{pa 95 -298}\special{pa 36 -306}\special{pa 18 -308}%
+\special{fp}%
+\special{pa -18 -311}\special{pa -24 -312}\special{pa -84 -316}\special{pa -142 -318}%
+\special{pa -198 -318}\special{pa -250 -317}\special{pa -299 -314}\special{pa -343 -309}%
+\special{pa -381 -303}\special{pa -414 -296}\special{pa -439 -288}\special{pa -458 -279}%
+\special{pa -469 -270}\special{pa -472 -261}\special{pa -468 -251}\special{pa -457 -242}%
+\special{pa -438 -233}\special{pa -412 -225}\special{pa -380 -218}\special{pa -341 -212}%
+\special{pa -297 -207}\special{pa -248 -204}\special{pa -195 -203}\special{pa -139 -203}%
+\special{pa -81 -206}\special{pa -21 -210}\special{pa 39 -216}\special{pa 98 -224}%
+\special{pa 156 -234}\special{pa 211 -246}\special{pa 263 -259}\special{pa 311 -274}%
+\special{pa 353 -291}\special{pa 390 -309}\special{pa 421 -328}\special{pa 444 -348}%
+\special{pa 461 -368}\special{pa 470 -389}\special{pa 472 -410}\special{pa 466 -431}%
+\special{pa 453 -452}\special{pa 432 -472}\special{pa 405 -491}\special{pa 370 -510}%
+\special{pa 330 -527}\special{pa 285 -543}\special{pa 277 -545}%
+\special{fp}%
+\special{pa 242 -555}\special{pa 235 -557}\special{pa 181 -570}\special{pa 124 -580}%
+\special{pa 66 -589}\special{pa 18 -595}%
+\special{fp}%
+\special{pa -18 -598}\special{pa -54 -601}\special{pa -113 -604}\special{pa -170 -605}%
+\special{pa -224 -605}\special{pa -275 -603}\special{pa -322 -599}\special{pa -363 -593}%
+\special{pa -398 -587}\special{pa -427 -579}\special{pa -449 -571}\special{pa -464 -562}%
+\special{pa -472 -552}\special{pa -471 -543}\special{pa -464 -533}\special{pa -448 -524}%
+\special{pa -426 -516}\special{pa -397 -508}%
+\special{fp}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/skeletonparadata02.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/skeletonparadata02.tex
new file mode 100644
index 0000000000..1f60f627c6
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/skeletonparadata02.tex
@@ -0,0 +1,76 @@
+%%% /Users/Hannya/ketcindy/ketwork/template.tex 2016-8-17 20:38
+%%% template.sce 2016-8-17 20:38
+{\unitlength=6mm%
+\begin{picture}%
+( 5.73000, 5.88000)( -2.98000, -1.69000)%
+\special{pn 8}%
+%
+\settowidth{\Width}{$x$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-2.7060,-0.4477){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.3501,-0.9282){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+%
+\settowidth{\Width}{$z$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$z$}\settodepth{\Depth}{$z$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(0.0000,4.0571){\hspace*{\Width}\raisebox{\Height}{$z$}}%
+%
+%
+\special{pa 650 -107}\special{pa 502 -83}%
+\special{fp}%
+\special{pa 412 -68}\special{pa -595 98}%
+\special{fp}%
+\special{pa -642 -253}\special{pa 90 35}%
+\special{fp}%
+\special{pa 192 76}\special{pa 513 203}%
+\special{fp}%
+\special{pa 0 399}\special{pa 0 112}%
+\special{fp}%
+\special{pa 0 39}\special{pa 0 -176}%
+\special{fp}%
+\special{pa 0 -248}\special{pa 0 -913}%
+\special{fp}%
+\special{pa -257 355}\special{pa -122 118}%
+\special{fp}%
+\special{pa 28 -144}\special{pa 50 -182}%
+\special{fp}%
+\special{pa 93 -258}\special{pa 327 -667}%
+\special{fp}%
+\special{pa -397 66}\special{pa -361 72}\special{pa -319 77}\special{pa -273 81}\special{pa -222 83}%
+\special{pa -167 84}\special{pa -110 83}\special{pa -51 79}\special{pa 9 74}\special{pa 69 67}%
+\special{pa 127 58}\special{pa 184 47}\special{pa 238 35}\special{pa 287 21}\special{pa 332 5}%
+\special{pa 372 -13}\special{pa 406 -31}\special{pa 433 -51}\special{pa 454 -71}\special{pa 467 -91}%
+\special{pa 472 -113}\special{pa 470 -134}\special{pa 460 -155}\special{pa 443 -175}%
+\special{pa 419 -195}\special{pa 388 -214}\special{pa 351 -232}\special{pa 319 -244}%
+\special{fp}%
+\special{pa 216 -274}\special{pa 208 -277}\special{pa 153 -288}\special{pa 151 -288}%
+\special{fp}%
+\special{pa 77 -300}\special{pa 36 -306}\special{pa 35 -306}%
+\special{fp}%
+\special{pa -36 -313}\special{pa -84 -316}\special{pa -142 -318}\special{pa -198 -318}%
+\special{pa -250 -317}\special{pa -299 -314}\special{pa -343 -309}\special{pa -381 -303}%
+\special{pa -414 -296}\special{pa -439 -288}\special{pa -458 -279}\special{pa -469 -270}%
+\special{pa -472 -261}\special{pa -468 -251}\special{pa -457 -242}\special{pa -438 -233}%
+\special{pa -412 -225}\special{pa -380 -218}\special{pa -341 -212}\special{pa -297 -207}%
+\special{pa -248 -204}\special{pa -195 -203}\special{pa -139 -203}\special{pa -81 -206}%
+\special{pa -21 -210}\special{pa 39 -216}\special{pa 98 -224}\special{pa 156 -234}%
+\special{pa 211 -246}\special{pa 263 -259}\special{pa 311 -274}\special{pa 353 -291}%
+\special{pa 390 -309}\special{pa 421 -328}\special{pa 444 -348}\special{pa 461 -368}%
+\special{pa 470 -389}\special{pa 472 -410}\special{pa 466 -431}\special{pa 453 -452}%
+\special{pa 432 -472}\special{pa 405 -491}\special{pa 370 -510}\special{pa 330 -527}%
+\special{pa 295 -539}%
+\special{fp}%
+\special{pa 225 -559}\special{pa 181 -570}\special{pa 124 -580}\special{pa 66 -589}%
+\special{pa 35 -593}%
+\special{fp}%
+\special{pa -35 -600}\special{pa -54 -601}\special{pa -113 -604}\special{pa -170 -605}%
+\special{pa -224 -605}\special{pa -275 -603}\special{pa -322 -599}\special{pa -363 -593}%
+\special{pa -398 -587}\special{pa -427 -579}\special{pa -449 -571}\special{pa -464 -562}%
+\special{pa -472 -552}\special{pa -471 -543}\special{pa -464 -533}\special{pa -448 -524}%
+\special{pa -426 -516}\special{pa -397 -508}%
+\special{fp}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/skeletonparadata03.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/skeletonparadata03.tex
new file mode 100644
index 0000000000..9eaf162bd3
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/skeletonparadata03.tex
@@ -0,0 +1,68 @@
+%%% /Users/Hannya/ketcindy/ketwork/template.tex 2016-8-17 20:36
+%%% template.sce 2016-8-17 20:36
+{\unitlength=6mm%
+\begin{picture}%
+( 5.73000, 5.88000)( -2.98000, -1.69000)%
+\special{pn 8}%
+%
+\settowidth{\Width}{$x$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-2.7060,-0.4477){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.3501,-0.9282){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+%
+\settowidth{\Width}{$z$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$z$}\settodepth{\Depth}{$z$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(0.0000,4.0571){\hspace*{\Width}\raisebox{\Height}{$z$}}%
+%
+%
+\special{pa -397 66}\special{pa -361 72}\special{pa -319 77}\special{pa -273 81}\special{pa -222 83}%
+\special{pa -167 84}\special{pa -110 83}\special{pa -51 79}\special{pa 9 74}\special{pa 69 67}%
+\special{pa 127 58}\special{pa 184 47}\special{pa 238 35}\special{pa 287 21}\special{pa 332 5}%
+\special{pa 372 -13}\special{pa 406 -31}\special{pa 433 -50}\special{pa 454 -71}\special{pa 467 -91}%
+\special{pa 472 -113}\special{pa 470 -134}\special{pa 460 -155}\special{pa 443 -175}%
+\special{pa 419 -195}\special{pa 388 -214}\special{pa 351 -232}\special{pa 308 -248}%
+\special{pa 260 -263}\special{pa 208 -277}\special{pa 153 -288}\special{pa 95 -298}%
+\special{pa 36 -306}\special{pa -24 -312}\special{pa -84 -316}\special{pa -142 -318}%
+\special{pa -198 -318}\special{pa -250 -317}\special{pa -299 -314}\special{pa -343 -309}%
+\special{pa -381 -303}\special{pa -414 -296}\special{pa -439 -288}\special{pa -458 -279}%
+\special{pa -469 -270}\special{pa -472 -261}\special{pa -468 -251}\special{pa -457 -242}%
+\special{pa -438 -233}\special{pa -412 -225}\special{pa -380 -218}\special{pa -341 -212}%
+\special{pa -297 -207}\special{pa -248 -204}\special{pa -195 -203}\special{pa -139 -203}%
+\special{pa -81 -206}\special{pa -21 -210}\special{pa 39 -216}\special{pa 98 -224}%
+\special{pa 156 -234}\special{pa 211 -246}\special{pa 263 -259}\special{pa 311 -274}%
+\special{pa 353 -291}\special{pa 390 -309}\special{pa 421 -328}\special{pa 444 -347}%
+\special{pa 461 -368}\special{pa 470 -389}\special{pa 472 -410}\special{pa 466 -431}%
+\special{pa 453 -452}\special{pa 432 -472}\special{pa 405 -491}\special{pa 370 -510}%
+\special{pa 330 -527}\special{pa 285 -543}\special{pa 235 -557}\special{pa 181 -570}%
+\special{pa 124 -580}\special{pa 66 -589}\special{pa 6 -596}\special{pa -54 -601}%
+\special{pa -113 -604}\special{pa -170 -605}\special{pa -224 -605}\special{pa -275 -603}%
+\special{pa -322 -599}\special{pa -363 -593}\special{pa -398 -587}\special{pa -427 -579}%
+\special{pa -449 -571}\special{pa -464 -562}\special{pa -472 -552}\special{pa -471 -543}%
+\special{pa -464 -533}\special{pa -448 -524}\special{pa -426 -516}\special{pa -397 -508}%
+\special{fp}%
+\special{pa -257 355}\special{pa -111 100}%
+\special{fp}%
+\special{pa -90 64}\special{pa 61 -201}%
+\special{fp}%
+\special{pa 83 -240}\special{pa 327 -667}%
+\special{fp}%
+\special{pa 650 -107}\special{pa 479 -79}%
+\special{fp}%
+\special{pa 434 -72}\special{pa -595 98}%
+\special{fp}%
+\special{pa -642 -253}\special{pa 115 45}%
+\special{fp}%
+\special{pa 167 66}\special{pa 513 203}%
+\special{fp}%
+\special{pa 0 399}\special{pa 0 94}%
+\special{fp}%
+\special{pa 0 57}\special{pa 0 -193}%
+\special{fp}%
+\special{pa 0 -230}\special{pa 0 -913}%
+\special{fp}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/slide01.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/slide01.pdf
new file mode 100644
index 0000000000..6e820b2659
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/slide01.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/slide01E.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/slide01E.pdf
new file mode 100644
index 0000000000..05b51313eb
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/slide01E.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/slidepdf1.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/slidepdf1.pdf
new file mode 100644
index 0000000000..75ec67cc35
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/slidepdf1.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/slidepdf2.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/slidepdf2.pdf
new file mode 100644
index 0000000000..1e8901a7b4
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/slidepdf2.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/slidepdf3.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/slidepdf3.pdf
new file mode 100644
index 0000000000..632ec4eb7d
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/slidepdf3.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/slider.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/slider.pdf
new file mode 100644
index 0000000000..7b375a9fae
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/slider.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/sliderepeat.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/sliderepeat.pdf
new file mode 100644
index 0000000000..403e384580
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/sliderepeat.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/sliderepeatE.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/sliderepeatE.pdf
new file mode 100644
index 0000000000..5eee364c7f
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/sliderepeatE.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/slidescreen.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/slidescreen.pdf
new file mode 100644
index 0000000000..4a52503f22
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/slidescreen.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/slidescript.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/slidescript.pdf
new file mode 100644
index 0000000000..98e9364446
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/slidescript.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/slot.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/slot.pdf
new file mode 100644
index 0000000000..947efbdc11
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/slot.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/slotE.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/slotE.pdf
new file mode 100644
index 0000000000..b53d44a172
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/slotE.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/snap.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/snap.pdf
new file mode 100644
index 0000000000..e3f692440b
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/snap.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/spacelinecurve1.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/spacelinecurve1.tex
new file mode 100644
index 0000000000..5eb6a8ace5
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/spacelinecurve1.tex
@@ -0,0 +1,80 @@
+%%% /Users/takatoosetsuo/Dropbox/kettoday/0905/fig/spacelinecurve1.tex
+%%% Generator=spacelinecurve.cdy
+{\unitlength=6mm%
+\begin{picture}%
+(10.11,8.8)(-5,-4)%
+\special{pn 8}%
+%
+\settowidth{\Width}{$x$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-2.7100000,-3.0200000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.6300000,-1.7200000){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+\settowidth{\Width}{$z$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$z$}\settodepth{\Depth}{$z$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(0.0000000,4.1500000){\hspace*{\Width}\raisebox{\Height}{$z$}}%
+%
+\special{pa 591 -657}\special{pa -591 657}%
+\special{fp}%
+\special{pa -1023 -380}\special{pa 1023 380}%
+\special{fp}%
+\special{pa 0 905}\special{pa 0 -905}%
+\special{fp}%
+\special{pa -354 394}\special{pa -315 405}\special{pa -275 413}\special{pa -233 420}%
+\special{pa -191 425}\special{pa -147 429}\special{pa -104 430}\special{pa -59 430}%
+\special{pa -15 428}\special{pa 30 424}\special{pa 74 419}\special{pa 118 412}%
+\special{pa 162 403}\special{pa 205 392}\special{pa 247 379}\special{pa 288 365}%
+\special{pa 328 349}\special{pa 367 332}\special{pa 404 313}\special{pa 440 292}%
+\special{pa 474 270}\special{pa 506 247}\special{pa 536 223}\special{pa 564 197}%
+\special{pa 590 170}\special{pa 614 142}\special{pa 635 114}\special{pa 653 84}%
+\special{pa 669 54}\special{pa 683 24}\special{pa 693 -8}\special{pa 701 -39}%
+\special{pa 706 -71}\special{pa 709 -103}\special{pa 708 -135}\special{pa 705 -167}%
+\special{pa 699 -199}\special{pa 690 -230}\special{pa 678 -261}\special{pa 664 -292}%
+\special{pa 647 -322}\special{pa 628 -351}\special{pa 606 -379}\special{pa 582 -407}%
+\special{pa 555 -433}\special{pa 527 -458}\special{pa 496 -482}\special{pa 463 -505}%
+\special{pa 428 -527}\special{pa 392 -547}\special{pa 354 -565}\special{pa 315 -582}%
+\special{pa 275 -597}\special{pa 233 -611}\special{pa 191 -623}\special{pa 147 -633}%
+\special{pa 104 -642}\special{pa 59 -648}\special{pa 15 -653}\special{pa -30 -656}%
+\special{pa -74 -658}\special{pa -118 -657}\special{pa -162 -655}\special{pa -205 -651}%
+\special{pa -247 -645}\special{pa -288 -638}\special{pa -328 -629}\special{pa -367 -618}%
+\special{pa -404 -606}\special{pa -440 -592}\special{pa -474 -577}\special{pa -506 -561}%
+\special{pa -536 -543}\special{pa -564 -524}\special{pa -590 -504}\special{pa -614 -484}%
+\special{pa -635 -462}\special{pa -653 -439}\special{pa -669 -416}\special{pa -683 -392}%
+\special{pa -693 -368}\special{pa -701 -343}\special{pa -706 -318}\special{pa -709 -293}%
+\special{pa -708 -267}\special{pa -705 -242}\special{pa -699 -217}\special{pa -690 -193}%
+\special{pa -678 -169}\special{pa -664 -145}\special{pa -647 -122}\special{pa -628 -99}%
+\special{pa -606 -78}\special{pa -582 -57}\special{pa -555 -38}\special{pa -527 -19}%
+\special{pa -496 -2}\special{pa -463 14}\special{pa -428 29}\special{pa -392 42}%
+\special{pa -354 53}\special{pa -315 64}\special{pa -275 72}\special{pa -233 79}%
+\special{pa -191 84}\special{pa -147 87}\special{pa -104 89}\special{pa -59 89}%
+\special{pa -15 87}\special{pa 30 83}\special{pa 74 78}\special{pa 118 71}%
+\special{pa 162 61}\special{pa 205 51}\special{pa 247 38}\special{pa 288 24}%
+\special{pa 328 8}\special{pa 367 -9}\special{pa 404 -28}\special{pa 440 -49}%
+\special{pa 474 -71}\special{pa 506 -94}\special{pa 536 -118}\special{pa 564 -144}%
+\special{pa 590 -171}\special{pa 614 -199}\special{pa 635 -227}\special{pa 653 -257}%
+\special{pa 669 -287}\special{pa 683 -318}\special{pa 693 -349}\special{pa 701 -380}%
+\special{pa 706 -412}\special{pa 709 -444}\special{pa 708 -476}\special{pa 705 -508}%
+\special{pa 699 -540}\special{pa 690 -571}\special{pa 678 -602}\special{pa 664 -633}%
+\special{pa 647 -663}\special{pa 628 -692}\special{pa 606 -720}\special{pa 582 -748}%
+\special{pa 555 -774}\special{pa 527 -799}\special{pa 496 -823}\special{pa 463 -846}%
+\special{pa 428 -868}\special{pa 392 -888}\special{pa 354 -906}\special{pa 315 -923}%
+\special{pa 275 -938}\special{pa 233 -952}\special{pa 191 -964}\special{pa 147 -974}%
+\special{pa 104 -983}\special{pa 59 -989}\special{pa 15 -994}\special{pa -30 -997}%
+\special{pa -74 -999}\special{pa -118 -998}\special{pa -162 -996}\special{pa -205 -992}%
+\special{pa -247 -986}\special{pa -288 -979}\special{pa -328 -970}\special{pa -367 -959}%
+\special{pa -404 -947}\special{pa -440 -933}\special{pa -474 -918}\special{pa -506 -902}%
+\special{pa -536 -884}\special{pa -564 -865}\special{pa -590 -846}\special{pa -614 -825}%
+\special{pa -635 -803}\special{pa -653 -780}\special{pa -669 -757}\special{pa -683 -733}%
+\special{pa -693 -709}\special{pa -701 -684}\special{pa -706 -659}\special{pa -709 -634}%
+\special{pa -708 -609}\special{pa -705 -583}\special{pa -699 -558}\special{pa -690 -534}%
+\special{pa -678 -510}\special{pa -664 -486}\special{pa -647 -463}\special{pa -628 -440}%
+\special{pa -606 -419}\special{pa -582 -398}\special{pa -555 -379}\special{pa -527 -360}%
+\special{pa -496 -343}\special{pa -463 -327}\special{pa -428 -313}\special{pa -392 -299}%
+\special{pa -354 -288}%
+\special{fp}%
+\special{pa -354 394}\special{pa -354 -288}%
+\special{fp}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/spacelinecurve2.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/spacelinecurve2.tex
new file mode 100644
index 0000000000..f1725dd529
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/spacelinecurve2.tex
@@ -0,0 +1,99 @@
+%%% /Users/takatoosetsuo/Dropbox/kettoday/0905/fig/spacelinecurve2.tex
+%%% Generator=spacelinecurve.cdy
+{\unitlength=6mm%
+\begin{picture}%
+(10.11,8.8)(-5,-4)%
+\special{pn 8}%
+%
+\settowidth{\Width}{$x$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-2.7100000,-3.0200000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.6300000,-1.7200000){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+\settowidth{\Width}{$z$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$z$}\settodepth{\Depth}{$z$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(0.0000000,4.1500000){\hspace*{\Width}\raisebox{\Height}{$z$}}%
+%
+\special{pa 591 -657}\special{pa 497 -554}%
+\special{fp}%
+\special{pa 416 -463}\special{pa -29 32}%
+\special{fp}%
+\special{pa -131 146}\special{pa -591 657}%
+\special{fp}%
+\special{pa -1023 -380}\special{pa -770 -286}%
+\special{fp}%
+\special{pa -645 -239}\special{pa -414 -154}%
+\special{fp}%
+\special{pa -295 -110}\special{pa 79 29}%
+\special{fp}%
+\special{pa 248 92}\special{pa 492 182}%
+\special{fp}%
+\special{pa 617 229}\special{pa 1023 380}%
+\special{fp}%
+\special{pa 0 905}\special{pa 0 486}%
+\special{fp}%
+\special{pa 0 367}\special{pa 0 146}%
+\special{fp}%
+\special{pa 0 26}\special{pa 0 -905}%
+\special{fp}%
+\special{pa -354 394}\special{pa -315 405}\special{pa -275 413}\special{pa -233 420}%
+\special{pa -191 425}\special{pa -147 429}\special{pa -104 430}\special{pa -59 430}%
+\special{pa -15 428}\special{pa 30 424}\special{pa 74 419}\special{pa 118 412}%
+\special{pa 162 403}\special{pa 205 392}\special{pa 247 379}\special{pa 288 365}%
+\special{pa 328 349}\special{pa 367 332}\special{pa 404 313}\special{pa 440 292}%
+\special{pa 474 270}\special{pa 506 247}\special{pa 536 223}\special{pa 564 197}%
+\special{pa 590 170}\special{pa 614 142}\special{pa 635 114}\special{pa 653 84}%
+\special{pa 669 54}\special{pa 683 24}\special{pa 693 -8}\special{pa 701 -39}%
+\special{pa 706 -71}\special{pa 709 -103}\special{pa 708 -135}\special{pa 705 -167}%
+\special{pa 699 -199}\special{pa 694 -217}%
+\special{fp}%
+\special{pa 631 -346}\special{pa 628 -351}\special{pa 606 -379}\special{pa 582 -407}%
+\special{pa 555 -433}\special{pa 527 -458}\special{pa 496 -482}\special{pa 463 -505}%
+\special{pa 428 -527}\special{pa 392 -547}\special{pa 354 -565}\special{pa 315 -582}%
+\special{pa 275 -597}\special{pa 233 -611}\special{pa 191 -623}\special{pa 147 -633}%
+\special{pa 104 -642}\special{pa 59 -648}\special{pa 59 -648}%
+\special{fp}%
+\special{pa -59 -657}\special{pa -74 -658}\special{pa -118 -657}\special{pa -162 -655}%
+\special{pa -205 -651}\special{pa -247 -645}\special{pa -288 -638}\special{pa -328 -629}%
+\special{pa -367 -618}\special{pa -404 -606}\special{pa -440 -592}\special{pa -474 -577}%
+\special{pa -506 -561}\special{pa -536 -543}\special{pa -564 -524}\special{pa -590 -504}%
+\special{pa -598 -497}%
+\special{fp}%
+\special{pa -675 -406}\special{pa -683 -392}\special{pa -693 -368}\special{pa -701 -343}%
+\special{pa -706 -318}\special{pa -709 -293}\special{pa -708 -267}\special{pa -705 -242}%
+\special{pa -699 -217}\special{pa -690 -193}\special{pa -678 -169}\special{pa -664 -145}%
+\special{pa -647 -122}\special{pa -628 -99}\special{pa -606 -78}\special{pa -582 -57}%
+\special{pa -555 -38}\special{pa -527 -19}\special{pa -496 -2}\special{pa -463 14}%
+\special{pa -428 29}\special{pa -392 42}\special{pa -354 53}\special{pa -315 64}%
+\special{pa -275 72}\special{pa -233 79}\special{pa -191 84}\special{pa -147 87}%
+\special{pa -104 89}\special{pa -59 89}\special{pa -15 87}\special{pa 30 83}%
+\special{pa 74 78}\special{pa 118 71}\special{pa 162 61}\special{pa 205 51}%
+\special{pa 247 38}\special{pa 288 24}\special{pa 328 8}\special{pa 367 -9}%
+\special{pa 404 -28}\special{pa 440 -49}\special{pa 474 -71}\special{pa 506 -94}%
+\special{pa 536 -118}\special{pa 564 -144}\special{pa 590 -171}\special{pa 614 -199}%
+\special{pa 635 -227}\special{pa 653 -257}\special{pa 669 -287}\special{pa 683 -318}%
+\special{pa 693 -349}\special{pa 701 -380}\special{pa 706 -412}\special{pa 709 -444}%
+\special{pa 708 -476}\special{pa 705 -508}\special{pa 699 -540}\special{pa 690 -571}%
+\special{pa 678 -602}\special{pa 664 -633}\special{pa 647 -663}\special{pa 628 -692}%
+\special{pa 606 -720}\special{pa 582 -748}\special{pa 555 -774}\special{pa 527 -799}%
+\special{pa 496 -823}\special{pa 463 -846}\special{pa 428 -868}\special{pa 392 -888}%
+\special{pa 354 -906}\special{pa 315 -923}\special{pa 275 -938}\special{pa 233 -952}%
+\special{pa 191 -964}\special{pa 147 -974}\special{pa 104 -983}\special{pa 59 -989}%
+\special{pa 15 -994}\special{pa -30 -997}\special{pa -74 -999}\special{pa -118 -998}%
+\special{pa -162 -996}\special{pa -205 -992}\special{pa -247 -986}\special{pa -288 -979}%
+\special{pa -328 -970}\special{pa -367 -959}\special{pa -404 -947}\special{pa -440 -933}%
+\special{pa -474 -918}\special{pa -506 -902}\special{pa -536 -884}\special{pa -564 -865}%
+\special{pa -590 -846}\special{pa -614 -825}\special{pa -635 -803}\special{pa -653 -780}%
+\special{pa -669 -757}\special{pa -683 -733}\special{pa -693 -709}\special{pa -701 -684}%
+\special{pa -706 -659}\special{pa -709 -634}\special{pa -708 -609}\special{pa -705 -583}%
+\special{pa -699 -558}\special{pa -690 -534}\special{pa -678 -510}\special{pa -664 -486}%
+\special{pa -647 -463}\special{pa -628 -440}\special{pa -606 -419}\special{pa -582 -398}%
+\special{pa -555 -379}\special{pa -527 -360}\special{pa -496 -343}\special{pa -463 -327}%
+\special{pa -428 -313}\special{pa -392 -299}\special{pa -354 -288}%
+\special{fp}%
+\special{pa -354 394}\special{pa -354 -288}%
+\special{fp}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/start01.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/start01.pdf
new file mode 100644
index 0000000000..e078a07abd
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/start01.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/start02.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/start02.pdf
new file mode 100644
index 0000000000..34c0b773b2
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/start02.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/start03.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/start03.pdf
new file mode 100644
index 0000000000..2f0775d79d
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/start03.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/start04.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/start04.pdf
new file mode 100644
index 0000000000..422c8756e3
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/start04.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/start05.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/start05.pdf
new file mode 100644
index 0000000000..fc2944f1a4
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/start05.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/start06.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/start06.pdf
new file mode 100644
index 0000000000..b525a76c7f
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/start06.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/start07.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/start07.pdf
new file mode 100644
index 0000000000..19109450c4
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/start07.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/start08.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/start08.pdf
new file mode 100644
index 0000000000..fbac5a735b
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/start08.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/start09.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/start09.pdf
new file mode 100644
index 0000000000..6a7d0a0235
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/start09.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/start10.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/start10.pdf
new file mode 100644
index 0000000000..f09076f45f
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/start10.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/surfacemodel.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/surfacemodel.tex
new file mode 100644
index 0000000000..63247a1529
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/surfacemodel.tex
@@ -0,0 +1,2204 @@
+%%% /Users/hannya/Desktop/fig/template3D.tex
+%%% Generator=template3D.cdy
+{\unitlength=7mm%
+\begin{picture}%
+(10.5,5.74)(-2.52,-1.59)%
+\special{pn 8}%
+%
+\special{pa 2104 -65}\special{pa 2092 -102}\special{pa 2081 -139}\special{pa 2070 -176}%
+\special{pa 2059 -211}\special{pa 2048 -246}\special{pa 2037 -280}\special{pa 2025 -313}%
+\special{pa 2014 -346}\special{pa 2003 -377}\special{pa 1992 -408}\special{pa 1981 -438}%
+\special{pa 1974 -455}\special{pa 1969 -468}\special{pa 1958 -496}\special{pa 1947 -524}%
+\special{pa 1936 -551}\special{pa 1924 -578}\special{pa 1913 -603}\special{pa 1902 -628}%
+\special{pa 1890 -652}\special{pa 1879 -676}\special{pa 1868 -698}\special{pa 1856 -720}%
+\special{pa 1845 -741}\special{pa 1834 -761}\special{pa 1822 -781}\special{pa 1810 -799}%
+\special{pa 1803 -812}\special{pa 1799 -817}\special{pa 1787 -834}\special{pa 1776 -851}%
+\special{pa 1764 -867}\special{pa 1752 -881}\special{pa 1740 -896}\special{pa 1728 -909}%
+\special{pa 1716 -922}\special{pa 1703 -933}\special{pa 1690 -944}\special{pa 1683 -950}%
+\special{pa 1677 -955}\special{pa 1664 -964}\special{pa 1654 -970}\special{pa 1650 -973}%
+\special{pa 1634 -981}\special{pa 1617 -988}\special{pa 1602 -993}\special{pa 1596 -995}%
+\special{pa 1590 -996}\special{pa 1578 -998}\special{pa 1568 -999}\special{pa 1558 -999}%
+\special{pa 1548 -999}\special{pa 1538 -998}\special{pa 1527 -996}\special{pa 1520 -995}%
+\special{pa 1515 -993}\special{pa 1500 -989}\special{pa 1483 -982}\special{pa 1467 -973}%
+\special{pa 1462 -970}\special{pa 1453 -964}\special{pa 1439 -955}\special{pa 1433 -950}%
+\special{pa 1426 -944}\special{pa 1413 -933}\special{pa 1401 -922}\special{pa 1389 -909}%
+\special{pa 1376 -896}\special{pa 1364 -881}\special{pa 1353 -867}\special{pa 1341 -851}%
+\special{pa 1329 -834}\special{pa 1317 -817}\special{pa 1313 -811}\special{pa 1306 -799}%
+\special{pa 1294 -781}\special{pa 1283 -761}\special{pa 1271 -741}\special{pa 1260 -720}%
+\special{pa 1249 -698}\special{pa 1237 -676}\special{pa 1226 -652}\special{pa 1215 -628}%
+\special{pa 1203 -603}\special{pa 1192 -578}\special{pa 1181 -551}\special{pa 1169 -524}%
+\special{pa 1158 -496}\special{pa 1147 -468}\special{pa 1140 -451}\special{pa 1136 -438}%
+\special{pa 1124 -408}\special{pa 1113 -377}\special{pa 1102 -346}\special{pa 1091 -313}%
+\special{pa 1080 -280}\special{pa 1069 -246}\special{pa 1057 -211}\special{pa 1046 -176}%
+\special{pa 1035 -139}\special{pa 1024 -102}\special{pa 1013 -66}%
+\special{fp}%
+\special{pa 1181 176}\special{pa 1234 198}\special{pa 1293 217}\special{pa 1355 232}%
+\special{pa 1421 242}\special{pa 1489 249}\special{pa 1558 251}\special{pa 1627 249}%
+\special{pa 1695 242}\special{pa 1761 231}\special{pa 1824 217}\special{pa 1882 198}%
+\special{pa 1936 176}\special{pa 1983 151}\special{pa 2024 123}\special{pa 2057 92}%
+\special{pa 2082 60}\special{pa 2100 27}\special{pa 2108 -8}\special{pa 2108 -42}%
+\special{pa 2102 -68}%
+\special{fp}%
+\special{pa 1014 -66}\special{pa 1008 -42}\special{pa 1008 -7}\special{pa 1017 27}%
+\special{pa 1034 60}\special{pa 1060 93}\special{pa 1093 123}\special{pa 1134 151}%
+\special{pa 1181 176}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 2103 -64}\special{pa 2100 -71}\special{fp}\special{pa 2088 -100}\special{pa 2084 -107}\special{fp}%
+\special{pa 2065 -132}\special{pa 2060 -138}\special{fp}\special{pa 2038 -159}\special{pa 2032 -165}\special{fp}%
+\special{pa 2008 -183}\special{pa 2001 -188}\special{fp}\special{pa 1975 -205}\special{pa 1968 -209}\special{fp}%
+\special{pa 1941 -223}\special{pa 1933 -227}\special{fp}\special{pa 1905 -238}\special{pa 1897 -241}\special{fp}%
+\special{pa 1868 -252}\special{pa 1861 -255}\special{fp}\special{pa 1831 -264}\special{pa 1823 -266}\special{fp}%
+\special{pa 1793 -273}\special{pa 1785 -275}\special{fp}\special{pa 1755 -282}\special{pa 1747 -283}\special{fp}%
+\special{pa 1717 -288}\special{pa 1709 -289}\special{fp}\special{pa 1678 -293}\special{pa 1670 -294}\special{fp}%
+\special{pa 1639 -297}\special{pa 1631 -298}\special{fp}\special{pa 1600 -299}\special{pa 1592 -299}\special{fp}%
+\special{pa 1561 -300}\special{pa 1553 -300}\special{fp}\special{pa 1522 -299}\special{pa 1514 -299}\special{fp}%
+\special{pa 1483 -298}\special{pa 1475 -297}\special{fp}\special{pa 1444 -294}\special{pa 1436 -293}\special{fp}%
+\special{pa 1406 -289}\special{pa 1398 -288}\special{fp}\special{pa 1367 -283}\special{pa 1359 -282}\special{fp}%
+\special{pa 1329 -275}\special{pa 1321 -273}\special{fp}\special{pa 1291 -266}\special{pa 1283 -263}\special{fp}%
+\special{pa 1254 -254}\special{pa 1246 -251}\special{fp}\special{pa 1217 -241}\special{pa 1210 -238}\special{fp}%
+\special{pa 1181 -226}\special{pa 1174 -222}\special{fp}\special{pa 1147 -208}\special{pa 1140 -204}\special{fp}%
+\special{pa 1114 -187}\special{pa 1107 -182}\special{fp}\special{pa 1083 -163}\special{pa 1077 -158}\special{fp}%
+\special{pa 1055 -136}\special{pa 1050 -130}\special{fp}\special{pa 1032 -105}\special{pa 1028 -98}\special{fp}%
+\special{pa 1016 -70}\special{pa 1013 -62}\special{fp}\special{pn 8}%
+\special{pa 0 -955}\special{pa -2 -954}\special{pa -4 -953}\special{pa -6 -951}%
+\special{pa -8 -950}\special{pa -9 -949}\special{pa -11 -948}\special{pa -13 -946}%
+\special{pa -15 -945}\special{pa -17 -944}\special{pa -19 -942}\special{pa -21 -941}%
+\special{pa -23 -939}\special{pa -25 -938}\special{pa -26 -936}\special{pa -28 -934}%
+\special{pa -30 -932}\special{pa -32 -931}\special{pa -34 -929}\special{pa -36 -927}%
+\special{pa -38 -925}\special{pa -40 -923}\special{pa -41 -921}\special{pa -43 -919}%
+\special{pa -45 -917}\special{pa -47 -915}\special{pa -49 -912}\special{pa -51 -910}%
+\special{pa -53 -908}\special{pa -55 -905}\special{pa -57 -903}\special{pa -58 -901}%
+\special{pa -60 -898}\special{pa -62 -896}\special{pa -64 -893}\special{pa -66 -890}%
+\special{pa -68 -888}\special{pa -70 -885}\special{pa -72 -882}\special{pa -74 -879}%
+\special{pa -75 -876}\special{pa -77 -873}\special{pa -79 -870}\special{pa -81 -867}%
+\special{pa -83 -864}\special{pa -85 -861}\special{pa -87 -858}\special{pa -89 -855}%
+\special{pa -91 -851}\special{pa -92 -848}\special{pa -94 -845}\special{pa -96 -841}%
+\special{pa -98 -838}\special{pa -100 -834}\special{pa -102 -831}\special{pa -104 -827}%
+\special{pa -106 -824}\special{pa -107 -820}\special{pa -109 -816}\special{pa -111 -812}%
+\special{pa -113 -808}\special{pa -115 -805}\special{pa -117 -801}\special{pa -119 -797}%
+\special{pa -121 -793}\special{pa -123 -789}\special{pa -124 -784}\special{pa -126 -780}%
+\special{pa -128 -776}\special{pa -130 -772}\special{pa -132 -767}\special{pa -134 -763}%
+\special{pa -136 -759}\special{pa -138 -754}\special{pa -140 -750}\special{pa -141 -745}%
+\special{pa -143 -740}\special{pa -145 -736}\special{pa -147 -731}\special{pa -149 -726}%
+\special{pa -151 -722}\special{pa -153 -717}\special{pa -155 -712}\special{pa -157 -707}%
+\special{pa -158 -702}\special{pa -160 -697}\special{pa -162 -692}\special{pa -164 -687}%
+\special{pa -166 -681}\special{pa -168 -676}\special{pa -170 -671}\special{pa -172 -666}%
+\special{pa -173 -660}\special{pa -175 -655}\special{pa -177 -649}\special{pa -179 -644}%
+\special{pa -181 -638}\special{pa -183 -633}\special{pa -185 -627}\special{pa -187 -621}%
+\special{pa -189 -616}\special{pa -190 -610}\special{pa -192 -604}\special{pa -194 -598}%
+\special{pa -196 -592}\special{pa -198 -586}\special{pa -200 -580}\special{pa -202 -574}%
+\special{pa -204 -568}\special{pa -206 -562}\special{pa -207 -555}\special{pa -209 -549}%
+\special{pa -211 -543}\special{pa -213 -536}\special{pa -215 -530}\special{pa -217 -523}%
+\special{pa -219 -517}\special{pa -221 -510}\special{pa -223 -504}\special{pa -224 -497}%
+\special{pa -226 -490}\special{pa -228 -484}\special{pa -230 -477}\special{pa -232 -470}%
+\special{pa -234 -463}\special{pa -236 -456}\special{pa -238 -449}\special{pa -239 -442}%
+\special{pa -241 -435}\special{pa -243 -428}\special{pa -245 -421}\special{pa -247 -413}%
+\special{pa -249 -406}\special{pa -251 -399}\special{pa -253 -391}\special{pa -255 -384}%
+\special{pa -256 -377}\special{pa -258 -369}\special{pa -260 -361}\special{pa -262 -354}%
+\special{pa -264 -346}\special{pa -266 -338}\special{pa -268 -331}\special{pa -270 -323}%
+\special{pa -272 -315}\special{pa -273 -307}\special{pa -275 -299}\special{pa -277 -291}%
+\special{pa -279 -283}\special{pa -281 -275}\special{pa -283 -267}\special{pa -285 -259}%
+\special{pa -287 -251}\special{pa -289 -242}\special{pa -290 -234}\special{pa -292 -226}%
+\special{pa -294 -217}\special{pa -296 -209}\special{pa -298 -200}\special{pa -300 -192}%
+\special{pa -302 -183}\special{pa -304 -174}\special{pa -306 -166}\special{pa -307 -157}%
+\special{pa -309 -148}\special{pa -311 -139}\special{pa -313 -130}\special{pa -315 -121}%
+\special{pa -317 -112}\special{pa -319 -103}\special{pa -321 -94}\special{pa -322 -85}%
+\special{pa -324 -76}\special{pa -326 -67}\special{pa -328 -57}\special{pa -330 -48}%
+\special{pa -332 -39}\special{pa -334 -29}\special{pa -336 -20}\special{pa -338 -10}%
+\special{pa -339 -1}\special{pa -341 9}\special{pa -343 19}\special{pa -345 28}%
+\special{pa -347 38}\special{pa -349 48}\special{pa -351 58}\special{pa -353 68}%
+\special{pa -355 78}\special{pa -356 88}\special{pa -358 98}\special{pa -360 108}%
+\special{pa -362 118}\special{pa -364 128}\special{pa -366 139}\special{pa -368 149}%
+\special{pa -370 159}\special{pa -372 170}\special{pa -373 180}\special{pa -375 190}%
+\special{pa -377 201}%
+\special{fp}%
+\special{pa 0 -955}\special{pa -1 -953}\special{pa -2 -952}\special{pa -4 -951}%
+\special{pa -5 -949}\special{pa -6 -948}\special{pa -7 -946}\special{pa -8 -945}%
+\special{pa -9 -943}\special{pa -11 -942}\special{pa -12 -940}\special{pa -13 -938}%
+\special{pa -14 -936}\special{pa -15 -934}\special{pa -16 -933}\special{pa -18 -931}%
+\special{pa -19 -929}\special{pa -20 -927}\special{pa -21 -924}\special{pa -22 -922}%
+\special{pa -23 -920}\special{pa -25 -918}\special{pa -26 -916}\special{pa -27 -913}%
+\special{pa -28 -911}\special{pa -29 -909}\special{pa -30 -906}\special{pa -32 -904}%
+\special{pa -33 -901}\special{pa -34 -898}\special{pa -35 -896}\special{pa -36 -893}%
+\special{pa -38 -890}\special{pa -39 -888}\special{pa -40 -885}\special{pa -41 -882}%
+\special{pa -42 -879}\special{pa -43 -876}\special{pa -45 -873}\special{pa -46 -870}%
+\special{pa -47 -867}\special{pa -48 -863}\special{pa -49 -860}\special{pa -50 -857}%
+\special{pa -52 -854}\special{pa -53 -850}\special{pa -54 -847}\special{pa -55 -843}%
+\special{pa -56 -840}\special{pa -57 -836}\special{pa -59 -833}\special{pa -60 -829}%
+\special{pa -61 -825}\special{pa -62 -822}\special{pa -63 -818}\special{pa -64 -814}%
+\special{pa -66 -810}\special{pa -67 -806}\special{pa -68 -802}\special{pa -69 -798}%
+\special{pa -70 -794}\special{pa -72 -790}\special{pa -73 -786}\special{pa -74 -781}%
+\special{pa -75 -777}\special{pa -76 -773}\special{pa -77 -768}\special{pa -79 -764}%
+\special{pa -80 -760}\special{pa -81 -755}\special{pa -82 -750}\special{pa -83 -746}%
+\special{pa -84 -741}\special{pa -86 -736}\special{pa -87 -732}\special{pa -88 -727}%
+\special{pa -89 -722}\special{pa -90 -717}\special{pa -91 -712}\special{pa -93 -707}%
+\special{pa -94 -702}\special{pa -95 -697}\special{pa -96 -692}\special{pa -97 -687}%
+\special{pa -98 -682}\special{pa -100 -676}\special{pa -101 -671}\special{pa -102 -666}%
+\special{pa -103 -660}\special{pa -104 -655}\special{pa -106 -649}\special{pa -107 -644}%
+\special{pa -108 -638}\special{pa -109 -632}\special{pa -110 -627}\special{pa -111 -621}%
+\special{pa -113 -615}\special{pa -114 -609}\special{pa -115 -603}\special{pa -116 -597}%
+\special{pa -117 -591}\special{pa -118 -585}\special{pa -120 -579}\special{pa -121 -573}%
+\special{pa -122 -567}\special{pa -123 -561}\special{pa -124 -554}\special{pa -125 -548}%
+\special{pa -127 -542}\special{pa -128 -535}\special{pa -129 -529}\special{pa -130 -522}%
+\special{pa -131 -516}\special{pa -132 -509}\special{pa -134 -502}\special{pa -135 -496}%
+\special{pa -136 -489}\special{pa -137 -482}\special{pa -138 -475}\special{pa -140 -468}%
+\special{pa -141 -461}\special{pa -142 -454}\special{pa -143 -447}\special{pa -144 -440}%
+\special{pa -145 -433}\special{pa -147 -426}\special{pa -148 -419}\special{pa -149 -411}%
+\special{pa -150 -404}\special{pa -151 -397}\special{pa -152 -389}\special{pa -154 -382}%
+\special{pa -155 -374}\special{pa -156 -367}\special{pa -157 -359}\special{pa -158 -351}%
+\special{pa -159 -344}\special{pa -161 -336}\special{pa -162 -328}\special{pa -163 -320}%
+\special{pa -164 -312}\special{pa -165 -304}\special{pa -166 -296}\special{pa -168 -288}%
+\special{pa -169 -280}\special{pa -170 -272}\special{pa -171 -264}\special{pa -172 -256}%
+\special{pa -174 -247}\special{pa -175 -239}\special{pa -176 -231}\special{pa -177 -222}%
+\special{pa -178 -214}\special{pa -179 -205}\special{pa -181 -197}\special{pa -182 -188}%
+\special{pa -183 -179}\special{pa -184 -171}\special{pa -185 -162}\special{pa -186 -153}%
+\special{pa -188 -144}\special{pa -189 -135}\special{pa -190 -126}\special{pa -191 -117}%
+\special{pa -192 -108}\special{pa -193 -99}\special{pa -195 -90}\special{pa -196 -81}%
+\special{pa -197 -72}\special{pa -198 -62}\special{pa -199 -53}\special{pa -200 -44}%
+\special{pa -202 -34}\special{pa -203 -25}\special{pa -204 -15}\special{pa -205 -6}%
+\special{pa -206 4}\special{pa -208 14}\special{pa -209 23}\special{pa -210 33}%
+\special{pa -211 43}\special{pa -212 53}\special{pa -213 63}\special{pa -215 73}%
+\special{pa -216 83}\special{pa -217 93}\special{pa -218 103}\special{pa -219 113}%
+\special{pa -220 123}\special{pa -222 134}\special{pa -223 144}\special{pa -224 154}%
+\special{pa -225 165}\special{pa -226 175}\special{pa -227 186}\special{pa -229 196}%
+\special{pa -230 207}\special{pa -231 217}\special{pa -232 228}\special{pa -233 239}%
+\special{pa -235 249}%
+\special{fp}%
+\special{pa 0 -955}\special{pa -0 -953}\special{pa -1 -952}\special{pa -1 -950}%
+\special{pa -1 -949}\special{pa -2 -947}\special{pa -2 -946}\special{pa -2 -944}%
+\special{pa -3 -942}\special{pa -3 -940}\special{pa -3 -939}\special{pa -4 -937}%
+\special{pa -4 -935}\special{pa -4 -933}\special{pa -5 -931}\special{pa -5 -929}%
+\special{pa -6 -927}\special{pa -6 -925}\special{pa -6 -922}\special{pa -7 -920}%
+\special{pa -7 -918}\special{pa -7 -915}\special{pa -8 -913}\special{pa -8 -911}%
+\special{pa -8 -908}\special{pa -9 -906}\special{pa -9 -903}\special{pa -9 -900}%
+\special{pa -10 -898}\special{pa -10 -895}\special{pa -10 -892}\special{pa -11 -889}%
+\special{pa -11 -886}\special{pa -11 -884}\special{pa -12 -881}\special{pa -12 -878}%
+\special{pa -12 -875}\special{pa -13 -871}\special{pa -13 -868}\special{pa -13 -865}%
+\special{pa -14 -862}\special{pa -14 -859}\special{pa -14 -855}\special{pa -15 -852}%
+\special{pa -15 -848}\special{pa -15 -845}\special{pa -16 -841}\special{pa -16 -838}%
+\special{pa -17 -834}\special{pa -17 -830}\special{pa -17 -827}\special{pa -18 -823}%
+\special{pa -18 -819}\special{pa -18 -815}\special{pa -19 -811}\special{pa -19 -807}%
+\special{pa -19 -803}\special{pa -20 -799}\special{pa -20 -795}\special{pa -20 -791}%
+\special{pa -21 -787}\special{pa -21 -782}\special{pa -21 -778}\special{pa -22 -774}%
+\special{pa -22 -769}\special{pa -22 -765}\special{pa -23 -760}\special{pa -23 -756}%
+\special{pa -23 -751}\special{pa -24 -747}\special{pa -24 -742}\special{pa -24 -737}%
+\special{pa -25 -733}\special{pa -25 -728}\special{pa -25 -723}\special{pa -26 -718}%
+\special{pa -26 -713}\special{pa -27 -708}\special{pa -27 -703}\special{pa -27 -698}%
+\special{pa -28 -693}\special{pa -28 -687}\special{pa -28 -682}\special{pa -29 -677}%
+\special{pa -29 -671}\special{pa -29 -666}\special{pa -30 -661}\special{pa -30 -655}%
+\special{pa -30 -650}\special{pa -31 -644}\special{pa -31 -638}\special{pa -31 -633}%
+\special{pa -32 -627}\special{pa -32 -621}\special{pa -32 -615}\special{pa -33 -609}%
+\special{pa -33 -603}\special{pa -33 -597}\special{pa -34 -591}\special{pa -34 -585}%
+\special{pa -34 -579}\special{pa -35 -573}\special{pa -35 -567}\special{pa -35 -561}%
+\special{pa -36 -554}\special{pa -36 -548}\special{pa -37 -542}\special{pa -37 -535}%
+\special{pa -37 -529}\special{pa -38 -522}\special{pa -38 -515}\special{pa -38 -509}%
+\special{pa -39 -502}\special{pa -39 -495}\special{pa -39 -489}\special{pa -40 -482}%
+\special{pa -40 -475}\special{pa -40 -468}\special{pa -41 -461}\special{pa -41 -454}%
+\special{pa -41 -447}\special{pa -42 -440}\special{pa -42 -433}\special{pa -42 -425}%
+\special{pa -43 -418}\special{pa -43 -411}\special{pa -43 -404}\special{pa -44 -396}%
+\special{pa -44 -389}\special{pa -44 -381}\special{pa -45 -374}\special{pa -45 -366}%
+\special{pa -45 -358}\special{pa -46 -351}\special{pa -46 -343}\special{pa -46 -335}%
+\special{pa -47 -327}\special{pa -47 -319}\special{pa -48 -311}\special{pa -48 -304}%
+\special{pa -48 -295}\special{pa -49 -287}\special{pa -49 -279}\special{pa -49 -271}%
+\special{pa -50 -263}\special{pa -50 -255}\special{pa -50 -246}\special{pa -51 -238}%
+\special{pa -51 -230}\special{pa -51 -221}\special{pa -52 -213}\special{pa -52 -204}%
+\special{pa -52 -195}\special{pa -53 -187}\special{pa -53 -178}\special{pa -53 -169}%
+\special{pa -54 -161}\special{pa -54 -152}\special{pa -54 -143}\special{pa -55 -134}%
+\special{pa -55 -125}\special{pa -55 -116}\special{pa -56 -107}\special{pa -56 -98}%
+\special{pa -56 -89}\special{pa -57 -79}\special{pa -57 -70}\special{pa -58 -61}%
+\special{pa -58 -51}\special{pa -58 -42}\special{pa -59 -33}\special{pa -59 -23}%
+\special{pa -59 -13}\special{pa -60 -4}\special{pa -60 6}\special{pa -60 15}%
+\special{pa -61 25}\special{pa -61 35}\special{pa -61 45}\special{pa -62 55}%
+\special{pa -62 65}\special{pa -62 75}\special{pa -63 85}\special{pa -63 95}%
+\special{pa -63 105}\special{pa -64 115}\special{pa -64 125}\special{pa -64 136}%
+\special{pa -65 146}\special{pa -65 156}\special{pa -65 167}\special{pa -66 177}%
+\special{pa -66 188}\special{pa -66 198}\special{pa -67 209}\special{pa -67 219}%
+\special{pa -68 230}\special{pa -68 241}\special{pa -68 252}\special{pa -69 263}%
+\special{pa -69 273}%
+\special{fp}%
+\special{pa 0 -955}\special{pa 1 -953}\special{pa 1 -952}\special{pa 2 -950}%
+\special{pa 2 -949}\special{pa 3 -947}\special{pa 3 -946}\special{pa 4 -944}%
+\special{pa 4 -942}\special{pa 5 -941}\special{pa 5 -939}\special{pa 6 -937}%
+\special{pa 6 -935}\special{pa 7 -933}\special{pa 7 -931}\special{pa 8 -929}%
+\special{pa 8 -927}\special{pa 9 -925}\special{pa 9 -923}\special{pa 10 -920}%
+\special{pa 10 -918}\special{pa 11 -916}\special{pa 11 -913}\special{pa 12 -911}%
+\special{pa 12 -908}\special{pa 13 -906}\special{pa 13 -903}\special{pa 14 -901}%
+\special{pa 14 -898}\special{pa 15 -895}\special{pa 16 -893}\special{pa 16 -890}%
+\special{pa 17 -887}\special{pa 17 -884}\special{pa 18 -881}\special{pa 18 -878}%
+\special{pa 19 -875}\special{pa 19 -872}\special{pa 20 -869}\special{pa 20 -866}%
+\special{pa 21 -862}\special{pa 21 -859}\special{pa 22 -856}\special{pa 22 -852}%
+\special{pa 23 -849}\special{pa 23 -845}\special{pa 24 -842}\special{pa 24 -838}%
+\special{pa 25 -835}\special{pa 25 -831}\special{pa 26 -827}\special{pa 26 -824}%
+\special{pa 27 -820}\special{pa 27 -816}\special{pa 28 -812}\special{pa 28 -808}%
+\special{pa 29 -804}\special{pa 29 -800}\special{pa 30 -796}\special{pa 31 -792}%
+\special{pa 31 -788}\special{pa 32 -783}\special{pa 32 -779}\special{pa 33 -775}%
+\special{pa 33 -770}\special{pa 34 -766}\special{pa 34 -761}\special{pa 35 -757}%
+\special{pa 35 -752}\special{pa 36 -748}\special{pa 36 -743}\special{pa 37 -738}%
+\special{pa 37 -733}\special{pa 38 -729}\special{pa 38 -724}\special{pa 39 -719}%
+\special{pa 39 -714}\special{pa 40 -709}\special{pa 40 -704}\special{pa 41 -699}%
+\special{pa 41 -694}\special{pa 42 -688}\special{pa 42 -683}\special{pa 43 -678}%
+\special{pa 43 -673}\special{pa 44 -667}\special{pa 44 -662}\special{pa 45 -656}%
+\special{pa 46 -651}\special{pa 46 -645}\special{pa 47 -640}\special{pa 47 -634}%
+\special{pa 48 -628}\special{pa 48 -622}\special{pa 49 -617}\special{pa 49 -611}%
+\special{pa 50 -605}\special{pa 50 -599}\special{pa 51 -593}\special{pa 51 -587}%
+\special{pa 52 -581}\special{pa 52 -575}\special{pa 53 -568}\special{pa 53 -562}%
+\special{pa 54 -556}\special{pa 54 -549}\special{pa 55 -543}\special{pa 55 -537}%
+\special{pa 56 -530}\special{pa 56 -524}\special{pa 57 -517}\special{pa 57 -510}%
+\special{pa 58 -504}\special{pa 58 -497}\special{pa 59 -490}\special{pa 60 -483}%
+\special{pa 60 -477}\special{pa 61 -470}\special{pa 61 -463}\special{pa 62 -456}%
+\special{pa 62 -449}\special{pa 63 -441}\special{pa 63 -434}\special{pa 64 -427}%
+\special{pa 64 -420}\special{pa 65 -413}\special{pa 65 -405}\special{pa 66 -398}%
+\special{pa 66 -390}\special{pa 67 -383}\special{pa 67 -375}\special{pa 68 -368}%
+\special{pa 68 -360}\special{pa 69 -352}\special{pa 69 -345}\special{pa 70 -337}%
+\special{pa 70 -329}\special{pa 71 -321}\special{pa 71 -313}\special{pa 72 -305}%
+\special{pa 72 -297}\special{pa 73 -289}\special{pa 73 -281}\special{pa 74 -273}%
+\special{pa 75 -265}\special{pa 75 -257}\special{pa 76 -248}\special{pa 76 -240}%
+\special{pa 77 -232}\special{pa 77 -223}\special{pa 78 -215}\special{pa 78 -206}%
+\special{pa 79 -198}\special{pa 79 -189}\special{pa 80 -180}\special{pa 80 -171}%
+\special{pa 81 -163}\special{pa 81 -154}\special{pa 82 -145}\special{pa 82 -136}%
+\special{pa 83 -127}\special{pa 83 -118}\special{pa 84 -109}\special{pa 84 -100}%
+\special{pa 85 -91}\special{pa 85 -82}\special{pa 86 -72}\special{pa 86 -63}%
+\special{pa 87 -54}\special{pa 87 -44}\special{pa 88 -35}\special{pa 88 -25}%
+\special{pa 89 -16}\special{pa 90 -6}\special{pa 90 3}\special{pa 91 13}%
+\special{pa 91 23}\special{pa 92 33}\special{pa 92 42}\special{pa 93 52}%
+\special{pa 93 62}\special{pa 94 72}\special{pa 94 82}\special{pa 95 92}%
+\special{pa 95 102}\special{pa 96 113}\special{pa 96 123}\special{pa 97 133}%
+\special{pa 97 143}\special{pa 98 154}\special{pa 98 164}\special{pa 99 175}%
+\special{pa 99 185}\special{pa 100 196}\special{pa 100 206}\special{pa 101 217}%
+\special{pa 101 227}\special{pa 102 238}\special{pa 102 249}\special{pa 103 260}%
+\special{pa 103 271}%
+\special{fp}%
+\special{pa 0 -955}\special{pa 1 -953}\special{pa 3 -952}\special{pa 4 -951}%
+\special{pa 5 -949}\special{pa 7 -948}\special{pa 8 -947}\special{pa 9 -945}%
+\special{pa 11 -943}\special{pa 12 -942}\special{pa 13 -940}\special{pa 15 -939}%
+\special{pa 16 -937}\special{pa 17 -935}\special{pa 19 -933}\special{pa 20 -931}%
+\special{pa 21 -929}\special{pa 23 -927}\special{pa 24 -925}\special{pa 25 -923}%
+\special{pa 27 -921}\special{pa 28 -919}\special{pa 29 -917}\special{pa 31 -914}%
+\special{pa 32 -912}\special{pa 33 -910}\special{pa 35 -907}\special{pa 36 -905}%
+\special{pa 37 -902}\special{pa 39 -900}\special{pa 40 -897}\special{pa 41 -894}%
+\special{pa 43 -892}\special{pa 44 -889}\special{pa 45 -886}\special{pa 46 -883}%
+\special{pa 48 -880}\special{pa 49 -877}\special{pa 50 -874}\special{pa 52 -871}%
+\special{pa 53 -868}\special{pa 54 -865}\special{pa 56 -862}\special{pa 57 -859}%
+\special{pa 58 -855}\special{pa 60 -852}\special{pa 61 -849}\special{pa 62 -845}%
+\special{pa 64 -842}\special{pa 65 -838}\special{pa 66 -835}\special{pa 68 -831}%
+\special{pa 69 -827}\special{pa 70 -824}\special{pa 72 -820}\special{pa 73 -816}%
+\special{pa 74 -812}\special{pa 76 -808}\special{pa 77 -804}\special{pa 78 -800}%
+\special{pa 80 -796}\special{pa 81 -792}\special{pa 82 -788}\special{pa 84 -784}%
+\special{pa 85 -780}\special{pa 86 -775}\special{pa 88 -771}\special{pa 89 -767}%
+\special{pa 90 -762}\special{pa 92 -758}\special{pa 93 -753}\special{pa 94 -749}%
+\special{pa 96 -744}\special{pa 97 -739}\special{pa 98 -735}\special{pa 100 -730}%
+\special{pa 101 -725}\special{pa 102 -720}\special{pa 104 -715}\special{pa 105 -710}%
+\special{pa 106 -705}\special{pa 108 -700}\special{pa 109 -695}\special{pa 110 -690}%
+\special{pa 112 -685}\special{pa 113 -680}\special{pa 114 -674}\special{pa 116 -669}%
+\special{pa 117 -664}\special{pa 118 -658}\special{pa 120 -653}\special{pa 121 -647}%
+\special{pa 122 -642}\special{pa 124 -636}\special{pa 125 -630}\special{pa 126 -625}%
+\special{pa 128 -619}\special{pa 129 -613}\special{pa 130 -607}\special{pa 132 -601}%
+\special{pa 133 -595}\special{pa 134 -589}\special{pa 136 -583}\special{pa 137 -577}%
+\special{pa 138 -571}\special{pa 139 -565}\special{pa 141 -559}\special{pa 142 -552}%
+\special{pa 143 -546}\special{pa 145 -540}\special{pa 146 -533}\special{pa 147 -527}%
+\special{pa 149 -520}\special{pa 150 -513}\special{pa 151 -507}\special{pa 153 -500}%
+\special{pa 154 -493}\special{pa 155 -487}\special{pa 157 -480}\special{pa 158 -473}%
+\special{pa 159 -466}\special{pa 161 -459}\special{pa 162 -452}\special{pa 163 -445}%
+\special{pa 165 -438}\special{pa 166 -431}\special{pa 167 -424}\special{pa 169 -416}%
+\special{pa 170 -409}\special{pa 171 -402}\special{pa 173 -394}\special{pa 174 -387}%
+\special{pa 175 -379}\special{pa 177 -372}\special{pa 178 -364}\special{pa 179 -357}%
+\special{pa 181 -349}\special{pa 182 -341}\special{pa 183 -334}\special{pa 185 -326}%
+\special{pa 186 -318}\special{pa 187 -310}\special{pa 189 -302}\special{pa 190 -294}%
+\special{pa 191 -286}\special{pa 193 -278}\special{pa 194 -270}\special{pa 195 -261}%
+\special{pa 197 -253}\special{pa 198 -245}\special{pa 199 -237}\special{pa 201 -228}%
+\special{pa 202 -220}\special{pa 203 -211}\special{pa 205 -203}\special{pa 206 -194}%
+\special{pa 207 -186}\special{pa 209 -177}\special{pa 210 -168}\special{pa 211 -159}%
+\special{pa 213 -151}\special{pa 214 -142}\special{pa 215 -133}\special{pa 217 -124}%
+\special{pa 218 -115}\special{pa 219 -106}\special{pa 221 -97}\special{pa 222 -87}%
+\special{pa 223 -78}\special{pa 225 -69}\special{pa 226 -60}\special{pa 227 -50}%
+\special{pa 229 -41}\special{pa 230 -32}\special{pa 231 -22}\special{pa 232 -12}%
+\special{pa 234 -3}\special{pa 235 7}\special{pa 236 16}\special{pa 238 26}%
+\special{pa 239 36}\special{pa 240 46}\special{pa 242 56}\special{pa 243 66}%
+\special{pa 244 75}\special{pa 246 86}\special{pa 247 96}\special{pa 248 106}%
+\special{pa 250 116}\special{pa 251 126}\special{pa 252 136}\special{pa 254 147}%
+\special{pa 255 157}\special{pa 256 167}\special{pa 258 178}\special{pa 259 188}%
+\special{pa 260 199}\special{pa 262 209}\special{pa 263 220}\special{pa 264 231}%
+\special{pa 266 241}%
+\special{fp}%
+\special{pa 0 -955}\special{pa 2 -954}\special{pa 4 -953}\special{pa 6 -952}%
+\special{pa 8 -951}\special{pa 10 -949}\special{pa 12 -948}\special{pa 14 -947}%
+\special{pa 16 -946}\special{pa 18 -944}\special{pa 20 -943}\special{pa 22 -941}%
+\special{pa 24 -940}\special{pa 26 -938}\special{pa 28 -937}\special{pa 30 -935}%
+\special{pa 32 -933}\special{pa 34 -932}\special{pa 36 -930}\special{pa 38 -928}%
+\special{pa 40 -926}\special{pa 42 -924}\special{pa 44 -922}\special{pa 46 -920}%
+\special{pa 48 -918}\special{pa 50 -916}\special{pa 52 -914}\special{pa 54 -912}%
+\special{pa 56 -910}\special{pa 58 -907}\special{pa 60 -905}\special{pa 62 -903}%
+\special{pa 64 -900}\special{pa 66 -898}\special{pa 68 -895}\special{pa 70 -892}%
+\special{pa 72 -890}\special{pa 74 -887}\special{pa 76 -884}\special{pa 78 -882}%
+\special{pa 80 -879}\special{pa 82 -876}\special{pa 84 -873}\special{pa 86 -870}%
+\special{pa 88 -867}\special{pa 90 -864}\special{pa 92 -861}\special{pa 94 -858}%
+\special{pa 96 -854}\special{pa 98 -851}\special{pa 100 -848}\special{pa 102 -845}%
+\special{pa 105 -841}\special{pa 107 -838}\special{pa 109 -834}\special{pa 111 -831}%
+\special{pa 113 -827}\special{pa 115 -823}\special{pa 117 -820}\special{pa 119 -816}%
+\special{pa 121 -812}\special{pa 123 -808}\special{pa 125 -804}\special{pa 127 -801}%
+\special{pa 129 -797}\special{pa 131 -793}\special{pa 133 -788}\special{pa 135 -784}%
+\special{pa 137 -780}\special{pa 139 -776}\special{pa 141 -772}\special{pa 143 -767}%
+\special{pa 145 -763}\special{pa 147 -759}\special{pa 149 -754}\special{pa 151 -750}%
+\special{pa 153 -745}\special{pa 155 -741}\special{pa 157 -736}\special{pa 159 -731}%
+\special{pa 161 -726}\special{pa 163 -722}\special{pa 165 -717}\special{pa 167 -712}%
+\special{pa 169 -707}\special{pa 171 -702}\special{pa 173 -697}\special{pa 175 -692}%
+\special{pa 177 -687}\special{pa 179 -682}\special{pa 181 -676}\special{pa 183 -671}%
+\special{pa 185 -666}\special{pa 187 -661}\special{pa 189 -655}\special{pa 191 -650}%
+\special{pa 193 -644}\special{pa 195 -639}\special{pa 197 -633}\special{pa 199 -627}%
+\special{pa 201 -622}\special{pa 203 -616}\special{pa 205 -610}\special{pa 207 -604}%
+\special{pa 209 -598}\special{pa 211 -593}\special{pa 213 -587}\special{pa 215 -581}%
+\special{pa 217 -574}\special{pa 219 -568}\special{pa 221 -562}\special{pa 223 -556}%
+\special{pa 225 -550}\special{pa 227 -543}\special{pa 229 -537}\special{pa 231 -531}%
+\special{pa 233 -524}\special{pa 235 -518}\special{pa 237 -511}\special{pa 239 -504}%
+\special{pa 241 -498}\special{pa 243 -491}\special{pa 245 -484}\special{pa 247 -478}%
+\special{pa 249 -471}\special{pa 251 -464}\special{pa 253 -457}\special{pa 255 -450}%
+\special{pa 257 -443}\special{pa 259 -436}\special{pa 261 -429}\special{pa 263 -422}%
+\special{pa 265 -414}\special{pa 267 -407}\special{pa 269 -400}\special{pa 271 -392}%
+\special{pa 273 -385}\special{pa 275 -378}\special{pa 277 -370}\special{pa 279 -362}%
+\special{pa 281 -355}\special{pa 283 -347}\special{pa 285 -340}\special{pa 287 -332}%
+\special{pa 289 -324}\special{pa 291 -316}\special{pa 293 -308}\special{pa 295 -300}%
+\special{pa 297 -292}\special{pa 299 -284}\special{pa 301 -276}\special{pa 303 -268}%
+\special{pa 305 -260}\special{pa 307 -252}\special{pa 309 -243}\special{pa 311 -235}%
+\special{pa 314 -227}\special{pa 316 -218}\special{pa 318 -210}\special{pa 320 -201}%
+\special{pa 322 -193}\special{pa 324 -184}\special{pa 326 -176}\special{pa 328 -167}%
+\special{pa 330 -158}\special{pa 332 -149}\special{pa 334 -140}\special{pa 336 -132}%
+\special{pa 338 -123}\special{pa 340 -114}\special{pa 342 -105}\special{pa 344 -96}%
+\special{pa 346 -86}\special{pa 348 -77}\special{pa 350 -68}\special{pa 352 -59}%
+\special{pa 354 -49}\special{pa 356 -40}\special{pa 358 -31}\special{pa 360 -21}%
+\special{pa 362 -12}\special{pa 364 -2}\special{pa 366 8}\special{pa 368 17}%
+\special{pa 370 27}\special{pa 372 37}\special{pa 374 46}\special{pa 376 56}%
+\special{pa 378 66}\special{pa 380 76}\special{pa 382 86}\special{pa 384 96}%
+\special{pa 386 106}\special{pa 388 116}\special{pa 390 127}\special{pa 392 137}%
+\special{pa 394 147}\special{pa 396 157}\special{pa 398 168}\special{pa 400 178}%
+\special{pa 402 189}%
+\special{fp}%
+\special{pa 0 -955}\special{pa 2 -954}\special{pa 5 -953}\special{pa 7 -953}%
+\special{pa 10 -952}\special{pa 12 -951}\special{pa 15 -950}\special{pa 17 -949}%
+\special{pa 20 -948}\special{pa 22 -947}\special{pa 25 -946}\special{pa 27 -945}%
+\special{pa 30 -944}\special{pa 32 -943}\special{pa 35 -942}\special{pa 37 -941}%
+\special{pa 40 -939}\special{pa 42 -938}\special{pa 45 -936}\special{pa 47 -935}%
+\special{pa 50 -933}\special{pa 52 -932}\special{pa 55 -930}\special{pa 57 -929}%
+\special{pa 60 -927}\special{pa 62 -925}\special{pa 65 -923}\special{pa 67 -921}%
+\special{pa 70 -920}\special{pa 72 -918}\special{pa 75 -916}\special{pa 77 -914}%
+\special{pa 80 -911}\special{pa 82 -909}\special{pa 85 -907}\special{pa 87 -905}%
+\special{pa 90 -903}\special{pa 92 -900}\special{pa 95 -898}\special{pa 97 -896}%
+\special{pa 100 -893}\special{pa 102 -891}\special{pa 105 -888}\special{pa 107 -885}%
+\special{pa 110 -883}\special{pa 112 -880}\special{pa 115 -877}\special{pa 117 -874}%
+\special{pa 120 -872}\special{pa 122 -869}\special{pa 125 -866}\special{pa 127 -863}%
+\special{pa 130 -860}\special{pa 132 -857}\special{pa 135 -853}\special{pa 137 -850}%
+\special{pa 140 -847}\special{pa 142 -844}\special{pa 145 -840}\special{pa 147 -837}%
+\special{pa 150 -834}\special{pa 152 -830}\special{pa 155 -827}\special{pa 157 -823}%
+\special{pa 160 -819}\special{pa 162 -816}\special{pa 165 -812}\special{pa 167 -808}%
+\special{pa 170 -804}\special{pa 172 -801}\special{pa 175 -797}\special{pa 177 -793}%
+\special{pa 180 -789}\special{pa 182 -785}\special{pa 185 -781}\special{pa 187 -776}%
+\special{pa 190 -772}\special{pa 192 -768}\special{pa 195 -764}\special{pa 197 -759}%
+\special{pa 200 -755}\special{pa 202 -751}\special{pa 205 -746}\special{pa 207 -742}%
+\special{pa 210 -737}\special{pa 212 -732}\special{pa 214 -728}\special{pa 217 -723}%
+\special{pa 219 -718}\special{pa 222 -713}\special{pa 224 -709}\special{pa 227 -704}%
+\special{pa 229 -699}\special{pa 232 -694}\special{pa 234 -689}\special{pa 237 -684}%
+\special{pa 239 -678}\special{pa 242 -673}\special{pa 244 -668}\special{pa 247 -663}%
+\special{pa 249 -657}\special{pa 252 -652}\special{pa 254 -647}\special{pa 257 -641}%
+\special{pa 259 -636}\special{pa 262 -630}\special{pa 264 -624}\special{pa 267 -619}%
+\special{pa 269 -613}\special{pa 272 -607}\special{pa 274 -601}\special{pa 277 -596}%
+\special{pa 279 -590}\special{pa 282 -584}\special{pa 284 -578}\special{pa 287 -572}%
+\special{pa 289 -566}\special{pa 292 -559}\special{pa 294 -553}\special{pa 297 -547}%
+\special{pa 299 -541}\special{pa 302 -534}\special{pa 304 -528}\special{pa 307 -521}%
+\special{pa 309 -515}\special{pa 312 -508}\special{pa 314 -502}\special{pa 317 -495}%
+\special{pa 319 -489}\special{pa 322 -482}\special{pa 324 -475}\special{pa 327 -468}%
+\special{pa 329 -461}\special{pa 332 -455}\special{pa 334 -448}\special{pa 337 -441}%
+\special{pa 339 -434}\special{pa 342 -426}\special{pa 344 -419}\special{pa 347 -412}%
+\special{pa 349 -405}\special{pa 352 -398}\special{pa 354 -390}\special{pa 357 -383}%
+\special{pa 359 -375}\special{pa 362 -368}\special{pa 364 -360}\special{pa 367 -353}%
+\special{pa 369 -345}\special{pa 372 -337}\special{pa 374 -330}\special{pa 377 -322}%
+\special{pa 379 -314}\special{pa 382 -306}\special{pa 384 -298}\special{pa 387 -290}%
+\special{pa 389 -282}\special{pa 392 -274}\special{pa 394 -266}\special{pa 397 -258}%
+\special{pa 399 -250}\special{pa 402 -242}\special{pa 404 -233}\special{pa 407 -225}%
+\special{pa 409 -217}\special{pa 412 -208}\special{pa 414 -200}\special{pa 417 -191}%
+\special{pa 419 -183}\special{pa 421 -174}\special{pa 424 -165}\special{pa 426 -157}%
+\special{pa 429 -148}\special{pa 431 -139}\special{pa 434 -130}\special{pa 436 -121}%
+\special{pa 439 -112}\special{pa 441 -103}\special{pa 444 -94}\special{pa 446 -85}%
+\special{pa 449 -76}\special{pa 451 -67}\special{pa 454 -57}\special{pa 456 -48}%
+\special{pa 459 -39}\special{pa 461 -29}\special{pa 464 -20}\special{pa 466 -10}%
+\special{pa 469 -1}\special{pa 471 9}\special{pa 474 18}\special{pa 476 28}%
+\special{pa 479 38}\special{pa 481 47}\special{pa 484 57}\special{pa 486 67}%
+\special{pa 489 77}\special{pa 491 87}\special{pa 494 97}\special{pa 496 107}%
+\special{pa 499 117}%
+\special{fp}%
+\special{pa 0 -955}\special{pa 3 -954}\special{pa 5 -954}\special{pa 8 -954}%
+\special{pa 11 -954}\special{pa 14 -953}\special{pa 16 -953}\special{pa 19 -952}%
+\special{pa 22 -952}\special{pa 25 -951}\special{pa 27 -951}\special{pa 30 -950}%
+\special{pa 33 -949}\special{pa 36 -948}\special{pa 38 -948}\special{pa 41 -947}%
+\special{pa 44 -946}\special{pa 46 -945}\special{pa 49 -944}\special{pa 52 -943}%
+\special{pa 55 -942}\special{pa 57 -941}\special{pa 60 -939}\special{pa 63 -938}%
+\special{pa 66 -937}\special{pa 68 -935}\special{pa 71 -934}\special{pa 74 -933}%
+\special{pa 77 -931}\special{pa 79 -930}\special{pa 82 -928}\special{pa 85 -926}%
+\special{pa 87 -925}\special{pa 90 -923}\special{pa 93 -921}\special{pa 96 -919}%
+\special{pa 98 -918}\special{pa 101 -916}\special{pa 104 -914}\special{pa 107 -912}%
+\special{pa 109 -910}\special{pa 112 -907}\special{pa 115 -905}\special{pa 118 -903}%
+\special{pa 120 -901}\special{pa 123 -899}\special{pa 126 -896}\special{pa 129 -894}%
+\special{pa 131 -891}\special{pa 134 -889}\special{pa 137 -886}\special{pa 139 -884}%
+\special{pa 142 -881}\special{pa 145 -879}\special{pa 148 -876}\special{pa 150 -873}%
+\special{pa 153 -870}\special{pa 156 -867}\special{pa 159 -864}\special{pa 161 -861}%
+\special{pa 164 -858}\special{pa 167 -855}\special{pa 170 -852}\special{pa 172 -849}%
+\special{pa 175 -846}\special{pa 178 -843}\special{pa 180 -839}\special{pa 183 -836}%
+\special{pa 186 -833}\special{pa 189 -829}\special{pa 191 -826}\special{pa 194 -822}%
+\special{pa 197 -819}\special{pa 200 -815}\special{pa 202 -811}\special{pa 205 -808}%
+\special{pa 208 -804}\special{pa 211 -800}\special{pa 213 -796}\special{pa 216 -792}%
+\special{pa 219 -788}\special{pa 221 -784}\special{pa 224 -780}\special{pa 227 -776}%
+\special{pa 230 -772}\special{pa 232 -768}\special{pa 235 -763}\special{pa 238 -759}%
+\special{pa 241 -755}\special{pa 243 -750}\special{pa 246 -746}\special{pa 249 -741}%
+\special{pa 252 -737}\special{pa 254 -732}\special{pa 257 -728}\special{pa 260 -723}%
+\special{pa 262 -718}\special{pa 265 -713}\special{pa 268 -709}\special{pa 271 -704}%
+\special{pa 273 -699}\special{pa 276 -694}\special{pa 279 -689}\special{pa 282 -684}%
+\special{pa 284 -679}\special{pa 287 -673}\special{pa 290 -668}\special{pa 293 -663}%
+\special{pa 295 -658}\special{pa 298 -652}\special{pa 301 -647}\special{pa 304 -641}%
+\special{pa 306 -636}\special{pa 309 -630}\special{pa 312 -625}\special{pa 314 -619}%
+\special{pa 317 -614}\special{pa 320 -608}\special{pa 323 -602}\special{pa 325 -596}%
+\special{pa 328 -590}\special{pa 331 -584}\special{pa 334 -578}\special{pa 336 -572}%
+\special{pa 339 -566}\special{pa 342 -560}\special{pa 345 -554}\special{pa 347 -548}%
+\special{pa 350 -542}\special{pa 353 -535}\special{pa 355 -529}\special{pa 358 -523}%
+\special{pa 361 -516}\special{pa 364 -510}\special{pa 366 -503}\special{pa 369 -496}%
+\special{pa 372 -490}\special{pa 375 -483}\special{pa 377 -476}\special{pa 380 -470}%
+\special{pa 383 -463}\special{pa 386 -456}\special{pa 388 -449}\special{pa 391 -442}%
+\special{pa 394 -435}\special{pa 396 -428}\special{pa 399 -421}\special{pa 402 -414}%
+\special{pa 405 -406}\special{pa 407 -399}\special{pa 410 -392}\special{pa 413 -384}%
+\special{pa 416 -377}\special{pa 418 -370}\special{pa 421 -362}\special{pa 424 -355}%
+\special{pa 427 -347}\special{pa 429 -339}\special{pa 432 -332}\special{pa 435 -324}%
+\special{pa 437 -316}\special{pa 440 -308}\special{pa 443 -300}\special{pa 446 -292}%
+\special{pa 448 -285}\special{pa 451 -276}\special{pa 454 -268}\special{pa 457 -260}%
+\special{pa 459 -252}\special{pa 462 -244}\special{pa 465 -236}\special{pa 468 -227}%
+\special{pa 470 -219}\special{pa 473 -211}\special{pa 476 -202}\special{pa 479 -194}%
+\special{pa 481 -185}\special{pa 484 -176}\special{pa 487 -168}\special{pa 489 -159}%
+\special{pa 492 -150}\special{pa 495 -142}\special{pa 498 -133}\special{pa 500 -124}%
+\special{pa 503 -115}\special{pa 506 -106}\special{pa 509 -97}\special{pa 511 -88}%
+\special{pa 514 -79}\special{pa 517 -70}\special{pa 520 -60}\special{pa 522 -51}%
+\special{pa 525 -42}\special{pa 528 -32}\special{pa 530 -23}\special{pa 533 -14}%
+\special{pa 536 -4}\special{pa 539 6}\special{pa 541 15}\special{pa 544 25}%
+\special{pa 547 34}%
+\special{fp}%
+\special{pa 0 -955}\special{pa 3 -955}\special{pa 5 -955}\special{pa 8 -955}%
+\special{pa 11 -955}\special{pa 14 -955}\special{pa 16 -955}\special{pa 19 -955}%
+\special{pa 22 -955}\special{pa 24 -955}\special{pa 27 -955}\special{pa 30 -955}%
+\special{pa 32 -954}\special{pa 35 -954}\special{pa 38 -954}\special{pa 41 -953}%
+\special{pa 43 -953}\special{pa 46 -952}\special{pa 49 -952}\special{pa 51 -951}%
+\special{pa 54 -950}\special{pa 57 -950}\special{pa 60 -949}\special{pa 62 -948}%
+\special{pa 65 -947}\special{pa 68 -946}\special{pa 70 -945}\special{pa 73 -944}%
+\special{pa 76 -943}\special{pa 79 -942}\special{pa 81 -941}\special{pa 84 -940}%
+\special{pa 87 -939}\special{pa 89 -937}\special{pa 92 -936}\special{pa 95 -934}%
+\special{pa 97 -933}\special{pa 100 -932}\special{pa 103 -930}\special{pa 106 -928}%
+\special{pa 108 -927}\special{pa 111 -925}\special{pa 114 -923}\special{pa 116 -922}%
+\special{pa 119 -920}\special{pa 122 -918}\special{pa 125 -916}\special{pa 127 -914}%
+\special{pa 130 -912}\special{pa 133 -910}\special{pa 135 -908}\special{pa 138 -906}%
+\special{pa 141 -904}\special{pa 143 -901}\special{pa 146 -899}\special{pa 149 -897}%
+\special{pa 152 -894}\special{pa 154 -892}\special{pa 157 -889}\special{pa 160 -887}%
+\special{pa 162 -884}\special{pa 165 -882}\special{pa 168 -879}\special{pa 171 -876}%
+\special{pa 173 -873}\special{pa 176 -871}\special{pa 179 -868}\special{pa 181 -865}%
+\special{pa 184 -862}\special{pa 187 -859}\special{pa 189 -856}\special{pa 192 -853}%
+\special{pa 195 -850}\special{pa 198 -846}\special{pa 200 -843}\special{pa 203 -840}%
+\special{pa 206 -836}\special{pa 208 -833}\special{pa 211 -830}\special{pa 214 -826}%
+\special{pa 217 -823}\special{pa 219 -819}\special{pa 222 -815}\special{pa 225 -812}%
+\special{pa 227 -808}\special{pa 230 -804}\special{pa 233 -800}\special{pa 236 -797}%
+\special{pa 238 -793}\special{pa 241 -789}\special{pa 244 -785}\special{pa 246 -781}%
+\special{pa 249 -776}\special{pa 252 -772}\special{pa 254 -768}\special{pa 257 -764}%
+\special{pa 260 -760}\special{pa 263 -755}\special{pa 265 -751}\special{pa 268 -746}%
+\special{pa 271 -742}\special{pa 273 -737}\special{pa 276 -733}\special{pa 279 -728}%
+\special{pa 282 -723}\special{pa 284 -719}\special{pa 287 -714}\special{pa 290 -709}%
+\special{pa 292 -704}\special{pa 295 -699}\special{pa 298 -694}\special{pa 300 -689}%
+\special{pa 303 -684}\special{pa 306 -679}\special{pa 309 -674}\special{pa 311 -669}%
+\special{pa 314 -664}\special{pa 317 -658}\special{pa 319 -653}\special{pa 322 -647}%
+\special{pa 325 -642}\special{pa 328 -637}\special{pa 330 -631}\special{pa 333 -625}%
+\special{pa 336 -620}\special{pa 338 -614}\special{pa 341 -608}\special{pa 344 -603}%
+\special{pa 346 -597}\special{pa 349 -591}\special{pa 352 -585}\special{pa 355 -579}%
+\special{pa 357 -573}\special{pa 360 -567}\special{pa 363 -561}\special{pa 365 -555}%
+\special{pa 368 -548}\special{pa 371 -542}\special{pa 374 -536}\special{pa 376 -530}%
+\special{pa 379 -523}\special{pa 382 -517}\special{pa 384 -510}\special{pa 387 -504}%
+\special{pa 390 -497}\special{pa 393 -490}\special{pa 395 -484}\special{pa 398 -477}%
+\special{pa 401 -470}\special{pa 403 -463}\special{pa 406 -456}\special{pa 409 -450}%
+\special{pa 411 -443}\special{pa 414 -436}\special{pa 417 -428}\special{pa 420 -421}%
+\special{pa 422 -414}\special{pa 425 -407}\special{pa 428 -400}\special{pa 430 -392}%
+\special{pa 433 -385}\special{pa 436 -378}\special{pa 439 -370}\special{pa 441 -363}%
+\special{pa 444 -355}\special{pa 447 -348}\special{pa 449 -340}\special{pa 452 -332}%
+\special{pa 455 -325}\special{pa 457 -317}\special{pa 460 -309}\special{pa 463 -301}%
+\special{pa 466 -293}\special{pa 468 -285}\special{pa 471 -277}\special{pa 474 -269}%
+\special{pa 476 -261}\special{pa 479 -253}\special{pa 482 -245}\special{pa 485 -236}%
+\special{pa 487 -228}\special{pa 490 -220}\special{pa 493 -211}\special{pa 495 -203}%
+\special{pa 498 -194}\special{pa 501 -186}\special{pa 503 -177}\special{pa 506 -168}%
+\special{pa 509 -160}\special{pa 512 -151}\special{pa 514 -142}\special{pa 517 -133}%
+\special{pa 520 -125}\special{pa 522 -116}\special{pa 525 -107}\special{pa 528 -98}%
+\special{pa 531 -89}\special{pa 533 -79}\special{pa 536 -70}\special{pa 539 -61}%
+\special{pa 541 -52}%
+\special{fp}%
+\special{pa 0 -955}\special{pa 2 -955}\special{pa 5 -956}\special{pa 7 -956}%
+\special{pa 10 -957}\special{pa 12 -957}\special{pa 14 -958}\special{pa 17 -958}%
+\special{pa 19 -958}\special{pa 22 -959}\special{pa 24 -959}\special{pa 27 -959}%
+\special{pa 29 -959}\special{pa 31 -959}\special{pa 34 -959}\special{pa 36 -959}%
+\special{pa 39 -959}\special{pa 41 -959}\special{pa 43 -959}\special{pa 46 -959}%
+\special{pa 48 -958}\special{pa 51 -958}\special{pa 53 -958}\special{pa 56 -957}%
+\special{pa 58 -957}\special{pa 60 -956}\special{pa 63 -956}\special{pa 65 -955}%
+\special{pa 68 -955}\special{pa 70 -954}\special{pa 72 -953}\special{pa 75 -952}%
+\special{pa 77 -951}\special{pa 80 -951}\special{pa 82 -950}\special{pa 85 -949}%
+\special{pa 87 -948}\special{pa 89 -947}\special{pa 92 -945}\special{pa 94 -944}%
+\special{pa 97 -943}\special{pa 99 -942}\special{pa 101 -940}\special{pa 104 -939}%
+\special{pa 106 -938}\special{pa 109 -936}\special{pa 111 -935}\special{pa 113 -933}%
+\special{pa 116 -932}\special{pa 118 -930}\special{pa 121 -928}\special{pa 123 -926}%
+\special{pa 126 -925}\special{pa 128 -923}\special{pa 130 -921}\special{pa 133 -919}%
+\special{pa 135 -917}\special{pa 138 -915}\special{pa 140 -913}\special{pa 142 -911}%
+\special{pa 145 -909}\special{pa 147 -906}\special{pa 150 -904}\special{pa 152 -902}%
+\special{pa 155 -899}\special{pa 157 -897}\special{pa 159 -895}\special{pa 162 -892}%
+\special{pa 164 -889}\special{pa 167 -887}\special{pa 169 -884}\special{pa 171 -882}%
+\special{pa 174 -879}\special{pa 176 -876}\special{pa 179 -873}\special{pa 181 -870}%
+\special{pa 184 -867}\special{pa 186 -864}\special{pa 188 -861}\special{pa 191 -858}%
+\special{pa 193 -855}\special{pa 196 -852}\special{pa 198 -849}\special{pa 200 -845}%
+\special{pa 203 -842}\special{pa 205 -839}\special{pa 208 -835}\special{pa 210 -832}%
+\special{pa 212 -828}\special{pa 215 -825}\special{pa 217 -821}\special{pa 220 -817}%
+\special{pa 222 -814}\special{pa 225 -810}\special{pa 227 -806}\special{pa 229 -802}%
+\special{pa 232 -798}\special{pa 234 -795}\special{pa 237 -791}\special{pa 239 -787}%
+\special{pa 241 -782}\special{pa 244 -778}\special{pa 246 -774}\special{pa 249 -770}%
+\special{pa 251 -766}\special{pa 254 -761}\special{pa 256 -757}\special{pa 258 -752}%
+\special{pa 261 -748}\special{pa 263 -744}\special{pa 266 -739}\special{pa 268 -734}%
+\special{pa 270 -730}\special{pa 273 -725}\special{pa 275 -720}\special{pa 278 -715}%
+\special{pa 280 -711}\special{pa 283 -706}\special{pa 285 -701}\special{pa 287 -696}%
+\special{pa 290 -691}\special{pa 292 -686}\special{pa 295 -680}\special{pa 297 -675}%
+\special{pa 299 -670}\special{pa 302 -665}\special{pa 304 -659}\special{pa 307 -654}%
+\special{pa 309 -649}\special{pa 311 -643}\special{pa 314 -638}\special{pa 316 -632}%
+\special{pa 319 -627}\special{pa 321 -621}\special{pa 324 -615}\special{pa 326 -609}%
+\special{pa 328 -604}\special{pa 331 -598}\special{pa 333 -592}\special{pa 336 -586}%
+\special{pa 338 -580}\special{pa 340 -574}\special{pa 343 -568}\special{pa 345 -562}%
+\special{pa 348 -555}\special{pa 350 -549}\special{pa 353 -543}\special{pa 355 -537}%
+\special{pa 357 -530}\special{pa 360 -524}\special{pa 362 -517}\special{pa 365 -511}%
+\special{pa 367 -504}\special{pa 369 -498}\special{pa 372 -491}\special{pa 374 -484}%
+\special{pa 377 -477}\special{pa 379 -471}\special{pa 381 -464}\special{pa 384 -457}%
+\special{pa 386 -450}\special{pa 389 -443}\special{pa 391 -436}\special{pa 394 -429}%
+\special{pa 396 -422}\special{pa 398 -415}\special{pa 401 -407}\special{pa 403 -400}%
+\special{pa 406 -393}\special{pa 408 -385}\special{pa 410 -378}\special{pa 413 -370}%
+\special{pa 415 -363}\special{pa 418 -355}\special{pa 420 -348}\special{pa 423 -340}%
+\special{pa 425 -332}\special{pa 427 -325}\special{pa 430 -317}\special{pa 432 -309}%
+\special{pa 435 -301}\special{pa 437 -293}\special{pa 439 -285}\special{pa 442 -277}%
+\special{pa 444 -269}\special{pa 447 -261}\special{pa 449 -253}\special{pa 452 -244}%
+\special{pa 454 -236}\special{pa 456 -228}\special{pa 459 -219}\special{pa 461 -211}%
+\special{pa 464 -202}\special{pa 466 -194}\special{pa 468 -185}\special{pa 471 -177}%
+\special{pa 473 -168}\special{pa 476 -159}\special{pa 478 -151}\special{pa 480 -142}%
+\special{pa 483 -133}%
+\special{fp}%
+\special{pa 0 -955}\special{pa 2 -956}\special{pa 4 -957}\special{pa 6 -957}%
+\special{pa 8 -958}\special{pa 9 -959}\special{pa 11 -960}\special{pa 13 -961}%
+\special{pa 15 -961}\special{pa 17 -962}\special{pa 19 -962}\special{pa 21 -963}%
+\special{pa 23 -963}\special{pa 25 -964}\special{pa 26 -964}\special{pa 28 -964}%
+\special{pa 30 -965}\special{pa 32 -965}\special{pa 34 -965}\special{pa 36 -965}%
+\special{pa 38 -965}\special{pa 40 -965}\special{pa 41 -965}\special{pa 43 -965}%
+\special{pa 45 -965}\special{pa 47 -965}\special{pa 49 -965}\special{pa 51 -964}%
+\special{pa 53 -964}\special{pa 55 -964}\special{pa 57 -963}\special{pa 58 -963}%
+\special{pa 60 -962}\special{pa 62 -962}\special{pa 64 -961}\special{pa 66 -961}%
+\special{pa 68 -960}\special{pa 70 -959}\special{pa 72 -958}\special{pa 74 -958}%
+\special{pa 75 -957}\special{pa 77 -956}\special{pa 79 -955}\special{pa 81 -954}%
+\special{pa 83 -953}\special{pa 85 -952}\special{pa 87 -950}\special{pa 89 -949}%
+\special{pa 91 -948}\special{pa 92 -947}\special{pa 94 -945}\special{pa 96 -944}%
+\special{pa 98 -942}\special{pa 100 -941}\special{pa 102 -939}\special{pa 104 -938}%
+\special{pa 106 -936}\special{pa 107 -934}\special{pa 109 -933}\special{pa 111 -931}%
+\special{pa 113 -929}\special{pa 115 -927}\special{pa 117 -925}\special{pa 119 -923}%
+\special{pa 121 -921}\special{pa 123 -919}\special{pa 124 -917}\special{pa 126 -915}%
+\special{pa 128 -913}\special{pa 130 -910}\special{pa 132 -908}\special{pa 134 -906}%
+\special{pa 136 -903}\special{pa 138 -901}\special{pa 140 -898}\special{pa 141 -896}%
+\special{pa 143 -893}\special{pa 145 -891}\special{pa 147 -888}\special{pa 149 -885}%
+\special{pa 151 -882}\special{pa 153 -879}\special{pa 155 -877}\special{pa 157 -874}%
+\special{pa 158 -871}\special{pa 160 -868}\special{pa 162 -865}\special{pa 164 -861}%
+\special{pa 166 -858}\special{pa 168 -855}\special{pa 170 -852}\special{pa 172 -848}%
+\special{pa 173 -845}\special{pa 175 -842}\special{pa 177 -838}\special{pa 179 -835}%
+\special{pa 181 -831}\special{pa 183 -828}\special{pa 185 -824}\special{pa 187 -820}%
+\special{pa 189 -816}\special{pa 190 -813}\special{pa 192 -809}\special{pa 194 -805}%
+\special{pa 196 -801}\special{pa 198 -797}\special{pa 200 -793}\special{pa 202 -789}%
+\special{pa 204 -785}\special{pa 206 -781}\special{pa 207 -776}\special{pa 209 -772}%
+\special{pa 211 -768}\special{pa 213 -763}\special{pa 215 -759}\special{pa 217 -755}%
+\special{pa 219 -750}\special{pa 221 -746}\special{pa 223 -741}\special{pa 224 -736}%
+\special{pa 226 -732}\special{pa 228 -727}\special{pa 230 -722}\special{pa 232 -717}%
+\special{pa 234 -712}\special{pa 236 -707}\special{pa 238 -702}\special{pa 239 -697}%
+\special{pa 241 -692}\special{pa 243 -687}\special{pa 245 -682}\special{pa 247 -677}%
+\special{pa 249 -671}\special{pa 251 -666}\special{pa 253 -661}\special{pa 255 -655}%
+\special{pa 256 -650}\special{pa 258 -644}\special{pa 260 -639}\special{pa 262 -633}%
+\special{pa 264 -628}\special{pa 266 -622}\special{pa 268 -616}\special{pa 270 -610}%
+\special{pa 272 -604}\special{pa 273 -599}\special{pa 275 -593}\special{pa 277 -587}%
+\special{pa 279 -581}\special{pa 281 -575}\special{pa 283 -568}\special{pa 285 -562}%
+\special{pa 287 -556}\special{pa 289 -550}\special{pa 290 -543}\special{pa 292 -537}%
+\special{pa 294 -531}\special{pa 296 -524}\special{pa 298 -518}\special{pa 300 -511}%
+\special{pa 302 -504}\special{pa 304 -498}\special{pa 306 -491}\special{pa 307 -484}%
+\special{pa 309 -478}\special{pa 311 -471}\special{pa 313 -464}\special{pa 315 -457}%
+\special{pa 317 -450}\special{pa 319 -443}\special{pa 321 -436}\special{pa 322 -429}%
+\special{pa 324 -421}\special{pa 326 -414}\special{pa 328 -407}\special{pa 330 -400}%
+\special{pa 332 -392}\special{pa 334 -385}\special{pa 336 -377}\special{pa 338 -370}%
+\special{pa 339 -362}\special{pa 341 -355}\special{pa 343 -347}\special{pa 345 -339}%
+\special{pa 347 -332}\special{pa 349 -324}\special{pa 351 -316}\special{pa 353 -308}%
+\special{pa 355 -300}\special{pa 356 -292}\special{pa 358 -284}\special{pa 360 -276}%
+\special{pa 362 -268}\special{pa 364 -260}\special{pa 366 -251}\special{pa 368 -243}%
+\special{pa 370 -235}\special{pa 372 -226}\special{pa 373 -218}\special{pa 375 -209}%
+\special{pa 377 -201}%
+\special{fp}%
+\special{pa 0 -955}\special{pa 1 -956}\special{pa 2 -957}\special{pa 4 -958}%
+\special{pa 5 -959}\special{pa 6 -960}\special{pa 7 -961}\special{pa 8 -962}%
+\special{pa 9 -963}\special{pa 11 -964}\special{pa 12 -965}\special{pa 13 -966}%
+\special{pa 14 -966}\special{pa 15 -967}\special{pa 16 -967}\special{pa 18 -968}%
+\special{pa 19 -969}\special{pa 20 -969}\special{pa 21 -969}\special{pa 22 -970}%
+\special{pa 23 -970}\special{pa 25 -970}\special{pa 26 -971}\special{pa 27 -971}%
+\special{pa 28 -971}\special{pa 29 -971}\special{pa 30 -971}\special{pa 32 -971}%
+\special{pa 33 -971}\special{pa 34 -971}\special{pa 35 -971}\special{pa 36 -970}%
+\special{pa 38 -970}\special{pa 39 -970}\special{pa 40 -969}\special{pa 41 -969}%
+\special{pa 42 -969}\special{pa 43 -968}\special{pa 45 -968}\special{pa 46 -967}%
+\special{pa 47 -966}\special{pa 48 -966}\special{pa 49 -965}\special{pa 50 -964}%
+\special{pa 52 -963}\special{pa 53 -962}\special{pa 54 -962}\special{pa 55 -961}%
+\special{pa 56 -960}\special{pa 57 -958}\special{pa 59 -957}\special{pa 60 -956}%
+\special{pa 61 -955}\special{pa 62 -954}\special{pa 63 -952}\special{pa 64 -951}%
+\special{pa 66 -950}\special{pa 67 -948}\special{pa 68 -947}\special{pa 69 -945}%
+\special{pa 70 -944}\special{pa 72 -942}\special{pa 73 -940}\special{pa 74 -939}%
+\special{pa 75 -937}\special{pa 76 -935}\special{pa 77 -933}\special{pa 79 -931}%
+\special{pa 80 -929}\special{pa 81 -927}\special{pa 82 -925}\special{pa 83 -923}%
+\special{pa 84 -921}\special{pa 86 -919}\special{pa 87 -916}\special{pa 88 -914}%
+\special{pa 89 -912}\special{pa 90 -909}\special{pa 91 -907}\special{pa 93 -904}%
+\special{pa 94 -902}\special{pa 95 -899}\special{pa 96 -896}\special{pa 97 -894}%
+\special{pa 98 -891}\special{pa 100 -888}\special{pa 101 -885}\special{pa 102 -883}%
+\special{pa 103 -880}\special{pa 104 -877}\special{pa 106 -874}\special{pa 107 -871}%
+\special{pa 108 -867}\special{pa 109 -864}\special{pa 110 -861}\special{pa 111 -858}%
+\special{pa 113 -854}\special{pa 114 -851}\special{pa 115 -848}\special{pa 116 -844}%
+\special{pa 117 -841}\special{pa 118 -837}\special{pa 120 -834}\special{pa 121 -830}%
+\special{pa 122 -826}\special{pa 123 -822}\special{pa 124 -819}\special{pa 125 -815}%
+\special{pa 127 -811}\special{pa 128 -807}\special{pa 129 -803}\special{pa 130 -799}%
+\special{pa 131 -795}\special{pa 132 -791}\special{pa 134 -787}\special{pa 135 -782}%
+\special{pa 136 -778}\special{pa 137 -774}\special{pa 138 -770}\special{pa 140 -765}%
+\special{pa 141 -761}\special{pa 142 -756}\special{pa 143 -752}\special{pa 144 -747}%
+\special{pa 145 -742}\special{pa 147 -738}\special{pa 148 -733}\special{pa 149 -728}%
+\special{pa 150 -723}\special{pa 151 -718}\special{pa 152 -713}\special{pa 154 -708}%
+\special{pa 155 -703}\special{pa 156 -698}\special{pa 157 -693}\special{pa 158 -688}%
+\special{pa 159 -683}\special{pa 161 -678}\special{pa 162 -672}\special{pa 163 -667}%
+\special{pa 164 -661}\special{pa 165 -656}\special{pa 166 -650}\special{pa 168 -645}%
+\special{pa 169 -639}\special{pa 170 -634}\special{pa 171 -628}\special{pa 172 -622}%
+\special{pa 174 -616}\special{pa 175 -611}\special{pa 176 -605}\special{pa 177 -599}%
+\special{pa 178 -593}\special{pa 179 -587}\special{pa 181 -581}\special{pa 182 -575}%
+\special{pa 183 -568}\special{pa 184 -562}\special{pa 185 -556}\special{pa 186 -550}%
+\special{pa 188 -543}\special{pa 189 -537}\special{pa 190 -530}\special{pa 191 -524}%
+\special{pa 192 -517}\special{pa 193 -511}\special{pa 195 -504}\special{pa 196 -497}%
+\special{pa 197 -491}\special{pa 198 -484}\special{pa 199 -477}\special{pa 200 -470}%
+\special{pa 202 -463}\special{pa 203 -456}\special{pa 204 -449}\special{pa 205 -442}%
+\special{pa 206 -435}\special{pa 208 -428}\special{pa 209 -420}\special{pa 210 -413}%
+\special{pa 211 -406}\special{pa 212 -398}\special{pa 213 -391}\special{pa 215 -384}%
+\special{pa 216 -376}\special{pa 217 -369}\special{pa 218 -361}\special{pa 219 -353}%
+\special{pa 220 -346}\special{pa 222 -338}\special{pa 223 -330}\special{pa 224 -322}%
+\special{pa 225 -314}\special{pa 226 -306}\special{pa 227 -298}\special{pa 229 -290}%
+\special{pa 230 -282}\special{pa 231 -274}\special{pa 232 -266}\special{pa 233 -258}%
+\special{pa 235 -249}%
+\special{fp}%
+\special{pa 0 -955}\special{pa 0 -956}\special{pa 1 -957}\special{pa 1 -959}%
+\special{pa 1 -960}\special{pa 2 -961}\special{pa 2 -962}\special{pa 2 -963}%
+\special{pa 3 -964}\special{pa 3 -965}\special{pa 3 -966}\special{pa 4 -967}%
+\special{pa 4 -968}\special{pa 4 -968}\special{pa 5 -969}\special{pa 5 -970}%
+\special{pa 6 -970}\special{pa 6 -971}\special{pa 6 -972}\special{pa 7 -972}%
+\special{pa 7 -972}\special{pa 7 -973}\special{pa 8 -973}\special{pa 8 -973}%
+\special{pa 8 -974}\special{pa 9 -974}\special{pa 9 -974}\special{pa 9 -974}%
+\special{pa 10 -974}\special{pa 10 -974}\special{pa 10 -974}\special{pa 11 -974}%
+\special{pa 11 -974}\special{pa 11 -974}\special{pa 12 -974}\special{pa 12 -973}%
+\special{pa 12 -973}\special{pa 13 -973}\special{pa 13 -972}\special{pa 13 -972}%
+\special{pa 14 -971}\special{pa 14 -971}\special{pa 14 -970}\special{pa 15 -969}%
+\special{pa 15 -969}\special{pa 15 -968}\special{pa 16 -967}\special{pa 16 -966}%
+\special{pa 17 -965}\special{pa 17 -964}\special{pa 17 -963}\special{pa 18 -962}%
+\special{pa 18 -961}\special{pa 18 -960}\special{pa 19 -959}\special{pa 19 -958}%
+\special{pa 19 -956}\special{pa 20 -955}\special{pa 20 -954}\special{pa 20 -952}%
+\special{pa 21 -951}\special{pa 21 -949}\special{pa 21 -948}\special{pa 22 -946}%
+\special{pa 22 -944}\special{pa 22 -943}\special{pa 23 -941}\special{pa 23 -939}%
+\special{pa 23 -937}\special{pa 24 -935}\special{pa 24 -933}\special{pa 24 -931}%
+\special{pa 25 -929}\special{pa 25 -927}\special{pa 25 -925}\special{pa 26 -923}%
+\special{pa 26 -921}\special{pa 27 -918}\special{pa 27 -916}\special{pa 27 -914}%
+\special{pa 28 -911}\special{pa 28 -909}\special{pa 28 -906}\special{pa 29 -904}%
+\special{pa 29 -901}\special{pa 29 -898}\special{pa 30 -896}\special{pa 30 -893}%
+\special{pa 30 -890}\special{pa 31 -887}\special{pa 31 -884}\special{pa 31 -881}%
+\special{pa 32 -878}\special{pa 32 -875}\special{pa 32 -872}\special{pa 33 -869}%
+\special{pa 33 -866}\special{pa 33 -863}\special{pa 34 -859}\special{pa 34 -856}%
+\special{pa 34 -853}\special{pa 35 -849}\special{pa 35 -846}\special{pa 35 -842}%
+\special{pa 36 -839}\special{pa 36 -835}\special{pa 37 -831}\special{pa 37 -828}%
+\special{pa 37 -824}\special{pa 38 -820}\special{pa 38 -816}\special{pa 38 -812}%
+\special{pa 39 -808}\special{pa 39 -804}\special{pa 39 -800}\special{pa 40 -796}%
+\special{pa 40 -792}\special{pa 40 -788}\special{pa 41 -784}\special{pa 41 -779}%
+\special{pa 41 -775}\special{pa 42 -771}\special{pa 42 -766}\special{pa 42 -762}%
+\special{pa 43 -757}\special{pa 43 -753}\special{pa 43 -748}\special{pa 44 -743}%
+\special{pa 44 -739}\special{pa 44 -734}\special{pa 45 -729}\special{pa 45 -724}%
+\special{pa 45 -719}\special{pa 46 -714}\special{pa 46 -709}\special{pa 46 -704}%
+\special{pa 47 -699}\special{pa 47 -694}\special{pa 48 -689}\special{pa 48 -684}%
+\special{pa 48 -678}\special{pa 49 -673}\special{pa 49 -668}\special{pa 49 -662}%
+\special{pa 50 -657}\special{pa 50 -651}\special{pa 50 -646}\special{pa 51 -640}%
+\special{pa 51 -634}\special{pa 51 -629}\special{pa 52 -623}\special{pa 52 -617}%
+\special{pa 52 -611}\special{pa 53 -605}\special{pa 53 -599}\special{pa 53 -593}%
+\special{pa 54 -587}\special{pa 54 -581}\special{pa 54 -575}\special{pa 55 -569}%
+\special{pa 55 -562}\special{pa 55 -556}\special{pa 56 -550}\special{pa 56 -543}%
+\special{pa 56 -537}\special{pa 57 -530}\special{pa 57 -524}\special{pa 58 -517}%
+\special{pa 58 -511}\special{pa 58 -504}\special{pa 59 -497}\special{pa 59 -491}%
+\special{pa 59 -484}\special{pa 60 -477}\special{pa 60 -470}\special{pa 60 -463}%
+\special{pa 61 -456}\special{pa 61 -449}\special{pa 61 -442}\special{pa 62 -435}%
+\special{pa 62 -427}\special{pa 62 -420}\special{pa 63 -413}\special{pa 63 -406}%
+\special{pa 63 -398}\special{pa 64 -391}\special{pa 64 -383}\special{pa 64 -376}%
+\special{pa 65 -368}\special{pa 65 -361}\special{pa 65 -353}\special{pa 66 -345}%
+\special{pa 66 -337}\special{pa 66 -330}\special{pa 67 -322}\special{pa 67 -314}%
+\special{pa 68 -306}\special{pa 68 -298}\special{pa 68 -290}\special{pa 69 -282}%
+\special{pa 69 -273}%
+\special{fp}%
+\special{pa 0 -955}\special{pa -1 -956}\special{pa -1 -957}\special{pa -2 -959}%
+\special{pa -2 -960}\special{pa -3 -961}\special{pa -3 -962}\special{pa -4 -963}%
+\special{pa -4 -964}\special{pa -5 -965}\special{pa -5 -966}\special{pa -6 -967}%
+\special{pa -6 -967}\special{pa -7 -968}\special{pa -7 -969}\special{pa -8 -970}%
+\special{pa -8 -970}\special{pa -9 -971}\special{pa -9 -971}\special{pa -10 -972}%
+\special{pa -10 -972}\special{pa -11 -973}\special{pa -11 -973}\special{pa -12 -973}%
+\special{pa -12 -973}\special{pa -13 -974}\special{pa -13 -974}\special{pa -14 -974}%
+\special{pa -14 -974}\special{pa -15 -974}\special{pa -16 -974}\special{pa -16 -974}%
+\special{pa -17 -974}\special{pa -17 -973}\special{pa -18 -973}\special{pa -18 -973}%
+\special{pa -19 -972}\special{pa -19 -972}\special{pa -20 -972}\special{pa -20 -971}%
+\special{pa -21 -971}\special{pa -21 -970}\special{pa -22 -969}\special{pa -22 -969}%
+\special{pa -23 -968}\special{pa -23 -967}\special{pa -24 -966}\special{pa -24 -966}%
+\special{pa -25 -965}\special{pa -25 -964}\special{pa -26 -963}\special{pa -26 -962}%
+\special{pa -27 -961}\special{pa -27 -959}\special{pa -28 -958}\special{pa -28 -957}%
+\special{pa -29 -956}\special{pa -29 -954}\special{pa -30 -953}\special{pa -31 -951}%
+\special{pa -31 -950}\special{pa -32 -948}\special{pa -32 -947}\special{pa -33 -945}%
+\special{pa -33 -944}\special{pa -34 -942}\special{pa -34 -940}\special{pa -35 -938}%
+\special{pa -35 -936}\special{pa -36 -934}\special{pa -36 -932}\special{pa -37 -930}%
+\special{pa -37 -928}\special{pa -38 -926}\special{pa -38 -924}\special{pa -39 -922}%
+\special{pa -39 -920}\special{pa -40 -917}\special{pa -40 -915}\special{pa -41 -913}%
+\special{pa -41 -910}\special{pa -42 -908}\special{pa -42 -905}\special{pa -43 -903}%
+\special{pa -43 -900}\special{pa -44 -897}\special{pa -44 -895}\special{pa -45 -892}%
+\special{pa -46 -889}\special{pa -46 -886}\special{pa -47 -883}\special{pa -47 -880}%
+\special{pa -48 -877}\special{pa -48 -874}\special{pa -49 -871}\special{pa -49 -868}%
+\special{pa -50 -865}\special{pa -50 -861}\special{pa -51 -858}\special{pa -51 -855}%
+\special{pa -52 -851}\special{pa -52 -848}\special{pa -53 -844}\special{pa -53 -841}%
+\special{pa -54 -837}\special{pa -54 -834}\special{pa -55 -830}\special{pa -55 -826}%
+\special{pa -56 -822}\special{pa -56 -819}\special{pa -57 -815}\special{pa -57 -811}%
+\special{pa -58 -807}\special{pa -58 -803}\special{pa -59 -799}\special{pa -59 -795}%
+\special{pa -60 -791}\special{pa -61 -786}\special{pa -61 -782}\special{pa -62 -778}%
+\special{pa -62 -773}\special{pa -63 -769}\special{pa -63 -765}\special{pa -64 -760}%
+\special{pa -64 -756}\special{pa -65 -751}\special{pa -65 -746}\special{pa -66 -742}%
+\special{pa -66 -737}\special{pa -67 -732}\special{pa -67 -727}\special{pa -68 -722}%
+\special{pa -68 -717}\special{pa -69 -713}\special{pa -69 -707}\special{pa -70 -702}%
+\special{pa -70 -697}\special{pa -71 -692}\special{pa -71 -687}\special{pa -72 -682}%
+\special{pa -72 -676}\special{pa -73 -671}\special{pa -73 -666}\special{pa -74 -660}%
+\special{pa -75 -655}\special{pa -75 -649}\special{pa -76 -644}\special{pa -76 -638}%
+\special{pa -77 -632}\special{pa -77 -626}\special{pa -78 -621}\special{pa -78 -615}%
+\special{pa -79 -609}\special{pa -79 -603}\special{pa -80 -597}\special{pa -80 -591}%
+\special{pa -81 -585}\special{pa -81 -579}\special{pa -82 -573}\special{pa -82 -566}%
+\special{pa -83 -560}\special{pa -83 -554}\special{pa -84 -548}\special{pa -84 -541}%
+\special{pa -85 -535}\special{pa -85 -528}\special{pa -86 -522}\special{pa -86 -515}%
+\special{pa -87 -508}\special{pa -87 -502}\special{pa -88 -495}\special{pa -88 -488}%
+\special{pa -89 -481}\special{pa -90 -475}\special{pa -90 -468}\special{pa -91 -461}%
+\special{pa -91 -454}\special{pa -92 -447}\special{pa -92 -439}\special{pa -93 -432}%
+\special{pa -93 -425}\special{pa -94 -418}\special{pa -94 -410}\special{pa -95 -403}%
+\special{pa -95 -396}\special{pa -96 -388}\special{pa -96 -381}\special{pa -97 -373}%
+\special{pa -97 -366}\special{pa -98 -358}\special{pa -98 -350}\special{pa -99 -342}%
+\special{pa -99 -335}\special{pa -100 -327}\special{pa -100 -319}\special{pa -101 -311}%
+\special{pa -101 -303}\special{pa -102 -295}\special{pa -102 -287}\special{pa -103 -279}%
+\special{pa -103 -271}%
+\special{fp}%
+\special{pa 0 -955}\special{pa -1 -956}\special{pa -3 -957}\special{pa -4 -958}%
+\special{pa -5 -959}\special{pa -7 -960}\special{pa -8 -961}\special{pa -9 -962}%
+\special{pa -11 -963}\special{pa -12 -964}\special{pa -13 -964}\special{pa -15 -965}%
+\special{pa -16 -966}\special{pa -17 -966}\special{pa -19 -967}\special{pa -20 -967}%
+\special{pa -21 -968}\special{pa -23 -968}\special{pa -24 -969}\special{pa -25 -969}%
+\special{pa -27 -969}\special{pa -28 -970}\special{pa -29 -970}\special{pa -31 -970}%
+\special{pa -32 -970}\special{pa -33 -970}\special{pa -35 -970}\special{pa -36 -970}%
+\special{pa -37 -970}\special{pa -39 -970}\special{pa -40 -969}\special{pa -41 -969}%
+\special{pa -43 -969}\special{pa -44 -969}\special{pa -45 -968}\special{pa -46 -968}%
+\special{pa -48 -967}\special{pa -49 -967}\special{pa -50 -966}\special{pa -52 -965}%
+\special{pa -53 -965}\special{pa -54 -964}\special{pa -56 -963}\special{pa -57 -962}%
+\special{pa -58 -962}\special{pa -60 -961}\special{pa -61 -960}\special{pa -62 -959}%
+\special{pa -64 -958}\special{pa -65 -957}\special{pa -66 -955}\special{pa -68 -954}%
+\special{pa -69 -953}\special{pa -70 -952}\special{pa -72 -950}\special{pa -73 -949}%
+\special{pa -74 -947}\special{pa -76 -946}\special{pa -77 -944}\special{pa -78 -943}%
+\special{pa -80 -941}\special{pa -81 -940}\special{pa -82 -938}\special{pa -84 -936}%
+\special{pa -85 -934}\special{pa -86 -932}\special{pa -88 -930}\special{pa -89 -928}%
+\special{pa -90 -926}\special{pa -92 -924}\special{pa -93 -922}\special{pa -94 -920}%
+\special{pa -96 -918}\special{pa -97 -916}\special{pa -98 -913}\special{pa -100 -911}%
+\special{pa -101 -909}\special{pa -102 -906}\special{pa -104 -904}\special{pa -105 -901}%
+\special{pa -106 -899}\special{pa -108 -896}\special{pa -109 -893}\special{pa -110 -890}%
+\special{pa -112 -888}\special{pa -113 -885}\special{pa -114 -882}\special{pa -116 -879}%
+\special{pa -117 -876}\special{pa -118 -873}\special{pa -120 -870}\special{pa -121 -867}%
+\special{pa -122 -864}\special{pa -124 -861}\special{pa -125 -857}\special{pa -126 -854}%
+\special{pa -128 -851}\special{pa -129 -847}\special{pa -130 -844}\special{pa -132 -840}%
+\special{pa -133 -837}\special{pa -134 -833}\special{pa -136 -830}\special{pa -137 -826}%
+\special{pa -138 -822}\special{pa -139 -818}\special{pa -141 -814}\special{pa -142 -811}%
+\special{pa -143 -807}\special{pa -145 -803}\special{pa -146 -799}\special{pa -147 -795}%
+\special{pa -149 -791}\special{pa -150 -786}\special{pa -151 -782}\special{pa -153 -778}%
+\special{pa -154 -774}\special{pa -155 -769}\special{pa -157 -765}\special{pa -158 -760}%
+\special{pa -159 -756}\special{pa -161 -751}\special{pa -162 -747}\special{pa -163 -742}%
+\special{pa -165 -737}\special{pa -166 -733}\special{pa -167 -728}\special{pa -169 -723}%
+\special{pa -170 -718}\special{pa -171 -713}\special{pa -173 -708}\special{pa -174 -703}%
+\special{pa -175 -698}\special{pa -177 -693}\special{pa -178 -688}\special{pa -179 -683}%
+\special{pa -181 -677}\special{pa -182 -672}\special{pa -183 -667}\special{pa -185 -661}%
+\special{pa -186 -656}\special{pa -187 -650}\special{pa -189 -645}\special{pa -190 -639}%
+\special{pa -191 -634}\special{pa -193 -628}\special{pa -194 -622}\special{pa -195 -616}%
+\special{pa -197 -611}\special{pa -198 -605}\special{pa -199 -599}\special{pa -201 -593}%
+\special{pa -202 -587}\special{pa -203 -581}\special{pa -205 -575}\special{pa -206 -568}%
+\special{pa -207 -562}\special{pa -209 -556}\special{pa -210 -550}\special{pa -211 -543}%
+\special{pa -213 -537}\special{pa -214 -530}\special{pa -215 -524}\special{pa -217 -517}%
+\special{pa -218 -511}\special{pa -219 -504}\special{pa -221 -497}\special{pa -222 -491}%
+\special{pa -223 -484}\special{pa -225 -477}\special{pa -226 -470}\special{pa -227 -463}%
+\special{pa -229 -456}\special{pa -230 -449}\special{pa -231 -442}\special{pa -232 -435}%
+\special{pa -234 -428}\special{pa -235 -421}\special{pa -236 -413}\special{pa -238 -406}%
+\special{pa -239 -399}\special{pa -240 -391}\special{pa -242 -384}\special{pa -243 -376}%
+\special{pa -244 -369}\special{pa -246 -361}\special{pa -247 -354}\special{pa -248 -346}%
+\special{pa -250 -338}\special{pa -251 -330}\special{pa -252 -322}\special{pa -254 -315}%
+\special{pa -255 -307}\special{pa -256 -299}\special{pa -258 -291}\special{pa -259 -283}%
+\special{pa -260 -274}\special{pa -262 -266}\special{pa -263 -258}\special{pa -264 -250}%
+\special{pa -266 -241}%
+\special{fp}%
+\special{pa 0 -955}\special{pa -2 -956}\special{pa -4 -956}\special{pa -6 -957}%
+\special{pa -8 -958}\special{pa -10 -959}\special{pa -12 -959}\special{pa -14 -960}%
+\special{pa -16 -961}\special{pa -18 -961}\special{pa -20 -962}\special{pa -22 -962}%
+\special{pa -24 -963}\special{pa -26 -963}\special{pa -28 -963}\special{pa -30 -963}%
+\special{pa -32 -964}\special{pa -34 -964}\special{pa -36 -964}\special{pa -38 -964}%
+\special{pa -40 -964}\special{pa -42 -964}\special{pa -44 -964}\special{pa -46 -964}%
+\special{pa -48 -964}\special{pa -50 -963}\special{pa -52 -963}\special{pa -54 -963}%
+\special{pa -56 -962}\special{pa -58 -962}\special{pa -60 -961}\special{pa -62 -961}%
+\special{pa -64 -960}\special{pa -66 -960}\special{pa -68 -959}\special{pa -70 -958}%
+\special{pa -72 -958}\special{pa -74 -957}\special{pa -76 -956}\special{pa -78 -955}%
+\special{pa -80 -954}\special{pa -82 -953}\special{pa -84 -952}\special{pa -86 -951}%
+\special{pa -88 -950}\special{pa -90 -949}\special{pa -92 -948}\special{pa -94 -946}%
+\special{pa -96 -945}\special{pa -98 -944}\special{pa -100 -942}\special{pa -102 -941}%
+\special{pa -105 -939}\special{pa -107 -938}\special{pa -109 -936}\special{pa -111 -934}%
+\special{pa -113 -933}\special{pa -115 -931}\special{pa -117 -929}\special{pa -119 -927}%
+\special{pa -121 -925}\special{pa -123 -923}\special{pa -125 -921}\special{pa -127 -919}%
+\special{pa -129 -917}\special{pa -131 -915}\special{pa -133 -913}\special{pa -135 -911}%
+\special{pa -137 -908}\special{pa -139 -906}\special{pa -141 -904}\special{pa -143 -901}%
+\special{pa -145 -899}\special{pa -147 -896}\special{pa -149 -894}\special{pa -151 -891}%
+\special{pa -153 -888}\special{pa -155 -886}\special{pa -157 -883}\special{pa -159 -880}%
+\special{pa -161 -877}\special{pa -163 -874}\special{pa -165 -872}\special{pa -167 -869}%
+\special{pa -169 -865}\special{pa -171 -862}\special{pa -173 -859}\special{pa -175 -856}%
+\special{pa -177 -853}\special{pa -179 -850}\special{pa -181 -846}\special{pa -183 -843}%
+\special{pa -185 -839}\special{pa -187 -836}\special{pa -189 -832}\special{pa -191 -829}%
+\special{pa -193 -825}\special{pa -195 -822}\special{pa -197 -818}\special{pa -199 -814}%
+\special{pa -201 -810}\special{pa -203 -806}\special{pa -205 -803}\special{pa -207 -799}%
+\special{pa -209 -795}\special{pa -211 -791}\special{pa -213 -786}\special{pa -215 -782}%
+\special{pa -217 -778}\special{pa -219 -774}\special{pa -221 -770}\special{pa -223 -765}%
+\special{pa -225 -761}\special{pa -227 -756}\special{pa -229 -752}\special{pa -231 -747}%
+\special{pa -233 -743}\special{pa -235 -738}\special{pa -237 -734}\special{pa -239 -729}%
+\special{pa -241 -724}\special{pa -243 -719}\special{pa -245 -714}\special{pa -247 -710}%
+\special{pa -249 -705}\special{pa -251 -700}\special{pa -253 -695}\special{pa -255 -689}%
+\special{pa -257 -684}\special{pa -259 -679}\special{pa -261 -674}\special{pa -263 -669}%
+\special{pa -265 -663}\special{pa -267 -658}\special{pa -269 -652}\special{pa -271 -647}%
+\special{pa -273 -641}\special{pa -275 -636}\special{pa -277 -630}\special{pa -279 -625}%
+\special{pa -281 -619}\special{pa -283 -613}\special{pa -285 -607}\special{pa -287 -601}%
+\special{pa -289 -596}\special{pa -291 -590}\special{pa -293 -584}\special{pa -295 -578}%
+\special{pa -297 -571}\special{pa -299 -565}\special{pa -301 -559}\special{pa -303 -553}%
+\special{pa -305 -547}\special{pa -307 -540}\special{pa -309 -534}\special{pa -311 -527}%
+\special{pa -314 -521}\special{pa -316 -514}\special{pa -318 -508}\special{pa -320 -501}%
+\special{pa -322 -495}\special{pa -324 -488}\special{pa -326 -481}\special{pa -328 -474}%
+\special{pa -330 -467}\special{pa -332 -460}\special{pa -334 -454}\special{pa -336 -447}%
+\special{pa -338 -439}\special{pa -340 -432}\special{pa -342 -425}\special{pa -344 -418}%
+\special{pa -346 -411}\special{pa -348 -403}\special{pa -350 -396}\special{pa -352 -389}%
+\special{pa -354 -381}\special{pa -356 -374}\special{pa -358 -366}\special{pa -360 -359}%
+\special{pa -362 -351}\special{pa -364 -343}\special{pa -366 -336}\special{pa -368 -328}%
+\special{pa -370 -320}\special{pa -372 -312}\special{pa -374 -304}\special{pa -376 -296}%
+\special{pa -378 -288}\special{pa -380 -280}\special{pa -382 -272}\special{pa -384 -264}%
+\special{pa -386 -256}\special{pa -388 -248}\special{pa -390 -239}\special{pa -392 -231}%
+\special{pa -394 -223}\special{pa -396 -214}\special{pa -398 -206}\special{pa -400 -197}%
+\special{pa -402 -189}%
+\special{fp}%
+\special{pa 0 -955}\special{pa -2 -955}\special{pa -5 -956}\special{pa -7 -956}%
+\special{pa -10 -957}\special{pa -12 -957}\special{pa -15 -957}\special{pa -17 -958}%
+\special{pa -20 -958}\special{pa -22 -958}\special{pa -25 -958}\special{pa -27 -958}%
+\special{pa -30 -958}\special{pa -32 -958}\special{pa -35 -958}\special{pa -37 -958}%
+\special{pa -40 -958}\special{pa -42 -958}\special{pa -45 -957}\special{pa -47 -957}%
+\special{pa -50 -957}\special{pa -52 -956}\special{pa -55 -956}\special{pa -57 -956}%
+\special{pa -60 -955}\special{pa -62 -954}\special{pa -65 -954}\special{pa -67 -953}%
+\special{pa -70 -952}\special{pa -72 -952}\special{pa -75 -951}\special{pa -77 -950}%
+\special{pa -80 -949}\special{pa -82 -948}\special{pa -85 -947}\special{pa -87 -946}%
+\special{pa -90 -945}\special{pa -92 -944}\special{pa -95 -942}\special{pa -97 -941}%
+\special{pa -100 -940}\special{pa -102 -939}\special{pa -105 -937}\special{pa -107 -936}%
+\special{pa -110 -934}\special{pa -112 -933}\special{pa -115 -931}\special{pa -117 -930}%
+\special{pa -120 -928}\special{pa -122 -926}\special{pa -125 -924}\special{pa -127 -922}%
+\special{pa -130 -921}\special{pa -132 -919}\special{pa -135 -917}\special{pa -137 -915}%
+\special{pa -140 -913}\special{pa -142 -911}\special{pa -145 -908}\special{pa -147 -906}%
+\special{pa -150 -904}\special{pa -152 -902}\special{pa -155 -899}\special{pa -157 -897}%
+\special{pa -160 -894}\special{pa -162 -892}\special{pa -165 -889}\special{pa -167 -887}%
+\special{pa -170 -884}\special{pa -172 -881}\special{pa -175 -879}\special{pa -177 -876}%
+\special{pa -180 -873}\special{pa -182 -870}\special{pa -185 -867}\special{pa -187 -864}%
+\special{pa -190 -861}\special{pa -192 -858}\special{pa -195 -855}\special{pa -197 -852}%
+\special{pa -200 -849}\special{pa -202 -846}\special{pa -205 -842}\special{pa -207 -839}%
+\special{pa -209 -836}\special{pa -212 -832}\special{pa -214 -829}\special{pa -217 -825}%
+\special{pa -219 -821}\special{pa -222 -818}\special{pa -224 -814}\special{pa -227 -810}%
+\special{pa -229 -807}\special{pa -232 -803}\special{pa -234 -799}\special{pa -237 -795}%
+\special{pa -239 -791}\special{pa -242 -787}\special{pa -244 -783}\special{pa -247 -779}%
+\special{pa -249 -775}\special{pa -252 -770}\special{pa -254 -766}\special{pa -257 -762}%
+\special{pa -259 -757}\special{pa -262 -753}\special{pa -264 -749}\special{pa -267 -744}%
+\special{pa -269 -740}\special{pa -272 -735}\special{pa -274 -730}\special{pa -277 -726}%
+\special{pa -279 -721}\special{pa -282 -716}\special{pa -284 -711}\special{pa -287 -706}%
+\special{pa -289 -702}\special{pa -292 -697}\special{pa -294 -692}\special{pa -297 -686}%
+\special{pa -299 -681}\special{pa -302 -676}\special{pa -304 -671}\special{pa -307 -666}%
+\special{pa -309 -660}\special{pa -312 -655}\special{pa -314 -650}\special{pa -317 -644}%
+\special{pa -319 -639}\special{pa -322 -633}\special{pa -324 -628}\special{pa -327 -622}%
+\special{pa -329 -616}\special{pa -332 -610}\special{pa -334 -605}\special{pa -337 -599}%
+\special{pa -339 -593}\special{pa -342 -587}\special{pa -344 -581}\special{pa -347 -575}%
+\special{pa -349 -569}\special{pa -352 -563}\special{pa -354 -557}\special{pa -357 -550}%
+\special{pa -359 -544}\special{pa -362 -538}\special{pa -364 -532}\special{pa -367 -525}%
+\special{pa -369 -519}\special{pa -372 -512}\special{pa -374 -506}\special{pa -377 -499}%
+\special{pa -379 -492}\special{pa -382 -486}\special{pa -384 -479}\special{pa -387 -472}%
+\special{pa -389 -465}\special{pa -392 -458}\special{pa -394 -451}\special{pa -397 -445}%
+\special{pa -399 -437}\special{pa -402 -430}\special{pa -404 -423}\special{pa -407 -416}%
+\special{pa -409 -409}\special{pa -412 -402}\special{pa -414 -394}\special{pa -417 -387}%
+\special{pa -419 -380}\special{pa -421 -372}\special{pa -424 -365}\special{pa -426 -357}%
+\special{pa -429 -349}\special{pa -431 -342}\special{pa -434 -334}\special{pa -436 -326}%
+\special{pa -439 -319}\special{pa -441 -311}\special{pa -444 -303}\special{pa -446 -295}%
+\special{pa -449 -287}\special{pa -451 -279}\special{pa -454 -271}\special{pa -456 -263}%
+\special{pa -459 -255}\special{pa -461 -246}\special{pa -464 -238}\special{pa -466 -230}%
+\special{pa -469 -221}\special{pa -471 -213}\special{pa -474 -204}\special{pa -476 -196}%
+\special{pa -479 -187}\special{pa -481 -179}\special{pa -484 -170}\special{pa -486 -161}%
+\special{pa -489 -153}\special{pa -491 -144}\special{pa -494 -135}\special{pa -496 -126}%
+\special{pa -499 -117}%
+\special{fp}%
+\special{pa 0 -955}\special{pa -3 -955}\special{pa -5 -955}\special{pa -8 -955}%
+\special{pa -11 -955}\special{pa -14 -955}\special{pa -16 -955}\special{pa -19 -955}%
+\special{pa -22 -955}\special{pa -25 -954}\special{pa -27 -954}\special{pa -30 -954}%
+\special{pa -33 -953}\special{pa -36 -953}\special{pa -38 -952}\special{pa -41 -952}%
+\special{pa -44 -951}\special{pa -46 -951}\special{pa -49 -950}\special{pa -52 -949}%
+\special{pa -55 -949}\special{pa -57 -948}\special{pa -60 -947}\special{pa -63 -946}%
+\special{pa -66 -945}\special{pa -68 -944}\special{pa -71 -943}\special{pa -74 -942}%
+\special{pa -77 -941}\special{pa -79 -940}\special{pa -82 -938}\special{pa -85 -937}%
+\special{pa -87 -936}\special{pa -90 -934}\special{pa -93 -933}\special{pa -96 -931}%
+\special{pa -98 -930}\special{pa -101 -928}\special{pa -104 -927}\special{pa -107 -925}%
+\special{pa -109 -923}\special{pa -112 -922}\special{pa -115 -920}\special{pa -118 -918}%
+\special{pa -120 -916}\special{pa -123 -914}\special{pa -126 -912}\special{pa -129 -910}%
+\special{pa -131 -908}\special{pa -134 -906}\special{pa -137 -904}\special{pa -139 -901}%
+\special{pa -142 -899}\special{pa -145 -897}\special{pa -148 -894}\special{pa -150 -892}%
+\special{pa -153 -889}\special{pa -156 -887}\special{pa -159 -884}\special{pa -161 -882}%
+\special{pa -164 -879}\special{pa -167 -876}\special{pa -170 -874}\special{pa -172 -871}%
+\special{pa -175 -868}\special{pa -178 -865}\special{pa -180 -862}\special{pa -183 -859}%
+\special{pa -186 -856}\special{pa -189 -853}\special{pa -191 -850}\special{pa -194 -847}%
+\special{pa -197 -843}\special{pa -200 -840}\special{pa -202 -837}\special{pa -205 -833}%
+\special{pa -208 -830}\special{pa -211 -826}\special{pa -213 -823}\special{pa -216 -819}%
+\special{pa -219 -816}\special{pa -221 -812}\special{pa -224 -808}\special{pa -227 -805}%
+\special{pa -230 -801}\special{pa -232 -797}\special{pa -235 -793}\special{pa -238 -789}%
+\special{pa -241 -785}\special{pa -243 -781}\special{pa -246 -777}\special{pa -249 -773}%
+\special{pa -252 -769}\special{pa -254 -764}\special{pa -257 -760}\special{pa -260 -756}%
+\special{pa -262 -751}\special{pa -265 -747}\special{pa -268 -742}\special{pa -271 -738}%
+\special{pa -273 -733}\special{pa -276 -729}\special{pa -279 -724}\special{pa -282 -719}%
+\special{pa -284 -714}\special{pa -287 -710}\special{pa -290 -705}\special{pa -293 -700}%
+\special{pa -295 -695}\special{pa -298 -690}\special{pa -301 -685}\special{pa -304 -680}%
+\special{pa -306 -675}\special{pa -309 -669}\special{pa -312 -664}\special{pa -314 -659}%
+\special{pa -317 -653}\special{pa -320 -648}\special{pa -323 -643}\special{pa -325 -637}%
+\special{pa -328 -632}\special{pa -331 -626}\special{pa -334 -620}\special{pa -336 -615}%
+\special{pa -339 -609}\special{pa -342 -603}\special{pa -345 -597}\special{pa -347 -592}%
+\special{pa -350 -586}\special{pa -353 -580}\special{pa -355 -574}\special{pa -358 -568}%
+\special{pa -361 -562}\special{pa -364 -555}\special{pa -366 -549}\special{pa -369 -543}%
+\special{pa -372 -537}\special{pa -375 -530}\special{pa -377 -524}\special{pa -380 -517}%
+\special{pa -383 -511}\special{pa -386 -504}\special{pa -388 -498}\special{pa -391 -491}%
+\special{pa -394 -485}\special{pa -396 -478}\special{pa -399 -471}\special{pa -402 -464}%
+\special{pa -405 -457}\special{pa -407 -450}\special{pa -410 -444}\special{pa -413 -436}%
+\special{pa -416 -429}\special{pa -418 -422}\special{pa -421 -415}\special{pa -424 -408}%
+\special{pa -427 -401}\special{pa -429 -393}\special{pa -432 -386}\special{pa -435 -379}%
+\special{pa -437 -371}\special{pa -440 -364}\special{pa -443 -356}\special{pa -446 -349}%
+\special{pa -448 -341}\special{pa -451 -333}\special{pa -454 -326}\special{pa -457 -318}%
+\special{pa -459 -310}\special{pa -462 -302}\special{pa -465 -294}\special{pa -468 -286}%
+\special{pa -470 -278}\special{pa -473 -270}\special{pa -476 -262}\special{pa -479 -254}%
+\special{pa -481 -246}\special{pa -484 -237}\special{pa -487 -229}\special{pa -489 -221}%
+\special{pa -492 -212}\special{pa -495 -204}\special{pa -498 -195}\special{pa -500 -187}%
+\special{pa -503 -178}\special{pa -506 -170}\special{pa -509 -161}\special{pa -511 -152}%
+\special{pa -514 -143}\special{pa -517 -135}\special{pa -520 -126}\special{pa -522 -117}%
+\special{pa -525 -108}\special{pa -528 -99}\special{pa -530 -90}\special{pa -533 -81}%
+\special{pa -536 -72}\special{pa -539 -62}\special{pa -541 -53}\special{pa -544 -44}%
+\special{pa -547 -34}%
+\special{fp}%
+\special{pa 0 -955}\special{pa -3 -954}\special{pa -5 -954}\special{pa -8 -954}%
+\special{pa -11 -953}\special{pa -14 -953}\special{pa -16 -952}\special{pa -19 -952}%
+\special{pa -22 -951}\special{pa -24 -950}\special{pa -27 -950}\special{pa -30 -949}%
+\special{pa -32 -948}\special{pa -35 -947}\special{pa -38 -946}\special{pa -41 -945}%
+\special{pa -43 -944}\special{pa -46 -943}\special{pa -49 -942}\special{pa -51 -941}%
+\special{pa -54 -940}\special{pa -57 -939}\special{pa -60 -937}\special{pa -62 -936}%
+\special{pa -65 -935}\special{pa -68 -933}\special{pa -70 -932}\special{pa -73 -930}%
+\special{pa -76 -929}\special{pa -79 -927}\special{pa -81 -925}\special{pa -84 -924}%
+\special{pa -87 -922}\special{pa -89 -920}\special{pa -92 -918}\special{pa -95 -916}%
+\special{pa -97 -914}\special{pa -100 -912}\special{pa -103 -910}\special{pa -106 -908}%
+\special{pa -108 -906}\special{pa -111 -904}\special{pa -114 -902}\special{pa -116 -899}%
+\special{pa -119 -897}\special{pa -122 -895}\special{pa -125 -892}\special{pa -127 -890}%
+\special{pa -130 -887}\special{pa -133 -885}\special{pa -135 -882}\special{pa -138 -879}%
+\special{pa -141 -877}\special{pa -143 -874}\special{pa -146 -871}\special{pa -149 -868}%
+\special{pa -152 -865}\special{pa -154 -862}\special{pa -157 -859}\special{pa -160 -856}%
+\special{pa -162 -853}\special{pa -165 -850}\special{pa -168 -847}\special{pa -171 -844}%
+\special{pa -173 -840}\special{pa -176 -837}\special{pa -179 -834}\special{pa -181 -830}%
+\special{pa -184 -827}\special{pa -187 -823}\special{pa -189 -820}\special{pa -192 -816}%
+\special{pa -195 -812}\special{pa -198 -809}\special{pa -200 -805}\special{pa -203 -801}%
+\special{pa -206 -797}\special{pa -208 -793}\special{pa -211 -789}\special{pa -214 -785}%
+\special{pa -217 -781}\special{pa -219 -777}\special{pa -222 -773}\special{pa -225 -769}%
+\special{pa -227 -765}\special{pa -230 -760}\special{pa -233 -756}\special{pa -236 -752}%
+\special{pa -238 -747}\special{pa -241 -743}\special{pa -244 -738}\special{pa -246 -733}%
+\special{pa -249 -729}\special{pa -252 -724}\special{pa -254 -719}\special{pa -257 -715}%
+\special{pa -260 -710}\special{pa -263 -705}\special{pa -265 -700}\special{pa -268 -695}%
+\special{pa -271 -690}\special{pa -273 -685}\special{pa -276 -680}\special{pa -279 -675}%
+\special{pa -282 -670}\special{pa -284 -664}\special{pa -287 -659}\special{pa -290 -654}%
+\special{pa -292 -648}\special{pa -295 -643}\special{pa -298 -637}\special{pa -300 -632}%
+\special{pa -303 -626}\special{pa -306 -621}\special{pa -309 -615}\special{pa -311 -609}%
+\special{pa -314 -604}\special{pa -317 -598}\special{pa -319 -592}\special{pa -322 -586}%
+\special{pa -325 -580}\special{pa -328 -574}\special{pa -330 -568}\special{pa -333 -562}%
+\special{pa -336 -556}\special{pa -338 -549}\special{pa -341 -543}\special{pa -344 -537}%
+\special{pa -346 -531}\special{pa -349 -524}\special{pa -352 -518}\special{pa -355 -511}%
+\special{pa -357 -505}\special{pa -360 -498}\special{pa -363 -491}\special{pa -365 -485}%
+\special{pa -368 -478}\special{pa -371 -471}\special{pa -374 -464}\special{pa -376 -458}%
+\special{pa -379 -451}\special{pa -382 -444}\special{pa -384 -437}\special{pa -387 -430}%
+\special{pa -390 -423}\special{pa -393 -415}\special{pa -395 -408}\special{pa -398 -401}%
+\special{pa -401 -394}\special{pa -403 -386}\special{pa -406 -379}\special{pa -409 -371}%
+\special{pa -411 -364}\special{pa -414 -356}\special{pa -417 -349}\special{pa -420 -341}%
+\special{pa -422 -333}\special{pa -425 -326}\special{pa -428 -318}\special{pa -430 -310}%
+\special{pa -433 -302}\special{pa -436 -294}\special{pa -439 -286}\special{pa -441 -278}%
+\special{pa -444 -270}\special{pa -447 -262}\special{pa -449 -254}\special{pa -452 -246}%
+\special{pa -455 -238}\special{pa -457 -229}\special{pa -460 -221}\special{pa -463 -213}%
+\special{pa -466 -204}\special{pa -468 -196}\special{pa -471 -187}\special{pa -474 -178}%
+\special{pa -476 -170}\special{pa -479 -161}\special{pa -482 -152}\special{pa -485 -144}%
+\special{pa -487 -135}\special{pa -490 -126}\special{pa -493 -117}\special{pa -495 -108}%
+\special{pa -498 -99}\special{pa -501 -90}\special{pa -503 -81}\special{pa -506 -72}%
+\special{pa -509 -62}\special{pa -512 -53}\special{pa -514 -44}\special{pa -517 -35}%
+\special{pa -520 -25}\special{pa -522 -16}\special{pa -525 -6}\special{pa -528 3}%
+\special{pa -531 13}\special{pa -533 23}\special{pa -536 32}\special{pa -539 42}%
+\special{pa -541 52}%
+\special{fp}%
+\special{pa 0 -955}\special{pa -2 -954}\special{pa -5 -953}\special{pa -7 -952}%
+\special{pa -10 -952}\special{pa -12 -951}\special{pa -14 -950}\special{pa -17 -949}%
+\special{pa -19 -948}\special{pa -22 -947}\special{pa -24 -946}\special{pa -27 -944}%
+\special{pa -29 -943}\special{pa -31 -942}\special{pa -34 -941}\special{pa -36 -939}%
+\special{pa -39 -938}\special{pa -41 -936}\special{pa -43 -935}\special{pa -46 -933}%
+\special{pa -48 -932}\special{pa -51 -930}\special{pa -53 -929}\special{pa -56 -927}%
+\special{pa -58 -925}\special{pa -60 -923}\special{pa -63 -921}\special{pa -65 -919}%
+\special{pa -68 -917}\special{pa -70 -915}\special{pa -72 -913}\special{pa -75 -911}%
+\special{pa -77 -909}\special{pa -80 -907}\special{pa -82 -904}\special{pa -85 -902}%
+\special{pa -87 -900}\special{pa -89 -897}\special{pa -92 -895}\special{pa -94 -892}%
+\special{pa -97 -890}\special{pa -99 -887}\special{pa -101 -885}\special{pa -104 -882}%
+\special{pa -106 -879}\special{pa -109 -876}\special{pa -111 -874}\special{pa -113 -871}%
+\special{pa -116 -868}\special{pa -118 -865}\special{pa -121 -862}\special{pa -123 -859}%
+\special{pa -126 -856}\special{pa -128 -852}\special{pa -130 -849}\special{pa -133 -846}%
+\special{pa -135 -843}\special{pa -138 -839}\special{pa -140 -836}\special{pa -142 -832}%
+\special{pa -145 -829}\special{pa -147 -825}\special{pa -150 -822}\special{pa -152 -818}%
+\special{pa -155 -814}\special{pa -157 -811}\special{pa -159 -807}\special{pa -162 -803}%
+\special{pa -164 -799}\special{pa -167 -795}\special{pa -169 -791}\special{pa -171 -787}%
+\special{pa -174 -783}\special{pa -176 -779}\special{pa -179 -775}\special{pa -181 -771}%
+\special{pa -184 -766}\special{pa -186 -762}\special{pa -188 -758}\special{pa -191 -753}%
+\special{pa -193 -749}\special{pa -196 -744}\special{pa -198 -740}\special{pa -200 -735}%
+\special{pa -203 -730}\special{pa -205 -726}\special{pa -208 -721}\special{pa -210 -716}%
+\special{pa -212 -711}\special{pa -215 -707}\special{pa -217 -702}\special{pa -220 -697}%
+\special{pa -222 -692}\special{pa -225 -686}\special{pa -227 -681}\special{pa -229 -676}%
+\special{pa -232 -671}\special{pa -234 -666}\special{pa -237 -660}\special{pa -239 -655}%
+\special{pa -241 -650}\special{pa -244 -644}\special{pa -246 -639}\special{pa -249 -633}%
+\special{pa -251 -627}\special{pa -254 -622}\special{pa -256 -616}\special{pa -258 -610}%
+\special{pa -261 -605}\special{pa -263 -599}\special{pa -266 -593}\special{pa -268 -587}%
+\special{pa -270 -581}\special{pa -273 -575}\special{pa -275 -569}\special{pa -278 -563}%
+\special{pa -280 -556}\special{pa -283 -550}\special{pa -285 -544}\special{pa -287 -538}%
+\special{pa -290 -531}\special{pa -292 -525}\special{pa -295 -518}\special{pa -297 -512}%
+\special{pa -299 -505}\special{pa -302 -499}\special{pa -304 -492}\special{pa -307 -485}%
+\special{pa -309 -479}\special{pa -311 -472}\special{pa -314 -465}\special{pa -316 -458}%
+\special{pa -319 -451}\special{pa -321 -444}\special{pa -324 -437}\special{pa -326 -430}%
+\special{pa -328 -423}\special{pa -331 -416}\special{pa -333 -408}\special{pa -336 -401}%
+\special{pa -338 -394}\special{pa -340 -387}\special{pa -343 -379}\special{pa -345 -372}%
+\special{pa -348 -364}\special{pa -350 -357}\special{pa -353 -349}\special{pa -355 -341}%
+\special{pa -357 -334}\special{pa -360 -326}\special{pa -362 -318}\special{pa -365 -310}%
+\special{pa -367 -302}\special{pa -369 -294}\special{pa -372 -286}\special{pa -374 -278}%
+\special{pa -377 -270}\special{pa -379 -262}\special{pa -381 -254}\special{pa -384 -246}%
+\special{pa -386 -237}\special{pa -389 -229}\special{pa -391 -221}\special{pa -394 -212}%
+\special{pa -396 -204}\special{pa -398 -195}\special{pa -401 -187}\special{pa -403 -178}%
+\special{pa -406 -169}\special{pa -408 -161}\special{pa -410 -152}\special{pa -413 -143}%
+\special{pa -415 -134}\special{pa -418 -125}\special{pa -420 -116}\special{pa -423 -108}%
+\special{pa -425 -98}\special{pa -427 -89}\special{pa -430 -80}\special{pa -432 -71}%
+\special{pa -435 -62}\special{pa -437 -53}\special{pa -439 -43}\special{pa -442 -34}%
+\special{pa -444 -24}\special{pa -447 -15}\special{pa -449 -5}\special{pa -452 4}%
+\special{pa -454 14}\special{pa -456 23}\special{pa -459 33}\special{pa -461 43}%
+\special{pa -464 53}\special{pa -466 63}\special{pa -468 72}\special{pa -471 82}%
+\special{pa -473 92}\special{pa -476 102}\special{pa -478 113}\special{pa -480 123}%
+\special{pa -483 133}%
+\special{fp}%
+\special{pa 0 -955}\special{pa -2 -954}\special{pa -4 -953}\special{pa -6 -951}%
+\special{pa -8 -950}\special{pa -9 -949}\special{pa -11 -948}\special{pa -13 -946}%
+\special{pa -15 -945}\special{pa -17 -944}\special{pa -19 -942}\special{pa -21 -941}%
+\special{pa -23 -939}\special{pa -25 -938}\special{pa -26 -936}\special{pa -28 -934}%
+\special{pa -30 -932}\special{pa -32 -931}\special{pa -34 -929}\special{pa -36 -927}%
+\special{pa -38 -925}\special{pa -40 -923}\special{pa -41 -921}\special{pa -43 -919}%
+\special{pa -45 -917}\special{pa -47 -915}\special{pa -49 -912}\special{pa -51 -910}%
+\special{pa -53 -908}\special{pa -55 -905}\special{pa -57 -903}\special{pa -58 -901}%
+\special{pa -60 -898}\special{pa -62 -896}\special{pa -64 -893}\special{pa -66 -890}%
+\special{pa -68 -888}\special{pa -70 -885}\special{pa -72 -882}\special{pa -74 -879}%
+\special{pa -75 -876}\special{pa -77 -873}\special{pa -79 -870}\special{pa -81 -867}%
+\special{pa -83 -864}\special{pa -85 -861}\special{pa -87 -858}\special{pa -89 -855}%
+\special{pa -91 -851}\special{pa -92 -848}\special{pa -94 -845}\special{pa -96 -841}%
+\special{pa -98 -838}\special{pa -100 -834}\special{pa -102 -831}\special{pa -104 -827}%
+\special{pa -106 -824}\special{pa -107 -820}\special{pa -109 -816}\special{pa -111 -812}%
+\special{pa -113 -808}\special{pa -115 -805}\special{pa -117 -801}\special{pa -119 -797}%
+\special{pa -121 -793}\special{pa -123 -789}\special{pa -124 -784}\special{pa -126 -780}%
+\special{pa -128 -776}\special{pa -130 -772}\special{pa -132 -767}\special{pa -134 -763}%
+\special{pa -136 -759}\special{pa -138 -754}\special{pa -140 -750}\special{pa -141 -745}%
+\special{pa -143 -740}\special{pa -145 -736}\special{pa -147 -731}\special{pa -149 -726}%
+\special{pa -151 -722}\special{pa -153 -717}\special{pa -155 -712}\special{pa -157 -707}%
+\special{pa -158 -702}\special{pa -160 -697}\special{pa -162 -692}\special{pa -164 -687}%
+\special{pa -166 -681}\special{pa -168 -676}\special{pa -170 -671}\special{pa -172 -666}%
+\special{pa -173 -660}\special{pa -175 -655}\special{pa -177 -649}\special{pa -179 -644}%
+\special{pa -181 -638}\special{pa -183 -633}\special{pa -185 -627}\special{pa -187 -621}%
+\special{pa -189 -616}\special{pa -190 -610}\special{pa -192 -604}\special{pa -194 -598}%
+\special{pa -196 -592}\special{pa -198 -586}\special{pa -200 -580}\special{pa -202 -574}%
+\special{pa -204 -568}\special{pa -206 -562}\special{pa -207 -555}\special{pa -209 -549}%
+\special{pa -211 -543}\special{pa -213 -536}\special{pa -215 -530}\special{pa -217 -523}%
+\special{pa -219 -517}\special{pa -221 -510}\special{pa -223 -504}\special{pa -224 -497}%
+\special{pa -226 -490}\special{pa -228 -484}\special{pa -230 -477}\special{pa -232 -470}%
+\special{pa -234 -463}\special{pa -236 -456}\special{pa -238 -449}\special{pa -239 -442}%
+\special{pa -241 -435}\special{pa -243 -428}\special{pa -245 -421}\special{pa -247 -413}%
+\special{pa -249 -406}\special{pa -251 -399}\special{pa -253 -391}\special{pa -255 -384}%
+\special{pa -256 -377}\special{pa -258 -369}\special{pa -260 -361}\special{pa -262 -354}%
+\special{pa -264 -346}\special{pa -266 -338}\special{pa -268 -331}\special{pa -270 -323}%
+\special{pa -272 -315}\special{pa -273 -307}\special{pa -275 -299}\special{pa -277 -291}%
+\special{pa -279 -283}\special{pa -281 -275}\special{pa -283 -267}\special{pa -285 -259}%
+\special{pa -287 -251}\special{pa -289 -242}\special{pa -290 -234}\special{pa -292 -226}%
+\special{pa -294 -217}\special{pa -296 -209}\special{pa -298 -200}\special{pa -300 -192}%
+\special{pa -302 -183}\special{pa -304 -174}\special{pa -306 -166}\special{pa -307 -157}%
+\special{pa -309 -148}\special{pa -311 -139}\special{pa -313 -130}\special{pa -315 -121}%
+\special{pa -317 -112}\special{pa -319 -103}\special{pa -321 -94}\special{pa -322 -85}%
+\special{pa -324 -76}\special{pa -326 -67}\special{pa -328 -57}\special{pa -330 -48}%
+\special{pa -332 -39}\special{pa -334 -29}\special{pa -336 -20}\special{pa -338 -10}%
+\special{pa -339 -1}\special{pa -341 9}\special{pa -343 19}\special{pa -345 28}%
+\special{pa -347 38}\special{pa -349 48}\special{pa -351 58}\special{pa -353 68}%
+\special{pa -355 78}\special{pa -356 88}\special{pa -358 98}\special{pa -360 108}%
+\special{pa -362 118}\special{pa -364 128}\special{pa -366 139}\special{pa -368 149}%
+\special{pa -370 159}\special{pa -372 170}\special{pa -373 180}\special{pa -375 190}%
+\special{pa -377 201}%
+\special{fp}%
+\special{pa -19 -942}\special{pa -18 -942}\special{pa -18 -942}\special{pa -17 -941}%
+\special{pa -16 -941}\special{pa -15 -941}\special{pa -15 -941}\special{pa -14 -940}%
+\special{pa -13 -940}\special{pa -13 -940}\special{pa -12 -940}\special{pa -11 -940}%
+\special{pa -10 -939}\special{pa -9 -939}\special{pa -9 -939}\special{pa -8 -939}%
+\special{pa -7 -939}\special{pa -6 -939}\special{pa -5 -939}\special{pa -4 -939}%
+\special{pa -3 -939}\special{pa -3 -939}\special{pa -2 -939}\special{pa -1 -939}%
+\special{pa 0 -939}\special{pa 1 -939}\special{pa 2 -939}\special{pa 3 -939}%
+\special{pa 3 -939}\special{pa 4 -939}\special{pa 5 -939}\special{pa 6 -939}%
+\special{pa 7 -939}\special{pa 8 -939}\special{pa 9 -939}\special{pa 9 -939}%
+\special{pa 10 -939}\special{pa 11 -940}\special{pa 12 -940}\special{pa 13 -940}%
+\special{pa 13 -940}\special{pa 14 -940}\special{pa 15 -941}\special{pa 15 -941}%
+\special{pa 16 -941}\special{pa 17 -941}\special{pa 18 -942}\special{pa 18 -942}%
+\special{pa 19 -942}\special{pa 19 -943}\special{pa 20 -943}\special{pa 21 -943}%
+\special{pa 21 -944}\special{pa 22 -944}\special{pa 22 -944}\special{pa 23 -945}%
+\special{pa 23 -945}\special{pa 24 -945}\special{pa 24 -946}\special{pa 25 -946}%
+\special{pa 25 -946}\special{pa 25 -947}\special{pa 26 -947}\special{pa 26 -948}%
+\special{pa 26 -948}\special{pa 26 -948}\special{pa 27 -949}\special{pa 27 -949}%
+\special{pa 27 -950}\special{pa 27 -950}\special{pa 27 -951}\special{pa 27 -951}%
+\special{pa 28 -951}\special{pa 28 -952}\special{pa 28 -952}\special{pa 28 -953}%
+\special{pa 28 -953}\special{pa 27 -954}\special{pa 27 -954}\special{pa 27 -954}%
+\special{pa 27 -955}\special{pa 27 -955}\special{pa 27 -956}\special{pa 26 -956}%
+\special{pa 26 -957}\special{pa 26 -957}\special{pa 26 -957}\special{pa 25 -958}%
+\special{pa 25 -958}\special{pa 25 -959}\special{pa 24 -959}\special{pa 24 -959}%
+\special{pa 23 -960}\special{pa 23 -960}\special{pa 22 -960}\special{pa 22 -961}%
+\special{pa 21 -961}\special{pa 21 -961}\special{pa 20 -962}\special{pa 19 -962}%
+\special{pa 19 -962}\special{pa 18 -963}\special{pa 18 -963}\special{pa 17 -963}%
+\special{pa 16 -963}\special{pa 15 -964}\special{pa 15 -964}\special{pa 14 -964}%
+\special{pa 13 -964}\special{pa 13 -965}\special{pa 12 -965}\special{pa 11 -965}%
+\special{pa 10 -965}\special{pa 9 -965}\special{pa 9 -965}\special{pa 8 -966}%
+\special{pa 7 -966}\special{pa 6 -966}\special{pa 5 -966}\special{pa 4 -966}%
+\special{pa 3 -966}\special{pa 3 -966}\special{pa 2 -966}\special{pa 1 -966}%
+\special{pa -0 -966}\special{pa -1 -966}\special{pa -2 -966}\special{pa -3 -966}%
+\special{pa -3 -966}\special{pa -4 -966}\special{pa -5 -966}\special{pa -6 -966}%
+\special{pa -7 -966}\special{pa -8 -966}\special{pa -9 -965}\special{pa -9 -965}%
+\special{pa -10 -965}\special{pa -11 -965}\special{pa -12 -965}\special{pa -13 -965}%
+\special{pa -13 -964}\special{pa -14 -964}\special{pa -15 -964}\special{pa -15 -964}%
+\special{pa -16 -963}\special{pa -17 -963}\special{pa -18 -963}\special{pa -18 -963}%
+\special{pa -19 -962}\special{pa -19 -962}\special{pa -20 -962}\special{pa -21 -961}%
+\special{pa -21 -961}\special{pa -22 -961}\special{pa -22 -960}\special{pa -23 -960}%
+\special{pa -23 -960}\special{pa -24 -959}\special{pa -24 -959}\special{pa -25 -959}%
+\special{pa -25 -958}\special{pa -25 -958}\special{pa -26 -957}\special{pa -26 -957}%
+\special{pa -26 -957}\special{pa -26 -956}\special{pa -27 -956}\special{pa -27 -955}%
+\special{pa -27 -955}\special{pa -27 -954}\special{pa -27 -954}\special{pa -27 -954}%
+\special{pa -28 -953}\special{pa -28 -953}\special{pa -28 -952}\special{pa -28 -952}%
+\special{pa -28 -951}\special{pa -27 -951}\special{pa -27 -951}\special{pa -27 -950}%
+\special{pa -27 -950}\special{pa -27 -949}\special{pa -27 -949}\special{pa -26 -948}%
+\special{pa -26 -948}\special{pa -26 -948}\special{pa -26 -947}\special{pa -25 -947}%
+\special{pa -25 -946}\special{pa -25 -946}\special{pa -24 -946}\special{pa -24 -945}%
+\special{pa -23 -945}\special{pa -23 -945}\special{pa -22 -944}\special{pa -22 -944}%
+\special{pa -21 -943}\special{pa -21 -943}\special{pa -20 -943}\special{pa -19 -943}%
+\special{pa -19 -942}%
+\special{fp}%
+\special{pa -38 -925}\special{pa -36 -924}\special{pa -35 -924}\special{pa -34 -923}%
+\special{pa -32 -923}\special{pa -31 -922}\special{pa -30 -922}\special{pa -28 -921}%
+\special{pa -27 -921}\special{pa -25 -921}\special{pa -23 -920}\special{pa -22 -920}%
+\special{pa -20 -919}\special{pa -19 -919}\special{pa -17 -919}\special{pa -15 -919}%
+\special{pa -14 -918}\special{pa -12 -918}\special{pa -10 -918}\special{pa -9 -918}%
+\special{pa -7 -918}\special{pa -5 -918}\special{pa -3 -918}\special{pa -2 -918}%
+\special{pa 0 -918}\special{pa 2 -918}\special{pa 3 -918}\special{pa 5 -918}%
+\special{pa 7 -918}\special{pa 9 -918}\special{pa 10 -918}\special{pa 12 -918}%
+\special{pa 14 -918}\special{pa 15 -919}\special{pa 17 -919}\special{pa 19 -919}%
+\special{pa 20 -920}\special{pa 22 -920}\special{pa 23 -920}\special{pa 25 -921}%
+\special{pa 27 -921}\special{pa 28 -921}\special{pa 30 -922}\special{pa 31 -922}%
+\special{pa 32 -923}\special{pa 34 -923}\special{pa 35 -924}\special{pa 36 -924}%
+\special{pa 38 -925}\special{pa 39 -926}\special{pa 40 -926}\special{pa 41 -927}%
+\special{pa 42 -928}\special{pa 44 -928}\special{pa 45 -929}\special{pa 46 -930}%
+\special{pa 47 -930}\special{pa 47 -931}\special{pa 48 -932}\special{pa 49 -933}%
+\special{pa 50 -933}\special{pa 51 -934}\special{pa 51 -935}\special{pa 52 -936}%
+\special{pa 52 -937}\special{pa 53 -937}\special{pa 53 -938}\special{pa 54 -939}%
+\special{pa 54 -940}\special{pa 54 -941}\special{pa 55 -942}\special{pa 55 -943}%
+\special{pa 55 -943}\special{pa 55 -944}\special{pa 55 -945}\special{pa 55 -946}%
+\special{pa 55 -947}\special{pa 55 -948}\special{pa 55 -949}\special{pa 54 -949}%
+\special{pa 54 -950}\special{pa 54 -951}\special{pa 53 -952}\special{pa 53 -953}%
+\special{pa 52 -954}\special{pa 52 -954}\special{pa 51 -955}\special{pa 51 -956}%
+\special{pa 50 -957}\special{pa 49 -958}\special{pa 48 -958}\special{pa 47 -959}%
+\special{pa 47 -960}\special{pa 46 -961}\special{pa 45 -961}\special{pa 44 -962}%
+\special{pa 42 -963}\special{pa 41 -963}\special{pa 40 -964}\special{pa 39 -965}%
+\special{pa 38 -965}\special{pa 36 -966}\special{pa 35 -966}\special{pa 34 -967}%
+\special{pa 32 -967}\special{pa 31 -968}\special{pa 30 -968}\special{pa 28 -969}%
+\special{pa 27 -969}\special{pa 25 -970}\special{pa 23 -970}\special{pa 22 -970}%
+\special{pa 20 -971}\special{pa 19 -971}\special{pa 17 -971}\special{pa 15 -972}%
+\special{pa 14 -972}\special{pa 12 -972}\special{pa 10 -972}\special{pa 9 -972}%
+\special{pa 7 -972}\special{pa 5 -973}\special{pa 3 -973}\special{pa 2 -973}%
+\special{pa -0 -973}\special{pa -2 -973}\special{pa -3 -973}\special{pa -5 -973}%
+\special{pa -7 -972}\special{pa -9 -972}\special{pa -10 -972}\special{pa -12 -972}%
+\special{pa -14 -972}\special{pa -15 -972}\special{pa -17 -971}\special{pa -19 -971}%
+\special{pa -20 -971}\special{pa -22 -970}\special{pa -23 -970}\special{pa -25 -970}%
+\special{pa -27 -969}\special{pa -28 -969}\special{pa -30 -968}\special{pa -31 -968}%
+\special{pa -32 -967}\special{pa -34 -967}\special{pa -35 -966}\special{pa -36 -966}%
+\special{pa -38 -965}\special{pa -39 -965}\special{pa -40 -964}\special{pa -41 -963}%
+\special{pa -42 -963}\special{pa -44 -962}\special{pa -45 -961}\special{pa -46 -961}%
+\special{pa -47 -960}\special{pa -47 -959}\special{pa -48 -958}\special{pa -49 -958}%
+\special{pa -50 -957}\special{pa -51 -956}\special{pa -51 -955}\special{pa -52 -954}%
+\special{pa -52 -954}\special{pa -53 -953}\special{pa -53 -952}\special{pa -54 -951}%
+\special{pa -54 -950}\special{pa -54 -949}\special{pa -55 -949}\special{pa -55 -948}%
+\special{pa -55 -947}\special{pa -55 -946}\special{pa -55 -945}\special{pa -55 -944}%
+\special{pa -55 -943}\special{pa -55 -943}\special{pa -55 -942}\special{pa -54 -941}%
+\special{pa -54 -940}\special{pa -54 -939}\special{pa -53 -938}\special{pa -53 -937}%
+\special{pa -52 -937}\special{pa -52 -936}\special{pa -51 -935}\special{pa -51 -934}%
+\special{pa -50 -933}\special{pa -49 -933}\special{pa -48 -932}\special{pa -47 -931}%
+\special{pa -47 -930}\special{pa -46 -930}\special{pa -45 -929}\special{pa -44 -928}%
+\special{pa -42 -928}\special{pa -41 -927}\special{pa -40 -926}\special{pa -39 -926}%
+\special{pa -38 -925}%
+\special{fp}%
+\special{pa -57 -903}\special{pa -55 -902}\special{pa -53 -901}\special{pa -51 -901}%
+\special{pa -49 -900}\special{pa -46 -899}\special{pa -44 -898}\special{pa -42 -898}%
+\special{pa -40 -897}\special{pa -38 -896}\special{pa -35 -896}\special{pa -33 -895}%
+\special{pa -30 -895}\special{pa -28 -894}\special{pa -26 -894}\special{pa -23 -893}%
+\special{pa -21 -893}\special{pa -18 -893}\special{pa -15 -893}\special{pa -13 -892}%
+\special{pa -10 -892}\special{pa -8 -892}\special{pa -5 -892}\special{pa -3 -892}%
+\special{pa 0 -892}\special{pa 3 -892}\special{pa 5 -892}\special{pa 8 -892}%
+\special{pa 10 -892}\special{pa 13 -892}\special{pa 16 -893}\special{pa 18 -893}%
+\special{pa 21 -893}\special{pa 23 -894}\special{pa 26 -894}\special{pa 28 -894}%
+\special{pa 30 -895}\special{pa 33 -895}\special{pa 35 -896}\special{pa 38 -896}%
+\special{pa 40 -897}\special{pa 42 -898}\special{pa 44 -898}\special{pa 46 -899}%
+\special{pa 49 -900}\special{pa 51 -901}\special{pa 53 -901}\special{pa 55 -902}%
+\special{pa 57 -903}\special{pa 58 -904}\special{pa 60 -905}\special{pa 62 -906}%
+\special{pa 64 -907}\special{pa 65 -908}\special{pa 67 -909}\special{pa 68 -910}%
+\special{pa 70 -911}\special{pa 71 -912}\special{pa 72 -913}\special{pa 74 -914}%
+\special{pa 75 -916}\special{pa 76 -917}\special{pa 77 -918}\special{pa 78 -919}%
+\special{pa 79 -920}\special{pa 79 -922}\special{pa 80 -923}\special{pa 81 -924}%
+\special{pa 81 -925}\special{pa 82 -927}\special{pa 82 -928}\special{pa 82 -929}%
+\special{pa 83 -931}\special{pa 83 -932}\special{pa 83 -933}\special{pa 83 -935}%
+\special{pa 83 -936}\special{pa 82 -937}\special{pa 82 -938}\special{pa 82 -940}%
+\special{pa 81 -941}\special{pa 81 -942}\special{pa 80 -943}\special{pa 79 -945}%
+\special{pa 79 -946}\special{pa 78 -947}\special{pa 77 -948}\special{pa 76 -950}%
+\special{pa 75 -951}\special{pa 74 -952}\special{pa 72 -953}\special{pa 71 -954}%
+\special{pa 70 -955}\special{pa 68 -956}\special{pa 67 -958}\special{pa 65 -959}%
+\special{pa 64 -960}\special{pa 62 -961}\special{pa 60 -962}\special{pa 58 -962}%
+\special{pa 57 -963}\special{pa 55 -964}\special{pa 53 -965}\special{pa 51 -966}%
+\special{pa 49 -967}\special{pa 46 -967}\special{pa 44 -968}\special{pa 42 -969}%
+\special{pa 40 -969}\special{pa 38 -970}\special{pa 35 -971}\special{pa 33 -971}%
+\special{pa 30 -972}\special{pa 28 -972}\special{pa 26 -973}\special{pa 23 -973}%
+\special{pa 21 -973}\special{pa 18 -974}\special{pa 15 -974}\special{pa 13 -974}%
+\special{pa 10 -974}\special{pa 8 -974}\special{pa 5 -974}\special{pa 3 -975}%
+\special{pa -0 -975}\special{pa -3 -975}\special{pa -5 -974}\special{pa -8 -974}%
+\special{pa -10 -974}\special{pa -13 -974}\special{pa -16 -974}\special{pa -18 -974}%
+\special{pa -21 -973}\special{pa -23 -973}\special{pa -26 -973}\special{pa -28 -972}%
+\special{pa -30 -972}\special{pa -33 -971}\special{pa -35 -971}\special{pa -38 -970}%
+\special{pa -40 -969}\special{pa -42 -969}\special{pa -44 -968}\special{pa -46 -967}%
+\special{pa -49 -967}\special{pa -51 -966}\special{pa -53 -965}\special{pa -55 -964}%
+\special{pa -57 -963}\special{pa -58 -962}\special{pa -60 -961}\special{pa -62 -961}%
+\special{pa -64 -960}\special{pa -65 -959}\special{pa -67 -957}\special{pa -68 -956}%
+\special{pa -70 -955}\special{pa -71 -954}\special{pa -72 -953}\special{pa -74 -952}%
+\special{pa -75 -951}\special{pa -76 -950}\special{pa -77 -948}\special{pa -78 -947}%
+\special{pa -79 -946}\special{pa -79 -945}\special{pa -80 -943}\special{pa -81 -942}%
+\special{pa -81 -941}\special{pa -82 -940}\special{pa -82 -938}\special{pa -82 -937}%
+\special{pa -83 -936}\special{pa -83 -934}\special{pa -83 -933}\special{pa -83 -932}%
+\special{pa -83 -931}\special{pa -82 -929}\special{pa -82 -928}\special{pa -82 -927}%
+\special{pa -81 -925}\special{pa -81 -924}\special{pa -80 -923}\special{pa -79 -922}%
+\special{pa -79 -920}\special{pa -78 -919}\special{pa -77 -918}\special{pa -76 -917}%
+\special{pa -75 -916}\special{pa -74 -914}\special{pa -72 -913}\special{pa -71 -912}%
+\special{pa -70 -911}\special{pa -68 -910}\special{pa -67 -909}\special{pa -65 -908}%
+\special{pa -64 -907}\special{pa -62 -906}\special{pa -60 -905}\special{pa -58 -904}%
+\special{pa -57 -903}%
+\special{fp}%
+\special{pa -75 -876}\special{pa -73 -875}\special{pa -70 -874}\special{pa -68 -873}%
+\special{pa -65 -872}\special{pa -62 -871}\special{pa -59 -870}\special{pa -56 -869}%
+\special{pa -53 -868}\special{pa -50 -867}\special{pa -47 -867}\special{pa -44 -866}%
+\special{pa -41 -865}\special{pa -37 -865}\special{pa -34 -864}\special{pa -31 -864}%
+\special{pa -27 -863}\special{pa -24 -863}\special{pa -21 -862}\special{pa -17 -862}%
+\special{pa -14 -862}\special{pa -10 -862}\special{pa -7 -861}\special{pa -3 -861}%
+\special{pa 0 -861}\special{pa 4 -861}\special{pa 7 -861}\special{pa 10 -862}%
+\special{pa 14 -862}\special{pa 17 -862}\special{pa 21 -862}\special{pa 24 -863}%
+\special{pa 27 -863}\special{pa 31 -864}\special{pa 34 -864}\special{pa 37 -865}%
+\special{pa 41 -865}\special{pa 44 -866}\special{pa 47 -867}\special{pa 50 -867}%
+\special{pa 53 -868}\special{pa 56 -869}\special{pa 59 -870}\special{pa 62 -871}%
+\special{pa 65 -872}\special{pa 68 -873}\special{pa 70 -874}\special{pa 73 -875}%
+\special{pa 75 -876}\special{pa 78 -878}\special{pa 80 -879}\special{pa 83 -880}%
+\special{pa 85 -881}\special{pa 87 -883}\special{pa 89 -884}\special{pa 91 -886}%
+\special{pa 93 -887}\special{pa 95 -888}\special{pa 97 -890}\special{pa 98 -891}%
+\special{pa 100 -893}\special{pa 101 -895}\special{pa 103 -896}\special{pa 104 -898}%
+\special{pa 105 -899}\special{pa 106 -901}\special{pa 107 -903}\special{pa 108 -904}%
+\special{pa 108 -906}\special{pa 109 -908}\special{pa 109 -910}\special{pa 110 -911}%
+\special{pa 110 -913}\special{pa 110 -915}\special{pa 110 -917}\special{pa 110 -918}%
+\special{pa 110 -920}\special{pa 110 -922}\special{pa 109 -923}\special{pa 109 -925}%
+\special{pa 108 -927}\special{pa 108 -929}\special{pa 107 -930}\special{pa 106 -932}%
+\special{pa 105 -934}\special{pa 104 -935}\special{pa 102 -937}\special{pa 101 -938}%
+\special{pa 100 -940}\special{pa 98 -942}\special{pa 97 -943}\special{pa 95 -945}%
+\special{pa 93 -946}\special{pa 91 -947}\special{pa 89 -949}\special{pa 87 -950}%
+\special{pa 85 -952}\special{pa 83 -953}\special{pa 80 -954}\special{pa 78 -955}%
+\special{pa 75 -957}\special{pa 73 -958}\special{pa 70 -959}\special{pa 68 -960}%
+\special{pa 65 -961}\special{pa 62 -962}\special{pa 59 -963}\special{pa 56 -964}%
+\special{pa 53 -965}\special{pa 50 -966}\special{pa 47 -966}\special{pa 44 -967}%
+\special{pa 41 -968}\special{pa 37 -968}\special{pa 34 -969}\special{pa 31 -969}%
+\special{pa 27 -970}\special{pa 24 -970}\special{pa 21 -971}\special{pa 17 -971}%
+\special{pa 14 -971}\special{pa 10 -971}\special{pa 7 -971}\special{pa 3 -972}%
+\special{pa -0 -972}\special{pa -4 -972}\special{pa -7 -971}\special{pa -10 -971}%
+\special{pa -14 -971}\special{pa -17 -971}\special{pa -21 -971}\special{pa -24 -970}%
+\special{pa -27 -970}\special{pa -31 -969}\special{pa -34 -969}\special{pa -37 -968}%
+\special{pa -41 -968}\special{pa -44 -967}\special{pa -47 -966}\special{pa -50 -966}%
+\special{pa -53 -965}\special{pa -56 -964}\special{pa -59 -963}\special{pa -62 -962}%
+\special{pa -65 -961}\special{pa -68 -960}\special{pa -70 -959}\special{pa -73 -958}%
+\special{pa -75 -957}\special{pa -78 -955}\special{pa -80 -954}\special{pa -83 -953}%
+\special{pa -85 -952}\special{pa -87 -950}\special{pa -89 -949}\special{pa -91 -947}%
+\special{pa -93 -946}\special{pa -95 -945}\special{pa -97 -943}\special{pa -98 -941}%
+\special{pa -100 -940}\special{pa -101 -938}\special{pa -103 -937}\special{pa -104 -935}%
+\special{pa -105 -934}\special{pa -106 -932}\special{pa -107 -930}\special{pa -108 -928}%
+\special{pa -108 -927}\special{pa -109 -925}\special{pa -109 -923}\special{pa -110 -922}%
+\special{pa -110 -920}\special{pa -110 -918}\special{pa -110 -916}\special{pa -110 -915}%
+\special{pa -110 -913}\special{pa -110 -911}\special{pa -109 -910}\special{pa -109 -908}%
+\special{pa -108 -906}\special{pa -108 -904}\special{pa -107 -903}\special{pa -106 -901}%
+\special{pa -105 -899}\special{pa -104 -898}\special{pa -102 -896}\special{pa -101 -895}%
+\special{pa -100 -893}\special{pa -98 -891}\special{pa -97 -890}\special{pa -95 -888}%
+\special{pa -93 -887}\special{pa -91 -885}\special{pa -89 -884}\special{pa -87 -883}%
+\special{pa -85 -881}\special{pa -83 -880}\special{pa -80 -879}\special{pa -78 -877}%
+\special{pa -75 -876}%
+\special{fp}%
+\special{pa -94 -845}\special{pa -91 -843}\special{pa -88 -842}\special{pa -84 -841}%
+\special{pa -81 -839}\special{pa -77 -838}\special{pa -74 -837}\special{pa -70 -836}%
+\special{pa -66 -835}\special{pa -63 -834}\special{pa -59 -833}\special{pa -55 -832}%
+\special{pa -51 -831}\special{pa -47 -830}\special{pa -43 -829}\special{pa -38 -829}%
+\special{pa -34 -828}\special{pa -30 -828}\special{pa -26 -827}\special{pa -22 -827}%
+\special{pa -17 -827}\special{pa -13 -826}\special{pa -9 -826}\special{pa -4 -826}%
+\special{pa 0 -826}\special{pa 4 -826}\special{pa 9 -826}\special{pa 13 -826}%
+\special{pa 17 -827}\special{pa 22 -827}\special{pa 26 -827}\special{pa 30 -828}%
+\special{pa 34 -828}\special{pa 38 -829}\special{pa 43 -829}\special{pa 47 -830}%
+\special{pa 51 -831}\special{pa 55 -832}\special{pa 59 -833}\special{pa 63 -834}%
+\special{pa 66 -835}\special{pa 70 -836}\special{pa 74 -837}\special{pa 77 -838}%
+\special{pa 81 -839}\special{pa 84 -841}\special{pa 88 -842}\special{pa 91 -843}%
+\special{pa 94 -845}\special{pa 97 -846}\special{pa 100 -848}\special{pa 103 -849}%
+\special{pa 106 -851}\special{pa 109 -853}\special{pa 112 -855}\special{pa 114 -856}%
+\special{pa 116 -858}\special{pa 119 -860}\special{pa 121 -862}\special{pa 123 -864}%
+\special{pa 125 -866}\special{pa 126 -868}\special{pa 128 -870}\special{pa 130 -872}%
+\special{pa 131 -874}\special{pa 132 -876}\special{pa 133 -878}\special{pa 134 -880}%
+\special{pa 135 -882}\special{pa 136 -884}\special{pa 137 -886}\special{pa 137 -889}%
+\special{pa 138 -891}\special{pa 138 -893}\special{pa 138 -895}\special{pa 138 -897}%
+\special{pa 138 -899}\special{pa 137 -902}\special{pa 137 -904}\special{pa 136 -906}%
+\special{pa 135 -908}\special{pa 134 -910}\special{pa 133 -912}\special{pa 132 -914}%
+\special{pa 131 -916}\special{pa 130 -918}\special{pa 128 -920}\special{pa 126 -922}%
+\special{pa 125 -924}\special{pa 123 -926}\special{pa 121 -928}\special{pa 119 -930}%
+\special{pa 116 -932}\special{pa 114 -934}\special{pa 111 -936}\special{pa 109 -937}%
+\special{pa 106 -939}\special{pa 103 -941}\special{pa 100 -942}\special{pa 97 -944}%
+\special{pa 94 -945}\special{pa 91 -947}\special{pa 88 -948}\special{pa 84 -949}%
+\special{pa 81 -951}\special{pa 77 -952}\special{pa 74 -953}\special{pa 70 -954}%
+\special{pa 66 -955}\special{pa 63 -956}\special{pa 59 -957}\special{pa 55 -958}%
+\special{pa 51 -959}\special{pa 47 -960}\special{pa 43 -961}\special{pa 38 -961}%
+\special{pa 34 -962}\special{pa 30 -962}\special{pa 26 -963}\special{pa 22 -963}%
+\special{pa 17 -963}\special{pa 13 -964}\special{pa 9 -964}\special{pa 4 -964}%
+\special{pa -0 -964}\special{pa -4 -964}\special{pa -9 -964}\special{pa -13 -964}%
+\special{pa -17 -963}\special{pa -22 -963}\special{pa -26 -963}\special{pa -30 -962}%
+\special{pa -34 -962}\special{pa -38 -961}\special{pa -43 -961}\special{pa -47 -960}%
+\special{pa -51 -959}\special{pa -55 -958}\special{pa -59 -957}\special{pa -63 -956}%
+\special{pa -66 -955}\special{pa -70 -954}\special{pa -74 -953}\special{pa -77 -952}%
+\special{pa -81 -951}\special{pa -84 -949}\special{pa -88 -948}\special{pa -91 -947}%
+\special{pa -94 -945}\special{pa -97 -944}\special{pa -100 -942}\special{pa -103 -941}%
+\special{pa -106 -939}\special{pa -109 -937}\special{pa -112 -935}\special{pa -114 -934}%
+\special{pa -116 -932}\special{pa -119 -930}\special{pa -121 -928}\special{pa -123 -926}%
+\special{pa -125 -924}\special{pa -126 -922}\special{pa -128 -920}\special{pa -130 -918}%
+\special{pa -131 -916}\special{pa -132 -914}\special{pa -133 -912}\special{pa -134 -910}%
+\special{pa -135 -908}\special{pa -136 -906}\special{pa -137 -904}\special{pa -137 -901}%
+\special{pa -138 -899}\special{pa -138 -897}\special{pa -138 -895}\special{pa -138 -893}%
+\special{pa -138 -891}\special{pa -137 -888}\special{pa -137 -886}\special{pa -136 -884}%
+\special{pa -135 -882}\special{pa -134 -880}\special{pa -133 -878}\special{pa -132 -876}%
+\special{pa -131 -874}\special{pa -130 -872}\special{pa -128 -870}\special{pa -126 -868}%
+\special{pa -125 -866}\special{pa -123 -864}\special{pa -121 -862}\special{pa -119 -860}%
+\special{pa -116 -858}\special{pa -114 -856}\special{pa -111 -854}\special{pa -109 -853}%
+\special{pa -106 -851}\special{pa -103 -849}\special{pa -100 -848}\special{pa -97 -846}%
+\special{pa -94 -845}%
+\special{fp}%
+\special{pa -113 -808}\special{pa -109 -807}\special{pa -105 -805}\special{pa -101 -803}%
+\special{pa -97 -802}\special{pa -93 -800}\special{pa -89 -799}\special{pa -84 -798}%
+\special{pa -80 -796}\special{pa -75 -795}\special{pa -70 -794}\special{pa -66 -793}%
+\special{pa -61 -792}\special{pa -56 -791}\special{pa -51 -790}\special{pa -46 -789}%
+\special{pa -41 -789}\special{pa -36 -788}\special{pa -31 -788}\special{pa -26 -787}%
+\special{pa -21 -787}\special{pa -16 -786}\special{pa -10 -786}\special{pa -5 -786}%
+\special{pa 0 -786}\special{pa 5 -786}\special{pa 10 -786}\special{pa 16 -786}%
+\special{pa 21 -787}\special{pa 26 -787}\special{pa 31 -788}\special{pa 36 -788}%
+\special{pa 41 -789}\special{pa 46 -789}\special{pa 51 -790}\special{pa 56 -791}%
+\special{pa 61 -792}\special{pa 66 -793}\special{pa 70 -794}\special{pa 75 -795}%
+\special{pa 80 -796}\special{pa 84 -798}\special{pa 89 -799}\special{pa 93 -800}%
+\special{pa 97 -802}\special{pa 101 -803}\special{pa 105 -805}\special{pa 109 -807}%
+\special{pa 113 -809}\special{pa 117 -810}\special{pa 121 -812}\special{pa 124 -814}%
+\special{pa 127 -816}\special{pa 131 -818}\special{pa 134 -820}\special{pa 137 -822}%
+\special{pa 140 -824}\special{pa 142 -827}\special{pa 145 -829}\special{pa 147 -831}%
+\special{pa 150 -834}\special{pa 152 -836}\special{pa 154 -838}\special{pa 156 -841}%
+\special{pa 157 -843}\special{pa 159 -846}\special{pa 160 -848}\special{pa 161 -851}%
+\special{pa 162 -853}\special{pa 163 -856}\special{pa 164 -858}\special{pa 165 -861}%
+\special{pa 165 -864}\special{pa 165 -866}\special{pa 165 -869}\special{pa 165 -871}%
+\special{pa 165 -874}\special{pa 165 -877}\special{pa 164 -879}\special{pa 163 -882}%
+\special{pa 162 -884}\special{pa 161 -887}\special{pa 160 -889}\special{pa 159 -892}%
+\special{pa 157 -894}\special{pa 156 -897}\special{pa 154 -899}\special{pa 152 -902}%
+\special{pa 150 -904}\special{pa 147 -906}\special{pa 145 -909}\special{pa 142 -911}%
+\special{pa 140 -913}\special{pa 137 -915}\special{pa 134 -917}\special{pa 131 -919}%
+\special{pa 127 -921}\special{pa 124 -923}\special{pa 120 -925}\special{pa 117 -927}%
+\special{pa 113 -929}\special{pa 109 -931}\special{pa 105 -932}\special{pa 101 -934}%
+\special{pa 97 -936}\special{pa 93 -937}\special{pa 89 -939}\special{pa 84 -940}%
+\special{pa 80 -941}\special{pa 75 -942}\special{pa 70 -944}\special{pa 66 -945}%
+\special{pa 61 -946}\special{pa 56 -947}\special{pa 51 -947}\special{pa 46 -948}%
+\special{pa 41 -949}\special{pa 36 -949}\special{pa 31 -950}\special{pa 26 -950}%
+\special{pa 21 -951}\special{pa 16 -951}\special{pa 10 -951}\special{pa 5 -951}%
+\special{pa -0 -951}\special{pa -5 -951}\special{pa -10 -951}\special{pa -16 -951}%
+\special{pa -21 -951}\special{pa -26 -950}\special{pa -31 -950}\special{pa -36 -949}%
+\special{pa -41 -949}\special{pa -46 -948}\special{pa -51 -947}\special{pa -56 -947}%
+\special{pa -61 -946}\special{pa -66 -945}\special{pa -70 -944}\special{pa -75 -942}%
+\special{pa -80 -941}\special{pa -84 -940}\special{pa -89 -939}\special{pa -93 -937}%
+\special{pa -97 -936}\special{pa -101 -934}\special{pa -105 -932}\special{pa -109 -931}%
+\special{pa -113 -929}\special{pa -117 -927}\special{pa -121 -925}\special{pa -124 -923}%
+\special{pa -127 -921}\special{pa -131 -919}\special{pa -134 -917}\special{pa -137 -915}%
+\special{pa -140 -913}\special{pa -142 -911}\special{pa -145 -909}\special{pa -147 -906}%
+\special{pa -150 -904}\special{pa -152 -902}\special{pa -154 -899}\special{pa -156 -897}%
+\special{pa -157 -894}\special{pa -159 -892}\special{pa -160 -889}\special{pa -161 -887}%
+\special{pa -162 -884}\special{pa -163 -882}\special{pa -164 -879}\special{pa -165 -877}%
+\special{pa -165 -874}\special{pa -165 -871}\special{pa -165 -869}\special{pa -165 -866}%
+\special{pa -165 -864}\special{pa -165 -861}\special{pa -164 -858}\special{pa -163 -856}%
+\special{pa -162 -853}\special{pa -161 -851}\special{pa -160 -848}\special{pa -159 -846}%
+\special{pa -157 -843}\special{pa -156 -841}\special{pa -154 -838}\special{pa -152 -836}%
+\special{pa -150 -834}\special{pa -147 -831}\special{pa -145 -829}\special{pa -142 -827}%
+\special{pa -140 -824}\special{pa -137 -822}\special{pa -134 -820}\special{pa -131 -818}%
+\special{pa -127 -816}\special{pa -124 -814}\special{pa -120 -812}\special{pa -117 -810}%
+\special{pa -113 -808}%
+\special{fp}%
+\special{pa -132 -767}\special{pa -128 -765}\special{pa -123 -763}\special{pa -118 -761}%
+\special{pa -113 -760}\special{pa -108 -758}\special{pa -103 -756}\special{pa -98 -755}%
+\special{pa -93 -753}\special{pa -88 -752}\special{pa -82 -750}\special{pa -77 -749}%
+\special{pa -71 -748}\special{pa -65 -747}\special{pa -60 -746}\special{pa -54 -745}%
+\special{pa -48 -744}\special{pa -42 -744}\special{pa -36 -743}\special{pa -30 -742}%
+\special{pa -24 -742}\special{pa -18 -742}\special{pa -12 -741}\special{pa -6 -741}%
+\special{pa 0 -741}\special{pa 6 -741}\special{pa 12 -741}\special{pa 18 -742}%
+\special{pa 24 -742}\special{pa 30 -742}\special{pa 36 -743}\special{pa 42 -744}%
+\special{pa 48 -744}\special{pa 54 -745}\special{pa 60 -746}\special{pa 65 -747}%
+\special{pa 71 -748}\special{pa 77 -749}\special{pa 82 -750}\special{pa 88 -752}%
+\special{pa 93 -753}\special{pa 98 -755}\special{pa 103 -756}\special{pa 108 -758}%
+\special{pa 113 -760}\special{pa 118 -762}\special{pa 123 -763}\special{pa 128 -765}%
+\special{pa 132 -767}\special{pa 136 -770}\special{pa 141 -772}\special{pa 145 -774}%
+\special{pa 149 -776}\special{pa 152 -779}\special{pa 156 -781}\special{pa 160 -784}%
+\special{pa 163 -786}\special{pa 166 -789}\special{pa 169 -791}\special{pa 172 -794}%
+\special{pa 175 -797}\special{pa 177 -799}\special{pa 179 -802}\special{pa 182 -805}%
+\special{pa 183 -808}\special{pa 185 -811}\special{pa 187 -814}\special{pa 188 -817}%
+\special{pa 190 -820}\special{pa 191 -823}\special{pa 191 -826}\special{pa 192 -829}%
+\special{pa 193 -832}\special{pa 193 -835}\special{pa 193 -838}\special{pa 193 -841}%
+\special{pa 193 -844}\special{pa 192 -847}\special{pa 191 -850}\special{pa 191 -853}%
+\special{pa 189 -856}\special{pa 188 -859}\special{pa 187 -862}\special{pa 185 -865}%
+\special{pa 183 -868}\special{pa 181 -870}\special{pa 179 -873}\special{pa 177 -876}%
+\special{pa 175 -879}\special{pa 172 -882}\special{pa 169 -884}\special{pa 166 -887}%
+\special{pa 163 -889}\special{pa 160 -892}\special{pa 156 -894}\special{pa 152 -897}%
+\special{pa 149 -899}\special{pa 145 -902}\special{pa 141 -904}\special{pa 136 -906}%
+\special{pa 132 -908}\special{pa 128 -910}\special{pa 123 -912}\special{pa 118 -914}%
+\special{pa 113 -916}\special{pa 108 -918}\special{pa 103 -919}\special{pa 98 -921}%
+\special{pa 93 -922}\special{pa 88 -924}\special{pa 82 -925}\special{pa 77 -926}%
+\special{pa 71 -927}\special{pa 65 -928}\special{pa 60 -929}\special{pa 54 -930}%
+\special{pa 48 -931}\special{pa 42 -932}\special{pa 36 -932}\special{pa 30 -933}%
+\special{pa 24 -933}\special{pa 18 -934}\special{pa 12 -934}\special{pa 6 -934}%
+\special{pa -0 -934}\special{pa -6 -934}\special{pa -12 -934}\special{pa -18 -934}%
+\special{pa -24 -933}\special{pa -30 -933}\special{pa -36 -932}\special{pa -42 -932}%
+\special{pa -48 -931}\special{pa -54 -930}\special{pa -60 -929}\special{pa -65 -928}%
+\special{pa -71 -927}\special{pa -77 -926}\special{pa -82 -925}\special{pa -88 -924}%
+\special{pa -93 -922}\special{pa -98 -921}\special{pa -103 -919}\special{pa -108 -917}%
+\special{pa -113 -916}\special{pa -118 -914}\special{pa -123 -912}\special{pa -128 -910}%
+\special{pa -132 -908}\special{pa -136 -906}\special{pa -141 -904}\special{pa -145 -901}%
+\special{pa -149 -899}\special{pa -152 -897}\special{pa -156 -894}\special{pa -160 -892}%
+\special{pa -163 -889}\special{pa -166 -887}\special{pa -169 -884}\special{pa -172 -881}%
+\special{pa -175 -879}\special{pa -177 -876}\special{pa -179 -873}\special{pa -182 -870}%
+\special{pa -183 -867}\special{pa -185 -865}\special{pa -187 -862}\special{pa -188 -859}%
+\special{pa -190 -856}\special{pa -191 -853}\special{pa -191 -850}\special{pa -192 -847}%
+\special{pa -193 -844}\special{pa -193 -841}\special{pa -193 -838}\special{pa -193 -835}%
+\special{pa -193 -832}\special{pa -192 -829}\special{pa -191 -826}\special{pa -191 -823}%
+\special{pa -189 -820}\special{pa -188 -817}\special{pa -187 -814}\special{pa -185 -811}%
+\special{pa -183 -808}\special{pa -181 -805}\special{pa -179 -802}\special{pa -177 -799}%
+\special{pa -175 -797}\special{pa -172 -794}\special{pa -169 -791}\special{pa -166 -789}%
+\special{pa -163 -786}\special{pa -160 -783}\special{pa -156 -781}\special{pa -152 -779}%
+\special{pa -149 -776}\special{pa -145 -774}\special{pa -141 -772}\special{pa -136 -769}%
+\special{pa -132 -767}%
+\special{fp}%
+\special{pa -151 -722}\special{pa -146 -719}\special{pa -140 -717}\special{pa -135 -715}%
+\special{pa -130 -713}\special{pa -124 -711}\special{pa -118 -709}\special{pa -112 -707}%
+\special{pa -106 -705}\special{pa -100 -704}\special{pa -94 -702}\special{pa -87 -701}%
+\special{pa -81 -699}\special{pa -75 -698}\special{pa -68 -697}\special{pa -61 -696}%
+\special{pa -55 -695}\special{pa -48 -694}\special{pa -41 -694}\special{pa -34 -693}%
+\special{pa -28 -693}\special{pa -21 -692}\special{pa -14 -692}\special{pa -7 -692}%
+\special{pa 0 -692}\special{pa 7 -692}\special{pa 14 -692}\special{pa 21 -692}%
+\special{pa 28 -693}\special{pa 35 -693}\special{pa 41 -694}\special{pa 48 -694}%
+\special{pa 55 -695}\special{pa 62 -696}\special{pa 68 -697}\special{pa 75 -698}%
+\special{pa 81 -699}\special{pa 88 -701}\special{pa 94 -702}\special{pa 100 -704}%
+\special{pa 106 -705}\special{pa 112 -707}\special{pa 118 -709}\special{pa 124 -711}%
+\special{pa 130 -713}\special{pa 135 -715}\special{pa 141 -717}\special{pa 146 -719}%
+\special{pa 151 -722}\special{pa 156 -724}\special{pa 161 -726}\special{pa 165 -729}%
+\special{pa 170 -732}\special{pa 174 -734}\special{pa 178 -737}\special{pa 182 -740}%
+\special{pa 186 -743}\special{pa 190 -746}\special{pa 193 -749}\special{pa 196 -752}%
+\special{pa 200 -755}\special{pa 202 -758}\special{pa 205 -761}\special{pa 207 -765}%
+\special{pa 210 -768}\special{pa 212 -771}\special{pa 214 -775}\special{pa 215 -778}%
+\special{pa 217 -781}\special{pa 218 -785}\special{pa 219 -788}\special{pa 220 -792}%
+\special{pa 220 -795}\special{pa 220 -799}\special{pa 220 -802}\special{pa 220 -805}%
+\special{pa 220 -809}\special{pa 219 -812}\special{pa 219 -816}\special{pa 218 -819}%
+\special{pa 217 -823}\special{pa 215 -826}\special{pa 214 -829}\special{pa 212 -833}%
+\special{pa 210 -836}\special{pa 207 -839}\special{pa 205 -843}\special{pa 202 -846}%
+\special{pa 199 -849}\special{pa 196 -852}\special{pa 193 -855}\special{pa 190 -858}%
+\special{pa 186 -861}\special{pa 182 -864}\special{pa 178 -867}\special{pa 174 -870}%
+\special{pa 170 -872}\special{pa 165 -875}\special{pa 161 -877}\special{pa 156 -880}%
+\special{pa 151 -882}\special{pa 146 -885}\special{pa 140 -887}\special{pa 135 -889}%
+\special{pa 130 -891}\special{pa 124 -893}\special{pa 118 -895}\special{pa 112 -897}%
+\special{pa 106 -899}\special{pa 100 -900}\special{pa 94 -902}\special{pa 87 -903}%
+\special{pa 81 -904}\special{pa 75 -906}\special{pa 68 -907}\special{pa 61 -908}%
+\special{pa 55 -909}\special{pa 48 -910}\special{pa 41 -910}\special{pa 34 -911}%
+\special{pa 28 -911}\special{pa 21 -912}\special{pa 14 -912}\special{pa 7 -912}%
+\special{pa -0 -912}\special{pa -7 -912}\special{pa -14 -912}\special{pa -21 -912}%
+\special{pa -28 -911}\special{pa -35 -911}\special{pa -41 -910}\special{pa -48 -909}%
+\special{pa -55 -909}\special{pa -62 -908}\special{pa -68 -907}\special{pa -75 -906}%
+\special{pa -81 -904}\special{pa -88 -903}\special{pa -94 -902}\special{pa -100 -900}%
+\special{pa -106 -899}\special{pa -112 -897}\special{pa -118 -895}\special{pa -124 -893}%
+\special{pa -130 -891}\special{pa -135 -889}\special{pa -141 -887}\special{pa -146 -885}%
+\special{pa -151 -882}\special{pa -156 -880}\special{pa -161 -877}\special{pa -165 -875}%
+\special{pa -170 -872}\special{pa -174 -869}\special{pa -178 -867}\special{pa -182 -864}%
+\special{pa -186 -861}\special{pa -190 -858}\special{pa -193 -855}\special{pa -196 -852}%
+\special{pa -200 -849}\special{pa -202 -846}\special{pa -205 -842}\special{pa -207 -839}%
+\special{pa -210 -836}\special{pa -212 -833}\special{pa -214 -829}\special{pa -215 -826}%
+\special{pa -217 -823}\special{pa -218 -819}\special{pa -219 -816}\special{pa -220 -812}%
+\special{pa -220 -809}\special{pa -220 -805}\special{pa -220 -802}\special{pa -220 -798}%
+\special{pa -220 -795}\special{pa -219 -792}\special{pa -219 -788}\special{pa -218 -785}%
+\special{pa -217 -781}\special{pa -215 -778}\special{pa -214 -774}\special{pa -212 -771}%
+\special{pa -210 -768}\special{pa -207 -765}\special{pa -205 -761}\special{pa -202 -758}%
+\special{pa -199 -755}\special{pa -196 -752}\special{pa -193 -749}\special{pa -190 -746}%
+\special{pa -186 -743}\special{pa -182 -740}\special{pa -178 -737}\special{pa -174 -734}%
+\special{pa -170 -732}\special{pa -165 -729}\special{pa -161 -726}\special{pa -156 -724}%
+\special{pa -151 -722}%
+\special{fp}%
+\special{pa -170 -671}\special{pa -164 -668}\special{pa -158 -666}\special{pa -152 -663}%
+\special{pa -146 -661}\special{pa -139 -659}\special{pa -133 -657}\special{pa -126 -655}%
+\special{pa -119 -653}\special{pa -113 -651}\special{pa -106 -649}\special{pa -98 -648}%
+\special{pa -91 -646}\special{pa -84 -645}\special{pa -77 -643}\special{pa -69 -642}%
+\special{pa -62 -641}\special{pa -54 -640}\special{pa -46 -640}\special{pa -39 -639}%
+\special{pa -31 -638}\special{pa -23 -638}\special{pa -15 -638}\special{pa -8 -637}%
+\special{pa 0 -637}\special{pa 8 -637}\special{pa 16 -638}\special{pa 23 -638}%
+\special{pa 31 -638}\special{pa 39 -639}\special{pa 47 -640}\special{pa 54 -640}%
+\special{pa 62 -641}\special{pa 69 -642}\special{pa 77 -643}\special{pa 84 -645}%
+\special{pa 91 -646}\special{pa 99 -648}\special{pa 106 -649}\special{pa 113 -651}%
+\special{pa 120 -653}\special{pa 126 -655}\special{pa 133 -657}\special{pa 139 -659}%
+\special{pa 146 -661}\special{pa 152 -663}\special{pa 158 -666}\special{pa 164 -668}%
+\special{pa 170 -671}\special{pa 175 -674}\special{pa 181 -676}\special{pa 186 -679}%
+\special{pa 191 -682}\special{pa 196 -685}\special{pa 201 -688}\special{pa 205 -692}%
+\special{pa 209 -695}\special{pa 214 -698}\special{pa 217 -702}\special{pa 221 -705}%
+\special{pa 224 -709}\special{pa 228 -712}\special{pa 231 -716}\special{pa 233 -719}%
+\special{pa 236 -723}\special{pa 238 -727}\special{pa 240 -731}\special{pa 242 -734}%
+\special{pa 244 -738}\special{pa 245 -742}\special{pa 246 -746}\special{pa 247 -750}%
+\special{pa 248 -754}\special{pa 248 -758}\special{pa 248 -761}\special{pa 248 -765}%
+\special{pa 248 -769}\special{pa 247 -773}\special{pa 246 -777}\special{pa 245 -781}%
+\special{pa 244 -785}\special{pa 242 -788}\special{pa 240 -792}\special{pa 238 -796}%
+\special{pa 236 -800}\special{pa 233 -803}\special{pa 231 -807}\special{pa 228 -811}%
+\special{pa 224 -814}\special{pa 221 -818}\special{pa 217 -821}\special{pa 213 -825}%
+\special{pa 209 -828}\special{pa 205 -831}\special{pa 201 -834}\special{pa 196 -837}%
+\special{pa 191 -840}\special{pa 186 -843}\special{pa 181 -846}\special{pa 175 -849}%
+\special{pa 170 -852}\special{pa 164 -854}\special{pa 158 -857}\special{pa 152 -859}%
+\special{pa 146 -862}\special{pa 139 -864}\special{pa 133 -866}\special{pa 126 -868}%
+\special{pa 119 -870}\special{pa 113 -872}\special{pa 106 -874}\special{pa 98 -875}%
+\special{pa 91 -877}\special{pa 84 -878}\special{pa 77 -879}\special{pa 69 -880}%
+\special{pa 62 -881}\special{pa 54 -882}\special{pa 46 -883}\special{pa 39 -884}%
+\special{pa 31 -884}\special{pa 23 -885}\special{pa 15 -885}\special{pa 8 -885}%
+\special{pa -0 -885}\special{pa -8 -885}\special{pa -16 -885}\special{pa -23 -885}%
+\special{pa -31 -884}\special{pa -39 -884}\special{pa -47 -883}\special{pa -54 -882}%
+\special{pa -62 -881}\special{pa -69 -880}\special{pa -77 -879}\special{pa -84 -878}%
+\special{pa -91 -877}\special{pa -99 -875}\special{pa -106 -874}\special{pa -113 -872}%
+\special{pa -120 -870}\special{pa -126 -868}\special{pa -133 -866}\special{pa -139 -864}%
+\special{pa -146 -862}\special{pa -152 -859}\special{pa -158 -857}\special{pa -164 -854}%
+\special{pa -170 -852}\special{pa -175 -849}\special{pa -181 -846}\special{pa -186 -843}%
+\special{pa -191 -840}\special{pa -196 -837}\special{pa -201 -834}\special{pa -205 -831}%
+\special{pa -209 -828}\special{pa -214 -824}\special{pa -217 -821}\special{pa -221 -818}%
+\special{pa -224 -814}\special{pa -228 -811}\special{pa -231 -807}\special{pa -233 -803}%
+\special{pa -236 -800}\special{pa -238 -796}\special{pa -240 -792}\special{pa -242 -788}%
+\special{pa -244 -785}\special{pa -245 -781}\special{pa -246 -777}\special{pa -247 -773}%
+\special{pa -248 -769}\special{pa -248 -765}\special{pa -248 -761}\special{pa -248 -757}%
+\special{pa -248 -754}\special{pa -247 -750}\special{pa -246 -746}\special{pa -245 -742}%
+\special{pa -244 -738}\special{pa -242 -734}\special{pa -240 -730}\special{pa -238 -727}%
+\special{pa -236 -723}\special{pa -233 -719}\special{pa -231 -716}\special{pa -228 -712}%
+\special{pa -224 -709}\special{pa -221 -705}\special{pa -217 -702}\special{pa -213 -698}%
+\special{pa -209 -695}\special{pa -205 -692}\special{pa -201 -688}\special{pa -196 -685}%
+\special{pa -191 -682}\special{pa -186 -679}\special{pa -181 -676}\special{pa -175 -674}%
+\special{pa -170 -671}%
+\special{fp}%
+\special{pa -189 -616}\special{pa -182 -613}\special{pa -176 -610}\special{pa -169 -607}%
+\special{pa -162 -604}\special{pa -155 -602}\special{pa -148 -600}\special{pa -140 -597}%
+\special{pa -133 -595}\special{pa -125 -593}\special{pa -117 -591}\special{pa -109 -590}%
+\special{pa -101 -588}\special{pa -93 -586}\special{pa -85 -585}\special{pa -77 -584}%
+\special{pa -68 -583}\special{pa -60 -582}\special{pa -52 -581}\special{pa -43 -580}%
+\special{pa -34 -579}\special{pa -26 -579}\special{pa -17 -578}\special{pa -9 -578}%
+\special{pa 0 -578}\special{pa 9 -578}\special{pa 17 -578}\special{pa 26 -579}%
+\special{pa 35 -579}\special{pa 43 -580}\special{pa 52 -581}\special{pa 60 -582}%
+\special{pa 69 -583}\special{pa 77 -584}\special{pa 85 -585}\special{pa 93 -586}%
+\special{pa 102 -588}\special{pa 110 -590}\special{pa 117 -591}\special{pa 125 -593}%
+\special{pa 133 -595}\special{pa 140 -597}\special{pa 148 -600}\special{pa 155 -602}%
+\special{pa 162 -605}\special{pa 169 -607}\special{pa 176 -610}\special{pa 182 -613}%
+\special{pa 189 -616}\special{pa 195 -619}\special{pa 201 -622}\special{pa 207 -625}%
+\special{pa 212 -628}\special{pa 218 -632}\special{pa 223 -635}\special{pa 228 -639}%
+\special{pa 233 -642}\special{pa 237 -646}\special{pa 242 -650}\special{pa 246 -653}%
+\special{pa 249 -657}\special{pa 253 -661}\special{pa 256 -665}\special{pa 259 -669}%
+\special{pa 262 -673}\special{pa 265 -678}\special{pa 267 -682}\special{pa 269 -686}%
+\special{pa 271 -690}\special{pa 272 -694}\special{pa 273 -699}\special{pa 274 -703}%
+\special{pa 275 -707}\special{pa 275 -712}\special{pa 276 -716}\special{pa 275 -720}%
+\special{pa 275 -725}\special{pa 274 -729}\special{pa 273 -733}\special{pa 272 -738}%
+\special{pa 271 -742}\special{pa 269 -746}\special{pa 267 -750}\special{pa 265 -754}%
+\special{pa 262 -759}\special{pa 259 -763}\special{pa 256 -767}\special{pa 253 -771}%
+\special{pa 249 -775}\special{pa 246 -779}\special{pa 241 -782}\special{pa 237 -786}%
+\special{pa 233 -790}\special{pa 228 -793}\special{pa 223 -797}\special{pa 218 -801}%
+\special{pa 212 -804}\special{pa 207 -807}\special{pa 201 -810}\special{pa 195 -813}%
+\special{pa 189 -816}\special{pa 182 -819}\special{pa 176 -822}\special{pa 169 -825}%
+\special{pa 162 -828}\special{pa 155 -830}\special{pa 148 -832}\special{pa 140 -835}%
+\special{pa 133 -837}\special{pa 125 -839}\special{pa 117 -841}\special{pa 109 -842}%
+\special{pa 101 -844}\special{pa 93 -846}\special{pa 85 -847}\special{pa 77 -848}%
+\special{pa 68 -849}\special{pa 60 -850}\special{pa 52 -851}\special{pa 43 -852}%
+\special{pa 34 -853}\special{pa 26 -853}\special{pa 17 -854}\special{pa 9 -854}%
+\special{pa -0 -854}\special{pa -9 -854}\special{pa -17 -854}\special{pa -26 -853}%
+\special{pa -35 -853}\special{pa -43 -852}\special{pa -52 -851}\special{pa -60 -850}%
+\special{pa -69 -849}\special{pa -77 -848}\special{pa -85 -847}\special{pa -93 -846}%
+\special{pa -102 -844}\special{pa -110 -842}\special{pa -117 -841}\special{pa -125 -839}%
+\special{pa -133 -837}\special{pa -140 -835}\special{pa -148 -832}\special{pa -155 -830}%
+\special{pa -162 -827}\special{pa -169 -825}\special{pa -176 -822}\special{pa -182 -819}%
+\special{pa -189 -816}\special{pa -195 -813}\special{pa -201 -810}\special{pa -207 -807}%
+\special{pa -212 -804}\special{pa -218 -800}\special{pa -223 -797}\special{pa -228 -793}%
+\special{pa -233 -790}\special{pa -237 -786}\special{pa -242 -782}\special{pa -246 -779}%
+\special{pa -249 -775}\special{pa -253 -771}\special{pa -256 -767}\special{pa -259 -763}%
+\special{pa -262 -759}\special{pa -265 -754}\special{pa -267 -750}\special{pa -269 -746}%
+\special{pa -271 -742}\special{pa -272 -738}\special{pa -273 -733}\special{pa -274 -729}%
+\special{pa -275 -725}\special{pa -275 -720}\special{pa -276 -716}\special{pa -275 -712}%
+\special{pa -275 -707}\special{pa -274 -703}\special{pa -273 -699}\special{pa -272 -694}%
+\special{pa -271 -690}\special{pa -269 -686}\special{pa -267 -682}\special{pa -265 -678}%
+\special{pa -262 -673}\special{pa -259 -669}\special{pa -256 -665}\special{pa -253 -661}%
+\special{pa -249 -657}\special{pa -246 -653}\special{pa -241 -650}\special{pa -237 -646}%
+\special{pa -233 -642}\special{pa -228 -639}\special{pa -223 -635}\special{pa -218 -632}%
+\special{pa -212 -628}\special{pa -207 -625}\special{pa -201 -622}\special{pa -195 -619}%
+\special{pa -189 -616}%
+\special{fp}%
+\special{pa -207 -555}\special{pa -200 -552}\special{pa -193 -549}\special{pa -186 -546}%
+\special{pa -178 -543}\special{pa -170 -540}\special{pa -162 -538}\special{pa -154 -535}%
+\special{pa -146 -533}\special{pa -138 -531}\special{pa -129 -529}\special{pa -120 -527}%
+\special{pa -111 -525}\special{pa -103 -523}\special{pa -94 -522}\special{pa -84 -520}%
+\special{pa -75 -519}\special{pa -66 -518}\special{pa -57 -517}\special{pa -47 -516}%
+\special{pa -38 -515}\special{pa -28 -515}\special{pa -19 -515}\special{pa -9 -514}%
+\special{pa 0 -514}\special{pa 10 -514}\special{pa 19 -515}\special{pa 29 -515}%
+\special{pa 38 -516}\special{pa 48 -516}\special{pa 57 -517}\special{pa 66 -518}%
+\special{pa 75 -519}\special{pa 85 -520}\special{pa 94 -522}\special{pa 103 -523}%
+\special{pa 112 -525}\special{pa 120 -527}\special{pa 129 -529}\special{pa 138 -531}%
+\special{pa 146 -533}\special{pa 154 -535}\special{pa 163 -538}\special{pa 170 -541}%
+\special{pa 178 -543}\special{pa 186 -546}\special{pa 193 -549}\special{pa 201 -552}%
+\special{pa 208 -555}\special{pa 214 -559}\special{pa 221 -562}\special{pa 227 -566}%
+\special{pa 234 -569}\special{pa 240 -573}\special{pa 245 -577}\special{pa 251 -581}%
+\special{pa 256 -585}\special{pa 261 -589}\special{pa 266 -593}\special{pa 270 -597}%
+\special{pa 274 -601}\special{pa 278 -606}\special{pa 282 -610}\special{pa 285 -615}%
+\special{pa 288 -619}\special{pa 291 -624}\special{pa 294 -628}\special{pa 296 -633}%
+\special{pa 298 -638}\special{pa 299 -642}\special{pa 301 -647}\special{pa 302 -652}%
+\special{pa 303 -656}\special{pa 303 -661}\special{pa 303 -666}\special{pa 303 -671}%
+\special{pa 303 -675}\special{pa 302 -680}\special{pa 301 -685}\special{pa 299 -690}%
+\special{pa 298 -694}\special{pa 296 -699}\special{pa 294 -704}\special{pa 291 -708}%
+\special{pa 288 -713}\special{pa 285 -717}\special{pa 282 -722}\special{pa 278 -726}%
+\special{pa 274 -730}\special{pa 270 -735}\special{pa 266 -739}\special{pa 261 -743}%
+\special{pa 256 -747}\special{pa 251 -751}\special{pa 245 -755}\special{pa 239 -759}%
+\special{pa 234 -763}\special{pa 227 -766}\special{pa 221 -770}\special{pa 214 -773}%
+\special{pa 207 -776}\special{pa 200 -780}\special{pa 193 -783}\special{pa 186 -786}%
+\special{pa 178 -789}\special{pa 170 -791}\special{pa 162 -794}\special{pa 154 -796}%
+\special{pa 146 -799}\special{pa 138 -801}\special{pa 129 -803}\special{pa 120 -805}%
+\special{pa 111 -807}\special{pa 103 -809}\special{pa 94 -810}\special{pa 84 -811}%
+\special{pa 75 -813}\special{pa 66 -814}\special{pa 57 -815}\special{pa 47 -816}%
+\special{pa 38 -816}\special{pa 28 -817}\special{pa 19 -817}\special{pa 9 -817}%
+\special{pa -0 -817}\special{pa -10 -817}\special{pa -19 -817}\special{pa -29 -817}%
+\special{pa -38 -816}\special{pa -48 -816}\special{pa -57 -815}\special{pa -66 -814}%
+\special{pa -75 -813}\special{pa -85 -811}\special{pa -94 -810}\special{pa -103 -808}%
+\special{pa -112 -807}\special{pa -120 -805}\special{pa -129 -803}\special{pa -138 -801}%
+\special{pa -146 -799}\special{pa -154 -796}\special{pa -163 -794}\special{pa -170 -791}%
+\special{pa -178 -788}\special{pa -186 -786}\special{pa -193 -783}\special{pa -201 -780}%
+\special{pa -208 -776}\special{pa -214 -773}\special{pa -221 -770}\special{pa -227 -766}%
+\special{pa -234 -762}\special{pa -240 -759}\special{pa -245 -755}\special{pa -251 -751}%
+\special{pa -256 -747}\special{pa -261 -743}\special{pa -266 -739}\special{pa -270 -735}%
+\special{pa -274 -730}\special{pa -278 -726}\special{pa -282 -722}\special{pa -285 -717}%
+\special{pa -288 -713}\special{pa -291 -708}\special{pa -294 -704}\special{pa -296 -699}%
+\special{pa -298 -694}\special{pa -299 -690}\special{pa -301 -685}\special{pa -302 -680}%
+\special{pa -303 -675}\special{pa -303 -671}\special{pa -303 -666}\special{pa -303 -661}%
+\special{pa -303 -656}\special{pa -302 -652}\special{pa -301 -647}\special{pa -299 -642}%
+\special{pa -298 -637}\special{pa -296 -633}\special{pa -294 -628}\special{pa -291 -624}%
+\special{pa -288 -619}\special{pa -285 -614}\special{pa -282 -610}\special{pa -278 -606}%
+\special{pa -274 -601}\special{pa -270 -597}\special{pa -266 -593}\special{pa -261 -589}%
+\special{pa -256 -585}\special{pa -251 -581}\special{pa -245 -577}\special{pa -239 -573}%
+\special{pa -234 -569}\special{pa -227 -566}\special{pa -221 -562}\special{pa -214 -559}%
+\special{pa -207 -555}%
+\special{fp}%
+\special{pa -226 -490}\special{pa -219 -487}\special{pa -211 -484}\special{pa -203 -480}%
+\special{pa -194 -477}\special{pa -186 -474}\special{pa -177 -471}\special{pa -168 -469}%
+\special{pa -159 -466}\special{pa -150 -464}\special{pa -141 -461}\special{pa -131 -459}%
+\special{pa -122 -457}\special{pa -112 -455}\special{pa -102 -454}\special{pa -92 -452}%
+\special{pa -82 -451}\special{pa -72 -450}\special{pa -62 -449}\special{pa -52 -448}%
+\special{pa -41 -447}\special{pa -31 -446}\special{pa -21 -446}\special{pa -10 -446}%
+\special{pa 0 -446}\special{pa 11 -446}\special{pa 21 -446}\special{pa 31 -446}%
+\special{pa 42 -447}\special{pa 52 -448}\special{pa 62 -449}\special{pa 72 -450}%
+\special{pa 82 -451}\special{pa 92 -452}\special{pa 102 -454}\special{pa 112 -455}%
+\special{pa 122 -457}\special{pa 131 -459}\special{pa 141 -461}\special{pa 150 -464}%
+\special{pa 159 -466}\special{pa 168 -469}\special{pa 177 -471}\special{pa 186 -474}%
+\special{pa 194 -477}\special{pa 203 -480}\special{pa 211 -484}\special{pa 219 -487}%
+\special{pa 226 -490}\special{pa 234 -494}\special{pa 241 -498}\special{pa 248 -502}%
+\special{pa 255 -506}\special{pa 261 -510}\special{pa 268 -514}\special{pa 274 -518}%
+\special{pa 279 -522}\special{pa 285 -527}\special{pa 290 -531}\special{pa 295 -536}%
+\special{pa 299 -541}\special{pa 304 -545}\special{pa 308 -550}\special{pa 311 -555}%
+\special{pa 315 -560}\special{pa 318 -565}\special{pa 320 -570}\special{pa 323 -575}%
+\special{pa 325 -580}\special{pa 327 -585}\special{pa 328 -590}\special{pa 329 -595}%
+\special{pa 330 -601}\special{pa 331 -606}\special{pa 331 -611}\special{pa 331 -616}%
+\special{pa 330 -621}\special{pa 329 -627}\special{pa 328 -632}\special{pa 327 -637}%
+\special{pa 325 -642}\special{pa 323 -647}\special{pa 320 -652}\special{pa 318 -657}%
+\special{pa 314 -662}\special{pa 311 -667}\special{pa 307 -672}\special{pa 303 -677}%
+\special{pa 299 -681}\special{pa 295 -686}\special{pa 290 -691}\special{pa 285 -695}%
+\special{pa 279 -700}\special{pa 273 -704}\special{pa 267 -708}\special{pa 261 -712}%
+\special{pa 255 -716}\special{pa 248 -720}\special{pa 241 -724}\special{pa 234 -728}%
+\special{pa 226 -732}\special{pa 219 -735}\special{pa 211 -738}\special{pa 203 -742}%
+\special{pa 194 -745}\special{pa 186 -748}\special{pa 177 -751}\special{pa 168 -753}%
+\special{pa 159 -756}\special{pa 150 -758}\special{pa 141 -761}\special{pa 131 -763}%
+\special{pa 122 -765}\special{pa 112 -767}\special{pa 102 -768}\special{pa 92 -770}%
+\special{pa 82 -771}\special{pa 72 -772}\special{pa 62 -773}\special{pa 52 -774}%
+\special{pa 41 -775}\special{pa 31 -776}\special{pa 21 -776}\special{pa 10 -776}%
+\special{pa -0 -776}\special{pa -11 -776}\special{pa -21 -776}\special{pa -31 -776}%
+\special{pa -42 -775}\special{pa -52 -774}\special{pa -62 -773}\special{pa -72 -772}%
+\special{pa -82 -771}\special{pa -92 -770}\special{pa -102 -768}\special{pa -112 -767}%
+\special{pa -122 -765}\special{pa -131 -763}\special{pa -141 -761}\special{pa -150 -758}%
+\special{pa -159 -756}\special{pa -168 -753}\special{pa -177 -751}\special{pa -186 -748}%
+\special{pa -194 -745}\special{pa -203 -742}\special{pa -211 -738}\special{pa -219 -735}%
+\special{pa -226 -731}\special{pa -234 -728}\special{pa -241 -724}\special{pa -248 -720}%
+\special{pa -255 -716}\special{pa -261 -712}\special{pa -268 -708}\special{pa -274 -704}%
+\special{pa -279 -700}\special{pa -285 -695}\special{pa -290 -691}\special{pa -295 -686}%
+\special{pa -299 -681}\special{pa -304 -677}\special{pa -308 -672}\special{pa -311 -667}%
+\special{pa -315 -662}\special{pa -318 -657}\special{pa -320 -652}\special{pa -323 -647}%
+\special{pa -325 -642}\special{pa -327 -637}\special{pa -328 -632}\special{pa -329 -626}%
+\special{pa -330 -621}\special{pa -331 -616}\special{pa -331 -611}\special{pa -331 -606}%
+\special{pa -330 -601}\special{pa -329 -595}\special{pa -328 -590}\special{pa -327 -585}%
+\special{pa -325 -580}\special{pa -323 -575}\special{pa -320 -570}\special{pa -318 -565}%
+\special{pa -314 -560}\special{pa -311 -555}\special{pa -307 -550}\special{pa -303 -545}%
+\special{pa -299 -541}\special{pa -295 -536}\special{pa -290 -531}\special{pa -285 -527}%
+\special{pa -279 -522}\special{pa -273 -518}\special{pa -267 -514}\special{pa -261 -510}%
+\special{pa -255 -506}\special{pa -248 -502}\special{pa -241 -498}\special{pa -234 -494}%
+\special{pa -226 -490}%
+\special{fp}%
+\special{pa -245 -421}\special{pa -237 -417}\special{pa -228 -413}\special{pa -219 -410}%
+\special{pa -210 -406}\special{pa -201 -403}\special{pa -192 -400}\special{pa -182 -397}%
+\special{pa -172 -394}\special{pa -163 -392}\special{pa -152 -389}\special{pa -142 -387}%
+\special{pa -132 -385}\special{pa -121 -383}\special{pa -111 -381}\special{pa -100 -379}%
+\special{pa -89 -378}\special{pa -78 -376}\special{pa -67 -375}\special{pa -56 -374}%
+\special{pa -45 -374}\special{pa -34 -373}\special{pa -22 -373}\special{pa -11 -372}%
+\special{pa 0 -372}\special{pa 11 -372}\special{pa 23 -373}\special{pa 34 -373}%
+\special{pa 45 -374}\special{pa 56 -374}\special{pa 67 -375}\special{pa 78 -377}%
+\special{pa 89 -378}\special{pa 100 -379}\special{pa 111 -381}\special{pa 121 -383}%
+\special{pa 132 -385}\special{pa 142 -387}\special{pa 153 -389}\special{pa 163 -392}%
+\special{pa 173 -394}\special{pa 182 -397}\special{pa 192 -400}\special{pa 201 -403}%
+\special{pa 211 -406}\special{pa 220 -410}\special{pa 228 -413}\special{pa 237 -417}%
+\special{pa 245 -421}\special{pa 253 -425}\special{pa 261 -429}\special{pa 269 -433}%
+\special{pa 276 -437}\special{pa 283 -442}\special{pa 290 -446}\special{pa 296 -451}%
+\special{pa 303 -455}\special{pa 308 -460}\special{pa 314 -465}\special{pa 319 -470}%
+\special{pa 324 -475}\special{pa 329 -480}\special{pa 333 -485}\special{pa 337 -491}%
+\special{pa 341 -496}\special{pa 344 -501}\special{pa 347 -507}\special{pa 350 -512}%
+\special{pa 352 -518}\special{pa 354 -523}\special{pa 355 -529}\special{pa 357 -535}%
+\special{pa 358 -540}\special{pa 358 -546}\special{pa 358 -551}\special{pa 358 -557}%
+\special{pa 358 -563}\special{pa 357 -568}\special{pa 355 -574}\special{pa 354 -579}%
+\special{pa 352 -585}\special{pa 350 -590}\special{pa 347 -596}\special{pa 344 -601}%
+\special{pa 341 -607}\special{pa 337 -612}\special{pa 333 -617}\special{pa 329 -623}%
+\special{pa 324 -628}\special{pa 319 -633}\special{pa 314 -638}\special{pa 308 -643}%
+\special{pa 302 -647}\special{pa 296 -652}\special{pa 290 -657}\special{pa 283 -661}%
+\special{pa 276 -666}\special{pa 269 -670}\special{pa 261 -674}\special{pa 253 -678}%
+\special{pa 245 -682}\special{pa 237 -686}\special{pa 228 -689}\special{pa 219 -693}%
+\special{pa 210 -696}\special{pa 201 -700}\special{pa 192 -703}\special{pa 182 -706}%
+\special{pa 172 -708}\special{pa 163 -711}\special{pa 152 -713}\special{pa 142 -716}%
+\special{pa 132 -718}\special{pa 121 -720}\special{pa 111 -722}\special{pa 100 -723}%
+\special{pa 89 -725}\special{pa 78 -726}\special{pa 67 -727}\special{pa 56 -728}%
+\special{pa 45 -729}\special{pa 34 -730}\special{pa 22 -730}\special{pa 11 -730}%
+\special{pa -0 -730}\special{pa -11 -730}\special{pa -23 -730}\special{pa -34 -730}%
+\special{pa -45 -729}\special{pa -56 -728}\special{pa -67 -727}\special{pa -78 -726}%
+\special{pa -89 -725}\special{pa -100 -723}\special{pa -111 -722}\special{pa -121 -720}%
+\special{pa -132 -718}\special{pa -142 -716}\special{pa -153 -713}\special{pa -163 -711}%
+\special{pa -173 -708}\special{pa -182 -705}\special{pa -192 -703}\special{pa -201 -699}%
+\special{pa -211 -696}\special{pa -220 -693}\special{pa -228 -689}\special{pa -237 -686}%
+\special{pa -245 -682}\special{pa -253 -678}\special{pa -261 -674}\special{pa -269 -670}%
+\special{pa -276 -665}\special{pa -283 -661}\special{pa -290 -657}\special{pa -296 -652}%
+\special{pa -303 -647}\special{pa -308 -642}\special{pa -314 -638}\special{pa -319 -633}%
+\special{pa -324 -628}\special{pa -329 -622}\special{pa -333 -617}\special{pa -337 -612}%
+\special{pa -341 -607}\special{pa -344 -601}\special{pa -347 -596}\special{pa -350 -590}%
+\special{pa -352 -585}\special{pa -354 -579}\special{pa -355 -574}\special{pa -357 -568}%
+\special{pa -358 -563}\special{pa -358 -557}\special{pa -358 -551}\special{pa -358 -546}%
+\special{pa -358 -540}\special{pa -357 -534}\special{pa -355 -529}\special{pa -354 -523}%
+\special{pa -352 -518}\special{pa -350 -512}\special{pa -347 -507}\special{pa -344 -501}%
+\special{pa -341 -496}\special{pa -337 -491}\special{pa -333 -485}\special{pa -329 -480}%
+\special{pa -324 -475}\special{pa -319 -470}\special{pa -314 -465}\special{pa -308 -460}%
+\special{pa -302 -455}\special{pa -296 -451}\special{pa -290 -446}\special{pa -283 -441}%
+\special{pa -276 -437}\special{pa -269 -433}\special{pa -261 -429}\special{pa -253 -425}%
+\special{pa -245 -421}%
+\special{fp}%
+\special{pa -264 -346}\special{pa -255 -342}\special{pa -246 -338}\special{pa -236 -334}%
+\special{pa -227 -331}\special{pa -217 -327}\special{pa -207 -324}\special{pa -196 -321}%
+\special{pa -186 -318}\special{pa -175 -315}\special{pa -164 -312}\special{pa -153 -310}%
+\special{pa -142 -307}\special{pa -131 -305}\special{pa -119 -303}\special{pa -108 -302}%
+\special{pa -96 -300}\special{pa -84 -299}\special{pa -72 -297}\special{pa -60 -296}%
+\special{pa -48 -295}\special{pa -36 -295}\special{pa -24 -294}\special{pa -12 -294}%
+\special{pa 0 -294}\special{pa 12 -294}\special{pa 24 -294}\special{pa 36 -295}%
+\special{pa 48 -296}\special{pa 60 -296}\special{pa 72 -297}\special{pa 84 -299}%
+\special{pa 96 -300}\special{pa 108 -302}\special{pa 119 -303}\special{pa 131 -305}%
+\special{pa 142 -308}\special{pa 153 -310}\special{pa 164 -312}\special{pa 175 -315}%
+\special{pa 186 -318}\special{pa 197 -321}\special{pa 207 -324}\special{pa 217 -327}%
+\special{pa 227 -331}\special{pa 237 -334}\special{pa 246 -338}\special{pa 255 -342}%
+\special{pa 264 -346}\special{pa 273 -351}\special{pa 281 -355}\special{pa 290 -359}%
+\special{pa 297 -364}\special{pa 305 -369}\special{pa 312 -374}\special{pa 319 -379}%
+\special{pa 326 -384}\special{pa 332 -389}\special{pa 338 -394}\special{pa 344 -399}%
+\special{pa 349 -405}\special{pa 354 -410}\special{pa 359 -416}\special{pa 363 -422}%
+\special{pa 367 -427}\special{pa 371 -433}\special{pa 374 -439}\special{pa 377 -445}%
+\special{pa 379 -451}\special{pa 381 -457}\special{pa 383 -463}\special{pa 384 -469}%
+\special{pa 385 -475}\special{pa 386 -481}\special{pa 386 -487}\special{pa 386 -493}%
+\special{pa 385 -499}\special{pa 384 -505}\special{pa 383 -511}\special{pa 381 -517}%
+\special{pa 379 -523}\special{pa 377 -529}\special{pa 374 -535}\special{pa 370 -541}%
+\special{pa 367 -547}\special{pa 363 -552}\special{pa 359 -558}\special{pa 354 -564}%
+\special{pa 349 -569}\special{pa 344 -575}\special{pa 338 -580}\special{pa 332 -585}%
+\special{pa 326 -590}\special{pa 319 -595}\special{pa 312 -600}\special{pa 305 -605}%
+\special{pa 297 -610}\special{pa 289 -615}\special{pa 281 -619}\special{pa 273 -623}%
+\special{pa 264 -628}\special{pa 255 -632}\special{pa 246 -636}\special{pa 236 -639}%
+\special{pa 227 -643}\special{pa 217 -646}\special{pa 207 -650}\special{pa 196 -653}%
+\special{pa 186 -656}\special{pa 175 -659}\special{pa 164 -661}\special{pa 153 -664}%
+\special{pa 142 -666}\special{pa 131 -668}\special{pa 119 -670}\special{pa 108 -672}%
+\special{pa 96 -674}\special{pa 84 -675}\special{pa 72 -676}\special{pa 60 -677}%
+\special{pa 48 -678}\special{pa 36 -679}\special{pa 24 -679}\special{pa 12 -680}%
+\special{pa -0 -680}\special{pa -12 -680}\special{pa -24 -679}\special{pa -36 -679}%
+\special{pa -48 -678}\special{pa -60 -677}\special{pa -72 -676}\special{pa -84 -675}%
+\special{pa -96 -674}\special{pa -108 -672}\special{pa -119 -670}\special{pa -131 -668}%
+\special{pa -142 -666}\special{pa -153 -664}\special{pa -164 -661}\special{pa -175 -659}%
+\special{pa -186 -656}\special{pa -197 -653}\special{pa -207 -650}\special{pa -217 -646}%
+\special{pa -227 -643}\special{pa -237 -639}\special{pa -246 -635}\special{pa -255 -632}%
+\special{pa -264 -627}\special{pa -273 -623}\special{pa -281 -619}\special{pa -290 -614}%
+\special{pa -297 -610}\special{pa -305 -605}\special{pa -312 -600}\special{pa -319 -595}%
+\special{pa -326 -590}\special{pa -332 -585}\special{pa -338 -580}\special{pa -344 -574}%
+\special{pa -349 -569}\special{pa -354 -563}\special{pa -359 -558}\special{pa -363 -552}%
+\special{pa -367 -546}\special{pa -371 -541}\special{pa -374 -535}\special{pa -377 -529}%
+\special{pa -379 -523}\special{pa -381 -517}\special{pa -383 -511}\special{pa -384 -505}%
+\special{pa -385 -499}\special{pa -386 -493}\special{pa -386 -487}\special{pa -386 -481}%
+\special{pa -385 -475}\special{pa -384 -469}\special{pa -383 -463}\special{pa -381 -457}%
+\special{pa -379 -451}\special{pa -377 -445}\special{pa -374 -439}\special{pa -370 -433}%
+\special{pa -367 -427}\special{pa -363 -421}\special{pa -359 -416}\special{pa -354 -410}%
+\special{pa -349 -405}\special{pa -344 -399}\special{pa -338 -394}\special{pa -332 -389}%
+\special{pa -326 -383}\special{pa -319 -378}\special{pa -312 -373}\special{pa -305 -369}%
+\special{pa -297 -364}\special{pa -289 -359}\special{pa -281 -355}\special{pa -273 -350}%
+\special{pa -264 -346}%
+\special{fp}%
+\special{pa -283 -267}\special{pa -273 -263}\special{pa -263 -258}\special{pa -253 -254}%
+\special{pa -243 -250}\special{pa -232 -247}\special{pa -221 -243}\special{pa -210 -240}%
+\special{pa -199 -237}\special{pa -188 -233}\special{pa -176 -231}\special{pa -164 -228}%
+\special{pa -152 -225}\special{pa -140 -223}\special{pa -128 -221}\special{pa -115 -219}%
+\special{pa -103 -217}\special{pa -90 -216}\special{pa -77 -215}\special{pa -65 -214}%
+\special{pa -52 -213}\special{pa -39 -212}\special{pa -26 -211}\special{pa -13 -211}%
+\special{pa 0 -211}\special{pa 13 -211}\special{pa 26 -211}\special{pa 39 -212}%
+\special{pa 52 -213}\special{pa 65 -214}\special{pa 78 -215}\special{pa 90 -216}%
+\special{pa 103 -217}\special{pa 115 -219}\special{pa 128 -221}\special{pa 140 -223}%
+\special{pa 152 -226}\special{pa 164 -228}\special{pa 176 -231}\special{pa 188 -234}%
+\special{pa 199 -237}\special{pa 211 -240}\special{pa 222 -243}\special{pa 232 -247}%
+\special{pa 243 -250}\special{pa 253 -254}\special{pa 264 -258}\special{pa 273 -263}%
+\special{pa 283 -267}\special{pa 292 -272}\special{pa 301 -276}\special{pa 310 -281}%
+\special{pa 319 -286}\special{pa 327 -291}\special{pa 335 -296}\special{pa 342 -302}%
+\special{pa 349 -307}\special{pa 356 -313}\special{pa 362 -318}\special{pa 368 -324}%
+\special{pa 374 -330}\special{pa 379 -336}\special{pa 384 -342}\special{pa 389 -348}%
+\special{pa 393 -354}\special{pa 397 -360}\special{pa 400 -366}\special{pa 403 -373}%
+\special{pa 406 -379}\special{pa 408 -385}\special{pa 410 -392}\special{pa 412 -398}%
+\special{pa 413 -405}\special{pa 413 -411}\special{pa 413 -418}\special{pa 413 -424}%
+\special{pa 413 -431}\special{pa 412 -437}\special{pa 410 -444}\special{pa 408 -450}%
+\special{pa 406 -456}\special{pa 403 -463}\special{pa 400 -469}\special{pa 397 -475}%
+\special{pa 393 -482}\special{pa 389 -488}\special{pa 384 -494}\special{pa 379 -500}%
+\special{pa 374 -506}\special{pa 368 -512}\special{pa 362 -517}\special{pa 356 -523}%
+\special{pa 349 -528}\special{pa 342 -534}\special{pa 334 -539}\special{pa 327 -544}%
+\special{pa 318 -549}\special{pa 310 -554}\special{pa 301 -559}\special{pa 292 -564}%
+\special{pa 283 -568}\special{pa 273 -573}\special{pa 263 -577}\special{pa 253 -581}%
+\special{pa 243 -585}\special{pa 232 -589}\special{pa 221 -592}\special{pa 210 -596}%
+\special{pa 199 -599}\special{pa 188 -602}\special{pa 176 -605}\special{pa 164 -607}%
+\special{pa 152 -610}\special{pa 140 -612}\special{pa 128 -614}\special{pa 115 -616}%
+\special{pa 103 -618}\special{pa 90 -619}\special{pa 77 -621}\special{pa 65 -622}%
+\special{pa 52 -623}\special{pa 39 -623}\special{pa 26 -624}\special{pa 13 -624}%
+\special{pa -0 -624}\special{pa -13 -624}\special{pa -26 -624}\special{pa -39 -623}%
+\special{pa -52 -623}\special{pa -65 -622}\special{pa -78 -621}\special{pa -90 -619}%
+\special{pa -103 -618}\special{pa -115 -616}\special{pa -128 -614}\special{pa -140 -612}%
+\special{pa -152 -610}\special{pa -164 -607}\special{pa -176 -605}\special{pa -188 -602}%
+\special{pa -199 -599}\special{pa -211 -596}\special{pa -222 -592}\special{pa -232 -589}%
+\special{pa -243 -585}\special{pa -253 -581}\special{pa -264 -577}\special{pa -273 -573}%
+\special{pa -283 -568}\special{pa -292 -564}\special{pa -301 -559}\special{pa -310 -554}%
+\special{pa -319 -549}\special{pa -327 -544}\special{pa -335 -539}\special{pa -342 -534}%
+\special{pa -349 -528}\special{pa -356 -523}\special{pa -362 -517}\special{pa -368 -511}%
+\special{pa -374 -506}\special{pa -379 -500}\special{pa -384 -494}\special{pa -389 -488}%
+\special{pa -393 -481}\special{pa -397 -475}\special{pa -400 -469}\special{pa -403 -463}%
+\special{pa -406 -456}\special{pa -408 -450}\special{pa -410 -444}\special{pa -412 -437}%
+\special{pa -413 -431}\special{pa -413 -424}\special{pa -413 -418}\special{pa -413 -411}%
+\special{pa -413 -405}\special{pa -412 -398}\special{pa -410 -392}\special{pa -408 -385}%
+\special{pa -406 -379}\special{pa -403 -373}\special{pa -400 -366}\special{pa -397 -360}%
+\special{pa -393 -354}\special{pa -389 -348}\special{pa -384 -342}\special{pa -379 -336}%
+\special{pa -374 -330}\special{pa -368 -324}\special{pa -362 -318}\special{pa -356 -312}%
+\special{pa -349 -307}\special{pa -342 -301}\special{pa -334 -296}\special{pa -327 -291}%
+\special{pa -318 -286}\special{pa -310 -281}\special{pa -301 -276}\special{pa -292 -271}%
+\special{pa -283 -267}%
+\special{fp}%
+\special{pa -302 -183}\special{pa -291 -178}\special{pa -281 -174}\special{pa -270 -169}%
+\special{pa -259 -165}\special{pa -248 -161}\special{pa -236 -157}\special{pa -224 -154}%
+\special{pa -212 -150}\special{pa -200 -147}\special{pa -188 -144}\special{pa -175 -141}%
+\special{pa -162 -139}\special{pa -149 -136}\special{pa -136 -134}\special{pa -123 -132}%
+\special{pa -110 -130}\special{pa -96 -129}\special{pa -82 -127}\special{pa -69 -126}%
+\special{pa -55 -125}\special{pa -41 -124}\special{pa -28 -124}\special{pa -14 -123}%
+\special{pa 0 -123}\special{pa 14 -123}\special{pa 28 -124}\special{pa 42 -124}%
+\special{pa 55 -125}\special{pa 69 -126}\special{pa 83 -127}\special{pa 96 -129}%
+\special{pa 110 -130}\special{pa 123 -132}\special{pa 136 -134}\special{pa 150 -136}%
+\special{pa 162 -139}\special{pa 175 -141}\special{pa 188 -144}\special{pa 200 -147}%
+\special{pa 213 -151}\special{pa 225 -154}\special{pa 236 -158}\special{pa 248 -161}%
+\special{pa 259 -165}\special{pa 270 -170}\special{pa 281 -174}\special{pa 292 -178}%
+\special{pa 302 -183}\special{pa 312 -188}\special{pa 322 -193}\special{pa 331 -198}%
+\special{pa 340 -203}\special{pa 349 -209}\special{pa 357 -214}\special{pa 365 -220}%
+\special{pa 372 -226}\special{pa 380 -232}\special{pa 386 -238}\special{pa 393 -244}%
+\special{pa 399 -250}\special{pa 405 -256}\special{pa 410 -263}\special{pa 415 -269}%
+\special{pa 419 -276}\special{pa 423 -282}\special{pa 427 -289}\special{pa 430 -296}%
+\special{pa 433 -302}\special{pa 436 -309}\special{pa 437 -316}\special{pa 439 -323}%
+\special{pa 440 -330}\special{pa 441 -337}\special{pa 441 -344}\special{pa 441 -351}%
+\special{pa 440 -358}\special{pa 439 -365}\special{pa 437 -371}\special{pa 435 -378}%
+\special{pa 433 -385}\special{pa 430 -392}\special{pa 427 -399}\special{pa 423 -405}%
+\special{pa 419 -412}\special{pa 415 -418}\special{pa 410 -425}\special{pa 405 -431}%
+\special{pa 399 -438}\special{pa 393 -444}\special{pa 386 -450}\special{pa 379 -456}%
+\special{pa 372 -462}\special{pa 365 -468}\special{pa 357 -473}\special{pa 348 -479}%
+\special{pa 340 -484}\special{pa 331 -490}\special{pa 321 -495}\special{pa 312 -500}%
+\special{pa 302 -504}\special{pa 291 -509}\special{pa 281 -514}\special{pa 270 -518}%
+\special{pa 259 -522}\special{pa 248 -526}\special{pa 236 -530}\special{pa 224 -533}%
+\special{pa 212 -537}\special{pa 200 -540}\special{pa 188 -543}\special{pa 175 -546}%
+\special{pa 162 -549}\special{pa 149 -551}\special{pa 136 -553}\special{pa 123 -555}%
+\special{pa 110 -557}\special{pa 96 -559}\special{pa 82 -560}\special{pa 69 -561}%
+\special{pa 55 -562}\special{pa 41 -563}\special{pa 28 -564}\special{pa 14 -564}%
+\special{pa -0 -564}\special{pa -14 -564}\special{pa -28 -564}\special{pa -42 -563}%
+\special{pa -55 -562}\special{pa -69 -561}\special{pa -83 -560}\special{pa -96 -559}%
+\special{pa -110 -557}\special{pa -123 -555}\special{pa -136 -553}\special{pa -150 -551}%
+\special{pa -162 -549}\special{pa -175 -546}\special{pa -188 -543}\special{pa -200 -540}%
+\special{pa -213 -537}\special{pa -225 -533}\special{pa -236 -530}\special{pa -248 -526}%
+\special{pa -259 -522}\special{pa -270 -518}\special{pa -281 -514}\special{pa -292 -509}%
+\special{pa -302 -504}\special{pa -312 -500}\special{pa -322 -495}\special{pa -331 -489}%
+\special{pa -340 -484}\special{pa -349 -479}\special{pa -357 -473}\special{pa -365 -468}%
+\special{pa -372 -462}\special{pa -380 -456}\special{pa -386 -450}\special{pa -393 -444}%
+\special{pa -399 -437}\special{pa -405 -431}\special{pa -410 -425}\special{pa -415 -418}%
+\special{pa -419 -412}\special{pa -423 -405}\special{pa -427 -398}\special{pa -430 -392}%
+\special{pa -433 -385}\special{pa -436 -378}\special{pa -437 -371}\special{pa -439 -364}%
+\special{pa -440 -357}\special{pa -441 -351}\special{pa -441 -344}\special{pa -441 -337}%
+\special{pa -440 -330}\special{pa -439 -323}\special{pa -437 -316}\special{pa -435 -309}%
+\special{pa -433 -302}\special{pa -430 -296}\special{pa -427 -289}\special{pa -423 -282}%
+\special{pa -419 -275}\special{pa -415 -269}\special{pa -410 -262}\special{pa -405 -256}%
+\special{pa -399 -250}\special{pa -393 -244}\special{pa -386 -237}\special{pa -379 -231}%
+\special{pa -372 -225}\special{pa -365 -220}\special{pa -357 -214}\special{pa -348 -208}%
+\special{pa -340 -203}\special{pa -331 -198}\special{pa -321 -193}\special{pa -312 -188}%
+\special{pa -302 -183}%
+\special{fp}%
+\special{pa -321 -94}\special{pa -310 -89}\special{pa -299 -84}\special{pa -287 -80}%
+\special{pa -275 -75}\special{pa -263 -71}\special{pa -251 -67}\special{pa -238 -63}%
+\special{pa -226 -60}\special{pa -213 -56}\special{pa -199 -53}\special{pa -186 -50}%
+\special{pa -172 -47}\special{pa -159 -44}\special{pa -145 -42}\special{pa -131 -40}%
+\special{pa -116 -38}\special{pa -102 -36}\special{pa -88 -35}\special{pa -73 -34}%
+\special{pa -59 -33}\special{pa -44 -32}\special{pa -29 -31}\special{pa -15 -31}%
+\special{pa 0 -31}\special{pa 15 -31}\special{pa 30 -31}\special{pa 44 -32}%
+\special{pa 59 -33}\special{pa 73 -34}\special{pa 88 -35}\special{pa 102 -36}%
+\special{pa 117 -38}\special{pa 131 -40}\special{pa 145 -42}\special{pa 159 -45}%
+\special{pa 173 -47}\special{pa 186 -50}\special{pa 200 -53}\special{pa 213 -56}%
+\special{pa 226 -60}\special{pa 239 -63}\special{pa 251 -67}\special{pa 263 -71}%
+\special{pa 276 -75}\special{pa 287 -80}\special{pa 299 -84}\special{pa 310 -89}%
+\special{pa 321 -94}\special{pa 331 -99}\special{pa 342 -105}\special{pa 352 -110}%
+\special{pa 361 -116}\special{pa 370 -121}\special{pa 379 -127}\special{pa 388 -133}%
+\special{pa 396 -139}\special{pa 403 -146}\special{pa 411 -152}\special{pa 418 -159}%
+\special{pa 424 -165}\special{pa 430 -172}\special{pa 436 -179}\special{pa 441 -186}%
+\special{pa 446 -193}\special{pa 450 -200}\special{pa 454 -207}\special{pa 457 -214}%
+\special{pa 460 -221}\special{pa 463 -228}\special{pa 465 -236}\special{pa 466 -243}%
+\special{pa 468 -250}\special{pa 468 -258}\special{pa 469 -265}\special{pa 468 -272}%
+\special{pa 468 -280}\special{pa 466 -287}\special{pa 465 -294}\special{pa 463 -302}%
+\special{pa 460 -309}\special{pa 457 -316}\special{pa 454 -323}\special{pa 450 -330}%
+\special{pa 446 -337}\special{pa 441 -344}\special{pa 436 -351}\special{pa 430 -358}%
+\special{pa 424 -365}\special{pa 417 -371}\special{pa 410 -378}\special{pa 403 -384}%
+\special{pa 395 -391}\special{pa 387 -397}\special{pa 379 -403}\special{pa 370 -409}%
+\special{pa 361 -414}\special{pa 351 -420}\special{pa 341 -425}\special{pa 331 -431}%
+\special{pa 321 -436}\special{pa 310 -441}\special{pa 299 -445}\special{pa 287 -450}%
+\special{pa 275 -454}\special{pa 263 -459}\special{pa 251 -463}\special{pa 238 -467}%
+\special{pa 226 -470}\special{pa 213 -474}\special{pa 199 -477}\special{pa 186 -480}%
+\special{pa 172 -483}\special{pa 159 -485}\special{pa 145 -488}\special{pa 131 -490}%
+\special{pa 116 -492}\special{pa 102 -494}\special{pa 88 -495}\special{pa 73 -496}%
+\special{pa 59 -497}\special{pa 44 -498}\special{pa 29 -499}\special{pa 15 -499}%
+\special{pa -0 -499}\special{pa -15 -499}\special{pa -30 -499}\special{pa -44 -498}%
+\special{pa -59 -497}\special{pa -73 -496}\special{pa -88 -495}\special{pa -102 -494}%
+\special{pa -117 -492}\special{pa -131 -490}\special{pa -145 -488}\special{pa -159 -485}%
+\special{pa -173 -483}\special{pa -186 -480}\special{pa -200 -477}\special{pa -213 -474}%
+\special{pa -226 -470}\special{pa -239 -467}\special{pa -251 -463}\special{pa -263 -459}%
+\special{pa -276 -454}\special{pa -287 -450}\special{pa -299 -445}\special{pa -310 -441}%
+\special{pa -321 -436}\special{pa -331 -431}\special{pa -342 -425}\special{pa -352 -420}%
+\special{pa -361 -414}\special{pa -370 -408}\special{pa -379 -403}\special{pa -388 -397}%
+\special{pa -396 -390}\special{pa -403 -384}\special{pa -411 -378}\special{pa -418 -371}%
+\special{pa -424 -365}\special{pa -430 -358}\special{pa -436 -351}\special{pa -441 -344}%
+\special{pa -446 -337}\special{pa -450 -330}\special{pa -454 -323}\special{pa -457 -316}%
+\special{pa -460 -309}\special{pa -463 -301}\special{pa -465 -294}\special{pa -466 -287}%
+\special{pa -468 -280}\special{pa -468 -272}\special{pa -469 -265}\special{pa -468 -257}%
+\special{pa -468 -250}\special{pa -466 -243}\special{pa -465 -235}\special{pa -463 -228}%
+\special{pa -460 -221}\special{pa -457 -214}\special{pa -454 -207}\special{pa -450 -199}%
+\special{pa -446 -192}\special{pa -441 -185}\special{pa -436 -179}\special{pa -430 -172}%
+\special{pa -424 -165}\special{pa -417 -158}\special{pa -410 -152}\special{pa -403 -146}%
+\special{pa -395 -139}\special{pa -387 -133}\special{pa -379 -127}\special{pa -370 -121}%
+\special{pa -361 -116}\special{pa -351 -110}\special{pa -341 -105}\special{pa -331 -99}%
+\special{pa -321 -94}%
+\special{fp}%
+\special{pa -339 -1}\special{pa -328 5}\special{pa -316 10}\special{pa -304 15}%
+\special{pa -291 19}\special{pa -279 24}\special{pa -266 28}\special{pa -252 32}%
+\special{pa -239 36}\special{pa -225 40}\special{pa -211 43}\special{pa -197 46}%
+\special{pa -182 49}\special{pa -168 52}\special{pa -153 55}\special{pa -138 57}%
+\special{pa -123 59}\special{pa -108 61}\special{pa -93 62}\special{pa -77 64}%
+\special{pa -62 65}\special{pa -47 66}\special{pa -31 66}\special{pa -15 67}%
+\special{pa 0 67}\special{pa 16 67}\special{pa 31 66}\special{pa 47 66}%
+\special{pa 62 65}\special{pa 78 64}\special{pa 93 62}\special{pa 108 61}%
+\special{pa 124 59}\special{pa 139 57}\special{pa 153 54}\special{pa 168 52}%
+\special{pa 183 49}\special{pa 197 46}\special{pa 211 43}\special{pa 225 40}%
+\special{pa 239 36}\special{pa 253 32}\special{pa 266 28}\special{pa 279 24}%
+\special{pa 292 19}\special{pa 304 15}\special{pa 316 10}\special{pa 328 5}%
+\special{pa 340 -1}\special{pa 351 -6}\special{pa 362 -12}\special{pa 372 -17}%
+\special{pa 382 -23}\special{pa 392 -29}\special{pa 401 -36}\special{pa 410 -42}%
+\special{pa 419 -49}\special{pa 427 -55}\special{pa 435 -62}\special{pa 442 -69}%
+\special{pa 449 -76}\special{pa 455 -83}\special{pa 461 -90}\special{pa 467 -97}%
+\special{pa 472 -105}\special{pa 476 -112}\special{pa 481 -120}\special{pa 484 -127}%
+\special{pa 487 -135}\special{pa 490 -143}\special{pa 492 -150}\special{pa 494 -158}%
+\special{pa 495 -166}\special{pa 496 -174}\special{pa 496 -181}\special{pa 496 -189}%
+\special{pa 495 -197}\special{pa 494 -205}\special{pa 492 -213}\special{pa 490 -220}%
+\special{pa 487 -228}\special{pa 484 -236}\special{pa 480 -243}\special{pa 476 -251}%
+\special{pa 472 -258}\special{pa 467 -265}\special{pa 461 -273}\special{pa 455 -280}%
+\special{pa 449 -287}\special{pa 442 -294}\special{pa 435 -301}\special{pa 427 -308}%
+\special{pa 419 -314}\special{pa 410 -321}\special{pa 401 -327}\special{pa 392 -333}%
+\special{pa 382 -340}\special{pa 372 -345}\special{pa 361 -351}\special{pa 351 -357}%
+\special{pa 339 -362}\special{pa 328 -367}\special{pa 316 -373}\special{pa 304 -377}%
+\special{pa 291 -382}\special{pa 279 -387}\special{pa 266 -391}\special{pa 252 -395}%
+\special{pa 239 -399}\special{pa 225 -402}\special{pa 211 -406}\special{pa 197 -409}%
+\special{pa 182 -412}\special{pa 168 -415}\special{pa 153 -417}\special{pa 138 -420}%
+\special{pa 123 -422}\special{pa 108 -423}\special{pa 93 -425}\special{pa 77 -426}%
+\special{pa 62 -427}\special{pa 47 -428}\special{pa 31 -429}\special{pa 15 -429}%
+\special{pa -0 -429}\special{pa -16 -429}\special{pa -31 -429}\special{pa -47 -428}%
+\special{pa -62 -427}\special{pa -78 -426}\special{pa -93 -425}\special{pa -108 -423}%
+\special{pa -124 -422}\special{pa -139 -420}\special{pa -153 -417}\special{pa -168 -415}%
+\special{pa -183 -412}\special{pa -197 -409}\special{pa -211 -406}\special{pa -225 -402}%
+\special{pa -239 -399}\special{pa -253 -395}\special{pa -266 -391}\special{pa -279 -386}%
+\special{pa -292 -382}\special{pa -304 -377}\special{pa -316 -372}\special{pa -328 -367}%
+\special{pa -340 -362}\special{pa -351 -357}\special{pa -362 -351}\special{pa -372 -345}%
+\special{pa -382 -339}\special{pa -392 -333}\special{pa -401 -327}\special{pa -410 -321}%
+\special{pa -419 -314}\special{pa -427 -308}\special{pa -435 -301}\special{pa -442 -294}%
+\special{pa -449 -287}\special{pa -455 -280}\special{pa -461 -273}\special{pa -467 -265}%
+\special{pa -472 -258}\special{pa -476 -251}\special{pa -481 -243}\special{pa -484 -235}%
+\special{pa -487 -228}\special{pa -490 -220}\special{pa -492 -212}\special{pa -494 -205}%
+\special{pa -495 -197}\special{pa -496 -189}\special{pa -496 -181}\special{pa -496 -174}%
+\special{pa -495 -166}\special{pa -494 -158}\special{pa -492 -150}\special{pa -490 -142}%
+\special{pa -487 -135}\special{pa -484 -127}\special{pa -480 -120}\special{pa -476 -112}%
+\special{pa -472 -105}\special{pa -467 -97}\special{pa -461 -90}\special{pa -455 -83}%
+\special{pa -449 -76}\special{pa -442 -69}\special{pa -435 -62}\special{pa -427 -55}%
+\special{pa -419 -48}\special{pa -410 -42}\special{pa -401 -36}\special{pa -392 -29}%
+\special{pa -382 -23}\special{pa -372 -17}\special{pa -361 -12}\special{pa -351 -6}%
+\special{pa -339 -1}%
+\special{fp}%
+\special{pa -358 98}\special{pa -346 103}\special{pa -334 109}\special{pa -321 114}%
+\special{pa -308 119}\special{pa -294 124}\special{pa -280 128}\special{pa -266 132}%
+\special{pa -252 136}\special{pa -238 140}\special{pa -223 144}\special{pa -208 147}%
+\special{pa -193 150}\special{pa -177 153}\special{pa -162 156}\special{pa -146 158}%
+\special{pa -130 161}\special{pa -114 162}\special{pa -98 164}\special{pa -82 166}%
+\special{pa -65 167}\special{pa -49 168}\special{pa -33 168}\special{pa -16 169}%
+\special{pa 0 169}\special{pa 17 169}\special{pa 33 168}\special{pa 49 168}%
+\special{pa 66 167}\special{pa 82 165}\special{pa 98 164}\special{pa 114 162}%
+\special{pa 130 160}\special{pa 146 158}\special{pa 162 156}\special{pa 178 153}%
+\special{pa 193 150}\special{pa 208 147}\special{pa 223 144}\special{pa 238 140}%
+\special{pa 252 136}\special{pa 267 132}\special{pa 281 128}\special{pa 294 123}%
+\special{pa 308 119}\special{pa 321 114}\special{pa 334 109}\special{pa 346 103}%
+\special{pa 359 98}\special{pa 370 92}\special{pa 382 86}\special{pa 393 80}%
+\special{pa 404 74}\special{pa 414 67}\special{pa 424 61}\special{pa 433 54}%
+\special{pa 442 47}\special{pa 451 40}\special{pa 459 33}\special{pa 467 26}%
+\special{pa 474 18}\special{pa 481 11}\special{pa 487 3}\special{pa 493 -4}%
+\special{pa 498 -12}\special{pa 503 -20}\special{pa 507 -28}\special{pa 511 -36}%
+\special{pa 514 -44}\special{pa 517 -52}\special{pa 520 -60}\special{pa 521 -69}%
+\special{pa 523 -77}\special{pa 523 -85}\special{pa 524 -93}\special{pa 523 -101}%
+\special{pa 523 -110}\special{pa 521 -118}\special{pa 519 -126}\special{pa 517 -134}%
+\special{pa 514 -142}\special{pa 511 -150}\special{pa 507 -158}\special{pa 503 -166}%
+\special{pa 498 -174}\special{pa 493 -182}\special{pa 487 -190}\special{pa 480 -197}%
+\special{pa 474 -205}\special{pa 466 -212}\special{pa 459 -219}\special{pa 451 -226}%
+\special{pa 442 -233}\special{pa 433 -240}\special{pa 424 -247}\special{pa 414 -254}%
+\special{pa 403 -260}\special{pa 393 -266}\special{pa 382 -272}\special{pa 370 -278}%
+\special{pa 358 -284}\special{pa 346 -290}\special{pa 334 -295}\special{pa 321 -300}%
+\special{pa 308 -305}\special{pa 294 -310}\special{pa 280 -314}\special{pa 266 -318}%
+\special{pa 252 -323}\special{pa 238 -326}\special{pa 223 -330}\special{pa 208 -333}%
+\special{pa 193 -337}\special{pa 177 -339}\special{pa 162 -342}\special{pa 146 -345}%
+\special{pa 130 -347}\special{pa 114 -349}\special{pa 98 -350}\special{pa 82 -352}%
+\special{pa 65 -353}\special{pa 49 -354}\special{pa 33 -354}\special{pa 16 -355}%
+\special{pa -0 -355}\special{pa -17 -355}\special{pa -33 -354}\special{pa -49 -354}%
+\special{pa -66 -353}\special{pa -82 -352}\special{pa -98 -350}\special{pa -114 -349}%
+\special{pa -130 -347}\special{pa -146 -344}\special{pa -162 -342}\special{pa -178 -339}%
+\special{pa -193 -336}\special{pa -208 -333}\special{pa -223 -330}\special{pa -238 -326}%
+\special{pa -252 -322}\special{pa -267 -318}\special{pa -281 -314}\special{pa -294 -310}%
+\special{pa -308 -305}\special{pa -321 -300}\special{pa -334 -295}\special{pa -346 -289}%
+\special{pa -359 -284}\special{pa -370 -278}\special{pa -382 -272}\special{pa -393 -266}%
+\special{pa -404 -260}\special{pa -414 -253}\special{pa -424 -247}\special{pa -433 -240}%
+\special{pa -442 -233}\special{pa -451 -226}\special{pa -459 -219}\special{pa -467 -212}%
+\special{pa -474 -204}\special{pa -481 -197}\special{pa -487 -189}\special{pa -493 -182}%
+\special{pa -498 -174}\special{pa -503 -166}\special{pa -507 -158}\special{pa -511 -150}%
+\special{pa -514 -142}\special{pa -517 -134}\special{pa -520 -126}\special{pa -521 -118}%
+\special{pa -523 -109}\special{pa -523 -101}\special{pa -524 -93}\special{pa -523 -85}%
+\special{pa -523 -77}\special{pa -521 -68}\special{pa -519 -60}\special{pa -517 -52}%
+\special{pa -514 -44}\special{pa -511 -36}\special{pa -507 -28}\special{pa -503 -20}%
+\special{pa -498 -12}\special{pa -493 -4}\special{pa -487 3}\special{pa -480 11}%
+\special{pa -474 18}\special{pa -466 26}\special{pa -459 33}\special{pa -451 40}%
+\special{pa -442 47}\special{pa -433 54}\special{pa -424 61}\special{pa -414 67}%
+\special{pa -403 74}\special{pa -393 80}\special{pa -382 86}\special{pa -370 92}%
+\special{pa -358 98}%
+\special{fp}%
+\special{pa -377 201}\special{pa -364 207}\special{pa -351 212}\special{pa -338 218}%
+\special{pa -324 223}\special{pa -310 228}\special{pa -295 233}\special{pa -280 237}%
+\special{pa -265 242}\special{pa -250 246}\special{pa -235 249}\special{pa -219 253}%
+\special{pa -203 256}\special{pa -187 259}\special{pa -170 262}\special{pa -154 265}%
+\special{pa -137 267}\special{pa -120 269}\special{pa -103 271}\special{pa -86 272}%
+\special{pa -69 273}\special{pa -52 274}\special{pa -34 275}\special{pa -17 275}%
+\special{pa 0 276}\special{pa 18 275}\special{pa 35 275}\special{pa 52 274}%
+\special{pa 69 273}\special{pa 86 272}\special{pa 103 271}\special{pa 120 269}%
+\special{pa 137 267}\special{pa 154 265}\special{pa 171 262}\special{pa 187 259}%
+\special{pa 203 256}\special{pa 219 253}\special{pa 235 249}\special{pa 250 246}%
+\special{pa 266 241}\special{pa 281 237}\special{pa 296 233}\special{pa 310 228}%
+\special{pa 324 223}\special{pa 338 218}\special{pa 351 212}\special{pa 365 207}%
+\special{pa 377 201}\special{pa 390 195}\special{pa 402 189}\special{pa 414 182}%
+\special{pa 425 176}\special{pa 436 169}\special{pa 446 162}\special{pa 456 155}%
+\special{pa 465 148}\special{pa 475 140}\special{pa 483 133}\special{pa 491 125}%
+\special{pa 499 117}\special{pa 506 109}\special{pa 513 101}\special{pa 519 93}%
+\special{pa 524 85}\special{pa 529 77}\special{pa 534 68}\special{pa 538 60}%
+\special{pa 541 52}\special{pa 544 43}\special{pa 547 34}\special{pa 549 26}%
+\special{pa 550 17}\special{pa 551 9}\special{pa 551 -0}\special{pa 551 -9}%
+\special{pa 550 -17}\special{pa 549 -26}\special{pa 547 -35}\special{pa 544 -43}%
+\special{pa 541 -52}\special{pa 538 -60}\special{pa 534 -69}\special{pa 529 -77}%
+\special{pa 524 -85}\special{pa 519 -93}\special{pa 512 -102}\special{pa 506 -110}%
+\special{pa 499 -117}\special{pa 491 -125}\special{pa 483 -133}\special{pa 474 -140}%
+\special{pa 465 -148}\special{pa 456 -155}\special{pa 446 -162}\special{pa 435 -169}%
+\special{pa 425 -176}\special{pa 413 -182}\special{pa 402 -189}\special{pa 390 -195}%
+\special{pa 377 -201}\special{pa 364 -207}\special{pa 351 -212}\special{pa 338 -218}%
+\special{pa 324 -223}\special{pa 310 -228}\special{pa 295 -233}\special{pa 280 -237}%
+\special{pa 265 -242}\special{pa 250 -246}\special{pa 235 -249}\special{pa 219 -253}%
+\special{pa 203 -256}\special{pa 187 -259}\special{pa 170 -262}\special{pa 154 -265}%
+\special{pa 137 -267}\special{pa 120 -269}\special{pa 103 -271}\special{pa 86 -272}%
+\special{pa 69 -273}\special{pa 52 -274}\special{pa 34 -275}\special{pa 17 -275}%
+\special{pa -0 -276}\special{pa -18 -275}\special{pa -35 -275}\special{pa -52 -274}%
+\special{pa -69 -273}\special{pa -86 -272}\special{pa -103 -271}\special{pa -120 -269}%
+\special{pa -137 -267}\special{pa -154 -265}\special{pa -171 -262}\special{pa -187 -259}%
+\special{pa -203 -256}\special{pa -219 -253}\special{pa -235 -249}\special{pa -250 -246}%
+\special{pa -266 -241}\special{pa -281 -237}\special{pa -296 -233}\special{pa -310 -228}%
+\special{pa -324 -223}\special{pa -338 -218}\special{pa -351 -212}\special{pa -365 -207}%
+\special{pa -377 -201}\special{pa -390 -195}\special{pa -402 -189}\special{pa -414 -182}%
+\special{pa -425 -176}\special{pa -436 -169}\special{pa -446 -162}\special{pa -456 -155}%
+\special{pa -465 -148}\special{pa -475 -140}\special{pa -483 -133}\special{pa -491 -125}%
+\special{pa -499 -117}\special{pa -506 -109}\special{pa -513 -101}\special{pa -519 -93}%
+\special{pa -524 -85}\special{pa -529 -77}\special{pa -534 -68}\special{pa -538 -60}%
+\special{pa -541 -52}\special{pa -544 -43}\special{pa -547 -34}\special{pa -549 -26}%
+\special{pa -550 -17}\special{pa -551 -9}\special{pa -551 0}\special{pa -551 9}%
+\special{pa -550 17}\special{pa -549 26}\special{pa -547 35}\special{pa -544 43}%
+\special{pa -541 52}\special{pa -538 60}\special{pa -534 69}\special{pa -529 77}%
+\special{pa -524 85}\special{pa -519 93}\special{pa -512 102}\special{pa -506 110}%
+\special{pa -499 117}\special{pa -491 125}\special{pa -483 133}\special{pa -474 140}%
+\special{pa -465 148}\special{pa -456 155}\special{pa -446 162}\special{pa -435 169}%
+\special{pa -425 176}\special{pa -413 182}\special{pa -402 189}\special{pa -390 195}%
+\special{pa -377 201}%
+\special{fp}%
+\settowidth{\Width}{ワイヤーフレームモデル}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{ワイヤーフレームモデル}\settodepth{\Depth}{ワイヤーフレームモデル}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-2.4285714,-1.5000000){\hspace*{\Width}\raisebox{\Height}{ワイヤーフレームモデル}}%
+%
+\settowidth{\Width}{サーフェスモデル}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{サーフェスモデル}\settodepth{\Depth}{サーフェスモデル}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(3.5714286,-1.5000000){\hspace*{\Width}\raisebox{\Height}{サーフェスモデル}}%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/surfacemodelE.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/surfacemodelE.tex
new file mode 100644
index 0000000000..c4fa571d1c
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/surfacemodelE.tex
@@ -0,0 +1,2204 @@
+%%% /Users/hannya/Desktop/fig/template3D.tex
+%%% Generator=template3D.cdy
+{\unitlength=7mm%
+\begin{picture}%
+(10.5,5.74)(-2.52,-1.59)%
+\special{pn 8}%
+%
+\special{pa 2104 -65}\special{pa 2092 -102}\special{pa 2081 -139}\special{pa 2070 -176}%
+\special{pa 2059 -211}\special{pa 2048 -246}\special{pa 2037 -280}\special{pa 2025 -313}%
+\special{pa 2014 -346}\special{pa 2003 -377}\special{pa 1992 -408}\special{pa 1981 -438}%
+\special{pa 1974 -455}\special{pa 1969 -468}\special{pa 1958 -496}\special{pa 1947 -524}%
+\special{pa 1936 -551}\special{pa 1924 -578}\special{pa 1913 -603}\special{pa 1902 -628}%
+\special{pa 1890 -652}\special{pa 1879 -676}\special{pa 1868 -698}\special{pa 1856 -720}%
+\special{pa 1845 -741}\special{pa 1834 -761}\special{pa 1822 -781}\special{pa 1810 -799}%
+\special{pa 1803 -812}\special{pa 1799 -817}\special{pa 1787 -834}\special{pa 1776 -851}%
+\special{pa 1764 -867}\special{pa 1752 -881}\special{pa 1740 -896}\special{pa 1728 -909}%
+\special{pa 1716 -922}\special{pa 1703 -933}\special{pa 1690 -944}\special{pa 1683 -950}%
+\special{pa 1677 -955}\special{pa 1664 -964}\special{pa 1654 -970}\special{pa 1650 -973}%
+\special{pa 1634 -981}\special{pa 1617 -988}\special{pa 1602 -993}\special{pa 1596 -995}%
+\special{pa 1590 -996}\special{pa 1578 -998}\special{pa 1568 -999}\special{pa 1558 -999}%
+\special{pa 1548 -999}\special{pa 1538 -998}\special{pa 1527 -996}\special{pa 1520 -995}%
+\special{pa 1515 -993}\special{pa 1500 -989}\special{pa 1483 -982}\special{pa 1467 -973}%
+\special{pa 1462 -970}\special{pa 1453 -964}\special{pa 1439 -955}\special{pa 1433 -950}%
+\special{pa 1426 -944}\special{pa 1413 -933}\special{pa 1401 -922}\special{pa 1389 -909}%
+\special{pa 1376 -896}\special{pa 1364 -881}\special{pa 1353 -867}\special{pa 1341 -851}%
+\special{pa 1329 -834}\special{pa 1317 -817}\special{pa 1313 -811}\special{pa 1306 -799}%
+\special{pa 1294 -781}\special{pa 1283 -761}\special{pa 1271 -741}\special{pa 1260 -720}%
+\special{pa 1249 -698}\special{pa 1237 -676}\special{pa 1226 -652}\special{pa 1215 -628}%
+\special{pa 1203 -603}\special{pa 1192 -578}\special{pa 1181 -551}\special{pa 1169 -524}%
+\special{pa 1158 -496}\special{pa 1147 -468}\special{pa 1140 -451}\special{pa 1136 -438}%
+\special{pa 1124 -408}\special{pa 1113 -377}\special{pa 1102 -346}\special{pa 1091 -313}%
+\special{pa 1080 -280}\special{pa 1069 -246}\special{pa 1057 -211}\special{pa 1046 -176}%
+\special{pa 1035 -139}\special{pa 1024 -102}\special{pa 1013 -66}%
+\special{fp}%
+\special{pa 1181 176}\special{pa 1234 198}\special{pa 1293 217}\special{pa 1355 232}%
+\special{pa 1421 242}\special{pa 1489 249}\special{pa 1558 251}\special{pa 1627 249}%
+\special{pa 1695 242}\special{pa 1761 231}\special{pa 1824 217}\special{pa 1882 198}%
+\special{pa 1936 176}\special{pa 1983 151}\special{pa 2024 123}\special{pa 2057 92}%
+\special{pa 2082 60}\special{pa 2100 27}\special{pa 2108 -8}\special{pa 2108 -42}%
+\special{pa 2102 -68}%
+\special{fp}%
+\special{pa 1014 -66}\special{pa 1008 -42}\special{pa 1008 -7}\special{pa 1017 27}%
+\special{pa 1034 60}\special{pa 1060 93}\special{pa 1093 123}\special{pa 1134 151}%
+\special{pa 1181 176}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 2103 -64}\special{pa 2100 -71}\special{fp}\special{pa 2088 -100}\special{pa 2084 -107}\special{fp}%
+\special{pa 2065 -132}\special{pa 2060 -138}\special{fp}\special{pa 2038 -159}\special{pa 2032 -165}\special{fp}%
+\special{pa 2008 -183}\special{pa 2001 -188}\special{fp}\special{pa 1975 -205}\special{pa 1968 -209}\special{fp}%
+\special{pa 1941 -223}\special{pa 1933 -227}\special{fp}\special{pa 1905 -238}\special{pa 1897 -241}\special{fp}%
+\special{pa 1868 -252}\special{pa 1861 -255}\special{fp}\special{pa 1831 -264}\special{pa 1823 -266}\special{fp}%
+\special{pa 1793 -273}\special{pa 1785 -275}\special{fp}\special{pa 1755 -282}\special{pa 1747 -283}\special{fp}%
+\special{pa 1717 -288}\special{pa 1709 -289}\special{fp}\special{pa 1678 -293}\special{pa 1670 -294}\special{fp}%
+\special{pa 1639 -297}\special{pa 1631 -298}\special{fp}\special{pa 1600 -299}\special{pa 1592 -299}\special{fp}%
+\special{pa 1561 -300}\special{pa 1553 -300}\special{fp}\special{pa 1522 -299}\special{pa 1514 -299}\special{fp}%
+\special{pa 1483 -298}\special{pa 1475 -297}\special{fp}\special{pa 1444 -294}\special{pa 1436 -293}\special{fp}%
+\special{pa 1406 -289}\special{pa 1398 -288}\special{fp}\special{pa 1367 -283}\special{pa 1359 -282}\special{fp}%
+\special{pa 1329 -275}\special{pa 1321 -273}\special{fp}\special{pa 1291 -266}\special{pa 1283 -263}\special{fp}%
+\special{pa 1254 -254}\special{pa 1246 -251}\special{fp}\special{pa 1217 -241}\special{pa 1210 -238}\special{fp}%
+\special{pa 1181 -226}\special{pa 1174 -222}\special{fp}\special{pa 1147 -208}\special{pa 1140 -204}\special{fp}%
+\special{pa 1114 -187}\special{pa 1107 -182}\special{fp}\special{pa 1083 -163}\special{pa 1077 -158}\special{fp}%
+\special{pa 1055 -136}\special{pa 1050 -130}\special{fp}\special{pa 1032 -105}\special{pa 1028 -98}\special{fp}%
+\special{pa 1016 -70}\special{pa 1013 -62}\special{fp}\special{pn 8}%
+\special{pa 0 -955}\special{pa -2 -954}\special{pa -4 -953}\special{pa -6 -951}%
+\special{pa -8 -950}\special{pa -9 -949}\special{pa -11 -948}\special{pa -13 -946}%
+\special{pa -15 -945}\special{pa -17 -944}\special{pa -19 -942}\special{pa -21 -941}%
+\special{pa -23 -939}\special{pa -25 -938}\special{pa -26 -936}\special{pa -28 -934}%
+\special{pa -30 -932}\special{pa -32 -931}\special{pa -34 -929}\special{pa -36 -927}%
+\special{pa -38 -925}\special{pa -40 -923}\special{pa -41 -921}\special{pa -43 -919}%
+\special{pa -45 -917}\special{pa -47 -915}\special{pa -49 -912}\special{pa -51 -910}%
+\special{pa -53 -908}\special{pa -55 -905}\special{pa -57 -903}\special{pa -58 -901}%
+\special{pa -60 -898}\special{pa -62 -896}\special{pa -64 -893}\special{pa -66 -890}%
+\special{pa -68 -888}\special{pa -70 -885}\special{pa -72 -882}\special{pa -74 -879}%
+\special{pa -75 -876}\special{pa -77 -873}\special{pa -79 -870}\special{pa -81 -867}%
+\special{pa -83 -864}\special{pa -85 -861}\special{pa -87 -858}\special{pa -89 -855}%
+\special{pa -91 -851}\special{pa -92 -848}\special{pa -94 -845}\special{pa -96 -841}%
+\special{pa -98 -838}\special{pa -100 -834}\special{pa -102 -831}\special{pa -104 -827}%
+\special{pa -106 -824}\special{pa -107 -820}\special{pa -109 -816}\special{pa -111 -812}%
+\special{pa -113 -808}\special{pa -115 -805}\special{pa -117 -801}\special{pa -119 -797}%
+\special{pa -121 -793}\special{pa -123 -789}\special{pa -124 -784}\special{pa -126 -780}%
+\special{pa -128 -776}\special{pa -130 -772}\special{pa -132 -767}\special{pa -134 -763}%
+\special{pa -136 -759}\special{pa -138 -754}\special{pa -140 -750}\special{pa -141 -745}%
+\special{pa -143 -740}\special{pa -145 -736}\special{pa -147 -731}\special{pa -149 -726}%
+\special{pa -151 -722}\special{pa -153 -717}\special{pa -155 -712}\special{pa -157 -707}%
+\special{pa -158 -702}\special{pa -160 -697}\special{pa -162 -692}\special{pa -164 -687}%
+\special{pa -166 -681}\special{pa -168 -676}\special{pa -170 -671}\special{pa -172 -666}%
+\special{pa -173 -660}\special{pa -175 -655}\special{pa -177 -649}\special{pa -179 -644}%
+\special{pa -181 -638}\special{pa -183 -633}\special{pa -185 -627}\special{pa -187 -621}%
+\special{pa -189 -616}\special{pa -190 -610}\special{pa -192 -604}\special{pa -194 -598}%
+\special{pa -196 -592}\special{pa -198 -586}\special{pa -200 -580}\special{pa -202 -574}%
+\special{pa -204 -568}\special{pa -206 -562}\special{pa -207 -555}\special{pa -209 -549}%
+\special{pa -211 -543}\special{pa -213 -536}\special{pa -215 -530}\special{pa -217 -523}%
+\special{pa -219 -517}\special{pa -221 -510}\special{pa -223 -504}\special{pa -224 -497}%
+\special{pa -226 -490}\special{pa -228 -484}\special{pa -230 -477}\special{pa -232 -470}%
+\special{pa -234 -463}\special{pa -236 -456}\special{pa -238 -449}\special{pa -239 -442}%
+\special{pa -241 -435}\special{pa -243 -428}\special{pa -245 -421}\special{pa -247 -413}%
+\special{pa -249 -406}\special{pa -251 -399}\special{pa -253 -391}\special{pa -255 -384}%
+\special{pa -256 -377}\special{pa -258 -369}\special{pa -260 -361}\special{pa -262 -354}%
+\special{pa -264 -346}\special{pa -266 -338}\special{pa -268 -331}\special{pa -270 -323}%
+\special{pa -272 -315}\special{pa -273 -307}\special{pa -275 -299}\special{pa -277 -291}%
+\special{pa -279 -283}\special{pa -281 -275}\special{pa -283 -267}\special{pa -285 -259}%
+\special{pa -287 -251}\special{pa -289 -242}\special{pa -290 -234}\special{pa -292 -226}%
+\special{pa -294 -217}\special{pa -296 -209}\special{pa -298 -200}\special{pa -300 -192}%
+\special{pa -302 -183}\special{pa -304 -174}\special{pa -306 -166}\special{pa -307 -157}%
+\special{pa -309 -148}\special{pa -311 -139}\special{pa -313 -130}\special{pa -315 -121}%
+\special{pa -317 -112}\special{pa -319 -103}\special{pa -321 -94}\special{pa -322 -85}%
+\special{pa -324 -76}\special{pa -326 -67}\special{pa -328 -57}\special{pa -330 -48}%
+\special{pa -332 -39}\special{pa -334 -29}\special{pa -336 -20}\special{pa -338 -10}%
+\special{pa -339 -1}\special{pa -341 9}\special{pa -343 19}\special{pa -345 28}%
+\special{pa -347 38}\special{pa -349 48}\special{pa -351 58}\special{pa -353 68}%
+\special{pa -355 78}\special{pa -356 88}\special{pa -358 98}\special{pa -360 108}%
+\special{pa -362 118}\special{pa -364 128}\special{pa -366 139}\special{pa -368 149}%
+\special{pa -370 159}\special{pa -372 170}\special{pa -373 180}\special{pa -375 190}%
+\special{pa -377 201}%
+\special{fp}%
+\special{pa 0 -955}\special{pa -1 -953}\special{pa -2 -952}\special{pa -4 -951}%
+\special{pa -5 -949}\special{pa -6 -948}\special{pa -7 -946}\special{pa -8 -945}%
+\special{pa -9 -943}\special{pa -11 -942}\special{pa -12 -940}\special{pa -13 -938}%
+\special{pa -14 -936}\special{pa -15 -934}\special{pa -16 -933}\special{pa -18 -931}%
+\special{pa -19 -929}\special{pa -20 -927}\special{pa -21 -924}\special{pa -22 -922}%
+\special{pa -23 -920}\special{pa -25 -918}\special{pa -26 -916}\special{pa -27 -913}%
+\special{pa -28 -911}\special{pa -29 -909}\special{pa -30 -906}\special{pa -32 -904}%
+\special{pa -33 -901}\special{pa -34 -898}\special{pa -35 -896}\special{pa -36 -893}%
+\special{pa -38 -890}\special{pa -39 -888}\special{pa -40 -885}\special{pa -41 -882}%
+\special{pa -42 -879}\special{pa -43 -876}\special{pa -45 -873}\special{pa -46 -870}%
+\special{pa -47 -867}\special{pa -48 -863}\special{pa -49 -860}\special{pa -50 -857}%
+\special{pa -52 -854}\special{pa -53 -850}\special{pa -54 -847}\special{pa -55 -843}%
+\special{pa -56 -840}\special{pa -57 -836}\special{pa -59 -833}\special{pa -60 -829}%
+\special{pa -61 -825}\special{pa -62 -822}\special{pa -63 -818}\special{pa -64 -814}%
+\special{pa -66 -810}\special{pa -67 -806}\special{pa -68 -802}\special{pa -69 -798}%
+\special{pa -70 -794}\special{pa -72 -790}\special{pa -73 -786}\special{pa -74 -781}%
+\special{pa -75 -777}\special{pa -76 -773}\special{pa -77 -768}\special{pa -79 -764}%
+\special{pa -80 -760}\special{pa -81 -755}\special{pa -82 -750}\special{pa -83 -746}%
+\special{pa -84 -741}\special{pa -86 -736}\special{pa -87 -732}\special{pa -88 -727}%
+\special{pa -89 -722}\special{pa -90 -717}\special{pa -91 -712}\special{pa -93 -707}%
+\special{pa -94 -702}\special{pa -95 -697}\special{pa -96 -692}\special{pa -97 -687}%
+\special{pa -98 -682}\special{pa -100 -676}\special{pa -101 -671}\special{pa -102 -666}%
+\special{pa -103 -660}\special{pa -104 -655}\special{pa -106 -649}\special{pa -107 -644}%
+\special{pa -108 -638}\special{pa -109 -632}\special{pa -110 -627}\special{pa -111 -621}%
+\special{pa -113 -615}\special{pa -114 -609}\special{pa -115 -603}\special{pa -116 -597}%
+\special{pa -117 -591}\special{pa -118 -585}\special{pa -120 -579}\special{pa -121 -573}%
+\special{pa -122 -567}\special{pa -123 -561}\special{pa -124 -554}\special{pa -125 -548}%
+\special{pa -127 -542}\special{pa -128 -535}\special{pa -129 -529}\special{pa -130 -522}%
+\special{pa -131 -516}\special{pa -132 -509}\special{pa -134 -502}\special{pa -135 -496}%
+\special{pa -136 -489}\special{pa -137 -482}\special{pa -138 -475}\special{pa -140 -468}%
+\special{pa -141 -461}\special{pa -142 -454}\special{pa -143 -447}\special{pa -144 -440}%
+\special{pa -145 -433}\special{pa -147 -426}\special{pa -148 -419}\special{pa -149 -411}%
+\special{pa -150 -404}\special{pa -151 -397}\special{pa -152 -389}\special{pa -154 -382}%
+\special{pa -155 -374}\special{pa -156 -367}\special{pa -157 -359}\special{pa -158 -351}%
+\special{pa -159 -344}\special{pa -161 -336}\special{pa -162 -328}\special{pa -163 -320}%
+\special{pa -164 -312}\special{pa -165 -304}\special{pa -166 -296}\special{pa -168 -288}%
+\special{pa -169 -280}\special{pa -170 -272}\special{pa -171 -264}\special{pa -172 -256}%
+\special{pa -174 -247}\special{pa -175 -239}\special{pa -176 -231}\special{pa -177 -222}%
+\special{pa -178 -214}\special{pa -179 -205}\special{pa -181 -197}\special{pa -182 -188}%
+\special{pa -183 -179}\special{pa -184 -171}\special{pa -185 -162}\special{pa -186 -153}%
+\special{pa -188 -144}\special{pa -189 -135}\special{pa -190 -126}\special{pa -191 -117}%
+\special{pa -192 -108}\special{pa -193 -99}\special{pa -195 -90}\special{pa -196 -81}%
+\special{pa -197 -72}\special{pa -198 -62}\special{pa -199 -53}\special{pa -200 -44}%
+\special{pa -202 -34}\special{pa -203 -25}\special{pa -204 -15}\special{pa -205 -6}%
+\special{pa -206 4}\special{pa -208 14}\special{pa -209 23}\special{pa -210 33}%
+\special{pa -211 43}\special{pa -212 53}\special{pa -213 63}\special{pa -215 73}%
+\special{pa -216 83}\special{pa -217 93}\special{pa -218 103}\special{pa -219 113}%
+\special{pa -220 123}\special{pa -222 134}\special{pa -223 144}\special{pa -224 154}%
+\special{pa -225 165}\special{pa -226 175}\special{pa -227 186}\special{pa -229 196}%
+\special{pa -230 207}\special{pa -231 217}\special{pa -232 228}\special{pa -233 239}%
+\special{pa -235 249}%
+\special{fp}%
+\special{pa 0 -955}\special{pa -0 -953}\special{pa -1 -952}\special{pa -1 -950}%
+\special{pa -1 -949}\special{pa -2 -947}\special{pa -2 -946}\special{pa -2 -944}%
+\special{pa -3 -942}\special{pa -3 -940}\special{pa -3 -939}\special{pa -4 -937}%
+\special{pa -4 -935}\special{pa -4 -933}\special{pa -5 -931}\special{pa -5 -929}%
+\special{pa -6 -927}\special{pa -6 -925}\special{pa -6 -922}\special{pa -7 -920}%
+\special{pa -7 -918}\special{pa -7 -915}\special{pa -8 -913}\special{pa -8 -911}%
+\special{pa -8 -908}\special{pa -9 -906}\special{pa -9 -903}\special{pa -9 -900}%
+\special{pa -10 -898}\special{pa -10 -895}\special{pa -10 -892}\special{pa -11 -889}%
+\special{pa -11 -886}\special{pa -11 -884}\special{pa -12 -881}\special{pa -12 -878}%
+\special{pa -12 -875}\special{pa -13 -871}\special{pa -13 -868}\special{pa -13 -865}%
+\special{pa -14 -862}\special{pa -14 -859}\special{pa -14 -855}\special{pa -15 -852}%
+\special{pa -15 -848}\special{pa -15 -845}\special{pa -16 -841}\special{pa -16 -838}%
+\special{pa -17 -834}\special{pa -17 -830}\special{pa -17 -827}\special{pa -18 -823}%
+\special{pa -18 -819}\special{pa -18 -815}\special{pa -19 -811}\special{pa -19 -807}%
+\special{pa -19 -803}\special{pa -20 -799}\special{pa -20 -795}\special{pa -20 -791}%
+\special{pa -21 -787}\special{pa -21 -782}\special{pa -21 -778}\special{pa -22 -774}%
+\special{pa -22 -769}\special{pa -22 -765}\special{pa -23 -760}\special{pa -23 -756}%
+\special{pa -23 -751}\special{pa -24 -747}\special{pa -24 -742}\special{pa -24 -737}%
+\special{pa -25 -733}\special{pa -25 -728}\special{pa -25 -723}\special{pa -26 -718}%
+\special{pa -26 -713}\special{pa -27 -708}\special{pa -27 -703}\special{pa -27 -698}%
+\special{pa -28 -693}\special{pa -28 -687}\special{pa -28 -682}\special{pa -29 -677}%
+\special{pa -29 -671}\special{pa -29 -666}\special{pa -30 -661}\special{pa -30 -655}%
+\special{pa -30 -650}\special{pa -31 -644}\special{pa -31 -638}\special{pa -31 -633}%
+\special{pa -32 -627}\special{pa -32 -621}\special{pa -32 -615}\special{pa -33 -609}%
+\special{pa -33 -603}\special{pa -33 -597}\special{pa -34 -591}\special{pa -34 -585}%
+\special{pa -34 -579}\special{pa -35 -573}\special{pa -35 -567}\special{pa -35 -561}%
+\special{pa -36 -554}\special{pa -36 -548}\special{pa -37 -542}\special{pa -37 -535}%
+\special{pa -37 -529}\special{pa -38 -522}\special{pa -38 -515}\special{pa -38 -509}%
+\special{pa -39 -502}\special{pa -39 -495}\special{pa -39 -489}\special{pa -40 -482}%
+\special{pa -40 -475}\special{pa -40 -468}\special{pa -41 -461}\special{pa -41 -454}%
+\special{pa -41 -447}\special{pa -42 -440}\special{pa -42 -433}\special{pa -42 -425}%
+\special{pa -43 -418}\special{pa -43 -411}\special{pa -43 -404}\special{pa -44 -396}%
+\special{pa -44 -389}\special{pa -44 -381}\special{pa -45 -374}\special{pa -45 -366}%
+\special{pa -45 -358}\special{pa -46 -351}\special{pa -46 -343}\special{pa -46 -335}%
+\special{pa -47 -327}\special{pa -47 -319}\special{pa -48 -311}\special{pa -48 -304}%
+\special{pa -48 -295}\special{pa -49 -287}\special{pa -49 -279}\special{pa -49 -271}%
+\special{pa -50 -263}\special{pa -50 -255}\special{pa -50 -246}\special{pa -51 -238}%
+\special{pa -51 -230}\special{pa -51 -221}\special{pa -52 -213}\special{pa -52 -204}%
+\special{pa -52 -195}\special{pa -53 -187}\special{pa -53 -178}\special{pa -53 -169}%
+\special{pa -54 -161}\special{pa -54 -152}\special{pa -54 -143}\special{pa -55 -134}%
+\special{pa -55 -125}\special{pa -55 -116}\special{pa -56 -107}\special{pa -56 -98}%
+\special{pa -56 -89}\special{pa -57 -79}\special{pa -57 -70}\special{pa -58 -61}%
+\special{pa -58 -51}\special{pa -58 -42}\special{pa -59 -33}\special{pa -59 -23}%
+\special{pa -59 -13}\special{pa -60 -4}\special{pa -60 6}\special{pa -60 15}%
+\special{pa -61 25}\special{pa -61 35}\special{pa -61 45}\special{pa -62 55}%
+\special{pa -62 65}\special{pa -62 75}\special{pa -63 85}\special{pa -63 95}%
+\special{pa -63 105}\special{pa -64 115}\special{pa -64 125}\special{pa -64 136}%
+\special{pa -65 146}\special{pa -65 156}\special{pa -65 167}\special{pa -66 177}%
+\special{pa -66 188}\special{pa -66 198}\special{pa -67 209}\special{pa -67 219}%
+\special{pa -68 230}\special{pa -68 241}\special{pa -68 252}\special{pa -69 263}%
+\special{pa -69 273}%
+\special{fp}%
+\special{pa 0 -955}\special{pa 1 -953}\special{pa 1 -952}\special{pa 2 -950}%
+\special{pa 2 -949}\special{pa 3 -947}\special{pa 3 -946}\special{pa 4 -944}%
+\special{pa 4 -942}\special{pa 5 -941}\special{pa 5 -939}\special{pa 6 -937}%
+\special{pa 6 -935}\special{pa 7 -933}\special{pa 7 -931}\special{pa 8 -929}%
+\special{pa 8 -927}\special{pa 9 -925}\special{pa 9 -923}\special{pa 10 -920}%
+\special{pa 10 -918}\special{pa 11 -916}\special{pa 11 -913}\special{pa 12 -911}%
+\special{pa 12 -908}\special{pa 13 -906}\special{pa 13 -903}\special{pa 14 -901}%
+\special{pa 14 -898}\special{pa 15 -895}\special{pa 16 -893}\special{pa 16 -890}%
+\special{pa 17 -887}\special{pa 17 -884}\special{pa 18 -881}\special{pa 18 -878}%
+\special{pa 19 -875}\special{pa 19 -872}\special{pa 20 -869}\special{pa 20 -866}%
+\special{pa 21 -862}\special{pa 21 -859}\special{pa 22 -856}\special{pa 22 -852}%
+\special{pa 23 -849}\special{pa 23 -845}\special{pa 24 -842}\special{pa 24 -838}%
+\special{pa 25 -835}\special{pa 25 -831}\special{pa 26 -827}\special{pa 26 -824}%
+\special{pa 27 -820}\special{pa 27 -816}\special{pa 28 -812}\special{pa 28 -808}%
+\special{pa 29 -804}\special{pa 29 -800}\special{pa 30 -796}\special{pa 31 -792}%
+\special{pa 31 -788}\special{pa 32 -783}\special{pa 32 -779}\special{pa 33 -775}%
+\special{pa 33 -770}\special{pa 34 -766}\special{pa 34 -761}\special{pa 35 -757}%
+\special{pa 35 -752}\special{pa 36 -748}\special{pa 36 -743}\special{pa 37 -738}%
+\special{pa 37 -733}\special{pa 38 -729}\special{pa 38 -724}\special{pa 39 -719}%
+\special{pa 39 -714}\special{pa 40 -709}\special{pa 40 -704}\special{pa 41 -699}%
+\special{pa 41 -694}\special{pa 42 -688}\special{pa 42 -683}\special{pa 43 -678}%
+\special{pa 43 -673}\special{pa 44 -667}\special{pa 44 -662}\special{pa 45 -656}%
+\special{pa 46 -651}\special{pa 46 -645}\special{pa 47 -640}\special{pa 47 -634}%
+\special{pa 48 -628}\special{pa 48 -622}\special{pa 49 -617}\special{pa 49 -611}%
+\special{pa 50 -605}\special{pa 50 -599}\special{pa 51 -593}\special{pa 51 -587}%
+\special{pa 52 -581}\special{pa 52 -575}\special{pa 53 -568}\special{pa 53 -562}%
+\special{pa 54 -556}\special{pa 54 -549}\special{pa 55 -543}\special{pa 55 -537}%
+\special{pa 56 -530}\special{pa 56 -524}\special{pa 57 -517}\special{pa 57 -510}%
+\special{pa 58 -504}\special{pa 58 -497}\special{pa 59 -490}\special{pa 60 -483}%
+\special{pa 60 -477}\special{pa 61 -470}\special{pa 61 -463}\special{pa 62 -456}%
+\special{pa 62 -449}\special{pa 63 -441}\special{pa 63 -434}\special{pa 64 -427}%
+\special{pa 64 -420}\special{pa 65 -413}\special{pa 65 -405}\special{pa 66 -398}%
+\special{pa 66 -390}\special{pa 67 -383}\special{pa 67 -375}\special{pa 68 -368}%
+\special{pa 68 -360}\special{pa 69 -352}\special{pa 69 -345}\special{pa 70 -337}%
+\special{pa 70 -329}\special{pa 71 -321}\special{pa 71 -313}\special{pa 72 -305}%
+\special{pa 72 -297}\special{pa 73 -289}\special{pa 73 -281}\special{pa 74 -273}%
+\special{pa 75 -265}\special{pa 75 -257}\special{pa 76 -248}\special{pa 76 -240}%
+\special{pa 77 -232}\special{pa 77 -223}\special{pa 78 -215}\special{pa 78 -206}%
+\special{pa 79 -198}\special{pa 79 -189}\special{pa 80 -180}\special{pa 80 -171}%
+\special{pa 81 -163}\special{pa 81 -154}\special{pa 82 -145}\special{pa 82 -136}%
+\special{pa 83 -127}\special{pa 83 -118}\special{pa 84 -109}\special{pa 84 -100}%
+\special{pa 85 -91}\special{pa 85 -82}\special{pa 86 -72}\special{pa 86 -63}%
+\special{pa 87 -54}\special{pa 87 -44}\special{pa 88 -35}\special{pa 88 -25}%
+\special{pa 89 -16}\special{pa 90 -6}\special{pa 90 3}\special{pa 91 13}%
+\special{pa 91 23}\special{pa 92 33}\special{pa 92 42}\special{pa 93 52}%
+\special{pa 93 62}\special{pa 94 72}\special{pa 94 82}\special{pa 95 92}%
+\special{pa 95 102}\special{pa 96 113}\special{pa 96 123}\special{pa 97 133}%
+\special{pa 97 143}\special{pa 98 154}\special{pa 98 164}\special{pa 99 175}%
+\special{pa 99 185}\special{pa 100 196}\special{pa 100 206}\special{pa 101 217}%
+\special{pa 101 227}\special{pa 102 238}\special{pa 102 249}\special{pa 103 260}%
+\special{pa 103 271}%
+\special{fp}%
+\special{pa 0 -955}\special{pa 1 -953}\special{pa 3 -952}\special{pa 4 -951}%
+\special{pa 5 -949}\special{pa 7 -948}\special{pa 8 -947}\special{pa 9 -945}%
+\special{pa 11 -943}\special{pa 12 -942}\special{pa 13 -940}\special{pa 15 -939}%
+\special{pa 16 -937}\special{pa 17 -935}\special{pa 19 -933}\special{pa 20 -931}%
+\special{pa 21 -929}\special{pa 23 -927}\special{pa 24 -925}\special{pa 25 -923}%
+\special{pa 27 -921}\special{pa 28 -919}\special{pa 29 -917}\special{pa 31 -914}%
+\special{pa 32 -912}\special{pa 33 -910}\special{pa 35 -907}\special{pa 36 -905}%
+\special{pa 37 -902}\special{pa 39 -900}\special{pa 40 -897}\special{pa 41 -894}%
+\special{pa 43 -892}\special{pa 44 -889}\special{pa 45 -886}\special{pa 46 -883}%
+\special{pa 48 -880}\special{pa 49 -877}\special{pa 50 -874}\special{pa 52 -871}%
+\special{pa 53 -868}\special{pa 54 -865}\special{pa 56 -862}\special{pa 57 -859}%
+\special{pa 58 -855}\special{pa 60 -852}\special{pa 61 -849}\special{pa 62 -845}%
+\special{pa 64 -842}\special{pa 65 -838}\special{pa 66 -835}\special{pa 68 -831}%
+\special{pa 69 -827}\special{pa 70 -824}\special{pa 72 -820}\special{pa 73 -816}%
+\special{pa 74 -812}\special{pa 76 -808}\special{pa 77 -804}\special{pa 78 -800}%
+\special{pa 80 -796}\special{pa 81 -792}\special{pa 82 -788}\special{pa 84 -784}%
+\special{pa 85 -780}\special{pa 86 -775}\special{pa 88 -771}\special{pa 89 -767}%
+\special{pa 90 -762}\special{pa 92 -758}\special{pa 93 -753}\special{pa 94 -749}%
+\special{pa 96 -744}\special{pa 97 -739}\special{pa 98 -735}\special{pa 100 -730}%
+\special{pa 101 -725}\special{pa 102 -720}\special{pa 104 -715}\special{pa 105 -710}%
+\special{pa 106 -705}\special{pa 108 -700}\special{pa 109 -695}\special{pa 110 -690}%
+\special{pa 112 -685}\special{pa 113 -680}\special{pa 114 -674}\special{pa 116 -669}%
+\special{pa 117 -664}\special{pa 118 -658}\special{pa 120 -653}\special{pa 121 -647}%
+\special{pa 122 -642}\special{pa 124 -636}\special{pa 125 -630}\special{pa 126 -625}%
+\special{pa 128 -619}\special{pa 129 -613}\special{pa 130 -607}\special{pa 132 -601}%
+\special{pa 133 -595}\special{pa 134 -589}\special{pa 136 -583}\special{pa 137 -577}%
+\special{pa 138 -571}\special{pa 139 -565}\special{pa 141 -559}\special{pa 142 -552}%
+\special{pa 143 -546}\special{pa 145 -540}\special{pa 146 -533}\special{pa 147 -527}%
+\special{pa 149 -520}\special{pa 150 -513}\special{pa 151 -507}\special{pa 153 -500}%
+\special{pa 154 -493}\special{pa 155 -487}\special{pa 157 -480}\special{pa 158 -473}%
+\special{pa 159 -466}\special{pa 161 -459}\special{pa 162 -452}\special{pa 163 -445}%
+\special{pa 165 -438}\special{pa 166 -431}\special{pa 167 -424}\special{pa 169 -416}%
+\special{pa 170 -409}\special{pa 171 -402}\special{pa 173 -394}\special{pa 174 -387}%
+\special{pa 175 -379}\special{pa 177 -372}\special{pa 178 -364}\special{pa 179 -357}%
+\special{pa 181 -349}\special{pa 182 -341}\special{pa 183 -334}\special{pa 185 -326}%
+\special{pa 186 -318}\special{pa 187 -310}\special{pa 189 -302}\special{pa 190 -294}%
+\special{pa 191 -286}\special{pa 193 -278}\special{pa 194 -270}\special{pa 195 -261}%
+\special{pa 197 -253}\special{pa 198 -245}\special{pa 199 -237}\special{pa 201 -228}%
+\special{pa 202 -220}\special{pa 203 -211}\special{pa 205 -203}\special{pa 206 -194}%
+\special{pa 207 -186}\special{pa 209 -177}\special{pa 210 -168}\special{pa 211 -159}%
+\special{pa 213 -151}\special{pa 214 -142}\special{pa 215 -133}\special{pa 217 -124}%
+\special{pa 218 -115}\special{pa 219 -106}\special{pa 221 -97}\special{pa 222 -87}%
+\special{pa 223 -78}\special{pa 225 -69}\special{pa 226 -60}\special{pa 227 -50}%
+\special{pa 229 -41}\special{pa 230 -32}\special{pa 231 -22}\special{pa 232 -12}%
+\special{pa 234 -3}\special{pa 235 7}\special{pa 236 16}\special{pa 238 26}%
+\special{pa 239 36}\special{pa 240 46}\special{pa 242 56}\special{pa 243 66}%
+\special{pa 244 75}\special{pa 246 86}\special{pa 247 96}\special{pa 248 106}%
+\special{pa 250 116}\special{pa 251 126}\special{pa 252 136}\special{pa 254 147}%
+\special{pa 255 157}\special{pa 256 167}\special{pa 258 178}\special{pa 259 188}%
+\special{pa 260 199}\special{pa 262 209}\special{pa 263 220}\special{pa 264 231}%
+\special{pa 266 241}%
+\special{fp}%
+\special{pa 0 -955}\special{pa 2 -954}\special{pa 4 -953}\special{pa 6 -952}%
+\special{pa 8 -951}\special{pa 10 -949}\special{pa 12 -948}\special{pa 14 -947}%
+\special{pa 16 -946}\special{pa 18 -944}\special{pa 20 -943}\special{pa 22 -941}%
+\special{pa 24 -940}\special{pa 26 -938}\special{pa 28 -937}\special{pa 30 -935}%
+\special{pa 32 -933}\special{pa 34 -932}\special{pa 36 -930}\special{pa 38 -928}%
+\special{pa 40 -926}\special{pa 42 -924}\special{pa 44 -922}\special{pa 46 -920}%
+\special{pa 48 -918}\special{pa 50 -916}\special{pa 52 -914}\special{pa 54 -912}%
+\special{pa 56 -910}\special{pa 58 -907}\special{pa 60 -905}\special{pa 62 -903}%
+\special{pa 64 -900}\special{pa 66 -898}\special{pa 68 -895}\special{pa 70 -892}%
+\special{pa 72 -890}\special{pa 74 -887}\special{pa 76 -884}\special{pa 78 -882}%
+\special{pa 80 -879}\special{pa 82 -876}\special{pa 84 -873}\special{pa 86 -870}%
+\special{pa 88 -867}\special{pa 90 -864}\special{pa 92 -861}\special{pa 94 -858}%
+\special{pa 96 -854}\special{pa 98 -851}\special{pa 100 -848}\special{pa 102 -845}%
+\special{pa 105 -841}\special{pa 107 -838}\special{pa 109 -834}\special{pa 111 -831}%
+\special{pa 113 -827}\special{pa 115 -823}\special{pa 117 -820}\special{pa 119 -816}%
+\special{pa 121 -812}\special{pa 123 -808}\special{pa 125 -804}\special{pa 127 -801}%
+\special{pa 129 -797}\special{pa 131 -793}\special{pa 133 -788}\special{pa 135 -784}%
+\special{pa 137 -780}\special{pa 139 -776}\special{pa 141 -772}\special{pa 143 -767}%
+\special{pa 145 -763}\special{pa 147 -759}\special{pa 149 -754}\special{pa 151 -750}%
+\special{pa 153 -745}\special{pa 155 -741}\special{pa 157 -736}\special{pa 159 -731}%
+\special{pa 161 -726}\special{pa 163 -722}\special{pa 165 -717}\special{pa 167 -712}%
+\special{pa 169 -707}\special{pa 171 -702}\special{pa 173 -697}\special{pa 175 -692}%
+\special{pa 177 -687}\special{pa 179 -682}\special{pa 181 -676}\special{pa 183 -671}%
+\special{pa 185 -666}\special{pa 187 -661}\special{pa 189 -655}\special{pa 191 -650}%
+\special{pa 193 -644}\special{pa 195 -639}\special{pa 197 -633}\special{pa 199 -627}%
+\special{pa 201 -622}\special{pa 203 -616}\special{pa 205 -610}\special{pa 207 -604}%
+\special{pa 209 -598}\special{pa 211 -593}\special{pa 213 -587}\special{pa 215 -581}%
+\special{pa 217 -574}\special{pa 219 -568}\special{pa 221 -562}\special{pa 223 -556}%
+\special{pa 225 -550}\special{pa 227 -543}\special{pa 229 -537}\special{pa 231 -531}%
+\special{pa 233 -524}\special{pa 235 -518}\special{pa 237 -511}\special{pa 239 -504}%
+\special{pa 241 -498}\special{pa 243 -491}\special{pa 245 -484}\special{pa 247 -478}%
+\special{pa 249 -471}\special{pa 251 -464}\special{pa 253 -457}\special{pa 255 -450}%
+\special{pa 257 -443}\special{pa 259 -436}\special{pa 261 -429}\special{pa 263 -422}%
+\special{pa 265 -414}\special{pa 267 -407}\special{pa 269 -400}\special{pa 271 -392}%
+\special{pa 273 -385}\special{pa 275 -378}\special{pa 277 -370}\special{pa 279 -362}%
+\special{pa 281 -355}\special{pa 283 -347}\special{pa 285 -340}\special{pa 287 -332}%
+\special{pa 289 -324}\special{pa 291 -316}\special{pa 293 -308}\special{pa 295 -300}%
+\special{pa 297 -292}\special{pa 299 -284}\special{pa 301 -276}\special{pa 303 -268}%
+\special{pa 305 -260}\special{pa 307 -252}\special{pa 309 -243}\special{pa 311 -235}%
+\special{pa 314 -227}\special{pa 316 -218}\special{pa 318 -210}\special{pa 320 -201}%
+\special{pa 322 -193}\special{pa 324 -184}\special{pa 326 -176}\special{pa 328 -167}%
+\special{pa 330 -158}\special{pa 332 -149}\special{pa 334 -140}\special{pa 336 -132}%
+\special{pa 338 -123}\special{pa 340 -114}\special{pa 342 -105}\special{pa 344 -96}%
+\special{pa 346 -86}\special{pa 348 -77}\special{pa 350 -68}\special{pa 352 -59}%
+\special{pa 354 -49}\special{pa 356 -40}\special{pa 358 -31}\special{pa 360 -21}%
+\special{pa 362 -12}\special{pa 364 -2}\special{pa 366 8}\special{pa 368 17}%
+\special{pa 370 27}\special{pa 372 37}\special{pa 374 46}\special{pa 376 56}%
+\special{pa 378 66}\special{pa 380 76}\special{pa 382 86}\special{pa 384 96}%
+\special{pa 386 106}\special{pa 388 116}\special{pa 390 127}\special{pa 392 137}%
+\special{pa 394 147}\special{pa 396 157}\special{pa 398 168}\special{pa 400 178}%
+\special{pa 402 189}%
+\special{fp}%
+\special{pa 0 -955}\special{pa 2 -954}\special{pa 5 -953}\special{pa 7 -953}%
+\special{pa 10 -952}\special{pa 12 -951}\special{pa 15 -950}\special{pa 17 -949}%
+\special{pa 20 -948}\special{pa 22 -947}\special{pa 25 -946}\special{pa 27 -945}%
+\special{pa 30 -944}\special{pa 32 -943}\special{pa 35 -942}\special{pa 37 -941}%
+\special{pa 40 -939}\special{pa 42 -938}\special{pa 45 -936}\special{pa 47 -935}%
+\special{pa 50 -933}\special{pa 52 -932}\special{pa 55 -930}\special{pa 57 -929}%
+\special{pa 60 -927}\special{pa 62 -925}\special{pa 65 -923}\special{pa 67 -921}%
+\special{pa 70 -920}\special{pa 72 -918}\special{pa 75 -916}\special{pa 77 -914}%
+\special{pa 80 -911}\special{pa 82 -909}\special{pa 85 -907}\special{pa 87 -905}%
+\special{pa 90 -903}\special{pa 92 -900}\special{pa 95 -898}\special{pa 97 -896}%
+\special{pa 100 -893}\special{pa 102 -891}\special{pa 105 -888}\special{pa 107 -885}%
+\special{pa 110 -883}\special{pa 112 -880}\special{pa 115 -877}\special{pa 117 -874}%
+\special{pa 120 -872}\special{pa 122 -869}\special{pa 125 -866}\special{pa 127 -863}%
+\special{pa 130 -860}\special{pa 132 -857}\special{pa 135 -853}\special{pa 137 -850}%
+\special{pa 140 -847}\special{pa 142 -844}\special{pa 145 -840}\special{pa 147 -837}%
+\special{pa 150 -834}\special{pa 152 -830}\special{pa 155 -827}\special{pa 157 -823}%
+\special{pa 160 -819}\special{pa 162 -816}\special{pa 165 -812}\special{pa 167 -808}%
+\special{pa 170 -804}\special{pa 172 -801}\special{pa 175 -797}\special{pa 177 -793}%
+\special{pa 180 -789}\special{pa 182 -785}\special{pa 185 -781}\special{pa 187 -776}%
+\special{pa 190 -772}\special{pa 192 -768}\special{pa 195 -764}\special{pa 197 -759}%
+\special{pa 200 -755}\special{pa 202 -751}\special{pa 205 -746}\special{pa 207 -742}%
+\special{pa 210 -737}\special{pa 212 -732}\special{pa 214 -728}\special{pa 217 -723}%
+\special{pa 219 -718}\special{pa 222 -713}\special{pa 224 -709}\special{pa 227 -704}%
+\special{pa 229 -699}\special{pa 232 -694}\special{pa 234 -689}\special{pa 237 -684}%
+\special{pa 239 -678}\special{pa 242 -673}\special{pa 244 -668}\special{pa 247 -663}%
+\special{pa 249 -657}\special{pa 252 -652}\special{pa 254 -647}\special{pa 257 -641}%
+\special{pa 259 -636}\special{pa 262 -630}\special{pa 264 -624}\special{pa 267 -619}%
+\special{pa 269 -613}\special{pa 272 -607}\special{pa 274 -601}\special{pa 277 -596}%
+\special{pa 279 -590}\special{pa 282 -584}\special{pa 284 -578}\special{pa 287 -572}%
+\special{pa 289 -566}\special{pa 292 -559}\special{pa 294 -553}\special{pa 297 -547}%
+\special{pa 299 -541}\special{pa 302 -534}\special{pa 304 -528}\special{pa 307 -521}%
+\special{pa 309 -515}\special{pa 312 -508}\special{pa 314 -502}\special{pa 317 -495}%
+\special{pa 319 -489}\special{pa 322 -482}\special{pa 324 -475}\special{pa 327 -468}%
+\special{pa 329 -461}\special{pa 332 -455}\special{pa 334 -448}\special{pa 337 -441}%
+\special{pa 339 -434}\special{pa 342 -426}\special{pa 344 -419}\special{pa 347 -412}%
+\special{pa 349 -405}\special{pa 352 -398}\special{pa 354 -390}\special{pa 357 -383}%
+\special{pa 359 -375}\special{pa 362 -368}\special{pa 364 -360}\special{pa 367 -353}%
+\special{pa 369 -345}\special{pa 372 -337}\special{pa 374 -330}\special{pa 377 -322}%
+\special{pa 379 -314}\special{pa 382 -306}\special{pa 384 -298}\special{pa 387 -290}%
+\special{pa 389 -282}\special{pa 392 -274}\special{pa 394 -266}\special{pa 397 -258}%
+\special{pa 399 -250}\special{pa 402 -242}\special{pa 404 -233}\special{pa 407 -225}%
+\special{pa 409 -217}\special{pa 412 -208}\special{pa 414 -200}\special{pa 417 -191}%
+\special{pa 419 -183}\special{pa 421 -174}\special{pa 424 -165}\special{pa 426 -157}%
+\special{pa 429 -148}\special{pa 431 -139}\special{pa 434 -130}\special{pa 436 -121}%
+\special{pa 439 -112}\special{pa 441 -103}\special{pa 444 -94}\special{pa 446 -85}%
+\special{pa 449 -76}\special{pa 451 -67}\special{pa 454 -57}\special{pa 456 -48}%
+\special{pa 459 -39}\special{pa 461 -29}\special{pa 464 -20}\special{pa 466 -10}%
+\special{pa 469 -1}\special{pa 471 9}\special{pa 474 18}\special{pa 476 28}%
+\special{pa 479 38}\special{pa 481 47}\special{pa 484 57}\special{pa 486 67}%
+\special{pa 489 77}\special{pa 491 87}\special{pa 494 97}\special{pa 496 107}%
+\special{pa 499 117}%
+\special{fp}%
+\special{pa 0 -955}\special{pa 3 -954}\special{pa 5 -954}\special{pa 8 -954}%
+\special{pa 11 -954}\special{pa 14 -953}\special{pa 16 -953}\special{pa 19 -952}%
+\special{pa 22 -952}\special{pa 25 -951}\special{pa 27 -951}\special{pa 30 -950}%
+\special{pa 33 -949}\special{pa 36 -948}\special{pa 38 -948}\special{pa 41 -947}%
+\special{pa 44 -946}\special{pa 46 -945}\special{pa 49 -944}\special{pa 52 -943}%
+\special{pa 55 -942}\special{pa 57 -941}\special{pa 60 -939}\special{pa 63 -938}%
+\special{pa 66 -937}\special{pa 68 -935}\special{pa 71 -934}\special{pa 74 -933}%
+\special{pa 77 -931}\special{pa 79 -930}\special{pa 82 -928}\special{pa 85 -926}%
+\special{pa 87 -925}\special{pa 90 -923}\special{pa 93 -921}\special{pa 96 -919}%
+\special{pa 98 -918}\special{pa 101 -916}\special{pa 104 -914}\special{pa 107 -912}%
+\special{pa 109 -910}\special{pa 112 -907}\special{pa 115 -905}\special{pa 118 -903}%
+\special{pa 120 -901}\special{pa 123 -899}\special{pa 126 -896}\special{pa 129 -894}%
+\special{pa 131 -891}\special{pa 134 -889}\special{pa 137 -886}\special{pa 139 -884}%
+\special{pa 142 -881}\special{pa 145 -879}\special{pa 148 -876}\special{pa 150 -873}%
+\special{pa 153 -870}\special{pa 156 -867}\special{pa 159 -864}\special{pa 161 -861}%
+\special{pa 164 -858}\special{pa 167 -855}\special{pa 170 -852}\special{pa 172 -849}%
+\special{pa 175 -846}\special{pa 178 -843}\special{pa 180 -839}\special{pa 183 -836}%
+\special{pa 186 -833}\special{pa 189 -829}\special{pa 191 -826}\special{pa 194 -822}%
+\special{pa 197 -819}\special{pa 200 -815}\special{pa 202 -811}\special{pa 205 -808}%
+\special{pa 208 -804}\special{pa 211 -800}\special{pa 213 -796}\special{pa 216 -792}%
+\special{pa 219 -788}\special{pa 221 -784}\special{pa 224 -780}\special{pa 227 -776}%
+\special{pa 230 -772}\special{pa 232 -768}\special{pa 235 -763}\special{pa 238 -759}%
+\special{pa 241 -755}\special{pa 243 -750}\special{pa 246 -746}\special{pa 249 -741}%
+\special{pa 252 -737}\special{pa 254 -732}\special{pa 257 -728}\special{pa 260 -723}%
+\special{pa 262 -718}\special{pa 265 -713}\special{pa 268 -709}\special{pa 271 -704}%
+\special{pa 273 -699}\special{pa 276 -694}\special{pa 279 -689}\special{pa 282 -684}%
+\special{pa 284 -679}\special{pa 287 -673}\special{pa 290 -668}\special{pa 293 -663}%
+\special{pa 295 -658}\special{pa 298 -652}\special{pa 301 -647}\special{pa 304 -641}%
+\special{pa 306 -636}\special{pa 309 -630}\special{pa 312 -625}\special{pa 314 -619}%
+\special{pa 317 -614}\special{pa 320 -608}\special{pa 323 -602}\special{pa 325 -596}%
+\special{pa 328 -590}\special{pa 331 -584}\special{pa 334 -578}\special{pa 336 -572}%
+\special{pa 339 -566}\special{pa 342 -560}\special{pa 345 -554}\special{pa 347 -548}%
+\special{pa 350 -542}\special{pa 353 -535}\special{pa 355 -529}\special{pa 358 -523}%
+\special{pa 361 -516}\special{pa 364 -510}\special{pa 366 -503}\special{pa 369 -496}%
+\special{pa 372 -490}\special{pa 375 -483}\special{pa 377 -476}\special{pa 380 -470}%
+\special{pa 383 -463}\special{pa 386 -456}\special{pa 388 -449}\special{pa 391 -442}%
+\special{pa 394 -435}\special{pa 396 -428}\special{pa 399 -421}\special{pa 402 -414}%
+\special{pa 405 -406}\special{pa 407 -399}\special{pa 410 -392}\special{pa 413 -384}%
+\special{pa 416 -377}\special{pa 418 -370}\special{pa 421 -362}\special{pa 424 -355}%
+\special{pa 427 -347}\special{pa 429 -339}\special{pa 432 -332}\special{pa 435 -324}%
+\special{pa 437 -316}\special{pa 440 -308}\special{pa 443 -300}\special{pa 446 -292}%
+\special{pa 448 -285}\special{pa 451 -276}\special{pa 454 -268}\special{pa 457 -260}%
+\special{pa 459 -252}\special{pa 462 -244}\special{pa 465 -236}\special{pa 468 -227}%
+\special{pa 470 -219}\special{pa 473 -211}\special{pa 476 -202}\special{pa 479 -194}%
+\special{pa 481 -185}\special{pa 484 -176}\special{pa 487 -168}\special{pa 489 -159}%
+\special{pa 492 -150}\special{pa 495 -142}\special{pa 498 -133}\special{pa 500 -124}%
+\special{pa 503 -115}\special{pa 506 -106}\special{pa 509 -97}\special{pa 511 -88}%
+\special{pa 514 -79}\special{pa 517 -70}\special{pa 520 -60}\special{pa 522 -51}%
+\special{pa 525 -42}\special{pa 528 -32}\special{pa 530 -23}\special{pa 533 -14}%
+\special{pa 536 -4}\special{pa 539 6}\special{pa 541 15}\special{pa 544 25}%
+\special{pa 547 34}%
+\special{fp}%
+\special{pa 0 -955}\special{pa 3 -955}\special{pa 5 -955}\special{pa 8 -955}%
+\special{pa 11 -955}\special{pa 14 -955}\special{pa 16 -955}\special{pa 19 -955}%
+\special{pa 22 -955}\special{pa 24 -955}\special{pa 27 -955}\special{pa 30 -955}%
+\special{pa 32 -954}\special{pa 35 -954}\special{pa 38 -954}\special{pa 41 -953}%
+\special{pa 43 -953}\special{pa 46 -952}\special{pa 49 -952}\special{pa 51 -951}%
+\special{pa 54 -950}\special{pa 57 -950}\special{pa 60 -949}\special{pa 62 -948}%
+\special{pa 65 -947}\special{pa 68 -946}\special{pa 70 -945}\special{pa 73 -944}%
+\special{pa 76 -943}\special{pa 79 -942}\special{pa 81 -941}\special{pa 84 -940}%
+\special{pa 87 -939}\special{pa 89 -937}\special{pa 92 -936}\special{pa 95 -934}%
+\special{pa 97 -933}\special{pa 100 -932}\special{pa 103 -930}\special{pa 106 -928}%
+\special{pa 108 -927}\special{pa 111 -925}\special{pa 114 -923}\special{pa 116 -922}%
+\special{pa 119 -920}\special{pa 122 -918}\special{pa 125 -916}\special{pa 127 -914}%
+\special{pa 130 -912}\special{pa 133 -910}\special{pa 135 -908}\special{pa 138 -906}%
+\special{pa 141 -904}\special{pa 143 -901}\special{pa 146 -899}\special{pa 149 -897}%
+\special{pa 152 -894}\special{pa 154 -892}\special{pa 157 -889}\special{pa 160 -887}%
+\special{pa 162 -884}\special{pa 165 -882}\special{pa 168 -879}\special{pa 171 -876}%
+\special{pa 173 -873}\special{pa 176 -871}\special{pa 179 -868}\special{pa 181 -865}%
+\special{pa 184 -862}\special{pa 187 -859}\special{pa 189 -856}\special{pa 192 -853}%
+\special{pa 195 -850}\special{pa 198 -846}\special{pa 200 -843}\special{pa 203 -840}%
+\special{pa 206 -836}\special{pa 208 -833}\special{pa 211 -830}\special{pa 214 -826}%
+\special{pa 217 -823}\special{pa 219 -819}\special{pa 222 -815}\special{pa 225 -812}%
+\special{pa 227 -808}\special{pa 230 -804}\special{pa 233 -800}\special{pa 236 -797}%
+\special{pa 238 -793}\special{pa 241 -789}\special{pa 244 -785}\special{pa 246 -781}%
+\special{pa 249 -776}\special{pa 252 -772}\special{pa 254 -768}\special{pa 257 -764}%
+\special{pa 260 -760}\special{pa 263 -755}\special{pa 265 -751}\special{pa 268 -746}%
+\special{pa 271 -742}\special{pa 273 -737}\special{pa 276 -733}\special{pa 279 -728}%
+\special{pa 282 -723}\special{pa 284 -719}\special{pa 287 -714}\special{pa 290 -709}%
+\special{pa 292 -704}\special{pa 295 -699}\special{pa 298 -694}\special{pa 300 -689}%
+\special{pa 303 -684}\special{pa 306 -679}\special{pa 309 -674}\special{pa 311 -669}%
+\special{pa 314 -664}\special{pa 317 -658}\special{pa 319 -653}\special{pa 322 -647}%
+\special{pa 325 -642}\special{pa 328 -637}\special{pa 330 -631}\special{pa 333 -625}%
+\special{pa 336 -620}\special{pa 338 -614}\special{pa 341 -608}\special{pa 344 -603}%
+\special{pa 346 -597}\special{pa 349 -591}\special{pa 352 -585}\special{pa 355 -579}%
+\special{pa 357 -573}\special{pa 360 -567}\special{pa 363 -561}\special{pa 365 -555}%
+\special{pa 368 -548}\special{pa 371 -542}\special{pa 374 -536}\special{pa 376 -530}%
+\special{pa 379 -523}\special{pa 382 -517}\special{pa 384 -510}\special{pa 387 -504}%
+\special{pa 390 -497}\special{pa 393 -490}\special{pa 395 -484}\special{pa 398 -477}%
+\special{pa 401 -470}\special{pa 403 -463}\special{pa 406 -456}\special{pa 409 -450}%
+\special{pa 411 -443}\special{pa 414 -436}\special{pa 417 -428}\special{pa 420 -421}%
+\special{pa 422 -414}\special{pa 425 -407}\special{pa 428 -400}\special{pa 430 -392}%
+\special{pa 433 -385}\special{pa 436 -378}\special{pa 439 -370}\special{pa 441 -363}%
+\special{pa 444 -355}\special{pa 447 -348}\special{pa 449 -340}\special{pa 452 -332}%
+\special{pa 455 -325}\special{pa 457 -317}\special{pa 460 -309}\special{pa 463 -301}%
+\special{pa 466 -293}\special{pa 468 -285}\special{pa 471 -277}\special{pa 474 -269}%
+\special{pa 476 -261}\special{pa 479 -253}\special{pa 482 -245}\special{pa 485 -236}%
+\special{pa 487 -228}\special{pa 490 -220}\special{pa 493 -211}\special{pa 495 -203}%
+\special{pa 498 -194}\special{pa 501 -186}\special{pa 503 -177}\special{pa 506 -168}%
+\special{pa 509 -160}\special{pa 512 -151}\special{pa 514 -142}\special{pa 517 -133}%
+\special{pa 520 -125}\special{pa 522 -116}\special{pa 525 -107}\special{pa 528 -98}%
+\special{pa 531 -89}\special{pa 533 -79}\special{pa 536 -70}\special{pa 539 -61}%
+\special{pa 541 -52}%
+\special{fp}%
+\special{pa 0 -955}\special{pa 2 -955}\special{pa 5 -956}\special{pa 7 -956}%
+\special{pa 10 -957}\special{pa 12 -957}\special{pa 14 -958}\special{pa 17 -958}%
+\special{pa 19 -958}\special{pa 22 -959}\special{pa 24 -959}\special{pa 27 -959}%
+\special{pa 29 -959}\special{pa 31 -959}\special{pa 34 -959}\special{pa 36 -959}%
+\special{pa 39 -959}\special{pa 41 -959}\special{pa 43 -959}\special{pa 46 -959}%
+\special{pa 48 -958}\special{pa 51 -958}\special{pa 53 -958}\special{pa 56 -957}%
+\special{pa 58 -957}\special{pa 60 -956}\special{pa 63 -956}\special{pa 65 -955}%
+\special{pa 68 -955}\special{pa 70 -954}\special{pa 72 -953}\special{pa 75 -952}%
+\special{pa 77 -951}\special{pa 80 -951}\special{pa 82 -950}\special{pa 85 -949}%
+\special{pa 87 -948}\special{pa 89 -947}\special{pa 92 -945}\special{pa 94 -944}%
+\special{pa 97 -943}\special{pa 99 -942}\special{pa 101 -940}\special{pa 104 -939}%
+\special{pa 106 -938}\special{pa 109 -936}\special{pa 111 -935}\special{pa 113 -933}%
+\special{pa 116 -932}\special{pa 118 -930}\special{pa 121 -928}\special{pa 123 -926}%
+\special{pa 126 -925}\special{pa 128 -923}\special{pa 130 -921}\special{pa 133 -919}%
+\special{pa 135 -917}\special{pa 138 -915}\special{pa 140 -913}\special{pa 142 -911}%
+\special{pa 145 -909}\special{pa 147 -906}\special{pa 150 -904}\special{pa 152 -902}%
+\special{pa 155 -899}\special{pa 157 -897}\special{pa 159 -895}\special{pa 162 -892}%
+\special{pa 164 -889}\special{pa 167 -887}\special{pa 169 -884}\special{pa 171 -882}%
+\special{pa 174 -879}\special{pa 176 -876}\special{pa 179 -873}\special{pa 181 -870}%
+\special{pa 184 -867}\special{pa 186 -864}\special{pa 188 -861}\special{pa 191 -858}%
+\special{pa 193 -855}\special{pa 196 -852}\special{pa 198 -849}\special{pa 200 -845}%
+\special{pa 203 -842}\special{pa 205 -839}\special{pa 208 -835}\special{pa 210 -832}%
+\special{pa 212 -828}\special{pa 215 -825}\special{pa 217 -821}\special{pa 220 -817}%
+\special{pa 222 -814}\special{pa 225 -810}\special{pa 227 -806}\special{pa 229 -802}%
+\special{pa 232 -798}\special{pa 234 -795}\special{pa 237 -791}\special{pa 239 -787}%
+\special{pa 241 -782}\special{pa 244 -778}\special{pa 246 -774}\special{pa 249 -770}%
+\special{pa 251 -766}\special{pa 254 -761}\special{pa 256 -757}\special{pa 258 -752}%
+\special{pa 261 -748}\special{pa 263 -744}\special{pa 266 -739}\special{pa 268 -734}%
+\special{pa 270 -730}\special{pa 273 -725}\special{pa 275 -720}\special{pa 278 -715}%
+\special{pa 280 -711}\special{pa 283 -706}\special{pa 285 -701}\special{pa 287 -696}%
+\special{pa 290 -691}\special{pa 292 -686}\special{pa 295 -680}\special{pa 297 -675}%
+\special{pa 299 -670}\special{pa 302 -665}\special{pa 304 -659}\special{pa 307 -654}%
+\special{pa 309 -649}\special{pa 311 -643}\special{pa 314 -638}\special{pa 316 -632}%
+\special{pa 319 -627}\special{pa 321 -621}\special{pa 324 -615}\special{pa 326 -609}%
+\special{pa 328 -604}\special{pa 331 -598}\special{pa 333 -592}\special{pa 336 -586}%
+\special{pa 338 -580}\special{pa 340 -574}\special{pa 343 -568}\special{pa 345 -562}%
+\special{pa 348 -555}\special{pa 350 -549}\special{pa 353 -543}\special{pa 355 -537}%
+\special{pa 357 -530}\special{pa 360 -524}\special{pa 362 -517}\special{pa 365 -511}%
+\special{pa 367 -504}\special{pa 369 -498}\special{pa 372 -491}\special{pa 374 -484}%
+\special{pa 377 -477}\special{pa 379 -471}\special{pa 381 -464}\special{pa 384 -457}%
+\special{pa 386 -450}\special{pa 389 -443}\special{pa 391 -436}\special{pa 394 -429}%
+\special{pa 396 -422}\special{pa 398 -415}\special{pa 401 -407}\special{pa 403 -400}%
+\special{pa 406 -393}\special{pa 408 -385}\special{pa 410 -378}\special{pa 413 -370}%
+\special{pa 415 -363}\special{pa 418 -355}\special{pa 420 -348}\special{pa 423 -340}%
+\special{pa 425 -332}\special{pa 427 -325}\special{pa 430 -317}\special{pa 432 -309}%
+\special{pa 435 -301}\special{pa 437 -293}\special{pa 439 -285}\special{pa 442 -277}%
+\special{pa 444 -269}\special{pa 447 -261}\special{pa 449 -253}\special{pa 452 -244}%
+\special{pa 454 -236}\special{pa 456 -228}\special{pa 459 -219}\special{pa 461 -211}%
+\special{pa 464 -202}\special{pa 466 -194}\special{pa 468 -185}\special{pa 471 -177}%
+\special{pa 473 -168}\special{pa 476 -159}\special{pa 478 -151}\special{pa 480 -142}%
+\special{pa 483 -133}%
+\special{fp}%
+\special{pa 0 -955}\special{pa 2 -956}\special{pa 4 -957}\special{pa 6 -957}%
+\special{pa 8 -958}\special{pa 9 -959}\special{pa 11 -960}\special{pa 13 -961}%
+\special{pa 15 -961}\special{pa 17 -962}\special{pa 19 -962}\special{pa 21 -963}%
+\special{pa 23 -963}\special{pa 25 -964}\special{pa 26 -964}\special{pa 28 -964}%
+\special{pa 30 -965}\special{pa 32 -965}\special{pa 34 -965}\special{pa 36 -965}%
+\special{pa 38 -965}\special{pa 40 -965}\special{pa 41 -965}\special{pa 43 -965}%
+\special{pa 45 -965}\special{pa 47 -965}\special{pa 49 -965}\special{pa 51 -964}%
+\special{pa 53 -964}\special{pa 55 -964}\special{pa 57 -963}\special{pa 58 -963}%
+\special{pa 60 -962}\special{pa 62 -962}\special{pa 64 -961}\special{pa 66 -961}%
+\special{pa 68 -960}\special{pa 70 -959}\special{pa 72 -958}\special{pa 74 -958}%
+\special{pa 75 -957}\special{pa 77 -956}\special{pa 79 -955}\special{pa 81 -954}%
+\special{pa 83 -953}\special{pa 85 -952}\special{pa 87 -950}\special{pa 89 -949}%
+\special{pa 91 -948}\special{pa 92 -947}\special{pa 94 -945}\special{pa 96 -944}%
+\special{pa 98 -942}\special{pa 100 -941}\special{pa 102 -939}\special{pa 104 -938}%
+\special{pa 106 -936}\special{pa 107 -934}\special{pa 109 -933}\special{pa 111 -931}%
+\special{pa 113 -929}\special{pa 115 -927}\special{pa 117 -925}\special{pa 119 -923}%
+\special{pa 121 -921}\special{pa 123 -919}\special{pa 124 -917}\special{pa 126 -915}%
+\special{pa 128 -913}\special{pa 130 -910}\special{pa 132 -908}\special{pa 134 -906}%
+\special{pa 136 -903}\special{pa 138 -901}\special{pa 140 -898}\special{pa 141 -896}%
+\special{pa 143 -893}\special{pa 145 -891}\special{pa 147 -888}\special{pa 149 -885}%
+\special{pa 151 -882}\special{pa 153 -879}\special{pa 155 -877}\special{pa 157 -874}%
+\special{pa 158 -871}\special{pa 160 -868}\special{pa 162 -865}\special{pa 164 -861}%
+\special{pa 166 -858}\special{pa 168 -855}\special{pa 170 -852}\special{pa 172 -848}%
+\special{pa 173 -845}\special{pa 175 -842}\special{pa 177 -838}\special{pa 179 -835}%
+\special{pa 181 -831}\special{pa 183 -828}\special{pa 185 -824}\special{pa 187 -820}%
+\special{pa 189 -816}\special{pa 190 -813}\special{pa 192 -809}\special{pa 194 -805}%
+\special{pa 196 -801}\special{pa 198 -797}\special{pa 200 -793}\special{pa 202 -789}%
+\special{pa 204 -785}\special{pa 206 -781}\special{pa 207 -776}\special{pa 209 -772}%
+\special{pa 211 -768}\special{pa 213 -763}\special{pa 215 -759}\special{pa 217 -755}%
+\special{pa 219 -750}\special{pa 221 -746}\special{pa 223 -741}\special{pa 224 -736}%
+\special{pa 226 -732}\special{pa 228 -727}\special{pa 230 -722}\special{pa 232 -717}%
+\special{pa 234 -712}\special{pa 236 -707}\special{pa 238 -702}\special{pa 239 -697}%
+\special{pa 241 -692}\special{pa 243 -687}\special{pa 245 -682}\special{pa 247 -677}%
+\special{pa 249 -671}\special{pa 251 -666}\special{pa 253 -661}\special{pa 255 -655}%
+\special{pa 256 -650}\special{pa 258 -644}\special{pa 260 -639}\special{pa 262 -633}%
+\special{pa 264 -628}\special{pa 266 -622}\special{pa 268 -616}\special{pa 270 -610}%
+\special{pa 272 -604}\special{pa 273 -599}\special{pa 275 -593}\special{pa 277 -587}%
+\special{pa 279 -581}\special{pa 281 -575}\special{pa 283 -568}\special{pa 285 -562}%
+\special{pa 287 -556}\special{pa 289 -550}\special{pa 290 -543}\special{pa 292 -537}%
+\special{pa 294 -531}\special{pa 296 -524}\special{pa 298 -518}\special{pa 300 -511}%
+\special{pa 302 -504}\special{pa 304 -498}\special{pa 306 -491}\special{pa 307 -484}%
+\special{pa 309 -478}\special{pa 311 -471}\special{pa 313 -464}\special{pa 315 -457}%
+\special{pa 317 -450}\special{pa 319 -443}\special{pa 321 -436}\special{pa 322 -429}%
+\special{pa 324 -421}\special{pa 326 -414}\special{pa 328 -407}\special{pa 330 -400}%
+\special{pa 332 -392}\special{pa 334 -385}\special{pa 336 -377}\special{pa 338 -370}%
+\special{pa 339 -362}\special{pa 341 -355}\special{pa 343 -347}\special{pa 345 -339}%
+\special{pa 347 -332}\special{pa 349 -324}\special{pa 351 -316}\special{pa 353 -308}%
+\special{pa 355 -300}\special{pa 356 -292}\special{pa 358 -284}\special{pa 360 -276}%
+\special{pa 362 -268}\special{pa 364 -260}\special{pa 366 -251}\special{pa 368 -243}%
+\special{pa 370 -235}\special{pa 372 -226}\special{pa 373 -218}\special{pa 375 -209}%
+\special{pa 377 -201}%
+\special{fp}%
+\special{pa 0 -955}\special{pa 1 -956}\special{pa 2 -957}\special{pa 4 -958}%
+\special{pa 5 -959}\special{pa 6 -960}\special{pa 7 -961}\special{pa 8 -962}%
+\special{pa 9 -963}\special{pa 11 -964}\special{pa 12 -965}\special{pa 13 -966}%
+\special{pa 14 -966}\special{pa 15 -967}\special{pa 16 -967}\special{pa 18 -968}%
+\special{pa 19 -969}\special{pa 20 -969}\special{pa 21 -969}\special{pa 22 -970}%
+\special{pa 23 -970}\special{pa 25 -970}\special{pa 26 -971}\special{pa 27 -971}%
+\special{pa 28 -971}\special{pa 29 -971}\special{pa 30 -971}\special{pa 32 -971}%
+\special{pa 33 -971}\special{pa 34 -971}\special{pa 35 -971}\special{pa 36 -970}%
+\special{pa 38 -970}\special{pa 39 -970}\special{pa 40 -969}\special{pa 41 -969}%
+\special{pa 42 -969}\special{pa 43 -968}\special{pa 45 -968}\special{pa 46 -967}%
+\special{pa 47 -966}\special{pa 48 -966}\special{pa 49 -965}\special{pa 50 -964}%
+\special{pa 52 -963}\special{pa 53 -962}\special{pa 54 -962}\special{pa 55 -961}%
+\special{pa 56 -960}\special{pa 57 -958}\special{pa 59 -957}\special{pa 60 -956}%
+\special{pa 61 -955}\special{pa 62 -954}\special{pa 63 -952}\special{pa 64 -951}%
+\special{pa 66 -950}\special{pa 67 -948}\special{pa 68 -947}\special{pa 69 -945}%
+\special{pa 70 -944}\special{pa 72 -942}\special{pa 73 -940}\special{pa 74 -939}%
+\special{pa 75 -937}\special{pa 76 -935}\special{pa 77 -933}\special{pa 79 -931}%
+\special{pa 80 -929}\special{pa 81 -927}\special{pa 82 -925}\special{pa 83 -923}%
+\special{pa 84 -921}\special{pa 86 -919}\special{pa 87 -916}\special{pa 88 -914}%
+\special{pa 89 -912}\special{pa 90 -909}\special{pa 91 -907}\special{pa 93 -904}%
+\special{pa 94 -902}\special{pa 95 -899}\special{pa 96 -896}\special{pa 97 -894}%
+\special{pa 98 -891}\special{pa 100 -888}\special{pa 101 -885}\special{pa 102 -883}%
+\special{pa 103 -880}\special{pa 104 -877}\special{pa 106 -874}\special{pa 107 -871}%
+\special{pa 108 -867}\special{pa 109 -864}\special{pa 110 -861}\special{pa 111 -858}%
+\special{pa 113 -854}\special{pa 114 -851}\special{pa 115 -848}\special{pa 116 -844}%
+\special{pa 117 -841}\special{pa 118 -837}\special{pa 120 -834}\special{pa 121 -830}%
+\special{pa 122 -826}\special{pa 123 -822}\special{pa 124 -819}\special{pa 125 -815}%
+\special{pa 127 -811}\special{pa 128 -807}\special{pa 129 -803}\special{pa 130 -799}%
+\special{pa 131 -795}\special{pa 132 -791}\special{pa 134 -787}\special{pa 135 -782}%
+\special{pa 136 -778}\special{pa 137 -774}\special{pa 138 -770}\special{pa 140 -765}%
+\special{pa 141 -761}\special{pa 142 -756}\special{pa 143 -752}\special{pa 144 -747}%
+\special{pa 145 -742}\special{pa 147 -738}\special{pa 148 -733}\special{pa 149 -728}%
+\special{pa 150 -723}\special{pa 151 -718}\special{pa 152 -713}\special{pa 154 -708}%
+\special{pa 155 -703}\special{pa 156 -698}\special{pa 157 -693}\special{pa 158 -688}%
+\special{pa 159 -683}\special{pa 161 -678}\special{pa 162 -672}\special{pa 163 -667}%
+\special{pa 164 -661}\special{pa 165 -656}\special{pa 166 -650}\special{pa 168 -645}%
+\special{pa 169 -639}\special{pa 170 -634}\special{pa 171 -628}\special{pa 172 -622}%
+\special{pa 174 -616}\special{pa 175 -611}\special{pa 176 -605}\special{pa 177 -599}%
+\special{pa 178 -593}\special{pa 179 -587}\special{pa 181 -581}\special{pa 182 -575}%
+\special{pa 183 -568}\special{pa 184 -562}\special{pa 185 -556}\special{pa 186 -550}%
+\special{pa 188 -543}\special{pa 189 -537}\special{pa 190 -530}\special{pa 191 -524}%
+\special{pa 192 -517}\special{pa 193 -511}\special{pa 195 -504}\special{pa 196 -497}%
+\special{pa 197 -491}\special{pa 198 -484}\special{pa 199 -477}\special{pa 200 -470}%
+\special{pa 202 -463}\special{pa 203 -456}\special{pa 204 -449}\special{pa 205 -442}%
+\special{pa 206 -435}\special{pa 208 -428}\special{pa 209 -420}\special{pa 210 -413}%
+\special{pa 211 -406}\special{pa 212 -398}\special{pa 213 -391}\special{pa 215 -384}%
+\special{pa 216 -376}\special{pa 217 -369}\special{pa 218 -361}\special{pa 219 -353}%
+\special{pa 220 -346}\special{pa 222 -338}\special{pa 223 -330}\special{pa 224 -322}%
+\special{pa 225 -314}\special{pa 226 -306}\special{pa 227 -298}\special{pa 229 -290}%
+\special{pa 230 -282}\special{pa 231 -274}\special{pa 232 -266}\special{pa 233 -258}%
+\special{pa 235 -249}%
+\special{fp}%
+\special{pa 0 -955}\special{pa 0 -956}\special{pa 1 -957}\special{pa 1 -959}%
+\special{pa 1 -960}\special{pa 2 -961}\special{pa 2 -962}\special{pa 2 -963}%
+\special{pa 3 -964}\special{pa 3 -965}\special{pa 3 -966}\special{pa 4 -967}%
+\special{pa 4 -968}\special{pa 4 -968}\special{pa 5 -969}\special{pa 5 -970}%
+\special{pa 6 -970}\special{pa 6 -971}\special{pa 6 -972}\special{pa 7 -972}%
+\special{pa 7 -972}\special{pa 7 -973}\special{pa 8 -973}\special{pa 8 -973}%
+\special{pa 8 -974}\special{pa 9 -974}\special{pa 9 -974}\special{pa 9 -974}%
+\special{pa 10 -974}\special{pa 10 -974}\special{pa 10 -974}\special{pa 11 -974}%
+\special{pa 11 -974}\special{pa 11 -974}\special{pa 12 -974}\special{pa 12 -973}%
+\special{pa 12 -973}\special{pa 13 -973}\special{pa 13 -972}\special{pa 13 -972}%
+\special{pa 14 -971}\special{pa 14 -971}\special{pa 14 -970}\special{pa 15 -969}%
+\special{pa 15 -969}\special{pa 15 -968}\special{pa 16 -967}\special{pa 16 -966}%
+\special{pa 17 -965}\special{pa 17 -964}\special{pa 17 -963}\special{pa 18 -962}%
+\special{pa 18 -961}\special{pa 18 -960}\special{pa 19 -959}\special{pa 19 -958}%
+\special{pa 19 -956}\special{pa 20 -955}\special{pa 20 -954}\special{pa 20 -952}%
+\special{pa 21 -951}\special{pa 21 -949}\special{pa 21 -948}\special{pa 22 -946}%
+\special{pa 22 -944}\special{pa 22 -943}\special{pa 23 -941}\special{pa 23 -939}%
+\special{pa 23 -937}\special{pa 24 -935}\special{pa 24 -933}\special{pa 24 -931}%
+\special{pa 25 -929}\special{pa 25 -927}\special{pa 25 -925}\special{pa 26 -923}%
+\special{pa 26 -921}\special{pa 27 -918}\special{pa 27 -916}\special{pa 27 -914}%
+\special{pa 28 -911}\special{pa 28 -909}\special{pa 28 -906}\special{pa 29 -904}%
+\special{pa 29 -901}\special{pa 29 -898}\special{pa 30 -896}\special{pa 30 -893}%
+\special{pa 30 -890}\special{pa 31 -887}\special{pa 31 -884}\special{pa 31 -881}%
+\special{pa 32 -878}\special{pa 32 -875}\special{pa 32 -872}\special{pa 33 -869}%
+\special{pa 33 -866}\special{pa 33 -863}\special{pa 34 -859}\special{pa 34 -856}%
+\special{pa 34 -853}\special{pa 35 -849}\special{pa 35 -846}\special{pa 35 -842}%
+\special{pa 36 -839}\special{pa 36 -835}\special{pa 37 -831}\special{pa 37 -828}%
+\special{pa 37 -824}\special{pa 38 -820}\special{pa 38 -816}\special{pa 38 -812}%
+\special{pa 39 -808}\special{pa 39 -804}\special{pa 39 -800}\special{pa 40 -796}%
+\special{pa 40 -792}\special{pa 40 -788}\special{pa 41 -784}\special{pa 41 -779}%
+\special{pa 41 -775}\special{pa 42 -771}\special{pa 42 -766}\special{pa 42 -762}%
+\special{pa 43 -757}\special{pa 43 -753}\special{pa 43 -748}\special{pa 44 -743}%
+\special{pa 44 -739}\special{pa 44 -734}\special{pa 45 -729}\special{pa 45 -724}%
+\special{pa 45 -719}\special{pa 46 -714}\special{pa 46 -709}\special{pa 46 -704}%
+\special{pa 47 -699}\special{pa 47 -694}\special{pa 48 -689}\special{pa 48 -684}%
+\special{pa 48 -678}\special{pa 49 -673}\special{pa 49 -668}\special{pa 49 -662}%
+\special{pa 50 -657}\special{pa 50 -651}\special{pa 50 -646}\special{pa 51 -640}%
+\special{pa 51 -634}\special{pa 51 -629}\special{pa 52 -623}\special{pa 52 -617}%
+\special{pa 52 -611}\special{pa 53 -605}\special{pa 53 -599}\special{pa 53 -593}%
+\special{pa 54 -587}\special{pa 54 -581}\special{pa 54 -575}\special{pa 55 -569}%
+\special{pa 55 -562}\special{pa 55 -556}\special{pa 56 -550}\special{pa 56 -543}%
+\special{pa 56 -537}\special{pa 57 -530}\special{pa 57 -524}\special{pa 58 -517}%
+\special{pa 58 -511}\special{pa 58 -504}\special{pa 59 -497}\special{pa 59 -491}%
+\special{pa 59 -484}\special{pa 60 -477}\special{pa 60 -470}\special{pa 60 -463}%
+\special{pa 61 -456}\special{pa 61 -449}\special{pa 61 -442}\special{pa 62 -435}%
+\special{pa 62 -427}\special{pa 62 -420}\special{pa 63 -413}\special{pa 63 -406}%
+\special{pa 63 -398}\special{pa 64 -391}\special{pa 64 -383}\special{pa 64 -376}%
+\special{pa 65 -368}\special{pa 65 -361}\special{pa 65 -353}\special{pa 66 -345}%
+\special{pa 66 -337}\special{pa 66 -330}\special{pa 67 -322}\special{pa 67 -314}%
+\special{pa 68 -306}\special{pa 68 -298}\special{pa 68 -290}\special{pa 69 -282}%
+\special{pa 69 -273}%
+\special{fp}%
+\special{pa 0 -955}\special{pa -1 -956}\special{pa -1 -957}\special{pa -2 -959}%
+\special{pa -2 -960}\special{pa -3 -961}\special{pa -3 -962}\special{pa -4 -963}%
+\special{pa -4 -964}\special{pa -5 -965}\special{pa -5 -966}\special{pa -6 -967}%
+\special{pa -6 -967}\special{pa -7 -968}\special{pa -7 -969}\special{pa -8 -970}%
+\special{pa -8 -970}\special{pa -9 -971}\special{pa -9 -971}\special{pa -10 -972}%
+\special{pa -10 -972}\special{pa -11 -973}\special{pa -11 -973}\special{pa -12 -973}%
+\special{pa -12 -973}\special{pa -13 -974}\special{pa -13 -974}\special{pa -14 -974}%
+\special{pa -14 -974}\special{pa -15 -974}\special{pa -16 -974}\special{pa -16 -974}%
+\special{pa -17 -974}\special{pa -17 -973}\special{pa -18 -973}\special{pa -18 -973}%
+\special{pa -19 -972}\special{pa -19 -972}\special{pa -20 -972}\special{pa -20 -971}%
+\special{pa -21 -971}\special{pa -21 -970}\special{pa -22 -969}\special{pa -22 -969}%
+\special{pa -23 -968}\special{pa -23 -967}\special{pa -24 -966}\special{pa -24 -966}%
+\special{pa -25 -965}\special{pa -25 -964}\special{pa -26 -963}\special{pa -26 -962}%
+\special{pa -27 -961}\special{pa -27 -959}\special{pa -28 -958}\special{pa -28 -957}%
+\special{pa -29 -956}\special{pa -29 -954}\special{pa -30 -953}\special{pa -31 -951}%
+\special{pa -31 -950}\special{pa -32 -948}\special{pa -32 -947}\special{pa -33 -945}%
+\special{pa -33 -944}\special{pa -34 -942}\special{pa -34 -940}\special{pa -35 -938}%
+\special{pa -35 -936}\special{pa -36 -934}\special{pa -36 -932}\special{pa -37 -930}%
+\special{pa -37 -928}\special{pa -38 -926}\special{pa -38 -924}\special{pa -39 -922}%
+\special{pa -39 -920}\special{pa -40 -917}\special{pa -40 -915}\special{pa -41 -913}%
+\special{pa -41 -910}\special{pa -42 -908}\special{pa -42 -905}\special{pa -43 -903}%
+\special{pa -43 -900}\special{pa -44 -897}\special{pa -44 -895}\special{pa -45 -892}%
+\special{pa -46 -889}\special{pa -46 -886}\special{pa -47 -883}\special{pa -47 -880}%
+\special{pa -48 -877}\special{pa -48 -874}\special{pa -49 -871}\special{pa -49 -868}%
+\special{pa -50 -865}\special{pa -50 -861}\special{pa -51 -858}\special{pa -51 -855}%
+\special{pa -52 -851}\special{pa -52 -848}\special{pa -53 -844}\special{pa -53 -841}%
+\special{pa -54 -837}\special{pa -54 -834}\special{pa -55 -830}\special{pa -55 -826}%
+\special{pa -56 -822}\special{pa -56 -819}\special{pa -57 -815}\special{pa -57 -811}%
+\special{pa -58 -807}\special{pa -58 -803}\special{pa -59 -799}\special{pa -59 -795}%
+\special{pa -60 -791}\special{pa -61 -786}\special{pa -61 -782}\special{pa -62 -778}%
+\special{pa -62 -773}\special{pa -63 -769}\special{pa -63 -765}\special{pa -64 -760}%
+\special{pa -64 -756}\special{pa -65 -751}\special{pa -65 -746}\special{pa -66 -742}%
+\special{pa -66 -737}\special{pa -67 -732}\special{pa -67 -727}\special{pa -68 -722}%
+\special{pa -68 -717}\special{pa -69 -713}\special{pa -69 -707}\special{pa -70 -702}%
+\special{pa -70 -697}\special{pa -71 -692}\special{pa -71 -687}\special{pa -72 -682}%
+\special{pa -72 -676}\special{pa -73 -671}\special{pa -73 -666}\special{pa -74 -660}%
+\special{pa -75 -655}\special{pa -75 -649}\special{pa -76 -644}\special{pa -76 -638}%
+\special{pa -77 -632}\special{pa -77 -626}\special{pa -78 -621}\special{pa -78 -615}%
+\special{pa -79 -609}\special{pa -79 -603}\special{pa -80 -597}\special{pa -80 -591}%
+\special{pa -81 -585}\special{pa -81 -579}\special{pa -82 -573}\special{pa -82 -566}%
+\special{pa -83 -560}\special{pa -83 -554}\special{pa -84 -548}\special{pa -84 -541}%
+\special{pa -85 -535}\special{pa -85 -528}\special{pa -86 -522}\special{pa -86 -515}%
+\special{pa -87 -508}\special{pa -87 -502}\special{pa -88 -495}\special{pa -88 -488}%
+\special{pa -89 -481}\special{pa -90 -475}\special{pa -90 -468}\special{pa -91 -461}%
+\special{pa -91 -454}\special{pa -92 -447}\special{pa -92 -439}\special{pa -93 -432}%
+\special{pa -93 -425}\special{pa -94 -418}\special{pa -94 -410}\special{pa -95 -403}%
+\special{pa -95 -396}\special{pa -96 -388}\special{pa -96 -381}\special{pa -97 -373}%
+\special{pa -97 -366}\special{pa -98 -358}\special{pa -98 -350}\special{pa -99 -342}%
+\special{pa -99 -335}\special{pa -100 -327}\special{pa -100 -319}\special{pa -101 -311}%
+\special{pa -101 -303}\special{pa -102 -295}\special{pa -102 -287}\special{pa -103 -279}%
+\special{pa -103 -271}%
+\special{fp}%
+\special{pa 0 -955}\special{pa -1 -956}\special{pa -3 -957}\special{pa -4 -958}%
+\special{pa -5 -959}\special{pa -7 -960}\special{pa -8 -961}\special{pa -9 -962}%
+\special{pa -11 -963}\special{pa -12 -964}\special{pa -13 -964}\special{pa -15 -965}%
+\special{pa -16 -966}\special{pa -17 -966}\special{pa -19 -967}\special{pa -20 -967}%
+\special{pa -21 -968}\special{pa -23 -968}\special{pa -24 -969}\special{pa -25 -969}%
+\special{pa -27 -969}\special{pa -28 -970}\special{pa -29 -970}\special{pa -31 -970}%
+\special{pa -32 -970}\special{pa -33 -970}\special{pa -35 -970}\special{pa -36 -970}%
+\special{pa -37 -970}\special{pa -39 -970}\special{pa -40 -969}\special{pa -41 -969}%
+\special{pa -43 -969}\special{pa -44 -969}\special{pa -45 -968}\special{pa -46 -968}%
+\special{pa -48 -967}\special{pa -49 -967}\special{pa -50 -966}\special{pa -52 -965}%
+\special{pa -53 -965}\special{pa -54 -964}\special{pa -56 -963}\special{pa -57 -962}%
+\special{pa -58 -962}\special{pa -60 -961}\special{pa -61 -960}\special{pa -62 -959}%
+\special{pa -64 -958}\special{pa -65 -957}\special{pa -66 -955}\special{pa -68 -954}%
+\special{pa -69 -953}\special{pa -70 -952}\special{pa -72 -950}\special{pa -73 -949}%
+\special{pa -74 -947}\special{pa -76 -946}\special{pa -77 -944}\special{pa -78 -943}%
+\special{pa -80 -941}\special{pa -81 -940}\special{pa -82 -938}\special{pa -84 -936}%
+\special{pa -85 -934}\special{pa -86 -932}\special{pa -88 -930}\special{pa -89 -928}%
+\special{pa -90 -926}\special{pa -92 -924}\special{pa -93 -922}\special{pa -94 -920}%
+\special{pa -96 -918}\special{pa -97 -916}\special{pa -98 -913}\special{pa -100 -911}%
+\special{pa -101 -909}\special{pa -102 -906}\special{pa -104 -904}\special{pa -105 -901}%
+\special{pa -106 -899}\special{pa -108 -896}\special{pa -109 -893}\special{pa -110 -890}%
+\special{pa -112 -888}\special{pa -113 -885}\special{pa -114 -882}\special{pa -116 -879}%
+\special{pa -117 -876}\special{pa -118 -873}\special{pa -120 -870}\special{pa -121 -867}%
+\special{pa -122 -864}\special{pa -124 -861}\special{pa -125 -857}\special{pa -126 -854}%
+\special{pa -128 -851}\special{pa -129 -847}\special{pa -130 -844}\special{pa -132 -840}%
+\special{pa -133 -837}\special{pa -134 -833}\special{pa -136 -830}\special{pa -137 -826}%
+\special{pa -138 -822}\special{pa -139 -818}\special{pa -141 -814}\special{pa -142 -811}%
+\special{pa -143 -807}\special{pa -145 -803}\special{pa -146 -799}\special{pa -147 -795}%
+\special{pa -149 -791}\special{pa -150 -786}\special{pa -151 -782}\special{pa -153 -778}%
+\special{pa -154 -774}\special{pa -155 -769}\special{pa -157 -765}\special{pa -158 -760}%
+\special{pa -159 -756}\special{pa -161 -751}\special{pa -162 -747}\special{pa -163 -742}%
+\special{pa -165 -737}\special{pa -166 -733}\special{pa -167 -728}\special{pa -169 -723}%
+\special{pa -170 -718}\special{pa -171 -713}\special{pa -173 -708}\special{pa -174 -703}%
+\special{pa -175 -698}\special{pa -177 -693}\special{pa -178 -688}\special{pa -179 -683}%
+\special{pa -181 -677}\special{pa -182 -672}\special{pa -183 -667}\special{pa -185 -661}%
+\special{pa -186 -656}\special{pa -187 -650}\special{pa -189 -645}\special{pa -190 -639}%
+\special{pa -191 -634}\special{pa -193 -628}\special{pa -194 -622}\special{pa -195 -616}%
+\special{pa -197 -611}\special{pa -198 -605}\special{pa -199 -599}\special{pa -201 -593}%
+\special{pa -202 -587}\special{pa -203 -581}\special{pa -205 -575}\special{pa -206 -568}%
+\special{pa -207 -562}\special{pa -209 -556}\special{pa -210 -550}\special{pa -211 -543}%
+\special{pa -213 -537}\special{pa -214 -530}\special{pa -215 -524}\special{pa -217 -517}%
+\special{pa -218 -511}\special{pa -219 -504}\special{pa -221 -497}\special{pa -222 -491}%
+\special{pa -223 -484}\special{pa -225 -477}\special{pa -226 -470}\special{pa -227 -463}%
+\special{pa -229 -456}\special{pa -230 -449}\special{pa -231 -442}\special{pa -232 -435}%
+\special{pa -234 -428}\special{pa -235 -421}\special{pa -236 -413}\special{pa -238 -406}%
+\special{pa -239 -399}\special{pa -240 -391}\special{pa -242 -384}\special{pa -243 -376}%
+\special{pa -244 -369}\special{pa -246 -361}\special{pa -247 -354}\special{pa -248 -346}%
+\special{pa -250 -338}\special{pa -251 -330}\special{pa -252 -322}\special{pa -254 -315}%
+\special{pa -255 -307}\special{pa -256 -299}\special{pa -258 -291}\special{pa -259 -283}%
+\special{pa -260 -274}\special{pa -262 -266}\special{pa -263 -258}\special{pa -264 -250}%
+\special{pa -266 -241}%
+\special{fp}%
+\special{pa 0 -955}\special{pa -2 -956}\special{pa -4 -956}\special{pa -6 -957}%
+\special{pa -8 -958}\special{pa -10 -959}\special{pa -12 -959}\special{pa -14 -960}%
+\special{pa -16 -961}\special{pa -18 -961}\special{pa -20 -962}\special{pa -22 -962}%
+\special{pa -24 -963}\special{pa -26 -963}\special{pa -28 -963}\special{pa -30 -963}%
+\special{pa -32 -964}\special{pa -34 -964}\special{pa -36 -964}\special{pa -38 -964}%
+\special{pa -40 -964}\special{pa -42 -964}\special{pa -44 -964}\special{pa -46 -964}%
+\special{pa -48 -964}\special{pa -50 -963}\special{pa -52 -963}\special{pa -54 -963}%
+\special{pa -56 -962}\special{pa -58 -962}\special{pa -60 -961}\special{pa -62 -961}%
+\special{pa -64 -960}\special{pa -66 -960}\special{pa -68 -959}\special{pa -70 -958}%
+\special{pa -72 -958}\special{pa -74 -957}\special{pa -76 -956}\special{pa -78 -955}%
+\special{pa -80 -954}\special{pa -82 -953}\special{pa -84 -952}\special{pa -86 -951}%
+\special{pa -88 -950}\special{pa -90 -949}\special{pa -92 -948}\special{pa -94 -946}%
+\special{pa -96 -945}\special{pa -98 -944}\special{pa -100 -942}\special{pa -102 -941}%
+\special{pa -105 -939}\special{pa -107 -938}\special{pa -109 -936}\special{pa -111 -934}%
+\special{pa -113 -933}\special{pa -115 -931}\special{pa -117 -929}\special{pa -119 -927}%
+\special{pa -121 -925}\special{pa -123 -923}\special{pa -125 -921}\special{pa -127 -919}%
+\special{pa -129 -917}\special{pa -131 -915}\special{pa -133 -913}\special{pa -135 -911}%
+\special{pa -137 -908}\special{pa -139 -906}\special{pa -141 -904}\special{pa -143 -901}%
+\special{pa -145 -899}\special{pa -147 -896}\special{pa -149 -894}\special{pa -151 -891}%
+\special{pa -153 -888}\special{pa -155 -886}\special{pa -157 -883}\special{pa -159 -880}%
+\special{pa -161 -877}\special{pa -163 -874}\special{pa -165 -872}\special{pa -167 -869}%
+\special{pa -169 -865}\special{pa -171 -862}\special{pa -173 -859}\special{pa -175 -856}%
+\special{pa -177 -853}\special{pa -179 -850}\special{pa -181 -846}\special{pa -183 -843}%
+\special{pa -185 -839}\special{pa -187 -836}\special{pa -189 -832}\special{pa -191 -829}%
+\special{pa -193 -825}\special{pa -195 -822}\special{pa -197 -818}\special{pa -199 -814}%
+\special{pa -201 -810}\special{pa -203 -806}\special{pa -205 -803}\special{pa -207 -799}%
+\special{pa -209 -795}\special{pa -211 -791}\special{pa -213 -786}\special{pa -215 -782}%
+\special{pa -217 -778}\special{pa -219 -774}\special{pa -221 -770}\special{pa -223 -765}%
+\special{pa -225 -761}\special{pa -227 -756}\special{pa -229 -752}\special{pa -231 -747}%
+\special{pa -233 -743}\special{pa -235 -738}\special{pa -237 -734}\special{pa -239 -729}%
+\special{pa -241 -724}\special{pa -243 -719}\special{pa -245 -714}\special{pa -247 -710}%
+\special{pa -249 -705}\special{pa -251 -700}\special{pa -253 -695}\special{pa -255 -689}%
+\special{pa -257 -684}\special{pa -259 -679}\special{pa -261 -674}\special{pa -263 -669}%
+\special{pa -265 -663}\special{pa -267 -658}\special{pa -269 -652}\special{pa -271 -647}%
+\special{pa -273 -641}\special{pa -275 -636}\special{pa -277 -630}\special{pa -279 -625}%
+\special{pa -281 -619}\special{pa -283 -613}\special{pa -285 -607}\special{pa -287 -601}%
+\special{pa -289 -596}\special{pa -291 -590}\special{pa -293 -584}\special{pa -295 -578}%
+\special{pa -297 -571}\special{pa -299 -565}\special{pa -301 -559}\special{pa -303 -553}%
+\special{pa -305 -547}\special{pa -307 -540}\special{pa -309 -534}\special{pa -311 -527}%
+\special{pa -314 -521}\special{pa -316 -514}\special{pa -318 -508}\special{pa -320 -501}%
+\special{pa -322 -495}\special{pa -324 -488}\special{pa -326 -481}\special{pa -328 -474}%
+\special{pa -330 -467}\special{pa -332 -460}\special{pa -334 -454}\special{pa -336 -447}%
+\special{pa -338 -439}\special{pa -340 -432}\special{pa -342 -425}\special{pa -344 -418}%
+\special{pa -346 -411}\special{pa -348 -403}\special{pa -350 -396}\special{pa -352 -389}%
+\special{pa -354 -381}\special{pa -356 -374}\special{pa -358 -366}\special{pa -360 -359}%
+\special{pa -362 -351}\special{pa -364 -343}\special{pa -366 -336}\special{pa -368 -328}%
+\special{pa -370 -320}\special{pa -372 -312}\special{pa -374 -304}\special{pa -376 -296}%
+\special{pa -378 -288}\special{pa -380 -280}\special{pa -382 -272}\special{pa -384 -264}%
+\special{pa -386 -256}\special{pa -388 -248}\special{pa -390 -239}\special{pa -392 -231}%
+\special{pa -394 -223}\special{pa -396 -214}\special{pa -398 -206}\special{pa -400 -197}%
+\special{pa -402 -189}%
+\special{fp}%
+\special{pa 0 -955}\special{pa -2 -955}\special{pa -5 -956}\special{pa -7 -956}%
+\special{pa -10 -957}\special{pa -12 -957}\special{pa -15 -957}\special{pa -17 -958}%
+\special{pa -20 -958}\special{pa -22 -958}\special{pa -25 -958}\special{pa -27 -958}%
+\special{pa -30 -958}\special{pa -32 -958}\special{pa -35 -958}\special{pa -37 -958}%
+\special{pa -40 -958}\special{pa -42 -958}\special{pa -45 -957}\special{pa -47 -957}%
+\special{pa -50 -957}\special{pa -52 -956}\special{pa -55 -956}\special{pa -57 -956}%
+\special{pa -60 -955}\special{pa -62 -954}\special{pa -65 -954}\special{pa -67 -953}%
+\special{pa -70 -952}\special{pa -72 -952}\special{pa -75 -951}\special{pa -77 -950}%
+\special{pa -80 -949}\special{pa -82 -948}\special{pa -85 -947}\special{pa -87 -946}%
+\special{pa -90 -945}\special{pa -92 -944}\special{pa -95 -942}\special{pa -97 -941}%
+\special{pa -100 -940}\special{pa -102 -939}\special{pa -105 -937}\special{pa -107 -936}%
+\special{pa -110 -934}\special{pa -112 -933}\special{pa -115 -931}\special{pa -117 -930}%
+\special{pa -120 -928}\special{pa -122 -926}\special{pa -125 -924}\special{pa -127 -922}%
+\special{pa -130 -921}\special{pa -132 -919}\special{pa -135 -917}\special{pa -137 -915}%
+\special{pa -140 -913}\special{pa -142 -911}\special{pa -145 -908}\special{pa -147 -906}%
+\special{pa -150 -904}\special{pa -152 -902}\special{pa -155 -899}\special{pa -157 -897}%
+\special{pa -160 -894}\special{pa -162 -892}\special{pa -165 -889}\special{pa -167 -887}%
+\special{pa -170 -884}\special{pa -172 -881}\special{pa -175 -879}\special{pa -177 -876}%
+\special{pa -180 -873}\special{pa -182 -870}\special{pa -185 -867}\special{pa -187 -864}%
+\special{pa -190 -861}\special{pa -192 -858}\special{pa -195 -855}\special{pa -197 -852}%
+\special{pa -200 -849}\special{pa -202 -846}\special{pa -205 -842}\special{pa -207 -839}%
+\special{pa -209 -836}\special{pa -212 -832}\special{pa -214 -829}\special{pa -217 -825}%
+\special{pa -219 -821}\special{pa -222 -818}\special{pa -224 -814}\special{pa -227 -810}%
+\special{pa -229 -807}\special{pa -232 -803}\special{pa -234 -799}\special{pa -237 -795}%
+\special{pa -239 -791}\special{pa -242 -787}\special{pa -244 -783}\special{pa -247 -779}%
+\special{pa -249 -775}\special{pa -252 -770}\special{pa -254 -766}\special{pa -257 -762}%
+\special{pa -259 -757}\special{pa -262 -753}\special{pa -264 -749}\special{pa -267 -744}%
+\special{pa -269 -740}\special{pa -272 -735}\special{pa -274 -730}\special{pa -277 -726}%
+\special{pa -279 -721}\special{pa -282 -716}\special{pa -284 -711}\special{pa -287 -706}%
+\special{pa -289 -702}\special{pa -292 -697}\special{pa -294 -692}\special{pa -297 -686}%
+\special{pa -299 -681}\special{pa -302 -676}\special{pa -304 -671}\special{pa -307 -666}%
+\special{pa -309 -660}\special{pa -312 -655}\special{pa -314 -650}\special{pa -317 -644}%
+\special{pa -319 -639}\special{pa -322 -633}\special{pa -324 -628}\special{pa -327 -622}%
+\special{pa -329 -616}\special{pa -332 -610}\special{pa -334 -605}\special{pa -337 -599}%
+\special{pa -339 -593}\special{pa -342 -587}\special{pa -344 -581}\special{pa -347 -575}%
+\special{pa -349 -569}\special{pa -352 -563}\special{pa -354 -557}\special{pa -357 -550}%
+\special{pa -359 -544}\special{pa -362 -538}\special{pa -364 -532}\special{pa -367 -525}%
+\special{pa -369 -519}\special{pa -372 -512}\special{pa -374 -506}\special{pa -377 -499}%
+\special{pa -379 -492}\special{pa -382 -486}\special{pa -384 -479}\special{pa -387 -472}%
+\special{pa -389 -465}\special{pa -392 -458}\special{pa -394 -451}\special{pa -397 -445}%
+\special{pa -399 -437}\special{pa -402 -430}\special{pa -404 -423}\special{pa -407 -416}%
+\special{pa -409 -409}\special{pa -412 -402}\special{pa -414 -394}\special{pa -417 -387}%
+\special{pa -419 -380}\special{pa -421 -372}\special{pa -424 -365}\special{pa -426 -357}%
+\special{pa -429 -349}\special{pa -431 -342}\special{pa -434 -334}\special{pa -436 -326}%
+\special{pa -439 -319}\special{pa -441 -311}\special{pa -444 -303}\special{pa -446 -295}%
+\special{pa -449 -287}\special{pa -451 -279}\special{pa -454 -271}\special{pa -456 -263}%
+\special{pa -459 -255}\special{pa -461 -246}\special{pa -464 -238}\special{pa -466 -230}%
+\special{pa -469 -221}\special{pa -471 -213}\special{pa -474 -204}\special{pa -476 -196}%
+\special{pa -479 -187}\special{pa -481 -179}\special{pa -484 -170}\special{pa -486 -161}%
+\special{pa -489 -153}\special{pa -491 -144}\special{pa -494 -135}\special{pa -496 -126}%
+\special{pa -499 -117}%
+\special{fp}%
+\special{pa 0 -955}\special{pa -3 -955}\special{pa -5 -955}\special{pa -8 -955}%
+\special{pa -11 -955}\special{pa -14 -955}\special{pa -16 -955}\special{pa -19 -955}%
+\special{pa -22 -955}\special{pa -25 -954}\special{pa -27 -954}\special{pa -30 -954}%
+\special{pa -33 -953}\special{pa -36 -953}\special{pa -38 -952}\special{pa -41 -952}%
+\special{pa -44 -951}\special{pa -46 -951}\special{pa -49 -950}\special{pa -52 -949}%
+\special{pa -55 -949}\special{pa -57 -948}\special{pa -60 -947}\special{pa -63 -946}%
+\special{pa -66 -945}\special{pa -68 -944}\special{pa -71 -943}\special{pa -74 -942}%
+\special{pa -77 -941}\special{pa -79 -940}\special{pa -82 -938}\special{pa -85 -937}%
+\special{pa -87 -936}\special{pa -90 -934}\special{pa -93 -933}\special{pa -96 -931}%
+\special{pa -98 -930}\special{pa -101 -928}\special{pa -104 -927}\special{pa -107 -925}%
+\special{pa -109 -923}\special{pa -112 -922}\special{pa -115 -920}\special{pa -118 -918}%
+\special{pa -120 -916}\special{pa -123 -914}\special{pa -126 -912}\special{pa -129 -910}%
+\special{pa -131 -908}\special{pa -134 -906}\special{pa -137 -904}\special{pa -139 -901}%
+\special{pa -142 -899}\special{pa -145 -897}\special{pa -148 -894}\special{pa -150 -892}%
+\special{pa -153 -889}\special{pa -156 -887}\special{pa -159 -884}\special{pa -161 -882}%
+\special{pa -164 -879}\special{pa -167 -876}\special{pa -170 -874}\special{pa -172 -871}%
+\special{pa -175 -868}\special{pa -178 -865}\special{pa -180 -862}\special{pa -183 -859}%
+\special{pa -186 -856}\special{pa -189 -853}\special{pa -191 -850}\special{pa -194 -847}%
+\special{pa -197 -843}\special{pa -200 -840}\special{pa -202 -837}\special{pa -205 -833}%
+\special{pa -208 -830}\special{pa -211 -826}\special{pa -213 -823}\special{pa -216 -819}%
+\special{pa -219 -816}\special{pa -221 -812}\special{pa -224 -808}\special{pa -227 -805}%
+\special{pa -230 -801}\special{pa -232 -797}\special{pa -235 -793}\special{pa -238 -789}%
+\special{pa -241 -785}\special{pa -243 -781}\special{pa -246 -777}\special{pa -249 -773}%
+\special{pa -252 -769}\special{pa -254 -764}\special{pa -257 -760}\special{pa -260 -756}%
+\special{pa -262 -751}\special{pa -265 -747}\special{pa -268 -742}\special{pa -271 -738}%
+\special{pa -273 -733}\special{pa -276 -729}\special{pa -279 -724}\special{pa -282 -719}%
+\special{pa -284 -714}\special{pa -287 -710}\special{pa -290 -705}\special{pa -293 -700}%
+\special{pa -295 -695}\special{pa -298 -690}\special{pa -301 -685}\special{pa -304 -680}%
+\special{pa -306 -675}\special{pa -309 -669}\special{pa -312 -664}\special{pa -314 -659}%
+\special{pa -317 -653}\special{pa -320 -648}\special{pa -323 -643}\special{pa -325 -637}%
+\special{pa -328 -632}\special{pa -331 -626}\special{pa -334 -620}\special{pa -336 -615}%
+\special{pa -339 -609}\special{pa -342 -603}\special{pa -345 -597}\special{pa -347 -592}%
+\special{pa -350 -586}\special{pa -353 -580}\special{pa -355 -574}\special{pa -358 -568}%
+\special{pa -361 -562}\special{pa -364 -555}\special{pa -366 -549}\special{pa -369 -543}%
+\special{pa -372 -537}\special{pa -375 -530}\special{pa -377 -524}\special{pa -380 -517}%
+\special{pa -383 -511}\special{pa -386 -504}\special{pa -388 -498}\special{pa -391 -491}%
+\special{pa -394 -485}\special{pa -396 -478}\special{pa -399 -471}\special{pa -402 -464}%
+\special{pa -405 -457}\special{pa -407 -450}\special{pa -410 -444}\special{pa -413 -436}%
+\special{pa -416 -429}\special{pa -418 -422}\special{pa -421 -415}\special{pa -424 -408}%
+\special{pa -427 -401}\special{pa -429 -393}\special{pa -432 -386}\special{pa -435 -379}%
+\special{pa -437 -371}\special{pa -440 -364}\special{pa -443 -356}\special{pa -446 -349}%
+\special{pa -448 -341}\special{pa -451 -333}\special{pa -454 -326}\special{pa -457 -318}%
+\special{pa -459 -310}\special{pa -462 -302}\special{pa -465 -294}\special{pa -468 -286}%
+\special{pa -470 -278}\special{pa -473 -270}\special{pa -476 -262}\special{pa -479 -254}%
+\special{pa -481 -246}\special{pa -484 -237}\special{pa -487 -229}\special{pa -489 -221}%
+\special{pa -492 -212}\special{pa -495 -204}\special{pa -498 -195}\special{pa -500 -187}%
+\special{pa -503 -178}\special{pa -506 -170}\special{pa -509 -161}\special{pa -511 -152}%
+\special{pa -514 -143}\special{pa -517 -135}\special{pa -520 -126}\special{pa -522 -117}%
+\special{pa -525 -108}\special{pa -528 -99}\special{pa -530 -90}\special{pa -533 -81}%
+\special{pa -536 -72}\special{pa -539 -62}\special{pa -541 -53}\special{pa -544 -44}%
+\special{pa -547 -34}%
+\special{fp}%
+\special{pa 0 -955}\special{pa -3 -954}\special{pa -5 -954}\special{pa -8 -954}%
+\special{pa -11 -953}\special{pa -14 -953}\special{pa -16 -952}\special{pa -19 -952}%
+\special{pa -22 -951}\special{pa -24 -950}\special{pa -27 -950}\special{pa -30 -949}%
+\special{pa -32 -948}\special{pa -35 -947}\special{pa -38 -946}\special{pa -41 -945}%
+\special{pa -43 -944}\special{pa -46 -943}\special{pa -49 -942}\special{pa -51 -941}%
+\special{pa -54 -940}\special{pa -57 -939}\special{pa -60 -937}\special{pa -62 -936}%
+\special{pa -65 -935}\special{pa -68 -933}\special{pa -70 -932}\special{pa -73 -930}%
+\special{pa -76 -929}\special{pa -79 -927}\special{pa -81 -925}\special{pa -84 -924}%
+\special{pa -87 -922}\special{pa -89 -920}\special{pa -92 -918}\special{pa -95 -916}%
+\special{pa -97 -914}\special{pa -100 -912}\special{pa -103 -910}\special{pa -106 -908}%
+\special{pa -108 -906}\special{pa -111 -904}\special{pa -114 -902}\special{pa -116 -899}%
+\special{pa -119 -897}\special{pa -122 -895}\special{pa -125 -892}\special{pa -127 -890}%
+\special{pa -130 -887}\special{pa -133 -885}\special{pa -135 -882}\special{pa -138 -879}%
+\special{pa -141 -877}\special{pa -143 -874}\special{pa -146 -871}\special{pa -149 -868}%
+\special{pa -152 -865}\special{pa -154 -862}\special{pa -157 -859}\special{pa -160 -856}%
+\special{pa -162 -853}\special{pa -165 -850}\special{pa -168 -847}\special{pa -171 -844}%
+\special{pa -173 -840}\special{pa -176 -837}\special{pa -179 -834}\special{pa -181 -830}%
+\special{pa -184 -827}\special{pa -187 -823}\special{pa -189 -820}\special{pa -192 -816}%
+\special{pa -195 -812}\special{pa -198 -809}\special{pa -200 -805}\special{pa -203 -801}%
+\special{pa -206 -797}\special{pa -208 -793}\special{pa -211 -789}\special{pa -214 -785}%
+\special{pa -217 -781}\special{pa -219 -777}\special{pa -222 -773}\special{pa -225 -769}%
+\special{pa -227 -765}\special{pa -230 -760}\special{pa -233 -756}\special{pa -236 -752}%
+\special{pa -238 -747}\special{pa -241 -743}\special{pa -244 -738}\special{pa -246 -733}%
+\special{pa -249 -729}\special{pa -252 -724}\special{pa -254 -719}\special{pa -257 -715}%
+\special{pa -260 -710}\special{pa -263 -705}\special{pa -265 -700}\special{pa -268 -695}%
+\special{pa -271 -690}\special{pa -273 -685}\special{pa -276 -680}\special{pa -279 -675}%
+\special{pa -282 -670}\special{pa -284 -664}\special{pa -287 -659}\special{pa -290 -654}%
+\special{pa -292 -648}\special{pa -295 -643}\special{pa -298 -637}\special{pa -300 -632}%
+\special{pa -303 -626}\special{pa -306 -621}\special{pa -309 -615}\special{pa -311 -609}%
+\special{pa -314 -604}\special{pa -317 -598}\special{pa -319 -592}\special{pa -322 -586}%
+\special{pa -325 -580}\special{pa -328 -574}\special{pa -330 -568}\special{pa -333 -562}%
+\special{pa -336 -556}\special{pa -338 -549}\special{pa -341 -543}\special{pa -344 -537}%
+\special{pa -346 -531}\special{pa -349 -524}\special{pa -352 -518}\special{pa -355 -511}%
+\special{pa -357 -505}\special{pa -360 -498}\special{pa -363 -491}\special{pa -365 -485}%
+\special{pa -368 -478}\special{pa -371 -471}\special{pa -374 -464}\special{pa -376 -458}%
+\special{pa -379 -451}\special{pa -382 -444}\special{pa -384 -437}\special{pa -387 -430}%
+\special{pa -390 -423}\special{pa -393 -415}\special{pa -395 -408}\special{pa -398 -401}%
+\special{pa -401 -394}\special{pa -403 -386}\special{pa -406 -379}\special{pa -409 -371}%
+\special{pa -411 -364}\special{pa -414 -356}\special{pa -417 -349}\special{pa -420 -341}%
+\special{pa -422 -333}\special{pa -425 -326}\special{pa -428 -318}\special{pa -430 -310}%
+\special{pa -433 -302}\special{pa -436 -294}\special{pa -439 -286}\special{pa -441 -278}%
+\special{pa -444 -270}\special{pa -447 -262}\special{pa -449 -254}\special{pa -452 -246}%
+\special{pa -455 -238}\special{pa -457 -229}\special{pa -460 -221}\special{pa -463 -213}%
+\special{pa -466 -204}\special{pa -468 -196}\special{pa -471 -187}\special{pa -474 -178}%
+\special{pa -476 -170}\special{pa -479 -161}\special{pa -482 -152}\special{pa -485 -144}%
+\special{pa -487 -135}\special{pa -490 -126}\special{pa -493 -117}\special{pa -495 -108}%
+\special{pa -498 -99}\special{pa -501 -90}\special{pa -503 -81}\special{pa -506 -72}%
+\special{pa -509 -62}\special{pa -512 -53}\special{pa -514 -44}\special{pa -517 -35}%
+\special{pa -520 -25}\special{pa -522 -16}\special{pa -525 -6}\special{pa -528 3}%
+\special{pa -531 13}\special{pa -533 23}\special{pa -536 32}\special{pa -539 42}%
+\special{pa -541 52}%
+\special{fp}%
+\special{pa 0 -955}\special{pa -2 -954}\special{pa -5 -953}\special{pa -7 -952}%
+\special{pa -10 -952}\special{pa -12 -951}\special{pa -14 -950}\special{pa -17 -949}%
+\special{pa -19 -948}\special{pa -22 -947}\special{pa -24 -946}\special{pa -27 -944}%
+\special{pa -29 -943}\special{pa -31 -942}\special{pa -34 -941}\special{pa -36 -939}%
+\special{pa -39 -938}\special{pa -41 -936}\special{pa -43 -935}\special{pa -46 -933}%
+\special{pa -48 -932}\special{pa -51 -930}\special{pa -53 -929}\special{pa -56 -927}%
+\special{pa -58 -925}\special{pa -60 -923}\special{pa -63 -921}\special{pa -65 -919}%
+\special{pa -68 -917}\special{pa -70 -915}\special{pa -72 -913}\special{pa -75 -911}%
+\special{pa -77 -909}\special{pa -80 -907}\special{pa -82 -904}\special{pa -85 -902}%
+\special{pa -87 -900}\special{pa -89 -897}\special{pa -92 -895}\special{pa -94 -892}%
+\special{pa -97 -890}\special{pa -99 -887}\special{pa -101 -885}\special{pa -104 -882}%
+\special{pa -106 -879}\special{pa -109 -876}\special{pa -111 -874}\special{pa -113 -871}%
+\special{pa -116 -868}\special{pa -118 -865}\special{pa -121 -862}\special{pa -123 -859}%
+\special{pa -126 -856}\special{pa -128 -852}\special{pa -130 -849}\special{pa -133 -846}%
+\special{pa -135 -843}\special{pa -138 -839}\special{pa -140 -836}\special{pa -142 -832}%
+\special{pa -145 -829}\special{pa -147 -825}\special{pa -150 -822}\special{pa -152 -818}%
+\special{pa -155 -814}\special{pa -157 -811}\special{pa -159 -807}\special{pa -162 -803}%
+\special{pa -164 -799}\special{pa -167 -795}\special{pa -169 -791}\special{pa -171 -787}%
+\special{pa -174 -783}\special{pa -176 -779}\special{pa -179 -775}\special{pa -181 -771}%
+\special{pa -184 -766}\special{pa -186 -762}\special{pa -188 -758}\special{pa -191 -753}%
+\special{pa -193 -749}\special{pa -196 -744}\special{pa -198 -740}\special{pa -200 -735}%
+\special{pa -203 -730}\special{pa -205 -726}\special{pa -208 -721}\special{pa -210 -716}%
+\special{pa -212 -711}\special{pa -215 -707}\special{pa -217 -702}\special{pa -220 -697}%
+\special{pa -222 -692}\special{pa -225 -686}\special{pa -227 -681}\special{pa -229 -676}%
+\special{pa -232 -671}\special{pa -234 -666}\special{pa -237 -660}\special{pa -239 -655}%
+\special{pa -241 -650}\special{pa -244 -644}\special{pa -246 -639}\special{pa -249 -633}%
+\special{pa -251 -627}\special{pa -254 -622}\special{pa -256 -616}\special{pa -258 -610}%
+\special{pa -261 -605}\special{pa -263 -599}\special{pa -266 -593}\special{pa -268 -587}%
+\special{pa -270 -581}\special{pa -273 -575}\special{pa -275 -569}\special{pa -278 -563}%
+\special{pa -280 -556}\special{pa -283 -550}\special{pa -285 -544}\special{pa -287 -538}%
+\special{pa -290 -531}\special{pa -292 -525}\special{pa -295 -518}\special{pa -297 -512}%
+\special{pa -299 -505}\special{pa -302 -499}\special{pa -304 -492}\special{pa -307 -485}%
+\special{pa -309 -479}\special{pa -311 -472}\special{pa -314 -465}\special{pa -316 -458}%
+\special{pa -319 -451}\special{pa -321 -444}\special{pa -324 -437}\special{pa -326 -430}%
+\special{pa -328 -423}\special{pa -331 -416}\special{pa -333 -408}\special{pa -336 -401}%
+\special{pa -338 -394}\special{pa -340 -387}\special{pa -343 -379}\special{pa -345 -372}%
+\special{pa -348 -364}\special{pa -350 -357}\special{pa -353 -349}\special{pa -355 -341}%
+\special{pa -357 -334}\special{pa -360 -326}\special{pa -362 -318}\special{pa -365 -310}%
+\special{pa -367 -302}\special{pa -369 -294}\special{pa -372 -286}\special{pa -374 -278}%
+\special{pa -377 -270}\special{pa -379 -262}\special{pa -381 -254}\special{pa -384 -246}%
+\special{pa -386 -237}\special{pa -389 -229}\special{pa -391 -221}\special{pa -394 -212}%
+\special{pa -396 -204}\special{pa -398 -195}\special{pa -401 -187}\special{pa -403 -178}%
+\special{pa -406 -169}\special{pa -408 -161}\special{pa -410 -152}\special{pa -413 -143}%
+\special{pa -415 -134}\special{pa -418 -125}\special{pa -420 -116}\special{pa -423 -108}%
+\special{pa -425 -98}\special{pa -427 -89}\special{pa -430 -80}\special{pa -432 -71}%
+\special{pa -435 -62}\special{pa -437 -53}\special{pa -439 -43}\special{pa -442 -34}%
+\special{pa -444 -24}\special{pa -447 -15}\special{pa -449 -5}\special{pa -452 4}%
+\special{pa -454 14}\special{pa -456 23}\special{pa -459 33}\special{pa -461 43}%
+\special{pa -464 53}\special{pa -466 63}\special{pa -468 72}\special{pa -471 82}%
+\special{pa -473 92}\special{pa -476 102}\special{pa -478 113}\special{pa -480 123}%
+\special{pa -483 133}%
+\special{fp}%
+\special{pa 0 -955}\special{pa -2 -954}\special{pa -4 -953}\special{pa -6 -951}%
+\special{pa -8 -950}\special{pa -9 -949}\special{pa -11 -948}\special{pa -13 -946}%
+\special{pa -15 -945}\special{pa -17 -944}\special{pa -19 -942}\special{pa -21 -941}%
+\special{pa -23 -939}\special{pa -25 -938}\special{pa -26 -936}\special{pa -28 -934}%
+\special{pa -30 -932}\special{pa -32 -931}\special{pa -34 -929}\special{pa -36 -927}%
+\special{pa -38 -925}\special{pa -40 -923}\special{pa -41 -921}\special{pa -43 -919}%
+\special{pa -45 -917}\special{pa -47 -915}\special{pa -49 -912}\special{pa -51 -910}%
+\special{pa -53 -908}\special{pa -55 -905}\special{pa -57 -903}\special{pa -58 -901}%
+\special{pa -60 -898}\special{pa -62 -896}\special{pa -64 -893}\special{pa -66 -890}%
+\special{pa -68 -888}\special{pa -70 -885}\special{pa -72 -882}\special{pa -74 -879}%
+\special{pa -75 -876}\special{pa -77 -873}\special{pa -79 -870}\special{pa -81 -867}%
+\special{pa -83 -864}\special{pa -85 -861}\special{pa -87 -858}\special{pa -89 -855}%
+\special{pa -91 -851}\special{pa -92 -848}\special{pa -94 -845}\special{pa -96 -841}%
+\special{pa -98 -838}\special{pa -100 -834}\special{pa -102 -831}\special{pa -104 -827}%
+\special{pa -106 -824}\special{pa -107 -820}\special{pa -109 -816}\special{pa -111 -812}%
+\special{pa -113 -808}\special{pa -115 -805}\special{pa -117 -801}\special{pa -119 -797}%
+\special{pa -121 -793}\special{pa -123 -789}\special{pa -124 -784}\special{pa -126 -780}%
+\special{pa -128 -776}\special{pa -130 -772}\special{pa -132 -767}\special{pa -134 -763}%
+\special{pa -136 -759}\special{pa -138 -754}\special{pa -140 -750}\special{pa -141 -745}%
+\special{pa -143 -740}\special{pa -145 -736}\special{pa -147 -731}\special{pa -149 -726}%
+\special{pa -151 -722}\special{pa -153 -717}\special{pa -155 -712}\special{pa -157 -707}%
+\special{pa -158 -702}\special{pa -160 -697}\special{pa -162 -692}\special{pa -164 -687}%
+\special{pa -166 -681}\special{pa -168 -676}\special{pa -170 -671}\special{pa -172 -666}%
+\special{pa -173 -660}\special{pa -175 -655}\special{pa -177 -649}\special{pa -179 -644}%
+\special{pa -181 -638}\special{pa -183 -633}\special{pa -185 -627}\special{pa -187 -621}%
+\special{pa -189 -616}\special{pa -190 -610}\special{pa -192 -604}\special{pa -194 -598}%
+\special{pa -196 -592}\special{pa -198 -586}\special{pa -200 -580}\special{pa -202 -574}%
+\special{pa -204 -568}\special{pa -206 -562}\special{pa -207 -555}\special{pa -209 -549}%
+\special{pa -211 -543}\special{pa -213 -536}\special{pa -215 -530}\special{pa -217 -523}%
+\special{pa -219 -517}\special{pa -221 -510}\special{pa -223 -504}\special{pa -224 -497}%
+\special{pa -226 -490}\special{pa -228 -484}\special{pa -230 -477}\special{pa -232 -470}%
+\special{pa -234 -463}\special{pa -236 -456}\special{pa -238 -449}\special{pa -239 -442}%
+\special{pa -241 -435}\special{pa -243 -428}\special{pa -245 -421}\special{pa -247 -413}%
+\special{pa -249 -406}\special{pa -251 -399}\special{pa -253 -391}\special{pa -255 -384}%
+\special{pa -256 -377}\special{pa -258 -369}\special{pa -260 -361}\special{pa -262 -354}%
+\special{pa -264 -346}\special{pa -266 -338}\special{pa -268 -331}\special{pa -270 -323}%
+\special{pa -272 -315}\special{pa -273 -307}\special{pa -275 -299}\special{pa -277 -291}%
+\special{pa -279 -283}\special{pa -281 -275}\special{pa -283 -267}\special{pa -285 -259}%
+\special{pa -287 -251}\special{pa -289 -242}\special{pa -290 -234}\special{pa -292 -226}%
+\special{pa -294 -217}\special{pa -296 -209}\special{pa -298 -200}\special{pa -300 -192}%
+\special{pa -302 -183}\special{pa -304 -174}\special{pa -306 -166}\special{pa -307 -157}%
+\special{pa -309 -148}\special{pa -311 -139}\special{pa -313 -130}\special{pa -315 -121}%
+\special{pa -317 -112}\special{pa -319 -103}\special{pa -321 -94}\special{pa -322 -85}%
+\special{pa -324 -76}\special{pa -326 -67}\special{pa -328 -57}\special{pa -330 -48}%
+\special{pa -332 -39}\special{pa -334 -29}\special{pa -336 -20}\special{pa -338 -10}%
+\special{pa -339 -1}\special{pa -341 9}\special{pa -343 19}\special{pa -345 28}%
+\special{pa -347 38}\special{pa -349 48}\special{pa -351 58}\special{pa -353 68}%
+\special{pa -355 78}\special{pa -356 88}\special{pa -358 98}\special{pa -360 108}%
+\special{pa -362 118}\special{pa -364 128}\special{pa -366 139}\special{pa -368 149}%
+\special{pa -370 159}\special{pa -372 170}\special{pa -373 180}\special{pa -375 190}%
+\special{pa -377 201}%
+\special{fp}%
+\special{pa -19 -942}\special{pa -18 -942}\special{pa -18 -942}\special{pa -17 -941}%
+\special{pa -16 -941}\special{pa -15 -941}\special{pa -15 -941}\special{pa -14 -940}%
+\special{pa -13 -940}\special{pa -13 -940}\special{pa -12 -940}\special{pa -11 -940}%
+\special{pa -10 -939}\special{pa -9 -939}\special{pa -9 -939}\special{pa -8 -939}%
+\special{pa -7 -939}\special{pa -6 -939}\special{pa -5 -939}\special{pa -4 -939}%
+\special{pa -3 -939}\special{pa -3 -939}\special{pa -2 -939}\special{pa -1 -939}%
+\special{pa 0 -939}\special{pa 1 -939}\special{pa 2 -939}\special{pa 3 -939}%
+\special{pa 3 -939}\special{pa 4 -939}\special{pa 5 -939}\special{pa 6 -939}%
+\special{pa 7 -939}\special{pa 8 -939}\special{pa 9 -939}\special{pa 9 -939}%
+\special{pa 10 -939}\special{pa 11 -940}\special{pa 12 -940}\special{pa 13 -940}%
+\special{pa 13 -940}\special{pa 14 -940}\special{pa 15 -941}\special{pa 15 -941}%
+\special{pa 16 -941}\special{pa 17 -941}\special{pa 18 -942}\special{pa 18 -942}%
+\special{pa 19 -942}\special{pa 19 -943}\special{pa 20 -943}\special{pa 21 -943}%
+\special{pa 21 -944}\special{pa 22 -944}\special{pa 22 -944}\special{pa 23 -945}%
+\special{pa 23 -945}\special{pa 24 -945}\special{pa 24 -946}\special{pa 25 -946}%
+\special{pa 25 -946}\special{pa 25 -947}\special{pa 26 -947}\special{pa 26 -948}%
+\special{pa 26 -948}\special{pa 26 -948}\special{pa 27 -949}\special{pa 27 -949}%
+\special{pa 27 -950}\special{pa 27 -950}\special{pa 27 -951}\special{pa 27 -951}%
+\special{pa 28 -951}\special{pa 28 -952}\special{pa 28 -952}\special{pa 28 -953}%
+\special{pa 28 -953}\special{pa 27 -954}\special{pa 27 -954}\special{pa 27 -954}%
+\special{pa 27 -955}\special{pa 27 -955}\special{pa 27 -956}\special{pa 26 -956}%
+\special{pa 26 -957}\special{pa 26 -957}\special{pa 26 -957}\special{pa 25 -958}%
+\special{pa 25 -958}\special{pa 25 -959}\special{pa 24 -959}\special{pa 24 -959}%
+\special{pa 23 -960}\special{pa 23 -960}\special{pa 22 -960}\special{pa 22 -961}%
+\special{pa 21 -961}\special{pa 21 -961}\special{pa 20 -962}\special{pa 19 -962}%
+\special{pa 19 -962}\special{pa 18 -963}\special{pa 18 -963}\special{pa 17 -963}%
+\special{pa 16 -963}\special{pa 15 -964}\special{pa 15 -964}\special{pa 14 -964}%
+\special{pa 13 -964}\special{pa 13 -965}\special{pa 12 -965}\special{pa 11 -965}%
+\special{pa 10 -965}\special{pa 9 -965}\special{pa 9 -965}\special{pa 8 -966}%
+\special{pa 7 -966}\special{pa 6 -966}\special{pa 5 -966}\special{pa 4 -966}%
+\special{pa 3 -966}\special{pa 3 -966}\special{pa 2 -966}\special{pa 1 -966}%
+\special{pa -0 -966}\special{pa -1 -966}\special{pa -2 -966}\special{pa -3 -966}%
+\special{pa -3 -966}\special{pa -4 -966}\special{pa -5 -966}\special{pa -6 -966}%
+\special{pa -7 -966}\special{pa -8 -966}\special{pa -9 -965}\special{pa -9 -965}%
+\special{pa -10 -965}\special{pa -11 -965}\special{pa -12 -965}\special{pa -13 -965}%
+\special{pa -13 -964}\special{pa -14 -964}\special{pa -15 -964}\special{pa -15 -964}%
+\special{pa -16 -963}\special{pa -17 -963}\special{pa -18 -963}\special{pa -18 -963}%
+\special{pa -19 -962}\special{pa -19 -962}\special{pa -20 -962}\special{pa -21 -961}%
+\special{pa -21 -961}\special{pa -22 -961}\special{pa -22 -960}\special{pa -23 -960}%
+\special{pa -23 -960}\special{pa -24 -959}\special{pa -24 -959}\special{pa -25 -959}%
+\special{pa -25 -958}\special{pa -25 -958}\special{pa -26 -957}\special{pa -26 -957}%
+\special{pa -26 -957}\special{pa -26 -956}\special{pa -27 -956}\special{pa -27 -955}%
+\special{pa -27 -955}\special{pa -27 -954}\special{pa -27 -954}\special{pa -27 -954}%
+\special{pa -28 -953}\special{pa -28 -953}\special{pa -28 -952}\special{pa -28 -952}%
+\special{pa -28 -951}\special{pa -27 -951}\special{pa -27 -951}\special{pa -27 -950}%
+\special{pa -27 -950}\special{pa -27 -949}\special{pa -27 -949}\special{pa -26 -948}%
+\special{pa -26 -948}\special{pa -26 -948}\special{pa -26 -947}\special{pa -25 -947}%
+\special{pa -25 -946}\special{pa -25 -946}\special{pa -24 -946}\special{pa -24 -945}%
+\special{pa -23 -945}\special{pa -23 -945}\special{pa -22 -944}\special{pa -22 -944}%
+\special{pa -21 -943}\special{pa -21 -943}\special{pa -20 -943}\special{pa -19 -943}%
+\special{pa -19 -942}%
+\special{fp}%
+\special{pa -38 -925}\special{pa -36 -924}\special{pa -35 -924}\special{pa -34 -923}%
+\special{pa -32 -923}\special{pa -31 -922}\special{pa -30 -922}\special{pa -28 -921}%
+\special{pa -27 -921}\special{pa -25 -921}\special{pa -23 -920}\special{pa -22 -920}%
+\special{pa -20 -919}\special{pa -19 -919}\special{pa -17 -919}\special{pa -15 -919}%
+\special{pa -14 -918}\special{pa -12 -918}\special{pa -10 -918}\special{pa -9 -918}%
+\special{pa -7 -918}\special{pa -5 -918}\special{pa -3 -918}\special{pa -2 -918}%
+\special{pa 0 -918}\special{pa 2 -918}\special{pa 3 -918}\special{pa 5 -918}%
+\special{pa 7 -918}\special{pa 9 -918}\special{pa 10 -918}\special{pa 12 -918}%
+\special{pa 14 -918}\special{pa 15 -919}\special{pa 17 -919}\special{pa 19 -919}%
+\special{pa 20 -920}\special{pa 22 -920}\special{pa 23 -920}\special{pa 25 -921}%
+\special{pa 27 -921}\special{pa 28 -921}\special{pa 30 -922}\special{pa 31 -922}%
+\special{pa 32 -923}\special{pa 34 -923}\special{pa 35 -924}\special{pa 36 -924}%
+\special{pa 38 -925}\special{pa 39 -926}\special{pa 40 -926}\special{pa 41 -927}%
+\special{pa 42 -928}\special{pa 44 -928}\special{pa 45 -929}\special{pa 46 -930}%
+\special{pa 47 -930}\special{pa 47 -931}\special{pa 48 -932}\special{pa 49 -933}%
+\special{pa 50 -933}\special{pa 51 -934}\special{pa 51 -935}\special{pa 52 -936}%
+\special{pa 52 -937}\special{pa 53 -937}\special{pa 53 -938}\special{pa 54 -939}%
+\special{pa 54 -940}\special{pa 54 -941}\special{pa 55 -942}\special{pa 55 -943}%
+\special{pa 55 -943}\special{pa 55 -944}\special{pa 55 -945}\special{pa 55 -946}%
+\special{pa 55 -947}\special{pa 55 -948}\special{pa 55 -949}\special{pa 54 -949}%
+\special{pa 54 -950}\special{pa 54 -951}\special{pa 53 -952}\special{pa 53 -953}%
+\special{pa 52 -954}\special{pa 52 -954}\special{pa 51 -955}\special{pa 51 -956}%
+\special{pa 50 -957}\special{pa 49 -958}\special{pa 48 -958}\special{pa 47 -959}%
+\special{pa 47 -960}\special{pa 46 -961}\special{pa 45 -961}\special{pa 44 -962}%
+\special{pa 42 -963}\special{pa 41 -963}\special{pa 40 -964}\special{pa 39 -965}%
+\special{pa 38 -965}\special{pa 36 -966}\special{pa 35 -966}\special{pa 34 -967}%
+\special{pa 32 -967}\special{pa 31 -968}\special{pa 30 -968}\special{pa 28 -969}%
+\special{pa 27 -969}\special{pa 25 -970}\special{pa 23 -970}\special{pa 22 -970}%
+\special{pa 20 -971}\special{pa 19 -971}\special{pa 17 -971}\special{pa 15 -972}%
+\special{pa 14 -972}\special{pa 12 -972}\special{pa 10 -972}\special{pa 9 -972}%
+\special{pa 7 -972}\special{pa 5 -973}\special{pa 3 -973}\special{pa 2 -973}%
+\special{pa -0 -973}\special{pa -2 -973}\special{pa -3 -973}\special{pa -5 -973}%
+\special{pa -7 -972}\special{pa -9 -972}\special{pa -10 -972}\special{pa -12 -972}%
+\special{pa -14 -972}\special{pa -15 -972}\special{pa -17 -971}\special{pa -19 -971}%
+\special{pa -20 -971}\special{pa -22 -970}\special{pa -23 -970}\special{pa -25 -970}%
+\special{pa -27 -969}\special{pa -28 -969}\special{pa -30 -968}\special{pa -31 -968}%
+\special{pa -32 -967}\special{pa -34 -967}\special{pa -35 -966}\special{pa -36 -966}%
+\special{pa -38 -965}\special{pa -39 -965}\special{pa -40 -964}\special{pa -41 -963}%
+\special{pa -42 -963}\special{pa -44 -962}\special{pa -45 -961}\special{pa -46 -961}%
+\special{pa -47 -960}\special{pa -47 -959}\special{pa -48 -958}\special{pa -49 -958}%
+\special{pa -50 -957}\special{pa -51 -956}\special{pa -51 -955}\special{pa -52 -954}%
+\special{pa -52 -954}\special{pa -53 -953}\special{pa -53 -952}\special{pa -54 -951}%
+\special{pa -54 -950}\special{pa -54 -949}\special{pa -55 -949}\special{pa -55 -948}%
+\special{pa -55 -947}\special{pa -55 -946}\special{pa -55 -945}\special{pa -55 -944}%
+\special{pa -55 -943}\special{pa -55 -943}\special{pa -55 -942}\special{pa -54 -941}%
+\special{pa -54 -940}\special{pa -54 -939}\special{pa -53 -938}\special{pa -53 -937}%
+\special{pa -52 -937}\special{pa -52 -936}\special{pa -51 -935}\special{pa -51 -934}%
+\special{pa -50 -933}\special{pa -49 -933}\special{pa -48 -932}\special{pa -47 -931}%
+\special{pa -47 -930}\special{pa -46 -930}\special{pa -45 -929}\special{pa -44 -928}%
+\special{pa -42 -928}\special{pa -41 -927}\special{pa -40 -926}\special{pa -39 -926}%
+\special{pa -38 -925}%
+\special{fp}%
+\special{pa -57 -903}\special{pa -55 -902}\special{pa -53 -901}\special{pa -51 -901}%
+\special{pa -49 -900}\special{pa -46 -899}\special{pa -44 -898}\special{pa -42 -898}%
+\special{pa -40 -897}\special{pa -38 -896}\special{pa -35 -896}\special{pa -33 -895}%
+\special{pa -30 -895}\special{pa -28 -894}\special{pa -26 -894}\special{pa -23 -893}%
+\special{pa -21 -893}\special{pa -18 -893}\special{pa -15 -893}\special{pa -13 -892}%
+\special{pa -10 -892}\special{pa -8 -892}\special{pa -5 -892}\special{pa -3 -892}%
+\special{pa 0 -892}\special{pa 3 -892}\special{pa 5 -892}\special{pa 8 -892}%
+\special{pa 10 -892}\special{pa 13 -892}\special{pa 16 -893}\special{pa 18 -893}%
+\special{pa 21 -893}\special{pa 23 -894}\special{pa 26 -894}\special{pa 28 -894}%
+\special{pa 30 -895}\special{pa 33 -895}\special{pa 35 -896}\special{pa 38 -896}%
+\special{pa 40 -897}\special{pa 42 -898}\special{pa 44 -898}\special{pa 46 -899}%
+\special{pa 49 -900}\special{pa 51 -901}\special{pa 53 -901}\special{pa 55 -902}%
+\special{pa 57 -903}\special{pa 58 -904}\special{pa 60 -905}\special{pa 62 -906}%
+\special{pa 64 -907}\special{pa 65 -908}\special{pa 67 -909}\special{pa 68 -910}%
+\special{pa 70 -911}\special{pa 71 -912}\special{pa 72 -913}\special{pa 74 -914}%
+\special{pa 75 -916}\special{pa 76 -917}\special{pa 77 -918}\special{pa 78 -919}%
+\special{pa 79 -920}\special{pa 79 -922}\special{pa 80 -923}\special{pa 81 -924}%
+\special{pa 81 -925}\special{pa 82 -927}\special{pa 82 -928}\special{pa 82 -929}%
+\special{pa 83 -931}\special{pa 83 -932}\special{pa 83 -933}\special{pa 83 -935}%
+\special{pa 83 -936}\special{pa 82 -937}\special{pa 82 -938}\special{pa 82 -940}%
+\special{pa 81 -941}\special{pa 81 -942}\special{pa 80 -943}\special{pa 79 -945}%
+\special{pa 79 -946}\special{pa 78 -947}\special{pa 77 -948}\special{pa 76 -950}%
+\special{pa 75 -951}\special{pa 74 -952}\special{pa 72 -953}\special{pa 71 -954}%
+\special{pa 70 -955}\special{pa 68 -956}\special{pa 67 -958}\special{pa 65 -959}%
+\special{pa 64 -960}\special{pa 62 -961}\special{pa 60 -962}\special{pa 58 -962}%
+\special{pa 57 -963}\special{pa 55 -964}\special{pa 53 -965}\special{pa 51 -966}%
+\special{pa 49 -967}\special{pa 46 -967}\special{pa 44 -968}\special{pa 42 -969}%
+\special{pa 40 -969}\special{pa 38 -970}\special{pa 35 -971}\special{pa 33 -971}%
+\special{pa 30 -972}\special{pa 28 -972}\special{pa 26 -973}\special{pa 23 -973}%
+\special{pa 21 -973}\special{pa 18 -974}\special{pa 15 -974}\special{pa 13 -974}%
+\special{pa 10 -974}\special{pa 8 -974}\special{pa 5 -974}\special{pa 3 -975}%
+\special{pa -0 -975}\special{pa -3 -975}\special{pa -5 -974}\special{pa -8 -974}%
+\special{pa -10 -974}\special{pa -13 -974}\special{pa -16 -974}\special{pa -18 -974}%
+\special{pa -21 -973}\special{pa -23 -973}\special{pa -26 -973}\special{pa -28 -972}%
+\special{pa -30 -972}\special{pa -33 -971}\special{pa -35 -971}\special{pa -38 -970}%
+\special{pa -40 -969}\special{pa -42 -969}\special{pa -44 -968}\special{pa -46 -967}%
+\special{pa -49 -967}\special{pa -51 -966}\special{pa -53 -965}\special{pa -55 -964}%
+\special{pa -57 -963}\special{pa -58 -962}\special{pa -60 -961}\special{pa -62 -961}%
+\special{pa -64 -960}\special{pa -65 -959}\special{pa -67 -957}\special{pa -68 -956}%
+\special{pa -70 -955}\special{pa -71 -954}\special{pa -72 -953}\special{pa -74 -952}%
+\special{pa -75 -951}\special{pa -76 -950}\special{pa -77 -948}\special{pa -78 -947}%
+\special{pa -79 -946}\special{pa -79 -945}\special{pa -80 -943}\special{pa -81 -942}%
+\special{pa -81 -941}\special{pa -82 -940}\special{pa -82 -938}\special{pa -82 -937}%
+\special{pa -83 -936}\special{pa -83 -934}\special{pa -83 -933}\special{pa -83 -932}%
+\special{pa -83 -931}\special{pa -82 -929}\special{pa -82 -928}\special{pa -82 -927}%
+\special{pa -81 -925}\special{pa -81 -924}\special{pa -80 -923}\special{pa -79 -922}%
+\special{pa -79 -920}\special{pa -78 -919}\special{pa -77 -918}\special{pa -76 -917}%
+\special{pa -75 -916}\special{pa -74 -914}\special{pa -72 -913}\special{pa -71 -912}%
+\special{pa -70 -911}\special{pa -68 -910}\special{pa -67 -909}\special{pa -65 -908}%
+\special{pa -64 -907}\special{pa -62 -906}\special{pa -60 -905}\special{pa -58 -904}%
+\special{pa -57 -903}%
+\special{fp}%
+\special{pa -75 -876}\special{pa -73 -875}\special{pa -70 -874}\special{pa -68 -873}%
+\special{pa -65 -872}\special{pa -62 -871}\special{pa -59 -870}\special{pa -56 -869}%
+\special{pa -53 -868}\special{pa -50 -867}\special{pa -47 -867}\special{pa -44 -866}%
+\special{pa -41 -865}\special{pa -37 -865}\special{pa -34 -864}\special{pa -31 -864}%
+\special{pa -27 -863}\special{pa -24 -863}\special{pa -21 -862}\special{pa -17 -862}%
+\special{pa -14 -862}\special{pa -10 -862}\special{pa -7 -861}\special{pa -3 -861}%
+\special{pa 0 -861}\special{pa 4 -861}\special{pa 7 -861}\special{pa 10 -862}%
+\special{pa 14 -862}\special{pa 17 -862}\special{pa 21 -862}\special{pa 24 -863}%
+\special{pa 27 -863}\special{pa 31 -864}\special{pa 34 -864}\special{pa 37 -865}%
+\special{pa 41 -865}\special{pa 44 -866}\special{pa 47 -867}\special{pa 50 -867}%
+\special{pa 53 -868}\special{pa 56 -869}\special{pa 59 -870}\special{pa 62 -871}%
+\special{pa 65 -872}\special{pa 68 -873}\special{pa 70 -874}\special{pa 73 -875}%
+\special{pa 75 -876}\special{pa 78 -878}\special{pa 80 -879}\special{pa 83 -880}%
+\special{pa 85 -881}\special{pa 87 -883}\special{pa 89 -884}\special{pa 91 -886}%
+\special{pa 93 -887}\special{pa 95 -888}\special{pa 97 -890}\special{pa 98 -891}%
+\special{pa 100 -893}\special{pa 101 -895}\special{pa 103 -896}\special{pa 104 -898}%
+\special{pa 105 -899}\special{pa 106 -901}\special{pa 107 -903}\special{pa 108 -904}%
+\special{pa 108 -906}\special{pa 109 -908}\special{pa 109 -910}\special{pa 110 -911}%
+\special{pa 110 -913}\special{pa 110 -915}\special{pa 110 -917}\special{pa 110 -918}%
+\special{pa 110 -920}\special{pa 110 -922}\special{pa 109 -923}\special{pa 109 -925}%
+\special{pa 108 -927}\special{pa 108 -929}\special{pa 107 -930}\special{pa 106 -932}%
+\special{pa 105 -934}\special{pa 104 -935}\special{pa 102 -937}\special{pa 101 -938}%
+\special{pa 100 -940}\special{pa 98 -942}\special{pa 97 -943}\special{pa 95 -945}%
+\special{pa 93 -946}\special{pa 91 -947}\special{pa 89 -949}\special{pa 87 -950}%
+\special{pa 85 -952}\special{pa 83 -953}\special{pa 80 -954}\special{pa 78 -955}%
+\special{pa 75 -957}\special{pa 73 -958}\special{pa 70 -959}\special{pa 68 -960}%
+\special{pa 65 -961}\special{pa 62 -962}\special{pa 59 -963}\special{pa 56 -964}%
+\special{pa 53 -965}\special{pa 50 -966}\special{pa 47 -966}\special{pa 44 -967}%
+\special{pa 41 -968}\special{pa 37 -968}\special{pa 34 -969}\special{pa 31 -969}%
+\special{pa 27 -970}\special{pa 24 -970}\special{pa 21 -971}\special{pa 17 -971}%
+\special{pa 14 -971}\special{pa 10 -971}\special{pa 7 -971}\special{pa 3 -972}%
+\special{pa -0 -972}\special{pa -4 -972}\special{pa -7 -971}\special{pa -10 -971}%
+\special{pa -14 -971}\special{pa -17 -971}\special{pa -21 -971}\special{pa -24 -970}%
+\special{pa -27 -970}\special{pa -31 -969}\special{pa -34 -969}\special{pa -37 -968}%
+\special{pa -41 -968}\special{pa -44 -967}\special{pa -47 -966}\special{pa -50 -966}%
+\special{pa -53 -965}\special{pa -56 -964}\special{pa -59 -963}\special{pa -62 -962}%
+\special{pa -65 -961}\special{pa -68 -960}\special{pa -70 -959}\special{pa -73 -958}%
+\special{pa -75 -957}\special{pa -78 -955}\special{pa -80 -954}\special{pa -83 -953}%
+\special{pa -85 -952}\special{pa -87 -950}\special{pa -89 -949}\special{pa -91 -947}%
+\special{pa -93 -946}\special{pa -95 -945}\special{pa -97 -943}\special{pa -98 -941}%
+\special{pa -100 -940}\special{pa -101 -938}\special{pa -103 -937}\special{pa -104 -935}%
+\special{pa -105 -934}\special{pa -106 -932}\special{pa -107 -930}\special{pa -108 -928}%
+\special{pa -108 -927}\special{pa -109 -925}\special{pa -109 -923}\special{pa -110 -922}%
+\special{pa -110 -920}\special{pa -110 -918}\special{pa -110 -916}\special{pa -110 -915}%
+\special{pa -110 -913}\special{pa -110 -911}\special{pa -109 -910}\special{pa -109 -908}%
+\special{pa -108 -906}\special{pa -108 -904}\special{pa -107 -903}\special{pa -106 -901}%
+\special{pa -105 -899}\special{pa -104 -898}\special{pa -102 -896}\special{pa -101 -895}%
+\special{pa -100 -893}\special{pa -98 -891}\special{pa -97 -890}\special{pa -95 -888}%
+\special{pa -93 -887}\special{pa -91 -885}\special{pa -89 -884}\special{pa -87 -883}%
+\special{pa -85 -881}\special{pa -83 -880}\special{pa -80 -879}\special{pa -78 -877}%
+\special{pa -75 -876}%
+\special{fp}%
+\special{pa -94 -845}\special{pa -91 -843}\special{pa -88 -842}\special{pa -84 -841}%
+\special{pa -81 -839}\special{pa -77 -838}\special{pa -74 -837}\special{pa -70 -836}%
+\special{pa -66 -835}\special{pa -63 -834}\special{pa -59 -833}\special{pa -55 -832}%
+\special{pa -51 -831}\special{pa -47 -830}\special{pa -43 -829}\special{pa -38 -829}%
+\special{pa -34 -828}\special{pa -30 -828}\special{pa -26 -827}\special{pa -22 -827}%
+\special{pa -17 -827}\special{pa -13 -826}\special{pa -9 -826}\special{pa -4 -826}%
+\special{pa 0 -826}\special{pa 4 -826}\special{pa 9 -826}\special{pa 13 -826}%
+\special{pa 17 -827}\special{pa 22 -827}\special{pa 26 -827}\special{pa 30 -828}%
+\special{pa 34 -828}\special{pa 38 -829}\special{pa 43 -829}\special{pa 47 -830}%
+\special{pa 51 -831}\special{pa 55 -832}\special{pa 59 -833}\special{pa 63 -834}%
+\special{pa 66 -835}\special{pa 70 -836}\special{pa 74 -837}\special{pa 77 -838}%
+\special{pa 81 -839}\special{pa 84 -841}\special{pa 88 -842}\special{pa 91 -843}%
+\special{pa 94 -845}\special{pa 97 -846}\special{pa 100 -848}\special{pa 103 -849}%
+\special{pa 106 -851}\special{pa 109 -853}\special{pa 112 -855}\special{pa 114 -856}%
+\special{pa 116 -858}\special{pa 119 -860}\special{pa 121 -862}\special{pa 123 -864}%
+\special{pa 125 -866}\special{pa 126 -868}\special{pa 128 -870}\special{pa 130 -872}%
+\special{pa 131 -874}\special{pa 132 -876}\special{pa 133 -878}\special{pa 134 -880}%
+\special{pa 135 -882}\special{pa 136 -884}\special{pa 137 -886}\special{pa 137 -889}%
+\special{pa 138 -891}\special{pa 138 -893}\special{pa 138 -895}\special{pa 138 -897}%
+\special{pa 138 -899}\special{pa 137 -902}\special{pa 137 -904}\special{pa 136 -906}%
+\special{pa 135 -908}\special{pa 134 -910}\special{pa 133 -912}\special{pa 132 -914}%
+\special{pa 131 -916}\special{pa 130 -918}\special{pa 128 -920}\special{pa 126 -922}%
+\special{pa 125 -924}\special{pa 123 -926}\special{pa 121 -928}\special{pa 119 -930}%
+\special{pa 116 -932}\special{pa 114 -934}\special{pa 111 -936}\special{pa 109 -937}%
+\special{pa 106 -939}\special{pa 103 -941}\special{pa 100 -942}\special{pa 97 -944}%
+\special{pa 94 -945}\special{pa 91 -947}\special{pa 88 -948}\special{pa 84 -949}%
+\special{pa 81 -951}\special{pa 77 -952}\special{pa 74 -953}\special{pa 70 -954}%
+\special{pa 66 -955}\special{pa 63 -956}\special{pa 59 -957}\special{pa 55 -958}%
+\special{pa 51 -959}\special{pa 47 -960}\special{pa 43 -961}\special{pa 38 -961}%
+\special{pa 34 -962}\special{pa 30 -962}\special{pa 26 -963}\special{pa 22 -963}%
+\special{pa 17 -963}\special{pa 13 -964}\special{pa 9 -964}\special{pa 4 -964}%
+\special{pa -0 -964}\special{pa -4 -964}\special{pa -9 -964}\special{pa -13 -964}%
+\special{pa -17 -963}\special{pa -22 -963}\special{pa -26 -963}\special{pa -30 -962}%
+\special{pa -34 -962}\special{pa -38 -961}\special{pa -43 -961}\special{pa -47 -960}%
+\special{pa -51 -959}\special{pa -55 -958}\special{pa -59 -957}\special{pa -63 -956}%
+\special{pa -66 -955}\special{pa -70 -954}\special{pa -74 -953}\special{pa -77 -952}%
+\special{pa -81 -951}\special{pa -84 -949}\special{pa -88 -948}\special{pa -91 -947}%
+\special{pa -94 -945}\special{pa -97 -944}\special{pa -100 -942}\special{pa -103 -941}%
+\special{pa -106 -939}\special{pa -109 -937}\special{pa -112 -935}\special{pa -114 -934}%
+\special{pa -116 -932}\special{pa -119 -930}\special{pa -121 -928}\special{pa -123 -926}%
+\special{pa -125 -924}\special{pa -126 -922}\special{pa -128 -920}\special{pa -130 -918}%
+\special{pa -131 -916}\special{pa -132 -914}\special{pa -133 -912}\special{pa -134 -910}%
+\special{pa -135 -908}\special{pa -136 -906}\special{pa -137 -904}\special{pa -137 -901}%
+\special{pa -138 -899}\special{pa -138 -897}\special{pa -138 -895}\special{pa -138 -893}%
+\special{pa -138 -891}\special{pa -137 -888}\special{pa -137 -886}\special{pa -136 -884}%
+\special{pa -135 -882}\special{pa -134 -880}\special{pa -133 -878}\special{pa -132 -876}%
+\special{pa -131 -874}\special{pa -130 -872}\special{pa -128 -870}\special{pa -126 -868}%
+\special{pa -125 -866}\special{pa -123 -864}\special{pa -121 -862}\special{pa -119 -860}%
+\special{pa -116 -858}\special{pa -114 -856}\special{pa -111 -854}\special{pa -109 -853}%
+\special{pa -106 -851}\special{pa -103 -849}\special{pa -100 -848}\special{pa -97 -846}%
+\special{pa -94 -845}%
+\special{fp}%
+\special{pa -113 -808}\special{pa -109 -807}\special{pa -105 -805}\special{pa -101 -803}%
+\special{pa -97 -802}\special{pa -93 -800}\special{pa -89 -799}\special{pa -84 -798}%
+\special{pa -80 -796}\special{pa -75 -795}\special{pa -70 -794}\special{pa -66 -793}%
+\special{pa -61 -792}\special{pa -56 -791}\special{pa -51 -790}\special{pa -46 -789}%
+\special{pa -41 -789}\special{pa -36 -788}\special{pa -31 -788}\special{pa -26 -787}%
+\special{pa -21 -787}\special{pa -16 -786}\special{pa -10 -786}\special{pa -5 -786}%
+\special{pa 0 -786}\special{pa 5 -786}\special{pa 10 -786}\special{pa 16 -786}%
+\special{pa 21 -787}\special{pa 26 -787}\special{pa 31 -788}\special{pa 36 -788}%
+\special{pa 41 -789}\special{pa 46 -789}\special{pa 51 -790}\special{pa 56 -791}%
+\special{pa 61 -792}\special{pa 66 -793}\special{pa 70 -794}\special{pa 75 -795}%
+\special{pa 80 -796}\special{pa 84 -798}\special{pa 89 -799}\special{pa 93 -800}%
+\special{pa 97 -802}\special{pa 101 -803}\special{pa 105 -805}\special{pa 109 -807}%
+\special{pa 113 -809}\special{pa 117 -810}\special{pa 121 -812}\special{pa 124 -814}%
+\special{pa 127 -816}\special{pa 131 -818}\special{pa 134 -820}\special{pa 137 -822}%
+\special{pa 140 -824}\special{pa 142 -827}\special{pa 145 -829}\special{pa 147 -831}%
+\special{pa 150 -834}\special{pa 152 -836}\special{pa 154 -838}\special{pa 156 -841}%
+\special{pa 157 -843}\special{pa 159 -846}\special{pa 160 -848}\special{pa 161 -851}%
+\special{pa 162 -853}\special{pa 163 -856}\special{pa 164 -858}\special{pa 165 -861}%
+\special{pa 165 -864}\special{pa 165 -866}\special{pa 165 -869}\special{pa 165 -871}%
+\special{pa 165 -874}\special{pa 165 -877}\special{pa 164 -879}\special{pa 163 -882}%
+\special{pa 162 -884}\special{pa 161 -887}\special{pa 160 -889}\special{pa 159 -892}%
+\special{pa 157 -894}\special{pa 156 -897}\special{pa 154 -899}\special{pa 152 -902}%
+\special{pa 150 -904}\special{pa 147 -906}\special{pa 145 -909}\special{pa 142 -911}%
+\special{pa 140 -913}\special{pa 137 -915}\special{pa 134 -917}\special{pa 131 -919}%
+\special{pa 127 -921}\special{pa 124 -923}\special{pa 120 -925}\special{pa 117 -927}%
+\special{pa 113 -929}\special{pa 109 -931}\special{pa 105 -932}\special{pa 101 -934}%
+\special{pa 97 -936}\special{pa 93 -937}\special{pa 89 -939}\special{pa 84 -940}%
+\special{pa 80 -941}\special{pa 75 -942}\special{pa 70 -944}\special{pa 66 -945}%
+\special{pa 61 -946}\special{pa 56 -947}\special{pa 51 -947}\special{pa 46 -948}%
+\special{pa 41 -949}\special{pa 36 -949}\special{pa 31 -950}\special{pa 26 -950}%
+\special{pa 21 -951}\special{pa 16 -951}\special{pa 10 -951}\special{pa 5 -951}%
+\special{pa -0 -951}\special{pa -5 -951}\special{pa -10 -951}\special{pa -16 -951}%
+\special{pa -21 -951}\special{pa -26 -950}\special{pa -31 -950}\special{pa -36 -949}%
+\special{pa -41 -949}\special{pa -46 -948}\special{pa -51 -947}\special{pa -56 -947}%
+\special{pa -61 -946}\special{pa -66 -945}\special{pa -70 -944}\special{pa -75 -942}%
+\special{pa -80 -941}\special{pa -84 -940}\special{pa -89 -939}\special{pa -93 -937}%
+\special{pa -97 -936}\special{pa -101 -934}\special{pa -105 -932}\special{pa -109 -931}%
+\special{pa -113 -929}\special{pa -117 -927}\special{pa -121 -925}\special{pa -124 -923}%
+\special{pa -127 -921}\special{pa -131 -919}\special{pa -134 -917}\special{pa -137 -915}%
+\special{pa -140 -913}\special{pa -142 -911}\special{pa -145 -909}\special{pa -147 -906}%
+\special{pa -150 -904}\special{pa -152 -902}\special{pa -154 -899}\special{pa -156 -897}%
+\special{pa -157 -894}\special{pa -159 -892}\special{pa -160 -889}\special{pa -161 -887}%
+\special{pa -162 -884}\special{pa -163 -882}\special{pa -164 -879}\special{pa -165 -877}%
+\special{pa -165 -874}\special{pa -165 -871}\special{pa -165 -869}\special{pa -165 -866}%
+\special{pa -165 -864}\special{pa -165 -861}\special{pa -164 -858}\special{pa -163 -856}%
+\special{pa -162 -853}\special{pa -161 -851}\special{pa -160 -848}\special{pa -159 -846}%
+\special{pa -157 -843}\special{pa -156 -841}\special{pa -154 -838}\special{pa -152 -836}%
+\special{pa -150 -834}\special{pa -147 -831}\special{pa -145 -829}\special{pa -142 -827}%
+\special{pa -140 -824}\special{pa -137 -822}\special{pa -134 -820}\special{pa -131 -818}%
+\special{pa -127 -816}\special{pa -124 -814}\special{pa -120 -812}\special{pa -117 -810}%
+\special{pa -113 -808}%
+\special{fp}%
+\special{pa -132 -767}\special{pa -128 -765}\special{pa -123 -763}\special{pa -118 -761}%
+\special{pa -113 -760}\special{pa -108 -758}\special{pa -103 -756}\special{pa -98 -755}%
+\special{pa -93 -753}\special{pa -88 -752}\special{pa -82 -750}\special{pa -77 -749}%
+\special{pa -71 -748}\special{pa -65 -747}\special{pa -60 -746}\special{pa -54 -745}%
+\special{pa -48 -744}\special{pa -42 -744}\special{pa -36 -743}\special{pa -30 -742}%
+\special{pa -24 -742}\special{pa -18 -742}\special{pa -12 -741}\special{pa -6 -741}%
+\special{pa 0 -741}\special{pa 6 -741}\special{pa 12 -741}\special{pa 18 -742}%
+\special{pa 24 -742}\special{pa 30 -742}\special{pa 36 -743}\special{pa 42 -744}%
+\special{pa 48 -744}\special{pa 54 -745}\special{pa 60 -746}\special{pa 65 -747}%
+\special{pa 71 -748}\special{pa 77 -749}\special{pa 82 -750}\special{pa 88 -752}%
+\special{pa 93 -753}\special{pa 98 -755}\special{pa 103 -756}\special{pa 108 -758}%
+\special{pa 113 -760}\special{pa 118 -762}\special{pa 123 -763}\special{pa 128 -765}%
+\special{pa 132 -767}\special{pa 136 -770}\special{pa 141 -772}\special{pa 145 -774}%
+\special{pa 149 -776}\special{pa 152 -779}\special{pa 156 -781}\special{pa 160 -784}%
+\special{pa 163 -786}\special{pa 166 -789}\special{pa 169 -791}\special{pa 172 -794}%
+\special{pa 175 -797}\special{pa 177 -799}\special{pa 179 -802}\special{pa 182 -805}%
+\special{pa 183 -808}\special{pa 185 -811}\special{pa 187 -814}\special{pa 188 -817}%
+\special{pa 190 -820}\special{pa 191 -823}\special{pa 191 -826}\special{pa 192 -829}%
+\special{pa 193 -832}\special{pa 193 -835}\special{pa 193 -838}\special{pa 193 -841}%
+\special{pa 193 -844}\special{pa 192 -847}\special{pa 191 -850}\special{pa 191 -853}%
+\special{pa 189 -856}\special{pa 188 -859}\special{pa 187 -862}\special{pa 185 -865}%
+\special{pa 183 -868}\special{pa 181 -870}\special{pa 179 -873}\special{pa 177 -876}%
+\special{pa 175 -879}\special{pa 172 -882}\special{pa 169 -884}\special{pa 166 -887}%
+\special{pa 163 -889}\special{pa 160 -892}\special{pa 156 -894}\special{pa 152 -897}%
+\special{pa 149 -899}\special{pa 145 -902}\special{pa 141 -904}\special{pa 136 -906}%
+\special{pa 132 -908}\special{pa 128 -910}\special{pa 123 -912}\special{pa 118 -914}%
+\special{pa 113 -916}\special{pa 108 -918}\special{pa 103 -919}\special{pa 98 -921}%
+\special{pa 93 -922}\special{pa 88 -924}\special{pa 82 -925}\special{pa 77 -926}%
+\special{pa 71 -927}\special{pa 65 -928}\special{pa 60 -929}\special{pa 54 -930}%
+\special{pa 48 -931}\special{pa 42 -932}\special{pa 36 -932}\special{pa 30 -933}%
+\special{pa 24 -933}\special{pa 18 -934}\special{pa 12 -934}\special{pa 6 -934}%
+\special{pa -0 -934}\special{pa -6 -934}\special{pa -12 -934}\special{pa -18 -934}%
+\special{pa -24 -933}\special{pa -30 -933}\special{pa -36 -932}\special{pa -42 -932}%
+\special{pa -48 -931}\special{pa -54 -930}\special{pa -60 -929}\special{pa -65 -928}%
+\special{pa -71 -927}\special{pa -77 -926}\special{pa -82 -925}\special{pa -88 -924}%
+\special{pa -93 -922}\special{pa -98 -921}\special{pa -103 -919}\special{pa -108 -917}%
+\special{pa -113 -916}\special{pa -118 -914}\special{pa -123 -912}\special{pa -128 -910}%
+\special{pa -132 -908}\special{pa -136 -906}\special{pa -141 -904}\special{pa -145 -901}%
+\special{pa -149 -899}\special{pa -152 -897}\special{pa -156 -894}\special{pa -160 -892}%
+\special{pa -163 -889}\special{pa -166 -887}\special{pa -169 -884}\special{pa -172 -881}%
+\special{pa -175 -879}\special{pa -177 -876}\special{pa -179 -873}\special{pa -182 -870}%
+\special{pa -183 -867}\special{pa -185 -865}\special{pa -187 -862}\special{pa -188 -859}%
+\special{pa -190 -856}\special{pa -191 -853}\special{pa -191 -850}\special{pa -192 -847}%
+\special{pa -193 -844}\special{pa -193 -841}\special{pa -193 -838}\special{pa -193 -835}%
+\special{pa -193 -832}\special{pa -192 -829}\special{pa -191 -826}\special{pa -191 -823}%
+\special{pa -189 -820}\special{pa -188 -817}\special{pa -187 -814}\special{pa -185 -811}%
+\special{pa -183 -808}\special{pa -181 -805}\special{pa -179 -802}\special{pa -177 -799}%
+\special{pa -175 -797}\special{pa -172 -794}\special{pa -169 -791}\special{pa -166 -789}%
+\special{pa -163 -786}\special{pa -160 -783}\special{pa -156 -781}\special{pa -152 -779}%
+\special{pa -149 -776}\special{pa -145 -774}\special{pa -141 -772}\special{pa -136 -769}%
+\special{pa -132 -767}%
+\special{fp}%
+\special{pa -151 -722}\special{pa -146 -719}\special{pa -140 -717}\special{pa -135 -715}%
+\special{pa -130 -713}\special{pa -124 -711}\special{pa -118 -709}\special{pa -112 -707}%
+\special{pa -106 -705}\special{pa -100 -704}\special{pa -94 -702}\special{pa -87 -701}%
+\special{pa -81 -699}\special{pa -75 -698}\special{pa -68 -697}\special{pa -61 -696}%
+\special{pa -55 -695}\special{pa -48 -694}\special{pa -41 -694}\special{pa -34 -693}%
+\special{pa -28 -693}\special{pa -21 -692}\special{pa -14 -692}\special{pa -7 -692}%
+\special{pa 0 -692}\special{pa 7 -692}\special{pa 14 -692}\special{pa 21 -692}%
+\special{pa 28 -693}\special{pa 35 -693}\special{pa 41 -694}\special{pa 48 -694}%
+\special{pa 55 -695}\special{pa 62 -696}\special{pa 68 -697}\special{pa 75 -698}%
+\special{pa 81 -699}\special{pa 88 -701}\special{pa 94 -702}\special{pa 100 -704}%
+\special{pa 106 -705}\special{pa 112 -707}\special{pa 118 -709}\special{pa 124 -711}%
+\special{pa 130 -713}\special{pa 135 -715}\special{pa 141 -717}\special{pa 146 -719}%
+\special{pa 151 -722}\special{pa 156 -724}\special{pa 161 -726}\special{pa 165 -729}%
+\special{pa 170 -732}\special{pa 174 -734}\special{pa 178 -737}\special{pa 182 -740}%
+\special{pa 186 -743}\special{pa 190 -746}\special{pa 193 -749}\special{pa 196 -752}%
+\special{pa 200 -755}\special{pa 202 -758}\special{pa 205 -761}\special{pa 207 -765}%
+\special{pa 210 -768}\special{pa 212 -771}\special{pa 214 -775}\special{pa 215 -778}%
+\special{pa 217 -781}\special{pa 218 -785}\special{pa 219 -788}\special{pa 220 -792}%
+\special{pa 220 -795}\special{pa 220 -799}\special{pa 220 -802}\special{pa 220 -805}%
+\special{pa 220 -809}\special{pa 219 -812}\special{pa 219 -816}\special{pa 218 -819}%
+\special{pa 217 -823}\special{pa 215 -826}\special{pa 214 -829}\special{pa 212 -833}%
+\special{pa 210 -836}\special{pa 207 -839}\special{pa 205 -843}\special{pa 202 -846}%
+\special{pa 199 -849}\special{pa 196 -852}\special{pa 193 -855}\special{pa 190 -858}%
+\special{pa 186 -861}\special{pa 182 -864}\special{pa 178 -867}\special{pa 174 -870}%
+\special{pa 170 -872}\special{pa 165 -875}\special{pa 161 -877}\special{pa 156 -880}%
+\special{pa 151 -882}\special{pa 146 -885}\special{pa 140 -887}\special{pa 135 -889}%
+\special{pa 130 -891}\special{pa 124 -893}\special{pa 118 -895}\special{pa 112 -897}%
+\special{pa 106 -899}\special{pa 100 -900}\special{pa 94 -902}\special{pa 87 -903}%
+\special{pa 81 -904}\special{pa 75 -906}\special{pa 68 -907}\special{pa 61 -908}%
+\special{pa 55 -909}\special{pa 48 -910}\special{pa 41 -910}\special{pa 34 -911}%
+\special{pa 28 -911}\special{pa 21 -912}\special{pa 14 -912}\special{pa 7 -912}%
+\special{pa -0 -912}\special{pa -7 -912}\special{pa -14 -912}\special{pa -21 -912}%
+\special{pa -28 -911}\special{pa -35 -911}\special{pa -41 -910}\special{pa -48 -909}%
+\special{pa -55 -909}\special{pa -62 -908}\special{pa -68 -907}\special{pa -75 -906}%
+\special{pa -81 -904}\special{pa -88 -903}\special{pa -94 -902}\special{pa -100 -900}%
+\special{pa -106 -899}\special{pa -112 -897}\special{pa -118 -895}\special{pa -124 -893}%
+\special{pa -130 -891}\special{pa -135 -889}\special{pa -141 -887}\special{pa -146 -885}%
+\special{pa -151 -882}\special{pa -156 -880}\special{pa -161 -877}\special{pa -165 -875}%
+\special{pa -170 -872}\special{pa -174 -869}\special{pa -178 -867}\special{pa -182 -864}%
+\special{pa -186 -861}\special{pa -190 -858}\special{pa -193 -855}\special{pa -196 -852}%
+\special{pa -200 -849}\special{pa -202 -846}\special{pa -205 -842}\special{pa -207 -839}%
+\special{pa -210 -836}\special{pa -212 -833}\special{pa -214 -829}\special{pa -215 -826}%
+\special{pa -217 -823}\special{pa -218 -819}\special{pa -219 -816}\special{pa -220 -812}%
+\special{pa -220 -809}\special{pa -220 -805}\special{pa -220 -802}\special{pa -220 -798}%
+\special{pa -220 -795}\special{pa -219 -792}\special{pa -219 -788}\special{pa -218 -785}%
+\special{pa -217 -781}\special{pa -215 -778}\special{pa -214 -774}\special{pa -212 -771}%
+\special{pa -210 -768}\special{pa -207 -765}\special{pa -205 -761}\special{pa -202 -758}%
+\special{pa -199 -755}\special{pa -196 -752}\special{pa -193 -749}\special{pa -190 -746}%
+\special{pa -186 -743}\special{pa -182 -740}\special{pa -178 -737}\special{pa -174 -734}%
+\special{pa -170 -732}\special{pa -165 -729}\special{pa -161 -726}\special{pa -156 -724}%
+\special{pa -151 -722}%
+\special{fp}%
+\special{pa -170 -671}\special{pa -164 -668}\special{pa -158 -666}\special{pa -152 -663}%
+\special{pa -146 -661}\special{pa -139 -659}\special{pa -133 -657}\special{pa -126 -655}%
+\special{pa -119 -653}\special{pa -113 -651}\special{pa -106 -649}\special{pa -98 -648}%
+\special{pa -91 -646}\special{pa -84 -645}\special{pa -77 -643}\special{pa -69 -642}%
+\special{pa -62 -641}\special{pa -54 -640}\special{pa -46 -640}\special{pa -39 -639}%
+\special{pa -31 -638}\special{pa -23 -638}\special{pa -15 -638}\special{pa -8 -637}%
+\special{pa 0 -637}\special{pa 8 -637}\special{pa 16 -638}\special{pa 23 -638}%
+\special{pa 31 -638}\special{pa 39 -639}\special{pa 47 -640}\special{pa 54 -640}%
+\special{pa 62 -641}\special{pa 69 -642}\special{pa 77 -643}\special{pa 84 -645}%
+\special{pa 91 -646}\special{pa 99 -648}\special{pa 106 -649}\special{pa 113 -651}%
+\special{pa 120 -653}\special{pa 126 -655}\special{pa 133 -657}\special{pa 139 -659}%
+\special{pa 146 -661}\special{pa 152 -663}\special{pa 158 -666}\special{pa 164 -668}%
+\special{pa 170 -671}\special{pa 175 -674}\special{pa 181 -676}\special{pa 186 -679}%
+\special{pa 191 -682}\special{pa 196 -685}\special{pa 201 -688}\special{pa 205 -692}%
+\special{pa 209 -695}\special{pa 214 -698}\special{pa 217 -702}\special{pa 221 -705}%
+\special{pa 224 -709}\special{pa 228 -712}\special{pa 231 -716}\special{pa 233 -719}%
+\special{pa 236 -723}\special{pa 238 -727}\special{pa 240 -731}\special{pa 242 -734}%
+\special{pa 244 -738}\special{pa 245 -742}\special{pa 246 -746}\special{pa 247 -750}%
+\special{pa 248 -754}\special{pa 248 -758}\special{pa 248 -761}\special{pa 248 -765}%
+\special{pa 248 -769}\special{pa 247 -773}\special{pa 246 -777}\special{pa 245 -781}%
+\special{pa 244 -785}\special{pa 242 -788}\special{pa 240 -792}\special{pa 238 -796}%
+\special{pa 236 -800}\special{pa 233 -803}\special{pa 231 -807}\special{pa 228 -811}%
+\special{pa 224 -814}\special{pa 221 -818}\special{pa 217 -821}\special{pa 213 -825}%
+\special{pa 209 -828}\special{pa 205 -831}\special{pa 201 -834}\special{pa 196 -837}%
+\special{pa 191 -840}\special{pa 186 -843}\special{pa 181 -846}\special{pa 175 -849}%
+\special{pa 170 -852}\special{pa 164 -854}\special{pa 158 -857}\special{pa 152 -859}%
+\special{pa 146 -862}\special{pa 139 -864}\special{pa 133 -866}\special{pa 126 -868}%
+\special{pa 119 -870}\special{pa 113 -872}\special{pa 106 -874}\special{pa 98 -875}%
+\special{pa 91 -877}\special{pa 84 -878}\special{pa 77 -879}\special{pa 69 -880}%
+\special{pa 62 -881}\special{pa 54 -882}\special{pa 46 -883}\special{pa 39 -884}%
+\special{pa 31 -884}\special{pa 23 -885}\special{pa 15 -885}\special{pa 8 -885}%
+\special{pa -0 -885}\special{pa -8 -885}\special{pa -16 -885}\special{pa -23 -885}%
+\special{pa -31 -884}\special{pa -39 -884}\special{pa -47 -883}\special{pa -54 -882}%
+\special{pa -62 -881}\special{pa -69 -880}\special{pa -77 -879}\special{pa -84 -878}%
+\special{pa -91 -877}\special{pa -99 -875}\special{pa -106 -874}\special{pa -113 -872}%
+\special{pa -120 -870}\special{pa -126 -868}\special{pa -133 -866}\special{pa -139 -864}%
+\special{pa -146 -862}\special{pa -152 -859}\special{pa -158 -857}\special{pa -164 -854}%
+\special{pa -170 -852}\special{pa -175 -849}\special{pa -181 -846}\special{pa -186 -843}%
+\special{pa -191 -840}\special{pa -196 -837}\special{pa -201 -834}\special{pa -205 -831}%
+\special{pa -209 -828}\special{pa -214 -824}\special{pa -217 -821}\special{pa -221 -818}%
+\special{pa -224 -814}\special{pa -228 -811}\special{pa -231 -807}\special{pa -233 -803}%
+\special{pa -236 -800}\special{pa -238 -796}\special{pa -240 -792}\special{pa -242 -788}%
+\special{pa -244 -785}\special{pa -245 -781}\special{pa -246 -777}\special{pa -247 -773}%
+\special{pa -248 -769}\special{pa -248 -765}\special{pa -248 -761}\special{pa -248 -757}%
+\special{pa -248 -754}\special{pa -247 -750}\special{pa -246 -746}\special{pa -245 -742}%
+\special{pa -244 -738}\special{pa -242 -734}\special{pa -240 -730}\special{pa -238 -727}%
+\special{pa -236 -723}\special{pa -233 -719}\special{pa -231 -716}\special{pa -228 -712}%
+\special{pa -224 -709}\special{pa -221 -705}\special{pa -217 -702}\special{pa -213 -698}%
+\special{pa -209 -695}\special{pa -205 -692}\special{pa -201 -688}\special{pa -196 -685}%
+\special{pa -191 -682}\special{pa -186 -679}\special{pa -181 -676}\special{pa -175 -674}%
+\special{pa -170 -671}%
+\special{fp}%
+\special{pa -189 -616}\special{pa -182 -613}\special{pa -176 -610}\special{pa -169 -607}%
+\special{pa -162 -604}\special{pa -155 -602}\special{pa -148 -600}\special{pa -140 -597}%
+\special{pa -133 -595}\special{pa -125 -593}\special{pa -117 -591}\special{pa -109 -590}%
+\special{pa -101 -588}\special{pa -93 -586}\special{pa -85 -585}\special{pa -77 -584}%
+\special{pa -68 -583}\special{pa -60 -582}\special{pa -52 -581}\special{pa -43 -580}%
+\special{pa -34 -579}\special{pa -26 -579}\special{pa -17 -578}\special{pa -9 -578}%
+\special{pa 0 -578}\special{pa 9 -578}\special{pa 17 -578}\special{pa 26 -579}%
+\special{pa 35 -579}\special{pa 43 -580}\special{pa 52 -581}\special{pa 60 -582}%
+\special{pa 69 -583}\special{pa 77 -584}\special{pa 85 -585}\special{pa 93 -586}%
+\special{pa 102 -588}\special{pa 110 -590}\special{pa 117 -591}\special{pa 125 -593}%
+\special{pa 133 -595}\special{pa 140 -597}\special{pa 148 -600}\special{pa 155 -602}%
+\special{pa 162 -605}\special{pa 169 -607}\special{pa 176 -610}\special{pa 182 -613}%
+\special{pa 189 -616}\special{pa 195 -619}\special{pa 201 -622}\special{pa 207 -625}%
+\special{pa 212 -628}\special{pa 218 -632}\special{pa 223 -635}\special{pa 228 -639}%
+\special{pa 233 -642}\special{pa 237 -646}\special{pa 242 -650}\special{pa 246 -653}%
+\special{pa 249 -657}\special{pa 253 -661}\special{pa 256 -665}\special{pa 259 -669}%
+\special{pa 262 -673}\special{pa 265 -678}\special{pa 267 -682}\special{pa 269 -686}%
+\special{pa 271 -690}\special{pa 272 -694}\special{pa 273 -699}\special{pa 274 -703}%
+\special{pa 275 -707}\special{pa 275 -712}\special{pa 276 -716}\special{pa 275 -720}%
+\special{pa 275 -725}\special{pa 274 -729}\special{pa 273 -733}\special{pa 272 -738}%
+\special{pa 271 -742}\special{pa 269 -746}\special{pa 267 -750}\special{pa 265 -754}%
+\special{pa 262 -759}\special{pa 259 -763}\special{pa 256 -767}\special{pa 253 -771}%
+\special{pa 249 -775}\special{pa 246 -779}\special{pa 241 -782}\special{pa 237 -786}%
+\special{pa 233 -790}\special{pa 228 -793}\special{pa 223 -797}\special{pa 218 -801}%
+\special{pa 212 -804}\special{pa 207 -807}\special{pa 201 -810}\special{pa 195 -813}%
+\special{pa 189 -816}\special{pa 182 -819}\special{pa 176 -822}\special{pa 169 -825}%
+\special{pa 162 -828}\special{pa 155 -830}\special{pa 148 -832}\special{pa 140 -835}%
+\special{pa 133 -837}\special{pa 125 -839}\special{pa 117 -841}\special{pa 109 -842}%
+\special{pa 101 -844}\special{pa 93 -846}\special{pa 85 -847}\special{pa 77 -848}%
+\special{pa 68 -849}\special{pa 60 -850}\special{pa 52 -851}\special{pa 43 -852}%
+\special{pa 34 -853}\special{pa 26 -853}\special{pa 17 -854}\special{pa 9 -854}%
+\special{pa -0 -854}\special{pa -9 -854}\special{pa -17 -854}\special{pa -26 -853}%
+\special{pa -35 -853}\special{pa -43 -852}\special{pa -52 -851}\special{pa -60 -850}%
+\special{pa -69 -849}\special{pa -77 -848}\special{pa -85 -847}\special{pa -93 -846}%
+\special{pa -102 -844}\special{pa -110 -842}\special{pa -117 -841}\special{pa -125 -839}%
+\special{pa -133 -837}\special{pa -140 -835}\special{pa -148 -832}\special{pa -155 -830}%
+\special{pa -162 -827}\special{pa -169 -825}\special{pa -176 -822}\special{pa -182 -819}%
+\special{pa -189 -816}\special{pa -195 -813}\special{pa -201 -810}\special{pa -207 -807}%
+\special{pa -212 -804}\special{pa -218 -800}\special{pa -223 -797}\special{pa -228 -793}%
+\special{pa -233 -790}\special{pa -237 -786}\special{pa -242 -782}\special{pa -246 -779}%
+\special{pa -249 -775}\special{pa -253 -771}\special{pa -256 -767}\special{pa -259 -763}%
+\special{pa -262 -759}\special{pa -265 -754}\special{pa -267 -750}\special{pa -269 -746}%
+\special{pa -271 -742}\special{pa -272 -738}\special{pa -273 -733}\special{pa -274 -729}%
+\special{pa -275 -725}\special{pa -275 -720}\special{pa -276 -716}\special{pa -275 -712}%
+\special{pa -275 -707}\special{pa -274 -703}\special{pa -273 -699}\special{pa -272 -694}%
+\special{pa -271 -690}\special{pa -269 -686}\special{pa -267 -682}\special{pa -265 -678}%
+\special{pa -262 -673}\special{pa -259 -669}\special{pa -256 -665}\special{pa -253 -661}%
+\special{pa -249 -657}\special{pa -246 -653}\special{pa -241 -650}\special{pa -237 -646}%
+\special{pa -233 -642}\special{pa -228 -639}\special{pa -223 -635}\special{pa -218 -632}%
+\special{pa -212 -628}\special{pa -207 -625}\special{pa -201 -622}\special{pa -195 -619}%
+\special{pa -189 -616}%
+\special{fp}%
+\special{pa -207 -555}\special{pa -200 -552}\special{pa -193 -549}\special{pa -186 -546}%
+\special{pa -178 -543}\special{pa -170 -540}\special{pa -162 -538}\special{pa -154 -535}%
+\special{pa -146 -533}\special{pa -138 -531}\special{pa -129 -529}\special{pa -120 -527}%
+\special{pa -111 -525}\special{pa -103 -523}\special{pa -94 -522}\special{pa -84 -520}%
+\special{pa -75 -519}\special{pa -66 -518}\special{pa -57 -517}\special{pa -47 -516}%
+\special{pa -38 -515}\special{pa -28 -515}\special{pa -19 -515}\special{pa -9 -514}%
+\special{pa 0 -514}\special{pa 10 -514}\special{pa 19 -515}\special{pa 29 -515}%
+\special{pa 38 -516}\special{pa 48 -516}\special{pa 57 -517}\special{pa 66 -518}%
+\special{pa 75 -519}\special{pa 85 -520}\special{pa 94 -522}\special{pa 103 -523}%
+\special{pa 112 -525}\special{pa 120 -527}\special{pa 129 -529}\special{pa 138 -531}%
+\special{pa 146 -533}\special{pa 154 -535}\special{pa 163 -538}\special{pa 170 -541}%
+\special{pa 178 -543}\special{pa 186 -546}\special{pa 193 -549}\special{pa 201 -552}%
+\special{pa 208 -555}\special{pa 214 -559}\special{pa 221 -562}\special{pa 227 -566}%
+\special{pa 234 -569}\special{pa 240 -573}\special{pa 245 -577}\special{pa 251 -581}%
+\special{pa 256 -585}\special{pa 261 -589}\special{pa 266 -593}\special{pa 270 -597}%
+\special{pa 274 -601}\special{pa 278 -606}\special{pa 282 -610}\special{pa 285 -615}%
+\special{pa 288 -619}\special{pa 291 -624}\special{pa 294 -628}\special{pa 296 -633}%
+\special{pa 298 -638}\special{pa 299 -642}\special{pa 301 -647}\special{pa 302 -652}%
+\special{pa 303 -656}\special{pa 303 -661}\special{pa 303 -666}\special{pa 303 -671}%
+\special{pa 303 -675}\special{pa 302 -680}\special{pa 301 -685}\special{pa 299 -690}%
+\special{pa 298 -694}\special{pa 296 -699}\special{pa 294 -704}\special{pa 291 -708}%
+\special{pa 288 -713}\special{pa 285 -717}\special{pa 282 -722}\special{pa 278 -726}%
+\special{pa 274 -730}\special{pa 270 -735}\special{pa 266 -739}\special{pa 261 -743}%
+\special{pa 256 -747}\special{pa 251 -751}\special{pa 245 -755}\special{pa 239 -759}%
+\special{pa 234 -763}\special{pa 227 -766}\special{pa 221 -770}\special{pa 214 -773}%
+\special{pa 207 -776}\special{pa 200 -780}\special{pa 193 -783}\special{pa 186 -786}%
+\special{pa 178 -789}\special{pa 170 -791}\special{pa 162 -794}\special{pa 154 -796}%
+\special{pa 146 -799}\special{pa 138 -801}\special{pa 129 -803}\special{pa 120 -805}%
+\special{pa 111 -807}\special{pa 103 -809}\special{pa 94 -810}\special{pa 84 -811}%
+\special{pa 75 -813}\special{pa 66 -814}\special{pa 57 -815}\special{pa 47 -816}%
+\special{pa 38 -816}\special{pa 28 -817}\special{pa 19 -817}\special{pa 9 -817}%
+\special{pa -0 -817}\special{pa -10 -817}\special{pa -19 -817}\special{pa -29 -817}%
+\special{pa -38 -816}\special{pa -48 -816}\special{pa -57 -815}\special{pa -66 -814}%
+\special{pa -75 -813}\special{pa -85 -811}\special{pa -94 -810}\special{pa -103 -808}%
+\special{pa -112 -807}\special{pa -120 -805}\special{pa -129 -803}\special{pa -138 -801}%
+\special{pa -146 -799}\special{pa -154 -796}\special{pa -163 -794}\special{pa -170 -791}%
+\special{pa -178 -788}\special{pa -186 -786}\special{pa -193 -783}\special{pa -201 -780}%
+\special{pa -208 -776}\special{pa -214 -773}\special{pa -221 -770}\special{pa -227 -766}%
+\special{pa -234 -762}\special{pa -240 -759}\special{pa -245 -755}\special{pa -251 -751}%
+\special{pa -256 -747}\special{pa -261 -743}\special{pa -266 -739}\special{pa -270 -735}%
+\special{pa -274 -730}\special{pa -278 -726}\special{pa -282 -722}\special{pa -285 -717}%
+\special{pa -288 -713}\special{pa -291 -708}\special{pa -294 -704}\special{pa -296 -699}%
+\special{pa -298 -694}\special{pa -299 -690}\special{pa -301 -685}\special{pa -302 -680}%
+\special{pa -303 -675}\special{pa -303 -671}\special{pa -303 -666}\special{pa -303 -661}%
+\special{pa -303 -656}\special{pa -302 -652}\special{pa -301 -647}\special{pa -299 -642}%
+\special{pa -298 -637}\special{pa -296 -633}\special{pa -294 -628}\special{pa -291 -624}%
+\special{pa -288 -619}\special{pa -285 -614}\special{pa -282 -610}\special{pa -278 -606}%
+\special{pa -274 -601}\special{pa -270 -597}\special{pa -266 -593}\special{pa -261 -589}%
+\special{pa -256 -585}\special{pa -251 -581}\special{pa -245 -577}\special{pa -239 -573}%
+\special{pa -234 -569}\special{pa -227 -566}\special{pa -221 -562}\special{pa -214 -559}%
+\special{pa -207 -555}%
+\special{fp}%
+\special{pa -226 -490}\special{pa -219 -487}\special{pa -211 -484}\special{pa -203 -480}%
+\special{pa -194 -477}\special{pa -186 -474}\special{pa -177 -471}\special{pa -168 -469}%
+\special{pa -159 -466}\special{pa -150 -464}\special{pa -141 -461}\special{pa -131 -459}%
+\special{pa -122 -457}\special{pa -112 -455}\special{pa -102 -454}\special{pa -92 -452}%
+\special{pa -82 -451}\special{pa -72 -450}\special{pa -62 -449}\special{pa -52 -448}%
+\special{pa -41 -447}\special{pa -31 -446}\special{pa -21 -446}\special{pa -10 -446}%
+\special{pa 0 -446}\special{pa 11 -446}\special{pa 21 -446}\special{pa 31 -446}%
+\special{pa 42 -447}\special{pa 52 -448}\special{pa 62 -449}\special{pa 72 -450}%
+\special{pa 82 -451}\special{pa 92 -452}\special{pa 102 -454}\special{pa 112 -455}%
+\special{pa 122 -457}\special{pa 131 -459}\special{pa 141 -461}\special{pa 150 -464}%
+\special{pa 159 -466}\special{pa 168 -469}\special{pa 177 -471}\special{pa 186 -474}%
+\special{pa 194 -477}\special{pa 203 -480}\special{pa 211 -484}\special{pa 219 -487}%
+\special{pa 226 -490}\special{pa 234 -494}\special{pa 241 -498}\special{pa 248 -502}%
+\special{pa 255 -506}\special{pa 261 -510}\special{pa 268 -514}\special{pa 274 -518}%
+\special{pa 279 -522}\special{pa 285 -527}\special{pa 290 -531}\special{pa 295 -536}%
+\special{pa 299 -541}\special{pa 304 -545}\special{pa 308 -550}\special{pa 311 -555}%
+\special{pa 315 -560}\special{pa 318 -565}\special{pa 320 -570}\special{pa 323 -575}%
+\special{pa 325 -580}\special{pa 327 -585}\special{pa 328 -590}\special{pa 329 -595}%
+\special{pa 330 -601}\special{pa 331 -606}\special{pa 331 -611}\special{pa 331 -616}%
+\special{pa 330 -621}\special{pa 329 -627}\special{pa 328 -632}\special{pa 327 -637}%
+\special{pa 325 -642}\special{pa 323 -647}\special{pa 320 -652}\special{pa 318 -657}%
+\special{pa 314 -662}\special{pa 311 -667}\special{pa 307 -672}\special{pa 303 -677}%
+\special{pa 299 -681}\special{pa 295 -686}\special{pa 290 -691}\special{pa 285 -695}%
+\special{pa 279 -700}\special{pa 273 -704}\special{pa 267 -708}\special{pa 261 -712}%
+\special{pa 255 -716}\special{pa 248 -720}\special{pa 241 -724}\special{pa 234 -728}%
+\special{pa 226 -732}\special{pa 219 -735}\special{pa 211 -738}\special{pa 203 -742}%
+\special{pa 194 -745}\special{pa 186 -748}\special{pa 177 -751}\special{pa 168 -753}%
+\special{pa 159 -756}\special{pa 150 -758}\special{pa 141 -761}\special{pa 131 -763}%
+\special{pa 122 -765}\special{pa 112 -767}\special{pa 102 -768}\special{pa 92 -770}%
+\special{pa 82 -771}\special{pa 72 -772}\special{pa 62 -773}\special{pa 52 -774}%
+\special{pa 41 -775}\special{pa 31 -776}\special{pa 21 -776}\special{pa 10 -776}%
+\special{pa -0 -776}\special{pa -11 -776}\special{pa -21 -776}\special{pa -31 -776}%
+\special{pa -42 -775}\special{pa -52 -774}\special{pa -62 -773}\special{pa -72 -772}%
+\special{pa -82 -771}\special{pa -92 -770}\special{pa -102 -768}\special{pa -112 -767}%
+\special{pa -122 -765}\special{pa -131 -763}\special{pa -141 -761}\special{pa -150 -758}%
+\special{pa -159 -756}\special{pa -168 -753}\special{pa -177 -751}\special{pa -186 -748}%
+\special{pa -194 -745}\special{pa -203 -742}\special{pa -211 -738}\special{pa -219 -735}%
+\special{pa -226 -731}\special{pa -234 -728}\special{pa -241 -724}\special{pa -248 -720}%
+\special{pa -255 -716}\special{pa -261 -712}\special{pa -268 -708}\special{pa -274 -704}%
+\special{pa -279 -700}\special{pa -285 -695}\special{pa -290 -691}\special{pa -295 -686}%
+\special{pa -299 -681}\special{pa -304 -677}\special{pa -308 -672}\special{pa -311 -667}%
+\special{pa -315 -662}\special{pa -318 -657}\special{pa -320 -652}\special{pa -323 -647}%
+\special{pa -325 -642}\special{pa -327 -637}\special{pa -328 -632}\special{pa -329 -626}%
+\special{pa -330 -621}\special{pa -331 -616}\special{pa -331 -611}\special{pa -331 -606}%
+\special{pa -330 -601}\special{pa -329 -595}\special{pa -328 -590}\special{pa -327 -585}%
+\special{pa -325 -580}\special{pa -323 -575}\special{pa -320 -570}\special{pa -318 -565}%
+\special{pa -314 -560}\special{pa -311 -555}\special{pa -307 -550}\special{pa -303 -545}%
+\special{pa -299 -541}\special{pa -295 -536}\special{pa -290 -531}\special{pa -285 -527}%
+\special{pa -279 -522}\special{pa -273 -518}\special{pa -267 -514}\special{pa -261 -510}%
+\special{pa -255 -506}\special{pa -248 -502}\special{pa -241 -498}\special{pa -234 -494}%
+\special{pa -226 -490}%
+\special{fp}%
+\special{pa -245 -421}\special{pa -237 -417}\special{pa -228 -413}\special{pa -219 -410}%
+\special{pa -210 -406}\special{pa -201 -403}\special{pa -192 -400}\special{pa -182 -397}%
+\special{pa -172 -394}\special{pa -163 -392}\special{pa -152 -389}\special{pa -142 -387}%
+\special{pa -132 -385}\special{pa -121 -383}\special{pa -111 -381}\special{pa -100 -379}%
+\special{pa -89 -378}\special{pa -78 -376}\special{pa -67 -375}\special{pa -56 -374}%
+\special{pa -45 -374}\special{pa -34 -373}\special{pa -22 -373}\special{pa -11 -372}%
+\special{pa 0 -372}\special{pa 11 -372}\special{pa 23 -373}\special{pa 34 -373}%
+\special{pa 45 -374}\special{pa 56 -374}\special{pa 67 -375}\special{pa 78 -377}%
+\special{pa 89 -378}\special{pa 100 -379}\special{pa 111 -381}\special{pa 121 -383}%
+\special{pa 132 -385}\special{pa 142 -387}\special{pa 153 -389}\special{pa 163 -392}%
+\special{pa 173 -394}\special{pa 182 -397}\special{pa 192 -400}\special{pa 201 -403}%
+\special{pa 211 -406}\special{pa 220 -410}\special{pa 228 -413}\special{pa 237 -417}%
+\special{pa 245 -421}\special{pa 253 -425}\special{pa 261 -429}\special{pa 269 -433}%
+\special{pa 276 -437}\special{pa 283 -442}\special{pa 290 -446}\special{pa 296 -451}%
+\special{pa 303 -455}\special{pa 308 -460}\special{pa 314 -465}\special{pa 319 -470}%
+\special{pa 324 -475}\special{pa 329 -480}\special{pa 333 -485}\special{pa 337 -491}%
+\special{pa 341 -496}\special{pa 344 -501}\special{pa 347 -507}\special{pa 350 -512}%
+\special{pa 352 -518}\special{pa 354 -523}\special{pa 355 -529}\special{pa 357 -535}%
+\special{pa 358 -540}\special{pa 358 -546}\special{pa 358 -551}\special{pa 358 -557}%
+\special{pa 358 -563}\special{pa 357 -568}\special{pa 355 -574}\special{pa 354 -579}%
+\special{pa 352 -585}\special{pa 350 -590}\special{pa 347 -596}\special{pa 344 -601}%
+\special{pa 341 -607}\special{pa 337 -612}\special{pa 333 -617}\special{pa 329 -623}%
+\special{pa 324 -628}\special{pa 319 -633}\special{pa 314 -638}\special{pa 308 -643}%
+\special{pa 302 -647}\special{pa 296 -652}\special{pa 290 -657}\special{pa 283 -661}%
+\special{pa 276 -666}\special{pa 269 -670}\special{pa 261 -674}\special{pa 253 -678}%
+\special{pa 245 -682}\special{pa 237 -686}\special{pa 228 -689}\special{pa 219 -693}%
+\special{pa 210 -696}\special{pa 201 -700}\special{pa 192 -703}\special{pa 182 -706}%
+\special{pa 172 -708}\special{pa 163 -711}\special{pa 152 -713}\special{pa 142 -716}%
+\special{pa 132 -718}\special{pa 121 -720}\special{pa 111 -722}\special{pa 100 -723}%
+\special{pa 89 -725}\special{pa 78 -726}\special{pa 67 -727}\special{pa 56 -728}%
+\special{pa 45 -729}\special{pa 34 -730}\special{pa 22 -730}\special{pa 11 -730}%
+\special{pa -0 -730}\special{pa -11 -730}\special{pa -23 -730}\special{pa -34 -730}%
+\special{pa -45 -729}\special{pa -56 -728}\special{pa -67 -727}\special{pa -78 -726}%
+\special{pa -89 -725}\special{pa -100 -723}\special{pa -111 -722}\special{pa -121 -720}%
+\special{pa -132 -718}\special{pa -142 -716}\special{pa -153 -713}\special{pa -163 -711}%
+\special{pa -173 -708}\special{pa -182 -705}\special{pa -192 -703}\special{pa -201 -699}%
+\special{pa -211 -696}\special{pa -220 -693}\special{pa -228 -689}\special{pa -237 -686}%
+\special{pa -245 -682}\special{pa -253 -678}\special{pa -261 -674}\special{pa -269 -670}%
+\special{pa -276 -665}\special{pa -283 -661}\special{pa -290 -657}\special{pa -296 -652}%
+\special{pa -303 -647}\special{pa -308 -642}\special{pa -314 -638}\special{pa -319 -633}%
+\special{pa -324 -628}\special{pa -329 -622}\special{pa -333 -617}\special{pa -337 -612}%
+\special{pa -341 -607}\special{pa -344 -601}\special{pa -347 -596}\special{pa -350 -590}%
+\special{pa -352 -585}\special{pa -354 -579}\special{pa -355 -574}\special{pa -357 -568}%
+\special{pa -358 -563}\special{pa -358 -557}\special{pa -358 -551}\special{pa -358 -546}%
+\special{pa -358 -540}\special{pa -357 -534}\special{pa -355 -529}\special{pa -354 -523}%
+\special{pa -352 -518}\special{pa -350 -512}\special{pa -347 -507}\special{pa -344 -501}%
+\special{pa -341 -496}\special{pa -337 -491}\special{pa -333 -485}\special{pa -329 -480}%
+\special{pa -324 -475}\special{pa -319 -470}\special{pa -314 -465}\special{pa -308 -460}%
+\special{pa -302 -455}\special{pa -296 -451}\special{pa -290 -446}\special{pa -283 -441}%
+\special{pa -276 -437}\special{pa -269 -433}\special{pa -261 -429}\special{pa -253 -425}%
+\special{pa -245 -421}%
+\special{fp}%
+\special{pa -264 -346}\special{pa -255 -342}\special{pa -246 -338}\special{pa -236 -334}%
+\special{pa -227 -331}\special{pa -217 -327}\special{pa -207 -324}\special{pa -196 -321}%
+\special{pa -186 -318}\special{pa -175 -315}\special{pa -164 -312}\special{pa -153 -310}%
+\special{pa -142 -307}\special{pa -131 -305}\special{pa -119 -303}\special{pa -108 -302}%
+\special{pa -96 -300}\special{pa -84 -299}\special{pa -72 -297}\special{pa -60 -296}%
+\special{pa -48 -295}\special{pa -36 -295}\special{pa -24 -294}\special{pa -12 -294}%
+\special{pa 0 -294}\special{pa 12 -294}\special{pa 24 -294}\special{pa 36 -295}%
+\special{pa 48 -296}\special{pa 60 -296}\special{pa 72 -297}\special{pa 84 -299}%
+\special{pa 96 -300}\special{pa 108 -302}\special{pa 119 -303}\special{pa 131 -305}%
+\special{pa 142 -308}\special{pa 153 -310}\special{pa 164 -312}\special{pa 175 -315}%
+\special{pa 186 -318}\special{pa 197 -321}\special{pa 207 -324}\special{pa 217 -327}%
+\special{pa 227 -331}\special{pa 237 -334}\special{pa 246 -338}\special{pa 255 -342}%
+\special{pa 264 -346}\special{pa 273 -351}\special{pa 281 -355}\special{pa 290 -359}%
+\special{pa 297 -364}\special{pa 305 -369}\special{pa 312 -374}\special{pa 319 -379}%
+\special{pa 326 -384}\special{pa 332 -389}\special{pa 338 -394}\special{pa 344 -399}%
+\special{pa 349 -405}\special{pa 354 -410}\special{pa 359 -416}\special{pa 363 -422}%
+\special{pa 367 -427}\special{pa 371 -433}\special{pa 374 -439}\special{pa 377 -445}%
+\special{pa 379 -451}\special{pa 381 -457}\special{pa 383 -463}\special{pa 384 -469}%
+\special{pa 385 -475}\special{pa 386 -481}\special{pa 386 -487}\special{pa 386 -493}%
+\special{pa 385 -499}\special{pa 384 -505}\special{pa 383 -511}\special{pa 381 -517}%
+\special{pa 379 -523}\special{pa 377 -529}\special{pa 374 -535}\special{pa 370 -541}%
+\special{pa 367 -547}\special{pa 363 -552}\special{pa 359 -558}\special{pa 354 -564}%
+\special{pa 349 -569}\special{pa 344 -575}\special{pa 338 -580}\special{pa 332 -585}%
+\special{pa 326 -590}\special{pa 319 -595}\special{pa 312 -600}\special{pa 305 -605}%
+\special{pa 297 -610}\special{pa 289 -615}\special{pa 281 -619}\special{pa 273 -623}%
+\special{pa 264 -628}\special{pa 255 -632}\special{pa 246 -636}\special{pa 236 -639}%
+\special{pa 227 -643}\special{pa 217 -646}\special{pa 207 -650}\special{pa 196 -653}%
+\special{pa 186 -656}\special{pa 175 -659}\special{pa 164 -661}\special{pa 153 -664}%
+\special{pa 142 -666}\special{pa 131 -668}\special{pa 119 -670}\special{pa 108 -672}%
+\special{pa 96 -674}\special{pa 84 -675}\special{pa 72 -676}\special{pa 60 -677}%
+\special{pa 48 -678}\special{pa 36 -679}\special{pa 24 -679}\special{pa 12 -680}%
+\special{pa -0 -680}\special{pa -12 -680}\special{pa -24 -679}\special{pa -36 -679}%
+\special{pa -48 -678}\special{pa -60 -677}\special{pa -72 -676}\special{pa -84 -675}%
+\special{pa -96 -674}\special{pa -108 -672}\special{pa -119 -670}\special{pa -131 -668}%
+\special{pa -142 -666}\special{pa -153 -664}\special{pa -164 -661}\special{pa -175 -659}%
+\special{pa -186 -656}\special{pa -197 -653}\special{pa -207 -650}\special{pa -217 -646}%
+\special{pa -227 -643}\special{pa -237 -639}\special{pa -246 -635}\special{pa -255 -632}%
+\special{pa -264 -627}\special{pa -273 -623}\special{pa -281 -619}\special{pa -290 -614}%
+\special{pa -297 -610}\special{pa -305 -605}\special{pa -312 -600}\special{pa -319 -595}%
+\special{pa -326 -590}\special{pa -332 -585}\special{pa -338 -580}\special{pa -344 -574}%
+\special{pa -349 -569}\special{pa -354 -563}\special{pa -359 -558}\special{pa -363 -552}%
+\special{pa -367 -546}\special{pa -371 -541}\special{pa -374 -535}\special{pa -377 -529}%
+\special{pa -379 -523}\special{pa -381 -517}\special{pa -383 -511}\special{pa -384 -505}%
+\special{pa -385 -499}\special{pa -386 -493}\special{pa -386 -487}\special{pa -386 -481}%
+\special{pa -385 -475}\special{pa -384 -469}\special{pa -383 -463}\special{pa -381 -457}%
+\special{pa -379 -451}\special{pa -377 -445}\special{pa -374 -439}\special{pa -370 -433}%
+\special{pa -367 -427}\special{pa -363 -421}\special{pa -359 -416}\special{pa -354 -410}%
+\special{pa -349 -405}\special{pa -344 -399}\special{pa -338 -394}\special{pa -332 -389}%
+\special{pa -326 -383}\special{pa -319 -378}\special{pa -312 -373}\special{pa -305 -369}%
+\special{pa -297 -364}\special{pa -289 -359}\special{pa -281 -355}\special{pa -273 -350}%
+\special{pa -264 -346}%
+\special{fp}%
+\special{pa -283 -267}\special{pa -273 -263}\special{pa -263 -258}\special{pa -253 -254}%
+\special{pa -243 -250}\special{pa -232 -247}\special{pa -221 -243}\special{pa -210 -240}%
+\special{pa -199 -237}\special{pa -188 -233}\special{pa -176 -231}\special{pa -164 -228}%
+\special{pa -152 -225}\special{pa -140 -223}\special{pa -128 -221}\special{pa -115 -219}%
+\special{pa -103 -217}\special{pa -90 -216}\special{pa -77 -215}\special{pa -65 -214}%
+\special{pa -52 -213}\special{pa -39 -212}\special{pa -26 -211}\special{pa -13 -211}%
+\special{pa 0 -211}\special{pa 13 -211}\special{pa 26 -211}\special{pa 39 -212}%
+\special{pa 52 -213}\special{pa 65 -214}\special{pa 78 -215}\special{pa 90 -216}%
+\special{pa 103 -217}\special{pa 115 -219}\special{pa 128 -221}\special{pa 140 -223}%
+\special{pa 152 -226}\special{pa 164 -228}\special{pa 176 -231}\special{pa 188 -234}%
+\special{pa 199 -237}\special{pa 211 -240}\special{pa 222 -243}\special{pa 232 -247}%
+\special{pa 243 -250}\special{pa 253 -254}\special{pa 264 -258}\special{pa 273 -263}%
+\special{pa 283 -267}\special{pa 292 -272}\special{pa 301 -276}\special{pa 310 -281}%
+\special{pa 319 -286}\special{pa 327 -291}\special{pa 335 -296}\special{pa 342 -302}%
+\special{pa 349 -307}\special{pa 356 -313}\special{pa 362 -318}\special{pa 368 -324}%
+\special{pa 374 -330}\special{pa 379 -336}\special{pa 384 -342}\special{pa 389 -348}%
+\special{pa 393 -354}\special{pa 397 -360}\special{pa 400 -366}\special{pa 403 -373}%
+\special{pa 406 -379}\special{pa 408 -385}\special{pa 410 -392}\special{pa 412 -398}%
+\special{pa 413 -405}\special{pa 413 -411}\special{pa 413 -418}\special{pa 413 -424}%
+\special{pa 413 -431}\special{pa 412 -437}\special{pa 410 -444}\special{pa 408 -450}%
+\special{pa 406 -456}\special{pa 403 -463}\special{pa 400 -469}\special{pa 397 -475}%
+\special{pa 393 -482}\special{pa 389 -488}\special{pa 384 -494}\special{pa 379 -500}%
+\special{pa 374 -506}\special{pa 368 -512}\special{pa 362 -517}\special{pa 356 -523}%
+\special{pa 349 -528}\special{pa 342 -534}\special{pa 334 -539}\special{pa 327 -544}%
+\special{pa 318 -549}\special{pa 310 -554}\special{pa 301 -559}\special{pa 292 -564}%
+\special{pa 283 -568}\special{pa 273 -573}\special{pa 263 -577}\special{pa 253 -581}%
+\special{pa 243 -585}\special{pa 232 -589}\special{pa 221 -592}\special{pa 210 -596}%
+\special{pa 199 -599}\special{pa 188 -602}\special{pa 176 -605}\special{pa 164 -607}%
+\special{pa 152 -610}\special{pa 140 -612}\special{pa 128 -614}\special{pa 115 -616}%
+\special{pa 103 -618}\special{pa 90 -619}\special{pa 77 -621}\special{pa 65 -622}%
+\special{pa 52 -623}\special{pa 39 -623}\special{pa 26 -624}\special{pa 13 -624}%
+\special{pa -0 -624}\special{pa -13 -624}\special{pa -26 -624}\special{pa -39 -623}%
+\special{pa -52 -623}\special{pa -65 -622}\special{pa -78 -621}\special{pa -90 -619}%
+\special{pa -103 -618}\special{pa -115 -616}\special{pa -128 -614}\special{pa -140 -612}%
+\special{pa -152 -610}\special{pa -164 -607}\special{pa -176 -605}\special{pa -188 -602}%
+\special{pa -199 -599}\special{pa -211 -596}\special{pa -222 -592}\special{pa -232 -589}%
+\special{pa -243 -585}\special{pa -253 -581}\special{pa -264 -577}\special{pa -273 -573}%
+\special{pa -283 -568}\special{pa -292 -564}\special{pa -301 -559}\special{pa -310 -554}%
+\special{pa -319 -549}\special{pa -327 -544}\special{pa -335 -539}\special{pa -342 -534}%
+\special{pa -349 -528}\special{pa -356 -523}\special{pa -362 -517}\special{pa -368 -511}%
+\special{pa -374 -506}\special{pa -379 -500}\special{pa -384 -494}\special{pa -389 -488}%
+\special{pa -393 -481}\special{pa -397 -475}\special{pa -400 -469}\special{pa -403 -463}%
+\special{pa -406 -456}\special{pa -408 -450}\special{pa -410 -444}\special{pa -412 -437}%
+\special{pa -413 -431}\special{pa -413 -424}\special{pa -413 -418}\special{pa -413 -411}%
+\special{pa -413 -405}\special{pa -412 -398}\special{pa -410 -392}\special{pa -408 -385}%
+\special{pa -406 -379}\special{pa -403 -373}\special{pa -400 -366}\special{pa -397 -360}%
+\special{pa -393 -354}\special{pa -389 -348}\special{pa -384 -342}\special{pa -379 -336}%
+\special{pa -374 -330}\special{pa -368 -324}\special{pa -362 -318}\special{pa -356 -312}%
+\special{pa -349 -307}\special{pa -342 -301}\special{pa -334 -296}\special{pa -327 -291}%
+\special{pa -318 -286}\special{pa -310 -281}\special{pa -301 -276}\special{pa -292 -271}%
+\special{pa -283 -267}%
+\special{fp}%
+\special{pa -302 -183}\special{pa -291 -178}\special{pa -281 -174}\special{pa -270 -169}%
+\special{pa -259 -165}\special{pa -248 -161}\special{pa -236 -157}\special{pa -224 -154}%
+\special{pa -212 -150}\special{pa -200 -147}\special{pa -188 -144}\special{pa -175 -141}%
+\special{pa -162 -139}\special{pa -149 -136}\special{pa -136 -134}\special{pa -123 -132}%
+\special{pa -110 -130}\special{pa -96 -129}\special{pa -82 -127}\special{pa -69 -126}%
+\special{pa -55 -125}\special{pa -41 -124}\special{pa -28 -124}\special{pa -14 -123}%
+\special{pa 0 -123}\special{pa 14 -123}\special{pa 28 -124}\special{pa 42 -124}%
+\special{pa 55 -125}\special{pa 69 -126}\special{pa 83 -127}\special{pa 96 -129}%
+\special{pa 110 -130}\special{pa 123 -132}\special{pa 136 -134}\special{pa 150 -136}%
+\special{pa 162 -139}\special{pa 175 -141}\special{pa 188 -144}\special{pa 200 -147}%
+\special{pa 213 -151}\special{pa 225 -154}\special{pa 236 -158}\special{pa 248 -161}%
+\special{pa 259 -165}\special{pa 270 -170}\special{pa 281 -174}\special{pa 292 -178}%
+\special{pa 302 -183}\special{pa 312 -188}\special{pa 322 -193}\special{pa 331 -198}%
+\special{pa 340 -203}\special{pa 349 -209}\special{pa 357 -214}\special{pa 365 -220}%
+\special{pa 372 -226}\special{pa 380 -232}\special{pa 386 -238}\special{pa 393 -244}%
+\special{pa 399 -250}\special{pa 405 -256}\special{pa 410 -263}\special{pa 415 -269}%
+\special{pa 419 -276}\special{pa 423 -282}\special{pa 427 -289}\special{pa 430 -296}%
+\special{pa 433 -302}\special{pa 436 -309}\special{pa 437 -316}\special{pa 439 -323}%
+\special{pa 440 -330}\special{pa 441 -337}\special{pa 441 -344}\special{pa 441 -351}%
+\special{pa 440 -358}\special{pa 439 -365}\special{pa 437 -371}\special{pa 435 -378}%
+\special{pa 433 -385}\special{pa 430 -392}\special{pa 427 -399}\special{pa 423 -405}%
+\special{pa 419 -412}\special{pa 415 -418}\special{pa 410 -425}\special{pa 405 -431}%
+\special{pa 399 -438}\special{pa 393 -444}\special{pa 386 -450}\special{pa 379 -456}%
+\special{pa 372 -462}\special{pa 365 -468}\special{pa 357 -473}\special{pa 348 -479}%
+\special{pa 340 -484}\special{pa 331 -490}\special{pa 321 -495}\special{pa 312 -500}%
+\special{pa 302 -504}\special{pa 291 -509}\special{pa 281 -514}\special{pa 270 -518}%
+\special{pa 259 -522}\special{pa 248 -526}\special{pa 236 -530}\special{pa 224 -533}%
+\special{pa 212 -537}\special{pa 200 -540}\special{pa 188 -543}\special{pa 175 -546}%
+\special{pa 162 -549}\special{pa 149 -551}\special{pa 136 -553}\special{pa 123 -555}%
+\special{pa 110 -557}\special{pa 96 -559}\special{pa 82 -560}\special{pa 69 -561}%
+\special{pa 55 -562}\special{pa 41 -563}\special{pa 28 -564}\special{pa 14 -564}%
+\special{pa -0 -564}\special{pa -14 -564}\special{pa -28 -564}\special{pa -42 -563}%
+\special{pa -55 -562}\special{pa -69 -561}\special{pa -83 -560}\special{pa -96 -559}%
+\special{pa -110 -557}\special{pa -123 -555}\special{pa -136 -553}\special{pa -150 -551}%
+\special{pa -162 -549}\special{pa -175 -546}\special{pa -188 -543}\special{pa -200 -540}%
+\special{pa -213 -537}\special{pa -225 -533}\special{pa -236 -530}\special{pa -248 -526}%
+\special{pa -259 -522}\special{pa -270 -518}\special{pa -281 -514}\special{pa -292 -509}%
+\special{pa -302 -504}\special{pa -312 -500}\special{pa -322 -495}\special{pa -331 -489}%
+\special{pa -340 -484}\special{pa -349 -479}\special{pa -357 -473}\special{pa -365 -468}%
+\special{pa -372 -462}\special{pa -380 -456}\special{pa -386 -450}\special{pa -393 -444}%
+\special{pa -399 -437}\special{pa -405 -431}\special{pa -410 -425}\special{pa -415 -418}%
+\special{pa -419 -412}\special{pa -423 -405}\special{pa -427 -398}\special{pa -430 -392}%
+\special{pa -433 -385}\special{pa -436 -378}\special{pa -437 -371}\special{pa -439 -364}%
+\special{pa -440 -357}\special{pa -441 -351}\special{pa -441 -344}\special{pa -441 -337}%
+\special{pa -440 -330}\special{pa -439 -323}\special{pa -437 -316}\special{pa -435 -309}%
+\special{pa -433 -302}\special{pa -430 -296}\special{pa -427 -289}\special{pa -423 -282}%
+\special{pa -419 -275}\special{pa -415 -269}\special{pa -410 -262}\special{pa -405 -256}%
+\special{pa -399 -250}\special{pa -393 -244}\special{pa -386 -237}\special{pa -379 -231}%
+\special{pa -372 -225}\special{pa -365 -220}\special{pa -357 -214}\special{pa -348 -208}%
+\special{pa -340 -203}\special{pa -331 -198}\special{pa -321 -193}\special{pa -312 -188}%
+\special{pa -302 -183}%
+\special{fp}%
+\special{pa -321 -94}\special{pa -310 -89}\special{pa -299 -84}\special{pa -287 -80}%
+\special{pa -275 -75}\special{pa -263 -71}\special{pa -251 -67}\special{pa -238 -63}%
+\special{pa -226 -60}\special{pa -213 -56}\special{pa -199 -53}\special{pa -186 -50}%
+\special{pa -172 -47}\special{pa -159 -44}\special{pa -145 -42}\special{pa -131 -40}%
+\special{pa -116 -38}\special{pa -102 -36}\special{pa -88 -35}\special{pa -73 -34}%
+\special{pa -59 -33}\special{pa -44 -32}\special{pa -29 -31}\special{pa -15 -31}%
+\special{pa 0 -31}\special{pa 15 -31}\special{pa 30 -31}\special{pa 44 -32}%
+\special{pa 59 -33}\special{pa 73 -34}\special{pa 88 -35}\special{pa 102 -36}%
+\special{pa 117 -38}\special{pa 131 -40}\special{pa 145 -42}\special{pa 159 -45}%
+\special{pa 173 -47}\special{pa 186 -50}\special{pa 200 -53}\special{pa 213 -56}%
+\special{pa 226 -60}\special{pa 239 -63}\special{pa 251 -67}\special{pa 263 -71}%
+\special{pa 276 -75}\special{pa 287 -80}\special{pa 299 -84}\special{pa 310 -89}%
+\special{pa 321 -94}\special{pa 331 -99}\special{pa 342 -105}\special{pa 352 -110}%
+\special{pa 361 -116}\special{pa 370 -121}\special{pa 379 -127}\special{pa 388 -133}%
+\special{pa 396 -139}\special{pa 403 -146}\special{pa 411 -152}\special{pa 418 -159}%
+\special{pa 424 -165}\special{pa 430 -172}\special{pa 436 -179}\special{pa 441 -186}%
+\special{pa 446 -193}\special{pa 450 -200}\special{pa 454 -207}\special{pa 457 -214}%
+\special{pa 460 -221}\special{pa 463 -228}\special{pa 465 -236}\special{pa 466 -243}%
+\special{pa 468 -250}\special{pa 468 -258}\special{pa 469 -265}\special{pa 468 -272}%
+\special{pa 468 -280}\special{pa 466 -287}\special{pa 465 -294}\special{pa 463 -302}%
+\special{pa 460 -309}\special{pa 457 -316}\special{pa 454 -323}\special{pa 450 -330}%
+\special{pa 446 -337}\special{pa 441 -344}\special{pa 436 -351}\special{pa 430 -358}%
+\special{pa 424 -365}\special{pa 417 -371}\special{pa 410 -378}\special{pa 403 -384}%
+\special{pa 395 -391}\special{pa 387 -397}\special{pa 379 -403}\special{pa 370 -409}%
+\special{pa 361 -414}\special{pa 351 -420}\special{pa 341 -425}\special{pa 331 -431}%
+\special{pa 321 -436}\special{pa 310 -441}\special{pa 299 -445}\special{pa 287 -450}%
+\special{pa 275 -454}\special{pa 263 -459}\special{pa 251 -463}\special{pa 238 -467}%
+\special{pa 226 -470}\special{pa 213 -474}\special{pa 199 -477}\special{pa 186 -480}%
+\special{pa 172 -483}\special{pa 159 -485}\special{pa 145 -488}\special{pa 131 -490}%
+\special{pa 116 -492}\special{pa 102 -494}\special{pa 88 -495}\special{pa 73 -496}%
+\special{pa 59 -497}\special{pa 44 -498}\special{pa 29 -499}\special{pa 15 -499}%
+\special{pa -0 -499}\special{pa -15 -499}\special{pa -30 -499}\special{pa -44 -498}%
+\special{pa -59 -497}\special{pa -73 -496}\special{pa -88 -495}\special{pa -102 -494}%
+\special{pa -117 -492}\special{pa -131 -490}\special{pa -145 -488}\special{pa -159 -485}%
+\special{pa -173 -483}\special{pa -186 -480}\special{pa -200 -477}\special{pa -213 -474}%
+\special{pa -226 -470}\special{pa -239 -467}\special{pa -251 -463}\special{pa -263 -459}%
+\special{pa -276 -454}\special{pa -287 -450}\special{pa -299 -445}\special{pa -310 -441}%
+\special{pa -321 -436}\special{pa -331 -431}\special{pa -342 -425}\special{pa -352 -420}%
+\special{pa -361 -414}\special{pa -370 -408}\special{pa -379 -403}\special{pa -388 -397}%
+\special{pa -396 -390}\special{pa -403 -384}\special{pa -411 -378}\special{pa -418 -371}%
+\special{pa -424 -365}\special{pa -430 -358}\special{pa -436 -351}\special{pa -441 -344}%
+\special{pa -446 -337}\special{pa -450 -330}\special{pa -454 -323}\special{pa -457 -316}%
+\special{pa -460 -309}\special{pa -463 -301}\special{pa -465 -294}\special{pa -466 -287}%
+\special{pa -468 -280}\special{pa -468 -272}\special{pa -469 -265}\special{pa -468 -257}%
+\special{pa -468 -250}\special{pa -466 -243}\special{pa -465 -235}\special{pa -463 -228}%
+\special{pa -460 -221}\special{pa -457 -214}\special{pa -454 -207}\special{pa -450 -199}%
+\special{pa -446 -192}\special{pa -441 -185}\special{pa -436 -179}\special{pa -430 -172}%
+\special{pa -424 -165}\special{pa -417 -158}\special{pa -410 -152}\special{pa -403 -146}%
+\special{pa -395 -139}\special{pa -387 -133}\special{pa -379 -127}\special{pa -370 -121}%
+\special{pa -361 -116}\special{pa -351 -110}\special{pa -341 -105}\special{pa -331 -99}%
+\special{pa -321 -94}%
+\special{fp}%
+\special{pa -339 -1}\special{pa -328 5}\special{pa -316 10}\special{pa -304 15}%
+\special{pa -291 19}\special{pa -279 24}\special{pa -266 28}\special{pa -252 32}%
+\special{pa -239 36}\special{pa -225 40}\special{pa -211 43}\special{pa -197 46}%
+\special{pa -182 49}\special{pa -168 52}\special{pa -153 55}\special{pa -138 57}%
+\special{pa -123 59}\special{pa -108 61}\special{pa -93 62}\special{pa -77 64}%
+\special{pa -62 65}\special{pa -47 66}\special{pa -31 66}\special{pa -15 67}%
+\special{pa 0 67}\special{pa 16 67}\special{pa 31 66}\special{pa 47 66}%
+\special{pa 62 65}\special{pa 78 64}\special{pa 93 62}\special{pa 108 61}%
+\special{pa 124 59}\special{pa 139 57}\special{pa 153 54}\special{pa 168 52}%
+\special{pa 183 49}\special{pa 197 46}\special{pa 211 43}\special{pa 225 40}%
+\special{pa 239 36}\special{pa 253 32}\special{pa 266 28}\special{pa 279 24}%
+\special{pa 292 19}\special{pa 304 15}\special{pa 316 10}\special{pa 328 5}%
+\special{pa 340 -1}\special{pa 351 -6}\special{pa 362 -12}\special{pa 372 -17}%
+\special{pa 382 -23}\special{pa 392 -29}\special{pa 401 -36}\special{pa 410 -42}%
+\special{pa 419 -49}\special{pa 427 -55}\special{pa 435 -62}\special{pa 442 -69}%
+\special{pa 449 -76}\special{pa 455 -83}\special{pa 461 -90}\special{pa 467 -97}%
+\special{pa 472 -105}\special{pa 476 -112}\special{pa 481 -120}\special{pa 484 -127}%
+\special{pa 487 -135}\special{pa 490 -143}\special{pa 492 -150}\special{pa 494 -158}%
+\special{pa 495 -166}\special{pa 496 -174}\special{pa 496 -181}\special{pa 496 -189}%
+\special{pa 495 -197}\special{pa 494 -205}\special{pa 492 -213}\special{pa 490 -220}%
+\special{pa 487 -228}\special{pa 484 -236}\special{pa 480 -243}\special{pa 476 -251}%
+\special{pa 472 -258}\special{pa 467 -265}\special{pa 461 -273}\special{pa 455 -280}%
+\special{pa 449 -287}\special{pa 442 -294}\special{pa 435 -301}\special{pa 427 -308}%
+\special{pa 419 -314}\special{pa 410 -321}\special{pa 401 -327}\special{pa 392 -333}%
+\special{pa 382 -340}\special{pa 372 -345}\special{pa 361 -351}\special{pa 351 -357}%
+\special{pa 339 -362}\special{pa 328 -367}\special{pa 316 -373}\special{pa 304 -377}%
+\special{pa 291 -382}\special{pa 279 -387}\special{pa 266 -391}\special{pa 252 -395}%
+\special{pa 239 -399}\special{pa 225 -402}\special{pa 211 -406}\special{pa 197 -409}%
+\special{pa 182 -412}\special{pa 168 -415}\special{pa 153 -417}\special{pa 138 -420}%
+\special{pa 123 -422}\special{pa 108 -423}\special{pa 93 -425}\special{pa 77 -426}%
+\special{pa 62 -427}\special{pa 47 -428}\special{pa 31 -429}\special{pa 15 -429}%
+\special{pa -0 -429}\special{pa -16 -429}\special{pa -31 -429}\special{pa -47 -428}%
+\special{pa -62 -427}\special{pa -78 -426}\special{pa -93 -425}\special{pa -108 -423}%
+\special{pa -124 -422}\special{pa -139 -420}\special{pa -153 -417}\special{pa -168 -415}%
+\special{pa -183 -412}\special{pa -197 -409}\special{pa -211 -406}\special{pa -225 -402}%
+\special{pa -239 -399}\special{pa -253 -395}\special{pa -266 -391}\special{pa -279 -386}%
+\special{pa -292 -382}\special{pa -304 -377}\special{pa -316 -372}\special{pa -328 -367}%
+\special{pa -340 -362}\special{pa -351 -357}\special{pa -362 -351}\special{pa -372 -345}%
+\special{pa -382 -339}\special{pa -392 -333}\special{pa -401 -327}\special{pa -410 -321}%
+\special{pa -419 -314}\special{pa -427 -308}\special{pa -435 -301}\special{pa -442 -294}%
+\special{pa -449 -287}\special{pa -455 -280}\special{pa -461 -273}\special{pa -467 -265}%
+\special{pa -472 -258}\special{pa -476 -251}\special{pa -481 -243}\special{pa -484 -235}%
+\special{pa -487 -228}\special{pa -490 -220}\special{pa -492 -212}\special{pa -494 -205}%
+\special{pa -495 -197}\special{pa -496 -189}\special{pa -496 -181}\special{pa -496 -174}%
+\special{pa -495 -166}\special{pa -494 -158}\special{pa -492 -150}\special{pa -490 -142}%
+\special{pa -487 -135}\special{pa -484 -127}\special{pa -480 -120}\special{pa -476 -112}%
+\special{pa -472 -105}\special{pa -467 -97}\special{pa -461 -90}\special{pa -455 -83}%
+\special{pa -449 -76}\special{pa -442 -69}\special{pa -435 -62}\special{pa -427 -55}%
+\special{pa -419 -48}\special{pa -410 -42}\special{pa -401 -36}\special{pa -392 -29}%
+\special{pa -382 -23}\special{pa -372 -17}\special{pa -361 -12}\special{pa -351 -6}%
+\special{pa -339 -1}%
+\special{fp}%
+\special{pa -358 98}\special{pa -346 103}\special{pa -334 109}\special{pa -321 114}%
+\special{pa -308 119}\special{pa -294 124}\special{pa -280 128}\special{pa -266 132}%
+\special{pa -252 136}\special{pa -238 140}\special{pa -223 144}\special{pa -208 147}%
+\special{pa -193 150}\special{pa -177 153}\special{pa -162 156}\special{pa -146 158}%
+\special{pa -130 161}\special{pa -114 162}\special{pa -98 164}\special{pa -82 166}%
+\special{pa -65 167}\special{pa -49 168}\special{pa -33 168}\special{pa -16 169}%
+\special{pa 0 169}\special{pa 17 169}\special{pa 33 168}\special{pa 49 168}%
+\special{pa 66 167}\special{pa 82 165}\special{pa 98 164}\special{pa 114 162}%
+\special{pa 130 160}\special{pa 146 158}\special{pa 162 156}\special{pa 178 153}%
+\special{pa 193 150}\special{pa 208 147}\special{pa 223 144}\special{pa 238 140}%
+\special{pa 252 136}\special{pa 267 132}\special{pa 281 128}\special{pa 294 123}%
+\special{pa 308 119}\special{pa 321 114}\special{pa 334 109}\special{pa 346 103}%
+\special{pa 359 98}\special{pa 370 92}\special{pa 382 86}\special{pa 393 80}%
+\special{pa 404 74}\special{pa 414 67}\special{pa 424 61}\special{pa 433 54}%
+\special{pa 442 47}\special{pa 451 40}\special{pa 459 33}\special{pa 467 26}%
+\special{pa 474 18}\special{pa 481 11}\special{pa 487 3}\special{pa 493 -4}%
+\special{pa 498 -12}\special{pa 503 -20}\special{pa 507 -28}\special{pa 511 -36}%
+\special{pa 514 -44}\special{pa 517 -52}\special{pa 520 -60}\special{pa 521 -69}%
+\special{pa 523 -77}\special{pa 523 -85}\special{pa 524 -93}\special{pa 523 -101}%
+\special{pa 523 -110}\special{pa 521 -118}\special{pa 519 -126}\special{pa 517 -134}%
+\special{pa 514 -142}\special{pa 511 -150}\special{pa 507 -158}\special{pa 503 -166}%
+\special{pa 498 -174}\special{pa 493 -182}\special{pa 487 -190}\special{pa 480 -197}%
+\special{pa 474 -205}\special{pa 466 -212}\special{pa 459 -219}\special{pa 451 -226}%
+\special{pa 442 -233}\special{pa 433 -240}\special{pa 424 -247}\special{pa 414 -254}%
+\special{pa 403 -260}\special{pa 393 -266}\special{pa 382 -272}\special{pa 370 -278}%
+\special{pa 358 -284}\special{pa 346 -290}\special{pa 334 -295}\special{pa 321 -300}%
+\special{pa 308 -305}\special{pa 294 -310}\special{pa 280 -314}\special{pa 266 -318}%
+\special{pa 252 -323}\special{pa 238 -326}\special{pa 223 -330}\special{pa 208 -333}%
+\special{pa 193 -337}\special{pa 177 -339}\special{pa 162 -342}\special{pa 146 -345}%
+\special{pa 130 -347}\special{pa 114 -349}\special{pa 98 -350}\special{pa 82 -352}%
+\special{pa 65 -353}\special{pa 49 -354}\special{pa 33 -354}\special{pa 16 -355}%
+\special{pa -0 -355}\special{pa -17 -355}\special{pa -33 -354}\special{pa -49 -354}%
+\special{pa -66 -353}\special{pa -82 -352}\special{pa -98 -350}\special{pa -114 -349}%
+\special{pa -130 -347}\special{pa -146 -344}\special{pa -162 -342}\special{pa -178 -339}%
+\special{pa -193 -336}\special{pa -208 -333}\special{pa -223 -330}\special{pa -238 -326}%
+\special{pa -252 -322}\special{pa -267 -318}\special{pa -281 -314}\special{pa -294 -310}%
+\special{pa -308 -305}\special{pa -321 -300}\special{pa -334 -295}\special{pa -346 -289}%
+\special{pa -359 -284}\special{pa -370 -278}\special{pa -382 -272}\special{pa -393 -266}%
+\special{pa -404 -260}\special{pa -414 -253}\special{pa -424 -247}\special{pa -433 -240}%
+\special{pa -442 -233}\special{pa -451 -226}\special{pa -459 -219}\special{pa -467 -212}%
+\special{pa -474 -204}\special{pa -481 -197}\special{pa -487 -189}\special{pa -493 -182}%
+\special{pa -498 -174}\special{pa -503 -166}\special{pa -507 -158}\special{pa -511 -150}%
+\special{pa -514 -142}\special{pa -517 -134}\special{pa -520 -126}\special{pa -521 -118}%
+\special{pa -523 -109}\special{pa -523 -101}\special{pa -524 -93}\special{pa -523 -85}%
+\special{pa -523 -77}\special{pa -521 -68}\special{pa -519 -60}\special{pa -517 -52}%
+\special{pa -514 -44}\special{pa -511 -36}\special{pa -507 -28}\special{pa -503 -20}%
+\special{pa -498 -12}\special{pa -493 -4}\special{pa -487 3}\special{pa -480 11}%
+\special{pa -474 18}\special{pa -466 26}\special{pa -459 33}\special{pa -451 40}%
+\special{pa -442 47}\special{pa -433 54}\special{pa -424 61}\special{pa -414 67}%
+\special{pa -403 74}\special{pa -393 80}\special{pa -382 86}\special{pa -370 92}%
+\special{pa -358 98}%
+\special{fp}%
+\special{pa -377 201}\special{pa -364 207}\special{pa -351 212}\special{pa -338 218}%
+\special{pa -324 223}\special{pa -310 228}\special{pa -295 233}\special{pa -280 237}%
+\special{pa -265 242}\special{pa -250 246}\special{pa -235 249}\special{pa -219 253}%
+\special{pa -203 256}\special{pa -187 259}\special{pa -170 262}\special{pa -154 265}%
+\special{pa -137 267}\special{pa -120 269}\special{pa -103 271}\special{pa -86 272}%
+\special{pa -69 273}\special{pa -52 274}\special{pa -34 275}\special{pa -17 275}%
+\special{pa 0 276}\special{pa 18 275}\special{pa 35 275}\special{pa 52 274}%
+\special{pa 69 273}\special{pa 86 272}\special{pa 103 271}\special{pa 120 269}%
+\special{pa 137 267}\special{pa 154 265}\special{pa 171 262}\special{pa 187 259}%
+\special{pa 203 256}\special{pa 219 253}\special{pa 235 249}\special{pa 250 246}%
+\special{pa 266 241}\special{pa 281 237}\special{pa 296 233}\special{pa 310 228}%
+\special{pa 324 223}\special{pa 338 218}\special{pa 351 212}\special{pa 365 207}%
+\special{pa 377 201}\special{pa 390 195}\special{pa 402 189}\special{pa 414 182}%
+\special{pa 425 176}\special{pa 436 169}\special{pa 446 162}\special{pa 456 155}%
+\special{pa 465 148}\special{pa 475 140}\special{pa 483 133}\special{pa 491 125}%
+\special{pa 499 117}\special{pa 506 109}\special{pa 513 101}\special{pa 519 93}%
+\special{pa 524 85}\special{pa 529 77}\special{pa 534 68}\special{pa 538 60}%
+\special{pa 541 52}\special{pa 544 43}\special{pa 547 34}\special{pa 549 26}%
+\special{pa 550 17}\special{pa 551 9}\special{pa 551 -0}\special{pa 551 -9}%
+\special{pa 550 -17}\special{pa 549 -26}\special{pa 547 -35}\special{pa 544 -43}%
+\special{pa 541 -52}\special{pa 538 -60}\special{pa 534 -69}\special{pa 529 -77}%
+\special{pa 524 -85}\special{pa 519 -93}\special{pa 512 -102}\special{pa 506 -110}%
+\special{pa 499 -117}\special{pa 491 -125}\special{pa 483 -133}\special{pa 474 -140}%
+\special{pa 465 -148}\special{pa 456 -155}\special{pa 446 -162}\special{pa 435 -169}%
+\special{pa 425 -176}\special{pa 413 -182}\special{pa 402 -189}\special{pa 390 -195}%
+\special{pa 377 -201}\special{pa 364 -207}\special{pa 351 -212}\special{pa 338 -218}%
+\special{pa 324 -223}\special{pa 310 -228}\special{pa 295 -233}\special{pa 280 -237}%
+\special{pa 265 -242}\special{pa 250 -246}\special{pa 235 -249}\special{pa 219 -253}%
+\special{pa 203 -256}\special{pa 187 -259}\special{pa 170 -262}\special{pa 154 -265}%
+\special{pa 137 -267}\special{pa 120 -269}\special{pa 103 -271}\special{pa 86 -272}%
+\special{pa 69 -273}\special{pa 52 -274}\special{pa 34 -275}\special{pa 17 -275}%
+\special{pa -0 -276}\special{pa -18 -275}\special{pa -35 -275}\special{pa -52 -274}%
+\special{pa -69 -273}\special{pa -86 -272}\special{pa -103 -271}\special{pa -120 -269}%
+\special{pa -137 -267}\special{pa -154 -265}\special{pa -171 -262}\special{pa -187 -259}%
+\special{pa -203 -256}\special{pa -219 -253}\special{pa -235 -249}\special{pa -250 -246}%
+\special{pa -266 -241}\special{pa -281 -237}\special{pa -296 -233}\special{pa -310 -228}%
+\special{pa -324 -223}\special{pa -338 -218}\special{pa -351 -212}\special{pa -365 -207}%
+\special{pa -377 -201}\special{pa -390 -195}\special{pa -402 -189}\special{pa -414 -182}%
+\special{pa -425 -176}\special{pa -436 -169}\special{pa -446 -162}\special{pa -456 -155}%
+\special{pa -465 -148}\special{pa -475 -140}\special{pa -483 -133}\special{pa -491 -125}%
+\special{pa -499 -117}\special{pa -506 -109}\special{pa -513 -101}\special{pa -519 -93}%
+\special{pa -524 -85}\special{pa -529 -77}\special{pa -534 -68}\special{pa -538 -60}%
+\special{pa -541 -52}\special{pa -544 -43}\special{pa -547 -34}\special{pa -549 -26}%
+\special{pa -550 -17}\special{pa -551 -9}\special{pa -551 0}\special{pa -551 9}%
+\special{pa -550 17}\special{pa -549 26}\special{pa -547 35}\special{pa -544 43}%
+\special{pa -541 52}\special{pa -538 60}\special{pa -534 69}\special{pa -529 77}%
+\special{pa -524 85}\special{pa -519 93}\special{pa -512 102}\special{pa -506 110}%
+\special{pa -499 117}\special{pa -491 125}\special{pa -483 133}\special{pa -474 140}%
+\special{pa -465 148}\special{pa -456 155}\special{pa -446 162}\special{pa -435 169}%
+\special{pa -425 176}\special{pa -413 182}\special{pa -402 189}\special{pa -390 195}%
+\special{pa -377 201}%
+\special{fp}%
+\settowidth{\Width}{Wireframe Model}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{Wireframe Model}\settodepth{\Depth}{Wireframe Model}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-2.4285714,-1.5000000){\hspace*{\Width}\raisebox{\Height}{Wireframe Model}}%
+%
+\settowidth{\Width}{Surface Model}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{Surface Model}\settodepth{\Depth}{Surface Model}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(3.5714286,-1.5000000){\hspace*{\Width}\raisebox{\Height}{Surface Model}}%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/tab2list00.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/tab2list00.pdf
new file mode 100644
index 0000000000..73161977ba
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/tab2list00.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/tab2list001.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/tab2list001.pdf
new file mode 100644
index 0000000000..cfed538785
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/tab2list001.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/tab2list001E.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/tab2list001E.pdf
new file mode 100644
index 0000000000..80e3910784
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/tab2list001E.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/tab2list01.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/tab2list01.pdf
new file mode 100644
index 0000000000..46bb4fae06
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/tab2list01.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/tab2list01E.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/tab2list01E.pdf
new file mode 100644
index 0000000000..abb7840889
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/tab2list01E.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/tab2list02.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/tab2list02.pdf
new file mode 100644
index 0000000000..7029b7130d
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/tab2list02.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/tab2list02E.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/tab2list02E.pdf
new file mode 100644
index 0000000000..a787a49133
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/tab2list02E.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/tab2list03.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/tab2list03.pdf
new file mode 100644
index 0000000000..e3ee1a48be
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/tab2list03.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/tab2list03E.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/tab2list03E.pdf
new file mode 100644
index 0000000000..005351cd6c
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/tab2list03E.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/tab2list04.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/tab2list04.pdf
new file mode 100644
index 0000000000..46ce56ea71
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/tab2list04.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/tab2list04E.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/tab2list04E.pdf
new file mode 100644
index 0000000000..71cb4736be
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/tab2list04E.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/table01.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/table01.pdf
new file mode 100644
index 0000000000..2d20816761
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/table01.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/table02.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/table02.tex
new file mode 100644
index 0000000000..e97074d8f2
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/table02.tex
@@ -0,0 +1,106 @@
+%%% test.tex 2014-11-24 21:36
+%%% test.sce 2014-11-24 21:36
+{\unitlength=6mm%
+\begin{picture}%
+( 8.00000, 5.00000)( 0.00000, 0.00000)%
+\special{pn 8}%
+%
+\special{pa 0 -1181}\special{pa 472 -1181}%
+\special{fp}%
+\special{pa 472 -1181}\special{pa 945 -1181}%
+\special{fp}%
+\special{pa 945 -1181}\special{pa 1417 -1181}%
+\special{fp}%
+\special{pa 1417 -1181}\special{pa 1890 -1181}%
+\special{fp}%
+\special{pa 0 -945}\special{pa 472 -945}%
+\special{fp}%
+\special{pa 472 -945}\special{pa 945 -945}%
+\special{fp}%
+\special{pa 945 -945}\special{pa 1417 -945}%
+\special{fp}%
+\special{pa 1417 -945}\special{pa 1890 -945}%
+\special{fp}%
+\special{pa 0 -709}\special{pa 472 -709}%
+\special{fp}%
+\special{pa 472 -709}\special{pa 945 -709}%
+\special{fp}%
+\special{pa 945 -709}\special{pa 1417 -709}%
+\special{fp}%
+\special{pa 1417 -709}\special{pa 1890 -709}%
+\special{fp}%
+\special{pa 0 -472}\special{pa 472 -472}%
+\special{fp}%
+\special{pa 472 -472}\special{pa 945 -472}%
+\special{fp}%
+\special{pa 945 -472}\special{pa 1417 -472}%
+\special{fp}%
+\special{pa 1417 -472}\special{pa 1890 -472}%
+\special{fp}%
+\special{pa 0 -236}\special{pa 472 -236}%
+\special{fp}%
+\special{pa 472 -236}\special{pa 945 -236}%
+\special{fp}%
+\special{pa 945 -236}\special{pa 1417 -236}%
+\special{fp}%
+\special{pa 1417 -236}\special{pa 1890 -236}%
+\special{fp}%
+\special{pa 0 0}\special{pa 472 0}%
+\special{fp}%
+\special{pa 472 0}\special{pa 945 0}%
+\special{fp}%
+\special{pa 945 0}\special{pa 1417 0}%
+\special{fp}%
+\special{pa 1417 0}\special{pa 1890 0}%
+\special{fp}%
+\special{pa 0 -1181}\special{pa 0 -945}%
+\special{fp}%
+\special{pa 0 -945}\special{pa 0 -709}%
+\special{fp}%
+\special{pa 0 -709}\special{pa 0 -472}%
+\special{fp}%
+\special{pa 0 -472}\special{pa 0 -236}%
+\special{fp}%
+\special{pa 0 -236}\special{pa 0 0}%
+\special{fp}%
+\special{pa 472 -1181}\special{pa 472 -945}%
+\special{fp}%
+\special{pa 472 -945}\special{pa 472 -709}%
+\special{fp}%
+\special{pa 472 -709}\special{pa 472 -472}%
+\special{fp}%
+\special{pa 472 -472}\special{pa 472 -236}%
+\special{fp}%
+\special{pa 472 -236}\special{pa 472 0}%
+\special{fp}%
+\special{pa 945 -1181}\special{pa 945 -945}%
+\special{fp}%
+\special{pa 945 -945}\special{pa 945 -709}%
+\special{fp}%
+\special{pa 945 -709}\special{pa 945 -472}%
+\special{fp}%
+\special{pa 945 -472}\special{pa 945 -236}%
+\special{fp}%
+\special{pa 945 -236}\special{pa 945 0}%
+\special{fp}%
+\special{pa 1417 -1181}\special{pa 1417 -945}%
+\special{fp}%
+\special{pa 1417 -945}\special{pa 1417 -709}%
+\special{fp}%
+\special{pa 1417 -709}\special{pa 1417 -472}%
+\special{fp}%
+\special{pa 1417 -472}\special{pa 1417 -236}%
+\special{fp}%
+\special{pa 1417 -236}\special{pa 1417 0}%
+\special{fp}%
+\special{pa 1890 -1181}\special{pa 1890 -945}%
+\special{fp}%
+\special{pa 1890 -945}\special{pa 1890 -709}%
+\special{fp}%
+\special{pa 1890 -709}\special{pa 1890 -472}%
+\special{fp}%
+\special{pa 1890 -472}\special{pa 1890 -236}%
+\special{fp}%
+\special{pa 1890 -236}\special{pa 1890 0}%
+\special{fp}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/table03.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/table03.pdf
new file mode 100644
index 0000000000..78ce25509e
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/table03.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/tablesample1.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/tablesample1.tex
new file mode 100644
index 0000000000..3771067862
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/tablesample1.tex
@@ -0,0 +1,172 @@
+%%% /Users/takatoosetsuo/Dropbox/kettoday/0511ReuleauxTriangle/fig/tablesample1.tex
+%%% Generator=tablesample1.cdy
+{\unitlength=1cm%
+\begin{picture}%
+(12,6)(0,0)%
+\special{pn 8}%
+%
+\special{pn 16}%
+\special{pa 0 -2362}\special{pa 0 -0}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 16}%
+\special{pa 1575 -2362}\special{pa 1575 -0}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 16}%
+\special{pa 3150 -2362}\special{pa 3150 -0}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 16}%
+\special{pa 4724 -2362}\special{pa 4724 -0}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 16}%
+\special{pa 0 -2362}\special{pa 4724 -2362}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 16}%
+\special{pa 0 -0}\special{pa 4724 -0}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 0 -1969}\special{pa 4724 -1969}%
+\special{fp}%
+\special{pa 0 -1969}\special{pa 4724 -1969}%
+\special{fp}%
+\special{pa 0 -1575}\special{pa 39 -1575}\special{fp}\special{pa 78 -1575}\special{pa 117 -1575}\special{fp}%
+\special{pa 156 -1575}\special{pa 195 -1575}\special{fp}\special{pa 234 -1575}\special{pa 273 -1575}\special{fp}%
+\special{pa 312 -1575}\special{pa 351 -1575}\special{fp}\special{pa 390 -1575}\special{pa 429 -1575}\special{fp}%
+\special{pa 469 -1575}\special{pa 508 -1575}\special{fp}\special{pa 547 -1575}\special{pa 586 -1575}\special{fp}%
+\special{pa 625 -1575}\special{pa 664 -1575}\special{fp}\special{pa 703 -1575}\special{pa 742 -1575}\special{fp}%
+\special{pa 781 -1575}\special{pa 820 -1575}\special{fp}\special{pa 859 -1575}\special{pa 898 -1575}\special{fp}%
+\special{pa 937 -1575}\special{pa 976 -1575}\special{fp}\special{pa 1015 -1575}\special{pa 1054 -1575}\special{fp}%
+\special{pa 1093 -1575}\special{pa 1132 -1575}\special{fp}\special{pa 1171 -1575}\special{pa 1210 -1575}\special{fp}%
+\special{pa 1249 -1575}\special{pa 1288 -1575}\special{fp}\special{pa 1328 -1575}\special{pa 1367 -1575}\special{fp}%
+\special{pa 1406 -1575}\special{pa 1445 -1575}\special{fp}\special{pa 1484 -1575}\special{pa 1523 -1575}\special{fp}%
+\special{pa 1562 -1575}\special{pa 1601 -1575}\special{fp}\special{pa 1640 -1575}\special{pa 1679 -1575}\special{fp}%
+\special{pa 1718 -1575}\special{pa 1757 -1575}\special{fp}\special{pa 1796 -1575}\special{pa 1835 -1575}\special{fp}%
+\special{pa 1874 -1575}\special{pa 1913 -1575}\special{fp}\special{pa 1952 -1575}\special{pa 1991 -1575}\special{fp}%
+\special{pa 2030 -1575}\special{pa 2069 -1575}\special{fp}\special{pa 2108 -1575}\special{pa 2147 -1575}\special{fp}%
+\special{pa 2187 -1575}\special{pa 2226 -1575}\special{fp}\special{pa 2265 -1575}\special{pa 2304 -1575}\special{fp}%
+\special{pa 2343 -1575}\special{pa 2382 -1575}\special{fp}\special{pa 2421 -1575}\special{pa 2460 -1575}\special{fp}%
+\special{pa 2499 -1575}\special{pa 2538 -1575}\special{fp}\special{pa 2577 -1575}\special{pa 2616 -1575}\special{fp}%
+\special{pa 2655 -1575}\special{pa 2694 -1575}\special{fp}\special{pa 2733 -1575}\special{pa 2772 -1575}\special{fp}%
+\special{pa 2811 -1575}\special{pa 2850 -1575}\special{fp}\special{pa 2889 -1575}\special{pa 2928 -1575}\special{fp}%
+\special{pa 2967 -1575}\special{pa 3006 -1575}\special{fp}\special{pa 3045 -1575}\special{pa 3085 -1575}\special{fp}%
+\special{pa 3124 -1575}\special{pa 3163 -1575}\special{fp}\special{pa 3202 -1575}\special{pa 3241 -1575}\special{fp}%
+\special{pa 3280 -1575}\special{pa 3319 -1575}\special{fp}\special{pa 3358 -1575}\special{pa 3397 -1575}\special{fp}%
+\special{pa 3436 -1575}\special{pa 3475 -1575}\special{fp}\special{pa 3514 -1575}\special{pa 3553 -1575}\special{fp}%
+\special{pa 3592 -1575}\special{pa 3631 -1575}\special{fp}\special{pa 3670 -1575}\special{pa 3709 -1575}\special{fp}%
+\special{pa 3748 -1575}\special{pa 3787 -1575}\special{fp}\special{pa 3826 -1575}\special{pa 3865 -1575}\special{fp}%
+\special{pa 3904 -1575}\special{pa 3944 -1575}\special{fp}\special{pa 3983 -1575}\special{pa 4022 -1575}\special{fp}%
+\special{pa 4061 -1575}\special{pa 4100 -1575}\special{fp}\special{pa 4139 -1575}\special{pa 4178 -1575}\special{fp}%
+\special{pa 4217 -1575}\special{pa 4256 -1575}\special{fp}\special{pa 4295 -1575}\special{pa 4334 -1575}\special{fp}%
+\special{pa 4373 -1575}\special{pa 4412 -1575}\special{fp}\special{pa 4451 -1575}\special{pa 4490 -1575}\special{fp}%
+\special{pa 4529 -1575}\special{pa 4568 -1575}\special{fp}\special{pa 4607 -1575}\special{pa 4646 -1575}\special{fp}%
+\special{pa 4685 -1575}\special{pa 4724 -1575}\special{fp}%
+%
+\special{pa 0 -1575}\special{pa 39 -1575}\special{fp}\special{pa 78 -1575}\special{pa 117 -1575}\special{fp}%
+\special{pa 156 -1575}\special{pa 195 -1575}\special{fp}\special{pa 234 -1575}\special{pa 273 -1575}\special{fp}%
+\special{pa 312 -1575}\special{pa 351 -1575}\special{fp}\special{pa 390 -1575}\special{pa 429 -1575}\special{fp}%
+\special{pa 469 -1575}\special{pa 508 -1575}\special{fp}\special{pa 547 -1575}\special{pa 586 -1575}\special{fp}%
+\special{pa 625 -1575}\special{pa 664 -1575}\special{fp}\special{pa 703 -1575}\special{pa 742 -1575}\special{fp}%
+\special{pa 781 -1575}\special{pa 820 -1575}\special{fp}\special{pa 859 -1575}\special{pa 898 -1575}\special{fp}%
+\special{pa 937 -1575}\special{pa 976 -1575}\special{fp}\special{pa 1015 -1575}\special{pa 1054 -1575}\special{fp}%
+\special{pa 1093 -1575}\special{pa 1132 -1575}\special{fp}\special{pa 1171 -1575}\special{pa 1210 -1575}\special{fp}%
+\special{pa 1249 -1575}\special{pa 1288 -1575}\special{fp}\special{pa 1328 -1575}\special{pa 1367 -1575}\special{fp}%
+\special{pa 1406 -1575}\special{pa 1445 -1575}\special{fp}\special{pa 1484 -1575}\special{pa 1523 -1575}\special{fp}%
+\special{pa 1562 -1575}\special{pa 1601 -1575}\special{fp}\special{pa 1640 -1575}\special{pa 1679 -1575}\special{fp}%
+\special{pa 1718 -1575}\special{pa 1757 -1575}\special{fp}\special{pa 1796 -1575}\special{pa 1835 -1575}\special{fp}%
+\special{pa 1874 -1575}\special{pa 1913 -1575}\special{fp}\special{pa 1952 -1575}\special{pa 1991 -1575}\special{fp}%
+\special{pa 2030 -1575}\special{pa 2069 -1575}\special{fp}\special{pa 2108 -1575}\special{pa 2147 -1575}\special{fp}%
+\special{pa 2187 -1575}\special{pa 2226 -1575}\special{fp}\special{pa 2265 -1575}\special{pa 2304 -1575}\special{fp}%
+\special{pa 2343 -1575}\special{pa 2382 -1575}\special{fp}\special{pa 2421 -1575}\special{pa 2460 -1575}\special{fp}%
+\special{pa 2499 -1575}\special{pa 2538 -1575}\special{fp}\special{pa 2577 -1575}\special{pa 2616 -1575}\special{fp}%
+\special{pa 2655 -1575}\special{pa 2694 -1575}\special{fp}\special{pa 2733 -1575}\special{pa 2772 -1575}\special{fp}%
+\special{pa 2811 -1575}\special{pa 2850 -1575}\special{fp}\special{pa 2889 -1575}\special{pa 2928 -1575}\special{fp}%
+\special{pa 2967 -1575}\special{pa 3006 -1575}\special{fp}\special{pa 3045 -1575}\special{pa 3085 -1575}\special{fp}%
+\special{pa 3124 -1575}\special{pa 3163 -1575}\special{fp}\special{pa 3202 -1575}\special{pa 3241 -1575}\special{fp}%
+\special{pa 3280 -1575}\special{pa 3319 -1575}\special{fp}\special{pa 3358 -1575}\special{pa 3397 -1575}\special{fp}%
+\special{pa 3436 -1575}\special{pa 3475 -1575}\special{fp}\special{pa 3514 -1575}\special{pa 3553 -1575}\special{fp}%
+\special{pa 3592 -1575}\special{pa 3631 -1575}\special{fp}\special{pa 3670 -1575}\special{pa 3709 -1575}\special{fp}%
+\special{pa 3748 -1575}\special{pa 3787 -1575}\special{fp}\special{pa 3826 -1575}\special{pa 3865 -1575}\special{fp}%
+\special{pa 3904 -1575}\special{pa 3944 -1575}\special{fp}\special{pa 3983 -1575}\special{pa 4022 -1575}\special{fp}%
+\special{pa 4061 -1575}\special{pa 4100 -1575}\special{fp}\special{pa 4139 -1575}\special{pa 4178 -1575}\special{fp}%
+\special{pa 4217 -1575}\special{pa 4256 -1575}\special{fp}\special{pa 4295 -1575}\special{pa 4334 -1575}\special{fp}%
+\special{pa 4373 -1575}\special{pa 4412 -1575}\special{fp}\special{pa 4451 -1575}\special{pa 4490 -1575}\special{fp}%
+\special{pa 4529 -1575}\special{pa 4568 -1575}\special{fp}\special{pa 4607 -1575}\special{pa 4646 -1575}\special{fp}%
+\special{pa 4685 -1575}\special{pa 4724 -1575}\special{fp}%
+%
+\special{pa 197 -1083}\special{pa 220 -1013}\special{pa 244 -947}\special{pa 268 -883}%
+\special{pa 291 -822}\special{pa 315 -764}\special{pa 339 -709}\special{pa 362 -656}%
+\special{pa 386 -606}\special{pa 409 -560}\special{pa 433 -516}\special{pa 457 -475}%
+\special{pa 480 -436}\special{pa 504 -401}\special{pa 528 -368}\special{pa 551 -339}%
+\special{pa 575 -312}\special{pa 598 -288}\special{pa 622 -266}\special{pa 646 -248}%
+\special{pa 669 -232}\special{pa 693 -220}\special{pa 717 -210}\special{pa 740 -203}%
+\special{pa 764 -198}\special{pa 787 -197}\special{pa 811 -198}\special{pa 835 -203}%
+\special{pa 858 -210}\special{pa 882 -220}\special{pa 906 -232}\special{pa 929 -248}%
+\special{pa 953 -266}\special{pa 976 -288}\special{pa 1000 -312}\special{pa 1024 -339}%
+\special{pa 1047 -368}\special{pa 1071 -401}\special{pa 1094 -436}\special{pa 1118 -475}%
+\special{pa 1142 -516}\special{pa 1165 -560}\special{pa 1189 -606}\special{pa 1213 -656}%
+\special{pa 1236 -709}\special{pa 1260 -764}\special{pa 1283 -822}\special{pa 1307 -883}%
+\special{pa 1331 -947}\special{pa 1354 -1013}\special{pa 1378 -1083}%
+\special{fp}%
+\special{pa 197 -394}\special{pa 1378 -394}%
+\special{fp}%
+\special{pa 1772 -1280}\special{pa 1795 -1210}\special{pa 1819 -1143}\special{pa 1843 -1080}%
+\special{pa 1866 -1019}\special{pa 1890 -961}\special{pa 1913 -905}\special{pa 1937 -853}%
+\special{pa 1961 -803}\special{pa 1984 -757}\special{pa 2008 -713}\special{pa 2031 -671}%
+\special{pa 2055 -633}\special{pa 2079 -598}\special{pa 2102 -565}\special{pa 2126 -535}%
+\special{pa 2150 -509}\special{pa 2173 -484}\special{pa 2197 -463}\special{pa 2220 -445}%
+\special{pa 2244 -429}\special{pa 2268 -416}\special{pa 2291 -406}\special{pa 2315 -399}%
+\special{pa 2339 -395}\special{pa 2362 -394}\special{pa 2386 -395}\special{pa 2409 -399}%
+\special{pa 2433 -406}\special{pa 2457 -416}\special{pa 2480 -429}\special{pa 2504 -445}%
+\special{pa 2528 -463}\special{pa 2551 -484}\special{pa 2575 -509}\special{pa 2598 -535}%
+\special{pa 2622 -565}\special{pa 2646 -598}\special{pa 2669 -633}\special{pa 2693 -671}%
+\special{pa 2717 -713}\special{pa 2740 -757}\special{pa 2764 -803}\special{pa 2787 -853}%
+\special{pa 2811 -905}\special{pa 2835 -961}\special{pa 2858 -1019}\special{pa 2882 -1080}%
+\special{pa 2906 -1143}\special{pa 2929 -1210}\special{pa 2953 -1280}%
+\special{fp}%
+\special{pa 1772 -394}\special{pa 2953 -394}%
+\special{fp}%
+\special{pa 3346 -1476}\special{pa 3370 -1407}\special{pa 3394 -1340}\special{pa 3417 -1277}%
+\special{pa 3441 -1216}\special{pa 3465 -1157}\special{pa 3488 -1102}\special{pa 3512 -1050}%
+\special{pa 3535 -1000}\special{pa 3559 -953}\special{pa 3583 -909}\special{pa 3606 -868}%
+\special{pa 3630 -830}\special{pa 3654 -795}\special{pa 3677 -762}\special{pa 3701 -732}%
+\special{pa 3724 -705}\special{pa 3748 -681}\special{pa 3772 -660}\special{pa 3795 -642}%
+\special{pa 3819 -626}\special{pa 3843 -613}\special{pa 3866 -603}\special{pa 3890 -596}%
+\special{pa 3913 -592}\special{pa 3937 -591}\special{pa 3961 -592}\special{pa 3984 -596}%
+\special{pa 4008 -603}\special{pa 4031 -613}\special{pa 4055 -626}\special{pa 4079 -642}%
+\special{pa 4102 -660}\special{pa 4126 -681}\special{pa 4150 -705}\special{pa 4173 -732}%
+\special{pa 4197 -762}\special{pa 4220 -795}\special{pa 4244 -830}\special{pa 4268 -868}%
+\special{pa 4291 -909}\special{pa 4315 -953}\special{pa 4339 -1000}\special{pa 4362 -1050}%
+\special{pa 4386 -1102}\special{pa 4409 -1157}\special{pa 4433 -1216}\special{pa 4457 -1277}%
+\special{pa 4480 -1340}\special{pa 4504 -1407}\special{pa 4528 -1476}%
+\special{fp}%
+\special{pa 3346 -394}\special{pa 4528 -394}%
+\special{fp}%
+\settowidth{\Width}{$D>0$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$D>0$}\settodepth{\Depth}{$D>0$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.0000000,5.5000000){\hspace*{\Width}\raisebox{\Height}{$D>0$}}%
+%
+\settowidth{\Width}{$D=0$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$D=0$}\settodepth{\Depth}{$D=0$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(6.0000000,5.5000000){\hspace*{\Width}\raisebox{\Height}{$D=0$}}%
+%
+\settowidth{\Width}{$D<0$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$D<0$}\settodepth{\Depth}{$D<0$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(10.0000000,5.5000000){\hspace*{\Width}\raisebox{\Height}{$D<0$}}%
+%
+\settowidth{\Width}{2点で交わる}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{2点で交わる}\settodepth{\Depth}{2点で交わる}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.0000000,4.5000000){\hspace*{\Width}\raisebox{\Height}{2点で交わる}}%
+%
+\settowidth{\Width}{接する}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{接する}\settodepth{\Depth}{接する}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(6.0000000,4.5000000){\hspace*{\Width}\raisebox{\Height}{接する}}%
+%
+\settowidth{\Width}{共有点なし}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{共有点なし}\settodepth{\Depth}{共有点なし}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(10.0000000,4.5000000){\hspace*{\Width}\raisebox{\Height}{共有点なし}}%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/tablesample1E.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/tablesample1E.tex
new file mode 100644
index 0000000000..0a78dad4db
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/tablesample1E.tex
@@ -0,0 +1,184 @@
+%%% fig.tex 2014-12-18 15:16
+%%% fig.sce 2014-12-18 15:16
+{\unitlength=5mm%
+\begin{picture}%
+( 12.00000, 9.00000)( -0.00000, -0.00000)%
+\special{pn 8}%
+%
+\special{pn 16}%
+\special{pa 0 -1772}\special{pa 787 -1772}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 16}%
+\special{pa 787 -1772}\special{pa 1575 -1772}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 16}%
+\special{pa 1575 -1772}\special{pa 2362 -1772}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 16}%
+\special{pa 0 0}\special{pa 787 0}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 16}%
+\special{pa 787 0}\special{pa 1575 0}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 16}%
+\special{pa 1575 0}\special{pa 2362 0}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 16}%
+\special{pa 0 -1772}\special{pa 0 -1378}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 16}%
+\special{pa 0 -1378}\special{pa 0 -1102}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 16}%
+\special{pa 0 -1102}\special{pa 0 0}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 16}%
+\special{pa 787 -1772}\special{pa 787 -1378}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 16}%
+\special{pa 787 -1378}\special{pa 787 -1102}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 16}%
+\special{pa 787 -1102}\special{pa 787 0}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 16}%
+\special{pa 1575 -1772}\special{pa 1575 -1378}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 16}%
+\special{pa 1575 -1378}\special{pa 1575 -1102}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 16}%
+\special{pa 1575 -1102}\special{pa 1575 0}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 16}%
+\special{pa 2362 -1772}\special{pa 2362 -1378}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 16}%
+\special{pa 2362 -1378}\special{pa 2362 -1102}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 16}%
+\special{pa 2362 -1102}\special{pa 2362 0}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 0 -1378}\special{pa 2362 -1378}%
+\special{fp}%
+\special{pa 0 -1102}\special{pa 39 -1102}\special{fp}\special{pa 77 -1102}\special{pa 116 -1102}\special{fp}%
+\special{pa 155 -1102}\special{pa 194 -1102}\special{fp}\special{pa 232 -1102}\special{pa 271 -1102}\special{fp}%
+\special{pa 310 -1102}\special{pa 349 -1102}\special{fp}\special{pa 387 -1102}\special{pa 426 -1102}\special{fp}%
+\special{pa 465 -1102}\special{pa 503 -1102}\special{fp}\special{pa 542 -1102}\special{pa 581 -1102}\special{fp}%
+\special{pa 620 -1102}\special{pa 658 -1102}\special{fp}\special{pa 697 -1102}\special{pa 736 -1102}\special{fp}%
+\special{pa 774 -1102}\special{pa 813 -1102}\special{fp}\special{pa 852 -1102}\special{pa 891 -1102}\special{fp}%
+\special{pa 929 -1102}\special{pa 968 -1102}\special{fp}\special{pa 1007 -1102}\special{pa 1046 -1102}\special{fp}%
+\special{pa 1084 -1102}\special{pa 1123 -1102}\special{fp}\special{pa 1162 -1102}\special{pa 1200 -1102}\special{fp}%
+\special{pa 1239 -1102}\special{pa 1278 -1102}\special{fp}\special{pa 1317 -1102}\special{pa 1355 -1102}\special{fp}%
+\special{pa 1394 -1102}\special{pa 1433 -1102}\special{fp}\special{pa 1472 -1102}\special{pa 1510 -1102}\special{fp}%
+\special{pa 1549 -1102}\special{pa 1588 -1102}\special{fp}\special{pa 1626 -1102}\special{pa 1665 -1102}\special{fp}%
+\special{pa 1704 -1102}\special{pa 1743 -1102}\special{fp}\special{pa 1781 -1102}\special{pa 1820 -1102}\special{fp}%
+\special{pa 1859 -1102}\special{pa 1898 -1102}\special{fp}\special{pa 1936 -1102}\special{pa 1975 -1102}\special{fp}%
+\special{pa 2014 -1102}\special{pa 2052 -1102}\special{fp}\special{pa 2091 -1102}\special{pa 2130 -1102}\special{fp}%
+\special{pa 2169 -1102}\special{pa 2207 -1102}\special{fp}\special{pa 2246 -1102}\special{pa 2285 -1102}\special{fp}%
+\special{pa 2323 -1102}\special{pa 2362 -1102}\special{fp}%
+%
+\settowidth{\Width}{$D>0$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$D>0$}\settodepth{\Depth}{$D>0$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.0000,8.0000){\hspace*{\Width}\raisebox{\Height}{$D>0$}}%
+%
+%
+\settowidth{\Width}{$D=0$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$D=0$}\settodepth{\Depth}{$D=0$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(6.0000,8.0000){\hspace*{\Width}\raisebox{\Height}{$D=0$}}%
+%
+%
+\settowidth{\Width}{$D<0$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$D<0$}\settodepth{\Depth}{$D<0$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(10.0000,8.0000){\hspace*{\Width}\raisebox{\Height}{$D<0$}}%
+%
+%
+\settowidth{\Width}{2}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{2}\settodepth{\Depth}{2}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.0000,6.3000){\hspace*{\Width}\raisebox{\Height}{2}}%
+%
+%
+\settowidth{\Width}{1}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{1}\settodepth{\Depth}{1}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(6.0000,6.3000){\hspace*{\Width}\raisebox{\Height}{1}}%
+%
+%
+\settowidth{\Width}{0}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{0}\settodepth{\Depth}{The discriminant and the number of intersections}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(10.0000,6.3000){\hspace*{\Width}\raisebox{\Height}{0}}%
+
+%
+%
+\settowidth{\Width}{The discriminant and the number of intersections}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{The discriminant and the number of intersections}\settodepth{\Depth}{The discriminant and the number of intersections}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+%\put(4.0000,10.0000){\hspace*{\Width}\raisebox{\Height}{The discriminant and the number of intersections}}%
+\put(6.0000,10.0000){\hspace*{\Width}\raisebox{\Height}{The discriminant and the number of intersections}}%
+%
+%
+\special{pa 98 -738}\special{pa 110 -703}\special{pa 123 -669}\special{pa 135 -636}%
+\special{pa 147 -605}\special{pa 159 -576}\special{pa 171 -548}\special{pa 183 -521}%
+\special{pa 195 -496}\special{pa 207 -473}\special{pa 219 -450}\special{pa 231 -430}%
+\special{pa 243 -411}\special{pa 255 -393}\special{pa 267 -377}\special{pa 279 -362}%
+\special{pa 291 -349}\special{pa 303 -337}\special{pa 315 -326}\special{pa 327 -318}%
+\special{pa 339 -310}\special{pa 352 -304}\special{pa 364 -300}\special{pa 376 -297}%
+\special{pa 388 -295}\special{pa 400 -295}\special{pa 412 -297}\special{pa 424 -300}%
+\special{pa 436 -304}\special{pa 448 -310}\special{pa 460 -318}\special{pa 472 -326}%
+\special{pa 484 -337}\special{pa 496 -349}\special{pa 508 -362}\special{pa 520 -377}%
+\special{pa 532 -393}\special{pa 544 -411}\special{pa 556 -430}\special{pa 568 -450}%
+\special{pa 581 -473}\special{pa 593 -496}\special{pa 605 -521}\special{pa 617 -548}%
+\special{pa 629 -576}\special{pa 641 -605}\special{pa 653 -636}\special{pa 665 -669}%
+\special{pa 677 -703}\special{pa 689 -738}%
+\special{fp}%
+\special{pa 886 -837}\special{pa 898 -801}\special{pa 910 -767}\special{pa 922 -735}%
+\special{pa 934 -704}\special{pa 946 -674}\special{pa 958 -646}\special{pa 970 -620}%
+\special{pa 982 -595}\special{pa 994 -571}\special{pa 1006 -549}\special{pa 1018 -528}%
+\special{pa 1030 -509}\special{pa 1043 -491}\special{pa 1055 -475}\special{pa 1067 -460}%
+\special{pa 1079 -447}\special{pa 1091 -435}\special{pa 1103 -425}\special{pa 1115 -416}%
+\special{pa 1127 -409}\special{pa 1139 -403}\special{pa 1151 -398}\special{pa 1163 -395}%
+\special{pa 1175 -394}\special{pa 1187 -394}\special{pa 1199 -395}\special{pa 1211 -398}%
+\special{pa 1223 -403}\special{pa 1235 -409}\special{pa 1247 -416}\special{pa 1259 -425}%
+\special{pa 1271 -435}\special{pa 1284 -447}\special{pa 1296 -460}\special{pa 1308 -475}%
+\special{pa 1320 -491}\special{pa 1332 -509}\special{pa 1344 -528}\special{pa 1356 -549}%
+\special{pa 1368 -571}\special{pa 1380 -595}\special{pa 1392 -620}\special{pa 1404 -646}%
+\special{pa 1416 -674}\special{pa 1428 -704}\special{pa 1440 -735}\special{pa 1452 -767}%
+\special{pa 1464 -801}\special{pa 1476 -837}%
+\special{fp}%
+\special{pa 1673 -935}\special{pa 1685 -900}\special{pa 1697 -866}\special{pa 1709 -833}%
+\special{pa 1721 -802}\special{pa 1733 -773}\special{pa 1746 -745}\special{pa 1758 -718}%
+\special{pa 1770 -693}\special{pa 1782 -669}\special{pa 1794 -647}\special{pa 1806 -627}%
+\special{pa 1818 -607}\special{pa 1830 -590}\special{pa 1842 -573}\special{pa 1854 -559}%
+\special{pa 1866 -545}\special{pa 1878 -534}\special{pa 1890 -523}\special{pa 1902 -514}%
+\special{pa 1914 -507}\special{pa 1926 -501}\special{pa 1938 -497}\special{pa 1950 -494}%
+\special{pa 1962 -492}\special{pa 1975 -492}\special{pa 1987 -494}\special{pa 1999 -497}%
+\special{pa 2011 -501}\special{pa 2023 -507}\special{pa 2035 -514}\special{pa 2047 -523}%
+\special{pa 2059 -534}\special{pa 2071 -545}\special{pa 2083 -559}\special{pa 2095 -573}%
+\special{pa 2107 -590}\special{pa 2119 -607}\special{pa 2131 -627}\special{pa 2143 -647}%
+\special{pa 2155 -669}\special{pa 2167 -693}\special{pa 2179 -718}\special{pa 2191 -745}%
+\special{pa 2204 -773}\special{pa 2216 -802}\special{pa 2228 -833}\special{pa 2240 -866}%
+\special{pa 2252 -900}\special{pa 2264 -935}%
+\special{fp}%
+\special{pa 197 -394}\special{pa 591 -394}%
+\special{fp}%
+\special{pa 984 -394}\special{pa 1378 -394}%
+\special{fp}%
+\special{pa 1772 -394}\special{pa 2165 -394}%
+\special{fp}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/tablesample2.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/tablesample2.tex
new file mode 100644
index 0000000000..9dc9f62349
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/tablesample2.tex
@@ -0,0 +1,258 @@
+%%% test.tex 2014-11-26 12:54
+%%% test.sce 2014-11-26 12:54
+{\unitlength=1cm%
+\begin{picture}%
+( 8.50000, 5.00000)( 0.00000, 0.00000)%
+\special{pn 8}%
+%
+\special{pa 0 -1969}\special{pa 236 -1969}%
+\special{fp}%
+\special{pa 236 -1969}\special{pa 472 -1969}%
+\special{fp}%
+\special{pa 472 -1969}\special{pa 866 -1969}%
+\special{fp}%
+\special{pa 866 -1969}\special{pa 1102 -1969}%
+\special{fp}%
+\special{pa 1102 -1969}\special{pa 1496 -1969}%
+\special{fp}%
+\special{pa 1496 -1969}\special{pa 1732 -1969}%
+\special{fp}%
+\special{pa 1732 -1969}\special{pa 3346 -1969}%
+\special{fp}%
+\special{pa 0 -709}\special{pa 236 -709}%
+\special{fp}%
+\special{pa 236 -709}\special{pa 472 -709}%
+\special{fp}%
+\special{pa 472 -709}\special{pa 866 -709}%
+\special{fp}%
+\special{pa 866 -709}\special{pa 1102 -709}%
+\special{fp}%
+\special{pa 1102 -709}\special{pa 1496 -709}%
+\special{fp}%
+\special{pa 1496 -709}\special{pa 1732 -709}%
+\special{fp}%
+\special{pa 0 -472}\special{pa 236 -472}%
+\special{fp}%
+\special{pa 236 -472}\special{pa 472 -472}%
+\special{fp}%
+\special{pa 472 -472}\special{pa 866 -472}%
+\special{fp}%
+\special{pa 866 -472}\special{pa 1102 -472}%
+\special{fp}%
+\special{pa 1102 -472}\special{pa 1496 -472}%
+\special{fp}%
+\special{pa 1496 -472}\special{pa 1732 -472}%
+\special{fp}%
+\special{pa 0 -236}\special{pa 236 -236}%
+\special{fp}%
+\special{pa 236 -236}\special{pa 472 -236}%
+\special{fp}%
+\special{pa 472 -236}\special{pa 866 -236}%
+\special{fp}%
+\special{pa 866 -236}\special{pa 1102 -236}%
+\special{fp}%
+\special{pa 1102 -236}\special{pa 1496 -236}%
+\special{fp}%
+\special{pa 1496 -236}\special{pa 1732 -236}%
+\special{fp}%
+\special{pa 0 0}\special{pa 236 0}%
+\special{fp}%
+\special{pa 236 0}\special{pa 472 0}%
+\special{fp}%
+\special{pa 472 0}\special{pa 866 0}%
+\special{fp}%
+\special{pa 866 0}\special{pa 1102 0}%
+\special{fp}%
+\special{pa 1102 0}\special{pa 1496 0}%
+\special{fp}%
+\special{pa 1496 0}\special{pa 1732 0}%
+\special{fp}%
+\special{pa 1732 0}\special{pa 3346 0}%
+\special{fp}%
+\special{pa 0 -1969}\special{pa 0 -709}%
+\special{fp}%
+\special{pa 0 -709}\special{pa 0 -472}%
+\special{fp}%
+\special{pa 0 -472}\special{pa 0 -236}%
+\special{fp}%
+\special{pa 0 -236}\special{pa 0 0}%
+\special{fp}%
+\special{pa 236 -709}\special{pa 236 -472}%
+\special{fp}%
+\special{pa 236 -472}\special{pa 236 -236}%
+\special{fp}%
+\special{pa 236 -236}\special{pa 236 0}%
+\special{fp}%
+\special{pa 472 -709}\special{pa 472 -472}%
+\special{fp}%
+\special{pa 472 -472}\special{pa 472 -236}%
+\special{fp}%
+\special{pa 472 -236}\special{pa 472 0}%
+\special{fp}%
+\special{pa 866 -709}\special{pa 866 -472}%
+\special{fp}%
+\special{pa 866 -472}\special{pa 866 -236}%
+\special{fp}%
+\special{pa 866 -236}\special{pa 866 0}%
+\special{fp}%
+\special{pa 1102 -709}\special{pa 1102 -472}%
+\special{fp}%
+\special{pa 1102 -472}\special{pa 1102 -236}%
+\special{fp}%
+\special{pa 1102 -236}\special{pa 1102 0}%
+\special{fp}%
+\special{pa 1496 -709}\special{pa 1496 -472}%
+\special{fp}%
+\special{pa 1496 -472}\special{pa 1496 -236}%
+\special{fp}%
+\special{pa 1496 -236}\special{pa 1496 0}%
+\special{fp}%
+\special{pa 1732 -1969}\special{pa 1732 -709}%
+\special{fp}%
+\special{pa 1732 -709}\special{pa 1732 -472}%
+\special{fp}%
+\special{pa 1732 -472}\special{pa 1732 -236}%
+\special{fp}%
+\special{pa 1732 -236}\special{pa 1732 0}%
+\special{fp}%
+\special{pa 3346 -1969}\special{pa 3346 -709}%
+\special{fp}%
+\special{pa 3346 -709}\special{pa 3346 -472}%
+\special{fp}%
+\special{pa 3346 -472}\special{pa 3346 -236}%
+\special{fp}%
+\special{pa 3346 -236}\special{pa 3346 0}%
+\special{fp}%
+\settowidth{\Width}{$x$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(0.3000,1.5000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+%
+\settowidth{\Width}{$0$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$0$}\settodepth{\Depth}{$0$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(0.9000,1.5000){\hspace*{\Width}\raisebox{\Height}{$0$}}%
+%
+%
+\settowidth{\Width}{$\cdots$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\cdots$}\settodepth{\Depth}{$\cdots$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(1.7000,1.5000){\hspace*{\Width}\raisebox{\Height}{$\cdots$}}%
+%
+%
+\settowidth{\Width}{$\tfrac{1}{4}$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\tfrac{1}{4}$}\settodepth{\Depth}{$\tfrac{1}{4}$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.5000,1.5000){\hspace*{\Width}\raisebox{\Height}{$\tfrac{1}{4}$}}%
+%
+%
+\settowidth{\Width}{$\cdots$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\cdots$}\settodepth{\Depth}{$\cdots$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(3.3000,1.5000){\hspace*{\Width}\raisebox{\Height}{$\cdots$}}%
+%
+%
+\settowidth{\Width}{$4$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$4$}\settodepth{\Depth}{$4$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.1000,1.5000){\hspace*{\Width}\raisebox{\Height}{$4$}}%
+%
+%
+\settowidth{\Width}{$y'$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y'$}\settodepth{\Depth}{$y'$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(0.3000,0.9000){\hspace*{\Width}\raisebox{\Height}{$y'$}}%
+%
+%
+\settowidth{\Width}{$$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$$}\settodepth{\Depth}{$$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(0.9000,0.9000){\hspace*{\Width}\raisebox{\Height}{$$}}%
+%
+%
+\settowidth{\Width}{$-$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$-$}\settodepth{\Depth}{$-$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(1.7000,0.9000){\hspace*{\Width}\raisebox{\Height}{$-$}}%
+%
+%
+\settowidth{\Width}{$0$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$0$}\settodepth{\Depth}{$0$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.5000,0.9000){\hspace*{\Width}\raisebox{\Height}{$0$}}%
+%
+%
+\settowidth{\Width}{$+$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$+$}\settodepth{\Depth}{$+$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(3.3000,0.9000){\hspace*{\Width}\raisebox{\Height}{$+$}}%
+%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(0.3000,0.3000){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+%
+\settowidth{\Width}{$0$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$0$}\settodepth{\Depth}{$0$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(0.9000,0.3000){\hspace*{\Width}\raisebox{\Height}{$0$}}%
+%
+%
+\settowidth{\Width}{$\searrow$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\searrow$}\settodepth{\Depth}{$\searrow$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(1.7000,0.3000){\hspace*{\Width}\raisebox{\Height}{$\searrow$}}%
+%
+%
+\settowidth{\Width}{$-\tfrac{1}{4}$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$-\tfrac{1}{4}$}\settodepth{\Depth}{$-\tfrac{1}{4}$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.5000,0.3000){\hspace*{\Width}\raisebox{\Height}{$-\tfrac{1}{4}$}}%
+%
+%
+\settowidth{\Width}{$\nearrow$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\nearrow$}\settodepth{\Depth}{$\nearrow$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(3.3000,0.3000){\hspace*{\Width}\raisebox{\Height}{$\nearrow$}}%
+%
+%
+\settowidth{\Width}{$2$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$2$}\settodepth{\Depth}{$2$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.1000,0.3000){\hspace*{\Width}\raisebox{\Height}{$2$}}%
+%
+%
+\settowidth{\Width}{{\small\begin{minipage}{44mm}$y=x-\sqrt{x}$\\$y'=\dfrac{2\sqrt{x}-1}{2\sqrt{x}}=0$より\vspace{1mm}\\\hspace*{2zw}$x=\dfrac{1}{4}$\vspace{1mm}\\増減表は次のようになる.\end{minipage}} }\setlength{\Width}{0\Width}%
+\settoheight{\Height}{{\small\begin{minipage}{44mm}$y=x-\sqrt{x}$\\$y'=\dfrac{2\sqrt{x}-1}{2\sqrt{x}}=0$より\vspace{1mm}\\\hspace*{2zw}$x=\dfrac{1}{4}$\vspace{1mm}\\増減表は次のようになる.\end{minipage}} }\settodepth{\Depth}{{\small\begin{minipage}{44mm}$y=x-\sqrt{x}$\\$y'=\dfrac{2\sqrt{x}-1}{2\sqrt{x}}=0$より\vspace{1mm}\\\hspace*{2zw}$x=\dfrac{1}{4}$\vspace{1mm}\\増減表は次のようになる.\end{minipage}} }\setlength{\Height}{-\Height}%
+\put(0.1500,4.8500){\hspace*{\Width}\raisebox{\Height}{{\small\begin{minipage}{44mm}$y=x-\sqrt{x}$\\$y'=\dfrac{2\sqrt{x}-1}{2\sqrt{x}}=0$より\vspace{1mm}\\\hspace*{2zw}$x=\dfrac{1}{4}$\vspace{1mm}\\増減表は次のようになる.\end{minipage}} }}%
+%
+%
+\special{pa 1929 -394}\special{pa 1953 -320}\special{pa 1977 -304}\special{pa 2001 -297}%
+\special{pa 2026 -295}\special{pa 2050 -296}\special{pa 2074 -300}\special{pa 2098 -305}%
+\special{pa 2122 -311}\special{pa 2146 -318}\special{pa 2170 -327}\special{pa 2194 -336}%
+\special{pa 2218 -345}\special{pa 2242 -356}\special{pa 2267 -367}\special{pa 2291 -378}%
+\special{pa 2315 -390}\special{pa 2339 -402}\special{pa 2363 -414}\special{pa 2387 -427}%
+\special{pa 2411 -440}\special{pa 2435 -453}\special{pa 2459 -467}\special{pa 2484 -481}%
+\special{pa 2508 -495}\special{pa 2532 -509}\special{pa 2556 -524}\special{pa 2580 -538}%
+\special{pa 2604 -553}\special{pa 2628 -568}\special{pa 2652 -583}\special{pa 2676 -599}%
+\special{pa 2700 -614}\special{pa 2725 -630}\special{pa 2749 -645}\special{pa 2773 -661}%
+\special{pa 2797 -677}\special{pa 2821 -693}\special{pa 2845 -709}\special{pa 2869 -725}%
+\special{pa 2893 -742}\special{pa 2917 -758}\special{pa 2942 -775}\special{pa 2966 -791}%
+\special{pa 2990 -808}\special{pa 3014 -825}\special{pa 3038 -842}\special{pa 3062 -859}%
+\special{pa 3086 -876}\special{pa 3110 -893}%
+\special{fp}%
+\special{pa 1929 -394}\special{pa 3110 -394}%
+\special{fp}%
+\special{pa 1929 -197}\special{pa 1929 -1575}%
+\special{fp}%
+\settowidth{\Width}{\small{$x$}}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{\small{$x$}}\settodepth{\Depth}{\small{$x$}}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(8.0000,1.0000){\hspace*{\Width}\raisebox{\Height}{\small{$x$}}}%
+%
+%
+\settowidth{\Width}{\small{$y$}}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{\small{$y$}}\settodepth{\Depth}{\small{$y$}}\setlength{\Height}{\Depth}%
+\put(4.9000,4.1000){\hspace*{\Width}\raisebox{\Height}{\small{$y$}}}%
+%
+%
+\settowidth{\Width}{\small O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{\small O}\settodepth{\Depth}{\small O}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.8000,1.0000){\hspace*{\Width}\raisebox{\Height}{\small O}}%
+%
+%
+\settowidth{\Width}{$y=x-\sqrt{x}$}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{$y=x-\sqrt{x}$}\settodepth{\Depth}{$y=x-\sqrt{x}$}\setlength{\Height}{\Depth}%
+\put(7.9500,2.3200){\hspace*{\Width}\raisebox{\Height}{$y=x-\sqrt{x}$}}%
+%
+%
+\special{pa 236 -472}\special{pa 472 -236}%
+\special{fp}%
+\special{pa 236 -236}\special{pa 472 -472}%
+\special{fp}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/tablesample2E.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/tablesample2E.tex
new file mode 100644
index 0000000000..a3a602c2c2
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/tablesample2E.tex
@@ -0,0 +1,258 @@
+%%% test.tex 2014-11-26 12:54
+%%% test.sce 2014-11-26 12:54
+{\unitlength=1cm%
+\begin{picture}%
+( 8.50000, 5.00000)( 0.00000, 0.00000)%
+\special{pn 8}%
+%
+\special{pa 0 -1969}\special{pa 236 -1969}%
+\special{fp}%
+\special{pa 236 -1969}\special{pa 472 -1969}%
+\special{fp}%
+\special{pa 472 -1969}\special{pa 866 -1969}%
+\special{fp}%
+\special{pa 866 -1969}\special{pa 1102 -1969}%
+\special{fp}%
+\special{pa 1102 -1969}\special{pa 1496 -1969}%
+\special{fp}%
+\special{pa 1496 -1969}\special{pa 1732 -1969}%
+\special{fp}%
+\special{pa 1732 -1969}\special{pa 3346 -1969}%
+\special{fp}%
+\special{pa 0 -709}\special{pa 236 -709}%
+\special{fp}%
+\special{pa 236 -709}\special{pa 472 -709}%
+\special{fp}%
+\special{pa 472 -709}\special{pa 866 -709}%
+\special{fp}%
+\special{pa 866 -709}\special{pa 1102 -709}%
+\special{fp}%
+\special{pa 1102 -709}\special{pa 1496 -709}%
+\special{fp}%
+\special{pa 1496 -709}\special{pa 1732 -709}%
+\special{fp}%
+\special{pa 0 -472}\special{pa 236 -472}%
+\special{fp}%
+\special{pa 236 -472}\special{pa 472 -472}%
+\special{fp}%
+\special{pa 472 -472}\special{pa 866 -472}%
+\special{fp}%
+\special{pa 866 -472}\special{pa 1102 -472}%
+\special{fp}%
+\special{pa 1102 -472}\special{pa 1496 -472}%
+\special{fp}%
+\special{pa 1496 -472}\special{pa 1732 -472}%
+\special{fp}%
+\special{pa 0 -236}\special{pa 236 -236}%
+\special{fp}%
+\special{pa 236 -236}\special{pa 472 -236}%
+\special{fp}%
+\special{pa 472 -236}\special{pa 866 -236}%
+\special{fp}%
+\special{pa 866 -236}\special{pa 1102 -236}%
+\special{fp}%
+\special{pa 1102 -236}\special{pa 1496 -236}%
+\special{fp}%
+\special{pa 1496 -236}\special{pa 1732 -236}%
+\special{fp}%
+\special{pa 0 0}\special{pa 236 0}%
+\special{fp}%
+\special{pa 236 0}\special{pa 472 0}%
+\special{fp}%
+\special{pa 472 0}\special{pa 866 0}%
+\special{fp}%
+\special{pa 866 0}\special{pa 1102 0}%
+\special{fp}%
+\special{pa 1102 0}\special{pa 1496 0}%
+\special{fp}%
+\special{pa 1496 0}\special{pa 1732 0}%
+\special{fp}%
+\special{pa 1732 0}\special{pa 3346 0}%
+\special{fp}%
+\special{pa 0 -1969}\special{pa 0 -709}%
+\special{fp}%
+\special{pa 0 -709}\special{pa 0 -472}%
+\special{fp}%
+\special{pa 0 -472}\special{pa 0 -236}%
+\special{fp}%
+\special{pa 0 -236}\special{pa 0 0}%
+\special{fp}%
+\special{pa 236 -709}\special{pa 236 -472}%
+\special{fp}%
+\special{pa 236 -472}\special{pa 236 -236}%
+\special{fp}%
+\special{pa 236 -236}\special{pa 236 0}%
+\special{fp}%
+\special{pa 472 -709}\special{pa 472 -472}%
+\special{fp}%
+\special{pa 472 -472}\special{pa 472 -236}%
+\special{fp}%
+\special{pa 472 -236}\special{pa 472 0}%
+\special{fp}%
+\special{pa 866 -709}\special{pa 866 -472}%
+\special{fp}%
+\special{pa 866 -472}\special{pa 866 -236}%
+\special{fp}%
+\special{pa 866 -236}\special{pa 866 0}%
+\special{fp}%
+\special{pa 1102 -709}\special{pa 1102 -472}%
+\special{fp}%
+\special{pa 1102 -472}\special{pa 1102 -236}%
+\special{fp}%
+\special{pa 1102 -236}\special{pa 1102 0}%
+\special{fp}%
+\special{pa 1496 -709}\special{pa 1496 -472}%
+\special{fp}%
+\special{pa 1496 -472}\special{pa 1496 -236}%
+\special{fp}%
+\special{pa 1496 -236}\special{pa 1496 0}%
+\special{fp}%
+\special{pa 1732 -1969}\special{pa 1732 -709}%
+\special{fp}%
+\special{pa 1732 -709}\special{pa 1732 -472}%
+\special{fp}%
+\special{pa 1732 -472}\special{pa 1732 -236}%
+\special{fp}%
+\special{pa 1732 -236}\special{pa 1732 0}%
+\special{fp}%
+\special{pa 3346 -1969}\special{pa 3346 -709}%
+\special{fp}%
+\special{pa 3346 -709}\special{pa 3346 -472}%
+\special{fp}%
+\special{pa 3346 -472}\special{pa 3346 -236}%
+\special{fp}%
+\special{pa 3346 -236}\special{pa 3346 0}%
+\special{fp}%
+\settowidth{\Width}{$x$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(0.3000,1.5000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+%
+\settowidth{\Width}{$0$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$0$}\settodepth{\Depth}{$0$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(0.9000,1.5000){\hspace*{\Width}\raisebox{\Height}{$0$}}%
+%
+%
+\settowidth{\Width}{$\cdots$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\cdots$}\settodepth{\Depth}{$\cdots$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(1.7000,1.5000){\hspace*{\Width}\raisebox{\Height}{$\cdots$}}%
+%
+%
+\settowidth{\Width}{$\tfrac{1}{4}$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\tfrac{1}{4}$}\settodepth{\Depth}{$\tfrac{1}{4}$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.5000,1.5000){\hspace*{\Width}\raisebox{\Height}{$\tfrac{1}{4}$}}%
+%
+%
+\settowidth{\Width}{$\cdots$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\cdots$}\settodepth{\Depth}{$\cdots$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(3.3000,1.5000){\hspace*{\Width}\raisebox{\Height}{$\cdots$}}%
+%
+%
+\settowidth{\Width}{$4$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$4$}\settodepth{\Depth}{$4$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.1000,1.5000){\hspace*{\Width}\raisebox{\Height}{$4$}}%
+%
+%
+\settowidth{\Width}{$y'$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y'$}\settodepth{\Depth}{$y'$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(0.3000,0.9000){\hspace*{\Width}\raisebox{\Height}{$y'$}}%
+%
+%
+\settowidth{\Width}{$$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$$}\settodepth{\Depth}{$$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(0.9000,0.9000){\hspace*{\Width}\raisebox{\Height}{$$}}%
+%
+%
+\settowidth{\Width}{$-$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$-$}\settodepth{\Depth}{$-$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(1.7000,0.9000){\hspace*{\Width}\raisebox{\Height}{$-$}}%
+%
+%
+\settowidth{\Width}{$0$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$0$}\settodepth{\Depth}{$0$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.5000,0.9000){\hspace*{\Width}\raisebox{\Height}{$0$}}%
+%
+%
+\settowidth{\Width}{$+$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$+$}\settodepth{\Depth}{$+$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(3.3000,0.9000){\hspace*{\Width}\raisebox{\Height}{$+$}}%
+%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(0.3000,0.3000){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+%
+\settowidth{\Width}{$0$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$0$}\settodepth{\Depth}{$0$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(0.9000,0.3000){\hspace*{\Width}\raisebox{\Height}{$0$}}%
+%
+%
+\settowidth{\Width}{$\searrow$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\searrow$}\settodepth{\Depth}{$\searrow$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(1.7000,0.3000){\hspace*{\Width}\raisebox{\Height}{$\searrow$}}%
+%
+%
+\settowidth{\Width}{$-\tfrac{1}{4}$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$-\tfrac{1}{4}$}\settodepth{\Depth}{$-\tfrac{1}{4}$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.5000,0.3000){\hspace*{\Width}\raisebox{\Height}{$-\tfrac{1}{4}$}}%
+%
+%
+\settowidth{\Width}{$\nearrow$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\nearrow$}\settodepth{\Depth}{$\nearrow$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(3.3000,0.3000){\hspace*{\Width}\raisebox{\Height}{$\nearrow$}}%
+%
+%
+\settowidth{\Width}{$2$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$2$}\settodepth{\Depth}{$2$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.1000,0.3000){\hspace*{\Width}\raisebox{\Height}{$2$}}%
+%
+%
+\settowidth{\Width}{{\small\begin{minipage}{44mm}$y=x-\sqrt{x}$\\$y'=\dfrac{2\sqrt{x}-1}{2\sqrt{x}}=0$\vspace{1mm}\\\hspace*{5mm}$x=\dfrac{1}{4}$\vspace{1mm}\\The table is as follows.\end{minipage}} }\setlength{\Width}{0\Width}%
+\settoheight{\Height}{{\small\begin{minipage}{44mm}$y=x-\sqrt{x}$\\$y'=\dfrac{2\sqrt{x}-1}{2\sqrt{x}}=0$\vspace{1mm}\\\hspace*{5mm}$x=\dfrac{1}{4}$\vspace{1mm}\\The table is as follows.\end{minipage}} }\settodepth{\Depth}{{\small\begin{minipage}{44mm}$y=x-\sqrt{x}$\\$y'=\dfrac{2\sqrt{x}-1}{2\sqrt{x}}=0$\vspace{1mm}\\\hspace*{5mm}$x=\dfrac{1}{4}$\vspace{1mm}\\The table is as follows.\end{minipage}} }\setlength{\Height}{-\Height}%
+\put(0.1500,4.8500){\hspace*{\Width}\raisebox{\Height}{{\small\begin{minipage}{44mm}$y=x-\sqrt{x}$\\$y'=\dfrac{2\sqrt{x}-1}{2\sqrt{x}}=0$\vspace{1mm}\\\hspace*{5mm}$x=\dfrac{1}{4}$\vspace{1mm}\\The table is as follows.\end{minipage}} }}%
+%
+%
+\special{pa 1929 -394}\special{pa 1953 -320}\special{pa 1977 -304}\special{pa 2001 -297}%
+\special{pa 2026 -295}\special{pa 2050 -296}\special{pa 2074 -300}\special{pa 2098 -305}%
+\special{pa 2122 -311}\special{pa 2146 -318}\special{pa 2170 -327}\special{pa 2194 -336}%
+\special{pa 2218 -345}\special{pa 2242 -356}\special{pa 2267 -367}\special{pa 2291 -378}%
+\special{pa 2315 -390}\special{pa 2339 -402}\special{pa 2363 -414}\special{pa 2387 -427}%
+\special{pa 2411 -440}\special{pa 2435 -453}\special{pa 2459 -467}\special{pa 2484 -481}%
+\special{pa 2508 -495}\special{pa 2532 -509}\special{pa 2556 -524}\special{pa 2580 -538}%
+\special{pa 2604 -553}\special{pa 2628 -568}\special{pa 2652 -583}\special{pa 2676 -599}%
+\special{pa 2700 -614}\special{pa 2725 -630}\special{pa 2749 -645}\special{pa 2773 -661}%
+\special{pa 2797 -677}\special{pa 2821 -693}\special{pa 2845 -709}\special{pa 2869 -725}%
+\special{pa 2893 -742}\special{pa 2917 -758}\special{pa 2942 -775}\special{pa 2966 -791}%
+\special{pa 2990 -808}\special{pa 3014 -825}\special{pa 3038 -842}\special{pa 3062 -859}%
+\special{pa 3086 -876}\special{pa 3110 -893}%
+\special{fp}%
+\special{pa 1929 -394}\special{pa 3110 -394}%
+\special{fp}%
+\special{pa 1929 -197}\special{pa 1929 -1575}%
+\special{fp}%
+\settowidth{\Width}{\small{$x$}}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{\small{$x$}}\settodepth{\Depth}{\small{$x$}}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(8.0000,1.0000){\hspace*{\Width}\raisebox{\Height}{\small{$x$}}}%
+%
+%
+\settowidth{\Width}{\small{$y$}}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{\small{$y$}}\settodepth{\Depth}{\small{$y$}}\setlength{\Height}{\Depth}%
+\put(4.9000,4.1000){\hspace*{\Width}\raisebox{\Height}{\small{$y$}}}%
+%
+%
+\settowidth{\Width}{\small O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{\small O}\settodepth{\Depth}{\small O}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.8000,1.0000){\hspace*{\Width}\raisebox{\Height}{\small O}}%
+%
+%
+\settowidth{\Width}{$y=x-\sqrt{x}$}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{$y=x-\sqrt{x}$}\settodepth{\Depth}{$y=x-\sqrt{x}$}\setlength{\Height}{\Depth}%
+\put(7.9500,2.3200){\hspace*{\Width}\raisebox{\Height}{$y=x-\sqrt{x}$}}%
+%
+%
+\special{pa 236 -472}\special{pa 472 -236}%
+\special{fp}%
+\special{pa 236 -236}\special{pa 472 -472}%
+\special{fp}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/tangent.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/tangent.tex
new file mode 100644
index 0000000000..4939de24eb
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/tangent.tex
@@ -0,0 +1,45 @@
+%%% /Users/takatoosetsuo/Dropbox/kettoday/0719deriv/fig/tangent.tex
+%%% Generator=tangent.cdy
+{\unitlength=1cm%
+\begin{picture}%
+(10,6)(-5,-1)%
+\special{pn 8}%
+%
+{%
+\color[rgb]{0,0,0}%
+}%
+\special{pa -880 -1969}\special{pa -866 -1906}\special{pa -787 -1575}\special{pa -709 -1276}%
+\special{pa -630 -1008}\special{pa -551 -772}\special{pa -472 -567}\special{pa -394 -394}%
+\special{pa -315 -252}\special{pa -236 -142}\special{pa -157 -63}\special{pa -79 -16}%
+\special{pa 0 -0}\special{pa 79 -16}\special{pa 157 -63}\special{pa 236 -142}%
+\special{pa 315 -252}\special{pa 394 -394}\special{pa 472 -567}\special{pa 551 -772}%
+\special{pa 630 -1008}\special{pa 709 -1276}\special{pa 787 -1575}\special{pa 866 -1906}%
+\special{pa 880 -1969}%
+\special{fp}%
+\special{pa 295 394}\special{pa 886 -1969}%
+\special{fp}%
+\color[rgb]{1,0,0}%
+\special{pa -1181 -1969}\special{pa -0 394}%
+\special{fp}%
+\color[rgb]{0,0,0}%
+\color[rgb]{0,0,1}%
+\special{pa -0 394}\special{pa 1181 -1969}%
+\special{fp}%
+\color[rgb]{0,0,0}%
+\special{pa -1969 -0}\special{pa 1969 -0}%
+\special{fp}%
+\special{pa 0 394}\special{pa 0 -1969}%
+\special{fp}%
+\settowidth{\Width}{$x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(5.0500000,0.0000000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{\Depth}%
+\put(0.0000000,5.0500000){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+\settowidth{\Width}{O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(-0.0500000,-0.0500000){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/taylor.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/taylor.tex
new file mode 100644
index 0000000000..637028dbd2
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/taylor.tex
@@ -0,0 +1,60 @@
+%%% taylor.tex 2016-4-29 16:11
+%%% taylor.sce 2016-4-29 16:5
+{\unitlength=6mm%
+\begin{picture}%
+( 10.00000, 6.00000)( -5.00000, -3.00000)%
+\special{pn 8}%
+%
+\special{pa -1181 -227}\special{pa -1143 -234}\special{fp}\special{pa -1104 -235}\special{pa -1087 -235}\special{pa -1066 -230}\special{fp}%
+\special{pa -1028 -220}\special{pa -992 -206}\special{pa -992 -206}\special{fp}\special{pa -958 -186}\special{pa -945 -179}\special{pa -926 -165}\special{fp}%
+\special{pa -894 -142}\special{pa -865 -117}\special{fp}\special{pa -836 -91}\special{pa -807 -64}\special{fp}%
+\special{pa -779 -37}\special{pa -756 -14}\special{pa -752 -9}\special{fp}\special{pa -724 18}\special{pa -709 33}\special{pa -696 45}\special{fp}%
+\special{pa -668 72}\special{pa -661 79}\special{pa -640 99}\special{fp}\special{pa -610 125}\special{pa -580 149}\special{fp}%
+\special{pa -549 172}\special{pa -520 191}\special{pa -516 193}\special{fp}\special{pa -481 210}\special{pa -472 215}\special{pa -445 224}\special{fp}%
+\special{pa -407 232}\special{pa -378 236}\special{pa -368 235}\special{fp}\special{pa -329 232}\special{pa -292 222}\special{fp}%
+\special{pa -256 208}\special{pa -236 199}\special{pa -221 189}\special{fp}\special{pa -188 169}\special{pa -157 145}\special{fp}%
+\special{pa -127 121}\special{pa -98 95}\special{fp}\special{pa -70 68}\special{pa -47 47}\special{pa -41 41}\special{fp}%
+\special{pa -14 14}\special{pa 0 0}\special{pa 14 -14}\special{fp}\special{pa 41 -41}\special{pa 47 -47}\special{pa 70 -68}\special{fp}%
+\special{pa 98 -95}\special{pa 127 -121}\special{fp}\special{pa 157 -145}\special{pa 188 -169}\special{fp}%
+\special{pa 221 -189}\special{pa 236 -199}\special{pa 256 -208}\special{fp}\special{pa 292 -222}\special{pa 329 -232}\special{fp}%
+\special{pa 368 -235}\special{pa 378 -236}\special{pa 407 -232}\special{fp}\special{pa 445 -224}\special{pa 472 -215}\special{pa 481 -210}\special{fp}%
+\special{pa 516 -193}\special{pa 520 -191}\special{pa 549 -172}\special{fp}\special{pa 580 -149}\special{pa 610 -125}\special{fp}%
+\special{pa 640 -99}\special{pa 661 -79}\special{pa 668 -72}\special{fp}\special{pa 696 -45}\special{pa 709 -33}\special{pa 724 -18}\special{fp}%
+\special{pa 752 9}\special{pa 756 14}\special{pa 779 37}\special{fp}\special{pa 807 64}\special{pa 836 91}\special{fp}%
+\special{pa 865 117}\special{pa 894 142}\special{fp}\special{pa 926 165}\special{pa 945 179}\special{pa 958 186}\special{fp}%
+\special{pa 992 206}\special{pa 992 206}\special{pa 1028 220}\special{fp}\special{pa 1066 230}\special{pa 1087 235}\special{pa 1104 235}\special{fp}%
+\special{pa 1143 234}\special{pa 1181 227}\special{fp}%
+%
+\special{pa -1080 -709}\special{pa -1039 -564}\special{pa -992 -433}\special{pa -945 -327}%
+\special{pa -898 -239}\special{pa -850 -163}\special{pa -803 -96}\special{pa -756 -35}%
+\special{pa -709 22}\special{pa -661 73}\special{pa -614 118}\special{pa -567 158}%
+\special{pa -520 190}\special{pa -472 214}\special{pa -425 230}\special{pa -378 236}%
+\special{pa -331 233}\special{pa -283 220}\special{pa -236 199}\special{pa -189 169}%
+\special{pa -142 133}\special{pa -94 92}\special{pa -47 47}\special{pa 0 0}\special{pa 47 -47}%
+\special{pa 94 -92}\special{pa 142 -133}\special{pa 189 -169}\special{pa 236 -199}%
+\special{pa 283 -220}\special{pa 331 -233}\special{pa 378 -236}\special{pa 425 -230}%
+\special{pa 472 -214}\special{pa 520 -190}\special{pa 567 -158}\special{pa 614 -118}%
+\special{pa 661 -73}\special{pa 709 -22}\special{pa 756 35}\special{pa 803 96}\special{pa 850 163}%
+\special{pa 898 239}\special{pa 945 327}\special{pa 992 433}\special{pa 1039 564}%
+\special{pa 1080 709}%
+\special{fp}%
+\special{pa -1181 0}\special{pa 1181 0}%
+\special{fp}%
+\special{pa 0 709}\special{pa 0 -709}%
+\special{fp}%
+\settowidth{\Width}{$x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(5.0500,0.0000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{\Depth}%
+\put(0.0000,3.0500){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+%
+\settowidth{\Width}{O}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(0.0500,-0.0500){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/tetrahedron.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/tetrahedron.tex
new file mode 100644
index 0000000000..0e7f92ff86
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/tetrahedron.tex
@@ -0,0 +1,138 @@
+%%% /Users/Hannya/Desktop/KeTCindy/fig/tetrahedron.tex
+%%% Generator=3Dbasic.cdy
+{\unitlength=1cm%
+\begin{picture}%
+(5,4.65)(-2.54,-0.95)%
+\special{pn 8}%
+%
+{%
+\color[rgb]{0,0,0}%
+}%
+{%
+\color[rgb]{0,0,0}%
+}%
+{%
+\color[rgb]{0,0,0}%
+}%
+{%
+\color[rgb]{0,0,0}%
+}%
+{%
+\color[rgb]{0,0,0}%
+}%
+{%
+\color[rgb]{0,0,0}%
+}%
+{%
+\color[rgb]{0,0,0}%
+}%
+{%
+\color[rgb]{0,0,0}%
+}%
+{%
+\color[rgb]{0,0,0}%
+}%
+{%
+\color[rgb]{0,0,0}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pn 8}%
+\special{pa 767 -155}\special{pa 759 -155}\special{fp}\special{pa 728 -154}\special{pa 720 -154}\special{fp}%
+\special{pa 688 -154}\special{pa 680 -153}\special{fp}\special{pa 649 -153}\special{pa 641 -153}\special{fp}%
+\special{pa 610 -152}\special{pa 602 -152}\special{fp}\special{pa 570 -152}\special{pa 562 -152}\special{fp}%
+\special{pa 531 -151}\special{pa 523 -151}\special{fp}\special{pa 492 -150}\special{pa 484 -150}\special{fp}%
+\special{pa 452 -150}\special{pa 444 -150}\special{fp}\special{pa 413 -149}\special{pa 405 -149}\special{fp}%
+\special{pa 374 -148}\special{pa 366 -148}\special{fp}\special{pa 334 -148}\special{pa 326 -148}\special{fp}%
+\special{pa 295 -147}\special{pa 287 -147}\special{fp}\special{pa 256 -147}\special{pa 248 -146}\special{fp}%
+\special{pa 217 -146}\special{pa 209 -146}\special{fp}\special{pa 177 -145}\special{pa 169 -145}\special{fp}%
+\special{pa 138 -145}\special{pa 130 -145}\special{fp}\special{pa 99 -144}\special{pa 91 -144}\special{fp}%
+\special{pa 59 -143}\special{pa 51 -143}\special{fp}\special{pa 20 -143}\special{pa 12 -143}\special{fp}%
+\special{pa -19 -142}\special{pa -27 -142}\special{fp}\special{pa -59 -142}\special{pa -67 -141}\special{fp}%
+\special{pa -98 -141}\special{pa -106 -141}\special{fp}\special{pa -137 -140}\special{pa -145 -140}\special{fp}%
+\special{pa -177 -140}\special{pa -185 -139}\special{fp}\special{pa -216 -139}\special{pa -224 -139}\special{fp}%
+\special{pa -255 -138}\special{pa -263 -138}\special{fp}\special{pa -295 -138}\special{pa -303 -138}\special{fp}%
+\special{pa -334 -137}\special{pa -342 -137}\special{fp}\special{pa -373 -136}\special{pa -381 -136}\special{fp}%
+\special{pa -413 -136}\special{pa -421 -136}\special{fp}\special{pa -452 -135}\special{pa -460 -135}\special{fp}%
+\special{pa -491 -135}\special{pa -499 -134}\special{fp}\special{pa -531 -134}\special{pa -539 -134}\special{fp}%
+\special{pa -570 -133}\special{pa -578 -133}\special{fp}\special{pa -609 -133}\special{pa -617 -133}\special{fp}%
+\special{pa -648 -132}\special{pa -656 -132}\special{fp}\special{pa -688 -131}\special{pa -696 -131}\special{fp}%
+\special{pa -727 -131}\special{pa -735 -131}\special{fp}\special{pa -766 -130}\special{pa -774 -130}\special{fp}%
+\special{pa -806 -129}\special{pa -814 -129}\special{fp}\special{pn 8}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 0 -1294}\special{pa -381 77}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pn 8}%
+\special{pa -385 78}\special{pa -378 77}\special{fp}\special{pa -347 71}\special{pa -339 69}\special{fp}%
+\special{pa -309 63}\special{pa -301 61}\special{fp}\special{pa -271 55}\special{pa -263 54}\special{fp}%
+\special{pa -233 48}\special{pa -225 46}\special{fp}\special{pa -195 40}\special{pa -187 38}\special{fp}%
+\special{pa -156 32}\special{pa -149 31}\special{fp}\special{pa -118 24}\special{pa -110 23}\special{fp}%
+\special{pa -80 17}\special{pa -72 15}\special{fp}\special{pa -42 9}\special{pa -34 7}\special{fp}%
+\special{pa -4 1}\special{pa 4 0}\special{fp}\special{pa 34 -7}\special{pa 42 -8}\special{fp}%
+\special{pa 72 -14}\special{pa 80 -16}\special{fp}\special{pa 111 -22}\special{pa 118 -24}\special{fp}%
+\special{pa 149 -30}\special{pa 157 -31}\special{fp}\special{pa 187 -37}\special{pa 195 -39}\special{fp}%
+\special{pa 225 -45}\special{pa 233 -47}\special{fp}\special{pa 263 -53}\special{pa 271 -54}\special{fp}%
+\special{pa 301 -61}\special{pa 309 -62}\special{fp}\special{pa 339 -68}\special{pa 347 -70}\special{fp}%
+\special{pa 378 -76}\special{pa 385 -78}\special{fp}\special{pa 416 -84}\special{pa 424 -85}\special{fp}%
+\special{pa 454 -92}\special{pa 462 -93}\special{fp}\special{pa 492 -99}\special{pa 500 -101}\special{fp}%
+\special{pa 530 -107}\special{pa 538 -109}\special{fp}\special{pa 568 -115}\special{pa 576 -116}\special{fp}%
+\special{pa 607 -122}\special{pa 614 -124}\special{fp}\special{pa 645 -130}\special{pa 653 -132}\special{fp}%
+\special{pa 683 -138}\special{pa 691 -140}\special{fp}\special{pa 721 -146}\special{pa 729 -147}\special{fp}%
+\special{pa 759 -153}\special{pa 767 -155}\special{fp}\special{pn 8}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pn 8}%
+\special{pa 767 -155}\special{pa 759 -155}\special{fp}\special{pa 728 -154}\special{pa 720 -154}\special{fp}%
+\special{pa 688 -154}\special{pa 680 -153}\special{fp}\special{pa 649 -153}\special{pa 641 -153}\special{fp}%
+\special{pa 610 -152}\special{pa 602 -152}\special{fp}\special{pa 570 -152}\special{pa 562 -152}\special{fp}%
+\special{pa 531 -151}\special{pa 523 -151}\special{fp}\special{pa 492 -150}\special{pa 484 -150}\special{fp}%
+\special{pa 452 -150}\special{pa 444 -150}\special{fp}\special{pa 413 -149}\special{pa 405 -149}\special{fp}%
+\special{pa 374 -148}\special{pa 366 -148}\special{fp}\special{pa 334 -148}\special{pa 326 -148}\special{fp}%
+\special{pa 295 -147}\special{pa 287 -147}\special{fp}\special{pa 256 -147}\special{pa 248 -146}\special{fp}%
+\special{pa 217 -146}\special{pa 209 -146}\special{fp}\special{pa 177 -145}\special{pa 169 -145}\special{fp}%
+\special{pa 138 -145}\special{pa 130 -145}\special{fp}\special{pa 99 -144}\special{pa 91 -144}\special{fp}%
+\special{pa 59 -143}\special{pa 51 -143}\special{fp}\special{pa 20 -143}\special{pa 12 -143}\special{fp}%
+\special{pa -19 -142}\special{pa -27 -142}\special{fp}\special{pa -59 -142}\special{pa -67 -141}\special{fp}%
+\special{pa -98 -141}\special{pa -106 -141}\special{fp}\special{pa -137 -140}\special{pa -145 -140}\special{fp}%
+\special{pa -177 -140}\special{pa -185 -139}\special{fp}\special{pa -216 -139}\special{pa -224 -139}\special{fp}%
+\special{pa -255 -138}\special{pa -263 -138}\special{fp}\special{pa -295 -138}\special{pa -303 -138}\special{fp}%
+\special{pa -334 -137}\special{pa -342 -137}\special{fp}\special{pa -373 -136}\special{pa -381 -136}\special{fp}%
+\special{pa -413 -136}\special{pa -421 -136}\special{fp}\special{pa -452 -135}\special{pa -460 -135}\special{fp}%
+\special{pa -491 -135}\special{pa -499 -134}\special{fp}\special{pa -531 -134}\special{pa -539 -134}\special{fp}%
+\special{pa -570 -133}\special{pa -578 -133}\special{fp}\special{pa -609 -133}\special{pa -617 -133}\special{fp}%
+\special{pa -648 -132}\special{pa -656 -132}\special{fp}\special{pa -688 -131}\special{pa -696 -131}\special{fp}%
+\special{pa -727 -131}\special{pa -735 -131}\special{fp}\special{pa -766 -130}\special{pa -774 -130}\special{fp}%
+\special{pa -806 -129}\special{pa -814 -129}\special{fp}\special{pn 8}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa -810 -129}\special{pa 47 284}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 763 -155}\special{pa 47 284}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa -810 -129}\special{pa 0 -1295}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 763 -155}\special{pa 0 -1295}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa 47 284}\special{pa 0 -1295}%
+\special{fp}%
+}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/translate-view.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/translate-view.pdf
new file mode 100644
index 0000000000..8bcbbb9bf2
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/translate-view.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/translate01.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/translate01.tex
new file mode 100644
index 0000000000..19281c0837
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/translate01.tex
@@ -0,0 +1,53 @@
+%%% /Users/Hannya/ketcindy/ketwork/template.tex 2016-8-12 20:47
+%%% template.sce 2016-8-12 20:47
+{\unitlength=8mm%
+\begin{picture}%
+( 7.59000, 6.02000)( -3.60000, -2.65000)%
+\special{pn 8}%
+%
+\settowidth{\Width}{$x$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-2.7342,-0.4211){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(3.3490,-1.3293){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+%
+\settowidth{\Width}{$z$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$z$}\settodepth{\Depth}{$z$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(0.0000,3.0968){\hspace*{\Width}\raisebox{\Height}{$z$}}%
+%
+%
+\special{pa 1257 -194}\special{pa -802 124}%
+\special{fp}%
+\special{pa -833 -330}\special{pa 999 397}%
+\special{fp}%
+\special{pa 0 835}\special{pa 0 -916}%
+\special{fp}%
+\special{pa 476 -20}\special{pa 947 167}%
+\special{fp}%
+\special{pa 947 167}\special{pa 333 743}%
+\special{fp}%
+\special{pa 476 -20}\special{pa 333 743}%
+\special{fp}%
+\special{pa -281 97}\special{pa 333 743}%
+\special{fp}%
+\special{pa 476 -20}\special{pa -281 97}%
+\special{fp}%
+\special{pa -281 97}\special{pa 333 -478}%
+\special{fp}%
+\special{pa 476 -20}\special{pa 333 -478}%
+\special{fp}%
+\special{pa 947 167}\special{pa 333 -478}%
+\special{fp}%
+\special{pa 947 167}\special{pa 191 284}%
+\special{fp}%
+\special{pa 191 284}\special{pa 333 743}%
+\special{fp}%
+\special{pa 191 284}\special{pa 333 -478}%
+\special{fp}%
+\special{pa 191 284}\special{pa -281 97}%
+\special{fp}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/translatedata.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/translatedata.tex
new file mode 100644
index 0000000000..d5023587ca
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/translatedata.tex
@@ -0,0 +1,141 @@
+%%% test.tex 2014-11-1 11:44
+%%% test.sce 2014-11-1 11:44
+{\unitlength=6mm%
+\begin{picture}%
+( 10.00000, 8.00000)( -2.00000, -2.00000)%
+\special{pn 8}%
+%
+\special{pn 16}%
+\special{pa 1654 0}\special{pa 1652 -30}\special{pa 1646 -59}\special{pa 1637 -87}%
+\special{pa 1624 -114}\special{pa 1608 -139}\special{pa 1590 -162}\special{pa 1568 -182}%
+\special{pa 1544 -199}\special{pa 1518 -214}\special{pa 1490 -225}\special{pa 1462 -232}%
+\special{pa 1432 -236}\special{pa 1402 -236}\special{pa 1373 -232}\special{pa 1344 -225}%
+\special{pa 1317 -214}\special{pa 1291 -199}\special{pa 1267 -182}\special{pa 1245 -162}%
+\special{pa 1226 -139}\special{pa 1210 -114}\special{pa 1198 -87}\special{pa 1189 -59}%
+\special{pa 1183 -30}\special{pa 1181 0}\special{pa 1183 30}\special{pa 1189 59}\special{pa 1198 87}%
+\special{pa 1210 114}\special{pa 1226 139}\special{pa 1245 162}\special{pa 1267 182}%
+\special{pa 1291 199}\special{pa 1317 214}\special{pa 1344 225}\special{pa 1373 232}%
+\special{pa 1402 236}\special{pa 1432 236}\special{pa 1462 232}\special{pa 1490 225}%
+\special{pa 1518 214}\special{pa 1544 199}\special{pa 1568 182}\special{pa 1590 162}%
+\special{pa 1608 139}\special{pa 1624 114}\special{pa 1637 87}\special{pa 1646 59}%
+\special{pa 1652 30}\special{pa 1654 0}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 472 -945}\special{pa 471 -974}\special{pa 469 -984}\special{fp}\special{pa 459 -1021}\special{pa 456 -1032}\special{pa 444 -1057}\special{fp}%
+\special{pa 422 -1090}\special{pa 408 -1107}\special{pa 396 -1118}\special{fp}\special{pa 365 -1142}\special{pa 363 -1144}\special{pa 337 -1159}\special{pa 331 -1161}\special{fp}%
+\special{pa 294 -1173}\special{pa 280 -1177}\special{pa 256 -1180}\special{fp}\special{pa 217 -1180}\special{pa 192 -1177}\special{pa 178 -1173}\special{fp}%
+\special{pa 141 -1161}\special{pa 136 -1159}\special{pa 110 -1144}\special{pa 107 -1142}\special{fp}%
+\special{pa 77 -1118}\special{pa 64 -1107}\special{pa 50 -1090}\special{fp}\special{pa 29 -1057}\special{pa 17 -1032}\special{pa 13 -1021}\special{fp}%
+\special{pa 4 -984}\special{pa 2 -974}\special{pa 0 -945}\special{pa 0 -945}\special{fp}%
+\special{pa 4 -906}\special{pa 7 -886}\special{pa 13 -868}\special{fp}\special{pa 29 -832}\special{pa 29 -831}\special{pa 45 -806}\special{pa 50 -800}\special{fp}%
+\special{pa 77 -771}\special{pa 86 -763}\special{pa 107 -747}\special{fp}\special{pa 141 -729}\special{pa 163 -720}\special{pa 178 -716}\special{fp}%
+\special{pa 217 -710}\special{pa 221 -709}\special{pa 251 -709}\special{pa 256 -710}\special{fp}%
+\special{pa 294 -716}\special{pa 309 -720}\special{pa 331 -729}\special{fp}\special{pa 365 -747}\special{pa 387 -763}\special{pa 396 -771}\special{fp}%
+\special{pa 422 -800}\special{pa 427 -806}\special{pa 443 -831}\special{pa 444 -832}\special{fp}%
+\special{pa 459 -868}\special{pa 465 -886}\special{pa 469 -906}\special{fp}%
+%
+\special{pn 8}%
+\special{pa 0 0}\special{pa 945 236}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 866 242}\special{pa 945 236}\special{pa 878 194}\special{pa 872 218}\special{pa 866 242}%
+\special{sh 1}\special{ip}%
+\special{pn 8}%
+\special{pa 866 242}\special{pa 945 236}\special{pa 878 194}\special{pa 872 218}\special{pa 866 242}%
+\special{fp}%
+\special{pn 8}%
+\special{pn 8}%
+\special{pa 0 0}\special{pa -236 -709}%
+\special{fp}%
+\special{pn 8}%
+\special{pa -189 -645}\special{pa -236 -709}\special{pa -236 -630}\special{pa -213 -638}%
+\special{pa -189 -645}\special{sh 1}\special{ip}%
+\special{pn 8}%
+\special{pa -189 -645}\special{pa -236 -709}\special{pa -236 -630}\special{pa -213 -638}%
+\special{pa -189 -645}%
+\special{fp}%
+\special{pn 8}%
+\settowidth{\Width}{A}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{A}\settodepth{\Depth}{A}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.0500,1.0000){\hspace*{\Width}\raisebox{\Height}{A}}%
+%
+%
+\settowidth{\Width}{B}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{B}\settodepth{\Depth}{B}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(0.9500,1.0000){\hspace*{\Width}\raisebox{\Height}{B}}%
+%
+%
+\settowidth{\Width}{C}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{C}\settodepth{\Depth}{C}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.0500,-1.0000){\hspace*{\Width}\raisebox{\Height}{C}}%
+%
+%
+\settowidth{\Width}{D}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{D}\settodepth{\Depth}{D}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-0.9500,3.0000){\hspace*{\Width}\raisebox{\Height}{D}}%
+%
+%
+\settowidth{\Width}{(2,3)}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{(2,3)}\settodepth{\Depth}{(2,3)}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.0500,3.0000){\hspace*{\Width}\raisebox{\Height}{(2,3)}}%
+%
+%
+\special{pa 481 -245}\special{pa 474 -248}\special{pa 467 -247}\special{pa 462 -242}%
+\special{pa 461 -234}\special{pa 464 -228}\special{pa 471 -225}\special{pa 478 -226}%
+\special{pa 483 -231}\special{pa 484 -238}\special{pa 481 -245}\special{sh 1}\special{fp}%
+\special{pa 245 -245}\special{pa 238 -248}\special{pa 231 -247}\special{pa 226 -242}%
+\special{pa 225 -234}\special{pa 228 -228}\special{pa 234 -225}\special{pa 242 -226}%
+\special{pa 247 -231}\special{pa 248 -238}\special{pa 245 -245}\special{sh 1}\special{fp}%
+\special{pa -228 -717}\special{pa -234 -720}\special{pa -242 -719}\special{pa -247 -714}%
+\special{pa -248 -707}\special{pa -245 -700}\special{pa -238 -697}\special{pa -231 -698}%
+\special{pa -226 -703}\special{pa -225 -711}\special{pa -228 -717}\special{sh 1}\special{fp}%
+\special{pa 481 -717}\special{pa 474 -720}\special{pa 467 -719}\special{pa 462 -714}%
+\special{pa 461 -707}\special{pa 464 -700}\special{pa 471 -697}\special{pa 478 -698}%
+\special{pa 483 -703}\special{pa 484 -711}\special{pa 481 -717}\special{sh 1}\special{fp}%
+\special{pa 709 -236}\special{pa 707 -266}\special{pa 701 -295}\special{pa 692 -323}%
+\special{pa 679 -350}\special{pa 664 -375}\special{pa 645 -398}\special{pa 623 -418}%
+\special{pa 599 -436}\special{pa 573 -450}\special{pa 545 -461}\special{pa 517 -468}%
+\special{pa 487 -472}\special{pa 458 -472}\special{pa 428 -468}\special{pa 399 -461}%
+\special{pa 372 -450}\special{pa 346 -436}\special{pa 322 -418}\special{pa 300 -398}%
+\special{pa 281 -375}\special{pa 265 -350}\special{pa 253 -323}\special{pa 244 -295}%
+\special{pa 238 -266}\special{pa 236 -236}\special{pa 238 -207}\special{pa 244 -177}%
+\special{pa 253 -149}\special{pa 265 -122}\special{pa 281 -97}\special{pa 300 -75}%
+\special{pa 322 -54}\special{pa 346 -37}\special{pa 372 -22}\special{pa 399 -12}\special{pa 428 -4}%
+\special{pa 458 0}\special{pa 487 0}\special{pa 517 -4}\special{pa 545 -12}\special{pa 573 -22}%
+\special{pa 599 -37}\special{pa 623 -54}\special{pa 645 -75}\special{pa 664 -97}\special{pa 679 -122}%
+\special{pa 692 -149}\special{pa 701 -177}\special{pa 707 -207}\special{pa 709 -236}%
+\special{fp}%
+\special{pa 1181 -945}\special{pa 1179 -974}\special{pa 1174 -1004}\special{pa 1165 -1032}%
+\special{pa 1152 -1059}\special{pa 1136 -1084}\special{pa 1117 -1107}\special{pa 1095 -1127}%
+\special{pa 1071 -1144}\special{pa 1045 -1159}\special{pa 1018 -1170}\special{pa 989 -1177}%
+\special{pa 960 -1181}\special{pa 930 -1181}\special{pa 901 -1177}\special{pa 872 -1170}%
+\special{pa 844 -1159}\special{pa 818 -1144}\special{pa 794 -1127}\special{pa 773 -1107}%
+\special{pa 754 -1084}\special{pa 738 -1059}\special{pa 725 -1032}\special{pa 716 -1004}%
+\special{pa 711 -974}\special{pa 709 -945}\special{pa 711 -915}\special{pa 716 -886}%
+\special{pa 725 -858}\special{pa 738 -831}\special{pa 754 -806}\special{pa 773 -783}%
+\special{pa 794 -763}\special{pa 818 -745}\special{pa 844 -731}\special{pa 872 -720}%
+\special{pa 901 -713}\special{pa 930 -709}\special{pa 960 -709}\special{pa 989 -713}%
+\special{pa 1018 -720}\special{pa 1045 -731}\special{pa 1071 -745}\special{pa 1095 -763}%
+\special{pa 1117 -783}\special{pa 1136 -806}\special{pa 1152 -831}\special{pa 1165 -858}%
+\special{pa 1174 -886}\special{pa 1179 -915}\special{pa 1181 -945}%
+\special{fp}%
+\special{pa -472 0}\special{pa 1890 0}%
+\special{fp}%
+\special{pa 0 472}\special{pa 0 -1417}%
+\special{fp}%
+\settowidth{\Width}{$x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(8.0500,0.0000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{\Depth}%
+\put(0.0000,6.0500){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+%
+\settowidth{\Width}{O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(-0.0500,-0.0500){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/translatepoint.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/translatepoint.tex
new file mode 100644
index 0000000000..f3485b5bb4
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/translatepoint.tex
@@ -0,0 +1,127 @@
+%%% /Users/Hannya/Desktop/KeTCindy/fig/translatepoint.tex
+%%% Generator=template1basic.cdy
+{\unitlength=6mm%
+\begin{picture}%
+(10.2,8.31)(-2.88,-2.21)%
+\special{pn 8}%
+%
+\special{pn 1}%
+\special{pa 247 -484}\special{pa 236 -488}\special{pa 225 -484}\special{pa 220 -472}\special{pa 225 -461}\special{pa 236 -457}\special{pa 247 -461}\special{pa 252 -472}\special{pa 247 -484}\special{sh 1}\special{fp}%
+\special{pa 956 -247}\special{pa 945 -252}\special{pa 934 -247}\special{pa 929 -236}\special{pa 934 -225}\special{pa 945 -220}\special{pa 956 -225}\special{pa 961 -236}\special{pa 956 -247}\special{sh 1}\special{fp}%
+\special{pa 720 -1192}\special{pa 709 -1197}\special{pa 698 -1192}\special{pa 693 -1181}\special{pa 698 -1170}\special{pa 709 -1165}\special{pa 720 -1170}\special{pa 724 -1181}\special{pa 720 -1192}\special{sh 1}\special{fp}%
+\special{pa 1192 -720}\special{pa 1181 -724}\special{pa 1170 -720}\special{pa 1165 -709}\special{pa 1170 -698}\special{pa 1181 -693}\special{pa 1192 -698}\special{pa 1197 -709}\special{pa 1192 -720}\special{sh 1}\special{fp}%
+\special{pn 8}%
+\special{pn 2}%
+\special{pn 8}%
+\settowidth{\Width}{A}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{A}\settodepth{\Depth}{A}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(1.0833333,2.0000000){\hspace*{\Width}\raisebox{\Height}{A}}%
+%
+\settowidth{\Width}{B}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{B}\settodepth{\Depth}{B}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.0833333,1.0000000){\hspace*{\Width}\raisebox{\Height}{B}}%
+%
+\settowidth{\Width}{C}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{C}\settodepth{\Depth}{C}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(3.0833333,5.0000000){\hspace*{\Width}\raisebox{\Height}{C}}%
+%
+\settowidth{\Width}{D}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{D}\settodepth{\Depth}{D}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(5.0833333,3.0000000){\hspace*{\Width}\raisebox{\Height}{D}}%
+%
+\special{pa 0 -0}\special{pa 922 -230}%
+\special{fp}%
+\special{pa 878 -194}\special{pa 945 -236}\special{pa 866 -242}\special{pa 872 -218}%
+\special{pa 878 -194}\special{sh 1}\special{ip}%
+\special{pn 1}%
+\special{pa 878 -194}\special{pa 945 -236}\special{pa 866 -242}\special{pa 872 -218}%
+\special{pa 878 -194}\special{pa 945 -236}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 236 -20}\special{pa 236 20}%
+\special{fp}%
+\settowidth{\Width}{$1$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$1$}\settodepth{\Depth}{$1$}\setlength{\Height}{-\Height}%
+\put(1.0000000,-0.1666667){\hspace*{\Width}\raisebox{\Height}{$1$}}%
+%
+%
+\special{pa 472 -20}\special{pa 472 20}%
+\special{fp}%
+\settowidth{\Width}{$2$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$2$}\settodepth{\Depth}{$2$}\setlength{\Height}{-\Height}%
+\put(2.0000000,-0.1666667){\hspace*{\Width}\raisebox{\Height}{$2$}}%
+%
+%
+\special{pa 709 -20}\special{pa 709 20}%
+\special{fp}%
+\settowidth{\Width}{$3$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$3$}\settodepth{\Depth}{$3$}\setlength{\Height}{-\Height}%
+\put(3.0000000,-0.1666667){\hspace*{\Width}\raisebox{\Height}{$3$}}%
+%
+%
+\special{pa 945 -20}\special{pa 945 20}%
+\special{fp}%
+\settowidth{\Width}{$4$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$4$}\settodepth{\Depth}{$4$}\setlength{\Height}{-\Height}%
+\put(4.0000000,-0.1666667){\hspace*{\Width}\raisebox{\Height}{$4$}}%
+%
+%
+\special{pa 1181 -20}\special{pa 1181 20}%
+\special{fp}%
+\settowidth{\Width}{$5$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$5$}\settodepth{\Depth}{$5$}\setlength{\Height}{-\Height}%
+\put(5.0000000,-0.1666667){\hspace*{\Width}\raisebox{\Height}{$5$}}%
+%
+%
+\special{pa 20 -236}\special{pa -20 -236}%
+\special{fp}%
+\settowidth{\Width}{$1$}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{$1$}\settodepth{\Depth}{$1$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-0.1666667,1.0000000){\hspace*{\Width}\raisebox{\Height}{$1$}}%
+%
+%
+\special{pa 20 -472}\special{pa -20 -472}%
+\special{fp}%
+\settowidth{\Width}{$2$}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{$2$}\settodepth{\Depth}{$2$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-0.1666667,2.0000000){\hspace*{\Width}\raisebox{\Height}{$2$}}%
+%
+%
+\special{pa 20 -709}\special{pa -20 -709}%
+\special{fp}%
+\settowidth{\Width}{$3$}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{$3$}\settodepth{\Depth}{$3$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-0.1666667,3.0000000){\hspace*{\Width}\raisebox{\Height}{$3$}}%
+%
+%
+\special{pa 20 -945}\special{pa -20 -945}%
+\special{fp}%
+\settowidth{\Width}{$4$}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{$4$}\settodepth{\Depth}{$4$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-0.1666667,4.0000000){\hspace*{\Width}\raisebox{\Height}{$4$}}%
+%
+%
+\special{pa 20 -1181}\special{pa -20 -1181}%
+\special{fp}%
+\settowidth{\Width}{$5$}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{$5$}\settodepth{\Depth}{$5$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-0.1666667,5.0000000){\hspace*{\Width}\raisebox{\Height}{$5$}}%
+%
+%
+\special{pa -680 -0}\special{pa 1729 -0}%
+\special{fp}%
+\special{pa 0 522}\special{pa 0 -1441}%
+\special{fp}%
+\settowidth{\Width}{$x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(7.4033333,0.0000000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{\Depth}%
+\put(0.0000000,6.1833333){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+\settowidth{\Width}{O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(-0.0833333,-0.0833333){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/trimarrow.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/trimarrow.tex
new file mode 100644
index 0000000000..c8b79fe95f
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/trimarrow.tex
@@ -0,0 +1,53 @@
+%%% /Users/Hannya/Desktop/fig/trimarrow.tex
+%%% Generator=paramark.cdy
+{\unitlength=8mm%
+\begin{picture}%
+(5,4)(-2,-1)%
+\special{pn 8}%
+%
+\special{pa -157 -0}\special{pa -159 -20}\special{pa -162 -39}\special{pa -169 -58}%
+\special{pa -177 -76}\special{pa -188 -93}\special{pa -200 -108}\special{pa -215 -121}%
+\special{pa -231 -133}\special{pa -248 -142}\special{pa -266 -150}\special{pa -285 -155}%
+\special{pa -305 -157}\special{pa -325 -157}\special{pa -344 -155}\special{pa -364 -150}%
+\special{pa -382 -142}\special{pa -399 -133}\special{pa -415 -121}\special{pa -430 -108}%
+\special{pa -442 -93}\special{pa -453 -76}\special{pa -461 -58}\special{pa -467 -39}%
+\special{pa -471 -20}\special{pa -472 0}\special{pa -471 20}\special{pa -467 39}%
+\special{pa -461 58}\special{pa -453 76}\special{pa -442 93}\special{pa -430 108}%
+\special{pa -415 121}\special{pa -399 133}\special{pa -382 142}\special{pa -364 150}%
+\special{pa -344 155}\special{pa -325 157}\special{pa -305 157}\special{pa -285 155}%
+\special{pa -266 150}\special{pa -248 142}\special{pa -231 133}\special{pa -215 121}%
+\special{pa -200 108}\special{pa -188 93}\special{pa -177 76}\special{pa -169 58}%
+\special{pa -162 39}\special{pa -159 20}\special{pa -157 0}%
+\special{fp}%
+\special{pa 677 -562}\special{pa 675 -589}\special{pa 670 -616}\special{pa 662 -642}%
+\special{pa 650 -667}\special{pa 635 -691}\special{pa 618 -712}\special{pa 598 -731}%
+\special{pa 575 -747}\special{pa 551 -760}\special{pa 525 -770}\special{pa 499 -777}%
+\special{pa 471 -781}\special{pa 444 -781}\special{pa 417 -777}\special{pa 390 -770}%
+\special{pa 364 -760}\special{pa 340 -747}\special{pa 318 -731}\special{pa 298 -712}%
+\special{pa 280 -691}\special{pa 265 -667}\special{pa 254 -642}\special{pa 245 -616}%
+\special{pa 240 -589}\special{pa 238 -562}\special{pa 240 -534}\special{pa 245 -507}%
+\special{pa 254 -481}\special{pa 265 -456}\special{pa 280 -433}\special{pa 298 -411}%
+\special{pa 318 -393}\special{pa 340 -376}\special{pa 364 -363}\special{pa 390 -353}%
+\special{pa 417 -346}\special{pa 444 -343}\special{pa 471 -343}\special{pa 499 -346}%
+\special{pa 525 -353}\special{pa 551 -363}\special{pa 575 -376}\special{pa 598 -393}%
+\special{pa 618 -411}\special{pa 635 -433}\special{pa 650 -456}\special{pa 662 -481}%
+\special{pa 670 -507}\special{pa 675 -534}\special{pa 677 -562}%
+\special{fp}%
+\special{pa -188 -93}\special{pa 254 -414}%
+\special{fp}%
+\special{pa 233 -368}\special{pa 279 -432}\special{pa 204 -408}\special{pa 219 -388}%
+\special{pa 233 -368}\special{sh 1}\special{ip}%
+\special{pn 1}%
+\special{pa 233 -368}\special{pa 279 -432}\special{pa 204 -408}\special{pa 219 -388}%
+\special{pa 233 -368}\special{pa 279 -432}%
+\special{fp}%
+\special{pn 8}%
+\settowidth{\Width}{A}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{A}\settodepth{\Depth}{A}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-1.0000000,0.0000000){\hspace*{\Width}\raisebox{\Height}{A}}%
+%
+\settowidth{\Width}{B}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{B}\settodepth{\Depth}{B}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(1.4500000,1.7800000){\hspace*{\Width}\raisebox{\Height}{B}}%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/trimseg.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/trimseg.tex
new file mode 100644
index 0000000000..eedceac2cc
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/trimseg.tex
@@ -0,0 +1,49 @@
+%%% /Users/Hannya/Desktop/fig/trimseg.tex
+%%% Generator=paramark.cdy
+{\unitlength=8mm%
+\begin{picture}%
+(5,4)(-2,-1)%
+\special{pn 8}%
+%
+\special{pa -157 -0}\special{pa -159 -20}\special{pa -162 -39}\special{pa -169 -58}%
+\special{pa -177 -76}\special{pa -188 -93}\special{pa -200 -108}\special{pa -215 -121}%
+\special{pa -231 -133}\special{pa -248 -142}\special{pa -266 -150}\special{pa -285 -155}%
+\special{pa -305 -157}\special{pa -325 -157}\special{pa -344 -155}\special{pa -364 -150}%
+\special{pa -382 -142}\special{pa -399 -133}\special{pa -415 -121}\special{pa -430 -108}%
+\special{pa -442 -93}\special{pa -453 -76}\special{pa -461 -58}\special{pa -467 -39}%
+\special{pa -471 -20}\special{pa -472 0}\special{pa -471 20}\special{pa -467 39}%
+\special{pa -461 58}\special{pa -453 76}\special{pa -442 93}\special{pa -430 108}%
+\special{pa -415 121}\special{pa -399 133}\special{pa -382 142}\special{pa -364 150}%
+\special{pa -344 155}\special{pa -325 157}\special{pa -305 157}\special{pa -285 155}%
+\special{pa -266 150}\special{pa -248 142}\special{pa -231 133}\special{pa -215 121}%
+\special{pa -200 108}\special{pa -188 93}\special{pa -177 76}\special{pa -169 58}%
+\special{pa -162 39}\special{pa -159 20}\special{pa -157 0}%
+\special{fp}%
+\special{pa 677 -562}\special{pa 675 -589}\special{pa 670 -616}\special{pa 662 -642}%
+\special{pa 650 -667}\special{pa 635 -691}\special{pa 618 -712}\special{pa 598 -731}%
+\special{pa 575 -747}\special{pa 551 -760}\special{pa 525 -770}\special{pa 499 -777}%
+\special{pa 471 -781}\special{pa 444 -781}\special{pa 417 -777}\special{pa 390 -770}%
+\special{pa 364 -760}\special{pa 340 -747}\special{pa 318 -731}\special{pa 298 -712}%
+\special{pa 280 -691}\special{pa 265 -667}\special{pa 254 -642}\special{pa 245 -616}%
+\special{pa 240 -589}\special{pa 238 -562}\special{pa 240 -534}\special{pa 245 -507}%
+\special{pa 254 -481}\special{pa 265 -456}\special{pa 280 -433}\special{pa 298 -411}%
+\special{pa 318 -393}\special{pa 340 -376}\special{pa 364 -363}\special{pa 390 -353}%
+\special{pa 417 -346}\special{pa 444 -343}\special{pa 471 -343}\special{pa 499 -346}%
+\special{pa 525 -353}\special{pa 551 -363}\special{pa 575 -376}\special{pa 598 -393}%
+\special{pa 618 -411}\special{pa 635 -433}\special{pa 650 -456}\special{pa 662 -481}%
+\special{pa 670 -507}\special{pa 675 -534}\special{pa 677 -562}%
+\special{fp}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa -188 -93}\special{pa 279 -432}%
+\special{fp}%
+}%
+\settowidth{\Width}{A}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{A}\settodepth{\Depth}{A}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-1.0000000,0.0000000){\hspace*{\Width}\raisebox{\Height}{A}}%
+%
+\settowidth{\Width}{B}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{B}\settodepth{\Depth}{B}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(1.4500000,1.7800000){\hspace*{\Width}\raisebox{\Height}{B}}%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/vertex01.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/vertex01.tex
new file mode 100644
index 0000000000..574b3b2945
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/vertex01.tex
@@ -0,0 +1,20 @@
+%%% /Users/Hannya/ketcindy/ketwork/template.tex 2016-8-9 9:51
+%%% template.sce 2016-8-9 9:51
+{\unitlength=8mm%
+\begin{picture}%
+( 6.32000, 5.44000)( -3.32000, -1.44000)%
+\special{pn 8}%
+%
+\special{pa 375 -221}\special{pa -727 -5}%
+\special{fp}%
+\special{pa -727 -5}\special{pa 352 226}%
+\special{fp}%
+\special{pa 375 -221}\special{pa 352 226}%
+\special{fp}%
+\special{pa -727 -5}\special{pa 0 -1020}%
+\special{fp}%
+\special{pa 375 -221}\special{pa 0 -1020}%
+\special{fp}%
+\special{pa 352 226}\special{pa 0 -1020}%
+\special{fp}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/wire01.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/wire01.tex
new file mode 100644
index 0000000000..13fbd5890b
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/wire01.tex
@@ -0,0 +1,30 @@
+%%% /Users/hannya/Desktop/fig/wire01.tex
+%%% Generator=template3D.cdy
+{\unitlength=8mm%
+\begin{picture}%
+(3.57,3.27)(-1.77,-0.91)%
+\special{pn 8}%
+%
+\settowidth{\Width}{$x$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-1.8000000,-0.4700000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(1.4600000,-0.6100000){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+\settowidth{\Width}{$z$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$z$}\settodepth{\Depth}{$z$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(0.0000000,2.1200000){\hspace*{\Width}\raisebox{\Height}{$z$}}%
+%
+\special{pa 494 -130}\special{pa -494 130}%
+\special{fp}%
+\special{pa -391 -164}\special{pa 391 164}%
+\special{fp}%
+\special{pa 0 287}\special{pa 0 -594}%
+\special{fp}%
+\special{pa -442 -17}\special{pa 0 -149}%
+\special{fp}%
+\special{pa 196 82}\special{pa 247 -65}\special{pa 0 -297}\special{pa 196 82}%
+\special{fp}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/wire02.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/wire02.tex
new file mode 100644
index 0000000000..ca0a12c55a
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/wire02.tex
@@ -0,0 +1,30 @@
+%%% /Users/hannya/Desktop/fig/wire02.tex
+%%% Generator=template3D.cdy
+{\unitlength=8mm%
+\begin{picture}%
+(3.57,3.27)(-1.77,-0.91)%
+\special{pn 8}%
+%
+\settowidth{\Width}{$x$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-1.8000000,-0.4700000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(1.4600000,-0.6100000){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+\settowidth{\Width}{$z$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$z$}\settodepth{\Depth}{$z$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(0.0000000,2.1200000){\hspace*{\Width}\raisebox{\Height}{$z$}}%
+%
+\special{pa 494 -130}\special{pa -494 130}%
+\special{fp}%
+\special{pa -391 -164}\special{pa 391 164}%
+\special{fp}%
+\special{pa 0 287}\special{pa 0 -594}%
+\special{fp}%
+\special{pa -442 -17}\special{pa 442 -280}%
+\special{fp}%
+\special{pa 196 82}\special{pa 247 -65}\special{pa 0 -297}\special{pa 196 82}%
+\special{fp}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/wire03.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/wire03.tex
new file mode 100644
index 0000000000..bd61a8b728
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/wire03.tex
@@ -0,0 +1,30 @@
+%%% /Users/hannya/Desktop/fig/wire03.tex
+%%% Generator=template3D.cdy
+{\unitlength=8mm%
+\begin{picture}%
+(3.57,3.27)(-1.77,-0.91)%
+\special{pn 8}%
+%
+\settowidth{\Width}{$x$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-1.8000000,-0.4700000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(1.4600000,-0.6100000){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+\settowidth{\Width}{$z$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$z$}\settodepth{\Depth}{$z$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(0.0000000,2.1200000){\hspace*{\Width}\raisebox{\Height}{$z$}}%
+%
+\special{pa 494 -130}\special{pa -494 130}%
+\special{fp}%
+\special{pa -391 -164}\special{pa 391 164}%
+\special{fp}%
+\special{pa 0 287}\special{pa 0 -594}%
+\special{fp}%
+\special{pa -442 -17}\special{pa 145 -68}%
+\special{fp}%
+\special{pa 196 82}\special{pa 247 -65}\special{pa 0 -297}\special{pa 196 82}%
+\special{fp}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/wire04.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/wire04.tex
new file mode 100644
index 0000000000..8c69fb66dc
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/wire04.tex
@@ -0,0 +1,30 @@
+%%% /Users/hannya/Desktop/fig/wire04.tex
+%%% Generator=template3D.cdy
+{\unitlength=8mm%
+\begin{picture}%
+(3.57,3.27)(-1.77,-0.91)%
+\special{pn 8}%
+%
+\settowidth{\Width}{$x$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-1.8000000,-0.4700000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(1.4600000,-0.6100000){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+\settowidth{\Width}{$z$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$z$}\settodepth{\Depth}{$z$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(0.0000000,2.1200000){\hspace*{\Width}\raisebox{\Height}{$z$}}%
+%
+\special{pa 494 -130}\special{pa -494 130}%
+\special{fp}%
+\special{pa -391 -164}\special{pa 391 164}%
+\special{fp}%
+\special{pa 0 287}\special{pa 0 -594}%
+\special{fp}%
+\special{pa -442 -17}\special{pa -247 -84}%
+\special{fp}%
+\special{pa 196 82}\special{pa 247 -65}\special{pa 0 -297}\special{pa 196 82}%
+\special{fp}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/wirepara1.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/wirepara1.tex
new file mode 100644
index 0000000000..c13ab0a2dd
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/wirepara1.tex
@@ -0,0 +1,324 @@
+%%% /Users/Hannya/Desktop/KeTCindy/fig/wirepara1.tex
+%%% Generator=3Dbasic.cdy
+{\unitlength=5mm%
+\begin{picture}%
+(7.88,9.66)(-3.75,-4.5)%
+\special{pn 8}%
+%
+{%
+\color[rgb]{0,0,0}%
+}%
+{%
+\color[rgb]{0,0,0}%
+}%
+\settowidth{\Width}{$x$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-3.2500000,-1.7900000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(3.6100000,-1.0300000){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+\settowidth{\Width}{$z$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$z$}\settodepth{\Depth}{$z$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(0.0000000,4.9700000){\hspace*{\Width}\raisebox{\Height}{$z$}}%
+%
+\special{pa 575 -317}\special{pa -575 317}%
+\special{fp}%
+\special{pa -738 -211}\special{pa 639 182}%
+\special{fp}%
+\special{pa 0 886}\special{pa 0 -903}%
+\special{fp}%
+\special{pa -185 309}\special{pa -179 286}\special{pa -179 286}%
+\special{fp}%
+\special{pa -179 286}\special{pa -179 284}\special{pa -179 283}%
+\special{fp}%
+\special{pa -179 283}\special{pa -173 259}\special{pa -173 259}%
+\special{fp}%
+\special{pa -173 259}\special{pa -171 252}\special{pa -167 236}\special{pa -162 221}%
+\special{pa -160 214}\special{pa -154 192}\special{pa -154 191}\special{pa -148 172}%
+\special{pa -145 163}\special{pa -142 153}\special{pa -137 138}\special{pa -136 136}%
+\special{pa -129 119}\special{pa -128 115}\special{pa -123 103}\special{pa -119 94}%
+\special{pa -117 89}\special{pa -111 76}\special{pa -105 63}\special{pa -102 59}%
+\special{pa -99 52}\special{pa -94 44}\special{pa -92 42}\special{pa -86 33}%
+\special{pa -85 32}\special{pa -80 26}\special{pa -76 22}\special{pa -74 19}%
+\special{pa -68 14}\special{pa -61 9}\special{pa -59 8}\special{pa -55 6}%
+\special{pa -51 4}\special{pa -49 4}\special{pa -43 3}\special{pa -37 3}%
+\special{pa -33 3}\special{pa -31 4}\special{pa -25 6}\special{pa -18 10}%
+\special{pa -16 11}\special{pa -12 14}\special{pa -8 18}\special{pa -6 20}%
+\special{pa 0 27}\special{pa 1 28}\special{pa 6 35}\special{pa 10 39}%
+\special{pa 13 44}\special{pa 18 53}\special{pa 19 54}\special{pa 25 65}%
+\special{pa 27 69}\special{pa 31 78}\special{pa 35 87}\special{pa 37 91}%
+\special{pa 44 106}\special{pa 50 121}\special{pa 53 129}\special{pa 56 138}%
+\special{pa 61 153}\special{pa 62 156}\special{pa 68 175}\special{pa 70 180}%
+\special{pa 74 196}\special{pa 78 209}\special{pa 81 217}\special{pa 87 239}%
+\special{pa 93 263}\special{pa 96 273}\special{pa 99 288}\special{pa 104 308}%
+\special{pa 105 312}%
+\special{fp}%
+\special{pa 105 312}\special{pa 105 313}\special{pa 106 317}%
+\special{fp}%
+\special{pa 106 317}\special{pa 111 339}%
+\special{fp}%
+\special{pa 111 339}\special{pa 112 340}\special{pa 113 345}%
+\special{fp}%
+\special{pa 113 345}\special{pa 113 346}\special{pa 117 364}%
+\special{fp}%
+\special{pa 117 364}\special{pa 118 368}\special{pa 121 385}%
+\special{fp}%
+\special{pa 121 385}\special{pa 121 385}\special{pa 123 395}%
+\special{fp}%
+\special{pa 123 395}\special{pa 124 397}%
+\special{fp}%
+\special{pa -549 36}\special{pa -537 -17}\special{pa -524 -68}\special{pa -511 -116}%
+\special{pa -498 -163}\special{pa -486 -206}\special{pa -473 -248}\special{pa -460 -287}%
+\special{pa -447 -324}\special{pa -434 -358}\special{pa -422 -390}\special{pa -409 -420}%
+\special{pa -396 -448}\special{pa -383 -473}\special{pa -370 -496}\special{pa -358 -517}%
+\special{pa -345 -535}\special{pa -332 -551}\special{pa -319 -565}\special{pa -307 -576}%
+\special{pa -294 -585}\special{pa -281 -592}\special{pa -268 -597}\special{pa -255 -599}%
+\special{pa -243 -598}\special{pa -230 -596}\special{pa -217 -591}\special{pa -204 -584}%
+\special{pa -191 -575}\special{pa -179 -563}\special{pa -166 -549}\special{pa -153 -532}%
+\special{pa -140 -514}\special{pa -128 -493}\special{pa -115 -469}\special{pa -102 -444}%
+\special{pa -89 -416}\special{pa -76 -386}\special{pa -64 -353}\special{pa -59 -341}%
+\special{fp}%
+\special{pa -59 -341}\special{pa -51 -318}\special{pa -38 -281}\special{pa -25 -242}%
+\special{pa -12 -200}\special{pa 0 -156}\special{pa 13 -109}\special{pa 26 -60}%
+\special{pa 39 -9}\special{pa 52 44}\special{pa 64 100}\special{pa 77 158}%
+\special{pa 90 218}%
+\special{fp}%
+\special{pa 549 -36}\special{pa 540 26}\special{pa 531 86}\special{pa 522 143}%
+\special{pa 513 197}\special{pa 504 250}\special{pa 494 300}\special{pa 485 348}%
+\special{pa 476 394}\special{pa 467 437}\special{pa 458 478}\special{pa 448 516}%
+\special{pa 439 553}\special{pa 430 587}\special{pa 421 618}\special{pa 412 648}%
+\special{pa 402 675}\special{pa 393 699}\special{pa 384 722}\special{pa 375 742}%
+\special{pa 366 760}\special{pa 356 775}\special{pa 347 788}\special{pa 338 799}%
+\special{pa 329 808}\special{pa 320 814}\special{pa 310 818}\special{pa 301 819}%
+\special{pa 292 819}\special{pa 283 816}\special{pa 274 810}\special{pa 265 803}%
+\special{pa 255 793}\special{pa 246 781}\special{pa 237 766}\special{pa 228 749}%
+\special{pa 219 730}\special{pa 209 708}\special{pa 200 684}\special{pa 191 658}%
+\special{pa 182 630}\special{pa 173 599}\special{pa 163 566}\special{pa 154 531}%
+\special{pa 145 493}\special{pa 136 453}\special{pa 127 410}\special{pa 123 395}%
+\special{fp}%
+\special{pa 123 395}\special{pa 121 384}%
+\special{fp}%
+\special{pa 121 384}\special{pa 117 366}\special{pa 117 366}%
+\special{fp}%
+\special{pa 117 366}\special{pa 113 345}%
+\special{fp}%
+\special{pa 113 345}\special{pa 112 339}%
+\special{fp}%
+\special{pa 112 339}\special{pa 108 319}\special{pa 107 313}%
+\special{fp}%
+\special{pa 107 313}\special{pa 99 270}\special{pa 90 218}%
+\special{fp}%
+\special{pa -59 -341}\special{pa -52 -370}\special{pa -39 -416}\special{pa -26 -460}%
+\special{pa -13 -501}\special{pa -0 -541}\special{pa 12 -577}\special{pa 25 -612}%
+\special{pa 38 -644}\special{pa 51 -674}\special{pa 64 -702}\special{pa 76 -727}%
+\special{pa 89 -750}\special{pa 102 -770}\special{pa 115 -789}\special{pa 128 -805}%
+\special{pa 140 -818}\special{pa 153 -830}\special{pa 166 -839}\special{pa 179 -846}%
+\special{pa 191 -850}\special{pa 204 -852}\special{pa 217 -852}\special{pa 230 -850}%
+\special{pa 243 -845}\special{pa 255 -838}\special{pa 268 -828}\special{pa 281 -817}%
+\special{pa 294 -802}\special{pa 307 -786}\special{pa 319 -767}\special{pa 332 -746}%
+\special{pa 345 -723}\special{pa 358 -697}\special{pa 370 -670}\special{pa 383 -639}%
+\special{pa 396 -607}\special{pa 409 -572}\special{pa 422 -535}\special{pa 434 -495}%
+\special{pa 447 -453}\special{pa 460 -409}\special{pa 473 -363}\special{pa 486 -314}%
+\special{pa 498 -263}\special{pa 511 -210}\special{pa 524 -154}\special{pa 537 -96}%
+\special{pa 549 -36}%
+\special{fp}%
+\special{pa -185 309}\special{pa -191 334}\special{pa -200 370}\special{pa -209 404}%
+\special{pa -219 436}\special{pa -228 465}\special{pa -237 492}\special{pa -246 517}%
+\special{pa -255 539}\special{pa -265 560}\special{pa -274 577}\special{pa -283 593}%
+\special{pa -292 606}\special{pa -301 617}\special{pa -310 625}\special{pa -320 632}%
+\special{pa -329 636}\special{pa -338 637}\special{pa -347 636}\special{pa -356 633}%
+\special{pa -366 628}\special{pa -375 620}\special{pa -384 610}\special{pa -393 598}%
+\special{pa -402 584}\special{pa -412 567}\special{pa -421 548}\special{pa -430 526}%
+\special{pa -439 502}\special{pa -448 476}\special{pa -458 448}\special{pa -467 417}%
+\special{pa -476 384}\special{pa -485 348}\special{pa -494 311}\special{pa -504 270}%
+\special{pa -513 228}\special{pa -522 183}\special{pa -531 137}\special{pa -540 87}%
+\special{pa -549 36}%
+\special{fp}%
+\special{pa -16 -212}\special{pa -16 -214}\special{pa -3 -236}\special{pa 10 -257}%
+\special{pa 23 -275}\special{pa 36 -291}\special{pa 48 -305}\special{pa 61 -317}%
+\special{pa 74 -326}\special{pa 87 -332}\special{pa 100 -337}\special{pa 112 -339}%
+\special{pa 125 -339}\special{pa 138 -336}\special{pa 151 -331}\special{pa 163 -324}%
+\special{pa 176 -315}\special{pa 189 -303}\special{pa 202 -289}\special{pa 215 -273}%
+\special{pa 227 -254}\special{pa 240 -233}\special{pa 253 -210}\special{pa 266 -184}%
+\special{pa 279 -156}\special{pa 291 -126}\special{pa 304 -93}\special{pa 317 -59}%
+\special{pa 330 -21}\special{pa 342 18}\special{pa 355 60}\special{pa 368 104}%
+\special{pa 381 150}\special{pa 394 199}\special{pa 406 250}\special{pa 419 304}%
+\special{pa 432 359}\special{pa 445 417}\special{pa 458 478}%
+\special{fp}%
+\special{pa -274 577}\special{pa -261 524}\special{pa -248 474}\special{pa -235 425}%
+\special{pa -223 379}\special{pa -210 335}\special{pa -197 294}\special{pa -184 255}%
+\special{pa -171 218}\special{pa -159 183}\special{pa -146 151}\special{pa -133 121}%
+\special{pa -120 94}\special{pa -108 69}\special{pa -107 69}\special{pa -106 65}%
+\special{pa -102 59}\special{pa -98 51}%
+\special{fp}%
+\special{pa 27 -57}\special{pa 33 -57}\special{pa 46 -54}\special{pa 59 -49}%
+\special{pa 72 -42}\special{pa 84 -33}\special{pa 97 -21}\special{pa 110 -7}%
+\special{pa 123 9}\special{pa 135 28}\special{pa 148 49}\special{pa 161 72}%
+\special{pa 174 98}\special{pa 187 126}\special{pa 199 156}\special{pa 212 189}%
+\special{pa 225 223}\special{pa 238 261}\special{pa 251 300}\special{pa 263 342}%
+\special{pa 276 386}\special{pa 289 432}\special{pa 302 481}\special{pa 314 532}%
+\special{pa 327 586}\special{pa 340 641}\special{pa 353 699}\special{pa 366 760}%
+\special{fp}%
+\special{pa -366 628}\special{pa -353 575}\special{pa -340 524}\special{pa -327 476}%
+\special{pa -314 430}\special{pa -302 386}\special{pa -289 345}\special{pa -276 306}%
+\special{pa -263 269}\special{pa -251 234}\special{pa -238 202}\special{pa -225 172}%
+\special{pa -212 144}\special{pa -199 119}\special{pa -187 96}\special{pa -174 76}%
+\special{pa -161 57}\special{pa -148 41}\special{pa -135 28}\special{pa -123 16}%
+\special{pa -110 7}\special{pa -97 0}\special{pa -84 -4}\special{pa -72 -6}%
+\special{pa -59 -6}\special{pa -46 -4}\special{pa -33 1}\special{pa -20 8}%
+\special{pa -20 8}\special{pa -18 10}\special{pa -16 11}\special{pa -11 15}%
+\special{fp}%
+\special{pa 70 124}\special{pa 82 149}\special{pa 95 176}\special{pa 107 207}%
+\special{pa 120 239}\special{pa 133 274}\special{pa 146 311}\special{pa 159 351}%
+\special{pa 171 393}\special{pa 184 437}\special{pa 197 483}\special{pa 210 532}%
+\special{pa 223 583}\special{pa 235 636}\special{pa 248 692}\special{pa 261 750}%
+\special{pa 274 810}%
+\special{fp}%
+\special{pa -458 448}\special{pa -445 394}\special{pa -432 344}\special{pa -419 295}%
+\special{pa -406 249}\special{pa -394 206}\special{pa -381 164}\special{pa -368 125}%
+\special{pa -355 88}\special{pa -342 54}\special{pa -330 21}\special{pa -317 -9}%
+\special{pa -304 -36}\special{pa -291 -61}\special{pa -279 -84}\special{pa -266 -105}%
+\special{pa -253 -123}\special{pa -240 -139}\special{pa -227 -153}\special{pa -215 -164}%
+\special{pa -202 -173}\special{pa -189 -180}\special{pa -176 -185}\special{pa -163 -187}%
+\special{pa -151 -187}\special{pa -138 -184}\special{pa -125 -179}\special{pa -112 -172}%
+\special{pa -100 -163}\special{pa -87 -151}\special{pa -74 -137}\special{pa -61 -121}%
+\special{pa -48 -102}\special{pa -36 -81}\special{pa -23 -58}\special{pa -10 -32}%
+\special{pa 3 -4}\special{pa 16 26}\special{pa 28 59}\special{pa 41 94}%
+\special{pa 54 131}\special{pa 67 170}\special{pa 67 170}\special{pa 68 173}%
+\special{pa 68 176}\special{pa 70 181}\special{pa 75 198}%
+\special{fp}%
+\special{pa 105 303}\special{pa 118 351}\special{pa 131 402}\special{pa 143 456}%
+\special{pa 156 512}\special{pa 169 570}\special{pa 182 630}%
+\special{fp}%
+\special{pa 17 -589}\special{pa 7 -527}\special{pa -2 -468}\special{pa -11 -411}%
+\special{pa -20 -356}\special{pa -29 -304}\special{pa -35 -272}%
+\special{fp}%
+\special{pa -134 131}\special{pa -136 136}\special{pa -137 139}\special{pa -140 146}%
+\special{pa -143 154}\special{pa -147 163}\special{pa -149 168}\special{pa -158 188}%
+\special{pa -167 206}\special{pa -176 222}\special{pa -186 235}\special{pa -195 246}%
+\special{pa -204 254}\special{pa -213 260}\special{pa -222 264}\special{pa -231 266}%
+\special{pa -241 265}\special{pa -250 262}\special{pa -259 257}\special{pa -268 249}%
+\special{pa -277 239}\special{pa -287 227}\special{pa -296 212}\special{pa -305 196}%
+\special{pa -314 176}\special{pa -323 155}\special{pa -333 131}\special{pa -342 105}%
+\special{pa -351 76}\special{pa -360 46}\special{pa -369 12}\special{pa -379 -23}%
+\special{pa -388 -61}\special{pa -397 -101}\special{pa -406 -143}\special{pa -415 -188}%
+\special{pa -425 -235}\special{pa -434 -284}\special{pa -443 -335}%
+\special{fp}%
+\special{pa 123 -800}\special{pa 114 -738}\special{pa 105 -679}\special{pa 96 -621}%
+\special{pa 86 -567}\special{pa 77 -514}\special{pa 68 -464}\special{pa 59 -416}%
+\special{pa 50 -371}\special{pa 41 -327}\special{pa 31 -286}\special{pa 22 -248}%
+\special{pa 13 -211}\special{pa 4 -177}\special{pa -1 -161}%
+\special{fp}%
+\special{pa -80 25}\special{pa -82 28}\special{pa -85 32}\special{pa -87 34}%
+\special{pa -88 35}\special{pa -97 44}\special{pa -107 50}\special{pa -116 54}%
+\special{pa -125 55}\special{pa -134 55}\special{pa -143 52}\special{pa -153 46}%
+\special{pa -162 39}\special{pa -171 29}\special{pa -180 16}\special{pa -189 2}%
+\special{pa -198 -15}\special{pa -208 -34}\special{pa -217 -56}\special{pa -226 -80}%
+\special{pa -235 -106}\special{pa -244 -134}\special{pa -254 -165}\special{pa -263 -198}%
+\special{pa -272 -233}\special{pa -281 -271}\special{pa -290 -311}\special{pa -300 -354}%
+\special{pa -309 -398}\special{pa -318 -445}\special{pa -327 -494}\special{pa -336 -546}%
+\special{fp}%
+\special{pa 230 -850}\special{pa 221 -788}\special{pa 211 -728}\special{pa 202 -671}%
+\special{pa 193 -617}\special{pa 184 -564}\special{pa 175 -514}\special{pa 165 -466}%
+\special{pa 156 -420}\special{pa 147 -377}\special{pa 138 -336}\special{pa 129 -298}%
+\special{pa 119 -261}\special{pa 110 -227}\special{pa 101 -196}\special{pa 92 -166}%
+\special{pa 83 -139}\special{pa 74 -115}\special{pa 64 -92}\special{pa 55 -72}%
+\special{pa 46 -54}\special{pa 37 -39}\special{pa 33 -33}%
+\special{fp}%
+\special{pa -28 5}\special{pa -31 4}\special{pa -33 3}\special{pa -37 2}%
+\special{pa -46 -4}\special{pa -55 -11}\special{pa -64 -21}\special{pa -74 -33}%
+\special{pa -83 -48}\special{pa -92 -65}\special{pa -101 -84}\special{pa -110 -106}%
+\special{pa -119 -130}\special{pa -129 -156}\special{pa -138 -184}\special{pa -147 -215}%
+\special{pa -156 -248}\special{pa -165 -283}\special{pa -175 -321}\special{pa -184 -361}%
+\special{pa -193 -403}\special{pa -202 -448}\special{pa -211 -495}\special{pa -221 -544}%
+\special{pa -230 -596}%
+\special{fp}%
+\special{pa 336 -739}\special{pa 327 -677}\special{pa 318 -618}\special{pa 309 -561}%
+\special{pa 300 -506}\special{pa 290 -453}\special{pa 281 -403}\special{pa 272 -355}%
+\special{pa 263 -310}\special{pa 254 -267}\special{pa 244 -226}\special{pa 235 -187}%
+\special{pa 226 -151}\special{pa 217 -117}\special{pa 208 -85}\special{pa 198 -56}%
+\special{pa 189 -29}\special{pa 180 -4}\special{pa 171 19}\special{pa 162 39}%
+\special{pa 153 56}\special{pa 143 72}\special{pa 134 85}\special{pa 125 96}%
+\special{pa 116 104}\special{pa 107 111}\special{pa 97 115}\special{pa 88 116}%
+\special{pa 79 116}\special{pa 70 112}\special{pa 67 111}%
+\special{fp}%
+\special{pa 21 57}\special{pa 18 52}\special{pa 15 46}\special{pa 13 43}%
+\special{pa 11 38}\special{pa 5 27}\special{pa -4 5}\special{pa -13 -19}%
+\special{pa -22 -45}\special{pa -31 -73}\special{pa -41 -104}\special{pa -50 -137}%
+\special{pa -59 -173}\special{pa -68 -210}\special{pa -77 -250}\special{pa -86 -293}%
+\special{pa -96 -337}\special{pa -105 -384}\special{pa -114 -434}\special{pa -123 -485}%
+\special{fp}%
+\special{pa 443 -468}\special{pa 434 -406}\special{pa 425 -346}\special{pa 415 -289}%
+\special{pa 406 -235}\special{pa 397 -182}\special{pa 388 -132}\special{pa 379 -84}%
+\special{pa 369 -38}\special{pa 360 5}\special{pa 351 46}\special{pa 342 84}%
+\special{pa 333 121}\special{pa 323 155}\special{pa 314 186}\special{pa 305 216}%
+\special{pa 296 243}\special{pa 287 267}\special{pa 277 290}\special{pa 268 310}%
+\special{pa 259 328}\special{pa 250 343}\special{pa 241 356}\special{pa 231 367}%
+\special{pa 222 376}\special{pa 213 382}\special{pa 204 386}\special{pa 195 388}%
+\special{pa 186 387}\special{pa 176 384}\special{pa 167 378}\special{pa 158 371}%
+\special{pa 149 361}\special{pa 140 349}\special{pa 130 334}\special{pa 121 317}%
+\special{pa 112 298}\special{pa 103 276}\special{pa 98 265}%
+\special{fp}%
+\special{pa 75 196}\special{pa 73 189}\special{pa 70 180}\special{pa 68 175}%
+\special{pa 66 167}\special{pa 63 156}\special{pa 62 152}\special{pa 57 134}%
+\special{pa 48 99}\special{pa 38 61}\special{pa 29 21}\special{pa 20 -21}%
+\special{pa 11 -66}\special{pa 2 -113}\special{pa -7 -162}\special{pa -17 -213}%
+\special{fp}%
+\special{pn 8}%
+\special{pa -91 -214}\special{pa -89 -222}\special{fp}\special{pa -81 -255}\special{pa -79 -263}\special{fp}%
+\special{pa -71 -296}\special{pa -69 -304}\special{fp}\special{pa -60 -337}\special{pa -58 -345}\special{fp}%
+\special{pn 8}%
+\special{pa -89 -222}\special{pa -90 -214}\special{fp}\special{pa -95 -184}\special{pa -96 -176}\special{fp}%
+\special{pa -101 -146}\special{pa -102 -138}\special{fp}\special{pa -106 -108}\special{pa -108 -100}\special{fp}%
+\special{pa -112 -71}\special{pa -114 -63}\special{fp}\special{pa -119 -33}\special{pa -120 -25}\special{fp}%
+\special{pa -125 5}\special{pa -126 13}\special{fp}\special{pa -131 43}\special{pa -133 51}\special{fp}%
+\special{pa -138 80}\special{pa -140 88}\special{fp}\special{pa -145 118}\special{pa -147 126}\special{fp}%
+\special{pa -152 156}\special{pa -154 163}\special{fp}\special{pa -160 193}\special{pa -161 201}\special{fp}%
+\special{pa -168 231}\special{pa -169 238}\special{fp}\special{pa -176 268}\special{pa -177 276}\special{fp}%
+\special{pa -184 305}\special{pa -186 313}\special{fp}\special{pn 8}%
+\special{pn 8}%
+\special{pa -183 299}\special{pa -181 291}\special{fp}\special{pa -174 262}\special{pa -172 254}\special{fp}%
+\special{pa -165 225}\special{pa -163 217}\special{fp}\special{pa -155 188}\special{pa -153 180}\special{fp}%
+\special{pa -145 151}\special{pa -143 143}\special{fp}\special{pa -135 114}\special{pa -133 106}\special{fp}%
+\special{pa -125 77}\special{pa -123 70}\special{fp}\special{pa -114 41}\special{pa -112 33}\special{fp}%
+\special{pa -103 4}\special{pa -100 -3}\special{fp}\special{pa -91 -32}\special{pa -88 -40}\special{fp}%
+\special{pa -78 -68}\special{pa -75 -76}\special{fp}\special{pa -65 -104}\special{pa -62 -111}\special{fp}%
+\special{pa -50 -139}\special{pa -47 -147}\special{fp}\special{pa -35 -174}\special{pa -31 -182}\special{fp}%
+\special{pa -18 -209}\special{pa -14 -216}\special{fp}\special{pn 8}%
+\special{pn 8}%
+\special{pa -100 54}\special{pa -96 47}\special{fp}\special{pa -77 18}\special{pa -72 11}\special{fp}%
+\special{pa -50 -16}\special{pa -45 -22}\special{fp}\special{pa -18 -44}\special{pa -11 -47}\special{fp}%
+\special{pa 23 -56}\special{pa 31 -58}\special{fp}\special{pn 8}%
+\special{pn 8}%
+\special{pa -14 12}\special{pa -8 18}\special{fp}\special{pa 18 44}\special{pa 23 50}\special{fp}%
+\special{pa 45 81}\special{pa 49 88}\special{fp}\special{pa 68 121}\special{pa 72 128}\special{fp}%
+\special{pn 8}%
+\special{pn 8}%
+\special{pa 74 194}\special{pa 76 202}\special{fp}\special{pa 84 229}\special{pa 87 237}\special{fp}%
+\special{pa 94 264}\special{pa 97 272}\special{fp}\special{pa 104 299}\special{pa 106 307}\special{fp}%
+\special{pn 8}%
+\special{pn 8}%
+\special{pa -34 -276}\special{pa -36 -268}\special{fp}\special{pa -41 -239}\special{pa -43 -231}\special{fp}%
+\special{pa -48 -202}\special{pa -50 -194}\special{fp}\special{pa -56 -165}\special{pa -58 -157}\special{fp}%
+\special{pa -64 -128}\special{pa -65 -120}\special{fp}\special{pa -72 -91}\special{pa -74 -83}\special{fp}%
+\special{pa -80 -54}\special{pa -82 -46}\special{fp}\special{pa -89 -17}\special{pa -91 -9}\special{fp}%
+\special{pa -99 19}\special{pa -101 27}\special{fp}\special{pa -109 56}\special{pa -112 63}\special{fp}%
+\special{pa -120 92}\special{pa -123 99}\special{fp}\special{pa -133 128}\special{pa -135 135}\special{fp}%
+\special{pn 8}%
+\special{pn 8}%
+\special{pa 0 -165}\special{pa -2 -157}\special{fp}\special{pa -12 -126}\special{pa -14 -118}\special{fp}%
+\special{pa -25 -87}\special{pa -27 -80}\special{fp}\special{pa -39 -49}\special{pa -42 -42}\special{fp}%
+\special{pa -56 -12}\special{pa -60 -5}\special{fp}\special{pa -78 22}\special{pa -82 29}\special{fp}%
+\special{pn 8}%
+\special{pn 8}%
+\special{pa 35 -36}\special{pa 30 -30}\special{fp}\special{pa 11 -7}\special{pa 4 -3}\special{fp}%
+\special{pa -24 4}\special{pa -31 6}\special{fp}\special{pn 8}%
+\special{pn 8}%
+\special{pa 70 113}\special{pa 64 108}\special{fp}\special{pa 43 90}\special{pa 38 84}\special{fp}%
+\special{pa 23 60}\special{pa 19 54}\special{fp}\special{pn 8}%
+\special{pn 8}%
+\special{pa 100 268}\special{pa 97 261}\special{fp}\special{pa 87 234}\special{pa 84 226}\special{fp}%
+\special{pa 76 199}\special{pa 73 192}\special{fp}\special{pn 8}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/wirepara2.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/wirepara2.tex
new file mode 100644
index 0000000000..d39aff5a73
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/wirepara2.tex
@@ -0,0 +1,287 @@
+%%% /Users/Hannya/Desktop/KeTCindy/fig/wirepara2.tex
+%%% Generator=3Dbasic.cdy
+{\unitlength=5mm%
+\begin{picture}%
+(7.47,8.11)(-3.34,-2.95)%
+\special{pn 8}%
+%
+{%
+\color[rgb]{0,0,0}%
+}%
+{%
+\color[rgb]{0,0,0}%
+}%
+\settowidth{\Width}{$x$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-2.5000000,-2.5100000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(3.9500000,-0.9800000){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+\settowidth{\Width}{$z$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$z$}\settodepth{\Depth}{$z$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(0.0000000,4.7100000){\hspace*{\Width}\raisebox{\Height}{$z$}}%
+%
+\special{pa 439 -441}\special{pa -439 441}%
+\special{fp}%
+\special{pa -657 -164}\special{pa 705 175}%
+\special{fp}%
+\special{pa 0 581}\special{pa 0 -852}%
+\special{fp}%
+\special{pa 389 -29}\special{pa 382 -55}\special{pa 374 -82}\special{pa 366 -108}%
+\special{pa 358 -133}\special{pa 350 -158}\special{pa 342 -182}\special{pa 334 -206}%
+\special{pa 326 -229}\special{pa 318 -252}\special{pa 310 -274}\special{pa 302 -295}%
+\special{pa 294 -316}\special{pa 286 -337}\special{pa 278 -357}\special{pa 270 -376}%
+\special{pa 262 -395}\special{pa 254 -413}\special{pa 245 -431}\special{pa 244 -435}%
+\special{pa 237 -448}\special{pa 229 -465}\special{pa 221 -481}\special{pa 213 -497}%
+\special{pa 205 -512}\special{pa 197 -526}\special{pa 188 -540}\special{pa 180 -553}%
+\special{pa 172 -566}\special{pa 164 -578}\special{pa 155 -590}\special{pa 153 -593}%
+\special{pa 147 -601}\special{pa 138 -612}\special{pa 130 -622}\special{pa 121 -632}%
+\special{pa 112 -641}\special{pa 109 -644}\special{pa 104 -649}\special{pa 94 -657}%
+\special{pa 85 -664}\special{pa 82 -667}\special{pa 75 -671}\special{pa 65 -677}%
+\special{pa 63 -679}\special{pa 54 -683}\special{pa 49 -686}\special{pa 42 -688}%
+\special{pa 38 -690}\special{pa 28 -693}\special{pa 20 -694}\special{pa 12 -695}%
+\special{pa 5 -696}\special{pa -2 -696}\special{pa -10 -696}\special{pa -17 -695}%
+\special{pa -25 -693}\special{pa -34 -691}\special{pa -42 -688}\special{pa -45 -687}%
+\special{pa -54 -683}\special{pa -58 -681}\special{pa -65 -677}\special{pa -75 -672}%
+\special{pa -85 -664}\special{pa -94 -657}\special{pa -98 -654}\special{pa -104 -649}%
+\special{pa -112 -641}\special{pa -121 -632}\special{pa -130 -622}\special{pa -135 -616}%
+\special{pa -138 -612}\special{pa -147 -601}\special{pa -155 -590}\special{pa -164 -578}%
+\special{pa -172 -566}\special{pa -180 -553}\special{pa -188 -540}\special{pa -197 -526}%
+\special{pa -203 -516}\special{pa -205 -511}\special{pa -213 -496}\special{pa -221 -481}%
+\special{pa -229 -465}\special{pa -237 -448}\special{pa -245 -431}\special{pa -254 -413}%
+\special{pa -262 -395}\special{pa -270 -376}\special{pa -278 -357}\special{pa -286 -337}%
+\special{pa -294 -317}\special{pa -302 -296}\special{pa -310 -274}\special{pa -318 -252}%
+\special{pa -326 -229}\special{pa -334 -206}\special{pa -342 -182}\special{pa -350 -158}%
+\special{pa -358 -133}\special{pa -366 -108}\special{pa -374 -82}\special{pa -382 -56}%
+\special{pa -389 -29}%
+\special{fp}%
+\special{pa -175 176}\special{pa -130 186}\special{pa -82 192}\special{pa -33 196}%
+\special{pa 16 197}\special{pa 65 194}\special{pa 113 189}\special{pa 160 180}%
+\special{pa 204 169}\special{pa 244 154}\special{pa 281 138}\special{pa 313 119}%
+\special{pa 341 99}\special{pa 363 77}\special{pa 379 53}\special{pa 389 29}%
+\special{pa 394 4}\special{pa 392 -20}\special{pa 389 -29}%
+\special{fp}%
+\special{pa -389 -29}\special{pa -394 -4}\special{pa -392 20}\special{pa -383 45}%
+\special{pa -369 68}\special{pa -349 91}\special{pa -324 112}\special{pa -293 132}%
+\special{pa -258 149}\special{pa -218 164}\special{pa -175 176}%
+\special{fp}%
+\special{pa -9 -695}\special{pa -11 -695}\special{pa -17 -695}\special{pa -19 -694}%
+\special{pa -25 -693}\special{pa -27 -693}\special{pa -30 -692}\special{pa -34 -691}%
+\special{pa -34 -691}\special{pa -41 -689}\special{pa -42 -688}\special{pa -45 -687}%
+\special{pa -47 -686}\special{pa -52 -683}\special{pa -57 -679}\special{pa -60 -676}%
+\special{pa -63 -672}\special{pa -65 -668}\special{pa -66 -664}\special{pa -65 -660}%
+\special{pa -64 -656}\special{pa -62 -652}\special{pa -58 -648}\special{pa -54 -644}%
+\special{pa -49 -641}\special{pa -43 -638}\special{pa -36 -636}\special{pa -29 -634}%
+\special{pa -22 -632}\special{pa -14 -631}\special{pa -6 -630}\special{pa 3 -630}%
+\special{pa 11 -631}\special{pa 19 -632}\special{pa 27 -633}\special{pa 34 -635}%
+\special{pa 41 -637}\special{pa 47 -640}\special{pa 52 -643}\special{pa 57 -647}%
+\special{pa 60 -650}\special{pa 63 -654}\special{pa 65 -658}\special{pa 66 -662}%
+\special{pa 65 -666}\special{pa 64 -670}\special{pa 62 -674}\special{pa 58 -678}%
+\special{pa 54 -682}\special{pa 49 -685}\special{pa 43 -688}\special{pa 42 -688}%
+\special{pa 38 -690}\special{pa 36 -690}\special{pa 30 -692}\special{pa 29 -692}%
+\special{pa 22 -694}\special{pa 20 -694}\special{pa 14 -695}\special{pa 12 -695}%
+\special{pa 6 -696}\special{pa 5 -696}%
+\special{fp}%
+\special{pa -112 -640}\special{pa -114 -639}\special{pa -118 -634}\special{pa -121 -632}%
+\special{pa -126 -624}\special{pa -130 -616}\special{pa -131 -608}\special{pa -131 -599}%
+\special{pa -128 -591}\special{pa -123 -583}\special{pa -116 -576}\special{pa -108 -569}%
+\special{pa -98 -562}\special{pa -86 -557}\special{pa -73 -552}\special{pa -58 -547}%
+\special{pa -43 -544}\special{pa -27 -542}\special{pa -11 -541}\special{pa 5 -541}%
+\special{pa 22 -541}\special{pa 38 -543}\special{pa 53 -546}\special{pa 68 -550}%
+\special{pa 81 -555}\special{pa 94 -560}\special{pa 104 -566}\special{pa 114 -573}%
+\special{pa 121 -581}\special{pa 126 -588}\special{pa 130 -596}\special{pa 131 -605}%
+\special{pa 131 -613}\special{pa 128 -621}\special{pa 123 -629}\special{pa 121 -631}%
+\special{pa 117 -636}\special{pa 116 -636}\special{pa 112 -640}%
+\special{fp}%
+\special{pa -188 -540}\special{pa -190 -538}\special{pa -195 -526}\special{pa -195 -526}%
+\special{pa -197 -514}\special{pa -196 -501}\special{pa -192 -489}\special{pa -185 -477}%
+\special{pa -175 -466}\special{pa -162 -455}\special{pa -146 -446}\special{pa -129 -437}%
+\special{pa -109 -430}\special{pa -88 -423}\special{pa -65 -419}\special{pa -41 -415}%
+\special{pa -17 -413}\special{pa 8 -413}\special{pa 33 -414}\special{pa 57 -417}%
+\special{pa 80 -421}\special{pa 102 -427}\special{pa 122 -434}\special{pa 140 -442}%
+\special{pa 157 -452}\special{pa 170 -462}\special{pa 181 -473}\special{pa 190 -485}%
+\special{pa 195 -497}\special{pa 197 -509}\special{pa 196 -522}\special{pa 192 -534}%
+\special{pa 188 -540}\special{pa 185 -546}%
+\special{fp}%
+\special{pa -253 -413}\special{pa -256 -407}\special{pa -260 -398}\special{pa -260 -394}%
+\special{pa -262 -382}\special{pa -261 -365}\special{pa -256 -349}\special{pa -246 -333}%
+\special{pa -233 -318}\special{pa -216 -304}\special{pa -195 -291}\special{pa -172 -280}%
+\special{pa -146 -270}\special{pa -117 -261}\special{pa -87 -255}\special{pa -55 -251}%
+\special{pa -22 -248}\special{pa 11 -248}\special{pa 43 -249}\special{pa 76 -253}%
+\special{pa 106 -259}\special{pa 136 -267}\special{pa 163 -276}\special{pa 187 -287}%
+\special{pa 209 -299}\special{pa 227 -313}\special{pa 242 -328}\special{pa 253 -343}%
+\special{pa 260 -360}\special{pa 262 -376}\special{pa 261 -392}\special{pa 261 -394}%
+\special{pa 256 -409}\special{pa 256 -409}\special{pa 253 -413}%
+\special{fp}%
+\special{pa -323 -235}\special{pa -325 -233}\special{pa -325 -232}\special{pa -325 -228}%
+\special{pa -328 -212}\special{pa -326 -191}\special{pa -320 -171}\special{pa -308 -151}%
+\special{pa -291 -133}\special{pa -270 -115}\special{pa -244 -99}\special{pa -215 -84}%
+\special{pa -182 -72}\special{pa -146 -62}\special{pa -108 -54}\special{pa -69 -48}%
+\special{pa -28 -45}\special{pa 13 -44}\special{pa 54 -47}\special{pa 94 -51}%
+\special{pa 133 -58}\special{pa 170 -68}\special{pa 203 -80}\special{pa 234 -93}%
+\special{pa 261 -109}\special{pa 284 -126}\special{pa 302 -145}\special{pa 316 -164}%
+\special{pa 325 -184}\special{pa 328 -205}\special{pa 326 -225}\special{pa 325 -228}%
+\special{pa 322 -237}\special{pa 320 -246}\special{pa 316 -251}%
+\special{fp}%
+\special{pa 0 -682}\special{pa 3 -678}\special{pa 5 -673}\special{pa 8 -668}%
+\special{pa 10 -663}\special{pa 13 -656}\special{pa 15 -650}\special{pa 18 -642}%
+\special{pa 20 -635}\special{pa 23 -626}\special{pa 25 -617}\special{pa 28 -608}%
+\special{pa 30 -598}\special{pa 33 -587}\special{pa 35 -576}\special{pa 38 -565}%
+\special{pa 40 -552}\special{pa 43 -540}\special{pa 45 -526}\special{pa 48 -513}%
+\special{pa 50 -498}\special{pa 53 -483}\special{pa 55 -468}\special{pa 58 -452}%
+\special{pa 60 -435}\special{pa 63 -418}\special{pa 65 -400}\special{pa 68 -382}%
+\special{pa 70 -364}\special{pa 73 -344}\special{pa 75 -324}\special{pa 78 -304}%
+\special{pa 80 -283}\special{pa 83 -262}\special{pa 85 -240}\special{pa 88 -217}%
+\special{pa 90 -194}\special{pa 93 -170}\special{pa 95 -146}\special{pa 98 -121}%
+\special{pa 100 -96}\special{pa 103 -70}\special{pa 105 -44}\special{pa 108 -17}%
+\special{pa 110 10}\special{pa 113 38}\special{pa 115 67}\special{pa 118 96}%
+\special{pa 120 126}\special{pa 123 156}\special{pa 125 186}%
+\special{fp}%
+\special{pa 0 -682}\special{pa 7 -680}\special{pa 14 -677}\special{pa 21 -674}%
+\special{pa 28 -671}\special{pa 35 -666}\special{pa 42 -662}\special{pa 49 -656}%
+\special{pa 56 -650}\special{pa 63 -644}\special{pa 70 -637}\special{pa 78 -630}%
+\special{pa 85 -622}\special{pa 92 -613}\special{pa 99 -604}\special{pa 106 -594}%
+\special{pa 113 -584}\special{pa 120 -573}\special{pa 127 -562}\special{pa 134 -550}%
+\special{pa 141 -538}\special{pa 148 -525}\special{pa 155 -511}\special{pa 162 -497}%
+\special{pa 169 -483}\special{pa 176 -468}\special{pa 183 -452}\special{pa 190 -436}%
+\special{pa 197 -419}\special{pa 204 -402}\special{pa 211 -384}\special{pa 219 -365}%
+\special{pa 226 -346}\special{pa 233 -327}\special{pa 240 -307}\special{pa 247 -286}%
+\special{pa 254 -265}\special{pa 261 -244}\special{pa 268 -221}\special{pa 275 -199}%
+\special{pa 282 -175}\special{pa 289 -151}\special{pa 296 -127}\special{pa 303 -102}%
+\special{pa 310 -77}\special{pa 317 -51}\special{pa 324 -24}\special{pa 331 3}%
+\special{pa 338 31}\special{pa 345 59}\special{pa 352 87}%
+\special{fp}%
+\special{pa 0 -682}\special{pa 7 -683}\special{pa 15 -683}\special{pa 22 -683}%
+\special{pa 30 -683}\special{pa 37 -681}\special{pa 45 -680}\special{pa 52 -677}%
+\special{pa 60 -674}\special{pa 67 -671}\special{pa 75 -667}\special{pa 82 -663}%
+\special{pa 90 -658}\special{pa 97 -652}\special{pa 102 -648}\special{pa 105 -646}%
+\special{pa 108 -643}\special{pa 112 -640}\special{pa 112 -639}\special{pa 119 -632}%
+\special{pa 120 -631}\special{pa 127 -624}\special{pa 129 -622}\special{pa 134 -616}%
+\special{pa 138 -612}\special{pa 142 -607}\special{pa 146 -602}\special{pa 149 -598}%
+\special{pa 153 -593}\special{pa 155 -590}\special{pa 157 -588}\special{pa 164 -578}%
+\special{pa 164 -577}\special{pa 168 -572}\special{pa 172 -566}\special{pa 172 -566}%
+\special{pa 179 -555}\special{pa 180 -553}\special{pa 187 -543}\special{pa 188 -540}%
+\special{pa 194 -530}\special{pa 197 -525}%
+\special{fp}%
+\special{pa 0 -682}\special{pa 4 -685}\special{pa 7 -688}\special{pa 11 -690}%
+\special{pa 14 -692}\special{pa 18 -693}\special{pa 20 -693}\special{pa 21 -693}%
+\special{pa 25 -693}\special{pa 28 -693}%
+\special{fp}%
+\special{pa 0 -682}\special{pa -3 -685}\special{pa -5 -688}\special{pa -8 -691}%
+\special{pa -10 -692}\special{pa -13 -694}\special{pa -15 -694}\special{pa -18 -695}%
+\special{pa -19 -694}%
+\special{fp}%
+\special{pa 0 -682}\special{pa -7 -683}\special{pa -14 -684}\special{pa -21 -685}%
+\special{pa -28 -685}\special{pa -35 -684}\special{pa -42 -683}\special{pa -49 -681}%
+\special{pa -56 -678}\special{pa -63 -676}\special{pa -70 -672}\special{pa -74 -670}%
+\special{pa -78 -668}\special{pa -85 -664}\special{pa -92 -659}\special{pa -94 -657}%
+\special{pa -98 -654}\special{pa -99 -653}\special{pa -103 -649}\special{pa -106 -647}%
+\special{pa -112 -641}\special{pa -113 -640}\special{pa -120 -633}\special{pa -120 -633}%
+\special{pa -122 -631}\special{pa -127 -625}\special{pa -130 -622}\special{pa -134 -617}%
+\special{pa -134 -616}%
+\special{fp}%
+\special{pa 0 -682}\special{pa -7 -680}\special{pa -15 -678}\special{pa -22 -676}%
+\special{pa -30 -673}\special{pa -37 -669}\special{pa -45 -665}\special{pa -52 -660}%
+\special{pa -60 -654}\special{pa -67 -649}\special{pa -75 -642}\special{pa -82 -635}%
+\special{pa -90 -628}\special{pa -97 -620}\special{pa -105 -611}\special{pa -112 -602}%
+\special{pa -119 -592}\special{pa -127 -582}\special{pa -134 -571}\special{pa -142 -560}%
+\special{pa -149 -548}\special{pa -157 -535}\special{pa -164 -522}\special{pa -172 -509}%
+\special{pa -179 -495}\special{pa -187 -480}\special{pa -194 -465}\special{pa -202 -449}%
+\special{pa -209 -433}\special{pa -217 -416}\special{pa -224 -399}\special{pa -231 -381}%
+\special{pa -239 -363}\special{pa -246 -344}\special{pa -254 -324}\special{pa -261 -304}%
+\special{pa -269 -283}\special{pa -276 -262}\special{pa -284 -240}\special{pa -291 -218}%
+\special{pa -299 -195}\special{pa -306 -172}\special{pa -314 -148}\special{pa -321 -124}%
+\special{pa -328 -99}\special{pa -336 -73}\special{pa -343 -47}\special{pa -351 -21}%
+\special{pa -358 7}\special{pa -366 34}\special{pa -373 62}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 391 -25}\special{pa 387 -32}\special{fp}\special{pa 374 -60}\special{pa 370 -67}\special{fp}%
+\special{pa 350 -90}\special{pa 344 -96}\special{fp}\special{pa 319 -115}\special{pa 313 -119}\special{fp}%
+\special{pa 286 -135}\special{pa 279 -138}\special{fp}\special{pa 251 -151}\special{pa 244 -154}\special{fp}%
+\special{pa 215 -165}\special{pa 207 -167}\special{fp}\special{pa 177 -176}\special{pa 170 -178}\special{fp}%
+\special{pa 139 -184}\special{pa 131 -185}\special{fp}\special{pa 101 -190}\special{pa 93 -191}\special{fp}%
+\special{pa 62 -194}\special{pa 54 -195}\special{fp}\special{pa 23 -196}\special{pa 15 -196}\special{fp}%
+\special{pa -15 -197}\special{pa -23 -196}\special{fp}\special{pa -54 -195}\special{pa -62 -194}\special{fp}%
+\special{pa -93 -191}\special{pa -101 -190}\special{fp}\special{pa -131 -185}\special{pa -139 -184}\special{fp}%
+\special{pa -169 -177}\special{pa -177 -175}\special{fp}\special{pa -207 -167}\special{pa -215 -165}\special{fp}%
+\special{pa -244 -154}\special{pa -251 -151}\special{fp}\special{pa -279 -139}\special{pa -286 -135}\special{fp}%
+\special{pa -313 -119}\special{pa -319 -115}\special{fp}\special{pa -344 -96}\special{pa -349 -90}\special{fp}%
+\special{pa -370 -67}\special{pa -374 -60}\special{fp}\special{pa -388 -33}\special{pa -391 -25}\special{fp}%
+\special{pn 8}%
+\special{pn 8}%
+\special{pa 1 -696}\special{pa 9 -696}\special{fp}\special{pn 8}%
+\special{pn 8}%
+\special{pa 116 -638}\special{pa 109 -642}\special{fp}\special{pa 81 -657}\special{pa 74 -660}\special{fp}%
+\special{pa 43 -668}\special{pa 36 -669}\special{fp}\special{pa 4 -672}\special{pa -4 -672}\special{fp}%
+\special{pa -35 -669}\special{pa -43 -668}\special{fp}\special{pa -74 -660}\special{pa -81 -658}\special{fp}%
+\special{pa -108 -642}\special{pa -115 -638}\special{fp}\special{pn 8}%
+\special{pn 8}%
+\special{pa 188 -543}\special{pa 182 -548}\special{fp}\special{pa 157 -570}\special{pa 151 -575}\special{fp}%
+\special{pa 121 -589}\special{pa 114 -592}\special{fp}\special{pa 82 -601}\special{pa 74 -602}\special{fp}%
+\special{pa 42 -608}\special{pa 34 -608}\special{fp}\special{pa 1 -610}\special{pa -7 -610}\special{fp}%
+\special{pa -40 -608}\special{pa -48 -607}\special{fp}\special{pa -80 -601}\special{pa -88 -599}\special{fp}%
+\special{pa -120 -590}\special{pa -127 -587}\special{fp}\special{pa -156 -571}\special{pa -163 -567}\special{fp}%
+\special{pa -185 -543}\special{pa -191 -537}\special{fp}\special{pn 8}%
+\special{pn 8}%
+\special{pa 255 -410}\special{pa 250 -416}\special{fp}\special{pa 230 -441}\special{pa 224 -447}\special{fp}%
+\special{pa 198 -465}\special{pa 191 -469}\special{fp}\special{pa 162 -482}\special{pa 154 -485}\special{fp}%
+\special{pa 123 -495}\special{pa 116 -497}\special{fp}\special{pa 84 -503}\special{pa 76 -504}\special{fp}%
+\special{pa 44 -508}\special{pa 36 -509}\special{fp}\special{pa 4 -510}\special{pa -4 -510}\special{fp}%
+\special{pa -36 -509}\special{pa -44 -508}\special{fp}\special{pa -76 -504}\special{pa -84 -503}\special{fp}%
+\special{pa -115 -496}\special{pa -123 -494}\special{fp}\special{pa -154 -485}\special{pa -161 -482}\special{fp}%
+\special{pa -191 -469}\special{pa -198 -465}\special{fp}\special{pa -225 -447}\special{pa -230 -442}\special{fp}%
+\special{pa -250 -417}\special{pa -256 -410}\special{fp}\special{pn 8}%
+\special{pn 8}%
+\special{pa 319 -248}\special{pa 314 -255}\special{fp}\special{pa 295 -280}\special{pa 289 -286}\special{fp}%
+\special{pa 264 -305}\special{pa 257 -310}\special{fp}\special{pa 229 -325}\special{pa 222 -329}\special{fp}%
+\special{pa 192 -341}\special{pa 185 -344}\special{fp}\special{pa 154 -353}\special{pa 146 -355}\special{fp}%
+\special{pa 115 -362}\special{pa 107 -363}\special{fp}\special{pa 75 -368}\special{pa 67 -369}\special{fp}%
+\special{pa 35 -371}\special{pa 27 -372}\special{fp}\special{pa -5 -372}\special{pa -13 -372}\special{fp}%
+\special{pa -45 -371}\special{pa -53 -370}\special{fp}\special{pa -85 -367}\special{pa -93 -366}\special{fp}%
+\special{pa -124 -360}\special{pa -132 -358}\special{fp}\special{pa -163 -351}\special{pa -171 -348}\special{fp}%
+\special{pa -201 -338}\special{pa -209 -335}\special{fp}\special{pa -238 -321}\special{pa -244 -317}\special{fp}%
+\special{pa -271 -300}\special{pa -278 -295}\special{fp}\special{pa -301 -273}\special{pa -306 -267}\special{fp}%
+\special{pa -321 -239}\special{pa -325 -232}\special{fp}\special{pn 8}%
+\special{pn 8}%
+\special{pn 8}%
+\special{pn 8}%
+\special{pa 195 -529}\special{pa 199 -522}\special{fp}\special{pa 213 -495}\special{pa 217 -488}\special{fp}%
+\special{pa 230 -461}\special{pa 234 -454}\special{fp}\special{pa 246 -427}\special{pa 249 -419}\special{fp}%
+\special{pa 261 -392}\special{pa 264 -384}\special{fp}\special{pa 276 -356}\special{pa 279 -349}\special{fp}%
+\special{pa 289 -321}\special{pa 292 -313}\special{fp}\special{pa 303 -285}\special{pa 305 -277}\special{fp}%
+\special{pa 315 -249}\special{pa 318 -241}\special{fp}\special{pa 327 -212}\special{pa 330 -205}\special{fp}%
+\special{pa 339 -176}\special{pa 341 -168}\special{fp}\special{pa 350 -140}\special{pa 353 -132}\special{fp}%
+\special{pa 361 -103}\special{pa 364 -95}\special{fp}\special{pa 372 -66}\special{pa 374 -59}\special{fp}%
+\special{pn 8}%
+\special{pn 8}%
+\special{pa 25 -695}\special{pa 31 -690}\special{fp}\special{pa 54 -671}\special{pa 59 -664}\special{fp}%
+\special{pa 73 -637}\special{pa 76 -629}\special{fp}\special{pa 87 -600}\special{pa 90 -593}\special{fp}%
+\special{pa 99 -563}\special{pa 102 -555}\special{fp}\special{pa 110 -525}\special{pa 112 -518}\special{fp}%
+\special{pa 119 -488}\special{pa 121 -480}\special{fp}\special{pa 128 -449}\special{pa 129 -442}\special{fp}%
+\special{pa 136 -411}\special{pa 137 -403}\special{fp}\special{pa 143 -373}\special{pa 144 -365}\special{fp}%
+\special{pa 150 -334}\special{pa 151 -327}\special{fp}\special{pa 157 -296}\special{pa 158 -288}\special{fp}%
+\special{pa 163 -257}\special{pa 164 -249}\special{fp}\special{pa 169 -219}\special{pa 170 -211}\special{fp}%
+\special{pa 175 -180}\special{pa 176 -172}\special{fp}\special{pn 8}%
+\special{pn 8}%
+\special{pa -17 -698}\special{pa -22 -691}\special{fp}\special{pa -42 -667}\special{pa -46 -660}\special{fp}%
+\special{pa -56 -630}\special{pa -58 -622}\special{fp}\special{pa -66 -590}\special{pa -68 -583}\special{fp}%
+\special{pa -75 -551}\special{pa -76 -543}\special{fp}\special{pa -82 -511}\special{pa -83 -503}\special{fp}%
+\special{pa -89 -471}\special{pa -90 -463}\special{fp}\special{pa -95 -431}\special{pa -96 -423}\special{fp}%
+\special{pa -101 -391}\special{pa -102 -383}\special{fp}\special{pa -106 -351}\special{pa -107 -343}\special{fp}%
+\special{pa -111 -311}\special{pa -112 -303}\special{fp}\special{pa -116 -271}\special{pa -117 -263}\special{fp}%
+\special{pa -120 -231}\special{pa -121 -223}\special{fp}\special{pa -125 -191}\special{pa -126 -183}\special{fp}%
+\special{pn 8}%
+\special{pn 8}%
+\special{pa -132 -619}\special{pa -137 -613}\special{fp}\special{pa -155 -589}\special{pa -159 -582}\special{fp}%
+\special{pa -176 -556}\special{pa -180 -550}\special{fp}\special{pa -194 -523}\special{pa -198 -516}\special{fp}%
+\special{pa -212 -489}\special{pa -215 -482}\special{fp}\special{pa -228 -454}\special{pa -231 -447}\special{fp}%
+\special{pa -243 -419}\special{pa -246 -411}\special{fp}\special{pa -257 -383}\special{pa -260 -376}\special{fp}%
+\special{pa -271 -347}\special{pa -273 -340}\special{fp}\special{pa -283 -311}\special{pa -286 -304}\special{fp}%
+\special{pa -296 -275}\special{pa -298 -267}\special{fp}\special{pa -308 -239}\special{pa -310 -231}\special{fp}%
+\special{pa -319 -202}\special{pa -322 -194}\special{fp}\special{pa -330 -165}\special{pa -333 -158}\special{fp}%
+\special{pa -341 -128}\special{pa -343 -121}\special{fp}\special{pa -351 -92}\special{pa -354 -84}\special{fp}%
+\special{pn 8}%
+\special{pn 8}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/wirepara3.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/wirepara3.tex
new file mode 100644
index 0000000000..da67431612
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/wirepara3.tex
@@ -0,0 +1,649 @@
+%%% /Users/hannya/Desktop/fig/wirepara3.tex
+%%% Generator=template3D.cdy
+{\unitlength=8mm%
+\begin{picture}%
+(5.24,5.22)(-2.52,-2.31)%
+\special{pn 8}%
+%
+\settowidth{\Width}{$x$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-2.7300000,-0.7600000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.4000000,-1.5300000){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+\settowidth{\Width}{$z$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$z$}\settodepth{\Depth}{$z$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(0.0000000,2.9600000){\hspace*{\Width}\raisebox{\Height}{$z$}}%
+%
+\special{pa 857 -237}\special{pa -789 218}%
+\special{fp}%
+\special{pa -694 -441}\special{pa 694 441}%
+\special{fp}%
+\special{pa 0 728}\special{pa 0 -858}%
+\special{fp}%
+\special{pn 8}%
+\special{pa -335 533}\special{pa -333 535}\special{pa -286 561}\special{pa -286 561}%
+\special{fp}%
+\special{pa -286 561}\special{pa -276 566}%
+\special{fp}%
+\special{pa -276 566}\special{pa -231 586}\special{pa -224 589}\special{pa -177 605}%
+\special{pa -164 608}\special{pa -135 615}\special{pa -98 622}\special{pa -63 627}%
+\special{pa -49 628}\special{pa -29 629}\special{pa 5 630}\special{pa 38 629}%
+\special{pa 49 628}\special{pa 72 626}\special{pa 108 621}\special{pa 147 613}%
+\special{pa 164 608}\special{pa 189 601}\special{pa 231 586}\special{pa 238 583}%
+\special{pa 286 561}\special{pa 293 558}\special{pa 333 535}\special{pa 356 519}%
+\special{pa 375 506}\special{pa 414 475}\special{pa 430 461}\special{pa 448 442}%
+\special{pa 480 408}\special{pa 508 372}\special{pa 534 334}\special{pa 556 296}%
+\special{pa 576 255}\special{pa 582 240}\special{pa 592 214}\special{pa 606 173}%
+\special{pa 616 130}\special{pa 624 87}\special{pa 626 68}\special{pa 628 44}%
+\special{pa 630 -0}\special{pa 628 -44}\special{pa 624 -87}\special{pa 619 -119}%
+\special{pa 616 -130}\special{pa 606 -173}\special{pa 592 -214}\special{pa 576 -255}%
+\special{pa 564 -281}\special{pa 556 -295}\special{pa 534 -334}\special{pa 508 -372}%
+\special{pa 487 -400}\special{pa 480 -408}\special{pa 448 -442}\special{pa 414 -475}%
+\special{pa 408 -480}\special{pa 375 -506}\special{pa 338 -532}\special{pa 333 -535}%
+\special{pa 286 -561}\special{pa 276 -566}\special{pa 231 -586}\special{pa 224 -589}%
+\special{pa 177 -605}\special{pa 164 -608}\special{pa 135 -615}\special{pa 98 -622}%
+\special{pa 63 -627}\special{pa 49 -628}\special{pa 29 -629}\special{pa -5 -630}%
+\special{pa -38 -629}\special{pa -49 -628}\special{pa -72 -626}\special{pa -108 -621}%
+\special{pa -147 -613}\special{pa -164 -608}\special{pa -189 -601}\special{pa -231 -586}%
+\special{pa -238 -583}\special{pa -286 -561}\special{pa -293 -558}\special{pa -333 -535}%
+\special{pa -356 -519}\special{pa -375 -506}\special{pa -414 -475}\special{pa -430 -461}%
+\special{pa -448 -442}\special{pa -480 -408}\special{pa -508 -372}\special{pa -534 -334}%
+\special{pa -556 -296}\special{pa -576 -255}\special{pa -582 -240}\special{pa -592 -214}%
+\special{pa -606 -173}\special{pa -616 -130}\special{pa -624 -87}\special{pa -626 -68}%
+\special{pa -628 -44}\special{pa -630 0}\special{pa -628 44}\special{pa -624 87}%
+\special{pa -619 119}\special{pa -616 130}\special{pa -606 173}\special{pa -592 214}%
+\special{pa -576 255}\special{pa -564 281}\special{pa -556 295}\special{pa -534 334}%
+\special{pa -508 372}\special{pa -487 400}\special{pa -480 408}\special{pa -448 442}%
+\special{pa -414 475}\special{pa -408 480}\special{pa -376 506}%
+\special{fp}%
+\special{pa -376 506}\special{pa -375 506}\special{pa -341 529}%
+\special{fp}%
+\special{pa -341 529}\special{pa -338 532}%
+\special{fp}%
+\special{pa 0 -572}\special{pa -33 -562}\special{pa -66 -549}\special{pa -99 -534}%
+\special{pa -131 -518}\special{pa -162 -499}\special{pa -194 -478}\special{pa -224 -456}%
+\special{pa -253 -431}\special{pa -282 -405}\special{pa -309 -377}\special{pa -335 -348}%
+\special{pa -360 -317}\special{pa -383 -285}\special{pa -405 -252}\special{pa -425 -218}%
+\special{pa -444 -184}\special{pa -461 -148}\special{pa -476 -112}\special{pa -489 -75}%
+\special{pa -500 -38}\special{pa -509 -1}\special{pa -516 36}\special{pa -522 73}%
+\special{pa -525 109}\special{pa -526 145}\special{pa -525 181}\special{pa -522 216}%
+\special{pa -516 250}\special{pa -509 283}\special{pa -500 315}\special{pa -489 346}%
+\special{pa -476 375}\special{pa -461 403}\special{pa -444 429}\special{pa -425 454}%
+\special{pa -405 477}\special{pa -383 497}\special{pa -375 504}%
+\special{fp}%
+\special{pa -375 504}\special{pa -360 516}\special{pa -335 533}%
+\special{fp}%
+\special{pn 8}%
+\special{pa -339 531}\special{pa -332 535}\special{fp}\special{pa -305 550}\special{pa -298 553}\special{fp}%
+\special{pa -269 565}\special{pa -262 568}\special{fp}\special{pa -233 577}\special{pa -225 579}\special{fp}%
+\special{pa -195 585}\special{pa -187 586}\special{fp}\special{pa -157 589}\special{pa -149 589}\special{fp}%
+\special{pa -118 590}\special{pa -110 589}\special{fp}\special{pa -80 587}\special{pa -72 586}\special{fp}%
+\special{pa -41 581}\special{pa -34 580}\special{fp}\special{pa -4 573}\special{pa 4 571}\special{fp}%
+\special{pn 8}%
+\special{pa -126 -520}\special{pa -114 -514}\special{pa -101 -508}\special{pa -86 -503}%
+\special{pa -70 -499}\special{pa -53 -496}\special{pa -35 -494}\special{pa -16 -492}%
+\special{pa 3 -492}\special{pa 22 -493}\special{pa 40 -494}\special{pa 58 -497}%
+\special{pa 75 -500}\special{pa 91 -505}\special{pa 105 -510}\special{pa 118 -516}%
+\special{pa 129 -522}\special{pa 138 -529}\special{pa 144 -537}\special{pa 149 -544}%
+\special{pa 151 -552}\special{pa 150 -560}\special{pa 148 -568}\special{pa 143 -576}%
+\special{pa 135 -583}\special{pa 126 -590}\special{pa 114 -596}\special{pa 101 -602}%
+\special{pa 86 -607}\special{pa 70 -611}\special{pa 53 -614}\special{pa 35 -617}%
+\special{pa 16 -618}\special{pa -3 -618}\special{pa -22 -618}\special{pa -40 -616}%
+\special{pa -58 -614}\special{pa -75 -610}\special{pa -91 -606}\special{pa -105 -601}%
+\special{pa -118 -595}\special{pa -129 -588}\special{pa -138 -581}\special{pa -144 -574}%
+\special{pa -149 -566}\special{pa -151 -558}\special{pa -150 -550}\special{pa -148 -542}%
+\special{pa -143 -535}\special{pa -135 -527}\special{pa -126 -520}\special{pa -114 -514}%
+\special{pa -101 -508}\special{pa -86 -503}\special{pa -70 -499}\special{pa -53 -496}%
+\special{pa -35 -494}\special{pa -16 -492}\special{pa 3 -492}\special{pa 22 -493}%
+\special{pa 40 -494}\special{pa 58 -497}\special{pa 75 -500}\special{pa 91 -505}%
+\special{pa 105 -510}\special{pa 118 -516}\special{pa 129 -522}\special{pa 138 -529}%
+\special{pa 144 -537}\special{pa 149 -544}\special{pa 151 -552}\special{pa 150 -560}%
+\special{pa 148 -568}\special{pa 143 -576}\special{pa 135 -583}\special{pa 126 -590}%
+\special{pa 114 -596}\special{pa 101 -602}\special{pa 86 -607}\special{pa 70 -611}%
+\special{pa 53 -614}\special{pa 35 -617}\special{pa 16 -618}\special{pa -3 -618}%
+\special{pa -22 -618}\special{pa -40 -616}\special{pa -58 -614}\special{pa -75 -610}%
+\special{pa -91 -606}\special{pa -105 -601}\special{pa -118 -595}\special{pa -129 -588}%
+\special{pa -138 -581}\special{pa -144 -574}\special{pa -149 -566}\special{pa -151 -558}%
+\special{pa -150 -550}\special{pa -148 -542}\special{pa -143 -535}\special{pa -135 -527}%
+\special{pa -126 -520}%
+\special{fp}%
+\special{pa -107 -620}\special{pa -112 -620}\special{pa -113 -620}\special{pa -121 -618}%
+\special{pa -146 -613}\special{pa -146 -613}\special{pa -164 -608}\special{pa -176 -604}%
+\special{pa -190 -599}\special{pa -204 -594}\special{pa -229 -583}\special{pa -250 -570}%
+\special{pa -267 -557}\special{pa -280 -542}\special{pa -288 -527}\special{pa -292 -512}%
+\special{pa -292 -496}\special{pa -287 -481}\special{pa -277 -466}\special{pa -263 -452}%
+\special{pa -244 -439}\special{pa -222 -426}\special{pa -197 -415}\special{pa -168 -406}%
+\special{pa -136 -398}\special{pa -103 -391}\special{pa -68 -387}\special{pa -32 -384}%
+\special{pa 5 -384}\special{pa 42 -385}\special{pa 78 -388}\special{pa 113 -393}%
+\special{pa 146 -400}\special{pa 176 -408}\special{pa 204 -418}\special{pa 229 -430}%
+\special{pa 250 -442}\special{pa 267 -456}\special{pa 280 -470}\special{pa 288 -485}%
+\special{pa 292 -501}\special{pa 292 -516}\special{pa 287 -531}\special{pa 277 -546}%
+\special{pa 263 -561}\special{pa 244 -574}\special{pa 222 -586}\special{pa 197 -597}%
+\special{pa 180 -603}\special{pa 168 -607}\special{pa 164 -608}\special{pa 139 -614}%
+\special{pa 136 -615}\special{pa 135 -615}\special{pa 103 -621}\special{pa 96 -622}%
+\special{fp}%
+\special{pa -355 -520}\special{pa -357 -519}\special{pa -376 -503}\special{pa -381 -500}%
+\special{pa -399 -479}\special{pa -412 -458}\special{pa -417 -436}\special{pa -416 -414}%
+\special{pa -409 -392}\special{pa -395 -371}\special{pa -375 -351}\special{pa -349 -332}%
+\special{pa -317 -314}\special{pa -281 -298}\special{pa -240 -285}\special{pa -195 -273}%
+\special{pa -147 -264}\special{pa -97 -258}\special{pa -45 -254}\special{pa 7 -253}%
+\special{pa 60 -255}\special{pa 111 -259}\special{pa 161 -266}\special{pa 208 -276}%
+\special{pa 251 -288}\special{pa 291 -302}\special{pa 327 -319}\special{pa 357 -337}%
+\special{pa 381 -356}\special{pa 399 -377}\special{pa 412 -398}\special{pa 417 -420}%
+\special{pa 416 -442}\special{pa 409 -464}\special{pa 395 -485}\special{pa 375 -505}%
+\special{pa 355 -520}\special{pa 349 -525}\special{pa 346 -526}%
+\special{fp}%
+\special{pa -493 -392}\special{pa -496 -388}\special{pa -497 -387}\special{pa -507 -369}%
+\special{pa -511 -362}\special{pa -518 -335}\special{pa -517 -307}\special{pa -507 -280}%
+\special{pa -490 -254}\special{pa -465 -229}\special{pa -433 -205}\special{pa -394 -183}%
+\special{pa -348 -164}\special{pa -297 -147}\special{pa -242 -133}\special{pa -182 -121}%
+\special{pa -120 -113}\special{pa -56 -109}\special{pa 9 -108}\special{pa 74 -110}%
+\special{pa 138 -115}\special{pa 199 -124}\special{pa 258 -136}\special{pa 312 -151}%
+\special{pa 362 -169}\special{pa 405 -189}\special{pa 443 -212}\special{pa 473 -236}%
+\special{pa 496 -261}\special{pa 511 -288}\special{pa 518 -315}\special{pa 517 -342}%
+\special{pa 507 -369}\special{pa 491 -394}\special{pa 490 -396}\special{pa 486 -400}%
+\special{fp}%
+\special{pa -575 -255}\special{pa -580 -245}\special{pa -580 -245}\special{pa -582 -240}%
+\special{pa -588 -214}\special{pa -587 -183}\special{pa -577 -152}\special{pa -557 -122}%
+\special{pa -528 -94}\special{pa -492 -67}\special{pa -447 -42}\special{pa -396 -20}%
+\special{pa -338 -0}\special{pa -275 16}\special{pa -207 28}\special{pa -136 37}%
+\special{pa -63 43}\special{pa 10 44}\special{pa 84 42}\special{pa 157 35}%
+\special{pa 226 25}\special{pa 293 12}\special{pa 355 -6}\special{pa 411 -26}%
+\special{pa 460 -49}\special{pa 503 -74}\special{pa 537 -102}\special{pa 563 -131}%
+\special{pa 580 -161}\special{pa 588 -192}\special{pa 587 -223}\special{pa 578 -250}%
+\special{pa 577 -253}\special{pa 575 -256}%
+\special{fp}%
+\special{pa -623 -87}\special{pa -625 -81}\special{pa -625 -81}\special{pa -624 -68}%
+\special{pa -623 -48}\special{pa -612 -15}\special{pa -591 16}\special{pa -561 47}%
+\special{pa -522 75}\special{pa -475 102}\special{pa -420 125}\special{pa -359 146}%
+\special{pa -292 163}\special{pa -220 177}\special{pa -145 186}\special{pa -67 192}%
+\special{pa 11 193}\special{pa 89 191}\special{pa 166 184}\special{pa 240 173}%
+\special{pa 311 159}\special{pa 376 140}\special{pa 436 119}\special{pa 489 95}%
+\special{pa 534 68}\special{pa 570 39}\special{pa 598 8}\special{pa 616 -24}%
+\special{pa 625 -57}\special{pa 624 -81}\special{pa 623 -88}%
+\special{fp}%
+\special{pa -624 81}\special{pa -623 88}\special{pa -623 90}\special{pa -612 123}%
+\special{pa -591 154}\special{pa -561 185}\special{pa -522 213}\special{pa -475 240}%
+\special{pa -420 263}\special{pa -359 284}\special{pa -292 301}\special{pa -220 314}%
+\special{pa -145 324}\special{pa -67 330}\special{pa 11 331}\special{pa 89 328}%
+\special{pa 166 322}\special{pa 240 311}\special{pa 311 296}\special{pa 376 278}%
+\special{pa 436 257}\special{pa 489 232}\special{pa 534 205}\special{pa 570 176}%
+\special{pa 598 146}\special{pa 616 114}\special{pa 623 87}\special{pa 625 81}%
+\special{pa 625 81}\special{pa 624 68}%
+\special{fp}%
+\special{pa -578 250}\special{pa -577 253}\special{pa -575 256}\special{pa -557 283}%
+\special{pa -528 312}\special{pa -492 339}\special{pa -447 364}\special{pa -396 386}%
+\special{pa -338 405}\special{pa -275 421}\special{pa -207 434}\special{pa -136 443}%
+\special{pa -63 448}\special{pa 10 450}\special{pa 84 447}\special{pa 157 441}%
+\special{pa 226 431}\special{pa 293 417}\special{pa 355 400}\special{pa 411 380}%
+\special{pa 460 357}\special{pa 503 331}\special{pa 537 304}\special{pa 563 275}%
+\special{pa 575 255}\special{pa 580 245}\special{pa 580 245}\special{pa 582 240}%
+\special{fp}%
+\special{pa -491 394}\special{pa -490 396}\special{pa -486 400}\special{pa -478 408}%
+\special{pa -465 421}\special{pa -432 445}\special{pa -394 466}\special{pa -348 486}%
+\special{pa -297 503}\special{pa -242 517}\special{pa -182 528}\special{pa -120 536}%
+\special{pa -56 541}\special{pa 9 542}\special{pa 74 540}\special{pa 138 534}%
+\special{pa 199 526}\special{pa 258 513}\special{pa 312 498}\special{pa 362 481}%
+\special{pa 405 460}\special{pa 443 438}\special{pa 473 414}\special{pa 479 407}%
+\special{pa 493 392}\special{pa 496 388}\special{pa 497 387}%
+\special{fp}%
+\special{pa -346 526}\special{pa -338 531}\special{pa -335 532}\special{pa -331 534}%
+\special{pa -317 542}\special{pa -281 558}\special{pa -240 572}\special{pa -195 583}%
+\special{pa -147 592}\special{pa -97 598}\special{pa -45 602}\special{pa 7 603}%
+\special{pa 60 601}\special{pa 111 597}\special{pa 161 590}\special{pa 208 580}%
+\special{pa 251 568}\special{pa 291 554}\special{pa 327 537}\special{pa 331 534}%
+\special{pa 355 520}%
+\special{fp}%
+\special{pa -362 515}\special{pa -356 519}\special{pa -349 525}%
+\special{fp}%
+\special{pa -180 603}\special{pa -168 607}\special{pa -164 608}\special{pa -139 614}%
+\special{pa -136 615}\special{pa -135 615}\special{pa -103 621}\special{pa -96 622}%
+\special{pa -68 626}\special{pa -62 626}\special{pa -48 627}\special{pa -32 628}%
+\special{pa -24 629}\special{pa 5 629}\special{pa 33 628}\special{pa 42 628}%
+\special{pa 48 627}\special{pa 71 625}\special{pa 78 625}\special{pa 107 620}%
+\special{pa 112 620}\special{pa 113 620}\special{pa 121 618}\special{pa 146 613}%
+\special{pa 146 613}\special{pa 164 608}\special{pa 176 604}\special{pa 190 599}%
+\special{fp}%
+\special{pa 0 -572}\special{pa -19 -556}\special{pa -38 -538}\special{pa -57 -518}%
+\special{pa -76 -496}\special{pa -94 -472}\special{pa -112 -447}\special{pa -130 -419}%
+\special{pa -147 -390}\special{pa -163 -359}\special{pa -179 -327}\special{pa -194 -293}%
+\special{pa -208 -259}\special{pa -222 -223}\special{pa -235 -186}\special{pa -246 -149}%
+\special{pa -257 -111}\special{pa -267 -73}\special{pa -275 -34}\special{pa -283 5}%
+\special{pa -289 43}\special{pa -295 82}\special{pa -299 120}\special{pa -302 158}%
+\special{pa -304 195}\special{pa -304 231}\special{pa -304 267}\special{pa -302 301}%
+\special{pa -299 334}\special{pa -295 366}\special{pa -289 397}\special{pa -283 426}%
+\special{pa -275 453}\special{pa -267 478}\special{pa -257 502}\special{pa -246 523}%
+\special{pa -235 543}\special{pa -222 560}\special{pa -208 575}\special{pa -194 588}%
+\special{pa -179 599}\special{pa -163 607}\special{pa -147 612}\special{pa -147 613}%
+\special{pa -134 615}%
+\special{fp}%
+\special{pa 0 -572}\special{pa -1 -554}\special{pa -2 -534}\special{pa -2 -512}%
+\special{pa -3 -488}\special{pa -4 -462}\special{pa -5 -434}\special{pa -6 -405}%
+\special{pa -6 -374}\special{pa -7 -341}\special{pa -8 -307}\special{pa -8 -272}%
+\special{pa -9 -236}\special{pa -10 -199}\special{pa -10 -161}\special{pa -11 -122}%
+\special{pa -11 -83}\special{pa -12 -44}\special{pa -12 -5}\special{pa -12 35}%
+\special{pa -13 74}\special{pa -13 114}\special{pa -13 152}\special{pa -13 190}%
+\special{pa -13 228}\special{pa -13 264}\special{pa -13 299}\special{pa -13 334}%
+\special{pa -13 367}\special{pa -13 398}\special{pa -13 428}\special{pa -12 456}%
+\special{pa -12 482}\special{pa -12 507}\special{pa -11 529}\special{pa -11 550}%
+\special{pa -10 568}\special{pa -10 584}\special{pa -9 598}\special{pa -8 609}%
+\special{pa -8 618}\special{pa -7 624}\special{pa -6 628}\special{pa -6 630}%
+\special{fp}%
+\special{pa 0 -572}\special{pa 18 -556}\special{pa 35 -538}\special{pa 53 -517}%
+\special{pa 70 -495}\special{pa 87 -471}\special{pa 103 -445}\special{pa 120 -417}%
+\special{pa 135 -387}\special{pa 151 -356}\special{pa 165 -324}\special{pa 179 -290}%
+\special{pa 192 -255}\special{pa 205 -219}\special{pa 216 -182}\special{pa 227 -145}%
+\special{pa 237 -107}\special{pa 246 -68}\special{pa 254 -30}\special{pa 261 9}%
+\special{pa 267 48}\special{pa 272 87}\special{pa 276 125}\special{pa 279 163}%
+\special{pa 280 200}\special{pa 281 236}\special{pa 280 272}\special{pa 279 306}%
+\special{pa 276 339}\special{pa 272 371}\special{pa 267 402}\special{pa 261 430}%
+\special{pa 254 457}\special{pa 246 483}\special{pa 237 506}\special{pa 227 527}%
+\special{pa 216 547}\special{pa 205 564}\special{pa 192 579}\special{pa 179 591}%
+\special{pa 165 602}\special{pa 151 610}\special{pa 147 611}\special{pa 136 615}%
+\special{pa 135 615}\special{pa 128 616}%
+\special{fp}%
+\special{pa 0 -572}\special{pa 32 -561}\special{pa 64 -548}\special{pa 96 -533}%
+\special{pa 127 -515}\special{pa 158 -496}\special{pa 188 -475}\special{pa 217 -452}%
+\special{pa 246 -427}\special{pa 274 -400}\special{pa 300 -372}\special{pa 326 -342}%
+\special{pa 350 -311}\special{pa 372 -279}\special{pa 394 -245}\special{pa 413 -211}%
+\special{pa 431 -176}\special{pa 448 -140}\special{pa 462 -104}\special{pa 475 -67}%
+\special{pa 486 -30}\special{pa 495 8}\special{pa 502 45}\special{pa 507 82}%
+\special{pa 510 118}\special{pa 511 155}\special{pa 510 190}\special{pa 507 225}%
+\special{pa 502 259}\special{pa 495 292}\special{pa 486 324}\special{pa 475 354}%
+\special{pa 462 383}\special{pa 448 411}\special{pa 431 437}\special{pa 413 461}%
+\special{pa 394 484}\special{pa 372 504}\special{pa 355 518}\special{pa 350 523}%
+\special{pa 333 534}\special{pa 327 538}\special{pa 326 539}\special{pa 302 552}%
+\special{fp}%
+\special{pa 0 -572}\special{pa 39 -568}\special{pa 78 -563}\special{pa 117 -555}%
+\special{pa 155 -545}\special{pa 193 -532}\special{pa 230 -518}\special{pa 266 -502}%
+\special{pa 300 -483}\special{pa 334 -463}\special{pa 367 -441}\special{pa 397 -417}%
+\special{pa 427 -391}\special{pa 455 -364}\special{pa 480 -336}\special{pa 505 -306}%
+\special{pa 527 -275}\special{pa 546 -243}\special{pa 564 -210}\special{pa 580 -176}%
+\special{pa 593 -141}\special{pa 604 -106}\special{pa 613 -70}\special{pa 619 -35}%
+\special{pa 622 1}\special{pa 624 37}\special{pa 622 73}\special{pa 621 86}%
+\special{pa 619 109}\special{pa 615 128}\special{pa 613 144}\special{pa 606 171}%
+\special{pa 604 178}\special{pa 604 178}\special{pa 601 187}\special{pa 593 212}%
+\special{pa 592 216}\special{pa 582 240}\special{pa 580 245}\special{pa 574 256}%
+\special{fp}%
+\special{pa 0 -572}\special{pa 37 -576}\special{pa 74 -578}\special{pa 111 -578}%
+\special{pa 148 -576}\special{pa 183 -571}\special{pa 219 -564}\special{pa 253 -555}%
+\special{pa 286 -544}\special{pa 318 -530}\special{pa 349 -515}\special{pa 378 -497}%
+\special{pa 406 -477}\special{pa 412 -473}\special{pa 433 -456}\special{pa 446 -443}%
+\special{pa 457 -433}\special{pa 457 -433}\special{pa 480 -408}\special{pa 480 -408}%
+\special{pa 488 -398}\special{pa 501 -381}\special{pa 508 -371}%
+\special{fp}%
+\special{pa 0 -572}\special{pa 27 -583}\special{pa 54 -592}\special{pa 80 -598}%
+\special{pa 106 -602}\special{pa 132 -604}\special{pa 157 -603}\special{pa 182 -600}%
+\special{pa 206 -595}\special{pa 213 -592}\special{pa 229 -587}\special{pa 240 -582}%
+\special{fp}%
+\special{pa 0 -572}\special{pa 10 -587}\special{pa 21 -599}\special{pa 31 -610}%
+\special{pa 41 -617}\special{pa 51 -623}\special{pa 60 -626}\special{pa 62 -626}%
+\special{pa 69 -626}%
+\special{fp}%
+\special{pa 0 -572}\special{pa -9 -587}\special{pa -17 -600}\special{pa -26 -610}%
+\special{pa -34 -618}\special{pa -43 -624}\special{pa -51 -627}\special{pa -58 -627}%
+\special{fp}%
+\special{pa 0 -572}\special{pa -26 -583}\special{pa -51 -593}\special{pa -76 -599}%
+\special{pa -101 -604}\special{pa -126 -606}\special{pa -150 -606}\special{pa -174 -603}%
+\special{pa -188 -600}\special{pa -196 -598}\special{pa -205 -595}\special{pa -218 -591}%
+\special{pa -221 -590}%
+\special{fp}%
+\special{pa 0 -572}\special{pa -37 -577}\special{pa -73 -580}\special{pa -109 -580}%
+\special{pa -145 -578}\special{pa -181 -574}\special{pa -215 -568}\special{pa -249 -560}%
+\special{pa -281 -549}\special{pa -313 -536}\special{pa -343 -521}\special{pa -372 -504}%
+\special{pa -400 -485}\special{pa -412 -475}\special{pa -426 -464}\special{pa -429 -461}%
+\special{pa -448 -443}\special{pa -450 -441}\special{pa -466 -423}\special{pa -473 -416}%
+\special{pa -473 -415}\special{pa -480 -407}%
+\special{fp}%
+\special{pa 0 -572}\special{pa -39 -569}\special{pa -79 -564}\special{pa -117 -557}%
+\special{pa -156 -547}\special{pa -194 -536}\special{pa -231 -522}\special{pa -267 -506}%
+\special{pa -302 -488}\special{pa -336 -469}\special{pa -368 -447}\special{pa -400 -424}%
+\special{pa -429 -399}\special{pa -457 -372}\special{pa -483 -344}\special{pa -507 -315}%
+\special{pa -529 -284}\special{pa -549 -252}\special{pa -567 -220}\special{pa -583 -186}%
+\special{pa -596 -152}\special{pa -607 -117}\special{pa -616 -81}\special{pa -622 -46}%
+\special{pa -626 -10}\special{pa -627 26}\special{pa -626 42}\special{pa -626 62}%
+\special{pa -623 85}\special{pa -622 98}\special{pa -618 119}\special{pa -616 130}%
+\special{pa -616 133}\special{pa -609 160}\special{pa -607 168}\special{pa -607 169}%
+\special{pa -605 175}\special{pa -596 202}\special{pa -591 215}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 100 -622}\special{pa 92 -623}\special{fp}\special{pa 59 -626}\special{pa 51 -627}\special{fp}%
+\special{pa 19 -629}\special{pa 11 -629}\special{fp}\special{pa -22 -629}\special{pa -30 -628}\special{fp}%
+\special{pa -63 -626}\special{pa -71 -625}\special{fp}\special{pa -103 -621}\special{pa -111 -620}\special{fp}%
+\special{pn 8}%
+\special{pn 8}%
+\special{pa 350 -524}\special{pa 343 -528}\special{fp}\special{pa 316 -542}\special{pa 309 -546}\special{fp}%
+\special{pa 281 -557}\special{pa 274 -560}\special{fp}\special{pa 245 -570}\special{pa 237 -572}\special{fp}%
+\special{pa 208 -580}\special{pa 200 -582}\special{fp}\special{pa 170 -588}\special{pa 163 -589}\special{fp}%
+\special{pa 133 -594}\special{pa 125 -595}\special{fp}\special{pa 95 -599}\special{pa 87 -599}\special{fp}%
+\special{pa 56 -601}\special{pa 48 -602}\special{fp}\special{pa 18 -603}\special{pa 10 -603}\special{fp}%
+\special{pa -20 -603}\special{pa -28 -603}\special{fp}\special{pa -59 -601}\special{pa -67 -601}\special{fp}%
+\special{pa -97 -598}\special{pa -105 -597}\special{fp}\special{pa -135 -593}\special{pa -143 -592}\special{fp}%
+\special{pa -173 -587}\special{pa -181 -586}\special{fp}\special{pa -210 -579}\special{pa -218 -577}\special{fp}%
+\special{pa -247 -569}\special{pa -255 -567}\special{fp}\special{pa -283 -557}\special{pa -291 -554}\special{fp}%
+\special{pa -318 -541}\special{pa -326 -538}\special{fp}\special{pa -352 -522}\special{pa -359 -518}\special{fp}%
+\special{pn 8}%
+\special{pn 8}%
+\special{pa 489 -397}\special{pa 483 -402}\special{fp}\special{pa 461 -424}\special{pa 455 -429}\special{fp}%
+\special{pa 429 -446}\special{pa 423 -450}\special{fp}\special{pa 396 -465}\special{pa 388 -469}\special{fp}%
+\special{pa 360 -481}\special{pa 353 -484}\special{fp}\special{pa 324 -494}\special{pa 316 -497}\special{fp}%
+\special{pa 287 -506}\special{pa 279 -508}\special{fp}\special{pa 249 -515}\special{pa 241 -517}\special{fp}%
+\special{pa 211 -523}\special{pa 203 -524}\special{fp}\special{pa 173 -529}\special{pa 165 -531}\special{fp}%
+\special{pa 134 -535}\special{pa 126 -535}\special{fp}\special{pa 96 -538}\special{pa 88 -539}\special{fp}%
+\special{pa 57 -541}\special{pa 49 -541}\special{fp}\special{pa 18 -542}\special{pa 10 -542}\special{fp}%
+\special{pa -21 -542}\special{pa -29 -542}\special{fp}\special{pa -59 -541}\special{pa -67 -540}\special{fp}%
+\special{pa -98 -538}\special{pa -106 -537}\special{fp}\special{pa -137 -534}\special{pa -145 -534}\special{fp}%
+\special{pa -175 -529}\special{pa -183 -528}\special{fp}\special{pa -213 -523}\special{pa -221 -521}\special{fp}%
+\special{pa -251 -515}\special{pa -259 -513}\special{fp}\special{pa -289 -505}\special{pa -296 -503}\special{fp}%
+\special{pa -326 -493}\special{pa -333 -491}\special{fp}\special{pa -362 -480}\special{pa -370 -477}\special{fp}%
+\special{pa -398 -464}\special{pa -405 -460}\special{fp}\special{pa -431 -445}\special{pa -438 -441}\special{fp}%
+\special{pa -463 -422}\special{pa -469 -417}\special{fp}\special{pa -490 -395}\special{pa -495 -389}\special{fp}%
+\special{pn 8}%
+\special{pn 8}%
+\special{pa 577 -253}\special{pa 572 -259}\special{fp}\special{pa 555 -285}\special{pa 549 -291}\special{fp}%
+\special{pa 527 -313}\special{pa 521 -318}\special{fp}\special{pa 495 -336}\special{pa 489 -341}\special{fp}%
+\special{pa 461 -356}\special{pa 454 -359}\special{fp}\special{pa 426 -373}\special{pa 419 -376}\special{fp}%
+\special{pa 390 -388}\special{pa 382 -390}\special{fp}\special{pa 352 -400}\special{pa 345 -403}\special{fp}%
+\special{pa 315 -411}\special{pa 307 -413}\special{fp}\special{pa 276 -421}\special{pa 269 -423}\special{fp}%
+\special{pa 238 -428}\special{pa 230 -430}\special{fp}\special{pa 199 -435}\special{pa 191 -436}\special{fp}%
+\special{pa 160 -440}\special{pa 152 -441}\special{fp}\special{pa 121 -444}\special{pa 113 -445}\special{fp}%
+\special{pa 82 -447}\special{pa 74 -447}\special{fp}\special{pa 43 -449}\special{pa 35 -449}\special{fp}%
+\special{pa 3 -450}\special{pa -5 -450}\special{fp}\special{pa -36 -449}\special{pa -44 -449}\special{fp}%
+\special{pa -75 -448}\special{pa -83 -447}\special{fp}\special{pa -114 -445}\special{pa -122 -444}\special{fp}%
+\special{pa -153 -441}\special{pa -161 -440}\special{fp}\special{pa -192 -436}\special{pa -200 -435}\special{fp}%
+\special{pa -231 -430}\special{pa -239 -428}\special{fp}\special{pa -270 -422}\special{pa -277 -420}\special{fp}%
+\special{pa -308 -413}\special{pa -316 -411}\special{fp}\special{pa -346 -403}\special{pa -353 -400}\special{fp}%
+\special{pa -383 -390}\special{pa -390 -387}\special{fp}\special{pa -420 -376}\special{pa -427 -372}\special{fp}%
+\special{pa -455 -359}\special{pa -462 -356}\special{fp}\special{pa -489 -340}\special{pa -496 -335}\special{fp}%
+\special{pa -521 -317}\special{pa -527 -312}\special{fp}\special{pa -550 -290}\special{pa -555 -284}\special{fp}%
+\special{pa -572 -258}\special{pa -577 -252}\special{fp}\special{pn 8}%
+\special{pn 8}%
+\special{pa 625 -85}\special{pa 622 -92}\special{fp}\special{pa 612 -122}\special{pa 609 -129}\special{fp}%
+\special{pa 591 -154}\special{pa 585 -161}\special{fp}\special{pa 563 -183}\special{pa 557 -188}\special{fp}%
+\special{pa 532 -206}\special{pa 525 -211}\special{fp}\special{pa 498 -227}\special{pa 491 -230}\special{fp}%
+\special{pa 463 -244}\special{pa 456 -248}\special{fp}\special{pa 427 -260}\special{pa 420 -263}\special{fp}%
+\special{pa 390 -273}\special{pa 383 -276}\special{fp}\special{pa 353 -285}\special{pa 345 -287}\special{fp}%
+\special{pa 315 -295}\special{pa 307 -297}\special{fp}\special{pa 277 -304}\special{pa 269 -305}\special{fp}%
+\special{pa 238 -311}\special{pa 230 -312}\special{fp}\special{pa 199 -317}\special{pa 191 -318}\special{fp}%
+\special{pa 160 -322}\special{pa 152 -323}\special{fp}\special{pa 121 -326}\special{pa 113 -326}\special{fp}%
+\special{pa 82 -329}\special{pa 74 -329}\special{fp}\special{pa 43 -330}\special{pa 35 -330}\special{fp}%
+\special{pa 3 -331}\special{pa -5 -331}\special{fp}\special{pa -36 -330}\special{pa -44 -330}\special{fp}%
+\special{pa -75 -329}\special{pa -83 -329}\special{fp}\special{pa -114 -326}\special{pa -122 -326}\special{fp}%
+\special{pa -153 -323}\special{pa -161 -322}\special{fp}\special{pa -192 -318}\special{pa -200 -317}\special{fp}%
+\special{pa -231 -312}\special{pa -239 -311}\special{fp}\special{pa -270 -305}\special{pa -278 -303}\special{fp}%
+\special{pa -308 -297}\special{pa -316 -295}\special{fp}\special{pa -346 -287}\special{pa -354 -285}\special{fp}%
+\special{pa -384 -276}\special{pa -391 -273}\special{fp}\special{pa -421 -262}\special{pa -428 -260}\special{fp}%
+\special{pa -457 -247}\special{pa -464 -244}\special{fp}\special{pa -492 -230}\special{pa -499 -226}\special{fp}%
+\special{pa -526 -210}\special{pa -533 -206}\special{fp}\special{pa -558 -187}\special{pa -564 -181}\special{fp}%
+\special{pa -586 -159}\special{pa -591 -153}\special{fp}\special{pa -608 -128}\special{pa -612 -120}\special{fp}%
+\special{pa -622 -91}\special{pa -624 -83}\special{fp}\special{pn 8}%
+\special{pn 8}%
+\special{pa 625 72}\special{pa 623 64}\special{fp}\special{pa 618 33}\special{pa 616 25}\special{fp}%
+\special{pa 601 -2}\special{pa 596 -9}\special{fp}\special{pa 575 -32}\special{pa 570 -38}\special{fp}%
+\special{pa 546 -58}\special{pa 539 -63}\special{fp}\special{pa 513 -80}\special{pa 506 -84}\special{fp}%
+\special{pa 479 -100}\special{pa 471 -103}\special{fp}\special{pa 442 -116}\special{pa 435 -119}\special{fp}%
+\special{pa 406 -130}\special{pa 398 -133}\special{fp}\special{pa 368 -143}\special{pa 360 -145}\special{fp}%
+\special{pa 330 -153}\special{pa 322 -155}\special{fp}\special{pa 292 -163}\special{pa 284 -165}\special{fp}%
+\special{pa 253 -170}\special{pa 245 -172}\special{fp}\special{pa 214 -177}\special{pa 206 -178}\special{fp}%
+\special{pa 175 -182}\special{pa 167 -183}\special{fp}\special{pa 135 -187}\special{pa 127 -187}\special{fp}%
+\special{pa 96 -190}\special{pa 88 -190}\special{fp}\special{pa 56 -192}\special{pa 49 -192}\special{fp}%
+\special{pa 17 -193}\special{pa 9 -193}\special{fp}\special{pa -23 -193}\special{pa -31 -193}\special{fp}%
+\special{pa -62 -192}\special{pa -70 -191}\special{fp}\special{pa -102 -189}\special{pa -110 -189}\special{fp}%
+\special{pa -141 -186}\special{pa -149 -185}\special{fp}\special{pa -180 -182}\special{pa -188 -181}\special{fp}%
+\special{pa -219 -176}\special{pa -227 -175}\special{fp}\special{pa -258 -169}\special{pa -266 -168}\special{fp}%
+\special{pa -297 -162}\special{pa -305 -160}\special{fp}\special{pa -335 -152}\special{pa -343 -150}\special{fp}%
+\special{pa -374 -141}\special{pa -381 -139}\special{fp}\special{pa -411 -128}\special{pa -418 -125}\special{fp}%
+\special{pa -448 -114}\special{pa -455 -110}\special{fp}\special{pa -484 -97}\special{pa -491 -94}\special{fp}%
+\special{pa -518 -77}\special{pa -524 -73}\special{fp}\special{pa -550 -55}\special{pa -556 -50}\special{fp}%
+\special{pa -579 -28}\special{pa -585 -23}\special{fp}\special{pa -604 2}\special{pa -608 9}\special{fp}%
+\special{pa -620 38}\special{pa -622 46}\special{fp}\special{pa -623 77}\special{pa -624 85}\special{fp}%
+\special{pn 8}%
+\special{pn 8}%
+\special{pa 581 244}\special{pa 582 236}\special{fp}\special{pa 588 205}\special{pa 588 197}\special{fp}%
+\special{pa 582 167}\special{pa 579 159}\special{fp}\special{pa 564 132}\special{pa 559 126}\special{fp}%
+\special{pa 538 103}\special{pa 532 97}\special{fp}\special{pa 507 78}\special{pa 501 73}\special{fp}%
+\special{pa 474 57}\special{pa 467 53}\special{fp}\special{pa 439 39}\special{pa 432 35}\special{fp}%
+\special{pa 403 23}\special{pa 396 20}\special{fp}\special{pa 366 10}\special{pa 359 7}\special{fp}%
+\special{pa 329 -2}\special{pa 321 -4}\special{fp}\special{pa 291 -12}\special{pa 283 -14}\special{fp}%
+\special{pa 252 -20}\special{pa 244 -21}\special{fp}\special{pa 214 -27}\special{pa 206 -29}\special{fp}%
+\special{pa 175 -33}\special{pa 167 -34}\special{fp}\special{pa 136 -37}\special{pa 128 -38}\special{fp}%
+\special{pa 96 -40}\special{pa 89 -41}\special{fp}\special{pa 57 -43}\special{pa 49 -43}\special{fp}%
+\special{pa 18 -44}\special{pa 10 -44}\special{fp}\special{pa -21 -44}\special{pa -29 -44}\special{fp}%
+\special{pa -61 -43}\special{pa -69 -42}\special{fp}\special{pa -100 -40}\special{pa -108 -40}\special{fp}%
+\special{pa -139 -37}\special{pa -147 -36}\special{fp}\special{pa -178 -32}\special{pa -186 -31}\special{fp}%
+\special{pa -217 -27}\special{pa -225 -25}\special{fp}\special{pa -256 -19}\special{pa -263 -18}\special{fp}%
+\special{pa -294 -11}\special{pa -302 -9}\special{fp}\special{pa -332 -1}\special{pa -340 2}\special{fp}%
+\special{pa -369 11}\special{pa -377 14}\special{fp}\special{pa -406 24}\special{pa -414 27}\special{fp}%
+\special{pa -442 40}\special{pa -449 44}\special{fp}\special{pa -477 59}\special{pa -484 63}\special{fp}%
+\special{pa -510 80}\special{pa -516 85}\special{fp}\special{pa -540 105}\special{pa -546 111}\special{fp}%
+\special{pa -566 135}\special{pa -570 142}\special{fp}\special{pa -583 170}\special{pa -585 178}\special{fp}%
+\special{pa -588 208}\special{pa -587 216}\special{fp}\special{pa -579 246}\special{pa -577 254}\special{fp}%
+\special{pn 8}%
+\special{pn 8}%
+\special{pa 495 390}\special{pa 498 383}\special{fp}\special{pa 513 355}\special{pa 515 347}\special{fp}%
+\special{pa 517 316}\special{pa 516 308}\special{fp}\special{pa 506 279}\special{pa 502 272}\special{fp}%
+\special{pa 483 247}\special{pa 477 241}\special{fp}\special{pa 453 220}\special{pa 447 216}\special{fp}%
+\special{pa 421 198}\special{pa 414 194}\special{fp}\special{pa 386 180}\special{pa 378 177}\special{fp}%
+\special{pa 349 164}\special{pa 342 161}\special{fp}\special{pa 312 151}\special{pa 304 149}\special{fp}%
+\special{pa 274 141}\special{pa 266 139}\special{fp}\special{pa 235 131}\special{pa 227 130}\special{fp}%
+\special{pa 196 124}\special{pa 188 123}\special{fp}\special{pa 157 118}\special{pa 149 117}\special{fp}%
+\special{pa 118 113}\special{pa 110 113}\special{fp}\special{pa 78 110}\special{pa 70 110}\special{fp}%
+\special{pa 39 108}\special{pa 31 108}\special{fp}\special{pa -1 108}\special{pa -9 108}\special{fp}%
+\special{pa -40 109}\special{pa -48 109}\special{fp}\special{pa -80 110}\special{pa -88 111}\special{fp}%
+\special{pa -119 114}\special{pa -127 114}\special{fp}\special{pa -159 118}\special{pa -167 119}\special{fp}%
+\special{pa -198 124}\special{pa -206 125}\special{fp}\special{pa -237 132}\special{pa -244 134}\special{fp}%
+\special{pa -275 141}\special{pa -283 143}\special{fp}\special{pa -313 152}\special{pa -321 154}\special{fp}%
+\special{pa -351 165}\special{pa -358 168}\special{fp}\special{pa -387 181}\special{pa -394 184}\special{fp}%
+\special{pa -422 199}\special{pa -429 203}\special{fp}\special{pa -455 221}\special{pa -461 226}\special{fp}%
+\special{pa -484 248}\special{pa -489 254}\special{fp}\special{pa -507 280}\special{pa -510 287}\special{fp}%
+\special{pa -517 318}\special{pa -518 326}\special{fp}\special{pa -512 356}\special{pa -509 364}\special{fp}%
+\special{pa -493 391}\special{pa -489 398}\special{fp}\special{pn 8}%
+\special{pn 8}%
+\special{pa 352 523}\special{pa 358 518}\special{fp}\special{pa 383 498}\special{pa 388 492}\special{fp}%
+\special{pa 407 466}\special{pa 410 459}\special{fp}\special{pa 417 428}\special{pa 417 420}\special{fp}%
+\special{pa 407 391}\special{pa 404 383}\special{fp}\special{pa 383 359}\special{pa 378 354}\special{fp}%
+\special{pa 353 334}\special{pa 346 330}\special{fp}\special{pa 318 315}\special{pa 311 311}\special{fp}%
+\special{pa 282 299}\special{pa 274 296}\special{fp}\special{pa 244 286}\special{pa 236 284}\special{fp}%
+\special{pa 206 276}\special{pa 198 274}\special{fp}\special{pa 167 268}\special{pa 159 266}\special{fp}%
+\special{pa 127 262}\special{pa 119 261}\special{fp}\special{pa 88 257}\special{pa 80 256}\special{fp}%
+\special{pa 48 254}\special{pa 40 254}\special{fp}\special{pa 9 253}\special{pa 1 253}\special{fp}%
+\special{pa -31 254}\special{pa -39 254}\special{fp}\special{pa -71 256}\special{pa -79 256}\special{fp}%
+\special{pa -110 259}\special{pa -118 260}\special{fp}\special{pa -150 265}\special{pa -158 266}\special{fp}%
+\special{pa -189 272}\special{pa -197 274}\special{fp}\special{pa -227 282}\special{pa -235 284}\special{fp}%
+\special{pa -265 293}\special{pa -273 296}\special{fp}\special{pa -302 308}\special{pa -310 311}\special{fp}%
+\special{pa -338 326}\special{pa -345 330}\special{fp}\special{pa -371 348}\special{pa -377 353}\special{fp}%
+\special{pa -399 376}\special{pa -403 383}\special{fp}\special{pa -416 412}\special{pa -417 420}\special{fp}%
+\special{pa -413 451}\special{pa -411 458}\special{fp}\special{pa -394 485}\special{pa -389 491}\special{fp}%
+\special{pa -365 512}\special{pa -359 517}\special{fp}\special{pn 8}%
+\special{pn 8}%
+\special{pa 187 601}\special{pa 194 598}\special{fp}\special{pa 223 586}\special{pa 230 582}\special{fp}%
+\special{pa 257 565}\special{pa 263 560}\special{fp}\special{pa 283 537}\special{pa 287 530}\special{fp}%
+\special{pa 292 499}\special{pa 291 491}\special{fp}\special{pa 275 465}\special{pa 269 459}\special{fp}%
+\special{pa 245 439}\special{pa 238 435}\special{fp}\special{pa 210 421}\special{pa 203 418}\special{fp}%
+\special{pa 173 407}\special{pa 165 405}\special{fp}\special{pa 135 398}\special{pa 127 396}\special{fp}%
+\special{pa 96 391}\special{pa 88 390}\special{fp}\special{pa 57 386}\special{pa 49 386}\special{fp}%
+\special{pa 18 384}\special{pa 10 384}\special{fp}\special{pa -21 384}\special{pa -29 384}\special{fp}%
+\special{pa -61 386}\special{pa -69 387}\special{fp}\special{pa -100 391}\special{pa -108 392}\special{fp}%
+\special{pa -138 398}\special{pa -146 400}\special{fp}\special{pa -176 408}\special{pa -184 411}\special{fp}%
+\special{pa -213 422}\special{pa -220 426}\special{fp}\special{pa -248 441}\special{pa -254 446}\special{fp}%
+\special{pa -277 467}\special{pa -282 474}\special{fp}\special{pa -292 503}\special{pa -292 511}\special{fp}%
+\special{pa -281 540}\special{pa -277 546}\special{fp}\special{pa -254 567}\special{pa -247 572}\special{fp}%
+\special{pa -220 587}\special{pa -213 591}\special{fp}\special{pa -183 602}\special{pa -176 604}\special{fp}%
+\special{pn 8}%
+\special{pn 8}%
+\special{pa -129 588}\special{pa -122 592}\special{fp}\special{pa -94 604}\special{pa -87 607}\special{fp}%
+\special{pa -56 614}\special{pa -49 615}\special{fp}\special{pa -18 618}\special{pa -10 618}\special{fp}%
+\special{pa 21 618}\special{pa 29 617}\special{fp}\special{pa 60 613}\special{pa 68 612}\special{fp}%
+\special{pa 97 604}\special{pa 105 601}\special{fp}\special{pa 132 586}\special{pa 138 580}\special{fp}%
+\special{pa 151 554}\special{pa 150 546}\special{fp}\special{pa 129 523}\special{pa 123 518}\special{fp}%
+\special{pa 94 506}\special{pa 87 503}\special{fp}\special{pa 56 497}\special{pa 49 495}\special{fp}%
+\special{pa 18 493}\special{pa 10 492}\special{fp}\special{pa -21 493}\special{pa -29 493}\special{fp}%
+\special{pa -60 497}\special{pa -68 499}\special{fp}\special{pa -97 507}\special{pa -105 510}\special{fp}%
+\special{pa -132 524}\special{pa -138 530}\special{fp}\special{pa -151 557}\special{pa -150 565}\special{fp}%
+\special{pa -129 588}\special{pa -123 592}\special{fp}\special{pa -94 604}\special{pa -87 607}\special{fp}%
+\special{pa -56 614}\special{pa -49 615}\special{fp}\special{pa -18 618}\special{pa -10 618}\special{fp}%
+\special{pa 21 618}\special{pa 29 617}\special{fp}\special{pa 60 613}\special{pa 68 612}\special{fp}%
+\special{pa 97 604}\special{pa 105 601}\special{fp}\special{pa 132 586}\special{pa 138 580}\special{fp}%
+\special{pa 151 554}\special{pa 150 546}\special{fp}\special{pa 129 523}\special{pa 123 518}\special{fp}%
+\special{pa 94 506}\special{pa 87 503}\special{fp}\special{pa 56 497}\special{pa 49 495}\special{fp}%
+\special{pa 18 493}\special{pa 10 492}\special{fp}\special{pa -21 493}\special{pa -29 493}\special{fp}%
+\special{pa -60 497}\special{pa -68 499}\special{fp}\special{pa -97 507}\special{pa -105 510}\special{fp}%
+\special{pa -132 524}\special{pa -138 530}\special{fp}\special{pa -151 557}\special{pa -150 565}\special{fp}%
+\special{pa -128 587}\special{pa -123 593}\special{fp}\special{pn 8}%
+\special{pn 8}%
+\special{pa -138 615}\special{pa -130 615}\special{fp}\special{pa -102 616}\special{pa -94 615}\special{fp}%
+\special{pa -67 608}\special{pa -59 606}\special{fp}\special{pa -34 594}\special{pa -27 590}\special{fp}%
+\special{pa -3 574}\special{pa 3 570}\special{fp}\special{pn 8}%
+\special{pn 8}%
+\special{pa -6 634}\special{pa -5 626}\special{fp}\special{pa 0 576}\special{pa 0 568}\special{fp}%
+\special{pn 8}%
+\special{pn 8}%
+\special{pa 132 616}\special{pa 124 617}\special{fp}\special{pa 97 618}\special{pa 89 617}\special{fp}%
+\special{pa 63 610}\special{pa 56 607}\special{fp}\special{pa 32 595}\special{pa 25 590}\special{fp}%
+\special{pa 3 574}\special{pa -3 570}\special{fp}\special{pn 8}%
+\special{pn 8}%
+\special{pa 304 552}\special{pa 296 555}\special{fp}\special{pa 268 568}\special{pa 261 570}\special{fp}%
+\special{pa 232 579}\special{pa 224 581}\special{fp}\special{pa 194 588}\special{pa 186 589}\special{fp}%
+\special{pa 156 592}\special{pa 148 592}\special{fp}\special{pa 117 592}\special{pa 109 591}\special{fp}%
+\special{pa 79 589}\special{pa 71 588}\special{fp}\special{pa 41 582}\special{pa 33 581}\special{fp}%
+\special{pa 4 573}\special{pa -4 571}\special{fp}\special{pn 8}%
+\special{pn 8}%
+\special{pa 576 253}\special{pa 573 260}\special{fp}\special{pa 559 287}\special{pa 555 294}\special{fp}%
+\special{pa 538 320}\special{pa 534 327}\special{fp}\special{pa 516 352}\special{pa 511 358}\special{fp}%
+\special{pa 491 381}\special{pa 486 387}\special{fp}\special{pa 464 409}\special{pa 459 415}\special{fp}%
+\special{pa 436 435}\special{pa 430 440}\special{fp}\special{pa 405 459}\special{pa 399 463}\special{fp}%
+\special{pa 373 480}\special{pa 366 485}\special{fp}\special{pa 340 500}\special{pa 333 503}\special{fp}%
+\special{pa 305 517}\special{pa 298 520}\special{fp}\special{pa 270 532}\special{pa 262 535}\special{fp}%
+\special{pa 233 544}\special{pa 225 547}\special{fp}\special{pa 196 555}\special{pa 188 557}\special{fp}%
+\special{pa 158 563}\special{pa 150 564}\special{fp}\special{pa 120 568}\special{pa 112 569}\special{fp}%
+\special{pa 81 572}\special{pa 73 572}\special{fp}\special{pa 43 573}\special{pa 35 573}\special{fp}%
+\special{pa 4 572}\special{pa -4 572}\special{fp}\special{pn 8}%
+\special{pn 8}%
+\special{pa 506 -375}\special{pa 510 -368}\special{fp}\special{pa 527 -341}\special{pa 531 -334}\special{fp}%
+\special{pa 545 -307}\special{pa 549 -299}\special{fp}\special{pa 561 -270}\special{pa 564 -263}\special{fp}%
+\special{pa 573 -233}\special{pa 576 -225}\special{fp}\special{pa 583 -195}\special{pa 584 -187}\special{fp}%
+\special{pa 589 -156}\special{pa 590 -148}\special{fp}\special{pa 593 -116}\special{pa 593 -108}\special{fp}%
+\special{pa 593 -77}\special{pa 593 -69}\special{fp}\special{pa 591 -38}\special{pa 590 -30}\special{fp}%
+\special{pa 586 2}\special{pa 585 9}\special{fp}\special{pa 579 40}\special{pa 577 48}\special{fp}%
+\special{pa 569 78}\special{pa 566 86}\special{fp}\special{pa 556 116}\special{pa 554 123}\special{fp}%
+\special{pa 542 153}\special{pa 538 160}\special{fp}\special{pa 525 188}\special{pa 521 195}\special{fp}%
+\special{pa 506 223}\special{pa 502 230}\special{fp}\special{pa 485 256}\special{pa 481 263}\special{fp}%
+\special{pa 463 289}\special{pa 458 295}\special{fp}\special{pa 438 320}\special{pa 433 326}\special{fp}%
+\special{pa 412 350}\special{pa 407 355}\special{fp}\special{pa 385 378}\special{pa 379 383}\special{fp}%
+\special{pa 356 404}\special{pa 350 410}\special{fp}\special{pa 325 430}\special{pa 319 434}\special{fp}%
+\special{pa 294 453}\special{pa 287 458}\special{fp}\special{pa 261 475}\special{pa 254 479}\special{fp}%
+\special{pa 227 495}\special{pa 220 498}\special{fp}\special{pa 192 513}\special{pa 184 516}\special{fp}%
+\special{pa 156 529}\special{pa 148 532}\special{fp}\special{pa 119 543}\special{pa 111 545}\special{fp}%
+\special{pa 81 554}\special{pa 73 557}\special{fp}\special{pa 43 564}\special{pa 35 566}\special{fp}%
+\special{pa 4 571}\special{pa -4 573}\special{fp}\special{pn 8}%
+\special{pn 8}%
+\special{pa 236 -584}\special{pa 243 -580}\special{fp}\special{pa 271 -565}\special{pa 277 -561}\special{fp}%
+\special{pa 302 -542}\special{pa 308 -536}\special{fp}\special{pa 329 -514}\special{pa 335 -508}\special{fp}%
+\special{pa 353 -482}\special{pa 357 -476}\special{fp}\special{pa 373 -449}\special{pa 377 -441}\special{fp}%
+\special{pa 389 -413}\special{pa 392 -405}\special{fp}\special{pa 402 -376}\special{pa 404 -368}\special{fp}%
+\special{pa 412 -338}\special{pa 414 -330}\special{fp}\special{pa 420 -299}\special{pa 421 -291}\special{fp}%
+\special{pa 424 -260}\special{pa 425 -252}\special{fp}\special{pa 427 -221}\special{pa 427 -213}\special{fp}%
+\special{pa 427 -182}\special{pa 427 -174}\special{fp}\special{pa 426 -143}\special{pa 425 -135}\special{fp}%
+\special{pa 422 -104}\special{pa 421 -96}\special{fp}\special{pa 417 -65}\special{pa 416 -57}\special{fp}%
+\special{pa 410 -26}\special{pa 409 -18}\special{fp}\special{pa 402 12}\special{pa 400 20}\special{fp}%
+\special{pa 392 50}\special{pa 390 58}\special{fp}\special{pa 380 88}\special{pa 378 95}\special{fp}%
+\special{pa 368 125}\special{pa 365 132}\special{fp}\special{pa 353 161}\special{pa 350 169}\special{fp}%
+\special{pa 338 197}\special{pa 334 205}\special{fp}\special{pa 320 233}\special{pa 317 240}\special{fp}%
+\special{pa 302 267}\special{pa 298 274}\special{fp}\special{pa 282 301}\special{pa 278 308}\special{fp}%
+\special{pa 261 334}\special{pa 256 341}\special{fp}\special{pa 238 366}\special{pa 234 373}\special{fp}%
+\special{pa 214 397}\special{pa 209 404}\special{fp}\special{pa 189 427}\special{pa 183 433}\special{fp}%
+\special{pa 162 456}\special{pa 156 461}\special{fp}\special{pa 133 483}\special{pa 127 488}\special{fp}%
+\special{pa 103 508}\special{pa 97 513}\special{fp}\special{pa 72 531}\special{pa 65 535}\special{fp}%
+\special{pa 38 552}\special{pa 31 556}\special{fp}\special{pa 4 570}\special{pa -4 574}\special{fp}%
+\special{pn 8}%
+\special{pn 8}%
+\special{pa 68 -628}\special{pa 75 -623}\special{fp}\special{pa 100 -608}\special{pa 106 -602}\special{fp}%
+\special{pa 120 -574}\special{pa 124 -567}\special{fp}\special{pa 134 -538}\special{pa 136 -530}\special{fp}%
+\special{pa 143 -500}\special{pa 145 -492}\special{fp}\special{pa 150 -462}\special{pa 151 -454}\special{fp}%
+\special{pa 155 -423}\special{pa 156 -415}\special{fp}\special{pa 159 -384}\special{pa 159 -376}\special{fp}%
+\special{pa 161 -345}\special{pa 162 -337}\special{fp}\special{pa 163 -306}\special{pa 163 -298}\special{fp}%
+\special{pa 163 -267}\special{pa 163 -259}\special{fp}\special{pa 163 -228}\special{pa 163 -220}\special{fp}%
+\special{pa 162 -189}\special{pa 162 -181}\special{fp}\special{pa 161 -150}\special{pa 161 -142}\special{fp}%
+\special{pa 159 -111}\special{pa 158 -103}\special{fp}\special{pa 156 -72}\special{pa 155 -64}\special{fp}%
+\special{pa 153 -33}\special{pa 152 -25}\special{fp}\special{pa 149 6}\special{pa 148 13}\special{fp}%
+\special{pa 144 44}\special{pa 143 52}\special{fp}\special{pa 139 83}\special{pa 138 91}\special{fp}%
+\special{pa 134 122}\special{pa 132 130}\special{fp}\special{pa 127 160}\special{pa 126 168}\special{fp}%
+\special{pa 121 199}\special{pa 119 206}\special{fp}\special{pa 113 237}\special{pa 111 245}\special{fp}%
+\special{pa 105 275}\special{pa 103 283}\special{fp}\special{pa 96 313}\special{pa 94 321}\special{fp}%
+\special{pa 86 351}\special{pa 84 359}\special{fp}\special{pa 76 388}\special{pa 73 396}\special{fp}%
+\special{pa 64 426}\special{pa 62 433}\special{fp}\special{pa 51 463}\special{pa 49 470}\special{fp}%
+\special{pa 37 499}\special{pa 34 506}\special{fp}\special{pa 21 534}\special{pa 17 541}\special{fp}%
+\special{pa 2 568}\special{pa -2 575}\special{fp}\special{pn 8}%
+\special{pn 8}%
+\special{pa -55 -630}\special{pa -61 -625}\special{fp}\special{pa -86 -607}\special{pa -91 -601}\special{fp}%
+\special{pa -103 -571}\special{pa -106 -564}\special{fp}\special{pa -114 -533}\special{pa -116 -525}\special{fp}%
+\special{pa -122 -493}\special{pa -123 -486}\special{fp}\special{pa -128 -454}\special{pa -129 -446}\special{fp}%
+\special{pa -132 -414}\special{pa -132 -406}\special{fp}\special{pa -135 -374}\special{pa -135 -366}\special{fp}%
+\special{pa -137 -334}\special{pa -137 -326}\special{fp}\special{pa -138 -294}\special{pa -138 -286}\special{fp}%
+\special{pa -138 -254}\special{pa -138 -246}\special{fp}\special{pa -137 -215}\special{pa -137 -207}\special{fp}%
+\special{pa -136 -175}\special{pa -136 -167}\special{fp}\special{pa -135 -135}\special{pa -134 -127}\special{fp}%
+\special{pa -133 -95}\special{pa -132 -87}\special{fp}\special{pa -130 -55}\special{pa -130 -47}\special{fp}%
+\special{pa -127 -15}\special{pa -126 -7}\special{fp}\special{pa -123 25}\special{pa -123 33}\special{fp}%
+\special{pa -119 64}\special{pa -118 72}\special{fp}\special{pa -114 104}\special{pa -113 112}\special{fp}%
+\special{pa -109 144}\special{pa -108 152}\special{fp}\special{pa -104 183}\special{pa -102 191}\special{fp}%
+\special{pa -97 223}\special{pa -96 231}\special{fp}\special{pa -90 262}\special{pa -89 270}\special{fp}%
+\special{pa -83 301}\special{pa -81 309}\special{fp}\special{pa -75 341}\special{pa -73 348}\special{fp}%
+\special{pa -66 379}\special{pa -64 387}\special{fp}\special{pa -56 418}\special{pa -54 426}\special{fp}%
+\special{pa -45 457}\special{pa -43 464}\special{fp}\special{pa -33 495}\special{pa -30 502}\special{fp}%
+\special{pa -19 532}\special{pa -15 539}\special{fp}\special{pa -2 568}\special{pa 2 575}\special{fp}%
+\special{pn 8}%
+\special{pn 8}%
+\special{pa -217 -591}\special{pa -224 -588}\special{fp}\special{pa -252 -574}\special{pa -259 -569}\special{fp}%
+\special{pa -284 -551}\special{pa -290 -545}\special{fp}\special{pa -311 -523}\special{pa -316 -517}\special{fp}%
+\special{pa -335 -492}\special{pa -339 -485}\special{fp}\special{pa -354 -458}\special{pa -358 -451}\special{fp}%
+\special{pa -370 -422}\special{pa -373 -415}\special{fp}\special{pa -383 -385}\special{pa -385 -377}\special{fp}%
+\special{pa -393 -347}\special{pa -394 -340}\special{fp}\special{pa -400 -309}\special{pa -401 -301}\special{fp}%
+\special{pa -405 -270}\special{pa -405 -262}\special{fp}\special{pa -407 -231}\special{pa -407 -223}\special{fp}%
+\special{pa -407 -192}\special{pa -407 -184}\special{fp}\special{pa -406 -153}\special{pa -406 -145}\special{fp}%
+\special{pa -403 -114}\special{pa -402 -106}\special{fp}\special{pa -398 -75}\special{pa -397 -67}\special{fp}%
+\special{pa -392 -37}\special{pa -390 -29}\special{fp}\special{pa -384 2}\special{pa -382 10}\special{fp}%
+\special{pa -375 40}\special{pa -373 47}\special{fp}\special{pa -364 77}\special{pa -362 85}\special{fp}%
+\special{pa -352 115}\special{pa -349 122}\special{fp}\special{pa -338 151}\special{pa -336 159}\special{fp}%
+\special{pa -324 187}\special{pa -321 195}\special{fp}\special{pa -308 223}\special{pa -304 230}\special{fp}%
+\special{pa -290 258}\special{pa -286 265}\special{fp}\special{pa -271 292}\special{pa -267 299}\special{fp}%
+\special{pa -251 326}\special{pa -247 333}\special{fp}\special{pa -230 359}\special{pa -225 365}\special{fp}%
+\special{pa -207 390}\special{pa -202 397}\special{fp}\special{pa -183 421}\special{pa -177 427}\special{fp}%
+\special{pa -157 450}\special{pa -151 456}\special{fp}\special{pa -130 478}\special{pa -124 484}\special{fp}%
+\special{pa -101 504}\special{pa -94 510}\special{fp}\special{pa -70 529}\special{pa -63 533}\special{fp}%
+\special{pa -38 551}\special{pa -31 555}\special{fp}\special{pa -3 570}\special{pa 3 574}\special{fp}%
+\special{pn 8}%
+\special{pn 8}%
+\special{pa -477 -410}\special{pa -482 -404}\special{fp}\special{pa -501 -379}\special{pa -505 -372}\special{fp}%
+\special{pa -521 -345}\special{pa -525 -338}\special{fp}\special{pa -539 -311}\special{pa -543 -303}\special{fp}%
+\special{pa -554 -274}\special{pa -557 -267}\special{fp}\special{pa -566 -237}\special{pa -568 -229}\special{fp}%
+\special{pa -575 -199}\special{pa -576 -191}\special{fp}\special{pa -580 -160}\special{pa -581 -152}\special{fp}%
+\special{pa -583 -121}\special{pa -584 -113}\special{fp}\special{pa -584 -82}\special{pa -583 -74}\special{fp}%
+\special{pa -581 -43}\special{pa -580 -35}\special{fp}\special{pa -576 -4}\special{pa -575 4}\special{fp}%
+\special{pa -569 35}\special{pa -567 42}\special{fp}\special{pa -559 72}\special{pa -556 80}\special{fp}%
+\special{pa -546 110}\special{pa -544 117}\special{fp}\special{pa -532 146}\special{pa -529 153}\special{fp}%
+\special{pa -515 182}\special{pa -512 189}\special{fp}\special{pa -497 216}\special{pa -493 223}\special{fp}%
+\special{pa -477 250}\special{pa -472 256}\special{fp}\special{pa -455 282}\special{pa -450 289}\special{fp}%
+\special{pa -431 313}\special{pa -426 319}\special{fp}\special{pa -405 343}\special{pa -400 349}\special{fp}%
+\special{pa -378 371}\special{pa -373 377}\special{fp}\special{pa -350 398}\special{pa -344 404}\special{fp}%
+\special{pa -320 424}\special{pa -314 429}\special{fp}\special{pa -289 448}\special{pa -283 452}\special{fp}%
+\special{pa -257 470}\special{pa -250 474}\special{fp}\special{pa -224 490}\special{pa -217 494}\special{fp}%
+\special{pa -189 509}\special{pa -182 513}\special{fp}\special{pa -154 526}\special{pa -146 529}\special{fp}%
+\special{pa -117 540}\special{pa -110 543}\special{fp}\special{pa -80 553}\special{pa -72 555}\special{fp}%
+\special{pa -42 563}\special{pa -35 565}\special{fp}\special{pa -4 571}\special{pa 4 573}\special{fp}%
+\special{pn 8}%
+\special{pn 8}%
+\special{pa -592 211}\special{pa -589 219}\special{fp}\special{pa -577 247}\special{pa -574 254}\special{fp}%
+\special{pa -559 281}\special{pa -555 288}\special{fp}\special{pa -539 314}\special{pa -534 321}\special{fp}%
+\special{pa -516 346}\special{pa -511 352}\special{fp}\special{pa -491 375}\special{pa -486 381}\special{fp}%
+\special{pa -464 403}\special{pa -459 409}\special{fp}\special{pa -436 429}\special{pa -430 434}\special{fp}%
+\special{pa -405 453}\special{pa -399 458}\special{fp}\special{pa -373 475}\special{pa -366 479}\special{fp}%
+\special{pa -340 495}\special{pa -333 499}\special{fp}\special{pa -305 512}\special{pa -298 516}\special{fp}%
+\special{pa -270 528}\special{pa -262 530}\special{fp}\special{pa -233 541}\special{pa -226 543}\special{fp}%
+\special{pa -196 551}\special{pa -188 553}\special{fp}\special{pa -158 560}\special{pa -150 561}\special{fp}%
+\special{pa -120 566}\special{pa -112 567}\special{fp}\special{pa -81 570}\special{pa -73 571}\special{fp}%
+\special{pa -43 572}\special{pa -35 572}\special{fp}\special{pa -4 572}\special{pa 4 572}\special{fp}%
+\special{pn 8}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/wirepara4.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/wirepara4.tex
new file mode 100644
index 0000000000..82c5a44ea6
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/wirepara4.tex
@@ -0,0 +1,320 @@
+%%% /Users/Hannya/ketcindy/ketwork/template.tex 2016-8-22 22:0
+%%% template.sce 2016-8-22 22:0
+{\unitlength=8mm%
+\begin{picture}%
+( 7.17000, 6.03000)( -3.65000, -2.44000)%
+\special{pn 8}%
+%
+\settowidth{\Width}{$x$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-3.2384,-1.6002){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(3.3633,-2.3750){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+%
+\settowidth{\Width}{$z$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$z$}\settodepth{\Depth}{$z$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(0.0000,2.6107){\hspace*{\Width}\raisebox{\Height}{$z$}}%
+%
+%
+\special{pa -363 515}\special{pa -348 525}\special{pa -302 553}\special{pa -286 561}%
+\special{pa -243 581}\special{pa -207 595}\special{pa -189 601}\special{pa -137 615}%
+\special{pa -87 624}\special{pa -70 626}\special{pa -39 629}\special{pa 9 630}\special{pa 57 627}%
+\special{pa 70 626}\special{pa 105 621}\special{pa 156 610}\special{pa 208 594}\special{pa 264 572}%
+\special{pa 286 561}\special{pa 324 540}\special{pa 348 525}\special{pa 386 498}\special{pa 400 487}%
+\special{pa 444 447}\special{pa 451 439}\special{pa 482 405}\special{pa 515 362}\special{pa 545 316}%
+\special{pa 569 270}\special{pa 589 222}\special{pa 605 174}\special{pa 613 143}\special{pa 617 125}%
+\special{pa 625 75}\special{pa 629 25}\special{pa 630 9}\special{pa 629 -25}\special{pa 625 -75}%
+\special{pa 617 -125}\special{pa 605 -174}\special{pa 589 -222}\special{pa 579 -248}%
+\special{pa 569 -270}\special{pa 545 -316}\special{pa 524 -350}\special{pa 516 -361}%
+\special{pa 483 -405}\special{pa 460 -430}\special{pa 444 -447}\special{pa 400 -487}%
+\special{pa 348 -525}\special{pa 332 -535}\special{pa 286 -561}\special{pa 272 -568}%
+\special{pa 216 -592}\special{pa 208 -595}\special{pa 163 -609}\special{pa 112 -620}%
+\special{pa 71 -626}\special{pa 63 -627}\special{pa 15 -630}\special{pa -33 -629}%
+\special{pa -71 -626}\special{pa -81 -625}\special{pa -130 -616}\special{pa -182 -603}%
+\special{pa -207 -595}\special{pa -236 -584}\special{pa -287 -561}\special{pa -294 -557}%
+\special{pa -348 -525}\special{pa -355 -521}\special{pa -399 -487}\special{pa -419 -471}%
+\special{pa -444 -447}\special{pa -483 -405}\special{pa -516 -361}\special{pa -545 -316}%
+\special{pa -569 -270}\special{pa -589 -222}\special{pa -595 -206}\special{pa -605 -174}%
+\special{pa -617 -125}\special{pa -625 -77}\special{pa -629 -25}\special{pa -629 25}%
+\special{pa -627 59}\special{pa -625 75}\special{pa -617 125}\special{pa -605 174}%
+\special{pa -601 189}\special{pa -589 222}\special{pa -569 270}\special{pa -553 302}%
+\special{pa -545 316}\special{pa -516 361}\special{pa -492 393}\special{pa -483 405}%
+\special{pa -444 447}\special{pa -427 463}\special{pa -399 487}\special{pa -363 515}%
+\special{fp}%
+\special{pa 0 -508}\special{pa -30 -492}\special{pa -61 -474}\special{pa -91 -455}%
+\special{pa -120 -433}\special{pa -149 -410}\special{pa -178 -385}\special{pa -206 -358}%
+\special{pa -233 -330}\special{pa -259 -301}\special{pa -284 -271}\special{pa -308 -239}%
+\special{pa -331 -207}\special{pa -352 -174}\special{pa -372 -140}\special{pa -391 -106}%
+\special{pa -408 -71}\special{pa -423 -36}\special{pa -437 0}\special{pa -449 35}%
+\special{pa -460 70}\special{pa -468 105}\special{pa -475 139}\special{pa -479 173}%
+\special{pa -482 206}\special{pa -483 239}\special{pa -482 270}\special{pa -479 301}%
+\special{pa -475 330}\special{pa -468 358}\special{pa -460 384}\special{pa -449 409}%
+\special{pa -437 432}\special{pa -423 454}\special{pa -408 474}\special{pa -391 492}%
+\special{pa -372 508}\special{pa -352 522}\special{pa -331 534}\special{pa -308 544}%
+\special{fp}%
+\special{pa -116 -436}\special{pa -103 -428}\special{pa -88 -421}\special{pa -72 -415}%
+\special{pa -55 -411}\special{pa -37 -407}\special{pa -18 -405}\special{pa 1 -404}%
+\special{pa 20 -405}\special{pa 38 -407}\special{pa 56 -411}\special{pa 73 -416}\special{pa 89 -422}%
+\special{pa 104 -429}\special{pa 117 -437}\special{pa 128 -446}\special{pa 137 -456}%
+\special{pa 144 -466}\special{pa 148 -477}\special{pa 150 -488}\special{pa 150 -500}%
+\special{pa 148 -511}\special{pa 143 -521}\special{pa 136 -532}\special{pa 127 -542}%
+\special{pa 116 -551}\special{pa 103 -559}\special{pa 88 -566}\special{pa 72 -572}%
+\special{pa 55 -576}\special{pa 37 -580}\special{pa 18 -582}\special{pa -1 -583}\special{pa -20 -582}%
+\special{pa -38 -580}\special{pa -56 -576}\special{pa -73 -571}\special{pa -89 -565}%
+\special{pa -104 -558}\special{pa -117 -550}\special{pa -128 -541}\special{pa -137 -531}%
+\special{pa -144 -521}\special{pa -148 -510}\special{pa -150 -499}\special{pa -150 -487}%
+\special{pa -148 -476}\special{pa -143 -466}\special{pa -136 -455}\special{pa -127 -445}%
+\special{pa -116 -436}%
+\special{fp}%
+\special{pa -225 -339}\special{pa -199 -323}\special{pa -171 -310}\special{pa -140 -298}%
+\special{pa -106 -289}\special{pa -71 -282}\special{pa -35 -278}\special{pa 2 -277}%
+\special{pa 38 -279}\special{pa 74 -283}\special{pa 109 -290}\special{pa 142 -299}%
+\special{pa 173 -311}\special{pa 202 -325}\special{pa 227 -341}\special{pa 248 -358}%
+\special{pa 266 -377}\special{pa 279 -398}\special{pa 288 -419}\special{pa 292 -440}%
+\special{pa 292 -462}\special{pa 287 -483}\special{pa 278 -504}\special{pa 264 -525}%
+\special{pa 246 -544}\special{pa 225 -561}\special{pa 199 -577}\special{pa 171 -591}%
+\special{pa 140 -602}\special{pa 106 -611}\special{pa 71 -618}\special{pa 35 -622}%
+\special{pa -2 -623}\special{pa -38 -621}\special{pa -74 -617}\special{pa -109 -610}%
+\special{pa -142 -601}\special{pa -173 -589}\special{pa -202 -575}\special{pa -227 -560}%
+\special{pa -248 -542}\special{pa -266 -523}\special{pa -279 -503}\special{pa -288 -482}%
+\special{pa -292 -460}\special{pa -292 -438}\special{pa -287 -417}\special{pa -278 -396}%
+\special{pa -264 -376}\special{pa -246 -357}\special{pa -225 -339}%
+\special{fp}%
+\special{pa -320 -222}\special{pa -284 -200}\special{pa -244 -180}\special{pa -199 -164}%
+\special{pa -152 -151}\special{pa -102 -141}\special{pa -50 -135}\special{pa 2 -134}%
+\special{pa 55 -136}\special{pa 106 -142}\special{pa 156 -152}\special{pa 203 -165}%
+\special{pa 247 -182}\special{pa 288 -202}\special{pa 323 -224}\special{pa 354 -249}%
+\special{pa 379 -277}\special{pa 398 -305}\special{pa 411 -336}\special{pa 417 -366}%
+\special{pa 417 -397}\special{pa 410 -428}\special{pa 397 -458}\special{pa 377 -487}%
+\special{pa 351 -514}\special{pa 320 -539}\special{pa 284 -561}\special{pa 244 -581}%
+\special{pa 199 -597}\special{pa 152 -610}\special{pa 102 -620}\special{pa 50 -625}%
+\special{pa -2 -627}\special{pa -55 -625}\special{pa -106 -619}\special{pa -156 -609}%
+\special{pa -203 -596}\special{pa -247 -579}\special{pa -288 -559}\special{pa -323 -537}%
+\special{pa -354 -512}\special{pa -379 -484}\special{pa -398 -455}\special{pa -411 -425}%
+\special{pa -417 -395}\special{pa -417 -364}\special{pa -410 -333}\special{pa -397 -303}%
+\special{pa -377 -274}\special{pa -351 -247}\special{pa -320 -222}%
+\special{fp}%
+\special{pa -398 -92}\special{pa -353 -64}\special{pa -302 -40}\special{pa -247 -20}%
+\special{pa -188 -3}\special{pa -126 8}\special{pa -62 15}\special{pa 3 17}\special{pa 68 15}%
+\special{pa 132 7}\special{pa 193 -5}\special{pa 252 -21}\special{pa 307 -42}\special{pa 357 -67}%
+\special{pa 401 -95}\special{pa 439 -126}\special{pa 470 -160}\special{pa 494 -196}%
+\special{pa 510 -233}\special{pa 518 -271}\special{pa 517 -310}\special{pa 509 -348}%
+\special{pa 492 -385}\special{pa 468 -421}\special{pa 436 -454}\special{pa 398 -485}%
+\special{pa 353 -513}\special{pa 327 -526}%
+\special{fp}%
+\special{pa -344 -517}\special{pa -357 -511}\special{pa -401 -483}\special{pa -439 -451}%
+\special{pa -470 -418}\special{pa -494 -382}\special{pa -510 -344}\special{pa -518 -306}%
+\special{pa -517 -268}\special{pa -509 -230}\special{pa -492 -193}\special{pa -468 -157}%
+\special{pa -436 -123}\special{pa -398 -92}%
+\special{fp}%
+\special{pa -452 43}\special{pa -401 75}\special{pa -344 102}\special{pa -281 126}%
+\special{pa -214 144}\special{pa -143 157}\special{pa -71 165}\special{pa 3 168}\special{pa 77 165}%
+\special{pa 150 156}\special{pa 220 143}\special{pa 287 124}\special{pa 349 100}\special{pa 406 72}%
+\special{pa 456 40}\special{pa 499 5}\special{pa 534 -34}\special{pa 561 -75}\special{pa 579 -117}%
+\special{pa 588 -160}\special{pa 588 -204}\special{pa 578 -247}\special{pa 559 -290}%
+\special{pa 532 -330}\special{pa 518 -345}%
+\special{fp}%
+\special{pa -509 -355}\special{pa -534 -327}\special{pa -561 -286}\special{pa -579 -244}%
+\special{pa -588 -200}\special{pa -588 -157}\special{pa -578 -113}\special{pa -559 -71}%
+\special{pa -532 -30}\special{pa -496 8}\special{pa -452 43}%
+\special{fp}%
+\special{pa -480 176}\special{pa -426 209}\special{pa -365 239}\special{pa -298 263}%
+\special{pa -227 283}\special{pa -152 297}\special{pa -75 305}\special{pa 3 308}\special{pa 82 305}%
+\special{pa 159 296}\special{pa 233 281}\special{pa 304 261}\special{pa 370 236}\special{pa 431 207}%
+\special{pa 484 173}\special{pa 530 135}\special{pa 567 94}\special{pa 596 51}\special{pa 615 6}%
+\special{pa 624 -40}\special{pa 624 -86}\special{pa 615 -124}%
+\special{fp}%
+\special{pa -615 -129}\special{pa -624 -82}\special{pa -624 -36}\special{pa -614 10}%
+\special{pa -594 55}\special{pa -564 98}\special{pa -526 138}\special{pa -480 176}%
+\special{fp}%
+\special{pa -480 298}\special{pa -426 332}\special{pa -365 361}\special{pa -298 386}%
+\special{pa -227 405}\special{pa -152 420}\special{pa -75 428}\special{pa 3 431}\special{pa 82 427}%
+\special{pa 159 419}\special{pa 233 404}\special{pa 304 384}\special{pa 370 359}\special{pa 431 329}%
+\special{pa 484 295}\special{pa 530 257}\special{pa 567 217}\special{pa 596 173}%
+\special{fp}%
+\special{pa 609 141}\special{pa 615 129}\special{pa 624 84}%
+\special{fp}%
+\special{pa -624 75}\special{pa -624 86}\special{pa -614 132}\special{pa -594 177}%
+\special{pa -564 220}\special{pa -526 261}\special{pa -480 298}%
+\special{fp}%
+\special{pa -452 403}\special{pa -401 435}\special{pa -344 463}\special{pa -281 486}%
+\special{pa -214 504}\special{pa -143 518}\special{pa -71 526}\special{pa 3 528}\special{pa 77 525}%
+\special{pa 150 517}\special{pa 220 503}\special{pa 287 484}\special{pa 349 461}\special{pa 406 433}%
+\special{pa 456 401}\special{pa 499 365}\special{pa 534 327}\special{pa 561 286}\special{pa 579 244}%
+\special{pa 584 221}%
+\special{fp}%
+\special{pa -578 247}\special{pa -559 290}\special{pa -532 330}\special{pa -496 368}%
+\special{pa -452 403}%
+\special{fp}%
+\special{pa -398 485}\special{pa -353 513}\special{pa -302 537}\special{pa -247 558}%
+\special{pa -188 574}\special{pa -126 586}\special{pa -62 593}\special{pa 3 595}\special{pa 68 592}%
+\special{pa 132 585}\special{pa 193 573}\special{pa 252 556}\special{pa 307 535}\special{pa 357 511}%
+\special{pa 401 483}\special{pa 439 451}\special{pa 470 418}\special{pa 480 403}%
+\special{fp}%
+\special{pa -492 385}\special{pa -468 421}\special{pa -436 454}\special{pa -398 485}%
+\special{fp}%
+\special{pa -320 539}\special{pa -284 561}\special{pa -244 581}\special{pa -199 597}%
+\special{pa -152 610}\special{pa -102 620}\special{pa -50 625}\special{pa 2 627}\special{pa 55 625}%
+\special{pa 106 619}\special{pa 156 609}\special{pa 203 596}\special{pa 247 579}\special{pa 288 559}%
+\special{pa 323 537}\special{pa 344 520}%
+\special{fp}%
+\special{pa -351 514}\special{pa -320 539}%
+\special{fp}%
+\special{pa -35 622}\special{pa 2 623}%
+\special{fp}%
+\special{pa 0 -508}\special{pa -15 -486}\special{pa -30 -461}\special{pa -45 -435}%
+\special{pa -60 -407}\special{pa -74 -377}\special{pa -88 -346}\special{pa -102 -313}%
+\special{pa -116 -280}\special{pa -129 -245}\special{pa -141 -209}\special{pa -153 -172}%
+\special{pa -164 -135}\special{pa -175 -97}\special{pa -185 -59}\special{pa -194 -20}%
+\special{pa -203 18}\special{pa -210 57}\special{pa -217 95}\special{pa -223 133}%
+\special{pa -228 170}\special{pa -232 207}\special{pa -236 243}\special{pa -238 278}%
+\special{pa -240 311}\special{pa -240 344}\special{pa -240 375}\special{pa -238 405}%
+\special{pa -236 433}\special{pa -232 460}\special{pa -228 484}\special{pa -223 507}%
+\special{pa -217 528}\special{pa -210 546}\special{pa -203 563}\special{pa -194 577}%
+\special{pa -185 589}\special{pa -175 599}\special{pa -164 606}\special{pa -153 611}%
+\special{pa -141 613}\special{pa -137 613}%
+\special{fp}%
+\special{pa 0 -508}\special{pa 4 -484}\special{pa 7 -458}\special{pa 11 -430}\special{pa 14 -400}%
+\special{pa 18 -369}\special{pa 21 -336}\special{pa 25 -302}\special{pa 28 -267}\special{pa 31 -231}%
+\special{pa 34 -193}\special{pa 37 -155}\special{pa 40 -117}\special{pa 42 -78}\special{pa 45 -39}%
+\special{pa 47 1}\special{pa 49 40}\special{pa 51 80}\special{pa 53 119}\special{pa 54 157}%
+\special{pa 55 195}\special{pa 56 232}\special{pa 57 269}\special{pa 58 304}\special{pa 58 338}%
+\special{pa 58 370}\special{pa 58 402}\special{pa 58 431}\special{pa 57 459}\special{pa 56 485}%
+\special{pa 55 509}\special{pa 54 532}\special{pa 53 552}\special{pa 51 570}\special{pa 49 585}%
+\special{pa 47 598}\special{pa 45 609}\special{pa 42 618}\special{pa 37 628}%
+\special{fp}%
+\special{pa 0 -508}\special{pa 22 -488}\special{pa 43 -465}\special{pa 64 -441}\special{pa 85 -415}%
+\special{pa 106 -387}\special{pa 126 -358}\special{pa 146 -327}\special{pa 165 -295}%
+\special{pa 184 -262}\special{pa 202 -228}\special{pa 219 -193}\special{pa 235 -157}%
+\special{pa 250 -120}\special{pa 264 -84}\special{pa 277 -46}\special{pa 290 -9}\special{pa 301 29}%
+\special{pa 310 66}\special{pa 319 103}\special{pa 326 140}\special{pa 332 176}\special{pa 337 211}%
+\special{pa 340 246}\special{pa 342 280}\special{pa 343 312}\special{pa 342 343}\special{pa 340 373}%
+\special{pa 337 402}\special{pa 332 429}\special{pa 326 454}\special{pa 319 477}\special{pa 310 499}%
+\special{pa 301 518}\special{pa 290 536}\special{pa 277 551}\special{pa 264 564}\special{pa 250 575}%
+\special{pa 235 584}\special{pa 219 591}\special{pa 217 591}%
+\special{fp}%
+\special{pa 0 -508}\special{pa 34 -496}\special{pa 69 -481}\special{pa 103 -465}\special{pa 137 -447}%
+\special{pa 170 -427}\special{pa 202 -406}\special{pa 234 -382}\special{pa 265 -358}%
+\special{pa 294 -332}\special{pa 323 -304}\special{pa 350 -275}\special{pa 376 -246}%
+\special{pa 400 -215}\special{pa 423 -184}\special{pa 444 -151}\special{pa 464 -119}%
+\special{pa 481 -85}\special{pa 497 -52}\special{pa 511 -18}\special{pa 522 16}\special{pa 532 50}%
+\special{pa 540 84}\special{pa 545 117}\special{pa 548 150}\special{pa 549 182}\special{pa 548 214}%
+\special{pa 545 244}\special{pa 540 274}\special{pa 532 303}\special{pa 522 330}\special{pa 511 357}%
+\special{pa 497 381}\special{pa 481 405}\special{pa 464 426}\special{pa 444 446}\special{pa 423 464}%
+\special{pa 400 481}%
+\special{fp}%
+\special{pa 0 -508}\special{pa 40 -507}\special{pa 79 -503}\special{pa 118 -497}\special{pa 157 -490}%
+\special{pa 195 -480}\special{pa 232 -469}\special{pa 268 -455}\special{pa 303 -440}%
+\special{pa 337 -423}\special{pa 370 -405}\special{pa 401 -385}\special{pa 431 -363}%
+\special{pa 459 -340}\special{pa 485 -316}\special{pa 509 -290}\special{pa 532 -263}%
+\special{pa 552 -236}\special{pa 570 -207}\special{pa 585 -177}\special{pa 599 -147}%
+\special{pa 610 -116}\special{pa 619 -85}\special{pa 625 -53}\special{pa 628 -21}%
+\special{pa 630 11}\special{pa 628 42}\special{pa 625 74}%
+\special{fp}%
+\special{pa 0 -508}\special{pa 36 -518}\special{pa 71 -525}\special{pa 106 -530}\special{pa 141 -533}%
+\special{pa 175 -534}\special{pa 208 -533}\special{pa 241 -530}\special{pa 273 -524}%
+\special{pa 303 -517}\special{pa 333 -507}\special{pa 361 -496}\special{pa 387 -482}%
+\special{pa 412 -467}\special{pa 436 -450}\special{pa 458 -431}\special{pa 478 -410}%
+\special{pa 496 -388}\special{pa 512 -364}\special{pa 521 -349}%
+\special{fp}%
+\special{pa 0 -508}\special{pa 23 -526}\special{pa 47 -542}\special{pa 70 -556}\special{pa 93 -567}%
+\special{pa 115 -576}\special{pa 137 -583}\special{pa 159 -588}\special{pa 179 -590}%
+\special{pa 200 -590}\special{pa 219 -588}\special{pa 237 -583}\special{pa 255 -576}%
+\special{pa 259 -573}%
+\special{fp}%
+\special{pa 0 -508}\special{pa 6 -530}\special{pa 12 -550}\special{pa 18 -568}\special{pa 23 -584}%
+\special{pa 29 -597}\special{pa 34 -608}\special{pa 40 -617}\special{pa 45 -623}\special{pa 55 -627}%
+\special{pa 60 -626}%
+\special{fp}%
+\special{pa 0 -508}\special{pa -13 -529}\special{pa -26 -548}\special{pa -39 -565}%
+\special{pa -51 -580}\special{pa -64 -592}\special{pa -76 -602}\special{pa -88 -610}%
+\special{pa -100 -615}\special{pa -111 -618}\special{pa -121 -618}%
+\special{fp}%
+\special{pa 0 -508}\special{pa -29 -523}\special{pa -58 -536}\special{pa -86 -547}%
+\special{pa -114 -556}\special{pa -142 -562}\special{pa -169 -566}\special{pa -196 -568}%
+\special{pa -221 -568}\special{pa -246 -566}\special{pa -270 -561}\special{pa -293 -554}%
+\special{pa -315 -545}\special{pa -335 -533}\special{pa -354 -520}\special{pa -354 -520}%
+\special{fp}%
+\special{pa 0 -508}\special{pa -38 -514}\special{pa -76 -517}\special{pa -114 -518}%
+\special{pa -151 -517}\special{pa -188 -514}\special{pa -223 -509}\special{pa -258 -502}%
+\special{pa -292 -493}\special{pa -325 -482}\special{pa -357 -470}\special{pa -387 -455}%
+\special{pa -416 -438}\special{pa -443 -420}\special{pa -468 -400}\special{pa -491 -379}%
+\special{pa -513 -356}\special{pa -532 -332}\special{pa -549 -306}\special{pa -564 -279}%
+\special{pa -577 -251}\special{pa -588 -223}%
+\special{fp}%
+\special{pa 0 -508}\special{pa -39 -502}\special{pa -77 -494}\special{pa -115 -485}%
+\special{pa -153 -473}\special{pa -190 -459}\special{pa -227 -444}\special{pa -262 -426}%
+\special{pa -297 -407}\special{pa -330 -387}\special{pa -362 -365}\special{pa -392 -341}%
+\special{pa -421 -317}\special{pa -449 -291}\special{pa -474 -263}\special{pa -498 -235}%
+\special{pa -520 -206}\special{pa -539 -176}\special{pa -557 -145}\special{pa -572 -114}%
+\special{pa -586 -82}\special{pa -596 -50}\special{pa -605 -18}\special{pa -611 14}%
+\special{pa -614 47}\special{pa -616 79}\special{pa -614 111}\special{pa -611 142}%
+\special{pa -605 173}\special{pa -596 203}\special{pa -586 232}\special{pa -572 260}%
+\special{pa -557 288}\special{pa -540 313}%
+\special{fp}%
+\special{pa 1109 -548}\special{pa 565 -279}%
+\special{fp}%
+\special{pa -483 239}\special{pa -966 477}%
+\special{fp}%
+\special{pa -1010 -714}\special{pa -515 -363}%
+\special{fp}%
+\special{pa 404 285}\special{pa 1010 714}%
+\special{fp}%
+\special{pa 0 769}\special{pa 0 630}%
+\special{fp}%
+\special{pa 0 -508}\special{pa 0 -762}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 568 -281}\special{pa 561 -277}\special{fp}\special{pa 533 -264}\special{pa 526 -260}\special{fp}%
+\special{pa 498 -246}\special{pa 491 -243}\special{fp}\special{pa 463 -229}\special{pa 456 -225}\special{fp}%
+\special{pa 429 -212}\special{pa 421 -208}\special{fp}\special{pa 394 -195}\special{pa 386 -191}\special{fp}%
+\special{pa 359 -177}\special{pa 352 -174}\special{fp}\special{pa 324 -160}\special{pa 317 -156}\special{fp}%
+\special{pa 289 -143}\special{pa 282 -139}\special{fp}\special{pa 254 -125}\special{pa 247 -122}\special{fp}%
+\special{pa 219 -108}\special{pa 212 -105}\special{fp}\special{pa 184 -91}\special{pa 177 -87}\special{fp}%
+\special{pa 149 -74}\special{pa 142 -70}\special{fp}\special{pa 114 -56}\special{pa 107 -53}\special{fp}%
+\special{pa 79 -39}\special{pa 72 -36}\special{fp}\special{pa 44 -22}\special{pa 37 -18}\special{fp}%
+\special{pa 9 -5}\special{pa 2 -1}\special{fp}\special{pa -26 13}\special{pa -33 16}\special{fp}%
+\special{pa -60 30}\special{pa -68 33}\special{fp}\special{pa -95 47}\special{pa -103 51}\special{fp}%
+\special{pa -130 64}\special{pa -137 68}\special{fp}\special{pa -165 82}\special{pa -172 85}\special{fp}%
+\special{pa -200 99}\special{pa -207 102}\special{fp}\special{pa -235 116}\special{pa -242 120}\special{fp}%
+\special{pa -270 133}\special{pa -277 137}\special{fp}\special{pa -305 151}\special{pa -312 154}\special{fp}%
+\special{pa -340 168}\special{pa -347 171}\special{fp}\special{pa -375 185}\special{pa -382 189}\special{fp}%
+\special{pa -410 202}\special{pa -417 206}\special{fp}\special{pa -445 220}\special{pa -452 223}\special{fp}%
+\special{pa -480 237}\special{pa -487 241}\special{fp}\special{pn 8}%
+\special{pa -518 -366}\special{pa -511 -361}\special{fp}\special{pa -486 -343}\special{pa -480 -339}\special{fp}%
+\special{pa -454 -321}\special{pa -448 -316}\special{fp}\special{pa -423 -299}\special{pa -416 -294}\special{fp}%
+\special{pa -391 -276}\special{pa -385 -272}\special{fp}\special{pa -359 -254}\special{pa -353 -249}\special{fp}%
+\special{pa -328 -231}\special{pa -321 -227}\special{fp}\special{pa -296 -209}\special{pa -290 -204}\special{fp}%
+\special{pa -264 -187}\special{pa -258 -182}\special{fp}\special{pa -233 -164}\special{pa -226 -160}\special{fp}%
+\special{pa -201 -142}\special{pa -195 -137}\special{fp}\special{pa -169 -120}\special{pa -163 -115}\special{fp}%
+\special{pa -138 -97}\special{pa -131 -93}\special{fp}\special{pa -106 -75}\special{pa -100 -70}\special{fp}%
+\special{pa -74 -53}\special{pa -68 -48}\special{fp}\special{pa -43 -30}\special{pa -36 -26}\special{fp}%
+\special{pa -11 -8}\special{pa -5 -3}\special{fp}\special{pa 21 15}\special{pa 27 19}\special{fp}%
+\special{pa 52 37}\special{pa 59 42}\special{fp}\special{pa 84 59}\special{pa 91 64}\special{fp}%
+\special{pa 116 82}\special{pa 122 86}\special{fp}\special{pa 147 104}\special{pa 154 109}\special{fp}%
+\special{pa 179 126}\special{pa 186 131}\special{fp}\special{pa 211 149}\special{pa 217 153}\special{fp}%
+\special{pa 242 171}\special{pa 249 176}\special{fp}\special{pa 274 193}\special{pa 281 198}\special{fp}%
+\special{pa 306 216}\special{pa 312 220}\special{fp}\special{pa 337 238}\special{pa 344 243}\special{fp}%
+\special{pa 369 261}\special{pa 376 265}\special{fp}\special{pa 401 283}\special{pa 407 288}\special{fp}%
+\special{pn 8}%
+\special{pa 0 634}\special{pa 0 626}\special{fp}\special{pa 0 595}\special{pa 0 587}\special{fp}%
+\special{pa 0 555}\special{pa 0 547}\special{fp}\special{pa 0 516}\special{pa 0 508}\special{fp}%
+\special{pa 0 477}\special{pa 0 469}\special{fp}\special{pa 0 438}\special{pa 0 430}\special{fp}%
+\special{pa 0 398}\special{pa 0 390}\special{fp}\special{pa 0 359}\special{pa 0 351}\special{fp}%
+\special{pa 0 320}\special{pa 0 312}\special{fp}\special{pa 0 281}\special{pa 0 273}\special{fp}%
+\special{pa 0 241}\special{pa 0 233}\special{fp}\special{pa 0 202}\special{pa 0 194}\special{fp}%
+\special{pa 0 163}\special{pa 0 155}\special{fp}\special{pa 0 124}\special{pa 0 116}\special{fp}%
+\special{pa 0 84}\special{pa 0 76}\special{fp}\special{pa 0 45}\special{pa 0 37}\special{fp}%
+\special{pa 0 6}\special{pa 0 -2}\special{fp}\special{pa 0 -33}\special{pa 0 -41}\special{fp}%
+\special{pa 0 -73}\special{pa 0 -81}\special{fp}\special{pa 0 -112}\special{pa 0 -120}\special{fp}%
+\special{pa 0 -151}\special{pa 0 -159}\special{fp}\special{pa 0 -190}\special{pa 0 -198}\special{fp}%
+\special{pa 0 -230}\special{pa 0 -238}\special{fp}\special{pa 0 -269}\special{pa 0 -277}\special{fp}%
+\special{pa 0 -308}\special{pa 0 -316}\special{fp}\special{pa 0 -347}\special{pa 0 -355}\special{fp}%
+\special{pa 0 -387}\special{pa 0 -395}\special{fp}\special{pa 0 -426}\special{pa 0 -434}\special{fp}%
+\special{pa 0 -465}\special{pa 0 -473}\special{fp}\special{pa 0 -504}\special{pa 0 -512}\special{fp}%
+\special{pn 8}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/wirepara5.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/wirepara5.tex
new file mode 100644
index 0000000000..990f901f33
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/wirepara5.tex
@@ -0,0 +1,253 @@
+%%% /Users/Hannya/ketcindy/ketwork/template.tex 2016-8-23 7:29
+%%% template.sce 2016-8-23 7:29
+{\unitlength=8mm%
+\begin{picture}%
+( 7.17000, 6.03000)( -3.65000, -2.44000)%
+\special{pn 8}%
+%
+\special{pa 270 0}\special{pa 261 -5}\special{pa 247 -11}\special{pa 223 -21}\special{pa 178 -35}%
+\special{pa 128 -46}\special{pa 74 -53}\special{pa 18 -57}\special{pa -39 -56}\special{pa -94 -51}%
+\special{pa -147 -42}\special{pa -195 -30}\special{pa -238 -15}\special{pa -247 -11}%
+\special{pa -270 0}%
+\special{fp}%
+\special{pa -324 -38}\special{pa -317 -31}\special{pa -305 -21}\special{pa -276 -3}%
+\special{pa -247 11}\special{pa -201 28}\special{pa -154 41}\special{pa -102 50}\special{pa -46 56}%
+\special{pa 10 57}\special{pa 67 54}\special{pa 121 47}\special{pa 172 36}\special{pa 217 23}%
+\special{pa 247 11}\special{pa 256 7}\special{pa 286 -9}\special{pa 305 -21}\special{pa 320 -34}%
+\special{pa 324 -38}%
+\special{fp}%
+\special{pa -665 496}\special{pa -603 536}\special{pa -578 550}\special{pa -487 594}%
+\special{pa -391 629}\special{pa -325 648}\special{pa -291 655}\special{pa -189 674}%
+\special{pa -85 684}\special{pa 19 687}\special{pa 123 682}\special{pa 227 668}\special{pa 328 647}%
+\special{pa 426 617}\special{pa 521 579}\special{pa 603 536}\special{pa 611 531}\special{pa 695 474}%
+\special{pa 738 437}\special{pa 772 405}\special{pa 824 345}\special{pa 839 324}\special{pa 880 257}%
+\special{pa 894 229}\special{pa 917 171}\special{pa 931 122}\special{pa 938 85}\special{pa 945 8}%
+\special{pa 945 0}%
+\special{fp}%
+\special{pa -945 0}\special{pa -941 -66}\special{pa -938 -85}\special{pa -917 -170}%
+\special{pa -880 -257}\special{pa -869 -278}\special{pa -824 -345}\special{pa -807 -366}%
+\special{pa -739 -437}\special{pa -653 -504}\special{pa -603 -536}\special{pa -566 -556}%
+\special{pa -474 -599}\special{pa -377 -633}\special{pa -324 -648}\special{pa -278 -658}%
+\special{pa -175 -676}\special{pa -71 -685}\special{pa 33 -687}\special{pa 137 -680}%
+\special{pa 240 -666}\special{pa 326 -647}\special{pa 341 -643}\special{pa 439 -612}%
+\special{pa 533 -573}\special{pa 603 -536}\special{pa 622 -524}\special{pa 706 -465}%
+\special{pa 738 -437}\special{pa 782 -395}\special{pa 824 -345}\special{pa 848 -312}%
+\special{pa 880 -257}\special{pa 900 -215}\special{pa 917 -171}\special{pa 934 -107}%
+\special{pa 938 -85}\special{pa 945 0}%
+\special{fp}%
+\special{pa -945 0}\special{pa -943 50}\special{pa -938 85}\special{pa -920 162}\special{pa -917 171}%
+\special{pa -880 257}\special{pa -876 265}\special{pa -824 345}\special{pa -816 355}%
+\special{pa -745 432}\special{pa -739 437}\special{pa -679 485}%
+\special{fp}%
+\special{pa -725 358}\special{pa -723 325}\special{pa -717 291}\special{pa -708 256}%
+\special{pa -695 221}\special{pa -679 186}\special{pa -659 152}\special{pa -637 119}%
+\special{pa -613 88}\special{pa -586 60}\special{pa -558 34}\special{pa -528 11}\special{pa -498 -7}%
+\special{pa -468 -22}\special{pa -438 -33}\special{pa -409 -40}\special{pa -380 -42}%
+\special{pa -354 -40}\special{pa -329 -33}\special{pa -307 -22}\special{pa -288 -7}%
+\special{fp}%
+\special{pa -613 517}\special{pa -637 511}\special{pa -659 500}\special{pa -679 485}%
+\special{pa -695 466}\special{pa -708 443}\special{pa -717 418}\special{pa -723 389}%
+\special{pa -725 358}%
+\special{fp}%
+\special{pa -697 226}\special{pa -618 275}\special{pa -530 318}\special{pa -433 354}%
+\special{pa -330 382}\special{pa -221 403}\special{pa -109 415}\special{pa 5 419}%
+\special{pa 119 414}\special{pa 231 401}\special{pa 339 380}\special{pa 442 351}\special{pa 538 314}%
+\special{pa 626 271}\special{pa 703 222}\special{pa 770 167}\special{pa 824 108}\special{pa 866 45}%
+\special{pa 894 -20}\special{pa 907 -87}\special{pa 907 -155}\special{pa 892 -222}%
+\special{pa 863 -287}\special{pa 820 -349}\special{pa 765 -408}\special{pa 701 -459}%
+\special{fp}%
+\special{pa -647 -494}\special{pa -703 -458}\special{pa -770 -403}\special{pa -824 -344}%
+\special{pa -866 -281}\special{pa -894 -216}\special{pa -907 -149}\special{pa -907 -81}%
+\special{pa -892 -15}\special{pa -863 51}\special{pa -820 113}\special{pa -765 172}%
+\special{pa -697 226}%
+\special{fp}%
+\special{pa -620 97}\special{pa -550 141}\special{pa -472 179}\special{pa -386 211}%
+\special{pa -294 236}\special{pa -197 254}\special{pa -97 265}\special{pa 4 269}\special{pa 106 265}%
+\special{pa 205 253}\special{pa 302 234}\special{pa 394 208}\special{pa 479 176}\special{pa 557 137}%
+\special{pa 626 93}\special{pa 685 45}\special{pa 734 -8}\special{pa 771 -64}\special{pa 795 -122}%
+\special{pa 807 -182}\special{pa 807 -242}\special{pa 794 -301}\special{pa 768 -359}%
+\special{pa 730 -415}\special{pa 681 -467}\special{pa 620 -516}\special{pa 550 -559}%
+\special{pa 472 -597}\special{pa 386 -629}\special{pa 294 -654}\special{pa 197 -673}%
+\special{pa 97 -683}\special{pa -4 -687}\special{pa -106 -683}\special{pa -205 -671}%
+\special{pa -302 -652}\special{pa -394 -627}\special{pa -479 -594}\special{pa -557 -556}%
+\special{pa -626 -512}\special{pa -685 -463}\special{pa -734 -410}\special{pa -771 -354}%
+\special{pa -795 -296}\special{pa -807 -237}\special{pa -807 -177}\special{pa -794 -117}%
+\special{pa -768 -59}\special{pa -730 -3}\special{pa -681 49}\special{pa -620 97}%
+\special{fp}%
+\special{pa -512 1}\special{pa -455 37}\special{pa -390 68}\special{pa -319 94}\special{pa -242 115}%
+\special{pa -163 130}\special{pa -80 139}\special{pa 4 142}\special{pa 87 139}\special{pa 170 129}%
+\special{pa 249 114}\special{pa 325 92}\special{pa 396 66}\special{pa 460 34}\special{pa 517 -2}%
+\special{pa 566 -43}\special{pa 606 -86}\special{pa 636 -132}\special{pa 657 -180}%
+\special{pa 667 -230}\special{pa 666 -279}\special{pa 655 -328}\special{pa 634 -376}%
+\special{pa 603 -422}\special{pa 562 -466}\special{pa 512 -505}\special{pa 455 -541}%
+\special{pa 390 -573}\special{pa 319 -599}\special{pa 242 -620}\special{pa 163 -635}%
+\special{pa 80 -644}\special{pa -4 -647}\special{pa -87 -643}\special{pa -170 -634}%
+\special{pa -249 -618}\special{pa -325 -597}\special{pa -396 -570}\special{pa -460 -538}%
+\special{pa -517 -502}\special{pa -566 -462}\special{pa -606 -418}\special{pa -636 -372}%
+\special{pa -657 -324}\special{pa -667 -275}\special{pa -666 -225}\special{pa -655 -176}%
+\special{pa -634 -128}\special{pa -603 -82}\special{pa -562 -39}\special{pa -512 1}%
+\special{fp}%
+\special{pa -397 -41}\special{pa -353 -13}\special{pa -302 11}\special{pa -247 31}%
+\special{pa -188 48}\special{pa -126 59}\special{pa -62 66}\special{pa 3 68}\special{pa 68 66}%
+\special{pa 132 58}\special{pa 193 46}\special{pa 252 30}\special{pa 307 9}\special{pa 357 -16}%
+\special{pa 401 -44}\special{pa 439 -75}\special{pa 470 -109}\special{pa 494 -145}%
+\special{pa 510 -182}\special{pa 517 -220}\special{pa 517 -259}\special{pa 509 -297}%
+\special{pa 492 -334}\special{pa 468 -369}\special{pa 436 -403}\special{pa 397 -434}%
+\special{pa 353 -462}\special{pa 302 -486}\special{pa 247 -507}\special{pa 188 -523}%
+\special{pa 126 -535}\special{pa 62 -542}\special{pa -3 -544}\special{pa -68 -541}%
+\special{pa -132 -534}\special{pa -193 -522}\special{pa -252 -505}\special{pa -307 -484}%
+\special{pa -357 -460}\special{pa -401 -431}\special{pa -439 -400}\special{pa -470 -366}%
+\special{pa -494 -331}\special{pa -510 -293}\special{pa -517 -255}\special{pa -517 -217}%
+\special{pa -509 -179}\special{pa -492 -141}\special{pa -468 -106}\special{pa -436 -72}%
+\special{pa -397 -41}%
+\special{fp}%
+\special{pa -302 -19}\special{pa -268 2}\special{pa -230 21}\special{pa -188 36}\special{pa -143 48}%
+\special{pa -96 57}\special{pa -47 63}\special{pa 2 64}\special{pa 52 62}\special{pa 100 57}%
+\special{pa 147 47}\special{pa 192 35}\special{pa 233 19}\special{pa 271 0}\special{pa 305 -21}%
+\special{pa 334 -45}\special{pa 358 -71}\special{pa 376 -98}\special{pa 388 -126}%
+\special{pa 394 -155}\special{pa 393 -184}\special{pa 387 -213}\special{pa 374 -242}%
+\special{pa 356 -269}\special{pa 332 -294}\special{pa 302 -318}\special{pa 268 -339}%
+\special{pa 230 -358}\special{pa 188 -373}\special{pa 143 -385}\special{pa 96 -394}%
+\special{pa 47 -400}\special{pa -2 -401}\special{pa -52 -399}\special{pa -100 -394}%
+\special{pa -147 -385}\special{pa -192 -372}\special{pa -233 -356}\special{pa -271 -337}%
+\special{pa -305 -316}\special{pa -334 -292}\special{pa -358 -267}\special{pa -376 -239}%
+\special{pa -388 -211}\special{pa -394 -182}\special{pa -393 -153}\special{pa -387 -124}%
+\special{pa -374 -95}\special{pa -356 -68}\special{pa -332 -43}\special{pa -302 -19}%
+\special{fp}%
+\special{pa 320 -34}\special{pa 324 -50}\special{pa 323 -74}\special{pa 318 -98}\special{pa 308 -121}%
+\special{pa 293 -143}\special{pa 273 -164}\special{pa 249 -184}\special{pa 221 -201}%
+\special{pa 189 -216}\special{pa 155 -229}\special{pa 118 -239}\special{pa 79 -247}%
+\special{pa 39 -251}\special{pa -2 -252}\special{pa -42 -251}\special{pa -82 -246}%
+\special{pa -121 -238}\special{pa -158 -228}\special{pa -192 -215}\special{pa -223 -200}%
+\special{pa -251 -182}\special{pa -275 -163}\special{pa -294 -141}\special{pa -309 -119}%
+\special{pa -319 -96}\special{pa -324 -72}\special{pa -323 -48}\special{pa -320 -34}%
+\special{fp}%
+\special{pa 297 -16}\special{pa 293 -22}\special{pa 273 -43}\special{pa 249 -62}\special{pa 221 -79}%
+\special{pa 189 -95}\special{pa 155 -107}\special{pa 118 -118}\special{pa 79 -125}%
+\special{pa 39 -129}\special{pa -2 -131}\special{pa -42 -129}\special{pa -82 -124}%
+\special{pa -121 -117}\special{pa -158 -106}\special{pa -192 -93}\special{pa -223 -78}%
+\special{pa -251 -60}\special{pa -275 -41}\special{pa -294 -20}%
+\special{fp}%
+\special{pa 271 -1}\special{pa 268 -2}\special{pa 230 -21}\special{pa 188 -36}\special{pa 143 -48}%
+\special{pa 96 -57}\special{pa 47 -63}\special{pa -2 -64}\special{pa -52 -62}\special{pa -100 -57}%
+\special{pa -147 -47}\special{pa -192 -35}\special{pa -233 -19}\special{pa -271 -1}%
+\special{fp}%
+\special{pa 75 -65}\special{pa 62 -66}\special{pa -3 -68}\special{pa -39 -67}%
+\special{fp}%
+\special{pa -620 516}\special{pa -550 559}\special{pa -472 597}\special{pa -386 629}%
+\special{pa -294 654}\special{pa -197 673}\special{pa -97 683}\special{pa 4 687}\special{pa 106 683}%
+\special{pa 205 671}\special{pa 302 652}\special{pa 394 627}\special{pa 479 594}\special{pa 557 556}%
+\special{pa 599 529}%
+\special{fp}%
+\special{pa -633 506}\special{pa -620 516}%
+\special{fp}%
+\special{pa -697 463}\special{pa -618 511}\special{pa -530 554}\special{pa -433 590}%
+\special{pa -330 618}\special{pa -221 639}\special{pa -109 651}\special{pa 5 655}%
+\special{pa 119 650}\special{pa 231 637}\special{pa 339 616}\special{pa 442 587}\special{pa 538 551}%
+\special{pa 626 507}\special{pa 703 458}\special{pa 770 403}\special{pa 824 344}\special{pa 866 281}%
+\special{pa 889 227}%
+\special{fp}%
+\special{pa -877 255}\special{pa -863 287}\special{pa -820 349}\special{pa -765 408}%
+\special{pa -697 463}%
+\special{fp}%
+\special{pa -360 516}\special{pa -359 483}\special{pa -356 447}\special{pa -352 410}%
+\special{pa -345 372}\special{pa -337 334}\special{pa -327 295}\special{pa -316 258}%
+\special{pa -304 222}\special{pa -291 187}\special{pa -277 155}\special{pa -262 127}%
+\special{pa -248 101}\special{pa -232 80}\special{pa -218 62}\special{pa -203 49}%
+\special{pa -189 41}\special{pa -176 37}\special{pa -163 39}%
+\special{fp}%
+\special{pa -316 650}\special{pa -316 649}\special{pa -327 643}\special{pa -337 633}%
+\special{pa -345 617}\special{pa -352 598}\special{pa -356 574}\special{pa -359 547}%
+\special{pa -360 516}%
+\special{fp}%
+\special{pa 74 684}\special{pa 82 670}\special{pa 84 655}\special{pa 85 636}\special{pa 86 613}%
+\special{pa 87 586}\special{pa 87 556}\special{pa 87 522}\special{pa 86 487}\special{pa 85 449}%
+\special{pa 84 410}\special{pa 82 371}\special{pa 79 332}\special{pa 77 293}\special{pa 74 255}%
+\special{pa 71 219}\special{pa 67 186}\special{pa 64 156}\special{pa 60 129}\special{pa 56 105}%
+\special{pa 53 86}\special{pa 49 72}\special{pa 46 62}\special{pa 43 57}%
+\special{fp}%
+\special{pa 514 468}\special{pa 513 435}\special{pa 509 400}\special{pa 502 364}\special{pa 493 326}%
+\special{pa 482 289}\special{pa 468 252}\special{pa 452 216}\special{pa 435 181}\special{pa 416 149}%
+\special{pa 396 119}\special{pa 375 92}\special{pa 354 68}\special{pa 332 49}\special{pa 311 33}%
+\special{pa 290 22}\special{pa 270 16}\special{pa 251 14}\special{pa 234 17}\special{pa 218 24}%
+\special{fp}%
+\special{pa 448 608}\special{pa 452 607}\special{pa 468 600}\special{pa 482 588}\special{pa 493 571}%
+\special{pa 502 551}\special{pa 509 526}\special{pa 513 499}\special{pa 514 468}%
+\special{fp}%
+\special{pa 824 273}\special{pa 822 241}\special{pa 815 207}\special{pa 805 173}\special{pa 790 140}%
+\special{pa 771 107}\special{pa 749 75}\special{pa 724 44}\special{pa 696 16}\special{pa 666 -9}%
+\special{pa 634 -31}\special{pa 601 -50}\special{pa 566 -66}\special{pa 532 -77}\special{pa 498 -85}%
+\special{pa 464 -88}\special{pa 432 -87}\special{pa 402 -81}\special{pa 374 -72}\special{pa 349 -58}%
+\special{pa 327 -41}\special{pa 309 -20}%
+\special{fp}%
+\special{pa 771 405}\special{pa 790 384}\special{pa 805 360}\special{pa 815 334}\special{pa 822 304}%
+\special{pa 824 273}%
+\special{fp}%
+\special{pa 945 16}\special{pa 942 -16}\special{pa 935 -48}\special{pa 922 -78}\special{pa 906 -107}%
+\special{pa 884 -135}\special{pa 859 -160}\special{pa 830 -182}\special{pa 798 -201}%
+\special{pa 764 -217}\special{pa 727 -230}\special{pa 689 -238}\special{pa 649 -243}%
+\special{pa 610 -243}\special{pa 571 -240}\special{pa 532 -233}\special{pa 496 -222}%
+\special{pa 461 -207}\special{pa 429 -189}\special{pa 400 -167}\special{pa 375 -143}%
+\special{pa 354 -117}\special{pa 337 -88}\special{pa 325 -58}\special{pa 319 -34}%
+\special{fp}%
+\special{pa 941 52}\special{pa 942 48}\special{pa 945 16}%
+\special{fp}%
+\special{pa 822 -344}\special{pa 814 -358}\special{pa 795 -379}\special{pa 772 -397}%
+\special{pa 746 -411}\special{pa 717 -422}\special{pa 686 -428}\special{pa 653 -430}%
+\special{pa 619 -428}\special{pa 584 -422}\special{pa 548 -412}\special{pa 513 -398}%
+\special{pa 478 -380}\special{pa 445 -359}\special{pa 414 -334}\special{pa 386 -307}%
+\special{pa 360 -278}\special{pa 337 -247}\special{pa 318 -214}\special{pa 303 -181}%
+\special{pa 292 -148}\special{pa 285 -114}\special{pa 283 -82}\special{pa 285 -51}%
+\special{pa 292 -21}\special{pa 295 -14}%
+\special{fp}%
+\special{pa 508 -583}\special{pa 508 -583}\special{pa 491 -592}\special{pa 472 -595}%
+\special{pa 452 -594}\special{pa 430 -588}\special{pa 407 -578}\special{pa 384 -563}%
+\special{pa 361 -544}\special{pa 338 -522}\special{pa 315 -495}\special{pa 293 -466}%
+\special{pa 273 -434}\special{pa 254 -400}\special{pa 237 -365}\special{pa 222 -328}%
+\special{pa 209 -291}\special{pa 199 -254}\special{pa 192 -218}\special{pa 188 -183}%
+\special{pa 186 -150}\special{pa 188 -119}\special{pa 192 -92}\special{pa 199 -67}%
+\special{pa 209 -46}\special{pa 222 -29}\special{pa 237 -17}\special{pa 254 -9}\special{pa 273 -5}%
+\special{pa 280 -6}%
+\special{fp}%
+\special{pa 123 -681}\special{pa 114 -676}\special{pa 108 -667}\special{pa 102 -652}%
+\special{pa 97 -633}\special{pa 91 -610}\special{pa 85 -583}\special{pa 79 -553}\special{pa 74 -520}%
+\special{pa 69 -484}\special{pa 64 -446}\special{pa 59 -408}\special{pa 56 -369}\special{pa 53 -329}%
+\special{pa 50 -290}\special{pa 48 -253}\special{pa 47 -217}\special{pa 47 -184}\special{pa 47 -154}%
+\special{pa 48 -127}\special{pa 50 -103}\special{pa 53 -84}\special{pa 56 -70}\special{pa 59 -60}%
+\special{pa 64 -55}%
+\special{fp}%
+\special{pa -277 -657}\special{pa -272 -659}\special{pa -262 -660}\special{pa -251 -656}%
+\special{pa -238 -648}\special{pa -226 -634}\special{pa -213 -616}\special{pa -200 -594}%
+\special{pa -187 -568}\special{pa -175 -539}\special{pa -163 -507}\special{pa -151 -472}%
+\special{pa -141 -435}\special{pa -131 -397}\special{pa -123 -359}\special{pa -116 -320}%
+\special{pa -111 -282}\special{pa -107 -244}\special{pa -104 -209}\special{pa -103 -176}%
+\special{pa -104 -145}\special{pa -107 -118}\special{pa -111 -95}\special{pa -116 -75}%
+\special{pa -123 -60}\special{pa -131 -49}\special{pa -141 -44}%
+\special{fp}%
+\special{pa -650 -501}\special{pa -645 -507}\special{pa -627 -521}\special{pa -606 -531}%
+\special{pa -583 -537}\special{pa -557 -539}\special{pa -530 -536}\special{pa -503 -528}%
+\special{pa -474 -516}\special{pa -445 -500}\special{pa -416 -480}\special{pa -388 -457}%
+\special{pa -362 -430}\special{pa -336 -401}\special{pa -313 -369}\special{pa -292 -336}%
+\special{pa -274 -301}\special{pa -258 -265}\special{pa -246 -230}\special{pa -237 -194}%
+\special{pa -232 -160}\special{pa -230 -127}\special{pa -232 -96}\special{pa -237 -68}%
+\special{pa -246 -43}\special{pa -258 -21}\special{pa -273 -3}%
+\special{fp}%
+\special{pa -902 -205}\special{pa -901 -211}\special{pa -889 -239}\special{pa -873 -265}%
+\special{pa -853 -289}\special{pa -828 -309}\special{pa -801 -327}\special{pa -770 -340}%
+\special{pa -736 -350}\special{pa -701 -356}\special{pa -664 -358}\special{pa -626 -356}%
+\special{pa -588 -350}\special{pa -550 -340}\special{pa -513 -326}\special{pa -478 -308}%
+\special{pa -444 -287}\special{pa -414 -263}\special{pa -386 -237}\special{pa -362 -208}%
+\special{pa -341 -178}\special{pa -325 -147}\special{pa -313 -114}\special{pa -306 -82}%
+\special{pa -304 -50}\special{pa -306 -22}%
+\special{fp}%
+\special{pa -923 118}\special{pa -921 86}\special{pa -914 54}\special{pa -902 22}%
+\special{pa -885 -9}\special{pa -865 -39}\special{pa -840 -66}\special{pa -812 -92}%
+\special{pa -781 -115}\special{pa -747 -134}\special{pa -711 -151}\special{pa -673 -163}%
+\special{pa -635 -172}\special{pa -596 -177}\special{pa -558 -178}\special{pa -521 -175}%
+\special{pa -485 -168}\special{pa -451 -157}\special{pa -419 -142}\special{pa -391 -124}%
+\special{pa -367 -102}\special{pa -346 -78}\special{pa -329 -51}\special{pa -317 -23}%
+\special{fp}%
+\special{pa -898 214}\special{pa -902 209}\special{pa -914 180}\special{pa -921 150}%
+\special{pa -923 118}%
+\special{fp}%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/xsinx.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/xsinx.tex
new file mode 100644
index 0000000000..fb8b14753e
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/xsinx.tex
@@ -0,0 +1,86 @@
+%%% /Users/Hannya/Desktop/KeTCindy/fig/xsinx.tex
+%%% Generator=template1basic.cdy
+{\unitlength=7mm%
+\begin{picture}%
+(11.04,4.53)(-4,-2)%
+\special{pn 8}%
+%
+{%
+\color[rgb]{0,0,0}%
+\special{pa -1102 -209}\special{pa -1042 -164}\special{pa -981 -112}\special{pa -920 -54}%
+\special{pa -859 7}\special{pa -798 67}\special{pa -737 124}\special{pa -676 175}%
+\special{pa -616 217}\special{pa -555 249}\special{pa -494 269}\special{pa -433 276}%
+\special{pa -372 269}\special{pa -311 249}\special{pa -250 217}\special{pa -190 175}%
+\special{pa -129 124}\special{pa -68 67}\special{pa -7 7}\special{pa 54 -53}%
+\special{pa 115 -111}\special{pa 175 -164}\special{pa 236 -208}\special{pa 297 -243}%
+\special{pa 358 -265}\special{pa 419 -275}\special{pa 480 -272}\special{pa 541 -255}%
+\special{pa 601 -226}\special{pa 662 -186}\special{pa 723 -136}\special{pa 784 -81}%
+\special{pa 845 -21}\special{pa 906 40}\special{pa 967 99}\special{pa 1027 153}%
+\special{pa 1088 199}\special{pa 1149 236}\special{pa 1210 261}\special{pa 1271 274}%
+\special{pa 1332 274}\special{pa 1393 260}\special{pa 1453 233}\special{pa 1514 196}%
+\special{pa 1575 148}\special{pa 1636 94}\special{pa 1697 35}\special{pa 1758 -26}%
+\special{pa 1818 -85}\special{pa 1879 -141}\special{pa 1940 -189}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\special{pa -551 551}\special{pa -494 494}\special{pa -433 433}\special{pa -372 372}%
+\special{pa -311 311}\special{pa -250 250}\special{pa -190 190}\special{pa -129 129}%
+\special{pa -68 68}\special{pa -7 7}\special{pa 54 -54}\special{pa 115 -115}%
+\special{pa 175 -175}\special{pa 236 -236}\special{pa 297 -297}\special{pa 358 -358}%
+\special{pa 419 -419}\special{pa 480 -480}\special{pa 541 -541}\special{pa 601 -601}%
+\special{pa 662 -662}\special{pa 697 -697}%
+\special{fp}%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{$y=\sin x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$y=\sin x$}\settodepth{\Depth}{$y=\sin x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.9614286,0.6800000){\hspace*{\Width}\raisebox{\Height}{$y=\sin x$}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{$y=x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$y=x$}\settodepth{\Depth}{$y=x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.5514286,2.0100000){\hspace*{\Width}\raisebox{\Height}{$y=x$}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{$-\pi$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$-\pi$}\settodepth{\Depth}{$-\pi$}\setlength{\Height}{-\Height}%
+\put(-3.1400000,-0.2142857){\hspace*{\Width}\raisebox{\Height}{$-\pi$}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{$\pi$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\pi$}\settodepth{\Depth}{$\pi$}\setlength{\Height}{-\Height}%
+\put(3.1400000,-0.2142857){\hspace*{\Width}\raisebox{\Height}{$\pi$}}%
+%
+}%
+{%
+\color[rgb]{0,0,0}%
+\settowidth{\Width}{$2\pi$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$2\pi$}\settodepth{\Depth}{$2\pi$}\setlength{\Height}{-\Height}%
+\put(6.2800000,-0.2142857){\hspace*{\Width}\raisebox{\Height}{$2\pi$}}%
+%
+}%
+\special{pa -1102 -0}\special{pa 1940 -0}%
+\special{fp}%
+\special{pa 0 551}\special{pa 0 -697}%
+\special{fp}%
+\settowidth{\Width}{$x$}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(7.1114286,0.0000000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{\Depth}%
+\put(0.0000000,2.6014286){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+\settowidth{\Width}{O}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
+\put(-0.0714286,-0.0714286){\hspace*{\Width}\raisebox{\Height}{O}}%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/xsinx01.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/xsinx01.pdf
new file mode 100644
index 0000000000..389db3530c
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/xsinx01.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/xsinx02.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/xsinx02.pdf
new file mode 100644
index 0000000000..d9f97acb74
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/xsinx02.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/xsinx03.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/xsinx03.pdf
new file mode 100644
index 0000000000..50e762c091
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/xsinx03.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/zogen3.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/zogen3.tex
new file mode 100644
index 0000000000..7a28bd1856
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/zogen3.tex
@@ -0,0 +1,196 @@
+%%% /Users/Hannya/ketcindy/ketwork/zogen3.tex 2016-12-8 15:42
+%%% zogen3.sce 2016-12-8 15:42
+{\unitlength=1cm%
+\begin{picture}%
+( 8.00000, 4.00000)( -0.00000, -0.00000)%
+\special{pn 8}%
+%
+\special{pa 0 -1575}\special{pa 0 0}%
+\special{fp}%
+\special{pa 394 -1575}\special{pa 394 0}%
+\special{fp}%
+\special{pa 787 -1575}\special{pa 787 0}%
+\special{fp}%
+\special{pa 1181 -1575}\special{pa 1181 0}%
+\special{fp}%
+\special{pa 1575 -1575}\special{pa 1575 0}%
+\special{fp}%
+\special{pa 1969 -1575}\special{pa 1969 0}%
+\special{fp}%
+\special{pa 2362 -1575}\special{pa 2362 0}%
+\special{fp}%
+\special{pa 2756 -1575}\special{pa 2756 0}%
+\special{fp}%
+\special{pa 3150 -1575}\special{pa 3150 0}%
+\special{fp}%
+\special{pa 0 -1575}\special{pa 3150 -1575}%
+\special{fp}%
+\special{pa 0 -1181}\special{pa 3150 -1181}%
+\special{fp}%
+\special{pa 0 -787}\special{pa 3150 -787}%
+\special{fp}%
+\special{pa 0 -394}\special{pa 3150 -394}%
+\special{fp}%
+\special{pa 0 0}\special{pa 3150 0}%
+\special{fp}%
+\settowidth{\Width}{$x$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$x$}\settodepth{\Depth}{$x$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(0.5000,3.5000){\hspace*{\Width}\raisebox{\Height}{$x$}}%
+%
+%
+\settowidth{\Width}{$\cdots$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\cdots$}\settodepth{\Depth}{$\cdots$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(1.5000,3.5000){\hspace*{\Width}\raisebox{\Height}{$\cdots$}}%
+%
+%
+\settowidth{\Width}{$-1$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$-1$}\settodepth{\Depth}{$-1$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.5000,3.5000){\hspace*{\Width}\raisebox{\Height}{$-1$}}%
+%
+%
+\settowidth{\Width}{$\cdots$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\cdots$}\settodepth{\Depth}{$\cdots$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(3.5000,3.5000){\hspace*{\Width}\raisebox{\Height}{$\cdots$}}%
+%
+%
+\settowidth{\Width}{$0$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$0$}\settodepth{\Depth}{$0$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.5000,3.5000){\hspace*{\Width}\raisebox{\Height}{$0$}}%
+%
+%
+\settowidth{\Width}{$\cdots$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\cdots$}\settodepth{\Depth}{$\cdots$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(5.5000,3.5000){\hspace*{\Width}\raisebox{\Height}{$\cdots$}}%
+%
+%
+\settowidth{\Width}{$1$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$1$}\settodepth{\Depth}{$1$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(6.5000,3.5000){\hspace*{\Width}\raisebox{\Height}{$1$}}%
+%
+%
+\settowidth{\Width}{$\cdots$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\cdots$}\settodepth{\Depth}{$\cdots$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(7.5000,3.5000){\hspace*{\Width}\raisebox{\Height}{$\cdots$}}%
+%
+%
+\settowidth{\Width}{$y'$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y'$}\settodepth{\Depth}{$y'$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(0.5000,2.5000){\hspace*{\Width}\raisebox{\Height}{$y'$}}%
+%
+%
+\settowidth{\Width}{$+$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$+$}\settodepth{\Depth}{$+$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(1.5000,2.5000){\hspace*{\Width}\raisebox{\Height}{$+$}}%
+%
+%
+\settowidth{\Width}{$+$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$+$}\settodepth{\Depth}{$+$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.5000,2.5000){\hspace*{\Width}\raisebox{\Height}{$+$}}%
+%
+%
+\settowidth{\Width}{$+$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$+$}\settodepth{\Depth}{$+$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(3.5000,2.5000){\hspace*{\Width}\raisebox{\Height}{$+$}}%
+%
+%
+\settowidth{\Width}{$0$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$0$}\settodepth{\Depth}{$0$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.5000,2.5000){\hspace*{\Width}\raisebox{\Height}{$0$}}%
+%
+%
+\settowidth{\Width}{$-$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$-$}\settodepth{\Depth}{$-$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(5.5000,2.5000){\hspace*{\Width}\raisebox{\Height}{$-$}}%
+%
+%
+\settowidth{\Width}{$-$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$-$}\settodepth{\Depth}{$-$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(6.5000,2.5000){\hspace*{\Width}\raisebox{\Height}{$-$}}%
+%
+%
+\settowidth{\Width}{$-$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$-$}\settodepth{\Depth}{$-$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(7.5000,2.5000){\hspace*{\Width}\raisebox{\Height}{$-$}}%
+%
+%
+\settowidth{\Width}{$y''$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y''$}\settodepth{\Depth}{$y''$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(0.5000,1.5000){\hspace*{\Width}\raisebox{\Height}{$y''$}}%
+%
+%
+\settowidth{\Width}{$+$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$+$}\settodepth{\Depth}{$+$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(1.5000,1.5000){\hspace*{\Width}\raisebox{\Height}{$+$}}%
+%
+%
+\settowidth{\Width}{$0$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$0$}\settodepth{\Depth}{$0$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.5000,1.5000){\hspace*{\Width}\raisebox{\Height}{$0$}}%
+%
+%
+\settowidth{\Width}{$-$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$-$}\settodepth{\Depth}{$-$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(3.5000,1.5000){\hspace*{\Width}\raisebox{\Height}{$-$}}%
+%
+%
+\settowidth{\Width}{$-$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$-$}\settodepth{\Depth}{$-$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.5000,1.5000){\hspace*{\Width}\raisebox{\Height}{$-$}}%
+%
+%
+\settowidth{\Width}{$-$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$-$}\settodepth{\Depth}{$-$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(5.5000,1.5000){\hspace*{\Width}\raisebox{\Height}{$-$}}%
+%
+%
+\settowidth{\Width}{$0$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$0$}\settodepth{\Depth}{$0$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(6.5000,1.5000){\hspace*{\Width}\raisebox{\Height}{$0$}}%
+%
+%
+\settowidth{\Width}{$+$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$+$}\settodepth{\Depth}{$+$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(7.5000,1.5000){\hspace*{\Width}\raisebox{\Height}{$+$}}%
+%
+%
+\settowidth{\Width}{$y$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$y$}\settodepth{\Depth}{$y$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(0.5000,0.5000){\hspace*{\Width}\raisebox{\Height}{$y$}}%
+%
+%
+\settowidth{\Width}{$\nelarrow$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\nelarrow$}\settodepth{\Depth}{$\nelarrow$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(1.5000,0.5000){\hspace*{\Width}\raisebox{\Height}{$\nelarrow$}}%
+%
+%
+\settowidth{\Width}{$\frac{1}{\sqrt{e}}$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\frac{1}{\sqrt{e}}$}\settodepth{\Depth}{$\frac{1}{\sqrt{e}}$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(2.5000,0.5000){\hspace*{\Width}\raisebox{\Height}{$\frac{1}{\sqrt{e}}$}}%
+%
+%
+\settowidth{\Width}{$\nerarrow$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\nerarrow$}\settodepth{\Depth}{$\nerarrow$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(3.5000,0.5000){\hspace*{\Width}\raisebox{\Height}{$\nerarrow$}}%
+%
+%
+\settowidth{\Width}{$1$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$1$}\settodepth{\Depth}{$1$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(4.5000,0.5000){\hspace*{\Width}\raisebox{\Height}{$1$}}%
+%
+%
+\settowidth{\Width}{$\serarrow$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\serarrow$}\settodepth{\Depth}{$\serarrow$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(5.5000,0.5000){\hspace*{\Width}\raisebox{\Height}{$\serarrow$}}%
+%
+%
+\settowidth{\Width}{$\frac{1}{\sqrt{e}}$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\frac{1}{\sqrt{e}}$}\settodepth{\Depth}{$\frac{1}{\sqrt{e}}$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(6.5000,0.5000){\hspace*{\Width}\raisebox{\Height}{$\frac{1}{\sqrt{e}}$}}%
+%
+%
+\settowidth{\Width}{$\selarrow$}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{$\selarrow$}\settodepth{\Depth}{$\selarrow$}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(7.5000,0.5000){\hspace*{\Width}\raisebox{\Height}{$\selarrow$}}%
+%
+%
+\end{picture}}% \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/zoom-in.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/zoom-in.pdf
new file mode 100644
index 0000000000..12cf4f488d
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/zoom-in.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/zoom-out.pdf b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/zoom-out.pdf
new file mode 100644
index 0000000000..0417fb932c
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/zoom-out.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/KeTCindyGuideE.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/KeTCindyGuideE.tex
new file mode 100644
index 0000000000..8ba5ed7707
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/KeTCindyGuideE.tex
@@ -0,0 +1,1100 @@
+\documentclass[papersize,a4paper,12pt]{article}
+\usepackage{ketpic,ketlayer}
+\usepackage{amsmath,amssymb}
+% \usepackage{amsmath,newtxmath}
+%\usepackage[dvipdfmx]{graphicx,color}
+\usepackage{graphicx,color}
+\usepackage{wrapfig}
+%\usepackage[dvipdfmx,bookmarks=false,colorlinks=true,linkcolor=blue]{hyperref}
+\usepackage[bookmarks=false,colorlinks=true,linkcolor=blue]{hyperref}
+\setmargin{20}{20}{15}{25}
+\usepackage{setspace}
+\usepackage{comment}
+\usepackage{bm,enumerate}
+\usepackage{pict2e}
+
+%\newcommand{\cmd}[1]{
+%\begin{center}{\bf\large #1}\end{center}
+%\hypertarget{#1}{}
+%}
+
+\newenvironment{cmd}[2]{
+\hypertarget{#2}{}
+\begin{center}{\bf\large #1}\end{center}
+\begin{description}
+}{
+\end{description}
+\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$Command List}\end{flushright}
+}
+
+% item command for this documentation
+\newcommand{\itemket}[1]{
+\item[\Ltab{27mm}{#1}]
+}
+
+
+\begin{document}
+\title{Guide to \ketcindy}
+\author{\ketcindy\ Project Team}
+\maketitle
+
+\begin{center} - ver.3.2 -\end{center}
+
+\hypertarget{index}{}
+\tableofcontents
+
+\newpage
+
+\section{About \ketcindy}
+
+\subsection{Overview}
+
+\ketcindy\ is a library of Cindyscript
+which is a programming language of Cinderella.
+It converts the data computed
+for generating dynamic graphics on Cinderella
+into \TeX\ graphical codes.
+Synchronized use of
+interactive graphics capabilities of Cinderella
+and well-structured programming capabilities of Cindyscript
+enables ordinary \TeX\ users to efficiently embed
+high-quality graphics into \TeX\ documents.
+Moreover, the collaborative use of \ketcindy\
+and other software such as R, Maxima and C
+has been enabled.
+
+\begin{center}
+\input{Fig/concept}
+\end{center}
+
+Firstly, dynamic figure is generated on Cinderella.
+Secondly, \ketcindy\ generates
+a source file of R and makes R execute it
+for the generation of \TeX\ graphical codes.
+Thirdly, those codes are formatted into
+\TeX\ file which is input in the targetting \TeX\ document
+via the command \verb|\input|.
+Finally, usual compilation procedure of \TeX\ results in
+the generation of final PDF output
+including the corresponding figure.
+A batch file \verb|kc.bat| for Windows
+or a shell file \verb|kc.sh| for Mac or Linux
+is generated via \ketcindy\
+in order to batch-process all the steps
+from the second to the last.
+Also by using these files,
+collaboration of Cinderella and other software
+as shown in the schematic diagram above
+is processed.
+
+Summarizingly, specific steps to generate a \TeX\ figure
+are listed as follows.
+
+\begin{enumerate}[(1)]
+\item
+Generate the needed geometric elements
+on the Euclidean view of Cinderella
+using its drawing tools.
+These elements can be moved interactively.
+
+\hspace{30mm}\includegraphics[bb=0.00 0.00 408.02 347.02,width=6cm]{Fig/incenter01.pdf}
+
+\item
+Input the \ketcindy\ codes into Cindyscript editor
+to specify the graphical elements to be displayed
+in \TeX\ final output.
+Also \ketcindy\ codes are used
+to generate supplementary graphical elements
+and handle them.
+
+\hspace{10mm}\includegraphics[bb=0.00 0.00 811.04 257.01,width=12cm]{Fig/incenter02E.pdf}
+
+In this stage, the programming capabilities
+inherently implemented to Cindyscript can be used simultaneously.
+Execute the whole program by clicking the "Run" button.
+For more details, see section 3.
+
+\item
+Click the button named \verb|Figures| in Euclidean view
+to automatically generate the following files
+in the folder named "fig".
+Here, "incenter" is the name specified
+via the command \verb|Setfiles("incenter")|
+in step (2).
+
+\begin{tabbing}
+12\=1234567897890123456\=\kill
+
+ \> \verb|kc|.sh or \verb|kc.bat| \> shell script file(Mac) or batch file(Windows) \\
+ \> \verb|incenter.r| \> \\
+ \> \verb|incenter.tex| \> \TeX\ file composed of graphical codes\\
+ \> \verb|incentermain.aux| \> \\
+ \> \verb|incentermain.log| \> \\
+ \> \verb|incentermain.pdf| \> PDF file to display the resulting graphical image\\
+ \> \verb|incentermain.tex| \> \TeX\ file temporarily used to generate
+the file \verb|incentermain.pdf|
+\end{tabbing}
+
+Subsequently, the file \verb|incentermain.pdf|
+is automatically displayed as shown below.
+
+\hspace{30mm}\includegraphics[bb=0.00 0.00 348.02 284.51,width=6cm]{Fig/incenter03.pdf}
+
+We can manipulate this final output
+by modifying the inputs in steps (1) and (2)
+before processing the step (3) again.
+
+\vspace{\baselineskip}
+\item
+Using \ketpic\ package of \TeX ,
+\verb|incenter.tex| can be read
+into the targetting \TeX\ document
+via the command
+\begin{center}
+\verb|\input{incenter}|
+\end{center}
+Then the same figure is embedded in the targetting PDF output.
+
+\end{enumerate}
+
+
+\newpage
+
+\subsection{Geometric Figures}
+
+Producing geometric figures in the plane is easy. Moreover, we can add hatchings in some areas, which is better than shading
+for monochrome printing.
+The following are the main parts of the script.
+
+\begin{verbatim}
+ Listplot([A,B,C,A]);
+ Circledata([D,E]);
+ Bowdata([B,A],[1,0.5,"Expr=c","da"]);
+ Bowdata([C,B],[1,0.5,"Expr=a","da"]);
+ Bowdata([A,C],[1,0.5,"Expr=b","da"]);
+ Hatchdata("2",["oi"],[["crDE"],["sgABCA"]],["dr,0.7",""]);
+ Pointdata("I",D,["size=4"]);
+ Letter([A,"sw","A",B,"ne","B",C,"se","C",D,"se","I"]);
+\end{verbatim}
+
+\begin{center}
+\includegraphics[bb=0.00 0.00 416.00 347.00,height=42mm]{Fig/hatch.pdf}
+\hspace{2mm}
+\input{Fig/s106bowhatch.tex}
+\end{center}
+
+
+\subsection{Graphs of Functions}
+\ketcindy\ can produce graphs of functions with
+\begin{verbatim}
+ Plotdata("1","x^2","x");
+\end{verbatim}
+or parametrically with
+\begin{verbatim}
+ Paramplot("1","[2*cos(t),sin(t)]", "t=[0,2*pi]");
+\end{verbatim}
+\noindent Here we give an example of the solution curve of a differential equation. The script is:
+%\verb| // data are assigned to the variable de1.|\\
+%\verb| // [0,XMAX] is the range of t.|\\
+\begin{verbatim}
+ Deqplot("1","y``=-L.x*y`-G.x*y","t=[0,XMAX]",0,[C.y,0]);
+ // the equation is y''=-ay'-by (a=L.x, b=G.x).
+ // C.y,0 are initial values of y and y' at t=0.
+ Expr(M,"e","\displaystyle\frac{d^2 x}{dt^2}+"
+ +"+L.x+"\frac{dx}{dt}+"+G.x+"x=0");
+\end{verbatim}
+
+Note that points C, G, L on segments AB, EF, HK are movable, and
+are used to decide the coefficients and the initial value as you can see in the above scripts.
+\vspace{3mm}
+
+\begin{center}
+\includegraphics[bb=0.00 0.00 385.00 398.00,height=60mm]{Fig/diffeq1.pdf}
+\hspace{5mm}
+\input{Fig/s210diffeq1.tex}
+
+\end{center}
+
+%\putnotes{35}{53}{\input{fig/s305incanddec.tex}}
+%\putnotes{35}{110}{Figure \thefigno\ \ Table}\addtocounter{figno}{1}%
+%\putnotes{97}{65}{\input{fig/kumamonthin.tex}}
+%\putnotes{97}{59}{%
+%\includegraphics[bb=0.00 0.00 183.63 142.07]{fig/figkumamon.pdf}}
+%\putnotene{100}{72}{\input{fig/kumamoto.tex}}
+%\putnotes{97}{110}{Figure \thefigno\ \ B\'ezier Curve}\addtocounter{figno}{1}%
+
+\subsection{Drawing Tables}
+Writing the code for tables to be inserted into the \TeX\ documents is sometimes troublesome.
+However, it is not a hard job for \ketcindy\ (see the output in Figure.
+
+\begin{verbatim}
+ xLst=apply(1..7,15);
+ yLst=[10,10,10,10,80];
+ rmvL=apply(1..6,"c"+text(#)+"r4r5");
+ rmvL=concat(rmvL,["r2c1c2","r3c1c2"]);
+ Tabledata("",xLst,yLst,rmvL);
+ Tlistplot(["c1r1","c2r4"]);
+ Tlistplot(["c2r1","c1r4"]);
+ Putrowexpr(1,"c",
+ ["x","0","\cdots","e","\cdots","e\sqrt{e}","\cdots"]);
+ Putrowexpr(2,"c",["y`","","+","0","-","-","-"]);
+ Putrowexpr(3,"c",["y``","","-","-","-","0","+"]);
+ Putrowexpr(4,"c",["y","","","10/e","","15/e\sqrt{e}",""]);
+ Putcell("c0r4","c7r5","c","\input{fig/graph}");
+\end{verbatim}
+
+\vspace{2mm}
+
+\begin{center}
+\input{Fig/s305incanddec.tex}
+\end{center}
+
+
+\newpage
+
+\subsection{Plotting data}
+Here we call the data computed
+to generate the graphs of functions and geometric elements
+"Plotting data" which is abbreviated as PD.
+The PD to draw segment is the list of coordinates
+of its two endpoints.
+For example,
+when the coordinates of the points A and B
+are (1, 1) and (3, 2) respectively,
+PD of the segment AB named \verb|Listplot ([A,B])|
+is stored in the form \verb|[[1,1],[3,2]]|.
+Also the PD to draw a curve is the collection of
+those for drawing small segments
+which connect contiguous dividing points of the curve.
+PD are automatically given names via \ketcindy\
+following the rules below.
+
+\begin{itemize}
+\item
+The beginning part of the PD's name
+depends on the kind of the corresponding graphical element.
+For instance,
+\verb|sg| is associated to segments and
+\verb|cr| is associated to circles.
+
+\item
+When some extra name is specified
+as the first argument in the definition of PD,
+it is added to the beginning part given above.
+For instance, the PD defined below
+is given the name \verb|sg1|.
+\begin{center}
+\verb|Listplot("1",[[0,0],[1,2]]);|
+\end{center}
+
+\item
+When the extra name is not needed,
+the names of the points are added
+to the beginning part given above.
+For instance, the PD defined below
+is given the name \verb|sgABC|.
+\begin{center}
+\verb|Listplot([A,B,C]);|
+\end{center}
+
+\end{itemize}
+
+\noindent
+Once PD are generated,
+their names are displayed on the console view of Cinderella.
+For instance, when the PD named \verb|sgABCA| is generated,
+the corresponding message is displayed as shown below.
+
+\begin{center}
+\includegraphics[bb=0.00 0.00 298.02 115.01,width=6cm]{Fig/pdtoconsole.pdf}
+\end{center}
+Also the content of PD is displayed
+via the function \verb|println()| of Cindyscript.
+For instance, inputting the command
+\verb|println(sgABCA)| makes the following list displayed.
+\begin{center}
+\verb| [[1,3],[-1,0],[3,0],[1,3]] |
+\end{center}
+This list is composed of the coordinates of the points A, B, and C.
+
+These names of PD are used
+when the corresponding PD need to be transformed.
+For instance,
+PD to draw the parallel transport of the segment AB
+is generated via the \ketcindy\ command
+\begin{center}
+\verb|Translatedata("1","sgAB",[2,3]);|
+\end{center}
+
+PD can be generated also
+by using the programming capability of Cindyscript
+which can be subsequently used in \ketcindy .
+For more details,
+see the example of \verb|Listplot()|
+in the command reference.
+Inclusion of too much elements into a single PD
+may cause some error.
+To prevent such error,
+PD should be divided into several PD
+each of which is composed of 200 elements or so.
+
+
+\newpage
+
+\section{Cindyscript}
+
+\subsection{Cindyscript editor}
+
+Choose "Cindyscript" in the "Scripting" menu
+or push keybuttons Ctrl+9 (Windows) / Command+9 (Mac),
+then Cindyscript editor opens as shown below.
+
+\begin{layer}{150}{0}
+\putnotese{7}{15}{\includegraphics[bb=0.00 0.00 703.04 425.02,width=14cm]{Fig/slotE.pdf}}
+\arrowlineseg[16]{30}{20}{10}{90}
+\putnotese{25}{5}{Slots}
+\arrowlineseg[16]{50}{20}{10}{100}
+\putnotese{42}{5}{Page name}
+\arrowlineseg[16]{90}{20}{10}{110}
+\putnotese{80}{5}{Font size}
+%\arrowlineseg[16]{107}{20}{15}{140}
+%\putnotese{80}{5}{描画面を前面に}
+\arrowlineseg[16]{135}{20}{10}{110}
+\putnotese{125}{5}{Run}
+\arrowlineseg[16]{142}{20}{10}{100}
+\putnotese{135}{5}{Help}
+\putnotese{100}{35}{Text field}
+\putnotese{100}{80}{Console}
+\end{layer}
+
+\vspace{105mm}
+
+Commands can be input into preferred "slot".
+Specific timing for execution of commands
+is assigned to each slot.
+The slot for current work can be chosen
+only by clicking the corresponding tab in the menu.
+Users can add extra pages to each slot.
+For instance,
+when some initialization other than
+those included in \verb|KETlib| is needed,
+clicking the folder icon of "Initialization" makes a new page open
+in which extra commands can be input.
+The name of each page can be given
+by directly inputting it into the "Page name" column.
+The font size of the scripts can be tuned
+by changing the number in the "Font size" column.
+Frequently used slots are listed below.
+
+\begin{itemize}
+
+\item
+Draw
+
+The commnds in this slot are executed
+when some change, like movement of point,
+occurs in the Euclidean view.
+In \verb|templatebasic1.cdy|,
+the protoype page named \verb|figure|
+including the \ketcindy\ commnads
+like \verb|Ketinit();| and \verb|Windispg();|
+which are unconditionally necessary
+has been prepared.
+The \ketcindy\ commands for drawing
+should be input into this slot.
+
+\item
+Initialization
+
+The definitions of functions
+and the initial values of variables
+are input here.
+The commands in this slot are exected
+only once just after the "Run" button is clicked.
+Thus, the initial data in this slot is changed
+when some modifications are made in other slots.
+In \verb|templatebasic1.cdy|,
+the protoype page named \verb|KETlib|
+including the default setting of \ketcindy\
+has been prepared.
+
+\item
+Key Typed
+
+The commnds in this slot are executed
+when some key is pushed.
+
+\end{itemize}
+
+Clicking "Run" button or pushing the keybuttons Shift+Enter
+makes the whole program be executed.
+The results derived from executing the function \verb|print()|
+and error messages are displayed on the console view
+which is put at the bottom part of Cindyscript editor.
+Each error and its location
+is displayed together with the message
+"WARNING" or "syntax error".
+The outputs displayed on the console
+can be copied to other usual text editors.
+
+Click the "Help" button,
+then reference manual of Cinderella opens
+as shown below. \\
+
+\includegraphics[bb=0.00 0.00 712.04 577.03,width=14cm]{Fig/CindyhelpE.pdf}
+
+
+\subsection{Input}
+
+The attribute of each input into Cindyscript
+is specified via the color of the corresponding letters
+as listed below.
+
+\begin{itemize}
+\item
+The functions which are inherently implemented to Cinderella
+are displayed via blue color.
+\item
+The functions which are defined by user,
+including those of \ketcindy ,
+are displayed via purple color.
+\item
+The functions which are not yet defined
+are displayed via red color.
+\item
+Strings are displayed via green color.
+\end{itemize}
+As in the console view,
+copying and pasting to the other usual editing software
+via pushing the keybuttons Ctrl+C and Ctrl+V
+is accessible.
+Cutting and pasting via Ctrl+X and Ctrl+V
+is also possible.
+Also as in the other editing software,
+preferred strings can be specified
+via dragging mouse
+or pushing the keybutton Shift and moving the sursor.
+Serching for words via pushing Ctrl+F
+has not been enabled.
+
+The fundamental rule of describing scripts on Cindyscript editor
+are listed below.
+\begin{itemize}
+\item
+Upper- and lowercase letters are distinguished.
+Using lowercase letters is preferable.
+\item
+As in \TeX ,
+several blanks are regarded as a single blank.
+\item
+A semicolon should be located at the end of each row.
+Starting a new paragraph
+does not result in the ending of commnds.
+\end{itemize}
+Particularly, in case of \ketcindy ,
+the input of commands are controlled
+by the following rules.
+\begin{itemize}
+\item
+The names of global variables
+begin with uppercase letters.
+\item
+The names of local variables
+begin with lowercase letters.
+Local variables are declared at the beginning part
+of the definitions of functions
+along with the Cinderella command \verb|regional()|.
+\item
+The names of functions
+begin with uppercase letters.
+\end{itemize}
+
+
+\subsection{Variables and constants}
+
+The declaration of the attribute of each variable
+is not needed in Cindyscript
+since it is automatically decided
+according to the input.
+Moreover,
+the different kind of value
+can be input without any declaration. \\
+
+\noindent
+{\bf Example}
+
+\verb| a=10;|
+
+\verb| b=2;|
+
+\verb| c=a+sqrt(b);|
+
+\verb| a="the square root of"|
+
+\verb| println("The sum of"+a+b+''and 10 is''+c);|\\
+
+In this example,
+the attribute of variable \verb|a| was firstly integer,
+and then changed to string at the fourth row.
+
+The strings should be input with double quotation marks.
+The mathematical operations
+which involve several kind of variables
+must be taken much care.
+Exceptionally,
+connecting string and number with \verb|+|
+results in the generation of one single string.
+
+The variable \verb|pi| is reserved in Cindyscript
+as the ratio of the circumference of a circle to its diameter.
+Also the variable \verb|i| is reserved
+as the imaginary unit.
+When \verb|i| is used as variable once,
+it is changed to the imaginary unit via the command
+\begin{center}
+\verb|i=complex(0,1);|
+\end{center}
+
+There are also some reserved variables in \ketcindy .
+Among them, the following ones can be changed by users.
+\begin{tabbing}
+12\=3456789012345\=678989012345678901234567890123\=\kill
+\>\verb|Fhead| \>the beginning part of the file name
+which can be set by \verb|Setfiles()|\\
+\>\verb|Texparent| \>the name of parent file
+which can be set by \verb|Setparent()|\\
+\>\verb|Dirhead| \>the beginning part of the path\\
+\>\verb|Dirlib| \>the path to the library ketlib\\
+\>\verb|Dirbin| \>the path to ketbin\\
+\>\verb|Dirwork| \>the path to the working directory
+which can be set by \verb|Changework()|\\
+\>\verb|Shellfile| \>the name of shell file
+\end{tabbing}
+Contrarily, the reserved variables listed below are the global variables
+usend in the library of \ketcindy , whence cannot be changed
+by users.
+
+\vspace{\baselineskip}
+\noindent
+ADDAXES, ArrowlineNumber, ArrowheadNumber, BezierNumber, COM0thlist, COM1stlist, COM2ndlist, Dq, FUNLIST, Fnamesc ,Fnamescibody,Fnameout,Fnametex, GDATALIST, GLIST, GCLIST, GOUTLIST, KCOLOR, KETPICCOUNT,KETPICLAYER, LETTERlist, LFmark, MilliIn, PenThick,PenThickInit, POUTLIST, SCALEX, SCALEY, SCIRELIST, SCIWRLIST, TenSize, TenSizeInit, ULEN, XMAX, XMIN, YaSize, YaThick, YMAX, YMIN, VLIST
+
+\vspace{\baselineskip}
+
+A list can be defined by putting its elements in a square bracket
+with commas separating each other.
+The attribute of each element does not matter.
+The $n$-th element can be referred by using an underbar.
+For instance, the commands
+
+\begin{verbatim}
+ list=[1,2,3,4,5];
+ list_2="a";
+\end{verbatim}
+make the second element be substituted by the letter \verb|"a"|.
+
+
+\subsection{Frequently used commands}
+
+\noindent
+{\bf Displaying the computed output}
+
+\noindent
+The following commands
+make the current value of the variable
+on the console view.
+
+\begin{tabbing}
+12345\=6789012345678989012345678901234567890\=123\=\kill
+\>\verb|print(the name of variable);| \> without a line break\\
+\>\verb|println(the name of variable);| \> with a line break\\
+\end{tabbing}
+
+\noindent
+{\bf Conditional branching}
+
+\noindent
+The commnad \verb|if(A,B,C)| executes \verb|B| if \verb|A| is true
+and \verb|C| otherwise.
+The followings are frequently used.
+Nested conditions can be interpreted.
+
+\begin{tabbing}
+12345\=67890123456789890\=12345678901234567890123\=\kill
+\>\verb|if(a>b,...);|\\
+\>\verb|if(a<b,...);|\\
+\>\verb|if(a>=b,...);| \> $a\geqq b$\\
+\>\verb|if(a<=b,...);| \> $a\leqq b$\\
+\>\verb|if(a=b,...);|\\
+\>\verb|if(a!=b,...);| \> $a\neq b$\\
+\end{tabbing}
+
+\noindent
+{\bf Loop program}
+
+\noindent
+The commnad \verb|for(n,operation)| executes the operation
+$n$ times. If the counter should be specified,
+modify the command as \verb|for(n,s,operation)|.
+where the value of $s$ is successively changed.
+Loop program with respect to some list instead of counter
+is also possible via the command as \verb|forall(list,operation)|.
+For example, the commands
+
+\begin{verbatim}
+ sglist=[[A,B],[C,D],[E,F]];
+ forall(sglist,Listplot(#));
+\end{verbatim}
+have the same output as
+\begin{verbatim}
+ Listplot([A,B]);
+ Listplot([C,D]);
+ Listplot([E,F]);
+\end{verbatim}
+
+\noindent
+{\bf User's definition of functions}
+
+\noindent
+The format of definition is \verb|function name(argument):=(operation)|.
+For example, if we define the function \verb|sign(n)| by
+\begin{verbatim}
+ sign(n):=(
+ if(n>0,print("positive"),print("0 or negative"));
+ );
+\end{verbatim}
+it can be used as
+\begin{verbatim}
+ n=3;
+ println(sign(n));
+\end{verbatim}
+
+\mbox{}
+
+\noindent
+{\bf Reference to geometric elements}
+
+\noindent
+The position of a point can be specified
+with both its name and the list of its $x,y$-coordinates.
+Thus, both of the following formats are allowed.
+\begin{verbatim}
+ Listplot("1",[[1,1],[4,5]]);
+ Listplot("1",[A,B]);
+\end{verbatim}
+Also we can get the coordinate of a point explicitly
+via the commands
+like \verb|A.xy|, \verb|A.x|, and \verb|A.y|.
+
+\mbox{}
+
+\noindent
+{\bf List processing}
+
+\noindent
+The list of integers between $a$ and $b$
+is generated via the command \verb|a..b|.
+For instance, the synchronized use with the command \verb|apply|
+as below gives the shape of pentagram.
+\begin{verbatim}
+ r=2;
+ pt=apply(0..5,r*[cos(pi/2+#*4*pi/5),sin(pi/2+#*4*pi/5)]);
+ repeat(5,s,Listplot(text(s),[pt_s,pt_(s+1)]));
+\end{verbatim}
+Here the Cindyscript command \verb|text|
+is used to convert the number into string.
+
+
+
+% -------------- Calling other softwares --------------
+
+\newpage
+
+\section{Collaboration with other softwares}
+
+\subsection{Overview}
+
+\ketcindy\ has functionalies to call other softwares such as Maxima, Risa/Asir, R and C.
+Here, we introduce how to call Maxima.\vspace{1mm}
+
+The steps are as follows.\vspace{-2mm}
+
+\begin{enumerate}
+\item Generate the shell file to call a CAS.\vspace{-2mm}
+\item Execute the file.\vspace{-2mm}
+\item Return the result as text.\vspace{-2mm}
+\item Use the result in \ketcindy .\vspace{-2mm}
+\item Produce the PDF file.\vspace{-2mm}
+\end{enumerate}
+
+And the flowchart is as follows:
+\begin{center}
+{\scalebox{0.9}{\input{Fig/calling.tex}}}
+
+\end{center}
+
+When interfacing with Maxima, commands \texttt{Mxfun}, \texttt{CalcbyM} and \texttt{Mxtex} are all we need to complete the task. \texttt{Mxfun} and \texttt{CalcbyM} are for calling single command and multi commands of Maxima respectively. \texttt{Mxtex} is used for code conversion to \LaTeX. The output of Maxima is returned to \ketcindy\ as a string or a list of strings for further processing.
+
+The options of these commands are:\\
+\hspace*{10mm}\Ltab{25mm}{{\tt "m/r"}}To decide whether the result file will be made again or not. \\
+\hspace*{10mm}\Ltab{25mm}{}If these options are not given, \ketcindy\ decides automatically.\\
+\hspace*{10mm}\Ltab{25mm}{{\tt "Disp=y/n"}}To decide whether the result will be displayed in the console or not. \\
+\hspace*{10mm}\Ltab{25mm}{}It is only availabe for \texttt{Mxfun} and \texttt{Mxtex}.
+The default is "y".
+
+
+\subsection{Commands related to Maxima}
+
+\subsubsection*{Mxfun}
+
+The arguments are name of variable in \ketcindy, name of a function of Maxima, and a list of arguments of the function.\\
+\hspace*{10mm}\verb|Mxfun("1","diff",["sin(x)","x"]);| // The return is "cos(x)", assgined to mx1.\\
+The above is equivallent to\\
+\hspace*{10mm}\verb|Mxfun("1","diff(sin(x),x)",[]);|
+
+
+\subsubsection*{Mxtex}
+
+The arguments are name of variable in \ketcindy, an expression in Maxima format.\\
+\hspace*{10mm}\verb|Mxtex("1",mx1);| // The return is \verb|"\cos x"|, assgined to tx1.\\
+\hspace*{10mm}\verb|Expr([0,1],"e",tx1]);|
+
+\begin{center}
+\input{Fig/maxima1.tex}
+\end{center}
+
+\subsubsection*{CalcbyM}
+
+The arguments are name of variable in \ketcindy, a list of commands and the arguments of Maxima.\\
+\hspace*{10mm}\verb|fn="sin(x)^4";|\\
+\hspace*{10mm}\verb|cmdL=[|\\
+\hspace*{10mm}\verb| "df:diff",[fn,"x"],|\\
+\hspace*{10mm}\verb| "df:ratsimp",["df"],|\\
+\hspace*{10mm}\verb| "F:integrate",[fn,"x"],|\\
+\hspace*{10mm}\verb| "F","ratsimp",["F"],|\\
+\hspace*{10mm}\verb| "df::F",[]|\\
+\hspace*{10mm}\verb|];|\\
+\hspace*{10mm}\verb|CalcbyM("ans",cmdL);|\vspace{2mm}\\
+The returned value is a list of df and F as strings, though these are not displayed in the console. They can be used, for example,\vspace{2mm}\\
+\hspace*{10mm}\verb|Plotdata("1",fn,"x",["Num=200","do"]);|\\
+\hspace*{10mm}\verb|Plotdata("2",ans_1,"x",["Num=200","dr"]);|\\
+\hspace*{10mm}\verb|Plotdata("3",ans_2,"x",["Num=200","da"]);|\\
+\hspace*{10mm}\verb|Mxtex("1",fn);|\\
+\hspace*{10mm}\verb|Mxtex("1",ans_1);|\\
+\hspace*{10mm}\verb|Mxtex("2",ans_2);|\\
+\hspace*{10mm}\verb|Expr([A,"e",tx1,B,"e",tx2,C,"w",tx3]);|
+
+\vspace{2mm}
+
+\begin{center}
+\input{Fig/s10diffint.tex}
+\end{center}
+
+\noindent
+{\bf Remark} See KeTCindyreferenceE.pdf for more information.
+
+\subsection{Commands related to R}
+
+\verb|Rfun| and \verb|CalcbyR| are simillar to \verb|Mxfun| and \verb|CalcbyM|.\\
+ See \verb|KeTCindyreferenceE.pdf| or \verb|samples/s08R| for more information.
+
+% -------------- 3d figures --------------
+
+\newpage
+
+\section{Three Dimentional figures of \ketcindy}
+
+\subsection{Summary and Geometric Elements}
+
+In KeTCindy's 3D-mode, there are two rectangular areas surrounded by a white frame on the Euclidean view.
+
+The main area on the left side of the screen is simillar to that of two dimentional figures. Figures in this area will be drawn to the \TeX\ document. The view direction can be moved with sliders under the main area. \verb|TH| and \verb|FI| mean angles $\theta$ and $\varphi$ respectively, which are polar cocordinates of the view direction.
+
+Figures from the view direction $(0,\ \varphi)$ are displayed in the sub area on the right side.
+
+ \hspace{40mm} mainarea \hspace{40mm} subarea
+\begin{center}
+\includegraphics[bb=0.00 0.00 863.04 378.52,width=12cm]{Fig/3dscreen.pdf}
+\end{center}
+
+With internal command \verb|Ptseg3data| which is called in \verb|Start3d|,
+a point put to the main area with the drawing tool of Cinderella is regarded as a 3D point by \ketcindy, and a correspoinding point is put in the sub area.
+Though the initial coordinate of $z$ is 0, we can change it moving the point in the sub area.
+
+For example, if we put point \verb|A| on the main area, point \verb|Az| will be put in the sub area and the 3D coordinates calculated from \verb|A| and \verb|Az| are assigned to varible \verb|A3d|.\vspace{-1mm}
+
+\begin{description}
+\item[\bf Remark]Note that point \verb|Az| will not be deleted automatically even if point \verb|A| is deleted. We should delete it manually.
+\end{description}
+
+Geometric segment in the main area generates the corresponding geometric segment in the sub area as well.
+
+\subsection{Lines and Curves}
+
+\ketcindy\ commands \verb|Spaceline| and \verb|Spacecurve| are used do draw lines and curves in the space. Additionally, \verb|Xyzax3data| is used to draw axis.
+
+\begin{description}
+\item[Examples]\mbox{}\\
+\verb|Xyzax3data("","x=[-5,5]","y=[-5,5]","z=[-5,5]");|\\
+\verb|Spacecurve("1","3*[cos(t),sin(t),0.1*t]","t=[0,4*pi]",["Num=200"]);|\\
+\verb|pt1=[3,0,0]; pt2=[3,0,3*0.1*4*pi];|\\
+\verb|Spaceline("1",[pt1,pt2]);|\\
+\verb|Skeletonparadata("1");|
+
+\item[Remark]The last command skeleton elimination is for skeleton elimination.
+Compare two figures below. The right one is with skeleton elimination.
+
+\end{description}
+
+\begin{center}
+\input{Fig/spacelinecurve1.tex}\hspace{10mm}\input{Fig/spacelinecurve2.tex}
+\end{center}
+
+\subsection{Two Dimensional Figures}
+
+Data of two dimensional figures such as polyhedra or planes are given in obj format.
+
+\begin{description}
+\item[Examples]\mbox{}\\
+\verb|Start3d();|\\
+\verb|vertex=[[2,2,-2],[2,-2,-2],[-2,-2,-2],[-2,2,-2]];|\\
+\verb|Reflect3d1(``1'',vertex,[[0,0,0],[1,0,0],[0,1,0]];|\\
+\verb|vertex=concat(vertex,ref3d1);|\\
+\verb|edge=[[1,2,6,5],[1,5,8,4],[1,4,3,2],[2,3,7,6],[3,4,8,7],[5,6,7,8]];|\\
+\verb|cube=[vertex,edge];|\\
+\verb|plane=[[[-3,1,-3],[3,-1,-3],[-4,5,3],[2,3,3]],[[1,2,4,3]]];|\\
+\verb|tmp=Concatobj([cubic,plane]);|\\
+\verb|VertexEdgeFace("1",tmp,["Vtx=nogeo","Edg=nogeo"]);|\\
+\verb|Nohiddenbyfaces("1","phf3d1");| // for the figure on the left
+
+\item[Remark]\mbox{}\\
+Command \verb|Concatobj| combines data in obj format.\\
+Command \verb|VertexEdgeFace| assigns vertices to {\tt phv}, edges to {\tt phe} and faces to {\tt phf}.\\
+Command \verb|Nohiddenbyfaces| is for hiddenline elimination.\\
+Use \verb|Skeletonparadata("1")| if the figure on the right is desirable.
+\end{description}
+
+\vspace{-10mm}
+
+\begin{center}
+\input{Fig/polygonplane1.tex}\hspace{10mm}\input{Fig/polygonplane2.tex}
+\end{center}
+
+\noindent
+{\bf Remark} See \verb|KeTCindyreferenceE.pdf| or \verb|samples/s05spacefigure| for more information.
+
+\subsection{Surfaces}
+
+Two variable function is defined as a list of one of the followings.
+
+\begin{enumerate}[\hspace*{5mm}\bf 1.]
+\item \verb|["z=f(x,y)","x=[a,b]","y=[c,d]"]|
+\item \verb|["z=f(x,y)","x=x(u,v)","y(u,v)","u=[a,b]","v=[c,d]"]|
+\item \verb|["p","x=x(u,v)","y=y(u,v)","z=z(u,v)","u=[a,b]","v=[c,d]"]|
+\end{enumerate}
+
+Optionally, you can add what boundaries should be drawn.
+The default is "wesn". Here, for example, "w" means the boundary defined by $[a,t]\ (c\leqq t\leqq d)$.
+
+\ketcindy\ calls C to speed up the calculation of hidden lines elimination.
+
+\begin{description}
+\item[Example]\mbox{}\\
+\verb|Start3d();|\\
+\verb|Xyzax3data("","x=[-5,5]","y=[-5,5]","z=[-5,5]");|\\
+\verb|fd=["z=x^2-y^2","x=[-2,2]","y=[-2,2]","senw"];|\\
+\verb|Startsurf();|\\
+\verb|Sfbdparadata("1",fd);|\\
+\verb|Crvsfparadata("1","ax3d","sfbd3d1",fd);|\\
+\verb|ExeccmdC("1");|
+\verb|Windispg();|
+
+\begin{center}
+\input{Fig/saddle1E.tex}\hspace{10mm}\input{Fig/saddle2E.tex}
+\end{center}
+
+\item[Remark]Wires can be added if necessary with command \verb|Wireparadata| as seen in the upper right side figure.
+The line-style also can be changed.
+
+See \verb|KeTCindyreferenceE.pdf| or \verb|samples/s09surfaceC| for more information.
+\end{description}
+
+\subsection{Generating Files in Obj Format}
+
+\ketcindy\ can generate files of 3D figures in obj format. Moreover, \ketcindy\ also can call Meshlab which is a 3D viewer.
+
+\begin{description}
+\item[Examples]\mbox{}\\
+\verb|Xyzax3data("","x=[-5,5]","y=[-5,5]","z=[-5,5]");|\\
+\verb|fd=["p","x=4*sin(V)*cos(U)","y=4*sin(V)*sin(U)","z=4*cos(V)",|\\
+\verb| "U=[pi/2,4*pi/2]","V=[0,pi]","we"];|\\
+\verb|Mkobjcmd("1",fd,[40,40,"-"]);|\\
+\verb|Mkobjcrvcmd("2","ax3d",[0.05,"xy"]);|\\
+\verb|Mkobjsymbcmd("x",0.2,0,[0,1,0],[5.2,0,0]);|\\
+\verb|Mkobjsymbcmd("y",0.2,0,[1,0,0],[0,5.2,0]);|\\
+\verb|Mkobjsymbcmd("z",0.2,0,[0,1,0],[0,0,5.2]);|\\
+\verb|SetObj();|
+\item[Remark]See \verb|KeTCindyreferenceE.pdf| or \verb|samples/s13meshlab| for more information.
+\end{description}
+
+% -------------- Making slide --------------
+
+\newpage
+
+\section{Making Slides}
+
+\subsection{Outline}
+
+\ketcindy\ has functions to make slides for presentation with the help of \verb|layer| environment which is defined in \verb|ketlayer.sty|.
+See \verb|KeTpicStyleE.pdf| for details about \verb|layer|.
+
+You need both a cindy file and a text file with the same header. For simple preparation, copy \verb|template2slide.cdy| to your work folder, rename the name, for example \verb|makeslide.cdy|, double click the file and press the button \verb|title| in the screen, then \verb|makeslide.txt| will be generated.
+
+The following chart shows the relation between them.
+
+\begin{center}
+\input{Fig/makeslideE}
+\end{center}
+
+If necessary, edit \verb|Settitle| in CindyScript editor, and press the gear mark. Open the text file, and write commands of \ketcindy\ Slide and \TeX\ as follows.
+
+\begin{verbatim}
+ title::slide0//
+ main::Introduction//
+ \slidepage[m]//
+ new::Programming Language//
+ %repeat=6,para//
+ \slidepage//
+ itemize//
+ item::Python//
+ %thin[2,-]::item::Ruby//
+ %thin[3,-]::item::Java//
+ %thin[4,-]::item::JavaScript//
+ %thin[5,-]::item::CindyScript//
+ %thin[6,-]::item::C//
+ end//
+\end{verbatim}
+
+\begin{description}
+\item[Remark]``//'' should be added to the end of all lines. Use ``||||'' when you want to write \verb|//|.
+\end{description}
+
+%\begin{center}
+%\includegraphics[bb=0.00 0.00 743.00 632.00,height=60mm]{fig/slidescreen.pdf}\hspace{5mm}
+%\includegraphics[bb=0.00 0.00 802.00 633.00,height=60mm]{fig/slidescript.pdf}
+%\end{center}
+
+Press the button \verb|Slide| in Cindy Screen, then \ketcindy\ will make \TeX\ file \verb|makeslide.tex|,
+typeset it and displays the pdf file as follows. If there occurs an error, check the text file or the \TeX\ file.
+
+\begin{center}
+\fbox{\includegraphics[bb=0.00 0.00 542.00 385.00,height=35mm]{Fig/slidepdf1.pdf}}\hspace{5mm}%
+\fbox{\includegraphics[bb=0.00 0.00 541.00 380.00,height=35mm]{Fig/slidepdf2.pdf}}\hspace{5mm}%
+\fbox{\includegraphics[bb=0.00 0.00 543.00 382.00,height=35mm]{Fig/slidepdf3.pdf}}\hspace{5mm}%
+\end{center}
+
+\subsection{Commands of \ketcindy\ slide}
+
+You can use the following commands.\\
+\verb| title::slide0 (::wallpaper)//|\\
+\verb| Rem) Put only once at the first line.|\\
+\verb| main::(main title)//|\\
+\verb| new::(page title)//|\\
+\verb| enumerate//|\\
+\verb| =\begin{enumerate}|\\
+\verb| Rem) Add the option such as [(1)] using :: .|\\
+\verb| itemize//|\\
+\verb| =\begin{itemize}|\\
+\verb| layer::{xsize}{ysize}//|\\
+\verb| =\begin{layer}{xsize}{ysize}|\\
+\verb| Rem) "layer" is an environment defined in ketlayer.sty.|\\
+\verb| item::sentence//|\\
+\verb| =\item sentence|\\
+\verb| putnote::dir{xpos}{ypos}::filename(,scale)//|\\
+\verb| =putnotedir{xpos}{ypos}{\input{fig/filename}}||\\
+\verb| Rem) "putnote" is a command defined in ketlayer.sty|\\
+\verb| end//|\\
+\verb| =\end{itemize,enumerate,layer}|\\
+\verb| ...//|\\
+\verb| To insert a blank line.|
+
+\noindent
+You can also use the following \TeX\ mcores added by \ketcindy.\\
+\verb| \slidepage,\slidepage[m]//|\\
+\verb| To display the number each page.|\\
+\verb| \slidepage[m] is used for the \verb|main| page.|\\
+\verb| \setthin{thickness}|\\
+\verb| To change the thickness of thin letters temporarily.|\\
+\verb| \inputsound, \inputmovie|\\
+\verb| To insert mp3/mp4 files.|
+
+
+\begin{description}
+\item[Remark]Any other \TeX\ macroes are available. Put \verb|%%| instead of \verb|%| to comment out .
+\end{description}
+
+
+\subsection{Display of Page step by step}
+
+\begin{enumerate}[1)]
+\item Put just after new,\\
+\verb| %repeat=number of steps//|
+\item Put at the head of each line as\\
+\verb| %[2,-]::sentences|\\
+\verb| display at all steps from 2|\\
+\verb| %[-,2]::sentences|\\
+\verb| display at all steps until 2|\\
+\verb| %[1..3,5]::sentences|\\
+\verb| display at steps of 1,2,3 and 5|
+\item Use \verb|%thin| to display with thin letters.\\
+\verb| %thin::[2,-]::sentence|
+\item The dencity can be changed with Setslidebody or \verb|\setthin|.
+\end{enumerate}
+
+\subsection{Making Flip Animation}
+
+\begin{enumerate}[1)]
+\item Define function \verb|Mf(s)|, the state at s.
+\item Put command \verb|Setpara| in the script editor as\\
+\verb| Setpara(subfolder,funcitonstr(mf(s)),range,options);|\\
+\verb| options=["m/r", "Div=25"];|
+\item Describe in the text file as\\
+\verb| %repeat=, para=subfolder:{0}:s{60}{10}:input(:scale)//|
+\item Press buttons \verb|ParaF| and \verb|Flip|, then \verb|subfolder| will be generated.
+\item Press button \verb|Slide|.
+\end{enumerate}
+
+\subsection{Making Animation}
+
+\begin{enumerate}[1)]
+\item Add the following in the script editor\\
+\verb| Addpackage(["[dvipdfmx]{animate}"]);|
+\item Add in the second option of Setpara,\\
+\verb| "Frate=num of frame in the second,"Scale=scale,"OpA=option of animation" |
+\item Press buttons \verb|ParaF| and \verb|Anime|, then \verb|subfolder| will be generated.
+\item Use \verb|\input|, not layer, to display.
+\end{enumerate}
+
+\subsection{Commands to Insert a mp3/mp4 file}
+
+To insert a mp3 or mp4 file, change the first line to\\
+\verb| title::slide0|\\
+\verb| ::\usepackage{ketmedia}|\\
+\verb| ::\usepackage[dvipdfmx]{media9}//|\vspace{2mm}
+
+\noindent
+Use \verb|\inputsound| or \verb|\inputsoundclick| for mp3 files.\\
+\verb| \inputsountclik[90]{folder/}{mp3file} %starts when the button clicked|\\
+The arguments are horizontal position(default is 90) of buttons, the folder, the file name.
+\vspace{2mm}
+
+\noindent
+Use \verb|\inputmovie| for mp4 files.\\
+\verb| \inputsountclik[90]{1}{0.4}{folder/}{mp4file} %starts when the button clicked|
+The 2nd and 3rd arguments are width and height as the coefficiients of \verb|\linewidth|
+
+\subsection{Changing Style}
+
+The default styles such as size and color of letters can be changed.
+See \verb|KeTCindyReferenceE,pdf| or \verb|samples/s07slides|.
+
+\end{document} \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/KeTCindyGuideJ.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/KeTCindyGuideJ.tex
new file mode 100644
index 0000000000..24f3457731
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/KeTCindyGuideJ.tex
@@ -0,0 +1,583 @@
+\documentclass[papersize,a4paper,12pt,uplatex]{jsarticle}
+\usepackage{ketpic,ketlayer}
+\usepackage{amsmath}
+% \usepackage{amsmath,newtxmath}
+\usepackage[dvipdfmx]{graphicx,color}
+\usepackage{wrapfig}
+\usepackage[dvipdfmx,bookmarks=false,colorlinks=true,linkcolor=blue]{hyperref}
+\setmargin{20}{20}{15}{25}
+\usepackage{setspace}
+\usepackage{comment}
+\setcounter{tocdepth}{3}
+
+\begin{document}
+\title{\ketcindy の概要}
+\author{\ketcindy\ Project Team}
+\maketitle
+
+\begin{center} - 第3.2版 -\end{center}
+\hypertarget{index}{}
+\tableofcontents
+
+\newpage
+
+\section{\ketcindy について}
+\subsection{システムの構成}
+\ketcindy は,Cinderella の作図機能を利用して,作図データの\LaTeX ファイルを作成するためのスクリプトライブラリである。\ketcindy はCinderellaのプログラミング言語Cindyscriptで記述されており,ユーザーはCinderella によるインタラクティブな作図機能と,CindyScript によるプログラミングを用いて,\LaTeX 文書の挿入図を効率よく作成することができる。また,各種数式処理ソフトと連携して計算を行うことができる。
+
+\begin{center}
+\scalebox{0.9}{ \input{Fig/concept}}
+\end{center}
+
+Cinderellaで作図した図のデータは,\ketcindy により,いったんRのファイルに書き出される。これをRで処理して\TeX ファイルを作成する。できた\TeX ファイルを,本文中に inputコマンド で挿入すれば図が表示される。(\ketcindy の初期の版ではこのデータ処理にScilabを用いていた。)
+
+CinderellaとRやその他のソフトウェアとの連携には,バッチファイル(Macではシェルファイル)を用いている。(概念図の両方向矢印) バッチファイルは kc.bat,シェルファイルは kc.sh で,\ketcindy が目的に応じてこれらのファイルを書き出して実行するようになっている。
+
+したがって,KeTCindyでの図ファイルの作成手順は次のようになる。
+
+(1) 必要に応じてCinderellaの作図ツールで,点や線を作図しておく。
+
+(2) Cindyscript エディタでプログラムを書く。
+
+(3) 出力する。
+
+\newpage
+%--------- ketcindy による作図手順----------------
+\subsection{\ketcindy による作図手順}
+
+\ketcindy で作図し,TeXのファイルを作図する手順をチュートリアル形式で示す。
+
+\subsubsection{平面幾何}
+
+\ketcindy のシステムに同梱されている,template1basic.cdy をひな形として用いる。適当な場所に複製を作り,名前を変えておこう。ここでは,単に template.cdy とする。
+
+template.cdy をダブルクリックして開き,図が表示されたら,Ctrl+9 ( Windows ) / ⌘+9 ( Mac ) でスクリプトエディタを開く。2つの画面はマルチウィンドウにしておくのがよい。
+
+\vspace{\baselineskip}
+\begin{center}\includegraphics[bb=0.00 0.00 500.03 306.52,width=10cm]{Fig/start01.pdf}\end{center}
+
+この三角形で Cinderellaの作図機能を用いて内心を求め,内接円を描く。
+
+まず,スクリプトエディタの \verb|Listplot([A,B,C,A]);| の行頭にスラッシュを2本書き入れ,Shift+Enter で実行する。こうすると,この行はコメント行となり実行されない行になる。その結果,三角形が消えて点だけ残る。
+
+画面上部の作図ツールから「線分を加える」\includegraphics[bb=0.00 0.00 6.48 5.04,width=8mm]{Fig/segment.pdf} をクリックして選択し,点Aから点Bへドラッグすると線分が描かれる。同様にして,BC, CAを引く。
+
+\begin{center}\includegraphics[bb=0.00 0.00 414.02 329.02,height=3.5cm]{Fig/start02.pdf} \end{center}
+
+次に,角の二等分線を引く。「角の二等分線を加える」ツール \includegraphics[bb=0.00 0.00 6.48 5.04,width=8mm]{Fig/bisector.pdf} を選択し,辺BA,BCを順にクリックすると角ABCの二等分線が引かれる。 このとき,次図左のように,該当する角を表すガイドが出る。
+
+\hspace{20mm}\includegraphics[bb=0.00 0.00 402.02 325.02,height=3cm]{Fig/start03.pdf} \hspace{5mm}\includegraphics[bb=0.00 0.00 413.02 320.02,height=3cm]{Fig/start04.pdf}
+
+同様にして,角Aの二等分線を引き,「交点を求める」ツール\includegraphics[bb=0.00 0.00 6.48 5.04,width=8mm]{Fig/intersection.pdf}をクリックして,2本の二等分線を順にクリックすると交点が求められる。(角Aの二等分線を引いた直後はこれが選択状態にあるので,角Bの二等分線をクリックすればよい)
+
+\begin{center}\includegraphics[bb=0.00 0.00 397.02 319.02,height=3cm]{Fig/start05.pdf}\end{center}
+
+内接円の半径を決めるために,辺ACに垂直で点Dを通る直線を描く。「垂線を加える」ツール \includegraphics[bb=0.00 0.00 6.48 5.04,width=8mm]{Fig/multi-add-perp.pdf} を選択し,辺AC上でマウスボタンを押し,そのまま点Dへドラッグすると垂線が引ける。
+
+\hspace{20mm}\includegraphics[bb=0.00 0.00 403.02 319.02,height=3cm]{Fig/start06.pdf} \hspace{5mm}\includegraphics[bb=0.00 0.00 394.02 315.02,height=3cm]{Fig/start07.pdf}
+
+最後に,垂線と辺ACの交点を求める。
+
+\begin{center}\includegraphics[bb=0.00 0.00 409.02 312.02,height=3cm]{Fig/start08.pdf}\end{center}
+
+図が描かれたら,「要素を動かす」ツール \includegraphics[bb=0.00 0.00 6.48 5.04,width=8mm]{Fig/move.pdf} を選択して,始めの状態(動かすモード)に戻しておく。
+
+これで内心の作図と半径の作図ができた。内心円は描かなくてよい。
+
+スクリプトエディタに戻り,先ほど書いた // を消して \verb|Listplot([A,B,C,A]);| を有効にし,次のスクリプトを追加し,Shift+Enterで実行すると,内接円が描かれる。なお,2行目を \verb|Setfiles("innercircle")| として,ファイル名も設定しておく。
+
+\begin{verbatim}
+ Circledata([D,E]);
+ Pointdata("1",[D],["size=3"]);
+ Letter([A,"sw","A",B,"ne","B",C,"se","C",D,"ne2","I"]);
+\end{verbatim}
+
+\begin{center}\includegraphics[bb=0.00 0.00 396.02 322.02,height=4cm]{Fig/start09.pdf} \end{center}
+
+
+画面左上の「Figure」ボタンをクリックすると,プレビュー用のPDFができて表示される(下図左)。
+描画面で点Bをドラッグして三角形の形を変えれば,それに応じて出力する図も変えることができる(下図右)。
+
+\begin{center} \includegraphics[bb=0.00 0.00 396.02 331.02,height=4cm]{Fig/start10.pdf} \includegraphics[bb=0.00 0.00 348.02 284.51,height=4cm]{Fig/incenter03.pdf} \end{center}
+
+\vspace{\baselineskip}
+\ketcindy がTikZなどの作図支援ツールと異なるのは,Cinderellaの作図機能を用いてインタラクティブに図の調整ができる点である。簡単な図であれば,座標の計算は不要で,Cinderellaの作図画面を見ながら\ketcindy の作図関数でプログラムを書くだけでよい。
+
+なお,Cinderellaの作図機能については,付録の \hyperlink{geometrytool}{作図ツール} を参照されたい。
+
+%---------------- 関数のグラフ--------------------------
+\subsubsection{関数のグラフ}
+
+例として,$y=\sin x$ と $y=x$ のグラフを描く。
+
+template.cdy をダブルクリックして開き,Ctrl+9 ( Windows ) / ⌘+9 ( Mac ) でスクリプトエディタを開く。
+
+座標軸を描くので,\verb|Addax(0);| を \verb|Addax(1);| に変え,\verb|Listplot([A,B,C,A]);| は使わないので削除し,かわりに次のスクリプトを書く。
+
+\begin{layer}{150}{0}
+\putnotese{80}{5}{\includegraphics[bb=0.00 0.00 552.03 409.02,height=30mm]{Fig/xsinx01.pdf} }
+\end{layer}
+\begin{verbatim}
+ Plotdata("1","y=sin(x)","x");
+ Plotdata("2","y=x","x");
+\end{verbatim}
+
+これだけで右のようにグラフが描かれる。
+
+\vspace{15mm}
+%\begin{center}\includegraphics[bb=0.00 0.00 552.03 409.02,height=30mm]{Fig/xsinx01.pdf} \end{center}
+
+描画範囲は点NEとSWをドラッグして適当に決めよう。また,点A,B,Cが残ったままだが,これを関数名を表示する場所として利用するために適当な位置にドラッグして移動する。
+
+\begin{center}\includegraphics[bb=0.00 0.00 556.03 238.01,height=30mm]{Fig/xsinx02.pdf} \end{center}
+
+関数名と$x$軸上の交点を表示するために,関数 \verb|Expr()| を使って次のように書く。
+\begin{verbatim}
+ Expr([A,"e","y=\sin x",B,"e","y=x",[-pi,0],"s2","-\pi",[pi,0],"s2","\pi",
+ [2*pi,0],"s2","2\pi"]);
+\end{verbatim}
+
+注)改行せず1行に書いてよい。
+
+\begin{center}\includegraphics[bb=0.00 0.00 546.03 236.01,height=30mm]{Fig/xsinx03.pdf} \end{center}
+
+\verb|Figure| ボタンをクリックすると,次の図が描かれる。
+
+\vspace{\baselineskip}
+\begin{center}\input{Fig/xsinx} \end{center}
+
+
+%---------------- 空間図形 --------------------------
+\subsubsection{空間図形}
+
+\ketcindy のシステムに同梱されている samples フォルダから,s05spacefigure フォルダを開き,s0501basic.cdy をひな形として使う。適当な場所に複製を作り,名前を変えておくとよい。ここでは,3Dbasic.cdy として進める。
+
+3Dbasic.cdy を開くと次のような画面になる。
+
+\vspace{\baselineskip}
+\begin{center}
+ \includegraphics[bb=0 0 879.05 447.02 , width=8cm]{Fig/3dstart.pdf}
+\end{center}
+
+下のスライダで点TH,Fl をドラッグすると,空間での視点の位置が変わる。(座標軸が回転する)
+
+ここでは,正四面体と,高さを求めるのによく使われる補助線を描いてみよう。スクリプトエディタを開き,次の3行を消す。
+
+\begin{verbatim}
+ Ch=[1];
+ if(contains(Ch,1),
+ Skeletonparadata("1",[1.5]);
+ );
+\end{verbatim}
+
+かわりに次のスクリプトを書いて Shift+Enter で実行する。
+
+\begin{layer}{150}{0}
+\putnotese{90}{0}{ \input{Fig/tetrahedron}}
+\end{layer}
+\begin{verbatim}
+ Putpoint3d("A",2*[-1,-1/sqrt(3),0],"fix");
+ Putpoint3d("B",2*[1,-1/sqrt(3),0],"fix");
+ Putpoint3d("C",2*[0,sqrt(3)-1/sqrt(3),0],"fix");
+ Putpoint3d("D",2*[0,0,sqrt(3)],"fix");
+ Putpoint3d("M",(B3d+C3d)/2,"fix");
+ phd=Concatobj([[A,B,C],[A,B,D],[A,C,D],[B,C,D]]);
+ Spaceline("1",[D,M,A]);
+ VertexEdgeFace("1",phd,["Edg=nogeo"]);
+ Nohiddenbyfaces("1","phf3d1");
+\end{verbatim}
+
+
+%---------------- 作表 --------------------------
+\subsubsection{作表}
+
+\TeX\ で表を作るのはかなり面倒だが,\ketcindy\ を使えば比較的簡単に作表ができる。次の図は関数の増減・凹凸表である。以下は紹介にとどめる。関数リファレンスに例を掲載しているので参照されたい。
+
+\begin{center} \input{Fig/zogen3} \end{center}
+
+% ====== 他のソフトとの連携 ===============
+
+\subsubsection{他のソフトとの連携}
+
+\ketcindy\ はCindyscriptで記述されているが,Cindyscriptはプログラミング言語であり,数式処理ソフトではない。そこで,R や Maxima などと連携することにより,機能を拡張することができるようになっている。統計計算はR,数式処理を用いた計算はMaximaを利用すると便利である。
+
+【例】Rを用いて箱ひげ図を描く
+
+ \begin{center}\scalebox{0.8}{ \input{Fig/boxplot} } \end{center}
+
+
+【例】Maxima を用いて $ \sin x $の7次のテイラー展開を行う。
+
+ \begin{center}\scalebox{0.8}{ \input{Fig/taylor}} \end{center}
+
+% ====== プロットデータ ===============
+\newpage
+\section{プロットデータ}
+プロットデータ(Plot Data) とは,関数のグラフや幾何要素を描くデータのことである。\ketcindy\ では PD と略すことがある。
+
+たとえば,線分は端点の座標2つからなるリストで表現できる。曲線は,描画範囲を分割して線分の集まりとして描画しており,このときのプロットデータはそれらの線分の端点のリストである。
+
+プロットデータの名称は\ketcindy が次の規則により命名する。
+
+\vspace{\baselineskip}
+・名称の頭部は,プロットデータを作成する関数ごとに決まっている。
+
+・第1引数に name が与えられる場合,name を頭部に付加する。
+
+\hspace{10mm} 【例】\verb|Listplot("1",[[0,0],[1,2]]);| のとき,sg1
+
+・第1引数の name を省略できる場合,引数で用いられた点の名前を頭部に付加する。
+
+\hspace{10mm} 【例】\verb|Listplot([A,B,C]);| のとき,sgABC
+
+
+\vspace{\baselineskip}
+プロットデータを生成したときは,Cindyscriptエディタのコンソールにその名称を表示する。たとえば,\verb|Listplot([A,B,C,A])| で三角形ABCを描くと,コンソールに
+
+\hspace{10mm} \verb|generate Listplot sgABCA|
+
+と表示される。プロットデータを操作する関数では,この名称を用いる。
+
+\begin{center}\includegraphics[bb=0.00 0.00 298.02 115.01,width=6cm]{Fig/pdtoconsole.pdf} \end{center}
+
+プロットデータの内容は,Cindyscriptの println() 関数を用いてコンソールに表示することができる。たとえば上記の場合,
+
+\hspace{10mm} \verb|println(sgABCA)|
+
+とすると,
+
+\hspace{10mm} \verb| [[1,3],[-1,0],[3,0],[1,3]] |
+
+と表示される。A,B,C,A のそれぞれの座標からなるリストである。
+
+プロットデータは,Cindyscriptによるプログラムで作成してそれを\ketcindy で利用することもできる。( \hyperlink{listplot}{Listplot()の例} を参照)ただし,要素の数が大きいとエラーとなるので,1つのプロットデータの要素は200程度とするのがよい。これより多い場合は分割する。
+
+\newpage
+%======= Cindyscript ===========
+
+\section{Cindyscript}
+\subsection{Cindyscriptエディタ}
+CindyscriptはCinderellaのプログラミング言語で,Cinderella上のスクリプトエディタで記述する。スクリプトエディタは,「スクリプト」メニューの「Cindyscript」を選択するか,Ctrl+9 (Windows) / ⌘+9 (Mac) で開く。\\
+\vspace{110mm}
+\begin{layer}{150}{0}
+\putnotese{5.5}{15}{\includegraphics[bb=0.00 0.00 687.84 451.68,width=12.5cm]{Fig/slot.pdf}}
+\arrowlineseg[16]{20}{20}{10}{90}
+\putnotese{15}{5}{スロット}
+\arrowlineseg[16]{40}{20}{10}{100}
+\putnotese{32}{5}{ページ名}
+\arrowlineseg[16]{80}{20}{15}{140}
+\putnotese{50}{5}{フォントサイズ}
+\arrowlineseg[16]{107}{20}{15}{140}
+\putnotese{80}{5}{描画面を前面に}
+\arrowlineseg[16]{120}{20}{10}{110}
+\putnotese{110}{5}{実行}
+\arrowlineseg[16]{125}{20}{10}{90}
+\putnotese{120}{5}{ヘルプ}
+\putnotese{90}{35}{メインウィンドウ}
+\putnotese{90}{65}{コンソール}
+\end{layer}
+
+\noindent
+{\bf スロット}
+
+スロットはそれぞれの実行タイミングでスクリプトを実行するものであり,他のプログラミング言語にはない特徴である。(スロットが隠れているときは境界線をドラッグする)
+
+よく使うスロットは次の通り。
+
+\begin{tabbing}
+123456789012345678\=\kill
+Draw \>描画面になにか変化が起きる(点を動かすなど)と実行される。\\
+ \>通常はここにスクリプトを書く。ひな形の templatebasic1.cdy では,\\
+ \>Ketinit() などが記述された figures ページが用意されている。\\
+Initialization \>スクリプトを実行すると、始めに1度 だけ実行される。\\
+ \>したがって,関数定義や変数の初期設定などを書く。\\
+ \>ひな形の templatebasic1.cdy ではここに KETlib というページがあり,\\
+ \>\ketcindy の初期設定に関する記述がある。\\
+Key Typed \>キーボードが押されたとき実行される。\\
+ \> KeTCindyでは,ボタンによらずキーボードで出力を行うための\\
+ \>スクリプトが書かれている。
+\end{tabbing}
+
+1つのスロットに複数のページを作ることができる。たとえば,KETlib以外に初期設定のスクリプトを書く場合は,Initialzation スロットのフォルダアイコンをクリックすることで新しいページができる。
+
+KeTCindyの描画コマンドは Draw スロットに書く。
+
+\vspace{\baselineskip}\noindent
+{\bf ページ名}
+
+各スロットでは,ページを分けて記述することができる。各ページの名前はスクリプトエディタの上の欄に書くことができる。
+
+%\vspace{\baselineskip}
+\noindent
+{\bf フォントサイズ}
+
+編集エリアのフォントサイズを変更する。
+
+%\vspace{\baselineskip}
+\noindent
+{\bf 実行ボタン}
+
+プログラムを実行する。プログラムの実行は Shift+Enter でもできる。
+
+%\vspace{\baselineskip}
+\noindent
+{\bf ヘルプボタン}
+
+ブラウザを開いてマニュアルを表示する。
+
+%\vspace{\baselineskip}
+\noindent
+{\bf コンソール}
+
+print() 関数の結果やエラーメッセージが表示する。エラーメッセージは,「WARNING:」または「syntax error」に続いてその内容と該当する行番号が示される。これを読んでスクリプトの書き間違いをチェックする。
+
+\subsection{スクリプトの記述}
+編集エリアにプログラムを書くと,文字が色分けされて表示される。組み込み関数は青,ユーザー定義関数は紫,定義されていない関数は赤,文字列は緑で表示される。KeTCindyの関数はユーザー定義関数なので紫色で表示される。
+
+\begin{layer}{150}{0}
+\putnotese{35}{5}{\includegraphics[bb=0.00 0.00 350.02 184.01,width=7cm]{Fig/coloring.pdf} }
+\putnotee{5}{27}{組み込み関数}
+\arrowlineseg[20]{35}{27}{10}{180}
+\putnotee{77}{9}{ユーザー定義関数}
+\arrowlineseg[10]{67}{9}{8}{0}
+\putnotee{110}{17}{文字列}
+\arrowlineseg[15]{80}{17}{28}{0}
+\end{layer}
+\vspace{45mm}
+
+編集エリアでは,Ctrl+C と Ctrl+V によるコピーアンドペースト,Ctrl+X と Ctrl+V によるカットアンドぺーストができる。他のテキストエディタなどとの間でのコピーも同様にできる。
+
+文字列の選択はマウスドラッグまたは Shift+カーソルキーでおこなえる。
+
+Ctrl+F による検索はできない。
+
+スクリプトを記述するときの基本的なルールは次の通り。
+
+\vspace{\baselineskip}
+・基本的に小文字で書く。大文字と小文字は区別される。
+
+\hspace{5mm}\ketcindy では,Cindyscriptに組み込みの変数名・関数名と区別しやすいように,
+
+\hspace{5mm}次の規則により名前を付けている。
+
+\hspace{5mm}・グローバルな変数はすべて大文字か,大文字で始まるものとする。
+
+\hspace{5mm}・局所変数は小文字で,関数定義の冒頭で regional() により局所変数として宣言する。
+
+\hspace{5mm}・関数名は大文字で始まる。
+
+・複数の半角スペースは無視され,一つの半角スペースと見なされる。
+
+・行末にはセミコロンを書く。改行だけでは命令文の終わりにならない。
+
+\subsection{変数と定数}
+\vspace{\baselineskip}\noindent
+{\bf 変数}
+
+Cindyscriptでは,変数の型の宣言は不要。使用されたときに何が代入されたかで自動的に型が決まり,さらに,宣言し直さなくても異なる型の値を代入することができる。
+
+\vspace{\baselineskip}
+
+【例】
+\begin{verbatim}
+ a=10;
+ b=2;
+ c=a+sqrt(b);
+ a="の平方根";
+ println("10に "+b+a+" を加えると"+c);
+\end{verbatim}
+
+この例では,始めにaは整数型であるが,4行目で文字列に変わる。
+
+文字列はダブルクウォートでくくる。異なる型の演算には注意を要するが,例外的に,5行目のように,文字列と数を+演算子で結ぶと,数は文字列化されて結合される。
+
+\vspace{\baselineskip}\noindent
+{\bf 予約定数}
+
+Cindyscriptでは,円周率 (pi) と虚数単位(i) が定数として予約されている。i は,変数として使用することもでき,そのような場合,虚数単位に戻すには \verb|i=complex(0,1)| を実行する。
+
+\vspace{\baselineskip}\noindent
+{\bf KeTCindyの予約変数}
+
+ \ketcindy が内部的に使用する予約変数がある。そのうち次のものはユーザーが値を変更または設定することができる。
+\begin{tabbing}
+1234\=567890123\=45678989012345678901234567890123\=\kill
+ \>Fhead \>書き出されるファイル名の頭部。Setfiles() によって設定できる。\\
+ \>Texparent \>親プロセスのファイル名。Setparent()によって設定できる。\\
+ \>Dirhead \>パスの頭部\\
+ \>Dirlib \>ライブラリ ketlib のパス\\
+ \>Dirbin \>ketbin のパス\\
+ \>Dirwork \>作業ディレクトリのパス。Changework()によって設定できる。\\
+ \>Shellfile \>シェルファイル名
+\end{tabbing}
+
+以下の予約変数は,ライブラリが使用するグローバル変数であるので,ユーザーはこれらの変数に値を代入してはいけない。なお,変数は大文字小文字を区別するので,すべて小文字で書く分には支障はない。ユーザーが作るプログラムでは,すべて小文字か,先頭だけが大文字の変数を使うことを勧める。
+
+\vspace{\baselineskip}
+ADDAXES, ArrowlineNumber, ArrowheadNumber, BezierNumber, COM0thlist, COM1stlist, COM2ndlist, Dq, FUNLIST, Fnamesc ,Fnamescibody,Fnameout,Fnametex, GDATALIST, GLIST, GCLIST, GOUTLIST, KCOLOR, KETPICCOUNT,KETPICLAYER, LETTERlist, LFmark, MilliIn, PenThick,PenThickInit, POUTLIST, SCALEX, SCALEY, SCIRELIST, SCIWRLIST, TenSize, TenSizeInit, ULEN, XMAX, XMIN, YaSize, YaThick, YMAX, YMIN, VLIST
+
+
+\vspace{\baselineskip}\noindent
+{\bf リスト}
+
+リストとは,数や文字などを集めたもので,それぞれのものを「要素」といい,\verb|[ ]|の中にコンマで区切って記述する。要素は型を問わない。\ketcindy\ では,曲線を描くプロットデータが座標のリストであり,リスト処理をうまく使えば \ketcindy\ で効率的に作図ができる。
+
+リストのn番目の要素にアクセスするのに,アンダーバー\_ を使う。
+
+\begin{verbatim}
+ list=[1,2,3,4,5];
+ println(list_2);
+\end{verbatim}
+とすると,list の中の2番目の要素 2 が表示される。
+\begin{verbatim}
+ list=[1,2,3,4,5];
+ list_2="a";
+\end{verbatim}
+とすると,list の中の2番目の要素が文字 a に変わる。
+
+たとえば,曲線の交点を求める \hyperlink{intersectcrvs}{Intersectcrvs()} の戻り値から交点の座標を求めるにはアンダーバーを使う。使用例は,Intersectcrvs() の例を参照されたい。
+
+\subsection{よく使うCindyscriptのコマンド}
+\vspace{\baselineskip}\noindent
+{\bf 値の表示}
+
+print(値) :コンソールに値を表示する。改行しない。
+
+println(値) :コンソールに値を表示する。改行する。
+
+\vspace{\baselineskip}
+【例】関数Intersectcrvs() の戻り値を表示する。
+\begin{verbatim}
+ tmp=intersectcrvs("sgAB","crCD");
+ println(tmp);
+\end{verbatim}
+
+\vspace{\baselineskip}\noindent
+{\bf 条件判断}
+
+if(A,B,C) : もしAが真なら(成り立てば)Bを,偽ならCを実行する。
+
+Aの条件判断には次のものがよく使われる。
+ \begin{tabbing}
+1234\=56789012345678989012\=3456789012\=34567890123\=\kill
+ \> \verb|a|が\verb|b|より大きい \> \verb|if(a>b|,$\cdots$\\
+ \> \verb|a|が\verb|b|より小さい \> \verb|if(a<b|,$\cdots$\\
+ \> \verb|a|が\verb|b|以上 \> \verb|if(a>=b|,$\cdots$ (\verb|>|と=の順序に注意)\\
+ \> \verb|a|が\verb|b|以下 \> \verb|if(a<=b|,$\cdots$ (\verb|<|と=の順序に注意)\\
+ \> \verb|a|と\verb|b|が等しい \> \verb|if(a==b|,$\cdots$ (等号を2つ)\\
+ \> \verb|a|と\verb|b|が異なる \> \verb|if(a!=b|,$\cdots$\\
+\end{tabbing}
+
+if 文はネストして使うことができる。
+
+\vspace{\baselineskip}
+ 【例】n が正,負,ゼロのいずれかを判断して,コンソールに表示する。
+\begin{verbatim}
+ if(n>0,print("正"),if(n==0,print("0"),print("負")));
+\end{verbatim}
+
+\vspace{\baselineskip}\noindent
+{\bf 繰り返し}
+
+repeat(n,操作) :操作をn回繰り返す。
+
+repeat(n,s,操作) :操作をn回繰り返す。カウンタとしてsを使う。(文字は他でも可)
+
+\vspace{\baselineskip}
+ 【例】Aを4個並べて描画面に表示する。
+\begin{verbatim}
+ repeat(4,s,drawtext([s,0],4));
+\end{verbatim}
+ ここで,sの値は4回繰り返すうちに,1,2,3,4と変化する。
+
+\vspace{\baselineskip}\noindent
+{\bf リストによる繰り返し}
+
+ forall(list,処理) :リストの要素すべてに渡るように繰り返す。
+
+\vspace{\baselineskip}
+ 【例】点のペアをリストとし,線分を描く。
+\begin{verbatim}
+ sglist=[[A,B],[C,D],[E,F]];
+ forall(sglist,Listplot(#));
+\end{verbatim}
+ これは,
+\begin{verbatim}
+ Listplot([A,B]);
+ Listplot([C,D]);
+ Listplot([E,F]);
+\end{verbatim}
+とするのと同じ。ここで,\verb|#|は実行変数と呼ばれ,リストのそれぞれの要素を表す。
+
+\vspace{\baselineskip}\noindent
+{\bf ユーザー定義関数}
+
+ユーザー定義関数は次の書式で定義する。
+
+\hspace{10mm}関数名(引数):=(処理)
+
+\vspace{\baselineskip}
+【例】 引数の値の正負を表示する関数 sign(n) を定義する。
+\begin{verbatim}
+ sign(n):=(
+ if(n>0,print("正"),print("0または負"));
+ );
+\end{verbatim}
+定義した関数は
+\begin{verbatim}
+ n=3;
+ println(sign(n));
+\end{verbatim}
+のようにして使う。
+
+KeTCindyでは,アニメーションPDFを作成するときに,フレームを定義するのに使う。
+
+\vspace{\baselineskip}\noindent
+{\bf 幾何要素へのアクセス}
+
+Cinderellaでは,点の座標は同次座標で表されており,点の名称でそのまま座標を取得できることが多い。そのため,たとえば Listplot() 関数では,点を指定するのに,座標 \verb|[a,b]| の代わりに点名を使うことができる。
+
+\vspace{\baselineskip}
+Listplot() の書式1 \verb|Listplot("1",[[1,1],[4,5]])|
+
+Listplot() の書式2 \verb|Listplot("1",[A,B])|
+
+\vspace{\baselineskip}
+
+しかし,明確に直交座標で取得したい場合は \verb|A.xy|(x,y 座標) \verb|A.x|(x 座標 ) \verb|A.y|(y 座標) として取得する。
+
+\vspace{\baselineskip}\noindent
+{\bf リスト処理}
+
+Cindyscriptのリスト処理のうち,よく使うものを挙げる。
+
+aからbまでの整数のリストは \verb|a..b| (ドット2つ)で生成できる。このリストの各要素を番号代わりに使って,\verb|apply(list,expr)| を用いると座標のリストを作ることができる。\verb|apply(list,expr)| は,\verb|list| の各要素に,処理 \verb|expr| を施したリストを作る関数である。
+
+\vspace{\baselineskip}
+【例】星形五角形を描く
+\begin{verbatim}
+ r=2;
+ pt=apply(0..5,r*[cos(pi/2+#*4*pi/5),sin(pi/2+#*4*pi/5)]);
+ repeat(5,s,Listplot(text(s),[pt_s,pt_(s+1)]));
+\end{verbatim}
+
+ここで,\verb|text(s)| は,数を文字列に変換するCindyscriptの組み込み関数。
+
+\vspace{\baselineskip}\noindent
+{\bf よくあるエラーメッセージ}
+\begin{tabbing}
+1234\=5678901234567890123456789\=\kill
+ \>Index out of range \>リストの要素の個数外の値を指定した。\\
+ \>String Index out of range \>文字列のインデックスが範囲外。\\
+ \>Potential type mismatch \>変数の型が合わない。文字と実数をかけ算したときなど。\\
+ \>unexpected ) \>括弧の種類が前後で合っていない。\\
+ \>close without open \>閉じ括弧に対応する開き括弧がない。\\
+ \>open without close \>開き括弧に対応する閉じ括弧がない。\\
+ \>Unknown function \>関数が定義されていない。
+\end{tabbing}
+
+
+\vspace{\baselineskip}
+その他,Cindyscriptについては,スクリプトエディタからヘルプを参照されたい。
+
+\end{document} \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/KeTCindyReferenceE.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/KeTCindyReferenceE.tex
new file mode 100644
index 0000000000..1432b0ef18
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/KeTCindyReferenceE.tex
@@ -0,0 +1,5901 @@
+\documentclass[papersize,a4paper,12pt]{article}
+\usepackage{ketpic,ketlayer}
+\usepackage{amsmath}
+% \usepackage{amsmath,newtxmath}
+%\usepackage[dvipdfmx]{graphicx,color}
+\usepackage{graphicx,color}
+\usepackage{wrapfig}
+%\usepackage[dvipdfmx,bookmarks=false,colorlinks=true,linkcolor=blue]{hyperref}
+\usepackage[bookmarks=false,colorlinks=true,linkcolor=blue]{hyperref}
+\setmargin{20}{20}{15}{25}
+\usepackage{setspace}
+\usepackage{comment}
+\usepackage{bm,enumerate}
+
+%\newcommand{\cmd}[1]{
+%\begin{center}{\bf\large #1}\end{center}
+%\hypertarget{#1}{}
+%}
+
+\newenvironment{cmd}[2]{
+\hypertarget{#2}{}
+\begin{center}{\bf\large #1}\end{center}
+\begin{description}
+}{
+\end{description}
+\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$Command List}\end{flushright}
+}
+
+% item command for this documentation
+\newcommand{\itemket}[1]{
+\item[\Ltab{27mm}{#1}]
+}
+
+
+\begin{document}
+\title{\ketcindy\ Command Reference}
+\author{\ketcindy\ Project Team}
+\maketitle
+
+\begin{center} - ver.3.2 -\end{center}
+
+\hypertarget{index}{}
+\tableofcontents
+
+\newpage
+
+%===== Plane Figure =====================
+
+\section{Plane figure}
+%========= Setting and Defining ===========
+\subsection{Setting and Defining}
+
+%========= Setting environment ===========
+\subsubsection{Setting environment}
+
+%----------Ketinit----------------------------------
+\begin{cmd}{Ketinit}{ketinit}
+\itemket{Usage}Ketinit();
+\itemket{Description}Generic function to initialize \ketcindy.
+\itemket{Examples}\mbox{}
+
+\verb|Ketinit();|\ \ The work sub folder is set to \verb|"fig"| in the folder of the cindy file.\\
+\verb|Ketinit("");|\ \ The work folder is set to the folder of the cindy file.
+
+\itemket{Details}\mbox{}\\
+This function should be written at the first line on Draw slot page. In case of space figure (KeTCindy's 3D-mode), write it in the initialization slot page \verb|ketlib|.
+\end{cmd}
+
+%----------Initglist,Setglist,Addglist----------------------------------
+\begin{cmd}{Initglist}{initglist}
+\itemket{Usage}Initglist(), Setglist(), Addglist()
+\itemket{Description}Add the list generated in \verb|"ketlib"| slot to that of \verb|"ketlib"| slot.
+\itemket{Examples}\mbox{}
+
+\begin{verbatim}
+ Initglist(); // in ketlib slot
+ Implicitplot(''1'',fun,rng);
+ Setglist();
+
+ Ketinit(); // in figures slot
+ Addglist();
+\end{verbatim}
+\end{cmd}
+
+%-----------Setfiles---------------------------------
+\begin{cmd}{Setfiles}{setfiles}
+\itemket{Usage}Setfiles(filename)
+\itemket{Description}Generic function to set the name of texfile.
+\itemket{Details}Default file name is working Cinderella file name.
+\itemket{Examples}\mbox{}
+
+If working Cinderella file name is "triangle.cdy" then default files name are "triangle.tex".
+
+By \verb|Setfiles("grav");| output files name are "grav.tex".\\
+
+\end{cmd}
+
+%----------Setparent----------------------------------
+\begin{cmd}{Setparent}{setparent}
+\itemket{Usage}Setparent(filename)
+\itemket{Description}Generic function to set the name of texfile by using the Parent push button.
+\itemket{Details}There is no default file name when we use the Figpdf() function and the Parent push button, so we have to define the name of output texfile.
+\itemket{Examples}\mbox{}
+
+If working Cinderella file name is "triangle.cdy" , by \verb|Setparent("grav");|
+output files name are "triangle.tex" and "grav.tex". PDF name is "grav.pdf".
+\end{cmd}
+
+%-----------Changework---------------------------------
+\begin{cmd}{Changework}{changework}
+\itemket{Usage}Changework(name of pass)
+\itemket{Description}Generic function to change the working directory(folder).
+
+Default working directory is "fig".
+
+\end{cmd}
+
+%--------Addpackage------------------------------------
+\begin{cmd}{Addpackage}{addpackage}
+\itemket{Usage}Addpackage(list of style fies)
+\itemket{Description}Generic function to add packages of \TeX\ to the main file for previewing.
+\itemket{Details}Basically, \verb|ketpic,ketlayer,amsmath,amssymb,graphicx,color| are used.
+\itemket{Examples}\mbox{}
+
+\verb|Addpackage(["[dvipdfmx]{media9}","[dvipdfmx]{animate}","ketmedia"]);|
+
+\end{cmd}
+
+%--------Usegraphics------------------------------------
+\begin{cmd}{Usegraphics}{usegraphics}
+\itemket{Usage}Usegraphics("pict2e")
+\itemket{Description}This function changes the graphics package to \verb|"pict2e"|.
+\itemket{Details}The defaut package is \verb|"tpic"|.
+\itemket{Examples}\mbox{}\\
+\verb|Usegraphics("pict2e");|
+\end{cmd}
+
+%========= Drawing and defining ===========
+\subsubsection{Drawing and defining}
+
+%-------Addax-------------------------------------
+\begin{cmd}{Addax}{addax}
+
+\itemket{Usage}Addax(1/0);
+\itemket{Description}Generic function to decide axis are drawn or not.
+\itemket{Details}If argument is 1, axis are output in the TeX file (default) but there are no axis on the Euclidean view.
+\itemket{Examples} \mbox{}
+
+To draw a triangle.
+
+\verb| Listplot([B,A,C]);|\\
+\verb| Letter([A,"ne","A",B,"se","B",C,"se","C"]);|
+
+\begin{center}
+\input{Fig/addax1}
+\end{center}
+
+Hide coordinate axes.
+
+\verb| Addax(0);|\\
+\verb| Listplot([B,A,C,B]);|\\
+\verb| Letter([A,"ne","A",B,"sw","B",C,"se","C"]);|
+
+\begin{center}
+\input{Fig/addax2}
+\end{center}
+\end{cmd}
+
+%----------Setax----------------------------------
+\begin{cmd}{Setax}{setax}
+\itemket{Usage}Setax(a list of parameters);
+\itemket{Description}Generic function to set the style of axis.
+\itemket{Details}Parameters are:\\
+1. Style of axis ("l" ; line(default), "a" : arrow)\\
+2. Name of horizontal ax ( default is x)\\
+3. Posion of horizontal name (default is "e")\\
+4. Name of horizontal ax ( default is y)\\
+5. Posion of horizontal name (default is "n")\\
+6. Name of origin (default is O)\\
+7. Position of origin (default is "sw")\\
+8. Linestyle\\
+9. Color of axes\\
+10. Color of labels\\
+
+\itemket{Examples}\mbox{}
+
+\verb|Setax(["a","","","","","","nw"]);|\\
+\verb|Setax(["","","","","","","","do","red"]);|\\
+\verb|Setax([7,"nw"]);|\\
+\verb|Setax(["a","\theta","","x","w"]);|
+
+\begin{center}
+\input{Fig/setax-theta}
+\end{center}
+
+\end{cmd}
+
+%-----------Drwxy---------------------------------
+\begin{cmd}{Drwxy}{drwxy}
+\itemket{Usage}Drwxy(), Drwxy(options)
+\itemket{Description}Generic function to draw axis in the \TeX\ figure.
+\itemket{Details}\mbox{}\\
+By default the axes are drawn last. Use this function when axis should be drawn in the middle of commands. There are no axis on the Euclidean view.
+
+Options is a list of ["Origin=", "Xrng=", "Yrng="].
+\itemket{Examples}\mbox{}
+
+To draw a point in the void mode.
+
+\verb|Setax([7,"se"]);|\\
+\verb|Setpt(8);|\\
+\verb|Pointdata("1",[[-pi,0]],["Inside=0"]);|\\
+\verb|Drwxy();|\\
+\verb|Plotdata("1","sin(x)","x",["dr","Num=300"]);|\\
+\verb|Pointdata("2",[[pi,0]],["Inside=0"]);|
+
+\begin{center}
+\input{Fig/drwxy}
+\end{center}
+\end{cmd}
+
+%-----------Definecolor---------------------------------
+\begin{cmd}{Definecolor}{definecolor}
+\itemket{Usage}Definecolor(name of a color,colorcode)
+\itemket{Description}Generic function to define the name of colorcode in the \TeX\ figure.
+\itemket{Examples}\mbox{}
+
+\verb|Definecolor("darkmaz",[0.8,0,0.8]);|\\
+\verb|Setcolor("darkmaz");|
+
+\end{cmd}
+
+%---------Setcolor-----------------------------------
+\begin{cmd}{Setcolor}{setcolor}
+\itemket{Usage}Setcolor(color,options)
+\itemket{Description}Generic function to set the color of figures and characters in the \TeX\ figure.
+\itemket{Examples}\mbox{}
+
+\verb|Setcolor([1,0,0]);|\\
+\verb|Circledata([A,D],["Rng=[0,pi/3]"]);|\\
+\verb|Arrowhead(E,[-1,0.8],[2,1]);|
+
+\verb|Setcolor("red",opacity);|\\
+\hspace*{20mm} opacity is real number from 0 to 1
+
+\itemket{Remark}You can also use color option in each command of drawing.
+
+\verb|Circledata([A,D],["Rng=[0,pi/3]","Color=[1,0,0]"]);|\\
+\verb|Arrowhead(E,[-1,0.8],[2,1],"Color=[1,0,0]");|
+
+\begin{center}
+\includegraphics[bb=0 0 161 134,width=35mm]{Fig/setcolor.pdf}
+\end{center}
+
+Refer to Color table on Appendix.
+
+\end{cmd}
+
+%----------Deffun----------------------------------
+\begin{cmd}{Deffun}{deffun}
+\itemket{Usage}Deffun(name of a function,a list of commands);
+\itemket{Description}Generic function to define a function common to both Cindyscript and R.
+\itemket{Examples}\mbox{}
+
+$f(x)=\dfrac{1}{x^2+1}$
+
+\vspace{\baselineskip}
+\verb|Deffun("f(x)",["regional(y)","y=1/(x^2+1)","y"]);|\\
+\verb|Plotdata("1","f(x)","x");|
+
+\vspace{\baselineskip}
+\hspace{20mm}\input{Fig/deffun01}
+
+$f(x)=\left\{\begin{array}{l}1 (x\geq 0)\\ -1 (x<0)\\ \end{array}\right.$
+
+\vspace{\baselineskip}
+\verb|Deffun("f(x)",["regional(y)","if(x>=0,y=1,y=-1)","y"]);|\\
+\verb|Plotdata("1","f(x)","x",["Dis=1","Num=100"]);|
+
+\vspace{\baselineskip}
+\hspace{20mm}\input{Fig/deffun02}
+
+"If" command can be nesting.
+
+\vspace{\baselineskip}
+\verb|Deffun("f(x)",["regional y","if(x>1,y=1,if(x>-1,y=x,y=-1))","y"]);|
+
+\vspace{\baselineskip}
+\hspace{20mm}\input{Fig/deffun03}
+
+\end{cmd}
+
+%----------Defvar----------------------------------
+\begin{cmd}{Defvar}{defvar}
+\itemket{Usage}Defvar([name,value,...]);
+\itemket{Description}Generic function to define variables common to both Cindyscript and R.
+\itemket{Examples}\mbox{}
+
+\begin{tabbing}
+123456789012345678901234\=\kill
+\verb|Defvar(["const",3]);| \> //const=3;\\
+\verb|Defvar(["a",3,"b",1]);| \> //a=3;b=1;
+\end{tabbing}
+
+\end{cmd}
+
+%-----------Fontsize---------------------------------
+\begin{cmd}{Fontsize}{fontsize}
+\itemket{Usage}Fontsize(size symbol)
+\itemket{Description}Generic function to define the font size in the \TeX\ figure.
+\itemket{Details}The symbol is \verb|"t", "ss", "f", "s", "n", "la", "La", "LA", "h", "H"|.
+\itemket{Examples}\mbox{}
+
+\verb|Ptsize(2);|\\
+\verb|Drawpoint([A,B,C,D,E,F,G]);|\\
+\verb|Fontsize("t"); Letter([A,"s2","A"]);|\\
+\verb|Fontsize("ss"); Letter([B,"s2","B"]);|\\
+\verb|Fontsize("s"); Letter([C,"s2","C"]);|\\
+\verb|Fontsize("la"); Letter([D,"s2","D"]);|\\
+\verb|Fontsize("La"); Letter([E,"s2","E"]);|\\
+\verb|Fontsize("h"); Letter([F,"s2","F"]);|\\
+\verb|Fontsize("H"); Letter([G,"s2","G"]);|
+
+\begin{center}
+\input{Fig/fontsize}
+\end{center}
+
+\end{cmd}
+
+%-----------Ptsize---------------------------------
+\begin{cmd}{Ptsize}{ptsize}
+\itemket{Usage}Ptsize(ratio);
+\itemket{Description}Generic funtion to set the size of points.
+\itemket{Details}This function is same as Setpt().\\
+\end{cmd}
+
+%-----------Setpt---------------------------------
+\begin{cmd}{Setpt}{setpt}
+\itemket{Usage}Setpt(ratio);
+\itemket{Description}Generic funtion to set the size of points.
+\itemket{Details}"ratio" is the ratio from the standard size.\\
+Size can be change as a option of "Pointdata".
+\itemket{Examples}\mbox{}
+
+\verb|Pointdata("1",A,["Size=1"]);|\\
+\verb|Pointdata("2",B,["Size=2"]);|\\
+\verb|Pointdata("3",C,["Size=3"]);|\\
+\verb|Pointdata("4",D,["Size=4"]);|
+
+\hspace{20mm}\input{Fig/pointsize}
+
+\end{cmd}
+%------------Setarrow--------------------------------
+\begin{cmd}{Setarrow}{setarrow}
+\itemket{Usage}Setarrow(size,angle,position,cut,segstyle)
+\itemket{Description}Generic function to set the arrow.
+\itemket{Details} Set the style of arrow. Same as options of \hyperlink{arrowdata}{Arrowdata()} .\\
+\end{cmd}
+
+
+%------------Setmarklen--------------------------------
+\begin{cmd}{Setmarklen}{setmarklen}
+\itemket{Usage}Setmarklen(real number)
+\itemket{Description}Generic function to set the length of tickmarks on the axsis.
+\itemket{Details}Set the length of tickmarks on the axsis when we use the functions \hyperlink{htickmark}{Htickmark()} and Vtickmark().\\
+\end{cmd}
+
+%-------------Setorigin-------------------------------
+\begin{cmd}{Setorigin}{setorigin}
+\itemket{Usage}Setorigin(coordinate)
+\itemket{Description}Generic function to set or transtate the coordinate of apparent origin.
+\itemket{Examples}\mbox{}
+
+\verb|Setorigin([3,2]);|\\
+if A is identification name of some point,
+\verb|Setorigin(A);|\\
+\itemket{Remark} Coordinate system is not changed as the following examples.\\
+\itemket{Examples}\mbox{}
+
+The coordinate of apparent origin is $(3,2)$ but we use the original coordinate system in the script.\\
+\verb| Setorigin([3,2]);|\\
+\verb| Listplot([A,B,C,A]);|\\
+\verb| Ptsize(3);|\\
+\verb| Drawpoint([1,1]);|\\
+\verb| Letter([[1,1],"s2","P"]);|\\
+
+ Left figure is Euclidean view, right figure is the result of \TeX.
+
+\begin{center}
+\includegraphics[bb=0 0 299.02 250.01 , width=4cm]{Fig/setorigin.pdf}\hspace{10mm}%
+\input{Fig/setorigin}
+\end{center}
+
+\end{cmd}
+
+%------------Setpen--------------------------------
+\begin{cmd}{Setpen}{setpen}
+\itemket{Usage}Setpen(real number)
+\itemket{Description}Generic function to set the thickness of lines.
+
+\end{cmd}
+
+%------------Setscaling--------------------------------
+\begin{cmd}{Setscaling}{setscaling}
+\itemket{Usage}Setscaling(scale)
+\itemket{Description}Generic function to set the scale of vertical direction.
+Argument is real number or list. If it is a real number, vertical scaling. If the list [a, b], scaling a in the horizontal direction and b in the vertical direction.
+\itemket{Examples}\mbox{}
+
+\verb|Setscaling(0.5);|\\
+\verb|Plotdata("1","-2*x^2+10*x","x");|\\
+\verb|p1=[5/2,0]; p2=[5/2,25/2]; p3=[0,25/2];|\\
+\verb|Listplot(``1",[p1,p2,p3],["da"]);|\\
+\verb|Expr([[5,0],"s2w","5",p3,"w2","\frac{25}{2}",p1,"s4","\frac{5}{2}"]);|
+
+\begin{center}
+\input{Fig/setscaling}
+\end{center}
+\end{cmd}
+
+%-----------Setunitlen---------------------------------
+\begin{cmd}{Setunitlen}{setunitlen}
+\itemket{Usage}Setunitlen(scale);
+\itemket{Description}Generic function to set the scale of unit length. (default is 1cm)\\
+It is recommended to put this function to the beginning of a script.
+\itemket{Examples}\mbox{}
+
+\verb|Setunitlen("8mm");|\\
+\end{cmd}
+
+%--------------Setwindow------------------------------
+\begin{cmd}{Setwindow}{setwindow}
+\itemket{Usage}Setwindow(range of x , range of y);
+\itemket{Description}Generic function to set a output area on a Euclidean view.
+\itemket{Details}A output area is normally specified by a rectangle with SW and NE as diagonal two vertices. (i.e range of x is [XMIN,XMAX] and range of y is [YMIN,YMAX]) By dragging these two vertices on a Euclidean view, we can change the output area. This command is used to set the window manually and fix it.
+\itemket{Examples}\mbox{}
+
+\verb|Setwindow([-5,5],[-1,3]);|
+
+\vspace{\baselineskip}
+\hspace{20mm}\includegraphics[bb=0.00 0.00 415.02 199.01,width=8cm]{Fig/setwindow.pdf}
+\end{cmd}
+
+
+%======== Commands for Drawing ============
+\subsection{Commands for Drawing}
+
+\subsubsection{Options of drawing command}
+
+\begin{cmd}{Options of drawing command}{options}
+
+\item Line type
+
+\begin{tabbing}
+1234\=5678901234567\=\kill
+ \> "dr, n" \>solid line\\
+ \> \> n : thickness\\
+ \> "da(,m,n)" \>broken line \\
+ \> \> m : length, n : gap \\
+ \> \>m,n option are not draw Euclidean view and can be omitted.\\
+ \> "id(,m,n)" \>broken line start gap.\\
+ \> "do(,m,n)" \>dot line\\
+ \> \>m : gap, n : thickness
+\end{tabbing}
+
+\item Color
+
+\hspace{10mm}"Color=col" : col: RGB or CMYK or color name
+
+\item Num
+
+\hspace{10mm}"Num=n" : Number of divisions of plotting data
+
+\vspace{\baselineskip}
+\hspace{5mm} Example
+
+\hspace{10mm} \verb|Plotdata("1","x^2","x",["Color=red","do,2,3","Num=100"]);|
+
+\item Output
+\begin{tabbing}
+ 1234\=56789012345\=\kill
+ \> "notex" \>not output to \TeX.\\
+ \> "nodisp" \>not output to \TeX and Euclidean view but make PD.\\
+ \> "Size=n" \> size of point and thin of line\\
+ \> "Num=n" \>Number of PD
+\end{tabbing}
+
+\item Direction
+
+The direction is represented by e(east : right), w(west: left), n(north : upper), s(south:lower) and c(center). The distance from the specified position can also be given as a numerical value. For example, "e2" and "e3" are placed twice and three times of the slightly unit distance away from "e", respectively.
+
+\begin{center}\input{Fig/ewns} \end{center}
+
+\item Others
+
+In addition, there are options specific to each function.
+
+\end{cmd}
+
+%========= Point , line ======================
+\subsubsection{Point, line }
+
+%---------Pointdata-----------------------------------
+\begin{cmd}{Pointdata}{pointdata}
+\itemket{Usage}Pointdata(name, point list, options)
+\itemket{Description}Generic function to make a point data.
+\itemket{Detailse}Options are "Size=", "Color=", "Inside=","notex/nodisp".
+\itemket{Examples}\mbox{}
+
+\verb|Pointdata("1",[[1,2],[-2,3]]); | // make 2 points (1,2),(-2,3)\\
+\verb|Pointdata("2",[A,B]); | // A and B are draw by drawing tool.\\
+\verb|Pointdata("3",A,["size=4"]); | // size of point A is 4.\\
+\verb|Pointdata("4",[A,B],["Inside=0"]); | // white circles\\
+\verb|Pointdata("5",[[3,4],[5,6]],["notex"]); | //not draw in the \TeX file.\\
+\verb|Pointdata("6",[[3,4],[5,6]],["nodisp"]);| //not draw \TeX file and Euclidean view.\\
+
+Draw node of tree.
+
+\verb|Ptsize(3);|\\
+\verb|Pointdata("1",[[1,2],[3,4],[5,2]]);|\\
+\verb|Listplot("1",[[0,0],[1,2],[3,4],[5,2],[4,0]]);|\\
+\verb|Listplot("2",[[1,2],[2,0]]);|\\
+\verb|Listplot("3",[[5,2],[6,0]]);|\\
+
+\hspace{20mm} \input{Fig/pointdata}
+
+\itemket{Remark} \hyperlink{mkpttable}{Comparative chart of drawing of points}
+
+\end{cmd}
+
+%---------Drwpt -----------------------------------
+%\begin{cmd}{Drwpt}{drwpt}
+%\itemket{Usage}Drwpt(point, option) or Drawpoint(point, options)
+%\itemket{Description}Draw a point.
+%\itemket{Details}
+%The position of point is specified via its coordinate or the name of geometric object.
+%When the point is to be displayed not only on \TeX\ final output but also on the Euclidean view, you should generate geometric point on the screen.
+%Also \verb|Pointdata()| or \verb|Putpoint()| can be used.
+%When several points are to be generated,
+%the list of them should be given as the argument.
+%When 0 is input as the option, the point is displayed in a solid-white manner.
+%\itemket{Examples}\mbox{}
+
+%Draw the points $(1,1)$ and $(4,3)$.
+
+%\verb| Drwpt([[1,1],[4,3]]);|\\
+
+%After generating points A, B, and C on the Euclidean view, display their image on \TeX\ document.
+
+%\verb| Drwpt([A,B,C]);|\\
+
+%The endpoint B of segment AB in a solid-white manner.
+
+%\verb| Ptsize(5);|\\
+%\verb| Listplot([A,B]);|\\
+%\verb| Drawpoint(B,0);|
+%\begin{center}
+%\input{Fig/drawpoint}
+%\end{center}
+
+%\itemket{Remark} \hyperlink{mkpttable}{Comparative chart of drawing of points}
+
+%\end{cmd}
+
+%--------------Putpoint------------------------------
+\begin{cmd}{Putpoint}{putpoint}
+\itemket{Usage}Putpoint(name of point, A, B);
+\itemket{Description}Generic function to put a point.
+\itemket{Details}Put a point at A. If there already exists a point at A, it is put at B.
+\itemket{Examples}\mbox{}
+
+\verb|Putpoint("P",[1,1]); | // P is fixed point.\\
+\verb|Putpoint("P",[1,1],[P.x,P.y]); | // for a movable point.
+
+\itemket{Remark} \hyperlink{mkpttable}{Comparative chart of drawing of points}
+
+\end{cmd}
+
+%-------------Putintersect-------------------------------
+\begin{cmd}{Putintersect}{putintersect}
+\itemket{Usage}Putintersect(name of point, PD1 ,PD2, [Number] )
+\itemket{Description}Generic function to make a intersection point of two curves.
+\itemket{Details}PD1 and PD2 are plotting data names of two curves. Only one intersection point exists inside the drawing range, we have the point. If there exist many intersection points inside the drawing range then we have the list of coordinates for the points and the message:"Choose point number" on the console. The "Number" argument is this point number. We have to use the function Pointdata() when we need the figure of points in the output \TeX file.
+\itemket{Examples}\mbox{}
+
+In the following example We have three intersection points for a cubic curve and a line.
+
+\begin{minipage}{80mm}
+\verb|Plotdata("1","x^3-4*x","x",["Num=200"]);|\\
+\verb|Plotdata("2","1/2*x+1","x");|\\
+\verb|Putintersect("P","gr1","gr2",1);|\\
+\verb|Putintersect("Q","gr1","gr2",2);|\\
+\verb|Putintersect("R","gr1","gr2",3);|\\
+\verb|Pointdata("1",[P,Q,R],["size=4"]);|
+\end{minipage}\hspace{5mm}
+\begin{minipage}{30mm}
+
+\vspace{3mm}
+
+\input{Fig/putintersect}
+\end{minipage}
+
+If there exist no such points, we have the message:"No intersect point" on the console.
+
+\end{cmd}
+
+%-------------PutonCurve-------------------------------
+\begin{cmd}{PutonCurve}{putoncurve}
+\itemket{Usage}PutonCurve(name of point, PD, options);
+\itemket{Description}Generic function to put a point on the curve.
+\itemket{Details}Put a point on the curve of PD.
+\itemket{Examples}\mbox{}
+
+\verb|Paramplot("1","[2*cos(t)^3,2*sin(t)^3]","t=[0,2*pi]");|\\
+\verb|PutonCurve("P","gp1",[-1,1]);|\\
+This Point P on the asteroid can be move along the curve on the Euclidean view.
+
+ \begin{center} \input{Fig/putoncurve.tex} \end{center}
+\end{cmd}
+
+%------------PutonLine--------------------------------
+\begin{cmd}{PutonLine}{putonline}
+\itemket{Usage}PutonLine(name of point, A, B);
+\itemket{Description}Generic function to put a point on the line.
+\itemket{Details}Put a point on the straight line through the two points A and B.
+\itemket{Examples}\mbox{}
+
+\verb|PutonLine("P",A,B);|
+\end{cmd}
+
+%--------------PutonSeg------------------------------
+\begin{cmd}{PutonSeg}{putonseg}
+\itemket{Usage}PutonSeg(name of point, A, B);
+\itemket{Description}Generic function to put a point on the segment.
+\itemket{Details}Put a point on the line segment AB.
+\itemket{Examples}\mbox{}
+
+\verb|PutonSeg("P",A,B);|
+\end{cmd}
+
+
+%-------------Reflectpoint-------------------------------
+\begin{cmd}{Reflectpoint}{reflectpoint}
+\item[Usage]Reflectpoint(a point, center or axis of symmetry);
+\itemket{Description}Generic function do return the reflect point.
+\itemket{Examples}\mbox{}
+
+\verb|C.xy=Reflectpoint(A,B);|\\
+\verb|D.xy=Reflectpoint(A,[[2,3]]);|\\
+\verb|E.xy=Reflectpoint([-1,1],[[1,0]]);|\\
+\verb|F.xy=Reflectpoint(A,[C,E]);|\\
+\verb|Lineplot([C,E],["do"]);|
+
+\begin{center}
+\input{Fig/reflectpoint}
+\end{center}
+\end{cmd}
+
+%-----------Rotatepoint---------------------------------
+\begin{cmd}{Rotatepoint}{rotatepoint}
+\itemket{Usage}Rotatepoint(point, angle(degree), center);
+\itemket{Description}Generic function to rotate a point.
+\itemket{Examples}\mbox{}
+
+\verb|C.xy=Rotatepoint(A,2*pi/3,B);|\\
+\verb|D.xy=Rotatepoint((5,2),pi/3,B);|\\
+\verb|E.xy=Rotatepoint([3,0],-pi/4,A);|
+
+\begin{center}
+\input{Fig/rotatepoint}
+\end{center}
+\end{cmd}
+
+%-----------Scalepoint---------------------------------
+\begin{cmd}{Scalepoint}{scalepoint}
+\itemket{Usage}Scalepoint(point, scale, center):
+\itemket{Description}Generic function to scale a point.
+\itemket{Examples}\mbox{}
+
+\verb| D.xy=Scalepoint(A,[3,2],[0,0]);|\\
+\verb| E.xy=Scalepoint(A,[3,2],B);|\\
+\verb| F.xy=Scalepoint(A,C.xy,[0,0]);|\\
+\verb| Arrowdata("1",[[0,0],C]);|\\
+\verb| Pointdata("1",[A,B,C,D,E,F],["size=2"]);|\\
+\verb| Letter([A,"e2","A("+A.x+","+A.y+")"]);|\\
+\verb| Letter([B,"e2","B("+B.x+","+B.y+")"]);|\\
+\verb| Letter([C,"e2","C("+C.x+","+C.y+")"]);|\\
+\verb| Letter([D,"e2","D("+D.x+","+D.y+")"]);|\\
+\verb| Letter([E,"e2","E("+E.x+","+E.y+")"]);|\\
+\verb| Letter([F,"e2","F("+F.x+","+F.y+")"]);|\\
+
+\begin{center}
+\input{Fig/scalepoint}
+\end{center}
+\end{cmd}
+
+%-------------Translatepoint-------------------------------
+\begin{cmd}{Translatepoint}{translatepoint}
+\itemket{Usage}Translatepoint(point, vector);
+\itemket{Description}Generic function to translate a point.
+\itemket{Examples}\mbox{}
+
+\verb|C.xy=Translatepoint(A,[2,3]);|\\
+\verb|D.xy=Translatepoint(A,B.xy);|
+
+\begin{center}
+\input{Fig/translatepoint}
+\end{center}
+\end{cmd}
+
+%-------------Setarrow------------------------------
+\begin{cmd}{Setarrow}{setarrow}
+\itemket{Usage}Setarrow([arrowsize,angle,position,cut,linestyle]);
+\itemket{Description}Generic function to set styles of arrows.
+\itemket{Details}Defaults are arrowsize(1),angle(18),position(1),cut(1),linestyle("dr").
+\verb|-1| means to unchange the default.
+\itemket{Examples}Setsarrow([-1,30,-1,0.2]);
+\end{cmd}
+
+%------------Arrowdata--------------------------------
+\begin{cmd}{Arrowdata}{arrowdata}
+\itemket{Usage}Arrowdata(name,[starting point, ending point] , options)
+\itemket{Description}draw an arrow line between two points.
+
+Options : arrowhead size, arrowhead angle,position,cut position,line type,line color,trimming.\\
+All options do not always reflect on Euclidean view.
+\itemket{Examples}\mbox{}
+
+\verb| Arrowdata("1",[A,B]);|\\
+\verb| Arrowdata("2",[[1,0],[2,3]],[2]);|\\
+\verb| Arrowdata("3",[[2,0],[3,3]],[3,45]);|\\
+\verb| Arrowdata("4",[[3,0],[4,3]],[3,1,0.5]);|\\
+\verb| Arrowdata("5",[[4,0],[5,3]],[3,1,1,0.5]);|\\
+\verb| Arrowdata("6",[[5,0],[6,3]],[3,1,1,1]);|\\
+\verb| Arrowdata("7",[[6,0],[7,3]],[3,"dr,2"]);|\\
+\verb| Arrowdata("8",[[7,0],[8,3]],[3,1,1,0.5,"Color=red"]);|\\
+
+\begin{center}
+\input{Fig/arrowdata}
+\end{center}
+
+\begin{minipage}{80mm}
+\verb| Circledata("1",[A,A.xy+[0.5,0]]);|\\
+\verb| Circledata("2",[B,B.xy+[0.7,0]]);|\\
+\verb| Arrowdata([A,B],["Cutend=[0.5,0.7]"]);|\\
+\verb| Letter([A,"c","A",B,"c","B"]);|\\
+\end{minipage}
+\hspace{5mm}
+\begin{minipage}{40mm}
+\input{Fig/trimarrow}
+\end{minipage}
+
+\end{cmd}
+
+%--------------Arrowhead------------------------------
+\begin{cmd}{Arrowhead}{arrowhead}
+\itemket{Usage}Arrowhead(point, direction , options) , Arrowhead(point, PD, options)
+\itemket{Description}draw an arrowhead with specified direction at a designated point.\\
+Options are: arrowhead size, arrowhead angle,position,shape,position.\\
+\itemket{Examples}\mbox{}
+
+Let A=[1,1].
+\begin{enumerate}[(a)]
+\item \verb|Arrowhead(A,[-1,1]);|
+\item \verb|Arrowhead([1,1],[-1,1],[2,60]);|
+\item \verb|Arrowhead(A,[-1,1],[2,30,"b"]);|
+\item \verb|Arrowhead([1,1],[-1,1],[2,20,"lc"]);|
+\end{enumerate}
+
+\hspace*{17mm}%
+\Ltab{30mm}{(a)}\Ltab{30mm}{(b)}\Ltab{30mm}{(c)}\Ltab{30mm}{(d)}\\
+\hspace*{20mm}%
+\Ltab{30mm}{\input{Fig/ForRef-Arrowhead-2}}%
+\Ltab{30mm}{\input{Fig/ForRef-Arrowhead-3}}
+\Ltab{30mm}{\input{Fig/ForRef-Arrowhead-4}}
+\Ltab{30mm}{\input{Fig/ForRef-Arrowhead-5}}
+
+Let D be on the curve crBC.
+\begin{enumerate}[(a)]%
+\setcounter{enumi}{4}%
+\item \verb|Arrowhead(D,"crBC");|
+\item \verb|Arrowhead(D,"crBC",[2]);|
+\item \verb|Arrowhead(D,"crBC",[2,30,"l"]);|
+\item \verb|Arrowhead(D,"Invert(crBC)");|
+\end{enumerate}
+
+\hspace*{17mm}%
+\Ltab{30mm}{(e)}\Ltab{30mm}{f)}\Ltab{30mm}{(g)}\Ltab{30mm}{(h)}\\
+\hspace*{20mm}%
+\Ltab{30mm}{\input{Fig/ForRef-Arrowhead-7}}
+\Ltab{30mm}{\input{Fig/ForRef-Arrowhead-8}}
+\Ltab{30mm}{\input{Fig/ForRef-Arrowhead-9}}
+\Ltab{30mm}{\input{Fig/ForRef-Arrowhead-10}}
+
+\end{cmd}
+
+
+%---------Lineplot-----------------------------------
+\begin{cmd}{Lineplot}{lineplot}
+\itemket{Usage}Lineplot(name, [A, B], options)
+\itemket{Description}Draw the straight line through the two points A, B.
+\itemket{Details}
+The list of two points is given by the coordinates or the geometric elements. \\
+If the list of points is given by geometric elements, "name" can be omitted. \\
+options : "+" means drawing a half straight line. \\
+Both the line type and "+" can be specified as a list. \\
+\item[Example]\mbox{}
+
+Draw a straight line connecting the coordinates.
+
+\hspace{5mm}\verb|Lineplot("1",[[0,0],[1,2]]);|
+
+Draw the two points A, B in the Cinderella main screen and draw a straight line AB.
+
+\hspace{5mm}\verb|Lineplot([A,B]);|
+
+Some examples of options.
+
+\hspace{5mm}\verb|Lineplot([A,B],["dr,0.5","+"]);| // Draw a half line with A as the end point.
+
+\hspace{5mm}\verb|Lineplot([C,D],["dr,2"]); | // Draw the straight line CD with double thickness.
+
+\hspace{5mm}\verb|Lineplot([E,F],["da"]); | // Draw the straight line EF as a broken line.
+
+\hspace{5mm}\verb|Lineplot([G,H],["do"]); | // Draw the straight line GH as a dotted line.
+
+The results are shown in order from the top left of the next figure.
+
+\begin{center}
+\input{Fig/lineplot}
+\end{center}
+\end{cmd}
+
+%-----------Listplot---------------------------------
+\begin{cmd}{Listplot}{listplot}
+\itemket{Usage}Listplot(name, a list of points, options)
+\itemket{Description}Connect points by line segments.
+\itemket{Details}
+The list of two points is given by the names of the coordinates or the geometric elements. \\
+If the list of points is given by geometric element names, the name of the plotting data can be omitted. \\
+\item[Example1]\mbox{}
+Line style
+
+\hspace{10mm} \verb|Listplot([A,B]);|
+
+\hspace{10mm} \verb|Listplot([C,D],["dr,2"]); |
+
+\hspace{10mm} \verb|Listplot([E,F],["da"]); |
+
+\hspace{10mm} \verb|Listplot([G,H],["da,3,1"]);|
+
+\hspace{10mm} \verb|Listplot([K,L],["da,1,3"]);|
+
+\hspace{10mm} \verb|Listplot([M,N],["do"]); |
+
+\hspace{10mm} \verb|Listplot([O,P],["do,3"]); |
+
+\hspace{10mm} \verb|Listplot([Q,R],["do,3,3"]);|
+
+\hspace{20mm} \includegraphics[bb=0.00 0.00 328.02 157.01,width=8cm]{Fig/listplot3view.pdf}
+
+\hspace{20mm} \input{Fig/listplot3}
+
+\item[Example2]\mbox{}
+Draw a triangle. \\
+Draw the triangle ABC or simply creating 3 points A, B, C with the Euclidean view.
+
+\hspace{10mm}\verb|Addax(0);|
+
+\hspace{10mm}\verb|Listplot([A,B,C,A]);|
+
+\hspace{20mm}\input{Fig/listplot1}
+
+The position of the points can be specified by coordinates.
+In this case "name" is necessary.
+
+\hspace{10mm}\verb|Listplot("1",[[0,0],[2,0],[1,2],[0,0]]);|
+
+\item[Example3]\mbox{}
+Expansion of finite Fourier series
+
+\hspace{20mm}$\displaystyle{\cfrac{\pi}{2}+\sum_{n=0}^{30} \cfrac{1-(-1)^n}{n}\sin nx}$
+
+The plotting data is a list of the coordinates of points. Therefore, define the function in Cindyscript as follows, create plotting data \verb|pd| and pass it as argument. \\
+
+\verb|f(x):=(|\\
+\verb| s=pi/2;|\\
+\verb# repeat(30,n,s=s+(1-(-1)^n)/n*sin(n*x));#\\
+\verb|);|\\
+\verb|pd=apply(0..200,t,|\\
+\verb| x=-2*pi+t*4*pi/200;|\\
+\verb| [x,f(x)];|\\
+\verb|);|\\
+\verb|Listplot("1",pd);|\\
+\verb|Expr([[-2*pi,-0.5],"s","-2\pi",[-pi,-0.5],"s","-\pi",[pi,-0.5],"s",|\\
+\verb| "\pi",[2*pi,-0.5],"s","2\pi",[0,pi],"w2","\pi"]);|\\
+\begin{center}
+\input{Fig/fourier}
+\end{center}
+There is a limit on the length of the list, so it is impossible to use a long list or to use it many times.
+For example, in the Shellpinski gasket using Turtle Graphics, the next size is possible, but in the growth model of plants there are many branches so it can not be a big figure.
+We devise a script and divide it into lists of about 200. \\
+\begin{center}
+\input{Fig/listplot2}
+\end{center}
+\end{cmd}
+
+%--------------Mksegments------------------------------
+\begin{cmd}{Mksegments}{mksegments}
+\itemket{Usage}Mksegments()
+\itemket{Description}Create plotting data of all geometric segments.
+\itemket{Details}
+All the line segments drawn by the "Add line segment" tool in the Euclidean view are used as plotting data as they are.
+For example, if the line segment AB is created, plotting data \verb|sgAB| is created.
+After that, if you change the identification name of point B (for example to Q) in the inspector of the Euclidean view, the plotting data name is also changed.
+Even if the line segmen has already been drawn, it can be changed. \\
+
+\item[Example]\mbox{}
+Examples of geometric progression\\
+Draw a figure of a geometric progression that makes triangles by connecting the midpoints of each edge of a triangle one after another. \\
+First draw the triangle ABC with the "Add line segment" tool in the Euclidean view. \\
+Take the midpoint of each edge with the "Add midpoint" tool in the Euclidean view and connect the midpoints with the "Add line segment" tool in the Euclidean view. \\
+Repeat this process.
+If you write \verb|Mksegments();|, you can obtain the data of the figure at the completion of drawing, without writing \verb|Listplot ([A, B, C]);|. \\
+\begin{center}
+\includegraphics[bb=0.00 0.00 438.00 327.00,width=5cm]{Fig/gpro01.pdf}\hspace{10mm}\input{Fig/gpro02}
+\end{center}
+\end{cmd}
+
+%---------Framedata-----------------------------------
+
+\begin{cmd}{Framedata}{framedata}
+\itemket{Usage}Framedata(name,expr,options)
+\itemket{Description}Generic function to draw a rectangle.
+\itemket{Details}
+
+expr type1 : [center,lx,ly] : lx and ly are a half of the horizontal and vertical length.
+
+expr type2 : [p1, p2] : if p1 and p2 are name of point, 1st argument can be omitted.
+
+options : usual options and "center"/"corner" (type2).
+
+\hspace{10mm} If "center", p1 is center, p2 is apex of rectangle. (Default)
+
+\hspace{10mm} If "corner", p1 and p2 are diagonal point of rectangle.
+
+\itemket{Examples}\mbox{}
+
+\verb|Framedata("1"); | // same as \verb|Framedata([SW,NE],["corner"]);|\\
+\verb|Framedata("2",[[0,0],2,2]);|\\
+\verb|Framedata("3",[A,1.5,1.2]); | // left figure\\
+\verb|Framedata([B,C]); | // center figure\\
+\verb|Framedata([D,E],["corner"]); | // right figure
+\begin{center}\includegraphics[bb=0.00 0.00 348.15 106.16,width=12cm]{Fig/Framedata.pdf}\end{center}
+\itemket{Reference} \hyperlink{ovaldata}{Ovaldata}.
+\end{cmd}
+
+
+%------------Polygonplot--------------------------------
+\begin{cmd}{Polygonplot}{polygonplot}
+\itemket{Usage}Polygonplot(name, point list, integer, options)
+\itemket{Description}Generic function to draw a polygon inscribed inside the circle.
+\itemket{Details}If the point list is [A,B] then the center is A and the radius is AB for the circle. Corresponding circle is not drawing. Two points A,B allowed to be coordinates.
+
+option : If A and B are geometric point , make geometric apex by "Geo=y".
+
+\itemket{Examples}\mbox{}
+
+\verb| Addax(0); |\\
+\verb| Polygonplot("1",[[-4,1],[-4,3]],7); |\\
+\verb| Polygonplot("2",[A,B],7); |\\
+\verb| Polygonplot("3",[C,D],7,["Geo=y"]); |\\
+
+\hspace{10mm}\includegraphics[bb=0.00 0.00 541.03 175.01,width=10cm]{Fig/polygonplot2.pdf}
+
+\hspace{10mm}\input{Fig/polygonplot1}
+
+We can draw the regular polygon whose one side is the line segment AB.
+
+\verb| n=5;|\\
+\verb| pti=[complex(A),complex(B)];|\\
+\verb| th=2*pi/n;|\\
+\verb| repeat(n-2,s,|\\
+\verb| z1=pti_s;|\\
+\verb| z2=pti_(s+1);|\\
+\verb| z=z2+(z2-z1)*(cos(th)+i*sin(th));|\\
+\verb| pti=append(pti,z);|\\
+\verb| );|\\
+\verb| pt=apply(pti,gauss(#));|\\
+\verb| pt=append(pt,A.xy);|\\
+\verb| Listplot("1",pt);|\\
+
+\verb|pti| is the list of complex numbers correspond to each vertex,
+\verb|pt| is the list of coordinates of vertexes.
+
+\end{cmd}
+
+%=============- Curves line ============
+\subsubsection{Curved line}
+
+%----------Bezier----------------------------------
+\begin{cmd}{Bezier}{bezier}
+\itemket{Usage}Bezier(name,nodes of curve, control points, options)
+\itemket{Description}Draw a bezier curve.\\
+For each interval, control points are given in two lists for 3rd-order and one list for 2nd-order Bezier curve.\\
+You can specify the number of division among nodes (default value is 10).
+
+\itemket{Examples}\mbox{}
+
+\begin{minipage}[t]{70mm}
+2nd-order Bezier curve\\
+\verb|Bezier("1",[A,B],[C]);|
+\end{minipage}%
+\hspace{5mm}bz1%
+\begin{minipage}[t]{60mm}
+\mbox{}\vspace{-15mm}\\
+\input{Fig/checkbe1}
+\end{minipage}%
+
+\begin{minipage}[t]{70mm}
+3rd-order Bezier curve\\
+\verb|Bezier("c",[A,B],[C,D]);|
+\end{minipage}%
+\hspace{5mm}bzc%
+\begin{minipage}[t]{60mm}
+\mbox{}\vspace{-15mm}\\
+\input{Fig/checkbe2}
+\end{minipage}%
+
+\begin{minipage}[t]{70mm}
+Connecting two curves,\\
+\verb|Bezier("3",[A,B,C],[[D],[E,F]]);|
+\end{minipage}%
+\hspace{5mm}bz3%
+\begin{minipage}[t]{60mm}
+\mbox{}\vspace{-15mm}\\
+\input{Fig/checkbe3}
+\end{minipage}%
+
+\begin{minipage}[t]{70mm}
+If D,B,E are on the straight line,\\ the curve becomes smoothly.\\
+\verb|Bezier("S",[A,B,C],[[D],[E,F]]);|
+\end{minipage}%
+\hspace{5mm}bzS%
+\begin{minipage}[t]{60mm}
+\mbox{}\vspace{-15mm}\\
+\input{Fig/checkbe4}
+\end{minipage}%
+
+\noindent
+\verb|Bezier("name",[A,B,C,D],[E,F,G,H,K,L] );|
+
+\begin{center}
+\input{Fig/checkbe7}
+\end{center}
+
+\noindent
+\verb|Bezier("1a",[A,B,C],[[D],[E,F]],["Num=3"]);|
+
+\begin{center}
+\input{Fig/checkbe5}
+\end{center}
+
+\noindent
+\verb|Bezier("d5e",[A,B,C],[[D],[E,F]],["Num=200","da"]);|
+
+\begin{center}
+\input{Fig/checkbe6}
+\end{center}
+
+\noindent
+\verb|Bezier("1",[A,B,C,D],[E,F,G,H,K,L],["Num=[2,3,4]"]);|\\
+
+\begin{center}
+\input{Fig/checkbe8}
+\end{center}
+\end{cmd}
+
+%------------Beziersmooth--------------------------------
+\begin{cmd}{Beziersmooth}{beziersmooth}
+\itemket{Usage}Beziersmooth(name, a list of nodes, options);
+\itemket{Description}Generic function to draw a smooth B\'ezier curve.
+\itemket{Details}Control points are added to keep smoothness.
+\itemket{Examples}\mbox{}
+
+\verb|Beziersmooth("1",[A,B,C,D]);|
+
+\begin{center}
+\input{Fig/checksm1}
+\end{center}
+
+\itemket{Remark}Control points are movable.
+
+\begin{center}
+\input{Fig/checksm2}
+\end{center}
+\end{cmd}
+
+%-----------Beziersym---------------------------------
+\begin{cmd}{Beziersym}{beziersym}
+\itemket{Usage}Beziersym(name, a list of nodes, options);
+\itemket{Description}Generic function to draw a smooth B\'ezier curve.
+\itemket{Details}Control points are added to be symmetric with respect to each node.
+\itemket{Examples}\mbox{}
+
+\begin{center}
+\input{Fig/checksy1}
+\end{center}
+
+\itemket{Remark}Some control points are movable.
+
+\begin{center}
+\input{Fig/checksy2}
+\end{center}
+\end{cmd}
+
+%------------Mkbeziercrv--------------------------------
+\begin{cmd}{Mkbeziercrv}{mkbeziercrv}
+\itemket{Usage}Mkbeziercrv(name, [nodes, control points], options)
+\itemket{Description}Draw some B\'ezier curves.
+\itemket{Details}
+In the case of a single B\'ezier curve, \verb|[ ]| outside the list can be omitted. \\
+Mkbeziercrv(name, [nodes, control points], options) is same as Bezier(name, [nodes, control points], options). \\
+\verb|Mkbeziercrv("n",[[A,B,C],[[D],[E,F]]])| is same as \verb|Bezier("n",[A,B,C],|\\
+\verb|[[D],[E,F]])|.
+The name of the plotting data is "bz".
+\item[Example1]\mbox{}
+
+\verb|Mkbeziercrv("5",[[[A,B,C],[[D],[E,F]]],[[G,H,K,L],[[M],[N,O],[P]]]]);|
+\begin{center}
+\input{Fig/checkmc1}
+\end{center}
+
+\end{cmd}
+
+%---------Mkbezierptcrv-----------------------------------
+\begin{cmd}{Mkbezierptcrv}{mkbezierptcrv}
+\itemket{Usage}Mkbezierptcrv(a list of points, options)
+\itemket{Description}Draw a B\'ezier curve.
+\itemket{Details}
+Arrange the control points automatically.
+After that, move the nodes and the control points and correct the B\'ezier curve to what you want to draw. \\
+In the case of multiple curves, \verb|[ ptlist1, ptlist2.... ]|\\
+The name is automatically attached in order from A. \\
+The options are as follows:\\
+"Deg=...”\hspace{5mm}You can specify the degree (Default is 3rd order). \\
+"Num=..."\hspace{5mm}You can specify the partition number ($\mathrm{the\ partition\ point\ number}-1$) for each section (Default is 10). \\
+\item[Example]\mbox{}
+
+\verb|Mkbezierptcrv([A,B,C]);|
+
+\hspace{20mm}\input{Fig/checkb8}
+
+After that, move the nodes and the control points and correct the B\'ezier curve to what you want to draw. \\
+
+\hspace{20mm}\input{Fig/checkb11}
+
+
+\verb|Mkbezierptcrv([A,B,C],["Deg=2"]);|\\
+If Deg = 2, it is the B\'ezier curve of 2nd order. \\
+One control point can be set for each section. \\
+
+\hspace{20mm}\input{Fig/checkb9}
+
+In the case of multiple curves, \verb|[ ptlist1, ptlist2.... ]|\\
+\verb|Mkbezierptcrv([[A,B,C],[D,E,F,G]]);|\\
+
+\hspace{10mm}\input{Fig/checkb10}
+
+\end{cmd}
+
+
+%--------------Bspline------------------------------
+\begin{cmd}{Bspline}{bspline}
+\itemket{Usage}Bspline(name ,list of control points, options)
+\itemket{Description}Draw second degree B-spline curve.
+\itemket{Details}Though not displayed, nodal points are calculated automatically.
+\itemket{Examples}\mbox{}
+
+\verb|Bspline("1",[A,B,C,D,E]);|($=$\verb|Bezier("1",[A,(B+C)/2,(C+D)/2,E],[B,C,D]);|)\\
+The name becomes \verb|bzb1| instead of \verb|bz1|.
+Endpoints can be moved instead of control points.
+\begin{center}
+\input{Fig/checkbs1}
+\end{center}
+
+\verb|Bspline("1",[A,B,C,D,A]);|\\
+The generated curve becomes closed when the first component of the list
+is the same as the last one.
+\begin{center}
+\input{Fig/checkbs2}
+\end{center}
+\end{cmd}
+
+%-------CRspline-------------------------------------
+\begin{cmd}{CRspline}{crspline}
+\itemket{Usage}CRspline(name, list of node points, options)
+\itemket{Description}Draw single Catmull-Rom spline curve.
+\itemket{Details}
+Only node points are free and control points cannot be moved.\\
+Extra options is :\\
+\verb|"size->"| specifies the thickness of line on the Euclidean view. \\
+\itemket{Examples}\mbox{}
+
+\verb|CRspline("1",[A,B,C,D]);|
+\begin{center}
+\input{Fig/checkCR}
+\end{center}
+\end{cmd}
+
+%----------Ospline----------------------------------
+\begin{cmd}{Ospline}{ospline}
+
+\itemket{Usage}Ospline(name, a list of control points, options);
+\itemket{Description}Generic function to draw a spline curve of Oshima.
+%\itemket{Details}If the beginning and end of the list are the same, it is a closed curve.
+\itemket{Examples} \mbox{}
+
+\verb| Ospline("1",[A,B,C,D,E]);| \\
+\verb| Ospline("1",[A,B,C,D,A]);|
+
+ \hspace{20mm} \input{Fig/ospline1} \hspace{10mm} \input{Fig/ospline2}
+
+\itemket{Reference} \hyperlink{bspline}{Bspline}.
+\end{cmd}
+
+%---------Circledata-----------------------------------
+\begin{cmd}{Circledata}{circledata}
+\itemket{Usage}Circledata(name, list, options)
+\itemket{Description}Draw a circle or polygon.
+\itemket{Details}
+The list consists of the central point and some point on the circle or the radius.
+It is also permitted that three points on the circle are given in the list.
+The name can be omitted when the central point and a point on the circle
+are given with the names of their geometric components.\\
+Options :\\
+\verb|"Rng=[|$\theta_1,\theta_2$\verb|]"| specifies the range of argument
+in which the circle is drawn.\\
+\verb|"Num=number of division"| specifies the number of dividing points
+used to draw circle.
+When this number is small, the corresponding polygon is drawn.
+
+\itemket{Examples}\mbox{}
+
+The circle with center \verb|[0,0]| or A and radius 2 ( draw A by drawing tool)
+
+\verb| Circledata("1",[[0,0],[2,0]]);|(or \verb|[[0,0],2]|)\\
+\verb| Circledata("1",[A,A+[2,0]]);|(or \verb|[A,2]|)\\
+
+The circle with center A and radius AB
+
+\verb| Circledata([A,B]);|\\
+
+The circle which passes through three points A, B, and C
+
+\verb| Circledata([A,B,C]);|\\
+
+When we use \verb|Circledata([A,B,C])|,
+the central point of the circle can be drawn by the following command.
+
+\verb|Pointdata("1",[crABCcenter]);|\\
+
+When we add options \verb|"dr,2"|, \verb|"da"|, \verb|"do"|,
+the following figures are generated respectively.
+\begin{center}
+\input{Fig/circledata1}
+\end{center}
+
+The circular arc with center A, radius AB,
+and the range of argument $\displaystyle \left[0,\frac{\pi}{3}\right]$
+
+\verb|Circledata([A,B],["Rng=[0,pi/3]"]);|\\
+
+The sector.
+
+Draw A, B , C by drawing tool.
+
+\verb| th=arctan2(B-A);| \\
+\verb| C.xy=Rotatepoint(B,pi/3,A);|\\
+\verb| Circledata([A,B],[Assign("Rng=[th,th+pi/3]","th",th)]);|\\
+\verb| Listplot([B,A,C]);|\\
+\verb| Letter([A,"s","A",B,"e","B",C,"nw","C"]);|
+
+\begin{center}
+\includegraphics[bb=0.00 0.00 180.01 177.01,width=4cm"] {Fig/circledata3.pdf}\hspace{12mm} \input{Fig/circledata2}
+\end{center}
+
+The circle with center A and radius AB, together with the inscribed equilateral hexagon (left figure)
+
+\verb| Circledata("1",[A,B]);|\\
+\verb| Circledata("2",[A,B],["Num=6"]);|\\
+
+The position of vertices can be changed via the option \verb|"Rng="|. (right figure)
+
+\verb| Circledata("2",[A,B],["Num=6","Rng=[pi/6,13/6*pi]"]);|
+
+\begin{center}
+\input{Fig/circledata4} \hspace{20mm}\input{Fig/circledata5}
+\end{center}
+
+\end{cmd}
+
+%-------------Mkcircles-------------------------------
+\begin{cmd}{Mkcircles}{mkcircles}
+\itemket{Usage}Mkcircles()
+\itemket{Description}Create plotting data of all geometric circles.
+\itemket{Details}
+All circles drawn by the "add circle" tool (any one of three types) in the Euclidean view are used as plotting data as they are.
+For example, if you create a circle with the center A and the point on the circumference as B, the plotting data \verb|crAB| is created.
+After that, if you change the identification name of point B (for example to Q) in the inspector of the Euclidean view, the geometric point name is also changed.
+Even if the circle has already been drawn, it can be changed. \\
+\end{cmd}
+
+%---------Ellipseplot-----------------------------------
+\begin{cmd}{Ellipseplot}{ellipseplot}
+\itemket{Usage}Ellipseplot(name, [F1,F2,A/a], range, options)
+\itemket{Description}Generic function to draw ellipse.
+%\itemket{Details}
+\itemket{Examples}\mbox{}
+
+F1,F2 are focus points, A is a point on the ellipse, a is the length F1-A-F2.\\
+Default of the range is [-5,5].
+\itemket{Examples}\mbox{}
+
+\verb|Ellipseplot("1",[A,B,4]); | //sum of distance from Focus is 4.\\
+\verb|Ellipseplot("1",[A,B,C],"[0,pi]");| //half of ellipse.
+
+\vspace{\baselineskip}
+Now draw tangent and normal. Draw figures by draw tool on Euclidean view. Put point D on tangent and E on normal.
+
+\verb| Ellipseplot("1",[A,B,C]);|\\
+\verb| Lineplot([C,D]);|\\
+\verb| Lineplot([C,E]);|\\
+\verb| Arrowdata([A,C]);|\\
+\verb| Arrowdata([C,B]);|\\
+\verb| Anglemark([A,C,B]);|\\
+\verb| Expr([A,"s2","F_1",B,"s2","F_2"]);|
+
+\begin{center}
+\includegraphics[bb=0 0 272.01 240.01, width=5cm]{Fig/ellipsecindy.pdf}\hspace{10mm}
+\input{Fig/ellipseplot1}
+\end{center}
+
+Now draw point D and E on ellipse.
+
+\verb| Ellipseplot("1",[A,B,C]);|\\
+\verb| Listplot([A,C,B]);|\\
+\verb| Listplot([A,D,B]);|\\
+\verb| Listplot([A,E,B]);|\\
+\verb| Expr([A,"s2","F_1",B,"s2","F_2"]);|
+
+\begin{center}
+\input{Fig/ellipseplot2}
+\end{center}
+\end{cmd}
+
+%----------Hyperbolaplot----------------------------------
+\begin{cmd}{Hyperbolaplot}{hyperbolaplot}
+\itemket{Usage}Hyperbolaplot(name,[F1,F2,A], range, options)
+\itemket{Description}Generic function to draw a hyperbola.
+\itemket{Details}Option is as usual except "Asy=line style".This option is for drawing asymptotes.
+\itemket{Reference} \hyperlink{ellipseplot}{Ellipseplot} and \hyperlink{parabolaplot}{Parabolaplot}.
+\itemket{Examples}\mbox{}
+
+\verb|Hyperbolaplot("1",[A,B,C]);|\\
+\verb|Hyperbolaplot("1",[A,B,2]);|\\
+\verb|Hyperbolaplot("1",[A,B,C],["Asy=do"]);|
+
+\begin{center}
+\input{Fig/hyper1}
+\end{center}
+\end{cmd}
+
+%--------Parabolaplot------------------------------------
+\begin{cmd}{Parabolaplot}{parabolaplot}
+
+\itemket{Usage}Parabolaplot(name, [A, B, C], range, options);
+\itemket{Description}Generic function to draws a parabola.% determined by the focus and the directrix indicated by the list [A, B, C] of points.
+\itemket{Details}A is the focus point, BC is the directrix.
+Default of the range is $[-5, 5]$.
+
+\itemket{Examples} \mbox{}
+
+\verb|Parabolaplot("1",[A,B,C]); |
+
+\verb|Parabolaplot("1",[A,B,C],"[-4,4]"); | //range is [-4,4]
+
+\verb|Parabolaplot("1",[[0,1],[-1,-1],[1,-1]]);| // coordinate
+
+\vspace{\baselineskip}
+Area enclosed by parabola and tangent
+
+\verb|Parabolaplot("1",[A,B,C]);|\\
+\verb|Putoncurve("D","gr1para");|\\
+\verb|Putoncurve("E","gr1para");|\\
+\verb|Tangentplot("1","gr1para","x="+D.x);|\\
+\verb|Tangentplot("2","gr1para","x="+E.x);|\\
+\verb|pts=Intersectcurves("lntn1","lntn2");|\\
+\verb|Listplot("1",[E,pts_1,D]);|\\
+\verb|Hatchdata("1",["ii"],[["gr1para","s"],["sg1","n"]]);|
+
+\begin{center}
+\input{Fig/parabolaplotE}
+\end{center}
+\end{cmd}
+
+%-----------Ovaldata---------------------------------
+\begin{cmd}{Ovaldata}{ovaldata}
+
+\itemket{Usage}Ovaldata(name, [A, B], options);
+\itemket{Description}Generic function to draw a rectangle with rounded corners.
+\itemket{Details}A is the center, B is a diagonal point.
+
+option : ratio of the roundness ( default is 0.2) .
+
+\itemket{Examples} \mbox{}
+
+\verb| Ovaldata("1", [A,B]);| \\
+\verb| Ovaldata("2", [C,D],[0]);| \\
+\verb| Ovaldata("3", [E,F],[1,"dr,3"]);| \\
+\verb| Ovaldata("4", [G,H],[1.5,"da"]);|
+
+\begin{center}
+\input{Fig/ovaldata}
+\end{center}
+\end{cmd}
+
+%=========== Graph of function ============
+\subsubsection{Graph of function}
+
+%--------Plotdata------------------------------------
+\begin{cmd}{Plotdata}{plotdata}
+\itemket{Usage}Plotdata(name, function, variable and range, options)
+\itemket{Description}Generic function to draw the graph of function.
+\itemket{Details}
+Options : next options and usual options.
+
+\hspace{20mm} "Dis=real number": discontinuity
+
+\hspace{20mm} "Exc=list of real numbers": exclusion points
+
+\hspace{20mm} "Exc=function": exclude the zero points of the function
+
+\itemket{Examples}\mbox{}
+
+\verb| Plotdata("1","x^2-2*x","x");|\\
+
+\hspace{20mm} \input{Fig/plotdata1}\\
+
+Draw in red.
+
+\verb| Plotdata("1","x^2-2*x","x",["Color=[1,0,0]"]);|\\
+
+\verb| Plotdata("3","2*sin(2*x-pi/4)","x=[0,2*pi]");|\\
+
+\hspace{20mm} \input{Fig/plotdata2}\\
+
+\verb| Plotdata("1","sin(x)","x",["do"]);|\\
+\verb| Plotdata("2","sin(x)+1","x",["da"]);|\\
+\verb| Plotdata("3","sin(x)+2","x",["dr,2"]);|\\
+\verb| Plotdata("4","sin(x)+3","x");|\\
+
+\hspace{20mm} \input{Fig/plotdata3}\\
+
+Draw smoothly by "Num=n" option.
+
+Left figure: "Num=50"(default),\quad
+Right figure: "Num=200"\\
+
+\hspace{20mm}\input{Fig/plotdata4}\\
+
+Draw discontinuity accurately by "Dis" option.
+
+\verb| Plotdata("1","tan(x)","x",["Num=200"]); | // left figure \\
+\verb| Plotdata("1","tan(x)","x",["Num=200","Dis=50"]); | // right figure \\
+
+\hspace{20mm}\input{Fig/plotdatatan1}\hspace{20mm}\input{Fig/plotdatatan2}
+
+\vspace{\baselineskip}
+Draw floor function.
+
+\verb| Plotdata("1","floor(x)","x",["Num=100","Dis=0.9"]); |\\
+\verb| Drwxy(); |\\
+\verb| repeat(7,s,start -> -2, |\\
+\verb| Pointdata(text(s+3),[s+1,s],["Inside=0","Size=3"]);|\\
+\verb| ); |
+
+\vspace{\baselineskip}
+\hspace{40mm} \input{Fig/plotdata5}\\
+
+Assign a value to the letter "b".\\
+\verb| repeat(50,t,|\\
+\verb| cb=t/5-5;|\\
+\verb| Plotdata(text(t),Assign("b*x-b^2","b",cb),"x");|\\
+\verb| );|\\
+
+\hspace{40mm} \input{Fig/assign}\\
+
+\end{cmd}
+
+%----------Implicitplot----------------------------------
+\begin{cmd}{Implicitplot}{implicitplot}
+\itemket{Usage}Implicitplot(name,functionstring,range of x, range of y, options);
+\itemket{Usage}Generic function to draw the graph of a implicit function.
+\itemket{Examples}\mbox{}
+
+\verb| Implicitplot("1","x^2-x*y+2*y^2=4","x=[-3,3]","y=[-2,2]");|
+
+\begin{center}
+\input{Fig/implicit1}
+\end{center}
+
+\verb|Implicitplot("1","x^2+2*y^2=4","x=[-2,2]","y=[-2,2]");|\\
+\verb|Hatchdata("1",["i"],[["imp1"]]);|
+
+\begin{center}
+\input{Fig/implicit}
+\end{center}
+
+\end{cmd}
+
+%-------Deqplot-------------------------------------
+\begin{cmd}{Deqplot}{deqplot}
+\itemket{Usage}Deqplot(name, expression, names of variations, options)
+\itemket{Description}Draw the solution curve of a differential equation.
+\itemket{Details}
+The differential equation and its initial conditions should be specified as arguments.
+\itemket{Examples}\mbox{}
+
+The solution curve of the equation $y"=-y$ with initial conditions $y(0)=1,y'(0)=0$
+
+\verb|Deqplot("1","y``=-y","x",0, [1,0]);|\\
+\begin{center}
+\input{Fig/deqplot1}
+\end{center}
+\itemket{Remark} Derivative symbol \verb|y`| is a backquate, not a single quote.\\
+
+The solution curve of the equation $y'=y*(1-y)$ with initial condition $y(0)=0.5$
+
+\verb|Deqplot("2","y`=y*(1-y)","x",0, 0.5,["Num=100"]);|\\
+\begin{center}
+\input{Fig/deqplot2}
+\end{center}
+
+The solution curve of the equation $[x,y]'=[x(1-y),0.3y(x-1)]$ of variable $t$
+with initial conditions $x(0)=1, y(0)=0.5$
+
+\verb|Deqplot("3","[x,y]`=[x*(1-y),0.3*y*(x-1)]","t=[0,20]",[1,0.5],["Num=200"]);|\\
+\begin{center}
+\input{Fig/deqplot3}
+\end{center}
+\end{cmd}
+
+%----------Paramplot----------------------------------
+\begin{cmd}{Paramplot}{paramplot}
+
+\itemket{Usage}Paramaplot(name, expression, variable and domain, options);
+\itemket{Description}Generic function to draw a curve of parametric representation.% The head of the plotting data is gp.
+%\itemket{Details}
+\itemket{Examples} \mbox{}
+
+Draw a cycloid curve.
+
+\verb| Paramplot("1","[t-sin(t),1-cos(t)]","t=[0,2*pi]");|\\
+
+\begin{center}
+\input{Fig//paramplot1}
+\end{center}
+
+Draw ellipses with options.\\
+
+\verb| Paramplot("1","[2*cos(t)-5,sin(t)]","t=[0,2*pi]");| \\
+\verb| Paramplot("2","[2*cos(t),sin(t)]","t=[0,2*pi]",["dr,2"]);| \\
+\verb| Paramplot("3","[2*cos(t)+5,sin(t)]","t=[0,2*pi]",["da"]);| \\
+\verb| Paramplot("4","[2*cos(t)+10,sin(t)]","t=[0,2*pi]",["do"]);|
+
+\begin{center}
+\input{Fig//paramplot2}
+\end{center}
+\end{cmd}
+
+%----------Polarplot----------------------------------
+\begin{cmd}{Polarplot}{polarplot}
+
+\itemket{Usage}Polarplot(name, expression, variable and domain, options);
+\itemket{Description}This function draws a curve of polar equation.
+%\itemket{Details}
+\itemket{Examples} To draw a cardioid.
+
+\verb| Polarplot("1","2*(1+cos(t))","t=[0,2*pi]",["Num=200"]);|\\
+
+\begin{center}
+\input{Fig//cardioid1}
+\end{center}
+
+\end{cmd}
+
+%------Periodfun--------------------------------------
+\begin{cmd}{Periodfun}{periodfun}
+\itemket{Usage}Periodfun(defL,repeat,options)
+\itemket{Description}Function to draw the graph of a periodic function.
+\itemket{Details}
+\verb|defL| is a list of fun(str),interval,division number.\\
+The options are "Con=n/do, Color=name" for discontinuous parts.
+
+ex. "Con=do,Color=red" , " Con=n". Default is broken line and draw.
+
+Repeat count is a count number or a list of count numbers of left side and right side.
+
+The return value are a list of function in Maxima format and the period.
+\itemket{Remark}The functions should be defined on the symmetrical interval [-a,a].
+\itemket{Examples} \mbox{}
+
+\verb| defL=["0",[-1,0],1,"1",[0,1],1];|\\
+\verb| Periodfun(defL, 2,["dr,2"]);|\\
+\verb| memori=apply(-5..5,x,[x,text(x)]);|\\
+\verb| memori=flatten(remove(memori,[[0,"0"]]));|\\
+\verb| Htickmark(memori);|\\
+\verb| Vtickmark([1,"1"]);|
+
+\hspace{20mm}\input{Fig/periodfun.tex}
+
+\vspace{\baselineskip}
+\verb| defL=["0",[-1,0],1,"x^2",[0,1],50];|\\
+\verb| Periodfun(defL, 2, ["Con=n","dr,2"]);|\\
+\verb| memori=apply(-5..5,x,[x,text(x)]);|\\
+\verb| memori=flatten(remove(memori,[[0,"0"]]));|\\
+\verb| Htickmark(memori);|\\
+\verb| Vtickmark([1,"1"]);|
+
+\hspace{20mm}\input{Fig/periodfun2.tex}
+
+\end{cmd}
+
+
+%--------Fourierseries------------------------------------
+\begin{cmd}{Fourierseries}{fourierseries}
+\itemket{Usage}Fourierseries(name,coeff,period,terms)
+\itemket{Description}Function to draw the graph of a fourier series.
+\itemket{Details}
+$a_0+\displaystyle{\sum _{n=1} ^{\infty}(a_n \cos nx + b_n \sin nx)}$
+
+\verb|coeff| is a list of [$a_0, a_n, b_n$]. Each element are string.\\
+\verb|term| is a number of terms.
+\itemket{Examples} \mbox{}
+
+\verb|Fourierseries("1",["1/2","0","(1-(-1)^n)/(pi*n)"],2,6,["Num=200"]);|
+
+\hspace{20mm}\input{Fig/fourierseries.tex}
+
+\end{cmd}
+
+
+%-----------Tangentplot---------------------------------
+\begin{cmd}{Tangentplot}{tangentplot}
+\itemket{Usage}Tangentplot(name,PD, pointinfo, options);
+\itemket{Description}Generic funtion to draw a tangent line of a plotting data.
+\itemket{Details}
+The pointinfo is one of "x=xvalue","y=yvalue", [point, parameter].\\
+The option "nth" is used to set the number when plotting data has multi intersects.
+
+\itemket{Examples}\mbox{}
+
+\verb|Plotdata(`"1","x^2","x")|\\
+\verb|Tangentplot("1","gr1","x=2");|\\
+\verb|Tangentplot("2","gr1","y=1",["Color=red"]);|\\
+\verb|Tangentplot("3","gr1","y=1",[2,"Color=blue"])|\\
+
+\begin{center}
+\input{Fig/tangent}
+\end{center}
+
+\itemket{Reference} \hyperlink{derivative}{Derivative}.
+\end{cmd}
+
+%==========- Letter =================
+\subsubsection{Letter}
+
+%-----------Letter---------------------------------
+\begin{cmd}{Letter}{letter}
+\itemket{Usage}Letter([position, direction, string],options)
+\itemket{Description}Display the string.
+\itemket{Details}
+Write the string at the position specified by position (or coordinates) and direction. \\
+The position (or coordinates) can also be specified by the geometric point name. \\
+The direction is "e", "w", "n", "s", "c".
+The distance from the specified position can also be given as a numerical value. For example, "e2" and "e3" are placed twice and three times of the slightly unit distance away from "e", respectively. \\
+Multiple strings can be passed in the form of a list. \\
+\itemket{Remark}\mbox{}
+The derivative symbol $'$ uses \$ $'$ \$ (single quart) in mathematical mode (interleaved with two \$ s).
+Option is size of font. For example, ["size=32"]
+\item[Example]\mbox{}
+
+\verb|Letter([[2,1] ,"se","P"]); | // Display P in the southeast of the coordinates (2, 1). \\
+\verb|Letter([C ,"c", "C"]); | // Display C with the point C as the center. \\
+\verb|Letter([A,"sw","A",E,"s","$ f(x)=\frac{1}{4} x^2 $"]);|
+
+\hspace{5mm} //Display A in the southwest of point A and $ f(x)=\frac{1}{4} x^2 $ in the south of the point E. \\
+
+\end{cmd}
+
+%-------Letterrot-------------------------------------
+\begin{cmd}{Letterrot}{letterrot}
+\itemket{Usage}Letterrot([pos, dir, move, string])
+\itemket{Description}Rotate a string and display it.
+\itemket{Details}
+At the position of the coordinates, rotate to the direction specified by the direction vector and write the string.\\
+The third argument is a minute movement amount and can be abbreviated.\\
+\item[Example]\mbox{}
+
+\hspace{10mm}\verb|Letterrot(C,B-A,"t2n5","AB");|
+
+It is also possible to write as follows, abbreviated for the amount of movement.
+
+\hspace{10mm}\verb|Letterrot(C,B-A,"AB");|
+
+\itemket{Reference} \hyperlink{exprrot}{Exprrot}.
+
+\end{cmd}
+
+%--------Expr ------------------------------------
+\begin{cmd}{Expr}{expr}
+\itemket{Usage}Expr([pos, dir, string]);
+\itemket{Description}Generic function to write an expression in \TeX style.
+\itemket{Details}pos : position
+
+\hspace{14mm} dir : direction(e,w,s,n,ne,nw,se,sw,c)
+
+\hspace{14mm} string : expression\\
+
+\hspace{14mm}Also see \hyperlink{letter}{Letter}
+
+\itemket{Examples}\mbox{}
+
+\verb|Expr([[-3,3],"e","f(x)=\frac{1}{4}x^2"]);|\\
+\verb|Expr([[3,1.5],"s2e2","f‘(x)=\frac{1}{2}x",[2,0],"s","2",[0,1],"w","1"]);|
+
+\begin{center}
+\input{Fig/expr}
+\end{center}
+
+\verb|Arrowdata(Q,P);|\\
+\verb|Expr([Q,"ne2","\displaystyle\int_a^b \log x\,dx="|\\
+\verb| +text(L.x*(log(L.x)-1)-G.x*(log(G.x)-1))]);|
+
+\vspace{5mm}
+
+\begin{center}
+\input{Fig/intlog}
+\end{center}
+\end{cmd}
+
+%------ Exprrot -------------------------------------
+\begin{cmd}{Exprrot}{exprrot}
+\itemket{Usage}Exprrot([pos, dir,[move(optional)], string);
+\itemket{Description}Generic function to write a rotated expression in \TeX style.
+\itemket{Details}pos : position : coordinate or name
+
+\hspace{15mm} dir : direction vector : coordinate or name
+
+\hspace{15mm} move: "t":tangent , "n":normal
+
+\hspace{15mm} string : expression
+\itemket{Examples}\mbox{}
+
+\verb|Exprrot(C,B-A,"\frac{2}{3}");|\\
+\verb|Exprrot([3,2],[2,-1],"t0n1","\sqrt{3}");|
+
+\vspace{\baselineskip}
+\vspace{\baselineskip}
+\hspace{10mm}\includegraphics[bb=0.00 0.00 181.01 131.01,width=4cm]{Fig/exprrot.pdf} \hspace{10mm} \input{Fig/exprrot}
+
+\end{cmd}
+
+%============== Marking ================
+\subsubsection{Marking}
+
+%------------Anglemark--------------------------------
+\begin{cmd}{Anglemark}{anglemark}
+\itemket{Usage}Anglemark( a list of points, options);
+\itemket{Description}draw an angle mark with an arc at the angle determined by [A,B,C]
+
+\hspace{10mm} Options :
+
+\hspace{15mm} numerical value size of mark (default is 1)
+
+\hspace{15mm} draw text \verb|"Expr=n,str"| or \verb|"Let=n,str"|
+
+\itemket{Examples}\mbox{}
+
+draw an angle mark at interior angles of a triangle, write characters.\\
+\verb| Listplot([A,B,C,A]);|\\
+\verb| Letter([A,"n1","A",B,"w1","B",C,"e1","C"]);|\\
+\verb| Anglemark([B,A,C]);|\\
+\verb| Anglemark([C,B,A],["Expr=\theta"]);|\\
+\verb| Anglemark([A,C,B],[2,"dr,3","Expr=2,\alpha"]);|\\
+
+\begin{center}
+\input{Fig/anglemark}
+\end{center}
+
+draw $\circ$ at interior angles of a triangle.\\
+
+\verb| Listplot([A,B,C,A]);|\\
+\verb| Letter([A,"n1","A",B,"w1","B",C,"e1","C"]);|\\
+\verb| Anglemark([C,B,A],["Expr=\circ","nodisp"]);|\\
+
+\begin{center}
+\input{Fig/anglemark2}
+
+\end{center}
+\item{Remark} You can draw an angle mark with a parallelogram.
+Refer to \hyperlink{paramark}{Paramark} .
+\end{cmd}
+
+%--------Paramark------------------------------------
+\begin{cmd}{Paramark}{paramark}
+
+\itemket{Usage}Paramark([A, B, C], options);
+\itemket{Description}Generic function to draw an angle mark with a parallelogram at the angle determined by [A,B,C].\\
+Options : numerical value size of mark (default is 1) and usual options.
+\itemket{Examples}
+
+Draw an angle mark at interior angles of a triangle, write characters.\\%\mbox{}
+
+\verb| Listplot([A,B,C,A]);| \\
+\verb| Paramark([A,B,C]); |\\
+\verb| Paramark([C,A,B],[3,"Expr=\alpha"]); |\\
+\verb| Paramark([B,C,A],["dr,2","Expr=2,\theta"]);| \\
+
+\begin{center}
+\input{Fig/paramark}
+\end{center}
+
+\itemket{Reference} \hyperlink{anglemark}{Anglemark}.
+\end{cmd}
+
+%------------Bowdata--------------------------------
+\begin{cmd}{Bowdata}{bowdata}
+\itemket{Usage}Bowdata(a list of points, options);
+\itemket{Description}draw the shape of bow connecting two points in the list counterclockwise
+\itemket{Details}
+
+Options :\\
+curvature (default is 1)\\
+size of the blank space in the middle of bow\\
+expression located at the blank space \verb|"Expr=expressions"|\\
+The location of expressions can be modified via \verb|"Expr=tn, expressions"| where
+\verb|t| specifies the movement in the direction of segment and
+\verb|n| specifies that of normal direction.
+Both positive and negative numbers are permitted.\\
+line type \verb|"dr,n" , "da,m,n" , "do,m,n"|
+\itemket{Examples}\mbox{}
+
+draw the shapes of bow along with the edges of triangle ABC and add marks.\\
+\verb| Listplot([A,B,C,A]);|\\
+\verb| Letter([A,"n1","A",B,"w1","B",C,"e1","C"]);|\\
+\verb| Bowdata([A,B]);|\\
+\verb| Bowdata([B,C],[1,"Expr=t0n3,a"]);|\\
+\verb| Bowdata([C,A],[2,1.2,"Expr=10","da"]);|
+\begin{center}
+\input{Fig/bowdata}
+\end{center}
+
+Expressions can be displayed in rotated manner
+via \verb|"Exprrot=tn,expressions"|
+though the Euclidean view does not correspond to this modification.
+Adding \verb|r| to \verb|tn| results in the turning round.
+\itemket{Examples}\mbox{}
+
+\verb| Bowdata([B,A],[1,1,"Exprrot=a"]);|\\
+\verb| Bowdata([D,C],[1,1,"Exprrot=t3n0,a"]);|\\
+\verb| Bowdata([F,E],[1,1,"Exprrot=t-3n0,a"]);|\\
+\verb| Bowdata([H,G],[1,1,"Exprrot=t0n3,a"]);|\\
+\verb| Bowdata([L,K],[1,1,"Exprrot=t0n0r,a"]);|\\
+\verb| Bowdata([N,M],[1,1,"Exprrot=t3n0r,a"]);|
+\begin{center}
+\input{Fig/bowdata2}
+\end{center}
+\end{cmd}
+
+%------Drawsegmark--------------------------------------
+\begin{cmd}{Drawsegmark}{drawsegmark}
+\itemket{Usage}Drawsegmark(name, list, options) or Segmark(name, list, options)
+\itemket{Description}Add a mark to a segment.
+\itemket{Details}
+Add a mark to the segment determined by the end points specified in the list.
+Four kinds of marks can be used.\\
+Extra options :\\
+\verb|"Type=n"| (n=1,2,3,4) specifies the kind of mark.\\
+\verb|"Width="| specifies the distance between two segments of the mark
+(in case when $n=2$).
+\itemket{Examples}\mbox{}
+
+\verb|Listplot([A,B,C,D,A]);|\\
+\verb|Segmark("1",[A,B],["Type=1"]);|\\
+\verb|Segmark("2",[B,C],["Type=2","Width=1.5"]);| //width of two lines\\
+\verb|Segmark("3",[C,D],["Type=3"]);|\\
+\verb|Segmark("4",[D,A],["Type=4"]);|
+\begin{center}
+\input{Fig/segmark}
+\end{center}
+\end{cmd}
+
+%--------Htickmark------------------------------------
+\begin{cmd}{Htickmark}{htickmark}
+\itemket{Usage}Htickmark([x-coord,[direction(optional)],expression,...]);
+\itemket{Description}Generic function to tick on the horizontal axis.
+\itemket{Details}Default of direction is \verb|"s1"|. Minor adjustments are not displayed on the Euclidean view, you have to check the results on the PDF file. The length of tickmarks can be set by the function \hyperlink{setmarklen}{Setmarklen()}.
+\itemket{Examples}\mbox{}
+
+\verb|Htickmark([1,"1",2,"n1","2",3,"se","3",4,"4"]);|
+
+\begin{center}
+\input{Fig/htickmark01}
+\end{center}
+
+\verb|ticks=apply(-5..5,x,[x,text(x)]);| // ticks is [ [-5,"5"],...,[5,"5"] ]\\
+\verb|ticks=remove(ticks,[[0,"0"]]); | // [0,"0"] is removed\\
+\verb|ticks=flatten(ticks); | // ticks becomes [-5,"5",...,5,"5"]\\
+\verb|Htickmark(ticks);|
+
+\begin{center}
+\input{Fig/htickmark}
+\end{center}
+
+\itemket{Reference} \hyperlink{vtickmark}{Vtickmark}.
+\end{cmd}
+
+%------------Vtickmark--------------------------------
+\begin{cmd}{Vtickmark}{vtickmark}
+\itemket{Usage}Vtickmark([y-coord,[direction(optional)],expression,...]);
+\itemket{Description}Generic function to tick on the vertical axis.
+\itemket{Details}Default of direction is \verb|"w1"|.
+\itemket{Examples}\mbox{}
+
+\verb|Vtickmark([1,"1",2,"2"]);|
+
+\itemket{Reference} \hyperlink{htickmark}{Htickmark}.
+\end{cmd}
+
+%--------------Rulerscale------------------------------
+\begin{cmd}{Rulerscale}{rulerscale}
+\itemket{Usage}Rulerscale(starting point, horizontal marks, vertical marks);
+\itemket{Description}Generic functio to put ruler marks.
+\itemket{Details}
+
+The marks are give as a list.\\
+\verb|["r",a,b,c,d]| to put marks from \verb|a| to \verb|b| with intervals \verb|c|, scales \verb|d|.\\
+\verb|["f",n1,"str",n2,"str",・・] | to put marks as the same format as Htickmark.
+\itemket{Examples1}\mbox{}
+
+\verb|Listplot("1",[[2,1],[9,1]]);|\\
+\verb|Rulerscale([2,1],["r",2,9,1,10],[]);|
+
+\begin{center}\input{Fig/ruler1}\end{center}
+
+\itemket{Examples2}\mbox{}
+
+\verb|Framedata("1",[A,B],["corner"]);|\\
+\verb|Rulerscale(A,["r",0,5,1],["f",1,"d1",3,"d2"]);|
+
+\begin{center}\input{Fig/ruler}\end{center}
+
+\end{cmd}
+
+%========== Using plotting data ===============
+\subsection{Using plotting data}
+
+%--------------Changestyle------------------------------
+\begin{cmd}{Changestyle}{changestyle}
+\itemket{Usage}Changestyle(list of PD, options)
+\itemket{Description}Change the option for drawing.
+\itemket{Details}
+Change the option for drawing several shapes altogether.
+\itemket{Examples}\mbox{}
+
+Draw segment AB and Circle AB with broken line on the Euclidean view
+and keep them from being drawn on \TeX\ final output.
+
+\verb| Listplot([A,B]);|\\
+\verb| Circledata([A,B]);|\\
+\verb| Changestyle(["sgAB","crAB"],["da","notex"]);|
+
+\end{cmd}
+
+%--------Drawfigures ------------------------------------
+\begin{cmd}{Drawfigures}{drawfigures}
+
+\itemket{Usage}Drawfigures(or Drwfigs)(name,List of PDs,List of Options)
+\itemket{Description}Manipulate a plural number of PDs together.
+\itemket{Remark} List of Options should corrensponds to that of PDs.
+
+%\itemket{Details}
+\itemket{Examples}\mbox{}
+After manipulating PDs of a circle and a point on the circle by AddGraph, you can translate or rotate them together.\\
+
+\begin{verbatim}
+opcr=["dr"];
+oppt=["Size=2","Color=red"];
+Circledata("1",[[0,1],[0,0]],opcr);
+Pointdata("1",[0,0],oppt);
+ad1=["cr1","pt1"];
+dt=2*pi/32;
+opcr=["dr,0.3"];
+nn=32;
+forall(1..nn,
+ t=dt*#;
+ Rotatedata(2,ad1,-t,[[0,1],"nodisp"]);
+ Translatedata(2,"rt2",[t,0],["nodisp"]);
+ Drawfigures(text(#),["tr2_1","tr2_2"],[opcr,oppt]);
+);
+\end{verbatim}
+
+\begin{center}
+ \input{Fig/drawfigures1}
+\end{center}
+
+\end{cmd}
+
+%------------Invert--------------------------------
+\begin{cmd}{Invert}{invert}
+\itemket{Usage}Invert(PD)
+\itemket{Description}Rearrange plotting data in the reverse order.
+\itemket{Examples}\mbox{}
+
+See the examples in \hyperlink{shade}{Shade}
+
+\end{cmd}
+
+%-------------Joincrvs-------------------------------
+\begin{cmd}{Joincrvs}{joincrvs}
+\itemket{Usage}Joincrvs(name, list of PDs, options)
+\itemket{Description}Create a plotting data of one curve by connecting a list of plotting data of adjacent curves.
+\itemket{Details}
+The list of curves is specified in the adjacent order. \\
+Options is line type.
+
+\itemket{Examples}\mbox{}
+
+Draw the closed curve obtained from the line segment $y=x\ (-\sqrt{2} \leq x \leq \sqrt{2})$ and the half circle, and paint the interior of the closed curve using the yellow color.\\
+Put the point A at the origin and the point B in the appropriate place.\\
+\verb|Plotdata("1","x","x=[-sqrt(2),sqrt(2)]");|\\
+\verb|B.xy=[sqrt(2),sqrt(2)];|\\
+\verb|Circledata("2",[A,B],["Rng=[pi/4,pi/4*5]"]);|\\
+\verb|Joincrvs("1",["gr1","cr2"]);|\\
+\verb|Shade(["join1"],["Color=yellow"]);|\\
+\begin{center}
+\input{Fig/joincrvs.tex}
+\end{center}
+\end{cmd}
+
+
+%--------Partcrv------------------------------------
+\begin{cmd}{Partcrv}{partcrv}
+\itemket{Usage}Partcrv(name, A, B, PD, options)
+\itemket{Description}Generic function to make a piece of curve from the PD between the points A and B.
+\itemket{Details}The order of two points A, B must be same as the direction of the curve.\\
+Options are "dr, n", "da,m,n" or "do,m,n"\\
+\itemket{Examples}\mbox{}
+
+In the following example We draw a parabola with dotted line and draw a piece of curve with real line.\\
+\verb| Plotdata("1","x^2","x",["do"]);|\\
+\verb| Partcrv("1", [0,0], [1,1], "gr1");|
+
+\begin{center}
+\input{Fig/partcrv1}
+\end{center}
+
+In the next example we draw a piece of circle with real line. The direction of a circle is counterclockwise direction.\\
+\verb| Circledata([A,B], ["do"]);|\\
+\verb| Plotdata("1","x^2","x",["do"]);|\\
+\verb| tmp=Intersectcrvs("crAB","gr1");|\\
+\verb| P.xy=tmp_1;|\\
+\verb| Q.xy=tmp_2;|\\
+\verb| Partcrv("1", P, Q, "crAB");|\\
+\verb| Partcrv("2", Q, P, "crAB");|
+\vspace{5mm}
+
+\begin{center}
+\begin{minipage}{45mm}
+\begin{center}
+\input{Fig/partcrv3}\\
+figure of part1
+\end{center}
+\end{minipage}
+\hspace{10mm}
+\begin{minipage}{45mm}
+\begin{center}
+\input{Fig/partcrv4}\\
+figure of part2
+\end{center}
+\end{minipage}
+\end{center}
+
+In the last example we draw the pice of parabola:$y=x^2$ which is cut off by the circle.\\
+\verb| Circledata("1",[[0,2],[0,0]],["da"]);|\\
+\verb| Plotdata("1","x^2","x",["do"]);|\\
+\verb| tmp=Intersectcrvs("cr1","gr1");|\\
+\verb| Partcrv("2",tmp_2,tmp_1,"gr1",["dr,2"]);|
+
+\begin{center}
+\input{Fig/partcrv}
+\end{center}
+
+\end{cmd}
+
+%-------- Enclosing ------------------------------------
+\begin{cmd}{Enclosing}{enclosing}
+\item[Usage]Enclosing(name, a list of plotdata, options);
+\item[Description]This function makes a closed curve form the list of plotdata.
+\item[Details]Options are:\\
+near point from start position : Set in case where the first curve and the last curve have multi intersects.\\
+\verb|"dr","da", "do","`notex","nodisp","Color= "| : as usual.
+\item[Examples]\mbox{}
+
+\verb|Plotdata("1","x^2","x");|\\
+\verb|Lineplot("1",[[0,0],[1,0]]);|\\
+\verb|Lineplot("2",[[2,0],[2,1]]);|\\
+\verb|Enclosing("1",["Invert(gr1)","ln1","ln2"],["nodisp"]);|\\
+\verb|Shade(["en1"],["Color=red"]);|
+
+\begin{center}
+\input{Fig/enclosing}
+\end{center}
+
+\item{Remark}The followings have the opposite direction.
+
+\verb|Enclosing("1",["ln1","ln2","Invert(gr1)"]);|\\
+\verb|Enclosing("1",["gr1","Invert(ln2)","Invert(ln1)"]);|
+\end{cmd}
+
+
+%---------Hatchdata-----------------------------------
+\begin{cmd}{Hatchdata}{hatchdata}
+\itemket{Usage}Hatchdata(name, a list of "i" or "o" , a list of a list of PD , options)
+\itemket{Description}Generic function to draw hatch lines in the close curve.
+\itemket{Details}Options are:\\
+\hspace*{5mm}angle(degree,45), interval(ratio,1) of hatches, \\
+\hspace*{5mm}\verb|"Max=(default:20)"| maximum of the number of hatches.\\
+\hspace*{5mm}\verb|"No=pointlist"| not executed when any point is selected\\
+\hspace*{5mm}\verb|"File=y/m/n(default:n)"| whether to make data file or not\\
+\hspace*{5mm}\verb|"Check=pointlist"| data file updated if any point is changed
+
+\itemket{Examples}\mbox{}
+
+
+\verb|Circledata([A,B],["dr"]);|\\
+\verb|Hatchdata("1",["i"],[["crAB"]],["dr,0.7"]);|
+
+\verb|Circledata([A,B],["dr"]);|\\
+\verb|Paramplot("1","[4*cos(t),2*sin(t)]","t=[0,2*pi]");|\\
+\verb|Paramplot("2","[2*cos(t),4*sin(t)]","t=[0,2*pi]");|\\
+\verb|Hatchdata("1",["ioi"],[["crAB"],["gp1"],["gp2"]],["dr,0.7"]);|\\
+\verb|Hatchdata("2",["iio"],[["crAB"],["gp1"],["gp2"]],["dr,0.7"]);|
+
+\begin{center}
+\input{Fig/hatch1}\hspace{10mm}\input{Fig/hatch2}
+\end{center}
+
+\verb|Plotdata("1","2*sin(x)","x=[-pi,3*pi]",["Num=100"]);|\\
+\verb|Listplot([A,B]);|\\
+\verb|Listplot([A,C]);|\\
+\verb|Hatchdata("1",["ii"],[["sgAB","n"],["gr1","s"]],["dr,0.7"]);|\\
+\verb|Hatchdata("2",["ii"],[["sgAC","s"],["gr1","n"]],["dr,0.7"]);|
+
+\begin{center}
+\input{Fig/hatch3}
+\end{center}
+
+\verb|Plotdata("1","2*sin(x)","x=[-pi,3*pi]",["Num=100"]);|\\
+\verb|Listplot([A,B]);|\\
+\verb|Listplot([A,C]);|\\
+\verb|Hatchdata("1",["iio"],[["sgAB","s"],["sgAC","n"],["gr1","n"]]);|
+
+\begin{center}
+\input{Fig/hatch4}
+\end{center}
+
+\verb|Deffun("f(x)",["regional(y)","y=x^3-2*x","y"]);|\\
+\verb|Plotdata("1","f(x)","x",["Num=100"]);|\\
+\verb|Putoncurve("A","gr1");|\\
+\verb|coef=Derivative("f(x)","x",A.x);|\\
+\verb|Defvar(["coef",coef]);|\\
+\verb|Deffun("g(x)",["regional(y)","y=coef*(x-A.x)+A.y","y"]);|\\
+\verb|Plotdata("2","g(x)","x",["Num=1"]);|\\
+\verb|if(!Ptselected(), // if any point is not selected|\\
+\verb| Enclosing("1",["gr2","Invert(gr1)"],[A,"nodisp"]);|\\
+\verb| Hatchdata("1",["i"],[["en1"]]);|\\
+\verb|);|
+
+\begin{center}
+\input{Fig/hatch5}
+\end{center}
+
+\verb|Circledata([A,B]);|\\
+\verb|Hatchdata("1",["i"],[["crAB"]]);|\\
+\verb|Hatchdata("2",["i"],[["crAB"]],[-40,2]);|// $\mbox{angle}=-40^{\circ}, \mbox{interval}=\times 2$|\\
+\verb|Hatchdata("3",["i"],[["crAB"]],["dr,0.5"]);|\\
+\verb|Hatchdata("4",["i"],[["crAB"]],[-45,2,"dr,0.5"]);|
+
+\begin{center}
+\input{Fig/HatchZuKita1.tex}
+\end{center}
+
+\verb|Lineplot("1",[A,B]);// name of this data is ln1|\\
+\verb|Lineplot("2",[A,C]);|\\
+\verb|Hatchdata("5",["iii"],[["crAB"],["ln1","n"],["ln2","n"]]);|\\
+\verb|Hatchdata("6",["ioo"],[["crAB"],["ln1","n"],["ln2","n"]]);|
+
+\begin{center}
+\input{Fig/HatchZuKita5E.tex}\hspace{10mm}\input{Fig/HatchZuKita6E.tex}
+\end{center}
+
+\verb|Circledata([A,B],["nodisp"]);|\\
+\verb|Hatchdata("7",["i"],[["crAB"]]);|\\
+\verb|Circledata([A,B],["da"]);|\\
+\verb|Hatchdata("8",["i"],[["crAB"]]);|
+
+\begin{center}
+\input{Fig/HatchZuKita7E.tex}\hspace{10mm}\input{Fig/HatchZuKita8E.tex}
+\end{center}
+
+%\verb|Hatchdata("9a",["iii"],[["crAB"],["ln1","n"],["ln2","n"]]);|\\
+%\verb|Hatchdata("9b",["ioo"],[["crAB"],["ln1","n"],["ln2","n"]],[90,2]);|
+\end{cmd}
+
+%---------Dotfilldata-----------------------------------
+\begin{cmd}{Dotfilldata}{dotfilldata}
+\itemket{Usage}Dotfilldata(name, list of the dotted sides "i" or "o", list of PD, option)
+\itemket{Description}Fill a domain with dots.
+\itemket{Details}
+R is called to generate the data. Arguments are the same as Hatchdata. \\
+Option is the density of dots from 0.1 to 0.8 (default is 0.3).
+\itemket{Examples}\mbox{}
+
+A pie chart\\
+After making closed curve via \verb|Partcrv()| and \verb|Enclosing()|,
+the surrounded region is filled with dots.
+
+\verb| r=3;|\\
+\verb| p0=r*[cos(pi/2),sin(pi/2)];|\\
+\verb| p1=r*[cos(-pi/6),sin(-pi/6)];|\\
+\verb| p2=r*[cos(-3*pi/4),sin(-3*pi/4)];|\\
+\verb| Circledata("1",[[0,0],[r,0]]);|\\
+\verb| Listplot("1",[[0,0],p0]);|\\
+\verb| Listplot("2",[[0,0],p1]);|\\
+\verb| Listplot("3",[[0,0],p2]);|\\
+\verb| Partcrv("1",p1,p0,"cr1");|\\
+\verb| Enclosing("1",["sg2","part1","Invert(sg1)"],[[0,0]]);|\\
+\verb| Partcrv("2",p2,p1,"cr1");|\\
+\verb| Enclosing("2",["sg3","part2","Invert(sg2)"],[[0,0]]);|\\
+\verb| Dotfilldata("1",["i"],[["en1"]]);|\\
+\verb| Dotfilldata("2",["i"],[["en2"]],[0.1]);|
+\begin{center}
+\input{Fig/dotfill}
+\end{center}
+\end{cmd}
+
+%-----------Shade---------------------------------
+\begin{cmd}{Shade}{shade}
+\itemket{Usage}Shade(("name"),list of PD, options);
+\itemket{Description}This function fills a domain surrounded by a closed curve.
+\itemket{Details}\mbox{}\\
+If "Invert" is used in some PD, \verb|Enclosing| is used, if not, \verb|Joincrvs| is used as default.
+The options are use of enclosing("Enc=y/n") and color.
+\itemket{Examples}\mbox{}\\
+\verb|Setax([7,"nw"]);|\\
+\verb|Plotdata("1","2*sin(x)","x",["Num=100"]);|\\
+\verb|Lineplot("1",[[0,1],[1,1]]);|\\
+\verb|Shade(["ln1","Invert(gr1)"],[[2.5,1],"Color=0.2*[0,0,0,1]"]);|
+
+\begin{center}
+\input{Fig/shade}
+\end{center}
+
+\verb|Plotdata("1","x^2-1","x=[-3,3]");|\\
+\verb|Plotdata("2","x^2/2","x=[-3,3]");|\\
+\verb|Shade("1",["gr2","Invert(gr1)"],[[-1.5,1],"Color=[1,0,0]","alpha->0.4"]);|
+
+\begin{center}
+\input{Fig/shade01E}
+\end{center}
+
+\verb|r1=2;|\\
+\verb|r2=1.5;|\\
+\verb|Circledata("1",[A,A+[r1,0]]);|\\
+\verb|Circledata("2",[A,A+[r2,0]]);|\\
+\verb|Listplot("1",[A+[r1,0],A+[r2,0]],["nodisp"]);|\\
+\verb|Shade(["cr1","sg1","Invert(cr2)","Invert(sg1)"],["Enc=n","Color=green"]);|
+
+\begin{center}
+\input{Fig/greenring}
+\end{center}
+
+\itemket{Reference} \hyperlink{joincrvs}{Joincrvs}.
+\end{cmd}
+
+%--------------Reflectdata------------------------------
+\begin{cmd}{Reflectdata}{reflectdata}
+\itemket{Usage}Reflectdata(name, PD, center or axis of symmetry, options);
+\itemket{Description}Generic function to draw a reflective curve.
+\itemket{Details}axis of symmzetry is defined as a list of 2 points.
+\itemket{Examples}\mbox{}
+
+\verb|Circledata([A,B]);|\\
+\verb|Reflectdata("1","crAB",[C]);|\\
+\verb|Reflectdata("2","crAB",[[-1,2]],["dr,2"]);|\\
+\verb|Reflectdata("3","crAB",[D,E],["da"]);|
+
+\begin{center}
+\input{Fig/reflectdata}
+\end{center}
+\end{cmd}
+
+%------------Rotatedata--------------------------------
+\begin{cmd}{Rotatedata}{rotatedata}
+\itemket{Usage}Rotatedata(name, (a list of )PD, angle(degree), options);
+\itemket{Description}Generic function to rotate plotting data.
+\itemket{Details}Options are center, and as usual. The default of center is [0,0].\\
+\itemket{Examples}\mbox{}
+
+\verb|Circledata([A,B]);|\\
+\verb|Rotatedata("1","crAB",pi/2,[C]);|\\
+\verb|Rotatedata("2","crAB",pi/3,[[1,5],"dr,2"]);|\\
+\verb|Rotatedata("3","crAB",-pi/3,[D,"da"]);|
+
+\begin{center}
+\input{Fig/rotatedata}
+\end{center}
+\end{cmd}
+
+%---------Scaledata-----------------------------------
+\begin{cmd}{Scaledata}{scaledata}
+\itemket{Usage}Scaledata(name, list of PD, horizontal ratio, vertical ration, [options]);
+\itemket{Description}Generic function to scale plotting data.
+\itemket{Details}Options are Center, and as usual. The default of center is [0,0].\\
+\itemket{Examples}\mbox{}
+
+\verb|Circledata([A,B]);|\\
+\verb|Scaledata("1","crAB",3,2,[[0,0]]);|\\
+\verb|Scaledata("2","crAB",3,2,[C,"dr,2"]);|\\
+\verb|Scaledata("3","crAB",D.x,D.y,[[0,0],"da"]);|
+
+\begin{center}
+\input{Fig/scaledata}
+\end{center}
+\end{cmd}
+
+%------------Translatedata--------------------------------
+\begin{cmd}{Translatedata}{translatedata}
+\itemket{Usage}Translatedata(name, list of PD, vector, options);
+\itemket{Description}Generic function to translate plotting data.
+\itemket{Details}Options are Center, and as usual. The default of center is [0,0].\\
+\itemket{Examples}\mbox{}
+
+\verb|Circledata([A,B]);|\\
+\verb|Translatedata("1","crAB",[2,3]);|\\
+\verb|Translatedata("2","crAB",C,["dr,2"]);|\\
+\verb|Translatedata("3","crAB",D,["da"]);|
+
+\begin{center}
+\input{Fig/translatedata}
+\end{center}
+\end{cmd}
+
+%=====Calculus and I/O ============================
+\subsection{Calculus and I/O}
+
+%-------Derivative-------------------------------------
+\begin{cmd}{Derivative}{derivative}
+\itemket{Usage}\mbox{}\\
+Derivative(function(string), variable(string), value);\\
+Derivative(PD(string), pointinfo, ([nth of intersects]));
+\itemket{Description}Generic funtion to find the derivative of a function or a plotting data.
+\itemket{Details}
+The pointinfo is one of "x=xvalue","y=yvalue", [point, parameter].\\
+The option of nth is used to set the number when plotting data has multi intersects.
+
+\itemket{Examples}\mbox{}
+
+\verb|Deffun("f(x)",["regional(y)","y=x^3-4*x","y"]);|\\
+\verb|coef=Derivative("f(x)","x",A.x);|\\
+\verb|A.y=f(A.x);|\\
+\verb|B.y=coef*(B.x-A.x)+A.y;|\\
+\verb|Plotdata("1","f(x)","x",["Num=200"]);|\\
+\verb|Lineplot([A,B]);|\\
+\verb|Letter([A,"ne","A"]);|
+
+\begin{center}
+\input{Fig/derivative}
+\end{center}
+
+\itemket{Reference} \hyperlink{tangentplot}{Tangentplot}.
+\end{cmd}
+
+%---------Integrate-----------------------------------
+\begin{cmd}{Integrate}{integrate}
+\itemket{Usage}\mbox{}\\
+Integrate(function or name of PD, "varname=range", [options]);
+\itemket{Description}Generic funtion to find the value of numerical integration.
+\itemket{Details}Oshima's Bezier formula is used.
+\itemket{Examples}\mbox{}
+
+\verb|f(x):=x^3-2*x^2+2;|\\
+\verb|val=Integrate("f(x)","x=[0,3]");|\\
+\verb|println(val);| // 8.25 will be displyed.
+
+\verb|plotting data("1","x^3-2*x^2+2","x");|\\
+\verb|println(Integrate("gr1",[0,3]));|
+\end{cmd}
+
+%------------Inversefun--------------------------------
+\begin{cmd}{Inversefun}{inversefun}
+\itemket{Usage}Inversefun(function(string), range, value);
+\itemket{Description}Generic function to find the value of the inversefunction.
+\itemket{Details}The value is found in the range.
+\itemket{Examples}\mbox{}
+
+\verb|x=Inversefun("sin(x)","x=[0,pi/2]",0.5);|\\
+\hspace*{20mm}The value of x is $0.5236$.
+\end{cmd}
+
+%------------Crossprod--------------------------------
+\begin{cmd}{Crossprod}{crossprod}
+\itemket{Usage}Crossprod(vec1, vec2);
+\itemket{Description}Generic function to return the cross product of 2 vectors.
+\itemket{Details}The vectors are a list with length 3 or 2.
+\itemket{Examples}\mbox{}
+
+\verb|v=Crossprod([1,0,0],[1,1,1]);| // The result is v=[0,-1,1].
+
+\end{cmd}
+
+%-----------Dotprod---------------------------------
+\begin{cmd}{Dotprod}{dotprod}
+\itemket{Usage}Dotprod(vec1, vec2);
+\itemket{Description}Generic function to return the dot product of 2 vectors.
+\itemket{Examples}\mbox{}
+
+\verb|v=Dotprod([1,2,3],[1,-1,1]);| // The result is v=2.
+\end{cmd}
+
+%------------Findarea--------------------------------
+\begin{cmd}{Findarea}{findarea}
+\itemket{Usage}Findarea(plotting data( or string of pd ));
+\itemket{Description}Generic function to return the area enclosed with a close curve.
+\itemket{Details}Oshima's B\'ezier formula is used.
+\itemket{Examples}\mbox{}
+
+\verb|Paramplot("1","[3*cos(t),2*sin(t)]","t=[0,2*pi]");|\\
+\verb|area=Findarea("gp1");|\\
+\verb|println(Sprintf(area,6));| // The result is 18.849536.
+
+\end{cmd}
+
+%-----------Findlength---------------------------------
+\begin{cmd}{Findlength}{findlength}
+\itemket{Usage}Findlength(plotting data( or string of pd ));
+\itemket{Description}Generic function to return the length of a curve.
+\itemket{Details}Oshima's B\'ezier formula is used.
+\itemket{Examples}\mbox{}
+
+\verb|Circledata("1",[[0,0],[2,0]]);|\\
+\verb|len=Findlength("cr1");|\\
+\verb|println(Sprintf(len,6));| // The result is 12.558097.
+\end{cmd}
+
+
+%-----------Intersectcurves---------------------------------
+\begin{cmd}{Intersectcurves}{intersectcurves}
+\itemket{Usage}Intersectcrvs(plotting data1(string), plotting data2(string));
+\itemket{Description}Generic funtion to return a list of intersects of 2 plotting data.
+\itemket{Examples}\mbox{}
+
+\verb|Plotdata("1", "sin(x)", "x", ["Num=100"]);|\\
+\verb|Circledata([A, B]);|\\
+\verb|tmp=Intersectcrvs("gr1","crAB");|\\
+\verb|pP=tmp_1;|\\
+\verb|pQ=tmp_2;|
+
+\begin{center}
+\input{Fig/Intersectcrvs1}
+\end{center}
+\end{cmd}
+
+%------------IntersectcurvesPp--------------------------------
+\begin{cmd}{IntersectcurvesPp}{intersectcurvesPp}
+\itemket{Usage}IntersectcrvsPp(plotting data1(string), plotting data2(string));
+\itemket{Description}Generic funtion to return a list of intersects with parameters of 2 plotting data.
+\itemket{Details}Parameters are positons of the intersect.
+\end{cmd}
+
+%-------------Nearestpt-------------------------------
+\begin{cmd}{Nearestpt}{nearestpt}
+\itemket{Usage}Nearestpt(plotting data1, plotting data2);
+\itemket{Description}Generic funtion to return the nearest point with the parameter and the distance.
+\itemket{Examples}\mbox{}
+
+\verb|Plotdata("1", "x^2+2", "x=[-2,2]");|\\
+\verb|Plotdata("2", "-(x-2)^2+1","x=[0,4]");|\\
+\verb|plist=Nearestpt("gr1","gr2");|\\
+\verb|Listplot("1",plist_1,plist_3);|\\
+\verb|pB=plist_3;|
+\itemket{Remark}The returned list is [[0.4,2.16],31,[1.58,0.82],20.73,1.78].
+
+\begin{center}
+\input{Fig/nearestpt}
+\end{center}
+\end{cmd}
+
+%--------------Nearestptcrv------------------------------
+\begin{cmd}{Nearestptcrv}{nearestptcrv}
+\itemket{Usage}Nearestptcrv(point1, PD);
+\itemket{Description}Generic funtion to return the nearest point on the PD from the point1.
+\itemket{Examples}\mbox{}
+
+\verb|Plotdata("1", "x^2", "x");|\\
+\verb|tmp=Nearestptcrv(A,"gr1");| //Tjhe coordnates will be returned.\\
+\verb|Putpoint("B",tmp);|\\
+\verb|Listplot([A,B],["do"]);|
+
+\begin{center}
+\input{Fig/nearestpt1}
+\end{center}
+
+\itemket{Remark}The return value is [[0.4,2.16],31,[1.58,0.82],20.73,1.78].
+\end{cmd}
+
+%-------------Numptcrv-------------------------------
+\begin{cmd}{Numptcrv}{numptcrv}
+\itemket{Usage}Numptcrv (PD)
+\itemket{Description}Generic function to return the number of PD.
+\itemket{Details}This is the same as \verb|length(PD)|.
+\itemket{Examples}\mbox{}
+
+Compare the order of PD, Implicit() and Paramplot(). ( on Euclidean view )
+
+\verb|Slider("A-C-B",[0,-2],[6,-2]); |\\
+\verb|Implicitplot("1","x^2+4*y^2=4","x=[-2,2]","y=[-2,2]",["do"]); |\\
+\verb|Paramplot("1","[2*cos(t)+5,sin(t)]","t=[0,2*pi]",["do","Num=140"]); |\\
+\verb|println([Numptcrv(imp1),Numptcrv(gp1)]);| //display number of PD on console\\
+\verb|n=floor(C.x*2); |\\
+\verb|repeat(n,s,start->0, |\\
+\verb| t=s*10+1; |\\
+\verb| draw(imp1_t,color->hue(s/10)); |\\
+\verb| draw(gp1_t,color->hue(s/10)); |\\
+\verb|); |
+
+\begin{center}
+\includegraphics[bb=0.00 0.00 305.02 133.01,width=8cm]{Fig/numptcrv.pdf}
+\end{center}
+
+\end{cmd}
+
+%-----------Paramoncurve---------------------------------
+\begin{cmd}{Paramoncurve}{paramoncurve}
+\itemket{Usage}Paramoncurve(point, PD)
+\itemket{Description}Generic function to return the parameter value of the point on the curve.
+\itemket{Details}The integer part is the number of the segment on which the point lies, the fractional part is the position on the segment.
+\itemket{Examples}\mbox{}
+
+\verb|Listplot([A,B,C,A]);|\\
+\verb|Putonseg("D",[B,C]);|\\
+\verb|tmp=Paramoncurve(D,"sgABCA");|\\
+\verb|println(tmp);| // for example display \verb|2.35| on console.
+
+%\begin{center}
+%\input{Fig/paramoncrv}
+%\end{center}
+\end{cmd}
+
+%---------Pointoncurve-----------------------------------
+\begin{cmd}{Pointoncurve}{pointoncurve}
+\itemket{Usage}Pointoncrv(parameter value, plotting data);
+\itemket{Description}Generic function to return the point which has the parameter value
+\itemket{Examples}\mbox{}
+
+\verb|Circledata("1",[[0,0],[2,0]],["Num=5","Rng=[0,pi]"]);|\\
+\verb|tmp=Pointoncurve(4.5,"cr1");|\\
+\verb|Pointdata("1",tmp,["Size=3"]);|\\
+\verb|Letter(tmp,"nw","A");|
+
+\begin{center}
+\input{Fig/pointoncrv}
+\end{center}
+\end{cmd}
+
+%-----------Ptcrv---------------------------------
+\begin{cmd}{Ptcrv}{ptcrv}
+\itemket{Usage}Ptcrv(n,PD);
+\itemket{Description}Returns n-th point from PD.
+\itemket{Details}Same as \verb|PD_n| of Cindyscript.
+\itemket{Examples}\mbox{}\\
+\verb| Circledata([O,P],["do","Num=100","notex"]); |\\
+\verb| Scaledata("1","crOP",4/3,1); |\\
+\verb| F.xy=[-sqrt(7),0]; |\\
+\verb| A=Ptcrv(9,sc1); |\\
+\verb| B=Ptcrv(16,sc1); |\\
+\verb| Listplot("1",[A,F,B],["da"]); |\\
+\verb| Partcrv("1",A,B,"sc1",["dr,3"]); |\\
+\verb| Shade(["part1","sg1"],0.1); |\\
+\verb| Arrowhead(B,"sc1",[1.5]); |\\
+\verb| Letter([A,"ne","A",B,"ne","B",F,"s2","F"]); |\\
+\begin{center}\input{Fig/ptcrv}\end{center}
+\end{cmd}
+
+%-------------Ptstart, Ptend-------------------------------
+\begin{cmd}{Ptstart, Ptend}{ptstart, ptend}
+\itemket{Usage}Ptstart(PD) , Ptend(PD)
+\itemket{Description}Returns start point and end point of PD. respectively.
+\itemket{Details} It returns coodinates of point.
+\itemket{Examples}
+Gets the points at both ends of the graph with limited domain and draw the line segments.\\
+\verb| Deffun("f(x)",["regional(y)","y=x^2","y"]); |\\
+\verb| Plotdata("1","f(x)","x",["do"]); |\\
+\verb| Plotdata("2","f(x)","x=[-1,2]"); |\\
+\verb| Lineplot("1",[Ptstart(gr2),Ptend(gr2)],["do"]); |\\
+\verb| Listplot("1",[Ptstart(gr2),Ptend(gr2)]); |\\
+\verb| Letter([A,"w2","A",B,"e2","B"]); |\\
+\begin{center} \input{Fig/ptstart} \end{center}
+\end{cmd}
+
+%------------Readcsv--------------------------------
+\begin{cmd}{Readcsv}{readcsv}
+
+\itemket{Usage}Readcsv(path,filename,option)
+\itemket{Description}read an external data file in csv format. The return value is a list of the data.
+\itemket{Details}The first argument sets a path to the current working folder where the data file is (the default is fig).
+If you put the data file in fig folder, the pathname can be omitted. Otherwise a full pathname is required.\\
+option: By the argument "Flat=y", you can flatten a list of the data (the default is "Flat=n" ).
+\itemket{Examples} \mbox{}
+Examples can be found in the command Boxplot().
+\end{cmd}
+
+%------------Readlines--------------------------------
+\begin{cmd}{Readlines}{readlines}
+
+\itemket{Usage}Readlines(path,filename,option)
+\itemket{Description}read a text file line by line. The return value is a list of strings.
+\itemket{Details}The first argument sets a path to the current working folder where the data file is (the default is fig).
+If you put the data file in fig folder, the pathname can be omitted. Otherwise a full pathname is required.\\
+option: By the argument "Flat=y", you can flatten a list of the data (the default is "Flat=n" ).
+\end{cmd}
+
+%----------ReadOutData----------------------------------
+\begin{cmd}{ReadOutData}{readoutdata}
+\itemket{Usage}ReadOutdata(filename);
+\itemket{Description}Generic function to read external data of \ketcindy\ format.
+\itemket{Details}If the data is outside the working directory, add the path name as the first argument. For example,
+
+\verb|ReadOutdata("/datafolder","file.txt");|
+
+\vspace{\baselineskip}
+\ketcindy\ format data is next style.
+
+\verb|variable name// |\\
+\verb|start // | : start of list \\
+\verb|[ , , ], .... // | : coordinates ( 2 or 3 dimension )\\
+\verb|....|\\
+\verb|end// | : end of list\\
+\verb|start// | : start of next list\\
+\verb|....|\\
+\verb|end// |\\
+\verb|variable name// |\\
+\verb|start// |\\
+\verb|… |\\
+\verb|end//// |\\
+
+%\itemket{Examples}\mbox{}
+
+
+\itemket{Reference} \hyperlink{writeoutdata}{WriteOutData}.
+\end{cmd}
+
+%------------WriteOutData--------------------------------
+\begin{cmd}{WriteOutData}{writeoutdata}
+\itemket{Usage}WriteOutdata(filename, a list of varname and value);
+\itemket{Description}Function to write out data in \ketcindy\ format.
+\itemket{Details}The file is available commonly from \ketcindy,\ R and C.
+\itemket{Examples}\mbox{}
+
+Write out the plotting data of the parabola and the circle.
+
+\vspace{\baselineskip}
+\verb|Plotdata("1", "x^2","x");|\\
+\verb|Circledata("1",[[0,0],[1,0]]);|\\
+\verb|WriteOutData("figdata.txt",["gr1",gr1,"cr1",cr1]);|
+
+\vspace{\baselineskip}
+The written data is as follows.
+
+\verb| gr1//|\\
+\verb| start// [[-2.68843,7.22765],[-2.51807,6.34067],・・,[-2.00698,4.02798]]// |\\
+\verb| [[-1.83662,3.37318],[-1.66626,2.77642],・・,[-1.15518,1.33443]]// |
+
+\hspace{20mm} and so on
+
+\verb| [[5.82965,33.98479]]//|\\
+\verb| end//|\\
+\verb| cr1//|\\
+\verb| start// [[1,0],[0.99211,0.12533],[0.96858,0.24869],・・,[0.80902,0.58779]]//|
+
+\hspace{20mm} and so on
+
+\verb| [[0.87631,-0.48175],[0.92978,-0.36812],・・,[1,0]]//|\\
+\verb| end////|
+
+\itemket{Reference} See \hyperlink{readoutdata}{ReadOutData}.
+
+\end{cmd}
+
+%---------------Extractdata-----------------------------
+\begin{cmd}{Extractdata}{extractdata}
+\itemket{Usage}Extractdata(dataname,options);
+\itemket{Description}Function to add properties to a data.
+\itemket{Details}The default properties are ["dr"].
+\itemket{Examples}\mbox{}
+
+\verb|ReadOutData("figdata.txt");|\\
+\verb|Extractdata("gr1",["da"]);|\\
+\itemket{Reference} See \hyperlink{writeoutdata}{WriteOutData} and \hyperlink{readoutdata}{ReadOutData}.
+\end{cmd}
+
+%========Making Tables==========================
+\subsection{Making Tables}
+
+%------------Tabledata--------------------------------
+\begin{cmd}{Tabledata}{tabledata}
+\itemket{Usage}Tabledata(a list of widths, a list of height,a list of removals,[options]);
+\item[Descritption]Table function to draw rules of a table.
+\itemket{Details}
+The lower left is the origin.\\
+The options are\\
+\hspace*{10mm}''Setwindow=y/n''\ if "n", command setwindow is not executed.\\
+\hspace*{10mm}''Move=point''\ The lower left changes to the point.\\
+\hspace*{10mm}''Geo=n/y''\ if ''y'', geometric points are created.\\
+\hspace*{10mm}integer\ decides to put names par each interval.\\
+The unit of length is 1/10 of the grid of Euclidean view. The default is 1mm.\\
+Control points are put on the row and column. The names are r0,r1,... and c0,c1,....\\
+The points are movable.
+\itemket{Remark}See \verb|Tabledatalight|
+\itemket{Examples}\mbox{}
+
+\verb|xL=[20,20,20,20];|\\
+\verb|yL=[10,10,10,10,10];|\\
+\verb|Tabledata(xL,yL,["Geo=y"]);|
+
+\begin{center}
+\includegraphics[bb=0.00 0.00 403.52 249.51,height=30mm]{Fig/table01.pdf}\hspace{10mm}\input{Fig/table02}
+\end{center}
+
+\verb|Rmv=["r1c0c1","c3r0r1","c3r3r5","r4c2c4"];|\\
+\verb|Tabledata(xL,yL,Rmv);|
+
+\begin{center}
+\includegraphics[bb=0.00 0.00 392.02 251.51, height=36mm]{Fig/table03.pdf}
+\end{center}
+\end{cmd}
+
+%--------Changetablestyle------------------------------------
+\begin{cmd}{Changetablestyle}{changetablestyle}
+\itemket{Usage}ChangeTablestyle(a list of Rules, [changed style]);
+\itemket{Description}Table function to change line styles of rules.
+\itemket{Examples}\mbox{}
+
+\verb|Tabledata([10,20,10,20],[10,10,10],[]);|\\
+\verb|ChangeTablestyle(["r1c0c4"],["da"]);|\\
+\verb|ChangeTablestyle(["r2c0c2","c1r0r3"],["nodisp"]);|
+
+\begin{center}
+\includegraphics[bb=0.00 0.00 324.00 174.00,height=50mm]{Fig/changetable.pdf}
+\end{center}
+\end{cmd}
+
+%-----------Findcell---------------------------------
+\begin{cmd}{Findcell}{findcell}
+\itemket{Usage}Findcell(grid name of upper left, grid name of lower right);
+\itemket{Description}Table function to return the information of a cell.
+\itemket{Details}
+
+The grid name is, for example, "c0r1".\\
+The result is a list of center, half of width, half of height.
+
+\itemket{Examples}\mbox{}
+
+\verb|Tabledata([10,20,10,20],[10,10,10],[]);|\\
+\verb|tmp=Findcell("c2r0","c3r1");| The return is [[3.5,2.5],0.5,0.5].\\
+\verb|tmp=Findcell("c0r1","c2r3");| The return is [[1.5,1],1.5,1] .
+\end{cmd}
+
+%------------Putcell--------------------------------
+\begin{cmd}{Putcell, Putcellexpr}{putcell}
+\itemket{Usage}Putcell(grid name of upper left, grid name of lower right, postion, a string);
+\itemket{Description}Table function to put a string at the cell.
+\itemket{Details}
+The position is one of \verb|c, r, l, t, b| (center, right, left, top, bottom).\\
+Minute movements can be added.
+
+\itemket{Examples}\mbox{}
+
+\verb|xL=apply(1..5,20);|\\
+\verb|yL=apply(1..2,20);|\\
+\verb|rL=["c2r2r3","c5r2r3"];|\\
+\verb|Tabledata(xL,yL,rL);|\\
+\verb|Putcell("c0r0","c1r1","c","A");|\\
+\verb|Putcell("c1r0","c3r1","l2","B");|\\
+\verb|Putcell("c0r1","c2r2","rt","C");|\\
+\verb|Putcell("c3r1","c5r2","lb","D");|\\
+
+\begin{center}
+\input{Fig/putcellE}
+\end{center}
+\end{cmd}
+
+%----------Putcol----------------------------------
+\begin{cmd}{Putcol}{putcol}
+\itemket{Usage}Putcol (column number, position, a list of strings);
+\itemket{Description}Table function to put strings to a column.
+\itemket{Details}
+The position is as \verb|Putcell|.\\
+It's unnecessary to enclose with double quotes in case of numbers.\\
+Null string is available.
+\itemket{Reference} \hyperlink{putrow}{Putrow}.
+\end{cmd}
+
+%--------------Putcolexpr------------------------------
+\begin{cmd}{Putcolexpr}{putcolexpr}
+\itemket{Usage}Putcolexpr (column number, position, a list of mathematical expressions);
+\itemket{Description}Table function to put strings to a column.
+\itemket{Reference} \hyperlink{putrowexpr}{Putrowexpr}.
+\end{cmd}
+
+%-------------Putrow-------------------------------
+\begin{cmd}{Putrow}{putrow}
+\itemket{Usage}Putrow (row number, position, a list of strings);
+\itemket{Description}Table function to put strings to a row.
+\itemket{Reference} \hyperlink{putcol}{Putcol}.
+\end{cmd}
+
+%--------------Putrowexpr------------------------------
+\begin{cmd}{Putrowexpr}{putrowexpr}
+\itemket{Usage}Putrowexpr(row number, position, a list of strings);
+\itemket{Description}Table function to put strings to a row.
+\itemket{Examples}
+
+In Putcolexpr (), Putrowexpr (), formulas and general \TeX sentences can be entered.
+
+\verb|xL=apply(1..5,20);|\\
+\verb|xL=apply(1..3,15);|\\
+\verb|Tabledata(xL,yL,["c1r1r2","r1c2c3","r2c2c3"]);|\\
+\verb|Putcol(3,"c",["A","B","C"]);|\\
+\verb|Putcolexpr(4,"l",["x^2","y=\sqrt{x^3}"]);|\\
+\verb|Putrow(1,"c",[1,"two"]);|\\
+\verb|Putrowexpr(3,"c",["","\frac{\pi}{2}","","","\sum{x^2}"]);|\\
+
+\begin{center}
+\input{Fig/putcolE}
+\end{center}
+
+\itemket{Remark} r0, c0, ... are numbers displayed on the screen.
+\itemket{Examples}
+
+The graphs can be placed in the cells of the table. These are drawn at the position of the cell.
+
+\verb|Tabledata("",3,3,120,90,["dr,2"]);|\\
+\verb|ChangeTablestyle(["r1c0c3"],["dr"]);|\\
+\verb|ChangeTablestyle(["r2c0c3"],["da"]);|\\
+\verb|Plotdata("1","(x-2)^2+1.5","x=[0.5,3.5]");|\\
+\verb|Plotdata("2","(x-6)^2+2","x=[4.5,7.5]");|\\
+\verb|Plotdata("3","(x-10)^2+2.5","x=[8.5,11.5]");|\\
+\verb|Listplot([A,B]);|\\
+\verb|Listplot([C,D]);|\\
+\verb|Listplot([E,F]);|\\
+\verb|Putrowexpr(1,"c",["D>0","D=0","D<0"]);|\\
+\verb|Putrow(2,"c",["2","1","0"]);|\\
+\verb|Letter(G,"c","The discriminant and the number of intersections");|\\
+
+\begin{center}
+\input{Fig/tablesample1E}
+\end{center}
+
+\itemket{Examples}\mbox{}
+
+\verb|Column=[6,6,10,6,10,6,40];|\\
+\verb|Row=[30,6,6,6];|\\
+\verb|Rmv=["c1r0r1","c2r0r1","c3r0r1","c4r0r1","c5r0r1", "r1c6c7","r2c6c7","r3c6c7"];|\\
+\verb|Tabledata("",Column,Row,Rmv,["dr"]);|\\
+\verb|Tlistplot("23d",["c1r2","c2r3"]);|\\
+\verb|Tlistplot("23u",["c1r3","c2r2"]);|\\
+\verb|Putrowexpr(2,"c",["x",0,"\cdots","\tfrac{1}{4}","\cdots",4]);|\\
+\verb|Putrowexpr(3,"c",["y`","","-",0,"+"]);|\\
+\verb|Putrowexpr(4,"c",["y",0,"\searrow","-\tfrac{1}{4}","\nearrow",2]);|\\
+\verb|Putcell(1,1,"l2t2","{\small\begin{minipage}{44mm}$y=x-\sqrt{x}$\\$y`=|\\
+\verb|\dfrac{2\sqrt{x}-1}{2\sqrt{x}}=0$\vspace{1mm}\\\hspace*{5mm}$x=|\\
+\verb|\dfrac{1}{4}$\vspace{1mm}The following table is obtained.\\\end{minipage}}" );|\\
+\verb|Plotdata("1","x-sqrt(x)","x=[0,3]",["do","notex"]);|\\
+\verb|Listplot("2",[[0,0],[3,0]],["do","notex"]);|\\
+\verb|Listplot("3",[[0,-0.5],[0,3]],["do","notex"]);|\\
+\verb|Translatedata("1","gr1",[4.9,1],["dr"]);|\\
+\verb|Translatedata("2","sg2",[4.9,1],["dr"]);|\\
+\verb|Translatedata("3","sg3",[4.9,1],["dr"]);|\\
+\verb|Letter(Ptend(tr2),"e1","\small{$x$}");|\\
+\verb|Letter(Ptend(tr3),"n1","\small{$y$}");|\\
+\verb|Letter(Ptstart(tr2),"w1","\small O");|\\
+\verb|Expr(Ptend(tr1),"nw-2","y=x-\sqrt{x}");|\\
+
+\begin{center}
+\input{Fig/tablesample2E}
+\end{center}
+
+\itemket{Examples}\mbox{}
+
+\verb|Tabledata("",8,4,80,40,[]);|\\
+\verb|Putrowexpr(1,c,["x","\cdots","-1","\cdots","0","\cdots","1","\cdots"]);|\\
+\verb|Putrowexpr(2,c,["y`","+","+","+","0","-","-","-"]);|\\
+\verb|Putrowexpr(3,c,["y``","+","0","-","-","-","0","+"]);|\\
+\verb|Putrowexpr(4,c,["y","\nelarrow","\frac{1}{\sqrt{e}}","\nerarrow",|\\
+\verb|"1","\serarrow","\frac{1}{\sqrt{e}}","\selarrow"]);|\\
+
+\begin{center}
+\input{Fig/zogen3}
+\end{center}
+
+\itemket{Remark} The arrows here are defined in ketpic.sty.\\
+nelarrow, nerarrow, selarrow, serarrow, NELarrow, NERarrow, SELarrow, SERrarrow\\
+The first ne and se represent northeast and southeast (upper right and lower right), respectively. The next r and l represent the direction of rotation (r: right: counterclockwise, l: left: clockwise).\\
+The straight arrows are NEarrow, SEarrrow.
+Since these arrows do not exist in Cindy\TeX, they are not displayed on the drawing surface of Cinderella.
+\end{cmd}
+
+%------------Tgrid--------------------------------
+\begin{cmd}{Tgrid}{tgrid}
+\itemket{Usage}Tgrid(grid name);
+\itemket{Description}Table function to return the coordinates of the grid name.
+\end{cmd}
+
+%-------------Tlistplot-------------------------------
+\begin{cmd}{Tlistplot}{tlistplotgrid}
+\itemket{Usage}Tlistplot(grid name, grid name);
+\itemket{Description}Table function to connect two lattice points by line segments.
+\itemket{Examples} \mbox{}
+
+\verb|Tlistplot(["c0r1","c1r2"]);|
+\end{cmd}
+
+%=========Data Processing=========================
+\subsection{Data Processing}
+
+This section describes data processing by \ketcindy . Cooperation with spreadsheet software enables efficient data processing.
+
+%------------Tab2list--------------------------------
+\begin{cmd}{Tab2list}{tab2list}
+\itemket{Usage}Tab2list(string data, option);
+\itemket{Description}Sheet function to convert contents of string data to list.
+\item[Ditails]The options are as follows.\\
+\verb|"Blank=a"| : translate cells that is NULL to ``a"\\
+\verb|"Sep=b"| : separators of the string are ``b". The default separators are Tab code.
+\itemket{Examples} \mbox{}
+
+In the Cindyscrpt editor, prepare a local variable, for example "data".
+\begin{center}
+\includegraphics[bb=0.00 0.00 261.01 139.01,width=6cm]{Fig/tab2list02E.pdf}
+\end{center}
+
+Copy the data on the spreadsheet to the clipboard.
+\begin{center}
+\includegraphics[bb=0.00 0.00 449.02 164.01,width=8cm]{Fig/tab2list01E.pdf}
+\end{center}
+
+Paste it during double quotes.
+\begin{center}
+\includegraphics[bb=0.00 0.00 465.02 140.01,width=8cm]{Fig/tab2list001E.pdf}
+\end{center}
+
+By executing \verb|"Tab2list(data)"| get a list of matrix form.
+\begin{center}
+\includegraphics[bb=0.00 0.00 482.02 134.01,width=10cm]{Fig/tab2list03E.pdf}
+\end{center}
+
+If it contains a null character cell (NULL), it defaults to null character.Therefore, if you want to set NULL to 0 for questionnaire processing etc., use option \verb|Blank|.
+
+\hspace{20mm}\verb|dlist=Tab2list(data,["Blank=0"];|
+
+When CSV format data is copied from the file, the option is set to \verb|sep|.
+
+\hspace{20mm}\verb|dlist=Tab2list(data,["Sep=,"];|
+
+
+\end{cmd}
+
+%-------------Dispmat-------------------------------
+\begin{cmd}{Dispmat}{dispmat}
+\itemket{Usage}Dispmat(list);
+\itemket{Description}Display the list to matrix form in the console.
+\itemket{Examples}In the example of Tab2list, put the obtained data in a matrix format.
+
+\begin{center}
+\includegraphics[bb=0.00 0.00 422.52 178.01,width=8cm]{Fig/tab2list04E.pdf}
+\end{center}
+You can copy this directly to spreadsheet.
+
+\end{cmd}
+
+%--------------Writecsv------------------------------
+\begin{cmd}{Writecsv}{writecsv}
+\itemket{Usage}Writecsv(namelist, data, filename, option);
+\itemket{Description}Make a CSV file consisting of the contents of data.
+\item[Ditails]namelist is item name added to the first line of the CSV file. If the namelist omitted, the item names "c1, c2, ..." are appended.
+
+The filename is the name of CSV file.
+
+option : \verb|"Col=nn"| : Specify the number of columns in the CSV file as a natural number \verb|nn|.
+
+When specifying the number of columns is omitted, if data is a matrix, use that number of columns, and if data is a vector, use the number of items in namelist.
+
+\itemket{Examples}\mbox{}\\
+%(1)\\
+Let \verb|data=[13,25,17,22,14,26] , name2=["aa","ab"] , name3=["ba","bb","bc"]|\\
+
+\verb|Writecsv(name2,data,"aaa");|\\
+makes the file "aaa.csv" consists of\\
+aa,ab\\
+13,25\\
+17,22\\
+14,26\\
+
+%(2)\\
+\verb|Writecsv(name3,data,"aaa");|\\
+makes the file "aaa.csv" consists of\\
+ba,bb,bc\\
+13,25,17\\
+22,14,26\\
+
+%(3)\\
+\verb|Writecsv(,data,"aaa",["Col=3"]);|\\
+makes the file "aaa.csv" consists of\\
+c1,c2,c3\\
+13,25,17\\
+22,14,26\\
+\end{cmd}
+
+\newpage
+
+
+% =====the others===========================
+\subsection{Others}
+
+%-------Assign-------------------------------------
+\begin{cmd}{Assign}{assign}
+\itemket{Usage}Assign(string0, string1, number)
+\itemket{Description}Generic function to replace the string1 in the string0 with the number. Number is real number or string of real number.
+\itemket{Examples}\mbox{}
+
+\verb|Assign("x^2+a*x","a","1.3"); | // \verb|a*x| $\to$ \verb|1.3*x|\\
+\verb|Assign("x^2+a*x","a",1.3); | //same as above\\
+
+\verb|repeat(50,t,|\\
+\verb| cb=t/5-5;|\\
+\verb| Plotdata(text(t),Assign("b*x-b^2","b",cb),"x");|\\
+\verb|);|\\
+
+\hspace{40mm} \input{Fig/assign}
+
+Perform multiple replacements by list.
+
+\verb|Assign("a*x^2+b*x",["a",1,"b",2]);| \hspace{10mm}// \verb|a| $\to$ \verb|1 and b| $\to$ \verb|2|
+\end{cmd}
+
+%-----------BBdata---------------------------------
+\begin{cmd}{BBdata}{bbdata}
+\itemket{Usage}BBdata(file name, options);
+\itemket{Description}Generic function to return the size of an image file.
+\itemket{Details}In the \TeX document, find the BB size when pasting the image with the inputgraphics command.
+Create BB data from an image file using extractbb of \TeX processing system and write it as a text file to the working directory.
+Read this and write the ingludegarphics command to the console.\\
+Options : specifies width and height. "w=" : width, "h=" : height
+
+The value of bb is not an integer value, and it is indicated by rounding off the high definition value to two decimal places.\\
+The image files are PDF, PNG, JPG, and so on.\\
+
+\itemket{Examples} \mbox{}
+
+\includegraphics[bb=0.00 0.00 562.03 124.01,width=12cm]{Fig/bbdata.pdf}
+
+\end{cmd}
+%-----------Asin---------------------------------
+\begin{cmd}{Asin}{asin}
+\itemket{Usage}Asin(real) , Acos(real)
+\itemket{Description} Return arcsine and arccosine.
+
+\end{cmd}
+
+%-----------Sqr---------------------------------
+\begin{cmd}{Sqr}{sqr}
+\itemket{Usage}Sqr(real)
+\itemket{Description} Return square root.
+
+\end{cmd}
+
+%---------Colorcode-----------------------------------
+\begin{cmd}{Colorcode}{colorcode}
+\itemket{Usage}Colorcode(colortype1,colortype2,colorcode)
+\itemket{Description}Generic function to change colorcode from colortype1 to colortype2.
+\itemket{Details}Return value is changed color code.
+
+Color type is one of "rgb","cmyk","hsv".
+\item[Example]\mbox{}
+
+RGB to CMYK
+
+\hspace{10mm} \verb|col=Colorcode("rgb","cmyk",[1,0,0]); |
+
+CMYK to RGB
+
+\hspace{10mm} \verb|col=Colorcode("cmyk","rgb",[0,1,1,0]);|
+
+RGB to HSV
+
+\hspace{10mm} \verb|col=Colorcode("rgb","hsv",[1,0,0]);|
+
+\end{cmd}
+
+%----------Dqq----------------------------------
+\begin{cmd}{Dqq}{dqq}
+\itemket{Usage}Dqq(string);
+\itemket{Description}This function returns a string surrounded by double quotes.
+\itemket{Exaample}\mbox{}\\
+\verb|parse("a");| // The value of variable \verb|a| is returned.\\
+\verb|parse(Dqq("a"));| // String \verb|"a"| is returned.\\
+\end{cmd}
+
+%----------Factorial----------------------------------
+\begin{cmd}{Factorial}{factorial}
+\itemket{Usage}Factorial(n);
+\itemket{Description}This function returns the factorial of \verb|n|.
+\itemket[Details]\verb|n| should be a positive integer.
+\itemket{Exaample}\verb|x=Factorial(5); // x is 120.|
+\end{cmd}
+
+%----------Figpdf----------------------------------
+\begin{cmd}{Figpdf}{Figpdf}
+\itemket{Usage}Figpdf(option)
+\itemket{Description}Generic function to make a pdf with the same size of figure.
+\itemket{Details}Option is a list of margin and the amount of translation.
+
+(1) Set the output file name with the command \verb|Setparent("filename")|.
+
+(2) Push the "Parent" button.
+
+"figure.tex" and "filename.tex" is created in fig folder. ( use "figure.cdy") filename.tex creates filename.pdf using figure.tex.
+\itemket{Examples}\mbox{}
+\begin{tabbing}
+1234678901234567890123456789012\=\kill
+\verb|Figpdf();| \> : default\\
+\verb|Figpdf([5,5,10,10]);| \> : left and right margins are 5mm\\
+ \> : top and bottom margins are 10mm.\\
+\verb|Figpdf([[5,10]]);| \> : translation to right 5mm and to down 10mm. \\
+\verb|Figpdf([5,8,10,10,[5,-5]]);| \> : margin and translation
+\end{tabbing}
+We have to take the right margin at least 3mm to draw the axis name.
+\end{cmd}
+
+%------------Cindyname--------------------------------
+\begin{cmd}{Cindyname}{cindyname}
+\itemket{Usage}Cindyname();
+\itemket{Description}Generic function to return the name of a current file without ".cdy".
+\itemket{Examples}\mbox{}
+
+\verb|name=Cindyname();| // If cuurent file is "sample.cdy", name="sample".
+\end{cmd}
+
+%------------Indexall--------------------------------
+\begin{cmd}{Indexall}{indexall}
+\itemket{Usage}Indexall(string1,string2);
+\itemket{Description}Generic function to return all positions of string2 in string1.
+\itemket{Examples}\mbox{}
+
+\verb|str="abcadeaf"|\\
+\verb|pos=Indexall(str,"a");|// Result is [1,4,7].
+
+\item[Remarks]This command is an extension of "indexof" which is a command of CindyScript.
+\end{cmd}
+
+%-----------Help---------------------------------
+\begin{cmd}{Help}{help}
+\itemket{Usage}Help(string)
+\itemket{Description}Generic function to display usages of the function.
+\itemket{Examples}\mbox{}
+
+\verb|Help("L");| then we have the following result in console.
+
+\vspace{\baselineskip}
+\verb|Letter([C,"c","Graph of $f(x)$"]);|\\
+\verb|Letter([C,"c","xy"],["size->30"]);|\\
+\verb|Letterrot(C,B-A,"AB");|\\
+\verb|Letterrot(C,B-A,"t0n5","AB");|\\
+\verb|Letterrot(C,B-A,0,5,"AB");|\\
+$\cdots\cdots\cdots$
+
+\end{cmd}
+
+%-------------Norm-------------------------------
+\begin{cmd}{Norm}{norm}
+\itemket{Usage}Norm(vector);
+\itemket{Description}This function returns the norm of the vector.
+\itemket{Details}\mbox{}
+The vector is 2D or 3D.\\
+ If two vectors \verb|v1|, \verb|v2| are given, the value of \verb|Norm(v2-v1)| is returned.
+\itemket{Examples}\verb|Norm([1,1,2]);| // $\sqrt{6}$ is returned.
+\end{cmd}
+
+%-------------Op-------------------------------
+\begin{cmd}{Op}{op}
+\itemket{Usage}Op(number, list or string);
+\itemket{Description}Generic function to return the n-th element of a list or a string.
+\itemket{Examples}\mbox{}
+
+\verb|str="abcde"|\\
+\verb|list=[3,1,2,5];|\\
+\verb|s=Op(2,str); |// Result is "b".\\
+\verb|x=Op(3,list); |// Result is 2.
+\end{cmd}
+
+%---------Ptselected-----------------------------------
+\begin{cmd}{Ptselected}{ptselected}
+\itemket{Usage}Ptselected(name of points)
+\itemket{Description}Generic function to returns "true" if a point is selected.
+\itemket{Details}Commands such as \verb|Hachdata| take time to execute, so interactive operations slow down the reaction. Therefore, while interactively operating, you can use this command to stop drawing.
+\itemket{Examples}\mbox{}
+
+Draw the point A near the origin.
+
+\verb| Deffun("f(x)",["regional(y)","y=x^3-2*x","y"]);|\\
+\verb| Plotdata("1","f(x)","x",["Num=100"]);|\\
+\verb| Putoncurve("A","gr1");|\\
+\verb| coef=Derivative("f(x)","x",A.x);|\\
+\verb| Defvar(["coef",coef]);|\\
+\verb| Deffun("g(x)",["regional(y)","y=coef*(x-A.x)+A.y","y"]);|\\
+\verb| Plotdata("2","g(x)","x",["Num=1"]);|\\
+\verb| if(!Ptselected(A),|\\
+\verb| Enclosing("1",["gr2","Invert(gr1)"],[A,"nodisp"]);|\\
+\verb| Hatchdata("1",["i"],[["en1"]]);|\\
+\verb| );|
+
+\vspace{\baselineskip}
+\hspace{20mm} Dragging point A (select) \hspace{5mm} Unselected
+
+\hspace{20mm}\includegraphics[bb=0.00 0.00 218.01 204.51,width=40mm]{Fig/ptselected01.pdf}
+\hspace{10mm}\includegraphics[bb=0.00 0.00 219.01 204.51,width=40mm]{Fig/ptselected02.pdf}
+
+\end{cmd}
+
+%-------------Slider-------------------------------
+\begin{cmd}{Slider}{slider}
+\itemket{Usage}Slider("endpoint1-pt-endpoint2",endpoint1,endpoint2);\vspace{-2mm}
+\itemket{}Slider("pt",endpoint1,endpoint2);\\
+\itemket{Description}Generic function to make a slider on a Euclidean view.
+\itemket{Examples}\mbox{}
+
+\verb|Slider("A-C-B",[-5,-2],[5,-2]); | // \verb|C| is movable.\\
+\verb|Slider("D-F-E",[-6,-2],[-6,2]); | // \verb|F| is movable.\\
+\verb|Plotdata("1",Assign("y=a*sin(x-b)",["a",F.y,"b",C.x]),"x"); |
+
+\vspace{\baselineskip}
+\hspace{15mm}
+\includegraphics[bb=0.00 0.00 445.02 193.01,height=40mm]{Fig/slider.pdf}
+
+\end{cmd}
+
+%-----------Sprintf---------------------------------
+\begin{cmd}{Sprintf}{sprintf}
+\itemket{Usage}Sprintf(value,number);
+\itemket{Description}Converts a real number to a string.
+\itemket{Details}\hspace{9mm} Convert a real value to a string to the specified number of digits after the decimal point.
+\itemket{Examples}\mbox{}
+
+\verb|Sprintf(pi,2);| // returns "3.14".\\
+\verb|Sprintf(pi,7);| // returns "3.1415927".\\
+
+\verb|Remark| : \verb|pi| is a reserved variable in Cindyscript, representing the number $\pi$.
+
+\itemket{Reference} See \hyperlink{textformat}{Textformat}.
+\end{cmd}
+
+%------------Strsplit--------------------------------
+\begin{cmd}{Strsplit}{strsplit}
+\itemket{Usage}Strsplit(string,char);
+\itemket{Description}Generic function to return the list of strings separated by \verb|char|.
+\itemket{Examples}\mbox{}
+
+\verb|str="abcadeaf"|\\
+\verb|strL=Strsplit(str,"a"); |// Result is ["","bc","de","f"].
+\end{cmd}
+
+%\newpage
+
+
+%----------Texcom----------------------------------
+\begin{cmd}{Texcom}{texcom}
+\itemket{Usage}Texcom(command);
+\itemket{Description}Generic function to add the command in the \TeX file.
+\itemket{Details}Command is a \TeX command in string.
+\itemket{Examples}\mbox{}
+
+\verb|Texcommand("{");|\\
+\verb|Texcommand("}");|
+\end{cmd}
+
+%-------------Textformat}-------------------------------
+\begin{cmd}{Textformat}{textformat}
+\itemket{Usage}Textformat(value,number);
+\itemket{Description}Converts a real number to a string.
+\itemket{Details}\hspace{9mm}Convert a real value to a string up to the specified number of digits after the decimal point. "value" is can be list.
+
+Cindyscript has a function \verb|format(value, number)|, like as Textformat.
+\itemket{Examples}\mbox{}
+
+\verb| Textformat(1/6,4);| // return value is string "0.1667" \\
+\verb| format(1/6,4); | // return value is string "0.1667"
+
+\verb| dt=[1/6,0.5];|\\
+\verb| Textformat(dt,4); | // return valu is string "[ 0.1667 , 0.5 ]" \\
+\verb| format(dt,4); | // return value is list ["0.1667" , "0.5" ]\\
+\verb| Sprintf(dt,4); | // return value is list ["0.1667","0.5000"]
+
+\itemket{Reference} See \hyperlink{sprintf}{Sprintf}.
+
+\end{cmd}
+
+%----------Toupper----------------------------------
+\begin{cmd}{Toupper}{toupper}
+\itemket{Usage}Toupper(string);
+\itemket{Description}This function returns the upper case letters of the string.
+\itemket{Examples}\verb|Toupper("aBc123");| // "ABC123" is returned.
+
+%\verb|Windispg();|
+\end{cmd}
+
+%----------Windispg----------------------------------
+\begin{cmd}{Windispg}{windispg}
+\itemket{Usage}Windispg();
+\itemket{Description}Generic function to display all graphs on Euclidean view.
+\itemket{Remark}This command must be put on the final line.
+%\itemket{Examples}\mbox{}
+
+%\verb|Windispg();|
+\end{cmd}
+
+%----------Windispg----------------------------------
+\begin{cmd}{Windispg}{windispg}
+\itemket{Usage}Windispg();
+\itemket{Description}Generic function to display all graphs on Euclidean view.
+\itemket{Remark}This command must be put on the final line.
+%\itemket{Examples}\mbox{}
+
+%\verb|Windispg();|
+\end{cmd}
+%----------Fracform----------------------------------
+\begin{cmd}{Fracform}{fracform}
+\itemket{Usage}Fracform(number,list of denominators)
+\itemket{Description}returns Tex-like form of the fraction
+\itemket{Examples}\verb|Fracform(0.33,[2,3]); => fr(1,3)|
+
+\end{cmd}
+
+%----------Totexform----------------------------------
+\begin{cmd}{Totexform}{totexform}
+\itemket{Usage}Totexform(Tex-like form)
+\itemket{Description}returns TeX form
+\itemket{Examples}\verb|Totexform(fr(1,3)); => frac{1}{3}|
+
+\end{cmd}
+
+%----------Totexform----------------------------------
+\begin{cmd}{Tocindyform}{tocindyform}
+\itemket{Usage}Tocindyform(Tex-like form)
+\itemket{Description}returns Cindy form
+\itemket{Examples}\verb|Tocindyform(fr(1,3)); => (1)/(3)|
+\end{cmd}
+
+\newpage
+
+%==== Calling Other Softwares =========
+\section{Calling Other Softwares}
+\subsection{R}
+
+%--------------Rfun------------------------------
+\begin{cmd}{Rfun}{rfun}
+\itemket{Usage}Rfun(name, ommand,list of arguments,options)
+\itemket{Description}This function executes a R command and returns the.
+\itemket{Examples}\verb|Rfun("1","rnorm",[10]);| // The result will be assigned to "R1".
+\itemket{Remark}Option "Cat=n" supresses display of the result in the console.
+\end{cmd}
+
+%--------------CalcbyR------------------------------
+\begin{cmd}{CalcbyR}{calcbyr}
+\itemket{Usage}CalcbyR(var,command,options)
+\itemket{Description}executes R commands and returns the execution result to Cinderella.
+\itemket{Details}exchange data with R through a batch file (kc.bat) or a shell file (kc.shell).
+\itemket{Examples} \mbox{}
+
+Generate 10 random samples from the standard normal distribution by R and return the result (data) to Cinderella.\\
+\verb| cmdL=[|\\
+\verb| "dt=rnorm",[10,50,5],|\\
+\verb| "m=mean(dt)",[],|\\
+\verb| "u=var(dt)",[],|\\
+\verb| "dt::m::u",[]|\\
+\verb| ]|\\
+\verb| CalcbyR("ans",cmdL);|
+
+\verb| println("Data : "+ans_1);|\\
+\verb| println("Mean : "+format(ans_2,4));|\\
+\verb| println("UD : "+format(ans_3,4));|\\
+
+%\begin{center}
+%\includegraphics[bb=0.00 0.00 532.53 249.51,width=12cm]{Fig/calcbyr01.pdf}
+%\end{center}
+
+generate 200 random samples from the Poisson distribution with mean 5 and calculate the sample mean and the unbiased variance of the data.\\
+\verb| cmdL=[|\\
+\verb| "tmp1=rpois",[200,5],|\\
+\verb| "tmp2=mean",["tmp1"],|\\
+\verb| "tmp3=var",["tmp1"],|\\
+\verb| "tmp2::tmp3::tmp1",[]|\\
+\verb| ];|\\
+\verb| CalcbyR("rd",cmdL);|\\
+\verb| dt=rd_(3..length(rd));|\\
+\verb| nn=length(dt);|\\
+\verb| mx=rd_1;|\\
+\verb| vx=rd_2*(nn-1)/nn;|\\
+\verb| sx=sqrt(vx);|\\
+\verb| println(dt);|\\
+\verb| println(["m="+format(mx,4),"v="+format(vx,4)]);|\\
+\verb| Setscaling(1/5);|
+
+create a histogram for the data, \verb|Breaks=seq(0,14,1)| specifies the bin size.\\
+\verb| Histplot("1",dt,["Breaks=seq(0,14,1)","dr,0.5"]);|\\
+
+\begin{center}
+\input{Fig/poison01}
+\end{center}
+
+generate 2000 random samples from the Poisson distribution and calculate 200 sample means in 10 samples.\\
+\verb| cmdL=[|\\
+\verb| "tmp1=rpois",[2000,5],|\\
+\verb| "tmp2=c()",[],|\\
+\verb| "for(k in 1:200){",[],|\\
+\verb| " tmp=tmp1[(10*(k-1)+1):(10*k)]",[],|\\
+\verb| " tmp2=c(tmp2,mean(tmp))",[],|\\
+\verb| "}",[],|\\
+\verb| "=tmp2",[]|\\
+\verb| ];|\\
+\verb| CalcbyR("rd2",cmdL);|\\
+\verb| Setscaling(1/10);|\\
+\verb| Histplot("2",rd2);|\\
+
+\end{cmd}
+
+%-------------Boxplot-------------------------------
+\begin{cmd}{Boxplot}{boxplot}
+\itemket{Usage}Boxplot(name, data, vertical position, height of box,options);
+\itemket{Description}draw boxplots
+\itemket{Examples}\mbox{}
+
+draw a boxplot of 100 uniform random numbers less than 5.
+
+\verb| dt1=apply(1..100,5*random());|\\
+\verb| Boxplot("1",dt1,1,1/2);|
+
+\begin{center} \input{Fig/boxplot01} \end{center}
+
+read an external data file in csv format and draw a boxplot of the data.
+
+\verb| Boxplot("2","datafile.csv",3,1/2);|
+
+You can read a csv file with more than one column using \verb|Readcsv|.
+The csv flie should be stored in current working folder (defalut is fig folder).
+Using \verb|Framedata| and \verb|Rulerscale| together, you can mark with a scale.
+Before you use \verb|Framedata|, you need to take two diagonal points of the drawing area on the Euclidean view.
+
+\verb| data=Readcsv("datafile.csv");|\\
+\verb| dt1=apply(data,#_1);|\\
+\verb| dt2=apply(data,#_2);|\\
+\verb| Boxplot("1",dt1/20,1,1/2);|\\
+\verb| Boxplot("2",dt2/20,3,1/2);|\\
+\verb| Framedata("1",[A,B],["corner"]);|\\
+\verb| Rulerscale(A,["r",0,6,1],["f",1,"\mbox{dt1}",3,"\mbox{dt2}"]);|
+
+\begin{center} \input{Fig/boxplot} \end{center}
+
+\end{cmd}
+
+%-------------Histplot-------------------------------
+%\newpage
+
+\begin{cmd}{Histplot}{histplot}
+
+\itemket{Usage}Histplot(name,data,options)
+\itemket{Description}create histograms.
+\itemket{Details}data is given in a list or read an external data file in csv format.\\
+Return value is list of breaks and frequency.
+
+You can specify the breaks as a vector of points to get exactly what is wanted, for example\\
+\hspace{20mm} \verb|"Breaks=[0,10,20,30,40,50,60]"| .\\
+The Sturges algorithm is the default.\\
+Other options:\\
+\verb|"Rel=yes/no"| : draw a histogram of proportions or frequencies (default is no)\\
+
+\itemket{Examples} \mbox{}
+
+Read the data file in csv format (datafile.csv) and create a histogram of the data in a frame with a scale.\\
+\verb| Addax(0);|\\
+\verb| Setscaling(5);|\\
+\verb| Setunitlen("0.6mm");|\\
+\verb| data=Readcsv("datafile.csv");|\\
+\verb| Histplot("1",data,[""]);|\\
+\verb| Framedata("1",[A,B],["corner"]);|\\
+\verb| Rulerscale(A,["r",0,100,10],["r",0,15,5]);|\\
+
+\begin{center}
+\input{Fig/histgram}
+\end{center}
+
+\end{cmd}
+%------------PlotdataR--------------------------------
+\begin{cmd}{PlotdataR}{plotdatar}
+
+\itemket{Usage}PlotdataR(name,formula,var)
+\itemket{Description}Draw graph of R's statistical probability function.
+\itemket{Details}Draw graphs of functions not built-in Cindyscript.
+\itemket{Examples} \mbox{}
+
+Example1\\
+draw graphs of the probability density function (p.d.f.) and the cummulative distribution function of $N(5,2^2)$.\\
+\verb| PlotdataR(“1”, “dnorm(x,5,2)”, ”x=[0,10]”); |\\
+\verb| PlotdataR(“2”, ”pnorm(x,5,2)”, ”x=[0,10]”);|
+
+%\vspace{\baselineskip}
+\begin{center}
+\input{Fig/plotdatar1}
+\end{center}
+
+Example2\\
+1. draw a graph of the p.d.f. of standard normal distribution.\\
+2. shade the region under the graph and above x-axis to the left of \verb|A.x|.\\
+3. find the area of the shaded region.\\
+\verb| PlotdataR("1","dnorm(x)","x=[-5,5]",["Num=100"]); |\\
+\verb| Putpoint("A",[0,0],[A.x,0]); |\\
+\verb| Lineplot("1",[A,A+[0,1]],["nodisp"]); |\\
+\verb| Putintersect("B","grR1","ln1"); |\\
+\verb| Listplot("1",[A,B]); |\\
+\verb| Listplot("2",[[-5,0],[5,0]],"nodisp"); |\\
+\verb| Enclosing("1",["Invert(grR1)","sg2","sg1"],[B,"notex"]); |\\
+\verb| Shade(["en1"],["Color=[0.2,0,0,0]"]); |\\
+\verb| tmp=0.5+Integrate("grR1",[0,A.x]); |\\
+\verb| Expr([A,"s",text(A.x),C,"e","P="+text(tmp)]); |
+
+%\vspace{\baselineskip}
+\begin{center}
+\input{Fig/rshade}
+\end{center}
+
+\end{cmd}
+%--------------PlotdiscR------------------------------
+\begin{cmd}{PlotdiscR}{plotdiscr}
+
+\itemket{Usage}PlotdiscR(name,fromaula,var)
+\itemket{Description}draw graphs of discrete distributions by calling R’s built-in functions.
+\itemket{Details}The "d" functions in R to draw graphs of discrete distributions:\\
+dbinom (binomial distribution), dpois (poisson distribution), dgeom (geometric distribution), etc.
+\itemket{Examples} \mbox{}
+
+The normal distribution with the same mean and standard deviation as the binomial distribution\\
+\verb| Setscaling(20);|\\
+\verb| PlotdiscR("1","dbinom(k,10,0.4)","k=[0,10]");|\\
+\verb| PlotdataR("1","dnorm(x,10*0.4,sqrt(10*0.4*0.6))","x=[0,10]",["do"]);|
+
+\begin{center}
+\input{Fig/binvsnormal}
+\end{center}
+
+Example2
+
+\verb| PlotdiscR("2","dpois(k,4)","k=[0,10]");|\\
+\verb| PlotdiscR("3","dgeom(k,0.3)","k=[0,10]");|
+
+\end{cmd}
+
+
+%------------Scatterplot--------------------------------
+\begin{cmd}{Scatterplot}{scatterplot}
+
+\itemket{Usage}Scatterplot(name,filename/datalist,options1,options2)
+\itemket{Description}This command draw scatter plot reading a csv file.
+\itemket{Details} Datafile is next style csv format.
+\begin{verbatim}
+ 2.3, 4.5 (LF)
+ 3.2, 7 (LF)
+ 2.0, 6.8 (LF)
+\end{verbatim}
+If 2nd argment is datalist, next format.
+\begin{verbatim}
+ data=[[2.3,4.5],[3.2,7],[2.0,6.8], ・・・ ];
+\end{verbatim}
+
+Options1 are switch of draw the regression line or no , style of point.\\
+\verb|"Reg=yes(no:default)"| to decide whether to draw the regression line.\\
+Options2 are position of drawing the regression line and style of line.\\
+Position is coordinate or name of point.
+\itemket{Examples}\mbox{}
+
+\verb| Scatterplot("1","data.csv",["Size=4","Color=blue"],[A,"Color=green"]);|\\
+\verb| Listplot("1",[[0,7],[0,0],[7,0]]);|\\
+\verb| Rulerscale([0,0],["r",0,7,1],["r",1,7,1]);|
+
+\begin{center}
+\input{Fig/scatter}
+\end{center}
+\end{cmd}
+
+%\newpage
+
+%========= Maxima =======
+\subsection{Maxima}
+%------------CalcbyM--------------------------------
+\begin{cmd}{CalcbyM}{calcbym}
+
+\itemket{Usage}CalcbyM(name, command,options)
+\itemket{Description}Maxima's script execution
+\itemket{Details}The second argument is a command to be executed by Maxima.\\
+Create a list (eg. cmdL) consisting of a repetition of commands and argument lists, and execute at once.\\
+There is no return value.
+For the result (of undefined value), the value of the variable of the command list last described (argument is the empty list) is assigned to the variable specified by "name".
+When you want to return more than one result, if you describe it by separating it with "::", it will be substituted into the list.
+\itemket{Examples} \mbox{}
+
+Example1: derivative
+
+\verb| cmdL=[ |\\
+\verb| "f:sin(x)", [], |\\
+\verb| "df:diff",["sin(x)","x"], |\\
+\verb| "f::df",[] |\\
+\verb| ]; |\\
+\verb| CalcbyM("fdf",cmdL); |\\
+\verb| println(fdf); |\\
+
+Example2: solution of quadratic equation
+
+\verb| cmdL=[ |\\
+\verb| "ans:solve",["x^2-x-4","x"], |\\
+\verb| "ans",[] |\\
+\verb| ]; |\\
+\verb| CalcbyM("ans",cmdL); |\\
+\verb| println("ans="+ans); |\\
+
+Example3:
+
+
+\verb| fx="(exp(x)+exp(-x))/2"; |\\
+\verb| cmdL=[ |\\
+\verb| "df:diff",[fx,"x"], |\\
+\verb| "c:ev",["df","x=a"], |\\
+\verb| "b:ev",[fx,"x=a"], |\\
+\verb| "eq:c*(x-a)+b",[], |\\
+\verb| "eq",[] |\\
+\verb| ]; |\\
+\verb| CalcbyM("tn1",cmdL); |\\
+\verb| tn1=Assign(tn1,["%e^a","exp(a)","%e^-a","exp(-a)"]); |\\
+\verb| Plotdata("1",fx,"x"); |\\
+\verb| PutonCurve("A","gr1"); |\\
+\verb| tmp=Assign(tn1,["a",A.x]); |\\
+\verb| plotting data("2",tmp,"x",["Num=2"]); |\\
+\verb| Letter([A,"se","A"]);|
+
+%\newpage
+Example4: Parametric
+
+\verb| fn="3*cos(t)^2*[cos(t),sin(t)]";|\\
+\verb| cmdL=[|\\
+\verb| "f:",[fn], |\\
+\verb| "df:diff",["f","t"], |\\
+\verb| "df:trigsimp",["df"], |\\
+\verb| "tn:f+s*df",[], |\\
+\verb| "tn",[] |\\
+\verb| ]; |\\
+\verb| CalcbyM("tn2",cmdL); |\\
+\verb| Paramplot("1",fn,"t=[0,2*pi]",["Num=100"]); |\\
+\verb| gn=Assign(tn2,["t",A.x]); |\\
+\verb| Paramplot("2",gn,"s=[-3,3]"); |\\
+
+\begin{minipage}{65mm}
+\begin{center}
+\input{Fig/maxfun01}\\
+Example3
+\end{center}
+\end{minipage}
+\begin{minipage}{65mm}
+\begin{center}
+\vspace*{5mm}
+
+\input{Fig/maxfun02}\vspace{10mm}\\
+Example4
+\end{center}
+\end{minipage}
+
+\end{cmd}
+%-------------Mxbatch-------------------------------
+\begin{cmd}{Mxbatch}{mxbatch}
+
+\itemket{Usage}Mxbatch(filename)
+\itemket{Description}Creation command to execute Maxima file
+\itemket{Details}Create a command for CalcbyM to execute the file in ketcindy/ketlib/maximaL.
+ketcindy/ketlib/maximaL contains three files: fourier\_sec.max, matoperation.max and poincare.mac.
+For example, when dealing with Fourier series, use fourier\_sec.max.
+\itemket{Examples} \mbox{}
+
+\verb| Setax(["a"]); |\\
+\verb| Slider("A-C-B",[-5.5,-1.5],[4.5,-1.5]); |\\
+\verb| defL=["1",[-3,-2],1,"0",[-2,-1],1,"-x",[-1,1],1,"0",[1,2],1,"-1",[2,3],1]; |\\
+\verb| Drwxy(); |\\
+\verb| tmp=Periodfun(defL,1,["dr,2","Color=red"]); |\\
+\verb| fun=tmp_1; |\\
+\verb| per=tmp_2; |\\
+\verb| Htickmark([1,"n","1",2,"n","2",3,"nw","3"]); |\\
+\verb| Htickmark([-1,"-1",-2,"-2",-3,"-3"]); |\\
+\verb| cmdL=Concat(Mxbatch("fourier_sec"),[ |\\
+\verb| "Ffun(x):="+fun,[], |\\
+\verb| "c:fourier_sec_coeff",["Ffun(x)","x"], |\\
+\verb| "c[1]::c[2]::c[3]",[] |\\
+\verb| ]); |\\
+\verb| CalcbyM("ans",cmdL,[]); |\\
+\verb| nterm=round(4*(C.x-A.x)); |\\
+\verb| Fourierseries("1",ans,per,nterm,["Num=400"]); |\\
+\verb| Mxtex("2",ans_3); |\\
+\verb| Expr([[-5,-2],"e","s_n="+tx2,[4,-2],"e","n="+text(nterm)]); |
+
+%\vspace{\baselineskip}
+%\hspace{20mm}\input{Fig/mxbatch}\vspace*{12mm}
+
+\begin{center}
+\input{Fig/mxbatch}\vspace{3mm}
+\end{center}
+
+\end{cmd}
+%-------------Mxfun-------------------------------
+\begin{cmd}{Mxfun}{mxfun}
+
+\itemket{Usage}Mxfun(name,formula,list,options)
+\itemket{Description}Execution of Maxima's function
+\itemket{Details}The second argument "formula" is Maxima's function name.
+The third argument "list" is a list of arguments to pass to the function. \\
+The return value is a string if there is at least one character in the expression of the second argument.
+In the case of all numbers (including +, -, .), it becomes a number if it is 16 or less digits, and it becomes a string if it is more than 16 digits.
+Also, the return value is also assigned to the variable "mxname".\\
+If "Disp = no" is added to the option, the result is not displayed on the console.
+\itemket{Examples} \mbox{}
+
+\verb| Mxfun("1","taylor",["sin(x)","x",0,7],[""]); |\\
+\verb| Plotdata("1","sin(x)","x",["da"]); |\\
+\verb| Plotdata("2",mx1,"x"); |
+
+\vspace{\baselineskip}
+\hspace{20mm} \input{Fig/taylor}\\
+
+\end{cmd}
+%------------Mxtex--------------------------------
+\begin{cmd}{Mxtex}{mxtex}
+
+\itemket{Usage}Mxtex(name, formula)
+\itemket{Description}Conversion of expression to TeX format
+\itemket{Details}The second argument "formula" is the expression directly written or the return value of Mxfun.
+Convert it to TeX format.\\
+The return value is also assigned to the variable "txname".
+\itemket{Examples} \mbox{}
+
+Example1
+
+\verb| fx="x^3/((x+1)*(x+2))"; |\\
+\verb| pfx=Mxfun("1","partfrac",[fx,"x"]); |\\
+\verb| form=Mxtex("1",fx)+"="+Mxtex("2",pfx); |\\
+\verb| dform=Assign(form,["frac","dfrac"]); |\\
+\verb| Expr([0,3],"e",form); |\\
+\verb| Expr([0,1],"e",dform); |\\
+
+\includegraphics[bb=0.00 0.00 240.01 115.51,width=70mm]{Fig/mxtex01E.pdf}
+\input{Fig/mxtex02}
+
+\vspace{\baselineskip}
+Example2
+
+
+\begin{minipage}[t]{65mm}
+\verb| fx="x^2-x-3"; |\\
+\verb| cmdL=[ |\\
+\verb| "ans:solve",[fx,"x"], |\\
+\verb| "ans",[] |\\
+\verb| ]; |\\
+\verb| CalcbyM("ans",cmdL); |\\
+\verb| p1=indexof(ans,"["); |\\
+\verb| p2=indexof(ans,","); |\\
+\verb| p3=indexof(ans,"]"); |\\
+\verb| s1=substring(ans,p1,p2-1); |\\
+\verb| s2=substring(ans,p2,p3-1); |\\
+\verb| s1=replace(s1,"x =",""); |\\
+\verb| s2=replace(s2,"x =",""); |\\
+\verb| Mxtex("1",s1); |\\
+\verb| Mxtex("2",s2); |\\
+\verb| Plotdata("1",fx,"x"); |\\
+\verb| Expr([-2,-0.5],"e",tx1); |\\
+\verb| Expr([2,-0.5],"e",tx2); |\\
+\end{minipage}\hspace{5mm}%
+\begin{minipage}[t]{65mm}
+\mbox{}\vspace{20mm}
+
+\input{Fig/mxtex03}
+\end{minipage}
+\end{cmd}
+
+%========= Risa/Asir =======
+\subsection{Risa/Asir}
+
+%------------CalcbyA--------------------------------
+\begin{cmd}{CalcbyA}{calcbya}
+
+\itemket{Usage}CalcbyA(name, command,options)
+\itemket{Description}Risa/Asir's script execution
+\itemket{Details}The second argument is a command to be executed by Risa/Asir.\\
+Create a list (eg. cmdL) consisting of a repetition of commands and argument lists, and execute at once.\\
+There is no return value.
+The result (of undefined value) is assigned to the variable specified by "name", the value of the variable of the command list last described (argument is the empty list).
+If you want to return more than one result, if you describe it by separating it with "::", it will be substituted into the list.
+%\itemket{Examples} \mbox{}
+
+\end{cmd}
+%-------------Asirfun-------------------------------
+\begin{cmd}{Asirfun}{asirfun}
+
+\itemket{Usage}Asirfun(name, formula, list,options)
+\itemket{Description}Execution of Risa/Asir's function
+\itemket{Details}The second argument "formula" is the function name of Risa/Asir.
+The third argument "list" is a list of arguments to pass to the function.\\
+The return value is a string if there is at least one character in the expression of the first argument.
+In case of all numbers (including +, -, .), it becomes a number if it is 16 digits or less, and it becomes a string if it is more than 16 digits.
+Also, the return value is also assigned to the variable "asname".\\
+If "Disp = no" is added to the option, the result is not displayed on the console.
+%\itemket{Examples} \mbox{}
+
+\end{cmd}
+%========= MeshLab =======
+\subsection{MeshLab}
+
+Write next script in Initialization slot for use \ketcindy\ 3D.
+ \\
+\verb| Ketinit();|\\
+\verb| Ketinit3d();|
+
+%--------------Mkobjcmd------------------------------
+\begin{cmd}{Mkobjcmd}{mkobjcmd}
+
+\itemket{Usage}Mkobjcmd(name,formula,option)
+\itemket{Description}generate commands for obj formatted files of surfaces without thickness.
+%%\itemket{Details}
+\itemket{Examples} \mbox{}
+
+\verb| fd=[ "z=x^2-y^2","x=[-1,1]","y=[-1,1]"," "]; |\\
+\verb| Sf3data("1",fd); |\\
+\verb| Windispg(); |\\
+\verb| Mkobjcmd("1",fd,[40,40,"-"]); |\\
+\verb| Meshlab():=( |\\
+\verb| Mkviewobj("saddle",oc1, ["m","v"]); |\\
+\verb| ); |
+
+Option ``$+$" is for the left figure, and ``$-$" for the right.
+
+\hspace{10mm} \includegraphics[bb=0 0 679.53 263.51 , width=12cm]{Fig/meshlab01.pdf}
+\end{cmd}
+%-------------Mkobjcrvcmd-------------------------------
+\begin{cmd}{Mkobjcrvcmd}{mkobjcrvcmd}
+
+\itemket{Usage}Mkobjcrvcmd(name,PD,option)
+\itemket{Description}generate commands for obj formatted files of spatial curves.
+%%\itemket{Details}
+\itemket{Examples} \mbox{}
+
+\verb| Spacecurve("1","[(6*pi-t)/(6*pi)*cos(t),(6*pi-t)/(6*pi)*sin(t),0.1*t]", |\\
+\verb| "t=[0,6*pi]",["Num=200"]); |\\
+\verb| Windispg(); |\\
+\verb| Mkobjcrvcmd("1","sc3d1",[0.1,8,"yz"]); |\\
+\verb| Meshlab():=( |\\
+\verb| Mkviewobj("spiral",oc1,["m","v"]); |\\
+\verb| ); |
+
+\hspace{10mm} \includegraphics[bb=0 0 614.53 236.51 , width=12cm]{Fig/meshlab02.pdf}
+
+\end{cmd}
+%--------------Mkobjnrm------------------------------
+\begin{cmd}{Mkobjnrm}{mkobjnrm}
+
+\itemket{Usage}Mkobjnrm(name,formula)
+\itemket{Description}calculate normal vector of surface.
+\itemket{Details}Normal vector is calculated using the formula of surface.
+\itemket{Examples} \mbox{}
+
+\verb| Mkobjnrm("1","[x,y,x*y/sqrt(x^2+y^2)],x,y"); |\\
+
+\end{cmd}
+%--------------Mkobjplatecmd------------------------------
+\begin{cmd}{Mkobjplatecmd}{mkobjplatecmd}
+
+\itemket{Usage}Mkobjplatecmd(name,facedata,options)
+\itemket{Description}generate commands for obj formatted files of plates.
+%%\itemket{Details}
+\itemket{Examples} \mbox{}
+
+\verb| Xyzax3data("","x=[-5,5]","y=[-5,5]","z=[-5,5]"); |\\
+\verb| p1=[2,0,0]; |\\
+\verb| p2=[0,2,0]; |\\
+\verb| p3=[0,0,2]; |\\
+\verb| plane=[[p1,p2,p3],[[1,2,3]]]; |\\
+\verb| Mkobjplatecmd("1",plane,[0.05]); |\\
+\verb| Mkobjcrvcmd("2","ax3d"); |\\
+\verb| Mkviewobj("plane",Concatcmd([oc1,oc2]),["m","v"]);|
+
+\begin{center}
+\includegraphics[bb=0 0 287.01 228.01 , width=50mm]{Fig/meshlab03.pdf}
+\end{center}
+
+\end{cmd}
+%-------------Mkobjpolycmd-------------------------------
+\begin{cmd}{Mkobjpolycmd}{mkobjpolycmd}
+
+\itemket{Usage}Mkobjpolycmd(name,PD,options)
+\itemket{Description}generate commands for obj formatted files of polyhedra.
+%%\itemket{Details}
+\itemket{Examples} \mbox{}
+
+\verb| Setdirectory(Dirhead+"/data/polyhedrons_obj"); |\\
+\verb| polydt=Readobj("r01.obj",["size=-3.5"]); |\\
+\verb| Setdirectory(Dirwork); |\\
+\verb| pd=VertexEdgeFace("1",polydt,["Pt=fix","Edg=nogeo"]); |\\
+\verb| Mkobjpolycmd("1",pd,[[0,0,0]]); |\\
+\verb| Mkviewobj("plane",oc1,["m","v"]); |
+%% Setobj(Fhead,["m","v"]);
+
+The polyhedron obj data is downroaded from\\
+\hspace*{20mm}\url{http://mitani.cs.tsukuba.ac.jp/polyhedron/}
+
+
+\end{cmd}
+%--------------Mkobjsymbcmd------------------------------
+\begin{cmd}{Mkobjsymbcmd}{mkobjsymbcmd}
+
+\itemket{Usage}Mkobjsymbcmd(PD,real,real,vector,vector)
+\itemket{Description}generate commands for obj formatted files of some characters.
+\itemket{Details}Ploting data are available for characters $x$, $y$, $z$, $t$, $n$, P, Q, and R.
+The arguments are their siizes, angles of rotations, directions of the viewpoints, positions.
+\itemket{Examples} \mbox{}
+
+
+\verb| Mkobjsymbcmd("P",0.5,pi/3,[0,-1,0],[0,0,6]); |\\
+\verb| Mkobjsymbcmd("x",0.5,0,[0,-1,0],[6,0,0]); |\\
+\verb| Circledata("1",[[0,0],[1,0]],["nodisp"]); |\\
+\verb| Mkobjsymbcmd("cr1",0.5,0,[0,-1,0],[0,5,0]); |
+
+\end{cmd}
+%-------------Mkobjthickcmd-------------------------------
+\begin{cmd}{Mkobjthickcmd}{mkobjthickcmd}
+
+\itemket{Usage}Mkobjthickcmd(name,formula)
+\itemket{Description}generate commands for obj formatted files of surfaces with thickness.
+%%\itemket{Details}
+\itemket{Examples} \mbox{}
+
+This function uses Maxima.
+
+\verb| fd=[ |\\
+\verb| "z=(x^2+y^2)",|\\
+\verb| "x=R*cos(T)","y=R*sin(T)",|\\
+\verb| "R=[0,2]","T=[0,2*pi]","e"|\\
+\verb| ];|\\
+\verb| Mkobjthickcmd("1",fd,[40,40,0.2,"+n+s-e-w+","assume(R>0)"]);|\\
+\verb| Mkviewobj("pala",oc1,["m","v","Wait=5"]); |\\
+
+\begin{center}
+\includegraphics[bb=0 0 287.01 189.01 , width=5cm]{Fig/meshlab06.pdf}
+\end{center}
+
+\end{cmd}
+%---------------Mkviewobj-----------------------------
+\begin{cmd}{Mkviewobj}{mkviewobj}
+
+\itemket{Usage} Mkviewobj(name,PD,options)
+\itemket{Description}generate obj formatted files.
+\itemket{Details}options
+\begin{tabbing}
+12345678901234567890\=\kill
+ "m" or "make" \> for generating data \\
+ "v" or "view" \> for starting meshlab and viewing\\
+ "W=n" or "Wait=n" \> for setting culculate time\\
+ "Unit=mm" \> for setting unit of length \\
+ \>\\
+\end{tabbing}
+%\itemket{Examples} \mbox{}
+
+\end{cmd}
+\newpage
+%=========== Animation ===============
+\section{Animation}
+
+\vspace{\baselineskip}
+ \hspace{10mm} \includegraphics[bb=0 0 732.04 376.02 , width=12cm]{Fig/mvgaiyou01.pdf}
+
+Operation of Buttons.
+
+\begin{tabbing}
+1234\=12345678\=1234567897890123456\=\kill
+ \> Figure \> Viewtex(); \> Making figure.tex\\
+ \> Parent \> same code \>Making figure.pdf by Figpdf() \\
+ \> ParaF \> Parafolder(); \> Making data folder of animation data\\
+ \> Anime \> Mkanimation(); \> Making flip animation\\
+ \> Flip \> Mkflipanime(); \>Making animation
+\end{tabbing}
+
+%---------------Setpara-----------------------------
+\begin{cmd}{Setpara}{setpara}
+
+\itemket{Usage}Setpara(fname,funcstr,range,options1,options2)
+\itemket{Description}Set up the animation control system.
+\itemket{Details}"fname" is the name of output file. "funcstr" is the name of animation function. "range" is the range of parameter.\\
+
+options1
+
+\begin{tabbing}
+1234567890123\=90123456789012345678\=\kill
+m/r \> Remake the new data file / Reread the existing data file (default=r)\\
+Div=n \> Total number of frames (default n=25).
+\end{tabbing}
+
+options2
+
+\begin{tabbing}
+1234567890123\=90123456789012345678\=\kill
+Frate=n \> Number of frames per second (default n=20)\\
+Title=str \> Title\\
+Scale=n \> Magnification factor of the figures\\
+opA \> option for animate.sty\\
+ \> loop: loop, controls: Show control button, buttonsize\\
+ \> step: Mode of frame feed/frame retrun\\
+ \> Default is \verb|"OpA=[loop,controls,buttonsize=3mm]"|\\
+ \> Use "+" then you can add a mode, for example \verb|"OpA=+step"| then we have\\
+ \> \verb|"OpA=[loop,controls,buttonsize=3mm,step]"|
+\end{tabbing}
+
+\itemket{Examples} \mbox{}
+
+\verb| Slider("A-C-B",[0,YMIN-1],[2*pi,YMIN-1]); |\\
+\verb| Setax(["","","sw","","sw"]); |\\
+\verb| Circledata("1",[[0,0],[0,2]]); |\\
+\verb| mf(t):=( |\\
+\verb| pt=2*[cos(t),sin(t)]; |\\
+\verb| mp=(pt+[4,0])/2; |\\
+\verb| Listplot("1",[[4,0],pt]); |\\
+\verb| Pointdata("1",[mp,pt],["Size=2"]); |\\
+\verb| if(t==0, |\\
+\verb| ptlist=[mp]; |\\
+\verb| , |\\
+\verb| ptlist=append(ptlist,mp); |\\
+\verb| ); |\\
+\verb| Pointdata("2",ptlist,["Size=2","Color=red"]); |\\
+\verb| Letter([[4,0],"s","A",pt,"en","P",mp,"ne","Q"]); |\\
+\verb| ); |\\
+\verb| Setpara("middle","mf(t)","t=[0,4*pi]"); |\\
+\verb| mf(C.x); |
+
+\vspace{\baselineskip}
+\hspace{20mm} \includegraphics[bb=0.00 0.00 608.03 367.02,width=8cm]{Fig/moviedata01.pdf}
+
+When we make the animation, comment out \verb|//mf(C.x);| and click the Anime button. The following figure is the first page of the animatemiddle.pdf file.
+
+\hspace{30mm}\includegraphics[bb=0.00 0.00 470.02 394.02,width=6cm]{Fig/moviedata02.pdf}
+
+The animation is continued for 5 seconds with the following options.\\
+ \verb| Setpara("middle","mf(t)","t=[0,4*pi]",["Div=30"],["Frate=6"]);|\\
+A smooth-looking animation is achieved with the options: \verb|["Div=150"],["Frate=30"]|.
+\end{cmd}
+
+\newpage
+%============== Slide ==================
+\section{\ketcindy\ Slide}
+
+%------------Setslidebody--------------------------------
+\begin{cmd}{Setslidebody}{setslidebody}
+\itemket{Usage}Setslidebody(bodycolor,bodystyle,density)
+\itemket{Description}Set up the color and density of the letters in slide body.\\
+\itemket{Details}Meanings and defaults of options are\\
+\Ltab{25mm}{bodycolor}\Ltab{50mm}{color of letters}\verb|"blue"|\\
+\Ltab{25mm}{bodystyle}\Ltab{50mm}{style of letters}\verb|"\Large\bf\boldmath"|\\
+\Ltab{25mm}{density}\Ltab{50mm}{density of thin letters}\verb|0.1|\ (The range is from 0 to 1).\\
+\hspace{10mm}Remark : density can be changed by \verb|\setthin{density}| in the text file.
+\end{cmd}
+
+%------------Setslidehyper-------------------------------
+\begin{cmd}{Setslidehyper}{setslidehyper}
+\itemket{Usage}Setslidehyper("dvipdfmx",options)
+\itemket{Description}Use \verb|hyperref.sty|.
+\itemket{Details}if the 1st argument is null, it will be replaced with "dvipdfmx".\\
+options : \verb|["cl=true,lc=blue,fc=blue","Pos=[125,73]","Size=1"]|\\
+Meanings and defaults of options are\\
+\\
+\Ltab{25mm}{"cl=..."}\Ltab{50mm}{colorlinks}\verb|cl=true|\\
+\Ltab{25mm}{"lc=..."}\Ltab{50mm}{linkcolor}\verb|lc=blue|\\
+\Ltab{25mm}{"fc=..."}\Ltab{50mm}{filecolor}\verb|fc=blue|\\
+\Ltab{25mm}{"Pos=..."}\Ltab{50mm}{start position of buttons}\verb|"Pos=[125,73]"|\\
+\Ltab{25mm}{"Size=..."}\Ltab{50mm}{size of buttons}\verb|"Size=1"|.\\
+\end{cmd}
+
+%------------Setslidemain-------------------------------
+\begin{cmd}{Setslidemain}{setslidemain}
+\itemket{Usage}Setslidemain([letterc,boxc,framec,xpos,size]);
+\itemket{Description}Set up the main slide (a section delimiter).
+\itemket{Details}Meanings and defaults of options are\\
+\Ltab{25mm}{letterc}\Ltab{50mm}{color of letters}\verb|[0.98,0.13,0,0.43]|\\
+\Ltab{25mm}{boxc}\Ltab{50mm}{color of box}\verb|[0,0.32,0.52,0]|\\
+\Ltab{25mm}{framec}\Ltab{50mm}{color of frame}\verb|[0,0.32,0.52,0]|\\
+\Ltab{25mm}{xpos}\Ltab{50mm}{horizontal position of title}\verb|62|\\
+\Ltab{25mm}{size}\Ltab{50mm}{magnification of title}\verb|2|.
+\itemket{Remark}If some arguments are null, the defaul is used.\\
+\hspace*{10mm}\verb|Setslidemain([,,,,3]);|
+\end{cmd}
+
+%------------Setslidepage------------------------------
+\begin{cmd}{Setslidepage}{setslidepage}
+\itemket{Usage}Setslidepage([letterc,boxc,framec,shadowc,xpos,size]);
+\itemket{Description}Set up each page of slides.
+\itemket{Details}Meanings and defaults of options are\\
+\Ltab{25mm}{letterc}\Ltab{50mm}{color of letters}\verb|[0.98,0.13,0,0.43]|\\
+\Ltab{25mm}{boxc}\Ltab{50mm}{color of box}\verb|[0,0.32,0.52,0]|\\
+\Ltab{25mm}{framec}\Ltab{50mm}{color of frame}\verb|[0,0.32,0.52,0]|\\
+\Ltab{25mm}{shadowc}\Ltab{50mm}{color of shadow}\verb|[0,0,0,0.5]|\\
+\Ltab{25mm}{xpos}\Ltab{50mm}{horizontal position of title}\verb|6|\\
+\Ltab{25mm}{size}\Ltab{50mm}{magnification of title}\verb|1.3|.
+\itemket{Remark}If some arguments are null, the defaul is used.\\
+\hspace*{10mm}\verb|Setslidepage([,"red"]);|
+\end{cmd}
+
+%------------Setslidemargin-----------------------------
+\begin{cmd}{Setslidemargin}{setslidemargin}
+\itemket{Usage}Setslidepage([leftmarginchange,topmarginchange]);
+\itemket{Description}This function changes the margin of slides from the default.
+\itemket{Example}Setslidemargin([+5,-10]);
+\end{cmd}
+
+%------------Settitle------------------------------
+\begin{cmd}{Settitle}{settitle}
+\itemket{Usage}Settitle(list of title components,options)
+\itemket{Description}Make a title slide.
+\itemket{Details}Meanings and defaults of options are\\
+\Ltab{25mm}{"Title=..."}\Ltab{50mm}{name of the title file}\verb|"Title=slide0"|\\
+\Ltab{25mm}{"Layery=..."}\Ltab{50mm}{starting vertical position}\verb|"Layery=0"|\\
+\Ltab{25mm}{"Color=..."}\Ltab{50mm}{color of letters}\verb|"Color=blue"|.
+
+\itemket{Examples} \mbox{}\\
+\hspace{10mm}\verb| Settitle([ |\\
+\hspace{10mm}\verb| "s{60}{20}{Main Title}", |\\
+\hspace{10mm}\verb| "s{60}{50}{Name}", |\\
+\hspace{10mm}\verb| "s{60}{60}{Affiliation}", |\\
+\hspace{10mm}\verb| "s{60}{70}{Info}" |\\
+\hspace{10mm}\verb| ],|\\
+\hspace{10mm}\verb| ["Title=SlideA","Color=[1,1,0,0]"]|\\
+\hspace{10mm}\verb| );|
+\end{cmd}
+
+\newpage
+%========== 3D =========
+\section{\ketcindy 3D}
+\subsection{Screen}
+The screen of KETCindy3D is structured as follows.
+
+There are two areas surrounded by a white rectangle on the drawing surface of Cinderella. The area on the left side where the NE and the SW are diagonal is referred to as the main screen, and the area on the right side is referred to as the sub screen.
+
+\vspace{\baselineskip}
+\begin{center}
+ \includegraphics[bb=0 0 879.05 447.02 , width=8cm]{Fig/3dstart.pdf}
+\end{center}
+As in the case of a flat surface, the main screen shows the range output to TeX and it can be changed by dragging two points of NE and SW. The viewpoint can be moved with the slider below the main screen, and the axis rotates on the main screen. You can think of the sub screen as a viewpoint placed on the xy plane.
+
+When you draw points and line segments with Cinderella's drawing tool on the main screen, points corresponding to the secondary screen are drawn. You can change the x, y coordinates by dragging the point on the main screen, and drag the point on the sub screen to change the z coordinate.
+
+\vspace{\baselineskip}
+\begin{center}
+ \includegraphics[bb=0.00 0.00 863.04 378.52 , width=10cm]{Fig/3dscreen.pdf}
+\end{center}
+KeTCindy3D performs hidden line processing on lines and surfaces. Hidden line processing speeds up processing in cooperation with C language.
+
+It is necessary to develop an environment that uses C language, but now it is standardized. If you can not use C language, you will use a function to compute with R, but in that case it will take quite a while.
+
+\subsection{Setting and Defining}
+%------------Ketinit3d--------------------------------
+\begin{cmd}{Ketinit3d}{ketinit3D}
+\itemket{Usage}Ketinit3d()
+\itemket{Description}Declare the use of KeTCindy3D
+\itemket{Details}Euclidean view of Cinderella becomes 3D mode. Two sliders are created to indicate the viewing angle TH($\theta$), FI($\phi$). The initial values are $\mathrm{TH}=0$ and $\mathrm{FI}=0$.\\
+\textcolor{red}{Caution}
+ This funcition and Ketinit() have to write on Initializaiton slot.
+\itemket{Remark}If \verb|Ketinit3d(0)| is used, the subscreen is not displayed. Ketinit () is also placed in the Initialization Slot, unlike 2D.
+\end{cmd}
+
+%------------ Setangle --------------------------------
+\begin{cmd}{Setangle}{setangle}
+\itemket{Usage}Setanlge(TH,FI)
+\itemket{Description}Specify rotation angle
+\itemket{Details}Specify the TH and FI values of the slider that determines the rotation angle (position of the viewpoint).\\
+For example, if you set \verb| Setangle (70,40) |, then TH and FI are in that position. Since the slider is fixed, if you want to activate the slider again, comment it and re-execute it.\\
+If you want to decide only the initial state\\
+\verb| if (!Ptselected (), Setangle (70, 40))|;\\
+or\\
+\verb| if (!Isangle (), Setangle (70, 40));|\\
+ The slider becomes effective.
+
+If any point on the slider is selected, the figure button is also valid. Click anywhere on the screen and return to the original if you deselect the point selection state.
+
+\end{cmd}
+
+%------------ Getangle --------------------------------
+\begin{cmd}{Getangle}{getangle}
+\itemket{Usage}Getanlge()
+\itemket{Description}Acquire rotation angle
+\itemket{Details}Acquires the rotation angle (viewpoint position) TH and FI that can be set with the slider. This is the value displayed on the left side of the slider. The return value is the list [TH, FI], and the angle is expressed by the Degree measure. In addition, the internal variables are THETA and PHI, expressed in circular measure.
+\end{cmd}
+
+
+%------------Start3d--------------------------------
+\begin{cmd}{Start3d}{start3d}
+\itemket{Usage}Start3d(option)
+\itemket{Description}3d function to initialize limited variables.
+\itemket{Details}
+This funcition should be written at the beginning of Draw slot.\\
+The option is a list of geometric points which are not regarded as 3D points.
+\itemket{Example}\mbox{}\\
+If option is given a list of exclusion points, that point is not a point of space. (The position does not change even if moving the viewpoint with the slider)
+
+\verb|Start3d([A,B,C]);|\\
+\verb|Slider("A-C-B");| // A,C,B should not be 3D points.\end{cmd}
+
+%--------------Startsurf------------------------------
+\begin{cmd}{Startsurf}{startsurf}
+\itemket{Usage}Startsurf(options)
+\itemket{Description}Defines values related to surface rendering.
+\itemket{Details}Values are number to divide, size of C, limit of error.
+Omitted options selects [50,50],[1500,500,200],[0.01,0.1].\\
+Drawing of a curved surface with hidden line processing is performed in the following procedure.\\
+(1) Startsurf();\\
+(2) Making data wtih draw function.\\
+(3) Draws shapes in batch in C language using function ExeccmdC();.
+%\itemket{Examples} \mbox{}
+\end{cmd}
+
+%-------------Xyzax3data-------------------------------
+\begin{cmd}{Xyzax3data}{xyzax3data}
+
+\itemket{Usage} Xyzax3data(name, range of x, range of y, range of z, options)
+\itemket{Description}Generic function to draw the coordinate axis.
+\itemket{Details}Name can be null string.\\
+Options are the followings.\\
+"an": arrowhead, n is size.\\
+"Onesw": origin and its position.
+\itemket{Examples} \mbox{}
+
+\verb|Xyzax3data("","x=[-5,5]","y=[-5,5]","z=[-5,5]");|\\
+\verb|Xyzax3data("","x=[-5,5]","y=[-5,5]","z=[-5,5]","a");| //arrowhead\\
+\verb|Xyzax3data("","x=[-5,5]","y=[-5,5]","z=[-5,5]",["a2"]);| //big arrowhead\\
+\verb|Xyzax3data("","x=[-5,5]","y=[-5,5]","z=[-5,5]",["O"]);|\\
+\verb|Xyzax3data("","x=[-5,5]","y=[-5,5]","z=[-5,5]",["a","Oe2n2"]);| //set origin upper right
+
+\end{cmd}
+
+\newpage
+%================== 3D Drawing ===============
+
+\subsection{Command for Drawing}
+\subsubsection{Point and line}
+
+%--------------Drawpoint3d------------------------------
+
+\begin{cmd}{Drawpoint3d}{drawpoint3d}
+
+\itemket{Usage}Drawpoint3d(list of coordinates)
+\itemket{Description}Generic function to draw 3D-points.
+\itemket{Details}These points are not geometric point.
+To convert the geometric point, use \hyperlink{putpoint3d}{Putpoint3d()}.
+To output in the \TeX file, use \hyperlink{pointdata}{Pointdata()} or \hyperlink{drwpt}{Drawpoint()}.
+\itemket{Examples} \mbox{}
+
+\verb| Drawpoint3d([1,1,1]); |\\
+\verb| Drawpoint3d([[1,1,1],[0,1,0]]); |
+
+\itemket{Remark} \hyperlink{mkpttable}{Comparative chart of drawing of points}
+
+\end{cmd}
+
+%--------------Pointdata3d------------------------------
+\begin{cmd}{Pointdata3d}{pointdata3d}
+
+\itemket{Usage}Pointdata3d(name, point list, options)
+\itemket{Description}Generic function to generate data of the point list.
+\itemket{Details}Options are "Size=","Color=".
+\itemket{Examples} \verb|Pointdata3d("1",[[0,1,0],[1,1,2]],["Size=2","Color=red"]);|
+\end{cmd}
+%---------------Putpoint3d-----------------------------
+\begin{cmd}{Putpoint3d}{putpoint3d}
+
+\itemket{Usage}Putpoint3d(list of 3D-points, option)
+\itemket{Description}Generic function to draw the geometric point in the space.
+\itemket{Details}Option is "free" or "fix"(default).
+\itemket{Examples} \mbox{}
+
+\verb|Putpoint3d(["A",[2,1,3]]);|\\
+\verb|Putpoint3d(["A",[2,1,3]],"free");| \\
+\verb|Putpoint3d(["A",[1,1,1],"C",[1,0,1]]);|\\
+
+These points don't output in the \TeX file. To output in the \TeX file use the following \hyperlink{pointdata}{Pointdata()} or \hyperlink{drwpt}{Drawpoint()}
+
+In the 3D-drawings the coordinate of the point name A is A3d.
+
+\itemket{Remark} \hyperlink{mkpttable}{Comparative chart of drawing of points}
+
+\end{cmd}
+
+%-----------------Putaxes3d---------------------------
+\begin{cmd}{Putaxes3d}{putaxes3d}
+
+\itemket{Usage}Putaxes3d([x,y,z])
+\itemket{Description}Generic function to make the geometric points on the coordinate axis.
+\itemket{Details}For the argument [x,y,x] we get the four geometric points X(x,0,0), Y(0,y,0), Z(0,0,z) and O(0,0,0).
+\itemket{Examples} \mbox{}
+
+\verb|Putaxes3d([1,2,3]);|\\
+\verb|Putaxes3d(a);| //this equals to \verb|Putaxes3d([a,a,a]);|
+
+\end{cmd}
+
+%--------------PutonCurve3d------------------------------
+\begin{cmd}{PutonCurve3d}{putonCurve3d}
+
+\itemket{Usage} PutonCurve3d(name, PD)
+\itemket{Description}Generic function to make the geometric point on the 3D-curve.
+\itemket{Details}This point moves along the curve by mouse dragging.
+\itemket{Examples} \mbox{}
+
+Make reference to \hyperlink{partcrv3d}{Partcrv3d()}
+\end{cmd}
+%----------------Putonseg3d----------------------------
+\begin{cmd}{Putonseg3d}{putonseg3d}
+
+\itemket{Usage}Putonseg3d(name, point1, point2)
+\itemket{Description}Generic function to make the geometric point on the 3D-segment.
+\itemket{Details}We get the middle point between the two points. This point moves along the segment by mouse dragging.
+\itemket{Examples} \mbox{}
+
+\verb|Putonseg3d("C",A,B);| //Put C on the center of A and B.\\
+\verb|Putonseg3d("C",[A,B]);| //same as above
+\end{cmd}
+%--------------Spaceline------------------------------
+\begin{cmd}{Spaceline}{spaceline}
+
+\itemket{Usage} Spaceline(name, list)
+\itemket{Description}Generic function to draw the space polygonal lines.
+\itemket{Details}Options are line type: "dr" or "da" or "do".
+\itemket{Examples} \mbox{}
+
+\verb|Spaceline("1",[[2,5,1],[4,2,3]]);| //draw the line between two points\\
+\verb|Spaceline("2",[A,B,C,A]);| //draw the triangle ABC\\
+\verb|pt=[[2,0,0],[2,0,2],[2,2,2],[0,2,2],[0,4,2],[0,4,4]]; |\\
+\verb|Spaceline("1",pt); |\\
+\verb|Pointdata3d("1",pt,["Size=3"]);|
+
+\begin{center}
+\input{Fig/oresenex01}
+\end{center}
+\end{cmd}
+%-------------Spacecurve-------------------------------
+\begin{cmd}{Spacecurve}{spacecurve}
+
+\itemket{Usage}Spacecurve(name, formula, domain, options)
+\itemket{Description}Generic function to draw the space curve.
+\itemket{Examples} \mbox{}
+\verb|Spacecurve("1","[2*cos(t),2*sin(t),0.2*t]","t=[0,4*pi]",["Num=100"]);|\\
+option=["Num=100"]: division number of the interval "t=[0,4*pi]"
+ \begin{center} \input{Fig/rasen} \end{center}
+\end{cmd}
+
+%-------------Bezier3d}-------------------------------
+
+\begin{cmd}{Bezier3d}{bezier3d}
+
+\itemket{Usage}Bezier3d(name,list1,list2)
+\itemket{Description}Draw a Cubic B\'ezier curve.
+\itemket{Details}list1 is list of anchor points, and list2 is list of handle points
+\itemket{Examples} \mbox{}
+
+\verb|Bezier3d("1",["A","B","C"],["D","E","F","G"]);|
+
+\begin{center} \input{Fig/bezier3d1} \end{center}
+
+\end{cmd}
+
+%---------Mkbezierptcrv3d-----------------------------------
+\begin{cmd}{Mkbezierptcrv3d}{mkbezierptcrv3d}
+\itemket{Usage}Mkbezierptcrv3d(list)
+\itemket{Description}Draw a cubic B\'ezier curve from nodes.
+\itemket{Details}Arrange the control points automatically.
+After that, move the nodes and the control points and correct the cubic B\'ezier curve to what you want to draw. See the function {\tt \hyperlink{bezier}{Bezier3d}}.
+\itemket{Examples} \mbox{}
+
+\verb|Mkbezierptcrv3d(["A","B","C","D"]);|
+\end{cmd}
+%-------------Skeletonparadata-------------------------------
+\begin{cmd}{Skeletonparadata}{skeletonparadata}
+
+\itemket{Usage}Skeletonparadata(name, PDlist, PDlist, option)
+\itemket{Description}Generic function to draw the lines by performing hidden line processing.
+\itemket{Details}This function draw the second argument(the list of the lines) by performing hidden line processing which are hidden by the third argument(the list of the lines). If both arguments are omitted the function draw all lines by performing hidden line processing.
+
+Options:\\
+\hspace*{5mm}\verb|real number| gap of line\\
+\hspace*{5mm}\verb|"No=pointlist"| not executed when any point is selected\\
+\hspace*{5mm}\verb|"File=y/m/n(default:n)"| whether to make data file or not\\
+\hspace*{5mm}\verb|"Check=pointlist"| data file updated if any point is changed
+
+\itemket{Examples} \mbox{}
+
+\verb| Xyzax3data("","x=[-5,5]","y=[-5,4]","z=[-5,3]");| //Data name is "ax3d".\\
+\verb| Putpoint3d(["A",[0,-2,-2]]);|\\
+\verb| Putpoint3d(["B",[-1,1,3]]);|\\
+\verb| Spaceline([A,B]);| //Data name is "AB3d".\\
+\verb| Spacecurve("1","[2*cos(t),2*sin(t),0.2*t]","t=[0,4*pi]",["Num=100"]);| //Data name is "sc3d1".\\
+
+\verb|Skeletonparadata("1");| //(left figure)\\
+\verb|Skeletonparadata("1",[2]);| //option\verb|=[2]|: gap of lines\verb|=2| (center figure)\\
+\verb|Skeletonparadata("1",["AB3d","ax3d"],["sc3d1"]);| //(right figure)
+\begin{center} \input{Fig/skeletonparadata01} \input{Fig/skeletonparadata02}
+ \input{Fig/skeletonparadata03} \end{center}
+
+\end{cmd}
+
+%================== 3D polyhedron ===============
+\subsubsection{Polyhedron}
+
+ The description of polyhedron drawing will be explained by taking the case of tetrahedron as an example.
+
+The tetrahedron is composed of four sides. Letting the vertices be A, B, C, D, the four faces are
+
+\hspace{20mm}$\triangle\mathrm{ABC}$, $\triangle\mathrm{ABD}$, $\triangle\mathrm{ACD}$, $\triangle\mathrm{BCD}$
+
+\begin{center} \input{Fig/concatobj} \end{center}
+
+If numbers are given to the vertex list [A, B, C, D] in order from A, the vertex order of each face is [1, 2, 3], [1, 2, 4], [1, 3 , 4], [2, 3, 4].
+
+[A, B, C, D], [[1, 2, 3], [1, 2, 4], [1, 3, 4], [2 , 3, 4]]] is called "surface data". VertexEdgeFace () draws a polyhedron using this surface data.
+
+There are two kinds of hidden line processing of polyhedron. The first method is to treat polyhedron as a line drawing, and to process only the hidden part, using Skeletonparadata ().
+
+The other is to use Phparadata () as a way to draw a part hidden in the surface with a dotted line or hide it, considering it as a surface.
+
+\vspace{\baselineskip}
+%------------Concatobj--------------------------------
+
+\begin{cmd}{Concatobj}{concatobj}
+\itemket{Usage}Concatobj(list,options)
+\itemket{Description}Concatenates several objects.
+%\itemket{Details}
+\itemket{Examples} \mbox{}
+
+A tetrahedron by four vertecies A,B,C,D.\\
+The tetrahedron consists of four planes $\triangle\mathrm{ABC}$, $\triangle\mathrm{ABD}$, $\triangle\mathrm{ACD}$, $\triangle\mathrm{BCD}$.\\
+
+\verb| Putpoint3d("A",2*[0,0,sqrt(3)]); |\\
+\verb| Putpoint3d("B",2*[1,-1/sqrt(3),0]);|\\
+\verb| Putpoint3d("C",2*[0,sqrt(3)-1/sqrt(3),0]);|\\
+\verb| Putpoint3d("D",2*[-1,-1/sqrt(3),0]);|\\
+\verb| phd=Concatobj([[A,B,C],[A,B,D],[A,C,D],[B,C,D]]);|\\
+\verb| VertexEdgeFace("1",phd);|\\
+\verb| Skeletonparadata("1");|\\
+\verb| Letter3d([A3d,"ne","A",B3d,"sw","B",C3d,"se","C",D3d,"e","D"]);|\\
+
+\begin{center} \input{Fig/concatobj} \end{center}
+
+If you are drawing tetrahedrons without creating geometric points, you can do as follows.
+
+\verb| a=2*[-1,-1/sqrt(3),0];|\\
+\verb| b=2*[1,-1/sqrt(3),0];|\\
+\verb| c=2*[0,sqrt(3)-1/sqrt(3),0];|\\
+\verb| d=2*[0,0,sqrt(3)];|\\
+\verb| phd=Concatobj([[a,b,c],[a,b,d],[a,c,d],[b,c,d]]);|\\
+
+In the case of a convex polygon such as a tetrahedron, we can use CindyScript 's convexhull 3 d () function as follows. You can save time and effort by simply providing a vertex list instead of a surface list.
+
+\verb| a=2*[0,0,sqrt(3)];|\\
+\verb| b=2*[1,-1/sqrt(3),0];|\\
+\verb| c=2*[0,sqrt(3)-1/sqrt(3),0];|\\
+\verb| d=2*[-1,-1/sqrt(3),0];|\\
+\verb| phd=convexhull3d([a,b,c,d]);|\\
+
+\end{cmd}
+
+
+%-------------Vertexedgeface-------------------------------
+\begin{cmd}{Vertexedgeface}{vertexedgeface}
+
+\itemket{Usage} VertexEdgeFace(name, list, options)
+\itemket{Description}Generic function to draw the polyhedron.
+\itemket{Details}We use the faces data of the polyhedron.\\
+The second argument is the list of vertexes list and the faces list.\\
+For example, the faces data of the tetrahedron is [[A,B,C,D],[[1,2,3],[1,2,4],[1,3,4],[2,3,4]]].\\
+
+The generated data is as follows.
+
+phv3d: list of vertices
+
+phe3d: list of edges
+
+phf3d: Surface list
+
+Each name is appended to the end.
+
+\itemket{Examples} \mbox{}
+
+\verb| Putpoint3d("A",2*[-1,-1/sqrt(3),0]); |\\
+\verb| Putpoint3d("B",2*[1,-1/sqrt(3),0]); |\\
+\verb| Putpoint3d("C",2*[0,sqrt(3)-1/sqrt(3),0]); |\\
+\verb| Putpoint3d("D",2*[0,0,sqrt(3)]); |\\
+\verb| phd=[[A,B,C,D],[[1,2,3],[1,2,4],[1,3,4],[2,3,4]]];|\\
+\verb| VertexEdgeFace("1",phd); |\\
+ //Three data lists are made, phv3d1:vertex, phe3d1:edge and phf3d1:face.
+ \begin{center} \input{Fig/vertex01} \end{center}
+\end{cmd}
+
+%--------------Phparadata------------------------------
+\begin{cmd}{Phparadata}{phparadata}
+
+\itemket{Usage}Phparadata(name, name2, list of options)
+\itemket{Description}Generic function to draw the polyhedron by performing hidden line processing.
+\itemket{Details}Make polyhedral plot data with VertexEdgeFace (). For this plot data, hidden surfaces (sides) are hidden-line processed and displayed. The second argument name2 is the same as the name given by VertexEdgeFace (). The hidden line type is specified by the option "Hidden = line type". Hidden lines are not displayed by default setting.
+\itemket{Examples} \mbox{}
+
+To draw a tetrahedron,
+
+\begin{minipage}[t]{100mm}
+\verb| Putpoint3d("A",2*[-1,-1/sqrt(3),0]);|\\
+\verb| Putpoint3d("B",2*[1,-1/sqrt(3),0]);|\\
+\verb| Putpoint3d("C",2*[0,sqrt(3)-1/sqrt(3),0]);|\\
+\verb| Putpoint3d("D",2*[0,0,sqrt(3)]);|\\
+\verb| phd=Concatobj([[A,B,C],[A,B,D],[A,C,D],[B,C,D]]);|\\
+\verb| VertexEdgeFace("1",phd);|\\
+\verb| Phparadata("1","1",["Hidden=do"]);|\\
+\end{minipage}\hspace{5mm}%
+\begin{minipage}[t]{30mm}
+\mbox{}\vspace{-15mm}
+
+\input{Fig/phparadata04}
+\end{minipage}
+
+
+
+A tetrahedron is drawn by VertexEdgeFace (), but it is hidden by Phparadata (). Since it is correctly output if it is drawn with the figure button, it is good to execute Phparadata () after confirming it by displaying it on the screen before executing Phparadata ().
+
+\vspace{\baselineskip}
+Draw a truncated icosahedron of s06 (soccer ball type) using polyhedron data \verb|polyhedrons_obj| by Kobayashi, Suzuki, Mitani.
+
+\verb|Setdirectory( Dirhead+"/data/polyhedrons_obj");| //Many polyhedron data exist in this directory.\\
+\verb|phd=Readobj("s06.obj",["size=3"]);| //"s06" is the name of truncated icosahedron data.\\
+\verb|Setdirectory(Dirwork);| //Chage work space.\\
+\verb|VertexEdgeFace("s06",phd);|\\
+\verb|Phparadata("1","s06");| //default usage, left figure\\
+
+The last two lines we can write the following.\\
+\verb|VertexEdgeFace("1",phd);|\\
+\verb|Phparadata("1","1");|
+\begin{center}
+ \includegraphics[bb=0 0 726.04 365.02 , width=10cm]{Fig/phparadata01.pdf}
+\end{center}
+
+\verb|Phparadata("1","s06",["dr,2","Hidden=do"]);| //right figure
+ \begin{center} \input{Fig/phparadata02} \input{Fig/phparadata03} \end{center}
+\end{cmd}
+
+%--------------Nohiddenbyfaces------------------------------
+\begin{cmd}{Nohiddenbyfaces}{nohiddenbyfaces}
+
+\itemket{Usage}Nohiddenbyfaces(name,PD1,PD2,option1,option2)
+\itemket{Description}Generic function to draw hidden lines by the surfaces.
+\itemket{Details}PD1 are hidden lines, PD2 are surfaces.\\
+If we omit PD1 then all lines are processing objects.\\
+By default, hidden lines are drawn with dotted lines.\\
+Option1=line type of PD2 and option2=line type of hidden lines.\\
+If we specify only option2 then option1 must be null list:[].\\
+\itemket{Examples} \mbox{}
+
+\begin{verbatim}
+Xyzax3data("","x=[-5,5]","y=[-5,5]","z=[-5,4]");
+Putpoint3d("A",2*[-1,-1/sqrt(3),0]);
+Putpoint3d("B",2*[1,-1/sqrt(3),0]);
+Putpoint3d("C",2*[0,sqrt(3)-1/sqrt(3),0]);
+Putpoint3d("D",2*[0,0,2*sqrt(6)/3]);
+phd=Concatobj([[A,B,C],[A,B,D],[A,C,D],[B,C,D]]);
+VertexEdgeFace("1",phd);
+Nohiddenbyfaces("1","phf3d1");
+\end{verbatim}
+(left figure)
+
+\verb|Nohiddenbyfaces("1","phe3d1","phf3d1",["dr,2"],["da"]); |
+(right figure)
+
+\begin{center} \input{Fig/nohiddenbyfaces1} \input{Fig/nohiddenbyfaces2} \end{center}
+
+We draw hidden axes with broken line in the following example.\\
+\verb|Nohiddenbyfaces("1","ax3d","phf3d1",[],["da"]);|
+
+\end{cmd}
+%================== 3D Surface ===============
+\subsubsection{Surface}
+
+There are wire frame models and surface models for drawing curved surfaces. The wire frame model represents a curved surface with stitches, and the surface model draws its contour as a stitch-free surface.
+
+In KeTCindy, each drawing is done using the following function.
+\begin{tabbing}
+1234567890123456789012345678901234567890\=\kill
+Wire frame model without hidden wire \>Sf3data(name,form,options)\\
+Surface model\>Sfbdparadata(name,form,options)\\
+Hidden-line wireframe model \>Wireparadata(name,PD,form,n1,n2,options)
+\end{tabbing}
+
+However, in order to do hidden line processing, surface data is necessary, so after drawing with Sfbdparadata (), draw hidden lines with ireparadata ().
+
+Also, in the drawing of the surface model, it takes time to process the hidden line, so it is assumed to use the C language. Therefore, ExeccmdC () which draws using C language is used together.
+
+ \begin{center} \input{Fig/surfacemodelE} \end{center}
+
+The form of the argument is an equation and a list of character strings for the domain of the variable. There are three patterns of equations as follows.
+
+\vspace{\baselineskip}
+(1) $z=f(x,y)$
+
+ \hspace{5mm} 【Example】formula : $z=x^2-y^2$
+
+ \hspace{15mm} range : $x=(-2,2) , y=(-2,2)$
+
+(2) $z=f(x,y),x=g(r,t),y=h(r,t)$
+
+ \hspace{5mm} 【Example】formula : $z=4-(x^2+y^2) , x=r\cos t , y=r\sin t$
+
+\hspace{15mm} range : $r=(0,2) , t=(0,2\pi)$
+
+(3) $x=f(u,v),y=g(u,v),z=h(u,v),$
+
+\hspace{5mm} 【Example】formula : $x=2\sin u \cos v , y=2\sin u \sin v , z=2\cos u $
+
+\hspace{15mm} range : $u=(0,\pi) , v=(0,2\pi)$
+
+\vspace{\baselineskip}
+
+Here, (2) and (3) are parametric types, each consisting of expressions of $ x, y, z $ and two domain of parametric variables. Since it is indistinguishable as it is, when giving it as an argument, "p" is added to the type of (3) as the identification character at the beginning.
+
+Regarding the domain of definition, there are cases where it is taken in the open section and in the closed section. The distinction is indicated by "ewsn" as boundary designation (both are closed segments). I think the meaning of "ewsn" as follows.
+
+\vspace{\baselineskip}
+For variable $u,v$ , $a \leq u \leq b,c \leq v \leq d$
+
+ \begin{center} \input{Fig/ewsn} \end{center}
+
+This boundary designation is added at the end, but it can be omitted, and if omitted, it is the initial value "ewsn" (closed interval).
+
+To make both open segments, add "". However, do not perform hidden line processing
+Sf3data () draws a line also on the boundary, so you can omit this specification.
+
+\vspace{\baselineskip}
+\verb|fd=["p","x=r*cos(t)","y=r*sin(t)","z=2*(2-r)","r=[1,2]","t=[0,2*pi]","ew"]|
+
+\vspace{\baselineskip}
+If this is "e", $ 1 <r \leq 2 $ is obtained, and the top face is not displayed.
+
+Also, if this is set to "w", $ 1 \leq r <2 $ and the bottom is not displayed.
+
+Furthermore, if you specify "ewn" or "ews" or abbreviate the initial value "ewsn", it will contain either the left or right value of $ t = (0, 2 \ pi) $, A border appears.
+
+\vspace{\baselineskip}
+\hspace{12mm}"ew" \hspace{25mm}"e" \hspace{25mm}"w" \hspace{25mm}"ewn"
+
+\input{Fig/frustumew} \input{Fig/frustume} \input{Fig/frustumw} \input{Fig/frustumewn}
+
+%--------------Sf3data------------------------------
+\begin{cmd}{Sf3data}{sf3data}
+
+\itemket{Usage}Sf3data(name, list, list of options)
+\itemket{Description}Generic function to draw the wire frame model of the surface.
+\itemket{Details}Second argument is the list of equations and ranges. \\
+Options are the followings.\\
+"Num=[a,b]": x- and y-division number, default(or initial values) are a=b=25.\\
+"Wire=[a,b]": x- and y-wire number, default(or initial values) are a=b=20.\\
+"ewsn": From east to south, this indicates the boundary.
+\itemket{Examples} \mbox{}
+
+\verb|Sf3data("1",["z=x^2-y^2","x=[-2,2]","y=[-2,2]"]);|\\
+\ \ //This is the first expression of the equation for the surface. Second argument is the list of equation, x-range and y-range.
+\begin{center} \input{Fig/saddle1} \end{center}
+
+\verb|fd=["z=4-(x^2+y^2)","x=R*cos(T)","y=R*sin(T)","R=[0,2]","T=[0,2*pi]"];|\\
+\verb|Sf3data("1",fd);| //fd is the second argument.\\
+(left figure)\\
+
+\verb|fd=["z=sin(sqrt(abs(x^2+y^2)))","x=r*cos(t)","y=r*sin(t)",|\\
+\verb|"r=[0,3]","t=[0,2*pi]"];|\\
+\verb|Sf3data("1",fd);|\\
+(right figure)
+\begin{center} \input{Fig/parabola} \input{Fig/sf3ddata3} \end{center}
+
+\verb|fd=["p","x=2*sin(u)*cos(v)","y=2*sin(u)*sin(v)","z=2*cos(u)",|\\
+\verb|"u=[0,pi]","v=[0,2*pi]"];| //"p" indicates the 3D-parameter expression.\\
+\verb|Sf3data("1",fd);|
+\begin{center} \input{Fig/sf3ddata4} \end{center}
+
+\end{cmd}
+
+%-------------Sfbdparadata-------------------------------
+\begin{cmd}{Sfbdparadata}{sfbdparadata}
+
+\itemket{Usage}Sfbdparadata(name, list, list of options)
+\itemket{Description}Generic function to make the surface by performing hidden line processing.
+\itemket{Details}Second argument is the list of equations and ranges same as the function "Sf3data". \\
+options1=no option or " "(space) or "r" or "m" and "Wait=integer". Default value of Wait is 20.\\
+No option or " "(space) means\\
+(1) If there exist no deta then it make a new data file.\\
+(2) If there exist deta then it read the data file.\\
+"m" means that it remake the new data file.\\
+"r" means that it reread the existing data file.\\
+
+option2="nodisp" or line type of hidden line. Default is "nodisp".
+
+If we specify only option2 then we denote that option1 is empty list:[].
+
+\end{cmd}
+
+%--------------ExeccmdC------------------------------
+\begin{cmd}{ExeccmdC}{execcmdc}
+
+\itemket{Usage}ExeccmdC(name,options1,options2)
+\itemket{Description}Generic function to draw 3D-surface. The return value is the list of processed plot data.
+\itemket{Details}options1=no option or " "(space) or "r" or "m" and "Wait=integer" , line type. Default value of Wait is 20.\\
+No option or " "(space) means\\
+(1) If there exist no deta then it make a new data file.\\
+(2) If there exist deta then it read the data file.\\
+"m" means that it remake the new data file.\\
+"r" means that it reread the existing data file.\\
+
+option2="nodisp" or line type of hidden line. Default is "do".\\
+
+If we specify only option2 then we denote that option1 is empty list:[].
+\itemket{Examples} \mbox{}
+
+
+Hidden lines are not shown or shown.
+
+\verb| fd=["z=x^2-y^2","x=[-2,2]","y=[-2,2]"];|\\
+\verb| if(Isangle(),|\\
+\verb| Sf3data("1",fd);|\\
+\verb| ,|\\
+\verb| Startsurf();|\\
+\verb| Sfbdparadata("1",fd,[],["nodisp"); // Change "nodisp" to "do"|\\
+\verb| ExeccmdC("1"]);|\\
+\verb| );|
+
+\begin{center}
+\input{Fig/sfbdpara01}\hspace{10mm}%
+\input{Fig/sfbdpara02}
+\end{center}
+
+
+Make the whole thick with a solid line and
+
+ display the hidden line with a dotted line (Default).
+
+\verb| ExeccmdC("1",["dr,2"]);|
+
+\vspace{10mm}
+
+Paraboloid
+
+\verb| fd=["z=4-(x^2+y^2)","x=R*cos(T)","y=R*sin(T)","R=[0,2]","T=[0,2*pi]","e"];|\\
+
+Delete hidden line ( left figure):\verb|ExeccmdC("1",[],["nodisp"]);|
+
+Hidden lines are indicated by broken lines ( right figure ):\verb|ExeccmdC("1",[],["da"]);|
+
+ \begin{center} \input{Fig/sfbdpara03} \input{Fig/sfbdpara04} \end{center}
+
+When displaying two curved surfaces, name of Sfbdparadata () is set to "1" and "2", but it can be displayed together as \verb | ExeccmdC ("1") |.
+
+\verb| fd=[|\\
+\verb| "p",|\\
+\verb| "x=r*cos(t)","y=r*sin(t)","z=2*(2-r)",|\\
+\verb| "r=[1,2]","t=[0,2*pi]","ew"|\\
+\verb| ];|\\
+\verb| fd2=[|\\
+\verb| "p",|\\
+\verb| "x=r*cos(t)-3","y=r*sin(t)+3","z=2*(2-r)",|\\
+\verb| "r=[0,2]","t=[0,2*pi]","ew"|\\
+\verb| ];|\\
+\verb| if(!ptselected(),|\\
+\verb| Startsurf(); |\\
+\verb| Sfbdparadata("1",fd);|\\
+\verb| Sfbdparadata("2",fd2);|\\
+\verb| ExeccmdC("1");|\\
+\verb| );|\\
+
+\begin{center} \input{Fig/sfbdpara05} \end{center}
+
+\vspace{\baselineskip}
+\verb|fd=["p","x=(2+cos(u))*cos(v)","y=(2+cos(u))*sin(v)","z=sin(u)",|\\
+\verb| "u=[0,2*pi]","v=[0,2*pi]","s"];|\\
+\verb| if(Ptselected(),|\\
+\verb| Sf3data("1",fd);|\\
+\verb| ,|\\
+\verb| Startsurf();|\\
+\verb| Sfbdparadata("1",fd);|\\
+\verb| Wireparadata("1","sfbd3d1",fd,12,12,[],["nodisp"]);|\\
+\verb| ExeccmdC("1",[],["nodisp"]);|\\
+\verb| );|\\
+
+\begin{center} \input{Fig/wirepara5} \end{center}
+
+\end{cmd}
+%-------------Wireparadata-------------------------------
+\begin{cmd}{Wireparadata}{wireparadata}
+
+\itemket{Usage} Wireparadata(name, PD, formula, integer, integer, options)
+\itemket{Description}Generic function to draw the surface by wire frame data with performing hidden line processing.
+\itemket{Details}The second argument PD is the surface data made by Sfbdparadata function.\\
+options=no option or " "(space) or "r" or "m" and "Wait=integer". Default value of Wait is 30.\\
+No option or " "(space) means\\
+(1) If there exist no deta then it make a new data file.\\
+(2) If there exist deta then it read the data file.\\
+"m" means that it remake the new data file.\\
+"r" means that it reread the existing data file.\\
+
+\itemket{Examples} \mbox{}
+
+\verb|fd=["z=x^2-y^2","x=[-2,2]","y=[-2,2]"]; |\\
+\verb|if(Isangle(), |\\
+\verb| Sf3data("1",fd); |\\
+\verb| , |\\
+\verb| Startsurf(); |\\
+\verb| Sfbdparadata("1",fd); | //We get the data named as "sfbd3d1".\\
+\verb| Wireparadata("1","sfbd3d1",fd,4,5,[""]); | //number of wires are 4 and 5.\\
+\verb| ExeccmdC("1"); | //draw the wires\\
+\verb|); |
+
+\begin{center}
+\input{Fig/wirepara1}
+\end{center}
+
+Change the following code.
+
+\verb|fd=["z=4-(x^2+y^2)","x=r*cos(t)","y=r*sin(t)","r=[0,2]","t=[0,2*pi]","e"];|\\
+\verb|Wireparadata("1","sfbd3d1",fd,5,7,[""]);|
+
+\begin{center}
+\input{Fig/wirepara2}
+\end{center}
+
+\verb| fd=["p","x=2*sin(u)*cos(v)","y=2*sin(u)*sin(v)","z=2*cos(u)","u=[0,pi]", |\\
+\verb| "v=[0,2*pi]","s"]; |\\
+\verb| if(Ptselected(),|\\
+\verb| Sf3data("1",fd);|\\
+\verb| ,|\\
+\verb| Startsurf();|\\
+\verb| Sfbdparadata("1",fd);|\\
+\verb| Wireparadata("1","sfbd3d1",fd,12,12);|\\
+\verb| ExeccmdC("1");|\\
+\verb| );|\\
+
+\begin{center}
+\input{Fig/wirepara3}
+\end{center}
+
+\verb|fd=["p","x=2*sin(u)*cos(v)","y=2*sin(u)*sin(v)","z=2*cos(u)","u=[0,pi]",|\\
+\verb| "v=[0,2*pi]","s"];|\\
+\verb|if(Isangle(),|\\
+\verb| Sf3data("1",fd);|\\
+\verb| ,|\\
+\verb| Startsurf();|\\
+\verb| Sfbdparadata("1",fd);|\\
+\verb| Wireparadata("1","sfbd3d1",fd,12,12,[""]);|\\
+\verb| Crvsfparadata("1","ax3d","sfbd3d1",fd);|\\
+\verb| ret=ExeccmdC("1");|\\
+\verb| forall(1..length(ret),|\\
+\verb| if(indexof(ret_#,"wireh")>0,|\\
+\verb| Changestyle3d([ret_#],["nodisp"]);|\\
+\verb| );|\\
+\verb| );|\\
+\verb|);|
+
+\begin{center}
+\input{Fig/wirepara4}
+\end{center}
+
+\end{cmd}
+%-------------Crvsfparadata-------------------------------
+
+\begin{cmd}{Crvsfparadata}{crvsfparadata}
+\itemket{Usage}Crvsfparadata(name,PD1,PD2,formula)
+\itemket{Description}Remove curves hidden by curved face.
+%\itemket{Details}
+\itemket{Examples} \mbox{}
+
+left figure
+
+\verb| Xyzax3data("","x=[-5,5]","y=[-5,5]","z=[-5,5]"); |\\
+\verb| Putpoint3d(["A",[0,-3,0],"B",[0,3,3]]); |\\
+\verb| Spaceline([A,B]); |\\
+\verb| fd=["z=4-(x^2+y^2)","x=R*cos(T)","y=R*sin(T)","R=[0,2]","T=[0,2*pi]","e"]; |\\
+\verb| Startsurf(); |\\
+\verb| Sfbdparadata("1",fd); |\\
+\verb| Crvsfparadata("1","AB3d","sfbd3d1",fd); |\\
+\verb| Crvsfparadata("2","ax3d","sfbd3d1",fd); |\\
+\verb| ExeccmdC("1"); |
+
+right figure
+
+\verb| ExeccmdC("1",[],["nodisp"]);|
+
+\hspace{20mm}\input{Fig/crvsfparadata2} \hspace{20mm} \input{Fig/crvsfparadata1}
+
+By using the return value, you can change the hidden line style (line style, color).
+The same as the return value is displayed as "readoutdata from template3D1.txt:" on the console, so you can decide the operation target by looking at it. For example, in the left diagram above, the hidden line of line AB is the fourth crvsfh3d1 in the list, so you can make it a red dashed line as follows.
+
+\verb| ret=ExeccmdC("1");|\\
+\verb| Changestyle3d(ret_4,["da","Color=red"]);|\\
+
+\hspace{20mm} \input{Fig/execcmdc1}
+
+\end{cmd}
+
+%================== 3D Using Plot data ===============
+\subsection{Using Plot data}
+
+%--------------Datalist2d------------------------------
+
+\begin{cmd}{Datalist2d}{datalist2d}
+
+\itemket{Usage}Datalist2d()
+\itemket{Description} Generic function to get a list of 2D-plotting data on the screen.
+\itemket{Examples} \mbox{}
+
+We execute the following program then the computer will display "PD=[ax2d,AB2d]" on the console.\\
+
+\verb| Xyzax3data("","x=[-5,5]","y=[-5,5]","z=[-5,5]"); |\\
+\verb| Putpoint3d(["A",[0,-3,0],"B",[0,3,3]]); |\\
+\verb| Spaceline("1",[A,B]); |\\
+\verb| println("PD="+Datalist2d());|
+
+\end{cmd}
+%--------------Datalist3d------------------------------
+
+\begin{cmd}{Datalist3d}{datalist3d}
+
+\itemket{Usage}Datalist3d()
+\itemket{Details}Generic function to get a list of 3D-plotting data.
+\itemket{Examples} \mbox{}
+
+We execute the following program then the computer will display "PD=[ax3d,AB3d]" on the console.\\
+
+\verb| Xyzax3data("","x=[-5,5]","y=[-5,5]","z=[-5,5]"); |\\
+\verb| Putpoint3d(["A",[0,-3,0],"B",[0,3,3]]); |\\
+\verb| Spaceline("1",[A,B]); |\\
+\verb| println("PD="+Datalist3d()); |
+
+\end{cmd}
+
+
+%----------Changestyle3d----------------------------------
+
+\begin{cmd}{Changestyle3d}{changestyle3d}
+\itemket{Usage} Changestyle3d(PD,option)
+\itemket{Description}Change the attribute of PD.
+\itemket{Details}Change the attribute of PD to one with option specification. PD is a plotting data or a list of plotting data.
+\itemket{Examples} \mbox{}
+
+Make a tetrahedron by four points of space.\\
+\verb|Spaceline("1",[A,B]);|\\
+\verb|Spaceline("2",[A,C]);|\\
+\verb|Spaceline("3",[B,C]);|\\
+\verb|Spaceline("4",[A,D]);|\\
+\verb|Spaceline("5",[B,D]);|\\
+\verb|Spaceline("6",[C,D]);|\\
+then\\
+\verb|Changestyle3d("sl3d1",["dr,3"]);| // one edge become thick.\\
+or\\
+\verb|edges=apply(1..6,"sl3d"+text(#));|\\
+\verb|Changestyle3d(edges,["notex"]);| // all edges become ``notex".\\
+\end{cmd}
+
+%------------Intersectcrvsf--------------------------------
+
+\begin{cmd}{Intersectcrvsf}{intersectcrvsf}
+\itemket{Usage}Intersectcrvsf(name,PD,formula)
+\itemket{Description}Returns a list of intersects of a curve and curved face.
+\itemket{Details}PD is plotting data of curve. Curved face is given by formula.
+\itemket{Examples} \mbox{}
+
+\verb|Putpoint3d(["A",[0,-3,0],"B",[0,3,2]]);|\\
+\verb|Spaceline("1",[A,B]);|\\
+\verb|fd=[|\\
+\verb| "z=4-(x^2+y^2)","x=R*cos(T)","y=R*sin(T)",|\\
+\verb| "R=[0,2]","T=[0,2*pi]","e"|\\
+\verb|];|\\
+\verb|Startsurf();|\\
+\verb|Sfbdparadata("1",fd);|\\
+\verb|Intersectcrvsf("1","sl3d1",fd);|// The result [[0,1.57,1.52],[0,-1.91,0.36]] will be shown in the console.\\
+\verb|ExeccmdC("1",[""]);|\\
+\verb|println("Intersect="+intercrvsf1);|\\
+\verb|Drawpoint3d(intercrvsf1); |\\
+\verb|Letter(Parapt(intercrvsf1_1),"ne","P1");|\\
+\verb|Letter(Parapt(intercrvsf1_2),"ne","P2");|\\
+
+\hspace{30mm}\includegraphics[bb=0.00 0.00 325.55 292.54,width=8cm]{Fig/Intersectcurvsf.pdf}
+\end{cmd}
+
+%-------------IntersectsgpL-------------------------------
+
+\begin{cmd}{IntersectsgpL}{intersectsgpL}
+\itemket{Usage}IntersectsgpL(name,segment,plane,option)
+\itemket{Description}Returns a intersection of a line segment and plane.
+\itemket{Details}Specify a line segment with two endpoints. Specify the plane as three points that it contains. Options are "put" or "I" or "e" .\\
+
+\hspace{10mm} put : Create geometric points
+
+\hspace{10mm} i : Draw a point if it is within a line segment
+
+\hspace{10mm} e : Draw a point if you meet on the plane
+
+\vspace{\baselineskip}
+Following two programs return the same result.\\
+\verb| IntersectsgpL("P","A-B","C-D-E"); |\\
+\verb| IntersectsgpL("P",[A3d,B3d],[C3d,D3d,E3d]); |
+
+\vspace{\baselineskip}
+Return value is [pt,flag1,flag2,val1,val2]
+
+pt : The coordinates of the intersection of the straight line and the plane. If the straight line and the plane are parallel and the intersection does not exist, the empty list [].
+
+flag1 : True if the intersection is within the line segment, false otherwise
+
+flag2 : True if intersection is in plane, false otherwise
+
+val1,val2 :Parameter values for line segments, parameter values for planes
+
+% \verb|IntersectsgpL("P",[p1,p2],[p3,p4,p5],"draw");|
+\itemket{Examples} \mbox{}
+
+Presence or absence of intersection and return value.
+
+The return value of \verb | flag 1, flag 2 | when changing \verb | p2 | with the following script
+
+\verb| p1=[1,-1,0];|\\
+\verb| p2=[0,0,1/2];|\\
+\verb| p3=[0,1,0];|\\
+\verb| p4=[-1,0,0];|\\
+\verb| p5=[0,0,1];|\\
+\verb| Spaceline("1",[p1,p2]);|\\
+\verb| Spaceline("2",[p3,p4,p5,p3]);|\\
+\verb| ret=IntersectsgpL("P",[p1,p2],[p3,p4,p5],"put");|\\
+\verb| println("flag1="+ret_2+": flag2="+ret_3);|
+
+\verb| p2=[0,0,1/2]; p2=[-1,1,1];|\\
+\verb| flag1=false : flag2=true flag1=true : flag2=true |\\
+
+
+\hspace*{20mm}
+\begin{minipage}{60mm}
+\input{Fig/wire01}
+\end{minipage}\hspace{10mm}%
+\begin{minipage}{60mm}
+\input{Fig/wire02}
+\end{minipage}
+
+\verb| p2=[1,2,1]; p2=[1,0,1/2];|\\
+\verb| flag1=true : flag2=false   flag1=false : flag2=false |
+
+\hspace*{20mm}
+\begin{minipage}{60mm}
+\input{Fig/wire03}
+\end{minipage}\hspace{10mm}%
+\begin{minipage}{60mm}
+\input{Fig/wire04}
+\end{minipage}
+
+{\bf Cutcube}
+
+\verb| Hn=3; |\\
+\verb| Putaxes3d(Hn); |\\
+\verb| Putpoint3d("A",[Hn,Hn,0]); |\\
+\verb| Putpoint3d("B",[Hn,0,Hn]); |\\
+\verb| Putpoint3d("C",[Hn,Hn,Hn]); |\\
+\verb| Putpoint3d("D",[0,Hn,Hn]); |\\
+\verb| Putonseg3d("E",X,B); |\\
+\verb| Putonseg3d("F",Z,B); |\\
+\verb| Putonseg3d("G",Z,D); |\\
+\verb| IntersectsgpL("M","A-C","E-F-G","put"); |\\
+\verb| IntersectsgpL("N","D-Y","E-F-G","put"); |\\
+\verb| phd=Concatobj([[O,X,A,Y],[X,A,M,E],[A,Y,N,M],[Y,N,G,Z,O], |\\
+\verb| [O,Z,F,E,X],[Z,F,G],[E,M,N,G,F]]); |\\
+\verb| VertexEdgeFace("1",phd); |\\
+\verb| Nohiddenbyfaces("1","phf3d1"); |
+
+\hspace{20mm}\includegraphics[bb=0.00 0.00 713.04 327.02,width=10cm]{Fig/IntersectsgpL0.pdf}
+
+add next script (right figure)
+
+\verb| Spaceline("1",[E,B,F],["do"]); |\\
+\verb| Spaceline("2",[B,C,M],["do"]); |\\
+\verb| Spaceline("3",[C,D,N],["do"]); |\\
+\verb| Spaceline("4",[D,G],["do"]); |\\
+
+\begin{center} \input{Fig/IntersectsgpL1} \input{Fig/IntersectsgpL2} \end{center}
+
+\end{cmd}
+%-------------Sfcutparadatacdy-------------------------------
+
+\begin{cmd}{Sfcutparadatacdy}{sfcutparadatacdy}
+\itemket{Usage}Sfcutparadatacdy(name,string,list,options)
+\itemket{Description}Obtain a line of intersection between a plane and a curved surface.
+\itemket{Details}string is equation of plane, list is equation of a surface.
+\itemket{Examples} \mbox{}
+Cross section of cone.
+
+\verb|fd=[|\\
+\verb| "p",|\\
+\verb| "x=r*cos(t)","y=r*sin(t)","z=2*(2-r)",|\\
+\verb| "r=[0,2]","t=[0,2*pi]","e"|\\
+\verb|];|\\
+\verb|Startsurf(); |\\
+\verb|Sfbdparadata("1",fd);|\\
+\verb|Sfcutparadatacdy("1","y+2*z=3",fd);|\\
+\verb|ExeccmdC("1");|
+
+\begin{center}
+\input{Fig/sfcut}
+\end{center}
+
+\end{cmd}
+%--------------Partcrv3d------------------------------
+\begin{cmd}{Partcrv3d}{partcrv3d}
+
+\itemket{Usage}Partcrv3d(name, start point, end point, PD)
+\itemket{Description}Generic function to draw the part curve of the curve PD.
+\itemket{Examples} \mbox{}
+
+\verb| Xyzax3data("","x=[-5,5]","y=[-5,5]","z=[-5,4]"); |\\
+\verb| Spacecurve("1","[2*cos(t),2*sin(t),0.2*t]","t=[0,4*pi]",["Num=100"]); |\\
+\verb| PutonCurve3d("C","sc3d1"); |\\
+\verb| PutonCurve3d("D","sc3d1"); |\\
+\verb| Partcrv3d("1",C,D,"sc3d1",["dr,3"]); |\\
+\verb| Letter([C,"n2","C",D,"n2","D"]); |\\
+
+\begin{center} \input{Fig/partcrv3d1} \end{center}
+
+\verb|Spacecurve("1","[2*cos(t),2*sin(t),0.2*t]","t=[0,4*pi]",["Num=10","do"]);|\\
+\verb|Partcrv3d("1",3.3,8.5,"sc3d1");| // 3.3 and 8.5 are plotting data number of the points.
+\begin{center} \input{Fig/partcrv3d2} \end{center}
+
+\end{cmd}
+
+
+%---------------Reflectdata3d-----------------------------
+\begin{cmd}{Reflectdata3d}{reflectdata3d}
+
+\itemket{Usage}Reflectdata3d(name, list of PD, list, options)
+\itemket{Description}Generic function to draw the reflection of plotting data.
+%\itemket{Details}
+\itemket{Examples}\mbox{}
+
+\verb| Putpoint3d(["A",[0,-2,0],"B",[2,-2,0],"C",[1,-2,2],"D",[1,0,1], |\\
+\verb| "E",[1,0,0]]); |\\
+\verb| Spaceline("1",[A,B,C,A]); |\\
+
+Reflection on the point D
+
+\verb| Reflectdata3d("1",["sl3d1"],[D3d],["Color=blue","dr,2"]);|\\
+
+\begin{center}\input{Fig/reflectdata3d01}\end{center}
+
+Reflection on the straight line DE
+
+\verb| Reflectdata3d("1",["sl3d1"],[D3d,E3d],["Color=blue","dr,2"]);|\\
+
+\begin{center}\input{Fig/reflectdata3d02}\end{center}
+
+Reflection on the plane BDE
+
+\verb| Reflectdata3d("1",["sl3d1"],[D3d,E3d,B3d],["Color=blue","dr,2"]);|\\
+
+\begin{center}\input{Fig/reflectdata3d03}\end{center}
+
+\end{cmd}
+
+%---------------Reflectpoint3d-----------------------------
+\begin{cmd}{Reflectpoint3d}{reflectpoint3d}
+
+\itemket{Usage}Reflectpoint3d(coordinate,list)
+\itemket{Description}Return the coordinate of the reflect point.
+\itemket{Details}Argument "list" is the list of 3D-coordinate of the points. The following examples are the details.
+\itemket{Examples} \mbox{}
+
+\verb|Reflectpoint3d(A3d,[B3d]); | // reflection of the point A on the point B\\
+\verb|Reflectpoint3d(A3d,[B3d,C3d]); | // reflection of the point A on the line BC\\
+\verb|Reflectpoint3d(A3d,[B3d,C3d,D3d]);| // reflection of the point A on the plane BCD
+\end{cmd}
+
+%---------------Rotatedata3d-----------------------------
+\begin{cmd}{Rotatedata3d}{rotatedata3d}
+
+\itemket{Usage}Rotatedata3d(name, list of PD, vec, angle, options)
+\itemket{Description}Generic function to rotate plotting data around the vector vec starting from the origin.
+\itemket{Details}The options are the center point (the starting point of vec) and so on.
+\itemket{Examples} \mbox{}
+
+\verb|Xyzax3data("","x=[-5,4]","y=[-5,5]","z=[-5,4]",["a","O"]); |\\
+\verb|Putpoint3d(["A",[0,-2,0],"B",[2,-2,0],"C",[1,-2,2],"D",[1,-2,3]]); |\\
+\verb|Spaceline("1",[A,B,C,A]); |\\
+\verb|Spaceline("2",[C,D]); |\\
+\verb|Rotatedata3d("1",["sl3d1","CD3d"],[0,0,1],pi/2,["dr,2"]); |\\
+\verb|Letter([A,"s","A",B,"w","B",C,"ne","C",D,"ne","D"]); |
+
+\begin{center}
+\input{Fig/rotatedata3d01}
+\end{center}
+
+\verb|Rotatedata3d("1",["sl3d1","CD3d"],[0,0,1],pi/2,[[1,0,0],"dr,2"]);|\\
+\begin{center}
+\input{Fig/rotatedata3d02}
+\end{center}
+
+\end{cmd}
+
+%--------------Rotatepoint3d------------------------------
+\begin{cmd}{Rotatepoint3d}{rotatepoint3d}
+
+\itemket{Usage}Rotatepoint3d(coordinate,vec,angle,center)
+\itemket{Description}Return the coordinate of the rotate point.
+\itemket{Details}"vec"(3D-vector) represents the axis of rotation and "center" means the start point of 3D-vector. Default value of center is the origin (of the coordinate axes).
+\itemket{Examples} \mbox{}
+
+\verb| Putpoint3d("A",[0,-1,0]);| \\
+\verb| Rotatepoint3d(A3d,[0,0,1],pi/2); | // return value is [1,0,0].\\
+\verb| Rotatepoint3d(A3d,[0,0,1],pi/2,[1,1,1]);| // return value is [3,0,0].
+
+\end{cmd}
+
+%---------Scaledata3d-----------------------------------
+\begin{cmd}{Scaledata3d}{scaledata3d}
+
+\itemket{Usage}Scaledata3d(name, list of PD, vec, [options])
+\itemket{Description}Generic function to scale plotting data.
+\itemket{Details}Vec is a three-dimensional vector to express ratio. The center and options are given in a list.
+\itemket{Examples}\mbox{}
+
+\verb|Putpoint3d(["A",[0,-2,0],"B",[2,-2,0],"C",[1,-2,2]]);|\\
+\verb|Spaceline("1",[A,B,C,A]);|\\
+\verb|Spacecurve("1","[cos(t)+1,sin(t)+1,1]","t=[0,2*pi]",["Num=100"]);|\\
+\verb|Scaledata3d("1",["sl3d1","sc3d1"],[2,2,2],[[0,0,0],"dr,2"]);|\\
+
+\begin{center}
+\input{Fig/scaledata3d}
+\end{center}
+\end{cmd}
+
+%--------------Scalepoint3d------------------------------
+\begin{cmd}{Scalepoint3d}{scalepoint3d}
+
+\itemket{Usage}Scalepoint3d(point,vector,center)
+\itemket{Description}Execute scale transformation for the coordinate of the point.
+\itemket{Details}$\text{Scalepoint3d}([a_i],[v_i],[c_i])=[(a_i-c_i)v_i+c_i]$
+\itemket{Examples} \mbox{}
+
+\verb|Putpoint3d(["A",[2,-1,2]]);|\\
+\verb|pt=Scalepoint3d(A3d,[3,2,4],[1,1,1]); //pt=[4,-3,5]|\\
+\verb|Putpoint3d(["B",pt]);|
+
+\end{cmd}
+
+%---------------Translatedata3d-----------------------------
+\begin{cmd}{Translatedata3d}{translatedata3d}
+
+\itemket{Usage}Translatedata3d(name, PD, vector)
+\itemket{Description}Generic function to translate plotting data.
+%\itemket{Details}
+\itemket{Examples} \mbox{}
+
+The curve sc3d1 is translated by 2 in the y axis direction.
+As a result, two curves parallel to the original curves are drawn.
+
+\verb|Translatedata3d("1",["sc3d1"],[0,2,0]);|\\
+
+Since polygons drawn with VertexEdgeFace() can not be translated by this function, parallel movement is performed by directly manipulating the surface data. For example, to draw a regular octahedron using the polyhedron data obj of Kobayashi, Suzuki, and Mitani, do the following. This is the case of parallel movement by 2 in the y axis direction.
+
+\verb|Setdirectory( Dirhead+"/data/polyhedrons_obj"); |\\
+\verb|phd=Readobj("r02.obj",["size=2"]); |\\
+\verb|Setdirectory(Dirwork); |\\
+\verb|dn=length(phd_1); |\\
+\verb|repeat(dn,s,phd_1_s=phd_1_s+[0,2,0]); |\\
+\verb|VertexEdgeFace("1",phd); |\\
+
+\begin{center}
+\input{Fig/translate01}
+\end{center}
+
+\end{cmd}
+%-------------Translatepoint3d-------------------------------
+\begin{cmd}{Translatepoint3d}{translatepoint3d}
+
+\itemket{Usage}Translatepoint3d(coordinate,vector)
+\itemket{Description}Return the translated coordinate for the point.
+\itemket{Details}$\text{Translatepoint3d}([a_i],[v_i])=[a_i+v_i]$
+\itemket{Examples} \mbox{}
+
+\verb|Putpoint3d(["A",[1,0,0]]); |\\
+\verb|pt=Translatepoint3d(A3d,[-1,1,1]); |\\
+\verb|Putpoint3d(["B",pt]); |
+
+\end{cmd}
+% Others ==================================
+\subsection{Others}
+%--------------Perpplane------------------------------
+\begin{cmd}{Perpplane}{perpplane}
+
+\itemket{Usage}Perpplane(name, point, vector, option)
+\itemket{Description}Generic function to return the two points on the plane which is passing through the point and orthogonal to the vector.
+\itemket{Details}The name is the two points name such as the form "A-B".\\
+Point is the name or the coordinate of the point through which the plane is passing.\\
+The vector is the normal of the plane.\\
+If option is "put" then the function draw two geometric points.
+\itemket{Examples} \mbox{}
+
+Return the points A,B on the plane which is passing through the point P and orthogonal to the vector [1,1,1]\\.
+\verb|Perpplane("A-B","P",[1,1,1],"put");|\\
+
+Return the points A,B on the plane which is passing through the point P and orthogonal to the line segment OP. In this situation PA and PB is orthogonal and length of PA and PB are 1.\\.
+\verb|Perpplane("A-B","P",P3d-O3d);|\\
+
+Draw point A,B,C,D by draw tool of Cinderella.
+
+\verb| Xyzax3data("","x=[-5,5]","y=[-5,5]","z=[-5,4]"); |\\
+\verb| Putpoint3d(["O",[0,0,0]]); |\\
+\verb| Putpoint3d(["P",[1,1,1]]); |\\
+\verb| Perpplane("E-F","P",P3d-O3d,"put"); |\\
+\verb| vec1=2*(E3d-P3d); |\\
+\verb| vec2=2*(F3d-P3d); |\\
+\verb| Putpoint3d(["A",P3d+vec1+vec2]); |\\
+\verb| Putpoint3d(["B",P3d+vec1-vec2]); |\\
+\verb| Putpoint3d(["C",P3d-vec1-vec2]); |\\
+\verb| Putpoint3d(["D",P3d-vec1+vec2]); |\\
+\verb| Spaceline("1",[A,B,C,D,A]); |\\
+\verb| Arrowdata([O,P],["dr,2"]); |\\
+\verb| Letter([P,"w","P",A,"ne","A",B,"e","B",C,"ws","C",D,"nw","D",]); |\\
+\verb| Skeletonparadata("1"); |
+
+\begin{center}
+\input{Fig/perpplane}
+\end{center}
+
+\end{cmd}
+%-------------Perppt-------------------------------
+\begin{cmd}{Perppt}{perppt}
+
+\itemket{Usage}Perppt(name, point, list of points, option)
+\itemket{Description}Generic function to get the foot of a perpendicular for the plane from the point.
+\itemket{Details}We specify the plane by the list of points.\\
+Option is the following.\\
+"draw": draw the point, don't make the geometric point(default).\\
+"put" : make the geometric point.\\
+"none": only make the data and don't draw.
+\itemket{Examples} \mbox{}
+
+We get the coordinate of the point H in the variable H3d for the following examples.\\
+\verb|Perppt("H","O","A-B-C","none");|\\
+\verb|Perppt("H","O","A-B-C");|\\
+\verb|Perppt("H","O","A-B-C","put");|\\
+
+Example
+
+\verb|Xyzax3data("","x=[-5,5]","y=[-5,5]","z=[-5,4]"); |\\
+\verb|Putpoint3d("O",[0,0,0]); |\\
+\verb|Putpoint3d("A",[3,0,0]); |\\
+\verb|Putpoint3d("B",[0,3,0]); |\\
+\verb|Putpoint3d("C",[0,0,3]); |\\
+\verb|Perppt("H","O","A-B-C","put"); |\\
+\verb|Spaceline("1",[A,B,C,A]); |\\
+\verb|Spaceline("2",[O,H]); |\\
+\verb|Letter([A,"nw","A",B,"ne","B",C,"ne","C",O,"nw","O",H,"ne","H"]); |\\
+
+\begin{center} \input{Fig/perppt} \end{center}
+
+\end{cmd}
+%---------------Projcoordpara-----------------------------
+\begin{cmd}{Projcoordpara}{projcoordpara}
+
+\itemket{Usage}Projcoordpara(3D-coordinate)
+\itemket{Description}Generic function to get the projection coordinate on the Euclidean view coordinate system.
+\itemket{Examples} \mbox{}
+
+\verb|println(Projcoordpara([3,1,2]));| //printed value is such as [-0.65, 1.7, 3.27] where the third element means the (signed) distance from the projection plane.
+\end{cmd}
+%-------------Readobj-------------------------------
+\begin{cmd}{Readobj}{readobj}
+
+\itemket{Usage}Readobj(filename, option)
+\itemket{Description}Read in the polyhedron data in the folder name \verb|polyhedrons_obj|
+\itemket{Details}\mbox{}
+
+Data of all \verb|Johnson solid| can be downloaded from\\
+\hspace*{20mm}\url{http://mitani.cs.tsukuba.ac.jp/polyhedron/}\\
+Store the folder into the work folder of \ketcindy\ for example, and execute\\
+\verb| Setdirectory(gethome+"/ketcindy/polyhedrons_obj");|\\
+\verb| polydt=Readobj("r02.obj",["size=2"]);|\\
+\verb| Setdirectory(Dirwork);|\\
+Then the data of \verb|r02.obj| are assigned to the variable \verb|polydt|.
+
+Option is ["size=n"] then we get the magnification of n times. If n is negative value then we have the image of vertical inversion.
+\itemket{Examples} \mbox{}
+
+\verb|VertexEdgeFace("1",polydt);| //output data name is phf3d1\\
+\verb|Nohiddenbyfaces("1","phf3d1");|
+
+\begin{center} \input{Fig/readobj} \end{center}
+
+The main polyhedral data is as follows.
+
+ \input{Fig/kobayashiE}
+
+\end{cmd}
+
+%------------Xyzcoord--------------------------------
+\begin{cmd}{Xyzcoord}{xyzcoord}
+
+\itemket{Usage}\hspace{10mm} Xyzcoord(P.x, P.y, Pz.y)
+\itemket{Description}Generic function to return the 3D-coordinate of the point P.
+\itemket{Details}(P.x, P.y) is the coordinate of P in the mainarea and Pz.y is the y-coordinate of P in the subarea.
+\itemket{Examples} \mbox{}
+
+\verb|println(Xyzcoord(A.x,A.y,Az.y));| //print the 3D-coordinate of point A on the console.
+\end{cmd}
+
+%--------------Isangle------------------------------
+\begin{cmd}{Isangle}{isangle}
+
+\itemket{Usage}Isangle()
+\itemket{Description}Decide the selection of the angle slider.
+\itemket{Details}Returns ``true" if select slider, and ``false" if not.\\
+In drawing including hidden line processing, reaction is bad when recalculating while moving the viewpoint. With this function, you can write code that does not recalculate while moving the viewpoint.
+
+\itemket{Examples} \mbox{}
+
+\verb| fd=[ |\\
+\verb| "z=4-(x^2+y^2)",|\\
+\verb| "x=R*cos(T)","y=R*sin(T)",|\\
+\verb| "R=[0,2]","T=[0,2*pi]","e" \verb| ];|\\
+\verb| if(Isangle(),|\\
+\verb| Sf3data("1",fd);|\\
+\verb| ,|\\
+\verb| Startsurf();|\\
+\verb| Sfbdparadata("1",fd);|\\
+\verb| Crvsfparadata("1","ax3d","sfbd3d1",fd);|\\
+\verb| ExeccmdC("1");|\\
+\verb| );|
+
+
+\end{cmd}
+
+%--------------Dist3d------------------------------
+
+\begin{cmd}{Dist3d}{dist3d}
+
+\itemket{Usage}Dist3d(a1,a2)
+\itemket{Description}Generic function to get the 3D-distance of two points.
+\itemket{Examples} \mbox{}
+
+Following three programs return the same result.\\
+
+\verb| Dist3d("A","B"); |\\
+\verb| Dist3d(A,B); |\\
+\verb| Dist3d(A3d,B3d); |
+
+\end{cmd}
+%--------------Embed------------------------------
+
+\begin{cmd}{Embed}{embed}
+\itemket{Usage}Embed(name,PDlist,formula,varlist)
+\itemket{Description}Embed plotting data of 2D in plane of 3D.
+\itemket{Details}PDlist is list of plotting data of 2D. Plane of 3D is given by formula and varlist.
+\itemket{Examples} \mbox{}
+
+Embed an equilateral triangle and its circumscribed circle in a plane in 3D space.
+
+(1) \verb|vo|, \verb|vx|, \verb|vy| are defined with function {\tt \hyperlink{defvar}{Defvar}} that uses R.\\
+\verb|Xyzax3data("","x=[-5,4]","y=[-10,4]","z=[-5,5]",["a","O"]);|\\
+\verb|Spaceline("1",[[3,0,0],[3,6,0],[3,6,6],[3,0,6],[3,0,0]]);|\\
+\verb|Defvar("vo=[3,3,3]");| // Defined in R\\
+\verb|Defvar("vx=[0,1,0]");| // Defined in R\\
+\verb|Defvar("vy=[0,0,1]");| // Defined in R\\
+\verb|Putpoint3d(["A",[3,3,3]]);|\\
+\verb|Circledata("1",[[0,0],[2,0]],["nodisp"]);|\\
+\verb|Listplot("1",[[0,2],[-sqrt(3),-1],[sqrt(3),-1],[0,2]],["nodisp"]);|\\
+\verb|Embed("1",["cr1","sg1"],"vo+x*vx+y*vy","[x,y]");|\\
+\verb|Ptsize(3);|\\
+\verb|Drawpoint(A);|
+
+Following view is as \verb|TH|=75,\verb|FI|=70.
+ \begin{center} \input{Fig/embed01} \end{center}
+
+(2) A, B, and C are defined instead of vo, vx, vy defined by Defvar. But, in this case, points B and C are not drawn in the plane. So, the figure may be difficult to understand.\\
+\verb|Putpoint3d(["A",[3,3,3],"B",[0,1,0],"C",[0,0,1]]);|\\
+\verb|Embed("1",["cr1","sg1"],"A3d+x*B3d+y*C3d","[x,y]");|\\
+\begin{center}
+\includegraphics[bb=0.00 0.00 477.02 383.02,width=8cm]{Fig/embed03.pdf}
+\end{center}
+To draw the B and C on the embedded figure, code changes as follows.
+
+\verb|Putpoint3d(["A",[3,3,3],"B",[3,4,3],"C",[3,3,4]]);|\\
+\verb|Embed("1",["cr1","sg1"],"A3d+x*B3d+y*C3d","[x,y]");|\\
+
+(3) The function {\tt \hyperlink{perpplane}{Perpplane}} is used in next.\\
+\verb|Xyzax3data("","x=[-5,5]","y=[-8,5]","z=[-5,5]");|\\
+\verb|Putpoint3d(["O",[0,0,0],"P",[1,1,2]]);|\\
+\verb|Perpplane("E-F","P",P3d-O3d,"put");|\\
+\verb|vec1=3*(E3d-P3d);|\\
+\verb|vec2=3*(F3d-P3d);|\\
+\verb|Putpoint3d(["A",P3d+vec1+vec2]);|\\
+\verb|Putpoint3d(["B",P3d+vec1-vec2]);|\\
+\verb|Putpoint3d(["C",P3d-vec1-vec2]);|\\
+\verb|Putpoint3d(["D",P3d-vec1+vec2]);|\\
+\verb|Spaceline("1",[A,B,C,D,A]);|\\
+\verb|Circledata("1",[[0,0],[2,0]],["nodisp"]);|\\
+\verb|Listplot("1",[[0,2],[-sqrt(3),-1],[sqrt(3),-1],[0,2]],["nodisp"]);|\\
+\verb|Embed("1",["cr1","sg1"],"P3d+x*(E3d-P3d)+y*(F3d-P3d)","[x,y]");|\\
+\verb|Ptsize(3);|\\
+\verb|Drawpoint(P);|\\
+\verb|Skeletonparadata("1");|
+ \begin{center} \input{Fig/embed02} \end{center}
+\end{cmd}
+
+
+%-------------Parapt-------------------------------
+\begin{cmd}{Parapt}{parapt(coordinate)}
+
+\itemket{Usage}Parapt(3D-coordinate)
+\itemket{Description}Generic function to return the 2D-coordinate on the plane of projection for the 3D-point.
+\itemket{Examples} \mbox{}
+
+\verb|println(Parapt([2,1,5]));|
+\end{cmd}
+%-------------Invparapt-------------------------------
+
+\begin{cmd}{Invparapt}{invparapt}
+\itemket{Usage}Invparapt(coordinate,PD)
+\itemket{Description}Returns the point on the curve that is corresponding to the coordinates on the Euclidean view.
+\itemket{Details}Returns the 3D-coordinates of the point on the curve(\verb|PD|) from the \verb|coordinate| on the Euclidean view.
+\itemket{Examples} \mbox{}
+
+Find on the screen (not in the space) intersection points (\verb|tmp_1|, \verb|tmp_2|, $\dots$) of the spiral curve and the space line. Draw a part of the spiral whose end points (\verb|p1| and \verb|p2|) are selected from the intersection points.\\
+\verb| Spaceline("1",[[-1,-1,-1],[1,2,3]]); |\\
+\verb| Spacecurve("1","[2*cos(t),2*sin(t),0.2*t]","t=[0,4*pi]",["do"]);|\\
+\verb| tmp=Intersectcrvs("sl2d1","sc2d1");|\\
+\verb| p1=Invparapt(tmp_1,"sc3d1");|\\
+\verb| p2=Invparapt(tmp_2,"sc3d1");|\\
+\verb| Partcrv3d("1",p1,p2,"sc3d1"); |\\
+\begin{center} \input{Fig/invparapt} \end{center}
+\end{cmd}
+
+%-----------Expr3d---------------------------------
+\begin{cmd}{Expr3D}{expr3d}
+\itemket{Usage}Expr([position, direction, string],options)
+\itemket{Description}Display the string.
+\itemket{Details} The position is the space coordinate. Other than that it is the same as Expr().
+\end{cmd}
+
+%-----------Letter3d---------------------------------
+\begin{cmd}{Letter3D}{letter3d}
+\itemket{Usage}Letter([position, direction, string],options)
+\itemket{Description}Display the string.
+\itemket{Details} The position is the space coordinate. Other than that it is the same as Letter().
+\itemket{Examples} \mbox{}
+
+\verb|Putpoint3d("A",2*[0,0,2*sqrt(6)/3]);|\\
+\verb|Putpoint3d("B",2*[1,-1/sqrt(3),0]);|\\
+\verb|Putpoint3d("C",2*[0,sqrt(3)-1/sqrt(3),0]);|\\
+\verb|Putpoint3d("D",2*[-1,-1/sqrt(3),0]);|\\
+\verb|Putpoint3d("M",(B3d+C3d)/2);|\\
+\verb|phd=Concatobj([[A,B,C],[A,B,D],[A,C,D],[B,C,D]]);|\\
+\verb|VertexEdgeFace("1",phd);|\\
+\verb|Spaceline("1",[A,M,D]);|\\
+\verb|Nohiddenbyfaces("1","phf3d1");|\\
+\verb|Letter3d([A3d,"ne","A",B3d,"w","B",C3d,"se","C",D3d,"e","D"]);|\\
+\verb|Letter3d(M3d,"sw","M",["Color=blue"]);|\\
+
+\begin{center}
+\input{Fig/letter3d}
+\end{center}
+\end{cmd}
+
+\newpage
+%-==Appendix ========================
+\section{Appendix}
+
+\subsection{Color table}
+
+\begin{center}
+%\scalebox{0.9}{\input{Fig/colortable}}
+\input{Fig/colortable}
+\end{center}
+\newpage
+
+%-----------Comparative chart of drawing of points---------
+\hypertarget{mkpttable}{}
+\subsection{Comparative chart of drawing of points}
+\begin{tabbing}
+123456789012345\=1234567890\=\kill
+ \> return \>: use return value\\
+ \> draw \>: draw Euclidean view\\
+ \> geo \>: make geometric point on Euclidean view\\
+ \> Tex \>: output Tex file
+\end{tabbing}
+
+\begin{center}
+\input{Fig/mkpttableE}
+\end{center}
+
+\hspace{20mm} $\triangle$ : use PD
+
+\newpage
+%-==Command List ========================
+\hypertarget{functionlist}{}
+\section{Command List}
+\hyperlink{index}{To index}
+
+\begin{tabbing}
+12345678901234567890\=\kill
+{\bf Setting and Defining} \> \\
+\hyperlink{addax}{Addax} \> decide axis are drawn or not.\\
+\hyperlink{addpackage}{Addpackage} \> add packages of \TeX to the main file for previewing.\\
+\hyperlink{assign}{Assign} \> replace the string1 in the string0 with the string2.\\
+\hyperlink{changework}{Changework} \> change the working directory.\\
+\hyperlink{deffun}{Deffun} \> define a function common to both Cindy and R.\\
+\hyperlink{definecolor}{Definecolor} \> define the name of colorcode in the \TeX\ figure.\\
+\hyperlink{defvar}{Defvar} \> define variables common to both Cindy and R.\\
+\hyperlink{drwxy}{Drwxy} \> draw axis in the \TeX\ figure.\\
+\hyperlink{fontsize}{Fontsize} \> define the font size in the \TeX\ figure.\\
+\hyperlink{ketinit}{Ketinit} \> initialize \ketcindy.\\
+\hyperlink{initglist}{Initglist} \> add the list in ketlib slot to that of figures slot.\\
+\hyperlink{ptsize}{Ptsize} \> set the size of points.\\
+\hyperlink{setarrow}{Setarrow} \> set the style of arrow.\\
+\hyperlink{setax}{Setax} \> set the style of axis.\\
+\hyperlink{setcolor}{Setcolor} \> set the color of figures and characters in the \TeX\ figure.\\
+\hyperlink{setfiles}{Setfiles} \> set the name of texfile.\\
+\hyperlink{setparent}{Setparent} \> set the name of texfile by using the Parent push button.\\
+\hyperlink{setmarklen}{Setmarklen} \> set the length of tickmarks on the axsis.\\
+\hyperlink{setorigin}{Setorigin} \> set or transtate the coordinate of apparent origin.\\
+\hyperlink{setpen}{Setpen} \> set the thickness of lines.\\
+\hyperlink{setpt}{Setpt} \> set the size of points.\\
+\hyperlink{setscaling}{Setscaling} \> set the scale of vertical direction.\\
+\hyperlink{setunitlen}{Setunitlen} \> set the scale of unit length. (default is 1cm)\\
+\hyperlink{setwindow}{Setwindow} \> set a drawing area on a Euclidean view.\\
+\hyperlink{strsplit}{Strsplit} \> return the list of strings separated by a string.\\
+\hyperlink{usegraphics}{Usegraphics} \> change to pict2e.\\
+
+{\bf Drawing} \> \\
+\hyperlink{drawfigures}{Drawfigures} \> manipulate a plural number of PDs together.\\
+\hyperlink{anglemark}{Anglemark} \> draw an angle mark.\\
+\hyperlink{setarrow}{Setarrowdata} \> set styles of arrows.\\
+\hyperlink{arrowdata}{Arrowdata} \> draw an arrow line between two points.\\
+\hyperlink{arrowhead}{Arrowhead} \>draw an arrowhead with specified direction at a designated point.\\
+\hyperlink{bezier}{Bezier} \> draw a Bezier curve.\\
+\hyperlink{beziersmooth}{Beziersmooth} \> draw a smooth Bezier curve.\\\hyperlink{beziersym}{Beziersym} \> draw a smooth Bezier curve.\\
+\hyperlink{bowdata}{Bowdata} \> draw the shape of bow connecting two points.\\
+\hyperlink{bspline}{Bspline} \> draw second degree B-spline curve. \\
+\hyperlink{changestyle}{Changestyle} \> change the option for drawing. \\
+\hyperlink{circledata}{Circledata} \> draw a circle or polygon. \\
+\hyperlink{crspline}{CRspline} \> draw single Catmull-Rom spline curve. \\
+\hyperlink{deqplot}{Deqplot} \> draw the solution curve of a differential equation.\\
+\hyperlink{dotfilldata}{Dotfilldata} \> fill a domain with dots.\\
+\hyperlink{drwpt}{Drawppoint} \> draw a point. \\
+%\hyperlink{drwpt}{Drwpt} \> draw a point. \\
+\hyperlink{drawsegmark}{Drawsegmark} \> Add a mark to a segment. \\
+\hyperlink{ellipseplot}{Ellipseplot} \> draw ellipse.\\
+\hyperlink{enclosing}{Enclosing} \> make a closed curve form the list of plotting data.\\
+\hyperlink{expr}{Expr} \> write an expression in \TeX style.\\
+\hyperlink{exprrot}{Exprrot} \> write a rotated expression in \TeX style.\\
+\hyperlink{fourierseries}{Fourierseries} \> draw the graph of a fourier series.\\
+\hyperlink{framedata}{Framedata} \> draw a rectangle.\\
+\hyperlink{hatchdata}{Hatchdata} \> draw hatch lines in the close curve.\\
+\hyperlink{htickmark}{Htickmark} \> tick on the horizontal ax.\\
+\hyperlink{hyperbolaplot}{Hyperbolaplot} \> draw a hyperbola.\\
+\hyperlink{implicitplot}{Implicitplot} \> draw the graph of a implicit function.\\
+\hyperlink{invert}{Invert} \> rearrange plotting data in the reverse order.\\
+\hyperlink{joincrvs}{Joincrvs} \> create a plotting data of connecting in list of plotting data.\\
+\hyperlink{letter}{Letter} \> display the string.\\
+\hyperlink{letterrot}{Letterrot} \> rotate a string and display it.\\
+\hyperlink{lineplot}{Lineplot} \> draw the straight line through the two points.\\
+\hyperlink{listplot}{Listplot} \> connect points by line segments.\\
+\hyperlink{mkbeziercrv}{Mkbeziercrv} \> draw some bezier curves.\\
+\hyperlink{mkbezierptcrv}{Mkbezierptcrv} \> draw a bezier curve.\\
+\hyperlink{mkcircles}{Mkcircles} \> create plotting data of all geometric circles.\\
+\hyperlink{mksegments}{Mksegments} \> create plotting data of all geometric segments.\\
+\hyperlink{ospline}{Ospline} \> draw a spline curve of Oshima.\\
+\hyperlink{ovaldata}{Ovaldata} \> draw a rectangle with rounded corners.\\
+\hyperlink{parabolaplot}{Parabolaplot} \> draws a parabola.\\
+\hyperlink{paramark}{Paramark} \> draw an angle mark with a parallelogram.\\
+\hyperlink{paramplot}{Paramplot} \> draw a curve of parametric representation.\\
+\hyperlink{polarplot}{Polarplot}\> draw a curve of polar equation.\\
+\hyperlink{partcrv}{Partcrv} \> make a piece of curve from the PD.\\
+\hyperlink{periodfun}{Periodfun} \> draw the graph of a periodic function.\\
+\hyperlink{plotdata}{Plotdata} \> draw the graph of function.\\
+\hyperlink{pointdata}{Pointdata} \> make a point data.\\
+\hyperlink{polygonplot}{Polygonplot} \> draw a polygon inscribed inside the circle.\\
+\hyperlink{putintersect}{Putintersect} \> make a intersection point of two curves.\\
+\hyperlink{putoncurve}{PutonCurve} \> put a point on the curve.\\
+\hyperlink{putonline}{PutonLine} \> put a point on the line.\\
+\hyperlink{putonSeg}{Putonseg} \> put a point on the segment.\\
+\hyperlink{putpoint}{Putpoint} \> put a point.\\
+\hyperlink{reflectdata}{Reflectdata} \> draw a reflective curve.\\
+\hyperlink{reflectpoint}{Reflectpoint} \> return the reflect point.\\
+\hyperlink{rotatedata}{Rotatedata} \> rotate plotting data.\\
+\hyperlink{rotatepoint}{Rotatepoint} \> rotate a point.\\
+\hyperlink{rulerscale}{Rulerscale} \> put ruler marks.\\
+\hyperlink{scaledata}{Scaledata} \> scale plotting data.\\
+\hyperlink{scalepoint}{Scalepoint} \> scale a point.\\
+\hyperlink{segmark}{Segmark} \> add a mark to a segment.\\
+\hyperlink{shade}{Shade} \> fill a domain surrounded by a closed curve.\\
+\hyperlink{tangentplot}{Tangentplot} \> draw a tangent line of a plotting data.\\
+\hyperlink{translatedata}{Translatedata} \> translate plotting data.\\
+\hyperlink{translatepoint}{Transelatepoint} \> translate a point.\\
+\hyperlink{vtickmark}{Vtickmark} \> tick on the vertical ax.\\
+
+{\bf Calculus and I/O} \> \\
+\hyperlink{asin}{Asin} \> return arcsine and arccosine.\\
+\hyperlink{crossprod}{Crossprod} \> return the cross product of 2 vectors.\\
+\hyperlink{derivative}{Derivative} \> find the derivative of a function or a plotting data.\\
+\hyperlink{dotprod}{Dotprod} \> return the dot product of 2 vectors.\\
+\hyperlink{extractdata}{Extractdata} \> add properties to a data.\\
+\hyperlink{findarea}{Findarea} \> return the area enclosed with a close curve.\\
+\hyperlink{findlength}{Findlength} \> return the length of a curve.\\
+\hyperlink{integrate}{Integrate} \> find the value of numerical integration.\\
+\hyperlink{intersectcurves}{Intersectcurves} \> return a list of intersects of 2 plotting data.\\
+\hyperlink{intersectcurvesPp}{IntersectcurvesPp} \> return a list of intersects with parameters of 2 plotting data.\\
+\hyperlink{inversefun}{Inversefun} \> find the value of the inversefunction.\\
+\hyperlink{nearestpt}{Nearestpt} \> return the nearest point with the parameter and the distance.\\
+\hyperlink{nearestptcrv}{Nearestptcrv} \> return the nearest point on the plotting data from the point1.\\
+\hyperlink{numptcrv}{Numptcrv} \> return the number of plotting data.\\
+\hyperlink{paramoncurve}{Paramoncurve} \> return the parameter value of the point on the curve.\\
+\hyperlink{pointoncurve}{Pointoncurve} \> point which has the parameter value\\
+\hyperlink{ptstart, ptend}{Ptstart, Ptend} \> returns start point and end point of PD.\\
+\hyperlink{ptcrv}{Ptcrv} \> Returns n-th point from PD.\\
+\hyperlink{readcsv}{Readcsv} \> read a file in csv format.\\
+\hyperlink{readlines}{Readlines} \> read a text file line by line.\\
+\hyperlink{readoutdata}{ReadOutData} \> read external data.\\
+\hyperlink{sqr}{Sqr} \> return square root.\\
+\hyperlink{writeoutdata}{WriteOutData} \> write out data in \ketcindy\ format.\\
+
+{\bf Making Table} \> \\
+\hyperlink{changetablestyle}{Changetablestyle} \> change line styles of rules.\\
+\hyperlink{findcell}{Findcell} \> return the information of a cell.\\
+\hyperlink{putcell}{Putcell} \> put a string at the cell.\\
+\hyperlink{putcell}{Putcellexpr} \> put a math expression at the cell.\\
+\hyperlink{putcol}{Putcol} \> put strings to a column.\\
+\hyperlink{putcolexpr}{Putcolexpr} \> put math expressions to a column.\\
+\hyperlink{putrow}{Putrow} \> put strings to a row.\\
+\hyperlink{putrowexpr}{Putrowexpr} \> put math expressions to a row.\\
+\hyperlink{tabledata}{Tabledata} \> draw rules of a table.\\
+\hyperlink{tgrid}{Tgrid} \> return the coordinates of the grid name.\\
+\hyperlink{tlistplot}{Tlistplot} \> connect two lattice points by line segments.\\
+
+{\bf Data Processing}\\
+\hyperlink{dispmat}{Dispmat} \> display the list in the console matrix.\\
+\hyperlink{tab2list}{Tab2list} \> convert contents of string data to list.\\
+\hyperlink{writecsv}{Writecsv} \> make a CSV file consisting of the contents of data.\\
+
+{\bf Others} \> \\
+\hyperlink{assign}{Assign} \> replace the string1 in the string0 with the string2.\\
+\hyperlink{bbdata}{BBdata} \> return the size of an image file.\\
+\hyperlink{cindyname}{Cindyname} \> return the name of a current file.\\
+\hyperlink{colorcode}{Colorcode} \> change colorcode from colortype1 to colortype2.\\
+\hyperlink{dqq}{Dqq} \> return the string surrounded by double quotes.\\
+\hyperlink{factorial}{Factorial} \> return the factorial.\\
+\hyperlink{figpdf}{Figpdf} \> make a pdf file with the same size of figure.\\
+\hyperlink{help}{Help} \> display usages of the function.\\
+\hyperlink{indexall}{Indexall} \>return all positions of string2 in string1.\\
+\hyperlink{norml}{Norm} \> return the norm of a vector.\\
+\hyperlink{opl}{Op} \> return the n-th element of a list or a string.\\
+\hyperlink{ptselected}{Ptselected} \> tests whether the point is selected.\\
+\hyperlink{slider}{Slider} \> make a slider on a Euclidean view.\\
+\hyperlink{sprintf}{Sprintf} \> converts a real number to a string.\\
+\hyperlink{texcom}{Texcom} \> add the command in the \TeX file.\\
+\hyperlink{textformat}{Textformat} \> converts a real number to a string.\\
+\hyperlink{toupper}{Toupper} \> return the upper case letters of a string.\\
+\hyperlink{windispg}{Windispg} \> display all graphs on Euclidean view.\\
+\hyperlink{fracform}{Fracform} \>return TeX-like form of the fraction.\\
+\hyperlink{totexform}{Totexform} \> return TeX form.\\
+\hyperlink{tocindyform}{Tocindyform} \> return Cindy form.\\
+
+{\bf R} \> \\
+\hyperlink{boxplot}{Boxplot} \> draw boxplots.\\
+\hyperlink{calcbyr}{CalcbyR} \> executes R commands and returns the execution result to Cinderella.\\
+\hyperlink{histplot}{Histplot} \> create histograms.\\
+\hyperlink{plotdatar}{PlotdataR} \>draw graph of R's statistical probability function.\\
+\hyperlink{rfun}{Rfun} \>execute a R command.\\
+
+{\bf Maxima} \> \\
+\hyperlink{calcbym}{CalcbyM} \> execute Maxima's script. \\
+\hyperlink{mxbatch}{Mxbatch} \> make a command to execute the Maxima file. \\
+\hyperlink{mxfun}{Mxfun} \> execute Maxima's function. \\
+\hyperlink{mxtex}{Mxtex} \> convert expression to TeX format. \\
+
+{\bf Risa/Asir} \> \\
+\hyperlink{calcbya}{CalcbyA} \> execute Risa/Asir's script. \\
+\hyperlink{asirfun}{Asirfun} \> execute Risa/Asir's function. \\
+
+{\bf MeshLab} \> \\
+\hyperlink{mkobjcmd}{Mkobjcmd} \> obj formatted files of surfaces without thickness.\\
+\hyperlink{mkobjcrvcmd}{Mkobjcrvcmd} \> obj formatted files of spatial curves.\\
+\hyperlink{mkobjnrm}{Mkobjnrm} \> calculate normal vector of surface.\\
+\hyperlink{mkobjplatecmd}{Mkobjplatecmd} \> obj formatted files of plates.\\
+\hyperlink{mkobjpolycmd}{Mkobjpolycmd} \> obj formatted files of polyhedra.\\
+\hyperlink{mkobjsymbcmd}{Mkobjsymbcmd} \> generate commands for obj formatted files of some characters.\\
+\hyperlink{mkobjthickcmd}{Mkobjthickcmd} \> generate commands for obj formatted files of surfaces with thickness.\\
+\hyperlink{mkviewobj}{Mkviewobj} \> generate obj formatted files.\\
+{\bf Animation} \> \\
+\hyperlink{setpara}{Setpara} \> set up the animation control system.\\
+
+{\bf \ketcindy\ Slide} \> \\
+\hyperlink{setslidebody}{Setslidebody} \> set up the color and density of the letters in slide body.\\
+\hyperlink{setslidehyper}{Setslidehyper} \> use \verb|hyperref.sty|.\\
+\hyperlink{setslidemain}{Setslidemain} \> set up the main slide.\\
+\hyperlink{setslidepage}{Setslidepage} \> set up each page of slides.\\
+\hyperlink{setslidemargin}{Setslidemargin} \> change the margin of slides.\\
+\hyperlink{settitle}{Settitle} \> make a title slide.\\
+
+{\bf \ketcindy 3D} \> \\
+\hyperlink{bezier3d}{Bezier3d} \> draw a Cubic Bézier curve.\\
+\hyperlink{changestyle3d}{Changestyle3d} \> change the attribute of PD.\\
+\hyperlink{concatobj}{Concatobj} \> concatenates several objects.\\
+\hyperlink{crvsfparadata}{Crvsfparadata} \> remove curves hidden by curved face.\\
+\hyperlink{datalist2d}{Datalist2d} \> get a list of 2D-plotting data on the screen.\\
+\hyperlink{datalist3d}{Datalist3d} \> get a list of 3D-plotting data.\\
+\hyperlink{dist3d}{Dist3d} \> get the 3D-distance of two points.\\
+\hyperlink{drawpoint3d}{Drawpoint3d} \> draw 3D-points.\\
+\hyperlink{embed}{Embed} \> embed plotting data of 2D in plane of 3D.\\
+\hyperlink{execcmdc}{ExeccmdC} \> draw 3D-surface.\\
+\hyperlink{expr3d}{Expr3d} \> display the string.\\
+\hyperlink{intersectcrvsf}{Intersectcrvsf} \> return a list of intersects of a curve and curved face.\\
+\hyperlink{intersectsgpL}{IntersectsgpL} \>return a intersection of a line segment and plane.\\
+\hyperlink{invparapt}{Invparapt} \> return the point on the curve.\\
+\hyperlink{ketinit3d}{Ketinit3d} \> declare the use of KeTCindy3D\\
+\hyperlink{letter3d}{Letter3d} \> display the string.\\
+\hyperlink{mkbezierptcrv3d}{Mkbezierptcrv3d} \> draw a cubic Bezier curve from nodes.\\
+\hyperlink{nohiddenbyfaces}{Nohiddenbyfaces} \> draw hidden lines by the surfaces.\\
+\hyperlink{parapt}{Parapt} \> return the 2D-coodinate on the plane.\\
+\hyperlink{partcrv3d}{Partcrv3d} \> draw the part curve of the curve PD.\\
+\hyperlink{perpplane}{Perpplane} \> create a basic vector on a vertical plane\\
+\hyperlink{perppt}{Perppt} \> get the foot of a perpendicular for the plane from the point.\\
+\hyperlink{phparadata}{Phparadata} \> draw the polyhedron by performing hidden line processing.\\
+\hyperlink{pointdata3d}{Pointdata3d} \> generate data of point list.\\
+\hyperlink{projcoordpara}{Projcoordpara} \> get the projection coordinate.\\
+\hyperlink{putaxes3d}{Putaxes3d} \> make the geometric points on the coordinate axis. \\
+\hyperlink{putonCurve3d}{PutonCurve3d} \> make the geometric point on the 3D-curve.\\
+\hyperlink{putonseg3d}{Putonseg3d} \> make the geometric point on the 3D-segment.\\
+\hyperlink{putpoint3d}{Putpoint3d} \> draw the geometric point in the space.\\
+\hyperlink{readobj}{Readobj} \> read in the polyhedron data in the folder name \verb|polyhedrons_obj|\\
+\hyperlink{reflectdata3d}{Reflectdata3d} \> draw the reflection of plotting data.\\
+\hyperlink{reflectpoint3d}{Reflectpoint3d} \> return the coordinate of the reflect point.\\
+\hyperlink{rotatedata3d}{Rotatedata3d} \> rotate plotting data around the vector\\
+\hyperlink{rotatepoint3d}{Rotatepoint3d} \> return the coordinate of the rotate point.\\
+\hyperlink{scaledata3d}{Scaledata3d} \>scale plotting data \\
+\hyperlink{scalepoint3d}{Scalepoint3d} \> execute scale transformation for the coordinate of the point.\\
+\hyperlink{sf3data}{Sf3data} \> draw the wire frame model of the surface.\\
+\hyperlink{sfbdparadata}{Sfbdparadata} \> draw the surface by performing hidden line processing.\\
+\hyperlink{sfcutparadatacdy}{Sfcutparadatacdy} \> Display intersection line of surface and surface.\\
+\hyperlink{skeletonparadata}{Skeletonparadata} \> draw the lines by performing hidden line processing.\\
+\hyperlink{spacecurve}{Spacecurve} \> draw the space curve.\\
+\hyperlink{spaceline}{Spaceline} \> draw the space polygonal lines.\\
+\hyperlink{start3d}{Start3d} \> creates subarea, and recognize 3D points.\\
+\hyperlink{startsurf}{Startsurf} \> defines values related to surface rendering.\\
+\hyperlink{translatedata3d}{Translatedata3d} \> translate plotting data\\
+\hyperlink{translatepoint3d}{Translatepoint3d} \> return the translated coordinate for the point.\\\hyperlink{vertexedgeface}{Vertexedgeface} \> draw the polyhedron.\\
+\hyperlink{wireparadata}{Wireparadata} \> draw the surface by wire frame data with performing hidden line processing.\\
+\hyperlink{xyzax3data}{Xyzax3data} \> draw the coordinate axis.\\
+\hyperlink{xyzcoord}{Xyzcoord} \> return the 3D-coordinate of the point P.\\
+\hyperlink{setangle}{Setangle} \>Set TH and FI\\
+\hyperlink{getangle}{Getangle}\>Get TH and FI\\
+\end{tabbing}
+
+\end{document} \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/KeTCindyReferenceJ.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/KeTCindyReferenceJ.tex
new file mode 100644
index 0000000000..aa8c5bd234
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/KeTCindyReferenceJ.tex
@@ -0,0 +1,8423 @@
+\documentclass[papersize,a4paper,12pt,uplatex]{jsarticle}
+\usepackage{ketpic,ketlayer}
+\usepackage{amsmath}
+% \usepackage{amsmath,newtxmath}
+\usepackage[dvipdfmx]{graphicx,color}
+\usepackage{wrapfig}
+\usepackage{jsverb}
+\usepackage[dvipdfmx,bookmarks=false,colorlinks=true,linkcolor=blue]{hyperref}
+\setmargin{20}{20}{15}{25}
+\usepackage{setspace}
+\usepackage{comment}
+\setcounter{tocdepth}{3}
+
+\begin{document}
+\title{\ketcindy 関数リファレンス}
+\author{\ketcindy\ Project Team}
+\maketitle
+
+\begin{center}- 第3.2版 -\end{center}
+\hypertarget{index}{}
+\tableofcontents
+
+\newpage
+
+\section{平面の図形とグラフ}
+
+%設定・定義 ==================================
+
+\subsection{設定・定義}
+
+\subsubsection{環境設定}
+
+\begin{description}
+
+\vspace{\baselineskip}
+\hypertarget{ketinit}{}
+\item[関数]Ketinit(options)
+\item[機能]\ketcindy を初期化する。平面図形ではDrawスロットに,空間図形ではInitialization スロットの冒頭に記述する必要がある。
+\item[説明]option 作業サブフォルダ\\%,縦方向の倍率と描画領域を設定する。\\
+\phantom{option }通常は不要で,\verb|Ketinit()| だけでよい。
+
+\vspace{\baselineskip}
+\hypertarget{Initglist}{}
+\item[関数]Initglist(), Setglist(), Addglist()
+\item[機能]ketlibスロットで作られる描画データを描画リストに追加する。
+\item[説明]Implicitplot,Hatchdataなど実行時間のかかるコマンドをfiguresスロットにおくと,その都度実行されてしまう。それを避けるためketlibスロットにおいたときに用いる。
+
+\begin{verbatim}
+ Initglist(); // ketlibスロットで
+ Implicitplot(''1'',fun,rng);
+ Setglist();
+
+ Ketinit(); // figuresスロットで
+ Addglist();
+\end{verbatim}
+
+\vspace{\baselineskip}
+\hypertarget{setfiles}{}
+\item[関数]Setfiles(filename)
+\item[機能]出力するファイル名の設定
+\item[説明]出力するTexのファイル名を指定する。
+
+出力するファイル名は 初期設定では,作図しているCinderellaのファイル名。
+
+たとえば,triangle.cdy で作図して出力すると,triangle.tex ができる。
+
+これに対し,triangle.cdy で作図しているときに,grav.tex で出力したい場合は
+
+\hspace{10mm}\verb|Setfiles("grav");|
+
+とすると,grav.tex ができる。
+
+\vspace{\baselineskip}
+\hypertarget{setparent}{}
+\item[関数]Setparent(filename)
+\item[機能]Parent ボタンで出力するファイル名の設定
+\item[説明]Figpdf() を使ってParent ボタンで出力するTexのファイル名を指定する。
+
+Parent ボタンで出力するファイル名は 初期設定がないので,指定する必要がある。
+
+たとえば,triangle.cdy で作図しているときに,図サイズの grav.pdf を作る場合,
+
+\hspace{10mm} \verb|Setparent("grav");|
+
+とすると,図のTeXファイルtriangle.tex と PDFを作る grav.tex ができ,ここから grav.pdf ができる。
+
+\vspace{\baselineskip}
+\hypertarget{changework}{}
+\item[関数]Changework(パス名)
+\item[機能]作業ディレクトリを指定(変更)する
+\item[説明]作業ディレクトリは, 初期設定では,現在作図しているファイルのあるフォルダ(ディレクトリ)の fig フォルダである。これを変更する。
+
+\vspace{\baselineskip}
+\hypertarget{addpackage}{}
+\item[関数]Addpackage(パッケージ名)
+\item[機能]TeXのパッケージを追加する
+\item[説明]プレビュー用のTeXソースにパッケージを追加する。
+
+\vspace{\baselineskip}
+ 【例】emathパッケージを追加する。
+
+\hspace{10mm}\verb|Addpackage("emath"); |
+
+ または
+
+\hspace{10mm}\verb|Addpackage(["emath"]); |
+
+ により,
+プレビュー用のTeXのプリアンブルに
+
+\hspace{10mm}\verb| \usepackage{emath}|
+
+が追加されて,emath のコマンドが利用できる。
+
+\vspace{\baselineskip}
+注)初期設定では,次のパッケージを利用している。
+\begin{verbatim}
+ ketpic, ketlayer, amsmath, amssymb, graphicx, color
+ \end{verbatim}
+
+\vspace{\baselineskip}
+\hypertarget{usegraphics}{}
+\item[関数]Usegraphics("pict2e")
+\item[機能]TeXのグラフィクスパッケージを\verb|"pict2e"| に変更する
+\item[説明]デフォルトのパッケージは \verb|"tpic"| であるが,これを\verb|"pict2e"| に変更する。
+
+
+\begin{flushright}\hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+\end{description}
+\newpage
+%-----------------描画設定・定義--------------------------------------
+\subsubsection{描画設定・定義}
+
+\vspace{\baselineskip}
+\begin{description}
+\hypertarget{addax}{}
+\item[関数]Addax(0または1)
+\item[機能]座標軸の表示
+\item[説明]引数が1のとき座標軸を描き,0のとき描かない。
+初期設定は1で,座標軸を描かない場合のみ \verb|Addax(0)| とすればよい。
+
+\vspace{\baselineskip}
+【例】三角形を描く
+
+左図が 初期設定(座標軸表示) Addax(0) をつけると右図になる。
+
+\begin{verbatim}
+Listplot([B,A,C]);
+Letter([A,"ne","A",B,"se","B",C,"se","C"]);
+\end{verbatim}
+
+\vspace{\baselineskip}
+\hspace{10mm} \input{Fig/addax1}\input{Fig/addax2}
+
+
+\hypertarget{setax}{}
+\item[関数]Setax()
+\item[機能]座標軸の書式を設定する。
+\item[説明]Cinderellaの描画面には反映されない。(座標軸は描かれない)
+
+引数はリストで与え,要素は順番に
+
+1. 軸の形状(直線は "l" ,矢印は "a") 初期設定は直線\\
+  矢印の大きさの倍率を指定するときは,"a0.5"のようにする。\\
+  また,矢印のスタイルは Setarrowで指定する。
+
+2. 横軸名 初期設定は \verb|"x"|
+
+3. 横軸名の位置 初期設定は \verb|"e"|
+
+4. 縦軸名 初期設定は \verb|"y"|
+
+5. 縦軸名の位置 初期設定は \verb|"n"|
+
+6. 原点名 初期設定は \verb|"O"|(文字として書かれる)
+
+7. 原点名の位置 初期設定は \verb|"sw"|
+
+8. 線種
+
+9. 線の色
+
+10. ラベルの色
+
+それぞれダブルクォートでくくる。色は,色名が使える。"red" など。
+
+10の引数のうちn番目だけを指定する場合は,[n,"内容"]で指定できる。
+
+また,後方は省略できる。
+
+\vspace{\baselineskip}
+【例】座標軸の先端を矢印にし,原点の北西にOを書く。
+
+\hspace{10mm} \verb|Setax(["a","","","","","","nw"]);|
+
+【例】原点の北西にOを書く。
+
+\hspace{10mm}\verb|Setax([7,"nw"]);|
+
+【例】軸を赤の点線にする。
+
+\hspace{10mm}\verb|Setax(["","","","","","","","do","red"]);|
+
+【例】先端を矢印にし,横軸を$\theta$,縦軸を$x$にして矢じりの左側に書く。
+
+\hspace{10mm} \verb|Setax(["a","\theta","","x","w"]);|
+
+\vspace{\baselineskip}
+\hspace{10mm}\input{Fig/setax-theta}
+
+
+\vspace{\baselineskip}
+\hypertarget{drwxy}{}
+\item[関数]Drwxy(), Drwxy(options)
+\item[機能]指定する手順で座標軸を描く
+\item[説明]座標軸は 初期設定では最後に描かれるが,座標軸上に白抜きの点を表示するなど,先に描くことが必要な場合に用いる。描画面には座標軸は表示されない。
+
+options は次のリストである。\\
+\hspace*{10mm}["Origin=",\ "Xrng=",\ "Yrng="]
+
+\begin{layer}{150}{0}
+\putnotese{75}{10}{\scalebox{0.8} {\input{Fig/drwxy}}}
+\end{layer}
+
+【例】点$(-\pi,\ 0)$と$(\pi,\ 0)$を白抜きの点で表示する。
+\begin{verbatim}
+Setax([7,"se"]);
+Setpt(5);
+Pointdata("1",[[-pi,0]],["Inside=0"]);
+Drwxy();
+Plotdata("1","sin(x)","x",["dr","Num=200"]);
+Pointdata("2",[[pi,0]],["Inside=0"]);
+\end{verbatim}
+
+このスクリプトでは,\verb| Pointdata("1",[[-pi,0]],["Inside=0"]);| を実行したのち座標軸を描き,次に,$y=\sin x$ のグラフを描いてから,再び \verb| ["Inside=0"]);|にして実行するので,点($-\pi$,0) の上を座標軸が通り,点($\pi$,0)は座標軸とグラフの上を通るので白抜きになる。
+
+\begin{flushright}\hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+\vspace{\baselineskip}
+\hypertarget{definecolor}{}
+\item[関数]Definecolor(色名 , 定義のリスト)
+\item[機能]色名を定義する
+\item[説明]ユーザー命名の色名を定義する。定義リストは RGBまたはCMYKのリスト
+
+各色0〜1の範囲で指定する。定義した色名は,Setcolor(color,options)で使うことができる。
+
+なお,\ketcindy では,68色を色名で使うことができる。色の名称は\hyperlink{colorcodelist}{カラーコード一覧} 参照。
+
+\vspace{\baselineskip}
+【例】暗い紫色を darkmaz の名称で定義して使う。
+\begin{verbatim}
+Definecolor("darkmaz",[0.8,0,0.8]);
+Setcolor("darkmaz");
+\end{verbatim}
+
+
+\vspace{\baselineskip}
+\hypertarget{setcolor}{}
+\item[関数]Setcolor(color,options)
+\item[機能]描画色の設定
+\item[説明]引数colorはカラーコードまたは色の名称。
+
+カラーコードはRGBまたはCMYKをリストで与える。各色0〜1。
+
+色の名称は\hyperlink{colorcodelist}{カラーコード一覧} の68色が指定できる。
+
+
+\vspace{\baselineskip}
+【例】Cinderellaの描画ツールとCindyScriptで線分AB,ACを60°の角をなすように描いておき,点DとEを弧の両端になるように設定して
+\begin{verbatim}
+Setcolor([1,0,0]);
+Circledata([A,D],["Rng=[0,pi/3]"]);
+Arrowhead(E,[-1,0.8],[2,1]);
+\end{verbatim}
+を実行すると,矢じりつきの弧を赤で表示することができる。
+
+1行目は,\verb|Setcolor("red");|でもよい。
+座標軸を描く場合は,このあと \verb|Setcolor("black")| で黒に戻しておかないと,座標軸が赤で表示されてしまうので要注意。
+
+
+\vspace{\baselineskip}
+\hspace{20mm} \includegraphics[width=3.5cm,bb=0 0 161 134]{Fig/setcolor.pdf}
+
+\begin{flushright}\hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+\vspace{\baselineskip}
+\hypertarget{deffun}{}
+\item[関数]Deffun(関数名 , 定義のリスト)
+\item[機能]関数を定義する
+\item[説明]関数定義は,CindyScript の関数定義 f(x):=式 でもできるが,Deffun()を使うことにより,Rでこの関数を利用することができる。目的に応じて使い分けるとよい。
+
+式のリストには if文を用いた場合分けの関数式を記述することもできる。
+
+\vspace{\baselineskip}
+【例】
+$f(x)=\dfrac{1}{x^2+1}$ を定義し,グラフを描く。
+
+\begin{verbatim}
+Deffun("f(x)",["regional(y)","y=1/(x^2+1)","y"]);
+Plotdata("1","f(x)","x");
+\end{verbatim}
+
+\vspace{\baselineskip}
+\hspace{20mm}\scalebox{0.9}{\input{Fig/deffun01}}
+
+
+\vspace{\baselineskip}
+【例】$f(x)=\left\{\begin{array}{l}1  (x\geq 0)\\ -1   (x<0)\\ \end{array}\right.$ を定義してグラフを描く。
+
+\begin{verbatim}
+Deffun("f(x)",["regional(y)","if(x>=0,y=1,y=-1)","y"]);
+Plotdata("1","f(x)","x",["Dis=1","Num=100"];
+\end{verbatim}
+
+\vspace{\baselineskip}
+\hspace{20mm}\scalebox{0.9}{\input{Fig/deffun02}}
+
+if 文はネストすることができる。
+\begin{verbatim}
+Deffun("f(x)",["regional y","if(x>1,y=1,if(x>-1,y=x,y=-1))","y"]);
+\end{verbatim}
+
+\vspace{\baselineskip}
+\hspace{20mm}\scalebox{0.9}{\input{Fig/deffun03}}
+
+
+\vspace{\baselineskip}
+\hypertarget{defvar}{}
+\item[関数]Defvar(文字列)
+\item[機能]変数を定義する
+\item[説明]変数の定義をRと共有する。
+
+【例】\verb|Defvar("const=3");|
+
+\vspace{\baselineskip}
+複数の変数を定義するときはリストにする。
+
+【例】\verb|Defvar([“a”,3,”b”,1]);|
+
+\vspace{\baselineskip}
+\hypertarget{fontsize}{}
+\item[関数]Fontsize(記号)
+\item[機能]フォントサイズを設定する
+\item[説明]次に Fontsize() を実行するまで有効\\
+記号は,"t" , "ss" , "f", "s" , "n" , "la","La", "LA", "h" , "H"
+
+【例】作図ツールの「点を加える」で,A〜Gの点をとっておく。小さい方からいくつか表示する。
+\begin{verbatim}
+Pointdata("1",[A,B,C,D,E,F,G],["Size=2"]);
+Fontsize("t"); Letter([A,"s2","A"]);
+Fontsize("ss"); Letter([B,"s2","B"]);
+Fontsize("s"); Letter([C,"s2","C"]);
+Fontsize("la"); Letter([D,"s2","D"]);
+Fontsize("La"); Letter([E,"s2","E"]);
+Fontsize("h"); Letter([F,"s2","F"]);
+Fontsize("H"); Letter([G,"s2","G"]);
+\end{verbatim}
+\input{Fig/fontsize}
+
+\vspace{\baselineskip}
+\hypertarget{setpt}{}
+\hypertarget{ptsize}{}
+\item[関数]Ptsize(n) , Setpt(n)
+\item[機能]表示する点の大きさを設定する。
+\item[説明]Ptsize() と Setpt() は同じである。 初期設定は1
+
+全体の点の大きさを設定する。点の大きさを個々に変えたい場合は,sizeオプションを用いる。
+
+\vspace{\baselineskip}
+【例】1から4までの点の大きさ
+
+あらかじめ,Cinderellaの作図ツールで点A,B,C,Dを作図しておく。
+
+\begin{layer}{150}{0}
+\putnotese{60}{5}{\input{Fig/pointsize}}
+\end{layer}
+
+\begin{verbatim}
+Pointdata("1",A,["Size=1"]);
+Pointdata("2",B,["Size=2"]);
+Pointdata("3",C,["Size=3"]);
+Pointdata("4",D,["Size=4"]);
+\end{verbatim}
+%\hspace{10mm}\input{Fig/pointsize}
+
+
+\begin{flushright}\hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+\hypertarget{setarrow}{}
+\item[関数]Setarrow(size,angle,position,cut,segstyle)
+\item[機能]矢線の形状の設定をする。
+\item[説明]引数は,順に,矢じりの大きさ, 開き角, 矢じり位置, 切り込み位置, 線種と表示色
+
+それぞれの意味と値は,\hyperlink{arrowdata}{Arrowdata()} を参照のこと。
+
+\vspace{\baselineskip}
+\hypertarget{setmarklen}{}
+\item[関数]Setmarklen(数)
+\item[機能]座標軸の目盛の長さを設定する
+\item[説明] \hyperlink{htickmark}{Htickmark()} , Vtickmark() で座標軸に目盛を入れるとき,その長さを設定する。
+
+\vspace{\baselineskip}
+\hypertarget{setorigin}{}
+\item[関数]Setorigin(座標)
+\item[機能]描画する座標軸の原点を設定(移動)する。座標系は変化しない。
+\item[説明]描画する座標軸の原点を引数の座標とする。座標は点の識別名でもよい。
+
+\vspace{\baselineskip}
+【例】原点を (3,2) として座標軸を描く。
+
+\hspace{10mm}\verb|Setorigin([3,2]);|
+
+原点を点Aの位置にして座標軸を描く。
+
+\hspace{10mm}\verb|Setorigin(A);|
+
+\vspace{\baselineskip}
+【例】原点は(3,2)に移動するが,スクリプトではもとの座標系を使う。
+\begin{verbatim}
+Setorigin([3,2]);
+Listplot([A,B,C,A]);
+Pointdata("1",[1,1],["Size=3"]);
+Letter([[1,1],"s2","P"]);
+\end{verbatim}
+左が実行時のCinderellaの画面,右が\TeX の結果。\\
+
+\hspace{10mm} \includegraphics[bb=0 0 299.02 250.01, width=4cm]{Fig/setorigin.pdf}
+\hspace{5mm}\input{Fig/setorigin}
+
+\vspace{\baselineskip}
+\hypertarget{setpen}{}
+\item[関数]Setpen(数)
+\item[機能]線の太さの初期値を設定する
+
+\verb|Listplot()| などの描画関数のオプション \verb|dr| で,個々の太さは指定できる。
+
+\vspace{\baselineskip}
+\hypertarget{setscaling}{}
+\item[関数]Setscaling(倍率)
+\item[機能]縦方向の倍率を設定する。倍率は実数またはリスト。実数の場合は縦方向,リストの場合は[横方向,縦方向]の指定となる。
+\item[説明]2次関数の応用問題などでは,グラフが縦に大きくなる場合があり,$y$軸方向のスケーリングを変えたいことがよくある。次のスクリプトは,$f(x)=-x^2+10x$ のグラフを縦軸方向を半分にして描くものである。
+
+\begin{layer}{150}{0}
+\putnotese{80}{5}{\input{Fig/setscaling}}
+\end{layer}
+\begin{verbatim}
+Setscaling(0.5);
+A.xy=[0,25/4];
+B.xy=[5/2,25/4];
+C.xy=[5/2,0];
+Listplot([A,B],["do"]);
+Listplot([C,B],["do"]);
+Plotdata("1","-2*x^2+10*x","x");
+Letter([[5,0],"s2w","5",[0,25/2],"w2",
+"$\frac{25}{2}$",C,"s4","$\frac{5}{2}$"]);
+\end{verbatim}
+ここで,点A,Bの座標が
+\begin{verbatim}
+A.xy=[0,25/4];
+B.xy=[5/2,25/4];
+\end{verbatim}
+となっていることに注意されたい。$y$座標をあらかじめ半分にしている。すなわち,Cinderellaで作図した幾何要素に対してはSetscalingは無効である。これは,Putpoint関数を用いて点の位置を決めても同じである。
+
+たとえば,次のスクリプトでは,Cinderellaの画面上では2本の線分が点Bでつながるが,書き出された\TeX の図では離れてしまう。
+\begin{verbatim}
+Setscaling(0.5);
+Putpoint("A",[0,2]);
+Putpoint("B",[2,2]);
+Listplot([A,B]);
+Listplot("1",[[0,0],[2,2]]);
+\end{verbatim}
+
+\vspace{\baselineskip}
+\hypertarget{setunitlen}{}
+\item[関数]Setunitlen(文字列)
+\item[機能]単位長を設定する。 初期設定は 1cm。
+
+この関数は,スクリプトの初めの方に書くのがよい。
+
+【例】Setunitlen("8mm")
+
+\vspace{\baselineskip}
+\hypertarget{setwindow}{}
+\item[関数]Setwindow(xの範囲, yの範囲)
+\item[機能]出力する描画領域を設定する。
+\item[説明]出力する描画領域は,通常は2点SWとNEを対角とする矩形領域である。
+
+この2点をドラッグすることによりビジュアルに描画領域を決められる。
+
+しかし,これとは別に出力範囲を設定したい場合にこの関数を用いる。
+
+また,表を作成したときは,表の範囲が出力範囲として優先される(Tabledata()を実行したとき)ので,表外に図を描いた場合は,最後にこの関数で出力範囲を指定して書き出す。
+
+\vspace{\baselineskip}
+【例】\verb|Setwindow([-5,5],[-1,3]);|
+
+\vspace{\baselineskip}
+\hspace{10mm}\includegraphics[bb=0.00 0.00 415.02 199.01,width=6cm]{Fig/setwindow.pdf}
+
+\begin{flushright}\hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+\end{description}
+
+%\newpage
+%=========== 描画 ======================
+\subsection{描画}
+\subsubsection{書式とオプション}
+
+描画関数は曲線などを作図する関数である。
+
+基本的な書式は次の通り。
+
+\hspace{20mm} 関数名(name , 点リストなど , options);
+
+nameは,プロットデータの名称で,関数ごとに決められた頭部のあとに付けられる。たとえば,線分を描く Listplot() でできるプロットデータは,頭部が"sg"であり,nameを"1"とすれば,"sg1" という名称のプロットデータができる。name指定は不要の場合もあり,その場合は \ketcindy が自動的に名称を作成する。なお,name に演算記号は使えないので,番号として負の数は使えない。
+
+点リストなどには,点の座標,点の識別名,複数の点のリスト,複数の点を示す文字列などがあり,関数によって異なる。点はCinderellaで作図した幾何要素の点を利用できる。
+
+optionsは,線種・表示する文字列・解像度・出力の有無などを指定するオプション群。
+
+ 線種はつぎの4通り。 初期設定は実線。
+
+\begin{tabbing}
+1234\=5678901234567\=\kill
+\>"dr, n" \>太さnの実線で描く。\\
+\>"da,m,n"\>破線を描く。\\
+\>\> mは破線の長さ,nは破線の間隔(m,nは省略可)\\
+\> \>m,n オプションはCinderellaの描画面には反映されない。\\
+\>"id,m,n" \>ギャップからはじまる破線を描く。\\
+\>"do,m,n"\>点線で描く。\\
+\>\>mは点の間隔,nは太さ(m,nは省略可)
+\end{tabbing}
+
+描画色指定は,RGBまたはCMYKのリストで指定するか,色名を用いる。
+
+\hspace{10mm}【例】\verb|"Color=[0,0.7,0]"| で暗い緑になる。
+
+出力の有無は
+\begin{tabbing}
+1234\=567890123\=\kill
+ \>"notex"\>Cinderella画面上の図形を出力しない\\
+ \>"nodisp" \>Cinderella画面上にも出力しない
+ \end{tabbing}
+
+ "nodisp"は画面上にも,Rへのデータにも出力されないが,プロットデータは作成されるので,プロットデータだけを利用したい場合に有効である。
+
+\hspace{10mm}【例】\verb|pdata=Circledata([A,B],["nodisp"]);|
+
+として,後にプロットデータ pdata を利用する。
+
+その他,次のようなオプションがある。
+\begin{tabbing}
+1234\=567890123\=\kill
+ \>"Size=n"\>点の大きさ,線の太さの指定\\
+ \>"Num=n"\>曲線の場合の分割数(プロットデータの個数+1)\\
+\end{tabbing}
+
+%=========== 点・直線 ======================
+\subsubsection{点・線分・直線}
+\begin{description}
+
+\vspace{\baselineskip}
+\hypertarget{pointdata}{}
+\item[関数]Pointdata(name , 点リスト , options)
+\item[機能]点のデータを作成する。
+\item[説明]与えられた座標の点データを作成する。オプションは"Size=","Color=","Inside"。
+
+Inside オプションは,点の内部についての指定。ただし,Cinderellaの描画面には反映されない。
+
+0 : 白抜き
+
+0から1まで : 濃度
+
+-1 : 塗らない
+
+カラーコードまたは色名 : その色で塗る
+
+\vspace{\baselineskip}
+【例】
+
+(1) 座標指定で2つの点データを作る。
+
+\hspace{10mm} \verb|Pointdata("1",[[1,2],[-2,3]]);|
+
+(2) 作図した点A,Bについて,点データを作る。
+
+\hspace{10mm} \verb|Pointdata("1",[A,B]);|
+
+\hspace{5mm}A,Bが作図されていない場合は作成されない。
+
+\hspace{5mm}Cinderellaの描画面上では既存の点A,Bに黒の点が重なって表示される。
+
+(3) Aの位置に大きさ4で点を作る。
+
+\hspace{10mm} \verb|Pointdata("1",A,["size=4"]);|
+
+(4) 点データを作り,TeXにオプション0(白抜き)で描く
+
+\hspace{10mm}\verb|Pointdata("1",[A,B],["Inside=0"]);|
+
+(5) 点データを作るが,TeXには出力しない
+
+\hspace{10mm}\verb|Pointdata("1",[[3,4],[5,6]],["notex"]);|
+
+(6)点データを作るが,TeXには出力せず画面上にも表示しない。
+
+\hspace{10mm} \verb|Pointdata("1",[[3,4],[5,6]],["nodisp"]);|
+
+\begin{layer}{150}{0}
+\putnotese{90}{5}{ \input{Fig/pointdata}}
+\end{layer}
+
+(7) 節点を明示した木を描く
+\begin{verbatim}
+Ptsize(3);
+Pointdata("1",[[1,2],[3,4],[5,2]]);
+Listplot("1",[[0,0],[1,2],[3,4],[5,2],[4,0]]);
+Listplot("2",[[1,2],[2,0]]);
+Listplot("3",[[5,2],[6,0]]);
+\end{verbatim}
+
+注) 幾何点の有無など,付録の「\hyperlink{mkpttable}{点の作図についての比較表}」を参照のこと。
+
+%\begin{flushright}\hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+%\vspace{\baselineskip}
+%\hypertarget{drwpt}{}
+%\item[関数]Drwpt(点,option), Drawpoint(点,options)
+%\item[機能]点を表示する
+%\item[説明]座標または幾何点の識別名を与えて点を表示する。これだけではCinderellaの描画面には描かれないので,描画面にも表示するにはCinderellaの作図ツールで作図するか,Pointdata() または Putpoint() を用いる。
+
+%複数の点の場合は座標または識別名はリストで与える。
+
+%optionに数字 0 を入れると,白抜きで表示する。なお白抜きの場合は,Ptsize()で点の大きさを少し大きめにとるとよい。
+
+%可読性を高めるときはDrawpointを推奨する。
+
+%\vspace{\baselineskip}
+%【例】座標(1,1)と(4,3)に点を表示する。Cinderellaの描画面には描かれない。
+
+%\hspace{10mm} \verb|Drwpt([[1,1],[4,3]]);|
+
+%\vspace{\baselineskip}
+%【例】Cinderellaで点A,B,Cを作図しておき,\TeX で表示する。
+
+%\hspace{10mm} \verb|Drwpt([A,B,C]); |
+
+%\vspace{\baselineskip}
+%【例】線分ABの右端(B)を白抜きで表示する
+
+%\begin{layer}{150}{0}
+%\putnotese{50}{8}{\input{Fig/drawpoint}}
+%\end{layer}
+%\begin{verbatim}
+ % Ptsize(5);
+%Listplot([A,B]);
+%Drawpoint(B,0);
+%\end{verbatim}
+
+%※Drawpoint([A,B],0);とすれば,両端が白抜きになる。
+
+%\vspace{\baselineskip}
+%{\bf 点の表示方法}
+
+
+%\begin{flushright}\hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+\vspace{\baselineskip}
+\hypertarget{putpoint}{}
+\item[関数]Putpoint(点名 , 座標1 ,座標2 )
+\item[機能]点を作る
+\item[説明]識別名が点名の点を,既存でなければ座標1に作る。既存ならば座標2に移動する。Texには出力されない。
+
+\vspace{\baselineskip}
+【例】点Aを作る。
+
+(1,1) に固定点Aを作る。 この点は動かすことができない。
+
+\hspace{10mm} \verb|Putpoint("A",[1,1]);|
+
+(1,1)に自由点を作るには次のようにする。
+
+\hspace{10mm}\verb|Putpoint("A",[1,1],[A.x,A.y]);|
+
+この点は座標2の効果により,自由点となり,ドラッグして動かすことができる。
+
+\vspace{\baselineskip}
+注)点名は半角アルファベットとする。数字や漢字でもCinderellaでは点ができるが,Rでエラーとなる。
+
+\vspace{\baselineskip}
+\hypertarget{putintersect}{}
+\item[関数]Putintersect(点名 , PD1 , PD2 , [No] )
+\item[機能]2曲線の交点を作る
+\item[説明]PD1,PD2は2曲線のプロットデータ名。作成される点は幾何点。
+
+描画範囲に交点が1つだけのとき,第4引数がなくても交点が作られる。
+
+描画範囲に2つ以上の交点がある場合,第4引数を省略するとコンソールに交点の座標のリストと,「Choose point number 」というガイドが表示される。そこで,引数のNoとして,その番号を指定すると,その点が作られる。この関数で作成されるのは幾何点だけなので,\TeX の図に点として明示するためにはPointdata()で書き出す。
+
+次の例は,3次曲線と直線の交点を3つとも取ったものである。
+
+\begin{layer}{150}{0}
+\putnotese{80}{5}{\input{Fig/putintersect}}
+\end{layer}
+
+\begin{verbatim}
+Plotdata("1","x^3-4*x","x",["Num=200"]);
+Plotdata("2","1/2*x+1","x");
+Putintersect("P","gr1","gr2",1);
+Putintersect("Q","gr1","gr2",2);
+Putintersect("R","gr1","gr2",3);
+Pointdata("1",[P,Q,R],["size=4"]);
+\end{verbatim}
+
+\vspace{\baselineskip}
+ 交点が存在しない場合は,「No intersect point」がコンソールに表示される。
+
+\vspace{\baselineskip}
+\hypertarget{putoncurve}{}
+\item[関数]Putoncurve(点の名前, プロットデータ, options)
+\item[機能]曲線上に点を乗せる。
+\item[説明]点が存在しない場合は新たに作る。すでにその点が存在する場合は,その点の$x$座標を使う。初期値の$x$座標の 初期設定は 0。
+
+optionsは,$x$座標の範囲をリストで与える。
+
+\vspace{\baselineskip}
+【例】アステロイド上の動点P をとる。
+\begin{verbatim}
+Paramplot("1","[2*cos(t)^3,2*sin(t)^3]","t=[0,2*pi]");
+Putoncurve("P","gp1",[-1,1]);
+\end{verbatim}
+点Pがアステロイド上にでき,この点はドラッグするとアステロイド上を $-1 \leq x\leq 1$ の範囲で動かすことができる。ただし,-1,1の付近はy座標の判断の関係でぴったりはいかない。
+
+ \begin{center} \scalebox{0.9}{\input{Fig/putoncurve.tex}} \end{center}
+
+\begin{flushright}\hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+%\vspace{\baselineskip}
+\hypertarget{putonline}{}
+\item[関数]Putonline(点名 , 座標1 ,座標2 )
+\item[機能]直線上に点を作る
+\item[説明]座標1,座標2を通る直線上に点名の点を作る。できた点は直線に対してインシデントとなる。
+
+\vspace{\baselineskip}
+【例】点A,\ Bを通る直線上に点Pをとる。
+
+\verb|Putonline("P",A,B);|
+
+\vspace{\baselineskip}
+\hypertarget{putonseg}{}
+\item[関数]Putonseg(点名 , 座標1 ,座標2 )
+\item[機能]線分上に点を作る
+\item[説明]座標1,座標2を端点とする線分上に点名の点を作る。できた点は線分に対してインシデントとなる。指定した点がすでに存在する場合は動かさない。
+
+\vspace{\baselineskip}
+【例】
+
+線分AB上に点Cをとる。
+
+ \verb|Putonseg("C",A,B);|
+
+点(-1,0),(2,2)を通る線分上に点Cをとる。
+
+ \verb|Putonseg("C",[[-1,0],[2,2]]);|
+
+\vspace{\baselineskip}
+\hypertarget{reflectpoint}{}
+\item[関数]Reflectpoint(点,対称点または対称軸)
+\item[機能]点の鏡映の座標を返す。
+\item[説明]点を指定された点または軸に関して対称移動した点の座標を返す。対称軸は[ 点1, 点2 ]で指定
+
+\vspace{\baselineskip}
+【例】点A〜Fを作図しておき,C〜FをAの鏡映の位置に配置する。
+
+\begin{layer}{150}{0}
+\putnotese{70}{10}{\scalebox{0.9}{\input{Fig/reflectpoint}}}
+\end{layer}
+
+\hspace{5mm} CはBに関してAと対称な点
+
+\hspace{5mm} Dは点(2,3)に関してAと対称な点
+
+\hspace{5mm} Eは点(1,0) に関して (-1,1) と対称な点
+
+\hspace{5mm} Fは直線CEに関してAと対称な点
+
+\begin{verbatim}
+C.xy=Reflectpoint(A,B);
+D.xy=Reflectpoint(A,[[2,3]]);
+E.xy=Reflectpoint([-1,1],[[1,0]]);
+F.xy=Reflectpoint(A,[C,E]);
+Lineplot([C,E],["do"]);
+\end{verbatim}
+
+\vspace{\baselineskip}
+注)鏡映はCinderellaの作図ツールでも作成することができる。場合によってはCinderellaで作図する方が簡明である。
+
+%\begin{flushright}\hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+\vspace{\baselineskip}
+\hypertarget{rotatepoint}{}
+\item[関数]Rotatepoint(点 ,角度 , 中心)
+\item[機能]点の位置を回転する
+\item[説明]点を,中心で示された点の周りに回転した座標を返す。角度は弧度法で与える
+
+\vspace{\baselineskip}
+【例】点A〜Eは作図しておき,C〜Eをそれぞれの位置に配置する。
+
+\begin{layer}{150}{0}
+\putnotese{75}{5}{ \scalebox{0.8}{\input{Fig/rotatepoint}}}
+\end{layer}
+\begin{spacing}{1.5}
+点CはAを,Bに関して$\dfrac{2}{3}\pi $だけ回転した点
+
+点Dは点(5,2)を,Bに関して$\dfrac{\pi}{3}$ だけ回転した点
+\end{spacing}
+点Eは点(3,0)をAに関して $-\dfrac{\pi}{4} $だけ回転した点
+
+\begin{verbatim}
+C.xy=Rotatepoint(A,2*pi/3,B);
+D.xy=Rotatepoint((5,2),pi/3,B);
+E.xy=Rotatepoint([3,0],-pi/4,A);
+\end{verbatim}
+注)図の点線は位置関係を示すためのもの。
+
+点名や座標は,実際にはLetter()関数で記述する。
+
+\vspace{\baselineskip}
+\hypertarget{scalepoint}{}
+\item[関数]Scalepoint(点,比率ベクトル,中心)
+\item[機能]点の位置の拡大・縮小を行う
+\item[説明]点を,指定された中心を原点とする座標系で,比率ベクトルの分だけ拡大・縮小した位置の座標を返す。
+
+\vspace{\baselineskip}
+【例】点A〜Fは作図ツールで適当な位置にとっておく。
+
+点Dを,点Aを原点を中心に横に3倍,縦に2倍した位置に置く。
+
+点Eを,点Aを点Bを中心に横に3倍,縦に2倍した位置に置く。
+
+点Fを,点Aを原点を中心にベクトル$\overrightarrow{OC} $で示された比率の位置に置く。
+\begin{verbatim}
+D.xy=Scalepoint(A,[3,2],[0,0]);
+E.xy=Scalepoint(A,[3,2],B);
+F.xy=Scalepoint(A,C.xy,[0,0]);
+Arrowdata("1",[[0,0],C]);
+Pointdata("1",[A,B,C,D,E,F],["size=2"]);
+Letter([A,"e2","A("+A.x+","+A.y+")"]);
+Letter([B,"e2","B("+B.x+","+B.y+")"]);
+Letter([C,"e2","C("+C.x+","+C.y+")"]);
+Letter([D,"e2","D("+D.x+","+D.y+")"]);
+Letter([E,"e2","E("+E.x+","+E.y+")"]);
+Letter([F,"e2","F("+F.x+","+F.y+")"]);
+\end{verbatim}
+\vspace{\baselineskip}
+\begin{center} \input{Fig/scalepoint} \end{center}
+
+点A,B,Cをドラッグすると,インタラクティブにD,E,F の位置が変わる。
+
+\vspace{\baselineskip}
+\hypertarget{translatepoint}{}
+\item[関数]Translatepoint(点 , 移動ベクトル)
+\item[機能]点を平行移動する
+\item[説明]点を移動ベクトルで示された分だけ平行移動した点の座標を返す
+
+\vspace{\baselineskip}
+【例】点A〜Dは作図しておく。
+
+点Cを点Aを$x$軸方向に2 , $y$軸方向に3だけ平行移動した点にする。
+
+点Dを点Aをベクトル$\overrightarrow{OB} $だけ平行移動した点にする。
+\begin{verbatim}
+C.xy=Translatepoint(A,[2,3]);
+D.xy=Translatepoint(A,B.xy);
+\end{verbatim}
+
+\hspace{20mm} \scalebox{0.9}{\input{Fig/translatepoint}}
+
+\begin{flushright}\hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+\hypertarget{arrowdata}{}
+\item[関数]Arrowdata(name,[始点 , 終点] , options)
+\item[機能]2点間を結ぶ矢線を描く。
+\item[説明]name は,座標を数値で与えるときに必要。幾何要素の識別名で与えるときはなくてもよい。
+
+optionsは矢じりの形状などの指定。
+
+\hspace{10mm} [ 矢じりの大きさ, 開き角, 矢じり位置,切り込み位置, 線種, 線の表示色,トリミング]
+
+のリストで与える。矢じりの大きさから切り込み位置までは数で,後方のオプションを指定するときは,前方も書く。
+
+開き角は60分法で与える。ただし,° はつけない。5未満の時は18°の倍数指定とする。
+
+矢じり位置は,線分の長さを1とした始点からの距離。
+
+切り込み位置は,0のとき三角形の矢じり,1のとき線のみの矢じりとなる。
+
+ただし,Cinderellaの画面上には全ては反映されない。たとえば,太さ指定をしても画面上では太さは同じ。
+
+トリミング :"Cutend=m" または "Cutend=[m,n]" で,右辺が数のときは両端をmだけカットする。リストのときは始点をm,終点をnだけカットする。mが負のときは延長する。
+
+これらの設定は,\hyperlink{setarrow}{Setarrow()} で初期設定を変更することができる。
+
+\vspace{\baselineskip}
+【例】オプションの設定とその結果を示す。
+
+\begin{verbatim}
+Arrowdata("1",[A,B]);
+Arrowdata("2",[[1,0],[2,3]],[2]);
+Arrowdata("3",[[2,0],[3,3]],[3,45]);
+Arrowdata("4",[[3,0],[4,3]],[3,1,0.5]);
+Arrowdata("5",[[4,0],[5,3]],[3,1,1,0.5]);
+Arrowdata("6",[[5,0],[6,3]],[3,1,1,1]);
+Arrowdata("7",[[6,0],[7,3]],[3,"dr,2"]);
+Arrowdata("8",[[7,0],[8,3]],[3,1,1,0.5,"Color=red"]);
+\end{verbatim}
+\hspace{20mm}\input{Fig/arrowdata}
+
+【例】2つの円を矢線で結ぶ。
+
+\begin{layer}{150}{0}
+\putnotese{75}{0}{\input{Fig/trimarrow}}
+\end{layer}
+\hspace{20mm}
+
+\begin{verbatim}
+ Circledata("1",[A,A.xy+[0.5,0]]);
+ Circledata("2",[B,B.xy+[0.7,0]]);
+ Arrowdata([A,B],["Cutend=[0.5,0.7]"]);
+ Letter([A,"c","A",B,"c","B"]);
+\end{verbatim}
+Cinderellaの作図ツールで2点ABをとっておく。
+
+円A,Bの半径が同じ(たとえば0.5)であれば,\verb|Arrowdata([A,B],["Cutend=0.5"]);| でよい。
+
+\vspace{\baselineskip}
+\hypertarget{setarrow}{}
+\item[関数]Setarrow([arrowsize,angle,position,cut,linestyle])
+\item[機能]Arrowdata,Arrowheadで描く矢印のスタイルを設定する。
+\item[説明]arrowsize,angle,position,cut,linestyleは,順に大きさ(1),開き角(18),位置(1),切り込み(0),矢線スタイル("dr")である。(カッコ内はデフォルト値)
+
+
+%\begin{flushright}\hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+\vspace{\baselineskip}
+\hypertarget{arrowhead}{}
+\item[関数]Arrowhead(点 , 方向 , options) , Arrowhead(点 , プロットデータ,options)
+\item[機能]点に矢じりだけを描く
+\item[説明]指定された位置に,指定された方向を向いた矢じりだけを描く。
+
+点は座標または幾何要素名。方向は原点から見て座標[a,b]の方向。
+
+optionsは [大きさ,矢じりの開き角,形状と位置] のリスト。
+
+矢じりの開き角は60分法で片側半分の角。
+
+形状は, "f" :塗りつぶしの三角形( 初期設定)または" l " : ラインのみ。
+
+ただし,塗りつぶし矢じりは画面上では塗りつぶしにならない。
+
+位置は,"t"( 初期設定)または "c" , "b"
+\begin{tabbing}
+1234\=567890123\=\kill
+\>"t" は矢じりの先端が終点に一致\\
+\>"c" は三角形の中心が終点と一致\\
+\>"b" は終点が矢じりの底辺にのる。
+\end{tabbing}
+プロットデータを指定したときは,曲線上の点に矢じりをつける。
+
+曲線には向きがあり,それによって矢じりの向きが決まる。" Invert(PD) " とすると反対向きの矢じりになる。
+
+曲線の向きとは,曲線を描くときの順序で,プロットデータの順序でもある。invert() はこのプロットデータを逆順にするものである。
+
+\vspace{\baselineskip}
+
+【例】
+
+\vspace{\baselineskip}
+%\hspace{6mm}
+\begin{layer}{150}{0}
+\putnotese{0}{0}{点 A が右図の位置のとき}
+\putnotese{80}{8}{\input{Fig/ForRef-Arrowhead-1}}
+\putnotese{0}{7}{(ア) Arrowhead(A,[-1,1]);}
+\putnotese{0}{14}{(イ) Arrowhead([1,1],[-1,1],[2,60]);}
+\putnotese{0}{21}{(ウ) Arrowhead(A,[-1,1],[2,30,"b"]);}
+\putnotese{0}{28}{(エ) Arrowhead([1,1],[-1,1],[2,20,"lc"]);}
+\putnotese{0}{38}{(ア)}
+\putnotese{30}{38}{(イ)}
+\putnotese{60}{38}{(ウ)}
+\putnotese{90}{38}{(エ)}
+\putnotese{0}{45}{ \input{Fig/ForRef-Arrowhead-2}}
+\putnotese{30}{45}{ \input{Fig/ForRef-Arrowhead-3}}
+\putnotese{60}{45}{ \input{Fig/ForRef-Arrowhead-4}}
+\putnotese{90}{45}{ \input{Fig/ForRef-Arrowhead-5}}
+\end{layer}
+
+\vspace{75mm}
+%\hspace{6mm}
+\begin{layer}{150}{0}
+\putnotese{0}{0}{曲線 crBC 上の点 D が右図のようなとき}
+\putnotese{80}{8}{ \input{Fig/ForRef-Arrowhead-6}}
+\putnotese{96}{22}{crBC}
+\putnotese{0}{7}{(オ) Arrowhead(D,"crBC");}
+\putnotese{0}{14}{(カ) Arrowhead(D,"crBC",[2]);}
+\putnotese{0}{21}{(キ) Arrowhead(D,"crBC",[2,30,"l"]);}
+\putnotese{0}{28}{(ク) Arrowhead(D,"Invert(crBC)");}
+\putnotese{0}{38}{(オ)}
+\putnotese{30}{38}{(カ)}
+\putnotese{60}{38}{(キ)}
+\putnotese{90}{38}{(ク)}
+\putnotese{0}{45}{ \input{Fig/ForRef-Arrowhead-7}}
+\putnotese{30}{45}{ \input{Fig/ForRef-Arrowhead-8}}
+\putnotese{60}{45}{ \input{Fig/ForRef-Arrowhead-9}}
+\putnotese{90}{45}{ \input{Fig/ForRef-Arrowhead-10}}
+\end{layer}
+
+\vspace{70mm}
+
+\vspace{\baselineskip}
+\hypertarget{lineplot}{}
+\item[関数]Lineplot(name , 2点のリスト , options)
+\item[機能]2点のリストで示された点を結ぶ直線を描く。
+\item[説明]2点のリストは座標または幾何要素の名前で与える。
+
+options は次の通り。
+
+線種"dr, n", "da,m,n" , "do,m,n"
+
+ "+"半直線を描く。
+
+"dr" , "da" , "do" と "+" はリストにして両方指定することができる。
+
+点のリストが,座標ではなく幾何要素名のリストの場合は,nameは省略できる。
+
+いくつか例を示す。
+
+\vspace{\baselineskip}
+各座標を結ぶ直線を引く
+
+\hspace{5mm} \verb|Lineplot("1",[[0,0],[1,2]])|
+
+Cinderellaの描画ツールで2点A,Bをとっておき,直線ABを引く
+
+\hspace{5mm} \verb|Lineplot([A,B]);|
+
+optionの働きの例
+\begin{tabbing}
+1234\=56789012345678901234567890123456789\=\kill
+ \> \verb|Lineplot([A,B],["dr,0.5","+"]);|\>Aを端点とする半直線を引く\\
+ \> \verb|Lineplot([C,D],["dr,2"]);|\>直線CDを太さ2で描く\\
+ \> \verb|Lineplot([E,F],["da"]);| \>直線EFを破線で描く\\
+ \> \verb|Lineplot([G,H],["do"]);|\>直線GHを点線で描く
+\end{tabbing}
+結果は,次図左上から。
+
+\vspace{\baselineskip}
+\hspace{20mm} \input{Fig/lineplot}
+
+\begin{flushright}\hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+\vspace{\baselineskip}
+\hypertarget{listplot}{}
+\item[関数]Listplot(name , 点のリスト , options)
+\item[機能]点のリストで示された点を結ぶ。
+\item[説明]点のリストは座標または幾何要素名のリストで与える。点が,座標ではなく幾何要素名の場合は,nameは省略可
+
+プロットデータの名前は,"sg" に引数の name を付加したものとなる。
+
+ options は次の通り。
+
+線種 "dr, n", "da,m,n" , "do,m,n"
+
+トリミング :"Cutend=m" または "Cutend=[m,n]"
+
+数のときは両端をmだけカットする。リストのときは始点をm,終点をnだけカットする。mが負のときは延長する。
+
+\begin{tabbing}
+1234567890123456789012345678901234\=\kill
+optionsの使用例\\
+\verb|Listplot([A,B]);|\>線分ABを描く。太さは 初期設定。\\
+\verb|Listplot([C,D],["dr,2"]);| \>線分CDを描く。太さ2\\
+\verb|Listplot([E,F],["da"]);| \>線分EFを破線で描く\\
+\verb|Listplot([G,H],["da,3,1"]);| \>線分GHを破線で描く。線を長く\\
+\verb|Listplot([K,L],["da,1,3"]);|\>線分KLを破線で描く。間隔を空ける\\
+\verb|Listplot([M,N],["do"]);|\>線分MNを点線で描く。\\
+\verb|Listplot([O,P],["do,3"]);| \>線分OPを点線で描く。間隔を空ける\\
+\verb|Listplot([Q,R],["do,3,3"]);| \>線分QRを点線で描く。間隔を空けて太く\\
+結果は次図左から。
+\end{tabbing}
+\begin{center} \scalebox{0.9}{\input{Fig/listplot3}}\end{center}
+
+【例】三角形を描く。
+
+Cinderellaの作図ツールで三角形ABCを描いておく。あるいは,単に3点A,B,Cをとるだけでもよい。
+
+\begin{layer}{150}{0}
+\putnotese{75}{0}{\input{Fig/listplot1}}
+\end{layer}
+\hspace{20mm}
+
+\begin{verbatim}
+Addax(0);
+Listplot([A,B,C,A]);
+\end{verbatim}
+
+点の位置は座標で指定してもよい。
+
+その場合は name が必要。
+
+\verb| Listplot("1",[[0,0],[2,0],[1,2],[0,0]]);|
+
+\vspace{\baselineskip}
+【例】2つの円を線分で結ぶ。
+
+\begin{layer}{150}{0}
+\putnotese{75}{0}{\input{Fig/trimseg}}
+\end{layer}
+\hspace{20mm}
+
+\begin{verbatim}
+ Circledata("1",[A,A.xy+[0.5,0]]);
+ Circledata("2",[B,B.xy+[0.7,0]]);
+ Listplot([A,B],["Cutend=[0.5,0.7]"]);
+ Letter([A,"c","A",B,"c","B"]);
+\end{verbatim}
+Cinderellaの作図ツールで2点ABをとっておく。
+
+円A,Bの半径が同じであれば,\verb|Listplot([A,B],["Cutend=0.5"]);| でよい。
+
+\vspace{\baselineskip}
+プロットデータは点の座標のリストである。したがって,プロットデータを自作してListplot()で表示することができる。
+
+\vspace{\baselineskip}
+【例】有限フーリエ級数展開
+
+ \[\cfrac{\pi}{2}+\sum_{n=0}^{30} \cfrac{1-(-1)^n}{n}\sin nx\]
+
+次のようにCindyscriptで関数を定義し,プロットデータpd を作って引数に渡す。
+\begin{verbatim}
+f(x):=(
+s=pi/2;
+repeat(30,n,s=s+(1-(-1)|^n)/n*sin(n*x));
+);
+pd=apply(0..200,t,
+x=-2*pi+t*4*pi/200;
+[x,f(x)];
+);
+Listplot("1",pd);
+Expr([[-2*pi,-0.5],"s","-2\pi",[-pi,-0.5],"s","-\pi",[pi,-0.5],"s",
+"\pi",[2*pi,-0.5],"s","2\pi",[0,pi],"w2","\pi"]);
+\end{verbatim}
+
+\vspace{\baselineskip}
+\hspace{20mm}\input{Fig/fourier}
+
+\vspace{\baselineskip}
+ リストの長さには制限がある。たとえば,タートルグラフィクスを用いたシェルピンスキーのギャスケットでは200くらいずつのリストに分割する。
+
+ \hspace{20mm}\scalebox{0.8}{ \input{Fig/listplot2}}
+\begin{flushright}\hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+\vspace{\baselineskip}
+\hypertarget{mksegments}{}
+\item[関数]Mksegments()
+\item[機能]すべての幾何線分のPD を作成
+\item[説明]Cinderellaの「線分を加える」ツールで描いたすべての線分をそのままプロットデータとする。たとえば,線分ABを作ると,プロットデータsgABが作成される。その後,インスペクタで点Bの識別名を変更(たとえばQに)すると,プロットデータ名も変更される。線分はすでに描かれていてもよい。
+
+\vspace{\baselineskip}
+【例】等比数列の例題
+
+三角形の各辺の中点を結んでできる三角形を次々に作っていく,等比数列の図を描く。
+
+まず「線分を加える」ツールで三角形ABCを描く。
+
+「中点を加える」ツールで各辺の中点を取り,「線分を加える」ツールで中点を結ぶ。
+
+これを繰り返す。\verb|Mksegments()| を書いておけば,\verb|Listplot([A,B,C]| などを書かなくても,作図ができた時点で,図のデータができる。
+
+\includegraphics[bb=0.00 0.00 438.02 327.02,width=5.5cm]{Fig/gpro01.pdf} \input{Fig/gpro02}
+
+\vspace{\baselineskip}
+\hypertarget{framedata}{}
+\item[関数]Framedata(name , リスト,options)
+\item[機能]矩形を描く
+\item[説明]リストの形は2通り。
+
+その1:[中心 ,横 , 縦] で,矩形を描く。横,縦は中心からの距離。
+
+その2:2点のリスト。点が座標でなく名称のときはnameは省略できる。
+
+点の座標は点の名前でもよい。点を座標で与える場合はnameは省略できない。
+
+リストを省略した場合は,描画範囲と同一の矩形を描く。
+
+その2のタイプでは,option として,"center" または "corner" がある。"center" のときは,中心と対角点( 初期設定),"corner" のときは2点を対角点として解釈する。
+
+以下にいくつか例を示す
+\begin{tabbing}
+1234567890123456789012345678901234\=\kill
+\verb|Framedata("1");|\> 描画範囲(SW,NE)と同一の矩形を描く\\
+\verb|Framedata("2",[[0,0],2,2]);| \> 原点を中心とする縦横幅4の正方形を描く\\
+\verb|Framedata("3",[A,1.5,1.2]);|\> 点Aを中心とする横3,縦2.4の矩形を描く。(図左)\\
+\verb|Framedata([B,C]);|\> 点Bを中心,点Cを頂点とする矩形を描く。(図中央)\\
+\verb|Framedata([D,E],["corner"]); |\>点D,Eを対角点とする矩形を描く。(図右)
+ \end{tabbing}
+\begin{center}\includegraphics[bb=0.00 0.00 348.15 106.16,width=12cm]{Fig/Framedata.pdf}\end{center}
+
+矩形の角を丸めたい場合は,Framedata()ではなく,\hyperlink{ovaldata}{Ovaldata()}を使うとよい。
+
+\vspace{\baselineskip}
+\hypertarget{polygonplot}{}
+\item[関数]Polygonplot(name , 点リスト , 整数,options)
+\item[機能]2点を半径とする円に内接する正多角形を描く。
+\item[説明]点リストを[A,B] とすると,Aを中心とする半径ABの円周上に点をとって正多角形を描く。ただし円は描かない。A,B は座標でもよい。
+
+点リストが座標ではなく作図してある点の名称のとき,オプションに"Geo=y" をつけると,頂点の幾何点を作る。幾何点の名称はBに番号を付けたものとなる。整数でない数を指定した場合は,きちんと閉じない折れ線が描かれる。
+
+\vspace{\baselineskip}
+【例】点リストとoptionの違いによる作図と,TeXの図を示す。
+
+\begin{verbatim}
+Addax(0);
+Polygonplot("1",[[-4,1],[-4,3]],7);
+Polygonplot("2",[A,B],7);
+Polygonplot("3",[C,D],7,["Geo=y"]);
+\end{verbatim}
+
+\hspace{10mm}\includegraphics[bb=0.00 0.00 541.03 175.01,width=10cm]{Fig/polygonplot2.pdf}
+
+\hspace{10mm}\input{Fig/polygonplot1}
+
+
+円に内接する形でなく,与えられた線分ABを1辺とする正多角形を描くには次のようにする。
+
+線分ABは,Cinderellaの作図ツールなどで描かれているものとする。ただし,線分でなく,両端の点が与えられているだけでもよい。Cindyscriptで点A,Bが複素平面上にあるものとして,多角形の頂点の位置を計算する。
+
+\vspace{\baselineskip}
+【例】ABを1辺とする正五角形を描く。
+
+\begin{verbatim}
+n=5;
+pti=[complex(A),complex(B)];
+th=2*pi/n;
+repeat(n-2,s,
+z1=pti_s;
+z2=pti_(s+1);
+z=z2+(z2-z1)*(cos(th)+i*sin(th));
+pti=append(pti,z);
+);
+pt=apply(pti,gauss(#));
+pt=append(pt,A.xy);
+Listplot("1",pt);
+\end{verbatim}
+ptiは,各頂点に対応する複素数のリスト,ptが各頂点の座標のリストである。
+
+\begin{flushright}\hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+\end{description}
+%\newpage
+
+% ====== 曲線 ==============
+\subsubsection{曲線}
+\begin{description}
+
+\hypertarget{bezier}{}
+\item[関数]Bezier(名前,節点リスト,制御点リスト,[オプション] )
+\item[機能]ベジェ曲線を描く
+\item[説明]制御点は,各区間に対して,3次の場合2個,2次の場合1個のリストで与える。
+
+オプションは
+
+"Num=n": 節点間の分割数(分点数 $-1$)を指定できる。 ベジェ曲線とスプライト曲線の関数は節点間が短い場合が多いので初期設定は10になっている。Plotdata()などと違い,大きい数(200など)を指定すると,全体の分割数が増大して描画時間がかかるようになってしまうので注意。
+
+\vspace{\baselineskip}
+【例】
+
+\begin{layer}{150}{0}
+\putnotese{60}{-10}{\scalebox{0.9}{ \input{Fig/checkbe1}}}
+\end{layer}
+
+2次ベジェ曲線
+
+\verb|Bezier("1",[A,B],[C]);|
+
+\vspace{20mm}
+
+\begin{layer}{150}{0}
+\putnotese{60}{-10}{\scalebox{0.9}{\input{Fig/checkbe2}}}
+\end{layer}
+
+3次ベジェ曲線
+
+\verb|Bezier("2",[A,B],[C,D]);|
+
+\vspace{20mm}
+
+\begin{layer}{150}{0}
+\putnotese{60}{-10}{\scalebox{0.9}{ \input{Fig/checkbe3}}}
+\end{layer}
+
+%ベジェ曲線をつなげる
+
+%Bezier("3",[A,B,C],[[D],[E,F]]);
+
+%\vspace{20mm}
+
+%\begin{layer}{150}{0}
+%\putnotese{60}{5}{ \input{Fig/checkbe4}}
+%\end{layer}
+
+%D,B,E を1直線上にとると,滑らかにつながる
+節点を増やす。2次と3次。
+
+\verb|Bezier("3",[A,B,C],[[D],[E,F]]);|
+
+\vspace{20mm}
+
+全て同じ次数の場合,次のようにしてもよい。
+\newpage
+
+\verb|Bezier("4",[A,B,C,D],[E,F,G,H,K,L] ); |
+
+\begin{layer}{150}{0}
+\putnotese{20}{2}{\input{Fig/checkbe7}}
+\end{layer}
+
+\vspace{35mm}
+
+オプションの例
+
+\verb|Bezier("5",[A,B,C],[[D],[E,F]],["Num=3"]);|
+
+\hspace{20mm}\input{Fig/checkbe5}
+
+\verb|Bezier("6",[A,B,C],[[D],[E,F]],["Num=40","da"]);|
+
+\hspace{20mm}\input{Fig/checkbe6}
+
+Numを(ベクトルとして)区間ごとに与えることもできる。
+
+\verb|Bezier("1",[A,B,C,D],[E,F,G,H,K,L],["Num=[2,3,4]"]);|
+
+\hspace{10mm} \input{Fig/checkbe8}
+
+%\begin{flushright}\hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+\vspace{\baselineskip}
+\hypertarget{beziersmooth}{}
+\item[関数]Beziersmooth(名前,節点リスト,[オプション] )
+\item[機能]節点間を3次ベジェ曲線でスムーズに結んだ曲線を描く
+\item[説明]節点をはさむ制御点は1直線上にとる(したがって,1つは半自由点で,直線上しか動けない)。
+制御点は自動的に配置される。その後,節点や制御点を動かして,描きたいものにする。
+
+\vspace{\baselineskip}
+【例】
+
+\verb|Beziersmooth("1",[A,B,C,D]);|
+
+\begin{layer}{150}{0}
+\putnotese{70}{35}{bz1}
+\putnotese{40}{5}{ \input{Fig/checksm1}}
+\end{layer}
+
+\vspace{40mm}
+その後,節点や制御点を動かして,描きたいものにする。ただし,C2p は C1q と B を通る直線上しか動けない。C3p は C2q と C を通る直線上しか動けない。
+
+\begin{layer}{150}{0}
+\putnotese{70}{30}{bz1}
+\putnotese{40}{05}{ \input{Fig/checksm2}}
+\end{layer}
+
+\vspace{35mm}
+
+\vspace{\baselineskip}
+\hypertarget{beziersym}{}
+\item[関数]Beziersym(名前,節点リスト,[オプション] )
+\item[機能]節点間を3次ベジェ曲線でスムーズに結んだ曲線を描く
+\item[説明]節点をはさむ制御点は節点に関し対称(片方は表示されず,動かせない)。
+制御点は自動的に配置される。その後,節点や制御点を動かして描きたいものにする。
+
+\vspace{\baselineskip}
+【例】
+
+\begin{layer}{150}{0}
+\putnotese{70}{27}{bz1}
+\putnotese{40}{00}{ \input{Fig/checksy1}}
+%\putnotese{0}{0}{Beziersym("1",[A,B,C,D]);}
+%\putnotese{0}{15}{C2p と C3p は表示されない}
+\end{layer}
+
+\verb|Beziersym("1",[A,B,C,D]);|
+
+C2p と C3p は表示されない
+
+\vspace{25mm}
+
+その後,節点や制御点を動かして,描きたいものにする。
+
+C2p と C3p は表示されず,動かせない。
+
+\begin{center} \input{Fig/checksy2} \end{center}
+
+\begin{flushright}\hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+%\vspace{\baselineskip}
+\hypertarget{mkbeziercrv}{}
+\item[関数]Mkbeziercrv(名前, [節点リスト,制御点リスト] のリスト,options )
+\item[機能]複数のベジェ曲線を描く
+\item[説明][節点リスト,制御点リスト] が1つの場合は,Bezier()と同じ。
+
+\vspace{\baselineskip}
+【例】ベジェ曲線を2つ描く。
+
+\verb|Mkbeziercrv("5",[[[A,B,C],[[D],[E,F]]],[[G,H,K,L],[[M],[N,O],[P]]]]);|
+
+ \scalebox{0.95}{\input{Fig/checkmc1}}
+
+\vspace{\baselineskip}
+\hypertarget{mkbezierptcrv}{}
+\item[関数]Mkbezierptcrv(節点リストptlist,[オプション] )
+\item[機能]ベジェ曲線を描く
+\item[説明]制御点は,自動的に配置される。
+
+複数の場合は[ ptlist1, ptlist2.... ]
+
+名前は,A から順に自動的につける。
+
+オプション
+
+\verb|"Deg=..."| 次数指定ができる。(初期設定は3次)
+
+\verb|"Num=..."| 各区間の区間数(分点数$-1$)を指定できる。(初期設定は10)
+
+\vspace{\baselineskip}
+
+【例】
+
+\begin{layer}{150}{0}
+\putnotese{70}{25}{bzA}
+\putnotese{40}{-5}{ \input{Fig/checkb8}}
+\end{layer}
+
+\verb|Mkbezierptcrv([A,B,C]);|
+
+\vspace{23mm}
+
+その後,節点や制御点を動かして,\par
+描きたいものにする。
+
+\begin{layer}{150}{0}
+\putnotese{70}{25}{bzA}
+\putnotese{55}{-15}{ \input{Fig/checkb11}}
+\end{layer}
+
+\vspace{35mm}
+
+\begin{layer}{150}{0}
+\putnotese{70}{28}{bzA}
+\putnotese{50}{-3}{\input{Fig/checkb9}}
+\end{layer}
+
+\verb|Mkbezierptcrv([A,B,C],["Deg=2"]);|
+
+\verb|Deg=2| とすると2次になる。
+
+制御点は各区間に1個ずつできる。
+
+\vspace{20mm}
+
+\begin{layer}{150}{0}
+\putnotese{20}{45}{bzA}
+\putnotese{80}{45}{bzB}
+\putnotese{0}{10}{ \input{Fig/checkb10}}
+\end{layer}
+
+複数の場合は[ ptlist1, ptlist2.... ]
+
+\verb|Mkbezierptcrv([[A,B,C],[D,E,F,G]]);|
+
+\vspace{40mm}
+
+ \vspace{\baselineskip}
+\hypertarget{bspline}{}
+\item[関数]Bspline(名前,制御点リスト,[オプション] )
+\item[機能]2次B-spline曲線を描く
+\item[説明]節点は自動的に計算され,表示されない
+
+ \vspace{\baselineskip}
+【例】\verb|Bspline("1",[A,B,C,D,E])|
+
+これは, \verb|Bezier("1",[A,(B+C)/2,(C+D)/2,E],[B,C,D])|と同じ。曲線の名前が bz1 ではなくbzb1 となる。
+
+通常のB-spline曲線の端の制御点の代わりに,端点を動かせるようにしている。
+
+\begin{center} \input{Fig/checkbs1}\end{center}
+
+【例】\verb|Bspline("1",[A,B,C,D,A]);|
+
+リストの最初と最後が同じ場合は閉曲線になる。
+
+ \verb|Bezier("1",[(D+A)/2,(A+B)/2,(B+C)/2,(C+D)/2,(D+A)/2],[A,B,C,D]);|
+
+ と同じ。
+
+\begin{center} \input{Fig/checkbs2}\end{center}
+
+参照:\hyperlink{ospline}{Ospline:大島のスプラインを描く}
+
+\vspace{\baselineskip}
+\hypertarget{crspline}{}
+\item[関数]CRspline(名前,節点リスト,[オプション] )
+\item[機能]単独のCatmull-Rom スプライン曲線を描く
+\item[説明]
+自由点は,節点のみで,制御点は節点から作られ移動はできない。
+
+オプションに,通常のオプションのほか,次が使える。
+
+\verb|size ->n|:画面上での線の太さを指定する。
+
+\vspace{\baselineskip}
+【例】\verb|CRspline("1",[A,B,C,D]);|
+
+\hspace{20mm} \input{Fig/checkCR}
+
+%\begin{flushright}\hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+\vspace{\baselineskip}
+\hypertarget{ospline}{}
+\item[関数]Ospline(名前,制御点リスト,[オプション] )
+\item[機能]大島のspline曲線を描く
+\item[説明]制御点を通るスプライン曲線を描く
+
+リストの最初と最後が同じ場合は閉曲線になる。
+
+\vspace{\baselineskip}
+【例】\verb|Ospline("1",[A,B,C,D,E]);|\verb|Ospline("1",[A,B,C,D,A]);|
+
+ \input{Fig/ospline1}\input{Fig/ospline2}
+
+\vspace{\baselineskip}
+ スプライン曲線については次も参照されたい:\hyperlink{bspline}{Bspline:Bスプラインを描く}
+
+
+\vspace{\baselineskip}
+\hypertarget{circledata}{}
+\item[関数]Circledata(name,リスト,options)
+\item[機能]円または多角形を描く。
+\item[説明]中心の点と,円周上の1点(か半径),または3点をリストで与えて円を描く。
+
+中心と円周上の点を,座標ではなく幾何要素名で指定する場合は name は省略可。
+
+optionsは以下のものをリストで与える。省略した場合は実線で円が描かれる。
+\begin{tabbing}
+1234\=567890123456789012\=\kill
+ \>"Rng=[$\theta_1,\theta_2$]"\>角$\theta_1$から$\theta_2$の範囲の弧を描く。角は弧度法で与える。\\
+ \>"Num=分割数"\>円を描くときの分割数。値が小さい場合は多角形になる。\\
+ \>線種\>"dr, n", "da,m,n" , "do,m,n"
+\end{tabbing}
+\begin{tabbing}
+1234\=56789012345678901234567890\=\kill
+
+【例】いろいろな円を描く。\\
+ \>原点中心,半径2の円\> \verb|Circledata("1",[[0,0],[2,0]]);|\\
+ \hspace{50mm}(\verb|[[0,0],2]|でもよい)\\
+ \>A中心,半径ABの円\> \verb|Circledata([A,B]);|\\
+ \>A中心,半径2の円\> \verb|Circledata("1",[A,A+[2,0]]);|\\
+ \hspace{50mm}(\verb|[A,2]|でもよい)\\
+ \>3点A,B,Cを通る円\> \verb|Circledata([A,B,C]);|\\
+ \>下図左より,オプションに "dr,2" , "da" , "do" をつけた場合。
+\end{tabbing}
+\hspace{10mm} \input{Fig/circledata1}
+\vspace{\baselineskip}
+
+%\begin{flushright}\hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+ \verb|Circledata([A,B,C]);| で,3点A,B,Cを通る円を描いたとき,できた円の中心は \verb|Pointdata("1",[crABCcenter]);| で作図できる。
+
+\vspace{\baselineskip}
+【例】A中心,半径AB,中心角60°の弧を描く。
+
+\hspace{10mm}\verb|Circledata([A,B],["Rng=[0,pi/3]"]); |
+
+\vspace{\baselineskip}
+【例】A中心,半径AB,中心角60°の扇型を描く。点A,B,Cを適当に取っておく。
+
+\begin{verbatim}
+th=arctan2(B-A);
+C.xy=Rotatepoint(B,pi/3,A);
+Circledata([A,B],[Assign("Rng=[th,th+pi/3]","th",th)]);
+Listplot([B,A,C]);
+Letter([A,"s","A",B,"e","B",C,"nw","C"]);
+\end{verbatim}
+
+\begin{center}
+\includegraphics[bb=0.00 0.00 180.01 177.01,width=4cm"] {Fig/circledata3.pdf}\hspace{12mm}\input{Fig/circledata2}
+\end{center}
+
+1行目は,ABが$x$軸となす角を arctan2 関数 によって求めている。
+
+\vspace{\baselineskip}
+【例】弧を太く描く
+
+\verb|Circledata([C,D],["dr,3","Rng=[0,pi/3]"]);|
+
+円はNが大きな値の正N多角形として描いている。optionの ["Num=数値"] によってその細かさを指定できる。Nの値が小さければ正多角形が描けることになる。
+
+\vspace{\baselineskip}
+【例】A中心,半径ABの円と,その円に内接する正六角形
+\begin{verbatim}
+Circledata("1",[A,B]);
+Circledata("2",[A,B],["Num=6"]);
+\end{verbatim}
+ここで,同じ[A,B]を使うため,nameを付与して区別する必要がある。(下図左)
+
+また,頂点の位置を変えるのであれば,Rng= オプションを使う。(下図右)
+
+ \verb|Circledata("2",[A,B],["Num=6","Rng=[pi/6,13/6*pi]"]);|
+
+\hspace{10mm} \input{Fig/circledata4}
+\hspace{5mm}\input{Fig/circledata5}
+
+%\begin{flushright}\hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+\vspace{\baselineskip}
+\hypertarget{mkcircles}{}
+\item[関数]Mkcircles()
+\item[機能]すべての幾何円のPD を作成
+\item[説明]Cinderellaの「円を加える」ツール(3種類いずれでも)で描いたすべての円をそのままプロットデータとする。たとえば,中心A,円周上の点をBとした円を作ると,プロットデータcrABが作成される。その後,インスペクタで点Bの識別名を変更(たとえばQに)すると,プロットデータ名も変更される。円はすでに描かれていてもよい。
+
+\begin{flushright}\hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+\vspace{\baselineskip}
+\hypertarget{ellipseplot}{}
+\item[関数]Ellipseplot(name,点リスト ,定義域, options)
+\item[機能]焦点と通る点を与えて楕円を描く。
+\item[説明]点リストで2つの焦点と通る点を与える。点はCinderellaの幾何点が使える。
+
+また,通る点のかわりに,焦点からの距離の和を実数で与えることもできる。
+
+実際には,媒介変数表示$x=a \cos \theta,y=b \sin \theta$ を,回転・平行移動して描いている。定義域はこのときの$t$の定義域で,省略も可能。省略したときの初期値は[-5,5]
+
+\vspace{\baselineskip}
+【例】点A,Bを焦点とする楕円を描く。
+
+\verb|Ellipseplot("1",[A,B,C]);| 点Cを通る楕円を描く。
+
+\verb|Ellipseplot("1",[A,B,4]);| 焦点からの距離の和が4である楕円を描く。
+
+\verb|Ellipseplot("1",[A,B,C],"[0,pi]");| 楕円の半分を描く。
+
+\vspace{\baselineskip}
+【例】Cinderellaの作図ツールを使う
+
+作図ツールに,焦点と通る点で楕円を描くもの,点の極線を描くツールがある。(モードメニュー / 直線 / 点の極線)これを利用すると,楕円上にとった点をインシデントにできるので,インタラクティブに図を変更することができる。このCinderellaの作図機能と合わせて,一方の焦点から出た光が楕円上で反射して他方の焦点に至る,という図を次のようにして描くことができる。
+
+まず,3つの点,焦点A,Bと通る点Cを適当な位置に作図する。次に「焦点と通る点で決まる楕円」ツールを選び,点A,B,Cを順に指定すると,楕円が描かれる。
+
+モードメニューの「直線」から「点の極線」を選び,点Cと楕円を順に指定すると接線が引かれる。
+
+「垂線を加える」ツールを用いて,点Cで垂線,すなわち法線を引く。(下図)
+
+「点を加える」ツールを用いて,接線,法線上に適当に点を取る。(D,Eとなったとする)
+
+次のスクリプトを書いて実行すると,楕円に関して入射角と反射角が等しくなるように光が反射する様子を図にすることができる。
+\newpage
+
+\vspace{\baselineskip}
+\begin{layer}{150}{0}
+\putnotese{75}{5}{ \includegraphics[bb=0 0 272.01 240.01, width=4cm]{Fig/ellipsecindy.pdf}}
+\end{layer}
+\hspace{50mm}
+
+\begin{verbatim}
+Ellipseplot("1",[A,B,C]);
+Lineplot([C,D]);
+Lineplot([C,E]);
+Arrowdata([A,C]);
+Arrowdata([C,B]);
+Anglemark([A,C,B]);
+Expr([A,"s2","F_1",B,"s2","F_2"]);
+\end{verbatim}
+\vspace{\baselineskip}
+\begin{center} \scalebox{0.9}{\input{Fig/ellipseplot1}}\end{center}
+
+また,接線,法線を描かず,この楕円上に点D,E,・・をとり(個数は任意)次のスクリプトを書けば,何本かの光線が一方の焦点を出て他方の焦点に集まる様子を描くことができる。
+
+\begin{verbatim}
+Ellipseplot("1",[A,B,C]);
+Listplot([A,C,B]);
+Listplot([A,D,B]);
+Listplot([A,E,B]);
+Expr([A,"s2","F_1",B,"s2","F_2"]);
+\end{verbatim}
+
+\begin{center} \scalebox{0.9}{\input{Fig/ellipseplot2}} \end{center}
+
+
+\hypertarget{hyperbolaplot}{}
+\item[関数]Hyperbolaplot(name,点リスト ,定義域, options)
+\item[機能]焦点と通る点を与えて双曲線を描く。
+\item[説明]点リストで2つの焦点と通る点を与える。点はCinderellaの幾何点が使える。
+
+また,通る点のかわりに,焦点からの距離の差を実数で与えることもできる。
+
+実際には,ハイパボリック関数を用いた媒介変数表示 $x=\cosh t,y=\sinh t$を回転・平行移動している。
+
+optionとして,"Asy=線種"を与えると,漸近線を指定した線種で表示する。 初期設定では漸近線は非表示。
+
+\vspace{\baselineskip}
+【例】点A,Bを焦点とする双曲線を描く。
+
+\verb|Hyperbolaplot("1",[A,B,C]);| 点Cを通る双曲線を描く。
+
+\verb|Hyperbolaplot("1",[A,B,2]);|焦点からの距離の差が2の双曲線を描く。
+
+\verb|Hyperbolaplot("1",[A,B,C],["Asy=do"]);| 漸近線を点線で描く。
+
+\vspace{\baselineskip}
+\hspace{20mm} \scalebox{0.9}{\input{Fig/hyper1}}
+\begin{flushright}\hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+\vspace{\baselineskip}
+\hypertarget{parabolaplot}{}
+\item[関数]Parabolaplot(name,点リスト ,定義域, options)
+\item[機能]点リスト[A,B,C]で示された焦点,準線で決まる放物線を描く。
+\item[説明]焦点Aと準線BCで決定する放物線を描く。
+
+実際には,2次関数 $y=x^2$のグラフを回転・平行移動して描いており,定義域は,$y=x^2$での定義域と考えてよい。定義域は省略することもできる。省略したときの初期値は[-5,5]
+
+\vspace{\baselineskip}
+【例】点Aを焦点,直線BCを準線とする放物線を描く
+
+\hspace{10mm}\verb|Parabolaplot("1",[A,B,C]); |
+
+定義域を $-4 \leq x \leq 4$ とする。
+
+\hspace{10mm} \verb|Parabolaplot("1",[A,B,C],"[-4,4]");|
+
+点(0,1)を焦点,直線$y=-1$を準線とする放物線を描く
+
+\hspace{10mm} \verb|Parabolaplot("1",[[0,1],[-1,-1],[1,-1]]);|
+
+\vspace{\baselineskip}
+【例】放物線上の2点で引かれた接線と放物線で囲まれた領域を斜線で描く。
+
+Cinderellaの作図ツールに,焦点と準線で放物線を描くものがある。また,点の極線を描くツールがある。(モードメニュー / 直線 / 点の極線)これを利用すると,放物線上にとった点をインシデントにできるので,インタラクティブに図を変更することができる。このCinderellaの作図機能と合わせて,次の手順で図を描く。
+
+まず,焦点A(0,1)と準線$y=-1$:BCを作図する。次に「焦点と準線で決まる放物線」ツールを選び,点Aと直線BCを指定すると,放物線が描かれる。方程式では$y=\dfrac{1}{4}x^2$の放物線である。
+
+次に,放物線上に点D,Eをとる。Cinderellaの作図機能を用いているので,この2点は放物線上だけを動かすことができる。(インシデント)
+
+モードメニューの「直線」から「点の極線」を選び,点Dと放物線,点Eと放物線を順に指定すると接線が引かれる。その交点に点を取る。
+
+\vspace{\baselineskip}
+\begin{center} \includegraphics[bb=0 0 482.02 413.02 , width=6cm]{Fig/parabolaplot.pdf} \end{center}
+
+\vspace{\baselineskip}
+以上で作図ができたので,次のスクリプトを書いて実行する。
+\begin{verbatim}
+Parabolaplot("1",[A,B,C]);
+Lineplot([D,F]);
+Lineplot([E,F]);
+Hatchdata("1",["iii"],[["gr1para","s"],["lnEF","n"],["lnDF","n"]]);
+\end{verbatim}
+
+これで,次図ができる。このあと,文字などは適当に追加する。
+
+\vspace{\baselineskip}
+\begin{center} \input{Fig/parabolaplot}\end{center}
+
+なお,Cinderellaの作図ツールで放物線を描かず,焦点Aと準線上の点B,Cだけを用意して,次のスクリプトで描くこともできる。
+\begin{verbatim}
+Parabolaplot("1",[A,B,C]);
+Putoncurve("D","gr1para");
+Putoncurve("E","gr1para");
+Tangentplot("1","gr1para","x="+D.x);
+Tangentplot("2","gr1para","x="+E.x);
+Hatchdata("1",["iii"],[["gr1para","s"],["lntn1","n"],["lntn2","n"]]);
+\end{verbatim}
+
+%\begin{flushright}\hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+%\vspace{\baselineskip}
+\hypertarget{ovaldata}{}
+\item[関数]Ovaldata(name, 点リスト,options)
+\item[機能]角を丸くした矩形を描く
+\item[説明]中心と対角の1点を指定し,角を丸くした矩形を描く
+
+optionsは,角の落とし具合と線種など。 初期設定は0.2
+
+\vspace{\baselineskip}
+【例】いくつかの例を示す。
+\begin{verbatim}
+Ovaldata("1", [A,B]);
+Ovaldata("2", [C,D],[0]);
+Ovaldata("3", [E,F],[1,"dr,3"]);
+Ovaldata("4", [G,H],[1.5,"da"]);
+\end{verbatim}
+\begin{center} \scalebox{0.9}{\input{Fig/ovaldata}}\end{center}
+
+%\begin{flushright}\hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+%\newpage
+\end{description}
+% ====== 関数のグラフ ==============
+\subsubsection{関数のグラフ}
+\begin{description}
+
+\vspace{\baselineskip}
+\hypertarget{plotdata}{}
+\item[関数]Plotdata(name , 式 , 変数と定義域 , options)
+\item[機能]関数のグラフを描く。プロットデータの名前は,gr
+\item[説明]式で表された関数のグラフを,指定された定義域で描く。
+
+式,定義域は " " でくくって文字列とする。定義域はx=に続いてリストで指定。
+
+options は次の通り。
+\begin{tabbing}
+12345678901234567890123\=\kill
+線種\>"dr, n", "da,m,n" , "do,m,n"\\
+"Num=数値"\>描画時の分割数\\
+"Dis=数値" \>値が指定数値以上ジャンプする場合は不連続点とみなす。\\
+"Exc=数値リスト \>リストで示された点は除外する。\\
+"Exc=関数"\>関数の零点は除外する。\\
+"Color=RGB"\>色指定。RGBはCMYKでもよい。
+\end{tabbing}
+
+【例】2次関数 $f(x)=x^2-2x$ のグラフを定義域指定なしで描く。
+
+\hspace{10mm}\verb|Plotdata("1","x^2-2*x","x");|
+
+\vspace{\baselineskip}
+\hspace{20mm} \scalebox{0.8}{\input{Fig/plotdata1}}
+
+ \verb|Plotdata("1","x^2-2*x","x",["Color=[1,0,0]"]);|
+
+とすると赤で描かれる。
+
+\vspace{\baselineskip}
+【例】三角関数 $2\sin \left(2x-\dfrac{\pi}{4} \right)$ のグラフを,定義域 $0 \leq x \leq 2 \pi$で描く。
+
+\hspace{10mm} \verb|Plotdata("3","2*sin(2*x-pi/4)","x=[0,2*pi]");|
+
+\vspace{\baselineskip}
+\hspace{20mm}\input{Fig/plotdata2}
+
+%\vspace{\baselineskip}
+CindyScript では,plot( 式 , 定義域 ); で描くが, \ketcindy を用いるときは,CindyScript のplot 関数のかわりに,このPlotdata を使えばよい。
+
+軸に数字を入れるのであれば,Letter() を用いる。
+
+\vspace{\baselineskip}
+optionsの使用例
+\begin{tabbing}
+1234\=567890123456789012345678901234567890123456\=\kill
+ \> \verb|Plotdata("1","sin(x)+3","x");| \> 初期設定\\
+ \> \verb|Plotdata("2","sin(x)+2","x",["dr,2"]);| \> 同じく,太さ2で描く\\
+ \> \verb|Plotdata("3","sin(x)+1","x",["da"]);|\> 同じく,破線で描く\\
+ \> \verb|Plotdata("4","sin(x)","x",["do"]);|\> 同じく,点線で描く
+ \end{tabbing}
+結果は次図上から。
+
+\vspace{\baselineskip}
+\hspace{20mm} \scalebox{0.9}{\input{Fig/plotdata3}}
+
+Num=分割数の指定
+
+グラフの描画は,区間を分割して関数値をとり,各点を結ぶという通常の方法によっている。Nの指定はこの分割数の指定である。 初期設定は50。思うような結果が得られない場合はこの値を大きく指定するとよい。下図左は 初期設定,右は Num=200。
+
+\vspace{\baselineskip}
+\hspace{20mm}\scalebox{0.8}{ \input{Fig/plotdata4}}
+
+不連続点の指定
+
+Dis オプションにより,値がジャンプする不連続点を線で結ばないようにする。Numオプションと合わせて使うと効果が上がる。
+
+\vspace{\baselineskip}
+【例】$f(x)=$tan$x$ のグラフは,そのままではあたかも漸近線が描かれたようになるが,これは,不連続点の前後をそのまま結んでいるためである。(下図左)
+\begin{verbatim}
+Plotdata("1","tan(x)","x",["Num=200","Dis=50"]);
+\end{verbatim}
+のように,"Dis" オプションを使えば余分な線が描かれなくなる。(下図右)
+
+\vspace{\baselineskip}
+\hspace{20mm} \input{Fig/plotdatatan1}\hspace{20mm} \input{Fig/plotdatatan2}
+
+\vspace{\baselineskip}
+【例】ガウス記号 [$x$] で表される関数(床関数 : floor())のグラフ。
+\begin{verbatim}
+Plotdata("1","floor(x)","x",["Num=100","Dis=0.9"]);
+Drwxy();
+repeat(7,s,start -> -2,
+Pointdata(text(s+3),[s+1,s],["Inside=0","Size=3"]);
+);
+\end{verbatim}
+
+\hspace{45mm}\input{Fig/plotdata5}
+
+なお,ここで,Pointdata() のname を \verb|text(s+3)| としているのは,s が $-2$ から始まるので,負の数が使えない name を $1$ から始まるようにするためである。
+
+\vspace{\baselineskip}
+関数に文字係数がついており,文字係数の値を変化させながらグラフを描くには,Assign を使うか,Defvar で変数を定義する。
+
+\vspace{\baselineskip}
+【例】直線 $y=bx-b^2$ の係数$b$を変化させて描き,包絡線をうかびあがらせる。
+
+\begin{layer}{150}{0}
+\putnotese{95}{3}{\scalebox{0.8}{{\input{Fig/assign}}}}
+\end{layer}
+\begin{verbatim}
+repeat(50,t,
+ cb=t/5-5;
+ Plotdata(text(t),Assign("b*x-b^2","b",cb),"x");
+);
+\end{verbatim}
+
+または
+\begin{verbatim}
+Defvar("b");
+repeat(50,t,
+ b=t/5-5;
+ Plotdata(text(t),"b*x-b^2","x");
+);
+\end{verbatim}
+
+%\vspace{\baselineskip}
+\hypertarget{implicitplot}{}
+\item[関数]Implicitplot(name,式,xの定義域,yの定義域, options)
+\item[機能]陰関数のグラフを描く。
+\item[説明]陰関数の式を与えてグラフを描く。式,定義域とも文字列。
+
+options は,"r","m","Wait=n" が指定できる。Wait の初期値は10。
+
+"r","m"に関しては,オプションなしのとき
+
+i) データファイルがなければ,新しく作る
+
+ii) データファイルが既にあればそれを読み込む
+
+"m"のとき,強制的にデータファイルを作り直す。
+
+"r" のとき,すでにあるデータファイルを読み込む。
+
+\vspace{\baselineskip}
+【例】楕円を描く。
+\begin{verbatim}
+Implicitplot("1","x^2-x*y+2*y^2=4","x=[-3,3]","y=[-2,2]");
+\end{verbatim}
+
+\vspace{\baselineskip}
+\hspace{20mm}\scalebox{0.9}{\input{Fig/implicit1}}
+
+\vspace{\baselineskip}
+\hypertarget{deqplot}{}
+\item[関数]Deqplot(name,式,変数名,初期値,options)
+\item[機能]微分方程式の解曲線を描く
+\item[説明]微分方程式と初期値を与えて解曲線を描く。
+
+\vspace{\baselineskip}
+【例】$y''=-y$で,初期値が$x=0$のとき$y=1,y'=0$ の解曲線
+
+\verb|Deqplot("1","y''=-y","x",0, [1,0]); |
+
+注) 微分記号のプライムは,シングルクォートまたはバッククォート。
+
+\vspace{\baselineskip}
+\hspace{20mm}\input{Fig/deqplot1}
+
+\vspace{\baselineskip}
+【例】$y'=y*(1-y)$で,$x=0$のとき,$y=0.5$の解曲線
+
+ \verb|Deqplot("2","y'=y*(1-y)","x",0, 0.5,["Num=100"]);|
+
+\vspace{\baselineskip}
+\hspace{20mm}\input{Fig/deqplot2}
+
+\vspace{\baselineskip}
+
+【例】$[x,y]'=[x(1-y),0.3y(x-1)]$で,変数は$t$,$t=0$(区間の左端)のときの$x, y$の値が1と0.5 であるときの解曲線
+\begin{verbatim}
+Deqplot("3","[x,y]'=[x*(1-y),0.3*y*(x-1)]","t=[0,20]",
+[1,0.5],["Num=200"]);
+\end{verbatim}
+
+\vspace{\baselineskip}
+\hspace{20mm}\input{Fig/deqplot3}
+
+\vspace{\baselineskip}
+\hypertarget{paramplot}{}
+\item[関数]Paramplot(name , 式 , 変数と定義域,options)
+\item[機能]媒介変数表示の曲線を描く。
+\item[説明]式は""でくくった媒介変数表示のリストで与える。
+
+定義域も " " でくくって文字列とし,t=に続いてリストで指定する。
+
+options は線種が有効
+
+\vspace{\baselineskip}
+【例】サイクロイド曲線を描く。
+
+\hspace{10mm} \verb|Paramplot("1","[t-sin(t),1-cos(t)]","t=[0,2*pi]");|
+
+\vspace{\baselineskip}
+\hspace{20mm}\input{Fig/paramplot1}
+
+\vspace{\baselineskip}
+【例】optionsの使用例。左から, 初期設定,太線,破線,点線の楕円
+\begin{verbatim}
+Paramplot("1","[2*cos(t)-5,sin(t)]","t=[0,2*pi]");
+Paramplot("2","[2*cos(t),sin(t)]","t=[0,2*pi]",["dr,2"]);
+Paramplot("3","[2*cos(t)+5,sin(t)]","t=[0,2*pi]",["da"]);
+Paramplot("4","[2*cos(t)+10,sin(t)]","t=[0,2*pi]",["do"]);
+\end{verbatim}
+\begin{center} \input{Fig/paramplot2} \end{center}
+
+%\begin{flushright}\hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+\vspace{\baselineskip}
+\hypertarget{polarplot}{}
+\item[関数]Polarplot(name , 式 , 変数と定義域,options)
+\item[機能]極座標表示$r=f(\theta)$の曲線を描く。
+
+\vspace{\baselineskip}
+【例】カージオイド曲線を描く。
+
+\hspace{10mm}\verb|Polarplot("1","2*(1+cos(t))","t=[0,2*pi]",["Num=200"]);|
+
+\vspace{\baselineskip}
+\begin{center}\scalebox{0.7}{\input{Fig/cardioid1}}\end{center}
+
+\vspace{\baselineskip}
+\hypertarget{periodfun}{}
+\item[関数]Periodfun(定義式,周期,options)
+\item[機能]周期関数のグラフを描く。戻り値はMaxima形式の式とperiodのリスト。
+\item[説明]周期関数の式を定義してグラフを描く。
+定義式は,関数式(文字列),区間,分割数のリスト。
+
+この関数固有のオプションは "Con=" で,不連続点を線で結ぶか否かと,その時の色。
+ 初期設定は破線。結ばない場合は "Con=n",色指定は線種に続いてコンマで区切って指定する。たとえば,"Con=do,Color=red"。
+
+周期(描画回数)は,数またはリストで指定する。周期がmのとき,2m+1周期分描かれる。
+
+
+注意)関数は左右対称な定義域 [-a,a] で定義すること。
+
+\vspace{\baselineskip}
+【例】矩形関数のグラフ
+
+\begin{verbatim}
+defL=["0",[-1,0],1,"1",[0,1],1];
+Periodfun(defL, 2,["dr,2"]);
+memori=apply(-5..5,x,[x,text(x)]);
+memori=flatten(remove(memori,[[0,"0"]]));
+Htickmark(memori);
+Vtickmark([1,"1"]);
+\end{verbatim}
+
+\hspace{20mm}\input{Fig/periodfun.tex}
+
+\vspace{\baselineskip}
+一方を放物線にした場合
+\begin{verbatim}
+defL=["0",[-1,0],1,"x^2",[0,1],50];
+Periodfun(defL, 2, ["Con=n","dr,2"]);
+memori=apply(-5..5,x,[x,text(x)]);
+memori=flatten(remove(memori,[[0,"0"]]));
+Htickmark(memori);
+Vtickmark([1,"1"]);
+\end{verbatim}
+
+\hspace{20mm}\input{Fig/periodfun2.tex}
+
+\vspace{\baselineskip}
+\hypertarget{fourierseries}{}
+\item[関数]Fourierseries(name,係数,周期,項数)
+\item[機能]フーリエ級数のグラフを描く。
+\item[説明]$a_0+\displaystyle{\sum _{n=1} ^{\infty}(a_n \cos nx + b_n \sin nx)}$ を描く。
+係数は $a_0,a_n,b_n$ のリストで,それぞれの要素は文字列とする。
+
+この関数固有のオプションは "Con=y/n" で,不連続点を破線で結ぶか否か。 初期設定は y。
+
+矩形波のフーリエ近似のような場合は,オプションとして,["Num=200"](100以上の値を指定)をつけるとよい。
+
+\vspace{\baselineskip}
+【例】矩形波のフーリエ近似
+\begin{verbatim}
+ Fourierseries("1",["1/2","0","(1-(-1)^n)/(pi*n)"],2,6,["Num=200"]);
+\end{verbatim}
+
+\begin{center}
+\input{Fig/fourierseries.tex}
+\end{center}
+
+\vspace{\baselineskip}
+\hypertarget{tangentplot}{}
+\item[関数]Tangentplot(name , PD , 位置 , options)
+\item[機能]接線を描く。プロットデータの名前は,lntn
+\item[説明]曲線PDの指定した位置での接線を描く。位置は "x=n" で指定する。
+
+使用例は\hyperlink{parabolaplot}{Parabolaplot}の例を参照。
+
+\begin{flushright}\hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+\end{description}
+%\newpage
+% ====== 文字 ==============
+\subsubsection{文字}
+\begin{description}
+
+\vspace{\baselineskip}
+\hypertarget{expr}{}
+\item[関数]Expr([座標 , 位置 , 文字列],option)
+\item[機能]\TeX 記法の文字列を与えて数式を書く。
+\item[説明]Letterで文字列の前後に\$ \$をおくのと同じ。
+
+導関数の記号は,$'$(シングルクォート)を用いる。
+
+複数の箇所に文字を書く場合は,Letter() と同様,引数をリストにして与える。
+
+optionは フォントサイズで,["size=32"] のように指定する。
+
+\vspace{\baselineskip}
+【例】$f(x)=\dfrac{1}{4} x^2$とその導関数 $f'(x)=\dfrac{1}{2} x$ の式,軸上に必要な数を入れる。
+\begin{verbatim}
+Expr([[-3,3],"e","f(x)=\frac{1}{4} x^2",[3,1.5],"s2e2",
+"f‘(x)=\frac{1}{2}x",[2,0],"s","2",[0,1],"w","1"]);
+\end{verbatim}
+\vspace{\baselineskip}
+\begin{center} \input{Fig/expr}\end{center}
+
+【例】対数関数の定積分の記号および積分値を図に書き込む。
+\begin{verbatim}
+Expr([Q+[0.2,0],"ne","\displaystyle \int_a^b \log x\,dx="+
+text(L.x*(log(L.x)-1)-G.x*(log(G.x)-1)) ]);
+\end{verbatim}
+
+ \verb|L.x*(log(L.x)-1)-G.x*(log(G.x)-1)| は,点L,G(図の$a,b$)をドラッグして
+
+ 積分範囲を決めるようにしているので,そこから計算した値。
+
+ 矢線は \verb|Arrowdata(Q,P); | で表示している。矢線の始点がQ
+\vspace{\baselineskip}
+\begin{center} \input{Fig/intlog}\end{center}
+
+%\begin{flushright}\hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+\vspace{\baselineskip}
+\hypertarget{exprrot}{}
+\item[関数]Exprrot(座標 , 向き , 方向,文字列,option)
+\item[機能]\TeX 記法の文字列を与えて傾いた数式を書く。
+\item[説明]「座標」の位置に,指定された向きで数式を書く。
+
+向きはベクトルで与える。
+
+方向は t (ベクトルと同じ向き) と n(ベクトルと垂直な向き) の両方を数字つきで与える。ただし,方向はオプション。
+
+座標,向きとも,Cinderellaで作図した幾何点を用いることができる。
+
+optionは フォントサイズで,["size=32"] のように指定する。
+
+\begin{verbatim}
+Exprrot([3,2],[2,-1],"t0n1","\sqrt{3}");
+Exprrot(C,B-A,"\frac{2}{3}");
+\end{verbatim}
+
+\vspace{\baselineskip}
+\hspace{10mm}\includegraphics[bb=0.00 0.00 181.01 131.01,width=4cm]{Fig/exprrot.pdf} \hspace{10mm} \input{Fig/exprrot}
+
+\begin{flushright}\hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+\vspace{\baselineskip}
+\hypertarget{letter}{}\item[関数]Letter([位置, 方向, 文字列],option)
+\item[機能]文字列を表示する
+\item[説明]「位置(座標)」と方向で指定された場所に文字を書き込む。
+
+位置(座標)は点の名前で指定することもできる。
+
+場所は上下左右を東西南北で表し, n/s/w/e/c の方向で表す。cは中央。
+
+%\begin{center} \input{Fig/letter4}
+指定位置からの距離を,数値で与えることもでき,e2, e3 は e より少し離して置く。
+
+複数の文字列をリストの形にして渡すことができる。
+
+注)導関数の記号$'$は,数式モード(\$ ではさむ)で$'$(シングルクォート)を用いる。
+
+optionは フォントサイズで,["size=32"] のように指定する。
+
+文字列が一つのときは,
+
+Letter(位置, 方向, 文字列,option)
+
+にできる。
+
+\vspace{\baselineskip}
+【例】
+
+座標 (2,1) の南東にPを表示
+
+\hspace{10mm}\verb|Letter([[2,1] ,"se","P"]);|
+
+点Cを中央としてCを表示
+
+\hspace{10mm}\verb|Letter([C ,"c", "C"]);|
+
+点Aの南西にA,Eの南に数式を表示
+
+\hspace{10mm}\verb|Letter([A,"sw","A",E,"s","$ f(x)=\frac{1}{4} x^2 $"]);|
+
+\vspace{\baselineskip}
+\hypertarget{letterrot}{}\item[関数]Letterrot(座標, 方向ベクトル,移動量, 文字列,option)
+\item[機能]文字列を回転して表示する
+\item[説明]座標で示された位置に,方向ベクトルで指定された向きに回転して文字を書き込む。
+
+第3引数は微小移動量で,略すこともできる。
+
+optionは フォントサイズで,["size=32"] のように指定する。
+
+\begin{verbatim}
+Letterrot(C,B-A,"t2n5","AB");
+\end{verbatim}
+
+移動量を略して
+
+\hspace{10mm}\verb|Letterrot(C,B-A,"AB");|
+
+とすることもできる。この場合は,微小な移動はされない。
+
+\begin{flushright}\hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+%\newpage
+\end{description}
+% ====== マーキング ==============
+\subsubsection{マーキング}
+\begin{description}
+
+\hypertarget{anglemark}{}
+\item[関数]Anglemark(name,点リスト , options)
+\item[機能]点リストで示された角に弧の形状の角の印をつける。
+\item[説明]Listplot() などと同様,点リストが点名の場合はnameは省略できる。弧を描かず文字だけを入れる場合は options に "nodisp" を指定する。
+
+optionsは次の通り。
+
+数値角の印の大きさ。 初期設定は1
+
+線種"dr, n", "da,m,n" , "do,m,n"
+
+"Expr=文字" または "Letter=文字" : 文字を入れる
+
+"Expr=位置 , 文字": 位置を指定して文字を入れる。位置は頂点からの距離。
+
+\vspace{\baselineskip}
+【例】三角形の内角に印をいれ,文字を書き込む。(下図左)
+\begin{verbatim}
+Listplot([A,B,C,A]);
+Letter([A,"n1","A",B,"w1","B",C,"e1","C"]);
+Anglemark([B,A,C]);
+Anglemark([C,B,A],["Expr=\theta"]);
+Anglemark([A,C,B],[2,"dr,3","Expr=2,\alpha"]);
+\end{verbatim}
+
+【例】三角形の内角に弧を描かず,$\circ$ だけ書き込む。(下図右)
+\begin{verbatim}
+Listplot([A,B,C,A]);
+Letter([A,"n1","A",B,"w1","B",C,"e1","C"]);
+Anglemark([C,B,A],["Expr=\circ","nodisp"]);
+\end{verbatim}
+
+
+\input{Fig/anglemark}\hspace{5mm}\input{Fig/anglemark2}
+
+※角の印には平行四辺形の形状のものもある。\hyperlink{paramark}{Paramark()}を参照のこと。
+
+\vspace{\baselineskip}
+\hypertarget{paramark}{}
+\item[関数]Paramark(name,点リスト , options)
+\item[機能]点リストで示された角に平行四辺形の形状の角の印をつける。
+\item[説明]Listplot() などと同様,点リストが点名の場合はnameは省略できる。
+
+optionsは次の通り。
+
+数値角の印の大きさ。 初期設定は1
+
+線種"dr, n", "da,m,n" , "do,m,n"
+
+"Expr=文字": 文字を入れる
+
+"Expr=位置 , 文字": 位置を指定して文字を入れる。位置は頂点からの距離。
+
+\vspace{\baselineskip}
+\begin{layer}{150}{0}
+\putnotese{85}{0}{ \scalebox{0.8}{\input{Fig/paramark}}}
+\end{layer}
+
+【例】三角形の内角に印をいれ,文字を書き込む。
+
+\begin{verbatim}
+ Listplot([A,B,C,A]);
+ Paramark([A,B,C]);
+ Paramark([C,A,B],[3,"Expr=\alpha"]);
+ Paramark([B,C,A],["dr,2","Expr=2,\theta"]);
+
+\end{verbatim}
+
+※角の印には弧の形状のものもある。\hyperlink{anglemark}{Anglemark()} を参照のこと。\\
+
+\vspace{\baselineskip}
+\hypertarget{bowdata}{}
+\item[関数]Bowdata(name,点リスト , options)
+\item[機能]弓形を描く
+\item[説明]点リストで与えられた2点を結ぶ弓形を描く。Listplot() などと同様,点リストが点名の場合はnameは省略できる。
+
+2点を反時計回りに回る方向に弓形を描く。
+
+optionsは,[曲がり , 空白サイズ, 文字, 線種]
+
+曲がりは弧の曲がり具合の指定。 初期設定は1
+
+空白サイズは中央にあける空白の大きさ
+
+文字は,"Expr=文字"
+
+また,"Expr=微小移動 , 文字"で位置を指定して文字を入れる。
+
+微小移動は tn
+
+ t は線分方向の微小移動。移動量は数字をつける。正負が可。
+
+ n は線分と垂直方向の微小移動
+
+\vspace{\baselineskip}
+ \begin{layer}{150}{0}
+\putnotese{85}{0}{ \input{Fig/bowdata}}
+ \end{layer}
+
+【例】三角形ABCの各辺に弓形マークをつけ記号を入れる。
+\begin{verbatim}
+Listplot([A,B,C,A]);
+Letter([A,"n1","A",B,"w1","B",C,"e1","C"]);
+Bowdata([A,B]);
+Bowdata([B,C],[1,"Expr=t0n3,a"]);
+Bowdata([C,A],[2,1.2,"Expr=10","da"]);
+\end{verbatim}
+
+\vspace{\baselineskip}
+これに加え,文字を回転して表示する方法がある。ただし,Cinderellaの画面には反映されない。文字をを回転するには次のように書く。
+
+\hspace{10mm}"Exprrot=微小移動 , 文字"
+
+ 微小移動の最後にr をつけると,上下反転する。
+
+以下にいくつか例を示す。
+\begin{verbatim}
+Bowdata([B,A],[1,1,"Exprrot=a"]);
+Bowdata([D,C],[1,1,"Exprrot=t3n0,a"]);
+Bowdata([F,E],[1,1,"Exprrot=t-3n0,a"]);
+Bowdata([H,G],[1,1,"Exprrot=t0n3,a"]);
+Bowdata([L,K],[1,1,"Exprrot=t0n0r,a"]);
+Bowdata([N,M],[1,1,"Exprrot=t3n0r,a"]);
+\end{verbatim}
+\hspace{10mm} \scalebox{0.7}{\input{Fig/bowdata2}}
+
+%\begin{flushright}\hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+\hypertarget{drawsegmark}{}
+\item[関数]Drawsegmark(name,リスト,options)または Segmark(name,リスト,options)
+\item[機能]線分に印をつける
+\item[説明]リストで与えられた2点を端点とする線分に印をつける。印には4種類がある。
+
+optionsは
+\begin{tabbing}
+1234\=56789012\=345678901234567890\=\kill
+ \> Type=n \>:印の種類 n=1〜4\\
+ \> Width\>:二本線のときの線の幅
+\end{tabbing}
+
+【例】四角形ABCDを描き線分に印をつける。
+
+\begin{layer}{150}{0}
+\putnotese{90}{0}{ \input{Fig/segmark}}
+\end{layer}
+\hspace{50mm}
+\begin{verbatim}
+Listplot([A,B,C,D,A]);
+Segmark("1",[A,B],["Type=1"]);
+Segmark("2",[B,C],["Type=2","Width=1.5"]);
+Segmark("3",[C,D],["Type=3"]);
+Segmark("4",[D,A],["Type=4"]);
+\end{verbatim}
+
+%\vspace{\baselineskip}
+\hypertarget{htickmark}{}
+\item[関数]Htickmark([横座標 , 方向 , 文字])
+\item[機能]横軸に目盛と文字を書く。
+\item[説明]引数は位置(横座標),方向,文字。複数点の情報を[ ]内にまとめて記入できる。方向を省略すると "s1"になる。微調整は描画面には反映されないので,PDFにして確認する。
+目盛の長さは \hyperlink{setmarklen}{Setmarklen()} で設定できる。
+
+\vspace{\baselineskip}
+【例】 方向指定の例:\verb|Htickmark([1,"1",2,"n1","2",3,"se","3",4,"4"]);|
+
+\vspace{\baselineskip}
+\begin{center}
+\input{Fig/htickmark01}
+\end{center}
+
+%\vspace{\baselineskip}
+【例】-5から5までの目盛を打つ。
+Cindyscriptのリスト処理を使って,次のように引数のリストを作って渡す。
+\begin{verbatim}
+memori=apply(-5..5,x,[x,text(x)]);
+memori=flatten(remove(memori,[[0,"0"]]));
+Htickmark(memori);
+\end{verbatim}
+1行目,apply のカッコ内の -5..5 でリスト[-5,-4,-3,-2,-1,0,1,2,3,4,5] ができる。それを用いて,applyで[数, 数の文字] からなるリストができる。text(x) はxを文字にする関数。2行目で,このリストから,[0,"0"]を除き,リストを平滑化する。 結果は次のようになる。
+
+\begin{center} \scalebox{0.8}{\input{Fig/htickmark}}\end{center}
+
+\hypertarget{vtickmark}{}
+\item[関数]Vtickmark([横座標 , 方向 , 文字])
+\item[機能]縦軸に目盛と文字を書く。
+\item[説明]Htickmarkと同様。縦軸に目盛を書く。方向を省略すると "w1"になる。
+
+\vspace{\baselineskip}
+【例】点$(0,\ 1),\ (0,\ 2)$の西側に$1,\ 2$を表示する。
+
+\hspace{10mm}\verb|Vtickmark([1,"1",2,"2"]);|
+
+\vspace{\baselineskip}
+\hypertarget{rulerscale}{}
+\item[関数]Rulerscale(始点 ,横軸目盛 , 縦軸目盛)
+\item[機能]目盛を打つ
+\item[説明]始点の位置を縦横の起点として目盛りを打つ。目盛はリストで与える。
+["r",a,b,c,d]の形式では,aからbまでc間隔で,倍率dの目盛を打つ。
+["f",n1,"str",n2,"str",・・] の形式では,nと"str"がセットで,nの位置に"str"を書く。ただし,位置はCinderellaの描画面の原点を0とする。
+
+Listplot() とともに用いると,座標軸とは異なる線分に目盛を打つことができる。
+
+Framedata() とともに用いると矩形に目盛を打つことができる。
+
+\vspace{\baselineskip}
+【例】x軸上の (2,1) から (9,1) まで線分を引き,1目盛を10として目盛を打つ。
+\begin{verbatim}
+Listplot("1",[[2,1],[9,1]]);
+Rulerscale([2,1],["r",2,9,1,10],[]);
+\end{verbatim}
+\vspace{\baselineskip}
+\begin{center} \scalebox{0.9}{\input{Fig/ruler1}} \end{center}
+\vspace{\baselineskip}
+%\begin{flushright}\hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+【例】Aを原点に置いた矩形枠を描き,横に0,1,2,3,4,5,縦に d1,d2 の目盛を打つ。
+\begin{verbatim}
+Framedata("1",[A,B],["corner"]);
+Rulerscale(A,["r",0,5,1],["f",1,"d1",3,"d2"]);
+\end{verbatim}
+\begin{center}\scalebox{0.9}{ \input{Fig/ruler}} \end{center}
+%\vspace{\baselineskip}
+\begin{flushright}\hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+\end{description}
+%\newpage
+
+%==プロットデータの操作===================
+\subsection{プロットデータの操作}
+\begin{description}
+
+\hypertarget{drawfigures}{}
+\item[関数]Drawfigures(or Drwfigs)(name ,データリスト,オプションリスト)
+\item[機能]複数のプロットデータのスタイル(オプション)をリストで与えて描画する
+\item[説明]複数のプロットデータをまとめて扱う。たとえば,円と,円周上の点の2つのプロットデータをまとめて扱えば,平行移動や回転で,それらのプロットデータをまとめて平行移動や回転ができる。%Joincrvs()では,プロットデータをつなげて1つのプロットデータにするが,Addgraph()では,それぞれのプロットデータからなるリスト(リストのリスト)にする。(プロットデータは座標のリストである)
+
+%引数には,プロットデータ名を文字列化して渡す。たとえば,円のプロットデータが cr1 のとき,"cr1" とする。
+
+\vspace{\baselineskip}
+【例】サイクロイドの図を描く。
+\begin{verbatim}
+opcr=["dr"];
+oppt=["Size=2","Color=red"];
+Circledata("1",[[0,1],[0,0]],opcr);
+Pointdata("1",[0,0],oppt);
+ad1=["cr1","pt1"];
+dt=2*pi/32;
+opcr=["dr,0.3"];
+nn=32;
+forall(1..nn,
+ t=dt*#;
+ Rotatedata(2,ad1,-t,[[0,1],"nodisp"]);
+ Translatedata(2,"rt2",[t,0],["nodisp"]);
+ Drawfigures(text(#),["tr2_1","tr2_2"],[opcr,oppt]);
+);
+\end{verbatim}
+
+\vspace{\baselineskip}
+\hspace{20mm} \input{Fig/drawfigures1}
+
+最初に,まとめて平行移動や回転をするデータをリスト化しておく。また,各データのオプションをリストとして与えていることに注意。こうすることで,サイズや色などのスタイルを元のスタイルに合わせることができる。
+
+%\hypertarget{addgraph}{}
+%\item[関数]Addgraph(name ,プロットデータのリスト,option)
+%\item[機能]複数のプロットデータをまとめる
+%\item[説明]複数のプロットデータをまとめて扱う。たとえば,円と,円周上の点の2つのプロットデータをまとめて扱えば,平行移動や回転で,それらのプロットデータをまとめて平行移動や回転ができる。Joincrvs()では,プロットデータをつなげて1つのプロットデータにするが,Addgraph()では,それぞれのプロットデータからなるリスト(リストのリスト)にする。(プロットデータは座標のリストである)
+%
+%引数には,プロットデータ名を文字列化して渡す。たとえば,円のプロットデータが cr1 のとき,"cr1" とする。
+%
+%\vspace{\baselineskip}
+%【例】サイクロイドの図を描く。
+%\begin{verbatim}
+%Setpt(3);
+%Circledata("1",[[0,1],[0,0]]);
+%Pointdata("1",[0,0]);
+%Addgraph("1",["[pt1]","cr1"],["nodisp"]);
+%nn=32;
+%forall(1..nn,
+%t=2*pi/nn*#;
+%Rotatedata(text(#),"ad1",-t,[[0,1],"nodisp"]);
+%Translatedata(text(#),"rt"+text(#),[t,0],["dr,0.3"]);
+%);
+%\end{verbatim}
+%
+%\vspace{\baselineskip}
+%\hspace{20mm} \input{Fig/addgraph}
+%
+%ここで,Addgraph()の引数に与えるプロットデータのリストで,点のプロットデータ pt1 を"[pt1]" としていることに注意。円のプロットデータが,点の座標のリストであるのに対し,点のプロットデータは一つの座標だけなので,このようにしてリスト化して渡す。
+
+\begin{flushright}\hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+\hypertarget{changestyle}{}
+\item[関数]Changestyle(PDリスト, options)
+\item[機能]描画オプションを変更する
+\item[説明]複数の図形の描画オプションを一括して変更する。
+
+\vspace{\baselineskip}
+【例】線分AB,円ABの線を破線にして\TeX に書き出さないようにする。
+
+\hspace{10mm} \verb|Changestyle(["sgAB","crAB"],["da","notex"]);|
+
+
+\vspace{\baselineskip}
+\hypertarget{invert}{}
+\item[関数]Invert(PD)
+\item[機能]プロットデータを逆順にする
+
+\vspace{\baselineskip}
+\hypertarget{joincrvs}{}
+\item[関数]Joincrvs(name, プロットデータのリスト, options)
+\item[機能]隣接する曲線プロットデータ のリストを繋いで1本の曲線を作る。
+\item[説明]曲線のリストは隣接する順番で指定する。
+
+optionsは線種"dr, n", "da,m,n" , "do,m,n"
+
+\vspace{\baselineskip}
+【例】線分$y=x\ (-\sqrt{2} \leq x \leq \sqrt{2})$と半円で得られる閉曲線を描いて黄色で塗る。
+
+点Aは原点に,点Bは適当なところに作図しておく。
+
+\begin{layer}{150}{0}
+\putnotese{80}{5}{ \input{Fig/joincrvs}}
+\end{layer}
+
+\begin{verbatim}
+Plotdata("1","x","x=[-sqrt(2),sqrt(2)]");
+B.xy=[sqrt(2),sqrt(2)];
+Circledata("2",[A,B],["Rng=[pi/4,pi/4*5]"]);
+Joincrvs("1",["gr1","cr2"]);
+Shade(["join1"],["Color=yellow"]);
+\end{verbatim}
+\vspace{5mm}
+%\begin{flushright}\hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+\vspace{\baselineskip}
+\hypertarget{partcrv}{}
+\item[関数]Partcrv(name, A, B, プロットデータ, options)
+\item[機能]曲線プロットデータ上の点A, B の間の部分曲線を描く。
+\item[説明]2点A, Bの順序は曲線の向きと同一であること。曲線の向きは,$y=f(x)$のグラフではx座標が増加する向き。
+
+optionsは線種"dr, n", "da,m,n" , "do,m,n"
+
+\vspace{\baselineskip}
+【例】放物線を点線で描き,一部を実線で描く。
+
+\verb|Plotdata("1", "x^2", "x", ["do"]);|(プロットデータの名前はgr1となる)
+
+\verb|Partcrv("1", [0,0], [1,1], "gr1");|
+
+\begin{center} \input{Fig/partcrv1} \end{center}
+
+【例】円の一部を実線で描く。円のプロットデータは指定した円周上の点から反時計回りの順にできる。点Aは円の中心,Bは円周上の点とする。点P,Qは適当な位置に作図しておく。
+\begin{verbatim}
+Circledata([A,B], ["do"]);
+Plotdata("1", "x^2", "x", ["do"]);
+tmp=Intersectcrvs("crAB","gr1");
+P.xy=tmp_1;
+Q.xy=tmp_2;
+Partcrv("1", P, Q, "crAB");
+Partcrv("2", Q, P, "crAB");
+\end{verbatim}
+\vspace{\baselineskip}
+\hspace{10mm} \input{Fig/partcrv3} \hspace{10mm} \input{Fig/partcrv4}
+
+\hspace{25mm}part1 の図\hspace{45mm}part2 の図
+
+\vspace{\baselineskip}
+【例】放物線$y=x^2$が円で切り取られる部分を実線で描く。
+
+\begin{layer}{150}{0}
+\putnotese{85}{0}{\input{Fig/partcrv}}
+\end{layer}
+\begin{verbatim}
+Circledata("1",[[0,2],[0,0]],["da"]);
+Plotdata("1","x^2","x",["do"]);
+tmp=Intersectcrvs("cr1","gr1");
+Partcrv("2",tmp_2,tmp_1,"gr1",["dr,2"]);
+
+\end{verbatim}
+
+\vspace{\baselineskip}
+\vspace{\baselineskip}
+\vspace{\baselineskip}
+
+%\begin{flushright}\hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+\vspace{\baselineskip}
+\hypertarget{enclosing}{}
+\item[関数]Enclosing(name , PDリスト , [開始位置, 交点計算の許容限界1, 2])
+\item[機能]複数の曲線から閉曲線を作る。
+\item[説明]開始位置は,最初と最後の曲線の交点が複数あるときに指定する。
+
+開始点は近くに取ればよい。許容限界は,通常は指定しなくてよい。
+
+\vspace{\baselineskip}
+【例】放物線と直線で囲まれる領域に色を塗るために Shade() を使う。
+\begin{verbatim}
+Plotdata("1","x^2","x");
+Lineplot("1",[[0,0],[1,0]]);// axis x
+Lineplot("2",[[2,0],[2,1]]);
+Enclosing("1",["Invert(gr1)","ln1","ln2"],["nodisp"]);
+Shade(["en1"],["Color=red"]);
+\end{verbatim}
+\vspace{\baselineskip}
+ \begin{center} \input{Fig/enclosing} \end{center}
+
+\vspace{\baselineskip}
+注)閉曲線のとりかたでは,出発点を原点にした反時計回りまたは時計回りにすると
+
+反時計回りで\verb|Enclosing("1",["ln1","ln2","Invert(gr1)"]);|
+
+時計回りで\verb|Enclosing("1",["gr1","Invert(ln2)","Invert(ln1)"]);|
+
+\begin{flushright}\hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+\vspace{\baselineskip}
+\hypertarget{hatchdata}{}
+\item[関数]Hatchdata(name , 方向リスト , プロットデータ , options)
+\item[機能]閉曲線の内部に斜線を引く。
+\item[説明]引数は,曲線名,内部外部のパターンを与える''i'',''o''の文字列,閉曲線を与える曲線と領域の内部を定める方向のリストとオプション。\\
+オプション(カッコ内はデフォルト値)\\
+ 角度(45),間隔(1),\verb|"Max=(20)"| 斜線の最大本数,\\
+ \verb|"No=点リスト"| 点リストの点が選ばれているときは実行しない\\
+ \verb|"File=y/m/n (n)"| データファイルを作るか\\
+ \verb|"Check=点リスト"| 点リストの点が変更されていたら,ファイルを作り直す
+
+\vspace{\baselineskip}
+【例】円の内部。(次図左)
+\begin{verbatim}
+Circledata([A,B],["dr"]);
+Hatchdata("1",["i"],[["crAB"]],["dr,0.7"]);
+\end{verbatim}
+
+【例】3つの閉曲線の内側・外側のパターンが同一である領域(次図右)
+\begin{verbatim}
+Circledata([A,B],["dr"]);
+Paramplot("1","[4*cos(t),2*sin(t)]","t=[0,2*pi]");
+Paramplot("2","[2*cos(t),4*sin(t)]","t=[0,2*pi]");
+Hatchdata("1",["ioi"],[["crAB"],["gp1"],["gp2"]],["dr,0.7"]);
+Hatchdata("2",["iio"],[["crAB"],["gp1"],["gp2"]],["dr,0.7"]);
+\end{verbatim}
+\vspace{\baselineskip}
+\hspace{5mm} \input{Fig/hatch1} \hspace{5mm} \input{Fig/hatch2}
+
+【例】複数の領域。
+\begin{verbatim}
+Plotdata("1","2*sin(x)","x=[-pi,3*pi]",["Num=100"]);
+Listplot([A,B]);
+Listplot([A,C]);
+Hatchdata("1",["ii"],[["sgAB","n"],["gr1","s"]],["dr,0.7"]);
+Hatchdata("2",["ii"],[["sgAC","s"],["gr1","n"]],["dr,0.7"]);
+\end{verbatim}
+\begin{center}
+\begin{center} \input{Fig/hatch3} \end{center}
+\end{center}
+
+【例】複数の領域その2。
+\begin{verbatim}
+Plotdata("1","2*sin(x)","x=[-pi,3*pi]",["Num=100"]);
+Listplot([A,B]);
+Listplot([A,C]);
+Hatchdata("1",["iio"],[["sgAB","s"],["sgAC","n"],["gr1","n"]]);
+\end{verbatim}
+\begin{center}
+\begin{center} \input{Fig/hatch4} \end{center}
+\end{center}
+
+
+【例】3次曲線と接線で囲まれた領域
+
+点Aを原点付近に作図しておく。
+\begin{verbatim}
+Deffun("f(x)",["regional(y)","y=x^3-2*x","y"]);
+Plotdata("1","f(x)","x",["Num=100"]);
+Putoncurve("A","gr1");
+coef=Derivative("f(x)","x",A.x);
+Defvar(["coef",coef]);
+Deffun("g(x)",["regional(y)","y=coef*(x-A.x)+A.y","y"]);
+Plotdata("2","g(x)","x",["Num=1"]);
+if(!Isptselected(A),
+ Enclosing("1",["gr2","Invert(gr1)"],[A,"nodisp"]);
+ Hatchdata("1",["i"],[["en1"]]);
+);
+
+\end{verbatim}
+\begin{layer}{150}{0}
+\putnotese{80}{0}{\input{Fig/hatch5}}
+\end{layer}
+
+点Aをドラッグして曲線上を動かすと,
+
+\verb|if(!Isptselected(A),・・・| の効果により,
+
+その間は領域の斜線は引かれない。
+
+点A以外の画面上の適当な位置をクリックして,
+
+点Aが選択状態でなくなると斜線が引かれる。
+
+引かれる斜線の向きや間隔を変えることもできる。
+
+間隔は実数で指定できる。
+
+\vspace{\baselineskip}
+【例】円の内部または円と直線で区切られた図形
+
+\verb|Circledata([A,B]);|のプロットデータ crAB を用いて,下図左から
+
+\verb|Hatchdata("1",["i"],[["crAB"]]);| 円内に傾き$45^{\circ}$の斜線を引く
+
+\verb|Hatchdata("2",["i"],[["crAB"]],[-40,2]);| 傾き$-40^{\circ}$,間隔を2倍に
+
+\verb|Hatchdata("3",["i"],[["crAB"]],["dr,0.5"]);|線の太さを0.3倍に
+
+\verb|Hatchdata("4",["i"],[["crAB"]],[-45,2,"dr,0.3"]);|
+
+\input{Fig/HatchZuKita1.tex}
+
+円のオプションに "notex"をつけた場合と,破線で描いた場合。
+\begin{verbatim}
+Circledata([A,B],["notex"]);
+Circledata([A,B],["da"]);
+ \end{verbatim}
+
+\hspace{10mm} \input{Fig/HatchZuKita7.tex}\input{Fig/HatchZuKita8.tex}
+
+直線で分けられた領域を作り,対角の上下にハッチをかける。線を描き分ける。
+\begin{verbatim}
+ Circledata([A,B]);
+ Lineplot("1",[A,B]);
+ Lineplot("2",[A,C]);
+ Hatchdata("1",["iii"],[["crAB"],["ln1","n"],["ln2","n"]]);
+ Hatchdata("2",["iii"],[["crAB"],["ln1","s"],["ln2","s"]],[90,0.5]);
+\end{verbatim}
+
+\hspace{40mm}\input{Fig/HatchZuKita9.tex}
+
+\begin{flushright}\hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+\vspace{\baselineskip}
+\hypertarget{dotfilldata}{}
+\item[関数]Dotfilldata(name , 方向リスト , プロットデータ , options)
+\item[機能]領域を点で敷き詰める。
+\item[説明]Rとデータの授受をおこなって描画する。書式はHatchdata()と同様。
+
+オプションは,ドットの密度で 0.1〜0.8 程度。 初期設定は0.3。
+
+\vspace{\baselineskip}
+【例】円グラフ
+
+Partcrv() と Enclosing() で閉曲線を作って点を敷き詰める。
+
+
+%\begin{center}\scalebox{0.9}{\input{Fig/dotfill}} \end{center}
+\begin{layer}{150}{0}
+\putnotese{85}{-3}{\scalebox{0.9}{ \input{Fig/dotfill}}}
+\end{layer}
+
+\begin{verbatim}
+r=3;
+p0=r*[cos(pi/2),sin(pi/2)];
+p1=r*[cos(-pi/6),sin(-pi/6)];
+p2=r*[cos(-3*pi/4),sin(-3*pi/4)];
+Circledata("1",[[0,0],[r,0]]);
+Listplot("1",[[0,0],p0]);
+Listplot("2",[[0,0],p1]);
+Listplot("3",[[0,0],p2]);
+Partcrv("1",p1,p0,"cr1");
+Enclosing("1",["sg2","part1","Invert(sg1)"],[[0,0]]);
+Partcrv("2",p2,p1,"cr1");
+Enclosing("2",["sg3","part2","Invert(sg2)"],[[0,0]]);
+Dotfilldata("1",["i"],[["en1"]]);
+Dotfilldata("2",["i"],[["en2"]],[0.1]);
+\end{verbatim}
+
+\vspace{\baselineskip}
+\hypertarget{shade}{}
+\item[関数]Shade(("名前"), プロットデータのリスト , options)
+\item[機能]閉曲線で囲まれた領域を塗りつぶす。
+\item[説明]第1引数には,閉曲線を与える曲線分のプロットデータ名を並べる。
+
+デフォルトでは,Joincrvsを使って閉曲線を作っている。ただし,プロットデータのリストに
+"Invert()"が入っていれば,Enclosingを使う。
+
+optionの Color は,Cinderellaの画面上での描画色をリストで与える。濃さを指定したい場合は色名やRGBではなくCMYKにする。
+
+optionsには,他に,次のものがある。
+
+・Enclosingを使うかどうか:''Enc=y/n''(初期値は y)
+
+・Enclosingのときの開始点,描画色
+
+・描画領域のトリミング:Trim=y/n (初期値は n )
+
+複数のShadeを使うときは,名前をつける。
+
+\vspace{\baselineskip}
+【例】$y=2\sin x$のグラフと直線$y=1$ とで囲まれた部分に黒0.2の濃さで色を塗る。
+\begin{verbatim}
+Setax([7,"nw"]);
+Plotdata("1","2*sin(x)","x",["Num=100"]);
+Lineplot("1",[[0,1],[1,1]]);
+Enclosing("1",["ln1","Invert(gr1)"],[[2,1],"nodisp"]);
+Shade(["en1"],["Color=[0,0,0,0.2]"]);
+\end{verbatim}
+\begin{center} \input{Fig/shade} \end{center}
+
+正弦曲線と直線の交点は簡単に計算できるので,次のように Partcrv() で部分曲線を求め,Enclosingで閉曲線を求めずにShadeを使ってもよい。
+\begin{verbatim}
+Plotdata("1","2*sin(x)","x",["Num=100"]);
+Lineplot("1",[[0,1],[1,1]]);
+Partcrv("1",[5*pi/6,1],[13*pi/6,1],"gr1");
+Shade(["ln1","Invert(part1)"],[[2.5,1],"Color=0.2*[1,0,0,1]"]);
+\end{verbatim}
+
+
+\vspace{\baselineskip}
+【例】2つの放物線で囲まれた部分を赤で塗る。
+\begin{verbatim}
+Plotdata("1","x^2-1","x=[-3,3]");
+Plotdata("2","x^2/2","x=[-3,3]");
+Shade(["gr2","Invert(gr1)"],[[-1.5,1],"Color=[1,0,0]","alpha->0.4"]);
+\end{verbatim}
+
+ここで,\verb|alpha->0.4| は画面上の色濃度指定。
+
+\vspace{\baselineskip}
+\begin{center}\scalebox{0.9}{\input{Fig/shade01}} \end{center}
+
+\vspace{\baselineskip}
+【例】描画領域(NE,SWの矩形領域)からはみ出した部分は表示しないようにする。
+
+\begin{verbatim}
+Plotdata("1","x^2","x");
+Partcrv("1",[-1,1],[3,9],"gr1");
+Listplot("1",[[3,9],[-1,1]]);
+Joincrvs("1",["sg1","part1"]);
+Shade(["join1"],["Color=[0,0,0.2,0]","Trim=y"]);
+\end{verbatim}
+
+SW,NE を動かしてみると,白枠内だけが色塗りされる。
+
+\vspace{\baselineskip}
+【例】同心円をリング状に塗る。
+
+下図右のように,同心円をリング状に塗るが,円2つだけでは閉曲線はできない。そこで,左図のように,円の描き始めを線分で結んで閉曲線を作る。このとき,向きを考えて,Joincrvsで結ぶように,''Enc=n''をつける。線分は非表示にしたいので,\verb|"nodisp"|オプションをつけておく。なお,点Aを適当な位置に作図しておく。
+
+\begin{verbatim}
+r1=2;
+r2=1.5;
+Circledata("1",[A,A+[r1,0]]);
+Circledata("2",[A,A+[r2,0]]);
+Listplot("1",[A+[r1,0],A+[r2,0]],["nodisp"]);
+Shade(["cr1","sg1","Invert(cr2)","Invert(sg1)"],["Enc=n","Color=green"]);
+\end{verbatim}
+\begin{center}\input{Fig/greenring} \end{center}
+
+その他,\hyperlink{joincrvs}{Joincrvs() の例}も参照のこと
+
+%\begin{flushright}\hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+\vspace{\baselineskip}
+\hypertarget{reflectdata}{}
+\item[関数]Reflectdata(name , プロットデータ , 対称点または対称軸,options)
+\item[機能]プロットデータの鏡映を作成
+\item[説明]プロットデータを指定された点または軸に関して対称移動する。
+
+対称点は座標または,点の識別名。ただし,対称点を座標で示すときは要素がひとつのリストにする。
+
+対称軸はリスト[ 点1, 点2 ]で指定。
+
+\vspace{\baselineskip}
+【例】中心A , 半径ABの円を描き,そのプロットデータを用いて鏡映を描く。
+
+点Cに関して対称な円を実線
+
+点(-1,2)に関して対称な円を太い実線
+
+直線DEに関して対称な円を破線
+
+\begin{verbatim}
+Circledata([A,B]);
+Reflectdata("1","crAB",[C]);
+Reflectdata("2","crAB",[[-1,2]],["dr,2"]);
+Reflectdata("3","crAB",[D,E],["da"]);
+\end{verbatim}
+
+\vspace{\baselineskip}
+ \begin{center} \input{Fig/reflectdata} \end{center}
+
+%\begin{flushright}\hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+\vspace{\baselineskip}
+\hypertarget{rotatedata}{}
+\item[関数]Rotatedata(name , プロットデータ ,角度 , [中心 , options])
+\item[機能]プロットデータの位置を回転する
+\item[説明]図形を,中心で示された点の周りに回転する。角度は弧度法で与える
+
+中心とoptionsはまとめてリストで与える。
+
+\begin{spacing}{1.5}
+【例】中心A , 半径ABの円を描き,次のように回転して線種を変えて描く。
+
+ 点Cを中心に$\dfrac{\pi}{2} $,点(1,5)を中心に$\dfrac{\pi}{3}$ , 点Dを中心に $-\dfrac{\pi}{3} $
+\end{spacing}
+\begin{verbatim}
+ Circledata([A,B]);
+ Rotatedata("1","crAB",pi/2,[C]);
+ Rotatedata("2","crAB",pi/3,[[1,5],"dr,2"]);
+ Rotatedata("3","crAB",-pi/3,[D,"da"]);
+\end{verbatim}
+\vspace{\baselineskip}
+\begin{center}\scalebox{0.9}{ \input{Fig/rotatedata} }\end{center}
+
+\begin{flushright}\hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+\vspace{\baselineskip}
+\hypertarget{scaledata}{}
+\item[関数]Scaledata(name , プロットデータ,x方向比率 , y方向比率 , [中心 , options])
+\item[機能]図形の位置を拡大・縮小する
+\item[説明]図形の位置をプロットデータを用いて指定された比率で拡大・縮小する
+
+比率は [x方向比率 , y方向比率] のリストで与えてもよい。
+
+中心とoptionsはまとめてリストで与える。optionsは線種
+
+\vspace{\baselineskip}
+【例】点A(2,1),B(1,1),C(-1,-1),D(3,-1) を作図しておく。
+
+ Aを中心とする半径ABの円のプロットデータを作り,
+
+原点中心に$x$軸方向に3,$y$軸方向に2拡大する。
+
+Cを中心に$x$軸方向に3,$y$軸方向に2拡大し,実線で太く描く。
+
+原点中心にベクトル$\overrightarrow{\mathrm{OD}} $だけ拡大し,破線で描く。
+\begin{verbatim}
+Circledata([A,B]);
+Scaledata("1","crAB",3,2,[[0,0]]);
+Scaledata("2","crAB",3,2,[C,"dr,2"]);
+Scaledata("3","crAB",[D.x,D.y],[[0,0],"da"]);
+\end{verbatim}
+
+\vspace{0mm}
+ \begin{center} \input{Fig/scaledata} \end{center}
+
+%\begin{flushright}\hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+\vspace{\baselineskip}
+\hypertarget{translatedata}{}
+\item[関数]Translatedata(name , プロットデータ , 移動ベクトル , options)
+\item[機能]プロットデータを平行移動する
+\item[説明]プロットデータを移動ベクトルで示された分だけ平行移動する。
+
+\vspace{\baselineskip}
+【例】点A,B,C,Dを作図ツールでとっておく。
+
+\verb|Circledata([A,B]);| でできる円(crAB)を
+ $x$軸方向に2,$y$軸方向に3だけ平行移動して実線で描く。
+
+ベクトル$\overrightarrow{\mathrm{OC}} $だけ平行移動し,実線で太く描く。
+
+ベクトル$\overrightarrow{\mathrm{OD}} $だけ平行移動し,破線で描く。
+
+\begin{verbatim}
+Circledata([A,B]);
+Translatedata("1","crAB",[2,3]);
+Translatedata("2","crAB",C,["dr,2"]);
+Translatedata("3","crAB",D,["da"]);
+\end{verbatim}
+
+\vspace{0mm}
+\begin{center} \input{Fig/translatedata} \end{center}
+
+%\begin{flushright}\hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+%\vspace{\baselineskip}
+\hypertarget{intersectcrvs}{}
+\item[関数]Intersectcrvs(プロットデータ1, プロットデータ2)
+\item[機能]2曲線の交点リストを取得する。
+\item[説明]オプションとして,共有点があるかどうかを判断するための限界値があるが,通常は使わない。
+
+\vspace{\baselineskip}
+【例】円と曲線の交点をP,Qとする。
+
+\begin{layer}{150}{0}
+\putnotese{80}{0}{ \input{Fig/Intersectcrvs1}}
+\end{layer}
+
+\begin{verbatim}
+Plotdata("1", "sin(x)", "x", ["Num=100"]);
+Circledata([A, B]);
+tmp=Intersectcrvs("gr1","crAB");
+P.xy=tmp_1;
+Q.xy=tmp_2;
+ \end{verbatim}
+
+この関数は,交点のデータのリストを返すので,tmp=[ [ -0.37, -0.36 ], [ 2.13, 0.85 ] ] のように値が返ってくる。交点の順序は PD1, PD2 の順序と曲線の向きによって決まる。曲線の向きは,$y=f(x)$のグラフではx座標が増加する向きで,パラメーター表示曲線ではパラメータの増加する向き。また,PD1 上から探し始めて PD2 との交点を拾っていく。
+
+交点がひとつの場合も tmp=[ [ 2.45, 0.63 ] ] と2重のリストに入っているので,点として取出すには \verb|P.xy=tmp_1; |とする。
+
+\vspace{\baselineskip}
+注)交点の算出は,数式処理によるのではなく,プロットデータからの数値探索のアルゴリズムによっている。
+
+\vspace{\baselineskip}
+\hypertarget{intersectcrvspp}{}
+\item[関数]IntersectcrvsPp(プロットデータ1, プロットデータ2)
+\item[機能]2曲線の交点のパラメータリストを取得する。
+\item[説明]2曲線の交点の座標とパラメータのリストを返す。
+
+Intersectcrvs() との違いは,パラメータがあるかどうかである。
+
+\vspace{\baselineskip}
+【例】放物線と直線の交点のパラメータを求める。
+
+2点A(-1,1),B(2.4) を作図しておく。
+\begin{verbatim}
+Plotdata("1","x^2","x");
+Lineplot([A,B]);
+p1=Intersectcrvs("gr1","lnAB");
+p2=IntersectcrvsPp("gr1","lnAB");
+println("p1="+p1);
+println("p2="+p2);
+\end{verbatim}
+とすると,コンソールには
+\begin{verbatim}
+p1=[[-1,1],[2,4]]
+p2=[[[-1,1],17.68,1],[[2,4],42.66,1]]
+\end{verbatim}
+と表示される。
+%\begin{flushright}\hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+\vspace{\baselineskip}
+\hypertarget{nearestpt}{}
+\item[関数]Nearestpt(PD1,PD2)
+\item[機能]2曲線に対し,最も近い点とそのパラメータ,距離のリストを返す
+\item[説明]戻り値は,それぞれの曲線上の点の座標とプロットデータ中の位置,その距離からなるリスト。
+
+\vspace{\baselineskip}
+【例】2つの放物線上の点の最短距離とその位置を求める。
+
+点A,Bを作図ツールでとっておく。
+
+\begin{layer}{150}{0}
+\putnotese{80}{-10}{ \input{Fig/nearestpt}}
+\end{layer}
+
+\begin{verbatim}
+Plotdata("1", "x^2+2", "x=[-2,2]");
+Plotdata("2", "-(x-2)^2+1","x=[0,4]");
+plist=Nearestpt("gr1","gr2");
+A.xy=plist_1;
+B.xy=plist_3;
+Listplot([A,B],["do"]);
+Pointdata("1",[A,B],["Size=2"]);
+Letter([A,"n2w","A",B,"s2e","B",(A+B)/2,"e",text(plist_5)]);
+\end{verbatim}
+
+ここで plistに代入されたリストは次のようになっている。
+
+\hspace{10mm}[[0.4,2.16],31,[1.58,0.82],20.73,1.78]
+
+なお,距離 1.78 は小数点以下第3位を四捨五入して表示されている。
+
+\vspace{\baselineskip}
+\hypertarget{nearestptcrv}{}
+\item[関数]Nearestptcrv(座標, プロットデータ)
+\item[機能]点に最も近いプロットデータの点を求める
+\item[説明]第1引数の座標に最も近い曲線プロットデータ上の点の座標を返す。
+
+\vspace{\baselineskip}
+【例】点(3,0)に最も近い $y=x^2$ 上の点を求める。
+
+点Aは(3,0)に,点Bは適当な位置に作図しておき,次のスクリプトを実行すると点Bが求める点となる。
+
+\begin{layer}{150}{0}
+\putnotese{80}{0}{\scalebox{1.0}{\input{Fig/Nearestpt1}}}
+\end{layer}
+
+\begin{verbatim}
+Plotdata("1", "x^2", "x");
+B.xy=Nearestptcrv(A.xy,"gr1");
+Listplot([A,B],["do"]);
+Ptsize(2);
+Pointdata("1",[A,B]);
+Letter([A,"ne","A",B,"nw","B"]);
+\end{verbatim}
+
+\vspace{\baselineskip}
+\vspace{\baselineskip}
+注)第1引数は座標なので,\verb|A| ではなく \verb|A.xy| としなければならない。
+
+\begin{flushright}\hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+%\vspace{\baselineskip}
+\hypertarget{numptcrv}{}
+\item[関数]Numptcrv (プロットデータ)
+\item[機能]プロットデータの個数を返す
+\item[説明]Cindyscript で length(PD)とするのと同じ
+
+\vspace{\baselineskip}
+【例】 Implicit() と Paramplot() でそれぞれ楕円を描いたときのプロットデータの順序を比較する。
+ただし,TeXには書き出さない。
+
+\begin{verbatim}
+Slider("A-C-B",[0,-2],[6,-2]);
+Implicitplot("1","x^2+4*y^2=4","x=[-2,2]","y=[-2,2]",["do"]);
+Paramplot("1","[2*cos(t)+5,sin(t)]","t=[0,2*pi]",["do","Num=140"]);
+println([Numptcrv(imp1),Numptcrv(gp1)]);
+n=floor(C.x*2);
+repeat(n,s,start->0,
+t=s*10+1;
+draw(imp1_t,color->hue(s/10));
+draw(gp1_t,color->hue(s/10));
+);
+\end{verbatim}
+
+\begin{center}
+\includegraphics[bb=0.00 0.00 305.02 133.01,width=8cm]{Fig/numptcrv.pdf}
+\end{center}
+
+4行目で,2つのプロットデータの個数が同じであることを確かめている。
+
+スライダを動かすと,10個おきのプロットデータに対応する点が描かれる。
+
+\vspace{\baselineskip}
+\hypertarget{paramoncrv}{}
+\item[関数]Paramoncrv(点の座標, 曲線の名前)
+\item[機能]曲線上の点のパラメータ値を返す。
+\item[説明]曲線は折れ線として描かれ,曲線上の各点はこの折れ線の節点を基準としたパラメータ値を持つ。パラメータ値は整数部分が節点の番号,小数部分が節間の位置を表す。
+
+\vspace{\baselineskip}
+【例】図のような点PからQに至る円周上の5等分点を節点とする折れ線cr1において,$n$番目の線分上の点は$n\leq t\leq n+1$の範囲のパラメータ値を持つ。
+
+たとえば,図の点$\mathrm{A}$は2番目の線分上にあり,この値は
+
+\begin{verbatim}
+ println(Paramoncrv(A.xy,"cr1"));
+\end{verbatim}
+
+によってコンソールに表示される。(たとえば2.45)。
+
+点Aの位置を動かすとパラメータ値は変わる。
+
+\vspace{\baselineskip}
+\begin{center}
+ \input{Fig/paramoncrv}
+\end{center}
+
+\begin{flushright}\hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+
+\vspace{\baselineskip}
+\hypertarget{pointoncrv}{}
+\item[関数]Pointoncrv(点のパラメータ値, PD)
+\item[機能]曲線上のパラメータ値を持つ点の座標を返す。
+\item[説明]曲線(折れ線)上の節点を基準としたパラメータ値により点の位置が定まる。
+
+\vspace{\baselineskip}
+【例】図のような点$\mathrm{P}$から$\mathrm{Q}$に至る半円周上の5等分点を節点とする折れ線cr1において,パラメータ値$4.5$を持つ点$\mathrm{A}$は4番目の線分の中点である。したがって
+
+\begin{verbatim}
+Circledata("0",[[0,0],[2,0]],["do"]);
+Circledata("1",[[0,0],[2,0]],["Num=5","Rng=[0,pi]"]);
+tmp=Pointoncurve(4.5,"cr1");
+Pointdata("1",tmp,["Size=3"]);
+Letter([tmp,"nw","A",[2,0],"se","P",[-2,0],"sw","Q"]);
+\end{verbatim}
+
+によって,点Aを中点に置くことができる。
+
+\vspace{\baselineskip}
+ \begin{center} \scalebox{0.9}{\input{Fig/pointoncrv}} \end{center}
+
+%\vspace{\baselineskip}
+\hypertarget{ptcrv}{}
+\item[関数]Ptcrv(n,プロットデータ)
+\item[機能]曲線プロットデータのn 番目の節点を返す
+\item[説明]Cindyscript の PD\_n と同じ
+
+\vspace{\baselineskip}
+【例】楕円上の点で分割する。あからじめ必要な点を作図しておく。
+
+\begin{layer}{150}{0}
+\putnotese{70}{05}{ \input{Fig/ptcrv}}
+\end{layer}
+\begin{verbatim}
+Circledata([O,P],["do","Num=100","notex"]);
+Scaledata("1","crOP",4/3,1);
+F.xy=[-sqrt(7),0];
+A=Ptcrv(9,sc1);
+B=Ptcrv(16,sc1);
+Listplot("1",[A,F,B],["da"]);
+Partcrv("1",A,B,"sc1",["dr,3"]);
+Shade(["part1","sg1"],0.1);
+Arrowhead(B,"sc1",[1.5]);
+Letter([A,"ne","A",B,"ne","B",F,"s2","F"]);
+\end{verbatim}
+
+%\begin{flushright}\hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+\vspace{\baselineskip}
+\hypertarget{ptstart}{}
+\item[関数]Ptstart(プロットデータ) , Ptend(プロットデータ)
+\item[機能]プロットデータの最初の点,最後の点を取得する。
+\item[説明]プロットデータの最初の点,最後の点の座標を返す。
+
+\vspace{\baselineskip}
+【例】定義域を限定したグラフの両端の点を取得し線分ABを引く。
+\begin{verbatim}
+Deffun("f(x)",["regional(y)","y=x^2","y"]);
+Plotdata("1","f(x)","x",["do"]);
+Plotdata("2","f(x)","x=[-1,2]");
+Lineplot("1",[Ptstart(gr2),Ptend(gr2)],["do"]);
+Listplot("1",[Ptstart(gr2),Ptend(gr2)]);
+Letter([A,"w2","A",B,"e2","B"]);
+\end{verbatim}
+\vspace{\baselineskip}
+\begin{center} \input{Fig/ptstart} \end{center}
+
+\vspace{\baselineskip}
+\hypertarget{readoutdata}{}
+\item[関数]ReadOutData(ファイル名)
+\item[機能]外部データをプロットデータとして読み込む
+\item[説明]CやRなどで作成したKeTCindy形式のデータファイルを読み込む。
+
+引数を省略した場合は,Fheadで定義したファイル名のテキストファイルから読み込む。
+
+ファイル名にはコンマで区切ってパスを与えることができる。たとえば,
+
+\verb|ReadOutData("/datafolder","file.txt"); |
+
+KeTCindy形式のデータとは
+
+ 変数名// \\
+ start//(リストの始まり) \\
+ [ , , ], …. // (個々のデータ2か3次元) \\
+ … \\
+ end// (リストの終わり) \\
+ start// (次のリストの始まり) \\
+… \\
+ end// \\
+ 変数名// \\
+ start// \\
+ … \\
+ end// \\
+
+の形式のテキストファイル。
+
+\hypertarget{readcsv}{}
+\item[関数]Readcsv(path,filename,option)
+\item[機能]csvファイルを読む。
+\item[説明]csvファイルを読みこむ。戻り値は読み込んだデータのリスト。
+
+第1引数の path は,ファイルを作業フォルダ( 初期設定は fig )に置いた場合は省略することができる。そうでない場合は,フルパスで指定する。たとえば,"/Users/Hoge/Desktop"
+
+option は,"Flat=" で,"Flat=y" の場合は,読み込んだデータをリスト化したときに平滑化(1次元のリスト)にする。 初期設定は "Flat=n"
+
+【例】次のようなCSVファイル sample.csvを読み込むとする。
+
+\begin{verbatim}
+12,14,15,18,13
+9,13,17,21
+\end{verbatim}
+
+つまり,2行分のデータである。
+
+\begin{verbatim}
+data=Readcsv("sample.csv");
+\end{verbatim}
+
+とすると,
+\begin{verbatim}
+data=[[12,14,15,18,13],[9,13,17,21]]
+\end{verbatim}
+
+となる。
+
+したがって,1行目のデータだけ取り出したい場合は
+
+\begin{verbatim}
+dt1=data_1;
+\end{verbatim}
+
+とする。
+
+\begin{flushright}\hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+\hypertarget{readlines}{}
+\item[関数]Readlines(path,filename,option)
+\item[機能]テキストファイルを1行ずつ読む。
+\item[説明]テキストファイルを1行ずつ読みこむ。戻り値は読み込んだ文字列のリスト。
+
+第1引数の path は,ファイルを作業フォルダ( 初期設定は fig )に置いた場合は省略することができる。そうでない場合は,フルパスで指定する。たとえば,"/Users/Hoge/Desktop"
+
+\vspace{\baselineskip}
+\hypertarget{writeoutdata}{}
+\item[関数]WriteOutData(ファイル名,PDリスト)
+\item[機能]外部データに書き出す
+\item[説明]プロットデータをKeTCindy形式のデータファイルに書き出す。出力先の 初期設定は作業フォルダ。
+
+【例】 放物線と円のプロットデータを書き出す。
+
+\begin{verbatim}
+ Plotdata("1", "x^2","x");
+ Circledata("1",[[0,0],[1,0]]);
+ WriteOutData("figdata.txt",["gr1",gr1,"cr1",cr1]);
+\end{verbatim}
+
+書き出されたファイルの中身は次のようになっている。
+
+\begin{verbatim}
+gr1//
+start//
+[[-2.68843,7.22765],[-2.51807,6.34067],・・,[-2.00698,4.02798]]//
+[[-1.83662,3.37318],[-1.66626,2.77642],・・,[-1.15518,1.33443]]//
+  以下,同様にプロットデータが続く
+[[5.82965,33.98479]]//
+end//
+cr1//
+start//
+[[1,0],[0.99211,0.12533],[0.96858,0.24869],・・,[0.80902,0.58779]]//
+  以下,同様にプロットデータが続く
+[[0.87631,-0.48175],[0.92978,-0.36812],・・,[1,0]]//
+end////
+\end{verbatim}
+
+\vspace{\baselineskip}
+\hypertarget{extractdata}{}
+\item[関数]Extractdata(データ名,属性)
+\item[機能]ReadOutData() で読み込んだデータに属性をつける。
+\item[説明]ReadOutData() で読み込んだデータには,線種などの属性がついていないので,そのままでは表示されない。そこで,この関数により属性をつけて表示する。
+\begin{verbatim}
+ReadOutData("figdata.txt");
+Extractdata("gr1",["da"]);
+\end{verbatim}
+
+\end{description}
+\begin{flushright}\hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+%\newpage
+% ======== 計算 =======================
+\subsection{計算}
+
+\begin{description}
+
+\hypertarget{derivative}{}
+\item[関数]Derivative(関数式 , 変数 , 値)
+\item[機能]関数の微分係数を求める
+\item[説明]関数式で与えられた関数の,「変数=値」における微分係数を求める。
+
+値は,点の座標を用いることができる。点Aのx座標であれば, A.x とする。
+
+\vspace{\baselineskip}
+【例】3次曲線上の点Aで接線を引く。点A,Bは作図ツールで適当にとっておく。
+\begin{verbatim}
+Deffun("f(x)",["regional(y)","y=x^3-4*x","y"]);
+coef=Derivative("f(x)","x",A.x);
+A.y=f(A.x);
+B.y=coef*(B.x-A.x)+A.y;
+Plotdata("1","f(x)","x",["Num=200"]);
+Lineplot([A,B]);
+Letter([A,"ne","A"]);
+\end{verbatim}
+%\vspace{\baselineskip}
+\begin{center} \input{Fig/derivative} \end{center}
+%\vspace{\baselineskip}
+
+
+なお,曲線のプロットデータを用いて,微分係数を求めることもできる。
+
+書式は,Derivative(PD ,値) で,次のように使う。(上の例と同じ図ができる)
+
+\begin{verbatim}
+ Deffun("f(x)",["regional(y)","y=x^3-4*x","y"]);
+ Plotdata("1","f(x)","x",["Num=200"]);
+ coef=Derivative("gr1","x="+A.x);
+ A.y=f(A.x);
+ B.y=coef*(B.x-A.x)+A.y;
+ Lineplot([A,B]);
+ Letter([A,"ne","A"]);
+\end{verbatim}
+
+また,曲線の接線については,\hyperlink{tangentplot}{Tangentplot}も参照されたい。
+
+\begin{flushright}\hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+\vspace{\baselineskip}
+\hypertarget{integrate}{}
+\item[関数]integrate(関数式 , 変数$=$範囲 , options)
+\item[関数]integrate(PD , 範囲 , options)
+\item[機能]関数式またはプロットデータで与えられた関数(データ)の数値積分の値を求める。
+\item[説明]optionsは次の通り。
+
+"Rule=s":シンプソン法による。 初期設定は大島ベジェ公式。
+
+"Num=数値":分割数の指定。初期値は 100
+
+\vspace{\baselineskip}
+【例】$f(x)=x^3-2x^2+2$ について,0から3までの定積分の値を求める。
+\begin{verbatim}
+f(x):=x^3-2*x^2+2;
+val=Integrate("f(x)","x=[0,3]");
+ println(val);//8.25が表示される
+\end{verbatim}
+
+\vspace{\baselineskip}
+【例】上の例と同じ関数をプロットデータで指定する。
+\begin{verbatim}
+plotdata("1","x^3-2*x^2+2","x");
+println(Integrate("gr1",[0,3]));
+\end{verbatim}
+
+数値積分ではなく,数式処理として定積分の値を求める場合は,Maxima を利用する。\hyperlink{calcbyM}{CalcbyM}
+を参照。
+
+\vspace{\baselineskip}
+\hypertarget{inversefun}{}
+\item[関数]Inversefun(関数 , 範囲 , 値)
+\item[機能]関数の逆関数値を求める
+\item[説明]関数は文字列で,関数式もしくは定義された関数名とする。\\
+指定された範囲の中で逆関数値を求める。存在しない場合は一方の端点を戻り値とし,コンソールに「not found」と表示される。
+
+数式処理ではなく数値探索のアルゴリズムを使っているので,単調関数でない場合は範囲をできるだけ狭くとるとよい。値が複数ある場合は,小さいほうが返される。
+
+
+\vspace{\baselineskip}
+【例】\verb|x=Inversefun("sin(x)","x=[0,pi/2]",0.5);|
+
+実行すると $x=0.5236$ となる。
+\begin{flushright}\hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+\end{description}
+
+%\newpage
+%==========値の取得と入出力=========================
+\subsection{値の取得と入出力}
+
+計算値やプロットデータの値を取得したり,R用とのデータのやりとりをする。
+
+\begin{description}
+
+\hypertarget{asin}{}
+\item[関数]Asin(実数),Acos(実数)
+\item[機能]逆三角関数の値を求める。
+\item[説明]CindyScriptの組み込み関数に,arcsin(x),arccos(x) があるが,xの絶対値が1より大きい場合は虚数を返す。このことがRではエラーになるので,計算誤差により1よりわずかに大きくなる場合のために用意した関数。
+
+\vspace{\baselineskip}
+\hypertarget{sqr}{}
+\item[関数]Sqr(実数)
+\item[機能]平方根を求める。
+\item[説明]CindyScriptの組み込み関数に,sqrt(x) があるが,xが負の場合は虚数を返す。これに対し,xが負の場合は0を返すようにした関数。計算誤差により1よりわずかに大きくなる場合のために用意した。
+
+\vspace{\baselineskip}
+\hypertarget{bbdata}{}
+\item[関数]BBdata(ファイル名,option)
+\item[機能]画像ファイルのサイズを求める
+\item[説明]TeX文書において,inputgraphics コマンドで画像を貼り込むときのBBサイズを求める。
+TeX処理系の extractbb を用いて画像ファイルからBBデータを作り,テキストファイルとして作業ディレクトリに書き出す。これを読んで,コンソールに ingludegarphics のコマンドを書き出す。これをそのままコピーすればよい。 なお,bbの値は整数値ではなく,高精細の値を小数点以下2桁に四捨五入して示される。画像ファイルは,PDFに限らず,PNG,JPGなどでもよい。
+
+optionは,幅または高さの指定。
+
+"w=40mm" でwidth=40mm が,"h=40mm"で height=40mm が付加される。
+
+\vspace{\baselineskip}
+【例】
+
+\vspace{\baselineskip}
+\includegraphics[bb=0.00 0.00 562.03 124.01,width=10cm]{Fig/bbdata.pdf}
+
+\begin{flushright}\hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+\vspace{\baselineskip}
+\hypertarget{cindyname}{}
+\item[関数]Cindyname()
+\item[機能]作図中のファイル名を取得する。
+\item[説明]たとえば,現在作図しているファイル名が 「polygon.cdy」のとき,"polygon" を返す。
+
+\vspace{\baselineskip}
+\hypertarget{crossprod}{}
+\item[関数]Crossprod(リスト,リスト)
+\item[機能]2つのベクトルの外積を求める。
+\item[説明]Cindyscriptの組み込み関数 cross(リスト,リスト)と同じ。
+
+\vspace{\baselineskip}
+【例】\verb|Crossprod([1,0,0],[1,1,1]);|
+
+結果は[0,-1,1]\\
+
+\vspace{\baselineskip}
+\hypertarget{dotprod}{}
+\item[関数]Dotprod(リスト,リスト)
+\item[機能]2つのベクトルの内積を求める。
+\item[説明]Cindyscriptでは,積の演算で内積が求められる。
+
+\vspace{\baselineskip}
+【例】\verb|Dotprod([1,2,3],[1,-1,1]);|
+
+結果は2
+
+[1,2,3]*[1,-1,1] でも同じ結果を得る。
+
+\vspace{\baselineskip}
+\hypertarget{findarea}{}
+\item[関数]Findarea(プロットデータ)
+\item[機能]プロットデータで囲まれる部分の面積を求める。
+\item[説明]閉曲線をなすプロットデータで囲まれる部分の面積を求める。大島のベジェ公式を用いている。
+
+\vspace{\baselineskip}
+【例】楕円の面積を求めて表示する。
+\begin{verbatim}
+Paramplot("1","[3*cos(t),2*sin(t)]","t=[0,2*pi]");
+area=Findarea("gp1");
+println(Sprintf(area,6));
+\end{verbatim}
+
+コンソールに面積 18.849536 が表示される。
+
+\vspace{\baselineskip}
+\hypertarget{findlength}{}
+\item[関数]Findlength(プロットデータ)
+\item[機能]プロットデータの曲線の長さを求める。
+\item[説明]プロットデータが描く曲線の長さを求める。大島のベジェ公式を用いている。
+
+\vspace{\baselineskip}
+【例】円周の長さを求めて表示する。
+\begin{verbatim}
+Circledata("1",[[0,0],[2,0]]);
+len=Findlength("cr1");
+println(Sprintf(len,6));
+\end{verbatim}
+
+コンソールに 12.558097 が表示される。
+
+\begin{flushright}\hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+\end{description}
+\newpage
+%==============作表=====================
+\subsection{作表}
+
+\begin{description}
+
+\hypertarget{tabledata}{}
+\item[関数]Tabledata(横データ,縦データ, 除外線 , options)
+\item[機能]表の枠を作成し,表のデータlist を返す
+\item[説明]Cinderellaの描画面上に左下を原点とする表を作成する。
+
+除外線がない場合は空リストを指定する。(必須)
+
+optionsのうち,Tabledataに特有なものは\\
+\hspace*{3zw}ラベルのスキップ幅,''Setwindow=n'',''Geo=n'',''Move=[0,0]''\\
+である。
+
+"Setwindow=n" をつけると,NE,SWによる出力領域指定が有効になり,NE,SWをドラッグして出力領域を変更できる。(初期状態は,表の右上と左下)つけない場合は,表の部分だけが出力される。
+
+縦横データは,次のように,間隔の幅で与える。ただし,幅はCinderellaの描画面の0.1を単位とする。
+
+\begin{verbatim}
+Yoko=[20,20,20,20];
+Tate=[10,10,10,10,10];
+Tabledata(Yoko,Tate,[]);
+ \end{verbatim}
+
+
+
+"Geo=y"とすると,作成された表には,行,列の制御点がつく。画面上では,横罫線の番号 r0,r1,・・・縦罫線の番号 c0,c1,・・・と見ることもできる。また,縦幅,横幅が数字で示される。ただし,これらは\TeX には出力されない。
+また,作表はCinderellaの描画面上では座標平面上に置かれるが,\TeX への出力は座標平面上には置かないことが多いので,座標軸は非表示としている。
+
+\hspace{25mm} 描画面 \hspace{45mm} TeX
+
+\hspace{5mm}\includegraphics[bb=0 0 403.52 249.51 , width=5cm]{Fig/table01.pdf} \hspace{10mm}\input{Fig/table02} \\
+
+
+"Geo=y"の場合は,表のサイズ・行幅・列幅は,作成後にそれぞれの制御点をドラッグすることにより任意に変えることができる。
+
+\vspace{\baselineskip}
+除外線は,除外するセルの罫線を,rとc で位置指定する。
+
+\hspace{10mm} 横罫線の場合,横罫線の番号,範囲(から,まで)
+
+\hspace{10mm} 縦罫線の場合,縦罫線の番号,範囲(から,まで)
+
+とする。
+
+ラベルのスキップ値は,いくつおきにラベルをつけるかの設定である。0とするとラベルが表示されない。ただし,ラベルはCinderellaの画面上だけの問題。
+
+\vspace{\baselineskip}"Move=点の座標"とすると,指定された点が左下になるように平行移動される。
+
+
+\vspace{\baselineskip}
+【例】4つの罫線を非表示にする
+\begin{verbatim}
+Rmv=["r1c0c1","c3r0r1","c3r3r5","r4c2c4"];
+Yoko=[20,20,20,20];
+Tate=[10,10,10,10,10];
+Tabledata(Yoko,Tate,Rmv);
+\end{verbatim}
+
+で,次の表ができる。
+
+\vspace{\baselineskip}
+\hspace{20mm}\includegraphics[bb=0 0 392.02 251.51 , width=6cm]{Fig/table03.pdf}
+
+\vspace{\baselineskip}
+<補足>
+
+"Geo=y"の場合,制御点r0,r1,・・・,c0,c1,・・・がなければ新しく作り,すでに存在する場合はそのままとする。したがって,一度表を作成したのち,行数・列数を修正して作り直す場合は,一度既存の点を消去する必要がある。そのためには,「すべての点を選択する」ツールをクリックして点を消去するのがよい。クリックすると,消去後すぐに新規作成される。(誤って「すべての要素を選択する」を選ばないこと)
+
+他の点が描画されている場合は,表の部分だけドラッグで選択するか,表示メニューの「式による表示」で一覧表を出して,制御点を選択して消去する。
+
+\vspace{\baselineskip}
+"Geo=n"(デフォルト)の場合,幾何点を生成しない。幾何点を作成しないメリットは,スクリプトだけで全体の縦横幅を変更できること。デメリットはインタラクティブな微調整ができないこと。
+
+\vspace{\baselineskip}
+【例】1つおきにスキップして,r1,r3,c1,c2 を非表示とする。
+\begin{verbatim}
+Yoko=[20,20,20,20];
+Tate=[10,10,10,10,10];
+Tabledatalight(Yoko,Tate,[],[2]);
+\end{verbatim}
+
+\vspace{\baselineskip}
+\hypertarget{changetablestyle}{}
+\item[関数]Changetablestyle(罫線リスト, 変更オプション)
+\item[機能]Table の罫線の描画オプションを変更
+\item[説明]罫線の部分的に指定して描画オプションを変更できる。
+
+\vspace{\baselineskip}
+【例】
+
+\verb|Tabledatalight([10,20,10,20],[10,10,10],[]);|\\
+\verb|Changetablestyle(["r1c0c4"],["da"]);|\\
+\verb|Changetablestyle(["r2c0c2","c1r0r3"],["nodisp"]);|
+
+\vspace{\baselineskip}
+\hspace{20mm}\includegraphics[bb=0.00 0.00 324.00 174.00,width=50mm]{Fig/changetable.pdf}
+
+\vspace{\baselineskip}
+複数の表を描くこともできる。
+
+\begin{flushright}\hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+\vspace{\baselineskip}
+\hypertarget{findcell}{}
+\item[関数]Findcell(列番号, 行番号)
+\item[機能]セルの情報list(中心,横幅/2,縦幅/2)を返す
+\item[説明]列番号,行番号は左上のセルを1列1行として数える。
+
+\vspace{\baselineskip}
+【例】\verb|Tabledata(Tate,Yoko,[]);|
+
+\verb|println(Findcell(2,1));|
+
+とすると,2列1行のセルの中心の座標と横幅の半分,縦幅の半分の値がリストとしてコンソールに表示される。
+
+\vspace{\baselineskip}
+\hypertarget{putcell}{}
+\item[関数]Putcell (列番号, 行番号, 位置, 文字データ)
+\item[機能]セルに文字列を入れる
+\item[説明]複数のセルにまたぐ位置指定の場合,列番号,行番号は,セル左上と右下の制御点の名称で指定する。
+
+位置はc, r, l, t, b (中央center , 右right , 左left , 上top , 下bottom )
+
+位置の例を以下に示す。
+\begin{verbatim}
+yoko=[20,20,20,20,20];
+tate=[20,20];
+Tabledata(yoko,tate,["c1r1r2","c4r1r2"]);
+Putcell(1,1,"c","A");
+Putcell(2,1,"r","B");
+Putcell(3,1,"l","C");
+Putcell(4,1,"t","D");
+Putcell(5,1,"b","E");
+Putcell("c0r1","c2r2","c","F");
+Putcell("c2r1","c3r2","lb","G");
+Putcell("c3r1","c5r2","rt","H");
+\end{verbatim}
+\vspace{\baselineskip}
+\begin{center} \input{Fig/putcell} \end{center}
+
+※数式の場合は,{\bf Putcellexpr} を用いる。
+
+\begin{flushright}\hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+\vspace{\baselineskip}
+\hypertarget{putcol}{}
+\item[関数]Putcol (列番号, 文字位置,文字列リスト)
+\item[機能]1列に順に文字を書き入れる
+\item[説明]列番号で指定した列に,第1行から順に文字列リストの文字を書き入れる\\
+数の場合はダブルクォートでくくらなくてもよい。
+
+セルを飛ばす場合は,ヌル文字列 "" を書く。
+
+\vspace{\baselineskip}
+\hypertarget{putcolexpr}{}
+\item[関数]Putcolexpr (列番号, 文字位置,文字列リスト)
+\item[機能]1列に順に文字を書き入れる
+\item[説明]文字列に\TeX 書式を使うことができる
+
+\vspace{\baselineskip}
+\hypertarget{putrow}{}
+\item[関数]Putrow (行番号, 文字位置,文字列リスト)
+\item[機能]1行に順に文字を書き入れる
+\item[説明]行番号で指定した行に,第1列から順に文字列リストの文字を書き入れる。
+
+
+\vspace{\baselineskip}
+\hypertarget{putrowexpr}{}
+\item[関数]Putrowexpr (行番号, 文字位置,文字列リスト)
+\item[機能]1行に順に文字を書き入れる
+\item[説明]文字列に\TeX 書式を使うことができる
+
+文字を入れる例を示す。
+\begin{verbatim}
+Tate=[20,20,20,20,20];
+Yoko=[15,15,15];
+Tabledata(Tate,Yoko,["c1r1r2","r1c2c3","r2c2c3"]);
+Putcol(3,"c",["A","B","C"]);
+Putcolexpr(4,"l",["x^2","y=\sqrt{x^3}"]);
+Putrow(1,"c",[1,"二"]);
+Putrowexpr(3,"c",["","\frac{\pi}{2}","","","\sum{x^2}"]);
+\end{verbatim}
+ \vspace{\baselineskip}
+\begin{center} \input{Fig/putcol} \end{center}
+
+※ r0,c0,・・は画面に表示される番号。
+
+グラフや文を入れた表の作成例
+
+Putcolexpr(),Putrowexpr() では,数式だけでなく,一般の\TeX の文を入れることができる。
+また,グラフの位置を適当に合わせて描画することにより,表のセルの中にグラフを入れることができる。
+
+\vspace{\baselineskip}
+【例】2次関数のグラフと2次方程式の判別式の関係
+
+セルの中にグラフを描く例。実際には,セルの位置にグラフを描く。
+
+x軸を描くための点A〜Fは作図ツールでとっておく。
+
+スクリプトを実行して表ができたら,制御点をドラッグしてサイズを調整し,点A〜Fもドラッグして軸と放物線の共有状況を示すようにする。
+
+\vspace{\baselineskip}
+\begin{verbatim}
+Tate=[40,40,40];
+Yoko=[20,20,20];
+Tabledata(Tate,Yoko,[],["dr,2"]);
+Changetablestyle(["r1c0c3"],["dr"]);
+Changetablestyle(["r2c0c3"],["da"]);
+Plotdata("1","(x-2)^2+0.5","x=[0.5,3.5]");
+Plotdata("2","(x-6)^2+1","x=[4.5,7.5]");
+Plotdata("3","(x-10)^2+1.5","x=[8.5,11.5]");
+Listplot([A,B]);
+Listplot([C,D]);
+Listplot([E,F]);
+Putrowexpr(1,"c",["D>0","D=0","D<0"]);
+Putrow(2,"c",["2点で交わる","接する","共有点なし"]);
+\end{verbatim}
+
+\vspace{\baselineskip}
+ \begin{center}\scalebox{0.9}{ \input{Fig/tablesample1}} \end{center}
+
+
+\vspace{\baselineskip}
+【例】増減表とグラフ
+
+関数の増減表とグラフを1つの表の中に入れた例。
+\begin{verbatim}
+Tate=[6,6,10,6,10,6,40];
+Yoko=[30,6,6,6];
+Rmv=["c1r0r1","c2r0r1","c3r0r1","c4r0r1","c5r0r1", "r1c6c7",
+"r2c6c7","r3c6c7"];
+Tabledata(Tate,Yoko,Rmv,["dr"])
+Tlistplot("23d",["c1r2","c2r3"]);
+Tlistplot("23u",["c1r3","c2r2"]);
+Putrowexpr(2,"c",["x",0,"\cdots","\tfrac{1}{4}","\cdots",4]);
+Putrowexpr(3,"c",["y`","","-",0,"+"]);
+Putrowexpr(4,"c",["y",0,"\searrow","-\tfrac{1}{4}","\nearrow",2]);
+Putcell(1,1,"l2t2","{\small\begin{minipage}{44mm}$y=x-\sqrt{x}$\\$y`=
+\dfrac{2\sqrt{x}-1}{2\sqrt{x}}=0$|より\vspace{1mm}\\\hspace*{2zw}$x=
+\dfrac{1}{4}$\vspace{1mm}\\増減表は次のようになる\end{minipage}}" );
+Plotdata("1","x-sqrt(x)","x=[0,3]",["do","notex"]);
+Listplot("2",[[0,0],[3,0]],["do","notex"]);
+Listplot("3",[[0,-0.5],[0,3]],["do","notex"]);
+Translatedata("1","gr1",[4.9,1],["dr"]);
+Translatedata("2","sg2",[4.9,1],["dr"]);
+Translatedata("3","sg3",[4.9,1],["dr"]);
+Letter(Ptend(tr2),"e1","\small{$x$}");
+Letter(Ptend(tr3),"n1","\small{$y$}");
+Letter(Ptstart(tr2),"w1","\small O");
+Expr(Ptend(tr1),"nw-2","y=x-\sqrt{x}");
+\end{verbatim}
+\begin{center} \input{Fig/tablesample2} \end{center}
+
+\vspace{\baselineskip}
+【例】凹凸を含めた増減表
+\begin{verbatim}
+Tate=apply(1..8,20);
+Yoko=[apply(1..4,10);
+Tabledata(Tate,Yoko,[]);
+Putrowexpr(1,c,["x","\cdots","-1","\cdots","0","\cdots","1","\cdots"]);
+Putrowexpr(2,c,["y`","+","+","+","0","-","-","-"]);
+Putrowexpr(3,c,["y``","+","0","-","-","-","0","+"]);
+Putrowexpr(4,c,["y","\nelarrow","\frac{1}{\sqrt{e}}","\nerarrow",
+"1","\serarrow","\frac{1}{\sqrt{e}}","\selarrow"]);
+\end{verbatim}
+\begin{center} \input{Fig/zogen3} \end{center}
+%\vspace{\baselineskip}
+ここで,凹凸を示す矢印は,ketpic.sty で定義されているものである。
+
+nelarrow,nerarrow,selarrow,serarrow,NELarrow,NERarrow,SELarrow,SERrarrow がある。先頭の ne,se で北東・南東(右上・右下)次の r,l は回転の向き(r:right:反時計回り,l:left:時計回り)の矢印(arrow)と覚えるとよい。直線系の矢印は NEarrow,SEarrrow。 少しずつ違うので試されたい。
+
+なお,これらの矢印はCindyTeXにはないので,Cinderellaの描画面には表示されない。
+
+%\begin{flushright}\hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+\vspace{\baselineskip}
+\hypertarget{tgrid}{}
+\item[関数]Tgrid(セルラベル)
+\item[機能]表のセルの座標を返す
+\item[説明]指定されたセルの左上の座標を返す。実際には,セルラベルは罫線を示しているので,指定した罫線の交点(格子点)ということもできる。
+
+\vspace{\baselineskip}
+\hypertarget{tlistplot}{}
+\item[関数]Tlistplot(セルラベル1,セルラベル2)
+\item[機能]指定された2つの格子点を線分で結ぶ
+\item[説明]セルに斜線を引くのに用いる。
+
+\vspace{\baselineskip}
+【例】\verb|Tlistplot(["c0r1","c1r2"]);|
+
+\vspace{\baselineskip}
+\begin{flushright}\hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+\end{description}
+
+%===================================================
+\subsection{その他}
+
+\begin{description}
+
+%\vspace{\baselineskip}
+%\hypertarget{makeshell}{}
+%\item[関数]Makeshell(ファイル名) / Makebat(ファイル名)
+%\item[機能]Macの場合はシェルファイル,Windowsの場合はバッチファイルを書き出す。
+%\item[説明]書き出されるファイルについては,figいったんフォルダを空にしてから確かめられたい。
+
+\hypertarget{assign}{}
+\item[関数]Assign(文字列,文字,文字)
+\item[機能]文字列の中のある文字を他の文字で置き換える
+\item[説明]第1引数の文字列中の第2引数の文字を,第3引数の文字で置き換える。
+
+第3引数が数値の場合,文字列に変換される。
+
+第2引数と,第3引数をリストにして,複数の置き換えをすることができる。
+
+\vspace{\baselineskip}
+【例】\verb|a*x| を\verb|1.3*x| とした文字列を返す。次のいずれも同じ結果になる。
+\begin{verbatim}
+ Assign("x^2+a*x","a","1.3");
+ Assign("x^2+a*x","a",1.3);
+\end{verbatim}
+
+\vspace{\baselineskip}
+【例】直線 $y=bx-b^2$ の係数$b$を変化させて描き,包絡線をうかびあがらせる。
+\begin{verbatim}
+ repeat(50,t,
+cb=t/5-5;
+Plotdata(text(t),Assign("b*x-b^2","b",cb),"x");
+ );
+\end{verbatim}
+%\vspace{\baselineskip}
+\begin{center} \input{Fig/assign} \end{center}
+\vspace{\baselineskip}
+【例】文字で表された $x$ と $y$ の係数をまとめて数値で置き換える。
+\begin{verbatim}
+ Assign("a*x^2+b*x",["a",1,"b",2]);
+\end{verbatim}
+
+%\vspace{\baselineskip}
+\begin{flushright}\hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+
+% ===========commentedto com2th() ==========
+\begin{comment}
+
+\vspace{\baselineskip}
+\hypertarget{com0th}{}
+\item[関数]Com0th(文字列)
+\item[機能]RのOpenfileの前に置くコマンド(文字列)を定義する。
+\item[説明]【例】\verb|Com0th("Setax('a')");|
+
+Openfileの前の部分の先頭に書き出す。これにより, \ketcindy でサポートされていないR版\ketpic のコマンドを利用することができる。
+
+\vspace{\baselineskip}
+\hypertarget{com1st}{}
+\item[関数]Com1st(文字列)
+\item[機能]RのOpenfileの前に置くコマンド(文字列)を定義する。
+\item[説明]【例】\verb|Com1st("Setax('a')");|\\
+これにより, \ketcindy でサポートされていないR版\ketpic のコマンドを利用することができる。
+
+
+\vspace{\baselineskip}
+\hypertarget{com2nd}{}
+\item[関数]Com2nd(文字列)
+\item[機能]RのOpenfileのあとに置くコマンド(文字列)を定義する。
+
+
+\vspace{\baselineskip}
+\hypertarget{com2ndpre}{}
+\item[関数]Com2ndpre(文字列)
+\item[機能]RのOpenfileのあとに置くコマンド(文字列)を定義する。
+
+Openfileの直後(グループの先頭に)書き出す。
+\end{comment}
+
+% =========== ここまで コメント化==========
+
+\hypertarget{colorcode}{}
+\item[関数]Colorcode(種別1,種別2, カラーコード)
+\item[機能]種別1から種別2へカラーコードを変換する。戻り値は変換されたコード。
+\item[説明]種別は,"rgb","cmyk","hsv"のいずれか。
+
+\vspace{\baselineskip}
+【例】変換例をいくつか示す。
+
+RGBの[1,0,0]をCMYKに変換したコードをコンソールに表示する。
+\begin{verbatim}
+col=Colorcode("rgb","cmyk",[1,0,0]);
+println(col);
+\end{verbatim}
+
+CMYKの[0,1,1,0]をRGBに変換したコードをコンソールに表示する。
+
+\begin{verbatim}
+col=Colorcode("cmyk","rgb",[0,1,1,0]);
+println(col);
+\end{verbatim}
+
+RGBの[1,0,0]をHSVに変換したコードをコンソールに表示する。
+
+\begin{verbatim}
+col=Colorcode("rgb","hsv",[1,0,0]);
+println(col);
+\end{verbatim}
+
+\vspace{\baselineskip}
+\hypertarget{dqq}{}
+\item[関数]Dqq(文字列)
+\item[機能]文字列の前後に\verb|"|をつける。
+\begin{verbatim}
+str="abc";
+str2=Dqq(str);
+println([str,str2]);
+\end{verbatim}
+
+\vspace{\baselineskip}
+\hypertarget{factorial}{}
+\item[関数]Factorial(n)
+\item[機能]正の整数$n$の階乗を計算する。
+
+\vspace{\baselineskip}
+\hypertarget{norm}{}
+\item[関数]Norm(ベクトル), Norm(ベクトル1, ベクトル2)
+\item[機能]ベクトル(2つのベクトルの場合は差の大きさ)の大きさを計算する。
+
+\vspace{\baselineskip}
+\hypertarget{figpdf}{}
+\item[関数]Figpdf(option)
+\item[機能]出力枠サイズのPDFを作る。
+\item[説明]\ketcindy では,通常,出力された fig.tex ファイルを閲覧するPDFをA4サイズで作成する。これに対し,Figpdf()を実行すると,出力サイズのPDFを作成する。閲覧用だけではなくワープロなどにに貼り込むときにそのまま使用できる。ただし,そのための親子プロセスを生成して実行するため,次の手続き(1)(2)が必要となる。
+
+\vspace{\baselineskip}
+(1) Setparent(filename)で,出力するPDF用のファイル名を設定する。
+
+(2) 出力は,「Parent」のボタンを押す。
+
+\vspace{\baselineskip}
+たとえば,fig.cdy で作図しているとき,
+\begin{verbatim}
+Setparent("pic");
+\end{verbatim}
+とすると,fig.tex を表示した pic.pdf が作成される。pic.pdf が目的のPDF。
+
+このファイル名は 作図しているCinderellaのファイル名,または Setfiles() で指定したファイル名とは異なるものにする。
+
+optionは,マージン(余白)と平行移動量。指定しない場合は 初期設定値。
+
+余白は,左右上下の順に4つの数をコンマで区切る。
+
+平行移動量は,右方向,下方向をリストで与える。
+
+余白指定と平行移動指定は同時に行うことができる。
+
+\vspace{\baselineskip}
+【例】余白の設定
+\begin{tabbing}
+1234\=567890123456789012345678901234\=\kill
+ \> \verb|Figpdf([5,5,10,10]);|\> 左右に5mm,上下10mmの余白\\
+ \> \verb|Figpdf([[5,10]]);|\>右に5mm,下に10mm平行移動して表示\\
+ \> \verb|Figpdf([5,8,10,10,[5,-5]]);| \> 左5mm,右8mm,上下10mmの余白,\\
+\>\> 右に5mm,上に5mm平行移動して表示
+\end{tabbing}
+
+なお,座標軸を表示する場合,右側は最低3mmの余白を設定しないと軸の文字が入らない。
+
+\begin{flushright}\hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+\vspace{\baselineskip}
+\hypertarget{help}{}
+\item[関数]Help(文字列)
+\item[機能]関数の使用例を取得する
+\item[説明]文字列で始まる関数の使用例をコンソールに表示する。
+
+\hspace{10mm} \verb|println(Help("L"));|
+
+のようにすると,コンソールに,次のように「L」で始まる関数の使用例が表示される。
+\begin{verbatim}
+Letter([C,"c","Graph of $f(x)$"]);
+Letter([C,"c","xy"],["size->30"]);
+ 文字を書き込む
+Letterrot(C,B-A,"AB");
+Letterrot(C,B-A,"t0n5","AB");
+Letterrot(C,B-A,0,5,"AB");
+ 傾いた文字を書き込む
+   ・・・・
+\end{verbatim}
+
+\vspace{\baselineskip}
+\hypertarget{helpkey}{}
+\item[関数]Helpkey(文字列)
+\item[機能]関数の使用例をキーワードで検索する
+\item[説明]文字列に与えたキーワードで関数の使用例を検索し,コンソールに表示する。
+
+\vspace{\baselineskip}
+【例】\verb|Helpkey("直線");|とすると,コンソールに次のように表示される。
+\begin{verbatim}
+IntersectsgpL("",[p1,p2],[p3,p4,p5],"draw");
+IntersectsgpL("R","P-Q","A-B-C");
+IntersectsgpL("R","P-Q","A-B-C","put");
+ 空間の直線と平面の交点
+Lineplot("1",[[2,1],[3,3]]);
+   ・・・・
+\end{verbatim}
+
+\vspace{\baselineskip}
+\hypertarget{indexall}{}
+\item[関数]Indexall(str1,str2);
+\item[機能]文字列 str1 から str2 を検索しその位置をすべて返す
+\item[説明]Cindyscriptの indexof() の拡張版。indexof() が最初に見つかった位置を返すのに対し,Indexall()は存在する位置をすべてリストにして返す。
+
+\vspace{\baselineskip}
+【例】str="abcabcabc" から "b"を検索する。
+
+\verb|indexof(str,"b")| では,2 が返る。
+
+\verb|Indexall(str,"b")| では,[2,5,8]が返る。
+
+\vspace{\baselineskip}
+\hypertarget{isptselected}{}
+\item[関数]Isptselected(点名)または Ptselected(点名)
+\item[機能]点が選択されていれば true,そうでなければ false を返す。
+\item[説明]点名はリストで与える。引数はなしにすることも可能で,その場合はすべての点が対象。
+
+KeTCindyの関数の中には処理に時間がかかるものがある。その場合,点をドラッグするなど,画面上で操作をするとその都度再計算されるために,動きが非常に遅くなる。そこで,ドラッグする点をこの関数で指定すれば,ドラッグしている間は処理されないようにすることができる。
+
+\vspace{\baselineskip}
+【例】点Aを原点近くにとっておき,次のスクリプトを実行する。
+
+\verb|Deffun("f(x)",["regional(y)","y=x^3-2*x","y"]);|\\
+\verb|Plotdata("1","f(x)","x",["Num=100"]);|\\
+\verb|Putoncurve("A","gr1");|\\
+\verb|coef=Derivative("f(x)","x",A.x);|\\
+\verb|Defvar(["coef",coef]);|\\
+\verb|Deffun("g(x)",["regional(y)","y=coef*(x-A.x)+A.y","y"]);|\\
+\verb|Plotdata("2","g(x)","x",["Num=1"]);|\\
+\verb|if(!Ptselected(A),|\\
+\verb|Enclosing("1",["gr2","Invert(gr1)"],[A,"nodisp"]);|\\
+\verb|Hatchdata("1",["i"],[["en1"]]);|\\
+\verb|);|
+
+\vspace{\baselineskip}
+\hspace{5mm} 点Aをドラッグ中(選択状態)\hspace{5mm} 点A以外をクリックして選択状態を解除
+
+\hspace{10mm}\includegraphics[bb=0.00 0.00 218.01 204.51,width=40mm]{Fig/ptselected01.pdf}
+\hspace{10mm}\includegraphics[bb=0.00 0.00 219.01 204.51,width=40mm]{Fig/ptselected02.pdf}
+
+\vspace{\baselineskip}
+\hypertarget{slider}{}
+\item[関数]Slider(名称,位置1,位置2)
+\item[機能]スライダを作成する
+\item[説明]名称は "A-C-B" の形で,端点をA,B,スライダ点をCとしたスライダを作る。
+
+端点A,Bの位置を,位置1,位置2で指定する。単に"C"としたときは端点をとらない。
+スライダにより取得したい値は,点Cの座標(たとえば C.x)を利用する。
+
+点A,B,Cはあらかじめ作図しておく必要はない。既にある場合はその点を使う。
+
+\vspace{\baselineskip}
+【例】2つのスライダを用意し,$y=a\sin(x-b)$ のa,b を変化させる。
+
+\verb|Slider("A-C-B",[-5,-2],[5,-2]);| // \verb|C| is movable.\\
+\verb|Slider("D-F-E",[-6,-2],[-6,2]);| // \verb|F| is movable.\\
+\verb|Plotdata("1",Assign("y=a*sin(x-b)",["a",F.y,"b",C.x]),"x"); |
+
+\vspace{2mm}
+\hspace{15mm}
+\includegraphics[bb=0.00 0.00 445.02 193.01,height=35mm]{Fig/slider.pdf}
+
+\vspace{\baselineskip}
+\hypertarget{sprintf}{}
+\item[関数]Sprintf(実数,長さ)
+\item[機能]小数点以下の長さを固定した文字列に変換
+\item[説明]実数を,小数点n位までの数とした文字列に変換する
+
+\vspace{\baselineskip}
+【例】円周率
+
+ Sprintf(pi,2) は 3.14 を返す
+
+ Sprintf(pi,7) は 3.1415927 を返す
+
+注)pi は Cindyscriptの予約変数で,円周率を表す。%\vspace{\baselineskip}
+
+\vspace{\baselineskip}
+\hypertarget{textformat}{}
+\item[関数]Textformat(数,桁数)
+\item[機能]小数点以下の桁数を指定して数を文字列化する。
+\item[説明]第1引数は数のリストでもよい。数のリストの場合は,戻り値は,対応する数値を指定係数にした後,リストを文字列化する。Cindyscriptの組み込み関数にも,format()という同様の関数があるが,format() は文字列のリストを返す。
+
+\vspace{\baselineskip}
+【例】円周率を小数点以下5位までで文字列化する。
+
+\hspace{10mm} \verb|Textformat(pi,5);|
+\hspace{10mm} \verb|format(pi,5);|
+
+戻り値は,いずれも \verb|"3.14159"|
+
+\vspace{\baselineskip}
+【例】第1引数がリストのときの,format() との戻り値の違い。
+
+\hspace{10mm} \verb|dt=[1/6,0.5];|\\
+\hspace{10mm} \verb|Textformat(dt,4); | // 戻り値は "[ 0.1667 , 0.5 ]" \\
+\hspace{10mm} \verb|format(dt,4); | // 戻り値は [ "0.1667" , "0.5" ] \\
+
+\begin{flushright}\hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+\vspace{\baselineskip}
+\hypertarget{texcom}{}
+\item[関数]Texcom(\TeX コード)
+\item[機能]\TeX のコードを書き出す
+\item[説明]任意の\TeX のコードを書き出す
+
+\vspace{\baselineskip}
+\hypertarget{windispg}{}
+\item[関数]Windispg()またはWindisp(データのリスト)
+\item[機能]定義されているプロットデータをCinderella画面に黒線で描く
+\item[説明]Windispg()は,スクリプトの最後に置くことで,出力される部分だけが黒で描かれるので,出力図を確認することができる。ただし,Letter()関数で表示した点の名称などがCinderellaで作図したラベルと重なって表示されて見にくくなることもある。この関数を実行しなくても出力には影響しない。
+
+Windisp(データのリスト)は,Rから \ketcindy 用に出力されたファイルを ReadOutData()関数で読み込んだときに,必要なプロットデータ列だけを表示するのに用いる。
+
+ReadOutData("filename.txt") でデータを読み込むと,そのデータに含まれるプロットデータ列が,コンソールに
+
+\hspace{10mm}Outdata of filename.txt : [Gfn,Gdfn,Gh]
+
+のように表示される。
+
+このうち,GfnとGhだけを表示するのであれば
+
+\hspace{10mm}\verb|Windispg([Gfn,Gh]);|
+
+とする。引数なしで
+
+\hspace{10mm}\verb|Windispg();|
+
+とすればすべてのプロットデータ列が表示される。
+
+なお,いずれの場合も,作図したプロットデータも同時に表示される。
+
+作図した図を全てではなく選択して表示する場合は,それらのプロットデータ名をリストにして引数とする。
+
+たとえば,sg1, gr1, crABが定義されているとき,
+
+\hspace{10mm}\verb|Windispg(["sg1","gr1"]);|
+
+とすれば,sg1,gr1のみが表示される。
+
+%\begin{flushright}\hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+\vspace{\baselineskip}
+\hypertarget{viewtex}{}
+\item[関数]Viewtex()
+\item[機能]\TeX のソースファイルを書き出す。引数なし。
+\item[説明]グローバル変数Fheadで定義したファイル名に "main" を付加した\TeX のソースファイルとバッチファイル(Macの場合はシェルファイル)を作成する。
+
+\vspace{\baselineskip}
+\hypertarget{workprocess}{}
+\item[関数]Workprocess()
+\item[機能]作図の経過を取得する
+\item[説明]作図ツールを用いた作図の経過を取得する。
+
+\verb|println(Workproccess());|
+
+とすると,コンソールに作図手順が表示される。
+
+\vspace{\baselineskip}
+\hypertarget{op}{}
+\item[関数]Op(n,list or str)
+\item[機能]リストまたは文字列から要素を抜き出す
+\item[説明]第2引数のリストまたは文字列のn番目の要素(文字)を返す。
+
+Cindyscriptの アンダーバーの演算子 (list\_n , str\_n) と同様。
+
+\vspace{\baselineskip}
+\hypertarget{strsplit}{}
+\item[関数]Strsplit(文字列 , 文字)
+\item[機能]文字列を分解する。
+\item[説明]第1引数の文字列を第2引数の文字の位置で分解したリストを返す。
+
+\vspace{\baselineskip}
+【例】文字aで区切って分解する。
+
+\verb|str="abcadeaf";| \\
+\verb|strL=Strsplit(str,"a"); |//[” ”,”bc”,”de”,”f”] を返す。
+
+同様の関数に,Cindyscriptの tokenize(文字列,文字列)がある。tokenize() の第2引数は文字列や,文字のリストでもよい。
+
+\begin{flushright}\hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+\vspace{\baselineskip}
+\hypertarget{fracform}{}
+\item[関数]Fracform(数 , 分母のリストまたは最大値)
+\item[機能]分母リストの1つを分母とする近似分数と誤差を返す。
+\item[説明]戻り値は,簡易TeX-like書式の文字列と誤差。
+
+\vspace{\baselineskip}
+【例】\verb|Fracform(0.33,[2,3]); => fr(1,3)|
+
+\begin{flushright}\hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+\vspace{\baselineskip}
+\hypertarget{totexform}{}
+\item[関数]Totexform(簡易TeX-like書式)
+\item[機能]TeX書式の文字列を返す。
+
+\vspace{\baselineskip}
+【例】\verb|Totexform(fr(1,3)); => frac{1}{3}|
+
+\begin{flushright}\hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+\vspace{\baselineskip}
+\hypertarget{tocindyform}{}
+\item[関数]Tocindyform(簡易TeX-like書式)
+\item[機能]Cindy書式の文字列を返す。
+
+\begin{flushright}\hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+\end{description}
+\newpage
+
+%第11節 他の数式処理ソフトとの連携=============================
+\section{他の数式処理ソフトなどとの連携}
+\subsection{Rとの連携}
+
+Rは主に統計解析のためのソフトウェアで,binorm(二項分布),pois(ポアソン),unif(一様分布),chisq(カイ2乗),f(F分布),t(t分布)など,多くの確率分布をサポートしている。
+
+\ketcindy では,kc.bat/shによってコマンドをRに渡し,結果をテキストファイルで受け取る。このとき,Rとのやりとりで,次のようなファイルが作業ディレクトリに作成される。
+
+拡張子 r :r用のファイル
+
+拡張子 dat,拡張子 txt:データファイル
+
+このデータのやり取りに関する次のオプションがある。
+
+オプションなしまたは,”” のとき
+
+i) データファイルがなければ,新しく作る
+
+ii) データファイルが既にあればそれを読み込む
+
+"m"のとき,強制的にデータファイルを作り直す。
+
+"r" のとき,すでにあるデータファイルを読み込む。
+
+\vspace{\baselineskip}
+
+\begin{description}
+
+\hypertarget{boxplot}{}
+\item[関数]Boxplot(名前,データ,垂直位置,箱の高さ,option)
+\item[機能]箱ひげ図を描く
+\item[説明]データは,リストで渡す場合とファイル名を渡してファイルから読み込む場合がある。データファイルは csv 形式とする。
+
+\vspace{\baselineskip}
+【例】乱数で作成した5未満の実数のデータを箱ひげ図にする。
+
+\begin{verbatim}
+dt1=apply(1..100,5*random());
+Boxplot("1",dt1,1,1/2);
+\end{verbatim}
+\vspace{\baselineskip}
+\hspace{20mm} \input{Fig/boxplot01}
+
+\vspace{\baselineskip}
+【例】外部ファイルとして用意したデータを読み込んで箱ひげ図にする。
+\begin{verbatim}
+Boxplot("2","datafile.csv",3,1/2);
+\end{verbatim}
+
+\vspace{\baselineskip}
+複数列から成るcsvファイルを読み込むには,Readcsvを使う。csvファイルは,作業フォルダ( 初期設定は fig )に入れておく。戻り値は読み込んだファイル。
+
+データの値を画面に入るように調節するには,dt1/20 のようにしてリサイズする。
+
+また,Framedata(),Rulerscale() を併用することで目盛を入れることができる。Framedata() のために,表示領域の対角点A,BをCinderellaの作図ツールで作図しておく。
+
+\begin{verbatim}
+data=Readcsv("datafile.csv");
+dt1=apply(data,#_1);
+dt2=apply(data,#_2);
+Boxplot("1",dt1/20,1,1/2);
+Boxplot("2",dt2/20,3,1/2);
+Framedata("1",[A,B],["corner"]);
+Rulerscale(A,["r",0,6,1],["f",1,"\mbox{dt1}",3,"\mbox{dt2}"]);
+\end{verbatim}
+%\vspace{\baselineskip}
+ \begin{center} \input{Fig/boxplot} \end{center}
+
+注)一度実行した後,データを書き直すと,図が更新されないので,"m" オプションをつけて
+Boxplot("1",dt1/20,1,1/2,["m"]); とすると,図が更新される。データを書き出すときは,もう一度 "m" オプションをはずして実行してから Figure ボタンを押す。これは,データの作成タイミングの関係。
+
+\begin{flushright}\hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+\hypertarget{rfun}{}
+\item[関数]Rfun(name,コマンド, 引数, option)
+\item[機能]Rの1つのコマンドを実行して結果を返す
+\item[説明]バッチファイル kc.bat / シェルファイル kc.sh を利用してRとデータをやり取りし,計算結果を取得する。結果は,変数 R+name に入り,コンソールにも表示される。
+
+\vspace{\baselineskip}
+【例】Rを用いて標準正規分布から10個の乱数を発生し,戻り値から平均値と標準偏差を求めてコンソールに表示する。
+\begin{verbatim}
+Rfun("1","rnorm",[10]);
+nx=length(R1);
+mx=sum(R1)/nx;
+sx=sqrt(R1*R1/nx-mx^2);
+println("平均:"+format(mx,4)+"標準偏差:"+format(sx,4));
+\end{verbatim}
+
+\hypertarget{calcbyr}{}
+\item[関数]CalcbyR(変数名,コマンド列,option)
+\item[機能]Rのコマンドを実行して結果を返す
+\item[説明]バッチファイル kc.bat / シェルファイル kc.sh を利用してRとデータをやり取りし,計算結果を取得する。
+
+コマンド列は,"戻り値=コマンド",[引数] の2つをセットとして並べる。
+
+最後の行の結果が戻り値として第1引数の変数名に代入される。"戻り値1::戻り値2・・",[]の形(戻り値1,戻り値2・・は各コマンドの戻り値)でコマンドを書くと,戻り値1,・・のリストとなる。戻り値が一つの場合は実数。"=値",[] の形の場合,「値」がそのまま戻り値となる。
+
+\vspace{\baselineskip}
+【例】Rを用いてN(50,$5^2$)から10個の乱数を発生し,平均と不偏分散もRで計算してその結果をコンソールに表示する。
+\begin{verbatim}
+cmdL=[
+"tmp1=rnorm",[10,50,5],
+"tmp2=mean",["tmp1"],
+"tmp3=var",["tmp1"],
+"tmp1::tmp2::tmp3",[]
+];
+CalcbyR("rd",cmdL);
+dt=rd_1;
+mx=rd_2;
+vx=rd_3;
+println("データ:"+dt);
+println("平均:"+format(mx,4)+"不偏分散:"+format(vx,4));
+\end{verbatim}
+CalcbyR()によって,データと平均,不偏分散からなるリストが作成されるので,mxに平均,vxに不偏分散を代入している。\verb|rd_(-1)| は,リスト rd の末尾の要素。
+
+\vspace{\baselineskip}
+【例】Rでポアソン分布から200個の乱数をとり,標本平均の分布の様子=分散が小さくなって,正規分布に近づいている様子=をヒストグラムで見る。分散はRで求めた不偏分散に (n-1)/n をかけて再計算してコンソールに表示する。
+\begin{verbatim}
+cmdL=[
+"tmp1=rpois",[200,5],
+"tmp2=mean",["tmp1"],
+"tmp3=var",["tmp1"],
+"=c(tmp2,tmp3,tmp1)",[]
+];
+CalcbyR("rd",cmdL);
+dt=rd_(3..length(rd));
+n=length(dt);
+mx=rd_1;
+vx=rd_2*(n-1)/n;
+sx=sqrt(vx);
+println(dt);
+println(["m="+format(mx,4),"v="+format(vx,4)]);
+Setscaling(1/5);
+Histplot("1",dt,["Breaks=seq(0,14,1)","dr,0.5"]);
+\end{verbatim}
+\vspace{\baselineskip}
+\begin{center} \input{Fig/poison01} \end{center}
+\vspace{\baselineskip}
+【例】ポアソン分布で乱数を2000個発生させ,10個ずつの平均をRで計算し,ヒストグラムを作る。
+\begin{verbatim}
+cmdL=[
+"tmp1=rpois",[2000,5],
+"tmp2=c()",[],
+"for(k in 1:200){",[],
+"tmp=tmp1[(10*(k-1)+1):(10*k)]",[],
+"tmp2=c(tmp2,mean(tmp))",[],
+"}",[],
+"=tmp2",[]
+];
+CalcbyR("rd2",cmdL);
+Setscaling(1/10);
+Histplot("2",rd2);
+\end{verbatim}
+
+\begin{flushright}\hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+\hypertarget{histplot}{}
+\item[関数]Histplot(name,data,option)
+\item[機能]Rを利用してヒストグラムを描く
+\item[説明]dataはリストにして作成するか,外部ファイルからReadcsv()で読み込む。
+戻り値は,階級境界値と,対応する度数のリスト。
+
+階級境界値(ブレークポイント)は,自動的に設定される(スタージェスの公式による)が,オプションで,
+
+\verb|"breaks=[0,10,20,30,40,50,60,70,80,90,100]"|
+
+などと指定することもできる。
+
+この他のオプションは
+
+"Den=yes/no":密度の指定(初期値は no)
+
+"Rel=yes/no":相対度数にする/しない(初期値は no)
+
+\vspace{\baselineskip}
+【例】csvファイル(datafile.csv)を読み込み,ヒストグラムを作る。Framedata() と Rulerscale()を併用して,目盛付きの枠の中に表示する。表示枠の対角点A,BはCinderellaの作図ツールで作図しておく。
+\begin{verbatim}
+Addax(0);
+Setscaling(5);
+Setunitlen("0.6mm");
+data=Readcsv("datafile.csv");
+Histplot("1",data,[""]);
+Framedata("1",[A,B],["corner"]);
+Rulerscale(A,["r",0,100,10],["r",0,15,5]);
+\end{verbatim}
+\begin{center} \input{Fig/histgram} \end{center}
+
+2行目と3行目は,データに合わせて縦方向を5倍にし,TeXの単位長を0.6mmにしている。
+
+Den,Rel オプションをyes にしたときは,Setscaling(100)くらいにするのがよい。
+
+csvファイルが複数のデータからなる場合は,
+
+\verb|dt1=data_1;|
+として,リストの第1要素を取得する。第2要素のヒストグラムであれば\verb|data_2| とする。
+
+\vspace{\baselineskip}
+\begin{flushright}\hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+\hypertarget{plotdatar}{}
+\item[関数]PlotdataR(name,式,変数)
+\item[機能]Rの関数のグラフを描く
+\item[説明]Cindyscriptの組み込み関数にはない関数のグラフをRを利用して描く。
+
+\vspace{\baselineskip}
+【例】平均5, 標準偏差2の正規分布の密度関数と分布関数のグラフを描く。
+\begin{verbatim}
+PlotdataR(“1”, “dnorm(x,5,2)”, ”x=[0,10]”);
+PlotdataR(“2”, ”pnorm(x,5,2)”, ”x=[0,10]”);
+\end{verbatim}
+
+\hspace{20mm} \input{Fig/plotdatar1}
+
+【例】標準正規分布のグラフ上の点とx軸を結んだ線分を描く。
+
+点A,BはCinderellaの作図ツールで作図しておき,点Aをグラフ上のおよその位置に置いてから実行する。
+\begin{verbatim}
+PlotdataR("1","dnorm(x)","x=[-5,5]");
+Putoncurve("A","grR1",[-3,3]);
+Putpoint("B",[A.x,0]);
+Listplot("1",[A,B]);
+\end{verbatim}
+2行目の最後の引数の[-3,3]は,その範囲を動かすことを意味する。
+
+Aはグラフ上を動かすことができて,Bはそれに伴って動く。ただし,少し動かす度に バッチ/シェル ファイルを実行するので,煩雑な場合は,Plotdata() の行をコメント化してから点Aを動かしたあと再実行するとよい。
+
+\vspace{\baselineskip}
+【例】上と同様で,x軸上の点を自由点Aとし,曲線上にBを置く。
+\begin{verbatim}
+PlotdataR("1","dnorm(x)","x=[-5,5]");
+PlotdataR("1","dnorm(x)","x=[-5,5]");
+A.xy=[A.x,0];
+Lineplot("1",[A,A+[0,1]],["nodisp"]);
+Putintersect("B","grR1","ln1");
+Listplot("1",[A,B]);
+\end{verbatim}
+\vspace{\baselineskip}
+【例】前の例のグラフで,ABの左側にShadeをかけ,Shadeの部分の面積を求める。Pの値を表示する位置に,Cinderellaの作図ツールで点Cをとっておく。
+\begin{verbatim}
+PlotdataR("1","dnorm(x)","x=[-5,5]",["Num=100"]);
+Putpoint("A",[0,0],[A.x,0]);
+Lineplot("1",[A,A+[0,1]],["nodisp"]);
+Putintersect("B","grR1","ln1");
+Listplot("1",[A,B]);
+Listplot("2",[[-5,0],[5,0]],"nodisp");
+Enclosing("1",["Invert(grR1)","sg2","sg1"],[B,"notex"]);
+Shade(["en1"],["Color=[0.2,0,0,0]"]);
+tmp=0.5+Integrate("grR1",[0,A.x]);
+Expr([A,"s",text(A.x),C,"e","P="+text(tmp)]);
+\end{verbatim}
+
+\begin{center} \input{Fig/rshade} \end{center}
+
+\vspace{\baselineskip}
+\begin{flushright}\hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+\vspace{\baselineskip}
+\hypertarget{plotdiscr}{}
+\item[関数]PlotdiscR(name,式,変数)
+\item[機能]Rを利用して離散型のグラフを描く
+\item[説明]dbinom (二項分布),dpois(ポアソン分布),dgeom(幾何分布)など離散型確率分布のグラフを描く。
+
+\vspace{\baselineskip}
+【例】二項分布のグラフと正規分布のグラフを比較する。
+\begin{verbatim}
+Setscaling(20);
+PlotdiscR("1","dbinom(k,10,0.4)","k=[0,10]");
+PlotdataR("1","dnorm(x,10*0.4,sqrt(10*0.4*0.6))","x=[0,10]",["do"]);
+\end{verbatim}
+\vspace{\baselineskip}
+\begin{center} \scalebox{0.9}{\input{Fig/binvsnormal}} \end{center}
+
+【例】ポアソン分布および幾何分布のグラフ。
+\begin{verbatim}
+PlotdiscR("2","dpois(k,4)","k=[0,10]");
+PlotdiscR("3","dgeom(k,0.3)","k=[0,10]");
+\end{verbatim}
+%\vspace{\baselineskip}
+\begin{flushright}\hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+\vspace{\baselineskip}
+\hypertarget{scatterplot}{}
+\item[関数]Scatterplot(name,filename/datalist,option1,option2)
+\item[機能]2次元データを読み込み,散布図を描く
+\item[説明]外部ファイル filename(csv形式)を読み,散布図を描く。
+
+外部ファイルの2次元データとは,次の形のcsvファイル。(行末はLFまたはCR)
+\begin{verbatim}
+ 2.3, 4.5 (LF)
+ 3.2, 7 (LF)
+ 2.0, 6.8 (LF)
+\end{verbatim}
+
+
+datalistの場合は,次の形。
+
+\begin{verbatim}
+ data=[[2.3,4.5],[3.2,7],[2.0,6.8], ・・・ ];
+\end{verbatim}
+
+
+第1オプションは,回帰直線を描くかどうかと点のスタイル。
+
+"Reg=no" : 回帰直線を描くかどうか(yes/no) 初期値は yes
+
+第2オプションは,相関係数と回帰直線の式を表示する位置と,回帰直線のスタイル。
+
+位置は,幾何点の名称でもよい。
+
+\vspace{\baselineskip}
+【例】data.csv を読んで散布図を描き,回帰直線を引く。
+\begin{verbatim}
+Scatterplot("1","data.csv");
+\end{verbatim}
+
+だけで描ける。オプションをつけた例は次。
+
+点Aを相関係数と回帰直線の式を表示する点としてCinderellaの作図ツールで取る。
+
+点を青で大きさ2とし,回帰直線を緑で表示する。
+
+\begin{verbatim}
+Scatterplot("1","data.csv",["Size=4","Color=blue"],[A,"Color=green"]);
+Listplot("1",[[0,7],[0,0],[7,0]]);
+Rulerscale([0,0],["r",0,7,1],["r",1,7,1]);
+\end{verbatim}
+
+\vspace{\baselineskip}
+ \begin{center} \input{Fig/scatter} \end{center}
+
+\end{description}
+
+\begin{flushright}\hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+\vspace{\baselineskip}
+%\newpage
+
+%Maximaとの連携==================================
+\subsection{Maximaとの連携}
+Maximaは数式処理ソフトで,\ketcindy においては微積分の計算など,Cindyscriptでは不十分な点を補うことができる。
+
+\ketcindy では,kc.bat/shによってコマンドをMaximaに渡し,結果をテキストファイルで受け取る。このとき,Maximaとのやりとりで,次のようなファイルが作業ディレクトリに作成される。
+
+拡張子 max :Maximaに渡すコマンドを記述したファイル
+
+拡張子 txt:Maximaが出力したデータファイル
+
+このデータのやり取りに関する次のオプションがある。
+
+オプションなしまたは,”” のとき
+
+i) データファイルがなければ,新しく作る
+
+ii) データファイルが既にあればそれを読み込む
+
+"m"のとき,強制的にデータファイルを作り直す。
+
+"r" のとき,すでにあるデータファイルを読み込む。
+
+このとき,ファイルの読み書きで不具合があると,数秒の後「==$>$ file.txt not generated (5 s ) 」のようなエラーメッセージがコンソールに表示される。このような場合は作業ディレクトリの設定などを確認していただきたい。この待ち時間については,Waitオプションで設定することもできる。
+
+\begin{description}
+
+\hypertarget{calcbyM}{}
+\item[関数]CalcbyM(name,コマンド,option)
+\item[機能]Maximaのスクリプトを実行する
+\item[説明]第2引数はMaximaで実行するコマンドを記述したスクリプト。
+
+コマンドと引数リストの繰り返しからなるスクリプトをリストとして作り,一度に実行する。
+
+戻り値はない(未定義値)。実行結果は,コマンドリストの最後に記述した変数(引数は空リスト)の値が,name で指定された変数に代入される。複数の結果を戻すときは,:: で区切って記述するとリストにしてnameに代入される。
+
+\vspace{\baselineskip}
+【例】$\sin x$ とその導関数を表示する。
+\begin{verbatim}
+cmdL=[
+ "f:sin(x)", [],
+ "df:diff",["sin(x)","x"],
+ "f::df",[]
+];
+CalcbyM("fdf",cmdL);
+println(fdf);
+\end{verbatim}
+\vspace{\baselineskip}
+実行すると,結果の f とdf のリストが変数 fdf に代入され,コンソールに,\verb|[sin(x),cos(x)]| と表示される。
+
+\vspace{\baselineskip}
+【例】2次方程式 $x^2-x-4=0$の解を求める。
+\begin{verbatim}
+cmdL=[
+ "ans:solve",["x^2-x-4","x"],
+ "ans",[]
+];
+CalcbyM("ans",cmdL);
+println("ans="+ans);
+\end{verbatim}
+コンソールには
+
+\verb|ans=[x = -(sqrt(17)-1)/2,x = (sqrt(17)+1)/2] |
+
+が表示される。
+
+\vspace{\baselineskip}
+{\bf 応用例1:曲線の接線を引く}
+
+\vspace{\baselineskip}
+$f(x)=\dfrac{e^x+e^{-x}}{2}$ の,$x=a$における接線の方程式を作る。
+
+\begin{verbatim}
+fx="(exp(x)+exp(-x))/2";
+cmdL=[
+ "df:diff",[fx,"x"],
+ "c:ev",["df","x=a"],
+ "b:ev",[fx,"x=a"],
+ "eq:c*(x-a)+b",[],
+ "eq",[]
+];
+CalcbyM("tn1",cmdL);
+println(tn1);
+\end{verbatim}
+コンソールには
+\begin{verbatim}
+(%e^a-%e^-a)*(x-a))/2+(%e^a+%e^-a)/2
+\end{verbatim}
+が表示される。\\
+この,CalcbyMの戻り値 tn1 を用いて,曲線上の1点Aにおける接線のグラフを描く。以下のスクリプトを追加する。なお,点AをCinderellaの作図ツールで適当なところにとっておく。
+\begin{verbatim}
+tn1=Assign(tn1,["%e^a","exp(a)","%e^-a","exp(-a)"]);
+Plotdata("1",fx,"x");
+Putoncurve("A","gr1");
+tmp=Assign(tn1,["a",A.x]);
+plotdata("2",tmp,"x",["Num=2"]);
+\end{verbatim}
+1行目ではMaximaで作成した式を,Cindyscriptでプロットできる式にしている。
+
+\vspace{\baselineskip}
+\begin{center} \input{Fig/maxfun01} \end{center}
+\vspace{\baselineskip}
+なお,接線の方程式を求めるだけであれば,Mxfun()を使うこともできる。Mxfun()の解説を参照のこと。
+
+\vspace{\baselineskip}
+{\bf 応用例2:パラメトリックの場合の接線}
+
+\vspace{\baselineskip}
+媒介変数の値を決めるために,点AをCinderellaの描画面のx軸上にとっておき,その$x$座標を媒介変数$t$の値とする。スライダを作ってもよい。\\
+
+\begin{layer}{150}{0}
+\putnotese{60}{10}{ \input{Fig/maxfun02}}
+\end{layer}
+\begin{verbatim}
+fn="3*cos(t)^2*[cos(t),sin(t)]";
+cmdL=[
+ "f:",[fn],
+ "df:diff",["f","t"],
+ "df:trigsimp",["df"],
+ "tn:f+s*df",[],
+ "tn",[]
+];
+CalcbyM("tn2",cmdL);
+Paramplot("1",fn,"t=[0,2*pi]",["Num=100"]);
+gn=Assign(tn2,["t",A.x]);
+Paramplot("2",gn,"s=[-3,3]");
+\end{verbatim}
+
+cmdLで定義しているMaximaのコマンド(trigsimp など)については,Maximaの解説書などを参照されたい。
+
+\vspace{\baselineskip}
+【例】定積分の値を求める。
+
+\vspace{\baselineskip}
+$\displaystyle \int _{-1} ^2 (-x^3+3x+2)dx$ の値を求める。結果は val で受け取り,Mxtex() に渡して,TeX書式にして表示する。
+
+\begin{verbatim}
+cmdL=[
+ "val:integrate",["-x^3+3*x+2,x,-1,2"],
+ "val",[]
+];
+CalcbyM("val",cmdL);
+Mxtex("1",val);
+Expr([[2,2],"e","S="+tx1]);
+\end{verbatim}
+
+
+\vspace{\baselineskip}
+\hypertarget{mxbatch}{}
+\item[関数]Mxbatch(ファイル名)
+\item[機能]Maximaのライブラリを使うバッチファイルを作成
+\item[説明]ketcindy/ketlib/maximaL にあるライブラリを用いるコマンドでバッチファイルを作成する。
+
+ketcindy/ketlib/maximaL には,fourier\_sec.max , matoperation.max , poincare.mac の3つのファイルがあり,関数を定義したライブラリが入っている。それぞれ次のような内容である。各ファイルをテキストエディタで開いて参照されたい。
+
+fourier\_sec.max :フーリエ級数の計算を行う。
+
+matoperation.max : 行列の計算を行う。
+
+poincare : ハミルトニアンシステムに関する計算を行う。
+
+
+\vspace{\baselineskip}
+【例】\verb|cmd=Mxbatch("fourier_sec")|
+
+を実行すると,cmdに,たとえば
+
+\verb|[batch,["/Applications/ketcindy/ketlib/maximaL/fourier_sec.max"]] |
+
+が代入される。(Mac/Windows および KeTCindyの設定によって異なる)
+
+そこで,次のように利用する。
+
+\begin{verbatim}
+Setax(["a"]);
+Slider("A-C-B",[-5.5,-1.5],[4.5,-1.5]);
+defL=["1",[-3,-2],1,"0",[-2,-1],1,"-x",[-1,1],1,"0",[1,2],1,"-1",[2,3],1];
+Drwxy();
+tmp=Periodfun(defL,1,["dr,2","Color=red"]);
+fun=tmp_1;
+per=tmp_2;
+Htickmark([1,"n","1",2,"n","2",3,"nw","3"]);
+Htickmark([-1,"-1",-2,"-2",-3,"-3"]);
+cmdL=Concat(Mxbatch("fourier_sec"),[
+ "Ffun(x):="+fun,[],
+ "c:fourier_sec_coeff",["Ffun(x)","x"],
+ "c[1]::c[2]::c[3]",[]
+]);
+CalcbyM("ans",cmdL,[]);
+nterm=round(4*(C.x-A.x));
+Fourierseries("1",ans,per,nterm,["Num=400"]);
+Mxtex("2",ans_3);
+Expr([[-5,-2],"e","s_n="+tx2,[4,-2],"e","n="+text(nterm)]);
+\end{verbatim}
+
+\hspace{10mm}\input{Fig/mxbatch}
+
+%\begin{flushright}\hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+\vspace{15mm}
+\hypertarget{mxfun}{}
+\item[関数]Mxfun(name,式,リスト,option)
+\item[機能]Maximaの関数を実行する
+\item[説明]第2引数の「式」はMaximaの関数名。第3引数のリストは関数に渡す引数のリスト。
+
+戻り値は,第1引数の式に1つでも文字があると文字列となる。すべて数字(+,-, . を含む)の場合は
+16桁以下であれば数,それ以上の場合は文字列となる。また,戻り値は,変数 mx+name にも代入される。
+
+オプションに "Disp=no" をつけると,結果をコンソールに表示しない。
+
+\vspace{\baselineskip}
+【例】$10!$を求める。
+
+\verb| Mxfun("1","10!",[]);|
+
+を実行すると,コンソールにmx1 is 3628800 と表示される。この値は変数 mx1 に代入されているので,
+
+\verb| Letter([[0,1],"e",mx1]);|
+
+とすればCinderellaの描画面上に表示される。mx1ではなく,戻り値を変数に代入して使うこともできる。
+
+\begin{verbatim}
+fact10=Mxfun("1","10!",[]);
+Letter([[0,1],"e",fact10]);
+\end{verbatim}
+
+\vspace{\baselineskip}
+【例】文字列の連結
+
+文字列を引数とする場合,例えば,Maximaの文字列を連結するコマンドconcatでは,
+
+\verb| concat("a","b")|
+
+とするが,中にダブルクォートが入っているため,全体を文字列にすることができない。
+
+このような場合は,第2引数を使って
+
+\verb| Mxfun("1","concat",["a","b"])|
+
+とすればよい。
+
+\vspace{\baselineskip}
+<参考> CindyScript の unicode(code) 関数を用いてダブルクォートを表し,次のようにすることもできる。
+
+\begin{verbatim}
+dq=unicode("22");
+comm="concat("+dq+"a"+dq+","+dq+"b"+dq+")";
+Mxfun("1",comm,[]);
+\end{verbatim}
+
+\vspace{\baselineskip}
+【例】$f(x)=\sin x$ を微分する
+
+\verb| Mxfun("1", "diff",["sin(x)","x"])|
+
+とすると
+
+\verb| diff(sin(x),x)|
+
+というコマンドをMaximaに渡して,戻り値をCindyの変数mx1に代入する。
+
+\verb| Mxfun("1", "diff(sin(x),x)",[]])|
+
+と,第1引数にまとめても同じ結果になる。ただし,この場合,第2引数は空リストとする。
+
+\vspace{\baselineskip}
+{\bf <参考>Cindyscriptの微分との違い}
+
+Cindyscriptでも微分はできる。たとえば,
+\begin{verbatim}
+f(x):=sin(x);
+g(x):=d(f(#),x);
+plot(g(#));
+\end{verbatim}
+とすると,cos(x)のグラフが描かれる。
+
+しかし,Cindyscriptの微分が,微分の定義による数値計算であるのに対し,Maximaでは数式処理として微分ができる。
+
+その意味の違いは,次のスクリプトで確かめられる。
+\begin{verbatim}
+f(x):=sin(x);
+g(x):=d(f(#),x);
+println(g(x));
+\end{verbatim}
+では,コンソールに表示されるのは未定義値(\_ \_ \_) である。
+
+一方,
+\begin{verbatim}
+Mxfun("1", "diff",["sin(x)","x"]);
+println(mx1);
+\end{verbatim}
+では,コンソールに \verb|cos(x)| と表示される。
+
+mx1は文字列であるので,\verb|Plotdata("1",mx1,"x")| でグラフが描ける。
+
+また,Cindyscriptの微分では,3階か4階までの導関数が計算上の限度であるのに対し,Maximaなら何階でも微分ができるので,テイラー展開などで有利である。
+
+\vspace{\baselineskip}
+【例】$\sin x$ の テイラー展開による近似のグラフを表示する。
+\begin{verbatim}
+Mxfun("1","taylor",["sin(x)","x",0,7],[""]);
+Plotdata("1","sin(x)","x",["da"]);
+Plotdata("2",mx1,"x");
+\end{verbatim}
+\vspace{\baselineskip}
+\begin{center} \input{Fig/taylor} \end{center}
+\vspace{\baselineskip}
+なお,Mxtex() を用いれば,Mxfun()の結果の mx1をTeX書式にして表示できる。
+
+\verb| Expr([[1,2],"e",Mxtex("1",mx1)]);|
+
+を追加すれば[1,2]の位置に式が表示される。
+
+\vspace{\baselineskip}
+【例】接線の方程式を作る
+
+\vspace{\baselineskip}
+$f(x)=\dfrac{e^x+e^{-x}}{2}$ の,$x=a$における接線の方程式を作る。
+
+関数式を文字列にしておき,Assign() を用いて変数$x$を$a$に変えれば,$f(a)$の式を作ることができる。導関数についても同様にする。
+
+\begin{verbatim}
+fx="(exp(x)+exp(-x))/2";
+gx=Mxfun("1","diff",[fx,"x"]);
+fa=Assign(fx,["x","a"]);
+ga=Assign(gx,["x","a"]);
+tf=ga+"*(x-a)+("+fa+")";
+println(tf);
+\end{verbatim}
+コンソールには
+\begin{verbatim}
+(%e^a-%e^-a)/2*(x-a)+((exp(a)+exp(-a))/2)
+\end{verbatim}
+が表示される。
+
+同様の例を CalcbyM() で例示しているので参照されたい。
+
+%\begin{flushright}\hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+\vspace{\baselineskip}
+\hypertarget{mxtex}{}
+\item[関数]Mxtex(name,式)
+\item[機能]式をTeX書式にする
+\item[説明]第2引数の式は,直接書いた式もしくはMxfunの戻り値。これをTeXの書式にする。
+
+戻り値は,変数 txname にも代入される。
+
+\vspace{\baselineskip}
+【例】部分分数への分解
+\begin{spacing}{1.5}
+部分分数$\dfrac{x^3}{(x+1)(x+2)}$の分解をMaximaで行い,その結果をTeX書式にして画面に表示する。画面に表示された結果はそのまま\ketcindy で出力できる。
+\end{spacing}
+\begin{verbatim}
+Mxfun("1","partfrac",["x^3/((x+1)*(x+2))","x"]);
+Mxtex("1",mx1);
+Expr([0,1],"e",tx1);
+\end{verbatim}
+ここで,mx1,tx1はそれぞれMxfun("1",・・) , Mxtex"1",・・) の結果(戻り値)である。mx1,tx1 はコンソールにも表示され,tx1は次のようになっている。
+\begin{verbatim}
+\frac{8}{x+2}-\frac{1}{x+1}+x-3
+\end{verbatim}
+CindyscriptはTeX書式をサポートしているのでこれで描画面に分数式が表示されるが,Texの文書では,\verb|\frac{}{}| ではなく,\verb|\dfrac{}{}|を使うことが多い。そこで,Assign()を用いて,"frac" を "dfrac" に変えれば,そのままTex文書で使える。ただし,Cindyscriptは \verb|\dfrac{}{}| をサポートしていないので,画面上では分数表記にならない。そのあたりの事情を次のスクリプトで示す。
+\begin{verbatim}
+fx="x^3/((x+1)*(x+2))";
+pfx=Mxfun("1","partfrac",[fx,"x"]);
+form=Mxtex("1",fx)+"="+Mxtex("2",pfx);
+dform=Assign(form,["frac","dfrac"]);
+Letter([0,5],"e","部分分数への分解$"+form+"$");
+Letter([0,3],"e","部分分数への分解$"+dform+"$");
+\end{verbatim}
+Cinderellaの描画面では次のように表示される。
+
+\vspace{\baselineskip}
+\hspace{20mm} \includegraphics[bb=0 0 347.02 116.01 , width=8cm]{Fig/mxtex01.pdf}
+
+\vspace{\baselineskip}
+出力したTeX挿入図では次のようになる。
+
+%\vspace{\baselineskip}
+\input{Fig/mxtex02}
+
+なお,文字列を置換するのに,\verb|Assign(form,["frac","dfrac"])| ではなく,
+
+Cindyscriptの文字列の関数 replace を用いて,
+
+\hspace{10mm} \verb|dform=replace(form,"frac","dfrac");|
+
+としてもよい。
+
+%\vspace{10mm}
+
+\vspace{\baselineskip}
+【例】2次関数のグラフを表示し,$x$軸との交点の$x$座標を表示する。
+
+\begin{layer}{150}{0}
+\putnotese{60}{05}{ \input{Fig/mxtex03}}
+\end{layer}
+
+\begin{verbatim}
+fx="x^2-x-3";
+cmdL=[
+"ans:solve",[fx,"x"],
+"ans",[]
+];
+CalcbyM("ans",cmdL);
+p1=indexof(ans,"[");
+p2=indexof(ans,",");
+p3=indexof(ans,"]");
+s1=substring(ans,p1,p2-1);
+s2=substring(ans,p2,p3-1);
+s1=replace(s1,"x =","");
+s2=replace(s2,"x =","");
+Mxtex("1",s1);
+Mxtex("2",s2);
+Plotdata("1",fx,"x");
+Expr([-2,-0.5],"e",tx1);
+Expr([2,-0.5],"e",tx2);
+\end{verbatim}
+
+ここで,\verb|CalcbyM("ans",cmdL);| で得られるansは,次のような文字列である。
+
+\verb|"[x = -(sqrt(13)-1)/2,x = (sqrt(13)+1)/2] "|
+
+そこで,ここから2つの式だけを抽出する作業を行ったのち,Mxtex() でTeXの式を得ている。
+
+さらに応用として,点AをCinderellaの作図ツールで作図し,
+\begin{verbatim}
+if(A.y<0,
+fx="(x-"+text(A.x)+")^2"+guess(A.y),
+fx="(x-"+text(A.x)+")^2+"+guess(A.y);
+);
+\end{verbatim}
+とすると,点Aを頂点とする放物線と軸との交点の座標が描かれる。Maximaとのデータのやり取りをするためのタイムラグがあるが,インタラクティブに放物線の位置を変えることができる。
+
+\vspace{\baselineskip}
+<参考>
+
+2次関数のような簡単な関数であれば,Cindyscriptの roots() 関数を用いて2次方程式が解けるので,次のスクリプトでほぼ同じ動作をするものを作ることができる。「ほぼ」というのは点Aの位置によっては,guess()で解釈しきれないことがあるためである。Maximaを使えば数式処理で解を求めるので,Aがどこにあってもきれいに表示できる。
+\begin{verbatim}
+fx="x^2-2*A.x*x+A.x^2+A.y";
+cf=[A.x^2+A.y,-2*A.x,1];
+sol=roots(cf);
+s1=guess(sol_2);
+s2=guess(sol_1);
+Mxtex("1",s1);
+Mxtex("2",s2);
+Plotdata("1",fx,"x");
+Expr([-2,-0.5],"e",tx1);
+Expr([2,-0.5],"e",tx2);
+\end{verbatim}
+
+\end{description}
+
+\begin{flushright}\hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+\newpage
+
+
+%Risa/Asirとの連携==================================
+\subsection{Risa/Asirとの連携}
+
+\begin{description}
+
+\hypertarget{calcbyA}{}
+\item[関数]CalcbyA(name,コマンド,option)
+\item[機能]Risa/Asirのスクリプトを実行する
+\item[説明]第2引数はRisa/Asirで実行するコマンド。
+
+コマンドと引数リストの繰り返しからなるリスト(例えばcmdL)を作って,一度に実行する。
+
+戻り値はない。(未定義値)結果は,コマンドリストの最後に記述した変数(引数は空リスト)の値がname で指定された変数に代入される。複数の結果を戻すときは,:: で区切って記述するとリストにして代入される。
+
+
+\vspace{\baselineskip}
+\hypertarget{asirfun}{}
+\item[関数]Asirfun(name,式,リスト,option)
+\item[機能]Risa/Asirの関数を実行する
+\item[説明]第2引数の「式」はRisa/Asirの関数名。第3引数のリストは関数に渡す引数のリスト。
+
+戻り値は,第1引数の式に1つでも文字があると文字列となる。すべて数字(+,-, . を含む)の場合は
+16桁以下であれば数,それ以上の場合は文字列となる。また,戻り値は,変数 asname にも代入される。
+
+オプションに "Disp=no" をつけると,結果をコンソールに表示しない。
+
+
+\end{description}
+\begin{flushright}\hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+%\newpage
+%FriCASとの連携==================================
+\subsection{FriCAS(Axiom)との連携}
+
+\begin{description}
+
+\hypertarget{calcbyF}{}
+\item[関数]CalcbyF(name,コマンド,option)
+\item[機能]FriCASのスクリプトを実行する
+\item[説明]第2引数はFriCASで実行するコマンド。
+
+コマンドと引数リストの繰り返しからなるリスト(例えばcmdL)を作って,一度に実行する。
+
+戻り値はない。(未定義値)結果は,コマンドリストの最後に記述した変数(引数は空リスト)の値がname で指定された変数に代入される。複数の結果を戻すときは,:: で区切って記述するとリストにして代入される。
+
+
+\vspace{\baselineskip}
+\hypertarget{frfun}{}
+\item[関数]Frfun(name,式,リスト,option)
+\item[機能]FriCASの関数を実行する
+\item[説明]第2引数の「式」はFriCASの関数名。第3引数のリストは関数に渡す引数のリスト。
+
+戻り値は,第1引数の式に1つでも文字があると文字列となる。すべて数字(+,-, . を含む)の場合は
+16桁以下であれば数,それ以上の場合は文字列となる。また,戻り値は,変数 friname にも代入される。
+
+オプションに "Disp=no" をつけると,結果をコンソールに表示しない。
+
+
+\end{description}
+\begin{flushright}\hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+%\newpage
+
+%MeshLabとの連携==================================
+\subsection{MeshLabとの連携}
+
+MeshLabは,3Dデータ(objデータなど)を読み込んでレイトレーシングで表示・編集するソフトウェアである。レイトレーシングで3Dグラフィクスを描くには,Cinderellaと親和性の高い Cindy3D を利用するのがよいが,MeshLabを使うメリットは3Dプリンタ用のSTLファイルを出力できることである。また,\ketcindy で描いた3Dの図がレイトレーシングでどのようになるのかを見ることも比較的簡単にできる。
+
+MeshLabとの連携は,\ketcindy から Obj 形式のデータを書き出すことで行う。Mkobj**() 関数でデータを作り,Mkviewobj() 関数でMeshLabを呼び出して表示を行う。
+
+なお,Mkviewobj() 関数でMeshLabを呼び出して表示を行う場合,これをDrawスロットに書くと頻繁に呼び出しが行われるため非効率となる。そこで,if(1==0,・・・) で・・・の部分にMeshLabの呼び出し関係のスクリプトを書いて,実際に呼び出すときに if(1==1,・・・)とする方法と,呼び出し関係のスクリプトを関数化してボタンに割り当てる方法がある。ketcindyパッケージに含まれる sample にボタンをつけたものがある。
+
+なお,3Dであるので,Initialization スロットに
+
+\verb|Ketinit();|
+\verb|Ketinit3d();|
+を記述しておく。
+
+\begin{description}
+
+\hypertarget{mkobjcmd}{}
+\item[関数]Mkobjcmd(name,式,option)
+\item[機能]厚みを持たない曲面のobjファイルのためのコマンドを作成する
+\item[説明]オプションは [分割数1,分割数2,表側の方向の指定]
+
+表側の方向は,変数に対して,右手系の方向が"+"
+
+作成されるデータは"oc"+name のファイル名の obj データである。この名称は,Mkviewobj() で用いる。(以下,Mkobj**()関数では同様)
+
+\vspace{\baselineskip}
+【例】:サドル面
+\begin{verbatim}
+fd=[ "z=x^2-y^2", "x=[-1,1]","y=[-1,1]"," "];
+Sf3data("1",fd);
+Windispg();
+Mkobjcmd("1",fd,[40,40,"-"]);
+Meshlab():=(
+Mkviewobj("saddle",oc1, ["m","v"]);
+);
+\end{verbatim}
+このうち,\verb|Sf3data("1",fd); | はCinderellaの画面に表示するためであって,なくてもよい。
+
+次図で,左が option + の場合,右が - の場合である。
+
+\includegraphics[bb=0 0 679.53 263.51 , width=12cm]{Fig/meshlab01.pdf}
+\vspace{\baselineskip}
+\begin{flushright}\hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+\vspace{\baselineskip}
+\hypertarget{mkobjcrvcmd}{}
+\item[関数]Mkobjcrvcmd(name,PD,option)
+\item[機能]空間曲線(直線)のobjファイルのためのコマンドを作成
+\item[説明]オプションは [太さ,断面の形状(正多角形)の辺の数,断面の正面]
+
+曲線は紐のようなもので表す。その断面は正多角形で, 初期設定は正6角形である。断面の正面は"xy","yz","zx"のいずれかで指定する。太くなった時に形状の差が現れる。
+
+例太さ0.03で螺旋を描く
+\begin{verbatim}
+Spacecurve("1","[(6*pi-t)/(6*pi)*cos(t),(6*pi-t)/(6*pi)*sin(t),0.1*t]",
+"t=[0,6*pi]",["Num=200"]);
+Windispg();
+Mkobjcrvcmd("1","sc3d1",[0.03]);
+Meshlab():=(
+Mkviewobj("spiral",oc1,["m","v"]);
+);
+\end{verbatim}
+
+\verb|Mkobjcrvcmd("1","sc3d1",[0.1,8,"yz"]);| としたのが下図右。
+
+ \includegraphics[bb=0 0 614.53 236.51 , width=12cm]{Fig/meshlab02.pdf}
+
+\begin{flushright}\hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+\vspace{\baselineskip}
+\hypertarget{mkobjnrm}{}
+\item[関数]Mkobjnrm(name,式)
+\item[機能]法線ベクトルのデータを作成
+\item[説明]式は曲面を表す式。これに対し,法線ベクトルを表す式を求める。
+
+\vspace{\baselineskip}
+\hypertarget{mkobjplatecmd}{}
+\item[関数]Mkobjplatecmd(name,面データ,options)
+\item[機能]面を描く
+\item[説明]面データを渡して面を描く。
+
+options は,面の厚みの指定。厚みは中心線に対し,両側につけることができる。
+
+たとえば,[0.05] はプラス側に 0.05 の厚み,[0.05,-0.04] はマイナス側にも0.04の厚みをつける。
+
+\vspace{\baselineskip}
+【例】三角形のプレートを描く
+
+\begin{verbatim}
+Xyzax3data("","x=[-5,5]","y=[-5,5]","z=[-5,5]");
+p1=[2,0,0];
+p2=[0,2,0];
+p3=[0,0,2];
+plane=[[p1,p2,p3],[[1,2,3]]];
+Mkobjplatecmd("1",plane,[0.05]);
+Mkobjcrvcmd("2","ax3d");
+Mkviewobj("plane",Concatcmd([oc1,oc2]),["m","v"]);
+\end{verbatim}
+
+\begin{center} \includegraphics[bb=0 0 287.01 228.01 , width=4cm]{Fig/meshlab03.pdf} \end{center}
+%\begin{layer}{150}{0}
+%\putnotese{80}{15}{ \includegraphics[bb=0 0 287.01 228.01 , width=3cm]{Fig/meshlab03.pdf} }
+%\end{layer}
+
+\vspace{\baselineskip}
+\hypertarget{mkobjpolycmd}{}
+\item[関数]Mkobjpolycmd(name,PD,options)
+\item[機能]多面体を描く
+\item[説明]VertexEdgeFace() の戻り値を PDとして渡して多面体を描く。
+
+\vspace{\baselineskip}
+\hypertarget{mkobjsymbcmd}{}
+\item[関数]Mkobjsymbcmd(PD, 実数,実数,ベクトル, ベクトル)
+\item[機能]文字等のobjデータのためのコマンドを作成
+\item[説明]引数のPDを描く。第2引数は大きさ,第3引数は回転角,第4引数は正面方向のベクトル,第5引数はPDの中心の位置。
+
+PDは,平面の描画コマンドによるプロットデータが使える。また,PD に半角アルファベットを文字として与えることができる。この場合,文字は n,p,q,r,t,x,y,z で,該当するフォントが data フォルダの fontF フォルダに用意されている。この中にないフォントは使えない。
+
+\vspace{\baselineskip}
+\hypertarget{mkobjthickcmd}{}
+\item[関数]Mkobjthickcmd(name,式)
+\item[機能]厚みを持つ曲面のobjファイルのためのコマンドを作成
+\item[説明]オプションは [分割数1,分割数2,厚み,表側の方向の指定,条件]
+表側の方向は,変数に対して,右手系の方向が"+"。厚みを持つため,nsew のそれぞれについて,
+"+n+s-e-w" のように指定する。
+
+条件として,\verb|"Assume(R>0)"| をつけると,Rが0以下になるための不具合を回避できる。
+
+また,"ratsimp" をつけると有理関数について,"trigsimp"をつけると三角関数について,処理を速くすることができる。
+
+なお,この関数はMaximaを使うので,Maximaをインストールしていることが前提。
+
+\vspace{\baselineskip}
+【例】回転放物線
+
+\begin{layer}{150}{20}
+\putnotes{58}{37}{ \includegraphics[bb=0 0 287.01 189.01 , width=5cm]{Fig/meshlab06.pdf}}
+\end{layer}
+\begin{verbatim}
+fd=[
+"z=(x^2+y^2)",
+"x=R*cos(T)","y=R*sin(T)",
+"R=[0,2]","T=[0,2*pi]","e"
+];
+Mkobjthickcmd("1",fd,[40,40,0.2,"+n+s-e-w+","assume(R>0)"]);
+Mkviewobj("pala",oc1,["m","v","Wait=5"]);
+\end{verbatim}
+
+%\begin{center}\includegraphics[bb=0 0 574 378 , width=4cm]{Fig/meshlab06.pdf}\end{center}
+
+\vspace{37mm}
+\hypertarget{mkviewobj}{}
+\item[関数]Mkviewobj(name,PD, options)
+\item[機能]objファイルを作成。optionにより MeshLab を立ち上げて表示する。
+\item[説明]第2引数に複数のプロットデータを与えるときは,Concatcmd() により1つにまとめる。
+オプションは
+\begin{tabbing}
+12345678901234567890\=\kill
+"m"または"make"\> データを作る(指定しない場合もデータがなければ作る)\\
+"v"または"view"\>MeshLabを立ち上げて表示する\\
+"W=n"\>作成するための待ち時間。n秒。これを過ぎると終了する\\
+"Unit=mm"\>Setunitlen()と連動して3Dプリンタの数値の単位をmmで指定する\\
+\>3Dプリンターがインチで認識する場合は "Unit=in" とする。\\
+\end{tabbing}
+
+
+\end{description}
+\begin{flushright}\hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+%\newpage
+%表計算ソフトとの連携==================================
+\subsection{表計算ソフトとの連携}
+表計算ソフトでは,複数のセルを選択してコピー(Windowsでは Crtl+ C ,Macでは Command+C)すると,セルの内容はtab区切りのテキストデータとしてクリップボードにコピーされる。これをCindyscriptエディタにペーストすることで表計算ソフトのデータを\ketcindy で利用できる。逆に,Cindyscriptのコンソールへの出力を表計算ソフトのシートにコピーすることもできる。
+
+また,表計算ソフトから書き出したCSVファイルについても同様にしてCSV形式のデータを扱うことができる。
+
+\begin{description}
+\hypertarget{tab2list}{}
+\item[関数]Tab2list(str,option)
+\item[機能]str の内容をリストに変換する
+\item[説明]tabやコンマ区切りになっている文字列 str をリストに変換する。
+
+ optionは,次の通り。
+
+ Blank=a:NULLのセルをaに置き換える。
+
+Sep=b:セパレータ(区切り文字)を b とする。 初期設定は tabコード
+
+次のような手順で表計算ソフトやCSVファイルからデータを\ketcindy に移すことができる。
+
+\vspace{\baselineskip}
+(1) Cindyscriptエディタで,適当な文字変数を用意する。
+
+たとえば,data="";
+
+\vspace{\baselineskip}
+\hspace{10mm} \includegraphics[bb=0 0 429.02 149.01 , width=7cm]{Fig/tab2list02.pdf}
+
+\vspace{\baselineskip}
+(2) 表計算ソフトで,適当な範囲を指定しクリップボードにコピーする。
+
+Windowsなら Ctrl+C,Macなら Command+C
+
+\vspace{\baselineskip}
+\hspace{10mm} \includegraphics[bb=0 0 371.02 154 , width=7cm]{Fig/tab2list01.pdf}
+
+\vspace{\baselineskip}
+(3) data=""; のダブルクォートの間にペーストする。
+
+最後の行は右図のように," の前で改行されていてもよい。
+
+\vspace{\baselineskip}
+\hspace{10mm} \includegraphics[bb=0 0 369.02 118.01 , width=6cm]{Fig/tab2list00.pdf}
+
+\hspace{10mm} \includegraphics[bb=0 0 374.02 138.01 , width=6cm]{Fig/tab2list001.pdf}
+
+\vspace{\baselineskip}
+(4) この文字変数 data に対し,Tab2list(data) を実行すると,行列を表すリストが返される。
+
+これを適当な変数に代入し,作表コマンドで表にするなど,目的に応じて利用する。
+
+数値だけなら行列として計算もできる。
+
+\vspace{\baselineskip}
+\hspace{10mm} \includegraphics[bb=0 0 622.53 228.51 , width=10cm]{Fig/tab2list03.pdf}
+
+\vspace{\baselineskip}
+空文字のセル(NULL)が含まれる場合, 初期設定ではそのまま空文字になるが,アンケート処理などで無回答を0にしたいような場合は
+
+\hspace{10mm}\verb|dlist=Tab2list(data,["Blank=0"];|
+
+とする。
+
+ CSVファイルからCSV形式(コンマ区切り)のデータをコピーした場合は
+
+\hspace{10mm}\verb|dlist=Tab2list(data,["Sep=,"];|
+
+とする。
+
+なお,文字列をセパレータで区切ってリスト化するCindyscriptの関数に tokenize()がある。上の例で,
+
+\hspace{10mm} \verb|dlist=tokenize(data,[unicode("000a"),unicode("0009")]);|
+
+とすると,改行コード(000a)とtabコード(0009)で切り分けてリスト化する。このとき,リストの各要素はつぎのようになる。
+
+文字列→文字列
+
+数値形式の文字→実数【例】 14 → 整数1412.3 → 実数12.3
+
+計算式の形→文字列【例】 437-0023 →437-0023 (文字列)
+
+これに対し,Tab2list()では,計算式の形の文字列は数値と見なして計算結果を取得する。
+
+\vspace{\baselineskip}
+【例】 437-0023 →414 (数値)
+
+したがって,郵便番号や日付(28/12/5)のようなものは計算されてしまうので,tokenize() を用いるのがよい。なお,tokenize()の場合,空行は空リストになるので,最後の行でダブルクォートの前で改行されていると空リストが入る。
+
+
+\vspace{\baselineskip}
+\hypertarget{dispmat}{}
+\item[関数]Dispmat(list)
+\item[機能]リストを行列の形でtab区切りにしてコンソールに表示する。
+\item[説明]行列を表すリスト (たとえば dlist) を引数としてDispmat(dlist) を実行すると,コンソールに行列型で内容が表示される。
+
+実際にはTAB区切りの文字列。(println としなくても直接コンソールに表示される)
+
+これを表計算ソフトのシートにコピーする。
+
+\vspace{\baselineskip}
+\hspace{10mm} \includegraphics[bb=0 0 427.52 197.51 , width=7cm]{Fig/tab2list04.pdf}
+
+
+\vspace{\baselineskip}
+\hypertarget{writecsv}{}
+\item[関数]Writecsv(namelist, data, filename, option)
+\item[機能]data の内容をCSVファイルに出力する
+\item[説明]ベクトルまたは行列となっている data を、filenameのファイル名としてCSVファイルに書き出す。
+
+optionは,次の通り。(省略できる)
+
+Col=nn:自然数nnで指定した列数のCSVファイルとして書き出す。
+
+namelistは,CSVファイルの1行目に追加される項目名。省略すると"C1,C2,..."という項目名が付く。
+
+
+なお,列数の指定を省略するとdataが行列の場合は、その列数をdataがベクトルの場合はnamelistの項目数を利用する。
+
+\end{description}
+
+\begin{flushright}\hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+\newpage
+
+
+%アニメーション==================================
+\section{アニメーションPDF}
+\subsection{概要}
+アニメーションのできるPDFを作る。
+
+Cinderellaの作図機能とCindyscriptを用いてアニメーションができるが,PDFにすることでCinderellaがなくてもPDFビュアーがあればアニメーションを実行できるので,プレゼンテーションや教材の受け渡しなどに便利である。
+
+次の画面は,samplesフォルダにある「s06animation」の「s0601cycloid」のものである。これをひな形として使うのがよい。すでにあるスライダなどが邪魔であれば,消去ボタンで消去するか,template2allbuttons.cdy をひな形として用いる。
+
+\vspace{\baselineskip}
+\includegraphics[bb=0 0 732.04 376.02 , width=12cm]{Fig/mvgaiyou01.pdf}
+
+画面上方のボタンには,次のようなスクリプトが割り当てられている。
+
+\begin{tabbing}
+1234\=12345678\=1234567897890123456\=\kill
+\>Figure\>: Viewtex(); \>現在の画面のPDFデータを作る\\
+\>Parent \>:複数のスクリプト\>Figpdf() を使うときに使用する。\\
+\>ParaF \>: Parafolder(); \>アニメーションのフレームデータを作る\\
+\>Anime\>: Mkanimation(); \>アニメーションPDFを作る\\
+\>Flip \>: Mkflipanime(); \>パラパラ動画PDFを作る
+\end{tabbing}
+
+アニメーションPDFを作るには,フレームを定義する関数を記述し,「ParaF」ボタンでフレームデータを作り,「Anime」または「Flip」ボタンでPDFを作成する。
+%たとえば,Fhead が "hoge" の場合,TeX の文書には\\
+% \verb|\begin{center} \input{hogemoviefigs.tex}|\\
+%で動画を挿入することができる。
+
+%ただし,動画のできるPDFを作成するには,ドキュメントクラスと使用パッケージについて注意が必要である。
+
+%ドキュメントクラスは,article または jarticle とする。jsarticle は使えない。
+
+%パッケージは animate に dvipdfmx オプションをつける。\\
+%\verb|\usepackage[dvipdfmx]{animate}|
+
+Anime ボタンを押すと,\verb|\usepackage[dvipdfmx]{animate}| でパッケージを読み込み,animateinline 環境のアニメーションを作る。
+
+Flip ボタンを押すと,animateinline 環境ではなく,フレームに分割したPDFが生成される。
+
+なお,アニメーションPDFでアニメーションを行うにはAdobe Acrobat Reader など,アニメーションに対応したPDFリーダーが必要である。WindowsのSumatraPDF,Macの プレビューではアニメーションができない。
+
+\subsection{関数}
+\begin{description}
+
+\hypertarget{setpara}{}
+\item[関数]Setpara(fname,funcstr,range,options1,options2)
+\item[機能]アニメーションの設定をする
+\item[説明]fname は出力するファイル名,funcstrは定義した動画関数名,rangeは範囲
+
+「Anime」ボタンを押すと,animate+fname.pdf が作られる。再生はコントローラか,画面クリックで行う。
+
+「Flip」ボタンを押すと,flipanime+filename.pdf が作られる。再生(コマ送り)は,Acrobat Reader のページ送りボタンで行う。
+
+options1 はアニメーションのデータを作るための設定。
+\begin{tabbing}
+1234567890123\=90123456789012345678\=\kill
+m/r\> データの作成 / 既存データがある場合の読み込み( 初期設定は r )\\
+Div=n\> フレーム数。初期値は25。
+\end{tabbing}
+options2 はアニメーションについての設定で,次の通り。
+\begin{tabbing}
+1234567890123\=90123456789012345678\=\kill
+Frate=n\>1秒間のフレーム数。初期値は20。 \\
+Title=str\> タイトル。指定しない場合は fname と同じ。\\
+Scale=n\> 図の大きさの拡大率 \\
+opA=[option]\> animateinline 環境のためのオプション \\
+\>初期設定は\verb|[loop,controls,buttonsize=3mm]|。\\
+\> loop:繰り返し再生する。\\
+\> controls:コントローラを表示する\\
+\> buttonsize:コントローラのサイズ\\
+\> palindrome:反転して繰り返し再生する\\
+\> step:コマ送りモードにする。コントローラもコマ送り仕様。\\
+\>\verb|"OpA=[controls,buttonsize=5mm]" |のように記述する。\\
+\> +をつけると初期設定のものに追加することができる。\\
+\>たとえば \verb|"OpA=+step"| で\\
+\>\verb|"OpA=[loop,controls,buttonsize=3mm,step]"| となる。\\
+\>\verb|"OpA=[]"| とすると,オプションなしとなり,\\
+\>画面をクリックすると繰り返しなしで再生される。\\
+記述例\\
+\verb|Setpara("cycloid","mf(t)","t=[0,60]",["Div=60"],|\\
+\verb| ["Frate=30","Title="サイクロイド","Scale=1.5","OpA=[controls]"]);|\\
+\end{tabbing}
+
+\vspace{\baselineskip}
+\item[関数] Parafolder(funcstr,fname,range,options)
+\item[機能]アニメーションのフレームデータを作成する
+\item[説明]funcstrは動画関数名,fname は出力するフォルダ名,rangeは範囲
+
+作業フォルダ(fig)内に,フレームデータを格納した fname フォルダを作る。ひな形(s0601cycloid)にある ParaF ボタンに割り当てられており,通常はそのまま使えばよい。
+
+\vspace{\baselineskip}
+\item[関数]Mkanimation(path,folder)
+\item[機能]アニメーションのPDFを作る
+\item[説明]作業フォルダ(fig)内に,フレームデータを格納した fname フォルダを作り,ここからアニメーションのPDFを作る。Setpara() で設定したファイル名を fname とすると,生成する TeX ファイルは,animatefname.tex (PDF作成のTeXファイル)と animfname.tex (動画データ)で,PDFの名称は,animatefname.pdf となる。
+
+ひな形(s0601cycloid)にある Anime ボタンに割り当てられており,通常はあらためて設定せずそのまま使えばよい。
+
+\vspace{\baselineskip}
+\item[関数]Mkflipanime(path,folder)
+\item[機能]パラパラ動画のPDFを作る
+\item[説明]作業フォルダ(fig)内に,フレームデータを格納した fname フォルダを作り,ここからパラパラ動画のPDFを作る。Setpara() で設定したファイル名を fname とすると,生成する TeX ファイルは,flipanimefname.tex (PDF作成のTeXファイル)で,PDFの名称は,flipanimefname.pdf となる。
+
+ひな形にある Flip ボタンに割り当てられており,通常はあらためて設定せずそのまま使えばよい。
+
+\end{description}
+
+\begin{flushright}\hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+\subsection{制作例}
+
+%\begin{description}
+\vspace{\baselineskip}
+【例】定円上を動く点Pと,定点Aを結ぶ線分の中点をQとして動きを見る。
+
+アニメーション(フレーム)を定義する関数は,時刻を $t$ として, $t$ における図を定義すると考える。時刻は単なる媒介変数であるので,$t$ でなく $s$ などでもよい。関数名は,たとえば mf(movie frame) とする。
+
+\begin{verbatim}
+Setax(["","","sw","","sw"]);
+Slider("A-C-B",[0,YMIN-1],[2*pi,YMIN-1]);
+Circledata("1",[[0,0],[0,2]]);
+mf(t):=(
+ pt=2*[cos(t),sin(t)];
+ mp=(pt+[4,0])/2;
+ Listplot("1",[[4,0],pt]);
+ Pointdata("1",[mp,pt],["Size=2"]);
+ if(t==0,
+ ptlist=[mp];
+ ,
+ ptlist=append(ptlist,mp);
+ );
+ Letter([[4,0],"s","A",pt,"en","P",mp,"ne","Q"]);
+ Pointdata("2",ptlist,["Size=2","Color=red"]);
+);
+mf(C.x);
+Setpara("middle","mf(t)","t=[0,4*pi]");
+\end{verbatim}
+
+この例の場合,\verb|mf(C.x)| を実行するとスライダを動かすことでインタラクティブに軌跡を表示できる。アニメーションを作る上では \verb|mf(C.x)| やスライダはなくてもよい。
+
+Cinderellaの画面は次のようになる。
+
+\vspace{\baselineskip}
+\hspace{20mm} \includegraphics[bb=0.00 0.00 608.03 367.02,width=8cm]{Fig/moviedata01.pdf}
+
+アニメーションを作成するときは \verb|//mf(C.x)| とコメントアウトしてから 「ParaF」「Anime」 ボタンをクリックする。次の図は,でき上がった animatemiddle.pdf の始めの画面である。
+
+\hspace{30mm}\includegraphics[bb=0.00 0.00 470.02 394.02,width=6cm]{Fig/moviedata02.pdf}
+
+また,次のようにオプションを指定すると,5秒間のアニメーションとなる。
+
+\verb| Setpara("middle","mf(t)","t=[0,4*pi]",["Div=30"],["Frate=6"]);|
+
+\verb|["Div=150"],["Frate=30"]|とすると,やはり5秒間のアニメーションとなるが,1秒間のフレーム数が多いため,なめらかな動きとなる。これは標準的なビデオのフレームレートである。ただし,ファイルサイズは約5倍となる。
+
+
+\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+%\end{description}
+
+\newpage
+
+
+%==================== Slide ===============
+\section{KeTスライド}
+\subsection{概要と制作手順}
+\ketcindy で作成した図とテキストを統合してプレゼンテーション用のスライドPDFを作成する。必要なファイルは,スライドの内容を記述したテキストファイル(ここではコンテンツファイルと呼ぶ)と,タイトルや図を作成し,コンテンツファイルと統合する \ketcindy のファイルである。この2つのファイルは,拡張子が txt と cdy で,ファイル名は同一とする。たとえば,コンテンツファイルを makeslide.txt , \ketcindy ファイルを makeslide.cdy としたときの,制作イメージを次の図に示す。
+
+\hspace{10mm}\input{Fig/makeslide}
+
+\hspace{10mm}makeslide.cdy
+
+\hspace{10mm}\includegraphics[bb=0.00 0.00 881.05 451.02,width=10cm]{Fig/slide01.pdf}
+
+\vspace{\baselineskip}
+ひな形として,サンプルとして提供されている samples フォルダの中の s0701basic.cdy をコピーし,適当にリネームして使うのがよいだろう。必要なボタンと,最低限のスクリプトが記述されている。
+
+以下では,\ketcindy のファイルを makeslide.cdy , コンテンツファイルを makeslide.txt として説明を進める。制作手順は次の通り。
+
+(1) makeslide.cdy に \verb|Settitle| コマンドでタイトルを書き,「Titile」ボタンで書き出す。
+
+タイトルスライドが作業フォルダに,makeslide.txt が makeslide.cdy と同じフォルダに作成される。makeslide.txt がすでにある場合には上書きはされず,タイトルスライドだけが上書きされる。
+
+(2) makeslide.txt に,スライドの各ベージごとの内容を記述する。
+
+(3) 必要な図やアニメーションのコードを書き,ボタンをクリックしてファイルを作る。
+
+\hspace{10mm}Figure : 図を挿入するとき
+
+\hspace{10mm}ParaF : アニメーションやパラパラスライドを挿入するとき
+
+(4) Slide ボタンでスライドPDFを作成する。
+
+PDFと,関連する中間ファイルは,作業フォルダではなく,makeslide.cdyのあるフォルダに作成される。また,スライドPDFはアニメーションと同様,Windows,MacではAdobe Reader で開く必要がある。Linux(Ubuntu)では Evince でプレゼンテーションができる。
+
+\subsection{コンテンツファイル}
+
+コンテンツファイルは次のような構成にする。
+
+\begin{tabbing}
+1234567890\=12345678912345678901234567890\=\kill
+ \>title::slide0//\> タイトルスライド。title はコマンド。\\
+ \>main::三角比と三角関数//\> セクション1のタイトル。main はコマンド。\\
+ \>直角三角形と三角比//\> 1ページ目の表示内容。\\
+ \>・・・・// \\
+ \> new::角の概念の拡張//\> 新しいページとタイトル。new はコマンド。\\
+ \> enumerate::[(1)]// \> 2ページ目の表示内容。enumerate はコマンド。\\
+ \> ・・・・//\\
+ \> new::負の角//\> 新しいページとタイトル。\\
+ \> ・・・・//\\
+ \>main::三角関数のグラフ//\> セクション2のタイトル。\\
+ \>$f(x)=\sin x$//\> \hspace{10mm}以下同様\\
+ \> new::振幅と周期// \\
+ \> ・・・・//\\
+\end{tabbing}
+%あまりスマートな方法ではないが,枠をKeTCindyで作ってレイヤーで表示
+\begin{layer}{150}{0}
+\hspace{7mm}\input{Fig/boxframeslide}
+\end{layer}
+
+
+・すべての行の末尾には必ず // をつける。
+
+\hspace{10mm} 注)urlの指定で // を用いるときは,$||||$ とすれば // に変換される。
+
+・ページの内容は,コマンドでレイアウトなどを指定し,表示する文をテキストで書く。
+
+\vspace{\baselineskip}
+{\bf コマンド}
+
+コマンドにおいて,各ブロックの引数の区切りは \verb|::| とし,各行の終わりには必ず//をつける。
+
+\vspace{\baselineskip}
+ {\bf 【タイトルと壁紙】}
+
+ タイトルスライドをつけるときは,
+
+ \hspace{10mm}\verb|title::slide0//|
+
+ を1行目に置く。タイトルスライドは makeslide.cdy で作る。slide0は 初期設定のタイトルスライドのファイル名。このファイル名を変更(たとえば "start")したときは,makeslide.cdy で,Settile() のオプションに "Title=start" をつけて,ファイル名が一致するようにしておく。
+
+ タイトルスライドをつけないときはスライド名をつけないでおく。
+
+\hspace{10mm} \verb|title:://|
+
+注)title コマンドは必須で,これを1行目に書かないとスライドは作成されない。
+
+\vspace{\baselineskip}
+壁紙(背景)を表示するときは,タイトルコマンドに続けて壁紙ファイル名を書く。
+
+ \hspace{10mm}\verb|title::slide0::wallpaper//|
+
+wallpaper は壁紙のファイル名。壁紙ファイルはTeXのファイルで,作業フォルダ(fig)に入れておく。
+
+壁紙ファイルの一例
+
+\begin{verbatim}
+ {\color[cmyk]{0.6,0.2,0.8,0}\huge\rm\normalsize
+\newpage
+\begin{layer}{120}{0}
+\lineseg{0}{2}{125}{0}
+\lineseg{0}{88}{125}{0}
+\putnotese{0}{90}{\ketcindy}
+\end{layer}
+}
+\end{verbatim}
+
+\vspace{\baselineskip}
+{\bf 【セクションタイトル】}
+
+\hspace{10mm}\verb|main::セクションタイトル名//|
+
+セクションを分けないときはなくてもよい。
+
+\vspace{\baselineskip}
+ {\bf 【新しいページ】}
+
+\hspace{10mm}\verb|new(::行下げ)::タイトル((::位置)::読み込みファイル)//|
+
+ 例)\verb|new::[10]::はじめに::{50}{20}::figure//|
+
+読み込みファイルの表示サイズを変更するときは
+
+ \hspace{10mm}\verb|new::[10]::はじめに::{50}{20}::figure,0.8//|
+
+のようにする。
+
+読み込みファイルがなければ,figure は省略。
+
+\vspace{\baselineskip}
+ {\bf 【箇条書き】}
+
+番号つき箇条書きは
+
+ \hspace{10mm}\verb|enumerate//|
+
+ で,enumerate環境の始まりを示す。
+
+番号にかっこをつけるなど,番号の形式を変えるには,
+
+\hspace{10mm}\verb|enumerate::[(1)]|
+
+のように,\verb|::|で区切って形式を示す。 初期設定は,かっこなしの番号。
+
+記号つき箇条書きは
+
+\hspace{10mm}\verb|itemize//|
+
+で itemize環境の始まりを示す。記号は中黒。
+
+enumerate,itemizeのいずれも
+
+\hspace{10mm}\verb|item::文//|
+
+で itemを記述する。
+
+環境の終わりは,
+
+\hspace{10mm}\verb|end//|
+
+で示す。
+
+\vspace{\baselineskip}
+{\bf 【項目の順表示】}
+
+1枚のスライド内で,項目を段階的に表示するときは,\verb|new| の次の行に
+
+\hspace{10mm}\verb| %repeat=m(,para)//|
+
+を書く。mは段階数で,たとえば,そのスライドの内容を3段階で表示したい場合は
+
+\hspace{10mm}\verb| %repeat=3//|
+
+とする。実際には3枚のスライドが作られる。
+
+para をつけると,右下にコントローラが表示され,前後に進めやすくなる。
+
+\hspace{10mm}\verb| %repeat=3,para//|
+
+段階的に表示したい行の先頭に,表示する順番を,2番目以降から
+\begin{verbatim}
+%[2,-]::text//
+%[3,-]::text//
+\end{verbatim}
+
+のように書く。
+
+番号指定を \verb| [-, 3] | とすると,3番目まで表示する。
+
+\verb| [1..3,5 ]| とすると,1番目から3番目までと5番目に表示する。(4番目をスキップ)
+
+\vspace{\baselineskip}
+ {\bf 【薄文字】}
+
+ 順表示したい項目の全体像を見せておいて,そのうちの現在までの項目を示すような場合に用いる。番号指定の前に thin をつけ,
+
+ \begin{verbatim}
+%thin[2,-]::text//
+%thin[3,-]::text//
+\end{verbatim}
+
+のように書くと,現段階の項目よりあとは薄文字で表示される。
+
+薄文字の濃さは,
+
+\hspace{10mm} \verb|\setthin{alpha}//|
+
+で指定できる。alphaは0から1までの数で, 初期設定は0.1。
+
+\verb|\setthin{0}//| のとき,指定段階以降の項目は非表示になる。
+
+ 初期設定の薄文字の濃さは,makeslide.cdy の Setslidebodyの第3引数で設定できる。たとえば,
+
+\hspace{10mm}\verb|Setslidebody(["","",0.2]);|
+
+とする。
+
+item とともに用いるときは,\verb|%thin[n,-]| を先に書く。
+
+\vspace{\baselineskip}
+【例】項目の順表示
+
+図は,3番目のJavaまで進んだところである。右下にコントローラがある。
+
+\begin{layer}{150}{0}
+\putnotese{70}{10} {\includegraphics[bb=0.00 0.00 777.04 516.03,width=7cm]{Fig/sliderepeat.pdf} }
+\end{layer}
+\begin{verbatim}
+new::プログラミング言語 //
+%repeat=6,para//
+\slidepage//
+itemize//
+item::Python//
+%thin[2,-]::item::Ruby//
+%thin[3,-]::item::Java//
+%thin[4,-]::item::JavaScript//
+%thin[5,-]::item::CindyScript//
+%thin[6,-]::item::C//
+end//
+\end{verbatim}
+
+\vspace{\baselineskip}
+ {\bf 【図ファイルの順表示】}
+
+作業フォルダ(fig)の中にあるサブフォルダ(例えばsubfig)の図ファイルすべてを順に表示する。
+
+ パラパラ動画のときに用いる。パラパラ動画では,ParaFボタンをクリックすると,作業フォルダ(fig)の中に,動画のフレームファイルが入ったフォルダが作られる。そのフォルダのファイルをアルファベット順に表示する。もちろん,パラパラ動画以外のファイルの順表示に使ってもよい。
+
+\verb|new| の次に
+
+\hspace{10mm} \verb|%repeat=//|
+
+\hspace{10mm} \verb|%para=subfig:{0}:s{60}{10}:input(:倍率)//|
+
+を書く。TeXのソースには,
+
+\hspace{10mm}\verb| layer{120}{0}, \putnotes{60}{10 初期設定put...}|
+
+の形で書き入れられる。
+
+また,2行に分けずに
+
+\hspace{10mm} \verb|%repeat=,para=... |と続けて書いてもよい。
+
+
+\vspace{\baselineskip}
+{\bf 【レイヤー】}
+
+ketlayerの\verb|\begin{layer}・・\end{layer}| として書き出す。本来の記述より簡素になっている。
+
+\hspace{10mm}\verb|layer::{範囲}{0}//|
+
+で layer環境の始まりを示す。layer環境の終わりは
+
+\hspace{10mm}\verb|end//|
+
+ レイヤーの中に作業フォルダ(fig)にある図を表示するには
+
+\hspace{10mm}\verb|putnote::方向と位置::読み込みファイル//|
+
+とする。
+
+ 例) figure.texを(30,10)の位置の南東(原点は左上)に表示する。
+
+\hspace{10mm} \verb|putnote::se{30}{10}::figure//|
+
+ 例) figの中のfigure.texを0.8倍にして表示する。
+
+\hspace{10mm} \verb|putnote::se{30}{10}::figure,0.8//|
+
+
+ 例)includegraphics で figure.pdf を表示する。
+
+\hspace{10mm} \verb|putnote::se{30}{10}::include[width=5cm]::figure.pdf//|
+
+
+ 注)\verb|KeTpicStyle.pdf|を参照。文字などは本来の書式を用いて次のように入れる。
+
+\hspace{10mm} \verb|\putnotee{30}{10}{文字}//|
+
+\vspace{\baselineskip}
+{\bf 【テキストと動画】}
+
+コマンド以外のテキストはそのまま \TeX\ に書き出される。行末には // をつける。
+
+テキストを途中で改行するには,\TeX\ の 強制改行マーク \textbackslash \textbackslash をつける。
+
+動画の場合は,動画の設定をして(アニメーションの節を参照)ファイルを作る。
+
+パラパラ動画の場合は,ParaFボタンをクリックすると,figフォルダ内に動画のフレームファイルが入ったフォルダ(たとえば sincurve)が作られる。これを,
+
+\hspace{10mm} \verb|%repeat=//|
+
+\hspace{10mm} \verb|%para=sincurve:{0}:s{60}{10}:input(:倍率)//|
+
+で表示する。
+
+アニメーションの場合は,スライドのために,makeslide.cdy のスクリプトに, \verb|Addpackage(["[dvipdfmx]{animate}"]);| を追加しておく。
+
+Animeボタンをクリックすると,パラパラアニメと同様に動画のフレームファイルが入ったフォルダが作られ,動画用の\TeX\ ファイルができる。Setpara() で設定したファイル名が "sincurve" のとき,動画用の\TeX\ ファイルは "animsincurve.tex" となるので,\verb|%repeat| ではなく \verb|\input{fig/animsincurve}//| で表示する。
+
+
+\vspace{\baselineskip}
+{\bf 【コメント行】}
+
+ コマンドや文をコメントアウトするときは,\verb|%%| とする。
+
+\vspace{\baselineskip}
+{\bf 【空白行】}
+
+空白行を入れたいときは,\verb|...//| とする。
+
+\vspace{\baselineskip}
+{\bf 【タブ】}
+
+\hspace{10mm}\verb|\Ltab{長さ}{文1}文2|
+
+とすると,文1が行頭から,文2が長さ分の字下げをした位置から表示される。長さは 20mm のように指定。
+
+\vspace{\baselineskip}
+{\bf 【ページ番号】}
+
+page番号を表示するときは次のようにする。
+
+ mainの場合は \verb|\slidepage[m]//|
+
+それ以外の場合は \verb|%repeatの後に \slidepage//|
+
+ 注)総ページ数を取得するため,TeXを2度コンパイルすることが必要である。そのため,Slideボタンを2度クリックすると総ページ数が表示される。
+
+\vspace{\baselineskip}
+{\bf mp3/mp4ファイルの追加}
+
+makeslide.txtのタイトルコマンドの後に,以下を追加する。
+\begin{verbatim}
+title::slide0(::wallpaper)
+::\usepackage{ketmedia}
+::\usepackage[dvipdfmx]{media9}//
+\end{verbatim}
+
+mp3ファイルを追加するときは,\verb|\inputsound|または\verb|\inputsoundclick|を用いる。\\
+\hspace{10mm}\verb|\inputsountclik[90]{フォルダ/}{ファイル}|\\
+\verb|\inputsound|は「自動再生」,\verb|\inputsoundclick|は「クリック再生」である。
+最初の引数は,ボタンの水平位置(単位mm)でデフォルトは90である.またフォルダには\verb|/|をつける。\vspace{2mm}
+
+mp4ファイルを追加するときは,\verb|\inputmovie|を用いる。\\
+\hspace{10mm}\verb|\inputsountclik[90]{1}{0.4}{フォルダ/}{ファイル}|\\
+2番目と3番目の引数は,幅と高さの\verb|\linewidth|からの倍率である。
+
+\vspace{\baselineskip}
+{\bf 【余白などの編集】}
+
+スライドの上側余白として,初期状態で \verb|\vspace*{18mm}| が設定される。次のページにはみ出してしまうような場合は,出力された tex ファイルで調整すればよい。
+
+その他,適宜編集して,kc.command(bat/sh) を実行すれば,細かい部分を修正したPDFを作成することができる。
+
+\subsection{関数}
+makeslide.cdy で使う,\ketcindy の関数。
+
+\begin{description}
+
+\hypertarget{setslidebody}{}
+\item[関数]Setslidebody(bodycolor,bodystyle,density)
+\item[機能]全体の文字スタイルと薄文字の濃さ(0-1)の設定
+\item[説明]引数の意味は次の通り。
+\begin{tabbing}
+1234567890123\=4567890\=\kill
+bodycolor\> 文字色 :初期設定は "blue"\\
+bodystyle\> フォントタイプ :初期設定は \verb|"\Large\bf\boldmath"|\\
+density\> 薄文字の濃さ :初期設定は 0.1
+\end{tabbing}
+
+引数がない場合や( \verb|Setslidebody()|)この関数を書かない場合は初期値が使われる。
+
+ある引数だけを指定したい場合は,それより前は空にする。
+
+【例】\verb|Setslidebody(,"\large")|
+
+\vspace{\baselineskip}
+\hypertarget{setslidehyper}{}
+\item[関数]Setslidehyper("dvipdfmx",options)
+\item[機能]順表示でページ送りのコントローラを設定する。
+\item[説明]順表示しないときもこの関数の記述は必須と考えてよい。
+
+パッケージ hyperref.styを読み込み,かつ,options の値を与える。
+
+\verb|Setslidehyper();| は無効。初期設定で使う場合は \verb|Setslidehyper("");| とする。
+
+第1引数は hyperref.sty の第1パラメータ。初期設定は "dvipdfmx"
+
+options は ["cl=bool,lc=col,fc=col","Pos=[x,y]","Size=n"]
+
+\begin{tabbing}
+12345\=4567890\=\kill
+cl \> colorlinks : リンクに色をつけるかどうか。true / false で指定。 初期設定は true\\
+lc \> linkcolor : コントローラの色。色名で指定。 初期設定は blue\\
+fc\> filecolor リンクの色。色名で指定。 初期設定は blue\\
+以上3つは,セットで指定。一部初期値を使う場合は\verb|lc=,| のように右辺を空にする。\\
+Pos \> コントローラの位置。 初期設定は [125,73] (左上が原点)\\
+Size \> コントローラの大きさ。 初期設定は1
+\end{tabbing}
+
+
+\vspace{\baselineskip}
+\hypertarget{setslidemain}{}
+\item[関数]Setslidemain([letterc,boxc,boxd,framec,xpos,size])
+\item[機能]メインスライド(セクション区切り)の設定
+\item[説明]引数の一部を 初期設定値とする場合は [,,,,3] や [,"red"] などとする。
+\begin{tabbing}
+1234567\=4567890\=\kill
+letterc \> 文字の色。 初期設定は CMYKで [0.98,0.13,0,0.43]\\
+boxc \> ボックスの色。 初期設定は [0,0.32,0.52,0] \\
+frame\> フレームの色。 初期設定は [0,0.32,0.52,0]\\
+xpos \> タイトルの水平位置。 初期設定は 62\\
+size \> タイトルの倍率。 初期設定は 2
+\end{tabbing}
+
+
+\vspace{\baselineskip}
+\hypertarget{setslidepage}{}
+\item[関数]Setslidepage([letterc,boxc,boxd,framec,shadowc,xpos,size])
+\item[機能]ページの設定をする。
+\item[説明]引数の一部を 初期設定値とする場合は [,,,,3] や [,"red"]などとする。
+
+\begin{tabbing}
+1234567\=4567890\=\kill
+letterc \> 文字の色。 初期設定は CMYKで [0.98,0.13,0,0.43]\\
+boxc \> ボックスの色。 初期設定は [0,0.32,0.52,0] \\
+frame\> フレームの色。 初期設定は [0,0.32,0.52,0]\\
+shadowc \> 影の色。 初期設定は [0,0,0,0.5]\\
+xpos \> タイトルの水平位置。 初期設定は 6\\
+size \> タイトルの倍率。 初期設定は 1.3
+\end{tabbing}
+
+\vspace{\baselineskip}
+\hypertarget{setslidemargin}{}
+\item[関数]Setslidemargin([leftmarginchange,topmarginchange])
+\item[機能]スライドの左上マージンをデフォルトから変更する場合の値。
+\item[説明]Setslidemargin([+5,-10]);(横方向に$+5$mm,縦方向に$-10$mm変更)
+
+\vspace{\baselineskip}
+\hypertarget{settitle}{}
+\item[関数]Settitle(タイトルリスト,options)
+\item[機能]タイトルスライドを作る
+\item[説明]タイトルリストはコンマ区切りで位置と文を文字列で与える。例を参照。
+「Title」ボタンをクリックすると,コンテンツファイルがない場合は新たに作る。すでにある場合は上書きせずタイトルスライドのみを作る。
+
+Settitleのオプションは次をリストで与える。
+
+\begin{tabbing}
+123456789012\=4567890\=\kill
+"Title=" \> タイトルスライドのファイル名。 初期設定は "slide0"。\\
+"Layery=" \> タイトルの縦位置。 初期設定は0。0でないときは方眼を表示。 \\
+"Color="\> 文字の色。 初期設定は blue。
+\end{tabbing}
+
+\vspace{\baselineskip}
+【例】タイトルの設定
+
+\begin{verbatim}
+Settitle([
+"s{60}{20}{メインタイトル}",
+"s{60}{50}{名前}",
+"s{60}{60}{所属}",
+"s{60}{70}{情報}"
+] ,
+["Title=SlideA","Color=[1,1,0,0]"]);
+\end{verbatim}
+
+出力する \TeX\ ファイルに,\verb|\begin{layer}| の設定をする。 \verb|s| は,東西南北の\verb|s|。
+
+例のように,タイトルリストは改行すると見やすい。
+
+\end{description}
+
+\begin{flushright}\hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+\newpage
+%================== 3D概要 ===============
+\section{\ketcindy 3D}
+\subsection{概要}
+\ketcindy 3Dの画面は次のように構成される。
+
+Cinderellaの描画面に,白の矩形で囲んだ領域が2つできる。NE,SWを対角とする左側の領域を主画面,右側の領域を副画面という。
+
+\vspace{\baselineskip}
+\begin{center}
+ \includegraphics[bb=0 0 879.05 447.02 , width=8cm]{Fig/3dstart.pdf}
+\end{center}
+主画面は平面の場合と同様,TeXに出力される範囲を示し,NE,SWの2点をドラッグすることにより変更できる。主画面の下方のスライダで視点が移動でき,主画面上では軸が回転する。副画面は,xy平面上に視点を置いたものと考えればよい。
+
+主画面上にCinderellaの作図ツールで点や線分を作図すると,副画面に対応する点が作図される。主画面上の点をドラッグするとx,y座標を変更でき,副画面上の点をドラッグするとz座標を変更できる。
+
+\vspace{\baselineskip}
+\begin{center}
+ \includegraphics[bb=0.00 0.00 863.04 378.52 , width=10cm]{Fig/3dscreen.pdf}
+\end{center}
+
+KeTCindy3Dでは,線や面についての陰線処理を行う。陰線処理はC言語との連携により処理を速めている。C言語を使う環境整備が必要であるが,現在はこれを標準としている。C言語が使えない場合はRで計算する関数を用いることになるが,その場合はかなり時間がかかる。(場合にもよるが2分程度)
+
+%================== 3D設定 ===============
+\newpage
+\subsection{設定}
+
+\begin{description}
+
+\hypertarget{ketinit3d}{}
+\item[関数]Ketinit3d()
+\item[機能]KeTCindy3Dの使用宣言
+\item[説明]Cinderellaの画面を3Dモードにする。
+
+Cinderellaの描画面に,視点移動のための2つのスライダを作る。スライダは初期位置が左端になる。スライダTHで角THETAを,スライダFIで角PHIを内部変数として定義する。
+
+引数に0を入れて \verb|Ketinit3d(0)| とすると,副画面を表示しない。
+
+\textcolor{red}{<重要>}
+
+この関数は Initialization スロットに置く。Ketinit() も,平面の場合と異なり Initialization スロットに置く。KeTCindy3Dにおける変数の初期化などを行う,Start3d()はDrawスロットに書く。
+
+%----------------Setangle --------------------------------------------
+\vspace{\baselineskip}
+\hypertarget{setangle}{}
+\item[関数]Setangle(TH,FI)
+\item[機能]回転角の指定
+\item[説明]スライダで設定できる回転角(視点の位置)TH と FI を度数法で指定する。
+たとえば,\verb|Setangle(70,40)| とすると,TH,FIがその位置になる。スライダは固定されるので,再度スライダを有効にしたい場合は,コメント化して再実行する。
+
+初期状態だけを決めたい場合は
+
+\verb| if(!Ptselected(),Setangle(70,40)); |
+
+または
+
+\verb| if(!Isangle(),Setangle(70,40)); |
+
+とすると,スライダは有効となり,スライダのいずれかの点を選択した状態であれば Figure ボタンも有効である。画面上のなにもないところをクリックして,点の選択状態を解除するともとに戻る。
+
+回転角の取得については,\hyperlink{getangle}{回転角の取得}を参照のこと。
+
+%----------------Start3d --------------------------------------------
+\vspace{\baselineskip}
+\hypertarget{start3d}{}
+\item[関数]Start3d(option)
+\item[機能]3Dの画面設定と空間点の認識
+\item[説明]副画面を作り,幾何点を3Dの点として認識する。この関数は必須で,Drawスロットの先頭に書く。
+
+Cinderellaの作図ツールで,点・線分を作図すると,内部関数の Ptseg3data() によってそれらを空間の点として認識し,副画面上に対応する点をとる。ただし,始めはz座標を0とする。点の名前がAであれば,副画面上の点はAzとなる。点をポイントして選択すると副画面の上に座標が表示される。
+
+作図した点の名称をインスペクタで変更した場合,新しい名称に対応する点を副画面上に作成するが,以前の点は消えないので要注意。たとえば,点Aを作図した後,主画面上の点Aをインスペクタで点Dに変えた場合,副画面上に新たにDzができるが,以前のAzも残る。残ったAzは,選択しておいて作図ツールの消去ボタン \includegraphics[bb=0 0 6.48 5.04 , width=0.6cm]{Fig/delete.pdf}で消すことができる。
+
+optionに,除外点のリストを与えると,その点は空間点としない。(スライダで視点を移動しても位置は変わらない)
+
+ %----------------Startsurf --------------------------------------------
+\vspace{\baselineskip}
+\hypertarget{startsurf}{}
+\item[関数]Startsurf(options)
+\item[機能]曲面描画の初期化と定数の設定
+\item[説明]options で定数を設定する。定数としては,分割数,Cのサイズ,誤差の限界を設定する。
+
+optionsがないときは,以下の 初期設定を用いる。
+
+ [50,50],[1500,500,200],[0.01,0.1]
+
+設定後に初期値にリセットするときは,文字列 "reset" を引数に与える。
+
+これにより,陰線処理をともなう面の描画の手順は,次のようになる。
+
+(1)Startsurf(); で面描画の宣言をする。
+
+(2) 描画関数でプロットデータを作る。
+
+(3) ExeccmdC(); で,C言語を用いてまとめて描画する。
+
+%-------------------Xyzaxdata3d-----------------------------------------------
+\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+\vspace{\baselineskip}
+\hypertarget{xyzax3data}{}
+\item[関数]Xyzax3data(name,xの範囲,yの範囲,zの範囲,options)
+\item[機能]座標軸を描く
+\item[説明]描画面に座標軸を描き,プロットデータ ax3dを作成する。nameは空文字列でよい。option は次の2つ。
+
+矢じり:"an":nは数字で矢じりの大きさ。nはなくてもよい。
+
+原点O:"Onesw":neswは微小位置。数字も付けられる。neswをつけない場合の初期値はsw。
+
+【例】 初期設定の座標軸\\
+\verb|Xyzax3data("","x=[-5,5]","y=[-5,5]","z=[-5,5]");|
+
+ 矢じりをつける
+
+ \verb|Xyzax3data("","x=[-5,5]","y=[-5,5]","z=[-5,5]","a");|
+
+ 矢じりを大きくする
+
+ \verb|Xyzax3data("","x=[-5,5]","y=[-5,5]","z=[-5,5]",["a2"]);|
+
+原点のOを表示する。
+
+ \verb|Xyzax3data("","x=[-5,5]","y=[-5,5]","z=[-5,5]",["O"]);|
+
+ 原点のOの位置を調整して右上に表示する。やじりもつける。
+
+ \verb|Xyzax3data("","x=[-5,5]","y=[-5,5]","z=[-5,5]",["a","Oe2n2"]);|
+
+
+【注意】Putaxes3d() で点を取ると原点に点Oが作成される。この点名Oと表示が重複するのが煩わしい場合は,作図後にこのoptionをつけてから出力するとよい。
+
+\end{description}
+%================== 3D描画 ===============
+
+%\newpage
+\subsection{描画}
+
+%================== 3D点・線 ===============
+\subsubsection{点・線}
+
+\begin{description}
+ %----------------Drawpoint3d --------------------------------------------
+%\hypertarget{drawpoint3d}{}
+%\item[関数]Drawpoint3d(座標)
+%\item[機能]空間点を描く
+%\item[説明]引数で与えた空間座標の点を描く。この点は幾何点ではない。また,TeX にも出力されない。幾何点にするには \hyperlink{putpoint3d}{Putpoint3d()} を用いる。TeXに点を出力するには,\hyperlink{pointdata3d}{Pointdata3d()} を用いる。
+
+%引数は,座標のリストにすることもできる。
+
+%\vspace{\baselineskip}
+%【例】
+%\begin{verbatim}
+%Drawpoint3d([1,1,1]);
+%Drawpoint3d([[1,1,1],[0,1,0]]);
+%\end{verbatim}
+
+%\vspace{\baselineskip}
+
+ %----------------Pointdata3d --------------------------------------------
+\hypertarget{pointdata3d}{}
+\item[関数]Pointdata3d(名前,点リスト,options)
+\item[機能]点の3Dデータと2Dデータを作成し,画面と\TeX に出力する。
+\item[説明]optionsは\hyperlink{pointdata}{Pointdata()}と同様。
+\vspace{\baselineskip}
+
+【例】
+\begin{verbatim}
+Pointdata3d("1",[[1,1,1],[0,1,0]],["Size=2","Color=red"]);
+\end{verbatim}
+\vspace{\baselineskip}
+
+ %---------------- Putpoint3d----------------------------------------------
+\hypertarget{putpoint3d}{}
+\item[関数]Putpoint3d(リスト,option)
+\item[機能]空間に幾何点を作図する
+\item[説明]点の名称と座標を与えて点を作図する。複数の点を一度に作図できる。
+
+optionは,"fix"( 初期設定) または "free"。リスト ["free"] にしてもよい。
+
+"fix" では,固定点(ドラッグで移動できない点)とする。同じ名称の点がすでに存在する場合は,指定した位置に移動して固定点とする。
+
+"free" では,自由点(ドラッグで移動できる)とする。同じ名称の点がすでに存在する場合はなにもしない。
+
+\vspace{\baselineskip}
+【例】いくつか記述例を示す。
+
+\verb|Putpoint3d(["A",[2,1,3]]);|
+
+\verb|Putpoint3d(["A",[1,1,1],"C",[1,0,1]],"fix");|
+
+\verb|Putpoint3d(["A",[2,1,3]],"free");|
+
+\vspace{\baselineskip}
+なお,この関数は幾何点を作るものであり,TeXには出力されない。TeXに点を出力するには,\hyperlink{pointdata}{Pointdata()} を併用する。
+
+空間における点の座標は,点名に"3d"を付加した名前の変数に代入される。たとえば,点Aの座標はA3dである。これにより,点の座標を取得できる。
+
+ %----------------Putaxes3d---------------------------------------------
+\vspace{\baselineskip}
+\hypertarget{putaxes3d}{}
+\item[関数]Putaxes3d([x,y,z])
+\item[機能]軸上に幾何点を作る。
+\item[説明]引数のリスト [x,y,z] に対し,点X(x,0,0) ,Y(0,y,0) , Z(0,0,z) および 原点Oを主画面上にとり,副画面上に対応する点Xz,Yz,Zz,Oz を作る。すでに同じ名称の点がある場合は,指定された位置に移動する。
+
+引数は,実数にすることもでき,Putaxes3d(a) は,Putaxes3d([a,a,a]) と同じになる。
+
+\vspace{\baselineskip}
+【例】
+
+Putaxes3d(5);原点と,$x(5,0,0),y(0,5,0),z(0,0,5)$ を作る。
+
+Putaxes3d([1,2,3]);原点と,$x(1,0,0),y(0,2,0),z(0,0,3)$ を作る。
+
+ %----------------Putoncurve3d---------------------------------------------
+\vspace{\baselineskip}
+\hypertarget{putonCurve3d}{}
+\item[関数]Putoncurve3d(点名,PD)
+\item[機能]空間曲線上に点をとる
+\item[説明]プロットデータPDの曲線上に,点名の点をとる。
+
+とった点は固定点ではなく,曲線上にインシデントとなる。したがって,ドラッグして曲線上を動かすことができる。例は \hyperlink{partcrv3d}{Partcrv3d()} を参照のこと。
+ %---------------- Putonseg3d----------------------------------------------
+\vspace{\baselineskip}
+\hypertarget{putonseg3d}{}
+\item[関数]Putonseg3d(点名,点1,点2)
+\item[機能]線分上に点を作る
+\item[説明]点1と点2の中点に,指定された名前の点を取る。点1と点2が線分として結ばれていなくてもよい。とった点は線分にインシデントとなる(線分が描かれていなくても)。点1と点2はリストにすることもできる。指定した点がすでに存在する場合は動かさない。
+
+点1,点2は幾何点の名称または座標で指定する。
+
+\vspace{\baselineskip}
+【例】A(1,-1,0)とB(0,2,2) の中点に点Cをとる。つぎのいずれでもよい。
+
+\verb|Putonseg3d("C",A,B);|
+
+\verb|Putonseg3d("C",[A,B]);|
+
+\verb|Putonseg3d("C",[[1,-1,0],[0,2,2]]);|
+
+\vspace{\baselineskip}
+
+%------------------ Spaceline-----------------------------------------------
+\hypertarget{spaceline}{}
+\item[関数]Spaceline(name,list)
+\item[機能]折れ線を描く
+\item[説明]点の名称または座標のリストを与えて折れ線を描く。平面での Listplot() にあたる。
+
+options は線種(dr,da,do)
+
+\vspace{\baselineskip}
+【例】いくつか示す。
+
+・Spaceline("1",[[2,5,1],[4,2,3]]); 指定された2点を結んだ線分を描く。
+
+・Spaceline("2",[A,B,C,A]);作図されている2点A,B,Cを結んだ三角形を描く。
+
+・節点を表示する場合は,Pointdata3d() で描画する。
+
+\begin{verbatim}
+pt=[[2,0,0],[2,0,2],[2,2,2],[0,2,2],[0,4,2],[0,4,4]];
+Spaceline("1",pt);
+Pointdata3d("1",pt,["Size=3"]);
+\end{verbatim}
+
+点の名前が必要であれば
+
+\verb|pname=apply(1..6,"P"+text(#));|
+
+のようにして,名前リストを作ることができる。
+
+%\vspace{\baselineskip}
+%\begin{layer}{150}{0}
+%\putnotese{80}{10}{ \input{Fig/oresenex01}}
+%\end{layer}
+ \begin{center} \input{Fig/oresenex01} \end{center}
+
+%------------------ Spacecurve-----------------------------------------------
+\hypertarget{spacecurve}{}
+\item[関数]Spacecurve(name,式,定義域,options)
+\item[機能]空間曲線を描く
+\item[説明]媒介変数で表された曲線を描く。optionは解像度 Num
+
+\vspace{\baselineskip}
+【例】螺旋を描く
+
+\verb|Spacecurve("1","[2*cos(t),2*sin(t),0.2*t]","t=[0,4*pi]",["Num=100"]);|
+
+\vspace{\baselineskip}
+ \begin{center} \input{Fig/rasen} \end{center}
+
+
+ %---------------- Bezier3d-----------------------------------------------
+\hypertarget{bezier3d}{}
+\item[関数]Bezier3d(name,リスト1,リスト2)
+\item[機能]空間ベジェ曲線を描く
+\item[説明]引数はリスト1が端点リスト,リスト2が制御点リスト
+
+1組の端点につき,2つの制御点を使う。
+
+\vspace{\baselineskip}
+【例】いくつかの点をベジェ曲線で結ぶ
+
+端点A,Bに対し,制御点をD,Eとする。
+
+\verb|Bezier3d("1",["A","B"],["D","E"]);| \vspace{\baselineskip}
+
+端点A,Bに対し,制御点をD,Eとし,端点BCに対し制御点をE,Fとする。
+
+\verb|Bezier3d("1",["A","B","C"],["D","E","E","F"]);|
+
+ 端点A,Bに対し,制御点をD,Eとし,端点BCに対し制御点をF,Gとする。(図)
+
+\verb|Bezier3d("1",["A","B","C"],["D","E","F","G"]);|
+
+\begin{center} \input{Fig/bezier3d1} \end{center}
+
+\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+%------------------ Mkbezierptcrv3d-----------------------------------------------
+\vspace{\baselineskip}
+\hypertarget{mkbezierptcrv3d}{}
+\item[関数]Mkbezierptcrv3d(点リスト)
+\item[機能]制御点を自動的にとる空間ベジェ曲線
+\item[説明]リストで与えた点に対し,制御点を自動的に生成してベジェ曲線を描く。
+
+制御点は,2つの点に対して,その点を端点とする線分上に2つ作られる。これを適宜移動して任意の曲線にすることができる。\hyperlink{bezier3d}{空間ベジェ曲線 Bezier3d()} を参照のこと。
+
+\vspace{\baselineskip}
+【例】\verb|Mkbezierptcrv3d(["A","B","C","D"]);|\\
+線分AB上に2点a1p,a2p,線分BC上に2点a2p,a2q,線分CD上に2点a3p,a3qができる。
+
+\vspace{\baselineskip}
+
+%------------------ Skeletonparadata-----------------------------------------------
+\hypertarget{skeletonparadata}{}
+\item[関数]Skeletonparadata(name,PDリスト,PDリスト,option)
+\item[機能]陰線処理(スケルトン処理)をおこなう
+\item[説明]描画されている線と軸について陰線処理をおこなう。
+
+第2引数の線(プロットデータ)が,第3引数の線(プロットデータ)によって隠される部分を消去する。第2,第3引数を省略した場合は,すべての線について,互いの陰線処理をおこなう。optionで消去する部分の長さを指定できる。\\
+他のオプション\\
+ \verb|"No=点リスト"| 点リストの点が選ばれているときは実行しない\\
+ \verb|"File=y/m/n (n)"| データファイルを作るか\\
+ \verb|"Check=点リスト"| 点リストの点が変更されていたら,ファイルを作り直す
+
+
+\vspace{\baselineskip}
+【例】螺旋と線分,座標軸の陰線処理
+
+次のように螺旋と線分,座標軸を描いておく。
+\begin{verbatim}
+Xyzax3data("","x=[-5,5]","y=[-5,4]","z=[-5,3]");
+Putpoint3d(["A",[0,-2,-2]]);
+Putpoint3d(["B",[-1,1,3]]);
+Spaceline([A,B]);
+Spacecurve("1","[2*cos(t),2*sin(t),0.2*t]","t=[0,4*pi]",["Num=100"]);
+\end{verbatim}
+座標軸のプロットデータは ax3d,線分は AB3d,螺旋は sc3d1 である。これに対し,
+
+\hspace{10mm} \verb|Skeletonparadata("1");|
+
+ 描画されている線と軸について陰線処理をおこなう。(図左)
+
+\hspace{10mm} \verb|Skeletonparadata("1",[2]);|
+
+ 重なった部分の空きを2にする。(図中央)
+
+\hspace{10mm} \verb|Skeletonparadata("1",["AB3d","ax3d"],["sc3d1"]);|
+
+螺旋によって隠れる部分だけ消去する。(図右)
+
+\begin{center} \input{Fig/skeletonparadata01} \input{Fig/skeletonparadata02}
+ \input{Fig/skeletonparadata03} \end{center}
+
+このほか,次も可能。
+
+\hspace{10mm} \verb|Skeletonparadata("1",["AB3d","ax3d"],["sc3d1"],[2]);|
+
+\hspace{10mm} \verb|Skeletonparadata("1",["AB3d"],["ax3d","sc3d1"]);|
+
+
+\end{description}
+
+\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+%\newpage
+%================== 3D多面体 ===============
+\subsubsection{多面体}
+
+多面体の描画について,四面体の場合を例にして説明する。
+
+\begin{layer}{130}{0}
+\putnotesw{130}{0}{\input{Fig/concatobj}}
+\end{layer}
+
+四面体は4つの面からなっている。
+
+頂点をA,B,C,Dとすると,4つの面は
+
+\hspace{10mm} △ABC,△ABD,△ACD,△BCD
+
+である。
+
+% \begin{center} \input{Fig/concatobj} \end{center}
+
+頂点のリスト[A,B,C,D] に対し,Aから順に番号を
+
+つけると,各面の頂点の順番は
+
+\hspace{20mm}[1,2,3],[1,2,4],[1,3,4],[2,3,4]
+
+と表現できる。
+
+頂点のリストと,この面リストを組にして [[A,B,C,D],[[1,2,3],[1,2,4],[1,3,4],[2,3,4]]] としたものを「面データ」という。この面データを使って,多面体を描画するのが VertexEdgeFace() である。
+
+多面体の陰線処理は2通りある。ひとつは,多面体を線画と考えて,隠れる部分だけを処理する方法で,Skeletonparadata() を用いる。\hyperlink{concatobj}{Concatobj()} の例を参照のこと。
+
+もうひとつは,面と考えて,面に隠れる部分を点線で描いたり,非表示にしたりする方法で,Phparadata() を用いる。 \hyperlink{phparadata}{Phparadata()}の例を参照のこと。
+
+\begin{description}
+
+ %-----------------Concatobj -----------------------------------------------
+\hypertarget{concatobj}{}
+\item[関数]Concatobj(リスト,option)
+\item[機能]いくつかのobjデータを結合する
+\item[説明]多面体の各面の頂点リストから面データ(頂点リストと面リスト)を作る。
+
+たとえば,\verb|Concatobj([[A,B,C],[A,B,D],[A,C,D],[B,C,D]]);| とすると,面データ[[A,B,C,D],[[1,2,3],[1,2,4],[1,3,4],[2,3,4]]] が返される。
+
+\vspace{\baselineskip}
+【例】4点A,B,C,Dを幾何点として作り,これを頂点とする四面体を描く。
+
+\begin{verbatim}
+Putpoint3d("A",2*[0,0,sqrt(3)]);
+Putpoint3d("B",2*[1,-1/sqrt(3),0]);
+Putpoint3d("C",2*[0,sqrt(3)-1/sqrt(3),0]);
+Putpoint3d("D",2*[-1,-1/sqrt(3),0]);
+phd=Concatobj([[A,B,C],[A,B,D],[A,C,D],[B,C,D]]);
+VertexEdgeFace("1",phd);
+Skeletonparadata("1");
+Letter3d([A3d,"ne","A",B3d,"sw","B",C3d,"se","C",D3d,"e","D"]);
+\end{verbatim}
+
+\begin{center} \input{Fig/concatobj} \end{center}
+
+<参考1>
+
+幾何点を作らないで四面体を描くのであれば,
+
+\begin{verbatim}
+a=2*[-1,-1/sqrt(3),0];
+b=2*[1,-1/sqrt(3),0];
+c=2*[0,sqrt(3)-1/sqrt(3),0];
+d=2*[0,0,sqrt(3)];
+phd=Concatobj([[a,b,c],[a,b,d],[a,c,d],[b,c,d]]);
+\end{verbatim}
+
+としてもよい。
+
+\vspace{\baselineskip}
+<参考2>
+四面体のような凸型多角形の場合は,CindyScriptの convexhull3d() 関数を用いて次のようにすることができる。面リストではなく頂点リストを与えるだけなので手間を省くことができる。
+
+\begin{verbatim}
+a=2*[0,0,sqrt(3)];
+b=2*[1,-1/sqrt(3),0];
+c=2*[0,sqrt(3)-1/sqrt(3),0];
+d=2*[-1,-1/sqrt(3),0];
+phd=convexhull3d([a,b,c,d]);
+\end{verbatim}
+
+\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+%-------------------VertexEdgeFace -----------------------------------------------
+\hypertarget{vertexedgeface}{}
+\item[関数]VertexEdgeFace(name,面データ,options)
+\item[機能]面データを用いて多面体を描く
+\item[説明]面データは,たとえば四面体ABCDの場合は,[[A,B,C,D],[[1,2,3],[1,2,4],[1,3,4],[2,3,4]]] である。
+
+4点A,B,C,Dをとっておき,このリストを引数に与えると,四面体が描かれる。
+
+生成されるプロットデータは,
+
+phv3d:頂点のリスト
+
+phe3d:辺のリスト
+
+phf3d:面リスト
+
+なお,それぞれ末尾にnameが付加される。
+
+\vspace{\baselineskip}
+【例】4点A,B,C,Dを取り,正四面体ABCDを描く
+\begin{verbatim}
+Putpoint3d("A",2*[-1,-1/sqrt(3),0]);
+Putpoint3d("B",2*[1,-1/sqrt(3),0]);
+Putpoint3d("C",2*[0,sqrt(3)-1/sqrt(3),0]);
+Putpoint3d("D",2*[0,0,sqrt(3)]);
+phd=[[A,B,C,D],[[1,2,3],[1,2,4],[1,3,4],[2,3,4]]];
+VertexEdgeFace("1",phd);
+\end{verbatim}
+ \begin{center} \input{Fig/vertex01} \end{center}
+面リストは,Congatobj() を使って作ることができる。陰線処理して描く場合も含め,\hyperlink{concatobj}{Concatobj()} の例を参照のこと。
+
+\vspace{\baselineskip}
+ %------------------Phparadata -----------------------------------------------
+\hypertarget{phparadata}{}
+\item[関数]Phparadata(name,name2,options)
+\item[機能]多面体を陰線処理して描く
+\item[説明]多面体のプロットデータをVertexEdgeFace() で作る。このプロットデータに対し,隠れている面(辺)を陰線処理して表示する。第1引数は通常のname,第2引数のname2は,VertexEdgeFace() で与えたnameと同じものとする。
+
+optionsは,全体の線種("dr,2"など)と,陰線の線種を"Hidden=線種" で指定できる。 初期設定では陰線は表示しない。
+
+\vspace{\baselineskip}
+\begin{layer}{150}{0}
+\putnotese{80}{-5}{ \input{Fig/phparadata04}}
+\end{layer}
+
+【例】四面体を描く。
+\begin{verbatim}
+Putpoint3d("A",2*[-1,-1/sqrt(3),0]);
+Putpoint3d("B",2*[1,-1/sqrt(3),0]);
+Putpoint3d("C",2*[0,sqrt(3)-1/sqrt(3),0]);
+Putpoint3d("D",2*[0,0,sqrt(3)]);
+phd=Concatobj([[A,B,C],[A,B,D],[A,C,D],[B,C,D]]);
+VertexEdgeFace("1",phd);
+Phparadata("1","1",["Hidden=do"]);
+\end{verbatim}
+
+なお,VertexEdgeFace() で四面体が描かれるが,Phparadata() により非表示になる。
+Figureボタンで描き出せば正しく出力されるので,Phparadata() を実行する前に画面上に表示して確認してからPhparadata() を実行するとよい。
+
+\vspace{\baselineskip}
+【例】切頂二十面体を描く。
+
+小林・鈴木・三谷による多面体データ\verb|polyhedrons_obj|を用いて,s06の切頂二十面体(サッカーボール型)を描く。 \verb|polyhedrons_obj| は KeTCindyシステムの data ディレクトリにあるので,Setdirectory() でカレントディレクトリを作業ディレクトリと切替ながら出力する。
+\begin{verbatim}
+Setdirectory( Dirhead+"/data/polyhedrons_obj");
+phd=Readobj("s06.obj",["size=3"]);
+Setdirectory(Dirwork);
+VertexEdgeFace("s06",phd);
+Phparadata("1","s06");
+\end{verbatim}
+VertexEdgeFace() の name は通常の "1" でもよい。その場合は,\verb|Phparadata("1","1");| とするが,わかりにくいので上のようにした。
+
+実行すると,Cinderellaの描画面は次のように頂点だけが描かれる。
+
+\vspace{\baselineskip}
+\begin{center}
+ \includegraphics[bb=0 0 726.04 365.02 , width=10cm]{Fig/phparadata01.pdf}
+\end{center}
+
+\vspace{\baselineskip}
+全体の線種と,陰線の線種を
+
+\verb|Phparadata("1","s06",["dr,2","Hidden=do"]);|
+
+で指定したのが下図右である。
+
+ \begin{center}\scalebox{0.8} {\input{Fig/phparadata02}} \hspace{5mm}\scalebox{0.8}{\input{Fig/phparadata03}} \end{center}
+
+【注意】
+
+polyhedrons obj のデータを使って,続けて異なる多面体を描きたい場合は注意が必要である。Readobj()だけを変更して別のデータを読めばよさそうであるが,前のデータが残っていてうまくいかない。VertexEdgeFace() のname を(したがって,Phparadata()の第2引数も)書き換えるか,作業フォルダ(fig) の中身を削除してから実行する。たとえば,上のコードで切頂二十面体を描いた後,正八面体(r02)を描こうとするならば,
+\begin{verbatim}
+Setdirectory( Dirhead+"/data/polyhedrons_obj");
+phd=Readobj("r02.obj",["size=3"]);
+Setdirectory(Dirwork);
+VertexEdgeFace("2",phd);
+Phparadata("1","2");
+\end{verbatim}
+のようにする。
+
+
+\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+%------------------- Nohiddenbyfaces -----------------------------------------------
+\hypertarget{nohiddenbyfaces}{}
+\item[関数]Nohiddenbyfaces(name,PD1,PD2,option1,option2)
+\item[機能]面に対し曲線を陰線処理する
+\item[説明]PD2で与えられた面に対し,曲線PD1の面に隠れている部分を陰線処理する。
+
+引数PD1を省略するとすべての曲線が対象となる。陰線処理された線は初期設定では点線で表される。この線種はoption2で変更できる。たとえば,["da"] とすると破線になる。["nodsip"] とすると,陰線は表示されない。option1は曲線全体のoptionであるので,option2 だけを指定する場合は,option1 として空リスト[ ] が必要である。
+option2では,"Eps=" で,陰線処理時の許容限界を設定できる。陰線処理がうまくいかないときは,この値を \verb|Eps=10^(-4)| のように変えてみるとよい。初期設定は \verb|Eps=10^(-2)|。
+
+\vspace{\baselineskip}
+【例】座標平面上に正四面体を描き,各軸と正四面体の辺を陰線処理する。(下図左)
+\begin{verbatim}
+Xyzax3data("","x=[-5,5]","y=[-5,5]","z=[-5,4]");
+Putpoint3d("A",2*[-1,-1/sqrt(3),0]);
+Putpoint3d("B",2*[1,-1/sqrt(3),0]);
+Putpoint3d("C",2*[0,sqrt(3)-1/sqrt(3),0]);
+Putpoint3d("D",2*[0,0,2*sqrt(6)/3]);
+phd=Concatobj([[A,B,C],[A,B,D],[A,C,D],[B,C,D]]);
+VertexEdgeFace("1",phd);
+Nohiddenbyfaces("1","phf3d1");
+\end{verbatim}
+
+\verb|VertexEdgeFace("1",phd);| によって,辺,頂点,面のプロットデータが作られる。\verb|phf3d1| は,面のプロットデータである。
+
+ここで,\verb|Nohiddenbyfaces("1","phe3d1","phf3d1",["dr,2"],["da"]); | とすると,座標軸は陰線処理されず,正四面体の辺(\verb|phe3d1|)だけが陰線処理されて破線で描かれる。四面体は太く描かれる。(下図右)
+
+\vspace{\baselineskip}
+\begin{center} \input{Fig/nohiddenbyfaces1}\input{Fig/nohiddenbyfaces2} \end{center}
+同様に,
+
+\verb|Nohiddenbyfaces("1","ax3d","phf3d1",[],["da"]);|
+
+とすれば,座標軸だけが陰線処理されて破線で描かれる。
+%\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+
+\end{description}
+
+%================== 3D曲面 ===============
+\subsubsection{曲面}
+
+曲面の描画には,ワイヤーフレームモデルとサーフェスモデルがある。ワイヤーフレームモデルは,曲面を編目で表すものであり,サーフェスモデルは編目のない面として,その輪郭線を描くものである。
+
+ \begin{center} \input{Fig/surfacemodel} \end{center}
+
+%\hspace{20mm}ワイヤーフレームモデル \hspace{10mm}サーフェスモデル
+
+KeTCindyでは,それぞれ次の関数を用いて描画する。
+\begin{tabbing}
+12345678901234567890123456789012345678\=\kill
+陰線処理をしないワイヤーフレームモデル \>Sf3data(name,form,options)\\
+サーフェスモデル \>Sfbdparadata(name,form,options)\\
+サーフェスモデルにワイヤーを描く \>Wireparadata(name,PD,form,n1,n2,options)
+\end{tabbing}
+ワイヤーフレームモデルで陰線処理をするためには,面のデータが必要なので,Sfbdparadata() で描画した後,Wireparadata()で描画する。
+
+また,サーフェスモデルの描画では,陰線処理に時間がかかるため,C言語の使用を前提としている。したがって,C言語を用いて描画を行う ExeccmdC() を併用する。
+
+引数の form は,方程式 と,変数の定義域を文字列のリストにしたものである。方程式のパターンは次の3通りがある。
+
+(1) $z=f(x,y)$
+
+ \hspace{5mm} 【例】式:$z=x^2-y^2$
+
+ \hspace{15mm} 定義域:$x=(-2,2) , y=(-2,2)$
+
+(2) $z=f(x,y),x=g(r,t),y=h(r,t)$
+
+ \hspace{5mm} 【例】式:$z=4-(x^2+y^2) , x=r\cos t , y=r\sin t$
+
+\hspace{15mm} 定義域:$r=(0,2) , t=(0,2\pi)$
+
+(3) $x=f(u,v),y=g(u,v),z=h(u,v),$
+
+ \hspace{5mm} 【例】式:$x=2\sin u \cos v , y=2\sin u \sin v, z=2\cos u $
+
+\hspace{15mm} 定義域:$u=(0,\pi) , v=(0,2\pi)$
+
+ここで,(2)と(3)は媒介変数型で,$x,y,z$ それぞれの式と,媒介変数2つの定義域からなっている。そのままでは区別がつかないので,引数として与えるときは,(3) の型には,識別文字として "p" を先頭に付加する。
+
+また,定義域については,開区間でとる場合と閉区間でとる場合がある。その区別を境界指定として"ewsn"で表す(ともに閉区間)。"ewsn" の意味は次のように考える。
+
+変数が $u,v$ のとき,$u,v$平面において,$a \leq u \leq b,c \leq v \leq d$ の矩形を考え,境界値を東西南北(ewsn)で示す。それぞれの文字が書かれたときは境界値を含む。
+
+ \begin{center} \input{Fig/ewsn} \end{center}
+
+この境界指定を最後に付加するが,省略することもでき,省略した場合は初期値の "ewsn" (閉区間)とする。ともに開区間とする場合は,"" とする。ただし,陰線処理をしない Sf3data() では,境界にも線を引くので,この指定は無効となる。
+
+具体的な例を示そう。
+
+次は,円錐の form である。(formは form data を短縮した fd がよく使われる)
+
+\vspace{\baselineskip}
+\verb|fd=["p","x=r*cos(t)","y=r*sin(t)","z=2*(2-r)","r=[1,2]","t=[0,2*pi]","ew"]|
+
+\vspace{\baselineskip}
+"ew" は $1 \leq r \leq 2$ であることを示す。したがって,円錐台の上面と底面が表示される。
+
+これを "e" とすると $1 <r \leq 2$ となり,上面が表示されない。
+
+また,これを "w" とすると $1 \leq r < 2$ となり,底面が表示されない。
+
+さらに,"ewn" あるいは "ews" としたり,指定を略して初期値の "ewsn" とすると,$t=(0,2\pi)$ の左右いずれかの値が含まれることになり,不要な境界線が現れる。
+
+\vspace{\baselineskip}
+\hspace{12mm}"ew" \hspace{25mm}"e" \hspace{25mm}"w" \hspace{25mm}"ewn"
+
+\input{Fig/frustumew} \input{Fig/frustume} \input{Fig/frustumw} \input{Fig/frustumewn}
+
+球面を描く場合はこの点で留意することがある。球面をサーフェスモデルで描くと単に円にしか見えないので,多くの場合はサーフェスモデルで描いた球面に Wireparadata() で陰線処理したワイヤーを入れることになるだろう。その場合,Wireparadata() では境界線には線を引かないので,境界指定を "s" として,境界線を引く必要がある。境界指定を "" とすると,経線が1本足りなくなるので注意されたい。具体例は,Wireparadata() に例示してある。
+
+\begin{description}
+
+%------------------ Sf3data -----------------------------------------------
+\vspace{\baselineskip}
+\hypertarget{sf3data}{}
+\item[関数]Sf3data(name,リスト,options)
+\item[機能]陰線処理なしの曲面をワイヤーフレームモデルで描く
+\item[説明]optionsは,メッシュの密度と解像度(各変数に対応する分割数)。
+
+メッシュ密度は,縦横で "Wire=[a,b]" で指定。初期値はa,bとも20。
+
+解像度は,"Num=[a,b]" で指定。初期値はa,bとも25。
+
+\begin{layer}{150}{0}
+\putnotese{88}{10}{ \input{Fig/saddle1}}
+\end{layer}
+
+\vspace{\baselineskip}
+【例】 $z=f(x,y)$ 型
+
+ $z=x^2-y^2$を定義域$x=[-2,2],y=[-2,2]$ で描画する。
+
+\verb| fd=["z=x^2-y^2","x=[-2,2]","y=[-2,2]"];|\\
+\verb| Sf3data("1",fd)|;
+
+メッシュの数を縦横とも10,解像度をx,yとも10にすると
+
+ メッシュ密度,解像度とも下げるので粗い描画となる。
+
+\verb|Sf3data("1",fd,["Num=[10,10]","Wire=[10,10]"]);|
+
+\vspace{\baselineskip}
+【例】$z=f(x,y),x=g(r,t),y=h(r,t)$型
+
+次図左
+
+\verb|fd=["z=4-(x^2+y^2)","x=r*cos(t)","y=r*sin(t)","r=[0,2]","t=[0,2*pi]"];|
+
+\verb|Sf3data("1",fd);|
+
+次図右
+
+\verb|fd=["z=sin(sqrt(abs(x^2+y^2)))","x=r*cos(t)","y=r*sin(t)",|
+
+\verb| "r=[0,3]","t=[0,2*pi]"];|
+
+\verb|Sf3data("1",fd);|
+
+\begin{center} \input{Fig/parabola} \input{Fig/sf3ddata3} \end{center}
+
+(3) $x=f(u,v),y=g(u,v),z=h(u,v),$ 型
+
+この場合,(2)と区別するために,"p" を先頭につけておく。
+
+ \vspace{\baselineskip}
+ 【例】球面
+
+ \verb|fd=["p","x=2*sin(u)*cos(v)","y=2*sin(u)*sin(v)","z=2*cos(u)",|
+
+\verb|"u=[0,pi]","v=[0,2*pi]",""];|
+\verb|Sf3data("1",fd);|
+
+\begin{center} \input{Fig/sf3ddata4} \end{center}
+
+\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+%------------------ Sfbdparadata -----------------------------------------------
+\hypertarget{sfbdparadata}{}
+\item[関数]Sfbdparadata(name,式,options)
+\item[機能]サーフェスモデルの輪郭線を描く
+\item[説明]この関数はデータを作るだけなので,表示するには ExeccmdC() を併用する。
+
+optionsは,"Wait=n","r","m",および線種。Wait の初期値は30。
+
+ "r","m"に関しては,
+
+\hspace{5mm} オプションなしまたは,”” のとき
+
+\hspace{10mm}i) データファイルがなければ,新しく作る
+
+\hspace{10mm}ii) データファイルが既にあればそれを読み込む
+
+\hspace{5mm}"m"のとき,強制的にデータファイルを作り直す。
+
+\hspace{5mm}"r" のとき,すでにあるデータファイルを読み込む。
+
+この処理は時間がかかるため,この関数を実行した状態で画面上のスライダやその他の点を動かそうとすると反応が悪くなる。そこで,Isangle() または Isptselected() を用いて,スライダの点を選択しているときはワイヤフレームモデルを描画するようにするとよい。
+
+なお,C言語の環境がない場合は,ExeccmdC() が使えないので,SfbdparadataR(name,式,optons1,optons2) を使う。options2には陰線の表示方法について "nodisp" または線種 を指定する。 初期設定は"nodisp" 。options2のみ指定するときは,options1に [""] (空文字)を書いておく。
+
+作図例は 次の ExeccmdC を参照のこと。
+
+%------------------- ExeccmdC -----------------------------------------------
+\vspace{\baselineskip}
+\hypertarget{execcmdc}{}
+\item[関数]ExeccmdC(name,options1,options2)
+\item[機能]曲面を表示する。戻り値は,対象にしたプロットデータのリスト。
+\item[説明]データが作成された曲面を表示する。
+
+options1 には"r","m", "Wait=n" と輪郭線の線種が指定できる。
+
+options2 には 軸の陰線について "nodisp" または線種が指定できる。 初期設定は "do"。
+
+options2だけを指定したい場合は,options1 を空リスト [ ] にする。
+
+\vspace{\baselineskip}
+
+【例】サドル面
+
+\begin{layer}{150}{0}
+\putnotese{85}{0}{ \input{Fig/sfbdpara01}}
+\putnotese{85}{45}{ \input{Fig/sfbdpara02}}
+\end{layer}
+
+陰線を消去して表示
+\begin{verbatim}
+fd=["z=x^2-y^2","x=[-2,2]","y=[-2,2]"];
+if(Isangle(),
+Sf3data("1",fd);
+,
+Startsurf();
+Sfbdparadata("1",fd);
+ExeccmdC("1",[],["nodisp"]);
+ );
+\end{verbatim}
+全体を実線で太めにして,陰線は初期設定の
+
+点線で表示。
+
+\verb|ExeccmdC()| を変更する。
+
+\verb|ExeccmdC("1",["dr,2"]);|
+
+\vspace{10mm}
+【例】放物面: 式を変更する。
+\begin{verbatim}
+fd=["z=4-(x^2+y^2)","x=R*cos(T)","y=R*sin(T)","R=[0,2]","T=[0,2*pi]","e"];
+\end{verbatim}
+
+ 陰線を消去(下図左):\verb|ExeccmdC("1",[],["nodisp"]);|
+
+ 陰線を破線で表示(下図右):\verb|ExeccmdC("1",[],["da"]);|
+\begin{center} \input{Fig/sfbdpara03}\input{Fig/sfbdpara04} \end{center}
+
+【例】曲面を2つ表示するときは,Sfbdparadata() の name は "1" と "2" にするが,まとめて \verb|ExeccmdC("1")| で表示できる。
+
+\begin{verbatim}
+fd=[
+ "p",
+ "x=r*cos(t)","y=r*sin(t)","z=2*(2-r)",
+ "r=[1,2]","t=[0,2*pi]","ew"
+];
+fd2=[
+ "p",
+ "x=r*cos(t)-3","y=r*sin(t)+3","z=2*(2-r)",
+ "r=[0,2]","t=[0,2*pi]","ew"
+];
+if(!ptselected(),
+ Startsurf();
+ Sfbdparadata("1",fd);
+ Sfbdparadata("2",fd2);
+ ExeccmdC("1");
+);
+\end{verbatim}
+
+\begin{center}
+\input{Fig/sfbdpara05}
+\end{center}
+
+\vspace{\baselineskip}
+【例】トーラスを描く:軸は非表示にしておく。
+
+\begin{layer}{150}{0}
+\putnotese{70}{-10}{ \input{Fig/wirepara5}}
+\end{layer}
+
+\begin{verbatim}
+ fd=["p","x=(2+cos(u))*cos(v)",
+ "y=(2+cos(u))*sin(v)","z=sin(u)",
+ "u=[0,2*pi]","v=[0,2*pi]","s"];
+ if(Ptselected(),
+ Sf3data("1",fd);
+,
+ Startsurf();
+ Sfbdparadata("1",fd);
+ Wireparadata("1","sfbd3d1",fd,12,12,[],["nodisp"]);
+ ExeccmdC("1",[],["nodisp"]);
+ );
+\end{verbatim}
+%\vspace{\baselineskip}
+
+
+\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+%-------------------Wireparadata-----------------------------------------------
+\hypertarget{wireparadata}{}
+\item[関数]Wireparadata(name,PD,式,整数,整数,optons)
+\item[機能]Sfbdparadataで作成した曲面について,陰線処理したワイヤーを描く
+\item[説明]PDは,第3引数の式を用いてSfbdparadata()で描いたサーフェスモデルのプロットデータ名。第4,第5引数は分割線の数。
+
+options には "r","m","Wait=n" が指定できる。
+
+Sfbdparadata() とペアで使い,そのあとに ExeccmdC で描画する。
+
+C言語の環境がない場合は,ExeccmdC() が使えないので,WireparadataR(name,PD,式,整数,整数,optons1,optons2) を使う。options2には陰線の表示方法について "nodisp" または線種 を指定する。 初期設定は"nodisp" 。options2のみ指定するときは,options1に [""] (空文字)を書いておく。
+
+\begin{layer}{150}{0}
+\putnotese{85}{5}{ \input{Fig/wirepara1}}
+\end{layer}
+
+%\vspace{\baselineskip}
+【例】
+
+サドル面
+
+\begin{verbatim}
+fd=["z=x^2-y^2","x=[-2,2]","y=[-2,2]"];
+if(Isangle(),
+Sf3data("1",fd);
+,
+Startsurf();
+Sfbdparadata("1",fd);
+Wireparadata("1","sfbd3d1",fd,4,5);
+ExeccmdC("1");
+);
+\end{verbatim}
+
+回転放物面:次を変更
+
+\begin{layer}{150}{0}
+\putnotese{85}{-5}{ \input{Fig/wirepara2}}
+\end{layer}
+\begin{verbatim}
+fd=["z=4-(x^2+y^2)","x=r*cos(t)",
+"y=r*sin(t)","r=[0,2]","t=[0,2*pi]","e"];
+Wireparadata("1","sfbd3d1",fd,5,7);
+\end{verbatim}
+\vspace{10mm}
+
+球面
+
+\begin{layer}{150}{0}
+\putnotese{80}{15}{ \input{Fig/wirepara3}}
+\end{layer}
+\begin{verbatim}
+ fd=["p","x=sin(u)*cos(v)","y=sin(u)*sin(v)","z=cos(u)",
+ "u=[0,pi]","v=[0,2*pi]","s"];
+ if(Ptselected(),
+ Sf3data("1",fd);
+ ,
+ Startsurf();
+ Sfbdparadata("1",fd);
+ Wireparadata("1","sfbd3d1",fd,12,12);
+ ExeccmdC("1");
+ );
+\end{verbatim}
+
+\vspace{8mm}
+
+
+%------------------- Crvsfparadata -----------------------------------------------
+
+\hypertarget{crvsfparadata}{}
+\item[関数]Crvsfparadata(name,PD1,PD2,式)
+\item[機能]曲面による曲線の陰線処理を行う。
+\item[説明]曲線PD1と曲面PD2について,PD1はPD2による陰線処理を行う。
+
+Crvsfparadata() のあとに ExeccmdC() でまとめて描画する。
+
+C言語が使えない場合は,CrvsfparadataR(name,PD1,PD2,式,options1,options2) を使う。
+options1 は分割数と誤差限界, options2 は陰線の線種。
+
+【例】回転放物面と座標軸,線分を陰線処理したデータを作って表示する。線分の端点A,Bはあらかじめ作図しておく。
+
+ExeccmdC()の 初期設定では陰線は点線で表示される。(下図左)
+\begin{verbatim}
+Xyzax3data("","x=[-5,5]","y=[-5,5]","z=[-5,5]");
+Putpoint3d(["A",[0,-3,0],"B",[0,3,3]]);
+Spaceline([A,B]);
+fd=["z=4-(x^2+y^2)","x=R*cos(T)","y=R*sin(T)","R=[0,2]","T=[0,2*pi]","e"];
+Startsurf();
+Sfbdparadata("1",fd);
+Crvsfparadata("1","AB3d","sfbd3d1",fd);
+Crvsfparadata("2","ax3d","sfbd3d1",fd);
+ExeccmdC("1");
+\end{verbatim}
+ExeccmdC()の options2を ["nodisp"] にすると,陰線は非表示になる。(下図右)
+\begin{verbatim}
+ExeccmdC("1",[],["nodisp"]);
+\end{verbatim}
+
+\begin{center}\scalebox{0.9}{ \input{Fig/crvsfparadata2}}\hspace{5mm} \scalebox{0.9}{\input{Fig/crvsfparadata1}} \end{center}
+
+戻り値を使うと,Changestyle3d() を使って陰線のスタイル(線種,色)を変えることができる。戻り値の内容は,コンソールに「readoutdata from template3D1.txt : 」として表示されるので,これをテキストエディタで開き,操作対象を決めればよい。たとえば,上の左図で,線分ABの陰線はリストの4番目の crvsfh3d1 なので,
+
+\begin{verbatim}
+ret=ExeccmdC("1");
+Changestyle3d(ret_4,["da","Color=red"]);
+\end{verbatim}
+
+とすると,赤の破線にすることができる。
+
+【例】球面で座標軸を陰線処理し,球面の陰線は非表示で表す。
+
+\begin{layer}{150}{0}
+\putnotese{70}{-5}{ \input{Fig/wirepara4}}
+\end{layer}
+
+\begin{verbatim}
+fd=["p","x=2*sin(u)*cos(v)",
+ "y=2*sin(u)*sin(v)",
+ "z=2*cos(u)",
+ "u=[0,pi]","v=[0,2*pi]",""];
+if(Isangle(),
+Sf3data("1",fd);
+,
+Startsurf();
+Sfbdparadata("1",fd);
+Wireparadata("1","sfbd3d1",fd,12,12,[],["nodisp]);
+Crvsfparadata("1","ax3d","sfbd3d1",fd);
+ExeccmdC("1");
+);
+\end{verbatim}
+
+\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+\end{description}
+%\newpage
+%================== 3Dプロットデータの操作 ===============
+\subsection{プロットデータの操作}
+
+\begin{description}
+%------------------- Datalist2d -----------------------------------------------
+\vspace{\baselineskip}
+\hypertarget{datalist}{}
+\item[関数]Datalist2d()
+\item[機能]画面上のプロットデータのリストを取得する
+\item[説明]画面に描かれているすべてのプロットデータのリストを返す。
+
+空間図形は,Cinderellaの画面上に射影し表示する。そのため,KeTCindy3Dは,空間におけるプロットデータと,画面上に表示するプロットデータの2つを作っている。Datalist2d()では,画面上に表示するプロットデータのリストを返す。
+
+\vspace{\baselineskip}
+【例】
+\begin{verbatim}
+Xyzax3data("","x=[-5,5]","y=[-5,5]","z=[-5,5]");
+Putpoint3d(["A",[0,-3,0],"B",[0,3,3]]);
+Spaceline("1",[A,B]);
+println("PD="+Datalist2d());
+\end{verbatim}
+とすると,コンソールにPD=[ax2d,AB2d] と表示される。ax2dは座標軸のプロットデータ ax3d に,AB2d は線分ABのプロットデータ AB3d に対応している。
+%------------------- Datalist3d -----------------------------------------------
+\vspace{\baselineskip}
+\hypertarget{datalist}{}
+\item[関数]Datalist3d()
+\item[機能]空間のプロットデータのリストを取得する
+\item[説明]空間に描かれているすべてのプロットデータのリストを返す
+
+\vspace{\baselineskip}
+【例】
+\begin{verbatim}
+Xyzax3data("","x=[-5,5]","y=[-5,5]","z=[-5,5]");
+Putpoint3d(["A",[0,-3,0],"B",[0,3,3]]);
+Spaceline("1",[A,B]);
+println("PD="+Datalist3d());
+\end{verbatim}
+とすると,コンソールにPD=[ax3d,AB3d] と表示される。
+
+\vspace{\baselineskip}
+
+%------------------- Changestyle3d -----------------------------------------------
+\hypertarget{changestyle3d}{}
+\item[関数]Changestyle3d(リスト,リスト)
+\item[機能]3Dプロットデータの属性を変更
+\item[説明]第1引数のプロットデータの属性を,第2引数に変更する。
+
+たとえば,補助線など,画面には描いてもTeXに書き出さない線を描画するときは,optionに["notex"] をつけるが,これをあとから付加したい場合に利用する。プロットデータはリストにできるので,複数のプロットデータの属性をまとめて変更することができて便利である。
+
+\vspace{\baselineskip}
+【例】4つの点で四面体の辺を描き,まとめて notex にする。点A,B,C,Dはとってあるものとする。
+\begin{verbatim}
+Spaceline("1",[A,B]);
+Spaceline("2",[A,C]);
+Spaceline("3",[B,C]);
+Spaceline("4",[A,D]);
+Spaceline("5",[B,D]);
+Spaceline("6",[C,D]);
+edges=apply(1..6,"sl3d"+text(#));
+Changestyle3d(edges,["notex"]);
+\end{verbatim}
+
+%------------------- Intersectcrvsf -----------------------------------------------
+\hypertarget{intersectcrvsf}{}
+\item[関数]Intersectcrvsf(name,PD,式)
+\item[機能]曲線と曲面の交点の座標を求める
+\item[説明]PDは曲線のプロットデータ。式は曲面の式。
+
+曲面は,Sfbdparadata()でデータを作成し,ExeccmdC()で表示しておく。交点の座標は,"intercrvsf"+name に代入される。コマンドの実行順序は次の例のようにする。
+
+\begin{layer}{150}{0}
+\putnotese{80}{40}{ \includegraphics[bb=0 0 149.51 121.51 , height=4cm]{Fig/Intersectcurvsf.pdf}}
+\end{layer}
+
+\vspace{\baselineskip}
+【例】回転放物面と線分の交点の座標を表示する。
+\begin{verbatim}
+Putpoint3d(["A",[0,-3,0],"B",[0,3,2]]);
+Spaceline("1",[A,B]);
+fd=[
+ "z=4-(x^2+y^2)","x=R*cos(T)","y=R*sin(T)",
+ "R=[0,2]","T=[0,2*pi]","e"
+];
+Startsurf();
+Sfbdparadata("1",fd);
+Intersectcrvsf("1","sl3d1",fd);
+ExeccmdC("1",[""]);
+println("Intersect="+intercrvsf1);
+Pointdata3d("1",intercrvsf1);
+\end{verbatim}
+実行すると,コンソールに
+
+\verb| Intersect=[[0,1.57,1.52],[0,-1.91,0.36]] |
+
+のように表示され,画面には交点が表示される。
+
+
+\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+%------------------- IntersectsgpL -----------------------------------------------
+\vspace{\baselineskip}
+\hypertarget{intersectsgpL}{}
+\item[関数]IntersectsgpL(点名,線分,面,描画方法)
+\item[機能]空間の線分(直線)と平面の交点を求める。
+\item[説明]引数の線分は線分の端点を "A-B" の形もしくは空間座標のリストで与える。
+
+引数の面は,面内の3点を "C-D-E" の形もしくは空間座標のリストで与える。
+
+戻り値は,[pt,flag1,flag2,val1,val2]
+
+pt:直線と平面の交点の座標。直線と平面が平行で交点が存在しない場合は空リスト[]
+
+flag1 : 交点が線分内にあれば true ,なければ false
+
+flag2 : 交点が面内にあれば true,なければ false
+
+val1,val2 : 線分についてのパラメータ値,平面についてのパラメータ値
+
+描画方法は,"put" または "i" , "e" 。
+
+\hspace{10mm} put : 幾何点を作る
+
+\hspace{10mm} i : 線分内にあれば点を描く
+
+\hspace{10mm} e :平面で交われば点を描く
+
+\vspace{\baselineskip}
+【例】交点の有無と戻り値
+
+次のスクリプトで\verb|p2| を変えたときの戻り値の \verb|flag1, flag2|
+
+\begin{verbatim}
+p1=[1,-1,0];
+p2=[0,0,1/2];
+p3=[0,1,0];
+p4=[-1,0,0];
+p5=[0,0,1];
+Spaceline("1",[p1,p2]);
+Spaceline("2",[p3,p4,p5,p3]);
+ret=IntersectsgpL("P",[p1,p2],[p3,p4,p5],"put");
+println("flag1="+ret_2+": flag2="+ret_3);
+\end{verbatim}
+
+\begin{layer}{150}{0}
+\putnotese{10}{15}{ \input{Fig/wire01}}
+\putnotese{60}{15}{ \input{Fig/wire02}}
+\end{layer}
+
+ \begin{verbatim}
+p2=[0,0,1/2]; p2=[-1,1,1];
+flag1=false : flag2=trueflag1=true : flag2=true
+\end{verbatim}
+
+\newpage%\vspace{55mm}
+\begin{layer}{150}{0}
+\putnotese{10}{15}{ \input{Fig/wire03}}
+\putnotese{60}{15}{ \input{Fig/wire04}}
+\end{layer}
+
+ \begin{verbatim}
+ p2=[1,2,1]; p2=[1,0,1/2];
+ flag1=true : flag2=false  flag1=false : flag2=false
+\end{verbatim}
+
+\vspace{30mm}
+【例】立方体を平面で切った図を描く。
+
+ いろいろな手順が考えられるが,ここでは次の手順で描く。
+
+ (1) 立方体の頂点をとる。1辺の長さをHnとし,軸上の点をPutaxes3d()でとる。
+
+(2) 切断面を決める点E,F,Gを辺上の自由点としてPutonseg3d()でとる。
+
+(3) E,F,Gを通る平面と,辺AC,DYとの交点をとり,M,Nとする。
+
+(4) 全体を多面体として面データを作って描画する。
+\begin{verbatim}
+Hn=3;
+Putaxes3d(Hn);
+Putpoint3d("A",[Hn,Hn,0]);
+Putpoint3d("B",[Hn,0,Hn]);
+Putpoint3d("C",[Hn,Hn,Hn]);
+Putpoint3d("D",[0,Hn,Hn]);
+Putonseg3d("E",X,B);
+Putonseg3d("F",Z,B);
+Putonseg3d("G",Z,D);
+IntersectsgpL("M","A-C","E-F-G","put");
+IntersectsgpL("N","D-Y","E-F-G","put");
+phd=Concatobj([[O,X,A,Y],[X,A,M,E],[A,Y,N,M],[Y,N,G,Z,O],
+[O,Z,F,E,X],[Z,F,G],[E,M,N,G,F]]);
+VertexEdgeFace("1",phd);
+Nohiddenbyfaces("1","phf3d1");
+\end{verbatim}
+スクリプトを実行後,点E,F,Gをドラッグして適当な位置の断面にする。
+
+\begin{center}\includegraphics[bb=0 0 713.04 327.02 , width=10cm]{Fig/IntersectsgpL0.pdf}\end{center}
+
+できた図は下図左。これに,次のスクリプトを追加すれば,断面上方の立方体の各辺も点線で描かれる。(下図右)
+\begin{verbatim}
+Spaceline("1",[E,B,F],["do"]);
+Spaceline("2",[B,C,M],["do"]);
+Spaceline("3",[C,D,N],["do"]);
+Spaceline("4",[D,G],["do"]);
+\end{verbatim}
+\begin{center} \input{Fig/IntersectsgpL1}\input{Fig/IntersectsgpL2} \end{center}
+
+\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+%------------------- Sfcutparadatacdy -----------------------------------------------
+\vspace{\baselineskip}
+\hypertarget{sfcutparadatacdy}{}
+\item[関数]Sfcutparadatacdy(name,面,曲面,options)
+\item[機能]平面と曲面の交線を求める。
+\item[説明]面の方程式はx,y,zの方程式,曲面は媒介変数表示で与える。
+
+\vspace{\baselineskip}
+【例】円錐を平面$y+2z=3$で切った断面を表示する。
+
+\begin{layer}{150}{0}
+\putnotese{70}{0}{\input{Fig/sfcut}}
+\end{layer}
+\begin{verbatim}
+fd=[
+ "p",
+ "x=r*cos(t)","y=r*sin(t)","z=2*(2-r)",
+ "r=[0,2]","t=[0,2*pi]","e"
+];
+Startsurf();
+Sfbdparadata("1",fd);
+Sfcutparadatacdy("1","y+2*z=3",fd);
+ExeccmdC("1");
+\end{verbatim}
+%\begin{center} \input{Fig/sfcut} \end{center}
+
+
+ %------------------Partcrv3d -----------------------------------------------
+\vspace{\baselineskip}
+\hypertarget{partcrv3d}{}
+\item[関数]Partcrv3d(name,始点,終点,PD)
+\item[機能]部分曲線のプロットデータを作成する
+\item[説明]曲線PDにおいて,始点から終点までのプロットデータを作成する。
+
+始点と終点は,プロットデータの番号もしくは曲線上にとった点の識別名で示す。
+
+\vspace{\baselineskip}
+【例】螺旋を描き一部分を太くする。Putoncurve3d() で螺旋上に点C,Dができるので,ドラッグして適当な位置に移動する。
+\begin{verbatim}
+Xyzax3data("","x=[-5,5]","y=[-5,5]","z=[-5,4]");
+Spacecurve("1","[2*cos(t),2*sin(t),0.2*t]","t=[0,4*pi]",["Num=100"]);
+Putoncurve3d("C","sc3d1");
+Putoncurve3d("D","sc3d1");
+Partcrv3d("1",C,D,"sc3d1",["dr,3"]);
+Letter([C,"n2","C",D,"n2","D"]);
+\end{verbatim}
+ここで,\verb|"sc3d1"| は,螺旋,\verb|"part3d1"| は,部分曲線のプロットデータである。
+
+\begin{center} \input{Fig/partcrv3d1} \end{center}
+
+\vspace{\baselineskip}
+【例】稲妻状の螺旋を点線で描き,その一部を実線にする。位置はプロットデータの番号で示す。小数にすると曲線を分割している線分の途中の位置になる。
+\begin{verbatim}
+Spacecurve("1","[2*cos(t),2*sin(t),0.2*t]","t=[0,4*pi]",["Num=10","do"]);
+Partcrv3d("1",3.3,8.5,"sc3d1");
+\end{verbatim}
+\begin{center} \input{Fig/partcrv3d2} \end{center}
+
+\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+%------------------Reflectdata3d-----------------------------------------------
+\hypertarget{reflectdata3d}{}
+\item[関数]Reflectdata3d(name , PDlist , list , options)
+\item[機能]PDの鏡映を作る
+\item[説明]第3引数のタイプにより,点に関する鏡映,直線に関する鏡映,面に関する鏡映を作る。戻り値は鏡映したプロットデータのリスト。
+
+\vspace{\baselineskip}
+【例】点A,B,C,D,Eを空間にとり,三角形ABCの鏡映を作る。
+
+\begin{verbatim}
+Putpoint3d(["A",[0,-2,0],"B",[2,-2,0],"C",[1,-2,2],"D",[1,0,1],"E",[1,0,0]]);
+Spaceline("1",[A,B,C,A]);
+\end{verbatim}
+
+で点をとり,三角形を描いておく。
+
+点Dに関する鏡映
+
+ \verb|Reflectdata3d("1",["sl3d1"],[D3d],["Color=blue","dr,2"]);|
+
+\hspace{20mm} \input{Fig/reflectdata3d01}
+
+直線DEに関する鏡映
+
+ \verb|Reflectdata3d("1",["sl3d1"],[D3d,E3d],["Color=blue","dr,2"]);|
+
+\hspace{20mm} \input{Fig/reflectdata3d02}
+
+平面BDEに関する鏡映
+
+\verb|Reflectdata3d("1",["sl3d1"],[D3d,E3d,B3d],["Color=blue","dr,2"]);|
+
+\hspace{20mm} \input{Fig/reflectdata3d03}
+
+
+ %------------------Reflectpoint3d-----------------------------------------------
+\vspace{\baselineskip}
+\hypertarget{reflectpoint3d}{}
+\item[関数]Reflectpoint3d(座標,リスト)
+\item[機能]点の鏡映点を求める
+\item[説明]第2引数のタイプにより,点に関する鏡映,直線に関する鏡映,面に関する鏡映のそれぞれの点の座標を返す。
+
+\vspace{\baselineskip}
+【例】点A,B,C,Dを空間にとり,点Aの鏡映点の座標を求める。
+
+点Bに関する鏡映点\verb|Reflectpoint3d(A3d,[B3d]);|
+
+直線BCに関する鏡映点\verb| Reflectpoint3d(A3d,[B3d,C3d]);|
+
+平面BCDに関する鏡映点\verb| Reflectpoint3d(A3d,[B3d,C3d,D3d]);|
+
+\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+ %------------------Rotatedata3d -----------------------------------------------
+\vspace{\baselineskip}
+\hypertarget{rotatedata3d}{}
+\item[関数]Rotatedata3d(name,PDリスト,vec,角度,options)
+\item[機能]プロットデータを回転
+\item[説明]プロットデータを,原点を始点とするベクトルvec 周りに回転する。複数のプロットデータをまとめて回転することができる。戻り値は回転したプロットデータのリスト。
+
+options として,中心点(vecの始点),線種を指定することができる。
+
+\vspace{\baselineskip}
+【例】コード例と結果を示す。
+\begin{verbatim}
+Xyzax3data("","x=[-5,4]","y=[-5,5]","z=[-5,4]",["a","O"]);
+Putpoint3d(["A",[0,-2,0],"B",[2,-2,0],"C",[1,-2,2],"D",[1,-2,3]]);
+Spaceline("1",[A,B,C,A]);
+Spaceline([C,D]);
+Rotatedata3d("1",["sl3d1","CD3d"],[0,0,1],pi/2,["dr,2"]);
+Letter([A,"s","A",B,"w","B",C,"ne","C",D,"ne","D"]);
+\end{verbatim}
+これを
+
+\verb|Rotatedata3d("1",["sl3d1","CD3d"],[0,0,1],pi/2,[[1,0,0],"dr,2"]);|
+
+とした場合が右図である。
+
+ \input{Fig/rotatedata3d01} \hspace{5mm} \input{Fig/rotatedata3d02}
+
+%\begin{flushright}\hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+ %------------------Rotatepoint3d -----------------------------------------------
+\vspace{\baselineskip}
+\hypertarget{rotatepoint3d}{}
+\item[関数]Rotatepoint3d(座標, vec , 角度, [点] )
+\item[機能]点の位置を回転する
+\item[説明]点をvecの周りに回転する。角度は弧度法で与える。
+
+第4引数に点を与えた場合,vecの始点が第4引数の位置になる。デフォルトは原点
+
+点Aを,$(0,-1,0)$に置いたときの記述例と戻り値
+
+\verb|Putpoint3d("A",[0,-1,0]);| \\
+\verb|Rotatepoint3d(A3d,[0,0,1],pi/2);|// 戻り値は [1,0,0]\\
+\verb|Rotatepoint3d(A3d,[0,0,1],pi/2,[1,1,0]);| // 戻り値は [3,0,0]\\
+
+ %------------------Scaledata3d -----------------------------------------------
+\vspace{\baselineskip}
+\hypertarget{scaledata3d}{}
+\item[関数]Scaledata3d(name , PDリスト , vec , [中心,options])
+\item[機能]PDを拡大/縮小する。
+\item[説明]点は空間座標,vec は3次元ベクトルで倍率を表す。
+
+中心とoptionsはリストで与える。
+
+\vspace{\baselineskip}
+【例】三角形と円を拡大/縮小する。
+
+\begin{verbatim}
+Putpoint3d(["A",[0,-2,0],"B",[2,-2,0],"C",[1,-2,2]]);
+Spaceline("1",[A,B,C,A]);
+Spacecurve("1","[cos(t)+1,sin(t)+1,1]","t=[0,2*pi]",["Num=100"]);
+Scaledata3d("1",["sl3d1","sc3d1"],[2,2,2],[[0,0,0],"dr,2"]);
+\end{verbatim}
+
+\hspace{20mm}\input{Fig/scaledata3d}
+%------------------Scalepoint3d-----------------------------------------------
+\vspace{\baselineskip}
+\hypertarget{scalepoint3d}{}
+\item[関数]Scalepoint3d(点,vec,中心)
+\item[機能]点の位置を拡大/縮小する。
+\item[説明]点は空間座標,vec は3次元ベクトルで与える。
+
+\vspace{\baselineskip}
+【例】コード例と結果を示す。
+
+\begin{verbatim}
+Putpoint3d(["A",[2,-1,2]]);
+pt=Scalepoint3d(A3d,[3,2,4],[1,1,1]);
+Putpoint3d(["B",pt]);
+\vspace{\baselineskip}
+\end{verbatim}
+
+点Bの位置は(4,-3,5)になる。
+
+%\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+%------------------ Translatedata3d -----------------------------------------------
+\vspace{\baselineskip}
+\hypertarget{translatedata3d}{}
+\item[関数]Translatedata3d(name,PD,平行移動量)
+\item[機能]空間プロットデータを平行移動
+\item[説明]PDで表される図形を,平行移動する。戻り値は平行移動したプロットデータのリスト。
+
+\vspace{\baselineskip}
+【例】曲線 sc3d1 をy軸方向に2だけ平行移動する。
+
+\verb|Translatedata3d("1",["sc3d1"],[0,2,0]);|
+
+結果として,もとの曲線と平行移動した曲線の2つが描かれる。
+
+\vspace{\baselineskip}
+【例】多面体の平行移動\\
+VertexEdgeFace() で描いた多角形はこの関数では平行移動できないので,面データを直接操作して平行移動を行う。
+
+たとえば,小林・鈴木・三谷による多面体データpolyhedrons objを用いて正八面体を描く場合,次のようにする。$y$軸方向に2だけ平行移動する場合である。
+
+\begin{verbatim}
+Setdirectory( Dirhead+"/data/polyhedrons_obj");
+phd=Readobj("r02.obj",["size=2"]);
+Setdirectory(Dirwork);
+dn=length(phd_1);
+repeat(dn,s,phd_1_s=phd_1_s+[0,2,0]);
+VertexEdgeFace("1",phd);
+\end{verbatim}
+\begin{center} \input{Fig/translate01} \end{center}
+
+%------------------Translatepoint3d( -----------------------------------------------
+\hypertarget{translatepoint3d}{}
+\item[関数]Translatepoint3d(座標,平行移動量)
+\item[機能]空間点を平行移動
+\item[説明]点を平行移動する。
+
+\vspace{\baselineskip}
+【例】点A(1,0,0) を(-1,1,1)だけ平行移動した点をBとする。点Aの空間座標は A3d で表される。
+\begin{verbatim}
+Putpoint3d(["A",[1,0,0]]);
+pt=Translatepoint3d(A3d,[-1,1,1]);
+Putpoint3d(["B",pt]);
+\end{verbatim}
+%\vspace{\baselineskip}
+\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+ \end{description}
+\newpage
+%その他==================================
+\subsection{その他}
+
+\begin{description}
+
+
+%------------------- Perpplane-----------------------------------------------
+\vspace{\baselineskip}
+\hypertarget{perpplane}{}
+\item[関数]Perpplane(点名,点,ベクトル,option)
+\item[機能]点を通り線分に垂直な平面上に基準点を2つとる
+\item[説明]引数の点名は,作成する2点で "A-B" の形
+
+第2引数は通る点の名称または座標
+
+第3引数は法線ベクトル
+
+optionは "put"で,2つの幾何点を作図する。optionがない場合は幾何点は作らず,無名の点のみを表示する。put以外の文字列を書いたときは無効な命令とし,何も作成されない。
+
+記述例を示すと
+
+ \verb|Perpplane("A-B","P",[1,1,1],"put");|
+
+点Pを通り,法線ベクトル(1,1,1)に垂直な平面上に点A,Bをとる。
+
+ \verb|Perpplane("A-B","P",P3d-O3d);|
+
+ 点Pを通り,線分OPに垂直な平面上に点A,Bをとる。
+ これらにおいて,PAとPBは垂直で,PA=PB=1 となる。
+
+\vspace{\baselineskip}
+【例】ベクトル $\vec{p}=(1,1,1)$ に垂直で点$(1,1,1)$を通る平面ABCDを描く。
+
+点A,B,C,Dは作図ツールで適当に取っておく。正確な位置はスクリプトで決める。
+
+\begin{layer}{150}{0}
+\putnotese{80}{8}{ \input{Fig/perpplane}}
+\end{layer}
+
+\begin{verbatim}
+Xyzax3data("","x=[-5,5]","y=[-5,5]","z=[-5,4]");
+Putpoint3d(["O",[0,0,0]]);
+Putpoint3d(["P",[1,1,1]]);
+Perpplane("E-F","P",P3d-O3d,"put");
+vec1=2*(E3d-P3d);
+vec2=2*(F3d-P3d);
+Putpoint3d(["A",P3d+vec1+vec2]);
+Putpoint3d(["B",P3d+vec1-vec2]);
+Putpoint3d(["C",P3d-vec1-vec2]);
+Putpoint3d(["D",P3d-vec1+vec2]);
+Spaceline("1",[A,B,C,D,A]);
+Arrowdata([O,P],["dr,2"]);
+Letter([P,"w","P",A,"ne","A",B,"e","B",C,"ws","C",D,"nw","D",]);
+Skeletonparadata("1");
+\end{verbatim}
+
+ %-----------------Perppt( -----------------------------------------------
+\hypertarget{perppt}{}
+\item[関数]Perppt(点名,点,点リスト,option)
+\item[機能]平面に下ろした垂線の足を求める
+\item[説明]第2引数の点から,第3引数の点リストで決まる平面に下した垂線の足を,第1引数の名前の点とする。
+
+オプションは次の通り。 初期設定は "draw"
+
+draw:点を打つ。幾何点は作らない
+
+put :幾何点を作る
+
+none:計算だけ行い,点は作図しない。
+
+\vspace{\baselineskip}
+【例】原点から点ABCを通る平面に下した垂線の足Hの座標を求める。
+
+ \verb|Perppt("H","O","A-B-C","none");| 表示はされない。
+
+ \verb|Perppt("H","O","A-B-C");| Hの位置に緑色の点が表示される。
+
+ \verb|Perppt("H","O","A-B-C","put");| 幾何点Hが作図される。
+
+いずれの場合も,Hの座標は変数H3d に代入される
+
+\vspace{\baselineskip}
+作図例
+\begin{verbatim}
+Xyzax3data("","x=[-5,5]","y=[-5,5]","z=[-5,4]");
+Putpoint3d("O",[0,0,0]);
+Putpoint3d("A",[3,0,0]);
+Putpoint3d("B",[0,3,0]);
+Putpoint3d("C",[0,0,3]);
+Perppt("H","O","A-B-C","put");
+Spaceline("1",[A,B,C,A]);
+Spaceline("2",[O,H]);
+Letter([A,"nw","A",B,"ne","B",C,"ne","C",O,"nw","O",H,"ne","H"]);
+\end{verbatim}
+
+%\vspace{\baselineskip}
+\begin{center}\scalebox{0.9}{ \input{Fig/perppt}} \end{center}
+
+\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+%\vspace{\baselineskip}
+
+ %------------------Projcoordpara -----------------------------------------------
+\hypertarget{projcoordpara}{}
+\item[関数]Projcoordpara(座標)
+\item[機能]投影座標を求める
+\item[説明]空間座標を平面に投影した座標を求める。
+
+戻り値の第1,第2要素はCinderellaの描画面のx,y座標。第3要素はxy平面に垂直なzの座標で.投影面からの(符号付)距離を表す。
+
+\vspace{\baselineskip}
+【例】\verb|Projcoordpara([3,1,2]);|
+
+ 戻り値は[-0.65,1.7,3.27] のようになる。(視点によって値は異なる)
+
+
+ %------------------Readobj-----------------------------------------------
+\vspace{\baselineskip}
+\hypertarget{readobj}{}
+\item[関数]Readobj(ファイル名)
+\item[機能]objファイルを読み込む。
+\item[説明]小林・鈴木・三谷による整面凸多面体のデータは\\
+\hspace*{20mm}\url{http://mitani.cs.tsukuba.ac.jp/polyhedron/}\\
+からダウンロードできる。\verb|polyhedrons_obj|を,例えば,ユーザホームのketcindy作業フォルダに入れておく。
+\begin{verbatim}
+Setdirectory(gethome()+"/ketcindy/polyhedrons_obj");
+polydt=Readobj("r02.obj");
+Setdirectory(Dirwork);
+\end{verbatim}
+これで,r02.obj データが,変数 polydt に代入される。
+
+オプションは "size=n"で,n倍したデータにする。負の数にすると上下が反転される。
+
+データはKeTCindyのdataフォルダの中にある。したがって,次のようなスクリプトを書く。読み込むのは一度だけなので, Draw スロットではなくInitialization スロットに置けばよいが,コードの可読性を高めるには Draw スロットでもよい。
+
+この多面体データは,頂点リストと面リストからなっているが,頂点リストは座標のリストなので,読み込んで表示するときには,点の名称を v1,v2,・・・ とする。
+
+読み込んだあとの使い方を含めて例を示す。
+
+\begin{layer}{150}{0}
+\putnotese{80}{0}{ \input{Fig/readobj}}
+\end{layer}
+
+
+\vspace{\baselineskip}
+【例】\verb|polydt|を用いて正八面体を描く
+
+
+\begin{verbatim}
+
+VertexEdgeFace("1",polydt);
+Nohiddenbyfaces("1","phf3d1");
+\end{verbatim}
+
+主なデータは次の通り。
+
+\vspace{\baselineskip}
+ \input{Fig/kobayashi}
+
+この他にn01〜n92まで整面凸多面体がある。
+
+%\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+
+%-------------------Xyzcoord-----------------------------------------------
+\vspace{\baselineskip}
+\hypertarget{xyzcoord}{}
+\item[関数]Xyzcoord(P.x,P.y,Pz.y)
+\item[機能]主副画面で決まる点の座標
+\item[説明]Cinderellaの描画面上の点が表す空間座標を求める
+
+点Pについて,主画面の点Pに対応するのが副画面のPzである。点Pの2次元座標はP.x,P.yで,Pzのy座標はPz.yで表される。これを引数として与えると,点Pの空間座標が返される。
+
+\vspace{\baselineskip}
+【例】点Aをドラッグして動かしたとき,Aの座標を求める。
+
+\verb|println(Xyzcoord(A.x,A.y,Az.y));|
+
+により,コンソールに座標が表示される。
+
+%-------------------Isangle -----------------------------------------------
+\vspace{\baselineskip}
+\hypertarget{isangle}{}
+\item[関数]Isangle()
+\item[機能]角度スライダ(視点スライダ)の選択判断
+\item[説明]角度スライダを選択しているときは true ,そうでないときは false を返す。
+
+曲面の描画・陰線処理には時間がかかるため,角度スライダを動かすと反応が悪くなる。そこで,角度スライダを選択しているときは曲面の描画をしないようにすることで反応がよくなる。
+
+\vspace{\baselineskip}
+【例】放物面の描画
+
+次のようにすると,スライダの点を選んでいる間はワイヤフレームモデルが描かれ,画面上の他の部分をクリックして選択状態が解除されると陰線処理された放物面が描かれる。
+\begin{verbatim}
+fd=[
+ "z=4-(x^2+y^2)",
+ "x=R*cos(T)","y=R*sin(T)",
+ "R=[0,2]","T=[0,2*pi]","e"
+];
+if(Isangle(),
+ Sf3data("1",fd);
+ ,
+ Startsurf();
+ Sfbdparadata("1",fd);
+ Crvsfparadata("1","ax3d","sfbd3d1",fd);
+ ExeccmdC("1");
+ );
+\end{verbatim}
+
+%------------------- Dist3d -----------------------------------------------
+\hypertarget{dist3d}{}
+\item[関数]Dist3d(a1,a2)
+\item[機能]空間の2点間の距離を返す
+\item[説明]引数a1,a2 は作図点の名称,空間点の名称のいずれでもよい。
+
+次の3通りの記法は同じ結果を返す。混在も可
+\begin{verbatim}
+Dist3d("A","B");
+Dist3d(A,B);
+Dist3d(A3d,B3d);
+\end{verbatim}
+
+%------------------- Embed -----------------------------------------------
+\vspace{\baselineskip}
+\hypertarget{embed}{}
+\item[関数]Embed(name,PDリスト,式,変数リスト)
+\item[機能]2D図形の空間内平面へ埋め込む
+\item[説明]第2引数は2Dの図形のプロットデータのリスト,式と変数は平面を記述する式と変数。平面は原点$vo$と2つの基本ベクトル $\overrightarrow{vx},\overrightarrow{vy}$を用いて,$vo+x \cdot \overrightarrow{vx}+y \cdot \overrightarrow{vy}$ の形で表すことができる。変数(基本ベクトルの係数)は$x,y$ でなく,$s,t$ でもよい。式,変数リストともに文字列にする。また,基本ベクトルは直交していなくてもよいし,長さが異なってもよいが,縦横同じスケールの直交座標系にするのがわかりやすいだろう。
+
+\vspace{\baselineskip}
+【例】正三角形と外接円を空間内の平面に埋め込む
+\begin{verbatim}
+Xyzax3data("","x=[-5,4]","y=[-10,4]","z=[-5,5]",["a","O"]);
+Spaceline("1",[[3,0,0],[3,6,0],[3,6,6],[3,0,6],[3,0,0]]);
+Defvar("vo=[3,3,3]");
+Defvar("vx=[0,1,0]");
+Defvar("vy=[0,0,1]");
+Putpoint3d(["A",[3,3,3]],["fix"]);
+Circledata("1",[[0,0],[2,0]],["nodisp"]);
+Listplot("1",[[0,2],[-sqrt(3),-1],[sqrt(3),-1],[0,2]],["nodisp"]);
+Embed("1",["cr1","sg1"],"vo+x*vx+y*vy","[x,y]");
+Pointdata("1",[A],["Size=3"]);
+\end{verbatim}
+ \begin{center} \input{Fig/embed01} \end{center}
+
+ここで,Embed()で引き渡す vo,vx,vy については,Rでの変数定義が必要なので(\ketcindy では行わない)Defvar() によって定義をしている。
+
+原点,基本ベクトルを,点を作図して次のようにすることもできる。この場合は Defvar() は不要。
+
+\begin{verbatim}
+Putpoint3d(["A",[3,3,3],"B",[0,1,0],"C",[0,0,1]]);
+Embed("1",["cr1","sg1"],"A3d+x*B3d+y*C3d","[x,y]");
+\end{verbatim}
+\begin{center}
+\includegraphics[bb=0 0 477.02 383.02 , width=6cm]{Fig/embed03.pdf}
+\end{center}
+
+この場合,点B,Cの座標がそのまま基本ベクトルとなっているが,原点Aに対して描画平面上にはB,Cがないので図がわかりにくい。図をわかりやすくするならば次のようにする。
+\begin{verbatim}
+Putpoint3d(["A",[3,3,3],"B",[3,4,3],"C",[3,3,4]]);
+Embed("1",["cr1","sg1"],"A3d+x*(B3d-A3d)+y*(C3d-A3d)","[x,y]");
+\end{verbatim}
+
+また,平面を記述するのに,平面の原点と法線ベクトルを用いて Perpplane() を用いると,基本ベクトルが生成されるので、これを利用することができる。次のスクリプトでは,Skeletonparadata() を用いて陰線処理もしている。
+\begin{verbatim}
+Xyzax3data("","x=[-5,5]","y=[-8,5]","z=[-5,5]");
+Putpoint3d(["O",[0,0,0],"P",[1,1,2]]);
+Perpplane("E-F","P",P3d-O3d,"put");
+vec1=3*(E3d-P3d);
+vec2=3*(F3d-P3d);
+Putpoint3d(["A",P3d+vec1+vec2]);
+Putpoint3d(["B",P3d+vec1-vec2]);
+Putpoint3d(["C",P3d-vec1-vec2]);
+Putpoint3d(["D",P3d-vec1+vec2]);
+Spaceline("1",[A,B,C,D,A]);
+Circledata("1",[[0,0],[2,0]],["nodisp"]);
+Listplot("1",[[0,2],[-sqrt(3),-1],[sqrt(3),-1],[0,2]],["nodisp"]);
+Embed("1",["cr1","sg1"],"P3d+x*(E3d-P3d)+y*(F3d-P3d)","[x,y]");
+Pointdata("1",[P],["Size=3"]);
+Skeletonparadata("1");
+\end{verbatim}
+ \begin{center} \input{Fig/embed02} \end{center}
+
+\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+%------------------- Parapt -----------------------------------------------
+\vspace{\baselineskip}
+\hypertarget{parapt}{}
+\item[関数]Parapt(座標)
+\item[機能]点の投影面での座標
+\item[説明]引数の空間座標に対応するCinderellaの描画面の座標を返す。
+
+\vspace{\baselineskip}
+【例】\verb|Parapt([2,1,5]);| により,点(2,1,5) が表示されている描画面の座標,たとえば [-0.52,3.27]が返される。
+%\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+\vspace{\baselineskip}
+%------------------- Invparapt -----------------------------------------------
+\hypertarget{invparapt}{}
+\item[関数]Invparapt(座標,PD)
+\item[機能]描画面上の座標に対応する曲線上の点の座標を返す
+\item[説明]Cinderellaの描画面上の座標を与えて,それに対応する曲線上の3次元座標を返す。
+
+空間内の曲線を作図すると,曲線の空間内のプロットデータとともに,描画面上に描くためのプロットデータも作られる。これを利用すると,描画面上の位置から曲線上の座標を求めることができる。
+
+\vspace{\baselineskip}
+【例】螺旋と線分を描いたとき,描画面上での交点(空間内の交点ではない)に対応する螺旋上の点の座標を求め部分曲線を描く。
+
+\begin{verbatim}
+Spaceline("1",[[-1,-1,-1],[1,2,3]]);
+Spacecurve("1","[2*cos(t),2*sin(t),0.2*t]","t=[0,4*pi]",["do"]);
+tmp=Intersectcrvs("sl2d1","sc2d1");
+p1=Invparapt(tmp_1,"sc3d1");
+p2=Invparapt(tmp_2,"sc3d1");
+Partcrv3d("1",p1,p2,"sc3d1");
+\end{verbatim}
+ \begin{center}\scalebox{0.8}{ \input{Fig/invparapt}} \end{center}
+
+ここで,sl2d1,sc2d1 は線分と螺旋の描画面上での(平面の)プロットデータである。Intersectcrvs() で平面上の交点の座標(複数あるのでリストが返る)を求め,Invparapt() で対応する螺旋上の点の座標を求めて部分曲線を描いている。実際に交わる点での部分曲線ではないことに注意。
+%------------------- Expr3d -----------------------------------------------
+\vspace{\baselineskip}
+\hypertarget{expr3d}{}
+\item[関数]Expr3d([位置, 方向, 文字列],option)
+\item[機能]文字列を表示する
+\item[説明]Expr() と同じ書式。「位置(座標)」だけ,空間座標にする。
+
+%------------------- Letter3d -----------------------------------------------
+\vspace{\baselineskip}
+\hypertarget{letter3d}{}
+\item[関数]Letter3d([位置, 方向, 文字列],option)
+\item[機能]文字列を表示する
+\item[説明]Letter() と同じ書式。「位置(座標)」だけ,空間座標にする。
+
+\vspace{\baselineskip}
+【例】三角錐ABCDを描いて,BCの中点に点Mを取ってA,Dと結ぶ。
+
+\begin{layer}{150}{0}
+\putnotese{90}{0}{ \input{Fig/letter3d}}
+\end{layer}
+\begin{verbatim}
+Putpoint3d("A",2*[0,0,2*sqrt(6)/3]);
+Putpoint3d("B",2*[1,-1/sqrt(3),0]);
+Putpoint3d("C",2*[0,sqrt(3)-1/sqrt(3),0]);
+Putpoint3d("D",2*[-1,-1/sqrt(3),0]);
+Putpoint3d("M",(B3d+C3d)/2);
+phd=Concatobj([[A,B,C],[A,B,D],[A,C,D],[B,C,D]]);
+VertexEdgeFace("1",phd);
+Spaceline("1",[A,M,D]);
+Nohiddenbyfaces("1","phf3d1");
+Letter3d([A3d,"ne","A",B3d,"w","B",C3d,"se","C",D3d,"e","D"]);
+Letter3d(M3d,"sw","M",["Color=blue"]);
+\end{verbatim}
+\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+
+%----------------Getangle --------------------------------------------
+\vspace{\baselineskip}
+\hypertarget{getangle}{}
+\item[関数]Getangle()
+\item[機能]回転角の取得
+\item[説明]スライダで設定できる回転角(視点の位置)TH と FI を取得する。これは,スライダの左側に表示されている値である。戻り値は,リスト [TH,FI] で,角は度数法で表される。なお,内部変数は,THETAとPHIで,弧度法で表されている。
+
+回転角の設定については,\hyperlink{setangle}{回転角の設定}を参照のこと。
+
+\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+\end{description}
+
+\newpage
+%KeTJS==================================
+\hypertarget{ketjs}{}
+\section{KeTJS}
+
+\subsection{CindyJSとKeTJS}
+
+CindyJS は,Cinderellaの作品をHTMLにしてWeb上で動かせるようにしたものである。Cinderellaのファイルメニューには,「CindyJSに書き出す」があり,これにより,HTML ファイルができる。できたHTMLファイルをそのままダブルクリックすると,JavaScript で記述されたプログラムが走る。
+
+現在のところはCinderellaと完全互換ではなく,Web上ではMouseスロットなどが使えなかったり,線種が指定できなかったりする。それでも,自作のボタンは有効なので,これでWeb上のアプリケーションを作ることができる。
+
+KeTJSでは,CindyScriptにはないKeTCindyの関数(コマンド)を使って,作図アプリケーションを作ることができる。CindyJSの拡張版ともいえる。
+
+ただし,CindyJSがCinderellaと完全互換でないように,KeTJSもKeTCindyと完全互換ではない。たとえば,いまのところ空間図形は描けない。それでも,KeTCindyのシステムが入っていない環境でもWebブラウザで教材が使えることのメリットは大きいだろう。なお,HTMLなので,TeXのファイルへの書き出し機能はない。
+
+KeTJSでHTMLを作成するには,いったんCinderellaのファイルメニューから「CindyJSに書き出す」を選んでHTMLを作成した後,「KeTJS」ボタンをクリックする。「CindyJSに書き出す」で書き出されたHTMLは,実行のための環境設定しか書かれていない。これに,作図プログラムを追加するのが「KeTJS」「KeTJSoff」ボタンである。この2つのボタンの違いについては,次節「動作環境」を参照のこと。
+
+また,ひな形として,template2slide.cdy または samplesフォルダの s16 に入っているものを使うとよい。「KeTJS」「KeTJSoff」ボタンが設定してある。
+
+\subsection{KeTJSの動作環境}
+
+Cinderellaのファイルメニューから「CindyJSに書き出す」を選ぶと,CSSとランタイムへのリンク,およびJavaScriptのコードが書かれたHTMLファイルが書き出される。CSSとランタイムへのリンクは
+
+\begin{verbatim}
+<link rel="stylesheet" href="https://cindyjs.org/dist/v0.8/CindyJS.css">
+<script type="text/javascript" src="https://cindyjs.org/dist/v0.8/Cindy.js">
+</script>
+\end{verbatim}
+
+となっている。つまり,Web上からランタイム Cindy.js をオンラインでダウンロードしてJavaScriptを動かすことになる。そのため,ファイルをブラウザで開いたときに少し時間がかかる。また,インターネットに接続できないと実行できない。
+
+このCSSとランタイムは,自分のコンピュータに置くことができ,KeTCindyでは,KeTCindyのライブラリとともに,ketcindyjsというフォルダ内に入っている。
+
+また,JavaScriptのコードの方は,これだけではKeTCindyのコマンドでの作図はできない。
+
+そこで,KeTJS ボタンをクリックすると,リンク先はそのままで,JavaScriptのコードを追加して,ファイル名に json を追加したHTMLファイルを作る。
+
+また,KeTJSoff ボタン(オフラインで使う)をクリックすると,ランタイムをダウンロードして,Cinderellaのファイルと同じフォルダに ketcindyjs フォルダを作る。リンク先は次のようにketcindyjsに変え,JavaScriptのコードを追加して,ファイル名に jsoffL を追加したHTMLファイルを作る。
+
+\begin{verbatim}
+<link rel="stylesheet" href="ketcindyjs/CindyJS.css">
+<script type="text/javascript" src="ketcindyjs/Cindy.js"></script>
+\end{verbatim}
+
+このとき,関数 \verb|Setketcindyjs() | で,オプションを \verb|"Local=n"| とすると,ランタイムとして,kettex の中にある ketcindyjs を使う。このときはファイル名に jsoff を追加する。
+
+このときのリンク先は,Windowsの場合は
+
+\begin{verbatim}
+<link rel="stylesheet" href="file:///C:/kettex/texlive/texmf-dist/
+scripts/ketcindy/ketcindyjs/CindyJS.css">
+<script type="text/javascript" src="file:///C:/kettex/texlive/
+texmf-dist/scripts/ketcindy/ketcindyjs/Cindy.js"></script>
+\end{verbatim}
+
+Macの場合は
+
+\begin{verbatim}
+<link rel="stylesheet" href="file:////Applications/kettex/texlive/
+texmf-dist/scripts/ketcindy/ketcindyjs/CindyJS.css">
+<script type="text/javascript" src="file:////Applications/kettex/
+texlive/texmf-dist/scripts/ketcindy/ketcindyjs/Cindy.js"></script>
+\end{verbatim}
+
+である。
+
+注)MacOS 10.14 Mojave の場合,Applicationsへのパスが通らないことがある。(2019年2月16日現在)その場合は,\verb|Setketcindyjs() | のオプションを \verb|"Local=n"| としない。
+
+\vspace{\baselineskip}
+{\bf ファイル名について}
+
+Cinderellaのファイルメニューから「CindyJSに書き出す」ときのファイル名は,初期設定では作図中のファイル名と同じ。このファイル名は書き出すときに指定できる。
+
+「KeTJS」ボタンで書き出すときのファイル名は,\verb|Setfiles()| でファイル名が指定されていなければ,作図中のファイル名と同じ。これが「CindyJSに書き出す」で書き出したときのファイル名で同じでないと,KeTJSのHTMLは作成されない。したがって,次のいずれかでファイル名を決める。
+
+(1) ファイル名は作図中のCinderellaのファイル名と同じにする。\\
+  このときは,\verb|Setfiles()| を使わない。
+
+(2) 作図中のCinderellaのファイル名と別の名前にする。\\
+  このときは,\verb|Setfiles("filename")| を使い,CindyJSに書き出すときに\\
+   \verb|"filename"| で書き出す。
+
+%======KeTJSの設定============================
+
+\subsection{KeTJSの設定}
+
+\begin{description}
+
+\hypertarget{setketcindyjs}{}
+\item[関数]Setketcindyjs(options)
+\item[機能] KeTJSの設定
+\item[説明] オプションを設定しない場合( Setketcindyjs() )は,初期値が使われる。
+
+オプションは次の通り。
+
+\begin{tabbing}
+012345678\=3433778901234567\=890090666612345\=\kill
+Local \> y/n \>動作環境の設定。 \>初期値は y\\
+Scale \> 実数 \> 拡大・縮小 \>初期値は 1\\
+Nolabel \> 点のリスト \> ラベルを表示しない点を指定する。"No"だけでも可。\\
+Color \> 色名またはコード\> 背景色の指定。初期値はCinderellaの画面の色。\\
+\end{tabbing}
+【例】すべて設定するとき,次のように記述する。
+
+\verb| Setketcindyjs(["Local=n","Scale=1.5","No=[A,B]","Color=[0.2,0,0,0]"]) |
+
+\vspace{\baselineskip}
+注1)Cinderellaの画面に背景の方眼が描かれているとき,「CindyJSに書き出す」で,この方眼も表示される。方眼を消したい場合は,画面下の「グリッドを描く」ツールで非表示にしておく。
+
+注2)「CindyJSに書き出す」で書き出すときの範囲は,ウィンドウ全体である。NE,SWの範囲ではない。2点NE,SWは\verb| Setketcindyjs(["No=[NE,SW]" | で非表示になるが,NE,SEの範囲を広くとっておき,ウィンドウサイズをこれより小さくすれば \verb|"No=[NE,SW]"| オプションを使わなくても表示されずにすむ。
+
+注3)HTMLなので,画面に説明文などを表示したい場合は,HTMLファイルを開き,下の方の \verb|<body>| と \verb|</body>| の間,\verb|<div id="CSCanvas"></div>| の前後に書けば表示される。改行などは,HTMLのタグを用いる。
+
+\vspace{\baselineskip}
+\hypertarget{setketcindy}{}
+\item[コメント化] no ketjs
+\item[機能] KeTJSへの書き出しの有無を指定
+\item[説明] コマンドの末尾に \verb|//| に続いて書くと,その行はKeTJSに出力しない。
+ブロック単位で非出力にするには,ブロックを \verb|//no ketjs on|,\verb|//no ketjs off| ではさむ。
+
+【例】次のスクリプトは,いずれも画面上では四角形ABCDと対角線AD,BCを描いている。
+
+\begin{verbatim}
+Listplot("1",[A,B,C,D,A]);
+Listplot("2",[A,C]);
+Listplot("3",[B,D]);// no ketjs
+\end{verbatim}
+
+この場合,HTMLでは対角線BDは描かれない。
+
+\begin{verbatim}
+Listplot("1",[A,B,C,D,A]);
+// no ketjs on
+Listplot("2",[A,C]);
+Listplot("3",[B,D]);
+// no ketjs off
+\end{verbatim}
+
+この場合,対角線は2本とも描かれない。
+
+\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+\end{description}
+
+
+\newpage
+%付録==================================
+\section{付録}
+
+\subsection{用語解説}
+Cinderellaで使っている用語に次のものがある。
+\begin{tabbing}
+1234567890123\=456789890123456789012\=34567890123\=\kill
+インシデント\>点が曲線(直線)上に乗っている状態を表す。\\
+\>曲線上に点をとるとインシデントになり,ドラッグしたとき曲線上だけを動く。\\
+\>インシデントの状態を変えるには,「点の取り付け/取り外し」ツールを使う。\\
+幾何要素\>Cinderellaの作図ツールで作図した点や直線などの要素\\
+インスペクタ\>幾何要素の大きさや色などの属性を管理するウィンドウ。\\
+幾何点\>幾何要素としての点。マウスドラッグで動かすことができる。\\
+\>CindyscriptやKeTCindyのスクリプトで取った点は幾何要素にならないことがある。\\
+自由点\>マウスドラッグで任意に動かすことのできる点。\\
+固定点\>マウスドラッグで移動することのできない点\\
+\>2曲線の交点などではない単独の点の場合,インスペクタで点を固定できる。\\
+スナップ\>マウスポイントが格子点の近くに来ると格子点上にぴったり移動する。\\
+\>Cinderellaの画面の下方ツールのうち,磁石アイコンによりこのモードになる。\\
+ \end{tabbing}
+
+\hypertarget{geometrytool}{}
+\subsection{Cinderellaの作図ツール}
+ \begin{tabbing}
+1234567890123456789890123456789012\=34567890123\=\kill
+\includegraphics[bb=0 0 6.48 5.04 , width=0.6cm]{Fig/move.pdf}動かすモードにする \>:幾何要素を選択して動かす。これが標準状態\\
+\includegraphics[bb=0 0 6.48 5.04 , width=0.6cm]{Fig/single-add.pdf}点を加える \>:クリックして点を作る\\
+\includegraphics[bb=0 0 6.48 5.04 , width=0.6cm]{Fig/multi-add-line.pdf}直線を加える \>:2点間をドラッグする\\
+\includegraphics[bb=0 0 6.48 5.04 , width=0.6cm]{Fig/segment.pdf}線分を加える \>:2点間をドラッグする\\
+\includegraphics[bb=0 0 6.48 5.04 , width=0.6cm]{Fig/middle.pdf}中点を加える \>:2点間をドラッグする\\
+\includegraphics[bb=0 0 6.48 5.04 , width=0.6cm]{Fig/intersection.pdf}交点を加える \>:2曲線を順にクリック\\
+\includegraphics[bb=0 0 6.48 5.04 , width=0.6cm]{Fig/multi-add-parallel.pdf}平行線を加える \>:直線上から通る点へドラッグ\\
+\includegraphics[bb=0 0 6.48 5.04 , width=0.6cm]{Fig/multi-add-perp.pdf}垂線を加える \>:直線上から通る点へドラッグ\\
+\includegraphics[bb=0 0 6.48 5.04 , width=0.6cm]{Fig/bisector.pdf}角の二等分線を加える \>:2直線を順にクリック\\
+\includegraphics[bb=0 0 6.48 5.04 , width=0.6cm]{Fig/multi-add-circle.pdf}円を加える \>:中心から半径分ドラッグ\\
+\includegraphics[bb=0 0 6.48 5.04 , width=0.6cm]{Fig/circle-by-radius.pdf}半径つき円を加える \>:中心から半径分ドラッグ\\
+\includegraphics[bb=0 0 6.48 5.04 , width=0.6cm]{Fig/ellipse-by-foci.pdf}焦点と通る点で決まる楕円 \>:焦点と通る点を順にクリック\\
+\includegraphics[bb=0 0 6.48 5.04 , width=0.6cm]{Fig/hyperbola-by-foci.pdf}焦点と通る点で決まる双曲線 \>:焦点と通る点を順にクリック\\
+\includegraphics[bb=0 0 6.48 5.04 , width=0.6cm]{Fig/parabola-by-foci.pdf}焦点と準線で決まる放物線 \>:焦点と準線を順にクリック\\
+\includegraphics[bb=0 0 6.48 5.04 , width=0.6cm]{Fig/polygon.pdf}多角形を加える \>:多角形の頂点を順にクリック\\
+\includegraphics[bb=0 0 6.48 5.04 , width=0.6cm]{Fig/angle-mark.pdf}角に印をつける \>:2直線を順にクリック\\
+\includegraphics[bb=0 0 6.48 5.04 , width=0.6cm]{Fig/angle.pdf}角度を測る \>:2直線を順にクリック\\
+\includegraphics[bb=0 0 6.48 5.04 , width=0.6cm]{Fig/delete.pdf}選択した要素を消去する \>:選択しておいてツールをクリック\\
+\includegraphics[bb=0 0 6.48 5.04 , width=0.6cm]{Fig/select-points.pdf}点をまとめて選択する \>:点がすべて選択される\\
+\includegraphics[bb=0 0 6.48 5.04 , width=0.6cm]{Fig/select-lines.pdf}線分をまとめて選択する \>:線分がすべて選択される\\
+ \end{tabbing}
+
+ \begin{tabbing}
+1234567890123456789890123456789012\=34567890123\=\kill
+画面ツール(下のツールバー)\\
+\includegraphics[bb=0 0 6.48 5.04 , width=0.6cm]{Fig/translate-view.pdf}原点を移動する \>:画面上の任意の位置でドラッグする\\
+\includegraphics[bb=0 0 6.48 5.04 , width=0.6cm]{Fig/zoom-in.pdf}矩形領域を画面サイズに拡大 \>:ドラッグしてできる矩形で領域を選択する\\
+\includegraphics[bb=0 0 6.48 5.04 , width=0.6cm]{Fig/zoom-out.pdf}画面を矩形領域サイズに縮小 \>:どっらっぐしてで切る矩形で領域を選択する\\
+\includegraphics[bb=0 0 6.48 5.04 , width=0.6cm]{Fig/snap.pdf}格子点にスナップする \>:軸と方眼を表示しスナップモードにする\\
+\includegraphics[bb=0 0 6.48 5.04 , width=0.6cm]{Fig/grid-more.pdf}\includegraphics[bb=0 0 6.48 5.04 , width=0.6cm]{Fig/grid-less.pdf}グリッドを粗く / 細かくする\\
+ \end{tabbing}
+
+\hypertarget{colorcodelist}{}
+\subsection{色名とカラーコード一覧}
+\vspace{\baselineskip}
+\scalebox{0.9}{\input{Fig/colortable}}
+
+\newpage
+%--------------点の作図についての比較表--------------------------------------
+\hypertarget{mkpttable}{}
+\subsection{点の作図についての比較表}
+\vspace{\baselineskip}
+\scalebox{0.9}{\input{Fig/mkpttable}}
+
+注) Intersectcrvsf は戻り値ではなく,プロットデータを使う。
+
+\newpage
+%関数一覧==================================
+\hypertarget{functionlist}{}
+\section{関数一覧}
+\hyperlink{index}{【目次】に戻る}
+
+\begin{tabbing}
+12345678901234567890123456789012345678\=\kill
+【設定・定義】\\
+\hyperlink{addax}{Addax(0/1)}\>座標軸を描くかどうかを定める\\
+\hyperlink{addpackage}{Addpackage(package)}\>プレビュー用のパッケージを追加\\
+\hyperlink{changework}{Changework(パス)}\>作業ディレクトリを変更する\\
+\hyperlink{deffun}{Deffun(関数名 , 定義list )}\>関数を定義する\\
+\hyperlink{definecolor}{Definecolor(色名 , 定義list )}\>ユーザー定義色の設定\\
+\hyperlink{defvar}{Defvar(文字列)} \>変数を定義する\\
+\hyperlink{drwxy}{Drwxy()} \>座標軸を先に描く\\
+\hyperlink{fontsize}{Fontsize(記号)}\>フォントサイズを設定する\\
+\hyperlink{ketinit}{Ketinit(options)}\>\ketcindy を初期化する\\
+\hyperlink{initglist}{Initglist} \> ketlib スロットの描画データを追加する\\
+\hyperlink{ptsize}{Ptsize(数)} \>表示する点の大きさを設定する\\
+\hyperlink{setarrow}{Setarrow(size,angle,pos,cut,style}\>矢線の形状を設定する\\
+\hyperlink{setax}{Setax(list)}\>座標軸の書式を設定する\\
+\hyperlink{setcolor}{Setcolor(color,options)}\>Windispgでの描画色を設定する\\
+\hyperlink{setfiles}{Setfiles(filename)}\>出力するファイル名を設定する\\
+\hyperlink{setparent}{Setparent(filename)}\>Parentで出力するファイル名を設定する\\
+\hyperlink{setmarklen}{Setmarklen(数)}\>軸の目盛の長さを設定する\\
+\hyperlink{setorigin}{Setorigin(座標)}\>表示する座標軸の原点の位置を設定する\\
+\hyperlink{setpen}{Setpen(数)}\>線の太さを設定する\\
+\hyperlink{setpt}{Setpt(数)}\>表示する点の大きさを設定する\\
+\hyperlink{setscaling}{Setscaling(数)}\>縦方向の倍率を設定する\\
+\hyperlink{setunitlen}{Setunitlen(数)}\>単位長を設定する\\
+\hyperlink{setwindow}{Setwindow()}\>描画領域を設定する\\
+\hyperlink{usegraphics}{Usegraphics()} \>グラフィクスパッケージを\verb|"pict2e"| に変更する\\
+【描画】\\
+\hyperlink{drawfigures}{Drawfigures(name ,figlist,optionlist)} \>複数のデータのスタイルをリストで与えて描画する\\
+%\hyperlink{addgraph}{Addgraph(name ,プロットデータ)} \>ユーザー定義のプロットデータを描画する\\
+\hyperlink{anglemark}{Anglemark(点list, options)}\>角の印を入れる\\
+\hyperlink{setarrow}{Setarrow(options)}\>矢線をスタイルを設定する\\
+\hyperlink{arrowdata}{Arrowdata(name.[始点,終点],options)}\>2点間を結ぶ矢線を描く\\
+\hyperlink{arrowhead}{Arrowhead(点,方向,options)}\>点に矢じりだけを描く\\
+\hyperlink{bezier}{Bezier(name, list,list,options )} \>単独のベジェ曲線を描く\\
+\hyperlink{beziersmooth}{Beziersmooth(name , list,options )} \>なめらかなベジェ曲線を描く。その1\\
+\hyperlink{beziersym}{Beziersym(name , list,options )} \>なめらかなベジェ曲線を描く。その2\\
+\hyperlink{bowdata}{Bowdata(点list,options)}\>弓形を描く\\
+\hyperlink{bspline}{Bspline(name,list,options )} \>2次 Bスプライン曲線を描く\\
+\hyperlink{changestyle}{Changestyle(PD list, options)} \>描画オプションを変更する\\
+\hyperlink{circledata}{Circledata(name,点list,options)}\>円または正多角形を描く\\
+\hyperlink{crspline}{CRspline(name,list,options )} \>単独のCatmull-Rom スプライン曲線を描く\\
+\hyperlink{deqplot}{Deqplot(name,式,変数名,初期値,options])}\>微分方程式の解曲線を描く\\
+\hyperlink{dotfilldata}{Dotfilldata(name , 方向, PD , options)}\>領域に点を敷き詰める\\
+\hyperlink{drawsegmark}{Drawsegmark(name,list,options)}\>線分に印をつける\\
+%\hyperlink{drwpt}{Drawpoint([点,options])}\>点を表示する\\
+%\hyperlink{drwpt}{Drwpt([点,options])}\>点を表示する\\
+\hyperlink{ellipseplot}{Ellipseplot(name,list,str,options)}\>楕円を描く\\
+\hyperlink{enclosing}{Enclosing(name , [位置,方向,数式])}\>複数の曲線から閉曲線を描く\\
+\hyperlink{expr}{Expr([座標,位置,文字列],options)}\>\TeX 数式を書く\\
+\hyperlink{exprrot}{Exprrot(位置,向き,文字列)}\>傾いた\TeX 数式を書く\\
+\hyperlink{fourierseries}{Fourierseries(name,係数,周期,項数)}\>フーリエ級数を描く\\
+\hyperlink{framedata}{Framedata(name , list)}\>矩形を描く\\
+\hyperlink{hatchdata}{Hatchdata(name , 方向, PD , options)}\>領域に斜線を引く\\
+\hyperlink{htickmark}{Htickmark([横座標 , 方向 , 文字])}\>横軸に目盛りを描く\\
+\hyperlink{hyperbolaplot}{Hyperbolaplot(name,list,str,options)}\>双曲線を描く\\
+\hyperlink{implicitplot}{Implicitplot(name,str,,str,str,options)}\>陰関数のグラフを描く\\
+\hyperlink{invert}{Invert(PD)}\>プロットデータの点を逆順にする(reverseと同じ)\\
+\hyperlink{joincrvs}{Joincrvs(name, PDlist, options)}\>2つのプロットデータをつなげたデータを作る\\
+\hyperlink{letter}{Letter([座標,位置,文字列],options)}\>文字列を表示する\\
+\hyperlink{letterrot}{Letterrot(座標,方向,移動量,文字列)}\>文字列を回転して表示する\\
+\hyperlink{lineplot}{Lineplot(name,2点のlist,options)}\>2点を結ぶ直線を描く\\
+\hyperlink{listplot}{Listplot(name,点のlist,options)}\>点を線分で結ぶ\\
+\hyperlink{mkbeziercrv}{Mkbeziercrv(name,list,options)}\>作図した点を使ってベジェ曲線を描く\\
+\hyperlink{mkbezierptcrv}{Mkbezierptcrv(list,options ) } \>制御点を自動配置してベジェ曲線を描く\\
+\hyperlink{mkcircles}{Mkcircles()} \>幾何円のすべてのPD を作成する\\
+\hyperlink{mksegments}{Mksegments()}\> 幾何線分のすべてのPD を作成する\\
+\hyperlink{ospline}{Ospline(list,list,options )} \>大島のスプライン曲線を描く\\
+\hyperlink{ovaldata}{Ovaldata(name, 点list,options)}\>角を丸くした矩形を描く\\
+\hyperlink{parabolaplot}{Parabolaplot(name,list,str,options)}\>放物線を描く\\
+\hyperlink{paramark}{Paramark(点list,options)}\>角の印を入れる\\
+\hyperlink{paramplot}{Paramplot(name,式,変数と定義域,options)}\>媒介変数で表された曲線を描く\\
+\hyperlink{polarplot}{Polarplot(name,式,変数と定義域,options)}\>極座標表示の曲線を描く\\\hyperlink{partcrv}{Partcrv(name,点1,点2,PD)}\>部分曲線を描く\\
+\hyperlink{periodfun}{Periodfun(定義式,周期,options)}\>周期関数のグラフを描く\\
+\hyperlink{plotdata}{Plotdata(name,式,変数と定義域,options)}\>関数のグラフを描く\\
+\hyperlink{pointdata}{Pointdata(name,点list,options)}\>点データを作る\\
+\hyperlink{polygonplot}{Polygonplot(name,点list,整数,options)}\>正多角形を描く\\
+\hyperlink{putintersect}{Putintersect(点名,PD1,PD2)}\>2曲線の交点を作る\\
+\hyperlink{putoncurve}{Putoncurve(name,PD,初期値)}\>曲線上に点を作る\\
+\hyperlink{putonline}{Putonline(点名,座標1,座標2)}\>直線上に点を作る\\
+\hyperlink{putonseg}{Putonseg(点名,座標1,座標2)}\>線分上に点を作る\\
+\hyperlink{putpoint}{Putpoint(点名,座標1,座標2)}\>点を作る\\
+\hyperlink{reflectdata}{Reflectdata(name,PD,点list,options)}\>プロットデータの鏡映を作成\\
+\hyperlink{reflectpoint}{Reflectpoint(点,対称点/対称軸)}\>点の鏡映を作成\\
+\hyperlink{rotatedata}{Rotatedata(name,PD,角度,中心,options)}\>プロットデータを回転する\\
+\hyperlink{rotatepoint}{Rotatepoint(点,角度,中心)}\>点の位置を回転する\\
+\hyperlink{rulerscale}{Rulerscale(点,list,list)}\>目盛を打つ\\
+\hyperlink{scaledata}{Scaledata(name,PD,x,y,中心,options)} \>点を拡大・縮小する\\
+\hyperlink{scalepoint}{Scalepoint(点,比率ベクトル,中心)} \>点の位置を拡大・縮小する\\
+\hyperlink{drawsegmark}{Segmark(name,list,options)}\>線分に印をつける\\
+\hyperlink{shade}{Shade(PDlist , 数)}\>閉曲線の内部にシェードをかける\\
+\hyperlink{tangentplot}{Tangentplot(name,PD, 位置)}\>曲線の接線を引く\\
+\hyperlink{translatedata}{Translatedata(name,PD,ベクトル,options)}\>プロットデータを平行移動する\\
+\hyperlink{translatepoint}{Translatepoint(点,ベクトル)}\>点を平行移動する\\
+\hyperlink{vtickmark}{Vtickmark([横座標 , 方向 , 文字])}\>縦軸に目盛りを描く\\
+【作表】\\
+\hyperlink{changetablestyle}{Changetablestyle(罫線list, options)}\>Table の罫線の描画オプションを変更する。\\
+\hyperlink{findcell}{Findcell(列番号, 行番号)}\>セルの情報listを返す\\
+\hyperlink{putcell}{Putcell (列番号, 行番号, 位置, 文字)} \>セルに文字列を入れる\\
+\hyperlink{putcell}{Putcellexpr (列番号, 行番号, 位置, 文字)} \>セルに数式を入れる\\\hyperlink{putcol}{Putcol (列番号, 位置,文字列list)} \>1列に順に文字を書き入れる\\
+\hyperlink{putcolexpr}{Putcolexpr (列番号, 位置,文字列list)}\>1列に順に\TeX 書式の文字を書き入れる\\
+\hyperlink{putrow}{Putrow (行番号, 位置,文字列list)} \>1行に順に文字を書き入れる\\
+\hyperlink{putrowexpr}{Putrowexpr (行番号, 位置,文字列list)} \>1行に順に\TeX 書式の文字を書き入れる\\
+\hyperlink{tabledata}{Tabledata("" , 縦横 ,除外 , options)}\>表の枠を作成する\\
+\hyperlink{tabledatalight}{Tabledatalight("" , 縦横 ,除外 , options)}\>幾何点を持たない表の枠を作成する\\
+\hyperlink{tgrid}{Tgrid(セルラベル)} \>セル(格子点)の座標を返す\\
+\hyperlink{tlistplot}{Tlistplot(セルラベル1,セルラベル2)} \>セルに斜線を引く\\
+\vspace{\baselineskip}
+【値の取得と入出力】\\
+\hyperlink{asin}{Asin(real),Acos(real) }\>逆三角関数の値を返す\\
+\hyperlink{crossprod}{Crossprod(list,list)}\>ベクトルの外積を計算する\\
+\hyperlink{derivative}{Derivative(関数式,変数,値)}\>関数の微分係数を求める\\
+\hyperlink{dotprod}{Dotprod(list,list)}\>ベクトルの内積を計算する\\
+\hyperlink{extractdata}{Extractdata(データ名,属性)}\>ReadOutDataで読み込んだデータに属性をつける。\\
+\hyperlink{findarea}{Findarea(PD)}\>プロットデータで囲まれる部分の面積を求める\\
+\hyperlink{findlength}{Findlength(PD)}\>プロットデータで描く曲線の長さを求める\\
+\hyperlink{integrate}{Integrate(関数式,変数,範囲,options)} \>関数の定積分値を求める\\
+\hyperlink{intersectcrvs}{Intersectcrvs(PD1,PD2)}\>プロットデータの交点の座標listを返す\\
+\hyperlink{intersectcrvspp}{IntersectcrvsPp(PD1,PD2)}\>プロットデータの交点のパラメータlistを返す\\
+\hyperlink{inversefun}{Inversefun(関数式,範囲,値)}\>逆関数値を求める\\
+%\hyperlink{makeshell}{Makeshell(ファイル名)}\>Macのシェルスクリプトを書き出す\\
+%\hyperlink{makeshell}{Makebat(ファイル名)} \>Windowsのバッチファイルを書き出す\\
+\hyperlink{nearestpt}{Nearestpt(PD,PD)}\>2曲線間の最も近い点を取得する\\
+\hyperlink{nearestptcrv}{Nearestptcrv(点,PD)}\>点に一番近い曲線上の点を取得する\\
+\hyperlink{numptcrv}{Numptcrv(PD)}\>曲線PD の節点データの個数を取得する\\
+\hyperlink{paramoncrv}{ParamonCurve(PD,n,PtL)}\>PD上にある点P のデータを取得する\\
+\hyperlink{pointoncrv}{Pointoncrv(数,PD)}\>パラメータ値をもつプロットデータ上の点\\
+\hyperlink{ptcrv}{Ptcrv(n,PD)}\>曲線PD のn 番目の節点を取得する\\
+\hyperlink{ptstart}{Ptstart(PD)}\>プロットデータの始点・終点を取得する\\
+\hyperlink{readoutdata}{ReadOutData(ファイル名)}\>外部データをPDとして読み込む\\
+\hyperlink{readcsv}{Readcsv(name,filename,option)}\>csvファイルを読む\\
+\hyperlink{readlines}{Readlines(name,filename,option)}\>テキストファイルを1行ずつ読む\\
+\hyperlink{sqr}{Sqr(real)}\>平方根を返す\\
+\hyperlink{viewtex}{Viewtex()}\>\TeX のソースファイルを書き出す。引数なし\\
+\hyperlink{workprocess}{Workprocess()}\>作図の経過を取得する\\
+\hyperlink{writeoutdata}{WriteOutData()}\>PDデータを書き出す\\
+\vspace{\baselineskip}
+【その他】\\
+\hyperlink{assign}{Assign(文字列)}\>文字列中のある文字を値で置き換える\\
+\hyperlink{bbdata}{BBdata(ファイル名)}\>画像のサイズを求める\\
+%\hyperlink{com0th}{Com0th(コマンド)} \>RのOpenfileの前に置くコマンドを定義する\\
+%\hyperlink{com1st}{Com1st(コマンド)} \>RのOpenfileの前に置くコマンドを定義する\\
+%\hyperlink{com2nd}{Com2nd(コマンド)} \>RのOpenfileのあとに置くコマンドを定義する\\
+%\hyperlink{com2ndpre}{Com2ndpre(コマンド)} \>RのOpenfileのあとに置くコマンドを定義する\\
+\hyperlink{cindyname}{Cindyname()}\>作図しているファイル名を取得する。\\
+\hyperlink{colorcode}{Colorcode(文字1,文字2,color)}\>カラーコードの変換\\
+\hyperlink{dqq}{Dqq(文字列)}\>文字列の前後に\verb|"|をつける。\\
+\hyperlink{factorial}{Factorial(n)}\>nの階乗を計算する。\\
+\hyperlink{norm}{Norm(ベクトル)}\>ベクトルの大きさを計算する。\\
+\hyperlink{figpdf}{Figpdf(option)} \>出力枠サイズのPDFを作る\\
+\hyperlink{help}{Help(str)}\>コマンドヘルプを表示する\\
+\hyperlink{helpkey}{Helpkey(str)}\>キーワードで関数を検索する\\
+\hyperlink{indexall}{Indexall(str1,str2)} \>文字列 str1 から str2 を検索しその位置をすべて返す\\
+\hyperlink{op}{Op(n,list)} \> listまたは文字列から要素を抜き出す\\
+\hyperlink{isptselected}{Isptselected(点名)} \>点が選択されていればtrueを返す\\
+\hyperlink{isptselected}{Ptselected(点名)} \>点が選択されていればtrueを返す\\
+\hyperlink{slider}{Slider()}\>スライダを作る\\
+\hyperlink{sprintf}{Sprintf(実数,長さ)}\>小数点以下の長さを固定した文字列に変換\\
+\hyperlink{strsplit}{Strsplit(文字列,文字)}\>文字列を分解する。\\
+\hyperlink{texcom}{Texcom(コード)} \>\TeX のコードを書き出す\\
+\hyperlink{textformat}{Textformat(数,桁数)} \>小数点以下の桁数を指定して数値を文字列化する\\
+\hyperlink{windispg}{Windispg()}\>定義されたプロットデータを描画面に描く\\
+\hyperlink{fracform}{Fracform(数,分母リスト)}\>簡易TeX-like書式の文字列を返す\\
+\hyperlink{totexform}{Totexform(TeX-like書式)}\>TeX書式の文字列を返す\\
+\hyperlink{tocindyform}{Tocindyform(TeX-like書式}\>Cindy書式の文字列を返す\\
+\vspace{\baselineskip}
+【Rとの連携】\\
+\hyperlink{boxplot}{Boxplot(名前,データ,位置,高さ,option)} \>箱ひげ図を描く\\
+\hyperlink{rfun}{Rfun(変数名,コマンド,引数, option)}\>Rの1つコマンドを実行して結果を返す\\
+\hyperlink{calcbyr}{CalcbyR(変数名,コマンド列, option)}\>Rのコマンド列を実行して結果を返す\\
+\hyperlink{histplot}{Histplot(name,data)}\>ヒストグラムを描く\\
+\hyperlink{plotdatar}{PlotdataR(name,式,変数)}\>Rの関数のグラフを描く\\
+\hyperlink{plotdiscr}{PlotdiscR(name,式,変数)}\>離散型のグラフを描く\\
+\hyperlink{scatterplot}{Scatterplot(name,filename,option)}\>2次元データを読み込み,散布図を描く\\
+\vspace{\baselineskip}
+【Maximaとの連携】\\
+\hyperlink{calcbyM}{CalcbyM(name,list,option)}\>Maximaのスクリプトを実行する\\
+%\hyperlink{example}{Example("Mxfun",文字)}\>Mxfunの使用例を表示\\
+\hyperlink{mxbatch}{Mxbatch(list)}\>Maximaの外部スクリプト用コマンドを作る\\
+\hyperlink{mxfun}{Mxfun(name,式,list,option)}\>Maximaの関数を実行する\\
+\hyperlink{mxtex}{Mxtex(num,式)}\>式をTeX書式にする\\
+\vspace{\baselineskip}
+【Risa/Asirとの連携】\\
+\hyperlink{asirfun}{Asirfun(name,式,list,option)}\>Risa/Asirの関数を実行する\\
+\hyperlink{calcbyA}{CalcbyA(name,list,option)}\>Risa/Asirのスクリプトを実行する\\
+\vspace{\baselineskip}
+【FriCASとの連携】\\
+\hyperlink{calcbyF}{CalcbyF(name,list,option)}\>FriCASのスクリプトを実行する\\
+\hyperlink{frfun}{Frfun(name,式,list,option)}\>FriCASの関数を実行する\\
+\vspace{\baselineskip}
+【MeshLabとの連携】\\
+\hyperlink{mkobjcmd}{Mkobjcmd(name,式,option)} \>厚みを持たない曲面のコマンドを作成\\
+\hyperlink{mkobjcrvcmd}{Mkobjcrvcmd(name,PD,option)} \>空間曲線のコマンドを作成\\
+\hyperlink{mkobjnrm}{Mkobjnrm(name,式)} \>法線ベクトルのデータを作成\\
+\hyperlink{mkobjplatecmd}{Mkobjplatecmd(name,面データ,options)} \>面を描く\\
+\hyperlink{mkobjpolycmd}{Mkobjpolycmd(name,PD,options)} \>多面体を描く\\
+\hyperlink{mkobjsymbcmd}{Mkobjsymbcmd(PD, 実数,実数,vec,vec)} \>文字等のコマンドを作成\\
+\hyperlink{mkobjthickcmd}{Mkobjthickcmd(name,式)} \>厚みを持つ曲面のコマンドを作成\\
+\hyperlink{mkviewobj}{Mkviewobj(name,PD, options)} \>obj ファイルを作成\\
+\vspace{\baselineskip}
+【表計算ソフトとの連携】\\
+\hyperlink{dispmat}{Dispmat(list)}\>listの内容を行列型にコンソールに表示する\\
+\hyperlink{tab2list}{Tab2list(str,option)}\>str の内容をlistに変換する\\
+\hyperlink{writecsv}{Writecsv(namelist,data,option)}\>dataの内容をcsvファイルに書き出す\\
+\vspace{\baselineskip}
+【アニメーション】\\
+%\hyperlink{moviedata}{Moviedata(str1,str2,options)}\>動画データの作成\\
+\hyperlink{setpara}{Setpata(str)}\>パラパラ動画のタイトル指定\\
+【スライド】\\
+\hyperlink{settitle}{Settitle(タイトルlist,options)}\>スライドのタイトル設定\\
+【KeTCindy3D設定・定義】\\
+\hyperlink{ketinit3d}{Ketinit3d()}\>KeTCindy3Dの使用宣言\\
+\hyperlink{isangle}{Isangle}\>角度スライダが選択されているか\\
+\hyperlink{start3d}{Start3d()}\>3Dの開始\\
+\hyperlink{setangle}{Setangle} \>回転角の設定\\
+\hyperlink{getangle}{Getangle}\>回転角の取得\\
+\hyperlink{startsurf}{Startsurf}\>曲面描画の初期化\\
+\vspace{\baselineskip}
+【KeTCindy3D描画】\\
+\hyperlink{bezier3d}{Bezier3d(name, list, list)}\>空間ベジェ曲線を描く\\
+\hyperlink{changestyle3d}{Changestyle3d(list, list)}\>3dプロットデータの属性を変更\\
+\hyperlink{concatobj}{Concatobj(list,option)}\>いくつかのobjデータを結合\\
+\hyperlink{crvsfparadata}{Crvsfparadata(name,PD,PD2,式,opt,opt)}\>曲線の曲面による陰線処理\\
+\hyperlink{datalist}{Datalist2d()}\>画面に描かれているすべてのプロットデータ\\
+\hyperlink{datalist}{Datalist3d()}\>画面に描かれているすべてのプロットデータ\\
+\hyperlink{dist3d}{Dist3d(点名,点名)}\>空間の2点の距離\\
+%\hyperlink{drawpoint3d}{Drawpoint3d(座標)}\>空間点を描く\\
+\hyperlink{embed}{Embed(name,PD,式)}\>埋め込みデータ作成\\
+\hyperlink{execcmdc}{ExeccmdC(name,options1,options2)}\>C言語で命令実行\\
+\hyperlink{expr3d}{Expr3D([座標,位置,文字列],options)}\>文字列を表示する\\
+\hyperlink{intersectcrvsf}{Intersectcrvsf(name,PD,式)}\>曲線と曲面の交点を求める\\
+\hyperlink{intersectsgpL}{IntersectsgpL(点名,線分,面,描画方法)}\>空間の直線と平面の交点\\
+\hyperlink{invparapt}{Invparapt(座標,PD)}\>描画面座標に対応する曲線上の座標\\
+\hyperlink{letter3d}{Letter3D([座標,位置,文字列],options)}\>文字列を表示する\\
+\hyperlink{mkbezierptcrv3d}{Mkbezierptcrv3d(点list)}\>制御点を自動的にとる空間ベジェ曲線\\
+\hyperlink{nohiddenbyfaces}{Nohiddenbyfaces(name,PD,PD,opt1,opt2)}\>多面体と空間曲線を陰線処理\\
+\hyperlink{parapt}{Parapt(座標)}\>点の投影面での座標\\
+\hyperlink{partcrv3d}{Partcrv3d(name,始点,終点,PD)}\>曲線PDの部分曲線を作る\\
+\hyperlink{perpplane}{Perpplane(点名, 点, ベクトル,option)}\>点を通り垂直な平面上の基準点\\
+\hyperlink{perppt}{Perppt(点名,点,点list,option)}\>平面に下ろした垂線の足\\
+\hyperlink{phparadata}{Phparadata(name,name2,options)}\>多面体を陰線処理して描く\\
+\hyperlink{pointdata3d}{Pointdata3d(名前,点list,options)} \>空間点のデータを作成する\\
+\hyperlink{putaxes3d}{Putaxes3d([x,y,z])}\>軸上に幾何点をとる\\
+\hyperlink{putonCurve3d}{Putoncurve3d(点名,PD)}\>空間曲線上に点をとる\\
+\hyperlink{putonseg3d}{Putonseg3d(点名,点1,点2)}\>線分上に点をとる\\
+\hyperlink{putpoint3d}{Putpoint3d(list,option)}\>空間点をとる\\
+\hyperlink{readobj}{Readobj(ファイル名)}\>objファイルを読み込む\\
+\hyperlink{reflectdata3d}{Reflectdata3d(点,PDlist,list,options)}\>PDを鏡映\\
+\hyperlink{reflectpoint3d}{Reflectpoint3d(点,list)}\>点を鏡映\\
+\hyperlink{rotatedata3d}{Rotatedata3d(name,PD,vec,角度,点)}\>プロットデータを回転\\
+\hyperlink{rotatepoint3d}{Rotatepoint(点 , vec , 角度 , 点)}\>点を回転\\
+\hyperlink{scaledata3d}{Scaledata3d(点, vec, 中心)}\>プロットデータを拡大/縮小\\
+\hyperlink{scalepoint3d}{Scalepoint3d(点, vec, 中心)}\>点の位置を拡大/縮小\\
+\hyperlink{sf3data}{Sf3data(name, list,options)}\>陰線処理なしの空間曲面を描く\\
+\hyperlink{sfbdparadata}{Sfbdparadata(name, 式,options)}\>曲面を陰線処理して描く\\
+\hyperlink{sfcutparadatacdy}{Sfcutparadatacdy(name,面,曲面,options)} \>平面と曲面の交線を求める。\\
+\hyperlink{skeletonparadata}{Skeletonparadata(name,PD,PD,options)}\>スケルトン処理のデータ作成\\
+\hyperlink{spacecurve}{Spacecurve(name, 式, 定義域,options)}\>空間曲線のデータ作成\\
+\hyperlink{spaceline}{Spaceline(name,list)}\>空間の折線データ作成\\
+\hyperlink{translatedata3d}{Translatedata3d(name,PD, 平行移動量)}\>空間プロットデータを平行移動\\
+\hyperlink{translatepoint3d}{Translatepoint3d(座標,平行移動量)}\>空間点を平行移動\\
+\hyperlink{vertexedgeface}{VertexEdgeFace(面データ,option)}\>頂点と面から辺を求め,辺を描く\\
+\hyperlink{wireparadata}{Wireparadata(name,PD,式,int,int,opt,opt)}\>曲面のワイヤフレームを陰線処理\\
+\hyperlink{xyzax3data}{Xyzax3data(name,文字,文字,文字,options)}\>座標軸の表示\\
+\hyperlink{xyzcoord}{Xyzcoord(P.x,P.y,Pz.y)}\>主副画面で決まる点の座標\\
+【KeTJS】\\
+\hyperlink{setketcindyjs}{Setketcindyjs(options)}\>KeTJSの設定\\
+
+\end{tabbing}
+
+\end{document} \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/KeTPicStyleE.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/KeTPicStyleE.tex
new file mode 100644
index 0000000000..5ca2f21268
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/KeTPicStyleE.tex
@@ -0,0 +1,552 @@
+\documentclass[papersize,a4paper,12pt]{article}
+\usepackage{ketpic,ketlayer}
+\usepackage{amsmath}
+% \usepackage{amsmath,newtxmath}
+%\usepackage[dvipdfmx]{graphicx,color}
+\usepackage{graphicx,color}
+\usepackage{wrapfig}
+%\usepackage[dvipdfmx,bookmarks=false,colorlinks=true,linkcolor=blue]{hyperref}
+\usepackage[bookmarks=false,colorlinks=true,linkcolor=blue]{hyperref}
+\setmargin{20}{20}{15}{25}
+\usepackage{setspace}
+\usepackage{comment}
+\usepackage{bm,enumerate}
+
+\newcommand{\bs}{$\backslash$}
+
+\newcommand{\br}[1]{\{#1\}}
+
+\newenvironment{cmd}[2]{
+\hypertarget{#2}{}
+\begin{center}{\bf\large #1}\end{center}
+\begin{description}
+}{
+\end{description}
+\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$Command List}\end{flushright}
+}
+
+% item command for this documentation
+\newcommand{\itemket}[1]{
+\item[\Ltab{27mm}{#1}]
+}
+
+
+\begin{document}
+\title{Macros of ketpic.sty and ketlayer.sty}
+\author{\ketcindy\ Project Team}
+\maketitle
+
+\begin{center} - ver.1.1 -\end{center}
+
+%\hypertarget{index}{}
+%\tableofcontents
+
+%\newpage
+
+\section{Outlines}
+
+\begin{itemize}
+\item ketpic.sty, ketpic2e.sty(it is necessary in pict2e) are used for ketpic.
+\item ketlayer.sty, ketlayer2e.sty(it is necessary in pict2e) are used for ketlayer.
+\item \bs\verb|Width|, \bs\verb|Height|,\ \bs\verb|Depth| are defined.
+\item Temporary counters \verb|ketpictctra|,\ $\cdots$,\ \verb|ketpicctrj| are defined.
+\item Package \verb|graphicx|, \verb|color| are required.
+
+\end{itemize}
+
+
+%========= Envilonment =====================
+\section{Envilonment}
+
+%------------layer--------------------------------
+\begin{cmd}{layer}{layer}
+\itemket{Usage}\verb|\begin{layer}[Ho]{W}{H}|\ $\cdots$\ \verb|\end{layer}|
+\itemket{Description}This enviroment draws grids and adds a note or a figure.
+
+\item[Details]\mbox{}\\
+\Ltab{10mm}{W}Width of grids. The unit is \verb|mm|.
+
+\Ltab{10mm}{H}Height of grids. The unit is \verb|mm|.\\
+\hspace*{20mm}If \verb|H=0|, grids don't appear.\\
+\hspace*{20mm}If \verb|H<0|, grids appear on the upside.
+
+
+\itemket{Example} \mbox{}\\
+\verb|\begin{layer}{120}{30}|\\
+\verb|\putnotec{20}{10}{abc}|\\
+\verb|\putnotes{60}{0}{\input{Fig/FigE.tex}}|\\
+\verb|\end{layer}|
+
+\vspace{5mm}
+
+\begin{layer}{120}{30}
+\putnotec{20}{10}{abc}
+\putnotes{60}{0}{\input{Fig/FigE.tex}}\end{layer}
+%% "FigE.tex" is copy of "addax2.tex"
+
+\vspace{35mm}
+
+\item[Remark]Set \verb|H=0| if placement of all components is proper.
+
+\end{cmd}
+
+
+%========= Macros =====================
+\section{Macros}
+%=-=-=-=-= Macros of ketpic =-=-=-=-=
+\subsection{Macros of ketpic}
+Macros of ketpic are used just like regular commands of \TeX.
+
+%------------ ketpic ------------
+\begin{cmd}{\bs ketpic}{ketpic}
+\itemket{Usage}\verb|\ketpic|
+\itemket{Description}This macro displays the logo of {\ketpic}.
+\itemket{Examples} \verb|\ketpic|
+\end{cmd}
+
+%------------ ketcindy ------------
+\begin{cmd}{\bs ketcindy}{ketcindy}
+\itemket{Usage}\verb|\ketcindy|
+\itemket{Description}This macro displays the logo of {\ketcindy}.
+\itemket{Examples} \verb|\ketcindy|
+\end{cmd}
+
+%------------ tab ------------
+\begin{cmd}{\bs Ltab, \bs Rtab, \bs Ctab}{tab}
+\itemket{Usage}\verb|\Ltab{W}{S}|, \verb|\Rtab{W}{S}|, \verb|\Ctab{W}{S}|
+\itemket{Description}This is tab macro.
+\itemket{}\verb|\Ltab{W}{S}| secures the width of W and writes S by left justifying it.
+\itemket{}\verb|\Rtab{W}{S}| secures the width of W and writes S by right justifying it.
+\itemket{}\verb|\Ctab{W}{S}| secures the width of W and writes S at the center.
+\end{cmd}
+
+%------------ ketcalc ------------
+\begin{cmd}{\bs ketcalcwidth, \bs ketcalcheight, \bs ketcalcdepth}{ketcalc}
+\itemket{Usage}\verb|\ketcalcwidth[0]{C}|, \verb|\ketcalcheight[0]{C}|, \verb|\ketcalcdepth[0]{C}|
+\itemket{Description}These functions return the size of C using current unit to the counter \verb|ketpicctr1|.
+If option is 1, it displays the value.
+\itemket{}\verb|\ketcalcwidth[0]{C}| returns the width of C.
+\itemket{}\verb|\ketcalcheight[0]{C}| returns the height of C.
+\itemket{}\verb|\ketcalcdepth[0]{C}| returns the depth of C.
+\itemket{Examples} \verb|\ketcalcwidth[0]{abc}, \theketpicctra, \ketcalcwidth[1]{abc}| \par
+It displays ``\ketcalcwidth[0]{abc}, \theketpicctra, \ketcalcwidth[1]{abc}''.
+\end{cmd}
+
+%------------ ketcalcwh ------------
+\begin{cmd}{\bs ketcalcwh}{ketcalcwh}
+\itemket{Usage}\verb|\ketcalcwh{C}|
+\itemket{Description}This function displays the width and height of C using \verb|mm| in the form \{width\}\{height\}.
+\itemket{Examples} \verb|\ketcalcwh{abc}|\par
+It displays ``\ketcalcwh{abc}''.
+\end{cmd}
+
+%------------ dangerbendmark ------------
+\begin{cmd}{\bs dangerbendmark}{dangerbendmark}
+\itemket{Usage}\verb|\dangerbendmark[size]|
+\itemket{Description}This function displays the symbol ``Dangerous turning point'' of Bulbaki.
+\itemket{Examples} \verb|\dangerbendmark[1.2]| --->\ \ \dangerbendmark[1.2]
+\end{cmd}
+
+%------------ cautionmark ------------
+\begin{cmd}{\bs cautionmark}{cautionmark}
+\itemket{Usage}\verb|\cautionmark[size]|
+\itemket{Description}This function displays the caution mark.
+\itemket{Examples} \verb|\caoutionmark[1.2]| --->\ \ \cautionmark[1.2]
+\end{cmd}
+
+%------------ circlemark ------------
+\begin{cmd}{\bs circlemark}{circlemark}
+\itemket{Usage}\verb|\circlemark[thickness]{size}|
+\itemket{Description}This function displays the circle.
+If size=1, the diameter of the circle is 4mm.
+\itemket{Examples} \verb|\circlemark[8]{1.2}| --->\ \ \circlemark[8]{1.2}
+\end{cmd}
+
+%------------ circleshade ------------
+\begin{cmd}{\bs circleshade}{circleshade}
+\itemket{Usage}\verb|\circleshade[thickness]{size}{density}|
+\itemket{Description}This function displays the solid circle.
+\itemket{Examples} \verb|\circleshade[8]{1.2}{0.3}| --->\ \ \circleshade[8]{1.2}{0.3}
+\end{cmd}
+
+%------------ arrow of increase or decrease ------------
+\begin{cmd}{\bs NEarrow, \bs NELarrow, ...}{arrow of i or d}
+\itemket{Usage}\verb|\NEarrow[size]|, \verb|\NELarrow[size}|, \verb|\NERarrow[size]|,
+\itemket{Description}These functions display the arrow of increase or decrease.
+\itemket{Examples} \mbox{}
+
+\vspace{-3mm}\hspace{16mm}
+\begin{tabular}{|rl|rl|rl|rl|}
+\hline
+ \verb|\NEarrow| & \NEarrow & \verb|\SEarrow| & \SEarrow & \verb|\NWarrow| & \NWarrow & \verb|\SWarrow| & \SWarrow \\
+\hline
+\verb|\NELarrow| & \NELarrow & \verb|\SELarrow| & \SELarrow & \verb|\NWLarrow| & \NWLarrow & \verb|\SWLarrow| & \SWLarrow \\
+\hline
+\verb|\NERarrow| & \NERarrow & \verb|\SERarrow| & \SERarrow & \verb|\NWRarrow| & \NWRarrow & \verb|\SWRarrow| & \SWRarrow \\
+\hline
+\end{tabular}
+\end{cmd}
+
+%=-=-=-=-= Macros of ketlayer =-=-=-=-=
+\subsection{Macros of ketlayer}
+Macros of ketlayer are used in layer environment.
+
+Some macros take the form of connected main part and direction (``c'', ``e'', ``w'', ``s'', ``n'').
+In the following we write them as ``main part + dir''.
+Direction can be combine like as options of {\ketcindy} commands.
+% (``ne'', ``nw'', ``se'', ``sw'')
+
+For example, if main part is ``\verb|putnote|'', ``\verb|putnote+dir|'' are \par
+``\verb|putnotec|'', ``\verb|putnotee|'', ``\verb|putnotew|'', ``\verb|putnotes|'', ``\verb|putnoten|'', ``\verb|putnotene|'', ``\verb|putnotenw|'', ``\verb|putnotese|'', ``\verb|putnotesw|''.
+
+%-------------putnote+dir-------------------------------
+\begin{cmd}{\bs putnote+dir}{putnote}
+\itemket{Usage}\verb|\putnote+dir{x}{y}{Char}|
+\itemket{Description}These functions put Char in the direction of dir of coordinates (x, y).
+\itemket{}\verb|putnotec{x}{y}{Char}| puts Char with (x,y) as the center.
+\itemket{}\verb|putnotee{x}{y}{Char}| puts Char on the right of (x,y).
+\itemket{}\verb|putnotew{x}{y}{Char}| puts Char on the left of (x,y).
+\itemket{}\verb|putnotes{x}{y}{Char}| puts Char under (x,y).
+\itemket{}\verb|putnoten{x}{y}{Char}| puts Char above (x,y).
+\itemket{Example}\mbox{}\\
+\verb|\putnotese{20}{10}{\fbox{$\dfrac{1}{2}$}}|\\
+\verb|\putnotec{40}{10}{\fbox{$\dfrac{1}{3}$}}|\\
+
+\begin{layer}{60}{30}
+\putnotese{20}{10}{\fbox{$\dfrac{1}{2}$}}
+\putnotec{40}{10}{\fbox{$\dfrac{1}{3}$}}
+\end{layer}
+\vspace{30mm}
+\end{cmd}
+
+%-------------boxframe+dir-------------------------------
+\begin{cmd}{\bs boxframe+dir}{boxframe}
+\itemket{Usage}\verb|\boxframe+dir[thickness]{x}{y}{W}{H}{Strings}|
+\itemket{Description}These functions draw a rectangle with width W and height H in the direction of dir of coordinates (x, y), and put the strings inside.
+\end{cmd}
+
+%-------------dashboxframe+dir-------------------------------
+\begin{cmd}{\bs dashboxframe+dir}{dashboxframe}
+\itemket{Usage}\verb|\dashboxframe+dir[thickness]{x}{y}{W}{H}{Strings}|
+\itemket{Description}These functions draw a dashed rectangle with width W and height H in the direction of dir of coordinates (x, y), and put the strings inside.
+\end{cmd}
+
+%-------------jaggyboxframe+dir-------------------------------
+\begin{cmd}{\bs jaggyboxframe+dir}{jaggyboxframe}
+\itemket{Usage}\verb|\jaggyboxframe+dir[thickness]{x}{y}{W}{H}{Strings}|
+\itemket{Description}These functions draw a jaggy rectangle with width W and height H in the direction of dir of coordinates (x, y), and put the strings inside.
+\end{cmd}
+
+%-------------diaboxframe+dir-------------------------------
+\begin{cmd}{\bs diaboxframe+dir}{diaboxframe}
+\itemket{Usage}\verb|\diaboxframe+dir[thickness]{x}{y}{W}{H}{Strings}|
+\itemket{Description}These functions draw a rectangle with width W, height H, connecting diamond shapes, in the direction of dir of coordinates (x, y), and put the strings inside.
+\end{cmd}
+
+%-------------eraser+dir-------------------------------
+\begin{cmd}{\bs eraser+dir}{eraser}
+\itemket{Usage}\verb|\eraser+dir[F]{x}{y}{W}{H}|
+\itemket{Description}These functions erase the interior of rectangle with width W and height H in the direction of dir of coordinates (x, y).
+If F=0, it don't draw border lines. By default, F=1.
+\end{cmd}
+
+%-------------shadebox+dir-------------------------------
+\begin{cmd}{\bs shadebox+dir}{shadebox}
+\itemket{Usage}\verb|\shadebox+dir[F]{x}{y}{W}{H}{C1}{C2}|
+\itemket{Description}These functions draw a rectangle with width W and height H in the direction of dir of coordinates (x, y), paint inside with color C1, and draw a border with color C2.
+If F=0, they don't draw border lines. By default, F=0.
+
+\end{cmd}
+
+%-------------example 1-------------------------------
+\vspace{5mm}
+
+\begin{layer}{160}{0}
+ \boxframese{000}{0}{30}{16}{boxframe}
+ \dashboxframese{035}{0}{30}{16}{dashboxframe}
+\jaggyboxframese{070}{0}{30}{16}{jaggyboxframe}
+ \diaboxframese{105}{0}{30}{16}{diaboxframe}
+ \shadeboxse[0]{140}{0}{30}{16}{yellow}{black}
+\end{layer}
+
+\vspace{15mm}
+\newpage
+
+%-------------popframe-------------------------------
+\begin{cmd}{\bs popframe}{popframe}
+\itemket{Usage}\verb|\popframe[thickness]{x}{y}{Dummy}{Cs}{Dummy}{Cp}{Cf}{Strings}|
+\itemket{Description}This function draws a rectangle on the lower right (se) of the coordinates \text{(x, y)}, put strings inside and add a shadow of the color Cs.
+\itemket{Details}Cp is background color. Cf is border color.\par
+\Ltab{18.5mm}{}{\tt Note.\ }Dummy(color name) are currently ignored.\par
+\Ltab{18.5mm}{}The size of the rectangle is determined automatically from strings.\par
+\Ltab{18.5mm}{}The line thickness is 8 by default.\par
+\Ltab{18.5mm}{}Strings must be width$\leq$ 200 mm, height$\leq$ 100 mm.
+\end{cmd}
+
+%-------------colorframe-------------------------------
+\begin{cmd}{\bs colorframe}{colorframe}
+\itemket{Usage}\verb|\colorframe[thickness]{x}{y}{Cp}{Cs}{Cf}{Strings}|
+\itemket{Description}This function draws a rectangle on the lower right (se) of the coordinates \text{(x, y)}, put strings inside.
+\itemket{Details}Cp is background color. Cf is border color.\par
+\Ltab{18.5mm}{}{\tt Note.\ }Dummy(color name) is ignored.\par
+\Ltab{18.5mm}{}The size of the rectangle is determined automatically from strings.\par
+\Ltab{18.5mm}{}The line thickness is 8 by default.\par
+\Ltab{18.5mm}{}Strings must be width$\leq$ 200 mm, height$\leq$ 100 mm.
+\end{cmd}
+
+%-------------example 2-------------------------------
+\vspace{15mm}
+\noindent{\bf Examples.}\par
+\verb|\definecolor{shade}{cmyk}{0,0,0,0.4}| $\gets$ color name ``shade'' defined.\par
+\verb|\popframe[16]{40}{5}{white}{shade}{white}{cyan}{red}{\Large\tt POP frame}| \par
+\verb|\colorframe[16]{90}{5}{yellow}{white}{blue}{\Large\tt COLOR frame}| \\
+
+\begin{layer}{160}{0}
+\definecolor{shade}{cmyk}{0,0,0,0.4}
+% \popframe[16]{40}{5}{Ds}{shade}{Dp}{yellow}{green}{\Large\tt POP frame}
+ \popframe[16]{40}{5}{Ds}{shade}{Dp}{cyan}{red}{\Large\tt POP frame}
+\colorframe[16]{90}{5}{yellow}{green}{blue}{\Large\tt COLOR frame}
+\end{layer}
+
+\vspace{25mm}
+
+%-------------cirscoremark-------------------------------
+\begin{cmd}{\bs cirscoremark}{cirscoremark}
+\itemket{Usage}\verb|\cirscoremark[thickness]{size}|
+\itemket{Description}This function draws a handwritten double circle.
+\end{cmd}
+
+%-------------scirscoremark-------------------------------
+\begin{cmd}{\bs scirscoremark}{scirscoremark}
+\itemket{Usage}\verb|\scirscoremark[thickness]{size}|
+\itemket{Description}This function draws a handwritten single circle.
+\end{cmd}
+
+%-------------triscoremark-------------------------------
+\begin{cmd}{\bs triscoremark}{triscoremark}
+\itemket{Usage}\verb|\triscoremark[thickness]{size}|
+\itemket{Description}This function draws a handwritten triangle.
+\end{cmd}
+
+%-------------crosscoremark-------------------------------
+\begin{cmd}{\bs crosscoremark}{crosscoremark}
+\itemket{Usage}\verb|\crosscoremark[thickness]{size}|
+\itemket{Description}This function draws a handwritten cross mark.
+\end{cmd}
+
+\begin{layer}{170}{0}
+\putnotec{30}{25}{\cirscoremark{0.8}}
+\putnotec{60}{25}{\scirscoremark{0.8}}
+\putnotec{90}{25}{\triscoremark{0.8}}
+\putnotec{120}{25}{\crosscoremark{0.8}}
+\end{layer}
+
+\vspace{45mm}
+
+%-------------lineseg-------------------------------
+\begin{cmd}{\bs lineseg}{lineseg}
+\itemket{Usage}\verb|\lineseg[thickness]{x}{y}{L}{|{$\theta$}\verb|}|
+\itemket{Description}This function draws a line segment of length L from the coordinates (x, y) in the direction of $\theta^\circ$ degrees.
+\itemket{Details}Unit of length L is mm.\par
+\Ltab{18.5mm}{}The line thickness is 12 by default. Unit is milli inch\par
+\Ltab{18.5mm}{}x, y, $\theta$ may be decimal.
+\itemket{Example}\verb|\lineseg[16]{135}{25}{30}{25}|
+
+\begin{layer}{160}{0}
+\lineseg[16]{60}{20}{30}{25}
+%\arrowlineseg[16]{130}{50}{10}{45}
+\end{layer}
+
+\vspace{25mm}
+\end{cmd}
+%-------------dashlineseg-------------------------------
+\begin{cmd}{\bs dashlineseg}{dashlineseg}
+\itemket{Usage}\verb|\dashlineseg[thickness]{x}{y}{L}{|{$\theta$}\verb|}|
+\itemket{Description}This function draws a dash line segment of length L from the coordinates \text{(x, y)} in the direction of $\theta^\circ$ degrees.
+\itemket{Details}Unit of length L is mm.\par
+\Ltab{18.5mm}{}The line thickness is 12 by default. Unit is milli inch\par
+\Ltab{18.5mm}{}x, y, $\theta$ may be decimal.
+
+\end{cmd}
+%-------------arrowlineseg-------------------------------
+\begin{cmd}{\bs arrowlineseg}{arrowlineseg}
+\itemket{Usage}\verb|\arrowlineseg[thickness]{x}{y}{L}{|{$\theta$}\verb|}|
+\itemket{Description}This function draws a arrow line segment of length L from the coordinates \text{(x, y)} in the direction of $\theta^\circ$ degrees.
+\itemket{Details}The arrowhead is drawn at the starting point.\par
+\Ltab{18.5mm}{}The line thickness is 12 by default. Unit is milli inch.\par
+\Ltab{18.5mm}{}x, y, $\theta$ may be decimal.
+\itemket{Example}\verb|\arrowlineseg[16]{60}{20}{10}{45}|
+
+\begin{layer}{160}{0}
+%\lineseg[16]{60}{20}{30}{25}
+\arrowlineseg[16]{60}{15}{10}{45}
+\end{layer}
+
+\vspace{20mm}
+\end{cmd}
+
+%-------------arrowhead-------------------------------
+\begin{cmd}{\bs arrowhead}{arrowhead}
+\itemket{Usage}\verb|\arrowhead[size]{x}{y}{|{$\theta$}\verb|}|
+\itemket{Description}This function draws a arrowhead on the coordinates (x, y) in the direction of $\theta^\circ$ degrees.
+\itemket{Details}The line thickness is 12 by default. Unit is milli inch.\par
+\Ltab{18.5mm}{}x, y, $\theta$ may be decimal.
+\end{cmd}
+
+%-------------hjaggyline-------------------------------
+\begin{cmd}{\bs hjaggyline}{hjaggyline}
+\itemket{Usage}\verb|\hjaggyline[thickness]{x}{y}{W}|
+\itemket{Description}This function draws a jagged line of length W from the coordinates (x, y) to the right.
+\end{cmd}
+
+%-------------hjaggylineb-------------------------------
+\begin{cmd}{\bs hjaggylineb}{hjaggylineb}
+\itemket{Usage}\verb|\hjaggylineb[thickness]{x}{y}{W}|
+\itemket{Description}This function draws a jagged line of length W from the coordinates (x, y) to the right.
+\itemket{Details}This function draws a reverse jagged line against ``hjaggyline''.\par
+\end{cmd}
+
+%-------------vjaggyline-------------------------------
+\begin{cmd}{\bs vjaggyline}{vjaggyline}
+\itemket{Usage}\verb|\vjaggyline[thickness]{x}{y}{W}|
+\itemket{Description}This function draws a jagged line of length W from the coordinates (x, y) to the right.
+\end{cmd}
+
+%-------------vjaggylineb-------------------------------
+\begin{cmd}{\bs vjaggylineb}{vjaggylineb}
+\itemket{Usage}\verb|\vjaggylineb[thickness]{x}{y}{W}|
+\itemket{Description}This function draws a jagged line of length W from the coordinates (x, y) to the right.
+\itemket{Details}This function draws a reverse jagged line against ``vjaggyline''.\par
+\end{cmd}
+
+%-------------example 3-------------------------------
+\noindent{\bf Examples.}\par
+\Ltab{18.5mm}{}\verb|\hjaggyline{40}{10}{15}| \par
+\Ltab{18.5mm}{}\verb|\hjaggylineb{40}{20}{15}| \par
+\Ltab{18.5mm}{}\verb|\vjaggyline{70}{10}{15}| \par
+\Ltab{18.5mm}{}\verb|\vjaggylineb{90}{10}{15}| \par
+
+\begin{layer}{160}{0}
+ \hjaggyline{40}{10}{15}
+\hjaggylineb{40}{20}{15}
+ \vjaggyline{70}{10}{15}
+\vjaggylineb{90}{10}{15}
+\end{layer}
+
+\vspace{35mm}
+
+%-------------circleline-------------------------------
+\begin{cmd}{\bs circleline}{circleline}
+\itemket{Usage}\verb|\circleline{x}{y}{size}|
+\itemket{Description}This function draws a circle with (x, y) as the center.
+\end{cmd}
+
+%-------------ballonr-------------------------------
+\begin{cmd}{\bs ballonr}{ballonr}
+\itemket{Usage}\verb|\ballonr[thickness]{x}{y}{size}{Char}|
+\itemket{Description}This function draws a balloon in the upper right side from (x, y) and, puts Char inside.
+\end{cmd}
+
+%-------------ballonl-------------------------------
+\begin{cmd}{\bs ballonl}{ballonl}
+\itemket{Usage}\verb|\ballonl[thickness]{x}{y}{size}{Char}|
+\itemket{Description}This function draws a balloon in the upper left side from (x, y) and, puts Char inside.
+\end{cmd}
+
+%-------------lefthand-------------------------------
+\begin{cmd}{\bs lefthand}{lefthand}
+\itemket{Usage}\verb|\lefthand[thickness]{x}{y}|
+\itemket{Description}This function draws a fingertip on (x, y).
+\end{cmd}
+
+%-------------righthand-------------------------------
+\begin{cmd}{\bs righthand}{righthand}
+\itemket{Usage}\verb|\righthand[thickness]{x}{y}|
+\itemket{Description}This function draws a fingertip on (x, y).
+\end{cmd}
+
+%-------------leftdownhand-------------------------------
+\begin{cmd}{\bs leftdownhand}{leftdownhand}
+\itemket{Usage}\verb|\leftdownhand[thickness]{x}{y}|
+\itemket{Description}This function draws a fingertip on (x, y).
+\end{cmd}
+
+%-------------rightdownhand-------------------------------
+\begin{cmd}{\bs rightdwonhand}{rightdownhand}
+\itemket{Usage}\verb|\rightdownhand[thickness]{x}{y}|
+\itemket{Description}This function draws a fingertip on (x, y).
+\end{cmd}
+
+%-------------example 3-------------------------------
+\noindent{\bf Examples.}\par
+
+\begin{layer}{170}{0}
+ \ballonr{30}{35}{1}{Example1}
+ \ballonl{90}{30}{1}{Example2}
+ \lefthand{120}{25}
+ \righthand{140}{25}
+ \leftdownhand{120}{15}
+\rightdownhand{140}{15}
+\end{layer}
+
+\newpage
+
+%-==Command List ========================
+\hypertarget{functionlist}{}
+\section{Command List}
+%\hyperlink{index}{To index}
+
+\begin{tabbing}
+12345678901234567890\=\kill
+
+{\bf Macros of ketpic} \> \\
+\hyperlink{ketpic}{\bs ketpic} \> logo of \ketpic\\
+\hyperlink{ketcindy}{\bs ketcindy} \> logo of \ketcindy\\
+\hyperlink{tab}{\bs Ltab} \> left tab\\
+\hyperlink{tab}{\bs Rtab} \> right tab\\
+\hyperlink{tab}{\bs Ctab} \> center tab\\
+\hyperlink{ketcalc}{\bs ketcalcwidth} \> returns the width of strings\\
+\hyperlink{ketcalc}{\bs ketcalcheight} \> returns the height of strings\\
+\hyperlink{ketcalc}{\bs ketcalcdepth} \> returns the depth of strings\\
+\hyperlink{ketcalcwh}{\bs ketcalcwh} \> returns the width and height of strings\\
+\hyperlink{dangerbendmark}{\bs dangerbendmark} \> symbol ``Dangerous turning point'' of Bulbaki\\
+\hyperlink{cautionmark}{\bs cautionmark} \> caution mark\\
+\hyperlink{circlemark}{\bs circlemark} \> circle\\
+\hyperlink{circleshade}{\bs circleshade} \> solid circle\\
+\hyperlink{arrow of i or d}{\bs NEarrow, ...} \> arrow of increase or decrease\\
+
+{\bf Macros of ketlayer} \> \\
+\hyperlink{putnote}{\bs putnote+dir} \> puts Char\\
+\hyperlink{boxframe}{\bs boxframe+dir} \> draws a rectangle and puts strings\\
+\hyperlink{dashboxframe}{\bs dashboxframe+dir} \> draws a dashed rectangle and puts strings\\
+\hyperlink{jaggyboxframe}{\bs jaggyboxframe+dir} \> draws a jaggy rectangle and puts strings\\
+\hyperlink{diaboxframe}{\bs diaboxframe+dir} \> draws a diamond chaining rectangle and puts strings\\
+\hyperlink{eraser}{\bs eraser+dir} \> erases the interior of a rectangle\\
+\hyperlink{shadebox}{\bs shadebox+dir} \> draws a shaded rectangle and puts strings\\
+\hyperlink{popframe}{\bs popframe} \> draws a rectangle and shade with the specified color and puts strings\\
+\hyperlink{colorframe}{\bs colorframe} \> draws a rectangle with the specified color and puts strings\\
+\hyperlink{cirscoremark}{\bs cirscoremark} \> draws a handwritten double circle\\
+\hyperlink{scirscoremark}{\bs scirscoremark} \> draws a handwritten single circle\\
+\hyperlink{triscoremark}{\bs triscoremark} \> draws a handwritten triangle\\
+\hyperlink{crosscoremark}{\bs crosscoremark} \> draws a handwritten cross mark\\
+\hyperlink{lineseg}{\bs lineseg} \> draws a line segment specified angle\\
+\hyperlink{dashlineseg}{\bs dashlineseg} \> draws a dashed line segment specified angle\\
+\hyperlink{arrowlineseg}{\bs arrowlineseg} \> draws a arrow line segment specified angle\\
+\hyperlink{arrowhead}{\bs arrowhead} \> draws a arrowhead specified angle\\
+\hyperlink{hjaggyline}{\bs hjaggyline} \> draws a horizontal jaggy line segment\\
+\hyperlink{hjaggylineb}{\bs hjaggylineb} \> draws a horizontal jaggy line segment against \bs hjaggyline\\
+\hyperlink{vjaggyline}{\bs vjaggyline} \> draws a vertical jaggy line segment\\
+\hyperlink{vjaggylineb}{\bs vjaggylineb} \> draws a vertical jaggy line segment against \bs vjaggyline\\
+\hyperlink{circleline}{\bs circleline} \> draws a circle\\
+\hyperlink{ballonl}{\bs ballonl} \> draws a ballon and puts strings inside\\
+\hyperlink{ballonr}{\bs ballonr} \> draws a ballon and puts strings inside\\
+%\hyperlink{lefthand}{\bs lefthand} \> draws a leftward fingertip\\
+%\hyperlink{righthand}{\bs righthand} \> draws rightward fingertip\\
+\hyperlink{lefthand}{\bs lefthand} \> draws fingertip\\
+\hyperlink{righthand}{\bs righthand} \> draws fingertip\\
+\hyperlink{leftdownhand}{\bs leftdownhand} \> draws fingertip\\
+\hyperlink{rightdownhand}{\bs rightdownhand} \> draws fingertip\\
+
+\end{tabbing}
+
+\end{document} \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/KeTPicStyleJ.tex b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/KeTPicStyleJ.tex
new file mode 100644
index 0000000000..1649dd10b6
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/KeTPicStyleJ.tex
@@ -0,0 +1,572 @@
+\documentclass[a4j,12pt,dvipdfmx]{ujarticle}
+%\documentclass[papersize,a4paper,12pt]{article}
+\usepackage{ketpic,ketlayer}
+\usepackage{amsmath,amssymb}
+\usepackage{graphicx,color}
+\usepackage{wrapfig}
+%\usepackage[dvipdfmx,bookmarks=false,colorlinks=true,linkcolor=blue]{hyperref}
+\usepackage[bookmarks=false,colorlinks=true,linkcolor=blue]{hyperref}
+\setmargin{20}{20}{15}{25}
+\usepackage{setspace}
+\usepackage{comment}
+\usepackage{bm,enumerate}
+
+\newcommand{\tab}[2][50mm]{% % \tabの定義でzwを㎜に変換した。
+\noindent
+\hspace*{6.7mm}\Ltab{#1 }{{\tt #2}}% % 使用法を考えて書体\tt(タイプライタ体)を指定した。
+}
+
+\newcommand{\bs}{$\backslash$}
+
+\newcommand{\br}[1]{\{#1\}}
+
+\newenvironment{cmd}[2]{% "Command List" を"コマンド一覧"にした。
+\hypertarget{#2}{}
+\begin{center}{\bf\large #1}\end{center}
+\begin{description}
+}{
+\end{description}
+%\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$Command List}\end{flushright}
+\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$コマンド一覧}\end{flushright}
+}
+
+% item command for this documentation
+\newcommand{\itemket}[1]{
+\item[\Ltab{27mm}{#1}]
+}
+
+% item command for this documentation % 日本語マニュアル用の寸法
+\newcommand{\itemketj}[1]{
+\item[\Ltab{15mm}{#1}]
+}
+
+\newcommand{\Chuu}[1][6.7mm]{% \chuu の15zwより狭い\Chuuは,6.7mm
+\Ltab{#1}{}※ %
+}
+
+
+\西暦
+
+\begin{document}
+\title{{\bf\huge ketpic.sty と ketlayer.sty}}
+\author{\ketcindy\ Project Team}
+\maketitle
+
+\begin{center} - ver.1.1 -\end{center}
+
+%\hypertarget{index}{}
+%\tableofcontents
+%\newpage
+
+\section{概要}
+
+\begin{itemize}
+\item パッケージの指定\\
+\quad\verb|\usepackage{ketpic, ketlayer}|\\
+\quad\verb|\usepackage{ketpic2e, ketlayer2e}| (pict2eを用いるとき)
+\item \verb|\usepackage{graphicx,color}| が必要.
+\item 距離変数 \bs\verb|Width|, \bs\verb|Height|,\ \bs\verb|Depth| を定義してある.
+\item 10個の一時カウンタ \verb|ketpictctra|,\ $\cdots$,\ \verb|ketpicctrj| を定義してある.
+
+\end{itemize}
+
+\section{プリアンブル用マクロ(ketpic)}
+\vspace{\baselineskip}
+\begin{cmd}{\bs setmargin}{setmargin}
+\itemketj{使用法}\verb|\setmargin{left}{right}{top}{bottom}|
+\itemketj{説明}余白設定(単位はmm)
+\itemketj{例}\verb|\setmargin{20}{20}{15}{25}|
+\end{cmd}
+
+\section{本文用マクロ}
+%========= Envilonment =====================
+%\setcounter{subsection}{-1}
+
+\subsection{方向指定}
+
+ketpic,ketlayer,\ketcindy では,方向を指定するのに,東西南北の頭文字 e,w,s,n を用いることがよくある.なお,中心は c.
+
+\hspace{60mm} n
+
+\hspace{50.5mm} w\hspace{5mm} c\hspace{5mm} e
+
+\hspace{60mm} s
+
+
+さらに,これを組み合わせて en または en は北東すなわち右上 などとなる.
+
+本マニュアルでは,これらの方向を "\verb|dir|'' として表し,c,e,w,s,n が使えることを示す.
+
+たとえば,"\verb|putnote+dir|'' は,"\verb|putnotec|'', "\verb|putnotee|'' などとして,方向私邸を合わせて使うことを意味する.
+
+
+%=-=-=-=-= Macros of ketpic =-=-=-=-=
+\subsection{ketpicのマクロ}
+ketpic のマクロは,通常の\TeX\ コマンドと同様に使用する.
+
+%------------ ketpic ------------
+\vspace{\baselineskip}
+\begin{cmd}{\bs ketpic}{ketpic}
+\itemketj{使用法}\verb|\ketpic|
+\itemketj{説明}ロゴ {\ketpic} を出力.
+\end{cmd}
+
+%------------ ketcindy ------------
+\begin{cmd}{\bs ketcindy}{ketcindy}
+\itemketj{使用法}\verb|\ketcindy|
+\itemketj{説明}ロゴ {\ketcindy} を出力.
+\end{cmd}
+
+%------------ tab ------------
+\begin{cmd}{\bs Ltab, \bs Rtab, \bs Ctab}{tab}
+\itemketj{使用法}\verb|\Ltab{W}{S}|, \verb|\Rtab{W}{S}|, \verb|\Ctab{W}{S}|
+\itemketj{説明}
+\Ltab{50mm}{{\tt \bs Ltab\br{W}\br{S}}}{}幅Wを確保してSを左寄せで書く.\\
+\tab{{\tt \bs Rtab\br{W}\br{S}}}{}幅Wを確保してSを右寄せで書く.\\
+\tab{{\tt \bs Ctab\br{W}\br{S}}}{}幅Wを確保してSを中央寄せで書く.
+\itemketj{例}
+\Ltab{30mm}{text}text2
+
+\Rtab{30mm}{text}text2
+
+\Ctab{30mm}{text}text2
+
+\end{cmd}
+
+%------------ ketcalc ------------
+\begin{cmd}{\bs ketcalcwidth, \bs ketcalcheight, \bs ketcalcdepth}{ketcalc}
+\itemketj{使用法}\verb|\ketcalcwidth[0]{C}|, \verb|\ketcalcheight[0]{C}|, \verb|\ketcalcdepth[0]{C}|
+\itemketj{説明}文字列Cのサイズを単位長で計ってカウンタ\verb|ketpicctr1|に返す.オプションが1のときは, 値を表示する.\\
+\tab{\bs ketcalcwidth[0]\br{C}} 文字列Cの幅を計る.\\
+\tab{\bs ketcalcheight[0]\br{C}} 文字列Cの高さを計る.\\
+\tab{\bs ketcalcdepth[0]\br{C}} 文字列Cの深さを計る.
+\itemketj{例} \verb|\ketcalcwidth[0]{abc}, \theketpicctra, \ketcalcwidth[1]{abc}| とすれば,\par
+``\ketcalcwidth[0]{abc}, \theketpicctra, \ketcalcwidth[1]{abc}'' を出力する.
+\end{cmd}
+
+%------------ ketcalcwh ------------
+\begin{cmd}{\bs ketcalcwh}{ketcalcwh}
+\itemketj{使用法}\verb|\ketcalcwh{C}|
+\itemketj{説明}文字列 C の幅と高さを\{width\}\{height\}の形式で返す. 単位長は\verb|mm| とする.
+\itemketj{例} \verb|\ketcalcwh{abc}|とすれば,"\ketcalcwh{abc}'' を出力する.
+\end{cmd}
+
+%------------ dangerbendmark ------------
+\begin{cmd}{\bs dangerbendmark}{dangerbendmark}
+\itemketj{使用法}\verb|\dangerbendmark[size]|
+\itemketj{説明}「ブルバキの危険な曲がり角」" {\dangerbendmark[1.2]} '' を出力する.
+\end{cmd}
+
+%------------ cautionmark ------------
+\begin{cmd}{\bs cautionmark}{cautionmark}
+\itemketj{使用法}\verb|\cautionmark[size]|
+\itemketj{説明}注意書きのマーク`` {\cautionmark[1.2]}'' を出力する.
+\end{cmd}
+
+%------------ circlemark ------------
+\begin{cmd}{\bs circlemark}{circlemark}
+\itemketj{使用法}\verb|\circlemark[thickness]{size}|
+\itemketj{説明}円を出力する. size=1のとき, 円の直径は4mm.
+\end{cmd}
+
+%------------ circleshade ------------
+\begin{cmd}{\bs circleshade}{circleshade}
+\itemketj{使用法}\verb|\circleshade[thickness]{size}{density}|
+\itemketj{説明}中塗りの円を出力する. 中塗りの濃さをdensity で指定する.
+\itemketj{例} \verb|\circleshade[8]{1.2}{0.3}| で \circleshade[8]{1.2}{0.3} が出力される.
+\end{cmd}
+
+%------------ arrow of increase or decrease ------------
+\begin{cmd}{\bs dir+arrow/Larrow/Rarrow}{arrow of i or d}
+\itemketj{使用法}\verb|\arrow[size]|の頭部に,方向を大文字で付加する.
+
+\hspace{8mm}{\bs Larrow}, {\bs Rarrow} は凹凸用の湾曲した矢印.
+\itemketj{説明}増減矢印を出力する.sizeは倍率.
+\itemketj{例} \mbox{}
+
+\vspace{-3mm}\hspace{16mm}
+\begin{tabular}{|rl|rl|rl|rl|}
+\hline
+ \verb|\NEarrow| & \NEarrow & \verb|\SEarrow| & \SEarrow & \verb|\NWarrow| & \NWarrow & \verb|\SWarrow| & \SWarrow \\
+\hline
+\verb|\NELarrow| & \NELarrow & \verb|\SELarrow| & \SELarrow & \verb|\NWLarrow| & \NWLarrow & \verb|\SWLarrow| & \SWLarrow \\
+\hline
+\verb|\NERarrow| & \NERarrow & \verb|\SERarrow| & \SERarrow & \verb|\NWRarrow| & \NWRarrow & \verb|\SWRarrow| & \SWRarrow \\
+\hline
+\end{tabular}
+\end{cmd}
+
+%=-=-=-=-= Macros of ketlayer =-=-=-=-=
+\subsection{ketlayerのマクロ}
+ketlayer のマクロは,layer環境の中で使用する.\\
+
+%%==========layer環境==========
+%\subsection*{layer環境}
+
+%------------layer--------------------------------
+\begin{cmd}{layer環境について}{layer}
+\itemketj{使用法}\verb|\begin{layer}[Ho]{W}{H}|\ $\cdots$\ \verb|\end{layer}|
+\itemketj{説明}メモや図表を配置するためのpicture環境を定義して,方眼を描く.\\
+\Chuu W:方眼の幅,H:方眼の高さ,Ho:方眼の水平移動\\
+\Chuu 長さの単位はいずれもmmである.(水平移動のデフォルトは0)\\
+\Chuu \verb|H=0|のとき, 方眼を描かない. \verb|H<0|のとき, 上側に方眼を描く.
+
+\itemketj{例} \mbox{}\\
+\verb|\begin{layer}{120}{30}|\\
+\verb|\putnotec{20}{10}{abc}|\\
+\verb|\putnotes{60}{0}{\input{Fig/FigE.tex}}|\\
+\verb|\end{layer}|
+
+\vspace{5mm}
+
+\begin{layer}{120}{30}
+\putnotec{20}{10}{abc}
+\putnotes{60}{0}{\input{Fig/FigE.tex}}\end{layer}
+%% "FigE.tex" is copy of "addax2.tex"
+
+\vspace{35mm}
+
+\item[注意]対象物の配置が決まれば,\verb|\begin{layer}{120}{0}|とすることで方眼が消えて思い通りの配置が得られる.
+\end{cmd}
+
+%-------------putnote+dir-------------------------------
+\begin{cmd}{\bs putnote+dir}{putnote}
+\itemketj{使用法}\verb|\putnote+dir{x}{y}{Char}|
+\itemketj{説明}{\bs putnote}に続く\verb|dir| 指定により,次のように配置する.\\
+\tab{\bs putnotec\br{x}\br{y}\br{Char}} (x, y) を中心にCharを配置する.\\
+\tab{\bs putnotee\br{x}\br{y}\br{Char}} (x, y) の右にCharを配置する.\\
+\tab{その他,s,n,neなども同様}
+\itemketj{例}\verb|\putnotese{20}{10}{\fbox{$\dfrac{1}{2}$}}|\\
+\hspace{7mm}\verb|\putnotec{40}{10}{\fbox{$\dfrac{1}{3}$}}|\\
+
+\begin{layer}{60}{30}
+\putnotese{20}{10}{\fbox{$\dfrac{1}{2}$}}
+\putnotec{40}{10}{\fbox{$\dfrac{1}{3}$}}
+\end{layer}
+\vspace{30mm}
+\end{cmd}
+
+%-------------boxframe+dir-------------------------------
+\begin{cmd}{\bs boxframe+dir}{boxframe}
+\itemketj{使用法}\verb|\boxframe+dir[thickness]{x}{y}{W}{H}{Strings}|
+\itemketj{説明}(x, y) の dir 方向に,幅W, 高さH の矩形を描き,中に文字を入れる. \\
+\Chuu 線の太さ(thickness)のデフォルトは8とする.
+\itemketj{例}{\bs shadebox+dir} にまとめて例示.
+
+\end{cmd}
+
+%-------------dashboxframe+dir-------------------------------
+\begin{cmd}{\bs dashboxframe+dir}{dashboxframe}
+\itemketj{使用法}\verb|\dashboxframe+dir[thickness]{x}{y}{W}{H}{Strings}|
+\itemketj{説明}(x, y) の dir 方向に,破線の矩形を描き,中に文字を入れる.
+\itemketj{例}{\bs shadebox+dir} にまとめて例示.
+\end{cmd}
+
+%-------------jaggyboxframe+dir-------------------------------
+\begin{cmd}{\bs jaggyboxframe+dir}{jaggyboxframe}
+\itemketj{使用法}\verb|\jaggyboxframe+dir[thickness]{x}{y}{W}{H}{Strings}|
+\itemketj{説明}(x, y) の dir 方向に,ギザの矩形を描き,中に文字を入れる.
+\itemketj{例}{\bs shadebox+dir} にまとめて例示.
+\end{cmd}
+
+%-------------diaboxframe+dir-------------------------------
+\begin{cmd}{\bs diaboxframe+dir}{diaboxframe}
+\itemketj{使用法}\verb|\diaboxframe+dir[thickness]{x}{y}{W}{H}{Strings}|
+\itemketj{説明}(x, y) の dir 方向に,ダイヤ型を連ねた矩形を描き,中に文字を入れる.
+ \itemketj{例}{\bs shadebox+dir} にまとめて例示.
+\end{cmd}
+
+%-------------eraser+dir-------------------------------
+\begin{cmd}{\bs eraser+dir}{eraser}
+\itemketj{使用法}\verb|\eraser+dir[F]{x}{y}{W}{H}|
+\itemketj{説明}(x, y) の dir 方向の長方形の内部を消す.\\
+\Chuu F=0 とすると枠を描かない(デフォルトは F=1).
+\end{cmd}
+
+%-------------shadebox+dir-------------------------------
+\begin{cmd}{\bs shadebox+dir}{shadebox}
+\itemketj{使用法}\verb|\shadebox+dir[F]{x}{y}{W}{H}{C1}{C2}|
+\itemketj{説明}(x, y) の dir 方向に,矩形を描き,内部を色C1で塗る.\\
+\Chuu F=1 なら枠線を色C2で描く (デフォルトは F=0 : 枠線を描かない).
+
+\vspace{\baselineskip}
+以下に,\verb|boxframe|系のコマンドを例示する.\\
+\verb| \begin{layer}{160}{0}|\\
+\verb| \boxframese{000}{0}{30}{16}{boxframe}|\\
+\verb| \dashboxframese{035}{0}{30}{16}{dashboxframe}|\\
+\verb| \jaggyboxframese{070}{0}{30}{16}{jaggyboxframe}|\\
+\verb| \diaboxframese{105}{0}{30}{16}{diaboxframe}|\\
+\verb| \shadeboxse[0]{140}{0}{30}{16}{yellow}{black}|\\
+\verb| \end{layer}|
+
+\vspace{\baselineskip}
+\begin{layer}{160}{0}
+\boxframese{000}{0}{30}{16}{boxframe}
+\dashboxframese{035}{0}{30}{16}{dashboxframe}
+\jaggyboxframese{070}{0}{30}{16}{jaggyboxframe}
+\diaboxframese{105}{0}{30}{16}{diaboxframe}
+\shadeboxse[0]{140}{0}{30}{16}{yellow}{black}
+\end{layer}
+
+\vspace{15mm}
+\end{cmd}
+%-------------popframe-------------------------------
+\begin{cmd}{\bs popframe}{popframe}
+\itemketj{使用法}\verb|\popframe[thickness]{x}{y}{ダミー色}{色s}{ダミー色}{色p}{色f}{文字列}|
+\itemketj{説明}(x, y) の 右下(se方向)に,文字入りの矩形を描き,色sの陰を付ける. \\
+\Chuu 色p:背景色,色f:枠の色.
+(ダミー色には適当な色を入れる)\\
+%% Ds, Dp は空白でもよい。
+\Chuu 矩形の大きさは文字列から自動計算する.\\
+\Chuu 線の太さ(thickness)のデフォルトは8とする.\\
+\Chuu 文字列は,幅$\leqq$ 200mm, 高さ$\leqq$ 100mm とすること.
+\itemketj{例}{\bs colorframe} にまとめて例示.
+\end{cmd}
+
+\vspace*{-5mm}
+%-------------colorframe-------------------------------
+\begin{cmd}{\bs colorframe}{colorframe}
+\itemketj{使用法}\verb|\colorframe[thickness]{x}{y}{色p}{ダミー色}{色f}{文字列}|
+\itemketj{説明}(x, y) の 右下(se方向)に,文字入りの矩形を描く. \\
+\Chuu 色p:背景色,色f:枠の色.(ダミー色には適当な色を入れる)\\
+\Chuu 矩形の大きさは文字列から自動計算する.\\
+\Chuu 線の太さ(thickness)のデフォルトは8とする.\\
+\Chuu 文字列は,幅$\leqq$ 200mm, 高さ$\leqq$ 100mm とすること.\\
+
+\itemketj{例}色 "shade'' を定義しておく.
+
+%\verb|\definecolor{shade}{cmyk}{0,0,0,0.4}| $\gets$ 色``shade'' を定義.\par
+\verb|\popframe[16]{40}{5}{white}{shade}{white}{cyan}{red}{\Large\tt POP frame}| \par
+\verb|\colorframe[16]{90}{5}{yellow}{white}{blue}{\Large\tt COLOR frame}| \\
+
+\begin{layer}{160}{0}
+\definecolor{shade}{cmyk}{0,0,0,0.4}% CMYK方式
+% \popframe[16]{40}{5}{Ds}{shade}{Dp}{yellow}{green}{\Large\tt POP frame}
+ \popframe[16]{40}{5}{white}{shade}{white}{cyan}{red}{\Large\tt POP frame}
+\colorframe[16]{90}{5}{yellow}{white}{blue}{\Large\tt COLOR frame}
+%\colorframe[16]{90}{5}{yellow}{}{blue}{\Large\tt COLOR frame}
+\end{layer}
+
+\vspace{25mm}
+\end{cmd}
+
+%-------------cirscoremark-------------------------------
+\begin{cmd}{\bs cirscoremark}{cirscoremark}
+\itemketj{使用法}\verb|\cirscoremark[thickness]{size}|
+\itemketj{説明}手書きの2重丸を出力する.
+\itemketj{例}{\bs crosscoremark} のあとにまとめて例示.
+\end{cmd}
+
+%-------------scirscoremark-------------------------------
+\begin{cmd}{\bs scirscoremark}{scirscoremark}
+\itemketj{使用法}\verb|\scirscoremark[thickness]{size}|
+\itemketj{説明}手書きの単丸を出力する.
+\itemketj{例}{\bs crosscoremark} のあとにまとめて例示.
+\end{cmd}
+
+%-------------triscoremark-------------------------------
+\begin{cmd}{\bs triscoremark}{triscoremark}
+\itemketj{使用法}\verb|\triscoremark[thickness]{size}|
+\itemketj{説明}手書きの三角を出力する.
+\itemketj{例}{\bs crosscoremark} のあとにまとめて例示.
+\end{cmd}
+
+%-------------crosscoremark-------------------------------
+\begin{cmd}{\bs crosscoremark}{crosscoremark}
+\itemketj{使用法}\verb|\crosscoremark[thickness]{size}|
+\itemketj{説明}手書きのバツを出力する.
+
+\begin{layer}{170}{0}
+\putnotec{30}{15}{\cirscoremark{0.8}}
+\putnotec{60}{15}{\scirscoremark{0.8}}
+\putnotec{90}{15}{\triscoremark{0.8}}
+\putnotec{120}{15}{\crosscoremark{0.8}}
+\end{layer}
+
+\vspace{35mm}
+\end{cmd}
+%-------------lineseg, dashlineseg-------------------------------
+\begin{cmd}{\bs lineseg, \bs dashlineseg}{lineseg}
+\itemketj{使用法}\verb|\lineseg[thickness]{x}{y}{L}{|{$\theta$}\verb|}|\\
+\tab{\bs dashlineseg[thickness]\br{x}\br{y}\br{L}\br{$\theta$}}
+\itemketj{説明}{\tt \bs lineseg}は,点 (x, y) から長さ L の線分を $\theta^\circ$ 方向に描く(単位はmm). \\
+\tab{\bs dashlineseg は破線を描く.}\\
+\Chuu 線の太さ (thickness)のデフォルトは 12 (単位は milli inch).\\
+\Chuu x, y, $\theta$ は小数でもよい.
+\itemketj{例}\verb|\lineseg[16]{135}{25}{30}{25}|
+
+\begin{layer}{160}{0}
+\lineseg[16]{60}{20}{30}{25}
+%\arrowlineseg[16]{130}{50}{10}{45}
+\end{layer}
+
+\vspace{20mm}
+\end{cmd}
+%%-------------dashlineseg-------------------------------
+%\begin{cmd}{\bs dashlineseg}{dashlineseg}
+%\itemketj{使用法}\verb|\dashlineseg[thickness]{x}{y}{L}{|{$\theta$}\verb|}|
+%\itemketj{説明}点 (x, y) から長さ L の破線を $\theta^\circ$ 方向に描く(単位はmm). \\
+%%\itemket{Details}Unit of length L is mm.\par
+%%\Ltab{18.5mm}{}The line thickness is 12 by default. Unit is milli inch\par
+%%\Ltab{18.5mm}{}x, y, $\theta$ may be decimal.
+%%
+%\end{cmd}
+%-------------arrowlineseg-------------------------------
+\begin{cmd}{\bs arrowlineseg, \bs arrowhead}{arrowhead}
+\itemketj{使用法}\verb|\arrowlineseg[thickness]{x}{y}{L}{|{$\theta$}\verb|}|\\
+\tab{\bs arrowhead[size]\br{x}\br{y}\br{$\theta$}}
+\itemketj{説明}{\tt \bs arrowlineseg}は,点 (x, y) から長さ L の矢印を $\theta^\circ$ 方向に描く(単位はmm).\\
+\Chuu 鏃は始点(x, y)に描く. \\
+\Chuu 線の太さ (thickness)のデフォルトは 12 (単位は milli inch).\\
+\tab{\bs arrowhead は鏃だけを描く.}\\
+\Chuu x, y, $\theta$ は小数でもよい.
+\itemketj{例}\verb|\arrowlineseg[16]{60}{20}{10}{45}|
+
+\vspace*{-5mm}
+\begin{layer}{160}{0}
+%\lineseg[16]{60}{20}{30}{25}
+\arrowlineseg[16]{60}{20}{10}{45}
+\end{layer}
+
+\vspace{20mm}
+\end{cmd}
+
+%%-------------arrowhead-------------------------------
+%\begin{cmd}{\bs arrowhead}{arrowhead}
+%\itemketj{使用法}\verb|\arrowhead[size]{x}{y}{|{$\theta$}\verb|}|
+%\itemketj{説明}This function draws a arrowhead on the coordinates (x, y) in the direction of $\theta^\circ$ degrees.
+%\itemket{Details}The line thickness is 12 by default. Unit is milli inch.\par
+%\Ltab{18.5mm}{}x, y, $\theta$ may be decimal.
+%\end{cmd}
+
+%-------------hjaggyline-------------------------------
+\begin{cmd}{\bs hjaggyline, \bs hjaggylineb}{hjaggyline}
+\itemketj{使用法}\verb|\hjaggyline[thickness]{x}{y}{W}|\\
+\tab{\bs hjaggylineb[thickness]\br{x}\br{y}\br{W}}
+\itemketj{説明}{\tt \bs hjaggyline}は,(x, y) から右に幅Wのギザ線を描く.
+b を付加すると,線の出方が逆になる.
+\end{cmd}
+
+%%-------------hjaggylineb-------------------------------
+%\begin{cmd}{\bs hjaggylineb}{hjaggylineb}
+%\itemketj{使用法}\verb|\hjaggylineb[thickness]{x}{y}{W}|
+%\itemketj{説明}This function draws a jagged line of length W from the coordinates (x, y) to the right.
+%\itemket{Details}This function draws a reverse jagged line against ``hjaggyline''.\par
+%\end{cmd}
+
+%-------------hjaggyline-------------------------------
+\begin{cmd}{\bs vjaggyline, \bs vjaggylineb}{vjaggyline}
+\itemketj{使用法}\verb|\vjaggyline[thickness]{x}{y}{W}|\\
+\tab{\bs vjaggylineb[thickness]\br{x}\br{y}\br{W}}
+\itemketj{説明}{\tt \bs vjaggyline}は,(x, y) から下に幅Wのギザ線を描く.
+b を付加すると,線の出方が逆になる.
+\itemketj{例}次のようになる.
+
+\begin{layer}{160}{0}
+\hjaggyline{70}{10}{10}
+\hjaggylineb{70}{20}{10}
+\vjaggyline{100}{10}{10}
+\vjaggylineb{120}{10}{10}
+\end{layer}
+
+\verb|\hjaggyline{70}{10}{10}| \\
+\verb|\hjaggylineb{70}{20}{10}| \\
+\verb|\vjaggyline{100}{10}{10}| \\
+\verb|\vjaggylineb{120}{10}{10}| \\
+
+\end{cmd}
+%-------------circleline-------------------------------
+\begin{cmd}{\bs circleline}{circleline}
+\itemketj{使用法}\verb|\circleline{x}{y}{size}|
+\itemketj{説明}(x, y) を中心に円を描く.
+\end{cmd}
+
+%-------------ballonr-------------------------------
+\begin{cmd}{\bs ballonr, \bs ballonl}{ballon}
+\itemketj{使用法}\verb|\ballonr[thickness]{x}{y}{size}{Char}|\\
+\tab{\bs ballonl[thickness]\br{x}\br{y}\br{size}\br{Char}}
+\itemketj{説明}{\tt \bs ballonr}は (x, y) から右上に吹き出しと Char を描く.\\
+\tab[0mm]{}{{\tt \bs ballonl}は (x, y) から左上に吹き出しと Char を描く.}
+\end{cmd}
+
+%-------------lefthand-------------------------------
+\begin{cmd}{\bs lefthand, ...}{lefthand}
+\itemketj{使用法}\verb|\lefthand[thickness]{x}{y}|\\
+\tab{\bs righthand[thickness]\br{x}\br{y}}\\
+\tab{\bs leftdownhand[thickness]\br{x}\br{y}}\\
+\tab{\bs rightdownhand[thickness]\br{x}\br{y}}
+\itemketj{説明}(x, y) に,それぞれの向きで指先を描く.
+\itemketj{例} {\bs ballon }などの例
+
+\begin{layer}{170}{0}
+ \ballonr{30}{35}{1}{Example1}
+ \ballonl{90}{30}{1}{Example2}
+ \lefthand{120}{25}
+ \righthand{140}{25}
+ \leftdownhand{120}{15}
+\rightdownhand{140}{15}
+\end{layer}
+\vspace{30mm}
+\end{cmd}
+
+\newpage
+
+%-==Command List ========================
+\hypertarget{functionlist}{}
+\section{コマンド一覧}
+%\hyperlink{index}{To index}
+
+\begin{tabbing}
+12345678901234567890\=\kill
+
+{\bf ketpicのマクロ} \> \\
+\hyperlink{arrow of i or d}{\bs arrow, ...} \> 増減矢印\\
+\hyperlink{cautionmark}{\bs cautionmark} \> 注意書きのマーク\\
+\hyperlink{circlemark}{\bs circlemark} \> 円(サイズ指定)\\
+\hyperlink{circleshade}{\bs circleshade} \> 中塗りの円(サイズ指定)\\
+\hyperlink{tab}{\bs Ctab} \> 中央寄せタブ\\
+\hyperlink{tab}{\bs Ltab} \> 左寄せタブ\\
+\hyperlink{tab}{\bs Rtab} \> 右寄せタブ\\
+\hyperlink{dangerbendmark}{\bs dangerbendmark} \> ブルバキの「危険な曲がり角」\\
+\hyperlink{ketcalc}{\bs ketcalcdepth} \> 文字列の深さを計る\\
+\hyperlink{ketcalc}{\bs ketcalcheight} \> 文字列の高さを計る\\
+\hyperlink{ketcalc}{\bs ketcalcwidth} \> 文字列の幅を計る\\
+\hyperlink{ketcalcwh}{\bs ketcalcwh} \> 文字列の幅と高さを計る\\
+\hyperlink{ketcindy}{\bs ketcindy} \> ロゴ \ketcindy\ を出力\\
+\hyperlink{ketpic}{\bs ketpic} \> ロゴ \ketpic\ を出力\\
+
+{\bf ketlayerのマクロ} \> \\
+\hyperlink{arrowhead}{\bs arrowhead} \> 角度を指定して鏃だけ描く\\
+\hyperlink{arrowhead}{\bs arrowlineseg} \> 角度を指定した矢印\\
+\hyperlink{ballon}{\bs ballonl, \bs ballonr} \> 吹き出しと文字列\\
+\hyperlink{boxframe}{\bs boxframe+dir} \> 文字入りの矩形\\
+\hyperlink{circleline}{\bs circleline} \> レイヤー環境での円\\
+\hyperlink{cirscoremark}{\bs cirscoremark} \> 手書きの2重丸\\
+\hyperlink{colorframe}{\bs colorframe} \> 文字列に合わせたサイズの矩形(色指定)\\
+\hyperlink{crosscoremark}{\bs crosscoremark} \> 手書きのバツ\\
+\hyperlink{dashboxframe}{\bs dashboxframe+dir} \> 文字入りの矩形(破線)\\
+\hyperlink{diaboxframe}{\bs diaboxframe+dir} \> 文字入りの矩形(ダイヤ型を連ねた)\\
+\hyperlink{eraser}{\bs eraser+dir} \> 長方形の内部を消す\\
+\hyperlink{hjaggyline}{\bs hjaggyline(b)} \> 水平なギザ線分\\
+\hyperlink{jaggyboxframe}{\bs jaggyboxframe+dir} \> 文字入りの矩形(ギザ線)\\
+\hyperlink{lefthand}{\bs lefthand, ...} \> 指先(4つ)\\
+\hyperlink{lineseg}{\bs lineseg, \bs dashlineseg} \> 角度を指定した線分と破線\\
+\hyperlink{popframe}{\bs popframe} \> 文字列に合わせたサイズの矩形(色指定,影付き)\\
+\hyperlink{putnote}{\bs putnote+dir} \> 文字・図・表の配置\\
+\hyperlink{scirscoremark}{\bs scirscoremark} \> 手書きの単丸\\
+\hyperlink{shadebox}{\bs shadebox+dir} \> 文字入りの矩形(中塗り)\\
+\hyperlink{triscoremark}{\bs triscoremark} \> 手書きの三角\\
+\hyperlink{vjaggyline}{\bs vjaggyline(b)} \> 垂直なギザ線分\\
+%\hyperlink{ballonr}{\bs ballonr} \> draws a ballon and puts strings inside\\
+%\hyperlink{dashlineseg}{\bs dashlineseg} \> draws a dashed line segment specified angle\\
+%\hyperlink{hjaggylineb}{\bs hjaggylineb} \> draws a horizontal jaggy line segment against \bs hjaggyline\\
+%\hyperlink{leftdownhand}{\bs leftdownhand} \> draws fingertip\\
+%\hyperlink{lineseg}{\bs dashlineseg} \> draws a dashed line segment specified angle\\
+%\hyperlink{rightdownhand}{\bs rightdownhand} \> draws fingertip\\
+%\hyperlink{righthand}{\bs righthand} \> draws fingertip\\
+%\hyperlink{vjaggylineb}{\bs vjaggylineb} \> draws a vertical jaggy line segment against \bs vjaggyline\\
+
+
+\end{tabbing}
+
+\end{document} \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/readme/ReadmeLinuxE.tex b/graphics/ketcindy/ketcindyfolder/doc/source/readme/ReadmeLinuxE.tex
new file mode 100644
index 0000000000..b366eff95b
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/readme/ReadmeLinuxE.tex
@@ -0,0 +1,109 @@
+\documentclass{article}
+\usepackage{ketpic,ketlayer}
+\usepackage{amsmath,amssymb}
+\usepackage{graphicx}
+\usepackage{xcolor}
+\usepackage{bm,enumerate}
+\usepackage[colorlinks=true,urlcolor=blue]{hyperref}
+
+\setmargin{20}{20}{20}{20}
+
+\renewcommand{\labelitemi}{$\cdot$}
+\renewcommand{\labelitemii}{$\cdot$}
+
+\begin{document}
+
+\begin{center}
+How to install KeTCindy(Linux)
+\end{center}
+
+\hfill modified\ :\ \today
+
+\begin{enumerate}[\bf\large 1.]
+
+\item Install Cinderella, R, Maxima and Evince if necessary.
+ \begin{enumerate}[(1)]
+ \item Download \verb|Unix Install| from \\
+ \hspace*{10mm}\url{https://beta.cinderella.de}
+ and move it to user's home for example.
+ \item Put \verb|setcindyetc.sh| in user's home, for example, and edit it with a text editor.\\
+ \hspace*{5mm}Rem) The file is in \verb|ketcindyfolder/forLinux|.
+ \item Execute\\
+ \hspace*{10mm}\verb|sudo bash ~/setcindyetc.sh|
+ \end{enumerate}
+
+\item Install TeX if any TeX has not been installed.
+ \begin{enumerate}[(1)]
+ \item TeXLive is recommended.
+ \begin{itemize}
+ \item Files necessary for KeTCindy are already implemented (2018 or later).
+ \end{itemize}
+ \item KeTTeX is a light-weight version of TeXLive and downloadable from\\
+ \hspace*{6mm}\url{https://www.dropbox.com/sh/79ofbls9nf0ywkj/AAA4KaH6MaFsaL0e-ACqw-0Ya?dl=0}
+ \begin{itemize}
+ \item Put the file in user's home and extract it.
+ \item Execute the fillowing on the terminal.\\
+ \hspace*{10mm}\verb|sudo bash ~/kettex/setkettex.sh|
+ \end{itemize}
+ \end{enumerate}
+
+\item Install KeTCindy
+ \begin{enumerate}[(1)]
+ \item Download ketcindy from CTAN(\url{https://ctan.org})\\
+ \hspace*{10mm}Search ketcindy \verb|>| Pack­age ketcindy \verb|>| download
+ \begin{itemize}
+ \item The latest version can be downloaded from Repository:\\
+ \hspace*{5mm}\url{https://github.com/ket­pic/ketcindy}\\
+ \hspace*{10mm}Clone or Download \verb|>| Download ZIP
+ \end{itemize}
+ \item Open ketcindy(-master)/forLinux.
+ \item Open setketcindy.sh with a text editor and confirm/modify paths.
+ \begin{itemize}
+ \item Execute on terminal:\\
+ \hspace*{10mm}\verb|sudo bash setketcindy.sh|
+ \item Contents of scripts will be copied into TeX.
+ \item Style files for \ketcindy\ will be copied and mktexlsr will be executed.
+ \item In Cinderella/PlugIns\\
+ \hspace*{5mm}KetcindyPluign.jar will be copied.\\
+ \hspace*{5mm}ketcindy.ini will be generated or remade(if selected).
+ \item TeX(typeset) will be usually latex,xelatex or pdflatex.
+ \end{itemize}
+ \item Open setwork.sh with a text editor and confirm/modify it.
+ \begin{itemize}
+ \item Execute on terminal:\\
+ \hspace*{10mm}\verb|bash setwork.sh|
+ \item Contents of “work” will be copied into "ketcindy"(work folder).
+ \item \verb|.ketcindy.conf| will be also generated in User's home.\\
+ \hspace*{10mm}You can change the setting of PasthT, Mackc, etc.
+ \item Template of "ketcindy.conf" will be also copied to work directory.
+ \item Configuration files are read in order of
+ \begin{enumerate}[1)]
+ \item ketoutset.txt
+ \item ketcindy.conf in User's home
+ \item ketcindy.conf in the work folder.
+ \end{enumerate}
+ \end{itemize}
+ \end{enumerate}
+
+\item Test run of KeTCindy
+\begin{enumerate}[(1)]
+ \item Test template1basic.cdy in ketcindy (work folder).
+ \begin{itemize}
+ \item Execute on terminal:\\
+ \hspace*{10mm}\verb|cd (to the path of ketcindy)|\\
+ \hspace*{10mm}\verb|Cinderella2 template1basic.cdy|
+ \item a frame in white will appear on the screen.
+ \end{itemize}
+ \item Press "Figure" button at the top left, then the final PDF output will be displayed.
+ \end{enumerate}
+
+\item Set Texworks if necessary.
+ \begin{itemize}
+ \item Downloadable from \url{https://github.com/TeXworks/texworks/releases/}.
+ \end{itemize}
+
+\item Install \verb|gcc| for drawings of surface.
+
+\end{enumerate}
+
+\end{document} \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/readme/ReadmeLinuxJ.tex b/graphics/ketcindy/ketcindyfolder/doc/source/readme/ReadmeLinuxJ.tex
new file mode 100644
index 0000000000..301b47d4a7
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/readme/ReadmeLinuxJ.tex
@@ -0,0 +1,118 @@
+\documentclass{ujarticle}
+\usepackage{ketpic,ketlayer}
+\usepackage{amsmath,amssymb}
+\usepackage{graphicx}
+\usepackage{xcolor}
+\usepackage{bm,enumerate}
+\usepackage[dvipdfmx,colorlinks=true,urlcolor=blue]{hyperref}
+
+\setmargin{20}{20}{20}{20}
+
+\西暦
+
+\renewcommand{\labelitemi}{・}
+\renewcommand{\labelitemii}{・}
+
+\begin{document}
+
+\begin{center}
+\ketcindy\ のインストール (Linux)
+\end{center}
+
+\hfill 修正日:\today
+
+\begin{enumerate}[\bf\large 1.]
+\item Cinderella, R, Maxima, Evince をインストールする.
+ \begin{enumerate}[(1)]
+ \item 次に行き,Unix Installをダウンロードして,例えばユーザホームにおく.\\
+ \hspace*{10mm}\url{https://beta.cinderella.de}
+ \item setcindyetc.shを例えばユーザホームにおき,テキストエディタで編集する.\\
+ \hspace*{5mm}注)setcindyetc.shは\verb|ketcindyfolder/forLinux|にある.
+ \item 以下を実行する.\\
+ \hspace*{10mm}\verb|sudo bash ~/setcindyetc.sh|
+ \end{enumerate}
+
+\item \TeX をインストールしていない場合はインストールする.
+ \begin{enumerate}[(1)]
+ \item TeXLiveを推奨
+ \begin{itemize}
+ \item 2018以降ではketcindyが既に入っている.
+ \end{itemize}
+\item KeTTeXはTeXLiveの軽量版で,以下からダウンロードできる.\\
+ \hspace*{6mm}\url{https://www.dropbox.com/s/i6g64d897xr72nj/kettex.tar.gz?dl=0}
+
+ \begin{itemize}
+ \item どこか(例えばホーム)に置いて解凍する.
+ \item ターミナルで以下を実行する.\\
+   \verb|sudo bash ~/kettex/setkettex.sh|(ホームの場合)
+ \end{itemize}
+
+% \item 他のTeXの場合は,{\bf 3.}(2)を参照する.
+ \end{enumerate}
+
+\item KeTCindyのインストール
+ \begin{enumerate}[(1)]
+ \item ketcindyをCTAN(\url{https://ctan.org})からダウンロードする.\\
+ \hspace*{10mm}ketcindyで検索 \verb|>| Package ketcindy \verb|>| download
+ \begin{itemize}
+ \item[*]最新版は,Repositoryのサイト\\
+ \hspace*{10mm}\url{https://github.com/ket­pic/ketcindy}\\
+ から以下のようにダウンロードできる.\\
+ \hspace*{10mm}Clone or download \verb|>| Download ZIP
+ \item[*]この場合は,ketcindy-masterになる.
+ \end{itemize}
+ \item ketcindy(-master)/forLinuxを開く.
+ \item setketcindy.shをテキストエディタで開いて,パスを確認,修正する.
+ \begin{itemize}
+ \item ターミナルで以下を実行する.\\
+   \verb|sudo bash setketcindy.sh|
+ \item scriptsの中身が\TeX にコピーされる
+ \item ketcindyのstyleファイルが\TeX にコピーされmktexlsrが実行される.
+ \item CinderellaのPluginsにKetcindyPlugin.jarがコピーされる.
+ \item Pluginsにketcindy.iniが作成される(新規または再作成の場合)
+ \item タイプセットの方法(TeXの種類)\\
+ \hspace*{10mm}通常は,platex (p)またはuplatex(u)を選ぶ.
+ \end{itemize}
+ \item setwork.shをテキストエディタで開いて,パスを確認,修正する.
+ \begin{itemize}
+ \item ターミナルで以下を実行する.\\
+   \verb|bash setketwork.sh|
+ \item 作業ディレクトリketcindyがユーザホームに作成される.
+ \item ketcindyフォルダにworkフォルダの中身がコピーされる.
+ \item \verb|.ketcindy.conf|(不可視ファイルだが編集可能)がユーザホームに作成される.\\
+ \hspace*{10mm}注)\TeX を切り替えるときなどはこのファイルを修正する.
+ \item マニュアルもコピーされる.
+ \item 作業ディレクトリにketincy.confの雛形がコピーされる.
+ \item KeTCindyを立ち上げたとき,設定ファイルは次の順に読み込まれる.
+ \begin{enumerate}[1)]
+ \item ketoutset.txt
+ \item ユーザホームの\verb|.ketcindy.conf|
+ \item 作業ディレクトリketcindyの ketcindy.conf
+ \end{enumerate}
+ \end{itemize}
+ \end{enumerate}
+
+ \item KeTCindyのテストラン
+ \begin{enumerate}[(1)]
+ \item 作業ディレクトリketcindyにあるtemplate1basic.cdyを実行してみる.
+ \begin{itemize}
+ \item ターミナルで以下を実行\\
+   \verb|cd (ketcindyのパス)|\\
+   \verb|Cinderella2 template1basic.cdy|
+ \item 画面に白い枠が出れば,ライブラリの読み込みは成功.
+ \end{itemize}
+ \item スクリーンの左上部にあるFigureボタンを押して,PDFが表示されれば成功.
+ \end{enumerate}
+
+\item TeXworksを設定する.
+ \begin{itemize}
+ \item \url{https://github.com/TeXworks/texworks/releases/} からダウンロードできる.
+ \end{itemize}
+
+\item gccのインストール
+ \begin{itemize}
+ \item 曲面描画のためには, gccが必要である.
+ \end{itemize}
+\end{enumerate}
+
+\end{document} \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/readme/ReadmeMacE.tex b/graphics/ketcindy/ketcindyfolder/doc/source/readme/ReadmeMacE.tex
new file mode 100644
index 0000000000..67142fe896
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/readme/ReadmeMacE.tex
@@ -0,0 +1,133 @@
+\documentclass{article}
+\usepackage{ketpic,ketlayer}
+\usepackage{amsmath,amssymb}
+\usepackage{graphicx}
+\usepackage{xcolor}
+\usepackage{bm,enumerate}
+\usepackage[colorlinks=true,urlcolor=blue]{hyperref}
+
+\setmargin{20}{20}{20}{20}
+
+\renewcommand{\labelitemi}{$\cdot$}
+\renewcommand{\labelitemii}{$\cdot$}
+
+\begin{document}
+
+\begin{center}
+How to install KeTCindy(Mac)
+\end{center}
+
+\hfill modified\ :\ \today
+
+\begin{enumerate}[\bf\large 1.]
+
+\item Install Cinderella, R and Maxima.
+ \begin{itemize}
+ \item \url{https://beta.cinderella.de} (Cinderella)
+ \item \url{https://cran.r-project.org} (R)
+ \item \url{https://sourceforge.net/projects/maxima/files} (Maxima)
+ \end{itemize}
+\hspace*{5mm}Rem) Check they start correctly.
+
+\item Install TeX if any TeX has not been installed.
+ \begin{enumerate}[(1)]
+ \item TeXLive is recommended.
+ \begin{itemize}
+ \item Files necessary for KeTCindy are already implemented (2018 or later).
+ \end{itemize}
+ \item kettex is a light-weight TeXLive.
+ \begin{itemize}
+ \item Download kettex.zip from\\
+ \hspace*{10mm}\url{https://www.dropbox.com/s/dc4inuk06t07g26/kettex.dmg?dl=0}
+ \item Double-click it and move kettex to \verb|/Applications|.
+ \end{itemize}
+ \item In case of other TeX, see {\bf 3.}(2).
+ \end{enumerate}
+
+
+\item Install KeTCdindy
+ \begin{enumerate}[(1)]
+ \item Download ketcindy from CTAN(\url{https://ctan.org})\\
+ \hspace*{10mm}Search ketcindy \verb|>| Pack­age ketcindy \verb|>| download
+ \begin{itemize}
+ \item[Rem)]The latest version can be download from Repository:\\
+ \hspace*{5mm}\url{https://github.com/ket­pic/ketcindy}\\
+ \hspace*{10mm}Clone or Download \verb|>| Download ZIP
+ \end{itemize}
+ \item Open ketcindy(-master)/forMac.
+ \begin{itemize}
+ \item[Rem)]If the folder name includes spaces, remove them.
+ \item[Rem)]If you use TeX other than TeXLIve/KeTTeX,
+ \begin{itemize}
+ \item Open setketcindy.command with a text editor.
+ \item Edit paths in it.
+ \end{itemize}
+ \end{itemize}
+ \item Double-click setketcindy.command.
+ \begin{itemize}
+ \item Password of an administrator is required.
+ \item Control-click and select Terminal if necessary.
+ \item Contents of scripts will be copied into TeX.
+ \item ketcindystyle files will be copied and mktexlsr will be executed.
+ \item In Cinderella/PlugIns\\
+ \hspace*{5mm}KetcindyPluign.jar will be copied.\\
+ \hspace*{5mm}ketcindy.ini will be generated or remade(if selected).
+ \item TeX(typeset) will be usually latex,xelatex or pdflatex.
+ \end{itemize}
+ \item Double-click setwork.command.
+ \begin{itemize}
+ \item[Rem)]Control-click and select Terminal if necessary.
+ \end{itemize}
+ \begin{itemize}
+ \item Work directory "ketcindy" will be generated in User's home.
+ \item Contents of “work” will be copied into "ketcindy"
+ \item \verb|.ketcindy.conf| will be also generated in User's home.\\
+ \hspace*{10mm}You can change the setting of PasthT, Mackc, etc.
+ \item Template of "ketcindy.conf" will be also copied to work directory.
+ \item Configuration files are read in order of
+ \begin{enumerate}[1)]
+ \item ketoutset.txt
+ \item ketcindy.conf in User's home
+ \item ketcindy.conf in the work folder.
+ \end{enumerate}
+ \end{itemize}
+ \end{enumerate}
+
+\item Test run of KeTCindy
+ \begin{enumerate}[(1)]
+ \item Double-click "template1basic.cdy" in work directory "ketcindy".\\
+ \hspace*{10mm}Then a frame in white appear on the screen.
+ \item Press "Figure" button at the top left, then the final PDF output is displayed.
+ \begin{itemize}
+ \item[Rem)]To close the window of Terminal when the process exits :
+ \begin{itemize}
+ \item Start \verb|Terminal|.\\
+ \hspace*{10mm}Preferences \verb|>| Shell \verb|>| "Colse if the shell exited clearly"
+ \end{itemize}
+ \item[Rem)]It will be better to delete installer folder "ketcindy(-master)" .
+ \end{itemize}
+ \end{enumerate}
+\item Set Texworks if necessary. For example, in case of KeTTeX,
+ \begin{itemize}
+ \item Downloadable from \url{https://github.com/TeXworks/texworks/releases/}.
+ \item Launch TeXworks,\\
+ \hspace*{10mm}and choose Edit \verb|>| Preference \verb|>| Typeset.
+ \item Push upper + and add\\
+ \hspace*{5mm}\verb|/Applications/kettex/texlive/bin/x86_64-darwin|
+ \item Select Xelatex or pdflatex.
+ \end{itemize}
+
+\item Install Xcode if you use gcc for drawings of surface.
+ \begin{itemize}
+ \item[Rem)]f you want to use only gcc, execute on Terminal:\\
+ \hspace*{10mm}\verb|sudo xcode-select --install|
+ \end{itemize}
+
+\item Others
+ \begin{itemize}
+ \item Terminal command to allow to execute all aplications (Sierra or later)\\
+\hspace*{20mm}sudo spctl --master-disable
+ \end{itemize}
+\end{enumerate}
+
+\end{document} \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/readme/ReadmeMacJ.tex b/graphics/ketcindy/ketcindyfolder/doc/source/readme/ReadmeMacJ.tex
new file mode 100644
index 0000000000..eaab9903d1
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/readme/ReadmeMacJ.tex
@@ -0,0 +1,183 @@
+\documentclass{ujarticle}
+\usepackage{ketpic,ketlayer}
+\usepackage{amsmath,amssymb}
+\usepackage{graphicx}
+\usepackage{xcolor}
+\usepackage{bm,enumerate}
+\usepackage[dvipdfmx,colorlinks=true,urlcolor=blue]{hyperref}
+
+\setmargin{20}{20}{20}{20}
+
+\西暦
+
+\renewcommand{\labelitemi}{・}
+\renewcommand{\labelitemii}{・}
+
+\begin{document}
+
+\begin{center}
+KETCindyのインストール (Mac)
+\end{center}
+
+\hfill 修正日:\today
+
+\begin{enumerate}[\bf\large 1.]
+\item Cinderella, R, Maxima をインストールする.
+ \begin{itemize}
+ \item \url{https://beta.cinderella.de} (Cinderella)\\
+\hspace*{1zw}・解凍してできるCinderella2(.app)を /アプリケーションに{\bf 移動}する.\\
+\hspace*{2zw}注)ketcindy(-master)/forMacにある Applicationsにドラグドロップしてもよい.
+ \item \url{https://cran.r-project.org} (R)\\
+\hspace*{1zw}・ダブルクリックして,起動するかを確認する.
+ \item \url{https://sourceforge.net/projects/maxima/files} (Maxima)\\
+\hspace*{1zw}・v5.38.0以前の方がv5.40.0以降より軽い.
+ \end{itemize}
+
+\item TeXをインストールしていない場合はインストールする.
+ \begin{enumerate}[(1)]
+ \item TeXLiveを推奨
+ \begin{itemize}
+ \item 2018以降ではketcindyが既に入っている.
+ \end{itemize}
+ \item KeTTeXはTeXLiveの軽量版
+ \begin{itemize}
+ \item kettex.dmgを以下からダウンロードできる.\\
+ \hspace*{10mm}\url{https://www.dropbox.com/s/dc4inuk06t07g26/kettex.dmg?dl=0}
+ \item ダブルクリックしてできるkettexを\verb|/Applications|に入れる.
+ \end{itemize}
+ \item 他のTeXの場合は,{\bf 3.}(2)を参照する.
+ \end{enumerate}
+
+\item KeTCindyのインストール
+ \begin{enumerate}[(1)]
+ \item ketcindyをCTAN(\url{https://ctan.org})からダウンロードする.\\
+ \hspace*{10mm}ketcindyで検索 \verb|>| Package ketcindy \verb|>| download
+ \begin{itemize}
+ \item[注)]最新版は,Repositoryのサイト\\
+ \hspace*{10mm}\url{https://github.com/ket­pic/ketcindy}\\
+ から以下のようにダウンロードできる.\\
+ \hspace*{10mm}Clone or download \verb|>| Download ZIP
+ \item[注)]この場合は,ketcindy-masterになる.
+ \item[注)] フォルダ名がketcindy-master 2などになっていたら,スペースをとる.
+ \item[注)] すべて手動でインストールするときは,{\bf 7}に従って行う.
+ \end{itemize}
+ \item ketcindy(-master)/forMacを開く.
+ \begin{itemize}
+ \item[注)]他のTeXを使っている場合
+ \begin{itemize}
+ \item setketcindy.commandをテキストエディタで開く.
+ \item パスを修正する.
+ \end{itemize}
+ \end{itemize}
+ \item setketcindy.commandをダブルクリック
+ \begin{itemize}
+ \item[注)]管理者権限が必要となる.
+ \item[注)]開かないときはControl+クリックでターミナルを選ぶ.
+ \item[注)]ダブルクリックで「開くか」を表示させるには,ターミナルで以下を実行しておく.\\
+ \hspace*{20mm}\verb|sudo spctl --master-disable|
+ \end{itemize}
+ \begin{itemize}
+ \item scriptsの中身がTeXにコピーされる
+ \item ketcindyのstyleファイルがTeXにコピーされmktexlsrが実行される.
+ \item CinderellaのPluginsにKetcindyPlugin.jarがコピーされる.
+ \item Pluginsにketcindy.iniが作成される(新規または再作成の場合)
+ \item タイプセットの方法(TeXの種類)\\
+ \hspace*{10mm}通常は,platex (p)またはuplatex(u)を選ぶ.
+ \end{itemize}
+ \item setwork.commandをダブルクリック
+ \begin{itemize}
+ \item[注)]開かないときはControl+クリックでターミナルを選ぶ.
+ \end{itemize}
+ \begin{itemize}
+ \item 作業ディレクトリketcindyがユーザホームに作成される.
+ \item ketcindyフォルダにworkフォルダの中身がコピーされる.
+ \item \verb|.ketcindy.conf|(不可視ファイルだが編集可能)がユーザホームに作成される.\\
+ \hspace*{10mm}注)TeXを切り替えるときなどはこのファイルを修正する.
+ \item マニュアルもコピーされる.
+ \item 作業ディレクトリにketincy.confの雛形がコピーされる.
+ \item KeTCindyを立ち上げたとき,設定ファイルは次の順に読み込まれる.
+ \begin{enumerate}[1)]
+ \item ketoutset.txt
+ \item ユーザホームの\verb|.ketcindy.conf|
+ \item 作業ディレクトリketcindyの ketcindy.conf
+ \end{enumerate}
+ \end{itemize}
+ \end{enumerate}
+ \item KeTCindyのテストラン
+ \begin{enumerate}[(1)]
+ \item 作業ディレクトリketcindyを開く.
+ \item ketcindyの中のtemplate1basic.cdyを選び,「情報を見る」を開く.
+ \begin{itemize}
+ \item アプリケーションが所定のCinderella2になっていることを確かめる.
+ \item「情報」を閉じて,template1basic.cdyをダブルクリックする.
+ \item 画面に白い枠が出れば,ライブラリの読み込みは成功.
+ \end{itemize}
+ \item スクリーンの左上部にあるFigureボタンを押して,PDFが表示されれば成功.
+ \begin{itemize}
+ \item[注)]PDFの表示後,ターミナル画面を閉じるようにするには
+ \begin{itemize}
+ \item アプリケーション \verb|/| ユーティリティ \verb|/| ターミナルを開く
+ \item トップメニューから\\
+ \hspace*{5mm}ターミナル>環境設定 \verb|>|(プロファイル)\verb|>| シェル\\
+ \hspace*{10mm}「シェルが正常に終了した場合閉じる」を選択
+ \end{itemize}
+ \item[注)]インストール用のketcindy(-master)フォルダは削除した方が混乱しない.
+ \end{itemize}
+ \end{enumerate}
+
+\item TeXworksの設定(kettexの場合)
+ \begin{itemize}
+ \item \url{https://github.com/TeXworks/texworks/releases/} からダウンロードできる.
+ \item TeXworksを立ち上げる
+ \item TeXworks \verb|>| 環境設定 \verb|>| タイプセット
+ \item 上の欄(パス)に以下を追加\\
+ \hspace*{5mm}\verb|/Applications/kettex/texlive/bin/x86_64-darwin|\\
+ \hspace*{10mm}注) 上の行を上の欄の先頭になるように移動する.
+ \item 下の欄の横にある + をクリック
+ \begin{itemize}
+ \item 名前:uplatex(ptex2pdf)またはplatex(ptex2pdf)
+ \item プログラム : ptex2pdf
+ \item 引数:\\
+ \hspace*{10mm} \verb|-u|(uplatexの場合のみ)\\
+ \hspace*{10mm} \verb|-l|\\
+ \hspace*{10mm} \verb|-ot|\\
+ \hspace*{10mm} \verb|$synctexoption|\\
+ \hspace*{10mm} \verb|$fullname|
+ \item[]OKボタンを押し,デフォルトを変更してOKボタンを押す.
+ \end{itemize}
+ \end{itemize}
+\item gccのインストール
+ \begin{itemize}
+ \item 曲面描画のためには, gccが必要である.
+ \item Xcodeがインストールされていなければ,インストールする.\\
+ \hspace*{5mm}注) ターミナルで次を実行すれば,gccだけがインストールされる.\\
+ \hspace*{20mm}\verb|sudo xcode-select --install|
+ \end{itemize}
+
+\item 手動でインストールする場合(KeTTeX)\\
+\hspace*{1zw}注)他のTeXの場合は,適宜パスを置き換える.\\
+\hspace*{3zw}\verb|/Applications/kettex/texlive| $=>$ \verb|/Library/TeX/Root| など
+ \begin{enumerate}[(1)]
+ \item ketcindy(-master)/ketcindyfolderを開いておく.
+ \item scriptsフォルダの中身を以下にコピーする.\\
+ \verb|/Applications/kettex/texlive/texmf-dist/scripts/ketcindy|
+ \item styleフォルダの中身を以下にコピーする.\\
+ \verb|/Applications/kettex/texlive/texmf-dist/tex/latex/ketcindy|
+ \item ターミナルで以下を実行する\\
+ \hspace*{1zw}\verb|sudo /Applications/kettex/texlive/bin/x86_64-darwin/mktexlsr|
+ \item /Applications/Cinderella2(.app)をダブルクリック
+ \item メニューから 「スクリプト」>「プラグインを開く」を選び,Pluginsフォルダを開く.
+ \item scripts/ketjava/KetCindyPlugin.jarをPluginsにコピーする.
+ \item ketcindy(-master)/forMac/Forsettingmanually/ketcindy.iniをPluginsにコピーする.\\
+ \hspace*{2zw}注)他のTeX の場合は,ketcindy.iniをテキストエディタで開いて修正する.
+ \item Puginsを閉じ,Cinderella2を終了する.
+ \item workを適当な場所にコピーして,名前を変更する.\\
+\hspace*{2zw}注)標準は パス:ユーザーホーム(の直下) 名前:ketcindy
+ \item 上の作業ディレクトリ(ketcindy)に doc/ketmanual のマニュアルをコピーする.
+ \item forMacにある ketcindy.conf をテキストエディタで開き,適宜修正する.
+ \item ターミナルで以下を実行する.\\
+ \hspace*{1zw}\verb|cp (forMacのパス)/ketcindy.conf ~/.ketcindy.conf|
+ \end{enumerate}
+\end{enumerate}
+
+\end{document} \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/readme/ReadmeWinE.tex b/graphics/ketcindy/ketcindyfolder/doc/source/readme/ReadmeWinE.tex
new file mode 100644
index 0000000000..58aa67c2b4
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/readme/ReadmeWinE.tex
@@ -0,0 +1,135 @@
+\documentclass{article}
+\usepackage{ketpic,ketlayer}
+\usepackage{amsmath,amssymb}
+\usepackage{graphicx}
+\usepackage{xcolor}
+\usepackage{bm,enumerate}
+\usepackage[colorlinks=true,urlcolor=blue]{hyperref}
+
+\setmargin{20}{20}{20}{20}
+
+\renewcommand{\labelitemi}{$\cdot$}
+\renewcommand{\labelitemii}{$\cdot$}
+
+\begin{document}
+
+\begin{center}
+How to install KeTCindy(Windows)
+\end{center}
+
+\hfill modified\ :\ \today
+
+\begin{enumerate}[\bf\large 1.]
+
+\item Install Cinderella, R and Maxima.
+ \begin{itemize}
+ \item \url{https://beta.cinderella.de} (Cinderella)
+ \item \url{https://cran.r-project.org} (R)
+ \item \url{https://sourceforge.net/projects/maxima/files} (Maxima)
+ \item \url{https://www.sumatrapdfreader.org/download-free-pdf-viewer.html} (Sumatra)
+ \end{itemize}
+\hspace*{5mm}Rem) Check they start correctly.
+
+\item Install TeX if any TeX has not been installed.
+ \begin{enumerate}[(1)]
+ \item TeXLive is recommended.
+ \begin{itemize}
+ \item Files necessary for KeTCindy are already implemented (2018 or later).
+ \end{itemize}
+ \item kettex is a light-weight TeXLive.
+ \begin{itemize}
+ \item Download kettex.zip from\\
+ \hspace*{10mm}\url{https://www.dropbox.com/s/fthw4btjqqs33tc/kettex.exe?dl=0}
+ \item Double-click it and move kettex to \verb|C:\|.
+ \end{itemize}
+ \item In case of other TeX, see {\bf 3.}(2).
+ \end{enumerate}
+
+
+\item Install KeTCdindy
+ \begin{enumerate}[(1)]
+ \item Download ketcindy from CTAN(\url{https://ctan.org})\\
+ \hspace*{10mm}Search ketcindy \verb|>| Pack­age ketcindy \verb|>| download
+ \begin{itemize}
+ \item[Rem)]The latest version can be download from Repository:\\
+ \hspace*{5mm}\url{https://github.com/ket­pic/ketcindy}\\
+ \hspace*{10mm}Clone or Download \verb|>| Download ZIP
+ \item[Rem)]Move the extracted folder to Desktop.
+ \end{itemize}
+ \item Open ketcindy(-master)/forWindows.
+ \begin{itemize}
+ \item[Rem)]If you use TeX other than TeXLIve/KeTTeX,
+ \begin{itemize}
+ \item Open setketcindy.bat with a text editor.
+ \item Edit paths in it.
+ \end{itemize}
+ \end{itemize}
+ \item Right click a following batch file setketcindy.bat and select "Run as adiministrator".\\
+ \hspace*{10mm}\Ltab{15mm}{KeTTeX} setketcindy.bat\\
+ \hspace*{10mm}\Ltab{15mm}{TeXLive} setketcindytexlive.bat\\
+ \hspace*{10mm}\Ltab{15mm}{Others} edited setketcindy.bat
+ \item[Rem)]In the case of Windows10, unblock the security block. \begin{itemize}
+ \item Contents of scripts will be copied into TeX.
+ \item ketcindystyle files will be copied and mktexlsr will be executed.
+ \item In Cinderella/PlugIns\\
+ \hspace*{5mm}KetcindyPluign.jar will be copied.\\
+ \hspace*{5mm}ketcindy.ini will be generated (if make/remake is chosen).
+ \item TeX(typeset) will be usually latex,xelatex or pdflatex.
+ \item Input the version numbers of R, Maxima, for example 3.4.2,\ 5.37.3.
+
+ \end{itemize}
+ \item Double-click setwork.bat.
+ \begin{itemize}
+ \item[Rem)]Control-click and select Terminal if necessary.
+ \end{itemize}
+ \begin{itemize}
+ \item Work directory "ketcindy" will be generated in User's home.
+ \item Contents of “work” will be copied into "ketcindy"
+ \item \verb|.ketcindy.conf| will be also generated in User's home.\\
+ \hspace*{10mm}You can change the setting of PasthT, Mackc, etc.
+ \item Template of "ketcindy.conf" will be also copied to work directory.
+ \item Configuration files are read in order of
+ \begin{enumerate}[1)]
+ \item ketoutset.txt
+ \item ketcindy.conf in User's home
+ \item ketcindy.conf in the work folder.
+ \end{enumerate}
+ \end{itemize}
+ \end{enumerate}
+
+\item Test run of KeTCindy
+ \begin{enumerate}[(1)]
+ \item Double-click "template1basic.cdy" in work directory "ketcindy".\\
+ \hspace*{10mm}Then a frame in white appear on the screen.
+ \item Press "Figure" button at the top left, then the final PDF output is displayed.
+ \begin{itemize}
+ \item[Rem)]To close the window of Terminal when the process exits :
+ \begin{itemize}
+ \item Start \verb|Terminal|.\\
+ \hspace*{10mm}Preferences > Shell \verb|>| "Colse if the shell exited clearly"
+ \end{itemize}
+ \item[Rem)]It will be better to delete installer folder "ketcindy(-master)" .
+ \end{itemize}
+ \end{enumerate}
+
+\item Set Texworks if necessary. For example, in case of KeTTeX,
+ \begin{itemize}
+ \item Downloadable from \url{https://github.com/TeXworks/texworks/releases/}.
+ \item Launch TeXworks,\\
+ \hspace*{10mm}and choose Edit \verb|>| Files verb|>| Preference \verb|>| Typeset.
+ \item Push upper + and add\\
+ \hspace*{5mm}\verb|C:\kettex\texlive\bin\win32|
+ \item Select Xelatex or pdflatex.
+ \end{itemize}
+
+\item Install gcc for surface drawing.
+ \begin{itemize}
+ \item Go to minGW(\url{http://www.mingw.org}).
+ \item Download\\
+ \hspace*{10mm}download \verb|>| Install \verb|>| mingw-get-setup.exe
+ \item Only \verb|mingw32-base, mingw32-gcc-g++| are needed.
+ \end{itemize}
+
+\end{enumerate}
+
+\end{document} \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/readme/ReadmeWinJ.tex b/graphics/ketcindy/ketcindyfolder/doc/source/readme/ReadmeWinJ.tex
new file mode 100644
index 0000000000..199fed6ce2
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/readme/ReadmeWinJ.tex
@@ -0,0 +1,179 @@
+\documentclass{ujarticle}
+\usepackage{ketpic,ketlayer}
+\usepackage{amsmath,amssymb}
+\usepackage{graphicx}
+\usepackage{xcolor}
+\usepackage{bm,enumerate}
+\usepackage[dvipdfmx,colorlinks=true,urlcolor=blue]{hyperref}
+
+\setmargin{20}{20}{20}{20}
+
+\西暦
+
+\renewcommand{\labelitemi}{・}
+\renewcommand{\labelitemii}{・}
+
+\begin{document}
+
+\begin{center}
+KETCindyのインストール (Windows)
+\end{center}
+
+\hfill 修正日:\today
+
+\begin{enumerate}[\bf\large 1.]
+\item Cinderella, R, Maxima をインストールする.
+ \begin{itemize}
+ \item \url{https://beta.cinderella.de} (Cinderella)
+ \item \url{https://cran.r-project.org} (R)
+ \item \url{https://sourceforge.net/projects/maxima/files} (Maxima)\\
+\hspace*{1zw}・v5.38.0以前の方がv5.40.0以降より軽い.
+ \item \url{https://www.sumatrapdfreader.org/download-free-pdf-viewer.html} (Sumatra)\\ \hspace*{10mm}注)SumatraはWindowsだけである.
+ \end{itemize}
+ 注) ダブルクリックして,起動するかを確認する.
+
+\item TeXをインストールしていない場合はインストールする.
+ \begin{enumerate}[(1)]
+ \item TeXLiveを推奨
+ \begin{itemize}
+ \item 2018以降ではketcindyが既に入っている.
+ \end{itemize}
+ \item KeTTeXはTeXLiveの軽量版
+ \begin{itemize}
+ \item kettex.exeを以下からダウンロードできる.\\
+ \hspace*{10mm}\url{https://www.dropbox.com/s/fthw4btjqqs33tc/kettex.exe?dl=0}
+ \item ダブルクリックしてできるkettexを\verb|C:\|に入れる.
+ \end{itemize}
+ \item 他のTeXの場合は,{\bf 3.}(2)を参照する.
+ \end{enumerate}
+
+\item KeTCindyのインストール
+ \begin{enumerate}[(1)]
+ \item ketcindyをCTAN(\url{https://ctan.org})からダウンロードする.\\
+ \hspace*{10mm}ketcindyで検索 \verb|>| Package ketcindy \verb|>| download
+ \begin{itemize}
+ \item[注)]最新版は,Repositoryのサイト\\
+ \hspace*{10mm}\url{https://github.com/ket­pic/ketcindy}\\
+ から以下のようにダウンロードできる.\\
+ \hspace*{10mm}Clone or download \verb|>| Download ZIP\\
+ この場合は,ketcindy-masterになる.
+ \item[注)]解凍してできるフォルダをデスクトップに移動する.
+ \end{itemize}
+ \item ketcindy(-master)/forWindowsを開く.
+ \begin{itemize}
+ \item[注)]Windows10の場合,セキュリティブロックを解除する.\\
+\hspace*{5mm}右クリックして「プロパティ」>「セキュリティ」>「許可」
+ \item[注)]他のTeX(TeXLive,W32tex以外)を使っている場合
+ \begin{itemize}
+ \item setketcindy.bat をテキストエディタで開く.
+ \item パスを修正する.
+ \end{itemize}
+ \end{itemize}
+ \item 次のいずれかのバッチファイルを右クリック「管理者として実行」を選ぶ.\\
+ \hspace*{3zw}\Ltab{5zw}{KeTTeX} setketcindykettex.bat\\
+ \hspace*{3zw}\Ltab{5zw}{TeXLive} setketcindytexlive.bat\\
+ \hspace*{3zw}\Ltab{5zw}{W32TeX} setketcindyw32J.bat\\
+ \hspace*{3zw}\Ltab{5zw}{他のTeX} setketcindy.bat(要修正)
+ \begin{itemize}
+ \item scriptsの中身がTeXにコピーされる
+ \item ketcindyのstyleファイルがTeXにコピーされmktexlsrが実行される.
+ \item CinderellaのPluginsにKetcindyPlugin.jarがコピーされる.
+ \item Pluginsにketcindy.iniが作成される(作成または再作成を選んだ場合).
+ \item タイプセットの方法(TeXの種類)\\
+ \hspace*{10mm}通常は,platex (p)またはuplatex(u)を選ぶ.
+ \item R,\ Maximaでは,バージョン番号(3.4.2,\ 5.37.3など)を入れる.
+ \end{itemize}
+ \item setwork.batをダブルクリック
+ \begin{itemize}
+ \item 作業ディレクトリketcindyがユーザホームに作成される.
+ \item ketcindyフォルダにworkフォルダの中身がコピーされる.
+ \item \verb|.ketcindy.conf|(編集可能)がユーザホームに作成される.\\
+ \hspace*{10mm}注)TeXを切り替えるときなどはこのファイルを修正する.
+ \item マニュアルもコピーされる.
+ \item 作業ディレクトリにketincy.confの雛形がコピーされる.
+ \item KeTCindyを立ち上げたとき,設定ファイルは次の順に読み込まれる.
+ \begin{enumerate}[1)]
+ \item ketoutset.txt
+ \item ユーザホームの\verb|.ketcindy.conf|
+ \item 作業ディレクトリketcindyの ketcindy.conf
+ \end{enumerate}
+ \end{itemize}
+ \end{enumerate}
+ \item KeTCindyのテストラン
+ \begin{enumerate}[(1)]
+ \item 作業ディレクトリketcindyを開く.
+ \item ketcindyの中のtemplate1basic.cdyを選び,「情報を見る」を開く.
+ \begin{itemize}
+ \item アプリケーションが所定のCinderella2になっていることを確かめる.
+ \item「情報」を閉じて,template1basic.cdyをダブルクリックする.
+ \item 画面に白い枠が出れば,ライブラリの読み込みは成功.
+ \end{itemize}
+ \item スクリーンの左上部にあるFigureボタンを押して,PDFが表示されれば成功.
+ \begin{itemize}
+ \item[注)]PDFの表示後,ターミナル画面を閉じるようにするには
+ \begin{itemize}
+ \item アプリケーション \verb|/| ユーティリティ \verb|/| ターミナルを開く
+ \item トップメニューから\\
+ \hspace*{5mm}ターミナル>環境設定 \verb|>|(プロファイル)\verb|>| シェル\\
+ \hspace*{10mm}「シェルが正常に終了した場合閉じる」を選択
+ \end{itemize}
+ \item[注)]インストール用のketcindy(-master)フォルダは削除した方が混乱しない.
+ \end{itemize}
+ \end{enumerate}
+
+\item TeXworksの設定(kettexの場合)
+ \begin{itemize}
+ \item \url{https://github.com/TeXworks/texworks/releases/} からダウンロードできる.
+ \item TeXworksを立ち上げる
+ \item TeXworks \verb|>| ファイル \verb|>| 設定 \verb|>| タイプセット
+ \item 上の欄(パス)に以下を追加\\
+ \hspace*{5mm}\verb|C:\kettex\texlive\bin\win32|\\
+ \hspace*{10mm}注) 上の行を上の欄の先頭になるように移動する.
+ \item 下の欄の横にある + をクリック
+ \begin{itemize}
+ \item 名前:uplatex(ptex2pdf)またはplatex(ptex2pdf)
+ \item プログラム : ptex2pdf
+ \item 引数:\\
+ \hspace*{10mm} \verb|-u|(uplatexの場合のみ)\\
+ \hspace*{10mm} \verb|-l|\\
+ \hspace*{10mm} \verb|-ot|\\
+ \hspace*{10mm} \verb|$synctexoption|\\
+ \hspace*{10mm} \verb|$fullname|
+ \item[]OKボタンを押し,デフォルトを変更してOKボタンを押す.
+ \end{itemize}
+ \end{itemize}
+\item gccのインストール
+ \begin{itemize}
+ \item 曲面描画のためには, gccが必要である.
+ \item minGWのホームページ\url{http://www.mingw.org}から\\
+ \hspace*{10mm}download \verb|>| Install \verb|>| mingw-get-setup.exe\\
+ をダウンロードして実行\\
+ \hspace*{10mm}注) パッケージは,mingw32-base, mingw32-gcc-g++だけでよい.
+ \end{itemize}
+
+\item 手動でインストールする場合(KeTTeX)\\
+\hspace*{1zw}注)他のTeXの場合は,適宜パスを置き換える.\\
+\hspace*{3zw}\verb|C:\kettex\texlive| $=>$ \verb|C:\texlive\2018| など
+ \begin{enumerate}[(1)]
+ \item \verb|ketcindy(-master)\ketcindyfolder|を開いておく.
+ \item scriptsフォルダの中身を以下にコピーする.\\
+ \verb|C:\kettex\texlive\texmf-dist\scripts\ketcindy|
+ \item styleフォルダの中身を以下にコピーする.\\
+ \verb|C:\kettex\texlive\texmf-dist\tex\latex\ketcindy|
+ \item コマンドプロンプトで以下を実行する\\
+ \hspace*{1zw}\verb|C:\kettex\texlive\bin\win32\mktexlsr|
+ \item \verb|C:\Program files\Cinderella2(.exe)|をダブルクリック
+ \item メニューから 「スクリプト」>「プラグインを開く」を選び,Pluginsフォルダを開く.
+ \item \verb|scripts\ketjava\KetCindyPlugin.jar|をPluginsにコピーする.
+ \item \verb|ketcindy(-master)\forWindows\Forsettingmanually\ketcindy.ini|をPluginsにコピーする.\\
+ \hspace*{2zw}注)他のTeX の場合は,ketcindy.iniをテキストエディタで開いて修正する.
+ \item Puginsを閉じ,Cinderella2を終了する.
+ \item workを適当な場所にコピーして,名前を変更する.\\
+\hspace*{2zw}注)標準は パス:ユーザーホーム(の直下) 名前:ketcindy
+ \item 上の作業ディレクトリ(ketcindy) に \verb|doc\ketmanual| のマニュアルをコピーする.
+ \item forWindowsにある ketcindy.conf をテキストエディタで開き,適宜修正する.
+ \item ユーザホームにコピーして,名前を \verb|.ketcindy.conf| に変える.
+ \end{enumerate}
+\end{enumerate}
+
+\end{document} \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/spacekc/SpacekcReferenceE.tex b/graphics/ketcindy/ketcindyfolder/doc/source/spacekc/SpacekcReferenceE.tex
new file mode 100644
index 0000000000..642b5efe38
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/spacekc/SpacekcReferenceE.tex
@@ -0,0 +1,619 @@
+\documentclass[papersize,a4paper,12pt]{article}
+\usepackage{ketpic,ketlayer}
+\usepackage{amsmath}
+\usepackage{graphicx,color}
+\usepackage{wrapfig}
+\usepackage[bookmarks=false,colorlinks=true,linkcolor=blue]{hyperref}
+\setmargin{20}{20}{15}{25}
+\usepackage{setspace}
+\usepackage{comment}
+\usepackage{bm,enumerate}
+\begin{document}
+\title{Spacekc Reference}
+\author{CinderellaJapan}
+\maketitle
+
+\tableofcontents
+
+\newpage
+
+% Section 1 Introduction =======================================
+\section{Introduction }
+Spacekc is a function library on Ketcindy. To KeTCindy's 3D graphics, color with simple raytracing
+be able to. In addition, several functions for calculating relating to space are prepared.
+
+%Section 2 ==========================================
+\section{Constant}
+
+\begin{description}
+
+\hypertarget{lightpoint}{}
+\item[Direction vector of light source] Lightpoint
+\item[Description] Direction vector of light source for simplified ray tracing. Default is [-1,1,1].
+
+\vspace{\baselineskip}
+\hypertarget{contrast}{}
+\item[Contrast] Contrast
+\item[Description] Contrast in the direction of light when performing simple ray tracing. Standard is a real number between 0 and 1.
+
+\end{description}
+
+%Section 3 Value ==========================================
+\section{Value}
+\begin{description}
+
+\hypertarget{angle3pt}{}
+\item[Function] angle3pt(coordinate1,coordinate2,coordinate3)
+\item[Description] Find an angle on a 2D plane.
+\item[Return value] This function is return ∠p1p2p3 for point p1,p2,p3.
+
+\vspace{\baselineskip}
+
+\hypertarget{pointindomain}{}
+\item[Function] pointindomain(coordinate1,list of point)
+\item[Description] Judgment whether or not there is a point in the closed curve.
+\item[Return value] The judgment that this function has a point of coordinate1 in the closed curve of the list of points on a plane. The case in the domain return 1 , out of domain return 0, on a boundary line return 2.
+
+\vspace{\baselineskip}
+
+\hypertarget{crosssd}{}
+\item[Function] crosssd(coordinate1,coordinate2,coordinate3,coordinate4)
+\item[Description] determine whether two segments cross in 2D plane
+\item[Description] judge it whether a segment of links coordinate 3, coordinate 4 to the segment of linking coordinate 1, coordinate 2 has a common point.
+\item[Return value] When there is a common point, true is returned, and false is returned when there is not it.
+
+\vspace{\baselineskip}
+
+\hypertarget{interll}{}
+\item[Function] interll(coordinate1,coordinate2,coordinate3,coordinate4)
+\item[Description] Demand the point of intersection of the two straight lines
+\item[Return value] Demand the coordinate of the point of intersection with the straight line via coordinate 1, coordinate 2 and coordinate 3, coordinate 4. When there is not a point of intersection, It return [i,i,i].
+
+\vspace{\baselineskip}
+
+\hypertarget{interss}{}
+\item[Function] interss(coordinate1,coordinate2,coordinate3,coordinate4)
+\item[Description] Demand the point of intersection of the two segments.
+\item[Return value]Demand the coordinate of the point of intersection with the segment via coordinate 1, coordinate 2 and coordinate 3, coordinate 4.
+
+ When there is not a point of intersection, It return [i,i,i].
+
+\vspace{\baselineskip}
+\hypertarget{interpl}{}
+\item[Function]interpl(list of coefficients ,coordinate1,coordinate2)
+\item[Description] Demand a plane and the point of intersection of the straight line.
+\item[Return value] Demand the coordinate of the point of intersection with the plane via coordinate 1, coordinate 2, coordinate 3 and line via coordinate 4 , coordinate 5.
+
+ When there is not a point of intersection, It return [i,i,i].
+
+\vspace{\baselineskip}
+\hypertarget{interps}{}
+\item[Function] interps(list of coefficients ,coordinate1,coordinate2)
+\item[Description] Demand a plane and the point of intersection of the segment
+\item[Return value] Demand the coordinate of the point of intersection with the plane via coordinate 1, coordinate 2, coordinate 3 and segment to link coordinate 4 to coordinate 5.
+
+ When there is not a point of intersection, It return [i,i,i].
+
+\hypertarget{distlp}{}
+\item[Function] distlp(coordinate1,coordinate2,coordinate3)
+\item[Description] Distance of a line to a point .
+\item[Return value] It find a straight line via coordinate1 and coordinate2 and the distance with the point of coordinate3. The return value is distance. When coordinate 1 and coordinate 2 is equal, return imaginary unit i and display warning "Warning:p1 is same to p2" to a console.
+
+Example println(distlp([1,0],[0,1],[0,0])); \\
+In addition, 0.71 is displayed to a console by plintln(), but is displayed with 1/2*sqrt(2) by \\
+   println(guess(distlp([1,0],[0,1],[0,0])));\\
+
+Example println(distlp([1,1,0],[0,0,1],[0,0,0]));
+In addition, 0.82 is displayed to a console by plintln(), but is displayed with 1/3*sqrt(6) by \\
+   println(guess(distlp([1,1,0],[0,0,1],[0,0,0])));\\
+
+
+\vspace{\baselineskip}
+\hypertarget{distpp}{}
+\item[Function] distpp(coordinate1,coordinate2,coordinate3,coordinate4)
+\item[Description] Distance of a plene and a point in 3D space
+\item[Return value] It find a plane via coordinate1 ,coordinate2 and coordinate2 and the distance with the point of coordinate4. The return value is distance.
+
+Example distpp([2,0,0],[0,2,0],[0,0,2],[0,0,0]);\\
+     return value is $\cfrac{2\sqrt{3}}{3}$ \\
+
+\vspace{\baselineskip}
+\hypertarget{map2d}{}
+\item[Function] Coordinate of the point that projection of space
+\item[Description] In a current screen set with a circular slider, It find the coordinate which performed a projection of a point on the space on a plane.
+\item[Return value] coordinate
+
+Example : pt=map2d([1,2,3]);
+
+It is exactly the same as KeTindy's Parapt ().
+
+%\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$Function] list}\end{flushright}
+
+\hypertarget{normalvec}{}
+\item[Function] normalvec(coordinate1,coordinate2,coordinate3)
+\item[Description] It demand a plane unit normal vector via coordinate 1, coordinate 2, coordinate 3.
+\item[Return value] normal vector.
+
+ The direction of the vector is decided in order of a point.\\
+Exsample normalvec([2,0,0],[0,2,0],[0,0,2]);\\
+  Result is $\left(\cfrac{\sqrt{3}}{3},\cfrac{\sqrt{3}}{3},\cfrac{\sqrt{3}}{3}\right)$\\
+  normalvec([2,0,0],[0,0,2],[0,2,0]); \\
+ Result is $\left(-\cfrac{\sqrt{3}}{3},-\cfrac{\sqrt{3}}{3},-\cfrac{\sqrt{3}}{3}\right)$\\
+
+The vector of the perpendicular line which you gave to a plane is provided when you use distpp()\\
+
+  nv=normalvec([2,0,0],[0,2,0],[0,0,2]);\\
+  dd=distpp([2,0,0],[0,2,0],[0,0,2],[0,0,0]);\\
+  poly3d([[2,0,0],[0,2,0],[0,0,2]]);\\
+  arrow3d([[0,0,0],dd*nv]);\\
+  Letter3d([dd*nv,"e","H"]);\\
+
+  \input{3Dfig/nomalvec01}\\
+
+
+%\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$Function] list}\end{flushright}
+
+
+\hypertarget{planecoeff}{}
+\item[Function] planecoeff(coordinate1,coordinate2,coordinate3)
+\item[Description] It demands coefficient $a,b,c$ of plane equation $ax+by+cz=1$ going along three points of coordinate 1 and coordinate 2 and coordinate 3.
+\item[Return value] List [a,b,c]. When coefficiets not exist, "Warning! Cannot decide a coefficient." is displayed and return [i,i,i].\\
+
+
+\vspace{\baselineskip}
+\hypertarget{reflect3d}{}
+\item[Function] reflect3d(dlist,mirror)
+\item[Description] Reflection of dlist. dlist is point or plot data or face data.
+\item[Return value] Data of the same type as the first argument.
+
+\vspace{\baselineskip}
+
+\hypertarget{rotate3d}{}
+\item[Function] rotate3d(dlist,vec,angle,center)
+\item[Description] Rotaate of dlist. dlist is point or plot data or face data.
+\item[Return value] Data of the same type as the first argument.
+
+
+\hypertarget{translate3d}{}
+\item[Function] rotate3d(dlist,vec,angle,center)
+\item[Description] Translate of dlist. dlist is point or plot data or face data.
+\item[Return value] Data of the same type as the first argument.
+
+%\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$Function] list}\end{flushright}
+
+\vspace{\baselineskip}
+\hypertarget{rotmatrix}{}
+\item[Function] rotmatrix(vec)
+\item[Description] Make rotation matrix from normal vectors.
+\item[Return value] List.
+
+\vspace{\baselineskip}
+
+\hypertarget{vertexrpolyhedron}{}
+\item[Function] vertexrpolyhedron(n)
+\item[Description] Acquire a list of tops of the regular polyhedron
+\item[Description] The value of n is one of 4,6,8,12,20.
+\item[Return value] list of vertexs of the regular polyhedron that touches the spherical surface of radius 1 internally. The turn of the vertexs are as follows. It is alphabetical order each.
+
+\input{3Dfig/vertex4} \input{3Dfig/vertex6}
+
+\input{3Dfig/vertex8} \input{3Dfig/vertex12}
+
+\input{3Dfig/vertex20}
+
+%\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$Function] list}\end{flushright}
+
+\hypertarget{val2tex}{}\item[Function] val2tex(x)
+\item[Description] Analyze numerical values with guess ()
+\item[Return value] TeX character string.
+
+Example
+\begin{verbatim}
+ pa=[2,0,0];
+ pb=[0,2,0];
+ pc=[0,0,2];
+ nv=normalvec(pa,pb,pc);
+ hv=distpp(pa,pb,pc,[0,0,0])*nv;
+ hvstr=apply(hv,val2tex(#));
+ plate3d("1",[pa,pb,pc],["Color=skyblue","Rayoff"]);
+ poly3d("1",[pa,pb,pc]);
+ arrow3d("1",[[0,0,0],hv],["size=2"]);
+ letter3d([pa,"s2",text(pa_1),pb,"s2",text(pb_2),pc,"w2",text(pc_3),
+ hv,"ne2","H$\left( "+hvstr_1+","+hvstr_2+","+hvstr_3+" \right)$"]);
+\end{verbatim}
+
+%\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$Function] list}\end{flushright}
+
+\end{description}
+\newpage
+
+%Section 4 Drawing =========================================
+\section{Drawing}
+
+\textbf{options}
+
+<Density of the mesh> The curved surface is described in mesh. This options appoints the number of process lines of this time.
+
+The density of the mesh is appointed like "Mesh=[10,15]".
+
+<Concentration>The concentration is appointed with real numbers from 0 to 1.
+
+\textbf{<Ray tracing>}
+
+Specify whether to add shadows in ray tracing. When shadowing "Rayon", do not shade when "Rayoff". The default setting is "Rayon"
+
+%\newpage
+\begin{description}
+
+\hypertarget{grid}{}
+\item[Function] grid(range1,range2,ne,option)
+\item[Description] Display grid on $ xy $ plane.
+\item[Description] Range 1 is the range of the $ x $ axis, and range 2 is the range of the $ y $ axis.
+\item[Return value] none.
+
+%\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$Function] list}\end{flushright}
+
+\hypertarget{line3d}{}
+\item[Function] line3d(name,list ,option)
+\item[Description] This function draws a lint linking two points in list of the argument.
+\item[Return value] list of 2nd argument.
+
+%\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$Function] list}\end{flushright}
+
+\hypertarget{arrow3d}{}
+\item[Function] arrow3d(name,list,option)
+\item[Description] This function draws an arrowed line by list of two points of coordinates.
+ \item[Return value] list of 2nd argument.
+
+\vspace{\baselineskip}
+ Example The next script draws an arrowed line linking two points of $(1,3,2), (-2,-1,-2)$.
+
+\hspace{10mm} \verb|arrow3d("1",[[1,3,2],[-2,-1,-2]])|
+
+ Example The next script draw a straight line via two points of $(1,3,2), (-2,-1,-2)$ with 2 thickness red.
+
+\hspace{10mm} \verb|arrow3d("1",[[2,0,0],[-1,4,1]],[2,1,1,"dr,2","Color=red"])|
+
+%\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$Function] list}\end{flushright}
+
+\hypertarget{poly3d}{}
+\item[Function] poly3d(name,list,option)
+\item[Description] This function draws a polygon to link the point that I gave in list.
+ The point to give in list does not need to be closed. It is closed automatically and is drawn.
+\item[Return value] Plot data of the drawn polygon.
+
+ Example The next script draws a triangle to assume three points of $(1,1,1), (2,2,1),(0,1,-1)$ a top.
+\begin{verbatim}
+ pd=[[1,1,1],[2,2,1],[0,1,-1]];
+ poly3d("1",pd);
+\end{verbatim}
+
+%\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$Function] list}\end{flushright}
+
+\hypertarget{plate3d}{}
+\item[Function] plate3d(name,list,option)
+\item[Description] This function applies a polygon to link the point that I gave in list.
+\item[Return value] Plot data of the drawn polygon.
+
+With the Rayoff option, ray tracing is not performed.
+
+ Example : The next script applies a triangle to assume three points of $(1,1,1), (2,2,1),(0,1,-1)$ a top with red.
+\begin{verbatim}
+ pd=[[1,1,1],[2,2,1],[0,1,-1]];
+ plate3d("1",pd,["Color=Red"]);
+\end{verbatim}
+
+%\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$Function] list}\end{flushright}
+
+\hypertarget{circle3d}{}
+\item[Function] circle3d(name,center,normal vector,radius,option)
+\item[Description] This function gives the center, a radius and a normal vector and draws the circle.
+\item[Return value] Plotdata of circle.
+
+ Example : The next script describes the circle that central $(1,1,1)$, radius 2, a normal vector are (1,1,1) in thickness 2, red.\\
+
+\verb| circle3d("1",[1,1,1],[1,1,1],2,["dr,2","Color=Red"]); |
+
+%\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$Function] list}\end{flushright}
+
+\hypertarget{drawarc3d}{}
+\item[Function] drawarc3d(name,center,normal vector,radius,range,option)
+\item[Description] Draw an arc as a part of the circle drawn by giving the center, radius and normal vector.
+\item[Return value] Plotdata of arc.
+
+ Example : Draw arc with center $ (1,1,1) $, radius 2, normal vector (-1, 1, 1).
+
+\verb| drawarc3d("1",[1,1,1],[-1,1,1],2,[0,2*pi/3]); |
+
+%\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$Function] list}\end{flushright}
+
+\hypertarget{disc3d}{}
+\item[Function] disc3d(center,nomal vector,radius,options)
+\item[Description] This function gives the center, a radius and a normal vector and draws a disk.
+\item[Return value] Plotdata of circle.
+
+With the Rayoff option, ray tracing is not performed.
+
+ Example : The next script draws the disk that central $(1,1,1)$, radius 2, a normal vector are (1,1,1) at red\\
+
+ \verb| disc3d("1",[1,1,1],[1,1,1],2,["Color=Red"]); |
+
+%\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$Function] list}\end{flushright}
+
+\hypertarget{drawsphere}{}
+\item[Function] drawsphere(name,center,radius,opton)
+\item[Description] This function describes the origin center, draw spherical surface of radius r.
+
+Draw a spherical surface with gradation by using simple ray tracing. The spheres are divided into meshes and coloring is done.
+
+The radius can also be specified as a list for the x axis, y axis, z axis direction.
+
+Drawing takes time. If it takes too much time, try drawing with "Mesh = [10, 10]" as an option. If you can draw it, make the mesh finer. The initial value is "Mesh = [30, 20]".
+
+\item[Return value] none
+
+\vspace{\baselineskip}
+Example : Origin center, spherical surface with radius 2 (left figure)
+
+\verb|drawsphere("1",[0,0,0],2) |
+
+Draw a sphere with an ellipse shape in green (0, 0, 2) and a radius [1, 1, 2] in green ( right figure)
+
+\verb|drawsphere("1",[0,0,2],[1,1,2],["Color=green","Mesh=[20,20]"])|
+
+ \input{3Dfig/sphere01} \hspace{10mm} \input{3Dfig/sphere02}
+
+%\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$Function] list}\end{flushright}
+
+\hypertarget{quasisphere}{}
+\item[Function] quasisphere(name,center,radius,fill,opton)
+\item[Description] This function describes the origin center, draw a quasi spherical surface of radius r.
+
+fill is a flag indicating whether or not to color. If it is 1, it paints. If 0 it does not paint. This argument can be omitted. The default is 1.
+
+\item[Return value] Plotdata of circle.
+
+\vspace{\baselineskip}
+Example \verb|quasisphere("1",[0,0,1],1]);|
+
+ \input{3Dfig/sphere03}
+
+It is faster than drawing with Sfbdparadata () and ExeccmdC () because it does not handle hidden lines. By using this, if you make a script like the following, you can see that pseudo sphere is sufficient.
+
+\begin{verbatim}
+pd1=quasisphere("1",[0,0,0],2,["nodisp"]);
+pd2=circle3d("1",[0,0,0],[0,1,sqrt(3)],2,["nodisp"]);
+pd3=circle3d("2",[0,0,-1],[0,0,1],sqrt(3),["nodisp"]);
+sp=apply(pd1,map2d(#));
+su1=apply(pd2,map2d(#));
+su2=apply(pd3,map2d(#));
+Listplot("1",sp,["nodisp"]);
+Listplot("2",su1);
+Listplot("3",su2,["Color=blue"]);
+int1=Intersectcrvs("sg1","sg2");
+int2=Intersectcrvs("sg1","sg3");
+println(int1);
+println(int2);
+p1=int1_1;
+p2=int1_2;
+p3=int2_1;
+p4=int2_2;
+Partcrv("1", p2, p1, "sg1");
+Partcrv("2", p3, p4, "sg3",["nodisp"]);
+Partcrv("3", p4, p3, "sg1",["nodisp"]);
+Joincrvs("1",["part2","part3"],["nodisp"]);
+Shade(["join1"],["Color=[0.2,0,0,0]"]);
+\end{verbatim}
+
+ \input{3Dfig/sphere04} \hspace{10mm} \input{3Dfig/sphere05}
+
+When this script is executed, the number of intersection points int 1 and int 2 changes according to the viewpoint, so it is necessary to look at what is displayed on the console and set \verb | p1, p2, p3, p4 |.
+
+%\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$Function] list}\end{flushright}
+
+\hypertarget{polyhedron}{}
+\item[Function] polyhedron(name,face data,option)
+\item[Description] Drawing a polyhedron with colored surfaces.
+\item[Return value] face data.
+
+With the Rayoff option, ray tracing is not performed.
+
+\vspace{\baselineskip}
+ Example : Cube ABCD - EFGH is drawn in green with the plane cut through B, D and G.
+
+\hspace{30mm}\input{3Dfig/polyhedron01}
+
+For the vertices B, C, D, G, make a surface list as follows.
+
+First, add numbers 1, 2, 3, 4 to vertices B, C, D and G.
+
+The plane BCG is B, C, G counterclockwise as seen from the outside, so [1, 2, 4]
+
+Since surface CDG is similarly C, D, G, [2, 3, 4]
+
+Since the planes DGB are similarly D, B, G, [3, 1, 4]
+
+Bottom BCD is B, D, C counterclockwise as seen from the outside [1, 3, 2]
+
+ Therefore, with the coordinates of B, C, D, G as p1, p2, p3, p4, make surface data \verb | fd | as follows.
+
+\begin{verbatim}
+ p1=[2,0,0];
+ p2=[2,2,0];
+ p3=[0,2,0];
+ p4=[2,2,2];
+ fd=[[p1,p2,p3,p4],[[1,2,4],[2,3,4],[3,1,4],[1,3,2]]];
+\end{verbatim}
+
+Using this surface data, the cone is drawn as follows
+
+ \verb| polyhedron("1",fd,["Color=Green"])|
+
+\hspace{30mm}\input{3Dfig/polyhedron02}
+
+Example : Draw polyhedron using polyhedrons obj polyhedron data by Kobayashi, Suzuki, Mitani.
+  Data is a regular polyhedron, semi-regular polyhedron, Johnson's solid,
+
+\url{http://mitani.cs.tsukuba.ac.jp/polyhedron/index.html }
+
+Specify the path to the folder polyhedrons obj storing this data with \verb| Setdirectory () |, and read it with \verb | Readobj () |. For example, when placed in a work directory (fig folder)
+
+\begin{layer}{150}{0}
+\putnotese{90}{0}{\input{3Dfig/polyhedron03}}
+\end{layer}
+
+\begin{verbatim}
+ Setdirectory(Dirwork+"/polyhedrons_obj");
+ polydt=Readobj("s06.obj");
+ Setdirectory(Dirwork);
+ fd=[2*polydt_1,polydt_2];
+ polyhedron("1",fd);
+\end{verbatim}
+
+Note that \verb| fd = [2 * polydt - 1, polydt - 2] | doubles the vertex coordinates.
+
+If you are drawing an edge, add the following.
+
+\begin{verbatim}
+VertexEdgeFace("1",fd);
+Nohiddenbyfaces("1","phe3d1","phf3d1");
+\end{verbatim}
+
+%\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$Function] list}\end{flushright}
+
+\hypertarget{convexhedron}{}
+\item[Function] convexhedron(name,list ,magnification,option)
+\item[Description] Draw a convex polyhedron with a vertex list and a surface painted. Magnification is the magnification to the size actually drawn for the vertex list. If it is 1 it can be omitted.
+\item[Return value] face data
+
+\vspace{\baselineskip}
+Example : A convex polyhedron whose bottom is a pentagon
+\begin{verbatim}
+ th=2*pi/5;
+ pd=apply(1..5,[cos(#*th),sin(#*th),0]);
+ pd=pd++apply(1..5,[2*cos(#*th),2*sin(#*th),1]);
+ pd=append(pd,[0,0,2]);
+ println(pd);
+ fd=convexhedron("1",pd)
+\end{verbatim}
+\hspace{20mm}\input{3Dfig/convexhedron}
+
+If you are drawing an edge, use the return value as follows.
+
+\begin{verbatim}
+ fd=convexhedron("1",pd);
+ VertexEdgeFace("1",fd);
+ Nohiddenbyfaces("1","phe3d1","phf3d1");
+\end{verbatim}
+
+%\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$Function] list}\end{flushright}
+
+\hypertarget{rpolyhedron}{}
+\item[Function] rpolyhedron(name, number of face ,radius,option)
+\item[Description] Draw a regular polyhedron with a color-painted face.
+There are five kinds of regular polyhedrons, and data is incorporated in Spacekc. \hyperlink {rpolydata} {vertex coordinates of regular polyhedron}. Using this, you can draw a regular polyhedron by specifying the number of faces and the radius of the circumscribed sphere.
+\item[Return value] face data.
+
+\vspace{\baselineskip}
+ Example : Draw a regular dodecahedron painted with yellow face
+
+\verb| rpolyhedron("1",6,2,["Color=yellow"]);|
+
+\hspace{20mm}\input{3Dfig/rpolyhedron}
+
+If you are drawing an edge, use the return value as follows.
+\begin{verbatim}
+fd=rpolyhedron("1",12,2,["Color=yellow"]);
+VertexEdgeFace("1",fd);
+Nohiddenbyfaces("1","phe3d1","phf3d1");
+\end{verbatim}
+
+
+\vspace{\baselineskip}
+Reference : Size of regular polyhedron
+
+In rpolyhedron (), draw with the size inscribed in the sphere of the specified radius. Here, the relationship between the radius and the side length is mentioned. $\phi=\cfrac{1+\sqrt{5}}{2}$
+
+ \input{3Dfig/rpolytable}
+
+Example : Draw a regular hexahedron with a side length of 2
+\begin{verbatim}
+ rpolyhedron(6,sqrt(3),["dr,2"]);
+\end{verbatim}
+
+%\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$Function] list}\end{flushright}
+
+
+\hypertarget{rfrustum}{}
+\item[Function] frustum(name,n,r1,r2,h,option)
+\item[Description] Put the face of a regular pyramid.
+n : Number of corners
+
+r1,r2 : Radius of the circumscribed circle of the upper base and the lower base
+
+h : height
+
+\vspace{\baselineskip}
+ ExampleDraw a regular hexagonal pyramid
+
+\verb| frustum("1",6,1,2,3,["Color=yellow"]);|
+
+\hspace{20mm}\input{3Dfig/frustum01}
+
+If you are drawing an edge, use the return value as follows.
+
+\begin{verbatim}
+ fd=frustum("1",6,1,2,3,["Color=yellow"]);
+ VertexEdgeFace("1",fd);
+ Nohiddenbyfaces("1","phe3d1","phf3d1");
+\end{verbatim}
+
+ Example :
+
+\begin{verbatim}
+ fd=frustum("1",6,0,2,3,["Color=yellow"]);
+ VertexEdgeFace("1",fd);
+ Nohiddenbyfaces("1","phe3d1","phf3d1");
+\end{verbatim}
+
+\hspace{20mm}\input{3Dfig/frustum02}
+
+ Example : It becomes almost a cone when increasing the number of corners. The contour line is drawn as a curved surface with Sfbdparadata.
+
+\begin{layer}{150}{0}
+\putnotese{90}{0}{\input{3Dfig/frustum03}}
+\end{layer}
+
+\begin{verbatim}
+ frustum("1",108,0,2,4,["Color=yellow"]);
+ fd=[
+ "p",
+ "x=r*cos(t)","y=r*sin(t)","z=2*(2-r)",
+ "r=[0,2]","t=[0,2*pi]","e"
+ ];
+ Startsurf();
+ Sfbdparadata("1",fd);
+ ExeccmdC("1");
+\end{verbatim}
+
+If it is the same size of the upper base and the lower base, it becomes a cylinder.
+
+%\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$Function] list}\end{flushright}
+
+\hypertarget{hatch3d}{}\item[Function] hatch3d(name,方向,PD,option)
+\item[Description] Hatch the closed curve. The closed curve is such as poly3d (), circle3d ();
+Unlike KeTCindy 's Hatchdata (), only the closed curve is the target, so the direction is not in the argument. A color designation can be put in option, and if there is a color designation, hatch is applied with that color. You can not hatch multiple areas.
+\item[Return value] none
+
+Example : Hatch the circle.
+\begin{verbatim}
+ pd=circle3d("1",[1,1,1],[1,1,1],2,["dr,2"]);
+ hatch3d("1",pd,["Color=red"]);
+\end{verbatim}
+
+ \input{3Dfig/hatch1}
+
+\newpage
+\end{description}
+
+\end{document} \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/doc/source/spacekc/SpacekcReferenceJ.tex b/graphics/ketcindy/ketcindyfolder/doc/source/spacekc/SpacekcReferenceJ.tex
new file mode 100644
index 0000000000..8895afad7f
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/doc/source/spacekc/SpacekcReferenceJ.tex
@@ -0,0 +1,831 @@
+\documentclass[papersize,a4paper,12pt,uplatex]{jsarticle}
+\usepackage{ketpic,ketlayer}
+\usepackage{amsmath,newtxmath}
+\usepackage[dvipdfmx]{graphicx,color}
+\usepackage{wrapfig}
+\usepackage[dvipdfmx,bookmarks=false,colorlinks=true,linkcolor=blue]{hyperref}
+\setmargin{20}{20}{15}{25}
+
+\begin{document}
+\title{Spacekc リファレンスマニュアル}
+\author{CinderellaJapan}
+\maketitle
+
+\tableofcontents
+
+\newpage
+
+%第1節 序 =======================================
+\section{はじめに}
+Spacekc は,KeTCindyのためのSpaceCindyである。KeTCindyの3Dグラフィクスに,簡易レイトレーシングで色付けをすることができる。また,KeTCindyで提供していない,空間に関する計算のためのいくつかの関数を用意している。配布はライブラリではなく,スクリプトを記述したテキストファイルあるいはCinderellaのファイルで行っている。
+
+なお,SpaceCindykcを用いた作図【例】と配布は,KeTCindy のページに掲載している。アドレスは以下の通り。
+
+\hspace{10mm} \url{https://sites.google.com/site/KETCindy/home/cindy3d2}
+
+%第2節 定数 ==========================================
+\section{定数}
+
+\begin{description}
+\hypertarget{rpolydata}{}
+\item[正多面体の頂点座標] Rpolydata
+\item[説明] 正多面体の頂点のリスト。内容は,φ=$\cfrac{1+\sqrt{5}}{2}$ を黄金比として次のようになっている。
+
+正四面体:$(0,0,1),\left(\cfrac{2\sqrt{2}}{3},0,-\cfrac{1}{3} \right),\left(-\cfrac{\sqrt{2}}{3},\cfrac{\sqrt{6}}{3},-\cfrac{1}{3} \right),\left(-\cfrac{\sqrt{2}}{3},\cfrac{\sqrt{6}}{3},-\cfrac{1}{3}\right)$
+
+正六面体:$(-1,-1,1),(1,-1,1),(1,1,1),(-1,1,1),(-1,-1,-1),(1,-1,-1),(1,1,-1),(-1,1,-1)$
+
+正八面体:$(0,0,1),(0,-1,0),(1,0,0),(0,1,0),(-1,0,0),(0,0,-1)$
+
+正十二面体:$(0,-1,-φ^2),(0,1,-φ^2),(0,-1,φ^2),(0,1,φ^2),(-1,-φ^2,0),(1,-φ^2,0) $
+
+\hspace{15mm} $ (-1,φ^2,0),(1,φ^2,0),(-φ^2,0,-1),(-φ^2,0,1),(φ^2,0,-1),(φ^2,0,1), $
+
+\hspace{15mm} $ (-φ,-φ,-φ),(-φ,-φ,φ),(-φ,φ,-φ),(-φ,φ,φ), $
+
+\hspace{15mm} $ (φ,-φ,-φ),(φ,-φ,φ),(φ,φ,-φ),(φ,φ,φ)$
+
+正二十面体:$(0,-1,-φ),(0,1,-φ),(0,-1,φ),(0,1,φ),(-φ,0,-1),(-φ,0,1) $
+
+\hspace{15mm}$ (φ,0,-1),(φ,0,1),(-1,-φ,0),(1,-φ,0),(-1,φ,0),(1,φ,0)$
+
+\vspace{\baselineskip}
+\hypertarget{lightpoint}{}
+\item[光源の方向ベクトル] Lightpoint
+\item[説明] 簡易レイトレーシングを行う場合の光源の方向ベクトル。初期設定は[-1,1,1]
+
+\vspace{\baselineskip}
+\hypertarget{contrast}{}
+\item[コントラスト] Contrast
+\item[説明] 簡易レイトレーシングを行う場合の,光のあたり方のコントラスト。標準は0以上1以下の実数。1を超えてもよいが,黒い部分が多くなる。描画関数の option で設定することもできる。
+
+
+\end{description}
+\newpage
+%第3節 値の取得 ==========================================
+\section{値の取得}
+\begin{description}
+
+\hypertarget{angle3pt}{}
+\item[関数] angle3pt(座標1,座標2, 座標3)
+\item[機能] 平面上で角を求める
+\item[戻り値] 点 p1,p2,p3 に対し,∠p1p2p3を返す
+
+\vspace{\baselineskip}
+
+\hypertarget{pointindomain}{}
+\item[関数] pointindomain(座標1,点リスト)
+\item[機能] 平面上で点リストの閉曲線内に座標1の点があるかどうかの判定
+\item[戻り値] 領域内なら1,領域外なら0,境界線上なら2を返す。
+
+\vspace{\baselineskip}
+
+\hypertarget{crosssd}{}
+\item[関数] crosssd(座標1,座標2,座標3,座標4)
+\item[機能] 座標平面において2本の線分か交わるかどうかを判断する
+\item[説明] 座標1,座標2を結ぶ線分と,座標3,座標4を結ぶ線分が交わるかどうか(共有点を持つかどうか)を判定する。
+\item[戻り値] 交点がある場合は true ,ない場合は false を返す。
+
+\vspace{\baselineskip}
+
+\hypertarget{interll}{}
+\item[関数] interll(座標1,座標2,座標3,座標4)
+\item[機能] 座標空間において2本の直線の交点の座標を求める
+\item[戻り値] 座標1,座標2を通る直線と,座標3,座標4を通る直線との交点の座標を返す。
+交点がない場合は [i,i,i] を返す。
+
+\vspace{\baselineskip}
+
+\hypertarget{interss}{}
+\item[関数] interss(座標1,座標2,座標3,座標4)
+\item[機能] 座標空間において2本の線分の交点の座標を求める
+\item[戻り値] 座標1,座標2を結ぶ線分と,座標3,座標4を結ぶ線分との交点の座標を返す。
+ 交点がない場合は [i,i,i] を返す。
+
+\vspace{\baselineskip}
+\hypertarget{interpl}{}
+\item[関数] interpl(座標1,座標2,座標3,座標4,座標5)
+\item[機能] 座標空間において平面と直線の交点の座標を求める
+\item[戻り値] 座標1,座標2,座標3で決まる平面と,座標4,座標5を通る直線との交点の座標を返す。
+ 交点がない場合は [i,i,i] を返す。
+
+\vspace{\baselineskip}
+\hypertarget{interps}{}
+\item[関数] interps(座標1,座標2,座標3,座標4,座標5)
+\item[機能] 座標空間において平面と線分の交点の座標を求める
+\item[戻り値] 座標1,座標2,座標3で決まる平面と,座標4,座標5を通る線分との交点の座標を返す。
+交点がない場合は [i,i,i] を返す。
+
+
+\hypertarget{distlp}{}
+\item[関数] distlp(座標1,座標2, 座標3)
+\item[機能] 直線と点の距離を求める。(distance of line to point)
+\item[説明] 座標1,座標2を通る直線と,座標3の点との距離を求める。
+\item[戻り値] 距離。
+
+ 平面上の点でも空間の点でもよい。座標1と座標2が等しいときは虚数単位 i を返すとともに,コンソールに警告「Warning:p1 is same to p2」を表示する。
+2点を結ぶ直線のベクトル方程式 $x=x_1+t(x_2-x_1) , y=y_1+t(y_2-y_1)$ を用い,
+内積=0から t を求め距離を計算している。
+ 垂線の足の位置ベクトルを$h(x,y)$ とすると,
+
+ $(\vec{h}-\vec{p3})・(\vec{p2}-\vec{p1})=0$
+
+ から
+
+ $t=\dfrac{(\vec{p2}-\vec{p1})・(\vec{p3}-\vec{p1})}{|\vec{p2}-\vec{p1}|^2}$
+
+ を得る。
+
+【例】 println(distlp([1,0],[0,1],[0,0]));
+
+で$\cfrac{\sqrt{2}}{2}$ が表示される。なお,plintln() により,コンソールには 0.71 が表示されるが,内部的には四捨五入した値ではないので
+
+ println(guess(distlp([1,0],[0,1],[0,0])));
+
+とすると,1/2*sqrt(2) と表示される。
+
+【例】 println(distlp([1,1,0],[0,0,1],[0,0,0])); で$\cfrac{\sqrt{6}}{3}$ が表示される。なお,plintln() により,コンソールには 0.82 が表示されるが,内部的には四捨五入した値ではないので
+ println(guess(distlp([1,1,0],[0,0,1],[0,0,0])));
+とすると,1/3*sqrt(6) と表示される。
+
+%\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+\vspace{\baselineskip}
+\hypertarget{distpp}{}
+\item[関数] distpp(座標1,座標2, 座標3, 座標4)
+\item[機能] 座標空間で3点を通る平面と点の距離を求める。
+\item[説明] 座標1,座標2,座標3を通る平面と,座標4の点との距離を求める。
+\item[戻り値] 距離
+
+【例】 3点 (2,0,0),(0,2,0),(0,0,2) を通る平面と,原点との距離
+
+ distpp([2,0,0],[0,2,0],[0,0,2],[0,0,0]); 戻り値は $\cfrac{2\sqrt{3}}{3}$
+
+\vspace{\baselineskip}
+\hypertarget{map2d}{}
+\item[関数] map2d(座標)
+\item[機能] 座標空間の点を現在の座標平面に射影した点の座標を求める。
+\item[説明] 「現在の」とは,スライダで設定された軸設定(視点)による画面のことを指す。
+
+【例】 pt=map2d([1,2,3]);
+
+なお,KeTCindyの Parapt() と全く同じ。
+
+\item[戻り値] 平面座標
+
+\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+\hypertarget{normalvec}{}
+\item[関数] normalvec(座標1,座標2, 座標3)
+\item[機能] 3点を通る平面の単位法線ベクトルを求める。
+\item[説明] 座標1,座標2,座標3を通る平面の単位法線ベクトルを求める。
+\item[戻り値] 法線ベクトルを表すリスト。
+
+ ベクトルの向きは,点の順序による。
+
+【例】 normalvec([2,0,0],[0,2,0],[0,0,2]); の結果は $\left(\cfrac{\sqrt{3}}{3},\cfrac{\sqrt{3}}{3},\cfrac{\sqrt{3}}{3}\right)$
+
+ normalvec([2,0,0],[0,0,2],[0,2,0]); の結果は $\left(-\cfrac{\sqrt{3}}{3},-\cfrac{\sqrt{3}}{3},-\cfrac{\sqrt{3}}{3}\right)$
+
+平面と点の距離を求める distpp() を組み合わせると,平面に下した垂線のベクトルを表示できる。
+\begin{verbatim}
+ nv=normalvec([2,0,0],[0,2,0],[0,0,2]);
+ dd=distpp([2,0,0],[0,2,0],[0,0,2],[0,0,0]);
+ poly3d("1",[[2,0,0],[0,2,0],[0,0,2]]);
+ arrow3d("1",[[0,0,0],dd*nv]);
+ Letter3d([dd*nv,"e","H"]);
+\end{verbatim}
+
+ \input{3Dfig/nomalvec01}
+
+\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+\hypertarget{onsameplane}{}
+\item[関数] onsameplane(pa,pb,pc,pd)
+\item[機能] 4点が同一平面上にあるかどうかの判定
+\item[説明] 引数は判定する4点の座標。外積と内積を用いた判定法による 。
+\item[戻り値] true / false
+
+%\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+\vspace{\baselineskip}
+\hypertarget{perp}{}
+\item[関数] perp(座標1,座標2, 座標3)
+\item[機能] 2点を通る直線への垂線の足の座標を求める。
+\item[戻り値] 座標1,座標2の2点を通る直線に,座標3の点から下した垂線の足の座標を返す。
+
+\hypertarget{perpvec}{}
+\item[関数] perpvec(ベクトル,flag)
+\item[機能] ベクトルに垂直な平面の基本ベクトルを作る。
+\item[説明] 第1引数のベクトルに垂直な平面上に2つの直交するベクトルを作り,リストにして返す。ひとつは,z成分を1として計算する。flag はオプションで,0にすると単位ベクトルにしない。デフォルトは単位ベクトル。
+\item[戻り値] ベクトル。
+
+【例】perpvec([1,1,1]) の結果は [[-0.8165,0.4082,0.4082],[0,-0.7071,0.7071]]
+
+ perpvec([1,1,1],0) の結果は [[-2,1,1],[0,-1,1]]
+
+\vspace{\baselineskip}
+
+\hypertarget{planecoeff}{}
+\item[関数] planecoeff(座標1,座標2, 座標3)
+\item[機能] 3点を通る平面の方程式の係数を求める。
+\item[説明] 座標1,座標2,座標3の3点を通る平面の方程式 $ax+by+cz=1$ の係数 $a,b,c$ を求める。
+\item[戻り値] リスト [a,b,c]。係数$a,b,c$が存在しない場合はコンソールに「Warning! Cannot decide a coefficient.」を表示し,[i,i,i] を返す。
+
+
+\vspace{\baselineskip}
+
+\hypertarget{reflect3d}{}
+\item[関数] reflect3d(dlist,mirror)
+\item[機能] dlistの鏡像を得る
+\item[説明] 第1引数は,点,プロットデータ,面データのいずれか。第2引数の座標リストが,1つの点だけなら,点対称,2つの点なら,その 2点を結ぶ直線に関する対称点,3つの点なら,その3点で決まる平面に関する対称点となる。
+\item[戻り値] 第1引数と同じタイプのデータ
+
+KeTCindyのRefrectdata3d() との違いは,描画をしないこと,引数が,点,プロットデータ,面データのいずれでもよいことである。第2引数の形は同じ。
+
+\vspace{\baselineskip}
+
+\hypertarget{rotate3d}{}
+\item[関数] rotate3d(dlist,vec,angle,center)
+\item[機能] dlistを指定した角だけcenterを始点とするベクトル周りに回転する。
+\item[説明] dlistは点,プロットデータ,面データのいずれか。
+\item[戻り値] dlistと同じ形式のデータ。
+
+KeTCindyのRotatedata3d() との違いは,描画をしないこと,引数が,点,プロットデータ,面データのいずれでもよいことである。その他の引数の形式は同じ。
+
+【例】 angle=[0,0,pi/4];
+ p=[1,0,0];
+ drawpt3d(rotate3d(p,angle));
+
+ により,点(1,0,0)をz軸回りに $\frac{\pi}{4}$ だけ回転した位置に点を打つ。
+
+\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+\hypertarget{translate3d}{}
+\item[関数] translate3d(dlist,ベクトル)
+\item[機能] dlistを指定したベクトルだけ平行移動。
+\item[説明] dlistは点,プロットデータ,面データのいずれか。
+\item[戻り値] dlistと同じ形式のデータ
+
+KeTCindyのTranslatedata3d() との違いは,描画をしないこと,引数が,点,プロットデータ,面データのいずれでもよいことである。その他の引数の形式は同じ。
+
+\vspace{\baselineskip}
+\hypertarget{rotmatrix}{}
+\item[関数] rotmatrix(vec)
+\item[機能] 法線ベクトルから回転行列を作る
+\item[説明] 引数は法線ベクトル。 初め,法線ベクトルは[0,0,1]であるとする。これを回転して,引数の vec になるような回転行列を求める。y軸周り,z軸周りの順に回転する行列。
+\item[戻り値] 行列
+
+\vspace{\baselineskip}
+
+\hypertarget{vertexrpolyhedron}{}
+\item[関数] vertexrpolyhedron(n)
+\item[機能] 正n面体の頂点リストを取得する
+\item[説明] nの値は4,6,8,12,20 のいずれか。
+\item[戻り値] 半径1の球面に内接する正多面体の頂点リスト。
+頂点の順番は次のようになっている。それぞれアルファベット順。
+
+\input{3Dfig/vertex4} \input{3Dfig/vertex6}
+\input{3Dfig/vertex8} \input{3Dfig/vertex12}
+\input{3Dfig/vertex20}
+
+なお,スクリプト内では,次のように定義されている。これを,半径1の球面に内接するように変換して戻り値としている。
+
+φ=$\cfrac{1+\sqrt{5}}{2}$ は黄金比。
+
+正四面体:$(0,0,1),\left(\cfrac{2\sqrt{2}}{3},0,-\cfrac{1}{3} \right),\left(-\cfrac{\sqrt{2}}{3},\cfrac{\sqrt{6}}{3},-\cfrac{1}{3} \right),\left(-\cfrac{\sqrt{2}}{3},\cfrac{\sqrt{6}}{3},-\cfrac{1}{3}\right)$
+
+正六面体:$(-1,-1,1),(1,-1,1),(1,1,1),(-1,1,1),(-1,-1,-1),(1,-1,-1),(1,1,-1),(-1,1,-1)$
+
+正八面体:$(0,0,1),(0,-1,0),(1,0,0),(0,1,0),(-1,0,0),(0,0,-1)$
+
+正十二面体:$(0,-1,-φ^2),(0,1,-φ^2),(0,-1,φ^2),(0,1,φ^2),(-1,-φ^2,0),(1,-φ^2,0) $
+
+\hspace{15mm}$ (-1,φ^2,0),(1,φ^2,0),(-φ^2,0,-1),(-φ^2,0,1),(φ^2,0,-1),(φ^2,0,1), $
+
+\hspace{15mm} $ (-φ,-φ,-φ),(-φ,-φ,φ),(-φ,φ,-φ),(-φ,φ,φ), $
+
+\hspace{15mm} $((φ,-φ,-φ),(φ,-φ,φ),φ,φ,-φ),(φ,φ,φ)$
+
+正二十面体:$(0,-1,-φ),(0,1,-φ),(0,-1,φ),(0,1,φ),(-φ,0,-1),(-φ,0,1) $
+
+\hspace{15mm} $ (φ,0,-1),(φ,0,1),(-1,-φ,0),(1,-φ,0),(-1,φ,0),(1,φ,0)$
+
+\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+\hypertarget{val2tex}{}\item[関数] val2tex(x)
+\item[機能] 数値をguess()で解析して,分数,平方根のTeXの文字列にして返す
+\item[説明] 分数,平方根でない場合はguess()の結果をそのまま返す。
+ 計算結果が分数や平方根になる場合に,この関数を適用し,戻り値の前後にドルマークをつけて drawtext()で表示すれば分数や平方根の形で表示される。letter3d() でも利用できる。ただし,精度によっては変換できない場合もある。
+
+\item[戻り値] TeXの文字列
+
+【例】:原点から平面に下した垂線の足の座標を計算して表示する。
+\begin{verbatim}
+ pa=[2,0,0];
+ pb=[0,2,0];
+ pc=[0,0,2];
+ nv=normalvec(pa,pb,pc);
+ hv=distpp(pa,pb,pc,[0,0,0])*nv;
+ hvstr=apply(hv,val2tex(#));
+ plate3d("1",[pa,pb,pc],["Color=skyblue","Rayoff"]);
+ poly3d("1",[pa,pb,pc]);
+ arrow3d("1",[[0,0,0],hv],["size=2"]);
+ letter3d([pa,"s2",text(pa_1),pb,"s2",text(pb_2),pc,"w2",text(pc_3),
+ hv,"ne2","H$\left( "+hvstr_1+","+hvstr_2+","+hvstr_3+" \right)$"]);
+\end{verbatim}
+
+\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+\end{description}
+\newpage
+%第4節 描画 =========================================
+\section{描画関数}
+
+\textbf{options}
+
+直線・曲線を描く関数の引数には座標の他,オプションがある。KeTCindyのオプションの他,メッシュ密度,濃度,コントラスト,レイトレーシングの有無が指定できる。
+
+\textbf{<メッシュ密度>}
+
+曲面を描くとき,網目状にして描く。このときの経緯線の数。
+
+メッシュ密度指定は,"Mesh=[10,15]" のように与える。
+
+\textbf{<濃度>}
+
+濃度は0から1までの実数。"Alpha=n" で,nは0以上1以下。たとえば,"Alpha=0.4"。初期設定は 0.3。
+
+なお,「Alpha」は,CindyScriptの「透明度」と同じ語であるが,ここでは,濃淡を表し,1のときが指定した色で,0に近いと白に近くなる。向こう側が透けて見えるようになるわけではない。
+
+\textbf{<レイトレーシング>}
+
+レイトレーシングで陰影をつけるかどうかの指定。"Rayon" のとき陰をつけ,"Rayoff" のときは陰影をつけない。初期設定は "Rayon"
+
+\textbf{<非表示>}
+
+戻り値がプロットデータの描画関数で,プロットデータだけを取得したい場合に,KeTCindyと同様,"nodisp" オプションをつける。
+
+\vspace{\baselineskip}
+\textbf{描画関数の戻り値}
+
+ 描画関数の幾つかには戻り値がある。それぞれの関数の説明を参照のこと。
+
+%\newpage
+\begin{description}
+
+\hypertarget{grid}{}
+\item[関数] grid(範囲1,範囲2,本数,option)
+\item[機能] $xy$平面に方眼を表示する。
+\item[説明] 範囲1は$x$軸の範囲,範囲2は$y$軸の範囲。
+\item[戻り値] なし
+
+本数は,単位(1目盛)あたりの本数。
+
+色,太さなど,通常のoptionが有効。
+
+引数,optionともなしで,grid() とすることも可能で,その場合は,範囲をsetaxis() で指定した範囲とし,単位あたり1本と10本の方眼を描く。
+
+方眼は描画面だけで,TeXには出力されない。
+
+\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+\hypertarget{line3d}{}
+\item[関数] line3d(name,座標リスト ,option)
+\item[機能] 2点を結ぶ直線を描く
+\item[説明] 2点の座標をリストで与えて,3次元空間に直線を表示する。
+\item[戻り値] 2点の座標リストをそのまま返す。
+
+
+\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+\hypertarget{arrow3d}{}
+\item[関数] arrow3d(name,座標リスト ,option)
+\item[機能] 2点を結ぶ矢線を描く
+\item[説明] 2点の座標のリストを与えて,3次元空間に矢線を表示する 。
+ option は,color指定以外は2次元の KeTCindy の Arrowdataと同様。
+ ただし,矢じりについては,Cinderellaの画面上では大きさ以外のオプションは反映されない。
+ また,矢じりについてのオプションは初めに書く必要がある。
+ \item[戻り値] 2点の座標リストをそのまま返す。
+
+\vspace{\baselineskip}
+ 【例】 2点$(1,3,2) , (-2,-1,-2)$ を結ぶ矢線を表示する。
+
+\hspace{10mm} \verb|arrow3d("1",[[1,3,2],[-2,-1,-2]])|
+
+ 【例】 矢じりの大きさを2にして,全体を赤で描く。
+
+\hspace{10mm} \verb|arrow3d("1",[[2,0,0],[-1,4,1]],[2,1,1,"dr,2","Color=red"])|
+
+\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+\hypertarget{poly3d}{}
+\item[関数] poly3d(name,座標リスト,option)
+\item[機能] 多角形を描く
+\item[説明] リストで与えた点を結ぶ多角形を描く。リストで与えた点が同一平面上になくてもそれらの点を結んだ図形を描く。リストで与える点は閉じていなくてもよい。自動的に閉じて描く。
+\item[戻り値] 描画した多角形のプロットデータ。
+
+
+ 【例】 3点$(1,1,1) , (2,2,1),(0,1,-1)$ を頂点とする三角形を描く。
+\begin{verbatim}
+ pd=[[1,1,1],[2,2,1],[0,1,-1]];
+ poly3d("1",pd);
+\end{verbatim}
+
+\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+\hypertarget{plate3d}{}
+\item[関数] plate3d(name,座標リスト,option)
+\item[機能] 多角形を色塗りする
+\item[説明] リストで与えた点を結ぶ多角形を色塗りする。縁取りはしない。
+\item[戻り値] 引数に与えた座標リストをそのまま返す
+
+ Rayoff オプションをつけると,レイトレーシングを行わない。
+
+ 【例】:3点$(1,1,1) , (2,2,1),(0,1,-1)$ を頂点とする三角形を赤で塗る
+\begin{verbatim}
+ pd=[[1,1,1],[2,2,1],[0,1,-1]];
+ plate3d("1",pd,["Color=Red"]);
+\end{verbatim}
+
+\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+\hypertarget{circle3d}{}
+\item[関数] circle3d(name,中心,法線ベクトル,半径,option)
+\item[機能] 円を描く
+\item[説明] 中心,半径と法線ベクトルを与えて円を描く。
+\item[戻り値] 円のプロットデータ
+
+ 【例】:中心 $(1,1,1)$,半径2,法線ベクトルが(1,1,1)である円を太さ2,赤で描く。
+
+\verb| circle3d("1",[1,1,1],[1,1,1],2,["dr,2","Color=Red"]); |
+
+\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+\hypertarget{drawarc3d}{}
+\item[関数] drawarc3d(name,中心,法線ベクトル,半径,範囲,option)
+\item[機能] 弧を描く
+\item[説明] 中心,半径と法線ベクトルを与えて描く円の一部として弧を描く。
+
+円は,$x=r \cos \theta,y=r \sin \theta$ で描き,法線ベクトルで決まる回転行列で回転している。
+
+\item[戻り値] 弧のプロットデータ
+
+ 【例】:中心 $(1,1,1)$,半径2,法線ベクトルが(-1,1,1)である弧を描く。
+
+\verb| drawarc3d("1",[1,1,1],[-1,1,1],2,[0,2*pi/3]); |
+
+\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+\hypertarget{disc3d}{}
+\item[関数] disc3d(name,中心,法線ベクトル,半径,option)
+\item[機能] 中を色塗りした円盤を描く
+\item[説明] 中心,半径と法線ベクトルを与えて円盤を描く。縁取りはしない。
+\item[戻り値] 円のプロットデータ
+
+ Rayoff オプションをつけると,レイトレーシングを行わない。
+
+ 【例】:中心 $(1,1,1)$,半径2,法線ベクトルが(1,1,1)である円盤を赤,透明度0.4で描く。
+
+ \verb| disc3d("1",[1,1,1],[1,1,1],2,["Color=Red","Alpha=0.4"]); |
+
+\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+\hypertarget{drawsphere}{}
+\item[関数] drawsphere(name,中心,半径,opton)
+\item[機能] 球面を描く
+\item[説明] 中心と半径を指定して球面を描く。
+球面を簡易レイトレーシングを用いてグラデーションをかけて描く。 球面を網目状に分けて色塗りをしている。
+
+引数は,中心の座標,半径,option。
+
+半径は,x軸,y軸,z軸方向についてリストにして指定することもできる。
+
+描画には時間がかかる。あまりにも時間がかかりすぎる場合は, "Mesh=[10,10]" をオプションにつけて描画してみる。これで描ければ編み目を細かくする。初期値は"Mesh=[30,20]"。
+\item[戻り値] なし
+
+\vspace{\baselineskip}
+【例】原点中心,半径2の球面(下図左)
+
+\verb|drawsphere("1",[0,0,0],2) |
+
+ 中心が(0,0,2),半径が [1,1,2] :楕円形の球を緑で描く(下図右)
+
+\verb|drawsphere("1",[0,0,2],[1,1,2],["Color=green","Mesh=[20,20]"])|
+
+ \input{3Dfig/sphere01} \hspace{10mm} \input{3Dfig/sphere02}
+
+\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+\hypertarget{quasisphere}{}
+\item[関数] quasisphere(name,中心,半径,fill,option)
+\item[機能] 疑似球面を描く
+\item[説明] 中心と半径を指定して疑似球面を描く。
+座標軸を動かしても常に法線ベクトルが視点を向いた円を描くので,球面同様に見える。しかし実際には面ではない。 したがって,陰線処理はしない。
+
+引数は,中心の座標,半径,fill , option。
+
+fill は塗りつぶすかどうかで,1なら塗りつぶす(初期値),0 なら塗らない。
+
+fill は省略可能。
+
+\item[戻り値] 円のプロットデータ
+
+\vspace{\baselineskip}
+【例】 \verb|quasisphere("1",[0,0,1],1,0]);|
+
+ \input{3Dfig/sphere03}
+
+陰線処理をしない分,Sfbdparadata() と ExeccmdC() で描くより速い。これを用いて,次のようなスクリプトを作ると,疑似球面で十分であることがわかる。
+
+\begin{verbatim}
+pd1=quasisphere("1",[0,0,0],2,0,["nodisp"]);
+pd2=circle3d("1",[0,0,0],[0,1,sqrt(3)],2,["nodisp"]);
+pd3=circle3d("2",[0,0,-1],[0,0,1],sqrt(3),["nodisp"]);
+sp=apply(pd1,map2d(#));
+su1=apply(pd2,map2d(#));
+su2=apply(pd3,map2d(#));
+Listplot("1",sp,["nodisp"]);
+Listplot("2",su1);
+Listplot("3",su2,["Color=blue"]);
+int1=Intersectcrvs("sg1","sg2");
+int2=Intersectcrvs("sg1","sg3");
+println(int1);
+println(int2);
+p1=int1_1;
+p2=int1_2;
+p3=int2_1;
+p4=int2_2;
+Partcrv("1", p2, p1, "sg1");
+Partcrv("2", p3, p4, "sg3",["nodisp"]);
+Partcrv("3", p4, p3, "sg1",["nodisp"]);
+Joincrvs("1",["part2","part3"],["nodisp"]);
+Shade(["join1"],["Color=[0.2,0,0,0]"]);
+\end{verbatim}
+
+スライダを動かして視点を変えたとき,次のようになる。
+
+ \input{3Dfig/sphere04} \hspace{10mm} \input{3Dfig/sphere05}
+
+ なお,このスクリプトを実行したとき,視点によって交点 int1 , int2 の数が変わるので,コンソールに表示されたものを見て,\verb|p1,p2,p3,p4| を設定する必要がある。
+
+\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+\hypertarget{polyhedron}{}
+\item[関数] polyhedron(name,面データ,option)
+\item[機能] 面を色塗りした多面体を描く
+\item[説明] 縁取りはしない。
+\item[戻り値] 引数の面データをそのまま返す
+
+ Rayoff オプションをつけると,レイトレーシングを行わない。
+
+\vspace{\baselineskip}
+ 【例】 立方体ABCD-EFGHを,B,D,Gを通る平面で切ってできる錐体を緑で描く。
+
+\hspace{30mm}\input{3Dfig/polyhedron01}
+
+ 頂点B,C,D,Gに対し,面リストを次のように作る。
+
+ まず,頂点 B,C,D,G に番号1,2,3,4 をつける。
+
+ 面BCGは外側から見て反時計回りに B,C,G なので [1,2,4]
+
+ 面CDGは同様に C,D,G なので [2,3,4]
+
+ 面DGBは同様に D,B,G なので [3,1,4]
+
+ 底面BCDは外側から見て反時計回りに B,D,C なので [1,3,2]
+
+ そこで,B,C,D,G の座標をp1,p2,p3,p4として,次のようにして面データ \verb|fd| を作る。
+\begin{verbatim}
+ p1=[2,0,0];
+ p2=[2,2,0];
+ p3=[0,2,0];
+ p4=[2,2,2];
+ fd=[[p1,p2,p3,p4],[[1,2,4],[2,3,4],[3,1,4],[1,3,2]]];
+\end{verbatim}
+
+この面データを使って
+
+ \verb| polyhedron("1",fd,["Color=Green"])|
+
+とすれば,錐体が描かれる。
+
+\hspace{30mm}\input{3Dfig/polyhedron02}
+
+【例】小林・鈴木・三谷による 多面体データ polyhedrons\_obj を用いた多面体を描く。
+ データは,正多面体,半正多面体,ジョンソンの立体で,
+
+\url{http://mitani.cs.tsukuba.ac.jp/polyhedron/index.html }
+
+ にある。このデータを格納したフォルダ polyhedrons\_obj へのパスを \verb|Setdirectory()| で指定し,\verb|Readobj()| で読み込む。たとえば,ワークディレクトリ(figフォルダ)に置いた場合は,
+
+\begin{layer}{150}{0}
+\putnotese{80}{0}{\input{3Dfig/polyhedron03}}
+\end{layer}
+
+\begin{verbatim}
+ Setdirectory(Dirwork+"/polyhedrons_obj");
+ polydt=Readobj("s06.obj");
+ Setdirectory(Dirwork);
+ fd=[2*polydt_1,polydt_2];
+ polyhedron("1",fd);
+\end{verbatim}
+で右のような図ができる。
+
+なお,\verb|fd=[2*polydt_1,polydt_2]| で,頂点の座標を2倍にしている。
+
+稜線を描くのであれば
+
+\begin{verbatim}
+VertexEdgeFace("1",fd);
+Nohiddenbyfaces("1","phe3d1","phf3d1");
+\end{verbatim}
+を追加すればよい。
+
+\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+\hypertarget{convexhedron}{}
+\item[関数] convexhedron(name,頂点リスト,倍率,option)
+\item[機能] 凸型多面体を描く
+\item[説明] 頂点リストを与えて面を塗った凸型多面体を描く。倍率は,頂点リストに対して実際に描画するサイズへの倍率。1のときは省略できる。
+\item[戻り値] 描画した面データ。
+
+\vspace{\baselineskip}
+【例】底面が五角形の凸型多面体
+\begin{verbatim}
+ th=2*pi/5;
+ pd=apply(1..5,[cos(#*th),sin(#*th),0]);
+ pd=pd++apply(1..5,[2*cos(#*th),2*sin(#*th),1]);
+ pd=append(pd,[0,0,2]);
+ println(pd);
+ fd=convexhedron("1",pd)
+\end{verbatim}
+\hspace{20mm}\input{3Dfig/convexhedron}
+
+稜線を描くのであれば,戻り値を利用して
+
+\begin{verbatim}
+ fd=convexhedron("1",pd);
+ VertexEdgeFace("1",fd);
+ Nohiddenbyfaces("1","phe3d1","phf3d1");
+\end{verbatim}
+とすればよい。
+
+\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+\hypertarget{rpolyhedron}{}
+\item[関数] rpolyhedron(name,面数,半径,option)
+\item[機能] 面を色塗りした正多面体を描く
+\item[説明] 正多面体は5種類あり,Spacekcにはデータが組み込まれている。\hyperlink{rpolydata}{正多面体の頂点座標}を参照のこと。これを用いて,面の数と外接球の半径を指定すれば正多面体を描くことができる。
+\item[戻り値] 描画した面データ
+
+\vspace{\baselineskip}
+ 【例】 面を黄色で塗った正十二面体を描く
+
+\verb| rpolyhedron("1",6,2,["Color=yellow"]);|
+
+\hspace{20mm}\input{3Dfig/rpolyhedron}
+
+稜線を描くのであれば,戻り値を利用して
+\begin{verbatim}
+fd=rpolyhedron("1",12,2,["Color=yellow"]);
+VertexEdgeFace("1",fd);
+Nohiddenbyfaces("1","phe3d1","phf3d1");
+\end{verbatim}
+とすればよい。
+
+\vspace{\baselineskip}
+<参考>正多面体のサイズ
+
+rpolyhedron() では,指定した半径の球面に内接するサイズで描画する。ここで,その半径と辺の長さの関係をあげておく。ここで,$\phi=\cfrac{1+\sqrt{5}}{2}$
+
+ \input{3Dfig/rpolytable}
+
+【例】 一辺の長さが2の正六面体を描く
+\begin{verbatim}
+ rpolyhedron(6,sqrt(3),["dr,2"]);
+\end{verbatim}
+
+\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+
+\hypertarget{rfrustum}{}
+\item[関数] frustum(name,n,r1,r2,h,option)
+\item[機能] 正角錐(台)の面を塗る
+n:角の数
+
+r1,r2:上底,下底の外接円の半径
+
+h:高さ
+
+\vspace{\baselineskip}
+ 【例】 正六角錐台を描く
+
+\verb| frustum("1",6,1,2,3,["Color=yellow"]);|
+
+\hspace{20mm}\input{3Dfig/frustum01}
+
+稜線を描くのであれば,戻り値を利用して
+\begin{verbatim}
+ fd=frustum("1",6,1,2,3,["Color=yellow"]);
+ VertexEdgeFace("1",fd);
+ Nohiddenbyfaces("1","phe3d1","phf3d1");
+\end{verbatim}
+とすればよい。
+
+ 【例】 上底の外接円の半径を0にすれば正六角錐になる。 (座標軸非表示)
+
+\begin{verbatim}
+ fd=frustum("1",6,0,2,3,["Color=yellow"]);
+ VertexEdgeFace("1",fd);
+ Nohiddenbyfaces("1","phe3d1","phf3d1");
+\end{verbatim}
+
+\hspace{20mm}\input{3Dfig/frustum02}
+
+ 【例】 角数を多くするとほとんど円錐になる。輪郭線はSfbdparadataで曲面として描く。
+
+\begin{verbatim}
+ frustum("1",108,0,2,4,["Color=yellow"]);
+ fd=[
+ "p",
+ "x=r*cos(t)","y=r*sin(t)","z=2*(2-r)",
+ "r=[0,2]","t=[0,2*pi]","e"
+ ];
+ Startsurf();
+ Sfbdparadata("1",fd);
+ ExeccmdC("1");
+\end{verbatim}
+
+\hspace{20mm}\input{3Dfig/frustum03}
+
+上底と下底を同じサイズにすれば円柱になる。
+
+\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright}
+
+\hypertarget{hatch3d}{}\item[関数] hatch3d(name,方向,PD,option)
+\item[機能] 閉曲線にハッチをかける。
+\item[説明] 閉曲線は,poly3d() , circle3d(); で描いたものなど。
+KeTCindy のHatchdata() と異なり,閉曲線だけが対象なので,方向は引数にない。optionには色指定を入れることができ,色指定があればその色でハッチをかける。 複数の領域にハッチをかけることはできない。
+\item[戻り値] なし
+
+【例】 円にハッチをかける。
+\begin{verbatim}
+ pd=circle3d("1",[1,1,1],[1,1,1],2,["dr,2"]);
+ hatch3d("1",pd,["Color=red"]);
+\end{verbatim}
+
+ \input{3Dfig/hatch1}
+
+\newpage
+\end{description}
+
+
+% 関数一覧 ================================
+\hypertarget{functionlist}{}
+\section{関数一覧}
+KeTCindy の関数名が大文字で始まるのに対し,Spacekcの関数名は小文字で始まる。ただし,若干例外がある。\\
+
+\begin{tabbing}
+123456789012345678901234567890123456789\=\kill
+【定数】\\
+\hyperlink{lightpoint}{Lightpoint} \> 光源の方向ベクトル\\
+\hyperlink{contrast}{Contrast} \> コントラスト\\
+\hyperlink{rpolydata}{Rpolydata} \> 正多面体の頂点リスト\\
+
+【値の取得】\\
+\hyperlink{angle3pt}{angle3pt}(座標,座標,座標) \>平面上の3点p1,p2,p3 に対し角p1p2p3を返す\\
+\hyperlink{pointindomain}{pointindomain}(座標,点リスト) \> 平面上で点が閉曲線内にあるかどうかの判定\\
+\hyperlink{distlp}{distlp}(座標,座標,座標) \>2点を通る直線と点の距離を取得する\\
+\hyperlink{distpp3d}{distpp3d}(座標,座標,座標,座標) \>座標空間で3点を通る平面と点の距離を取得する\\
+\hyperlink{map2d}{map2d}(座標) \>空間座標を座標平面に射影した点の座標を取得する\\
+\hyperlink{nomalvec}{nomalvec}(座標,座標,座標) \>3点を通る平面の法線単位ベクトルを取得する\\
+\hyperlink{perp}{perp}(座標,座標,座標) \>座標空間で2点を通る直線への垂線の足の座標を取得する\\
+\hyperlink{perpvec}{perpvec}(ベクトル,flag) \>ベクトルに垂直な平面上に直交する基本ベクトルをとる\\
+\hyperlink{planecoeff}{planecoeff}(座標,座標,座標) \>座標空間で3点を通る平面の方程式の係数を取得する\\
+\hyperlink{crosssd}{crosssd}(座標,座標,座標,座標) \>座標平面で2つの線分が交わるかどうかの判断\\
+\hyperlink{interpl}{interpl}(座標,座標,座標,座標,座標) \>平面と直線の交点の座標を求める\\
+\hyperlink{interps}{interps}(座標,座標,座標,座標,座標) \>平面と線分の交点の座標を求める\\
+\hyperlink{reflect3d}{reflect3d}(リスト,リスト) \>データの鏡像を得る\\
+\hyperlink{rotate3d}{rotate3d}(座標,角リスト) \>データを回転する\\
+\hyperlink{translate3d}{translate3d}(リスト,ベクトル) \>データを平行移動する\\
+\hyperlink{vertexrpolyhedron}{vertexrpolyhedron}(数) \>正多面体の頂点リストを取得する\\
+
+【描画】\\
+\hyperlink{grid}{grid}() \>$xy$平面の方眼の描画\\
+\hyperlink{line3d}{line3d}(name,list,option)\>2点を結ぶ直線を描く\\
+\hyperlink{arrow3d}{arrow3d}(name,list,option) \>2点を結ぶ矢線を描く\\
+\hyperlink{poly3d}{poly3d}(name,list,option) \>多角形を描く\\ \hyperlink{circle3d}{circle3d}(name,center, r,vec,option) \>円を描く\\
+\hyperlink{drawarc3d}{circle3d}(name,center, r,vec,range,option) \>弧を描く\\
+\hyperlink{plate3d}{plate3d}(name,list,option) \>多角形を色塗りする\\
+\hyperlink{disc3d}{disc3d}(name,center, r, vec,option) \>中を塗った円盤を描く\\
+\hyperlink{drawsphere}{drawsphere}(name,center,r,option) \>球面を描く\\
+\hyperlink{quasisphere}{quasisphere}(name,center,r,option) \>球面のようなものを描く\\
+\hyperlink{frustum}{frustum}(name,fn,r1,r2,h, option) \>角錐台を描く\\
+\hyperlink{polyhedron}{polyhedron}(name,fd,option) \>面を色塗りした多面体を描く\\
+\hyperlink{rpolyhedron}{rpolyhedron}(name,fn,r,option) \>面を色塗りした正多面体を描く\\
+\hyperlink{convexhedron}{convexhedron}(name,pd,size,option) \>面を色ぬりした凸型多面体を描く\\
+\hyperlink{hatch3d}{hatch3d}(name,direc,PD,option) \> 閉曲線にハッチをかける\\
+
+\end{tabbing}
+
+\end{document} \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/scripts/data/fontF/0Small.png b/graphics/ketcindy/ketcindyfolder/scripts/data/fontF/0Small.png
new file mode 100644
index 0000000000..8d491ce050
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/scripts/data/fontF/0Small.png
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/scripts/data/fontF/0Smalla-h.png b/graphics/ketcindy/ketcindyfolder/scripts/data/fontF/0Smalla-h.png
new file mode 100644
index 0000000000..4578fb1eeb
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/scripts/data/fontF/0Smalla-h.png
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/scripts/data/fontF/0Smalli-o.png b/graphics/ketcindy/ketcindyfolder/scripts/data/fontF/0Smalli-o.png
new file mode 100644
index 0000000000..812d375534
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/scripts/data/fontF/0Smalli-o.png
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/scripts/data/fontF/0Smallp-w.png b/graphics/ketcindy/ketcindyfolder/scripts/data/fontF/0Smallp-w.png
new file mode 100644
index 0000000000..29c6c446f7
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/scripts/data/fontF/0Smallp-w.png
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/scripts/data/fontF/0Smallxyz.png b/graphics/ketcindy/ketcindyfolder/scripts/data/fontF/0Smallxyz.png
new file mode 100644
index 0000000000..a4e3a6a6cf
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/scripts/data/fontF/0Smallxyz.png
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/scripts/data/fontF/nsi.cdy b/graphics/ketcindy/ketcindyfolder/scripts/data/fontF/nsi.cdy
new file mode 100644
index 0000000000..53393398b2
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/scripts/data/fontF/nsi.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/scripts/data/fontF/nsi.txt b/graphics/ketcindy/ketcindyfolder/scripts/data/fontF/nsi.txt
new file mode 100644
index 0000000000..3492d65da7
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/scripts/data/fontF/nsi.txt
@@ -0,0 +1,29 @@
+nsin//
+start//
+[[2,0]]//
+end//
+nsi1k//
+start//
+[[-1.7646,1.9555],[-0.8458,1.7871],[-1.3206,-0.0046]]//
+end//
+nsi1c//
+start//
+[[-1.4431,3.395],[-0.5243,3.104]]//
+end//
+start//
+[[-0.9837,1.3328],[-1.1521,0.664]]//
+end//
+nsi2k//
+start//
+[[-1.3206,-0.0046],[-0.9224,1.5114],[0.9152,1.4348],[1.7115,0.9601]]//
+end//
+nsi2c//
+start//
+[[-1.1776,0.5007],[-1.0449,1.0367]]//
+end//
+start//
+[[-0.218,3.7166],[1.6962,3.104]]//
+end//
+start//
+[[0.0919,-0.3982],[1.4206,-0.2037]]//
+end////
diff --git a/graphics/ketcindy/ketcindyfolder/scripts/data/fontF/pcr.cdy b/graphics/ketcindy/ketcindyfolder/scripts/data/fontF/pcr.cdy
new file mode 100644
index 0000000000..cc8891d01a
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/scripts/data/fontF/pcr.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/scripts/data/fontF/pcr.txt b/graphics/ketcindy/ketcindyfolder/scripts/data/fontF/pcr.txt
new file mode 100644
index 0000000000..76c429b5ca
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/scripts/data/fontF/pcr.txt
@@ -0,0 +1,26 @@
+pcrn//
+start//
+[[2,0]]//
+end//
+pcr1k//
+start//
+[[-1.4642,4.3617],[-1.4816,0.0001]]//
+end//
+pcr1c//
+start//
+[[-1.4642,3.0117],[-1.4642,1.5578]]//
+end//
+pcr2k//
+start//
+[[-1.7654,4.3962],[0.3658,4.3899],[0.3704,2.1982],[-1.4816,2.1982]]//
+end//
+pcr2c//
+start//
+[[-1.1236,4.3899],[0,4.3899]]//
+end//
+start//
+[[1.8552,4.3638],[1.7769,2.2211]]//
+end//
+start//
+[[0.0242,2.1982],[-0.72,2.1982]]//
+end////
diff --git a/graphics/ketcindy/ketcindyfolder/scripts/data/fontF/qcr.cdy b/graphics/ketcindy/ketcindyfolder/scripts/data/fontF/qcr.cdy
new file mode 100644
index 0000000000..ad28dd1572
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/scripts/data/fontF/qcr.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/scripts/data/fontF/qcr.txt b/graphics/ketcindy/ketcindyfolder/scripts/data/fontF/qcr.txt
new file mode 100644
index 0000000000..58a390e957
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/scripts/data/fontF/qcr.txt
@@ -0,0 +1,23 @@
+qcrn//
+start//
+[[2,0]]//
+end//
+qcr1k//
+start//
+[[0,0.1212],[0,4.5347],[0,0.1212]]//
+end//
+qcr1c//
+start//
+[[2.5616,0.1904],[2.527,4.5347]]//
+end//
+start//
+[[-2.527,4.4828],[-2.527,0.1731]]//
+end//
+qcr2k//
+start//
+[[0,1],[2.1808,-0.1904]]//
+end//
+qcr2c//
+start//
+[[0.9866,0.9692],[1.402,-0.1731]]//
+end////
diff --git a/graphics/ketcindy/ketcindyfolder/scripts/data/fontF/rcr.cdy b/graphics/ketcindy/ketcindyfolder/scripts/data/fontF/rcr.cdy
new file mode 100644
index 0000000000..e5a02dd9f0
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/scripts/data/fontF/rcr.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/scripts/data/fontF/rcr.txt b/graphics/ketcindy/ketcindyfolder/scripts/data/fontF/rcr.txt
new file mode 100644
index 0000000000..f668aba45a
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/scripts/data/fontF/rcr.txt
@@ -0,0 +1,34 @@
+rcrn//
+start//
+[[3,0]]//
+end//
+rcr1k//
+start//
+[[-1.5231,4.4135],[-1.5231,0]]//
+end//
+rcr1c//
+start//
+[[-1.5231,2.9424],[-1.5231,1.4712]]//
+end//
+rcr2k//
+start//
+[[-1.7827,4.4135],[0.6231,4.4135],[0.5885,2.3366],[-1.5231,2.3366]]//
+end//
+rcr2c//
+start//
+[[-0.9808,4.4135],[-0.1788,4.4135]]//
+end//
+start//
+[[2.0943,4.4135],[2.025,2.3539]]//
+end//
+start//
+[[-0.1038,2.3366],[-0.75,2.3366]]//
+end//
+rcr3k//
+start//
+[[-0.3981,2.3366],[1.8866,-0]]//
+end//
+rcr3c//
+start//
+[[1.2808,2.3193],[1.0731,1.2462]]//
+end////
diff --git a/graphics/ketcindy/ketcindyfolder/scripts/data/fontF/tsi.cdy b/graphics/ketcindy/ketcindyfolder/scripts/data/fontF/tsi.cdy
new file mode 100644
index 0000000000..2fa6231c70
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/scripts/data/fontF/tsi.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/scripts/data/fontF/tsi.txt b/graphics/ketcindy/ketcindyfolder/scripts/data/fontF/tsi.txt
new file mode 100644
index 0000000000..6a51e1904b
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/scripts/data/fontF/tsi.txt
@@ -0,0 +1,23 @@
+tsin//
+start//
+[[2,0]]//
+end//
+tsi1k//
+start//
+[[-0.9341,2.8483],[0.9494,2.879]]//
+end//
+tsi1c//
+start//
+[[-0.3063,2.8585],[0.3216,2.8687]]//
+end//
+tsi2k//
+start//
+[[0.3828,4.2112],[-0.49,0.6125],[0.8422,0.9801]]//
+end//
+tsi2c//
+start//
+[[0.0919,3.0117],[-0.1991,1.8121]]//
+end//
+start//
+[[-0.7044,-0.2144],[0.4594,-0.1072]]//
+end////
diff --git a/graphics/ketcindy/ketcindyfolder/scripts/data/fontF/xsi.cdy b/graphics/ketcindy/ketcindyfolder/scripts/data/fontF/xsi.cdy
new file mode 100644
index 0000000000..428c783d42
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/scripts/data/fontF/xsi.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/scripts/data/fontF/xsi.txt b/graphics/ketcindy/ketcindyfolder/scripts/data/fontF/xsi.txt
new file mode 100644
index 0000000000..f16d04f0cb
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/scripts/data/fontF/xsi.txt
@@ -0,0 +1,26 @@
+xsin//
+start//
+[[2,0]]//
+end//
+xsi1k//
+start//
+[[-1.2134,2.2311],[0.027,1.3889],[1.2521,0.6232]]//
+end//
+xsi1c//
+start//
+[[-0.9837,3.0734],[0.6855,3.4869]]//
+end//
+start//
+[[-0.6468,-0.5866],[0.9765,-0.1118]]//
+end//
+xsi2k//
+start//
+[[1.6043,2.5527],[0.027,1.3889],[-1.5503,0.3935]]//
+end//
+xsi2c//
+start//
+[[1.4818,3.1193],[0.4864,3.2265]]//
+end//
+start//
+[[-0.4324,-0.3722],[-1.489,-0.2037]]//
+end////
diff --git a/graphics/ketcindy/ketcindyfolder/scripts/data/fontF/ysi.cdy b/graphics/ketcindy/ketcindyfolder/scripts/data/fontF/ysi.cdy
new file mode 100644
index 0000000000..ff075329b3
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/scripts/data/fontF/ysi.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/scripts/data/fontF/ysi.txt b/graphics/ketcindy/ketcindyfolder/scripts/data/fontF/ysi.txt
new file mode 100644
index 0000000000..83f6b3298e
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/scripts/data/fontF/ysi.txt
@@ -0,0 +1,26 @@
+ysin//
+start//
+[[2,0]]//
+end//
+ysi1k//
+start//
+[[-1.3052,2.1239],[-0.5549,1.4042],[1.0684,1.3889]]//
+end//
+ysi1c//
+start//
+[[-0.8458,3.2418],[0.2567,3.2572]]//
+end//
+start//
+[[-1.198,-0.1272],[0.4099,-0.8316]]//
+end//
+ysi2k//
+start//
+[[1.4665,2.8284],[0.7008,-0.0506],[-1.244,-0.8316]]//
+end//
+ysi2c//
+start//
+[[1.1756,1.7462],[0.9152,0.7406]]//
+end//
+start//
+[[0.2721,-1.6738],[-1.1981,-1.5666]]//
+end////
diff --git a/graphics/ketcindy/ketcindyfolder/scripts/data/fontF/zsi.cdy b/graphics/ketcindy/ketcindyfolder/scripts/data/fontF/zsi.cdy
new file mode 100644
index 0000000000..3326d6add7
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/scripts/data/fontF/zsi.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/scripts/data/fontF/zsi.txt b/graphics/ketcindy/ketcindyfolder/scripts/data/fontF/zsi.txt
new file mode 100644
index 0000000000..f62925cd75
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/scripts/data/fontF/zsi.txt
@@ -0,0 +1,28 @@
+zsin//
+start//
+[[3,0]]//
+end//
+zsi1k//
+start//
+[[-0.8152,2.2618],[1.1756,2.6752]]//
+end//
+zsi1c//
+start//
+[[0.1802,3.7319],[0.2874,1.7564]]//
+end//
+zsi2k//
+start//
+[[1.3287,2.8896],[-1.3818,-0.02]]//
+end//
+zsi2c//
+start//
+[[0.5783,1.7564],[-0.7846,1.052]]//
+end//
+zsi3k//
+start//
+[[-1.1215,0.3629],[1.0684,0.8835]]//
+end//
+zsi3c//
+start//
+[[-0.5549,0.9754],[0.2108,-0.9388]]//
+end////
diff --git a/graphics/ketcindy/ketcindyfolder/scripts/data/polyhedrons_obj/r01.obj b/graphics/ketcindy/ketcindyfolder/scripts/data/polyhedrons_obj/r01.obj
new file mode 100644
index 0000000000..2edf33c599
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/scripts/data/polyhedrons_obj/r01.obj
@@ -0,0 +1,8 @@
+v -0.81649658 -0.47140452 0.33333333
+v 0.81649658 -0.47140452 0.33333333
+v 0.00000000 0.00000000 -1.00000000
+v 0.00000000 0.94280904 0.33333333
+f 1 2 4
+f 1 4 3
+f 1 3 2
+f 2 3 4
diff --git a/graphics/ketcindy/ketcindyfolder/scripts/data/polyhedrons_obj/r02.obj b/graphics/ketcindy/ketcindyfolder/scripts/data/polyhedrons_obj/r02.obj
new file mode 100644
index 0000000000..85bbede8b6
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/scripts/data/polyhedrons_obj/r02.obj
@@ -0,0 +1,14 @@
+v -0.70710678 -0.70710678 0.00000000
+v -0.70710678 0.70710678 0.00000000
+v 0.70710678 0.70710678 0.00000000
+v 0.70710678 -0.70710678 0.00000000
+v 0.00000000 0.00000000 -1.00000000
+v 0.00000000 0.00000000 1.00000000
+f 1 2 5
+f 1 5 4
+f 1 4 6
+f 1 6 2
+f 2 3 5
+f 2 6 3
+f 3 4 5
+f 3 6 4
diff --git a/graphics/ketcindy/ketcindyfolder/scripts/data/polyhedrons_obj/r03.obj b/graphics/ketcindy/ketcindyfolder/scripts/data/polyhedrons_obj/r03.obj
new file mode 100644
index 0000000000..c42c1d1f6e
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/scripts/data/polyhedrons_obj/r03.obj
@@ -0,0 +1,14 @@
+v -0.57735027 -0.57735027 0.57735027
+v -0.57735027 0.57735027 0.57735027
+v 0.57735027 0.57735027 0.57735027
+v 0.57735027 -0.57735027 0.57735027
+v -0.57735027 -0.57735027 -0.57735027
+v -0.57735027 0.57735027 -0.57735027
+v 0.57735027 0.57735027 -0.57735027
+v 0.57735027 -0.57735027 -0.57735027
+f 1 2 6 5
+f 1 5 8 4
+f 1 4 3 2
+f 2 3 7 6
+f 3 4 8 7
+f 5 6 7 8
diff --git a/graphics/ketcindy/ketcindyfolder/scripts/data/polyhedrons_obj/r04.obj b/graphics/ketcindy/ketcindyfolder/scripts/data/polyhedrons_obj/r04.obj
new file mode 100644
index 0000000000..56a0c40c7a
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/scripts/data/polyhedrons_obj/r04.obj
@@ -0,0 +1,32 @@
+v -0.35682209 -0.49112347 0.79465447
+v 0.35682209 -0.49112347 0.79465447
+v 0.57735027 -0.79465447 0.18759247
+v 0.00000000 -0.98224695 -0.18759247
+v -0.57735027 -0.79465447 0.18759247
+v -0.57735027 0.18759247 0.79465447
+v 0.57735027 0.18759247 0.79465447
+v 0.93417236 -0.30353100 -0.18759247
+v -0.00000000 -0.60706200 -0.79465447
+v -0.93417236 -0.30353100 -0.18759247
+v -0.93417236 0.30353100 0.18759247
+v 0.00000000 0.60706200 0.79465447
+v 0.93417236 0.30353100 0.18759247
+v 0.57735027 -0.18759247 -0.79465447
+v -0.57735027 -0.18759247 -0.79465447
+v -0.57735027 0.79465447 -0.18759247
+v 0.00000000 0.98224695 0.18759247
+v 0.57735027 0.79465447 -0.18759247
+v 0.35682209 0.49112347 -0.79465447
+v -0.35682209 0.49112347 -0.79465447
+f 1 2 7 12 6
+f 1 6 11 10 5
+f 1 5 4 3 2
+f 2 3 8 13 7
+f 3 4 9 14 8
+f 4 5 10 15 9
+f 6 12 17 16 11
+f 7 13 18 17 12
+f 8 14 19 18 13
+f 9 15 20 19 14
+f 10 11 16 20 15
+f 16 17 18 19 20
diff --git a/graphics/ketcindy/ketcindyfolder/scripts/data/polyhedrons_obj/r05.obj b/graphics/ketcindy/ketcindyfolder/scripts/data/polyhedrons_obj/r05.obj
new file mode 100644
index 0000000000..fd013dc250
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/scripts/data/polyhedrons_obj/r05.obj
@@ -0,0 +1,32 @@
+v -0.52573111 -0.72360680 0.44721360
+v -0.85065081 0.27639320 0.44721360
+v -0.00000000 0.89442719 0.44721360
+v 0.85065081 0.27639320 0.44721360
+v 0.52573111 -0.72360680 0.44721360
+v 0.00000000 -0.89442719 -0.44721360
+v -0.85065081 -0.27639320 -0.44721360
+v -0.52573111 0.72360680 -0.44721360
+v 0.52573111 0.72360680 -0.44721360
+v 0.85065081 -0.27639320 -0.44721360
+v 0.00000000 0.00000000 1.00000000
+v -0.00000000 0.00000000 -1.00000000
+f 1 2 7
+f 1 7 6
+f 1 6 5
+f 1 5 11
+f 1 11 2
+f 2 3 8
+f 2 8 7
+f 2 11 3
+f 3 4 9
+f 3 9 8
+f 3 11 4
+f 4 5 10
+f 4 10 9
+f 4 11 5
+f 5 6 10
+f 6 7 12
+f 6 12 10
+f 7 8 12
+f 8 9 12
+f 9 10 12
diff --git a/graphics/ketcindy/ketcindyfolder/scripts/data/polyhedrons_obj/readme.pdf b/graphics/ketcindy/ketcindyfolder/scripts/data/polyhedrons_obj/readme.pdf
new file mode 100644
index 0000000000..07633b0b1b
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/scripts/data/polyhedrons_obj/readme.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/scripts/data/polyhedrons_obj/readme.txt b/graphics/ketcindy/ketcindyfolder/scripts/data/polyhedrons_obj/readme.txt
new file mode 100644
index 0000000000..a4df939ef7
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/scripts/data/polyhedrons_obj/readme.txt
@@ -0,0 +1,3 @@
+Put data files in obj format into this folder.
+For example, dowload data from
+ http://mitani.cs.tsukuba.ac.jp/polyhedron/index.html
diff --git a/graphics/ketcindy/ketcindyfolder/scripts/ketcindy.ini b/graphics/ketcindy/ketcindyfolder/scripts/ketcindy.ini
new file mode 100644
index 0000000000..b980a15437
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/scripts/ketcindy.ini
@@ -0,0 +1,6 @@
+PathThead="(path of bin of TeX)"+"/";
+Dirhead="(path)"+"/scripts/ketcindy";
+Homehead="/Users";
+setdirectory(Dirhead);
+import("setketcindy.txt");
+import("ketoutset.txt");
diff --git a/graphics/ketcindy/ketcindyfolder/scripts/ketcindy.pl b/graphics/ketcindy/ketcindyfolder/scripts/ketcindy.pl
new file mode 100755
index 0000000000..e5efbc0c98
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/scripts/ketcindy.pl
@@ -0,0 +1,203 @@
+#!/usr/bin/env perl
+#
+# KETCindy starter script
+#
+# (C) 2017-2018 Norbert Preining
+# Licensed under the same license terms as ketpic itself, that is GPLv3+
+#
+
+use strict;
+$^W = 1;
+
+use Digest::MD5;
+use File::Copy;
+
+my $BinaryName = "Cinderella2";
+my $TemplateFile = "template1basic.cdy";
+my $devnull = "/dev/null";
+my $prog = "ketcindy";
+my $systype;
+if (win32()) {
+ $systype = "Windows";
+ $devnull = "nul";
+} else {
+ $systype = `uname`;
+ chomp($systype);
+}
+my $HOME = ($systype eq "Windows") ? $ENV{'USERPROFILE'} : $ENV{'HOME'};
+my $workdir ="$HOME/ketcindy";
+
+my $cinderella;
+if ($#ARGV >= 0) {
+ if ($ARGV[0] eq '-c') {
+ $cinderella = ($ARGV[1] ? $ARGV[1] : "");
+ }
+} else {
+ $cinderella = which($BinaryName);
+}
+
+if (! "$cinderella") {
+ if ($systype eq 'Darwin') {
+ if (-r '/Applications/Cinderella2.app/Contents/MacOS/Cinderella2') {
+ $cinderella = '/Applications/Cinderella2.app/Contents/MacOS/Cinderella2';
+ }
+ } elsif ($systype eq 'Windows') {
+ if (-f 'c:/Program Files (x86)/Cinderella/Cinderella2.exe') {
+ $cinderella = 'c:/Program Files (x86)/Cinderella/Cinderella2.exe';
+ }
+ }
+}
+
+if (! "$cinderella") {
+ die "$prog: Cannot find $BinaryName!";
+}
+
+if ( ! -x "$cinderella" ) {
+ die "$prog: Program $cinderella is not executable!";
+}
+
+# find real path
+my $realcind = win32() ? $cinderella : `realpath "$cinderella"`;
+chomp($realcind);
+my ($cinddir, $bn) = dirname_and_basename($realcind);
+
+my $plugindir = ($systype eq 'Darwin') ? "$cinddir/../PlugIns" : "$cinddir/Plugins";
+
+my $plugin = "$plugindir/KetCindyPlugin.jar";
+my $dirheadplugin = "$plugindir/ketcindy.ini";
+
+# find Jar
+chomp(my $KetCdyJar = `kpsewhich -format=texmfscripts KetCindyPlugin.jar`);
+# search for template.cdy
+chomp(my $TempCdy = `kpsewhich -format=texmfscripts $TemplateFile`);
+chomp(my $DirHead=`kpsewhich -format=texmfscripts ketcindy.ini`);
+
+if (-z "$TempCdy" || -z "$KetCdyJar") {
+ die "$prog: Cannot find $TemplateFile via kpsewhich, is ketpic installed?";
+}
+
+
+if ( ! -r "$plugin" || ! -r "$dirheadplugin" ) {
+ print "$prog: Cinderella is *NOT* set up for KETCindy!\n";
+ print "$prog: You need to copy\n";
+ print "$prog: $KetCdyJar\n";
+ print "$prog: $DirHead\n";
+ print "$prog: into\n";
+ print "$prog: $plugindir\n";
+ print "\n";
+ exit(1);
+}
+
+my $myjarmd = md5digest($KetCdyJar);
+my $sysjarmd = md5digest($plugin);
+
+if ( $myjarmd ne $sysjarmd ) {
+ print "$prog: The installed version of the plugin in\n";
+ print "$prog: $plugin\n";
+ print "$prog: differs from the version shipped in\n";
+ print "$prog: $KetCdyJar\n";
+ print "$prog: You might need to update the former one with the later one!\n";
+}
+
+# print "DEBUG workdir =$workdir=\n";
+# print "DEBUG TemplateFile =$TemplateFile=\n";
+mkdir($workdir);
+copy($TempCdy, $workdir) or die "$prog: Copy failed: $!";
+
+# print "Exec $cinderella $workdir/$TemplateFile\n";
+if (win32()) {
+ # no idea why a normal call with exec did not find the template file
+ my $out = `"$cinderella" "$workdir/$TemplateFile"`;
+} else {
+ exec($cinderella, "$workdir/$TemplateFile");
+}
+
+
+sub md5digest {
+ my $file = shift;
+ open(FILE, $file) || die "$prog: open($file) failed: $!";
+ binmode(FILE);
+ my $out = Digest::MD5->new->addfile(*FILE)->hexdigest;
+ close(FILE);
+ return $out;
+}
+
+# taken from TeXLive::TLUtils.pm
+sub win32 {
+ if ($^O =~ /^MSWin/i) {
+ return 1;
+ } else {
+ return 0;
+ }
+}
+sub which {
+ my ($prog) = @_;
+ my @PATH;
+ my $PATH = getenv('PATH');
+
+ if (&win32) {
+ my @PATHEXT = split (';', getenv('PATHEXT'));
+ push (@PATHEXT, ''); # in case argument contains an extension
+ @PATH = split (';', $PATH);
+ for my $dir (@PATH) {
+ for my $ext (@PATHEXT) {
+ if (-f "$dir/$prog$ext") {
+ return "$dir/$prog$ext";
+ }
+ }
+ }
+
+ } else { # not windows
+ @PATH = split (':', $PATH);
+ for my $dir (@PATH) {
+ if (-x "$dir/$prog") {
+ return "$dir/$prog";
+ }
+ }
+ }
+ return "";
+}
+sub dirname_and_basename {
+ my $path=shift;
+ my ($share, $base) = ("", "");
+ if (win32()) {
+ $path=~s!\\!/!g;
+ }
+ # do not try to make sense of paths ending with /..
+ return (undef, undef) if $path =~ m!/\.\.$!;
+ if ($path=~m!/!) { # dirname("foo/bar/baz") -> "foo/bar"
+ # eliminate `/.' path components
+ while ($path =~ s!/\./!/!) {};
+ # UNC path? => first split in $share = //xxx/yy and $path = /zzzz
+ if (win32() and $path =~ m!^(//[^/]+/[^/]+)(.*)$!) {
+ ($share, $path) = ($1, $2);
+ if ($path =~ m!^/?$!) {
+ $path = $share;
+ $base = "";
+ } elsif ($path =~ m!(/.*)/(.*)!) {
+ $path = $share.$1;
+ $base = $2;
+ } else {
+ $base = $path;
+ $path = $share;
+ }
+ return ($path, $base);
+ }
+ # not a UNC path
+ $path=~m!(.*)/(.*)!; # works because of greedy matching
+ return ((($1 eq '') ? '/' : $1), $2);
+ } else { # dirname("ignore") -> "."
+ return (".", $path);
+ }
+}
+sub getenv {
+ my $envvar=shift;
+ my $var=$ENV{"$envvar"};
+ return 0 unless (defined $var);
+ if (&win32) {
+ $var=~s!\\!/!g; # change \ -> / (required by Perl)
+ }
+ return "$var";
+}
+
+
diff --git a/graphics/ketcindy/ketcindyfolder/scripts/ketcindy.sh b/graphics/ketcindy/ketcindyfolder/scripts/ketcindy.sh
new file mode 100755
index 0000000000..0ee507d745
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/scripts/ketcindy.sh
@@ -0,0 +1,105 @@
+#!/bin/sh
+#
+# KETCindy starter script
+#
+# (C) 2017-2018 Norbert Preining
+# Licensed under the same license terms as ketpic itself, that is GPLv3+
+#
+
+BinaryName=Cinderella2
+TemplateFile=template1basic.cdy
+systype=`uname`
+workdir="$HOME/ketcindy"
+
+if [ "$1" = "-c" ]
+then
+ shift
+ cinderella="$1"
+else
+ cinderella=`which $BinaryName 2>/dev/null`
+fi
+
+if [ -z "$cinderella" ]
+then
+ case $systype in
+ Darwin)
+ if [ -r /Applications/Cinderella2.app/Contents/MacOS/Cinderella2 ]
+ then
+ cinderella=/Applications/Cinderella2.app/Contents/MacOS/Cinderella2
+ else
+ echo "Cannot find $BinaryName!" >&2
+ exit 1
+ fi
+ ;;
+ *)
+ echo "Cannot find $BinaryName!" >&2
+ exit 1
+ ;;
+ esac
+fi
+
+if [ ! -x "$cinderella" ] ; then
+ echo "Program $cinderella is not executable!" >&2
+ exit 1
+fi
+# find real path
+realcind=`realpath "$cinderella"`
+cinddir=`dirname "$realcind"`
+case $systype in
+ Darwin)
+ plugindir="$cinddir/../PlugIns";;
+ *)
+ plugindir="$cinddir/Plugins";;
+esac
+
+plugin="$plugindir/KetCindyPlugin.jar"
+dirheadplugin="$plugindir/ketcindy.ini"
+
+# find Jar
+KetCdyJar=`kpsewhich -format=texmfscripts KetCindyPlugin.jar`
+# search for template.cdy
+TempCdy=`kpsewhich -format=texmfscripts $TemplateFile`
+DirHead=`kpsewhich -format=texmfscripts ketcindy.ini`
+
+if [ -z "$TempCdy" -o -z "$KetCdyJar" ]
+then
+ echo "Cannot find $TemplateFile via kpsewhich, is ketpic installed?" >&2
+ exit 1
+fi
+
+
+if [ ! -r "$plugin" -o ! -r "$dirheadplugin" ] ; then
+ echo "Cinderella is *NOT* set up for KETCindy!"
+ echo "You need to copy"
+ echo " $KetCdyJar"
+ echo " $DirHead"
+ echo "into"
+ echo " $plugindir"
+ echo ""
+ exit 1
+fi
+
+# check whether the .jar md5sum is fine, but don't make this an error
+case $systype in
+ Darwin)
+ __md5sum=md5;;
+ *)
+ __md5sum=md5sum;;
+esac
+myjarmd=`cat "$KetCdyJar" | $__md5sum`
+sysjarmd=`cat "$plugin" | $__md5sum`
+if [ ! "$myjarmd" = "$sysjarmd" ]
+then
+ echo "The installed version of the plugin in"
+ echo " $plugin"
+ echo "differs from the version shipped in"
+ echo " $KetCdyJar"
+ echo "You might need to update the former one with the later one!"
+fi
+
+
+mkdir -p "$workdir"
+cp "$TempCdy" "$workdir"
+
+exec "$cinderella" "$workdir/$TemplateFile"
+
diff --git a/graphics/ketcindy/ketcindyfolder/scripts/ketcindyjs/3dlist.txt b/graphics/ketcindy/ketcindyfolder/scripts/ketcindyjs/3dlist.txt
new file mode 100644
index 0000000000..340efcf9f0
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/scripts/ketcindyjs/3dlist.txt
@@ -0,0 +1,84 @@
+Ketinit3d,3d,22,50,Setwindow,Addax
+Start3d,3d,54,162,Strsplit,Toupper,Setfiles,Setwindow,Slider,Sprintf,Ptselected,Ptseg3data
+Setangle,3d,166,237,Parapt,Ptselected,Xyzcoord,Defvar,Datalist3d,Projpara,textformat,Ptseg3data
+Getangle,3d,241,259,getangle,divoptions,Strsplit,181111,Toupper,textformat
+Angleselected,3d,263,264,IsAngle
+Isangle,3d,268,268,Ptselected
+Changestyle3d,3d,272,291,Changestyle
+Dist3d,3d,295,314
+Findangle,3d,318,335
+Cancoordpara,3d,339,347
+Zparapt,3d,351,355
+Projcoordpara,3d,359,364,Parapt,Zparapt
+Parapt,3d,368,374
+Parasubpt,3d,378,384
+Parasubptlog,3d,388,393
+Mainsubpt3d,3d,397,415
+Projcurve,3d,419,469,Measuredepth
+Projpara,3d,473,542,Divoptions,Strsplit,Toupper,Projcurve,textformat,Com2nd,Getlinestyle,Texcom
+Invparaptpp,3d,546,601,textformat,Projpara,Nearestpt,Crossprod,Dotprod,Ptend,Numptcrv,Ptcrv
+Invparapt,3d,605,609,Invparaptpp
+Subgraph,3d,613,630,Measuredepth,Parasubpt,Textformat
+Spaceline,3d,634,727,Divoptions,Toupper,Projpara,Textformat,Com2nd,Getlinestyle,Texcom,Subgraph
+Spacecurve,3d,731,897,Divoptions,Toupper,tmpfn,Projpara,textformat,Com2nd,Getlinestyle,Texcom,Subgraph
+Partcrv3d,3d,901,937,parapt,partcrv,Xyzcoord,Spaceline
+Joincrvs3d(,3d,941,1036,Joincrvs3d,Divoptions,Norm,Projpara,textformat,Com2nd,Getlinestyle,Texcom,Subgraph
+Xyzax3data,3d,1040,1166,Divoptions,Strsplit,Toupper,Spaceline,Xyzaxparaname,Projpara,textformat,Com2nd,Getlinestyle,Texcom,Lightarrowdata,Letter,Parapt,Subgraph
+Xyzaxparaname,3d,1170,1212,Strsplit,Dqq,Parapt,Expr
+Datalist3d,3d,1216,1224
+Datalist2d,3d,1228,1236
+Embed,3d,1240,1328,Measuredepth,Divoptions,Assign,Projpara,textformat,Com2nd,Getlinestyle,Texcom,Subgraph
+Rotatepoint3d,3d,1332,1418,Rotate3pt,Measuredepth
+Rotatedata3d,3d,1422,1492,Divoptions,Rotatepoint3d,Flattenlist,Projpara,textformat,RSform,Textformat,Com2nd,Getlinestyle,Texcom,Subgraph
+Translatepoint3d,3d,1496,1523,Translate3pt,Measuredepth
+Translatedata3d,3d,1527,1589,Divoptions,Measuredepth,Translatepoint3d,Flattenlist,Projpara,RSform,textformat,Com2nd,Getlinestyle,Texcom,Subgraph
+Reflectpoint3d,3d,1593,1617,Reflect3pt,Crossprod,Dotprod
+Reflectdata3d,3d,1621,1686,Divoptions,Reflectpoint3d,Flattenlist,textformat,Projpara,RSform,Textformat,Com2nd,Getlinestyle,Texcom,Subgraph
+Scalepoint3d,3d,1691,1708,Scale3pt
+Scaledata3d,3d,1713,1782,Divoptions,Scalepoint3d,Flattenlist,textformat,Projpara,RSform,Textformat,Com2nd,Getlinestyle,Texcom,Subgraph
+Xyzcoord,3d,1786,1792,Mainsubpt3d
+Putoncurve3d,3d,1796,1812,PutonCurve,Nearestpt,Paramoncurve,Pointoncurve,Xyzcoord,textformat,Defvar
+Mkpointlist,3d,1816,1933,Workprocess,Finddef,Norm,Parapt,Parasubpt,Putpoint,Mainsubpt3d,Defvar,Ptselected
+Mkseg3d,3d,1937,1981,Divoptions,Finddef,Spaceline
+Ptseg3data,3d,1985,2020,Ptselected,Parapt,Parasubpt,Mainsubpt3d,Defvar,Mkpointlist,Mkseg3d
+Putonseg3d,3d,2024,2076,divoptions,Putonseg,Putpoint,Parapt,Textformat,Parasubpt,Xyzcoord,Defvar
+Putpoint3d,3d,2080,2138,Toupper,Xyzcoord,Defvar,Parapt,Putpoint,Parasubpt,Fixpoint3d
+Fixpoint3d,3d,2142,2159,Defvar,Parapt,textformat
+Letter3d,3d,2163,2183,Parapt,Letter
+Expr3d,3d,2187,2207,Parapt,Expr
+Perppt,3d,2211,2267,Putperp,Crossprod,IntersectsgpL,Dotprod,Defvar,Putpoint3d,Fixpoint3d,Drawpoint3d
+Perpplane,3d,2271,2312,findangle,Cancoordpara,Toupper,Putpoint3d,Defvar,Drawpoint3d
+Drawpoint3d,3d,2316,2332,Divoptions,Measuredepth,Parapt,Textformat,Parasubpt
+Pointdata3d,3d,2336,2345,Measuredepth,Parapt,Pointdata
+Putaxes3d,3d,2349,2360,Putpoint3d
+IntersectsgpL,3d,2364,2481,Divoptions,Strsplit,Toupper,Crossprod,Reflectpoint3d,Dotprod,Putpoint3d,Drawpoint3d,Textformat
+Bezier3d,3d,2485,2582,Measuredepth,Bezier3,Divoptions,Toupper,Assign,Spacecurve,Projpara,textformat,RSform,Getlinestyle,Com2nd,Subgraph
+Putbezier3data,3d,2586,2624,Divoptions,Putpoint3d
+Mkbezierptcrv3d,3d,2628,2648,Mkbezierptcrv3,Putbezier3data,Bezier3
+Readobj,3d,2686,2788,Divoptions,Toupper,Removespace
+Concatobj,3d,2792,2862,divoptions,Toupper,dist3d
+VertexEdgeFace,3d,2899,2862
+Vertexedgeface,3d,2904,3085,Divoptions,Strsplit,Toupper,Parapt,Putpoint3d,Defvar,Dqq,Changestyle3d,Spaceline,Textformat
+Phparadata,3d,3089,3191,Divoptions,Getlinestyle,Com2nd,Changestyle3d,Drawlinetype,Toupper
+Nohiddenseg,3d,3195,3324,Parapt,Dotprod,Cancoordpara,IntersectsgpL,Projcoordpara,Intersectcrvspp,Crossprod
+Nohiddensegs,3d,3328,3363,Nohiddenseg
+Nohiddenbyfaces,3d,3367,3516,Datalist3d,Divoptions,Strsplit,Toupper,Changestyle3d,MeasureDepth,Nohiddensegs,Spaceline
+Faceremovaldata,3d,3520,3603,Divoptions,Getlinestyle,Com2nd,Measuredepth,Changestyle3d,Drawlinetype,Toupper
+Fullformfunc,3d,3607,3689,Removespace
+Surffun,3d,3693,3709,Fullformfunc,Deffun
+Sf3data,3d,3713,3797,Surffun,Divoptions,Toupper,textformat,Spacecurve
+SfbdparadataR,3d,3801,3887,ConvertFdtoC,Divoptions,Toupper,Select,MkprecommandR,textformat,RSform,Dqq,CalcbyR,ReadOutData,Extractdata,Projpara
+Addpoints,3d,3891,3906,RSform,textformat
+CrvsfparadataR,3d,3910,4012,Changestyle,Divoptions,Toupper,RSform,Select,MkprecommandR,Addpoints,textformat,Rsform,Dqq,CalcbyR,ReadOutData,Extractdata,Projpara
+Crv3onsfparadataR,3d,4016,4116,Crvs3onfparadataR,Changestyle3d,Changestyle,Divoptions,Toupper,RSform,Select,MkprecommandR,textformat,Rsform,Dqq,Addpoints,CalcbyR,ReadOutData,Extractdata,Projpara
+Crv2onsfparadataR,3d,4120,4221,Crvs2onfparadataR,Changestyle,Divoptions,Toupper,RSform,Select,MkprecommandR,textformat,Rsform,Dqq,Addpoints,CalcbyR,ReadOutData,Extractdata,Projpara
+WireparadataR,3d,4225,4326,Divoptions,Toupper,Select,MkprecommandR,RSform,textformat,Rsform,Dqq,Addpoints,CalcbyR,ReadOutData,Extractdata,Projpara
+IntersectcrvsfR,3d,4330,4418,Intersectcrvsf,Divoptions,Toupper,RSform,textformat,Rsform,Dqq,CalcbyR,ReadOutData
+SfcutparadataR,3d,4422,4519,Strsplit,Changestyle,Divoptions,Toupper,RSform,Select,MkprecommandR,textformat,Rsform,Dqq,CalcbyR,ReadOutData,Extractdata,Projpara
+Skeletonparadata,3d,4525,4529,Skeletondatacindy
+Skeletondatacindy,3d,4533,4722,Datalist3d,Divoptions,Strsplit,Toupper,Anyselected,Flattenlist,isexists,ReadOutData,Textformat,Projcoordcurve,Makeskeletondata,Norm,Ptcrv,Invparapt,Projcurve,textformat,Changestyle3d,Getlinestyle,Com2nd,Subgraph,WriteOutData
+Makeskeletondata,3d,4726,4928,Columnlist,Intersectcrvspp,Op,column,Dotprod,Norm,Kukannozoku,Pointoncurve,Listplot
+Kukannozoku,3d,4932,4983
+Projcoordcurve,3d,4989,5003
+Divnohidhid,3d,5007,5070,Divoptions,Toupper,assign,Dotprod,Changestyle3d,Spaceline,textformat
+Beziersurf,3d,5074,5129,factorial,Deffun,Op,Bterm,Defvar
diff --git a/graphics/ketcindy/ketcindyfolder/scripts/ketcindyjs/Cindy.js b/graphics/ketcindy/ketcindyfolder/scripts/ketcindyjs/Cindy.js
new file mode 100644
index 0000000000..2be04890fd
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/scripts/ketcindyjs/Cindy.js
@@ -0,0 +1,809 @@
+/* CindyJS - (C) 2014-2016 The CindyJS Project
+ * Mostly licensed under the Apache License 2.0, but subprojects may use different licensing.
+ * See https://github.com/CindyJS/CindyJS/tree/8c01b8d1d336e92934ad80c44aafc5510a1aea36
+ * for corresponding sources and their respective licensing conditions.
+ */
+var enableInlineVideo=function(){function p(f,k,p,E){function F(p){ia=k(F,E);f(p-(N||p));N=p}var ia,N;return{start:function(){ia||F(0)},stop:function(){p(ia);ia=null;N=0}}}function F(f,k,p,E){function F(k){!!f[p]===!!E&&k.stopImmediatePropagation();delete f[p]}return f.addEventListener(k,F,!1),F}function ha(f,k,p,E){function F(f){p[k]=f}E&&F(f[k]);Object.defineProperty(f,k,{get:function(){return p[k]},set:F})}function Ga(f,k,p){p.addEventListener(k,function(){return f.dispatchEvent(new Event(k))})}
+function pa(f,k){Promise.resolve().then(function(){f.dispatchEvent(new Event(k))})}function Ha(f){var k=new Audio;return Ga(f,"play",k),Ga(f,"playing",k),Ga(f,"pause",k),k.crossOrigin=f.crossOrigin,k.src=f.src||f.currentSrc||"data:",k}function ea(k,p,E){(N||0)+200<Date.now()&&(k[fa]=!0,N=Date.now());E||(k.currentTime=p);f[++tb%3]=100*p|0}function k(f){this.video.readyState>=this.video.HAVE_FUTURE_DATA?(this.hasAudio||(this.driver.currentTime=this.video.currentTime+f*this.video.playbackRate/1E3,this.video.loop&&
+this.driver.currentTime>=this.video.duration&&(this.driver.currentTime=0)),ea(this.video,this.driver.currentTime)):this.video.networkState===this.video.NETWORK_IDLE&&0===this.video.buffered.length&&this.video.load();this.video.ended&&(delete this.video[fa],this.video.pause(!0))}function Qa(){var f=this[S];return this.webkitDisplayingFullscreen?void this[ub]():("data:"!==f.driver.src&&f.driver.src!==this.src&&(ea(this,0,!0),f.driver.src=this.src),void(this.paused&&(f.paused=!1,0===this.buffered.length&&
+this.load(),f.driver.play(),f.updater.start(),f.hasAudio||(pa(this,"play"),f.video.readyState>=f.video.HAVE_ENOUGH_DATA&&pa(this,"playing")))))}function E(f){var k=this[S];k.driver.pause();k.updater.stop();this.webkitDisplayingFullscreen&&this[$a]();k.paused&&!f||(k.paused=!0,k.hasAudio||pa(this,"pause"),this.ended&&(this[fa]=!0,pa(this,"ended")))}function ia(E,F){var M=E[S]={};M.paused=!0;M.hasAudio=F;M.video=E;M.updater=p(k.bind(M),requestAnimationFrame,cancelAnimationFrame);F?M.driver=Ha(E):(E.addEventListener("canplay",
+function(){E.paused||pa(E,"playing")}),M.driver={src:E.src||E.currentSrc||"data:",muted:!0,paused:!0,pause:function(){M.driver.paused=!0},play:function(){M.driver.paused=!1;M.driver.currentTime>=M.video.duration&&ea(E,0)},get ended(){return M.driver.currentTime>=M.video.duration}});E.addEventListener("emptied",function(){var f=!M.driver.src||"data:"===M.driver.src;M.driver.src&&M.driver.src!==E.src&&(ea(E,0,!0),M.driver.src=E.src,f?M.driver.play():M.updater.stop())},!1);E.addEventListener("webkitbeginfullscreen",
+function(){E.paused?F&&0===M.driver.buffered.length&&M.driver.load():(E.pause(),E[ub]())});F&&(E.addEventListener("webkitendfullscreen",function(){M.driver.currentTime=E.currentTime}),E.addEventListener("seeking",function(){0>f.indexOf(100*E.currentTime|0)&&(M.driver.currentTime=E.currentTime)}))}var N,V="object"==typeof document&&"object-fit"in document.head.style&&!matchMedia("(-webkit-video-playable-inline)").matches,S="bfred-it:iphone-inline-video",fa="bfred-it:iphone-inline-video:event",ub="bfred-it:iphone-inline-video:nativeplay",
+$a="bfred-it:iphone-inline-video:nativepause",f=[],tb=0;return function(f,k){if(void 0===k&&(k={}),!f[S])if(k.everywhere||V&&(k.iPad||k.ipad?/iPhone|iPod|iPad/:/iPhone|iPod/).test(navigator.userAgent)){!f.paused&&f.webkitDisplayingFullscreen&&f.pause();ia(f,!f.muted);var p=f[S];f[ub]=f.play;f[$a]=f.pause;f.play=Qa;f.pause=E;ha(f,"paused",p.driver);ha(f,"muted",p.driver,!0);ha(f,"playbackRate",p.driver,!0);ha(f,"ended",p.driver);ha(f,"loop",p.driver,!0);F(f,"seeking");F(f,"seeked");F(f,"timeupdate",
+fa,!1);F(f,"ended",fa,!1);f.classList.add("IIV");f.muted&&f.autoplay&&f.play();/iPhone|iPod|iPad/.test(navigator.platform)||console.warn("iphone-inline-video is not guaranteed to work in emulated environments")}}}();
+(function(){function p(b,d,e){f.biginteger_used=1;null!=b&&("number"==typeof b&&"undefined"==typeof d?this.fromInt(b):"number"==typeof b?this.fromNumber(b,d,e):null==d&&"string"!=typeof b?this.fromString(b,256):this.fromString(b,d))}function F(){return new p(null,void 0,void 0)}function ha(b,d,e,r,f,k){for(;0<=--k;){var u=d*this[b++]+e[r]+f;f=Math.floor(u/67108864);e[r++]=u&67108863}return f}function Ga(b,d,e,r,f,k){var u=d&32767;for(d>>=15;0<=--k;){var C=this[b]&32767,p=this[b++]>>15,E=d*C+p*u,C=
+u*C+((E&32767)<<15)+e[r]+(f&1073741823);f=(C>>>30)+(E>>>15)+d*p+(f>>>30);e[r++]=C&1073741823}return f}function pa(b,d,e,r,f,k){var u=d&16383;for(d>>=14;0<=--k;){var C=this[b]&16383,p=this[b++]>>14,E=d*C+p*u,C=u*C+((E&16383)<<14)+e[r]+f;f=(C>>28)+(E>>14)+d*p;e[r++]=C&268435455}return f}function Ha(b,d){var e=gb[b.charCodeAt(d)];return null==e?-1:e}function ea(b){var d=F();d.fromInt(b);return d}function k(b){var d=1,e;0!=(e=b>>>16)&&(b=e,d+=16);0!=(e=b>>8)&&(b=e,d+=8);0!=(e=b>>4)&&(b=e,d+=4);0!=(e=
+b>>2)&&(b=e,d+=2);0!=b>>1&&(d+=1);return d}function Qa(b){this.m=b}function E(b){this.m=b;this.mp=b.invDigit();this.mpl=this.mp&32767;this.mph=this.mp>>15;this.um=(1<<b.DB-15)-1;this.mt2=2*b.t}function ia(b,d){return b&d}function N(b,d){return b|d}function V(b,d){return b^d}function S(b,d){return b&~d}function fa(){}function ub(b){return b}function $a(b){this.r2=F();this.q3=F();p.ONE.dlShiftTo(2*b.t,this.r2);this.mu=this.r2.divide(b);this.m=b}var f={use_lines:!0,use_xyz:!1},tb=!1;"undefined"!==typeof module&&
+module.exports?(module.exports=f,tb=!0):"undefined"!==typeof document?window.ClipperLib=f:self.ClipperLib=f;var Y;if(tb)ba="chrome",Y="Netscape";else{var ba=navigator.userAgent.toString().toLowerCase();Y=navigator.appName}var M,gc,Sb,Ta,fb,Cb;M=-1!=ba.indexOf("chrome")&&-1==ba.indexOf("chromium")?1:0;tb=-1!=ba.indexOf("chromium")?1:0;gc=-1!=ba.indexOf("safari")&&-1==ba.indexOf("chrome")&&-1==ba.indexOf("chromium")?1:0;Sb=-1!=ba.indexOf("firefox")?1:0;ba.indexOf("firefox/17");ba.indexOf("firefox/15");
+ba.indexOf("firefox/3");Ta=-1!=ba.indexOf("opera")?1:0;ba.indexOf("msie 10");ba.indexOf("msie 9");fb=-1!=ba.indexOf("msie 8")?1:0;Cb=-1!=ba.indexOf("msie 7")?1:0;ba=-1!=ba.indexOf("msie ")?1:0;f.biginteger_used=null;"Microsoft Internet Explorer"==Y?(p.prototype.am=Ga,Y=30):"Netscape"!=Y?(p.prototype.am=ha,Y=26):(p.prototype.am=pa,Y=28);p.prototype.DB=Y;p.prototype.DM=(1<<Y)-1;p.prototype.DV=1<<Y;p.prototype.FV=Math.pow(2,52);p.prototype.F1=52-Y;p.prototype.F2=2*Y-52;var gb=[],ua;Y=48;for(ua=0;9>=
+ua;++ua)gb[Y++]=ua;Y=97;for(ua=10;36>ua;++ua)gb[Y++]=ua;Y=65;for(ua=10;36>ua;++ua)gb[Y++]=ua;Qa.prototype.convert=function(b){return 0>b.s||0<=b.compareTo(this.m)?b.mod(this.m):b};Qa.prototype.revert=function(b){return b};Qa.prototype.reduce=function(b){b.divRemTo(this.m,null,b)};Qa.prototype.mulTo=function(b,d,e){b.multiplyTo(d,e);this.reduce(e)};Qa.prototype.sqrTo=function(b,d){b.squareTo(d);this.reduce(d)};E.prototype.convert=function(b){var d=F();b.abs().dlShiftTo(this.m.t,d);d.divRemTo(this.m,
+null,d);0>b.s&&0<d.compareTo(p.ZERO)&&this.m.subTo(d,d);return d};E.prototype.revert=function(b){var d=F();b.copyTo(d);this.reduce(d);return d};E.prototype.reduce=function(b){for(;b.t<=this.mt2;)b[b.t++]=0;for(var d=0;d<this.m.t;++d){var e=b[d]&32767,r=e*this.mpl+((e*this.mph+(b[d]>>15)*this.mpl&this.um)<<15)&b.DM,e=d+this.m.t;for(b[e]+=this.m.am(0,r,b,d,0,this.m.t);b[e]>=b.DV;)b[e]-=b.DV,b[++e]++}b.clamp();b.drShiftTo(this.m.t,b);0<=b.compareTo(this.m)&&b.subTo(this.m,b)};E.prototype.mulTo=function(b,
+d,e){b.multiplyTo(d,e);this.reduce(e)};E.prototype.sqrTo=function(b,d){b.squareTo(d);this.reduce(d)};p.prototype.copyTo=function(b){for(var d=this.t-1;0<=d;--d)b[d]=this[d];b.t=this.t;b.s=this.s};p.prototype.fromInt=function(b){this.t=1;this.s=0>b?-1:0;0<b?this[0]=b:-1>b?this[0]=b+this.DV:this.t=0};p.prototype.fromString=function(b,d){var e;if(16==d)e=4;else if(8==d)e=3;else if(256==d)e=8;else if(2==d)e=1;else if(32==d)e=5;else if(4==d)e=2;else{this.fromRadix(b,d);return}this.s=this.t=0;for(var r=
+b.length,f=!1,k=0;0<=--r;){var u=8==e?b[r]&255:Ha(b,r);0>u?"-"==b.charAt(r)&&(f=!0):(f=!1,0==k?this[this.t++]=u:k+e>this.DB?(this[this.t-1]|=(u&(1<<this.DB-k)-1)<<k,this[this.t++]=u>>this.DB-k):this[this.t-1]|=u<<k,k+=e,k>=this.DB&&(k-=this.DB))}8==e&&0!=(b[0]&128)&&(this.s=-1,0<k&&(this[this.t-1]|=(1<<this.DB-k)-1<<k));this.clamp();f&&p.ZERO.subTo(this,this)};p.prototype.clamp=function(){for(var b=this.s&this.DM;0<this.t&&this[this.t-1]==b;)--this.t};p.prototype.dlShiftTo=function(b,d){var e;for(e=
+this.t-1;0<=e;--e)d[e+b]=this[e];for(e=b-1;0<=e;--e)d[e]=0;d.t=this.t+b;d.s=this.s};p.prototype.drShiftTo=function(b,d){for(var e=b;e<this.t;++e)d[e-b]=this[e];d.t=Math.max(this.t-b,0);d.s=this.s};p.prototype.lShiftTo=function(b,d){var e=b%this.DB,r=this.DB-e,f=(1<<r)-1,k=Math.floor(b/this.DB),u=this.s<<e&this.DM,C;for(C=this.t-1;0<=C;--C)d[C+k+1]=this[C]>>r|u,u=(this[C]&f)<<e;for(C=k-1;0<=C;--C)d[C]=0;d[k]=u;d.t=this.t+k+1;d.s=this.s;d.clamp()};p.prototype.rShiftTo=function(b,d){d.s=this.s;var e=
+Math.floor(b/this.DB);if(e>=this.t)d.t=0;else{var r=b%this.DB,f=this.DB-r,k=(1<<r)-1;d[0]=this[e]>>r;for(var u=e+1;u<this.t;++u)d[u-e-1]|=(this[u]&k)<<f,d[u-e]=this[u]>>r;0<r&&(d[this.t-e-1]|=(this.s&k)<<f);d.t=this.t-e;d.clamp()}};p.prototype.subTo=function(b,d){for(var e=0,f=0,n=Math.min(b.t,this.t);e<n;)f+=this[e]-b[e],d[e++]=f&this.DM,f>>=this.DB;if(b.t<this.t){for(f-=b.s;e<this.t;)f+=this[e],d[e++]=f&this.DM,f>>=this.DB;f+=this.s}else{for(f+=this.s;e<b.t;)f-=b[e],d[e++]=f&this.DM,f>>=this.DB;
+f-=b.s}d.s=0>f?-1:0;-1>f?d[e++]=this.DV+f:0<f&&(d[e++]=f);d.t=e;d.clamp()};p.prototype.multiplyTo=function(b,d){var e=this.abs(),f=b.abs(),n=e.t;for(d.t=n+f.t;0<=--n;)d[n]=0;for(n=0;n<f.t;++n)d[n+e.t]=e.am(0,f[n],d,n,0,e.t);d.s=0;d.clamp();this.s!=b.s&&p.ZERO.subTo(d,d)};p.prototype.squareTo=function(b){for(var d=this.abs(),e=b.t=2*d.t;0<=--e;)b[e]=0;for(e=0;e<d.t-1;++e){var f=d.am(e,d[e],b,2*e,0,1);(b[e+d.t]+=d.am(e+1,2*d[e],b,2*e+1,f,d.t-e-1))>=d.DV&&(b[e+d.t]-=d.DV,b[e+d.t+1]=1)}0<b.t&&(b[b.t-
+1]+=d.am(e,d[e],b,2*e,0,1));b.s=0;b.clamp()};p.prototype.divRemTo=function(b,d,e){var f=b.abs();if(!(0>=f.t)){var n=this.abs();if(n.t<f.t)null!=d&&d.fromInt(0),null!=e&&this.copyTo(e);else{null==e&&(e=F());var I=F(),u=this.s;b=b.s;var C=this.DB-k(f[f.t-1]);0<C?(f.lShiftTo(C,I),n.lShiftTo(C,e)):(f.copyTo(I),n.copyTo(e));f=I.t;n=I[f-1];if(0!=n){var E=n*(1<<this.F1)+(1<f?I[f-2]>>this.F2:0),ab=this.FV/E,E=(1<<this.F1)/E,vb=1<<this.F2,H=e.t,ia=H-f,N=null==d?F():d;I.dlShiftTo(ia,N);0<=e.compareTo(N)&&(e[e.t++]=
+1,e.subTo(N,e));p.ONE.dlShiftTo(f,N);for(N.subTo(I,I);I.t<f;)I[I.t++]=0;for(;0<=--ia;){var M=e[--H]==n?this.DM:Math.floor(e[H]*ab+(e[H-1]+vb)*E);if((e[H]+=I.am(0,M,e,ia,0,f))<M)for(I.dlShiftTo(ia,N),e.subTo(N,e);e[H]<--M;)e.subTo(N,e)}null!=d&&(e.drShiftTo(f,d),u!=b&&p.ZERO.subTo(d,d));e.t=f;e.clamp();0<C&&e.rShiftTo(C,e);0>u&&p.ZERO.subTo(e,e)}}}};p.prototype.invDigit=function(){if(1>this.t)return 0;var b=this[0];if(0==(b&1))return 0;var d=b&3,d=d*(2-(b&15)*d)&15,d=d*(2-(b&255)*d)&255,d=d*(2-((b&
+65535)*d&65535))&65535,d=d*(2-b*d%this.DV)%this.DV;return 0<d?this.DV-d:-d};p.prototype.isEven=function(){return 0==(0<this.t?this[0]&1:this.s)};p.prototype.exp=function(b,d){if(4294967295<b||1>b)return p.ONE;var e=F(),f=F(),n=d.convert(this),I=k(b)-1;for(n.copyTo(e);0<=--I;)if(d.sqrTo(e,f),0<(b&1<<I))d.mulTo(f,n,e);else var u=e,e=f,f=u;return d.revert(e)};p.prototype.toString=function(b){if(0>this.s)return"-"+this.negate().toString(b);if(16==b)b=4;else if(8==b)b=3;else if(2==b)b=1;else if(32==b)b=
+5;else if(4==b)b=2;else return this.toRadix(b);var d=(1<<b)-1,e,f=!1,n="",k=this.t,u=this.DB-k*this.DB%b;if(0<k--)for(u<this.DB&&0<(e=this[k]>>u)&&(f=!0,n="0123456789abcdefghijklmnopqrstuvwxyz".charAt(e));0<=k;)u<b?(e=(this[k]&(1<<u)-1)<<b-u,e|=this[--k]>>(u+=this.DB-b)):(e=this[k]>>(u-=b)&d,0>=u&&(u+=this.DB,--k)),0<e&&(f=!0),f&&(n+="0123456789abcdefghijklmnopqrstuvwxyz".charAt(e));return f?n:"0"};p.prototype.negate=function(){var b=F();p.ZERO.subTo(this,b);return b};p.prototype.abs=function(){return 0>
+this.s?this.negate():this};p.prototype.compareTo=function(b){var d=this.s-b.s;if(0!=d)return d;var e=this.t,d=e-b.t;if(0!=d)return 0>this.s?-d:d;for(;0<=--e;)if(0!=(d=this[e]-b[e]))return d;return 0};p.prototype.bitLength=function(){return 0>=this.t?0:this.DB*(this.t-1)+k(this[this.t-1]^this.s&this.DM)};p.prototype.mod=function(b){var d=F();this.abs().divRemTo(b,null,d);0>this.s&&0<d.compareTo(p.ZERO)&&b.subTo(d,d);return d};p.prototype.modPowInt=function(b,d){var e;e=256>b||d.isEven()?new Qa(d):
+new E(d);return this.exp(b,e)};p.ZERO=ea(0);p.ONE=ea(1);fa.prototype.convert=ub;fa.prototype.revert=ub;fa.prototype.mulTo=function(b,d,e){b.multiplyTo(d,e)};fa.prototype.sqrTo=function(b,d){b.squareTo(d)};$a.prototype.convert=function(b){if(0>b.s||b.t>2*this.m.t)return b.mod(this.m);if(0>b.compareTo(this.m))return b;var d=F();b.copyTo(d);this.reduce(d);return d};$a.prototype.revert=function(b){return b};$a.prototype.reduce=function(b){b.drShiftTo(this.m.t-1,this.r2);b.t>this.m.t+1&&(b.t=this.m.t+
+1,b.clamp());this.mu.multiplyUpperTo(this.r2,this.m.t+1,this.q3);for(this.m.multiplyLowerTo(this.q3,this.m.t+1,this.r2);0>b.compareTo(this.r2);)b.dAddOffset(1,this.m.t+1);for(b.subTo(this.r2,b);0<=b.compareTo(this.m);)b.subTo(this.m,b)};$a.prototype.mulTo=function(b,d,e){b.multiplyTo(d,e);this.reduce(e)};$a.prototype.sqrTo=function(b,d){b.squareTo(d);this.reduce(d)};var H=[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,
+173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509,521,523,541,547,557,563,569,571,577,587,593,599,601,607,613,617,619,631,641,643,647,653,659,661,673,677,683,691,701,709,719,727,733,739,743,751,757,761,769,773,787,797,809,811,821,823,827,829,839,853,857,859,863,877,881,883,887,907,911,919,929,937,941,947,953,967,971,977,
+983,991,997],ic=67108864/H[H.length-1];p.prototype.chunkSize=function(b){return Math.floor(Math.LN2*this.DB/Math.log(b))};p.prototype.toRadix=function(b){null==b&&(b=10);if(0==this.signum()||2>b||36<b)return"0";var d=this.chunkSize(b),d=Math.pow(b,d),e=ea(d),f=F(),n=F(),k="";for(this.divRemTo(e,f,n);0<f.signum();)k=(d+n.intValue()).toString(b).substr(1)+k,f.divRemTo(e,f,n);return n.intValue().toString(b)+k};p.prototype.fromRadix=function(b,d){this.fromInt(0);null==d&&(d=10);for(var e=this.chunkSize(d),
+f=Math.pow(d,e),n=!1,k=0,u=0,C=0;C<b.length;++C){var E=Ha(b,C);0>E?"-"==b.charAt(C)&&0==this.signum()&&(n=!0):(u=d*u+E,++k>=e&&(this.dMultiply(f),this.dAddOffset(u,0),u=k=0))}0<k&&(this.dMultiply(Math.pow(d,k)),this.dAddOffset(u,0));n&&p.ZERO.subTo(this,this)};p.prototype.fromNumber=function(b,d,e){if("number"==typeof d)if(2>b)this.fromInt(1);else for(this.fromNumber(b,e),this.testBit(b-1)||this.bitwiseTo(p.ONE.shiftLeft(b-1),N,this),this.isEven()&&this.dAddOffset(1,0);!this.isProbablePrime(d);)this.dAddOffset(2,
+0),this.bitLength()>b&&this.subTo(p.ONE.shiftLeft(b-1),this);else{e=[];var f=b&7;e.length=(b>>3)+1;d.nextBytes(e);e[0]=0<f?e[0]&(1<<f)-1:0;this.fromString(e,256)}};p.prototype.bitwiseTo=function(b,d,e){var f,n,k=Math.min(b.t,this.t);for(f=0;f<k;++f)e[f]=d(this[f],b[f]);if(b.t<this.t){n=b.s&this.DM;for(f=k;f<this.t;++f)e[f]=d(this[f],n);e.t=this.t}else{n=this.s&this.DM;for(f=k;f<b.t;++f)e[f]=d(n,b[f]);e.t=b.t}e.s=d(this.s,b.s);e.clamp()};p.prototype.changeBit=function(b,d){var e=p.ONE.shiftLeft(b);
+this.bitwiseTo(e,d,e);return e};p.prototype.addTo=function(b,d){for(var e=0,f=0,n=Math.min(b.t,this.t);e<n;)f+=this[e]+b[e],d[e++]=f&this.DM,f>>=this.DB;if(b.t<this.t){for(f+=b.s;e<this.t;)f+=this[e],d[e++]=f&this.DM,f>>=this.DB;f+=this.s}else{for(f+=this.s;e<b.t;)f+=b[e],d[e++]=f&this.DM,f>>=this.DB;f+=b.s}d.s=0>f?-1:0;0<f?d[e++]=f:-1>f&&(d[e++]=this.DV+f);d.t=e;d.clamp()};p.prototype.dMultiply=function(b){this[this.t]=this.am(0,b-1,this,0,0,this.t);++this.t;this.clamp()};p.prototype.dAddOffset=
+function(b,d){if(0!=b){for(;this.t<=d;)this[this.t++]=0;for(this[d]+=b;this[d]>=this.DV;)this[d]-=this.DV,++d>=this.t&&(this[this.t++]=0),++this[d]}};p.prototype.multiplyLowerTo=function(b,d,e){var f=Math.min(this.t+b.t,d);e.s=0;for(e.t=f;0<f;)e[--f]=0;var n;for(n=e.t-this.t;f<n;++f)e[f+this.t]=this.am(0,b[f],e,f,0,this.t);for(n=Math.min(b.t,d);f<n;++f)this.am(0,b[f],e,f,0,d-f);e.clamp()};p.prototype.multiplyUpperTo=function(b,d,e){--d;var f=e.t=this.t+b.t-d;for(e.s=0;0<=--f;)e[f]=0;for(f=Math.max(d-
+this.t,0);f<b.t;++f)e[this.t+f-d]=this.am(d-f,b[f],e,0,0,this.t+f-d);e.clamp();e.drShiftTo(1,e)};p.prototype.modInt=function(b){if(0>=b)return 0;var d=this.DV%b,e=0>this.s?b-1:0;if(0<this.t)if(0==d)e=this[0]%b;else for(var f=this.t-1;0<=f;--f)e=(d*e+this[f])%b;return e};p.prototype.millerRabin=function(b){var d=this.subtract(p.ONE),e=d.getLowestSetBit();if(0>=e)return!1;var f=d.shiftRight(e);b=b+1>>1;b>H.length&&(b=H.length);for(var n=F(),k=0;k<b;++k){n.fromInt(H[Math.floor(Math.random()*H.length)]);
+var u=n.modPow(f,this);if(0!=u.compareTo(p.ONE)&&0!=u.compareTo(d)){for(var C=1;C++<e&&0!=u.compareTo(d);)if(u=u.modPowInt(2,this),0==u.compareTo(p.ONE))return!1;if(0!=u.compareTo(d))return!1}}return!0};p.prototype.clone=function(){var b=F();this.copyTo(b);return b};p.prototype.intValue=function(){if(0>this.s){if(1==this.t)return this[0]-this.DV;if(0==this.t)return-1}else{if(1==this.t)return this[0];if(0==this.t)return 0}return(this[1]&(1<<32-this.DB)-1)<<this.DB|this[0]};p.prototype.byteValue=function(){return 0==
+this.t?this.s:this[0]<<24>>24};p.prototype.shortValue=function(){return 0==this.t?this.s:this[0]<<16>>16};p.prototype.signum=function(){return 0>this.s?-1:0>=this.t||1==this.t&&0>=this[0]?0:1};p.prototype.toByteArray=function(){var b=this.t,d=[];d[0]=this.s;var e=this.DB-b*this.DB%8,f,n=0;if(0<b--)for(e<this.DB&&(f=this[b]>>e)!=(this.s&this.DM)>>e&&(d[n++]=f|this.s<<this.DB-e);0<=b;)if(8>e?(f=(this[b]&(1<<e)-1)<<8-e,f|=this[--b]>>(e+=this.DB-8)):(f=this[b]>>(e-=8)&255,0>=e&&(e+=this.DB,--b)),0!=(f&
+128)&&(f|=-256),0==n&&(this.s&128)!=(f&128)&&++n,0<n||f!=this.s)d[n++]=f;return d};p.prototype.equals=function(b){return 0==this.compareTo(b)};p.prototype.min=function(b){return 0>this.compareTo(b)?this:b};p.prototype.max=function(b){return 0<this.compareTo(b)?this:b};p.prototype.and=function(b){var d=F();this.bitwiseTo(b,ia,d);return d};p.prototype.or=function(b){var d=F();this.bitwiseTo(b,N,d);return d};p.prototype.xor=function(b){var d=F();this.bitwiseTo(b,V,d);return d};p.prototype.andNot=function(b){var d=
+F();this.bitwiseTo(b,S,d);return d};p.prototype.not=function(){for(var b=F(),d=0;d<this.t;++d)b[d]=this.DM&~this[d];b.t=this.t;b.s=~this.s;return b};p.prototype.shiftLeft=function(b){var d=F();0>b?this.rShiftTo(-b,d):this.lShiftTo(b,d);return d};p.prototype.shiftRight=function(b){var d=F();0>b?this.lShiftTo(-b,d):this.rShiftTo(b,d);return d};p.prototype.getLowestSetBit=function(){for(var b=0;b<this.t;++b)if(0!=this[b]){var d=b*this.DB,b=this[b];if(0==b)b=-1;else{var e=0;0==(b&65535)&&(b>>=16,e+=16);
+0==(b&255)&&(b>>=8,e+=8);0==(b&15)&&(b>>=4,e+=4);0==(b&3)&&(b>>=2,e+=2);0==(b&1)&&++e;b=e}return d+b}return 0>this.s?this.t*this.DB:-1};p.prototype.bitCount=function(){for(var b=0,d=this.s&this.DM,e=0;e<this.t;++e){for(var f=this[e]^d,n=0;0!=f;)f&=f-1,++n;b+=n}return b};p.prototype.testBit=function(b){var d=Math.floor(b/this.DB);return d>=this.t?0!=this.s:0!=(this[d]&1<<b%this.DB)};p.prototype.setBit=function(b){return this.changeBit(b,N)};p.prototype.clearBit=function(b){return this.changeBit(b,
+S)};p.prototype.flipBit=function(b){return this.changeBit(b,V)};p.prototype.add=function(b){var d=F();this.addTo(b,d);return d};p.prototype.subtract=function(b){var d=F();this.subTo(b,d);return d};p.prototype.multiply=function(b){var d=F();this.multiplyTo(b,d);return d};p.prototype.divide=function(b){var d=F();this.divRemTo(b,d,null);return d};p.prototype.remainder=function(b){var d=F();this.divRemTo(b,null,d);return d};p.prototype.divideAndRemainder=function(b){var d=F(),e=F();this.divRemTo(b,d,
+e);return[d,e]};p.prototype.modPow=function(b,d){var e=b.bitLength(),f,n=ea(1),I;if(0>=e)return n;f=18>e?1:48>e?3:144>e?4:768>e?5:6;I=8>e?new Qa(d):d.isEven()?new $a(d):new E(d);var u=[],C=3,p=f-1,ab=(1<<f)-1;u[1]=I.convert(this);if(1<f)for(e=F(),I.sqrTo(u[1],e);C<=ab;)u[C]=F(),I.mulTo(e,u[C-2],u[C]),C+=2;for(var H=b.t-1,N,ia=!0,M=F(),e=k(b[H])-1;0<=H;){e>=p?N=b[H]>>e-p&ab:(N=(b[H]&(1<<e+1)-1)<<p-e,0<H&&(N|=b[H-1]>>this.DB+e-p));for(C=f;0==(N&1);)N>>=1,--C;0>(e-=C)&&(e+=this.DB,--H);if(ia)u[N].copyTo(n),
+ia=!1;else{for(;1<C;)I.sqrTo(n,M),I.sqrTo(M,n),C-=2;0<C?I.sqrTo(n,M):(C=n,n=M,M=C);I.mulTo(M,u[N],n)}for(;0<=H&&0==(b[H]&1<<e);)I.sqrTo(n,M),C=n,n=M,M=C,0>--e&&(e=this.DB-1,--H)}return I.revert(n)};p.prototype.modInverse=function(b){var d=b.isEven();if(this.isEven()&&d||0==b.signum())return p.ZERO;for(var e=b.clone(),f=this.clone(),n=ea(1),k=ea(0),u=ea(0),C=ea(1);0!=e.signum();){for(;e.isEven();)e.rShiftTo(1,e),d?(n.isEven()&&k.isEven()||(n.addTo(this,n),k.subTo(b,k)),n.rShiftTo(1,n)):k.isEven()||
+k.subTo(b,k),k.rShiftTo(1,k);for(;f.isEven();)f.rShiftTo(1,f),d?(u.isEven()&&C.isEven()||(u.addTo(this,u),C.subTo(b,C)),u.rShiftTo(1,u)):C.isEven()||C.subTo(b,C),C.rShiftTo(1,C);0<=e.compareTo(f)?(e.subTo(f,e),d&&n.subTo(u,n),k.subTo(C,k)):(f.subTo(e,f),d&&u.subTo(n,u),C.subTo(k,C))}if(0!=f.compareTo(p.ONE))return p.ZERO;if(0<=C.compareTo(b))return C.subtract(b);if(0>C.signum())C.addTo(b,C);else return C;return 0>C.signum()?C.add(b):C};p.prototype.pow=function(b){return this.exp(b,new fa)};p.prototype.gcd=
+function(b){var d=0>this.s?this.negate():this.clone();b=0>b.s?b.negate():b.clone();if(0>d.compareTo(b)){var e=d,d=b;b=e}var e=d.getLowestSetBit(),f=b.getLowestSetBit();if(0>f)return d;e<f&&(f=e);for(0<f&&(d.rShiftTo(f,d),b.rShiftTo(f,b));0<d.signum();)0<(e=d.getLowestSetBit())&&d.rShiftTo(e,d),0<(e=b.getLowestSetBit())&&b.rShiftTo(e,b),0<=d.compareTo(b)?(d.subTo(b,d),d.rShiftTo(1,d)):(b.subTo(d,b),b.rShiftTo(1,b));0<f&&b.lShiftTo(f,b);return b};p.prototype.isProbablePrime=function(b){var d,e=this.abs();
+if(1==e.t&&e[0]<=H[H.length-1]){for(d=0;d<H.length;++d)if(e[0]==H[d])return!0;return!1}if(e.isEven())return!1;for(d=1;d<H.length;){for(var f=H[d],n=d+1;n<H.length&&f<ic;)f*=H[n++];for(f=e.modInt(f);d<n;)if(0==f%H[d++])return!1}return e.millerRabin(b)};p.prototype.square=function(){var b=F();this.squareTo(b);return b};p.prototype.IsNegative=function(){return-1==this.compareTo(p.ZERO)?!0:!1};p.op_Equality=function(b,d){return 0==b.compareTo(d)?!0:!1};p.op_Inequality=function(b,d){return 0!=b.compareTo(d)?
+!0:!1};p.op_GreaterThan=function(b,d){return 0<b.compareTo(d)?!0:!1};p.op_LessThan=function(b,d){return 0>b.compareTo(d)?!0:!1};p.op_Addition=function(b,d){return(new p(b)).add(new p(d))};p.op_Subtraction=function(b,d){return(new p(b)).subtract(new p(d))};p.Int128Mul=function(b,d){return(new p(b)).multiply(new p(d))};p.op_Division=function(b,d){return b.divide(d)};p.prototype.ToDouble=function(){return parseFloat(this.toString())};Y=function(b,d){var e;if("undefined"==typeof Object.getOwnPropertyNames)for(e in d.prototype){if("undefined"==
+typeof b.prototype[e]||b.prototype[e]==Object.prototype[e])b.prototype[e]=d.prototype[e]}else for(var f=Object.getOwnPropertyNames(d.prototype),n=0;n<f.length;n++)"undefined"==typeof Object.getOwnPropertyDescriptor(b.prototype,f[n])&&Object.defineProperty(b.prototype,f[n],Object.getOwnPropertyDescriptor(d.prototype,f[n]));for(e in d)"undefined"==typeof b[e]&&(b[e]=d[e]);b.$baseCtor=d};f.Path=function(){return[]};f.Paths=function(){return[]};f.DoublePoint=function(){var b=arguments;this.Y=this.X=0;
+1==b.length?(this.X=b[0].X,this.Y=b[0].Y):2==b.length&&(this.X=b[0],this.Y=b[1])};f.DoublePoint0=function(){this.Y=this.X=0};f.DoublePoint1=function(b){this.X=b.X;this.Y=b.Y};f.DoublePoint2=function(b,d){this.X=b;this.Y=d};f.PolyNode=function(){this.m_Parent=null;this.m_polygon=new f.Path;this.m_endtype=this.m_jointype=this.m_Index=0;this.m_Childs=[];this.IsOpen=!1};f.PolyNode.prototype.IsHoleNode=function(){for(var b=!0,d=this.m_Parent;null!==d;)b=!b,d=d.m_Parent;return b};f.PolyNode.prototype.ChildCount=
+function(){return this.m_Childs.length};f.PolyNode.prototype.Contour=function(){return this.m_polygon};f.PolyNode.prototype.AddChild=function(b){var d=this.m_Childs.length;this.m_Childs.push(b);b.m_Parent=this;b.m_Index=d};f.PolyNode.prototype.GetNext=function(){return 0<this.m_Childs.length?this.m_Childs[0]:this.GetNextSiblingUp()};f.PolyNode.prototype.GetNextSiblingUp=function(){return null===this.m_Parent?null:this.m_Index==this.m_Parent.m_Childs.length-1?this.m_Parent.GetNextSiblingUp():this.m_Parent.m_Childs[this.m_Index+
+1]};f.PolyNode.prototype.Childs=function(){return this.m_Childs};f.PolyNode.prototype.Parent=function(){return this.m_Parent};f.PolyNode.prototype.IsHole=function(){return this.IsHoleNode()};f.PolyTree=function(){this.m_AllPolys=[];f.PolyNode.call(this)};f.PolyTree.prototype.Clear=function(){for(var b=0,d=this.m_AllPolys.length;b<d;b++)this.m_AllPolys[b]=null;this.m_AllPolys.length=0;this.m_Childs.length=0};f.PolyTree.prototype.GetFirst=function(){return 0<this.m_Childs.length?this.m_Childs[0]:null};
+f.PolyTree.prototype.Total=function(){var b=this.m_AllPolys.length;0<b&&this.m_Childs[0]!=this.m_AllPolys[0]&&b--;return b};Y(f.PolyTree,f.PolyNode);f.Math_Abs_Int64=f.Math_Abs_Int32=f.Math_Abs_Double=function(b){return Math.abs(b)};f.Math_Max_Int32_Int32=function(b,d){return Math.max(b,d)};f.Cast_Int32=ba||Ta||gc?function(b){return b|0}:function(b){return~~b};f.Cast_Int64=M?function(b){return-2147483648>b||2147483647<b?0>b?Math.ceil(b):Math.floor(b):~~b}:Sb&&"function"==typeof Number.toInteger?function(b){return Number.toInteger(b)}:
+Cb||fb?function(b){return parseInt(b,10)}:ba?function(b){return-2147483648>b||2147483647<b?0>b?Math.ceil(b):Math.floor(b):b|0}:function(b){return 0>b?Math.ceil(b):Math.floor(b)};f.Clear=function(b){b.length=0};f.PI=3.141592653589793;f.PI2=6.283185307179586;f.IntPoint=function(){var b=arguments,d=b.length;this.Y=this.X=0;f.use_xyz?(this.Z=0,3==d?(this.X=b[0],this.Y=b[1],this.Z=b[2]):2==d?(this.X=b[0],this.Y=b[1],this.Z=0):1==d?b[0]instanceof f.DoublePoint?(b=b[0],this.X=f.Clipper.Round(b.X),this.Y=
+f.Clipper.Round(b.Y),this.Z=0):(b=b[0],"undefined"==typeof b.Z&&(b.Z=0),this.X=b.X,this.Y=b.Y,this.Z=b.Z):this.Z=this.Y=this.X=0):2==d?(this.X=b[0],this.Y=b[1]):1==d?b[0]instanceof f.DoublePoint?(b=b[0],this.X=f.Clipper.Round(b.X),this.Y=f.Clipper.Round(b.Y)):(b=b[0],this.X=b.X,this.Y=b.Y):this.Y=this.X=0};f.IntPoint.op_Equality=function(b,d){return b.X==d.X&&b.Y==d.Y};f.IntPoint.op_Inequality=function(b,d){return b.X!=d.X||b.Y!=d.Y};f.use_xyz?(f.IntPoint0=function(){this.Z=this.Y=this.X=0},f.IntPoint1=
+function(b){this.X=b.X;this.Y=b.Y;this.Z=b.Z},f.IntPoint1dp=function(b){this.X=f.Clipper.Round(b.X);this.Y=f.Clipper.Round(b.Y);this.Z=0},f.IntPoint2=function(b,d){this.X=b;this.Y=d;this.Z=0},f.IntPoint3=function(b,d,e){this.X=b;this.Y=d;this.Z=e}):(f.IntPoint0=function(){this.Y=this.X=0},f.IntPoint1=function(b){this.X=b.X;this.Y=b.Y},f.IntPoint1dp=function(b){this.X=f.Clipper.Round(b.X);this.Y=f.Clipper.Round(b.Y)},f.IntPoint2=function(b,d){this.X=b;this.Y=d});f.IntRect=function(){var b=arguments,
+d=b.length;4==d?(this.left=b[0],this.top=b[1],this.right=b[2],this.bottom=b[3]):1==d?(this.left=b[0].left,this.top=b[0].top,this.right=b[0].right,this.bottom=b[0].bottom):this.bottom=this.right=this.top=this.left=0};f.IntRect0=function(){this.bottom=this.right=this.top=this.left=0};f.IntRect1=function(b){this.left=b.left;this.top=b.top;this.right=b.right;this.bottom=b.bottom};f.IntRect4=function(b,d,e,f){this.left=b;this.top=d;this.right=e;this.bottom=f};f.ClipType={ctIntersection:0,ctUnion:1,ctDifference:2,
+ctXor:3};f.PolyType={ptSubject:0,ptClip:1};f.PolyFillType={pftEvenOdd:0,pftNonZero:1,pftPositive:2,pftNegative:3};f.JoinType={jtSquare:0,jtRound:1,jtMiter:2};f.EndType={etOpenSquare:0,etOpenRound:1,etOpenButt:2,etClosedLine:3,etClosedPolygon:4};f.EdgeSide={esLeft:0,esRight:1};f.Direction={dRightToLeft:0,dLeftToRight:1};f.TEdge=function(){this.Bot=new f.IntPoint;this.Curr=new f.IntPoint;this.Top=new f.IntPoint;this.Delta=new f.IntPoint;this.Dx=0;this.PolyTyp=f.PolyType.ptSubject;this.Side=f.EdgeSide.esLeft;
+this.OutIdx=this.WindCnt2=this.WindCnt=this.WindDelta=0;this.PrevInSEL=this.NextInSEL=this.PrevInAEL=this.NextInAEL=this.NextInLML=this.Prev=this.Next=null};f.IntersectNode=function(){this.Edge2=this.Edge1=null;this.Pt=new f.IntPoint};f.MyIntersectNodeSort=function(){};f.MyIntersectNodeSort.Compare=function(b,d){var e=d.Pt.Y-b.Pt.Y;return 0<e?1:0>e?-1:0};f.LocalMinima=function(){this.Y=0;this.Next=this.RightBound=this.LeftBound=null};f.Scanbeam=function(){this.Y=0;this.Next=null};f.OutRec=function(){this.Idx=
+0;this.IsOpen=this.IsHole=!1;this.PolyNode=this.BottomPt=this.Pts=this.FirstLeft=null};f.OutPt=function(){this.Idx=0;this.Pt=new f.IntPoint;this.Prev=this.Next=null};f.Join=function(){this.OutPt2=this.OutPt1=null;this.OffPt=new f.IntPoint};f.ClipperBase=function(){this.m_CurrentLM=this.m_MinimaList=null;this.m_edges=[];this.PreserveCollinear=this.m_HasOpenPaths=this.m_UseFullRange=!1;this.m_CurrentLM=this.m_MinimaList=null;this.m_HasOpenPaths=this.m_UseFullRange=!1};f.ClipperBase.horizontal=-9007199254740992;
+f.ClipperBase.Skip=-2;f.ClipperBase.Unassigned=-1;f.ClipperBase.tolerance=1E-20;f.ClipperBase.loRange=47453132;f.ClipperBase.hiRange=0xfffffffffffff;f.ClipperBase.near_zero=function(b){return b>-f.ClipperBase.tolerance&&b<f.ClipperBase.tolerance};f.ClipperBase.IsHorizontal=function(b){return 0===b.Delta.Y};f.ClipperBase.prototype.PointIsVertex=function(b,d){var e=d;do{if(f.IntPoint.op_Equality(e.Pt,b))return!0;e=e.Next}while(e!=d);return!1};f.ClipperBase.prototype.PointOnLineSegment=function(b,d,
+e,f){return f?b.X==d.X&&b.Y==d.Y||b.X==e.X&&b.Y==e.Y||b.X>d.X==b.X<e.X&&b.Y>d.Y==b.Y<e.Y&&p.op_Equality(p.Int128Mul(b.X-d.X,e.Y-d.Y),p.Int128Mul(e.X-d.X,b.Y-d.Y)):b.X==d.X&&b.Y==d.Y||b.X==e.X&&b.Y==e.Y||b.X>d.X==b.X<e.X&&b.Y>d.Y==b.Y<e.Y&&(b.X-d.X)*(e.Y-d.Y)==(e.X-d.X)*(b.Y-d.Y)};f.ClipperBase.prototype.PointOnPolygon=function(b,d,e){for(var f=d;;){if(this.PointOnLineSegment(b,f.Pt,f.Next.Pt,e))return!0;f=f.Next;if(f==d)break}return!1};f.ClipperBase.prototype.SlopesEqual=f.ClipperBase.SlopesEqual=
+function(){var b=arguments,d=b.length,e,r,n;if(3==d)return d=b[0],e=b[1],b[2]?p.op_Equality(p.Int128Mul(d.Delta.Y,e.Delta.X),p.Int128Mul(d.Delta.X,e.Delta.Y)):f.Cast_Int64(d.Delta.Y*e.Delta.X)==f.Cast_Int64(d.Delta.X*e.Delta.Y);if(4==d)return d=b[0],e=b[1],r=b[2],b[3]?p.op_Equality(p.Int128Mul(d.Y-e.Y,e.X-r.X),p.Int128Mul(d.X-e.X,e.Y-r.Y)):0===f.Cast_Int64((d.Y-e.Y)*(e.X-r.X))-f.Cast_Int64((d.X-e.X)*(e.Y-r.Y));d=b[0];e=b[1];r=b[2];n=b[3];return b[4]?p.op_Equality(p.Int128Mul(d.Y-e.Y,r.X-n.X),p.Int128Mul(d.X-
+e.X,r.Y-n.Y)):0===f.Cast_Int64((d.Y-e.Y)*(r.X-n.X))-f.Cast_Int64((d.X-e.X)*(r.Y-n.Y))};f.ClipperBase.SlopesEqual3=function(b,d,e){return e?p.op_Equality(p.Int128Mul(b.Delta.Y,d.Delta.X),p.Int128Mul(b.Delta.X,d.Delta.Y)):f.Cast_Int64(b.Delta.Y*d.Delta.X)==f.Cast_Int64(b.Delta.X*d.Delta.Y)};f.ClipperBase.SlopesEqual4=function(b,d,e,r){return r?p.op_Equality(p.Int128Mul(b.Y-d.Y,d.X-e.X),p.Int128Mul(b.X-d.X,d.Y-e.Y)):0===f.Cast_Int64((b.Y-d.Y)*(d.X-e.X))-f.Cast_Int64((b.X-d.X)*(d.Y-e.Y))};f.ClipperBase.SlopesEqual5=
+function(b,d,e,r,n){return n?p.op_Equality(p.Int128Mul(b.Y-d.Y,e.X-r.X),p.Int128Mul(b.X-d.X,e.Y-r.Y)):0===f.Cast_Int64((b.Y-d.Y)*(e.X-r.X))-f.Cast_Int64((b.X-d.X)*(e.Y-r.Y))};f.ClipperBase.prototype.Clear=function(){this.DisposeLocalMinimaList();for(var b=0,d=this.m_edges.length;b<d;++b){for(var e=0,r=this.m_edges[b].length;e<r;++e)this.m_edges[b][e]=null;f.Clear(this.m_edges[b])}f.Clear(this.m_edges);this.m_HasOpenPaths=this.m_UseFullRange=!1};f.ClipperBase.prototype.DisposeLocalMinimaList=function(){for(;null!==
+this.m_MinimaList;){var b=this.m_MinimaList.Next;this.m_MinimaList=null;this.m_MinimaList=b}this.m_CurrentLM=null};f.ClipperBase.prototype.RangeTest=function(b,d){if(d.Value)(b.X>f.ClipperBase.hiRange||b.Y>f.ClipperBase.hiRange||-b.X>f.ClipperBase.hiRange||-b.Y>f.ClipperBase.hiRange)&&f.Error("Coordinate outside allowed range in RangeTest().");else if(b.X>f.ClipperBase.loRange||b.Y>f.ClipperBase.loRange||-b.X>f.ClipperBase.loRange||-b.Y>f.ClipperBase.loRange)d.Value=!0,this.RangeTest(b,d)};f.ClipperBase.prototype.InitEdge=
+function(b,d,e,r){b.Next=d;b.Prev=e;b.Curr.X=r.X;b.Curr.Y=r.Y;f.use_xyz&&(b.Curr.Z=r.Z);b.OutIdx=-1};f.ClipperBase.prototype.InitEdge2=function(b,d){b.Curr.Y>=b.Next.Curr.Y?(b.Bot.X=b.Curr.X,b.Bot.Y=b.Curr.Y,f.use_xyz&&(b.Bot.Z=b.Curr.Z),b.Top.X=b.Next.Curr.X,b.Top.Y=b.Next.Curr.Y,f.use_xyz&&(b.Top.Z=b.Next.Curr.Z)):(b.Top.X=b.Curr.X,b.Top.Y=b.Curr.Y,f.use_xyz&&(b.Top.Z=b.Curr.Z),b.Bot.X=b.Next.Curr.X,b.Bot.Y=b.Next.Curr.Y,f.use_xyz&&(b.Bot.Z=b.Next.Curr.Z));this.SetDx(b);b.PolyTyp=d};f.ClipperBase.prototype.FindNextLocMin=
+function(b){for(var d;;){for(;f.IntPoint.op_Inequality(b.Bot,b.Prev.Bot)||f.IntPoint.op_Equality(b.Curr,b.Top);)b=b.Next;if(b.Dx!=f.ClipperBase.horizontal&&b.Prev.Dx!=f.ClipperBase.horizontal)break;for(;b.Prev.Dx==f.ClipperBase.horizontal;)b=b.Prev;for(d=b;b.Dx==f.ClipperBase.horizontal;)b=b.Next;if(b.Top.Y!=b.Prev.Bot.Y){d.Prev.Bot.X<b.Bot.X&&(b=d);break}}return b};f.ClipperBase.prototype.ProcessBound=function(b,d){var e,r=b,n;if(r.OutIdx==f.ClipperBase.Skip){b=r;if(d){for(;b.Top.Y==b.Next.Bot.Y;)b=
+b.Next;for(;b!=r&&b.Dx==f.ClipperBase.horizontal;)b=b.Prev}else{for(;b.Top.Y==b.Prev.Bot.Y;)b=b.Prev;for(;b!=r&&b.Dx==f.ClipperBase.horizontal;)b=b.Next}b==r?r=d?b.Next:b.Prev:(b=d?r.Next:r.Prev,e=new f.LocalMinima,e.Next=null,e.Y=b.Bot.Y,e.LeftBound=null,e.RightBound=b,b.WindDelta=0,r=this.ProcessBound(b,d),this.InsertLocalMinima(e));return r}b.Dx==f.ClipperBase.horizontal&&(e=d?b.Prev:b.Next,e.OutIdx!=f.ClipperBase.Skip&&(e.Dx==f.ClipperBase.horizontal?e.Bot.X!=b.Bot.X&&e.Top.X!=b.Bot.X&&this.ReverseHorizontal(b):
+e.Bot.X!=b.Bot.X&&this.ReverseHorizontal(b)));e=b;if(d){for(;r.Top.Y==r.Next.Bot.Y&&r.Next.OutIdx!=f.ClipperBase.Skip;)r=r.Next;if(r.Dx==f.ClipperBase.horizontal&&r.Next.OutIdx!=f.ClipperBase.Skip){for(n=r;n.Prev.Dx==f.ClipperBase.horizontal;)n=n.Prev;n.Prev.Top.X==r.Next.Top.X?d||(r=n.Prev):n.Prev.Top.X>r.Next.Top.X&&(r=n.Prev)}for(;b!=r;)b.NextInLML=b.Next,b.Dx==f.ClipperBase.horizontal&&b!=e&&b.Bot.X!=b.Prev.Top.X&&this.ReverseHorizontal(b),b=b.Next;b.Dx==f.ClipperBase.horizontal&&b!=e&&b.Bot.X!=
+b.Prev.Top.X&&this.ReverseHorizontal(b);r=r.Next}else{for(;r.Top.Y==r.Prev.Bot.Y&&r.Prev.OutIdx!=f.ClipperBase.Skip;)r=r.Prev;if(r.Dx==f.ClipperBase.horizontal&&r.Prev.OutIdx!=f.ClipperBase.Skip){for(n=r;n.Next.Dx==f.ClipperBase.horizontal;)n=n.Next;n.Next.Top.X==r.Prev.Top.X?d||(r=n.Next):n.Next.Top.X>r.Prev.Top.X&&(r=n.Next)}for(;b!=r;)b.NextInLML=b.Prev,b.Dx==f.ClipperBase.horizontal&&b!=e&&b.Bot.X!=b.Next.Top.X&&this.ReverseHorizontal(b),b=b.Prev;b.Dx==f.ClipperBase.horizontal&&b!=e&&b.Bot.X!=
+b.Next.Top.X&&this.ReverseHorizontal(b);r=r.Prev}return r};f.ClipperBase.prototype.AddPath=function(b,d,e){f.use_lines?e||d!=f.PolyType.ptClip||f.Error("AddPath: Open paths must be subject."):e||f.Error("AddPath: Open paths have been disabled.");var r=b.length-1;if(e)for(;0<r&&f.IntPoint.op_Equality(b[r],b[0]);)--r;for(;0<r&&f.IntPoint.op_Equality(b[r],b[r-1]);)--r;if(e&&2>r||!e&&1>r)return!1;for(var n=[],k=0;k<=r;k++)n.push(new f.TEdge);var u=!0;n[1].Curr.X=b[1].X;n[1].Curr.Y=b[1].Y;f.use_xyz&&(n[1].Curr.Z=
+b[1].Z);var C={Value:this.m_UseFullRange};this.RangeTest(b[0],C);this.m_UseFullRange=C.Value;C.Value=this.m_UseFullRange;this.RangeTest(b[r],C);this.m_UseFullRange=C.Value;this.InitEdge(n[0],n[1],n[r],b[0]);this.InitEdge(n[r],n[0],n[r-1],b[r]);for(k=r-1;1<=k;--k)C.Value=this.m_UseFullRange,this.RangeTest(b[k],C),this.m_UseFullRange=C.Value,this.InitEdge(n[k],n[k+1],n[k-1],b[k]);for(k=b=r=n[0];;)if(b.Curr!=b.Next.Curr||!e&&b.Next==r){if(b.Prev==b.Next)break;else if(e&&f.ClipperBase.SlopesEqual(b.Prev.Curr,
+b.Curr,b.Next.Curr,this.m_UseFullRange)&&(!this.PreserveCollinear||!this.Pt2IsBetweenPt1AndPt3(b.Prev.Curr,b.Curr,b.Next.Curr))){b==r&&(r=b.Next);b=this.RemoveEdge(b);k=b=b.Prev;continue}b=b.Next;if(b==k||!e&&b.Next==r)break}else{if(b==b.Next)break;b==r&&(r=b.Next);k=b=this.RemoveEdge(b)}if(!e&&b==b.Next||e&&b.Prev==b.Next)return!1;e||(this.m_HasOpenPaths=!0,r.Prev.OutIdx=f.ClipperBase.Skip);b=r;do this.InitEdge2(b,d),b=b.Next,u&&b.Curr.Y!=r.Curr.Y&&(u=!1);while(b!=r);if(u){if(e)return!1;b.Prev.OutIdx=
+f.ClipperBase.Skip;b.Prev.Bot.X<b.Prev.Top.X&&this.ReverseHorizontal(b.Prev);d=new f.LocalMinima;d.Next=null;d.Y=b.Bot.Y;d.LeftBound=null;d.RightBound=b;d.RightBound.Side=f.EdgeSide.esRight;for(d.RightBound.WindDelta=0;b.Next.OutIdx!=f.ClipperBase.Skip;)b.NextInLML=b.Next,b.Bot.X!=b.Prev.Top.X&&this.ReverseHorizontal(b),b=b.Next;this.InsertLocalMinima(d);this.m_edges.push(n);return!0}this.m_edges.push(n);u=null;for(f.IntPoint.op_Equality(b.Prev.Bot,b.Prev.Top)&&(b=b.Next);;){b=this.FindNextLocMin(b);
+if(b==u)break;else null==u&&(u=b);d=new f.LocalMinima;d.Next=null;d.Y=b.Bot.Y;b.Dx<b.Prev.Dx?(d.LeftBound=b.Prev,d.RightBound=b,n=!1):(d.LeftBound=b,d.RightBound=b.Prev,n=!0);d.LeftBound.Side=f.EdgeSide.esLeft;d.RightBound.Side=f.EdgeSide.esRight;d.LeftBound.WindDelta=e?d.LeftBound.Next==d.RightBound?-1:1:0;d.RightBound.WindDelta=-d.LeftBound.WindDelta;b=this.ProcessBound(d.LeftBound,n);b.OutIdx==f.ClipperBase.Skip&&(b=this.ProcessBound(b,n));r=this.ProcessBound(d.RightBound,!n);r.OutIdx==f.ClipperBase.Skip&&
+(r=this.ProcessBound(r,!n));d.LeftBound.OutIdx==f.ClipperBase.Skip?d.LeftBound=null:d.RightBound.OutIdx==f.ClipperBase.Skip&&(d.RightBound=null);this.InsertLocalMinima(d);n||(b=r)}return!0};f.ClipperBase.prototype.AddPaths=function(b,d,e){for(var f=!1,n=0,k=b.length;n<k;++n)this.AddPath(b[n],d,e)&&(f=!0);return f};f.ClipperBase.prototype.Pt2IsBetweenPt1AndPt3=function(b,d,e){return f.IntPoint.op_Equality(b,e)||f.IntPoint.op_Equality(b,d)||f.IntPoint.op_Equality(e,d)?!1:b.X!=e.X?d.X>b.X==d.X<e.X:d.Y>
+b.Y==d.Y<e.Y};f.ClipperBase.prototype.RemoveEdge=function(b){b.Prev.Next=b.Next;b.Next.Prev=b.Prev;var d=b.Next;b.Prev=null;return d};f.ClipperBase.prototype.SetDx=function(b){b.Delta.X=b.Top.X-b.Bot.X;b.Delta.Y=b.Top.Y-b.Bot.Y;b.Dx=0===b.Delta.Y?f.ClipperBase.horizontal:b.Delta.X/b.Delta.Y};f.ClipperBase.prototype.InsertLocalMinima=function(b){if(null===this.m_MinimaList)this.m_MinimaList=b;else if(b.Y>=this.m_MinimaList.Y)b.Next=this.m_MinimaList,this.m_MinimaList=b;else{for(var d=this.m_MinimaList;null!==
+d.Next&&b.Y<d.Next.Y;)d=d.Next;b.Next=d.Next;d.Next=b}};f.ClipperBase.prototype.PopLocalMinima=function(){null!==this.m_CurrentLM&&(this.m_CurrentLM=this.m_CurrentLM.Next)};f.ClipperBase.prototype.ReverseHorizontal=function(b){var d=b.Top.X;b.Top.X=b.Bot.X;b.Bot.X=d;f.use_xyz&&(d=b.Top.Z,b.Top.Z=b.Bot.Z,b.Bot.Z=d)};f.ClipperBase.prototype.Reset=function(){this.m_CurrentLM=this.m_MinimaList;if(null!=this.m_CurrentLM)for(var b=this.m_MinimaList;null!=b;){var d=b.LeftBound;null!=d&&(d.Curr.X=d.Bot.X,
+d.Curr.Y=d.Bot.Y,f.use_xyz&&(d.Curr.Z=d.Bot.Z),d.Side=f.EdgeSide.esLeft,d.OutIdx=f.ClipperBase.Unassigned);d=b.RightBound;null!=d&&(d.Curr.X=d.Bot.X,d.Curr.Y=d.Bot.Y,f.use_xyz&&(d.Curr.Z=d.Bot.Z),d.Side=f.EdgeSide.esRight,d.OutIdx=f.ClipperBase.Unassigned);b=b.Next}};f.Clipper=function(b){"undefined"==typeof b&&(b=0);this.m_PolyOuts=null;this.m_ClipType=f.ClipType.ctIntersection;this.m_IntersectNodeComparer=this.m_IntersectList=this.m_SortedEdges=this.m_ActiveEdges=this.m_Scanbeam=null;this.m_ExecuteLocked=
+!1;this.m_SubjFillType=this.m_ClipFillType=f.PolyFillType.pftEvenOdd;this.m_GhostJoins=this.m_Joins=null;this.StrictlySimple=this.ReverseSolution=this.m_UsingPolyTree=!1;f.ClipperBase.call(this);this.m_SortedEdges=this.m_ActiveEdges=this.m_Scanbeam=null;this.m_IntersectList=[];this.m_IntersectNodeComparer=f.MyIntersectNodeSort.Compare;this.m_UsingPolyTree=this.m_ExecuteLocked=!1;this.m_PolyOuts=[];this.m_Joins=[];this.m_GhostJoins=[];this.ReverseSolution=0!==(1&b);this.StrictlySimple=0!==(2&b);this.PreserveCollinear=
+0!==(4&b);f.use_xyz&&(this.ZFillFunction=null)};f.Clipper.ioReverseSolution=1;f.Clipper.ioStrictlySimple=2;f.Clipper.ioPreserveCollinear=4;f.Clipper.prototype.Clear=function(){0!==this.m_edges.length&&(this.DisposeAllPolyPts(),f.ClipperBase.prototype.Clear.call(this))};f.Clipper.prototype.DisposeScanbeamList=function(){for(;null!==this.m_Scanbeam;){var b=this.m_Scanbeam.Next;this.m_Scanbeam=null;this.m_Scanbeam=b}};f.Clipper.prototype.Reset=function(){f.ClipperBase.prototype.Reset.call(this);this.m_SortedEdges=
+this.m_ActiveEdges=this.m_Scanbeam=null;for(var b=this.m_MinimaList;null!==b;)this.InsertScanbeam(b.Y),b=b.Next};f.Clipper.prototype.InsertScanbeam=function(b){if(null===this.m_Scanbeam)this.m_Scanbeam=new f.Scanbeam,this.m_Scanbeam.Next=null,this.m_Scanbeam.Y=b;else if(b>this.m_Scanbeam.Y){var d=new f.Scanbeam;d.Y=b;d.Next=this.m_Scanbeam;this.m_Scanbeam=d}else{for(var e=this.m_Scanbeam;null!==e.Next&&b<=e.Next.Y;)e=e.Next;b!=e.Y&&(d=new f.Scanbeam,d.Y=b,d.Next=e.Next,e.Next=d)}};f.Clipper.prototype.Execute=
+function(){var b=arguments,d=b.length,e=b[1]instanceof f.PolyTree;if(4!=d||e){if(4==d&&e){var d=b[0],r=b[1],e=b[2],b=b[3];if(this.m_ExecuteLocked)return!1;this.m_ExecuteLocked=!0;this.m_SubjFillType=e;this.m_ClipFillType=b;this.m_ClipType=d;this.m_UsingPolyTree=!0;try{(n=this.ExecuteInternal())&&this.BuildResult2(r)}finally{this.DisposeAllPolyPts(),this.m_ExecuteLocked=!1}return n}if(2==d&&!e||2==d&&e)return d=b[0],r=b[1],this.Execute(d,r,f.PolyFillType.pftEvenOdd,f.PolyFillType.pftEvenOdd)}else{d=
+b[0];r=b[1];e=b[2];b=b[3];if(this.m_ExecuteLocked)return!1;this.m_HasOpenPaths&&f.Error("Error: PolyTree struct is need for open path clipping.");this.m_ExecuteLocked=!0;f.Clear(r);this.m_SubjFillType=e;this.m_ClipFillType=b;this.m_ClipType=d;this.m_UsingPolyTree=!1;try{var n=this.ExecuteInternal();n&&this.BuildResult(r)}finally{this.DisposeAllPolyPts(),this.m_ExecuteLocked=!1}return n}};f.Clipper.prototype.FixHoleLinkage=function(b){if(null!==b.FirstLeft&&(b.IsHole==b.FirstLeft.IsHole||null===b.FirstLeft.Pts)){for(var d=
+b.FirstLeft;null!==d&&(d.IsHole==b.IsHole||null===d.Pts);)d=d.FirstLeft;b.FirstLeft=d}};f.Clipper.prototype.ExecuteInternal=function(){try{this.Reset();if(null===this.m_CurrentLM)return!1;var b=this.PopScanbeam();do{this.InsertLocalMinimaIntoAEL(b);f.Clear(this.m_GhostJoins);this.ProcessHorizontals(!1);if(null===this.m_Scanbeam)break;var d=this.PopScanbeam();if(!this.ProcessIntersections(d))return!1;this.ProcessEdgesAtTopOfScanbeam(d);b=d}while(null!==this.m_Scanbeam||null!==this.m_CurrentLM);for(var b=
+0,e=this.m_PolyOuts.length;b<e;b++){var r=this.m_PolyOuts[b];null===r.Pts||r.IsOpen||(r.IsHole^this.ReverseSolution)==0<this.Area(r)&&this.ReversePolyPtLinks(r.Pts)}this.JoinCommonEdges();b=0;for(e=this.m_PolyOuts.length;b<e;b++)r=this.m_PolyOuts[b],null===r.Pts||r.IsOpen||this.FixupOutPolygon(r);this.StrictlySimple&&this.DoSimplePolygons();return!0}finally{f.Clear(this.m_Joins),f.Clear(this.m_GhostJoins)}};f.Clipper.prototype.PopScanbeam=function(){var b=this.m_Scanbeam.Y;this.m_Scanbeam=this.m_Scanbeam.Next;
+return b};f.Clipper.prototype.DisposeAllPolyPts=function(){for(var b=0,d=this.m_PolyOuts.length;b<d;++b)this.DisposeOutRec(b);f.Clear(this.m_PolyOuts)};f.Clipper.prototype.DisposeOutRec=function(b){this.m_PolyOuts[b].Pts=null;this.m_PolyOuts[b]=null};f.Clipper.prototype.AddJoin=function(b,d,e){var r=new f.Join;r.OutPt1=b;r.OutPt2=d;r.OffPt.X=e.X;r.OffPt.Y=e.Y;f.use_xyz&&(r.OffPt.Z=e.Z);this.m_Joins.push(r)};f.Clipper.prototype.AddGhostJoin=function(b,d){var e=new f.Join;e.OutPt1=b;e.OffPt.X=d.X;e.OffPt.Y=
+d.Y;f.use_xyz&&(e.OffPt.Z=d.Z);this.m_GhostJoins.push(e)};f.Clipper.prototype.SetZ=function(b,d,e){null!==this.ZFillFunction&&0==b.Z&&null!==this.ZFillFunction&&(f.IntPoint.op_Equality(b,d.Bot)?b.Z=d.Bot.Z:f.IntPoint.op_Equality(b,d.Top)?b.Z=d.Top.Z:f.IntPoint.op_Equality(b,e.Bot)?b.Z=e.Bot.Z:f.IntPoint.op_Equality(b,e.Top)?b.Z=e.Top.Z:this.ZFillFunction(d.Bot,d.Top,e.Bot,e.Top,b))};f.Clipper.prototype.InsertLocalMinimaIntoAEL=function(b){for(;null!==this.m_CurrentLM&&this.m_CurrentLM.Y==b;){var d=
+this.m_CurrentLM.LeftBound,e=this.m_CurrentLM.RightBound;this.PopLocalMinima();var r=null;null===d?(this.InsertEdgeIntoAEL(e,null),this.SetWindingCount(e),this.IsContributing(e)&&(r=this.AddOutPt(e,e.Bot))):(null==e?(this.InsertEdgeIntoAEL(d,null),this.SetWindingCount(d),this.IsContributing(d)&&(r=this.AddOutPt(d,d.Bot))):(this.InsertEdgeIntoAEL(d,null),this.InsertEdgeIntoAEL(e,d),this.SetWindingCount(d),e.WindCnt=d.WindCnt,e.WindCnt2=d.WindCnt2,this.IsContributing(d)&&(r=this.AddLocalMinPoly(d,e,
+d.Bot))),this.InsertScanbeam(d.Top.Y));null!=e&&(f.ClipperBase.IsHorizontal(e)?this.AddEdgeToSEL(e):this.InsertScanbeam(e.Top.Y));if(null!=d&&null!=e){if(null!==r&&f.ClipperBase.IsHorizontal(e)&&0<this.m_GhostJoins.length&&0!==e.WindDelta)for(var n=0,k=this.m_GhostJoins.length;n<k;n++){var u=this.m_GhostJoins[n];this.HorzSegmentsOverlap(u.OutPt1.Pt.X,u.OffPt.X,e.Bot.X,e.Top.X)&&this.AddJoin(u.OutPt1,r,u.OffPt)}0<=d.OutIdx&&null!==d.PrevInAEL&&d.PrevInAEL.Curr.X==d.Bot.X&&0<=d.PrevInAEL.OutIdx&&f.ClipperBase.SlopesEqual(d.PrevInAEL,
+d,this.m_UseFullRange)&&0!==d.WindDelta&&0!==d.PrevInAEL.WindDelta&&(n=this.AddOutPt(d.PrevInAEL,d.Bot),this.AddJoin(r,n,d.Top));if(d.NextInAEL!=e&&(0<=e.OutIdx&&0<=e.PrevInAEL.OutIdx&&f.ClipperBase.SlopesEqual(e.PrevInAEL,e,this.m_UseFullRange)&&0!==e.WindDelta&&0!==e.PrevInAEL.WindDelta&&(n=this.AddOutPt(e.PrevInAEL,e.Bot),this.AddJoin(r,n,e.Top)),r=d.NextInAEL,null!==r))for(;r!=e;)this.IntersectEdges(e,r,d.Curr,!1),r=r.NextInAEL}}};f.Clipper.prototype.InsertEdgeIntoAEL=function(b,d){if(null===
+this.m_ActiveEdges)b.PrevInAEL=null,b.NextInAEL=null,this.m_ActiveEdges=b;else if(null===d&&this.E2InsertsBeforeE1(this.m_ActiveEdges,b))b.PrevInAEL=null,b.NextInAEL=this.m_ActiveEdges,this.m_ActiveEdges=this.m_ActiveEdges.PrevInAEL=b;else{for(null===d&&(d=this.m_ActiveEdges);null!==d.NextInAEL&&!this.E2InsertsBeforeE1(d.NextInAEL,b);)d=d.NextInAEL;b.NextInAEL=d.NextInAEL;null!==d.NextInAEL&&(d.NextInAEL.PrevInAEL=b);b.PrevInAEL=d;d.NextInAEL=b}};f.Clipper.prototype.E2InsertsBeforeE1=function(b,d){return d.Curr.X==
+b.Curr.X?d.Top.Y>b.Top.Y?d.Top.X<f.Clipper.TopX(b,d.Top.Y):b.Top.X>f.Clipper.TopX(d,b.Top.Y):d.Curr.X<b.Curr.X};f.Clipper.prototype.IsEvenOddFillType=function(b){return b.PolyTyp==f.PolyType.ptSubject?this.m_SubjFillType==f.PolyFillType.pftEvenOdd:this.m_ClipFillType==f.PolyFillType.pftEvenOdd};f.Clipper.prototype.IsEvenOddAltFillType=function(b){return b.PolyTyp==f.PolyType.ptSubject?this.m_ClipFillType==f.PolyFillType.pftEvenOdd:this.m_SubjFillType==f.PolyFillType.pftEvenOdd};f.Clipper.prototype.IsContributing=
+function(b){var d,e;b.PolyTyp==f.PolyType.ptSubject?(d=this.m_SubjFillType,e=this.m_ClipFillType):(d=this.m_ClipFillType,e=this.m_SubjFillType);switch(d){case f.PolyFillType.pftEvenOdd:if(0===b.WindDelta&&1!=b.WindCnt)return!1;break;case f.PolyFillType.pftNonZero:if(1!=Math.abs(b.WindCnt))return!1;break;case f.PolyFillType.pftPositive:if(1!=b.WindCnt)return!1;break;default:if(-1!=b.WindCnt)return!1}switch(this.m_ClipType){case f.ClipType.ctIntersection:switch(e){case f.PolyFillType.pftEvenOdd:case f.PolyFillType.pftNonZero:return 0!==
+b.WindCnt2;case f.PolyFillType.pftPositive:return 0<b.WindCnt2;default:return 0>b.WindCnt2}case f.ClipType.ctUnion:switch(e){case f.PolyFillType.pftEvenOdd:case f.PolyFillType.pftNonZero:return 0===b.WindCnt2;case f.PolyFillType.pftPositive:return 0>=b.WindCnt2;default:return 0<=b.WindCnt2}case f.ClipType.ctDifference:if(b.PolyTyp==f.PolyType.ptSubject)switch(e){case f.PolyFillType.pftEvenOdd:case f.PolyFillType.pftNonZero:return 0===b.WindCnt2;case f.PolyFillType.pftPositive:return 0>=b.WindCnt2;
+default:return 0<=b.WindCnt2}else switch(e){case f.PolyFillType.pftEvenOdd:case f.PolyFillType.pftNonZero:return 0!==b.WindCnt2;case f.PolyFillType.pftPositive:return 0<b.WindCnt2;default:return 0>b.WindCnt2}case f.ClipType.ctXor:if(0===b.WindDelta)switch(e){case f.PolyFillType.pftEvenOdd:case f.PolyFillType.pftNonZero:return 0===b.WindCnt2;case f.PolyFillType.pftPositive:return 0>=b.WindCnt2;default:return 0<=b.WindCnt2}}return!0};f.Clipper.prototype.SetWindingCount=function(b){for(var d=b.PrevInAEL;null!==
+d&&(d.PolyTyp!=b.PolyTyp||0===d.WindDelta);)d=d.PrevInAEL;if(null===d)b.WindCnt=0===b.WindDelta?1:b.WindDelta,b.WindCnt2=0,d=this.m_ActiveEdges;else{if(0===b.WindDelta&&this.m_ClipType!=f.ClipType.ctUnion)b.WindCnt=1;else if(this.IsEvenOddFillType(b))if(0===b.WindDelta){for(var e=!0,r=d.PrevInAEL;null!==r;)r.PolyTyp==d.PolyTyp&&0!==r.WindDelta&&(e=!e),r=r.PrevInAEL;b.WindCnt=e?0:1}else b.WindCnt=b.WindDelta;else b.WindCnt=0>d.WindCnt*d.WindDelta?1<Math.abs(d.WindCnt)?0>d.WindDelta*b.WindDelta?d.WindCnt:
+d.WindCnt+b.WindDelta:0===b.WindDelta?1:b.WindDelta:0===b.WindDelta?0>d.WindCnt?d.WindCnt-1:d.WindCnt+1:0>d.WindDelta*b.WindDelta?d.WindCnt:d.WindCnt+b.WindDelta;b.WindCnt2=d.WindCnt2;d=d.NextInAEL}if(this.IsEvenOddAltFillType(b))for(;d!=b;)0!==d.WindDelta&&(b.WindCnt2=0===b.WindCnt2?1:0),d=d.NextInAEL;else for(;d!=b;)b.WindCnt2+=d.WindDelta,d=d.NextInAEL};f.Clipper.prototype.AddEdgeToSEL=function(b){null===this.m_SortedEdges?(this.m_SortedEdges=b,b.PrevInSEL=null,b.NextInSEL=null):(b.NextInSEL=this.m_SortedEdges,
+b.PrevInSEL=null,this.m_SortedEdges=this.m_SortedEdges.PrevInSEL=b)};f.Clipper.prototype.CopyAELToSEL=function(){var b=this.m_ActiveEdges;for(this.m_SortedEdges=b;null!==b;)b.PrevInSEL=b.PrevInAEL,b=b.NextInSEL=b.NextInAEL};f.Clipper.prototype.SwapPositionsInAEL=function(b,d){if(b.NextInAEL!=b.PrevInAEL&&d.NextInAEL!=d.PrevInAEL){if(b.NextInAEL==d){var e=d.NextInAEL;null!==e&&(e.PrevInAEL=b);var f=b.PrevInAEL;null!==f&&(f.NextInAEL=d);d.PrevInAEL=f;d.NextInAEL=b;b.PrevInAEL=d;b.NextInAEL=e}else d.NextInAEL==
+b?(e=b.NextInAEL,null!==e&&(e.PrevInAEL=d),f=d.PrevInAEL,null!==f&&(f.NextInAEL=b),b.PrevInAEL=f,b.NextInAEL=d,d.PrevInAEL=b,d.NextInAEL=e):(e=b.NextInAEL,f=b.PrevInAEL,b.NextInAEL=d.NextInAEL,null!==b.NextInAEL&&(b.NextInAEL.PrevInAEL=b),b.PrevInAEL=d.PrevInAEL,null!==b.PrevInAEL&&(b.PrevInAEL.NextInAEL=b),d.NextInAEL=e,null!==d.NextInAEL&&(d.NextInAEL.PrevInAEL=d),d.PrevInAEL=f,null!==d.PrevInAEL&&(d.PrevInAEL.NextInAEL=d));null===b.PrevInAEL?this.m_ActiveEdges=b:null===d.PrevInAEL&&(this.m_ActiveEdges=
+d)}};f.Clipper.prototype.SwapPositionsInSEL=function(b,d){if(null!==b.NextInSEL||null!==b.PrevInSEL)if(null!==d.NextInSEL||null!==d.PrevInSEL){if(b.NextInSEL==d){var e=d.NextInSEL;null!==e&&(e.PrevInSEL=b);var f=b.PrevInSEL;null!==f&&(f.NextInSEL=d);d.PrevInSEL=f;d.NextInSEL=b;b.PrevInSEL=d;b.NextInSEL=e}else d.NextInSEL==b?(e=b.NextInSEL,null!==e&&(e.PrevInSEL=d),f=d.PrevInSEL,null!==f&&(f.NextInSEL=b),b.PrevInSEL=f,b.NextInSEL=d,d.PrevInSEL=b,d.NextInSEL=e):(e=b.NextInSEL,f=b.PrevInSEL,b.NextInSEL=
+d.NextInSEL,null!==b.NextInSEL&&(b.NextInSEL.PrevInSEL=b),b.PrevInSEL=d.PrevInSEL,null!==b.PrevInSEL&&(b.PrevInSEL.NextInSEL=b),d.NextInSEL=e,null!==d.NextInSEL&&(d.NextInSEL.PrevInSEL=d),d.PrevInSEL=f,null!==d.PrevInSEL&&(d.PrevInSEL.NextInSEL=d));null===b.PrevInSEL?this.m_SortedEdges=b:null===d.PrevInSEL&&(this.m_SortedEdges=d)}};f.Clipper.prototype.AddLocalMaxPoly=function(b,d,e){this.AddOutPt(b,e);0==d.WindDelta&&this.AddOutPt(d,e);b.OutIdx==d.OutIdx?(b.OutIdx=-1,d.OutIdx=-1):b.OutIdx<d.OutIdx?
+this.AppendPolygon(b,d):this.AppendPolygon(d,b)};f.Clipper.prototype.AddLocalMinPoly=function(b,d,e){var r,n;f.ClipperBase.IsHorizontal(d)||b.Dx>d.Dx?(r=this.AddOutPt(b,e),d.OutIdx=b.OutIdx,b.Side=f.EdgeSide.esLeft,d.Side=f.EdgeSide.esRight,n=b,b=n.PrevInAEL==d?d.PrevInAEL:n.PrevInAEL):(r=this.AddOutPt(d,e),b.OutIdx=d.OutIdx,b.Side=f.EdgeSide.esRight,d.Side=f.EdgeSide.esLeft,n=d,b=n.PrevInAEL==b?b.PrevInAEL:n.PrevInAEL);null!==b&&0<=b.OutIdx&&f.Clipper.TopX(b,e.Y)==f.Clipper.TopX(n,e.Y)&&f.ClipperBase.SlopesEqual(n,
+b,this.m_UseFullRange)&&0!==n.WindDelta&&0!==b.WindDelta&&(e=this.AddOutPt(b,e),this.AddJoin(r,e,n.Top));return r};f.Clipper.prototype.CreateOutRec=function(){var b=new f.OutRec;b.Idx=-1;b.IsHole=!1;b.IsOpen=!1;b.FirstLeft=null;b.Pts=null;b.BottomPt=null;b.PolyNode=null;this.m_PolyOuts.push(b);b.Idx=this.m_PolyOuts.length-1;return b};f.Clipper.prototype.AddOutPt=function(b,d){var e=b.Side==f.EdgeSide.esLeft;if(0>b.OutIdx){var r=this.CreateOutRec();r.IsOpen=0===b.WindDelta;var n=new f.OutPt;r.Pts=
+n;n.Idx=r.Idx;n.Pt.X=d.X;n.Pt.Y=d.Y;f.use_xyz&&(n.Pt.Z=d.Z);n.Next=n;n.Prev=n;r.IsOpen||this.SetHoleState(b,r);b.OutIdx=r.Idx}else{var r=this.m_PolyOuts[b.OutIdx],k=r.Pts;if(e&&f.IntPoint.op_Equality(d,k.Pt))return k;if(!e&&f.IntPoint.op_Equality(d,k.Prev.Pt))return k.Prev;n=new f.OutPt;n.Idx=r.Idx;n.Pt.X=d.X;n.Pt.Y=d.Y;f.use_xyz&&(n.Pt.Z=d.Z);n.Next=k;n.Prev=k.Prev;n.Prev.Next=n;k.Prev=n;e&&(r.Pts=n)}return n};f.Clipper.prototype.SwapPoints=function(b,d){var e=new f.IntPoint(b.Value);b.Value.X=d.Value.X;
+b.Value.Y=d.Value.Y;f.use_xyz&&(b.Value.Z=d.Value.Z);d.Value.X=e.X;d.Value.Y=e.Y;f.use_xyz&&(d.Value.Z=e.Z)};f.Clipper.prototype.HorzSegmentsOverlap=function(b,d,e,f){var n;b>d&&(n=b,b=d,d=n);e>f&&(n=e,e=f,f=n);return b<f&&e<d};f.Clipper.prototype.SetHoleState=function(b,d){for(var e=!1,f=b.PrevInAEL;null!==f;)0<=f.OutIdx&&0!=f.WindDelta&&(e=!e,null===d.FirstLeft&&(d.FirstLeft=this.m_PolyOuts[f.OutIdx])),f=f.PrevInAEL;e&&(d.IsHole=!0)};f.Clipper.prototype.GetDx=function(b,d){return b.Y==d.Y?f.ClipperBase.horizontal:
+(d.X-b.X)/(d.Y-b.Y)};f.Clipper.prototype.FirstIsBottomPt=function(b,d){for(var e=b.Prev;f.IntPoint.op_Equality(e.Pt,b.Pt)&&e!=b;)e=e.Prev;for(var r=Math.abs(this.GetDx(b.Pt,e.Pt)),e=b.Next;f.IntPoint.op_Equality(e.Pt,b.Pt)&&e!=b;)e=e.Next;for(var n=Math.abs(this.GetDx(b.Pt,e.Pt)),e=d.Prev;f.IntPoint.op_Equality(e.Pt,d.Pt)&&e!=d;)e=e.Prev;for(var k=Math.abs(this.GetDx(d.Pt,e.Pt)),e=d.Next;f.IntPoint.op_Equality(e.Pt,d.Pt)&&e!=d;)e=e.Next;e=Math.abs(this.GetDx(d.Pt,e.Pt));return r>=k&&r>=e||n>=k&&n>=
+e};f.Clipper.prototype.GetBottomPt=function(b){for(var d=null,e=b.Next;e!=b;)e.Pt.Y>b.Pt.Y?(b=e,d=null):e.Pt.Y==b.Pt.Y&&e.Pt.X<=b.Pt.X&&(e.Pt.X<b.Pt.X?(d=null,b=e):e.Next!=b&&e.Prev!=b&&(d=e)),e=e.Next;if(null!==d)for(;d!=e;)for(this.FirstIsBottomPt(e,d)||(b=d),d=d.Next;f.IntPoint.op_Inequality(d.Pt,b.Pt);)d=d.Next;return b};f.Clipper.prototype.GetLowermostRec=function(b,d){null===b.BottomPt&&(b.BottomPt=this.GetBottomPt(b.Pts));null===d.BottomPt&&(d.BottomPt=this.GetBottomPt(d.Pts));var e=b.BottomPt,
+f=d.BottomPt;return e.Pt.Y>f.Pt.Y?b:e.Pt.Y<f.Pt.Y?d:e.Pt.X<f.Pt.X?b:e.Pt.X>f.Pt.X?d:e.Next==e?d:f.Next==f?b:this.FirstIsBottomPt(e,f)?b:d};f.Clipper.prototype.Param1RightOfParam2=function(b,d){do if(b=b.FirstLeft,b==d)return!0;while(null!==b);return!1};f.Clipper.prototype.GetOutRec=function(b){for(b=this.m_PolyOuts[b];b!=this.m_PolyOuts[b.Idx];)b=this.m_PolyOuts[b.Idx];return b};f.Clipper.prototype.AppendPolygon=function(b,d){var e=this.m_PolyOuts[b.OutIdx],r=this.m_PolyOuts[d.OutIdx],n;n=this.Param1RightOfParam2(e,
+r)?r:this.Param1RightOfParam2(r,e)?e:this.GetLowermostRec(e,r);var k=e.Pts,u=k.Prev,C=r.Pts,p=C.Prev;b.Side==f.EdgeSide.esLeft?(d.Side==f.EdgeSide.esLeft?(this.ReversePolyPtLinks(C),C.Next=k,k.Prev=C,u.Next=p,p.Prev=u,e.Pts=p):(p.Next=k,k.Prev=p,C.Prev=u,u.Next=C,e.Pts=C),k=f.EdgeSide.esLeft):(d.Side==f.EdgeSide.esRight?(this.ReversePolyPtLinks(C),u.Next=p,p.Prev=u,C.Next=k,k.Prev=C):(u.Next=C,C.Prev=u,k.Prev=p,p.Next=k),k=f.EdgeSide.esRight);e.BottomPt=null;n==r&&(r.FirstLeft!=e&&(e.FirstLeft=r.FirstLeft),
+e.IsHole=r.IsHole);r.Pts=null;r.BottomPt=null;r.FirstLeft=e;n=b.OutIdx;u=d.OutIdx;b.OutIdx=-1;d.OutIdx=-1;for(C=this.m_ActiveEdges;null!==C;){if(C.OutIdx==u){C.OutIdx=n;C.Side=k;break}C=C.NextInAEL}r.Idx=e.Idx};f.Clipper.prototype.ReversePolyPtLinks=function(b){if(null!==b){var d,e;d=b;do e=d.Next,d.Next=d.Prev,d=d.Prev=e;while(d!=b)}};f.Clipper.SwapSides=function(b,d){var e=b.Side;b.Side=d.Side;d.Side=e};f.Clipper.SwapPolyIndexes=function(b,d){var e=b.OutIdx;b.OutIdx=d.OutIdx;d.OutIdx=e};f.Clipper.prototype.IntersectEdges=
+function(b,d,e){var r=0<=b.OutIdx,n=0<=d.OutIdx;f.use_xyz&&this.SetZ(e,b,d);if(!f.use_lines||0!==b.WindDelta&&0!==d.WindDelta){if(b.PolyTyp==d.PolyTyp)if(this.IsEvenOddFillType(b)){var k=b.WindCnt;b.WindCnt=d.WindCnt;d.WindCnt=k}else b.WindCnt=0===b.WindCnt+d.WindDelta?-b.WindCnt:b.WindCnt+d.WindDelta,d.WindCnt=0===d.WindCnt-b.WindDelta?-d.WindCnt:d.WindCnt-b.WindDelta;else this.IsEvenOddFillType(d)?b.WindCnt2=0===b.WindCnt2?1:0:b.WindCnt2+=d.WindDelta,this.IsEvenOddFillType(b)?d.WindCnt2=0===d.WindCnt2?
+1:0:d.WindCnt2-=b.WindDelta;var u,C,p;b.PolyTyp==f.PolyType.ptSubject?(u=this.m_SubjFillType,p=this.m_ClipFillType):(u=this.m_ClipFillType,p=this.m_SubjFillType);d.PolyTyp==f.PolyType.ptSubject?(C=this.m_SubjFillType,k=this.m_ClipFillType):(C=this.m_ClipFillType,k=this.m_SubjFillType);switch(u){case f.PolyFillType.pftPositive:u=b.WindCnt;break;case f.PolyFillType.pftNegative:u=-b.WindCnt;break;default:u=Math.abs(b.WindCnt)}switch(C){case f.PolyFillType.pftPositive:C=d.WindCnt;break;case f.PolyFillType.pftNegative:C=
+-d.WindCnt;break;default:C=Math.abs(d.WindCnt)}if(r&&n)0!=u&&1!=u||0!=C&&1!=C||b.PolyTyp!=d.PolyTyp&&this.m_ClipType!=f.ClipType.ctXor?this.AddLocalMaxPoly(b,d,e):(this.AddOutPt(b,e),this.AddOutPt(d,e),f.Clipper.SwapSides(b,d),f.Clipper.SwapPolyIndexes(b,d));else if(r){if(0===C||1==C)this.AddOutPt(b,e),f.Clipper.SwapSides(b,d),f.Clipper.SwapPolyIndexes(b,d)}else if(n){if(0===u||1==u)this.AddOutPt(d,e),f.Clipper.SwapSides(b,d),f.Clipper.SwapPolyIndexes(b,d)}else if(!(0!=u&&1!=u||0!=C&&1!=C)){switch(p){case f.PolyFillType.pftPositive:r=
+b.WindCnt2;break;case f.PolyFillType.pftNegative:r=-b.WindCnt2;break;default:r=Math.abs(b.WindCnt2)}switch(k){case f.PolyFillType.pftPositive:n=d.WindCnt2;break;case f.PolyFillType.pftNegative:n=-d.WindCnt2;break;default:n=Math.abs(d.WindCnt2)}if(b.PolyTyp!=d.PolyTyp)this.AddLocalMinPoly(b,d,e);else if(1==u&&1==C)switch(this.m_ClipType){case f.ClipType.ctIntersection:0<r&&0<n&&this.AddLocalMinPoly(b,d,e);break;case f.ClipType.ctUnion:0>=r&&0>=n&&this.AddLocalMinPoly(b,d,e);break;case f.ClipType.ctDifference:(b.PolyTyp==
+f.PolyType.ptClip&&0<r&&0<n||b.PolyTyp==f.PolyType.ptSubject&&0>=r&&0>=n)&&this.AddLocalMinPoly(b,d,e);break;case f.ClipType.ctXor:this.AddLocalMinPoly(b,d,e)}else f.Clipper.SwapSides(b,d)}}else if(0!=b.WindDelta||0!=d.WindDelta)b.PolyTyp==d.PolyTyp&&b.WindDelta!=d.WindDelta&&this.m_ClipType==f.ClipType.ctUnion?0===b.WindDelta?n&&(this.AddOutPt(b,e),r&&(b.OutIdx=-1)):r&&(this.AddOutPt(d,e),n&&(d.OutIdx=-1)):b.PolyTyp!=d.PolyTyp&&(0!==b.WindDelta||1!=Math.abs(d.WindCnt)||this.m_ClipType==f.ClipType.ctUnion&&
+0!==d.WindCnt2?0!==d.WindDelta||1!=Math.abs(b.WindCnt)||this.m_ClipType==f.ClipType.ctUnion&&0!==b.WindCnt2||(this.AddOutPt(d,e),n&&(d.OutIdx=-1)):(this.AddOutPt(b,e),r&&(b.OutIdx=-1)))};f.Clipper.prototype.DeleteFromAEL=function(b){var d=b.PrevInAEL,e=b.NextInAEL;if(null!==d||null!==e||b==this.m_ActiveEdges)null!==d?d.NextInAEL=e:this.m_ActiveEdges=e,null!==e&&(e.PrevInAEL=d),b.NextInAEL=null,b.PrevInAEL=null};f.Clipper.prototype.DeleteFromSEL=function(b){var d=b.PrevInSEL,e=b.NextInSEL;if(null!==
+d||null!==e||b==this.m_SortedEdges)null!==d?d.NextInSEL=e:this.m_SortedEdges=e,null!==e&&(e.PrevInSEL=d),b.NextInSEL=null,b.PrevInSEL=null};f.Clipper.prototype.UpdateEdgeIntoAEL=function(b){null===b.NextInLML&&f.Error("UpdateEdgeIntoAEL: invalid call");var d=b.PrevInAEL,e=b.NextInAEL;b.NextInLML.OutIdx=b.OutIdx;null!==d?d.NextInAEL=b.NextInLML:this.m_ActiveEdges=b.NextInLML;null!==e&&(e.PrevInAEL=b.NextInLML);b.NextInLML.Side=b.Side;b.NextInLML.WindDelta=b.WindDelta;b.NextInLML.WindCnt=b.WindCnt;
+b.NextInLML.WindCnt2=b.WindCnt2;b=b.NextInLML;b.Curr.X=b.Bot.X;b.Curr.Y=b.Bot.Y;f.use_xyz&&(b.Curr.Z=b.Bot.Z);b.PrevInAEL=d;b.NextInAEL=e;f.ClipperBase.IsHorizontal(b)||this.InsertScanbeam(b.Top.Y);return b};f.Clipper.prototype.ProcessHorizontals=function(b){for(var d=this.m_SortedEdges;null!==d;)this.DeleteFromSEL(d),this.ProcessHorizontal(d,b),d=this.m_SortedEdges};f.Clipper.prototype.GetHorzDirection=function(b,d){b.Bot.X<b.Top.X?(d.Left=b.Bot.X,d.Right=b.Top.X,d.Dir=f.Direction.dLeftToRight):
+(d.Left=b.Top.X,d.Right=b.Bot.X,d.Dir=f.Direction.dRightToLeft)};f.Clipper.prototype.ProcessHorizontal=function(b,d){var e={Dir:null,Left:null,Right:null};this.GetHorzDirection(b,e);for(var r=e.Dir,n=e.Left,k=e.Right,u=b,C=null;null!==u.NextInLML&&f.ClipperBase.IsHorizontal(u.NextInLML);)u=u.NextInLML;for(null===u.NextInLML&&(C=this.GetMaximaPair(u));;){for(var p=b==u,E=this.GetNextInAEL(b,r);null!==E&&!(E.Curr.X==b.Top.X&&null!==b.NextInLML&&E.Dx<b.NextInLML.Dx);){e=this.GetNextInAEL(E,r);if(r==
+f.Direction.dLeftToRight&&E.Curr.X<=k||r==f.Direction.dRightToLeft&&E.Curr.X>=n){if(E==C&&p){if(0<=b.OutIdx){r=this.AddOutPt(b,b.Top);for(e=this.m_SortedEdges;null!==e;)0<=e.OutIdx&&this.HorzSegmentsOverlap(b.Bot.X,b.Top.X,e.Bot.X,e.Top.X)&&(n=this.AddOutPt(e,e.Bot),this.AddJoin(n,r,e.Top)),e=e.NextInSEL;this.AddGhostJoin(r,b.Bot);this.AddLocalMaxPoly(b,C,b.Top)}this.DeleteFromAEL(b);this.DeleteFromAEL(C);return}if(r==f.Direction.dLeftToRight){var F=new f.IntPoint(E.Curr.X,b.Curr.Y);this.IntersectEdges(b,
+E,F)}else F=new f.IntPoint(E.Curr.X,b.Curr.Y),this.IntersectEdges(E,b,F);this.SwapPositionsInAEL(b,E)}else if(r==f.Direction.dLeftToRight&&E.Curr.X>=k||r==f.Direction.dRightToLeft&&E.Curr.X<=n)break;E=e}if(null!==b.NextInLML&&f.ClipperBase.IsHorizontal(b.NextInLML))b=this.UpdateEdgeIntoAEL(b),0<=b.OutIdx&&this.AddOutPt(b,b.Bot),e={Dir:r,Left:n,Right:k},this.GetHorzDirection(b,e),r=e.Dir,n=e.Left,k=e.Right;else break}null!==b.NextInLML?0<=b.OutIdx?(r=this.AddOutPt(b,b.Top),d&&this.AddGhostJoin(r,b.Bot),
+b=this.UpdateEdgeIntoAEL(b),0!==b.WindDelta&&(C=b.PrevInAEL,e=b.NextInAEL,null!==C&&C.Curr.X==b.Bot.X&&C.Curr.Y==b.Bot.Y&&0!==C.WindDelta&&0<=C.OutIdx&&C.Curr.Y>C.Top.Y&&f.ClipperBase.SlopesEqual(b,C,this.m_UseFullRange)?(n=this.AddOutPt(C,b.Bot),this.AddJoin(r,n,b.Top)):null!==e&&e.Curr.X==b.Bot.X&&e.Curr.Y==b.Bot.Y&&0!==e.WindDelta&&0<=e.OutIdx&&e.Curr.Y>e.Top.Y&&f.ClipperBase.SlopesEqual(b,e,this.m_UseFullRange)&&(n=this.AddOutPt(e,b.Bot),this.AddJoin(r,n,b.Top)))):this.UpdateEdgeIntoAEL(b):(0<=
+b.OutIdx&&this.AddOutPt(b,b.Top),this.DeleteFromAEL(b))};f.Clipper.prototype.GetNextInAEL=function(b,d){return d==f.Direction.dLeftToRight?b.NextInAEL:b.PrevInAEL};f.Clipper.prototype.IsMinima=function(b){return null!==b&&b.Prev.NextInLML!=b&&b.Next.NextInLML!=b};f.Clipper.prototype.IsMaxima=function(b,d){return null!==b&&b.Top.Y==d&&null===b.NextInLML};f.Clipper.prototype.IsIntermediate=function(b,d){return b.Top.Y==d&&null!==b.NextInLML};f.Clipper.prototype.GetMaximaPair=function(b){var d=null;
+f.IntPoint.op_Equality(b.Next.Top,b.Top)&&null===b.Next.NextInLML?d=b.Next:f.IntPoint.op_Equality(b.Prev.Top,b.Top)&&null===b.Prev.NextInLML&&(d=b.Prev);return null===d||-2!=d.OutIdx&&(d.NextInAEL!=d.PrevInAEL||f.ClipperBase.IsHorizontal(d))?d:null};f.Clipper.prototype.ProcessIntersections=function(b){if(null==this.m_ActiveEdges)return!0;try{this.BuildIntersectList(b);if(0==this.m_IntersectList.length)return!0;if(1==this.m_IntersectList.length||this.FixupIntersectionOrder())this.ProcessIntersectList();
+else return!1}catch(d){this.m_SortedEdges=null,this.m_IntersectList.length=0,f.Error("ProcessIntersections error")}this.m_SortedEdges=null;return!0};f.Clipper.prototype.BuildIntersectList=function(b){if(null!==this.m_ActiveEdges){var d=this.m_ActiveEdges;for(this.m_SortedEdges=d;null!==d;)d.PrevInSEL=d.PrevInAEL,d.NextInSEL=d.NextInAEL,d.Curr.X=f.Clipper.TopX(d,b),d=d.NextInAEL;for(var e=!0;e&&null!==this.m_SortedEdges;){e=!1;for(d=this.m_SortedEdges;null!==d.NextInSEL;){b=d.NextInSEL;var r=new f.IntPoint;
+d.Curr.X>b.Curr.X?(this.IntersectPoint(d,b,r),e=new f.IntersectNode,e.Edge1=d,e.Edge2=b,e.Pt.X=r.X,e.Pt.Y=r.Y,f.use_xyz&&(e.Pt.Z=r.Z),this.m_IntersectList.push(e),this.SwapPositionsInSEL(d,b),e=!0):d=b}if(null!==d.PrevInSEL)d.PrevInSEL.NextInSEL=null;else break}this.m_SortedEdges=null}};f.Clipper.prototype.EdgesAdjacent=function(b){return b.Edge1.NextInSEL==b.Edge2||b.Edge1.PrevInSEL==b.Edge2};f.Clipper.IntersectNodeSort=function(b,d){return d.Pt.Y-b.Pt.Y};f.Clipper.prototype.FixupIntersectionOrder=
+function(){this.m_IntersectList.sort(this.m_IntersectNodeComparer);this.CopyAELToSEL();for(var b=this.m_IntersectList.length,d=0;d<b;d++){if(!this.EdgesAdjacent(this.m_IntersectList[d])){for(var e=d+1;e<b&&!this.EdgesAdjacent(this.m_IntersectList[e]);)e++;if(e==b)return!1;var f=this.m_IntersectList[d];this.m_IntersectList[d]=this.m_IntersectList[e];this.m_IntersectList[e]=f}this.SwapPositionsInSEL(this.m_IntersectList[d].Edge1,this.m_IntersectList[d].Edge2)}return!0};f.Clipper.prototype.ProcessIntersectList=
+function(){for(var b=0,d=this.m_IntersectList.length;b<d;b++){var e=this.m_IntersectList[b];this.IntersectEdges(e.Edge1,e.Edge2,e.Pt);this.SwapPositionsInAEL(e.Edge1,e.Edge2)}this.m_IntersectList.length=0};M=function(b){return 0>b?Math.ceil(b-.5):Math.round(b)};Sb=function(b){return 0>b?Math.ceil(b-.5):Math.floor(b+.5)};Ta=function(b){return 0>b?-Math.round(Math.abs(b)):Math.round(b)};fb=function(b){if(0>b)return b-=.5,-2147483648>b?Math.ceil(b):b|0;b+=.5;return 2147483647<b?Math.floor(b):b|0};f.Clipper.Round=
+ba?M:tb?Ta:gc?fb:Sb;f.Clipper.TopX=function(b,d){return d==b.Top.Y?b.Top.X:b.Bot.X+f.Clipper.Round(b.Dx*(d-b.Bot.Y))};f.Clipper.prototype.IntersectPoint=function(b,d,e){e.X=0;e.Y=0;var r,n;if(b.Dx==d.Dx)e.Y=b.Curr.Y,e.X=f.Clipper.TopX(b,e.Y);else{if(0===b.Delta.X)e.X=b.Bot.X,f.ClipperBase.IsHorizontal(d)?e.Y=d.Bot.Y:(n=d.Bot.Y-d.Bot.X/d.Dx,e.Y=f.Clipper.Round(e.X/d.Dx+n));else if(0===d.Delta.X)e.X=d.Bot.X,f.ClipperBase.IsHorizontal(b)?e.Y=b.Bot.Y:(r=b.Bot.Y-b.Bot.X/b.Dx,e.Y=f.Clipper.Round(e.X/b.Dx+
+r));else{r=b.Bot.X-b.Bot.Y*b.Dx;n=d.Bot.X-d.Bot.Y*d.Dx;var k=(n-r)/(b.Dx-d.Dx);e.Y=f.Clipper.Round(k);e.X=Math.abs(b.Dx)<Math.abs(d.Dx)?f.Clipper.Round(b.Dx*k+r):f.Clipper.Round(d.Dx*k+n)}if(e.Y<b.Top.Y||e.Y<d.Top.Y){if(b.Top.Y>d.Top.Y)return e.Y=b.Top.Y,e.X=f.Clipper.TopX(d,b.Top.Y),e.X<b.Top.X;e.Y=d.Top.Y;e.X=Math.abs(b.Dx)<Math.abs(d.Dx)?f.Clipper.TopX(b,e.Y):f.Clipper.TopX(d,e.Y)}e.Y>b.Curr.Y&&(e.Y=b.Curr.Y,e.X=Math.abs(b.Dx)>Math.abs(d.Dx)?f.Clipper.TopX(d,e.Y):f.Clipper.TopX(b,e.Y))}};f.Clipper.prototype.ProcessEdgesAtTopOfScanbeam=
+function(b){for(var d=this.m_ActiveEdges;null!==d;){var e=this.IsMaxima(d,b);e&&(e=this.GetMaximaPair(d),e=null===e||!f.ClipperBase.IsHorizontal(e));if(e){var r=d.PrevInAEL;this.DoMaxima(d);d=null===r?this.m_ActiveEdges:r.NextInAEL}else{this.IsIntermediate(d,b)&&f.ClipperBase.IsHorizontal(d.NextInLML)?(d=this.UpdateEdgeIntoAEL(d),0<=d.OutIdx&&this.AddOutPt(d,d.Bot),this.AddEdgeToSEL(d)):(d.Curr.X=f.Clipper.TopX(d,b),d.Curr.Y=b);if(this.StrictlySimple&&(r=d.PrevInAEL,0<=d.OutIdx&&0!==d.WindDelta&&
+null!==r&&0<=r.OutIdx&&r.Curr.X==d.Curr.X&&0!==r.WindDelta)){var n=new f.IntPoint(d.Curr);f.use_xyz&&this.SetZ(n,r,d);e=this.AddOutPt(r,n);r=this.AddOutPt(d,n);this.AddJoin(e,r,n)}d=d.NextInAEL}}this.ProcessHorizontals(!0);for(d=this.m_ActiveEdges;null!==d;)this.IsIntermediate(d,b)&&(e=null,0<=d.OutIdx&&(e=this.AddOutPt(d,d.Top)),d=this.UpdateEdgeIntoAEL(d),r=d.PrevInAEL,n=d.NextInAEL,null!==r&&r.Curr.X==d.Bot.X&&r.Curr.Y==d.Bot.Y&&null!==e&&0<=r.OutIdx&&r.Curr.Y>r.Top.Y&&f.ClipperBase.SlopesEqual(d,
+r,this.m_UseFullRange)&&0!==d.WindDelta&&0!==r.WindDelta?(r=this.AddOutPt(r,d.Bot),this.AddJoin(e,r,d.Top)):null!==n&&n.Curr.X==d.Bot.X&&n.Curr.Y==d.Bot.Y&&null!==e&&0<=n.OutIdx&&n.Curr.Y>n.Top.Y&&f.ClipperBase.SlopesEqual(d,n,this.m_UseFullRange)&&0!==d.WindDelta&&0!==n.WindDelta&&(r=this.AddOutPt(n,d.Bot),this.AddJoin(e,r,d.Top))),d=d.NextInAEL};f.Clipper.prototype.DoMaxima=function(b){var d=this.GetMaximaPair(b);if(null===d)0<=b.OutIdx&&this.AddOutPt(b,b.Top),this.DeleteFromAEL(b);else{for(var e=
+b.NextInAEL;null!==e&&e!=d;)this.IntersectEdges(b,e,b.Top),this.SwapPositionsInAEL(b,e),e=b.NextInAEL;-1==b.OutIdx&&-1==d.OutIdx?(this.DeleteFromAEL(b),this.DeleteFromAEL(d)):0<=b.OutIdx&&0<=d.OutIdx?(0<=b.OutIdx&&this.AddLocalMaxPoly(b,d,b.Top),this.DeleteFromAEL(b),this.DeleteFromAEL(d)):f.use_lines&&0===b.WindDelta?(0<=b.OutIdx&&(this.AddOutPt(b,b.Top),b.OutIdx=-1),this.DeleteFromAEL(b),0<=d.OutIdx&&(this.AddOutPt(d,b.Top),d.OutIdx=-1),this.DeleteFromAEL(d)):f.Error("DoMaxima error")}};f.Clipper.ReversePaths=
+function(b){for(var d=0,e=b.length;d<e;d++)b[d].reverse()};f.Clipper.Orientation=function(b){return 0<=f.Clipper.Area(b)};f.Clipper.prototype.PointCount=function(b){if(null===b)return 0;var d=0,e=b;do d++,e=e.Next;while(e!=b);return d};f.Clipper.prototype.BuildResult=function(b){f.Clear(b);for(var d=0,e=this.m_PolyOuts.length;d<e;d++){var r=this.m_PolyOuts[d];if(null!==r.Pts){var r=r.Pts.Prev,n=this.PointCount(r);if(!(2>n)){for(var k=Array(n),u=0;u<n;u++)k[u]=r.Pt,r=r.Prev;b.push(k)}}}};f.Clipper.prototype.BuildResult2=
+function(b){b.Clear();for(var d=0,e=this.m_PolyOuts.length;d<e;d++){var r=this.m_PolyOuts[d],n=this.PointCount(r.Pts);if(!(r.IsOpen&&2>n||!r.IsOpen&&3>n)){this.FixHoleLinkage(r);var k=new f.PolyNode;b.m_AllPolys.push(k);r.PolyNode=k;k.m_polygon.length=n;for(var r=r.Pts.Prev,u=0;u<n;u++)k.m_polygon[u]=r.Pt,r=r.Prev}}d=0;for(e=this.m_PolyOuts.length;d<e;d++)r=this.m_PolyOuts[d],null!==r.PolyNode&&(r.IsOpen?(r.PolyNode.IsOpen=!0,b.AddChild(r.PolyNode)):null!==r.FirstLeft&&null!=r.FirstLeft.PolyNode?
+r.FirstLeft.PolyNode.AddChild(r.PolyNode):b.AddChild(r.PolyNode))};f.Clipper.prototype.FixupOutPolygon=function(b){var d=null;b.BottomPt=null;for(var e=b.Pts;;){if(e.Prev==e||e.Prev==e.Next){b.Pts=null;return}if(f.IntPoint.op_Equality(e.Pt,e.Next.Pt)||f.IntPoint.op_Equality(e.Pt,e.Prev.Pt)||f.ClipperBase.SlopesEqual(e.Prev.Pt,e.Pt,e.Next.Pt,this.m_UseFullRange)&&(!this.PreserveCollinear||!this.Pt2IsBetweenPt1AndPt3(e.Prev.Pt,e.Pt,e.Next.Pt)))d=null,e.Prev.Next=e.Next,e=e.Next.Prev=e.Prev;else if(e==
+d)break;else null===d&&(d=e),e=e.Next}b.Pts=e};f.Clipper.prototype.DupOutPt=function(b,d){var e=new f.OutPt;e.Pt.X=b.Pt.X;e.Pt.Y=b.Pt.Y;f.use_xyz&&(e.Pt.Z=b.Pt.Z);e.Idx=b.Idx;d?(e.Next=b.Next,e.Prev=b,b.Next.Prev=e,b.Next=e):(e.Prev=b.Prev,e.Next=b,b.Prev.Next=e,b.Prev=e);return e};f.Clipper.prototype.GetOverlap=function(b,d,e,f,n){b<d?e<f?(n.Left=Math.max(b,e),n.Right=Math.min(d,f)):(n.Left=Math.max(b,f),n.Right=Math.min(d,e)):e<f?(n.Left=Math.max(d,e),n.Right=Math.min(b,f)):(n.Left=Math.max(d,f),
+n.Right=Math.min(b,e));return n.Left<n.Right};f.Clipper.prototype.JoinHorz=function(b,d,e,r,n,k){var u=b.Pt.X>d.Pt.X?f.Direction.dRightToLeft:f.Direction.dLeftToRight;r=e.Pt.X>r.Pt.X?f.Direction.dRightToLeft:f.Direction.dLeftToRight;if(u==r)return!1;if(u==f.Direction.dLeftToRight){for(;b.Next.Pt.X<=n.X&&b.Next.Pt.X>=b.Pt.X&&b.Next.Pt.Y==n.Y;)b=b.Next;k&&b.Pt.X!=n.X&&(b=b.Next);d=this.DupOutPt(b,!k);f.IntPoint.op_Inequality(d.Pt,n)&&(b=d,b.Pt.X=n.X,b.Pt.Y=n.Y,f.use_xyz&&(b.Pt.Z=n.Z),d=this.DupOutPt(b,
+!k))}else{for(;b.Next.Pt.X>=n.X&&b.Next.Pt.X<=b.Pt.X&&b.Next.Pt.Y==n.Y;)b=b.Next;k||b.Pt.X==n.X||(b=b.Next);d=this.DupOutPt(b,k);f.IntPoint.op_Inequality(d.Pt,n)&&(b=d,b.Pt.X=n.X,b.Pt.Y=n.Y,f.use_xyz&&(b.Pt.Z=n.Z),d=this.DupOutPt(b,k))}if(r==f.Direction.dLeftToRight){for(;e.Next.Pt.X<=n.X&&e.Next.Pt.X>=e.Pt.X&&e.Next.Pt.Y==n.Y;)e=e.Next;k&&e.Pt.X!=n.X&&(e=e.Next);r=this.DupOutPt(e,!k);f.IntPoint.op_Inequality(r.Pt,n)&&(e=r,e.Pt.X=n.X,e.Pt.Y=n.Y,f.use_xyz&&(e.Pt.Z=n.Z),r=this.DupOutPt(e,!k))}else{for(;e.Next.Pt.X>=
+n.X&&e.Next.Pt.X<=e.Pt.X&&e.Next.Pt.Y==n.Y;)e=e.Next;k||e.Pt.X==n.X||(e=e.Next);r=this.DupOutPt(e,k);f.IntPoint.op_Inequality(r.Pt,n)&&(e=r,e.Pt.X=n.X,e.Pt.Y=n.Y,f.use_xyz&&(e.Pt.Z=n.Z),r=this.DupOutPt(e,k))}u==f.Direction.dLeftToRight==k?(b.Prev=e,e.Next=b,d.Next=r,r.Prev=d):(b.Next=e,e.Prev=b,d.Prev=r,r.Next=d);return!0};f.Clipper.prototype.JoinPoints=function(b,d,e){var r=b.OutPt1,n;new f.OutPt;var k=b.OutPt2,u;new f.OutPt;if((u=b.OutPt1.Pt.Y==b.OffPt.Y)&&f.IntPoint.op_Equality(b.OffPt,b.OutPt1.Pt)&&
+f.IntPoint.op_Equality(b.OffPt,b.OutPt2.Pt)){if(d!=e)return!1;for(n=b.OutPt1.Next;n!=r&&f.IntPoint.op_Equality(n.Pt,b.OffPt);)n=n.Next;n=n.Pt.Y>b.OffPt.Y;for(u=b.OutPt2.Next;u!=k&&f.IntPoint.op_Equality(u.Pt,b.OffPt);)u=u.Next;if(n==u.Pt.Y>b.OffPt.Y)return!1;n?(n=this.DupOutPt(r,!1),u=this.DupOutPt(k,!0),r.Prev=k,k.Next=r,n.Next=u,u.Prev=n):(n=this.DupOutPt(r,!0),u=this.DupOutPt(k,!1),r.Next=k,k.Prev=r,n.Prev=u,u.Next=n);b.OutPt1=r;b.OutPt2=n;return!0}if(u){for(n=r;r.Prev.Pt.Y==r.Pt.Y&&r.Prev!=n&&
+r.Prev!=k;)r=r.Prev;for(;n.Next.Pt.Y==n.Pt.Y&&n.Next!=r&&n.Next!=k;)n=n.Next;if(n.Next==r||n.Next==k)return!1;for(u=k;k.Prev.Pt.Y==k.Pt.Y&&k.Prev!=u&&k.Prev!=n;)k=k.Prev;for(;u.Next.Pt.Y==u.Pt.Y&&u.Next!=k&&u.Next!=r;)u=u.Next;if(u.Next==k||u.Next==r)return!1;e={Left:null,Right:null};if(!this.GetOverlap(r.Pt.X,n.Pt.X,k.Pt.X,u.Pt.X,e))return!1;d=e.Left;var C=e.Right;e=new f.IntPoint;r.Pt.X>=d&&r.Pt.X<=C?(e.X=r.Pt.X,e.Y=r.Pt.Y,f.use_xyz&&(e.Z=r.Pt.Z),d=r.Pt.X>n.Pt.X):k.Pt.X>=d&&k.Pt.X<=C?(e.X=k.Pt.X,
+e.Y=k.Pt.Y,f.use_xyz&&(e.Z=k.Pt.Z),d=k.Pt.X>u.Pt.X):n.Pt.X>=d&&n.Pt.X<=C?(e.X=n.Pt.X,e.Y=n.Pt.Y,f.use_xyz&&(e.Z=n.Pt.Z),d=n.Pt.X>r.Pt.X):(e.X=u.Pt.X,e.Y=u.Pt.Y,f.use_xyz&&(e.Z=u.Pt.Z),d=u.Pt.X>k.Pt.X);b.OutPt1=r;b.OutPt2=k;return this.JoinHorz(r,n,k,u,e,d)}for(n=r.Next;f.IntPoint.op_Equality(n.Pt,r.Pt)&&n!=r;)n=n.Next;if(C=n.Pt.Y>r.Pt.Y||!f.ClipperBase.SlopesEqual(r.Pt,n.Pt,b.OffPt,this.m_UseFullRange)){for(n=r.Prev;f.IntPoint.op_Equality(n.Pt,r.Pt)&&n!=r;)n=n.Prev;if(n.Pt.Y>r.Pt.Y||!f.ClipperBase.SlopesEqual(r.Pt,
+n.Pt,b.OffPt,this.m_UseFullRange))return!1}for(u=k.Next;f.IntPoint.op_Equality(u.Pt,k.Pt)&&u!=k;)u=u.Next;var p=u.Pt.Y>k.Pt.Y||!f.ClipperBase.SlopesEqual(k.Pt,u.Pt,b.OffPt,this.m_UseFullRange);if(p){for(u=k.Prev;f.IntPoint.op_Equality(u.Pt,k.Pt)&&u!=k;)u=u.Prev;if(u.Pt.Y>k.Pt.Y||!f.ClipperBase.SlopesEqual(k.Pt,u.Pt,b.OffPt,this.m_UseFullRange))return!1}if(n==r||u==k||n==u||d==e&&C==p)return!1;C?(n=this.DupOutPt(r,!1),u=this.DupOutPt(k,!0),r.Prev=k,k.Next=r,n.Next=u,u.Prev=n):(n=this.DupOutPt(r,!0),
+u=this.DupOutPt(k,!1),r.Next=k,k.Prev=r,n.Prev=u,u.Next=n);b.OutPt1=r;b.OutPt2=n;return!0};f.Clipper.GetBounds=function(b){for(var d=0,e=b.length;d<e&&0==b[d].length;)d++;if(d==e)return new f.IntRect(0,0,0,0);var r=new f.IntRect;r.left=b[d][0].X;r.right=r.left;r.top=b[d][0].Y;for(r.bottom=r.top;d<e;d++)for(var k=0,I=b[d].length;k<I;k++)b[d][k].X<r.left?r.left=b[d][k].X:b[d][k].X>r.right&&(r.right=b[d][k].X),b[d][k].Y<r.top?r.top=b[d][k].Y:b[d][k].Y>r.bottom&&(r.bottom=b[d][k].Y);return r};f.Clipper.prototype.GetBounds2=
+function(b){var d=b,e=new f.IntRect;e.left=b.Pt.X;e.right=b.Pt.X;e.top=b.Pt.Y;e.bottom=b.Pt.Y;for(b=b.Next;b!=d;)b.Pt.X<e.left&&(e.left=b.Pt.X),b.Pt.X>e.right&&(e.right=b.Pt.X),b.Pt.Y<e.top&&(e.top=b.Pt.Y),b.Pt.Y>e.bottom&&(e.bottom=b.Pt.Y),b=b.Next;return e};f.Clipper.PointInPolygon=function(b,d){var e=0,f=d.length;if(3>f)return 0;for(var k=d[0],I=1;I<=f;++I){var u=I==f?d[0]:d[I];if(u.Y==b.Y&&(u.X==b.X||k.Y==b.Y&&u.X>b.X==k.X<b.X))return-1;if(k.Y<b.Y!=u.Y<b.Y)if(k.X>=b.X)if(u.X>b.X)e=1-e;else{var C=
+(k.X-b.X)*(u.Y-b.Y)-(u.X-b.X)*(k.Y-b.Y);if(0==C)return-1;0<C==u.Y>k.Y&&(e=1-e)}else if(u.X>b.X){C=(k.X-b.X)*(u.Y-b.Y)-(u.X-b.X)*(k.Y-b.Y);if(0==C)return-1;0<C==u.Y>k.Y&&(e=1-e)}k=u}return e};f.Clipper.prototype.PointInPolygon=function(b,d){var e=0,f=d,k=b.X,I=b.Y,u=d.Pt.X,C=d.Pt.Y;do{d=d.Next;var p=d.Pt.X,E=d.Pt.Y;if(E==I&&(p==k||C==I&&p>k==u<k))return-1;if(C<I!=E<I)if(u>=k)if(p>k)e=1-e;else{u=(u-k)*(E-I)-(p-k)*(C-I);if(0==u)return-1;0<u==E>C&&(e=1-e)}else if(p>k){u=(u-k)*(E-I)-(p-k)*(C-I);if(0==
+u)return-1;0<u==E>C&&(e=1-e)}u=p;C=E}while(f!=d);return e};f.Clipper.prototype.Poly2ContainsPoly1=function(b,d){var e=b;do{var f=this.PointInPolygon(e.Pt,d);if(0<=f)return 0<f;e=e.Next}while(e!=b);return!0};f.Clipper.prototype.FixupFirstLefts1=function(b,d){for(var e=0,f=this.m_PolyOuts.length;e<f;e++){var k=this.m_PolyOuts[e];null!=k.Pts&&null!=k.FirstLeft&&this.ParseFirstLeft(k.FirstLeft)==b&&this.Poly2ContainsPoly1(k.Pts,d.Pts)&&(k.FirstLeft=d)}};f.Clipper.prototype.FixupFirstLefts2=function(b,
+d){for(var e=0,f=this.m_PolyOuts,k=f.length,p=f[e];e<k;e++,p=f[e])p.FirstLeft==b&&(p.FirstLeft=d)};f.Clipper.ParseFirstLeft=function(b){for(;null!=b&&null==b.Pts;)b=b.FirstLeft;return b};f.Clipper.prototype.JoinCommonEdges=function(){for(var b=0,d=this.m_Joins.length;b<d;b++){var e=this.m_Joins[b],k=this.GetOutRec(e.OutPt1.Idx),n=this.GetOutRec(e.OutPt2.Idx);if(null!=k.Pts&&null!=n.Pts){var p;p=k==n?k:this.Param1RightOfParam2(k,n)?n:this.Param1RightOfParam2(n,k)?k:this.GetLowermostRec(k,n);if(this.JoinPoints(e,
+k,n))if(k==n){k.Pts=e.OutPt1;k.BottomPt=null;n=this.CreateOutRec();n.Pts=e.OutPt2;this.UpdateOutPtIdxs(n);if(this.m_UsingPolyTree){p=0;for(var u=this.m_PolyOuts.length;p<u-1;p++){var C=this.m_PolyOuts[p];null!=C.Pts&&f.Clipper.ParseFirstLeft(C.FirstLeft)==k&&C.IsHole!=k.IsHole&&this.Poly2ContainsPoly1(C.Pts,e.OutPt2)&&(C.FirstLeft=n)}}this.Poly2ContainsPoly1(n.Pts,k.Pts)?(n.IsHole=!k.IsHole,n.FirstLeft=k,this.m_UsingPolyTree&&this.FixupFirstLefts2(n,k),(n.IsHole^this.ReverseSolution)==0<this.Area(n)&&
+this.ReversePolyPtLinks(n.Pts)):this.Poly2ContainsPoly1(k.Pts,n.Pts)?(n.IsHole=k.IsHole,k.IsHole=!n.IsHole,n.FirstLeft=k.FirstLeft,k.FirstLeft=n,this.m_UsingPolyTree&&this.FixupFirstLefts2(k,n),(k.IsHole^this.ReverseSolution)==0<this.Area(k)&&this.ReversePolyPtLinks(k.Pts)):(n.IsHole=k.IsHole,n.FirstLeft=k.FirstLeft,this.m_UsingPolyTree&&this.FixupFirstLefts1(k,n))}else n.Pts=null,n.BottomPt=null,n.Idx=k.Idx,k.IsHole=p.IsHole,p==n&&(k.FirstLeft=n.FirstLeft),n.FirstLeft=k,this.m_UsingPolyTree&&this.FixupFirstLefts2(n,
+k)}}};f.Clipper.prototype.UpdateOutPtIdxs=function(b){var d=b.Pts;do d.Idx=b.Idx,d=d.Prev;while(d!=b.Pts)};f.Clipper.prototype.DoSimplePolygons=function(){for(var b=0;b<this.m_PolyOuts.length;){var d=this.m_PolyOuts[b++],e=d.Pts;if(null!=e&&!d.IsOpen){do{for(var k=e.Next;k!=d.Pts;){if(f.IntPoint.op_Equality(e.Pt,k.Pt)&&k.Next!=e&&k.Prev!=e){var n=e.Prev,p=k.Prev;e.Prev=p;p.Next=e;k.Prev=n;n.Next=k;d.Pts=e;n=this.CreateOutRec();n.Pts=k;this.UpdateOutPtIdxs(n);this.Poly2ContainsPoly1(n.Pts,d.Pts)?(n.IsHole=
+!d.IsHole,n.FirstLeft=d,this.m_UsingPolyTree&&this.FixupFirstLefts2(n,d)):this.Poly2ContainsPoly1(d.Pts,n.Pts)?(n.IsHole=d.IsHole,d.IsHole=!n.IsHole,n.FirstLeft=d.FirstLeft,d.FirstLeft=n,this.m_UsingPolyTree&&this.FixupFirstLefts2(d,n)):(n.IsHole=d.IsHole,n.FirstLeft=d.FirstLeft,this.m_UsingPolyTree&&this.FixupFirstLefts1(d,n));k=e}k=k.Next}e=e.Next}while(e!=d.Pts)}}};f.Clipper.Area=function(b){var d=b.length;if(3>d)return 0;for(var e=0,f=0,k=d-1;f<d;++f)e+=(b[k].X+b[f].X)*(b[k].Y-b[f].Y),k=f;return.5*
+-e};f.Clipper.prototype.Area=function(b){var d=b.Pts;if(null==d)return 0;var e=0;do e+=(d.Prev.Pt.X+d.Pt.X)*(d.Prev.Pt.Y-d.Pt.Y),d=d.Next;while(d!=b.Pts);return.5*e};f.Clipper.SimplifyPolygon=function(b,d){var e=[],k=new f.Clipper(0);k.StrictlySimple=!0;k.AddPath(b,f.PolyType.ptSubject,!0);k.Execute(f.ClipType.ctUnion,e,d,d);return e};f.Clipper.SimplifyPolygons=function(b,d){"undefined"==typeof d&&(d=f.PolyFillType.pftEvenOdd);var e=[],k=new f.Clipper(0);k.StrictlySimple=!0;k.AddPaths(b,f.PolyType.ptSubject,
+!0);k.Execute(f.ClipType.ctUnion,e,d,d);return e};f.Clipper.DistanceSqrd=function(b,d){var e=b.X-d.X,f=b.Y-d.Y;return e*e+f*f};f.Clipper.DistanceFromLineSqrd=function(b,d,e){var f=d.Y-e.Y;e=e.X-d.X;d=f*d.X+e*d.Y;d=f*b.X+e*b.Y-d;return d*d/(f*f+e*e)};f.Clipper.SlopesNearCollinear=function(b,d,e,k){return Math.abs(b.X-d.X)>Math.abs(b.Y-d.Y)?b.X>d.X==b.X<e.X?f.Clipper.DistanceFromLineSqrd(b,d,e)<k:d.X>b.X==d.X<e.X?f.Clipper.DistanceFromLineSqrd(d,b,e)<k:f.Clipper.DistanceFromLineSqrd(e,b,d)<k:b.Y>d.Y==
+b.Y<e.Y?f.Clipper.DistanceFromLineSqrd(b,d,e)<k:d.Y>b.Y==d.Y<e.Y?f.Clipper.DistanceFromLineSqrd(d,b,e)<k:f.Clipper.DistanceFromLineSqrd(e,b,d)<k};f.Clipper.PointsAreClose=function(b,d,e){var f=b.X-d.X;b=b.Y-d.Y;return f*f+b*b<=e};f.Clipper.ExcludeOp=function(b){var d=b.Prev;d.Next=b.Next;b.Next.Prev=d;d.Idx=0;return d};f.Clipper.CleanPolygon=function(b,d){"undefined"==typeof d&&(d=1.415);var e=b.length;if(0==e)return[];for(var k=Array(e),n=0;n<e;++n)k[n]=new f.OutPt;for(n=0;n<e;++n)k[n].Pt=b[n],k[n].Next=
+k[(n+1)%e],k[n].Next.Prev=k[n],k[n].Idx=0;n=d*d;for(k=k[0];0==k.Idx&&k.Next!=k.Prev;)f.Clipper.PointsAreClose(k.Pt,k.Prev.Pt,n)?(k=f.Clipper.ExcludeOp(k),e--):f.Clipper.PointsAreClose(k.Prev.Pt,k.Next.Pt,n)?(f.Clipper.ExcludeOp(k.Next),k=f.Clipper.ExcludeOp(k),e-=2):f.Clipper.SlopesNearCollinear(k.Prev.Pt,k.Pt,k.Next.Pt,n)?(k=f.Clipper.ExcludeOp(k),e--):(k.Idx=1,k=k.Next);3>e&&(e=0);for(var p=Array(e),n=0;n<e;++n)p[n]=new f.IntPoint(k.Pt),k=k.Next;return p};f.Clipper.CleanPolygons=function(b,d){for(var e=
+Array(b.length),k=0,n=b.length;k<n;k++)e[k]=f.Clipper.CleanPolygon(b[k],d);return e};f.Clipper.Minkowski=function(b,d,e,k){k=k?1:0;var n=b.length,p=d.length,u=[];if(e)for(e=0;e<p;e++){for(var C=Array(n),E=0,F=b.length,H=b[E];E<F;E++,H=b[E])C[E]=new f.IntPoint(d[e].X+H.X,d[e].Y+H.Y);u.push(C)}else for(e=0;e<p;e++){C=Array(n);E=0;F=b.length;for(H=b[E];E<F;E++,H=b[E])C[E]=new f.IntPoint(d[e].X-H.X,d[e].Y-H.Y);u.push(C)}b=[];for(e=0;e<p-1+k;e++)for(E=0;E<n;E++)d=[],d.push(u[e%p][E%n]),d.push(u[(e+1)%
+p][E%n]),d.push(u[(e+1)%p][(E+1)%n]),d.push(u[e%p][(E+1)%n]),f.Clipper.Orientation(d)||d.reverse(),b.push(d);return b};f.Clipper.MinkowskiSum=function(b,d,e){if(d[0]instanceof Array){u=d;d=new f.Paths;for(var k=new f.Clipper,n=0;n<u.length;++n){var p=f.Clipper.Minkowski(b,u[n],!0,e);k.AddPaths(p,f.PolyType.ptSubject,!0);e&&(p=f.Clipper.TranslatePath(u[n],b[0]),k.AddPath(p,f.PolyType.ptClip,!0))}k.Execute(f.ClipType.ctUnion,d,f.PolyFillType.pftNonZero,f.PolyFillType.pftNonZero);return d}var u=f.Clipper.Minkowski(b,
+d,!0,e),k=new f.Clipper;k.AddPaths(u,f.PolyType.ptSubject,!0);k.Execute(f.ClipType.ctUnion,u,f.PolyFillType.pftNonZero,f.PolyFillType.pftNonZero);return u};f.Clipper.TranslatePath=function(b,d){for(var e=new f.Path,k=0;k<b.length;k++)e.push(new f.IntPoint(b[k].X+d.X,b[k].Y+d.Y));return e};f.Clipper.MinkowskiDiff=function(b,d){var e=f.Clipper.Minkowski(b,d,!1,!0),k=new f.Clipper;k.AddPaths(e,f.PolyType.ptSubject,!0);k.Execute(f.ClipType.ctUnion,e,f.PolyFillType.pftNonZero,f.PolyFillType.pftNonZero);
+return e};f.Clipper.PolyTreeToPaths=function(b){var d=[];f.Clipper.AddPolyNodeToPaths(b,f.Clipper.NodeType.ntAny,d);return d};f.Clipper.AddPolyNodeToPaths=function(b,d,e){var k=!0;switch(d){case f.Clipper.NodeType.ntOpen:return;case f.Clipper.NodeType.ntClosed:k=!b.IsOpen}0<b.m_polygon.length&&k&&e.push(b.m_polygon);k=0;b=b.Childs();for(var n=b.length,p=b[k];k<n;k++,p=b[k])f.Clipper.AddPolyNodeToPaths(p,d,e)};f.Clipper.OpenPathsFromPolyTree=function(b){for(var d=new f.Paths,e=0,k=b.ChildCount();e<
+k;e++)b.Childs()[e].IsOpen&&d.push(b.Childs()[e].m_polygon);return d};f.Clipper.ClosedPathsFromPolyTree=function(b){var d=new f.Paths;f.Clipper.AddPolyNodeToPaths(b,f.Clipper.NodeType.ntClosed,d);return d};Y(f.Clipper,f.ClipperBase);f.Clipper.NodeType={ntAny:0,ntOpen:1,ntClosed:2};f.ClipperOffset=function(b,d){"undefined"==typeof b&&(b=2);"undefined"==typeof d&&(d=f.ClipperOffset.def_arc_tolerance);this.m_destPolys=new f.Paths;this.m_srcPoly=new f.Path;this.m_destPoly=new f.Path;this.m_normals=[];
+this.m_StepsPerRad=this.m_miterLim=this.m_cos=this.m_sin=this.m_sinA=this.m_delta=0;this.m_lowest=new f.IntPoint;this.m_polyNodes=new f.PolyNode;this.MiterLimit=b;this.ArcTolerance=d;this.m_lowest.X=-1};f.ClipperOffset.two_pi=6.28318530717959;f.ClipperOffset.def_arc_tolerance=.25;f.ClipperOffset.prototype.Clear=function(){f.Clear(this.m_polyNodes.Childs());this.m_lowest.X=-1};f.ClipperOffset.Round=f.Clipper.Round;f.ClipperOffset.prototype.AddPath=function(b,d,e){var k=b.length-1;if(!(0>k)){var n=
+new f.PolyNode;n.m_jointype=d;n.m_endtype=e;if(e==f.EndType.etClosedLine||e==f.EndType.etClosedPolygon)for(;0<k&&f.IntPoint.op_Equality(b[0],b[k]);)k--;n.m_polygon.push(b[0]);var p=0;d=0;for(var u=1;u<=k;u++)f.IntPoint.op_Inequality(n.m_polygon[p],b[u])&&(p++,n.m_polygon.push(b[u]),b[u].Y>n.m_polygon[d].Y||b[u].Y==n.m_polygon[d].Y&&b[u].X<n.m_polygon[d].X)&&(d=p);if(!(e==f.EndType.etClosedPolygon&&2>p)&&(this.m_polyNodes.AddChild(n),e==f.EndType.etClosedPolygon))if(0>this.m_lowest.X)this.m_lowest=
+new f.IntPoint(this.m_polyNodes.ChildCount()-1,d);else if(b=this.m_polyNodes.Childs()[this.m_lowest.X].m_polygon[this.m_lowest.Y],n.m_polygon[d].Y>b.Y||n.m_polygon[d].Y==b.Y&&n.m_polygon[d].X<b.X)this.m_lowest=new f.IntPoint(this.m_polyNodes.ChildCount()-1,d)}};f.ClipperOffset.prototype.AddPaths=function(b,d,e){for(var f=0,k=b.length;f<k;f++)this.AddPath(b[f],d,e)};f.ClipperOffset.prototype.FixOrientations=function(){if(0<=this.m_lowest.X&&!f.Clipper.Orientation(this.m_polyNodes.Childs()[this.m_lowest.X].m_polygon))for(var b=
+0;b<this.m_polyNodes.ChildCount();b++){var d=this.m_polyNodes.Childs()[b];(d.m_endtype==f.EndType.etClosedPolygon||d.m_endtype==f.EndType.etClosedLine&&f.Clipper.Orientation(d.m_polygon))&&d.m_polygon.reverse()}else for(b=0;b<this.m_polyNodes.ChildCount();b++)d=this.m_polyNodes.Childs()[b],d.m_endtype!=f.EndType.etClosedLine||f.Clipper.Orientation(d.m_polygon)||d.m_polygon.reverse()};f.ClipperOffset.GetUnitNormal=function(b,d){var e=d.X-b.X,k=d.Y-b.Y;if(0==e&&0==k)return new f.DoublePoint(0,0);var n=
+1/Math.sqrt(e*e+k*k);return new f.DoublePoint(k*n,-(e*n))};f.ClipperOffset.prototype.DoOffset=function(b){this.m_destPolys=[];this.m_delta=b;if(f.ClipperBase.near_zero(b))for(var d=0;d<this.m_polyNodes.ChildCount();d++){var e=this.m_polyNodes.Childs()[d];e.m_endtype==f.EndType.etClosedPolygon&&this.m_destPolys.push(e.m_polygon)}else{this.m_miterLim=2<this.MiterLimit?2/(this.MiterLimit*this.MiterLimit):.5;var k=3.14159265358979/Math.acos(1-(0>=this.ArcTolerance?f.ClipperOffset.def_arc_tolerance:this.ArcTolerance>
+Math.abs(b)*f.ClipperOffset.def_arc_tolerance?Math.abs(b)*f.ClipperOffset.def_arc_tolerance:this.ArcTolerance)/Math.abs(b));this.m_sin=Math.sin(f.ClipperOffset.two_pi/k);this.m_cos=Math.cos(f.ClipperOffset.two_pi/k);this.m_StepsPerRad=k/f.ClipperOffset.two_pi;0>b&&(this.m_sin=-this.m_sin);for(d=0;d<this.m_polyNodes.ChildCount();d++){e=this.m_polyNodes.Childs()[d];this.m_srcPoly=e.m_polygon;var n=this.m_srcPoly.length;if(!(0==n||0>=b&&(3>n||e.m_endtype!=f.EndType.etClosedPolygon))){this.m_destPoly=
+[];if(1==n)if(e.m_jointype==f.JoinType.jtRound)for(var e=1,n=0,p=1;p<=k;p++){this.m_destPoly.push(new f.IntPoint(f.ClipperOffset.Round(this.m_srcPoly[0].X+e*b),f.ClipperOffset.Round(this.m_srcPoly[0].Y+n*b)));var u=e,e=e*this.m_cos-this.m_sin*n,n=u*this.m_sin+n*this.m_cos}else for(n=e=-1,p=0;4>p;++p)this.m_destPoly.push(new f.IntPoint(f.ClipperOffset.Round(this.m_srcPoly[0].X+e*b),f.ClipperOffset.Round(this.m_srcPoly[0].Y+n*b))),0>e?e=1:0>n?n=1:e=-1;else{for(p=this.m_normals.length=0;p<n-1;p++)this.m_normals.push(f.ClipperOffset.GetUnitNormal(this.m_srcPoly[p],
+this.m_srcPoly[p+1]));e.m_endtype==f.EndType.etClosedLine||e.m_endtype==f.EndType.etClosedPolygon?this.m_normals.push(f.ClipperOffset.GetUnitNormal(this.m_srcPoly[n-1],this.m_srcPoly[0])):this.m_normals.push(new f.DoublePoint(this.m_normals[n-2]));if(e.m_endtype==f.EndType.etClosedPolygon)for(u=n-1,p=0;p<n;p++)u=this.OffsetPoint(p,u,e.m_jointype);else if(e.m_endtype==f.EndType.etClosedLine){u=n-1;for(p=0;p<n;p++)u=this.OffsetPoint(p,u,e.m_jointype);this.m_destPolys.push(this.m_destPoly);this.m_destPoly=
+[];u=this.m_normals[n-1];for(p=n-1;0<p;p--)this.m_normals[p]=new f.DoublePoint(-this.m_normals[p-1].X,-this.m_normals[p-1].Y);this.m_normals[0]=new f.DoublePoint(-u.X,-u.Y);u=0;for(p=n-1;0<=p;p--)u=this.OffsetPoint(p,u,e.m_jointype)}else{u=0;for(p=1;p<n-1;++p)u=this.OffsetPoint(p,u,e.m_jointype);e.m_endtype==f.EndType.etOpenButt?(p=n-1,u=new f.IntPoint(f.ClipperOffset.Round(this.m_srcPoly[p].X+this.m_normals[p].X*b),f.ClipperOffset.Round(this.m_srcPoly[p].Y+this.m_normals[p].Y*b)),this.m_destPoly.push(u),
+u=new f.IntPoint(f.ClipperOffset.Round(this.m_srcPoly[p].X-this.m_normals[p].X*b),f.ClipperOffset.Round(this.m_srcPoly[p].Y-this.m_normals[p].Y*b)),this.m_destPoly.push(u)):(p=n-1,u=n-2,this.m_sinA=0,this.m_normals[p]=new f.DoublePoint(-this.m_normals[p].X,-this.m_normals[p].Y),e.m_endtype==f.EndType.etOpenSquare?this.DoSquare(p,u):this.DoRound(p,u));for(p=n-1;0<p;p--)this.m_normals[p]=new f.DoublePoint(-this.m_normals[p-1].X,-this.m_normals[p-1].Y);this.m_normals[0]=new f.DoublePoint(-this.m_normals[1].X,
+-this.m_normals[1].Y);u=n-1;for(p=u-1;0<p;--p)u=this.OffsetPoint(p,u,e.m_jointype);e.m_endtype==f.EndType.etOpenButt?(u=new f.IntPoint(f.ClipperOffset.Round(this.m_srcPoly[0].X-this.m_normals[0].X*b),f.ClipperOffset.Round(this.m_srcPoly[0].Y-this.m_normals[0].Y*b)),this.m_destPoly.push(u),u=new f.IntPoint(f.ClipperOffset.Round(this.m_srcPoly[0].X+this.m_normals[0].X*b),f.ClipperOffset.Round(this.m_srcPoly[0].Y+this.m_normals[0].Y*b)),this.m_destPoly.push(u)):(this.m_sinA=0,e.m_endtype==f.EndType.etOpenSquare?
+this.DoSquare(0,1):this.DoRound(0,1))}}this.m_destPolys.push(this.m_destPoly)}}}};f.ClipperOffset.prototype.Execute=function(){var b=arguments;if(b[0]instanceof f.PolyTree)if(d=b[0],e=b[1],d.Clear(),this.FixOrientations(),this.DoOffset(e),b=new f.Clipper(0),b.AddPaths(this.m_destPolys,f.PolyType.ptSubject,!0),0<e)b.Execute(f.ClipType.ctUnion,d,f.PolyFillType.pftPositive,f.PolyFillType.pftPositive);else if(e=f.Clipper.GetBounds(this.m_destPolys),k=new f.Path,k.push(new f.IntPoint(e.left-10,e.bottom+
+10)),k.push(new f.IntPoint(e.right+10,e.bottom+10)),k.push(new f.IntPoint(e.right+10,e.top-10)),k.push(new f.IntPoint(e.left-10,e.top-10)),b.AddPath(k,f.PolyType.ptSubject,!0),b.ReverseSolution=!0,b.Execute(f.ClipType.ctUnion,d,f.PolyFillType.pftNegative,f.PolyFillType.pftNegative),1==d.ChildCount()&&0<d.Childs()[0].ChildCount())for(b=d.Childs()[0],d.Childs()[0]=b.Childs()[0],d.Childs()[0].m_Parent=d,e=1;e<b.ChildCount();e++)d.AddChild(b.Childs()[e]);else d.Clear();else{var d=b[0],e=b[1];f.Clear(d);
+this.FixOrientations();this.DoOffset(e);b=new f.Clipper(0);b.AddPaths(this.m_destPolys,f.PolyType.ptSubject,!0);if(0<e)b.Execute(f.ClipType.ctUnion,d,f.PolyFillType.pftPositive,f.PolyFillType.pftPositive);else{var e=f.Clipper.GetBounds(this.m_destPolys),k=new f.Path;k.push(new f.IntPoint(e.left-10,e.bottom+10));k.push(new f.IntPoint(e.right+10,e.bottom+10));k.push(new f.IntPoint(e.right+10,e.top-10));k.push(new f.IntPoint(e.left-10,e.top-10));b.AddPath(k,f.PolyType.ptSubject,!0);b.ReverseSolution=
+!0;b.Execute(f.ClipType.ctUnion,d,f.PolyFillType.pftNegative,f.PolyFillType.pftNegative);0<d.length&&d.splice(0,1)}}};f.ClipperOffset.prototype.OffsetPoint=function(b,d,e){this.m_sinA=this.m_normals[d].X*this.m_normals[b].Y-this.m_normals[b].X*this.m_normals[d].Y;if(1>Math.abs(this.m_sinA*this.m_delta)){if(0<this.m_normals[d].X*this.m_normals[b].X+this.m_normals[b].Y*this.m_normals[d].Y)return this.m_destPoly.push(new f.IntPoint(f.ClipperOffset.Round(this.m_srcPoly[b].X+this.m_normals[d].X*this.m_delta),
+f.ClipperOffset.Round(this.m_srcPoly[b].Y+this.m_normals[d].Y*this.m_delta))),d}else 1<this.m_sinA?this.m_sinA=1:-1>this.m_sinA&&(this.m_sinA=-1);if(0>this.m_sinA*this.m_delta)this.m_destPoly.push(new f.IntPoint(f.ClipperOffset.Round(this.m_srcPoly[b].X+this.m_normals[d].X*this.m_delta),f.ClipperOffset.Round(this.m_srcPoly[b].Y+this.m_normals[d].Y*this.m_delta))),this.m_destPoly.push(new f.IntPoint(this.m_srcPoly[b])),this.m_destPoly.push(new f.IntPoint(f.ClipperOffset.Round(this.m_srcPoly[b].X+this.m_normals[b].X*
+this.m_delta),f.ClipperOffset.Round(this.m_srcPoly[b].Y+this.m_normals[b].Y*this.m_delta)));else switch(e){case f.JoinType.jtMiter:e=1+(this.m_normals[b].X*this.m_normals[d].X+this.m_normals[b].Y*this.m_normals[d].Y);e>=this.m_miterLim?this.DoMiter(b,d,e):this.DoSquare(b,d);break;case f.JoinType.jtSquare:this.DoSquare(b,d);break;case f.JoinType.jtRound:this.DoRound(b,d)}return b};f.ClipperOffset.prototype.DoSquare=function(b,d){var e=Math.tan(Math.atan2(this.m_sinA,this.m_normals[d].X*this.m_normals[b].X+
+this.m_normals[d].Y*this.m_normals[b].Y)/4);this.m_destPoly.push(new f.IntPoint(f.ClipperOffset.Round(this.m_srcPoly[b].X+this.m_delta*(this.m_normals[d].X-this.m_normals[d].Y*e)),f.ClipperOffset.Round(this.m_srcPoly[b].Y+this.m_delta*(this.m_normals[d].Y+this.m_normals[d].X*e))));this.m_destPoly.push(new f.IntPoint(f.ClipperOffset.Round(this.m_srcPoly[b].X+this.m_delta*(this.m_normals[b].X+this.m_normals[b].Y*e)),f.ClipperOffset.Round(this.m_srcPoly[b].Y+this.m_delta*(this.m_normals[b].Y-this.m_normals[b].X*
+e))))};f.ClipperOffset.prototype.DoMiter=function(b,d,e){e=this.m_delta/e;this.m_destPoly.push(new f.IntPoint(f.ClipperOffset.Round(this.m_srcPoly[b].X+(this.m_normals[d].X+this.m_normals[b].X)*e),f.ClipperOffset.Round(this.m_srcPoly[b].Y+(this.m_normals[d].Y+this.m_normals[b].Y)*e)))};f.ClipperOffset.prototype.DoRound=function(b,d){for(var e=Math.max(f.Cast_Int32(f.ClipperOffset.Round(this.m_StepsPerRad*Math.abs(Math.atan2(this.m_sinA,this.m_normals[d].X*this.m_normals[b].X+this.m_normals[d].Y*this.m_normals[b].Y)))),
+1),k=this.m_normals[d].X,n=this.m_normals[d].Y,p,u=0;u<e;++u)this.m_destPoly.push(new f.IntPoint(f.ClipperOffset.Round(this.m_srcPoly[b].X+k*this.m_delta),f.ClipperOffset.Round(this.m_srcPoly[b].Y+n*this.m_delta))),p=k,k=k*this.m_cos-this.m_sin*n,n=p*this.m_sin+n*this.m_cos;this.m_destPoly.push(new f.IntPoint(f.ClipperOffset.Round(this.m_srcPoly[b].X+this.m_normals[b].X*this.m_delta),f.ClipperOffset.Round(this.m_srcPoly[b].Y+this.m_normals[b].Y*this.m_delta)))};f.Error=function(b){try{throw Error(b);
+}catch(d){alert(d.message)}};f.JS={};f.JS.AreaOfPolygon=function(b,d){d||(d=1);return f.Clipper.Area(b)/(d*d)};f.JS.AreaOfPolygons=function(b,d){d||(d=1);for(var e=0,k=0;k<b.length;k++)e+=f.Clipper.Area(b[k]);return e/(d*d)};f.JS.BoundsOfPath=function(b,d){return f.JS.BoundsOfPaths([b],d)};f.JS.BoundsOfPaths=function(b,d){d||(d=1);var e=f.Clipper.GetBounds(b);e.left/=d;e.bottom/=d;e.right/=d;e.top/=d;return e};f.JS.Clean=function(b,d){if(!(b instanceof Array))return[];var e=b[0]instanceof Array;b=
+f.JS.Clone(b);if("number"!=typeof d||null===d)return f.Error("Delta is not a number in Clean()."),b;if(0===b.length||1==b.length&&0===b[0].length||0>d)return b;e||(b=[b]);for(var k=b.length,n,p,u,E,F,H,N,M=[],ia=0;ia<k;ia++)if(p=b[ia],n=p.length,0!==n)if(3>n)u=p,M.push(u);else{u=p;E=d*d;F=p[0];for(N=H=1;N<n;N++)(p[N].X-F.X)*(p[N].X-F.X)+(p[N].Y-F.Y)*(p[N].Y-F.Y)<=E||(u[H]=p[N],F=p[N],H++);F=p[H-1];(p[0].X-F.X)*(p[0].X-F.X)+(p[0].Y-F.Y)*(p[0].Y-F.Y)<=E&&H--;H<n&&u.splice(H,n-H);u.length&&M.push(u)}!e&&
+M.length?M=M[0]:e||0!==M.length?e&&0===M.length&&(M=[[]]):M=[];return M};f.JS.Clone=function(b){if(!(b instanceof Array)||0===b.length)return[];if(1==b.length&&0===b[0].length)return[[]];var d=b[0]instanceof Array;d||(b=[b]);var e=b.length,f,k,p,u,E=Array(e);for(k=0;k<e;k++){f=b[k].length;u=Array(f);for(p=0;p<f;p++)u[p]={X:b[k][p].X,Y:b[k][p].Y};E[k]=u}d||(E=E[0]);return E};f.JS.Lighten=function(b,d){if(!(b instanceof Array))return[];if("number"!=typeof d||null===d)return f.Error("Tolerance is not a number in Lighten()."),
+f.JS.Clone(b);if(0===b.length||1==b.length&&0===b[0].length||0>d)return f.JS.Clone(b);b[0]instanceof Array||(b=[b]);var e,k,n,p,u,E,F,H,N,M,ia,S,V,Y,ba,fa=b.length,ha=d*d,ea=[];for(e=0;e<fa;e++)if(n=b[e],E=n.length,0!=E){for(p=0;1E6>p;p++){u=[];E=n.length;n[E-1].X!=n[0].X||n[E-1].Y!=n[0].Y?(ia=1,n.push({X:n[0].X,Y:n[0].Y}),E=n.length):ia=0;M=[];for(k=0;k<E-2;k++){F=n[k];N=n[k+1];H=n[k+2];Y=F.X;ba=F.Y;F=H.X-Y;S=H.Y-ba;if(0!==F||0!==S)V=((N.X-Y)*F+(N.Y-ba)*S)/(F*F+S*S),1<V?(Y=H.X,ba=H.Y):0<V&&(Y+=F*
+V,ba+=S*V);F=N.X-Y;S=N.Y-ba;H=F*F+S*S;H<=ha&&(M[k+1]=1,k++)}u.push({X:n[0].X,Y:n[0].Y});for(k=1;k<E-1;k++)M[k]||u.push({X:n[k].X,Y:n[k].Y});u.push({X:n[E-1].X,Y:n[E-1].Y});ia&&n.pop();if(M.length)n=u;else break}E=u.length;u[E-1].X==u[0].X&&u[E-1].Y==u[0].Y&&u.pop();2<u.length&&ea.push(u)}b[0]instanceof Array||(ea=ea[0]);"undefined"==typeof ea&&(ea=[[]]);return ea};f.JS.PerimeterOfPath=function(b,d,e){if("undefined"==typeof b)return 0;var f=Math.sqrt,k=0,p,u,E,F,H=b.length;if(2>H)return 0;for(d&&(b[H]=
+b[0],H++);--H;)p=b[H],E=p.X,p=p.Y,u=b[H-1],F=u.X,u=u.Y,k+=f((E-F)*(E-F)+(p-u)*(p-u));d&&b.pop();return k/e};f.JS.PerimeterOfPaths=function(b,d,e){e||(e=1);for(var k=0,n=0;n<b.length;n++)k+=f.JS.PerimeterOfPath(b[n],d,e);return k};f.JS.ScaleDownPath=function(b,d){var e,f;d||(d=1);for(e=b.length;e--;)f=b[e],f.X/=d,f.Y/=d};f.JS.ScaleDownPaths=function(b,d){var e,f,k;d||(d=1);for(e=b.length;e--;)for(f=b[e].length;f--;)k=b[e][f],k.X/=d,k.Y/=d};f.JS.ScaleUpPath=function(b,d){var e,f,k=Math.round;d||(d=
+1);for(e=b.length;e--;)f=b[e],f.X=k(f.X*d),f.Y=k(f.Y*d)};f.JS.ScaleUpPaths=function(b,d){var e,f,k,p=Math.round;d||(d=1);for(e=b.length;e--;)for(f=b[e].length;f--;)k=b[e][f],k.X=p(k.X*d),k.Y=p(k.Y*d)};f.ExPolygons=function(){return[]};f.ExPolygon=function(){this.holes=this.outer=null};f.JS.AddOuterPolyNodeToExPolygons=function(b,d){var e=new f.ExPolygon;e.outer=b.Contour();var k=b.Childs(),n=k.length;e.holes=Array(n);var p,u,E,F,H;for(u=0;u<n;u++)for(p=k[u],e.holes[u]=p.Contour(),E=0,F=p.Childs(),
+H=F.length;E<H;E++)p=F[E],f.JS.AddOuterPolyNodeToExPolygons(p,d);d.push(e)};f.JS.ExPolygonsToPaths=function(b){var d,e,k,n,p=new f.Paths;d=0;for(k=b.length;d<k;d++)for(p.push(b[d].outer),e=0,n=b[d].holes.length;e<n;e++)p.push(b[d].holes[e]);return p};f.JS.PolyTreeToExPolygons=function(b){var d=new f.ExPolygons,e,k,n;e=0;k=b.Childs();for(n=k.length;e<n;e++)b=k[e],f.JS.AddOuterPolyNodeToExPolygons(b,d);return d}})();
+var CindyJS=function(){function p(k){if(0===ha)return console.error("Waiting for "+k+" after we finished waiting."),function(){};0>ha&&(ha=0);++ha;return function(){--ha;0>ha&&console.error("Wait count mismatch: "+k);if(0===ha)for(var p=0,F=Ga.length;p<F;)Ga[p++].startup()}}function F(k){var p=F.newInstance(k);0>=ha?p.startup():!1!==k.autostart&&Ga.push(p);return p}var ha=-1,Ga=[];"undefined"===typeof document||"undefined"===typeof window||"undefined"===typeof document.addEventListener||"undefined"!==
+typeof window.cindyDontWait&&!0===window.cindyDontWait||document.addEventListener("DOMContentLoaded",p("DOMContentLoaded"));var pa=null,Ha=null,ea={};F.getBaseDir=function(){if(null!==pa)return pa;for(var k=document.getElementsByTagName("script"),p=0;p<k.length;++p){var F=k[p],V=F.src;if(V){var S=/Cindy\.js$/.exec(V);if(S)return pa=V.substr(0,S.index),console.log("Will load extensions from "+pa),Ha=F,pa}}console.error("Could not find <script> tag for Cindy.js");return pa=Ha=!1};F.addNewScript=function(k,
+p){p||console.error.bind(console);var N=F.getBaseDir();if(!1===N)return!1;var V=document.createElement("script");V.src=N+k;var N=Ha.nextSibling,S=Ha.parentElement;N?S.insertBefore(V,N):S.appendChild(V);return V};F.loadScript=function(k,p,N,V){for(var S=String(k).split("."),fa=window;S.length&&"object"===typeof fa&&null!==fa;)fa=fa[S.shift()];if(fa&&!S.length)return N(),!0;V||(V=console.error.bind(console));S=ea[k];if(!S){S=F.addNewScript(p,V);if(!1===S)return V("Can't load additional components."),
+!1;ea[k]=S}S.addEventListener("load",N);S.addEventListener("error",V);return null};F._autoLoadingPlugin={};F.autoLoadPlugin=function(k,p,N){if(F._pluginRegistry[k])return N(),!0;var V=F._autoLoadingPlugin[k];if(!V){p||(p=k+"-plugin.js");V=F._autoLoadingPlugin[k]=[];k=F.addNewScript(p);if(!1===k)return!1;k.addEventListener("error",console.error.bind(console))}V.push(N);return null};var k={ctype:"undefined"};F.waitFor=p;F._pluginRegistry={};F.instances=[];F.registerPlugin=function(k,p,N){if(1!==k)return console.error("Plugin API version "+
+k+" not supported"),!1;F._pluginRegistry[p]=N;(F._autoLoadingPlugin[p]||[]).forEach(function(k){k()})};var Qa=0;F.dumpState=function(k){k=F.instances[k||0].saveState();console.log(JSON.stringify(k))};F.debugState=function(k){F.instances.map(function(k){var p=k.config,p=JSON.parse(JSON.stringify(p)),E=k.saveState();console.log(JSON.stringify(E));for(var F in E)p[F]=E[F];k.shutdown();return p}).forEach(function(k){F(k)})};F.newInstance=function(p){function F(){na.width=ca=na.clientWidth;na.height=da=
+na.clientHeight;A.setTransform(1,0,0,1,0,0);y.setMat(25,0,0,25,250.5,250.5);if(Db)for(var a=0;a<Db.length;a++){var g=Db[a],c=Object.keys(g)[0];"scale"===c&&(Tb=g.scale,y[c](g.scale));if("translate"===c)y[c](g.translate[0],g.translate[1]);"scaleAndOrigin"===c&&(Tb=g[c][0]/25,y[c].apply(null,g[c]));"visibleRect"===c&&(y[c].apply(null,g[c]),Tb=y.drawingstate.initialmatrix.a/25)}y.createnewbackup();y.greset();a=1;"undefined"!==typeof window&&window.devicePixelRatio&&(a=window.devicePixelRatio);g=A.webkitBackingStorePixelRatio||
+A.mozBackingStorePixelRatio||A.msBackingStorePixelRatio||A.oBackingStorePixelRatio||A.backingStorePixelRatio||1;a!==g&&(a/=g,na.width=ca*a,na.height=da*a,A.scale(a,a))}function N(a){var g;if("canvas"!==a.tagName.toLowerCase())for(g=a,na=document.createElement("canvas");g.firstChild;)g.removeChild(g.firstChild);else{na=a;g=document.createElement("div");var c=null,q=null;Array.prototype.slice.call(na.attributes).forEach(function(a){"width"===a.name?c=a.value:"height"===a.name?q=a.value:g.setAttributeNodeNS(na.removeAttributeNode(a))});
+null===c||g.style.width||(g.style.width=c+"px");null===q||g.style.height||(g.style.height=q+"px");na.parentNode.replaceChild(g,na)}g.classList.add("CindyJS-widget");a=na.style;a.position="absolute";a.border="none";a.margin=a.padding=a.left=a.top="0px";a.width=a.height="100%";a="static";window.getComputedStyle&&(a=window.getComputedStyle(g).getPropertyValue("position"),a=String(a||"static"));"static"===a&&(g.style.position="relative");g.appendChild(na);return na}function V(){var a=p.cinderella;if(!a||
+!a.version)return!1;for(var g=0;g<arguments.length;++g){var c=a.version[g],q=arguments[g];if(c!==q)return typeof c===typeof q&&c<q}return!1}function S(){kc=!0;if(0===Ub){if(p.exclusive)for(b=va.instances.length;0<b;)va.instances[--b].shutdown();void 0!==p.csconsole&&(wa=p.csconsole);wa=null===wa?new ua:!0===wa?new Cb:"string"===typeof wa?new gb(wa):"object"===typeof wa&&"function"===typeof wa.appendChild?new gb(wa):new ua;ra=[100,100];var a=null;Db=p.transform;if(p.ports&&0<p.ports.length){b=p.ports[0];
+(a=b.element)||(a=document.getElementById(b.id));var a=N(a),g=a.parentNode.style;"window"===b.fill?(g.width="100vw",g.height="100vh"):"parent"===b.fill?(g.width="100%",g.height="100%"):b.width&&b.height&&(g.width=b.width+"px",g.height=b.height+"px");b.background&&(a.style.backgroundColor=b.background);void 0!==b.transform&&(Db=b.transform);Ia(b.grid)&&0<b.grid&&(za=b.grid);Ia(b.tgrid)&&0<b.tgrid&&(lc=b.tgrid);b.snap&&(Eb=!0);b.axes&&(Fb=!0)}a||(a=p.canvas,a||"undefined"===typeof document||(a=document.getElementById(p.canvasname))&&
+(a=N(a)));a&&(na=a,A=a.getContext("2d"),F(),A.setLineDash||(A.setLineDash=function(){}),(p.animation?p.animation.controls:p.animcontrols)&&ea(p),p.animation&&Ia(p.animation.speed)&&(void 0===p.animation.accuracy&&V(2,9,1875)?ha(.5*p.animation.speed):ha(p.animation.speed)),p.animation&&Ia(p.animation.accuracy)&&(Vb=p.animation.accuracy));p.statusbar&&(mc="string"===typeof p.statusbar?document.getElementById(p.statusbar):p.statusbar);var c=p.scripts,q=null;"string"===typeof c&&c.search(/\*/)&&(q=c);
+"object"!==typeof c&&(c=null);"move keydown keyup keytyped keytype mousedown mouseup mousedrag mousemove mouseclick init tick draw simulationstep simulationstart simulationstop ondrop".split(" ").forEach(function(a){var g;if(null!==c&&c[a])g=c[a];else{g=a+"script";if(p[g])g=document.getElementById(p[g]);else if(q){if(g=document.getElementById(q.replace(/\*/,a)),!g)return}else return;g=g.text}g=Ua(g,!1);"error"===g.ctype?console.error("Error compiling "+a+" script: "+g.message):R[a]=Td(g,a)});V(2,
+9,1888)&&!R.keydown&&(R.keydown=R.keytyped,R.keytyped=R.keytype,R.keytype=void 0);Ia(p.grid)&&0<p.grid&&(za=p.grid);p.snap&&(Eb=!0);v={};var b=0;bb={};p.geometry||(p.geometry=[]);Ud(p.geometry);p.behavior||(p.behavior=[]);"function"===typeof nc&&nc(p.behavior);for(var d in p.images)b=fa(p.images[d],!1),b!==k&&(bb[d]=b);for(var h in p.videos)d=fa(p.videos[h],!0),d!==k&&(bb[h]=d);sa.canvas=a;if(p.oninit)p.oninit(sa);va.instances.push(sa);p.use&&p.use.forEach(function(a){t.use$1([w.wrap(a)],{})});hb.convexhull3d$1&&
+pa("QuickHull3D","QuickHull3D.js");(hb.colorplot$1||hb.colorplot$2||hb.colorplot$3||hb.colorplot$4)&&pa("CindyGL","CindyGL.js");(hb.playtone$1||hb.playmelody$1)&&pa("midi","midi-plugin.js");Y()}}function fa(a,g){var c;"string"===typeof a?(g?(c=document.createElement("video"),c.preload="auto",c.loop=!0,c.setAttribute("playsinline",""),enableInlineVideo(c)):c=new Image,c.src=a):c=a;if(!c.tagName)return console.error("Not a valid image element",c),k;var q={img:c,width:NaN,height:NaN,ready:!0,live:!1,
+generation:0,whenReady:f},b=c.tagName.toLowerCase(),d=[];if("img"===b)c.complete?(q.width=c.width,q.height=c.height):(q.ready=!1,c.addEventListener("load",function(){q.width=c.width;q.height=c.height;q.ready=!0;q.whenReady=f;d.forEach(f);e()}),q.whenReady=d.push.bind(d));else if("video"===b)q.live=!0,c.readyState>=c.HAVE_METADATA?(q.width=c.videoWidth,q.height=c.videoHeight):(q.ready=!1,c.addEventListener("loadedmetadata",function(){q.width=c.videoWidth;q.height=c.videoHeight;q.ready=!0;q.whenReady=
+f;d.forEach(f);e()}),q.whenReady=d.push.bind(d));else if("canvas"===b)q.width=c.width,q.height=c.height;else return console.error("Not a valid image element",b,c),k;return{ctype:"image",value:q}}function ea(a){function g(a,c){var g=document.createElement("button"),q=document.createElement("img");g.appendChild(q);m.appendChild(g);Gb(q,a);g.addEventListener("click",c);Va[a]=function(a){a?g.classList.add("CindyJS-active"):g.classList.remove("CindyJS-active")}}function c(a){if(k){var c=e.getBoundingClientRect();
+ha(h*(a.clientX-c.left-e.clientLeft+.5)/c.width+b)}}var q=document.createElement("div");q.className="CindyJS-animcontrols";na.parentNode.appendChild(q);var b=0,d=1,h=1;a.animation&&a.animation.speedRange&&Ia(a.animation.speedRange[0])&&Ia(a.animation.speedRange[1])&&(b=a.animation.speedRange[0],d=a.animation.speedRange[1],h=d-b);var e=document.createElement("div");e.className="CindyJS-animspeed";q.appendChild(e);var f=document.createElement("div");e.appendChild(f);H(e,"mousedown",function(a){k=!0;
+c(a)});H(e,"mousemove",c);H(na.parentNode,"mouseup",function(a){k=!1},!0);var m=document.createElement("div");m.className="CindyJS-animbuttons";q.appendChild(m);g("play",M);g("pause",Ga);g("stop",Ha);Va.stop(!0);oc=function(a){a=(a-b)/h;a=Math.max(0,Math.min(1,a));a=.1*Math.round(1E3*a);f.style.width=a+"%"};var k=!1}function ha(a){Vc=a;oc&&oc(a)}function f(a){return a()}function pa(a,g,c){var q=null;p.plugins&&(q=p.plugins[a]);q||(q=va._pluginRegistry[a]);q?t.use$1([w.wrap(a)],{}):(++Wc,va.autoLoadPlugin(a,
+g,function(){t.use$1([w.wrap(a)],{});Y(c)}))}function Y(a){0===--Wc&&(a?e():(z(R.init),(p.animation||p).autoplay&&M(),sa.canvas&&ic(sa.canvas,p)))}function ba(){null!==Hb&&(qa.set(Hb.state),Object.keys(Hb.speeds).forEach(function(a){var g=v.csnames[a];"undefined"!==typeof g.behavior&&(a=Hb.speeds[a],g.behavior.vx=a[0],g.behavior.vy=a[1],g.behavior.vz=a[2],g.behavior.fx=0,g.behavior.fy=0,g.behavior.fz=0)}),Vd())}function M(){if(!cb){if(Xb){var a=ib.backup;a.set(qa);for(var g={},c=0;c<v.points.length;c++){var q=
+v.points[c];"undefined"!==typeof q.behavior&&(g[q.name]=[q.behavior.vx,q.behavior.vy,q.behavior.vz])}Hb={state:a,speeds:g};Ib=0;Xb=!1;Va.stop(!1)}else Va.pause(!1);pc=Date.now();Va.play(!0);"function"===typeof nc&&qc&&Wd();cb=!0;z(R.simulationstart);e()}}function Ga(){cb&&(Va.play(!1),Va.pause(!0),cb=!1)}function Ha(){Xb||(cb?(z(R.simulationstop),cb=!1,Va.play(!1)):Va.pause(!1),Va.stop(!0),Xb=!0,ba())}function Ta(){if(!Yb){Yb=!0;for(var a=va.instances.length;0<a;)if(va.instances[--a]===sa){va.instances.splice(a,
+1);break}for(a=jb.length;0<a;)try{jb[--a]()}catch(g){console.error(g)}}}function fb(a){this["in"]=function(a,c){console.log(a);c?this.append(this.createTextNode("span","blue",a)):this.append(this.createTextNode("p","blue",a))};this.out=function(a,c){console.log(a);c?this.append(this.createTextNode("span","red",a)):this.append(this.createTextNode("p","red",a))};this.err=function(a,c){console.log(a);c?this.append(this.createTextNode("span","red",a)):this.append(this.createTextNode("p","red",a))};this.createTextNode=
+function(a,c,q){return"undefined"!==typeof document?(a=document.createElement(a),a.appendChild(document.createTextNode(q)),a.style.color=c,a):q+"\n"}}function Cb(){var a=this,g,c=document.createElement("div"),q;c.innerHTML='<div id="console" style="border-top: 1px solid #333333; bottom: 0px; position: absolute; width: 100%;"><div id="log" style="height: 150px; overflow-y: auto;"></div><input id="cmd" type="text" style="box-sizing: border-box; height: 30px; width: 100%;"></div>';document.body.appendChild(c);
+g=document.getElementById("cmd");q=document.getElementById("log");g.onkeydown=function(c){13===c.keyCode&&""!==g.value&&(a["in"](g.value),c=t.parse$1([w.wrap(g.value)],[]),c=z(c),console.log(Z(c)),"undefined"!==c.ctype&&wa.out(Z(c)),g.value="",q.scrollTop=q.scrollHeight)};this.append=function(a){q.appendChild(a)};this.clear=function(){q.innerHTML=""}}function gb(a){var g=a;"string"===typeof a&&(g=document.getElementById(a));this.append=function(a){g.appendChild(a)};this.clear=function(){g.innerHTML=
+""}}function ua(){this.append=function(a){};this.clear=function(){}}function H(a,g,c,q){void 0===q&&(q=!1);jb.push(function(){a.removeEventListener(g,c,q)});a.addEventListener(g,c,q)}function ic(a,g){function c(c){var g=a.getBoundingClientRect();c=y.to(c.clientX-g.left-a.clientLeft+.5,c.clientY-g.top-a.clientTop+.5);aa.prevx=aa.x;aa.prevy=aa.y;aa.x=c[0];aa.y=c[1];ra[0]=aa.x;ra[1]=aa.y;e()}function q(a){for(var c=a.changedTouches,g=!1,q=0;q<c.length;q++)c[q].identifier===W&&(g=!0);g&&(W=-1,aa.down=
+!1,ja=void 0,z(R.mouseup),wb("mouseup"),e(),a.preventDefault())}var b=null;"undefined"!==typeof MutationObserver&&(b=MutationObserver);b||"undefined"===typeof WebKitMutationObserver||(b=WebKitMutationObserver);b?(b=new b(function(c){document.body.contains(a)||Ta()}),b.observe(document.documentElement,{childList:!0,subtree:!0}),jb.push(function(){b.disconnect()})):(H(a,"DOMNodeRemovedFromDocument",Ta),H(a,"DOMNodeRemoved",Ta));if(!0===g.keylistener)H(document,"keydown",function(a){I(a,R.keydown);return!1}),
+H(document,"keyup",function(a){I(a,R.keyup);return!1}),H(document,"keypress",function(a){I(a,R.keytyped);return!1});else if(R.keydown||R.keyup||R.keytyped)a.setAttribute("tabindex","0"),H(a,"mousedown",function(){a.focus()}),H(a,"keydown",function(a){9!==a.keyCode&&(I(a,R.keydown),R.keytyped||a.preventDefault())}),H(a,"keyup",function(a){I(a,R.keyup);a.preventDefault()}),H(a,"keypress",function(a){9!==a.keyCode&&(I(a,R.keytyped),a.preventDefault())});H(a,"mousedown",function(a){aa.button=a.which;
+c(a);z(R.mousedown);wb("mousedown");aa.down=!0;a.preventDefault()});H(a,"mouseup",function(a){aa.down=!1;ja=void 0;z(R.mouseup);wb("mouseup");e();a.preventDefault()});H(a,"mousemove",function(a){c(a);aa.down?z(R.mousedrag):z(R.mousemove);wb("mousemove");a.preventDefault()});H(a,"click",function(a){c(a);z(R.mouseclick);a.preventDefault()});H(a,"dragenter",function(a){a.preventDefault()});H(a,"dragover",function(a){a.preventDefault()});H(a,"drop",function(c){function g(a,c){function h(){e.readyState===
+XMLHttpRequest.DONE&&(200!==e.status?(console.error("GET request for "+a+" failed: "+(e.responseText||"(no error message)")),d(c,k)):b(c,e.responseText))}var W=a.replace(/[?#][^]*/,""),W=W.replace(/[^]*\/([^\/])/,"$1");f[c]={type:"",name:W};var e=new XMLHttpRequest;e.onreadystatechange=function(){if(e.readyState===XMLHttpRequest.DONE)if(200!==e.status)console.error("HEAD request for "+a+" failed: "+(e.responseText||"(no error message)")),d(c,k);else{var g=e.getResponseHeader("Content-Type");f[c].type=
+g;/^image\//.test(g)?oa(c,a):q(g)?(e=new XMLHttpRequest,e.onreadystatechange=h,e.open("GET",a),e.send()):d(c,k)}};e.open("HEAD",a);e.send()}function q(a){a=a.replace(/;[^]*/,"");return/^text\//.test(a)?1:"application/json"===a?2:0}function b(a,c){switch(q(f[a].type)){case 1:d(a,w.string(c));break;case 2:var g,oa;try{g=JSON.parse(c),oa=w.wrapJSON(g)}catch(h){console.error(h),oa=k}d(a,oa);break;default:d(a,k)}}function oa(a,c){var g=new Image,q=!1;g.onload=function(){q||(q=!0,d(a,fa(g,!1)))};g.onerror=
+function(c){q||(q=!0,console.error(c),d(a,k))};g.src=c}function d(a,c,g){m[a]=h.turnIntoCSList([c,w.string(g||c.ctype),w.string(f[a].type),w.string(f[a].name)]);0===--l&&(a=p,rc=h.turnIntoCSList(m),sc=a,z(R.ondrop),sc=rc=k,e())}c.preventDefault();var W=c.dataTransfer,f=W.files,m=Array(f.length),l=f.length,n=c.currentTarget.getBoundingClientRect(),p=h.realVector(y.to(c.clientX-n.left-a.clientLeft+.5,c.clientY-n.top-a.clientTop+.5));if(0<f.length)Array.prototype.forEach.call(f,function(a,c){var g=new FileReader;
+q(a.type)?(g.onload=function(){b(c,g.result)},g.readAsText(a)):/^image\//.test(a.type)?(g.onload=function(){oa(c,g.result)},g.readAsDataURL(a)):(console.log("Unknown MIME type: "+a.type),d(c,k))});else if(c=W.getData("text/uri-list"))c=c.split("\n").filter(function(a){return!/^\s*(#|$)/.test(a)}),l=c.length,m=Array(l),f=Array(l),c.forEach(g)});var W=-1;H(a,"touchstart",function(a){if(-1===W){var g=a.changedTouches;0!==g.length&&(W=g[0].identifier,c(a.targetTouches[0]),z(R.mousedown),aa.down=!0,wb("mousedown"),
+a.preventDefault())}},!1);H(a,"touchmove",function(a){for(var g=a.changedTouches,q=!1,b=0;b<g.length;b++)g[b].identifier===W&&(q=!0);q&&(c(a.targetTouches[0]),aa.down?z(R.mousedrag):z(R.mousemove),wb("mousemove"),a.preventDefault())},!0);H(a,"touchend",q,!1);"undefined"!==typeof document&&document.body&&H(document.body,"touchcancel",q,!1);"undefined"!==typeof window&&H(window,"resize",function(){Zb(function(){F();e()})},!1);d(a.parentNode);e()}function b(a,g){var c=document.createElement("div");c.setAttribute("style",
+g);a.appendChild(c);return c}function d(a){function g(){q.scrollLeft=q.scrollTop=oa.scrollLeft=oa.scrollTop=1E5}function c(){if(d!==a.clientWidth||h!==a.clientHeight)d=a.clientWidth,h=a.clientHeight,f||(f=!0,Zb(function(){f=!1;F();e()}));g()}if("undefined"!==typeof document){var q=b(a,"position: absolute; transition: 0s; left: 0; top: 0; right: 0; bottom: 0; overflow: hidden; z-index: -1; visibility: hidden;");b(q,"position: absolute; transition: 0s; left: 0; top: 0; width: 100000px; height: 100000px");
+var oa=b(a,"position: absolute; transition: 0s; left: 0; top: 0; right: 0; bottom: 0; overflow: hidden; z-index: -1; visibility: hidden;");b(oa,"position: absolute; transition: 0s; left: 0; top: 0; width: 200%; height: 200%");g();var d=a.clientWidth,h=a.clientHeight,f=!1;q.addEventListener("scroll",c);oa.addEventListener("scroll",c)}}function e(){tc||(tc=Zb(r))}function r(){tc=null;if(!Yb){if(cb){var a=Date.now(),g=Math.min(50,a-pc)*Vc*Xd;pc=a;a=Ib+g;qc&&"undefined"!==typeof ya&&ya.tick(g);Ib=a;cb&&
+z(R.tick)}n();cb&&e()}}function n(){y.reset();A.save();A.clearRect(0,0,ca,da);var a=y.drawingstate.matrix,g,c,q,b,d;if(0!==za){A.beginPath();A.strokeStyle="rgba(0,0,0,0.1)";A.lineWidth=1;A.lineCap="butt";g=za*a.a;for(b=Math.ceil(-a.tx/g);(d=b*g+a.tx)<ca;){if(b||!Fb)A.moveTo(d,0),A.lineTo(d,da);b++}for(b=Math.floor(a.ty/g);(d=b*g-a.ty)<da;){if(b||!Fb)A.moveTo(0,d),A.lineTo(ca,d);b++}A.stroke()}if(0!==lc){A.beginPath();A.strokeStyle="rgba(0,0,0,0.1)";A.lineWidth=1;A.lineCap="butt";g=lc*a.a;var e=Math.sqrt(3);
+c=a.ty/e;q=(da+a.ty)/e;for(b=Math.ceil(-(a.tx+q)/g);(d=b*g+a.tx)+c<ca;)A.moveTo(d+c,0),A.lineTo(d+q,da),b++;for(b=Math.ceil(-(a.tx-c)/g);(d=b*g+a.tx)-q<ca;)A.moveTo(d-c,0),A.lineTo(d-q,da),b++;g*=.5*e;for(b=Math.floor(a.ty/g);(d=b*g-a.ty)<da;){if(b||!Fb)A.moveTo(0,d),A.lineTo(ca,d);b++}A.stroke()}Fb&&(A.beginPath(),A.strokeStyle="rgba(0,0,0,0.2)",A.lineWidth=3,A.lineCap="butt",A.lineJoin="miter",A.miterLimit=10,A.beginPath(),A.moveTo(0,-a.ty),A.lineTo(ca-6,-a.ty),A.moveTo(ca-13,-5-a.ty),A.lineTo(ca-
+3,-a.ty),A.lineTo(ca-13,5-a.ty),A.moveTo(a.tx,da),A.lineTo(a.tx,6),A.moveTo(a.tx-5,13),A.lineTo(a.tx,3),A.lineTo(a.tx+5,13),A.stroke());Yd();y.greset();Zd();for(a=0;a<v.polygons.length;a++)g=v.polygons[a],g.isshowing&&!1!==g.visible&&(c={color:g.color,alpha:g.alpha,fillcolor:g.fillcolor,fillalpha:g.fillalpha,size:g.size,lineJoin:w.string("miter"),fillrule:w.string(g.fillrule)},D.drawpolygon([g.vertices],c,"D",!0));for(a=0;a<v.conics.length;a++)v.conics[a].isArc?(g=v.conics[a],g.isshowing&&!1!==g.visible&&
+(c={},c.color=g.color,c.alpha=g.alpha,c.size=g.size,D.drawarc(g,c,g.filled?"F":"D"))):(g=v.conics[a],g.isshowing&&!1!==g.visible&&(c={},c.color=g.color,c.alpha=g.alpha,c.size=g.size,D.drawconic(g.matrix,c)));for(a=0;a<v.lines.length;a++)a:if(g=v.lines[a],g.isshowing&&!1!==g.visible&&h._helper.isAlmostReal(g.homog))if("S"===g.kind)c={overhang:g.overhang,dashtype:g.dashtype,size:g.size,color:g.color,alpha:g.alpha,arrow:g.arrow,arrowsize:g.arrowsize,arrowposition:g.arrowposition,arrowshape:g.arrowshape,
+arrowsides:g.arrowsides},0<=m.mult(g.startpos.value[2],m.conjugate(g.endpos.value[2])).value.real?(t.draw$2([g.startpos,g.endpos],c),g.labeled&&!g.tmp&&(c=g.printname||g.name||"S",q=h.scalmult(m.real(Math.sign(g.startpos.value[2].value.real)*Math.sign(g.endpos.value[2].value.real)),h.cross(g.startpos,g.endpos)),q={x:q.value[0].value.real,y:q.value[1].value.real},b=Math.sqrt(q.x*q.x+q.y*q.y),q={x:8*q.x/b-3,y:8*q.y/b-3},q=g.labelpos||q,b=x.makeColor(ga.textColor),d=l._helper.midpoint(l._helper.midpoint(g.startpos,
+g.endpos),g.endpos),Xc(g,c,d,q,b))):(x.handleModifs(c,x.lineModifs),x.drawRaySegment(g.startpos,g.endpos));else if("end"===g.clip.value&&"Join"===g.type)b=v.csnames[g.args[0]],c=v.csnames[g.args[1]],t.draw$2([b.homog,c.homog],{overhang:g.overhang,dashtype:g.dashtype,size:g.size,color:g.color,alpha:g.alpha});else{if("inci"===g.clip.value){b=[1E6,0];c=[-1E6,0];d=[1E6,0];q=[-1E6,0];for(e=0;e<g.incidences.length;e++){var f=v.csnames[g.incidences[e]].homog,k=f.value[0],Ra=f.value[1],n=f.value[2];m._helper.isAlmostZero(n)||
+(k=m.div(k,n),Ra=m.div(Ra,n),m._helper.isAlmostReal(k)&&m._helper.isAlmostReal(Ra)&&(k.value.real<b[0]&&(b=[k.value.real,f]),k.value.real>c[0]&&(c=[k.value.real,f]),Ra.value.real<d[0]&&(d=[Ra.value.real,f]),Ra.value.real>q[0]&&(q=[Ra.value.real,f])))}c[0]-b[0]>q[0]-d[0]?(b=b[1],c=c[1]):(b=d[1],c=q[1]);if(b!==c){t.draw$2([b,c],{dashtype:g.dashtype,size:g.size,color:g.color,alpha:g.alpha,overhang:g.overhang});break a}}t.draw$1([g.homog],{dashtype:g.dashtype,size:g.size,color:g.color,alpha:g.alpha})}for(a=
+0;a<v.points.length;a++)if(g=v.points[a],g.isshowing&&!1!==g.visible&&h._helper.isAlmostReal(g.homog)&&(c=g.color,g.behavior&&(c=g.color),t.draw$1([g.homog],{size:g.size,color:c,alpha:g.alpha,noborder:g.noborder,border:g.border}),g.labeled&&!g.tmp)){q=g.printname||g.name||"P";b=g.labelpos||{x:3,y:3};d=x.makeColor(ga.textColor);if(!0===g.noborder.value||!1===g.border.value)d=c;Xc(g,q,g.homog,b,d)}for(a=0;a<v.texts.length;a++)$d(v.texts[a]);if(v.ifs.length){if(U.dirty||!w.deeplyEqual(U.mat,y.drawingstate.matrix))l.IFS.updateParameters(),
+U.dirty=!1;U.img&&A.drawImage(U.img,0,0,ca,da)}A.restore()}function I(a,g){var c=window.event?event:a,c=c.charCode?c.charCode:c.keyCode;Yc=String.fromCharCode(c);Zc=c;z(g);e()}function u(a){var g=a.value;a=g[0].value;var c=g[1].value,g=g[2].value;return h.turnIntoCSList([a[0],m.add(a[1],c[0]),m.add(a[2],g[0]),c[1],m.add(c[2],g[1]),g[2]])}function C(a){var g=!0;return function(c,q){g&&(console.error("Operator "+a+" is not supported yet."),g=!1);return k}}function Z(a){if("undefined"===typeof a)return"_??_";
+if(null===a)return"_???_";if("undefined"===a.ctype)return"___";if("number"===a.ctype)return m.niceprint(a);if("string"===a.ctype||"boolean"===a.ctype)return a.value;if("list"===a.ctype){for(var g="[",c=0;c<a.value.length;c++)g+=Z(z(a.value[c])),c!==a.value.length-1&&(g+=", ");return g+"]"}return"dict"===a.ctype?Na.niceprint(a):"function"===a.ctype?"FUNCTION":"infix"===a.ctype?"INFIX":"modifier"===a.ctype?a.key+"->"+Z(a.value):"shape"===a.ctype?a.type:"error"===a.ctype?"Error: "+a.message:"variable"===
+a.ctype?Z(J.getvar(a.name)):"geo"===a.ctype?a.value.name:"image"===a.ctype?"IMAGE":"_?_"}function ab(a,g){var c="undefined"===a[0].ctype,q="undefined"===a[1].ctype,b=z(a[1]);if(c||q)return k;"variable"===a[0].ctype?J.setvar(a[0].name,b):"infix"===a[0].ctype?"_"===a[0].oper?D.assigntake(a[0],b):ka("Can't use infix expression as lvalue"):"field"===a[0].ctype?D.assigndot(a[0],b):"userdata"===a[0].ctype?D.assigncolon(a[0],b):"function"===a[0].ctype&&"genList"===a[0].oper?"list"===b.ctype?D.assignlist(a[0].args,
+b.value):ka("Expected list in rhs of assignment"):ka("Left hand side of assignment is not a recognized lvalue");return b}function vb(a,g){var c=z(a[0]),q=z(a[1]);if(c.ctype===q.ctype){if("number"===c.ctype)return w.bool(c.value.real===q.value.real&&c.value.imag===q.value.imag);if("string"===c.ctype||"boolean"===c.ctype)return w.bool(c.value===q.value);if("list"===c.ctype)return h.equals(c,q);if("geo"===c.ctype)return w.bool(c.value===q.value)}return{ctype:"boolean",value:!1}}function Oc(a,g){return w.not(vb(a,
+g))}function hc(a,g){var c=B(a[0]),q=B(a[1]);return"number"===c.ctype&&"number"===q.ctype?{ctype:"boolean",value:m._helper.isAlmostEqual(c,q)}:"string"===c.ctype&&"string"===q.ctype||"boolean"===c.ctype&&"boolean"===q.ctype?{ctype:"boolean",value:c.value===q.value}:"list"===c.ctype&&"list"===q.ctype?h.almostequals(c,q):{ctype:"boolean",value:!1}}function Pc(a,g){var c=B(a[0]),q=B(a[1]);return"boolean"===c.ctype&&"boolean"===q.ctype?{ctype:"boolean",value:c.value&&q.value}:k}function Qc(a,g){var c=
+B(a[0]),q=B(a[1]);return"boolean"===c.ctype&&"boolean"===q.ctype?{ctype:"boolean",value:c.value||q.value}:k}function Rc(a,g){var c=a[0];"void"!==c.ctype&&(c=B(c));var q=B(a[1]),b=w.add(c,q);"Angle"===c.usage&&"Angle"===q.usage&&(b=w.withUsage(b,"Angle"));return b}function jc(a,g){var c=a[0];"void"!==c.ctype&&(c=B(c));var q=B(a[1]),b=w.sub(c,q);"Angle"===c.usage&&"Angle"===q.usage&&(b=w.withUsage(b,"Angle"));return b}function Sc(a,g){var c=B(a[0]),q=B(a[1]),b=w.mult(c,q);"Angle"!==c.usage||q.usage?
+"Angle"!==q.usage||c.usage||(b=w.withUsage(b,"Angle")):b=w.withUsage(b,"Angle");return b}function Tc(a,g){var c=B(a[0]),q=B(a[1]);"number"===q.ctype&&m._helper.isZero(q)&&ka("WARNING: Division by zero!");var b=w.div(c,q);"Angle"!==c.usage||q.usage?"Angle"!==q.usage||c.usage||(b=w.withUsage(b,"Angle")):b=w.withUsage(b,"Angle");return b}function Uc(a,g){var c=B(a[0]),q=B(a[1]);return"number"===c.ctype&&"number"===q.ctype?m.pow(c,q):k}function $c(a,g){var c=K(a[0]),q=K(a[1]);if(c!==k&&q!==k){var b=h.cross(c,
+q);"Point"===c.usage&&"Point"===q.usage&&(b=w.withUsage(b,"Line"));"Line"===c.usage&&"Line"===q.usage&&(b=w.withUsage(b,"Point"));return b}return k}function uc(a){var g=a.length;if(0===g)return[];if(1===g)return[0];if(2===g)return a[0][0]+a[1][1]<=a[0][1]+a[1][0]?[0,1]:[1,0];if(4<g)return ae(a);for(var c=be[g],q=Number.POSITIVE_INFINITY,b=c[0],d=0;d<c.length;++d){for(var h=c[d],e=0,f=0;f<g;++f)e+=a[f][h[f]];e<q&&(q=e,b=h)}return b}function ae(a){function g(){return{matched:-1,prev:-1,start:-1,cost:0,
+used:!1,leaf:!1}}function c(a){for(var g=0;g<d;++g)0<k[a][g]||m[g].used||(m[g].used=!0,c(m[g].matched))}function q(a){for(var c=0;c<d;++c)0<k[c][a]||f[c].used||(f[c].used=!0,q(f[c].matched))}var b=Math.abs,d=a.length,h,e,f=Array(d),m=Array(d),k=Array(d);for(h=0;h<d;++h)k[h]=Array(d);for(h=0;h<d;++h)for(f[h]=g(),m[h]=g(),f[h].cost=a[h][0],e=1;e<d;++e)f[h].cost>a[h][e]&&(f[h].cost=a[h][e]);for(;;){for(h=0;h<d;++h)for(e=0;e<d;++e)k[h][e]=a[h][e]-f[h].cost-m[e].cost,k[h][e]<1E-14*(b(a[h][e])+b(f[h].cost)+
+b(m[e].cost))&&(k[h][e]=0);for(h=0;h<d;++h)f[h].matched=m[h].matched=-1;for(var l=0;;){for(h=0;h<d;++h)f[h].used=f[h].leaf=m[h].used=m[h].leaf=!1,-1===f[h].matched&&(f[h].start=h,f[h].used=f[h].leaf=!0,f[h].prev=-1);for(var n=!1,p=!1;!p;){for(h=0;h<d;++h)if(f[h].leaf)for(f[h].leaf=!1,e=0;e<d;++e)if(!(m[e].used||0<k[h][e])&&f[h].matched!==e&&(m[e].prev=h,m[e].start=f[h].start,m[e].used=m[e].leaf=!0,-1===m[e].matched)){f[m[e].start].prev=e;n=!0;break}if(n)break;p=!0;for(e=0;e<d;++e)m[e].leaf&&(m[e].leaf=
+!1,h=m[e].matched,f[h].used||(f[h].prev=e,f[h].start=m[e].start,f[h].used=f[h].leaf=!0,p=!1))}if(!n)break;for(n=0;n<d;++n)if(-1===f[n].matched&&-1!==f[n].prev){e=f[n].prev;do h=m[e].prev,m[e].matched=h,f[h].matched=e,e=f[h].prev;while(h!==n);++l}}if(l===d)break;for(h=0;h<d;++h)f[h].used=f[h].leaf=m[h].used=m[h].leaf=!1;for(h=0;h<d;++h)-1===f[h].matched&&c(h);for(e=0;e<d;++e)-1===m[e].matched&&q(e);for(h=0;h<d;++h)-1===f[h].matched||f[h].used||m[f[h].matched].used||(f[h].used=!0);l=Number.POSITIVE_INFINITY;
+for(h=0;h<d;++h)if(!f[h].used)for(e=0;e<d;++e)m[e].used||l>k[h][e]&&(l=k[h][e]);for(h=0;h<d;++h)f[h].used||(f[h].cost+=l),m[h].used&&(m[h].cost-=l)}a=Array(d);for(h=0;h<d;++h)e=f[h].matched,a[h]=e;return a}function vc(a,g){var c=z(a[0]),q=B(a[1]);"string"!==c.ctype&&(c=h.asList(c));if("number"===q.ctype){q=Math.floor(q.value.real);0>q&&(q=c.value.length+q+1);if(0<q&&q<c.value.length+1)return"list"===c.ctype?c.value[q-1]:{ctype:"string",value:c.value.charAt(q-1)};ka("WARNING: Index out of range!");
+return k}if("list"===q.ctype){for(var b=[],d=0;d<q.value.length;d++){var e=B(q.value[d]);b[d]=vc([c,e],[])}return h.turnIntoCSList(b)}return k}function ad(a,g){var c=z(a[0]),q=z(a[1]);if("shape"===c.ctype&&"shape"===q.ctype)return D.shapeconcat(c,q);c=h.asList(c);q=h.asList(q);return"list"===c.ctype&&"list"===q.ctype?h.concat(c,q):k}function bd(a,g){var c=z(a[0]),q=z(a[1]);return"list"===c.ctype&&"list"===q.ctype?h.set(h.common(c,q)):"shape"===c.ctype&&"shape"===q.ctype?D.shapecommon(c,q):k}function cd(a,
+g){var c=z(a[0]),q=z(a[1]);return"list"===c.ctype&&"list"===q.ctype?h.remove(c,q):"shape"===c.ctype&&"shape"===q.ctype?D.shaperemove(c,q):k}function dd(a,g){var c=z(a[0]),q=z(a[1]);return"list"===c.ctype?h.append(c,q):k}function ed(a,g){var c=z(a[0]),q=z(a[1]);return"list"===q.ctype?h.prepend(c,q):k}function wc(a,g){a|=0;g|=0;if(0===a&&0===g)return 0;for(;0!==g;){var c=a;a=g;g=c%g|0}return a}function ce(a){return 1===a?0:1}function Jb(a,g,c){var q=g*g-4*a*c;0<=q?(q=Math.sqrt(q),0<g&&(q=-q),g=[[q-
+g,2*a],[2*c,q-g]]):g=null;if(null===g)return null;a=g[0][0]/g[0][1];g=g[1][0]/g[1][1];return g<a?[g,a]:[a,g]}function fd(a,g,c,q,b,d,h){if(-1!==g.indexOf("\n")){var e=Infinity,f=-Infinity,m=Infinity,k=-Infinity;g.split("\n").forEach(function(g){g=fd(a,g,c,q,b,d);e>g.left&&(e=g.left);f<g.right&&(f=g.right);m>g.top&&(m=g.top);k<g.bottom&&(k=g.bottom);q+=h});return{left:e,right:f,top:m,bottom:k}}var l=a.measureText(g);a.fillText(g,c-l.width*b,q);return{left:c-l.width*b,right:c+l.width*(1-b),top:q-.84*
+d,bottom:q+.36*d}}function Ja(a){return"image"===a.ctype?a.value:"string"===a.ctype&&bb.hasOwnProperty(a.value)?bb[a.value].value:null}function pb(a,g,c,q,b){var d=[];if(a.readPixels)d=a.readPixels(g,c,q,b);else{var h,e;if(a.img.getContext)e=a.img.getContext("2d"),h=e.getImageData(g,c,q,b).data;else try{Kb||(Kb=document.createElement("canvas")),Kb.width=q,Kb.height=b,e=Kb.getContext("2d"),e.drawImage(a.img,g,c,q,b,0,0,q,b),h=e.getImageData(0,0,q,b).data}catch(f){console.log(f)}for(var m in h)d.push(h[m]/
+255)}return d}function gd(a){return a.replace(/[^A-Za-z0-9 \u0080-\uffff]/ig,"\\$&")}function la(a,g,c){var q=a;g&&(q=q+" at "+g.row+":"+g.col);c&&(q=q+": \u2018"+c+"\u2019");q=Error(q);q.name="CindyScriptParseError";q.description=a;q.location=g;q.text=c;return q}function qb(a){this.input=a;this.re=new RegExp(hd,"g");for(var g=[],c=a.indexOf("\n")+1;c;)g.push(c),c=a.indexOf("\n",c)+1;g.push(a.length);this.bols=g;this.bol=this.pos=0;this.line=1}function $b(a){var g=a[a.length-2],c=a[a.length-3],q=
+a[a.length-1];if(c){if(c.isSuperscript&&g.precedence<=c.precedence)throw la("Operator not allowed after superscript",g.start,g.text);if(q){if(!g.op.infix)throw la("Operator may not be used infix",g.start,g.text);}else if(!g.op.postfix)throw la("Operator may not be used postfix",g.start,g.text);}else if(q){if(!g.op.prefix)throw la("Operator may not be used prefix",g.start,g.text);}else if(!g.op.bare)throw la("Operator without operands",g.start,g.text);g.ctype="infix";g.oper=g.op.sym;g.args=[c,q];a.splice(a.length-
+3,3,g)}function id(a,g,c,q){a.length&1||a.push(null);for(c=Ca[c];3<=a.length&&a[a.length-2].precedence<=c.precedence;)$b(a);a.push({op:c,precedence:c.precedence+(c.rassoc?1:0),start:g.start,end:g.end,text:g.text,rawtext:g.rawtext});c="";for(var b=g.text,d=0;d<b.length;++d)c+="0123456789+-".charAt(q.indexOf(b.charAt(d)));g.ctype="number";g.value={real:+c,imag:0};a.push(g);$b(a)}function jd(a,g){var c=[],q;a:for(;;)switch(q=a.next(),q.toktype){case "OP":var b=Ca[q.text];"_"!==b.sym||!c.length||c.length&
+1||"OP"!==c[c.length-1].toktype||":="!==c[c.length-1].op.sym||(c.pop(),b=Ca[":=_"],q.text=b.sym);q.op=b;q.precedence=b.precedence;for(c.length&1||c.push(null);3<=c.length&&c[c.length-2].precedence<=q.precedence;)$b(c);b.rassoc&&q.precedence++;c.push(q);break;case "ID":q.ctype="variable";q.name=q.text;if(c.length&1)throw la("Missing operator",q.start,q.text);c.push(q);break;case "NUM":q.ctype="number";q.value={real:+q.text,imag:0};if(c.length&1)throw la("Missing operator",q.start,q.text);c.push(q);
+break;case "STR":q.ctype="string";q.value=q.raw.substring(1,q.raw.length-1);if(c.length&1)throw la("Missing operator",q.start,q.text);c.push(q);break;case "SUB":id(c,q,"_","\u2080\u2081\u2082\u2083\u2084\u2085\u2086\u2087\u2088\u2089\u208a\u208b");break;case "SUP":id(c,q,"^","\u2070\u00b9\u00b2\u00b3\u2074\u2075\u2076\u2077\u2078\u2079\u207a\u207b");c[c.length-1].isSuperscript=!0;break;case "BRA":b="[](){}||".indexOf(q.text);if(q.text===g||b&1)break a;var b="[](){}||".charAt(b+1),d=jd(a,b),h=d.closedBy;
+if(h.text!==b)throw la("Opening "+q.text+" at "+q.start.row+":"+q.start.col+" closed by "+(h.text||"EOF")+" at "+h.start.row+":"+h.start.col);h=q.text+h.text;b=[];if(d=d.expr){for(;d&&"infix"===d.ctype&&","===d.oper;)b.push(d.args[0]),d=d.args[1];b.push(d)}if(c.length&1){if("{}"===h)throw la("{\u2026} reserved for future use",q.start);d=c[c.length-1];if("variable"!==d.ctype)throw la("Function name must be an identifier",d.start);if(2<c.length&&c[c.length-2].precedence<kd)throw la("Function call in indexing construct must be enclosed in parentheses",
+q.start);d.ctype="function";q=d.args=[];for(var h=d.modifs={},e=0;e<b.length;++e){var f=b[e];if(f&&"infix"===f.ctype&&"->"===f.oper){var m=f.args[0];if("variable"!==m.ctype)throw la("Modifier name must be an identifier",f.start);h[m.name]=f.args[1]}else q.push(f)}d.oper=d.name.toLowerCase()+"$"+d.args.length}else if("||"===h)if(1===b.length)c.push({ctype:"function",oper:"abs_infix",args:b,modifs:{}});else if(2===b.length)c.push({ctype:"function",oper:"dist_infix",args:b,modifs:{}});else throw la("Don't support |\u2026| with "+
+b.length+" arguments",q.start);else{if("{}"===h)throw la("{\u2026} reserved for future use",q.start);"[]"!==h&&1===b.length?c.push({ctype:"paren",args:b}):0===b.length?c.push({ctype:"list",value:[]}):c.push({ctype:"function",oper:"genList",args:b,modifs:{}})}break;case "EOF":break a}for(c.length&1||c.push(null);3<=c.length;)$b(c);return{expr:c[0],closedBy:q}}function Lb(a){this.usedFunctions={};this.usedVariables={}}function z(a){if(void 0===a)return k;if("infix"===a.ctype)return a.impl(a.args,{},
+a);if("variable"===a.ctype)return z(J.getvar(a.name));if("function"===a.ctype)return Mb.push(a),a=D.evaluate(a.oper,a.args,a.modifs),Mb.pop(),a;if("void"===a.ctype)return k;if("field"===a.ctype){var g=z(a.obj);return"geo"===g.ctype?ta.getField(g.value,a.key):"list"===g.ctype?h.getField(g,a.key):k}return"userdata"===a.ctype?(g=z(a.obj),a=Z(z(a.key)),"_?_"===a&&(a=void 0),"geo"===g.ctype?ta.getuserData(g.value,a):"list"===g.ctype||"string"===g.ctype?ta.getuserData(g,a):k):a}function B(a){a=z(a);if("geo"===
+a.ctype){var g=a.value;if("P"===g.kind)return ta.getField(g,"xy");if("V"===g.kind)return g.value}return a}function K(a){a=z(a);if("geo"===a.ctype){var g=a.value;if("P"===g.kind||"L"===g.kind)return ta.getField(g,"homog")}return h._helper.isNumberVecN(a,3)?a:h._helper.isNumberVecN(a,2)?(g=h.turnIntoCSList([a.value[0],a.value[1],m.real(1)]),a.usage&&(g=w.withUsage(g,a.usage)),g):k}function Ua(a){var g=new Lb;g.usedFunctions=hb;g.infixmap=Q;a=g.parse(a);for(var c in g.usedVariables)J.create(c);return a}
+function Td(a,g){return{ctype:"infix",args:[],impl:function(){Mb=[{oper:g}];var c=z(a);Mb=[];return c}}}function ka(a){wa.err(a+Mb.map(function(a){return"\n at "+a.oper}).join("\n"))}function ld(){this._path=[];this._defs=["<defs>"];this._imgcache=[];this._body=[];this._saveStack=[""];this._clipIndex=0;this._stroke=this._fill="#000";this._strokeOpacity=this._fillOpacity=null;this.height=this.width=0;this.lineWidth=1;this.lineCap="butt";this.lineJoin="miter";this.miterLimit=10;this.globalAlpha=1}
+function md(){this._body=[];this._yPos=this._xPos=NaN;this._extGState={Af255:"<< /ca 1 >>",As255:"<< /CA 1 >>"};this._objects=[["%PDF-1.4\n"]];this._offset=this._objects[0][0].length;this._nextIndex=5;this._imgcache=[];this._xobjects={};this._pathUsed=-1;this._fillAlpha=this._strokeAlpha=this._globalAlpha=1;this.height=this.width=0;this.lineWidth=1;this.lineCap="butt";this.lineJoin="miter";this.miterLimit=10}function nd(a,g){var c=a.width,q=a.height,b=document.createElement("canvas");b.setAttribute("width",
+c);b.setAttribute("height",q);b.setAttribute("style","display:none;");var d=sa.canvas;d.parentNode.insertBefore(b,d.nextSibling);try{return b.getContext("2d").drawImage(a,0,0,c,q),b.toDataURL(g||"image/png")}finally{b.parentNode.removeChild(b)}}function de(a){a=a.replace(RegExp("[^ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/]+","g"),"");var g=new Uint8Array(3*a.length>>2),c,q,b,d,h,e;for(q=c=0;c+3<a.length;c+=4)b="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".indexOf(a.charAt(c)),
+d="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".indexOf(a.charAt(c+1)),h="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".indexOf(a.charAt(c+2)),e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".indexOf(a.charAt(c+3)),g[q++]=b<<2|d>>4,g[q++]=d<<4|h>>2,g[q++]=h<<6|e;switch(a.length-c){case 0:break;case 2:b="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".indexOf(a.charAt(c));d="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".indexOf(a.charAt(c+
+1));g[q++]=b<<2|d>>4;break;case 3:b="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".indexOf(a.charAt(c));d="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".indexOf(a.charAt(c+1));h="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".indexOf(a.charAt(c+2));g[q++]=b<<2|d>>4;g[q++]=d<<4|h>>2;break;default:throw Error("Malformed Base64 input: "+(a.length-c)+" chars left: "+a.substr(c));}if(q!==g.length)throw Error("Failed assertion: "+q+" should be "+
+g.length);return g}function ee(a){function g(c){return(a[c]<<24|a[c+1]<<16|a[c+2]<<8|a[c+3])>>>0}if(57>a.length)throw Error("Too short to be a PNG file");if(2303741511!==g(0)||218765834!==g(4))throw Error("PNG signature missing");for(var c=[],q=8;q<a.length;){if(q+12>a.length)throw Error("Incomplete chunk at offset 0x"+q.toString(16));var b=g(q);if(2147483648<=b)throw Error("Chunk too long");var d=q+12+b;if(d>a.length)throw Error("Incomplete chunk at offset 0x"+q.toString(16));var h=a.subarray(q+
+4,q+8),h=String.fromCharCode.apply(String,h);c.push({len:b,type:h,data:a.subarray(q+8,q+8+b),crc:g(q+8+b)});q=d}return c}function ac(a,g){var c;if(c=/^rgba\(([0-9.]+), *([0-9.]+), *([0-9.]+), *([0-9.]+)\)$/.exec(a))g(+c[1],+c[2],+c[3],+c[4]);else if(c=/^rgb\(([0-9.]+), *([0-9.]+), *([0-9.]+)\)$/.exec(a))g(+c[1],+c[2],+c[3],1);else throw Error("Can't handle color style "+a);}function fe(a){var g=1;Object.keys(bb).forEach(function(c){var q=bb[c].value.img;if(void 0===q.cachedDataURL&&q.src)if("data:"===
+q.src.substr(0,5))q.cachedDataURL=q.src;else{++g;q.cachedDataURL=null;var b=new XMLHttpRequest;b.responseType="blob";b.onreadystatechange=function(){if(b.readyState===XMLHttpRequest.DONE)if(200===b.status){var c=new FileReader;c.onloadend=function(){q.cachedDataURL=c.result;console.log("Cached data for image "+q.src);0===--g&&a()};c.readAsDataURL(b.response)}else console.error("Failed to load "+q.src+": "+b.statusText),0===--g&&a()};b.open("GET",q.src,!0);b.send()}});0===--g&&a()}function rb(a,g,
+c){for(c||(c="0");a.length<g;)a=c+a;return a}function od(){null!==Nb&&(window.URL.revokeObjectURL(Nb),Nb=null)}function pd(a){fe(function(){var g=A;try{A=new a;A.width=ca;A.height=da;n();var c=A.toBlob();Nb=window.URL.createObjectURL(c);qd(Nb)}finally{A=g}})}function Ob(a){var g=null,c=1E6,q;console.log("getElementAtMouse");for(var b=0;b<v.gslp.length;b++){var d=v.gslp[b];if(!d.pinned&&!1!==d.visible&&!0!==d.tmp){var e,f,k,l=y.drawingstate.matrix.sdet;if("P"===d.kind){var n=h.normalizeZ(d.homog);
+if(!h._helper.isAlmostReal(n))continue;e=n.value[0].value.real-a.x;f=n.value[1].value.real-a.y;k=Math.sqrt(e*e+f*f);d.narrow&k>20/l&&(k=1E4)}else if("C"===d.kind)f=v.csnames[d.args[0]],k=0,"undefined"!==typeof d.radius&&(k=d.radius.value.real),e=m.div(f.homog.value[0],f.homog.value[2]).value.real,f=m.div(f.homog.value[1],f.homog.value[2]).value.real,e-=a.x,f-=a.y,k=Math.sqrt(e*e+f*f)-k,f=e=0,0>k&&(k=-k),k+=30/l;else if("L"===d.kind||"S"===d.kind)e=d.homog,k=m,f=k.add(k.mult(e.value[0],k.conjugate(e.value[0])),
+k.mult(e.value[1],k.conjugate(e.value[1]))),f=h.scaldiv(k.sqrt(f),e),k=f.value[0].value.real*a.x+f.value[1].value.real*a.y+f.value[2].value.real,e=f.value[0].value.real*k,f=f.value[1].value.real*k,0>k&&(k=-k),k+=1;k<c+.2/l&&(c=k,g=d,q={x:e,y:f})}}return null===g?null:{mover:g,offset:q,prev:{x:a.x,y:a.y}}}function Xa(){return"P"+ge++}function wb(a){var g=G[xc].actions;g[xb].event===a&&g[xb]["do"]()&&(e(),xb===g.length-1?(Aa=[],xb=Ya=0):xb++)}function yc(a){return a&&.5>Math.abs(a.offset.x)&&.5>Math.abs(a.offset.y)&&
+!a.mover.tmp}function rd(a){return yc(a)&&"P"===a.mover.kind}function sd(a){return yc(a)&&("L"===a.mover.kind||"S"===a.mover.kind)}function zc(a){ja={mover:a,offset:{x:0,y:0},prev:{x:aa.x,y:aa.y}}}function sb(){var a=Ob(aa);rd(a)?Aa[Ya]=a.mover:(Aa[Ya]={type:"Free",name:Xa(),labeled:!0,pos:[ra[0],ra[1],1]},Ka(Aa[Ya]));Ya++}function td(){var a=Ob(aa);return sd(a)?(Aa[Ya]=a.mover,Ya++,!0):!1}function ud(){var a=Ob(aa),g;(g=sd(a))||(g=yc(a)&&"C"===a.mover.kind);return g?(Aa[Ya]=a.mover,Ya++,!0):!1}function yb(){var a=
+Ob(aa);if(rd(a))for(Pb.args[1]=a.mover.name,a=0;a<v.gslp.length;a++){var g=v.gslp[a];!0===g.tmp&&vd(g.name)}else for(a=0;a<v.gslp.length;a++)g=v.gslp[a],!0===g.tmp&&(g.tmp=!1)}function bc(a){var g={type:"Free",name:Xa(),labeled:!0,pos:[ra[0],ra[1],1],tmp:!0},g=Ka(g);Pb=Ka({type:a,name:Xa(),labeled:!0,args:[Aa[0].name,g.name]});zc(g)}function he(a){for(var g in a)null!==a[g]&&(ga[g]=a[g])}function Ud(a){Object.keys(l).forEach(function(a){var c=l[a];kb(c.signature||"_helper"===a,a+" has no signature");
+void 0!==c.updatePosition&&void 0===c.stateSize&&(c.stateSize=0)});v.gslp=[];v.csnames={};v.points=[];v.lines=[];v.conics=[];v.texts=[];v.free=[];v.polygons=[];v.ifs=[];a.forEach(wd);xd()}function yd(a){"undefined"===typeof a.tracedim&&(a.tracedim=1);"undefined"===typeof a.tracelength&&(a.tracelength=100);"undefined"===typeof a.traceskip&&(a.traceskip=1);a._traces=Array(a.tracelength);a._traces_index=0;a._traces_tick=0}function ie(a){void 0===a.size&&(a.size=ga.pointSize);a.size=m.real(a.size);!a.movable||
+a.pinned?(a.color=h.realVector(a.color||ga.pointColor),a.color=h.scalmult(m.real(ga.dimDependent),a.color)):a.color=h.realVector(a.color||ga.pointColor);void 0===a.alpha&&(a.alpha=ga.alpha);a.alpha=m.real(a.alpha);"boolean"!==typeof a.noborder&&(a.noborder=ga.noborder);a.noborder=w.bool(a.noborder);"boolean"!==typeof a.border&&(a.border=!ga.noborder);a.border=w.bool(a.border);a.drawtrace&&yd(a)}function cc(a){void 0===a.size&&(a.size=ga.lineSize);a.size=m.real(a.size);a.color=h.realVector(a.color||
+ga.lineColor);void 0===a.alpha&&(a.alpha=ga.alpha);a.alpha=m.real(a.alpha);a.clip=w.string(a.clip||ga.clip);void 0===a.overhang&&(a.overhang=ga.overhangLine);a.overhang=m.real(a.overhang);a.dashtype&&(a.dashtype=w.wrap(a.dashtype))}function je(a){void 0===a.overhang&&(a.overhang=ga.overhangSeg);a.arrow&&(a.arrow=w.bool(a.arrow));a.arrowsize&&(a.arrowsize=m.real(a.arrowsize));a.arrowposition&&(a.arrowposition=m.real(a.arrowposition));a.arrowshape&&(a.arrowshape=w.string(a.arrowshape));a.arrowsides&&
+(a.arrowsides=w.string(a.arrowsides));cc(a);a.clip=w.string("end")}function ke(a){a.size=void 0!==a.textsize?a.textsize:void 0!==a.size?a.size:ga.textsize;a.size=m.real(+a.size)}function le(a){a.filled=void 0!==a.filled?w.bool(a.filled):w.bool(!0);a.fillcolor=void 0===a.fillcolor?k:h.realVector(a.fillcolor);void 0===a.fillalpha&&(a.fillalpha=0);a.fillalpha=m.real(a.fillalpha);cc(a)}function Ka(a){a=wd(a);xd();return a}function wd(a){var g;if(void 0!==v.csnames[a.name])return console.log("Element name '"+
+a.name+"' already exists"),g=v.csnames[a.name],l[g.type].isMovable&&"P"===l[g.type].kind&&La(g,a.pos,"homog"),{ctype:"geo",value:g};for(;Ac.hasOwnProperty(a.type);)a.type=Ac[a.type];if(g=zd[a.type]){var c=g(a),q=null;for(g=0;g<c.length;++g)q=Ka(c[g]);return q}var b=l[a.type],c=!1;if(!b)return console.error(a),console.error("Operation "+a.type+" not implemented yet"),null;if("**"!==b.signature)if(!Array.isArray(b.signature)&&"*"===b.signature.charAt(1))c=!0,a.args.forEach(function(c){if(v.csnames[c].kind!==
+b.signature.charAt(0))return console.error("Not all elements in set are of same type: "+a.name+" expects "+b.signature+" but "+c+" is of kind "+v.csnames[c].kind),"undefined"!==typeof window&&window.alert("Not all elements in set are of same type: "+a.name),null});else if(b.signature.length!==(a.args?a.args.length:0))return console.error("Wrong number of arguments for "+a.name+" of type "+a.type),"undefined"!==typeof window&&window.alert("Wrong number of arguments for "+a.name),null;if(a.args)for(g=
+0;g<a.args.length;++g){if(!v.csnames.hasOwnProperty(a.args[g]))return console.log("Dropping "+a.name+" due to missing argument "+a.args[g]),null;if("**"!==b.signature&&!c&&(q=v.csnames[a.args[g]].kind,b.signature[g]!==q&&("S"!==q||"L"!==b.signature[g])))return window.alert("Wrong argument kind "+q+" as argument "+g+" to element "+a.name+" of type "+a.type),null}b.signatureConstraints&&!b.signatureConstraints(a)&&window.alert("signature constraints violated for element "+a.name);v.gslp.push(a);v.csnames[a.name]=
+a;g=Da.length;a.kind=b.kind;a.stateIdx=g;g+=b.stateSize;a.incidences=[];a.isshowing=!0;a.movable=!1;b.isMovable&&(a.movable=!0,v.free.push(a));"P"===a.kind&&(v.points.push(a),ie(a));"L"===a.kind&&(v.lines.push(a),cc(a));"C"===a.kind&&(v.conics.push(a),cc(a));"S"===a.kind&&(v.lines.push(a),je(a));"Text"===a.kind&&(v.texts.push(a),ke(a));"Poly"===a.kind&&(v.polygons.push(a),le(a));"IFS"===a.kind&&v.ifs.push(a);me(g);qa=Oa=Da;lb=!0;b.initialize&&(Ba=Ea=a.stateIdx,a.param=b.initialize(a),kb(Ea===a.stateIdx+
+b.stateSize,"State fully initialized"));Ba=Ea=a.stateIdx;b.updatePosition(a,!1);kb(Ba===a.stateIdx+b.stateSize,"State fully consumed");kb(Ea===a.stateIdx+b.stateSize,"State fully updated");lb=!1;qa=ib["in"];qa.set(Da);Oa=ib.out;Bc(a,b);dc={};mb(a);return v.csnames[a.name]}function vd(a){var g,c;console.log("Remove element "+a);delete v.csnames[a];for(g=0;g<v.gslp.length;g++)c=v.gslp[g],c.name===a&&(console.log("Removed element from gslp "+a),v.gslp.splice(g,1));for(g=0;g<v.free.length;g++)c=v.free[g],
+c.name===a&&(console.log("Removed element from free "+a),v.free.splice(g,1));for(g=0;g<v.points.length;g++)c=v.points[g],c.name===a&&(console.log("Removed element from points "+a),v.points.splice(g,1));for(g=0;g<v.lines.length;g++)c=v.lines[g],c.name===a&&(console.log("Removed element from lines "+a),v.lines.splice(g,1));for(g=0;g<v.conics.length;g++)c=v.conics[g],c.name===a&&(console.log("Removed element from conics "+a),v.conics.splice(g,1));dc={}}function Ad(a,g){var c=v.csnames[g.args[0]].homog,
+q=v.csnames[g.args[1]].homog,b=a.homog,d=m.div(c.value[0],c.value[2]),c=m.div(c.value[1],c.value[2]),h=m.div(q.value[0],q.value[2]),q=m.div(q.value[1],q.value[2]),e=m.div(b.value[0],b.value[2]),b=m.div(b.value[1],b.value[2]);return m._helper.isAlmostReal(d)&&m._helper.isAlmostReal(c)&&m._helper.isAlmostReal(h)&&m._helper.isAlmostReal(q)&&m._helper.isAlmostReal(e)&&m._helper.isAlmostReal(b)?(d=d.value.real,c=c.value.real,h=h.value.real,q=q.value.real,e=e.value.real,b=b.value.real,d=Math.sqrt((d-h)*
+(d-h)+(c-q)*(c-q))-Math.sqrt((d-e)*(d-e)+(c-b)*(c-b))-Math.sqrt((h-e)*(h-e)+(q-b)*(q-b)),1E-15>d*d):!1}function Bc(a,g){a.isshowing=!0;if(a.args)for(var c=0;c<a.args.length;c++)if(!v.csnames[a.args[c]].isshowing){a.isshowing=!1;return}g.visiblecheck&&g.visiblecheck(a)}function Xc(a,g,c,q,b){var d=a.textsize||ga.textsize,h=!0===a.textbold,e=!0===a.textitalics,f=a.text_fontfamily||ga.fontFamily,k=q.x*q.x+q.y*q.y,l=1;0<k&&(l=1+a.size.value.real/Math.sqrt(k));a=a.alpha||m.real(ga.alpha);D.drawtext([c,
+w.wrap(g)],{x_offset:w.wrap(l*q.x),y_offset:w.wrap(l*q.y),size:w.wrap(d),bold:w.wrap(h),italics:w.wrap(e),family:w.wrap(f),color:b,alpha:a})}function $d(a){a._bbox=null;if(a.isshowing&&!1!==a.visible){var g={size:a.size},c=a.homog,q=a.text,b=l[a.type].getText,q=b?b(a):q.replace(/@[$#]"([^"\\]|\\.)*"/g,function(a){var c,g;try{if(c=JSON.parse(a.substring(2)),g=v.csnames[c],!g)return"?"}catch(q){return"?"}switch(a.charAt(1)){case "$":return g.printname||c;case "#":return"V"!==g.kind?"?":Z(g.value)}}),
+b=null;if(a.html)var d=a._textCache||{text:!1},h=a.html,e=h.parentNode,f=e.parentNode,b=function(c,g,q,b,oa){d.invisible&&f.style.removeProperty("display");if(c!==d.text||g!==d.font||q!==d.x||b!==d.y||oa!==d.align){g!==d.font&&(h.style.font=g,h.style.lineHeight=ga.lineHeight);c!==d.text&&!1!==c&&!1===Bd(h,c,g)&&(c=!1);f.style.left=q+"px";f.style.top=b+"px";if(oa||e.style.transform)e.style.transform="translateX("+-100*oa+"%)";a._textCache={text:c,font:g,x:q,y:b,align:oa}}};q=w.string(q);a.dock&&(a.dock.to?
+c=v.csnames[a.dock.to].homog:Cd.hasOwnProperty(a.dock.corner)&&(c=t.screenbounds$0([],{}),c=c.value[Cd[a.dock.corner]]),g.offset=a.dock.offset);a.align&&(g.align=w.string(a.align));c&&(a._bbox=D.drawtext([c,q],g,b))}else a.html&&(a.html.parentNode.parentNode.style.display="none",a._textCache={invisible:!0})}function Zd(){function a(){var a=e++/c._traces.length,g=c._traces[h];g&&(a*=q*a*a,t.draw$1([g],{size:m.real(b),color:c.color,alpha:m.real(a)}));b*=d}for(var g=0;g<v.points.length;g++){var c=v.points[g];
+if(c.drawtrace){c._traces_tick===c.traceskip?(c._traces[c._traces_index]=c.homog,c._traces_index=(c._traces_index+1)%c._traces.length,c._traces_tick=0):c._traces_tick++;var q=c.alpha.value.real,b=c.size.value.real,d=1;1!==c.tracedim&&(b*=c.tracedim,d=Math.pow(c.tracedim,-1/c._traces.length));var h,e=0;for(h=c._traces_index;h<c._traces.length;++h)a();for(h=0;h<c._traces_index;++h)a()}}}function kb(a,g){var c="Assertion failed: "+g;if(!a)throw console.log(c),Ta(),"undefined"!==typeof alert&&alert(c),
+Error(c);}function me(a){if(a!==Da.length){var g,c,q=Cc.length;nb.length<a*q?(g=2*a,nb=new Float64Array(q*g)):g=nb.length/q|0;for(c=0;c<q;++c)ib[Cc[c]]=nb.subarray(c*g,c*g+a);a=Da;qa=ib["in"];Oa=ib.out;Da=ib.good;Da.set(a)}}function zb(){Da.set(qa);Ma=!1;Dd(!1);for(var a=Da.length,g=Math.abs,c=0;c<a;c+=2)g(Da[c])>1E12*g(Da[c+1])&&(Da[c+1]=0)}function ec(){if(Ab)Ma=!0;else throw Ed;}function Fd(a,g,c,q,b){return w.add(q,w.mult(c,w.sub(b,q)))}function Yd(){L&&(L.currentMouseAndScripts=[]);Dc=!0;if(ja){var a=
+ja.mover,g=h.realVector([aa.x+ja.offset.x,aa.y+ja.offset.y,1]);Gd(a,g,"mouse");ja.prev.x=aa.x;ja.prev.y=aa.y}z(R.move);z(R.draw);Ma||zb();Dc=!1;L&&(L.fullLog.push(h.turnIntoCSList([h.turnIntoCSList(L.currentMouseAndScripts)])),L.length>L.logLength&&L.splice(0,L.length-L.logLength),L.currentMouseAndScripts=null,L.postMouseHooks.forEach(function(a){a()}))}function La(a,g,c){Gd(a,g,c);Dc||Ma||zb()}function Gd(a,g,c){L&&L.currentMouseAndScripts&&(L.currentMover=[]);a===Hd?(qa.set(Da),Ma=!1):(Hd=a,zb());
+Oa.set(qa);var q=1E4,b;b=dc[a.name];if(!b){var d={},e=0;b=[];d[a.name]=a;for(var f=v.gslp,k=0;k<f.length;++k){var n=f[k],Wa=n.args;if(Wa)for(var p=0;p<Wa.length;++p)d.hasOwnProperty(Wa[p])&&(d[n.name]=n,b[e++]=n)}dc[a.name]=b}var d=-1,e=.9,r,t,u,f=l[a.type],k=f.parameterPath||Fd;Ba=a.stateIdx;n=f.getParamFromState(a);Ba=Ea=a.stateIdx;Wa=f.getParamForInput(a,g,c);for(p=d+e;d!==p;){var x=p*p,y=.5/(1+x),y=m.complex(2*p*y+.5,(1-x)*y);Ab=d+.5*e<=d||0===q;0===q&&console.log("tracing limit Reached");x=!1;
+L&&L.currentMouseAndScripts&&(L.currentStep=[]);try{Ba=Ea=a.stateIdx;var A=k(a,p,y,n,Wa);L&&(L.currentParam=A);y=Oa;Oa=qa;f.putParamToState(a,A);Oa=y;Ea=a.stateIdx;L&&(L.currentElement=a);f.updatePosition(a,!0);kb(Ba===a.stateIdx+f.stateSize,"State fully consumed");kb(Ea===a.stateIdx+f.stateSize,"State fully updated");for(r=0;r<b.length;++r)t=b[r],u=l[t.type],Ba=Ea=t.stateIdx,L&&(L.currentElement=t),u.updatePosition(t,!1),kb(Ba===t.stateIdx+u.stateSize,"State fully consumed"),kb(Ea===t.stateIdx+u.stateSize,
+"State fully updated");L&&(L.currentElement=null);d=p;e*=1.25;p+=e;1<=p&&(p=1);Oa=qa;qa=y}catch(z){if(z!==Ed)throw z;e*=.5;p=d+e;--q;x=!0}L&&L.currentMouseAndScripts&&(L.currentMover.push(h.turnIntoCSList([h.turnIntoCSList(L.currentStep),w.wrap(x),w.wrap(d),w.wrap(p),w.wrap(L.currentParam)])),L.currentStep=null,L.currentParam=null)}Dd(Ma);for(r=0;r<b.length;++r)t=b[r],u=l[t.type],Bc(t,u);L&&L.currentMouseAndScripts&&(L.currentMouseAndScripts.push(h.turnIntoCSList([h.turnIntoCSList(L.currentMover),
+w.wrap(Ma),w.wrap(a.name),g,w.wrap(c),n,Wa])),L.currentMover=null)}function Vd(){zb();Ab=!0;for(var a=v.gslp,g=0;g<a.length;g++){var c=a[g],q=l[c.type];Ba=Ea=c.stateIdx;q.updatePosition(c,!1);Bc(c,q)}a=Oa;Oa=qa;qa=a;zb()}function Dd(a){var g=p.tracingStateReport;"string"===typeof g&&(document.getElementById(g).textContent=a?"BAD":"GOOD")}function ne(){return h.turnIntoCSList(L.fullLog.slice())}function oe(a){var g=JSON.stringify(L.fullLog);a=new Blob([g],{type:a?"application/octet-stream":"application/json"});
+return window.URL.createObjectURL(a)}function Bb(){var a=Ba;Ba+=2;return m.complex(qa[a],qa[a+1])}function X(a){for(var g=Array(a),c=0;c<a;++c)g[c]=Bb();return h.turnIntoCSList(g)}function Za(a){Oa[Ea]=a.value.real;Oa[Ea+1]=a.value.imag;Ea+=2}function T(a){for(var g=0,c=a.value.length;g<c;++g)Za(a.value[g])}function Pa(a,g){var c=X(3),q=X(3),c=Ec(a,g,c,q);T(c[0]);T(c[1]);return h.turnIntoCSList(c)}function Ec(a,g,c,q){if(lb)return[a,g];var b=h.projectiveDistMinScal(c,a),d=h.projectiveDistMinScal(c,
+g),e=h.projectiveDistMinScal(q,a),f=h.projectiveDistMinScal(q,g),m=h.projectiveDistMinScal(c,q),l=h.projectiveDistMinScal(a,g),n=b+f,p=d+e,r;n>p?(r=[g,a],n=p):r=[a,g];p=function(){};if(L&&L.currentStep){var t=[L.labelTracing2,w.wrap(L.currentElement.name),h.turnIntoCSList(r),h.turnIntoCSList([c,q]),h.realMatrix([[b,d],[e,f]]),w.wrap(n),w.wrap(m),w.wrap(l),k];L.currentStep.push(h.turnIntoCSList(t));p=function(a){L.hasOwnProperty(a)||(L[a]=w.wrap(a));t[t.length-1]=L[a]}}h._helper.isNaN(a)||h._helper.isNaN(g)?
+(p("Tracing failed due to NaNs."),Ma=!0):m>3*n&&l>3*n?p("Normal case, everything all right."):1E-5>l?1E-5>m?p("Staying inside singularity."):(p("Moved into singularity."),Ma=!0):1E-5>m?p("Moved out of singularity."):(Ab?p("Reached refinement limit, giving up."):p("Need to refine."),ec());return r}function Fc(a,g,c,q){var b=X(3),d=X(3),e=X(3),f=X(3);a=pe(a,g,c,q,b,d,e,f);T(a[0]);T(a[1]);T(a[2]);T(a[3]);return h.turnIntoCSList(a)}function pe(a,g,c,q,b,d,e,f){var m=function(){};b=[b,d,e,f];a=[a,g,c,
+q];if(lb)return a;d=0;q=Array(4);for(c=0;4>c;c++)for(q[c]=Array(4),f=0;4>f;f++)e=h.projectiveDistMinScal(b[c],a[f]),q[c][f]=e;e=uc(q);g=Array(4);for(c=0;4>c;++c)g[c]=a[e[c]],d+=q[c][e[c]];var l=1*d,n=Infinity,p=Infinity;for(c=0;4>c;c++){if(h._helper.isNaN(a[c]))return m("Tracing failed due to NaNs."),Ma=!0,g;for(f=c+1;4>f;f++)e=h.projectiveDistMinScal(b[c],b[f]),n>e&&(n=e),e=h.projectiveDistMinScal(g[c],g[f]),p>e&&(p=e)}if(L&&L.currentStep){var r=[L.labelTracing4,w.wrap(L.currentElement.name),h.turnIntoCSList(g),
+h.turnIntoCSList(b),h.realMatrix(q),w.wrap(d),w.wrap(n),w.wrap(p),k];L.currentStep.push(h.turnIntoCSList(r));m=function(a){L.hasOwnProperty(a)||(L[a]=w.wrap(a));r[r.length-1]=L[a]}}n>l&&p>l||(1E-5>p?1E-5>n?m("Staying inside singularity."):(m("Moved into singularity."),Ma=!0):1E-5>n?m("Moved out of singularity."):(Ab?m("Reached refinement limit, giving up."):m("Need to refine."),ec()));return g}function Id(a){var g=a.length,c,q;if(lb){for(c=0;c<g;++c)Ba+=2*a[c].value.length,T(a[c]);return a}var b=
+Array(g),d=Array(g),e=Array(g),f=99,m=99,l=Array(g);for(c=0;c<g;++c)b[c]=X(a[c].value.length),d[c]=h.normSquared(b[c]).value.real,e[c]=h.normSquared(a[c]).value.real,l[c]=Array(g);var n;for(c=0;c<g;++c){for(q=0;q<g;++q)n=h.sesquilinearproduct(b[c],a[q]).value,n=(n.real*n.real+n.imag*n.imag)/(d[c]*e[q]),l[c][q]=1-n;for(q=c+1;q<g;++q)n=h.sesquilinearproduct(b[c],b[q]).value,n=(n.real*n.real+n.imag*n.imag)/(d[c]*d[q]),f>1-n&&(f=1-n),n=h.sesquilinearproduct(a[c],a[q]).value,n=(n.real*n.real+n.imag*n.imag)/
+(e[c]*e[q]),m>1-n&&(m=1-n)}n=uc(l);q=Array(g);d=0;e=!1;for(c=0;c<g;++c){var d=d+l[c][n[c]],p=q[c]=a[n[c]];T(p);e|=h._helper.isNaN(p)}e|=isNaN(d);a=function(){};if(L&&L.currentStep){var r=[L.labelTracingSesq,w.wrap(L.currentElement.name),h.turnIntoCSList(q),h.turnIntoCSList(b),h.realMatrix(l),w.wrap(d),w.wrap(f),w.wrap(m),k];L.currentStep.push(h.turnIntoCSList(r));a=function(a){L.hasOwnProperty(a)||(L[a]=w.wrap(a));r[r.length-1]=L[a]}}e?(a("Tracing failed due to NaNs."),Ma=!0):f>3*d&&m>3*d?a("Normal case, everything all right."):
+1E-5>m?1E-5>f?a("Staying inside singularity."):(a("Moved into singularity."),Ma=!0):1E-5>f?a("Moved out of singularity."):(Ab?a("Reached refinement limit, giving up."):a("Need to refine."),ec());return q}function Qb(a,g){var c=l._helper.flattenConicMatrix(a),q=l._helper.flattenConicMatrix(g),b=X(6),d=X(6),q=Ec(c,q,b,d);T(q[0]);T(q[1]);c=l._helper.buildConicMatrix(q[0].value);q=l._helper.buildConicMatrix(q[1].value);return h.turnIntoCSList([c,q])}function mb(a){if(mb.hasOwnProperty(a.kind))mb[a.kind](a)}
+function Jd(a,g){return function(){a.incidences.push(g.name);g.incidences.push(a.name)}}function Kd(a,g){return{toString:function(){return"point "+a.name+" incident line "+g.name},apply:Jd(a,g),holds:function(){var c=h.scaldiv(h.abs(a.homog),a.homog),q=h.scaldiv(h.abs(g.homog),g.homog);return 1E-13>m.abs(h.scalproduct(c,q)).value.real}}}function Ld(a,g){return{toString:function(){return"point "+a.name+" incident conic "+g.name},apply:Jd(a,g),holds:function(){var c=w.mult(g.matrix,a.homog),c=w.mult(a.homog,
+c),c=m.abs(c);1E-13>c.value.real&&(a.incidences.push(g.name),g.incidences.push(a.name))}}}function xd(){if(0!==ob.length){for(var a=0;a<ob.length;++a)ob[a].apply();ob=[]}}function Gc(a,g,c){var q=document.createElement("div"),b=document.createElement("img");b.src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAPoCAQAAAC1v1zVAAAAGklEQVR42u3BMQEAAADCoPVPbQ0PoAAAgHcDC7gAAVI8ZnwAAAAASUVORK5CYII=";q.className="CindyJS-baseline";q.appendChild(b);b=document.createElement("div");b.className="CindyJS-button";
+q.appendChild(b);for(var d=2;d<arguments.length;++d)b.appendChild(arguments[d]);na.parentNode.appendChild(q);a.html=arguments[arguments.length-1];Ia(a.fillalpha)||(a.fillalpha=1);a.fillcolor&&(a.html.style.backgroundColor=x.makeColor(a.fillcolor,a.fillalpha));q=e;if(a.script)var h=Ua(a.script),q=function(){z(h);e()};c.addEventListener(g,q);!p.keylistener&&(R.keydown||R.keyup||R.keytyped)&&(c.addEventListener("keydown",function(a){9!==a.keyCode&&I(a,R.keydown)}),c.addEventListener("keyup",function(a){I(a,
+R.keyup)}),c.addEventListener("keypress",function(a){9!==a.keyCode&&I(a,R.keytyped)}));l.Text.initialize(a)}function Sa(){}function qe(a){if(!/^Select/.test(a.type)&&!l[a.type].isMovable)return null;var g=w.unwrap,c=m.add;switch(a.kind){case "P":case "L":case "Text":return g(a.homog);case "C":return a=a.matrix.value,{xx:g(a[0].value[0]),yy:g(a[1].value[1]),zz:g(a[2].value[2]),xy:g(c(a[0].value[1],a[1].value[0])),xz:g(c(a[0].value[2],a[2].value[0])),yz:g(c(a[1].value[2],a[2].value[1]))};default:return null}}
+function re(a){var g={};g.offset=w.unwrap(a.offset);a.to&&(g.to=a.to);a.corner&&(g.corner=a.corner);return g}function se(a){var g={};te.forEach(function(c){if(a.hasOwnProperty(c)){var b=w.unwrap(a[c]);null!==b&&void 0!==b&&(g[c]=b)}});if("P"===a.kind&&(!a.movable||a.pinned)&&g.color){var c=m.real(1/ga.dimDependent);g.color=w.unwrap(h.scalmult(c,a.color))}if(c=qe(a))g.pos=c;a.dock&&(g.dock=re(a.dock));return g}function ue(){var a=[];v.gslp.forEach(function(g){g.tmp||a.push(se(g))});return a}function Wd(){Fa.forEach(function(a){var g=
+(a.geo||[]).map(function(a){return v.csnames[a]});O[a.type].reset(a,g[0],g)})}function nc(a){qc=0!==a.length;Fa=[];ma=[];Hc=[];O.Environment.init({});a.forEach(function(a){a.behavior?(a.name&&(a.behavior.geo=[a.name]),a=a.behavior,a.gravity&&(a.gravity=-a.gravity)):c=a.geo;var c=(a.geo||[]).map(function(a){return v.csnames[a]}),q=c[0],b=O[a.type];b?(b.init&&b.init(a,q,c),q&&(q.behavior=a,"Mass"===a.type?ma.push(q):"Spring"===a.type&&Hc.push(q)),Fa.push(a)):(console.error(a),console.error("Behavior "+
+a.type+" not implemented yet"))})}var va=this,wa,R={},cb=!1,Xb=!0,Ib=0,Vc=.5,pc=0,Vb=10,Md=5/360,Xd=.32/Md/1E3*2,Tb=1,za=0,lc=0,Eb=!1,Fb=!1,na,Db,Ia=Number.isFinite||function(a){return"number"===typeof a&&isFinite(a)},ra,A,ca,da,v,bb,rc=k,sc=k,Va={play:Sa,pause:Sa,stop:Sa},oc=null,Gb=function(a,g){var c=[];Gb=function(a,g){c.push({img:a,id:g})};Gb(a,g);var q=va.getBaseDir()+"images/Icons.svg",b=new XMLHttpRequest;b.onreadystatechange=function(){if(b.readyState===XMLHttpRequest.DONE)if(200!==b.status)console.error("Failed to load CindyJS Icons.svg from "+
+q+": "+b.statusText);else{var a=b.responseXML,g=a.documentElement,d={},h,e;for(h=g.firstChild;h;h=e)e=h.nextSibling,h.nodeType===Node.ELEMENT_NODE&&"http://www.w3.org/2000/svg"===h.namespaceURI&&"g"===h.localName.toLowerCase()&&(g.removeChild(h),h.setAttribute("style","display:inline"),d[h.getAttribute("id")]=h);var f=new XMLSerializer;Gb=function(c,q){if(d.hasOwnProperty(q)){var b=d[q];g.appendChild(b);var h;try{h=f.serializeToString(a)}finally{g.removeChild(b)}c.src="data:image/svg+xml;charset=utf-8,"+
+encodeURIComponent(h)}};c.forEach(function(a){Gb(a.img,a.id)});c=null}};b.responseType="document";b.open("GET",q);b.send()},Wc=1,Hb=null,jb=[],Yb=!1,sa={config:p,startup:S,shutdown:Ta,evokeCS:function(a){a=Ua(a,!1);z(a);e()},play:M,pause:Ga,stop:Ha,evalcs:function(a){return z(Ua(a,!1))},parse:function(a){return Ua(a)},niceprint:Z,canvas:null},kc=!1,Ub=0;p.use&&p.use.forEach(function(a){var g=null;p.plugins&&(g=p.plugins[a]);g||(g=va._pluginRegistry[a]);g||(++Ub,console.log("Loading script for plugin "+
+a),va.loadScript(a+"-plugin",a+"-plugin.js",function(){console.log("Successfully loaded plugin "+a);0===--Ub&&kc&&S()},function(){console.error("Failed to auto-load plugin "+a);0===--Ub&&kc&&S()}))});Cb.prototype=new fb;gb.prototype=new fb;ua.prototype=new fb;var aa={},ja,Yc="",Zc=0,Zb;Zb=p.isNode?process.nextTick:window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(a){window.setTimeout(a,
+0)};var tc=null,ve=[0,8,7,0,"g8c01b8d"],m={_helper:{}};m._helper.roundingfactor=1E4;m._helper.angleroundingfactor=10;m._helper.niceround=function(a,g){return Math.round(a*g)/g};m.niceprint=function(a,g){g=g||m._helper.roundingfactor;if("Angle"===a.usage)return m._helper.niceangle(a);var c=m._helper.niceround(a.value.real,g),q=m._helper.niceround(a.value.imag,g);return 0===q?""+c:0<q?""+c+" + i*"+q:""+c+" - i*"+-q};var Ic=p.angleUnit||"\u00b0",we=Ic.replace(/\s+/g,""),Nd=2*Math.PI,xe=1/Nd,ye={rad:Nd,
+"\u00b0":360,deg:360,degree:360,gra:400,grad:400,turn:1,cyc:1,rev:1,rot:1,"\u03c0":2,pi:2,quad:4};m._helper.niceangle=function(a){var g=ye[we];if(!g)return m.niceprint(w.withUsage(a,null));if("function"===typeof g)return g(a);a=m.niceprint(m.realmult(g*xe,a),200<g?m._helper.angleroundingfactor:null);return-1===a.indexOf("i*")?a+Ic:"("+a+")"+Ic};m.complex=function(a,g){return{ctype:"number",value:{real:a,imag:g}}};m.real=function(a){return{ctype:"number",value:{real:a,imag:0}}};m.zero=m.real(0);m.one=
+m.real(1);m.infinity=m.complex(Infinity,Infinity);m.nan=m.complex(NaN,NaN);m._helper.input=function(a){return"object"===typeof a?m.complex(+a.r,+a.i):m.real(+a)};m.argmax=function(a,g){return a.value.real*a.value.real+a.value.imag*a.value.imag<g.value.real*g.value.real+g.value.imag*g.value.imag?g:a};m.max=function(a,g){return{ctype:"number",value:{real:Math.max(a.value.real,g.value.real),imag:Math.max(a.value.imag,g.value.imag)}}};m.min=function(a,g){return{ctype:"number",value:{real:Math.min(a.value.real,
+g.value.real),imag:Math.min(a.value.imag,g.value.imag)}}};m.add=function(a,g){return{ctype:"number",value:{real:a.value.real+g.value.real,imag:a.value.imag+g.value.imag}}};m.sub=function(a,g){return{ctype:"number",value:{real:a.value.real-g.value.real,imag:a.value.imag-g.value.imag}}};m.neg=function(a){return{ctype:"number",value:{real:-a.value.real,imag:-a.value.imag}}};m.re=function(a){return{ctype:"number",value:{real:a.value.real,imag:0}}};m.im=function(a){return{ctype:"number",value:{real:a.value.imag,
+imag:0}}};m.conjugate=function(a){return{ctype:"number",value:{real:a.value.real,imag:-a.value.imag}}};m.round=function(a){return{ctype:"number",value:{real:Math.round(a.value.real),imag:Math.round(a.value.imag)}}};m.ceil=function(a){return{ctype:"number",value:{real:Math.ceil(a.value.real),imag:Math.ceil(a.value.imag)}}};m.floor=function(a){return{ctype:"number",value:{real:Math.floor(a.value.real),imag:Math.floor(a.value.imag)}}};m.mult=function(a,g){return{ctype:"number",value:{real:a.value.real*
+g.value.real-a.value.imag*g.value.imag,imag:a.value.real*g.value.imag+a.value.imag*g.value.real}}};m.realmult=function(a,g){return{ctype:"number",value:{real:a*g.value.real,imag:a*g.value.imag}}};m.multiMult=function(a){var g=a[0];if("number"!==g.ctype)return k;for(var c=1;c<a.length;c++){if("number"!==a[c].ctype)return k;g=m.mult(g,a[c])}return g};m.abs2=function(a){return{ctype:"number",value:{real:a.value.real*a.value.real+a.value.imag*a.value.imag,imag:0}}};m.abs=function(a){return m.sqrt(m.abs2(a))};
+m.inv=function(a){var g=a.value.real*a.value.real+a.value.imag*a.value.imag;return{ctype:"number",value:{real:a.value.real/g,imag:-a.value.imag/g}}};m.div=function(a,g){var c=a.value.real,q=a.value.imag,b=g.value.real,d=g.value.imag,h=b*b+d*d;return{ctype:"number",value:{real:(c*b+q*d)/h,imag:(q*b-c*d)/h}}};m.eps=1E-10;m.epsbig=1E-6;m.snap=function(a){var g=a.value.real;a=a.value.imag;Math.floor(g+m.eps)!==Math.floor(g-m.eps)&&(g=Math.round(g));Math.floor(a+m.eps)!==Math.floor(a-m.eps)&&(a=Math.round(a));
+return{ctype:"number",value:{real:g,imag:a}}};m.exp=function(a){var g=Math.exp(a.value.real);return{ctype:"number",value:{real:g*Math.cos(a.value.imag),imag:g*Math.sin(a.value.imag)}}};m.cos=function(a){var g=a.value.real;a=a.value.imag;var c=Math.exp(a),q=c*Math.sin(-g),b=c*Math.cos(-g),c=Math.exp(-a);return{ctype:"number",value:{real:(b+c*Math.cos(g))/2,imag:(q+c*Math.sin(g))/2}}};m.sin=function(a){var g=a.value.real;a=a.value.imag;var c=Math.exp(a),q=c*Math.sin(-g),b=c*Math.cos(-g),c=Math.exp(-a);
+return{ctype:"number",value:{real:-(q-c*Math.sin(g))/2,imag:(b-c*Math.cos(g))/2}}};m.tan=function(a){var g=m.sin(a);a=m.cos(a);return m.div(g,a)};m.arccos=function(a){var g=m.mult(a,m.neg(a)),g=m.sqrt(m.add(m.real(1),g));a=m.add(m.mult(a,m.complex(0,1)),g);a=m.add(m.mult(m.log(a),m.complex(0,1)),m.real(.5*Math.PI));return w.withUsage(a,"Angle")};m.arcsin=function(a){var g=m.mult(a,m.neg(a)),g=m.sqrt(m.add(m.real(1),g));a=m.add(m.mult(a,m.complex(0,1)),g);a=m.mult(m.log(a),m.complex(0,-1));return w.withUsage(a,
+"Angle")};m.arctan=function(a){var g=m.log(m.add(m.mult(a,m.complex(0,-1)),m.real(1)));a=m.log(m.add(m.mult(a,m.complex(0,1)),m.real(1)));g=m.mult(m.sub(g,a),m.complex(0,.5));return w.withUsage(g,"Angle")};m.arctan2=function(a,g){var c;if(void 0===g)c=m.real(Math.atan2(a.value.imag,a.value.real));else if(m._helper.isReal(a)&&m._helper.isReal(g))c=m.real(Math.atan2(g.value.real,a.value.real));else{c=m.add(a,m.mult(m.complex(0,1),g));var q=m.sqrt(m.add(m.mult(a,a),m.mult(g,g)));c=m.mult(m.complex(0,
+-1),m.log(m.div(c,q)))}return w.withUsage(c,"Angle")};m.sqrt=function(a){var g=a.value.real,c=a.value.imag;a=Math.sqrt(Math.sqrt(g*g+c*c));g=Math.atan2(c,g);return{ctype:"number",value:{real:a*Math.cos(g/2),imag:a*Math.sin(g/2)}}};m.powRealExponent=function(a,g){var c=a.value.real,q=a.value.imag,b=Math.pow(Math.sqrt(c*c+q*q),g),c=Math.atan2(q,c);return{ctype:"number",value:{real:b*Math.cos(c*g),imag:b*Math.sin(c*g)}}};m.log=function(a){var g=a.value.real;a=a.value.imag;var c=Math.sqrt(g*g+a*a),q=
+Math.atan2(a,g);0>a&&(q+=2*Math.PI);0===a&&0>g&&(q=Math.PI);q>Math.PI&&(q-=2*Math.PI);return m.snap({ctype:"number",value:{real:Math.log(c),imag:q}})};m.pow=function(a,g){return m._helper.isZero(g)?m.one:m._helper.isZero(a)?m.zero:m._helper.isReal(g)?m.powRealExponent(a,g.value.real):m.exp(m.mult(m.log(a),g))};m.mod=function(a,g){var c=a.value.real,q=g.value.real,b=a.value.imag,d=g.value.imag,c=c-Math.floor(c/q)*q,b=b-Math.floor(b/d)*d;0===q&&(c=0);0===d&&(b=0);return m.snap({ctype:"number",value:{real:c,
+imag:b}})};m._helper.seed="NO";m._helper.seedrandom=function(a){a-=Math.floor(a);m._helper.seed=.8*a+.1};m._helper.rand=function(){if("NO"===m._helper.seed)return Math.random();var a=m._helper.seed,a=1E3*Math.sin(1E3*a),a=a-Math.floor(a);return m._helper.seed=a};m._helper.randnormal=function(){var a=m._helper.rand(),g=m._helper.rand();return Math.sqrt(-2*Math.log(a))*Math.cos(2*Math.PI*g)};m._helper.isEqual=function(a,g){return a.value.real===g.value.real&&a.value.imag===g.value.imag};m._helper.isLessThan=
+function(a,g){return a.value.real<g.value.real||a.value.real===g.value.real&&a.value.imag<g.value.imag};m._helper.compare=function(a,g){return m._helper.isLessThan(a,g)?-1:m._helper.isEqual(a,g)?0:1};m._helper.isAlmostEqual=function(a,g,c){var q=m.eps;"undefined"!==typeof c&&(q=c);c=a.value.real-g.value.real;a=a.value.imag-g.value.imag;return c<q&&c>-q&&a<q&&a>-q};m._helper.isZero=function(a){return 0===a.value.real&&0===a.value.imag};m._helper.isAlmostZero=function(a){var g=a.value.real;a=a.value.imag;
+return g<m.eps&&g>-m.eps&&a<m.eps&&a>-m.eps};m._helper.isReal=function(a){return 0===a.value.imag};m._helper.isAlmostReal=function(a){a=a.value.imag;return a<m.epsbig&&a>-m.epsbig};m._helper.isNaN=function(a){return isNaN(a.value.real)||isNaN(a.value.imag)};m._helper.isFinite=function(a){return isFinite(a.value.real)&&isFinite(a.value.imag)};m._helper.isAlmostImag=function(a){a=a.value.real;return a<m.epsbig&&a>-m.epsbig};m._helper.z3a=m.complex(-.5,.5*Math.sqrt(3));m._helper.z3b=m.complex(-.5,-.5*
+Math.sqrt(3));m._helper.cub1={ctype:"list",value:[m.one,m.one,m.one]};m._helper.cub2={ctype:"list",value:[m._helper.z3a,m.one,m._helper.z3b]};m._helper.cub3={ctype:"list",value:[m._helper.z3b,m.one,m._helper.z3a]};m.solveCubic=function(a,g,c,q){a=m._helper.solveCubicHelper(a,g,c,q);return[h.scalproduct(m._helper.cub1,a),h.scalproduct(m._helper.cub2,a),h.scalproduct(m._helper.cub3,a)]};m._helper.solveCubicHelper=function(a,g,c,q){var b=a.value.real;a=a.value.imag;var d=g.value.real;g=g.value.imag;
+var e=c.value.real,f=c.value.imag,k=q.value.real,l=q.value.imag,n=b*e-a*f;c=b*f+a*e;q=4*n-(d*d-g*g);var p=4*c-2*d*g,r=b*d-a*g,t=b*g+a*d,v=q*e-p*f-18*(r*k-t*l),p=q*f+p*e-18*(r*l+t*k);q=27*(b*b-a*a);var u=54*a*b,w=q*k-u*l,x=q*l+u*k,y=d*d-g*g,A=2*d*g,z=y*d-A*g,B=y*g+A*d,C=w+4*z,u=x+4*B;q=27*(v*e-p*f+C*k-u*l);p=27*(v*f+p*e+C*l+u*k);C=Math.sqrt(Math.sqrt(q*q+p*p));u=Math.atan2(p,q);p=C*Math.sin(u/2);q=C*Math.cos(u/2);z=-2*z+9*(r*e-t*f)-w+(q*b-p*a);B=-2*B+9*(r*f+t*e)-x+(q*a+p*b);q=Math.exp(Math.log(Math.sqrt(z*
+z+B*B))/3);e=Math.atan2(B,z);u=q*Math.sin(e/3);p=q*Math.cos(e/3);q*=q;e*=2;n=2*y-6*n;c=2*A-6*c;A=-1.5874010519681996*(d*p-g*u);d=-1.5874010519681996*(d*u+g*p);g=1.2599210498948732*q*Math.cos(e/3);e=1.2599210498948732*q*Math.sin(e/3);q=4.762203155904599*(p*b-u*a);p=4.762203155904599*(p*a+u*b);b=q*q+p*p;u=(-n*p+c*q)/b;n=(n*q+c*p)/b;c=u;u=(-A*p+d*q)/b;A=(A*q+d*p)/b;d=u;u=(-g*p+e*q)/b;g=(g*q+e*p)/b;e=u;return h.turnIntoCSList([m.complex(n,c),m.complex(A,d),m.complex(g,e)])};var h={_helper:{},turnIntoCSList:function(a){return{ctype:"list",
+value:a}}};h.EMPTY=h.turnIntoCSList([]);h.asList=function(a){return"list"===a.ctype?a:"number"===a.ctype||"boolean"===a.ctype||"geo"===a.ctype?h.turnIntoCSList([a]):h.EMPTY};h.realVector=function(a){for(var g=[],c=0;c<a.length;c++)g[c]={ctype:"number",value:{real:a[c],imag:0}};return{ctype:"list",value:g}};h._helper.unitvector=function(a,g){var c=h.zerovector(a);c.value[Math.floor(g.value.real-1)]=m.real(1);return c};h.idMatrix=function(a){for(var g=h.zeromatrix(a,a),c=m.real(1),q=0;q<a.value.real;q++)g.value[q].value[q]=
+c;return g};h._helper.flippedidMatrix=function(a){for(var g=h.zeromatrix(a,a),c=m.real(1),q=0;q<a.value.real;q++)g.value[q].value[a.value.real-q-1]=c;return g};h.println=function(a){for(var g=[],c=0;c<a.value.length;c++)if("number"===a.value[c].ctype)g[c]=m.niceprint(a.value[c]);else if("list"===a.value[c].ctype)h.println(a.value[c]);else return k;"number"===a.value[0].ctype&&console.log(g)};h.matrix=function(a){return h.turnIntoCSList(a.map(h.turnIntoCSList))};h.realMatrix=function(a){for(var g=
+a.length,c=Array(g),q=0;q<g;q++)c[q]=h.realVector(a[q]);return h.turnIntoCSList(c)};h.ex=h.realVector([1,0,0]);h.ey=h.realVector([0,1,0]);h.ez=h.realVector([0,0,1]);h.linfty=h.realVector([0,0,1]);h.ii=h.turnIntoCSList([m.complex(1,0),m.complex(0,1),m.complex(0,0)]);h.jj=h.turnIntoCSList([m.complex(1,0),m.complex(0,-1),m.complex(0,0)]);h.fundDual=h.realMatrix([[1,0,0],[0,1,0],[0,0,0]]);h.fund=h.realMatrix([[0,0,0],[0,0,0],[0,0,1]]);h.sequence=function(a,g){for(var c=[],q=0,b=Math.round(a.value.real);b<
+Math.round(g.value.real)+1;b++)c[q]={ctype:"number",value:{real:b,imag:0}},q++;return{ctype:"list",value:c}};h.pairs=function(a){for(var g=[],c=0;c<a.value.length-1;c++)for(var q=c+1;q<a.value.length;q++)g.push({ctype:"list",value:[a.value[c],a.value[q]]});return{ctype:"list",value:g}};h.triples=function(a){for(var g=[],c=0;c<a.value.length-2;c++)for(var q=c+1;q<a.value.length-1;q++)for(var b=q+1;b<a.value.length;b++)g.push({ctype:"list",value:[a.value[c],a.value[q],a.value[b]]});return{ctype:"list",
+value:g}};h.cycle=function(a){for(var g=[],c=0;c<a.value.length-1;c++)g[c]={ctype:"list",value:[a.value[c],a.value[c+1]]};g.push({ctype:"list",value:[a.value[a.value.length-1],a.value[0]]});return{ctype:"list",value:g}};h.consecutive=function(a){for(var g=[],c=0;c<a.value.length-1;c++)g[c]={ctype:"list",value:[a.value[c],a.value[c+1]]};return{ctype:"list",value:g}};h.reverse=function(a){for(var g=Array(a.value.length),c=a.value.length-1,q=0;0<=c;c--,q++)g[q]=a.value[c];return{ctype:"list",value:g}};
+h.directproduct=function(a,g){for(var c=[],q=0;q<a.value.length;q++)for(var b=0;b<g.value.length;b++)c.push({ctype:"list",value:[a.value[q],g.value[b]]});return{ctype:"list",value:c}};h.concat=function(a,g){for(var c=[],q=0;q<a.value.length;q++)c.push(a.value[q]);for(q=0;q<g.value.length;q++)c.push(g.value[q]);return{ctype:"list",value:c}};h.prepend=function(a,g){var c=[];c[0]=a;for(var q=0;q<g.value.length;q++)c[q+1]=g.value[q];return{ctype:"list",value:c}};h.append=function(a,g){for(var c=[],q=
+0;q<a.value.length;q++)c[q]=a.value[q];c.push(g);return{ctype:"list",value:c}};h.contains=function(a,g){for(var c=0;c<a.value.length;c++)if(D.equals(a.value[c],g).value)return{ctype:"boolean",value:!0};return{ctype:"boolean",value:!1}};h.common=function(a,g){for(var c=[],q=0,b=0;b<a.value.length;b++){for(var d=!1,h=a.value[b],e=0;e<g.value.length;e++)d=d||D.equals(h,g.value[e]).value;d&&(c[q]=a.value[b],q++)}return{ctype:"list",value:c}};h.remove=function(a,g){for(var c=[],q=0,b=0;b<a.value.length;b++){for(var d=
+!1,h=a.value[b],e=0;e<g.value.length;e++)d=d||D.equals(h,g.value[e]).value;d||(c[q]=a.value[b],q++)}return{ctype:"list",value:c}};h.sort1=function(a){a=a.value.slice();a.sort(w.compare);return h.turnIntoCSList(a)};h._helper.isEqual=function(a,g){return h.equals(a,g).value};h._helper.isLessThan=function(a,g){for(var c=a.value.length,q=g.value.length,b=0;!(b>=c||b>=q)&&w.isEqual(a.value[b],g.value[b]);)b++;return b===c&&b<q?!0:b===q&&b<c||b===c&&b===q?!1:w.isLessThan(a.value[b],g.value[b])};h._helper.compare=
+function(a,g){return h._helper.isLessThan(a,g)?-1:h._helper.isEqual(a,g)?0:1};h.equals=function(a,g){if(a.value.length!==g.value.length)return{ctype:"boolean",value:!1};for(var c=!0,q=0;q<a.value.length;q++)var b=a.value[q],d=g.value[q],c="list"===b.ctype&&"list"===d.ctype?c&&h.equals(b,d).value:c&&vb([b,d],[]).value;return{ctype:"boolean",value:c}};h.almostequals=function(a,g){if(a.value.length!==g.value.length)return{ctype:"boolean",value:!1};for(var c=!0,q=0;q<a.value.length;q++)var b=a.value[q],
+d=g.value[q],c="list"===b.ctype&&"list"===d.ctype?c&&h.almostequals(b,d).value:c&&hc([b,d],[]).value;return{ctype:"boolean",value:c}};h._helper.isAlmostReal=function(a){for(var g=!0,c=0;c<a.value.length;c++)var q=a.value[c],g="list"===q.ctype?g&&h._helper.isAlmostReal(q):g&&m._helper.isAlmostReal(q);return g};h._helper.isAlmostZero=function(a){for(var g=0;g<a.value.length;g++){var c=a.value[g];if("list"===c.ctype){if(!h._helper.isAlmostZero(c))return!1}else if(!m._helper.isAlmostZero(c))return!1}return!0};
+h._helper.isNaN=function(a){for(var g=!1,c=0;c<a.value.length;c++)var q=a.value[c],g="list"===q.ctype?g||h._helper.isNaN(q):g||m._helper.isNaN(q);return g};h.set=function(a){var g=[],c=0;a=a.value.slice();a.sort(w.compare);for(var q=0;q<a.length;q++)0!==q&&vb([g[g.length-1],a[q]],[]).value||(g[c]=a[q],c++);return{ctype:"list",value:g}};h.maxval=function(a){for(var g=m.zero,c=0;c<a.value.length;c++){var q=a.value[c];"number"===q.ctype&&(g=m.argmax(g,q));"list"===q.ctype&&(g=m.argmax(g,h.maxval(q)))}return g};
+h.maxIndex=function(a,g,c){var q=0;void 0!==c&&(q=c);c=q;for(var b=g(a.value[q]).value.real;q<a.value.length;++q){var d=g(a.value[q]).value.real;d>b&&(c=q,b=d)}return c};h.normalizeMax=function(a){var g=m.inv(h.maxval(a));return m._helper.isFinite(g)?h.scalmult(g,a):a};h.normalizeZ=function(a){var g=m.inv(a.value[2]);return h.scalmult(g,a)};h.dehom=function(a){a=a.value.slice();var g=a.length-1,c=m.inv(a[g]);a.length=g;for(var q=0;q<g;++q)a[q]=m.mult(c,a[q]);return h.turnIntoCSList(a)};h.normalizeAbs=
+function(a){var g=m.inv(h.abs(a));return h.scalmult(g,a)};h.max=function(a,g){if(a.value.length!==g.value.length)return k;for(var c=[],q=0;q<a.value.length;q++)c[q]=w.max(a.value[q],g.value[q]);return{ctype:"list",value:c}};h.min=function(a,g){if(a.value.length!==g.value.length)return k;for(var c=[],q=0;q<a.value.length;q++)c[q]=w.min(a.value[q],g.value[q]);return{ctype:"list",value:c}};h.scaldiv=function(a,g){if("number"!==a.ctype)return k;for(var c=[],q=0;q<g.value.length;q++){var b=g.value[q];
+c[q]="number"===b.ctype?w.div(b,a):"list"===b.ctype?h.scaldiv(a,b):k}return{ctype:"list",value:c}};h.scalmult=function(a,g){if("number"!==a.ctype)return k;for(var c=[],q=0;q<g.value.length;q++){var b=g.value[q];c[q]="number"===b.ctype?w.mult(b,a):"list"===b.ctype?h.scalmult(a,b):k}return{ctype:"list",value:c}};h.add=function(a,g){if(a.value.length!==g.value.length)return k;for(var c=[],q=0;q<a.value.length;q++){var b=a.value[q],d=g.value[q];c[q]="number"===b.ctype&&"number"===d.ctype?w.add(b,d):"list"===
+b.ctype&&"list"===d.ctype?h.add(b,d):k}return{ctype:"list",value:c}};h.sub=function(a,g){if(a.value.length!==g.value.length)return k;for(var c=[],q=0;q<a.value.length;q++){var b=a.value[q],d=g.value[q];c[q]="number"===b.ctype&&"number"===d.ctype?m.sub(b,d):"list"===b.ctype&&"list"===d.ctype?h.sub(b,d):k}return{ctype:"list",value:c}};h.abs2=function(a){for(var g=0,c=0;c<a.value.length;c++){var q=a.value[c];if("number"===q.ctype)g+=m.abs2(q).value.real;else if("list"===q.ctype)g+=h.abs2(q).value.real;
+else return k}return{ctype:"number",value:{real:g,imag:0}}};h.abs=function(a){return m.sqrt(h.abs2(a))};h.normalizeMaxXX=function(a){for(var g=-1E4,c=m.real(1),q=0;q<a.value.length;q++){var b=m.abs(a.value[q]);b.value.real>g&&(c=a.value[q],g=b.value.real)}return h.scaldiv(c,a)};h.recursive=function(a,g){for(var c=[],q=0;q<a.value.length;q++){var b=B(a.value[q]);c[q]="number"===b.ctype?m[g](b):"list"===b.ctype?h[g](b):k}return{ctype:"list",value:c}};h.re=function(a){return h.recursive(a,"re")};h.neg=
+function(a){return h.recursive(a,"neg")};h.im=function(a){return h.recursive(a,"im")};h.conjugate=function(a){return h.recursive(a,"conjugate")};h.transjugate=function(a){return h.transpose(h.conjugate(a))};h.round=function(a){return h.recursive(a,"round")};h.ceil=function(a){return h.recursive(a,"ceil")};h.floor=function(a){return h.recursive(a,"floor")};h._helper.colNumb=function(a){if("list"!==a.ctype)return-1;for(var g=-1,c=0;c<a.value.length;c++){if("list"!==a.value[c].ctype)return-1;if(0===
+c)g=a.value[c].value.length;else if(g!==a.value[c].value.length)return-1}return g};h._helper.isNumberVecN=function(a,g){if("list"!==a.ctype||a.value.length!==g)return!1;for(var c=0;c<a.value.length;c++)if("number"!==a.value[c].ctype)return!1;return!0};h.isNumberVector=function(a){if("list"!==a.ctype)return{ctype:"boolean",value:!1};for(var g=0;g<a.value.length;g++)if("number"!==a.value[g].ctype)return{ctype:"boolean",value:!1};return{ctype:"boolean",value:!0}};h.isNumberVectorN=function(a,g){if("list"!==
+a.ctype)return{ctype:"boolean",value:!1};if(a.value)for(var c=0;c<a.value.length;c++)if("number"!==a.value[c].ctype)return{ctype:"boolean",value:!1};return{ctype:"boolean",value:!0}};h.isNumberMatrix=function(a){if(-1===h._helper.colNumb(a))return{ctype:"boolean",value:!1};for(var g=0;g<a.value.length;g++)if(!h.isNumberVector(a.value[g]).value)return{ctype:"boolean",value:!1};return{ctype:"boolean",value:!0}};h._helper.isNumberMatrixMN=function(a,g,c){return h.isNumberMatrix(a).value&&a.value.length===
+g&&a.value[0].value.length===c};h.scalproduct=function(a,g){if(a.value.length!==g.value.length)return k;for(var c={ctype:"number",value:{real:0,imag:0}},q=0;q<g.value.length;q++){var b=a.value[q],d=g.value[q];if("number"===b.ctype&&"number"===d.ctype)c=m.add(m.mult(b,d),c);else return k}return c};h.sesquilinearproduct=function(a,g){if(a.value.length!==g.value.length)return k;for(var c=0,q=0,b=0;b<g.value.length;b++)var d=a.value[b].value,h=g.value[b].value,c=c+(d.real*h.real+d.imag*h.imag),q=q+(d.real*
+h.imag-d.imag*h.real);return m.complex(c,q)};h.normSquared=function(a){for(var g=0,c=0;c<a.value.length;c++)var q=a.value[c].value,g=g+(q.real*q.real+q.imag*q.imag);return m.real(g)};h.productMV=function(a,g){if(a.value[0].value.length!==g.value.length)return k;for(var c=[],q=0;q<a.value.length;q++){for(var b={ctype:"number",value:{real:0,imag:0}},d=a.value[q],e=0;e<g.value.length;e++){var f=d.value[e],l=g.value[e];if("number"===f.ctype&&"number"===l.ctype)b=m.add(m.mult(f,l),b);else return k}c[q]=
+b}return h.turnIntoCSList(c)};h.productVM=function(a,g){if(a.value.length!==g.value.length)return k;for(var c=[],q=0;q<g.value[0].value.length;q++){for(var b={ctype:"number",value:{real:0,imag:0}},d=0;d<a.value.length;d++){var e=a.value[d],f=g.value[d].value[q];if("number"===e.ctype&&"number"===f.ctype)b=m.add(m.mult(e,f),b);else return k}c[q]=b}return h.turnIntoCSList(c)};h.productMM=function(a,g){if(a.value[0].value.length!==g.value.length)return k;for(var c=[],q=0;q<a.value.length;q++){var b=h.productVM(a.value[q],
+g);c[q]=b}return h.turnIntoCSList(c)};h.mult=function(a,g){return a.value.length===g.value.length&&h.isNumberVector(a).value&&h.isNumberVector(g).value?h.scalproduct(a,g):h.isNumberMatrix(a).value&&g.value.length===a.value[0].value.length&&h.isNumberVector(g).value?h.productMV(a,g):h.isNumberMatrix(g).value&&a.value.length===g.value.length&&h.isNumberVector(a).value?h.productVM(a,g):h.isNumberMatrix(a).value&&h.isNumberMatrix(g).value&&g.value.length===a.value[0].value.length?h.productMM(a,g):k};
+h.projectiveDistMinScal=function(a,g){var c=h.abs(a),q=h.abs(g);if(0===c.value.real||0===q.value.real)return 0;var b=h.conjugate(g),b=h.scalproduct(a,b),b=m._helper.isAlmostZero(b)?m.real(1):m.div(b,m.abs(b)),c=h.scaldiv(c,a),q=h.scaldiv(q,g),q=h.scalmult(b,q),b=h.abs(h.add(c,q)),q=h.abs(h.sub(c,q));return Math.min(b.value.real,q.value.real)};h.conicDist=function(a,g){var c=u(a),q=u(g);console.log(Z(c),Z(q));return h.projectiveDistMinScal(c,q)};h.crossOperator=function(a){var g=a.value[0],c=a.value[1];
+a=a.value[2];return h.turnIntoCSList([h.turnIntoCSList([m.zero,m.neg(a),c]),h.turnIntoCSList([a,m.zero,m.neg(g)]),h.turnIntoCSList([m.neg(c),g,m.zero])])};h.cross=function(a,g){var c=m.sub(m.mult(a.value[1],g.value[2]),m.mult(a.value[2],g.value[1])),q=m.sub(m.mult(a.value[2],g.value[0]),m.mult(a.value[0],g.value[2])),b=m.sub(m.mult(a.value[0],g.value[1]),m.mult(a.value[1],g.value[0]));return h.turnIntoCSList([c,q,b])};h.crossratio3harm=function(a,g,c,q,b){var d=h.det3(a,c,b),e=h.det3(g,q,b);a=h.det3(a,
+q,b);g=h.det3(g,c,b);d=m.mult(d,e);e=m.mult(a,g);return h.turnIntoCSList([d,e])};h.crossratio3=function(a,g,c,q,b){a=h.crossratio3harm(a,g,c,q,b);return m.div(a.value[0],a.value[1])};h.veronese=function(a){var g=m.mult(a.value[0],a.value[0]),c=m.mult(a.value[1],a.value[1]),q=m.mult(a.value[2],a.value[2]),b=m.mult(a.value[0],a.value[1]),d=m.mult(a.value[0],a.value[2]);a=m.mult(a.value[1],a.value[2]);return h.turnIntoSCList([g,c,q,b,d,a])};h.matrixFromVeronese=function(a){var g=a.value[0],c=a.value[1],
+q=a.value[2],b=m.realmult(.5,a.value[3]),d=m.realmult(.5,a.value[4]);a=m.realmult(.5,a.value[5]);return h.turnIntoCSList([h.turnIntoCSList([g,b,d]),h.turnIntoCSList([b,c,a]),h.turnIntoCSList([d,a,q])])};h.det2=function(a,g){var c=m.mult(a.value[0],g.value[1]);return c=m.sub(c,m.mult(a.value[1],g.value[0]))};h.det3=function(a,g,c){return m.complex(a.value[0].value.real*g.value[1].value.real*c.value[2].value.real-a.value[0].value.imag*g.value[1].value.imag*c.value[2].value.real-a.value[0].value.imag*
+g.value[1].value.real*c.value[2].value.imag-a.value[0].value.real*g.value[1].value.imag*c.value[2].value.imag+a.value[2].value.real*g.value[0].value.real*c.value[1].value.real-a.value[2].value.imag*g.value[0].value.imag*c.value[1].value.real-a.value[2].value.imag*g.value[0].value.real*c.value[1].value.imag-a.value[2].value.real*g.value[0].value.imag*c.value[1].value.imag+a.value[1].value.real*g.value[2].value.real*c.value[0].value.real-a.value[1].value.imag*g.value[2].value.imag*c.value[0].value.real-
+a.value[1].value.imag*g.value[2].value.real*c.value[0].value.imag-a.value[1].value.real*g.value[2].value.imag*c.value[0].value.imag-a.value[0].value.real*g.value[2].value.real*c.value[1].value.real+a.value[0].value.imag*g.value[2].value.imag*c.value[1].value.real+a.value[0].value.imag*g.value[2].value.real*c.value[1].value.imag+a.value[0].value.real*g.value[2].value.imag*c.value[1].value.imag-a.value[2].value.real*g.value[1].value.real*c.value[0].value.real+a.value[2].value.imag*g.value[1].value.imag*
+c.value[0].value.real+a.value[2].value.imag*g.value[1].value.real*c.value[0].value.imag+a.value[2].value.real*g.value[1].value.imag*c.value[0].value.imag-a.value[1].value.real*g.value[0].value.real*c.value[2].value.real+a.value[1].value.imag*g.value[0].value.imag*c.value[2].value.real+a.value[1].value.imag*g.value[0].value.real*c.value[2].value.imag+a.value[1].value.real*g.value[0].value.imag*c.value[2].value.imag,-a.value[0].value.imag*g.value[1].value.imag*c.value[2].value.imag+a.value[0].value.imag*
+g.value[1].value.real*c.value[2].value.real+a.value[0].value.real*g.value[1].value.real*c.value[2].value.imag+a.value[0].value.real*g.value[1].value.imag*c.value[2].value.real-a.value[2].value.imag*g.value[0].value.imag*c.value[1].value.imag+a.value[2].value.imag*g.value[0].value.real*c.value[1].value.real+a.value[2].value.real*g.value[0].value.real*c.value[1].value.imag+a.value[2].value.real*g.value[0].value.imag*c.value[1].value.real-a.value[1].value.imag*g.value[2].value.imag*c.value[0].value.imag+
+a.value[1].value.imag*g.value[2].value.real*c.value[0].value.real+a.value[1].value.real*g.value[2].value.real*c.value[0].value.imag+a.value[1].value.real*g.value[2].value.imag*c.value[0].value.real+a.value[0].value.imag*g.value[2].value.imag*c.value[1].value.imag-a.value[0].value.imag*g.value[2].value.real*c.value[1].value.real-a.value[0].value.real*g.value[2].value.real*c.value[1].value.imag-a.value[0].value.real*g.value[2].value.imag*c.value[1].value.real+a.value[2].value.imag*g.value[1].value.imag*
+c.value[0].value.imag-a.value[2].value.imag*g.value[1].value.real*c.value[0].value.real-a.value[2].value.real*g.value[1].value.real*c.value[0].value.imag-a.value[2].value.real*g.value[1].value.imag*c.value[0].value.real+a.value[1].value.imag*g.value[0].value.imag*c.value[2].value.imag-a.value[1].value.imag*g.value[0].value.real*c.value[2].value.real-a.value[1].value.real*g.value[0].value.real*c.value[2].value.imag-a.value[1].value.real*g.value[0].value.imag*c.value[2].value.real)};h.det4m=function(a){var g=
+a.value,c=g[0].value,q=c[0].value,b=+q.real,d=+q.imag,q=c[1].value,h=+q.real,e=+q.imag,q=c[2].value,f=+q.real,k=+q.imag,q=c[3].value,l=+q.real,n=+q.imag,c=g[1].value,q=c[0].value,p=+q.real,r=+q.imag,q=c[1].value,t=+q.real,v=+q.imag,q=c[2].value,u=+q.real,w=+q.imag,q=c[3].value,c=+q.real,q=+q.imag;a=b*t-d*v-h*p+e*r;var x=b*v+d*t-h*r-e*p,y=b*u-d*w-f*p+k*r,A=b*w+d*u-f*r-k*p,z=b*c-d*q-l*p+n*r,B=b*q+d*c-l*r-n*p,C=h*u-e*w-f*t+k*v,D=h*w+e*u-f*v-k*t,F=h*c-e*q-l*t+n*v,E=h*q+e*c-l*v-n*t,G=f*c-k*q-l*u+n*w,H=
+f*q+k*c-l*w-n*u,c=g[2].value,q=c[0].value,b=+q.real,d=+q.imag,q=c[1].value,h=+q.real,e=+q.imag,q=c[2].value,f=+q.real,k=+q.imag,q=c[3].value,l=+q.real,n=+q.imag,c=g[3].value,q=c[0].value,p=+q.real,r=+q.imag,q=c[1].value,t=+q.real,v=+q.imag,q=c[2].value,u=+q.real,w=+q.imag,q=c[3].value,c=+q.real,q=+q.imag,g=b*t-d*v-h*p+e*r,L=b*v+d*t-h*r-e*p,J=b*u-d*w-f*p+k*r,M=b*w+d*u-f*r-k*p,N=b*c-d*q-l*p+n*r,b=b*q+d*c-l*r-n*p,d=h*u-e*w-f*t+k*v,p=h*w+e*u-f*v-k*t,r=h*c-e*q-l*t+n*v,h=h*q+e*c-l*v-n*t,e=f*c-k*q-l*u+n*
+w,f=f*q+k*c-l*w-n*u;return m.complex(a*e-x*f-y*r+A*h+z*d-B*p+C*N-D*b-F*J+E*M+G*g-H*L,a*f+x*e-y*h-A*r+z*p+B*d+C*b+D*N-F*M-E*J+G*L+H*g)};h.eucangle=function(a,g){var c=h.cross(a,h.linfty),q=h.cross(g,h.linfty),b=h.det3(h.ez,c,h.ii),c=h.det3(h.ez,c,h.jj),d=h.det3(h.ez,q,h.ii),q=h.det3(h.ez,q,h.jj),b=m.div(m.mult(b,q),m.mult(d,c)),b=m.log(b);return b=m.mult(b,m.complex(0,.5))};h.zerovector=function(a){a=Math.floor(a.value.real);for(var g=Array(a),c=0;c<a;c++)g[c]=0;return h.realVector(g)};h.zeromatrix=
+function(a,g){for(var c=Math.floor(a.value.real),q=Array(c),b=0;b<c;b++)q[b]=h.zerovector(g);return h.turnIntoCSList(q)};h.vandermonde=function(a){for(var g=a.value.length,c=h.zeromatrix(g,g),q=0;q<g;q++)for(var b=0;b<g;b++)c.value[q].value[b]=m.pow(a.value[q],m.real(b-1));return c};h.transpose=function(a){for(var g=[],c=a.value[0].value.length,q=a.value.length,b=0;b<c;b++){for(var d=[],e=0;e<q;e++)d[e]=a.value[e].value[b];g[b]=h.turnIntoCSList(d)}return h.turnIntoCSList(g)};h.column=function(a,g){for(var c=
+[],q=a.value.length,b=Math.floor(g.value.real-1),d=0;d<q;d++)c[d]=a.value[d].value[b];return h.turnIntoCSList(c)};h.row=function(a,g){for(var c=[],q=a.value[0].value.length,b=Math.floor(g.value.real-1),d=0;d<q;d++)c[d]=a.value[b].value[d];return h.turnIntoCSList(c)};h.adjoint2=function(a){var g=a.value[0].value[0],c=a.value[1].value[0],q=Array(2);q[0]=h.turnIntoCSList([a.value[1].value[1],m.neg(a.value[0].value[1])]);q[1]=h.turnIntoCSList([m.neg(c),g]);return q=h.turnIntoCSList(q)};h.adjoint3=function(a){var g,
+c,q,b,d,h,e,f,m,k,l,n,p,r,t,v,u;g=a.value[0].value;c=g[0].value;q=c.real;b=c.imag;c=g[1].value;d=c.real;h=c.imag;c=g[2].value;e=c.real;f=c.imag;g=a.value[1].value;c=g[0].value;m=c.real;k=c.imag;c=g[1].value;l=c.real;n=c.imag;c=g[2].value;p=c.real;r=c.imag;g=a.value[2].value;c=g[0].value;a=c.real;t=c.imag;c=g[1].value;v=c.real;u=c.imag;c=g[2].value;g=c.real;c=c.imag;return{ctype:"list",value:[{ctype:"list",value:[{ctype:"number",value:{real:l*g-p*v-n*c+r*u,imag:l*c-p*u-v*r+g*n}},{ctype:"number",value:{real:-d*
+g+e*v+h*c-f*u,imag:-d*c+e*u+v*f-g*h}},{ctype:"number",value:{real:d*p-e*l-h*r+f*n,imag:d*r-e*n-l*f+p*h}}]},{ctype:"list",value:[{ctype:"number",value:{real:-m*g+p*a+k*c-r*t,imag:-m*c+p*t+a*r-g*k}},{ctype:"number",value:{real:q*g-e*a-b*c+f*t,imag:q*c-e*t-a*f+g*b}},{ctype:"number",value:{real:-q*p+e*m+b*r-f*k,imag:-q*r+e*k+m*f-p*b}}]},{ctype:"list",value:[{ctype:"number",value:{real:m*v-l*a-k*u+n*t,imag:m*u-l*t-a*n+v*k}},{ctype:"number",value:{real:-q*v+d*a+b*u-h*t,imag:-q*u+d*t+a*h-v*b}},{ctype:"number",
+value:{real:q*l-d*m-b*n+h*k,imag:q*n-d*k-m*h+l*b}}]}]}};h.inverse=function(a){var g=a.value.length;if(g!==a.value[0].value.length)return console.log("Inverse works only for square matrices"),k;if(2===g)return h.scaldiv(h.det(a),h.adjoint2(a));if(3===g)return h.scaldiv(h.det(a),h.adjoint3(a));g=h.LUdecomp(a);a=a.value.length;var c=m.real(0),q=m.real(1),b=h.zerovector(m.real(a));b.value[0]=q;for(var d=Array(a),e=0;e<a;e++)d[e]=h._helper.LUsolve(g,b),b.value[e]=c,b.value[e+1]=q;d=h.turnIntoCSList(d);
+return d=h.transpose(d)};h.linearsolve=function(a,g){return 2===a.value.length?h.linearsolveCramer2(a,g):3===a.value.length?h.linearsolveCramer3(a,g):h.LUsolve(a,g)};h.getDiag=function(a){if(a.value.length!==a.value[0].value.length)return k;for(var g=Array(a.value.length),c=0;c<a.value.length;c++)g[c]=a.value[c].value[c];return h.turnIntoCSList(g)};h.getSubDiag=function(a){if(a.value.length!==a.value[0].value.length)return k;for(var g=Array(a.value.length-1),c=0;c<a.value.length-1;c++)g[c]=a.value[c+
+1].value[c];return h.turnIntoCSList(g)};h.eig2=function(a){var g=m.add(a.value[0].value[0],a.value[1].value[1]);a=h.det2(a.value[0],a.value[1]);var c=m.mult(g,g),b=g=m.mult(g,m.real(.5));a=m.sqrt(m.sub(m.div(c,m.real(4)),a));g=m.add(g,a);b=m.sub(b,a);return h.turnIntoCSList([g,b])};h.eig=function(a,g){var c=g||!0,b=a,d=m.real(b.value.length),e=d.value.real;m.real(0);var b=h._helper.QRIteration(b)[0],b=h.getDiag(b),b=h.sort1(b),d=h.idMatrix(d,d),f=Array(e),f=h.turnIntoCSList(f);if(c){for(var k,l,n,
+p=0,r=!1,c=0;c<e;c++)r?l=k.value[p]:(k=b.value[c],k=h.sub(a,h.scalmult(k,d)),k=h.nullSpace(k),l=k.value[0],void 0!==l&&(n=l)),void 0===l&&(l=n),1E-8>h.abs(l).value.real&&0===p&&(l=h._helper.inverseIteration(a,b.value[c])),f.value[c]=h._helper.isAlmostZeroVec(l)?l:h.scaldiv(h.abs(l),l),c<e-1&&((r=1E-6>m.abs(m.sub(b.value[c],b.value[c+1])).value.real)?p++:p=0);f=h.transpose(f)}return h.turnIntoCSList([b,f])};h._helper.isNormalMatrix=function(a){return 1E-10>h.abs(h.sub(a,h.transjugate(a))).value.real};
+h._helper.QRIteration=function(a,g){var c,b=a;c=m.real(b.value.length);var d=c.value.real,e=c.value.real;m.real(0);var f;h.idMatrix(c,c);var k=h.zeromatrix(c,c),l=h.idMatrix(c,c),n=g?g:2500,p,r,t,v=0,u=Array(e);for(c=0;c<n;c++){f=h._helper.getBlock(b,[e-2,e-1],[e-2,e-1]);p=h.eig2(f);f=p.value[0];p=p.value[1];h.abs(f);h.abs(p);r=b.value[e-1].value[e-1];t=m.abs(m.sub(r,f)).value.real;r=m.abs(m.sub(r,p)).value.real;p=t<r?f:p;f=h.idMatrix(m.real(e),m.real(e));p=h.scalmult(p,f);f=h.QRdecomp(h.sub(b,p));
+b=w.mult(f.R,f.Q);b=h.add(b,p);f.Q=h._helper.buildBlockMatrix(f.Q,h.idMatrix(m.real(v),m.real(v)));l=w.mult(l,f.Q);if(1E-48>m.abs2(b.value[b.value.length-1].value[b.value[0].value.length-2]).value.real&&1<e){u[d-v-1]=b.value[e-1].value[e-1];for(c=0;c<e;c++)k.value[e-1].value[c]=b.value[e-1].value[c],k.value[c].value[e-1]=b.value[c].value[e-1];b=h._helper.getBlock(b,[0,e-2],[0,e-2]);v++;e--}if(1===e){k.value[0].value[0]=b.value[0].value[0];break}if(h._helper.isUpperTriangular(b)){for(c=0;c<e;c++)k.value[c].value[c]=
+b.value[c].value[c];break}}return[k,l]};h.rank=function(a,g){return h.RRQRdecomp(a,g).rank};h._helper.isAlmostZeroVec=function(a){for(var g=a.value.length,c=0;c<g;c++)if(!m._helper.isAlmostZero(a.value[c]))return!1;return!0};h._helper.isLowerTriangular=function(a){for(var g=a.value.length,c=a.value[0].value.length,b=0;b<g;b++)for(var d=b+1;d<c;d++)if(!m._helper.isAlmostZero(a.value[b].value[d]))return!1;return!0};h._helper.isUpperTriangular=function(a){return h._helper.isLowerTriangular(h.transpose(a))};
+h._helper.isAlmostId=function(a){var g=a.value.length,c=m.real(g);if(g!==a.value[0].value.length)return!1;a=h.sub(a,h.idMatrix(c),c);for(c=0;c<g;c++)for(var b=0;b<g;b++)if(1E-16<m.abs(a.value[c].value[b]).value.real)return!1;return!0};h.nullSpace=function(a,g){var c=a.value.length,b=h.RRQRdecomp(h.transjugate(a),g),d=h.transpose(b.Q),b=c-b.rank.value.real,e=Array(b);d.value.reverse();for(var f,k=0;k<b;k++)f=d.value[k],e[k]=h.scaldiv(h.abs(f),f);e=h.turnIntoCSList(e);return 0<e.value.length?e:h.turnIntoCSList([h.zerovector(m.real(c))])};
+h._helper.isAlmostDiagonal=function(a){var g=a.value.length;m.real(g);m.real(0);if(g!==a.value[0].value.length)return!1;for(var c=0;c<g;c++)for(var b=0;b<g;b++)if(c!==b&&1E-16<m.abs(a.value[c].value[b]).value.real)return!1;return!0};h._helper.inverseIteration=function(a,g){console.log("warning: code untested");for(var c=a.value.length,b=Array(c),d=0;d<c;d++)b[d]=2*Math.random()-.5;for(var b=h.realVector(b),c=h.idMatrix(m.real(c),m.real(c)),d=m.add(g,m.real(.1*Math.random()-.5)),e=0;100>e;e++)b=h.scaldiv(h.abs(b),
+b),b=h.LUsolve(h.sub(a,h.scalmult(d,c)),JSON.parse(JSON.stringify(b)));return h.scaldiv(h.abs(b),b)};h._helper.toHessenberg=function(a){var g=JSON.parse(JSON.stringify(a)),c=g.value.length,b=m.real(c-1),d=m.real(c);m.real(1);if(h._helper.isUpperTriangular(g))return[h.idMatrix(b,b),a];var e;a=h.idMatrix(d,d);for(var f,d=1;d<c-1;d++)e=h.column(g,m.real(d)),e.value=e.value.splice(d),f=h.abs2(e).value.real,1E-16<f&&(e=h._helper.getHouseHolder(e),a=w.mult(a,e),g=w.mult(w.mult(e,g),e)),b.value.real--;return[a,
+g]};h._helper.swapEl=function(a,g,c){var b;"[object Array]"===Object.prototype.toString.call(a)?(b=a[g],a[g]=a[c],a[c]=b):"list"===a.ctype&&(b=a.value[g],a.value[g]=a.value[c],a.value[c]=b)};h.RRQRdecomp=function(a,g){var c=Math.sqrt(m.eps);void 0!==g&&(c=.1*g.value.real);var c=c*c,b,d=a.value.length,e=m.real(d),f=m.real(1),k=h._helper.unitvector(m.real(a.value.length),f),l=h.idMatrix(e,e),n=JSON.parse(JSON.stringify(a)),p=h.transpose(a),r=Array(d);for(b=0;b<d;b++)r[b]=h.abs2(p.value[b]);r=h.turnIntoCSList(r);
+p=Array(d);for(b=0;b<d;b++)p[b]=b;b=h.maxIndex(r,m.abs);for(var t=r.value[b],v=0,u=0;1E-16<m.abs2(t).value.real;u++){v++;h._helper.swapColumn(n,u,b);h._helper.swapEl(r,u,b);h._helper.swapEl(p,u,b);b=h._helper.getBlock(n,[u],[u]);b=h.column(b,f);t=h.abs2(b).value.real;1E-8<t&&(b=h._helper.getHouseHolder(b),b=h._helper.buildBlockMatrix(h.idMatrix(m.real(u),m.real(u)),b),l=w.mult(l,h.transjugate(b)),n=w.mult(b,n));for(b=u+1;b<d;b++)r.value[b]=m.sub(r.value[b],m.mult(n.value[u].value[b],m.conjugate(n.value[u].value[b])));
+b=h.maxIndex(r,m.abs2,u+1);t=r.value[b];if(u+2===d){m.abs(t).value.real>c&&v++;break}e=m.sub(e,f);k.value=k.value.splice(0,k.value.length-1)}return{Q:l,R:n,P:h.turnIntoCSList(p),rank:m.real(v)}};h._helper.getHouseHolder=function(a){var g=m.real(a.value.length);if(1E-16>h.abs2(a))return h.idMatrix(g,g);var c,b=m.real(1),d=h._helper.unitvector(m.real(a.value.length),b);c=h._helper.QRgetAlpha(a,0);c=h.sub(a,h.scalmult(c,d));c=h.scaldiv(h.abs(c),c);a=m.div(h.sesquilinearproduct(a,c),h.sesquilinearproduct(c,
+a));g=h.idMatrix(g,g);return g=h.sub(g,h.scalmult(m.add(b,a),h._helper.transposeMult(c,h.conjugate(c))))};h._helper.reOrderbyPivots=function(a,g){for(var c=a.value.length.length,b=h.transpose(a),c=Array(c),d=0;d<g.length;d++)c[g[d]]=b.value[d];c=h.turnIntoCSList(c);return h.transpose(c)};h.QRdecomp=function(a){var g,c=a.value.length,b=m.real(c);if(h._helper.isUpperTriangular(a))return{Q:h.idMatrix(b,b),R:a};var d=m.real(1),e=h._helper.unitvector(m.real(a.value.length),d),f,k=h.idMatrix(b,b);a=JSON.parse(JSON.stringify(a));
+for(var l=0;;l++){g=h._helper.getBlock(a,[l],[l]);g=h.column(g,d);f=h.abs2(g).value.real;1E-8<f&&(g=h._helper.getHouseHolder(g),g=h._helper.buildBlockMatrix(h.idMatrix(m.real(l),m.real(l)),g),k=w.mult(k,h.transjugate(g)),a=w.mult(g,a));if(l+2===c)break;b=m.sub(b,d);e.value=e.value.splice(0,e.value.length-1)}return{Q:k,R:a}};h._helper.swapColumn=function(a,g,c){for(var b,d=0;d<a.value.length;d++)b=a.value[d].value[g],a.value[d].value[g]=a.value[d].value[c],a.value[d].value[c]=b};h._helper.buildBlockMatrix=
+function(a,g){if(0===a.value.length)return g;if(0===g.value.length)return a;for(var c=a.value.length,b=a.value[0].value.length,d=b+g.value[0].value.length,d=h.zeromatrix(m.real(c+g.value.length),m.real(d)),e=0;e<a.value.length;e++)for(var f=0;f<a.value[0].value.length;f++)d.value[e].value[f]=a.value[e].value[f];for(e=0;e<g.value.length;e++)for(f=0;f<g.value[0].value.length;f++)d.value[c+e].value[b+f]=g.value[e].value[f];return d};h._helper.getBlock=function(a,g,c){a=JSON.parse(JSON.stringify(a));
+var b=g[0],d=c[0];g=void 0===g[1]?a.value.length:g[1];c=void 0===c[1]?a.value[0].value.length:c[1];g++;c++;a.value=a.value.slice(b,g);for(b=0;b<a.value.length;b++)a.value[b].value=a.value[b].value.slice(d,c);return a};h._helper.setBlock=function(a,g,c){a=JSON.parse(JSON.stringify(a));var b=c[0];c=c[1];for(var d=g.value.length,h=g.value[0].value.length,e=0;e<d;e++)for(var f=0;f<h;f++)a.value[b+e].value[c+f]=g.value[e].value[f];return a};h._helper.transposeMult=function(a,g){if(a.value.length!==g.value.length)return k;
+for(var c=a.value.length,b=Array(c),d=0;d<c;d++)b[d]=h.scalmult(a.value[d],g);return h.turnIntoCSList(b)};h._helper.QRgetAlpha=function(a,g){return 0>a.value[g].value.real?h.abs(a):m.neg(h.abs(a))};h.LUdecomp=function(a){a=JSON.parse(JSON.stringify(a));var g,c,b,d,h,e=0,f,k=a.value.length,l=k-1,n=Array(k);for(b=0;b<k;++b){h=b;d=a.value[b];f=m.abs(d.value[b]).value.real;for(c=b+1;c<k;++c)g=m.abs(a.value[c].value[b]),f<g.value.real&&(f=g.value.real,h=c);f<m.eps&&console.log("Warning: singular matrix!");
+n[b]=h;h!==b&&(a.value[b]=a.value[h],a.value[h]=d,d=a.value[b],e++);c=d.value[b];for(g=b+1;g<k;++g)a.value[g].value[b]=m.div(a.value[g].value[b],c);for(g=b+1;g<k;++g){h=a.value[g];for(c=b+1;c<l;++c)h.value[c]=m.sub(h.value[c],m.mult(h.value[b],d.value[c])),++c,h.value[c]=m.sub(h.value[c],m.mult(h.value[b],d.value[c]));c===l&&(h.value[c]=m.sub(h.value[c],m.mult(h.value[b],d.value[c])))}}return{LU:a,P:n,TransPos:e}};h.LUsolve=function(a,g){var c=h.LUdecomp(a);return h._helper.LUsolve(c,g)};h._helper.LUsolve=
+function(a,g){var c=JSON.parse(JSON.stringify(g)),b,d=a.LU,h=d.value.length,e=JSON.parse(JSON.stringify(c)),f=a.P,k;for(b=h-1;-1!==b;--b)e.value[b]=c.value[b];for(b=0;b<h;++b)for(c=f[b],f[b]!==b&&(k=e.value[b],e.value[b]=e.value[c],e.value[c]=k),k=d.value[b],c=0;c<b;++c)e.value[b]=m.sub(e.value[b],m.mult(e.value[c],k.value[c]));for(b=h-1;0<=b;--b){k=d.value[b];for(c=b+1;c<h;++c)e.value[b]=m.sub(e.value[b],m.mult(e.value[c],k.value[c]));e.value[b]=m.div(e.value[b],k.value[b])}return e};h.linearsolveCramer2=
+function(a,g){var c=h.column(a,m.real(1)),b=h.column(a,m.real(2)),d=h.det2(c,b);m._helper.isZero(d)&&console.log("A is not regular!");b=h.det2(g,b);b=m.div(b,d);c=h.det2(c,g);c=m.div(c,d);return h.turnIntoCSList([b,c])};h.linearsolveCramer3=function(a,g){var c=h.column(a,m.real(1)),b=h.column(a,m.real(2)),d=h.column(a,m.real(3)),e=h.det3(c,b,d);m._helper.isZero(e)&&console.log("A is not regular!");var f=h.det3(g,b,d),d=h.det3(c,g,d),c=h.det3(c,b,g),f=h.turnIntoCSList([f,d,c]);return f=h.scaldiv(e,
+f)};h.linearsolveCGNR=function(a,g){var c=h.transpose(a),b=w.mult(c,a),c=w.mult(c,g);return h.linearsolveCG(b,c)};h.linearsolveCG=function(a,g){var c,b,d,e,f,k;e=g;b=c=h.sub(g,w.mult(a,g));for(var l=Math.ceil(1.2*a.value.length),n=0;n<l;){n++;f=w.mult(a,b);k=d=h.scalproduct(c,c);d=m.div(d,h.scalproduct(b,f));e=h.add(e,w.mult(d,b));c=h.sub(c,w.mult(d,f));if(h.abs(c).value.real<m.eps)break;d=h.scalproduct(c,c);d=m.div(d,k);b=h.add(c,w.mult(d,b))}n>=l&&console.log("CG did not converge");return e};h.det=
+function(a){if(1===a.value.length)return a.value[0].value[0];if(2===a.value.length)return h.det2(a.value[0],a.value[1]);if(3===a.value.length)return h.det3(a.value[0],a.value[1],a.value[2]);if(4===a.value.length)return h.det4m(a);var g=a.value.length,c=m.real(1),b,d,e=JSON.parse(JSON.stringify(a)),f,k,l,n;for(a=0;a<g-1;a++){d=a;for(b=a+1;b<g;b++)m.abs(e.value[b].value[a]).value.real>m.abs(e.value[d].value[a]).value.real&&(d=b);d!==a&&(b=e.value[d],e.value[d]=e.value[a],e.value[a]=b,c=m.neg(c));f=
+e.value[a];for(b=a+1;b<g;b++){k=e.value[b];l=m.div(k.value[a],f.value[a]);for(d=a+1;d<g-1;d+=2)n=d+1,k.value[d]=m.sub(k.value[d],m.mult(f.value[d],l)),k.value[n]=m.sub(k.value[n],m.mult(f.value[n],l));d!==g&&(k.value[d]=m.sub(k.value[d],m.mult(f.value[d],l)))}if(m._helper.isZero(f.value[a]))return m.real(0);c=m.mult(c,f.value[a])}return m.mult(c,e.value[a].value[a])};h.LUdet=function(a){a=h.LUdecomp(a);for(var g=a.LU,c=g.value.length,b=g.value[0].value[0],d=1;d<c;d++)b=m.mult(b,g.value[d].value[d]);
+1===a.TransPos%2&&(b=m.neg(b));return b};h.getField=function(a,g){var c;if("homog"===g){if(h._helper.isNumberVecN(a,3))return a;if(h._helper.isNumberVecN(a,2))return h.turnIntoCSList([a.value[0],a.value[1],m.real(1)])}if("xy"===g){if(h._helper.isNumberVecN(a,2))return a;if(h._helper.isNumberVecN(a,3))return h.turnIntoCSList([m.div(a.value[0],a.value[2]),m.div(a.value[1],a.value[2])])}if("x"===g&&h.isNumberVector(a)){c=a.value.length;if(0<c&&3!==c)return a.value[0];if(3===c)return"Point"===a.usage?
+m.div(a.value[0],a.value[2]):a.value[0]}if("y"===g&&h.isNumberVector(a)){c=a.value.length;if(1<c&&3!==c)return a.value[1];if(3===c)return"Point"===a.usage?m.div(a.value[1],a.value[2]):a.value[1]}return"z"===g&&h.isNumberVector(a)&&(c=a.value.length,2<c)?a.value[2]:k};h.nil=h.turnIntoCSList([]);h.ofGeos=function(a){return h.turnIntoCSList(a.map(function(a){return{ctype:"geo",value:a}}))};var Na={key:function(a){if("string"===a.ctype)return"s"+a.value.length+":"+a.value+";";if("number"===a.ctype)return"n"+
+a.value.real+","+a.value.imag+";";if("list"===a.ctype)return"l"+a.value.length+":"+a.value.map(Na.key).join(",")+";";if("boolean"===a.ctype)return"b"+a.value+";";if("dict"===a.ctype)return a=Object.keys(a.value).sort(),"d"+a.length+":"+a.join(",")+";";"undefined"!==a.ctype&&wa.err("Bad dictionary key: "+Z(a));return"undef"},create:function(){return{ctype:"dict",value:{}}},clone:function(a){var g=Na.create(),c;for(c in a.value)a.value.hasOwnProperty(c)&&(g.value[c]=a.value[c]);return g},put:function(a,
+g,c){a.value[Na.key(g)]={key:g,value:c}},get:function(a,g,c){return(a=a.value[Na.key(g)])?a.value:c},niceprint:function(a){return"{"+Object.keys(a.value).sort().map(function(g){g=a.value[g];return Z(g.key)+":"+Z(g.value)}).join(", ")+"}"}},w={_helper:{},order:{undefined:0,"boolean":1,number:2,term:3,atomic:4,variable:5,geo:6,string:7,list:8},string:function(a){return{ctype:"string",value:a}},bool:function(a){return{ctype:"boolean",value:a}},not:function(a){return w.bool(!a.value)},isLessThan:function(a,
+g){return-1===w.compare(a,g)},isEqual:function(a,g){return 0===w.compare(a,g)},compareResults:function(a,g){return w.compare(a.result,g.result)},compare:function(a,g){if(a.ctype!==g.ctype)return w.order[a.ctype]-w.order[g.ctype];if("number"===a.ctype)return m._helper.compare(a,g);if("list"===a.ctype)return h._helper.compare(a,g);if("geo"===a.ctype)return a.value.name===g.value.name?0:a.value.name<g.value.name?-1:1;if("string"===a.ctype)return a.value===g.value?0:a.value<g.value?-1:1;if("boolean"===
+a.ctype)return a.value===g.value?0:!1===a.value?-1:1},add:function(a,g){return"void"===a.ctype&&"number"===g.ctype||"void"===a.ctype&&"list"===g.ctype?g:"number"===a.ctype&&"number"===g.ctype?m.add(a,g):"string"===a.ctype||"string"===g.ctype?{ctype:"string",value:Z(a)+Z(g)}:"list"===a.ctype&&"list"===g.ctype?h.add(a,g):k},sub:function(a,g){return"void"===a.ctype&&"number"===g.ctype?m.neg(g):"void"===a.ctype&&"list"===g.ctype?h.neg(g):"number"===a.ctype&&"number"===g.ctype?m.sub(a,g):"list"===a.ctype&&
+"list"===g.ctype?h.sub(a,g):k},mult:function(a,g){return"number"===a.ctype&&"number"===g.ctype?m.mult(a,g):"number"===a.ctype&&"list"===g.ctype?h.scalmult(a,g):"list"===a.ctype&&"number"===g.ctype?h.scalmult(g,a):"list"===a.ctype&&"list"===g.ctype?h.mult(a,g):k},div:function(a,g){return"number"===a.ctype&&"number"===g.ctype?m.div(a,g):"list"===a.ctype&&"number"===g.ctype?h.scaldiv(g,a):k},max:function(a,g){return"number"===a.ctype&&"number"===g.ctype?m.max(a,g):"list"===a.ctype&&"list"===g.ctype?
+h.max(a,g):k},min:function(a,g){return"number"===a.ctype&&"number"===g.ctype?m.min(a,g):"list"===a.ctype&&"list"===g.ctype?h.min(a,g):k},wrap:function(a){if("number"===typeof a)return m.real(a);if("object"===typeof a&&void 0!==a.length){for(var g=[],c=0;c<a.length;c++)g[c]=w.wrap(a[c]);return h.turnIntoCSList(g)}return"string"===typeof a?{ctype:"string",value:a}:"boolean"===typeof a?{ctype:"boolean",value:a}:k},unwrap:function(a){if("object"!==typeof a||null===a)return a;if(Array.isArray(a))return a.map(w.unwrap);
+switch(a.ctype){case "string":case "boolean":return a.value;case "number":return 0===a.value.imag?a.value.real:{r:a.value.real,i:a.value.imag};case "list":return a.value.map(w.unwrap);default:return null}},withUsage:function(a,g){return{ctype:a.ctype,value:a.value,usage:g}},wrapJSON:function(a){switch(typeof a){case "number":return m.real(a);case "string":return w.string(a);case "boolean":return w.bool(a);case "object":if(null===a)return k;if(Array.isArray(a))return h.turnIntoCSList(a.map(w.wrapJSON));
+var g=Na.create(),c;for(c in a)Na.put(g,w.string(c),w.wrapJSON(a[c]));return g;default:return console.log("Failed to convert "+typeof a+" to CindyJS data type"),k}},identity:function(a){return a},deeplyEqual:function(a,g){if("object"!==typeof a||"object"!==typeof g||null===a||null===g)return a===g;var c=0,b;for(b in a)if(++c,!(b in g&&w.deeplyEqual(a[b],g[b])))return!1;for(b in g)--c;return 0===c},DeepCloneJSON:function(a){var g,c,b;g=Array.isArray(a)?[]:{};for(b in a)c=a[b],g[b]="object"===typeof c&&
+null!==c?w.DeepCloneJSON(c):c;return g}},db={},Q={};Q[":"]=C(":");Q["\u00b0"]=function(a,g){var c=B(a[0]);return"number"===c.ctype&&"void"===a[1].ctype?w.withUsage(m.realmult(Math.PI/180,c),"Angle"):k};Q._=vc;Q["^"]=Uc;Q["\u221a"]=function(a,g){return"void"===a[0].ctype?t.sqrt$1([a[1]],g):k};Q["*"]=Sc;Q["\u00d7"]=$c;Q["/"]=Tc;Q["+"]=Rc;Q["-"]=jc;Q["!"]=function(a,g){var c=B(a[1]);return"void"===a[0].ctype&&"boolean"===c.ctype?{ctype:"boolean",value:!c.value}:k};Q["=="]=vb;Q["~="]=hc;Q["~<"]=function(a,
+g){var c=B(a[0]),b=B(a[1]);return"number"===c.ctype&&"number"===b.ctype&&m._helper.isAlmostReal(c)&&m._helper.isAlmostReal(b)?{ctype:"boolean",value:c.value.real-b.value.real<=-m.eps}:k};Q["~>"]=function(a,g){var c=B(a[0]),b=B(a[1]);return"number"===c.ctype&&"number"===b.ctype&&m._helper.isAlmostReal(c)&&m._helper.isAlmostReal(b)?{ctype:"boolean",value:c.value.real-b.value.real>=m.eps}:k};Q["=:="]=C("=:=");Q[">="]=function(a,g){var c=B(a[0]),b=B(a[1]);return"number"===c.ctype&&"number"===b.ctype&&
+m._helper.isAlmostReal(c)&&m._helper.isAlmostReal(b)?{ctype:"boolean",value:c.value.real>=b.value.real}:"string"===c.ctype&&"string"===b.ctype?{ctype:"boolean",value:c.value>=b.value}:k};Q["<="]=function(a,g){var c=B(a[0]),b=B(a[1]);return"number"===c.ctype&&"number"===b.ctype&&m._helper.isAlmostReal(c)&&m._helper.isAlmostReal(b)?{ctype:"boolean",value:c.value.real<=b.value.real}:"string"===c.ctype&&"string"===b.ctype?{ctype:"boolean",value:c.value<=b.value}:k};Q["~>="]=function(a,g){var c=B(a[0]),
+b=B(a[1]);return"number"===c.ctype&&"number"===b.ctype&&m._helper.isAlmostReal(c)&&m._helper.isAlmostReal(b)?{ctype:"boolean",value:c.value.real-b.value.real>-m.eps}:k};Q["~<="]=function(a,g){var c=B(a[0]),b=B(a[1]);return"number"===c.ctype&&"number"===b.ctype&&m._helper.isAlmostReal(c)&&m._helper.isAlmostReal(b)?{ctype:"boolean",value:c.value.real-b.value.real<m.eps}:k};Q[">"]=function(a,g){var c=B(a[0]),b=B(a[1]);return"number"===c.ctype&&"number"===b.ctype&&m._helper.isAlmostReal(c)&&m._helper.isAlmostReal(b)?
+{ctype:"boolean",value:c.value.real>b.value.real}:"string"===c.ctype&&"string"===b.ctype?{ctype:"boolean",value:c.value>b.value}:k};Q["<"]=function(a,g){var c=B(a[0]),b=B(a[1]);return"number"===c.ctype&&"number"===b.ctype&&m._helper.isAlmostReal(c)&&m._helper.isAlmostReal(b)?{ctype:"boolean",value:c.value.real<b.value.real}:"string"===c.ctype&&"string"===b.ctype?{ctype:"boolean",value:c.value<b.value}:k};Q["<>"]=Oc;Q["\u2208"]=function(a,g){var c=z(a[0]),b=z(a[1]);return"list"===b.ctype?h.contains(b,
+c):k};Q["\u2209"]=function(a,g){var c=z(a[0]),b=z(a[1]);return"list"===b.ctype?w.not(h.contains(b,c)):k};Q["&"]=Pc;Q["%"]=Qc;Q["!="]=Oc;Q["~!="]=function(a,g){return w.not(hc(a,g))};Q[".."]=function(a,g){var c=z(a[0]),b=z(a[1]);return"number"===c.ctype&&"number"===b.ctype?h.sequence(c,b):k};Q["++"]=ad;Q["--"]=cd;Q["~~"]=bd;Q[":>"]=dd;Q["<:"]=ed;Q["="]=ab;Q[":="]=function(a,g,c){g="undefined"===a[1].ctype;if("undefined"===a[0].ctype||g)return k;if("function"===a[0].ctype){g=a[0].oper;var b=a[0].args,
+d=a[1],h=1;if(db.hasOwnProperty(g)){h=db[g];if(h.definer===c)return k;h=h.generation+1}db[g]={oper:g,body:d,arglist:b,definer:c,generation:h}}"variable"===a[0].ctype&&J.setvar(a[0].name,a[1]);return k};Q[":=_"]=function(a,g){if("void"!==a[1].ctype)return k;"function"===a[0].ctype&&delete db[a[0].oper];return k};Q["::="]=C("::=");Q[";"]=function(a,g){var c="void"===a[0].ctype,b="void"===a[1].ctype;if(c&&b)return k;if(!c&&b)return z(a[0]);c||b||z(a[0]);return b?k:z(a[1])};var t={},D={evaluate:function(a,
+g,c){if(db.hasOwnProperty(a)){a=db[a];if(void 0===a)g=k;else{var b=[];for(c=0;c<a.arglist.length;c++)b[c]=z(g[c]);for(c=0;c<a.arglist.length;c++)J.newvar(a.arglist[c].name),J.setvar(a.arglist[c].name,b[c]);J.pushVstack("*");g=z(a.body);J.cleanVstack();for(c=0;c<a.arglist.length;c++)J.removevar(a.arglist[c].name)}return g}if(b=t[a])return b(g,c);var d=a.lastIndexOf("$");if(-1!==d&&(d=a.substr(0,d),b=t[d]))return b(g,c);wa.err("Called undefined function "+d+" (as "+a+")");return k},equals:function(a,
+g){return"number"===a.ctype&&"number"===g.ctype?{ctype:"boolean",value:a.value.real===g.value.real&&a.value.imag===g.value.imag}:"string"===a.ctype&&"string"===g.ctype||"boolean"===a.ctype&&"boolean"===g.ctype?{ctype:"boolean",value:a.value===g.value}:"list"===a.ctype&&"list"===g.ctype?h.equals(a,g):"geo"===a.ctype&&"geo"===g.ctype?{ctype:"boolean",value:a.value===g.value}:{ctype:"boolean",value:!1}}},J={};J.vars=function(){var a={pi:m.real(Math.PI),"\u03c0":m.real(Math.PI),i:m.complex(0,1),"true":w.bool(!0),
+"false":w.bool(!1),"#":k,nil:h.turnIntoCSList([]),newline:w.string("\n"),tab:w.string("\t")},g=[],c;for(c in a)g[c]=[a[c]];return g}();J.isVariable=function(a){return this.vars.hasOwnProperty(a)};J.create=function(a){if(this.vars.hasOwnProperty(a))return this.vars[a];var g=[null];return this.vars[a]=g};J.newvar=function(a){a=this.vars[a];a.push(k);return a};J.removevar=function(a){var g=this.vars[a];0===g.length&&console.error("Removing non-existing "+a);g.pop();0===g.length&&console.warn("Removing last "+
+a)};J.setvar=function(a,g){var c=this.vars[a];0===c.length&&console.error("Setting non-existing variable "+a);void 0===g&&(console.error("Setting variable "+a+" to undefined value"),g=k);if("undefined"===g.ctype)c[c.length-1]=g;else{var b=g;null===b&&(b=k);c[c.length-1]=b}};J.undefinedWarning={};J.getvar=function(a){var g=this.vars[a]||[];0===g.length&&console.error("Getting non-existing variable "+a);g=g[g.length-1];if(null===g){if(v.csnames.hasOwnProperty(a))return{ctype:"geo",value:v.csnames[a]};
+console&&console.log&&void 0===this.undefinedWarning[a]&&(this.undefinedWarning[a]=!0,console.log("Warning: Accessing undefined variable: "+a));return k}return g};J.dump=function(a){var g=this.vars[a];console.log("*** Dump "+a);for(a=0;a<g.length;a++)console.log(a+":> "+Z(g[a]))};J.vstack=[];J.pushVstack=function(a){this.vstack.push(a)};J.popVstack=function(){this.vstack.pop()};J.cleanVstack=function(){for(var a=this.vstack;0<a.length&&"*"!==a[a.length-1];)this.removevar(a[a.length-1]),a.pop();0<
+a.length&&a.pop()};var ta={generalFields:{color:"color",colorhsb:"",size:"size",alpha:"alpha",fillcolor:"fillcolor",fillalpha:"fillalpha",isshowing:"isshowing",visible:"visible",name:"name",caption:"caption",trace:"",tracelength:"",selected:"",labeled:"labeled",labelled:"labeled"},getGeoField:function(a,g){return"undefined"!==typeof v.csnames[a]?ta.getField(v.csnames[a],g):k},setGeoField:function(a,g,c){return"undefined"!==typeof v.csnames[a]?ta.setField(v.csnames[a],g,c):k},getField:function(a,g){var c;
+if("P"===a.kind){if("xy"===g)return c=h.dehom(a.homog),w.withUsage(c,"Point");if("homog"===g)return w.withUsage(a.homog,"Point");if("x"===g)return m.div(a.homog.value[0],a.homog.value[2]);if("y"===g)return m.div(a.homog.value[1],a.homog.value[2])}if("L"===a.kind||"S"===a.kind){if("homog"===g)return w.withUsage(a.homog,"Line");if("angle"===g)return c=h.eucangle(h.ey,a.homog),w.withUsage(c,"Angle");if("slope"===g)return m.neg(m.div(a.homog.value[0],a.homog.value[1]))}if("Tr"===a.kind&&"matrix"===g)return a.matrix;
+if("C"===a.kind){if("radius"===g){var b=a.matrix;c=b.value[0].value[0];var d=b.value[0].value[2],e=b.value[1].value[2],b=b.value[2].value[2];m.mult(c,c);d=m.div(d,c);e=m.div(e,c);c=m.div(b,c);return c=m.sqrt(m.sub(m.add(m.mult(d,d),m.mult(e,e)),c))}if("size"===g)return a.size;if("matrix"===g)return a.matrix;if("center"===g)return c=l._helper.CenterOfConic(a.matrix),c=h.dehom(c),w.withUsage(c,"Point");if("dualMatrix"===g)return h.normalizeMax(h.adjoint3(a.matrix))}if("Text"===a.kind){if("pressed"===
+g)return a.checkbox?w.bool(a.checkbox.checked):w.bool(!1);if("xy"===g)return c=h.dehom(a.homog),w.withUsage(c,"Point");if("homog"===g)return w.withUsage(a.homog,"Point");if("x"===g)return m.div(a.homog.value[0],a.homog.value[2]);if("y"===g)return m.div(a.homog.value[1],a.homog.value[2])}if("trace"===g)return w.bool(!!a.drawtrace);if(ta.generalFields[g])return(c=a[ta.generalFields[g]])&&c.ctype?c:"object"!==typeof c?w.wrap(c):k;if(a.behavior){if("mass"===g&&"Mass"===a.behavior.type)return m.real(a.behavior.mass);
+if("radius"===g&&"Mass"===a.behavior.type)return m.real(a.behavior.radius);if("charge"===g&&"Mass"===a.behavior.type)return m.real(a.behavior.charge);if("friction"===g&&"Mass"===a.behavior.type)return m.real(a.behavior.friction);if("vx"===g&&"Mass"===a.behavior.type)return m.real(a.behavior.vx);if("vy"===g&&"Mass"===a.behavior.type)return m.real(a.behavior.vy);if("v"===g&&"Mass"===a.behavior.type)return h.realVector([a.behavior.vx,a.behavior.vy]);if("fx"===g&&"Mass"===a.behavior.type)return m.real(a.behavior.fx);
+if("fy"===g&&"Mass"===a.behavior.type)return m.real(a.behavior.fy);if("f"===g&&"Mass"===a.behavior.type)return h.realVector([a.behavior.fx,a.behavior.fy]);if("ldiff"===g&&"Spring"===a.behavior.type)return m.real(a.behavior.ldiff)}c=l[a.type]["get_"+g];return"function"===typeof c?c(a):k},setField:function(a,g,c){"color"===g&&h._helper.isNumberVecN(c,3)&&(a.color=c);"size"===g&&"number"===c.ctype&&(a.size=c);"alpha"===g&&"number"===c.ctype&&(a.alpha=c);"fillcolor"===g&&h._helper.isNumberVecN(c,3)&&
+(a.fillcolor=c);"fillalpha"===g&&"number"===c.ctype&&(a.fillalpha=c);"visible"===g&&"boolean"===c.ctype&&(a.visible=c.value);"pinned"===g&&"boolean"===c.ctype&&(a.pinned=c.value);"labeled"!==g&&"labelled"!==g||"boolean"!==c.ctype||(a.labeled=c.value);"printlabel"===g&&(a.printname=Z(c));"trace"===g&&"boolean"===c.ctype&&(c.value&&!a.drawtrace?(a.drawtrace=!0,yd(a)):a.drawtrace=c.value);"P"===a.kind&&a.movable&&("xy"===g&&h._helper.isNumberVecN(c,2)&&La(a,h.turnIntoCSList([c.value[0],c.value[1],m.real(1)]),
+"homog"),"xy"===g&&h._helper.isNumberVecN(c,3)&&La(a,c,"homog"),"x"===g&&"number"===c.ctype&&La(a,h.turnIntoCSList([m.mult(c,a.homog.value[2]),a.homog.value[1],a.homog.value[2]]),"homog"),"y"===g&&"number"===c.ctype&&La(a,h.turnIntoCSList([a.homog.value[0],m.mult(c,a.homog.value[2]),a.homog.value[2]]),"homog"),"homog"===g&&h._helper.isNumberVecN(c,3)&&La(a,c,"homog"));"homog"===g&&"L"===a.kind&&a.movable&&h._helper.isNumberVecN(c,3)&&La(a,c,"homog");"Text"===a.kind&&("pressed"===g&&"boolean"===c.ctype&&
+a.checkbox&&(a.checkbox.checked=c.value),a.movable&&("xy"===g?h._helper.isNumberVecN(c,2)?a.homog=h.turnIntoCSList([c.value[0],c.value[1],m.real(1)]):h._helper.isNumberVecN(c,3)&&(a.homog=c):"homog"===g&&h._helper.isNumberVecN(c,3)?a.homog=c:"x"===g&&"number"===c.ctype?a.homog=h.turnIntoCSList([m.mult(c,a.homog.value[2]),a.homog.value[1],a.homog.value[2]]):"y"===g&&"number"===c.ctype&&(a.homog=h.turnIntoCSList([a.homog.value[0],m.mult(c,a.homog.value[2]),a.homog.value[2]]))));a.behavior&&("mass"===
+g&&"Mass"===a.behavior.type&&"number"===c.ctype&&(a.behavior.mass=c.value.real),"mass"===g&&"Sun"===a.behavior.type&&"number"===c.ctype&&(a.behavior.mass=c.value.real),"friction"===g&&"Mass"===a.behavior.type&&"number"===c.ctype&&(a.behavior.friction=c.value.real),"charge"===g&&"Mass"===a.behavior.type&&"number"===c.ctype&&(a.behavior.charge=c.value.real),"radius"===g&&"Mass"===a.behavior.type&&"number"===c.ctype&&(a.behavior.radius=c.value.real),"vx"===g&&"Mass"===a.behavior.type&&"number"===c.ctype&&
+(a.behavior.vx=c.value.real),"vy"===g&&"Mass"===a.behavior.type&&"number"===c.ctype&&(a.behavior.vy=c.value.real),"v"===g&&"Mass"===a.behavior.type&&h._helper.isNumberVecN(c,2)&&(a.behavior.vx=c.value[0].value.real,a.behavior.vy=c.value[1].value.real));g=l[a.type]["set_"+g];if("function"===typeof g)return g(a,c)},getuserData:function(a,g){var c;a.userData&&a.userData[g]&&(c=a.userData[g]);return c&&c.ctype?c:"object"!==typeof c?w.wrap(c):k},setuserData:function(a,g,c){a.userData||(a.userData={});
+a.userData[g]=c}};t.version$0=function(a,g){var c=["CindyJS"].concat(ve);return h.turnIntoCSList(c.map(w.wrap))};t.clearconsole$0=function(a,g){wa.clear()};t.err$1=function(a,g){var c="",b;"variable"===a[0].ctype?(c=a[0].name,b=J.getvar(a[0].name)):b=a[0];b=c+" ===> "+Z(z(b));ka(b);return k};t.errc$1=function(a,g){var c;"variable"===a[0].ctype?(c=z(J.getvar(a[0].name)),console.log(a[0].name+" ===> "+Z(c))):(c=z(a[0]),console.log(" ===> "+Z(c)));return k};t.print$1=function(a,g){wa.out(Z(z(a[0])),
+!0);return k};t.println$1=function(a,g){wa.out(Z(z(a[0])));return k};t.assert$2=function(a,g){var c=z(a[0]);if("boolean"===c.ctype){if(!1===c.value)return t.println$1([a[1]],g)}else ka("Condition for assert is not boolean");return k};t.dump$1=function(a,g){console.log(JSON.stringify(a[0]));return k};t.repeat$2=function(a,g){return t.repeat$3([a[0],null,a[1]],g)};t.repeat$3=function(a,g){var c=B(a[0]),b="#";null!==a[1]&&"variable"===a[1].ctype&&(b=a[1].name);if("number"!==c.ctype)return k;var c=Math.round(c.value.real),
+d=1,h=1,e=c+1,f=!1,m=!1,l=!1,n;void 0!==g.start&&(n=z(g.start),"number"===n.ctype&&(f=!0,h=n.value.real));void 0!==g.step&&(n=z(g.step),"number"===n.ctype&&(l=!0,d=n.value.real));void 0!==g.stop&&(n=z(g.stop),"number"===n.ctype&&(m=!0,e=n.value.real));!f||m||l||(e=d*c+h);f||!m||l||(h=-d*(c-1)+e,e+=d);f||m||!l||(e=d*c+h);f&&m&&!l&&(d=(e-h)/(c-1),e+=d);f&&!m&&l&&(e=d*c+h);!f&&m&&l&&(h=-d*(c-1)+e,e+=d);f&&m&&l&&(e+=d);(h<=e&&0<d||h>=e&&0>d)&&f&&m&&l&&(c=Math.floor((e-h)/d));J.newvar(b);e=k;for(f=0;f<
+c;f++)J.setvar(b,{ctype:"number",value:{real:f*d+h,imag:0}}),e=z(a[2]);J.removevar(b);return e};t.while$2=function(a,g){for(var c=a[1],b=a[0],d=z(b),h=k;"list"!==d.ctype&&d.value;)h=z(c),d=z(b);return h};t.apply$2=function(a,g){return t.apply$3([a[0],null,a[1]],g)};t.apply$3=function(a,g){var c=B(a[0]);if("list"!==c.ctype)return k;var b="#";null!==a[1]&&"variable"===a[1].ctype&&(b=a[1].name);var c=c.value,d=[];J.newvar(b);for(var h=0;h<c.length;h++)J.setvar(b,c[h]),d[h]=z(a[2]);J.removevar(b);return{ctype:"list",
+value:d}};t.forall$2=function(a,g){return t.forall$3([a[0],null,a[1]],g)};t.forall$3=function(a,g){var c=B(a[0]);if("list"!==c.ctype)return k;var b="#";null!==a[1]&&"variable"===a[1].ctype&&(b=a[1].name);c=c.value;J.newvar(b);for(var d,h=0;h<c.length;h++)J.setvar(b,c[h]),d=z(a[2]);J.removevar(b);return d};t.select$2=function(a,g){return t.select$3([a[0],null,a[1]],g)};t.select$3=function(a,g){var c=B(a[0]);if("list"!==c.ctype)return k;var b="#";null!==a[1]&&"variable"===a[1].ctype&&(b=a[1].name);
+var c=c.value,d=[];J.newvar(b);for(var h=0,e=0;e<c.length;e++){J.setvar(b,c[e]);var f=z(a[2]);"boolean"===f.ctype&&!0===f.value&&(d[h]=c[e],h++)}J.removevar(b);return{ctype:"list",value:d}};t.flatten$1=function(a,g){function c(a,g){return-1===g||"list"!==a.ctype?a:[].concat.apply([],a.value.map(function(a){return c(a,g-1)}))}var b=B(a[0]);if("list"!==b.ctype)return b;var d=g.levels;void 0===d?d=1:(d=z(d),d="number"===d.ctype?d.value.real:"string"===d.ctype&&"all"===d.value?-2:1);return{ctype:"list",
+value:c(b,d)}};t.createvar$1=function(a,g){"variable"===a[0].ctype&&J.newvar(a[0].name);return k};t.local=function(a,g){for(var c=0;c<a.length;c++)"variable"===a[c].ctype&&J.newvar(a[c].name);return k};t.removevar$1=function(a,g){var c=z(a[0]);"variable"===a[0].ctype&&J.removevar(a[0].name);return c};t.release=function(a,g){if(0===a.length)return k;for(var c=z(a[a.length-1]),b=0;b<a.length;b++)"variable"===a[b].ctype&&J.removevar(a[b].name);return c};t.regional=function(a,g){for(var c=0;c<a.length;c++)if("variable"===
+a[c].ctype){var b=a[c].name;J.newvar(b);J.pushVstack(b)}return k};t.genList=function(a,g){return h.turnIntoCSList(a.map(z))};D.assigntake=function(a,g){var c=a.args[0],b=z(c),d=B(a.args[1]),e=k;if("list"===b.ctype||"string"===b.ctype)d=Math.floor(d.value.real),0>d&&(d=b.value.length+d+1),0<d&&d<=b.value.length&&("list"===b.ctype?(e=b.value.slice(),e[d-1]=z(g),e=h.turnIntoCSList(e),b.userData&&(e.userData=b.userData)):(b=b.value,b=b.substring(0,d-1)+Z(z(g))+b.substring(d,b.length),e=w.string(b)));
+ab([c,e])};D.assigndot=function(a,g){var c=z(a.obj),b=a.key;"geo"===c.ctype&&b&&ta.setField(c.value,b,B(g));return k};D.assigncolon=function(a,g){var c=a.obj,b=z(c),d=Z(z(a.key));"_?_"===d&&(d=void 0);if("geo"===b.ctype&&d)ta.setuserData(b.value,d,B(g));else if("list"===b.ctype||"string"===b.ctype&&d){var h={},e;for(e in b)h[e]=b[e];if(h.userData){var b={},f;for(f in h.userData)b[f]=h.userData[f];h.userData=b}else h.userData={};h.userData[d]=B(g);ab([c,h])}else d?console.log("User data can only be assigned to geo objects and lists."):
+console.log("Key is undefined");return k};D.assignlist=function(a,g){var c=a.length,b=g.length;b<c&&(c=b);for(b=0;b<c;b++)ab([a[b],g[b]],[])};t.if$2=function(a,g){return t.if$3(a,g)};t.if$3=function(a,g){var c=B(a[0]);if("boolean"===c.ctype){if(!0===c.value)return z(a[1]);if(3===a.length)return z(a[2])}else ka("Condition for if is not boolean");return k};t.and$2=Pc;t.or$2=Qc;t.xor$2=function(a,g){var c=B(a[0]),b=B(a[1]);return"boolean"===c.ctype&&"boolean"===b.ctype?{ctype:"boolean",value:c.value!==
+b.value}:k};t.not$1=function(a,g){var c=B(a[0]);return"boolean"===c.ctype?{ctype:"boolean",value:!c.value}:k};D.genericListMathGen=function(a,g,c){t[a+"$1"]=function(a,b){var q=z(a[0]);if("list"!==q.ctype)return k;q=q.value;if(0===q.length)return c;for(var d=q[0],h=1;h<q.length;h++)d=g(d,q[h]);return d};var b=a+"$3";t[a+"$2"]=function(a,c){return t[b]([a[0],null,a[1]])};t[b]=function(a,b){var q=B(a[0]);if("list"!==q.ctype)return k;q=q.value;if(0===q.length)return c;var d="#";null!==a[1]&&"variable"===
+a[1].ctype&&(d=a[1].name);J.newvar(d);J.setvar(d,q[0]);for(var h=z(a[2]),e=1;e<q.length;e++){J.setvar(d,q[e]);var f=z(a[2]),h=g(h,f)}J.removevar(d);return h}};D.genericListMathGen("product",w.mult,m.real(1));D.genericListMathGen("sum",w.add,m.real(0));D.genericListMathGen("max",w.max,k);D.genericListMathGen("min",w.min,k);t.max$2=function(a,g){var c=B(a[0]);if("list"===c.ctype)return t.max$3([c,null,a[1]]);var b=B(a[1]);return t.max$1([h.turnIntoCSList([c,b])])};t.min$2=function(a,g){var c=B(a[0]);
+if("list"===c.ctype)return t.min$3([c,null,a[1]]);var b=B(a[1]);return t.min$1([h.turnIntoCSList([c,b])])};t.add$2=Rc;t.sub$2=jc;t.mult$2=Sc;t.div$2=Tc;t.mod$2=function(a,g){var c=B(a[0]),b=B(a[1]);return"number"===c.ctype&&"number"===b.ctype?m.mod(c,b):k};t.pow$2=Uc;t.exp$1=function(a,g){var c=B(a[0]);return"number"===c.ctype?m.exp(c):k};t.sin$1=function(a,g){var c=B(a[0]);return"number"===c.ctype?m.sin(c):k};t.sqrt$1=function(a,g){var c=B(a[0]);return"number"===c.ctype?m.sqrt(c):k};D.laguerre=function(a,
+g,c){if("list"!==a.ctype)return k;var b=a.value.length-1,d;for(d=0;d<=b;d++)if("number"!==a.value[d].ctype)return k;if("number"!==g.ctype)return k;for(var h=[1,.3141,.5926,.5358,.9793,.2385,.6264,.3383,.2795,.0288],e,f,l,n=1;n<=c;n++){f=l=m.zero;e=a.value[b];for(d=b-1;0<=d;d--)l=m.add(f,m.mult(l,g)),f=m.add(e,m.mult(f,g)),e=m.add(a.value[d],m.mult(e,g));if(m._helper.isLessThan(m.abs(e),m.real(1E-14)))break;d=m.div(f,e);f=m.mult(d,d);e=m.sub(f,m.div(m.mult(m.real(2),l),e));l=m.sqrt(m.mult(m.real(b-
+1),m.sub(m.mult(m.real(b),e),f)));e=m.add(d,l);d=m.sub(d,l);m._helper.isLessThan(m.abs(e),m.abs(d))&&(e=d);d=m._helper.isLessThan(m.real(1E-14),m.abs(e))?m.div(m.real(b),e):m.mult(m.add(m.abs(g),m.one),m.complex(Math.cos(n),Math.sin(n)));if(m._helper.isLessThan(m.abs(d),m.real(1E-14)))break;0===n%20&&n<c-19&&(d=m.mult(d,m.real(h[Math.floor(n/20)])));g=m.sub(g,d)}return g};D.quadratic_roots=function(a){if("list"!==a.ctype)return k;var g=a.value[2],c=a.value[1];a=a.value[0];if(m._helper.isZero(a))return[m.zero,
+m.neg(m.div(c,g))];var b=m.sqrt(m.sub(m.mult(c,c),m.mult(m.real(4),m.mult(g,a))));0<=m.re(c)&&(b=m.neg(b));return[m.div(m.sub(b,c),m.mult(m.real(2),g)),m.div(m.mult(m.real(2),a),m.sub(b,c))]};D.roots=function(a){var g=[],c=a,b=a.value.length-1;if(0>=b)return h.turnIntoCSList([]);if(m._helper.isZero(a.value[b]))return g=D.roots(h.turnIntoCSList(a.value.slice(0,b))),h.append(g,m.infinity);if(1===b)g[0]=m.neg(m.div(a.value[0],a.value[1]));else if(2===b)g=D.quadratic_roots(a);else{for(var d=0;d<b-2;d++){g[d]=
+D.laguerre(a,m.zero,200);g[d]=D.laguerre(c,g[d],1);var e=[];e[b-d]=a.value[b-d];for(var f=b-d;0<f;f--)e[f-1]=m.add(a.value[f-1],m.mult(e[f],g[d]));e.shift();a=h.turnIntoCSList(e)}a=D.quadratic_roots(a);g[b-2]=a[0];g[b-1]=a[1]}return h.turnIntoCSList(g)};t.roots$1=function(a,g){var c=B(a[0]);if("list"===c.ctype){for(var b=0;b<c.value.length;b++)if("number"!==c.value[b].ctype)return k;c=D.roots(c);return h.sort1(c)}return k};t.autodiff$3=function(a,g){var c="x",b;if("function"===a[0].ctype)b=db[a[0].oper].body,
+c=a[0].args[0].name;else if("function"===typeof a[0].impl)b=a[0];else return ka("could not parse function"),k;var d=B(a[1]),h=B(a[2]);if(1>h.value.real)return ka("grade cant be < 1"),k;h=m.add(h,m.real(1));return P.autodiff(b,c,d,h)};t.cos$1=function(a,g){var c=B(a[0]);return"number"===c.ctype?m.cos(c):k};t.tan$1=function(a,g){var c=B(a[0]);return"number"===c.ctype?m.tan(c):k};t.arccos$1=function(a,g){var c=B(a[0]);return"number"===c.ctype?m.arccos(c):k};t.arcsin$1=function(a,g){var c=B(a[0]);return"number"===
+c.ctype?m.arcsin(c):k};t.arctan$1=function(a,g){var c=B(a[0]);return"number"===c.ctype?m.arctan(c):k};t.arctan2$2=function(a,g){var c=B(a[0]),b=B(a[1]);return"number"===c.ctype&&"number"===b.ctype?m.arctan2(c,b):k};t.arctan2$1=function(a,g){var c=B(a[0]);if("list"===c.ctype&&2===c.value.length){if(c=c.value,"number"===c[0].ctype&&"number"===c[1].ctype)return t.arctan2$2(c,g)}else if("number"===c.ctype)return m.arctan2(c);return k};t.log$1=function(a,g){var c=B(a[0]);return"number"===c.ctype?m.log(c):
+k};D.recursiveGen=function(a){var g=m[a],c=h[a];t[a+"$1"]=function(a,b){var d=B(a[0]);return"number"===d.ctype?g(d):"list"===d.ctype?c(d):k}};D.recursiveGen("im");D.recursiveGen("re");D.recursiveGen("conjugate");D.recursiveGen("round");D.recursiveGen("ceil");D.recursiveGen("floor");D.recursiveGen("abs");t.abs_infix=t.abs$1;t.random$0=function(a,g){return m.real(m._helper.rand())};t.random$1=function(a,g){var c=B(a[0]);return"number"===c.ctype?m.complex(c.value.real*m._helper.rand(),c.value.imag*m._helper.rand()):
+k};t.seedrandom$1=function(a,g){var c=B(a[0]);"number"===c.ctype&&m._helper.seedrandom(c.value.real);return k};t.randomnormal$0=function(a,g){return m.real(m._helper.randnormal())};t.randominteger$1=function(a,g){var c=B(a[0]);if("number"===c.ctype){var b=c.value.real|0,c=c.value.imag|0,b=b*m._helper.rand()|0,c=c*m._helper.rand()|0;return m.complex(b,c)}return k};t.randomint$1=t.randominteger$1;t.randombool$0=function(a,g){return.5<m._helper.rand()?{ctype:"boolean",value:!0}:{ctype:"boolean",value:!1}};
+t.isreal$1=function(a,g){var c=z(a[0]);return"number"===c.ctype&&m._helper.isAlmostReal(c)?{ctype:"boolean",value:!0}:{ctype:"boolean",value:!1}};t.isinteger$1=function(a,g){var c=z(a[0]);return"number"===c.ctype&&m._helper.isAlmostReal(c)&&c.value.real===Math.floor(c.value.real)?{ctype:"boolean",value:!0}:{ctype:"boolean",value:!1}};t.iseven$1=function(a,g){var c=z(a[0]);return"number"===c.ctype&&m._helper.isAlmostReal(c)&&c.value.real/2===Math.floor(c.value.real/2)?{ctype:"boolean",value:!0}:{ctype:"boolean",
+value:!1}};t.isodd$1=function(a,g){var c=z(a[0]);return"number"===c.ctype&&m._helper.isAlmostReal(c)&&(c.value.real-1)/2===Math.floor((c.value.real-1)/2)?{ctype:"boolean",value:!0}:{ctype:"boolean",value:!1}};t.iscomplex$1=function(a,g){return"number"===z(a[0]).ctype?{ctype:"boolean",value:!0}:{ctype:"boolean",value:!1}};t.isstring$1=function(a,g){return"string"===z(a[0]).ctype?{ctype:"boolean",value:!0}:{ctype:"boolean",value:!1}};t.islist$1=function(a,g){return"list"===z(a[0]).ctype?{ctype:"boolean",
+value:!0}:{ctype:"boolean",value:!1}};t.ismatrix$1=function(a,g){var c=z(a[0]);return-1!==h._helper.colNumb(c)?{ctype:"boolean",value:!0}:{ctype:"boolean",value:!1}};t.iscircle$1=function(a,g){var c=z(a[0]);return"geo"===c.ctype&&"C"===c.value.kind&&"Circle"===c.value.matrix.usage?{ctype:"boolean",value:!0}:{ctype:"boolean",value:!1}};t.isconic$1=function(a,g){var c=z(a[0]);return"geo"===c.ctype&&"C"===c.value.kind?{ctype:"boolean",value:!0}:{ctype:"boolean",value:!1}};t.isline$1=function(a,g){var c=
+z(a[0]);return"geo"===c.ctype&&"L"===c.value.kind?{ctype:"boolean",value:!0}:{ctype:"boolean",value:!1}};t.ispoint$1=function(a,g){var c=z(a[0]);return"geo"===c.ctype&&"P"===c.value.kind?{ctype:"boolean",value:!0}:{ctype:"boolean",value:!1}};t.isgeometric$1=function(a,g){return"geo"===z(a[0]).ctype?{ctype:"boolean",value:!0}:{ctype:"boolean",value:!1}};t.isnumbermatrix$1=function(a,g){var c=z(a[0]);return h.isNumberMatrix(c)};t.isnumbervector$1=function(a,g){var c=z(a[0]);return h.isNumberVector(c)};
+t.issun$1=function(a,g){var c=z(a[0]);return"geo"===c.ctype&&void 0!==c.value.behavior&&"Sun"===c.value.behavior.type?{ctype:"boolean",value:!0}:{ctype:"boolean",value:!1}};t.ismass$1=function(a,g){var c=z(a[0]);return"geo"===c.ctype&&void 0!==c.value.behavior&&"Mass"===c.value.behavior.type?{ctype:"boolean",value:!0}:{ctype:"boolean",value:!1}};t.isspring$1=function(a,g){var c=z(a[0]);return"geo"===c.ctype&&void 0!==c.value.behavior&&"Spring"===c.value.behavior.type?{ctype:"boolean",value:!0}:{ctype:"boolean",
+value:!1}};t.isbouncer$1=function(a,g){var c=z(a[0]);return"geo"===c.ctype&&void 0!==c.value.behavior&&"Bouncer"===c.value.behavior.type?{ctype:"boolean",value:!0}:{ctype:"boolean",value:!1}};t.isundefined$1=function(a,g){return"undefined"===z(a[0]).ctype?{ctype:"boolean",value:!0}:{ctype:"boolean",value:!1}};var Od={ArcBy3:"Arc",CenterOfConic:"Center",ConicBy1p4l:"Conic1P4L",ConicBy4p1l:"Conic4P1L",ConicBy5lines:"Conic5L",ConicBy2Foci1P:"ConicFoci",ConicFromPrincipalDirections:"ConicPrincipleDirs",
+Free:"FreePoint",PolarOfLine:"PolarLine",PolarOfPoint:"PolarPoint",PointOnSegment:"PointOnLine",Button:"Text",ToggleButton:"Text",TrReflectionL:"TrReflection",TrReflectionP:"TrReflection",TrReflectionC:"TrReflection",TrTranslation:"TrProjection",TrSimilarity:"TrProjection",TrAffine:"TrProjection",TransformP:"Transform",TransformL:"Transform",TransformSegment:"Transform",TransformS:"Transform",TransformPolygon:"Transform",TransformArc:"Transform",TransformConic:"Transform",TransformC:"Transform",TrMoebiusP:"Transform",
+TrMoebiusL:"Transform",TrMoebiusSegment:"Transform",TrMoebiusS:"Transform",TrMoebiusPolygon:"Transform",TrMoebiusArc:"Transform",TrMoebiusCircle:"Transform",TrMoebiusC:"Transform",TrInverseMoebius:"TrInverse",Perp:"Orthogonal",Para:"Parallel",AngleBisector:"AngularBisector",IntersectLC:"IntersectionConicLine",IntersectCirCir:"IntersectionCircleCircle",OtherPointOnCircle:"PointOnCircle"};t.algorithm$1=function(a,g){var c=z(a[0]);if("geo"===c.ctype){var c=c.value,b=c.type,d=B(g.compatibility);"string"===
+d.ctype&&/^cinderella$/i.test(d.value)&&(/^Select/.test(b)&&(c=v.csnames[c.args[0]],b=c.type),Od.hasOwnProperty(b)?b=Od[b]:"CircleMr"===b&&(b=c.pinned?"CircleByFixedRadius":"CircleByRadius"));return w.string(b)}return k};t.inputs$1=function(a,g){var c=z(a[0]);if("geo"===c.ctype){var c=c.value,b=c.type,d=[];c.args&&(d=c.args.map(function(a){return{ctype:"geo",value:v.csnames[a]}}));if(/^Select/.test(b)||l[b].isMovable)switch(c.kind){case "P":case "L":d.push(c.homog);break;case "C":d.push(c.matrix)}return h.turnIntoCSList(d)}return k};
+t.moveto$2=function(a,g){var c=z(a[0]),b=B(a[1]);"geo"===c.ctype&&(c=c.value,h._helper.isNumberVecN(b,2)?ta.setField(c,"xy",b):h._helper.isNumberVecN(b,3)&&ta.setField(c,"homog",b));return k};t.continuefromhere$0=function(a,g){zb();return k};t.matrixrowcolumn$1=function(a,g){var c=z(a[0]);return-1!==h._helper.colNumb(c)?h.realVector([c.value.length,c.value[0].value.length]):k};t.rowmatrix$1=function(a,g){var c=z(a[0]);return"list"===c.ctype?h.turnIntoCSList([c]):k};t.columnmatrix$1=function(a,g){var c=
+z(a[0]);return"list"===c.ctype?h.turnIntoCSList(c.value.map(function(a){return h.turnIntoCSList([a])})):k};t.submatrix$3=function(a,g){var c=z(a[0]),b=z(a[1]),d=z(a[2]);if("list"===c.ctype&&"number"===b.ctype&&"number"===d.ctype){var e=Math.round(b.value.real),b=Math.round(d.value.real),c=c.value.slice();0<b&&b<=c.length&&c.splice(b-1,1);var f=!0,c=c.map(function(a){if("list"!==a.ctype)f=!1;else return a=a.value.slice(),0<e&&e<=a.length&&a.splice(e-1,1),h.turnIntoCSList(a)});return f?h.turnIntoCSList(c):
+k}return k};t.complex$1=function(a,g){var c,b,d;d=B(a[0]);if("list"===d.ctype&&h.isNumberVector(d)){if(2===d.value.length)return c=d.value[0],b=d.value[1],m.complex(c.value.real-b.value.imag,b.value.real+c.value.imag);if(3===d.value.length)return c=d.value[0],b=d.value[1],d=d.value[2],c=m.div(c,d),b=m.div(b,d),m.complex(c.value.real-b.value.imag,b.value.real+c.value.imag)}return k};t.gauss$1=function(a,g){var c=B(a[0]);return"number"===c.ctype?h.realVector([c.value.real,c.value.imag]):k};t.cross$2=
+$c;t.crossratio$4=function(a,g){var c=z(a[0]),b=z(a[1]),d=z(a[2]),e=z(a[3]),f=K(c),l=K(b),n=K(d),p=K(e);return f!==k&&l!==k&&n!==k&&p!==k?h.crossratio3(f,l,n,p,h.ii):"number"===c.ctype&&"number"===b.ctype&&"number"===d.ctype&&"number"===e.ctype?m.div(m.mult(m.sub(c,d),m.sub(b,e)),m.mult(m.sub(c,e),m.sub(b,d))):k};t.para$2=function(a,g){var c=B(a[0]),b=B(a[1]),d=K(c),e=K(b);if(c!==k&&b!==k){var b=b.usage,f=d,m=e;if("Line"===c.usage||"Point"===b)f=e,m=d;c=h.cross(h.cross(h.linfty,m),f);return w.withUsage(c,
+"Line")}return k};t.perp$2=function(a,g){var c=B(a[0]),b=B(a[1]),d=K(c),e=K(b);if(c!==k&&b!==k){var f=b.usage||e.usage,b=d,l=e;if("Line"===(c.usage||d.usage)||"Point"===f)b=e,l=d;c=h.turnIntoCSList([l.value[0],l.value[1],m.zero]);c=h.cross(c,b);return w.withUsage(c,"Line")}return k};t.perp$1=function(a,g){var c=B(a[0]);return h._helper.isNumberVecN(c,2)?h.turnIntoCSList([m.neg(c.value[1]),c.value[0]]):k};t.parallel$2=t.para$2;t.perpendicular$2=t.perp$2;t.perpendicular$1=t.perp$1;t.meet$2=function(a,
+g){var c=K(a[0]),b=K(a[1]);return c!==k&&b!==k?(c=h.cross(c,b),w.withUsage(c,"Point")):k};t.join$2=function(a,g){var c=K(a[0]),b=K(a[1]);return c!==k&&b!==k?(c=h.cross(c,b),w.withUsage(c,"Line")):k};t.dist$2=function(a,g){var c=B(a[0]),b=B(a[1]),c=jc([c,b],[]);return t.abs$1([c],[])};t.dist_infix=t.dist$2;t.point$1=function(a,g){var c=z(a[0]);return h._helper.isNumberVecN(c,3)||h._helper.isNumberVecN(c,2)?w.withUsage(c,"Point"):c};t.line$1=function(a,g){var c=z(a[0]);return h._helper.isNumberVecN(c,
+3)?w.withUsage(c,"Line"):c};t.det$3=function(a,g){var c=K(a[0]),b=K(a[1]),d=K(a[2]);if(c!==k&&b!==k&&d!==k)return h.det3(c,b,d)};t.det$1=function(a,g){var c=B(a[0]);if("list"===c.ctype){var b=h._helper.colNumb(c);if(-1!==b&&b===c.value.length)return h.det(c)}return k};t.eig$1=function(a,g){var c=B(a[0]);if("list"===c.ctype){var b=h._helper.colNumb(c);if(-1!==b&&b===c.value.length)return h.eig(c)}return k};t.eigenvalues$1=function(a,g){var c=B(a[0]);if("list"===c.ctype){var b=h._helper.colNumb(c);
+if(-1!==b&&b===c.value.length)return h.eig(c,!1).value[0]}return k};t.rank$1=function(a,g){var c=B(a[0]);if("list"===c.ctype){var b=h._helper.colNumb(c);if(-1!==b&&b===c.value.length)return h.rank(c,g.precision)}return k};t.kernel$1=function(a,g){var c=B(a[0]);if("list"===c.ctype){var b=h._helper.colNumb(c);if(-1!==b&&b===c.value.length)return c=h.nullSpace(c,g.precision),h.transpose(c)}return k};t.eigenvectors$1=function(a,g){var c=B(a[0]);if("list"===c.ctype){var b=h._helper.colNumb(c);if(-1!==
+b&&b===c.value.length)return h.eig(c).value[1]}return k};t.area$3=function(a,g){var c=K(a[0]),b=K(a[1]),d=K(a[2]);if(c!==k&&b!==k&&d!==k){var e=c.value[2],f=b.value[2],l=d.value[2];if(!m._helper.isAlmostZero(e)&&!m._helper.isAlmostZero(f)&&!m._helper.isAlmostZero(l))return c=h.scaldiv(e,c),b=h.scaldiv(f,b),d=h.scaldiv(l,d),c=h.det3(c,b,d),m.realmult(.5,c)}return k};t.inverse$1=function(a,g){var c=B(a[0]);if("list"===c.ctype){var b=h._helper.colNumb(c);if(-1!==b&&b===c.value.length)return h.inverse(c)}return k};
+t.linearsolve$2=function(a,g){var c=B(a[0]),b=B(a[1]);if("list"===c.ctype){var d=h._helper.colNumb(c);if(-1!==d&&d===c.value.length&&h._helper.isNumberVecN(b,d))return h.linearsolve(c,b)}return k};var be=[[[]],[[0]],[[0,1],[1,0]],[[0,1,2],[0,2,1],[1,0,2],[1,2,0],[2,0,1],[2,1,0]],[[0,1,2,3],[0,1,3,2],[0,2,1,3],[0,2,3,1],[0,3,1,2],[0,3,2,1],[1,0,2,3],[1,0,3,2],[1,2,0,3],[1,2,3,0],[1,3,0,2],[1,3,2,0],[2,0,1,3],[2,0,3,1],[2,1,0,3],[2,1,3,0],[2,3,0,1],[2,3,1,0],[3,0,1,2],[3,0,2,1],[3,1,0,2],[3,1,2,0],
+[3,2,0,1],[3,2,1,0]]];t.mincostmatching$1=function(a,g){var c=z(a[0]);if(h.isNumberMatrix(c).value){var b=c.value.length,d=h._helper.colNumb(c),e=b<d?d:b,f,l,n=Array(e);for(f=0;f<e;++f)for(n[f]=Array(e),l=0;l<e;++l)n[f][l]=f<b&&l<d?c.value[f].value[l].value.real:0;c=uc(n);e=Array(b);for(f=0;f<b;++f)l=c[f],e[f]=l<d?m.real(l+1):m.real(0);return h.turnIntoCSList(e)}return k};t.take$2=vc;t.length$1=function(a,g){var c=z(a[0]);return"list"===c.ctype||"string"===c.ctype?m.real(c.value.length):k};t.pairs$1=
+function(a,g){var c=z(a[0]);return"list"===c.ctype?h.pairs(c):k};t.triples$1=function(a,g){var c=z(a[0]);return"list"===c.ctype?h.triples(c):k};t.cycle$1=function(a,g){var c=z(a[0]);return"list"===c.ctype?h.cycle(c):k};t.consecutive$1=function(a,g){var c=z(a[0]);return"list"===c.ctype?h.consecutive(c):k};t.reverse$1=function(a,g){var c=z(a[0]);return"list"===c.ctype?h.reverse(c):k};t.directproduct$2=function(a,g){var c=z(a[0]),b=z(a[1]);return"list"===c.ctype&&"list"===b.ctype?h.directproduct(c,b):
+k};t.concat$2=ad;t.common$2=bd;t.remove$2=cd;t.append$2=dd;t.prepend$2=ed;t.contains$2=function(a,g){var c=z(a[0]),b=z(a[1]);return"list"===c.ctype?h.contains(c,b):k};t.sort$2=function(a,g){return t.sort$3([a[0],null,a[1]],g)};t.sort$3=function(a,g){var c=B(a[0]);if("list"!==c.ctype)return k;var b="#";null!==a[1]&&"variable"===a[1].ctype&&(b=a[1].name);var c=c.value,d=[];J.newvar(b);var h;for(h=0;h<c.length;h++)J.setvar(b,c[h]),d[h]={val:c[h],result:z(a[2])};J.removevar(b);d.sort(w.compareResults);
+b=[];for(h=0;h<c.length;h++)b[h]=d[h].val;return{ctype:"list",value:b}};t.sort$1=function(a,g){var c=z(a[0]);return"list"===c.ctype?h.sort1(c):k};t.set$1=function(a,g){var c=z(a[0]);return"list"===c.ctype?h.set(c):k};t.combinations$2=function(a,g){function c(a,g){a===f?n.push(h.turnIntoCSList(l.slice())):g<e&&(l[a]=b.value[g],c(a+1,g+1),c(a,g+1))}var b=z(a[0]),d=z(a[1]),e,f,l,n;if("number"===d.ctype){f=d.value.real|0;if("number"===b.ctype){e=b.value.real|0;e-f<f&&(f=e-f);if(0>f)return m.real(0);if(0===
+f)return m.real(1);if(1===f)return b;for(var p=d=1,r=1;r<=f;++r)var t=e-f+r|0,u=r|0,v=wc(t,u)|0,t=t/v|0,u=u/v|0,v=wc(d,u)|0,d=d/v|0,u=u/v|0,v=wc(t,p)|0,t=t/v|0,p=p/v|0,d=d*t|0,p=p*u|0;return m.real(d/p)}if("list"===b.ctype){e=b.value.length;if(0>f||f>e)return h.turnIntoCSList([]);if(0===f)return h.turnIntoCSList([h.turnIntoCSList([])]);if(f===e)return h.turnIntoCSList([b]);n=[];l=Array(f);c(0,0);return h.turnIntoCSList(n)}}return k};t.zeromatrix$2=function(a,g){var c=B(a[0]),b=B(a[1]);return"number"===
+c.ctype&&"number"===b.ctype?h.zeromatrix(c,b):k};t.zerovector$1=function(a,g){var c=B(a[0]);return"number"===c.ctype?h.zerovector(c):k};t.transpose$1=function(a,g){var c=B(a[0]);return"list"===c.ctype&&-1!==h._helper.colNumb(c)?h.transpose(c):k};t.row$2=function(a,g){var c=B(a[0]),b=B(a[1]);return"number"===b.ctype&&"list"===c.ctype&&-1!==h._helper.colNumb(c)?h.row(c,b):k};t.column$2=function(a,g){var c=B(a[0]),b=B(a[1]);return"number"===b.ctype&&"list"===c.ctype&&-1!==h._helper.colNumb(c)?h.column(c,
+b):k};t.dict$0=function(a,g){var c=Na.create(),b;for(b in g)g.hasOwnProperty(b)&&Na.put(c,w.string(b),z(g[b]));return c};t.put$3=function(a,g){var c=z(a[0]),b=z(a[1]),d=z(a[2]);return"dict"===c.ctype?(c=Na.clone(c),Na.put(c,b,d),c):k};t.get$2=function(a,g){var c=z(a[0]),b=z(a[1]);return"dict"===c.ctype?Na.get(c,b,k):k};t.red$1=function(a,g){var c=z(a[0]);return"number"===c.ctype?h.realVector([Math.min(1,Math.max(0,c.value.real)),0,0]):k};t.green$1=function(a,g){var c=z(a[0]);return"number"===c.ctype?
+h.realVector([0,Math.min(1,Math.max(0,c.value.real)),0]):k};t.blue$1=function(a,g){var c=z(a[0]);return"number"===c.ctype?h.realVector([0,0,Math.min(1,Math.max(0,c.value.real))]):k};t.gray$1=function(a,g){var c=z(a[0]);return"number"===c.ctype?(c=Math.min(1,Math.max(0,c.value.real)),h.realVector([c,c,c])):k};t.grey$1=t.gray$1;D.HSVtoRGB=function(a,g,c){var b,d,e,f,k,m;a&&void 0===g&&void 0===c&&(g=a.s,c=a.v,a=a.h);f=Math.floor(6*a);k=6*a-f;a=c*(1-g);m=c*(1-k*g);g=c*(1-(1-k)*g);switch(f%6){case 0:b=
+c;d=g;e=a;break;case 1:b=m;d=c;e=a;break;case 2:b=a;d=c;e=g;break;case 3:b=a;d=m;e=c;break;case 4:b=g;d=a;e=c;break;case 5:b=c,d=a,e=m}return h.realVector([b,d,e])};t.hue$1=function(a,g){var c=z(a[0]);return"number"===c.ctype?(c=c.value.real,c-=Math.floor(c),D.HSVtoRGB(c,1,1)):k};D.shapeconvert=function(a){var g,c;if("circle"===a.type){g=a.value.value[0];g=w.div(g,g.value[2]);var b=g.value[0].value.real,d=g.value[1].value.real;a=a.value.value[1].value.real;c=Array(125);var h=2*Math.PI/125;for(g=0;125>
+g;g++)c[g]={X:b+Math.cos(g*h)*a,Y:d+Math.sin(g*h)*a};return[c]}if("polygon"===a.type){b=[];for(g=0;g<a.value.length;g++){d=a.value[g];c=[];for(h=0;h<d.length;h++)c[h]={X:d[h].X,Y:d[h].Y};b[g]=c}return b}};D.shapeop=function(a,g,c){a=D.shapeconvert(a);var b=D.shapeconvert(g);ClipperLib.JS.ScaleUpPaths(a,1E3);ClipperLib.JS.ScaleUpPaths(b,1E3);g=new ClipperLib.Clipper;g.AddPaths(a,ClipperLib.PolyType.ptSubject,!0);g.AddPaths(b,ClipperLib.PolyType.ptClip,!0);var b=a=ClipperLib.PolyFillType.pftNonZero,
+d=new ClipperLib.Paths;g.Execute(c,d,a,b);ClipperLib.JS.ScaleDownPaths(d,1E3);return{ctype:"shape",type:"polygon",value:d}};D.shapecommon=function(a,g){return D.shapeop(a,g,ClipperLib.ClipType.ctIntersection)};D.shaperemove=function(a,g){return D.shapeop(a,g,ClipperLib.ClipType.ctDifference)};D.shapeconcat=function(a,g){return D.shapeop(a,g,ClipperLib.ClipType.ctUnion)};t.key$0=function(a,g){return{ctype:"string",value:Yc}};t.keycode$0=function(a,g){return m.real(Zc)};t.mouse$0=function(a,g){return h.realVector([ra[0],
+ra[1]])};t.mover$0=function(a,g){if(ja&&ja.mover)return{ctype:"geo",value:ja.mover};console.log("Not moving anything at the moment");return k};t.translate$1=function(a,g){var c=B(a[0]);"list"===c.ctype&&h.isNumberVector(c)&&2===c.value.length&&y.translate(c.value[0].value.real,c.value[1].value.real);return k};t.rotate$1=function(a,g){var c=B(a[0]);"number"===c.ctype&&y.rotate(c.value.real);return k};t.scale$1=function(a,g){var c=B(a[0]);"number"===c.ctype&&y.scale(c.value.real);return k};t.greset$0=
+function(a,g){var c=eb.stack.length;y.greset();for(var b=0;b<c;b++)A.restore();return k};t.gsave$0=function(a,g){y.gsave();A.save();return k};t.grestore$0=function(a,g){y.grestore();A.restore();return k};t.color$1=function(a,g){var c=B(a[0]);"list"===c.ctype&&h.isNumberVector(c).value&&y.setcolor(c);return k};t.linecolor$1=function(a,g){var c=B(a[0]);"list"===c.ctype&&h.isNumberVector(c).value&&y.setlinecolor(c);return k};t.pointcolor$1=function(a,g){var c=B(a[0]);"list"===c.ctype&&h.isNumberVector(c).value&&
+y.setpointcolor(c);return k};t.alpha$1=function(a,g){var c=B(a[0]);"number"===c.ctype&&y.setalpha(c);return k};t.pointsize$1=function(a,g){var c=B(a[0]);"number"===c.ctype&&y.setpointsize(c);return k};t.linesize$1=function(a,g){var c=B(a[0]);"number"===c.ctype&&y.setlinesize(c);return k};t.textsize$1=function(a,g){var c=B(a[0]);"number"===c.ctype&&y.settextsize(c);return k};t.playanimation$0=function(a,g){M();return k};t.pauseanimation$0=function(a,g){Ga();return k};t.stopanimation$0=function(a,g){Ha();
+return k};t.text$1=function(a,g){var c=B(a[0]);return w.string(Z(c))};t.replace$3=function(a,g){var c=z(a[0]),b=z(a[1]),d=z(a[2]);if("string"===c.ctype&&"string"===b.ctype&&"string"===d.ctype)return c=c.value,b=b.value.replace(/[^A-Za-z0-9]/g,"\\$&"),d=d.value.replace(/\$/g,"$$$$"),c=c.replace(new RegExp(b,"g"),d),{ctype:"string",value:c}};t.replace$2=function(a,g){function c(a,c,g){var h="";d=b=-1;for(var e=0;e<c.length;e++){var f=c[e][0],k=a.indexOf(f,g);-1!==k&&(-1===b?(h=f,b=k,d=e):k<b&&(h=f,
+b=k,d=e))}return h}var b,d,h,e=z(a[0]);h=z(a[1]);if("string"===e.ctype&&"list"===h.ctype){for(var e=e.value,f=[],m=0;m<h.value.length;m++){var l=h.value[m];"list"===l.ctype&&2===l.value.length&&"string"===l.value[0].ctype&&"string"===l.value[1].ctype&&(f[f.length]=[l.value[0].value,l.value[1].value])}b=-1;for(h=c(e,f,0);-1!==b;)e=e.substring(0,b)+f[d][1]+e.substring(b+h.length,e.length),h=b+f[d][1].length,h=c(e,f,h);return{ctype:"string",value:e}}return k};t.substring$3=function(a,g){var c=z(a[0]),
+b=B(a[1]),d=B(a[2]);return"string"===c.ctype&&"number"===b.ctype&&"number"===d.ctype?{ctype:"string",value:c.value.substring(Math.floor(b.value.real),Math.floor(d.value.real))}:k};t.tokenize$2=function(a,g){var c=z(a[0]),b=z(a[1]);if("string"===c.ctype&&"string"===b.ctype)return t.tokenize$2([c,h.turnIntoCSList([b])],g);if("string"===c.ctype&&"list"===b.ctype){c=c.value;if(0===b.value.length){b=!0;if(void 0!==g.autoconvert){var d=z(g.autoconvert);"boolean"===d.ctype&&(b=d.value)}return b&&""!==c&&
+(b=Number(c),!isNaN(b))?m.real(b):w.string(c)}var d=b.value[0],e=h.turnIntoCSList(b.value.slice(1)),c=c.split(d.value);return h.turnIntoCSList(c.map(function(a){return t.tokenize$2([w.string(a),e],g)}))}return k};t.indexof$2=function(a,g){var c=z(a[0]),b=z(a[1]);return"string"===c.ctype&&"string"===b.ctype?(c=c.value.indexOf(b.value),m.real(c+1)):k};t.indexof$3=function(a,g){var c=z(a[0]),b=z(a[1]),d=z(a[2]);return"string"===c.ctype&&"string"===b.ctype&&"number"===d.ctype?(c=c.value.indexOf(b.value,
+Math.round(d.value.real)-1),m.real(c+1)):k};t.parse$1=function(a,g){var c=z(a[0]);return"string"===c.ctype?(c=Ua(c.value),z(c)):k};t.unicode$1=function(a,g){var c;c=z(a[0]);var b=16;if(g.base){var d=z(g.base);"number"===d.ctype&&(b=d.value.real)}if("string"===c.ctype)c=parseInt(c.value,b);else if("number"===c.ctype)c=c.value.real;else return k;"undefined"!==typeof String.fromCodePoint?c=String.fromCodePoint(c):65535>=c?c=String.fromCharCode(c):(c-=65536,c=String.fromCharCode((c>>10)+55296,(c&1023)+
+56320));return w.string(c)};t.international$1=function(a,g){return t.international$2([a[0],null],g)};t.international$2=function(a,g){var c=z(a[0]);if("string"!==c.ctype)return k;var b=(p.translations||{})[p.language||"en"]||{};if(!b.hasOwnProperty(c.value))return c;var d=b[c.value];if("string"===typeof d)return w.string(d);if(null===a[1])return c;var h=z(a[1]),h="number"===h.ctype?h.value.real:0,b=(b._pluralFormFunction||ce)(h);return b<d.length?w.string(d[b]):c};t.currentlanguage$0=function(a,g){return w.string(p.language||
+"en")};D.basismap=function(a,g,c,b){var d=h.turnIntoCSList([a,g,c]),d=h.adjoint3(h.transpose(d));b=w.mult(d,b);d=h.turnIntoCSList([w.mult(b.value[0],a),w.mult(b.value[1],g),w.mult(b.value[2],c)]);return h.transpose(d)};t.map$8=function(a,g){var c=K(a[0]),b=K(a[1]),d=K(a[2]),e=K(a[3]),f=K(a[4]),m=K(a[5]),l=K(a[6]),n=K(a[7]);return f!==k&&m!==k&&l!==k&&n!==k&&c!==k&&b!==k&&d!==k&&e!==k?(f=D.basismap(f,m,l,n),c=D.basismap(c,b,d,e),c=w.mult(f,h.adjoint3(c)),h.normalizeMax(c)):k};t.map$6=function(a,g){var c=
+K(a[0]),b=K(a[1]),d=K(a[2]),e=h.realVector([0,0,1]),f=h.cross,m=f(f(d,f(e,f(c,b))),f(b,f(e,f(c,d)))),l=K(a[3]),n=K(a[4]),p=K(a[5]),e=f(f(p,f(e,f(l,n))),f(n,f(e,f(l,p))));return l!==k&&n!==k&&p!==k&&e!==k&&c!==k&&b!==k&&d!==k&&m!==k?(l=D.basismap(l,n,p,e),c=D.basismap(c,b,d,m),c=w.mult(l,h.adjoint3(c)),h.normalizeMax(c)):k};t.map$4=function(a,g){var c=h.ii,b=h.jj,d=K(a[0]),e=K(a[1]),f=K(a[2]),m=K(a[3]);return f!==k&&m!==k&&d!==k&&e!==k?(f=D.basismap(f,m,c,b),c=D.basismap(d,e,c,b),c=w.mult(f,h.adjoint3(c)),
+h.normalizeMax(c)):k};t.map$2=function(a,g){var c=h.ii,b=h.jj,d=K(a[0]),e=w.add(h.realVector([1,0,0]),d),f=K(a[1]),m=w.add(h.realVector([1,0,0]),f);return f!==k&&m!==k&&d!==k&&e!==k?(f=D.basismap(f,m,c,b),c=D.basismap(d,e,c,b),c=w.mult(f,h.adjoint3(c)),h.normalizeMax(c)):k};t.pointreflect$1=function(a,g){var c=h.ii,b=h.jj,d=K(a[0]),e=w.add(h.realVector([1,0,0]),d),f=w.add(h.realVector([-1,0,0]),d);return f!==k&&d!==k&&e!==k?(f=D.basismap(d,f,c,b),c=D.basismap(d,e,c,b),c=w.mult(f,h.adjoint3(c)),h.normalizeMax(c)):
+k};t.linereflect$1=function(a,g){var c=h.ii,b=h.jj,d=K(a[0]),e=h.realVector([Math.random(),Math.random(),Math.random()]),f=h.realVector([Math.random(),Math.random(),Math.random()]),e=h.cross(e,d),f=h.cross(f,d);return d!==k&&e!==k?(d=D.basismap(e,f,c,b),c=D.basismap(e,f,b,c),c=w.mult(d,h.adjoint3(c)),h.normalizeMax(c)):k};D.extractPointVec=function(a){var g={ok:!1};if("geo"===a.ctype){var c=a.value;if("P"===c.kind)return g.x=ta.getField(c,"x"),g.y=ta.getField(c,"y"),g.z=m.real(1),g.ok=!0,g}if("list"!==
+a.ctype)return g;var b=a.value;if(2===b.length&&(a=b[0],c=b[1],"number"===a.ctype&&"number"===c.ctype))return g.x=a,g.y=c,g.z=m.real(1),g.ok=!0,g;3===b.length&&(a=b[0],c=b[1],b=b[2],"number"===a.ctype&&"number"===c.ctype&&"number"===b.ctype&&(g.x=m.div(a,b),g.y=m.div(c,b),g.z=m.real(1),g.ok=!0));return g};t.polygon$1=function(a,g){var c=z(a[0]);if("list"===c.ctype){for(var b=[],d=0;d<c.value.length;d++){var h=D.extractPoint(c.value[d]);if(!h.ok)return k;b[d]={X:h.x,Y:h.y}}return{ctype:"shape",type:"polygon",
+value:[b]}}return k};t.circle$2=function(a,g){var c=B(a[0]),b=B(a[1]),c=D.extractPointVec(c);if(!c.ok||"number"!==b.ctype)return k;c=h.turnIntoCSList([c.x,c.y,c.z]);return{ctype:"shape",type:"circle",value:h.turnIntoCSList([c,b])}};t.screen$0=function(a,g){var c=y.drawingstate.initialmatrix,b=function(a,g){var b=a-c.tx,d=g+c.ty;return{X:(b*c.d-d*c.b)/c.det,Y:-(-b*c.c+d*c.a)/c.det}};return{ctype:"shape",type:"polygon",value:[[b(0,0),b(ca,0),b(ca,da),b(0,da)]]}};t.halfplane$2=function(a,g){var c=B(a[0]),
+b=B(a[1]),d=K(c),e=K(b);if(c!==k&&b!==k){var f=b.usage,b=d,l=e;if("Line"===c.usage||"Point"===f)b=e,l=d;c=h.turnIntoCSList([l.value[0],l.value[1],m.zero]);c=h.cross(c,b);c=h.cross(l,c);c=w.div(c,c.value[2]);b=w.div(b,b.value[2]);b=h.sub(b,c);l=h.abs(b);b=w.div(b,l);l=c.value[0].value.real;c=c.value[1].value.real;d=1E3*b.value[0].value.real;b=1E3*b.value[1].value.real;return{ctype:"shape",type:"polygon",value:[[{X:l+b/2,Y:c-d/2},{X:l+b/2+d,Y:c-d/2+b},{X:l-b/2+d,Y:c+d/2+b},{X:l-b/2,Y:c+d/2}]]}}return k};
+t.element$1=function(a,g){var c=z(a[0]);return"string"===c.ctype&&v.csnames.hasOwnProperty(c.value)?{ctype:"geo",value:v.csnames[c.value]}:k};D.all$1=function(a,g){var c=z(a[0]);return"geo"===c.ctype&&c.value.incidences?h.ofGeos(c.value.incidences.map(function(a){return v.csnames[a]}).filter(g)):h.nil};t.allpoints$0=function(a,g){return h.ofGeos(v.points)};t.allpoints$1=function(a,g){return D.all$1(a,function(a){return"P"===a.kind})};t.allmasses$0=function(a,g){return h.ofGeos(ma)};t.allmasses$1=
+function(a,g){return D.all$1(a,function(a){return"P"===a.kind&&a.behavior&&"Mass"===a.behavior.type})};t.allsprings$0=function(a,g){return h.ofGeos(Hc)};t.allsprings$1=function(a,g){return D.all$1(a,function(a){return"S"===a.kind&&a.behavior&&"Spring"===a.behavior.type})};t.alllines$0=function(a,g){return h.ofGeos(v.lines)};t.alllines$1=function(a,g){return D.all$1(a,function(a){return"L"===a.kind||"S"===a.kind})};t.allsegments$0=function(a,g){return h.ofGeos(v.lines.filter(function(a){return"S"===
+a.kind}))};t.allsegments$1=function(a,g){return D.all$1(a,function(a){return"S"===a.kind})};t.allconics$0=function(a,g){return h.ofGeos(v.conics)};t.allconics$1=function(a,g){return D.all$1(a,function(a){return"C"===a.kind})};t.allcircles$0=function(a,g){return h.ofGeos(v.conics.filter(function(a){return"Circle"===a.matrix.usage}))};t.allcircles$1=function(a,g){return D.all$1(a,function(a){return"C"===a.kind&&"Circle"===a.matrix.usage})};t.allelements$0=function(a,g){return h.ofGeos(v.gslp)};t.allelements$1=
+function(a,g){return D.all$1(a,function(a){return!0})};t.elementsatmouse$0=function(a,g){var c=h.realVector([ra[0],ra[1],1]),b=function(a){if(m._helper.isAlmostZero(a.value[2]))return Infinity;a=h.normalizeZ(a);return h.abs(h.sub(a,c)).value.real},d=function(a){a=h.turnIntoCSList([a.value[0],a.value[1],m.zero]);return h.normalizeMax(h.cross(c,a))},e=function(a){var g=w.mult(a.matrix,c),g=d(g);a=l._helper.IntersectLC(g,a.matrix).map(function(a){return b(a)});return.5>Math.min(a[0],a[1])},f=v.points.filter(function(a){return.5>
+b(a.homog)}),k=v.lines.filter(function(a){var g;g=d(a.homog);g=h.normalizeMax(h.cross(a.homog,g));if((g=.5>b(g))&&"S"===a.kind){var e=a.homog,e=h.turnIntoCSList([e.value[0],e.value[1],m.zero]);a=h.crossratio3(a.farpoint,a.startpos,a.endpos,c,e).value.real;if(0>a||1<a)g=!1}return g}),n=v.conics.filter(function(a){var g=e(a);if(g&&a.isArc){var b=h.crossratio3harm(a.startPoint,a.endPoint,a.viaPoint,c,h.ii);a=b.value[0];b=b.value[1];m._helper.isAlmostZero(a)?(a=m.div(a,b),b=m.real(1)):(b=m.div(b,a),a=
+m.real(1));var d=h.abs(h.turnIntoCSList([b,a]));a=m.div(a,d);b=m.div(b,d);b=m.mult(b,a);0>a.value.real&&(b=m.neg(b));0>b.value.real&&(g=!1)}return g}),f=f.concat(k,n);return h.ofGeos(f)};t.incidences$1=t.allelements$1;t.createpoint$2=function(a,g){var c=z(a[0]),b=K(a[1]);return"string"!==c.ctype?(ka("Name must be a string"),k):"list"!==b.ctype&&h.isNumberVector(b)?(ka("Position must be a number vector"),k):Ka({name:c.value,type:"Free",labeled:!0,pos:b})};t.create$3=function(a,g){var c=z(a[0]),b=z(a[1]),
+d=z(a[2]),e,f;if("string"===c.ctype)e=c.value;else{if("list"!==c.ctype)return ka("Names must be a string or a list of strings"),k;if(1!==c.value.length){e=w.string(c.value.map(function(a){return a.value}).join("__"));e=t.create$3([e,b,d],g);if(e!==k)for(b=w.string(e.kind.replace(/^(.*)s$/,"Select$1")),d=h.turnIntoCSList([w.string(e.name)]),f=0;f<c.value.length;++f)t.create$3([c.value[f],b,d],{index:m.real(f+1)});return e}if("string"!==c.value[0].ctype)return ka("Element of names list must be a string"),
+k;e=c.value[0].value}if("string"!==b.ctype)return ka("Type must be a string"),k;if("list"!==d.ctype)return ka("Arguments must be a list"),k;if(!l.hasOwnProperty(b.value)&&!Ac.hasOwnProperty(b.value)&&!zd.hasOwnProperty(b.value))return ka("Invalid geometric operation: '"+b.value+"'"),k;var c=[],n=null;for(f=0;f<d.value.length;f++){var p=d.value[f];if("string"===p.ctype)c.push(p.value);else if("geo"===p.ctype)c.push(p.value.name);else if(n=K(p),n===k)return ka("Unknown argument type"),k}e={name:e,type:b.value,
+labeled:!0};n&&(e.pos=n);0<c.length&&(e.args=c);b=B(g.index);"number"===b.ctype&&(e.index=b.value.real|0);return Ka(e)};t.javascript$1=function(a,g){var c=z(a[0]);"string"===c.ctype&&(new Function(c.value)).call(sa);return k};t.use$1=function(a,g){function c(a,c,g){t[a.toLowerCase()+"$"+c]=g}var b=z(a[0]);if("string"===b.ctype){var b=b.value,d;p.plugins&&(d=p.plugins[b]);d||(d=va._pluginRegistry[b]);if(d)return d({instance:sa,config:p,nada:k,evaluate:z,extractPoint:D.extractPoint,evaluateAndVal:B,
+defineFunction:c,addShutdownHook:jb.push.bind(jb),addAutoCleaningEventListener:H,getVariable:J.getvar.bind(J),getInitialMatrix:function(){return y.drawingstate.initialmatrix},setTextRenderer:function(a,c){Jc=a;c&&(Bd=c)},getImage:function(a,c){"string"===typeof a&&(a=w.string(a));var g=Ja(a);if(!g)return null;!c&&g.cdyUpdate&&g.cdyUpdate();return g},getMyfunction:function(a){return db.hasOwnProperty(a)?db[a]:null}}),{ctype:"boolean",value:!0};ka("Plugin "+b+" not found");return{ctype:"boolean",value:!1}}return k};
+t.format$2=function(a,g){function c(a){a=a.toFixed(e);var c;do c=a,a=a.substring(0,a.length-1);while(""!==a&&"-"!==a&&+a===+c);return""+c}function b(a){var g;return"number"===a.ctype?(g=c(a.value.real),a=c(a.value.imag),g="0"===a?g:"-"===a.substring(0,1)?g+" - i*"+a.substring(1):g+" + i*"+a,{ctype:"string",value:g}):"list"===a.ctype?{ctype:"list",value:a.value.map(b)}:{ctype:"string",value:Z(a).toString()}}var d=B(a[0]),h=B(a[1]),e;return"number"!==d.ctype&&"list"!==d.ctype||"number"!==h.ctype?k:
+(e=Math.max(0,Math.min(20,Math.round(h.value.real))),b(d))};Date.now||(Date.now=function(){return(new Date).getTime()});var Pd=0;t.timestamp$0=function(a,g){return m.real(Date.now())};t.seconds$0=function(a,g){return m.real((Date.now()-Pd)/1E3)};t.resetclock$0=function(a,g){Pd=Date.now();return k};t.time$0=function(a,g){var c=new Date;return h.realVector([c.getHours(),c.getMinutes(),c.getSeconds(),c.getMilliseconds()])};t.date$0=function(a,g){var c=new Date;return h.realVector([c.getFullYear(),c.getMonth()+
+1,c.getDate()])};t.simulationtime$0=function(a,g){return m.real(Ib*Md)};t.settimeout$2=function(a,g){function c(){z(d);e()}var b=z(a[0]),d=a[1];"number"===b.ctype&&"undefined"!==typeof window&&window.setTimeout(c,1E3*b.value.real);return k};D.formatForWebGL=function(a){return a.toFixed(10)};t.generateWebGL$2=function(a,g){var c=D.formatForWebGL,b=a[0],d=z(a[1]);console.log(d);if("list"!==d.ctype)return k;for(var h=[],e=0;e<d.value.length;e++)"string"===d.value[e].ctype&&h.push(d.value[e].value);console.log("***********");
+console.log(h);d=D.plotvars(b);console.log(d);-1===d.indexOf("a")&&-1===d.indexOf("b")&&-1===d.indexOf("c")&&-1===d.indexOf("d")&&-1===d.indexOf("e")&&-1===d.indexOf("f")&&(b=B(b));if("number"===b.ctype)return{ctype:"string",value:"vec2("+c(b.value.real)+","+c(b.value.imag)+")"};if("variable"===b.ctype)return{ctype:"string",value:b.name};if("string"===b.ctype||"void"===b.ctype)return b;if(2===b.args.length&&("infix"===b.ctype||"function"===b.ctype)){c=t.compileToWebGL$1([b.args[0]],{});d=t.compileToWebGL$1([b.args[1]],
+{});if("+"===b.oper||"add"===b.oper)return void 0===c.value||"void"===c.ctype?{ctype:"string",value:d.value}:{ctype:"string",value:"addc("+c.value+","+d.value+")"};if("*"===b.oper||"mult"===b.oper)return{ctype:"string",value:"multc("+c.value+","+d.value+")"};if("/"===b.oper||"div"===b.oper)return{ctype:"string",value:"divc("+c.value+","+d.value+")"};if("-"===b.oper||"sub"===b.oper)return void 0===c.value||"void"===c.ctype?{ctype:"string",value:"negc("+d.value+")"}:{ctype:"string",value:"subc("+c.value+
+","+d.value+")"};if("^"===b.oper||"pow"===b.oper)return{ctype:"string",value:"powc("+c.value+","+d.value+")"}}if("function"===b.ctype&&1===b.args.length){c=t.compileToWebGL$1([b.args[0]],{});if("sin$1"===b.oper)return{ctype:"string",value:"sinc("+c.value+")"};if("cos$1"===b.oper)return{ctype:"string",value:"cosc("+c.value+")"};if("tan$1"===b.oper)return{ctype:"string",value:"tanc("+c.value+")"};if("exp$1"===b.oper)return{ctype:"string",value:"expc("+c.value+")"};if("log$1"===b.oper)return{ctype:"string",
+value:"logc("+c.value+")"};if("arctan$1"===b.oper)return{ctype:"string",value:"arctanc("+c.value+")"};if("arcsin$1"===b.oper)return{ctype:"string",value:"arcsinc("+c.value+")"};if("arccos$1"===b.oper)return{ctype:"string",value:"arccosc("+c.value+")"};if("sqrt$1"===b.oper)return{ctype:"string",value:"sqrtc("+c.value+")"}}return k};t.compileToWebGL$1=function(a,g){var c,b;c=D.formatForWebGL;var d=a[0];b=D.plotvars(d);-1===b.indexOf("a")&&-1===b.indexOf("b")&&-1===b.indexOf("c")&&-1===b.indexOf("d")&&
+-1===b.indexOf("e")&&-1===b.indexOf("f")&&(d=B(d));if("number"===d.ctype)return{ctype:"string",value:"vec2("+c(d.value.real)+","+c(d.value.imag)+")"};if("variable"===d.ctype)return{ctype:"string",value:d.name};if("string"===d.ctype||"void"===d.ctype)return d;if(2===d.args.length&&("infix"===d.ctype||"function"===d.ctype)){c=t.compileToWebGL$1([d.args[0]],{});b=t.compileToWebGL$1([d.args[1]],{});if("+"===d.oper||"add"===d.oper)return void 0===c.value||"void"===c.ctype?{ctype:"string",value:b.value}:
+{ctype:"string",value:"addc("+c.value+","+b.value+")"};if("*"===d.oper||"mult"===d.oper)return{ctype:"string",value:"multc("+c.value+","+b.value+")"};if("/"===d.oper||"div"===d.oper)return{ctype:"string",value:"divc("+c.value+","+b.value+")"};if("-"===d.oper||"sub"===d.oper)return void 0===c.value||"void"===c.ctype?{ctype:"string",value:"negc("+b.value+")"}:{ctype:"string",value:"subc("+c.value+","+b.value+")"};if("^"===d.oper||"pow"===d.oper)return{ctype:"string",value:"powc("+c.value+","+b.value+
+")"}}if("function"===d.ctype&&1===d.args.length){c=t.compileToWebGL$1([d.args[0]],{});if("sin$1"===d.oper)return{ctype:"string",value:"sinc("+c.value+")"};if("cos$1"===d.oper)return{ctype:"string",value:"cosc("+c.value+")"};if("tan$1"===d.oper)return{ctype:"string",value:"tanc("+c.value+")"};if("exp$1"===d.oper)return{ctype:"string",value:"expc("+c.value+")"};if("log$1"===d.oper)return{ctype:"string",value:"logc("+c.value+")"};if("arctan$1"===d.oper)return{ctype:"string",value:"arctanc("+c.value+
+")"};if("arcsin$1"===d.oper)return{ctype:"string",value:"arcsinc("+c.value+")"};if("arccos$1"===d.oper)return{ctype:"string$1",value:"arccosc("+c.value+")"};if("sqrt$1"===d.oper)return{ctype:"string",value:"sqrtc("+c.value+")"}}return k};t.setsimulationspeed$1=function(a,g){var c=B(a[0]);"number"===c.ctype&&ha(c.value.real);return k};t.setsimulationaccuracy$1=function(a,g){var c=B(a[0]);"number"===c.ctype&&"undefined"!==typeof O&&"undefined"!==typeof O.env&&(O.env.accuracy=Math.max(1,c.value.real|
+0));return k};t.setsimulationquality$1=function(a,g){var c=B(a[0]);"number"===c.ctype&&"undefined"!==typeof O&&"undefined"!==typeof O.env&&(c=c.value.real,0===c&&(O.env.errorbound=.01,O.env.lowestdeltat=1E-5,O.env.slowdownfactor=2),1===c&&(O.env.errorbound=.001,O.env.lowestdeltat=1E-7,O.env.slowdownfactor=2),2===c&&(O.env.errorbound=1E-5,O.env.lowestdeltat=1E-10,O.env.slowdownfactor=4),3===c&&(O.env.errorbound=1E-6,O.env.lowestdeltat=1E-12,O.env.slowdownfactor=4));return k};var fc=null,mc=null;t.createtool$3=
+function(a,g){var c,b="left",d="top",h=null;g.space&&(c=z(g.space),"number"===c.ctype&&(h=c.value.real/2));var e=null;g.toolbar&&(c=z(g.toolbar),"string"===c.ctype&&((e=document.getElementById(c.value))||console.warn("Element #"+c.value+" not found")));if(!e){if(g.reference){var f=z(g.reference);if("string"===f.ctype)switch(f.value){case "UR":b="right";break;case "LL":d="bottom";break;case "LR":b="right",d="bottom"}}e=document.createElement("div");e.className="CindyJS-toolbar";na.parentNode.appendChild(e);
+f=z(a[1]);c=z(a[2]);"number"===f.ctype&&(e.style[b]=f.value.real+"px");"number"===c.ctype&&(e.style[d]=c.value.real+"px");null!==h&&(e.style.margin=-h+"px")}f=z(a[0]);if("string"===f.ctype)f=[[f.value]];else if("list"===f.ctype)f=f.value.map(function(a){return"string"===a.ctype?[a.value]:"list"===a.ctype?a.value.map(function(a){return"string"===a.ctype?a.value:null}):[null]});else return ka("Name must be a string or a list of strings"),k;if(g.flipped&&(c=z(g.flipped),"boolean"===c.ctype&&c.value)){ka("Flipping");
+var m=0;c=f.length;f.forEach(function(a){a.length>m&&(m=a.length)});for(var l=[],n=0;n<m;++n){l[n]=[];for(var p=0;p<c;++p)l[n][p]=f[p][n]||null}f=l}"bottom"===d&&f.reverse();f.forEach(function(a){"right"===b&&a.reverse();var c=document.createElement("div");e.appendChild(c);a.forEach(function(a){function g(){fc&&fc.classList.remove("CindyJS-active");fc=d;d.classList.add("CindyJS-active");xc=a;var c=G[xc].actions;mc&&(mc.textContent=c[0].tooltip||"");Aa=[];xb=Ya=0}G.hasOwnProperty(a)||(ka("Tool '"+
+a+"' not implemented yet."),a=null);if(null===a){var b=document.createElement("span");b.className="CindyJS-spacer";c.appendChild(b)}else{var d=document.createElement("button"),b=document.createElement("img");b.src=va.getBaseDir()+"images/"+a+".png";d.appendChild(b);d.addEventListener("click",g);fc||g();null!==h&&(d.style.margin=h+"px");c.appendChild(d)}})});return k};t.dropped$0=function(){return rc};t.droppoint$0=function(){return sc};t.parsecsv$1=function(a,g){var c=!0,b=B(g.autoconvert);"boolean"===
+b.ctype&&(c=b.value);var d=null,b=B(g.delimiter);"string"===b.ctype&&/^[^\"\r\n]$/.test(b.value)&&(d=b.value);b=B(a[0]);if("string"!==b.ctype)return ka("CSV data is not a string"),k;var b=b.value,e='(?:"((?:[^"]+|"")*)"|([^]*?))(\r\n|(,)|[\r\n]|$)';d&&(d=d.replace(/[^A-Za-z0-9]/g,"\\$&").replace(/\$/g,"$$$$"),e=e.replace(/,/g,d));for(var e=new RegExp(e,"g"),d=[],f=[],l=null;e.lastIndex<b.length;){var n=e.exec(b),p=n[2];"string"===typeof n[1]&&(p=n[1].replace(/""/g,'"'));p=c?/^[Tt]rue$/.test(p)?w.bool(!0):
+/^[Ff]alse$/.test(p)?w.bool(!1):/^[\-+]?([0-9]+(\.[0-9]*)?|\.[0-9]+|Infinity)$/.test(p)?m.real(Number(p)):w.string(p):w.string(p);d.push(p);n[4]&&e.lastIndex===b.length&&(d.push(w.string("")),n={});if(!n[4]){null===l&&(l=d.length);if(l<d.length)for(l=d.length,n=0;n<f.length;++n)for(p=f[n].length;p<l;++p)f[n][p]=k;else if(l>d.length)for(n=d.length;n<l;++n)d[n]=k;f.push(d);d=[]}}return h.turnIntoCSList(f.map(h.turnIntoCSList))};t.load$2=function(a,g){return t.load$3([a[0],null,a[1]],g)};t.load$3=function(a,
+g){function c(){if(f.readyState===XMLHttpRequest.DONE){var c;200===f.status?c=w.string(String(f.responseText)):(ka("Failed to load "+h+": "+f.statusText),c=k);J.newvar(b);J.setvar(b,c);z(a[2]);J.removevar(b);e()}}var b="#";null!==a[1]&&"variable"===a[1].ctype&&(b=a[1].name);var d=B(a[0]),h=null,f=null;"string"===d.ctype&&/^https?:\/\//.test(d.value)&&(h=d.value);return null!==h?(f=new XMLHttpRequest,f.onreadystatechange=c,f.open("GET",h),f.send(),w.bool(!0)):k};D.extractPoint=function(a){var g={ok:!1};
+if("geo"===a.ctype){var c=a.value;if("P"===c.kind)return g.x=ta.getField(c,"x").value.real,g.y=ta.getField(c,"y").value.real,g.ok=!0,g}if("list"!==a.ctype)return g;var b=a.value;if(2===b.length&&(a=b[0],c=b[1],"number"===a.ctype&&"number"===c.ctype))return g.x=a.value.real,g.y=c.value.real,g.ok=!0,g;3===b.length&&(a=b[0],c=b[1],b=b[2],"number"===a.ctype&&"number"===c.ctype&&"number"===b.ctype&&(a=m.div(a,b),c=m.div(c,b),g.x=a.value.real,g.y=c.value.real,g.ok=!0));return g};t.draw$1=function(a,g){var c=
+B(a[0]);if("shape"===c.ctype)D.drawshape(c,g);else if("Line"===c.usage)x.handleModifs(g,x.lineModifs),x.drawline(c);else{var b=D.extractPoint(c);if(!b.ok){if("undefined"!==typeof c.value&&2===c.value.length)return t.draw$2(c.value,g);return}null!==g&&x.handleModifs(g,x.pointModifs);x.drawpoint(b)}return k};t.draw$2=function(a,g){var c=B(a[0]),b=B(a[1]),c=D.extractPoint(c),b=D.extractPoint(b);if(!c.ok||!b.ok)return k;null!==g&&x.handleModifs(g,x.lineModifs);x.drawsegcore(c,b);return k};t.drawcircle$2=
+function(a,g){return D.drawcircle(a,g,"D")};D.arcHelper=function(a){var g={};g.startPoint=K(a[0]);g.viaPoint=K(a[1]);g.endPoint=K(a[2]);return g};t.fillcircle$2=function(a,g){return D.drawcircle(a,g,"F")};t.drawarc$3=function(a,g){var c=D.arcHelper(a);return D.drawarc(c,g,"D")};t.fillarc$3=function(a,g){var c=D.arcHelper(a);return D.drawarc(c,g,"F")};D.drawarc=function(a,g,c){var b=a.startPoint,d=a.viaPoint;a=a.endPoint;if(!h._helper.isAlmostReal(h.turnIntoCSList([b,d,a])))return k;x.handleModifs(g,
+x.conicModifs);x.preDrawCurve();g=h.det3(b,d,a);if(1E-12<Math.abs(g.value.real)){g=l._helper.ConicBy5(null,b,d,a,h.ii,h.jj);var e=l._helper.CenterOfConic(g),e=h.normalizeMax(e);g=m.real(0);var f=h.turnIntoCSList([h.turnIntoCSList([e.value[2],g,m.neg(e.value[0])]),h.turnIntoCSList([g,e.value[2],m.neg(e.value[1])]),h.turnIntoCSList([g,g,e.value[2]])]);g=h.normalizeZ(w.mult(f,b));h.normalizeZ(w.mult(f,d));f=h.normalizeZ(w.mult(f,a));g=-Math.atan2(g.value[1].value.real,g.value[0].value.real);f=-Math.atan2(f.value[1].value.real,
+f.value[0].value.real);e=h.normalizeZ(e);b=h.normalizeZ(b);d=h.normalizeZ(d);a=h.normalizeZ(a);var n=h.abs(h.sub(b,e)),p=[e.value[0].value.real,e.value[1].value.real],e=y.drawingstate.matrix,r=p[0]*e.a-p[1]*e.b+e.tx,p=p[0]*e.c-p[1]*e.d-e.ty,b=0<h.det3(b,d,a).value.real;A.save();A.beginPath();A.translate(r,p);A.arc(0,0,n.value.real*e.sdet,g,f,b);"F"===c&&(A.fillStyle=x.lineColor,A.closePath(),A.fill());"D"===c&&A.stroke();A.restore()}else{if("D"!==c)return k;c=D.extractPoint(b);g=D.extractPoint(d);
+f=D.extractPoint(a);if(!c.ok||!g.ok||!f.ok)return k;n=(c.x-f.x)*(c.x-f.x)+(c.y-f.y)*(c.y-f.y);e=(f.x-g.x)*(f.x-g.x)+(f.y-g.y)*(f.y-g.y);if(1E-12>(c.x-g.x)*(c.x-g.x)+(c.y-g.y)*(c.y-g.y)||1E-12>n||1E-12>e)return k;0>h.crossratio3(b,a,d,h.cross(h.cross(b,d),h.linfty),h.ii).value.real?x.drawsegcore(c,f):x.drawRaySegment(b,a)}return k};D.drawcircle=function(a,g,c){var b=B(a[0]);a=B(a[1]);var d=D.extractPoint(b);if(!d.ok||"number"!==a.ctype||!m._helper.isAlmostReal(a))return k;var b=y.drawingstate.matrix,
+e=d.x*b.a-d.y*b.b+b.tx,d=d.x*b.c-d.y*b.d-b.ty;x.handleModifs(g,x.conicModifs);x.preDrawCurve();A.lineJoin="miter";A.beginPath();A.arc(e,d,Math.abs(a.value.real)*b.sdet,0,2*Math.PI);A.closePath();"D"===c&&A.stroke();"F"===c&&(A.fillStyle=x.lineColor,A.fill());"C"===c&&A.clip();return k};t.drawconic$1=function(a,b){var c=B(a[0]);if("list"!==c.ctype||3!==c.value.length&&6!==c.value.length)return console.error("could not parse conic"),k;if(6===c.value.length){for(var d=0;6>d;d++)if("number"!==c.value[d].ctype)return console.error("could not parse conic"),
+k;var e=m.real(.5),d=c.value[0],f=c.value[2],f=m.mult(f,e),l=c.value[1],n=c.value[3],n=m.mult(n,e),p=c.value[4],p=m.mult(p,e),c=c.value[5],c=h.turnIntoCSList([h.turnIntoCSList([d,f,n]),h.turnIntoCSList([f,l,p]),h.turnIntoCSList([n,p,c])])}else{if(!h.isNumberMatrix(c).value||3!==c.value.length||3!==c.value[0].value.length)return k;d=h.transpose(c);h.equals(c,d).value||(c=h.add(d,c))}return D.drawconic(c,b)};D.drawconic=function(a,b){function c(a,c){var b=(p*a+r*c+t)*a+(u*c+v)*c+w;return 0<=b?1:0>b?
+-1:NaN}function d(a){K.next=a;a.prev=K;return K=a}function e(a,b,g,d){return{a:a,b1:b,b2:g,vertical:!0,index:d,sign:function(b){return c(a,b)},mkp:function(c){return{x:a,y:c}},sol:Jb(u,r*a+v,(p*a+t)*a+w),discr:function(){return Jb(E,-2*C,z)},tpt:function(a){return{x:a,y:-.5*(r*a+v)/u}}}}function f(a,b,g,d){return{a:a,b1:b,b2:g,vertical:!1,index:d,sign:function(b){return c(b,a)},mkp:function(c){return{x:c,y:a}},sol:Jb(p,r*a+t,(u*a+v)*a+w),discr:function(){return Jb(E,-2*F,D)},tpt:function(a){return{x:-.5*
+(r*a+t)/p,y:a}}}}function m(a){var c=Math.min(a.b1,a.b2),b=Math.max(a.b1,a.b2),g=a.sign(c),e=a.sign(b);if(!isFinite(g*e))return!1;var h=a.sol,f;if(g!==e){if(null===h)return!1;f=.5*(h[0]+h[1]);f>c&&f<b?(c=a.sign(f),f=h[c===e?0:1]):(g=.5*(c+b),f=h[Math.abs(g-h[0])<Math.abs(g-h[1])?0:1]);N.push(d(a.mkp(f)))}else{if(null===h){if(0>=G)return!0;h=a.discr();if(null===h)return!0;a=a.tpt(h[a.index]);a.x>=H&&a.x<=J&&a.y>=L&&a.y<=M&&d(a);return!0}f=.5*(h[0]+h[1]);if(!(f>c&&f<b))return!0;c=a.sign(f);if(c===g||
+isNaN(c))return!0;a.b1>a.b2&&(h=[h[1],h[0]]);N.push(d(a.mkp(h[0])));N.push(d(a.mkp(h[1])))}return!0}function k(a,c,b,g,d){var e=c-g,h=b-a,q=a*g-c*b,f=C*e+F*h+E*q;if(1E-14>Math.abs(f))return A.lineTo(b,g);var m=(z*e+B*h+C*q)/f,e=(B*e+D*h+F*q)/f;if(!isFinite(m)||!isFinite(e)||.04>Math.abs(a*e+m*g+b*c-b*e-m*c-a*g))return A.lineTo(b,g);do if(!(10<d)){var q=.5*(a+b),h=.5*(c+g),l=m-q,f=e-h;if(!(.04>l*l+f*f)){var n=p*l*l+r*l*f+u*f*f,oa=2*p*l*q+r*(l*h+f*q)+2*u*f*h+t*l+v*f,W=(p*q+r*h+t)*q+(u*h+v)*h+w,xa=Jb(n,
+oa,W);xa||(xa=[-.5*oa/n,-2*W/oa]);if(0<xa[0])xa=xa[0];else if(0<=xa[1])xa=xa[1];else break;l=q+xa*l;f=h+xa*f;q=l-.5*(m+q);h=f-.5*(e+h);if(!(.04>q*q+h*h)){k(a,c,l,f,d+1);k(l,f,b,g,d+1);return}}}while(0);A.quadraticCurveTo(m,e,b,g)}x.handleModifs(b,x.conicModifs);if(0!==x.lsize){x.preDrawCurve();var l;l=h.normalizeMax(a);if(h._helper.isAlmostReal(l)){var n=y.toMat();l=h.mult(h.transpose(n),l);l=h.mult(l,n);l=h.normalizeMax(l);var p=l.value[0].value[0].value.real,r=2*l.value[0].value[1].value.real,t=
+2*l.value[0].value[2].value.real,u=l.value[1].value[1].value.real,v=2*l.value[1].value[2].value.real,w=l.value[2].value[2].value.real,z=4*w*u-v*v,B=v*t-2*w*r,C=v*r-2*u*t,D=4*w*p-t*t,F=t*r-2*v*p,E=4*u*p-r*r,G=E;l=u*D+r*B+p*z-w*E;0>l&&(p=-p,r=-r,t=-t,u=-u,v=-v,w=-w,l=-l);l=x.lsize;var H=-l,L=-l,J=ca+l,M=da+l,N=[],K=l={};if(m(e(H,L,M,0))&&m(f(M,H,J,1))&&m(e(J,M,L,1))&&m(f(L,J,H,0))&&K!==l){K.next=l.next;l.next.prev=K;A.beginPath();var I,O;if(0===N.length){I=K;A.moveTo(I.x,I.y);do O=I.next,k(I.x,I.y,
+O.x,O.y,0),I=O;while(I!==K);A.closePath()}n=1===c(H,L)?0:1;if(4===N.length){var P=0;for(l=0;2>l;++l){I=N[l];O=N[l+2];var Q=O.x-I.x;I=O.y-I.y;I=(p*Q+r*I)*Q+u*I*I;Math.abs(I)>Math.abs(P)&&(P=I)}if(isNaN(P))return;0<=P&&(n=1-n)}for(l=n;l<N.length;l+=2)for(I=N[l],n=N[(l+1)%N.length],A.moveTo(I.x,I.y),O=I.next;I!==n;O=(I=O).next)k(I.x,I.y,O.x,O.y,0);A.stroke()}}}};t.drawall$1=function(a,b){var c=z(a[0]);if("list"===c.ctype){x.handleModifs(b,x.pointAndLineModifs);for(var d=0;d<c.value.length;d++)t.draw$1([c.value[d]],
+null)}return k};t.connect$1=function(a,b){return D.drawpolygon(a,b,"D",!1)};t.drawpoly$1=function(a,b){return D.drawpolygon(a,b,"D",!0)};t.fillpoly$1=function(a,b){return D.drawpolygon(a,b,"F",!0)};t.drawpolygon$1=function(a,b){return D.drawpolygon(a,b,"D",!0)};t.fillpolygon$1=function(a,b){return D.drawpolygon(a,b,"F",!0)};D.drawpolygon=function(a,b,c,d){function e(){for(var a=m.value,c=0;c<a.length;c++){var b=a[c],g;for(g=0;g<b.length;g++){var d=b[g],h=d.X*f.a-d.Y*f.b+f.tx,d=d.X*f.c-d.Y*f.d-f.ty;
+0===g?A.moveTo(h,d):A.lineTo(h,d)}A.closePath()}}function h(){var a;for(a=0;a<m.value.length;a++){var c=D.extractPoint(m.value[a]);if(!c.ok)return;var b=c.x*f.a-c.y*f.b+f.tx,c=c.x*f.c-c.y*f.d-f.ty;0===a?A.moveTo(b,c):A.lineTo(b,c)}d&&A.closePath()}x.handleModifs(b,x.conicModifs);x.preDrawCurve();var f=y.drawingstate.matrix,m=z(a[0]);A.beginPath();"list"===m.ctype&&h();"shape"===m.ctype&&e();"D"===c&&(x.fillColor&&(A.fillStyle=x.fillColor,A.fill(x.fillrule)),A.stroke());"F"===c&&(A.fillStyle=x.lineColor,
+A.fill(x.fillrule));"C"===c&&A.clip();return k};var Jc=fd,Bd=function(a,b,c){if(-1!==b.indexOf("\n"))for(b=b.split("\n"),a.textContent=b[0],c=1;c<b.length;++c)a.appendChild(document.createElement("br")),a.appendChild(document.createTextNode(b[c]));else a.textContent=b};D.drawtext=function(a,b,c){var d=B(a[0]);a=z(a[1]);var e=D.extractPoint(d);if(!e.ok)return null;x.handleModifs(b,x.textModifs);b=y.drawingstate.textsize;null===b&&(b=ga.textsize);null!==x.size&&(b=x.size);A.fillStyle=x.textColor;var h=
+y.drawingstate.matrix,d=e.x*h.a-e.y*h.b+h.tx+x.xOffset,e=e.x*h.c-e.y*h.d-h.ty-x.yOffset;a=Z(a);va._pluginRegistry.katex||"string"!==typeof a||3<=a.split("$").length&&pa("katex","katex-plugin.js",!0);h=x.bold+x.italics+Math.round(10*b)/10+"px "+x.family;A.font=h;return c?c(a,h,d,e,x.align,b):Jc(A,a,d,e,x.align,b,b*ga.lineHeight)};t.drawtext$2=function(a,b){D.drawtext(a,b,null);return k};t.drawtable$2=function(a,b){var c=B(a[0]),d=B(a[1]),e=D.extractPoint(c);if(!e.ok||"list"!==d.ctype)return k;var d=
+d.value,c=d.length,f=-1,m;for(m=0;m<c;++m)"list"===d[m].ctype&&d[m].value.length>f&&(f=d[m].value.length);-1===f?(d=d.map(function(a){return[a]}),f=1):d=d.map(function(a){return h.asList(a).value});var l=100,n=null,p=!0,r=y.drawingstate.textcolor;x.handleModifs(b,{size:!0,color:function(a){h._helper.isNumberVecN(a,3)&&(r=x.makeColor([a.value[0].value.real,a.value[1].value.real,a.value[2].value.real]))},alpha:!0,bold:!0,italics:!0,family:!0,align:!0,x_offset:!0,y_offset:!0,offset:!0,width:function(a){"number"===
+a.ctype&&(l=a.value.real)},height:function(a){"number"===a.ctype&&(n=a.value.real)},border:function(a){"boolean"===a.ctype&&(p=a.value)}});var t=y.drawingstate.textsize;null===t&&(t=ga.textsize);null!==x.size&&(t=x.size);null===n&&(n=1.6*t);A.font=x.bold+x.italics+Math.round(10*t)/10+"px "+x.family;m=y.drawingstate.matrix;var u=f*l,v=c*n,t=e.x*m.a-e.y*m.b+m.tx+x.xOffset,w=e.x*m.c-e.y*m.d-m.ty-x.yOffset-v;if(p){x.preDrawCurve();A.strokeStyle=x.lineColor;A.beginPath();for(m=1;m<c;++m)A.moveTo(t,w+m*
+n),A.lineTo(t+u,w+m*n);for(e=1;e<f;++e)A.moveTo(t+e*l,w),A.lineTo(t+e*l,w+v);A.stroke();A.lineWidth=x.lsize+1;A.beginPath();A.rect(t,w,u,v);A.stroke()}t+=x.align*l+(1-2*x.align)*n*.3;w+=.7*n;A.fillStyle=r;for(m=0;m<c;++m)for(e=0;e<f;++e)u=Z(d[m][e]),Jc(A,u,t+e*l,w+m*n,x.align);return k};D.drawshape=function(a,b){return"polygon"===a.type?D.drawpolygon([a],b,"D",1):"circle"===a.type?D.drawcircle([a.value.value[0],a.value.value[1]],b,"D"):k};D.fillshape=function(a,b){return"polygon"===a.type?D.drawpolygon([a],
+b,"F",1):"circle"===a.type?D.drawcircle([a.value.value[0],a.value.value[1]],b,"F"):k};D.clipshape=function(a,b){return"polygon"===a.type?D.drawpolygon([a],b,"C",1):"circle"===a.type?D.drawcircle([a.value.value[0],a.value.value[1]],b,"C"):k};t.fill$1=function(a,b){var c=z(a[0]);return"shape"===c.ctype?D.fillshape(c,b):k};t.clip$1=function(a,b){var c=z(a[0]);return"shape"===c.ctype?D.clipshape(c,b):"list"===c.ctype?(c=t.polygon$1(a,[]),t.clip$1([c],[])):k};t.plot$1=function(a,b){return t.plot$2([a[0],
+null],b)};t.plot$2=function(a,b){function c(a){return"number"===a.ctype&&m._helper.isAlmostReal(a)}function d(a,c,b,g,e){n++;c=+c.value.real;e=+g.value.real;g=c*E.a-e*E.b+E.tx;c=c*E.c-e*E.d-E.ty;a=+a.value.real;e=+b.value.real;b=a*E.a-e*E.b+E.tx;a=a*E.c-e*E.d-E.ty;p?(A.lineTo(b,a),A.lineTo(g,c)):(A.beginPath(),A.moveTo(b,a),A.lineTo(g,c),p=!0)}function e(a,b,g,h,k){var n=c(g),r=c(h);if(.001>k)!f&&p&&(A.stroke(),p=!1);else if(n||r){var t=m.real((a.value.real+b.value.real)/2);J.setvar(B,t);var u=z(w),
+v=c(u);if(n&&r&&v){var Wb=g.value.real,r=u.value.real,v=h.value.real;if(n=1>Math.abs(Wb+v-2*r)/l){var Wa=m.real((a.value.real+t.value.real)/2);J.setvar(B,Wa);var Wa=z(w),Ra=m.real((t.value.real+b.value.real)/2);J.setvar(B,Ra);Ra=z(w);Wb=Math.abs(Wb+r-2*Wa.value.real)/l;r=Math.abs(r+v-2*Ra.value.real)/l;n=n&&1>Wb&&1>r}n?(d(a,t,g,u,k/2),d(t,b,u,h,k/2)):(e(a,t,g,u,k/2),e(t,b,u,h,k/2))}else e(a,t,g,u,k/2),e(t,b,u,h,k/2)}}var f=!1,l=.2/Tb,n=0,p=!1,r=-10,t=10,u=.1,v=1E3,w=a[0],B;if(null!==a[1]&&"variable"===
+a[1].ctype)B=a[1].name;else{var C=D.plotvars(w);B="#";-1!==C.indexOf("t")&&(B="t");-1!==C.indexOf("z")&&(B="z");-1!==C.indexOf("y")&&(B="y");-1!==C.indexOf("x")&&(B="x")}J.newvar(B);var E=y.drawingstate.matrix;x.handleModifs(b,{color:!0,alpha:!0,size:!0,dashpattern:!0,dashtype:!0,dashing:!0,lineCap:!0,lineJoin:!0,miterLimit:!0,connect:function(a){"boolean"===a.ctype&&(f=a.value)},start:function(a){"number"===a.ctype&&(r=a.value.real)},stop:function(a){"number"===a.ctype&&(t=a.value.real)},steps:function(a){"number"===
+a.ctype&&(v=a.value.real)}});A.strokeStyle=x.lineColor;A.lineWidth=x.lsize;var F,G,H,I,p=!1,C=m.real(14.32);J.setvar(B,C);H=z(w);if("number"!==H.ctype){if(h.isNumberVector(H).value&&2===H.value.length){p=!1;u=(t-r)/v;for(C=r;C<t;C+=u)J.setvar(B,m.real(C)),I=z(w),h.isNumberVector(I).value&&2===I.value.length&&(F=+I.value[0].value.real,G=+I.value[1].value.real,I=F*E.a-G*E.b+E.tx,F=F*E.c-G*E.d-E.ty,p?A.lineTo(I,F):(A.beginPath(),A.moveTo(I,F),p=!0));A.stroke();J.removevar(B)}return k}for(I=r;I<t+u;I+=
+u)C=m.real(I),J.setvar(B,C),H=z(w),C.value.real>r&&e(F,C,G,H,u),F=C,G=H;J.removevar(B);p&&A.stroke();return k};t.plotX$1=function(a,b){var c=a[0],d=D.plotvars(c),e="#";-1!==d.indexOf("t")&&(e="t");-1!==d.indexOf("z")&&(e="z");-1!==d.indexOf("y")&&(e="y");-1!==d.indexOf("x")&&(e="x");J.newvar(e);d=y.drawingstate.matrix;A.fillStyle=y.drawingstate.linecolor;A.lineWidth=1;A.lineCap=x.lineCap;A.lineJoin=x.lineJoin;A.miterLimit=x.miterLimit;for(var h=!1,f=-10;10>f;f+=.01){J.setvar(e,m.real(f));var l=z(c);
+if("number"===l.ctype){var n=+l.value.real,l=f*d.a-n*d.b+d.tx,n=f*d.c-n*d.d-d.ty;h?A.lineTo(l,n):(A.beginPath(),A.moveTo(l,n),h=!0)}}A.stroke();J.removevar(e);return k};D.plotvars=function(a){function b(a,c){var g={},d;for(d=a.length-1;0<=d;--d)g[a[d]]=a[d];for(d=c.length-1;0<=d;--d)g[c[d]]=c[d];d=[];for(var e in g)g.hasOwnProperty(e)&&d.push(g[e]);return d}function c(a,c){for(var b=0;b<a.length;b++)a[b]===c&&(a.splice(b,1),b--);return a}var d,e,h,f;if("variable"===a.ctype)return[a.name];if("infix"===
+a.ctype)return d=D.plotvars(a.args[0]),a=D.plotvars(a.args[1]),b(d,a);if("list"===a.ctype){h=a.value;e=[];for(f=0;f<h.length;f++)d=D.plotvars(h[f]),e=b(e,d);return e}if("function"===a.ctype){h=a.args;e=[];for(f=0;f<h.length;f++)d=D.plotvars(h[f]),e=b(e,d);"apply"!==a.oper&&"select"!==a.oper&&"forall"!==a.oper&&"sum"!==a.oper&&"product"!==a.oper&&"repeat"!==a.oper&&"min"!==a.oper&&"max"!==a.oper&&"sort"!==a.oper||"variable"!==a.args[1].ctype||(e=c(e,a.args[1].name));return e}return[]};t.clrscr$0=function(a,
+b){"undefined"!==typeof ca&&"undefined"!==typeof da&&A.clearRect(0,0,ca,da);return k};t.repaint$0=function(a,b){e();return k};t.screenbounds$0=function(a,b){var c=w.withUsage(h.realVector(y.to(0,0)),"Point"),d=w.withUsage(h.realVector(y.to(ca,0)),"Point"),e=w.withUsage(h.realVector(y.to(ca,da)),"Point"),f=w.withUsage(h.realVector(y.to(0,da)),"Point");return h.turnIntoCSList([c,d,e,f])};t.createimage$3=function(a,b){var c=z(a[0]),d=B(a[1]),e=B(a[2]);if("number"!==d.ctype||"number"!==e.ctype||"string"!==
+c.ctype)return k;var h=document.createElement("canvas");h.id=c.value;h.width=d.value.real;h.height=e.value.real;h.style.display="none";document.body.appendChild(h);bb[c.value]=fa(h,!1);return k};t.clearimage$1=function(a,b){var c=z(a[0]);if("string"!==c.ctype&&"image"!==c.ctype)return k;c=Ja(c);if(!c)return k;var d=c.img;if("undefined"===typeof d||null===d)return k;var e=c.width,h=c.height;d.getContext("2d").clearRect(0,0,e,h);c.generation++;return k};t.canvas$4=function(a,b){var c=B(a[0]),d=B(a[1]),
+e=z(a[2]),h=a[3],f=D.extractPoint(c),m=D.extractPoint(d);if(!f.ok||!m.ok||"string"!==e.ctype&&"image"!==e.ctype)return k;e=Ja(e);if(!e||!e.img.getContext)return k;var d=e.img,l=e.width,c=e.height,n=m.x-f.x,p=m.y-f.y,r=f.x-p*c/l,t=f.y+n*c/l,p=m.x-p*c/l,n=m.y+n*c/l,m=y.from(f.x,f.y,1),r=y.from(r,t,1),p=y.from(p,n,1),f=m[0],t=m[1],n=r[0],u=r[1],v=p[0],w=p[1],r=l*(t-u)/((f-n)*(t-w)-(f-v)*(t-u)),l=l*(f-n)/((t-u)*(f-v)-(t-w)*(f-n)),p=-r*f-l*t,m=(c*(t-w)-c*(t-u))/((f-n)*(t-w)-(f-v)*(t-u)),n=(c*(f-v)-c*(f-
+n))/((t-u)*(f-v)-(t-w)*(f-n)),c=c-m*f-n*t,d=d.getContext("2d"),f=A;A=d;A.save();A.transform(r,m,l,n,p,c);e.generation++;z(h);A.restore();A=f};t.canvas$5=function(a,b){var c=B(a[0]),d=B(a[1]),e=B(a[2]),h=z(a[3]),f=a[4],c=D.extractPoint(c),m=D.extractPoint(d),l=D.extractPoint(e);if(!c.ok||!m.ok||!l.ok||"string"!==h.ctype&&"image"!==h.ctype)return k;h=Ja(h);if(!h||!h.img.getContext)return k;var e=h.img,n=h.width,d=h.height,p=y.from(c.x,c.y,1),r=y.from(m.x,m.y,1),m=y.from(l.x,l.y,1),c=p[0],l=p[1],t=r[0],
+u=r[1],v=m[0],w=m[1],m=((0-n)*(l-w)-0*(l-u))/((c-t)*(l-w)-(c-v)*(l-u)),n=((0-n)*(c-v)-0*(c-t))/((l-u)*(c-v)-(l-w)*(c-t)),r=0-m*c-n*l,p=((d-d)*(l-w)-(d-0)*(l-u))/((c-t)*(l-w)-(c-v)*(l-u)),t=((d-d)*(c-v)-(d-0)*(c-t))/((l-u)*(c-v)-(l-w)*(c-t)),d=d-p*c-t*l,e=e.getContext("2d"),c=A;A=e;A.save();A.transform(m,p,n,t,r,d);h.generation++;z(f);A.restore();A=c};t.screenresolution$0=function(a,b){return m.real(y.drawingstate.matrix.a)};t.layer$1=function(a,b){};t.imagesize$1=function(a,b){var c=Ja(B(a[0]));return c?
+h.realVector([+c.width,+c.height]):k};t.imageready$1=function(a,b){var c=Ja(B(a[0]));return w.bool(!(!c||!c.ready))};t.drawimage$2=function(a,b){function c(){var a=1,c=1,d=1,f=1,q=0,m=1,n=D.extractPoint(e);if(!n.ok)return k;l=Ja(l);if(!l)return k;A.save();var p;void 0!==b.angle&&(p=z(b.angle),"number"===p.ctype&&(q=p.value.real));void 0!==b.rotation&&(p=z(b.rotation),"number"===p.ctype&&(q=p.value.real));void 0!==b.scale&&(p=B(b.scale),"number"===p.ctype&&(c=a=p.value.real),h.isNumberVector(p).value&&
+2===p.value.length&&(a=p.value[0].value.real,c=p.value[1].value.real));void 0!==b.scalex&&(p=z(b.scalex),"number"===p.ctype&&(a=p.value.real));void 0!==b.scaley&&(p=z(b.scaley),"number"===p.ctype&&(c=p.value.real));void 0!==b.flipx&&(p=z(b.flipx),"boolean"===p.ctype&&p.value&&(d=-1));void 0!==b.flipy&&(p=z(b.flipy),"boolean"===p.ctype&&p.value&&(f=-1));void 0!==b.alpha&&(p=z(b.alpha),"number"===p.ctype&&(m=p.value.real));var r=y.drawingstate.matrix,W=y.drawingstate.initialmatrix,t=l.width,u=l.height;
+p=n.x*r.a-n.y*r.b+r.tx;var v=n.x*r.c-n.y*r.d-r.ty,xa=(n.x+1)*r.a-n.y*r.b+r.tx-p,r=(n.x+1)*r.c-n.y*r.d-r.ty-v,w=(n.x+1)*W.a-n.y*W.b+W.tx-(n.x*W.a-n.y*W.b+W.tx),W=(n.x+1)*W.c-n.y*W.d-W.ty-(n.x*W.c-n.y*W.d-W.ty),n=Math.sqrt(xa*xa+r*r)/Math.sqrt(w*w+W*W),xa=-Math.atan2(xa,r)+Math.atan2(w,W),r=y.drawingstate.matrix.sdet/72,a=a*r,c=c*r;1!==m&&(A.globalAlpha=m);A.translate(p,v);A.scale(a*d*n,c*f*n);A.rotate(q+xa);A.translate(-p,-v);A.translate(-t/2,-u/2);a=l;a.drawTo?a.drawTo(A,p,v):A.drawImage(a.img,p,
+v);A.globalAlpha=1;A.restore()}function d(){var a=1,c=1,h=1,q=1,n=D.extractPoint(e),p=D.extractPoint(f),r;if(!n.ok||!p.ok)return k;l=Ja(l);if(!l)return k;var t=l.width,u=l.height;if(0===m)r={},r.x=n.x-(p.y-n.y),r.y=n.y+(p.x-n.x),q=u/t;else if(r=D.extractPoint(m),!n.ok)return k;A.save();var v;void 0!==b.alpha&&(v=z(b.alpha),"number"===v.ctype&&(a=v.value.real));void 0!==b.aspect&&(v=z(b.aspect),"number"===v.ctype&&(q=v.value.real));void 0!==b.flipx&&(v=z(b.flipx),"boolean"===v.ctype&&v.value&&(c=-1));
+void 0!==b.flipy&&(v=z(b.flipy),"boolean"===v.ctype&&v.value&&(h=-1));v=y.drawingstate.matrix;1!==a&&(A.globalAlpha=a);a=n.x*v.a-n.y*v.b+v.tx;n=n.x*v.c-n.y*v.d-v.ty;A.transform(p.x*v.a-p.y*v.b+v.tx-a,p.x*v.c-p.y*v.d-v.ty-n,r.x*v.a-r.y*v.b+v.tx-a,r.x*v.c-r.y*v.d-v.ty-n,a,n);A.scale(1/t,-1/u*q);A.translate(t/2,-u/2);A.scale(c,h);A.translate(-t/2,u/2);A.translate(0,-u);c=l;c.drawTo?c.drawTo(A,0,0):A.drawImage(c.img,0,0);A.globalAlpha=1;A.restore()}var e,f,m,l;return 2===a.length?(e=B(a[0]),l=B(a[1]),
+c()):3===a.length?(e=B(a[0]),f=B(a[1]),m=0,l=B(a[2]),d()):4===a.length?(e=B(a[0]),f=B(a[1]),m=B(a[2]),l=B(a[3]),d()):k};t.drawimage$3=t.drawimage$2;t.drawimage$4=t.drawimage$2;t.allimages$0=function(){var a=[];Object.keys(bb).forEach(function(b){a.push({ctype:"string",value:b})});return h.turnIntoCSList(a)};t.cameravideo$0=function(a,b){function c(a){return{video:{width:a,advanced:[{width:{max:a,min:a}},{width:{ideal:a}}]},audio:!1}}var d=!0,e={};if(void 0!==b.resolution){var f=z(b.resolution);"string"===
+f.ctype&&"maximal"===f.value?d=!0:"number"===f.ctype?(d=!1,e=c(f.value.real)):h._helper.isNumberVecN(f,2)&&(d=!1,e=c(f.value[0].value.real),f=f.value[1].value.real,10>f||!Number.isInteger(f)?(e.video.aspectRatio=f,e.video.advanced[0].aspectRatio={min:f,max:f},e.video.advanced[1].aspectRatio={ideal:f}):(e.video.height=f,e.video.advanced[0].height={min:f,max:f},e.video.advanced[1].height={ideal:f}))}d&&(e=[320,640,1024,1280,1920,2560],e=e.map(function(a){return{width:{min:a}}}),e={video:{width:16E3,
+height:9E3,advanced:e},audio:!1});var d=null,m=navigator.mediaDevices&&navigator.mediaDevices.getUserMedia;m?d=function(a,c){navigator.mediaDevices.getUserMedia(e).then(a,c)}:(m=navigator.getUserMedia||navigator.webkitGetUserMedia||navigator.mozGetUserMedia||navigator.msGetUserMedia)&&(d=function(a,c){m.call(navigator,e,a,c)});if(!d)return console.warn("getUserMedia call not supported"),k;var l=document.createElement("video");l.autoplay=!0;f=fa(l,!0);console.log("Opening stream.");d(function(a){l.srcObject=
+a;l.setAttribute("autoplay","");l.setAttribute("muted","");l.setAttribute("playsinline","");l.play();l.addEventListener("loadeddata",M)},function(a){console.error("Could not get user video:",String(a),a)});return f};t.playvideo$1=function(a,b){var c=Ja(B(a[0]));c.live&&c.img.play&&c.img.play();return k};t.pausevideo$1=function(a,b){var c=Ja(B(a[0]));c.live&&c.img.pause&&c.img.pause();return k};var Kb;t.imagergba$3=function(a,b){var c=Ja(B(a[0])),d=B(a[1]),e=B(a[2]);if(!c||"number"!==d.ctype||"number"!==
+e.ctype||!c.ready)return k;d=Math.round(d.value.real);e=Math.round(e.value.real);if(!Ia(d)||!Ia(e))return k;c=pb(c,d,e,1,1);return h.realVector([255*c[0],255*c[1],255*c[2],c[3]])};t.imagergb$3=t.imagergba$3;t.imagergba$4=function(a,b){var c=Ja(B(a[2]));if(!c||!c.ready)return k;var d=c.width,e=c.height,f=K(a[0]),m=K(a[1]),l=K(h.realVector([0,e,1])),d=K(h.realVector([d,e,1]));if(f===k||m===k||n===k)return k;var n=h.ii,e=h.jj,l=D.basismap(l,d,n,e),f=D.basismap(f,m,e,n),n=K(a[3]);var p=D.extractPoint(w.mult(l,
+w.mult(h.adjoint3(f),n)));if(p.ok){var m=c.width,l=c.height,n=!0,r=!1;void 0!==b.interpolate&&(f=z(b.interpolate),"boolean"===f.ctype&&(n=f.value));void 0!==b.repeat&&(f=z(b.repeat),"boolean"===f.ctype&&(r=f.value));n&&(p.x-=.5,p.y-=.5);r&&(p.x=(p.x%m+m)%m,p.y=(p.y%l+l)%l);d=Math.floor(p.x);e=Math.floor(p.y);if(Ia(d)&&Ia(e)){f=[0,0,0,0];if(n){var n=p.x-d,p=p.y-e,t=pb(c,d,e,2,2);if(r){if(d===m-1||e===l-1)var r=pb(c,(d+1)%m,e,1,1),v=pb(c,d,(e+1)%l,1,1),c=pb(c,(d+1)%m,(e+1)%l,1,1),t=t.slice(0,4).concat(r,
+v,c)}else{if(-1===d||d===m-1)n=Math.round(n);if(-1===e||e===l-1)p=Math.round(p)}for(c=0;4>c;c++)f[c]=(1-p)*((1-n)*t[c]+n*t[c+4])+p*((1-n)*t[c+8]+n*t[c+12])}else f=pb(c,d,e,1,1);c=h.realVector(f)}else c=k}else c=k;return c};t.imagergb$4=function(a,b){var c=t.imagergba$4(a,b);return c===k?k:h.turnIntoCSList(c.value.slice(0,3))};t.readpixels$1=function(a,b){for(var c=Ja(B(a[0])),c=pb(c,0,0,c.width,c.height),d=[],e=0;e+3<c.length;e+=4)d.push(h.turnIntoCSList([m.real(c[e+0]),m.real(c[e+1]),m.real(c[e+
+2]),m.real(c[e+3])]));return h.turnIntoCSList(d)};"use strict";var ze=[{key:[":"],field:["."],deg:["\u00b0"],take:["_"]},{functionCall:!0},{rassoc:!0,pow:["^"],sqrt:["\u221a"]},{mul:["*","\u2062","\u22c5","\u00b7"],cross:["\u00d7"],div:["/","\u00f7","\u2215","\u2236"]},{add:["+"],sub:["-","\u2212"],neg:["!","\u00ac"]},{seq:[".."]},{eq:["==","\u225f"],ne:["!=","<>","\u2260"],lt:["<"],gt:[">"],le:["<=","\u2264","\u2266"],ge:[">=","\u2265","\u2267"],aeq:["~=","\u2248"],ane:["~!=","\u2249"],alt:["~<",
+"\u2a89"],agt:["~>","\u2a8a"],ale:["~<=","\u2a85"],age:["~>=","\u2a86"],"in":["\u2208"],nin:["\u2209"]},{and:["&","\u2227"],or:["%","\u2228"]},{rassoc:!0,prepend:["<:"]},{concat:["++","\u222a"],remove:["--","\u2216"],common:["~~","\u2229"],append:[":>"]},{rassoc:!0,assign:["="],define:[":="],undefine:[":=_"],bdefine:["::="]},{seq:[";"]},{modif:["->","\u2192"]},{rassoc:!0,list:[","]}],Ae=["+","-"],Be=["!","\u221a"],Ce=["\u00b0",":=_"],De=[";",","],Kc=[],Ca={},kd;(function(){var a=0;ze.forEach(function(b){a+=
+2;var c=!!b.rassoc;b.functionCall&&(kd=a);for(var d in b){var e=b[d];if("boolean"!==typeof e)for(var h={name:d,sym:e[0],symbols:e,rassoc:c,precedence:a,prefix:!1,postfix:!1,infix:!0,bare:!1},f=0;f<e.length;++f){var m=e[f];if(Ca.hasOwnProperty(m))throw Error("Duplicate operator: "+m);Ca[m]=h;Kc.push(m)}}});Ae.forEach(function(a){Ca[a].prefix=!0});Be.forEach(function(a){Ca[a].prefix=!0;Ca[a].infix=!1});Ce.forEach(function(a){Ca[a].postfix=!0;Ca[a].infix=!1});De.forEach(function(a){Ca[a].prefix=!0;Ca[a].postfix=
+!0;Ca[a].infix=!0;Ca[a].bare=!0})})();Kc.sort(function(a,b){return b.length-a.length});var Ee="(?:[0-9](?: [0-9])*(?: \\.(?! \\.)(?: [0-9])*)?|\\.(?: [0-9])+)(?: [Ee](?: [+-])?(?: [0-9])+)?".replace(/ /g,"[ \t]*"),Fe="(?:[\u207a\u207b] )?[\u2070\u00b9\u00b2\u00b3\u2074\u2075\u2076\u2077\u2078\u2079](?: [\u2070\u00b9\u00b2\u00b3\u2074\u2075\u2076\u2077\u2078\u2079])*".replace(/ /g,"[ \t]*"),Ge="(?:[\u208a\u208b] )?[\u2080\u2081\u2082\u2083\u2084\u2085\u2086\u2087\u2088\u2089](?: [\u2080\u2081\u2082\u2083\u2084\u2085\u2086\u2087\u2088\u2089])*".replace(/ /g,
+"[ \t]*"),Lc=function(a,b,c){var d,e,h=0,f="(?:[",m=b.length;for(d=0;d<m;++d)e=b.charCodeAt(d),55296<=e?(f+="]|"+b.charAt(d)+"[",h=56320):(f+=String.fromCharCode(e=h=a[e-32]+h),h+=a[b.charCodeAt(++d)-32],h!==e&&(h!==e+1&&(f+="-"),f+=String.fromCharCode(h)));return f+"]|["+c+"][\udc00-\udfff])"}([2,0,106,3,4,1,6,5,7,11,17,8,12,21,9,22,30,10,15,24,25,16,13,42,46,14,18,19,29,37,27,28,35,26,32,36,40,43,47,53,20,48,50,56,33,34,39,51,52,55,63,64,65,68,85,23,31,38,45,49,105,59,66,69,72,88,102,114,117,128,
+157,191,41,44,54,60,67,70,71,73,74,75,76,80,81,82,83,84,86,87,89,93,94,98,99,107,108,116,122,130,132,134,138,160,165,185,195,196,255,268,277,310,332,339,362,365,390,449,457,470,512,513,541,568,582,619,673,726,768,820,921,991,1164,2684,6581,8453,11171,20949],"T4(4I!)!'!&/ 0 \u0096')2$+! !\u0083$ %## !(! ! ; u \u0086.\u0088 =#!+YoA& 87C% } !5%+%) #!*! <0a,!4B1%'!&-'!1!$!33`HsG$!;!+.52'(#%#- & !$#$!*!9% 2%H''%#- & % % %B# !H *+ - & % $$!;!5%3!,(#%#- & % $$!X% 5!:! '$ #$% ! %$%$ $)W!G( / 2$!> &%C( / . $$!L! %5%;( D#!*!* 4'&*$W + !#&]F %6&]% !#% !#!(# & ! !#% # %1!#$ !/#L!S( @?$\u00817-!*''#$!$%+ ',6!:= !&!#7 \u0090 ##& ! ##D ##B ##& ! ##9 K ##^Y2*V#'$\u009d#5 4&p((+, #2*2*2, 5OC!'!Uy.D !&_)0J<#$,E'4Q/1Pv!|8:&K<9%)E>@7 )@\u0080# #$%1gT\u008e#'#=#'#( ! ! ! 0#P & !$ &$##'',& &d!9!*,b!'!#. !$$(! ! ! # 1##&$'!G%\u00a58 8 \u0084(#$%6= !&!#Q+!*/1& & & & & & & &t!\u0097%E$&%'V( z #&D${:Aj2\u0099\u00a6q\u00a9E\u00a4UZ#\u008d$2)%-8*0#_J+#b#M#(S1 # /0O2[R'$! !6>)/A?+8<!*$ .)$ D3 (-/$!$[ !$%#$#! !4 #1+ 6'#'#'1& & 7 .)c0\u00a86/'I\u00a7\u0093#\\N&6$&! . , $ ! % % \u007fM\u0092;R#Gh)d$ \u0085=4(4,a$'#'#'# \ud800!) 4 : % 9#6@\u0082\u0094?$IIX*5 ((=)<#@'(\ud801!f~N.Of\u008f1-)(\ud802!'#! E %$!#/)/10^: %)-)4nQ(%T!5# AZ?$?C( >?G)-):9*\ud803!`KJ9J\ud804#PriL3>@7M$!6F2#/! !C* 3V& ! # 9 .+8N(#%#- & % $$!;!6$\ud805eF-% !\u008987#=F-!k7x4\ud806\u0087RB!\u0095K\ud808!\u00a2\ud809e\u008a\ud80d!8\ud811!\u009c\ud81a!\u009b+0c<;F*#BH&:\ud81b\u00a0U,!l,\ud82c!%\ud82f!\"&,$++.\ud835!w m %#!#%## ) ! & S ##( & > # $ !$& \u0091#3 3 0 3 0 3 0 3 0 3 (\ud83a!\u008b\ud83b\u0098# A % !#! . # ! !(!'! ! ! % !#! ! ! ! ! % !## & # # ! . 5& $ 5\ud869!\u009f7\u008c\ud86d!\u00a1,g\ud86e!<#\u00a3\ud873!\u009e\ud87e!\u009a",
+"\ud80c\ud840-\ud868\ud86a-\ud86c\ud86f-\ud872"),He=("#(?: [1-9])?|(?:'|"+Lc+")(?: (?:[0-9']|"+Lc+"))*").replace(/ /g,"[ \t]*"),hd=["([ \t\n]+)|(//.*)|(/\\*)","("+Ee+")","("+Kc.map(gd).join("|")+")","("+"[](){}||".split("").map(gd).join("|")+")","("+Ge+")","("+Fe+")","("+He+")",'("[^"]*")|($)'].join("|"),Ie=new RegExp("[ \t]*".replace(/\*$/,"+"),"g"),Mc="ANY WS COMMENT START_COMMENT NUM OP BRA SUB SUP ID STR EOF".split(" ");(function(){var a=(new RegExp(hd,"g")).exec("");if(a.hasOwnProperty(Mc.length))throw Error("RE has more groups than expected");
+if(!a.hasOwnProperty(Mc.length-1))throw Error("RE has fewer groups than expected");})();qb.prototype.advanceBy=function(a){this.advanceTo(this.pos+a)};qb.prototype.advanceTo=function(a){for(this.pos=a;this.bols[0]<=a;)this.bol=this.bols.shift(),this.line++};qb.prototype.curPos=function(){return{row:this.line,col:this.pos-this.bol,pos:this.pos}};qb.prototype.nextInternal=function(){var a=this.re.exec(this.input);if(a.index!==this.pos)throw la("Invalid token",this.curPos(),this.input.substring(this.pos,
+a.index));var b=this.curPos();this.advanceBy(a[0].length);var c=this.curPos(),d;for(d=1;null==a[d];++d);return{start:b,end:c,raw:a[0],text:a[0].replace(Ie,""),toktype:Mc[d]}};qb.prototype.next=function(){var a;do if(a=this.nextInternal(),"START_COMMENT"===a.toktype){var b=/\*\/|\/\*/g;b.lastIndex=a.start.pos+2;for(var c=1,d;0<c;)if(d=b.exec(this.input))"/*"===d[0]?++c:--c;else throw la("Unterminated comment",a.start,a.text);this.re.lastIndex=b.lastIndex;this.advanceTo(b.lastIndex);a.end=this.curPos();
+a.raw=this.input.substring(a.start.pos,a.end.pos);a.text=a.raw;a.toktype="COMMENT"}while("WS"===a.toktype||"COMMENT"===a.toktype);return a};var Je={ctype:"void"};Lb.prototype.postprocess=function(a){if(null===a)return Je;if(a){if("infix"===a.ctype)if(":="===a.oper){var b=a.args[0];if("function"===b.ctype)b.args.forEach(function(c){if(null===c||"variable"!==c.ctype)throw la("Function argument must be an identifier",c.start||a.start);});else if("variable"!==b.ctype)throw la(a.oper+" can only be used to define functions or variables",
+a.start);}else if(","===a.oper)throw la("comma may only be used to delimit list elements",a.start);a.args&&(a.args=a.args.map(this.postprocess,this));if(a.modifs)for(var c in a.modifs)a.modifs[c]=this.postprocess(a.modifs[c]);if("paren"===a.ctype)return a.args[0];if("infix"===a.ctype){if("."===a.oper){if(!a.args[1]||"variable"!==a.args[1].ctype)throw la("Field name must be identifier",a.start,a.text);a.ctype="field";a.obj=a.args[0];a.key=a.args[1].name;delete a.args}if(":"===a.oper){if(!a.args[1])throw la("Data key undefined",
+a.start,a.text);a.ctype="userdata";a.obj=a.args[0];a.key=a.args[1];delete a.args}this.infixmap&&(a.impl=this.infixmap[a.oper])}else"variable"===a.ctype?this.usedVariables[a.name]=!0:"function"===a.ctype&&(this.usedFunctions[a.oper]=!0)}if("infix"===a.ctype)return{ctype:"infix",oper:String(a.oper),args:[a.args[0],a.args[1]],impl:a.impl};if("variable"===a.ctype)return{ctype:"variable",name:String(a.name)};if("number"===a.ctype)return{ctype:"number",value:{real:+a.value.real,imag:+a.value.imag}};if("string"===
+a.ctype)return{ctype:"string",value:String(a.value)};if("list"===a.ctype)return{ctype:"list",value:a.value};if("function"===a.ctype)return{ctype:"function",oper:String(a.oper),args:a.args,modifs:a.modifs};if("field"===a.ctype)return{ctype:"field",obj:a.obj,key:String(a.key)};if("userdata"===a.ctype)return{ctype:"userdata",obj:a.obj,key:a.key};throw Error("Unsupported AST node of type "+a.ctype);};Lb.prototype.parse=function(a){try{var b=jd(new qb(a));if("EOF"!==b.closedBy.toktype)throw la("Closing bracket never opened.",
+b.closedBy.start,b.closedBy.text);return this.postprocess(b.expr)}catch(c){return c.ctype="error",c}};"undefined"!==typeof process&&"undefined"!==typeof module&&"undefined"!==typeof module.exports&&"undefined"===typeof window&&(module.exports.Parser=Lb,module.exports.Tokenizer=qb,module.exports.unicodeLetters=Lc,module.exports.parse=function(a){return(new Lb).parse(a)});var hb={},Mb=[],Nc;Nc=[0,0,0,0,0,0,0,0,0,0,0,0];t.playsin$1=function(a,b){var c=B(a[0]),d=0;if("number"===c.ctype){var e;void 0!==
+b.line&&(e=z(b.line),"number"===e.ctype&&(d=Math.floor(e.value.real),0>d&&(d=0),10<d&&(d=10)));c=c.value.real;0!==Nc[d]&&Nc[d].set({freq:c})}return k};var P={printArr:function(a){for(var b=a.value.length,c=[],d=[],e=!1,h=0;h<b;h++)c[h]=a.value[h].value.real,d[h]=a.value[h].value.imag,0!==d[h]&&(e=!0);console.log(c);e&&console.log(d)},zero:function(a){for(var b=[],c=m.real(0),d=0;d<a.value.real;d++)b[d]=c;return h.turnIntoCSList(b)},number:function(a,b){var c=P.zero(b);c.value[0]=a;return c},variable:function(a,
+b){var c=P.zero(b);c.value[0]=a;c.value[1]=m.real(1);return c},add:function(a,b){return h.add(a,b)},sub:function(a,b){return h.sub(a,b)},mult:function(a,b){if(a.value.length!==b.value.length)return console.error("dims don't fit return nada"),k;for(var c=a.value.length,d=P.zero(m.real(c)),e=m.real(0),h=0;h<c;h++){for(var f=0;f<=h;f++)e=m.add(e,m.mult(a.value[f],b.value[h-f]));d.value[h]=e;e=m.real(0)}return d},pow:function(a,b){if(0>b.value.real||b.value.real!==Math.floor(b.value.real))return P.root(a,
+b);for(var c=a,d=1;d<b.value.real;d++)c=P.mult(c,a);return c},root:function(a,b){var c=m.real(0),d=m.real(1),e=m.add(d,b),h=a.value.length,f=P.zero(m.real(h));f.value[0]=m.pow(a.value[0],b);for(var k=c,l,n,p=1;p<h;p++){n=m.real(p);for(var r=1;r<=p;r++)l=m.mult(e,m.real(r)),l=m.div(l,n),l=m.sub(l,d),l=m.mult(l,a.value[r]),l=m.mult(l,f.value[p-r]),k=m.add(k,l);k=m.div(k,a.value[0]);f.value[p]=k;k=c}return f},findFirstNoneZero:function(a,b,c){for(var d=Infinity,e=Infinity,h=c;h<a.value.length;h++)if(1E-12<
+m.abs2(a.value[h]).value.real){d=h;break}for(a=c;a<b.value.length;a++)if(1E-12<m.abs2(b.value[a]).value.real){e=a;break}return[d,e]},div:function(a,b){if(a.value.length!==b.value.length)return console.log("dims don't fit - return nada"),k;for(var c=a.value.length,d=m.real(0),e=P.zero(m.real(c)),h=d,f,l=0;l<c;l++){f=P.findFirstNoneZero(a,b,l);l<f[0]&&f[0]===f[1]&&Infinity!==f[0]&&(a.value.splice(l,f[0]),b.value.splice(l,f[0]),e.value.splice(l,f[0]),c-=f[0]);f=a.value[l];for(var n=0;n<l;n++)h=m.add(h,
+m.mult(e.value[n],b.value[l-n]));f=m.sub(f,h);f=m.div(f,b.value[0]);e.value[l]=f;h=d}return e},exp:function(a){var b=m.real(0),c=a.value.length,d=P.zero(m.real(c)),e=b,h;d.value[0]=m.exp(a.value[0]);for(var f=1;f<c;f++){for(var k=1;k<=f;k++)h=m.mult(m.real(k),a.value[k]),h=m.mult(h,d.value[f-k]),e=m.add(e,h);d.value[f]=m.div(e,m.real(f));e=b}return d},log:function(a){var b=m.real(0),c=a.value.length,d=P.zero(m.real(c));d.value[0]=m.log(a.value[0]);for(var e=b,h,f,k=1;k<c;k++){h=a.value[k];for(var l=
+1;l<k;l++)f=m.mult(m.real(l),d.value[l]),f=m.mult(f,a.value[k-l]),e=m.add(e,f);e=m.div(e,m.real(k));h=m.sub(h,e);h=m.div(h,a.value[0]);d.value[k]=h;e=b}return d},sincos:function(a){var b=m.real(0),c=a.value.length,d=P.zero(m.real(c)),e=P.zero(m.real(c));d.value[0]=m.sin(a.value[0]);e.value[0]=m.cos(a.value[0]);for(var h=b,f=b,k,l,n,p=1;p<c;p++){n=m.real(p);for(var r=1;r<=p;r++)l=m.mult(m.real(r),a.value[r]),k=m.mult(l,e.value[p-r]),l=m.mult(l,d.value[p-r]),f=m.add(f,k),h=m.add(h,l);f=m.div(f,n);h=
+m.div(h,m.neg(n));d.value[p]=f;e.value[p]=h;h=f=b}P.sinsave=d;P.cossave=e;return[d,e]},sin:function(a){return P.sincos(a)[0]},cos:function(a){return P.sincos(a)[1]},faculty:function(a){var b=[];b[0]=m.real(1);for(var c=1,d=1;d<=a.value.real;d++)c*=d,b[d]=m.real(c);return b=h.turnIntoCSList(b)},diff:function(a,b,c,d){var e;if("variable"===a.ctype)e=a.name!==b?P.number(z(a),d):P.variable(c,d);else if("number"===a.ctype)e=P.number(a,d);else{if("infix"===a.ctype){if("*"===a.oper)return P.mult(P.diff(a.args[0],
+b,c,d),P.diff(a.args[1],b,c,d));if("^"===a.oper)return P.pow(P.diff(a.args[0],b,c,d),P.diff(a.args[1],b,c,d).value[0]);if("/"===a.oper)return P.div(P.diff(a.args[0],b,c,d),P.diff(a.args[1],b,c,d));if("+"===a.oper)return P.add(P.diff(a.args[0],b,c,d),P.diff(a.args[1],b,c,d));if("-"===a.oper)return P.sub(P.diff(a.args[0],b,c,d),P.diff(a.args[1],b,c,d));console.log("infix not found",a.oper);return k}if("function"===a.ctype){if("exp$1"===a.oper)return P.exp(P.diff(a.args[0],b,c,d));if("log$1"===a.oper)return P.log(P.diff(a.args[0],
+b,c,d));if("sin$1"===a.oper)return P.sin(P.diff(a.args[0],b,c,d));if("cos$1"===a.oper)return P.cos(P.diff(a.args[0],b,c,d))}else return console.log("ctype not found",a.ctype),k}return e},adevaluate:function(a,b,c,d){a=P.diff(a,b,c,d);d=P.faculty(d);for(b=2;b<a.value.length;b++)a.value[b]=m.mult(a.value[b],d.value[b]);return a},autodiff:function(a,b,c,d){for(var e=[],f=c.value.length,m,k=0;k<f;k++)m=P.adevaluate(a,b,c.value[k],d),e[k]=m;return e=h.turnIntoCSList(e)}},x={handleModifs:function(a,b){x.dashing&&
+x.unSetDash();x.colorraw=null;x.fillcolorraw=null;x.fillrule="nonzero";x.size=null;0>=x.psize&&(x.psize=0);0>=x.lsize&&(x.lsize=0);x.overhang=1;x.dashing=!1;x.isArrow=!1;x.arrowSides="==>";x.arrowposition=1;x.headlen=10;x.arrowShape=x.arrowShapes.line;x.alpha=y.drawingstate.alpha;x.fillalpha=0;x.bold="";x.italics="";x.family="sans-serif";x.align=0;x.xOffset=0;x.yOffset=0;x.lineCap="round";x.lineJoin="round";x.miterLimit=10;x.noborder=!1;var c,d;for(c in a){var e=a[c];e&&((d=b[c])?(!0===d&&(d=x.modifHandlers[c]),
+d(z(e))):console.log("Modifier not supported: "+c))}null!==x.size?x.psize=x.lsize=x.size:(x.psize=y.drawingstate.pointsize,x.lsize=y.drawingstate.linesize);x.dashing&&x.dashing(x.lsize);null!==x.colorraw?x.pointColor=x.lineColor=x.textColor=x.makeColor(x.colorraw):1===x.alpha?(x.pointColor=y.drawingstate.pointcolor,x.lineColor=y.drawingstate.linecolor,x.textColor=y.drawingstate.textcolor):(x.pointColor=x.makeColor(y.drawingstate.pointcolorraw),x.lineColor=x.makeColor(y.drawingstate.linecolorraw),
+x.textColor=x.makeColor(y.drawingstate.textcolorraw));x.black=1===x.alpha?"rgb(0,0,0)":"rgba(0,0,0,"+x.alpha+")";x.fillColor=x.fillcolorraw&&0<x.fillalpha?x.makeColor(x.fillcolorraw,x.fillalpha):null},modifHandlers:{size:function(a){"number"===a.ctype&&(x.size=a.value.real,0>x.size&&(x.size=0),1E3<x.size&&(x.size=1E3))},color:function(a){h.isNumberVector(a).value&&3===a.value.length&&(x.colorraw=[a.value[0].value.real,a.value[1].value.real,a.value[2].value.real])},fillcolor:function(a){h.isNumberVector(a).value&&
+3===a.value.length&&(x.fillcolorraw=[a.value[0].value.real,a.value[1].value.real,a.value[2].value.real])},alpha:function(a){"number"===a.ctype&&(x.alpha=a.value.real)},fillalpha:function(a){"number"===a.ctype&&(x.fillalpha=a.value.real)},dashpattern:function(a){if("list"===a.ctype){for(var b=[],c=0,d=0;c<a.value.length;c++)"number"===a.value[c].ctype&&(b[d++]=a.value[c].value.real);x.dashing=x.setDash.bind(null,b)}},dashtype:function(a){if("number"===a.ctype)a=Math.floor(a.value.real);else if("string"===
+a.ctype)a=a.value;else return;if(a=x.dashTypes[a])x.dashing=x.setDash.bind(null,a)},dashing:function(a){"number"===a.ctype&&(a=Math.floor(a.value.real),x.dashing=x.setDash.bind(null,[2*a,a]))},overhang:function(a){"number"===a.ctype&&(x.overhang=x.overhang*a.value.real+(1-x.overhang)*(1-a.value.real))},arrow:function(a){"boolean"===a.ctype?x.isArrow=a.value:console.error("arrow needs to be of type boolean")},arrowshape:function(a){"string"!==a.ctype?console.error("arrowshape needs to be of type string"):
+x.arrowShapes.hasOwnProperty(a.value)?(x.arrowShape=x.arrowShapes[a.value],x.isArrow=!0,x.arrowShape.deprecated&&(console.log("arrowshape "+a.value+" is deprecated, use "+x.arrowShape.deprecated+" instead."),x.arrowShape.deprecated=null)):(a=Object.keys(x.arrowShapes),a.sort(),a=a.join(", "),console.error("arrowshape needs to be one of "+a))},arrowsides:function(a){"string"!==a.ctype?console.error("arrowsides is not of type string"):"==>"!==a.value&&"<==>"!==a.value&&"<=="!==a.value?console.error("arrowsides is unknows"):
+(x.arrowSides=a.value,x.isArrow=!0)},arrowposition:function(a){"number"!==a.ctype?console.error("arrowposition is not of type number"):0>a.value.real?console.error("arrowposition has to be positive"):1<a.value.real?x.overhang=x.overhang*a.value.real+(1-x.overhang)*(1-a.value.real):(x.arrowposition=a.value.real,x.isArrow=!0)},arrowsize:function(a){"number"!==a.ctype?console.error("arrowsize is not of type number"):0>a.value.real?console.error("arrowsize has to be positive"):x.headlen*=a.value.real},
+bold:function(a){"boolean"===a.ctype&&a.value&&(x.bold="bold ")},italics:function(a){"boolean"===a.ctype&&a.value&&(x.italics="italic ")},family:function(a){"string"===a.ctype&&(x.family=a.value)},align:function(a){"string"===a.ctype&&(a=a.value,"left"===a&&(x.align=0),"right"===a&&(x.align=1),"mid"===a||"center"===a)&&(x.align=.5)},x_offset:function(a){"number"===a.ctype&&(x.xOffset=a.value.real)},y_offset:function(a){"number"===a.ctype&&(x.yOffset=a.value.real)},offset:function(a){"list"===a.ctype&&
+2===a.value.length&&"number"===a.value[0].ctype&&"number"===a.value[1].ctype&&(x.xOffset=a.value[0].value.real,x.yOffset=a.value[1].value.real)},lineCap:function(a){"string"!==a.ctype||"round"!==a.value&&"square"!==a.value&&"butt"!==a.value||(x.lineCap=a.value)},lineJoin:function(a){"string"!==a.ctype||"round"!==a.value&&"bevel"!==a.value&&"miter"!==a.value||(x.lineJoin=a.value)},fillrule:function(a){"string"!==a.ctype||"nonzero"!==a.value&&"evenodd"!==a.value||(x.fillrule=a.value)},miterLimit:function(a){"number"===
+a.ctype&&0<a.value.real&&(x.miterLimit=Math.round(a.value.real))},noborder:function(a){"boolean"===a.ctype?x.noborder=a.value:console.error("noborder needs to be of type boolean")},border:function(a){"boolean"===a.ctype?x.noborder=!a.value:console.error("border needs to be of type boolean")}},lineModifs:{size:!0,color:!0,alpha:!0,dashpattern:!0,dashtype:!0,dashing:!0,overhang:!0,arrow:!0,arrowshape:!0,arrowsides:!0,arrowposition:!0,arrowsize:!0,lineCap:!0,lineJoin:!0,miterLimit:!0},pointModifs:{size:!0,
+color:!0,alpha:!0,noborder:!0,border:!0}};x.pointAndLineModifs=x.lineModifs;x.conicModifs={size:!0,color:!0,alpha:!0,fillcolor:!0,fillrule:!0,fillalpha:!0,lineCap:!0,lineJoin:!0,miterLimit:!0};x.textModifs={size:!0,color:!0,alpha:!0,bold:!0,italics:!0,family:!0,align:!0,x_offset:!0,y_offset:!0,offset:!0};x.makeColor=function(a,b){void 0===b&&(b=x.alpha);return"rgba("+Math.floor(255*a[0])+","+Math.floor(255*a[1])+","+Math.floor(255*a[2])+","+b+")"};x.preDrawCurve=function(){A.lineWidth=x.lsize;A.lineCap=
+x.lineCap;A.lineJoin=x.lineJoin;A.mozFillRule=x.fillrule;A.fillrule=x.fillrule;A.miterLimit=x.miterLimit;A.strokeStyle=x.lineColor};x.arrowShapes={"default":{close:!1,fill:!1,ratio:1,deprecated:"line"},line:{close:!1,fill:!1,ratio:1},empty:{close:!0,fill:!1,ratio:1},hollow:{close:!0,fill:!1,ratio:1,deprecated:"empty"},full:{close:!0,fill:!0,ratio:1},jet:{close:!0,fill:!0,ratio:1.5},delta:{close:!0,fill:!0,ratio:1.5,deprecated:"jet"}};x.clipSegment=function(a,b){var c=b.x-a.x,d=b.y-a.y,e=x.clipLineCore(-d,
+c,a.x*b.y-b.x*a.y);if(2!==e.length)return[];var h=e[0],e=e[1],f=1/(c*c+d*d),m=((h.x-a.x)*c+(h.y-a.y)*d)*f,c=((e.x-a.x)*c+(e.y-a.y)*d)*f;0>m&&(h=a);1<m&&(h=b);0>c&&(e=a);1<c&&(e=b);return h===e?[]:[h,e]};x.drawsegcore=function(a,b){function c(a,b,c,g){var d=a-g*r+.5*t,e=b-g*t-.5*r,h=a-g*r-.5*t;g=b-g*t+.5*r;A.beginPath();x.arrowShape.fill&&(A.lineWidth=x.lsize/2);A.moveTo(d,e);A.lineTo(a,b);A.lineTo(h,g);x.arrowShape.close&&(A.fillStyle=x.lineColor,A.lineTo(a-c*r,b-c*t),A.closePath(),x.arrowShape.fill&&
+A.fill());A.stroke()}var d=y.drawingstate.matrix,e=a.x*d.a-a.y*d.b+d.tx,h=a.x*d.c-a.y*d.d-d.ty,f=b.x*d.a-b.y*d.b+d.tx,m=b.x*d.c-b.y*d.d-d.ty,k=x.overhang,l=1-k,d=k*e+l*f,n=k*h+l*m,p=k*f+l*e,k=k*m+l*h;if(0>d||d>ca||0>n||n>da||0>p||p>ca||0>k||k>da){k=x.clipSegment({x:d,y:n},{x:p,y:k});if(2!==k.length||.01>x.lsize)return;d=k[0].x;n=k[0].y;p=k[1].x;k=k[1].y}x.preDrawCurve();if(!x.isArrow||e===h&&f===m).01>x.lsize||(A.beginPath(),A.moveTo(d,n),A.lineTo(p,k),A.stroke());else{var e=f-e,h=m-h,f=x.headlen/
+Math.sqrt(e*e+h*h),r=e*f,t=h*f,m=x.arrowposition,l=1-m,h=m*d+l*p,e=m*n+l*k,f=m*p+l*d,m=m*k+l*n,l=x.arrowSides;A.beginPath();x.arrowShape.close?("<==>"===l||"<=="===l?(1>x.arrowposition&&(A.moveTo(d,n),A.lineTo(h,e)),A.moveTo(h+r,e+t)):A.moveTo(d,n),"==>"===l||"<==>"===l?(A.lineTo(f-r,m-t),1>x.arrowposition&&(A.moveTo(f,m),A.lineTo(p,k))):A.lineTo(p,k)):(A.moveTo(d,n),A.lineTo(p,k));A.stroke();"==>"!==l&&"<==>"!==l||c(f,m,1,x.arrowShape.ratio);"<=="!==l&&"<==>"!==l||c(h,e,-1,-x.arrowShape.ratio)}};
+x.drawpoint=function(a){var b=y.drawingstate.matrix,c=a.x*b.a-a.y*b.b+b.tx;a=a.x*b.c-a.y*b.d-b.ty;A.lineWidth=.3*x.psize;A.beginPath();A.arc(c,a,x.psize,0,2*Math.PI);A.fillStyle=x.pointColor;A.fill();x.noborder||(A.beginPath(),A.arc(c,a,1.15*x.psize,0,2*Math.PI),A.fillStyle=x.black,A.strokeStyle=x.black,A.stroke())};x.clipLineCore=function(a,b,c){var d=Math.SQRT1_2*x.lsize,e=0-d,h=ca+d,f=0-d,d=da+d,m=0>e*a+f*b+c,k=0>h*a+f*b+c,l=0>e*a+d*b+c,n=0>h*a+d*b+c,p=[];m!==k&&p.push({x:(-c-b*f)/a,y:f});k!==
+n&&p.push({x:h,y:(-c-a*h)/b});l!==n&&p.push({x:(-c-b*d)/a,y:d});m!==l&&p.push({x:e,y:(-c-a*e)/b});return p};x.clipLine=function(a){a=h.normalizeMax(h.productVM(a,y.toMat()));return x.clipLineCore(a.value[0].value.real,a.value[1].value.real,a.value[2].value.real)};x.drawline=function(a){h._helper.isAlmostReal(a)&&(a=x.clipLine(a),2===a.length&&.01<=x.lsize&&(x.preDrawCurve(),A.beginPath(),A.moveTo(a[0].x,a[0].y),A.lineTo(a[1].x,a[1].y),A.stroke()))};x.drawRaySegment=function(a,b){var c=D.extractPoint(a),
+d=D.extractPoint(b);if(c.ok&&d.ok){var e=c.x-d.x,h=c.y-d.y,f=25E3/y.drawingstate.matrix.sdet/Math.sqrt(e*e+h*h),e=e*f,h=h*f;x.drawsegcore(c,{x:c.x+e,y:c.y+h});x.drawsegcore(d,{x:d.x-e,y:d.y-h})}};x.dashTypes={solid:[],dashed:[10,10],tightdash:[10,4],dotted:[1,3],dashdot:[10,5,1,5],"dashvalue.solid":[],"dashvalue.dashed":[10,10],"dashvalue.tightdash":[10,4],"dashvalue.dotted":[1,3],"dashvalue.dashdot":[10,5,1,5],0:[],1:[10,10],2:[10,4],3:[1,3],4:[10,5,1,5]};x.setDash=function(a,b){var c=Math.sqrt(b);
+a=a.slice();for(var d=0;d<a.length;d++)a[d]*=c;A.webkitLineDash=a;A.setLineDash(a);A.mozDash=a};x.unSetDash=function(){A.webkitLineDash=[];A.setLineDash([]);A.mozDash=[]};ld.prototype={set fillStyle(a){var b=this;ac(a,function(a,d,e,h){b._fill="#"+rb(a.toString(16),2)+rb(d.toString(16),2)+rb(e.toString(16),2);b._fillOpacity=255===h?null:h})},set strokeStyle(a){var b=this;ac(a,function(a,d,e,h){b._stroke="#"+rb(a.toString(16),2)+rb(d.toString(16),2)+rb(e.toString(16),2);b._strokeOpacity=255===h?null:
+h})},clearRect:function(){},beginPath:function(){this._path=[]},_pathcmd:function(){this._path.push.apply(this._path,arguments)},closePath:function(){this._pathcmd("Z")},moveTo:function(a,b){this._pathcmd("M",a,b)},lineTo:function(a,b){this._pathcmd("L",a,b)},bezierCurveTo:function(a,b,c,d,e,h){this._pathcmd("C",a,b,c,d,e,h)},quadraticCurveTo:function(a,b,c,d){this._pathcmd("Q",a,b,c,d)},arc:function(a,b,c,d,e,h){var f=c*Math.cos(d)+a,m=c*Math.sin(d)+b,k=c*Math.cos(e)+a,l=c*Math.sin(e)+b;e=h?d-e:
+e-d;e>=2*Math.PI?this._pathcmd(this._path.length?"L":"M",f,m,"A",c,c,0,0,h?1:0,a-c*Math.cos(d),b-c*Math.sin(d),"A",c,c,0,0,h?1:0,f,m):this._pathcmd(this._path.length?"L":"M",f,m,"A",c,c,0,e>Math.PI?1:0,h?1:0,k,l)},rect:function(a,b,c,d){this._pathcmd("M",a,b,"h",c,"v",d,"h",-c,"z")},_cmd:function(a){1!==this.globalAlpha?(this._body.push('<g opacity="'+this.globalAlpha+'">'),this._body.push(a),this._body.push("</g>")):this._body.push(a)},_attrs:function(a){var b="",c;for(c in a)null!==a[c]&&(b+=" "+
+c+'="'+a[c]+'"');return b},fill:function(){this._cmd("<path"+this._attrs({d:this._path.join(" "),fill:this._fill,"fill-opacity":this._fillOpacity})+"/>")},stroke:function(){this._cmd("<path"+this._attrs({d:this._path.join(" "),stroke:this._stroke,"stroke-opacity":this._strokeOpacity,"stroke-width":this.lineWidth,"stroke-linecap":this.lineCap,"stroke-linejoin":this.lineJoin,"stroke-miterlimit":"miter"===this.lineJoin?this.miterLimit:null})+"/>")},clip:function(){++this._clipIndex;this._body.push('<clipPath id="clip'+
+this._clipIndex+'"><path d="'+this._path.join(" ")+'"/></clipPath>','<g clip-path="url(#clip'+this._clipIndex+')">');this._saveStack[this._saveStack.length-1]+="</g>"},save:function(){this._saveStack.push("")},restore:function(){this._body.push(this._saveStack.pop());0===this._saveStack.length&&this._saveStack.push("")},_transform:function(a){this._body.push('<g transform="'+a+'">');this._saveStack[this._saveStack.length-1]+="</g>"},translate:function(a,b){this._transform("translate("+a+" "+b+")")},
+rotate:function(a){this._transform("rotate("+Math.PI/180*a+")")},scale:function(a,b){this._transform("scale("+a+" "+b+")")},transform:function(a,b,c,d,e,h){this._transform("matrix("+[a,b,c,d,e,h].join(" ")+")")},drawImage:function(a,b,c){if(3!==arguments.length)throw Error("SvgWriterContext only supports 3-argument version of drawImage");var d=this._imgcache.indexOf(a);if(-1===d){var d=this._imgcache.length,e;e=a.cachedDataURL?a.cachedDataURL:nd(a);this._defs.push('<image id="img'+d+'" x="0" y="0" width="'+
+a.width+'" height="'+a.height+'" xlink:href="'+e+'"/>');this._imgcache.push(a)}this._cmd('<use x="'+b+'" y="'+c+'" xlink:href="#img'+d+'"/>')},toBlob:function(){for(;1<this._saveStack.length||""!==this._saveStack[0];)this.restore();var a='<?xml version="1.0" encoding="UTF-8" standalone="no"?>\n<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="'+this.width+'px" height="'+this.height+'px">\n'+this._defs.join("\n")+'\n</defs>\n<g stroke="none" fill="none">\n'+
+this._body.join("\n")+"\n</g>\n</svg>\n";return new Blob([a],{type:"image/svg+xml"})}};md.prototype={_cmd:function(){this._body.push(Array.prototype.join.call(arguments," "))},_setAlpha:function(a,b,c){var d=Math.round(255*a*this._globalAlpha);b+=d;this._extGState[b]="<< /"+c+" "+d/255+" >>";this._cmd("/"+b,"gs");return a},set globalAlpha(a){this._globalAlpha=a;this._setAlpha(this._strokeAlpha,"As","CA");this._setAlpha(this._fillAlpha,"Af","ca")},set fillStyle(a){var b=this;ac(a,function(a,d,e,h){b._cmd(a/
+255,d/255,e/255,"rg");b._setAlpha(b._fillAlpha=h,"Af","ca")})},set strokeStyle(a){var b=this;ac(a,function(a,d,e,h){b._cmd(a/255,d/255,e/255,"RG");b._setAlpha(b._strokeAlpha=h,"As","CA")})},set lineWidth(a){this._cmd(a,"w")},set lineCap(a){this._cmd({butt:0,round:1,square:2}[a],"J")},set lineJoin(a){this._cmd({miter:0,round:1,bevel:2}[a],"j")},set miterLimit(a){this._cmd(a,"M")},clearRect:function(){},beginPath:function(){this._pathUsed=!1},closePath:function(){this._cmd("h")},moveTo:function(a,b){this._cmd(this._xPos=
+a,this._yPos=-b,"m")},lineTo:function(a,b){this._cmd(this._xPos=a,this._yPos=-b,"l")},bezierCurveTo:function(a,b,c,d,e,h){this._cmd(a,-b,c,-d,this._xPos=e,this._yPos=-h,"c")},quadraticCurveTo:function(a,b,c,d){this.bezierCurveTo((2*a+this._xPos)/3,(2*b-this._yPos)/3,(c+2*a)/3,(d+2*b)/3,c,d)},_kappa:.5522847498307935,arc:function(a,b,c,d,e,h){if(0===d&&e===2*Math.PI)d=this._kappa*c,this.moveTo(a+c,b),this.bezierCurveTo(a+c,b+d,a+d,b+c,a,b+c),this.bezierCurveTo(a-d,b+c,a-c,b+d,a-c,b),this.bezierCurveTo(a-
+c,b-d,a-d,b-c,a,b-c),this.bezierCurveTo(a+d,b-c,a+c,b-d,a+c,b);else throw Error("PdfWriterContext.arc only supports full circles");},rect:function(a,b,c,d){this._cmd(a,-b,c,-d,"re")},_usePath:function(a){if(this._pathUsed){var b=this._body[this._pathUsed],c={"S + f":"B","f + S":"B","W n + S":"W S","W n + f":"W f","S + W n":"W S","f + W n":"W f","B + W n":"W B","W S + f":"W B","W f + S":"W B"}[b+" + "+a];if(!c)throw Error("Don't know how to combine '"+b+"' and '"+a+"'");this._body.splice(this._pathUsed,
+1);a=c}this._pathUsed=this._body.length;this._cmd(a)},fill:function(){this._usePath("f")},stroke:function(){this._usePath("S")},clip:function(){this._usePath("W n")},save:function(){this._cmd("q")},restore:function(){this._cmd("Q")},translate:function(a,b){this.transform(1,0,0,1,a,b)},rotate:function(a){var b=Math.cos(a);a=Math.sin(a);this.transform(b,a,-a,b,0,0)},scale:function(a,b){this.transform(a,0,0,b,0,0)},transform:function(a,b,c,d,e,h){this._cmd(a,-b,-c,d,e,-h,"cm")},_png:function(a){if("data:image/png;base64,"!==
+a.substr(0,22))return{error:"Not a base64-encoded PNG file"};a=de(a.substr(22));var b=ee(a);console.log("PNG chunks:",b.map(function(a){return a.type}));if("IHDR"!==b[0].type)throw Error("Image does not start with an IHDR");var c=b[0].data;a=(c[0]<<24|c[1]<<16|c[2]<<8|c[3])>>>0;var d=(c[4]<<24|c[5]<<16|c[6]<<8|c[7])>>>0,e=c[8],h=c[9],f=0===(h&2),m=0!==(h&4),k=c[10],l=c[11],c=c[12];if(0!==k)throw Error("Unsupported PNG compression method: "+k);if(0!==l)throw Error("Unsupported PNG filter method: "+
+l);if(0!==c)return{error:"Interlaced image not supported"};if(0!==(h&1))return{error:"Indexed PNG image not supported"};l=null;h=f?1:3;k=b.filter(function(a){return"IDAT"===a.type}).map(function(a){return a.data});if(m){m=window.pako;l=new m.Inflate;for(b=0;b<k.length;++b)l.push(k[b],b+1===k.length);if(l.err)throw Error(l.err);l=l.result;c=e>>>3;if(l.length!==d*(a*(h+1)*c+1))throw Error("Data length mismatch");for(var n=h*c,k=new Uint8Array(d*(a*n+1)),p=new Uint8Array(d*(a*c+1)),r=0,t=0,v=0,u=0;u<
+d;++u){k[t++]=p[v++]=l[r++];for(var w=0;w<a;++w){for(b=0;b<n;++b)k[t++]=l[r++];for(b=0;b<c;++b)p[v++]=l[r++]}}if(r!==l.length||t!==k.length||v!==p.length)throw Error("Seems we garbled our index computation somehow");p=m.deflate(p);l=this._strm({Type:"/XObject",Subtype:"/Image",Width:a,Height:d,ColorSpace:"/DeviceGray",BitsPerComponent:e,Filter:"/FlateDecode",DecodeParms:this._dict({Predictor:15,Colors:1,BitsPerComponent:e,Columns:a})},p).ref;k=[m.deflate(k)]}var x=0;k.forEach(function(a){x+=a.length});
+return this._obj([this._dict({Type:"/XObject",Subtype:"/Image",Name:"/img"+this._imgcache.length,Width:a,Height:d,ColorSpace:f?"/DeviceGray":"/DeviceRGB",SMask:l,BitsPerComponent:e,Length:x,Filter:"/FlateDecode",DecodeParms:this._dict({Predictor:15,Colors:h,BitsPerComponent:e,Columns:a})}),"\nstream\n"].concat(k,["\nendstream"]))},drawImage:function(a,b,c){if(3!==arguments.length)throw Error("PdfWriterContext only supports 3-argument version of drawImage");var d=this._imgcache.indexOf(a);if(-1===
+d){d=this._imgcache.length;this._imgcache.push(a);var e=this._png(a.cachedDataURL||"");e.hasOwnProperty("error")&&(e=this._png(nd(a)));if(e.hasOwnProperty("error"))throw Error(e.error);this._xobjects["img"+d]=e.ref}this._cmd("q");this._setAlpha(1,"Af","ca");this._cmd(a.width,0,0,a.height,b,-c-a.height,"cm");this._cmd("/img"+d,"Do");this._cmd("Q")},_dict:function(a){var b="<<",c;for(c in a)b+=" /"+c+" "+a[c];return b+" >>"},_obj:function(a,b){b||(b=this._nextIndex++);Array.isArray(a)||(a=[this._dict(a)]);
+a.index=b;a.ref=b+" 0 R";a.offset=this._offset;var c=0;a.unshift(b+" 0 obj\n");a.push("\nendobj\n");for(var d=0;d<a.length;++d)c+=a[d].length;this._offset+=c;this._objects.push(a);return a},_strm:function(a,b,c){a.Length=b.length;return this._obj([this._dict(a),"\nstream\n",b,"\nendstream"],c)},toBlob:function(){var a;a="["+[0,-this.height,this.width,0].join(" ")+"]";this._obj({Type:"/Catalog",Pages:"2 0 R"},1);this._obj({Type:"/Pages",Kids:"[3 0 R]",Count:1},2);this._obj({Type:"/Page",Parent:"2 0 R",
+MediaBox:a,Contents:"4 0 R",Resources:this._dict({ProcSet:"[/PDF /Text /ImageB /ImageC /ImageI]",XObject:this._dict(this._xobjects),ExtGState:this._dict(this._extGState)})},3);var b=this._body.join("\n"),c=new Uint8Array(b.length);for(a=0;a<b.length;++a)c[a]=b.charCodeAt(a)&255;b=window.pako.deflate(c);this._strm({Filter:"/FlateDecode"},b,4);var b=this._objects,d=[];for(a=1;a<b.length;++a)d[b[a].index]=b[a];c="xref\n0 "+d.length+"\n";for(a=0;a<d.length;++a)c=d[a]?c+(rb(String(d[a].offset),10)+" 00000 n \n"):
+c+"0000000000 65535 f \n";a="trailer\n"+this._dict({Size:d.length,Root:"1 0 R"})+"\nstartxref\n"+this._offset+"\n%%EOF\n";b=Array.prototype.concat.apply([],b);b.push(c,a);return new Blob(b,{type:"application/pdf"})}};var Nb=null;jb.push(od);sa.exportSVG=function(){pd(ld)};sa.exportPDF=function(){va.loadScript("pako","pako.min.js",function(){pd(md)})};sa.exportPNG=function(){qd(A.canvas.toDataURL())};var qd=function(a){var b=document.createElement("a");document.body.appendChild(b);b.style="display: none";
+b.href=a;b.download="CindyJSExport";b.click();setTimeout(function(){document.body.removeChild(b);od()},100)},xc="Move",Pb,Aa=[],Ya=0,ge=0,xb=0,G={Delete:{}};G.Delete.actions=[];G.Delete.actions[0]={};G.Delete.actions[0].event="mousedown";G.Delete.actions[0].tooltip="...";G.Delete.actions[0]["do"]=function(){ja=Ob(aa);null!==ja&&vd(ja.mover.name);return!0};G.Move={};G.Move.actions=[];G.Move.actions[0]={};G.Move.actions[0].event="mousedown";G.Move.actions[0].tooltip="Move free elements by dragging the mouse";
+G.Move.actions[0]["do"]=function(){for(var a=aa,b=null,c=1E6,d,e=0;e<v.free.length;e++){var f=v.free[e];if(!f.pinned&&!1!==f.visible&&!0!==f.tmp){var k,l,n,p=y.drawingstate.matrix.sdet;if("P"===f.kind){l=h.normalizeZ(f.homog);if(!h._helper.isAlmostReal(l))continue;k=l.value[0].value.real-a.x;l=l.value[1].value.real-a.y;n=Math.sqrt(k*k+l*l);if(f.narrow&&n>("number"===typeof f.narrow?f.narrow:20)/p)continue}else if("C"===f.kind){l=h.normalizeZ(v.csnames[f.args[0]].homog);k=f.radius;if(!h._helper.isAlmostReal(l)||
+!m._helper.isAlmostReal(k))continue;n=l.value[0].value.real;var r=l.value[1].value.real;l=a.x-n;var t=a.y-r,u=Math.sqrt(l*l+t*t);if(0===u)continue;r+=t/u*k.value.real;k=n+l/u*k.value.real-a.x;l=r-a.y;n=Math.sqrt(k*k+l*l);n+=30/p;if(f.narrow&&n>(("number"===typeof f.narrow?f.narrow:20)+30)/p)continue}else if("L"===f.kind)k=f.homog,n=m,l=n.add(n.mult(k.value[0],n.conjugate(k.value[0])),n.mult(k.value[1],n.conjugate(k.value[1]))),l=h.scaldiv(n.sqrt(l),k),n=l.value[0].value.real*a.x+l.value[1].value.real*
+a.y+l.value[2].value.real,k=-l.value[0].value.real*n,l=-l.value[1].value.real*n,0>n&&(n=-n),n+=25/p;else if("Text"===f.kind){if(!f.homog||f.dock||!f._bbox)continue;l=y.from(a.x,a.y,1);k=Math.max(0,l[0]-f._bbox.right,f._bbox.left-l[0]);l=Math.max(0,l[1]-f._bbox.bottom,f._bbox.top-l[1]);n=Math.sqrt(k*k+l*l);if(20<n)continue;n/=p;l=h.normalizeZ(f.homog);if(!h._helper.isAlmostReal(l))continue;k=l.value[0].value.real-a.x;l=l.value[1].value.real-a.y}else continue;n<c+.2/p&&(c=n,b=f,d={x:k,y:l})}}console.log("Moving "+
+(b?b.name:"nothing"));ja=null===b?null:{mover:b,offset:d,prev:{x:a.x,y:a.y}};return!0};G.Point={};G.Point.actions=[];G.Point.actions[0]={};G.Point.actions[0].event="mousedown";G.Point.actions[0].tooltip="Add a single point with the mouse";G.Point.actions[0]["do"]=function(){Ka({type:"Free",name:Xa(),labeled:!0,pos:[ra[0],ra[1],1]});return!0};G.Mid={};G.Mid.actions=[];G.Mid.actions[0]={};G.Mid.actions[0].event="mousedown";G.Mid.actions[0].tooltip="Construct two points and their midpoint by dragging";
+G.Mid.actions[0]["do"]=function(){sb();return!0};G.Mid.actions[1]={};G.Mid.actions[1].event="mousemove";G.Mid.actions[1]["do"]=function(){bc("Mid");return!0};G.Mid.actions[2]={};G.Mid.actions[2].event="mouseup";G.Mid.actions[2]["do"]=function(){yb();return!0};G.Circle={};G.Circle.actions=[];G.Circle.actions[0]={};G.Circle.actions[0].event="mousedown";G.Circle.actions[0].tooltip="Construct two points and a circle by dragging the mouse";G.Circle.actions[0]["do"]=function(){sb();return!0};G.Circle.actions[1]=
+{};G.Circle.actions[1].event="mousemove";G.Circle.actions[1]["do"]=function(){bc("CircleMP");return!0};G.Circle.actions[2]={};G.Circle.actions[2].event="mouseup";G.Circle.actions[2]["do"]=function(){yb();return!0};G.Compass={};G.Compass.actions=[];G.Compass.actions[0]={};G.Compass.actions[0].event="mousedown";G.Compass.actions[0].tooltip="...";G.Compass.actions[0]["do"]=function(){sb();return!0};G.Compass.actions[1]={};G.Compass.actions[1].event="mousedown";G.Compass.actions[1].tooltip="...";G.Compass.actions[1]["do"]=
+function(){sb();return!0};G.Compass.actions[2]={};G.Compass.actions[2].event="mousedown";G.Compass.actions[2].tooltip="...";G.Compass.actions[2]["do"]=function(){sb();Ka({type:"Compass",name:Xa(),labeled:!0,args:[Aa[0].name,Aa[1].name,Aa[2].name]});return!0};G.Line={};G.Line.actions=[];G.Line.actions[0]={};G.Line.actions[0].event="mousedown";G.Line.actions[0].tooltip="Construct two points and their connecting line by dragging the mouse";G.Line.actions[0]["do"]=function(){sb();return!0};G.Line.actions[1]=
+{};G.Line.actions[1].event="mousemove";G.Line.actions[1]["do"]=function(){bc("Join");return!0};G.Line.actions[2]={};G.Line.actions[2].event="mouseup";G.Line.actions[2]["do"]=function(){yb();return!0};G.Segment={};G.Segment.actions=[];G.Segment.actions[0]={};G.Segment.actions[0].event="mousedown";G.Segment.actions[0].tooltip="Draw a segment by dragging the mouse";G.Segment.actions[0]["do"]=function(){sb();return!0};G.Segment.actions[1]={};G.Segment.actions[1].event="mousemove";G.Segment.actions[1]["do"]=
+function(){bc("Segment");return!0};G.Segment.actions[2]={};G.Segment.actions[2].event="mouseup";G.Segment.actions[2]["do"]=function(){yb();return!0};G.Parallel={};G.Parallel.actions=[];G.Parallel.actions[0]={};G.Parallel.actions[0].event="mousedown";G.Parallel.actions[0].tooltip="Construct a parallel line by dragging a line";G.Parallel.actions[0]["do"]=function(){return td()};G.Parallel.actions[1]={};G.Parallel.actions[1].event="mousemove";G.Parallel.actions[1]["do"]=function(){var a={type:"Free",
+name:Xa(),labeled:!0,pos:[ra[0],ra[1],1],tmp:!0},a=Ka(a);Pb=Ka({type:"Para",name:Xa(),labeled:!0,args:[Aa[0].name,a.name]});zc(a);return!0};G.Parallel.actions[2]={};G.Parallel.actions[2].event="mouseup";G.Parallel.actions[2]["do"]=function(){yb();return!0};G.Orthogonal={};G.Orthogonal.actions=[];G.Orthogonal.actions[0]={};G.Orthogonal.actions[0].event="mousedown";G.Orthogonal.actions[0].tooltip="Construct a orthogonal line by dragging a line";G.Orthogonal.actions[0]["do"]=function(){if(td()){var a=
+{type:"Free",name:Xa(),labeled:!0,pos:[ra[0],ra[1],1],tmp:!0},a=Ka(a);Pb=Ka({type:"Perp",name:Xa(),labeled:!0,args:[Aa[0].name,a.name]});zc(a);return!0}return!1};G.Orthogonal.actions[1]={};G.Orthogonal.actions[1].event="mouseup";G.Orthogonal.actions[1]["do"]=function(){yb();return!0};G.Intersection={};G.Intersection.actions=[];G.Intersection.actions[0]={};G.Intersection.actions[0].event="mousedown";G.Intersection.actions[0].tooltip="Select two elements to define their intersection";G.Intersection.actions[0]["do"]=
+function(){return ud()};G.Intersection.actions[1]={};G.Intersection.actions[1].event="mousedown";G.Intersection.actions[1]["do"]=function(){return ud()?(Pb=Ka({type:"Meet",name:Xa(),labeled:!0,args:[Aa[0].name,Aa[1].name]}),!0):!1};var eb={},y={drawingstate:{}};y.drawingstate.linecolor="rgb(0,0,255)";y.drawingstate.linecolorraw=[0,0,1];y.drawingstate.pointcolor="rgb(0,255,0)";y.drawingstate.pointcolorraw=[0,1,0];y.drawingstate.textcolor="rgb(0,0,0)";y.drawingstate.textcolorraw=[0,0,0];y.drawingstate.alpha=
+1;y.drawingstate.pointsize=4;y.drawingstate.linesize=1;y.drawingstate.textsize=null;y.drawingstate.matrix={};y.drawingstate.matrix.a=25;y.drawingstate.matrix.b=0;y.drawingstate.matrix.c=0;y.drawingstate.matrix.d=25;y.drawingstate.matrix.tx=250.5;y.drawingstate.matrix.ty=250.5;y.drawingstate.matrix.det=y.drawingstate.matrix.a*y.drawingstate.matrix.d-y.drawingstate.matrix.b*y.drawingstate.matrix.c;y.drawingstate.matrix.sdet=Math.sqrt(y.drawingstate.matrix.det);y.drawingstate.initialmatrix={};y.drawingstate.initialmatrix.a=
+y.drawingstate.matrix.a;y.drawingstate.initialmatrix.b=y.drawingstate.matrix.b;y.drawingstate.initialmatrix.c=y.drawingstate.matrix.c;y.drawingstate.initialmatrix.d=y.drawingstate.matrix.d;y.drawingstate.initialmatrix.tx=y.drawingstate.matrix.tx;y.drawingstate.initialmatrix.ty=y.drawingstate.matrix.ty;y.drawingstate.initialmatrix.det=y.drawingstate.matrix.det;y.drawingstate.initialmatrix.sdet=y.drawingstate.matrix.sdet;y.clone=function(a){if(null===a||"object"!==typeof a)return a;var b=a.constructor(),
+c;for(c in a)b[c]=y.clone(a[c]);return b};eb.backup=y.clone(y.drawingstate);eb.stack=[];y.clone(y.drawingstate);y.reset=function(){y.drawingstate.matrix.a=y.drawingstate.initialmatrix.a;y.drawingstate.matrix.b=y.drawingstate.initialmatrix.b;y.drawingstate.matrix.c=y.drawingstate.initialmatrix.c;y.drawingstate.matrix.d=y.drawingstate.initialmatrix.d;y.drawingstate.matrix.tx=y.drawingstate.initialmatrix.tx;y.drawingstate.matrix.ty=y.drawingstate.initialmatrix.ty;y.drawingstate.matrix.det=y.drawingstate.initialmatrix.det;
+y.drawingstate.matrix.sdet=y.drawingstate.initialmatrix.sdet};y.from=function(a,b,c){a/=c;b/=c;c=y.drawingstate.matrix;return[a*c.a-b*c.b+c.tx,a*c.c-b*c.d-c.ty]};y.to=function(a,b){var c=y.drawingstate.matrix,d=a-c.tx,e=b+c.ty;return[(d*c.d-e*c.b)/c.det,-(-d*c.c+e*c.a)/c.det,1]};y.toMat=function(){var a=y.drawingstate.matrix;return h.realMatrix([[a.d,-a.b,-a.tx*a.d-a.ty*a.b],[a.c,-a.a,-a.tx*a.c-a.ty*a.a],[0,0,a.det]])};y.dumpTrafo=function(){function a(a){return Math.round(1E3*a)/1E3}var b=y.drawingstate.matrix;
+console.log("a:"+a(b.a)+" b:"+a(b.b)+" c:"+a(b.c)+" d:"+a(b.d)+" tx:"+a(b.ty)+" ty:"+a(b.tx))};y.setMat=function(a,b,c,d,e,h){var f=y.drawingstate.matrix;f.a=a;f.b=b;f.c=c;f.d=d;f.tx=e;f.ty=h;f.det=a*d-b*c;f.sdet=Math.sqrt(f.det)};y.scaleAndOrigin=function(a,b,c){y.setMat(a,0,0,a,b,c)};y.visibleRect=function(a,b,c,d){var e=c-a,h=b-d,e=ca*h<da*e?ca/e:da/h;y.setMat(e,0,0,e,(ca-e*(a+c))/2,(da-e*(b+d))/2)};y.applyMat=function(a,b,c,d,e,h){var f=y.drawingstate.matrix;y.setMat(f.a*a+f.c*b,f.b*a+f.d*b,f.a*
+c+f.c*d,f.b*c+f.d*d,f.a*e+f.c*h+f.tx,f.b*e+f.d*h+f.ty)};y.translate=function(a,b){y.applyMat(1,0,0,1,a,b)};y.rotate=function(a){var b=Math.cos(a);a=Math.sin(a);y.applyMat(b,a,-a,b,0,0)};y.scale=function(a){y.applyMat(a,0,0,a,0,0)};y.gsave=function(){eb.stack.push(y.clone(y.drawingstate))};y.grestore=function(){0!==eb.stack.length&&(y.drawingstate=eb.stack.pop())};y.greset=function(){y.drawingstate=y.clone(eb.backup);y.drawingstate.matrix.ty-=da;y.drawingstate.initialmatrix.ty-=da;eb.stack=[]};y.createnewbackup=
+function(){y.drawingstate.initialmatrix.a=y.drawingstate.matrix.a;y.drawingstate.initialmatrix.b=y.drawingstate.matrix.b;y.drawingstate.initialmatrix.c=y.drawingstate.matrix.c;y.drawingstate.initialmatrix.d=y.drawingstate.matrix.d;y.drawingstate.initialmatrix.tx=y.drawingstate.matrix.tx;y.drawingstate.initialmatrix.ty=y.drawingstate.matrix.ty;y.drawingstate.initialmatrix.det=y.drawingstate.matrix.det;y.drawingstate.initialmatrix.sdet=y.drawingstate.matrix.sdet;eb.backup=y.clone(y.drawingstate)};y.makecolor=
+function(a,b,c){a=Math.floor(255*a);b=Math.floor(255*b);c=Math.floor(255*c);return 1===y.drawingstate.alpha?"rgb("+a+","+b+","+c+")":"rgba("+a+","+b+","+c+","+y.drawingstate.alpha+")"};y.setcolor=function(a){var b=a.value[0].value.real,c=a.value[1].value.real;a=a.value[2].value.real;y.drawingstate.linecolor=y.drawingstate.pointcolor=y.makecolor(b,c,a);y.drawingstate.linecolorraw=y.drawingstate.pointcolorraw=[b,c,a]};y.setlinecolor=function(a){var b=a.value[0].value.real,c=a.value[1].value.real;a=
+a.value[2].value.real;y.drawingstate.linecolor=y.makecolor(b,c,a);y.drawingstate.linecolorraw=[b,c,a]};y.settextcolor=function(a){var b=a.value[0].value.real,c=a.value[1].value.real;a=a.value[2].value.real;y.drawingstate.textcolor=y.makecolor(b,c,a);y.drawingstate.textcolorraw=[b,c,a]};y.setpointcolor=function(a){var b=a.value[0].value.real,c=a.value[1].value.real;a=a.value[2].value.real;y.drawingstate.pointcolor=y.makecolor(b,c,a);y.drawingstate.pointcolorraw=[b,c,a]};y.setalpha=function(a){y.drawingstate.alpha=
+a.value.real;y.drawingstate.linecolor=y.makecolor(y.drawingstate.linecolorraw[0],y.drawingstate.linecolorraw[1],y.drawingstate.linecolorraw[2]);y.drawingstate.pointcolor=y.makecolor(y.drawingstate.pointcolorraw[0],y.drawingstate.pointcolorraw[1],y.drawingstate.pointcolorraw[2]);y.drawingstate.textcolor=y.makecolor(y.drawingstate.textcolorraw[0],y.drawingstate.textcolorraw[1],y.drawingstate.textcolorraw[2])};y.setpointsize=function(a){y.drawingstate.pointsize=a.value.real};y.setlinesize=function(a){y.drawingstate.linesize=
+a.value.real};y.settextsize=function(a){y.drawingstate.textsize=a.value.real};var ga={clip:"none",pointColor:[1,0,0],lineColor:[0,0,1],pointSize:5,lineSize:1,alpha:1,overhangLine:1,overhangSeg:1,dimDependent:.7,fontFamily:"sans-serif",textColor:[0,0,0],textsize:20,noborder:!1,lineHeight:1.45};p.defaultAppearance&&he(p.defaultAppearance);var dc={},Cd={UL:0,UR:1,LR:2,LL:3},Cc=["in","out","good","backup"],nb=new Float64Array(0),ib={};Cc.forEach(function(a){ib[a]=nb});var qa=nb,Oa=nb,Da=nb,Ba,Ea,lb,Ma,
+Ab,Dc=!1,Ed={toString:function(){return"RefineException"}},Hd=null,L=null;p.enableTraceLog&&(L={logLength:Infinity,fullLog:[],currentMouseAndScripts:null,currentMover:null,currentStep:null,currentElement:null,currentParam:null,labelTracing2:w.wrap("tracing2"),labelTracing4:w.wrap("tracing4"),labelTracingSesq:w.wrap("tracingSesq"),postMouseHooks:[]},"number"===typeof p.enableTraceLog&&(L.logLength=p.enableTraceLog),sa.getTraceLog=ne,sa.formatTraceLog=oe,sa.addTraceHook=L.postMouseHooks.push.bind(L.postMouseHooks));
+Pa.stateSize=12;Fc.stateSize=24;Qb.stateSize=24;var ob=[];mb.P=function(a){v.lines.forEach(function(b){b=Kd(a,b);b.holds()&&ob.push(b)});v.conics.forEach(function(b){b=Ld(a,b);b.holds()&&ob.push(b)})};mb.L=function(a){v.points.forEach(function(b){b=Kd(b,a);b.holds()&&ob.push(b)})};mb.S=mb.L;mb.C=function(a){v.points.forEach(function(b){b=Ld(b,a);b.holds()&&ob.push(b)})};var l={_helper:{},RandomLine:{}};l.RandomLine.kind="L";l.RandomLine.signature=[];l.RandomLine.updatePosition=function(a){a.homog=
+h.realVector([Math.random()-.5,Math.random()-.5,Math.random()-.5]);a.homog=h.normalizeMax(a.homog);a.homog=w.withUsage(a.homog,"Line")};l.FreeLine={};l.FreeLine.kind="L";l.FreeLine.signature=[];l.FreeLine.isMovable=!0;l.FreeLine.initialize=function(a){a=l._helper.initializeLine(a);T(a)};l.FreeLine.getParamForInput=function(a,b,c){"mouse"===c?(a=h.cross(b,h.ez),a=h.cross(a,b)):a="homog"===c?b:h.turnIntoCSList([m.zero,m.zero,m.zero]);return h.normalizeMax(a)};l.FreeLine.getParamFromState=function(a){return X(3)};
+l.FreeLine.putParamToState=function(a,b){T(b)};l.FreeLine.updatePosition=function(a){var b=X(3);T(b);a.homog=w.withUsage(b,"Line")};l.FreeLine.stateSize=6;l.RandomPoint={};l.RandomPoint.kind="P";l.RandomPoint.signature=[];l.RandomPoint.updatePosition=function(a){a.homog=h.realVector([100*Math.random(),100*Math.random(),100*Math.random()]);a.homog=h.normalizeMax(a.homog);a.homog=w.withUsage(a.homog,"Point")};l.Join={};l.Join.kind="L";l.Join.signature=["P","P"];l.Join.updatePosition=function(a){a.homog=
+h.cross(v.csnames[a.args[0]].homog,v.csnames[a.args[1]].homog);a.homog=h.normalizeMax(a.homog);a.homog=w.withUsage(a.homog,"Line")};l.Segment={};l.Segment.kind="S";l.Segment.signature=["P","P"];l.Segment.updatePosition=function(a){var b=v.csnames[a.args[0]],c=v.csnames[a.args[1]];l.Segment.setSegmentPos(a,h.cross(b.homog,c.homog),h.scalmult(c.homog.value[2],b.homog),h.scalmult(b.homog.value[2],c.homog))};l.Segment.setSegmentPos=function(a,b,c,d){b=h.normalizeMax(b);a.homog=w.withUsage(b,"Line");b=
+h.turnIntoCSList([c,d]);b=h.normalizeMax(b);a.startpos=b.value[0];a.endpos=b.value[1]};l.Meet={};l.Meet.kind="P";l.Meet.signature=["L","L"];l.Meet.updatePosition=function(a){a.homog=h.cross(v.csnames[a.args[0]].homog,v.csnames[a.args[1]].homog);a.homog=h.normalizeMax(a.homog);a.homog=w.withUsage(a.homog,"Point")};l.Meet.visiblecheck=function(a){var b=!0,c=v.csnames[a.args[0]],d=v.csnames[a.args[1]];"S"===c.kind&&(b=Ad(a,c));b&&"S"===d.kind&&(b=Ad(a,d));a.isshowing=b};l._helper.midpoint=function(a,
+b){return h.normalizeMax(h.add(h.scalmult(b.value[2],a),h.scalmult(a.value[2],b)))};l.Mid={};l.Mid.kind="P";l.Mid.signature=["P","P"];l.Mid.updatePosition=function(a){var b=l._helper.midpoint(v.csnames[a.args[0]].homog,v.csnames[a.args[1]].homog);a.homog=w.withUsage(b,"Point")};l.Perp={};l.Perp.kind="L";l.Perp.signature=["L","P"];l.Perp.updatePosition=function(a){var b=v.csnames[a.args[0]].homog,c=v.csnames[a.args[1]].homog,b=h.turnIntoCSList([b.value[0],b.value[1],m.zero]);a.homog=h.cross(b,c);a.homog=
+h.normalizeMax(a.homog);a.homog=w.withUsage(a.homog,"Line")};l.Para={};l.Para.kind="L";l.Para.signature=["L","P"];l.Para.updatePosition=function(a){var b=v.csnames[a.args[1]].homog;a.homog=h.cross(h.cross(h.linfty,v.csnames[a.args[0]].homog),b);a.homog=h.normalizeMax(a.homog);a.homog=w.withUsage(a.homog,"Line")};l.Horizontal={};l.Horizontal.kind="L";l.Horizontal.signature=["P"];l.Horizontal.updatePosition=function(a){a.homog=h.cross(h.ex,v.csnames[a.args[0]].homog);a.homog=h.normalizeMax(a.homog);
+a.homog=w.withUsage(a.homog,"Line")};l.HorizontalLine={};l.HorizontalLine.kind="L";l.HorizontalLine.signature=[];l.HorizontalLine.isMovable=!0;l.HorizontalLine.initialize=function(a){a=l._helper.initializeLine(a);a=h.turnIntoCSList([m.zero,a.value[1],a.value[2]]);a=h.normalizeMax(a);T(a)};l.HorizontalLine.getParamForInput=function(a,b,c){if("mouse"===c)b=h.cross(b,h.ex);else if("homog"===c){if(0!==b.value[0].real||0!==b.value[0].imag)b=h.turnIntoCSList([m.zero,b.value[1],b.value[2]])}else b=h.turnIntoCSList([m.zero,
+m.zero,m.zero]);return h.normalizeMax(b)};l.HorizontalLine.getParamFromState=function(a){return X(3)};l.HorizontalLine.putParamToState=function(a,b){T(b)};l.HorizontalLine.updatePosition=function(a){var b=X(3);T(b);a.homog=w.withUsage(b,"Line")};l.HorizontalLine.stateSize=6;l.Vertical={};l.Vertical.kind="L";l.Vertical.signature=["P"];l.Vertical.updatePosition=function(a){a.homog=h.cross(h.ey,v.csnames[a.args[0]].homog);a.homog=h.normalizeMax(a.homog);a.homog=w.withUsage(a.homog,"Line")};l.VerticalLine=
+{};l.VerticalLine.kind="L";l.VerticalLine.signature=[];l.VerticalLine.isMovable=!0;l.VerticalLine.initialize=function(a){a=l._helper.initializeLine(a);a=h.turnIntoCSList([a.value[0],m.zero,a.value[2]]);a=h.normalizeMax(a);T(a)};l.VerticalLine.getParamForInput=function(a,b,c){if("mouse"===c)b=h.cross(b,h.ey);else if("homog"===c){if(0!==b.value[1].real||0!==b.value[1].imag)b=h.turnIntoCSList([b.value[0],m.zero,b.value[2]])}else b=h.turnIntoCSList([m.zero,m.zero,m.zero]);return h.normalizeMax(b)};l.VerticalLine.getParamFromState=
+function(a){return X(3)};l.VerticalLine.putParamToState=function(a,b){T(b)};l.VerticalLine.updatePosition=function(a){var b=X(3);T(b);a.homog=w.withUsage(b,"Line")};l.VerticalLine.stateSize=6;l.LineByFixedAngle={};l.LineByFixedAngle.kind="L";l.LineByFixedAngle.signature=["L","P"];l.LineByFixedAngle.initialize=function(a){var b=m._helper.input(a.angle),c=m.cos(b),b=m.sin(b);a.rot=h.turnIntoCSList([h.turnIntoCSList([b,c,m.zero]),h.turnIntoCSList([m.neg(c),b,m.zero]),h.turnIntoCSList([m.zero,m.zero,
+m.zero])])};l.LineByFixedAngle.updatePosition=function(a){var b=v.csnames[a.args[1]],c=h.productMV(a.rot,v.csnames[a.args[0]].homog);a.homog=h.cross(b.homog,c);a.homog=h.normalizeMax(a.homog);a.homog=w.withUsage(a.homog,"Line")};l.Through={};l.Through.kind="L";l.Through.signature=["P"];l.Through.isMovable=!0;l.Through.initialize=function(a){a=a.dir?w.wrap(a.dir):h.realVector([a.pos[1],-a.pos[0],0]);T(a)};l.Through.getParamForInput=function(a,b,c){a="dir"===c||"mouse"===c?h.cross(v.csnames[a.args[0]].homog,
+b):"homog"===c?b:h.turnIntoCSList([m.zero,m.zero,m.zero]);a=h.cross(h.linfty,a);return h.normalizeMax(a)};l.Through.getParamFromState=function(a){return X(3)};l.Through.putParamToState=function(a,b){T(b)};l.Through.updatePosition=function(a){var b=X(3);T(b);b=h.cross(v.csnames[a.args[0]].homog,b);b=h.normalizeMax(b);a.homog=w.withUsage(b,"Line")};l.Through.stateSize=6;l.Through.set_angle=function(a,b){if("number"===b.ctype){var c=m.cos(b),d=m.sin(b),c=h.turnIntoCSList([c,d,m.real(0)]);La(a,c,"dir")}};
+l.Through.set_slope=function(a,b){if("number"===b.ctype){var c=h.turnIntoCSList([m.real(1),b,m.real(0)]);La(a,c,"dir")}};l.Free={};l.Free.kind="P";l.Free.signature=[];l.Free.isMovable=!0;l.Free.initialize=function(a){a=l._helper.initializePoint(a);T(a)};l.Free.getParamForInput=function(a,b,c){if("mouse"===c&&Eb&&0!==za){b=h.normalizeZ(b);a=b.value[0].value.real;c=b.value[1].value.real;var d=Math.round(a/za)*za,e=Math.round(c/za)*za;.2>Math.abs(d-a)&&.2>Math.abs(e-c)&&(b=h.realVector([d,e,1]))}return h.normalizeMax(b)};
+l.Free.getParamFromState=function(a){return X(3)};l.Free.putParamToState=function(a,b){T(b)};l.Free.updatePosition=function(a){var b=X(3);T(b);a.homog=w.withUsage(b,"Point")};l.Free.stateSize=6;l._helper.projectPointToLine=function(a,b){var c=h.turnIntoCSList([b.value[0],b.value[1],m.zero]),c=h.cross(c,a);return h.normalizeMax(h.cross(c,b))};l.PointOnLine={};l.PointOnLine.kind="P";l.PointOnLine.signature=["L"];l.PointOnLine.isMovable=!0;l.PointOnLine.initialize=function(a){var b=l._helper.initializePoint(a);
+a=v.csnames[a.args[0]].homog;var b=l._helper.projectPointToLine(b,a),b=h.normalizeMax(b),c=h.cross(h.linfty,b);h.normalizeMax(c);T(b);T(a);lb=!1};l.PointOnLine.updatePosition=function(a,b){var c,d=v.csnames[a.args[0]].homog;c=X(3);X(3);if(!b){Ba=a.stateIdx;var e=qa;qa=Da;var f=X(3),m=X(3);qa=e;e=h.cross(m,d);h._helper.isAlmostZero(e)&&(e=h.cross(h.linfty,d));f=l._helper.CircleMP(e,f);f=l._helper.IntersectLC(d,f);e=l._helper.pointReflection(e,c);c=Ec(f[0],f[1],c,e)[0]}c=h.normalizeMax(c);T(c);T(d);
+a.homog=w.withUsage(c,"Point")};l.PointOnLine.getParamForInput=function(a,b,c){a=v.csnames[a.args[0]].homog;b=l._helper.projectPointToLine(b,a);"mouse"===c&&Eb&&0!==za&&(b=l._helper.snapPointToLine(b,a));return b};l.PointOnLine.getParamFromState=function(a){return X(3)};l.PointOnLine.putParamToState=function(a,b){return T(b)};l.PointOnLine.stateSize=12;l.PointOnCircle={};l.PointOnCircle.kind="P";l.PointOnCircle.signature=["C"];l.PointOnCircle.isMovable=!0;l.PointOnCircle.initialize=function(a){var b=
+v.csnames[a.args[0]];a=h.normalizeZ(l._helper.initializePoint(a));var c=h.normalizeZ(l._helper.CenterOfCircle(b.matrix)),d=h.sub(a,c),d=h.turnIntoCSList([d.value[1],m.neg(d.value[0]),m.zero]),c=h.cross(a,c),b=l._helper.IntersectLC(c,b.matrix),c=h.projectiveDistMinScal(a,b[0]);h.projectiveDistMinScal(a,b[1])<c?(a=b[1],b=b[0]):(a=b[0],b=b[1]);T(d);T(a);T(b);lb=!1};l.PointOnCircle.putParamToState=function(a,b){T(b)};l.PointOnCircle.getParamFromState=function(a){return X(3)};l.PointOnCircle.getParamForInput=
+function(a,b,c){c=h.normalizeZ(l._helper.CenterOfCircle(v.csnames[a.args[0]].matrix));b=h.sub(b,c);Ba=a.stateIdx;a=X(3);var d=h.normalizeZ(X(3));c=h.sub(d,c);0>m.sub(m.mult(a.value[0],c.value[1]),m.mult(a.value[1],c.value[0])).value.real&&(b=h.neg(b));return h.turnIntoCSList([b.value[1],m.neg(b.value[0]),m.zero])};l.PointOnCircle.parameterPath=function(a,b,c,d,e){d=h.normalizeAbs(d);e=h.normalizeAbs(e);var f=h.scalproduct(d,e);if(0<=f.value.real)return Fd(a,b,c,d,e);a=h.turnIntoCSList([m.sub(d.value[1],
+e.value[1]),m.sub(e.value[0],d.value[0]),m.zero]);f=h.scalproduct(d,a);0>f.value.real&&(a=h.neg(a));0>b?(b=2*b+1,c=b*b,f=.25/(1+c),c=m.complex(2*b*f+.25,(1-c)*f)):(b=2*b-1,c=b*b,f=.25/(1+c),c=m.complex(2*b*f+.75,(1-c)*f));var k=m.sub(m.real(1),c);b=m.mult(c,c);f=m.mult(k,k);c=m.mult(c,k);d=h.scalmult(f,d);d=h.add(d,h.scalmult(c,a));return d=h.add(d,h.scalmult(b,e))};l.PointOnCircle.updatePosition=function(a){var b=X(3);T(b);var c=v.csnames[a.args[0]],b=h.productMV(c.matrix,b),c=l._helper.IntersectLC(b,
+c.matrix),c=Pa(c[0],c[1]),b=h.normalizeMax(c.value[0]);a.homog=w.withUsage(b,"Point");a.antipodalPoint=c.value[1]};l.PointOnCircle.stateSize=6+Pa.stateSize;l.OtherPointOnCircle={};l.OtherPointOnCircle.kind="P";l.OtherPointOnCircle.signature=["P"];l.OtherPointOnCircle.signatureConstraints=function(a){return"PointOnCircle"===v.csnames[a.args[0]].type};l.OtherPointOnCircle.updatePosition=function(a){var b=v.csnames[a.args[0]].antipodalPoint,b=h.normalizeMax(b);a.homog=w.withUsage(b,"Point")};l.PointOnSegment=
+{};l.PointOnSegment.kind="P";l.PointOnSegment.signature=["S"];l.PointOnSegment.isMovable=!0;l.PointOnSegment.initialize=function(a){var b=l._helper.initializePoint(a);a=l.PointOnSegment.getParamForInput(a,b);Za(a)};l.PointOnSegment.getParamForInput=function(a,b,c){a=v.csnames[a.args[0]];var d=a.homog;"mouse"===c&&Eb&&0!==za&&(b=l._helper.snapPointToLine(b,d));c=h.turnIntoCSList([d.value[0],d.value[1],m.zero]);d=h.sub(a.startpos,a.endpos);b=h.crossratio3(d,a.startpos,a.endpos,b,c);0>b.value.real&&
+(b=m.complex(0,b.value.imag));1<b.value.real&&(b=m.complex(1,b.value.imag));return b};l.PointOnSegment.getParamFromState=function(a){return Bb()};l.PointOnSegment.putParamToState=function(a,b){Za(b)};l.PointOnSegment.updatePosition=function(a){var b=Bb();Za(b);var c=v.csnames[a.args[0]],d=c.startpos,c=h.sub(c.endpos,d),b=h.add(d,h.scalmult(b,c)),b=h.normalizeMax(b);a.homog=w.withUsage(b,"Point")};l.PointOnSegment.stateSize=2;l._helper.projectPointToCircle=function(a,b){var c=l._helper.CenterOfCircle(a.matrix),
+c=h.normalizeMax(c),c=h.normalizeMax(h.cross(b,c)),c=l._helper.IntersectLC(c,a.matrix),d=h.projectiveDistMinScal(b,c[0]),e=h.projectiveDistMinScal(b,c[1]);return d<e?c[0]:c[1]};l.PointOnArc={};l.PointOnArc.kind="P";l.PointOnArc.signature=["C"];l.PointOnArc.signatureConstraints=function(a){return v.csnames[a.args[0]].isArc};l.PointOnArc.isMovable=!0;l.PointOnArc.initialize=function(a){var b=l._helper.initializePoint(a);a=l.PointOnArc.getParamForInput(a,b);T(a)};l.PointOnArc.getParamForInput=function(a,
+b){var c=v.csnames[a.args[0]],d=l._helper.projectPointToCircle(c,b),c=h.normalizeMax(h.crossratio3harm(c.startPoint,c.endPoint,c.viaPoint,d,h.ii)),d=m.div(c.value[0],c.value[1]);0>d.value.real&&(c=-1>d.value.real?h.realVector([1,0]):h.realVector([0,1]));return c};l.PointOnArc.getParamFromState=function(a){return X(2)};l.PointOnArc.putParamToState=function(a,b){T(b)};l.PointOnArc.updatePosition=function(a){var b=v.csnames[a.args[0]],c=b.startPoint,d=b.viaPoint,e=b.endPoint,f=h.ii,k=h.cross(c,f),d=
+h.cross(d,f),n=h.cross(e,f),n=h.turnIntoCSList([k,n]),k=h.transpose(n),n=h.conjugate(n),k=h.productMM(n,k),d=h.productMV(n,d),k=h.productMV(h.adjoint2(k),d),d=k.value[0],k=k.value[1],n=X(2);T(n);c=h.normalizeMax(h.add(h.scalmult(m.mult(d,n.value[0]),c),h.scalmult(m.mult(k,n.value[1]),e)));b=l._helper.conicOtherIntersection(b.matrix,f,c);a.homog=w.withUsage(b,"Point")};l.PointOnArc.stateSize=4;l._helper.CenterOfCircle=function(a){return h.turnIntoCSList([a.value[2].value[0],a.value[2].value[1],m.neg(a.value[0].value[0])])};
+l._helper.CenterOfConic=function(a){a=h.adjoint3(a);return{ctype:"list",value:[a.value[2].value[0],a.value[2].value[1],a.value[2].value[2]]}};l.CenterOfConic={};l.CenterOfConic.kind="P";l.CenterOfConic.signature=["C"];l.CenterOfConic.updatePosition=function(a){var b=l._helper.CenterOfConic(v.csnames[a.args[0]].matrix);a.homog=b;a.homog=h.normalizeMax(a.homog);a.homog=w.withUsage(a.homog,"Point")};l._helper.CircleMP=function(a,b){var c=a.value[0],d=a.value[1],e=m.neg(a.value[2]),f=m.zero,c=h.turnIntoCSList([h.turnIntoCSList([e,
+f,c]),h.turnIntoCSList([f,e,d]),h.turnIntoCSList([c,d,f])]),e=w.mult(w.mult(b,c),b),d=w.mult(w.mult(b,h.fund),b),e=w.mult(e,h.fund),c=w.mult(d,c);return h.sub(e,c)};l.CircleMP={};l.CircleMP.kind="C";l.CircleMP.signature=["P","P"];l.CircleMP.updatePosition=function(a){a.matrix=l._helper.CircleMP(v.csnames[a.args[0]].homog,v.csnames[a.args[1]].homog);a.matrix=h.normalizeMax(a.matrix);a.matrix=w.withUsage(a.matrix,"Circle")};l.CircleMr={};l.CircleMr.kind="C";l.CircleMr.signature=["P"];l.CircleMr.isMovable=
+!0;l.CircleMr.initialize=function(a){Za(m.real(a.radius))};l.CircleMr.getParamForInput=function(a,b,c){if("radius"===c)return b;a=v.csnames[a.args[0]].homog;a=h.normalizeZ(a);b=h.normalizeZ(b);b=h.sub(a,b);return b=h.abs(b)};l.CircleMr.getParamFromState=function(a){return Bb()};l.CircleMr.putParamToState=function(a,b){Za(b)};l.CircleMr.updatePosition=function(a){var b=Bb();Za(b);var c=v.csnames[a.args[0]].homog,d=m.mult(c.value[2],b),d=m.mult(d,d);if(!m._helper.isFinite(d)&&!m._helper.isNaN(d))return h.fund;
+c=l._helper.ScaledCircleMrr(c,d);a.matrix=w.withUsage(c,"Circle");a.radius=b};l.CircleMr.stateSize=2;l.CircleMr.set_radius=function(a,b){"number"===b.ctype&&La(a,b,"radius")};l._helper.ScaledCircleMrr=function(a,b){var c=a.value[0],d=a.value[1],e=m.neg(a.value[2]),e=h.scalmult(e,h.turnIntoCSList([c,d,e])).value,c=h.turnIntoCSList([c,d]),c=m.sub(h.scalproduct(c,c),b),e=l._helper.buildConicMatrix([e[2],m.zero,e[2],e[0],e[1],c]);return h.normalizeMax(e)};l.Compass={};l.Compass.kind="C";l.Compass.signature=
+["P","P","P"];l.Compass.updatePosition=function(a){var b=v.csnames[a.args[0]].homog,c=v.csnames[a.args[1]].homog,d=v.csnames[a.args[2]].homog,e=b.value[2],f=c.value[2],k=d.value[2],b=h.scalmult(m.mult(f,k),b),c=h.scalmult(m.mult(e,k),c),d=h.scalmult(m.mult(e,f),d),b=h.sub(c,b),d=l._helper.ScaledCircleMrr(d,h.scalproduct(b,b));a.matrix=w.withUsage(d,"Circle")};l._helper.getConicType=function(a){if(1E-16>m.abs(h.det(a)).value.real)return"degenerate";var b=m.mult(a.value[0].value[0],a.value[1].value[1]),
+b=m.sub(b,m.pow(a.value[0].value[1],m.real(2))),b=b.value.real;return 1E-16>Math.abs(b)?"parabola":1E-16<b?"ellipsoid":"hyperbola"};l._helper.ConicBy5=function(a,b,c,d,e,f){a=h.turnIntoCSList([h.cross(c,d)]);var m=h.turnIntoCSList([h.cross(b,e)]);b=h.turnIntoCSList([h.cross(b,c)]);d=h.turnIntoCSList([h.cross(d,e)]);return l._helper.conicFromTwoDegenerates(a,m,b,d,f)};l._helper.conicFromTwoDegenerates=function(a,b,c,d,e){a=w.mult(h.transpose(b),a);c=w.mult(h.transpose(d),c);a=h.add(a,h.transpose(a));
+c=h.add(c,h.transpose(c));d=w.mult(w.mult(e,a),e);e=w.mult(w.mult(e,c),e);c=w.mult(d,c);e=w.mult(e,a);return h.sub(c,e)};l.ConicBy5={};l.ConicBy5.kind="C";l.ConicBy5.signature=["P","P","P","P","P"];l.ConicBy5.updatePosition=function(a){var b=l._helper.ConicBy5(a,v.csnames[a.args[0]].homog,v.csnames[a.args[1]].homog,v.csnames[a.args[2]].homog,v.csnames[a.args[3]].homog,v.csnames[a.args[4]].homog);a.matrix=b;a.matrix=h.normalizeMax(a.matrix);a.matrix=w.withUsage(a.matrix,"Conic")};l.FreeConic={};l.FreeConic.kind=
+"C";l.FreeConic.signature=[];l.FreeConic.initialize=function(a){var b;b=a.pos?l._helper.inputConic(a.pos):h.zeromatrix(m.real(3),m.real(3));l.FreeConic.putParamToState(a,b)};l.FreeConic.getParamForInput=function(a,b,c){return h.normalizeMax(b)};l.FreeConic.getParamFromState=function(a){return l._helper.buildConicMatrix(X(6).value)};l.FreeConic.putParamToState=function(a,b){for(var c=0;3>c;++c)for(var d=0;d<=c;++d)Za(b.value[c].value[d])};l.FreeConic.updatePosition=function(a){var b=X(6);T(b);a.matrix=
+l._helper.buildConicMatrix(b.value);a.matrix=h.normalizeMax(a.matrix);a.matrix=w.withUsage(a.matrix,"Conic")};l.FreeConic.set_matrix=function(a,b){h._helper.isNumberMatrixMN(b,3,3)&&La(a,h.add(b,h.transpose(b)),"matrix")};l.FreeConic.stateSize=12;l._helper.buildConicMatrix=function(a){var b=a[1],c=a[2],d=a[3],e=a[4],f=a[5];return h.turnIntoCSList([h.turnIntoCSList([a[0],b,d]),h.turnIntoCSList([b,c,e]),h.turnIntoCSList([d,e,f])])};l._helper.flattenConicMatrix=function(a){return h.turnIntoCSList([a.value[0].value[0],
+a.value[0].value[1],a.value[1].value[1],a.value[0].value[2],a.value[1].value[2],a.value[2].value[2]])};l._helper.splitDegenConic=function(a){var b=h.adjoint3(a),c=0,d,e,f=m.abs2(b.value[0].value[0]).value.real;for(d=1;3>d;d++)e=m.abs2(b.value[d].value[d]).value.real,e>f&&(c=d,f=e);d=m.sqrt(m.mult(m.real(-1),b.value[c].value[c]));if(1E-16>m.abs2(d).value.real)return a=h.turnIntoCSList([m.zero,m.zero,m.zero]),[a,a];c=m.real(c+1);e=h.column(b,c);e=h.scaldiv(d,e);d=e.value[0];f=e.value[1];e=e.value[2];
+d=h.turnIntoCSList([h.turnIntoCSList([m.real(0),e,m.mult(m.real(-1),f)]),h.turnIntoCSList([m.mult(m.real(-1),e),m.real(0),d]),h.turnIntoCSList([f,m.mult(m.real(-1),d),m.real(0)])]);a=h.add(a,d);var k=0;for(d=f=b=0;3>d;d++)for(c=0;3>c;c++)e=m.abs2(a.value[d].value[c]).value.real,e>f&&(k=d,b=c,f=e);d=a.value[k];a=h.transpose(a);a=a.value[b];d=h.normalizeMax(d);a=h.normalizeMax(a);d=w.withUsage(d,"Line");a=w.withUsage(a,"Line");return[d,a]};l._helper.inputConic=function(a){var b="xx xy yy xz yz zz".split(" ").map(function(b){var d=
+m._helper.input(a[b]);b[0]!==b[1]&&(d=m.realmult(.5,d));return d});return l._helper.buildConicMatrix(b)};l.SelectConic={};l.SelectConic.kind="C";l.SelectConic.signature=["Cs"];l.SelectConic.initialize=function(a){if(void 0!==a.index)return a.index-1;var b=l._helper.inputConic(a.pos);a=v.csnames[a.args[0]].results;for(var c=h.conicDist(b,a[0]),d=0,e=1;e<a.length;++e){var f=h.conicDist(b,a[e]);f<c&&(c=f,d=e)}return d};l.SelectConic.updatePosition=function(a){a.matrix=v.csnames[a.args[0]].results[a.param];
+a.matrix=h.normalizeMax(a.matrix);a.matrix=w.withUsage(a.matrix,"Conic")};l._helper.ConicBy4p1l=function(a,b,c,d,e,f){var k=h.scalproduct(b,f),n=h.scalproduct(c,f),p=h.scalproduct(d,f),r=h.scalproduct(e,f),t=h.det3(c,d,e),v=h.det3(b,c,e),u=h.det3(b,d,e),w=h.det3(b,c,d),x=m.mult,n=m.sqrt(x(x(n,r),x(t,v))),k=m.sqrt(x(x(k,p),x(u,w))),p=h.cross(h.cross(b,d),f);f=h.cross(h.cross(c,e),f);p=h.scalmult(n,p);k=h.scalmult(k,f);f=h.normalizeMax(h.add(p,k));k=h.normalizeMax(h.sub(p,k));k=Pa(f,k);f=l._helper.ConicBy5(a,
+b,c,d,e,k.value[0]);a=l._helper.ConicBy5(a,b,c,d,e,k.value[1]);return[h.normalizeMax(f),h.normalizeMax(a)]};l.ConicBy4p1l={};l.ConicBy4p1l.kind="Cs";l.ConicBy4p1l.signature=["P","P","P","P","L"];l.ConicBy4p1l.updatePosition=function(a){var b=l._helper.ConicBy4p1l(a,v.csnames[a.args[0]].homog,v.csnames[a.args[1]].homog,v.csnames[a.args[2]].homog,v.csnames[a.args[3]].homog,v.csnames[a.args[4]].homog);a.results=b};l.ConicBy4p1l.stateSize=Pa.stateSize;l._helper.ConicBy3p2l=function(a,b,c,d,e){function f(a,
+b,c,d){return m.sub(m.mult(a,d),m.mult(b,c))}var k=h.cross(a,b),l=h.cross(d,e);d=h.cross(d,k);e=h.cross(e,k);k=h.turnIntoCSList([d,e,l]);c=h.productVM(c,h.adjoint3(k));l=h.adjoint3(h.turnIntoCSList([h.scalmult(c.value[0],d),h.scalmult(c.value[1],e),h.scalmult(c.value[2],l)]));c=h.transpose(l);d=m.mult;e=h.productMV(c,a);a=e.value[0];e=e.value[1];k=h.productMV(c,b);b=k.value[0];var k=k.value[1],n=m.sqrt(d(a,e)),p=m.sqrt(d(b,k)),r,t=Array(4);for(r=0;4>r;++r){var v=(r&2)-1,u=d(m.real(((r&1)<<1)-1),n),
+w=d(m.real(v),p),x=f(e,u,k,w),y=f(b,w,a,u),v=f(a,e,b,k),z=m.add(m.add(f(b,k,a,e),f(k,w,e,u)),f(w,b,u,a)),u=d(x,x),w=d(y,y),A=d(z,z),B=d(x,y),x=d(x,z),y=d(y,z),B=m.sub(B,d(m.real(.5),d(v,v))),v=h.turnIntoCSList([h.turnIntoCSList([u,B,x]),h.turnIntoCSList([B,w,y]),h.turnIntoCSList([x,y,A])]),v=h.productMM(l,h.productMM(v,c)),v=h.turnIntoCSList([v.value[0].value[0],v.value[0].value[1],v.value[0].value[2],v.value[1].value[1],v.value[1].value[2],v.value[2].value[2]]);t[r]=v}return t};l.ConicBy3p2l={};
+l.ConicBy3p2l.kind="Cs";l.ConicBy3p2l.signature=["P","P","P","L","L"];l.ConicBy3p2l.updatePosition=function(a){for(var b=l._helper.ConicBy3p2l(v.csnames[a.args[0]].homog,v.csnames[a.args[1]].homog,v.csnames[a.args[2]].homog,v.csnames[a.args[3]].homog,v.csnames[a.args[4]].homog),b=Id(b),c=Array(4),d=0;4>d;++d){var e=b[d].value;c[d]=h.turnIntoCSList([h.turnIntoCSList([e[0],e[1],e[2]]),h.turnIntoCSList([e[1],e[3],e[4]]),h.turnIntoCSList([e[2],e[4],e[5]])])}a.results=c};l.ConicBy3p2l.stateSize=48;l.ConicBy2p3l=
+{};l.ConicBy2p3l.kind="Cs";l.ConicBy2p3l.signature=["P","P","L","L","L"];l.ConicBy2p3l.updatePosition=function(a){for(var b=l._helper.ConicBy3p2l(v.csnames[a.args[2]].homog,v.csnames[a.args[3]].homog,v.csnames[a.args[4]].homog,v.csnames[a.args[0]].homog,v.csnames[a.args[1]].homog),b=Id(b),c=Array(4),d=0;4>d;++d){var e=b[d].value,e=h.turnIntoCSList([h.turnIntoCSList([e[0],e[1],e[2]]),h.turnIntoCSList([e[1],e[3],e[4]]),h.turnIntoCSList([e[2],e[4],e[5]])]);c[d]=h.normalizeMax(h.adjoint3(e))}a.results=
+c};l.ConicBy2p3l.stateSize=48;l.ConicBy1p4l={};l.ConicBy1p4l.kind="Cs";l.ConicBy1p4l.signature=["P","L","L","L","L"];l.ConicBy1p4l.updatePosition=function(a){var b=l._helper.ConicBy4p1l(a,v.csnames[a.args[1]].homog,v.csnames[a.args[2]].homog,v.csnames[a.args[3]].homog,v.csnames[a.args[4]].homog,v.csnames[a.args[0]].homog),c=b[0],b=b[1],c=h.adjoint3(c),b=h.adjoint3(b),b=[c,b];a.results=b};l.ConicBy1p4l.stateSize=Pa.stateSize;l.ConicParabolaPL={};l.ConicParabolaPL.kind="C";l.ConicParabolaPL.signature=
+["P","L"];l.ConicParabolaPL.updatePosition=function(a){var b=v.csnames[a.args[0]].homog.value,c=v.csnames[a.args[1]].homog.value,d=m.mult,e=m.neg,f=m.add,k=m.sub,n=b[0],p=b[1],r=b[2],t=c[0],b=c[1],c=c[2],u=d(r,r),x=d(t,t),y=d(b,b),z=d(r,c),A=e(r),r=f(x,y),y=d(u,y),x=d(u,x),e=d(e(u),d(t,b)),t=d(A,f(d(n,r),d(z,t))),b=d(A,f(d(p,r),d(z,b))),d=k(d(f(d(n,n),d(p,p)),r),d(u,d(c,c))),d=l._helper.buildConicMatrix([y,e,x,t,b,d]),d=h.normalizeMax(d);a.matrix=w.withUsage(d,"Conic")};l.ConicBy2Foci1P={};l.ConicBy2Foci1P.kind=
+"Cs";l.ConicBy2Foci1P.signature=["P","P","P"];l.ConicBy2Foci1P.updatePosition=function(a){var b=v.csnames[a.args[0]].homog,c=v.csnames[a.args[1]].homog,d=v.csnames[a.args[2]].homog,e=h.ii,f=h.jj,k=h.normalizeMax(h.cross(b,d)),n=h.normalizeMax(h.cross(c,d)),p=h.normalizeMax(h.cross(d,e)),d=h.normalizeMax(h.cross(d,f)),n=l._helper.coHarmonic(p,d,k,n),k=h.normalizeMax(n[0]),n=h.normalizeMax(n[1]),e=h.turnIntoCSList([e]),p=h.turnIntoCSList([f]),d=h.turnIntoCSList([b]),r=h.turnIntoCSList([c]),f=l._helper.conicFromTwoDegenerates(e,
+p,d,r,k),f=h.normalizeMax(f),e=l._helper.conicFromTwoDegenerates(e,p,d,r,n),e=h.normalizeMax(e),f=h.normalizeMax(h.adjoint3(f)),e=h.normalizeMax(h.adjoint3(e));"ellipsoid"!==l._helper.getConicType(f)&&(k=f,f=e,e=k);h.almostequals(b,c).value&&(b=m.real(3),e=h.zeromatrix(b,b));a.results=[f,e]};l.ConicBy2Pol1P={};l.ConicBy2Pol1P.kind="C";l.ConicBy2Pol1P.signature=["P","L","P","L","P"];l.ConicBy2Pol1P.updatePosition=function(a){var b=v.csnames[a.args[0]].homog,c=v.csnames[a.args[1]].homog,d=v.csnames[a.args[2]].homog,
+e=v.csnames[a.args[3]].homog,f=v.csnames[a.args[4]].homog,k=h.scalproduct,l=h.scalmult,n=h.sub,p=h.productMM,r=m.realmult,t=h.transpose,u=h.turnIntoCSList,x=n(l(k(c,b),f),l(r(2,k(c,f)),b)),y=n(l(k(e,d),f),l(r(2,k(e,f)),d)),z=u([h.cross(b,f)]),f=u([h.cross(d,f)]),y=p(t(z),u([h.cross(b,y)])),u=p(t(f),u([h.cross(d,x)])),p=p(t(z),f),b=k(b,e),c=k(d,c),d=h.add(l(c,y),l(b,u)),d=n(d,l(r(2,m.mult(b,c)),p)),d=h.add(d,t(d)),d=h.normalizeMax(d),d=w.withUsage(d,"Conic");a.matrix=d};l.ConicBy2Pol1L={};l.ConicBy2Pol1L.kind=
+"C";l.ConicBy2Pol1L.signature=["P","L","P","L","L"];l.ConicBy2Pol1L.updatePosition=function(a){var b=v.csnames[a.args[0]].homog,c=v.csnames[a.args[1]].homog,d=v.csnames[a.args[2]].homog,e=v.csnames[a.args[3]].homog,f=v.csnames[a.args[4]].homog,k=h.scalproduct,l=h.scalmult,n=h.productMM,p=m.mult,r=h.transpose,t=h.turnIntoCSList,u=k(c,b),x=k(c,d),y=k(e,b),z=k(e,d),A=k(f,b),k=k(f,d),B=t([h.sub(l(p(y,k),c),l(p(x,A),e))]),b=h.add(n(r(t([l(p(y,x),f)])),t([h.sub(h.add(l(m.sub(p(u,k),p(x,A)),e),l(m.sub(p(z,
+A),p(y,k)),c)),l(h.det3(c,e,f),h.cross(b,d)))])),n(r(B),B)),b=h.add(b,r(b)),b=h.normalizeMax(b),b=w.withUsage(b,"Conic");a.matrix=b};l._helper.conic1Pol3Inc=function(a,b,c,d,e){var f=h.scalproduct,k=h.scalmult,l=h.productMM,n=h.cross,p=m.realmult,r=m.mult,t=h.transpose,v=h.turnIntoCSList,u=h.det3,w=u(a,c,d),x=v([n(c,e)]),y=v([n(a,e)]),z=v([n(c,d)]),A=f(b,a),B=f(b,c);b=f(b,e);n=v([n(d,h.sub(k(A,e),k(p(2,b),a)))]);x=k(w,l(t(x),n));a=p(2,m.add(r(u(a,d,e),B),r(w,b)));a=m.sub(r(u(c,d,e),A),a);x=h.add(x,
+k(a,l(t(y),z)));x=h.add(x,t(x));return x=h.normalizeMax(x)};l.ConicBy1Pol3P={};l.ConicBy1Pol3P.kind="C";l.ConicBy1Pol3P.signature=["P","L","P","P","P"];l.ConicBy1Pol3P.updatePosition=function(a){var b=l._helper.conic1Pol3Inc(v.csnames[a.args[0]].homog,v.csnames[a.args[1]].homog,v.csnames[a.args[2]].homog,v.csnames[a.args[3]].homog,v.csnames[a.args[4]].homog),b=w.withUsage(b,"Conic");a.matrix=b};l.ConicBy1Pol3L={};l.ConicBy1Pol3L.kind="C";l.ConicBy1Pol3L.signature=["P","L","L","L","L"];l.ConicBy1Pol3L.updatePosition=
+function(a){var b=l._helper.conic1Pol3Inc(v.csnames[a.args[1]].homog,v.csnames[a.args[0]].homog,v.csnames[a.args[2]].homog,v.csnames[a.args[3]].homog,v.csnames[a.args[4]].homog),b=h.normalizeMax(h.adjoint3(b)),b=w.withUsage(b,"Conic");a.matrix=b};l.ConicBy1Pol2P1L={};l.ConicBy1Pol2P1L.kind="Cs";l.ConicBy1Pol2P1L.signature=["P","L","P","P","L"];l.ConicBy1Pol2P1L.updatePosition=function(a){var b=v.csnames[a.args[0]].homog,c=v.csnames[a.args[1]].homog,d=v.csnames[a.args[2]].homog,e=v.csnames[a.args[3]].homog,
+f=v.csnames[a.args[4]].homog,k=m.add,l=h.turnIntoCSList,n=h.cross,p=h.productMM,r=m.mult,t=m.realmult,u=h.scalmult,w=h.scalproduct,x=m.sub,y=h.transpose,z=w(c,b),A=w(c,d),B=w(c,e),c=w(f,b),C=w(f,d),w=w(f,e),f=l([n(b,d)]),b=l([n(b,e)]),d=l([n(d,e)]),e=m.sqrt(r(r(C,w),r(x(r(z,C),t(2,r(c,A))),x(r(z,w),t(2,r(c,B)))))),l=p(y(f),b),e=u(e,h.add(l,y(l))),k=u(x(r(z,r(C,w)),k(r(c,r(A,w)),r(c,r(C,B)))),l),t=h.add(h.sub(u(B,f),u(A,b)),u(t(.5,z),d)),k=h.add(k,u(r(c,c),p(y(d),t))),k=h.add(k,y(k)),p=h.normalizeMax(h.add(e,
+k)),r=h.normalizeMax(h.sub(e,k));a.results=Qb(p,r).value};l.ConicBy1Pol2P1L.stateSize=Qb.stateSize;l.ConicBy1Pol1P2L={};l.ConicBy1Pol1P2L.kind="Cs";l.ConicBy1Pol1P2L.signature=["P","L","P","L","L"];l.ConicBy1Pol1P2L.updatePosition=function(a){var b=v.csnames[a.args[0]].homog,c=v.csnames[a.args[1]].homog,d=v.csnames[a.args[2]].homog,e=v.csnames[a.args[3]].homog,f=v.csnames[a.args[4]].homog,k=m.add,l=h.turnIntoCSList,n=h.cross,p=h.productMM,r=m.mult,t=m.realmult,u=h.scalmult,w=h.scalproduct,x=m.sub,
+y=h.transpose,z=w(c,b),A=w(c,d),B=w(e,b),C=w(e,d),D=w(f,b),E=w(f,d),F=r(z,z),G=r(z,A),w=r(A,A),H=r(B,B),I=r(B,C),L=r(C,C),N=r(D,D),J=r(D,E),M=r(E,E),K=r(r(F,L),M),K=x(K,t(2,r(r(G,I),M))),K=x(K,t(2,r(r(G,L),J))),K=k(K,t(.5,r(r(w,H),M))),K=k(K,t(3,r(r(w,I),J))),K=k(K,t(.5,r(r(w,L),N))),J=r(r(z,C),E),J=x(J,r(r(A,B),E)),J=x(J,r(r(A,C),D)),J=r(J,r(w,D)),M=x(r(z,C),t(2,r(A,B))),M=r(M,r(w,r(C,D))),K=p(y(l([c])),l([h.add(h.add(u(K,c),u(J,e)),u(M,f))])),J=l([e]),K=h.add(K,u(t(.5,r(r(w,w),N)),p(y(J),J))),K=
+h.add(K,u(w,p(y(l([f])),l([h.add(u(x(x(t(2,r(G,I)),r(F,L)),t(.5,r(w,H))),f),u(r(h.det3(c,e,f),x(r(z,C),r(A,B))),n(b,d)))])))),K=h.add(K,y(K)),b=m.sqrt(r(r(C,E),r(x(r(z,C),t(2,r(A,B))),x(r(z,E),t(2,r(A,D)))))),c=p(y(l([c])),l([h.sub(u(x(r(A,k(r(B,E),r(C,D))),r(z,r(C,E))),c),u(w,h.add(u(D,e),u(B,f))))])),c=h.add(c,u(r(z,w),p(y(l([e])),l([f])))),c=u(b,c),c=h.add(c,y(c)),e=h.normalizeMax(h.add(K,c)),f=h.normalizeMax(h.sub(K,c));a.results=Qb(e,f).value};l.ConicBy1Pol1P2L.stateSize=Qb.stateSize;l._helper.coHarmonic=
+function(a,b,c,d){var e=h.realVector([100*Math.random(),100*Math.random(),1]),f=h.det3(e,c,a),k=h.det3(e,c,b);c=h.det3(e,d,a);d=h.det3(e,d,b);d=m.sqrt(m.mult(d,k));f=m.sqrt(m.mult(c,f));a=w.mult(a,d);f=w.mult(b,f);b=h.add(a,f);a=h.sub(a,f);return[b,a]};l.ConicInSquare={};l.ConicInSquare.kind="C";l.ConicInSquare.signature=["P","P","P","P"];l.ConicInSquare.updatePosition=function(a){var b=D.basismap(v.csnames[a.args[0]].homog,v.csnames[a.args[1]].homog,v.csnames[a.args[2]].homog,v.csnames[a.args[3]].homog),
+c=m.one,c=l._helper.buildConicMatrix([c,c,c,m.real(-3),c,c]),b=h.adjoint3(b),b=h.productMM(h.productMM(h.transpose(b),c),b),b=h.normalizeMax(b);a.matrix=w.withUsage(b,"Conic")};l.ConicBy5lines={};l.ConicBy5lines.kind="C";l.ConicBy5lines.signature=["L","L","L","L","L"];l.ConicBy5lines.updatePosition=function(a){var b=l._helper.ConicBy5(a,v.csnames[a.args[0]].homog,v.csnames[a.args[1]].homog,v.csnames[a.args[2]].homog,v.csnames[a.args[3]].homog,v.csnames[a.args[4]].homog),b=h.adjoint3(b);a.matrix=b;
+a.matrix=h.normalizeMax(a.matrix);a.matrix=w.withUsage(a.matrix,"Conic")};l.ConicFromPrincipalDirections={};l.ConicFromPrincipalDirections.kind="C";l.ConicFromPrincipalDirections.signature=["P","P","P"];l.ConicFromPrincipalDirections.updatePosition=function(a){var b=v.csnames[a.args[0]].homog,c=v.csnames[a.args[1]].homog,d=v.csnames[a.args[2]].homog,e=l._helper.pointReflection(b,c),f=h.cross(c,b),b=h.turnIntoCSList([f.value[0],f.value[1],m.zero]),f=h.turnIntoCSList([f]),c=h.turnIntoCSList([h.cross(c,
+b)]),e=h.turnIntoCSList([h.cross(e,b)]);a.matrix=l._helper.conicFromTwoDegenerates(f,f,c,e,d);a.matrix=h.normalizeMax(a.matrix);a.matrix=w.withUsage(a.matrix,"Conic")};l.CircleBy3={};l.CircleBy3.kind="C";l.CircleBy3.signature=["P","P","P"];l.CircleBy3.updatePosition=function(a){var b=l._helper.ConicBy5(a,v.csnames[a.args[0]].homog,v.csnames[a.args[1]].homog,h.ii,h.jj,v.csnames[a.args[2]].homog);a.matrix=h.normalizeMax(b);a.matrix=w.withUsage(a.matrix,"Circle")};l.ArcBy3={};l.ArcBy3.kind="C";l.ArcBy3.signature=
+["P","P","P"];l.ArcBy3.updatePosition=function(a){l.CircleBy3.updatePosition(a);a.startPoint=v.csnames[a.args[0]].homog;a.viaPoint=v.csnames[a.args[1]].homog;a.endPoint=v.csnames[a.args[2]].homog};l.ArcBy3.initialize=function(a){a.startPoint=v.csnames[a.args[0]].homog;a.viaPoint=v.csnames[a.args[1]].homog;a.endPoint=v.csnames[a.args[2]].homog;a.isArc=!0};l.PolarOfPoint={};l.PolarOfPoint.kind="L";l.PolarOfPoint.signature=["P","C"];l.PolarOfPoint.updatePosition=function(a){var b=w.mult(v.csnames[a.args[1]].matrix,
+v.csnames[a.args[0]].homog),b=h.normalizeMax(b);a.homog=w.withUsage(b,"Line")};l.PolarOfLine={};l.PolarOfLine.kind="P";l.PolarOfLine.signature=["L","C"];l.PolarOfLine.updatePosition=function(a){var b=v.csnames[a.args[0]],c=h.adjoint3(v.csnames[a.args[1]].matrix),b=w.mult(c,b.homog),b=h.normalizeMax(b);a.homog=w.withUsage(b,"Point")};l.AngleBisector={};l.AngleBisector.kind="Ls";l.AngleBisector.signature=["L","L","P"];l.AngleBisector.updatePosition=function(a){var b=v.csnames[a.args[0]].homog,c=v.csnames[a.args[1]].homog,
+d=v.csnames[a.args[2]].homog,e=h.add,f=h.sub,k=h.abs,l=h.cross,m=h.scalmult,n=h.normalizeMax,p=h._helper.isAlmostZero,r=h.linfty,t=m(k(l(l(r,c),r)),b),b=m(k(l(l(r,b),r)),c),f=f(t,b),e=e(t,b);p(f)&&(f=l(l(l(r,e),r),d));p(e)&&(e=l(l(l(r,f),r),d));a.results=Pa(n(f),n(e))};l.AngleBisector.stateSize=Pa.stateSize;l._helper.IntersectLC=function(a,b){var c=m,d=h.crossOperator(a),e=h.transpose(d),e=w.mult(e,w.mult(b,d)),f=h.maxIndex(a,m.abs2),k,l,n,p;0===f?(f=e.value[1].value[1],k=e.value[1].value[2],l=e.value[2].value[1],
+n=e.value[2].value[2],p=a.value[0]):1===f?(f=e.value[0].value[0],k=e.value[0].value[2],l=e.value[2].value[0],n=e.value[2].value[2],p=a.value[1]):(f=e.value[0].value[0],k=e.value[0].value[1],l=e.value[1].value[0],n=e.value[1].value[1],p=a.value[2]);c=c.div(c.sqrt(c.sub(c.mult(k,l),c.mult(f,n))),p);c=h.add(e,h.scalmult(c,d));f=h.maxIndex(c,h.abs2);d=c.value[f];d=h.normalizeMax(d);d=w.withUsage(d,"Point");c=h.transpose(c);f=h.maxIndex(c,h.abs2);c=c.value[f];c=h.normalizeMax(c);c=w.withUsage(c,"Point");
+return[d,c]};l.IntersectLC={};l.IntersectLC.kind="Ps";l.IntersectLC.signature=["L","C"];l.IntersectLC.updatePosition=function(a){var b=l._helper.IntersectLC(v.csnames[a.args[0]].homog,v.csnames[a.args[1]].matrix);a.results=Pa(b[0],b[1])};l.IntersectLC.stateSize=Pa.stateSize;l.OtherIntersectionCL={};l.OtherIntersectionCL.kind="P";l.OtherIntersectionCL.signature=["C","L","P"];l.OtherIntersectionCL.updatePosition=function(a){var b=v.csnames[a.args[2]].homog,c=l._helper.IntersectLC(v.csnames[a.args[1]].homog,
+v.csnames[a.args[0]].matrix),d=c[0],c=c[1],e=h.projectiveDistMinScal(d,b),b=h.projectiveDistMinScal(c,b);a.homog=e<b?c:d;a.homog=h.normalizeMax(a.homog);a.homog=w.withUsage(a.homog,"Point")};l.IntersectCirCir={};l.IntersectCirCir.kind="Ps";l.IntersectCirCir.signature=["C","C"];l.IntersectCirCir.updatePosition=function(a){var b=v.csnames[a.args[0]].matrix,c=v.csnames[a.args[1]].matrix,d=h.scalmult(c.value[0].value[0],b.value[2]),c=h.scalmult(b.value[0].value[0],c.value[2]),d=h.sub(d,c),d=h.turnIntoCSList([d.value[0],
+d.value[1],m.realmult(.5,d.value[2])]),d=h.normalizeMax(d),b=l._helper.IntersectLC(d,b);a.results=Pa(b[0],b[1])};l.IntersectCirCir.stateSize=Pa.stateSize;l.OtherIntersectionCC={};l.OtherIntersectionCC.kind="P";l.OtherIntersectionCC.signature=["C","C","P"];l.OtherIntersectionCC.updatePosition=function(a){var b=v.csnames[a.args[0]].matrix,c=v.csnames[a.args[1]].matrix,d=v.csnames[a.args[2]].homog,e=h.scalmult(c.value[0].value[0],b.value[2]),c=h.scalmult(b.value[0].value[0],c.value[2]),e=h.sub(e,c),
+e=h.turnIntoCSList([e.value[0],e.value[1],m.realmult(.5,e.value[2])]),e=h.normalizeMax(e),e=l._helper.IntersectLC(e,b),b=e[0],e=e[1],c=h.projectiveDistMinScal(b,d),d=h.projectiveDistMinScal(e,d);a.homog=c<d?e:b;a.homog=h.normalizeMax(a.homog);a.homog=w.withUsage(a.homog,"Point")};l._helper.IntersectConicConic=function(a,b){var c=a.value[0],d=a.value[1],e=a.value[2],f=b.value[0],k=b.value[1],n=b.value[2],p=h.det3(c,d,e),r=m.add(m.add(h.det3(c,d,n),h.det3(c,k,e)),h.det3(f,d,e)),c=m.add(m.add(h.det3(c,
+k,n),h.det3(f,d,n)),h.det3(f,k,e)),f=h.det3(f,k,n),n=m.abs2(p).value.real,k=m.abs2(f).value.real;n<k&&(n=a,a=b,b=n,n=f,f=p,p=n,n=c,c=r,r=n,n=k);1E-24>n?(p=a,c=b):(r=m.solveCubic(p,r,c,f),c=m.abs2(m.sub(r[0],r[1])).value.real,f=m.abs2(m.sub(r[0],r[2])).value.real,k=m.abs2(m.sub(r[1],r[2])).value.real,c>f?(p=r[1],r=c>k?r[0]:r[2]):(p=r[2],r=f>k?r[0]:r[1]),p=h.add(h.scalmult(p,a),b),c=h.add(h.scalmult(r,a),b));r=l._helper.splitDegenConic(p);p=r[0];r=r[1];c=l._helper.splitDegenConic(c);k=c[0];f=c[1];c=
+h.cross(p,k);k=h.cross(r,k);p=h.cross(p,f);r=h.cross(r,f);c=h.normalizeMax(c);k=h.normalizeMax(k);p=h.normalizeMax(p);r=h.normalizeMax(r);c=w.withUsage(c,"Point");k=w.withUsage(k,"Point");p=w.withUsage(p,"Point");r=w.withUsage(r,"Point");return[c,k,p,r]};l.IntersectConicConic={};l.IntersectConicConic.kind="Ps";l.IntersectConicConic.signature=["C","C"];l.IntersectConicConic.updatePosition=function(a){var b=l._helper.IntersectConicConic(v.csnames[a.args[0]].matrix,v.csnames[a.args[1]].matrix),b=Fc(b[0],
+b[1],b[2],b[3]);a.results=b};l.IntersectConicConic.stateSize=Fc.stateSize;l.SelectP={};l.SelectP.kind="P";l.SelectP.signature=["Ps"];l.SelectP.initialize=function(a){if(void 0!==a.index)return a.index-1;var b=v.csnames[a.args[0]].results.value;a=l._helper.initializePoint(a);for(var c=h.projectiveDistMinScal(a,b[0]),d=0,e=1;e<b.length;++e){var f=h.projectiveDistMinScal(a,b[e]);f<c&&(c=f,d=e)}return d};l.SelectP.updatePosition=function(a){a.homog=v.csnames[a.args[0]].results.value[a.param]};l.SelectL=
+{};l.SelectL.kind="L";l.SelectL.signature=["Ls"];l.SelectL.initialize=function(a){if(void 0!==a.index)return a.index-1;var b=v.csnames[a.args[0]].results.value;a=l._helper.initializeLine(a);for(var c=h.projectiveDistMinScal(a,b[0]),d=0,e=1;e<b.length;++e){var f=h.projectiveDistMinScal(a,b[e]);f<c&&(c=f,d=e)}return d};l.SelectL.updatePosition=function(a){a.homog=v.csnames[a.args[0]].results.value[a.param];a.homog=w.withUsage(a.homog,"Line")};l._helper.moebiusStep=function(a,b,c){var d=m.add,e=m.sub,
+f=m.mult,h=a.value[0],k=a.value[1];a=a.value[2];var l=b.value[0],n=b.value[1];b=b.value[2];var p=c.value[0],r=c.value[1],t=c.value[2];c=e(f(b,p),f(l,t));var u=e(f(b,r),f(n,t)),p=e(f(h,t),f(a,p)),r=e(f(k,t),f(a,r));return[e(f(h,c),f(k,u)),d(f(k,c),f(h,u)),f(a,c),f(a,u),e(f(l,p),f(n,r)),d(f(n,p),f(l,r)),f(b,p),f(b,r)]};l.TrMoebius={};l.TrMoebius.kind="Mt";l.TrMoebius.signature="PPPPPP".split("");l.TrMoebius.updatePosition=function(a){var b=m.neg,c=l._helper.moebiusStep(v.csnames[a.args[0]].homog,v.csnames[a.args[2]].homog,
+v.csnames[a.args[4]].homog),d=l._helper.moebiusStep(v.csnames[a.args[1]].homog,v.csnames[a.args[3]].homog,v.csnames[a.args[5]].homog),d=h.normalizeMax(h.matrix([[d[0],b(d[1]),d[4],b(d[5])],[d[1],d[0],d[5],d[4]],[d[2],b(d[3]),d[6],b(d[7])],[d[3],d[2],d[7],d[6]]])),b=h.normalizeMax(h.matrix([[c[6],b(c[4])],[c[7],b(c[5])],[b(c[2]),c[0]],[b(c[3]),c[1]]])),b=h.normalizeMax(h.productMM(d,b));a.moebius={anti:!1,ar:b.value[0].value[0],ai:b.value[1].value[0],br:b.value[0].value[1],bi:b.value[1].value[1],cr:b.value[2].value[0],
+ci:b.value[3].value[0],dr:b.value[2].value[1],di:b.value[3].value[1]};l._helper.moebiusPair(a)};l._helper.moebiusPair=function(a){var b=a.moebius,c=m.neg,d=b.anti?c:w.identity,b=h.normalizeMax(h.turnIntoCSList([h.matrix([[c(b.cr),d(b.ci),c(b.dr)],[b.ci,d(b.cr),b.di],[b.ar,c(d(b.ai)),b.br]]),h.matrix([[c(b.ci),c(d(b.cr)),c(b.di)],[c(b.cr),d(b.ci),c(b.dr)],[b.ai,d(b.ar),b.bi]])]));a.mat1=b.value[0];a.mat2=b.value[1]};l._helper.inverseMoebius=function(a){var b=m.neg,c=a.anti?b:w.identity;return{anti:a.anti,
+ar:a.dr,ai:c(a.di),br:b(a.br),bi:b(c(a.bi)),cr:b(a.cr),ci:b(c(a.ci)),dr:a.ar,di:c(a.ai)}};l.TrInverseMoebius={};l.TrInverseMoebius.kind="Mt";l.TrInverseMoebius.signature=["Mt"];l.TrInverseMoebius.updatePosition=function(a){a.moebius=l._helper.inverseMoebius(v.csnames[a.args[0]].moebius);l._helper.moebiusPair(a)};l.TrMoebiusP={};l.TrMoebiusP.kind="P";l.TrMoebiusP.signature=["Mt","P"];l.TrMoebiusP.updatePosition=function(a){var b=v.csnames[a.args[0]],c=v.csnames[a.args[1]].homog,d=h.productMV(b.mat1,
+c),b=h.productMV(b.mat2,c);a.homog=h.normalizeMax(h.cross(d,b));a.homog=w.withUsage(a.homog,"Point")};l._helper.TrMoebiusP=function(a,b){var c=h.productMV(b.mat1,a),d=h.productMV(b.mat2,a);return h.normalizeMax(h.cross(c,d))};l.TrMoebiusL={};l.TrMoebiusL.kind="C";l.TrMoebiusL.signature=["Mt","L"];l.TrMoebiusL.updatePosition=function(a){var b=v.csnames[a.args[0]],c=v.csnames[a.args[1]].homog,d=function(){var a=h.realVector([Math.random()-.5,Math.random()-.5,Math.random()-.5]);return h.normalizeMax(a)},
+e=h.cross(d(),c),f=h.cross(d(),c),c=h.cross(d(),c),e=l._helper.TrMoebiusP(e,b),f=l._helper.TrMoebiusP(f,b),b=l._helper.TrMoebiusP(c,b);a.matrix=h.normalizeMax(l._helper.ConicBy5(null,e,f,b,h.ii,h.jj));a.matrix=w.withUsage(a.matrix,"Circle")};l.TrMoebiusS={};l.TrMoebiusS.kind="C";l.TrMoebiusS.signature=["Mt","S"];l.TrMoebiusS.updatePosition=function(a){var b=v.csnames[a.args[0]],c=v.csnames[a.args[1]],d=c.startpos,c=c.endpos,e=h.add(d,c),d=l._helper.TrMoebiusP(d,b),e=l._helper.TrMoebiusP(e,b),b=l._helper.TrMoebiusP(c,
+b);a.startPoint=d;a.viaPoint=e;a.endPoint=b;a.isArc=!0;a.matrix=h.normalizeMax(l._helper.ConicBy5(null,d,e,b,h.ii,h.jj));a.matrix=w.withUsage(a.matrix,"Circle")};l.TrMoebiusC={};l.TrMoebiusC.kind="C";l.TrMoebiusC.signature=["Mt","C"];l.TrMoebiusC.signatureConstraints=function(a){return"Circle"===v.csnames[a.args[1]].matrix.usage};l.TrMoebiusC.updatePosition=function(a){var b=v.csnames[a.args[0]],c=v.csnames[a.args[1]].matrix,d=function(){var a=h.realVector([Math.random()-.5,Math.random()-.5,Math.random()-
+.5]);return h.normalizeMax(a)},e=l._helper.IntersectLC(d(),c),d=l._helper.IntersectLC(d(),c),c=e[1],d=d[1],e=l._helper.TrMoebiusP(e[0],b),c=l._helper.TrMoebiusP(c,b),b=l._helper.TrMoebiusP(d,b);a.matrix=h.normalizeMax(l._helper.ConicBy5(null,e,c,b,h.ii,h.jj));a.matrix=w.withUsage(a.matrix,"Circle")};l.TrMoebiusArc={};l.TrMoebiusArc.kind="C";l.TrMoebiusArc.signature=["Mt","C"];l.TrMoebiusArc.signatureConstraints=function(a){return v.csnames[a.args[1]].isArc};l.TrMoebiusArc.updatePosition=function(a){var b=
+v.csnames[a.args[0]],c=v.csnames[a.args[1]],d=c.viaPoint,e=c.endPoint,c=l._helper.TrMoebiusP(c.startPoint,b),d=l._helper.TrMoebiusP(d,b),b=l._helper.TrMoebiusP(e,b);a.startPoint=c;a.viaPoint=d;a.endPoint=b;a.isArc=!0;a.matrix=h.normalizeMax(l._helper.ConicBy5(null,c,d,b,h.ii,h.jj));a.matrix=w.withUsage(a.matrix,"Circle")};l._helper.trBuildMatrix=function(a,b){var c=b(0),d=b(1),e=h.productMM(d,h.adjoint3(c));a.matrix=h.normalizeMax(e);e=h.transpose(h.productMM(c,h.adjoint3(d)));a.dualMatrix=h.normalizeMax(e)};
+l.TrProjection={};l.TrProjection.kind="Tr";l.TrProjection.signature="PPPPPPPP".split("");l.TrProjection.initialize=function(a){a.isEuclidean=0};l.TrProjection.updatePosition=function(a){l._helper.trBuildMatrix(a,function(b){return D.basismap(v.csnames[a.args[0+b]].homog,v.csnames[a.args[2+b]].homog,v.csnames[a.args[4+b]].homog,v.csnames[a.args[6+b]].homog)})};l.TrAffine={};l.TrAffine.kind="Tr";l.TrAffine.signature="PPPPPP".split("");l.TrAffine.initialize=function(a){a.isEuclidean=0};l.TrAffine.updatePosition=
+function(a){var b=m.mult,c=h.scalmult,d=h.turnIntoCSList,e=h.transpose,f=h.normalizeMax,k=h.productMM,l=h.adjoint3,n=d([v.csnames[a.args[0]].homog,v.csnames[a.args[2]].homog,v.csnames[a.args[4]].homog]),p=d([v.csnames[a.args[1]].homog,v.csnames[a.args[3]].homog,v.csnames[a.args[5]].homog]),r=e(n),e=e(p),t=r.value[2].value,u=e.value[2].value,w=[b(t[0],u[2]),b(t[1],u[0]),b(t[2],u[1])],r=l(r).value;a.matrix=f(k(e,d([c(b(w[0],u[1]),r[0]),c(b(w[1],u[2]),r[1]),c(b(w[2],u[0]),r[2])])));r=n.value;a.dualMatrix=
+f(k(l(p),d([c(b(t[2],w[1]),r[0]),c(b(t[0],w[2]),r[1]),c(b(t[1],w[0]),r[2])])))};l.TrSimilarity={};l.TrSimilarity.kind="Tr";l.TrSimilarity.signature=["P","P","P","P"];l.TrSimilarity.initialize=function(a){a.isEuclidean=1};l.TrSimilarity.updatePosition=function(a){l._helper.trBuildMatrix(a,function(b){return D.basismap(v.csnames[a.args[0+b]].homog,v.csnames[a.args[2+b]].homog,h.ii,h.jj)})};l.TrTranslation={};l.TrTranslation.kind="Tr";l.TrTranslation.signature=["P","P"];l.TrTranslation.initialize=function(a){a.isEuclidean=
+1};l.TrTranslation.updatePosition=function(a){var b=v.csnames[a.args[0]].homog,c=v.csnames[a.args[1]].homog,d=h.cross(b,c).value,b=m.mult(b.value[2],c.value[2]),c=h.turnIntoCSList,e=m.neg,f=m.zero,d=c([c([b,f,d[1]]),c([f,b,e(d[0])]),c([f,f,b])]),d=h.normalizeMax(d);a.matrix=d;b=e(d.value[0].value[0]);d=c([c([b,f,f]),c([f,b,f]),c([d.value[0].value[2],d.value[1].value[2],b])]);a.dualMatrix=d};l.TrReflectionP={};l.TrReflectionP.kind="Tr";l.TrReflectionP.signature=["P"];l.TrReflectionP.initialize=function(a){a.isEuclidean=
+1};l.TrReflectionP.updatePosition=function(a){var b=v.csnames[a.args[0]].homog.value,c=m.realmult(-.5,b[2]),d=m.zero,b=h.turnIntoCSList([h.turnIntoCSList([c,d,b[0]]),h.turnIntoCSList([d,c,b[1]]),h.turnIntoCSList([d,d,m.neg(c)])]),b=h.normalizeMax(b);a.matrix=b;a.dualMatrix=h.transpose(b)};l.TrReflectionL={};l.TrReflectionL.kind="Tr";l.TrReflectionL.signature=["L"];l.TrReflectionL.initialize=function(a){a.isEuclidean=-1};l.TrReflectionL.updatePosition=function(a){var b=m.mult,c=m.realmult,d=m.zero,
+e=v.csnames[a.args[0]].homog.value,f=e[0],k=e[1],e=e[2],l=b(f,f),n=b(k,k),p=c(-.5,m.sub(l,n)),r=b(f,k),b=h.turnIntoCSList([h.turnIntoCSList([m.neg(p),r,b(f,e)]),h.turnIntoCSList([r,p,b(k,e)]),h.turnIntoCSList([d,d,c(-.5,m.add(l,n))])]),b=h.normalizeMax(b);a.matrix=b;a.dualMatrix=h.transpose(b)};l.TrReflectionS={};l.TrReflectionS.kind="Tr";l.TrReflectionS.signature=["S"];l.TrReflectionS.updatePosition=l.TrReflectionL.updatePosition;l.TrReflectionC={};l.TrReflectionC.kind="Mt";l.TrReflectionC.signature=
+["C"];l.TrReflectionC.signatureConstraints=function(a){return"Circle"===v.csnames[a.args[0]].matrix.usage};l.TrReflectionC.updatePosition=function(a){var b=v.csnames[a.args[0]].matrix,c=b.value[0].value[2],d=b.value[1].value[2],e=m.neg;a.moebius={anti:!0,ar:c,ai:d,br:b.value[2].value[2],bi:m.zero,cr:e(b.value[0].value[0]),ci:m.zero,dr:e(c),di:d};l._helper.moebiusPair(a)};l.TrInverse={};l.TrInverse.kind="Tr";l.TrInverse.signature=["Tr"];l.TrInverse.initialize=function(a){a.isEuclidean=v.csnames[a.args[0]].isEuclidean};
+l.TrInverse.updatePosition=function(a){var b=v.csnames[a.args[0]];a.dualMatrix=h.transpose(b.matrix);a.matrix=h.transpose(b.dualMatrix)};l.TransformC={};l.TransformC.kind="C";l.TransformC.signature=["Tr","C"];l.TransformC.updatePosition=function(a){var b=v.csnames[a.args[0]].dualMatrix,b=h.productMM(h.productMM(b,v.csnames[a.args[1]].matrix),h.transpose(b)),b=h.normalizeMax(b);a.matrix=w.withUsage(b,"Conic")};l.TransformArc={};l.TransformArc.kind="C";l.TransformArc.signature=["Tr","C"];l.TransformArc.signatureConstraints=
+function(a){return v.csnames[a.args[0]].isArc};l.TransformArc.updatePosition=function(a){var b=v.csnames[a.args[0]].matrix,c=v.csnames[a.args[1]],d=c.viaPoint,e=c.endPoint,c=h.normalizeMax(h.productMV(b,c.startPoint)),d=h.normalizeMax(h.productMV(b,d)),b=h.normalizeMax(h.productMV(b,e));a.startPoint=c;a.viaPoint=d;a.endPoint=b;a.isArc=!0;a.matrix=h.normalizeMax(l._helper.ConicBy5(null,c,d,b,h.ii,h.jj));a.matrix=w.withUsage(a.matrix,"Circle")};l.TransformP={};l.TransformP.kind="P";l.TransformP.signature=
+["Tr","P"];l.TransformP.updatePosition=function(a){a.homog=h.normalizeMax(h.productMV(v.csnames[a.args[0]].matrix,v.csnames[a.args[1]].homog));a.homog=w.withUsage(a.homog,"Point")};l.TransformL={};l.TransformL.kind="L";l.TransformL.signature=["Tr","L"];l.TransformL.updatePosition=function(a){a.homog=h.normalizeMax(h.productMV(v.csnames[a.args[0]].dualMatrix,v.csnames[a.args[1]].homog));a.homog=w.withUsage(a.homog,"Line")};l.TransformS={};l.TransformS.kind="S";l.TransformS.signature=["Tr","S"];l.TransformS.updatePosition=
+function(a){var b=v.csnames[a.args[0]],c=v.csnames[a.args[1]];l.Segment.setSegmentPos(a,h.productMV(b.dualMatrix,c.homog),h.productMV(b.matrix,c.startpos),h.productMV(b.matrix,c.endpos))};l.TransformPolygon={};l.TransformPolygon.kind="Poly";l.TransformPolygon.signature=["Tr","Poly"];l.TransformPolygon.updatePosition=function(a){var b=v.csnames[a.args[0]].matrix;a.vertices=h.turnIntoCSList(v.csnames[a.args[1]].vertices.value.map(function(a){a=h.normalizeMax(h.productMV(b,a));return a=w.withUsage(a,
+"Point")}))};l.TrComposeTrTr={};l.TrComposeTrTr.kind="Tr";l.TrComposeTrTr.signature=["Tr","Tr"];l.TrComposeTrTr.initialize=function(a){a.isEuclidean=v.csnames[a.args[0]].isEuclidean*v.csnames[a.args[1]].isEuclidean};l.TrComposeTrTr.updatePosition=function(a){var b=v.csnames[a.args[0]],c=v.csnames[a.args[1]];a.matrix=h.normalizeMax(h.productMM(c.matrix,b.matrix));a.dualMatrix=h.normalizeMax(h.productMM(c.dualMatrix,b.dualMatrix))};l._helper.composeMtMt=function(a,b,c){function d(a,b,c,e){return k(p(a,
+b),p(c,e))}function e(a,b,c,g,f,h,l,m){return k(d(a,b,c,g),d(f,h,l,m))}function f(a,b,c,e,g,h,k,l){return n(d(a,b,c,e),d(g,h,k,l))}var k=m.add,n=m.sub,p=m.mult,r=c.anti?f:e,t=c.anti?e:f,r=h.normalizeMax(h.turnIntoCSList([t(b.ar,c.ar,b.cr,c.br,b.ai,c.ai,b.ci,c.bi),r(b.ar,c.ai,b.cr,c.bi,b.ai,c.ar,b.ci,c.br),t(b.br,c.ar,b.dr,c.br,b.bi,c.ai,b.di,c.bi),r(b.br,c.ai,b.dr,c.bi,b.bi,c.ar,b.di,c.br),t(b.ar,c.cr,b.cr,c.dr,b.ai,c.ci,b.ci,c.di),r(b.ar,c.ci,b.cr,c.di,b.ai,c.cr,b.ci,c.dr),t(b.br,c.cr,b.dr,c.dr,
+b.bi,c.ci,b.di,c.di),r(b.br,c.ci,b.dr,c.di,b.bi,c.cr,b.di,c.dr)])).value;a.moebius={anti:b.anti!==c.anti,ar:r[0],ai:r[1],br:r[2],bi:r[3],cr:r[4],ci:r[5],dr:r[6],di:r[7]};l._helper.moebiusPair(a)};l._helper.euc2moeb=function(a){var b=a.matrix.value;return{anti:0>a.isEuclidean,ar:b[0].value[0],ai:b[1].value[0],br:b[0].value[2],bi:b[1].value[2],cr:m.zero,ci:m.zero,dr:b[2].value[2],di:m.zero}};l.TrComposeMtMt={};l.TrComposeMtMt.kind="Mt";l.TrComposeMtMt.signature=["Mt","Mt"];l.TrComposeMtMt.updatePosition=
+function(a){l._helper.composeMtMt(a,v.csnames[a.args[0]].moebius,v.csnames[a.args[1]].moebius)};l.TrComposeTrMt={};l.TrComposeTrMt.kind="Mt";l.TrComposeTrMt.signature=["Tr","Mt"];l.TrComposeTrMt.signatureConstraints=function(a){return!!v.csnames[a.args[0]].isEuclidean};l.TrComposeTrMt.updatePosition=function(a){l._helper.composeMtMt(a,l._helper.euc2moeb(v.csnames[a.args[0]]),v.csnames[a.args[1]].moebius)};l.TrComposeMtTr={};l.TrComposeMtTr.kind="Mt";l.TrComposeMtTr.signature=["Mt","Tr"];l.TrComposeMtTr.signatureConstraints=
+function(a){return!!v.csnames[a.args[1]].isEuclidean};l.TrComposeMtTr.updatePosition=function(a){l._helper.composeMtMt(a,v.csnames[a.args[0]].moebius,l._helper.euc2moeb(v.csnames[a.args[1]]))};l._helper.pointReflection=function(a,b){return h.normalizeMax(h.sub(h.scalmult(m.realmult(2,b.value[2]),a),h.scalmult(a.value[2],b)))};l._helper.conicOtherIntersection=function(a,b,c){var d=h.productMV(a,c);a=h.scalproduct(c,d);d=h.scalproduct(b,d);d=m.realmult(-2,d);b=h.scalmult(a,b);c=h.scalmult(d,c);c=h.add(b,
+c);return c=h.normalizeMax(c)};l.Dist={};l.Dist.kind="V";l.Dist.signature=["P","P"];l.Dist.updatePosition=function(a){var b=v.csnames[a.args[1]].homog;a.value=h.abs(h.sub(h.normalizeZ(v.csnames[a.args[0]].homog),h.normalizeZ(b)))};l.Angle={};l.Angle.kind="V";l.Angle.signature=["L","L","P"];l.Angle.initialize=function(a){void 0===a.angle&&(a.angle=.5*Math.PI);Za(m._helper.input(a.angle))};l.Angle.updatePosition=function(a){var b=v.csnames[a.args[1]].homog,c=v.csnames[a.args[2]].homog,d=h.cross(v.csnames[a.args[0]].homog,
+h.linfty),b=h.cross(b,h.linfty),c=h.crossratio3(d,b,h.ii,h.jj,c),c=m.mult(m.complex(0,.5),m.log(c)),d=(Bb().value.real-c.value.real)/Math.PI,b=Math.round(d);!lb&&.01<Math.abs(b-d)&&ec();c=m.complex(b*Math.PI+c.value.real,c.value.imag);Za(c);a.value=w.withUsage(c,"Angle")};l.Angle.stateSize=2;l.Text={};l.Text.kind="Text";l.Text.signature="**";l.Text.isMovable=!0;l.Text.updatePosition=Sa;l.Text.initialize=function(a){a.text=String(a.text);a.pos&&(a.homog=l._helper.initializePoint(a));a.dock&&(a.dock.offset=
+a.dock.offset&&2===a.dock.offset.length?h.realVector([+a.dock.offset[0],+a.dock.offset[1]]):h.realVector([0,0]))};l.Text.getParamForInput=function(a,b,c){return l.Free.getParamForInput(a,b,c)};l.Text.getParamFromState=function(a){return a.homog};l.Text.putParamToState=function(a,b){a.homog=b};l.Calculation={};l.Calculation.kind="Text";l.Calculation.signature="**";l.Calculation.isMovable=!0;l.Calculation.updatePosition=Sa;l.Calculation.initialize=function(a){l.Text.initialize(a);a.calculation=Ua(a.text)};
+l.Calculation.getText=function(a){return Z(z(a.calculation))};l.Calculation.getParamForInput=l.Text.getParamForInput;l.Calculation.getParamFromState=l.Text.getParamFromState;l.Calculation.putParamToState=l.Text.putParamToState;l.Equation={};l.Equation.kind="Text";l.Equation.isMovable=!0;l.Equation.signature="**";l.Equation.updatePosition=Sa;l.Equation.initialize=function(a){l.Text.initialize(a);a.calculation=Ua(a.text)};l.Equation.getText=function(a){return a.text+" = "+Z(z(a.calculation))};l.Equation.getParamForInput=
+l.Text.getParamForInput;l.Equation.getParamFromState=l.Text.getParamFromState;l.Equation.putParamToState=l.Text.putParamToState;l.Evaluate={};l.Evaluate.kind="Text";l.Evaluate.isMovable=!0;l.Evaluate.signature="**";l.Evaluate.updatePosition=Sa;l.Evaluate.initialize=function(a){l.Text.initialize(a);a.calculation=Ua(a.text)};l.Evaluate.getText=function(a){z(a.calculation);return a.text};l.Evaluate.getParamForInput=l.Text.getParamForInput;l.Evaluate.getParamFromState=l.Text.getParamFromState;l.Evaluate.putParamToState=
+l.Text.putParamToState;l.Plot={};l.Plot.kind="Text";l.Plot.isMovable=!0;l.Plot.signature="**";l.Plot.updatePosition=Sa;l.Plot.initialize=function(a){l.Text.initialize(a);a.calculation=Ua("plot(("+a.text+"))")};l.Plot.getText=function(a){z(a.calculation);return a.text};l.Plot.getParamForInput=l.Text.getParamForInput;l.Plot.getParamFromState=l.Text.getParamFromState;l.Plot.putParamToState=l.Text.putParamToState;l.Button={};l.Button.kind="Text";l.Button.signature="**";l.Button.isMovable=!0;l.Button.updatePosition=
+Sa;l.Button.initialize=function(a){var b=document.createElement("button");Gc(a,"click",b)};l.Button.getParamForInput=l.Text.getParamForInput;l.Button.getParamFromState=l.Text.getParamFromState;l.Button.putParamToState=l.Text.putParamToState;l.Button.set_fillcolor=function(a,b){h._helper.isNumberVecN(b,3)&&(a.fillcolor=b.value.map(function(a){return a.value.real}),a.html.style.backgroundColor=x.makeColor(a.fillcolor,a.fillalpha))};l.ToggleButton={};l.ToggleButton.kind="Text";l.ToggleButton.signature=
+"**";l.ToggleButton.isMovable=!0;l.ToggleButton.updatePosition=Sa;l.ToggleButton.initialize=function(a){var b;b=void 0;void 0===b&&(b="CindyJSid");b+=++Qa;var c=document.createElement("input"),d=document.createElement("label");c.setAttribute("id",b);d.setAttribute("for",b);c.setAttribute("type","checkbox");a.pressed&&(c.checked=!0);a.checkbox=c;Gc(a,"change",c,d)};l.ToggleButton.getParamForInput=l.Text.getParamForInput;l.ToggleButton.getParamFromState=l.Text.getParamFromState;l.ToggleButton.putParamToState=
+l.Text.putParamToState;l.ToggleButton.set_fillcolor=l.Button.set_fillcolor;l.EditableText={};l.EditableText.kind="Text";l.EditableText.isMovable=!0;l.EditableText.signature=[];l.EditableText.updatePosition=Sa;l.EditableText.initialize=function(a){var b=document.createElement("input");b.setAttribute("type","text");b.className="CindyJS-editabletext";Ia(a.minwidth)&&(b.style.width=a.minwidth-3+"px");"string"===typeof a.text&&(b.value=a.text);b.addEventListener("keydown",function(c){13===c.keyCode&&(a.text=
+a.html.value,b.blur())});b.addEventListener("change",function(b){a.text=a.html.value});Gc(a,"change",b)};l.EditableText.getText=function(a){return!1};l.EditableText.getParamForInput=l.Text.getParamForInput;l.EditableText.getParamFromState=l.Text.getParamFromState;l.EditableText.putParamToState=l.Text.putParamToState;l.EditableText.set_fillcolor=l.Button.set_fillcolor;l.EditableText.get_currenttext=function(a){return w.string(String(a.html.value))};l.EditableText.get_text=function(a){return w.string(String(a.text))};
+l.EditableText.set_currenttext=function(a,b){a.html.value=a.text=Z(b)};l.EditableText.get_text=l.EditableText.get_text;l.EditableText.set_text=l.EditableText.set_currenttext;l.EditableText.get_val=l.EditableText.get_text;l.EditableText.set_val=l.EditableText.set_currenttext;l.EditableText.get_currenttext=l.EditableText.get_currenttext;l.EditableText.set_currenttext=l.EditableText.set_currenttext;l._helper.initializePoint=function(a){var b=0,c=0,d=0;if(a.pos){if("list"===a.pos.ctype&&h.isNumberVector(a.pos))return a.pos;
+2===a.pos.length&&(b=a.pos[0],c=a.pos[1],d=1);3===a.pos.length&&(b=a.pos[0],c=a.pos[1],d=a.pos[2])}a=h.turnIntoCSList([m._helper.input(b),m._helper.input(c),m._helper.input(d)]);return a=h.normalizeMax(a)};l._helper.initializeLine=function(a){var b=0,c=0,d=0;if(a.pos){if("list"===a.pos.ctype&&h.isNumberVector(a.pos))return a.pos;3===a.pos.length&&(b=a.pos[0],c=a.pos[1],d=a.pos[2])}a=h.turnIntoCSList([m._helper.input(b),m._helper.input(c),m._helper.input(d)]);return a=h.normalizeMax(a)};l.Poly={};
+l.Poly.kind="Poly";l.Poly.signature="P*";l.Poly.updatePosition=function(a){a.vertices=h.turnIntoCSList(a.args.map(function(a){return v.csnames[a].homog}))};var U=null;l.IFS={};l.IFS.kind="IFS";l.IFS.signature="**";l.IFS.signatureConstraints=function(a){for(var b=0;b<a.args.length;++b){var c=v.csnames[a.args[b]].kind;if("Tr"!==c&&"Mt"!==c)return!1}return 0<a.args.length};l.IFS.initialize=function(a){if(U)U.dirty=!0;else if(a=va.getBaseDir(),!1!==a){U={dirty:!1,params:{generation:0}};var b=U.worker=
+new Worker(a+"ifs.js");b.onmessage=function(a){U.img&&"function"===typeof U.img.close&&U.img.close();if(!Yb){a=a.data;if(a.generation===U.params.generation){if(a.buffer){U.canvas||(U.canvas=document.createElement("canvas"),U.ctx=U.canvas.getContext("2d"));U.canvas.width=a.width;U.canvas.height=a.height;var d=new Uint8ClampedArray(a.buffer,a.imgPtr,a.width*a.height*4),d=new ImageData(d,a.width,a.height);U.ctx.putImageData(d,0,0);U.img=U.canvas}else U.img=a.img;e()}else U.img=null;a.buffer?b.postMessage({cmd:"next",
+buffer:a.buffer},[a.buffer]):b.postMessage({cmd:"next"})}};jb.push(b.terminate.bind(b))}};l.IFS.updatePosition=function(a){U.dirty=!0};l.IFS.updateParameters=function(){if(U.worker){var a={cmd:"init",generation:U.params.generation,width:4*ca,height:4*da};a.systems=v.ifs.map(function(a){var b=0,d,e=a.ifs||[],f=a.args.map(function(a,b){var c=e[b]||{};return{prob:c.prob||1,color:c.color||[0,0,0]}});for(d=0;d<f.length;++d)b+=f[d].prob;d=h.realMatrix([[1,0,0],[0,1,0],[0,0,4]]);var k=h.productMM(y.toMat(),
+d);for(d=0;d<a.args.length;++d){var n=v.csnames[a.args[d]],p=n.kind,r=f[d];r.kind=p;r.prob/=b;if("Tr"===p)n=h.normalizeMax(h.productMM(h.adjoint3(k),h.productMM(n.matrix,k))),h._helper.isAlmostReal(n)?r.mat=n.value.map(function(a){return a.value.map(function(a){return a.value.real})}):r.kind="cplx";else if("Mt"===p){var p=y.drawingstate.matrix,p={anti:0<p.det,ar:m.real(p.a),ai:m.real(p.c),br:m.real(p.tx),bi:m.real(-p.ty),cr:m.zero,ci:m.zero,dr:m.real(.25),di:m.zero},t={};l._helper.composeMtMt(t,n.moebius,
+p);p=l._helper.inverseMoebius(p);l._helper.composeMtMt(t,p,t.moebius);p=t.moebius;p=h.turnIntoCSList([p.ar,p.ai,p.br,p.bi,p.cr,p.ci,p.dr,p.di]);h._helper.isAlmostReal(p)?(p=p.value,r.moebius={ar:p[0].value.real,ai:p[1].value.real,br:p[2].value.real,bi:p[3].value.real,cr:p[4].value.real,ci:p[5].value.real,dr:p[6].value.real,di:p[7].value.real,sign:n.moebius.anti?-1:1}):r.kind="cplx"}}return{trafos:f}});w.deeplyEqual(a,U.params)||(++a.generation,U.img=null,U.params=a,U.mat=y.drawingstate.matrix,U.worker.postMessage(a))}};
+l.IFS.probSetter=function(a,b,c){"number"===c.ctype&&(b.ifs[a].prob=c.value.real,U.dirty=!0)};(function(){for(var a=0;10>a;++a)l.IFS["set_prob"+a]=l.IFS.probSetter.bind(null,a)})();l._helper.snapPointToLine=function(a,b){if(m._helper.isAlmostZero(a.value[2]))return a;var c=l._helper.projectPointToLine(a,b),c=h.normalizeZ(c),d=c.value[0].value.real,c=c.value[1].value.real,e=Math.round(d/za)*za,f=Math.round(c/za)*za,k=h.realVector([e,f,1]);.2>Math.abs(e-d)&&.2>Math.abs(f-c)&&m._helper.isAlmostZero(h.scalproduct(b,
+k))&&(a=l._helper.projectPointToLine(k,b));return a};var Ac={CircleByRadius:"CircleMr",IntersectionCircleCircle:"IntersectCirCir",IntersectionConicConic:"IntersectConicConic",FreePoint:"Free",Orthogonal:"Perp",Parallel:"Para",Pole:"PolarOfLine",Polar:"PolarOfPoint",Arc:"ArcBy3",EuclideanMid:"Mid",AngularBisector:"AngleBisector",TransformConic:"TransformC",TransformSegment:"TransformS",TrMoebiusSegment:"TrMoebiusS",ReflectCC:"TrMoebiusC",ReflectCL:"TrMoebiusL",ReflectCP:"TrMoebiusP",ReflectCArc:"TrMoebiusArc",
+ReflectCS:"TrMoebiusS",TrMoebiusCircle:"TrMoebiusC"},zd={CircleMFixedr:function(a){a.pinned=!0;a.type="CircleMr";return[a]},CircleByFixedRadius:function(a){a.pinned=!0;a.type="CircleMr";return[a]},IntersectionConicLine:function(a){a.args=[a.args[1],a.args[0]];a.type="IntersectLC";return[a]},angleBisector:function(a){var b={name:a.name+"_Intersection",type:"Meet",args:a.args,visible:!1};a.type="AngleBisector";a.args=[a.args[0],a.args[1],b.name];return[b,a]},Transform:function(a){var b=v.csnames[a.args[1]],
+b={Tr:"Transform",Mt:"TrMoebius"}[v.csnames[a.args[0]].kind]+(b.isArc?"Arc":b.kind);if(l.hasOwnProperty(b))return a.type=b,[a];console.log(b+" not implemented yet");return[]},TrReflection:function(a){var b="TrReflection"+v.csnames[a.args[0]].kind;if(l.hasOwnProperty(b))return a.type=b,[a];console.log(b+" not implemented yet");return[]},TrCompose:function(a){var b="TrCompose"+a.args.map(function(a){return v.csnames[a].kind}).join("");if(l.hasOwnProperty(b))return a.type=b,[a];console.log(b+" not implemented yet");
+return[]}},te="align alpha angle args arrow arrowposition arrowshape arrowsides arrowsize clip color dashtype drawtrace fillalpha fillcolor filled labeled labelpos name overhang pinned printname radius size text text_fontfamily textbold textitalics textsize tracedim tracelength traceskip tracing type visible".split(" ");sa.saveState=function(){return{geometry:ue()}};var ya={},Qd,Rb,Rd,Sd;Qd=[[],[.2],[.075,.225],[44/45,-56/15,32/9],[19372/6561,-25360/2187,64448/6561,-212/729],[9017/3168,-355/33,46732/
+5247,49/176,-5103/18656],[35/384,0,500/1113,125/192,-2187/6784,11/84]];Rb=[0,.2,.3,.8,8/9,1,1];Rd=[35/384,0,500/1113,125/192,-2187/6784,11/84,0];Sd=[5179/57600,0,7571/16695,.6140625,-92097/339200,187/2100,.025];var Fa,ma=[],Hc=[],qc=!1;ya.tick=function(a){a/=Vb;for(var b=0;b<Vb;b++)ya.tick1(a),Ib+=a,z(R.simulationstep)};ya.tick1=function(a){for(var b=a,c=0;0<a&&c<.999*a||0>a&&c>.999*a;)b=ya.oneRKStep(b),c+=b,b=Math.min(2*b,a-c),b=Math.max(b,1E-16),ya.restorePosition(),ya.doCollisions(),ya.calculateForces(),
+ya.moveToFinalPos();return!0};ya.restorePosition=function(){Fa.forEach(function(a){O[a.type].restorePos(a,9)})};ya.doCollisions=function(){Fa.forEach(function(a){O[a.type].doCollisions(a)})};ya.calculateForces=function(){Fa.forEach(function(a){O[a.type].calculateForces(a)})};ya.moveToFinalPos=function(){Fa.forEach(function(a){O[a.type].move(a)})};ya.oneRKStep=function(a){for(var b=function(a){Fa.forEach(function(b){O[b.type].initRK(b,a);O[b.type].storePosition(b)})},c=function(a){Fa.forEach(function(b){O[b.type].setToTimestep(b,
+Rb[a])})},d=function(a){Fa.forEach(function(b){O[b.type].proceedMotion(b,Rb[a],a,Qd[a])})},e=function(){Fa.forEach(function(a){O[a.type].resetForces(a)})},f=function(a){Fa.forEach(function(b){O[b.type].calculateDelta(b,a)})},h=function(b){var c=0;Fa.forEach(function(a){O[a.type].proceedMotion(a,Rb[6],7,Rd);O[a.type].savePos(a,8);O[a.type].proceedMotion(a,Rb[6],7,Sd);O[a.type].savePos(a,9);c+=O[a.type].sqDist(a,8,9)});return c=Math.sqrt(c)/a},k=function(a){Fa.forEach(function(a){O[a.type].recallPosition(a)})},
+l=!1;!l;){b(a);for(var m=0;7>m;m++)c(m),d(m),e(),ya.calculateForces(),f(m);h(a)>O.env.errorbound&&a>O.env.lowestdeltat?(a/=O.env.slowdownfactor,k()):l=!0}return a};var O={Mass:{reset:function(a,b){a.vel=[0,0,0];a.pos=[0,0,0,0];a.el=b;"undefined"===typeof a.mass&&(a.mass=1);"undefined"===typeof a.charge&&(a.charge=0);"undefined"===typeof a.friction&&(a.friction=0);a.lnfrict=0;"undefined"===typeof a.limitspeed&&(a.limitspeed=!1);"undefined"===typeof a.fixed&&(a.fixed=!1);"undefined"===typeof a.radius&&
+(a.radius=1);a.internalmove=!1;a.fx=0;a.fy=0;a.fz=0;a.vx=a.vx||0;a.vy=a.vy||0;a.vz=a.vz||0;a.mtype=0;a.env=O.env;a.deltat=0;a.mx=0;a.my=0;a.mz=0;a.mvx=0;a.mvy=0;a.mvz=0;a.dx=[0,0,0,0,0,0,0,0,0,0];a.dy=[0,0,0,0,0,0,0,0,0,0];a.dz=[0,0,0,0,0,0,0,0,0,0];a.dvx=[0,0,0,0,0,0,0,0,0,0];a.dvy=[0,0,0,0,0,0,0,0,0,0];a.dvz=[0,0,0,0,0,0,0,0,0,0];a.midx=0;a.midy=0;a.midz=0;a.lx=0;a.ly=0;a.lz=0},resetForces:function(a){a.fx=0;a.fy=0;a.fz=0},getBlock:!1,setToTimestep:function(a,b,c){},initRK:function(a,b){var c=D.extractPoint(a.el.homog);
+a.x=c.x;a.y=c.y;a.z=0;a.xo=a.x;a.yo=a.y;a.zo=a.z;a.vxo=a.vx;a.vyo=a.vy;a.vzo=a.vz;a.deltat=b;a.fx=0;a.fy=0;a.fz=0},setVelocity:function(a,b,c,d){d||(d=0);a.vx=b;a.vy=c;a.vz=d},move:function(a){a.pos=[a.x,a.y,1];a.internalmove=!0;ja&&aa.down&&a.el===ja.mover||La(a.el,h.realVector(a.pos),"homog");a.el.sx=a.x;a.el.sy=a.y;a.internalmove=!1},proceedMotion:function(a,b,c,d){if(!a.fixed)for(a.x=a.mx,a.y=a.my,a.z=a.mz,a.vx=a.mvx,a.vy=a.mvy,a.vz=a.mvz,b=0;b<c;b++)a.x+=d[b]*a.dx[b]*a.deltat,a.y+=d[b]*a.dy[b]*
+a.deltat,a.z+=d[b]*a.dz[b]*a.deltat,a.vx+=d[b]*a.dvx[b]*a.deltat,a.vy+=d[b]*a.dvy[b]*a.deltat,a.vz+=d[b]*a.dvz[b]*a.deltat},calculateForces:function(a){var b=Math.sqrt(a.vx*a.vx+a.vy*a.vy+a.vz*a.vz);a.lnfrict=-Math.log((1-a.friction)*(1-a.env.friction)*(.1<b&&a.limitSpeed?.1/b:1));a.fx+=-a.vx*a.lnfrict*a.mass;a.fy+=-a.vy*a.lnfrict*a.mass;a.fz+=-a.vz*a.lnfrict*a.mass},calculateDelta:function(a,b){a.dx[b]=a.vx;a.dy[b]=a.vy;a.dz[b]=a.vz;a.dvx[b]=a.fx/a.mass;a.dvy[b]=a.fy/a.mass;a.dvz[b]=a.fz/a.mass},
+savePos:function(a,b){a.dx[b]=a.x;a.dy[b]=a.y;a.dz[b]=a.z;a.dvx[b]=a.vx;a.dvy[b]=a.vy;a.dvz[b]=a.vz},restorePos:function(a,b){a.fixed||(a.x=a.dx[b],a.y=a.dy[b],a.z=a.dz[b],a.vx=a.dvx[b],a.vy=a.dvy[b],a.vz=a.dvz[b])},sqDist:function(a,b,c){var d=(a.dx[b]-a.dx[c])*(a.dx[b]-a.dx[c]),d=d+(a.dy[b]-a.dy[c])*(a.dy[b]-a.dy[c]),d=d+(a.dz[b]-a.dz[c])*(a.dz[b]-a.dz[c]),d=d+(a.dvx[b]-a.dvx[c])*(a.dvx[b]-a.dvx[c]),d=d+(a.dvy[b]-a.dvy[c])*(a.dvy[b]-a.dvy[c]);return d+=(a.dvz[b]-a.dvz[c])*(a.dvz[b]-a.dvz[c])},kineticEnergy:function(a){return.5*
+a.mass*(a.vx*a.vx+a.vy*a.vy+a.vz*a.vz)},storePosition:function(a){a.mx=a.x;a.my=a.y;a.mz=a.z;a.mvx=a.vx;a.mvy=a.vy;a.mvz=a.vz},recallPosition:function(a){a.fixed||(a.x=a.mx,a.y=a.my,a.z=a.mz,a.vx=a.mvx,a.vy=a.mvy,a.vz=a.mvz)},doCollisions:function(a){}},Sun:{reset:function(a,b){a.vel=[0,0,0];a.pos=[0,0,0,0];a.el=b;"undefined"===typeof a.mass&&(a.mass=10);"undefined"===typeof a.friction&&(a.friction=0);a.charge=0;a.x=0;a.y=0;a.z=0},resetForces:function(a){},getBlock:!1,setToTimestep:function(a,b,c){},
+initRK:function(a,b){var c=D.extractPoint(a.el.homog);a.x=c.x;a.y=c.y;a.z=0},setVelocity:function(a,b,c,d){},move:function(a){},proceedMotion:function(a,b,c,d){},calculateDelta:function(a,b){},calculateForces:function(a){for(var b=a.x,c=a.y,d=a.z,e=0;e<ma.length;e++){var f=ma[e],h=f.behavior.x,k=f.behavior.y,l=f.behavior.z,m=Math.sqrt((b-h)*(b-h)+(c-k)*(c-k)+(d-l)*(d-l)),k=(c-k)*a.mass*f.behavior.mass/(m*m*m),l=(d-l)*a.mass*f.behavior.mass/(m*m*m);f.behavior.fx+=(b-h)*a.mass*f.behavior.mass/(m*m*
+m)*f.behavior.mass;f.behavior.fy+=k*f.behavior.mass;f.behavior.fz+=l*f.behavior.mass}},savePos:function(a,b){},restorePos:function(a,b){},sqDist:function(a,b,c){return 0},kineticEnergy:function(a){},storePosition:function(a){},recallPosition:function(a){},doCollisions:function(a){}},Velocity:{reset:function(a){var b=v.csnames[a.geo[1]];console.log(b);var c=D.extractPoint(b.homog);a=D.extractPoint(v.csnames[a.geo[2]].homog);b=b.behavior;O[b.type].setVelocity(b,a.x-c.x,a.y-c.y,0)},resetForces:function(a){},
+getBlock:!1,setToTimestep:function(a,b,c){},initRK:function(a,b){},setVelocity:function(a,b,c,d){},move:function(a){var b=v.csnames[a.geo[2]];if(!ja||!aa.down||b!==ja.mover){var c=v.csnames[a.geo[1]];a=D.extractPoint(c.homog);c=c.behavior;a=h.realVector([a.x+c.vx,a.y+c.vy,1]);La(b,a,"homog")}},proceedMotion:function(a,b,c,d){},calculateForces:function(a){},calculateDelta:function(a,b){},savePos:function(a,b){},restorePos:function(a,b){},sqDist:function(a,b,c){return 0},kineticEnergy:function(a){},
+storePosition:function(a){},recallPosition:function(a){},doCollisions:function(a){}},Gravity:{reset:function(a,b){a.vel=[0,0,0];a.pos=[0,0,0,0];a.el=b;"undefined"===typeof a.strength&&(a.strength=1);a.namea=b.args[0];a.nameb=b.args[1];a.ma=v.csnames[a.namea];a.mb=v.csnames[a.nameb]},resetForces:function(a){},getBlock:!1,setToTimestep:function(a,b,c){},initRK:function(a,b){},setVelocity:function(a,b,c,d){},move:function(a){},proceedMotion:function(a,b,c,d){},calculateDelta:function(a,b){},calculateForces:function(a){var b=
+D.extractPoint(a.ma.homog),c=D.extractPoint(a.mb.homog),d=(c.x-b.x)*a.strength;a=(c.y-b.y)*a.strength;for(b=0;b<ma.length;b++)c=ma[b],c.behavior.fx+=d*c.behavior.mass,c.behavior.fy+=a*c.behavior.mass,c.behavior.fz+=0*c.behavior.mass},savePos:function(a,b){},restorePos:function(a,b){},sqDist:function(a,b,c){return 0},kineticEnergy:function(a){},storePosition:function(a){},recallPosition:function(a){},doCollisions:function(a){}},Spring:{reset:function(a,b){a.el=b;"undefined"===typeof a.strength&&(a.strength=
+1);"undefined"===typeof a.amplitude&&(a.amplitude=0);"undefined"===typeof a.phase&&(a.phase=0);"undefined"===typeof a.speed&&(a.speed=1);"undefined"===typeof a.l0&&(a.l0=0);"undefined"===typeof a.stype&&(a.stype=1);"undefined"===typeof a.readOnInit&&(a.readOnInit=!1);a.namea=b.args[0];a.nameb=b.args[1];a.ma=v.csnames[a.namea];a.mb=v.csnames[a.nameb];var c=D.extractPoint(a.ma.homog),d=D.extractPoint(a.mb.homog);a.l0=Math.sqrt((c.x-d.x)*(c.x-d.x)+(c.y-d.y)*(c.y-d.y));a.env=O.env;a.ldiff=0},resetForces:function(a){},
+getBlock:!1,setToTimestep:function(a,b,c){},initRK:function(a,b){},setVelocity:function(a,b,c,d){},move:function(a){},proceedMotion:function(a,b,c,d){},calculateForces:function(a){var b,c,d,e;!a.ma.behavior||ja&&aa.down&&a.ma===ja.mover?(c=D.extractPoint(a.ma.homog),b=c.x,d=c.y):(b=a.ma.behavior.x,d=a.ma.behavior.y);!a.mb.behavior||ja&&aa.down&&a.mb===ja.mover?(e=D.extractPoint(a.mb.homog),c=e.x,e=e.y):(c=a.mb.behavior.x,e=a.mb.behavior.y);var f=Math.sqrt((b-c)*(b-c)+(d-e)*(d-e)),h=a.l0;a.ldiff=f-
+h;var k=a.stype;1===k&&(h=0);var l=0;if(2===k||3===k)l=a.ma.behavior.mass*a.mb.behavior.mass*a.strength;2===k&&(l=-l);var m,n;if(0===f||0!==k&&1!==k)if(a.ma.behavior&&a.mb.behavior&&0!==f){if(f*=f*f,2===k||3===k)m=(b-c)*l/f,n=(d-e)*l/f}else m=n=0;else m=-(b-c)*a.strength*(f-h)/f*a.env.springstrength,n=-(d-e)*a.strength*(f-h)/f*a.env.springstrength;a.ma.behavior&&(a.ma.behavior.fx+=m,a.ma.behavior.fy+=n);a.mb.behavior&&(a.mb.behavior.fx-=m,a.mb.behavior.fy-=n)},calculateDelta:function(a,b){},savePos:function(a,
+b){},restorePos:function(a,b){},sqDist:function(a,b,c){return 0},kineticEnergy:function(a){},storePosition:function(a){},recallPosition:function(a){},doCollisions:function(a){}},det:function(a,b,c,d,e,f){return c*f-e*d+e*b-a*f+a*d-c*b},Bouncer:{reset:function(a,b){a.el=b;"undefined"===typeof a.xdamp&&(a.xdamp=0);"undefined"===typeof a.ydamp&&(a.ydamp=0);"undefined"===typeof a.motorchanger&&(a.motorchanger=!0);a.namea=b.args[0];a.nameb=b.args[1];a.ma=v.csnames[a.namea];a.mb=v.csnames[a.nameb];var c=
+D.extractPoint(a.ma.homog),d=D.extractPoint(a.mb.homog);a.x1o=1.01*c.x-.01*d.x;a.y1o=1.01*c.y-.01*d.y;a.x2o=1.01*d.x-.01*c.x;a.y2o=1.01*d.y-.01*c.y;a.env=O.env},resetForces:function(a){},getBlock:!1,setToTimestep:function(a,b,c){},initRK:function(a,b){a.deltat=b},setVelocity:function(a,b,c,d){},move:function(a){},proceedMotion:function(a,b,c,d){},calculateForces:function(a){},calculateDelta:function(a,b){},savePos:function(a,b){},restorePos:function(a,b){},sqDist:function(a,b,c){return 0},kineticEnergy:function(a){},
+storePosition:function(a){},recallPosition:function(a){},doCollisions:function(a){for(var b=D.extractPoint(a.ma.homog),c=D.extractPoint(a.mb.homog),d=b.x,b=b.y,e=c.x,c=c.y,f=a.x1o,h=a.y1o,k=a.x2o,l=a.y2o,n=Math.sqrt((d-e)*(d-e)+(b-c)*(b-c)),p=(d-e)/n,n=(b-c)/n,r=0;r<ma.length;r++){var t=ma[r],u=t.behavior.xo,v=t.behavior.yo,w=t.behavior.x,x=t.behavior.y,y=m.mult(m.complex(f,h),m.complex(e,c)),z=m.mult(m.complex(k,l),m.complex(d,b)),y=m.sub(y,z),z=m.mult(m.complex(u,v),m.complex(d,b)),y=m.add(y,z),
+z=m.mult(m.complex(u,v),m.complex(e,c)),y=m.sub(y,z),z=m.sub(m.complex(f,h),m.complex(k,l)),y=m.div(y,z);0>O.det(d,b,e,c,w,x)*O.det(d,b,e,c,y.value.real,y.value.imag)&&0>O.det(d,b,w,x,y.value.real,y.value.imag)*O.det(e,c,w,x,y.value.real,y.value.imag)&&(v=t.behavior.mvx+a.deltat*(-y.value.real+t.behavior.xo),w=t.behavior.mvy+a.deltat*(-y.value.imag+t.behavior.yo),u=p*v+n*w,v=n*v-p*w,t.behavior.x=y.value.real,t.behavior.y=y.value.imag,t.behavior.vx=p*u*(1-a.xdamp),t.behavior.vy=n*u*(1-a.xdamp),t.behavior.vx+=
+-n*v*(1-a.ydamp),t.behavior.vy+=p*v*(1-a.ydamp))}a.x1o=d;a.y1o=b;a.x2o=e;a.y2o=c}},Environment:{init:function(a){"undefined"===typeof a.gravity&&(a.gravity=0);"undefined"===typeof a.friction&&(a.friction=0);"undefined"===typeof a.springstrength&&(a.springstrength=1);"undefined"!==typeof a.accuracy&&(Vb=a.accuracy);"undefined"!==typeof a.deltat&&ha(a.deltat/.6);"undefined"===typeof a.charges&&(a.charges=!1);"undefined"===typeof a.balls&&(a.balls=!1);"undefined"===typeof a.newton&&(a.newton=!1);"undefined"===
+typeof a.ballInteractionBoosting&&(a.ballInteractionBoosting=1);O.env=a;a.errorbound=.001;a.lowestdeltat=1E-7;a.slowdownfactor=2},reset:function(a){},resetForces:function(a){},getBlock:!1,setToTimestep:function(a,b,c){},initRK:function(a,b){},setVelocity:function(a,b,c,d){},move:function(a){},proceedMotion:function(a,b,c,d){},calculateForces:function(a){var b,c,d,e,f,h,k,l,m,n;if(a.newton)for(b=0;b<ma.length-1;b++)for(c=ma[b],d=c.behavior.x,e=c.behavior.y,f=b+1;f<ma.length;f++)h=ma[f],k=h.behavior.x,
+l=h.behavior.y,n=Math.sqrt((d-k)*(d-k)+(e-l)*(e-l)),k=(d-k)*c.behavior.mass*h.behavior.mass/(n*n*n),l=(e-l)*c.behavior.mass*h.behavior.mass/(n*n*n),c.behavior.fx-=k,c.behavior.fy-=l,h.behavior.fx+=k,h.behavior.fy+=l;if(a.charges)for(b=0;b<ma.length-1;b++)for(c=ma[b],d=c.behavior.x,e=c.behavior.y,f=b+1;f<ma.length;f++)h=ma[f],k=h.behavior.x,l=h.behavior.y,n=Math.sqrt((d-k)*(d-k)+(e-l)*(e-l)),k=(d-k)*c.behavior.charge*h.behavior.charge/(n*n*n),l=(e-l)*c.behavior.charge*h.behavior.charge/(n*n*n),c.behavior.fx+=
+k,c.behavior.fy+=l,h.behavior.fx-=k,h.behavior.fy-=l;if(a.balls)for(b=0;b<ma.length-1;b++)if(c=ma[b],0!==c.behavior.radius)for(d=c.behavior.x,e=c.behavior.y,f=b+1;f<ma.length;f++)h=ma[f],0!==h.behavior.radius&&(k=h.behavior.x,l=h.behavior.y,m=c.behavior.radius+h.behavior.radius,n=Math.sqrt((d-k)*(d-k)+(e-l)*(e-l)),0===a.ballInteractionBoosting?(k=(d-k)/(n*n*n)*(n>m?0:(n-m)*(n-m)),l=(e-l)/(n*n*n)*(n>m?0:(n-m)*(n-m))):1===a.ballInteractionBoosting?(k=(d-k)/(n*n*n*n)*(n>m?0:(n-m)*(n-m)),l=(e-l)/(n*n*
+n*n)*(n>m?0:(n-m)*(n-m))):(k=(d-k)/(n*n*n*n*n)*(n>m?0:(n-m)*(n-m)),l=(e-l)/(n*n*n*n*n)*(n>m?0:(n-m)*(n-m))),c.behavior.fx+=k,c.behavior.fy+=l,h.behavior.fx-=k,h.behavior.fy-=l);for(b=0;b<ma.length;b++)c=ma[b],c.behavior.fx+=0,c.behavior.fy+=-a.gravity*c.behavior.mass,c.behavior.fz+=0},calculateDelta:function(a,b){},savePos:function(a,b){},restorePos:function(a,b){},sqDist:function(a,b,c){return 0},kineticEnergy:function(a){},storePosition:function(a){},recallPosition:function(a){},doCollisions:function(a){}}};
+return sa};return F}(),createCindy=CindyJS;"undefined"!==typeof process&&"undefined"!==typeof module&&"undefined"!==typeof module.exports&&"undefined"===typeof window&&(module.exports=CindyJS);
+//# sourceMappingURL=Cindy.js.map
+
diff --git a/graphics/ketcindy/ketcindyfolder/scripts/ketcindyjs/Cindy.js.map b/graphics/ketcindy/ketcindyfolder/scripts/ketcindyjs/Cindy.js.map
new file mode 100644
index 0000000000..f30d5b75e4
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/scripts/ketcindyjs/Cindy.js.map
@@ -0,0 +1,7 @@
+{"version":3,
+ "file":"Cindy.js",
+ "sourceRoot":"https://raw.githubusercontent.com/CindyJS/CindyJS/8c01b8d1d336e92934ad80c44aafc5510a1aea36/",
+ "sources":["node_modules/iphone-inline-video/dist/iphone-inline-video.min.js","lib/clipper/clipper.js","src/js/Head.js","src/js/Setup.js","src/js/Events.js","src/js/libgeo/GeoRender.js","src/js/libcs/List.js","src/js/libcs/Essentials.js","src/js/libcs/Operators.js","src/js/libcs/OpDrawing.js","src/js/libcs/OpImageDrawing.js","src/js/libcs/Parser.js","src/js/libcs/Evaluator.js","src/js/libcs/RenderBackends.js","src/js/libcs/Tools.js","src/js/libgeo/GeoBasics.js","src/js/libgeo/Tracing.js","src/js/libgeo/Prover.js","src/js/libgeo/GeoOps.js","src/js/libgeo/StateIO.js","src/js/liblab/LabBasics.js","build/js/Version.js","src/js/libcs/CSNumber.js","src/js/libcs/Dict.js","src/js/libcs/General.js","src/js/libcs/Namespace.js","src/js/libcs/Accessors.js","src/js/libcs/OpSound.js","src/js/libcs/CSad.js","src/js/libcs/Render2D.js","src/js/libgeo/GeoState.js","src/js/liblab/LabObjects.js","src/js/Tail.js"],
+ "sourcesContent":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"var version = [0,8,7,0,\"g8c01b8d\"];\n",null,null,null,null,null,null,null,null,null,null,null],
+ "names":["enableInlineVideo","e","i","n","r","t","d","a","start","stop","stopImmediatePropagation","addEventListener","Object","defineProperty","get","set","dispatchEvent","Event","Promise","resolve","then","Audio","crossOrigin","src","currentSrc","o","m","Date","now","b","currentTime","w","T","s","video","readyState","HAVE_FUTURE_DATA","hasAudio","driver","playbackRate","loop","duration","networkState","NETWORK_IDLE","buffered","length","load","ended","pause","c","h","webkitDisplayingFullscreen","g","paused","play","updater","HAVE_ENOUGH_DATA","v","E","p","bind","requestAnimationFrame","cancelAnimationFrame","muted","indexOf","y","document","head","style","matchMedia","matches","f","everywhere","test","iPad","ipad","navigator","userAgent","classList","add","autoplay","platform","console","warn","k","biginteger_used","fromInt","fromNumber","fromString","R","Math","floor","S","l","M","D","charCodeAt","x","A","B","mp","invDigit","mpl","mph","um","DB","mt2","U","K","N","O","C","P","z","r2","q3","ONE","dlShiftTo","mu","divide","use_lines","use_xyz","F","module","exports","window","ClipperLib","self","q","toString","toLowerCase","appName","G","L","H","I","J","Q","prototype","am","DM","DV","FV","pow","F1","F2","convert","A.prototype.convert","compareTo","mod","revert","A.prototype.revert","reduce","A.prototype.reduce","divRemTo","mulTo","A.prototype.mulTo","multiplyTo","sqrTo","A.prototype.sqrTo","squareTo","B.prototype.convert","abs","ZERO","subTo","B.prototype.revert","copyTo","B.prototype.reduce","clamp","drShiftTo","B.prototype.mulTo","B.prototype.sqrTo","k.prototype.copyTo","k.prototype.fromInt","k.prototype.fromString","fromRadix","charAt","k.prototype.clamp","k.prototype.dlShiftTo","k.prototype.drShiftTo","max","lShiftTo","k.prototype.lShiftTo","rShiftTo","k.prototype.rShiftTo","k.prototype.subTo","min","k.prototype.multiplyTo","k.prototype.squareTo","k.prototype.divRemTo","k.prototype.invDigit","isEven","k.prototype.isEven","exp","k.prototype.exp","k.prototype.toString","negate","toRadix","k.prototype.negate","k.prototype.abs","k.prototype.compareTo","bitLength","k.prototype.bitLength","k.prototype.mod","modPowInt","k.prototype.modPowInt","C.prototype.mulTo","C.prototype.sqrTo","z.prototype.convert","z.prototype.revert","z.prototype.reduce","multiplyUpperTo","multiplyLowerTo","dAddOffset","z.prototype.mulTo","z.prototype.sqrTo","u","V","chunkSize","k.prototype.chunkSize","LN2","log","k.prototype.toRadix","signum","intValue","substr","k.prototype.fromRadix","dMultiply","k.prototype.fromNumber","testBit","bitwiseTo","shiftLeft","isProbablePrime","nextBytes","k.prototype.bitwiseTo","changeBit","k.prototype.changeBit","addTo","k.prototype.addTo","k.prototype.dMultiply","k.prototype.dAddOffset","k.prototype.multiplyLowerTo","k.prototype.multiplyUpperTo","modInt","k.prototype.modInt","millerRabin","k.prototype.millerRabin","subtract","getLowestSetBit","shiftRight","random","modPow","clone","k.prototype.clone","k.prototype.intValue","byteValue","k.prototype.byteValue","shortValue","k.prototype.shortValue","k.prototype.signum","toByteArray","k.prototype.toByteArray","equals","k.prototype.equals","k.prototype.min","k.prototype.max","and","k.prototype.and","or","k.prototype.or","xor","k.prototype.xor","andNot","k.prototype.andNot","not","k.prototype.not","k.prototype.shiftLeft","k.prototype.shiftRight","k.prototype.getLowestSetBit","bitCount","k.prototype.bitCount","k.prototype.testBit","setBit","k.prototype.setBit","clearBit","k.prototype.clearBit","flipBit","k.prototype.flipBit","k.prototype.add","k.prototype.subtract","multiply","k.prototype.multiply","k.prototype.divide","remainder","k.prototype.remainder","divideAndRemainder","k.prototype.divideAndRemainder","k.prototype.modPow","modInverse","k.prototype.modInverse","k.prototype.pow","gcd","k.prototype.gcd","k.prototype.isProbablePrime","square","k.prototype.square","IsNegative","k.prototype.IsNegative","op_Equality","k.op_Equality","op_Inequality","k.op_Inequality","op_GreaterThan","k.op_GreaterThan","op_LessThan","k.op_LessThan","op_Addition","k.op_Addition","op_Subtraction","k.op_Subtraction","Int128Mul","k.Int128Mul","op_Division","k.op_Division","ToDouble","k.prototype.ToDouble","parseFloat","getOwnPropertyNames","getOwnPropertyDescriptor","$baseCtor","Path","d.Path","Paths","d.Paths","DoublePoint","d.DoublePoint","arguments","Y","X","DoublePoint0","d.DoublePoint0","DoublePoint1","d.DoublePoint1","DoublePoint2","d.DoublePoint2","PolyNode","d.PolyNode","m_Parent","m_polygon","m_endtype","m_jointype","m_Index","m_Childs","IsOpen","IsHoleNode","d.PolyNode.prototype.IsHoleNode","ChildCount","d.PolyNode.prototype.ChildCount","Contour","d.PolyNode.prototype.Contour","AddChild","d.PolyNode.prototype.AddChild","push","GetNext","d.PolyNode.prototype.GetNext","GetNextSiblingUp","d.PolyNode.prototype.GetNextSiblingUp","Childs","d.PolyNode.prototype.Childs","Parent","d.PolyNode.prototype.Parent","IsHole","d.PolyNode.prototype.IsHole","PolyTree","d.PolyTree","m_AllPolys","call","Clear","d.PolyTree.prototype.Clear","GetFirst","d.PolyTree.prototype.GetFirst","Total","d.PolyTree.prototype.Total","Math_Abs_Int64","Math_Abs_Int32","Math_Abs_Double","d.Math_Abs_Double","Math_Max_Int32_Int32","d.Math_Max_Int32_Int32","Cast_Int32","Cast_Int64","ceil","Number","toInteger","parseInt","d.Clear","PI","PI2","IntPoint","d.IntPoint","Z","Clipper","Round","d.IntPoint.op_Equality","d.IntPoint.op_Inequality","IntPoint0","d.IntPoint0","IntPoint1","d.IntPoint1","IntPoint1dp","d.IntPoint1dp","IntPoint2","d.IntPoint2","IntPoint3","d.IntPoint3","IntRect","d.IntRect","left","top","right","bottom","IntRect0","d.IntRect0","IntRect1","d.IntRect1","IntRect4","d.IntRect4","ClipType","ctIntersection","ctUnion","ctDifference","ctXor","PolyType","ptSubject","ptClip","PolyFillType","pftEvenOdd","pftNonZero","pftPositive","pftNegative","JoinType","jtSquare","jtRound","jtMiter","EndType","etOpenSquare","etOpenRound","etOpenButt","etClosedLine","etClosedPolygon","EdgeSide","esLeft","esRight","Direction","dRightToLeft","dLeftToRight","TEdge","d.TEdge","Bot","Curr","Top","Delta","Dx","PolyTyp","Side","OutIdx","WindCnt2","WindCnt","WindDelta","PrevInSEL","NextInSEL","PrevInAEL","NextInAEL","NextInLML","Prev","Next","IntersectNode","d.IntersectNode","Edge2","Edge1","Pt","MyIntersectNodeSort","d.MyIntersectNodeSort","Compare","d.MyIntersectNodeSort.Compare","LocalMinima","d.LocalMinima","RightBound","LeftBound","Scanbeam","d.Scanbeam","OutRec","d.OutRec","Idx","BottomPt","Pts","FirstLeft","OutPt","d.OutPt","Join","d.Join","OutPt2","OutPt1","OffPt","ClipperBase","d.ClipperBase","m_CurrentLM","m_MinimaList","m_edges","PreserveCollinear","m_HasOpenPaths","m_UseFullRange","horizontal","Skip","Unassigned","tolerance","loRange","hiRange","near_zero","d.ClipperBase.near_zero","IsHorizontal","d.ClipperBase.IsHorizontal","PointIsVertex","d.ClipperBase.prototype.PointIsVertex","PointOnLineSegment","d.ClipperBase.prototype.PointOnLineSegment","PointOnPolygon","d.ClipperBase.prototype.PointOnPolygon","SlopesEqual","d.ClipperBase.SlopesEqual","SlopesEqual3","d.ClipperBase.SlopesEqual3","SlopesEqual4","d.ClipperBase.SlopesEqual4","SlopesEqual5","d.ClipperBase.SlopesEqual5","d.ClipperBase.prototype.Clear","DisposeLocalMinimaList","d.ClipperBase.prototype.DisposeLocalMinimaList","RangeTest","d.ClipperBase.prototype.RangeTest","Value","Error","InitEdge","d.ClipperBase.prototype.InitEdge","InitEdge2","d.ClipperBase.prototype.InitEdge2","SetDx","FindNextLocMin","d.ClipperBase.prototype.FindNextLocMin","ProcessBound","d.ClipperBase.prototype.ProcessBound","InsertLocalMinima","ReverseHorizontal","AddPath","d.ClipperBase.prototype.AddPath","Pt2IsBetweenPt1AndPt3","RemoveEdge","AddPaths","d.ClipperBase.prototype.AddPaths","d.ClipperBase.prototype.Pt2IsBetweenPt1AndPt3","d.ClipperBase.prototype.RemoveEdge","d.ClipperBase.prototype.SetDx","d.ClipperBase.prototype.InsertLocalMinima","PopLocalMinima","d.ClipperBase.prototype.PopLocalMinima","d.ClipperBase.prototype.ReverseHorizontal","Reset","d.ClipperBase.prototype.Reset","d.Clipper","m_PolyOuts","m_ClipType","m_IntersectNodeComparer","m_IntersectList","m_SortedEdges","m_ActiveEdges","m_Scanbeam","m_ExecuteLocked","m_SubjFillType","m_ClipFillType","m_GhostJoins","m_Joins","StrictlySimple","ReverseSolution","m_UsingPolyTree","ZFillFunction","ioReverseSolution","ioStrictlySimple","ioPreserveCollinear","d.Clipper.prototype.Clear","DisposeAllPolyPts","DisposeScanbeamList","d.Clipper.prototype.DisposeScanbeamList","d.Clipper.prototype.Reset","InsertScanbeam","d.Clipper.prototype.InsertScanbeam","Execute","d.Clipper.prototype.Execute","ExecuteInternal","BuildResult2","BuildResult","FixHoleLinkage","d.Clipper.prototype.FixHoleLinkage","d.Clipper.prototype.ExecuteInternal","PopScanbeam","InsertLocalMinimaIntoAEL","ProcessHorizontals","ProcessIntersections","ProcessEdgesAtTopOfScanbeam","Area","ReversePolyPtLinks","JoinCommonEdges","FixupOutPolygon","DoSimplePolygons","d.Clipper.prototype.PopScanbeam","d.Clipper.prototype.DisposeAllPolyPts","DisposeOutRec","d.Clipper.prototype.DisposeOutRec","AddJoin","d.Clipper.prototype.AddJoin","AddGhostJoin","d.Clipper.prototype.AddGhostJoin","SetZ","d.Clipper.prototype.SetZ","d.Clipper.prototype.InsertLocalMinimaIntoAEL","InsertEdgeIntoAEL","SetWindingCount","IsContributing","AddOutPt","AddLocalMinPoly","AddEdgeToSEL","HorzSegmentsOverlap","IntersectEdges","d.Clipper.prototype.InsertEdgeIntoAEL","E2InsertsBeforeE1","d.Clipper.prototype.E2InsertsBeforeE1","TopX","IsEvenOddFillType","d.Clipper.prototype.IsEvenOddFillType","IsEvenOddAltFillType","d.Clipper.prototype.IsEvenOddAltFillType","d.Clipper.prototype.IsContributing","d.Clipper.prototype.SetWindingCount","d.Clipper.prototype.AddEdgeToSEL","CopyAELToSEL","d.Clipper.prototype.CopyAELToSEL","SwapPositionsInAEL","d.Clipper.prototype.SwapPositionsInAEL","SwapPositionsInSEL","d.Clipper.prototype.SwapPositionsInSEL","AddLocalMaxPoly","d.Clipper.prototype.AddLocalMaxPoly","AppendPolygon","d.Clipper.prototype.AddLocalMinPoly","CreateOutRec","d.Clipper.prototype.CreateOutRec","d.Clipper.prototype.AddOutPt","SetHoleState","SwapPoints","d.Clipper.prototype.SwapPoints","d.Clipper.prototype.HorzSegmentsOverlap","d.Clipper.prototype.SetHoleState","GetDx","d.Clipper.prototype.GetDx","FirstIsBottomPt","d.Clipper.prototype.FirstIsBottomPt","GetBottomPt","d.Clipper.prototype.GetBottomPt","GetLowermostRec","d.Clipper.prototype.GetLowermostRec","Param1RightOfParam2","d.Clipper.prototype.Param1RightOfParam2","GetOutRec","d.Clipper.prototype.GetOutRec","d.Clipper.prototype.AppendPolygon","d.Clipper.prototype.ReversePolyPtLinks","SwapSides","d.Clipper.SwapSides","SwapPolyIndexes","d.Clipper.SwapPolyIndexes","d.Clipper.prototype.IntersectEdges","DeleteFromAEL","d.Clipper.prototype.DeleteFromAEL","DeleteFromSEL","d.Clipper.prototype.DeleteFromSEL","UpdateEdgeIntoAEL","d.Clipper.prototype.UpdateEdgeIntoAEL","d.Clipper.prototype.ProcessHorizontals","ProcessHorizontal","GetHorzDirection","d.Clipper.prototype.GetHorzDirection","Left","Right","Dir","d.Clipper.prototype.ProcessHorizontal","GetMaximaPair","GetNextInAEL","d.Clipper.prototype.GetNextInAEL","IsMinima","d.Clipper.prototype.IsMinima","IsMaxima","d.Clipper.prototype.IsMaxima","IsIntermediate","d.Clipper.prototype.IsIntermediate","d.Clipper.prototype.GetMaximaPair","d.Clipper.prototype.ProcessIntersections","BuildIntersectList","FixupIntersectionOrder","ProcessIntersectList","d.Clipper.prototype.BuildIntersectList","IntersectPoint","EdgesAdjacent","d.Clipper.prototype.EdgesAdjacent","IntersectNodeSort","d.Clipper.IntersectNodeSort","d.Clipper.prototype.FixupIntersectionOrder","sort","d.Clipper.prototype.ProcessIntersectList","round","d.Clipper.TopX","d.Clipper.prototype.IntersectPoint","d.Clipper.prototype.ProcessEdgesAtTopOfScanbeam","DoMaxima","d.Clipper.prototype.DoMaxima","ReversePaths","d.Clipper.ReversePaths","reverse","Orientation","d.Clipper.Orientation","PointCount","d.Clipper.prototype.PointCount","d.Clipper.prototype.BuildResult","Array","d.Clipper.prototype.BuildResult2","d.Clipper.prototype.FixupOutPolygon","DupOutPt","d.Clipper.prototype.DupOutPt","GetOverlap","d.Clipper.prototype.GetOverlap","JoinHorz","d.Clipper.prototype.JoinHorz","JoinPoints","d.Clipper.prototype.JoinPoints","GetBounds","d.Clipper.GetBounds","GetBounds2","d.Clipper.prototype.GetBounds2","PointInPolygon","d.Clipper.PointInPolygon","d.Clipper.prototype.PointInPolygon","Poly2ContainsPoly1","d.Clipper.prototype.Poly2ContainsPoly1","FixupFirstLefts1","d.Clipper.prototype.FixupFirstLefts1","ParseFirstLeft","FixupFirstLefts2","d.Clipper.prototype.FixupFirstLefts2","d.Clipper.ParseFirstLeft","d.Clipper.prototype.JoinCommonEdges","UpdateOutPtIdxs","d.Clipper.prototype.UpdateOutPtIdxs","d.Clipper.prototype.DoSimplePolygons","d.Clipper.Area","d.Clipper.prototype.Area","SimplifyPolygon","d.Clipper.SimplifyPolygon","SimplifyPolygons","d.Clipper.SimplifyPolygons","DistanceSqrd","d.Clipper.DistanceSqrd","DistanceFromLineSqrd","d.Clipper.DistanceFromLineSqrd","SlopesNearCollinear","d.Clipper.SlopesNearCollinear","PointsAreClose","d.Clipper.PointsAreClose","ExcludeOp","d.Clipper.ExcludeOp","CleanPolygon","d.Clipper.CleanPolygon","CleanPolygons","d.Clipper.CleanPolygons","Minkowski","d.Clipper.Minkowski","MinkowskiSum","d.Clipper.MinkowskiSum","TranslatePath","d.Clipper.TranslatePath","MinkowskiDiff","d.Clipper.MinkowskiDiff","PolyTreeToPaths","d.Clipper.PolyTreeToPaths","AddPolyNodeToPaths","NodeType","ntAny","d.Clipper.AddPolyNodeToPaths","ntOpen","ntClosed","OpenPathsFromPolyTree","d.Clipper.OpenPathsFromPolyTree","ClosedPathsFromPolyTree","d.Clipper.ClosedPathsFromPolyTree","ClipperOffset","d.ClipperOffset","def_arc_tolerance","m_destPolys","m_srcPoly","m_destPoly","m_normals","m_StepsPerRad","m_miterLim","m_cos","m_sin","m_sinA","m_delta","m_lowest","m_polyNodes","MiterLimit","ArcTolerance","two_pi","d.ClipperOffset.prototype.Clear","d.ClipperOffset.prototype.AddPath","d.ClipperOffset.prototype.AddPaths","FixOrientations","d.ClipperOffset.prototype.FixOrientations","GetUnitNormal","d.ClipperOffset.GetUnitNormal","sqrt","DoOffset","d.ClipperOffset.prototype.DoOffset","acos","sin","cos","OffsetPoint","DoSquare","DoRound","d.ClipperOffset.prototype.Execute","splice","d.ClipperOffset.prototype.OffsetPoint","DoMiter","d.ClipperOffset.prototype.DoSquare","tan","atan2","d.ClipperOffset.prototype.DoMiter","d.ClipperOffset.prototype.DoRound","d.Error","alert","message","JS","AreaOfPolygon","d.JS.AreaOfPolygon","AreaOfPolygons","d.JS.AreaOfPolygons","BoundsOfPath","d.JS.BoundsOfPath","BoundsOfPaths","d.JS.BoundsOfPaths","Clean","d.JS.Clean","Clone","d.JS.Clone","Lighten","d.JS.Lighten","pop","PerimeterOfPath","d.JS.PerimeterOfPath","PerimeterOfPaths","d.JS.PerimeterOfPaths","ScaleDownPath","d.JS.ScaleDownPath","ScaleDownPaths","d.JS.ScaleDownPaths","ScaleUpPath","d.JS.ScaleUpPath","ScaleUpPaths","d.JS.ScaleUpPaths","ExPolygons","d.ExPolygons","ExPolygon","d.ExPolygon","holes","outer","AddOuterPolyNodeToExPolygons","d.JS.AddOuterPolyNodeToExPolygons","ExPolygonsToPaths","d.JS.ExPolygonsToPaths","PolyTreeToExPolygons","d.JS.PolyTreeToExPolygons","CindyJS","waitFor","name","waitCount","error","toStart","startup","data","instance","newInstance","autostart","cindyDontWait","baseDir","cindyJsScriptElement","waitingForLoad","getBaseDir","CindyJS.getBaseDir","scripts","getElementsByTagName","script","match","exec","index","addNewScript","CindyJS.addNewScript","path","onerror","elt","createElement","next","nextSibling","parent","parentElement","insertBefore","appendChild","loadScript","CindyJS.loadScript","onload","names","String","split","obj","shift","_autoLoadingPlugin","autoLoadPlugin","CindyJS.autoLoadPlugin","_pluginRegistry","listeners","nada","ctype","instances","registerPlugin","CindyJS.registerPlugin","apiVersion","pluginName","initCallback","forEach","callback","idCounter","dumpState","CindyJS.dumpState","state","saveState","JSON","stringify","debugState","CindyJS.debugState","map","cfg","config","parse","key","shutdown","CindyJS.newInstance","instanceInvocationArguments","updateCanvasDimensions","canvas","width","csw","clientWidth","height","csh","clientHeight","csctx","setTransform","csport","setMat","trafos","trafo","trname","keys","csscale","scale","translate","apply","drawingstate","initialmatrix","createnewbackup","greset","devicePixelRatio","backingStoreRatio","webkitBackingStorePixelRatio","mozBackingStorePixelRatio","msBackingStorePixelRatio","oBackingStorePixelRatio","backingStorePixelRatio","ratio","canvasWithContainingDiv","div","tagName","firstChild","removeChild","slice","attrs","attributes","attr","value","setAttributeNodeNS","removeAttributeNode","parentNode","replaceChild","position","border","margin","padding","getComputedStyle","getPropertyValue","isCinderellaBeforeVersion","cinderella","version","createCindyNow","startupCalled","waitForPlugins","exclusive","undefined","csconsole","NullConsoleHandler","CindyConsoleHandler","ElementConsoleHandler","csmouse","transform","ports","port","element","getElementById","id","divStyle","fill","background","backgroundColor","isFiniteNumber","grid","csgridsize","tgrid","cstgrid","snap","cssnap","axes","csaxes","canvasname","getContext","setLineDash","csctx.setLineDash","animation","controls","animcontrols","setupAnimControls","speed","accuracy","setSpeed","simaccuracy","statusbar","scriptconf","scriptpat","search","cscode","sname","replace","text","analyse","cscompiled","labelCode","keydown","keytyped","keytype","csgeo","images","geometry","csinit","behavior","csinitphys","img","loadImage","videos","globalInstance","oninit","use","evaluator","use$1","General","wrap","usedFunctions","convexhull3d$1","loadExtraPlugin","colorplot$1","colorplot$2","colorplot$3","colorplot$4","playtone$1","playmelody$1","doneLoadingModule","preload","setAttribute","Image","NaN","ready","live","generation","whenReady","callFunctionNow","tag","callWhenReady","complete","scheduleUpdate","HAVE_METADATA","videoWidth","videoHeight","setupAnimButton","ctrl","button","buttons","loadSvgIcon","setActive","active","remove","speedDrag","event","speedDragging","rect","slider","getBoundingClientRect","speedScale","clientX","clientLeft","speedLo","className","speedHi","speedRange","knob","addAutoCleaningEventListener","speedDown","speedUp","csplay","cspause","csstop","setSpeedKnob","simspeed","skipInit","cb","plugins","modulesToLoad","evaluate","init","setuplisteners","restoreGeo","backup","stateIn","speeds","el","csnames","vx","vy","vz","fx","fy","fz","recalcAll","csanimating","csstopped","stateArrays","points","simtime","simtick","csPhysicsInited","csresetphys","simulationstart","simulationstop","isShutDown","shutdownHooks","GenericConsoleHandler","args","in","this.in","preventNewline","append","createTextNode","out","this.out","err","this.err","this.createTextNode","color","that","cmd","container","innerHTML","body","onkeydown","cmd.onkeydown","evt","keyCode","prog","parse$1","erg","niceprint","scrollTop","scrollHeight","this.append","clear","this.clear","idOrElement","target","type","listener","useCapture","removeEventListener","updatePosition","pos","to","clientY","clientTop","mouse","prevx","prevy","touchUp","activeTouchIDList","changedTouches","gotit","identifier","activeTouchID","down","move","mouseup","manage","preventDefault","MO","MutationObserver","WebKitMutationObserver","mutations","contains","observe","documentElement","disconnect","keylistener","keyEvent","keyup","focus","which","mousedown","mousedrag","mousemove","mouseclick","dropUri","uri","haveText","req","XMLHttpRequest","DONE","status","responseText","oneDone","textDone","files","onreadystatechange","haveHead","getResponseHeader","imgDone","textType","open","send","string","wrapJSON","reported","img.onload","img.onerror","dropped","List","turnIntoCSList","countDown","dropPoint","ondrop","dt","dataTransfer","currentTarget","realVector","file","reader","FileReader","reader.onload","result","readAsText","readAsDataURL","getData","filter","line","touchDown","targetTouches","touchMove","requestAnimFrame","resizeSensor","mkdiv","reset","expand","scrollLeft","shrink","onScroll","scheduled","requestedAnimFrame","doit","delta","simcap","simfactor","time","lab","tick","updateCindy","save","clearRect","matrix","beginPath","strokeStyle","lineWidth","lineCap","tx","moveTo","lineTo","ty","stroke","sqrt3","lineJoin","miterLimit","traceMouseAndScripts","draw_traces","polygons","isshowing","visible","modifs","alpha","fillcolor","fillalpha","size","fillrule","eval_helper","drawpolygon","vertices","conics","isArc","drawarc","filled","df","drawconic","lines","_helper","isAlmostReal","homog","kind","overhang","dashtype","arrow","arrowsize","arrowposition","arrowshape","arrowsides","CSNumber","mult","zz","startpos","conjugate","endpos","real","draw$2","labeled","tmp","lbl","printname","orientedline","scalmult","sign","cross","npos","nposlength","lpos","labelpos","Render2D","makeColor","defaultAppearance","textColor","geoOps","midpoint","drawlabel","handleModifs","lineModifs","drawRaySegment","clip","pt1","pt2","xmin","xmax","ymin","ymax","incidences","pt","isAlmostZero","draw$1","col","noborder","texts","drawgeotext","ifs","dirty","deeplyEqual","mat","IFS","updateParameters","drawImage","restore","evtobj","unicode","charCode","cskey","fromCharCode","actualkey","cskeycode","conicMat2Vec","r0","r1","operator_not_implemented","first","Dict","namespace","getvar","infix_assign","u0","u1","v1","setvar","oper","assigntake","printStackTrace","assigndot","assigncolon","assignlist","comp_equals","v0","bool","imag","comp_notequals","comp_almostequals","evaluateAndVal","isAlmostEqual","almostequals","infix_and","infix_or","infix_add","usage","withUsage","infix_sub","sub","infix_mult","infix_div","isZero","infix_pow","infix_cross","evaluateAndHomog","minCostMatching","hungarianMethod","perms","permutationsFixedList","bc","POSITIVE_INFINITY","bp","j","mkVertex","matched","prev","cost","used","leaf","notincover1","i1","i2","v2","notincover2","matchsize","haspath","empty","eps","res","infix_take","asList","ind","li","v1i","infix_concat","shapeconcat","l0","l1","concat","infix_common","common","shapecommon","infix_remove","shaperemove","infix_append","infix_prepend","prepend","defaultPluralForm","cnt","solveRealQuadratic","hom","s1","s2","defaultTextRendererCanvas","ctx","align","lineHeight","Infinity","row","box","measureText","fillText","imageFromValue","val","hasOwnProperty","readPixelsIndirection","readPixels","getImageData","helpercanvas","exception","rescape","str","ParseError","location","msg","description","Tokenizer","input","re","RegExp","reNextToken","bols","bol","applyOperator","seq","op","lhs","rhs","isSuperscript","precedence","infix","postfix","prefix","bare","sym","subsup","tok","dict","operators","rassoc","end","rawtext","dstDigits","srcDigits","parseRec","tokens","closing","toktype","raw","substring","bra","brackets","closer","ctok","closedBy","pair","lst","expr","fname","functionCallPrecedence","Parser","usedVariables","impl","callStack","Accessor","getField","uobj","getuserData","isNumberVecN","code","parser","infixmap","create","label","frame","join","SvgWriterContext","_path","_defs","_imgcache","_body","_saveStack","_clipIndex","_stroke","_fill","_strokeOpacity","_fillOpacity","globalAlpha","PdfWriterContext","_yPos","_xPos","_extGState","Af255","As255","_objects","_offset","_nextIndex","_xobjects","_pathUsed","_fillAlpha","_strokeAlpha","_globalAlpha","imageToDataURL","mainCanvas","toDataURL","base64Decode","bytes","Uint8Array","alphabet","pngChunks","u32be","offset","chunks","len","subarray","crc","parseColor","spec","cacheImages","toCache","cachedDataURL","responseType","req.onreadystatechange","onloadend","reader.onloadend","response","statusText","padStr","chr","releaseExportedObject","exportedCanvasURL","URL","revokeObjectURL","exportWith","Context","origctx","blob","toBlob","createObjectURL","downloadHelper","getElementAtMouse","mov","adist","diff","gslp","pinned","dx","dy","dist","sc","sdet","normalizeZ","narrow","mid","rad","radius","xx","yy","ref","nn","ln","scaldiv","mover","getNextFreeName","pIndex","actions","tools","activeTool","step","do","success","elements","idx","isElementAtMouse","isPointAtMouse","isLineAtMouse","setElementAtMouse","grabPoint","addElement","grabLine","grabLineOrConic","grabLastPoint","p2","removeElement","tmpPoint","setDefaultAppearance","opName","assert","signature","stateSize","free","addElementNoProof","checkConjectures","setupTraceDrawing","tracedim","tracelength","traceskip","_traces","_traces_index","_traces_tick","pointDefault","pointSize","movable","pointColor","dimDependent","drawtrace","lineDefault","lineSize","lineColor","overhangLine","segmentDefault","overhangSeg","textDefault","textsize","polygonDefault","existingEl","isMovable","movepointscr","geoAliases","macro","geoMacros","expansion","isSet","isArray","argKind","signatureConstraints","totalStateSize","stateLastGood","stateIdx","stateAlloc","stateOut","tracingInitial","initialize","stateInIdx","stateOutIdx","param","isShowing","geoDependantsCache","guessIncidences","onSegment","el1","el2","elm","x1","y1","x2","y2","xm","ym","dd","d12","d1m","d2m","visiblecheck","bold","textbold","italics","textitalics","family","text_fontfamily","fontFamily","factor","drawtext","_bbox","opts","getText","htmlCallback","html","cache","_textCache","inlinebox","font","invisible","removeProperty","textRendererHtml","dock","textCornerNames","corner","screenbounds$0","display","drawIt","lev","elAlpha","dimfactor","condition","newSize","states","stateArrayNames","stateMasterArray","Float64Array","oldStateLastGood","good","stateContinueFromHere","tracingFailed","tracingStateReport","epsInverse","requestRefinement","noMoreRefinements","RefineException","defaultParameterPath","tr","tc","dst","traceLog","currentMouseAndScripts","inMouseMove","traceMover","draw","fullLog","logLength","postMouseHooks","currentMover","previousMover","traceLimit","deps","depSet","arg","last","opMover","parameterPath","originParam","getParamFromState","targetParam","getParamForInput","t2","complex","refining","currentStep","currentParam","stateTmp","putParamToState","currentElement","failed","textContent","getTraceLog","formatTraceLog","Blob","getStateComplexNumber","getStateComplexVector","putStateComplexNumber","putStateComplexVector","tracing2","n1","n2","o1","o2","tracing2core","do1n1","projectiveDistMinScal","do1n2","do2n1","do2n2","do1o2","dn1n2","cost1","cost2","debug","logRow","labelTracing2","realMatrix","isNaN","safety","tracing4","n3","n4","o3","o4","tracing4core","old_el","new_el","min_cost","distMatrix","bestperm","match_cost","odist","ndist","labelTracing4","tracingSesq","newVecs","oldVecs","oldNorms","newNorms","oldMinCost","newMinCost","normSquared","sesquilinearproduct","resCost","anyNaN","labelTracingSesq","tracing2Conics","c1","c2","flattenConicMatrix","buildConicMatrix","applyIncidence","incidentPL","holds","pn","prod","scalproduct","incidentPC","conjectures","commonButton","onEvent","Text","noop","savePos","unwrap","sum","xy","xz","yz","saveDockingInfo","saveGeoElement","attributesToClone","undim","saveGeoState","behaviors","beh","geo","labObjects","behavs","masses","springs","Environment","gravity","mainGeo","simunit","isFinite","iconsToLoad","url","handleStateChange","svg","responseXML","docElt","layers","node","nodeType","Node","ELEMENT_NODE","namespaceURI","localName","getAttribute","serializer","XMLSerializer","layer","serializeToString","encodeURIComponent","icon","evokeCS","parsed","evalcs","isNode","process","nextTick","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","msRequestAnimationFrame","setTimeout","roundingfactor","angleroundingfactor","niceround","CSNumber._helper.niceround","CSNumber.niceprint","niceangle","angleUnit","angleUnitName","TWOPI","PERTWOPI","angleUnits","CSNumber._helper.niceangle","unit","num","realmult","CSNumber.complex","CSNumber.real","zero","one","infinity","nan","CSNumber._helper.input","argmax","CSNumber.argmax","CSNumber.max","CSNumber.min","CSNumber.add","CSNumber.sub","neg","CSNumber.neg","CSNumber.re","im","CSNumber.im","CSNumber.conjugate","CSNumber.round","CSNumber.ceil","CSNumber.floor","CSNumber.mult","CSNumber.realmult","multiMult","CSNumber.multiMult","arr","abs2","CSNumber.abs2","CSNumber.abs","inv","CSNumber.inv","CSNumber.div","ar","ai","br","bi","epsbig","CSNumber.snap","CSNumber.exp","CSNumber.cos","rr","ii","imag1","real1","CSNumber.sin","CSNumber.tan","arccos","CSNumber.arccos","tmp1","arcsin","CSNumber.arcsin","arctan","CSNumber.arctan","t1","arctan2","CSNumber.arctan2","isReal","CSNumber.sqrt","powRealExponent","CSNumber.powRealExponent","CSNumber.log","CSNumber.pow","CSNumber.mod","a1","a2","b1","b2","seed","seedrandom","CSNumber._helper.seedrandom","rand","CSNumber._helper.rand","randnormal","CSNumber._helper.randnormal","isEqual","CSNumber._helper.isEqual","isLessThan","CSNumber._helper.isLessThan","compare","CSNumber._helper.compare","CSNumber._helper.isAlmostEqual","preci","CSNumber._helper.isZero","CSNumber._helper.isAlmostZero","CSNumber._helper.isReal","CSNumber._helper.isAlmostReal","CSNumber._helper.isNaN","CSNumber._helper.isFinite","isAlmostImag","CSNumber._helper.isAlmostImag","z3a","z3b","cub1","cub2","cub3","solveCubic","CSNumber.solveCubic","help","solveCubicHelper","CSNumber._helper.solveCubicHelper","cr","ci","dr","di","acr","aci","t1r","t1i","abr","abi","t3r","t3i","aar","aai","aadr","aadi","bbr","bbi","wr","wi","t2r","t2i","phi","w1i","w1r","xr","xi","yr","yi","zr","zi","List.turnIntoCSList","EMPTY","List.asList","List.realVector","unitvector","List._helper.unitvector","zerovector","idMatrix","List.idMatrix","zeromatrix","flippedidMatrix","List._helper.flippedidMatrix","println","List.println","List.matrix","List.realMatrix","ex","ey","ez","linfty","jj","fundDual","fund","sequence","List.sequence","ct","pairs","List.pairs","triples","List.triples","cycle","List.cycle","consecutive","List.consecutive","List.reverse","directproduct","List.directproduct","List.concat","List.prepend","List.append","List.contains","cc","List.common","bb","List.remove","sort1","List.sort1","List._helper.isEqual","List._helper.isLessThan","List._helper.compare","List.equals","av1","av2","List.almostequals","List._helper.isAlmostReal","List._helper.isAlmostZero","List._helper.isNaN","List.set","erg1","maxval","List.maxval","maxIndex","List.maxIndex","fun","startIdx","sIdx","bestIdx","bestVal","normalizeMax","List.normalizeMax","List.normalizeZ","dehom","List.dehom","normalizeAbs","List.normalizeAbs","List.max","List.min","List.scaldiv","List.scalmult","List.add","List.sub","List.abs2","List.abs","normalizeMaxXX","List.normalizeMaxXX","maxv","recursive","List.recursive","List.re","List.neg","List.im","List.conjugate","transjugate","List.transjugate","transpose","List.round","List.ceil","List.floor","colNumb","List._helper.colNumb","List._helper.isNumberVecN","isNumberVector","List.isNumberVector","isNumberVectorN","List.isNumberVectorN","isNumberMatrix","List.isNumberMatrix","isNumberMatrixMN","List._helper.isNumberMatrixMN","List.scalproduct","List.sesquilinearproduct","List.normSquared","av","productMV","List.productMV","productVM","List.productVM","productMM","List.productMM","aa","List.mult","List.projectiveDistMinScal","sa","sb","np","na","nb","d1","d2","conicDist","List.conicDist","mat1","mat2","vec1","vec2","crossOperator","List.crossOperator","List.cross","crossratio3harm","List.crossratio3harm","acx","det3","bdx","adx","bcx","numer","denom","crossratio3","List.crossratio3","veronese","List.veronese","turnIntoSCList","matrixFromVeronese","List.matrixFromVeronese","det2","List.det2","R1","R2","List.det3","det4m","List.det4m","m00r","m00i","m01r","m01i","m02r","m02i","m03r","m03i","m10r","m10i","m11r","m11i","m12r","m12i","m13r","m13i","a01r","a01i","a02r","a02i","a03r","a03i","a12r","a12i","a13r","a13i","a23r","a23i","b01r","b01i","b02r","b02i","b03r","b03i","b12r","b12i","b13r","b13i","b23r","b23i","eucangle","List.eucangle","tmp2","ca","cd","dv","ang","List.zerovector","List.zeromatrix","vandermonde","List.vandermonde","List.transpose","column","List.column","List.row","adjoint2","List.adjoint2","AA","adjoint3","List.adjoint3","r11","i11","r12","i12","r13","i13","r21","i21","r22","i22","r23","i23","i31","r32","i32","r31","r33","i33","inverse","List.inverse","det","LUP","LUdecomp","ei","LUsolve","linearsolve","List.linearsolve","linearsolveCramer2","linearsolveCramer3","getDiag","List.getDiag","getSubDiag","List.getSubDiag","eig2","List.eig2","trace","bdet","trace2","L2","L1","mroot","eig","List.eig","getEigenvectors","getEv","cslen","QRIteration","QRRes","eigvals","ID","eigenvecs","MM","lastevec","count","sameEigVal","qq","nullS","ceigval","nullSpace","inverseIteration","isAlmostZeroVec","isNormalMatrix","List._helper.isNormalMatrix","List._helper.QRIteration","maxIter","Alen","Id","QQ","mIter","kap","ann","dist1","numDeflations","block","getBlock","blockeigs","dist2","shiftId","QR","QRdecomp","buildBlockMatrix","isUpperTriangular","rank","List.rank","RRQRdecomp","List._helper.isAlmostZeroVec","isLowerTriangular","List._helper.isLowerTriangular","leni","lenj","List._helper.isUpperTriangular","isAlmostId","List._helper.isAlmostId","List.nullSpace","precision","nullRank","vec","isAlmostDiagonal","List._helper.isAlmostDiagonal","List._helper.inverseIteration","shiftinit","qk","toHessenberg","List._helper.toHessenberg","cslen2","absxx","Qk","getHouseHolder","swapEl","List._helper.swapEl","List.RRQRdecomp","preci2","e1","AAA","tA","norms","piv","maxIdx","tau","swapColumn","normxx","List._helper.getHouseHolder","QRgetAlpha","uu","vv","ww","transposeMult","reOrderbyPivots","List._helper.reOrderbyPivots","Rerg","List.QRdecomp","List._helper.swapColumn","List._helper.buildBlockMatrix","mA","nA","List._helper.getBlock","m0","n0","m1","setBlock","List._helper.setBlock","List._helper.transposeMult","List._helper.QRgetAlpha","List.LUdecomp","Ak","Pk","tpos","absAjk","Akk","Ai","LU","TransPos","List.LUsolve","List._helper.LUsolve","LUi","Pi","List.linearsolveCramer2","A1","A2","detA","List.linearsolveCramer3","A3","x3","linearsolveCGNR","List.linearsolveCGNR","transA","linearsolveCG","List.linearsolveCG","alp","Ap","rback","bet","List.det","ret","Aj","k1","temp","LUdet","List.LUdet","List.getField","nil","ofGeos","List.ofGeos","geos","Dict.key","Dict.create","Dict.clone","Dict.put","Dict.get","dflt","kv","Dict.niceprint","boolean","number","term","atomic","variable","list","General.string","General.bool","General.not","General.isLessThan","General.isEqual","General.compareResults","General.compare","order","General.add","General.sub","General.mult","General.div","General.max","General.min","General.wrap","General.unwrap","General.withUsage","General.wrapJSON","put","General.identity","General.deeplyEqual","General.DeepCloneJSON","DeepCloneJSON","myfunctions","postfix_numb_degree","infix_sqrt","sqrt$1","prefix_not","comp_ult","comp_ugt","comp_ge","comp_le","comp_uge","comp_ule","comp_gt","comp_lt","infix_in","infix_nin","comp_notalmostequals","infix_sequence","infix_define","previous","definer","postfix_undefine","infix_semicolon","eval_helper.evaluate","tt","arglist","newvar","pushVstack","cleanVstack","removevar","lastIndexOf","eval_helper.equals","vars","preset","pi","isVariable","namespace.isVariable","namespace.create","namespace.newvar","namespace.removevar","stack","namespace.setvar","undefinedWarning","namespace.getvar","dump","namespace.dump","vstack","namespace.pushVstack","popVstack","namespace.popVstack","namespace.cleanVstack","st","colorhsb","caption","selected","labelled","Accessor.getGeoField","geoname","field","Accessor.setGeoField","setField","Accessor.getField","ax","az","bz","cz","cen","CenterOfConic","checkbox","checked","generalFields","mass","charge","friction","ldiff","getter","Accessor.setField","setter","Accessor.getuserData","userData","Accessor.setuserData","version$0","evaluator.version$0","ver","clearconsole$0","evaluator.clearconsole$0","err$1","evaluator.err$1","varname","errc$1","evaluator.errc$1","print$1","evaluator.print$1","println$1","evaluator.println$1","assert$2","evaluator.assert$2","dump$1","evaluator.dump$1","repeat$2","evaluator.repeat$2","repeat$3","evaluator.repeat$3","lauf","startb","stopb","stepb","while$2","evaluator.while$2","bo","apply$2","evaluator.apply$2","apply$3","evaluator.apply$3","forall$2","evaluator.forall$2","forall$3","evaluator.forall$3","select$2","evaluator.select$2","select$3","evaluator.select$3","flatten$1","evaluator.flatten$1","recurse","level","levels","createvar$1","evaluator.createvar$1","local","evaluator.local","removevar$1","evaluator.removevar$1","release","evaluator.release","regional","evaluator.regional","genList","evaluator.genList","eval_helper.assigntake","what","where","ind1","eval_helper.assigndot","eval_helper.assigncolon","setuserData","tmpObj","eval_helper.assignlist","vals","if$2","evaluator.if$2","if$3","evaluator.if$3","and$2","or$2","xor$2","evaluator.xor$2","not$1","evaluator.not$1","genericListMathGen","eval_helper.genericListMathGen","emptyval","name$3","max$2","evaluator.max$2","max$3","max$1","min$2","evaluator.min$2","min$3","min$1","add$2","sub$2","mult$2","div$2","mod$2","evaluator.mod$2","pow$2","exp$1","evaluator.exp$1","sin$1","evaluator.sin$1","evaluator.sqrt$1","laguerre","eval_helper.laguerre","cs","maxiter","iter","tol","g2","quadratic_roots","eval_helper.quadratic_roots","roots","eval_helper.roots","cs_orig","qroots","roots$1","evaluator.roots$1","autodiff$3","evaluator.autodiff$3","ffunc","xarr","grade","CSad","autodiff","cos$1","evaluator.cos$1","tan$1","evaluator.tan$1","arccos$1","evaluator.arccos$1","arcsin$1","evaluator.arcsin$1","arctan$1","evaluator.arctan$1","arctan2$2","evaluator.arctan2$2","arctan2$1","evaluator.arctan2$1","log$1","evaluator.log$1","recursiveGen","eval_helper.recursiveGen","numOp","listOp","abs_infix","abs$1","random$0","evaluator.random$0","random$1","evaluator.random$1","seedrandom$1","evaluator.seedrandom$1","randomnormal$0","evaluator.randomnormal$0","randominteger$1","evaluator.randominteger$1","randomint$1","randombool$0","evaluator.randombool$0","isreal$1","evaluator.isreal$1","isinteger$1","evaluator.isinteger$1","iseven$1","evaluator.iseven$1","isodd$1","evaluator.isodd$1","iscomplex$1","evaluator.iscomplex$1","isstring$1","evaluator.isstring$1","islist$1","evaluator.islist$1","ismatrix$1","evaluator.ismatrix$1","iscircle$1","evaluator.iscircle$1","isconic$1","evaluator.isconic$1","isline$1","evaluator.isline$1","ispoint$1","evaluator.ispoint$1","isgeometric$1","evaluator.isgeometric$1","isnumbermatrix$1","evaluator.isnumbermatrix$1","isnumbervector$1","evaluator.isnumbervector$1","issun$1","evaluator.issun$1","ismass$1","evaluator.ismass$1","isspring$1","evaluator.isspring$1","isbouncer$1","evaluator.isbouncer$1","isundefined$1","evaluator.isundefined$1","cinderellaAlgoNames","ArcBy3","ConicBy1p4l","ConicBy4p1l","ConicBy5lines","ConicBy2Foci1P","ConicFromPrincipalDirections","Free","PolarOfLine","PolarOfPoint","PointOnSegment","Button","ToggleButton","TrReflectionL","TrReflectionP","TrReflectionC","TrTranslation","TrSimilarity","TrAffine","TransformP","TransformL","TransformSegment","TransformS","TransformPolygon","TransformArc","TransformConic","TransformC","TrMoebiusP","TrMoebiusL","TrMoebiusSegment","TrMoebiusS","TrMoebiusPolygon","TrMoebiusArc","TrMoebiusCircle","TrMoebiusC","TrInverseMoebius","Perp","Para","AngleBisector","IntersectLC","IntersectCirCir","OtherPointOnCircle","algorithm$1","evaluator.algorithm$1","compat","compatibility","inputs$1","evaluator.inputs$1","moveto$2","evaluator.moveto$2","continuefromhere$0","evaluator.continuefromhere$0","matrixrowcolumn$1","evaluator.matrixrowcolumn$1","rowmatrix$1","evaluator.rowmatrix$1","columnmatrix$1","evaluator.columnmatrix$1","submatrix$3","evaluator.submatrix$3","sane","row1","row2","complex$1","evaluator.complex$1","gauss$1","evaluator.gauss$1","cross$2","crossratio$4","evaluator.crossratio$4","a0","a3","v3","para$2","evaluator.para$2","w0","w1","perp$2","evaluator.perp$2","perp$1","evaluator.perp$1","parallel$2","perpendicular$2","perpendicular$1","meet$2","evaluator.meet$2","join$2","evaluator.join$2","dist$2","evaluator.dist$2","dist_infix","point$1","evaluator.point$1","line$1","evaluator.line$1","det$3","evaluator.det$3","det$1","evaluator.det$1","eig$1","evaluator.eig$1","eigenvalues$1","evaluator.eigenvalues$1","rank$1","evaluator.rank$1","kernel$1","evaluator.kernel$1","eigenvectors$1","evaluator.eigenvectors$1","area$3","evaluator.area$3","z0","z1","z2","inverse$1","evaluator.inverse$1","linearsolve$2","evaluator.linearsolve$2","mincostmatching$1","evaluator.mincostmatching$1","costMatrix","nr","nc","matching","take$2","length$1","evaluator.length$1","pairs$1","evaluator.pairs$1","triples$1","evaluator.triples$1","cycle$1","evaluator.cycle$1","consecutive$1","evaluator.consecutive$1","reverse$1","evaluator.reverse$1","directproduct$2","evaluator.directproduct$2","concat$2","common$2","remove$2","append$2","prepend$2","contains$2","evaluator.contains$2","sort$2","evaluator.sort$2","sort$3","evaluator.sort$3","compareResults","sort$1","evaluator.sort$1","set$1","evaluator.set$1","combinations$2","evaluator.combinations$2","pick","current","base","zeromatrix$2","evaluator.zeromatrix$2","zerovector$1","evaluator.zerovector$1","transpose$1","evaluator.transpose$1","row$2","evaluator.row$2","column$2","evaluator.column$2","dict$0","evaluator.dict$0","put$3","evaluator.put$3","get$2","evaluator.get$2","red$1","evaluator.red$1","green$1","evaluator.green$1","blue$1","evaluator.blue$1","gray$1","evaluator.gray$1","grey$1","HSVtoRGB","eval_helper.HSVtoRGB","hue$1","evaluator.hue$1","shapeconvert","eval_helper.shapeconvert","mx","my","pol","shapeop","eval_helper.shapeop","cpr","clip_fillType","subject_fillType","solution_paths","eval_helper.shapecommon","eval_helper.shaperemove","eval_helper.shapeconcat","key$0","evaluator.key$0","keycode$0","evaluator.keycode$0","mouse$0","evaluator.mouse$0","mover$0","evaluator.mover$0","translate$1","evaluator.translate$1","rotate$1","evaluator.rotate$1","rotate","scale$1","evaluator.scale$1","greset$0","evaluator.greset$0","csgstorage","gsave$0","evaluator.gsave$0","gsave","grestore$0","evaluator.grestore$0","grestore","color$1","evaluator.color$1","setcolor","linecolor$1","evaluator.linecolor$1","setlinecolor","pointcolor$1","evaluator.pointcolor$1","setpointcolor","alpha$1","evaluator.alpha$1","setalpha","pointsize$1","evaluator.pointsize$1","setpointsize","linesize$1","evaluator.linesize$1","setlinesize","textsize$1","evaluator.textsize$1","settextsize","playanimation$0","evaluator.playanimation$0","pauseanimation$0","evaluator.pauseanimation$0","stopanimation$0","evaluator.stopanimation$0","text$1","evaluator.text$1","replace$3","evaluator.replace$3","str0","str1","str2","regex","replace$2","evaluator.replace$2","getReplStr","from","keyind","rules","srep","substring$3","evaluator.substring$3","tokenize$2","evaluator.tokenize$2","autoconvert","fl","tail","token","indexof$2","evaluator.indexof$2","indexof$3","evaluator.indexof$3","evaluator.parse$1","unicode$1","evaluator.unicode$1","codepoint","fromCodePoint","cp","international$1","evaluator.international$1","international$2","evaluator.international$2","trl","translations","language","entry","pluralForm","_pluralFormFunction","currentlanguage$0","evaluator.currentlanguage$0","basismap","eval_helper.basismap","map$8","evaluator.map$8","w2","w3","m2","map$6","evaluator.map$6","inf","map$4","evaluator.map$4","map$2","evaluator.map$2","pointreflect$1","evaluator.pointreflect$1","linereflect$1","evaluator.linereflect$1","extractPointVec","eval_helper.extractPointVec","ok","polygon$1","evaluator.polygon$1","extractPoint","circle$2","evaluator.circle$2","screen$0","evaluator.screen$0","transf","px","py","halfplane$2","evaluator.halfplane$2","foot","sx","sy","pp1","pp2","pp3","pp4","element$1","evaluator.element$1","all$1","eval_helper.all$1","allpoints$0","evaluator.allpoints$0","allpoints$1","evaluator.allpoints$1","allmasses$0","evaluator.allmasses$0","allmasses$1","evaluator.allmasses$1","allsprings$0","evaluator.allsprings$0","allsprings$1","evaluator.allsprings$1","alllines$0","evaluator.alllines$0","alllines$1","evaluator.alllines$1","allsegments$0","evaluator.allsegments$0","allsegments$1","evaluator.allsegments$1","allconics$0","evaluator.allconics$0","allconics$1","evaluator.allconics$1","allcircles$0","evaluator.allcircles$0","allcircles$1","evaluator.allcircles$1","allelements$0","evaluator.allelements$0","allelements$1","evaluator.allelements$1","elementsatmouse$0","evaluator.elementsatmouse$0","distMouse","pz","getPerp","fp","inciPC","perp","dists","sect","inciPP","pp","farpoint","startPoint","endPoint","viaPoint","nor","elts","incidences$1","createpoint$2","evaluator.createpoint$2","create$3","evaluator.create$3","defs","def","javascript$1","evaluator.javascript$1","Function","evaluator.use$1","defineFunction","arity","getInitialMatrix","setTextRenderer","handlerCanvas","handlerHtml","textRendererCanvas","getImage","lazy","cdyUpdate","getMyfunction","format$2","evaluator.format$2","fmtNumber","toFixed","dec","fmt","Date.now","getTime","epoch","timestamp$0","evaluator.timestamp$0","seconds$0","evaluator.seconds$0","resetclock$0","evaluator.resetclock$0","time$0","evaluator.time$0","getHours","getMinutes","getSeconds","getMilliseconds","date$0","evaluator.date$0","getFullYear","getMonth","getDate","simulationtime$0","evaluator.simulationtime$0","settimeout$2","evaluator.settimeout$2","delay","formatForWebGL","eval_helper.formatForWebGL","generateWebGL$2","evaluator.generateWebGL$2","varlist","plotvars","compileToWebGL$1","evaluator.compileToWebGL$1","setsimulationspeed$1","evaluator.setsimulationspeed$1","setsimulationaccuracy$1","evaluator.setsimulationaccuracy$1","env","setsimulationquality$1","evaluator.setsimulationquality$1","qual","errorbound","lowestdeltat","slowdownfactor","activeButton","createtool$3","evaluator.createtool$3","modif","xref","yref","space","toolbar","reference","flipped","ncols","nrows","rowElt","click","tooltip","spacer","dropped$0","evaluator.dropped$0","droppoint$0","evaluator.droppoint$0","parsecsv$1","evaluator.parsecsv$1","mcon","delim","md","delimiter","lastIndex","itm","load$2","evaluator.load$2","load$3","evaluator.load$3","arg0","eval_helper.extractPoint","evaluator.draw$1","drawshape","drawline","pointModifs","drawpoint","evaluator.draw$2","drawsegcore","drawcircle$2","evaluator.drawcircle$2","drawcircle","arcHelper","eval_helper.arcHelper","arc","fillcircle$2","evaluator.fillcircle$2","drawarc$3","evaluator.drawarc$3","fillarc$3","evaluator.fillarc$3","eval_helper.drawarc","conicModifs","preDrawCurve","abcdet","con","ConicBy5","zer","startAngle","endAngle","arcDist","cclock","fillStyle","closePath","ptA","ptB","ptC","dAC","dBC","crossr","eval_helper.drawcircle","drawconic$1","evaluator.drawconic$1","half","tarr","eval_helper.drawconic","conicMatrix","c20","c11","c10","c02","c01","c00","link","verticalBoundary","vertical","mkp","sol","discr","k00","k10","k20","tpt","horizontalBoundary","k01","k02","doBoundary","bd","bMin","bMax","sign1","sign2","signMid","center","dist0","boundary","minx","maxx","miny","maxy","refine","depth","ux","uy","uz","cx","k11","cy","maxError","area","hx","hy","dMd","dMh","hMh","y3","quadraticCurveTo","lsize","tmat","toMat","dummy","startIndex","best","pt3","drawall$1","evaluator.drawall$1","pointAndLineModifs","connect$1","evaluator.connect$1","drawpoly$1","evaluator.drawpoly$1","fillpoly$1","evaluator.fillpoly$1","drawpolygon$1","evaluator.drawpolygon$1","fillpolygon$1","evaluator.fillpolygon$1","eval_helper.drawpolygon","drawpolyshape","polys","drawpoly","fillColor","rows","eval_helper.drawtext","textModifs","xOffset","yOffset","txt","katex","drawtext$2","evaluator.drawtext$2","drawtable$2","evaluator.drawtable$2","textcolor","hh","eval_helper.drawshape","shape","fillshape","eval_helper.fillshape","clipshape","eval_helper.clipshape","fill$1","evaluator.fill$1","clip$1","evaluator.clip$1","plot$1","evaluator.plot$1","plot$2","evaluator.plot$2","canbedrawn","drawstroke","xb","yb","xx2","yy2","xa","ya","xx1","yy1","stroking","drawrec","drawable1","drawable2","minstep","connectb","runv","ergmid","drawablem","drawit","pxlstep","mid1","ergmid1","mid2","ergmid2","dd1","dd2","steps","connect","xo","vo","plotX$1","evaluator.plotX$1","linecolor","eval_helper.plotvars","merge","els","l2","clrscr$0","evaluator.clrscr$0","repaint$0","evaluator.repaint$0","evaluator.screenbounds$0","pt4","createimage$3","evaluator.createimage$3","clearimage$1","evaluator.clearimage$1","image","localcanvas","cw","ch","localcontext","canvas$4","evaluator.canvas$4","pta","ptb","diffx","diffy","ptcx","ptcy","ptdx","ptdy","cva","cvc","cvd","x11","x12","x21","x22","x31","x32","a4","a5","a6","backupctx","canvas$5","evaluator.canvas$5","ptc","cvb","y11","y32","screenresolution$0","evaluator.screenresolution$0","layer$1","evaluator.layer$1","imagesize$1","evaluator.imagesize$1","imageready$1","evaluator.imageready$1","drawimage$2","evaluator.drawimage$2","drawimg1","scax","scay","flipx","flipy","rot","angle","rotation","scalex","scaley","initm","ixx1","iyy1","viewScale","drawTo","drawimg3","aspect","drawimage$3","drawimage$4","allimages$0","evaluator.allimages$0","cameravideo$0","evaluator.cameravideo$0","makeconstraints","advanced","ideal","audio","maximal","constraints","resolution","heightorratio","isInteger","aspectRatio","openVideoStream","gum","mediaDevices","getUserMedia","failure","webkitGetUserMedia","mozGetUserMedia","msGetUserMedia","stream","srcObject","playvideo$1","evaluator.playvideo$1","pausevideo$1","evaluator.pausevideo$1","imagergba$3","evaluator.imagergba$3","rgba","imagergb$3","imagergba$4","evaluator.imagergba$4","coord","interpolate","repeat","xf","yf","pixels","p10","p01","p11","imagergb$4","evaluator.imagergb$4","readpixels$1","evaluator.readpixels$1","operatorLevels","deg","take","functionCall","mul","eq","ne","lt","gt","le","ge","aeq","ane","alt","agt","ale","age","nin","assign","define","undefine","bdefine","prefixOperators","prefixOnly","postfixOnly","flexfix","operatorSymbols","initializeOperators","symbols","descr","symbol","reNumber","inTokenWhitespace","supNum","subNum","unicodeLetters","hiRanges","fst","reIdentifier","reSpace","tokenTypes","sanityCheck","advanceBy","Tokenizer.prototype.advanceBy","advanceTo","Tokenizer.prototype.advanceTo","curPos","Tokenizer.prototype.curPos","nextInternal","Tokenizer.prototype.nextInternal","pos1","pos2","Tokenizer.prototype.next","reComment","cvoid","postprocess","Parser.prototype.postprocess","Parser.prototype.parse","module.exports.parse","playsin$1","evaluator.playsin$1","linenumber","freq","CSad.printArr","ttemp","ttempi","printimag","CSad.zero","CSad.number","x0","CSad.variable","CSad.add","CSad.sub","CSad.mult","ges","CSad.pow","root","CSad.root","rOne","inner","csK","CSad.findFirstNoneZero","idxf","idxg","myEps","CSad.div","indxs","findFirstNoneZero","CSad.exp","CSad.log","CSad.sincos","ergsin","ergcos","sumcos","sumsin","insin","incos","numk","inboth","sinsave","cossave","CSad.sin","sincos","CSad.cos","CSad.faculty","CSad.diff","CSad.adevaluate","ergarr","facs","faculty","CSad.autodiff","adevaluate","Render2D.handleModifs","handlers","dashing","unSetDash","colorraw","fillcolorraw","psize","isArrow","arrowSides","headlen","arrowShape","arrowShapes","handler","modifHandlers","pointsize","linesize","pointcolor","pointcolorraw","linecolorraw","textcolorraw","black","dashpattern","pat","setDash","dashTypes","si","deprecated","allowed","x_offset","y_offset","Render2D.makeColor","Render2D.preDrawCurve","mozFillRule","close","clipSegment","Render2D.clipSegment","clipPoints","clipLineCore","q1","q2","dot1","dot2","Render2D.drawsegcore","draw_arrowhead","tipx","tipy","rx","ry","lx","ly","endpoint1x","endpoint1y","endpoint2x","endpoint2y","overhang1","overhang2","overhang1x","overhang1y","overhang2x","overhang2y","hs","pos_fac1","pos_fac2","tip1x","tip1y","tip2x","tip2y","Render2D.drawpoint","Render2D.clipLineCore","SQRT1_2","xMin","xMax","yMax","yMin","ul","ur","ll","lr","clipLine","Render2D.clipLine","Render2D.drawline","Render2D.drawRaySegment","norm","Render2D.setDash","pattern","webkitLineDash","mozDash","Render2D.unSetDash","_pathcmd","bezierCurveTo","dir","covered","largeArc","_cmd","_attrs","_transform","_setAlpha","butt","miter","bevel","limit","_kappa","_usePath","combined","_png","dataURL","chunk","ihdr","bitDepth","colorType","grayscale","compressionMethod","filterMethod","interlaceMethod","smask","numColors","idats","pako","inflate","Inflate","bytesPerComponent","colorBytesPerPixel","rgb","mask","deflate","_strm","Type","Subtype","Width","Height","ColorSpace","BitsPerComponent","Filter","DecodeParms","_dict","Predictor","Colors","Columns","_obj","xobj","Name","SMask","Length","unshift","mediaBox","Pages","Kids","Count","MediaBox","Contents","Resources","ProcSet","XObject","ExtGState","buf","objects","byIndex","trailer","Size","Root","exportSVG","globalInstance.exportSVG","exportPDF","globalInstance.exportPDF","exportPNG","globalInstance.exportPNG","href","download","Delete","Move","normalizedmid","midx","midy","vlength","refy","Point","Mid","Circle","Compass","Line","Segment","Parallel","Orthogonal","Intersection","csport.clone","constructor","csport.reset","csport.from","csport.to","csport.toMat","dumpTrafo","csport.dumpTrafo","csport.setMat","scaleAndOrigin","csport.scaleAndOrigin","originX","originY","visibleRect","csport.visibleRect","applyMat","csport.applyMat","csport.translate","csport.rotate","csport.scale","csport.gsave","csport.grestore","csport.greset","csport.createnewbackup","makecolor","csport.makecolor","rv","gv","bv","csport.setcolor","co","csport.setlinecolor","settextcolor","csport.settextcolor","csport.setpointcolor","csport.setalpha","al","csport.setpointsize","csport.setlinesize","csport.settextsize","enableTraceLog","addTraceHook","guessIncidences.P","conjecture","guessIncidences.L","guessIncidences.C","RandomLine","geoOps.RandomLine.updatePosition","FreeLine","geoOps.FreeLine.initialize","initializeLine","geoOps.FreeLine.getParamForInput","geoOps.FreeLine.getParamFromState","geoOps.FreeLine.putParamToState","geoOps.FreeLine.updatePosition","RandomPoint","geoOps.RandomPoint.updatePosition","geoOps.Join.updatePosition","geoOps.Segment.updatePosition","setSegmentPos","geoOps.Segment.setSegmentPos","startend","Meet","geoOps.Meet.updatePosition","geoOps.Meet.visiblecheck","geoOps._helper.midpoint","geoOps.Mid.updatePosition","geoOps.Perp.updatePosition","geoOps.Para.updatePosition","Horizontal","geoOps.Horizontal.updatePosition","HorizontalLine","geoOps.HorizontalLine.initialize","geoOps.HorizontalLine.getParamForInput","geoOps.HorizontalLine.getParamFromState","geoOps.HorizontalLine.putParamToState","geoOps.HorizontalLine.updatePosition","Vertical","geoOps.Vertical.updatePosition","VerticalLine","geoOps.VerticalLine.initialize","geoOps.VerticalLine.getParamForInput","geoOps.VerticalLine.getParamFromState","geoOps.VerticalLine.putParamToState","geoOps.VerticalLine.updatePosition","LineByFixedAngle","geoOps.LineByFixedAngle.initialize","geoOps.LineByFixedAngle.updatePosition","Through","geoOps.Through.initialize","geoOps.Through.getParamForInput","geoOps.Through.getParamFromState","geoOps.Through.putParamToState","geoOps.Through.updatePosition","set_angle","geoOps.Through.set_angle","ss","set_slope","geoOps.Through.set_slope","geoOps.Free.initialize","initializePoint","geoOps.Free.getParamForInput","geoOps.Free.getParamFromState","geoOps.Free.putParamToState","geoOps.Free.updatePosition","projectPointToLine","geoOps._helper.projectPointToLine","point","PointOnLine","geoOps.PointOnLine.initialize","other","geoOps.PointOnLine.updatePosition","isMover","newPoint","newLine","oldPoint","tmpIn","realPoint","realLine","circle","CircleMP","newCandidates","oldAntipode","pointReflection","geoOps.PointOnLine.getParamForInput","snapPointToLine","geoOps.PointOnLine.getParamFromState","geoOps.PointOnLine.putParamToState","PointOnCircle","geoOps.PointOnCircle.initialize","CenterOfCircle","diameter","candidates","d0","geoOps.PointOnCircle.putParamToState","geoOps.PointOnCircle.getParamFromState","geoOps.PointOnCircle.getParamForInput","oldparam","oldpos","olddir","oldSign","geoOps.PointOnCircle.parameterPath","sp","uc","tc2","uc2","tuc","geoOps.PointOnCircle.updatePosition","antipodalPoint","geoOps.OtherPointOnCircle.signatureConstraints","geoOps.OtherPointOnCircle.updatePosition","geoOps.PointOnSegment.initialize","geoOps.PointOnSegment.getParamForInput","seg","geoOps.PointOnSegment.getParamFromState","geoOps.PointOnSegment.putParamToState","geoOps.PointOnSegment.updatePosition","far","projectPointToCircle","geoOps._helper.projectPointToCircle","cir","isec","PointOnArc","geoOps.PointOnArc.signatureConstraints","geoOps.PointOnArc.initialize","geoOps.PointOnArc.getParamForInput","crh","geoOps.PointOnArc.getParamFromState","geoOps.PointOnArc.putParamToState","geoOps.PointOnArc.updatePosition","AI","BI","CI","M2x3","M3x2","M2x3c","M2x2","v2x1","ab","conicOtherIntersection","geoOps._helper.CenterOfCircle","geoOps._helper.CenterOfConic","adj","geoOps.CenterOfConic.updatePosition","geoOps._helper.CircleMP","mz","tang","la","geoOps.CircleMP.updatePosition","CircleMr","geoOps.CircleMr.initialize","geoOps.CircleMr.getParamForInput","geoOps.CircleMr.getParamFromState","geoOps.CircleMr.putParamToState","geoOps.CircleMr.updatePosition","sr","sr2","ScaledCircleMrr","set_radius","geoOps.CircleMr.set_radius","geoOps._helper.ScaledCircleMrr","vxy","geoOps.Compass.updatePosition","aZ","bZ","mZ","getConicType","geoOps._helper.getConicType","adet","geoOps._helper.ConicBy5","v23","v14","v12","v34","conicFromTwoDegenerates","geoOps._helper.conicFromTwoDegenerates","deg1","deg2","geoOps.ConicBy5.updatePosition","FreeConic","geoOps.FreeConic.initialize","inputConic","geoOps.FreeConic.getParamForInput","geoOps.FreeConic.getParamFromState","geoOps.FreeConic.putParamToState","geoOps.FreeConic.updatePosition","set_matrix","geoOps.FreeConic.set_matrix","geoOps._helper.buildConicMatrix","geoOps._helper.flattenConicMatrix","splitDegenConic","geoOps._helper.splitDegenConic","adj_mat","beta","zeros","lam","lg","lh","geoOps._helper.inputConic","SelectConic","geoOps.SelectConic.initialize","results","geoOps.SelectConic.updatePosition","geoOps._helper.ConicBy4p1l","bl","cl","dl","bcd","abd","acd","abc","k2","geoOps.ConicBy4p1l.updatePosition","ConicBy3p2l","geoOps._helper.ConicBy3p2l","gh","gl","hl","m3","a3a","b3a","signs","b3","p1","p3","p4","mm","geoOps.ConicBy3p2l.updatePosition","ConicBy2p3l","geoOps.ConicBy2p3l.updatePosition","dual","geoOps.ConicBy1p4l.updatePosition","ConicParabolaPL","geoOps.ConicParabolaPL.updatePosition","Fx","Fy","Fz","dz","Fz2","dx2","dy2","Fzdz","nFz","dx2pdy2","geoOps.ConicBy2Foci1P.updatePosition","PP","II","JJ","har","coHarmonic","e2","lII","lJJ","lF1","lF2","co1","co2","three","ConicBy2Pol1P","geoOps.ConicBy2Pol1P.updatePosition","sm","rm","AC","BC","M1","M2","M3","Ab","Ba","ConicBy2Pol1L","geoOps.ConicBy2Pol1L.updatePosition","aA","aB","bA","bB","cA","cB","conic1Pol3Inc","geoOps._helper.conic1Pol3Inc","ABC","BD","AD","aD","ConicBy1Pol3P","geoOps.ConicBy1Pol3P.updatePosition","ConicBy1Pol3L","geoOps.ConicBy1Pol3L.updatePosition","ConicBy1Pol2P1L","geoOps.ConicBy1Pol2P1L.updatePosition","aC","dA","dB","dC","AB","ABAC","res1","res2","ConicBy1Pol1P2L","geoOps.ConicBy1Pol1P2L.updatePosition","aAA","aAB","aBB","cAA","cAB","cBB","dAA","dAB","dBB","fa","fc","fd","cv","geoOps._helper.coHarmonic","poi","ix","jx","iy","jy","sqj","sqi","mui","tauj","out1","out2","ConicInSquare","geoOps.ConicInSquare.updatePosition","m2Tucm2","m1a","mC","geoOps.ConicBy5lines.updatePosition","erg_temp","geoOps.ConicFromPrincipalDirections.updatePosition","P1","P2","P3","P1M","perpDirP1M","vP1M","vPP1MTP1","vPP1MTP3","CircleBy3","geoOps.CircleBy3.updatePosition","geoOps.ArcBy3.updatePosition","geoOps.ArcBy3.initialize","geoOps.PolarOfPoint.updatePosition","conic","geoOps.PolarOfLine.updatePosition","dualMatrix","geoOps.AngleBisector.updatePosition","nm","geoOps._helper.IntersectLC","maxidx","a12","a21","a22","a11","erg2","geoOps.IntersectLC.updatePosition","OtherIntersectionCL","geoOps.OtherIntersectionCL.updatePosition","geoOps.IntersectCirCir.updatePosition","line1","ct1","line2","ct2","OtherIntersectionCC","geoOps.OtherIntersectionCC.updatePosition","IntersectConicConic","geoOps._helper.IntersectConicConic","B1","B2","B3","c3","c0","Aabs2","Babs2","myeps","CDeg1","CDeg2","sols","d01","d02","sol1","sol2","lines1","l11","l12","lines2","l21","l22","geoOps.IntersectConicConic.updatePosition","SelectP","geoOps.SelectP.initialize","geoOps.SelectP.updatePosition","SelectL","geoOps.SelectL.initialize","geoOps.SelectL.updatePosition","moebiusStep","geoOps._helper.moebiusStep","ay","bx","by","d3","d4","TrMoebius","geoOps.TrMoebius.updatePosition","mB","mAa","moebius","anti","moebiusPair","geoOps._helper.moebiusPair","flip","identity","mats","inverseMoebius","geoOps._helper.inverseMoebius","geoOps.TrInverseMoebius.updatePosition","geoOps.TrMoebiusP.updatePosition","geoOps._helper.TrMoebiusP","Tr","geoOps.TrMoebiusL.updatePosition","getRandLine","rline","geoOps.TrMoebiusS.updatePosition","geoOps.TrMoebiusC.signatureConstraints","geoOps.TrMoebiusC.updatePosition","pts1","pts2","geoOps.TrMoebiusArc.signatureConstraints","geoOps.TrMoebiusArc.updatePosition","Arc","trBuildMatrix","geoOps._helper.trBuildMatrix","oneStep","TrProjection","geoOps.TrProjection.initialize","isEuclidean","geoOps.TrProjection.updatePosition","geoOps.TrAffine.initialize","geoOps.TrAffine.updatePosition","ps1","ps2","ps1t","ps2t","geoOps.TrSimilarity.initialize","geoOps.TrSimilarity.updatePosition","geoOps.TrTranslation.initialize","geoOps.TrTranslation.updatePosition","geoOps.TrReflectionP.initialize","geoOps.TrReflectionP.updatePosition","geoOps.TrReflectionL.initialize","geoOps.TrReflectionL.updatePosition","pm","txy","TrReflectionS","geoOps.TrReflectionC.signatureConstraints","geoOps.TrReflectionC.updatePosition","TrInverse","geoOps.TrInverse.initialize","geoOps.TrInverse.updatePosition","geoOps.TransformC.updatePosition","geoOps.TransformArc.signatureConstraints","geoOps.TransformArc.updatePosition","geoOps.TransformP.updatePosition","geoOps.TransformL.updatePosition","geoOps.TransformS.updatePosition","geoOps.TransformPolygon.updatePosition","TrComposeTrTr","geoOps.TrComposeTrTr.initialize","geoOps.TrComposeTrTr.updatePosition","composeMtMt","geoOps._helper.composeMtMt","f1","f2","f3","addsub","subadd","euc2moeb","geoOps._helper.euc2moeb","TrComposeMtMt","geoOps.TrComposeMtMt.updatePosition","TrComposeTrMt","geoOps.TrComposeTrMt.signatureConstraints","geoOps.TrComposeTrMt.updatePosition","TrComposeMtTr","geoOps.TrComposeMtTr.signatureConstraints","geoOps.TrComposeMtTr.updatePosition","geoOps._helper.pointReflection","geoOps._helper.conicOtherIntersection","mb","bmb","amb","amb2","bmba","amb2b","Dist","geoOps.Dist.updatePosition","Angle","geoOps.Angle.initialize","geoOps.Angle.updatePosition","ap","winding","geoOps.Text.initialize","geoOps.Text.getParamForInput","geoOps.Text.getParamFromState","geoOps.Text.putParamToState","Calculation","geoOps.Calculation.initialize","calculation","geoOps.Calculation.getText","Equation","geoOps.Equation.initialize","geoOps.Equation.getText","Evaluate","geoOps.Evaluate.initialize","geoOps.Evaluate.getText","Plot","geoOps.Plot.initialize","geoOps.Plot.getText","geoOps.Button.initialize","set_fillcolor","geoOps.Button.set_fillcolor","geoOps.ToggleButton.initialize","pressed","EditableText","geoOps.EditableText.initialize","textbox","minwidth","blur","geoOps.EditableText.getText","get_currenttext","geoOps.EditableText.get_currenttext","get_text","geoOps.EditableText.get_text","set_currenttext","geoOps.EditableText.set_currenttext","set_text","get_val","set_val","geoOps._helper.initializePoint","sz","geoOps._helper.initializeLine","Poly","geoOps.Poly.updatePosition","geoOps.IFS.signatureConstraints","geoOps.IFS.initialize","params","worker","Worker","onmessage","worker.onmessage","buffer","imgBytes","Uint8ClampedArray","imgPtr","imgData","ImageData","putImageData","postMessage","terminate","geoOps.IFS.updatePosition","geoOps.IFS.updateParameters","supersampling","systems","trs","prob","px2hom","trel","view","elLike","moeb","probSetter","geoOps.IFS.probSetter","geoOps._helper.snapPointToLine","projPos","newpos","geoMacros.CircleMFixedr","geoMacros.CircleByFixedRadius","geoMacros.IntersectionConicLine","geoMacros.angleBisector","geoMacros.Transform","Mt","akind","geoMacros.TrReflection","geoMacros.TrCompose","globalInstance.saveState","lab.tick","deltat","tick1","simulationstep","lab.tick1","mydeltat","proceeded","actualdelta","oneRKStep","restorePosition","doCollisions","calculateForces","moveToFinalPos","lab.restorePosition","restorePos","lab.doCollisions","lab.calculateForces","lab.moveToFinalPos","lab.oneRKStep","initRKTimeStep","initRK","storePosition","setToTimestep","proceedMotion","resetForces","calculateDelta","calculateError","sqDist","recallInitialPosition","recallPosition","madeIt","elem","vel","lnfrict","limitspeed","fixed","internalmove","mtype","mvx","mvy","mvz","dvx","dvy","dvz","midz","lz","yo","zo","vxo","vyo","vzo","setVelocity","bvv","limitSpeed","kineticEnergy","tip","strength","namea","nameb","ma","amplitude","phase","stype","readOnInit","lact","mytype","l3","springstrength","labObjects.det","xdamp","ydamp","motorchanger","x1o","y1o","x2o","y2o","nx","ny","mxo","myo","vvx","vvy","ss1","ss2","charges","balls","newton","ballInteractionBoosting","createCindy"],
+ "mappings":"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CACjL,GADiL,CAC7K,GAD6K,CACzK,GADyK,CACrK,GADqK,CACjK,GADiK,CAC7J,GAD6J,CACzJ,GADyJ,CACrJ,GADqJ,CACjJ,GADiJ,CAC7I,GAD6I,CACzI,GADyI,CACrI,GADqI,CACjI,GADiI,CAC7H,GAD6H,CACzH,GADyH,CACrH,GADqH,CACjH,GADiH,CAC7G,GAD6G,CACzG,GADyG,CACrG,GADqG,CACjG,GADiG,CAC7F,GAD6F,CACzF,GADyF,CACrF,GADqF,CACjF,GADiF,CAC7E,GAD6E,CACzE,GADyE,CACrE,GADqE,CACjE,GADiE,CAC7D,GAD6D,CACzD,GADyD,CACrD,GADqD,CACjD,GADiD,CAC7C,GAD6C,CACzC,GADyC,CACrC,GADqC,CACjC,GADiC,CAC7B,GAD6B,CACzB,GADyB,CACrB,GADqB,CACjB,GADiB,CACb,GADa,CACT,GADS,CACL,GADK,CACD,GADC,CACG,GADH,CACO,GADP,CACW,GADX,CACe,GADf,CACmB,GADnB,CACuB,GADvB,CAC2B,GAD3B,CAC+B,GAD/B,CACmC,GADnC,CACuC,GADvC,CAC2C,GAD3C,CAC+C,GAD/C,CACmD,GADnD,CACuD,GADvD,CAC2D,GAD3D,CAC+D,GAD/D,CACmE,GADnE,CACuE,GADvE,CAC2E,GAD3E,CAC+E,GAD/E,CACmF,GADnF,CACuF,GADvF,CAC2F,GAD3F,CAC+F,GAD/F,CACmG,GADnG,CACuG,GADvG,CAC2G,GAD3G,CAC+G,GAD/G,CACmH,GADnH,CACuH,GADvH,CAC2H,GAD3H,CAC+H,GAD/H;AACmI,GADnI,CACuI,GADvI,CAC2I,GAD3I,CAlBtQ,CAmBsZC,GAAE,QAAFA,CAAWD,CAAA,CAAEA,CAAA3K,OAAF,CAAW,CAAX,CAAcuC,EAAAsD,UAAAgF,UAAA,CAAsBC,QAAQ,CAACpN,CAAD,CAAG,CAAC,MAAOmF,KAAAC,MAAA,CAAWD,IAAAkI,IAAX,CACne,IAAAnH,GADme,CAC3df,IAAAmI,IAAA,CAAStN,CAAT,CAD2d,CAAR,CACrc6E,EAAAsD,UAAA2D,QAAA,CAAoByB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"}
diff --git a/graphics/ketcindy/ketcindyfolder/scripts/ketcindyjs/CindyJS.css b/graphics/ketcindy/ketcindyfolder/scripts/ketcindyjs/CindyJS.css
new file mode 100644
index 0000000000..2fdefb34c4
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/scripts/ketcindyjs/CindyJS.css
@@ -0,0 +1,121 @@
+.CindyJS-toolbar button, .CindyJS-animbuttons button, .CindyJS-button button, .CindyJS-button label {
+ background-color: #bfc4d0;
+ border: 1px solid #d0d0d0;
+ box-shadow: inset 1px 1px 2px #fff, inset -1px -1px 2px #aaa;
+ outline: none; }
+
+.CindyJS-toolbar button:active, .CindyJS-animbuttons button:active, .CindyJS-toolbar button.CindyJS-active, .CindyJS-animbuttons button.CindyJS-active, .CindyJS-button button:active, .CindyJS-button label:active, .CindyJS-button input[type=checkbox]:checked + label {
+ background-color: #aaafbb;
+ box-shadow: inset 1px 1px 2px #999, inset -1px -1px 2px #ccc; }
+
+.CindyJS-toolbar, .CindyJS-animbuttons {
+ line-height: 0px; }
+ .CindyJS-toolbar button, .CindyJS-animbuttons button {
+ display: inline-block;
+ margin: 0px;
+ padding: 0px; }
+ .CindyJS-toolbar button:focus, .CindyJS-animbuttons button:focus {
+ border-color: #06f; }
+ .CindyJS-toolbar img, .CindyJS-animbuttons img {
+ margin: 0px;
+ border: none;
+ display: block; }
+
+.CindyJS-widget {
+ overflow: hidden;
+ z-index: 0; }
+ .CindyJS-widget canvas {
+ z-index: 1; }
+ .CindyJS-widget .CindyJS-baseline {
+ margin: 0px;
+ padding: 0px;
+ border: none;
+ position: absolute;
+ white-space: nowrap;
+ margin-top: -1000px; }
+ .CindyJS-widget .CindyJS-baseline > img {
+ margin: 0px;
+ padding: 0px;
+ border: none;
+ display: inline;
+ position: static;
+ vertical-align: baseline;
+ visibility: hidden;
+ margin-right: -1px; }
+ .CindyJS-widget .CindyJS-baseline .CindyJS-button {
+ display: inline-block; }
+ .CindyJS-widget .CindyJS-button {
+ position: relative;
+ z-index: 2; }
+ .CindyJS-widget .CindyJS-toolbar, .CindyJS-widget .CindyJS-animbuttons {
+ position: absolute; }
+ .CindyJS-widget .CindyJS-toolbar button, .CindyJS-widget .CindyJS-animbuttons button {
+ position: relative;
+ z-index: 3; }
+ .CindyJS-widget .CindyJS-animspeed {
+ position: relative;
+ z-index: 3; }
+ .CindyJS-widget .CindyJS-animcontrols {
+ bottom: 5px;
+ left: 5px; }
+
+.CindyJS-button input[type=checkbox] {
+ position: absolute;
+ left: -10000px; }
+
+.CindyJS-button button, .CindyJS-button label {
+ margin: -6px -7px;
+ padding: 5px 6px;
+ border-radius: 4px; }
+
+.CindyJS-button button:focus, .CindyJS-button input[type=checkbox]:focus + label {
+ box-shadow: 0px 0px 3px #06f, inset 1px 1px 2px #fff, inset -1px -1px 2px #aaa; }
+
+.CindyJS-button button:focus:active, .CindyJS-button input[type=checkbox]:focus:checked + label {
+ background-color: #aaafbb;
+ box-shadow: 0px 0px 3px #06f, inset 1px 1px 2px #999, inset -1px -1px 2px #ccc; }
+
+.CindyJS-editabletext {
+ border: 1px solid #000;
+ margin: -4px -4px -1px;
+ padding: 4px 4px 1px; }
+ .CindyJS-editabletext:focus {
+ box-shadow: 0px 0px 3px #06f; }
+
+.CindyJS-toolbar div {
+ line-height: 0px; }
+
+.CindyJS-toolbar span.CindyJS-spacer {
+ display: inline-block;
+ margin: 0px;
+ padding: 1px;
+ width: 32px;
+ height: 24px; }
+
+.CindyJS-animcontrols {
+ position: absolute;
+ background-color: #00f;
+ height: 36px;
+ width: 102px; }
+ .CindyJS-animcontrols .CindyJS-animspeed {
+ height: 10px;
+ width: 100%;
+ border-radius: 4px;
+ background-color: #ff7f7f;
+ box-shadow: inset 1px 1px 2px #999, inset -1px -1px 2px #ccc; }
+ .CindyJS-animcontrols .CindyJS-animspeed div {
+ width: 50%;
+ height: 100%;
+ border-radius: 4px;
+ background-color: #cc0000;
+ box-shadow: inset 1px 1px 2px #fff, inset -1px -1px 2px #aaa; }
+ .CindyJS-animcontrols .CindyJS-animbuttons {
+ white-space: nowrap; }
+
+.CindyJS-animbuttons button {
+ border-radius: 4px;
+ width: 34px;
+ height: 26px;
+ box-sizing: border-box; }
+
+/*# sourceMappingURL=CindyJS.css.map */ \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/scripts/ketcindyjs/basic1list.txt b/graphics/ketcindy/ketcindyfolder/scripts/ketcindyjs/basic1list.txt
new file mode 100644
index 0000000000..20063af461
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/scripts/ketcindyjs/basic1list.txt
@@ -0,0 +1,149 @@
+Ketinit,basic1,41,172,Fillstore,Cindyname,Indexall,getname,iswindows,ismacosx,Changesetting,Changework,pathsep,Setwindow
+Initglist,basic1,176,187
+Setglist,basic1,191,197
+Addglist,basic1,201,207
+Fillstore,basic1,211,244
+Fillblack,basic1,248,262,Fillstore
+Fillrestore,basic1,266,278
+Readlines,basic1,282,293,readfile2str
+Changesetting,basic1,297,312,pathsep,getname,isexists
+Cindyname,basic1,316,323,Cdyname,Getcdyname
+Setwindow,basic1,327,364,Toupper,Lcrd,Pcrd,Putpoint
+Setfiles,basic1,368,381,Dqq
+Setparent,basic1,385,397,Dqq
+Dqq,basic1,401,401,DqDq
+DqDq,basic1,404,407
+PPa,basic1,411,412
+PaO,basic1,416,428
+PaC,basic1,432,444
+PPa,basic1,448,448
+Tab2list,basic1,452,514,Divoptions,Toupper,Indexall
+Columnlist,basic1,518,521
+Dispmat,basic1,525,547
+Sep1000,basic1,551,569
+Acos,basic1,573,576
+Asin,basic1,580,583
+Atan,basic1,587,590
+Sqr,basic1,594,597
+Factorial,basic1,601,609
+Norm,basic1,613,625
+Removespace,basic1,630,655
+Indexall,basic1,659,677
+Strsplit,basic1,681,692,Indexall
+Parlevel,basic1,696,696,Bracket
+Bracket,basic1,699,721,Indexall
+Pardiagram,basic1,725,821,Divoptions,Toupper,Bracket,Listplot,Letter,Expr
+Changework,basic1,825,883,Divoptions,Strsplit,Toupper,Indexall,isexists,Dqq,makedir,pathsep,iswindows,iskcexists,setexec
+Changestyle,basic1,887,919,Divoptions,Com2nd,Getlinestyle,Texcom
+Op,basic1,923,935
+Ptselected,basic1,939,955,Isptselected
+Finddef,basic1,959,978
+Findgeoinfo,basic1,982,1007,Finddef
+Dependgeo,basic1,1011,1031,Finddef
+Workprocess,basic1,1035,1039,Drawprocess
+Drawprocess,basic1,1042,1087,Divoptions,Strsplit,Toupper,Dependgeo
+Sortpointlist,basic1,1091,1123
+Toupper,basic1,1127,1142
+Textformat,basic1,1146,1170
+Sprintf,basic1,1174,1191,Textformat
+Replaceall,basic1,1195,1205
+Assign,basic1,1209,1266,Textformat
+Measuredepth,basic1,1297,1310,Indexall
+Flattenlist,basic1,1314,1334,Measuredepth
+Divoptions,basic1,1338,1441,Strsplit,Toupper,Colorcmyk2rgb,Colorname2rgb
+Dotprod,basic1,1445,1451
+Crossprod,basic1,1455,1467
+Mvprod,basic1,1471,1489,Measuredepth
+Ptstart,basic1,1493,1498
+Ptend,basic1,1502,1507
+Numptcrv,basic1,1511,1516
+Ptcrv,basic1,1520,1525
+Invert,basic1,1529,1542,Listplot
+Paramoncrv,basic1,1546,1546,Paramoncurve
+Paramoncurve,basic1,1549,1575,Nearestpt,LLcrd
+Pointoncrv,basic1,1579,1579,Pointoncurve
+Pointoncurve,basic1,1582,1600
+Koutenseg,basic1,1604,1712
+Intersectcrvspp,basic1,1718,1861,Divoptions,Measuredepth,LLcrd,Koutenseg
+Intersectcrvs,basic1,1865,1871,Intersectcrvspp
+Intersectline,basic1,1879,1901,Dotprod,Crossprod
+Intersectseg,basic1,1905,2005,Op,Intersectline,Nearestpt
+Osplineseg,basic1,2009,2026,Dotprod,Bezier
+Intersectpartseg,basic1,2030,2132,Crossprod,Norm,Reflectpoint,Osplineseg,Intersectseg,Op,Intersectline
+Collectsameseg,basic1,2136,2178
+Intersectcurvespp,basic1,2182,2288,LLcrd,Intersectpartseg,Collectsameseg,Nearestpt
+Intersectcurves,basic1,2292,2299,Intersectcurvesop
+Nearestptcrvphy,basic1,2305,2314,Pcrd,Measuredepth,Nearestpt
+Nearestptcrv,basic1,2318,2324,Nearestpt
+Nearestpt,basic1,2328,2381,Measuredepth,Paramoncurve
+Derivative,basic1,2385,2476,Strsplit,Lineplot,Intersectcurvespp,Pointoncurve,Dotprod,Divoptions,Toupper,PaO,Pcrd,Assign
+Tangentplot,basic1,2480,2527,Divoptions,Strsplit,Toupper,Intersectcurvespp,Derivative,Lineplot
+Integrate,basic1,2531,2544,Integratefn,Integratedt
+Integratedt,basic1,2548,2580,Divoptions,Toupper,IntegrateO,Measuredepth,MeetCurve,LLcrd
+Integratefn,basic1,2584,2644,Divoptions,Toupper,Strsplit,Assign,IntegrateO,Textformat
+IntegrateO,basic1,2648,2727,Measuredepth,Meetcurve,LLcrd,Dotprod
+FindareaP,basic1,2731,2744,Lcrd
+FindareaO,basic1,2748,2769,Dist,IntegrateO
+Findarea,basic1,2773,2799,Divoptions,Strsplit,Toupper,FindareaO,FindareaP
+Findlength,basic1,2803,2815,Lcrd
+Inversefun,basic1,2819,2842,Textformat
+Com0th,basic1,2846,2850
+Com1st,basic1,2854,2859
+Com2nd,basic1,2863,2868
+Com2ndpre,basic1,2872,2876
+Texcom,basic1,2880,2887,Com2nd
+Ketcindylogo,basic1,2891,2895,Com2nd
+Drwline,basic1,2899,2902,Textformat,Com2nd
+Dashline,basic1,2907,2909,Com2nd
+Invdashline,basic1,2913,2915,Com2nd
+Dottedline,basic1,2919,2921,Com2nd
+Drawlinetype,basic1,2925,2946,Toupper,Drwline,Dashline,Invdashline,Dottedline
+Setunitlen,basic1,2950,3002
+Setmarklen,basic1,3006,3010,Com2nd,Textformat
+Setorigin,basic1,3014,3018,Com2nd,Textformat
+Fontsize,basic1,3022,3025,Com2nd
+Setpen,basic1,3029,3033,Com2nd
+Setscaling,basic1,3037,3051,Com0th,Setwindow
+Lcrd,basic1,3055,3063
+Pcrd,basic1,3067,3075
+LLcrd,basic1,3079,3088
+Doscaling,basic1,3092,3119,Lcrd,LLcrd
+Unscaling,basic1,3123,3150,Lcrd,LLcrd
+Setpt,basic1,3154,3160,Ptsize,Com2nd
+Definecolor,basic1,3164,3172,Texcom
+Setcolor,basic1,3176,3203,Colorcmyk2rgb,Com2nd
+Colorrgb2cmyk,basic1,3207,3219
+Colorcmyk2rgb,basic1,3223,3230
+Colorrgbhsv,basic1,3234,3266
+Colorhsvrgb,basic1,3270,3284
+Colorrgbhsl,basic1,3288,3324
+Colorhslrgb,basic1,3328,3349,Hue2rgb
+Hue2rgb,basic1,3353,3371
+Colorrgbhwb,basic1,3375,3381,Colorrgbhsl,Colorcode
+Colorhwbrgb,basic1,3385,3410
+Colorcode,basic1,3414,3427,Colorrgb2cmyk,Colorcmyk2rgb,Colorrgbhsv,Colorrgbhsl,Colorrgbhwb,Colorhsvrgb,Colorhslrgb,Colorhwbrgb
+Colorname2rgb,basic1,3431,3481,Colorcmyk2rgb,Assign
+Getlinestyle,basic1,3485,3551,Drwline,Dashline,Invdashline,Dottedline,Textformat,Drwpt
+Chunderscore,basic1,3555,3590,PaO
+AddGraph,basic1,3594,3694,Divoptions,Flattenlist,Pcrd,Measuredepth,PaO,Textformat,Com2nd,Getlinestyle,Texcom
+Joincrvs,basic1,3698,3794,LLcrd,Divoptions,Numptcrv,Ptstart,Ptend,Pcrd,Textformat,Com2nd,Getlinestyle,Texcom
+Partcrv,basic1,3798,3887,Measuredepth,Divoptions,Numptcrv,Ptstart,Ptend,Joincrvs,Nearestpt,LLcrd,Pcrd,Textformat,Lcrd,Com2nd,Getlinestyle,Texcom
+Opcrvs,basic1,3891,3899,Listplot
+Pointdata,basic1,3903,4026,Strsplit,Divoptions,Toupper,Lcrd,Measuredepth,Pcrd,PaO,Texcom,Textformat,Com2nd
+Listplot,basic1,4030,4111,Divoptions,Strsplit,Toupper,Pcrd,Textformat,Com2nd,Getlinestyle,Texcom,Lcrd
+Lineplot,basic1,4115,4198,Strsplit,Toupper,Divoptions,Lcrd,Pcrd,Textformat,Com2nd,Getlinestyle,Texcom
+Plotdata,basic1,4202,4407,Divoptions,Strsplit,PaO,Dqq,Toupper,Assign,Norm,Measuredepth,Pcrd,Textformat,Com2nd,Getlinestyle,Texcom
+Paramplot,basic1,4411,4583,Divoptions,Strsplit,PaO,Dqq,Toupper, differs from Scilab ,Assign,Measuredepth,Pcrd,Textformat,Com2nd,Getlinestyle,Texcom
+Polarplot,basic1,4587,4596,Strsplit,Paramplot
+Connectseg,basic1,4600,4662,Norm
+Implicitplot,basic1,4666,4849,Divoptions,Strsplit,Toupper,Impfun,Connectseg,Measuredepth,Pcrd,Textformat,Com2nd,Getlinestyle,Texcom
+Circledata,basic1,4853,4972,Divoptions,Strsplit,Toupper,Lcrd,Defvar,Lineplot,Pcrd,Textformat,Com2nd,Getlinestyle,Texcom
+Framedata,basic1,4976,5028,Measuredepth,LLcrd,Divoptions,Lcrd,Listplot
+Framedata2,basic1,5032,5039,Lcrd,Framedata
+Ovaldata,basic1,5043,5113,Divoptions,Lcrd,Listplot,Circledata,Reflectdata,Joincrvs,Com2nd,Getlinestyle,Texcom,Pcrd,Textformat
+Segmark,basic1,5117,5177,Drawsegmark,Divoptions,Toupper,Circledata,Listplot
+Parabolaplot,basic1,5181,5221,Lcrd,Rotatepoint,Textformat,Plotdata,Rotatedata
+Ellipseplot,basic1,5225,5268,Lcrd,Rotatepoint,Paramplot,Rotatedata
+Hyperbolaplot,basic1,5272,5336,Divoptions,Toupper,Lcrd,Rotatepoint,Paramplot,Lineplot,Rotatedata
+Polygonplot,basic1,5340,5386,Divoptions,Strsplit,Toupper,Lcrd,Putpoint,Listplot
+Putintersect,basic1,5390,5418,Intersectcrvs,Putpoint
diff --git a/graphics/ketcindy/ketcindyfolder/scripts/ketcindyjs/basic2list.txt b/graphics/ketcindy/ketcindyfolder/scripts/ketcindyjs/basic2list.txt
new file mode 100644
index 0000000000..32e67feb5c
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/scripts/ketcindyjs/basic2list.txt
@@ -0,0 +1,97 @@
+Drwfigs,basic2,22,24,Drawfigures
+Drawfigures,basic2,28,87,Divoptions,Strsplit,Toupper,Measuredepth,Pointdata,Listplot,Dqq
+Setarrow,basic2,91,117
+Arrowheaddata,basic2,121,214,Divoptions,Strsplit,Toupper,Touppera,Measuredepth,Nearestpt,|Ptend,Ptstart,Numptcrv,Ptcrv,LLcrd,Intersectcrvspp,Pcrd
+Arrowhead,basic2,218,310,Strsplit,Toupper,Measuredepth,Pcrd,Arrowheaddata,Inwindow,Listplot,Divoptions,Dqq,Textformat,LLcrd,Com2nd,Texcom
+Arrowdata,basic2,314,428,Divoptions,Strsplit,Toupper,Pcrd,Textformat,Listplot,LLcrd,Arrowhead,Setscaling,Lcrd
+Lightarrowdata,basic2,432,547,Pcrd,Divoptions,Strsplit,Toupper,Listplot,Textformat,LLcrd,Com2nd,Texcom,Setscaling,Lcrd
+Anglemark,basic2,551,684,Divoptions,Indexall,Strsplit,Dqq,Toupper,Lcrd,Pcrd,Textformat,Com2nd,Getlinestyle,Texcom
+Paramark,basic2,688,798,Divoptions,Indexall,Strsplit,Dqq,Toupper,Lcrd,Pcrd,Textformat,Com2nd,Getlinestyle,Texcom
+Makebowdata,basic2,802,815,Lcrd,Rotatepoint
+Bowdata,basic2,819,990,Divoptions,Lcrd,Strsplit,Toupper,Makebowdata,Defvar,Norm,LLcrd,Dqq,Measuredepth,Pcrd,Textformat,Com2nd,Getlinestyle,Texcom
+Bowname,basic2,994,997,Expr
+Bownamerot,basic2,1001,1015,Measuredepth,Ptend,Ptstart,Exprrot
+Deqdata,basic2,1019,1077,funP,Lcrd,funN
+Deqplot,basic2,1081,1225,Lcrd,Divoptions,Toupper,Indexall,Deqdata,Pcrd,Assign,Textformat,RSform,Com2nd,Getlinestyle,Texcom
+Enclosing,basic2,1393,1559,Enclosing2,Divoptions,isList,Lcrd,Listplot,Intersectcurvespp,Prepend,Op,Length,Partcrv,Pointoncurve,Pcrd,PaO,Textformat,Com2nd,Getlinestyle,Texcom,LLcrd
+Makehatch,basic2,1567,1669,Lineplot,Intersectseg,Norm,Listplot
+Anyselected,basic2,1673,1681
+Hatchdata,basic2,1685,1981,HatchdataR,Hatchdatacindy,Listplot,Joincrvs,Enclosing2,Divoptions,Strsplit,Toupper,Anyselected,Bracket,isexists,ReadOutData,Makehatch,Textformat,PaO,Com2nd,Getlinestyle,Texcom,WriteOutData,LLcrd
+Shadein,basic2,1985,2072,Framedata,Partcrv,Paramoncrv,Listplot,Intersectcurvespp,Pointoncrv,Joincrvs,Inwindow
+Shade,basic2,2076,2204,Divoptions,Strsplit,Toupper,Colorcmyk2rgb,Enclosing,Shadein,Listplot,Joincrvs,Pcrd,PaO,Textformat,Dqq
+Rotatepoint,basic2,2210,2220,Lcrd
+Translatepoint,basic2,2224,2234,Lcrd
+Scalepoint,basic2,2238,2248,Lcrd
+Reflectpoint,basic2,2252,2277,Lcrd
+Rotatedata,basic2,2281,2367,Divoptions,Lcrd,Strsplit,Toupper,Measuredepth,LLcrd,Pcrd,Textformat,RSform,Com2nd,Getlinestyle,Texcom
+Translatedata,basic2,2371,2449,Divoptions,Strsplit,Toupper,Lcrd,Measuredepth,LLcrd,Pcrd,RSform,Textformat,Com2nd,Getlinestyle,Texcom
+Scaledata,basic2,2453,2555,Divoptions,Lcrd,Strsplit,Toupper,Measuredepth,LLcrd,Pcrd,Textformat,RSform,Com2nd,Getlinestyle,Texcom
+Reflectdata,basic2,2559,2653,Divoptions,Strsplit,Toupper,Lcrd,Measuredepth,LLcrd,Pcrd,RSform,Textformat,Com2nd,Getlinestyle,Texcom
+Mksegments,basic2,2658,2673,Listplot
+Mkcircles,basic2,2678,2698,Strsplit,Circledata
+MakeRarg,basic2,2702,2715,RSslash,Textformat
+Htickmark,basic2,2719,2742,Listplot,Expr
+Vtickmark,basic2,2746,2767,Listplot,Expr,180710to// tmp=MakeRarg
+Vtick,basic2,2771,2781,Listplot
+Htick,basic2,2785,2797,LLcrd,Listplot
+Setax,basic2,2801,2818
+Drwxy,basic2,2822,2917,Divoptions,Strsplit,Toupper,Lightarrowdata,Listplot,Expr,Letter,Addax
+Drwpt,basic2,2921,2930,Pointdata
+Drawpoint,basic2,2933,2961,Measuredepth,Textformat,Com2nd,Setpen
+Addax,basic2,2965,2968
+Expr,basic2,2972,2987,Letter
+Letter,basic2,2991,3086,Divoptions,Removespace,Strsplit,Toupper,RSslash,Com2nd,Lcrd,Texcom,Pcrd
+Letterrot,basic2,3090,3132,Divoptions,Letter,Com2nd,Dqq,Texcom
+Exprrot,basic2,3136,3179,Divoptions,Expr,Com2nd,Dqq,Texcom
+Slider,basic2,3183,3230,Toupper,Strsplit,Indexall,Putpoint,Listplot,Putonseg
+Putpoint,basic2,3234,3245,Textformat,Pcrd
+Putpoint,basic2,3249,3260,Textformat,Pcrd
+Bezierpt,basic2,3264,3289,Lcrd
+Bezier,basic2,3293,3305,Beziercurve
+Beziercurve,basic2,3309,3386,Divoptions,Measuredepth,Lcrd,Bezierpt,Pcrd,Textformat,RSform,Com2nd,Getlinestyle,Texcom
+Putbezierdata,basic2,3390,3452,Divoptions,Putpoint,Lcrd,Letter
+Bezierstart,basic2,3456,3458
+Mkbezierptcrv,basic2,3462,3488,Readcsvsla,Measuredepth,Putbezierdata,Bezier
+Mkbeziercrv,basic2,3492,3503,Measuredepth,Bezier
+Ospline,basic2,3507,3566,Dotprod,Lcrd,Bezier
+CRspline,basic2,3570,3616,Lcrd,Reflectpoint,Bezier
+Beziersmooth,basic2,3620,3681,Bzspline,Putpoint,Lcrd,Bezier
+Beziersym,basic2,3685,3734,Bzsspline,Putpoint,Lcrd,Bezier
+Listbspline2bz,basic2,3738,3753,Lcrd
+Bspline,basic2,3757,3765,Listbspline2bz,BezierCurve
+Meetcurve,basic2,3769,3829,Measuredepth,LLcrd,Lcrd
+Putonline,basic2,3833,3853,LLcrd,Lineplot,Putonseg
+Putonseg,basic2,3857,3893,LLcrd,Divoptions,Lcrd,Putpoint,Pcrd,Textformat
+Putoncurve,basic2,3897,3926,putoncurve,Putpoint,Paramoncurve,Putonseg,Textformat,Ptend
+Crosspoint,basic2,3930,3948,MeetCurve,Putpoint
+Periodfun,basic2,3952,4085,Divoptions,Strsplit,Toupper,Plotdata,Translatedata,Setscaling,Norm,Listplot,Textformat
+Mkcstable,basic2,4089,4105,Textformat
+Fourierseries,basic2,4109,4179,Divoptions,Strsplit,Toupper,Plotdata,Assign,Listplot
+Tabledata,basic2,4183,4205,Divoptions,Toupper,Tabledatageo,Tabledatalight
+Tabledatalight,basic2,4209,4328,Divoptions,Strsplit,Toupper,Tlistplot,Changetablestyle,Addax,Setwindow
+Tabledatageo,basic2,4332,4396,Divoptions,Strsplit,Toupper,Putpoint,Tabledatalight
+Tgrid,basic2,4400,4415
+Tlistplot,basic2,4419,4448,divoptions,Toupper,Tgrid,Listplot
+Changetablestyle,basic2,4452,4540,Indexall,Changestyle,Replaceall,Tlistplot
+Findcell,basic2,4544,4570,Tgrid
+Putcell,basic2,4574,4609,Findcell,Letter
+Putcellexpr,basic2,4613,4625,Putcell
+Putrow,basic2,4629,4644,Putcellrow,Putcell
+Putrowexpr,basic2,4648,4661,Putrow
+Putcol,basic2,4665,4680,Putcellexpr,Putcell
+Putcolexpr,basic2,4684,4697,Putcellexpr,Putcol
+Setrange,basic2,4701,4707,Pcrd
+Inwindow,basic2,4711,4723
+Dashlinedata,basic2,4727,4800
+Windispg,basic2,4804,4870,Drwxy,Measuredepth,Dashlinedata,Textformat
+Extractdata,basic2,4875,4931,Divoptions,Com2nd,Getlinestyle,Texcom
+Removeout,basic2,4935,4945
+Makecmdlist,basic2,4949,4979
+Savecmdlist,basic2,4983,4989
+Quicksort,basic2,4993,5013
+Lessstr,basic2,5017,5044
+Makehelplist,basic2,5048,5092,PPa
+Helplist,basic2,5096,5150,Makehelplist
+Help,basic2,5154,5205
+Helpkey,basic2,5209,5227,Help
+Example,basic2,5231,5255
diff --git a/graphics/ketcindy/ketcindyfolder/scripts/ketcindyjs/basic3list.txt b/graphics/ketcindy/ketcindyfolder/scripts/ketcindyjs/basic3list.txt
new file mode 100644
index 0000000000..9cacb8566f
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/scripts/ketcindyjs/basic3list.txt
@@ -0,0 +1,56 @@
+Tenkeybrd,basic3,22,54,Strsplit,Toupper,Framedata2,Shade,Tabledata,Addax
+Keyaction,basic3,58,83
+Dispchoice,basic3,87,92
+Datetime,basic3,96,107,getdatetime
+Readcsvsla,basic3,111,159,Readplotdigdata,Divoptions,Translatedata
+Writebezier,basic3,163,205,PaO,WriteOutData
+Readbezier,basic3,209,261,Divoptions,Toupper,Readoutdata,Measuredepth,Putpoint,Bezier
+RSform,basic3,265,299,PaO,Bracket,PPa
+RSslash,basic3,303,308
+Rform,basic3,312,322,PaO
+Defvar,basic3,326,370
+IftoR,basic3,374,413,PaO,Indexall,Bracket
+FortoR,basic3,417,446,PaO,Bracket
+Deffun,basic3,450,497,Bracket,Indexall,FortoR,IftoR,RSform,PaO
+WritetoRS,basic3,501,734,WritetoSci,Lcrd,Datetime,Textformat,Cindyname,RSform,PPa,iswindows,Indexall,Dqq,PaO
+Readoutdata,basic3,738,851,Divoptions,Strsplit,Toupper,Pcrd,Textformat
+Writeoutdata,basic3,855,917,Flattenlist,Measuredepth
+Makeshell,basic3,921,1021,kc,Indexall,Dqq
+Convsjiswin,basic3,1025,1049,nkfwin,nkfcpdel,isexists,pathsep
+Makebat,basic3,1053,1191,kc,iswindows,isincludefull,isexists,Indexall,Dqq
+Addpackage,basic3,1195,1213
+Usegraphics,basic3,1217,1227,Addpackage
+Viewtex,basic3,1231,1305,iswindows,Makebat,kc,Makeshell,WritetoRS
+Viewparent,basic3,1309,1327,isexists,iswindows,Makebat,Makeshell,WritetoRS,kc
+Figpdf,basic3,1331,1451,Removespace,isexists
+Slidework,basic3,1455,1474,isexists,makedir,pathsep,Changework
+Setslidemargin,basic3,1478,1481
+Setslidepage,basic3,1485,1510
+Setslidemain,basic3,1514,1538
+Setslidebody,basic3,1542,1579
+Setslidehyper,basic3,1583,1661,Divoptions,Addpackage,Indexall,Toupper
+Settitle,basic3,1665,1736,Toupper,Indexall
+Maketitle,basic3,1740,1835,iswindows,Makebat,Makeshell,kc,Cindyname,isexists,PaO
+Repeatsameslide,basic3,1839,1994,Indexall
+Presentation,basic3,1998,2663,readfile2str,isexists,Removespace,fileslist,Repeatsameslide
+Mkslides,basic3,2667,2731,Fillblack,Changework,Setdirectory,setexec,isexists,Presentation,iswindows,Makebat,Makeshell,kc,pathsep,Fillrestore
+Mkslidesummary,basic3,2735,2800,Fillblack,pathsep,ismacosx,setexec,PPa,PaO,CalcbyR,iswindows,Makebat,Makeshell,kc,Changework,Fillstore
+BBdata,basic3,2804,2947,Divoptions,Toupper,ismacosx,Dqq,iswindows,kc,Sprintf,Removespace
+Gcd,basic3,2951,2963
+Fracform,basic3,2967,2992
+Totexformpart,basic3,2996,3064,Bracket,Strsplit,Assign
+Totexform,basic3,3068,3119,Totexformpart,Assign,Indexall,Bracket
+Tocindyformpart,basic3,3123,3191,Bracket,Strsplit,Assign
+Tocindyform,basic3,3195,3242,Tocindyformpart,Indexall,Bracket
+Animepar,basic3,3246,3246,Animationparam
+Animationparam,basic3,3250,3269,seconds,stopanimation
+Copyketcindyjs,basic3,3273,3334,iswindows,Dqq,kc
+Ketjsoption,basic3,3338,3339,Setketcindyjs
+Setketcindyjs,basic3,3343,3352
+Ketcindyjsdata,basic3,3356,3394,Textformat,Dqq
+Findfun,basic3,3398,3465,Removespace,Indexall
+Extractfun,basic3,3469,3486,Indexall,Findfun
+Extractall,basic3,3495,3539
+Textedit,basic3,3543,3549
+Textedit2value,basic3,3553,3595,Toupper,Textedit,Removespace,Tocindyform,Totexform,Tomaxform,Strsplit
+Mkketcindyjs,basic3,3599,4158,Strsplit,Toupper,Colorcode,Colorname2rgb,Copyketcindyjs,isexists,Cdyname,Extractfun,Extractall,pathsep,Readlines,Removespace,Dqq,indexall,Indexof,Indexall
diff --git a/graphics/ketcindy/ketcindyfolder/scripts/ketcindyjs/ignoredfun.txt b/graphics/ketcindy/ketcindyfolder/scripts/ketcindyjs/ignoredfun.txt
new file mode 100644
index 0000000000..5f388e6701
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/scripts/ketcindyjs/ignoredfun.txt
@@ -0,0 +1,57 @@
+Anyselected
+Changesetting
+Changework
+Cindyname
+Com0th
+Com1st
+Com2nd
+Com2ndpre
+Copyketcindyjs
+Definecolor
+//Defvar
+Dottedline
+Drwline
+Example
+Figpdf
+Fillstore
+Fontsize
+Help
+Helplist
+Invdashline
+Ketcindyjsdata
+Ketjsoption
+Mkketcindyjs
+Presentation
+//Putbezierdata
+//Putpoint
+Readcsvsla
+RSform
+RSslash
+Setfiles
+Setketcindyjs
+Setparent
+Setslidebody
+Setslidehyper
+Texcom
+
+//Datalist3d
+//Ptseg3data
+Subgraph
+//Setangle
+//Mainsubpt3d
+//Parasubpt
+//Mkpointlist
+//Workprocess
+//Drawprocess
+//Dependgeo
+//Finddef
+//Mkseg3d
+
+//Ketinit
+//Windispg
+//Fillstore
+//Setwindow
+//Drwxy
+//Measuredepth
+//Dashlinedata
+//Textformat
diff --git a/graphics/ketcindy/ketcindyfolder/scripts/ketcindyjs/katex-plugin.js b/graphics/ketcindy/ketcindyfolder/scripts/ketcindyjs/katex-plugin.js
new file mode 100644
index 0000000000..5870742d18
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/scripts/ketcindyjs/katex-plugin.js
@@ -0,0 +1,296 @@
+(function() {
+ "use strict";
+
+ var log = console.log.bind(console);
+ var fonts = {};
+ var waitingInstances = [];
+ var repaintTimeout = null;
+
+ // Load required components: WebFontLoader and katex
+
+ var WebFontLoader = null;
+ var katex = null;
+
+ CindyJS.loadScript("WebFont", "webfont.js", fontLoaderReady);
+ CindyJS.loadScript("katex", "katex/katex.min.js", katexReady);
+
+ function fontLoaderReady() {
+ log("WebFontLoader is now available.");
+ WebFontLoader = window.WebFont;
+ loadFonts(["KaTeX_Math:i4", "KaTeX_Main:n4"]); // pre-load common fonts
+ someScriptLoaded();
+ }
+
+ function katexReady() {
+ log("KaTeX is now available.");
+ katex = window.katex;
+ someScriptLoaded();
+ }
+
+ function someScriptLoaded() {
+ if (allScriptsLoaded())
+ triggerRepaints();
+ }
+
+ function allScriptsLoaded() {
+ return katex && WebFontLoader;
+ }
+
+ // Load common and used fonts
+
+ function loadFonts(fontsToLoad) {
+ log("Loading ", fontsToLoad);
+ fontsToLoad.forEach(function(fvd) {
+ fonts[fvd] = "loading";
+ });
+ WebFontLoader.load({
+ custom: {
+ families: fontsToLoad,
+ testStrings: {
+ "KaTeX_Size1": "()[]",
+ "KaTeX_Size2": "()[]",
+ "KaTeX_Size3": "()[]",
+ "KaTeX_Size4": "()[]"
+ },
+ urls: [CindyJS.getBaseDir() + "katex/katex.min.css"]
+ },
+ fontactive: fontActive
+ });
+ }
+
+ function fontActive(font, variant) {
+ var fvd = font + ":" + variant;
+ log("Loaded " + fvd);
+ fonts[fvd] = true; // done loading
+ if (repaintTimeout === null)
+ repaintTimeout = setTimeout(triggerRepaints, 0);
+ }
+
+ // Handle repainting
+
+ function triggerRepaints() {
+ repaintTimeout = null;
+ var instances = waitingInstances;
+ waitingInstances = [];
+ for (var i = 0; i < instances.length; ++i)
+ instances[i].evokeCS(""); // trigger repaint
+ }
+
+ function haveToWait(i) {
+ if (!waitingInstances.some(function(j) {
+ return i === j;
+ })) {
+ waitingInstances.push(i);
+ }
+ }
+
+ // Plugin API
+
+ CindyJS.registerPlugin(1, "katex", plugin);
+
+ function plugin(api) {
+ var storage = {instance: api.instance, cache: {}, misses:0};
+ api.setTextRenderer(
+ katexRenderer.bind(storage),
+ katexHtml.bind(storage));
+ }
+
+ // Text box, with same api as a prepared KaTeX box but using current font
+
+ function textBox(ctx, text) {
+ this.width = ctx.measureText(text).width;
+ this.renderAt = function(x, y) {
+ ctx.fillText(text, x, y);
+ };
+ }
+
+ textBox.prototype.height = 0;
+
+ textBox.prototype.depth = 0;
+
+ // Custom macros defined specifically for Cinderella / CindyJS
+
+ var macros = {
+ "\\mbox": "\\text",
+ "\\lamda": "\\lambda",
+ "\\my": "\\mu",
+ "\\ny": "\\nu",
+ "\\ypsilon": "\\upsilon",
+ "\\Alpha": "\\mathrm{A}",
+ "\\Beta": "\\mathrm{B}",
+ "\\Epsilon": "\\mathrm{E}",
+ "\\Zeta": "\\mathrm{Z}",
+ "\\Eta": "\\mathrm{H}",
+ "\\Iota": "\\mathrm{I}",
+ "\\Kappa": "\\mathrm{K}",
+ "\\Lamda": "\\Lambda",
+ "\\Mu": "\\mathrm{M}",
+ "\\My": "\\Mu",
+ "\\Nu": "\\mathrm{N}",
+ "\\Ny": "\\Nu",
+ "\\Omicron": "\\mathrm{O}",
+ "\\Rho": "\\mathrm{P}",
+ "\\Tau": "\\mathrm{T}",
+ "\\Ypsilon": "\\Upsilon",
+ "\\Chi": "\\mathrm{X}",
+ "\\dots": "\\ldots",
+ "\\C": "\\mathbb{C}",
+ "\\H": "\\mathbb{H}",
+ "\\N": "\\mathbb{N}",
+ "\\P": "\\mathbb{P}",
+ "\\Q": "\\mathbb{Q}",
+ "\\R": "\\mathbb{R}",
+ "\\Z": "\\mathbb{Z}",
+ "\\slash": "/",
+ "\\operatorname": "\\text", // till KaTeX #145 gets resolved
+ "\\arccot": "\\operatorname{arccot}",
+ "\\arcsec": "\\operatorname{arcsec}",
+ "\\arccsc": "\\operatorname{arccsc}",
+ };
+
+ // Report whether we are ready
+
+ var firstMessage = true;
+
+ function katexRenderer(ctx, text, x, y, align, fontSize, lineHeight) {
+ var key = fontSize + "," + lineHeight + ":" + text;
+ var fontsMissing = false;
+ var fontsToLoad = {};
+ var parts, rows, row, n, i, j;
+ if (this.cache.hasOwnProperty(key)) {
+ rows = this.cache[key];
+ } else {
+ var opts = {
+ fontSize: fontSize,
+ macros: macros
+ };
+ parts = text.split("$");
+ row = [];
+ rows = [row];
+ n = parts.length;
+ if (n > 1 && !allScriptsLoaded()) {
+ if (firstMessage) {
+ log("KaTeX is not ready yet.");
+ firstMessage = false;
+ }
+ haveToWait(this.instance);
+ return;
+ }
+ for (i = 0; i < n; ++i) {
+ var part = parts[i];
+ var box;
+ if ((i & 1) === 0) { // plain text not TeX
+ if (part.indexOf("\n") === -1) {
+ row.push(new textBox(ctx, part));
+ } else {
+ var rows2 = part.split("\n");
+ row.push(new textBox(ctx, rows2[0]));
+ for (j = 1; j < rows2.length; ++j) {
+ row = [new textBox(ctx, rows2[j])];
+ rows.push(row);
+ }
+ }
+ } else {
+ try {
+ var tex = parts[i].replace(/°/g, "\\degree");
+ box = katex.canvasBox(tex, ctx, opts);
+ row.push(box);
+ for (var font in box.fontsUsed) {
+ var fontState = fonts[font];
+ if (fontState !== true) {
+ fontsMissing = true;
+ if (fontState === undefined)
+ fontsToLoad[font] = true;
+ }
+ }
+ } catch(e) {
+ console.error(e);
+ row.push(new textBox(ctx, "$" + parts[i] + "$"));
+ }
+ }
+ }
+ if (++this.misses === 1024) {
+ this.misses = 0;
+ this.cache = {};
+ }
+ if (!fontsMissing) {
+ this.cache[key] = rows;
+ }
+ }
+ if (fontsMissing) {
+ fontsToLoad = Object.keys(fontsToLoad);
+ if (fontsToLoad.length !== 0) {
+ loadFonts(fontsToLoad);
+ }
+ haveToWait(this.instance);
+ } else {
+ var left = Infinity;
+ var right = -Infinity;
+ var top = y - 0.7 * 1.2 * fontSize;
+ var bottom = -Infinity;
+ for (i = 0; i < rows.length; ++i) {
+ var total = 0;
+ var pos = x;
+ row = rows[i];
+ n = row.length;
+ for (j = 0; j < n; ++j)
+ total += row[j].width;
+ var pos = x - align * total;
+ for (j = 0; j < n; ++j) {
+ row[j].renderAt(pos, y);
+ if (left > pos) left = pos;
+ if (top > y - row[j].height) top = y - row[j].height;
+ if (bottom < y + row[j].depth) bottom = y + row[j].depth;
+ pos += row[j].width;
+ if (right < pos) right = pos;
+ }
+ y += lineHeight;
+ // TODO: take vertical dimensions of formulas into account
+ }
+ bottom = Math.max(bottom, y - lineHeight + 0.3 * 1.2 * fontSize);
+ return {
+ left: left,
+ right: right,
+ top: top,
+ bottom: bottom
+ };
+ }
+ };
+
+ function katexHtml(element, text) {
+ var opts = {
+ macros: macros
+ };
+ var parts = text.split("$");
+ var n = parts.length;
+ if (n > 1 && !allScriptsLoaded()) {
+ if (firstMessage) {
+ log("KaTeX is not ready yet.");
+ firstMessage = false;
+ }
+ haveToWait(this.instance);
+ return false;
+ }
+ while (element.firstChild)
+ element.removeChild(element.firstChild);
+ for (var i = 0; i < n; ++i) {
+ var text = parts[i];
+ if ((i & 1) === 0) {
+ if (text.indexOf("\n") !== -1) {
+ var rows = text.split("\n");
+ element.appendChild(document.createTextNode(rows[0]));
+ for (var j = 1; j < rows.length; ++j) {
+ element.appendChild(document.createElement("br"));
+ element.appendChild(document.createTextNode(rows[j]));
+ }
+ } else {
+ element.appendChild(document.createTextNode(text));
+ }
+ } else {
+ var span = document.createElement("span");
+ katex.render(text, span, opts);
+ element.appendChild(span);
+ }
+ }
+ }
+})();
diff --git a/graphics/ketcindy/ketcindyfolder/scripts/ketcindyjs/katex/fonts/KaTeX_Main-Regular.ttf b/graphics/ketcindy/ketcindyfolder/scripts/ketcindyjs/katex/fonts/KaTeX_Main-Regular.ttf
new file mode 100644
index 0000000000..da5797ffcc
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/scripts/ketcindyjs/katex/fonts/KaTeX_Main-Regular.ttf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/scripts/ketcindyjs/katex/fonts/KaTeX_Main-Regular.woff b/graphics/ketcindy/ketcindyfolder/scripts/ketcindyjs/katex/fonts/KaTeX_Main-Regular.woff
new file mode 100644
index 0000000000..37db672e82
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/scripts/ketcindyjs/katex/fonts/KaTeX_Main-Regular.woff
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/scripts/ketcindyjs/katex/fonts/KaTeX_Main-Regular.woff2 b/graphics/ketcindy/ketcindyfolder/scripts/ketcindyjs/katex/fonts/KaTeX_Main-Regular.woff2
new file mode 100644
index 0000000000..4882042489
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/scripts/ketcindyjs/katex/fonts/KaTeX_Main-Regular.woff2
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/scripts/ketcindyjs/katex/fonts/KaTeX_Math-Italic.ttf b/graphics/ketcindy/ketcindyfolder/scripts/ketcindyjs/katex/fonts/KaTeX_Math-Italic.ttf
new file mode 100644
index 0000000000..06f39d3a29
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/scripts/ketcindyjs/katex/fonts/KaTeX_Math-Italic.ttf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/scripts/ketcindyjs/katex/fonts/KaTeX_Math-Italic.woff b/graphics/ketcindy/ketcindyfolder/scripts/ketcindyjs/katex/fonts/KaTeX_Math-Italic.woff
new file mode 100644
index 0000000000..cf3b4b79e5
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/scripts/ketcindyjs/katex/fonts/KaTeX_Math-Italic.woff
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/scripts/ketcindyjs/katex/fonts/KaTeX_Math-Italic.woff2 b/graphics/ketcindy/ketcindyfolder/scripts/ketcindyjs/katex/fonts/KaTeX_Math-Italic.woff2
new file mode 100644
index 0000000000..5f8c4bfa45
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/scripts/ketcindyjs/katex/fonts/KaTeX_Math-Italic.woff2
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/scripts/ketcindyjs/katex/katex.min.css b/graphics/ketcindy/ketcindyfolder/scripts/ketcindyjs/katex/katex.min.css
new file mode 100644
index 0000000000..d6fb8374d9
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/scripts/ketcindyjs/katex/katex.min.css
@@ -0,0 +1 @@
+@font-face{font-family:KaTeX_AMS;src:url(fonts/KaTeX_AMS-Regular.eot);src:url(fonts/KaTeX_AMS-Regular.eot#iefix) format('embedded-opentype'),url(fonts/KaTeX_AMS-Regular.woff2) format('woff2'),url(fonts/KaTeX_AMS-Regular.woff) format('woff'),url(fonts/KaTeX_AMS-Regular.ttf) format('truetype');font-weight:400;font-style:normal}@font-face{font-family:KaTeX_Caligraphic;src:url(fonts/KaTeX_Caligraphic-Bold.eot);src:url(fonts/KaTeX_Caligraphic-Bold.eot#iefix) format('embedded-opentype'),url(fonts/KaTeX_Caligraphic-Bold.woff2) format('woff2'),url(fonts/KaTeX_Caligraphic-Bold.woff) format('woff'),url(fonts/KaTeX_Caligraphic-Bold.ttf) format('truetype');font-weight:700;font-style:normal}@font-face{font-family:KaTeX_Caligraphic;src:url(fonts/KaTeX_Caligraphic-Regular.eot);src:url(fonts/KaTeX_Caligraphic-Regular.eot#iefix) format('embedded-opentype'),url(fonts/KaTeX_Caligraphic-Regular.woff2) format('woff2'),url(fonts/KaTeX_Caligraphic-Regular.woff) format('woff'),url(fonts/KaTeX_Caligraphic-Regular.ttf) format('truetype');font-weight:400;font-style:normal}@font-face{font-family:KaTeX_Fraktur;src:url(fonts/KaTeX_Fraktur-Bold.eot);src:url(fonts/KaTeX_Fraktur-Bold.eot#iefix) format('embedded-opentype'),url(fonts/KaTeX_Fraktur-Bold.woff2) format('woff2'),url(fonts/KaTeX_Fraktur-Bold.woff) format('woff'),url(fonts/KaTeX_Fraktur-Bold.ttf) format('truetype');font-weight:700;font-style:normal}@font-face{font-family:KaTeX_Fraktur;src:url(fonts/KaTeX_Fraktur-Regular.eot);src:url(fonts/KaTeX_Fraktur-Regular.eot#iefix) format('embedded-opentype'),url(fonts/KaTeX_Fraktur-Regular.woff2) format('woff2'),url(fonts/KaTeX_Fraktur-Regular.woff) format('woff'),url(fonts/KaTeX_Fraktur-Regular.ttf) format('truetype');font-weight:400;font-style:normal}@font-face{font-family:KaTeX_Main;src:url(fonts/KaTeX_Main-Bold.eot);src:url(fonts/KaTeX_Main-Bold.eot#iefix) format('embedded-opentype'),url(fonts/KaTeX_Main-Bold.woff2) format('woff2'),url(fonts/KaTeX_Main-Bold.woff) format('woff'),url(fonts/KaTeX_Main-Bold.ttf) format('truetype');font-weight:700;font-style:normal}@font-face{font-family:KaTeX_Main;src:url(fonts/KaTeX_Main-Italic.eot);src:url(fonts/KaTeX_Main-Italic.eot#iefix) format('embedded-opentype'),url(fonts/KaTeX_Main-Italic.woff2) format('woff2'),url(fonts/KaTeX_Main-Italic.woff) format('woff'),url(fonts/KaTeX_Main-Italic.ttf) format('truetype');font-weight:400;font-style:italic}@font-face{font-family:KaTeX_Main;src:url(fonts/KaTeX_Main-Regular.eot);src:url(fonts/KaTeX_Main-Regular.eot#iefix) format('embedded-opentype'),url(fonts/KaTeX_Main-Regular.woff2) format('woff2'),url(fonts/KaTeX_Main-Regular.woff) format('woff'),url(fonts/KaTeX_Main-Regular.ttf) format('truetype');font-weight:400;font-style:normal}@font-face{font-family:KaTeX_Math;src:url(fonts/KaTeX_Math-Italic.eot);src:url(fonts/KaTeX_Math-Italic.eot#iefix) format('embedded-opentype'),url(fonts/KaTeX_Math-Italic.woff2) format('woff2'),url(fonts/KaTeX_Math-Italic.woff) format('woff'),url(fonts/KaTeX_Math-Italic.ttf) format('truetype');font-weight:400;font-style:italic}@font-face{font-family:KaTeX_SansSerif;src:url(fonts/KaTeX_SansSerif-Regular.eot);src:url(fonts/KaTeX_SansSerif-Regular.eot#iefix) format('embedded-opentype'),url(fonts/KaTeX_SansSerif-Regular.woff2) format('woff2'),url(fonts/KaTeX_SansSerif-Regular.woff) format('woff'),url(fonts/KaTeX_SansSerif-Regular.ttf) format('truetype');font-weight:400;font-style:normal}@font-face{font-family:KaTeX_Script;src:url(fonts/KaTeX_Script-Regular.eot);src:url(fonts/KaTeX_Script-Regular.eot#iefix) format('embedded-opentype'),url(fonts/KaTeX_Script-Regular.woff2) format('woff2'),url(fonts/KaTeX_Script-Regular.woff) format('woff'),url(fonts/KaTeX_Script-Regular.ttf) format('truetype');font-weight:400;font-style:normal}@font-face{font-family:KaTeX_Size1;src:url(fonts/KaTeX_Size1-Regular.eot);src:url(fonts/KaTeX_Size1-Regular.eot#iefix) format('embedded-opentype'),url(fonts/KaTeX_Size1-Regular.woff2) format('woff2'),url(fonts/KaTeX_Size1-Regular.woff) format('woff'),url(fonts/KaTeX_Size1-Regular.ttf) format('truetype');font-weight:400;font-style:normal}@font-face{font-family:KaTeX_Size2;src:url(fonts/KaTeX_Size2-Regular.eot);src:url(fonts/KaTeX_Size2-Regular.eot#iefix) format('embedded-opentype'),url(fonts/KaTeX_Size2-Regular.woff2) format('woff2'),url(fonts/KaTeX_Size2-Regular.woff) format('woff'),url(fonts/KaTeX_Size2-Regular.ttf) format('truetype');font-weight:400;font-style:normal}@font-face{font-family:KaTeX_Size3;src:url(fonts/KaTeX_Size3-Regular.eot);src:url(fonts/KaTeX_Size3-Regular.eot#iefix) format('embedded-opentype'),url(fonts/KaTeX_Size3-Regular.woff2) format('woff2'),url(fonts/KaTeX_Size3-Regular.woff) format('woff'),url(fonts/KaTeX_Size3-Regular.ttf) format('truetype');font-weight:400;font-style:normal}@font-face{font-family:KaTeX_Size4;src:url(fonts/KaTeX_Size4-Regular.eot);src:url(fonts/KaTeX_Size4-Regular.eot#iefix) format('embedded-opentype'),url(fonts/KaTeX_Size4-Regular.woff2) format('woff2'),url(fonts/KaTeX_Size4-Regular.woff) format('woff'),url(fonts/KaTeX_Size4-Regular.ttf) format('truetype');font-weight:400;font-style:normal}@font-face{font-family:KaTeX_Typewriter;src:url(fonts/KaTeX_Typewriter-Regular.eot);src:url(fonts/KaTeX_Typewriter-Regular.eot#iefix) format('embedded-opentype'),url(fonts/KaTeX_Typewriter-Regular.woff2) format('woff2'),url(fonts/KaTeX_Typewriter-Regular.woff) format('woff'),url(fonts/KaTeX_Typewriter-Regular.ttf) format('truetype');font-weight:400;font-style:normal}.katex-display{display:block;margin:1em 0;text-align:center}.katex-display>.katex{display:inline-block;text-align:initial}.katex{font:400 1.21em KaTeX_Main,Times New Roman,serif;line-height:1.2;white-space:nowrap;text-indent:0}.katex .katex-html{display:inline-block}.katex .katex-mathml{position:absolute;clip:rect(1px,1px,1px,1px);padding:0;border:0;height:1px;width:1px;overflow:hidden}.katex .base,.katex .strut{display:inline-block}.katex .mathrm{font-style:normal}.katex .textit{font-style:italic}.katex .mathit{font-family:KaTeX_Math;font-style:italic}.katex .mathbf{font-family:KaTeX_Main;font-weight:700}.katex .amsrm,.katex .mathbb{font-family:KaTeX_AMS}.katex .mathcal{font-family:KaTeX_Caligraphic}.katex .mathfrak{font-family:KaTeX_Fraktur}.katex .mathtt{font-family:KaTeX_Typewriter}.katex .mathscr{font-family:KaTeX_Script}.katex .mathsf{font-family:KaTeX_SansSerif}.katex .mainit{font-family:KaTeX_Main;font-style:italic}.katex .mord+.mop{margin-left:.16667em}.katex .mord+.mbin{margin-left:.22222em}.katex .mord+.mrel{margin-left:.27778em}.katex .mop+.mop,.katex .mop+.mord,.katex .mord+.minner{margin-left:.16667em}.katex .mop+.mrel{margin-left:.27778em}.katex .mop+.minner{margin-left:.16667em}.katex .mbin+.minner,.katex .mbin+.mop,.katex .mbin+.mopen,.katex .mbin+.mord{margin-left:.22222em}.katex .mrel+.minner,.katex .mrel+.mop,.katex .mrel+.mopen,.katex .mrel+.mord{margin-left:.27778em}.katex .mclose+.mop{margin-left:.16667em}.katex .mclose+.mbin{margin-left:.22222em}.katex .mclose+.mrel{margin-left:.27778em}.katex .mclose+.minner,.katex .minner+.mop,.katex .minner+.mord,.katex .mpunct+.mclose,.katex .mpunct+.minner,.katex .mpunct+.mop,.katex .mpunct+.mopen,.katex .mpunct+.mord,.katex .mpunct+.mpunct,.katex .mpunct+.mrel{margin-left:.16667em}.katex .minner+.mbin{margin-left:.22222em}.katex .minner+.mrel{margin-left:.27778em}.katex .minner+.minner,.katex .minner+.mopen,.katex .minner+.mpunct{margin-left:.16667em}.katex .mbin.mtight,.katex .mclose.mtight,.katex .minner.mtight,.katex .mop.mtight,.katex .mopen.mtight,.katex .mord.mtight,.katex .mpunct.mtight,.katex .mrel.mtight{margin-left:0}.katex .mclose+.mop.mtight,.katex .minner+.mop.mtight,.katex .mop+.mop.mtight,.katex .mop+.mord.mtight,.katex .mord+.mop.mtight{margin-left:.16667em}.katex .reset-textstyle.textstyle{font-size:1em}.katex .reset-textstyle.scriptstyle{font-size:.7em}.katex .reset-textstyle.scriptscriptstyle{font-size:.5em}.katex .reset-scriptstyle.textstyle{font-size:1.42857em}.katex .reset-scriptstyle.scriptstyle{font-size:1em}.katex .reset-scriptstyle.scriptscriptstyle{font-size:.71429em}.katex .reset-scriptscriptstyle.textstyle{font-size:2em}.katex .reset-scriptscriptstyle.scriptstyle{font-size:1.4em}.katex .reset-scriptscriptstyle.scriptscriptstyle{font-size:1em}.katex .style-wrap{position:relative}.katex .vlist{display:inline-block}.katex .vlist>span{display:block;height:0;position:relative}.katex .vlist>span>span{display:inline-block}.katex .vlist .baseline-fix{display:inline-table;table-layout:fixed}.katex .msupsub{text-align:left}.katex .mfrac>span>span{text-align:center}.katex .mfrac .frac-line{width:100%}.katex .mfrac .frac-line:before{border-bottom-style:solid;border-bottom-width:1px;content:"";display:block}.katex .mfrac .frac-line:after{border-bottom-style:solid;border-bottom-width:.04em;content:"";display:block;margin-top:-1px}.katex .mspace{display:inline-block}.katex .mspace.negativethinspace{margin-left:-.16667em}.katex .mspace.thinspace{width:.16667em}.katex .mspace.negativemediumspace{margin-left:-.22222em}.katex .mspace.mediumspace{width:.22222em}.katex .mspace.thickspace{width:.27778em}.katex .mspace.sixmuspace{width:.333333em}.katex .mspace.eightmuspace{width:.444444em}.katex .mspace.enspace{width:.5em}.katex .mspace.twelvemuspace{width:.666667em}.katex .mspace.quad{width:1em}.katex .mspace.qquad{width:2em}.katex .llap,.katex .rlap{width:0;position:relative}.katex .llap>.inner,.katex .rlap>.inner{position:absolute}.katex .llap>.fix,.katex .rlap>.fix{display:inline-block}.katex .llap>.inner{right:0}.katex .rlap>.inner{left:0}.katex .katex-logo .a{font-size:.75em;margin-left:-.32em;position:relative;top:-.2em}.katex .katex-logo .t{margin-left:-.23em}.katex .katex-logo .e{margin-left:-.1667em;position:relative;top:.2155em}.katex .katex-logo .x{margin-left:-.125em}.katex .rule{display:inline-block;border:0 solid;position:relative}.katex .overline .overline-line,.katex .underline .underline-line{width:100%}.katex .overline .overline-line:before,.katex .underline .underline-line:before{border-bottom-style:solid;border-bottom-width:1px;content:"";display:block}.katex .overline .overline-line:after,.katex .underline .underline-line:after{border-bottom-style:solid;border-bottom-width:.04em;content:"";display:block;margin-top:-1px}.katex .sqrt>.sqrt-sign{position:relative}.katex .sqrt .sqrt-line{width:100%}.katex .sqrt .sqrt-line:before{border-bottom-style:solid;border-bottom-width:1px;content:"";display:block}.katex .sqrt .sqrt-line:after{border-bottom-style:solid;border-bottom-width:.04em;content:"";display:block;margin-top:-1px}.katex .sqrt>.root{margin-left:.27777778em;margin-right:-.55555556em}.katex .fontsize-ensurer,.katex .sizing{display:inline-block}.katex .fontsize-ensurer.reset-size1.size1,.katex .sizing.reset-size1.size1{font-size:1em}.katex .fontsize-ensurer.reset-size1.size2,.katex .sizing.reset-size1.size2{font-size:1.4em}.katex .fontsize-ensurer.reset-size1.size3,.katex .sizing.reset-size1.size3{font-size:1.6em}.katex .fontsize-ensurer.reset-size1.size4,.katex .sizing.reset-size1.size4{font-size:1.8em}.katex .fontsize-ensurer.reset-size1.size5,.katex .sizing.reset-size1.size5{font-size:2em}.katex .fontsize-ensurer.reset-size1.size6,.katex .sizing.reset-size1.size6{font-size:2.4em}.katex .fontsize-ensurer.reset-size1.size7,.katex .sizing.reset-size1.size7{font-size:2.88em}.katex .fontsize-ensurer.reset-size1.size8,.katex .sizing.reset-size1.size8{font-size:3.46em}.katex .fontsize-ensurer.reset-size1.size9,.katex .sizing.reset-size1.size9{font-size:4.14em}.katex .fontsize-ensurer.reset-size1.size10,.katex .sizing.reset-size1.size10{font-size:4.98em}.katex .fontsize-ensurer.reset-size2.size1,.katex .sizing.reset-size2.size1{font-size:.71428571em}.katex .fontsize-ensurer.reset-size2.size2,.katex .sizing.reset-size2.size2{font-size:1em}.katex .fontsize-ensurer.reset-size2.size3,.katex .sizing.reset-size2.size3{font-size:1.14285714em}.katex .fontsize-ensurer.reset-size2.size4,.katex .sizing.reset-size2.size4{font-size:1.28571429em}.katex .fontsize-ensurer.reset-size2.size5,.katex .sizing.reset-size2.size5{font-size:1.42857143em}.katex .fontsize-ensurer.reset-size2.size6,.katex .sizing.reset-size2.size6{font-size:1.71428571em}.katex .fontsize-ensurer.reset-size2.size7,.katex .sizing.reset-size2.size7{font-size:2.05714286em}.katex .fontsize-ensurer.reset-size2.size8,.katex .sizing.reset-size2.size8{font-size:2.47142857em}.katex .fontsize-ensurer.reset-size2.size9,.katex .sizing.reset-size2.size9{font-size:2.95714286em}.katex .fontsize-ensurer.reset-size2.size10,.katex .sizing.reset-size2.size10{font-size:3.55714286em}.katex .fontsize-ensurer.reset-size3.size1,.katex .sizing.reset-size3.size1{font-size:.625em}.katex .fontsize-ensurer.reset-size3.size2,.katex .sizing.reset-size3.size2{font-size:.875em}.katex .fontsize-ensurer.reset-size3.size3,.katex .sizing.reset-size3.size3{font-size:1em}.katex .fontsize-ensurer.reset-size3.size4,.katex .sizing.reset-size3.size4{font-size:1.125em}.katex .fontsize-ensurer.reset-size3.size5,.katex .sizing.reset-size3.size5{font-size:1.25em}.katex .fontsize-ensurer.reset-size3.size6,.katex .sizing.reset-size3.size6{font-size:1.5em}.katex .fontsize-ensurer.reset-size3.size7,.katex .sizing.reset-size3.size7{font-size:1.8em}.katex .fontsize-ensurer.reset-size3.size8,.katex .sizing.reset-size3.size8{font-size:2.1625em}.katex .fontsize-ensurer.reset-size3.size9,.katex .sizing.reset-size3.size9{font-size:2.5875em}.katex .fontsize-ensurer.reset-size3.size10,.katex .sizing.reset-size3.size10{font-size:3.1125em}.katex .fontsize-ensurer.reset-size4.size1,.katex .sizing.reset-size4.size1{font-size:.55555556em}.katex .fontsize-ensurer.reset-size4.size2,.katex .sizing.reset-size4.size2{font-size:.77777778em}.katex .fontsize-ensurer.reset-size4.size3,.katex .sizing.reset-size4.size3{font-size:.88888889em}.katex .fontsize-ensurer.reset-size4.size4,.katex .sizing.reset-size4.size4{font-size:1em}.katex .fontsize-ensurer.reset-size4.size5,.katex .sizing.reset-size4.size5{font-size:1.11111111em}.katex .fontsize-ensurer.reset-size4.size6,.katex .sizing.reset-size4.size6{font-size:1.33333333em}.katex .fontsize-ensurer.reset-size4.size7,.katex .sizing.reset-size4.size7{font-size:1.6em}.katex .fontsize-ensurer.reset-size4.size8,.katex .sizing.reset-size4.size8{font-size:1.92222222em}.katex .fontsize-ensurer.reset-size4.size9,.katex .sizing.reset-size4.size9{font-size:2.3em}.katex .fontsize-ensurer.reset-size4.size10,.katex .sizing.reset-size4.size10{font-size:2.76666667em}.katex .fontsize-ensurer.reset-size5.size1,.katex .sizing.reset-size5.size1{font-size:.5em}.katex .fontsize-ensurer.reset-size5.size2,.katex .sizing.reset-size5.size2{font-size:.7em}.katex .fontsize-ensurer.reset-size5.size3,.katex .sizing.reset-size5.size3{font-size:.8em}.katex .fontsize-ensurer.reset-size5.size4,.katex .sizing.reset-size5.size4{font-size:.9em}.katex .fontsize-ensurer.reset-size5.size5,.katex .sizing.reset-size5.size5{font-size:1em}.katex .fontsize-ensurer.reset-size5.size6,.katex .sizing.reset-size5.size6{font-size:1.2em}.katex .fontsize-ensurer.reset-size5.size7,.katex .sizing.reset-size5.size7{font-size:1.44em}.katex .fontsize-ensurer.reset-size5.size8,.katex .sizing.reset-size5.size8{font-size:1.73em}.katex .fontsize-ensurer.reset-size5.size9,.katex .sizing.reset-size5.size9{font-size:2.07em}.katex .fontsize-ensurer.reset-size5.size10,.katex .sizing.reset-size5.size10{font-size:2.49em}.katex .fontsize-ensurer.reset-size6.size1,.katex .sizing.reset-size6.size1{font-size:.41666667em}.katex .fontsize-ensurer.reset-size6.size2,.katex .sizing.reset-size6.size2{font-size:.58333333em}.katex .fontsize-ensurer.reset-size6.size3,.katex .sizing.reset-size6.size3{font-size:.66666667em}.katex .fontsize-ensurer.reset-size6.size4,.katex .sizing.reset-size6.size4{font-size:.75em}.katex .fontsize-ensurer.reset-size6.size5,.katex .sizing.reset-size6.size5{font-size:.83333333em}.katex .fontsize-ensurer.reset-size6.size6,.katex .sizing.reset-size6.size6{font-size:1em}.katex .fontsize-ensurer.reset-size6.size7,.katex .sizing.reset-size6.size7{font-size:1.2em}.katex .fontsize-ensurer.reset-size6.size8,.katex .sizing.reset-size6.size8{font-size:1.44166667em}.katex .fontsize-ensurer.reset-size6.size9,.katex .sizing.reset-size6.size9{font-size:1.725em}.katex .fontsize-ensurer.reset-size6.size10,.katex .sizing.reset-size6.size10{font-size:2.075em}.katex .fontsize-ensurer.reset-size7.size1,.katex .sizing.reset-size7.size1{font-size:.34722222em}.katex .fontsize-ensurer.reset-size7.size2,.katex .sizing.reset-size7.size2{font-size:.48611111em}.katex .fontsize-ensurer.reset-size7.size3,.katex .sizing.reset-size7.size3{font-size:.55555556em}.katex .fontsize-ensurer.reset-size7.size4,.katex .sizing.reset-size7.size4{font-size:.625em}.katex .fontsize-ensurer.reset-size7.size5,.katex .sizing.reset-size7.size5{font-size:.69444444em}.katex .fontsize-ensurer.reset-size7.size6,.katex .sizing.reset-size7.size6{font-size:.83333333em}.katex .fontsize-ensurer.reset-size7.size7,.katex .sizing.reset-size7.size7{font-size:1em}.katex .fontsize-ensurer.reset-size7.size8,.katex .sizing.reset-size7.size8{font-size:1.20138889em}.katex .fontsize-ensurer.reset-size7.size9,.katex .sizing.reset-size7.size9{font-size:1.4375em}.katex .fontsize-ensurer.reset-size7.size10,.katex .sizing.reset-size7.size10{font-size:1.72916667em}.katex .fontsize-ensurer.reset-size8.size1,.katex .sizing.reset-size8.size1{font-size:.28901734em}.katex .fontsize-ensurer.reset-size8.size2,.katex .sizing.reset-size8.size2{font-size:.40462428em}.katex .fontsize-ensurer.reset-size8.size3,.katex .sizing.reset-size8.size3{font-size:.46242775em}.katex .fontsize-ensurer.reset-size8.size4,.katex .sizing.reset-size8.size4{font-size:.52023121em}.katex .fontsize-ensurer.reset-size8.size5,.katex .sizing.reset-size8.size5{font-size:.57803468em}.katex .fontsize-ensurer.reset-size8.size6,.katex .sizing.reset-size8.size6{font-size:.69364162em}.katex .fontsize-ensurer.reset-size8.size7,.katex .sizing.reset-size8.size7{font-size:.83236994em}.katex .fontsize-ensurer.reset-size8.size8,.katex .sizing.reset-size8.size8{font-size:1em}.katex .fontsize-ensurer.reset-size8.size9,.katex .sizing.reset-size8.size9{font-size:1.19653179em}.katex .fontsize-ensurer.reset-size8.size10,.katex .sizing.reset-size8.size10{font-size:1.43930636em}.katex .fontsize-ensurer.reset-size9.size1,.katex .sizing.reset-size9.size1{font-size:.24154589em}.katex .fontsize-ensurer.reset-size9.size2,.katex .sizing.reset-size9.size2{font-size:.33816425em}.katex .fontsize-ensurer.reset-size9.size3,.katex .sizing.reset-size9.size3{font-size:.38647343em}.katex .fontsize-ensurer.reset-size9.size4,.katex .sizing.reset-size9.size4{font-size:.43478261em}.katex .fontsize-ensurer.reset-size9.size5,.katex .sizing.reset-size9.size5{font-size:.48309179em}.katex .fontsize-ensurer.reset-size9.size6,.katex .sizing.reset-size9.size6{font-size:.57971014em}.katex .fontsize-ensurer.reset-size9.size7,.katex .sizing.reset-size9.size7{font-size:.69565217em}.katex .fontsize-ensurer.reset-size9.size8,.katex .sizing.reset-size9.size8{font-size:.83574879em}.katex .fontsize-ensurer.reset-size9.size9,.katex .sizing.reset-size9.size9{font-size:1em}.katex .fontsize-ensurer.reset-size9.size10,.katex .sizing.reset-size9.size10{font-size:1.20289855em}.katex .fontsize-ensurer.reset-size10.size1,.katex .sizing.reset-size10.size1{font-size:.20080321em}.katex .fontsize-ensurer.reset-size10.size2,.katex .sizing.reset-size10.size2{font-size:.2811245em}.katex .fontsize-ensurer.reset-size10.size3,.katex .sizing.reset-size10.size3{font-size:.32128514em}.katex .fontsize-ensurer.reset-size10.size4,.katex .sizing.reset-size10.size4{font-size:.36144578em}.katex .fontsize-ensurer.reset-size10.size5,.katex .sizing.reset-size10.size5{font-size:.40160643em}.katex .fontsize-ensurer.reset-size10.size6,.katex .sizing.reset-size10.size6{font-size:.48192771em}.katex .fontsize-ensurer.reset-size10.size7,.katex .sizing.reset-size10.size7{font-size:.57831325em}.katex .fontsize-ensurer.reset-size10.size8,.katex .sizing.reset-size10.size8{font-size:.69477912em}.katex .fontsize-ensurer.reset-size10.size9,.katex .sizing.reset-size10.size9{font-size:.8313253em}.katex .fontsize-ensurer.reset-size10.size10,.katex .sizing.reset-size10.size10{font-size:1em}.katex .delimsizing.size1{font-family:KaTeX_Size1}.katex .delimsizing.size2{font-family:KaTeX_Size2}.katex .delimsizing.size3{font-family:KaTeX_Size3}.katex .delimsizing.size4{font-family:KaTeX_Size4}.katex .delimsizing.mult .delim-size1>span{font-family:KaTeX_Size1}.katex .delimsizing.mult .delim-size4>span{font-family:KaTeX_Size4}.katex .nulldelimiter{display:inline-block;width:.12em}.katex .op-symbol{position:relative}.katex .op-symbol.small-op{font-family:KaTeX_Size1}.katex .op-symbol.large-op{font-family:KaTeX_Size2}.katex .accent>.vlist>span,.katex .op-limits>.vlist>span{text-align:center}.katex .accent .accent-body>span{width:0}.katex .accent .accent-body.accent-vec>span{position:relative;left:.326em}.katex .mtable .vertical-separator{display:inline-block;margin:0 -.025em;border-right:.05em solid #000}.katex .mtable .arraycolsep{display:inline-block}.katex .mtable .col-align-c>.vlist{text-align:center}.katex .mtable .col-align-l>.vlist{text-align:left}.katex .mtable .col-align-r>.vlist{text-align:right} \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/scripts/ketcindyjs/katex/katex.min.js b/graphics/ketcindy/ketcindyfolder/scripts/ketcindyjs/katex/katex.min.js
new file mode 100644
index 0000000000..b66e0aca87
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/scripts/ketcindyjs/katex/katex.min.js
@@ -0,0 +1,5 @@
+(function(e){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=e()}else if(typeof define==="function"&&define.amd){define([],e)}else{var t;if(typeof window!=="undefined"){t=window}else if(typeof global!=="undefined"){t=global}else if(typeof self!=="undefined"){t=self}else{t=this}t.katex=e()}})(function(){var e,t,r;return function a(e,t,r){function i(n,l){if(!t[n]){if(!e[n]){var o=typeof require=="function"&&require;if(!l&&o)return o(n,!0);if(s)return s(n,!0);var u=new Error("Cannot find module '"+n+"'");throw u.code="MODULE_NOT_FOUND",u}var h=t[n]={exports:{}};e[n][0].call(h.exports,function(t){var r=e[n][1][t];return i(r?r:t)},h,h.exports,a,e,t,r)}return t[n].exports}var s=typeof require=="function"&&require;for(var n=0;n<r.length;n++)i(r[n]);return i}({1:[function(e,t,r){var a=e("./src/ParseError");var i=e("./src/Settings");var s=e("./src/buildHTML");var n=e("./src/buildTree");var l=e("./src/canvasRenderer");var o=e("./src/parseTree");var u=e("./src/utils");var h=function(e,t,r){u.clearNode(t);var a=new i(r);var s=o(e,a);var l=n(s,e,a).toNode();t.appendChild(l)};if(typeof document!=="undefined"){if(document.compatMode!=="CSS1Compat"){typeof console!=="undefined"&&console.warn("Warning: KaTeX doesn't work in quirks mode. Make sure your "+"website has a suitable doctype.");h=function(){throw new a("KaTeX doesn't work in quirks mode.")}}}var c=function(e,t){var r=new i(t);var a=o(e,r);return n(a,e,r).toMarkup()};var p=function(e,t,r,a,n){var u=new i(n);var h=o(e,u);var c=s(h,u.initialOptions());l.render(c,t,r,a,n)};var m=function(e,t,r){var a=new i(r);var n=o(e,a);var u=s(n,a.initialOptions());return l.prepare(u,t,r)};var f=function(e,t){var r=new i(t);return o(e,r)};t.exports={render:h,renderToString:c,renderToCanvas:p,canvasBox:m,__parse:f,ParseError:a}},{"./src/ParseError":6,"./src/Settings":8,"./src/buildHTML":11,"./src/buildTree":13,"./src/canvasRenderer":14,"./src/parseTree":23,"./src/utils":26}],2:[function(e,t,r){"use strict";function a(e){if(!e.__matchAtRelocatable){var t=e.source+"|()";var r="g"+(e.ignoreCase?"i":"")+(e.multiline?"m":"")+(e.unicode?"u":"");e.__matchAtRelocatable=new RegExp(t,r)}return e.__matchAtRelocatable}function i(e,t,r){if(e.global||e.sticky){throw new Error("matchAt(...): Only non-global regexes are supported")}var i=a(e);i.lastIndex=r;var s=i.exec(t);if(s[s.length-1]==null){s.length=s.length-1;return s}else{return null}}t.exports=i},{}],3:[function(e,t,r){var a=e("match-at");var i=e("./ParseError");function s(e){this.input=e;this.pos=0}function n(e,t,r,a){this.text=e;this.start=t;this.end=r;this.lexer=a}n.prototype.range=function(e,t){if(e.lexer!==this.lexer){return new n(t)}return new n(t,this.start,e.end,this.lexer)};var l=new RegExp("([ \r\n ]+)|"+"([!-\\[\\]-\u2027\u202a-\ud7ff\uf900-\uffff]"+"|[\ud800-\udbff][\udc00-\udfff]"+"|\\\\(?:[a-zA-Z]+|[^\ud800-\udfff])"+")");s.prototype.lex=function(){var e=this.input;var t=this.pos;if(t===e.length){return new n("EOF",t,t,this)}var r=a(l,e,t);if(r===null){throw new i("Unexpected character: '"+e[t]+"'",new n(e[t],t,t+1,this))}var s=r[2]||" ";var o=this.pos;this.pos+=r[0].length;var u=this.pos;return new n(s,o,u,this)};t.exports=s},{"./ParseError":6,"match-at":2}],4:[function(e,t,r){var a=e("./Lexer");function i(e,t){this.lexer=new a(e);this.macros=t;this.stack=[];this.discardedWhiteSpace=[]}i.prototype.nextToken=function(){for(;;){if(this.stack.length===0){this.stack.push(this.lexer.lex())}var e=this.stack.pop();var t=e.text;if(!(t.charAt(0)==="\\"&&this.macros.hasOwnProperty(t))){return e}var r=this.macros[t];if(typeof r==="string"){var i=new a(r);r=[];var s=i.lex();while(s.text!=="EOF"){r.push(s);s=i.lex()}r.reverse();this.macros[t]=r}this.stack=this.stack.concat(r)}};i.prototype.get=function(e){this.discardedWhiteSpace=[];var t=this.nextToken();if(e){while(t.text===" "){this.discardedWhiteSpace.push(t);t=this.nextToken()}}return t};i.prototype.unget=function(e){this.stack.push(e);while(this.discardedWhiteSpace.length!==0){this.stack.push(this.discardedWhiteSpace.pop())}};t.exports=i},{"./Lexer":3}],5:[function(e,t,r){function a(e){this.style=e.style;this.color=e.color;this.size=e.size;this.phantom=e.phantom;this.font=e.font;if(e.parentStyle===undefined){this.parentStyle=e.style}else{this.parentStyle=e.parentStyle}if(e.parentSize===undefined){this.parentSize=e.size}else{this.parentSize=e.parentSize}}a.prototype.extend=function(e){var t={style:this.style,size:this.size,color:this.color,parentStyle:this.style,parentSize:this.size,phantom:this.phantom,font:this.font};for(var r in e){if(e.hasOwnProperty(r)){t[r]=e[r]}}return new a(t)};a.prototype.withStyle=function(e){return this.extend({style:e})};a.prototype.withSize=function(e){return this.extend({size:e})};a.prototype.withColor=function(e){return this.extend({color:e})};a.prototype.withPhantom=function(){return this.extend({phantom:true})};a.prototype.withFont=function(e){return this.extend({font:e||this.font})};a.prototype.reset=function(){return this.extend({})};var i={"katex-blue":"#6495ed","katex-orange":"#ffa500","katex-pink":"#ff00af","katex-red":"#df0030","katex-green":"#28ae7b","katex-gray":"gray","katex-purple":"#9d38bd","katex-blueA":"#ccfaff","katex-blueB":"#80f6ff","katex-blueC":"#63d9ea","katex-blueD":"#11accd","katex-blueE":"#0c7f99","katex-tealA":"#94fff5","katex-tealB":"#26edd5","katex-tealC":"#01d1c1","katex-tealD":"#01a995","katex-tealE":"#208170","katex-greenA":"#b6ffb0","katex-greenB":"#8af281","katex-greenC":"#74cf70","katex-greenD":"#1fab54","katex-greenE":"#0d923f","katex-goldA":"#ffd0a9","katex-goldB":"#ffbb71","katex-goldC":"#ff9c39","katex-goldD":"#e07d10","katex-goldE":"#a75a05","katex-redA":"#fca9a9","katex-redB":"#ff8482","katex-redC":"#f9685d","katex-redD":"#e84d39","katex-redE":"#bc2612","katex-maroonA":"#ffbde0","katex-maroonB":"#ff92c6","katex-maroonC":"#ed5fa6","katex-maroonD":"#ca337c","katex-maroonE":"#9e034e","katex-purpleA":"#ddd7ff","katex-purpleB":"#c6b9fc","katex-purpleC":"#aa87ff","katex-purpleD":"#7854ab","katex-purpleE":"#543b78","katex-mintA":"#f5f9e8","katex-mintB":"#edf2df","katex-mintC":"#e0e5cc","katex-grayA":"#f6f7f7","katex-grayB":"#f0f1f2","katex-grayC":"#e3e5e6","katex-grayD":"#d6d8da","katex-grayE":"#babec2","katex-grayF":"#888d93","katex-grayG":"#626569","katex-grayH":"#3b3e40","katex-grayI":"#21242c","katex-kaBlue":"#314453","katex-kaGreen":"#71B307"};a.prototype.getColor=function(){if(this.phantom){return"transparent"}else{return i[this.color]||this.color}};t.exports=a},{}],6:[function(e,t,r){function a(e,t){var r="KaTeX parse error: "+e;var i;var s;if(t&&t.lexer&&t.start<=t.end){var n=t.lexer.input;i=t.start;s=t.end;if(i===n.length){r+=" at end of input: "}else{r+=" at position "+(i+1)+": "}var l=n.slice(i,s).replace(/[^]/g,"$&\u0332");var o;if(i>15){o="\u2026"+n.slice(i-15,i)}else{o=n.slice(0,i)}var u;if(s+15<n.length){u=n.slice(s,s+15)+"\u2026"}else{u=n.slice(s)}r+=o+l+u}var h=new Error(r);h.name="ParseError";h.__proto__=a.prototype;h.position=i;return h}a.prototype.__proto__=Error.prototype;t.exports=a},{}],7:[function(e,t,r){var a=e("./functions");var i=e("./environments");var s=e("./MacroExpander");var n=e("./symbols");var l=e("./utils");var o=e("./unicodeRegexes").cjkRegex;var u=e("./parseData");var h=e("./ParseError");function c(e,t){this.gullet=new s(e,t.macros);this.settings=t;this.leftrightDepth=0}var p=u.ParseNode;function m(e,t,r){this.result=e;this.isFunction=t;this.token=r}c.prototype.expect=function(e,t){if(this.nextToken.text!==e){throw new h("Expected '"+e+"', got '"+this.nextToken.text+"'",this.nextToken)}if(t!==false){this.consume()}};c.prototype.consume=function(){this.nextToken=this.gullet.get(this.mode==="math")};c.prototype.switchMode=function(e){this.gullet.unget(this.nextToken);this.mode=e;this.consume()};c.prototype.parse=function(){this.mode="math";this.consume();var e=this.parseInput();return e};c.prototype.parseInput=function(){var e=this.parseExpression(false);this.expect("EOF",false);return e};var f=["}","\\end","\\right","&","\\\\","\\cr"];c.prototype.parseExpression=function(e,t){var r=[];while(true){var i=this.nextToken;if(f.indexOf(i.text)!==-1){break}if(t&&i.text===t){break}if(e&&a[i.text]&&a[i.text].infix){break}var s=this.parseAtom();if(!s){if(!this.settings.throwOnError&&i.text[0]==="\\"){var n=this.handleUnsupportedCmd();r.push(n);continue}break}r.push(s)}return this.handleInfixNodes(r)};c.prototype.handleInfixNodes=function(e){var t=-1;var r;for(var a=0;a<e.length;a++){var i=e[a];if(i.type==="infix"){if(t!==-1){throw new h("only one infix operator per group",i.value.token)}t=a;r=i.value.replaceWith}}if(t!==-1){var s;var n;var l=e.slice(0,t);var o=e.slice(t+1);if(l.length===1&&l[0].type==="ordgroup"){s=l[0]}else{s=new p("ordgroup",l,this.mode)}if(o.length===1&&o[0].type==="ordgroup"){n=o[0]}else{n=new p("ordgroup",o,this.mode)}var u=this.callFunction(r,[s,n],null);return[new p(u.type,u,this.mode)]}else{return e}};var v=1;c.prototype.handleSupSubscript=function(e){var t=this.nextToken;var r=t.text;this.consume();var i=this.parseGroup();if(!i){if(!this.settings.throwOnError&&this.nextToken.text[0]==="\\"){return this.handleUnsupportedCmd()}else{throw new h("Expected group after '"+r+"'",t)}}else if(i.isFunction){var s=a[i.result].greediness;if(s>v){return this.parseFunction(i)}else{throw new h("Got function '"+i.result+"' with no arguments "+"as "+e,t)}}else{return i.result}};c.prototype.handleUnsupportedCmd=function(){var e=this.nextToken.text;var t=[];for(var r=0;r<e.length;r++){t.push(new p("textord",e[r],"text"))}var a=new p("text",{body:t,type:"text"},this.mode);var i=new p("color",{color:this.settings.errorColor,value:[a],type:"color"},this.mode);this.consume();return i};c.prototype.parseAtom=function(){var e=this.parseImplicitGroup();if(this.mode==="text"){return e}var t;var r;while(true){var a=this.nextToken;if(a.text==="\\limits"||a.text==="\\nolimits"){if(!e||e.type!=="op"){throw new h("Limit controls must follow a math operator",a)}else{var i=a.text==="\\limits";e.value.limits=i;e.value.alwaysHandleSupSub=true}this.consume()}else if(a.text==="^"){if(t){throw new h("Double superscript",a)}t=this.handleSupSubscript("superscript")}else if(a.text==="_"){if(r){throw new h("Double subscript",a)}r=this.handleSupSubscript("subscript")}else if(a.text==="'"){var s=new p("textord","\\prime",this.mode);var n=[s];this.consume();while(this.nextToken.text==="'"){n.push(s);this.consume()}t=new p("ordgroup",n,this.mode)}else{break}}if(t||r){return new p("supsub",{base:e,sup:t,sub:r},this.mode)}else{return e}};var d=["\\tiny","\\scriptsize","\\footnotesize","\\small","\\normalsize","\\large","\\Large","\\LARGE","\\huge","\\Huge"];var g=["\\displaystyle","\\textstyle","\\scriptstyle","\\scriptscriptstyle"];c.prototype.parseImplicitGroup=function(){var e=this.parseSymbol();if(e==null){return this.parseFunction()}var t=e.result;var r;if(t==="\\left"){var a=this.parseFunction(e);++this.leftrightDepth;r=this.parseExpression(false);--this.leftrightDepth;this.expect("\\right",false);var s=this.parseFunction();return new p("leftright",{body:r,left:a.value.value,right:s.value.value},this.mode)}else if(t==="\\begin"){var n=this.parseFunction(e);var o=n.value.name;if(!i.hasOwnProperty(o)){throw new h("No such environment: "+o,n.value.nameGroup)}var u=i[o];var c=this.parseArguments("\\begin{"+o+"}",u);var m={mode:this.mode,envName:o,parser:this,positions:c.pop()};var f=u.handler(m,c);this.expect("\\end",false);var v=this.nextToken;var y=this.parseFunction();if(y.value.name!==o){throw new h("Mismatch: \\begin{"+o+"} matched "+"by \\end{"+y.value.name+"}",v)}f.position=y.position;return f}else if(l.contains(d,t)){r=this.parseExpression(false);return new p("sizing",{size:"size"+(l.indexOf(d,t)+1),value:r},this.mode)}else if(l.contains(g,t)){r=this.parseExpression(true);return new p("styling",{style:t.slice(1,t.length-5),value:r},this.mode)}else{return this.parseFunction(e)}};c.prototype.parseFunction=function(e){if(!e){e=this.parseGroup()}if(e){if(e.isFunction){var t=e.result;var r=a[t];if(this.mode==="text"&&!r.allowedInText){throw new h("Can't use function '"+t+"' in text mode",e.token)}var i=this.parseArguments(t,r);var s=e.token;var n=this.callFunction(t,i,i.pop(),s);return new p(n.type,n,this.mode)}else{return e.result}}else{return null}};c.prototype.callFunction=function(e,t,r,i){var s={funcName:e,parser:this,positions:r,token:i};return a[e].handler(s,t)};c.prototype.parseArguments=function(e,t){var r=t.numArgs+t.numOptionalArgs;if(r===0){return[[this.pos]]}var i=t.greediness;var s=[this.pos];var n=[];for(var l=0;l<r;l++){var o=this.nextToken;var u=t.argTypes&&t.argTypes[l];var c;if(l<t.numOptionalArgs){if(u){c=this.parseGroupOfType(u,true)}else{c=this.parseGroup(true)}if(!c){n.push(null);s.push(this.pos);continue}}else{if(u){c=this.parseGroupOfType(u)}else{c=this.parseGroup()}if(!c){if(!this.settings.throwOnError&&this.nextToken.text[0]==="\\"){c=new m(this.handleUnsupportedCmd(this.nextToken.text),false)}else{throw new h("Expected group after '"+e+"'",o)}}}var p;if(c.isFunction){var f=a[c.result].greediness;if(f>i){p=this.parseFunction(c)}else{throw new h("Got function '"+c.result+"' as "+"argument to '"+e+"'",o)}}else{p=c.result}n.push(p);s.push(this.pos)}n.push(s);return n};c.prototype.parseGroupOfType=function(e,t){var r=this.mode;if(e==="original"){e=r}if(e==="color"){return this.parseColorGroup(t)}if(e==="size"){return this.parseSizeGroup(t)}this.switchMode(e);if(e==="text"){while(this.nextToken.text===" "){this.consume()}}var a=this.parseGroup(t);this.switchMode(r);return a};c.prototype.parseStringGroup=function(e,t){if(t&&this.nextToken.text!=="["){return null}var r=this.mode;this.mode="text";this.expect(t?"[":"{");var a="";var i=this.nextToken;var s=i;while(this.nextToken.text!==(t?"]":"}")){if(this.nextToken.text==="EOF"){throw new h("Unexpected end of input in "+e,i.range(this.nextToken,a))}s=this.nextToken;a+=s.text;this.consume()}this.mode=r;this.expect(t?"]":"}");return i.range(s,a)};c.prototype.parseRegexGroup=function(e,t){var r=this.mode;this.mode="text";var a=this.nextToken;var i=a;var s="";while(this.nextToken.text!=="EOF"&&e.test(s+this.nextToken.text)){i=this.nextToken;s+=i.text;this.consume()}if(s===""){throw new h("Invalid "+t+": '"+a.text+"'",a)}this.mode=r;return a.range(i,s)};c.prototype.parseColorGroup=function(e){var t=this.parseStringGroup("color",e);if(!t){return null}var r=/^(#[a-z0-9]+|[a-z]+)$/i.exec(t.text);if(!r){throw new h("Invalid color: '"+t.text+"'",t)}return new m(new p("color",r[0],this.mode),false)};c.prototype.parseSizeGroup=function(e){var t;if(!e&&this.nextToken.text!=="{"){t=this.parseRegexGroup(/^[-+]? *(?:$|\d+|\d+\.\d*|\.\d*) *[a-z]{0,2}$/,"size")}else{t=this.parseStringGroup("size",e)}if(!t){return null}var r=/([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/.exec(t.text);if(!r){throw new h("Invalid size: '"+t.text+"'",t)}var a={number:+(r[1]+r[2]),unit:r[3]};if(a.unit!=="em"&&a.unit!=="ex"&&a.unit!=="mu"){throw new h("Invalid unit: '"+a.unit+"'",t)}return new m(new p("color",a,this.mode),false)};c.prototype.parseGroup=function(e){var t=this.nextToken;if(this.nextToken.text===(e?"[":"{")){this.consume();var r=this.parseExpression(false,e?"]":null);var a=this.nextToken;this.expect(e?"]":"}");if(this.mode==="text"){this.formLigatures(r)}return new m(new p("ordgroup",r,this.mode,t,a),false)}else{return e?null:this.parseSymbol()}};c.prototype.formLigatures=function(e){var t;var r=e.length-1;for(t=0;t<r;++t){var a=e[t];var i=a.value;if(i==="-"&&e[t+1].value==="-"){if(t+1<r&&e[t+2].value==="-"){e.splice(t,3,new p("textord","---","text",a,e[t+2]));r-=2}else{e.splice(t,2,new p("textord","--","text",a,e[t+1]));r-=1}}if((i==="'"||i==="`")&&e[t+1].value===i){e.splice(t,2,new p("textord",i+i,"text",a,e[t+1]));r-=1}}};c.prototype.parseSymbol=function(){var e=this.nextToken;if(a[e.text]){this.consume();return new m(e.text,true,e)}else if(n[this.mode][e.text]){this.consume();return new m(new p(n[this.mode][e.text].group,e.text,this.mode,e),false,e)}else if(this.mode==="text"&&o.test(e.text)){this.consume();return new m(new p("textord",e.text,this.mode,e),false,e)}else{return null}};c.prototype.ParseNode=p;t.exports=c},{"./MacroExpander":4,"./ParseError":6,"./environments":17,"./functions":20,"./parseData":22,"./symbols":24,"./unicodeRegexes":25,"./utils":26}],8:[function(e,t,r){var a=e("./Options");var i=e("./Style");function s(e,t){return e===undefined?t:e}function n(e){e=e||{};this.displayMode=s(e.displayMode,false);this.throwOnError=s(e.throwOnError,true);this.errorColor=s(e.errorColor,"#cc0000");this.macros=e.macros||{}}n.prototype.initialOptions=function(){var e=i.TEXT;if(this.displayMode){e=i.DISPLAY}var t=new a({style:e,size:"size5"});return t};t.exports=n},{"./Options":5,"./Style":9}],9:[function(e,t,r){var a=e("./fontMetrics.js").sigmas;var i=[{},{},{}];var s;for(var n in a){if(a.hasOwnProperty(n)){for(s=0;s<3;s++){i[s][n]=a[n][s]}}}for(s=0;s<3;s++){i[s].emPerEx=a.xHeight[s]/a.quad[s]}function l(e,t,r,a){this.id=e;this.size=t;this.cramped=a;this.sizeMultiplier=r;this.metrics=i[t>0?t-1:0]}l.prototype.sup=function(){return y[b[this.id]]};l.prototype.sub=function(){return y[w[this.id]]};l.prototype.fracNum=function(){return y[x[this.id]]};l.prototype.fracDen=function(){return y[k[this.id]]};l.prototype.cramp=function(){return y[z[this.id]]};l.prototype.cls=function(){return d[this.size]+(this.cramped?" cramped":" uncramped")};l.prototype.reset=function(){return g[this.size]};l.prototype.isTight=function(){return this.size>=2};var o=0;var u=1;var h=2;var c=3;var p=4;var m=5;var f=6;var v=7;var d=["displaystyle textstyle","textstyle","scriptstyle","scriptscriptstyle"];var g=["reset-textstyle","reset-textstyle","reset-scriptstyle","reset-scriptscriptstyle"];var y=[new l(o,0,1,false),new l(u,0,1,true),new l(h,1,1,false),new l(c,1,1,true),new l(p,2,.7,false),new l(m,2,.7,true),new l(f,3,.5,false),new l(v,3,.5,true)];var b=[p,m,p,m,f,v,f,v];var w=[m,m,m,m,v,v,v,v];var x=[h,c,p,m,f,v,f,v];var k=[c,c,m,m,v,v,v,v];var z=[u,u,c,c,m,m,v,v];t.exports={DISPLAY:y[o],TEXT:y[h],SCRIPT:y[p],SCRIPTSCRIPT:y[f]}},{"./fontMetrics.js":18}],10:[function(e,t,r){var a=e("./domTree");var i=e("./fontMetrics");var s=e("./symbols");var n=e("./utils");var l=["\\Gamma","\\Delta","\\Theta","\\Lambda","\\Xi","\\Pi","\\Sigma","\\Upsilon","\\Phi","\\Psi","\\Omega"];var o=["\u0131","\u0237","\xa3"];var u=function(e,t,r,n,l){if(s[r][e]&&s[r][e].replace){e=s[r][e].replace}var o=i.getCharacterMetrics(e,t);var u;if(o){var h=o.italic;if(r==="text"){h=0}u=new a.symbolNode(e,o.height,o.depth,h,o.skew,l)}else{typeof console!=="undefined"&&console.warn("No character metrics for '"+e+"' in style '"+t+"'");u=new a.symbolNode(e,0,0,0,0,l)}if(n){if(n.style.isTight()){u.classes.push("mtight")}if(n.getColor()){u.style.color=n.getColor()}}return u};var h=function(e,t,r,a){if(e==="\\"||s[t][e].font==="main"){return u(e,"Main-Regular",t,r,a)}else{return u(e,"AMS-Regular",t,r,a.concat(["amsrm"]))}};var c=function(e,t,r,a,i){if(i==="mathord"){return p(e,t,r,a)}else if(i==="textord"){return u(e,"Main-Regular",t,r,a.concat(["mathrm"]))}else{throw new Error("unexpected type: "+i+" in mathDefault")}};var p=function(e,t,r,a){if(/[0-9]/.test(e.charAt(0))||n.contains(o,e)||n.contains(l,e)){return u(e,"Main-Italic",t,r,a.concat(["mainit"]))}else{return u(e,"Math-Italic",t,r,a.concat(["mathit"]))}};var m=function(e,t,r){var a=e.mode;var l=e.value;if(s[a][l]&&s[a][l].replace){l=s[a][l].replace}var h=["mord"];var m=t.font;if(m){if(m==="mathit"||n.contains(o,l)){return p(l,a,t,h)}else{var f=k[m].fontName;if(i.getCharacterMetrics(l,f)){return u(l,f,a,t,h.concat([m]))}else{return c(l,a,t,h,r)}}}else{return c(l,a,t,h,r)}};var f=function(e){var t=0;var r=0;var a=0;if(e.children){for(var i=0;i<e.children.length;i++){if(e.children[i].height>t){t=e.children[i].height}if(e.children[i].depth>r){r=e.children[i].depth}if(e.children[i].maxFontSize>a){a=e.children[i].maxFontSize}}}e.height=t;e.depth=r;e.maxFontSize=a};var v=function(e,t,r){var i=new a.span(e,t,r);f(i);return i};var d=function(e,t){e.children=t.concat(e.children);f(e)};var g=function(e){var t=new a.documentFragment(e);f(t);return t};var y=function(e,t){var r=v([],[new a.symbolNode("\u200b")]);r.style.fontSize=t/e.style.sizeMultiplier+"em";var i=v(["fontsize-ensurer","reset-"+e.size,"size5"],[r]);return i};var b=function(e,t,r,i){var s;var n;var l;if(t==="individualShift"){var o=e;e=[o[0]];s=-o[0].shift-o[0].elem.depth;n=s;for(l=1;l<o.length;l++){var u=-o[l].shift-n-o[l].elem.depth;var h=u-(o[l-1].elem.height+o[l-1].elem.depth);n=n+u;e.push({type:"kern",size:h});e.push(o[l])}}else if(t==="top"){var c=r;for(l=0;l<e.length;l++){if(e[l].type==="kern"){c-=e[l].size}else{c-=e[l].elem.height+e[l].elem.depth}}s=c}else if(t==="bottom"){s=-r}else if(t==="shift"){s=-e[0].elem.depth-r}else if(t==="firstBaseline"){s=-e[0].elem.depth}else{s=0}var p=0;for(l=0;l<e.length;l++){if(e[l].type==="elem"){p=Math.max(p,e[l].elem.maxFontSize)}}var m=y(i,p);var f=[];n=s;for(l=0;l<e.length;l++){if(e[l].type==="kern"){n+=e[l].size}else{var d=e[l].elem;var g=-d.depth-n;n+=d.height+d.depth;var b=v([],[m,d]);b.height-=g;b.depth+=g;b.style.top=g+"em";f.push(b)}}var w=v(["baseline-fix"],[m,new a.symbolNode("\u200b")]);f.push(w);var x=v(["vlist"],f);x.height=Math.max(n,x.height);x.depth=Math.max(-s,x.depth);return x};var w={size1:.5,size2:.7,size3:.8,size4:.9,size5:1,size6:1.2,size7:1.44,size8:1.73,size9:2.07,size10:2.49};var x={"\\qquad":{size:"2em",className:"qquad"},"\\quad":{size:"1em",className:"quad"},"\\enspace":{size:"0.5em",className:"enspace"},"\\;":{size:"0.277778em",className:"thickspace"},"\\:":{size:"0.22222em",className:"mediumspace"},"\\,":{size:"0.16667em",className:"thinspace"},"\\!":{size:"-0.16667em",className:"negativethinspace"}};var k={mathbf:{variant:"bold",fontName:"Main-Bold"},mathrm:{variant:"normal",fontName:"Main-Regular"},textit:{variant:"italic",fontName:"Main-Italic"},mathbb:{variant:"double-struck",fontName:"AMS-Regular"},mathcal:{variant:"script",fontName:"Caligraphic-Regular"},mathfrak:{variant:"fraktur",fontName:"Fraktur-Regular"},mathscr:{variant:"script",fontName:"Script-Regular"},mathsf:{variant:"sans-serif",fontName:"SansSerif-Regular"},mathtt:{variant:"monospace",fontName:"Typewriter-Regular"}};t.exports={fontMap:k,makeSymbol:u,mathsym:h,makeSpan:v,makeFragment:g,makeVList:b,makeOrd:m,prependChildren:d,sizingMultiplier:w,spacingFunctions:x}},{"./domTree":16,"./fontMetrics":18,"./symbols":24,"./utils":26}],11:[function(e,t,r){var a=e("./ParseError");var i=e("./Style");var s=e("./buildCommon");var n=e("./delimiter");var l=e("./domTree");var o=e("./fontMetrics");var u=e("./utils");var h=s.makeSpan;var c=function(e){return e instanceof l.span&&e.classes[0]==="mspace"};var p=function(e){return e&&e.classes[0]==="mbin"};var m=function(e,t){if(e){return u.contains(["mbin","mopen","mrel","mop","mpunct"],e.classes[0])}else{return t}};var f=function(e,t){if(e){return u.contains(["mrel","mclose","mpunct"],e.classes[0])}else{return t}};var v=function(e,t,r){var a=[];for(var i=0;i<e.length;i++){var n=e[i];var o=z(n,t);if(o instanceof l.documentFragment){Array.prototype.push.apply(a,o.children)}else{a.push(o)}}var u=null;for(i=0;i<a.length;i++){if(c(a[i])){u=u||[];u.push(a[i]);a.splice(i,1);i--}else if(u){if(a[i]instanceof l.symbolNode){a[i]=h([].concat(a[i].classes),[a[i]])}s.prependChildren(a[i],u);u=null}}if(u){Array.prototype.push.apply(a,u)}for(i=0;i<a.length;i++){if(p(a[i])&&(m(a[i-1],r)||f(a[i+1],r))){a[i].classes[0]="mord"}}return a};var d=function(e){if(e instanceof l.documentFragment){if(e.children.length){return d(e.children[e.children.length-1])}}else{if(u.contains(["mord","mop","mbin","mrel","mopen","mclose","mpunct","minner"],e.classes[0])){return e.classes[0]}}return null};var g=function(e,t){if(!e){return false}else if(e.type==="op"){return e.value.limits&&(t.style.size===i.DISPLAY.size||e.value.alwaysHandleSupSub)}else if(e.type==="accent"){return b(e.value.base)}else{return null}};var y=function(e){if(!e){return false}else if(e.type==="ordgroup"){if(e.value.length===1){return y(e.value[0])}else{return e}}else if(e.type==="color"){if(e.value.value.length===1){return y(e.value.value[0])}else{return e}}else if(e.type==="font"){return y(e.value.body)}else{return e}};var b=function(e){var t=y(e);return t.type==="mathord"||t.type==="textord"||t.type==="bin"||t.type==="rel"||t.type==="inner"||t.type==="open"||t.type==="close"||t.type==="punct"};var w=function(e,t){return h(t.concat(["sizing","reset-"+e.size,"size5",e.style.reset(),i.TEXT.cls(),"nulldelimiter"]))};var x={};x.mathord=function(e,t){return s.makeOrd(e,t,"mathord")};x.textord=function(e,t){return s.makeOrd(e,t,"textord")};x.bin=function(e,t){return s.mathsym(e.value,e.mode,t,["mbin"])};x.rel=function(e,t){return s.mathsym(e.value,e.mode,t,["mrel"])};x.open=function(e,t){return s.mathsym(e.value,e.mode,t,["mopen"])};x.close=function(e,t){return s.mathsym(e.value,e.mode,t,["mclose"])};x.inner=function(e,t){return s.mathsym(e.value,e.mode,t,["minner"])};x.punct=function(e,t){return s.mathsym(e.value,e.mode,t,["mpunct"])};x.ordgroup=function(e,t){return h(["mord",t.style.cls()],v(e.value,t.reset(),true),t)};x.text=function(e,t){var r=t.withFont(e.value.style);var a=v(e.value.body,r,true);for(var i=0;i<a.length-1;i++){if(a[i].tryCombine(a[i+1])){a.splice(i+1,1);i--}}return h(["mord","text",r.style.cls()],a,r)};x.color=function(e,t){var r=v(e.value.value,t.withColor(e.value.color),false);return new s.makeFragment(r)};x.supsub=function(e,t){if(g(e.value.base,t)){return x[e.value.base.type](e,t)}var r=z(e.value.base,t.reset());var a;var n;var u;var c;var p=t.style;var m;if(e.value.sup){m=t.withStyle(p.sup());u=z(e.value.sup,m);a=h([p.reset(),p.sup().cls()],[u],m)}if(e.value.sub){m=t.withStyle(p.sub());c=z(e.value.sub,m);n=h([p.reset(),p.sub().cls()],[c],m)}var f;var v;if(b(e.value.base)){f=0;v=0}else{f=r.height-p.metrics.supDrop;v=r.depth+p.metrics.subDrop}var y;if(p===i.DISPLAY){y=p.metrics.sup1}else if(p.cramped){y=p.metrics.sup3}else{y=p.metrics.sup2}var w=i.TEXT.sizeMultiplier*p.sizeMultiplier;var k=.5/o.metrics.ptPerEm/w+"em";var S;if(!e.value.sup){v=Math.max(v,p.metrics.sub1,c.height-.8*p.metrics.xHeight);S=s.makeVList([{type:"elem",elem:n}],"shift",v,t);S.children[0].style.marginRight=k;if(r instanceof l.symbolNode){S.children[0].style.marginLeft=-r.italic+"em"}}else if(!e.value.sub){f=Math.max(f,y,u.depth+.25*p.metrics.xHeight);S=s.makeVList([{type:"elem",elem:a}],"shift",-f,t);S.children[0].style.marginRight=k}else{f=Math.max(f,y,u.depth+.25*p.metrics.xHeight);v=Math.max(v,p.metrics.sub2);var M=o.metrics.defaultRuleThickness;if(f-u.depth-(c.height-v)<4*M){v=4*M-(f-u.depth)+c.height;var T=.8*p.metrics.xHeight-(f-u.depth);if(T>0){f+=T;v-=T}}S=s.makeVList([{type:"elem",elem:n,shift:v},{type:"elem",elem:a,shift:-f}],"individualShift",null,t);if(r instanceof l.symbolNode){S.children[0].style.marginLeft=-r.italic+"em"}S.children[0].style.marginRight=k;S.children[1].style.marginRight=k}var A=d(r)||"mord";return h([A],[r,h(["msupsub"],[S])],t)};x.genfrac=function(e,t){var r=t.style;if(e.value.size==="display"){r=i.DISPLAY}else if(e.value.size==="text"){r=i.TEXT}var a=r.fracNum();var l=r.fracDen();var u;u=t.withStyle(a);var c=z(e.value.numer,u);var p=h([r.reset(),a.cls()],[c],u);u=t.withStyle(l);var m=z(e.value.denom,u);var f=h([r.reset(),l.cls()],[m],u);var v;if(e.value.hasBarLine){v=o.metrics.defaultRuleThickness/t.style.sizeMultiplier}else{v=0}var d;var g;var y;if(r.size===i.DISPLAY.size){d=r.metrics.num1;if(v>0){g=3*v}else{g=7*o.metrics.defaultRuleThickness}y=r.metrics.denom1}else{if(v>0){d=r.metrics.num2;g=v}else{d=r.metrics.num3;g=3*o.metrics.defaultRuleThickness}y=r.metrics.denom2}var b;if(v===0){var x=d-c.depth-(m.height-y);if(x<g){d+=.5*(g-x);y+=.5*(g-x)}b=s.makeVList([{type:"elem",elem:f,shift:y},{type:"elem",elem:p,shift:-d}],"individualShift",null,t)}else{var k=r.metrics.axisHeight;if(d-c.depth-(k+.5*v)<g){d+=g-(d-c.depth-(k+.5*v))}if(k-.5*v-(m.height-y)<g){y+=g-(k-.5*v-(m.height-y))}var S=h([t.style.reset(),i.TEXT.cls(),"frac-line"]);S.height=v;var M=-(k-.5*v);b=s.makeVList([{type:"elem",elem:f,shift:y},{type:"elem",elem:S,shift:M},{type:"elem",elem:p,shift:-d}],"individualShift",null,t)}b.height*=r.sizeMultiplier/t.style.sizeMultiplier;b.depth*=r.sizeMultiplier/t.style.sizeMultiplier;var T;if(r.size===i.DISPLAY.size){T=r.metrics.delim1}else{T=r.metrics.delim2}var A;var N;if(e.value.leftDelim==null){A=w(t,["mopen"])}else{A=n.customSizedDelim(e.value.leftDelim,T,true,t.withStyle(r),e.mode,["mopen"])}if(e.value.rightDelim==null){N=w(t,["mclose"])}else{N=n.customSizedDelim(e.value.rightDelim,T,true,t.withStyle(r),e.mode,["mclose"])}return h(["mord",t.style.reset(),r.cls()],[A,h(["mfrac"],[b]),N],t)};var k=function(e,t){var r=e.number;if(e.unit==="ex"){r*=t.metrics.emPerEx}else if(e.unit==="mu"){r/=18}return r};x.array=function(e,t){var r;var i;var n=e.value.body.length;var l=0;var c=new Array(n);var p=t.style;var m=1/o.metrics.ptPerEm;var f=5*m;var v=12*m;var d=u.deflt(e.value.arraystretch,1);var g=d*v;var y=.7*g;var b=.3*g;var w=0;for(r=0;r<e.value.body.length;++r){var x=e.value.body[r];var S=y;var M=b;if(l<x.length){l=x.length}var T=new Array(x.length);for(i=0;i<x.length;++i){var A=z(x[i],t);if(M<A.depth){M=A.depth}if(S<A.height){S=A.height}T[i]=A}var N=0;if(e.value.rowGaps[r]){N=k(e.value.rowGaps[r].value,p);if(N>0){N+=b;if(M<N){M=N}N=0}}T.height=S;T.depth=M;w+=S;T.pos=w;w+=M+N;c[r]=T}var q=w/2+p.metrics.axisHeight;var C=e.value.cols||[];var R=[];var E;var O;for(i=0,O=0;i<l||O<C.length;++i,++O){var D=C[O]||{};var F=true;while(D.type==="separator"){if(!F){E=h(["arraycolsep"],[]);E.style.width=o.metrics.doubleRuleSep+"em";R.push(E)}if(D.separator==="|"){var P=h(["vertical-separator"],[]);P.style.height=w+"em";P.style.verticalAlign=-(w-q)+"em";R.push(P)}else{throw new a("Invalid separator type: "+D.separator)}O++;D=C[O]||{};F=false}if(i>=l){continue}var L;if(i>0||e.value.hskipBeforeAndAfter){L=u.deflt(D.pregap,f);if(L!==0){E=h(["arraycolsep"],[]);E.style.width=L+"em";R.push(E)}}var _=[];for(r=0;r<n;++r){var I=c[r];var B=I[i];if(!B){continue}var X=I.pos-q;B.depth=I.depth;B.height=I.height;_.push({type:"elem",elem:B,shift:X})}_=s.makeVList(_,"individualShift",null,t);_=h(["col-align-"+(D.align||"c")],[_]);R.push(_);if(i<l-1||e.value.hskipBeforeAndAfter){L=u.deflt(D.postgap,f);if(L!==0){E=h(["arraycolsep"],[]);E.style.width=L+"em";R.push(E)}}}c=h(["mtable"],R);return h(["mord"],[c],t)};x.spacing=function(e,t){if(e.value==="\\ "||e.value==="\\space"||e.value===" "||e.value==="~"){if(e.mode==="text"){return s.makeOrd(e,t,"textord")}else{return h(["mspace"],[s.mathsym(e.value,e.mode,t)],t)}}else{return h(["mspace",s.spacingFunctions[e.value].className],[],t)}};x.llap=function(e,t){var r=h(["inner"],[z(e.value.body,t.reset())]);var a=h(["fix"],[]);return h(["mord","llap",t.style.cls()],[r,a],t)};x.rlap=function(e,t){var r=h(["inner"],[z(e.value.body,t.reset())]);var a=h(["fix"],[]);return h(["mord","rlap",t.style.cls()],[r,a],t)};x.op=function(e,t){var r;var a;var n=false;if(e.type==="supsub"){r=e.value.sup;a=e.value.sub;e=e.value.base;n=true}var l=t.style;var c=["\\smallint"];var p=false;if(l.size===i.DISPLAY.size&&e.value.symbol&&!u.contains(c,e.value.body)){p=true}var m;var f=0;var d=0;if(e.value.symbol){var g=p?"Size2-Regular":"Size1-Regular";m=s.makeSymbol(e.value.body,g,"math",t,["mop","op-symbol",p?"large-op":"small-op"]);f=(m.height-m.depth)/2-l.metrics.axisHeight*l.sizeMultiplier;d=m.italic}else if(e.value.value){var y=v(e.value.value,t,true);m=h(["mop"],y,t)}else{var b=[];for(var w=1;w<e.value.body.length;w++){b.push(s.mathsym(e.value.body[w],e.mode))}m=h(["mop"],b,t)}if(n){m=h([],[m]);var x;var k;var S;var M;var T;if(r){T=t.withStyle(l.sup());var A=z(r,T);x=h([l.reset(),l.sup().cls()],[A],T);k=Math.max(o.metrics.bigOpSpacing1,o.metrics.bigOpSpacing3-A.depth)}if(a){T=t.withStyle(l.sub());var N=z(a,T);S=h([l.reset(),l.sub().cls()],[N],T);M=Math.max(o.metrics.bigOpSpacing2,o.metrics.bigOpSpacing4-N.height);
+}var q;var C;var R;if(!r){C=m.height-f;q=s.makeVList([{type:"kern",size:o.metrics.bigOpSpacing5},{type:"elem",elem:S},{type:"kern",size:M},{type:"elem",elem:m}],"top",C,t);q.children[0].style.marginLeft=-d+"em"}else if(!a){R=m.depth+f;q=s.makeVList([{type:"elem",elem:m},{type:"kern",size:k},{type:"elem",elem:x},{type:"kern",size:o.metrics.bigOpSpacing5}],"bottom",R,t);q.children[1].style.marginLeft=d+"em"}else if(!r&&!a){return m}else{R=o.metrics.bigOpSpacing5+S.height+S.depth+M+m.depth+f;q=s.makeVList([{type:"kern",size:o.metrics.bigOpSpacing5},{type:"elem",elem:S},{type:"kern",size:M},{type:"elem",elem:m},{type:"kern",size:k},{type:"elem",elem:x},{type:"kern",size:o.metrics.bigOpSpacing5}],"bottom",R,t);q.children[0].style.marginLeft=-d+"em";q.children[2].style.marginLeft=d+"em"}return h(["mop","op-limits"],[q],t)}else{if(e.value.symbol){m.style.top=f+"em"}return m}};x.mod=function(e,t){var r=[];if(e.value.modType==="bmod"){if(!t.style.isTight()){r.push(h(["mspace","negativemediumspace"],[],t))}r.push(h(["mspace","thickspace"],[],t))}else if(t.style.size===i.DISPLAY.size){r.push(h(["mspace","quad"],[],t))}else if(e.value.modType==="mod"){r.push(h(["mspace","twelvemuspace"],[],t))}else{r.push(h(["mspace","eightmuspace"],[],t))}if(e.value.modType==="pod"||e.value.modType==="pmod"){r.push(s.mathsym("(",e.mode))}if(e.value.modType!=="pod"){var a=[s.mathsym("m",e.mode),s.mathsym("o",e.mode),s.mathsym("d",e.mode)];if(e.value.modType==="bmod"){r.push(h(["mbin"],a,t));r.push(h(["mspace","thickspace"],[],t));if(!t.style.isTight()){r.push(h(["mspace","negativemediumspace"],[],t))}}else{Array.prototype.push.apply(r,a);r.push(h(["mspace","sixmuspace"],[],t))}}if(e.value.value){Array.prototype.push.apply(r,v(e.value.value,t,false))}if(e.value.modType==="pod"||e.value.modType==="pmod"){r.push(s.mathsym(")",e.mode))}return s.makeFragment(r)};x.katex=function(e,t){var r=h(["k"],[s.mathsym("K",e.mode)],t);var a=h(["a"],[s.mathsym("A",e.mode)],t);a.height=(a.height+.2)*.75;a.depth=(a.height-.2)*.75;var i=h(["t"],[s.mathsym("T",e.mode)],t);var n=h(["e"],[s.mathsym("E",e.mode)],t);n.height=n.height-.2155;n.depth=n.depth+.2155;var l=h(["x"],[s.mathsym("X",e.mode)],t);return h(["mord","katex-logo"],[r,a,i,n,l],t)};x.overline=function(e,t){var r=t.style;var a=z(e.value.body,t.withStyle(r.cramp()));var n=o.metrics.defaultRuleThickness/r.sizeMultiplier;var l=h([r.reset(),i.TEXT.cls(),"overline-line"]);l.height=n;l.maxFontSize=1;var u=s.makeVList([{type:"elem",elem:a},{type:"kern",size:3*n},{type:"elem",elem:l},{type:"kern",size:n}],"firstBaseline",null,t);return h(["mord","overline"],[u],t)};x.underline=function(e,t){var r=t.style;var a=z(e.value.body,t);var n=o.metrics.defaultRuleThickness/r.sizeMultiplier;var l=h([r.reset(),i.TEXT.cls(),"underline-line"]);l.height=n;l.maxFontSize=1;var u=s.makeVList([{type:"kern",size:n},{type:"elem",elem:l},{type:"kern",size:3*n},{type:"elem",elem:a}],"top",a.height,t);return h(["mord","underline"],[u],t)};x.sqrt=function(e,t){var r=t.style;var a=z(e.value.body,t.withStyle(r.cramp()));var l=o.metrics.defaultRuleThickness/r.sizeMultiplier;var u=h([r.reset(),i.TEXT.cls(),"sqrt-line"],[],t);u.height=l;u.maxFontSize=1;var c=l;if(r.id<i.TEXT.id){c=r.metrics.xHeight}var p=l+c/4;var m=(a.height+a.depth)*r.sizeMultiplier;var f=m+p+l;var v=h(["sqrt-sign"],[n.customSizedDelim("\\surd",f,false,t,e.mode)],t);var d=v.height+v.depth-l;if(d>a.height+a.depth+p){p=(p+d-a.height-a.depth)/2}var g=-(a.height+p+l)+v.height;v.style.top=g+"em";v.height-=g;v.depth+=g;var y;if(a.height===0&&a.depth===0){y=h()}else{y=s.makeVList([{type:"elem",elem:a},{type:"kern",size:p},{type:"elem",elem:u},{type:"kern",size:l}],"firstBaseline",null,t)}if(!e.value.index){return h(["mord","sqrt"],[v,y],t)}else{var b=t.withStyle(i.SCRIPTSCRIPT);var w=z(e.value.index,b);var x=h([r.reset(),i.SCRIPTSCRIPT.cls()],[w],b);var k=Math.max(v.height,y.height);var S=Math.max(v.depth,y.depth);var M=.6*(k-S);var T=s.makeVList([{type:"elem",elem:x}],"shift",-M,t);var A=h(["root"],[T]);return h(["mord","sqrt"],[A,v,y],t)}};x.sizing=function(e,t){var r=v(e.value.value,t.withSize(e.value.size),false);var a=t.style;var i=s.sizingMultiplier[e.value.size];i=i*a.sizeMultiplier;for(var n=0;n<r.length;n++){var l=u.indexOf(r[n].classes,"sizing");if(l<0){r[n].classes.push("sizing","reset-"+t.size,e.value.size,a.cls());r[n].maxFontSize=i}else if(r[n].classes[l+1]==="reset-"+e.value.size){r[n].classes[l+1]="reset-"+t.size}}return s.makeFragment(r)};x.styling=function(e,t){var r={display:i.DISPLAY,text:i.TEXT,script:i.SCRIPT,scriptscript:i.SCRIPTSCRIPT};var a=r[e.value.style];var n=t.withStyle(a);var l=v(e.value.value,n,false);for(var o=0;o<l.length;o++){var h=u.indexOf(l[o].classes,a.reset());if(h<0){l[o].classes.push(t.style.reset(),a.cls())}else{l[o].classes[h]=t.style.reset()}}return new s.makeFragment(l)};x.font=function(e,t){var r=e.value.font;return z(e.value.body,t.withFont(r))};x.delimsizing=function(e,t){var r=e.value.value;if(r==="."){return h([e.value.mclass])}return n.sizedDelim(r,e.value.size,t,e.mode,[e.value.mclass])};x.leftright=function(e,t){var r=v(e.value.body,t.reset(),true);var a=0;var i=0;var s=false;for(var l=0;l<r.length;l++){if(r[l].isMiddle){s=true}else{a=Math.max(r[l].height,a);i=Math.max(r[l].depth,i)}}var o=t.style;a*=o.sizeMultiplier;i*=o.sizeMultiplier;var u;if(e.value.left==="."){u=w(t,["mopen"])}else{u=n.leftRightDelim(e.value.left,a,i,t,e.mode,["mopen"])}r.unshift(u);if(s){for(l=1;l<r.length;l++){if(r[l].isMiddle){r[l]=n.leftRightDelim(r[l].isMiddle.value,a,i,r[l].isMiddle.options,e.mode,[])}}}var c;if(e.value.right==="."){c=w(t,["mclose"])}else{c=n.leftRightDelim(e.value.right,a,i,t,e.mode,["mclose"])}r.push(c);return h(["minner",o.cls()],r,t)};x.middle=function(e,t){var r;if(e.value.value==="."){r=w(t,[])}else{r=n.sizedDelim(e.value.value,1,t,e.mode,[]);r.isMiddle={value:e.value.value,options:t}}return r};x.rule=function(e,t){var r=h(["mord","rule"],[],t);var a=t.style;var i=0;if(e.value.shift){i=k(e.value.shift,a)}var s=k(e.value.width,a);var n=k(e.value.height,a);i/=a.sizeMultiplier;s/=a.sizeMultiplier;n/=a.sizeMultiplier;r.style.borderRightWidth=s+"em";r.style.borderTopWidth=n+"em";r.style.bottom=i+"em";r.width=s;r.height=n+i;r.depth=-i;return r};x.kern=function(e,t){var r=h(["mord","rule"],[],t);var a=t.style;var i=0;if(e.value.dimension){i=k(e.value.dimension,a)}i/=a.sizeMultiplier;r.style.marginLeft=i+"em";return r};x.accent=function(e,t){var r=e.value.base;var a=t.style;var i;if(e.type==="supsub"){var n=e;e=n.value.base;r=e.value.base;n.value.base=r;i=z(n,t.reset())}var l=z(r,t.withStyle(a.cramp()));var o;if(b(r)){var u=y(r);var c=z(u,t.withStyle(a.cramp()));o=c.skew}else{o=0}var p=Math.min(l.height,a.metrics.xHeight);var m=s.makeSymbol(e.value.accent,"Main-Regular","math",t);m.italic=0;var f=e.value.accent==="\\vec"?"accent-vec":null;var v=h(["accent-body",f],[h([],[m])]);v=s.makeVList([{type:"elem",elem:l},{type:"kern",size:-p},{type:"elem",elem:v}],"firstBaseline",null,t);v.children[1].style.marginLeft=2*o+"em";var d=h(["mord","accent"],[v],t);if(i){i.children[0]=d;i.height=Math.max(d.height,i.height);i.classes[0]="mord";return i}else{return d}};x.phantom=function(e,t){var r=v(e.value.value,t.withPhantom(),false);return new s.makeFragment(r)};x.mclass=function(e,t){var r=v(e.value.value,t,true);return h([e.value.mclass],r,t)};var z=function(e,t){if(!e){return h()}if(x[e.type]){var r=x[e.type](e,t);var i;if(t.style!==t.parentStyle){i=t.style.sizeMultiplier/t.parentStyle.sizeMultiplier;r.height*=i;r.depth*=i}if(t.size!==t.parentSize){i=s.sizingMultiplier[t.size]/s.sizingMultiplier[t.parentSize];r.height*=i;r.depth*=i}return r}else{throw new a("Got group of unknown type: '"+e.type+"'")}};var S=function(e,t){e=JSON.parse(JSON.stringify(e));var r=v(e,t,true);var a=h(["base",t.style.cls()],r,t);var i=h(["strut"]);var s=h(["strut","bottom"]);i.style.height=a.height+"em";s.style.height=a.height+a.depth+"em";s.style.verticalAlign=-a.depth+"em";var n=h(["katex-html"],[i,s,a]);n.setAttribute("aria-hidden","true");return n};t.exports=S},{"./ParseError":6,"./Style":9,"./buildCommon":10,"./delimiter":15,"./domTree":16,"./fontMetrics":18,"./utils":26}],12:[function(e,t,r){var a=e("./buildCommon");var i=e("./fontMetrics");var s=e("./mathMLTree");var n=e("./ParseError");var l=e("./symbols");var o=e("./utils");var u=a.makeSpan;var h=a.fontMap;var c=function(e,t){if(l[t][e]&&l[t][e].replace){e=l[t][e].replace}return new s.TextNode(e)};var p=function(e,t){var r=t.font;if(!r){return null}var a=e.mode;if(r==="mathit"){return"italic"}var s=e.value;if(o.contains(["\\imath","\\jmath"],s)){return null}if(l[a][s]&&l[a][s].replace){s=l[a][s].replace}var n=h[r].fontName;if(i.getCharacterMetrics(s,n)){return h[t.font].variant}return null};var m={};m.mathord=function(e,t){var r=new s.MathNode("mi",[c(e.value,e.mode)]);var a=p(e,t);if(a){r.setAttribute("mathvariant",a)}return r};m.textord=function(e,t){var r=c(e.value,e.mode);var a=p(e,t)||"normal";var i;if(/[0-9]/.test(e.value)){i=new s.MathNode("mn",[r]);if(t.font){i.setAttribute("mathvariant",a)}}else{i=new s.MathNode("mi",[r]);i.setAttribute("mathvariant",a)}return i};m.bin=function(e){var t=new s.MathNode("mo",[c(e.value,e.mode)]);return t};m.rel=function(e){var t=new s.MathNode("mo",[c(e.value,e.mode)]);return t};m.open=function(e){var t=new s.MathNode("mo",[c(e.value,e.mode)]);return t};m.close=function(e){var t=new s.MathNode("mo",[c(e.value,e.mode)]);return t};m.inner=function(e){var t=new s.MathNode("mo",[c(e.value,e.mode)]);return t};m.punct=function(e){var t=new s.MathNode("mo",[c(e.value,e.mode)]);t.setAttribute("separator","true");return t};m.ordgroup=function(e,t){var r=f(e.value,t);var a=new s.MathNode("mrow",r);return a};m.text=function(e,t){var r=f(e.value.body,t);var a=new s.MathNode("mtext",r);return a};m.color=function(e,t){var r=f(e.value.value,t);var a=new s.MathNode("mstyle",r);a.setAttribute("mathcolor",e.value.color);return a};m.supsub=function(e,t){var r=[v(e.value.base,t)];if(e.value.sub){r.push(v(e.value.sub,t))}if(e.value.sup){r.push(v(e.value.sup,t))}var a;if(!e.value.sub){a="msup"}else if(!e.value.sup){a="msub"}else{a="msubsup"}var i=new s.MathNode(a,r);return i};m.genfrac=function(e,t){var r=new s.MathNode("mfrac",[v(e.value.numer,t),v(e.value.denom,t)]);if(!e.value.hasBarLine){r.setAttribute("linethickness","0px")}if(e.value.leftDelim!=null||e.value.rightDelim!=null){var a=[];if(e.value.leftDelim!=null){var i=new s.MathNode("mo",[new s.TextNode(e.value.leftDelim)]);i.setAttribute("fence","true");a.push(i)}a.push(r);if(e.value.rightDelim!=null){var n=new s.MathNode("mo",[new s.TextNode(e.value.rightDelim)]);n.setAttribute("fence","true");a.push(n)}var l=new s.MathNode("mrow",a);return l}return r};m.array=function(e,t){return new s.MathNode("mtable",e.value.body.map(function(e){return new s.MathNode("mtr",e.map(function(e){return new s.MathNode("mtd",[v(e,t)])}))}))};m.sqrt=function(e,t){var r;if(e.value.index){r=new s.MathNode("mroot",[v(e.value.body,t),v(e.value.index,t)])}else{r=new s.MathNode("msqrt",[v(e.value.body,t)])}return r};m.leftright=function(e,t){var r=f(e.value.body,t);if(e.value.left!=="."){var a=new s.MathNode("mo",[c(e.value.left,e.mode)]);a.setAttribute("fence","true");r.unshift(a)}if(e.value.right!=="."){var i=new s.MathNode("mo",[c(e.value.right,e.mode)]);i.setAttribute("fence","true");r.push(i)}var n=new s.MathNode("mrow",r);return n};m.middle=function(e,t){var r=new s.MathNode("mo",[c(e.value.middle,e.mode)]);r.setAttribute("fence","true");return r};m.accent=function(e,t){var r=new s.MathNode("mo",[c(e.value.accent,e.mode)]);var a=new s.MathNode("mover",[v(e.value.base,t),r]);a.setAttribute("accent","true");return a};m.spacing=function(e){var t;if(e.value==="\\ "||e.value==="\\space"||e.value===" "||e.value==="~"){t=new s.MathNode("mtext",[new s.TextNode("\xa0")])}else{t=new s.MathNode("mspace");t.setAttribute("width",a.spacingFunctions[e.value].size)}return t};m.op=function(e,t){var r;if(e.value.symbol){r=new s.MathNode("mo",[c(e.value.body,e.mode)])}else if(e.value.value){r=new s.MathNode("mo",f(e.value.value,t))}else{r=new s.MathNode("mi",[new s.TextNode(e.value.body.slice(1))])}return r};m.mod=function(e,t){var r=[];if(e.value.modType==="pod"||e.value.modType==="pmod"){r.push(new s.MathNode("mo",[c("(",e.mode)]))}if(e.value.modType!=="pod"){r.push(new s.MathNode("mo",[c("mod",e.mode)]))}if(e.value.value){var a=new s.MathNode("mspace");a.setAttribute("width","0.333333em");r.push(a);r=r.concat(f(e.value.value,t))}if(e.value.modType==="pod"||e.value.modType==="pmod"){r.push(new s.MathNode("mo",[c(")",e.mode)]))}return new s.MathNode("mo",r)};m.katex=function(e){var t=new s.MathNode("mtext",[new s.TextNode("KaTeX")]);return t};m.font=function(e,t){var r=e.value.font;return v(e.value.body,t.withFont(r))};m.delimsizing=function(e){var t=[];if(e.value.value!=="."){t.push(c(e.value.value,e.mode))}var r=new s.MathNode("mo",t);if(e.value.mclass==="mopen"||e.value.mclass==="mclose"){r.setAttribute("fence","true")}else{r.setAttribute("fence","false")}return r};m.styling=function(e,t){var r=f(e.value.value,t);var a=new s.MathNode("mstyle",r);var i={display:["0","true"],text:["0","false"],script:["1","false"],scriptscript:["2","false"]};var n=i[e.value.style];a.setAttribute("scriptlevel",n[0]);a.setAttribute("displaystyle",n[1]);return a};m.sizing=function(e,t){var r=f(e.value.value,t);var i=new s.MathNode("mstyle",r);i.setAttribute("mathsize",a.sizingMultiplier[e.value.size]+"em");return i};m.overline=function(e,t){var r=new s.MathNode("mo",[new s.TextNode("\u203e")]);r.setAttribute("stretchy","true");var a=new s.MathNode("mover",[v(e.value.body,t),r]);a.setAttribute("accent","true");return a};m.underline=function(e,t){var r=new s.MathNode("mo",[new s.TextNode("\u203e")]);r.setAttribute("stretchy","true");var a=new s.MathNode("munder",[v(e.value.body,t),r]);a.setAttribute("accentunder","true");return a};m.rule=function(e){var t=new s.MathNode("mrow");return t};m.kern=function(e){var t=new s.MathNode("mrow");return t};m.llap=function(e,t){var r=new s.MathNode("mpadded",[v(e.value.body,t)]);r.setAttribute("lspace","-1width");r.setAttribute("width","0px");return r};m.rlap=function(e,t){var r=new s.MathNode("mpadded",[v(e.value.body,t)]);r.setAttribute("width","0px");return r};m.phantom=function(e,t){var r=f(e.value.value,t);return new s.MathNode("mphantom",r)};m.mclass=function(e,t){var r=f(e.value.value,t);return new s.MathNode("mstyle",r)};var f=function(e,t){var r=[];for(var a=0;a<e.length;a++){var i=e[a];r.push(v(i,t))}return r};var v=function(e,t){if(!e){return new s.MathNode("mrow")}if(m[e.type]){return m[e.type](e,t)}else{throw new n("Got group of unknown type: '"+e.type+"'")}};var d=function(e,t,r){var a=f(e,r);var i=new s.MathNode("mrow",a);var n=new s.MathNode("annotation",[new s.TextNode(t)]);n.setAttribute("encoding","application/x-tex");var l=new s.MathNode("semantics",[i,n]);var o=new s.MathNode("math",[l]);return u(["katex-mathml"],[o])};t.exports=d},{"./ParseError":6,"./buildCommon":10,"./fontMetrics":18,"./mathMLTree":21,"./symbols":24,"./utils":26}],13:[function(e,t,r){var a=e("./buildHTML");var i=e("./buildMathML");var s=e("./buildCommon");var n=e("./Settings");var l=s.makeSpan;var o=function(e,t,r){r=r||new n({});var s=r.initialOptions();var o=i(e,t,s);var u=a(e,s);var h=l(["katex"],[o,u]);if(r.displayMode){return l(["katex-display"],[h])}else{return h}};t.exports=o},{"./Settings":8,"./buildCommon":10,"./buildHTML":11,"./buildMathML":12}],14:[function(e,t,r){"use strict";var a={left:0,center:.5,right:1};var i=[null,.5,.7,.8,.9,1,1.2,1.44,1.73,2.07,2.49];var s={i4:"italic ",n4:"",n7:"bold "};function n(e){for(var t in e){if(e.hasOwnProperty(t)){this[t]=e[t]}}}n.prototype.sizeChanged=function(){this.em=this.baseSize*i[this.sizeIndex]*this.styleFactor;this.fontChanged()};n.prototype.fontChanged=function(){this.font=this.variant+this.weight+this.em+"px "+this.family};n.prototype.withStyle=function(e){var t=new n(this);t.styleFactor=e;t.sizeChanged();return t};n.prototype.withSize=function(e){var t=new n(this);t.sizeIndex=e;t.sizeChanged();return t};n.prototype.withFace=function(e,t){var r=new n(this);r.variant=s[t];r.family=e;r.fvd=e+":"+t;r.fontChanged();return r};n.prototype.withYShift=function(e){var t=new n(this);t.ypos+=e*t.em;return t};n.prototype.withHAlign=function(e){var t=new n(this);t.halign=e;return t};n.prototype.withColor=function(e){var t=new n(this);t.color=e;return t};function l(e,t){this.ctxt=e;this.fontSize=16;this.left=Infinity;this.top=Infinity;this.right=-Infinity;this.bottom=-Infinity;this.x=0;this.outList=[];this.fontsUsed={};this.horizontalLines=[];this.prevClass="";this.baseSize=t.fontSize||16*1.21;this.state=new n({baseSize:this.baseSize,sizeIndex:5,styleFactor:1,variant:"",weight:"",family:"KaTeX_Main",fvd:"KaTeX_Main:n4",color:null,ypos:0,halign:t.halign||a.left});this.state.sizeChanged()}var o=.16667;var u=.22222;var h=.27778;var c={mord_mop:o,mord_mbin:u,mord_mrel:h,mord_minner:o,mop_mord:o,mop_mop:o,mop_mrel:h,mop_minner:o,mbin_mord:u,mbin_mop:u,mbin_mopen:u,mbin_minner:u,mrel_mord:h,mrel_mop:h,mrel_mopen:h,mrel_minner:h,mclose_mop:o,mclose_mbin:u,mclose_mrel:h,mclose_minner:o,mpunct_mord:o,mpunct_mop:o,mpunct_mrel:o,mpunct_mopen:o,mpunct_mclose:o,mpunct_mpunct:o,mpunct_minner:o,minner_mord:o,minner_mop:o,minner_mbin:u,minner_mrel:h,minner_mopen:o,minner_mpunct:o,minner_minner:o};var p={mord_mop:o,mop_mord:o,mop_mop:o,mclose_mop:o,minner_mop:o};l.prototype.prepare=function(e){var t=this.state;var r=!e.classes?"":e.classes.filter(function(e){return e!==null}).join(" ");if(r===""){r=[]}else{r=r.split(" ")}var i;var s;var n;var l=null;function m(){if(l===null){var e=n-1;while(e-->0){var t=r[e];if(!t){continue}if(t.substr(4)==="size"){l=+t.substr(4);break}}}return l}var f=false;var v="";var d=null;var g=0;var y=null;var b=null;n=r.length;while(n--){var w=r[n];switch(w){case"delimsizing":if(m()!==null){this.state=this.state.withFace("KaTeX_Size"+l,"n4")}break;case"delim-size1":case"small-op":this.state=this.state.withFace("KaTeX_Size1","n4");break;case"large-op":this.state=this.state.withFace("KaTeX_Size2","n4");break;case"delim-size4":this.state=this.state.withFace("KaTeX_Size4","n4");break;case"fontsize-ensurer":case"sizing":if(m()!==null){this.state=this.state.withSize(l)}break;case"frac-line":case"sqrt-line":case"overline-line":this.horizontalLines.push({y:this.state.ypos,height:Math.max(1,.04*this.state.em),color:this.state.color});break;case"mfrac":case"accent":case"op-limits":case"col-align-c":this.state=this.state.withHAlign(a.center);break;case"root":d=5/18;g=-10/18;break;case"accent-vec":d+=.326;break;case"accent-body":y=this.x;break;case"mathit":this.state=this.state.withFace("KaTeX_Math","i4");break;case"mathbf":this.state=this.state.withFace("KaTeX_Main","n7");break;case"amsrm":this.state=this.state.withFace("KaTeX_AMS","n4");break;case"mathbb":this.state=this.state.withFace("KaTeX_AMS","n4");break;case"mathcal":this.state=this.state.withFace("KaTeX_Caligraphic","n4");break;case"mathfrak":this.state=this.state.withFace("KaTeX_Fraktur","n4");break;case"mathtt":this.state=this.state.withFace("KaTeX_Typewriter","n4");break;case"mathscr":this.state=this.state.withFace("KaTeX_Script","n4");break;case"mathsf":this.state=this.state.withFace("KaTeX_SansSerif","n4");break;case"mainit":this.state=this.state.withFace("KaTeX_Main","i4");break;case"mathrm":break;case"mord":case"mop":case"mbin":case"mrel":case"mopen":case"mclose":case"minner":case"mpunct":v=w;break;case"msupsub":case"col-align-l":this.state=this.state.withHAlign(a.left);break;case"col-align-r":this.state=this.state.withHAlign(a.right);break;case"scriptscriptstyle":this.state=this.state.withStyle(.5);break;case"scriptstyle":this.state=this.state.withStyle(.7);break;case"textstyle":this.state=this.state.withStyle(1);break;case"size1":case"size2":case"size3":case"size4":case"size5":case"size6":case"size7":case"size8":case"size9":case"size10":l=+w.substr(4);break;case"negativethinspace":g+=-o;break;case"thinspace":g+=o;break;case"mediumspace":g+=u;break;case"thickspace":g+=h;break;case"enspace":g+=.5;break;case"quad":g+=1;break;case"qquad":g+=2;break;case"k":break;case"a":this.state=this.state.withStyle(.75).withYShift(-.2);d=-.32;break;case"t":d=-.23;break;case"e":this.state=this.state.withYShift(.2155);d=-.1667;break;case"x":d=-.125;break;case"vlist":f=true;break;case"llap":case"rlap":b=w;break;case"arraycolsep":case"base":case"baseline-fix":case"bottom":case"cramped":case"delimsizinginner":case"displaystyle":case"katex-logo":case"katex-html":case"mspace":case"mtable":case"mult":case"op-symbol":case"overline":case"reset-scriptscriptstyle":case"reset-scriptstyle":case"reset-size1":case"reset-size2":case"reset-size3":case"reset-size4":case"reset-size5":case"reset-size6":case"reset-size7":case"reset-size8":case"reset-size9":case"reset-size10":case"reset-textstyle":case"sqrt":case"sqrt-sign":case"strut":case"style-wrap":case"text":case"uncramped":break;default:}}for(i in e.style){if(e.style.hasOwnProperty(i)){s=e.style[i];switch(i){case"top":if(s.substr(s.length-2)!=="em"){throw new Error("em is the only supported unit.")}s=+s.substr(0,s.length-2);this.state=this.state.withYShift(s);break;case"fontSize":if(s==="0em"){return}break;case"marginLeft":if(s.substr(s.length-2)!=="em"){throw new Error("em is the only supported unit.")}d=+s.substr(0,s.length-2);break;case"marginRight":case"width":if(s.substr(s.length-2)!=="em"){throw new Error("em is the only supported unit.")}g=+s.substr(0,s.length-2);break;case"color":this.state=this.state.withColor(s);break;case"height":case"verticalAlign":break;default:}}}for(i in e.attributes){if(e.attributes.hasOwnProperty(i)){s=e.attributes[i];switch(i){case"aria-hidden":break;default:}}}var x=this.prevClass+"_"+v;if(d===null){d=p[x];if(d===undefined&&this.state.styleFactor===1){d=c[x]}}if(d){this.x+=d*this.state.em}if(f){this.halign(e.children,this.state.halign)}else if(b){this.lap(b,e.children)}else if(e.children){e.children.forEach(this.prepare.bind(this))}else{this.ctxt.font=this.state.font;var k=e.value;var z=this.ctxt.measureText(k);var S=z.width;if(e.italic){g+=e.italic}if(k!==""&&k!=="\u200b"){var M={x:this.x,y:this.state.ypos,font:this.state.font,color:this.state.color,text:k};this.outList.push(M);this.fontsUsed[this.state.fvd]=this.state.font}this.x+=S}this.x+=g*this.state.em;if(y!==null){this.x=y}this.state=t;this.prevClass=v};l.prototype.halign=function(e,t){var r;var a;var i=this.horizontalLines;this.horizontalLines=[];var s=this.outList;var n=this.x;var l=s.length;var o=0;for(r=0;r<e.length;++r){var u=s.length;this.x=0;this.prepare(e[r]);var h=this.x;if(o<h){o=h}a=t*h;while(u<s.length){s[u++].x-=a}}a=t*o+n;while(l<s.length){s[l++].x+=a}for(r=0;r<this.horizontalLines.length;++r){var c=this.horizontalLines[r];c.x=n;c.width=o;s.push(c)}this.x=n+o;this.horizontalLines=i};l.prototype.lap=function(e,t){var r=t[0];var a=this.x;var i=this.outList;var s=i.length;this.prepare(r);var n=this.x-a;this.x=a;if(e==="llap"){while(s<i.length){i[s++].x-=n}}};function m(e,t){var r=e.getContext?e.getContext("2d"):e;var a=r.font;var i=r.fillStyle;try{var s=t(r);r.font=a;r.fillStyle=i;return s}catch(n){r.font=a;r.fillStyle=i;throw n}}function f(e,t,r,a){this.fontsUsed=r;this.renderAt=function(r,i){r-=a;m(e,function(e){var a=e.fillStyle;for(var s=0;s<t.length;++s){var n=t[s];e.fillStyle=n.color===null?a:n.color;if(n.text){e.font=n.font;e.fillText(n.text,n.x+r,n.y+i)}else if(n.width||n.height){e.fillRect(n.x+r,n.y+i-n.height,n.width,n.height)}}})}}function v(e,t,r){return m(t,function(t){var i=r.halign||a.left;var s=new l(t,r);s.prepare(e);var n=s.state.em;var o=s.x*i;var u=new f(t,s.outList,s.fontsUsed,o);u.width=s.x;u.depth=e.depth*n;u.height=e.height*n;return u})}function d(e,t,r,a,i){v(e,t,i).renderAt(r,a)}t.exports={prepare:v,render:d}},{}],15:[function(e,t,r){var a=e("./ParseError");var i=e("./Style");var s=e("./buildCommon");var n=e("./fontMetrics");var l=e("./symbols");var o=e("./utils");var u=s.makeSpan;var h=function(e,t){if(l.math[e]&&l.math[e].replace){return n.getCharacterMetrics(l.math[e].replace,t)}else{return n.getCharacterMetrics(e,t)}};var c=function(e,t,r,a){return s.makeSymbol(e,"Size"+t+"-Regular",r,a)};var p=function(e,t,r,a){a=a||[];var i=u(a.concat(["style-wrap",r.style.reset(),t.cls()]),[e],r);var s=t.sizeMultiplier/r.style.sizeMultiplier;i.height*=s;i.depth*=s;i.maxFontSize=t.sizeMultiplier;return i};var m=function(e,t,r,a,i,n){var l=s.makeSymbol(e,"Main-Regular",i,a);var o=p(l,t,a,n);if(r){var u=(1-a.style.sizeMultiplier/t.sizeMultiplier)*a.style.metrics.axisHeight;o.style.top=u+"em";o.height-=u;o.depth+=u}return o};var f=function(e,t,r,a,s,n){var l=c(e,t,s,a);var o=p(u(["delimsizing","size"+t],[l],a),i.TEXT,a,n);if(r){var h=(1-a.style.sizeMultiplier)*a.style.metrics.axisHeight;o.style.top=h+"em";o.height-=h;o.depth+=h}return o};var v=function(e,t,r){var a;if(t==="Size1-Regular"){a="delim-size1"}else if(t==="Size4-Regular"){a="delim-size4"}var i=u(["delimsizinginner",a],[u([],[s.makeSymbol(e,t,r)])]);return{type:"elem",elem:i}};var d=function(e,t,r,a,n,l){var o;var c;var m;var f;o=m=f=e;c=null;var d="Size1-Regular";if(e==="\\uparrow"){m=f="\u23d0"}else if(e==="\\Uparrow"){m=f="\u2016"}else if(e==="\\downarrow"){o=m="\u23d0"}else if(e==="\\Downarrow"){o=m="\u2016"}else if(e==="\\updownarrow"){o="\\uparrow";m="\u23d0";f="\\downarrow"}else if(e==="\\Updownarrow"){o="\\Uparrow";m="\u2016";f="\\Downarrow"}else if(e==="["||e==="\\lbrack"){o="\u23a1";m="\u23a2";f="\u23a3";d="Size4-Regular"}else if(e==="]"||e==="\\rbrack"){o="\u23a4";m="\u23a5";f="\u23a6";d="Size4-Regular"}else if(e==="\\lfloor"){m=o="\u23a2";f="\u23a3";d="Size4-Regular"}else if(e==="\\lceil"){o="\u23a1";m=f="\u23a2";d="Size4-Regular"}else if(e==="\\rfloor"){m=o="\u23a5";f="\u23a6";d="Size4-Regular"}else if(e==="\\rceil"){o="\u23a4";m=f="\u23a5";d="Size4-Regular"}else if(e==="("){o="\u239b";m="\u239c";f="\u239d";d="Size4-Regular"}else if(e===")"){o="\u239e";m="\u239f";f="\u23a0";d="Size4-Regular"}else if(e==="\\{"||e==="\\lbrace"){o="\u23a7";c="\u23a8";f="\u23a9";m="\u23aa";d="Size4-Regular"}else if(e==="\\}"||e==="\\rbrace"){o="\u23ab";c="\u23ac";f="\u23ad";m="\u23aa";d="Size4-Regular"}else if(e==="\\lgroup"){o="\u23a7";f="\u23a9";m="\u23aa";d="Size4-Regular"}else if(e==="\\rgroup"){o="\u23ab";f="\u23ad";m="\u23aa";d="Size4-Regular"}else if(e==="\\lmoustache"){o="\u23a7";f="\u23ad";m="\u23aa";d="Size4-Regular"}else if(e==="\\rmoustache"){o="\u23ab";f="\u23a9";m="\u23aa";d="Size4-Regular"}else if(e==="\\surd"){o="\ue001";f="\u23b7";m="\ue000";d="Size4-Regular"}var g=h(o,d);var y=g.height+g.depth;var b=h(m,d);var w=b.height+b.depth;var x=h(f,d);var k=x.height+x.depth;var z=0;var S=1;if(c!==null){var M=h(c,d);z=M.height+M.depth;S=2}var T=y+k+z;var A=Math.ceil((t-T)/(S*w));var N=T+A*S*w;var q=a.style.metrics.axisHeight;if(r){q*=a.style.sizeMultiplier}var C=N/2-q;var R=[];R.push(v(f,d,n));var E;if(c===null){for(E=0;E<A;E++){R.push(v(m,d,n))}}else{for(E=0;E<A;E++){R.push(v(m,d,n))}R.push(v(c,d,n));for(E=0;E<A;E++){R.push(v(m,d,n))}}R.push(v(o,d,n));var O=s.makeVList(R,"bottom",C,a);return p(u(["delimsizing","mult"],[O],a),i.TEXT,a,l)};var g=["(",")","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","\\lfloor","\\rfloor","\\lceil","\\rceil","\\surd"];var y=["\\uparrow","\\downarrow","\\updownarrow","\\Uparrow","\\Downarrow","\\Updownarrow","|","\\|","\\vert","\\Vert","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","\\lmoustache","\\rmoustache"];var b=["<",">","\\langle","\\rangle","/","\\backslash","\\lt","\\gt"];var w=[0,1.2,1.8,2.4,3];var x=function(e,t,r,i,s){if(e==="<"||e==="\\lt"){e="\\langle"}else if(e===">"||e==="\\gt"){e="\\rangle"}if(o.contains(g,e)||o.contains(b,e)){return f(e,t,false,r,i,s)}else if(o.contains(y,e)){return d(e,w[t],false,r,i,s)}else{throw new a("Illegal delimiter: '"+e+"'")}};var k=[{type:"small",style:i.SCRIPTSCRIPT},{type:"small",style:i.SCRIPT},{type:"small",style:i.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4}];var z=[{type:"small",style:i.SCRIPTSCRIPT},{type:"small",style:i.SCRIPT},{type:"small",style:i.TEXT},{type:"stack"}];var S=[{type:"small",style:i.SCRIPTSCRIPT},{type:"small",style:i.SCRIPT},{type:"small",style:i.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4},{type:"stack"}];var M=function(e){if(e.type==="small"){return"Main-Regular"}else if(e.type==="large"){return"Size"+e.size+"-Regular"}else if(e.type==="stack"){return"Size4-Regular"}};var T=function(e,t,r,a){var i=Math.min(2,3-a.style.size);for(var s=i;s<r.length;s++){if(r[s].type==="stack"){break}var n=h(e,M(r[s]));var l=n.height+n.depth;if(r[s].type==="small"){l*=r[s].style.sizeMultiplier}if(l>t){return r[s]}}return r[r.length-1]};var A=function(e,t,r,a,i,s){if(e==="<"||e==="\\lt"){e="\\langle"}else if(e===">"||e==="\\gt"){e="\\rangle"}var n;if(o.contains(b,e)){n=k}else if(o.contains(g,e)){n=S}else{n=z}var l=T(e,t,n,a);if(l.type==="small"){return m(e,l.style,r,a,i,s)}else if(l.type==="large"){return f(e,l.size,r,a,i,s)}else if(l.type==="stack"){return d(e,t,r,a,i,s)}};var N=function(e,t,r,a,i,s){var l=a.style.metrics.axisHeight*a.style.sizeMultiplier;var o=901;var u=5/n.metrics.ptPerEm;var h=Math.max(t-l,r+l);var c=Math.max(h/500*o,2*h-u);return A(e,c,true,a,i,s)};t.exports={sizedDelim:x,customSizedDelim:A,leftRightDelim:N}},{"./ParseError":6,"./Style":9,"./buildCommon":10,"./fontMetrics":18,"./symbols":24,"./utils":26}],16:[function(e,t,r){var a=e("./unicodeRegexes");var i=e("./utils");var s=function(e){e=e.slice();for(var t=e.length-1;t>=0;t--){if(!e[t]){e.splice(t,1)}}return e.join(" ")};function n(e,t,r){this.classes=e||[];this.children=t||[];this.height=0;this.depth=0;this.maxFontSize=0;this.style={};this.attributes={};if(r){if(r.style.isTight()){this.classes.push("mtight")}if(r.getColor()){this.style.color=r.getColor()}}}n.prototype.setAttribute=function(e,t){this.attributes[e]=t};n.prototype.tryCombine=function(e){return false};n.prototype.toNode=function(){var e=document.createElement("span");e.className=s(this.classes);for(var t in this.style){if(Object.prototype.hasOwnProperty.call(this.style,t)){e.style[t]=this.style[t]}}for(var r in this.attributes){if(Object.prototype.hasOwnProperty.call(this.attributes,r)){e.setAttribute(r,this.attributes[r])}}for(var a=0;a<this.children.length;a++){e.appendChild(this.children[a].toNode())}return e};n.prototype.toMarkup=function(){var e="<span";if(this.classes.length){e+=' class="';e+=i.escape(s(this.classes));e+='"'}var t="";for(var r in this.style){if(this.style.hasOwnProperty(r)){t+=i.hyphenate(r)+":"+this.style[r]+";"}}if(t){e+=' style="'+i.escape(t)+'"'}for(var a in this.attributes){if(Object.prototype.hasOwnProperty.call(this.attributes,a)){e+=" "+a+'="';e+=i.escape(this.attributes[a]);e+='"'}}e+=">";for(var n=0;n<this.children.length;n++){e+=this.children[n].toMarkup()}e+="</span>";return e};function l(e){this.children=e||[];this.height=0;this.depth=0;this.maxFontSize=0}l.prototype.toNode=function(){var e=document.createDocumentFragment();for(var t=0;t<this.children.length;t++){e.appendChild(this.children[t].toNode())}return e};l.prototype.toMarkup=function(){var e="";for(var t=0;t<this.children.length;t++){e+=this.children[t].toMarkup()}return e};var o={"\xee":"\u0131\u0302","\xef":"\u0131\u0308","\xed":"\u0131\u0301","\xec":"\u0131\u0300"};function u(e,t,r,i,s,n,l){this.value=e||"";this.height=t||0;this.depth=r||0;this.italic=i||0;this.skew=s||0;this.classes=n||[];this.style=l||{};this.maxFontSize=0;if(a.cjkRegex.test(e)){if(a.hangulRegex.test(e)){this.classes.push("hangul_fallback")}else{this.classes.push("cjk_fallback")}}if(/[\xee\xef\xed\xec]/.test(this.value)){this.value=o[this.value]}}u.prototype.tryCombine=function(e){if(!e||!(e instanceof u)||this.italic>0||s(this.classes)!==s(e.classes)||this.skew!==e.skew||this.maxFontSize!==e.maxFontSize){return false;
+}for(var t in this.style){if(this.style.hasOwnProperty(t)&&this.style[t]!==e.style[t]){return false}}for(t in e.style){if(e.style.hasOwnProperty(t)&&this.style[t]!==e.style[t]){return false}}this.value+=e.value;this.height=Math.max(this.height,e.height);this.depth=Math.max(this.depth,e.depth);this.italic=e.italic;return true};u.prototype.toNode=function(){var e=document.createTextNode(this.value);var t=null;if(this.italic>0){t=document.createElement("span");t.style.marginRight=this.italic+"em"}if(this.classes.length>0){t=t||document.createElement("span");t.className=s(this.classes)}for(var r in this.style){if(this.style.hasOwnProperty(r)){t=t||document.createElement("span");t.style[r]=this.style[r]}}if(t){t.appendChild(e);return t}else{return e}};u.prototype.toMarkup=function(){var e=false;var t="<span";if(this.classes.length){e=true;t+=' class="';t+=i.escape(s(this.classes));t+='"'}var r="";if(this.italic>0){r+="margin-right:"+this.italic+"em;"}for(var a in this.style){if(this.style.hasOwnProperty(a)){r+=i.hyphenate(a)+":"+this.style[a]+";"}}if(r){e=true;t+=' style="'+i.escape(r)+'"'}var n=i.escape(this.value);if(e){t+=">";t+=n;t+="</span>";return t}else{return n}};t.exports={span:n,documentFragment:l,symbolNode:u}},{"./unicodeRegexes":25,"./utils":26}],17:[function(e,t,r){var a=e("./parseData");var i=e("./ParseError");var s=e("./Style");var n=a.ParseNode;function l(e,t){var r=[];var a=[r];var s=[];while(true){var l=e.parseExpression(false,null);r.push(new n("ordgroup",l,e.mode));var o=e.nextToken.text;if(o==="&"){e.consume()}else if(o==="\\end"){break}else if(o==="\\\\"||o==="\\cr"){var u=e.parseFunction();s.push(u.value.size);r=[];a.push(r)}else{throw new i("Expected & or \\\\ or \\end",e.nextToken)}}t.body=a;t.rowGaps=s;return new n(t.type,t,e.mode)}function o(e,r,a){if(typeof e==="string"){e=[e]}if(typeof r==="number"){r={numArgs:r}}var i={numArgs:r.numArgs||0,argTypes:r.argTypes,greediness:1,allowedInText:!!r.allowedInText,numOptionalArgs:r.numOptionalArgs||0,handler:a};for(var s=0;s<e.length;++s){t.exports[e[s]]=i}}o("array",{numArgs:1},function(e,t){var r=t[0];r=r.value.map?r.value:[r];var a=r.map(function(e){var t=e.value;if("lcr".indexOf(t)!==-1){return{type:"align",align:t}}else if(t==="|"){return{type:"separator",separator:"|"}}throw new i("Unknown column alignment: "+e.value,e)});var s={type:"array",cols:a,hskipBeforeAndAfter:true};s=l(e.parser,s);return s});o(["matrix","pmatrix","bmatrix","Bmatrix","vmatrix","Vmatrix"],{},function(e){var t={matrix:null,pmatrix:["(",")"],bmatrix:["[","]"],Bmatrix:["\\{","\\}"],vmatrix:["|","|"],Vmatrix:["\\Vert","\\Vert"]}[e.envName];var r={type:"array",hskipBeforeAndAfter:false};r=l(e.parser,r);if(t){r=new n("leftright",{body:[r],left:t[0],right:t[1]},e.mode)}return r});o("cases",{},function(e){var t={type:"array",arraystretch:1.2,cols:[{type:"align",align:"l",pregap:0,postgap:s.TEXT.metrics.quad},{type:"align",align:"l",pregap:0,postgap:0}]};t=l(e.parser,t);t=new n("leftright",{body:[t],left:"\\{",right:"."},e.mode);return t});o("aligned",{},function(e){var t={type:"array",cols:[]};t=l(e.parser,t);var r=new n("ordgroup",[],e.mode);var a=0;t.value.body.forEach(function(e){var t;for(t=1;t<e.length;t+=2){e[t].value.unshift(r)}if(a<e.length){a=e.length}});for(var i=0;i<a;++i){var s="r";var o=0;if(i%2===1){s="l"}else if(i>0){o=2}t.value.cols[i]={type:"align",align:s,pregap:o,postgap:0}}return t})},{"./ParseError":6,"./Style":9,"./parseData":22}],18:[function(e,t,r){var a=e("./Style");var i=e("./unicodeRegexes").cjkRegex;var s={slant:[.25,.25,.25],space:[0,0,0],stretch:[0,0,0],shrink:[0,0,0],xHeight:[.431,.431,.431],quad:[1,1.171,1.472],extraSpace:[0,0,0],num1:[.677,.732,.925],num2:[.394,.384,.387],num3:[.444,.471,.504],denom1:[.686,.752,1.025],denom2:[.345,.344,.532],sup1:[.413,.503,.504],sup2:[.363,.431,.404],sup3:[.289,.286,.294],sub1:[.15,.143,.2],sub2:[.247,.286,.4],supDrop:[.386,.353,.494],subDrop:[.05,.071,.1],delim1:[2.39,1.7,1.98],delim2:[1.01,1.157,1.42],axisHeight:[.25,.25,.25]};var n=0;var l=0;var o=0;var u=0;var h=.431;var c=1;var p=0;var m=.04;var f=.111;var v=.166;var d=.2;var g=.6;var y=.1;var b=10;var w=2/b;var x={defaultRuleThickness:m,bigOpSpacing1:f,bigOpSpacing2:v,bigOpSpacing3:d,bigOpSpacing4:g,bigOpSpacing5:y,ptPerEm:b,doubleRuleSep:w};var k=e("./fontMetricsData");var z={"\xc0":"A","\xc1":"A","\xc2":"A","\xc3":"A","\xc4":"A","\xc5":"A","\xc6":"A","\xc7":"C","\xc8":"E","\xc9":"E","\xca":"E","\xcb":"E","\xcc":"I","\xcd":"I","\xce":"I","\xcf":"I","\xd0":"D","\xd1":"N","\xd2":"O","\xd3":"O","\xd4":"O","\xd5":"O","\xd6":"O","\xd8":"O","\xd9":"U","\xda":"U","\xdb":"U","\xdc":"U","\xdd":"Y","\xde":"o","\xdf":"B","\xe0":"a","\xe1":"a","\xe2":"a","\xe3":"a","\xe4":"a","\xe5":"a","\xe6":"a","\xe7":"c","\xe8":"e","\xe9":"e","\xea":"e","\xeb":"e","\xec":"i","\xed":"i","\xee":"i","\xef":"i","\xf0":"d","\xf1":"n","\xf2":"o","\xf3":"o","\xf4":"o","\xf5":"o","\xf6":"o","\xf8":"o","\xf9":"u","\xfa":"u","\xfb":"u","\xfc":"u","\xfd":"y","\xfe":"o","\xff":"y","\u0410":"A","\u0411":"B","\u0412":"B","\u0413":"F","\u0414":"A","\u0415":"E","\u0416":"K","\u0417":"3","\u0418":"N","\u0419":"N","\u041a":"K","\u041b":"N","\u041c":"M","\u041d":"H","\u041e":"O","\u041f":"N","\u0420":"P","\u0421":"C","\u0422":"T","\u0423":"y","\u0424":"O","\u0425":"X","\u0426":"U","\u0427":"h","\u0428":"W","\u0429":"W","\u042a":"B","\u042b":"X","\u042c":"B","\u042d":"3","\u042e":"X","\u042f":"R","\u0430":"a","\u0431":"b","\u0432":"a","\u0433":"r","\u0434":"y","\u0435":"e","\u0436":"m","\u0437":"e","\u0438":"n","\u0439":"n","\u043a":"n","\u043b":"n","\u043c":"m","\u043d":"n","\u043e":"o","\u043f":"n","\u0440":"p","\u0441":"c","\u0442":"o","\u0443":"y","\u0444":"b","\u0445":"x","\u0446":"n","\u0447":"n","\u0448":"w","\u0449":"w","\u044a":"a","\u044b":"m","\u044c":"a","\u044d":"e","\u044e":"m","\u044f":"r"};var S=function(e,t){var r=e.charCodeAt(0);if(e[0]in z){r=z[e[0]].charCodeAt(0)}else if(i.test(e[0])){r="M".charCodeAt(0)}var a=k[t][r];if(a){return{depth:a[0],height:a[1],italic:a[2],skew:a[3],width:a[4]}}};t.exports={metrics:x,sigmas:s,getCharacterMetrics:S}},{"./Style":9,"./fontMetricsData":19,"./unicodeRegexes":25}],19:[function(e,t,r){t.exports={"AMS-Regular":{65:[0,.68889,0,0],66:[0,.68889,0,0],67:[0,.68889,0,0],68:[0,.68889,0,0],69:[0,.68889,0,0],70:[0,.68889,0,0],71:[0,.68889,0,0],72:[0,.68889,0,0],73:[0,.68889,0,0],74:[.16667,.68889,0,0],75:[0,.68889,0,0],76:[0,.68889,0,0],77:[0,.68889,0,0],78:[0,.68889,0,0],79:[.16667,.68889,0,0],80:[0,.68889,0,0],81:[.16667,.68889,0,0],82:[0,.68889,0,0],83:[0,.68889,0,0],84:[0,.68889,0,0],85:[0,.68889,0,0],86:[0,.68889,0,0],87:[0,.68889,0,0],88:[0,.68889,0,0],89:[0,.68889,0,0],90:[0,.68889,0,0],107:[0,.68889,0,0],165:[0,.675,.025,0],174:[.15559,.69224,0,0],240:[0,.68889,0,0],295:[0,.68889,0,0],710:[0,.825,0,0],732:[0,.9,0,0],770:[0,.825,0,0],771:[0,.9,0,0],989:[.08167,.58167,0,0],1008:[0,.43056,.04028,0],8245:[0,.54986,0,0],8463:[0,.68889,0,0],8487:[0,.68889,0,0],8498:[0,.68889,0,0],8502:[0,.68889,0,0],8503:[0,.68889,0,0],8504:[0,.68889,0,0],8513:[0,.68889,0,0],8592:[-.03598,.46402,0,0],8594:[-.03598,.46402,0,0],8602:[-.13313,.36687,0,0],8603:[-.13313,.36687,0,0],8606:[.01354,.52239,0,0],8608:[.01354,.52239,0,0],8610:[.01354,.52239,0,0],8611:[.01354,.52239,0,0],8619:[0,.54986,0,0],8620:[0,.54986,0,0],8621:[-.13313,.37788,0,0],8622:[-.13313,.36687,0,0],8624:[0,.69224,0,0],8625:[0,.69224,0,0],8630:[0,.43056,0,0],8631:[0,.43056,0,0],8634:[.08198,.58198,0,0],8635:[.08198,.58198,0,0],8638:[.19444,.69224,0,0],8639:[.19444,.69224,0,0],8642:[.19444,.69224,0,0],8643:[.19444,.69224,0,0],8644:[.1808,.675,0,0],8646:[.1808,.675,0,0],8647:[.1808,.675,0,0],8648:[.19444,.69224,0,0],8649:[.1808,.675,0,0],8650:[.19444,.69224,0,0],8651:[.01354,.52239,0,0],8652:[.01354,.52239,0,0],8653:[-.13313,.36687,0,0],8654:[-.13313,.36687,0,0],8655:[-.13313,.36687,0,0],8666:[.13667,.63667,0,0],8667:[.13667,.63667,0,0],8669:[-.13313,.37788,0,0],8672:[-.064,.437,0,0],8674:[-.064,.437,0,0],8705:[0,.825,0,0],8708:[0,.68889,0,0],8709:[.08167,.58167,0,0],8717:[0,.43056,0,0],8722:[-.03598,.46402,0,0],8724:[.08198,.69224,0,0],8726:[.08167,.58167,0,0],8733:[0,.69224,0,0],8736:[0,.69224,0,0],8737:[0,.69224,0,0],8738:[.03517,.52239,0,0],8739:[.08167,.58167,0,0],8740:[.25142,.74111,0,0],8741:[.08167,.58167,0,0],8742:[.25142,.74111,0,0],8756:[0,.69224,0,0],8757:[0,.69224,0,0],8764:[-.13313,.36687,0,0],8765:[-.13313,.37788,0,0],8769:[-.13313,.36687,0,0],8770:[-.03625,.46375,0,0],8774:[.30274,.79383,0,0],8776:[-.01688,.48312,0,0],8778:[.08167,.58167,0,0],8782:[.06062,.54986,0,0],8783:[.06062,.54986,0,0],8785:[.08198,.58198,0,0],8786:[.08198,.58198,0,0],8787:[.08198,.58198,0,0],8790:[0,.69224,0,0],8791:[.22958,.72958,0,0],8796:[.08198,.91667,0,0],8806:[.25583,.75583,0,0],8807:[.25583,.75583,0,0],8808:[.25142,.75726,0,0],8809:[.25142,.75726,0,0],8812:[.25583,.75583,0,0],8814:[.20576,.70576,0,0],8815:[.20576,.70576,0,0],8816:[.30274,.79383,0,0],8817:[.30274,.79383,0,0],8818:[.22958,.72958,0,0],8819:[.22958,.72958,0,0],8822:[.1808,.675,0,0],8823:[.1808,.675,0,0],8828:[.13667,.63667,0,0],8829:[.13667,.63667,0,0],8830:[.22958,.72958,0,0],8831:[.22958,.72958,0,0],8832:[.20576,.70576,0,0],8833:[.20576,.70576,0,0],8840:[.30274,.79383,0,0],8841:[.30274,.79383,0,0],8842:[.13597,.63597,0,0],8843:[.13597,.63597,0,0],8847:[.03517,.54986,0,0],8848:[.03517,.54986,0,0],8858:[.08198,.58198,0,0],8859:[.08198,.58198,0,0],8861:[.08198,.58198,0,0],8862:[0,.675,0,0],8863:[0,.675,0,0],8864:[0,.675,0,0],8865:[0,.675,0,0],8872:[0,.69224,0,0],8873:[0,.69224,0,0],8874:[0,.69224,0,0],8876:[0,.68889,0,0],8877:[0,.68889,0,0],8878:[0,.68889,0,0],8879:[0,.68889,0,0],8882:[.03517,.54986,0,0],8883:[.03517,.54986,0,0],8884:[.13667,.63667,0,0],8885:[.13667,.63667,0,0],8888:[0,.54986,0,0],8890:[.19444,.43056,0,0],8891:[.19444,.69224,0,0],8892:[.19444,.69224,0,0],8901:[0,.54986,0,0],8903:[.08167,.58167,0,0],8905:[.08167,.58167,0,0],8906:[.08167,.58167,0,0],8907:[0,.69224,0,0],8908:[0,.69224,0,0],8909:[-.03598,.46402,0,0],8910:[0,.54986,0,0],8911:[0,.54986,0,0],8912:[.03517,.54986,0,0],8913:[.03517,.54986,0,0],8914:[0,.54986,0,0],8915:[0,.54986,0,0],8916:[0,.69224,0,0],8918:[.0391,.5391,0,0],8919:[.0391,.5391,0,0],8920:[.03517,.54986,0,0],8921:[.03517,.54986,0,0],8922:[.38569,.88569,0,0],8923:[.38569,.88569,0,0],8926:[.13667,.63667,0,0],8927:[.13667,.63667,0,0],8928:[.30274,.79383,0,0],8929:[.30274,.79383,0,0],8934:[.23222,.74111,0,0],8935:[.23222,.74111,0,0],8936:[.23222,.74111,0,0],8937:[.23222,.74111,0,0],8938:[.20576,.70576,0,0],8939:[.20576,.70576,0,0],8940:[.30274,.79383,0,0],8941:[.30274,.79383,0,0],8994:[.19444,.69224,0,0],8995:[.19444,.69224,0,0],9416:[.15559,.69224,0,0],9484:[0,.69224,0,0],9488:[0,.69224,0,0],9492:[0,.37788,0,0],9496:[0,.37788,0,0],9585:[.19444,.68889,0,0],9586:[.19444,.74111,0,0],9632:[0,.675,0,0],9633:[0,.675,0,0],9650:[0,.54986,0,0],9651:[0,.54986,0,0],9654:[.03517,.54986,0,0],9660:[0,.54986,0,0],9661:[0,.54986,0,0],9664:[.03517,.54986,0,0],9674:[.11111,.69224,0,0],9733:[.19444,.69224,0,0],10003:[0,.69224,0,0],10016:[0,.69224,0,0],10731:[.11111,.69224,0,0],10846:[.19444,.75583,0,0],10877:[.13667,.63667,0,0],10878:[.13667,.63667,0,0],10885:[.25583,.75583,0,0],10886:[.25583,.75583,0,0],10887:[.13597,.63597,0,0],10888:[.13597,.63597,0,0],10889:[.26167,.75726,0,0],10890:[.26167,.75726,0,0],10891:[.48256,.98256,0,0],10892:[.48256,.98256,0,0],10901:[.13667,.63667,0,0],10902:[.13667,.63667,0,0],10933:[.25142,.75726,0,0],10934:[.25142,.75726,0,0],10935:[.26167,.75726,0,0],10936:[.26167,.75726,0,0],10937:[.26167,.75726,0,0],10938:[.26167,.75726,0,0],10949:[.25583,.75583,0,0],10950:[.25583,.75583,0,0],10955:[.28481,.79383,0,0],10956:[.28481,.79383,0,0],57350:[.08167,.58167,0,0],57351:[.08167,.58167,0,0],57352:[.08167,.58167,0,0],57353:[0,.43056,.04028,0],57356:[.25142,.75726,0,0],57357:[.25142,.75726,0,0],57358:[.41951,.91951,0,0],57359:[.30274,.79383,0,0],57360:[.30274,.79383,0,0],57361:[.41951,.91951,0,0],57366:[.25142,.75726,0,0],57367:[.25142,.75726,0,0],57368:[.25142,.75726,0,0],57369:[.25142,.75726,0,0],57370:[.13597,.63597,0,0],57371:[.13597,.63597,0,0]},"Caligraphic-Regular":{48:[0,.43056,0,0],49:[0,.43056,0,0],50:[0,.43056,0,0],51:[.19444,.43056,0,0],52:[.19444,.43056,0,0],53:[.19444,.43056,0,0],54:[0,.64444,0,0],55:[.19444,.43056,0,0],56:[0,.64444,0,0],57:[.19444,.43056,0,0],65:[0,.68333,0,.19445],66:[0,.68333,.03041,.13889],67:[0,.68333,.05834,.13889],68:[0,.68333,.02778,.08334],69:[0,.68333,.08944,.11111],70:[0,.68333,.09931,.11111],71:[.09722,.68333,.0593,.11111],72:[0,.68333,.00965,.11111],73:[0,.68333,.07382,0],74:[.09722,.68333,.18472,.16667],75:[0,.68333,.01445,.05556],76:[0,.68333,0,.13889],77:[0,.68333,0,.13889],78:[0,.68333,.14736,.08334],79:[0,.68333,.02778,.11111],80:[0,.68333,.08222,.08334],81:[.09722,.68333,0,.11111],82:[0,.68333,0,.08334],83:[0,.68333,.075,.13889],84:[0,.68333,.25417,0],85:[0,.68333,.09931,.08334],86:[0,.68333,.08222,0],87:[0,.68333,.08222,.08334],88:[0,.68333,.14643,.13889],89:[.09722,.68333,.08222,.08334],90:[0,.68333,.07944,.13889]},"Fraktur-Regular":{33:[0,.69141,0,0],34:[0,.69141,0,0],38:[0,.69141,0,0],39:[0,.69141,0,0],40:[.24982,.74947,0,0],41:[.24982,.74947,0,0],42:[0,.62119,0,0],43:[.08319,.58283,0,0],44:[0,.10803,0,0],45:[.08319,.58283,0,0],46:[0,.10803,0,0],47:[.24982,.74947,0,0],48:[0,.47534,0,0],49:[0,.47534,0,0],50:[0,.47534,0,0],51:[.18906,.47534,0,0],52:[.18906,.47534,0,0],53:[.18906,.47534,0,0],54:[0,.69141,0,0],55:[.18906,.47534,0,0],56:[0,.69141,0,0],57:[.18906,.47534,0,0],58:[0,.47534,0,0],59:[.12604,.47534,0,0],61:[-.13099,.36866,0,0],63:[0,.69141,0,0],65:[0,.69141,0,0],66:[0,.69141,0,0],67:[0,.69141,0,0],68:[0,.69141,0,0],69:[0,.69141,0,0],70:[.12604,.69141,0,0],71:[0,.69141,0,0],72:[.06302,.69141,0,0],73:[0,.69141,0,0],74:[.12604,.69141,0,0],75:[0,.69141,0,0],76:[0,.69141,0,0],77:[0,.69141,0,0],78:[0,.69141,0,0],79:[0,.69141,0,0],80:[.18906,.69141,0,0],81:[.03781,.69141,0,0],82:[0,.69141,0,0],83:[0,.69141,0,0],84:[0,.69141,0,0],85:[0,.69141,0,0],86:[0,.69141,0,0],87:[0,.69141,0,0],88:[0,.69141,0,0],89:[.18906,.69141,0,0],90:[.12604,.69141,0,0],91:[.24982,.74947,0,0],93:[.24982,.74947,0,0],94:[0,.69141,0,0],97:[0,.47534,0,0],98:[0,.69141,0,0],99:[0,.47534,0,0],100:[0,.62119,0,0],101:[0,.47534,0,0],102:[.18906,.69141,0,0],103:[.18906,.47534,0,0],104:[.18906,.69141,0,0],105:[0,.69141,0,0],106:[0,.69141,0,0],107:[0,.69141,0,0],108:[0,.69141,0,0],109:[0,.47534,0,0],110:[0,.47534,0,0],111:[0,.47534,0,0],112:[.18906,.52396,0,0],113:[.18906,.47534,0,0],114:[0,.47534,0,0],115:[0,.47534,0,0],116:[0,.62119,0,0],117:[0,.47534,0,0],118:[0,.52396,0,0],119:[0,.52396,0,0],120:[.18906,.47534,0,0],121:[.18906,.47534,0,0],122:[.18906,.47534,0,0],8216:[0,.69141,0,0],8217:[0,.69141,0,0],58112:[0,.62119,0,0],58113:[0,.62119,0,0],58114:[.18906,.69141,0,0],58115:[.18906,.69141,0,0],58116:[.18906,.47534,0,0],58117:[0,.69141,0,0],58118:[0,.62119,0,0],58119:[0,.47534,0,0]},"Main-Bold":{33:[0,.69444,0,0],34:[0,.69444,0,0],35:[.19444,.69444,0,0],36:[.05556,.75,0,0],37:[.05556,.75,0,0],38:[0,.69444,0,0],39:[0,.69444,0,0],40:[.25,.75,0,0],41:[.25,.75,0,0],42:[0,.75,0,0],43:[.13333,.63333,0,0],44:[.19444,.15556,0,0],45:[0,.44444,0,0],46:[0,.15556,0,0],47:[.25,.75,0,0],48:[0,.64444,0,0],49:[0,.64444,0,0],50:[0,.64444,0,0],51:[0,.64444,0,0],52:[0,.64444,0,0],53:[0,.64444,0,0],54:[0,.64444,0,0],55:[0,.64444,0,0],56:[0,.64444,0,0],57:[0,.64444,0,0],58:[0,.44444,0,0],59:[.19444,.44444,0,0],60:[.08556,.58556,0,0],61:[-.10889,.39111,0,0],62:[.08556,.58556,0,0],63:[0,.69444,0,0],64:[0,.69444,0,0],65:[0,.68611,0,0],66:[0,.68611,0,0],67:[0,.68611,0,0],68:[0,.68611,0,0],69:[0,.68611,0,0],70:[0,.68611,0,0],71:[0,.68611,0,0],72:[0,.68611,0,0],73:[0,.68611,0,0],74:[0,.68611,0,0],75:[0,.68611,0,0],76:[0,.68611,0,0],77:[0,.68611,0,0],78:[0,.68611,0,0],79:[0,.68611,0,0],80:[0,.68611,0,0],81:[.19444,.68611,0,0],82:[0,.68611,0,0],83:[0,.68611,0,0],84:[0,.68611,0,0],85:[0,.68611,0,0],86:[0,.68611,.01597,0],87:[0,.68611,.01597,0],88:[0,.68611,0,0],89:[0,.68611,.02875,0],90:[0,.68611,0,0],91:[.25,.75,0,0],92:[.25,.75,0,0],93:[.25,.75,0,0],94:[0,.69444,0,0],95:[.31,.13444,.03194,0],96:[0,.69444,0,0],97:[0,.44444,0,0],98:[0,.69444,0,0],99:[0,.44444,0,0],100:[0,.69444,0,0],101:[0,.44444,0,0],102:[0,.69444,.10903,0],103:[.19444,.44444,.01597,0],104:[0,.69444,0,0],105:[0,.69444,0,0],106:[.19444,.69444,0,0],107:[0,.69444,0,0],108:[0,.69444,0,0],109:[0,.44444,0,0],110:[0,.44444,0,0],111:[0,.44444,0,0],112:[.19444,.44444,0,0],113:[.19444,.44444,0,0],114:[0,.44444,0,0],115:[0,.44444,0,0],116:[0,.63492,0,0],117:[0,.44444,0,0],118:[0,.44444,.01597,0],119:[0,.44444,.01597,0],120:[0,.44444,0,0],121:[.19444,.44444,.01597,0],122:[0,.44444,0,0],123:[.25,.75,0,0],124:[.25,.75,0,0],125:[.25,.75,0,0],126:[.35,.34444,0,0],168:[0,.69444,0,0],172:[0,.44444,0,0],175:[0,.59611,0,0],176:[0,.69444,0,0],177:[.13333,.63333,0,0],180:[0,.69444,0,0],215:[.13333,.63333,0,0],247:[.13333,.63333,0,0],305:[0,.44444,0,0],567:[.19444,.44444,0,0],710:[0,.69444,0,0],711:[0,.63194,0,0],713:[0,.59611,0,0],714:[0,.69444,0,0],715:[0,.69444,0,0],728:[0,.69444,0,0],729:[0,.69444,0,0],730:[0,.69444,0,0],732:[0,.69444,0,0],768:[0,.69444,0,0],769:[0,.69444,0,0],770:[0,.69444,0,0],771:[0,.69444,0,0],772:[0,.59611,0,0],774:[0,.69444,0,0],775:[0,.69444,0,0],776:[0,.69444,0,0],778:[0,.69444,0,0],779:[0,.69444,0,0],780:[0,.63194,0,0],824:[.19444,.69444,0,0],915:[0,.68611,0,0],916:[0,.68611,0,0],920:[0,.68611,0,0],923:[0,.68611,0,0],926:[0,.68611,0,0],928:[0,.68611,0,0],931:[0,.68611,0,0],933:[0,.68611,0,0],934:[0,.68611,0,0],936:[0,.68611,0,0],937:[0,.68611,0,0],8211:[0,.44444,.03194,0],8212:[0,.44444,.03194,0],8216:[0,.69444,0,0],8217:[0,.69444,0,0],8220:[0,.69444,0,0],8221:[0,.69444,0,0],8224:[.19444,.69444,0,0],8225:[.19444,.69444,0,0],8242:[0,.55556,0,0],8407:[0,.72444,.15486,0],8463:[0,.69444,0,0],8465:[0,.69444,0,0],8467:[0,.69444,0,0],8472:[.19444,.44444,0,0],8476:[0,.69444,0,0],8501:[0,.69444,0,0],8592:[-.10889,.39111,0,0],8593:[.19444,.69444,0,0],8594:[-.10889,.39111,0,0],8595:[.19444,.69444,0,0],8596:[-.10889,.39111,0,0],8597:[.25,.75,0,0],8598:[.19444,.69444,0,0],8599:[.19444,.69444,0,0],8600:[.19444,.69444,0,0],8601:[.19444,.69444,0,0],8636:[-.10889,.39111,0,0],8637:[-.10889,.39111,0,0],8640:[-.10889,.39111,0,0],8641:[-.10889,.39111,0,0],8656:[-.10889,.39111,0,0],8657:[.19444,.69444,0,0],8658:[-.10889,.39111,0,0],8659:[.19444,.69444,0,0],8660:[-.10889,.39111,0,0],8661:[.25,.75,0,0],8704:[0,.69444,0,0],8706:[0,.69444,.06389,0],8707:[0,.69444,0,0],8709:[.05556,.75,0,0],8711:[0,.68611,0,0],8712:[.08556,.58556,0,0],8715:[.08556,.58556,0,0],8722:[.13333,.63333,0,0],8723:[.13333,.63333,0,0],8725:[.25,.75,0,0],8726:[.25,.75,0,0],8727:[-.02778,.47222,0,0],8728:[-.02639,.47361,0,0],8729:[-.02639,.47361,0,0],8730:[.18,.82,0,0],8733:[0,.44444,0,0],8734:[0,.44444,0,0],8736:[0,.69224,0,0],8739:[.25,.75,0,0],8741:[.25,.75,0,0],8743:[0,.55556,0,0],8744:[0,.55556,0,0],8745:[0,.55556,0,0],8746:[0,.55556,0,0],8747:[.19444,.69444,.12778,0],8764:[-.10889,.39111,0,0],8768:[.19444,.69444,0,0],8771:[.00222,.50222,0,0],8776:[.02444,.52444,0,0],8781:[.00222,.50222,0,0],8801:[.00222,.50222,0,0],8804:[.19667,.69667,0,0],8805:[.19667,.69667,0,0],8810:[.08556,.58556,0,0],8811:[.08556,.58556,0,0],8826:[.08556,.58556,0,0],8827:[.08556,.58556,0,0],8834:[.08556,.58556,0,0],8835:[.08556,.58556,0,0],8838:[.19667,.69667,0,0],8839:[.19667,.69667,0,0],8846:[0,.55556,0,0],8849:[.19667,.69667,0,0],8850:[.19667,.69667,0,0],8851:[0,.55556,0,0],8852:[0,.55556,0,0],8853:[.13333,.63333,0,0],8854:[.13333,.63333,0,0],8855:[.13333,.63333,0,0],8856:[.13333,.63333,0,0],8857:[.13333,.63333,0,0],8866:[0,.69444,0,0],8867:[0,.69444,0,0],8868:[0,.69444,0,0],8869:[0,.69444,0,0],8900:[-.02639,.47361,0,0],8901:[-.02639,.47361,0,0],8902:[-.02778,.47222,0,0],8968:[.25,.75,0,0],8969:[.25,.75,0,0],8970:[.25,.75,0,0],8971:[.25,.75,0,0],8994:[-.13889,.36111,0,0],8995:[-.13889,.36111,0,0],9651:[.19444,.69444,0,0],9657:[-.02778,.47222,0,0],9661:[.19444,.69444,0,0],9667:[-.02778,.47222,0,0],9711:[.19444,.69444,0,0],9824:[.12963,.69444,0,0],9825:[.12963,.69444,0,0],9826:[.12963,.69444,0,0],9827:[.12963,.69444,0,0],9837:[0,.75,0,0],9838:[.19444,.69444,0,0],9839:[.19444,.69444,0,0],10216:[.25,.75,0,0],10217:[.25,.75,0,0],10815:[0,.68611,0,0],10927:[.19667,.69667,0,0],10928:[.19667,.69667,0,0]},"Main-Italic":{33:[0,.69444,.12417,0],34:[0,.69444,.06961,0],35:[.19444,.69444,.06616,0],37:[.05556,.75,.13639,0],38:[0,.69444,.09694,0],39:[0,.69444,.12417,0],40:[.25,.75,.16194,0],41:[.25,.75,.03694,0],42:[0,.75,.14917,0],43:[.05667,.56167,.03694,0],44:[.19444,.10556,0,0],45:[0,.43056,.02826,0],46:[0,.10556,0,0],47:[.25,.75,.16194,0],48:[0,.64444,.13556,0],49:[0,.64444,.13556,0],50:[0,.64444,.13556,0],51:[0,.64444,.13556,0],52:[.19444,.64444,.13556,0],53:[0,.64444,.13556,0],54:[0,.64444,.13556,0],55:[.19444,.64444,.13556,0],56:[0,.64444,.13556,0],57:[0,.64444,.13556,0],58:[0,.43056,.0582,0],59:[.19444,.43056,.0582,0],61:[-.13313,.36687,.06616,0],63:[0,.69444,.1225,0],64:[0,.69444,.09597,0],65:[0,.68333,0,0],66:[0,.68333,.10257,0],67:[0,.68333,.14528,0],68:[0,.68333,.09403,0],69:[0,.68333,.12028,0],70:[0,.68333,.13305,0],71:[0,.68333,.08722,0],72:[0,.68333,.16389,0],73:[0,.68333,.15806,0],74:[0,.68333,.14028,0],75:[0,.68333,.14528,0],76:[0,.68333,0,0],77:[0,.68333,.16389,0],78:[0,.68333,.16389,0],79:[0,.68333,.09403,0],80:[0,.68333,.10257,0],81:[.19444,.68333,.09403,0],82:[0,.68333,.03868,0],83:[0,.68333,.11972,0],84:[0,.68333,.13305,0],85:[0,.68333,.16389,0],86:[0,.68333,.18361,0],87:[0,.68333,.18361,0],88:[0,.68333,.15806,0],89:[0,.68333,.19383,0],90:[0,.68333,.14528,0],91:[.25,.75,.1875,0],93:[.25,.75,.10528,0],94:[0,.69444,.06646,0],95:[.31,.12056,.09208,0],97:[0,.43056,.07671,0],98:[0,.69444,.06312,0],99:[0,.43056,.05653,0],100:[0,.69444,.10333,0],101:[0,.43056,.07514,0],102:[.19444,.69444,.21194,0],103:[.19444,.43056,.08847,0],104:[0,.69444,.07671,0],105:[0,.65536,.1019,0],106:[.19444,.65536,.14467,0],107:[0,.69444,.10764,0],108:[0,.69444,.10333,0],109:[0,.43056,.07671,0],110:[0,.43056,.07671,0],111:[0,.43056,.06312,0],112:[.19444,.43056,.06312,0],113:[.19444,.43056,.08847,0],114:[0,.43056,.10764,0],115:[0,.43056,.08208,0],116:[0,.61508,.09486,0],117:[0,.43056,.07671,0],118:[0,.43056,.10764,0],119:[0,.43056,.10764,0],120:[0,.43056,.12042,0],121:[.19444,.43056,.08847,0],122:[0,.43056,.12292,0],126:[.35,.31786,.11585,0],163:[0,.69444,0,0],305:[0,.43056,0,.02778],567:[.19444,.43056,0,.08334],768:[0,.69444,0,0],769:[0,.69444,.09694,0],770:[0,.69444,.06646,0],771:[0,.66786,.11585,0],772:[0,.56167,.10333,0],774:[0,.69444,.10806,0],775:[0,.66786,.11752,0],776:[0,.66786,.10474,0],778:[0,.69444,0,0],779:[0,.69444,.1225,0],780:[0,.62847,.08295,0],915:[0,.68333,.13305,0],916:[0,.68333,0,0],920:[0,.68333,.09403,0],923:[0,.68333,0,0],926:[0,.68333,.15294,0],928:[0,.68333,.16389,0],931:[0,.68333,.12028,0],933:[0,.68333,.11111,0],934:[0,.68333,.05986,0],936:[0,.68333,.11111,0],937:[0,.68333,.10257,0],8211:[0,.43056,.09208,0],8212:[0,.43056,.09208,0],8216:[0,.69444,.12417,0],8217:[0,.69444,.12417,0],8220:[0,.69444,.1685,0],8221:[0,.69444,.06961,0],8463:[0,.68889,0,0]},"Main-Regular":{32:[0,0,0,0],33:[0,.69444,0,0],34:[0,.69444,0,0],35:[.19444,.69444,0,0],36:[.05556,.75,0,0],37:[.05556,.75,0,0],38:[0,.69444,0,0],39:[0,.69444,0,0],40:[.25,.75,0,0],41:[.25,.75,0,0],42:[0,.75,0,0],43:[.08333,.58333,0,0],44:[.19444,.10556,0,0],45:[0,.43056,0,0],46:[0,.10556,0,0],47:[.25,.75,0,0],48:[0,.64444,0,0],49:[0,.64444,0,0],50:[0,.64444,0,0],51:[0,.64444,0,0],52:[0,.64444,0,0],53:[0,.64444,0,0],54:[0,.64444,0,0],55:[0,.64444,0,0],56:[0,.64444,0,0],57:[0,.64444,0,0],58:[0,.43056,0,0],59:[.19444,.43056,0,0],60:[.0391,.5391,0,0],61:[-.13313,.36687,0,0],62:[.0391,.5391,0,0],63:[0,.69444,0,0],64:[0,.69444,0,0],65:[0,.68333,0,0],66:[0,.68333,0,0],67:[0,.68333,0,0],68:[0,.68333,0,0],69:[0,.68333,0,0],70:[0,.68333,0,0],71:[0,.68333,0,0],72:[0,.68333,0,0],73:[0,.68333,0,0],74:[0,.68333,0,0],75:[0,.68333,0,0],76:[0,.68333,0,0],77:[0,.68333,0,0],78:[0,.68333,0,0],79:[0,.68333,0,0],80:[0,.68333,0,0],81:[.19444,.68333,0,0],82:[0,.68333,0,0],83:[0,.68333,0,0],84:[0,.68333,0,0],85:[0,.68333,0,0],86:[0,.68333,.01389,0],87:[0,.68333,.01389,0],88:[0,.68333,0,0],89:[0,.68333,.025,0],90:[0,.68333,0,0],91:[.25,.75,0,0],92:[.25,.75,0,0],93:[.25,.75,0,0],94:[0,.69444,0,0],95:[.31,.12056,.02778,0],96:[0,.69444,0,0],97:[0,.43056,0,0],98:[0,.69444,0,0],99:[0,.43056,0,0],100:[0,.69444,0,0],101:[0,.43056,0,0],102:[0,.69444,.07778,0],103:[.19444,.43056,.01389,0],104:[0,.69444,0,0],105:[0,.66786,0,0],106:[.19444,.66786,0,0],107:[0,.69444,0,0],108:[0,.69444,0,0],109:[0,.43056,0,0],110:[0,.43056,0,0],111:[0,.43056,0,0],112:[.19444,.43056,0,0],113:[.19444,.43056,0,0],114:[0,.43056,0,0],115:[0,.43056,0,0],116:[0,.61508,0,0],117:[0,.43056,0,0],118:[0,.43056,.01389,0],119:[0,.43056,.01389,0],120:[0,.43056,0,0],121:[.19444,.43056,.01389,0],122:[0,.43056,0,0],123:[.25,.75,0,0],124:[.25,.75,0,0],125:[.25,.75,0,0],126:[.35,.31786,0,0],160:[0,0,0,0],168:[0,.66786,0,0],172:[0,.43056,0,0],175:[0,.56778,0,0],176:[0,.69444,0,0],177:[.08333,.58333,0,0],180:[0,.69444,0,0],215:[.08333,.58333,0,0],247:[.08333,.58333,0,0],305:[0,.43056,0,0],567:[.19444,.43056,0,0],710:[0,.69444,0,0],711:[0,.62847,0,0],713:[0,.56778,0,0],714:[0,.69444,0,0],715:[0,.69444,0,0],728:[0,.69444,0,0],729:[0,.66786,0,0],730:[0,.69444,0,0],732:[0,.66786,0,0],768:[0,.69444,0,0],769:[0,.69444,0,0],770:[0,.69444,0,0],771:[0,.66786,0,0],772:[0,.56778,0,0],774:[0,.69444,0,0],775:[0,.66786,0,0],776:[0,.66786,0,0],778:[0,.69444,0,0],779:[0,.69444,0,0],780:[0,.62847,0,0],824:[.19444,.69444,0,0],915:[0,.68333,0,0],916:[0,.68333,0,0],920:[0,.68333,0,0],923:[0,.68333,0,0],926:[0,.68333,0,0],928:[0,.68333,0,0],931:[0,.68333,0,0],933:[0,.68333,0,0],934:[0,.68333,0,0],936:[0,.68333,0,0],937:[0,.68333,0,0],8211:[0,.43056,.02778,0],8212:[0,.43056,.02778,0],8216:[0,.69444,0,0],8217:[0,.69444,0,0],8220:[0,.69444,0,0],8221:[0,.69444,0,0],8224:[.19444,.69444,0,0],8225:[.19444,.69444,0,0],8230:[0,.12,0,0],8242:[0,.55556,0,0],8407:[0,.71444,.15382,0],8463:[0,.68889,0,0],8465:[0,.69444,0,0],8467:[0,.69444,0,.11111],8472:[.19444,.43056,0,.11111],8476:[0,.69444,0,0],8501:[0,.69444,0,0],8592:[-.13313,.36687,0,0],8593:[.19444,.69444,0,0],8594:[-.13313,.36687,0,0],8595:[.19444,.69444,0,0],8596:[-.13313,.36687,0,0],8597:[.25,.75,0,0],8598:[.19444,.69444,0,0],8599:[.19444,.69444,0,0],8600:[.19444,.69444,0,0],8601:[.19444,.69444,0,0],8614:[.011,.511,0,0],8617:[.011,.511,0,0],8618:[.011,.511,0,0],8636:[-.13313,.36687,0,0],8637:[-.13313,.36687,0,0],8640:[-.13313,.36687,0,0],8641:[-.13313,.36687,0,0],8652:[.011,.671,0,0],8656:[-.13313,.36687,0,0],8657:[.19444,.69444,0,0],8658:[-.13313,.36687,0,0],8659:[.19444,.69444,0,0],8660:[-.13313,.36687,0,0],8661:[.25,.75,0,0],8704:[0,.69444,0,0],8706:[0,.69444,.05556,.08334],8707:[0,.69444,0,0],8709:[.05556,.75,0,0],8711:[0,.68333,0,0],8712:[.0391,.5391,0,0],8715:[.0391,.5391,0,0],8722:[.08333,.58333,0,0],8723:[.08333,.58333,0,0],8725:[.25,.75,0,0],8726:[.25,.75,0,0],8727:[-.03472,.46528,0,0],8728:[-.05555,.44445,0,0],8729:[-.05555,.44445,0,0],8730:[.2,.8,0,0],8733:[0,.43056,0,0],8734:[0,.43056,0,0],8736:[0,.69224,0,0],8739:[.25,.75,0,0],8741:[.25,.75,0,0],8743:[0,.55556,0,0],8744:[0,.55556,0,0],8745:[0,.55556,0,0],8746:[0,.55556,0,0],8747:[.19444,.69444,.11111,0],8764:[-.13313,.36687,0,0],8768:[.19444,.69444,0,0],8771:[-.03625,.46375,0,0],8773:[-.022,.589,0,0],8776:[-.01688,.48312,0,0],8781:[-.03625,.46375,0,0],8784:[-.133,.67,0,0],8800:[.215,.716,0,0],8801:[-.03625,.46375,0,0],8804:[.13597,.63597,0,0],8805:[.13597,.63597,0,0],8810:[.0391,.5391,0,0],8811:[.0391,.5391,0,0],8826:[.0391,.5391,0,0],8827:[.0391,.5391,0,0],8834:[.0391,.5391,0,0],8835:[.0391,.5391,0,0],8838:[.13597,.63597,0,0],8839:[.13597,.63597,0,0],8846:[0,.55556,0,0],8849:[.13597,.63597,0,0],8850:[.13597,.63597,0,0],8851:[0,.55556,0,0],8852:[0,.55556,0,0],8853:[.08333,.58333,0,0],8854:[.08333,.58333,0,0],8855:[.08333,.58333,0,0],8856:[.08333,.58333,0,0],8857:[.08333,.58333,0,0],8866:[0,.69444,0,0],8867:[0,.69444,0,0],8868:[0,.69444,0,0],8869:[0,.69444,0,0],8872:[.249,.75,0,0],8900:[-.05555,.44445,0,0],8901:[-.05555,.44445,0,0],8902:[-.03472,.46528,0,0],8904:[.005,.505,0,0],8942:[.03,.9,0,0],8943:[-.19,.31,0,0],8945:[-.1,.82,0,0],8968:[.25,.75,0,0],8969:[.25,.75,0,0],8970:[.25,.75,0,0],8971:[.25,.75,0,0],8994:[-.14236,.35764,0,0],8995:[-.14236,.35764,0,0],9136:[.244,.744,0,0],9137:[.244,.744,0,0],9651:[.19444,.69444,0,0],9657:[-.03472,.46528,0,0],9661:[.19444,.69444,0,0],9667:[-.03472,.46528,0,0],9711:[.19444,.69444,0,0],9824:[.12963,.69444,0,0],9825:[.12963,.69444,0,0],9826:[.12963,.69444,0,0],9827:[.12963,.69444,0,0],9837:[0,.75,0,0],9838:[.19444,.69444,0,0],9839:[.19444,.69444,0,0],10216:[.25,.75,0,0],10217:[.25,.75,0,0],10222:[.244,.744,0,0],10223:[.244,.744,0,0],10229:[.011,.511,0,0],10230:[.011,.511,0,0],10231:[.011,.511,0,0],10232:[.024,.525,0,0],10233:[.024,.525,0,0],10234:[.024,.525,0,0],10236:[.011,.511,0,0],10815:[0,.68333,0,0],10927:[.13597,.63597,0,0],10928:[.13597,.63597,0,0]},"Math-BoldItalic":{47:[.19444,.69444,0,0],65:[0,.68611,0,0],66:[0,.68611,.04835,0],67:[0,.68611,.06979,0],68:[0,.68611,.03194,0],69:[0,.68611,.05451,0],70:[0,.68611,.15972,0],71:[0,.68611,0,0],72:[0,.68611,.08229,0],73:[0,.68611,.07778,0],74:[0,.68611,.10069,0],75:[0,.68611,.06979,0],76:[0,.68611,0,0],77:[0,.68611,.11424,0],78:[0,.68611,.11424,0],79:[0,.68611,.03194,0],80:[0,.68611,.15972,0],81:[.19444,.68611,0,0],82:[0,.68611,.00421,0],83:[0,.68611,.05382,0],84:[0,.68611,.15972,0],85:[0,.68611,.11424,0],86:[0,.68611,.25555,0],87:[0,.68611,.15972,0],88:[0,.68611,.07778,0],89:[0,.68611,.25555,0],90:[0,.68611,.06979,0],97:[0,.44444,0,0],98:[0,.69444,0,0],99:[0,.44444,0,0],100:[0,.69444,0,0],101:[0,.44444,0,0],102:[.19444,.69444,.11042,0],103:[.19444,.44444,.03704,0],104:[0,.69444,0,0],105:[0,.69326,0,0],106:[.19444,.69326,.0622,0],107:[0,.69444,.01852,0],108:[0,.69444,.0088,0],109:[0,.44444,0,0],110:[0,.44444,0,0],111:[0,.44444,0,0],112:[.19444,.44444,0,0],113:[.19444,.44444,.03704,0],114:[0,.44444,.03194,0],115:[0,.44444,0,0],116:[0,.63492,0,0],117:[0,.44444,0,0],118:[0,.44444,.03704,0],119:[0,.44444,.02778,0],120:[0,.44444,0,0],121:[.19444,.44444,.03704,0],122:[0,.44444,.04213,0],915:[0,.68611,.15972,0],916:[0,.68611,0,0],920:[0,.68611,.03194,0],923:[0,.68611,0,0],926:[0,.68611,.07458,0],928:[0,.68611,.08229,0],931:[0,.68611,.05451,0],933:[0,.68611,.15972,0],934:[0,.68611,0,0],936:[0,.68611,.11653,0],937:[0,.68611,.04835,0],945:[0,.44444,0,0],946:[.19444,.69444,.03403,0],947:[.19444,.44444,.06389,0],948:[0,.69444,.03819,0],949:[0,.44444,0,0],950:[.19444,.69444,.06215,0],951:[.19444,.44444,.03704,0],952:[0,.69444,.03194,0],953:[0,.44444,0,0],954:[0,.44444,0,0],955:[0,.69444,0,0],956:[.19444,.44444,0,0],957:[0,.44444,.06898,0],958:[.19444,.69444,.03021,0],959:[0,.44444,0,0],960:[0,.44444,.03704,0],961:[.19444,.44444,0,0],962:[.09722,.44444,.07917,0],963:[0,.44444,.03704,0],964:[0,.44444,.13472,0],965:[0,.44444,.03704,0],966:[.19444,.44444,0,0],967:[.19444,.44444,0,0],968:[.19444,.69444,.03704,0],969:[0,.44444,.03704,0],977:[0,.69444,0,0],981:[.19444,.69444,0,0],982:[0,.44444,.03194,0],1009:[.19444,.44444,0,0],1013:[0,.44444,0,0]},"Math-Italic":{47:[.19444,.69444,0,0],65:[0,.68333,0,.13889],66:[0,.68333,.05017,.08334],67:[0,.68333,.07153,.08334],68:[0,.68333,.02778,.05556],69:[0,.68333,.05764,.08334],70:[0,.68333,.13889,.08334],71:[0,.68333,0,.08334],72:[0,.68333,.08125,.05556],73:[0,.68333,.07847,.11111],74:[0,.68333,.09618,.16667],75:[0,.68333,.07153,.05556],76:[0,.68333,0,.02778],77:[0,.68333,.10903,.08334],78:[0,.68333,.10903,.08334],79:[0,.68333,.02778,.08334],80:[0,.68333,.13889,.08334],81:[.19444,.68333,0,.08334],82:[0,.68333,.00773,.08334],83:[0,.68333,.05764,.08334],84:[0,.68333,.13889,.08334],85:[0,.68333,.10903,.02778],86:[0,.68333,.22222,0],87:[0,.68333,.13889,0],88:[0,.68333,.07847,.08334],89:[0,.68333,.22222,0],90:[0,.68333,.07153,.08334],97:[0,.43056,0,0],98:[0,.69444,0,0],99:[0,.43056,0,.05556],100:[0,.69444,0,.16667],101:[0,.43056,0,.05556],
+102:[.19444,.69444,.10764,.16667],103:[.19444,.43056,.03588,.02778],104:[0,.69444,0,0],105:[0,.65952,0,0],106:[.19444,.65952,.05724,0],107:[0,.69444,.03148,0],108:[0,.69444,.01968,.08334],109:[0,.43056,0,0],110:[0,.43056,0,0],111:[0,.43056,0,.05556],112:[.19444,.43056,0,.08334],113:[.19444,.43056,.03588,.08334],114:[0,.43056,.02778,.05556],115:[0,.43056,0,.05556],116:[0,.61508,0,.08334],117:[0,.43056,0,.02778],118:[0,.43056,.03588,.02778],119:[0,.43056,.02691,.08334],120:[0,.43056,0,.02778],121:[.19444,.43056,.03588,.05556],122:[0,.43056,.04398,.05556],915:[0,.68333,.13889,.08334],916:[0,.68333,0,.16667],920:[0,.68333,.02778,.08334],923:[0,.68333,0,.16667],926:[0,.68333,.07569,.08334],928:[0,.68333,.08125,.05556],931:[0,.68333,.05764,.08334],933:[0,.68333,.13889,.05556],934:[0,.68333,0,.08334],936:[0,.68333,.11,.05556],937:[0,.68333,.05017,.08334],945:[0,.43056,.0037,.02778],946:[.19444,.69444,.05278,.08334],947:[.19444,.43056,.05556,0],948:[0,.69444,.03785,.05556],949:[0,.43056,0,.08334],950:[.19444,.69444,.07378,.08334],951:[.19444,.43056,.03588,.05556],952:[0,.69444,.02778,.08334],953:[0,.43056,0,.05556],954:[0,.43056,0,0],955:[0,.69444,0,0],956:[.19444,.43056,0,.02778],957:[0,.43056,.06366,.02778],958:[.19444,.69444,.04601,.11111],959:[0,.43056,0,.05556],960:[0,.43056,.03588,0],961:[.19444,.43056,0,.08334],962:[.09722,.43056,.07986,.08334],963:[0,.43056,.03588,0],964:[0,.43056,.1132,.02778],965:[0,.43056,.03588,.02778],966:[.19444,.43056,0,.08334],967:[.19444,.43056,0,.05556],968:[.19444,.69444,.03588,.11111],969:[0,.43056,.03588,0],977:[0,.69444,0,.08334],981:[.19444,.69444,0,.08334],982:[0,.43056,.02778,0],1009:[.19444,.43056,0,.08334],1013:[0,.43056,0,.05556]},"Math-Regular":{65:[0,.68333,0,.13889],66:[0,.68333,.05017,.08334],67:[0,.68333,.07153,.08334],68:[0,.68333,.02778,.05556],69:[0,.68333,.05764,.08334],70:[0,.68333,.13889,.08334],71:[0,.68333,0,.08334],72:[0,.68333,.08125,.05556],73:[0,.68333,.07847,.11111],74:[0,.68333,.09618,.16667],75:[0,.68333,.07153,.05556],76:[0,.68333,0,.02778],77:[0,.68333,.10903,.08334],78:[0,.68333,.10903,.08334],79:[0,.68333,.02778,.08334],80:[0,.68333,.13889,.08334],81:[.19444,.68333,0,.08334],82:[0,.68333,.00773,.08334],83:[0,.68333,.05764,.08334],84:[0,.68333,.13889,.08334],85:[0,.68333,.10903,.02778],86:[0,.68333,.22222,0],87:[0,.68333,.13889,0],88:[0,.68333,.07847,.08334],89:[0,.68333,.22222,0],90:[0,.68333,.07153,.08334],97:[0,.43056,0,0],98:[0,.69444,0,0],99:[0,.43056,0,.05556],100:[0,.69444,0,.16667],101:[0,.43056,0,.05556],102:[.19444,.69444,.10764,.16667],103:[.19444,.43056,.03588,.02778],104:[0,.69444,0,0],105:[0,.65952,0,0],106:[.19444,.65952,.05724,0],107:[0,.69444,.03148,0],108:[0,.69444,.01968,.08334],109:[0,.43056,0,0],110:[0,.43056,0,0],111:[0,.43056,0,.05556],112:[.19444,.43056,0,.08334],113:[.19444,.43056,.03588,.08334],114:[0,.43056,.02778,.05556],115:[0,.43056,0,.05556],116:[0,.61508,0,.08334],117:[0,.43056,0,.02778],118:[0,.43056,.03588,.02778],119:[0,.43056,.02691,.08334],120:[0,.43056,0,.02778],121:[.19444,.43056,.03588,.05556],122:[0,.43056,.04398,.05556],915:[0,.68333,.13889,.08334],916:[0,.68333,0,.16667],920:[0,.68333,.02778,.08334],923:[0,.68333,0,.16667],926:[0,.68333,.07569,.08334],928:[0,.68333,.08125,.05556],931:[0,.68333,.05764,.08334],933:[0,.68333,.13889,.05556],934:[0,.68333,0,.08334],936:[0,.68333,.11,.05556],937:[0,.68333,.05017,.08334],945:[0,.43056,.0037,.02778],946:[.19444,.69444,.05278,.08334],947:[.19444,.43056,.05556,0],948:[0,.69444,.03785,.05556],949:[0,.43056,0,.08334],950:[.19444,.69444,.07378,.08334],951:[.19444,.43056,.03588,.05556],952:[0,.69444,.02778,.08334],953:[0,.43056,0,.05556],954:[0,.43056,0,0],955:[0,.69444,0,0],956:[.19444,.43056,0,.02778],957:[0,.43056,.06366,.02778],958:[.19444,.69444,.04601,.11111],959:[0,.43056,0,.05556],960:[0,.43056,.03588,0],961:[.19444,.43056,0,.08334],962:[.09722,.43056,.07986,.08334],963:[0,.43056,.03588,0],964:[0,.43056,.1132,.02778],965:[0,.43056,.03588,.02778],966:[.19444,.43056,0,.08334],967:[.19444,.43056,0,.05556],968:[.19444,.69444,.03588,.11111],969:[0,.43056,.03588,0],977:[0,.69444,0,.08334],981:[.19444,.69444,0,.08334],982:[0,.43056,.02778,0],1009:[.19444,.43056,0,.08334],1013:[0,.43056,0,.05556]},"SansSerif-Regular":{33:[0,.69444,0,0],34:[0,.69444,0,0],35:[.19444,.69444,0,0],36:[.05556,.75,0,0],37:[.05556,.75,0,0],38:[0,.69444,0,0],39:[0,.69444,0,0],40:[.25,.75,0,0],41:[.25,.75,0,0],42:[0,.75,0,0],43:[.08333,.58333,0,0],44:[.125,.08333,0,0],45:[0,.44444,0,0],46:[0,.08333,0,0],47:[.25,.75,0,0],48:[0,.65556,0,0],49:[0,.65556,0,0],50:[0,.65556,0,0],51:[0,.65556,0,0],52:[0,.65556,0,0],53:[0,.65556,0,0],54:[0,.65556,0,0],55:[0,.65556,0,0],56:[0,.65556,0,0],57:[0,.65556,0,0],58:[0,.44444,0,0],59:[.125,.44444,0,0],61:[-.13,.37,0,0],63:[0,.69444,0,0],64:[0,.69444,0,0],65:[0,.69444,0,0],66:[0,.69444,0,0],67:[0,.69444,0,0],68:[0,.69444,0,0],69:[0,.69444,0,0],70:[0,.69444,0,0],71:[0,.69444,0,0],72:[0,.69444,0,0],73:[0,.69444,0,0],74:[0,.69444,0,0],75:[0,.69444,0,0],76:[0,.69444,0,0],77:[0,.69444,0,0],78:[0,.69444,0,0],79:[0,.69444,0,0],80:[0,.69444,0,0],81:[.125,.69444,0,0],82:[0,.69444,0,0],83:[0,.69444,0,0],84:[0,.69444,0,0],85:[0,.69444,0,0],86:[0,.69444,.01389,0],87:[0,.69444,.01389,0],88:[0,.69444,0,0],89:[0,.69444,.025,0],90:[0,.69444,0,0],91:[.25,.75,0,0],93:[.25,.75,0,0],94:[0,.69444,0,0],95:[.35,.09444,.02778,0],97:[0,.44444,0,0],98:[0,.69444,0,0],99:[0,.44444,0,0],100:[0,.69444,0,0],101:[0,.44444,0,0],102:[0,.69444,.06944,0],103:[.19444,.44444,.01389,0],104:[0,.69444,0,0],105:[0,.67937,0,0],106:[.19444,.67937,0,0],107:[0,.69444,0,0],108:[0,.69444,0,0],109:[0,.44444,0,0],110:[0,.44444,0,0],111:[0,.44444,0,0],112:[.19444,.44444,0,0],113:[.19444,.44444,0,0],114:[0,.44444,.01389,0],115:[0,.44444,0,0],116:[0,.57143,0,0],117:[0,.44444,0,0],118:[0,.44444,.01389,0],119:[0,.44444,.01389,0],120:[0,.44444,0,0],121:[.19444,.44444,.01389,0],122:[0,.44444,0,0],126:[.35,.32659,0,0],305:[0,.44444,0,0],567:[.19444,.44444,0,0],768:[0,.69444,0,0],769:[0,.69444,0,0],770:[0,.69444,0,0],771:[0,.67659,0,0],772:[0,.60889,0,0],774:[0,.69444,0,0],775:[0,.67937,0,0],776:[0,.67937,0,0],778:[0,.69444,0,0],779:[0,.69444,0,0],780:[0,.63194,0,0],915:[0,.69444,0,0],916:[0,.69444,0,0],920:[0,.69444,0,0],923:[0,.69444,0,0],926:[0,.69444,0,0],928:[0,.69444,0,0],931:[0,.69444,0,0],933:[0,.69444,0,0],934:[0,.69444,0,0],936:[0,.69444,0,0],937:[0,.69444,0,0],8211:[0,.44444,.02778,0],8212:[0,.44444,.02778,0],8216:[0,.69444,0,0],8217:[0,.69444,0,0],8220:[0,.69444,0,0],8221:[0,.69444,0,0]},"Script-Regular":{65:[0,.7,.22925,0],66:[0,.7,.04087,0],67:[0,.7,.1689,0],68:[0,.7,.09371,0],69:[0,.7,.18583,0],70:[0,.7,.13634,0],71:[0,.7,.17322,0],72:[0,.7,.29694,0],73:[0,.7,.19189,0],74:[.27778,.7,.19189,0],75:[0,.7,.31259,0],76:[0,.7,.19189,0],77:[0,.7,.15981,0],78:[0,.7,.3525,0],79:[0,.7,.08078,0],80:[0,.7,.08078,0],81:[0,.7,.03305,0],82:[0,.7,.06259,0],83:[0,.7,.19189,0],84:[0,.7,.29087,0],85:[0,.7,.25815,0],86:[0,.7,.27523,0],87:[0,.7,.27523,0],88:[0,.7,.26006,0],89:[0,.7,.2939,0],90:[0,.7,.24037,0]},"Size1-Regular":{40:[.35001,.85,0,0],41:[.35001,.85,0,0],47:[.35001,.85,0,0],91:[.35001,.85,0,0],92:[.35001,.85,0,0],93:[.35001,.85,0,0],123:[.35001,.85,0,0],125:[.35001,.85,0,0],710:[0,.72222,0,0],732:[0,.72222,0,0],770:[0,.72222,0,0],771:[0,.72222,0,0],8214:[-99e-5,.601,0,0],8593:[1e-5,.6,0,0],8595:[1e-5,.6,0,0],8657:[1e-5,.6,0,0],8659:[1e-5,.6,0,0],8719:[.25001,.75,0,0],8720:[.25001,.75,0,0],8721:[.25001,.75,0,0],8730:[.35001,.85,0,0],8739:[-.00599,.606,0,0],8741:[-.00599,.606,0,0],8747:[.30612,.805,.19445,0],8748:[.306,.805,.19445,0],8749:[.306,.805,.19445,0],8750:[.30612,.805,.19445,0],8896:[.25001,.75,0,0],8897:[.25001,.75,0,0],8898:[.25001,.75,0,0],8899:[.25001,.75,0,0],8968:[.35001,.85,0,0],8969:[.35001,.85,0,0],8970:[.35001,.85,0,0],8971:[.35001,.85,0,0],9168:[-99e-5,.601,0,0],10216:[.35001,.85,0,0],10217:[.35001,.85,0,0],10752:[.25001,.75,0,0],10753:[.25001,.75,0,0],10754:[.25001,.75,0,0],10756:[.25001,.75,0,0],10758:[.25001,.75,0,0]},"Size2-Regular":{40:[.65002,1.15,0,0],41:[.65002,1.15,0,0],47:[.65002,1.15,0,0],91:[.65002,1.15,0,0],92:[.65002,1.15,0,0],93:[.65002,1.15,0,0],123:[.65002,1.15,0,0],125:[.65002,1.15,0,0],710:[0,.75,0,0],732:[0,.75,0,0],770:[0,.75,0,0],771:[0,.75,0,0],8719:[.55001,1.05,0,0],8720:[.55001,1.05,0,0],8721:[.55001,1.05,0,0],8730:[.65002,1.15,0,0],8747:[.86225,1.36,.44445,0],8748:[.862,1.36,.44445,0],8749:[.862,1.36,.44445,0],8750:[.86225,1.36,.44445,0],8896:[.55001,1.05,0,0],8897:[.55001,1.05,0,0],8898:[.55001,1.05,0,0],8899:[.55001,1.05,0,0],8968:[.65002,1.15,0,0],8969:[.65002,1.15,0,0],8970:[.65002,1.15,0,0],8971:[.65002,1.15,0,0],10216:[.65002,1.15,0,0],10217:[.65002,1.15,0,0],10752:[.55001,1.05,0,0],10753:[.55001,1.05,0,0],10754:[.55001,1.05,0,0],10756:[.55001,1.05,0,0],10758:[.55001,1.05,0,0]},"Size3-Regular":{40:[.95003,1.45,0,0],41:[.95003,1.45,0,0],47:[.95003,1.45,0,0],91:[.95003,1.45,0,0],92:[.95003,1.45,0,0],93:[.95003,1.45,0,0],123:[.95003,1.45,0,0],125:[.95003,1.45,0,0],710:[0,.75,0,0],732:[0,.75,0,0],770:[0,.75,0,0],771:[0,.75,0,0],8730:[.95003,1.45,0,0],8968:[.95003,1.45,0,0],8969:[.95003,1.45,0,0],8970:[.95003,1.45,0,0],8971:[.95003,1.45,0,0],10216:[.95003,1.45,0,0],10217:[.95003,1.45,0,0]},"Size4-Regular":{40:[1.25003,1.75,0,0],41:[1.25003,1.75,0,0],47:[1.25003,1.75,0,0],91:[1.25003,1.75,0,0],92:[1.25003,1.75,0,0],93:[1.25003,1.75,0,0],123:[1.25003,1.75,0,0],125:[1.25003,1.75,0,0],710:[0,.825,0,0],732:[0,.825,0,0],770:[0,.825,0,0],771:[0,.825,0,0],8730:[1.25003,1.75,0,0],8968:[1.25003,1.75,0,0],8969:[1.25003,1.75,0,0],8970:[1.25003,1.75,0,0],8971:[1.25003,1.75,0,0],9115:[.64502,1.155,0,0],9116:[1e-5,.6,0,0],9117:[.64502,1.155,0,0],9118:[.64502,1.155,0,0],9119:[1e-5,.6,0,0],9120:[.64502,1.155,0,0],9121:[.64502,1.155,0,0],9122:[-99e-5,.601,0,0],9123:[.64502,1.155,0,0],9124:[.64502,1.155,0,0],9125:[-99e-5,.601,0,0],9126:[.64502,1.155,0,0],9127:[1e-5,.9,0,0],9128:[.65002,1.15,0,0],9129:[.90001,0,0,0],9130:[0,.3,0,0],9131:[1e-5,.9,0,0],9132:[.65002,1.15,0,0],9133:[.90001,0,0,0],9143:[.88502,.915,0,0],10216:[1.25003,1.75,0,0],10217:[1.25003,1.75,0,0],57344:[-.00499,.605,0,0],57345:[-.00499,.605,0,0],57680:[0,.12,0,0],57681:[0,.12,0,0],57682:[0,.12,0,0],57683:[0,.12,0,0]},"Typewriter-Regular":{33:[0,.61111,0,0],34:[0,.61111,0,0],35:[0,.61111,0,0],36:[.08333,.69444,0,0],37:[.08333,.69444,0,0],38:[0,.61111,0,0],39:[0,.61111,0,0],40:[.08333,.69444,0,0],41:[.08333,.69444,0,0],42:[0,.52083,0,0],43:[-.08056,.53055,0,0],44:[.13889,.125,0,0],45:[-.08056,.53055,0,0],46:[0,.125,0,0],47:[.08333,.69444,0,0],48:[0,.61111,0,0],49:[0,.61111,0,0],50:[0,.61111,0,0],51:[0,.61111,0,0],52:[0,.61111,0,0],53:[0,.61111,0,0],54:[0,.61111,0,0],55:[0,.61111,0,0],56:[0,.61111,0,0],57:[0,.61111,0,0],58:[0,.43056,0,0],59:[.13889,.43056,0,0],60:[-.05556,.55556,0,0],61:[-.19549,.41562,0,0],62:[-.05556,.55556,0,0],63:[0,.61111,0,0],64:[0,.61111,0,0],65:[0,.61111,0,0],66:[0,.61111,0,0],67:[0,.61111,0,0],68:[0,.61111,0,0],69:[0,.61111,0,0],70:[0,.61111,0,0],71:[0,.61111,0,0],72:[0,.61111,0,0],73:[0,.61111,0,0],74:[0,.61111,0,0],75:[0,.61111,0,0],76:[0,.61111,0,0],77:[0,.61111,0,0],78:[0,.61111,0,0],79:[0,.61111,0,0],80:[0,.61111,0,0],81:[.13889,.61111,0,0],82:[0,.61111,0,0],83:[0,.61111,0,0],84:[0,.61111,0,0],85:[0,.61111,0,0],86:[0,.61111,0,0],87:[0,.61111,0,0],88:[0,.61111,0,0],89:[0,.61111,0,0],90:[0,.61111,0,0],91:[.08333,.69444,0,0],92:[.08333,.69444,0,0],93:[.08333,.69444,0,0],94:[0,.61111,0,0],95:[.09514,0,0,0],96:[0,.61111,0,0],97:[0,.43056,0,0],98:[0,.61111,0,0],99:[0,.43056,0,0],100:[0,.61111,0,0],101:[0,.43056,0,0],102:[0,.61111,0,0],103:[.22222,.43056,0,0],104:[0,.61111,0,0],105:[0,.61111,0,0],106:[.22222,.61111,0,0],107:[0,.61111,0,0],108:[0,.61111,0,0],109:[0,.43056,0,0],110:[0,.43056,0,0],111:[0,.43056,0,0],112:[.22222,.43056,0,0],113:[.22222,.43056,0,0],114:[0,.43056,0,0],115:[0,.43056,0,0],116:[0,.55358,0,0],117:[0,.43056,0,0],118:[0,.43056,0,0],119:[0,.43056,0,0],120:[0,.43056,0,0],121:[.22222,.43056,0,0],122:[0,.43056,0,0],123:[.08333,.69444,0,0],124:[.08333,.69444,0,0],125:[.08333,.69444,0,0],126:[0,.61111,0,0],127:[0,.61111,0,0],305:[0,.43056,0,0],567:[.22222,.43056,0,0],768:[0,.61111,0,0],769:[0,.61111,0,0],770:[0,.61111,0,0],771:[0,.61111,0,0],772:[0,.56555,0,0],774:[0,.61111,0,0],776:[0,.61111,0,0],778:[0,.61111,0,0],780:[0,.56597,0,0],915:[0,.61111,0,0],916:[0,.61111,0,0],920:[0,.61111,0,0],923:[0,.61111,0,0],926:[0,.61111,0,0],928:[0,.61111,0,0],931:[0,.61111,0,0],933:[0,.61111,0,0],934:[0,.61111,0,0],936:[0,.61111,0,0],937:[0,.61111,0,0],2018:[0,.61111,0,0],2019:[0,.61111,0,0],8242:[0,.61111,0,0]}}},{}],20:[function(e,t,r){var a=e("./utils");var i=e("./ParseError");var s=e("./parseData");var n=s.ParseNode;function l(e,r,a){if(typeof e==="string"){e=[e]}if(typeof r==="number"){r={numArgs:r}}var i={numArgs:r.numArgs,argTypes:r.argTypes,greediness:r.greediness===undefined?1:r.greediness,allowedInText:!!r.allowedInText,numOptionalArgs:r.numOptionalArgs||0,infix:!!r.infix,handler:a};for(var s=0;s<e.length;++s){t.exports[e[s]]=i}}var o=function(e){if(e.type==="ordgroup"){return e.value}else{return[e]}};l("\\sqrt",{numArgs:1,numOptionalArgs:1},function(e,t){var r=t[0];var a=t[1];return{type:"sqrt",body:a,index:r}});var u={"\\text":undefined,"\\textrm":"mathrm","\\textsf":"mathsf","\\texttt":"mathtt","\\textnormal":"mathrm","\\textbf":"mathbf","\\textit":"textit"};l(["\\text","\\textrm","\\textsf","\\texttt","\\textnormal","\\textbf","\\textit"],{numArgs:1,argTypes:["text"],greediness:2,allowedInText:true},function(e,t){var r=t[0];return{type:"text",body:o(r),style:u[e.funcName]}});l("\\color",{numArgs:2,allowedInText:true,greediness:3,argTypes:["color","original"]},function(e,t){var r=t[0];var a=t[1];return{type:"color",color:r.value,value:o(a)}});l("\\overline",{numArgs:1},function(e,t){var r=t[0];return{type:"overline",body:r}});l("\\underline",{numArgs:1},function(e,t){var r=t[0];return{type:"underline",body:r}});l("\\rule",{numArgs:2,numOptionalArgs:1,argTypes:["size","size","size"]},function(e,t){var r=t[0];var a=t[1];var i=t[2];return{type:"rule",shift:r&&r.value,width:a.value,height:i.value}});l(["\\kern","\\mkern"],{numArgs:1,argTypes:["size"]},function(e,t){return{type:"kern",dimension:t[0].value}});l("\\KaTeX",{numArgs:0},function(e){return{type:"katex"}});l("\\phantom",{numArgs:1},function(e,t){var r=t[0];return{type:"phantom",value:o(r)}});l(["\\mathord","\\mathbin","\\mathrel","\\mathopen","\\mathclose","\\mathpunct","\\mathinner"],{numArgs:1},function(e,t){var r=t[0];return{type:"mclass",mclass:"m"+e.funcName.substr(5),value:o(r)}});l("\\stackrel",{numArgs:2},function(e,t){var r=t[0];var a=t[1];var i=new n("op",{type:"op",limits:true,alwaysHandleSupSub:true,symbol:false,value:o(a)},a.mode);var s=new n("supsub",{base:i,sup:r,sub:null},r.mode);return{type:"mclass",mclass:"mrel",value:[s]}});l("\\bmod",{numArgs:0},function(e,t){return{type:"mod",modType:"bmod",value:null}});l(["\\pod","\\pmod","\\mod"],{numArgs:1},function(e,t){var r=t[0];return{type:"mod",modType:e.funcName.substr(1),value:o(r)}});var h={"\\bigl":{mclass:"mopen",size:1},"\\Bigl":{mclass:"mopen",size:2},"\\biggl":{mclass:"mopen",size:3},"\\Biggl":{mclass:"mopen",size:4},"\\bigr":{mclass:"mclose",size:1},"\\Bigr":{mclass:"mclose",size:2},"\\biggr":{mclass:"mclose",size:3},"\\Biggr":{mclass:"mclose",size:4},"\\bigm":{mclass:"mrel",size:1},"\\Bigm":{mclass:"mrel",size:2},"\\biggm":{mclass:"mrel",size:3},"\\Biggm":{mclass:"mrel",size:4},"\\big":{mclass:"mord",size:1},"\\Big":{mclass:"mord",size:2},"\\bigg":{mclass:"mord",size:3},"\\Bigg":{mclass:"mord",size:4}};var c=["(",")","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","\\lfloor","\\rfloor","\\lceil","\\rceil","<",">","\\langle","\\rangle","\\lt","\\gt","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","\\lmoustache","\\rmoustache","/","\\backslash","|","\\vert","\\|","\\Vert","\\uparrow","\\Uparrow","\\downarrow","\\Downarrow","\\updownarrow","\\Updownarrow","."];var p={"\\Bbb":"\\mathbb","\\bold":"\\mathbf","\\frak":"\\mathfrak"};l(["\\blue","\\orange","\\pink","\\red","\\green","\\gray","\\purple","\\blueA","\\blueB","\\blueC","\\blueD","\\blueE","\\tealA","\\tealB","\\tealC","\\tealD","\\tealE","\\greenA","\\greenB","\\greenC","\\greenD","\\greenE","\\goldA","\\goldB","\\goldC","\\goldD","\\goldE","\\redA","\\redB","\\redC","\\redD","\\redE","\\maroonA","\\maroonB","\\maroonC","\\maroonD","\\maroonE","\\purpleA","\\purpleB","\\purpleC","\\purpleD","\\purpleE","\\mintA","\\mintB","\\mintC","\\grayA","\\grayB","\\grayC","\\grayD","\\grayE","\\grayF","\\grayG","\\grayH","\\grayI","\\kaBlue","\\kaGreen"],{numArgs:1,allowedInText:true,greediness:3},function(e,t){var r=t[0];return{type:"color",color:"katex-"+e.funcName.slice(1),value:o(r)}});l(["\\arcsin","\\arccos","\\arctan","\\arg","\\cos","\\cosh","\\cot","\\coth","\\csc","\\deg","\\dim","\\exp","\\hom","\\ker","\\lg","\\ln","\\log","\\sec","\\sin","\\sinh","\\tan","\\tanh"],{numArgs:0},function(e){return{type:"op",limits:false,symbol:false,body:e.funcName}});l(["\\det","\\gcd","\\inf","\\lim","\\liminf","\\limsup","\\max","\\min","\\Pr","\\sup"],{numArgs:0},function(e){return{type:"op",limits:true,symbol:false,body:e.funcName}});l(["\\int","\\iint","\\iiint","\\oint"],{numArgs:0},function(e){return{type:"op",limits:false,symbol:true,body:e.funcName}});l(["\\coprod","\\bigvee","\\bigwedge","\\biguplus","\\bigcap","\\bigcup","\\intop","\\prod","\\sum","\\bigotimes","\\bigoplus","\\bigodot","\\bigsqcup","\\smallint"],{numArgs:0},function(e){return{type:"op",limits:true,symbol:true,body:e.funcName}});l("\\mathop",{numArgs:1},function(e,t){var r=t[0];return{type:"op",limits:false,symbol:false,value:o(r)}});l(["\\dfrac","\\frac","\\tfrac","\\dbinom","\\binom","\\tbinom","\\\\atopfrac"],{numArgs:2,greediness:2},function(e,t){var r=t[0];var a=t[1];var i;var s=null;var n=null;var l="auto";switch(e.funcName){case"\\dfrac":case"\\frac":case"\\tfrac":i=true;break;case"\\\\atopfrac":i=false;break;case"\\dbinom":case"\\binom":case"\\tbinom":i=false;s="(";n=")";break;default:throw new Error("Unrecognized genfrac command")}switch(e.funcName){case"\\dfrac":case"\\dbinom":l="display";break;case"\\tfrac":case"\\tbinom":l="text";break}return{type:"genfrac",numer:r,denom:a,hasBarLine:i,leftDelim:s,rightDelim:n,size:l}});l(["\\llap","\\rlap"],{numArgs:1,allowedInText:true},function(e,t){var r=t[0];return{type:e.funcName.slice(1),body:r}});var m=function(e,t){if(a.contains(c,e.value)){return e}else{throw new i("Invalid delimiter: '"+e.value+"' after '"+t.funcName+"'",e)}};l(["\\bigl","\\Bigl","\\biggl","\\Biggl","\\bigr","\\Bigr","\\biggr","\\Biggr","\\bigm","\\Bigm","\\biggm","\\Biggm","\\big","\\Big","\\bigg","\\Bigg"],{numArgs:1},function(e,t){var r=m(t[0],e);return{type:"delimsizing",size:h[e.funcName].size,mclass:h[e.funcName].mclass,value:r.value}});l(["\\left","\\right"],{numArgs:1},function(e,t){var r=m(t[0],e);return{type:"leftright",value:r.value}});l("\\middle",{numArgs:1},function(e,t){var r=m(t[0],e);if(!e.parser.leftrightDepth){throw new i("\\middle without preceding \\left",r)}return{type:"middle",value:r.value}});l(["\\tiny","\\scriptsize","\\footnotesize","\\small","\\normalsize","\\large","\\Large","\\LARGE","\\huge","\\Huge"],0,null);l(["\\displaystyle","\\textstyle","\\scriptstyle","\\scriptscriptstyle"],0,null);l(["\\mathrm","\\mathit","\\mathbf","\\mathbb","\\mathcal","\\mathfrak","\\mathscr","\\mathsf","\\mathtt","\\Bbb","\\bold","\\frak"],{numArgs:1,greediness:2},function(e,t){var r=t[0];var a=e.funcName;if(a in p){a=p[a]}return{type:"font",font:a.slice(1),body:r}});l(["\\acute","\\grave","\\ddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot"],{numArgs:1},function(e,t){var r=t[0];return{type:"accent",accent:e.funcName,base:r}});l(["\\over","\\choose","\\atop"],{numArgs:0,infix:true},function(e){var t;switch(e.funcName){case"\\over":t="\\frac";break;case"\\choose":t="\\binom";break;case"\\atop":t="\\\\atopfrac";break;default:throw new Error("Unrecognized infix genfrac command")}return{type:"infix",replaceWith:t,token:e.token}});l(["\\\\","\\cr"],{numArgs:0,numOptionalArgs:1,argTypes:["size"]},function(e,t){var r=t[0];return{type:"cr",size:r}});l(["\\begin","\\end"],{numArgs:1,argTypes:["text"]},function(e,t){var r=t[0];if(r.type!=="ordgroup"){throw new i("Invalid environment name",r)}var a="";for(var s=0;s<r.value.length;++s){a+=r.value[s].value}return{type:"environment",name:a,nameGroup:r}})},{"./ParseError":6,"./parseData":22,"./utils":26}],21:[function(e,t,r){var a=e("./utils");function i(e,t){this.type=e;this.attributes={};this.children=t||[]}i.prototype.setAttribute=function(e,t){this.attributes[e]=t};i.prototype.toNode=function(){var e=document.createElementNS("http://www.w3.org/1998/Math/MathML",this.type);for(var t in this.attributes){if(Object.prototype.hasOwnProperty.call(this.attributes,t)){e.setAttribute(t,this.attributes[t])}}for(var r=0;r<this.children.length;r++){e.appendChild(this.children[r].toNode())}return e};i.prototype.toMarkup=function(){var e="<"+this.type;for(var t in this.attributes){if(Object.prototype.hasOwnProperty.call(this.attributes,t)){e+=" "+t+'="';e+=a.escape(this.attributes[t]);e+='"'}}e+=">";for(var r=0;r<this.children.length;r++){e+=this.children[r].toMarkup()}e+="</"+this.type+">";return e};function s(e){this.text=e}s.prototype.toNode=function(){return document.createTextNode(this.text)};s.prototype.toMarkup=function(){return a.escape(this.text)};t.exports={MathNode:i,TextNode:s}},{"./utils":26}],22:[function(e,t,r){function a(e,t,r,a,i){this.type=e;this.value=t;this.mode=r;if(a&&(!i||i.lexer===a.lexer)){this.lexer=a.lexer;this.start=a.start;this.end=(i||a).end}}t.exports={ParseNode:a}},{}],23:[function(e,t,r){var a=e("./Parser");var i=function(e,t){if(!(typeof e==="string"||e instanceof String)){throw new TypeError("KaTeX can only parse string typed expression")}var r=new a(e,t);return r.parse()};t.exports=i},{"./Parser":7}],24:[function(e,t,r){t.exports={math:{},text:{}};function a(e,r,a,i,s){t.exports[e][s]={font:r,group:a,replace:i}}var i="math";var s="text";var n="main";var l="ams";var o="accent";var u="bin";var h="close";var c="inner";var p="mathord";var m="op";var f="open";var v="punct";var d="rel";var g="spacing";var y="textord";a(i,n,d,"\u2261","\\equiv");a(i,n,d,"\u227a","\\prec");a(i,n,d,"\u227b","\\succ");a(i,n,d,"\u223c","\\sim");a(i,n,d,"\u22a5","\\perp");a(i,n,d,"\u2aaf","\\preceq");a(i,n,d,"\u2ab0","\\succeq");a(i,n,d,"\u2243","\\simeq");a(i,n,d,"\u2223","\\mid");a(i,n,d,"\u226a","\\ll");a(i,n,d,"\u226b","\\gg");a(i,n,d,"\u224d","\\asymp");a(i,n,d,"\u2225","\\parallel");a(i,n,d,"\u22c8","\\bowtie");a(i,n,d,"\u2323","\\smile");a(i,n,d,"\u2291","\\sqsubseteq");a(i,n,d,"\u2292","\\sqsupseteq");a(i,n,d,"\u2250","\\doteq");a(i,n,d,"\u2322","\\frown");a(i,n,d,"\u220b","\\ni");a(i,n,d,"\u221d","\\propto");a(i,n,d,"\u22a2","\\vdash");a(i,n,d,"\u22a3","\\dashv");a(i,n,d,"\u220b","\\owns");a(i,n,v,".","\\ldotp");a(i,n,v,"\u22c5","\\cdotp");a(i,n,y,"#","\\#");a(s,n,y,"#","\\#");a(i,n,y,"&","\\&");a(s,n,y,"&","\\&");a(i,n,y,"\u2135","\\aleph");a(i,n,y,"\u2200","\\forall");a(i,n,y,"\u210f","\\hbar");a(i,n,y,"\u2203","\\exists");a(i,n,y,"\u2207","\\nabla");a(i,n,y,"\u266d","\\flat");a(i,n,y,"\u2113","\\ell");a(i,n,y,"\u266e","\\natural");a(i,n,y,"\u2663","\\clubsuit");a(i,n,y,"\u2118","\\wp");a(i,n,y,"\u266f","\\sharp");a(i,n,y,"\u2662","\\diamondsuit");a(i,n,y,"\u211c","\\Re");a(i,n,y,"\u2661","\\heartsuit");a(i,n,y,"\u2111","\\Im");a(i,n,y,"\u2660","\\spadesuit");a(i,n,y,"\u2020","\\dag");a(i,n,y,"\u2021","\\ddag");a(i,n,h,"\u23b1","\\rmoustache");a(i,n,f,"\u23b0","\\lmoustache");a(i,n,h,"\u27ef","\\rgroup");a(i,n,f,"\u27ee","\\lgroup");a(i,n,u,"\u2213","\\mp");a(i,n,u,"\u2296","\\ominus");a(i,n,u,"\u228e","\\uplus");a(i,n,u,"\u2293","\\sqcap");a(i,n,u,"\u2217","\\ast");a(i,n,u,"\u2294","\\sqcup");a(i,n,u,"\u25ef","\\bigcirc");a(i,n,u,"\u2219","\\bullet");a(i,n,u,"\u2021","\\ddagger");a(i,n,u,"\u2240","\\wr");a(i,n,u,"\u2a3f","\\amalg");a(i,n,d,"\u27f5","\\longleftarrow");a(i,n,d,"\u21d0","\\Leftarrow");a(i,n,d,"\u27f8","\\Longleftarrow");a(i,n,d,"\u27f6","\\longrightarrow");a(i,n,d,"\u21d2","\\Rightarrow");a(i,n,d,"\u27f9","\\Longrightarrow");a(i,n,d,"\u2194","\\leftrightarrow");a(i,n,d,"\u27f7","\\longleftrightarrow");a(i,n,d,"\u21d4","\\Leftrightarrow");a(i,n,d,"\u27fa","\\Longleftrightarrow");a(i,n,d,"\u21a6","\\mapsto");a(i,n,d,"\u27fc","\\longmapsto");a(i,n,d,"\u2197","\\nearrow");a(i,n,d,"\u21a9","\\hookleftarrow");a(i,n,d,"\u21aa","\\hookrightarrow");a(i,n,d,"\u2198","\\searrow");a(i,n,d,"\u21bc","\\leftharpoonup");a(i,n,d,"\u21c0","\\rightharpoonup");a(i,n,d,"\u2199","\\swarrow");a(i,n,d,"\u21bd","\\leftharpoondown");a(i,n,d,"\u21c1","\\rightharpoondown");a(i,n,d,"\u2196","\\nwarrow");a(i,n,d,"\u21cc","\\rightleftharpoons");a(i,l,d,"\u226e","\\nless");a(i,l,d,"\ue010","\\nleqslant");a(i,l,d,"\ue011","\\nleqq");a(i,l,d,"\u2a87","\\lneq");a(i,l,d,"\u2268","\\lneqq");a(i,l,d,"\ue00c","\\lvertneqq");a(i,l,d,"\u22e6","\\lnsim");a(i,l,d,"\u2a89","\\lnapprox");a(i,l,d,"\u2280","\\nprec");a(i,l,d,"\u22e0","\\npreceq");a(i,l,d,"\u22e8","\\precnsim");a(i,l,d,"\u2ab9","\\precnapprox");a(i,l,d,"\u2241","\\nsim");a(i,l,d,"\ue006","\\nshortmid");a(i,l,d,"\u2224","\\nmid");a(i,l,d,"\u22ac","\\nvdash");a(i,l,d,"\u22ad","\\nvDash");a(i,l,d,"\u22ea","\\ntriangleleft");a(i,l,d,"\u22ec","\\ntrianglelefteq");a(i,l,d,"\u228a","\\subsetneq");a(i,l,d,"\ue01a","\\varsubsetneq");a(i,l,d,"\u2acb","\\subsetneqq");a(i,l,d,"\ue017","\\varsubsetneqq");a(i,l,d,"\u226f","\\ngtr");a(i,l,d,"\ue00f","\\ngeqslant");a(i,l,d,"\ue00e","\\ngeqq");a(i,l,d,"\u2a88","\\gneq");a(i,l,d,"\u2269","\\gneqq");a(i,l,d,"\ue00d","\\gvertneqq");a(i,l,d,"\u22e7","\\gnsim");a(i,l,d,"\u2a8a","\\gnapprox");a(i,l,d,"\u2281","\\nsucc");a(i,l,d,"\u22e1","\\nsucceq");a(i,l,d,"\u22e9","\\succnsim");a(i,l,d,"\u2aba","\\succnapprox");a(i,l,d,"\u2246","\\ncong");a(i,l,d,"\ue007","\\nshortparallel");a(i,l,d,"\u2226","\\nparallel");a(i,l,d,"\u22af","\\nVDash");a(i,l,d,"\u22eb","\\ntriangleright");a(i,l,d,"\u22ed","\\ntrianglerighteq");a(i,l,d,"\ue018","\\nsupseteqq");a(i,l,d,"\u228b","\\supsetneq");a(i,l,d,"\ue01b","\\varsupsetneq");a(i,l,d,"\u2acc","\\supsetneqq");a(i,l,d,"\ue019","\\varsupsetneqq");a(i,l,d,"\u22ae","\\nVdash");a(i,l,d,"\u2ab5","\\precneqq");a(i,l,d,"\u2ab6","\\succneqq");a(i,l,d,"\ue016","\\nsubseteqq");a(i,l,u,"\u22b4","\\unlhd");a(i,l,u,"\u22b5","\\unrhd");a(i,l,d,"\u219a","\\nleftarrow");a(i,l,d,"\u219b","\\nrightarrow");a(i,l,d,"\u21cd","\\nLeftarrow");a(i,l,d,"\u21cf","\\nRightarrow");a(i,l,d,"\u21ae","\\nleftrightarrow");a(i,l,d,"\u21ce","\\nLeftrightarrow");a(i,l,d,"\u25b3","\\vartriangle");a(i,l,y,"\u210f","\\hslash");a(i,l,y,"\u25bd","\\triangledown");a(i,l,y,"\u25ca","\\lozenge");a(i,l,y,"\u24c8","\\circledS");a(i,l,y,"\xae","\\circledR");a(i,l,y,"\u2221","\\measuredangle");a(i,l,y,"\u2204","\\nexists");a(i,l,y,"\u2127","\\mho");a(i,l,y,"\u2132","\\Finv");a(i,l,y,"\u2141","\\Game");a(i,l,y,"k","\\Bbbk");a(i,l,y,"\u2035","\\backprime");a(i,l,y,"\u25b2","\\blacktriangle");a(i,l,y,"\u25bc","\\blacktriangledown");a(i,l,y,"\u25a0","\\blacksquare");a(i,l,y,"\u29eb","\\blacklozenge");a(i,l,y,"\u2605","\\bigstar");a(i,l,y,"\u2222","\\sphericalangle");a(i,l,y,"\u2201","\\complement");a(i,l,y,"\xf0","\\eth");a(i,l,y,"\u2571","\\diagup");a(i,l,y,"\u2572","\\diagdown");a(i,l,y,"\u25a1","\\square");a(i,l,y,"\u25a1","\\Box");a(i,l,y,"\u25ca","\\Diamond");a(i,l,y,"\xa5","\\yen");a(i,l,y,"\u2713","\\checkmark");a(i,l,y,"\u2136","\\beth");a(i,l,y,"\u2138","\\daleth");a(i,l,y,"\u2137","\\gimel");a(i,l,y,"\u03dd","\\digamma");a(i,l,y,"\u03f0","\\varkappa");a(i,l,f,"\u250c","\\ulcorner");a(i,l,h,"\u2510","\\urcorner");a(i,l,f,"\u2514","\\llcorner");a(i,l,h,"\u2518","\\lrcorner");a(i,l,d,"\u2266","\\leqq");a(i,l,d,"\u2a7d","\\leqslant");a(i,l,d,"\u2a95","\\eqslantless");a(i,l,d,"\u2272","\\lesssim");a(i,l,d,"\u2a85","\\lessapprox");a(i,l,d,"\u224a","\\approxeq");a(i,l,u,"\u22d6","\\lessdot");a(i,l,d,"\u22d8","\\lll");a(i,l,d,"\u2276","\\lessgtr");a(i,l,d,"\u22da","\\lesseqgtr");a(i,l,d,"\u2a8b","\\lesseqqgtr");a(i,l,d,"\u2251","\\doteqdot");a(i,l,d,"\u2253","\\risingdotseq");a(i,l,d,"\u2252","\\fallingdotseq");a(i,l,d,"\u223d","\\backsim");a(i,l,d,"\u22cd","\\backsimeq");a(i,l,d,"\u2ac5","\\subseteqq");a(i,l,d,"\u22d0","\\Subset");a(i,l,d,"\u228f","\\sqsubset");a(i,l,d,"\u227c","\\preccurlyeq");a(i,l,d,"\u22de","\\curlyeqprec");a(i,l,d,"\u227e","\\precsim");a(i,l,d,"\u2ab7","\\precapprox");a(i,l,d,"\u22b2","\\vartriangleleft");a(i,l,d,"\u22b4","\\trianglelefteq");a(i,l,d,"\u22a8","\\vDash");a(i,l,d,"\u22aa","\\Vvdash");a(i,l,d,"\u2323","\\smallsmile");a(i,l,d,"\u2322","\\smallfrown");a(i,l,d,"\u224f","\\bumpeq");a(i,l,d,"\u224e","\\Bumpeq");a(i,l,d,"\u2267","\\geqq");a(i,l,d,"\u2a7e","\\geqslant");a(i,l,d,"\u2a96","\\eqslantgtr");a(i,l,d,"\u2273","\\gtrsim");a(i,l,d,"\u2a86","\\gtrapprox");a(i,l,u,"\u22d7","\\gtrdot");a(i,l,d,"\u22d9","\\ggg");a(i,l,d,"\u2277","\\gtrless");a(i,l,d,"\u22db","\\gtreqless");a(i,l,d,"\u2a8c","\\gtreqqless");a(i,l,d,"\u2256","\\eqcirc");a(i,l,d,"\u2257","\\circeq");a(i,l,d,"\u225c","\\triangleq");a(i,l,d,"\u223c","\\thicksim");a(i,l,d,"\u2248","\\thickapprox");a(i,l,d,"\u2ac6","\\supseteqq");a(i,l,d,"\u22d1","\\Supset");a(i,l,d,"\u2290","\\sqsupset");a(i,l,d,"\u227d","\\succcurlyeq");a(i,l,d,"\u22df","\\curlyeqsucc");a(i,l,d,"\u227f","\\succsim");a(i,l,d,"\u2ab8","\\succapprox");a(i,l,d,"\u22b3","\\vartriangleright");a(i,l,d,"\u22b5","\\trianglerighteq");a(i,l,d,"\u22a9","\\Vdash");a(i,l,d,"\u2223","\\shortmid");a(i,l,d,"\u2225","\\shortparallel");a(i,l,d,"\u226c","\\between");a(i,l,d,"\u22d4","\\pitchfork");a(i,l,d,"\u221d","\\varpropto");a(i,l,d,"\u25c0","\\blacktriangleleft");a(i,l,d,"\u2234","\\therefore");a(i,l,d,"\u220d","\\backepsilon");a(i,l,d,"\u25b6","\\blacktriangleright");a(i,l,d,"\u2235","\\because");a(i,l,d,"\u22d8","\\llless");a(i,l,d,"\u22d9","\\gggtr");a(i,l,u,"\u22b2","\\lhd");a(i,l,u,"\u22b3","\\rhd");a(i,l,d,"\u2242","\\eqsim");a(i,n,d,"\u22c8","\\Join");a(i,l,d,"\u2251","\\Doteq");a(i,l,u,"\u2214","\\dotplus");a(i,l,u,"\u2216","\\smallsetminus");a(i,l,u,"\u22d2","\\Cap");a(i,l,u,"\u22d3","\\Cup");a(i,l,u,"\u2a5e","\\doublebarwedge");a(i,l,u,"\u229f","\\boxminus");a(i,l,u,"\u229e","\\boxplus");a(i,l,u,"\u22c7","\\divideontimes");a(i,l,u,"\u22c9","\\ltimes");a(i,l,u,"\u22ca","\\rtimes");a(i,l,u,"\u22cb","\\leftthreetimes");a(i,l,u,"\u22cc","\\rightthreetimes");a(i,l,u,"\u22cf","\\curlywedge");a(i,l,u,"\u22ce","\\curlyvee");a(i,l,u,"\u229d","\\circleddash");a(i,l,u,"\u229b","\\circledast");a(i,l,u,"\u22c5","\\centerdot");a(i,l,u,"\u22ba","\\intercal");a(i,l,u,"\u22d2","\\doublecap");a(i,l,u,"\u22d3","\\doublecup");a(i,l,u,"\u22a0","\\boxtimes");a(i,l,d,"\u21e2","\\dashrightarrow");a(i,l,d,"\u21e0","\\dashleftarrow");a(i,l,d,"\u21c7","\\leftleftarrows");a(i,l,d,"\u21c6","\\leftrightarrows");a(i,l,d,"\u21da","\\Lleftarrow");a(i,l,d,"\u219e","\\twoheadleftarrow");a(i,l,d,"\u21a2","\\leftarrowtail");a(i,l,d,"\u21ab","\\looparrowleft");a(i,l,d,"\u21cb","\\leftrightharpoons");a(i,l,d,"\u21b6","\\curvearrowleft");a(i,l,d,"\u21ba","\\circlearrowleft");a(i,l,d,"\u21b0","\\Lsh");a(i,l,d,"\u21c8","\\upuparrows");a(i,l,d,"\u21bf","\\upharpoonleft");a(i,l,d,"\u21c3","\\downharpoonleft");a(i,l,d,"\u22b8","\\multimap");a(i,l,d,"\u21ad","\\leftrightsquigarrow");a(i,l,d,"\u21c9","\\rightrightarrows");a(i,l,d,"\u21c4","\\rightleftarrows");a(i,l,d,"\u21a0","\\twoheadrightarrow");a(i,l,d,"\u21a3","\\rightarrowtail");a(i,l,d,"\u21ac","\\looparrowright");a(i,l,d,"\u21b7","\\curvearrowright");a(i,l,d,"\u21bb","\\circlearrowright");a(i,l,d,"\u21b1","\\Rsh");a(i,l,d,"\u21ca","\\downdownarrows");a(i,l,d,"\u21be","\\upharpoonright");a(i,l,d,"\u21c2","\\downharpoonright");a(i,l,d,"\u21dd","\\rightsquigarrow");a(i,l,d,"\u21dd","\\leadsto");a(i,l,d,"\u21db","\\Rrightarrow");a(i,l,d,"\u21be","\\restriction");a(i,n,y,"\u2018","`");a(i,n,y,"$","\\$");a(s,n,y,"$","\\$");a(i,n,y,"%","\\%");a(s,n,y,"%","\\%");a(i,n,y,"_","\\_");a(s,n,y,"_","\\_");
+a(i,n,y,"\u2220","\\angle");a(i,n,y,"\u221e","\\infty");a(i,n,y,"\u2032","\\prime");a(i,n,y,"\u25b3","\\triangle");a(i,n,y,"\u0393","\\Gamma");a(i,n,y,"\u0394","\\Delta");a(i,n,y,"\u0398","\\Theta");a(i,n,y,"\u039b","\\Lambda");a(i,n,y,"\u039e","\\Xi");a(i,n,y,"\u03a0","\\Pi");a(i,n,y,"\u03a3","\\Sigma");a(i,n,y,"\u03a5","\\Upsilon");a(i,n,y,"\u03a6","\\Phi");a(i,n,y,"\u03a8","\\Psi");a(i,n,y,"\u03a9","\\Omega");a(i,n,y,"\xac","\\neg");a(i,n,y,"\xac","\\lnot");a(i,n,y,"\u22a4","\\top");a(i,n,y,"\u22a5","\\bot");a(i,n,y,"\u2205","\\emptyset");a(i,l,y,"\u2205","\\varnothing");a(i,n,p,"\u03b1","\\alpha");a(i,n,p,"\u03b2","\\beta");a(i,n,p,"\u03b3","\\gamma");a(i,n,p,"\u03b4","\\delta");a(i,n,p,"\u03f5","\\epsilon");a(i,n,p,"\u03b6","\\zeta");a(i,n,p,"\u03b7","\\eta");a(i,n,p,"\u03b8","\\theta");a(i,n,p,"\u03b9","\\iota");a(i,n,p,"\u03ba","\\kappa");a(i,n,p,"\u03bb","\\lambda");a(i,n,p,"\u03bc","\\mu");a(i,n,p,"\u03bd","\\nu");a(i,n,p,"\u03be","\\xi");a(i,n,p,"o","\\omicron");a(i,n,p,"\u03c0","\\pi");a(i,n,p,"\u03c1","\\rho");a(i,n,p,"\u03c3","\\sigma");a(i,n,p,"\u03c4","\\tau");a(i,n,p,"\u03c5","\\upsilon");a(i,n,p,"\u03d5","\\phi");a(i,n,p,"\u03c7","\\chi");a(i,n,p,"\u03c8","\\psi");a(i,n,p,"\u03c9","\\omega");a(i,n,p,"\u03b5","\\varepsilon");a(i,n,p,"\u03d1","\\vartheta");a(i,n,p,"\u03d6","\\varpi");a(i,n,p,"\u03f1","\\varrho");a(i,n,p,"\u03c2","\\varsigma");a(i,n,p,"\u03c6","\\varphi");a(i,n,u,"\u2217","*");a(i,n,u,"+","+");a(i,n,u,"\u2212","-");a(i,n,u,"\u22c5","\\cdot");a(i,n,u,"\u2218","\\circ");a(i,n,u,"\xf7","\\div");a(i,n,u,"\xb1","\\pm");a(i,n,u,"\xd7","\\times");a(i,n,u,"\u2229","\\cap");a(i,n,u,"\u222a","\\cup");a(i,n,u,"\u2216","\\setminus");a(i,n,u,"\u2227","\\land");a(i,n,u,"\u2228","\\lor");a(i,n,u,"\u2227","\\wedge");a(i,n,u,"\u2228","\\vee");a(i,n,y,"\u221a","\\surd");a(i,n,f,"(","(");a(i,n,f,"[","[");a(i,n,f,"\u27e8","\\langle");a(i,n,f,"\u2223","\\lvert");a(i,n,f,"\u2225","\\lVert");a(i,n,h,")",")");a(i,n,h,"]","]");a(i,n,h,"?","?");a(i,n,h,"!","!");a(i,n,h,"\u27e9","\\rangle");a(i,n,h,"\u2223","\\rvert");a(i,n,h,"\u2225","\\rVert");a(i,n,d,"=","=");a(i,n,d,"<","<");a(i,n,d,">",">");a(i,n,d,":",":");a(i,n,d,"\u2248","\\approx");a(i,n,d,"\u2245","\\cong");a(i,n,d,"\u2265","\\ge");a(i,n,d,"\u2265","\\geq");a(i,n,d,"\u2190","\\gets");a(i,n,d,">","\\gt");a(i,n,d,"\u2208","\\in");a(i,n,d,"\u2209","\\notin");a(i,n,d,"\u2282","\\subset");a(i,n,d,"\u2283","\\supset");a(i,n,d,"\u2286","\\subseteq");a(i,n,d,"\u2287","\\supseteq");a(i,l,d,"\u2288","\\nsubseteq");a(i,l,d,"\u2289","\\nsupseteq");a(i,n,d,"\u22a8","\\models");a(i,n,d,"\u2190","\\leftarrow");a(i,n,d,"\u2264","\\le");a(i,n,d,"\u2264","\\leq");a(i,n,d,"<","\\lt");a(i,n,d,"\u2260","\\ne");a(i,n,d,"\u2260","\\neq");a(i,n,d,"\u2192","\\rightarrow");a(i,n,d,"\u2192","\\to");a(i,l,d,"\u2271","\\ngeq");a(i,l,d,"\u2270","\\nleq");a(i,n,g,null,"\\!");a(i,n,g,"\xa0","\\ ");a(i,n,g,"\xa0","~");a(i,n,g,null,"\\,");a(i,n,g,null,"\\:");a(i,n,g,null,"\\;");a(i,n,g,null,"\\enspace");a(i,n,g,null,"\\qquad");a(i,n,g,null,"\\quad");a(i,n,g,"\xa0","\\space");a(i,n,v,",",",");a(i,n,v,";",";");a(i,n,v,":","\\colon");a(i,l,u,"\u22bc","\\barwedge");a(i,l,u,"\u22bb","\\veebar");a(i,n,u,"\u2299","\\odot");a(i,n,u,"\u2295","\\oplus");a(i,n,u,"\u2297","\\otimes");a(i,n,y,"\u2202","\\partial");a(i,n,u,"\u2298","\\oslash");a(i,l,u,"\u229a","\\circledcirc");a(i,l,u,"\u22a1","\\boxdot");a(i,n,u,"\u25b3","\\bigtriangleup");a(i,n,u,"\u25bd","\\bigtriangledown");a(i,n,u,"\u2020","\\dagger");a(i,n,u,"\u22c4","\\diamond");a(i,n,u,"\u22c6","\\star");a(i,n,u,"\u25c3","\\triangleleft");a(i,n,u,"\u25b9","\\triangleright");a(i,n,f,"{","\\{");a(s,n,y,"{","\\{");a(i,n,h,"}","\\}");a(s,n,y,"}","\\}");a(i,n,f,"{","\\lbrace");a(i,n,h,"}","\\rbrace");a(i,n,f,"[","\\lbrack");a(i,n,h,"]","\\rbrack");a(i,n,f,"\u230a","\\lfloor");a(i,n,h,"\u230b","\\rfloor");a(i,n,f,"\u2308","\\lceil");a(i,n,h,"\u2309","\\rceil");a(i,n,y,"\\","\\backslash");a(i,n,y,"\u2223","|");a(i,n,y,"\u2223","\\vert");a(i,n,y,"\u2225","\\|");a(i,n,y,"\u2225","\\Vert");a(i,n,d,"\u2191","\\uparrow");a(i,n,d,"\u21d1","\\Uparrow");a(i,n,d,"\u2193","\\downarrow");a(i,n,d,"\u21d3","\\Downarrow");a(i,n,d,"\u2195","\\updownarrow");a(i,n,d,"\u21d5","\\Updownarrow");a(i,i,m,"\u2210","\\coprod");a(i,i,m,"\u22c1","\\bigvee");a(i,i,m,"\u22c0","\\bigwedge");a(i,i,m,"\u2a04","\\biguplus");a(i,i,m,"\u22c2","\\bigcap");a(i,i,m,"\u22c3","\\bigcup");a(i,i,m,"\u222b","\\int");a(i,i,m,"\u222b","\\intop");a(i,i,m,"\u222c","\\iint");a(i,i,m,"\u222d","\\iiint");a(i,i,m,"\u220f","\\prod");a(i,i,m,"\u2211","\\sum");a(i,i,m,"\u2a02","\\bigotimes");a(i,i,m,"\u2a01","\\bigoplus");a(i,i,m,"\u2a00","\\bigodot");a(i,i,m,"\u222e","\\oint");a(i,i,m,"\u2a06","\\bigsqcup");a(i,i,m,"\u222b","\\smallint");a(s,n,c,"\u2026","\\textellipsis");a(i,n,c,"\u2026","\\mathellipsis");a(s,n,c,"\u2026","\\ldots");a(i,n,c,"\u2026","\\ldots");a(i,n,c,"\u22ef","\\cdots");a(i,n,c,"\u22f1","\\ddots");a(i,n,y,"\u22ee","\\vdots");a(i,n,o,"\xb4","\\acute");a(i,n,o,"`","\\grave");a(i,n,o,"\xa8","\\ddot");a(i,n,o,"~","\\tilde");a(i,n,o,"\xaf","\\bar");a(i,n,o,"\u02d8","\\breve");a(i,n,o,"\u02c7","\\check");a(i,n,o,"^","\\hat");a(i,n,o,"\u20d7","\\vec");a(i,n,o,"\u02d9","\\dot");a(i,n,p,"\u0131","\\imath");a(i,n,p,"\u0237","\\jmath");a(s,n,y,"\u2013","--");a(s,n,y,"\u2014","---");a(s,n,y,"\u2018","`");a(s,n,y,"\u2019","'");a(s,n,y,"\u201c","``");a(s,n,y,"\u201d","''");a(i,n,y,"\xb0","\\degree");a(s,n,y,"\xb0","\\degree");a(i,n,p,"\xa3","\\pounds");a(i,l,y,"\u2720","\\maltese");a(s,l,y,"\u2720","\\maltese");a(s,n,g,"\xa0","\\ ");a(s,n,g,"\xa0"," ");a(s,n,g,"\xa0","~");var b;var w;var x='0123456789/@."';for(b=0;b<x.length;b++){w=x.charAt(b);a(i,n,y,w,w)}var k='0123456789!@*()-=+[]";:?/.,';for(b=0;b<k.length;b++){w=k.charAt(b);a(s,n,y,w,w)}var z="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";for(b=0;b<z.length;b++){w=z.charAt(b);a(i,n,p,w,w);a(s,n,y,w,w)}for(b=192;b<=214;b++){w=String.fromCharCode(b);a(s,n,y,w,w)}for(b=216;b<=246;b++){w=String.fromCharCode(b);a(s,n,y,w,w)}for(b=248;b<=255;b++){w=String.fromCharCode(b);a(s,n,y,w,w)}for(b=1040;b<=1103;b++){w=String.fromCharCode(b);a(s,n,y,w,w)}a(s,n,y,"\u2013","\u2013");a(s,n,y,"\u2014","\u2014");a(s,n,y,"\u2018","\u2018");a(s,n,y,"\u2019","\u2019");a(s,n,y,"\u201c","\u201c");a(s,n,y,"\u201d","\u201d")},{}],25:[function(e,t,r){var a=/[\uAC00-\uD7AF]/;var i=/[\u3040-\u309F]|[\u30A0-\u30FF]|[\u4E00-\u9FAF]|[\uAC00-\uD7AF]/;t.exports={cjkRegex:i,hangulRegex:a}},{}],26:[function(e,t,r){var a=Array.prototype.indexOf;var i=function(e,t){if(e==null){return-1}if(a&&e.indexOf===a){return e.indexOf(t)}var r=0;var i=e.length;for(;r<i;r++){if(e[r]===t){return r}}return-1};var s=function(e,t){return i(e,t)!==-1};var n=function(e,t){return e===undefined?t:e};var l=/([A-Z])/g;var o=function(e){return e.replace(l,"-$1").toLowerCase()};var u={"&":"&amp;",">":"&gt;","<":"&lt;",'"':"&quot;","'":"&#x27;"};var h=/[&><"']/g;function c(e){return u[e]}function p(e){return(""+e).replace(h,c)}var m;if(typeof document!=="undefined"){var f=document.createElement("span");if("textContent"in f){m=function(e,t){e.textContent=t}}else{m=function(e,t){e.innerText=t}}}function v(e){m(e,"")}t.exports={contains:s,deflt:n,escape:p,hyphenate:o,indexOf:i,setTextContent:m,clearNode:v}},{}]},{},[1])(1)});
diff --git a/graphics/ketcindy/ketcindyfolder/scripts/ketcindyjs/makefunlist.cdy b/graphics/ketcindy/ketcindyfolder/scripts/ketcindyjs/makefunlist.cdy
new file mode 100644
index 0000000000..f7993fa39c
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/scripts/ketcindyjs/makefunlist.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/scripts/ketcindyjs/webfont.js b/graphics/ketcindy/ketcindyfolder/scripts/ketcindyjs/webfont.js
new file mode 100644
index 0000000000..e1e978523c
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/scripts/ketcindyjs/webfont.js
@@ -0,0 +1,45 @@
+/*
+ * Copyright 2015 Small Batch, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+/* Web Font Loader v1.5.18 - (c) Adobe Systems, Google. License: Apache 2.0 */
+;(function(window,document,undefined){function aa(a,b,c){return a.call.apply(a.bind,arguments)}function ba(a,b,c){if(!a)throw Error();if(2<arguments.length){var d=Array.prototype.slice.call(arguments,2);return function(){var c=Array.prototype.slice.call(arguments);Array.prototype.unshift.apply(c,d);return a.apply(b,c)}}return function(){return a.apply(b,arguments)}}function k(a,b,c){k=Function.prototype.bind&&-1!=Function.prototype.bind.toString().indexOf("native code")?aa:ba;return k.apply(null,arguments)}var n=Date.now||function(){return+new Date};function q(a,b){this.K=a;this.w=b||a;this.G=this.w.document}q.prototype.createElement=function(a,b,c){a=this.G.createElement(a);if(b)for(var d in b)b.hasOwnProperty(d)&&("style"==d?a.style.cssText=b[d]:a.setAttribute(d,b[d]));c&&a.appendChild(this.G.createTextNode(c));return a};function r(a,b,c){a=a.G.getElementsByTagName(b)[0];a||(a=document.documentElement);a&&a.lastChild&&a.insertBefore(c,a.lastChild)}function ca(a,b){function c(){a.G.body?b():setTimeout(c,0)}c()}
+function s(a,b,c){b=b||[];c=c||[];for(var d=a.className.split(/\s+/),e=0;e<b.length;e+=1){for(var f=!1,g=0;g<d.length;g+=1)if(b[e]===d[g]){f=!0;break}f||d.push(b[e])}b=[];for(e=0;e<d.length;e+=1){f=!1;for(g=0;g<c.length;g+=1)if(d[e]===c[g]){f=!0;break}f||b.push(d[e])}a.className=b.join(" ").replace(/\s+/g," ").replace(/^\s+|\s+$/,"")}function t(a,b){for(var c=a.className.split(/\s+/),d=0,e=c.length;d<e;d++)if(c[d]==b)return!0;return!1}
+function u(a){if("string"===typeof a.na)return a.na;var b=a.w.location.protocol;"about:"==b&&(b=a.K.location.protocol);return"https:"==b?"https:":"http:"}function v(a,b){var c=a.createElement("link",{rel:"stylesheet",href:b,media:"all"}),d=!1;c.onload=function(){d||(d=!0)};c.onerror=function(){d||(d=!0)};r(a,"head",c)}
+function w(a,b,c,d){var e=a.G.getElementsByTagName("head")[0];if(e){var f=a.createElement("script",{src:b}),g=!1;f.onload=f.onreadystatechange=function(){g||this.readyState&&"loaded"!=this.readyState&&"complete"!=this.readyState||(g=!0,c&&c(null),f.onload=f.onreadystatechange=null,"HEAD"==f.parentNode.tagName&&e.removeChild(f))};e.appendChild(f);window.setTimeout(function(){g||(g=!0,c&&c(Error("Script load timeout")))},d||5E3);return f}return null};function x(a,b){this.Y=a;this.ga=b};function y(a,b,c,d){this.c=null!=a?a:null;this.g=null!=b?b:null;this.D=null!=c?c:null;this.e=null!=d?d:null}var da=/^([0-9]+)(?:[\._-]([0-9]+))?(?:[\._-]([0-9]+))?(?:[\._+-]?(.*))?$/;y.prototype.compare=function(a){return this.c>a.c||this.c===a.c&&this.g>a.g||this.c===a.c&&this.g===a.g&&this.D>a.D?1:this.c<a.c||this.c===a.c&&this.g<a.g||this.c===a.c&&this.g===a.g&&this.D<a.D?-1:0};y.prototype.toString=function(){return[this.c,this.g||"",this.D||"",this.e||""].join("")};
+function z(a){a=da.exec(a);var b=null,c=null,d=null,e=null;a&&(null!==a[1]&&a[1]&&(b=parseInt(a[1],10)),null!==a[2]&&a[2]&&(c=parseInt(a[2],10)),null!==a[3]&&a[3]&&(d=parseInt(a[3],10)),null!==a[4]&&a[4]&&(e=/^[0-9]+$/.test(a[4])?parseInt(a[4],10):a[4]));return new y(b,c,d,e)};function A(a,b,c,d,e,f,g,h){this.N=a;this.k=h}A.prototype.getName=function(){return this.N};function B(a){this.a=a}var ea=new A("Unknown",0,0,0,0,0,0,new x(!1,!1));
+B.prototype.parse=function(){var a;if(-1!=this.a.indexOf("MSIE")||-1!=this.a.indexOf("Trident/")){a=C(this);var b=z(D(this)),c=null,d=E(this.a,/Trident\/([\d\w\.]+)/,1),c=-1!=this.a.indexOf("MSIE")?z(E(this.a,/MSIE ([\d\w\.]+)/,1)):z(E(this.a,/rv:([\d\w\.]+)/,1));""!=d&&z(d);a=new A("MSIE",0,0,0,0,0,0,new x("Windows"==a&&6<=c.c||"Windows Phone"==a&&8<=b.c,!1))}else if(-1!=this.a.indexOf("Opera"))a:if(a=z(E(this.a,/Presto\/([\d\w\.]+)/,1)),z(D(this)),null!==a.c||z(E(this.a,/rv:([^\)]+)/,1)),-1!=this.a.indexOf("Opera Mini/"))a=
+z(E(this.a,/Opera Mini\/([\d\.]+)/,1)),a=new A("OperaMini",0,0,0,C(this),0,0,new x(!1,!1));else{if(-1!=this.a.indexOf("Version/")&&(a=z(E(this.a,/Version\/([\d\.]+)/,1)),null!==a.c)){a=new A("Opera",0,0,0,C(this),0,0,new x(10<=a.c,!1));break a}a=z(E(this.a,/Opera[\/ ]([\d\.]+)/,1));a=null!==a.c?new A("Opera",0,0,0,C(this),0,0,new x(10<=a.c,!1)):new A("Opera",0,0,0,C(this),0,0,new x(!1,!1))}else/OPR\/[\d.]+/.test(this.a)?a=F(this):/AppleWeb(K|k)it/.test(this.a)?a=F(this):-1!=this.a.indexOf("Gecko")?
+(a="Unknown",b=new y,z(D(this)),b=!1,-1!=this.a.indexOf("Firefox")?(a="Firefox",b=z(E(this.a,/Firefox\/([\d\w\.]+)/,1)),b=3<=b.c&&5<=b.g):-1!=this.a.indexOf("Mozilla")&&(a="Mozilla"),c=z(E(this.a,/rv:([^\)]+)/,1)),b||(b=1<c.c||1==c.c&&9<c.g||1==c.c&&9==c.g&&2<=c.D),a=new A(a,0,0,0,C(this),0,0,new x(b,!1))):a=ea;return a};
+function C(a){var b=E(a.a,/(iPod|iPad|iPhone|Android|Windows Phone|BB\d{2}|BlackBerry)/,1);if(""!=b)return/BB\d{2}/.test(b)&&(b="BlackBerry"),b;a=E(a.a,/(Linux|Mac_PowerPC|Macintosh|Windows|CrOS|PlayStation|CrKey)/,1);return""!=a?("Mac_PowerPC"==a?a="Macintosh":"PlayStation"==a&&(a="Linux"),a):"Unknown"}
+function D(a){var b=E(a.a,/(OS X|Windows NT|Android) ([^;)]+)/,2);if(b||(b=E(a.a,/Windows Phone( OS)? ([^;)]+)/,2))||(b=E(a.a,/(iPhone )?OS ([\d_]+)/,2)))return b;if(b=E(a.a,/(?:Linux|CrOS|CrKey) ([^;)]+)/,1))for(var b=b.split(/\s/),c=0;c<b.length;c+=1)if(/^[\d\._]+$/.test(b[c]))return b[c];return(a=E(a.a,/(BB\d{2}|BlackBerry).*?Version\/([^\s]*)/,2))?a:"Unknown"}
+function F(a){var b=C(a),c=z(D(a)),d=z(E(a.a,/AppleWeb(?:K|k)it\/([\d\.\+]+)/,1)),e="Unknown",f=new y,f="Unknown",g=!1;/OPR\/[\d.]+/.test(a.a)?e="Opera":-1!=a.a.indexOf("Chrome")||-1!=a.a.indexOf("CrMo")||-1!=a.a.indexOf("CriOS")?e="Chrome":/Silk\/\d/.test(a.a)?e="Silk":"BlackBerry"==b||"Android"==b?e="BuiltinBrowser":-1!=a.a.indexOf("PhantomJS")?e="PhantomJS":-1!=a.a.indexOf("Safari")?e="Safari":-1!=a.a.indexOf("AdobeAIR")?e="AdobeAIR":-1!=a.a.indexOf("PlayStation")&&(e="BuiltinBrowser");"BuiltinBrowser"==
+e?f="Unknown":"Silk"==e?f=E(a.a,/Silk\/([\d\._]+)/,1):"Chrome"==e?f=E(a.a,/(Chrome|CrMo|CriOS)\/([\d\.]+)/,2):-1!=a.a.indexOf("Version/")?f=E(a.a,/Version\/([\d\.\w]+)/,1):"AdobeAIR"==e?f=E(a.a,/AdobeAIR\/([\d\.]+)/,1):"Opera"==e?f=E(a.a,/OPR\/([\d.]+)/,1):"PhantomJS"==e&&(f=E(a.a,/PhantomJS\/([\d.]+)/,1));f=z(f);g="AdobeAIR"==e?2<f.c||2==f.c&&5<=f.g:"BlackBerry"==b?10<=c.c:"Android"==b?2<c.c||2==c.c&&1<c.g:526<=d.c||525<=d.c&&13<=d.g;return new A(e,0,0,0,0,0,0,new x(g,536>d.c||536==d.c&&11>d.g))}
+function E(a,b,c){return(a=a.match(b))&&a[c]?a[c]:""};function G(a){this.ma=a||"-"}G.prototype.e=function(a){for(var b=[],c=0;c<arguments.length;c++)b.push(arguments[c].replace(/[\W_]+/g,"").toLowerCase());return b.join(this.ma)};function H(a,b){this.N=a;this.Z=4;this.O="n";var c=(b||"n4").match(/^([nio])([1-9])$/i);c&&(this.O=c[1],this.Z=parseInt(c[2],10))}H.prototype.getName=function(){return this.N};function I(a){return a.O+a.Z}function ga(a){var b=4,c="n",d=null;a&&((d=a.match(/(normal|oblique|italic)/i))&&d[1]&&(c=d[1].substr(0,1).toLowerCase()),(d=a.match(/([1-9]00|normal|bold)/i))&&d[1]&&(/bold/i.test(d[1])?b=7:/[1-9]00/.test(d[1])&&(b=parseInt(d[1].substr(0,1),10))));return c+b};function ha(a,b){this.d=a;this.q=a.w.document.documentElement;this.Q=b;this.j="wf";this.h=new G("-");this.ha=!1!==b.events;this.F=!1!==b.classes}function J(a){if(a.F){var b=t(a.q,a.h.e(a.j,"active")),c=[],d=[a.h.e(a.j,"loading")];b||c.push(a.h.e(a.j,"inactive"));s(a.q,c,d)}K(a,"inactive")}function K(a,b,c){if(a.ha&&a.Q[b])if(c)a.Q[b](c.getName(),I(c));else a.Q[b]()};function ia(){this.C={}};function L(a,b){this.d=a;this.I=b;this.o=this.d.createElement("span",{"aria-hidden":"true"},this.I)}
+function M(a,b){var c=a.o,d;d=[];for(var e=b.N.split(/,\s*/),f=0;f<e.length;f++){var g=e[f].replace(/['"]/g,"");-1==g.indexOf(" ")?d.push(g):d.push("'"+g+"'")}d=d.join(",");e="normal";"o"===b.O?e="oblique":"i"===b.O&&(e="italic");c.style.cssText="display:block;position:absolute;top:-9999px;left:-9999px;font-size:300px;width:auto;height:auto;line-height:normal;margin:0;padding:0;font-variant:normal;white-space:nowrap;font-family:"+d+";"+("font-style:"+e+";font-weight:"+(b.Z+"00")+";")}
+function N(a){r(a.d,"body",a.o)}L.prototype.remove=function(){var a=this.o;a.parentNode&&a.parentNode.removeChild(a)};function O(a,b,c,d,e,f,g,h){this.$=a;this.ka=b;this.d=c;this.m=d;this.k=e;this.I=h||"BESbswy";this.v={};this.X=f||3E3;this.ca=g||null;this.H=this.u=this.t=null;this.t=new L(this.d,this.I);this.u=new L(this.d,this.I);this.H=new L(this.d,this.I);M(this.t,new H("serif",I(this.m)));M(this.u,new H("sans-serif",I(this.m)));M(this.H,new H("monospace",I(this.m)));N(this.t);N(this.u);N(this.H);this.v.serif=this.t.o.offsetWidth;this.v["sans-serif"]=this.u.o.offsetWidth;this.v.monospace=this.H.o.offsetWidth}
+var P={sa:"serif",ra:"sans-serif",qa:"monospace"};O.prototype.start=function(){this.oa=n();M(this.t,new H(this.m.getName()+",serif",I(this.m)));M(this.u,new H(this.m.getName()+",sans-serif",I(this.m)));Q(this)};function R(a,b,c){for(var d in P)if(P.hasOwnProperty(d)&&b===a.v[P[d]]&&c===a.v[P[d]])return!0;return!1}
+function Q(a){var b=a.t.o.offsetWidth,c=a.u.o.offsetWidth;b===a.v.serif&&c===a.v["sans-serif"]||a.k.ga&&R(a,b,c)?n()-a.oa>=a.X?a.k.ga&&R(a,b,c)&&(null===a.ca||a.ca.hasOwnProperty(a.m.getName()))?S(a,a.$):S(a,a.ka):ja(a):S(a,a.$)}function ja(a){setTimeout(k(function(){Q(this)},a),50)}function S(a,b){a.t.remove();a.u.remove();a.H.remove();b(a.m)};function T(a,b,c,d){this.d=b;this.A=c;this.S=0;this.ea=this.ba=!1;this.X=d;this.k=a.k}function ka(a,b,c,d,e){c=c||{};if(0===b.length&&e)J(a.A);else for(a.S+=b.length,e&&(a.ba=e),e=0;e<b.length;e++){var f=b[e],g=c[f.getName()],h=a.A,m=f;h.F&&s(h.q,[h.h.e(h.j,m.getName(),I(m).toString(),"loading")]);K(h,"fontloading",m);h=null;h=new O(k(a.ia,a),k(a.ja,a),a.d,f,a.k,a.X,d,g);h.start()}}
+T.prototype.ia=function(a){var b=this.A;b.F&&s(b.q,[b.h.e(b.j,a.getName(),I(a).toString(),"active")],[b.h.e(b.j,a.getName(),I(a).toString(),"loading"),b.h.e(b.j,a.getName(),I(a).toString(),"inactive")]);K(b,"fontactive",a);this.ea=!0;la(this)};
+T.prototype.ja=function(a){var b=this.A;if(b.F){var c=t(b.q,b.h.e(b.j,a.getName(),I(a).toString(),"active")),d=[],e=[b.h.e(b.j,a.getName(),I(a).toString(),"loading")];c||d.push(b.h.e(b.j,a.getName(),I(a).toString(),"inactive"));s(b.q,d,e)}K(b,"fontinactive",a);la(this)};function la(a){0==--a.S&&a.ba&&(a.ea?(a=a.A,a.F&&s(a.q,[a.h.e(a.j,"active")],[a.h.e(a.j,"loading"),a.h.e(a.j,"inactive")]),K(a,"active")):J(a.A))};function U(a){this.K=a;this.B=new ia;this.pa=new B(a.navigator.userAgent);this.a=this.pa.parse();this.U=this.V=0;this.R=this.T=!0}
+U.prototype.load=function(a){this.d=new q(this.K,a.context||this.K);this.T=!1!==a.events;this.R=!1!==a.classes;var b=new ha(this.d,a),c=[],d=a.timeout;b.F&&s(b.q,[b.h.e(b.j,"loading")]);K(b,"loading");var c=this.B,e=this.d,f=[],g;for(g in a)if(a.hasOwnProperty(g)){var h=c.C[g];h&&f.push(h(a[g],e))}c=f;this.U=this.V=c.length;a=new T(this.a,this.d,b,d);d=0;for(g=c.length;d<g;d++)e=c[d],e.L(this.a,k(this.la,this,e,b,a))};
+U.prototype.la=function(a,b,c,d){var e=this;d?a.load(function(a,b,d){ma(e,c,a,b,d)}):(a=0==--this.V,this.U--,a&&0==this.U?J(b):(this.R||this.T)&&ka(c,[],{},null,a))};function ma(a,b,c,d,e){var f=0==--a.V;(a.R||a.T)&&setTimeout(function(){ka(b,c,d||null,e||null,f)},0)};function na(a,b,c){this.P=a?a:b+oa;this.s=[];this.W=[];this.fa=c||""}var oa="//fonts.googleapis.com/css";na.prototype.e=function(){if(0==this.s.length)throw Error("No fonts to load!");if(-1!=this.P.indexOf("kit="))return this.P;for(var a=this.s.length,b=[],c=0;c<a;c++)b.push(this.s[c].replace(/ /g,"+"));a=this.P+"?family="+b.join("%7C");0<this.W.length&&(a+="&subset="+this.W.join(","));0<this.fa.length&&(a+="&text="+encodeURIComponent(this.fa));return a};function pa(a){this.s=a;this.da=[];this.M={}}
+var qa={latin:"BESbswy",cyrillic:"&#1081;&#1103;&#1046;",greek:"&#945;&#946;&#931;",khmer:"&#x1780;&#x1781;&#x1782;",Hanuman:"&#x1780;&#x1781;&#x1782;"},ra={thin:"1",extralight:"2","extra-light":"2",ultralight:"2","ultra-light":"2",light:"3",regular:"4",book:"4",medium:"5","semi-bold":"6",semibold:"6","demi-bold":"6",demibold:"6",bold:"7","extra-bold":"8",extrabold:"8","ultra-bold":"8",ultrabold:"8",black:"9",heavy:"9",l:"3",r:"4",b:"7"},sa={i:"i",italic:"i",n:"n",normal:"n"},ta=/^(thin|(?:(?:extra|ultra)-?)?light|regular|book|medium|(?:(?:semi|demi|extra|ultra)-?)?bold|black|heavy|l|r|b|[1-9]00)?(n|i|normal|italic)?$/;
+pa.prototype.parse=function(){for(var a=this.s.length,b=0;b<a;b++){var c=this.s[b].split(":"),d=c[0].replace(/\+/g," "),e=["n4"];if(2<=c.length){var f;var g=c[1];f=[];if(g)for(var g=g.split(","),h=g.length,m=0;m<h;m++){var l;l=g[m];if(l.match(/^[\w-]+$/)){l=ta.exec(l.toLowerCase());var p=void 0;if(null==l)p="";else{p=void 0;p=l[1];if(null==p||""==p)p="4";else var fa=ra[p],p=fa?fa:isNaN(p)?"4":p.substr(0,1);l=l[2];p=[null==l||""==l?"n":sa[l],p].join("")}l=p}else l="";l&&f.push(l)}0<f.length&&(e=f);
+3==c.length&&(c=c[2],f=[],c=c?c.split(","):f,0<c.length&&(c=qa[c[0]])&&(this.M[d]=c))}this.M[d]||(c=qa[d])&&(this.M[d]=c);for(c=0;c<e.length;c+=1)this.da.push(new H(d,e[c]))}};function V(a,b){this.a=(new B(navigator.userAgent)).parse();this.d=a;this.f=b}var ua={Arimo:!0,Cousine:!0,Tinos:!0};V.prototype.L=function(a,b){b(a.k.Y)};V.prototype.load=function(a){var b=this.d;"MSIE"==this.a.getName()&&1!=this.f.blocking?ca(b,k(this.aa,this,a)):this.aa(a)};
+V.prototype.aa=function(a){for(var b=this.d,c=new na(this.f.api,u(b),this.f.text),d=this.f.families,e=d.length,f=0;f<e;f++){var g=d[f].split(":");3==g.length&&c.W.push(g.pop());var h="";2==g.length&&""!=g[1]&&(h=":");c.s.push(g.join(h))}d=new pa(d);d.parse();v(b,c.e());a(d.da,d.M,ua)};function W(a,b){this.d=a;this.f=b;this.p=[]}W.prototype.J=function(a){var b=this.d;return u(this.d)+(this.f.api||"//f.fontdeck.com/s/css/js/")+(b.w.location.hostname||b.K.location.hostname)+"/"+a+".js"};
+W.prototype.L=function(a,b){var c=this.f.id,d=this.d.w,e=this;c?(d.__webfontfontdeckmodule__||(d.__webfontfontdeckmodule__={}),d.__webfontfontdeckmodule__[c]=function(a,c){for(var d=0,m=c.fonts.length;d<m;++d){var l=c.fonts[d];e.p.push(new H(l.name,ga("font-weight:"+l.weight+";font-style:"+l.style)))}b(a)},w(this.d,this.J(c),function(a){a&&b(!1)})):b(!1)};W.prototype.load=function(a){a(this.p)};function X(a,b){this.d=a;this.f=b;this.p=[]}X.prototype.J=function(a){var b=u(this.d);return(this.f.api||b+"//use.typekit.net")+"/"+a+".js"};X.prototype.L=function(a,b){var c=this.f.id,d=this.d.w,e=this;c?w(this.d,this.J(c),function(a){if(a)b(!1);else{if(d.Typekit&&d.Typekit.config&&d.Typekit.config.fn){a=d.Typekit.config.fn;for(var c=0;c<a.length;c+=2)for(var h=a[c],m=a[c+1],l=0;l<m.length;l++)e.p.push(new H(h,m[l]));try{d.Typekit.load({events:!1,classes:!1})}catch(p){}}b(!0)}},2E3):b(!1)};
+X.prototype.load=function(a){a(this.p)};function Y(a,b){this.d=a;this.f=b;this.p=[]}Y.prototype.L=function(a,b){var c=this,d=c.f.projectId,e=c.f.version;if(d){var f=c.d.w;w(this.d,c.J(d,e),function(e){if(e)b(!1);else{if(f["__mti_fntLst"+d]&&(e=f["__mti_fntLst"+d]()))for(var h=0;h<e.length;h++)c.p.push(new H(e[h].fontfamily));b(a.k.Y)}}).id="__MonotypeAPIScript__"+d}else b(!1)};Y.prototype.J=function(a,b){var c=u(this.d),d=(this.f.api||"fast.fonts.net/jsapi").replace(/^.*http(s?):(\/\/)?/,"");return c+"//"+d+"/"+a+".js"+(b?"?v="+b:"")};
+Y.prototype.load=function(a){a(this.p)};function Z(a,b){this.d=a;this.f=b}Z.prototype.load=function(a){var b,c,d=this.f.urls||[],e=this.f.families||[],f=this.f.testStrings||{};b=0;for(c=d.length;b<c;b++)v(this.d,d[b]);d=[];b=0;for(c=e.length;b<c;b++){var g=e[b].split(":");if(g[1])for(var h=g[1].split(","),m=0;m<h.length;m+=1)d.push(new H(g[0],h[m]));else d.push(new H(g[0]))}a(d,f)};Z.prototype.L=function(a,b){return b(a.k.Y)};var $=new U(this);$.B.C.custom=function(a,b){return new Z(b,a)};$.B.C.fontdeck=function(a,b){return new W(b,a)};$.B.C.monotype=function(a,b){return new Y(b,a)};$.B.C.typekit=function(a,b){return new X(b,a)};$.B.C.google=function(a,b){return new V(b,a)};this.WebFont||(this.WebFont={},this.WebFont.load=k($.load,$),this.WebFontConfig&&$.load(this.WebFontConfig));})(this,document);
+
diff --git a/graphics/ketcindy/ketcindyfolder/scripts/ketlib/ketcindylib3dhelpE.txt b/graphics/ketcindy/ketcindyfolder/scripts/ketlib/ketcindylib3dhelpE.txt
new file mode 100755
index 0000000000..27b40955e6
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/scripts/ketlib/ketcindylib3dhelpE.txt
@@ -0,0 +1,29 @@
+//help:start();
+//help:Changstyle3d*(change the attribute of 3d plot data);
+//help:Findangle*(specify the angles theta and phi);
+//help:Cancoordpara*(specify the coordinate with respect to canonical coordinate);
+//help:Projcoordpara*(specify the coordinate of projected image);
+//help:Parapt*(the coordinate of the point in the projected plane);
+//help:Spaceline*(generate the plot data of 3d segments);
+//help:Spacecurve*(generate the plot data of 3d curve);
+//help:Xyzax3data*(generate the plot data of coordinate axes);
+//help:Datalist3d*(list of plot data of the all objects on the screen. Both 2d and 3d values are returned);
+//help:Skeletonparadata*(generate the plot data of the objects with hidden line elimination);
+//help:Embed*(generate the embedded plot data);
+//help:Rotate3pt*(rotate the point);
+//help:Rotate3data*(rotate 3d plot data);
+//help:Translate3pt*(parallelly transport the point);
+//help:Translate3data*(parallelly transport the plot data);
+//help:Reflect3point*(reflect the point);
+//help:Xyzcoord*(coordinate of a point determined with respect to main screen and sub screen);
+//help:PutonCurve3d*(put a point on the 3d curve);
+//help:Ptsegdata*(generate the 3d plot data of point and segment derived from those on 2d screen);
+//help:Putpoint3d*(put a specific point);
+//help:Perppt*(the foot of the perpendicular on the plane);
+//help:Perpplane*(a fiducial point of a plane with specific point on it and with specific normal vector);
+//help:Drawpoint3d*(draw a specific point);
+//help:Putaxes3d*(take a point with specific coordinates as geometric one);
+//help:IntersectsgpL*(intersection between line and plane);
+//help:Bezier3*(draw 3d Bezier curve);
+//help:Mkbezierptcrv3*(draw 3d Bezier curve by automatically taking controll points);
+//help:end();
diff --git a/graphics/ketcindy/ketcindyfolder/scripts/ketlib/ketcindylib3dhelpJ.txt b/graphics/ketcindy/ketcindyfolder/scripts/ketlib/ketcindylib3dhelpJ.txt
new file mode 100755
index 0000000000..2d33176d4e
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/scripts/ketlib/ketcindylib3dhelpJ.txt
@@ -0,0 +1,44 @@
+//help:start();
+//help:Changstyle3d*(3dプロットデータの属性を変更);
+//help:Findangle*(theta,phiを求める);
+//help:Cancoordpara*(標準座標を求める);
+//help:Projcoordpara*(投影座標を求める);
+//help:Parapt*(点の投影面での座標);
+//help:Spaceline*(空間の折線データ作成);
+//help:Spacecurve*(空間曲線のデータ作成);
+//help:Xyzax3data*(座標軸のデータ作成);
+//help:Datalist3d*(画面に描かれているすべてのプロットデータ.戻り値は3d,2d);
+//help:Skeletonparadata*(スケルトン処理のデータ作成);
+//help:Embed*(埋め込みデータ作成);
+//help:Rotatept3d*(空間点を回転);
+//help:Rotatedata3d*(プロットデータを回転);
+//help:Translatept3d*(空間点を平行移動);
+//help:Translatedata3d*(空間プロットデータを平行移動);
+//help:Reflectpoint3d*(点を鏡映);
+//help:Xyzcoord*(主副画面で決まる点の座標);
+//help:PutonCurve3d*(空間曲線上に点をとる);
+//help:Ptsegdata*(画面にとった点と線分から空間の点と線分を作成);
+//help:Putpoint3d*(空間点をとる);
+//help:Perppt*(平面に下ろした垂線の足);
+//help:Perpplane*(点を通り垂直な平面上の基準点);
+//help:Drawpoint3d*(空間点を描く);
+//help:Putaxes3d*(座標点を幾何点としてとる);
+//help:IntersectsgpL*(空間の直線と平面の交点);
+//help:Bezier3d*(空間ベジェ曲線);
+//help:Mkbezierptcrv3d*(制御点を自動的にとる空間ベジェ曲線);
+//help:Readobj*(objファイルを読み込む.オプションは上下反転(符号)と倍率);
+//help:VertexandEdge*(頂点と面から辺を求め,辺を描く);
+//help:Phparadata*(多面体を陰線処理して描く
+//追加オプション : "Hidden=線種");
+//help:Nohiddenbyfaces*(多面体と空間曲線を陰線処理);
+//help:Fixpoint3d*(空間の固定点をとる);
+//help:Sf3data*(陰線処理なしの空間曲面を描く);
+//help:Concatobj*(いくつかのobjデータを結合);
+//help:Crvsfparadata*(曲線の曲面による陰線処理);
+//help:Intersectcrvsf*(曲線と曲面の交点を求める);
+//help:Sfbdparaparadata*(空間曲面の陰線処理);
+//help:Wireparadata*(曲面のワイヤフレームを陰線処理);
+//help:Dist3d*(空間の2点の距離);
+
+
+//help:end();
diff --git a/graphics/ketcindy/ketcindyfolder/scripts/ketlib/ketcindylib3dlogr.txt b/graphics/ketcindy/ketcindyfolder/scripts/ketlib/ketcindylib3dlogr.txt
new file mode 100644
index 0000000000..169d22e767
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/scripts/ketlib/ketcindylib3dlogr.txt
@@ -0,0 +1,190 @@
+// 20190511
+// Start3d changed (KetcindyDataList initialized)
+// 20190506
+// Skeletonparadata debugged ( parseparse for pfe3d )
+// Vertexedgeface debugged (vname)
+// 20190505
+// Xyzax3data changed ( Lightarrowdata used,"axx,axy,axz" generated )
+// isselected changed to Ptselected
+// text(pt) => pt.name
+// PointonCurve => Poinoncurve
+// Makeskeletondata changed (floor() => re(floor())
+// 20190504
+// Ketinit3d changed (Slider part moved to Start3d)
+// Start3d changed ( optionjs (slider,removept) added )
+// Start3d debugged ( SLIDEFLG )
+// 20190502
+// Vertexedgeface changed ( Label=n )
+// VertexEdgeFace added ( for compatibility with conventional files)
+// 20190416
+// Xyzaxparaname debugged ( Label )
+// 20190415
+// parse( ..= ) changed ( ; added )
+// 20190413
+// Nohiddenbyfaces debugged (for Arg1,Arg2, Arg3)
+// 20190401
+// VertexEdgeFace changed ( for MeasureDepth==1 )
+// Nohiddenbyfaces debugged (for Arg1,Arg2 and making faceL)
+// Mkseg3d changed ( no display when "geoseg3d" is null )
+// IntersectsgpL changed ( varialble set when "draw" )
+// 20190331
+// VertexEdgeFace changed (Labelsize option added)
+// Nohiddensegs, Nohiddenbyfaces majorly changed (segL,faceL)
+// 20190330
+// Spacecurve debugged (Precision, string data)
+// 20190329
+// Start3d,Ptseg3d Setangle changed/debugged (PTEXCEPTION)
+// 20190320
+// Skeletonparadata maintained, debugged (FI => F)
+// 20190301
+// MeasureDepth => Measuredepth
+// 20190209
+// ////% added
+// Start3d changed ( Slider used )
+// 20190128
+// Vertexedgeface changed ( size of point name, drawpoint )
+// 20190127
+// Nohiddenseg debugged ( for changing Ltype )
+// 20181218
+// Letter3d,Expr3d added
+// 20181212
+// Vertexedgeface debugged ( Vname changed for multi 3d )
+// 20181108
+// Mkpointlist debugged (theta=90)
+// 20181107
+// Nohiddenbyfaces changed ( frn3d,frnh3d returned, option "Disp=" added )
+// Perplane debugged ( for "draw" )
+// VertexEdgeFace changed (point name v =>V, option "Edg=n" as default )
+// 20181103
+// Skeletonparadata changed ( option "Not=","Check=" added )
+// 20181102
+// Skeletonparadata changed ( option "File=" added )
+// 20181031
+// IntersectsgpL changed ( option "Screen=" added )
+// Perpplane, Nohiddenseg changed ( for change of IntersectsgpL)
+// 20181030
+// Mkpointlist debugged (workprocess adopted)
+// Parcrv3d, IntersectsgpL debugged
+// Ptonseg3d changed ( for non-geo point )
+// Drawpoint3d changed ( color option )
+// IntersectsgpL changed ( Pointdata3d => Drawpoint3d )
+// 20181029
+// Mkpointlist debugged
+// Subgraph change
+// 20181028
+// Start3d changed ( pt,ptz removed)
+// Mkpointlist, Xyzcoord changed
+// 20181027
+// IntersectsgpL changed ( return=[pt,isinseg,isinplane,tseg,t,s] )
+// Parasubpt, Mainsubpt, Mainsubptlog added
+// 20181026
+// IntersectsgpL changed ( option "ie" )
+// 20181017
+// Pointdata3d added (simillar to Pointdata)
+// 20181015
+// Mkpointlist debugged (vlistpre )
+// Start3d slightly changed
+// 20180916
+// Setangle debugged, Start3d changed ( PTEXCEPTION added)
+// 20180905
+// VertexEdgeFace changed (option "vtx=geo/nogeo" added)
+// 20180904
+// Color setting changed ( for KCOLOR)
+// 20180816
+// Nohiddenbyfaces debugged (spaceline dissolved to segments)
+// 20180815
+// Nohiddenseg,segs, byfaces debugged (Eps=10^(-2) added as option)
+// 20180811
+// IntersectsgpL debugged (Reflect3point->Reflectreflectpoint3d)
+// 20180809
+// Rotatepoint3d changed ( default center [0,0,0] added )
+// 20180808
+// Rotatedata3d, Translatedata3d, debugged
+// Reflectdata3d, Scaledata3d added
+// Scalepoint3d changed ( ratio )
+// 20180806
+// Rotatepoint3d, Translatepoint3d, Reflectpoint3d renamed from old
+// Scalepoint3d added
+// 20180729
+// Rotatedata3d, Reflectdata3d changed ( only these names are valid)
+// 20180722
+// color localized
+// 20180714
+// Nohiddenbyfaces debugged ( case where seglist is a string of a list of strings )
+// 20180712
+// Sfbdparadata,... renamed to SfbdparadataR,...
+// 20180614
+// Setangle changed (for angle list)
+// 20180613
+// Getangle changed ("Disp=y" options added )
+// 20180608
+// Xyzaxparaname changed ( former names deleted )
+// Projpara changed (default: Msg=no )
+// Start3d changed ( Setfiles(Namecdy) added )
+// 20180607
+// Getangle debugged (output)
+// 20180606
+// Start3d changed (ADDPACK )
+// 20180603
+// Projpara,... changed (KCOLOR)
+// 20180602
+// divoptions ( 8,9 ->length(tmp)-1,length(tmp))
+// Projara,... changed (color supported )
+// Rotatedata3d,Translatedatad3 changed ( Level of RSform to 1)
+// Changestyle3d changed ( for case where name not found)
+// 20180601
+// Start3d changed (CutFunList, EraseList added)
+// 20180531
+// Start3d changed (CommandListC added)
+// ExeccmdC added
+// SfbdparadataC,CrvsfparadataC,... changed ( for "c" option)
+// 20180522
+// Sfbdparadata debugged ( "Proj" )
+// 20180517
+// Isangle(isAngle),Getangle added
+// kcC changed ( "resultC" => "end")
+// 20180510
+// Wireparadata,Sfcutparadata debugged
+// 20180509
+// Sfbdparadata,... changed ( name2,name2h removed)
+// Crvsfparadata renamed to Crv3sfparadata
+// Crvs3fparadata, changed ( Proj from GLIST removed)
+// 20180508
+// Sfbdparadata,... changed ( to Projpara(name3) )
+// 20180426
+// Sfbdparadata,... changed (.dat => .Rdata )
+// WriteCdata,ReadCdata => WritedataC,ReaddataC
+// 2018.03.27
+// Start3d changed (for C)
+// 2018.02.27
+// Sfbdpara,... changed ("Res=" made from fname)
+// 2018.02.26
+// Sfcutparadata (renamed from Sfcutdata) changed
+// 2018.02.24
+// Sfcutdata added
+// 2018.02.23
+// Crvonsfparadata added
+// Wireparadata added
+// Skeletonparadata rechanged to old version
+// 2018.02.22
+// Intersectcrvsf added (changed to R)
+// Sdbdpradata,Crvsfparadata,Intersectcrvsf changed (title printing)
+// 2018.02.20
+// Addpoints added
+// PthiddenQ,Meetpoints debugged
+// 2018.02.18
+// Sfbdparadata debuggded (OTHERPARTITION )
+// 2018.02.11
+// Sfbdparadata added
+// 2018.01.04
+// Skeletonparadata(Skeletondatacindy) majorly changed
+// 2017.10.23
+// Rotatedata3d, Translatedata3d debugged ([])
+// 2017.10.08
+// Bezier3,Putbezier3data,Mkbezierptcrv3d greatly changed
+// 2017.10.07
+// Mkpointlist debugged
+// Start3d,Ptseg3d, Setangle, Mkpointlist, Mkseq3d, Putpoint3d Skeleton..,Putbezier..
+// changed ( "=" removed from VLIST)
+// 2017.09.18
+// SCIWR,SCIRE removed
diff --git a/graphics/ketcindy/ketcindyfolder/scripts/ketlib/ketcindylib3dr.cs b/graphics/ketcindy/ketcindyfolder/scripts/ketlib/ketcindylib3dr.cs
new file mode 100644
index 0000000000..956e726b43
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/scripts/ketlib/ketcindylib3dr.cs
@@ -0,0 +1,5132 @@
+// Copyright (C) 2014 Setsuo Takato, KETCindy Japan project team
+//
+//This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see <http://www.gnu.org/licenses/>
+//
+
+println("ketcindylib3d[20190511] loaded");
+
+//help:start();
+
+////%Ketinit3d start////
+Ketinit3d():=Ketinit3d(1);
+Ketinit3d(subflg):=(
+//help:Ketinit3d();
+//help:Ketinit3d(0);
+ regional(ctr,tmp,tmp1,tmp2,tmp3,tmp4);
+ BezierNumber3=1; //15.02.28 // no ketjs on
+ if(!islist(BZLIST3),
+ BZLIST3=[]; //15.02.28
+ ,
+ tmp=apply(allpoints(),#.name); //190505
+ tmp1=select(tmp,substring(#,length(#)-1,length(#))=="p");
+ tmp2=[];
+ forall(tmp1,ctr,
+ tmp=substring(ctr,0,length(ctr)-1);
+ tmp=select(BZLIST3,#_1==tmp);
+ if(length(tmp)>0,
+ tmp2=append(tmp2,tmp_1);
+ );
+ );
+ BZLIST3=tmp2;
+ ); // no ketjs off
+ SUBSCR=subflg; // no ketjs
+ // SUBSCR=0 // only ketjs
+ Setwindow("Msg=no");
+ Addax(0);
+ TSIZE=10;
+ TSIZEZ=10;
+ ErrFlg=0;
+);
+////%Ketinit3d end////
+
+////%Start3d start////
+Start3d():=Start3d([],[]);
+Start3d(Arg):=( //190503from
+ regional(tmp);
+ tmp=select(Arg,indexof(#,"=")>0);
+ if(length(tmp)==0,
+ Start3d(Arg,[]);
+ ,
+ Start3d([],Arg);
+ );
+);
+Start3d(ptexception,optionjs):=(//190503to
+//help:Start3d();
+//help:Start3d(["A","B"](exceptionptlist));
+//help:Start3d(optionjs=["Slider=n","Removept=[]");
+ regional(xmn,xMx,ymn,yMx,pt,pt3,pt2,
+ xPos,yTh,yPh,Eps,tmp,tmp1,tmp2,tmp3,tmp4);
+ PTEXCEPTION=[];
+ SLIDEFLG="Y";
+ forall(optionjs,
+ tmp=Strsplit(#,"=");
+ tmp1=Toupper(substring(tmp_1,0,1));
+ if(tmp1=="S",
+ SLIDEFLG=Toupper(substring(tmp_2,0,1));
+ );
+ if(tmp1=="R",
+ tmp2=tmp_2;
+ if(substring(tmp2,0,1)=="[",tmp2=substring(tmp2,1,length(tmp2)-1));
+ tmp2=tokenize(tmp2,",");
+ REMOVEPTJS=concat(REMOVEPTJS,tmp2);
+ );
+ );
+ Setfiles(Namecdy); //180608 // no ketjs
+ ConstantListC=[[50,50],[5000,1500,500,200],[0.00001,0.01,0.1]]; // no ketjson
+ FuncListC=[];
+ CommandListC=[]; //180531
+ CutFunList=[];//180601
+ EraseList=[];//180601
+ ADDPACK=[]; //180606 // no ketjs off
+ GCLIST=[];
+ GLIST=[]; // no ketjs on
+ FUNLIST=[];
+ COM0thlist=[];
+ COM1stlist=[];
+ COM2ndlist=[]; // no ketjs off
+ SEG3dlist=[];
+ OutFileList=[]; // no ketjs on
+ FigPdfList=[]; // 16.04.08
+ ErrFlag=0;
+ OBJCMD=[]; // 161129from
+ OCNAME=Fhead;
+ OCOPTION=["m","v"];// 161129to //no ketjs off
+ KETJSOP=[]; //190129
+ REMOVEPTJS=[]; SLIDEFLG="Y"; //190504
+ KetcindyjsDataList=[]; //190511
+ ArrowlineNumber=1; // 16.01.31
+ ArrowheadNumber=1;
+ BezierNumber=1; //16.01.31
+ BezierNumber3=1; //16.08.19
+ Fnametex=Fhead+".tex"; // 15.04.06 //no ketjs on
+ FnameR=Fhead+".r";
+ FnameRbody=Fhead+"body.r";
+ Fnameout=Fhead+".txt"; // no ketjs off
+ Setwindow("Msg=no"); // 16.06.20from
+ tmp=round(4*SW.y)/4;
+ xPos=-5; yTh=tmp-0.5; yPh=tmp-1;
+// if(SLIDEFLG=="Y", // only ketjs //190503from
+ Slider("TH",[xPos,yTh],[xPos+9,yTh],["Color=green"]); //190209
+ Slider("FI",[xPos,yPh],[xPos+9,yPh],["Color=green"]); //190209
+ drawtext([xPos-0.8,yTh-0.1],Sprintf((TH.x-xPos)*20,2),align->"right"); //17.05.02
+ drawtext([xPos-0.8,yPh-0.1],Sprintf((FI.x-xPos)*40,2),align->"right"); //17.05.02
+// ); // only ketjs //190503to
+ tmp="Setangle(" //no ketjs on
+ +format((TH.x-xPos)*20,5)+","
+ +format((FI.x-xPos)*40,5)+")";
+ GLIST=append(GLIST,tmp); //no ketjs off
+ THETA=(TH.x-xPos)*20*pi/180;
+ PHI=(FI.x-xPos)*40*pi/180; // 16.06.20until
+ if(Ptselected(TH) % Ptselected(FI), //190505
+ if(length(Ch)>0,
+ ChNum=Ch_(length(Ch));
+ if(ChNum==0, ChNum=1);
+ ,
+ ChNum=1;
+ );
+ Ch=[0];
+ );
+ if(SUBSCR==1, // no ketjs on
+ xmn=SW.x+NE.x-SW.x;
+ xMx=NE.x+NE.x-SW.x;
+ ymn=SW.y;
+ yMx=NE.y;
+ drawpoly([[xMx,yMx],[xmn,yMx],
+ [xmn,ymn],[xMx,ymn]],color->[1,1,1]);
+ connect([[NE.x-SW.x,yMx],[NE.x-SW.x,ymn]],
+ color->[0.5,0.5,0.5]);
+ ); // no ketjs off
+ // for Presentation //17.07.01from //no ketjs on
+ letterc=[0.98,0.13,0,0.43]; boxc=[0,0.32,0.52,0];
+ shadowc=[0,0,0,0.5]; mboxc="yellow"; //17.03.02 regional debugged
+ SlideColorList=[letterc,boxc,boxc,boxc,shadowc,shadowc,6,1.3,
+ letterc,mboxc,mboxc,mboxc,62,2,letterc];
+ ThinDense=0.1; //17.07.01to //no ketjs off
+ tmp=ptexception; //181106
+ if(!islist(tmp),tmp=[tmp]); //190209
+ PTEXCEPTION=concat(PTEXCEPTION,tmp); //190209
+// if(!islist(tmp),PTEXCEPTION=[tmp],PTEXCEPTION=tmp);
+ Ptseg3data(PTEXCEPTION);//16.08.23
+// PTEXCEPTION=ptexception; //180916 //190209[del]
+);
+////%Start3d end////
+
+////%Setangle start////
+Setangle(angL):=Setangle(ang_1,ang_2);//180614
+Setangle(theta,phi):=( //16.12.24
+//help:Setangle(60,30);
+ regional(xmn,xMx,ymn,yMx,pt,pt3,pt2,
+ xPos,yTh,yPh,Eps,tmp,tmp1,tmp2,tmp3,tmp4);
+ tmp=round(4*SW.y)/4;
+ xPos=-5;yTh=tmp-0.5;yPh=tmp-1;
+ if(theta=="",theta=THETA*180/pi); // 17.01.19
+ if(phi=="",phi=PHI*180/pi);
+ THETA=theta*pi/180;
+ TH.x=theta/20+xPos;
+ PHI=phi*pi/180;
+ FI.x=phi/40+xPos;
+// drawtext([xPos-0.8,yTh-0.1],text(theta)); //17.05.05
+// drawtext([xPos-0.8,yPh-0.1],text(phi));
+ tmp="Setangle(" // no ketjs on
+ +format(theta,5)+","+format(phi,5)+")";
+ GLIST=append(GLIST,tmp); //no ketjs off
+ if(length(VLIST)==0, // 16.06.20
+ tmp=apply(allpoints(),#.name); //190505
+ tmp4=remove(tmp,PTEXCEPTION); //190329
+ forall(tmp4,pt,
+ tmp1=pt;
+ tmp=substring(tmp1,length(tmp1)-1,length(tmp1));
+ if(tmp!="z",
+ tmp=parse(tmp1+"z.xy"); //181028[2lines];
+ pt3=Xyzcoord(pt.xy,tmp);
+ Defvar(tmp1+"3d",pt3);
+ pt2=Parapt(pt3); // 16.05.28from
+ Defvar(tmp1+"2d",pt2); // 16.05.28to
+ );
+ );
+ ,
+ if(Ptselected(NE) % Ptselected(SW), //190505
+ tmp4=apply(allpoints(),#.name); //190505
+ tmp4=remove(tmp4,PTEXCEPTION);
+ forall(tmp4,pt,
+ tmp1=pt;
+ tmp=substring(tmp1,length(tmp1)-1,length(tmp1));
+ if(tmp!="z",
+ tmp=select(VLIST,#_1==tmp1+"3d");
+ pt3=tmp_1_2;
+ tmp=tmp1+".xy=Parapt("+pt3+")_[1,2];";
+ parse(tmp);
+ );
+ );
+ ,
+ tmp=apply(allpoints(),#.name); //190505
+ tmp4=remove(tmp,PTEXCEPTION); //180916
+ forall(tmp4,pt,
+ tmp1=pt;
+ tmp=substring(tmp1,length(tmp1)-1,length(tmp1));
+ if(tmp!="z",
+ tmp2=parse(tmp1+"z");
+ if(Ptselected(pt) % Ptselected(tmp2),
+ Defvar(tmp1+"2d",pt.xy);
+ tmp=parse(tmp1+"z.xy"); //181028[2lines]
+ tmp=Xyzcoord(pt.xy,tmp);
+ Defvar(tmp1+"3d",tmp);
+ );
+ );
+ );
+ );
+ );
+ forall(Datalist3d(),#,
+ tmp1=replace(#,"3d","2d");
+ tmp2=Projpara(#,["nodata"]);
+ tmp=tmp1+"="+textformat(tmp2,5)+";"; //190415
+ parse(tmp);
+ );
+ Ptseg3data(PTEXCEPTION); //180916
+);
+////%Setangle end////
+
+////%Getangle start////
+Getangle():=getangle(["Disp=y"]); //180613from
+Getangle(option):=(
+ regional(tmp,tmp1,dispflg,eqL);
+ tmp=divoptions(option);
+ dispflg="Y";
+ eqL=tmp_5; //181111
+ forall(eqL,
+ tmp=Strsplit(#,"="); //181111(4lines)
+ tmp1=Toupper(substring(tmp_1,0,1));
+ if(tmp1=="D",
+ dispflg=Toupper(substring(tmp_2,0,1));
+ );
+ );
+ tmp=[THETA*180/pi, PHI*180/pi];
+ if(dispflg=="Y",
+ println(textformat(tmp,6));
+ );
+ tmp; //180607
+); //180613to
+////%Getangle end////
+
+////%Angleselected start////
+Angleselected():=IsAngle(); //180713
+//isAngle():=Isangle(); //180517
+////%Angleselected end////
+
+////%Isangle start////
+Isangle():=Ptselected(TH)%Ptselected(FI); //180517
+////%Isangle end////
+
+////%Changestyle3d start////
+Changestyle3d(nameL,style):=(
+//help:Changestyle3d(["geoseg3d","ax3d"],["notex"]);
+ regional(nmL,name,tmp,tmp1,tmp2);
+ if(islist(nameL),nmL=nameL,nmL=[nameL]);
+ tmp1=[];
+ forall(nmL,name,
+ tmp=parse(name);
+ if(islist(tmp),
+ if(isstring(tmp_1),
+ tmp1=concat(tmp1,tmp);
+ ,
+ tmp1=append(tmp1,name);
+ );
+ tmp=apply(tmp1,replace(#,"3d","2d"));
+ Changestyle(tmp,style);
+ tmp=apply(tmp,"sub"+#); // 15.05.24
+ Changestyle(tmp,style);
+ );
+ );
+);
+////%Changestyle3d end////
+
+////%Dist3d start////
+Dist3d(pt1):=Dist3d(pt1,[0,0,0]);
+Dist3d(pt1,pt2):=(
+//help:Dist3d(A3d,B3d);
+//help:Dist3d(A,B);
+//help:Dist3d("A","B");
+ regional(p1,p2);
+ if(islist(pt1),
+ p1=pt1;
+ ,
+ if(ispoint(pt1),p1=pt1.name,p1=pt1); //190505
+ p1=parse(p1+"3d");
+ );
+ if(islist(pt2),
+ p2=pt2;
+ ,
+ if(ispoint(pt2),p2=pt2.name,p2=pt2); //190505
+ p2=parse(p2+"3d");
+ );
+ sqrt((p2-p1)*(p2-p1));
+);
+////%Dist3d end////
+
+////%Findangle start////
+Findangle(vec):=(
+//help:Findangle([2,1,4]);
+//help:Findangle([0,0,1,0]);
+ regional(vec3,vec2,Eps,th,ph,tmp);
+ Eps=10^(-4);
+ vec3=vec_(1..3);
+ vec2=vec_(1..2);
+ th=arccos(vec_3/|vec3|);
+ if(|vec2|>Eps,
+ ph=arccos(vec_1/|vec2|);
+ if(vec_2<0,
+ ph=2*pi-ph; // 15.03.28
+ );
+ ,
+ if(length(vec)>3,ph=vec_4*pi/180,ph=PHI);
+ );
+ [th,ph];
+);
+////%Findangle end////
+
+////%Cancoordpara start////
+Cancoordpara(pc):=(
+//help:Cancoordpara([1,2,0]);
+ regional(Xz,Yz,Zz,tmp1,tmp2,tmp3);
+ Xz=pc_1; Yz=pc_2; Zz=pc_3;
+ tmp1=-Xz*sin(PHI)-Yz*cos(PHI)*cos(THETA)+Zz*cos(PHI)*sin(THETA);
+ tmp2=Xz*cos(PHI)-Yz*sin(PHI)*cos(THETA)+Zz*sin(PHI)*sin(THETA);
+ tmp3=Yz*sin(THETA)+Zz*cos(THETA);
+ [tmp1,tmp2,tmp3];
+);
+////%Cancoordpara end////
+
+////%Zparapt start////
+Zparapt(cc):=(
+ regional(x,y,z);
+ x=cc_1; y=cc_2; z=cc_3;
+ x*cos(PHI)*sin(THETA)+y*sin(PHI)*sin(THETA)+z*cos(THETA);
+);
+////%Zparapt end////
+
+////%Projcoordpara start////
+Projcoordpara(cc):=(
+//help:Projcoordpara([3,1,2]);
+ regional(tmp);
+ tmp=Parapt(cc);
+ [tmp_1,tmp_2,Zparapt(cc)];
+);
+////%Projcoordpara end////
+
+////%Parapt start////
+Parapt(pt):=(
+//help:Parapt([2,1,5]);
+ regional(Xz,Yz);
+ Xz=-pt_1*sin(PHI)+pt_2*cos(PHI);
+ Yz=-pt_1*cos(PHI)*cos(THETA)-pt_2*sin(PHI)*cos(THETA)+pt_3*sin(THETA);
+ [Xz,Yz];
+);
+////%Parapt end////
+
+////%Parasubpt start////
+Parasubpt(pt):=( //181027
+ regional(mv,dp,xs);
+ mv=NE.x-SW.x;
+ dp=pi/24;
+ xs=-pt_1*sin(PHI+dp)+pt_2*cos(PHI+dp);
+ [xs+mv,pt_3];
+);
+////%Parasubpt end////
+
+////%Parasubptlog start////
+Parasubptlog(pt):=( //181027
+ regional(dp,xs);
+ dp=pi/24;
+ xs=-pt_1*sin(PHI+dp)+pt_2*cos(PHI+dp);
+ [xs,pt_3];
+);
+////%Parasubptlog end////
+
+////%Mainsubpt3d start////
+Mainsubpt3d(pm,psv):=( //181027
+ regional(Eps,mv,dp,v,x,y,z);
+ // when Th neq 90, psv=ps_2, else psv=ps_1
+ Eps=10^(-4);
+ mv=NE.x-SW.x;
+ dp=pi/24;
+ if(abs(cos(THETA))>Eps,
+ if(length(psv)>1,v=psv_2, v=psv);
+ x=(v*cos(PHI)*sin(THETA)-pm_1*sin(PHI)*cos(THETA)-pm_2*cos(PHI))/cos(THETA);
+ y=(v*sin(PHI)*sin(THETA)+pm_1*cos(PHI)*cos(THETA)-pm_2*sin(PHI))/cos(THETA);
+ z=v;
+ ,
+ if(length(psv)>1,v=psv_1, v=psv);
+ x=(pm_1*cos(PHI+dp)-(v-mv)*cos(PHI))/sin(dp);
+ y=(pm_1*sin(PHI+dp)-(v-mv)*sin(PHI))/sin(dp);
+ z=pm_2;
+ );
+ [x,y,z];
+);
+////%Mainsubpt3d end////
+
+////%Projcurve start////
+Projcurve(crv):=(
+//help:Projcurve("sl3d1");
+ regional(CurveL,Curve,Eps,AnsL,Out,sp,cp,st,,ct,ii,pt,
+ Xz,Yz,tmp,tmp1,tmp2);
+ Eps=10^(-6);
+ sp=sin(PHI); cp=cos(PHI);
+ st=sin(THETA); ct=cos(THETA);
+ if(isstring(crv),CurveL=parse(crv),CurveL=crv);
+ if(Measuredepth(CurveL)==1,CurveL=[CurveL]);
+ Out=[];
+ forall(CurveL,Curve,
+ AnsL=[];
+ forall(1..length(Curve),ii,
+ pt=Curve_ii;
+ if(pt_1!="inf",
+ Xz=-pt_1*sp+pt_2*cp;
+ Yz=-pt_1*cp*ct-pt_2*sp*ct+pt_3*st;
+ tmp=[Xz,Yz];
+ if(ii==1,
+ AnsL=[tmp];
+ ,
+ tmp1=AnsL_(length(AnsL));
+ if(tmp1_1=="inf" % |tmp-tmp1|>Eps,
+ AnsL=append(AnsL,tmp);
+ );
+ );
+ ,
+ AnsL=append(AnsL,["inf"]);
+ );
+ );
+ tmp1=[];
+ tmp2=select(1..length(AnsL),AnsL_#==["inf"]);
+ tmp=1;
+ forall(tmp2,
+ if(#>tmp,
+ tmp1=concat(tmp1,[AnsL_(tmp..(#-1))])
+ );
+ tmp=#+1;
+ );
+ if(tmp<length(AnsL),
+ tmp1=concat(tmp1,[AnsL_(tmp..length(AnsL))]);
+ );
+ AnsL=tmp1;
+ if(length(AnsL)==1,AnsL=AnsL_1);
+ Out=append(Out,AnsL);
+ );
+ if(length(Out)==1,
+ Out=Out_1;
+ );
+ Out;
+);
+////%Projcurve end////
+
+////%Projpara start////
+Projpara(ptdata):=Projpara(ptdata,[]);
+Projpara(ptdata,optionsorg):=(
+//help:Projpara("sf3d1");
+//help:Projpara(options=["Msg=no"]);
+ regional(options,name2,name3,Ltype,Noflg,eqL,opcindy,
+ dtL,ptL,tmp,tmp1,Out,color,msgflg);
+ options=optionsorg;
+ tmp=Divoptions(options);
+ Ltype=tmp_1;
+ Noflg=tmp_2;
+ eqL=tmp_5;
+ color=tmp_(length(tmp)-2);
+ opcindy=tmp_(length(tmp));
+ msgflg=0; //180602from
+ forall(eqL,
+ tmp=Strsplit(#,"=");
+ tmp1=Toupper(substring(tmp_1,0,1)); //181111
+ if(tmp=="M",
+ tmp=substring(tmp_2,0,1);
+ if(Toupper(tmp)=="Y", msgflg=1);
+ options=remove(options,[#]);
+ );
+ );//180602to
+ Out=[];
+ if(islist(ptdata),dtL=ptdata,dtL=[ptdata]);
+ forall(dtL,name3,
+ if(indexof(name3,"3d")>0, //17.05.24
+ name2=replace(name3,"3d","2d");
+ ,
+ name2="para"+name3;
+ );
+ ptL=Projcurve(name3);
+ ptL=select(ptL,length(#)>1);//17.06.02
+ if(length(ptL)==1,
+ ptL=ptL_1;
+ );
+ Out=append(Out,ptL);
+ if(Noflg<3,
+ if(msgflg==1,//180602from
+ println("generate projparadata "+name2);
+ );//180602to
+ tmp=name2+"="+textformat(ptL,5)+";"; //190415
+ parse(tmp);
+ tmp=name2+"=Projpara("+name3+")";
+ GLIST=append(GLIST,tmp);
+ );
+ if(Noflg<2,
+ if(isstring(Ltype),
+ if(color!=KCOLOR, //180904
+ Texcom("{");Com2nd("Setcolor("+color+")");//180722
+ );
+ Ltype=Getlinestyle(text(Noflg)+Ltype,name2);
+ if(color!=KCOLOR, //180904
+ Texcom("}");//180722
+ );
+ ,
+ if(Noflg==1,Ltype=0);
+ );
+ GCLIST=append(GCLIST,[name2,Ltype,opcindy]);
+ );
+ );
+ if(length(Out)==1,Out=Out_1);
+ if(length(Out)==1,Out=Out_1); // 15.02.24
+ tmp=[];
+ forall(Out,
+ if(length(#)>0,tmp=append(tmp,#));
+ );
+ Out=tmp;
+ Out;
+);
+////%Projpara end////
+
+////%Invparaptpp start////
+Invparaptpp(pt,pd):=(
+ regional(Eps,fk,nfk,ph,fh,ah,bh,ak,bk,v1,v2,
+ nn,s0,t2,out,tmp,tmp1,tmp2,flg);
+ Eps=10^(-4);
+ if(isstring(pd),
+ fk=pd;
+ ,
+ fk=textformat(pd,5);
+ );
+ nfk=Numptcrv(parse(fk));
+ flg=0;
+ tmp=pt;
+ if(length(tmp)==1,
+ ph=tmp;
+ fh=pd;
+ ,
+ fh=Projpara(fk,["nodata"]);
+ if(nfk>2,
+ tmp1=Nearestpt(tmp,fh);
+ ph=tmp1_2;
+ ,
+ ah=Ptcrv(1,fh); bh=Ptcrv(2,fh);
+ v1=tmp-ah; v2=bh-ah;
+ tmp1=Crossprod(v1,v2);
+ if(abs(tmp1)>Eps,
+ println(" Not on the line");
+ out=[];
+ flg=1;
+ ,
+ ph=Dotprod(v1,v2)/|v2|^2+1;
+ );
+ );
+ );
+ if(flg==0,
+ if(nfk>2,
+ nn=re(floor(ph)); //190505
+ s0=ph-nn;
+ if(ph>Numptcrv(fh)-Eps,
+ out=[Ptend(fk),Numptcrv(fh)];
+ flg=1;
+ );
+ ,
+ nn=1;
+ s0=ph-1;
+ );
+ );
+ if(flg==0,
+ ak=Ptcrv(nn,fk); bk=Ptcrv(nn+1,fk);
+ ah=Ptcrv(nn,fh); bh=Ptcrv(nn+1,fh);
+ ph=(1-s0)*ah+a0*bh;
+ t2=s0;
+ pk=(1-t2)*ak+t2*bk;
+ out=[pk,nn+t2];
+ );
+ out;
+);
+////%Invparaptpp end////
+
+////%Invparapt start////
+Invparapt(pt,pd):=(
+ regional(tmp);
+ tmp=Invparaptpp(pt,pd);
+ tmp_1;
+);
+////%Invparapt end////
+
+////%Subgraph start////
+Subgraph(name3,opcindy):=( //181029
+ regional(name,crvL,sub2d,color,tmp,tmp1,tmp2);
+ name=replace("sub"+name3,"3d","2d");
+ crvL=parse(name3);
+ if(Measuredepth(crvL)==1,crvL=[crvL]);
+ sub2d=[];
+ forall(crvL,tmp1,
+ tmp2=[];
+ forall(tmp1,
+ tmp2=append(tmp2,Parasubpt(#));
+ );
+ sub2d=append(sub2d,tmp2);
+ );
+ tmp=name+"="+Textformat(sub2d,5)+";";
+ parse(tmp);
+ GCLIST=append(GCLIST,[name,[0,1],opcindy]); //190127
+ sub2d;
+);
+////%Subgraph end////
+
+////%Spaceline start////
+Spaceline(ptlist):=Spaceline(ptlist,[]); // 16.02.22 from
+Spaceline(Arg1,Arg2):=(
+ regional(name,tmp,tmp1,tmp2);
+ if(isstring(Arg1),
+ Spaceline(Arg1,Arg2,[]);
+ ,
+ tmp=Arg1.name; //190505
+ tmp=substring(tmp,1,length(tmp)-1);
+ name="-"+replace(tmp,",","");
+ Spaceline(name,Arg1,Arg2);
+ );
+); // 16.02.22 to
+Spaceline(nm,ptlistorg,optionorg):=(
+//help:Spaceline("1",[[2,5,1],[4,2,3]]);
+//help:Spaceline([A,B]);
+//help:Spaceline(options=["Msg=y(n)"]);
+ regional(name2,name3,options,Out,tmp,tmp1,tmp2,
+ opstr,opcindy,Ltype,Noflg,eqL,ptlist, Msg,color);
+ ptlist=apply(ptlistorg,if(ispoint(#),parse(#.name+"3d"),#)); // 190505
+ ptlist=apply(ptlist,if(isstring(#),parse(#),#)); //190330
+ if(substring(nm,0,2)=="bz",
+ name2=replace(nm,"bz","bz2d");
+ name3=replace(nm,"bz","bz3d");
+ ,
+ if(substring(nm,0,1)=="-",
+ tmp=substring(nm,1,length(nm));
+ if(indexof(tmp,"3d")>0,name3=tmp,name3=tmp+"3d");
+ name2=replace(name3,"3d","2d");
+ ,
+ name2="sl2d"+nm;
+ name3="sl3d"+nm;
+ );
+ );
+ options=select(optionorg,length(#)>0); // 160415
+ tmp=Divoptions(options);
+ Ltype=tmp_1;
+ Noflg=tmp_2;
+ eqL=tmp_5;
+ color=tmp_(length(tmp)-2);
+ opcindy=tmp_(length(tmp));
+ Msg=1;
+ forall(eqL,
+ tmp=substring(#,0,1);
+ if(Toupper(tmp)=="M",
+ tmp=indexof(#,"=");
+ tmp1=substring(#,tmp,tmp+1);
+ if(Toupper(tmp1)=="N",
+ Msg=0;
+ );
+ );
+ );
+ if(Noflg<3,
+ if(Msg==1,
+ println("generate Spaceline "+name3);
+ );
+ tmp=name3+"="+Textformat(ptlist,6)+";"; //190330//190415
+ parse(tmp);
+ tmp1=Projpara(name3,["nodata"]);
+ tmp=name2+"="+Textformat(tmp1,5)+";"; //190415
+ parse(tmp);
+ tmp="[";
+ forall(ptlist, //17.07.13from
+ if(isstring(#),
+ tmp=tmp+#+",";
+ ,
+ tmp=tmp+Textformat(#,5)+",";
+ );
+ );
+ tmp=substring(tmp,0,length(tmp)-1)+"]";
+ tmp=name3+"=Spaceline("+tmp+")"; //17.07.13to
+// tmp=name3+"=Spaceline("+Textformat(ptlist,5)+")"; //17.05.24
+ GLIST=append(GLIST,tmp);
+ tmp=name2+"=Projpara("+name3+")";
+ GLIST=append(GLIST,tmp);
+ );
+ if(Noflg<2,
+ if(isstring(Ltype),
+ if(color!=KCOLOR, //180904
+ Texcom("{");Com2nd("Setcolor("+color+")");//180722
+ );
+ Ltype=Getlinestyle(text(Noflg)+Ltype,name2);
+ if(color!=KCOLOR, //180904
+ Texcom("}");//180722
+ );
+ ,
+ if(Noflg==1,Ltype=0);
+ );
+ GCLIST=append(GCLIST,[name2,Ltype,opcindy]);
+ if(SUBSCR==1, //no ketjs on// 15.02.11
+ Subgraph(name3,opcindy);
+ ); //no ketjs off
+ );
+ ptlist;
+);
+////%Spaceline end////
+
+////%Spacecurve start////
+Spacecurve(nm,funstr,variable):=Spacecurve(nm,funstr,variable,[]);
+Spacecurve(nm,funstr,variable,optionorg):=(
+//help:Spacecurve("1","[cos(t),sin(t),0.5*t]","t=[0,4*pi]",["Num=200"]);
+ regional(name2,name3,options,Out,tmp,tmp1,tmp2,vname,tmpfn,str,Rng,Num,Msg,
+ Ec,Exfun,Dc,opstr,opcindy,Fntmp,Vatmp,Ltype,Noflg,eqL,t1,t2,dt,tt,pa,ke,color);
+ if(substring(nm,0,2)=="bz",
+ name2=replace(nm,"bz","bz2d");
+ name3=replace(nm,"bz","bz3d");
+ ,
+ name2="sc2d"+nm;
+ name3="sc3d"+nm;
+ );
+ Eps=10^(-4);
+ Num=50;
+ Ec=[];
+ Exfun="";
+ Dc=1000;
+ options=select(optionorg,length(#)>0); // 160415
+ tmp=Divoptions(options);
+ Ltype=tmp_1;
+ Noflg=tmp_2;
+ eqL=tmp_5;
+ color=tmp_(length(tmp)-2);
+ opstr=tmp_(length(tmp)-1);
+ opcindy=tmp_(length(tmp));
+ Msg=1;
+ forall(eqL,
+ tmp=substring(#,0,1);
+ if(Toupper(tmp)=="M",
+ tmp=indexof(#,"=");
+ tmp1=substring(#,tmp,tmp+1);
+ if(Toupper(tmp1)=="N",
+ Msg=0;
+ );
+ );
+ tmp=indexof(#,"N=");
+ if(tmp>0,
+ tmp1=substring(#,tmp+1,length(#));
+ Num=parse(tmp1);
+ opstr=opstr+",'"+#+"'";
+ );
+ tmp=indexof(#,"Num=");
+ if(tmp>0,
+ tmp1=substring(#,tmp+3,length(#));
+ Num=parse(tmp1);
+ opstr=opstr+",'"+#+"'";
+ );
+ tmp=indexof(#,"E=");
+ if(tmp>0,
+ tmp1=substring(#,tmp+1,length(#));
+ if(substring(tmp1,0,1)=="[",
+ Ec=parse(tmp1);
+ ,
+ Exfun=tmp1;
+ );
+ opstr=opstr+",'"+#+"'";
+ );
+ tmp=indexof(#,"Exc=");
+ if(tmp>0,
+ tmp1=substring(#,tmp+3,length(#));
+ if(substring(tmp1,0,1)=="[",
+ Ec=parse(tmp1);
+ ,
+ Exfun=tmp1;
+ );
+ );
+ );
+ tmp=indexof(variable,"=");
+ vname=substring(variable,0,tmp-1);
+ str=substring(variable,tmp,length(variable));
+ Rng=parse(str);
+ t1=Rng_1; t2=Rng_2;
+ dt=(t2-t1)/Num; // differ from Scilab
+ tmp="tmpfn("+vname+"):="+funstr+";";
+ parse(tmp);
+ Out=[];
+ Ec=append(sort(Ec),10000);
+ ke=1;
+ forall(0..Num,
+ pt=[];
+ tt=Rng_1+#*dt;
+ if(tt-Ec_ke<-Eps,
+ pa=tmpfn(tt);
+ );
+ if(abs(tt-Ec_ke)<=Eps,
+ if(length(Out)>0,
+ if(Out_(length(Out))_1!="inf",
+ pa=["inf"];
+ );
+ );
+ );
+ if(tt-Ec_ke>Eps,
+ pa=tmpfn(tt);
+ ke=ke+1;
+ );
+ if(length(pa)>0,
+ if(pa_1=="inf",
+ Out=append(Out,pa);
+ ,
+ if(length(Out)==0,
+ Out=[pa];
+ ,
+ tmp=Out_(length(Out));
+ if(tmp_1=="inf",
+ Out=append(Out,pa);
+ ,
+ if(|tmp-pa|<Dc,
+ Out=append(Out,pa);
+ ,
+ Out=concat(Out,[["inf"],pa]);
+ );
+ );
+ );
+ );
+ );
+ );
+ tmp1=[];
+ tmp2=select(1..length(Out),Out_#==["inf"]);
+ tmp=1;
+ forall(tmp2,
+ if(#>tmp,
+ tmp1=concat(tmp1,[Out_(tmp..(#-1))])
+ );
+ tmp=#+1;
+ );
+ if(tmp<length(Out),
+ tmp1=concat(tmp1,[Out_(tmp..length(Out))]);
+ );
+ if(length(Out)==1,
+ Out=Out_1;
+ );
+ if(Noflg<3,
+ if(Msg==1,
+ println("generate Spacecurve "+name3);
+ );
+ tmp=name3+"="+textformat(Out,5)+";"; //190415
+ parse(tmp);
+ tmp1=Projpara(name3,["nodata"]);
+ tmp=name2+"="+textformat(tmp1,5)+";"; //190415
+ parse(tmp);
+ tmp=name3+"=Spacecurve(Assign('"+funstr+"'),'"+variable+"'"+opstr+")";
+ GLIST=append(GLIST,tmp);
+ tmp=name2+"=Projpara("+name3+")";
+ GLIST=append(GLIST,tmp);
+ );
+ if(Noflg<2,
+ if(isstring(Ltype),
+ if(color!=KCOLOR, //180904
+ Texcom("{");Com2nd("Setcolor("+color+")");//180722
+ );
+ Ltype=Getlinestyle(text(Noflg)+Ltype,name2);
+ if(color!=KCOLOR, //180904
+ Texcom("}");//180722
+ );
+ ,
+ if(Noflg==1,Ltype=0);
+ );
+ GCLIST=append(GCLIST,[name2,Ltype,opcindy]);
+ if(SUBSCR==1, // 15.02.11
+ tmp=parse(name2); // 15.08.17
+ if(length(tmp)>0,
+ Subgraph(name3,opcindy);
+ ); // 15.08.17
+ );
+ );
+ Out;
+);
+////%Spacecurve end////
+
+////%Partcrv3d start////
+Partcrv3d(nm,pA,pB,PkLstr):=Partcrv3d(nm,pA,pB,PkLstr,[]);
+Partcrv3d(nm,pA,pB,PkLstr,options):=(
+//help:Partcrv3d("1",A,B,"sl3d1");
+//help:Partcrv3d("1",1.3,2.5,"sl3d1");
+ regional(p1,p2,q1,q2,dt1,dts,dt3,tmp,tmp1,tmp2);
+ if(isreal(pA),
+ p1=pA; q1=pA;
+ ,
+ if(islist(pA),
+ tmp=pA;
+ ,
+ if(ispoint(pA),tmp=pA.name,tmp=pA); //190505
+ tmp=parse(tmp+"3d");
+ );
+ p1=parapt(tmp);
+ q1=[p1_1,tmp_3]+[NE.x-SW.x,0];
+ );
+ if(isreal(pB),
+ p2=pB; q2=pB;
+ ,
+ if(islist(pB),
+ tmp=pB;
+ ,
+ if(ispoint(pB),tmp=pB.name,tmp=pB); //190505
+ tmp=parse(tmp+"3d");
+ );
+ p2=parapt(tmp);
+ q2=[p2_1,tmp_3]+[NE.x-SW.x,0];
+ );
+ tmp=replace(PkLstr,"3d","2d");
+ dt1=partcrv("",p1,p2,tmp,["nodata"]);
+ dts=partcrv("",q1,q2,"sub"+tmp,["nodata"]);
+ dt=apply(1..length(dt1),
+ Xyzcoord(dt1_#,dts_#); //181028
+ );
+ Spaceline("-part3d"+nm,dt,options);
+);
+////%Partcrv3d end////
+
+////%Joincrvs3d( start////
+Joincrvs3d(nm,plotstrL):=Joincrvs3d(nm,plotstrL,[]);//16.10.06
+Joincrvs3d(nm,plotstrL,options):=(
+//help:Joincrvs3d("1",["bz3da1","bz3da1"]);
+ regional(PtL,Eps,QdL,Flg,Ni,Qd,pP,pS,pQ,pR,rMN,
+ opcindy,tmp,tmp1,tmp2,str,name2,name3,Ltype,Noflg,color);
+ name2="join2d"+nm;
+ name3="join3d"+nm;
+ QdL=[];
+ forall(plotstrL,str,
+ if(isstring(str),
+ tmp=parse(str);
+ ,
+ tmp=str;
+ );
+ QdL=append(QdL,tmp);
+ );
+ Eps=10^(-4);
+ tmp=Divoptions(options);
+ Ltype=tmp_1;
+ Noflg=tmp_2;
+ color=tmp_(length(tmp)-2);
+ opcindy=tmp_(length(tmp));
+ tmp1=tmp_6;
+ if(length(tmp1)>0,Eps=tmp1_1);
+ Flg=0;
+ if(length(QdL)==0,
+ PtL=[];
+ Flg=1;
+ );
+ if(Flg==0,
+ PtL=QdL_1;
+ forall(2..length(QdL),Ni,
+ Qd=QdL_Ni;
+ if(length(Qd)>1,
+ pP=PtL_1;
+ pS=PtL_(length(PtL));
+ pQ=Qd_1;
+ pR=Qd_(length(Qd));
+ rMN=min([Norm(pP-pQ),Norm(pP-pR),
+ Norm(pS-pQ),Norm(pS-pR)]);
+ if(rMN==Norm(pP-pR),
+ Qd=reverse(Qd);
+ ,
+ if(rMN==Norm(pS-pQ),
+ PtL=reverse(PtL);
+ ,
+ if(rMN==Norm(pS-pR),
+ PtL=reverse(PtL);
+ Qd=reverse(Qd);
+ );
+ );
+ );
+ );
+ if(rMN>Eps,
+ PtL=concat(PtL,Qd);
+ ,
+ PtL=concat(PtL,Qd_(2..length(Qd)));
+ );
+ );
+ );
+ if(Noflg<3,
+ println("generate Joincurves3d "+name3);
+ tmp=name3+"="+textformat(PtL,5)+";"; //190415
+ parse(tmp);
+ tmp1=Projpara(name3,["nodata"]);
+ tmp=name2+"="+textformat(tmp1,5)+";"; //190415
+ parse(tmp);
+ tmp=text(plotstrL);
+ tmp=substring(tmp,1,length(tmp)-1);
+ tmp=name3+"=Joincrvs("+tmp+")";
+ GLIST=append(GLIST,tmp);
+ tmp=name2+"=Projpara("+name3+")";
+ GLIST=append(GLIST,tmp);
+ );
+ if(Noflg<2,
+ if(isstring(Ltype),
+ if(color!=KCOLOR, //180904
+ Texcom("{");Com2nd("Setcolor("+color+")");//180722
+ );
+ Ltype=Getlinestyle(text(Noflg)+Ltype,name2);
+ if(color!=KCOLOR, //180904
+ Texcom("}");//180722
+ );
+ ,
+ if(Noflg==1,Ltype=0);
+ );
+ GCLIST=append(GCLIST,[name2,Ltype,opcindy]);
+ if(SUBSCR==1, // 15.02.11
+ tmp=parse(name2); // 15.08.17
+ if(length(tmp)>0,
+ Subgraph(name3,opcindy);
+ ); // 15.08.17
+ );
+ );
+ PtL;
+);
+////%Joincrvs3d end////
+
+////%Xyzax3data start////
+Xyzax3data(nm,Xrange,Yrange,Zrange):=
+ Xyzax3data(nm,Xrange,Yrange,Zrange,[]);
+Xyzax3data(nm,Xrange,Yrange,Zrange,optionorg):=(
+//help:Xyzax3data("","x=[-5,5]","y=[-5,5]","z=[-5,5]");
+//help:Xyzax3data(Options2=["a1,18","Osw"]);
+ regional(name2,name3,Out,tmp,tmp1,tmp2,ops,eqL,reL,strL,msgflg,
+ options,opstr,opcindy,Ltype,Noflg,Axname,Arrow,Origin,color);
+ name2="ax2d"+nm;
+ name3="ax3d"+nm;
+ options=optionorg;
+ tmp=Divoptions(options);
+ Ltype=tmp_1;
+ Noflg=tmp_2;
+ eqL=tmp_5;
+ reL=tmp_6;
+ strL=tmp_7;
+ color=tmp_(length(tmp)-2);
+ opcindy=tmp_(length(tmp));
+ Axname=1;
+ Arrow=[]; // 190505
+ Origin=""; // 16.08.14
+ if(length(reL)>0,
+ Axname=reL_1;
+ );
+ forall(strL, // 16.08.14from
+ tmp1=Toupper(substring(#,0,1));
+ if(tmp1=="A",
+ tmp=substring(#,1,length(#));
+ if(length(tmp)>0,
+ Arrow=tokenize(tmp,","); //190505
+ if(length(Arrow)==1,Arrow=append(Arrow,18));
+ );
+ );
+ if(tmp1=="O",
+ tmp=indexof(#,",");
+ if(tmp>0,
+ Origin=substring(#,tmp,length(#));
+ ,
+ tmp=substring(#,1,length(#));
+ if(length(tmp)>0,
+ Origin=tmp;
+ ,
+ Origin="sw";
+ );
+ );
+ );
+ ); // 16.08.14to
+ options=remove(options,reL);
+ options=remove(options,strL);
+ msgflg="Y"; //190506from
+ forall(eqL,
+ tmp=Strsplit(#,"=");
+ tmp1=Toupper(substring(tmp_1,0,1));
+ if(tmp1=="M",
+ msgflg=Toupper(substring(tmp_2,0,1));
+ options=remove(options,[#]);
+ );
+ ); //190506to
+ tmp1=indexof(Xrange,"=");
+ tmp=parse(substring(Xrange,tmp1,length(Xrange)));
+ Px=[tmp_1,0,0]; Qx=[tmp_2,0,0];
+ tmp1=indexof(Yrange,"=");
+ tmp=parse(substring(Yrange,tmp1,length(Yrange)));
+ Py=[0,tmp_1,0]; Qy=[0,tmp_2,0];
+ tmp1=indexof(Zrange,"=");
+ tmp=parse(substring(Zrange,tmp1,length(Zrange)));
+ Pz=[0,0,tmp_1]; Qz=[0,0,tmp_2];
+ tmp=["nodisp","Msg=n"];
+ Spaceline("-axx3d"+nm,[Px,Qx],tmp);
+ Spaceline("-axy3d"+nm,[Py,Qy],tmp);
+ Spaceline("-axz3d"+nm,[Pz,Qz],tmp);
+ Out=[[Px,Qx],[Py,Qy],[Pz,Qz]];
+ if(Axname>0,
+ Xyzaxparaname(Xrange,Yrange,Zrange,[Axname]);
+ );
+ if(Noflg<3,
+ if(msgflg=="Y",
+ tmp="generate axes "+name3;
+ tmp=tmp+" : axx3d"+nm+",axy3d"+nm+",axz3d"+nm;
+ println(tmp);
+ );
+ tmp="["+"axx3d"+nm+","+"axy3d"+nm+",";
+ tmp=tmp+"axz3d"+nm+"]";
+ tmp=name3+"="+tmp;
+ parse(tmp);
+ tmp1=Projpara([name3],["nodata"]);
+ tmp=name2+"="+textformat(tmp1,5)+";"; //190415
+ parse(tmp);
+ tmp=name3+"=Xyzax3data("+
+ Dq+Xrange+Dq+","+Dq+Yrange+Dq+","+Dq+Zrange+Dq+")";
+ GLIST=append(GLIST,tmp);
+ tmp=name2+"=Projpara("+name3+")";
+ GLIST=append(GLIST,tmp);
+ );
+ if(Noflg<2,
+ if(isstring(Ltype),
+ if(color!=KCOLOR, //180904
+ Texcom("{");Com2nd("Setcolor("+color+")");//180722
+ );
+ Ltype=Getlinestyle(text(Noflg)+Ltype,name2);
+ if(color!=KCOLOR, //180904
+ Texcom("}");//180722
+ );
+ ,
+ if(Noflg==1,Ltype=0);
+ );
+ GCLIST=append(GCLIST,[name2,Ltype,opcindy]);
+ if(Noflg<1, // 16.08.14from
+ if(length(Arrow)==2, //190505from
+ tmp1=Parapt(Px); tmp2=Parapt(Qx);
+ ops=[Arrow_1,Arrow_2,"Line=n"];
+ Lightarrowdata("ax1",[tmp2,tmp2-tmp1],ops);
+ tmp1=Parapt(Py); tmp2=Parapt(Qy);
+ Lightarrowdata("ax2",[tmp2,tmp2-tmp1],ops);
+ tmp1=Parapt(Pz); tmp2=Parapt(Qz);
+ Lightarrowdata("ax3",[tmp2,tmp2-tmp1],ops);
+ ); //190505to
+ if(length(Origin)>0,
+ Letter([Parapt([0,0,0]),Origin,"O"]);
+ );
+ ); // 16.08.14until
+ if(SUBSCR==1, // 15.02.11
+ Subgraph(name3,opcindy); //181029
+ );
+ );
+ Out;
+);
+////%Xyzax3data end////
+
+////%Xyzaxparaname start////
+Xyzaxparaname(Xrange,Yrange,Zrange):=
+ Xyzaxparaname(Xrange,Yrange,Zrange,[]);
+Xyzaxparaname(Xrange,Yrange,Zrange,options):=(
+//help:Xyzaxparaname("x=[-5,5]","y=[-5,5]","z=[-5,5]");
+ regional(tmp,tmp1,tmp2,Eps,Dr,Noflg,Xname,Yname,Zname,
+ px,qx,py,qy,pz,qz,ph,qh,rr,ch);
+ Eps=10.0^(-6);
+ Dr=0.19*1000/2.54/MilliIn;
+ Noflg=0;
+ forall(options,
+ if(isreal(#),Dr=Dr*#);
+ );
+ tmp1=Strsplit(Xrange,"=");
+ Xname=tmp1_1;
+ tmp=parse(tmp1_2);
+ px=[tmp_1,0,0]; qx=[tmp_2,0,0];
+ tmp1=Strsplit(Yrange,"=");
+ Yname=tmp1_1;
+ tmp=parse(tmp1_2);
+ py=[0,tmp_1,0]; qy=[0,tmp_2,0];
+ tmp1=Strsplit(Zrange,"=");
+ Zname=tmp1_1;
+ tmp=parse(tmp1_2);
+ pz=[0,0,tmp_1]; qz=[0,0,tmp_2];
+ COM2ndlist=select(COM2ndlist,indexof(#,Dqq("$"+Xname+"$"))==0);//180608[3lines]
+ COM2ndlist=select(COM2ndlist,indexof(#,Dqq("$"+Yname+"$"))==0);
+ COM2ndlist=select(COM2ndlist,indexof(#,Dqq("$"+Zname+"$"))==0);
+ ph=Parapt(px); qh=Parapt(qx); rr=|ph-qh|;
+ if(rr>Eps,
+ ch=qh+Dr/rr*(qh-ph);
+ Expr(ch,"c",Xname);
+ );
+ ph=Parapt(py); qh=Parapt(qy); rr=|ph-qh|;
+ if(rr>Eps,
+ ch=qh+Dr/rr*(qh-ph);
+ Expr(ch,"c",Yname);
+ );
+ ph=Parapt(pz); qh=Parapt(qz); rr=|ph-qh|;
+ if(rr>Eps,
+ ch=qh+Dr/rr*(qh-ph);
+ Expr(ch,"c",Zname);
+ );
+);
+////%Xyzaxparaname end////
+
+////%Datalist3d start////
+Datalist3d():=(
+//help:Datalist3d();
+ regional(out,tmp,tmp2,tmp3);
+ tmp=apply(GCLIST,#_1);
+ tmp=select(tmp,indexof(#,"2d")>0);
+ tmp2=select(tmp,indexof(#,"sub")==0);
+ tmp3=apply(tmp2,replace(#,"2d","3d"));
+ out=tmp3;
+);
+////%Datalist3d end////
+
+////%Datalist2d start////
+Datalist2d():=(
+//help:Datalist2d();
+ regional(out,tmp,tmp2,tmp3);
+ tmp=apply(GCLIST,#_1);
+ tmp=select(tmp,indexof(#,"2d")>0);
+ tmp2=select(tmp,indexof(#,"sub")==0);
+// tmp3=apply(tmp2,replace(#,"2d","3d"));
+ out=tmp2;
+);
+////%Datalist2d end////
+
+////%Embed start////
+Embed(nm,Pd2str,funstr,varstr):=
+ Embed(nm,Pd2str,funstr,varstr,[]);
+Embed(nm,Pd2str,funstr,varstr,options):=(
+//help:Embed("1",["gr1"],"A3d+x*(B3d-A3d)+y*(C3d-A3d)","[x,y]");
+ regional(name2,name3,Pd2L,Pd2,tmp,tmp1,xstr,ystr,
+ Ltype,Noflg,opstr,opcindy,Out,color);
+ name2="em2d"+nm;
+ name3="em3d"+nm;
+ if(!islist(Pd2str),Pd2L=[Pd2str],Pd2L=Pd2str); // 15.03.06
+ tmp1=[]; // 15.10.31
+ forall(Pd2L,
+ if(isstring(#),tmp=parse(#),tmp=#);
+ if(Measuredepth(tmp)==2,
+ tmp1=concat(tmp1,tmp);
+ );
+ if(Measuredepth(tmp)==1,
+ tmp1=append(tmp1,tmp);
+ );
+ );
+ Pd2L=tmp1;
+ tmp=substring(varstr,0,1);
+ if(tmp=="[" % tmp=="(",
+ tmp1=substring(varstr,1,length(varstr)-1);
+ ,
+ tmp1=varstr;
+ );
+ tmp=indexof(tmp1,",");
+ xstr=substring(tmp1,0,tmp-1);
+ ystr=substring(tmp1,tmp,length(tmp1));
+ tmp=Divoptions(options);
+ Ltype=tmp_1;
+ Noflg=tmp_2;
+ color=tmp_(length(tmp)-2);
+ opcindy=tmp_(length(tmp));
+ Out=[];
+ forall(Pd2L,Pd2,
+ tmp1=[];
+ forall(Pd2,
+ tmp=Assign(funstr,xstr,"("+textformat(#_1,5)+")");
+ tmp=Assign(tmp,ystr,"("+textformat(#_2,5)+")");
+ tmp=parse(tmp);
+ tmp1=append(tmp1,tmp);
+ );
+ Out=append(Out,tmp1);
+ );
+ if(length(Out)==1,
+ Out=Out_1;
+ );
+ if(Noflg<3,
+ println("generate Embed "+name3);
+ if(length(Out)>0,
+ tmp=name3+"="+textformat(Out,5)+";"; //190415
+ parse(tmp);
+ tmp1=Projpara(name3,["nodata"]);
+ tmp=name2+"="+textformat(tmp1,5)+";"; //190415
+ parse(tmp);
+ );
+ if(!islist(Pd2str),
+ tmp=Pd2str;
+ ,
+ tmp=text(Pd2str);
+ tmp="list("+substring(tmp,1,length(tmp)-1)+")";
+ );
+ tmp=name3+"=Embed("+tmp+",'"+funstr+"','"+varstr+"'"+")";
+ GLIST=append(GLIST,tmp);
+ tmp=name2+"=Projpara("+name3+")";
+ GLIST=append(GLIST,tmp);
+ );
+ if(Noflg<2,
+ if(isstring(Ltype),
+ if(color!=KCOLOR, //180904
+ Texcom("{");Com2nd("Setcolor("+color+")");//180722
+ );
+ Ltype=Getlinestyle(text(Noflg)+Ltype,name2);
+ if(color!=KCOLOR, //180904
+ Texcom("}");//180722
+ );
+ ,
+ if(Noflg==1,Ltype=0);
+ );
+ if(length(Out)>0,
+ GCLIST=append(GCLIST,[name2,Ltype,opcindy]);
+ if(SUBSCR==1, // 15.02.11
+ Subgraph(name3,opcindy);
+ );
+ );
+ );
+ Out;
+);
+////%Embed end////
+
+////%Rotatepoint3d start////
+Rotate3pt(point,w1,w2):=Rotatepoint3d(point,w1,w2,[0,0,0]);
+Rotate3pt(point,w1,w2,center):=Rotatepoint3d(point,w1,w2,center);
+Rotatepoint3d(point,w1,w2):=Rotatepoint3d(point,w1,w2,[0,0,0]);//180809
+Rotatepoint3d(point,w1,w2,center):=(
+//help:Rotatepoint3d(pt3d,[0,0,1],pi/2);
+//help:Rotatepoint3d(pt3d,[0,0,1],pi/2,[1,1,1]);
+ regional(Eps,ct,st,v3,v1,v2,Ans,ns,PtL,num,
+ pt,tmp,tmp1,tmp2,Retflg,x,y,z,xx,yy,zz,flg);
+ Eps=10^(-4);
+ Retflg=0;
+ if(length(w2)==1,
+ ct=cos(w2);
+ st=sin(w2);
+ v3=1/|w1|*w1;
+ if(v3_1==0,
+ tmp=[1,0,0];
+ ,
+ tmp=[0,1,0];
+ );
+ w1=[tmp_2*v3_3-tmp_3*v3_2,
+ tmp_3*v3_1-tmp_1*v3_3,
+ tmp_1*v3_2-tmp_2*v3_1];
+ v1=1/|w1|*w1;
+ v2=[v3_2*v1_3-v3_3*v1_2,
+ v3_3*v1_1-v3_1*v1_3,
+ v3_1*v1_2-v3_2*v1_1];
+ ,
+ tmp=[w1_2*w2_3-w1_3*w2_2,
+ w1_3*w2_1-w1_1*w2_3,
+ w1_1*w2_2-w1_2*w2_1];
+ if(|tmp|<Eps,
+ Ans=point;
+ Retflg=1;
+ );
+ if(Retflg==0,
+ v1=1/|w1|*w1;
+ ns=v1_1*w2_1+v1_2*w2_2+v1_3*w2_3;
+ tmp=w2-ns*v1;
+ v2=1/|tmp|*tmp;
+ tmp=[v1_2*v2_3-v1_3*v2_2,
+ v1_3*v2_1-v1_1*v2_3,
+ v1_1*v2_2-v1_2*v2_1];
+ v3=1/|tmp|*tmp;
+ ct=ns/|w2|;
+ st=sqrt(1-ct^2);
+ );
+ );
+ if(Retflg==0,
+ if(|tmp|<Eps,
+ Ans=point;
+ Retflg=1;
+ );
+ );
+ if(Retflg==0,
+ if(Measuredepth(point)>0,
+ PtL=point;
+ ,
+ PtL=[point];
+ );
+ Ans=[];
+ flg=0;
+ forall(1..length(PtL),num,
+ pt=PtL_num;
+ if(pt_1=="inf",
+ Ans=append(Ans,["inf"]);
+ flg=1;
+ );
+ if(flg==0,
+ x=pt_1-center_1; y=pt_2-center_2; z=pt_3-center_3;
+ xx=((v1_1*ct+v2_1*st)*v1_1+ (-v1_1*st+v2_1*ct)*v2_1+v3_1^2)*x
+ +((v1_1*ct+v2_1*st)*v1_2+(-v1_1*st+v2_1*ct)*v2_2+v3_1*v3_2)*y
+ +((v1_1*ct+v2_1*st)*v1_3+(-v1_1*st+v2_1*ct)*v2_3+v3_1*v3_3)*z;
+ yy=((v1_2*ct+v2_2*st)*v1_1+(-v1_2*st+v2_2*ct)*v2_1+v3_1*v3_2)*x
+ +((v1_2*ct+v2_2*st)*v1_2+(-v1_2*st+v2_2*ct)*v2_2+v3_2^2)*y
+ +((v1_2*ct+v2_2*st)*v1_3+(-v1_2*st+v2_2*ct)*v2_3+v3_2*v3_3)*z;
+ zz=((v1_3*ct+v2_3*st)*v1_1+(-v1_3*st+v2_3*ct)*v2_1+v3_1*v3_3)*x
+ +((v1_3*ct+v2_3*st)*v1_2+(-v1_3*st+v2_3*ct)*v2_2+v3_2*v3_3)*y
+ +((v1_3*ct+v2_3*st)*v1_3+(-v1_3*st+v2_3*ct)*v2_3+v3_3^2)*z;
+ Ans=append(Ans,center+[xx,yy,zz]);
+ );
+ );
+ if(length(Ans)==1,
+ Ans=Ans_1;
+ );
+ );
+ Ans;
+);
+////%Rotatepoint3d end////
+
+////%Rotatedata3d start////
+Rotatedata3d(nm,P3data,w1,w2):=Rotatedata3d(nm,P3data,w1,w2,[]);
+Rotatedata3d(nm,P3data,w1,w2,options):=(
+//help:Rotatedata3d("1",["sl3d1","sc3d2"],[0,0,1],pi/3);
+//help:Rotatedata3d(options=[center,...]);
+ regional(name3,name2,center,pdata,Pd3,Pd,Out,tmp,tmp1,
+ Ltype,Noflg,opcindy,opstr,color);
+ name3="rot3d"+nm;
+ name2="rot2d"+nm;
+ center=[0,0,0];
+ tmp=Divoptions(options);
+ Ltype=tmp_1;
+ Noflg=tmp_2;
+ color=tmp_(length(tmp)-2);
+ opstr=tmp_(length(tmp)-1);
+ opcindy=tmp_(length(tmp));
+ tmp1=tmp_6;
+ if(length(tmp1)>0,
+ center=tmp1_1;
+ );
+ if(islist(P3data) & isstring(P3data_1),Pd3=P3data,Pd3=[P3data]);
+ Out=[];
+ forall(Pd3,Pd,
+ if(isstring(Pd),Pd=parse(Pd));
+// if(Measuredepth(Pd)==1,Pd=[Pd]);
+ Ans=[];
+ forall(Pd,
+ tmp=Rotatepoint3d(#,w1,w2,center); //180729
+ Ans=append(Ans,tmp);
+ );
+ Out=append(Out,Ans);
+ );
+ Out=Flattenlist(Out);
+ if(length(Out)==1,Out=Out_1);
+ if(Noflg<3,
+ println("generate Rotatedata3d "+name3);
+ tmp=name3+"="+textformat(Out,5)+";"; //190415
+ parse(tmp);
+ tmp1=Projpara(name3,["nodata"]);
+ tmp=name2+"="+textformat(tmp1,5)+";"; //190415
+ parse(tmp);
+ tmp=Textformat(P3data,5); // 17.12.23
+ tmp=RSform(tmp,1); //180602
+ tmp=replace(tmp,Dq,"");//180808
+// tmp=replace(tmp,"[","list(");
+// tmp=replace(tmp,"]",")");
+ tmp=name3+"=Rotate3data("+tmp+",";
+ tmp=tmp+Textformat(w1,6)+","+Textformat(w2,6);
+ tmp=tmp+","+Textformat(center,6)+")";//180808
+ GLIST=append(GLIST,tmp);
+ tmp=name2+"=Projpara("+name3+")";
+ GLIST=append(GLIST,tmp);
+ );
+ if(Noflg<2,
+ if(isstring(Ltype),
+ if(color!=KCOLOR, //180904
+ Texcom("{");Com2nd("Setcolor("+color+")");//180722
+ );
+ Ltype=Getlinestyle(text(Noflg)+Ltype,name2);
+ if(color!=KCOLOR, //180904
+ Texcom("}");//180722
+ );
+ ,
+ if(Noflg==1,Ltype=0);
+ );
+ GCLIST=append(GCLIST,[name2,Ltype,opcindy]);
+ if(SUBSCR==1, // 15.02.11
+ Subgraph(name3,opcindy);
+ );
+ );
+ Out;
+);
+////%Rotatedata3d end////
+
+////%Translatepoint3d start////
+Translate3pt(point,w1):=Translatepoint3d(point,w1);
+Translatepoint3d(point,w1):=(
+//help:Translatepoint3d(pt3d,[1,2,3]);
+ regional(Eps,Ans,PtL,pt,num,xx,yy,zz,flg);
+ Eps=10^(-4);
+ if(Measuredepth(point)>0,
+ PtL=point;
+ ,
+ PtL=[point];
+ );
+ Ans=[];
+ flg=0;
+ forall(1..length(PtL),num,
+ pt=PtL_num;
+ if(pt_1=="inf",
+ Ans=append(Ans,["inf"]);
+ flg=1;
+ );
+ if(flg==0,
+ xx=pt_1+w1_1; yy=pt_2+w1_2; zz=pt_3+w1_3;
+ Ans=append(Ans,[xx,yy,zz]);
+ );
+ );
+ if(length(Ans)==1,
+ Ans=Ans_1;
+ );
+ Ans;
+);
+////%Translatepoint3d end////
+
+////%Translatedata3d start////
+Translatedata3d(nm,P3data,w1):=Translatedata3d(nm,P3data,w1,[]);
+Translatedata3d(nm,P3data,w1,options):=(
+//help:Translatedata3d("1",["sl3d1"],[1,2,3]);
+ regional(name3,name2,pdata,Pd3,Pd,Out,tmp,tmp1,
+ Ltype,Noflg,opcindy,color);
+ name3="tra3d"+nm;
+ name2="tra2d"+nm;
+ tmp=Divoptions(options);
+ Ltype=tmp_1;
+ Noflg=tmp_2;
+ color=tmp_(length(tmp)-2);
+ opcindy=tmp_(length(tmp));
+ if(islist(P3data) & isstring(P3data_1),Pd3=P3data,Pd3=[P3data]);
+ Out=[];
+ forall(Pd3,Pd,
+ if(isstring(Pd),Pd=parse(Pd));
+ if(Measuredepth(Pd)==1,Pd=[Pd]);
+ Ans=[];
+ forall(Pd,
+ tmp=Translatepoint3d(#,w1);
+ Ans=append(Ans,tmp);
+ );
+ Out=append(Out,Ans);
+ );
+ Out=Flattenlist(Out);
+ if(length(Out)==1,Out=Out_1);
+ if(Noflg<3,
+ println("generate Translatedata3d "+name3);
+ tmp=name3+"="+textformat(Out,5)+";"; //190415
+ parse(tmp);
+ tmp1=Projpara(name3,["nodata"]);
+ tmp=name2+"="+textformat(tmp1,5)+";"; //190415
+ parse(tmp);
+ tmp=textformat(P3data,5); // 17.12.23
+ tmp=RSform(tmp,1); // 180602
+ tmp=replace(tmp,Dq,""); //180808
+// tmp=text(P3data);
+// tmp=replace(tmp,"[","list(");
+// tmp=replace(tmp,"]",")");
+ tmp=name3+"=Translate3data("+tmp+","+textformat(w1,5)+")";
+ GLIST=append(GLIST,tmp);
+ tmp=name2+"=Projpara("+name3+")";
+ GLIST=append(GLIST,tmp);
+ );
+ if(Noflg<2,
+ if(isstring(Ltype),
+ if(color!=KCOLOR, //180904
+ Texcom("{");Com2nd("Setcolor("+color+")");//180722
+ );
+ Ltype=Getlinestyle(text(Noflg)+Ltype,name2);
+ if(color!=KCOLOR, //180904
+ Texcom("}");//180722
+ );
+ ,
+ if(Noflg==1,Ltype=0);
+ );
+ GCLIST=append(GCLIST,[name2,Ltype,opcindy]);
+ if(SUBSCR==1, // 15.02.11
+ Subgraph(name3,opcindy);
+ );
+ );
+ Out;
+);
+////%Translatedata3d end////
+
+////%Reflectpoint3d start////
+Reflect3pt(point,vecL):=Reflectpoint3d(point,vecL);
+Reflectpoint3d(point,vecL):=(
+//help:Reflectpoint3d(pt3d,[v1,v2,v3]);
+ regional(ans,v1,v2,v3,tmp,tmp1);
+ if(length(vecL)==1,
+ v1=vecL_1;
+ ans=2*v1-point;
+ );
+ if(length(vecL)==2,
+ v1=vecL_1;
+ v2=vecL_2;
+ v3=(v2-v1)/|v2-v1|;
+ tmp=v1+Dotprod(point-v1,v3)*v3;
+ ans=2*tmp-point;
+ );
+ if(length(vecL)==3,
+ v1=vecL_1;
+ v2=vecL_2;
+ v3=vecL_3;
+ tmp=Crossprod(v2-v1,v3-v1);
+ tmp1=point-Dotprod(tmp,point-v1)/|tmp|^2*tmp;
+ ans=2*tmp1-point;
+ );
+ ans;
+);
+////%Reflectpoint3d end////
+
+////%Reflectdata3d start////
+Reflectdata3d(nm,P3data,vecL):=Reflectdata3d(nm,P3data,vecL,[]);
+Reflectdata3d(nm,P3data,vecL,options):=(
+//help:Reflectdata3d("1",["sl3d1"],[v1,v2,v3]);
+//help:Reflectdata3d("1",["sl3d1"],[v1,v2]);
+//help:Reflectdata3d("1",["sl3d1"],[v1]);
+ regional(name3,name2,pdata,Pd3,Pd,Out,tmp,tmp1,
+ Ltype,Noflg,opcindy,color);
+ name3="ref3d"+nm;
+ name2="ref2d"+nm;
+ tmp=Divoptions(options);
+ Ltype=tmp_1;
+ Noflg=tmp_2;
+ color=tmp_(length(tmp)-2);
+ opcindy=tmp_(length(tmp));
+ if(islist(P3data) & isstring(P3data_1),Pd3=P3data,Pd3=[P3data]);
+ Out=[];
+ forall(Pd3,Pd,
+ if(isstring(Pd),Pd=parse(Pd));
+// if(Measuredepth(Pd)==1,Pd=[Pd]);
+ Ans=[];
+ forall(Pd,
+ tmp=Reflectpoint3d(#,vecL);
+ Ans=append(Ans,tmp);
+ );
+ Out=append(Out,Ans);
+ );
+ Out=Flattenlist(Out);
+ if(length(Out)==1,Out=Out_1);
+ if(Noflg<3,
+ println("generate Reflectdata3d "+name3);
+ tmp=name3+"="+textformat(Out,5)+";"; //190415
+ parse(tmp);
+ tmp1=Projpara(name3,["nodata"]);
+ tmp=name2+"="+Textformat(tmp1,5)+";"; //190415
+ parse(tmp);
+ tmp=Textformat(P3data,5); // 17.12.23
+ tmp=RSform(tmp,1); // 180602
+ tmp=replace(tmp,Dq,""); //180807
+// tmp=text(P3data);
+// tmp=replace(tmp,"[","list(");
+// tmp=replace(tmp,"]",")");
+ tmp=name3+"=Reflect3data("+tmp;
+ tmp=tmp+","+RSform(Textformat(vecL,5),2)+")";
+ GLIST=append(GLIST,tmp);
+ tmp=name2+"=Projpara("+name3+")";
+ GLIST=append(GLIST,tmp);
+ );
+ if(Noflg<2,
+ if(isstring(Ltype),
+ if(color!=KCOLOR, //180904
+ Texcom("{");Com2nd("Setcolor("+color+")");//180722
+ );
+ Ltype=Getlinestyle(text(Noflg)+Ltype,name2);
+ if(color!=KCOLOR, //180904
+ Texcom("}");//180722
+ );
+ ,
+ if(Noflg==1,Ltype=0);
+ );
+ GCLIST=append(GCLIST,[name2,Ltype,opcindy]);
+ if(SUBSCR==1, // 15.02.11
+ Subgraph(name3,opcindy);
+ );
+ );
+ Out;
+);
+////%Reflectdata3d end////
+
+// 180806
+////%Scalepoint3d start////
+Scale3pt(point,ratio,center):=Scalepoint3d(point,ratio,center);
+Scalepoint3d(point,ratio):=Scalepoint3d(point,ratio,[0,0,0]);//180809
+Scalepoint3d(point,ratio,center):=(
+//help:Scalepoint3d(A,[3,2,4]);
+//help:Scalepoint3d(A,[3,2,4],[1,2,3]);
+ regional(ra1,ra2,ra3,X1,Y1,Z1,X2,Y2,Z2,Cx,Cy,Cz);
+ X1=point_1; Y1=point_2; Z1=point_3;
+ if(length(ratio)==1, //1808from
+ ra1=ratio; ra2=ratio; ra3=ratio;
+ ,
+ ra1=ratio_1; ra2=ratio_2; ra3=ratio_3;
+ );//1808to
+ Cx=center_1; Cy=center_2; Cz=center_3;
+ X2=Cx+ra1*(X1-Cx);
+ Y2=Cy+ra2*(Y1-Cy);
+ Z2=Cz+ra3*(Z1-Cz);
+ [X2,Y2,Z2];
+);
+////%Scalepoint3d end////
+
+// 180808
+////%Scaledata3d start////
+Scaledata3d(nm,P3data,ratio):=Scaledata3d(nm,P3data,ratio,[]);
+Scaledata3d(nm,P3data,ratio,options):=(
+//help:Scaledata3d("1",["sl3d1"],[v1,v2,v3]);
+ regional(name3,name2,pdata,Pd3,Pd,Out,tmp,tmp1,
+ reL,Ltype,Noflg,opcindy,color,center);
+ name3="ref3d"+nm;
+ name2="ref2d"+nm;
+ tmp=Divoptions(options);
+ Ltype=tmp_1;
+ Noflg=tmp_2;
+ reL=tmp_6;
+ color=tmp_(length(tmp)-2);
+ opcindy=tmp_(length(tmp));
+ center=[0,0,0];
+ if(length(reL)>0,
+ center=reL_1;
+ );
+ if(islist(P3data) & isstring(P3data_1),Pd3=P3data,Pd3=[P3data]);
+ Out=[];
+ forall(Pd3,Pd,
+ if(isstring(Pd),Pd=parse(Pd));
+// if(Measuredepth(Pd)==1,Pd=[Pd]);
+ Ans=[];
+ forall(Pd,
+ tmp=Scalepoint3d(#,ratio,center);
+ Ans=append(Ans,tmp);
+ );
+ Out=append(Out,Ans);
+ );
+ Out=Flattenlist(Out);
+ if(length(Out)==1,Out=Out_1);
+ if(Noflg<3,
+ println("generate Scaledata3d "+name3);
+ tmp=name3+"="+textformat(Out,5)+";"; //190415
+ parse(tmp);
+ tmp1=Projpara(name3,["nodata"]);
+ tmp=name2+"="+Textformat(tmp1,5)+";"; //190415
+ parse(tmp);
+ tmp=Textformat(P3data,5); // 17.12.23
+ tmp=RSform(tmp,1); // 180602
+ tmp=replace(tmp,Dq,""); //180807
+// tmp=text(P3data);
+// tmp=replace(tmp,"[","list(");
+// tmp=replace(tmp,"]",")");
+ tmp=name3+"=Scale3data("+tmp;
+ tmp=tmp+","+Textformat(ratio,5);
+ tmp=tmp+","+Textformat(center,5)+")";
+ GLIST=append(GLIST,tmp);
+ tmp=name2+"=Projpara("+name3+")";
+ GLIST=append(GLIST,tmp);
+ );
+ if(Noflg<2,
+ if(isstring(Ltype),
+ if(color!=KCOLOR, //180904
+ Texcom("{");Com2nd("Setcolor("+color+")");//180722
+ );
+ Ltype=Getlinestyle(text(Noflg)+Ltype,name2);
+ if(color!=KCOLOR, //180904
+ Texcom("}");//180722
+ );
+ ,
+ if(Noflg==1,Ltype=0);
+ );
+ GCLIST=append(GCLIST,[name2,Ltype,opcindy]);
+ if(SUBSCR==1, // 15.02.11
+ Subgraph(name3,opcindy);
+ );
+ );
+ Out;
+);
+////%Scaledata3d end////
+
+////%Xyzcoord start////
+Xyzcoord(pm,ps):=Xyzcoord(pm_1,pm_2,ps); //181028from
+Xyzcoord(X,Y,ps):=(
+//help:Xyzcoord(A.x,A.y,Az.y);
+ regional(pt3d);
+ pt3d=Mainsubpt3d([X,Y],ps);
+ pt3d;//181028to
+);
+////%Xyzcoord end////
+
+////%Putoncurve3d start////
+Putoncurve3d(name,pdstr):=(
+//help:Putoncurve3d("T","sc3d1");
+ regional(pt,pd2str,tmp,tmp1,tmp2);
+ pd2str=replace(pdstr,"3d","2d");
+ PutonCurve(name,pd2str);
+ pt=parse(name+".xy");
+ tmp=Nearestpt(pt,pd2str); // 15.03.13
+ tmp1=Paramoncurve(tmp_1,tmp_2,pd2str);
+ tmp="sub"+pd2str;
+ tmp2=Pointoncurve(tmp1,tmp);
+// pt=append(pt,tmp2_2); //181028[2lines]
+ pt=Xyzcoord(pt,tmp2); // 15.03.13
+ tmp=name+"z.xy="+textformat(tmp2,5)+";"; //190415
+ parse(tmp);
+ // VLIST=select(VLIST,#_1!=name+"3d");
+ Defvar(name+"3d",pt);
+);
+////%Putoncurve3d end////
+
+////%Mkpointlist start////
+Mkpointlist():=Mkpointlist([]); //16.11.12
+Mkpointlist(options):=( //181030
+ regional(Eps,dp,mv,pos,worklist,plist,pt,ptstr,pt3,ptz,par,
+ tmp,tmp1,tmp2,tmp3,tmp4,p1,p2,flg);
+ dp=pi/24;
+ mv=NE.x-SW.x;
+ Eps=10^(-4);
+ pos=[NE.x+1,NE.y+0.1];
+ worklist=Workprocess(); //181030
+ plist=select(worklist,length(#_3)!=2);
+ plist=apply(plist,#_1);
+ plist=remove(plist,PTEXCEPTION);
+ tmp=apply(VLIST,#_1);//181029from
+ tmp=select(tmp,indexof(#,"3d")>0);
+ tmp2=apply(tmp,replace(#,"3d",""));
+ forall(tmp2,ptstr,
+ if(!contains(plist,ptstr),
+ tmp=select(VLIST,
+ (#_1==pt+"3d")%(#_1==pt+"2d")%(#_1==pt+"fix"));
+ VLIST=remove(VLIST,tmp);
+ );
+ ); //181029to
+ if(SUBSCR==0,plist=[]);
+ forall(plist,ptstr,
+ pt=parse(ptstr);
+ inspect(pt,"ptsize",3);
+ inspect(pt,"color",2);
+ inspect(pt,"textsize",TSIZE);
+ ptz=pt.name+"z"; //190505
+ tmp=Finddef(pt);
+ tmp=select(VLIST,#_1==pt.name+"3d"); //190505
+ if(length(tmp)==0,
+ tmp=parse(ptz); //181108from
+ if(ispoint(tmp),
+ pt3=Mainsubpt3d(pt.xy,tmp.xy); //181108to
+ ,
+ if(abs(cos(THETA))>Eps,//181028from
+ tmp1=Mainsubpt3d(pt.xy,0);
+ tmp=Parasubpt(tmp1);
+ Putpoint(ptz,tmp,[tmp_1,parse(ptz+".y")]);
+ pt3=Mainsubpt3d(pt.xy,parse(ptz+".xy"));
+ ,
+ if(abs(sin(PHI))>abs(cos(PHI)), //181029from
+ tmp=Parasubpt([-pt.x/sin(PHI),0,pt.y]);
+ ,
+ tmp=Parasubpt([0,pt.x/cos(PHI),pt.y]);
+ );
+ Putpoint(ptz,tmp,[parse(ptz+".x"),pt.y]);//181029t
+ pt3=Mainsubpt3d(pt.xy,parse(ptz+".xy"));
+ );
+ ); //181028to
+ Defvar(pt.name+"3d",pt3); //190505
+ Defvar(pt.name+"fix",0); //190505
+ );
+ flg=0;
+ if(isstring(ptz),ptz=parse(ptz));//181029from
+ inspect(ptz,"ptsize",3);
+ inspect(ptz,"color",3);
+ inspect(ptz,"textsize",TSIZEZ);//181029to
+ if(Ptselected(pt),
+ if(parse(pt.name+"fix")!=1, //190505
+ tmp=select(VLIST,#_1==pt.name+"3d"); //190505
+ tmp1=tmp_1_2;
+ pt3=Mainsubpt3d(pt.xy,ptz.xy); //181029
+ Putpoint(ptz.name,Parasubpt(pt3));
+ if(Norm(tmp1-pt3)>Eps,
+ Defvar(pt.name+"3d",pt3); //190505
+ );
+ flg=1;
+ );
+ );
+ if(Ptselected(ptz),//181108from
+ tmp=select(VLIST,#_1==pt.name+"3d"); //190505
+ tmp1=tmp_1_2;
+ tmp=Parasubpt(tmp1); //181108from
+ if(abs(cos(THETA))>Eps,
+ tmp=tptz.name+".x="+format(tmp_1,6)+";"; //190505
+ parse(tmp);
+ tmp=Parapt([tmp1_1,tmp1_2,ptz.y]);
+ Putpoint(pt.name,tmp); //190505
+ ,
+ tmp=ptz.name+".y="+format(tmp_2,6)+";"; //190505
+ parse(tmp);
+ if(abs(sin(PHI+dp))>abs(cos(PHI+dp)), //181108
+ tmp=-(ptz.x-mv-tmp1_2*cos(PHI+dp))/sin(PHI+dp);
+ tmp=Parapt([tmp,tmp1_2,tmp1_3]);
+ ,
+ tmp=(ptz.x-mv+tmp1_1*sin(PHI+dp))/cos(PHI+dp); //181109pm
+ tmp=Parapt([tmp1_1,tmp,tmp1_3]);
+ );
+ Putpoint(pt.name,tmp); //190505
+ );
+ pt3=Mainsubpt3d(pt.xy,ptz.xy);
+ Defvar(pt.name+"3d",pt3); //190505
+ flg=2;
+ );
+ if(Ptselected(TH) % Ptselected(FI), //181029
+ tmp=select(VLIST,#_1==pt.name+"3d"); //190505
+ if(length(tmp)>0, //17.10.07
+ tmp1=Parapt(tmp_1_2);
+ Putpoint(pt.name,tmp1); //190505
+ tmp2=Parasubpt(tmp_1_2);//181027[2lines]
+ Putpoint(ptz.name,tmp2); //190505
+ flg=3;
+ ); //17.10.07
+ );
+ if(flg==0, //181030from
+ pt3=Mainsubpt3d(pt.xy,ptz.xy);
+ Defvar(pt.name+"3d",pt3); //190505
+ ); //181030to
+ if(Ptselected(pt) % Ptselected(ptz),
+ drawtext(pos,pt3.xy,size->12); // no ketjs //190505
+ );
+ if(!contains(["p","q"],pt.name), //190505
+ ptL=append(ptL,pt);
+ );
+ );
+);
+////%Mkpointlist end////
+
+////%Mkseg3d start////
+Mkseg3d():=Mkseg3d([]);
+Mkseg3d(options):=(
+ regional(seg,nmseg,def,ptA,ptB,segL,opstr,opcindy,
+ name,strg,Ltype,Noflg,tht,tmp,tmp1,tmp2,tmp3);
+ name="geoseg3d";
+ strg=name+"=list(";
+ tmp=Divoptions(options);
+ Ltype=tmp_1;
+ Noflg=tmp_2;
+ opcindy=tmp_(length(tmp));
+ segL=[];
+ forall(allsegments(),seg,
+ inspect(seg,"labeled",false);
+ tmp=Finddef(seg);
+ def=tmp_1;
+ ptA=tmp_2;
+ ptB=tmp_3;
+ if(ispoint(parse(ptA)) & ispoint(parse(ptB)),
+ tmp1=select(VLIST,indexof(#_1,ptA+"3d")>0);
+ tmp2=select(VLIST,indexof(#_1,ptB+"3d")>0);
+ if(length(tmp1)>0 & length(tmp2)>0,
+ tmp1="["+ptA+"3d,"+ptB+"3d]";
+ nmseg=ptA+ptB;
+// Spaceline(nmseg,parse(tmp1),append(options,"Msg=nodisp")); //15.06.15
+ Spaceline("-"+nmseg+"3d",[ptA+"3d",ptB+"3d"], // 16.04.07
+ append(options,"Msg=nodisp")); //15.06.15
+ segL=append(segL,nmseg+"3d");// 16.04.07
+ strg=strg+nmseg+"3d,";// 16.04.07
+ );
+ );
+ );
+ if(length(parse(name))>0, //190401
+ println("generate totally "+name);
+ );
+ if(length(segL)>0, // 15.03.06
+ strg=substring(strg,0,length(strg)-1)+")";
+ if(Noflg<3,
+ GLIST=append(GLIST,strg);
+ );
+ tmp1=apply(segL,Dq+#+Dq); //15.03.02
+ tmp=name+"="+tmp1.name; //190505
+ parse(tmp);
+ );
+ segL;
+);
+////%Mkseg3d end////
+
+////%Ptseg3data start////
+Ptseg3data():=Ptseg3data([]);
+//help:Ptseg3data();
+//help:Ptseg3data([A,B]);
+Ptseg3data(options):=(
+ regional(pt,ptz,pt3,plist,plistz,tmp,tmp1,tmp2);
+ tmp=remove(allpoints(),options);
+ tmp=remove(tmp,[SW,NE,TH,FI]);
+ plist=select(tmp,indexof(#.name,"z")==0);
+ plistz=select(tmp,indexof(#.name,"z")>0);
+ if(Ptselected(TH) % Ptselected(FI),
+ forall(plist,pt,
+ tmp=select(plistz,#.name==pt.name+"z");
+ if(length(tmp)>0,
+ ptz=tmp_1;
+ ,
+ ptz=[];
+ );
+ tmp=select(VLIST,#_1==pt.name+"3d"); //190506
+ if(length(tmp)>0,
+ pt3=tmp_1_2;
+ pt.xy=Parapt(pt3);
+ ptz.xy=Parasubpt(pt3);
+ ,
+ pt3=Mainsubpt3d(pt.xy,ptz.xy); //181107[2lines]
+ Defvar(pt+"3d",pt3);
+ );
+ );
+ ,
+ Mkpointlist(options); // 16.12.18
+ );
+ forall(alllines(), // no ketjs on
+ #.color=[0.5,0.5,1];
+ );
+ SEG3dlist=Mkseg3d(options);
+ SEG3dlist; // no ketjs off
+);
+////%Ptseg3data end////
+
+////%Putonseg3d start////
+Putonseg3d(name,ptL):=Putonseg3d(name,ptL_1,ptL_2,[]);
+Putonseg3d(name,Arg1,Arg2):=(
+ if(islist(Arg1),
+ Putonseg3d(name,Arg1_1,Arg1_2,Arg2);
+ ,
+ Putonseg3d(name,Arg1,Arg2,[]);
+ );
+);
+Putonseg3d(name,pt1,pt2,options):=(
+//help:Putonseg3d("C",[A,B]);
+//help:Putonseg3d("C",A,B);
+ regional(par,pn1,pn2,tmp,tmp1,tmp2,tmp3);
+ par=0.5;
+ tmp=divoptions(options);
+ if(length(tmp_6)>0,
+ par=tmp_6_1;
+ );
+ if(ispoint(pt1), //181030from
+ Putonseg(name,pt1,pt2,[par]);
+ ,
+ Putonseg(name,Parapt(pt1),Parapt(pt2),[par]);
+ ); //181030from
+ inspect(parse(name),"ptsize",3);
+ inspect(parse(name),"color",2);
+ inspect(parse(name),"textsize",TSIZEZ);
+ Putpoint(name+"z",[parse(name+".x"),0]);
+ inspect(parse(name+"z"),"ptsize",3);
+ inspect(parse(name+"z"),"color",3);
+ inspect(parse(name+"z"),"textsize",TSIZEZ);
+ if(ispoint(pt1),
+ pn1=pt1.name; //190505
+ pn2=pt2.name; //190505
+ tmp1=replace("PCz.xy=PAz.xy+|PC-PA|/|PB-PA|*(PBz.xy-PAz.xy)","PC",name);
+ tmp1=replace(tmp1,"PA",pn1);
+ tmp1=replace(tmp1,"PB",pn2)+";";
+ parse(tmp1);
+ ,
+ pn1=Textformat(Parapt(pt1),5); //181030from
+ pn2=Textformat(Parapt(pt2),5);
+ tmp1=replace("PCz.xy=PAs+Norm(PC-PAm)/Norm(PBm-PAm)*(PBs-PAs)","PC",name);
+ tmp1=replace(tmp1,"PAm",pn1);
+ tmp1=replace(tmp1,"PBm",pn2);
+ pn1=Textformat(Parasubpt(pt1),5); //181030from
+ pn2=Textformat(Parasubpt(pt2),5);
+ tmp1=replace(tmp1,"PAs",pn1);
+ tmp1=replace(tmp1,"PBs",pn2)+";"; //190415
+ parse(tmp1);
+ );
+ tmp1=parse(name+".xy"); //181028[3lines]
+ tmp2=parse(name+"z.xy");
+ tmp=Xyzcoord(tmp1,tmp2);
+ Defvar(name+"3d",tmp);
+);
+////%Putonseg3d end////
+
+////%Putpoint3d start////
+Putpoint3d(ptslist):=Putpoint3d(ptslist,"",0);
+Putpoint3d(Arg1,Arg2):=( // 16.03.02 from
+ if(islist(Arg1),
+ Putpoint3d(Arg1,Arg2,0);
+ ,
+ Putpoint3d(Arg1,Arg2,"fix");
+ );
+);
+Putpoint3d(Arg1,Arg2,Arg3):=(
+//help:Putpoint3d(["A",[2,1,3]]);
+//help:Putpoint3d(["A",[2,1,3]],"fix");
+//help:Putpoint3d("A",[2,1,3]);
+//help:Putpoint3d(["A",[2,1,3]],["fix"]);
+ regional(nn,kk,pt,pt3,ptslist,fixstr,tmp,tmp1,tmp2,tmp3); //16.08.19
+ if(isstring(Arg1),
+ ptslist=[Arg1,Arg2];
+ fixstr=Arg3;
+ ,
+ ptslist=Arg1;
+ fixstr=Arg2;
+ );
+ if(islist(fixstr),fixstr=fixstr_1);// 16.03.02 until
+ nn=length(ptslist)/2;
+ forall(1..nn,kk, // 16.08.19from
+ tmp1=ptslist_(2*kk-1);
+ pt3=ptslist_(2*kk); // 16.08.19until
+ VLIST=select(VLIST,#_1!=tmp1+"3d");
+ tmp2=parse(tmp1);
+ if(ispoint(tmp2), // 16.05.26from
+ if(islist(fixstr),tmp=fixstr_1,tmp=fixstr);
+ tmp=Toupper(tmp);
+ if(tmp!="FIX",
+ tmp=Xyzcoord(tmp2.xy,parse(tmp1+"z.xy")); //181028
+ ,
+ tmp=pt3;
+ );
+ Defvar(tmp1+"3d",tmp);
+ ,
+ Defvar(tmp1+"3d",pt3);
+ ); // 16.05.26until
+ Defvar(tmp1+"fix",0);
+ pt=Parapt(pt3);
+ Putpoint(tmp1,pt,parse(tmp1+".xy"));
+ inspect(parse(tmp1),"ptsize",3);
+ inspect(parse(tmp1),"color",2);
+ inspect(parse(tmp1),"textsize",TSIZE);
+ if(SUBSCR==1,
+ tmp2=tmp1+"z";
+ Putpoint(tmp2,Parasubpt(pt3));
+ inspect(parse(tmp2),"ptsize",3);
+ inspect(parse(tmp2),"color",3);
+ inspect(parse(tmp2),"textsize",TSIZEZ);
+ );
+ );
+ if(islist(fixstr),tmp=fixstr_1,tmp=fixstr);
+ if(tmp=="fix" % tmp=="Fix",
+ Fixpoint3d(ptslist);
+ );
+);
+////%Putpoint3d end////
+
+////%Fixpoint3d start////
+Fixpoint3d(ptlist):=(
+// help:Fixpoint3d(["O",[0,0,0],"X",[1,0,0]]);
+ regional(name,pt3,pt2,tmp,tmp1,tmp2);
+ forall(1..(length(ptlist)/2),
+ name=ptlist_(2*#-1);
+ Defvar(name+"fix",1);
+ pt3=ptlist_(2*#);
+ pt2=Parapt(pt3);
+ tmp1=textformat(pt2_1,5);
+ tmp2=textformat(pt2_2,5);
+ tmp=name+".xy=["+tmp1+","+tmp2+"];";
+ parse(tmp);
+ tmp1=name+".x+NE.x-SW.x";
+ tmp2=textformat(pt3_3,5);
+ tmp=name+"z.xy=["+tmp1+","+tmp2+"];";
+ parse(tmp);
+ );
+);
+////%Fixpoint3d end////
+
+////%Letter3d start////
+Letter3d(dtlist):=Letter3d(dtlist,[]); //181218from
+Letter3d(pt3d,dir,name):=Letter3d([pt3d,dir,name],[]);
+Letter3d(pt3d,dir,name,options):=Letter3d([pt3d,dir,name],options);
+Letter3d(dtlist,options):=(
+//help:Letter3d(point3d,,direction,name);
+//help:Letter3d([point3d,,direction,name],options]);
+ regional(dt,nall,jj);
+ dt=dtlist;
+ if(mod(length(dt),3)!=0,
+ println(" Improper data");
+ ,
+ nall=length(dt)/3;
+ forall(1..nall,
+ jj=#*3-2;
+ tmp=dt_jj;
+ if(ispoint(tmp),tmp=parse(tmp.name+"3d")); //190505
+ dt_jj=Parapt(tmp);
+ );
+ Letter(dt,options);
+ );
+); //181218to
+////%Letter3d end////
+
+////%Expr3d start////
+Expr3d(dtlist):=Expr3d(dtlist,[]); //181218from
+Expr3d(pt3d,dir,name):=Expr3d([pt3d,dir,name],[]); //181218from
+Expr3d(pt3d,dir,name,options):=Expr3d([pt3d,dir,name],options);
+Expr3d(dtlist,options):=(
+//help:Expr3d(point3d,,direction,name);
+//help:Expr3d([point3d,,direction,name],options]);
+ regional(dt,nall,jj);
+ dt=dtlist;
+ if(mod(length(dt),3)!=0,
+ println(" Improper data");
+ ,
+ nall=length(dt)/3;
+ forall(1..nall,
+ jj=#*3-2;
+ tmp=dt_jj;
+ if(ispoint(tmp),tmp=parse(tmp.name+"3d")); //190505
+ dt_jj=Parapt(tmp);
+ );
+ Expr(dt,options);
+ );
+); //181218to
+////%Expr3d end////
+
+////%Perppt start////
+Perppt(name,ptstr,pLstr):=Putperp(name,ptstr,pLstr,"draw");
+Perppt(name,ptstr,pLstr,option):=Putperp(name,ptstr,pLstr,option);
+Putperp(name,ptstr,pLstr):=Putperp(name,ptstr,pLstr,"put");
+Putperp(name,ptstr,pLstr,option):=(
+//help:Perppt("N","O","A-B-C");
+//help:Perppt("N","O","A-B-C","put");
+//help:Perppt("N","O","A-B","none");
+ regional(out,Eps,N3d,sgstr,pP,pA,pB,pC,tmp,tmp1,flgpL);
+ Eps=10^(-4);
+ pP=parse(ptstr+"3d");
+ tmp=indexof(pLstr,"-");
+ pA=parse(substring(pLstr,0,tmp-1)+"3d");
+ tmp1=substring(pLstr,tmp,length(pLstr));
+ tmp=indexof(tmp1,"-");
+ if(tmp>0,
+ pB=parse(substring(tmp1,0,tmp-1)+"3d");
+ pC=parse(substring(tmp1,tmp,length(tmp1))+"3d");
+ flgpL=1;
+ ,
+ pB=parse(tmp1+"3d");
+ flgpL=0;
+ );
+ if(flgpL==1,
+ tmp=Crossprod(pB-pA,pC-pA);
+ if(abs(tmp)<Eps,
+ err("not a plane");
+ ,
+ tmp=tmp/|tmp|;
+ N3d=pP+tmp;
+ Defvar("tmp3d",N3d); // temporary
+ sgstr=ptstr+"-tmp";
+ tmp=IntersectsgpL(name,sgstr,pLstr,["Screen=n"]); //181031
+ VLIST=select(VLIST,#_1!="tmp3d");
+ out=tmp_1;
+ Defvar(name+"3d",tmp_1);
+ );
+ ,
+ if(|pB-pA|<Eps,
+ err("on the line");
+ ,
+ tmp1=(pB-pA)/|pB-pA|;
+ tmp=Dotprod(pP-pA,tmp1);
+ out=pA+tmp*tmp1;
+ Defvar(name+"3d",out);
+ );
+ );
+ if(islist(option),tmp=option_1,tmp=option);
+ tmp=substring(tmp,0,1);
+ if(tmp=="P" % tmp=="p",
+ Putpoint3d([name,out]);
+ Fixpoint3d([name,out]);
+ );
+ if(tmp=="D" % tmp=="d",
+ Drawpoint3d(out);
+ );
+ out;
+);
+////%Perppt end////
+
+////%Perpplane start////
+Perpplane(name,ptstr,nvec):=
+ Perpplane(name,ptstr,nvec,"draw");
+Perpplane(name,ptstr,nstr,option):=(
+//help:Perpplane("A-B","P",[1,3,2]);
+//help:Perpplane("A-B","P",[1,3,2]);
+//help:Perpplane(option=["Put/Draw"]);
+ regional(Eps,nvec,sgstr,pP,v1,v2,v3,
+ th,ph,pA,pB,tmp,tmp1,tmp2);
+ Eps=10^(-4);
+ if(isstring(nstr),nvec=parse(nstr+"3d"),nvec=nstr);
+ if(indexof(ptstr,"3d")==0, //181107from
+ pP=parse(ptstr+"3d");
+ ,
+ pP=parse(ptstr);
+ ); //181107to
+ v3=nvec/|nvec|;
+ th=THETA; ph=PHI;
+ tmp=findangle(v3);
+ THETA=tmp_1; PHI=tmp_2;
+ v1=Cancoordpara([1,0,0]);
+ v2=Cancoordpara([0,1,0]);
+ THETA=th; PHI=ph;
+ tmp=indexof(name,"-");
+ tmp1=substring(name,0,tmp-1);
+ tmp2=substring(name,tmp,length(name));
+ tmp=indexof(pLstr,"-");
+ pA=pP+v1;
+ pB=pP+v2;
+ if(islist(option),tmp=option_1,tmp=option);
+ tmp=Toupper(substring(tmp,0,1)); // 16.06.19
+ if(tmp=="P",
+ Putpoint3d([tmp1,pA,tmp2,pB],["fix"]);
+ ,
+ Defvar(tmp1+"3d",pA); //181107[2lines]
+ Defvar(tmp2+"3d",pB);
+ );
+ if(tmp=="D",
+ Drawpoint3d(pA);
+ Drawpoint3d(pB);
+ );
+ [pA,pB];
+);
+////%Perpplane end////
+
+////%Drawpoint3d start////
+Drawpoint3d(pt3):=Drawpoint3d(pt3,["Color=green"]);
+Drawpoint3d(pt3,options):=(
+//help:Drawpoint3d(pt3d);
+//help:Drawpoint3d(options=["Color=(green)"]);
+ regional(ptL,tmp,tmp1,tmp2);
+ tmp=Divoptions(options);
+ opcindy=tmp_(length(tmp));
+ if(Measuredepth(pt3)==0,ptL=[pt3],ptL=pt3);
+ forall(ptL,
+ tmp="draw("+Textformat(Parapt(#),6)+opcindy+");";
+ parse(tmp);
+ if(SUBSCR==1,
+ tmp="draw("+Textformat(Parasubpt(#),6)+opcindy+");";
+ parse(tmp);
+ );
+ );
+);
+////%Drawpoint3d end////
+
+////%Pointdata3d start////
+Pointdata3d(nm,pt3):=Pointdata3d(nm,pt3,[]);//181017from
+Pointdata3d(nm,pt3,options):=( //181017from
+//help:Pointdata3d("1",pt3dlist,options);
+ regional(pt3L,pt2L,tmp);
+ if(Measuredepth(pt3)==0,pt3L=[pt3],pt3L=pt3);
+ pt2L=apply(pt3L,Parapt(#));
+ Pointdata("2d"+nm,pt2L,append(options,"Disp=n"));
+ tmp="pt3d"+nm+"="+format(pt3L,6)+";"; //190415
+ parse(tmp);
+); //181017to
+////%Pointdata3d end////
+
+////%Putaxes3d start////
+Putaxes3d(size):=(
+//help:Putaxes3d(5);
+//help:Putaxes3d([1,2,3]);
+ regional(sL);
+ if(islist(size),sL=size,sL=[size,size,size]);
+ Putpoint3d(["O",[0,0,0]],"fix"); //17.06.02from
+ Putpoint3d(["X",[sL_1,0,0]],"fix");
+ Putpoint3d(["Y",[0,sL_2,0]],"fix");
+ Putpoint3d(["Z",[0,0,sL_3]],"fix");
+// Fixpoint3d(["O",[0,0,0]]);
+// Fixpoint3d(["X",[sL_1,0,0],"Y",[0,sL_2,0],"Z",[0,0,sL_3]]);//17.06.02funtil
+);
+////%Putaxes3d end////
+
+////%IntersectsgpL start////
+IntersectsgpL(name,sgstr,pLstr):=
+ IntersectsgpL(name,sgstr,pLstr,["ie"]);
+IntersectsgpL(name,sgstr,pLstr,optionsorg):=(
+//help:IntersectsgpL("R","P-Q","A-B-C");
+//help:IntersectsgpL("pR","pP-pQ","A-B-C");
+//help:IntersectsgpL(options=["draw(put)","ie","Screen=n"+pointoptions,"Color="]);
+ regional(options,eqL, strL,ptflg,out,pP,pQ,pA,pB,pC,pH,pK,pR,tseg,tt,ss,Eps,
+ flg,scrflg,nvec,tmp,tmp1,tmp2,tmp3,tmp4);
+ options=optionsorg; //181026from
+ tmp1="";
+ if(isstring(options),
+ tmp1=options;
+ options=[];
+ );
+ options=remove(options,["draw","Draw"]);
+ tmp=Divoptions(options);
+ eqL=tmp_5;
+ strL=tmp_7;
+ if(length(tmp1)>0,
+ strL=append(strL,tmp1);
+ );
+ ptflg=["D","ie"];
+ forall(strL,
+ tmp=Toupper(substring(#,0,1));
+ if(tmp=="P",
+ ptflg_1="P";
+ );
+ if((tmp=="I")%(tmp=="E"),
+ if(length(#)==1,
+ ptflg_2=#+"e";
+ ,
+ ptflg_2=#;
+ );
+ );
+ );
+ options=remove(options,strL);
+ scrflg="Y"; //181031from
+ forall(eqL,
+ tmp=Strsplit(#,"=");
+ tmp1=Toupper(substring(tmp_1,0,1)); //181111
+ if(tmp1=="S",
+ scrflg=Toupper(substring(tmp_2,0,1));
+ options=remove(options,[#]);
+ );
+ ); //181031to
+ tmp=select(options,substring(#,0,1)=="C");
+ if(length(tmp)==0,options=append(options,"Color=green"));//181026to
+ Eps=10^(-4);
+ flg=0;
+ if(!isstring(sgstr), // 15.05.29
+ pP=sgstr_1;
+ pQ=sgstr_2;
+ ,
+ tmp=indexof(sgstr,"-");
+ if(tmp>0, // 15.05.28
+ pP=parse(substring(sgstr,0,tmp-1)+"3d");
+ pQ=parse(substring(sgstr,tmp,length(sgstr))+"3d");
+ ,
+ tmp1=parse(sgstr);
+ pP=tmp1_1;
+ pQ=tmp1_2;
+ );
+ );
+ if(!isstring(pLstr), // 16.02.02
+ pA=pLstr_1;
+ pB=pLstr_2;
+ pC=pLstr_3;
+ ,
+ tmp=indexof(pLstr,"-");
+ pA=parse(substring(pLstr,0,tmp-1)+"3d");
+ tmp1=substring(pLstr,tmp,length(pLstr));
+ tmp=indexof(tmp1,"-");
+ pB=parse(substring(tmp1,0,tmp-1)+"3d");
+ pC=parse(substring(tmp1,tmp,length(tmp1))+"3d");
+ );
+ nvec=Crossprod(pB-pA,pC-pA);
+ if(abs(Dotprod(nvec,pQ-pP))>Eps,
+ pH=(Reflectpoint3d(pP,[pA,pB,pC])+pP)/2; //180811[2lines]
+ pK=(Reflectpoint3d(pQ,[pA,pB,pC])+pQ)/2;
+ tmp1=pP-pH;
+ tmp2=tmp1+pK-pQ;
+ tmp=select(tmp2,abs(#)==max(apply(tmp2,abs(#))));
+ tmp=select(1..3,tmp2_#==tmp_1);
+ tmp=tmp_1;
+ tseg=tmp1_tmp/tmp2_tmp;
+ pR=(1-tseg)*pH+tseg*pK;
+ tmp=Dotprod(pB-pA,pC-pA);
+ tmp1=Dotprod(pB-pA,pB-pA);
+ tmp2=Dotprod(pC-pA,pC-pA);
+ tmp3=Dotprod(pR-pA,pB-pA);
+ tmp4=Dotprod(pR-pA,pC-pA);
+ ss=-(tmp*tmp4-tmp3*tmp2)/(tmp1*tmp2-tmp^2);
+ tt=(tmp1*tmp4-tmp*tmp3)/(tmp1*tmp2-tmp^2);
+ tmp1=(tseg>-Eps)&(tseg<1+Eps); //181027from
+ tmp2=(ss>-Eps)&(ss<1+Eps)&(tt>-Eps)&(tt<1+Eps)&(ss+tt<1+Eps);//181029
+ out=[pR,tmp1,tmp2,tseg,ss,tt]; //181027to
+ tmp=ptflg_2;
+ tmp1=(tmp1)%(substring(tmp,0,1)=="i"); //190114
+ tmp2=(tmp2)%(substring(tmp,1,2)=="e");
+ if(tmp1&tmp2&(scrflg=="Y"), //181031
+ if(ptflg_1=="P", //181025
+ Putpoint3d([name,pR],"fix");
+ ,
+ Drawpoint3d(pR,options);
+ tmp=name; //190401from
+ if(indexof(name,"3d")==0,
+ tmp=name+"3d";
+ );
+ tmp=tmp+"="+Textformat(pR,6)+";"; //190415
+ parse(tmp); //190401to
+ );
+ );
+ ,
+ println(" "+sgstr+" and "+pLstr+" may be parallel");//181025to
+ out=[[],false,false]; //181029
+ );
+ out;
+);
+////%IntersectsgpL end////
+
+////%Bezier3d start////
+Bezier3d(nm,ptctrlist):=Bezier3(nm,ptctrlist);
+Bezier3d(nm,Ag1,Ag2):=Bezier3(nm,Ag1,Ag2);
+Bezier3d(nm,ptlistorg,ctrlistorg,options):=
+ Bezier3(nm,ptlistorg,ctrlistorg,options);
+//help:Bezier3d("1",["A","B","C"],["D","E","F","G"]);
+Bezier3(nm,ptctrlist):=Bezier3(nm,ptctrlist_1,ptctrlist_2,[]);
+Bezier3(nm,Ag1,Ag2):=(
+ if(Measuredepth(Ag1)==0,
+ Bezier3(nm,Ag1,Ag2,[]);
+ ,
+ if(Measuredepth(Ag1)>1,
+ Bezier3(nm,Ag1_1,Ag1_2,Ag2);
+ ,
+ if(isstring(Ag_1_1),
+ Bezier3(nm,Ag1,Ag2,[]);
+ ,
+ Bezier3(nm,Ag1_1,Ag1_2,Ag2);
+ );
+ );
+ );
+);
+Bezier3(nm,ptlistorg,ctrlistorg,options):=( //17.10.08 greatly changed
+ regional(name,name3,name2,tmp,tmp1,tmp2,
+ Ltype,Noflg,opstr,eqL,Num,ii,knt,ctr,out,color);
+ name="bz"+nm;
+ name3="bz3d"+nm;
+ name2="bz2d"+nm;
+ tmp=Divoptions(options);
+ Ltype=tmp_1;
+ Noflg=tmp_2;
+ eqL=tmp_5;
+ color=tmp_(length(tmp)-2);
+ opcindy=tmp_(length(tmp));
+ Num=20;
+ forall(eqL,
+ tmp=indexof(#,"=");
+ tmp1=Toupper(substring(#,0,1));
+ tmp2=substring(#,tmp,length(#));
+ if(tmp1=="N",
+ Num=parse(tmp2);
+ );
+ );
+ ptlist=ptlistorg;
+ if(isstring(ptlistorg_1),ptlist=apply(ptlistorg,parse(#+"3d")));
+ ctrlist=ctrlistorg;
+ if(isstring(ctrlistorg_1),ctrlist=apply(ctrlistorg,parse(#+"3d")));
+ out=[];
+ forall(1..(length(ptlist)-1),ii,
+ knt=[ptlist_ii,ptlist_(ii+1)];
+ ctr=[ctrlist_(2*ii-1),ctrlist_(2*ii)];
+ tmp="Bezierpt(T,ptlist,ctrlist)";//17.01.04
+ tmp=Assign(tmp,"ptlist",knt);
+ tmp=Assign(tmp,"ctrlist",ctr);
+ Spacecurve(name+text(ii),tmp,"T=[0,1]",append(eqL,"nodisp"));
+ GLIST=GLIST_(1..(length(GLIST)-2));
+ out=append(out,name3+text(ii));
+ );
+ tmp1=[];
+ forall(1..length(out),
+ tmp=parse(out_#);
+ if(#==1,tmp1=tmp,tmp1=concat(tmp1,tmp_(2..length(tmp))));
+ );
+ if(Noflg<3,
+ println("generate Beziercurve "+name3);
+ tmp=name3+"="+tmp1+";"; //190415
+ parse(tmp);
+ tmp1=Projpara(name3,["nodata"]);
+ tmp=name2+"="+textformat(tmp1,5)+";"; //190415
+ parse(tmp);
+ ptlist=apply(ptlistorg,#+"3d");
+ ptlist=RSform(text(ptlist),1);
+ ctrlist=[];
+ forall(1..(length(ctrlistorg)/2),
+ tmp=[ctrlistorg_(2*#-1),ctrlistorg_(2*#)];
+ tmp=apply(tmp,#+"3d");
+ ctrlist=append(ctrlist,tmp);
+ );
+ ctrlist=RSform(text(ctrlist),0);
+ tmp=name3+"=Bezier("+ptlist+","+ctrlist+","+Dq+"Num="+text(Num)+Dq+")";
+ GLIST=append(GLIST,tmp);
+ tmp=name2+"=Projpara("+name3+")";
+ GLIST=append(GLIST,tmp);
+ );
+ if(Noflg<2,
+ if(isstring(Ltype),
+ if(!contains([[0,0,0],[0,0,0,1]],color),Com2nd("Setcolor("+color+")"));
+ Ltype=Getlinestyle(text(Noflg)+Ltype,name2);
+ if(!contains([[0,0,0],[0,0,0,1]],color),Com2nd("Setcolor("+text(KCOLOR)+")"));
+ ,
+ if(Noflg==1,Ltype=0);
+ );
+ GCLIST=append(GCLIST,[name2,Ltype,opcindy]);
+ if(SUBSCR==1, // 15.02.11
+ Subgraph(name3,opcindy);
+ );
+ );
+ out;
+);
+////%Bezier3d end////
+
+////%Putbezier3data start////
+Putbezier3data(name,pt3Lorg):=Putbezier3data(name,pt3Lorg,[]);
+Putbezier3data(name,pt3Lorg,options):=( // 17.10.08 greatly changed
+ regional(pt3L,psize,Deg,nn,numstr,
+ tmp,tmp1,tmp2,tmp3,pts,ctrpts);
+ tmp=Divoptions(options);
+ Deg=3;
+ tmp1=tmp_5;
+ forall(tmp1,
+ if(substring(#,0,1)=="D",
+ tmp=indexof(#,"=");
+ Deg=parse(substring(#,tmp,length(#)));
+ );
+ );
+ pt3L=pt3Lorg;
+ if(isstring(pt3L_1),pt3L=apply(pt3L,parse(#+"3d")));
+ ctrpts=[];
+ forall(2..length(pt3L),nn, // 16.08.19from
+ numstr=text(nn-1); // 16.08.19
+ if(Deg==3,
+ tmp1=name+numstr+"p";
+ tmp2=(2*pt3L_(nn-1)+pt3L_(nn))/3;
+ VLIST=select(VLIST,#_1!=tmp1+"3d"); // 16.08.19from
+ Putpoint3d([tmp1,tmp2]);
+ ctrpts=append(ctrpts,tmp1);
+ tmp1=name+numstr+"q";
+ tmp3=(pt3L_(nn-1)+2*pt3L_nn)/3;
+ VLIST=select(VLIST,#_1!=tmp1+"3d");
+ Putpoint3d([tmp1,tmp3]);
+ ctrpts=append(ctrpts,tmp1);
+ ,
+ tmp1=name+numstr+"p";
+ tmp2=(pt3L_(nn-1)+pt3L_nn)/2;
+ VLIST=select(VLIST,#_1!=tmp1+"3d"); // 16.08.19until
+ Putpoint3d([tmp1,tmp2]);
+ ctrpts=append(ctrpts,tmp1);
+ );
+ );
+ ctrpts;
+);
+////%Putbezier3data end////
+
+////%Mkbezierptcrv3d start////
+Mkbezierptcrv3d(ptdata):=Mkbezierptcrv3(ptdata);
+Mkbezierptcrv3d(ptdata,options):=Mkbezierptcrv3(ptdata,options);
+//help:Mkbezierptcrv3d(["A","B","C","D"]);
+Mkbezierptcrv3(ptdata):=Mkbezierptcrv3(ptdata,[]);
+Mkbezierptcrv3(ptdata,options):=( //17.10.08 greatly changed
+ regional(Eps,name,bz,pt,p1,p2,p13d,p23d,pt3,
+ Out,tt,pos,tmp,tmp1,tmp2);
+ Eps=10^(-4);
+ pos=[NE.x+1,NE.y];
+ Out=[];
+ tmp=re(floor((BezierNumber3-1)/26)); //190505 // 15.02.23 from
+ if(tmp==0,tmp="",tmp=text(tmp));
+ tmp2=mod(BezierNumber3,26);
+ if(tmp2==0,tmp2=26);
+ name=unicode(text(96+tmp2),base->10)+tmp;
+ tmp2=Putbezier3data(name,ptdata,options);
+ Bezier3(name,ptdata,tmp2,options);
+ Out=append(Out,tmp2);
+ BezierNumber3=BezierNumber3+1;
+ Out;
+);
+////%Mkbezierptcrv3d end////
+
+//////////old version ///////////////////////////////
+
+Readobj(filename):=Readobj(filename,[]);
+Readobj(filename,options):=(
+//help:Readobj("file.obj",["size=-3"]);
+ regional(eqL,size,vL,fnL,tmp,tmp1,tmp2);
+ size=1;
+ tmp=Divoptions(options);
+ eqL=tmp_5;
+ forall(eqL,
+ if(Toupper(substring(#,0,1))=="S",
+ tmp=indexof(#,"=");
+ size=parse(substring(#,tmp,length(#)));
+ );
+ );
+ tmp=load(filename);
+ tmp=tokenize(tmp,"v");
+ tmp1=tmp_(2..(length(tmp)-1));
+ tmp2=tmp_(length(tmp));
+ tmp2=tokenize(tmp2,"f");
+ tmp1=append(tmp1,tmp2_1);
+ tmp1=apply(tmp1,Removespace(#));
+ tmp1=apply(tmp1,replace(#," "," "));
+ tmp1=apply(tmp1,"["+replace(#," ",",")+"]");
+ vL=apply(tmp1,size*parse(#));
+ tmp2=tmp2_(2..(length(tmp2)));
+ tmp2=apply(tmp2,Removespace(#));
+ tmp2=apply(tmp2,replace(#," "," "));
+ tmp2=apply(tmp2,"["+replace(#," ",",")+"]");
+ fnL=apply(tmp2,parse(#));
+ [vL,fnL];
+);
+
+//////////new version ///////////////////////////////
+////%Readobj start////
+Readobj(filename,options):=(
+//help:Readobj("file.obj",["size=-3"]);
+ regional(eqL,size,vL,fnL,dtL,numer,flg,flg2,
+ tmp,tmp1,tmp2,tmp3,tmp4,tmp5);
+ size=1;
+ tmp=Divoptions(options);
+ eqL=tmp_5;
+ forall(eqL,
+ if(Toupper(substring(#,0,1))=="S",
+ tmp=indexof(#,"=");
+ size=parse(substring(#,tmp,length(#)));
+ );
+ );
+ numer="-0123456789";
+ tmp=load(filename);
+ dtL=tokenize(tmp,"v ");
+ vL=[];
+ fnL=[];
+ flg=0;
+ flg2=0;
+ forall(dtL,dt,
+ tmp1=Removespace(dt);
+ if(indexof(numer,substring(tmp1,0,1))>0,
+ tmp2="";
+ tmp=indexof(tmp1,"f");
+ if(tmp>0,
+ tmp2=substring(tmp1,tmp-1,length(tmp1));
+ tmp1=substring(tmp1,0,tmp-1);
+ if(substring(tmp1,length(tmp1)-1,length(tmp1))=="#",
+ tmp2="#"+tmp2;
+ tmp1=substring(tmp1,0,length(tmp1)-1);
+ );
+// tmp=indexof(tmp2,"#");
+// if(tmp>0,
+// tmp2=substring(tmp2,0,tmp-1);
+// );
+ );
+ if(flg==1,
+ tmp1="";
+ flg=0;
+ );
+ if(length(tmp1)>0,
+ tmp=indexof(tmp1,"#");
+ if(tmp>0,
+ tmp1=substring(tmp1,0,tmp-1);
+ flg=1;
+ );
+ tmp=indexof(tmp1,"vt");
+ if(tmp>0,
+ tmp1=substring(tmp1,0,tmp-1);
+ );
+ tmp1=replace(tmp1," ",",");
+ tmp1=replace(tmp1," ",",");
+ tmp1="["+tmp1+"]";
+ tmp1=size*parse(tmp1);
+ vL=append(vL,tmp1);
+ );
+ if(length(tmp2)>0,
+ tmp2=tokenize(tmp2,"f");
+ if(length(tmp2_1)==0,
+ tmp2=tmp2_(2..length(tmp2));
+ // ,
+ // if(tmp2_1=="#",
+// tmp2=tmp2_(2..length(tmp2));
+// tmp2_1="#"+tmp2_1;
+// );
+ );
+ forall(1..length(tmp2),tmp3,
+ tmp=tmp2_tmp3;
+ if(substring(tmp,length(tmp)-1,length(tmp))=="#",
+ tmp2_(tmp3+1)="#"+Removespace(tmp2_(tmp3+1));
+ tmp2_tmp3=substring(tmp,0,length(tmp)-1);
+ );
+ tmp5="";
+ if(length(tmp2_tmp3)>0,
+ tmp4=tokenize(tmp2_tmp3," ");
+ forall(tmp4,
+ if(length(text(#))>0,
+ if(indexof(text(#),"/")==0,
+ tmp=text(#);
+ ,
+ tmp=tokenize(text(#),"/");
+ tmp=tmp_1;
+ );
+ if(length(tmp)>0,
+ tmp5=tmp5+tmp+",";
+ );
+ );
+ );
+ tmp5=substring(tmp5,0,length(tmp5)-1);
+ if(length(tmp5)>0,
+ if(substring(tmp5,0,1)!="#",
+ tmp5="["+tmp5+"]";
+ fnL=append(fnL,parse(tmp5));
+ );
+ );
+ );
+ );
+ );
+ );
+ );
+ [vL,fnL];
+);
+////%Readobj end////
+
+////%Concatobj start////
+Concatobj(objL):=Concatobj(objL,[]);
+Concatobj(objL,options):=(
+//help:Concatobj([polyhed,triangle]);
+//help:Concatobj([polyhed,triangle],["Rmf=no"]);
+//help:Concatobj([[A,B,C],[A,C,D]]);
+ regional(obj,vL,fL,vadd,vtx,faces,fnew,face,jj,kk,vctr,eps,
+ tmp,tmp1,tmp2,tmp3,eqL,rmf);
+ tmp=divoptions(options);
+ eqL=tmp_5;
+ rmf="y"; // 16.08.19
+ forall(eqL,
+ tmp=indexof(#,"=");
+ tmp1=Toupper(substring(#,0,1));
+ tmp2=Toupper(substring(#,tmp,tmp+1));
+ if(tmp1=="R",
+ if(tmp2=="Y",rmf="y"); // 16.08.14
+ );
+ );
+ eps=10^(-4);
+ vL=[];
+ fL=[];
+ vctr=0;
+ forall(objL,obj,
+ if(isstring(obj),
+ tmp1=parse(obj);
+ ,
+ tmp1=obj;
+ );
+ if(length(tmp1)>2, // 16.02.28
+ tmp=1..length(tmp1);
+ tmp1=[tmp1,[tmp]];
+ );
+ vtx=tmp1_1; // 16.02.11 from
+ faces=tmp1_2;
+ fnew=faces;
+ vctr=0;
+ vadd=[];
+ forall(1..length(vtx),jj,
+ tmp1=vtx_jj;
+ tmp=select(1..length(vL),dist3d(vL_#,tmp1)<eps);
+ if(length(tmp)==0,
+ vadd=append(vadd,tmp1);
+ vctr=vctr+1;
+ tmp2=length(vL)+vctr;
+ ,
+ tmp2=tmp_1;
+ );
+ forall(1..length(faces),kk,
+ face=faces_kk;
+ tmp=select(1..length(face),face_#==jj);
+ if(length(tmp)>0,
+ tmp1=tmp_1;
+ fnew_kk_tmp1=tmp2;
+ );
+ );
+ );
+ vL=concat(vL,vadd);
+ fL=concat(fL,fnew); // 16.02.11 until
+ );
+ tmp2=apply(1..length(fL),1);
+ if(rmf=="y",
+ forall(1..length(fL),jj,
+ tmp=fL_jj;
+ tmp1=select((jj+1)..length(fL),fL_#==tmp);
+ forall(tmp1,tmp2_#=0);
+ );
+ tmp=select(1..length(tmp2),tmp2_#==1);
+ fL=fL_tmp;
+ );
+ [vL,fL];
+);
+////%Concatobj end////
+
+if(1==0,
+
+Mkobjfile(fname,objL):=Mkobjfile(Dirwork,fname,objL);
+Mkobjfile(path,fnameorg,objL):=(
+//help:Mkobj(filename,objlist);
+ regional(fname,obj,vtx,face,tmp,tmp1,tmp2);
+ fname=fnameorg;
+ if(indexof(fname,".")==0,fname=fname+".obj");
+ vtx=objL_1;
+ face=objL_2;
+ setdirectory(path);
+ SCEOUTPUT = openfile(fname);
+ forall(vtx,tmp1,
+ tmp2=tmp1;
+ if(ispoint(tmp1),
+ tmp2=parse(tmp1.name+"3d"); //190505
+ );
+ tmp="v "+format(tmp2_1,5)+" "+format(tmp2_2,5)+" "+format(tmp2_3,5);
+ println(SCEOUTPUT,tmp);
+ );
+ forall(face,tmp1,
+ tmp="f";
+ forall(tmp1,
+ tmp=tmp+" "+text(#);
+ );
+ println(SCEOUTPUT,tmp);
+ );
+ closefile(SCEOUTPUT);
+ setdirectory(Dirwork);
+);
+
+); //end of skip
+
+////%VertexEdgeFace start//// //190502
+VertexEdgeFace(nm,vfnL):=Vertexedgeface(nm,vfnL,[]);
+VertexEdgeFace(nm,vfnLorg,optionorg):=Vertexedgeface(nm,vfnLorg,optionorg);
+////%VertexEdgeFace start////
+
+////%Vertexedgeface start////
+Vertexedgeface(nm,vfnL):=Vertexedgeface(nm,vfnL,[]); // 16.02.10
+Vertexedgeface(nm,vfnLorg,optionorg):=(
+//help:Vertexedgeface("1",[vL,fnL]);
+//help:Vertexedgeface("1",["A","B","C"]);
+//help:Vertexedgeface(options=["Vtx=n(y)" ',"Pt=fix") ,"Edg=n(y)","Label=8(/0)"]);
+ regional(name3,namev,namee,namef,vfnL,options,Noflg,eqL,strL, Lsize,msgflg,
+ Eps,vL,eL,enL,face,edge,vtx,vname,fixflg,vtxflg, edgflg,dispflg,tmp,tmp1,tmp2);
+ Eps=10^(-5);
+ name3="phvef"+nm;
+ namev="phv3d"+nm;
+ namee="phe3d"+nm;
+ namef="phf3d"+nm;
+ options=optionorg;
+ vfnL=vfnLorg; // 16.06.19from
+ if(length(vfnL)>2,
+ vfnL=[vfnL,[1..length(vfnL)]];
+ );
+ if(length(vfnL)==1,
+ vfnL=[vfnL_1,[1..length(vfnL_1)]];
+ ); // 16.06.19until
+ tmp=Divoptions(options);
+ Noflg=tmp_2;
+ eqL=tmp_5;
+ strL=tmp_7;
+ fixflg=1;
+ vtxflg="N"; //180905
+ edgflg="N";
+ dispflg=1; //181106
+ Lsize="8"; //190331
+ msgflg="Y"; //190506
+ forall(eqL,
+ tmp=Strsplit(#,"=");
+ tmp1=Toupper(substring(tmp_1,0,1));
+ tmp2=Toupper(substring(tmp_2,0,1));
+ if(tmp1=="P",
+ if(tmp2=="F", fixflg=0);
+ options=remove(options,[#]);
+ );
+ if(tmp1=="V", //180905from
+ vtxflg=tmp2;
+ options=remove(options,[#]);
+ ); //180905to
+ if(tmp1=="E",
+ edgflg=tmp2;
+ options=remove(options,[#]);
+ );
+ if(tmp1=="L", //190331from
+ Lsize=tmp_2;
+ if(Lsize=="0",dispflg=0); //190502
+ options=remove(options,[#]);
+ ); //190331to
+ if(tmp1=="M", //190506from
+ msgflg=Toupper(substring(tmp_2,0,1));
+ options=remove(options,[#]);
+ ); //190506to
+ );
+ forall(strL,
+ if(Toupper(#)=="FREE",
+ fixflg=0;
+ options=remove(options,[#]);
+ );
+ );
+ tmp=select(allpoints(),indexof(#.name,"z")==0); //190506from
+ tmp1=remove(tmp,[SW,NE,TH,FI]);
+ vL=[];
+ forall(1..length(vfnL_1),
+ vtx=vfnL_1_#; // 16.02.10 from
+ if(isstring(vtx),vtx=parse(vtx)); // 16.06.19
+ if(ispoint(vtx),
+ tmp=parse(vtx.name+"3d"); //190506
+ vname=vtx.name;
+ ,
+ tmp=select(tmp1,|#.xy-Parapt(vtx)|<Eps);
+ if(length(tmp)>0,
+ tmp=tmp_1;
+ vname=tmp.name;
+ ,
+ vname="V"+nm+text(#); //181212
+ ); //190506to
+ if(vtxflg=="Y",
+ if(fixflg==1,
+ Putpoint3d([vname,vtx],"fix");
+ ,
+ Putpoint3d([vname,vtx]);
+ );
+ ,
+ tmp=vname+"3d="+format(vtx,6)+";"; //190415
+ parse(tmp);
+ Defvar(vname+"3d",parse(vname+"3d"));
+ tmp=vname+"2d=Parapt("+vname+"3d);"; //190415
+ parse(tmp);
+ Defvar(vname+"2d",parse(vname+"2d"));
+ if(dispflg==1, //181106
+ tmp="drawtext(parse(vname+"+Dqq("2d")+"),vname,size->"; //190331
+ parse(tmp+Lsize+");"); //190331
+ draw(parse(vname+"2d"),pointsize->3,color->[0,1,0]); //190128
+ );
+ ); //180905to
+ );
+ vL=append(vL,vname); // 16.02.10 until
+ );
+ eL=[];
+ forall(vfnL_2,face,
+ forall(1..length(face),
+ tmp1=face_#;
+ if(#<length(face),
+ tmp2=face_(#+1);
+ ,
+ tmp2=face_1;
+ );
+ if(tmp2<tmp1,
+ tmp=tmp2; tmp2=tmp1; tmp1=tmp;
+ );
+ tmp1=vL_tmp1+"3d";
+ tmp2=vL_tmp2+"3d";
+ tmp=select(eL,#==[tmp1,tmp2] % #==[tmp2,tmp1]);
+ if(length(tmp)==0,
+ eL=append(eL,[tmp1,tmp2]);
+ );
+ );
+ );
+ if(Noflg<3,
+ enL=[];
+ forall(eL,edge,
+ if(edgflg=="N",
+ if(Noflg<2,
+ tmp1=edge_1;//parse(edge_1);
+ tmp2=edge_2;//parse(edge_2);
+ tmp="sl3d"+edge_1+edge_2;
+ if(islist(parse(tmp)),
+ Changestyle3d([tmp],["nodisp"]);
+ );
+ tmp="sl3d"+edge_2+edge_1;
+ if(islist(parse(tmp)),
+ Changestyle3d([tmp],["nodisp"]);
+ );
+ tmp=replace(edge_1+edge_2,"3d","");
+ options=append(options,"Msg=no");
+ Spaceline("-"+tmp,[tmp1,tmp2],options); //16.02.28
+ );
+ enL=append(enL,tmp+"3d"); //16.02.29
+ ,
+ tmp1=replace(edge_1,"3d","");
+ tmp2=replace(edge_2,"3d","");
+ tmp=tmp1+tmp2;
+ tmp=replace(tmp,"V","v");
+ create([tmp],"Segment",[parse(tmp1),parse(tmp2)]);
+ enL=append(enL,tmp+"3d");//16.02.29
+ );
+ );
+ if(Noflg<2,
+ if(msgflg=="Y",
+ println("generate "+namev+","+namee+","+namef);
+ );
+ );
+ tmp1="";
+ forall(enL,
+ tmp1=tmp1+Dq+#+Dq+",";
+ );
+ tmp1=substring(tmp1,0,length(tmp1)-1);
+ tmp=namee+"=["+tmp1+"];"; //190415
+ parse(tmp);
+ tmp=namee+"=list("+tmp1+")";
+ tmp=replace(tmp,Dq,"");
+ GLIST=append(GLIST,tmp);
+ tmp1=apply(vL,Dq+#+"3d"+Dq);
+ tmp1=text(tmp1);
+ tmp1=substring(tmp1,1,length(tmp1)-1);
+ tmp=namev+"=["+tmp1+"];"; //190415
+ parse(tmp);
+ tmp1=replace(tmp1,Dq,"");
+ tmp=namev+"=list("+tmp1+")";
+ GLIST=append(GLIST,tmp);
+ tmp1=Textformat(vfnL_2,6);
+ tmp1=substring(tmp1,1,length(tmp1)-1);
+ tmp=namef+"=["+tmp1+"];";
+ parse(tmp);
+ tmp=namef+"=list("+tmp1+")";
+ GLIST=append(GLIST,tmp);
+ );
+ [namev,namee,namef];
+);
+////%Vertexedgeface end////
+
+////%Phparadata start////
+Phparadata(nm,nmvf):=(
+ regional(tmp1,tmp2);
+ tmp1=parse("phv3d"+nmvf);
+ tmp2=parse("phf3d"+nmvf);
+ Phparadata(nm,nmvf,[tmp1,tmp2]);
+);
+Phparadata(nm,nmvf,Arg1):=(
+ regional(vfL,options,tmp1,tmp2);
+ if(islist(Arg1) & !islist(Arg1_1),
+ tmp1=parse("phv3d"+nmvf);
+ tmp2=parse("phf3d"+nmvf);
+ vfL=[tmp1,tmp2];
+ options=Arg1;
+ ,
+ vfL=Arg1;
+ options=[];
+ );
+ Phparadata(nm,nmvf,vfL,options);
+);
+Phparadata(nm,nmvf,vfL,options):=(
+//help:Phparadata("1","1",["do"]);
+ regional(name2,name3,nameh2,nameh3,Ltype,Noflg,eqL,Hidden,
+ opstr,opcindy,Outflg,Inflg,pdata1,tmp,tmp1,tmp2,color);
+ name2="php2d"+nm;
+ name3="php3d"+nm;
+ nameh2="phh2d"+nm;
+ nameh3="phh3d"+nm;
+ tmp=Divoptions(options);
+ Ltype=tmp_1;
+ Noflg=tmp_2;
+ Inflg=tmp_3;
+ Outflg=tmp_4;
+ if(Inflg==0 & Outflg==0, Inflg=1;Outflg=1); // 15.05.15
+ eqL=tmp_5;
+ color=tmp_(length(tmp)-2);
+ opstr=tmp_(length(tmp)-1);
+ opcindy=tmp_(length(tmp));
+ Hidden="";
+ forall(eqL,
+ tmp=indexof(#,"=");
+ tmp1=Toupper(substring(#,0,1));
+ tmp2=substring(#,tmp,length(#));
+ if(tmp1=="H",
+ Hidden=tmp2;
+ );
+ );
+ if(Noflg<3,
+ if(Outflg>=1,
+ println("Output Phparadata "+name3);
+ if(isstring(vfL_1), // 2015.05.27 from
+ tmp1=vfL_1;
+ ,
+ tmp1="list(";
+ forall(vfL_1,
+ tmp1=tmp1+#+",";
+ );
+ tmp1=substring(tmp1,0,length(tmp1)-1)+")";
+ );
+ if(isstring(vfL_2),
+ tmp2=vfL_2;
+ ,
+ tmp2="list(";
+ forall(vfL_2,
+ tmp2=tmp2+text(#)+",";
+ );
+ tmp2=substring(tmp2,0,length(tmp2)-1)+")";
+ ); // 2015.05.27 until
+ tmp=name3+"=Phparadata("+tmp1+","+tmp2+opstr+")";
+ GLIST=append(GLIST,tmp);
+ tmp=name2+"=Projpara("+name3+")";
+ GLIST=append(GLIST,tmp);
+ tmp=nameh3+"=PhHiddenData()";
+ GLIST=append(GLIST,tmp);
+ tmp=nameh2+"=Projpara("+nameh3+")";
+ GLIST=append(GLIST,tmp);
+ );
+ );
+ if(Noflg<2,
+ if(isstring(Ltype),
+ if(!contains([[0,0,0],[0,0,0,1]],color),Com2nd("Setcolor("+color+")"));
+ Ltype=Getlinestyle(text(Noflg)+Ltype,name2);
+ if(!contains([[0,0,0],[0,0,0,1]],color),Com2nd("Setcolor("+text(KCOLOR)+")"));
+ ,
+ if(Noflg==1,Ltype=0);
+ );
+ if(Inflg==1,
+// tmp=apply(pltdata1,replace(#,"3d","2d")); // 15.05.18 from
+ Changestyle3d("phe3d"+nmvf,["nodisp"]);
+ GCLIST=append(GCLIST,[name2,Ltype,opcindy]);
+ );
+ );
+ if(Hidden!="",
+ Drawlinetype(nameh2,Hidden);
+ if(Inflg==1,
+ tmp1=Toupper(substring(Hidden,0,2));
+ if(tmp1=="DR",Ltype=0);
+ if(tmp1=="DA",Ltype=1);
+ if(tmp1=="DO",Ltype=3);
+ if(tmp1=="ID",Ltype=1);
+ GCLIST=append(GCLIST,[nameh2,Ltype,opcindy]);
+ );
+ );
+);
+////%Phparadata end////
+
+////%Nohiddenseg start////
+Nohiddenseg(seg,rng,triang,Eps):=(
+// help:Nohiddenseg("1",seg1,[0,1],["v1","v2","v3"]);
+ regional(pA3,pB3,pC3,pA,pB,pC,sg1,sg2,ss1,ss2,parL,flgL,flg1,flg2,
+ veB,veC,sgnoh,sghid,added,tmp,tmp1,tmp2,tmp3,tmp4,tmp5);
+// Eps=10^(-2);//180815
+ sgnoh=[0,1];
+ pA3=triang_1; //180815from
+ if(isstring(pA3),
+ if(indexof(pA3,"3d")==0,pA3=pA3+"3d");
+ pA3=parse(pA3);
+ );
+ pB3=triang_2;
+ if(isstring(pB3),
+ if(indexof(pB3,"3d")==0,pB3=pB3+"3d");
+ pB3=parse(pB3);
+ );
+ pC3=triang_3;
+ if(isstring(pC3),
+ if(indexof(pC3,"3d")==0,pC3=pC3+"3d");
+ pC3=parse(pC3);
+ ); //180815to
+ pA=Parapt(pA3);
+ pB=Parapt(pB3);
+ pC=Parapt(pC3);
+ sg1=seg_1+rng_1*(seg_2-seg_1);
+ sg2=seg_1+rng_2*(seg_2-seg_1);
+ ss1=Parapt(sg1);
+ ss2=Parapt(sg2);
+ if(|ss2-ss1|>Eps & abs(Crossprod(pB-pA,pC-pA))>Eps,
+ tmp=Intersectcrvspp([ss1,ss2],[pA,pB,pC,pA]);
+ parL=apply(tmp,#_2-1);
+ parL=sort(parL);
+ if(length(parL)==0,
+ parL=[0,1];
+ ,
+ if(parL_1>Eps,parL=prepend(0,parL));
+ if(parL_(length(parL))<1-Eps,parL=append(parL,1));
+ );
+ tmp1=Crossprod(pB3-pA3,pC3-pA3);
+ if(abs(Dotprod(tmp1,sg2-sg1))>Eps,
+ tmp=IntersectsgpL("",[sg1,sg2],[pA3,pB3,pC3],["Screen=n"]);//181031from
+ if(tmp_2&tmp_3,
+ tmp1=select(parL,abs(tmp_4-#)<Eps);
+ if(length(tmp1)==0,
+ parL=sort(append(parL,tmp_4));
+ );
+ );//181031to
+ );
+ flgL=[];
+ forall(parL,
+ tmp1=sg1+#*(sg2-sg1);
+ tmp=Projcoordpara(tmp1);
+ tmp_3=tmp_3+1;
+ tmp2=Cancoordpara(tmp);
+ tmp=IntersectsgpL("",[tmp1,tmp2],[pA3,pB3,pC3],["Screen=n"]);//181031
+ tmp1=Projcoordpara(tmp1);
+ tmp2=Projcoordpara(tmp_1);
+ flg1=0;
+ if(tmp1_3<tmp2_3-Eps,flg1=-1);
+ if(tmp1_3>tmp2_3+Eps,flg1=1);
+ flgL=append(flgL,flg1);
+ );
+ sgnoh=[];
+ forall(2..length(flgL),
+ added=[];
+ flg1=flgL_(#-1);
+ flg2=flgL_#;
+ if(max([flg1,flg2])==1 % flg1+flg2==0,
+ added=[parL_(#-1),parL_#];
+ ,
+ sghid=[parL_(#-1),parL_#];
+ tmp1=ss1+sghid_1*(ss2-ss1);
+ tmp2=ss1+sghid_2*(ss2-ss1);
+ tmp=Intersectcrvspp([tmp1,tmp2],[pA,pB,pC,pA]);
+ if(length(tmp)<2,
+ veB=pB-pA;
+ veC=pC-pA;
+ tmp3=tmp1-pA;
+ tmp4=tmp2-pA;
+ tmp5=Crossprod(veB,veC);
+ tmp1=(tmp3_1*veC_2-tmp3_2*veC_1)/tmp5;
+ tmp2=(-tmp3_1*veB_2+tmp3_2*veB_1)/tmp5;
+ if(tmp1>-Eps & tmp2>-Eps & tmp1+tmp2<1+Eps,flg1=1,flg1=0);
+ tmp1=(tmp4_1*veC_2-tmp4_2*veC_1)/tmp5;
+ tmp2=(-tmp4_1*veB_2+tmp4_2*veB_1)/tmp5;
+ if(tmp1>-Eps & tmp2>-Eps & tmp1+tmp2<1+Eps,flg2=1,flg2=0);
+ if(flg1==1 & flg2==0,
+ if(length(tmp)>0,
+ tmp1=tmp_1_2-1;
+ tmp1=sghid_1+(sghid_2-sghid_1)*tmp1;
+ ,
+ tmp1=sghid_1;
+ );
+ added=[tmp1,sghid_2];
+// added=[tmp1+Eps,sghid_2]; // <--- USUI 2016.02.27
+ );
+ if(flg1==0 & flg2==1,
+ if(length(tmp)>0,
+ tmp1=tmp_1_2-1;
+ tmp1=sghid_1+(sghid_2-sghid_1)*tmp1;
+ ,
+ tmp1=sghid_2;
+ );
+ added=[sghid_1,tmp1];
+ );
+ if(flg1+flg2==0,
+ added=sghid;
+ );
+ );
+ if(length(tmp)==2,
+ if(min([flg1,flg2])>=0,added=sghid,added=[]);
+ );
+ );
+ if(length(added)>0,
+ if(length(sgnoh)==0,
+ sgnoh=added;
+ ,
+ if(sgnoh_(length(sgnoh))<added_1-Eps,
+ sgnoh=concat(sgnoh,added);
+ ,
+ sgnoh=sgnoh_(1..(length(sgnoh)-1));
+ sgnoh=concat(sgnoh,added_(2..length(added)));
+ );
+ );
+ );
+ );
+ );
+ sgnoh=apply(sgnoh,rng_1+#*(rng_2-rng_1));
+ sgnoh;
+);
+////%Nohiddenseg end////
+
+////%Nohiddensegs start////
+Nohiddensegs(seg,range,face,Eps):=( //190331
+ regional(rng,vtx,out,ra,rb,tmp,tmp1,tmp2);
+ rng=range;
+ out=rng;
+ forall(2..(length(face)-1),vtx,
+ tmp1=[face_1,face_vtx,face_(vtx+1)];
+ forall(1..(length(rng)/2),
+ tmp=[rng_(2*#-1),rng_(2*#)];
+ out=remove(out,tmp);
+ tmp2=Nohiddenseg(seg,tmp,tmp1,Eps);
+ if(length(tmp2)>0,
+ out=remove(out,tmp);
+ out=concat(out,tmp2);
+ );
+ );
+ tmp=sort(out);
+ out=[];
+ forall(1..(length(tmp)/2),
+ ra=tmp_(2*#-1);
+ rb=tmp_(2*#);
+ if(ra<rb-Eps,
+ if(length(out)==0,
+ out=[ra,rb];
+ ,
+ if(out_(length(out))<ra-Eps,
+ out=concat(out,[ra,rb]);
+ ,
+ out_(length(out))=rb;
+ );
+ );
+ );
+ );
+ rng=out;
+ );
+ rng;
+);
+////%Nohiddensegs end////
+
+////%Nohiddenbyfaces start////
+Nohiddenbyfaces(nm,faceL):=
+ Nohiddenbyfaces(nm,Datalist3d(),faceL,[],["do"]);
+Nohiddenbyfaces(nm,Arg1,Arg2):=( //190331
+ regional(tmp1,tmp2,tmp3,segL,faceL,options);
+ tmp1=select(Arg2,indexof(#,"=")>0); //190401from
+ tmp2=select(Arg2,indexof(#,",")>0);
+ tmp3=select(Arg2,length(#)<=2);
+ if(length(tmp1)+length(tmp2)+length(tmp3)==0, //190401to
+ segL=Arg1;
+ faceL=Arg2;
+ options=[];
+ ,
+ segL=Datalist3d();
+ faceL=Arg1;
+ options=Arg2;
+ );
+ Nohiddenbyfaces(nm,segL,faceL,options,["do"]);
+);
+//Nohiddenbyfaces(nm,segL,faceL,options):=( //190331
+Nohiddenbyfaces(nm,Arg1,Arg2,Arg3):=( //190413from
+ if(islist(Arg1),
+ Nohiddenbyfaces(nm,Arg1,Arg2,Arg3,["do"]);
+ ,
+ Nohiddenbyfaces(nm,Datalist3d(),Arg1,Arg2,Arg3);
+ );
+); //190413to
+Nohiddenbyfaces(nm,segLorg,faceLorg,optionorg,optionsh):=(//190331
+//help:Nohiddenbyfaces("1",["phf3d1"]);
+//help:Nohiddenbyfaces("1",["ax3d"],["phf3d1"]);
+//help:Nohiddenbyfaces("1",["ax3d","phe3d1"],["phv3d1"]);
+//help:Nohiddenbyfaces(options=["dr","Eps=10^(-2)"]);
+//help:Nohiddenbyfaces(optionsh=["do"]);
+ regional(Eps,namen,nameh,options,segL,faceL,rng,vtxL,msgflg,
+ ctr,tmp,tmp1,tmp2,tmp3,tmp4,Ltype,Noflg,eqL,color,frnL,frhL);
+ namen="frn"+nm;
+ nameh="frh"+nm;
+ options=optionorg;
+ tmp=Divoptions(options);
+ Ltype=tmp_1;
+ Noflg=tmp_2;
+ eqL=tmp_5;
+ color=tmp_(length(tmp)-2);
+ Eps=10^(-2);
+ msgflg="Y";
+ forall(eqL, //180815from
+ tmp=Strsplit(#,"=");
+ tmp1=Toupper(substring(tmp_1,0,1));
+ if(tmp1=="E",
+ Eps=parse(tmp_2);
+ options=remove(options,[#]);
+ );
+ if(tmp1=="M", //190506from
+ msgflg=Toupper(substring(tmp_2,0,1));
+ options=remove(options,[#]);
+ ); //190506to
+ );//180815to
+ tmp1=segLorg; //190331from
+ if(!islist(tmp1),tmp1=[tmp1]);
+ Changestyle3d(tmp1,["nodisp"]);
+ segL=[];
+ forall(tmp1,tmp4, // 190401[seg=>tmp4]
+ if(isstring(tmp4),
+ tmp3=parse(tmp4);
+ if(MeasureDepth(tmp3)==1,tmp3=[tmp3]); //190401
+ tmp2=[];
+ forall(tmp3,
+ if(isstring(#),tmp=parse(#),tmp=#);
+ tmp2=append(tmp2,tmp);
+ );
+ ,
+ tmp2=[#];
+ );
+ segL=concat(segL,tmp2);
+ );
+ tmp1=faceLorg;
+ if(!islist(tmp1),tmp1=[tmp1]);
+ faceL=[];
+ forall(tmp1,tmp4, // 190401[face=>tmp4]
+ if(isstring(tmp4),
+ tmp2=parse(tmp4);
+ if(indexof(tmp4,"phf")>0,
+ tmp=replace(tmp4,"phf","phv");
+ vtx=parse(tmp);
+ vtx=apply(vtx,parse(#));
+ tmp2=apply(tmp2,vtx_#);
+ ,
+ tmp2=[tmp2]; //190401
+ );
+ ,
+ tmp2=tmp4;
+ );
+ faceL=concat(faceL,tmp2);
+ ); //190331to
+ ctr=1;
+ frnL=[];
+ frhL=[];
+ forall(segL,seg,
+ rng=[0,1];
+ forall(faceL,face,
+ rng=Nohiddensegs(seg,rng,face,Eps);
+ );
+ forall(1..length(rng)/2,
+ tmp=rng_(2*#-1);
+ tmp1=seg_1+tmp*(seg_2-seg_1);
+ tmp=rng_(2*#);
+ tmp2=seg_1+tmp*(seg_2-seg_1);
+ tmp=append(options,"Msg=nodisp"); // 15.06.22
+ Spaceline("-"+namen+"n"+text(ctr),[tmp1,tmp2],tmp);
+ frnL=append(frnL,namen+"n"+text(ctr)+"3d");
+ ctr=ctr+1;
+ );
+ if(length(rng)==0,
+ rng=[0,1];
+ ,
+ if(rng_1>0+Eps,
+ rng=prepend(0,rng);
+ ,
+ rng=rng_(2..length(rng));
+ );
+ if(rng_(length(rng))<1-Eps,
+ rng=append(rng,1);
+ ,
+ rng=rng_(1..(length(rng)-1));
+ );
+ );
+ forall(1..length(rng)/2,
+ tmp=rng_(2*#-1);
+ tmp1=seg_1+tmp*(seg_2-seg_1);
+ tmp=rng_(2*#);
+ tmp2=seg_1+tmp*(seg_2-seg_1);
+ tmp=select(optionsh,indexof(#,"=")>0); //180815from
+ tmp=remove(optionsh,tmp);
+ if(length(tmp)==0,tmp=append(optionsh,"do")); //180815to
+ tmp=append(tmp,"Msg=nodisp"); // 15.06.22
+ Spaceline("-"+nameh+"n"+text(ctr),[tmp1,tmp2],tmp);
+ frhL=append(frhL,nameh+"n"+text(ctr)+"3d");
+ ctr=ctr+1;
+ );
+ );
+ tmp1=apply(frnL,Dq+#+Dq);
+ tmp="frn3d"+nm+"="+text(tmp1)+";"; //190415
+ parse(tmp);
+ tmp1=apply(frhL,Dq+#+Dq);
+ tmp="frh3d"+nm+"="+text(tmp1)+";"; //190415
+ parse(tmp);
+ if(msgflg=="Y",
+ println("generate "+"frn3d"+nm+",frh3d"+nm+""); //190331
+ );
+ [frnL,frhL]; //181106
+);
+////%Nohiddenbyfaces end////
+
+////%Faceremovaldata start////
+Faceremovaldata(nm,vfdata,crvdata):=Faceremovaldata(nm,vfdata,crvdata,[]);
+Faceremovaldata(nm,vfdata,crvdata,options):=(
+ regional(name2,name3,nameh2,nameh3,Ltype,Noflg,eqL,Hidden,
+ opstr,opcindy,Outflg,Inflg,tmp,tmp1,tmp2,color);
+ name2="frc2d"+nm;
+ name3="frc3d"+nm;
+ nameh2="frch2d"+nm;
+ nameh3="frch3d"+nm;
+ tmp=Divoptions(options);
+ Ltype=tmp_1;
+ Noflg=tmp_2;
+ Inflg=tmp_3;
+ Outflg=tmp_4;
+ if(Inflg==0 & Outflg==0, Inflg=1;Outflg=1); // 15.05.15
+ eqL=tmp_5;
+ color=tmp_(length(tmp)-2);
+ opstr=tmp_(length(tmp)-1);
+ opcindy=tmp_(length(tmp));
+ Hidden="";
+ forall(eqL,
+ tmp=indexof(#,"=");
+ tmp1=Toupper(substring(#,0,1));
+ tmp2=substring(#,tmp,length(#));
+ if(tmp1=="H",
+ Hidden=tmp2;
+ );
+ );
+ if(Noflg<3,
+ if(Outflg>=1,
+ println("Output Faceremovaldata "+name3);
+ if(Measuredepth(vfdata)==1,
+ tmp1=text(apply(vfdata,#_[1,3]));
+ ,
+ tmp1=text([vfdata_[1,3]]);
+ );
+ tmp1=replace(tmp1,"[","list(");
+ tmp1=replace(tmp1,"]",")");
+ tmp2=text(crvdata);
+ tmp2=replace(tmp2,"[","list(");
+ tmp2=replace(tmp2,"]",")");
+// tmp2="Flattenlist("+tmp2+")";
+ tmp=name3+"=Faceremovaldata("+tmp1+","+tmp2+opstr+","+Dq+"para"+Dq+")";
+ GLIST=append(GLIST,tmp);
+ tmp=name2+"=Projpara("+name3+")";
+ GLIST=append(GLIST,tmp);
+ tmp=nameh3+"=PhHiddenData()";
+ GLIST=append(GLIST,tmp);
+ tmp=nameh2+"=Projpara("+nameh3+")";
+ GLIST=append(GLIST,tmp);
+ );
+ );
+ if(Noflg<2,
+ if(isstring(Ltype),
+ if(!contains([[0,0,0],[0,0,0,1]],color),Com2nd("Setcolor("+color+")"));
+ Ltype=Getlinestyle(text(Noflg)+Ltype,name2);
+ if(!contains([[0,0,0],[0,0,0,1]],color),Com2nd("Setcolor("+text(KCOLOR)+")"));
+ ,
+ if(Noflg==1,Ltype=0);
+ );
+ if(Inflg==1,
+ if(Measuredepth(vfdata)==1,
+ tmp1=apply(vfdata,parse(#_2));
+ ,
+ tmp1=[parse(vfdata_2)];
+ );
+ forall(tmp1,
+ Changestyle3d(#,["nodisp"]);
+ );
+ Changestyle3d(crvdata,["nodisp"]);
+ GCLIST=append(GCLIST,[name2,Ltype,opcindy]);
+ );
+ );
+ if(Hidden!="",
+ Drawlinetype(nameh2,Hidden);
+ if(Inflg==1,
+ tmp1=Toupper(substring(Hidden,0,2));
+ if(tmp1=="DR",Ltype=0);
+ if(tmp1=="DA",Ltype=1);
+ if(tmp1=="DO",Ltype=3);
+ if(tmp1=="ID",Ltype=1);
+ GCLIST=append(GCLIST,[nameh2,Ltype,opcindy]);
+ );
+ );
+);
+////%Faceremovaldata end////
+
+////%Fullformfunc start////
+Fullformfunc(FdL):=(
+ regional(Out,nn,ii,Jrg,flg,Urg,Vrg,kk,Uname,
+ Zf,Xname,Xf,Yname,Yf,tmp,tmp1,tmp2);
+ Out=[FdL_1];
+ nn=length(FdL);
+ flg=0;
+ forall(1..nn,
+ if(flg==0,
+ tmp=FdL_#;
+ if(substring(tmp,length(tmp)-1,length(tmp))=="]",
+ Jrg=#;
+ Urg=FdL_Jrg;
+ flg=1;
+ );
+ );
+ );
+ kk=indexof(Urg,"=");
+ Uname=Removespace(substring(Urg,0,kk-1));
+ tmp=substring(Urg,kk,length(Urg));
+ Urg=Uname+"="+tmp;
+// tmp1=parse(tmp);
+// Urg=Uname+"="+textformat(tmp1,5);
+ Vrg=FdL_(Jrg+1);
+ kk=indexof(Vrg,"=");
+ Vname=Removespace(substring(Vrg,0,kk-1));
+ tmp=substring(Vrg,kk,length(Vrg));
+ Vrg=Vname+"="+tmp;
+// tmp1=parse(tmp);
+// Vrg=Vname+"="+textformat(tmp1,5);
+ if(Jrg==2,
+ tmp=FdL_1;
+ kk=indexof(tmp,"=");
+ Zf=substring(tmp,kk,length(tmp));
+ tmp=[Uname,Vname,Zf,Urg,Vrg];
+ Out=concat(Out,tmp);
+ ,
+ if(Jrg==4,
+ tmp=FdL_1;
+ kk=indexof(tmp,"=");
+ Zf=substring(tmp,kk,length(tmp));
+ tmp=FdL_2;
+ kk=indexof(tmp,"=");
+ Xname=Removespace(substring(tmp,0,kk-1));
+ Xf=substring(tmp,kk,length(tmp));
+ tmp=FdL_3;
+ kk=indexof(tmp,"=");
+ Yname=Removespace(substring(tmp,0,kk-1));
+ Yf=substring(tmp,kk,length(tmp));
+ tmp=replace(Zf,Xname,"("+Xf+")");
+ Zf=replace(tmp,Yname,"("+Yf+")");
+ Tmp=[Xf,Yf,Zf,Urg,Vrg];
+ Out=concat(Out,Tmp);
+ ,
+ tmp=FdL_2;
+ kk=indexof(tmp,"=");
+ Xf=substring(tmp,kk,length(tmp));
+ tmp=FdL_3;
+ kk=indexof(tmp,"=");
+ Yf=substring(tmp,kk,length(tmp));
+ tmp=FdL_4;
+ kk=indexof(tmp,"=");
+ Zf=substring(tmp,kk,length(tmp));
+ tmp=[Xf,Yf,Zf,Urg,Vrg];
+ Out=concat(Out,tmp);
+ );
+ );
+ DrwS="enws";
+ BdyL=[];
+ forall((Jrg+2)..length(FdL),ii,
+ tmp=FdL_ii;
+ if(isstring(tmp),
+ if(length(tmp)==0,
+ tmp=" ";
+ );
+ DrwS=tmp;
+ );
+ if(islist(tmp) & length(tmp_1)>1,
+ BdyL=tmp;
+ );
+ );
+ tmp=[DrwS,BdyL];
+ Out=concat(Out,tmp);
+);
+////%Fullformfunc end////
+
+////%Surffun start////
+Surffun(nm,Fd):=(
+ regional(name,coord,var1,var2,rng1,rng2,bdy,tmp,tmp1,tmp2);
+ tmp=Fullformfunc(Fd);
+ rng1=tmp_5;
+ rng2=tmp_6;
+ bdy=tmp_7;
+ coord="["+tmp_2+","+tmp_3+","+tmp_4+"]";
+ tmp=indexof(rng1,"=");
+ var1=substring(rng1,0,tmp-1);
+ rng1=substring(rng1,tmp,length(rng1));
+ tmp=indexof(rng2,"=");
+ var2=substring(rng2,0,tmp-1);
+ rng2=substring(rng2,tmp,length(rng2));
+ name="Sfn"+nm+"("+var1+","+var2+")";
+ Deffun(name,["regional(tmp)","tmp="+coord,"tmp"]);
+ [name,var1,rng1,var2,rng2,bdy];
+);
+////%Surffun end////
+
+////%Sf3data start////
+Sf3data(nm,fdata):=Sf3data(nm,fdata,[]);
+Sf3data(nm,fdata,optionorg):=(
+ regional(tmp,tmp1,tmp2);
+ tmp=Surffun(nm,fdata);
+ tmp1=tmp_2+"="+tmp_3;
+ tmp2=tmp_4+"="+tmp_5;
+ Sf3data(nm,tmp_1,tmp1,tmp2,optionorg);
+);
+Sf3data(nm,funstr,var1,var2):=Sf3data(nm,funstr,var1,var2,[]);
+Sf3data(nm,funstr,var1org,var2org,optionorg):=(
+//help:Sf3data("1",Fd);
+//help:Sf3data(options=["Num=[25,25]","Wire=[20,20]"]);
+ regional(name2,name3,var1,var2,Ltype,Noflg,opstr,opcindy,eqL,Num,
+ Wire,varu,varv,rngu,rngv,sfdtuL,sfdtvL,options,
+ tmp,tmp1,tmp2,tmp3);
+ var1=replace(var1org,"%pi","pi");
+ var2=replace(var2org,"%pi","pi");
+ tmp=Divoptions(optionorg);
+ Ltype=tmp_1;
+ Noflg=tmp_2;
+ eqL=tmp_5;
+ opstr=tmp_(length(tmp)-1);
+ opcindy=tmp_(length(tmp));
+ options=optionorg;
+ Num=[25,25];
+ Wire=[20,20];
+ forall(eqL,
+ tmp=indexof(#,"=");
+ tmp1=substring(#,0,tmp-1);
+ tmp2=substring(#,tmp,length(#)); // 16.05.25
+ tmp=Toupper(substring(tmp1,0,1));
+ if(tmp=="N",
+ tmp2=parse(tmp2);
+ if(!islist(tmp2),tmp2=[tmp2,tmp2]);
+ Num=tmp2;
+ options=remove(options,[#]);
+ );
+ if(tmp=="W",
+ tmp2=parse(tmp2);
+ if(!islist(tmp2),tmp2=[tmp2,tmp2]);
+ Wire=tmp2;
+ options=remove(options,[#]);
+ );
+ );
+ tmp=indexof(var1,"=");
+ varu=substring(var1,0,tmp-1);
+ rngu=parse(substring(var1,tmp,length(var1)));
+ tmp=indexof(var2,"=");
+ varv=substring(var2,0,tmp-1);
+ rngv=parse(substring(var2,tmp,length(var2)));
+ sfdtuL=[];
+ forall(0..Wire_2,
+ tmp=rngv_1+#/Wire_2*(rngv_2-rngv_1);
+ tmp1=replace(funstr,varv,textformat(tmp,5));
+ tmp="Num="+text(Num_2);
+ tmp2=concat(options,["Msg=no",tmp]);
+ Spacecurve(nm+"u"+#,tmp1,var1,tmp2);
+ sfdtuL=append(sfdtuL,"sc3d"+nm+"u"+#);
+ );
+ sfdtvL=[];
+ forall(0..Wire_1,
+ tmp=rngu_1+#/Wire_1*(rngu_2-rngu_1);
+ tmp1=replace(funstr,varu,textformat(tmp,5));
+ tmp="Num="+text(Num_1);
+ tmp2=concat(options,["Msg=no",tmp]);
+ Spacecurve(nm+"v"+#,tmp1,var2,tmp2);
+ sfdtvL=append(sfdtvL,"sc3d"+nm+"v"+#);
+ );
+ if(Noflg<3,
+ println(" generate totally "+"sf3d"+nm);
+ tmp1="";
+ forall(sfdtuL,
+ tmp1=tmp1+Dq+#+Dq+",";
+ );
+ tmp1=substring(tmp1,0,length(tmp1)-1);
+ tmp2="";
+ forall(sfdtvL,
+ tmp2=tmp2+Dq+#+Dq+",";
+ );
+ tmp2=substring(tmp2,0,length(tmp2)-1);
+ tmp="sf3d"+nm+"=[["+tmp1+"],["+tmp2+"]];"; //190415
+ parse(tmp);
+ );
+ [sfdtuL,sfdtvL];
+);
+////%Sf3data end////
+
+////%SfbdparadataR start////
+SfbdparadataR(nm,fd):=
+ SfbdparadataR(nm,fd,[],["nodisp"]);
+SfbdparadataR(nm,fd,options):=
+ SfbdparadataR(nm,fd,options,["nodisp"]);
+SfbdparadataR(nm,fdorg,optionorg,optionsh):=(
+// help:SfbdparadataR("1",Fd);
+// help:SfbdparadataR(options2=["Wait=60",division(c(50,50)),Eps1(0.01), Eps2(0.05)]);
+ regional(fd,options,name3,name3h,waiting,
+ eqL,reL,strL,fname,tmp,tmp1,tmp2,flg,wflg);
+ tmp=ConvertFdtoC(fdorg);//180430[2lines]
+ FuncListC=append(FuncListC,tmp);
+ name3="sfbd3d"+nm;
+ name3h="sfbdh3d"+nm;
+ fname=Fhead+"sfbd"+nm+".txt";
+ tmp=apply(fdorg,if(isstring(#),"'"+#+"'",#));
+ tmp=text(tmp);
+ fd=RSform(tmp,2);
+ options=optionorg;
+ tmp=Divoptions(options);
+ eqL=tmp_5;
+ reL=tmp_6;
+ strL=tmp_7;
+ waiting=120;
+ forall(eqL,
+ tmp=indexof(#,"=");
+ tmp1=Toupper(substring(#,0,1));
+ tmp2=substring(#,tmp,length(#));
+ if(tmp1=="W",
+ waiting=parse(tmp2);
+ options=remove(options,[#]);
+ );
+ );
+ options=remove(options,reL);
+ wflg=0;
+ forall(strL,
+ tmp=Toupper(substring(#,0,1));
+ if(tmp=="M",
+ wflg=1;
+ options=remove(options,[#]);
+ );
+ if(tmp=="R",
+ wflg=-1;
+ options=remove(options,[#]);
+ );
+ );
+ cmdL=[]; //180509from
+ tmp=Select(GLIST,indexof(#,"Proj")==0);
+ cmdL=MkprecommandR(tmp);//180509to
+ tmp=["fd"+nm];
+ if(length(reL)>0,
+ reL=textformat(reL,4);
+ reL=substring(reL,1,length(reL)-1);
+ reL=RSform(reL);
+ tmp=append(tmp,reL);
+ );
+ tmp1=[Dqq(fname),Dqq(name3),name3,Dqq(name3h),name3h];//180509
+ tmp2=replace(fname,".txt",".Rdata"); //18.02.18
+ cmdL=concat(cmdL,[
+ "print",[Dqq("fd"+nm)], //18.02.22
+ "fd"+nm+"="+fd,[],
+ name3+"=Sfbdparadata",tmp,
+ name3h+"=HIDDENDATA",[],
+ "WriteOutData",tmp1,
+ "save",["CUSPPT","OTHERPARTITION","file='"+tmp2+"'"]
+ ]);
+ tmp=replace(fname,".txt","end.txt");
+ options=concat(options,["Out=no","Wait="+text(waiting),"Res="+tmp]);
+ if(wflg==1,options=append(options,"m"));
+ if(wflg==-1,options=append(options,"r"));
+ options=append(options,"Pre=!G"); //180509
+ if(ErrFlag==0,
+ CalcbyR("sfbd"+nm,cmdL,options);
+ );
+ if(ErrFlag==1,
+ err("Sfbdparadata not completed");
+ ,
+ ReadOutData(fname);
+ if(islist(parse(name3)), //180508[2lines]
+ Extractdata(name3,["nodisp"]);
+ Projpara(name3,options);
+ if(length(optionsh)>0,tmp=optionsh,tmp=["nodisp"]);
+ Projpara(name3h,tmp); //180508
+ ,
+ ErrFlag=1;
+ );
+ );
+);
+////%SfbdparadataR end////
+
+////%Addpoints start////
+Addpoints():=(//18.02.20
+ if(isstring(ADDPOINT),
+ ADDPOINT;
+ ,
+ "list()";
+ );
+);
+Addpoints(ptlist):=(
+//help:Addpoints(list of 3d points);
+ if(length(ptlist)==0,
+ ADDPOINT="list()";
+ ,
+ ADDPOINT=RSform(textformat(ptlist,6),2);
+ );
+ ADDPOINT;
+);
+////%Addpoints end////
+
+////%CrvsfparadataR start////
+CrvsfparadataR(nm,crv,sf,fd):=
+ CrvsfparadataR(nm,crv,sf,fd,[],["nodisp"]);
+CrvsfparadataR(nm,crv,sf,fd,options):=
+ CrvsfparadataR(nm,crv,sf,fd,options,["nodisp"]);
+CrvsfparadataR(nm,crvstr,sfstr,fdorg,optionorg,optionsh):=(
+// help:CrvsfparadataR("1","ax3d","sfbd3d1",fd);
+// help:CrvsfparadataR(options2=[division(c(50,50)),Eps1(0.01), Eps2(0.05)]);
+ regional(gd,out,fd,options,name3,name3h,
+ eqL,reL,strL,fname,rfname,waiting,tmp,tmp1,tmp2,tmp3,flg,wflg);
+ tmp=replace(crvstr,"3d","2d");
+ Changestyle(tmp,["nodisp"]);
+ name3="crvsf3d"+nm;
+ name3h="crvsfh3d"+nm;
+ fname=Fhead+"crvsf"+nm+".txt";
+ rfname=Fhead+sfstr+".txt";
+ rfname=replace(rfname,"3d","");
+ tmp=apply(fdorg,if(isstring(#),"'"+#+"'",#));
+ tmp=text(tmp);
+ fd=RSform(tmp,2);
+ options=optionorg;
+ tmp=Divoptions(options);
+ eqL=tmp_5;
+ reL=tmp_6;
+ strL=tmp_7;
+ waiting=120;
+ forall(eqL,
+ tmp=indexof(#,"=");
+ tmp1=Toupper(substring(#,0,1));
+ tmp2=substring(#,tmp,length(#));
+ if(tmp1=="W",
+ waiting=parse(tmp2);
+ options=remove(options,[#]);
+ );
+ );
+ options=remove(options,reL);
+ wflg=0;
+ forall(strL,
+ tmp=Toupper(substring(#,0,1));
+ if(tmp=="M",
+ wflg=1;
+ options=remove(options,[#]);
+ );
+ if(tmp=="R",
+ wflg=-1;
+ options=remove(options,[#]);
+ );
+ );
+ reL=RSform(text(reL),2);
+ reL=substring(reL,5,length(reL)-1);
+ cmdL=[]; //180509from
+ tmp=Select(GLIST,indexof(#,"Proj")==0);
+ cmdL=MkprecommandR(tmp);//180509to
+ tmp2=replace(rfname,".txt",".Rdata");
+ cmdL=concat(cmdL,[
+ "print",[Dqq("crv"+nm)], //18.02.22
+ "fd"+nm+"="+fd,[],
+ "ReadOutData",[Dqq(rfname)],
+ "load",[Dqq(tmp2)],
+ "Addpoints",[Addpoints()]
+ ]);
+ tmp3=select(GLIST,indexof(#,crvstr+"=")>0); //18.02.22from
+ if(length(tmp3)==0,
+ tmp3=Fhead+crvstr+".txt";
+ tmp3=replace(tmp3,"3d","");
+ cmdL=concat(cmdL,[
+ "ReadOutData",[Dqq(tmp3)]
+ ]);
+ ); //18.02.22to
+ tmp=[crvstr,sfstr,"fd"+nm];
+ if(length(reL)>0,
+ reL=textformat(reL,4);
+ reL=substring(reL,1,length(reL)-1);
+ reL=Rsform(reL);
+ tmp=append(tmp,reL);
+ );
+ tmp1=[Dqq(fname),Dqq(name3),name3,Dqq(name3h),name3h];
+ cmdL=concat(cmdL,[
+ name3+"=Crvsfparadata",tmp,
+ name3h+"=CRVSFHIDDENDATA",[],
+ "WriteOutData",tmp1
+ ]);
+ tmp=replace(fname,".txt","end.txt");
+ options=concat(options,["Out=no","Wait="+text(waiting),"Res="+tmp]);
+ if(wflg==1,options=append(options,"m"));
+ if(wflg==-1,options=append(options,"r"));
+ options=append(options,"Pre=!G");//180509
+ if(ErrFlag==0,
+ CalcbyR("crvsf"+nm,cmdL,options);
+ );
+ if(ErrFlag==1,
+ err("Crvsfparadata not completed");
+ ,
+ ReadOutData(fname);
+ if(islist(parse(name3)), //180507[2lines]
+ Extractdata(name3,["nodisp"]);
+ Projpara(name3,options);
+ if(length(optionsh)>0,tmp=optionsh,tmp=["nodisp"]);
+ Projpara(name3h,tmp);//180507
+ ,
+ ErrFlag=1;
+ );
+ );
+);
+////%CrvsfparadataR end////
+
+////%Crv3onsfparadataR start////
+Crv3onsfparadataR(nm,crv3d,sf,fd):=
+ Crvs3onfparadataR(nm,crv3d,sf,fd,[],["nodisp"]);
+Crv3onsfparadataR(nm,crv3d,sf,fd,options):=
+ Crv3onsfparadataR(nm,crv3d,sf,fd,options,["nodisp"]);
+Crv3onsfparadataR(nm,crv3dstr,sfstr,fdorg,optionorg,optionsh):=(
+// help:Crv3onsfparadataR("1","sc1","sfbd3d1",fd);
+// help:Crv3onsfparadataR(options2=[division(c(50,50)),Eps1(0.01), Eps2(0.05)]);
+ regional(gd,out,fd,options,name3,name3h,
+ eqL,reL,strL,fname,rfname,waiting,tmp,tmp1,tmp2,tmp3,flg,wflg);
+ tmp1=replace(crv3dstr,"3d","2d");
+ tmp=apply(GCLIST,#_1);
+ if(contains(tmp,tmp1),
+ Changestyle3d(tmp1,["nodisp"]);//180428
+ );
+ Changestyle(tmp,["nodisp"]);
+ name3="crv3onsf3d"+nm;
+ name3h="crv3onsfh3d"+nm;
+ fname=Fhead+"crv3onsf"+nm+".txt";
+ rfname=Fhead+sfstr+".txt";
+ rfname=replace(rfname,"3d","");
+ tmp=apply(fdorg,if(isstring(#),Dqq(#),#));
+ tmp=text(tmp);
+ fd=RSform(tmp,2);
+ options=optionorg;
+ tmp=Divoptions(options);
+ eqL=tmp_5;
+ reL=tmp_6;
+ strL=tmp_7;
+ waiting=120;
+ forall(eqL,
+ tmp=indexof(#,"=");
+ tmp1=Toupper(substring(#,0,1));
+ tmp2=substring(#,tmp,length(#));
+ if(tmp1=="W",
+ waiting=parse(tmp2);
+ options=remove(options,[#]);
+ );
+ );
+ options=remove(options,reL);
+ wflg=0;
+ forall(strL,
+ tmp=Toupper(substring(#,0,1));
+ if(tmp=="M",
+ wflg=1;
+ options=remove(options,[#]);
+ );
+ if(tmp=="R",
+ wflg=-1;
+ options=remove(options,[#]);
+ );
+ );
+ reL=RSform(text(reL),2);
+ reL=substring(reL,5,length(reL)-1);
+ cmdL=[]; //180509from
+ tmp=Select(GLIST,indexof(#,"Proj")==0);
+ cmdL=MkprecommandR(tmp);//180509to
+ tmp=["crv",sfstr,"fd"+nm];
+ if(length(reL)>0,
+ reL=textformat(reL,4);
+ reL=substring(reL,1,length(reL)-1);
+ reL=Rsform(reL);
+ tmp=append(tmp,reL);
+ );
+ tmp1=[Dqq(fname),Dqq(name3),name3,Dqq(name3h),name3h];
+ tmp2=replace(rfname,".txt",".Rdata");
+ cmdL=concat(cmdL,[
+ "print",[Dqq("crv3onsf"+nm)], //180222
+ "fd"+nm+"="+fd,[],
+ "ReadOutData",[Dqq(rfname)],
+ "load",[Dqq(tmp2)]
+ ]);
+ cmdL=concat(cmdL,[
+ "Addpoints",[Addpoints()],
+ "crv="+crv3dstr,[],
+ name3+"=Crv3onsfparadata",tmp,
+ name3h+"=HIDDENDATA",[],
+ "WriteOutData",tmp1
+ ]);
+ tmp=replace(fname,".txt","end.txt");
+ options=concat(options,["Out=no","Wait="+text(waiting),"Res="+tmp]);
+ if(wflg==1,options=append(options,"m"));
+ if(wflg==-1,options=append(options,"r"));
+ options=append(options,"Pre=!G"); //180508
+ if(ErrFlag==0,
+ CalcbyR("crv3onsf"+nm,cmdL,options);
+ );
+ if(ErrFlag==1,
+ err("Crv3onsfparadata not completed");
+ ,
+ ReadOutData(fname);
+ if(islist(parse(name3)),
+ Extractdata(name3,["nodisp"]);
+ Projpara(name3,options); //180507
+ if(length(optionsh)>0,tmp=optionsh,tmp=["nodisp"]);
+ Extractdata(name3h,["nodisp"]);
+ Projpara(name3h,tmp);
+ ,
+ ErrFlag=1;
+ );
+ );
+);
+////%Crv3onsfparadataR end////
+
+////%Crv2onsfparadataR start////
+Crv2onsfparadataR(nm,crv2d,sf,fd):=
+ Crvs2onfparadataR(nm,crv2d,sf,fd,[],["nodisp"]);
+Crv2onsfparadataR(nm,crv2d,sf,fd,options):=
+ Crv2onsfparadataR(nm,crv2d,sf,fd,options,["nodisp"]);
+Crv2onsfparadataR(nm,crv2dstr,sfstr,fdorg,optionorg,optionsh):=(
+//help :Crv2onsfparadataR("1","pa1","sfbd3d1",fd);
+//help :Crv2onsfparadataR(options2=[division(c(50,50)),Eps1(0.01), Eps2(0.05)]);
+ regional(gd,out,fd,options,name3,name3h,
+ eqL,reL,strL,fname,rfname,waiting,tmp,tmp1,tmp2,tmp3,flg,wflg);
+ Changestyle(crv2dstr,["nodisp"]);
+ name3="crv2onsf3d"+nm;
+ name3h="crv2onsfh3d"+nm;
+ fname=Fhead+"crv2onsf"+nm+".txt";
+ rfname=Fhead+sfstr+".txt";
+ rfname=replace(rfname,"3d","");
+ tmp=apply(fdorg,if(isstring(#),Dqq(#),#));
+ tmp=text(tmp);
+ fd=RSform(tmp,2);
+ options=optionorg;
+ tmp=Divoptions(options);
+ eqL=tmp_5;
+ reL=tmp_6;
+ strL=tmp_7;
+ waiting=120;
+ forall(eqL,
+ tmp=indexof(#,"=");
+ tmp1=Toupper(substring(#,0,1));
+ tmp2=substring(#,tmp,length(#));
+ if(tmp1=="W",
+ waiting=parse(tmp2);
+ options=remove(options,[#]);
+ );
+ );
+ options=remove(options,reL);
+ wflg=0;
+ forall(strL,
+ tmp=Toupper(substring(#,0,1));
+ if(tmp=="M",
+ wflg=1;
+ options=remove(options,[#]);
+ );
+ if(tmp=="R",
+ wflg=-1;
+ options=remove(options,[#]);
+ );
+ );
+ if(isstring(crv2dstr),
+ crv=Rsform(crv2dstr);
+ ,
+ crv=apply(crv2dstr,Dqq(#));
+ crv=Rsform(text(crv));
+ crv="Paramplot"+substring(crv,1,length(crv));
+ );
+ reL=RSform(text(reL),2);
+ reL=substring(reL,5,length(reL)-1);
+ cmdL=[]; //180509from
+ tmp=Select(GLIST,indexof(#,"Proj")==0);
+ cmdL=MkprecommandR(tmp);//180509to
+ tmp=["crv",sfstr,"fd"+nm];
+ if(length(reL)>0,
+ reL=textformat(reL,4);
+ reL=substring(reL,1,length(reL)-1);
+ reL=Rsform(reL);
+ tmp=append(tmp,reL);
+ );
+ tmp1=[Dqq(fname),Dqq(name3),name3,Dqq(name3h),name3h];
+ tmp2=replace(rfname,".txt",".Rdata");
+ cmdL=concat(cmdL,[
+ "print",[Dqq("crv2onsf"+nm)], //18.02.22
+ "fd"+nm+"="+fd,[],
+ "ReadOutData",[Dqq(rfname)],
+ "load",[Dqq(tmp2)]
+ ]);
+ cmdL=concat(cmdL,[
+ "Addpoints",[Addpoints()],
+ "crv="+crv2dstr,[],
+ name3+"=Crv2onsfparadata",tmp,
+ name3h+"=HIDDENDATA",[],
+ "WriteOutData",tmp1
+ ]);
+ tmp=replace(fname,".txt","end.txt");
+ options=concat(options,["Out=no","Wait="+text(waiting),"Res="+tmp]);
+ if(wflg==1,options=append(options,"m"));
+ if(wflg==-1,options=append(options,"r"));
+ options=append(options,"Pre=!G"); //180508
+ if(ErrFlag==0,
+ CalcbyR("crv2onsf"+nm,cmdL,options);
+ );
+ if(ErrFlag==1,
+ err("Crv2onsfparadata not completed");
+ ,
+ ReadOutData(fname);
+ if(islist(parse(name3)),
+ Extractdata(name3,["nodisp"]);
+ Projpara(name3,options); //180507
+ if(length(optionsh)>0,tmp=optionsh,tmp=["nodisp"]);
+ Projpara(name3h,tmp);
+ ,
+ ErrFlag=1;
+ );
+ );
+);
+////%Crv2onsfparadataR end////
+
+////%WireparadataR start////
+WireparadataR(nm,sf,wr1,wr2,fd):=
+ WireparadataR(nm,sf,fd,wr1,wr2,[],["nodisp"]);
+WireparadataR(nm,sf,fd,wr1,wr2,options):=
+ WireparadataR(nm,sf,fd,wr1,wr2,options,["nodisp"]);
+WireparadataR(nm,sfstr,fdorg,wr1,wr2,optionorg,optionsh):=(
+// help:WireparadataR("1","sfbd3d1",fd,5,5);
+// help:WireparadataR(options2=[division(c(50,50)),Eps1(0.01), Eps2(0.05)]);
+ regional(fd,options,name3,name3h,outreg,
+ eqL,reL,strL,fname,rfname,waiting,tmp,tmp1,tmp2,flg,wflg);
+ name3="wire3d"+nm;
+ name3h="wireh3d"+nm;
+ fname=Fhead+"wire"+nm+".txt";
+ rfname=Fhead+sfstr+".txt";
+ rfname=replace(rfname,"3d","");
+ tmp=apply(fdorg,if(isstring(#),"'"+#+"'",#));
+ tmp=text(tmp);
+ fd=RSform(tmp,2);
+ options=optionorg;
+ tmp=Divoptions(options);
+ eqL=tmp_5;
+ reL=tmp_6;
+ strL=tmp_7;
+ waiting=600;
+ forall(eqL,
+ tmp=indexof(#,"=");
+ tmp1=Toupper(substring(#,0,1));
+ tmp2=substring(#,tmp,length(#));
+ if(tmp1=="W",
+ waiting=parse(tmp2);
+ options=remove(options,[#]);
+ );
+ );
+ options=remove(options,reL);
+ wflg=0;
+ forall(strL,
+ tmp=Toupper(substring(#,0,1));
+ if(tmp=="M",
+ wflg=1;
+ options=remove(options,[#]);
+ );
+ if(tmp=="R",
+ wflg=-1;
+ options=remove(options,[#]);
+ );
+ );
+ tmp1=textformat(wr1,6);
+ tmp1=Rsform(tmp1,1);
+ tmp2=textformat(wr2,6);
+ tmp2=Rsform(tmp2,1);
+ tmp=[sfstr,"fd"+nm,tmp1,tmp2];
+ reL=RSform(text(reL),2);
+ reL=substring(reL,5,length(reL)-1);
+ cmdL=[]; //180509from
+ tmp=Select(GLIST,indexof(#,"Proj")==0);
+ cmdL=MkprecommandR(tmp);//180509to
+ tmp1=textformat(wr1,6);
+ tmp1=Rsform(tmp1,1);
+ tmp2=textformat(wr2,6);
+ tmp2=Rsform(tmp2,1);
+ tmp=[sfstr,"fd"+nm,tmp1,tmp2];
+ reL=RSform(text(reL),2);
+ reL=substring(reL,5,length(reL)-1);
+ if(length(reL)>0,
+ reL=textformat(reL,4);
+ reL=substring(reL,1,length(reL)-1);
+ reL=Rsform(reL);
+ tmp=append(tmp,reL);
+ );
+ tmp1=[Dqq(fname),Dqq(name3),name3,Dqq(name3h),name3h];
+ tmp2=replace(rfname,".txt",".Rdata");
+ cmdL=concat(cmdL,[
+ "print",[Dqq("wire"+nm)], //18.02.22
+ "fd"+nm+"="+fd,[],
+ "ReadOutData",[Dqq(rfname)],
+ "load",[Dqq(tmp2)],
+ "Addpoints",[Addpoints()],
+ name3+"=Wireparadata",tmp,
+ name3h+"=WIREHIDDENDATA",[],
+ "WriteOutData",tmp1
+ ]);
+ tmp=replace(fname,".txt","end.txt");
+ options=concat(options,["Out=no","Wait="+text(waiting),"Res="+tmp]);
+ if(wflg==1,options=concat(options,["m"]));
+ if(wflg==-1,options=concat(options,["r"]));
+ options=append(options,"Pre=!G"); //180508
+ if(ErrFlag==0,
+ CalcbyR("wire"+nm,cmdL,options);
+ );
+ if(ErrFlag==1,
+ err("Wireparadata not completed");
+ ,
+ ReadOutData(fname);
+ if(islist(parse(name3)),
+ Extractdata(name3,["nodisp"]);
+ Projpara(name3,options);
+ if(length(optionsh)>0,tmp=optionsh,tmp=["nodisp"]);
+ Projpara(name3h,tmp);
+ ,
+ ErrFlag=1;
+ );
+ );
+);
+////%WireparadataR end////
+
+////%IntersectcrvsfR start////
+IntersectcrvsfR(nm,crv,fd):=Intersectcrvsf(nm,crv,fd,"",[]);
+IntersectcrvsfR(nm,crv,fd,Arg):=(
+ if(isstring(Arg),
+ IntersectcrvsfR(nm,crv,fd,Arg,[]);
+ ,
+ IntersectcrvsfR(nm,crv,fd,"",Arg);
+ );
+);
+IntersectcrvsfR(nm,crvstr,fdorg,bdyeq,optionorg):=(
+// help:IntersectcrvsfR("1",curve,fd);
+// help:IntersectcrvsfR("1",curve,fd,curveequation);
+// help:IntersectcrvsfR(options=[Np([50,50]),Eps(0.01)]);
+ regional(name,crv,fd,options,reL,fname,crvfname,argR,
+ waiting,tmp,tmp1,tmp2,flg,wflg,pts); name="crvsf"+nm;
+ name="crvsf"+nm;
+ fname=Fhead+name+".txt";
+ crvfname=Fhead+"crv"+nm+".txt";
+// crv=parse(crvstr);
+// crv=textformat(crv,6);
+// crv=Rsform(crv,2);
+ fd=apply(fdorg,if(isstring(#),Dqq(#),#));
+ options=optionorg;
+ tmp=Divoptions(options);
+ eqL=tmp_5;
+ reL=tmp_6;
+ strL=tmp_7;
+ waiting=120;
+ forall(eqL,
+ tmp=indexof(#,"=");
+ tmp1=Toupper(substring(#,0,1));
+ tmp2=substring(#,tmp,length(#));
+ if(tmp1=="W",
+ waiting=parse(tmp2);
+ options=remove(options,[#]);
+ );
+ );
+ options=remove(options,reL);
+ wflg=0;
+ forall(strL,
+ tmp=Toupper(substring(#,0,1));
+ if(tmp=="M",
+ wflg=1;
+ options=remove(options,[#]);
+ );
+ if(tmp=="R",
+ wflg=-1;
+ options=remove(options,[#]);
+ );
+ );
+ tmp=apply(fdorg,if(isstring(#),"'"+#+"'",#));
+ tmp=text(tmp);
+ fd=RSform(tmp,2);
+ tmp=textformat(reL,4);
+ tmp=substring(tmp,1,length(tmp)-1);
+ tmp=Rsform(tmp);
+ if(length(bdyeq)>0,
+ argR=","+Dqq(bdyeq);
+ ,
+ argR="";
+ );
+ if(length(tmp)>0,
+ argR=argR+","+tmp;
+ );
+ tmp1=[Dqq(fname),Dqq(name),"tmp"];
+ cmdL=[
+ "print",[Dqq("crvsf"+nm)], //18.02.22
+ "crv="+crvstr,[],
+ "fd="+fd,[],
+ "tmp1=Intersectcrvsf(crv,fd"+argR+")",[],
+ "tmp=c()",[],
+ "for(j in Looprange(1,length(tmp1))){",[],
+ " tmp=Appendrow(tmp,tmp1[[j]])",[],
+ "}",[],
+ "WriteOutData",tmp1,
+ "tmp",[]
+ ];
+ tmp=replace(fname,".txt","end.txt");
+ options=concat(options,["Out=no","Wait="+text(waiting),"Res="+tmp]);
+ if(wflg==1,options=append(options,"m"));
+ if(wflg==-1,options=append(options,"r"));
+ if(ErrFlag==1,
+ err("Crvsfparadata not completed");
+ ,
+ CalcbyR("ans",cmdL,options);
+ ReadOutData(fname);
+ );
+ println("generate "+name);
+ parse(name+";"); //190415
+);
+////%IntersectcrvsfR end////
+
+////%SfcutparadataR start////
+SfcutparadataR(nm,eqstr,sf,fd):=
+ SfcutparadataR(nm,eqstr,sf,fd,[]);
+SfcutparadataR(nm,eqstr,sf,fd,options):=
+ SfcutparadataR(nm,eqstr,sf,fd,options,["nodisp"]);
+SfcutparadataR(nm,eqstrorg,sf,fdorg,optionorg,optionsh):=(
+// help:SfcutparadataR("1","x+y+z=1","sfbd3d1",fd);
+// help:SfcutparadataR(options2=[Division(c(50,50)),Eps1(0.01), Eps2(0.05)]);
+ regional(gd,out,fd,options,name3,name3h,eqstr,
+ eqL,reL,strL,fname,rfname,waiting,tmp,tmp1,tmp2,tmp3,flg,wflg);
+ tmp=Strsplit(eqstrorg,"=");
+ if(length(tmp)==1,
+ eqstr=tmp_1;
+ ,
+ eqstr=tmp_1+"-("+tmp_2+")";
+ );
+ tmp=replace(sfcut,"3d","2d");
+ Changestyle(tmp,["nodisp"]);
+ name3="sfcut3d"+nm;
+ name3h="sfcuth3d"+nm;
+ fname=Fhead+"sfcut"+nm+".txt";
+ rfname=Fhead+sf+".txt";
+ rfname=replace(rfname,"3d","");
+ tmp=apply(fdorg,if(isstring(#),"'"+#+"'",#));
+ tmp=text(tmp);
+ fd=RSform(tmp,2);
+ options=optionorg;
+ tmp=Divoptions(options);
+ eqL=tmp_5;
+ reL=tmp_6;
+ strL=tmp_7;
+ waiting=120;
+ forall(eqL,
+ tmp=indexof(#,"=");
+ tmp1=Toupper(substring(#,0,1));
+ tmp2=substring(#,tmp,length(#));
+ if(tmp1=="W",
+ waiting=parse(tmp2);
+ options=remove(options,[#]);
+ );
+ );
+ options=remove(options,reL);
+ wflg=0;
+ forall(strL,
+ tmp=Toupper(substring(#,0,1));
+ if(tmp=="M",
+ wflg=1;
+ options=remove(options,[#]);
+ );
+ if(tmp=="R",
+ wflg=-1;
+ options=remove(options,[#]);
+ );
+ );
+ reL=RSform(text(reL),2);
+ reL=substring(reL,5,length(reL)-1);
+ cmdL=[]; //180509from
+ tmp=Select(GLIST,indexof(#,"Proj")==0);
+ cmdL=MkprecommandR(tmp);//180509to
+ tmp=[Dqq(eqstr),sf,"fd"+nm];
+ if(length(reL)>0,
+ reL=textformat(reL,4);
+ reL=substring(reL,1,length(reL)-1);
+ reL=Rsform(reL);
+ tmp=append(tmp,reL);
+ );
+ tmp1=[Dqq(fname),Dqq(name3),name3,Dqq(name3h),name3h];
+ tmp2=replace(rfname,".txt",".Rdata");
+ cmdL=concat(cmdL,[
+ "print",[Dqq("sfcut"+nm)], //18.02.22
+ "fd"+nm+"="+fd,[],
+ "ReadOutData",[Dqq(rfname)],
+ "load",[Dqq(tmp2)],
+ name3+"=Sfcutparadata",tmp,
+ name3h+"=CRVONSFHIDDENDATA",[],
+ "WriteOutData",tmp1
+ ]);
+ tmp=replace(fname,".txt","end.txt");
+ options=concat(options,["Out=no","Wait="+text(waiting),"Res="+tmp]);
+ if(wflg==1,options=append(options,"m"));
+ if(wflg==-1,options=append(options,"r"));
+ options=append(options,"Pre=!G"); //180508
+ if(ErrFlag==0,
+ CalcbyR("sfcut"+nm,cmdL,options);
+ );
+ if(ErrFlag==1,
+ err("Sfcutparadata not completed");
+ ,
+ ReadOutData(fname);
+ if(islist(parse(name3)),
+ Extractdata(name3,["nodisp"]);
+ Projpara(name3,options);
+ if(length(optionsh)>0,tmp=optionsh,tmp=["nodisp"]);
+ Projpara(name3h,tmp);
+ ,
+ ErrFlag=1;
+ );
+ );
+);
+////%SfcutparadataR end////
+
+////////////// current skeleton 2018.01.04 ////////////////
+
+////%Skeletonparadata start////
+Skeletonparadata(nm):=Skeletondatacindy(nm,[]);
+Skeletonparadata(nm,options):=Skeletondatacindy(nm,options);
+Skeletonparadata(nm,pltdata1,pltdata2):=Skeletondatacindy(nm,pltdata1,pltdata2);
+Skeletonparadata(nm,pltdata1org,pltdata2org,options):=
+ Skeletondatacindy(nm,pltdata1org,pltdata2org,options);
+////%Skeletonparadata end////
+
+////%Skeletondatacindy start////
+Skeletondatacindy(nm):=Skeletondatacindy(nm,[]);
+Skeletondatacindy(nm,options):=(
+ regional(tmp);
+ tmp=Datalist3d();
+ Skeletondatacindy(nm,tmp,tmp,options);
+);
+Skeletondatacindy(nm,pltdata1,pltdata2):=
+ Skeletondatacindy(nm,pltdata1,pltdata2,[]);
+Skeletondatacindy(nm,pltdata1org,pltdata2org,optionsorg):=(
+//help:Skeletonparadata("1");
+//help:Skeletonparadata("1",[pdata1,pdata2],[pdata3]);
+//help:Skeletonparadatac(options=[1(width),"File=y(/m/n)","Not=ptlist","Check=ptlist"]);
+ regional(Eps,Eps2,name2,name3,options,Ltype,Noflg,reL,eqL,opcindy,
+ Out,ObjL,Plt3L,Rr,pltdata1,pltdata2,Plt2L,ObjL,ii,Data,
+ Obj3,jj,Gd,PtD,size,tmp,tmp1,tmp2,color,
+ fileflg,wflg,mkflg,fname,varL,nn,chkL); //181101
+ name2="sk2d"+nm;
+ name3="sk3d"+nm;
+ fname=Fhead+"sk"+nm+".txt"; // no ketjs //181102
+ pltdata1=[];// 16.01.31
+ forall(pltdata1org,tmp1,
+ tmp=parse(tmp1);
+ tmp=apply(tmp,if(isstring(#),parse(#),#));//190506
+ pltdata1=append(pltdata1,tmp);
+ );
+ pltdata2=[];// 16.01.31
+ forall(pltdata2org,tmp1,
+ tmp=parse(tmp1);
+ tmp=apply(tmp,if(isstring(#),parse(#),#));//190506
+ pltdata2=append(pltdata2,tmp);
+ );
+ options=optionsorg;
+ tmp=Divoptions(options);
+ Ltype=tmp_1;
+ Noflg=tmp_2;
+ eqL=tmp_5;
+ reL=tmp_6; //16.02.28
+ color=tmp_(length(tmp)-2);
+ opcindy=tmp_(length(tmp));
+ Rr=0.075*1000/2.54/MilliIn;
+ size=1;
+ Eps2=0.05;
+ fileflg="N";
+ mkflg=1;
+ if(length(reL)>0, //16.02.28
+ size=reL_1;
+ Rr=size*Rr;
+ if(length(reL)>1,Eps2=reL_2);
+ );
+ forall(eqL, // no ketjs on //181101from
+ tmp=Strsplit(#,"=");
+ tmp1=Toupper(substring(tmp_1,0,1));
+ if(tmp1=="F", //190320
+ fileflg=Toupper(substring(tmp_2,0,1));
+ options=remove(options,[#]);
+ );
+ if(tmp1=="N",
+ tmp=parse(tmp_2);
+ if(Anyselected(tmp),
+ mkflg=-1;
+ );
+ options=remove(options,[#]);
+ );
+ if(tmp1=="C",
+ chkL=parse(tmp_2);
+ options=remove(options,[#]);
+ );
+ );// no ketjs off
+ Eps=10^(-4);
+ ObjL=Flattenlist(pltdata1);
+ Plt3L=Flattenlist(pltdata2);
+ tmp=apply(Plt3L,Projcoordcurve(#));
+ Plt2L=Flattenlist(tmp);
+ if((fileflg=="Y")%(fileflg=="M")&(mkflg>-1), // no ketjs on //181101from, 181103
+ wflg=1;
+ tmp=flatten(pltdata1org);
+ varL=tmp;
+ tmp1=flatten(pltdata2org);
+ forall(tmp1,
+ if(!contains(varL,#),
+ varL=append(varL,#);
+ );
+ );
+ varL=sort(varL);
+ forall(1..(length(varL)),nn,
+ tmp1=varL_nn;
+ tmp=select(GLIST,substring(#,0,length(tmp1))==tmp1);
+ varL_nn=tmp_1;
+ );
+ tmp=["THETA="+format(THETA,5),"PHI="+format(PHI,5)];
+ varL=concat(tmp,varL);
+ forall(chkL,
+ tmp=#+"="+Textformat(parse(#+".xy"),5);
+ varL=append(varL,tmp);
+ );
+ if(fileflg=="M",
+ fileflg="Y";
+ ,
+ tmp1="skeleton"+nm+".txt";
+ if(isexists(Dirwork,tmp1),
+ tmp2=load(tmp1);
+ tmp2=tokenize(tmp2,"//");
+ tmp2=tmp2_(1..(length(tmp2)-1));
+ if(tmp2==varL,
+ wflg=0;
+ if(isexists(Dirwork,fname),
+ mkflg=0;
+ ReadOutData(fname);
+ tmp=name3+"="+Textformat(parse(name3),5)+";"; //190415
+ parse(tmp);
+ tmp=name2+"="+Textformat(parse(name2),5)+";"; //190415
+ parse(tmp);
+ );
+ );
+ );
+ );
+ );// no ketjs off
+ if(mkflg==1, //181102
+///////////// tmp=apply(pltdata1,replace(#,"3d","2d"));
+ Out=[];
+ forall(1..(length(ObjL)),ii,
+ Obj3=ObjL_ii;
+ tmp=Projcoordcurve(Obj3);
+ Data=Makeskeletondata([tmp],Plt2L,Rr,Eps2);
+ forall(1..(length(Data)),jj,
+ Gd=Data_jj;
+ if((length(Gd)>1)
+ & (Norm(Ptcrv(1,Gd)-Ptcrv(2,Gd))>Eps),
+ PtD=[];
+ forall(1..(length(Gd)),
+ tmp=Gd_#;
+ tmp1=Invparapt(tmp,Obj3);
+ PtD=append(PtD,tmp1);
+ );
+ Out=append(Out,PtD);
+ );
+ );
+ );
+ Out=select(Out,length(Projcurve(#))>0); // 16.12.19
+ tmp1=apply(Out,textformat(#,5));
+ tmp=name3+"="+tmp1+";"; //190415
+ parse(tmp);
+ tmp=name2+"=Projcurve("+tmp1+");";
+ parse(tmp);
+ );
+ if(mkflg>-1,
+ Changestyle3d(pltdata1org,["nodisp"]);
+ );
+ if((Noflg<3)&(mkflg> -1), //no ketjs on //181103
+ if(fileflg!="Y", //181102
+ println("generate skeleton :"+name3);
+ tmp1=text(pltdata1org);
+ tmp1="list("+substring(tmp1,1,length(tmp1)-1)+")";
+ tmp2=text(pltdata2org);
+ tmp2="list("+substring(tmp2,1,length(tmp2)-1)+")";
+ tmp=name3+"=Skeletonpara3data("+tmp1+","+tmp2+",";
+ tmp=tmp+text(size)+")";
+ GLIST=append(GLIST,tmp);
+ tmp=name2+"=Projpara("+name3+")";
+ GLIST=append(GLIST,tmp);
+ ,
+ GLIST=append(GLIST,"ReadOutData("+Dq+fname+Dq+")");//181102
+ );
+ ); //no ketjs off
+ if((Noflg<2)&(mkflg>-1), //181103
+ if(isstring(Ltype),
+ if(!contains([[0,0,0],[0,0,0,1]],color),Com2nd("Setcolor("+color+")"));
+ Ltype=Getlinestyle(text(Noflg)+Ltype,name2);
+ if(!contains([[0,0,0],[0,0,0,1]],color),Com2nd("Setcolor("+text(KCOLOR)+")"));
+ ,
+ if(Noflg==1,Ltype=0);
+ );
+ GCLIST=append(GCLIST,[name2,Ltype,opcindy]);
+ if(SUBSCR==1,
+ Subgraph(name3,opcindy);
+ );
+ );
+ if(mkflg>-1, // no ketjs on
+ if((fileflg=="Y")&(wflg==1), //181102from
+ tmp1="skeleton"+nm+".txt";
+ SCEOUTPUT = openfile(tmp1);
+ forall(varL,
+ println(SCEOUTPUT,#+"//");
+ );
+ closefile(SCEOUTPUT);
+ WriteOutData(fname,[name3,parse(name3),name2,parse(name2)]);
+ ); //181102to
+ Out;
+ );// no ketjs off
+);
+////%Skeletondatacindy end////
+
+////%Makeskeletondata start////
+Makeskeletondata(Obj2L,Plt2L,R0,Eps2):=(
+ regional(Allres,Eps,Dmat,Dind,ii,Dt,nn1,nn2,Nind,Nobj,
+ Plt2,PhL,ClipL,ns,pt1,pt2,pt,pta,ptb,za,zb,z1,z2,t1,t2,te,
+ koc,KukanL,nn,tt,Rr,Flg,ii,jj,ptq,hh,Ku,Res,contflg,breakflg);
+ Eps=10.0^(-4);
+ Dmat=[];
+ Dind=[];
+ forall(1..(length(Plt2L)),ii,
+ Dt=Plt2L_ii;
+ nn1=length(Dmat)+1;
+ Dmat=concat(Dmat,Dt);
+ nn2=length(Dmat);
+ Dind=append(Dind,[nn1,nn2]);
+ );
+ Nind=length(Dind);
+ Allres=[];
+ forall(1..(length(Obj2L)),Nobj,
+ Plt2=Obj2L_Nobj;
+ PhL=Columnlist(Plt2,1..2);
+ ClipL=[];
+ forall(1..(length(PhL)-1),ns,
+ pt1=PhL_(ns..(ns+1));
+ forall(1..(length(Dind)),ii,
+ tmp=Dind_ii;
+ tmp=Dmat_(Dind_ii_1..Dind_ii_2);
+ pt2=Columnlist(tmp,1..2);
+ koc=Intersectcrvspp(pt1,pt2,[Eps]);
+ if(length(koc)>0,
+ breakflg=0;
+ forall(1..(length(koc)),jj,
+ contflg=0;
+ if(breakflg==0,
+ pt=Op(1,Op(jj,koc));
+ tmp=Op(2,Op(jj,koc));
+ if((tmp<1+Eps) & (ns==1),
+ contflg=1;
+ );
+ if(contflg==0,
+ if((tmp>length(pt1)-Eps)
+ & (ns==length(PhL)-1),
+ contflg=1;
+ );
+ );
+ if(contflg==0,
+ nn1=ns;
+ nn2=Op(3,Op(jj,koc));
+ tmp=Plt2_nn1;
+ pta=tmp_(1..2);
+ za=tmp_3;
+ tmp=Plt2_(nn1+1);
+ ptb=tmp_(1..2);
+ zb=tmp_3;
+ if(Norm(pta-ptb)<Eps,
+ contflg=1;
+ );
+ );
+ if(contflg==0,
+ t1=Norm(pta-pt)/Norm(pta-ptb);
+ z1=(1-t1)*za+t1*zb;
+ tmp=Dmat_(Dind_ii_1..Dind_ii_2);
+ tmp1=tmp_nn2;
+ pta=tmp1_(1..2);
+ za=tmp1_3;
+ tmp2=tmp_(nn2+1);
+ ptb=tmp2_(1..2);
+ zb=tmp2_3;
+ if(Norm(pta-ptb)<Eps,
+ contflg=1;
+ );
+ );
+ if(contflg==0,
+ t2=Norm(pta-pt)/Norm(pta-ptb);
+ z2=(1-t2)*za+t2*zb;
+ if(z1<z2-Eps2,
+ if(length(ClipL)==0,
+ tmp=1;
+ ,
+ tmp1=column(ClipL,1);
+ tmp1=apply(tmp1,#-pt_1);
+ tmp2=column(ClipL,2);
+ tmp2=apply(tmp2,#-pt_2);
+ tmp3=apply(tmp1,#^2)+apply(tmp2,#^2);
+ tmp=min(tmp3);
+ );
+ if(tmp>Eps^2,
+ tmp1=pt1_2-pt1_1;
+ tmp2=ptb-pta;
+ tmp3=Dotprod(tmp1,tmp2);
+ tmp3=tmp3/Norm(tmp1)/Norm(tmp2);
+ tmp=1-0.5*tmp3^2;
+ tmp1=concat(pt,[nn1,t1,R0/tmp]);
+ ClipL=append(ClipL,tmp1);
+ );
+ );
+ );
+ );
+ );
+ );
+ );
+ );
+ te=length(Plt2);
+ KukanL=[[1.0,te]];
+ pt1=PhL;
+ if(length(ClipL)>0,
+ forall(1..(length(ClipL)),ii,
+ tmp=ClipL_ii;
+ pt=tmp_(1..2);
+ nn=tmp_3;
+ tt=nn+tmp_4;
+ Rr=tmp_5;
+ Flg=0;
+ breakflg=0;
+ forall(reverse(1..nn),jj,
+ contflg=0;
+ if(breakflg==0,
+ ptq=Pointoncurve(jj,pt1);
+ if(Norm(pt-ptq)<Rr,
+ contflg=1;
+ );
+ if(contflg==0,
+ Flg=jj;
+ breakflg=1;
+ contflg=1;
+ );
+ );
+ );
+ if(Flg==0,
+ t1=1;
+ ,
+ t1=Flg; t2=tt;
+ hh=t2-t1;
+ forall(1..10,
+ hh=hh*0.5;
+ ptq=Pointoncurve(t1+hh,pt1);
+ if(Norm(pt-ptq)<Rr,
+ t2=t2-hh;
+ ,
+ t1=t1+hh;
+ );
+ );
+ );
+ Ku=[t1];
+ Flg=0;
+ breakflg=0;
+ forall((nn+1)..te,jj,
+ contflg=0;
+ if(breakflg==0,
+ ptq=Pointoncurve(jj,pt1);
+ if(Norm(pt-ptq)<Rr,
+ contflg=1;
+ );
+ if(contflg==0,
+ Flg=jj;
+ breakflg=1;
+ contflg=1;
+ );
+ );
+ );
+ if(Flg==0,
+ t2=te;
+ ,
+ t1=tt; t2=Flg;
+ hh=t2-t1;
+ forall(1..10,
+ hh=hh*0.5;
+ ptq=Pointoncurve(t1+hh,pt1);
+ if(Norm(pt-ptq)<Rr,
+ t1=t1+hh;
+ ,
+ t2=t2-hh;
+ );
+ );
+ );
+ Ku=append(Ku,t2);
+ KukanL=Kukannozoku(Ku,KukanL);
+ );
+ );
+ Res=[];
+ forall(1..(length(KukanL)),ii,
+ tmp=KukanL_ii;
+ t1=tmp_1; nn1=re(floor(t1));
+ t2=tmp_2; nn2=re(floor(t2));
+ PtL=[];
+ if(t1-nn1<1-Eps,
+ tmp=Pointoncurve(t1,pt1);
+ PtL=[tmp];
+ );
+ forall((nn1+1)..nn2,jj,
+ tmp=Pointoncurve(jj,pt1);
+ PtL=append(PtL,tmp);
+ );
+ if(t2-nn2>Eps,
+ tmp=Pointoncurve(t2,pt1);
+ PtL=append(PtL,tmp);
+ );
+ tmp=Listplot("",PtL,["nodata"]);
+ Res=append(Res,tmp);
+ );
+ Allres=concat(Allres,Res);
+ );
+
+ Allres;
+);
+////%Makeskeletondata end////
+
+////%Kukannozoku start////
+Kukannozoku(Jokyo,KukanL):=(
+ regional(Res,Eps,nn,ii,t1,t2,Ku,Flg,contflg,tmp,tmp1);
+ Eps=10^(-6);
+ nn=length(KukanL);
+ t1=Jokyo_1; t2=Jokyo_2;
+ tmp=KukanL_1;
+ t1=max(t1,tmp_1);
+ tmp=KukanL_nn;
+ t2=min(t2,tmp_2);
+ Res=[];
+ Flg=0;
+ contflg=0;
+ forall(1..nn,ii,
+ if(contflg==0,
+ Ku=KukanL_ii;
+ if(Flg==0,
+ if(Ku_2<t1,
+ Res=append(Res,Ku);
+ ,
+ Flg=1;
+ if(Ku_1<t1-Eps,
+ tmp=[Ku_1,t1];
+ Res=append(Res,tmp);
+ );
+ if(Ku_2>t2+Eps,
+ tmp=[t2,Ku_2];
+ Res=append(Res,tmp);
+ );
+ );
+ ,
+ if(Flg==1,
+ if(Ku_2<t2,
+ contflg=1;
+ ,
+ if(contflg==0,
+ Flg=2;
+ if(Ku_1<t2-Eps,
+ Ku=[t2,Ku_2];
+ );
+ Res=append(Res,Ku);
+ );
+ );
+ ,
+ if(contflg==0,
+ Res=append(Res,Ku);
+ );
+ );
+ );
+ );
+ );
+ Res;
+);
+////%Kukannozoku end////
+
+////////////////// end of current skeleton//////////////
+
+////%Projcoordcurve start////
+Projcoordcurve(Curve):=(
+ regional(SP,CP,ST,CT,Out,jj,pt,x,y,z,xz,yz,zz);
+ SP=sin(PHI); CP=cos(PHI);
+ ST=sin(THETA); CT=cos(THETA);
+ Out=[];
+ forall(1..(length(Curve)),jj,
+ pt=Curve_jj;
+ x=pt_1; y=pt_2; z=pt_3;
+ xz=-x*SP+y*CP;
+ yz=-x*CP*CT-y*SP*CT+z*ST;
+ zz=x*CP*ST+y*SP*ST+z*CT;
+ Out=append(Out,[xz,yz,zz]);
+ );
+ Out;
+);
+////%Projcoordcurve end////
+
+////%Divnohidhid start////
+Divnohidhid(nm,dt3dorg,nvec):=Divnohidhid(nm,dt3dorg,nvec,[],["do"]);
+Divnohidhid(nm,dt3dorg,nvec,optionorg,options2):=(
+//help:Divnohidhid("1","sc3d1",nvec,["Num=100"],["Num=100","do"]);
+ regional(name,dt3d,options,pvec,disp,nohid,hid,flg,tmp,tmp1,eqL);
+ name="nh"+nm;
+ options=optionorg;
+ tmp=Divoptions(options);
+ eqL=tmp_5;
+ disp="Y";
+ forall(eqL,
+ tmp=Toupper(substring(#,0,1));
+ if(tmp=="D",
+ tmp=indexof(#,"=");
+ disp=Toupper(substring(#,tmp,tmp+1));
+ options=remove(options,[#]);
+ );
+ );
+ if(isstring(dt3dorg),dt3d=parse(dt3dorg),dt3d=dt3dorg);
+ pvec=[sin(THETA)*cos(PHI),sin(THETA)*sin(PHI),cos(THETA)];
+ nohid=[];
+ hid=[];
+ flg=0;
+ forall(1..(length(dt3d)-1),
+ p1=dt3d_#;
+ p2=dt3d_(#+1);
+ tmp=assign(nvec,["x",p1_1,"y",p1_2,"z",p1_3]);
+ tmp=parse(tmp);
+ if(Dotprod(tmp,pvec)>0,
+ if(flg==0 % flg==-1,
+ nohid=append(nohid,[p1,p2]);
+ flg=1;
+ );
+ if(flg==1,
+ nohid_(length(nohid))=append(nohid_(length(nohid)),p2);
+ );
+ ,
+ if(flg==0 % flg==1,
+ hid=append(hid,[p1,p2]);
+ flg=-1;
+ );
+ if(flg==-1,
+ hid_(length(hid))=append(hid_(length(hid)),p2);
+ );
+ );
+ );
+ if(disp=="Y",
+ Changestyle3d([dt3dorg],["nodisp"]);
+ forall(1..length(nohid),
+ Spaceline(name+"nh"+text(#),nohid_#,options);
+ );
+ forall(1..length(hid),
+ Spaceline(name+"h"+text(#),hid_#,options2);
+ );
+ );
+ tmp1="[";
+ forall(nohid,tmp1=tmp1+textformat(#,5)+",");
+ tmp1=substring(tmp1,0,length(tmp1)-1)+"];"; //190415
+ parse(name+"nh="+tmp1);
+ tmp1="[";
+ forall(hid,tmp1=tmp1+textformat(#,5)+",");
+ tmp1=substring(tmp1,0,length(tmp1)-1)+"];"; //190415
+ parse(name+"h="+tmp1);
+ [nohid,hid];
+);
+////%Divnohidhid end////
+
+////%Beziersurf start////
+Beziersurf(nm,m,n,pL):=(
+//help:Beziersurf("pt",2,2,pL);
+ regional(p3dL,ptlistx,ptlilsty,ptlistz);
+ factorial(n):=(
+ regional(out);
+ out=1;
+ forall(1..n,
+ out=out*#;
+ );
+ out;
+ );
+ Deffun("Comb(n,r)",[
+ "regional(y)",
+ "y=factorial(n)/(factorial(r)*factorial(n-r))",
+ "y"
+ ]);
+ Deffun("Bterm(u,v,m,n,i,j)",[
+ "regional(y)",
+ "y=Comb(m,i)*u^i*(1-u)^(m-i)",
+ "y=y*Comb(n,j)*v^j*(1-v)^(n-j)",
+ "y"
+ ]);
+ Deffun("Ball(u,v,m,n,pL)",[
+ "regional(y,ii,jj,tmp,tmp1)",
+ "y=0",
+ "forall(0..m,ii,
+ forall(0..n,jj,
+ tmp=(n+1)*ii+jj+1;
+ tmp1=Op(tmp,pL);
+ tmp1=tmp1*Bterm(u,v,m,n,ii,jj);
+ y=y+tmp1;
+ )
+ )",
+ "y"
+ ]);
+ if(ispoint(pL_1),
+ p3dL=apply(pL,#.name+"3d"); //190505
+ ,
+ p3dL=apply(pL,parse(#+"3d"));
+ );
+ ptlistx=apply(p3dL,#_1);
+ ptlisty=apply(p3dL,#_2);
+ ptlistz=apply(p3dL,#_3);
+ Defvar(nm+"x",ptlistx);
+ Defvar(nm+"y",ptlisty);
+ Defvar(nm+"z",ptlistz);
+ tmp=[
+ "p",
+ "x=Ball(U,V,2,2,"+nm+"x)",
+ "y=Ball(U,V,2,2,"+nm+"y)",
+ "z=Ball(U,V,2,2,"+nm+"z)",
+ "U=[0,1]",
+ "V=[0,1]"
+ ];
+ tmp;
+);
+////%Beziersurf end////
+
+//help:end();
diff --git a/graphics/ketcindy/ketcindyfolder/scripts/ketlib/ketcindylibbasic1logr.txt b/graphics/ketcindy/ketcindyfolder/scripts/ketlib/ketcindylibbasic1logr.txt
new file mode 100644
index 0000000000..d77763598c
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/scripts/ketlib/ketcindylibbasic1logr.txt
@@ -0,0 +1,370 @@
+// 20190622
+// Implicitplot changed ("x","y" supported)
+// 20190603
+// Initglist changed (XMIN,... added )
+// 20190530
+// Initglist, Setglist, Addglist added
+// 20190514
+// Setenglish removed
+// 20190511
+// Implicitplot changed (Eps=>10^(-6))
+// Ketinit changed (KetcindyDataList initialized)
+// 20190508
+// Implicitplot debugged (bisection method employed )
+// 20190507
+// Replaceall added
+// 20190505
+// Ptselected changed (for KeTCinyJS, one point)
+// text(pt) => pt.name
+// 20190504
+// Ketinit changed (REMOVEPT,SLIDEFLG)
+// Colorname2rgb changed ("cindycolor" added)
+// 20190502
+// Pp -> pp, etc
+// 20190429
+// Colorname2rgb changed (lightgray added)
+// 20190426
+// Pointdata debugged ( case of geo-point )
+// 20190428
+// Ketinit changed (TABLECOUNT added )
+// 20190424
+// Framedata majorly changed/debugged
+// 20190423
+// Ketinit changed ( Frame not appeared in KeTCindyJS )
+// MeasureDepth majorly changed
+// 20190420
+// Plotdata changed (name in case of "-...")
+// 20190416
+// Ketinit changed (zenkaku space)
+// 20190415
+// parse( ..= ) changed ( ; added )
+// 20190412
+// Some functions moved to basic2
+// 20190409
+// Pointdata changed (color)
+// 20190406
+// Pointdata changed (size)
+// Implicitplot debugged (opstr )
+// 20190405
+// Pointdata changed (color,inside )
+// 20190323
+// Circledata changed ([Center,r] supported
+// Colorname2rgb changed ( in the case of no color, "Assign" added )
+// 20190311
+// Shade changed ( order of COM2ndlist)
+// Com2nd changed ("before" removed )
+// 20190301
+// Pointdata changed ( a single point => [[ , ]])
+// MeasureDepth => Measuredepth
+// 20190224
+// Shade changed ("Trim=n" added )
+// 20190223
+// Shadein debugged
+// Ketinit, Shade changed (SHADCTR added)
+// Ketinit debugged (positon Changework)
+// 20190221
+// Intersectcurves changed ( "out" sorted )
+// Changework changed ( "/kc.command" => Shellparent)
+// 20190220
+// Shadein added, Shade changed (Shadein for 1 data)
+// Shadein debugged
+// 20190219
+// Anglemark debugged ( tmp => tmp_2 )
+// 20190211
+// Deqplot changed ( for incorret form of equation )
+// 20190210
+// bug of "Msg=" fixed
+// 20190206
+// Deqplot changed ( ‘ replace to ` )
+// Lineplot,Plotdata,Paramplot,Circledata,Bowdata,Anglemark changed ("Msg" option)
+// Pointdata changed ("Msg" option)
+// 20190128
+// Ketinit changed (Userhome added)
+// Changesetting majorly changed
+// 20190127
+// Mvprod added
+// 20190126
+// Pointdata changed ( list of list removed, Ltype)
+// 20190125
+// Assign debugged ( for 1 argument)
+// Getlinestyle changed ( Ltype)
+// 20190122
+// no ketjs added (Ketinit)
+// 20190119
+// Getlinestyle changed/debugged (Ltype changed )
+// 20190118
+// Divoptions changed ("dr,thickness" )
+// 20190116
+// Ketinit() debuggded ( Mackc for Linux)
+// 20190115
+// Plotdata debugged( ( => [ )
+// Pointdata change( colorcode => colorcmyk2rgb)
+// 20190103
+// Paramplot debugged ( "pt" localized )
+// 20181231
+// Pointdata changed ( "Inside=(cmyk list)" option added )
+// Setorigin debugged (GENTEN used)
+// 20181230
+// Pointdata changed ( "Inside" option added )
+// Integrate debugged (case of funstr)
+// 20181216
+// Ketinit changed (AXSTYLE changed)
+// 20181215
+// Ketinit changed (AXSTYLE added)
+// Setarrow debugged
+// 20181214
+// Acos, Asin, Atan, Sqr added
+// Setarrow added
+// Arrowhead changed (options)
+// 20181212
+// Colorrgb2cmyk debugged
+// Colorcode changed ( some have been deleted)
+// Colorname2rgb added
+// Divoptions changed (color name)
+// Ketinit changed (Fillstore added)
+/ 20181209
+// Fillstore changed ( The color of ketcindy buttons fixed)
+// 20181125
+// Fillstore,Fillblack,Fillrestore added
+// 2018111
+// Connectseg debugged ( concat )
+// 20181112
+// Connectseg debugged ( concat )
+// Implicitplot changed ( "Msg=" added)
+// 20181111
+// eqL : Only the1st character used (basic2,... )
+// 20181110
+// Arrowdata,Arrowheaddata debugged ( option position,cut )
+// Arrowdata changed ( automatic naming supported)
+// Arrowhead changed ( cut option supported)
+// 20181109
+// Hatchdata changed (Default of "Max" changed to 50)
+// 20181103
+// Anyselected added
+// Hatchdata changed (option "File=", "Not=","Check=" added)
+// 20181030
+// Drawprocess,Workprocess changed (dispflg added)
+// 20181026
+// Findarea changed ( default of length=1)
+// 20181020
+// if(color!=KCOLOR => if((Noflg==0)&(color!=KCOLOR)
+// Setscaling,... ([SCALEX,SCALEY])
+// 20181018
+// Arrowheaddata,Arrowhead, Arrowdata changed (let pcrd be default )
+// Setscaling moved from basic2
+// 20181017
+// Ketinit,Changesetting changed (.ketcindy.conf and ketcindy.conf)
+// 20181016
+// Setwindow debugged (Pcrd removed)
+// 20181013
+// FindareaO, Findarea changed ( case of a curve with line segment)
+// Pointdata changed ( Size option )
+// 20181005
+// Hatchdata changed (option "Max=[1st,2nd]", second=total+restof1st)
+// 20181003
+// Hatchdata changed (option "Out=","Max=" added. "Out=" is for HatchdataR )
+// Hatchdata debugged (case of multiple points)
+// 20181001
+// Ketinit changed ( Ketinit(work) for workdirectory )
+// 20180929
+// Shade changed ("En=y" option added)
+// 20180928
+// Paramplot changed (case of stationary point, name -option)
+// Polarplot added
+// Divoptions changed (color in case of scalar*list)
+// 20180913
+// Chengesetting, Ketinit changed (getname() used)
+// 20180908
+// Ketinit changed (SlideMargin added)
+// 20180904
+// Color setting changed ( for KCOLOR)
+// 20180902
+// Arrowhead changed ( head trimmed if Inwindow==false )
+// 20180817
+// Ketinit changed (GPACK added)
+// Plotdata debugged ( Exc )
+// 20180801
+// Framedata changed ( Option "corner"("center") added to call Framedata2)
+// 20180723
+// Nearestptcrv changed ( for geometric point )
+// Paramoncurve(pP,Gdata) changed (for geometric point)
+// 20180722
+// color localized
+// Findarea changed (FindareaP,FindareaO)
+//20180720
+// Derivative, Tangentplot changed ( ch option added, coping with case of no interesects)
+//20180719
+// Listplot,Arrowdata changed ("Cutend"option added)
+// Derivative, Tangentplot changed ( Oshima's formula used )
+//20180718
+// Derivative chnaged (for plotdata)
+// Tangentplot added
+//20180717
+// Enclosing debugged ( min => min+Eps0)
+// Makehatch debugged (case where same point )
+// Hatchdata debugged ( "s",... )
+//20180716
+// Enclosing debugged ( selection of KL)
+//20180714
+// Setfiles changed ( OCNAME added )
+//20180713
+// Enclosing debugged (for Lineplot : distance of pts added )
+//20180711
+// Listplot,Pointdata changed (color localized )
+// Ptselected ( =Isptselected )
+//20180708
+// Integrate changed (Integratefn (o))
+// Polygonplot changed ( putpoint only in case ispoint(B), Geo)
+//20180707
+// Enclosing changed (epspara=1)
+//20180706
+// Enclosing changed (Enclosing2 => Enclosing)
+// Isptselected added
+// Hatchdata changed (Interval > *2 )
+// Enclosing debugged
+//20180705
+// Arrowhead debugged ( color )
+// Paramark debugged (Bname )
+//20180704
+// Drawsegmark debugged ( color option)
+//20180624
+// Ovaldata debugged ( case where Rc= 0)
+//20180619
+// Hatchdata debugged ( ns..ne=>ns..ne-1, near point removed )
+//20180618
+// Setfiles,Setparent,Changework changed (for null string)
+//20180613
+// Shade changed ( name, pointlist supported, Com2nd("before"))
+// Shade debugged (color,opcindy)
+// WritetoRS changed (for COM2ndlistb)
+//20180612
+// Com2nd changed ("before" options added )
+//20180609
+// Ketinit changed (CommonMake added )
+//20180608
+// Ketinit changed (Namecdy defined )
+//20180606
+// Changework debugged ( case where "Sub=n" )
+//20180605
+// Changework changed ( "Sub=n" option supported )
+//20180603
+// Shade changed ( option density supported )
+// Addcolor removed
+// Setcolor(color,option),Setcolorrgb removed
+// Setcolor renewed
+// Divoptions degugged (KCOLOR)
+// Listplot,... changed (KCOLOR)
+// Pointdata changed (color)
+//20180602
+// Divoptions changed ( "Color=" supported )
+// Changestyle,.... changed ("Color=" supported)
+// Changetyle changed (case in which name not found)
+// Shade debugged ( color )
+// Rotatedata,... degugged ( for list of plotdata )
+//20180530
+// Anglemark changed (opstr,Brat=1.2)
+// Pointdata degugged (for single point)
+//20180527
+// Deqplot changed ( ' as default )
+//20180513
+// Setunitlen debugged ( string => UI )
+//20180506
+// Anglemark changed ( [A,B,angle] supported )
+//20180505
+// Strsplit added
+//20180501
+// MeasureDepth debugged ( for blank list )
+//20180420
+// Ketinit changed ( Changesetting moved to ketoutset.txt )
+//20180413
+// Ketinit changed ( utf for windows removed )
+//20180408
+// Divoptions changed ( to remove null string )
+// Changework changed (nkfwin)
+// Hyperbolaplot debugged
+// Derivative debugged
+//20180405
+// Ketinit changed (order of changesettiing, Dircdy)
+//20180402
+// Implicitplot, Connectseg added
+//20180329
+// Ketinit changed (changing of Dircdy)
+// Changesetting added
+// Derivative changed ( Numerical method supportted )
+//20180328
+// Cindyname (=Cdyname ) added
+// Cindyfile,Cindypath deleted
+//20180317
+// IntersectcurvesPp changed
+// Collectsameseg added, Collectnear commented out
+// 2018.02.11
+// Dqq added ( = DqDq)
+// 2018.02.06
+// Intersectpartseg debugged
+// 2018.02.02
+// Enclosing2 changed (for distanted curves, startpt option removed )
+// 2018.02.01
+// Makehatch changed ( in accordance with Intersectseg )
+// 2018.01.30
+// Intersectseg changed ( for the case of no intersect )
+// 2018.01.29
+// Intersectpartseg changed ( for the case curves are strings )
+// Textformat changed ( for null list )
+// 2018.01.26
+// Enclosing2 (new enclosing ), Makehatch, Hatchdatacindy added
+// 2018.01.15
+// Setunitlen changed ( as R )
+// Ketinit changed (Marklennow,... added as R )
+// 2018.01.07
+// Collectnear added
+// Intersectcurves changed (Collectnear used)
+// 2018.01.05
+// Intersectcurves changed (LLcrd)
+// Intersectcurvespt added
+// Intersectpartseg debugged
+// Intersectline changed
+// s:2018.01.04
+// PointonCurve debugged ( t >=1, t<=length(g) )
+// Intersectcurves.... added
+// s:2017.12.27
+// Getcdyname(Cdyname) changed
+// s:2017.12.03
+// Ketinit changed (definition of LibnameS )
+// s:2017.12.01
+// Ketinit changed (to modify Dircdy )
+// s:2017.11.27
+// Setparent added ( for Texparent)
+// Getcdyname added ( name of the current cdy file)
+// s:2017.11.24
+// Changework changed ( for the case of double pathsep() in dir, subdir )
+// s:2017.11.20
+// Changework changed ( for the case of (ex) dir=".../" )
+// s:2017.11.12
+// Ketinit debugged (Fhead)
+// s:2017.10.24
+// Ketinit changed (Slidename added)
+// s:2017.10.23
+// Pointdata changed (for string )
+// s:2017.10.14
+// Ketinit() changed (Fhead)
+// s:2017.10.13
+// Ketinit() changed (definition of Shellparent,Shellchild)
+// s:2017.10.07
+// Pointdata debugged
+// s:2017.10.07
+// Setcolor debugged ( \ => \\ )
+// s:2017.10.06
+// Deqplot changed
+// s:2017.08.29
+// Ketinit changed (LibnameS)
+//2017.09.22
+// Texcom debugged
+// Setcolor changed ( Texcom used )
+//2017.09.18
+// SCIWR,SCIRE removed
+// 2017.09.17
+// Ketinit changed ( PathS=6... removed )
+// 2017.09.13
+// Changed to FnameR
+
+
diff --git a/graphics/ketcindy/ketcindyfolder/scripts/ketlib/ketcindylibbasic1r.cs b/graphics/ketcindy/ketcindyfolder/scripts/ketlib/ketcindylibbasic1r.cs
new file mode 100644
index 0000000000..c68a550dd1
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/scripts/ketlib/ketcindylibbasic1r.cs
@@ -0,0 +1,5422 @@
+// Copyright (C) 2014 Setsuo Takato, KETCindy Japan project team
+//
+//This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see <http://www.gnu.org/licenses/>
+//
+
+println("KeTCindy V.3.2.9");
+println(ketjavaversion());
+println("ketcindylibbasic1[20190622] loaded");
+
+//help:start();
+
+//help:drawimage([0,0],"picture.png",scale->2,alpha->0.4);
+//help:drawtext((2,1),"Text",size->2);
+//help:system(list=append(list,"a"););
+//help:system(list=concat(list,["a","b"]););
+//help:system(arccos,arcsin,arctan);
+//help:system(abs,round,floor,ceil);
+
+//help:Option1(["dr","dr,2","da","da,2,1","do","do,1,2"]);
+//help:Option2(["notex","nodisp","nodata"]);
+
+//help:getdirhead();
+//help:gedirhead("/Applications");
+//help:gedirhead("C:\Users\(username)");
+//help:setpath();
+
+Ch=[0]; ChNum=1;
+
+////%Ketinit start////
+Ketinit():=Ketinit("fig",1,[-5,5],[-5,5]); //181001
+Ketinit(Arg):=(//181001from
+ if(isstring(Arg),
+ Ketinit(Arg,1,[-5,5],[-5,5]);
+ ,
+ Ketinit("fig",Arg,[-5,5],[-5,5]);
+ );
+);
+Ketinit(work,sy,rangex,rangey):=(//181001to
+ //help:Ketinit();
+ //help:Ketinit("");
+ regional(pt,tmp,tmp1,tmp2,letterc,boxc,shadowc,mboxc);
+ PenThickInit=8;
+ ULEN="1cm";
+ MEMORI=0.05;//18.01.15from
+ MEMORIInit=MEMORI;
+ MEMORINow=MEMORI;
+ MARKLEN=0.05;
+ MARKLENInit=MARKLEN; //180504
+ MARKLENNow= MARKLEN;
+ GENTEN=[0,0];//18.01.15to
+ TABLECOUNT=0; //190428
+ KETPICLAYER=20;
+ MilliIn=1/2.54*1000;
+ PenThick=round(MilliIn*0.02);
+ PenThickInit=PenThick;
+ TenSizeInit=0.02;
+ TenSize=TenSizeInit;
+ YaSize=1; YaAngle=18; YaPosition=1;
+ YaCut=0; YasenStyle="dr,1"; Yajiristyle="tf";
+ KETPICCOUNT=1;
+ KCOLOR=[0,0,0];
+ GLIST=[]; // no ketjs
+ GCLIST=[];
+// GDATALIST=[]; //no ketjs on
+ GOUTLIST=[];
+ POUTLIST=[]; // no ketjs off
+ VLIST=[];
+ FUNLIST=[];
+ LETTERlist=[];
+ COM0thlist=[]; // no ketjs on
+ COM1stlist=[];
+ COM2ndlist=[]; // no ketjs off
+ // COM2ndlistb=[]; //180612
+ ADDAXES="1";
+ AXSTYLE=["l","x","e","y","n","O","sw","","",""]; //181216
+ AXCOUNT=1; //181215
+ SHADECTR=1; //190222
+ LFmark=unicode("000a");
+ CRmark=unicode("000d");//16.12.13
+ Dq=unicode("0022");
+ CommonMake=0;//180610
+ WaitUnit=10;
+ CONTINUED=0;
+ OutComList=[];
+ OutFileLIst=[]; // 15.10.22
+ FigPdfList=[]; // 16.04.08
+ Fillstore(); //181212
+ ADDPACK=[]; // 16.05.16
+ GPACK="tpic"; //180817
+ ErrFlag=0;
+ KETJSOP=[]; //190129
+ REMOVEPTJS=[]; SLIDEFLG="Y"; //190504
+ KetcindyjsDataList=[];
+// setdirectory(Dirwork);
+ if(!isstring(Fhead), // 17.10.13from, 17.11.12
+ Fhead=text(curkernel());
+ Fhead=replace(Fhead,".cdy","");
+ Slidename=Fhead; //17.10.24
+ );//17.11.12
+ Dircdy=replace(Dircdy,"%E3%80%80",unicode("3000"));//190416
+ Namecdy=Cindyname();//180608
+ tmp1=Indexall(Dircdy,"%"); //180329from
+ if(length(tmp1)>0,
+ tmp1=append(tmp1,length(Dircdy));
+ tmp2=substring(Dircdy,0,tmp1_1-1);
+ forall(1..(length(tmp1)-1),
+ tmp=substring(Dircdy,tmp1_#,tmp1_#+2);
+ tmp2=tmp2+unicode(tmp);
+ tmp2=tmp2+substring(Dircdy,tmp1_#+2,tmp1_(#+1)-1);
+ );
+ Dircdy=tmp2;
+ ); //180329to
+ if(iswindows(), //17.12.01
+ Dircdy=replace(Dircdy,"/",pathsep());
+ if(substring(Dircdy,0,1)==pathsep(),
+ Dircdy=substring(Dircdy,1,length(Dircdy));
+ );
+ );
+ Userhome=Homehead+pathsep()+getname(); //190128
+ if(iswindows(),
+ Batparent="\kc.bat";
+ ,
+ if(ismacosx(), //181125from
+ Shellparent="/kc.command";
+ Mackc="open"; //190222
+ ,
+ Shellparent="/kc.sh";
+ Mackc="bash"; //190222
+ ); //181125to
+ );
+ Changesetting(); //190128
+ Changework(Dircdy+pathsep()+work); //180329to,181001
+ Fnametex=Fhead+".tex";
+ FnameR=Fhead+".r";
+ FnamebodyR=Fhead+"body.r";
+ Fnameout=Fhead+".txt"; // 17.10.13to
+// no ketjs off 190122
+ ArrowlineNumber=1; // 15.01.05
+ ArrowheadNumber=1;
+ BezierNumber=1; //15.01.03
+ SCALEX=1;
+ SCALEY=sy;
+// Setscaling(sy);
+ XMIN=rangex_1/SCALEX;
+ XMAX=rangex_2/SCALEX;
+ YMIN=rangey_1/SCALEY;
+ YMAX=rangey_2/SCALEY;
+ Setwindow("Msg=n"); // 16.05.31
+// no ketjs on 190122
+ // for Presentation
+ letterc=[0.98,0.13,0,0.43]; boxc=[0.2,0,0,0];//190307 [0,0.32,0.52,0];
+ shadowc=[0,0,0,0.5]; mboxc="yellow"; //17.03.02 regional debugged
+ SlideColorList=[letterc,boxc,boxc,boxc,shadowc,shadowc,6,1.3,
+ letterc,mboxc,mboxc,mboxc,62,2,letterc];
+ SlideMargin=[0,0]; //180908
+ ThinDense=0.1;//17.01.08
+ if(indexof(PathT,"pdflatex")+indexof(PathT,"lualatex")>0,
+ LibnameS=replace(LibnameS,"ketpic","ketpic2e");
+ );//17.12.03until
+// no ketjs off 190122
+);
+////%Ketinit end////
+
+////%Initglist start//// 190530
+Initglist():=(
+ GLIST=[]; // no ketjs
+ GCLIST=[];
+ COM0thlist=[]; // no ketjs on
+ COM1stlist=[];
+ COM2ndlist=[]; // no ketjs off
+ KCOLOR=[0,0,0];
+ SCALEX=1;
+ SCALEY=1;
+ XMIN=SW.x; XMAX=NE.x; //190603[2lines]
+ YMIN=SW.y; YMAX=NE.y;
+);
+////%Initglist end////
+
+////%Setglist start//// 190530
+Setglist():=(
+ GLISTadd=GLIST;
+ GCLISTadd=GCLIST;
+ COM0thlistadd=COM0thlist; // no ketjs on
+ COM1stlistadd=COM1stlist;
+ COM2ndlistadd=COM2ndlist; // no ketjs off
+);
+////%Setglist end////
+
+////%Addglist start//// 190530
+Addglist():=(
+ GLIST=GLISTadd;
+ GCLIST=GCLISTadd;
+ COM0thlist=COM0thlist; // no ketjs on
+ COM1stlist=COM1stlistadd;
+ COM2ndlist=COM2ndlistadd; // no ketjs off
+);
+////%Addglist end////
+
+////%Fillstore start////
+Fillstore():=(
+ regional(tmp,tmp1,out,dtL,txtL,clrL,txt,clr,nn,jj);
+ dtL=[ //181209from
+ ["Figure",[1,0.29,0.29]],["Parent",[1,1,0]],
+ ["ParaF",[1,0.93,0.6]],["Flip",[0,0,1]],["Anime",[0.51,0.95,1]],
+ ["Title",[0,1,0]],["Slide",[0.47,0,0.72]],["Digest",[1,0.74,0.47]],
+ ["KeTJS",[0,1,1]],["KeTJSoff",[0,1,1]],
+ ["Objview",[0,1,0]],
+ ["Play",[1.0, 0.741, 0.467]],["Pause",[1.0, 0.741, 0.467]], //190426[2lines]
+ ["Rev",[1.0, 0.741, 0.467]],["Stop",[1.0, 0.741, 0.467]],
+ ["Skele",[1.0, 0.741, 0.467]],["Nohid",[1.0, 0.741, 0.467]]
+ ];
+ txtL=apply(dtL,#_1);
+ clrL=apply(dtL,#_2);
+ tmp1=allelements();
+ tmp1=select(tmp1,indexof(#.name,"Text")>0);
+ out=[];
+ forall(1..(length(tmp1)),nn,
+ tmp=tmp1_nn;
+ txt=tmp.text;
+ tmp=select(1..(length(txtL)),txtL_#==txt);
+ if(length(tmp)>0,
+ jj=tmp_1;
+ clr=clrL_jj;
+ tmp=tmp1_nn;
+ tmp.fillcolor=clr;
+ ,
+ tmp=tmp1_nn;
+ clr=tmp.fillcolor;
+ );
+ out=append(out,[tmp.name,clr,tmp.text]);
+ ); //181209to
+ out;
+);
+////%Fillstore end////
+
+////%Fillblack start////
+Fillblack():=Fillblack("Running");
+Fillblack(str):=(
+ regional(tmp,tmp1,store);
+ store=Fillstore(); //181209
+ tmp=select(tmp1,#.name=="Text0");
+ if(length(tmp)==0,
+ forall(store,
+ tmp=parse(#_1+";");
+ tmp.fillcolor=[0,0,0];
+ );
+ ,
+ Text0.text=str;
+ );
+ store;
+);
+////%Fillblack end////
+
+////%Fillrestore start////
+Fillrestore(store):=(
+ regional(tmp);
+ tmp=select(store,#_1=="Text0");
+ if(length(tmp)==0,
+ forall(store,
+ tmp=parse(#_1);
+ tmp.fillcolor=#_2;
+ );
+ ,
+ tmp=tmp_1;
+ Text0.text=tmp_3;
+ );
+);
+////%Fillrestore end////
+
+////%Readlines start////
+Readlines(file):=Readlines(Dirwork,file); //181126
+Readlines(path,file):=(
+//help:Readlines(path,file);
+ regional(tmp,out);
+ out=readfile2str(path,file);
+ out=tokenize(out,"/L"+"F/"); //190129
+ tmp=out_(length(out));
+ if(length(tmp)==0,
+ out=out_(1..(length(out)-1));
+ );
+ out;
+);
+////%Readlines end////
+
+////%Changesetting start////
+Changesetting():=( //190128
+ regional(dir,fname);
+ dir=Homehead+pathsep()+getname();
+ fname=".ketcindy.conf";
+ if(isexists(dir,fname),
+ println("read "+fname+" in "+dir);
+ setdirectory(dir);
+ import(fname);
+ );
+ dir=Dircdy; fname="ketcindy.conf";
+ if(isexists(dir,fname),
+ println("read "+fname+" in "+dir);
+ setdirectory(dir);
+ import(fname);
+ );
+);
+////%Changesetting end////
+
+////%Cindyname start////
+Cindyname():=Getcdyname();
+Cdyname():=Getcdyname();
+Getcdyname():=( //17.12.27
+//help:Cindyname();
+ regional(out);
+ out=text(curkernel());
+ out=replace(out,".cdy","");
+);
+////%Cindyname end////
+
+////%Setwindow start////
+Setwindow():=Setwindow("Msg=yes");
+Setwindow(str):=(
+ regional(tmp,tmp1,tmp2,msg);
+ msg="y";
+ tmp=indexof(str,"="); // 16.02.10
+ tmp1=Toupper(substring(str,tmp,tmp+1));
+ if(tmp1=="N",msg="n");
+ if((ispoint(SW) & ispoint(NE)),
+ tmp1=Lcrd(SW);
+ tmp2=Lcrd(NE);
+ XMIN=tmp1_1; XMAX=tmp2_1;
+ YMIN=tmp1_2; YMAX=tmp2_2;
+ ,
+// XMIN=-5; XMAX=5;
+// YMIN=Lcrdy(-5); YMAX=Lcrdy(5);
+// createpoint("SW",Pcrd([XMIN,YMIN]));
+// createpoint("NE", Pcrd([XMAX,YMAX]));
+ Putpoint("SW",Pcrd([XMIN,YMIN]));
+ Putpoint("NE", Pcrd([XMAX,YMAX]));
+ );
+ if(msg=="y", // no ketjs on
+ println("Setwindow(["+XMIN+","+XMAX+"],["+YMIN+","+YMAX+"])");
+ );
+ layer(KETPICLAYER);
+ autoclearlayer(KETPICLAYER,true);
+ drawpoly([Pcrd([XMIN,YMIN]), Pcrd([XMAX,YMIN]),
+ Pcrd([XMAX,YMAX]),Pcrd([XMIN,YMAX])],color->[1,1,1]); // no ketjs off
+);
+Setwindow(xrange,yrange):=(
+//help:Setwindow([2,3],[-1,1]);
+ XMIN=xrange_1;
+ XMAX=xrange_2;
+ YMIN=yrange_1;
+ YMAX=yrange_2;
+ Putpoint("SW",[XMIN,YMIN]);//181016
+ Putpoint("NE",[XMAX,YMAX]);//181016
+// Ketinit();
+);
+////%Setwindow end////
+
+////%Setfiles start////
+Setfiles():=Setfiles(""); //180618
+Setfiles(file):=( // 17.01.16
+//help:Setfiles(file);
+ if(length(file)>0, //180618
+ Fhead=file;
+ Fnametex=Fhead+".tex";
+ FnameR=Fhead+".r"; //17.10.14
+ FnamebodyR=Fhead+"body.sce";
+ Fnameout=Fhead+".txt";
+ OCNAME=Fhead; //180714 for obj
+ ,
+ println("Fhead="+Dqq(Fhead)); //180618
+ );
+);
+////%Setfiles end////
+
+////%Setparent start////
+Setparent():=Setparent("");
+Setparent(file):=( // 17.11.27
+//help:Setparent(file);
+ if(length(file)>0, //180618
+ Texparent=file;
+ ,
+ if(isstring(Texparent), //180618from
+ println("Texparent="+Dqq(Texparent));
+ ,
+ println("Texparent not defined");
+ );
+ ); //180618to
+);
+////%Setparent end////
+
+////%Dqq start////
+Dqq(str):=DqDq(str); //18.02.11
+////%Dqq end////
+////%DqDq start////
+DqDq(str):=(
+//help(Dqq("ab"); => Dq+"ab"+Dq)
+ unicode("0022")+str+unicode("0022");
+);
+////%DqDq end////
+
+////%PPa start//// 190111
+PPa():=PPa("");
+PPa(str):="("+str+")";
+////%PPa end////
+
+////%PaO start//// 190111
+PaO():=PaO("");
+PaO(Arg):=(
+ regional(out);
+ if(isstring(Arg),
+ out="("+Arg;
+ ,
+ out="";
+ repeat(Arg,
+ out=out+"(";
+ );
+ );
+ out;
+);
+////%PaO end////
+
+////%PaC start//// 190111
+PaC():=PaC("");
+PaC(Arg):=(
+ regional(out);
+ if(isstring(Arg),
+ out=Arg+")";
+ ,
+ out="";
+ repeat(Arg,
+ out=out+")";
+ );
+ );
+ out;
+);
+////%PaC end////
+
+////%PPa start//// 190111
+PPa(str):="("+str+")";
+////%PPa end////
+
+////%Tab2list start////
+Tab2list(dtstr):=Tab2list(dtstr,[]);
+Tab2list(dtstrorg,options):=(
+//help:Tab2list(datastr);
+//help:Tab2list(options=["Blank=(null)","Sep=tab"]);
+ regional(dtstr,dtall,dt,rep,out,crm,lfm,htm,first,eqL,sep,
+ tmp,tmp1,tmp2);
+ crm=unicode("000d");
+ lfm=unicode("000a");
+ htm=unicode("0009");
+ tmp=Divoptions(options);
+ eqL=tmp_5;
+ rep="";
+ sep=htm;
+ forall(eqL,
+ tmp=indexof(#,"=");
+ tmp1=Toupper(substring(#,0,1));
+ tmp2=substring(#,tmp,length(#));
+ if(tmp1=="B",
+ tmp1="0123456789+-."; // 16.09.28from
+ tmp=substring(tmp2,0,1);
+ if(indexof(tmp1,tmp)>0,rep=parse(tmp2),rep=tmp2); // 16.09.28until
+ );
+ if(tmp1=="S", // 16.12.04
+ if(tmp2!="tab",sep=tmp2);
+ );
+ );
+ first=lfm; // 16.09.05from
+ if(indexof(dtstr,crm)>0,
+ first=crm;
+ if(indexof(dtstr,crm+lfm)>0,
+ first=first+lfm;
+ ); // 16.09.05until
+ );
+ dtstr=dtstrorg;// 16.09.19from
+ tmp=substring(dtstr,length( dtstr)-1,length(dtstr));
+ if(tmp!=lfm,
+ dtstr=dtstr+first;
+ );// 16.09.19until
+ tmp1=Indexall(dtstr,first);
+ tmp1=prepend(0,tmp1);
+ tmp1=append(tmp1,length(dtstr));
+ dtall=[];
+ forall(1..(length(tmp1)-1),
+ tmp=substring(dtstr,tmp1_#,tmp1_(#+1)-1);
+ if(length(tmp)>0,
+ dtall=append(dtall,tmp);
+ );
+ );
+ out=[];
+ forall(dtall,dt,
+ tmp1=tokenize(dt,sep); //16.12.04
+ tmp2=[];
+ forall(tmp1,
+ if(isstring(#),tmp=parse(#),tmp=#);
+ if(!isreal(tmp),
+ if(length(#)>0,tmp=#,tmp=rep);
+ );
+ tmp2=append(tmp2,tmp);
+ );
+ out=append(out,tmp2);
+ );
+ out;
+);
+////%Tab2list end////
+
+////%Columnlist start////
+Columnlist(dt,list):=( // 16.09.04
+//help:Columnlist(dt,1..3);
+ apply(dt,#_list);
+);
+////%Columnlist end////
+
+////%Dispmat start////
+Dispmat(dt):=( // 16.09.16
+//help:Dispmat(dt);
+ regional(htm,crm,lfm,row,tmp,tmp1,tmp2);
+ htm=unicode("0009");
+ crm=unicode("000d");
+ lfm=unicode("000a");
+ tmp2="";
+ forall(dt,row,
+ tmp1="";
+ forall(row,
+ if(isstring(#),
+ tmp1=tmp1+#+htm;
+ ,
+ tmp1=tmp1+text(#)+htm;
+ );
+ );
+ tmp1=substring(tmp1,0,length(tmp1)-1);
+ tmp1=tmp1+lfm;
+ tmp2=tmp2+tmp1;
+ );
+ print(tmp2);
+ println();
+);
+////%Dispmat end////
+
+////%Sep1000 start////
+Sep1000(va):=( //17.07.18
+//help:Sep1000(1344555);
+//help:Sep1000([12456,55567]);
+ regional(str,nall,out);
+ if(islist(va),
+ out=apply(va,Sep1000(#));
+ ,
+ str=text(va);
+ nall=length(str);
+ out="";
+ forall(1..nall,
+ out=str_(nall+1-#)+out;
+ if((#<nall)&(mod(#,3)==0),
+ out=","+out;
+ );
+ );
+ );
+ out;
+);
+////%Sep1000 end////
+
+////%Acos start////
+Acos(x):=(
+//help:Acos(1.000001);
+ re(arccos(x));
+);
+////%Acos end////
+
+////%Asin start////
+Asin(x):=(
+//help:Asin(1.000001);
+ re(arcsin(x));
+);
+////%Asin end////
+
+////%Atan start////
+Atan(x):=(
+//help:Atan(1);
+ re(arctan(x));
+);
+////%Atan end////
+
+////%Sqr start////
+Sqr(x):=(
+//help:Sqr(-0.00001);
+ if(x<0,0,sqrt(x));
+);
+////%Sqr end////
+
+////%Factorial start////
+Factorial(n):=(
+//help:Factorial(5);
+ regional(out);
+ out=1;
+ forall(1..n,
+ out=out*#;
+ );
+ out;
+);
+////%Factorial end////
+
+////%Norm start////
+Norm(v1):=( // 16.09.01
+//help:Norm([2,1,3]);
+ regional(out,tmp,tmp1,tmp2);
+ out=0;
+ forall(1..(length(v1)),
+ out=out+(v1_#)^2;
+ );
+ out=sqrt(out);
+ out;
+);
+Norm(v1,v2):=(
+ Norm(v2-v1);
+);
+////%Norm end////
+
+// 16.03.28
+////%Removespace start////
+Removespace(str):=(
+//help:Removespace(" a b c ");
+ regional(tmp,flg,out);
+ tmp=length(str)+1;
+ flg=0;
+ forall(1..(length(str)),
+ if(flg==0,
+ if((str_#)!=" ",
+ tmp=#;
+ flg=1;
+ );
+ );
+ );
+ out=substring(str,tmp-1,length(str));
+ flg=0;
+ tmp=0;
+ forall(reverse(1..(length(out))),
+ if(flg==0,
+ if((out_#)!=" ",
+ tmp=#;
+ flg=1;
+ );
+ );
+ );
+ out=substring(out,0,tmp);
+);
+////%Removespace end////
+
+////%Indexall start////
+Indexall(str,key):=(
+ regional(rest,out,flg,tmp,tmp1,);
+ out=[];
+ rest=str;
+ flg=0;
+ forall(1..(length(str)),
+ if(flg==0,
+ tmp=indexof(rest,key);
+ if(tmp>0,
+ tmp1=tmp+length(str)-length(rest);
+ out=append(out,tmp1);
+ rest=substring(rest,tmp,length(rest));
+ ,
+ flg=1;
+ );
+ );
+ );
+ out;
+);
+////%Indexall end////
+
+////%Strsplit start////
+Strsplit(str,key):=( //180505
+//help:Strsplit(string,"=");
+ regional(start,out,tmp1,tmp2);
+ tmp1=Indexall(str,key);
+ out=[]; start=0;
+ forall(tmp1,
+ out=append(out,substring(str,start,#-1));
+ start=#;
+ );
+ out=append(out,substring(str,start,length(str)));
+ out;
+);
+////%Strsplit end////
+
+////%Parlevel start////
+Parlevel(str):=Bracket(str); // 16.05.22from
+////%Parlevel end////
+////%Bracket start////
+Bracket(str):=Bracket(str,"()");
+Bracket(str,br):=(
+//help:Bracket(string,"()");
+ regional(ph,pt,out,noL,ncL,nall,level,tmp);
+ ph=substring(br,0,1);
+ pt=substring(br,1,2);
+ noL=Indexall(str,ph);
+ ncL=Indexall(str,pt); // 16.05.22until
+ nall=sort(concat(noL,ncL));
+ level=0;
+ out=[];
+ forall(nall,
+ if(contains(noL,#),
+ level=level+1;
+ tmp=[#,level];
+ ,
+ tmp=[#,-level];
+ level=level-1;
+ );
+ out=append(out,tmp);
+ );
+ out;
+);
+////%Bracket end////
+
+////%Pardiagram start////
+Pardiagram(str):=Pardiagram(str,[20]);
+Pardiagram(str,options):=(
+//help:Pardiagram(exprstr);
+//help:Pardiagram(options=[20,"Disp=y","Fig=y"]);
+ regional(reL,eqL,len,disp,scheme,bra,nn,sta,out,
+ opos,cpos,all,dx,dh,mxh,start,nn,p1,p2,p3,p4,tmp,tmp1,tmp2,tmp3);
+ len=20;
+ disp=1;
+ scheme=1;
+ tmp=Divoptions(options);
+ eqL=tmp_5;
+ reL=tmp_6;
+ forall(eqL,
+ tmp=indexof(#,"=");
+ tmp1=Toupper(substring(#,0,1));
+ tmp2=Toupper(substring(#,tmp,tmp+1));
+ if(tmp1=="D",
+ if(tmp2=="N" % tmp2=="F",disp=0);
+ );
+ if(tmp1=="F",
+ if(tmp2=="N" % tmp2=="F",scheme=0);
+ );
+ );
+ forall(reL,
+ len=#;
+ );
+ bra=Bracket(str);
+ tmp1=select(bra,#_2>0);
+ tmp2=select(bra,#_2<0);
+ out=[];
+ forall(1..(length(tmp1)),nn,
+ sta=tmp1_nn;
+ tmp=select(tmp2,#_2==-sta_2 & #_1>sta_1);
+ tmp=tmp_1;
+ out=append(out, [substring(str,sta_1-1,tmp_1),
+ nn,sta_2,sta_1,tmp_1,
+ substring(str,sta_1-1,sta_1+len-1),
+ substring(str,tmp_1-len,tmp_1)] );
+ );
+ if(disp==1,
+ println("Printing from 2 to 7. (Extract full string using _1)");
+ apply(out,println(#_(2..7)));
+ );
+ if(scheme==1,
+ opos=sort(apply(out,#_4));
+ cpos=sort(apply(out,#_5));
+ tmp=concat(opos,cpos);
+ all=sort(tmp);
+ mxh=max(apply(out,#_3));
+ dx=1;
+ dh=1;
+ start=[-5,5];
+ forall(1..(length(all)),nn,
+ tmp=select(out,#_4==all_nn);
+ if(length(tmp)>0,
+ tmp1=tmp_1_3;
+ tmp2=tmp_1_4;
+ tmp3=tmp_1_5;
+ tmp=select(1..(length(all)),all_#==tmp3);
+ tmp4=tmp_1;
+ p1=start+[(nn-1)*dx,-0.5];
+ p2=p1+[0,(tmp1-mxh-1)*dh];
+ p3=p2+[(tmp4-nn)*dx,0];
+ p4=p3+[0,(mxh+1-tmp1)*dh];
+ Listplot("ch"+text(nn),[p1,p2,p3,p4],["Message=n"]);
+ Letter([p2,"s",text(tmp2),p3,"s",text(tmp3)]);
+ tmp=select(1..(length(opos)),opos_#==tmp2);
+ tmp=tmp_1;
+ if(tmp==1,
+ tmp=substring(str,tmp2-1,tmp2);
+ ,
+ if(opos_(tmp-1)==opos_tmp-1,
+ tmp=substring(str,tmp2-1,tmp2);
+ ,
+ tmp=substring(str,tmp2-2,tmp2);
+ );
+ );
+ tmp=replace(tmp,"^","**");
+ Expr(p1,"n",tmp);
+ tmp=select(1..(length(cpos)),cpos_#==tmp3);
+ tmp=tmp_1;
+ if(tmp==length(cpos),
+ tmp=substring(str,tmp3-1,tmp3);
+ ,
+ if(cpos_(tmp+1)==cpos_tmp+1,
+ tmp=substring(str,tmp3-1,tmp3);
+ ,
+ tmp=substring(str,tmp3-1,tmp3+1);
+ );
+ );
+ tmp=replace(tmp,"^","**");
+ Expr(p4,"n",tmp);
+ );
+ );
+ );
+ out;
+);
+////%Pardiagram end////
+
+////%Changework start////
+Changework():=Changework(""); //180618
+Changework(dirorg):=Changework(dirorg,["Sub=y"]);
+Changework(dirorg,options):=( //16.10.21
+//help:Changework(directory);
+//help:Changework(Dircdy+"fig");
+//help:Changework(options=["Sub=n"<not to make folder fig>);
+ regional(dir,subdir,tmp,,eqL,makesub);
+ tmp=Divoptions(options);
+ eqL=tmp_5; //180605from
+ makesub=1;
+ forall(eqL,
+ tmp=Strsplit(#,"=");
+ tmp1=Toupper(substring(#,0,1)); //181111
+ if(tmp1=="S",
+ tmp=Toupper(tmp_2);
+ if(substring(tmp,0,1)=="N",
+ makesub=0;
+ );
+ );
+ ); //180605to
+ dir=replace(dirorg,"/",pathsep());//17.11.20from
+ dir=replace(dir,"\",pathsep());
+ dir=replace(dir,pathsep()+pathsep(),pathsep());//17.11.24
+ tmp=length(dir);
+ if(substring(dir,tmp-1,tmp)==pathsep(),
+ dir=substring(dir,0,tmp-1);
+ );//17.11.20until
+ tmp=Indexall(dir,pathsep()); //17.11.24from
+ subdir="";
+ if(length(tmp)>0,
+ tmp=tmp_(length(tmp));
+ subdir=substring(dir,tmp,length(dir));
+ dir=substring(dir,0,tmp-1);
+ ); //17.11.24until
+ if(dir=="" % !isexists(dir,""),
+ if(dir=="", //180618from
+ println("Dirwork="+Dqq(Dirwork));
+ ,
+ println("Directory "+dir+" not exist, so "+Dqq(Dirwork)+" not changed");
+ ); //180618to
+ ,
+ if(length(subdir)>0, //180605
+ if(makesub==1,//180606from
+ println(makedir(dir,subdir));
+ );//180606
+ Dirwork=dir+pathsep()+subdir;
+ ,
+ Dirwork=dir;
+ ); //17.11.24until
+ setdirectory(Dirwork);
+ if(!iswindows(), //17.04.11
+ if(!iskcexists(Dirwork),
+ SCEOUTPUT = openfile(Shellparent); //190221
+ closefile(SCEOUTPUT);
+ println(setexec(Dirwork,Shellparent)); //190221
+ );
+ );
+ );
+);
+////%Changework end////
+
+////%Changestyle start////
+Changestyle(nameL,style):=(
+//help:Changestyle(["sgAB"],["da"]);
+ regional(nmL,name,Ltype,Ltypeorg,Noflg,color,opcindy,tmp);
+ tmp=Divoptions(style);
+ Ltypeorg=tmp_1;
+ Noflg=tmp_2;
+ color=tmp_(length(tmp)-2);
+ opcindy=tmp_(length(tmp));
+ if(islist(nameL),nmL=nameL,nmL=[nameL]);
+ forall(nmL,name,
+ tmp=select(GCLIST,#_1==name);
+ if(length(tmp)>0,
+ Ltype=Ltypeorg;
+ GCLIST=select(GCLIST,#_1!=name);
+ COM2ndlist=select(COM2ndlist, //no ketjs
+ (indexof(#,"("+name)==0)%(indexof(#,"Shade")>0)); // 15.05.23,16.12.13 //no ketjs
+ if(Noflg<2,
+ if(isstring(Ltype),
+ if((Noflg==0)&(color!=KCOLOR), //180904 //no ketjs on
+ Texcom("{");Com2nd("Setcolor("+color+")");//180722
+ ); //no ketjs off
+ Ltype=Getlinestyle(text(Noflg)+Ltype,name);
+ if((Noflg==0)&(color!=KCOLOR), //180904 //no ketjs on
+ Texcom("}");//180722
+ ); //no ketjs off
+ ,
+ if(Noflg==1,Ltype=0);
+ );
+ GCLIST=append(GCLIST,[name,Ltype,opcindy]);
+ );
+ );
+ );
+);
+////%Changestyle end////
+
+////%Op start////
+Op(n,object):=( // 16.05.25
+//help:Op(4,[1,2,3,4]);
+//help:Op(3,"abcd");
+ regional(out);
+ if(islist(object),
+ out=object_n;
+ ,
+ if(isstring(object),
+ out=substring(object,n-1,n);
+ );
+ );
+ out;
+);
+////%Op end////
+
+////%Ptselected start////
+Ptselected():=Isptselected(allpoints()); //180706
+Ptselected(ptlistorg):=(
+//help:Ptselected();
+//help:Ptselected(geopoint);
+ regional(ptlist,flg,Eps);
+ Eps=(XMAX-XMIN)/10; //190505
+ flg=0;
+ ptlist=ptlistorg; //190505[2lines]
+ if(!islist(ptlist),ptlist=[ptlist]);
+ forall(ptlist,
+ if(flg==0,
+ if(isselected(#),flg=1); // no ketjs
+// if(|mouse().xy-#.xy|<Eps,flg=1); // only ketjs //190505
+ );
+ );
+ if(flg==0,false,true);
+);
+////%Ptselected end////
+
+////%Finddef start////
+Finddef(G):=(
+ regional(def,tmp,tmp1,tmp2,tmp3);
+ if(isstring(G),tmp=parse(G),tmp=G);
+ def=text(inspect(tmp,"definition"));
+ tmp1=indexof(def,"(");
+ tmp2=indexof(def,";");
+ tmp3=indexof(def,")");
+ tmp=[substring(def,0,tmp1-1)];
+ if(tmp2>0,
+ tmp=append(tmp,substring(def,tmp1,tmp2-1));
+ if(indexof(def,")",tmp3+1)==0,
+ tmp=append(tmp,substring(def,tmp2,tmp3-1));
+ ,
+ tmp=append(tmp,substring(def,tmp2,tmp3));
+ );
+ ,
+ tmp=append(tmp,substring(def,tmp1-1,tmp3));
+ );
+ tmp;
+);
+////%Finddef end////
+
+////%Findgeoinfo start////
+Findgeoinfo(geo):=(
+ regional(out,tmp,tmp1,tmp2);
+ tmp=Finddef(geo);
+ if(ispoint(parse(tmp_2)),
+ out=[tmp_2,tmp_3];
+ ,
+ tmp1=Findgeoinfo(parse(tmp_2));
+ if(ispoint(parse(tmp1_1)),
+ out=[tmp1_1,tmp1_2];
+ ,
+ tmp2=Findgeoinfo(parse(tmp1_2));
+ out=[tmp2_1,tmp2_2];
+ );
+ );
+ if(ispoint(geo),
+ if(!ispoint(parse(tmp_2)),
+ tmp1=Finddef(parse(tmp_2));
+ ,
+ tmp1=tmp;
+ );
+ out=append(out,tmp1_3);
+ ,
+ out=append(out,tmp_3);
+ );
+ out;
+);
+////%Findgeoinfo end////
+
+////%Dependgeo start////
+Dependgeo(geo):=(
+ regional(tmp,tmp1,tmp2,out);
+ tmp=Finddef(geo);
+ if(!iscircle(geo),
+ out=[geo.name]; //190505
+ ,
+ out=[geo];
+ );
+ if(length(tmp)<3,
+ out=concat(out,[tmp_1,[]]);
+ ,
+ out=concat(out,[tmp_1]);
+ tmp1=[tmp_2,tmp_3];
+ tmp=parse(tmp1_2);
+ if(islist(tmp) % isreal(tmp),
+ tmp1=[tmp1_1];
+ );
+ out=append(out,tmp1);
+ );
+ out;
+);
+////%Dependgeo end////
+
+////%Workprocess start////
+Workprocess():=Drawprocess(300,["Disp=n"]); //181030
+Workprocess(nn):=(
+//help:Workprocess();
+ Drawprocess(nn,["Disp=n"]);
+);
+////%Workprocess end////
+////%Drawprocess start////
+Drawprocess():=Drawprocess(300,["Disp=y"]);
+Drawprocess(nn):=Drawprocess(nn,["Disp=y"]);
+Drawprocess(nn,options):=(
+//help:Workprocess();
+ regional(All,added,remain,out,flg,dispflg,eqL,tmp,tmp1,tmp2);
+ tmp=Divoptions(options); //181030from
+ eqL=tmp_5;
+ dispflg="Y";
+ forall(eqL,
+ tmp=Strsplit(#,"=");
+ tmp1=Toupper(substring(tmp_1,0,1));
+ tmp2=Toupper(substring(tmp_2,0,1));
+ if(tmp1=="D",dispflg=tmp2);
+ ); //181030to
+ tmp=remove(allpoints(),[NE,SW,TH,FI]);
+ tmp1=select(tmp,
+ substring(#.name,length(#.name)-1,length(#.name))!="z"); //190505
+ tmp1=concat(tmp1,alllines());
+// tmp1=concat(tmp1,allcircles());
+ All=apply(tmp1,Dependgeo(#));
+ added=select(All,length(#_3)==0);
+ out=sort(apply(added,#_1));
+ remain=remove(All,added);
+ flg=0;
+ repeat(nn,
+ if(flg==0,
+ tmp1=select(remain,remove(#_3,out)==[]);
+ tmp2=sort(apply(tmp1,#_1));
+ out=concat(out,tmp2);
+ remain=remove(remain,tmp1);
+ if(length(remain)==0,flg=1);
+ );
+ );
+ if(dispflg=="Y",
+ println("Process of drawing");
+ );
+ tmp1=[];//181030from
+ forall(out,
+ tmp=Dependgeo(parse(#));
+ tmp1=append(tmp1,tmp);
+ if(dispflg=="Y",
+ println(Dependgeo(parse(#)));
+ );
+ );
+ tmp1;//181030to
+);
+////%Drawprocess end////
+
+////%Sortpointlist start////
+Sortpointlist(list):=(
+ regional(plist,ilist,jj,kk,flg,p1,p2,in1,in2,
+ tmp,tmp1,tmp2,out);
+ out=list;
+ plist=list_1;
+ ilist=list_2;
+ flg=0;
+ forall(1..(length(plist)),jj,
+ p1=plist_jj;
+ in1=ilist_jj;
+ forall((jj+1)..(length(plist)),kk,
+ if(flg==0,
+ p2=plist_kk;
+ in2=ilist_kk;
+ if(contains(in1,p2),
+ tmp1=plist_(1..(jj-1));
+ tmp1=append(tmp1,p2);
+ tmp1=concat(tmp1,plist_((jj+1)..(kk-1)));
+ tmp1=append(tmp1,p1);
+ tmp1=concat(tmp1,plist_((kk+1)..(length(plist))));
+ tmp2=ilist_(1..(jj-1));
+ tmp2=append(tmp2,in2);
+ tmp2=concat(tmp2,ilist_((jj+1)..(kk-1)));
+ tmp2=append(tmp2,in1);
+ tmp2=concat(tmp2,ilist_((kk+1)..(length(plist))));
+ out=Sortpointlist([tmp1,tmp2]);
+ flg=1;
+ );
+ );
+ );
+ );
+ out;
+);
+////%Sortpointlist end////
+
+////%Toupper start////
+Toupper(str):=(
+//help:Toupper("Abc");
+ regional(alphabet,out,tmp,tmp1);
+ alphabet="abcdefghijklmnopqrstuvwxyz";
+ out="";
+ forall(1..(length(str)),
+ tmp=substring(str,#-1,#);
+ tmp1=indexof(alphabet,tmp);
+ if(tmp1>0,
+ out=out+unicode(text(tmp1+64),base->10);
+ ,
+ out=out+tmp;
+ );
+ );
+ out;
+);
+////%Toupper end////
+
+////%Textformat start////
+Textformat(value,dig):=(
+//help:Textformat(2/3,4);
+//help:Textformat([gr1,gr2],5);
+ regional(vv,tmp,tmp1);
+ if(islist(value),
+ tmp1="[";
+ forall(value,
+ tmp1=tmp1+Textformat(#,dig)+",";
+ );
+ if(length(tmp1)>1, //18.01.29from
+ tmp1=substring(tmp1,0,length(tmp1)-1);
+ );
+ tmp1=tmp1+"]"; //18.01.29until
+ ,
+ if(ispoint(value) % isstring(value),
+// vv=Lcrd(value);
+// tmp1=Textformat(vv,dig);
+// tmp1=text(value); // 15.04.07
+ if(isstring(value),tmp1=Dq+value+Dq,tmp1=text(value)); // 15.10.02
+ ,
+ tmp1=format(value,dig);
+ );
+ );
+ tmp1;
+);
+////%Textformat end////
+
+////%Sprintf start////
+Sprintf(value,dig):=(
+//help:Sprintf(5.1,4);
+ regional(vv,tmp,tmp1);
+ if(!islist(value), // 17.03.12from
+ if(isstring(value),
+ vv=value;
+ ,
+ vv=Textformat(value,dig);
+ ); // 17.03.12from
+ if(indexof(vv,".")==0,vv=vv+".");
+ vv=vv+"0000000000000000";
+ tmp=indexof(vv,".")+dig;
+ vv=substring(vv,0,tmp);
+ ,
+ vv=apply(value,Sprintf(#,dig));
+ );
+ vv;
+);
+////%Sprintf end////
+
+////%Replaceall start//// 190507
+Replaceall(str,repL):=(
+ regional(tmp1,tmp2,out);
+ out=str;
+ forall(1..(length(repL)/2),
+ tmp1=repL_(2*#-1);
+ tmp2=repL_(2*#);
+ if(!isstring(tmp2),tmp2=text(tmp2));
+ out=replace(out,tmp1,tmp2);
+ );
+ out;
+);
+////%Replaceall end////
+
+////%Assign start////
+Assign(str):=( //190125from
+ regional(tmp);
+ tmp=[];
+ forall(VLIST,tmp=concat(tmp,[#_1,#_2]));
+ Assign(str,tmp);
+); //190125to
+Assign(funstr,vrL):=(
+ regional(nn,out);
+ nn=length(vrL)/2;
+ out=funstr;
+ forall(1..nn,
+ out=Assign(out,vrL_(2*#-1),vrL_(2*#));
+ );
+ out;
+);
+Assign(funstr,varname,rep):=(
+//help:Assign("x^2+a*x","a",1.3);
+//help:Assign("a*x^2+b*x",["a",1,"b",2]);
+ regional(repstr,ii,jj,tmp,tmp1,tmp2,Notvar,Flg);
+ if(isstring(rep),repstr=rep,repstr="("+Textformat(rep,6)+")");
+ // 15.02.09, 07.06,17.08.24
+ tmp=[46]; // 12.20
+ tmp=concat(tmp,48..57);
+ tmp=concat(tmp,65..90);
+ tmp=concat(tmp,97..122);
+ Notvar=apply(tmp,unicode(text(#),base->10));
+ tmp2="";
+ forall(1..100,
+ ii=indexof(funstr,varname);
+ if(ii>0,
+ Flg=0;
+ if(ii>1,
+ tmp=substring(funstr,ii-2,ii-1);
+ if(contains(Notvar,tmp),
+ tmp2=tmp2+substring(funstr,0,ii);
+ funstr=substring(funstr,ii,length(funstr));
+ Flg=1;
+ );
+ );
+ if(Flg==0,
+ jj=ii-1+length(varname);
+ if(jj<length(funstr),
+ tmp=substring(funstr,jj,jj+1));
+ if(contains(Notvar,tmp),
+ tmp2=tmp2+substring(funstr,0,jj);
+ funstr=substring(funstr,jj,length(funstr));
+ Flg=1;
+ );
+ );
+ if(Flg==0,
+ tmp2=tmp2+substring(funstr,0,ii-1)+repstr;
+ funstr=substring(funstr,jj,length(funstr));
+ );
+ );
+ );
+ funstr=tmp2+funstr;
+ funstr;
+);
+////%Assign end////
+
+Measuredepth(list):=(
+ regional(tmp,tmp1,Depth,Flg);
+ Flg=0;
+ Depth=0;
+ if(length(list)>0, //180501
+ if(ispoint(list),
+ Depth=0;
+ Flg=1;
+ ,
+ tmp1=select(1..(length(list)),length(list_#)>0);//17.05.21from
+ tmp=list_(tmp1_1);//17.05.21until
+ );
+ repeat(4,
+ if(Flg==0,
+ if(islist(tmp),
+ tmp=tmp_1;
+ Depth=Depth+1;
+ ,
+ if(ispoint(tmp),Depth=Depth+1);
+ Flg=1;
+ );
+ );
+ );
+ );//180501
+ Depth;
+);
+
+////%Measuredepth start////
+Measuredepth(list):=( //190423
+ regional(str,nn,tmp,tmp1,tmp2);
+ str=text(list);
+ tmp1=Indexall(str,"[");
+ tmp2=select(tmp1,!contains(tmp1,#+1));
+ nn=tmp2_1;
+ tmp1=substring(str,nn,length(str));
+ tmp=indexof(tmp1,",");
+ tmp1=substring(tmp1,0,tmp-1);
+ if(!ispoint(parse(tmp1)),
+ nn=nn-1;
+ );
+ nn;
+);
+////%Measuredepth end////
+
+////%Flattenlist start////
+Flattenlist(pltlist):=(
+//help:Flattenlist([[2,3],[[1,2],[5,6]]]);
+ regional(Out,nn,Dt,ii,tmp,flg);
+ Out=[];
+ if(Measuredepth(pltlist)==1,
+ Out=[pltlist];
+ ,
+ forall(1..(length(pltlist)),nn,
+ Dt=pltlist_nn;
+ if(Measuredepth(Dt)<2,
+ Out=append(Out,Dt);
+ ,
+ forall(1..(length(Dt)),ii,
+ tmp=Flattenlist(Dt_ii);
+ Out=concat(Out,tmp);
+ );
+ );
+ );
+ );
+ Out;
+);
+////%Flattenlist end////
+
+////%Divoptions start////
+Divoptions(options):=(
+//help:Divoptions(options);
+ regional(Ltype,Noflg,Inflg,Outflg,eqL,realL,strL,color,opstr,opcindy,flg,
+ tmp,tmp1,tmp2);
+ Ltype="dr"; // 2015.01.13
+ Noflg=0;
+ Inflg=0;
+ Outflg=0;
+ eqL=[];
+ realL=[];
+ strL=[];
+ color=KCOLOR; //180603
+ opstr="";
+ opcindy="";
+ forall(options,
+ flg=0;
+ if(flg==0,
+ if(isreal(#) % ispoint(#) % islist(#),
+ realL=append(realL,#);
+ opstr=opstr+","+text(#);
+ flg=1;
+ );
+ );
+ if(flg==0,
+ if(indexof(#,"=")>0,
+ tmp=Strsplit(#,"="); //180602from
+ tmp1=Toupper(tmp_1);
+ tmp2=tmp_2;
+ if(tmp1=="COLOR",
+ if(indexof(tmp2,"[")>0, //180928
+ tmp1=parse(tmp2);
+ color=tmp1;
+ if(length(tmp1)==4,
+ tmp1=Colorcmyk2rgb(tmp1);
+ );
+ ,
+ tmp1=Colorname2rgb(tmp2); color=tmp1; //181212
+ );
+ tmp="color->"+text(tmp1);
+ opcindy=opcindy+","+tmp;
+ ,
+ eqL=append(eqL,#);
+ );//180602to
+ flg=1;
+ );
+ );
+ if(flg==0,
+ if(indexof(#,"no")+indexof(#,"No")>0,
+ if(indexof(#,"tex")>0,Noflg=1);
+ if(indexof(#,"disp")>0,Noflg=2);
+ if(indexof(#,"data")>0,Noflg=3);
+ flg=1;
+ );
+ );
+ if(flg==0,
+ if(indexof(#,"->")>0,
+ opcindy=opcindy+","+#;
+ flg=1;
+ );
+ );
+ if(flg==0,
+ if(indexof(#,"out")+indexof(#,"Out")>0,
+ if(indexof(#,"-")==0,
+ Outflg=1;
+ ,
+ Outflg=2;
+ );
+ flg=1;
+ );
+ );
+ if(flg==0,
+ if(indexof(#,"in")+indexof(#,"In")>0,
+ if(indexof(#,"-")==0,
+ Inflg=1;
+ ,
+ Inflg=2;
+ );
+ flg=1;
+ );
+ );
+ if(flg==0,
+ tmp=substring(#,0,2);
+ tmp1=indexof(tmp,"dr")+indexof(tmp,"Dr");
+ tmp1=tmp1+indexof(tmp,"da")+indexof(tmp,"Da");
+ tmp1=tmp1+indexof(tmp,"id")+indexof(tmp,"Id");
+ tmp1=tmp1+indexof(tmp,"do")+indexof(tmp,"Do");
+ tmp1=tmp1+indexof(tmp,"dp")+indexof(tmp,"Dp");
+ if(tmp1>0,
+ Ltype=#;
+ flg=1;
+ );
+ if(flg==0,
+ if(length(#)>0, //180408
+ strL=append(strL,#);
+ opstr=opstr+","+Dq+#+Dq;
+ );
+ );
+ );
+ );
+ if(indexof(opcindy,"color->")==0,// 16.10.07from
+ opcindy=opcindy+",color->"+text(KCOLOR);
+ );
+ [Ltype,Noflg,Inflg,Outflg,eqL,realL,strL,color,opstr,opcindy];
+);
+////%Divoptions end////
+
+////%Dotprod start////
+Dotprod(vec1,vec2):=(
+//help:Dotprod(vec1,vec2);
+ regional(v1,v2,tmp);
+ if(ispoint(vec1),v1=vec1.xy,v1=vec1);
+ if(ispoint(vec2),v2=vec2.xy,v2=vec2);
+ v1*v2;
+);
+////%Dotprod end////
+
+////%Crossprod start////
+Crossprod(a,b):=(
+//help:Crossprod(vec1,vec2);
+ regional(tmp1,tmp2,tmp3,Out);
+ if(length(a)==3,
+ tmp1=a_2*b_3-a_3*b_2;
+ tmp2=a_3*b_1-a_1*b_3;
+ tmp3=a_1*b_2-a_2*b_1;
+ Out=[tmp1,tmp2,tmp3];
+ ,
+ Out=a_1*b_2-a_2*b_1;
+ );
+ Out;
+);
+////%Crossprod end////
+
+////%Mvprod start////
+Mvprod(mat,vec):=( //190127
+ regional(vecL);
+ if(Measuredepth(vec)==0,vecL=[vec],vecL=vec);
+ Mvprod(mat,vecL,length(vecL));
+);
+Mvprod(mat,vecL,nn):=(
+//help:Mvprod(mat,vec(list));
+ regional(tmp,out);
+ if(nn==1,
+ out=mat*vecL_1;
+ ,
+ out=[];
+ forall(1..nn,
+ tmp=mat*vecL_#;
+ out=append(out,tmp);
+ );
+ );
+ out;
+);
+////%Mvprod end////
+
+////%Ptstart start////
+Ptstart(Fig):=(
+//help:Ptstart("gr1");
+ regional(tmp);
+ if(isstring(Fig),tmp=parse(Fig),tmp=Fig); // 16.01.21
+ tmp_1;
+);
+////%Ptstart end////
+
+////%Ptend start////
+Ptend(Fig):=(
+//help:Ptend("gr1");
+ regional(tmp);
+ if(isstring(Fig),tmp=parse(Fig),tmp=Fig);
+ tmp_(length(tmp)); // 15.04.12
+);
+////%Ptend end////
+
+////%Numptcrv start////
+Numptcrv(Fig):=(
+//help:Numptcrv("gr1");
+ regional(tmp);
+ if(isstring(Fig),tmp=parse(Fig),tmp=Fig); // 15.12.23
+ length(tmp);
+);
+////%Numptcrv end////
+
+////%Ptcrv start////
+Ptcrv(Num,Fig):=(
+//help:Ptcrv(10,"gr1");
+ regional(tmp);
+ if(isstring(Fig),tmp=parse(Fig),tmp=Fig);
+ tmp_Num;
+);
+////%Ptcrv end////
+
+////%Invert start////
+Invert(Fig):=(
+//help:Invert("gr1"); //no ketjs
+ regional(tmp);
+ if(isstring(Fig),tmp=parse(Fig),tmp=Fig); // 16.01.27
+ reverse(tmp);
+);
+Invert(nm,Fig):=Invert(nm,Fig,["nodisp"]); // from 160127
+Invert(nm,Fig,options):=(
+//help:Invert("1","gr1");
+ regional(name,tmp);
+ name="-inv"+nm;
+ tmp=Invert(Fig);
+ Listplot(name,tmp,options);
+);// to 160127
+////%Invert end////
+
+////%Paramoncrv start////
+Paramoncrv(pP,Gdata):=Paramoncurve(pP,Gdata);//180723
+////%Paramoncrv end////
+////%Paramoncurve start////
+Paramoncurve(point,Gdata):=(
+//help:Paramoncurve(A,"gr1");//180723[3lines]
+ regional(Tmp,PtL,pP);
+ if(ispoint(point),pP=point.xy,pP=point);
+// Eps=10^(-8);
+ if(isstring(Gdata),PtL=parse(Gdata),PtL=Gdata);
+ Tmp=Nearestpt(pP,PtL);
+ Tmp_2;
+);
+Paramoncurve(pP,nN,plist):=(
+//help:Paramoncurve(A,10,"gr1");
+ regional(PtL,Out,Pa,Pb,vV,vW,sS);
+ if(isstring(plist),PtL=parse(plist),PtL=plist);
+ PtL=apply(PtL,LLcrd(#));//16.10.16
+ if(nN==length(PtL),
+ Out=nN;
+ ,
+ Pa=PtL_nN;
+ Pb=PtL_(nN+1);
+ vV=Pb-Pa;
+ vW=pP-Pa;
+ sS=vV*vW/|vV|^2;
+ sS=min([max([sS,0]),1]);
+ Out=nN+sS;
+ );
+ Out;
+);
+////%Paramoncurve end////
+
+////%Pointoncrv start////
+Pointoncrv(tT,PtL):=Pointoncurve(tT,PtL);
+////%Pointoncrv end////
+////%Pointoncurve start////
+Pointoncurve(tTorg,Gdata):=(
+//help:Pointoncurve(20.5,"gr1");
+ regional(tT,Out,Eps,nN,sS,Pa,Pb,PtL);
+ if(isstring(Gdata),PtL=parse(Gdata),PtL=Gdata);
+ if(length(PtL)==1,PtL=PtL_1);
+ tT=max([tTorg,1]); //18.01.04
+ tT=min([tT,length(PtL)]); //18.01.04
+ Eps=10^(-5); //18.01.04
+ nN=floor(tT+Eps);
+ sS=max([tT-nN,0]);
+ if(nN==length(PtL),
+ Out=PtL_nN;
+ ,
+ Pa=PtL_nN;
+ Pb=PtL_(nN+1);
+ Out=(1-sS)*Pa+sS*Pb;
+ );
+ Out;
+);
+////%Pointoncurve end////
+
+////%Koutenseg start////
+Koutenseg(pA,pB,pC,pD):=Koutenseg(pA,pB,pC,pD,[]);
+Koutenseg(pA,pB,pC,pD,options):=(
+ regional(Eps0,Eps,Eps2,pV,Sv2,Out,pP,pQ,Flg,p1,p2,q1,q2,
+ em1,eM1,em2,eM2,rT,Tmp1,Tmp2);
+ Eps0=10^(-4);
+ pV=pB-pA;
+ Sv2=|pV|;
+ pP=pC-pA; pQ=pD-pA;
+ Eps=10^(-3);
+ Eps2=0.2;
+ Tmp1=0;
+ forall(options,
+ if(Tmp1==0,
+ Eps=#;
+ Tmp1=1;
+ ,
+ Eps2=#;
+ );
+ );
+ Flg=0;
+ if(Sv2<10^(-3),
+ Out=["inf","inf"];
+ Flg=1;
+ );
+ if(Flg==0,
+ Eps=min([Eps2,Eps/Sv2]);
+ p1=pP*pV/Sv2^2;
+ p2=[pP_2,-pP_1]*pV/Sv2^2;
+ q1=pQ*pV/Sv2^2;
+ q2=[pQ_2,-pQ_1]*pV/Sv2^2;
+ em1=-Eps; eM1=1+Eps;
+ em2=-Eps; eM2=Eps;
+ if(max([p1,q1])<em1 % min([p1,q1])>eM1,
+ Out=["inf","inf"];
+ Flg=1;
+ );
+ if(max([p2,q2])<em2 % min([p2,q2])>eM2,
+ Out=["inf","inf"];
+ Flg=1;
+ );
+ );
+ if(Flg==0 & p2*q2<0,
+ rT=p1-(q1-p1)/(q2-p2)*p2;
+ if(rT>em1 & rT<eM1,
+ if(rT>-Eps0 & rT<1+Eps0,
+ Tmp1=pA+rT*pV;
+ Tmp2=min([max([rT,0]),1]);
+ Out=[Tmp1,Tmp2,0];
+ ,
+ Tmp1=pA+rT*pV;
+ Tmp2=min([max([rT,0]),1]);
+ Out=[Tmp1,Tmp2,1];
+ );
+ Flg=1;
+ );
+ if(Flg==0 & (p1<em1 % p1>eM1 % p2<em2 % p2>eM2),
+ if(q1<em1 % q1>eM1 % q2<em2 % q2>eM2,
+ Out=["inf","inf"];
+ Flg=1;
+ );
+ if(Flg==0,
+ rT=min([max([p1,0]),1]);
+ Tmp1=pA+rT*pV;
+ Out=[Tmp1,rT,1];
+ Flg=1;
+ );
+ );
+ );
+ if(Flg==0 & (p1 > -Eps0 & p1 < 1 + Eps0 & p2 > -Eps0 & p2 < Eps0),
+ rT= p1;
+ Tmp1=pA+rT*pV;
+ Out= [Tmp1, rT, 0];
+ Flg=1;
+ );
+ if(Flg==0 & (q1 > -Eps0 & q1 < 1 + Eps0 & q2 > -Eps0 & q2 < Eps0),
+ rT= q1;
+ Tmp1=pA+rT*pV;
+ Out=[Tmp1,rT,0];
+ Flg=1;
+ );
+ if(Flg==0 & (p1<em1 % p1>eM1 % p2<em2 % p2>eM2),
+ if(q1<em1 % q1>eM1 % q2<em2 % q2>eM2,
+ Out=["inf","inf"];
+ Flg=1;
+ );
+ if(Flg==0,
+ rT=min([max([q1,0]),1]);
+ Tmp1=pA+rT*pV;
+ Out=[Tmp1,rT,1];
+ Flg=1;
+ );
+ );
+ if(Flg==0 & (q1<em1 % q1>eM1% q2<em2 % q2>eM2),
+ rT=min([max([p1,0]),1]);
+ Tmp1=pA+rT*pV;
+ Out=[Tmp1,rT,1];
+ Flg=1;
+ );
+ if(Flg==0,
+ if(abs(p2)<abs(q2),
+ rT=min([max([p1,0]),1]);
+ ,
+ rT=min([max([q1,0]),1]);
+ );
+ Tmp1=pA+rT*pV;
+ Out=[Tmp1,rT,1];
+ );
+ Out;
+);
+////%Koutenseg end////
+
+///////// Start of old Intersect ////////////
+
+////%Intersectcrvspp start////
+Intersectcrvspp(Gr1,Gr2):=Intersectcrvspp(Gr1,Gr2,[]);
+Intersectcrvspp(Gr1,Gr2,options):=(
+//help:Intersectcrvspp("gr1","pa1");
+//help:Intersectcrvspp(options=[Eps2(0.1),"Dif=0.05"]);
+ regional(Out,Eps,Eps2,Eps0,Flg,Data1,Data2,
+ Tmp1,Tmp2,Tmp3,Tmp,KL1,KL2,pA,pB,Ni,Nj,
+ pP,pQ,rT,Flg,eqL,realL,opstr,Dif);
+ Eps=10^(-4);
+ Eps2=0.1;
+ Dif=0.05; // 2015.05.31
+ Flg=0;
+ Tmp1=Divoptions(options); //
+ eqL=Tmp1_5;
+ realL=Tmp1_6;
+ opstr=Tmp1_(length(Tmp1));
+ forall(eqL,
+ if(substring(#,0,1)=="D",
+ Tmp1=indexof(#,"=");
+ Dif=parse(substring(#,Tmp1,length(#)));
+ );
+ );
+ Tmp1=length(realL);
+ if(Tmp1>0,
+ Eps=realL_1;
+ if(Tmp1>1,
+ Eps2=realL_2;
+ );
+ );
+ Flg=0;
+ if(isstring(Gr1),Data1=parse(Gr1),Data1=Gr1);
+ if(isstring(Gr2),Data2=parse(Gr2),Data2=Gr2);
+ if(Measuredepth(Data1)==2,Data1=Data1_1);
+ if(Measuredepth(Data2)==2,Data2=Data2_1);
+ Data1=apply(Data1,LLcrd(#));
+ Data2=apply(Data2,LLcrd(#));
+ if(length(Data1)==length(Data2),
+ Tmp1=reverse(Data2);
+ Eps0=10^(-6);
+ Tmp2=0;
+ forall(1..(length(Data1)),
+ Tmp2=Tmp2+abs(Data1_#-Data2_#);
+ );
+ Tmp3=0;
+ forall(1..(length(Data1)),
+ Tmp3=Tmp3+abs(Data1_#-Tmp1_#);
+ );
+ if(Tmp2<Eps0 % Tmp3<Eps0,
+ Out=[];
+ Flg=1;
+ );
+ );
+ if(Flg==0,
+ KL1=[];
+ KL2=[];
+ forall(1..(length(Data1)-1),Ni,
+ pA=Data1_Ni;
+ pB=Data1_(Ni+1);
+ forall(1..(length(Data2)-1),
+ pP=Data2_#; pQ=Data2_(#+1);
+ Tmp=Koutenseg(pA,pB,pP,pQ,[Eps,Eps2]);
+ if(Tmp!=["inf","inf"],
+ if(Tmp_3==0,
+ Tmp1=[Tmp_1,Tmp_2,Ni,#];
+ KL1=concat(KL1,[Tmp1]);
+ ,
+ Tmp2=[Tmp_1,Tmp_2,Ni,#];
+ KL2=concat(KL2,[Tmp2]);
+ );
+ );
+ );
+ );
+ Out=[];
+ if(length(KL1)>0,
+ Tmp=KL1_1;
+ pP=Tmp_1;
+ rT=Tmp_2;
+ Ni=Tmp_3;
+ Nj=Tmp_4;
+ Tmp=[pP,Ni+rT,Nj];
+ Out=[Tmp];
+ );
+ forall(2..(length(KL1)),Ni,
+ Tmp=KL1_Ni;
+ pP=Tmp_1;
+ Tmp2=0;
+ Flg=0;
+ forall(1..(length(Out)),Nj,
+ if(Flg==0,
+ Tmp=Out_Nj;
+ if(|pP-Tmp_1|<Eps,
+ Tmp2=1;
+ Flg=1;
+ );
+ );
+ );
+ if(Tmp2==0,
+ Tmp=KL1_Ni;
+ pP=Tmp_1;
+ rT=Tmp_2;
+ Tmp1=Tmp_3;
+ Tmp2=Tmp_4;
+ Tmp=[pP,Tmp1+rT,Tmp2];
+ Out=concat(Out,[Tmp]);
+ );
+ );
+ forall(1..(length(KL2)),Ni,
+ Tmp=KL2_Ni; // 15.11.21 Usui
+ pP=Tmp_1;
+ Tmp2=0;
+ Flg=0;
+ forall(1..(length(Out)),Nj,
+ if(Flg==0,
+ Tmp=Out_Nj;
+ if(|pP-Tmp_1|<Eps,
+ Tmp2=1;
+ Flg=1;
+ );
+ );
+ );
+ if(Tmp2==0,
+ Tmp=KL2_Ni;
+ rT=Tmp_2;
+ rT=min([max([rT,0]),1]); // 15.11.21 Usui
+ Tmp=[pP,Tmp_3+rT,Tmp_4];
+ Out=concat(Out,[Tmp]);
+ );
+ );
+ );
+ Tmp1=Out; // 15.04.06 from
+ Out=[];
+ forall(Tmp1,Tmp2,
+ Tmp3=select(1..(length(Out)),//16.11.27,
+ |Out_#_1-Tmp2_1|<Dif & |Out_#_2-Tmp2_2|<=1& |Out_#_3-Tmp2_3|<=1);
+ //17.04.13
+ if(length(Tmp3)==0,
+ Out=append(Out,Tmp2);
+ ,
+ forall(Tmp3, //16.11.27
+ Out_#_1=(Out_#_1+Tmp2_1)/2;//17.04.14
+ );
+ );
+ ); // 15.04.06 until
+ Out;
+);
+////%Intersectcrvspp end////
+
+////%Intersectcrvs start////
+Intersectcrvs(Gr1,Gr2):=Intersectcrvs(Gr1,Gr2,[]);
+//help:Intersectcrvs("gr1","pa1");
+Intersectcrvs(Gr1,Gr2,options):=(
+ regional(tmp,tmp1,tmp2);
+ tmp1=Intersectcrvspp(Gr1,Gr2,options);
+ apply(tmp1,#_1);
+);
+////%Intersectcrvs end////
+
+///////// End of old Intersect ////////////
+
+/////////// Start of new Intersect //////////////
+
+////%Intersectline start////
+Intersectline(p1,v1,p2,v2):=(
+ regional(Eps,d,dt,ds,t,s,pt,out,tmp,tmp1,tmp2,tmp3);
+ Eps=10^(-5);
+ out=[];
+ tmp=Dotprod(v1,v2);
+ tmp1=[tmp,|v1|^2];
+ tmp2=[-|v2|^2,-tmp];
+ tmp3=[Dotprod(p2-p1,v2),Dotprod(p2-p1,v1)];
+ d=Crossprod(tmp1,tmp2);
+ tmp=abs(Crossprod(v1,v2));
+ if(tmp>Eps,
+ dt=Crossprod(tmp3,tmp2);
+ ds=Crossprod(tmp1,tmp3);
+ t=dt/d;
+ s=ds/d;
+ pt=p1+v1*t;
+ out=[pt,t,s];
+ ,
+ tmp1=Crossprod(p2-p1,v1)/|v1|; //18.01.05
+ out=[abs(tmp1)]; //18.01.05
+ );
+ out;
+);
+////%Intersectline end////
+
+////%Intersectseg start////
+Intersectseg(seg1,seg2):=Intersectseg(seg1,seg2,0.01);
+Intersectseg(seg1org,seg2org,Eps1):=(
+ regional(Eps,seg1,seg2,p1,p2,q1,q2,t,s,pt,n,pts,out,dist,
+ tmp,tmp1,tmp2,tmp3);
+ Eps=10^(-4);
+ //Eps1=0.01;
+ seg1=seg1org;
+ seg2=seg2org;
+ if(isstring(seg1),seg1=parse(seg1));
+ if(isstring(seg2),seg2=parse(seg2));
+ out=[];
+ p1=seg1_1; q1=seg1_2;
+ p2=seg2_1; q2=seg2_2;
+ if((|q1-p1|<Eps)%(|q2-p2|<Eps),
+ out=[-1];
+ ,
+ tmp=Intersectline(p1,q1-p1,p2,q2-p2);
+ if(islist(tmp_1),
+ pt=tmp_1; t=tmp_2; s=tmp_3;
+ if((t*(t-1)<Eps)&(s*(s-1)<Eps),
+ out=[0,pt,t,s];
+ ,
+ t=min([max([t,0]),1]);
+ s=min([max([s,0]),1]);
+ tmp3=[|p1-p2|,|p1-q2|,|q1-p2|,|q1-q2|]; //18.01.30from
+ tmp1=[Op(2,q2-p2),-Op(1,q2-p2)];
+ tmp=Intersectline(p1,tmp1,p2,q2-p2);
+ if(islist(tmp_1),
+ if(tmp_3*(tmp_3-1)<Eps,
+ tmp3=append(tmp3,|tmp_1-p1|);
+ );
+ );
+ tmp=Intersectline(q1,tmp1,p2,q2-p2);
+ if(islist(tmp_1),
+ if(tmp_3*(tmp_3-1)<Eps,
+ tmp3=append(tmp3,|tmp_1-q1|);
+ );
+ );
+ tmp1=[Op(2,q1-p1),-Op(1,q1-p1)];
+ tmp=Intersectline(p2,tmp1,p1,q1-p1);
+ if(islist(tmp_1),
+ if(tmp_3*(tmp_3-1)<Eps,
+ tmp3=append(tmp3,|tmp_1-p2|);
+ );
+ );
+ tmp=Intersectline(q2,tmp1,p1,q1-p1);
+ if(islist(tmp_1),
+ if(tmp_3*(tmp_3-1)<Eps,
+ tmp3=append(tmp3,|tmp_1-q2|);
+ );
+ );
+ out=[min(tmp3),pt,t,s]; //18.01.30until
+ );
+ ,
+ dist=tmp_1;
+ tmp1=q1-p1;
+ n=[tmp1_2,-tmp1_1]/|tmp1|;
+ pts=[];
+ tmp=Intersectline(p1,n,p2,q2-p2);
+ if(tmp_3*(tmp_3-1)<Eps,
+ tmp1=(1-tmp_3)*p2+tmp_3*q2;
+ pts=append(pts,[tmp1,0,tmp_3]);
+ );
+ tmp=Intersectline(q1,n,p2,q2-p2);
+ if(tmp_3*(tmp_3-1)<Eps,
+ tmp1=(1-tmp_3)*p2+tmp_3*q2;
+ pts=append(pts,[tmp1,1,tmp_3]);
+ );
+ tmp=Intersectline(p2,n,p1,q1-p1);
+ if(tmp_3*(tmp_3-1)<Eps,
+ tmp1=(1-tmp_3)*p1+tmp_3*q1;
+ pts=append(pts,[tmp1,tmp_3,0]);
+ );
+ tmp=Intersectline(q2,n,p1,q1-p1);
+ if(tmp_3*(tmp_3-1)<Eps,
+ tmp1=(1-tmp_3)*p1+tmp_3*q1;
+ pts=append(pts,[tmp1,tmp_3,2]);
+ );
+ if(length(pts)==0,
+ tmp1=min([|p2-p1|,|q2-p1|,|p2-q1|,|q2-q1|]);
+ out=[tmp1];
+ ,
+ if(dist>Eps1,
+ out=[dist];
+ ,
+ tmp=apply(pts,#_1_1);
+ tmp1=sum(tmp)/(length(pts));
+ tmp=apply(pts,#_1_2);
+ tmp2=sum(tmp)/(length(pts));
+ tmp3=[tmp1,tmp2];
+ tmp=Nearestpt(tmp3,seg1);
+ tmp1=tmp_2;
+ tmp=Nearestpt(tmp3,seg2);
+ tmp2=tmp_2;
+ out=[dist,tmp3,tmp1,tmp2];
+ );
+ );
+ );
+ );
+ out;
+);
+////%Intersectseg end////
+
+////%Osplineseg start////
+Osplineseg(list):=Osplineseg(list,[]);
+Osplineseg(ptlist,optionsorg):=(
+ regional(tmp,tmp1,tmp2,list,ptL,ctrL,Eps,Eps0,
+ p0,p1,p2,p3,pQ,pR,cc,p01,p02,p11,p12,p21,p22,p31,p32,out);
+ Eps=10^(-2);
+ Eps0=10^(-6);
+ if(isstring(ptlist),list=parse(ptlist),list=ptlist);
+ p0=list_1; p1=list_2; p2=list_3; p3=list_4;
+ tmp=1+sqrt((1+Dotprod(p2-p0,p3-p1)/|p2-p0|/|p3-p1|)/2);
+ cc=4*|p2-p1|/3/(|p2-p0|+|p3-p1|)/tmp;
+ pQ=p1+cc*(p2-p0); // 15.09.21 // 16.08.16
+ pR=p2+cc*(p1-p3); // 16.08.16
+ ctrL=[pQ,pR];
+ options=optionorg;
+ options=concat(options,["Num=20","nodata"]);
+ out=Bezier("",[p1,p2],ctrL,options);
+ out;
+);
+////%Osplineseg end////
+
+////%Intersectpartseg start////
+Intersectpartseg(crv1,crv2,ii,jj,Eps1,Eps2):=(
+ Intersectpartseg(crv1,crv2,ii,jj,Eps1,Eps2,10*Eps2);
+);
+Intersectpartseg(crv1org,crv2org,ii,jj,Eps1,Eps2,Dist):=(
+ regional(crv1,crv2,Eps,dst,kk,ll,seg1,seg2,snang,
+ p0,p1,p2,p3,os1,os2,out,tmp,tmp1,tmp2,flg);
+ crv1=crv1org; crv2=crv2org;
+ if(isstring(crv1),crv1=parse(crv1));
+ if(isstring(crv2),crv2=parse(crv2));
+ Eps=10^(-4);
+// Eps1=0.01;
+// Eps2=0.1;
+// Dist=10*Eps2;
+ out=[];
+ seg1=[crv1_ii,crv1_(ii+1)];
+ seg2=[crv2_jj,crv2_(jj+1)];
+ tmp1=seg1_2-seg1_1;
+ tmp2=seg2_2-seg2_1;
+ snang=abs(Crossprod(tmp1,tmp2))/(Norm(tmp1)*Norm(tmp2));
+ tmp=Intersectseg(seg1,seg2,Eps1);
+ dst=tmp_1;
+ if(dst<Eps,
+ out=[tmp_2,ii+tmp_3,jj+tmp_4,dst,snang];
+ ,
+ if(dst<Eps2,
+ if((length(crv1)==2)%(|seg1_2-seg1_1|>Dist-Eps),
+ os1=seg1;
+ ,
+ p1=seg1_1; p2=seg1_2;
+ if(ii==1,
+ p3=crv1_3;
+ tmp=p2-p1;
+ tmp=(p1+p2)/2+[tmp_2,-tmp_1];
+ p0=Reflectpoint(p3,[(p1+p2)/2,tmp]);
+ ,
+ if(ii==length(crv1)-1,
+ p0=crv1_(ii-1);
+ tmp=p2-p1;
+ tmp=(p1+p2)/2+[tmp_2,-tmp_1];
+ p3=Reflectpoint(p0,[(p1+p2)/2,tmp]);
+ ,
+ p0=crv1_(ii-1); p3=crv1_(ii+2);
+ );
+ );
+ os1=Osplineseg([p0,p1,p2,p3]);
+ );
+ if((length(crv2)==2)%(|seg2_2-seg2_1|>Dist-Eps), //18.01.05
+ os2=seg2;
+ ,
+ p1=seg2_1; p2=seg2_2;
+ if(jj==1,
+ p3=crv2_3;
+ tmp=p2-p1;
+ tmp=(p1+p2)/2+[tmp_2,-tmp_1];
+ p0=Reflectpoint(p3,[(p1+p2)/2,tmp]);
+ ,
+ if(jj==length(crv2)-1,
+ p0=crv2_(jj-1);
+ tmp=p2-p1;
+ tmp=(p1+p2)/2+[tmp_2,-tmp_1];
+ p3=Reflectpoint(p0,[(p1+p2)/2,tmp]);
+ ,
+ p0=crv2_(jj-1); p3=crv2_(jj+2);
+ );
+ );
+ os2=Osplineseg([p0,p1,p2,p3]);
+ );
+ tmp2=[];
+ forall(1..(length(os1)-1),kk,
+ forall(1..(length(os2)-1),ll,
+ seg1=[os1_kk,os1_(kk+1)];
+ seg2=[os2_ll,os2_(ll+1)];
+ tmp=Intersectseg(seg1,seg2,Eps1);
+ if((tmp_1<Eps1)&(length(tmp)>1), //18.02.06
+ if(tmp_1<dst+Eps,
+ dst=tmp_1;
+ tmp2=select(tmp2,#_1<dst);
+ tmp2=append(tmp2,[dst,tmp_2]);
+ );
+ );
+ );
+ );
+ if(length(tmp2)>0,
+ tmp=apply(tmp2,#_2_1);
+ tmp1=[sum(tmp)/length(tmp2)];
+ tmp=apply(tmp2,#_2_2);
+ tmp1=append(tmp1,sum(tmp)/length(tmp2));
+ out=[tmp1];
+ p1=crv1_ii; p2=crv1_(ii+1);
+ tmp=[Op(2,p2-p1),-Op(1,p2-p1)];
+ tmp=Intersectline(out_1,tmp,p1,p2-p1);
+ tmp=min([max([tmp_3,0]),1]);
+ out=[tmp1,ii+tmp];
+ p1=crv2_jj; p2=crv2_(jj+1);
+ tmp=[Op(2,p2-p1),-Op(1,p2-p1)];
+ tmp=Intersectline(out_1,tmp,p1,p2-p1);
+ tmp=min([max([tmp_3,0]),1]);
+ out=concat(out,[jj+tmp,dst,snang]);
+ );
+ );
+ );
+ out;
+);
+////%Intersectpartseg end////
+
+////%Collectsameseg start////
+Collectsameseg(ptdL):=(
+ regional(Eps,gL,rL,numL,ii,jj,flg,tmp,tmp1,tmp2,tmp1md,
+ dst,kk,s1,e1,s2,e2);
+ Eps00=10^(-8);
+ if(length(ptdL)==0,
+ gL=[];rL=[];
+ ,
+ tmp1md=[ptdL_1];
+ rL=ptdL_(2..(length(ptdL)));
+ tmp1=tmp1md_1;
+ kk=floor(tmp1_2);
+ if(tmp1_2<kk+Eps00,
+ s1=kk-1-Eps00; e1=s1+2+2*Eps00;
+ ,
+ s1=kk-Eps00; e1=s1+1+2*Eps00;
+ );
+ kk=floor(tmp1_3);
+ if(tmp1_3<kk+Eps00,
+ s2=kk-1-Eps00; e2=s2+2+2*Eps00;
+ ,
+ s2=kk-Eps00; e2=s2+1+2*Eps00;
+ );
+ numL=[];
+ forall(1..(length(rL)),ii,
+ tmp=rL_ii;
+ tmp1=tmp_2;tmp2=tmp_3;
+ if((tmp1>s1)&(tmp1<e1)&(tmp2>s2)&(tmp2<e2),
+ tmp1md=append(tmp1md,tmp);
+ numL=append(numL,ii);
+ );
+ );
+ gL=[];
+ tmp=apply(tmp1md,#_4);
+ dst=min(tmp);
+ forall(tmp1md,
+ if(#_4<dst+Eps00,
+ gL=append(gL,#);
+ );
+ );
+ rL=remove(rL,rL_(numL));
+ );
+ [gL,rL];
+);
+////%Collectsameseg end////
+
+////%Intersectcurvespp start////
+Intersectcurvespp(crv1org,crv2org):=Intersectcurvespp(crv1org,crv2org,[]);
+Intersectcurvespp(crv1org,crv2org,options):=(
+//help:Intersectcurvespp(crv1,crv2);
+//help:Intersectcurvespp(options=[Eps1(0.01),Eps2(0.1),Dist(2)])
+ regional(Eps,Eps1,Eps2,Dist,crv1,crv2,ii,jj,seg1,seg2,self,loopL,out,
+ flg,tmp,tmp1,tmp2);
+ Eps=10^(-4);
+ Eps1=0.01;
+ Eps2=0.1;
+ Dist=10*Eps2;
+ if(length(options)>0,
+ Eps1=options_1;
+ if(length(options)>1,
+ Eps2=options_2;
+ Dist=10*Eps2;
+ if(length(options)>2,
+ Dist=options_3;
+ );
+ );
+ );
+ if(isstring(crv1org),tmp1=parse(crv1org),tmp1=crv1org);//18.01.05from
+ if(isstring(crv2org),tmp2=parse(crv2org),tmp2=crv2org);
+ tmp1=apply(tmp1,LLcrd(#));
+ tmp2=apply(tmp2,LLcrd(#));
+ crv1=[tmp1_1];
+ forall(tmp1,
+ tmp=crv1_(length(crv1));
+ if(|tmp-#|>Eps,
+ crv1=append(crv1,#);
+ );
+ );
+ crv2=[tmp2_1];
+ forall(tmp2,
+ tmp=crv2_(length(crv2));
+ if(|tmp-#|>Eps,
+ crv2=append(crv2,#);
+ );
+ );//18.01.05until
+ if(crv1==crv2,
+ self=1;
+ ,
+ self=0;
+ );
+ out=[];
+ forall(1..(length(crv1)-1),ii,
+ if(self==0,
+ loopL=1..(length(crv2)-1);
+ ,
+ loopL=(ii+2)..(length(crv2)-1);
+ );
+ forall(loopL,jj,
+ tmp=Intersectpartseg(crv1,crv2,ii,jj,Eps1,Eps2,Dist);
+ if(length(tmp)>0,
+ if(length(out)==0,
+ out=[tmp];
+ ,
+ tmp1=out_(length(out));
+ if(|tmp1_1-tmp_1|>Eps1,
+ out=append(out,tmp);
+ );
+ );
+ if(self==1,
+ tmp=[tmp_1,tmp_3,tmp_2,tmp_4,tmp_5];
+ out=append(out,tmp);
+ );
+ );
+ );
+ );
+ tmp2=out;
+ out=[];
+ tmp1=tmp2;
+ flg=0;
+ forall(1..(length(tmp2)),
+ if(flg==0,
+ tmp=Collectsameseg(tmp1);
+ out=append(out,tmp_1);
+ if(length(tmp_2)==0,
+ flg=1;
+ ,
+ tmp1=tmp_2;
+ );
+ );
+ );
+ forall(1..(length(out)),ii,
+ tmp1=out_ii;
+ if(length(tmp1)==1,
+ out_ii=tmp1_1;
+ ,
+ tmp=apply(tmp1,#_4);
+ dst=min(tmp);
+ tmp1=select(tmp1,#_4<dst+Eps);
+ tmp=apply(tmp1,#_1);
+ tmp=sum(tmp)/length(tmp);
+ tmp2=[tmp];
+ tmp=Nearestpt(tmp2_1,crv1org);
+ tmp2=append(tmp2,tmp_2);
+ tmp=Nearestpt(tmp2_1,crv2org);
+ tmp2=append(tmp2,tmp_2);
+ tmp2=concat(tmp2,[dst,tmp1_1_5]);
+ out_ii=tmp2;
+ );
+ );
+ if(length(out)>0, //190221from
+ out=sort(out,[#_2]);
+ ); //190221to
+ out;
+);
+////%Intersectcurvespp end////
+
+////%Intersectcurves start////
+Intersectcurves(crv1org,crv2org):=Intersectcurves(crv1org,crv2org,[]);
+Intersectcurves(crv1org,crv2org,options):=(
+//help:Intersectcurves(crv1,crv2);
+//help:Intersectcurves(options=[Eps1(0.1),Dist(2)])
+ regional(tmp);
+ tmp=Intersectcurvesop(crv1org,crv2org,options);
+ tmp=apply(tmp,#_1);
+);
+////%Intersectcurves end////
+
+///////////End of new Intersect //////////////
+
+////%Nearestptcrvphy start////
+Nearestptcrvphy(point,PL):=(
+ regional(tmp,pP,plist);
+ pP=Pcrd(point);
+ if(isstring(PL),plist=parse(PL),plist=PL);
+ if(Measuredepth(plist)==2,plist=plist_1);
+ plist=apply(plist,#); // 14.12.18
+ tmp=Nearestpt(pP,plist);
+ tmp=tmp_1;
+ [tmp_1/SCALEX,tmp_2/SCALEY];
+);
+////%Nearestptcrvphy end////
+
+////%Nearestptcrv start////
+Nearestptcrv(point,plist):=(
+//help:Nearestptcrv(A,"gr1");
+ regional(tmp,pt);//180723[3lines]
+ if(ispoint(point),pt=point.xy,pt=point);
+ tmp=Nearestpt(pt,plist);
+ tmp_1;
+);
+////%Nearestptcrv end////
+
+////%Nearestpt start////
+Nearestpt(point,PL2):=(
+ regional(PL1,PL,Ans,Flg,Eps,pA,Pm,Im,Sm,Nn,Ni,
+ a1,b1,a2,b2,v1,v2,x1,x2,Tmp,rT,pP,sS,Lm,Pm,Sm,Flg);
+//help:Nearestpt("gr1","gr2");
+ if(isstring(point),PL1=parse(point),PL1=point);
+ if(Measuredepth(PL1)==2,PL1=PL1_1);
+ if(!islist(PL1_1),
+ PL1=[PL1];
+ Flg=0;
+ ,
+ Flg=1;
+ );
+ if(isstring(PL2),PL=parse(PL2),PL=PL2);
+ if(Measuredepth(PL)==2,PL=PL_1);
+ Eps=10^(-6);
+ Ans=[PL1_1,1,PL_1,1,|PL1_1-PL_1|];
+ forall(1..(length(PL1)),Nn, // 16.05.04
+ pA=PL1_Nn;
+ Pm=PL_1;
+ Im=1;
+ Sm=|Pm-pA|;
+ forall(1..(length(PL)-1),Ni,
+ a1=PL_Ni_1; a2=PL_Ni_2;
+ b1=PL_(Ni+1)_1; b2=PL_(Ni+1)_2;
+ v1=b1-a1; v2=b2-a2;
+ x1=pA_1; x2=pA_2;
+ Tmp=v2^2+v1^2;
+ if(abs(Tmp)>Eps,
+ rT=(-a2*v2-v1*a1+v1*x1+x2*v2)/Tmp;
+ if(rT<-Eps,
+ pP=[a1,a2];
+ ,
+ if(rT>1+Eps,
+ pP=[b1,b2];
+ ,
+ pP=[a1+rT*v1,a2+rT*v2];
+ );
+ );
+ sS=|pP-pA|;
+ if(sS<Sm-Eps,
+ Tmp=Paramoncurve(pP,Ni,PL);
+ Pm=pP; Lm=Tmp; Sm=sS;
+ );
+ );
+ if(Sm<Ans_5, // 16.05.03from
+ Ans=[pA,Nn,Pm,Lm,Sm];
+ );
+ ); // 16.05.03until
+ );
+ if(Flg==0,
+ Ans=Ans_(3..5);
+ );
+ Ans;
+);
+////%Nearestpt end////
+
+////%Derivative start////
+Derivative(pdstr,ptinfo):=Derivative(pdstr,ptinfo,[]);//180719
+Derivative(Arg1,Arg2,Arg3):=(//1807120
+//help:Derivative(plotdata,"x=2");
+//help:Derivative(plotdata,"y=1");
+ regional(pdstr,ptinfo,options,name,v,pt,par,p0,p1,p2,p3,
+ pQ,pR,cc,m1,m2,out,tmp,tmp1,reL,ch,flg);
+ if(!islist(Arg3),
+ Derivative(Arg1,Arg2,Arg3,[]);
+ ,
+ pdstr=Arg1; ptinfo=Arg2; options=Arg3;
+ tmp=Divoptions(options);
+ reL=tmp_5;
+ ch=1;
+ if(length(reL)>0,
+ ch=reL_1;
+ options=remove(options,reL);
+ );
+ flg=0;//1807120
+ name="";
+ if(isstring(ptinfo),
+ tmp=Strsplit(ptinfo,"=");
+ name=Toupper(substring(tmp_1,0,1));
+ v=parse(tmp_2);
+ if(name=="X",
+ tmp1=Lineplot("",[[v,0],[v,1]],["nodata"]);
+ ,
+ tmp1=Lineplot("",[[0,v],[1,v]],["nodata"]);
+ );
+ tmp=Intersectcurvespp(pdstr,tmp1);
+ if(length(tmp)==0,
+ println(" Derivative cannot be found");
+ out="";
+ flg=1;
+ ,
+ tmp=sort(tmp,[#_3]);
+ pt=tmp_ch_1;
+ par=tmp_ch_2;
+ );
+ ,
+ pt=ptinfo_1;
+ par=ptinfo_2;
+ );
+ if(flg==0,
+ p0=Pointoncurve(par-1,pdstr);
+ p1=pt;
+ p2=Pointoncurve(par+1,pdstr);
+ p3=Pointoncurve(par+2,pdstr);
+ tmp=1+sqrt((1+Dotprod(p2-p0,p3-p1)/|p2-p0|/|p3-p1|)/2);
+ cc=4*|p2-p1|/3/(|p2-p0|+|p3-p1|)/tmp;
+ pQ=p1+cc*(p2-p0);
+ pR=p2+cc*(p1-p3);
+ m1=-p1_1+pQ_1;
+ m2=-p1_2+pQ_2;
+ if(name=="",out=[m1,m2]);
+ if(name=="X",out=m2/m1);
+ if(name=="Y",out=m1/m2);
+ );
+ out;
+ );
+);//180720to
+Derivative(fun,var,value,options):=(
+//help:Derivative("x^3","x",2);
+ regional(eqL,method,eps,str,x1,x2,y1,y2,tmp,tmp1,tmp2);
+ method="N";
+ tmp=Divoptions(options);
+ eqL=tmp_5;
+ forall(eqL,
+ tmp=substring(#,"=");
+ tmp1=Toupper(substring(#,0,1));
+ tmp2=substring(#,tmp,tmp+1);
+ if(tmp1=="M",
+ method=Toupper(tmp2);
+ );
+ );
+ if(method=="D",
+ str="d"+PaO();
+ str=str+replace(fun,var,"#")+",";
+ str=str+value+")";
+ tmp=Pcrd([1,parse(str)]); // 14.11.08
+ tmp_2;
+ );
+ if(method=="N",
+ eps=10^(-6);
+ x1=max(XMIN,value-eps);
+ x2=min(XMAX,value+eps);
+ tmp=Assign(fun,[var,"("+format(x1,6)+")"]);//180408
+ y1=parse(tmp);
+ tmp=Assign(fun,[var,"("+format(x2,6)+")"]);//180408
+ y2=parse(tmp);
+ (y2-y1)/(x2-x1);
+ );
+);
+////%Derivative end////
+
+////%Tangentplot start////
+Tangentplot(nm,pdstr,ptinfo):=Tangentplot(nm,pdstr,ptinfo,[]); //180720
+Tangentplot(nm,pdstr,ptinfo,optionsorg):=(
+//help:Tangentplot("1",pdstr,"x=2");
+//help:Tangentplot("1",pdstr,"y=3");
+//help:Tangentplot("1",pdstr,[[1,2],20.5]);
+//help:Tangentplot(Options2=[choice(1)]);
+ regional(name,v,pt,par,options,reL,ch,tmp,flg);
+ options=optionsorg; //1807120from
+ tmp=Divoptions(options);
+ reL=tmp_6;
+ ch=1;
+ if(length(reL)>0,
+ ch=reL_1;
+ options=remove(options,reL);
+ );
+ flg=0;//1807120to
+ name="";
+ if(isstring(ptinfo),
+ tmp=Strsplit(ptinfo,"=");
+ name=Toupper(substring(tmp_1,0,1));
+ v=parse(tmp_2);
+ if(name=="X",
+ tmp1=Lineplot("",[[v,0],[v,1]],["nodata"]);
+ ,
+ tmp1=Lineplot("",[[0,v],[1,v]],["nodata"]);
+ );
+ tmp=Intersectcurvespp(pdstr,tmp1);
+ if(length(tmp)==0,//1807120
+ println(" Derivative cannot be calculated");
+ flg=1;
+ ,
+ tmp=sort(tmp,[#_3]);//1807120[3lines]
+ pt=tmp_ch_1;
+ par=tmp_ch_2;
+ );
+ ,
+ pt=ptinfo_1;
+ par=ptinfo_2;
+ );
+ if(flg==0,
+ tmp=Derivative(pdstr,[pt,par]);
+ if(vname=="X",
+ Lineplot("tn"+nm,[pt,pt+tmp],options);
+ ,
+ Lineplot("tn"+nm,[pt,pt+tmp],options);
+ );
+ );
+);
+////%Tangentplot end////
+
+////%Integrate start////
+Integrate(Arg1,Arg2):=( //180708from
+ if(isstring(Arg2),
+ Integratefn(Arg1,Arg2,[]);
+ ,
+ Integratedt(Arg1,Arg2,[]);
+ );
+);
+Integrate(Arg1,Arg2,options):=(
+ if(isstring(Arg2),
+ Integratefn(Arg1,Arg2,options);
+ ,
+ Integratedt(Arg1,Arg2,options);
+ );
+);//180708to
+////%Integrate end////
+
+////%Integratedt start////
+Integratedt(pltdata,range,options):=(
+//help:Integrate("gr1",[1,3]);
+//help:Integrate(options=["Rule=o"]);
+ regional(tmp,tmp1,eqL,Rule,pdata,Sm,ptP,ptQ,list,va1,va2);
+ tmp=Divoptions(options);
+ eqL=tmp_5;
+ Rule="o";
+ forall(eqL,
+ if(Toupper(substring(#,0,1))=="R",
+ tmp=indexof(#,"=");
+ Rule=substring(#,tmp,tmp+1);
+ );
+ );
+ if(Rule=="o",
+ Sm= IntegrateO(pltdata,range);
+ ,
+ if(isstring(pltdata),pdata=parse(pltdata),pdata=pltdata);
+ if(Measuredepth(pdata)==2,pdata=pdata_1);
+ va1=MeetCurve(pdata,range_1,0);
+ va2=MeetCurve(pdata,range_2,0);
+ list=select(pdata,(#_1>range_1 & #_1<range_2));
+ list=apply(list,LLcrd(#)); // 15.09.14
+ list=concat([va1],list);
+ list=concat(list,[va2]);
+ Sm=0;
+ forall(1..(length(list)-1),
+ ptP=list_#; // 15.09.14
+ ptQ=list_(#+1);
+ Sm=Sm+(ptP_2+ptQ_2)*(ptQ_1-ptP_1)/2;
+ );
+ Sm;
+ );
+);
+////%Integratedt end////
+
+////%Integratefn start////
+Integratefn(fnstr,rngstr,options):=( //180708from
+//help:Integrate("sin(x)","x=[0,pi]",["Num=100","Rule=o"]);
+ regional(Sm,Lx,Rx,va1,va2,Num,Way,sx,ex,dx,xn,yn,
+ x0,x1,x2,y0,y1,y2,tmp,tmp1,tmp2,eqL,var,range,plt);
+ Num=100;
+ Way="o";
+ tmp=Divoptions(options);
+ eqL=tmp_5;
+ forall(eqL,
+ tmp=Strsplit(#,"=");
+ tmp1=Toupper(substring(tmp_1,0,1));
+ tmp2=tmp_2;
+ if(tmp1=="N",
+ Num=parse(tmp2);
+ );
+ if(tmp1=="R",
+ tmp2=substring(tmp2,0,1);
+ );
+ );
+ tmp=Strsplit(rngstr,"=");
+ var=tmp_1;
+ range=parse(tmp_2);
+ if(Way=="o",
+ sx=range_1;
+ ex=range_2;
+ dx=(ex-sx)/Num;
+ xn=apply(0..Num,sx+#*dx);
+ yn=apply(xn,parse(Assign(fnstr,[var,#]))); //181230
+ plt=apply(1..(Num+1),[xn_#,yn_#]);
+ Sm=IntegrateO(plt,range);
+ );//180708to
+ if(Way=="t",
+ Sm=0;
+ forall(1..Num,
+ Lx=range_1+(range_2-range_1)*(#-1)/Num;
+ Rx=range_1+(range_2-range_1)*#/Num;
+ va1=parse(replace(fnstr,vastr,Textformat(Lx,5)));
+ va2=parse(replace(fnstr,vastr,Textformat(Rx,5)));
+ Sm=Sm+(va1+va2)*(Rx-Lx)/2;
+ );
+ );
+ if(Way=="s",
+ Sm=0;
+ sx=range_1;
+ ex=range_2;
+ dx=(ex-sx)/Num;
+ xn=apply(0..Num,sx+#*dx);
+ yn=apply(xn,parse(replace(fnstr,vastr,Textformat(#,5))));
+ dx=dx/2;
+ repeat(Num,s,
+ x0=xn_s;
+ x1=(xn_s+xn_(s+1))/2;
+ x2=xn_(s+1);
+ y0=yn_s;
+ y1=parse(replace(fnstr,vastr,Textformat(x1,5)));
+ y2=yn_(s+1);
+ Sm=Sm+dx*(y0+4*y1+y2)/3;
+ );
+ );
+ Sm;
+);
+////%Integratefn end////
+
+////%IntegrateO start////
+IntegrateO(p0org,p1org,p2org,p3org):=(
+ regional(p0,p1,p2,p3,pQ,pR,cc,p01,p02,
+ p11,p12,p21,p22,p31,p32, tmp);
+ if(ispoint(p0org),p0=p0org.xy,p0=p0org); // 16.03.10
+ if(ispoint(p1org),p1=p1org.xy,p1=p1org); // 16.03.16
+ if(ispoint(p2org),p2=p2org.xy,p2=p2org);
+ if(ispoint(p3org),p3=p3org.xy,p3=p3org);
+ tmp=1+sqrt((1+Dotprod(p2-p0,p3-p1)/|p2-p0|/|p3-p1|)/2);
+ cc=4*|p2-p1|/3/(|p2-p0|+|p3-p1|)/tmp;
+ pQ=p1+cc*(p2-p0);
+ pR=p2+cc*(p1-p3);
+ p01=p1_1; p02=p1_2;
+ p31=p2_1; p32=p2_2;
+ p11=pQ_1; p12=pQ_2;
+ p21=pR_1; p22=pR_2;
+ tmp=-6*p12*p01+3*p12*p21+3*p12*p31+6*p02*p11-
+ 10*p02*p01+3*p02*p21+p02*p31-3*p22*p11-
+ 3*p22*p01+6*p22*p31-3*p32*p11-p32*p01-
+ 6*p32*p21+10*p32*p31;
+ tmp=tmp/20;
+);
+IntegrateO(pltdata,rangeorg):=(
+//help:IntegrateO("gr1",[0,2]);
+ regional(tmp,tmp1,tmp2,pdata,va1,va2,list,Bzk,Bzc,range,pmflg,
+ Sm,p0,p1,p2,p3,pQ,pR,cc,p01,p02,p11,p12,p21,p22,p31,p32);
+ if(isstring(pltdata),
+ pdata=parse(pltdata);
+ ,
+ pdata=pltdata;
+ );
+ if(Measuredepth(pdata)==2,pdata=pdata_1);
+ range=rangeorg;
+ pmflg=1;
+ if(range_2<range_1,
+ range=reverse(range);
+ pmflg=-1;
+ );
+ va1=Meetcurve(pdata,range_1,0);
+ va2=Meetcurve(pdata,range_2,0);
+ list=select(pdata,(#_1>range_1 & #_1<range_2));
+ if(length(list)>0, // 16.09.25
+ if(list_1_1>list_(length(list))_1, //16.11.03
+ list=reverse(list);
+// pmflg=pmflg*(-1);
+ );
+ );
+ list=apply(list,LLcrd(#));
+ list=concat([va1],list);
+ list=concat(list,[va2]);
+ Sm=0;
+ forall(1..(length(list)-1),
+ p1=list_#;
+ p2=list_(#+1);
+ if(#==1 % #==length(list)-1,
+ tmp1=(p1_2+p2_2)*(p2_1-p1_1)/2;
+ Sm=Sm+tmp1;
+ ,
+ p0=list_(#-1);
+ p3=list_(#+2);
+ tmp=1+sqrt((1+Dotprod(p2-p0,p3-p1)/|p2-p0|/|p3-p1|)/2);
+ cc=4*|p2-p1|/3/(|p2-p0|+|p3-p1|)/tmp;
+ pQ=p1+cc*(p2-p0);
+ pR=p2+cc*(p1-p3);
+ p01=p1_1; p02=p1_2;
+ p31=p2_1; p32=p2_2;
+ p11=pQ_1; p12=pQ_2;
+ p21=pR_1; p22=pR_2;
+ tmp1=-6*p12*p01+3*p12*p21+3*p12*p31+6*p02*p11-
+ 10*p02*p01+3*p02*p21+p02*p31-3*p22*p11-
+ 3*p22*p01+6*p22*p31-3*p32*p11-p32*p01-
+ 6*p32*p21+10*p32*p31;
+ tmp1=tmp1/20;
+ Sm=Sm+tmp1;
+ );
+ );
+ if(pmflg==-1,
+ Sm=-Sm;
+ );
+ Sm;
+);
+////%IntegrateO end////
+
+////%FindareaP start////
+FindareaP(pdstr):=( //180722
+//help:Findarea("sgABCA");
+ regional(pd,p1,p2,s,tmp);
+ if(isstring(pdstr),pd=parse(pdstr),pd=pdstr);
+ s=0;
+ forall(1..(length(pd)-1),
+ p1=Lcrd(pd_#);
+ p2=Lcrd(pd_(#+1));
+ tmp=(p1_2+p2_2)*(p2_1-p1_1)/2;
+ s=s+tmp;
+ );
+ if(s<0,s=-s);
+ s;
+);
+////%FindareaP end////
+
+////%FindareaO start////
+FindareaO(pdstr,len):=( // 18.10,13
+ regional(pd,p0,p1,p2,p3,s,tmp,Lflg);
+ if(isstring(pdstr),pd=parse(pdstr),pd=pdstr);
+ Lflg=0;
+ s=0;
+ forall(1..(length(pd)-1),
+ p1=pd_#;
+ p2=pd_(#+1);
+ if(Dist(p1,p2)<len,
+ if(#==1,p0=pd_(length(pd)-1),p0=pd_(#-1));
+ if(Dist(p0,p1)>len,p0=2*p1-p2);
+ if(#==length(pd)-1,p3=pd_2,p3=pd_(#+2));
+ if(Dist(p2,p3)>len,p3=2*p2-p1);
+ tmp=IntegrateO(p0,p1,p2,p3);
+ ,
+ tmp=(p1_2+p2_2)*(p2_1-p1_1)/2;
+ );
+ s=s+tmp;
+ );
+ if(s<0,s=-s);
+ s;
+);
+////%FindareaO end////
+
+////%Findarea start////
+Findarea(pdstr):=Findarea(pdstr,[]);//180722from
+Findarea(pdstr,options):=(
+//help:Findarea("cr1");
+//help:Findarea(options=["Len=1"]);
+ regional(tmp,tmp1,tmp2,eqL,way,len,out);
+ tmp=Divoptions(options);
+ eqL=tmp_5;
+ way="O";
+ len=1;
+ forall(eqL,
+ tmp=Strsplit(#,"=");
+ tmp1=Toupper(substring(tmp_1,0,1));
+ tmp2=tmp_2;
+ if(tmp1=="W",
+ way=Toupper(substring(tmp2,0,1));
+ );
+ if(tmp1=="L",//181013from
+ len=parse(tmp2);
+ );//181013to
+ );
+ if(way=="O",
+ out=FindareaO(pdstr,len);//181013
+ ,
+ out=FindareaP(pdstr);
+ );
+ out;
+);//180722to
+////%Findarea end////
+
+////%Findlength start////
+Findlength(pdstr):=(
+//help:Findlength("gr1");
+ regional(pd,p1,p2,s,tmp);
+ if(isstring(pdstr),pd=parse(pdstr),pd=pdstr);
+ s=0;
+ forall(1..(length(pd)-1),
+ p1=Lcrd(pd_#);
+ p2=Lcrd(pd_(#+1));
+ tmp=|p2-p1|;
+ s=s+tmp;
+ );
+ s;
+);
+////%Findlength end////
+
+////%Inversefun start////
+Inversefun(fnstr,rngstr,value):=(
+ regional(tmp,varstr,range,x1,x2,x3,va1,va2);
+ tmp=indexof(rngstr,"=");
+ varstr=substring(rngstr,0,tmp-1);
+ range=parse(substring(rngstr,tmp,length(rngstr)));
+ x1=range_1; x2=range_2;
+ repeat(15,
+ x3=(x1+x2)/2;
+ va1=parse(replace(fnstr,varstr,Textformat(x1,5)));
+ va2=parse(replace(fnstr,varstr,Textformat(x3,5)));
+ if((va1>value & va2>value) % (va1<value & va2<value),
+ x1=x3;
+ ,
+ x2=x3;
+ );
+ );
+ va1=parse(replace(fnstr,varstr,Textformat(x1,5)))-value;
+ va2=parse(replace(fnstr,varstr,Textformat(x2,5)))-value;
+ if(x1==range_1 % x2==range_2,
+ println("not found in ("+Textformat(range_1,5)
+ +","+Textformat(range_2,5)+")");
+ );
+ if(abs(va1)<=abs(va2),x1,x2);
+);
+////%Inversefun end////
+
+////%Com0th start////
+Com0th(String):=(
+ regional(str);
+ str=replace(String,LFmark,"");
+ COM0thlist=append(COM0thlist,str);
+);
+////%Com0th end////
+
+////%Com1st start////
+Com1st(String):=(
+ regional(str);
+ str=replace(String,LFmark,"");
+ GLIST=append(GLIST,str); // 15.05.27
+// COM1stlist=append(COM1stlist,str);
+);
+////%Com1st end////
+
+////%Com2nd start////
+Com2nd(String):=(
+// help:Com2nd(str);
+ regional(str,tmp);
+ str=replace(String,LFmark,"");
+ COM2ndlist=append(COM2ndlist,str);
+);
+////%Com2nd end////
+
+////%Com2ndpre start////
+Com2ndpre(String):=(
+ regional(str);
+ str=replace(String,LFmark,"");
+ COM2ndlist=prepend(str,COM2ndlist);
+);
+////%Com2ndpre end////
+
+////%Texcom start////
+Texcom(strorg):=( //17.09.22
+//help:Texcom("\color[cmyk]{0,0,0,0.5}");
+ regional(str);
+ str=replace(strorg,"\","\\");
+ str=replace(str,"\\\\","\\");
+ str="Texcom("+Dq+str+Dq+")";
+ Com2nd(str);
+);
+////%Texcom end////
+
+////%Ketcindylogo start////
+Ketcindylogo():=(
+//help:Ketcindylogo();
+ Com2nd("Texcom("+Dq+"\def\ketcindy{{K\kern-.20em
+ \lower.5ex\hbox{E}\kern-.125em{TCindy}}}"+Dq+")");
+);
+////%Ketcindylogo end////
+
+////%Drwline start////
+Drwline():=Drwline(Textformat(GrL,5));
+Drwline(gstr):=(
+ Com2nd("Drwline("+gstr+")");
+);
+////%Drwline end////
+
+
+////%Dashline start////
+Dashline(gstr):=(
+ Com2nd("Dashline("+gstr+")");
+);
+////%Dashline end////
+
+////%Invdashline start////
+Invdashline(gstr):=(
+ Com2nd("Invdashline("+gstr+")");
+);
+////%Invdashline end////
+
+////%Dottedline start////
+Dottedline(gstr):=(
+ Com2nd("Dottedline("+gstr+")");
+);
+////%Dottedline end////
+
+////%Drawlinetype start////
+Drawlinetype(name,type):=(
+//help:Drawlinetype("gr1","da,1");
+ regional(Dop,tmp,tmp1,tmp2);
+ Dop="";
+ tmp1=indexof(type,",");
+ if(tmp1>0,
+ Dop=","+substring(type,tmp1,length(type));
+ );
+ tmp1=Toupper(substring(type,0,3));
+ if(tmp1=="DR",
+ Drwline(name+Dop);
+ );
+ if(tmp1=="DA",
+ Dashline(name+Dop);
+ );
+ if(tmp1=="ID",
+ Invdashline(name+Dop);
+ );
+ if(tmp1=="DO",
+ Dottedline(name+Dop);
+ );
+);
+////%Drawlinetype end////
+
+////%Setunitlen start////
+Setunitlen():=(
+ println(ULEN);
+);
+Setunitlen(UI):=(
+//help:Setunitlen("1.5cm");
+ regional(Dx,Dy,Sym,SL,OL,Is,VL,Ucode,ii,cha,
+ str,Unit,Valu,flg,tmp);
+ Dx=XMAX-XMIN;
+ Dy=YMAX-YMIN;
+ Sym=".0123456789 +-*/";
+ SL=Sym;
+ OL="+-*/";
+ if(length(UI)>0,
+ ULEN=UI;
+ GLIST=append(GLIST,"Setunitlen("+Dq+UI+Dq+")");//180513 //no ketjs
+ );
+ Is=1;
+ VL="";
+ Ucode=ULEN;
+ flg=0;
+ forall(1..(length(Ucode)),ii,
+ if(flg==0,
+ cha=substring(Ucode,ii-1,ii);
+ if(indexof(SL,cha)>0,
+ if(indexof(OL,cha)>0,
+ tmp=substring(Ucode,Is-1,ii);
+ str=VL+tmp+cha;
+ VL=str;
+ Is=ii+1;
+ );
+ ,
+ Unit=substring(Ucode,ii-1,ii+1);
+ str=substring(Ucode,Is-1,ii-1);
+ VL=VL+str;
+ flg=1;
+ );
+ );
+ );
+ Valu=parse(VL);
+ str=format(Valu,6);
+ ULEN=str+Unit;
+ if(Unit=="cm",MilliIn=1000/2.54*Valu);
+ if(Unit=="mm",MilliIn=1000/2.54*Valu/10);
+ if(Unit=="in",MilliIn=1000*Valu);
+ if(Unit=="pt",MilliIn=1000/72.27*Valu);
+ if(Unit=="pc",MilliIn=000/6.022*Valu);
+ if(Unit=="bp",MilliIn=1000/72*Valu);
+ if(Unit=="dd2",MilliIn=1000/1238/1157/72.27*Valu);
+ if(Unit=="cc",MilliIn=1000/1238/1157/72.27*12*Valu);
+ if(Unit=="sp",MilliIn=1000/72.27/65536*Valu/10);
+ MARKLEN=MARKLENNow*1000/2.54/MilliIn;
+ MEMORI=MEMORINow*1000/2.54/MilliIn;
+);
+////%Setunitlen end////
+
+////%Setmarklen start////
+Setmarklen(ratio):=(
+//help:Setmarklen(0.2);
+ MARKLEN=ratio*0.2;//16.11.01
+ Com2nd("Setmarklen("+Textformat(ratio,5)+")"); //no ketjs
+);
+////%Setmarklen end////
+
+////%Setorigin start////
+Setorigin(point):=(
+//help:Setorigin([1,2]);
+ GENTEN=point; //181231
+ Com2nd("Setorigin("+Textformat(point,5)+")"); //no ketjs
+);
+////%Setorigin end////
+
+////%Fontsize start////
+Fontsize(sizestr):=(
+//help:Fontsize("s");
+ Com2nd("Fontsize('"+sizestr+"')"); //no ketjs
+);
+////%Fontsize end////
+
+////%Setpen start////
+Setpen(width):=(
+//help:Setpen(2);
+ PenThick=PenThickInit*width; // 16.04.09
+ Com2nd("Setpen("+text(width)+")"); //no ketjs
+);
+////%Setpen end////
+
+////%Setscaling start////
+Setscaling(sc):=(
+//help:Setscaling(3);
+ regional(tmp);
+ tmp=format(sc,5);
+ if(!islist(sc),
+ SCALEX=1;
+ SCALEY=sc;
+ Com0th("Setscaling("+tmp+")");
+ ,
+ SCALEX=sc_1;
+ SCALEY=sc_2;
+ Com0th("Setscaling("+tmp_1+","+tmp_2+")");
+ );
+ Setwindow("Msg=no");
+);
+////%Setscaling end////
+
+////%Lcrd start////
+Lcrd(pt):=(
+ regional(tmp);
+ if(ispoint(pt),
+ tmp=[pt.x/SCALEX,pt.y/SCALEY];
+ ,
+ tmp=pt;
+ );
+ tmp;
+);
+////%Lcrd end////
+
+////%Pcrd start////
+Pcrd(pt):=(
+ regional(tmp);
+ if(ispoint(pt),
+ tmp=re(pt.xy); // 15.07.24
+ ,
+ tmp=[pt_1*SCALEX,pt_2*SCALEY];
+ );
+ tmp;
+);
+////%Pcrd end////
+
+////%LLcrd start////
+LLcrd(pt):=(
+ regional(tmp);
+ if(ispoint(pt),
+ tmp=pt.xy
+ ,
+ tmp=pt;
+ );
+ tmp=[tmp_1/SCALEX,tmp_2/SCALEY];
+ tmp;
+);
+////%LLcrd end////
+
+////%Doscaling start////
+Doscaling(pltdata):=(
+ regional(Level,Out,gL,gr,tmp);
+ if(ispoint(pltdata) % isreal(pltdata_1),
+ gL=[[pltdata]];
+ Level=0;
+ ,
+ if(ispoint(pltdata_1) % isreal(pltdata_1_1),
+ gL=[pltdata];
+ Level=1;
+ ,
+ gL=pltdata;
+ Level=2;
+ );
+ );
+ Out=[];
+ forall(gL,gr,
+ tmp=apply(gr,Lcrd(#));
+ tmp=apply(tmp,LLcrd(#));
+ Out=concat(Out,[tmp]);
+ );
+ if(Level==0,
+ Out=Out_1_1;
+ );
+ if(Level==1,
+ Out=Out_1;
+ );
+ Out;
+);
+////%Doscaling end////
+
+////%Unscaling start////
+Unscaling(pltdata):=(
+ regional(Level,Out,gL,gr,tmp);
+ if(ispoint(pltdata) % isreal(pltdata_1),
+ gL=[[pltdata]];
+ Level=0;
+ ,
+ if(ispoint(pltdata_1) % isreal(pltdata_1_1),
+ gL=[pltdata];
+ Level=1;
+ ,
+ gL=pltdata;
+ Level=2;
+ );
+ );
+ Out=[];
+ forall(gL,gr,
+ tmp=apply(gr,Lcrd(#));
+ tmp=apply(tmp,LLcrd(#));
+ Out=concat(Out,[tmp]);
+ );
+ if(Level==0,
+ Out=Out_1_1;
+ );
+ if(Level==1,
+ Out=Out_1;
+ );
+ Out;
+);
+////%Unscaling end////
+
+////%Setpt start////
+Setpt(n):=Ptsize(n);
+//help:Setpt(5);
+Ptsize(n):=(
+ println("Setpt("+text(n)+")");
+ TenSize=TenSizeInit*n;
+ Com2nd("Setpt("+text(n)+")"); // 14.01.19
+);
+////%Setpt end////
+
+////%Definecolor start////
+Definecolor(name,data):=(
+//help:Definecolor("mycolor",[1,1,1,0]);
+ regional(type,tmp);
+ if(length(data)>3,type="cmyk",type="rgb");
+ tmp=text(data);
+ tmp=substring(tmp,1,length(tmp)-1);
+ tmp="\definecolor{"+name+"}{"+type+"}{"+tmp+"}";
+ Texcom(tmp);
+);
+////%Definecolor end////
+
+////%Setcolor start////
+Setcolor(parorg):=( //180603renew
+//help:Setcolor([1,0,0,1]);
+//help:Setcolor([1,1,0]);
+ regional(par,cstr,tmp,tmp1);
+ par=parorg;
+ if(isstring(par),
+ if(par=="black",par=[0,0,0]);
+ if(par=="white",par=[1,1,1]);
+ if(par=="red",par=[1,0,0]);
+ if(par=="green",par=[0,1,0]);
+ if(par=="blue",par=[0,0,1]);
+ if(par=="cyan",par=[0,1,1]);
+ if(par=="magenta",par=[1,0,1]);
+ if(par=="yellow",par=[1,1,0]);
+ );
+ cstr=text(par);
+ cstr=substring(cstr,1,length(cstr)-1);
+ if(length(par)==3,
+ cstr="Texcom('\\color[rgb]{"+cstr+"}')"; //no ketjs
+ KCOLOR=par;
+ );
+ if(length(par)==4,
+ cstr="Texcom('\\color[cmyk]{"+cstr+"}')"; //no ketjs
+ tmp=Colorcmyk2rgb(par);
+ KCOLOR=tmp;
+ );
+ Com2nd(cstr); //no ketjs
+);
+////%Setcolor end////
+
+////%Colorrgb2cmyk start////
+Colorrgb2cmyk(clr):=(
+// help:ColorRgb([0.2,0.5,0.1]);
+ regional(clrnew,tmp,black);
+ tmp=apply(clr,1-#);
+ black=min(tmp);
+ if(black!=1, //181112from
+ tmp=apply(clr,(1-#-black)/(1-black));
+ clrnew=append(tmp,black);
+ ,
+ clrnew=[0,0,0,1];
+ ); //181112to
+ clrnew;
+);
+////%Colorrgb2cmyk end////
+
+////%Colorcmyk2rgb start////
+Colorcmyk2rgb(clr):=(
+// help:ColorRgb([0.2,0.5,0.1,0.2]);
+ regional(clrnew,tmp,black);
+ black=clr_4;
+ tmp=apply(clr,1-min(1,#*(1-black)+black));
+ clrnew=tmp_(1..3);
+ clrnew;
+);
+////%Colorcmyk2rgb end////
+
+////%Colorrgbhsv start////
+Colorrgbhsv(rgb):=(
+ regional(varR,varG,varB,varMin,varMax,delMax,hh,ss,vv,delR,delG,delB);
+ varR = rgb_1;
+ varG = rgb_2;
+ varB = rgb_3;
+ varMin = min( [varR, varG, varB] );
+ varMax = max( [varR, varG, varB] );
+ delMax = varMax - varMin ;
+ vv = varMax;
+ if ( delMax == 0 ,
+ hh = 0 ;
+ ss = 0 ;
+ ,
+ ss = delMax / varMax;
+ delR = ( ( ( varMax - varR ) / 6 ) + ( delMax / 2 ) ) / delMax;
+ delG = ( ( ( varMax - varG ) / 6 ) + ( delMax / 2 ) ) / delMax;
+ delB = ( ( ( varMax - varB ) / 6 ) + ( delMax / 2 ) ) / delMax;
+ if( varR == varMax ,
+ hh = delB - delG;
+ ,
+ if ( varG == varMax,
+ hh = ( 1 / 3 ) + delR - delB;
+ ,
+ if ( varB == varMax ,
+ hh = ( 2 / 3 ) + delG - delR;
+ );
+ );
+ );
+ if ( hh < 0 ,hh = hh+1);
+ if ( hh > 1 ,hh = hh-1);
+ );
+ [hh*360,ss,vv];
+);
+////%Colorrgbhsv end////
+
+////%Colorhsvrgb start////
+Colorhsvrgb(sL):=(
+ regional(tmp,tmp1,tmp2,tmp3,hi,ff,dL);
+ tmp=[sL_1/60,sL_2,sL_3];
+ hi=mod(floor(tmp_1),6);
+ ff=tmp_1-floor(tmp_1);
+ tmp2=tmp_3*[1-tmp_2,1-tmp_2*ff,1-tmp_2*(1-ff)];
+ tmp2=append(tmp2,tmp_3);
+ if(hi==0,dL=tmp2_[4,3,1]);
+ if(hi==1,dL=tmp2_[2,4,1]);
+ if(hi==2,dL=tmp2_[1,4,3]);
+ if(hi==3,dL=tmp2_[1,2,4]);
+ if(hi==4,dL=tmp2_[3,1,4]);
+ if(hi==5,dL=tmp2_[4,1,2]);
+ dL;
+);
+////%Colorhsvrgb end////
+
+////%Colorrgbhsl start////
+Colorrgbhsl(rgb):=(
+ regional(rr,gg,bb,mn,mx,delta,deltaR,deltaG,deltaB,hh,ss,ll);
+ rr = rgb_1 ;
+ gg = rgb_2 ;
+ bb = rgb_3 ;
+ mn = min([rr, gg, bb]);
+ mx = max([rr, gg, bb]);
+ delta = mx - mn;
+ ll = (mx + mn) / 2;
+ if (delta == 0,
+ hh=0;
+ ss=0;
+ ,
+ if (ll < 0.5,
+ ss = delta/ (mx + mn);
+ ,
+ ss = delta / (2 - mx - mn);
+ );
+ deltaR = (((mx - rr) / 6) + (delta / 2)) / delta;
+ deltaG = (((mx - gg) / 6) + (delta / 2)) / delta;
+ deltaB = (((mx - bb) / 6) + (delta / 2)) / delta;
+ if (rr == mx,
+ hh = deltaB - deltaG;
+ ,
+ if (gg == mx,
+ hh = (1 / 3) + deltaR - deltaB;
+ ,
+ if (bb == mx,
+ hh = (2 / 3) + deltaG - deltaR;
+ );
+ );
+ );
+ if ( hh < 0, hh = hh+1);
+ if ( hh > 1, hh = hh-1);
+ );
+ [hh*360,ss,ll];
+);
+////%Colorrgbhsl end////
+
+////%Colorhslrgb start////
+Colorhslrgb(hsl):=(
+ regional(hh,ss,ll,rr,gg,bb,var1,var2);
+ hh=hsl_1/360;
+ ss=hsl_2;
+ ll=hsl_3;
+ if ( ss == 0.0,
+ rr = ll ;
+ gg = ll ;
+ bb = ll ;
+ ,
+ if ( ll < 0.5 ,
+ var2 = ll * ( 1.0 + ss );
+ ,
+ var2 = ( ll + ss ) - ( ss * ll );
+ );
+ var1 = 2.0 * ll - var2;
+ rr = Hue2rgb( var1, var2, hh + ( 1.0 / 3.0 ) );
+ gg = Hue2rgb( var1, var2, hh );
+ bb = Hue2rgb( var1, var2, hh - ( 1.0 / 3.0 ) );
+ );
+ [rr,gg,bb];
+);
+////%Colorhslrgb end////
+
+////%Hue2rgb start////
+Hue2rgb(vv1,vv2,vh):=(
+ regional(out);
+ if ( vh < 0.0 ,vh =vh+1);
+ if ( vh > 1.0 ,vh =vh-1);
+ if ( 6.0*vh < 1.0 ,
+ out = vv1 + ( vv2 - vv1 ) * 6.0 * vh ;
+ ,
+ if( 2.0*vh < 1.0 ,
+ out = vv2;
+ ,
+ if ( 3.0*vh < 2.0 ,
+ out = vv1 + ( vv2 - vv1 ) * ( ( 2.0 / 3.0 ) - vh ) * 6.0 ;
+ ,
+ out= vv1 ;
+ );
+ );
+ );
+ out;
+);
+////%Hue2rgb end////
+
+////%Colorrgbhwb start////
+Colorrgbhwb(sL):=(
+ regional(dl1,dl2,dl3);
+ dl1 = Colorrgbhsl(sL)_1;//Colorcode("rgb","hsl",sL)_1;
+ dl2 = min(sL);
+ dl3 = 1 - max(sL);
+ dL= [dl1, dl2 , dl3 ];
+);
+////%Colorrgbhwb end////
+
+////%Colorhwbrgb start////
+Colorhwbrgb(sLorg):=(
+ regional(sL,tmp,tmp1,tmp2,tmp3,ratio,ff,ii,vv,nn,dL,flg);
+ sL=sLorg;
+ sL=[sL_1/360,sL_2,sL_3];
+ ratio = sL_2 + sL_3;
+ // sL_2 + sL_3 cant be > 1
+ if (ratio > 1.,
+ sL_2 =sL_2 / ratio;
+ sL_3 = sL_3 / ratio;
+ );
+ ii = floor(6 * sL_1);
+ vv = 1 - sL_3;
+ ff = 6 * sL_1 - ii;
+ if(mod(ii,2)==1,ff = 1 - ff);
+ nn = sL_2 + ff * (vv - sL_2); // linear interpolation
+ tmp=[[vv,nn,sL_2],[nn,vv,sL_2],[sL_2,vv,nn],
+ [sL_2,nn,vv],[nn,sL_2,vv],[vv,sL_2,nn],[vv,nn,sL_2]];
+ flg=0;
+ forall(0..6,
+ if(flg==0 & ii == # ,
+ dL=tmp_(#+1);
+ flg=1;
+ );
+ );
+ dL;
+);
+////%Colorhwbrgb end////
+
+////%Colorcode start////
+Colorcode(src,dest,sL):=( // 181212 some colorchange deleted
+//help:Colorcode("rgb","cmyk",[1,0.5,0]);
+ regional(tmp,tmp1,tmp2,tmp3,mn,mx,delta,black,dL,flg);
+ regional(dl1,dl2,dl3);
+ if(src=="rgb" & dest=="cmyk",dL=Colorrgb2cmyk(sL));
+ if(src=="cmyk" & dest=="rgb",dL=Colorcmyk2rgb(sL));
+ if(src=="rgb" & dest=="hsv", dL=Colorrgbhsv(sL));
+ if(src=="rgb" & dest=="hsl", dL=Colorrgbhsl(sL));
+ if(src=="rgb" & dest=="hwb", dL=Colorrgbhwb(sL));
+ if(src=="hsv" & dest=="rgb", dL=Colorhsvrgb(sL));
+ if(src=="hsl" & dest=="rgb", dL=Colorhslrgb(sL));
+ if(src=="hwb" & dest=="rgb", dL=Colorhwbrgb(sL));
+ dL;
+);
+////%Colorcode end////
+
+////%Colorname2rgb start////
+Colorname2rgb(name):=( //181212
+//help:Colorname2rgb("sepia");
+ regional(dL,nameL,codeL,tmp);
+ dL=[
+ ["greenyellow",[0.15,0,0.69,0]],["yellow",[0,0,1,0]],
+ ["goldenrod",[0,0.1,0.84,0]],["dandelion",[0,0.29,0.84,0]],
+ ["apricot",[0,0.32,0.52,0]],["peach",[0,0.5,0.7,0]],
+ ["melon",[0,0.46,0.5,0]],["yelloworange",[0,0.42,1,0]],
+ ["orange",[0,0.61,0.87,0]],["burntorange",[0,0.51,1,0]],
+ ["bittersweet",[0,0.75,1,0.24]],["redorange",[0,0.77,0.87,0]],
+ ["mahogany",[0,0.85,0.87,0.35]],["maroon",[0,0.87,0.68,0.32]],
+ ["brickred",[0,0.89,0.94,0.28]],["red",[0,1,1,0]],
+ ["orangered",[0,1,0.5,0]],["rubinered",[0,1,0.13,0]],
+ ["wildstrawberry",[0,0.96,0.39,0]],["salmon",[0,0.53,0.38,0]],
+ ["carnationpink",[0,0.63,0,0]],["magenta",[0,1,0,0]],
+ ["violetred",[0,0.81,0,0]],["rhodamine",[0,0.82,0,0]],
+ ["mulberry",[0.34,0.9,0,0.02]],["redviolet",[0.07,0.9,0,0.34]],
+ ["fuchsia",[0.47,0.91,0,0.08]],["lavender",[0,0.48,0,0]],
+ ["thistle",[0.12,0.59,0,0]],["orchid",[0.32,0.64,0,0]],
+ ["darkorchid",[0.4,0.8,0.2,0]],["purple",[0.45,0.86,0,0]],
+ ["plum",[0.5,1,0,0]],["violet",[0.79,0.88,0,0]],
+ ["royalpurple",[0.75,0.9,0,0]],["blueviolet",[0.86,0.91,0,0.04]],
+ ["periwinkle",[0.57,0.55,0,0]], ["cadetblue",[0.62,0.57,0.23,0]],
+ ["cornflowerblue",[0.65,0.13,0,0]],["midnightblue",[0.98,0.13,0,0.43]],
+ ["navyblue",[0.94,0.54,0,0]],["royalblue",[1,0.5,0,0]],
+ ["blue",[1,1,0,0]],["cerulean",[0.94,0.11,0,0]],
+ ["cyan",[1,0,0,0]],["processblue",[0.96,0,0,0]],
+ ["skyblue",[0.62,0,0.12,0]],["turquoise",[0.85,0,0.2,0]],
+ ["tealblue",[0.86,0,0.34,0.02]],["aquamarine",[0.82,0,0.3,0]],
+ ["bluegreen",[0.85,0,0.33,0]],["emerald",[1,0,0.5,0]],
+ ["junglegreen",[0.99,0,0.52,0]],["seagreen",[0.69,0,0.5,0]],
+ ["green",[1,0,1,0]],["forestgreen",[0.91,0,0.88,0.12]],
+ ["pinegreen",[0.92,0,0.59,0.25]],["limegreen",[0.5,0,1,0]],
+ ["yellowgreen",[0.44,0,0.74,0]],["springgreen",[0.26,0,0.76,0]],
+ ["olivegreen",[0.64,0,0.95,0.4]],["rawsienna",[0,0.72,1,0.45]],
+ ["sepia",[0,0.83,1,0.7]],["brown",[0,0.81,1,0.6]],
+ ["tan",[0.14,0.42,0.56,0]],["gray",[0,0,0,0.5]],
+ ["lightgray",[0,0,0,0.17]], //190429
+ ["cindycolor",[0.66,0,69,0.71]], //190504
+ ["black",[0,0,0,1]],["white",[0,0,0,0]]
+ ];
+ tmp=select(dL,#_1==name);
+ if(length(tmp)>0,
+ tmp=tmp_1;
+ code=tmp_2;
+ code=Colorcmyk2rgb(code);
+ ,
+ println(" "+name+" not found");
+ code=Assign(name); //190323
+ );
+);
+////%Colorname2rgb end////
+
+////%Getlinestyle start////
+Getlinestyle(str,name):=(
+ regional(noflg,tmp,tmp1,tmp2,Dop,Ltype,subflg);
+ Ltype=-1;
+ Dop="";
+ tmp1=indexof(str,",");
+ if(tmp1>0,
+ Dop=","+substring(str,tmp1,length(str));
+ );
+ noflg=parse(substring(str,0,1));
+ if(substring(name,0,3)=="sub",subflg=1,subflg=0); // 16.02.29
+ tmp1=substring(str,1,3);
+ tmp2=""; //190119from
+ tmp=indexof(str,",");
+ if(tmp>0,
+ tmp2=substring(str,tmp,length(str));
+ ); //190119to
+ if(tmp1=="dr" % tmp1=="Dr",
+// Ltype=0;
+ if(length(tmp2)==0,tmp2="1"); //190125
+ Ltype=[0,tmp2]; //190119
+ if(noflg==0 & subflg==0, // 16.02.29
+ Drwline(name+Dop);
+ );
+ );
+ if(tmp1=="da" % tmp1=="Da",
+// Ltype=1;
+ if(length(tmp2)==0,tmp2="1,1"); //190125
+ Ltype=[1,tmp2]; //190119
+ if(noflg==0 & subflg==0, // 16.02.29
+ Dashline(name+Dop);
+ );
+ );
+ if(tmp1=="id" % tmp1=="Id",
+// Ltype=2; // 15.11.09
+ if(length(tmp2)==0,tmp2="1,1"); //190125
+ Ltype=[2,tmp2]; //190119
+ if(noflg==0 & subflg==0, // 16.02.29
+ Invdashline(name+Dop);
+ );
+ );
+ if(tmp1=="do" % tmp1=="Do",
+// Ltype=3;
+ if(length(tmp2)==0,tmp2="1,1"); //190125
+ Ltype=[3,tmp2]; //190119
+ if(noflg==0 & subflg==0, // 16.02.29
+ Dottedline(name+Dop);
+ );
+ );
+ if(tmp1=="dp" % tmp1=="Dp",
+// Ltype=0;
+ if(length(tmp2)==0,tmp2="1"); //190125
+ Ltype=[0,tmp2]; //190119
+ tmp1=parse(name);
+ tmp2="";
+ forall(tmp1,
+ tmp2=tmp2+Textformat(#_1,5)+",";
+ );
+ tmp2=substring(tmp2,0,length(tmp2)-1);
+ if(noflg==0,
+ Drwpt(tmp2+Dop);
+ );
+ );
+ if(tmp1=="no" % tmp1=="No",
+ Ltype=10;
+ );
+ Ltype;
+);
+////%Getlinestyle end////
+
+////%Chunderscore start////
+Chunderscore(str):=(
+ regional(flg,tmp,tmp1,tmp2,tmp3);
+ if(indexof(str,"]")>0,
+ tmp1=replace(str,"]",",]");
+ ,
+ tmp1=str+",";
+ );
+ flg=0;
+ tmp2=[];
+ tmp3=0;
+ forall(1..(length(tmp1)),
+ if(flg==0,
+ tmp=substring(tmp1,tmp3,length(tmp1));
+ tmp=indexof(tmp,"_");
+ if(tmp==0,
+ flg=1;
+ ,
+ tmp3=tmp3+tmp;
+ tmp=substring(tmp1,tmp3,length(tmp1));
+ tmp=indexof(tmp,",")-1;
+ tmp=substring(tmp1,tmp3,tmp3+tmp);
+ tmp2=append(tmp2,tmp);
+ );
+ );
+ );
+ forall(tmp2,
+ tmp1=replace(tmp1,"_"+#,"("+#+")");
+ );
+ if(indexof(str,"]")>0,
+ tmp1=replace(tmp1,",]",")");
+ tmp1=replace(tmp1,"[","list"+PaO());
+ ,
+ tmp1=substring(tmp1,0,length(tmp1)-1);
+ );
+ tmp1;
+);
+////%Chunderscore end////
+
+////%AddGraph start////
+AddGraph(nm,pltdata):=AddGraph(nm,pltdata,[]);
+AddGraph(nm,pltdata,options):=(
+//help:AddGraph("1","imp1"); // 16.04.04
+//help:Addgraph("1",["[pt1]","gr1"],["nodisp"]);
+ regional(name,Ltype,Noflg,opcindy,pdata,fname,flg,
+ tmp,tmp1,tmp2,tmp3,color);
+ if(substring(nm,0,1)=="-",
+ name=substring(nm,1,length(nm));
+ ,
+ name="ad"+nm;
+ );
+ tmp=Divoptions(options);
+ Ltype=tmp_1;
+ Noflg=tmp_2;
+ color=tmp_(length(tmp)-2);
+ opcindy=tmp_(length(tmp));
+ if(isstring(pltdata),
+ pdata=parse(pltdata)
+ ,
+ if(!islist(pltdata),pdata=[pltdata],pdata=pltdata);
+ pdata=apply(pdata,parse(#));
+ ); // 15.01.22
+ pdata=Flattenlist(pdata);
+ tmp1=[];
+ forall(pdata,tmp2,
+ tmp=apply(tmp2,Pcrd(#));
+ tmp1=append(tmp1,tmp);
+ );
+ if(length(tmp1)==1,tmp1=tmp1_1);
+ pdata=tmp1;
+ if(Noflg<3,
+ println("generate addgraph "+name);
+ tmp=name+"="+Textformat(pdata,5)+";"; //190415
+ parse(tmp);
+ if(isstring(pltdata), // 16.04.04 from
+ if(indexof(pltdata,"]")>0,
+ tmp1="list"+PaO()+"Listplot"+PaO()+substring(pltdata,1,length(pltdata));
+ tmp1=replace(tmp1,"]",",]");
+ ,
+ tmp1="Listplot("+substring(pltdata,0,length(pltdata))+",]";
+ );
+ flg=0;
+ tmp2=[];
+ tmp3=0;
+ forall(1..(length(tmp1)),
+ if(flg==0,
+ tmp=indexof(substring(tmp1,tmp3,length(tmp1)),"_");
+ if(tmp==0,
+ flg=1;
+ ,
+ tmp3=tmp3+tmp;
+ tmp=indexof(substring(tmp1,tmp3,length(tmp1)),",")-1;
+ tmp=substring(tmp1,tmp3,tmp3+tmp);
+ tmp2=append(tmp2,tmp);
+ );
+ );
+ );
+ forall(tmp2,
+ tmp1=replace(tmp1,"_"+#,"("+#+")");
+ );
+ tmp1=replace(tmp1,",]",")");
+ tmp1=replace(tmp1,",","),Listplot(");
+ if(indexof(pltdata,"[")>0,
+ tmp1=tmp1+")";
+ );
+ GLIST=append(GLIST,name+"="+tmp1); //no ketjs
+ ,
+ if(Measuredepth(pdata)==1,
+ tmp1=name+"=Listplot("+Textformat(pdata,5)+")";
+ ,
+ tmp1="list"+PaO();
+ forall(1..(length(pdata)),
+ tmp=name+"p"+Textformat(#,5)+"=";
+ if(length(pdata_#)>1, // 15.01.22
+ tmp=tmp+"Listplot("+Textformat(pdata_#,5)+");"; //190425
+ ,
+ tmp=tmp+"Pointdata("+Textformat(pdata_#_1,5)+");"; //190425
+ );
+ GLIST=append(GLIST,tmp); //no ketjs
+ tmp1=tmp1+name+"p"+Textformat(#,5)+",";
+ );
+ tmp1=name+"="+substring(tmp1,0,length(tmp1)-1)+");"; //190425
+ );
+ GLIST=append(GLIST,tmp1); //no ketjs
+ );
+ ); // 16.04.04 until
+ if(Noflg<2,
+ if(isstring(Ltype),
+ if((Noflg==0)&(color!=KCOLOR), //181020 //no ketjs on
+ Texcom("{");Com2nd("Setcolor("+color+")");//180722
+ ); //no ketjs off
+ Ltype=Getlinestyle(text(Noflg)+Ltype,name);
+ if((Noflg==0)&(color!=KCOLOR), //181020 //no ketjs on
+ Texcom("}");//180722
+ ); //no ketjs off
+ ,
+ if(Noflg==1,Ltype=0);
+ );
+ GCLIST=append(GCLIST,[name,Ltype,opcindy]);
+ );
+);
+////%AddGraph end////
+
+////%Joincrvs start////
+Joincrvs(nm,plotstrL):=Joincrvs(nm,plotstrL,[]);
+Joincrvs(nm,plotstrL,options):=(
+//help:Joincrvs("1",["sgAB","sgDCB"]);
+ regional(plotlist,PtL,Eps,QdL,Flg,Ni,Qd,pP,pS,pQ,pR,rMN,
+ opcindy,tmp,tmp1,tmp2,str,name,Ltype,Noflg,color);
+ name="join"+nm;
+ plotlist=[];
+ forall(plotstrL,str,
+ if(isstring(str),
+ tmp=parse(str);
+ tmp=apply(tmp,LLcrd(#));
+ ,
+ tmp=str;
+ );
+ plotlist=append(plotlist,tmp);
+ );
+ Eps=10^(-4);
+ tmp=Divoptions(options);
+ Ltype=tmp_1;
+ Noflg=tmp_2;
+ color=tmp_(length(tmp)-2);
+ opcindy=tmp_(length(tmp));
+ tmp1=tmp_6;
+ if(length(tmp1)>0,Eps=tmp1_1);
+ QdL=[];
+ forall(plotlist,Qd,
+ if(ispoint(Qd_1) % !islist(Qd_1_1),
+ QdL=concat(QdL,[Qd]);
+ ,
+ forall(Qd,
+ QdL=concat(QdL,[#]);
+ );
+ );
+ );
+ Flg=0;
+ if(length(QdL)==0,
+ PtL=[];
+ Flg=1;
+ );
+ if(Flg==0,
+ PtL=QdL_1;
+ forall(2..(length(QdL)),Ni,
+ Qd=QdL_Ni;
+ if(Numptcrv(Qd)>1,
+ pP=Ptend(PtL);
+ pS=Ptstart(PtL);
+ pQ=Ptstart(Qd);
+ pR=Ptend(Qd);
+ rMN=min([|pP-pQ|,|pP-pR|,|pS-pQ|,|pS-pR|]);
+ if(rMN==|pP-pR|,
+ Qd=reverse(Qd);
+ ,
+ if(rMN==|pS-pQ|,
+ PtL=reverse(PtL);
+ ,
+ if(rMN==|pS-pR|,
+ PtL=reverse(PtL);
+ Qd=reverse(Qd);
+ );
+ );
+ );
+ );
+ if(rMN>Eps,
+ PtL=concat(PtL,Qd);
+ ,
+ PtL=concat(PtL,Qd_(2..(length(Qd))));
+ );
+ );
+ );
+ if(Noflg<3,
+ println("generate joincurve "+name);
+ tmp1=apply(PtL,Pcrd(#));
+ tmp=name+"="+Textformat(tmp1,5)+";";
+ parse(tmp);
+ tmp1="";
+ forall(plotstrL,
+ tmp1=tmp1+#+",";
+ );
+ tmp1=substring(tmp1,0,length(tmp1)-1);
+ GLIST=append(GLIST,name+"=Joincrvs("+tmp1+")"); //no ketjs
+ );
+ if(Noflg<2,
+ if(isstring(Ltype),
+ if((Noflg==0)&(color!=KCOLOR), //181020 //no ketjs on
+ Texcom("{");Com2nd("Setcolor("+color+")");//180722
+ ); //no ketjs off
+ Ltype=Getlinestyle(text(Noflg)+Ltype,name);
+ if((Noflg==0)&(color!=KCOLOR), //181020 //no ketjs on
+ Texcom("}");//180722
+ ); //no ketjs off
+ ,
+ if(Noflg==1,Ltype=0);
+ );
+ GCLIST=append(GCLIST,[name,Ltype,opcindy]);
+ );
+ PtL;
+);
+////%Joincrvs end////
+
+////%Partcrv start////
+Partcrv(nm,pA,pB,PkLstr):=Partcrv(nm,pA,pB,PkLstr,[]);
+Partcrv(nm,pA,pB,PkLstr,options):=(
+//help:Partcrv("1",A,B,"sgABC");
+//help:Partcrv("1",1.3,2.5,"sgABC");
+ regional(PkL,Ans,Eps,Npt,Out1,Out2,tmp,tmp1,Flg,nS,nE,PPL,pP,
+ opcindy,Ta,Tb,name,Ltype,Noflg,DepthFlg,color);
+ name="part"+nm;
+ if(isstring(PkLstr),PkL=parse(PkLstr),PkL=PkLstr);
+ DepthFlg=0;
+ if(Measuredepth(PkL)==2,
+ PkL=PkL_1;
+ DepthFlg=1;
+ );
+ PkL=apply(PkL,LLcrd(#));
+ tmp=Divoptions(options);
+ Ltype=tmp_1;
+ Noflg=tmp_2;
+ color=tmp_(length(tmp)-2);
+ opcindy=tmp_(length(tmp));
+ Eps=10^(-3);
+ Flg=0;
+ if(isreal(pA),
+ if(pA>pB+Eps,
+ Npt=Numptcrv(PkL);
+ Out1=Partcrv("",pA,Npt,PkLstr,["nodata"]);
+ Out2=Partcrv("",1,pB,PkLstr,["nodata"]);
+ tmp=Ptstart(PkL)-Ptend(PkL);
+ if(|tmp|<Eps,
+ Ans=Joincrvs("",[Out1,Out2],["nodata"]);
+ ,
+ Ans=[apply(Out1,Pcrd(#)),apply(Out2,Pcrd(#))];
+ );
+ Flg=1;
+ );
+ if(Flg==0,
+ nS=ceil(pA);
+ nE=floor(pB);
+ PPL=[];
+ if(pA<nS-Eps,
+ pP=(nS-pA)*PkL_(nS-1)+(1-nS+pA)*PkL_nS;
+ PPL=[pP];
+ );
+ PPL=concat(PPL,PkL_(nS..nE));
+ if(pB>nE+Eps,
+ pP=(1-pB+nE)*PkL_nE+(pB-nE)*PkL_(nE+1);
+ PPL=concat(PPL,[pP]);
+ );
+ Ans=PPL;
+ Flg=1;
+ );
+ );
+ if(Flg==0,
+ tmp=Nearestpt(LLcrd(Pcrd(pA)),PkL);
+ Ta=tmp_2;
+ tmp=Nearestpt(LLcrd(Pcrd(pB)),PkL); // 15.09.12
+ Tb=tmp_2;
+ Ans=Partcrv("",Ta,Tb,PkL,["nodata"] );
+ Ans=apply(Ans,Pcrd(#));
+ );
+ if(Noflg<3,
+ println("generate partcrv "+name);
+ tmp1=apply(Ans,Pcrd(#));
+ tmp=name+"="+Textformat(tmp1,5)+";"; //190415
+ parse(tmp);
+// GLIST=append(GLIST, // 16.04.03
+ if(DepthFlg==0,
+ tmp=PkLstr;
+ ,
+ tmp=PkLstr+"(1)";
+ );
+ tmp1=name+"=Partcrv("+Textformat(Lcrd(pA),5)
+ +","+Textformat(Lcrd(pB),5)+","+tmp+")"; // 16.04.03
+ GLIST=append(GLIST,tmp1); //no ketjs
+ );
+ if(Noflg<2,
+ if(isstring(Ltype),
+ if((Noflg==0)&(color!=KCOLOR), //181020 //no ketjs on
+ Texcom("{");Com2nd("Setcolor("+color+")");//180722
+ ); //no ketjs off
+ Ltype=Getlinestyle(text(Noflg)+Ltype,name);
+ if((Noflg==0)&(color!=KCOLOR), //181020 //no ketjs on
+ Texcom("}");//180722
+ ); //no ketjs off
+ ,
+ if(Noflg==1,Ltype=0);
+ );
+ GCLIST=append(GCLIST,[name,Ltype,opcindy]);
+ );
+ Ans;
+);
+////%Partcrv end////
+
+////%Opcrvs start////
+Opcrvs(num,Fig):=Opcrvs(num,Fig,["nodisp"]);
+Opcrvs(num,Fig,options):=(
+ //help:Subgraph(2,"grfs");
+ regional(name,tmp,tmp1);
+ name="-"+Fig+text(num);
+ tmp=Fig+"_"+text(num);
+ tmp1=parse(tmp);
+ Listplot(name,tmp1,options);
+);
+////%Opcrvs end////
+
+////%Pointdata start////
+Pointdata(nm,list):=Pointdata(nm,list,[]);
+Pointdata(nm,listorg,options):=(
+//help:Pointdata("1",[2,4],["Size=5"]);
+//help:Pointdata("2",[[2,3],[4,1]]);
+//help:Pointdata(options=["Size=(1)","Disp=(y)","Msg=(y)","Inside=","Color="]);
+//help:Pointdata("Inside=color/ratio/no"]);
+ regional(list,name,nameL,ptlist,opstr,opcindy,Msg,
+ eqL,dispflg,size,thick,tmp,tmp1,tmp2,tmp3,
+ Ltype,Noflg,color,inside);
+ name="pt"+nm;
+ nameL=name+"L";
+ tmp=Divoptions(options);
+ Ltype=tmp_1;
+ Noflg=tmp_2;
+ eqL=tmp_5;
+ opstr=tmp_(length(tmp)-1);
+ color=tmp_(length(tmp)-2);
+ opcindy=tmp_(length(tmp));
+ size="";
+ dispflg="Y";
+ inside=color;
+ Msg="Y";
+ forall(eqL,
+ tmp=Strsplit(#,"=");
+ tmp1=Toupper(substring(tmp_1,0,1));
+ if(tmp1=="S",
+ size=tmp_2; //190406from
+ tmp1=parse(size);
+ opcindy=opcindy+",size->"+text(tmp1); //190409to
+ );
+ if(tmp1=="D", //181030from
+ dispflg=Toupper(substring(tmp_2,0,1));
+ );
+ if(tmp1=="I", //190405from
+ if(Toupper(substring(tmp_2,0,1))=="N",
+ inside=[-1,-1,-1];
+ ,
+ tmp3=["0","1","2","3","4","5","6","7","8","9"];
+ if(contains(tmp3,substring(tmp_2,0,1)),
+ inside=parse(tmp_2)*color;
+ ,
+ tmp3=Divoptions(["Color="+text(tmp_2)]);
+ inside=tmp3_(length(tmp3)-2);
+ );
+ opcindy=opcindy+",pointcolor->"+text(inside);
+ );
+ ); //100405to
+ if(tmp1=="M", //190206from
+ Msg=Toupper(substring(tmp_2,0,1));
+ ); //190206to
+ );
+ if(dispflg=="Y",
+ if(Msg=="Y", //190206
+ println("generate pointdata "+name);
+ );
+ ); //181030to
+ if(isstring(listorg),
+ list=parse(listorg);
+ ,
+ list=listorg;
+ ); //17.10.23
+ list=apply(list,Lcrd(#)); //190426
+ if(Measuredepth(list)==0,list=[list]);//180530
+ tmp=Measuredepth(list);
+ if(tmp==1,ptlist=list,ptlist=list_1); //190126from
+ tmp=apply(ptlist,[Textformat(Pcrd(#),5)]);
+ tmp1=text(tmp);
+ tmp2=substring(tmp1,1,length(tmp1)-1);
+ tmp3=tmp1;
+ tmp=parse(tmp1);
+ if(length(tmp)==1, //190301from
+ tmp1=Textformat(tmp_1,5);
+ ); //190301to
+ tmp=name+"="+tmp1+";"; //190415
+ parse(tmp);
+ tmp=nameL+"="+tmp3+";"; //190415
+ parse(tmp); //190126to
+ if(Noflg<3,
+ if(isstring(listorg), //17.10.23
+ tmp2=listorg;
+ ,
+ tmp2="list"+PaO(); //17.10.10from
+ forall(list,
+ if(isstring(#),
+ tmp=#;
+ ,
+ if(ispoint(#),
+ tmp=#.name; //190505
+ ,
+ tmp=Textformat(#,6);
+ );
+ );
+ tmp2=tmp2+tmp+",";
+ );
+ tmp2=substring(tmp2,0,length(tmp2)-1)+")";
+ //17.10.10to
+ );
+ GLIST=append(GLIST,name+"=Pointdata("+tmp2+")"); //no ketjs
+ );
+ if(Noflg<2,
+ tmp=[nameL,[0,1],opcindy]; //190126
+ GCLIST=append(GCLIST,tmp);
+ if(Noflg==0,
+ if(length(size)>0,
+ Com2nd("Setpt("+size+")");
+ );
+ thick=PenThick/PenThickInit; // 16.04.09
+ if((Noflg==0)&(color!=KCOLOR), //181020 //no ketjs on
+ Texcom("{");
+ Com2nd("Setcolor("+color+")");//180711
+ ); //no ketjs off
+ opstr=","+Textformat(inside,2);
+ Com2nd("Drwpt"+PaO()+"list"+PaO()+name+")"+opstr+")");
+ if((Noflg==0)&(color!=KCOLOR), //181020 //no ketjs on
+ Texcom("}");//180711
+ ); //no ketjs off
+ if(length(size)>0, //no ketjs on
+ tmp=Textformat(TenSize/TenSizeInit,1);
+ Com2nd("Setpt("+tmp+")");
+ ); //no ketjs off
+ );
+ );
+ ptlist;
+);
+////%Pointdata end////
+
+////%Listplot start////
+Listplot(list):=Listplot(list,[]);
+Listplot(Arg1,Arg2):=(
+ regional(name,list,options,str);
+ if(isstring(Arg1),
+ name=Arg1;
+ list=Arg2;
+ Listplot(name,list,[]);
+ ,
+ list=Arg1;
+ options=Arg2;
+ name="";
+ forall(list, // 16.10.07from
+ name=name+#.name;
+ );// 16.10.07until
+ Listplot(name,list,options);
+ );
+);
+Listplot(nm,list,options):=(
+//help:Listplot([A,B]);
+// help:Listplot(["A","B"]);
+//help:Listplot("1",[[2,1],[3,3]]);
+//help:Listplot(options2=["Msg=y","Cutend=n"]);//180719
+ regional(name,cutend,tmp,tmp1,tmp2,ptlist,Ltype,opcindy,Noflg,eqL,Msg,color);
+ if(substring(nm,0,1)=="-", // 16.01.27 from
+ name=substring(nm,1,length(nm));
+ ,
+ name="sg"+nm;
+ ); // upto
+ tmp=Divoptions(options);
+ Ltype=tmp_1;
+ Noflg=tmp_2;
+ eqL=tmp_5;
+ color=tmp_(length(tmp)-2);
+ opcindy=tmp_(length(tmp));
+ Msg="Y"; //190206
+ cutend=[0,0];//180719
+ forall(eqL,
+ tmp=Strsplit(#,"=");
+ tmp1=Toupper(substring(tmp_1,0,1));
+ if(tmp1=="M",
+ Msg=Toupper(substring(tmp_2,0,1));
+ );
+ if(tmp1=="C",//180719from
+ tmp2=replace(tmp_2,"[","");
+ tmp2=replace(tmp2,"]","");
+ cutend=tokenize(tmp2,",");
+ if(length(cutend)==1,cutend=[cutend_1,cutend_1]);
+ );//180719to
+ );
+ if(Noflg<3,
+ if(Msg=="Y", //190206
+ println("generate Listplot "+name);
+ );
+ if(isstring(list_1),tmp=apply(list,parse(#)),tmp=list); // 15.03.24
+ ptlist=apply(tmp,Pcrd(#));
+ if(|cutend|>0,//180719from
+ tmp=ptlist_(length(ptlist))-ptlist_1;
+ tmp=tmp/|tmp|;
+ ptlist_1=ptlist_1+tmp*cutend_1;
+ ptlist_(length(ptlist))=ptlist_(length(ptlist))-tmp*cutend_2;
+ );//180719to
+ tmp=name+"="+Textformat(ptlist,5)+";"; //190415
+ parse(tmp);
+ GLIST=append(GLIST,name+"=Listplot("+Textformat(ptlist,5)+")"); // 180719 //no ketjs
+ );
+ if(Noflg<2,
+ if(isstring(Ltype),
+ if((Noflg==0)&(color!=KCOLOR), //181020 //no ketjs on
+ Texcom("{");Com2nd("Setcolor("+color+")");//180711
+ ); //no ketjs off
+ Ltype=Getlinestyle(text(Noflg)+Ltype,name);
+ if((Noflg==0)&(color!=KCOLOR), //181020 //no ketjs on
+ Texcom("}");//180711
+ ); //no ketjs off
+ ,
+ if(Noflg==1,Ltype=0);
+ );
+ GCLIST=append(GCLIST,[name,Ltype,opcindy]);
+ );
+ tmp1=apply(list,Lcrd(#));
+ tmp1;
+);
+////%Listplot end////
+
+////%Lineplot start////
+Lineplot(nm,list,optionorg):=(
+//help:Lineplot([A,B]);
+//help:Lineplot("1",[[2,1],[3,3]]);
+ regional(name,Out,tmp,tmp1,tmp2,opstr,opcindy,Mag,Semi,
+ Vec,pA,pB,options,Ltype,Noflg,color,Msg,eqL);
+ name="ln"+nm;
+ options=optionorg;
+ Mag=100;
+ Semi="";
+ Msg="Y";
+ tmp=Divoptions(options);
+ Ltype=tmp_1;
+ Noflg=tmp_2;
+ color=tmp_(length(tmp)-2);
+ opcindy=tmp_(length(tmp));
+ opstr=tmp_(length(tmp)-1);
+ eqL=tmp_5;
+ forall(eqL,
+ tmp=Strsplit(#,"=");
+ tmp1=Toupper(substring(tmp_1,0,1));
+ if(tmp1=="M", //190206from
+ Msg=Toupper(substring(tmp_2,0,1));
+ options=remove(options,[#]);
+ ); //190206to
+ );
+ tmp=Divoptions(options);
+ opstr=tmp_(length(tmp)-1);
+ tmp1=tmp_6;
+ if(length(tmp1)>0,Mag=tmp1_1);
+ tmp1=tmp_7;
+ if(length(tmp1)>0,Semi=tmp1_1);
+ pA=Lcrd(list_1); pB=Lcrd(list_2);
+ Vec= Mag/dist(pA,pB)*(pB-pA);
+ if(length(Semi)==0,
+ Out=[pA-Vec,pA+Vec];
+ ,
+ if(Semi=="+",
+ Out=[pA,pA+Vec];
+ ,
+ Out=[pA-Vec,pA];
+ );
+ );
+ if(Noflg<3,
+ if(Msg=="Y", //190206
+ println("generate Lineplot "+name);
+ );
+ tmp1=apply(Out,Pcrd(#));
+ tmp=name+"="+Textformat(tmp1,5)+";"; //190415
+ parse(tmp);
+ GLIST=append(GLIST,name+"=Lineplot("+Textformat(list,5)+opstr+")"); //no ketjs
+ );
+ if(Noflg<2,
+ if(isstring(Ltype),
+ if((Noflg==0)&(color!=KCOLOR), //181020 //no ketjs on
+ Texcom("{");Com2nd("Setcolor("+color+")");//180722
+ ); //no ketjs off
+ Ltype=Getlinestyle(text(Noflg)+Ltype,name);
+ if((Noflg==0)&(color!=KCOLOR), //181020 //no ketjs on
+ Texcom("}");//180722
+ ); //no ketjs off
+ ,
+ if(Noflg==1,Ltype=0);
+ );
+ GCLIST=append(GCLIST,[name,Ltype,opcindy]);
+ );
+ Out;
+);
+Lineplot(Arg1,Arg2):=(
+ regional(name,list,options,str);
+ if(isstring(Arg1),
+ name=Arg1;
+ list=Arg2;
+ Lineplot(name,list,[]);
+ ,
+ list=Arg1;
+ options=Arg2;
+ name="";
+ forall(list, // 16.10.07from
+ name=name+#.name;
+ );// 16.10.07until
+ Lineplot(name,list,options);
+ );
+);
+Lineplot(list):=Lineplot(list,[]);
+////%Lineplot end////
+
+////%Plotdata start////
+Plotdata(name1,func,variable):=Plotdata(name1,func,variable,[]);
+Plotdata(name1,func,variable,options):=(
+//help:Plotdata("1","sin(x)","x",["Num=100"]);
+//help:Plotdata("2","x^2","x=[-1,1]");
+//help:Plotdata("3","Fout(x)","x",["out"]);
+ regional(Fn,Va,tmp,tmp1,tmp2,eqL,name,Vname,x1,x2,dx,
+ PdL,Num,Ec,Dc,Fun,Exfun,x,Ke,Eps,Pa,Msg,
+ Ltype,Noflg,Inflg,Outflg,opstr,opcindy,color);
+ if(substring(name1,0,1)!="-", //190420from
+ name="gr"+name1;
+ ,
+ name=substring(name1,1,length(name1));
+ ); //190420to
+ tmp=Divoptions(options);
+ Ltype=tmp_1;
+ Noflg=tmp_2;
+ Inflg=tmp_3;
+ Outflg=tmp_4;
+ opstr=tmp_(length(tmp)-1);
+ color=tmp_(length(tmp)-2);
+ opcindy=tmp_(length(tmp));
+ eqL=tmp_5;
+ Num=50;
+ Ec=[];
+ Exfun="";
+ Dc=1000;
+ Msg="Y";
+ forall(eqL,
+ tmp=Strsplit(#,"=");
+ tmp1=Toupper(substring(#,0,1));
+ if(tmp1=="N",
+ Num=parse(tmp_2);
+ opstr=opstr+","+Dqq(#);
+ );
+ if(tmp1=="E",
+ if(substring(tmp_2,0,1)=="[", //180817from
+ Ec=parse(tmp_2);
+ tmp1=replace(tmp_2,"[","c"+PaO());
+ tmp1=replace(tmp1,",",".0,");
+ tmp1=replace(tmp1,"]",".0)");
+ opstr=opstr+","+Dqq("Exc="+tmp1); //180817to
+ ,
+ Exfun=tmp1;
+ opstr=opstr+","+Dqq(#);
+ );
+ );
+ if(substring(#,0,1)=="D",
+ Dc=parse(tmp_2);
+ opstr=opstr+","+Dqq(#);
+ );
+ if(tmp1=="M", //190206from
+ Msg=Toupper(substring(tmp_2,0,1));
+ ); //190206to
+ );
+ if(Inflg==0 & Outflg==0,
+ Eps=10^(-3);
+ tmp=replace(func,LFmark,"");
+ tmp=tokenize(variable,"=");
+ Vname=tmp_1;
+ if(length(tmp)>1,
+ tmp=tmp_2;
+ tmp=parse(tmp);
+ x1=tmp_1;
+ x2=tmp_2;
+ ,
+ x1=XMIN;
+ x2=XMAX;
+ );
+ // dx=(x2-x2)/Num;
+ Ec=append(sort(Ec),10000);
+ Fun=Assign(func,Vname, "xx");
+ Exfun=Assign(Exfun,Vname, "xx");
+ PdL=[];
+ Ke=1;
+ forall(0..Num,
+ xx=x1+#*(x2-x1)/Num; // differs from Scilab [ / Num-1]
+ if(length(Exfun)>0,
+ tmp=parse(Exfun);
+ if(abs(tmp)<Eps,
+ if(length(PdL)>0, //180817from
+ PdL=concat(PdL,["inf"]);
+ );
+ ,
+ tmp=[xx,parse(Fun)];
+ if(length(PdL)>0,
+ tmp1=PdL_(length(PdL));
+ if(Norm(tmp,tmp1)<Dc,
+ PdL=append(PdL,tmp);
+ ,
+ if(tmp1=="inf",
+ PdL=append(PdL,tmp);
+ ,
+ PdL=concat(PdL,[["inf"],tmp]);
+ );
+ );
+ ,
+ PdL=[tmp];
+ );
+ ); //180817to
+ ,
+ Pa=[];
+ if(xx-Ec_Ke<-Eps,
+ Pa=[xx,parse(Fun)];
+ );
+ if(abs(xx-Ec_Ke)<=Eps,
+ if(length(PdL)>0,
+ if(PdL_(length(PdL))_1!="inf",
+ Pa=["inf"];
+ );
+ );
+ );
+ if(xx-Ec_Ke>Eps,
+ Pa=[xx,parse(Fun)];
+ Ke=Ke+1;
+ );
+ if(length(Pa)>0,
+ if(Pa_1=="inf",
+ PdL=concat(PdL,[Pa]);
+ ,
+ if(length(PdL)==0,
+ PdL=[Pa];
+ ,
+ tmp=PdL_(length(PdL));
+ if(tmp_1=="inf",
+ PdL=concat(PdL,[Pa]);
+ ,
+ if(dist(tmp,Pa)<Dc,
+ PdL=concat(PdL,[Pa]);
+ ,
+ PdL=concat(PdL,[["inf"],Pa]);
+ );
+ );
+ );
+ );
+ );
+ );
+ );
+ tmp1=[];
+ tmp2=select(1..(length(PdL)),PdL_#==["inf"]);
+ tmp=1;
+ forall(tmp2,
+ if(#>tmp,
+ tmp1=concat(tmp1,[PdL_(tmp..(#-1))])
+ );
+ tmp=#+1;
+ );
+ if(tmp<length(PdL),
+ tmp1=concat(tmp1,[PdL_(tmp..(length(PdL)))]);
+ );
+ PdL=tmp1;
+ if(length(PdL)==1,
+ PdL=PdL_1;
+ );
+ if(Noflg<3,
+ if(Msg=="Y", //190206
+ println("generate Plotdata "+name);
+ );
+ if(Measuredepth(PdL)==1,
+ tmp1=apply(PdL,Pcrd(#));
+ ,
+ tmp1=[];
+ forall(PdL,tmp2,
+ tmp1=append(tmp1,apply(tmp2,Pcrd(#)));
+ );
+ );
+ tmp=name+"="+Textformat(tmp1,5)+";";
+ parse(tmp);
+ tmp1=replace(func,LFmark,""); //no ketjs on
+ tmp2=replace(variable,LFmark,"");
+ tmp=name+"=Plotdata('"+tmp1+"','"+tmp2+"'"+opstr+")";
+ GLIST=append(GLIST,tmp); //no ketjs off
+ );
+ if(Noflg<2,
+ if(isstring(Ltype),
+ if((Noflg==0)&(color!=KCOLOR), //181020 //no ketjs on
+ Texcom("{");Com2nd("Setcolor("+color+")");//180722
+ ); //no ketjs off
+ Ltype=Getlinestyle(text(Noflg)+Ltype,name);
+ if((Noflg==0)&(color!=KCOLOR), //181020 //no ketjs on
+ Texcom("}");//180722
+ ); //no ketjs off
+ ,
+ if(Noflg==1,Ltype=0);
+ );
+ GCLIST=append(GCLIST,[name,Ltype,opcindy]);
+ );
+ PdL;
+ ,
+ if(Noflg<2,
+ if(isstring(Ltype),
+ if((Noflg==0)&(color!=KCOLOR), //181020 //no ketjs on
+ Texcom("{");Com2nd("Setcolor("+color+")");//180722
+ ); //no ketjs off
+ Ltype=Getlinestyle(text(Noflg)+Ltype,name);
+ if((Noflg==0)&(color!=KCOLOR), //181020 //no ketjs on
+ Texcom("}");//180722
+ ); //no ketjs off
+ ,
+ if(Noflg==1,Ltype=0);
+ );
+ if(Inflg==1,
+ GCLIST=append(GCLIST,[name,Ltype,opcindy]);
+ );
+ );
+ );
+);
+////%Plotdata end////
+
+////%Paramplot start////
+Paramplot(nm,funstr,variable):=Paramplot(nm,funstr,variable,[]);
+Paramplot(nm,funstr,variable,options):=(
+//help:Paramplot("1","[2*cos(t),sin(t)]","t=[0,2*pi]");
+ regional(name,Out,tmp,tmp1,tmp2,vname,func,str,Rng,Num,Msg,
+ Ec,Exfun,Dc,eqL,Fntmp,Vatmp,t1,t2,dt,tt,pa,ke, pt, //190103
+ Ltype,Noflg,Inflg,Outflg,opstr,opcindy,color);
+ if(substring(nm,0,1)=="-", // 180928from
+ name=substring(nm,1,length(nm));
+ ,
+ name="gp"+nm;
+ ); //180929to
+ Eps=10^(-4);
+ tmp=Divoptions(options);
+ Ltype=tmp_1;
+ Noflg=tmp_2;
+ Inflg=tmp_3;
+ Outflg=tmp_4;
+ color=tmp_(length(tmp)-2);
+ opstr=tmp_(length(tmp)-1);
+ opcindy=tmp_(length(tmp));
+ eqL=tmp_5;
+ Msg="Y"; //190322
+ Num=50;
+ Ec=[];
+ Exfun="";
+ Dc=1000;
+ forall(eqL,
+ tmp=Strsplit(#,"=");
+ tmp1=Toupper(substring(tmp_1,0,1));
+ if(tmp1=="N",
+ Num=parse(tmp_2);
+ opstr=opstr+","+Dqq(#);
+ );
+ if(tmp1=="E",
+ if(substring(tmp_2,0,1)=="[", //180817from
+ Ec=parse(tmp_2);
+ tmp1=replace(tmp_2,"[","c"+PaO());
+ tmp1=replace(tmp1,",",".0,");
+ tmp1=replace(tmp1,"]",".0)");
+ opstr=opstr+","+Dqq("Exc="+tmp1); //180817to
+ ,
+ Exfun=tmp1;
+ opstr=opstr+","+Dqq(#);
+ );
+ );
+ if(substring(#,0,1)=="D",
+ Dc=parse(tmp_2);
+ opstr=opstr+","+Dqq(#);
+ );
+ if(tmp1=="M", //190206from
+ Msg=Toupper(substring(tmp_2,0,1));
+ ); //190206to
+ );
+ if(Inflg==0 & Outflg==0,
+ tmp=indexof(variable,"=");
+ vname=substring(variable,0,tmp-1);
+ str=substring(variable,tmp,length(variable));
+ Rng=parse(str);
+ t1=Rng_1; t2=Rng_2;
+ dt=(t2-t1)/Num;// differs from Scilab ( / Num-1)
+ func=Assign(funstr,vname,"tt");
+ Out=[];
+ Ec=append(sort(Ec),10000);
+ ke=1;
+ forall(0..Num,
+ pt=[];
+ tt=Rng_1+#*dt;
+ if(tt-Ec_ke<-Eps,
+ pa=parse(func);
+ );
+ if(abs(tt-Ec_ke)<=Eps,
+ if(length(Out)>0,
+ if(Out_(length(Out))_1!="inf",
+ pa=["inf"];
+ );
+ );
+ );
+ if(tt-Ec_ke>Eps,
+ pa=parse(func);
+ ke=ke+1;
+ );
+ if(length(pa)>0,
+ if(pa_1=="inf",
+ Out=append(Out,pa);
+ ,
+ if(length(Out)==0,
+ Out=[pa];
+ ,
+ tmp=Out_(length(Out));
+ if(tmp_1=="inf",
+ Out=append(Out,pa);
+ ,
+ if(|tmp-pa|<Dc,
+ if(|tmp-pa|>Eps, //180928from
+ Out=append(Out,pa);
+ ); //180928to
+ ,
+ Out=concat(Out,[["inf"],pa]);
+ );
+ );
+ );
+ );
+ );
+ );
+ tmp1=[];
+ tmp2=select(1..(length(Out)),Out_#==["inf"]);
+ tmp=1;
+ forall(tmp2,
+ if(#>tmp,
+ tmp1=concat(tmp1,[Out_(tmp..(#-1))])
+ );
+ tmp=#+1;
+ );
+ if(tmp<length(Out),
+ tmp1=concat(tmp1,[Out_(tmp..(length(Out)))]);
+ );
+ Out=tmp1;
+ if(length(Out)==1,
+ Out=Out_1;
+ );
+ if(Noflg<3,
+ if(Msg=="Y", //190206
+ println("generate Paramplot "+name);
+ );
+ if(Measuredepth(Out)==1,
+ tmp1=apply(Out,Pcrd(#));
+ ,
+ tmp1=[];
+ forall(Out,tmp2,
+ tmp1=append(tmp1,apply(tmp2,Pcrd(#)));
+ );
+ );
+ tmp=name+"="+Textformat(tmp1,5)+";";
+ parse(tmp);
+ tmp1=replace(funstr,LFmark,""); // 15.11.13 //no ketjs on
+ tmp2=replace(variable,LFmark,"");
+ tmp=name+"=Paramplot('"+tmp1+"','"+tmp2+"'"+opstr+")";
+ GLIST=append(GLIST,tmp); //no ketjs off
+ );
+ if(Noflg<2,
+ if(isstring(Ltype),
+ if((Noflg==0)&(color!=KCOLOR), //181020 //no ketjs on
+ Texcom("{");Com2nd("Setcolor("+color+")");//180722
+ ); //no ketjs off
+ Ltype=Getlinestyle(text(Noflg)+Ltype,name);
+ if((Noflg==0)&(color!=KCOLOR), //181020 //no ketjs on
+ Texcom("}");//180722
+ ); //no ketjs off
+ ,
+ if(Noflg==1,Ltype=0);
+ );
+ GCLIST=append(GCLIST,[name,Ltype,opcindy]);
+ );
+ Out;
+ ,
+ if(Noflg<2,
+ if(isstring(Ltype),
+ if((Noflg==0)&(color!=KCOLOR), //181020 //no ketjs on
+ Texcom("{");Com2nd("Setcolor("+color+")");//180722
+ ); //no ketjs off
+ Ltype=Getlinestyle(text(Noflg)+Ltype,name);
+ if((Noflg==0)&(color!=KCOLOR), //181020 //no ketjs on
+ Texcom("}");//180722
+ ); //no ketjs off
+ ,
+ if(Noflg==1,Ltype=0);
+ );
+ if(Inflg==1,
+ GCLIST=append(GCLIST,[name,Ltype,opcindy]);
+ );
+ );
+ );
+);
+////%Paramplot end////
+
+////%Polarplot start////
+// 180928
+Polarplot(name,radstr,varrng):=Polarplot(name,radstr,varrng,[]);
+Polarplot(name,radstr,varrng,option):=(
+//help:Polarplot("1","cos(t)","t=[0,2*pi]");
+ regional(tmp,var);
+ tmp=Strsplit(varrng,"=");
+ var=tmp_1;
+ tmp="("+radstr+")*[cos("+var+"),sin("+var+")]";
+ Paramplot("-polar"+name,tmp,varrng,option);
+);
+////%Polarplot end////
+
+////%Connectseg start////
+Connectseg(Pdata):=(
+ regional(Eps,PlotL,vL,ctr,qd,ah,ao,flg,jj,
+ pp,qq,tmp,tmp1,tmp2);
+ Eps=10^(-4);
+ PlotL=[Pdata_1];
+ vL=2..(length(Pdata));
+ ctr=0;
+ while((length(vL)>0)&(ctr<1000),
+ ctr=ctr+1;
+ qd=PlotL_(length(PlotL));
+ ah=qd_1; ao=qd_(length(qd));
+ flg=0;
+ forall(1..(length(vL)),jj,
+ if(flg==0,
+ tmp1=Pdata_(vL_jj);
+ pp=tmp1_1; qq=tmp1_(length(tmp1));
+ if(Norm(pp-ao)<Eps,
+ tmp=tmp1_(2..(length(tmp1)));
+ if(length(tmp)>0,
+ qd=concat(qd,tmp);
+ );
+ PlotL_(length(PlotL))=qd;
+ vL=remove(vL,[vL_jj]);
+ flg=1;
+ );
+ );
+ if(flg==0,
+ if(Norm(qq-ao)<Eps,
+ tmp=tmp1_(1..(length(tmp1)-1));
+ tmp=reverse(tmp);
+ qd=concat(qd,tmp);
+ PlotL_(length(PlotL))=qd;
+ vL=remove(vL,[vL_jj]);
+ flg=1;
+ );
+ );
+ if(flg==0,
+ if(Norm(pp-ah)<Eps,
+ tmp=tmp1_(2..(length(tmp1)));
+ qd=concat(tmp,qd);
+ PlotL_(length(PlotL))=qd;
+ vL=remove(vL,[vL_jj]);
+ flg=1;
+ );
+ );
+ if(flg==0,
+ if(Norm(qq-ah)<Eps,
+ tmp=tmp1_(1..(length(tmp1)-1));
+ tmp=reverse(tmp);
+ qd=concat(tmp,qd);
+ PlotL_(length(PlotL))=qd;
+ vL=remove(vL,[vL_jj]);
+ flg=1;
+ );
+ );
+ );
+ if(flg==0,
+ PlotL=concat(PlotL,[Pdata_(vL_1)]); //181112
+ vL=remove(vL,[vL_1]);
+ );
+ );
+ PlotL;
+);
+////%Connectseg end////
+
+////%Implicitplot start////
+Implicitplot(name1,func,xrng,yrng):=Implicitplot(name1,func,xrng,yrng,[]);
+Implicitplot(name1,func,xrngorg,yrngorg,optionsorg):=(
+//help:Implicitplot("1","x^2+x*y+y^2=1","x=[-3,3]","y=[-3,3]");
+//help:Implicitplot(options=["Num=[50,50]","Msg=y(n)","Bisection=y(n)]);
+ regional(name,options,Fn,xrng,yrng,varx,vary,rngx,rngy,Mdv,Ndv,tmp,tmp1,tmp2,
+ Eps,Ltype,Noflg,eqL,color,opsr,opcindy,dx,dy,out,jj,ii,kk,msg,biflg,flg,
+ yval1,yval2,xval1,xval2,eval11,eva12,eval21,eval22,pL,vL,qL);
+ name="imp"+name1;
+ xrng=xrngorg; yrng=yrngorg; //190622from
+ if(indexof(xrng,"=")==0,
+ xrng=xrng+"="+Textformat([XMIN,XMAX],5);
+ );
+ if(indexof(yrng,"=")==0,
+ yrng=yrng+"="+Textformat([YMIN,YMAX],5);
+ ); //190622to
+ Eps=10^(-6); //190511
+ options=optionsorg;
+ tmp=Divoptions(options);
+ Ltype=tmp_1;
+ Noflg=tmp_2;
+ eqL=tmp_5;
+ color=tmp_(length(tmp)-2);
+ opcindy=tmp_(length(tmp));
+ opstr=tmp_(length(tmp)-1); //190406
+ Mdv=50;Ndv=50;
+ msg="Y";
+ biflg="Y";
+ forall(eqL,
+ tmp=Strsplit(#,"=");
+ tmp1=Toupper(substring(tmp_1,0,1));
+ tmp2=tmp_2;
+ if(substring(#,0,1)=="N",
+ Mdv=parse(tmp2);
+ if(!islist(Mdv),
+ Ndv=Mdv;
+ ,
+ Ndv=Mdv_2;
+ Mdv=Mdv_1;
+ );
+ opstr=",'"+#+"'";
+ );
+ if(substring(#,0,1)=="M", //181112from
+ msg=Toupper(substring(tmp2,0,1));
+ options=remove(options,[#]);
+ ); //181112to
+ if(substring(#,0,1)=="B", //190509from
+ biflg==Toupper(substring(tmp2,0,1));
+ options=remove(options,[#]);
+ ); //190509to
+ );
+ tmp=indexof(func,"=");
+ if(tmp==0,
+ Fn=func;
+ ,
+ tmp1=substring(func,0,tmp-1);
+ tmp2=substring(func,tmp,length(func));
+ Fn=tmp1+"-("+tmp2+")";
+ );
+ tmp=indexof(xrng,"=");
+ varx=substring(xrng,0,tmp-1);
+ rngx=parse(substring(xrng,tmp,length(xrng)));
+ tmp=indexof(yrng,"=");
+ vary=substring(yrng,0,tmp-1);
+ rngy=parse(substring(yrng,tmp,length(yrng)));
+ tmp="Impfun("+varx+","+vary+"):="+Fn+";";
+ parse(tmp);
+ dx=(rngx_2-rngx_1)/Mdv;
+ dy=(rngy_2-rngy_1)/Ndv;
+ out=[];
+ forall(1..Ndv,jj,
+ yval1=rngy_1+(jj-1)*dy;
+ yval2=rngy_1+jj*dy;
+ xval1=rngx_1;
+ eval11=Impfun(xval1,yval1);
+ eval12=Impfun(xval1,yval2);
+ forall(1..Mdv,ii,
+ xval2=rngx_1+ii*dx;
+ eval21=Impfun(xval2,yval1);
+ eval22=Impfun(xval2,yval2);
+ pL=[[xval1,yval1]];vL=[eval11];
+ pL=append(pL,[xval2,yval1]);vL=append(vL,eval21);
+ pL=append(pL,[xval2,yval2]);vL=append(vL,eval22);
+ pL=append(pL,[xval1,yval2]);vL=append(vL,eval12);
+ pL=append(pL,[xval1,yval1]);vL=append(vL,eval11);
+ qL=[];
+ forall(1..4,kk,
+ if(abs(vL_kk)<=Eps,
+ qL=append(qL,pL_kk);
+ ,
+ if(vL_kk>Eps,
+ if(vL_(kk+1)< -Eps,
+ if(biflg=="n", //190508
+ tmp=1/(vL_kk-vL_(kk+1))*
+ (-vL_(kk+1)*pL_kk+vL_kk*pL_(kk+1));
+ ,
+ tmp1=pL_(kk); tmp2=pL_(kk+1); //190508from
+ flg=0;
+ forall(1..20, //190511
+ if(flg==0,
+ tmp=(tmp1+tmp2)/2;
+ eval11=Impfun(tmp_1,tmp_2);
+ if(abs(eval11)<=Eps,
+ flg=1;
+ ,
+ if(eval11>Eps,tmp1=tmp,tmp2=tmp);
+ );
+ );
+ ); //190508to
+ );
+ qL=append(qL,tmp);
+ );
+ ,
+ if(vL_(kk+1)>Eps,
+ if(biflg=="n", //190508
+ tmp=1/(-vL_kk+vL_(kk+1))*
+ (vL_(kk+1)*pL_kk-vL_kk*pL_(kk+1));
+ ,
+ tmp1=pL_(kk); tmp2=pL_(kk+1); //190508from
+ flg=0;
+ forall(1..20, //190511
+ if(flg==0,
+ tmp=(tmp1+tmp2)/2;
+ eval11=Impfun(tmp_1,tmp_2);
+ if(abs(eval11)<=Eps,
+ flg=1;
+ ,
+ if(eval11>Eps,tmp2=tmp,tmp1=tmp);
+ );
+ );
+ ); //190508to
+ );
+ qL=append(qL,tmp);
+ );
+ );
+ );
+ );
+ xval1=xval2;
+ eval11=eval21;
+ eval12=eval22;
+ if(length(qL)==2,
+ out=append(out,qL);
+ );
+ );
+ );
+ if(length(out)>0,
+ out=Connectseg(out);
+ );
+ if(length(out)==1,
+ out=out_1;
+ );
+ if(Noflg<3,
+ if(msg=="Y", //181112
+ println("generate Implicitplotdata "+name);
+ );
+ if(Measuredepth(out)==1,
+ tmp1=apply(out,Pcrd(#));
+ ,
+ tmp1=[];
+ forall(out,tmp2,
+ tmp1=append(tmp1,apply(tmp2,Pcrd(#)));
+ );
+ );
+ tmp=name+"="+Textformat(tmp1,5); //190415
+ parse(tmp+";");
+ tmp=name+"=Implicitplot('"+func+"','"+xrng+"','"+yrng+"'"+opstr+")";
+ GLIST=append(GLIST,tmp); //no ketjs
+// Drawfigures(name,[name],[options]); //190508
+ );
+ if(Noflg<2,
+ if(isstring(Ltype),
+ if((Noflg==0)&(color!=KCOLOR), //181020 //no ketjs on
+ Texcom("{");Com2nd("Setcolor("+color+")");//180722
+ ); //no ketjs off
+ Ltype=Getlinestyle(text(Noflg)+Ltype,name);
+ if((Noflg==0)&(color!=KCOLOR), //181020 //no ketjs on
+ Texcom("}");//180722
+ ); //no ketjs off
+ ,
+ if(Noflg==1,Ltype=0);
+ );
+ GCLIST=append(GCLIST,[name,Ltype,opcindy]);
+ );
+ out;
+);
+////%Implicitplot end////
+
+////%Circledata start////
+Circledata(cenrad):=Circledata(cenrad,[]);
+Circledata(para1,para2):=(
+//help:Circledata([A,B],["Rng=[0,pi/2]"]);
+//help:Circledata([A,B,C]);
+ regional(name,cenrad,options,str,n);
+ if(isstring(para1),
+ name=para1;
+ cenrad=para2;
+ options=[];
+ ,
+ cenrad=para1;
+ options=para2;
+ name="";// 16.10.07from
+ forall(cenrad,
+ name=name+#.name;
+ );// 16.10.07until
+ );
+ Circledata(name,cenrad,options);
+);
+Circledata(nm,cenrad,options):=(
+ regional(name,Out,Ctr,Ptcir,ra,Num,Rg,opstr,opcindy,color,Msg,
+ tmp,tmp1,tmp2,Th,Ltype,Noflg,eqL,pA,pB,pC,d1,d2,Eps);
+ name="cr"+nm;
+ tmp=Divoptions(options);
+ Ltype=tmp_1;
+ Noflg=tmp_2;
+ eqL=tmp_5;
+ color=tmp_(length(tmp)-2);
+ opstr=tmp_(length(tmp)-1);
+ opcindy=tmp_(length(tmp));
+ Num=50;
+ Rg=[0,2*pi];
+ Msg="Y";
+ forall(eqL,
+ tmp=Strsplit(#,"=");
+ tmp1=Toupper(substring(tmp_1,0,1));
+ if(substring(#,0,1)=="N",
+ Num=parse(tmp_2);
+ opstr=opstr+",'"+#+"'";
+ );
+ if(substring(#,0,1)=="R",
+ Rg=parse(tmp_2);
+ opstr=opstr+",'"+#+"'";
+ );
+ if(tmp1=="M", //190206from
+ Msg=Toupper(substring(tmp_2,0,1));
+ ); //190206to
+ );
+ if(length(cenrad)==2,
+ Ctr=Lcrd(cenrad_1);
+ Ptcir=Lcrd(cenrad_2);
+ if(!islist(Ptcir), //190323from
+ Ptcir=Ctr+[Ptcir,0];
+ ); //190323to
+ ra=dist(Ctr,Ptcir);
+ ,
+ Eps=10^(-1);
+ pA=Lcrd(cenrad_1);
+ pB=Lcrd(cenrad_2);
+ pC=Lcrd(cenrad_3);
+ tmp=pB-pA;
+ tmp1=(tmp_2,-tmp_1);
+ tmp=pC-pB;
+ tmp2=(tmp_2,-tmp_1);
+ d1=det([tmp1,tmp2]);
+ d2=det([pC-pA,tmp2]);
+ if(abs(d1)<Eps & abs(d2)>10*Eps,
+ println("points are in a line");
+ ra=0;
+ ,
+ Ctr=1/2*(pA+pB)+1/2*d2/d1*tmp1;
+ ra=|pA-Ctr|;
+ tmp=name+"center="+Textformat(Ctr,5)+";";
+ parse(tmp);
+ Defvar(name+"center",re(Ctr));
+ );
+ );
+ if(ra>0,
+ Out=[];
+ forall(0..Num,
+ Th=Rg_1+#*(Rg_2-Rg_1)/Num;
+ Out=append(Out,Ctr+ra*[cos(Th),sin(Th)]);
+ );
+ ,
+ Out=Lineplot("1",[pA,pB],["nodata"]);
+ );
+ if(Noflg<3,
+ if(Msg=="Y", //190206
+ println("generate Circledata "+name);
+ );
+ tmp1=apply(Out,Pcrd(#));
+ tmp=name+"="+Textformat(tmp1,5)+";"; //190415
+ parse(tmp);
+ if(length(cenrad)==2, //no ketjs on
+ tmp=name+"=Circledata("+cenrad+opstr+")";
+ ,
+ if(ra>0,
+ tmp=name+"=Circledata(["+Ctr+","+cenrad_1+"]"+opstr+")";
+ ,
+ tmp=name+"=Lineplot("+cenrad_1+","+cenrad_2+")";
+ );
+ );
+ GLIST=append(GLIST,tmp); //no ketjs off
+ );
+ if(Noflg<2,
+ if(isstring(Ltype),
+ if((Noflg==0)&(color!=KCOLOR), //181020 //no ketjs on
+ Texcom("{");Com2nd("Setcolor("+color+")");//180722
+ ); //no ketjs off
+ Ltype=Getlinestyle(text(Noflg)+Ltype,name);
+ if((Noflg==0)&(color!=KCOLOR), //181020 //no ketjs on
+ Texcom("}");//180722
+ ); //no ketjs off
+ ,
+ if(Noflg==1,Ltype=0);
+ );
+ GCLIST=append(GCLIST,[name,Ltype,opcindy]);
+ );
+ Out;
+);
+////%Circledata end////
+
+////%Framedata start////
+Framedata():=Framedata(["dr"]);//16.10.29from
+Framedata(list):=(
+ regional(pA,pB);
+ if(Measuredepth(list)==0,
+ pA=LLcrd((SW+NE)/2); // 15.09.17
+ pB=LLcrd(NE);
+ Framedata("win",[pA,pB],list);
+ ,
+ Framedata(list,[]);
+ );
+);//16.10.29until
+Framedata(Arg1,Arg2):=(
+ regional(name,list,options,str);
+ if(isstring(Arg1),
+ name=Arg1;
+ list=Arg2;
+ Framedata(name,list,[]);
+ ,
+ list=Arg1;
+ options=Arg2;
+ name="";// 16.10.07from
+ forall(list,
+ name=name+#.name;
+ );// 16.10.07until
+ Framedata(name,list,options);
+ );
+);
+Framedata(nm,list,optionsorg):=( //190424modified
+//help:Framedata();
+//help:Framedata("1",[C,A]);
+//help:Framedata("1",[C,dx,dy]);
+ regional(name,options,Out,tmp,tmp1,x1,x2,y1,y2,dx,dy,
+ opcindy,Ltype,Noflg,strL,cent,dx,dy,color);
+ name="fr"+nm;
+ options=optionsorg;
+ tmp=Divoptions(options);
+ Ltype=tmp_1;
+ Noflg=tmp_2;
+ color=tmp_(length(tmp)-2);
+ opcindy=tmp_(length(tmp));
+ if(length(list)==2, // 15.05.12
+ cent=Lcrd(list_1); tmp=Lcrd(list_2);
+ dx=abs(tmp_1-cent_1); dy=abs(tmp_2-cent_2);
+ ,
+ cent=Lcrd(list_1);
+ dx=list_2; dy=list_3;
+ );
+ x1=cent_1-dx; x2=cent_1+dx;
+ y1=cent_2-dy; y2=cent_2+dy;
+ Listplot("-"+name,[[x1,y1],[x2,y1],[x2,y2],[x1,y2],[x1,y1]],options);
+);
+Framedata(nm,cent,dx,dy):=Framedata(nm,[cent,dx,dy],[]);
+Framedata(nm,cent,dx,dy,options):=Framedata(nm,[cent,dx,dy],options);
+////%Framedata end////
+
+////%Framedata2 start////
+Framedata2(nm,list):=Framedata2(nm,list,[]);
+Framedata2(nm,list,options):=(
+//help:Framedata2("1",[A,B]);
+ regional(tmp,tmp1,pC,pB);
+ pC=(Lcrd(list_1)+Lcrd(list_2))/2;
+ pB=Lcrd(list_2);
+ Framedata(nm,[pC,pB],options);
+);
+////%Framedata2 end////
+
+////%Ovaldata start////
+Ovaldata(nm,Pdata):=Ovaldata(nm,Pdata,[]);
+Ovaldata(nm,Pdata,options):=(
+//help:Ovaldata("1",[A,B]);
+//help:Ovaldata(optios=[size]);
+ regional(name,Graph,Ctr,Dx,Dy,Rc,Out,Point,Graph,
+ opstr,opcindy,tmp,tmp1,tmp2,tmp3,Ltype,Noflg,color);
+ name="ov"+nm;
+ tmp=Divoptions(options);
+ Ltype=tmp_1;
+ Noflg=tmp_2;
+ color=tmp_(length(tmp)-2);
+ opcindy=tmp_(length(tmp));
+ opstr=tmp_(length(tmp)-1);
+ Rc=0.2;
+ tmp1=tmp_6;
+ if(length(tmp1)>0,Rc=tmp1_1*Rc);
+// if(length(tmp1)>0,Rc=tmp1_1); //15.11.15
+ Ctr=Lcrd(Pdata_1);
+ if(ispoint(Pdata_2) % islist(Pdata_2),
+ tmp1=Lcrd(Pdata_2);
+ Dx=abs(tmp1_1-Ctr_1);
+ Dy=abs(tmp1_2-Ctr_2);
+ ,
+ Dx=Pdata_2;
+ Dy=Pdata_3;
+ );
+ Point=Ctr+[Dx-Rc,Dy-Rc];
+ tmp2=Listplot("1",[Ctr+[Dx-Rc,Dy],Ctr+[0,Dy]],
+ ["nodata"]);
+ tmp3=Listplot("2",[Ctr+[Dx,0],Ctr+[Dx,Dy-Rc]],
+ ["nodata"]);
+ if(Rc>0, //180624from
+ tmp1=Circledata("1",[Point,Point+[Rc,0]],
+ ["Rng=[0,pi/2]","Num=10","nodata"]);
+ Graph=Joincrvs("1",[tmp3,tmp1,tmp2],["nodata"]);
+ ,
+ Graph=Joincrvs("1",[tmp3,tmp2],["nodata"]);
+ ); //180624to
+ tmp1=Reflectdata("1",[Graph],[Ctr,Ctr+[0,1]],["nodata"]);
+ Graph=Joincrvs("1",[Graph,tmp1],["nodata"]);
+ tmp2=Reflectdata("2",[Graph],[Ctr,Ctr+[1,0]],
+ ["nodata"]);
+ Graph=Joincrvs("2",[Graph,tmp2],["nodata"]);
+ if(Noflg<3,
+ println("generate Ovaldata "+name);
+ tmp1=apply(Graph,Pcrd(#));
+ tmp=name+"="+Textformat(tmp1,5)+";"; //190415
+ parse(tmp);
+ GLIST=append(GLIST, //no ketjs
+ name+"=Ovaldata("+Ctr+","+Dx+","+Dy+opstr+")");//16.01.30 //no ketjs
+ );
+ if(Noflg<2,
+ if(isstring(Ltype),
+ if((Noflg==0)&(color!=KCOLOR), //180904 //no ketjs on
+ Texcom("{");Com2nd("Setcolor("+color+")");//180722
+ ); //no ketjs off
+ Ltype=Getlinestyle(text(Noflg)+Ltype,name);
+ if((Noflg==0)&(color!=KCOLOR), //180904 //no ketjs on
+ Texcom("}");//180722
+ ); //no ketjs off
+ ,
+ if(Noflg==1,Ltype=0);
+ );
+ GCLIST=append(GCLIST,[name,Ltype,opcindy]);
+ tmp1=apply(Graph,Pcrd(#));
+ tmp=name+"="+Textformat(tmp1,5)+";"; //190415
+ parse(tmp);
+ tmp=Textformat(Ctr,5)+","+Textformat(Dx,5)+","+Textformat(Dy,5);
+ );
+ Graph;
+);
+////%Ovaldata end////
+
+////%Segmark start////
+Segmark(nm,ptlist):=Drawsegmark(nm,ptlist,[]);
+Segmark(nm,ptlist,options):=Drawsegmark(nm,ptlist,options);//180704
+Drawsegmark(nm,ptlist):=Drawsegmark(nm,ptlist,[]);
+Drawsegmark(nm,ptlist,options):=(
+//help:Segmark("1",[A,B]);
+//help:Segmark(options=["Type=1","Width=1","Size=1"]);
+ regional(name,pA,pB,wid,mid,size,tp,dir,nor,eqL,color, //180704
+ tmp,tmp1,tmp2);
+ name="mrk"+nm;
+ pA=ptlist_1;
+ pB=ptlist_2;
+ size=0.15;
+ wid=0.05;
+ tp=1;
+ tmp1=Divoptions(options);
+ eqL=tmp1_5;
+ color=tmp1_(length(tmp1)-2);//180704
+ forall(eqL,
+ tmp=indexof(#,"=");
+ tmp1=substring(#,tmp,length(#));
+ tmp1=parse(tmp1);
+ tmp=Toupper(substring(#,0,1));
+ if(tmp=="S",
+ size=size*tmp1;
+ );
+ if(tmp=="W",
+ wid=wid*tmp1;
+ );
+ if(tmp=="T",
+ tp=tmp1;
+ );
+ );
+ mid=(pA+pB)/2;
+ dir=(pB-pA)/|pB-pA|;
+ nor=[-dir_2,dir_1];
+// nor=nor/|nor|;
+ if(tp==1,
+ tmp1=mid+size*nor;
+ tmp2=mid-size*nor;
+ Listplot(name,[tmp1,tmp2],["Color="+text(color)]);//180704
+ );
+ if(tp==2,
+ tmp1=mid+wid*dir+size*nor;
+ tmp2=mid+wid*dir-size*nor;
+ Listplot(name+"r",[tmp1,tmp2],["Color="+text(color)]);//180704
+ tmp1=mid-wid*dir+size*nor;
+ tmp2=mid-wid*dir-size*nor;
+ Listplot(name+"l",[tmp1,tmp2],["Color="+text(color)]);//180704
+ );
+ if(tp==3,
+ tmp1=mid;
+ tmp2=mid+size*dir;
+ Circledata(name,[tmp1,tmp2],["Color="+text(color)]);//180704
+ );
+ if(tp==4,
+ tmp=mid+size*2/sqrt(3)*nor;
+ tmp1=mid+size*dir-size/sqrt(3)*nor;
+ tmp2=mid-size*dir-size/sqrt(3)*nor;
+ Listplot(name,[tmp,tmp1,tmp2,tmp],["Color="+text(color)]);//180704
+ );
+);
+////%Segmark end////
+
+////%Parabolaplot start////
+Parabolaplot(nm,ptlist):=Parabolaplot(nm,ptlist,"[-5,5]",[]);
+Parabolaplot(nm,ptlist,Arg):=(
+ regional(rng,options);
+ if(isstring(Arg),
+ rng=Arg;
+ options=[];
+ ,
+ rng="[-5,5]";
+ options=Arg;
+ );
+ Parabolaplot(nm,ptlist,rng,options);
+);
+Parabolaplot(nm,ptlist,rng,options):=(
+//help:Parabolaplot("1",[A,B,C]):
+//help:Parabolaplot("1",[A,B,C],"[-5,5]");
+ regional(pA,pB,pC,angle,tmp,tmp1,tmp2);
+ tmp1=Lcrd(ptlist_1);
+ tmp2=Lcrd(ptlist_3);
+ pB=Lcrd(ptlist_2);
+ tmp=(tmp2-pB)/|tmp2-pB|;
+ if(tmp_2>=0,
+ angle=arccos(tmp_1);
+ ,
+ if(tmp_1>=0,
+ angle=arcsin(tmp_2);
+ ,
+ angle=-arccos(tmp_1);
+ );
+ );
+ pA=Rotatepoint(tmp1,-angle,pB);
+ pC=Rotatepoint(tmp2,-angle,pB);
+ tmp1=1/(2*(pA_2-pB_2));
+ tmp2=1/2*(pA_2+pB_2);
+ tmp="("+format(tmp1,5)+")*(x-("+format(pA_1,5)+"))^2";
+ tmp=tmp+"+("+format(tmp2,5)+")";
+ tmp1=parse(rng);
+ tmp1=[pA_1-(tmp1_2-tmp1_1)/2,pA_1+(tmp1_2-tmp1_1)/2];
+ tmp2="x="+Textformat(tmp1,5);
+ Plotdata(nm+"para",tmp,tmp2,append(options,"nodisp"));
+ Rotatedata(nm+"para","gr"+nm+"para",angle,append(options,pB));
+);
+////%Parabolaplot end////
+
+////%Ellipseplot start////
+Ellipseplot(nm,ptlist):=Ellipseplot(nm,ptlist,"[0,2*pi]",[]);
+Ellipseplot(nm,ptlist,Arg):=(
+ regional(rng,options);
+ if(isstring(Arg),
+ rng=Arg;
+ options=[];
+ ,
+ rng="[0,2*pi]";
+ options=Arg;
+ );
+ Ellipseplot(nm,ptlist,rng,options);
+);
+Ellipseplot(nm,ptlist,rng,options):=(
+//help:Ellipseplot("1",[A,B,3]);
+//help:Ellipseplot("1",[A,B,C],"[0,pi]",[options]);
+ regional(pA,pB,d,angle,f,a,b,pM,tmp,tmp1,tmp2);
+ pA=Lcrd(ptlist_1);
+ tmp1=Lcrd(ptlist_2);
+ if(ispoint(ptlist_3),
+ tmp2=Lcrd(ptlist_3);
+ d=|tmp2-pA|+|tmp2-tmp1|;
+ ,
+ d=ptlist_3;
+ );
+ tmp=(tmp1-pA)/|tmp1-pA|;
+ if(tmp_2>=0,
+ angle=arccos(tmp_1);
+ ,
+ if(tmp_1>=0,
+ angle=arcsin(tmp_2);
+ ,
+ angle=-arccos(tmp_1);
+ );
+ );
+ pB=Rotatepoint(tmp1,-angle,pA);
+ f=|pB_1-pA_1|/2;
+ a=d/2;
+ b=sqrt(d^2/4-f^2);
+ pM=(pA+pB)/2;
+ tmp="["+format(pM_1,5)+","+format(pM_2,5)+"]";
+ tmp=tmp+"+["+format(a,5)+"*cos(t),"+format(b,5)+"*sin(t)]";
+ Paramplot(nm+"elp",tmp,"t="+rng,append(options,"nodisp"));
+ Rotatedata(nm+"elp","gp"+nm+"elp",angle,append(options,pA));
+);
+////%Ellipseplot end////
+
+////%Hyperbolaplot start////
+Hyperbolaplot(nm,ptlist):=Hyperbolaplot(nm,ptlist,"[-5/2,5/2]",[]);
+Hyperbolaplot(nm,ptlist,Arg):=(
+ regional(rng,options);
+ if(isstring(Arg),
+ rng=Arg;
+ options=[];
+ ,
+ rng="[-5/2,5/2]";
+ options=Arg;
+ );
+ Hyperbolaplot(nm,ptlist,rng,options);
+);
+Hyperbolaplot(nm,ptlist,rng,optionsorg):=(
+//help:Hyperbolaplot("1",[A,B,C],["Num=200"]):
+//help:Hyperbolaplot("1",[A,B,C],"[-5,5]",["Asy=do"]);
+ regional(pA,pB,d,angle,f,a,b,pM,eqL,options,opasy,tmp,tmp1,tmp2);
+ tmp=Divoptions(optionsorg);
+ eqL=tmp_5;
+ options=optionsorg;
+ opasy=[];
+ forall(eqL,
+ if(Toupper(substring(#,0,1))=="A",
+ tmp=indexof(#,"=");
+ opasy=[substring(#,tmp,length(#))];
+ options=remove(options,[#]);
+ );
+ );
+ pA=Lcrd(ptlist_1);
+ tmp1=Lcrd(ptlist_2);
+ if(ispoint(ptlist_3),
+ tmp2=Lcrd(ptlist_3);
+ d=abs(|tmp2-pA|-|tmp2-tmp1|);
+ ,
+ d=ptlist_3;
+ );
+ tmp=(tmp1-pA)/|tmp1-pA|;
+ if(tmp_2>=0,
+ angle=arccos(tmp_1);
+ ,
+ if(tmp_1>=0,
+ angle=arcsin(tmp_2);
+ ,
+ angle=-arccos(tmp_1);
+ );
+ );
+ pB=Rotatepoint(tmp1,-angle,pA);
+ f=|pB_1-pA_1|/2;
+ a=d/2;
+ b=sqrt(f^2-d^2/4);
+ pM=(pA+pB)/2;
+ tmp="["+format(pM_1,5)+"+"+format(a,5)+"*(exp(t)+exp(-t))/2,";
+ tmp=tmp+format(pM_2,5)+"+"+format(b,5)+"*(exp(t)-exp(-t))/2]";
+ Paramplot(nm+"hyp1",tmp,"t="+rng,append(options,"nodisp"));
+ tmp="["+format(pM_1,5)+"-"+format(a,5)+"*(exp(t)+exp(-t))/2,";
+ tmp=tmp+format(pM_2,5)+"+"+format(b,5)+"*(exp(t)-exp(-t))/2]";
+ Paramplot(nm+"hyp2",tmp,"t="+rng,append(options,"nodisp"));
+ Rotatedata(nm+"hyp1","gp"+nm+"hyp1",angle,append(options,pA));//180408
+ Rotatedata(nm+"hyp2","gp"+nm+"hyp2",angle,append(options,pA));//180408
+ if(length(opasy)>0,
+ Lineplot(nm+"asy1",[pM+[a,b],pM+[-a,-b]],["nodisp"]);
+ Lineplot(nm+"asy2",[pM+[-a,b],pM+[a,-b]],["nodisp"]);
+ Rotatedata(nm+"asy1","ln"+nm+"asy1",angle,append(opasy,pA));//180408
+ Rotatedata(nm+"asy2","ln"+nm+"asy2",angle,append(opasy,pA));//180408
+ );
+);
+////%Hyperbolaplot end////
+
+////%Polygonplot start////
+Polygonplot(nm,ptlist,number):=Polygonplot(nm,ptlist,number,[]);
+Polygonplot(nm,ptlist,number,optionorg):=(
+//help:Polygonplot("1",[A,B],12);
+//help:Polygonplot("1",[A,B],12,["Geo=n"]);
+ regional(options,eqL,geo,rr,pA,pB,ptL,angle,tmp,tmp1,tmp2);
+println([4573,ptlist]);
+ geo="N"; //180708from
+ options=optionorg;
+ tmp=Divoptions(options);
+ eqL=tmp_5;
+ forall(eqL,
+ tmp=Strsplit(#,"=");
+ tmp1=Toupper(substring(tmp_1,0,1));
+ tmp2=tmp_2;
+ if(tmp1=="G",
+ geo=Toupper(substring(tmp2,0,1));
+ options=remove(options,[#]);
+ );
+ ); //180708to
+ pA=Lcrd(ptlist_1);
+ pB=Lcrd(ptlist_2);
+ rr=|pB-pA|;
+ tmp=(pB-pA)/rr;
+ if(tmp_2>=0,
+ angle=arccos(tmp_1);
+ ,
+ if(tmp_1>=0,
+ angle=arcsin(tmp_2);
+ ,
+ angle=-arccos(tmp_1);
+ );
+ );
+ ptL=[];
+ forall(0..number,
+ tmp=angle+#*2*pi/number;
+ tmp1=pA+rr*[cos(tmp),sin(tmp)];
+ if(#>0 & #<number,
+ if((ispoint(ptlist_2))&(geo=="Y"), //180708[3lines]
+ Putpoint((ptlist_2).name+text(#),tmp1);//16.10.07
+ );
+ //Pointdata(nm,ptL);
+ );
+ tmp2=tmp1;
+ ptL=append(ptL,tmp1);
+ );
+ Listplot(nm+"ply",ptL,options);
+);
+////%Polygonplot end////
+
+////%Putintersect start////
+Putintersect(nm,pdata1,pdata2):=(
+//help:Putintersect("Q","gr1","gr2");
+ regional(pd1,pd2,tmp);
+ if(isstring(pdata1),pd1=parse(pdata1),pd1=pdata1);
+ if(isstring(pdata2),pd2=parse(pdata2),pd2=pdata2);
+ tmp=Intersectcrvs(pd1,pd2);
+ if(length(tmp)==1,
+ Putpoint(nm,tmp_1);
+ ,
+ if(length(tmp)==0,
+ err("No intersect point");
+ ,
+ err("Multiple intersect points");
+ println(tmp);
+ err("Choose point number");
+ );
+ );
+);
+Putintersect(nm,pdata1,pdata2,ptno):=(
+ regional(pd1,pd2,tmp);
+ if(isstring(pdata1),pd1=parse(pdata1),pd1=pdata1);
+ if(isstring(pdata2),pd2=parse(pdata2),pd2=pdata2);
+ tmp=Intersectcrvs(pd1,pd2);
+ if(length(tmp)>0,
+ Putpoint(nm,tmp_ptno);
+ ,
+ err("No intersect point");
+ );
+);
+////%Putintersect end////
+
+//help:end();
+
diff --git a/graphics/ketcindy/ketcindyfolder/scripts/ketlib/ketcindylibbasic2logr.txt b/graphics/ketcindy/ketcindyfolder/scripts/ketlib/ketcindylibbasic2logr.txt
new file mode 100644
index 0000000000..35a48c5d4d
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/scripts/ketlib/ketcindylibbasic2logr.txt
@@ -0,0 +1,361 @@
+// 20190531
+// Drawfigures (Drwfigs) changed
+// 20190524
+// Anglemark,Paramark changed ( "E/L" option )
+// 20190523
+// Deqdata debugged ( floor => round )
+// Mkcstable added
+// Fourierseries changed ( for table data )
+// 20190520
+// Anglemark,Paramark debugged
+// Shade changed ( Listplot )
+// 20190512
+// Windispg changed (Dashlinedata)
+// 20190511
+// Periodfun changed ( println for debug removed)
+// 20190508
+// Changetablestyle debugged
+// Tabledatageo majorly changed
+// Tseginfo,Tsegrmv removed
+// 20190507
+// Tabledata debugged ( for "r_c_c_" )
+// Changetablestyle majorly changed
+// 20190505
+// Periodfun changed ( equal option added )
+// text(pt) => pt.name
+// 20190504
+// Lightarrowdata changed ("Line=" added )
+// 20190429
+// Pp => pp, Bow => bow
+// 20190429
+// Tabledatalight changed ( rng=n when move option used )
+// 20190428
+// Tabledata changed to Tabledatageo
+// Tabledata added ( Tabldetadalight if "Geo=n(defalt)", Tabledatageo if "Geo=y")
+// Tgrid changed ( TableMove added )
+// Changetablestyle changed ( for multiple tables )
+// 20190427
+// Drawfigures debugged ( N added )
+// Drwxy debugged ( KCOLOR added )
+// 20190426
+// Drawfigures added
+// 20190425
+// Rotatedata,Trans,Scale,Reflectdata changed (Msg option added)
+// Windispg changed ( for pointdata)
+// 20190424
+// Tabledatalight debugged ( tick)
+// 20190421
+// Tabledatalight changed ( 0 for notick)
+// 20190420
+// Periodfun majorly changed
+// Fourierseries changed ( range )
+// 20190419
+// Lightarrowdata added ( only for case of segment)
+/ 20190417
+// Arrowdata debugged ( for geo-points )
+// 20190416
+// Deqplot changed ( "`" )
+// Findfun, Extractun, Extractall move to basic3
+// 20190415
+// parse( ..= ) changed ( ; added )
+// Bowdata changed (Bpos)
+// 20190414
+// Helplist changed ( for basic3 )
+// 20190412
+// Some functions moved from basic1, moved to basic3
+// Arrowdata debugge ( for Setscaling )
+// 20190409
+// Mkketcindyjs debugged (color option )
+// Expr debugged ( type of pos,dir,text,option added )
+// 20190405
+// Mkketcindyjs changed (size of NE,SW. "Nolabe=all" )
+// 20190329
+// Slider debugged (PTEXCEPTION)
+// 20190325
+// Drwxy changed ( Msg=n for Listplot )
+// 20190324
+// Viewtex,Figpdf changed (for tikz )
+// 20190301
+// MeasureDepth => Measuredepth
+// 20190228
+// Putcell,Putcellexpr,Putrow,Putrowexpr,Putcell,Putcellexpr changed ( options added )
+// 20190225
+// Mkketcindyjs debugged ( nolabel )
+// 20190222
+// Mktitle, Presentation changed ( "xcolor" => "color" )
+// 20190217
+// Putoncurve remade
+/// 20190216
+// Putonseg changed, Putonline debugged
+// 20190215
+// Mkketcindyjs changed (default of "Locsl=" reverted to "y")
+// 20190214
+// Copyketcindyjs changed (for Mac,Linux)
+// 20190209
+// Mkketcindyjs changed (fliename when Local="y", Case of rhs of option is blank)
+// Mkketcindyjs changed ( "3d" added )
+// Letter changed ("Size=ratio" added )
+// Mkketcindyjs changed ( Local="n" as default)
+// Slider changed ( for no end points )
+// 20190208
+// Mkketcindyjs changed ( Local="y" as default)
+// 20190206
+// Mkketcindyjs changed ( kettex added to init slot, "only ketjs" added)
+// 20190203
+// Mkketcindyjs debugged ( in case of local=y )
+// 20190202
+// Bezier changed ( (nm, ptlist(2)) supported)
+// Htickmark,Vtickmark changed ( option added)
+// 20190201
+// Mkketcindyjs debugged ( for removing button case the last is not "," )
+// Ketjsoption renamed to Setketcindyjs
+// Mkketcindyjs changed ( "grid" option added )
+// 20190131
+// Mkketcindyjs changed (removespace of ignoretun,buttons to be removed)
+// 20190130
+// Mkketcindyjs changed (USEDFUN (global) added)
+// Ketjsoption changed (color)
+// 20190129
+// "/LF/" => "/L"+"F/"
+// Ketjsoption added
+// Mkketcindyjs changed ( option "Web","Local","Scale","Nolabel")
+// Copyketcindyjs debugged ( for Windows )
+// Mkketcindyjs changed ( option "Color" added)
+// 20190128
+// Mkketcindyjs changed ( texflg removed , katex is OK )
+// Copyketcindyjs added
+// 20190126
+// Windispg debugged (for Pointdata)
+// Mkketcindyjs change ( point size )
+// 20190125
+// Windispg redebugged ("size")
+// 20190123
+// Windispg debugged ("size")
+// 20190123
+// Dashlinedata debugged/changed (ptn )
+// Windispg changed (ptn=0)
+// 20190122
+// Windispg changed ("connect"=>"drawall" for do,da )
+// no ketjs added (Windispg,Mkketcindyjs)
+// Dashlinedata added
+// 20190120
+// Slider changed (color,size options )
+// 20190119
+// Mkketcindyjs debugge ( ketlib slot addede to csinit )
+// Windispg changed ( size of "dr" supported);
+// 20190118
+// Mkketcindyjs changed ( position of "katex", ketlib slot addede to csinit )
+// Windispg debugged ( dashtype,linecolor v.s. opcindy )
+// 20190116
+// Findfun, Extractfun, Extractall, Mkketcindyjs added (for new ketcindyjs)
+// 20190103
+// Drwxy changed (Addax(0) added in the case of add=0 )
+// Drwxy changed ( "O=" option added )
+// 20190101
+// Viewtex changed ( for tikz )
+// // 20181231
+// Drwxy debugged (GENTEN used, xrng/yrng changed )
+// Drwpt debugged ( Pointdata used )
+// Viewtex debugged ( tikz )
+// 20181224
+// WritetoRS changed (Closefile("0"))
+// 20181219
+// BBdata debugged (macosx => ismacosx )
+// 20181218
+// Letter, Expr changed (pt,dir,str,options added )
+// 20181217
+// Drwxy debugged
+// 20181216
+// Drwxy changed ( linestyle,colorax,colorla )
+// 20181215
+// Setax, Drwxy, Windispg changed ( Axstyle )
+// 20181214
+// WritetoRS changed ( Definition of Acos,Asin,Atan,Sqr,Factorial,Norm added )
+// 20181213
+// Usegraphics, WritetoRS changed ( tikz added)
+// 20181125
+// Mkslides, Mksldesummary chanded (Fillblack added )
+// Presentation changed ( load => readfile2str )
+// 20181106
+// WritetoRS changed ( Abnormal point ignored )
+// 20181030
+// ReadOutData debugged (option Disp= )
+// 20181024
+// ReadOutData changed (option Disp= )
+// 20181021
+// Htickmark,Vtickmark debugged ( Setscaling )
+// Partcrv, Pointdata debugged (iif => if )
+// 20181020
+// if(color!=KCOLOR => if((Noflg==0)&(color!=KCOLOR)
+// 20181017
+// Htickmark,Vtickmark debugged (for scaling )
+// 20181001
+// Bezier changed (BezierCtrL added as global )
+// 20180917
+// Makebat debugged ( case where work folder is under C )
+// 20180908
+// Presentation debugged (slidepage blank line added )
+// Presentation changed (SlideMargin added)
+// 20180904
+// Color setting changed ( for KCOLOR)
+// 20180903
+// Presentation changed (ketmargin => setmargin )
+// 20180901
+// Inwindow added
+// 20180820,22
+// CRspline chaged (rewritten )
+// 20180820,21
+// Drwxy chaged ( options added )
+// 20180817
+// WritetoRS, Viewtex changed (GPACK added )
+// 20180815
+// Maketitle changed (to make a new text file )
+// 20180813
+// Setslidehyper debugged ( cl,... )
+// 20180809
+// Mkcircles,Mksegment changed
+// 20180805
+// Letterrot debugged (' => "")
+// Letterrot, Exprrot changed (help )
+// 20180802
+// iftoR debugged ( for nested case )
+// Exprrot debugged ( ' => "")
+// 20180725
+// Periodfun changed ( "connect" option)
+// 20180724
+// Periodfun debugged and changed (rep=[n,n])
+// 20180722
+// color localized
+// 20180721
+// WritetoRS changed (case where "Letter" and "Expr" in Com2ndlist)
+// 20180710
+// Htickmark,Vtickmark changed (Expr used )
+// 20180708
+// Putoncurve changed ( Help )
+// 20180701
+// Repeatsameslide changed ( % added to thin )
+// 20180627
+// Presentation debugged ( sort(parafiles))
+// 20180619
+// Writetosci(Arg) added (=WritetoRS(Arg))
+// CRspline changed (Ctrpt not displayed )
+// 20180616
+// presentation debugged (slide title )
+// 20180610
+// WritetoRS changed ( \\ => /)
+// 20180608
+// Setslide changed ( old style of setting title resupported )
+// 20180604
+// Mkslides,Mkslidesummary debugged ( to make kc.sh executable )
+// Changework changed (set to Dircdy if dir not found )
+// 20180603
+// Rotatedata,... changed (KCOLOR)
+// Letter,Letterrot,Exprrot changed (color)
+// Scaledata changed ( case where x,y is the same ratio)
+// 20180602
+// divoptions ( 8,9 ->length(tmp)-1,length(tmp))
+// Rotatedata,... changed (color supported )
+// Rotataedata,... debugged ( level RSform =>1 )
+// Settitle debugged ( color option batted )
+//20180529
+// Presentation debugged (for repeat=1)
+//20180526
+// Repeatsameslide debugged (for minipage with thin)
+// Presentation changed ( page jump button )
+//20180524
+// Presentation changed ( pageend, \slidepage, pagestyle{empty})
+//20180515
+// Setpara changed ( "m" as default)
+//20180514
+// WritetoRS,Makebat changed ( to execsrc.r)
+//20180513
+// WritetoRS,Makebat changed ( UTF-8)
+//20180412
+// Mksummary changed ( calcbyR, quit )
+//20180409
+// WritetoRS,Makebat changed ( "shell" used )
+//20180408
+// WritetoRS debugged ( setwd )
+// WriteoRS,Makebat changed ( use "sjis.txt")
+//20180405
+// Makebat debugged
+//20180404
+// Tlistplot changed ("Msg");
+// WritetoRS debugged ( openfie(..,Cdy= ))
+//20180403
+// WritetoRS, Makebat changed (for Zenkaku)
+// Convsjiswin removed
+// Mkslidesummary debugged
+//20180401
+// Convsjiswin added
+// Makebat changed (for convsjis )
+//20180330
+// Presentation changed (for wallpaper )
+// Settitle changed (Title option )
+//20180303
+// Letter debugged (for ` )
+//2017.12.24
+// IftoR, FortoR,Deffun rewritten
+//2017.12.23
+// Bezier, Translatedata,Rotatedata,Reflectdata debugged ( [ ] )
+// RSform : help added
+//2017.12.19
+// WritetoSci() added (=WritetoR(), for old Parent button )
+//2017.12.16
+// Setslidehyper changed ("Size=","Pos=[]")
+//2017.12.09
+// Mkslides changed (for animation)
+// MakeRarg (from Makesciarg ) added ( RSslash )
+// Setax, Htickmark, Vtickmark changed ( MakeRarg )
+//2017.11.24
+// Slidework changed ( makedir)
+// Rotatedata debugged ( MeasureDepth)
+//2017.11.20
+// Slidework changed ( for the case of (ex) dir="...../")
+//2017.11.05
+// Figpdf debugged
+//2017.11.01
+// Presentation debugged ( usepackage{ketpic} etc. )
+//2017.10.30
+// Viewtex changed ( path of ketpicstyle )
+//2017.10.28
+// WritetoRS changed ( generator is written )
+//2017.10.26
+// Mksummary changed for R
+//2017.10.18
+// Letter,Letterrot,Exprrot debugged (\ and \\)
+//2017.10.17
+// Viewtex debugged ($ removed for xelatex)
+//2017.10.16
+// Mkslides debugged ( line4 from last,path)
+//2017.10.14
+// Makebat,Makeshell changed(flow="tt" supported)
+//2017.10.13
+// Makebat,Makeshell,Mkslides debugged (Shellfile,Sehllchild removed )
+// Makeshell debugged ( Case of no "/" )
+//2017.10.08
+// Mkslides debugged (Sheslide=>Shellslide )
+//2017.10.07
+// WritetoRS changed (for pict2e)
+// Helplist debugged ( for r )
+//2017.10.06
+// RSform debugged
+//2017.09.29
+// Viewparent debugged (WritetoRS)
+//2017.09.24
+// WritetoRS debugged ("\" => "/")
+// RSslash added
+// Letter changed (RSslash used)
+//2017.09.22
+// Defvar changed ("=" removed)
+// WritetoRS changed (Com1st,..., VLIST )
+//2017.09.18
+// Extractdata changed
+// SCIWR,SCIRE removed
+//2017.09.17
+// WritetoRS added
+// Viewtex changed ( Writetosci => WritetoR )
+//2017.09.16
+// RSform, Deffun, IftoR, FortoR changed( added )
+//2017.09.14
+// Makeshell, Makebat changed \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/scripts/ketlib/ketcindylibbasic2r.cs b/graphics/ketcindy/ketcindyfolder/scripts/ketlib/ketcindylibbasic2r.cs
new file mode 100644
index 0000000000..c1e21281ed
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/scripts/ketlib/ketcindylibbasic2r.cs
@@ -0,0 +1,5260 @@
+// Copyright (C) 2014 Setsuo Takato, KETCindy Japan project team
+//
+//This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see <http://www.gnu.org/licenses/>
+//
+
+println("ketcindylibbasic2[20190531] loaded");
+
+//help:start();
+
+////%Drwfigs start//// 190530
+Drwfigs(nm,figlist):=Drawfigures(nm,figlist,[]);
+Drwfigs(nm,figlist,optionlist):=Drawfigures(nm,figlist,optionlist,[]);
+Drwfigs(nm,figlist,optionlist,commonops):=Drawfigures(nm,figlist,optionlist,commonops);
+////%Drwfigs end////
+
+////%Drawfigures start//// 190426
+Drawfigures(nm,figlist):=Drawfigures(nm,figlist,[]);
+Drawfigures(nm,figlist,optionlist):=Drawfigures(nm,figlist,optionlist,[]);
+Drawfigures(nm,figlistorg,optionlistorg,commonops):=(
+//help:Drawfigures(["pt1","cr1"], [["Size=3"],[]],["Msg=n"]);
+ regional(figlist,name,figL,optionlist,nn,kk,fig,eqL,msg,tmp,tmp1,tmp2);
+ name="figs"+nm;
+ tmp=Divoptions(commonops);
+ eqL=tmp_5;
+ msg="Y";
+ forall(eqL,
+ tmp=Strsplit(#,"=");
+ tmp1=Toupper(substring(tmp_1,0,1));
+ if(tmp1=="M",
+ msg=Toupper(substring(tmp_2,0,1));
+ );
+ );
+ figlist=figlistorg;
+ if(isstring(figlist),figlist=parse(figlist));
+ nn=length(figlist);
+ optionlist=optionlistorg;
+ if(length(optionlist)==0, //190531from
+ optionlist=apply(1..nn,[]);
+ );
+ if(!islist(optionlist_1),
+ optionlist=apply(1..nn,optionlist);
+ );
+ if(length(optionlist)<nn,
+ tmp=optionlist_(length(optionlist));
+ tmp2=length(optionlist);
+ tmp1=apply(tmp2..nn,tmp);
+ optionlist=concat(optionlist,tmp1);
+ ); //190531to
+ figL=[];
+ forall(1..nn,kk,
+ fig=figlist_kk;
+ if(isstring(fig),fig=parse(fig));
+ if(length(fig)>0,
+ if(Measuredepth(fig)==0,fig=[fig]); //190531from
+ if(Measuredepth(fig)==1,fig=[fig]);
+ forall(1..(length(fig)),
+ tmp1=fig_#;
+ tmp2=name+"n"+text(kk)+"p"+text(#);
+ if(length(tmp1)==1,
+ Pointdata(tmp2,tmp1,optionlist_kk);
+ figL=append(figL,"pt"+tmp2);
+ ,
+ Listplot("-"+tmp2,tmp1,optionlist_kk);
+ figL=append(figL,tmp2); //190427
+ );
+ ); //190531to
+ );
+ );
+ tmp=apply(figL,Dqq(#));
+ tmp=name+"="+text(tmp)+";";
+ parse(tmp);
+ if(msg=="Y",
+ println("generate "+name+"="+text(figL));
+ );
+ figL;
+);
+////%Drawfigures end////
+
+////%Setarrow start////
+Setarrow():=Setarrow([]);
+Setarrow(arglist):=(
+//help:Setarrow([-1,-1,-1,1,0.3]);
+//help:Setarrow([size(1),angle(18),position(1),cut(0),segstyle("dr,1")]);
+ regional(tmp);
+ tmp=select(arglist,isreal(#));
+ if(length(tmp)==0,
+ println([YaSize,YaAngle,YaPosition,YaCut,YasenStyle]);
+ );
+ if(length(tmp)>=1,
+ if((tmp_1>0),YaSize=tmp_1);
+ );
+ if(length(tmp)>=2,
+ if((tmp_2>0)&(tmp_2<90),YaAngle=tmp_2);
+ );
+ if(length(tmp)>=3,
+ if((tmp_3>=0)&(tmp_3<=1),YaPosition=tmp_3);
+ );
+ if(length(tmp)>=4,
+ if((tmp_4>=0)&(tmp_4<1),YaCut=tmp_4);
+ );
+ tmp=select(arglist,isstring(#));
+ if(length(tmp)>0,
+ YasenStyle=tmp_1;
+ );
+ [YaSize,YaAngle,YaPosition,YaCut,YasenStyle];
+);
+////%Setarrow end////
+
+////%Arrowheaddata start////
+Arrowheaddata(point,direction):=Arrowheaddata(point,direction,[]);
+Arrowheaddata(point,direction,options):=(
+// help:Arrowheaddata(A,B);
+// help:Arrowheaddata(options=[size(1),angle(18), "Coord=phy"]);
+ regional(list,ookisa,hiraki,Houkou,Str,Flg,Ev,Nv,pA,pB,
+ reL,eqL,coord,pP,rF,gG,Flg,Nj,Eps,scx,scy,tmp,tmp1,tmp2);
+ Eps=10^(-3);
+ coord="P";
+ ookisa=0.2*YaSize;
+ hiraki=YaAngle;
+ iti=1;
+ kiri=0;
+ Futosa=0;
+ Str=YaStyle;
+ tmp=Divoptions(options);
+ eqL=tmp_5; //181018from
+ reL=tmp_6;
+ forall(eqL,
+ tmp=Strsplit(#,"=");
+ tmp1=substring(tmp_1,0,1);
+ tmp2=substring(tmp_2,0,1);
+ if(Toupper(tmp1)=="C",
+ coord=Touppera(tmp2);
+ );
+ ); //181018to
+ forall(1..(length(reL)), //181110from
+ tmp=reL_#;
+ if(#==1,ookisa=ookisa*tmp);
+ if(#==2,
+ if(tmp<5,
+ hiraki=hiraki*tmp;
+ ,
+ hiraki=tmp;
+ );
+ );
+ ); //181110to
+ Flg=0;
+ hiraki=hiraki*pi/180;
+ if(ispoint(direction),Houkou=direction.xy); //181018
+ if(isstring(direction),Houkou=parse(direction),Houkou=direction);
+ if(Measuredepth(Houkou)==2,Houkou=Houkou_1);
+ if(coord=="P",//181018from
+ if(ispoint(point),pP=point.xy,pP=point);
+ ,
+ pP=Pcrd(point);
+ if(!islist(Houkou_1),
+ Houkou=Pcrd(Houkou);
+ ,
+ Houkou=apply(Houkou,Pcrd(#));
+ );
+ );//181018to
+ if(islist(Houkou_1),
+ tmp=Nearestpt(pP,Houkou);
+ pP=tmp_1;
+ rF=floor(tmp_2);
+ if(rF==1,
+ if(|Ptend(Houkou)-Ptstart(Houkou)|<Eps,
+ rF=Numptcrv(Houkou);
+ );
+ );
+ gG=apply(0..10,pP+ookisa*cos(hiraki)*[cos(2*pi/10*#),sin(2*pi/10*#)]);
+ Flg=0;
+ forall(1..rF,Nj,
+ if(Flg==0,
+ pB=Ptcrv(rF+1-Nj,Houkou);
+ tmp1=apply([pP,pB],LLcrd(#));
+ tmp2=apply(gG,LLcrd(#));
+ tmp=Intersectcrvspp([pP,pB],gG);
+ if(length(tmp)>0,
+ Houkou=pP-Pcrd(tmp_1_1);
+ Flg=1;
+ );
+ );
+ );
+ if(Flg==0,
+ println("Arrowhead may be too large (no intersect)");
+ Flg=2;
+ );
+ );
+ if(Flg<2,
+ Ev=-1/|Houkou|*Houkou;
+ Nv=[-Ev_2, Ev_1];
+ if(indexof(Str,"c")>0,
+ pP=pP-0.5*ookisa*cos(hiraki)*Ev;
+ );
+ if(indexof(Str,"b")>0,
+ pP=pP-ookisa*cos(hiraki)*Ev;
+ );
+ pA=pP+ookisa*cos(hiraki)*Ev+ookisa*sin(hiraki)*Nv;
+ pB=pP+ookisa*cos(hiraki)*Ev-ookisa*sin(hiraki)*Nv;
+ list=[pA,pP,pB];
+ list;
+ );
+);
+////%Arrowheaddata end////
+
+////%Arrowhead start////
+Arrowhead(point,Houkou):=Arrowhead(point,Houkou,[]); //181018from
+Arrowhead(Arg1,Arg2,Arg3):=(
+ if(isstring(Arg1),
+ Arrowhead(Arg1,Arg2,Arg3,[]);
+ ,
+ Arrowhead(text(ArrowheadNumber),Arg1,Arg2,Arg3);
+ );
+);
+Arrowhead(nm,point,direction,optionsorg):=(//181018from
+//help:Arrowhead("1",B,B-A);
+//help:Arrowhead(options=[size(1),angle(18),position(1),cut(0),"Coord=P(L)"]);
+//help:Arrowhead(the default is -1 for numeric option);
+//help:Arrowhead(A,"gr1");
+ regional(name,Ltype,Noflg,reL,opstr,opcindy,color,eqL,coord,
+ options,cut,pP,Houkou,ptstr,hostr,tmp,tmp1,tmp2,list);
+ name="arh"+nm; //181018
+ ArrowheadNumber=ArrowheadNumber+1;
+ options=optionsorg;
+ tmp=Divoptions(options);
+ Ltype=tmp_1;
+ Noflg=tmp_2;
+ reL=tmp_6;
+ color=tmp_(length(tmp)-2);
+ eqL=tmp_5;
+ coord="P";
+ forall(eqL,
+ tmp=Strsplit(#,"=");
+ tmp1=substring(tmp_1,0,1);
+ tmp2=substring(tmp_2,0,1);
+ if(Toupper(tmp1)=="C",
+ coord=Toupper(tmp2);
+ options=remove(options,[#]);
+ );
+ ); //181018to
+ tmp1=[YaSize,YaAngle,YaPosition,YaCut]; //181214from
+ forall(1..(length(reL)),
+ if(reL_#<0, reL_#=tmp1_#);
+ );
+ forall((length(reL)+1)..4,
+ reL=append(reL,tmp1_#);
+ );
+ cut=reL_4;
+ tmp=reL_(1..3);
+ options=select(options,!isreal(#));
+ options=concat(options,tmp); //181214to
+ if(ispoint(direction),Houkou=direction.xy); //181018
+ if(isstring(direction),Houkou=parse(direction),Houkou=direction);
+ if(Measuredepth(Houkou)==2,Houkou=Houkou_1);
+ if(coord=="P",//181018from
+ if(ispoint(point),pP=point.xy,pP=point);
+ ,
+ pP=Pcrd(point);
+ if(!islist(Houkou_1),
+ Houkou=Pcrd(Houkou);
+ ,
+ Houkou=apply(Houkou,Pcrd(#));
+ );
+ );//181018to
+ list=Arrowheaddata(pP,Houkou,options);
+ if(!Inwindow(LLcrd(pP)),Noflg=2);//181018
+ if(Noflg<3,
+ tmp1=apply(list,LLcrd(#));
+ tmp=name+"="+Textformat(tmp1,5)+";"; //190415
+ parse(tmp);
+ );
+ if(Noflg<2,
+ if(isstring(Ltype),
+ Listplot("-arh"+nm,apply(list,LLcrd(#)),concat(options,["notex","Msg=n"]));
+ );
+ );
+ if(Noflg==0,
+ tmp=Divoptions(options);
+ opstr=tmp_(length(tmp)-1);
+ opstr=opstr+","+Dqq("Cut="+format(cut,5));
+ ptstr=Textformat(LLcrd(pP),5);
+ if(isstring(direction), //181019
+ hostr=direction;
+ ,
+ if(!islist(Houkou_1),
+ hostr=format(LLcrd(Houkou),5);
+ ,
+ hostr=format(apply(Houkou,LLcrd(#)),5);
+ );
+ );
+ if((Noflg==0)&(color!=KCOLOR), //180904 //no ketjs on
+ Texcom("{");Com2nd("Setcolor("+color+")");//180722
+ ); //no ketjs off
+ Com2nd("Arrowhead("+ptstr+","+hostr+opstr+")");
+ if((Noflg==0)&(color!=KCOLOR), //180904 //no ketjs on
+ Texcom("}");//180722
+ ); //no ketjs off
+ );
+);
+////%Arrowhead end////
+
+////%Arrowdata start////
+Arrowdata(ptlist):=Arrowdata(ptlist,[]); //181110from
+Arrowdata(Arg1,Arg2):=(
+ regional(name);
+ if(isstring(Arg1),
+ Arrowdata(Arg1,Arg2,[]);
+ ,
+ name="";
+ forall(Arg1,
+ if(ispoint(#),
+ name=name+#.name; //190505
+ );
+ );
+ Arrowdata(name,Arg1,Arg2);
+ );
+); //181110from
+Arrowdata(nm,ptlistorg,optionsorg):=(
+//help:Arrowdata("1",[A,B]);
+//help:Arrowdata("1",[pt1,pt2]);
+//help:Arrowdata(options=[size(1),angle(18),pos(1),cut(0),"Cutend=0,0","Coord=p/l"]);
+//help:Arrowdata(optionsadded=["line"]);
+ regional(options,Ltype,Noflg,name,opstr,opcindy,eqL,reL,strL,color,size,coord,
+ flg,lineflg,cutend,tmp,tmp1,tmp2,pA,pB,angle,segpos,cut,scaley,ptlist);
+ name="ar"+nm;
+ scaley=SCALEY; //190412
+ Setscaling(1); //190412
+ ptlist=[];
+ forall(ptlistorg,
+ if(ispoint(#),tmp=[#.x, scaley*#.y], tmp=[#_1,scaley*#_2]);
+ ptlist=append(ptlist,tmp);
+ );
+// ptlist=apply(ptlistorg,[#_1,scaley*#_2]); //190412
+ options=optionsorg;
+ tmp=select(options,isstring(#)); //181214from
+ tmp1=select(tmp,contains(["dr","da","do","id"],substring(#,0,2)));
+ if(length(tmp1)==0,options=append(options,YasenStyle)); //181214to
+ tmp=Divoptions(options);
+ Ltype=tmp_1;
+ Noflg=tmp_2;
+ eqL=tmp_5;
+ reL=tmp_6;
+ strL=tmp_7;
+ color=tmp_(length(tmp)-2);
+ opstr=tmp_(length(tmp)-1);
+ opcindy=tmp_(length(tmp));
+ tmp1=[YaSize,YaAngle,YaPosition,YaCut]; //181214from
+ forall(1..(length(reL)),
+ if(reL_#<0, reL_#=tmp1_#);
+ );
+ forall((length(reL)+1)..4,
+ reL=append(reL,tmp1_#);
+ );
+ size=reL_1;
+ angle=reL_2;
+ segpos=reL_3;
+ cut=reL_4;
+ lineflg=0;
+ if(contains(strL,"l")%contains(strL,"L"),
+ lineflg=1;
+ );//181018from
+ options=remove(options,strL);
+ cutend=[0,0];//180719
+ coord="P";//181018
+ forall(eqL,
+ tmp=Strsplit(#,"=");
+ tmp1=Toupper(substring(tmp_1,0,2));
+ tmp2=tmp_2;
+ if(tmp1=="CU",//180719from
+ tmp2=replace(tmp2,"[","");
+ tmp2=replace(tmp2,"]","");
+ cutend=tokenize(tmp2,",");
+ if(length(cutend)==1,cutend=[cutend_1,cutend_1]);
+ options=remove(options,[#]);
+ );
+ if(tmp1=="CO",//181018from
+ coord=Toupper(substring(tmp2,0,1));
+ options=remove(options,[#]);
+ );
+ );
+ if(|cutend|>0,//181110from
+ tmp=ptlist_2-ptlist_1;
+ tmp=tmp/|tmp|;
+ ptlist_1=ptlist_1+tmp*cutend_1;
+ ptlist_2=ptlist_2-tmp*cutend_2;
+ );//181110to
+ if(coord=="P",
+ pA=ptlist_1; pB=ptlist_2;
+ if(ispoint(pA),pA=pA.xy);
+ if(ispoint(pB),pB=pB.xy);
+ ,
+ Setscaling(scaley); //190419
+ pA=Pcrd(ptlist_1); pB=Pcrd(ptlist_2);
+ Setscaling(1); //190419
+ );//181018to
+ if(Noflg<3,
+ println("generate Arrowdata "+name);
+ tmp=name+"="+Textformat([pA,pB],5)+";";
+ parse(tmp);
+ if(lineflg==0, // 16.04.09 from
+ tmp=pA-0.2*size/2*(pB-pA)/|pB-pA|; // 15.06.11
+ ,
+ tmp=pB;
+ ); // 16.04.09 until
+ tmp=format([LLcrd(pA),LLcrd(tmp)],6);
+ );
+ if(Noflg<2,
+ if(isstring(Ltype),
+ Listplot("-ar"+nm,[LLcrd(pA),LLcrd(pB)],append(options,"Msg=n"));
+ Arrowhead(nm,pA+segpos*(pB-pA),pB-pA,options); //181110
+ ,
+ if(Noflg==1,Ltype=0);
+ );
+ );
+ Setscaling(scaley); //190412
+ [Lcrd(pA),Lcrd(pB)];
+);
+////%Arrowdata end////
+
+////%Lightarrowdata start////
+Lightarrowdata(ptlist):=Lightarrowdata(ptlist,[]); //181110from
+Lightarrowdata(Arg1,Arg2):=(
+ regional(name);
+ if(isstring(Arg1),
+ Lightarrowdata(Arg1,Arg2,[]);
+ ,
+ name="";
+ forall(Arg1,
+ if(ispoint(#),
+ name=name+#.name; //190505
+ );
+ );
+ Lightarrowdata(name,Arg1,Arg2);
+ );
+); //181110from
+Lightarrowdata(nm,ptlist,optionsorg):=(
+//help:Lightarrowdata("1",[pt1,pt2]);
+//help:Lightarrowdata(options=[size(1),angle(18),pos(1),cut(0),"Cutend=0,0","Line=y(n)"]);
+ regional(options,Ltype,Noflg,opstr,opcindy,eqL,reL,strL,color,size,coord,lineflg,
+ flg,lineflg,cutend,tmp,tmp1,tmp2,pA,pB,angle,segpos,cut,scaley,Ev,Nv,pP);
+ pA=Pcrd(ptlist_1); pB=Pcrd(ptlist_2);
+ scaley=SCALEY; //190412
+ Setscaling(1);
+ ptlist=[];
+ forall(ptlistorg,
+ if(ispoint(#),tmp=[#.x, scaley*#.y], tmp=[#_1,scaley*#_2]);
+ ptlist=append(ptlist,tmp);
+ );
+ options=optionsorg;
+ tmp=select(options,isstring(#)); //181214from
+ tmp1=select(tmp,contains(["dr","da","do","id"],substring(#,0,2)));
+ if(length(tmp1)==0,options=append(options,YasenStyle)); //181214to
+ tmp=Divoptions(options);
+ Ltype=tmp_1;
+ Noflg=tmp_2;
+ eqL=tmp_5;
+ reL=tmp_6;
+ strL=tmp_7;
+ color=tmp_(length(tmp)-2);
+ opstr=tmp_(length(tmp)-1);
+ opcindy=tmp_(length(tmp));
+ tmp1=[YaSize,YaAngle,YaPosition,YaCut]; //181214from
+ forall(1..(length(reL)),
+ if(reL_#<0, reL_#=tmp1_#);
+ );
+ forall((length(reL)+1)..4,
+ reL=append(reL,tmp1_#);
+ );
+ size=reL_1;
+ angle=reL_2;
+ segpos=reL_3;
+ cut=reL_4;
+ lineflg=0;
+ if(contains(strL,"l")%contains(strL,"L"),
+ lineflg=1;
+ );//181018from
+ options=remove(options,strL);
+ cutend=[0,0];//180719
+ coord="P";//181018
+ lineflg=1; //190504
+ forall(eqL,
+ tmp=Strsplit(#,"=");
+ tmp1=Toupper(substring(tmp_1,0,2));
+ tmp2=tmp_2;
+ if(tmp1=="CU",//180719from
+ tmp2=replace(tmp2,"[","");
+ tmp2=replace(tmp2,"]","");
+ cutend=tokenize(tmp2,",");
+ if(length(cutend)==1,cutend=[cutend_1,cutend_1]);
+ options=remove(options,[#]);
+ );
+ if(tmp1=="LI",//190504from
+ tmp2=Toupper(substring(tmp2,0,1));
+ if(tmp2=="N",lineflg=0);
+ options=remove(options,[#]);
+ );//190504to
+ );
+ if(Noflg<3,
+ tmp="ar"+nm+"="+Textformat([pA,pB],5)+";";
+ parse(tmp);
+ );
+ if(Noflg<2,
+ if(isstring(Ltype),
+ if(lineflg==1, //190504from
+ Listplot("-ar"+nm,[LLcrd(pA),LLcrd(pB)],append(options,"Msg=n"));
+ ,
+ tmp=pB;
+ pB=pA;
+ pA=pB-tmp;
+ ); //190504to
+ size=0.2*size;
+ angle=angle*pi/180;
+ pP=pA+segpos*(pB-pA);
+ Ev=-1/|pB-pA|*(pB-pA);
+ Nv=[-Ev_2, Ev_1];
+ tmp1=pP+size*cos(angle)*Ev+size*sin(angle)*Nv;
+ tmp2=pP+size*cos(angle)*Ev-size*sin(angle)*Nv;
+ ArrowheadNumber=ArrowheadNumber+1;
+ Listplot("-arh"+nm,[tmp1,pP,tmp2],append(options,"Msg=n"));
+ if((Noflg==0)&(color!=KCOLOR), //180904 //no ketjs on
+ Texcom("{");Com2nd("Setcolor("+color+")");//180722
+ ); //no ketjs off
+ Setscaling(scaley);
+ tmp1=Textformat(LLcrd(pP),5);
+ tmp2=Textformat(LLcrd(pB-pA),5);
+ Com2nd("Arrowhead("+tmp1+","+tmp2+opstr+")");
+ if((Noflg==0)&(color!=KCOLOR), //180904 //no ketjs on
+ Texcom("}");//180722
+ ); //no ketjs off
+ ,
+ if(Noflg==1,Ltype=0);
+ );
+ );
+ Setscaling(scaley); //190412
+ [Lcrd(pA),Lcrd(pB)];
+);
+////%Lightarrowdata end////
+
+////%Anglemark start////
+Anglemark(plist):=Anglemark(plist,[]);
+Anglemark(Arg1,Arg2):=( // 2015.04.28 from
+ regional(nm,plist,options,tmp);
+ if(isstring(Arg1),
+ nm=Arg1;
+ plist=Arg2;
+ Anglemark(nm,plist,[]);
+ ,
+ plist=Arg1;
+ options=Arg2;
+ tmp=Textformat(plist,5);
+ tmp=replace(tmp,",","");
+ nm=substring(tmp,1,length(tmp)-1);
+ Anglemark(nm,plist,options);
+ );
+); // to
+Anglemark(nm,plist,options):=(
+//help([A,B,C],["E=\theta",2]);
+//help:Anglemark("1",[A,B,C],["E=1.2,\theta",2]);
+// help:Anglemark("1",[A,B,2*pi]);
+//help:Anglemark(options=[size,"E/L=(sep,)letter"]);
+ regional(name,Out,pB,pA,pC,Ctr,ra,sab,sac,ratio,opstr,Bname,Bpos,color,
+ Brat,tmp,tmp1,tmp2,Num,opcindy,Ltype,eqL,realL,Rg,Th,Noflg,Msg);
+ name="ag"+nm;
+ Bpos="md"+name;
+ ra=0.5;
+ tmp=Divoptions(options);
+ Ltype=tmp_1;
+ Noflg=tmp_2;
+ color=tmp_(length(tmp)-2);
+ opcindy=tmp_(length(tmp));
+ eqL=tmp_5;
+ realL=tmp_6;
+ Bname="";
+ Brat=1.2; //180530
+ Num=20;
+ Msg="Y";
+ opstr="";
+ if(length(realL)>0,
+ ra=realL_1*ra;
+ opstr=","+text(realL_1);//180530
+ );
+ forall(eqL,
+ tmp=Strsplit(#,"=");
+ tmp1=Toupper(substring(tmp_1,0,1));
+ if((tmp1=="L")%(tmp1=="E"),
+ if(tmp1=="L",Bname="Letter(");
+ if(tmp1=="E",Bname="Expr(");
+ Bname=Bname+Bpos+","+Dqq("c")+",";//16.10.29
+ tmp=tmp_2; //190524from
+ tmp1=Indexall(tmp,",");
+ if(length(tmp1)==0,
+ Bname=Bname+Dqq(tmp);
+ ,
+ if(length(tmp1)>1,
+ Brat=parse(substring(tmp,0,tmp1_1-1));
+ tmp=substring(tmp,tmp1_1,length(tmp));
+ tmp1=Indexall(tmp,",");
+ ,
+ if(substring(tmp,tmp1_1,tmp1_1+1)!="[",
+ Brat=parse(substring(tmp,0,tmp1_1-1));
+ tmp=substring(tmp,tmp1_1,length(tmp))+",[]";
+ tmp1=Indexall(tmp,",");
+ );
+ );
+ Bname=Bname+Dqq(substring(tmp,0,tmp1_1-1));
+ tmp=substring(tmp,tmp1_1+1,length(tmp)-1);
+ tmp=Strsplit(tmp,",");
+ tmp1=apply(tmp,Dqq(#));
+ Bname=Bname+","+text(tmp1);
+ );
+ Bname=Bname+");"; //190524to
+ );
+ if(tmp1=="M", //190206from
+ Msg=Toupper(substring(tmp_2,0,1));
+ ); //190206to
+ );
+ pB=Lcrd(plist_1); pA=Lcrd(plist_2); sab=pB-pA;
+ Ctr=pA;
+ if((length(plist_3)>1)%(ispoint(plist_3)), //180506from
+ pC=Lcrd(plist_3);
+ sac=pC-pA;
+ Rg=[arctan2(sab)+0,arctan2(sac)+0];
+ ,
+ sac=pB-pA;
+ Rg=[arctan2(sab)+0,arctan2(sab)+plist_3];
+ ); //180506to
+ if(Rg_2<Rg_1,Rg_2=Rg_2+2*pi);
+ Out=[];
+ if(ra>min(|sab|,|sac|), // 16.12.29
+ println(" segments too short");
+ ,
+ forall(0..Num,
+ Th=Rg_1+#*(Rg_2-Rg_1)/Num;
+ Out=append(Out,Ctr+ra*[cos(Th),sin(Th)]);
+ );
+ Th=(Rg_1+Rg_2)/2; //16.10.31from[moved]
+ tmp1=Ctr+Brat*ra*[cos(Th),sin(Th)];
+ tmp="Defvar("+Dq+Bpos+"="; //no ketjs
+ tmp=tmp+Textformat(tmp1,5)+Dq+")"; //no ketjs
+// tmp=Bpos+"="+Textformat(tmp1,5); ; //only ketjs
+ parse(tmp+";");//16.10.31to[moved]
+ if(length(Bname)>0,
+ parse(Bname);
+ );
+ if(Noflg<3,
+ if(Msg=="Y", //190206
+ println("generate anglemark "+name+" and "+Bpos);
+ );
+ tmp1=apply(Out,Pcrd(#));
+ tmp=name+"="+Textformat(tmp1,5)+";";
+ parse(tmp);
+ tmp=Textformat(plist,5); //no ketjs on
+ tmp1=substring(tmp,1,length(tmp)-1);
+ tmp=name+"=Anglemark("+tmp1+opstr+")";
+ GLIST=append(GLIST,tmp); //no ketjs off
+ );
+ if(Noflg<2,
+ if(isstring(Ltype),
+ if((Noflg==0)&(color!=KCOLOR), //180904 //no ketjs on
+ Texcom("{");Com2nd("Setcolor("+color+")");//180722
+ ); //no ketjs off
+ Ltype=Getlinestyle(text(Noflg)+Ltype,name);
+ if((Noflg==0)&(color!=KCOLOR), //180904 //no ketjs on
+ Texcom("}");//180722
+ ); //no ketjs off
+ ,
+ if(Noflg==1,Ltype=0);
+ );
+ GCLIST=append(GCLIST,[name,Ltype,opcindy]);
+ );
+ );
+ Out;
+);
+////%Anglemark end////
+
+////%Paramark start////
+Paramark(plist):=Paramark(plist,[]);
+Paramark(Arg1,Arg2):=( // 17.03.27 from
+ regional(nm,plist,options,tmp);
+ if(isstring(Arg1),
+ nm=Arg1;
+ plist=Arg2;
+ Paramark(nm,plist,[]);
+ ,
+ plist=Arg1;
+ options=Arg2;
+ tmp=Textformat(plist,5);
+ tmp=replace(tmp,",","");
+ nm=substring(tmp,1,length(tmp)-1);
+ Paramark(nm,plist,options);
+ );
+);// to
+Paramark(nm,plist,options):=(
+//help:Paramark([A,B,C],["E=\theta"]);
+//help:Paramark("1",[p1,p2,p3],["E=\theta"]);
+ regional(name,Out,pB,pA,pC,ra,sab,sac,ratio,opstr,Bname,Bpos,
+ Brat,tmp,tmp1,tmp2,Ltype,Noflg,eqL,realL,opcindy,color);
+ name="pm"+nm;
+ tmp=Divoptions(options);
+ Ltype=tmp_1;
+ Noflg=tmp_2;
+ color=tmp_(length(tmp)-2);
+ opstr=tmp_(length(tmp)-1);
+ opcindy=tmp_(length(tmp));
+ eqL=tmp_5;
+ realL=tmp_6;
+ ra=0.5;
+ Bname="";
+ Brat=1.2;
+ if(length(realL)>0,
+ tmp=realL_1;
+ ra=tmp*ra;
+ opstr=opstr+","+text(tmp);
+ );
+ forall(eqL,
+ tmp=Strsplit(#,"=");
+ tmp1=Toupper(substring(tmp_1,0,1));
+ if((tmp1=="L")%(tmp1=="E"),
+ if(tmp1=="L",Bname="Letter(");
+ if(tmp1=="E",Bname="Expr(");
+ Bname=Bname+Bpos+","+Dqq("c")+",";//16.10.29
+ tmp=tmp_2; //190524from
+ tmp1=Indexall(tmp,",");
+ if(length(tmp1)==0,
+ Bname=Bname+Dqq(tmp);
+ ,
+ if(length(tmp1)>1,
+ Brat=parse(substring(tmp,0,tmp1_1-1));
+ tmp=substring(tmp,tmp1_1,length(tmp));
+ tmp1=Indexall(tmp,",");
+ ,
+ if(substring(tmp,tmp1_1,tmp1_1+1)!="[",
+ Brat=parse(substring(tmp,0,tmp1_1-1));
+ tmp=substring(tmp,tmp1_1,length(tmp))+",[]";
+ tmp1=Indexall(tmp,",");
+ );
+ );
+ Bname=Bname+Dqq(substring(tmp,0,tmp1_1-1));
+ tmp=substring(tmp,tmp1_1+1,length(tmp)-1);
+ tmp=Strsplit(tmp,",");
+ tmp1=apply(tmp,Dqq(#));
+ Bname=Bname+","+text(tmp1);
+ );
+ Bname=Bname+");"; //190524to
+ );
+ if(tmp1=="M", //190206from
+ Msg=Toupper(substring(tmp_2,0,1));
+ ); //190206to
+ );
+ pB=Lcrd(plist_1); pA=Lcrd(plist_2); pC=Lcrd(plist_3);
+ Ctr=Lcrd(pA);
+ Out=[];
+ Out=append(Out,pA+ra*(pB-pA)/|pB-pA|);
+ Out=append(Out,pA+ra*(pB-pA)/|pB-pA|+ra*(pC-pA)/|pC-pA|);
+ Out=append(Out,pA+ra*(pC-pA)/|pC-pA|);
+ if(length(Bname)>0,
+ tmp1=pA+Brat*ra*(pB-pA)/|pB-pA|+Brat*ra*(pC-pA)/|pC-pA|;
+ tmp="Defvar("+Dq+Bpos+"="+Textformat(tmp1,5)+Dq+")";// no ketjs
+ tmp=Bpos+"="+Textformat(tmp1,5);// only ketjs
+ parse(tmp+";");
+ parse(Bname+";") //190415;
+ );
+ if(Noflg<3,
+ println("generate paramark "+name);
+ tmp1=apply(Out,Pcrd(#));
+ tmp=name+"="+Textformat(tmp1,5)+";"; //190415
+ parse(tmp);
+ tmp1=substring(Textformat(plist,5),1,length(Textformat(plist,5))-1); //no ketjs on
+ tmp=name+"=Paramark("+tmp1+opstr+")";
+ GLIST=append(GLIST,tmp); //no ketjs off
+ );
+ if(Noflg<2,
+ if(isstring(Ltype),
+ if((Noflg==0)&(color!=KCOLOR), //180904 //no ketjs on
+ Texcom("{");Com2nd("Setcolor("+color+")");//180722
+ ); //no ketjs off
+ Ltype=Getlinestyle(text(Noflg)+Ltype,name);
+ if((Noflg==0)&(color!=KCOLOR), //180904 //no ketjs on
+ Texcom("}");//180722
+ ); //no ketjs off
+ ,
+ if(Noflg==1,Ltype=0);
+ );
+ GCLIST=append(GCLIST,[name,Ltype,opcindy]);
+ );
+ Out;
+);
+////%Paramark end////
+
+////%Makebowdata start////
+Makebowdata(pA,pB,Hgt):=(
+ regional(angle,pB2,pH2,pC2,pC,tmp,Th1,Th2,ra,dMA);
+ angle=arctan2(pB-pA)+0;
+ pB2=Rotatepoint(pB,-angle,pA);
+ tmp=Lcrd(pA);
+ pH2=[(tmp_1+pB2_1)/2,tmp_2-Hgt];
+ dMA=|tmp-pB2|/2;
+ ra=(dMA^2+Hgt^2)/(2*Hgt);
+ pC2=[pH2_1,pB2_2+(ra-Hgt)];
+ pC=Rotatepoint(pC2,angle,pA);
+ Th1=arctan2(pA-pC2)+angle;
+ Th2=arctan2(pB2-pC2)+angle;
+ [pC,ra,Th1,Th2];
+);
+////%Makebowdata end////
+
+////%Bowdata start////
+Bowdata(plist):=Bowdata(plist,[]);
+Bowdata(plist,options):=(
+ regional(nm,tmp);
+ if(islist(plist), // 16.12.04from
+ tmp=Textformat(plist,5);
+ tmp=replace(tmp,",","");
+ nm=substring(tmp,1,length(tmp)-1);
+ Bowdata(nm,plist,options);
+ ,
+ nm=plist;
+ tmp=options;
+ Bowdata(nm,tmp,[]);
+ ); // 16.12.04until
+);
+Bowdata(nm,plist,options):=(
+//help:Bowdata([C,A],[2,1.2,"Expr=10","da"]);
+//help:Bowdata([A,B],["Expr=t0n3,a"]);
+//help:Bowdata([A,B],["Exprrot=t0n2r,a"]);
+ regional(name,Out,pB,pA,pC,ra,tmp,tmp1,tmp2,Ltype,eqL,realL,
+ Bname,Bpos,Th,Cut,Num,Hgt,opstr,opcindy,Ydata,pC,Msg,
+ Th1,Th2,Noflg,Bops,Bmov,Tmov,Nmov,rev,color);
+ name="bw"+nm;
+ tmp=Divoptions(options);
+ Ltype=tmp_1;
+ Noflg=tmp_2;
+ color=tmp_(length(tmp)-2);
+ opstr=tmp_(length(tmp)-1);
+ opcindy=tmp_(length(tmp));
+ eqL=tmp_5;
+ realL=tmp_6;
+ pA=Lcrd(plist_1); pB=Lcrd(plist_2);
+ Hgt=1/2*|pB-pA|*0.2;
+ Cut=0;
+ Num=24;
+ Bname="";
+ Msg="Y"; //190206
+ Tmov=0;//161101from
+ Nmov=0;
+ Bmov="";
+ rev=0;//16.11.01until
+ if(length(realL)>0,
+ Hgt=realL_1*Hgt; // 15.04.12
+ if(length(realL)>1,Cut=realL_2);
+ );
+ forall(eqL,
+ tmp=Strsplit(#,"=");
+ tmp1=Toupper(substring(tmp_1,0,1));
+ if(tmp1=="L",
+ if(indexof(#,"rot")>0,
+ Bname="Letterrot(";
+ ,
+ Bname="Letter(";
+ );
+ Bops=tmp_2;
+ );
+ if(tmp1=="E",
+ if(indexof(#,"rot")>0,
+ Bname="Exprrot(";
+ ,
+ Bname="Expr(";
+ );
+ Bops=tmp_2;
+ );
+ if(tmp1=="M", //190206from
+ Msg=Toupper(substring(tmp_2,0,1));
+ ); //190206to
+ );
+ Ydata=Makebowdata(pA,pB,Hgt);
+ pC=Ydata_1;
+ ra=Ydata_2;
+ Th=(Ydata_3+Ydata_4)*0.5;
+ BOWMIDDLE=[pC_1+ra*cos(Th),pC_2+ra*sin(Th)];
+ Defvar("md"+name,BOWMIDDLE); //190415
+ Bpos=Textformat(BOWMIDDLE,5); //190415
+ if(length(Bname)>0, //16.11.01from
+ tmp=indexof(Bops,",");
+ if(tmp>0,
+ tmp1=substring(Bops,0,tmp-1);
+ if(length(tmp1)>=4 & substring(tmp1,0,1)=="t" & indexof(tmp1,"n")>0,
+ Bmov=tmp1;
+ Bops=substring(Bops,tmp,length(Bops));
+ );
+ );
+ if(length(Bmov)>0,
+ tmp=indexof(Bmov,"t");
+ if(tmp>0,
+ tmp1=indexof(Bmov,"n");
+ Tmov=parse(substring(Bmov,tmp,tmp1-1));
+ tmp=indexof(Bmov,"r");
+ if(tmp>0,
+ Nmov=parse(substring(Bmov,tmp1,tmp-1));
+ rev=1;
+ ,
+ Nmov=parse(substring(Bmov,tmp1,length(Bmov)));
+ );
+ );
+ );
+ Bname=Bname+Bpos; //190415
+ if(abs(Tmov)+abs(Nmov)>0,
+ tmp=Pcrd(pA)-Pcrd(pB);
+ tmp1=1/Norm(tmp)*tmp;
+ tmp2=[-tmp1_2,tmp1_1];
+ tmp=MARKLEN*(Tmov*tmp1+Nmov*tmp2);
+ tmp=LLcrd(tmp);
+ Bname=Bname+"+"+Textformat(tmp,5);
+ );
+ Bname=Bname+",";
+ if(indexof(Bname,"rot")>0,
+ if(rev==1,tmp=pB-pA,tmp=pA-pB);
+ Bname=Bname+Textformat(tmp,5)+",";
+ ,
+ Bname=Bname+Dq+"c"+Dq+",";
+ );
+ Bname=Bname+Dqq(Bops)+");"; //190415
+ parse(Bname);
+ );//161101to
+ if(Cut==0,
+ Th1=Ydata_3;
+ Th2=Ydata_4;
+ Out=[];
+ forall(0..Num,
+ tmp=Th1+#*(Th2-Th1)/Num;
+ Out=append(Out,pC+ra*[cos(tmp),sin(tmp)]);
+ );
+ ,
+ Th1=Ydata_3;
+ Th2=Th-Cut/(2*ra);
+ tmp1=[];
+ forall(0..Num/2,
+ tmp=Th1+#*(Th2-Th1)/(Num/2);
+ tmp1=append(tmp1,pC+ra*[cos(tmp),sin(tmp)]);
+ );
+ Th1=Th+Cut/(2*ra);
+ Th2=Ydata_4;
+ tmp2=[];
+ forall(0..Num/2,
+ tmp=Th1+#*(Th2-Th1)/(Num/2);
+ tmp2=append(tmp2,pC+ra*[cos(tmp),sin(tmp)]);
+ );
+ Out=[tmp1,tmp2];
+ );
+ if(Noflg<3,
+ if(Msg=="Y", //190206
+ println("generate bowdata "+name+" and "+Bpos);//16.10.31
+ );
+ if(Measuredepth(Out)==1,Out=[Out]);
+ tmp1=[];
+ forall(Out,tmp2,
+ tmp=apply(tmp2,Pcrd(#));
+ tmp1=append(tmp1,tmp);
+ );
+ tmp=name+"="+Textformat(tmp1,5)+";";
+ parse(tmp);
+ tmp1=substring(Textformat(plist,5),1,length(Textformat(plist,5))-1); //no ketjs on
+ tmp=name+"=Bowdata("+tmp1+opstr+")";
+ GLIST=append(GLIST,tmp); //no ketjs off
+ );
+ if(Noflg<2,
+ if(isstring(Ltype),
+ if((Noflg==0)&(color!=KCOLOR), //180904 //no ketjs on
+ Texcom("{");Com2nd("Setcolor("+color+")");//180722
+ ); //no ketjs off
+ Ltype=Getlinestyle(text(Noflg)+Ltype,name);
+ if((Noflg==0)&(color!=KCOLOR), //180904 //no ketjs on
+ Texcom("}");//180722
+ ); //no ketjs off
+ ,
+ if(Noflg==1,Ltype=0);
+ );
+ GCLIST=append(GCLIST,[name,Ltype,opcindy]);
+ );
+);
+////%Bowdata end////
+
+////%Bowname start////
+Bowname(str):=Bowname("c",str);
+Bowname(dir,str):=(
+ Expr([BOWMIDDLE,dir,str]);
+);
+////%Bowname end////
+
+////%Bownamerot start////
+Bownamerot(bwdata,str):=Bownamerot(bwdata,0,0,str,1);
+Bownamerot(bwdata,str,updown):=Bownamerot(bwdata,0,0,str,updown);
+Bownamerot(bwdata,tmov,nmov,str):=Bownamerot(bwdata,tmov,nmov,str,1);
+Bownamerot(bwdata,tmov,nmov,str,updown):=(
+ regional(bdata,tmp);
+ tmp=Measuredepth(bwdata);
+ if(tmp==1,bdata=[bwdata],bdata=bwdata);
+ if(length(bdata)>1,
+ tmp=Ptend(bdata_2)-Ptstart(bdata_1);
+ ,
+ tmp=Ptend(bdata_1)-Ptstart(bdata_1);
+ );
+ if(updown<0,tmp=-tmp);
+ Exprrot(BOWMIDDLE,tmp,tmov,nmov,str);
+);
+////%Bownamerot end////
+
+////%Deqdata start////
+Deqdata(deq,rng,initt,initf,Num):=( //17.10.04
+//help:Deqdata("[x1,...xn]`=[f1,...fn]","t=[0,20]",0,[...],50);
+ regional(Eps,Inf,tname,Xname,func,t1,t2,dt,tt,X0,flg,
+ kl1,kl2,kl3,kl4,pdL,tmp,tmp1,tmp2);
+ Eps=10^(-3);
+ Inf=10^3;
+ tmp=tokenize(deq,"=");
+ tmp1=replace(tmp_1,"`",""); tmp1=replace(tmp1,"'","");//190410
+ tmp1=substring(tmp1,1,length(tmp1)-1);
+ Xname=tokenize(tmp1,",");
+ func=tmp_2;
+ forall(1..(length(Xname)),
+ func=replace(func,Xname_#,"X_"+text(#));
+ );
+ tmp=tokenize(rng,"=");
+ tname=tmp_1;
+ tmp=parse(tmp_2);
+ t1=tmp_1;
+ t2=tmp_2;
+ tmp="funP("+tname+",X):="+func+";";
+ parse(tmp);
+ tmp="funN("+tname+",X):=-"+func+";";
+ parse(tmp);
+ dt=(t2-t1)/Num;
+ tt=initt;
+ X0=Lcrd(initf);
+ pdL=[flatten([tt,X0])];
+ flg=0;
+ forall(1..(round((t2-initt)/dt)), //190523
+ if(flg==0,
+ kl1=dt*funP(tt,X0);
+ kl2=dt*funP(tt+dt/2,X0+kl1/2);
+ kl3=dt*funP(tt+dt/2,X0+kl2/2);
+ kl4=dt*funP(tt+dt,X0+kl3);
+ X0=X0+(kl1+2*kl2+2*kl3+kl4)/6;
+ tt=initt+#*dt;
+ tmp=flatten([tt,X0]);
+ pdL=append(pdL,tmp);
+ if(|tmp|>Inf,flg=1);
+ );
+ );
+ tt=initt;
+ X0=Lcrd(initf);
+ flg=0;
+ forall(1..(round((initt-t1)/dt)), //190523
+ if(flg==0,
+ kl1=dt*funN(tt,X0);
+ kl2=dt*funN(tt+dt/2,X0+kl1/2);
+ kl3=dt*funN(tt+dt/2,X0+kl2/2);
+ kl4=dt*funN(tt+dt,X0+kl3);
+ X0=X0+(kl1+2*kl2+2*kl3+kl4)/6;
+ tt=initt-#*dt;
+ tmp=flatten([tt,X0]);
+ pdL=prepend(tmp,pdL);
+ if(|tmp1|>Inf,flg=1);
+ );
+ );
+ pdL;
+);
+////%Deqdata end////
+
+////%Deqplot start////
+Deqplot(nm,deq,rng,initf):=Deqplot(nm,deq,rng,Lcrd(initf)_1,initf,[]);
+Deqplot(nm,deq,rng,Arg1,Arg2):=(
+ regional(initt,initf,options);
+ if(isreal(Arg1) & !islist(Arg1),
+ initt=Arg1;
+ initf=Arg2;
+ options=[];
+ ,
+ initf=Lcrd(Arg1);
+ initt=initf_1;
+ options=Arg2;
+ );
+ Deqplot(nm,deq,rng,initt,initf,options);
+);
+Deqplot(nm,deqorg,rngorg,initt,initf,options):=( //17.10.06
+//help:Deqplot("2","y'=y*(1-y)","x",0, 0.5,["Num=100"]);
+//help:Deqplot("1","y''=-y","x",0, [1,0]);
+//help:Deqplot("3","[x,y]'=[x*(1-y),0.3*y*(x-1)]","t=[0,20]",0,[1,0.5]);
+ regional(deq,rng,Ltype,Noflg,eqL,opcindy,Num,name,nn,pdL,phase,
+ sel,tmp,tmp1,tmp2,tmp3,color);
+ name="de"+nm;
+ tmp=Divoptions(options);
+ Ltype=tmp_1;
+ Noflg=tmp_2;
+ eqL=tmp_5;
+ color=tmp_(length(tmp)-2);
+ opcindy=tmp_(length(tmp));
+ Num=50;
+ forall(eqL,
+ tmp=indexof(#,"=");
+ tmp2=substring(#,0,1);
+ tmp2=Toupper(tmp2);
+ tmp1=substring(#,tmp,length(#));
+ if(Toupper(substring(#,0,1))=="N",
+ Num=parse(tmp1);
+ );
+ );
+ rng=rngorg;
+ if(indexof(rng,"=")==0,
+ rng=rng+"="+Textformat([XMIN,XMAX],6);
+ );
+ deq=replace(deqorg,unicode("2018"),"`"); //190296//0416
+ deq=replace(deq,"'","`"); //180527
+ tmp3=indexof(deq,"=");
+ tmp1=substring(deq,0,tmp3-1);
+ tmp2=substring(deq,tmp3,length(deq));
+ if(indexof(tmp1,"[")==0,
+ phase=0;
+ sel=[1,2];
+ ,
+ phase=1;
+ sel=[2,3];
+ );
+ nn=length(Indexall(tmp1,"`"));
+ if(nn==0, //190211from
+ println(" Lhs of equation has no single/back quotation "+tmp1);
+ );
+ if(nn>0,
+ tmp=Indexall(tmp1,"`");
+ if(tmp_(length(tmp))!=tmp3-1,
+ nn=0;
+ ,
+ forall(reverse(2..(length(tmp))),
+ if((nn>0)&(!contains(tmp,tmp_#-1)),
+ nn=0;
+ );
+ );
+ );
+ if(nn==0,
+ println(" Lhs of equation is not correct");
+ );
+ ); //190211to
+ if(nn==1,
+ if(indexof(tmp1,"[")==0,
+ tmp1="["+replace(tmp1,"`","]`");
+ deq=tmp1+"="+tmp2;
+ );
+ );
+ if(nn>1,
+ tmp=indexof(tmp1,"`");
+ tmp1=substring(tmp1,0,tmp-1);
+ deq="[";
+ forall(1..nn,
+ deq=deq+tmp1+"N"+text(#)+",";
+ );
+ deq=substring(deq,0,length(deq)-1)+"]`=[";
+ forall(1..(nn-1),
+ deq=deq+tmp1+"N"+text(#+1)+",";
+ );
+ forall(reverse(1..(nn)),jj,
+ tmp=tmp1;
+ forall(1..jj,
+ tmp=tmp+"`";
+ tmp2=replace(tmp2,tmp,tmp1+"N"+text(#+1));
+ );
+ );
+ tmp2=tmp2+"]";
+ forall(1..(length(tmp2)-1),
+ tmp=substring(tmp2,#-1,#);
+ if(tmp!=tmp1,
+ deq=deq+tmp;
+ ,
+ tmp=substring(tmp2,#,#+1);
+ if(tmp=="N",
+ deq=deq+tmp1;
+ ,
+ deq=deq+tmp1+"N1"
+ );
+ );
+ );
+ deq=deq+"]";
+ );
+ if((nn>0)&(Noflg<3), //190211
+ pdL=Deqdata(deq,rng,initt,initf,Num);
+ if(phase==1,
+ pdL=apply(pdL,#_(2..3));
+ );
+ tmp1=apply(pdL,Pcrd(#));
+ tmp=name+"="+Textformat(tmp1,5)+";"; //190415
+ parse(tmp);
+ );
+ if((nn>0)&(Noflg<1), //190211 //no ketjs on
+ tmp=Assign(deq);
+ tmp=replace(deq,"'","`");
+ tmp=name+"=Deqplot('"+tmp+"','"+rng+"',";
+ tmp=tmp+format(initt,6)+","+Textformat(initf,6);
+ tmp=tmp+","+text(sel)+",'Num="+text(Num)+"')";
+ tmp=RSform(tmp);
+ GLIST=append(GLIST,tmp);
+ ); //no ketjs off
+ if((nn>0)&(Noflg<2), //190211
+ if(isstring(Ltype),
+ if((Noflg==0)&(color!=KCOLOR), //180904 //no ketjs on
+ Texcom("{");Com2nd("Setcolor("+color+")");//180722
+ ); //no ketjs off
+ Ltype=Getlinestyle(text(Noflg)+Ltype,name);
+ if((Noflg==0)&(color!=KCOLOR), //180904 //no ketjs on
+ Texcom("}");//180722
+ ); //no ketjs off
+ ,
+ if(Noflg==1,Ltype=0);
+ );
+ GCLIST=append(GCLIST,[name,Ltype,opcindy]);
+ );
+);
+////%Deqplot end////
+
+////////// old enclosing ///////////////
+
+Enclosing(nm,plist):=EnclosingS(nm,plist);
+Enclosing(nm,plist,options):=EnclosingS(nm,plist,options);
+EnclosingS(nm,plist):=EnclosingS(nm,plist,[]);
+EnclosingS(nm,plist,options):=(
+// help:Enclosing("1",["sc2","crAB","sc2","Invert(sc1)"],[pt,"dr"]);
+ regional(name,AnsL,Start,Eps,EEps,S,Flg,Fdata,Gdata,KL,pt,qt,color
+ t1,t2,t3,ii,nn,tmp,tmp1,tmp2,Ltype,Noflg,realL,eqL,opstr,opcindy);
+ name="en"+nm;
+ tmp=Divoptions(options);
+ Ltype=tmp_1;
+ Noflg=tmp_2;
+ eqL=tmp_5;
+ realL=tmp_6;
+ color=tmp_(length(tmp)-2);
+ opstr=tmp_(length(tmp)-1);
+ opcindy=tmp_(length(tmp));
+ Eps=10^(-5); // 16.12.05
+ EEps=0.05;
+ Start=[];
+ Flg=0;
+ forall(realL,
+ if(islist(#) % ispoint(#),
+ Start=Lcrd(#); // 15.09.12
+ ,
+ Flg=Flg+1;
+ if(Flg==1,Eps=#);
+ if(Flg==2,EEps=#);
+ );
+ );
+// tmp1=concat([Eps,EEps],eqL); // 15.04.06
+ Fdata=plist_1;
+ Gdata=plist_(length(plist));
+ KL=Intersectcrvspp(Fdata,Gdata);
+ if(length(KL)==1,
+ pt=KL_1_1;
+ t1=KL_1_2;
+ );
+ if(length(KL)==0,
+ if(Numptcrv(Fdata)>Numptcrv(Gdata),
+ tmp=Nearestpt(Fdata,Gdata);
+ pt=tmp_1;
+ t1=tmp_2;
+ ,
+ tmp=Nearestpt(Gdata,Fdata);
+ pt=tmp_3;
+ t1=tmp_4;
+ );
+ );
+ if(length(KL)>1,
+ if(Start==[],
+ err("No Start Point");
+ ,
+ pt=KL_1_1;
+ t1=KL_1_2;
+ tmp=Norm(pt-Start);
+ forall(2..(length(KL)),ii, // 15.04.20
+ tmp1=KL_ii_1;
+ tmp2=Norm(tmp1-Start); // 15.04.20
+ if(tmp2<tmp,
+ pt=tmp1;
+ t1=KL_ii_2;
+ tmp=tmp2;
+ );
+ );
+ );
+ );
+// pt=Pcrd(pt); // 15.09.12
+ Start=pt;
+ AnsL=[];
+ forall(1..(length(plist)),nn,
+ Fdata=plist_nn;
+ if(nn>1, pt=qt);
+ if(nn==length(plist),
+ qt=Start;
+ ,
+ Flg=0;
+ Gdata=plist_(nn+1);
+// tmp1=concat([Eps,EEps],eqL); // 15.04.06
+ KL=Intersectcrvspp(Gdata,Fdata);
+ if(length(KL)==1,
+ tmp=KL_1;
+ qt=KL_1_1;
+ t3=KL_1_2;
+ Flg=10;
+ );
+ if(length(KL)==0,Flg=1);
+ if(length(KL)>1,
+ tmp1=KL_1_1;
+ tmp2=KL_2_1;
+ tmp=|tmp1-tmp2|;
+ if(tmp<Eps*10, Flg=1);
+ );
+ if(Flg==1,
+ if(Numptcrv(Fdata)>Numptcrv(Gdata),
+ tmp=Nearestpt(Fdata,Gdata);
+ qt=tmp_1;
+ t3=tmp_4;
+ Flg=10;
+ ,
+ tmp=Nearestpt(Gdata,Fdata);
+ qt=tmp_3;
+ t3=tmp_2;
+ Flg=10;
+ );
+ );
+ if(Flg<10,
+ t2=10^6; //%inf;
+ forall(1..(length(KL)),ii,
+ tmp1=KL_ii_1;
+ tmp=KL_ii_3;
+ tmp2=Paramoncurve(tmp1,tmp,Fdata);
+ tmp3=KL_ii_2;
+ if(tmp2>t1+Eps & tmp2<t2+Eps,
+ qt=tmp1;
+ t2=tmp2;
+ t3=tmp3;
+ );
+ );
+ );
+ );
+ tmp=Partcrv("",pt,qt,Fdata,["nodata"]);
+ t1=t3;
+ if(nn==1,
+ AnsL=tmp;
+ ,
+ AnsL=concat(AnsL,tmp_(2..(length(tmp))));
+ );
+ );
+ AnsL=apply(AnsL,Pcrd(#)); // 15.09.12
+ AnsL_(length(AnsL))=AnsL_1;//16.10.20
+ if(Noflg<3,
+ println("generate Enclosing "+name);
+ tmp=name+"="+Textformat(AnsL,5)+";";
+ parse(tmp);
+ tmp=name+"=Enclosing(";//16.11.07from //no ketjs on
+ tmp1="list"+PaO();
+ forall(plist,
+ tmp1=tmp1+#+",";
+ );
+ tmp=tmp+substring(tmp1,0,length(tmp1)-1)+")"+opstr+")";
+ GLIST=append(GLIST,tmp);//16.11.07to //no ketjs off
+ );
+ if(Noflg<2,
+ if(isstring(Ltype),
+ if((Noflg==0)&(color!=KCOLOR), //180904 //no ketjs on
+ Texcom("{");Com2nd("Setcolor("+color+")");//180722
+ ); //no ketjs off
+ Ltype=Getlinestyle(text(Noflg)+Ltype,name);
+ if((Noflg==0)&(color!=KCOLOR), //180904 //no ketjs on
+ Texcom("}");//180722
+ ); //no ketjs off
+ ,
+ if(Noflg==1,Ltype=0);
+ );
+ GCLIST=append(GCLIST,[name,Ltype,opcindy]);
+ );
+ tmp=apply(AnsL,LLcrd(#));//16.10.20
+ tmp;
+);
+
+/////////// new enclosing ///////////
+
+////%Enclosing start////
+Enclosing(nm,plist):=Enclosing2(nm,plist,[]);//180706[2lines]
+Enclosing(nm,plistorg,options):=Enclosing2(nm,plistorg,options);
+Enclosing2(nm,plist):=Enclosing2(nm,plist,[]);
+Enclosing2(nm,plistorg,options):=(
+//help:Enclosing("1",["sg2","gr1","Invert(sg2)"]);
+//help:Enclosing(options=[startpoint,epspara(1)]);
+ regional(name,plist,AnsL,Start,Eps,Eps1,Eps2,flg,Fdata,Gdata,KL,
+ t1,t2,tst,ss,ii,nn,nxtno,Ltype,Noflg,realL,eqL,opstr,opcindy,
+ tmp,tmp1,tmp2,color,epspara,p1,p2);
+ name="en"+nm;
+ plist=plistorg;
+ tmp=Divoptions(options);
+ Ltype=tmp_1;
+ Noflg=tmp_2;
+ eqL=tmp_5;
+ realL=tmp_6;
+ color=tmp_(length(tmp)-2);
+ opstr=tmp_(length(tmp)-1);
+ opcindy=tmp_(length(tmp));
+ Eps=10^(-5); // 16.12.05
+ epspara=1; //180707
+ Eps1=0.01;
+ Eps2=0.1;
+ Start=[];
+ flg=0;
+ forall(realL,
+ if(isList(#) % ispoint(#),
+ Start=Lcrd(#); // 18.02.02
+ ,
+ if(flg==0,epspara=#);//180707
+ if(flg==1,Eps1=#);
+ if(flg==2,Eps2=#);
+ flg=flg+1;
+ );
+ );
+ flg=0;
+ AnsL=[];
+ if(length(plist)==1,
+ Fdata=parse(plist_1);
+ tmp1=Fdata_1;
+ tmp2=Fdata_(length(Fdata));
+ if(|tmp1-tmp2|<Eps,
+ AnsL=Fdata;
+ ,
+ AnsL=append(Fdata,tmp1);
+ );
+ flg=1;
+ );
+ if(flg==0,
+ Fdata=plist_1;
+ Gdata=plist_(length(plist));
+ KL=Intersectcurvespp(Fdata,Gdata);
+ if(length(KL)==0,
+ tmp=parse(Gdata);
+ tmp1=LLcrd(Op(length(tmp),tmp)); //18.02.02from
+ tmp=parse(Fdata);
+ tmp2=LLcrd(Op(1,tmp));
+ tmp=Listplot(name,[tmp1,tmp2],["nodisp"]);
+ plist=append(plist,"sg"+name);
+ Start=tmp2;
+ tst=1; //18.02.02to
+ p1=Start;
+ ,
+ if(length(KL)==1,
+ tst=KL_1_2;
+ Start=Pointoncurve(tst,Fdata);
+ );
+ if(length(KL)>1,
+ KL=sort(KL,[#_2]);
+ if(Start==[],
+ tst=KL_1_2;
+ Start=Pointoncurve(tst,Fdata);
+ ,
+ tmp=apply(KL,|#_1-Start|);
+ tmp=min(tmp);
+ tmp1=select(KL,|#_1-Start|<tmp+Eps1);//180718
+ tst=tmp1_1_2;
+ Start=Pointoncurve(tst,Fdata);
+ );
+ );
+ );
+ );
+ if(flg==0,
+ t1=tst;
+ p1=Pointoncurve(t1,Fdata); //180713
+ println("Start point of enclosing is "+text(Start));
+ forall(1..(length(plist)),nn,
+ Fdata=plist_nn;
+ if(nn==length(plist),nxtno=1,nxtno=nn+1);
+ Gdata=plist_nxtno;
+ KL=Intersectcurvespp(Fdata,Gdata);
+ if(length(KL)==0,
+ tmp1=parse(Fdata); //18.02.02from
+ tmp2=parse(Gdata);
+ tmp2=Prepend(Op(length(tmp1),tmp),tmp2);
+ Gdata=replace(Gdata,"(","");
+ Gdata=replace(Gdata,")","");
+ tmp=Gdata+"="+Textformat(tmp2,6)+";"; //190415
+ parse(tmp);
+ plist_nxtno=Gdata;
+ t2=Length(tmp1);
+ p2=Pointoncurve(t2,Fdata); //180713
+ ss=1; //18.02.02to
+ ,
+ KL=sort(KL,[#_2]);//180706
+ tmp=parse(Fdata);
+ tmp1=t1+epspara/50*length(tmp);
+// KL=select(KL,#_2>t1+epspara/50*length(tmp)); //180707
+ KL=select(KL,(#_2>tmp1)%((#_2>t1)&(|#_1-p1|>Eps1))); //180713,16
+ t2=KL_1_2;
+ ss=KL_1_3;
+ if(abs(t2-t1)<Eps,//180707
+ if(length(KL)>1,
+ t2=KL_2_2;
+ ss=KL_2_3;
+ ,
+ println(text(nn)+" and "+text(nxtno)+" not intersect");
+ flg=1;
+ );
+ );
+ );
+ if(flg==0,
+ tmp=Partcrv("",t1,t2,Fdata,["nodata"]);
+ if(nn==1,
+ AnsL=tmp;
+ ,
+ AnsL=concat(AnsL,tmp_(2..(length(tmp))));
+ );
+ );
+ t1=ss;//180706
+ p1=Pointoncurve(t1,Gdata); //180713
+ );
+ );
+ if(flg==0,
+ AnsL=apply(AnsL,Pcrd(#));
+ );
+ if(Noflg<3,
+ println("generate Enclosing "+name);
+ tmp=name+"="+Textformat(AnsL,5)+";"; //190415
+ parse(tmp);
+ tmp=name+"=Enclosing2(";//16.11.07from
+ tmp1="list"+PaO();
+ forall(plistorg, //18.02.02
+ tmp1=tmp1+#+",";
+ );
+ tmp=tmp+substring(tmp1,0,length(tmp1)-1)+")";//18.0706from //no ketjs on
+ if(length(Start)>0,tmp=tmp+","+Textformat(Start,6));
+ tmp=tmp+","+text(epspara)+")";//18.0706to,180707
+ GLIST=append(GLIST,tmp);//16.11.07to //no ketjs off
+ );
+ if(Noflg<2,
+ if(isstring(Ltype),
+ if((Noflg==0)&(color!=KCOLOR), //180904 //no ketjs on
+ Texcom("{");Com2nd("Setcolor("+color+")");//180722
+ ); //no ketjs off
+ Ltype=Getlinestyle(text(Noflg)+Ltype,name);
+ if((Noflg==0)&(color!=KCOLOR), //180904 //no ketjs on
+ Texcom("}");//180722
+ ); //no ketjs off
+ ,
+ if(Noflg==1,Ltype=0);
+ );
+ GCLIST=append(GCLIST,[name,Ltype,opcindy]);
+ );
+ tmp=apply(AnsL,LLcrd(#));//16.10.20
+ tmp;
+);
+////%Enclosing end////
+
+/////////// end of new enclosing ///////////
+
+/////////// new Hatchdata(cindy) ///////////
+
+////%Makehatch start////
+Makehatch(iolistorg,pt,vec,bdylist):=(
+ regional(Eps,iolist,sg,bdy,out,nb,tenL,ns,ne,ioL,
+ ii,jj,kk,nvec,nbdy,sgn1,sgn2,flg,rmL,p0,p1,p2,pL,
+ Scalebkup,tmp,tmp1,tmp2);
+ Eps=10^(-5);
+ nvec=[-vec_2,vec_1];
+ nvec=nvec/|nvec|;
+ if(!islist(iolistorg),iolist=[iolistorg],iolist=iolistorg);
+ forall(1..(length(iolist)),
+ tmp=replace(iolist_#,"i","1,");
+ tmp=replace(tmp,"o","0,");
+ tmp="["+substring(tmp,0,length(tmp)-1)+"]";
+ iolist_#=parse(tmp);
+ );
+ Scalebkup=[SCALEX,SCALEY];//181020[2lines]
+ SCALEX=1;
+ SCALEY=1;
+ sg=Lineplot("",[pt,pt+vec],["nodata"]);
+ nb=length(bdylist);
+ if(nb>0,
+ tenL=[];
+ forall(1..nb,ii,
+ rmL=[];
+ bdy=bdylist_ii;
+ nbdy=length(bdy)-1;
+ pL=[];
+ forall(1..nbdy,jj,
+ p1=bdy_jj;
+ p2=bdy_(mod(jj+1-1,nbdy)+1);
+ tmp=Intersectseg(sg,[p1,p2],Eps);
+ if(abs(tmp_1)<Eps, //18.02.01
+ p0=tmp_2; t=tmp_3; s=tmp_4;
+ flg=0; //181003from
+ forall(pL,
+ if(flg==0,
+ if(Norm(#_1-p0)<Eps,
+ flg=1;
+ );
+ );
+ );
+ if(flg==0,
+ pL=append(pL,[p0,t,s,ii]);
+ ); //181003to
+ );
+ );
+ if(length(pL)>0,
+ pL=sort(pL,[#_2]);
+ pL=apply(1..(length(pL)),append(pL_#,mod(#,2)));
+ tenL=concat(tenL,pL);
+ );
+ );
+ tenL=sort(tenL,[#_2]);
+ if(length(tenL)>0, //180619from
+ tmp1=tenL; tenL=[tmp1_1];
+ forall(2..(length(tmp1)),ii, //180717from
+ tmp=tmp1_ii;
+ flg=0;
+ forall(tenL,
+ if((Norm(tmp_1-#_1)<Eps1)&(tmp_4==#_4),
+ flg=1;
+ );
+ );
+ if(flg==0,
+ tenL=append(tenL,tmp);
+ );
+ );//180717to
+ ); //180619to
+ ioL=apply(1..nb,0);
+ ns=1;
+ ne=length(tenL);
+ if(ne>0,tmp=tenL_1_1,tmp=sg_2);
+ if(|sg_1-tmp|>Eps,
+ tmp=[sg_1,-1,1,ioL];
+ tenL=prepend(tmp,tenL);
+ ns=ns+1;
+ ne=ne+1;
+ );
+ if(|sg_2-tenL_(length(tenL))_1|>Eps,
+ tmp=[sg_2,-1,2,ioL];
+ tenL=append(tenL,tmp);
+ );
+ forall(ns..(ne-1),ii, //180619 ne=>ne-1
+ tmp=tenL_ii;
+ tmp1=tmp_4;
+ tmp2=tmp_5;
+ ioL_tmp1=tmp2;
+ tmp=[tmp_1,tmp_2,tmp_4,ioL];
+ tenL_ii=tmp;
+ );
+ out=[];
+ forall(1..(length(tenL)-1),ii,
+ tmp1=tenL_ii;
+ if(contains(iolist,tmp1_4),
+ tmp2=tenL_(ii+1);
+ tmp=Listplot("",[tmp1_1,tmp2_1],["nodata"]);
+ out=append(out,tmp);
+ );
+ );
+ );
+ SCALEX=Scalebkup_1; //181020
+ SCALEY=Scalebkup_2;
+ out;
+);
+////%Makehatch end////
+
+////%Anyselected start////
+Anyselected(ptL):=(
+ regional(tmp,out);
+ out=false;
+ forall(ptL,
+ if(isstring(#),tmp=parse(#),tmp=#);
+ out=(out)%(isselected(tmp));
+ );
+ out;
+);
+////%Anyselected end////
+
+////%Hatchdata start////
+Hatchdata(nm,iostr,bdylist):=Hatchdatacindy(nm,iostr,bdylist,[]);//180619
+Hatchdata(nm,iostr,bdylist,optionsorg):=( //181003from
+ regional(options,tmp,tmp1,tmp2,eqL,strL,chkL,outflg);
+ options=optionsorg;
+ tmp=Divoptions(options);
+ eqL=tmp_5;
+ strL=tmp_7;
+ outflg=0;
+ forall(eqL,
+ tmp=Strsplit(#,"=");
+ tmp1=Toupper(tmp_1);
+ if(substring(tmp1,0,1)=="O",
+ tmp2=tmp_2;
+ if(tmp2!="n",
+ outflg=1;
+ option=remove(options,[#]);
+ if((tmp2=="m")%(tmp2=="r"),
+ options=append(options,tmp2);;
+ );
+ );
+ );
+ );
+ if(outflg==0,
+ options=remove(options,strL);
+ Hatchdatacindy(nm,iostr,bdylist,options);
+ ,
+ HatchdataR(nm,iostr,bdylist,options);
+ );
+); //181003to
+Hatchdatacindy(nm,iostr,bdylist):=Hatchdata(nm,iostr,bdylist,[]);
+Hatchdatacindy(nm,iostr,bdylistorg,optionsorg):=(
+ //help:Hatchdata("1",["ii"],[["ln1","Invert(gr1)"],["gr2","n"]]);
+//help:Hatchdata(options=["Not=pointlist","File=y(/m/n)","Max=50","Check=",angle,width]);
+ regional(name,bdylist,bdynameL,bname,Ltype,Noflg,opstr,opcindy,reL,
+ options,eqL,maxnum,startP,angle,interval,vec,nvec,ctr,pt,kk,delta,sha,AnsL,
+ color,tmp,tmp1,tmp2,tmp3,namep,x1,y1,x2,y2,p1,p2, //180717
+ fname,fileflg,mkflg,vaL,pL,nL,nn,str,is,ie); //181102
+ name="ha"+nm;
+ fname=Fhead+name+".txt";
+ bdylist=[];
+ bdynameL=[];
+ forall(1..(length(bdylistorg)),kk,
+ tmp1=bdylistorg_kk;
+ if(length(tmp1)==1,
+ bname=tmp1_1;
+ ,
+ tmp=tmp1_(length(tmp1));
+ if(contains(["n","s","e","w"],tmp),
+ namep=tmp1_1;//180717from
+ tmp2=parse(namep);
+ if(substring(namep,0,2)=="ln", //180717from
+ if(contains(["n","s"],tmp),
+ x1=tmp2_1_1; y1=tmp2_1_2; x2=tmp2_2_1; y2=tmp2_2_2;
+ p1=[NE.x,(y2-y1)/(x2-x1)*(NE.x-x1)+y1];
+ p2=[SW.x,(y2-y1)/(x2-x1)*(SW.x-x1)+y1];
+ Listplot(name+text(kk),[p1,p2],["nodisp"]);
+ namep="sg"+name+text(kk);
+ tmp2=parse(namep);
+ );
+ if(contains(["e","w"],tmp),
+ x1=tmp2_1_1; y1=tmp2_1_2; x2=tmp2_2_1; y2=tmp2_2_2;
+ p1=[(x2-x1)/(y2-y1)*(NE.y-y1)+x1,NE.y];
+ p2=[(x2-x1)/(y2-y1)*(SW.y-y1)+x1,SW.y];
+ Listplot(name+text(kk),[p1,p2],["nodisp"]);
+ namep="sg"+name+text(kk);
+ tmp2=parse(namep);
+ );
+ );//180717to
+ if(tmp=="s",
+ Listplot(name,[LLcrd(tmp2_1),[tmp2_1_1,2*YMIN-YMAX], //180717[2lines]
+ [tmp2_(length(tmp2))_1,2*YMIN-YMAX],LLcrd(tmp2_(length(tmp2)))],
+ ["nodisp"]);
+ Joincrvs(text(kk)+name,[namep,"sg"+name],["nodisp"]);//180717
+ bname="join"+text(kk)+name;
+ );
+ if(tmp=="n",
+ Listplot(name,[LLcrd(tmp2_1),[tmp2_1_1,2*YMAX-YMIN], //180717[2lines]
+ [tmp2_(length(tmp2))_1,2*YMAX-YMIN],LLcrd(tmp2_(length(tmp2)))],
+ ["nodisp"]);
+ Joincrvs(text(kk)+name,[namep,"sg"+name],["nodisp"]);
+ bname="join"+text(kk)+name;
+ );
+ if(tmp=="e",
+ Listplot(name,apply([tmp2_1,[XMAX,tmp2_1_2],
+ [XMAX,tmp2_(length(tmp2))_2],tmp2_(length(tmp2))],LLcrd(#)),["nodisp"]);
+ Joincrvs(text(kk)+name,[namep,"sg"+name],["nodisp"]);//180717
+ bname="join"+text(kk)+name;
+ );
+ if(tmp=="w",
+ Listplot(name,apply( [tmp2_1,[XMIN,tmp2_1_2],
+ [XMIN,tmp2_(length(tmp2))_2],tmp2_(length(tmp2))],LLcrd(#)),["nodisp"]);
+ Joincrvs(text(kk)+name,[namep,"sg"+name],["nodisp"]);//180717
+ bname="join"+text(kk)+name;
+ );
+ ,
+ Enclosing2(text(kk)+name,tmp,["nodisp"]);//180619[2lines]
+ bname="en"+text(kk)+name;
+ );
+ );
+ bdylist=append(bdylist,parse(bname));
+ bdynameL=append(bdynameL,bname);
+ );
+ options=optionsorg;
+ tmp=Divoptions(options);
+ Ltype=tmp_1;
+ Noflg=tmp_2;
+ eqL=tmp_5;
+ reL=tmp_6;
+ color=tmp_(length(tmp)-2);
+ opstr=tmp_(length(tmp)-1);
+ opcindy=tmp_(length(tmp));
+ angle=45;
+// interval=0.125*1000/2.54/MilliIn;
+ interval=0.25*1000/2.54/MilliIn; //180706
+ startP=[(XMIN+XMAX)/2, (YMIN+YMAX)/2];
+ maxnum=[50,0]; //181109changed [first,second]
+ fileflg="N";//181102from
+ mkflg=1;
+ chkL=[]; //181109
+ forall(eqL,
+ tmp=Strsplit(#,"=");
+ tmp1=Toupper(substring(tmp_1,0,1));
+ if(tmp1=="M",
+ maxnum=parse(tmp_2);
+ if(!islist(maxnum),
+ maxnum=[maxnum,0];
+ );
+ options=remove(options,[#]);
+ );
+ if(tmp1=="F", //181102from
+ fileflg=Toupper(substring(tmp_2,0,1));
+ options=remove(options,[#]);
+ ); //181102to
+ if(tmp1=="N", //181103from
+ tmp=parse(tmp_2);
+ if(Anyselected(tmp),
+ mkflg=-1;
+ );
+ options=remove(options,[#]);
+ );
+ if(tmp1=="C",
+ chkL=parse(tmp_2);
+ options=remove(options,[#]);
+ );
+ );//181102,03to
+ tmp1=1;
+ forall(reL,
+ if(islist(#),
+ startP=#;
+ ,
+ if(tmp1==1,
+ angle=#;
+ tmp1=tmp1+1;
+ ,
+ interval= interval*#;
+ );
+ );
+ );
+ if((fileflg=="Y")%(fileflg=="M")&(mkflg>-1), //181102from
+ wflg=1;
+ varL=flatten(bdylistorg);
+ varL=select(varL,length(#)>1);
+ varL=sort(varL);
+ pL=[];
+ forall(1..(length(varL)),nn,
+ tmp1=varL_nn;
+ tmp=select(GLIST,substring(#,0,length(tmp1))==tmp1);
+ str=tmp_1;
+ varL_nn=str;
+ tmp1=Bracket(str,"()");
+ tmp2=max(apply(tmp1,#_2));
+ nL=select(1..(length(tmp1)),tmp1_#_2==tmp2);
+ forall(nL,nn,
+ is=tmp1_nn_1; ie=tmp1_(nn+1)_1;
+ tmp=substring(str,is,ie-1);
+ tmp=replace(tmp,"'",Dq);
+ tmp=parse("["+tmp+"]");
+ tmp2=flatten(tmp);
+ tmp2=flatten(tmp2);
+ tmp2=flatten(tmp2);
+ forall(tmp2,
+ if(ispoint(#),
+ if(!contains(pL,#.name), //190505
+ pL=append(pL,#.name); //190505
+ );
+ );
+ );
+ );
+ );
+ forall(chkL,
+ if(!contains(pL,#),pL=append(pL,#));
+ );
+ forall(pL,
+ tmp=#+"="+Textformat(parse(#+".xy"),5);
+ varL=append(varL,tmp);
+ );
+ tmp="reL="+Textformat(reL,5);
+ varL=append(varL,tmp);
+ if(fileflg=="M",
+ fileflg="Y";
+ ,
+ tmp1="hatch"+nm+".txt";
+ if(isexists(Dirwork,tmp1),
+ tmp2=load(tmp1);
+ tmp2=tokenize(tmp2,"//");
+ tmp2=tmp2_(1..(length(tmp2)-1));
+ if(tmp2==varL,
+ wflg=0;
+ if(isexists(Dirwork,fname),
+ mkflg=0;
+ ReadOutData(fname);
+ tmp=name+"="+Textformat(parse(name),5)+";"; //190415
+ parse(tmp);
+ );
+ );
+ );
+ );
+ );
+ if(mkflg==1, //181102to
+ angle=angle*pi/180;
+ vec=[cos(angle),sin(angle)];
+ nvec=[-sin(angle),cos(angle)];
+ AnsL=[];
+ ctr=0;//181005[2lines]
+ forall(0..(maxnum_1), kk,
+ pt=startP+kk*interval*nvec;
+ sha=Makehatch(iostr,pt,vec,bdylist);
+ if((sha!=-1)&(length(sha)>0),
+ AnsL=concat(AnsL,sha);
+ ctr=ctr+1; //181005
+ );
+ );
+ maxnum_2=maxnum_2+(maxnum_1-ctr); //181005
+ forall(1..(maxnum_2),kk, //181005
+ pt=startP-kk*interval*nvec;
+ sha=Makehatch(iostr,pt,vec,bdylist);
+ if((sha!=-1)&(length(sha)>0),
+ AnsL=concat(AnsL,sha);
+ );
+ );
+ tmp1=apply(AnsL,Textformat(#,5));
+ tmp=name+"="+tmp1+";"; //190415
+ parse(tmp);
+ );
+ if((Noflg<3)&(mkflg>-1),
+ if(fileflg!="Y", //181102
+ println("generate Hatchdata "+name);
+ tmp=name+"="+Textformat(AnsL,5)+";"; //190415
+ parse(tmp);
+ if(!islist(iostr),tmp1=[iostr],tmp1=iostr); //no ketjs on
+ tmp="c"+PaO();
+ forall(tmp1,
+ tmp=tmp+Dq+#+Dq+",";
+ );
+ tmp=substring(tmp,0,length(tmp)-1)+")";
+ tmp2=name+"=Hatchdata("+tmp;
+ forall(bdynameL,
+ tmp2=tmp2+",list"+PaO()+#+")";
+ );
+ tmp2=tmp2+opstr+")";
+ GLIST=append(GLIST,tmp2); //no ketjs off
+ ,
+ GLIST=append(GLIST,"ReadOutData("+Dq+fname+Dq+")");//181102 //no ketjs
+ );
+ );
+ if((Noflg<2)&(mkflg>-1),
+ if(isstring(Ltype),
+ if((Noflg==0)&(color!=KCOLOR), //180904 //no ketjs on
+ Texcom("{");Com2nd("Setcolor("+color+")");//180722
+ ); //no ketjs off
+ Ltype=Getlinestyle(text(Noflg)+Ltype,name);
+ if((Noflg==0)&(color!=KCOLOR), //180904 //no ketjs on
+ Texcom("}");//180722
+ ); //no ketjs off
+ ,
+ if(Noflg==1,Ltype=0);
+ );
+ GCLIST=append(GCLIST,[name,Ltype,opcindy]);
+ );
+ if(mkflg>-1,
+ if((fileflg=="Y")&(wflg==1), //181102from
+ tmp1="hatch"+nm+".txt";
+ SCEOUTPUT = openfile(tmp1);
+ forall(varL,
+ println(SCEOUTPUT,#+"//");
+ );
+ closefile(SCEOUTPUT);
+ WriteOutData(fname,[name,parse(name)]);
+ ); //181102to
+ tmp2=[];
+ forall(AnsL,tmp1,
+ tmp=apply(tmp1,LLcrd(#));
+ tmp2=append(tmp2,tmp);
+ );
+ tmp2;
+ );
+);
+////%Hatchdata end////
+
+////%Shadein start////
+Shadein(pstrorg):=( //190220
+ regional(pstr,ptL,pL,crv,nn,
+ tmp,tmp1,tmp2,pm1,pm2,p1,p2,flg);
+ if(islist(pstrorg),pstr=pstrorg_1,pstr=pstrorg);
+ crv=[];
+ Framedata(["nodisp"]);
+ ptL=Intersectcurvespp(pstr,frwin);
+ if(length(ptL)>0,
+ pL=apply(ptL,#_2);
+ forall(1..(length(pL)),nn,
+ if(nn<length(pL),
+ tmp1=pL_nn;
+ tmp2=pL_(nn+1);
+ tmp=Pointoncrv((tmp1+tmp2)/2,pstr);
+ ,
+ tmp1=pL_nn;
+ tmp2=pL_1;
+ tmp=parse(pstr);
+ if(pL_nn==length(tmp),
+ tmp=tmp_1;
+ ,
+ tmp=tmp_(length(tmp));
+ );
+ );
+ if(Inwindow(tmp),
+ tmp=Partcrv("",tmp1,tmp2,pstr,["nodata"]);
+ ,
+ tmp1=Pointoncrv(tmp1,pstr);
+ tmp2=Pointoncrv(tmp2,pstr);
+ pm1=Paramoncrv(tmp1,frwin);
+ pm2=Paramoncrv(tmp2,frwin);
+ if(floor(pm1)==floor(pm2),
+ tmp=Listplot("",[tmp1,tmp2],["nodata"]);
+ ,
+ tmp=floor(pm1);
+ p1=Pointoncrv(tmp,"frwin");
+ p2=Pointoncrv(mod(tmp,4)+1,"frwin");
+ tmp=p1-10*(p2-p1);
+ Listplot("frwin",[p1,tmp],["nodisp","Msg=n"]);
+ tmp=Intersectcurvespp("sgfrwin",pstr);
+ if(mod(length(tmp),2)==0, //190223from
+ if(pm2<pm1,pm2=pm2+4);
+ tmp=[tmp1];
+ pm1=floor(pm1)+1;
+ flg=0;
+ forall(1..3,
+ if(flg==0,
+ if(pm1<pm2,
+ p1=Pointoncrv(mod(pm1-1,4)+1,"frwin");
+ tmp=append(tmp,p1);
+ pm1=pm1+1;
+ ,
+ flg=1;
+ );
+ );
+ );
+ if(pm1-1<pm2,tmp=append(tmp,tmp2));
+ ,
+ if(pm2>pm1,pm2=pm2-4);
+ tmp=[tmp1];
+ pm1=floor(pm1);
+ flg=0;
+ forall(1..3,
+ if(flg==0,
+ if(pm1>pm2,
+ p1=Pointoncrv(mod(pm1-1,4)+1,"frwin");
+ tmp=append(tmp,p1);
+ pm1=pm1-1;
+ ,
+ flg=1;
+ );
+ );
+ );
+ if(pm1+1>pm2,tmp=append(tmp,tmp2));
+ ); //190223to
+ );
+ );
+ if(length(crv)==0,
+ crv=tmp;
+ ,
+ crv=Joincrvs("",[crv,tmp],["nodata"]);
+ );
+ );
+ ,
+ if(Inwindow(parse(pstr+"_1")),crv=pstr,crv=frwin);
+ );
+ crv;
+);
+////%Shadein end////
+
+////%Shade start////
+Shade(plist):=Shade(plist,[]);
+Shade(Arg1,Arg2):=(
+ if(!isstring(Arg1),
+ Shade(text(SHADECTR),Arg1,Arg2); //190222
+ ,
+ Shade(Arg1,Arg2,[]);
+ );
+);
+Shade(nm,plistorg,options):=(
+//help:Shade(["gr1"],[0.5]);
+//help:Shade(["gr1"],["Color=red"]);
+//help:Shade(["gr1"],["Trim=y(n)"]); //190224
+// help:Shade(["gr1","sg1"],["Color=[1,0,0]"]);
+// help:Shade([[A,B,C,A]]);
+//help:Shade(["gr2","Invert(sg1)"],["Enc=y",(Startpoint)]);
+ regional(name,plist,jj,nn,trim,tmp,tmp1,tmp2,
+ opstr,opcindy,eqL,reL,Str,G2,flg,encflg,startpt,color,ctr);
+ name="shade"+nm;
+ plist=plistorg;
+ if(isstring(plist_1), // 16.01.24
+ println("output Shade of "+plist);
+ ,
+ println("output Shade of lists");
+ );
+ tmp=Divoptions(options);
+ eqL=tmp_5;
+ reL=tmp_6;
+ color=tmp_(length(tmp)-2);
+ opstr=tmp_(length(tmp)-1);
+ opcindy=tmp_(length(tmp));
+ tmp=select(plist,indexof(#,"Invert")>0); //180929from
+ if(length(tmp)>0,encflg=1,encflg=0);
+ trim="N";
+ forall(eqL,
+ tmp=Strsplit(#,"=");
+ tmp1=Toupper(tmp_1);
+ tmp2=Toupper(tmp_2);
+ if(substring(tmp1,0,1)=="E",
+ if(substring(tmp2,0,1)=="Y",
+ encflg=1;
+ );
+ if(substring(tmp2,0,1)=="N",
+ encflg=0;
+ );
+ );
+ if(substring(tmp1,0,1)=="T",
+ trim=substring(tmp2,0,1);
+ );
+ );
+ startpt=[];
+ forall(reL,
+ if(islist(#),
+ startpt=#;
+ );
+ ); //180929to
+ if(length(color)==4, //180602from
+ tmp=Colorcmyk2rgb(color);
+ );
+ flg=0; ctr=1;
+ if(encflg==1, //180929from
+ if(length(startpt)==2,
+ Enclosing(nm,plist,[startpt,"nodisp"]);
+ ,
+ Enclosing(nm,plist,["nodisp"]);
+ );
+ plist=["en"+nm];
+ ); //180929to
+ if((length(plist)==1)&(trim=="Y"), //190220from,109224
+ plist=[Shadein(plist)];
+ ); //190220to
+ forall(1..(length(plist)),jj, //180613from
+ if(flg==0,
+ tmp1=plist_jj;
+ if(isstring(tmp1),tmp=parse(tmp1),tmp=tmp1);
+ if(!islist(tmp),
+ flg=1;
+ ,
+ if(!isstring(tmp1),
+ tmp2=[];
+ forall(tmp1,if(ispoint(#),tmp=#.xy,tmp=#);
+ tmp2=append(tmp2,tmp);
+ );
+ Listplot("-"+name+text(ctr),tmp2,["nodisp"]); //190520
+// tmp1=Dqq("-"+name+text(ctr));
+// tmp2=Textformat(tmp2,6)+",["+Dqq("nodisp")+"]";
+// tmp=name+text(ctr)+"=Listplot("+tmp1+","+tmp2+");";parse(tmp);
+ plist_jj=name+text(ctr);
+ ctr=ctr+1;
+ );
+ );
+ );
+ );//180613to
+ if(flg==1,
+ println(" some data not defined properly");
+ ,
+ G2=Joincrvs("1",plist,["nodata"]);
+ G2=apply(G2,Pcrd(#));
+ tmp1="fillpoly("+Textformat(G2,5)+opcindy+");";
+ parse(tmp1);
+ );
+ Str="Shade("; //no ketjs on
+ tmp1="list"+PaO();
+ forall(plist,
+ if(isstring(#), // from 16.01.24
+ if(length(#)>1,
+ tmp1=tmp1+#+",";
+ ,
+ tmp1=tmp1+Dq+#+Dq+",";
+ );
+ ,
+ tmp1=tmp1+"Listplot("+Textformat(#,5)+"),";
+ ); //16.01.24to
+ );
+ Str=Str+substring(tmp1,0,length(tmp1)-1)+")"+")"; //180929
+ nn=length(COM2ndlist); //190311from
+ jj=nn;
+ forall(plist,tmp1,
+ tmp=select(1..nn,indexof(COM2ndlist_#,tmp1)>0);
+ jj=min(append(tmp,jj));
+ );
+ tmp1=["Texcom("+Dqq("{")+")","Setcolor("+color+")",Str,"Texcom("+Dqq("}")+")"];
+ tmp2=COM2ndlist_(1..(jj-1));
+ tmp=COM2ndlist_(jj..(length(COM2ndlist)));
+ if(!islist(tmp),tmp=[tmp]);
+ COM2ndlist=concat(tmp2,tmp1);
+ COM2ndlist=concat(COM2ndlist,tmp); //190311to
+ //no ketjs off
+ SHADECTR=SHADECTR+1;
+);
+////%Shade end////
+
+/////////// end of new Hatchdata(cindy) ///////////
+
+////%Rotatepoint start////
+Rotatepoint(point,Theta,ctr):=(
+//help:Rotatepoint(A,2*pi/3,B);
+ regional(X1,X2,Y1,Y2,Cx,Cy,tmp);
+ tmp=Lcrd(point);
+ X1=tmp_1; Y1=tmp_2;
+ tmp=Lcrd(ctr);
+ Cx=tmp_1; Cy=tmp_2;
+ X2=Cx+(X1-Cx)*cos(Theta)-(Y1-Cy)*sin(Theta);
+ Y2=Cy+(X1-Cx)*sin(Theta)+(Y1-Cy)*cos(Theta);
+ [X2,Y2];
+);
+////%Rotatepoint end////
+
+////%Translatepoint start////
+Translatepoint(point,mov):=(
+//help:Translatepoint(A,[2,3]);
+ regional(X1,X2,Y1,Y2,Cx,Cy,tmp);
+ tmp=Lcrd(point);
+ X1=tmp_1; Y1=tmp_2;
+ tmp=Lcrd(mov);
+ Cx=tmp_1; Cy=tmp_2;
+ X2=X1+Cx;
+ Y2=Y1+Cy;
+ [X2,Y2];
+);
+////%Translatepoint end////
+
+////%Scalepoint start////
+Scalepoint(point,ratio,center):=(
+//help:Scalepoint(A,[3,2],[0,0]);
+ regional(X1,X2,Y1,Y2,Cx,Cy,tmp);
+ tmp=Lcrd(point);
+ X1=tmp_1; Y1=tmp_2;
+ tmp=Lcrd(center);
+ Cx=tmp_1; Cy=tmp_2;
+ X2=Cx+ratio_1*(X1-Cx);
+ Y2=Cy+ratio_2*(Y1-Cy);
+ [X2,Y2];
+);
+////%Scalepoint end////
+
+////%Reflectpoint start////
+Reflectpoint(point,symL):=(
+//help:Reflectpoint(A,B);
+//help:Reflectpoint(A,[[2,3]]);
+//help:Reflectpoint(A,[C,E]);
+ regional(X1,X2,Y1,Y2,Us,Vs,Pt1,Pt2,Cx,Cy,tmp);
+ tmp=Lcrd(point);
+ X1=tmp_1; Y1=tmp_2;
+ Pt1=Lcrd(symL_1);
+ if(length(symL)==1,
+ Pt2=Pt1;
+ ,
+ Pt2=Lcrd(symL_2);
+ );
+ Us=Pt2_1-Pt1_1;
+ Vs=Pt2_2-Pt1_2;
+ if(Pt1==Pt2,
+ X2=2*Pt1_1-X1;
+ Y2=2*Pt1_2-Y1;
+ ,
+ X2=(Us^2-Vs^2)/(Us^2+Vs^2)*X1+2*Us*Vs/(Us^2+Vs^2)*Y1
+ -2*Vs*(Us*Pt1_2-Vs*Pt1_1)/(Us^2+Vs^2);
+ Y2=2*Us*Vs/(Us^2+Vs^2)*X1-(Us^2-Vs^2)/(Us^2+Vs^2)*Y1
+ +2*Us*(Us*Pt1_2-Vs*Pt1_1)/(Us^2+Vs^2);
+ );
+ [X2,Y2];
+);
+////%Reflectpoint end////
+
+////%Rotatedata start////
+Rotatedata(nm,plist,Theta):=Rotatedata(nm,plist,Theta,[]);
+Rotatedata(nm,plist,angle,optionorg):=(
+//help:Rotatedata("1",["crAB","pt1"],pi/3,[[1,5],"dr,2"]);
+//help:Rotatedata("1",[[A.xy],[B.xy]],pi/3,[[1,5],"dr,2"]);
+ regional(tmp,tmp1,tmp2,pdata,Theta,Pt,Cx,Cy,PdLL,PdL,options,
+ opcindy,eqL,msgflg,Nj,Njj,Kj,Mj,X1,Y1,X2,Y2,Ltype,Noflg,name,color);
+ name="rt"+nm;
+ options=optionorg;
+ Pt=[0,0];
+ tmp=Divoptions(options);
+ Ltype=tmp_1;
+ Noflg=tmp_2;
+ eqL=tmp_5;
+ color=tmp_(length(tmp)-2);
+ opcindy=tmp_(length(tmp));
+ tmp1=tmp_6;
+ if(length(tmp1)>0,Pt=Lcrd(tmp1_1));
+ msgflg="Y"; //190425from
+ forall(eqL,
+ tmp=Strsplit(#,"=");
+ tmp1=Toupper(substring(tmp_1,0,1));
+ if(tmp1=="M",
+ msgflg=Toupper(substring(tmp_2,0,1));
+ options=remove(options,[#]);
+ );
+ ); //190425to
+ pdata=plist;
+ if(isstring(pdata),pdata=[pdata]);
+ if(!isstring(pdata_1) & Measuredepth(pdata)==1,
+ pdata=[pdata];
+ );
+ if(isstring(angle),Theta=parse(angle),Theta=angle);
+ Cx=Pt_1; Cy=Pt_2;
+ PdL=[];
+ forall(pdata,Njj,
+ if(isstring(Njj),Kj=parse(Njj),Kj=Njj);
+ if(Measuredepth(Kj)==0,Kj=[Kj]); //17.11.24
+ if(Measuredepth(Kj)==1,Kj=[Kj]);
+ tmp2=[];
+ forall(Kj,Nj,
+ tmp1=[];
+ forall(Nj,
+ tmp=LLcrd(#);
+ X1=tmp_1;
+ Y1=tmp_2;
+ X2=Cx+(X1-Cx)*cos(Theta)-(Y1-Cy)*sin(Theta);
+ Y2=Cy+(X1-Cx)*sin(Theta)+(Y1-Cy)*cos(Theta);
+ tmp1=concat(tmp1,[[X2,Y2]]);
+ );
+ tmp2=concat(tmp2,[tmp1]);
+ );
+ PdL=concat(PdL,tmp2);
+ );
+ if(Noflg<3,
+ if(msgflg=="Y",
+ println("generate Rotatedata "+name);
+ );
+ tmp1=[];
+ forall(PdL,tmp2,
+ tmp=apply(tmp2,Pcrd(#));
+ tmp1=append(tmp1,tmp);
+ );
+ if(length(tmp1)==1,tmp1=tmp1_1);
+ tmp=name+"="+Textformat(tmp1,5)+";"; //190415
+ parse(tmp);
+ tmp1=text(plist); //no ketjs on
+ tmp1=RSform(tmp1,1);// 180602
+ tmp=name+"=Rotatedata("+tmp1+","
+ +Textformat(angle,5)+","+RSform(Textformat(Pt,5))+")"; //17.12.23
+ GLIST=append(GLIST,tmp); //no ketjs off
+ );
+ if(Noflg<2,
+ if(isstring(Ltype),
+ if((Noflg==0)&(color!=KCOLOR), //180904 //no ketjs on
+ Texcom("{");Com2nd("Setcolor("+color+")");//180722
+ ); //no ketjs off
+ Ltype=Getlinestyle(text(Noflg)+Ltype,name);
+ if((Noflg==0)&(color!=KCOLOR), //180904 //no ketjs on
+ Texcom("}");//180722
+ ); //no ketjs off
+ ,
+ if(Noflg==1,Ltype=0);
+ );
+ GCLIST=append(GCLIST,[name,Ltype,opcindy]);
+ );
+ PdL;
+);
+////%Rotatedata end////
+
+////%Translatedata start////
+Translatedata(nm,plist,mov):=Translatedata(nm,plist,mov,[]);
+Translatedata(nm,plist,mov,optionorg):=(
+//help:Translatedata("1",["gr1","pt1"],[1,2]);
+ regional(options,tmp,tmp1,tmp2,pdata,Cx,Cy,PdL,Nj,Njj,Kj,eqL,
+ opcindy,X2,Y2,Ltype,Noflg,name,color,leveL,msgflg);
+ name="tr"+nm;
+ options=optionorg; //190425
+ tmp=Divoptions(options);
+ Ltype=tmp_1;
+ Noflg=tmp_2;
+ eqL=tmp_5; //190424
+ color=tmp_(length(tmp)-2);
+ opcindy=tmp_(length(tmp));
+ msgflg="Y"; //190425from
+ forall(eqL,
+ tmp=Strsplit(#,"=");
+ tmp1=Toupper(substring(tmp_1,0,1));
+ if(tmp1=="M",
+ msgflg=Toupper(substring(tmp_2,0,1));
+ options=remove(options,[#]);
+ );
+ ); //190425to
+ pdata=plist;
+ if(isstring(pdata),pdata=[pdata]);
+ if(!isstring(pdata_1) & Measuredepth(pdata)==1,
+ pdata=[pdata];
+ );
+ tmp=Lcrd(mov);
+ Cx=tmp_1; Cy=tmp_2;
+ PdL=[];
+ forall(pdata,Njj,
+ if(isstring(Njj),Kj=parse(Njj),Kj=Njj);
+ if(Measuredepth(Kj)==1,Kj=[Kj]);
+ tmp2=[];
+ forall(Kj,Nj,
+ tmp1=[];
+ forall(Nj,
+ tmp=LLcrd(#);
+ X2=tmp_1+Cx;
+ Y2=tmp_2+Cy;
+ tmp1=concat(tmp1,[[X2,Y2]]);
+ );
+ tmp2=concat(tmp2,[tmp1]);
+ );
+ PdL=concat(PdL,tmp2);
+ );
+ if(Noflg<3,
+ if(msgflg=="Y", //190425
+ println("generate Translatedata "+name);
+ );
+ tmp1=[];
+ forall(PdL,tmp2,
+ tmp=apply(tmp2,Pcrd(#));
+ tmp1=append(tmp1,tmp);
+ );
+ if(length(tmp1)==1,tmp1=tmp1_1);
+ tmp=name+"="+Textformat(tmp1,5)+";"; //190415
+ parse(tmp);
+ tmp1=text(plist); //no ketjs on
+ tmp1=RSform(tmp1,1);// 180602
+ tmp=name+"=Translatedata("+tmp1+","+RSform(Textformat(mov,5))+")";
+ GLIST=append(GLIST,tmp); //no ketjs off
+ );
+ if(Noflg<2,
+ if(isstring(Ltype),
+ if((Noflg==0)&(color!=KCOLOR), //180904 //no ketjs on
+ Texcom("{");Com2nd("Setcolor("+color+")");//180722
+ ); //no ketjs off
+ Ltype=Getlinestyle(text(Noflg)+Ltype,name);
+ if((Noflg==0)&(color!=KCOLOR), //180904 //no ketjs on
+ Texcom("}");//180722
+ ); //no ketjs off
+ ,
+ if(Noflg==1,Ltype=0);
+ );
+ GCLIST=append(GCLIST,[name,Ltype,opcindy]);
+ );
+ PdL;
+);
+////%Translatedata end////
+
+////%Scaledata start////
+Scaledata(nm,plist,ratioV):=(
+ regional(tmp);
+ tmp=ratioV; //180603from
+ if(!islist(tmp),tmp=[tmp,tmp]);
+ tmp=Lcrd(tmp);//180603to
+ Scaledata(nm,plist,tmp_1,tmp_2,[]);
+);
+Scaledata(nm,plist,Arg1,Arg2):=(
+//help:Scaledata("1",["crAB","pt1"],3,2,[[0,0]]);
+//help:Scaledata("1",["crAB","pt1"],2,[[0,0]]);
+ regional(tmp,options);
+ if(islist(Arg2),
+ tmp=Arg1;//180603[2lines]
+ if(!islist(tmp),tmp=[tmp,tmp]);
+ tmp=Lcrd(tmp);
+ options=Arg2;
+ Scaledata(nm,plist,tmp_1,tmp_2,options);
+ ,
+ Scaledata(nm,plist,Arg1,Arg2,[]);
+ );
+);
+Scaledata(nm,plist,rx,ry,optionorg):=(
+ regional(tmp,tmp1,tmp2,pdata,Theta,Pt,Cx,Cy,PdL,options,eqL,
+ opcindy,Nj,Njj,Kj,X2,Y2,Ltype,Noflg,name,color,msgflg);
+ name="sc"+nm;
+ options=optionorg;
+ Pt=[0,0];
+ tmp=Divoptions(options);
+ Ltype=tmp_1;
+ Noflg=tmp_2;
+ eqL=tmp_5;
+ color=tmp_(length(tmp)-2);
+ opcindy=tmp_(length(tmp));
+ tmp1=tmp_6;
+ if(length(tmp1)>0,
+ Pt=Lcrd(tmp1_1);
+ );
+ msgflg="Y"; //190425from
+ forall(eqL,
+ tmp=Strsplit(#,"=");
+ tmp1=Toupper(substring(tmp_1,0,1));
+ if(tmp1=="M",
+ msgflg=Toupper(substring(tmp_2,0,1));
+ options=remove(options,[#]);
+ );
+ ); //190425to
+ pdata=plist;
+ if(isstring(pdata),pdata=[pdata]);
+ if(!isstring(pdata_1) & Measuredepth(pdata)==1,
+ pdata=[pdata];
+ );
+ Cx=Pt_1; Cy=Pt_2;
+ PdL=[];
+ forall(pdata,Njj,
+ if(isstring(Njj),Kj=parse(Njj),Kj=Njj);
+ if(Measuredepth(Kj)==1,Kj=[Kj]);
+ tmp2=[];
+ forall(Kj,Nj,
+ tmp1=[];
+ forall(Nj,
+ tmp=LLcrd(#);
+ X2=Cx+rx*(tmp_1-Cx);
+ Y2=Cy+ry*(tmp_2-Cy);
+ tmp1=concat(tmp1,[[X2,Y2]]);
+ );
+ tmp2=concat(tmp2,[tmp1]);
+ );
+ PdL=concat(PdL,tmp2);
+ );
+ if(Noflg<3,
+ if(msgflg=="Y",
+ println("generate Scaledata "+name);
+ );
+ tmp1=[];
+ forall(PdL,tmp2,
+ tmp=apply(tmp2,Pcrd(#));
+ tmp1=append(tmp1,tmp);
+ );
+ if(length(tmp1)==1,tmp1=tmp1_1);
+ tmp=name+"="+Textformat(tmp1,5)+";"; //190415
+ parse(tmp);
+ tmp1=text(plist); //no ketjs on
+ tmp1=RSform(tmp1,1); // 180602
+ tmp=name+"=Scaledata("+tmp1+","
+ +Textformat(rx,5)+","+Textformat(ry,5)+","+RSform(Textformat(Pt,5))+")";
+ GLIST=append(GLIST,tmp); //no ketjs off
+ );
+ if(Noflg<2,
+ if(isstring(Ltype),
+ if((Noflg==0)&(color!=KCOLOR), //180904 //no ketjs on
+ Texcom("{");Com2nd("Setcolor("+color+")");//180722
+ ); //no ketjs off
+ Ltype=Getlinestyle(text(Noflg)+Ltype,name);
+ if((Noflg==0)&(color!=KCOLOR), //180904 //no ketjs on
+ Texcom("}");//180722
+ ); //no ketjs off
+ ,
+ if(Noflg==1,Ltype=0);
+ );
+ GCLIST=append(GCLIST,[name,Ltype,opcindy]);
+ );
+ PdL;
+);
+////%Scaledata end////
+
+////%Reflectdata start////
+Reflectdata(nm,plist,symL):=Reflectdata(nm,plist,symL,[]);
+Reflectdata(nm,plist,symL,optionorg):=(
+//help:Reflectdata("1",["crAB"],[C]);
+ regional(tmp,tmp1,tmp2,pdata,Us,Vs,Pt1,Pt2,Cx,Cy,PdL,options,eqL,
+ opcindy,Nj,Njj,Kj,X1,Y1,X2,Y2,Ltype,Noflg,name,color);
+ name="re"+nm;
+ options=optionorg;
+ Pt=[0,0];
+ tmp=Divoptions(options);
+ Ltype=tmp_1;
+ Noflg=tmp_2;
+ eqL=tmp_5;
+ color=tmp_(length(tmp)-2);
+ opcindy=tmp_(length(tmp));
+ msgflg="Y"; //190425from
+ forall(eqL,
+ tmp=Strsplit(#,"=");
+ tmp1=Toupper(substring(tmp_1,0,1));
+ if(tmp1=="M",
+ msgflg=Toupper(substring(tmp_2,0,1));
+ options=remove(options,[#]);
+ );
+ ); //190425to
+ pdata=plist;
+ if(isstring(pdata),pdata=[pdata]);
+ if(!isstring(pdata_1) & Measuredepth(pdata)==1,
+ pdata=[pdata];
+ );
+ Pt1=Lcrd(symL_1);
+ if(length(symL)==1,
+ Pt2=Pt1;
+ ,
+ Pt2=Lcrd(symL_2);
+ );
+ Us=Pt2_1-Pt1_1;
+ Vs=Pt2_2-Pt1_2;
+ PdL=[];
+ forall(pdata,Njj,
+ if(isstring(Njj),Kj=parse(Njj),Kj=Njj);
+ if(Measuredepth(Kj)==1,Kj=[Kj]);
+ tmp2=[];
+ forall(Kj,Nj,
+ tmp1=[];
+ forall(Nj,
+ tmp=LLcrd(#);
+ X1=tmp_1;
+ Y1=tmp_2;
+ if(Pt1==Pt2,
+ X2=2*Pt1_1-X1;
+ Y2=2*Pt1_2-Y1;
+ ,
+ X2=(Us^2-Vs^2)/(Us^2+Vs^2)*X1+2*Us*Vs/(Us^2+Vs^2)*Y1
+ -2*Vs*(Us*Pt1_2-Vs*Pt1_1)/(Us^2+Vs^2);
+ Y2=2*Us*Vs/(Us^2+Vs^2)*X1-(Us^2-Vs^2)/(Us^2+Vs^2)*Y1
+ +2*Us*(Us*Pt1_2-Vs*Pt1_1)/(Us^2+Vs^2);
+ );
+ tmp1=concat(tmp1,[[X2,Y2]]);
+ );
+ tmp2=concat(tmp2,[tmp1]);
+ );
+ PdL=concat(PdL,tmp2);
+ );
+ if(Noflg<3,
+ if(msgflg=="Y",
+ println("generate Reflectdata "+name);
+ );
+ tmp1=[];
+ forall(PdL,tmp2,
+ tmp=apply(tmp2,Pcrd(#));
+ tmp1=append(tmp1,tmp);
+ );
+ if(length(tmp1)==1,tmp1=tmp1_1);
+ tmp=name+"="+Textformat(tmp1,5)+";"; //190415
+ parse(tmp);
+ tmp1=text(plist); //no ketjs on
+ tmp1=RSform(tmp1,1);// 180602
+ tmp=name+"=Reflectdata("+tmp1+","+RSform(Textformat(symL,5))+")";//17.12.23
+ GLIST=append(GLIST,tmp); //no ketjs off
+ );
+ if(Noflg<2,
+ if(isstring(Ltype),
+ if((Noflg==0)&(color!=KCOLOR), //180904 //no ketjs on
+ Texcom("{");Com2nd("Setcolor("+color+")");//180722
+ ); //no ketjs off
+ Ltype=Getlinestyle(text(Noflg)+Ltype,name);
+ if((Noflg==0)&(color!=KCOLOR), //180904 //no ketjs on
+ Texcom("}");//180722
+ ); //no ketjs off
+ ,
+ if(Noflg==1,Ltype=0);
+ );
+ GCLIST=append(GCLIST,[name,Ltype,opcindy]);
+ );
+ PdL;
+);
+////%Reflectdata end////
+
+// 180800 revised
+////%Mksegments start////
+Mksegments():=Mksegments([]);
+Mksegments(options):=(
+//help:Mksegments();
+ regional(ctr,segstr,p,q,r,tmp1,tmp2,tmp3);
+ ctr=1;//180809
+ forall(allsegments(),seg,
+ str=text(inspect(seg,"definition"));
+ tmp1=indexof(str,"(");
+ tmp2=indexof(str,";");
+ tmp3=indexof(str,")");
+ p=substring(str,tmp1,tmp2-1);
+ q=substring(str,tmp2,tmp3-1);
+ Listplot("all"+text(ctr),[parse(p),parse(q)]);//180800
+ ctr=ctr+1;
+ );
+);
+////%Mksegments end////
+
+// 180809 revised
+////%Mkcircles start////
+Mkcircles():=Mkcircles([]);
+Mkcircles(options):=(
+//help:Mkcircles():
+ regional(str,ctr,tmp,tmp1,tmp2);
+ ctr=1;
+ forall(allcircles(),cir,
+ str=text(inspect(cir,"definition"));
+ tmp1=indexof(str,"(");
+ tmp2=indexof(str,")");
+ str=substring(str,tmp1,tmp2-1);
+ tmp=Strsplit(str,";");
+ tmp1=parse(tmp_1); tmp2=parse(tmp_2);
+ if(ispoint(tmp2),
+ Circledata("all"+text(ctr),[tmp1,tmp2],options);
+ ,
+ tmp=cir.radius;
+ Circledata("all"+text(ctr),[tmp1,tmp1+[tmp2,0]],options);
+ );
+ ctr=ctr+1;
+ );
+);
+////%Mkcircles end////
+
+////%MakeRarg start////
+MakeRarg(arglist):=(
+ regional(str,tmpstr);
+ str="";
+ forall(arglist,
+ if(isstring(#),
+ tmpstr=Dq+RSslash(#)+Dq;
+ ,
+ tmpstr=Textformat(#,6);
+ );
+ str=str+tmpstr+",";
+ );
+ str=substring(str,0,length(str)-1);
+ str;
+);
+////%MakeRarg end////
+
+////%Htickmark start////
+Htickmark(arglist):=Htickmark(arglist,[]); //190203
+Htickmark(arglist,options):=( //190203
+//help:Htickmark([1,"1",2,"sw","2"]);
+ regional(nn,tmp,tmp1,tmp2,mark);
+ mark=MARKLEN/SCALEY;
+ tmp1=select(1..(length(arglist)),!isstring(arglist_#)); //180710from
+ forall(tmp1,nn,
+ Listplot("ht"+text(nn),
+ [[arglist_nn,mark],[arglist_nn,-mark]],["Msg=n"]);//181017
+ if(nn+2<=length(arglist),
+ tmp=arglist_(nn+2);
+ if(!isstring(tmp),
+ Expr([[arglist_nn,0],"s1",arglist_(nn+1)],options); //190203
+ ,
+ Expr([[arglist_nn,0],arglist_(nn+1),arglist_(nn+2)],options); //190203
+ );
+ ,
+ Expr([[arglist_nn,0],"s1",arglist_(nn+1)],options); //190203
+ );
+ );//180710to
+// tmp="";
+// tmp=MakeRarg(arglist);
+// Com2nd("Htickmark("+tmp+")");
+);
+////%Htickmark end////
+
+////%Vtickmark start////
+Vtickmark(arglist):=Vtickmark(arglist,[]); //190203
+Vtickmark(arglist,options):=( //190203
+//help:Vtickmark([1,"1",2,"sw","2"]);
+ regional(nn,tmp,tmp1,tmp2,mark);
+ mark=MARKLEN/SCALEX;
+ tmp1=select(1..(length(arglist)),!isstring(arglist_#)); //180710from
+ forall(tmp1,nn,
+ Listplot("vt"+text(nn),
+ [[mark,arglist_nn],[-mark,arglist_nn]],["Msg=n"]); //181021
+ if(nn+2<=length(arglist),
+ tmp=arglist_(nn+2);
+ if(!isstring(tmp),
+ Expr([[0,arglist_nn],"w1",arglist_(nn+1)],options); //190203
+ ,
+ Expr([[0,arglist_nn],arglist_(nn+1),arglist_(nn+2)],options); //190203
+ );
+ ,
+ Expr([[0,arglist_nn],"w1",arglist_(nn+1)],options); //190203
+ );
+ );//180710to// tmp=MakeRarg(arglist);
+// Com2nd("Vtickmark("+tmp+")");
+);
+////%Vtickmark end////
+
+////%Vtick start////
+Vtick(py):=Vtick(py,MARKLEN,[]);
+Vtick(py,len):=Vtick(py,len,[]);
+Vtick(py,len,options):=(
+//help:Vtick(1,0.1,options);
+ regional(tmp,tmp1,tmp2);
+ tmp="v"+text(round(py*100));
+ tmp=replace(tmp,"-","m");
+ tmp1=[0-len/2,py];
+ tmp2=[0+len/2,py];
+ Listplot(tmp,[tmp1,tmp2],options);
+);
+////%Vtick end////
+
+////%Htick start////
+Htick(px):=Htick(px,MARKLEN,[]);
+Htick(px,len):=Htick(px,len,[]);
+Htick(px,lenorg,options):=(
+//help:Htick(-1,0.1,options);
+ regional(len,tmp,tmp1,tmp2);
+ tmp=LLcrd([0,lenorg]);
+ len=tmp_2;
+ tmp="h"+text(round(px*100));
+ tmp=replace(tmp,"-","m");
+ tmp1=[px,0-len/2];
+ tmp2=[px,0+len/2];
+ Listplot(tmp,[tmp1,tmp2],options);
+);
+////%Htick end////
+
+////%Setax start////
+Setax(arglist):=(
+//help:Setax(["l","x","e","y","n","O","sw"]);
+//help:Setax([7,"nw"]);
+//help:Setax([8,linestyle,colorax,colorlabel]);
+ regional(st,nn,tmp); //181215from
+ st=1; nn=1;
+ if(isreal(arglist_1),
+ st=2;
+ nn=arglist_1;
+ );
+ forall(st..(length(arglist)),
+ tmp=arglist_#;
+ if(length(tmp)>0,AXSTYLE_nn=tmp);
+ nn=nn+1;
+ ); //181215from
+// tmp=MakeRarg(arglist);
+// Com1st("Setax("+tmp+")");
+);
+////%Setax end////
+
+////%Drwxy start////
+Drwxy():=Drwxy(0,[]); //190103from
+Drwxy(Arg):=(
+ if(islist(Arg),Drwxy(0,Arg); Drwxy(Arg,[]));
+);
+Drwxy(add):=Drwxy(add,[]);
+Drwxy(add,optionsorg):=( //190103to
+//help:Drwxy();
+//help:Drwxy(1[the last axis will be drawn],oprions);
+//help:Drwxy(options);
+//help:Drwxy(options=["Xrng=","Yrng=","Ax=l,x,e,..."]);
+ regional(options,color,eqL,strL,org,xrng,yrng,ax,st,nn,size,
+ linesty,colorax,colorla,tmp,tmp1,tmp2);
+ options=optionsorg;
+ tmp=Divoptions(options);
+ color=tmp_(length(tmp)-2);
+ eqL=tmp_5;
+ org=GENTEN;
+ //tmp1=max([org_1+XMIN,XMIN]);
+ //tmp2=min([org_1+XMAX,XMAX]);
+ xrng=[XMIN,XMAX]; //190103
+ //tmp1=max([org_2+YMIN,YMIN]);
+ //tmp2=min([org_2+YMAX,YMAX]);
+ yrng=[YMIN,YMAX]; //190103
+ ax=AXSTYLE;
+ linesty=ax_8;
+ if(length(ax_9)>0, //190427
+ if(isstring(ax_9),colorax=ax_9,colorax=text(ax_9));
+ ,
+ colorax=KCOLOR; //190427
+ );
+ colorax="Color="+colorax; //190427[if removed]
+ if(isstring(ax_10),colorla=ax_10,colorla=text(ax_10));
+ if(length(colorla)>0, //181217from
+ colorla="Color="+colorla;
+ ,
+ if(length(colorax)>0,
+ colorla=colorax;
+ );
+ ); //181217to
+ forall(eqL,
+ tmp=Strsplit(#,"=");
+ tmp1=Toupper(substring(tmp_1,0,1));
+ if(tmp1=="O", //190103from
+ org=parse(tmp_2);
+ options=remove(options,[#]);
+ ); //190103to
+ if(tmp1=="X",
+ xrng=parse(tmp_2);
+ options=remove(options,[#]);
+ );
+ if(tmp1=="Y",
+ yrng=parse(tmp_2);
+ options=remove(options,[#]);
+ );
+ if(tmp1=="A",
+ tmp2=tokenize(tmp_2,",");
+ st=1; nn=1;
+ if(isreal(tmp2_1),
+ st=2;
+ nn=tmp2_1;
+ );
+ forall(st..(length(tmp2)),
+ tmp=tmp2_#;
+ if(length(tmp)>0,ax_nn=tmp);
+ nn=nn+1;
+ );
+ options=remove(options,[#]);
+ );
+ );
+ options=append(options,linesty); //181216
+ if(substring(ax_1,0,1)=="a",
+ strL=select(options,isstring(#)); //181216
+ tmp=select(strL,contains(["dr","da","do","id"],substring(#,0,2)));
+ if(length(tmp)==0,options=append(options,YasenStyle));
+ tmp=substring(ax_1,1,length(ax_1)); //181216[2lines]
+ if(length(tmp)>0,size=parse(tmp),size=YaSize);
+ tmp1=concat(options,[size,YaAngle,YaPosition,YaCut,colorax]);//181216
+ tmp=[[xrng_1,org_2],[xrng_2,org_2]];
+ Lightarrowdata("axx"+text(AXCOUNT),tmp,tmp1);
+ tmp=[[org_1,yrng_1],[org_1,yrng_2]];
+ Lightarrowdata("axy"+text(AXCOUNT),tmp,tmp1); //190419
+ ,
+ tmp=[[xrng_1,org_2],[xrng_2,org_2]];
+ tmp1=concat(options,[colorax,"Msg=n"]);//181216,190325
+ Listplot("-axx"+text(AXCOUNT),tmp,tmp1);
+ tmp=[[org_1,yrng_1],[org_1,yrng_2]];
+ Listplot("-axy"+text(AXCOUNT),tmp,tmp1);
+ );
+ AXCOUNT=AXCOUNT+1;
+ Expr([[xrng_2,org_2],ax_3,ax_2],[colorla]);//181216[3lines]
+ Expr([[org_1,yrng_2],ax_5,ax_4],[colorla]);
+ Letter([org,ax_7,ax_6],[colorla]);
+ if(add==0, //190103
+ Addax(0);
+ );
+);
+////%Drwxy end////
+
+////%Drwpt start////
+Drwpt(pstr):=Drwpt(pstr,1); //181231
+Drwpt(ptlist,nn):=( // 16.03.05 from
+//help:Drwpt(A);
+//help:Drwpt([1,2],0);
+ if(!isreal(DrwPtCtr), //181231from
+ DrwPtCtr=1;
+ );
+ Pointdata(text(DrwPtCtr),ptlist,["Inside="+text(nn)]);
+ DrwPtCtr=DrwPtCtr+1; //181231to
+);
+////%Drwpt end////
+////%Drawpoint start////
+Drawpoint(pstr):=(
+ if(isstring(pstr),
+ println("Drwpt : "+pstr);
+ Com2nd("Drwpt("+pstr+")");
+ ,
+ Drawpoint(pstr,1);
+ );
+);
+Drawpoint(ptlistorg,nn):=(
+ regional(ptlist,thick,tmp,tmp1);
+ println("Drwpt : "+text(ptlistorg));
+ if(islist(ptlistorg),
+ if(Measuredepth(ptlistorg)==1,
+ ptlist=ptlistorg
+ ,
+ ptlist=[ptlistorg]
+ );
+ ,
+ ptlist=[ptlistorg]
+ );
+ thick=PenThick/PenThickInit;// 16.04.09 from
+ tmp1=max(TenSize/TenSizeInit,1)/8;
+ Setpen(tmp1); // 16.04.09 until
+ forall(ptlist,
+ tmp=Textformat(#,5)+","+text(nn);
+ Com2nd("Drwpt("+tmp+")"); // 16.04.09
+ );
+ Setpen(thick); // 16.04.09
+);// 16.03.05 until
+////%Drawpoint end////
+
+////%Addax start////
+Addax(param):=(
+//help:Addax(0);
+ ADDAXES=text(param);
+);
+////%Addax end////
+
+////%Expr start////
+Expr(Pt,Dr,St):=Expr([Pt,Dr,St]);
+Expr(list):=Expr(list,[]);
+Expr(Pt,Dr,St,options):=Expr([Pt,Dr,St],options); //190409
+Expr(listorg,options):=( //16.10.09
+//help:Expr([A,"e","f(x)=x^2"]);
+//help:Expr([A,"e","f(x)=x^2"],["size->24"]);
+ regional(list,str,tmp,tmp1,tmp2);
+ list=listorg;
+ forall(1..round(length(list)/3),
+ str=list_(3*#);
+ if(!isstring(str),str=format(str,5));
+ str="$"+str+"$";
+ list_(3*#)=str;
+ );
+ Letter(list,options);
+);
+////%Expr end////
+
+////%Letter start////
+Letter(Pt,Dr,St):=Letter([Pt,Dr,St]);
+Letter(list):=Letter(list,[]);
+Letter(Pt,Dr,St,options):=Letter([Pt,Dr,St],options);//181218
+Letter(list,options):=(
+//help:Letter([C,"c","Graph of $f(x)$"]);
+//help:Letter([C,"c","xy"],["size->30"]);
+ regional(Nj,Pos,Dir,Str,Off,Dmv,Xmv,Ymv,Noflg,opcindy,
+ opL,aln,sz,clr,bld,ita,tmp,tmp1,tmp2,color,eqL);
+ tmp=Divoptions(options);
+ eqL=tmp_5; //190209
+ Noflg=tmp_2;
+ color=tmp_(length(tmp)-2);
+ opL=select(options,indexof(#,"->")>0); //16.10.09from
+ tmp=select(opL,indexof(#,"color"));
+ sz=12;
+ bld=false;
+ ita=false;
+ aln="left";
+ forall(opL,
+ tmp=indexof(#,"->");
+ tmp1=Removespace(substring(#,0,tmp-1));
+ tmp2=substring(#,tmp+1,length(#));
+ if(tmp1=="size",sz=parse(tmp2));
+ if(tmp1=="color",clr=parse(tmp2));
+ if(tmp1=="bold",bld=parse(tmp2));
+ if(tmp1=="ita",ita=parse(tmp2));
+ );//16.10.09to
+ forall(eqL, //190209from
+ tmp=Strsplit(#,"=");
+ tmp1=Toupper(substring(tmp_1,0,1));
+ if(tmp1=="S",
+ sz=round(parse(tmp_2)*12);
+ );
+ ); //190209to
+ Off=-4;
+ Dmv=8;
+ Nj=1;
+ while(Nj+2<=length(list),
+ Pos=list_Nj;
+ Dir=list_(Nj+1);
+ tmp=indexof(Dir,"s")+indexof(Dir,"n");//16.10.19from
+ if(tmp>0,
+ tmp=indexof(Dir,"w")+indexof(Dir,"e");
+ if(tmp==0,
+ Dir="c"+Dir;//16.10.08
+ );
+ );//16.10.19until
+ Str=list_(Nj+2);
+ if(!isstring(Str),Str=format(Str,5)); // 16.09.30,10.09
+ tmp=replace(Str,".xy","");
+ tmp=replace(tmp,".x","(1)");
+ Str=replace(tmp,".y","(2)");
+ Str=RSslash(Str); // 17.09.24
+ Str=replace(Str,"`","'");//180303
+ tmp=Dq+","+Dq+Str+Dq+")";
+ if(Noflg==0, //no ketjs on
+ if((Noflg==0)&(color!=KCOLOR), //180904
+ Texcom("{");Com2nd("Setcolor("+color+")");//180722
+ );
+ Com2nd("Letter("+Lcrd(Pos)+","+Dq+Dir+tmp);//16.10.10
+ if((Noflg==0)&(color!=KCOLOR), //180904
+ Texcom("}");//180722
+ );
+ ); //no ketjs off
+ if(Noflg<2,
+ Xmv=0;//16.10.13
+ Ymv=-4;
+ if(indexof(Dir,"n")>0,
+ Ymv=Dmv/2;
+ );
+ if(indexof(Dir,"s")>0,
+ Ymv=-Dmv*3/2;//16.10.13
+ );
+ if(indexof(Dir,"e")>0,
+ Xmv=Dmv/2;
+ Off=0;
+ aln="left";
+ );
+ if(indexof(Dir,"w")>0,
+ Xmv=-Dmv/2;
+ Off=0; // 16.09.30from
+ aln="right";
+ );
+ if(indexof(Dir,"c")>0,
+ Xmv=0;//16.10.13
+ Off=0;
+ if(Ymv==0,Ymv=-4);//16.10.08
+ aln="mid"; // 16.09.30until
+ );
+ Str=list_(Nj+2); //17.10.17
+ drawtext(Pcrd(Pos),Str,offset->[Off+Xmv,Off+Ymv],
+ size->sz,color->color,align->aln,bold->bld,italics->ita);//16.10.09
+ );
+ Nj=Nj+3;
+ );
+);
+////%Letter end////
+
+////%Letterrot start////
+Letterrot(pt,dir,str):=Letterrot(pt,dir,0,0,str,[]);
+Letterrot(pt,dir,Arg1,Arg2):=(
+ if(islist(Arg2),
+ Letterrot(pt,dir,"t0n0",Arg1,Arg2);
+ ,
+ Letterrot(pt,dir,Arg1,Arg2,[]);
+ );
+);
+Letterrot(pt,dir,movstr,str,options):=(
+// help:Letterrot(C,B-A,"AB");
+// help:Letterrot(C,B-A,0,5,"AB");
+//help:Letterrot(C,B-A,AB",["Size=20"]);
+//help:Letterrot(C,B-A,"t0n5","AB");
+ regional(tmov,nmov,tmp,tmp1,tmp2,color);
+ tmp1=indexof(movstr,"t");
+ tmp2=indexof(movstr,"n");
+ if(tmp1>0,
+ if(tmp2>0,tmp=tmp2-1,tmp=length(movstr));
+ tmov=parse(substring(movstr,tmp1,tmp));
+ ,
+ tmov=0;
+ );
+ if(tmp2>0,
+ nmov=parse(substring(movstr,tmp2,length(movstr)));
+ ,
+ nmov=0;
+ );
+ Letterrot(pt,dir,tmov,nmov,str,options);
+);
+Letterrot(pt,dir,tmov,nmov,str,options):=(
+ regional(tmp,color);
+ tmp=Divoptions(options);
+ color=tmp_(length(tmp)-2);
+ Letter([pt,"c",str],append(options,"notex"));
+ tmp=replace(str,"\","\\"); //17.10.18
+ if(color!=KCOLOR, //180904
+ Texcom("{");Com2nd("Setcolor("+color+")");//180722
+ );
+ Com2nd("Letterrot("+pt+","+dir+","+tmov+","+nmov+","+Dqq(tmp)+")");//180805
+ if(color!=KCOLOR, //180904
+ Texcom("}");//180722
+ );
+);
+////%Letterrot end////
+
+////%Exprrot start////
+Exprrot(pt,dir,str):=Exprrot(pt,dir,0,0,str,[]);
+Expr(pt,dir,str,options):=Expr([pt,dir,str],options);//181218
+Exprrot(pt,dir,Arg1,Arg2):=(
+ if(islist(Arg2),
+ Exprrot(pt,dir,"t0n0",Arg1,Arg2);
+ ,
+ Exprrot(pt,dir,Arg1,Arg2,[]);
+ );
+);
+Exprrot(pt,dir,movstr,str,options):=(
+// help:Exprrot(C,B-A,"d");
+// help:Exprrot(C,B-A,0,5,"d");
+//help:Exprrot(C,B-A,"d",["Color=red"]);
+//help:Exprrot(C,B-A,"t0n5","d");
+ regional(tmov,nmov,tmp,tmp1,tmp2,color);
+ tmp1=indexof(movstr,"t");
+ tmp2=indexof(movstr,"n");
+ if(tmp1>0,
+ if(tmp2>0,tmp=tmp2-1,tmp=length(movstr));
+ tmov=parse(substring(movstr,tmp1,tmp));
+ ,
+ tmov=0;
+ );
+ if(tmp2>0,
+ nmov=parse(substring(movstr,tmp2,length(movstr)));
+ ,
+ nmov=0;
+ );
+ Exprrot(pt,dir,tmov,nmov,str,options);
+);
+Exprrot(pt,dir,tmov,nmov,str,options):=(
+ regional(tmp,color);
+ tmp=Divoptions(options);
+ color=tmp_(length(tmp)-2);
+ Expr([pt,"c",str],append(options,"notex"));
+ tmp=replace(str,"\","\\"); //17.10.18
+ if(color!=KCOLOR, //180904
+ Texcom("{");Com2nd("Setcolor("+color+")");//180722
+ );
+ Com2nd("Exprrot("+pt+","+dir+","+tmov+","+nmov+","+Dqq(tmp)+")");//180802
+ if(color!=KCOLOR, //180904
+ Texcom("}");//180722
+ );
+);
+////%Exprrot end////
+
+////%Slider start////
+Slider(ptstr,p1,p2):=Slider(ptstr,p1,p2,[]);
+Slider(ptstr,p1,p2,options):=(//190120
+//help:Slider("A-C-B",[-3,0],[3,0]);
+//help:Slider("C",[-3,0],[3,0]);
+//help:Slider(options=["Color=0.6*[0,0,1]","Size=2"]);
+ regional(pA,pB,pC,seg,sname,Alpha,color,size,tmp,tmp1);
+ color="Color=0.6*[0,0,1]"; //190120from
+ size="size->2";
+ forall(options,
+ tmp=Toupper(substring(#,0,1));
+ if(tmp=="C",
+ color=#;
+ );
+ if(tmp=="S",
+ tmp=Strsplit(#,"=");
+ size="size->"+tmp_2;
+ );
+ ); //190120to
+ tmp=Indexall(ptstr,"-");
+ if(length(tmp)>0, //190209from
+ pA=substring(ptstr,0,tmp_1-1);
+ pC=substring(ptstr,tmp_1,tmp_2-1);
+ pB=substring(ptstr,tmp_2,length(ptstr));
+ seg=pA+pB;
+ Alpha="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
+ sname="";
+ forall(1..(length(seg)),
+ tmp=substring(seg,#-1,#);
+ tmp1=indexof(Alpha,tmp);
+ if(tmp1>0,
+ sname=sname+unicode(text(tmp1+96),base->10);
+ ,
+ sname=sname+tmp;
+ );
+ );
+ Putpoint(pA,p1);
+ Putpoint(pB,p2);
+ Listplot([parse(pA),parse(pB)],["Msg=n","notex",color,size]);
+ Putonseg(pC,parse("sg"+pA+pB));
+ PTEXCEPTION=concat(TEXCEPTION,[pA,pC,pB]);
+ ,
+ pA=""; pB=""; pC=ptstr;
+ tmp=pC+"l"+pC+pC+"r";
+ Listplot(tmp,[p1,p2],["Msg=n","notex",color,size]);
+ Putonseg(pC,parse("sg"+tmp));
+ PTEXCEPTION=concat(PTEXCEPTION,[pC]); //190329
+ ); //190209to
+);
+////%Slider end////
+
+////%Putpoint start////
+Putpoint(name,Pt):=Putpoint(name,Pt,Pt);
+Putpoint(name,Ptinit,Pt):=(
+//help:Putpoint("A",[1,2],[1,A.y]);
+ regional(ptstr);
+ ptstr=apply(allpoints(),#.name); //no ketjs on
+ if(!contains(ptstr,name),
+ createpoint(name,Pcrd([Ptinit_1,Ptinit_2]));
+ , //no ketjs off
+ ptstr=name+".xy="+Textformat(Pcrd(Pt),5)+";";
+ parse(ptstr);
+ ); //no ketjs
+);
+////%Putpoint end////
+
+////%Putpoint start////
+Putpoint(name,Pt):=Putpoint(name,Pt,Pt);
+Putpoint(name,Ptinit,Pt):=(
+//help:Putpoint("A",[1,2],[1,A.y]);
+ regional(ptstr);
+ ptstr=apply(allpoints(),#.name);//16.10.06
+ if(!contains(ptstr,name),
+ createpoint(name,Pcrd([Ptinit_1,Ptinit_2]));
+ ,
+ ptstr=name+".xy="+Textformat(Pcrd(Pt),5)+";";
+ parse(ptstr);
+ );
+);
+////%Putpoint end////
+
+////%Bezierpt start////
+Bezierpt(t,ptlist,ctrlist):=(
+ regional(flg3,p0,p1,p2,p3,p4,p5,p6,p7,p8,p9);
+ p0=ptlist_1;
+ p3=ptlist_2;
+ p1=ctrlist_1;
+ if(length(ctrlist)==1,
+ p2=p3;
+ flg3=0;
+ ,
+ p2=ctrlist_2;
+ flg3=1;
+ );
+ if(length(p0)<3, // 15.02.08
+ p0=Lcrd(p0);
+ p3=Lcrd(p3);
+ p1=Lcrd(p1);
+ p2=Lcrd(p2);
+ );
+ p4=(1-t)*p0+t*p1;
+ p5=(1-t)*p1+t*p2;
+ p6=(1-t)*p2+t*p3;
+ p7=(1-t)*p4+t*p5;
+ p8=(1-t)*p5+t*p6;
+ p9=(1-t)*p7+t*p8;
+ if(flg3==0,p7,p9);
+);
+////%Bezierpt end////
+
+////%Bezier start////
+Bezier(ptctrlist):=Beziercurve(ptctrlist_3,ptctrlist_1,ptctrlist_2,[]);
+Bezier(Arg1,Arg2):=( //190202from
+ regional(nm,ptctrlist,options);
+ if(islist(Arg1),
+ ptctrlist=Arg1; options=Arg2;
+ Beziercurve(ptctrlist_3,ptctrlist_1,ptctrlist_2,options);
+ ,
+ nm=Arg1; ptctrlist=Arg2;
+ Beziercurve(nm,ptctrlist_1,ptctrlist_2,[]);
+ );
+); //190202to
+Bezier(nm,ptlist,ctrlist):=Beziercurve(nm,ptlist,ctrlist,[]);
+Bezier(nm,ptlist,ctrlist,options):=Beziercurve(nm,ptlist,ctrlist,options);
+////%Bezier end////
+
+////%Beziercurve start////
+Beziercurve(nm,ptlist,ctrlist):=Beziercurve(nm,ptlist,ctrlist,[]);
+Beziercurve(nm,ptlistorg,ctrlistorg,options):=(
+//help:Bezier("1",[A,D],[B,C]);
+//help:Bezier(options=["Num=10"]);
+ regional(name,Ltype,Noflg,opstr,opcindy,Num,
+ ptlist,ctrlist,tmp,tmp1,tmp2,ii,st,out,list,color);
+ name="bz"+nm;
+ tmp=Divoptions(options);
+ Ltype=tmp_1;
+ Noflg=tmp_2;
+ color=tmp_(length(tmp)-2);
+ opstr=tmp_(length(tmp)-1);
+ opcindy=tmp_(length(tmp));
+ Num=10;
+ tmp1=tmp_5;
+ forall(tmp1, // 14.12.31
+ if(substring(#,0,1)=="N",
+ tmp2=indexof(#,"=");
+ Num=parse(substring(#,tmp2,length(#)));
+ opstr=opstr+","+Dq+#+Dq;
+ );
+ );
+ ptlist=apply(ptlistorg,Lcrd(#)); // 16.08.16
+ ctrlist=[]; // 14.12.31
+ if(length(ctrlistorg)==length(ptlist)-1,
+ forall(1..(length(ctrlistorg)),ii, //190202
+ tmp1=apply(ctrlistorg_ii,Lcrd(#)); //190202
+ if(Measuredepth(tmp1)==0,tmp=[tmp1],tmp=tmp1);
+ ctrlist=append(ctrlist,tmp);
+ );
+ ,
+ forall(1..(length(ptlist)-1),ii,
+ tmp=ctrlistorg_((2*ii-1)..(2*ii));
+ tmp=apply(tmp,Lcrd(#)); // 16.08.16
+ ctrlist=append(ctrlist,tmp);
+ );
+ );
+ if(!islist(Num),
+ Num=apply(ctrlist,Num);
+ );
+ list=[];
+ forall(1..(length(ptlist)-1),ii,
+ tmp1=ptlist_(ii..(ii+1));
+ tmp2=ctrlist_ii;
+ if(ii==1,st=0,st=1);
+ forall(st..Num_ii,
+ tmp=Bezierpt(#/Num_ii,tmp1,tmp2);
+ list=append(list,tmp);
+ );
+ );
+ if(Noflg<3,
+ println("generate Bezier "+name);
+ out=apply(list,Pcrd(#));
+ tmp=name+"="+Textformat(out,5)+";"; //190415
+ parse(tmp);
+ tmp1=Textformat(ptlist,5); //no ketjs on
+ tmp1=RSform(tmp1,2); //17.12.23
+ tmp2=Textformat(ctrlist,5);
+ tmp2=RSform(tmp2,3); //17.12.23
+ GLIST=append(GLIST,name+"=Bezier("+tmp1+","+tmp2+opstr+")"); //no ketjs off
+ );
+ if(Noflg<2,
+ if(isstring(Ltype),
+ if((Noflg==0)&(color!=KCOLOR), //180904 //no ketjs on
+ Texcom("{");Com2nd("Setcolor("+color+")");//180722
+ ); //no ketjs off
+ Ltype=Getlinestyle(text(Noflg)+Ltype,name);
+ if((Noflg==0)&(color!=KCOLOR), //180904 //no ketjs on
+ Texcom("}");//180722
+ ); //no ketjs off
+ ,
+ if(Noflg==1,Ltype=0);
+ );
+ GCLIST=append(GCLIST,[name,Ltype,opcindy]);
+ );
+ BezierCtrL=ctrlist; //181001
+ list;
+);
+////%Beziercurve end////
+
+////%Putbezierdata start////
+Putbezierdata(name,ptL):=Putbezierdata(name,ptL,[]);
+Putbezierdata(name,ptL,options):=(
+ regional(psize,Deg,tmp,tmp1,tmp2,p1,p2,pts,ctrs);
+ tmp=Divoptions(options);
+ psize=3; //no ketjs
+ Deg=3;
+ tmp1=tmp_5;
+ forall(tmp1,
+ if(substring(#,0,1)=="D", //no ketjs on
+ tmp=indexof(#,"=");
+ Deg=parse(substring(#,tmp,length(#)));
+ );
+ if(substring(#,0,1)=="S",
+ tmp=indexof(#,"=");
+ psize=parse(substring(#,tmp,length(#)));
+ ); //no ketjs off
+ );
+ pts=[];
+ ctrs=[];
+ forall(1..length(ptL),
+ p2=ptL_#; // 16.08.16
+ if(ispoint(p2),
+ tmp1=p2.name; //190505
+ ,
+ tmp1=name+text(#);
+ Putpoint(tmp1,p2,Lcrd(parse(tmp1))); // 16.08.16
+ );
+ inspect(parse(tmp1),"ptsize",psize);
+ pts=append(pts,parse(tmp1));
+ inspect(parse(tmp1),"color",4);
+ if(#>1,
+ p1=Lcrd(ptL_(#-1)); // 16.08.16
+ p2=Lcrd(ptL_#); // 16.08.16
+ if(Deg==3,
+ tmp=(2*p1+p2)/3;
+ tmp1=name+"p"+text(#-1);
+ Putpoint(tmp1,tmp,Lcrd(parse(tmp1))); // 16.08.16
+ inspect(parse(tmp1),"labeled",false); //15.01.22
+ Letter([parse(tmp1),"ne",tmp1],["notex"]); //15.01.22
+ inspect(parse(tmp1),"ptsize",psize);
+ inspect(parse(tmp1),"color",3);
+ tmp=(p1+2*p2)/3;
+ tmp2=name+"q"+text(#-1);
+ Putpoint(tmp2,tmp,Lcrd(parse(tmp2))); // 16.08.16
+ inspect(parse(tmp2),"labeled",false); //15.01.22
+ Letter([parse(tmp2),"ne",tmp2],["notex"]); //15.01.22
+ inspect(parse(tmp2),"ptsize",psize);
+ inspect(parse(tmp2),"color",3);
+ ctrs=append(ctrs,[parse(tmp1),parse(tmp2)]);
+ ,
+ tmp=(p1+p2)/2;
+ tmp1=name+"p"+text(#-1);
+ Putpoint(tmp1,tmp,Lcrd(parse(tmp1))); // 16.08.16
+ inspect(parse(tmp1),"labeled",false); //15.01.22
+ Letter([parse(tmp1),"ne",tmp1],["notex"]); //15.01.22
+ inspect(parse(tmp1),"ptsize",psize);
+ inspect(parse(tmp1),"color",3);
+ ctrs=append(ctrs,[parse(tmp1)]);
+ );
+ );
+ );
+ [pts,ctrs,name];
+);
+////%Putbezierdata end////
+
+////%Bezierstart start////
+Bezierstart(n):=( // 2016.02.26
+ BezierNumber=n;
+);
+////%Bezierstart end////
+
+////%Mkbezierptcrv start////
+Mkbezierptcrv(ptdata):=Mkbezierptcrv(ptdata,[]);
+Mkbezierptcrv(ptdata,options):=(
+ //help:Mkbezierptcrv([A,B,C,D]);
+ //help:Mkbezierptcrv([[A,B],[C,D]]);
+ //help:Mkbezierptcrv(options=["Num=10"]);
+ // global BezierNumber
+ regional(ptlist,Out,tmp,tmp1,tmp2);
+ if(isstring(ptdata), //no ketjs on
+ ptlist=Readcsvsla(ptdata,options);
+ , //no ketjs off
+ ptlist=ptdata;
+ ); //no ketjs
+ if(Measuredepth(ptlist)==1,ptlist=[ptlist]);
+ Out=[];
+ forall(1..length(ptlist),
+ tmp=floor((BezierNumber-1)/26);// 15.02.23
+ if(tmp==0,tmp="",tmp=text(tmp));
+ tmp2=mod(BezierNumber,26);
+ if(tmp2==0,tmp2=26);
+ tmp1=unicode(text(96+tmp2),base->10)+tmp;// 15.03.11
+ tmp2=Putbezierdata(tmp1,ptlist_#,options);
+ Bezier(tmp2,options);
+ BezierNumber=BezierNumber+1;
+ Out=append(Out,tmp2_(1..2));
+ );
+ Out;
+);
+////%Mkbezierptcrv end////
+
+////%Mkbeziercrv start////
+Mkbeziercrv(nm,ptctrL):=Mkbeziercrv(nm,ptctrL,[]);
+Mkbeziercrv(nm,ptctrL,options):=(
+ //help:Mkbeziercrv("1",[[A,B,C,D],[[P,Q],[R,S],T]]);
+ regional(ptctrLL,name,ptlist,ctrlist,tmp,tmp1,tmp2);
+ if(Measuredepth(ptctrL)==2,ptctrLL=[ptctrL],ptctrLL=ptctrL);
+ forall(1..length(ptctrLL),
+ name=nm+text(#);
+ ptlist=ptctrLL_#_1;
+ ctrlist=ptctrLL_#_2;
+ Bezier(nm,ptlist,ctrlist,options); // 17.01.06
+ );
+);
+////%Mkbeziercrv end////
+
+////%Ospline start////
+Ospline(nm,ptlist):=Ospline(nm,ptlist,[]);
+Ospline(nm,ptlist,options):=(
+//help:Ospline("1",ptlist,[options]);
+//help:Ospline(options=["Num=10"]);
+ regional(tmp,tmp1,tmp2,list,ptL,ctrL,name,closed,flg,
+ p0,p1,p2,p3,pQ,pR,cc,p01,p02,p11,p12,p21,p22,p31,p32);
+ name="o"+nm;
+ if(isstring(ptlist),list=parse(ptlist),list=ptlist);
+ if(|list_1-list_(length(list))|<10^(-6),closed=1,closed=0);
+// list=apply(list,LLcrd(#));
+ ctrL=[];
+ forall(1..(length(list)-1),
+ flg=0;
+ p1=Lcrd(list_#); // 16.08.16
+ p2=Lcrd(list_(#+1)); // 16.08.16
+ if(#==1 % #==length(list)-1,
+ flg=1;
+ if(closed==0,
+ pQ=(p1+2*p2)/3; // 15.09.21 // 16.08.16
+ pR=(2*p1+p2)/3; // 16.08.16
+ ctrL=append(ctrL,[pQ,pR]);
+ flg=2;
+ ,
+ if(#==1,
+ p0=Lcrd(list_(length(list)-1)); // 16.08.16
+ p3=Lcrd(list_(#+2)); // 16.08.16
+ ,
+ p0=Lcrd(list_(#-1)); // 16.08.16
+ p3=Lcrd(list_2); // 16.08.16
+ );
+ );
+ );
+ if(flg<=1,
+ if(flg==0,
+ p0=Lcrd(list_(#-1)); // 16.08.16
+ p3=Lcrd(list_(#+2)); // 16.08.16
+ );
+ tmp=1+sqrt((1+Dotprod(p2-p0,p3-p1)/|p2-p0|/|p3-p1|)/2);
+ cc=4*|p2-p1|/3/(|p2-p0|+|p3-p1|)/tmp;
+ pQ=p1+cc*(p2-p0); // 15.09.21 // 16.08.16
+ pR=p2+cc*(p1-p3); // 16.08.16
+ ctrL=append(ctrL,[pQ,pR]);
+ );
+ );
+// list=apply(list,LLcrd(#)); // 16.08.16
+// ctrL=apply(ctrL,LLcrd(#));
+ if(closed==0, // 15.09.21
+ p1=ctrL_2_1;
+ p2=Lcrd(list_2); // 16.08.16
+ pQ=p2+(p2-p1);
+ ctrL_1=[pQ];
+ tmp=length(ctrL);
+ tmp1=ctrL_(tmp-1);
+ p1=ctrL_(tmp-1)_2;
+ p2=Lcrd(list_(tmp)); // 16.08.16
+ pQ=p2+(p2-p1);
+ ctrL_tmp=[pQ];
+ );
+ Bezier("o"+nm,list,ctrL,options);
+);
+////%Ospline end////
+
+////%CRspline start////
+CRspline(nm,ptL):=CRspline(nm,ptL,[]);
+CRspline(nm,ptL,options):=( //180822
+ // Catmull-Rom spline
+//help:CRspline("1",[A,B,C,A]);
+//help:CRspline(options=["Num=10"]);
+ regional(name,Eps,ptlist,cc,nv,pm,p0,p1,p2,p3,
+ ctrlist,cflg,qq,rr,tmp);
+ name="CR"+nm;
+ ptlist=apply(ptL,Lcrd(#));
+ Eps=10^(-5);
+ cflg=0;
+ if(dist(ptlist_1,ptlist_(length(ptlist)))<Eps,
+ cflg=1;
+ );
+ cc=1/6;
+ ctrlist=[];
+ forall(1..(length(ptlist)-1),
+ p1=ptlist_#;
+ p2=ptlist_(#+1);
+ tmp=p2-p1;
+ nv=[-tmp_2,tmp_1];
+ pm=(p1+p2)/2;
+ if(#==1,
+ p3=ptlist_(#+2);
+ if(cflg==0,
+ p0=Reflectpoint(p3,[pm,pm+nv]);
+ ,
+ p0=ptlist_(length(ptlist)-1);
+ );
+ ,
+ p0=ptlist_(#-1);
+ if(#==length(ptlist)-1,
+ if(cflg==0,
+ p3=Reflectpoint(p0,[pm,pm+nv]);
+ ,
+ p3=ptlist_2;
+ );
+ ,
+ p3=ptlist_(#+2);
+ );
+ );
+ qq=p1+cc*(p2-p0);
+ rr=p2+cc*(p1-p3);
+ ctrlist=append(ctrlist,[qq,rr]);
+ );
+ Bezier(name,ptlist,ctrlist,options);
+);
+////%CRspline end////
+
+////%Beziersmooth start////
+Beziersmooth(nm,ptL):=Bzspline(nm,ptL,[]);
+//help:Beziersmooth("1",[A,B,C,A]);
+Beziersmooth(nm,ptL,options):=Bzspline(nm,ptL,options);
+Bzspline(nm,ptL):=Bzspline(nm,ptL,[]);
+Bzspline(nm,ptLorg,options):=(
+ // smooth bezier
+ regional(name,Eps,ptL,pt,pt1,pt2,pt3,npt,lstr,
+ tmp,tmp1,tmp2,cflg,ctrlist);
+ name="bzsp"+nm;
+ Eps=10^(-3);
+ ptL=apply(ptLorg,Lcrd(#)); // 16.08.16
+ if(|ptL_1-ptL_(length(ptL))|<Eps,cflg=1,cflg=0);
+ forall(2..length(ptL),
+ pt=ptL_#;
+ pt1=ptL_(#-1);
+ tmp1="C"+text(#-1)+"q";// 16.10.07
+ Putpoint(tmp1,(pt1+4*pt)/5,Lcrd(parse(tmp1))); // 16.08.16
+ );
+ forall(2..(length(ptL)-1),
+ if(#<length(ptL) % cflg==1,
+ lstr="c"+text(#);
+ pt=ptLorg_#; // 16.08.16
+ pt1=parse("C"+text(#-1)+"q");
+ create([lstr],"Join",[pt1,pt]);
+ tmp2="C"+text(#)+"p";
+ tmp=append((2*pt.xy-pt1.xy),1);
+ create([tmp2],"PointOnLine",[parse(lstr),tmp]);
+ );
+ );
+ if(cflg==0,
+ pt=ptL_1;
+ pt1=ptL_2;
+ tmp1="C1p";
+ Putpoint(tmp1,(4*pt+pt1)/5,Lcrd(parse(tmp1))); // 16.08.16
+ );
+ if(cflg==1,
+ lstr="c1";
+ pt=ptLorg_1; // 16.08.16
+ pt1=parse("C"+text(length(ptL)-1)+"q");
+ create([lstr],"Join",[pt1,pt]);
+ tmp1="C1p";
+ tmp=append((2*pt.xy-pt1.xy),1);
+ create([tmp1],"PointOnLine",[parse(lstr),tmp]);
+ );
+ ctrlist=[];
+ forall(1..(length(ptL)-1),
+ if(#>1 % cflg==1,
+ tmp1="c"+text(#);
+ inspect(parse(tmp1),"alpha",0.3);
+ );
+ tmp1="C"+text(#)+"p";
+ tmp2="C"+text(#)+"q";
+ inspect(parse(tmp1),"ptsize",3);
+ inspect(parse(tmp1),"color",3);
+ inspect(parse(tmp2),"ptsize",3);
+ inspect(parse(tmp2),"color",3);
+ tmp=[parse(tmp1),parse(tmp2)];
+ ctrlist=append(ctrlist,tmp);
+ );
+ Bezier(nm,ptL,ctrlist,options);
+ [ptL,ctrlist];
+);
+////%Beziersmooth end////
+
+////%Beziersym start////
+Beziersym(nm,ptL):=Bzsspline(nm,ptL,[]);
+Beziersym(nm,ptL,options):=Bzsspline(nm,ptL,options);
+Bzsspline(nm,ptL):=Bzsspline(nm,ptL,[]);
+Bzsspline(nm,ptLorg,options):=(
+ // smooth bezier with symmetric control points
+ regional(name,Eps,ptL,pt,pt1,pt2,pt3,npt,lstr,
+ tmp,tmp1,tmp2,cflg,ctrlist);
+ name="bzssp"+nm;
+ Eps=10^(-3);
+ ptL=apply(ptLorg,Lcrd(#)); // 16.08.16
+ if(|ptL_1-ptL_(length(ptL))|<Eps,cflg=1,cflg=0);
+ forall(2..length(ptL),
+ pt=ptL_#;
+ pt1=ptL_(#-1);
+ tmp1="C"+text(#-1)+"q";
+ Putpoint(tmp1,(pt1+4*pt)/5,Lcrd(parse(tmp1)));
+ );
+ forall(2..(length(ptL)-1),
+ if(#<length(ptL) % cflg==1,
+ pt=ptL_#;
+ pt1=parse("C"+text(#-1)+"q");
+ tmp2="C"+text(#)+"p=2*pt-pt1;"; //190415
+ parse(tmp2);
+ );
+ );
+ if(cflg==0,
+ pt=ptL_1;
+ pt1=ptL_2;
+ Putpoint("C1p",(4*pt+pt1)/5,Lcrd(C1p)); // 16.08.16
+ inspect(C1p,"ptsize",3);
+ inspect(C1p,"color",3);
+ );
+ if(cflg==1,
+ pt=ptL_1;
+ pt1=Lcrd(parse("C"+text(length(ptL)-1)+"q")); // 16.08.16
+ tmp1="Putpoint("+Dq+"C1p"+Dq+",2*pt-pt1);"; // 16.08.16//190415
+ parse(tmp1);
+ );
+ ctrlist=[];
+ forall(1..(length(ptL)-1),
+ tmp1="C"+text(#)+"p";
+ tmp2="C"+text(#)+"q";
+ inspect(parse(tmp2),"ptsize",3);
+ inspect(parse(tmp2),"color",3);
+ tmp=[parse(tmp1),parse(tmp2)];
+ ctrlist=append(ctrlist,tmp);
+ );
+ Bezier(nm,ptL,ctrlist,options);
+ [ptL,ctrlist];
+);
+////%Beziersym end////
+
+////%Listbspline2bz start////
+Listbspline2bz(listorg):=(
+ regional(Eps,list,pcl,ptl,ctrl,k);
+ Eps=10^(-3);
+ list=apply(listorg,Lcrd(#)); // 16.08.16
+ k=length(list);
+ if(|list_1-list_k|>Eps,
+ pcl=list;
+ pcl_1=2*list_1-list_2;
+ pcl_k=2*list_k-list_(k-1);
+ ,
+ pcl=concat(list,[list_2]);
+ );
+ ctrl=apply(2..(length(pcl)-1),[pcl_#]);
+ ptl=apply(1..(length(pcl)-1),(pcl_#+pcl_(#+1))/2);
+ [ptl,ctrl];
+);
+////%Listbspline2bz end////
+
+////%Bspline start////
+Bspline(nm,ctrL):=Bspline(nm,ctrL,[]);
+Bspline(nm,ctrL,options):=(
+//help:Bspline("",[A,B,C]);
+//help:Bspline(options=["Num=10"]);
+ regional(list,tmp);
+ list=Listbspline2bz(ctrL);
+ tmp=BezierCurve("b"+nm,list_1,list_2,options);
+ tmp;
+);
+////%Bspline end////
+
+////%Meetcurve start////
+Meetcurve(Crv,Xorg,Yorg):=(
+ regional(Cv,tmp,tmp1,tmp2,X0,Y0,x1,x2,y1,y2,Ylist,Ban,Tate);
+ if(isstring(Crv),Cv=parse(Crv),Cv=Crv);
+ if(Measuredepth(Cv)==2,Cv=Cv_1);
+ Cv=apply(Cv,LLcrd(#)); // 14.12.18
+ while(length(Cv)==1,
+ Cv=Cv_1;
+ );
+ Cv=apply(Cv,Lcrd(#));
+ tmp1=min(apply(Cv,#_1));
+ tmp2=max(apply(Cv,#_1));
+ if(isstring(Xorg),X0=parse(Xorg),X0=Xorg);
+ if(isstring(Yorg),Y0=parse(Yorg),Y0=Yorg);
+ if(X0<tmp1,
+ X0=tmp1;
+ ,
+ if(X0>tmp2,
+ X0=tmp2;
+ );
+ );
+ tmp1=select(
+ 1..(length(Cv)-1),Cv_#_1<=X0 & X0<=Cv_(#+1)_1);
+ tmp2=select(
+ 1..(length(Cv)-1),Cv_#_1>=X0 & X0>=Cv_(#+1)_1);
+ tmp2=remove(tmp2,common(tmp2,tmp1));
+ Ban=concat(tmp1,tmp2);
+ Tate=select(Ban,
+ abs(Cv_#_1-Cv_(#+1)_1)<=
+ 10^(-2)*abs(Cv_#_2-Cv_(#+1)_2)
+ );
+ Ban=remove(Ban,Tate);
+ Ylist=[];
+ forall(Ban,
+ tmp=Cv_#;
+ x1=tmp_1; y1=tmp_2;
+ tmp=Cv_(#+1);
+ x2=tmp_1; y2=tmp_2;
+ tmp=((x2-X0)*y1+(X0-x1)*y2)/(x2-x1);
+ Ylist=append(Ylist,tmp);
+ );
+ forall(Tate,
+ tmp=Cv_#;
+ x1=tmp_1; y1=tmp_2;
+ tmp=Cv_(#+1);
+ x2=tmp_1; y2=tmp_2;
+ tmp1=min([y1,y2]);
+ tmp2=max([y1,y2]);
+ if(Y0<tmp1,
+ tmp=tmp1;
+ ,
+ if(Y0>tmp2,
+ tmp=tmp2;
+ ,
+ tmp=Y0;
+ );
+ );
+ Ylist=append(Ylist,tmp);
+ );
+ tmp=sort(Ylist,abs(#_1-Y0));
+ [X0,tmp_1];
+);
+////%Meetcurve end////
+
+////%Putonline start////
+Putonline(name,linestr):=Putonline(name,linestr,[]); //190216from
+Putonline(name,Arg1,Arg2):=(
+ regional(line,options);
+ if(isstring(Arg1),
+ line=parse(Arg1); options=Arg2;
+ Putonseg(name,LLcrd(line_1),LLcrd(line_2),options);
+ ,
+ Putonline(name,LLcrd(Arg1),LLcrd(Arg2),[]);
+ );
+);
+Putonline(name,p1,p2,options):=(
+//help:Putonline("C","lnAB");
+//help:Putonline("C",pA,pB);
+ regional(line);
+ line=Lineplot("",[p1,p2],["nodata"]);
+// tmp1=name+"1";
+// tmp2=name+"2";
+// Putpoint(tmp1,line_1); // 190216
+// Putpoint(tmp22,line_2); // 190216
+ Putonseg(name,line_1,line_2,options);
+); //190216to
+////%Putonline end////
+
+////%Putonseg start////
+Putonseg(name,sgstr):=(
+ regional(seg,p1,p2);
+ if(isstring(sgstr),seg=parse(sgstr),seg=sgstr);
+ Putonseg(name,LLcrd(seg_1),LLcrd(seg_2));
+);
+Putonseg(name,p1,p2):=Putonseg(name,p1,p2,[]);
+Putonseg(name,p1org,p2org,options):=(
+//help:Putonseg("C","sgAB");
+//help:Putonseg("C",pA,pB);
+ regional(Eps,par,p1,p2,dx,dy,p,tmp,tmp1,tmp2);
+ Eps=10^(-5);
+ par=0.5;
+ tmp=Divoptions(options);
+ if(length(tmp_6)>0,
+ par=tmp_6_1;
+ );
+ p1=Lcrd(p1org);//16.10.11from
+ p2=Lcrd(p2org);
+ Putpoint(name,(p1+p2)/2,parse(name+".xy")); //190216 //no ketjs
+ p1=Pcrd(p1); p2=Pcrd(p2); //190120
+ dx=p2_1-p1_1;
+ dy=p2_2-p1_2;
+ p=parse(name+".xy");
+ if(abs(dx)>abs(dy), //190120from
+ if(p1_1>p2_1,tmp=p1;p1=p2;p2=tmp);
+ if(p_1<p1_1,parse(name+".xy="+Textformat(p1,5));p=p1);
+ if(p_1>p2_1,parse(name+".xy="+Textformat(p2,5));p=p2);
+ tmp=(p2_2-p1_2)/(p2_1-p1_1)*(p_1-p1_1)+p1_2;
+ parse(name+".y="+tmp+";"); //190415
+ ,
+ if(p1_2>p2_2,tmp=p1;p1=p2;p2=tmp);
+ if(p_2<p1_2,parse(name+".xy="+Textformat(p1,5));p=p1);
+ if(p_2>p2_2,parse(name+".xy="+Textformat(p2,5));p=p2);
+ tmp=(p2_1-p1_1)/(p2_2-p1_2)*(p_2-p1_2)+p1_1;
+ parse(name+".x="+tmp+";"); //190415
+ ); //190120to
+);
+////%Putonseg end////
+
+////%Putoncurve start////
+Putoncurve(pn,crv):=putoncurve(pn,crv,[]);
+Putoncurve(pn,crvorg,options):=(
+//help:Putoncurve("A","gr1");
+ regional(eps,crv,close,nn,p1,p2,tmp,tmp1);
+ eps=10^(-3);
+ crv=crvorg;
+ if(isstring(crv),crv=parse(crv));
+ close=false;
+ if(|crv_1-crv_(length(crv))|<eps,
+ close=true;
+ );
+ tmp=parse(pn); //no ketjs on
+ if(!ispoint(tmp),
+ Putpoint(pn,[0,0],parse(pn+".xy"));
+ ); //no ketjs off
+ tmp=Paramoncurve(parse(pn),crvorg);
+ nn=floor(tmp);
+ p1=crv_nn;
+ if(nn<length(crv),
+ p2=crv_(nn+1);
+ Putonseg(pn,p1,p2);
+ ,
+ if(close,
+ p2=crv_1;
+ Putonseg(pn,p1,p2);
+ ,
+ parse(pn+".xy="+Textformat(Ptend(crv),5)+";"); //190415
+ );
+ );
+);
+////%Putoncurve end////
+
+////%Crosspoint start////
+Crosspoint(name,Crv1,Crv2,range):=(
+ regional(Mx1,Mx2,Mx3,tmp,Crs1,Crs2,Crs3,Crs4,df1,df2);
+ Mx1=range_1; Mx2=range_2;
+ repeat(15,
+ Mx3=(Mx1+Mx2)/2;
+ Crs1=MeetCurve(Crv1,Mx1,0);
+ Crs2=MeetCurve(Crv2,Mx1,0);
+ Crs3=MeetCurve(Crv1,Mx3,0);
+ Crs4=MeetCurve(Crv2,Mx3,0);
+ df1=Crs1_2-Crs2_2;
+ df2=Crs3_2-Crs4_2;
+ if((df1>0 & df2>0) % (df1<0 & df2<0),
+ Mx1=Mx3;
+ ,
+ Mx2=Mx3;
+ );
+ );
+ Putpoint(name,Crs1);
+);
+////%Crosspoint end////
+
+////%Periodfun start////
+Periodfun(defL,rng):=Periodfun(defL,rng,[]);
+Periodfun(Arg1,Arg2,Arg3):=( //190419from
+ regional(nm,defL,,rng,options);
+ if(isstring(Arg1),
+ nm=Arg1; defL=Arg2; rng=Arg3;
+ Periodfun(nm,defL,rng,[]);
+ ,
+ defL=Arg1; rng=Arg2; options=Arg3;
+ Periodfun("",defL,rng,options); //190421
+ );
+);
+Periodfun(nm,defL,rng,optionorg):=( //190420[new]
+//help:Periodfun("1",defL,"x=range",options);
+//help:Periodfun(defL=[function string,range(with equal option),devision number,...]);
+//help:Periodfun(equal option "l","r","b","n");
+//help:Periodfun(options=["Connect)=da,Color=red"]);//180725
+ regional(name,range,nr,nn,eqL,options,connect,Eps,fun,scaley,interval,
+ mxfun,var,left,right,period,cL,crL,sL,sdL,flg,equal,tmp,tmp1,tmp2);
+ Eps=10^(-2);
+ name="pe"+nm;
+ var="x";
+ nr=3*floor(length(defL)/3);
+ left=defL_2_1;
+ if(isstring(left),left=parse(left)); //190505
+ right=defL_(nr-1)_2;
+ if(isstring(right),right=parse(right)); ///190505
+ period=right-left;
+ if(isstring(rng),
+ tmp=Strsplit(rng,"=");
+ var=tmp_1;
+ if(length(tmp)>1,
+ range=parse(tmp_2);
+ ,
+ range=[XMIN,XMAX];
+ );
+ ,
+ range=[left-rng*period,right+rng*period]; //190421
+ );
+ options=optionorg;
+ tmp=Divoptions(options);
+ eqL=tmp_5;
+ connect="da";
+ forall(eqL,
+ tmp=Strsplit(#,"=");
+ tmp1=Toupper(substring(tmp_1,0,3));
+ tmp2=tmp_2;
+ if(tmp1=="CON",
+ tmp1=Toupper(substring(tmp2,0,1));
+ if(tmp1=="N",
+ connect="";
+ ,
+ if(tmp1!="Y",
+ connect=tmp2;
+ );
+ );
+ options=remove(options,[#]);
+ );
+ );
+ scaley=SCALEY;
+ Setscaling(1);
+ mxfun="";
+ cL=[];
+ forall(1..(nr/3),nn,
+ nst=text(nn);
+ fun=defL_(3*nn-2);
+ interval=defL_(3*nn-1); //190505from
+ equal="l";
+ if(length(interval)>2,
+ equal=substring(interval_3,0,1);
+ interval=interval_(1..2);
+ );
+ tmp=apply(interval,if(isstring(#),parse(#),#));
+ tmp1=var+"="+Textformat(tmp,5);
+ tmp2="Num="+text(defL_(3*nn));
+ tmp=Plotdata("",fun,tmp1,[tmp2,"nodata","Msg=n"]);
+ cL=append(cL,tmp);
+ if(equal=="l",equal=["<=","<"]);
+ if(equal=="r",equal=["<","<="]);
+ if(equal=="b",equal=["<=","<="]);
+ if(equal=="n",equal=["<","<"]);
+ mxfun=mxfun+"elseif ("+interval_1+
+ equal_1+var+" and "+var+equal_2+interval_2+") then "+fun+" ";
+ );
+ crL=cL;
+ flg=0;
+ forall(1..10,nn,
+ if(flg==0,
+ if(crL_1_1_1<=range_1,
+ flg=1;
+ ,
+ tmp=Translatedata("",cL,[-nn*period,0],["nodata","Msg=n"]);
+ crL=concat(tmp,crL);
+ );
+ );
+ );
+ flg=0;
+ forall(1..10,nn,
+ if(flg==0,
+ tmp1=crL_(length(crL));
+ tmp2=tmp1_(length(tmp1));
+ if(range_2<=tmp2_1,
+ flg=1;
+ ,
+ tmp=Translatedata("",cL,[nn*period,0],["nodata","Msg=n"]);
+ crL=concat(crL,tmp);
+ );
+ );
+ );
+ Setscaling(scaley);
+ sL=[];
+ sdL=[];
+ forall(1..(length(crL)),nn,
+ tmp=concat(options,["Msg=n"]);
+ Listplot("-"+name+text(nn),crL_nn,tmp);
+ sL=append(sL,name+text(nn));
+ if(nn<length(crL),
+ tmp1=crL_nn_(length(crL_nn));
+ tmp2=crL_(nn+1)_1;
+ if(Norm(tmp2-tmp1)>Eps,
+ tmp=concat(options,[connect,"Msg=n"]);
+ Listplot("-"+name+"dc"+text(nn),[tmp1,tmp2],tmp);
+ sdL=append(sdL,name+"dc"+text(nn));
+ );
+ );
+ );
+ tmp=name+"="+Textformat(sL,5)+";";
+ parse(tmp);
+ tmp=name+"dc="+Textformat(sdL,5)+";";
+ parse(tmp);
+ println(" generate "+name+","+name+"dc");
+ mxfun=substring(mxfun,4,length(mxfun)-1);
+ println(" return [mxfun,period]");
+ [mxfun,period];
+);
+////%Periodfun end////
+
+////%Mkcstable start////
+Mkcstable(nterm,num):=( //190523
+//help:Mkcstable(number of terms, division number)
+ regional(cosL,sinL,dL,jj,x,tmp);
+ cosL=[];
+ sinL=[];
+ forall(0..num,jj,
+ x=-pi+2*pi/num*jj;
+ dL=apply(1..nterm,cos(#*x));
+ cosL=append(cosL,dL);
+ dL=apply(1..nterm,sin(#*x));
+ sinL=append(sinL,dL);
+ );
+ tmp="Costable="+Textformat(cosL,6);
+ parse(tmp);
+ tmp="Sintable="+Textformat(sinL,6);
+ parse(tmp);
+);
+////%Mkcstable end////
+
+////%Fourierseries start////
+Fourierseries(nm,coeff,per,nterm):=
+ Fourierseries(nm,coeff,per,nterm,[]); // 16.11.24
+Fourierseries(nm,coeff,per,nterm,Arg1):=( //190420from
+ if(isstring(Arg1),
+ Fourierseries(nm,coeff,per,nterm,Arg1,[]);
+ ,
+ Fourierseries(nm,coeff,per,nterm,"x=[XMIN,XMAX]",Arg1);
+ );
+);
+Fourierseries(nm,coefforg,per,nterm,range,optionorg):=(
+//help:Fourierseries("1",[c0,cn,sn],period,numterm,"x=range",options);
+//help:Fourierseries("1","[c0,cn,sn]",period,numterm,"x=range",options);
+//help:Fourierseries(options2=["Table=n/y"]);
+ regional(options,eqL,num,coeff,c0,cn,sn,fs,tbflg,jj,dL,
+ tmp,tmp1,tmp2);
+ options=optionorg; //190523from
+ tmp=Divoptions(options);
+ eqL=tmp_5;
+ tbflg="N";
+ num=100;
+ forall(eqL,
+ tmp=Strsplit(#,"=");
+ tmp1=Toupper(substring(tmp_1,0,1));
+ if(tmp1=="T",
+ tbflg=Toupper(substring(tmp_2,0,1));
+ options=remove(options,[#]);
+ );
+ if(tmp1=="N",
+ num=parse(tmp_2);
+ options=remove(options,[#]);
+ );
+ ); //190523to
+ coeff=coefforg;
+ if(isstring(coeff),
+ tmp=substring(coeff,1,length(coeff)-1);
+ coeff=tokenize(tmp,",");
+ );
+ coeff=apply(coeff,
+ if(isstring(#),replace(#,"%pi","pi"),format(#,5))
+ );
+ c0=coeff_1;
+ cn=coeff_2;
+ sn=coeff_3;
+ fs=c0;
+ if(tbflg=="N", //190523
+ forall(1..nterm,
+ tmp=parse(Assign(cn,["n",#]));
+ tmp1=Assign("("+format(tmp,5)+")*cos(n*2*pi/per*x)",
+ ["n",#,"per",per]);
+ tmp=parse(Assign(sn,["n",#]));
+ tmp2=Assign("("+format(tmp,5)+")*sin(n*2*pi/per*x)",
+ ["n",#,"per",per]);
+ fs=fs+"+"+tmp1+"+"+tmp2;
+ );
+ Plotdata("-four"+nm,fs,range,append(options,"Num="+Num));
+ ,
+ c0=parse(c0); //190523from
+ cn=apply(1..nterm,parse(Assign(cn,["n",#])));
+ sn=apply(1..nterm,parse(Assign(sn,["n",#])));
+ dL=[]; //1900523from
+ forall(0..num,jj,
+ x=-per/2+per/num*jj;
+ fs=c0;
+ forall(1..nterm,
+ fs=fs+cn_#*Costable_(jj+1)_#+sn_#*Sintable_(jj+1)_#;
+ );
+ dL=append(dL,[x,fs]);
+ );
+ Listplot("-four"+nm,dL,options);
+ ); //190523to
+);
+////%Fourierseries end////
+
+////%Tabledata start//// //190428from
+Tabledata(xLst,yLst,rmvL):=Tabledata("",xLst,yLst,rmvL);
+Tabledata(Arg1,Arg2,Arg3,Arg4):=(
+ if(isstring(Arg1),
+ Tabledata(Arg1,Arg2,Arg3,Arg4,[]);
+ ,
+ Tabledata("",Arg1,Arg2,Arg3,Arg4);
+ );
+); //190428to
+Tabledata(nm,xL,yL,rmvL,optionorg):=(
+//help:Tabledata(xL,yL,rmvL,["Geo=n"]);
+//help:Tabledata(options=[2(tick,0 for no tick),"Setwin=y","Move=[0,0]"]); //190428
+ regional(options,geo,tmp,tmp1,tmp2);
+ options=optionorg;
+ tmp=Divoptions(options);
+ eqL=tmp_5;
+ tmp=select(tmp_5,indexof(Toupper(#),"GEO")>0);
+ if(length(tmp)>0,
+ options=remove(options,tmp);
+ Tabledatageo(nm,xL,yL,rmvL,options);
+ ,
+ Tabledatalight(nm,xL,yL,rmvL,options);
+ );
+);
+////% Tabledata end////
+
+////%Tabledatalight start////
+Tabledatalight(xLst,yLst,rmvL):=Tabledatalight("",xLst,yLst,rmvL); //190428from
+Tabledatalight(Arg1,Arg2,Arg3,Arg4):=(
+ if(isstring(Arg1),
+ Tabledatalight(Arg1,Arg2,Arg3,Arg4,[]);
+ ,
+ Tabledatalight("",Arg1,Arg2,Arg3,Arg4);
+ );
+); //190428to
+Tabledatalight(nm,xLst,yLst,rmvL,optionorg):=(
+//help:Tabledatalight(xLst,yLst,rmvL,[0(notick)]);
+//help:Tabledatalight(xLst,yLst,rmvL,[2,"Setwindow=y","Move=[0,0]"]); //190428
+ regional(options,rng,name,upleft,ul,flg,tick,eqL,reL,n,m,xsize,ysize,
+ rlist,clist,Tb,jj,kk,tmp,tmp1,tmp2,tmp3,Eps);
+ // TableMove is global for Table
+ TABLECOUNT=TABLECOUNT+1; //190428from
+ TableMove=GENTEN; //190428to
+ name="tb"+text(TABLECOUNT); //190428to
+ options=optionorg;
+ tmp=Divoptions(options);
+ eqL=tmp_5; //16.12.16from
+ reL=tmp_6;
+ rng="Y";
+ forall(eqL,
+ tmp=Strsplit(#,"="); //190428from
+ tmp1=Toupper(substring(tmp_1,0,2));
+ if(tmp1=="RN",
+ rng=Toupper(substring(tmp_2,0,1));
+ options=remove(options,[#]);
+ );
+ if(tmp1=="MO",
+ TableMove=parse(tmp_2);
+ rng="N"; //190429
+ options=remove(options,[#]);
+ );
+ if(tmp1=="SE",
+ rng=Toupper(substring(tmp_2,0,1));
+ options=remove(options,[#]);
+ );
+ ); //190428to
+ tick=1;
+ flg=0; //190424
+ forall(reL,
+ if(flg==0,
+ tick=#;
+ flg=flg+1;
+ ,
+ upleft=tmp_6_1;
+ );
+ );
+ tmp=sum(yLst);
+ upleft=[0,tmp];
+ TableOptions=options; // 16.11.28
+ println("generate Tabledatalight "+name); //190428
+ ul=upleft/10;
+ m=length(xLst);
+ n=length(yLst);
+ xsize=sum(xLst);
+ ysize=sum(yLst);
+ clist=[ul];
+ rlist=[ul];
+ forall(1..m,
+ tmp1=clist_(#)_1+xLst_#/10;
+ clist=append(clist,[tmp1,clist_1_2]);
+ );
+ forall(1..n,
+ tmp1=rlist_(#)_2-yLst_#/10;
+ rlist=append(rlist,[0,tmp1]);
+ );
+ Tb=[clist,rlist]; //190427
+ tmp=name+"="+Tb+";"; //190415
+ parse(tmp);
+ forall(0..m,jj, //190507from
+ tmp3="c"+text(jj);
+ if(length(rmvL)>=0,
+ tmp1="r"+text(0);
+ tmp2="r"+text(n);
+ Tlistplot("-"+name+tmp3+tmp1+tmp2,[tmp3+tmp1,tmp3+tmp2],options);
+ ,
+ forall(0..(n-1),
+ tmp1="r"+text(#);
+ tmp2="r"+text(#+1);
+ Tlistplot("-"+name+tmp3+tmp1+tmp2,[tmp3+tmp1,tmp3+tmp2],options);
+ );
+ ); //190507to
+ if(tick!=0, //190421
+ if(mod(jj,tick)==0 % #==m,
+ drawtext(clist_(jj+1)+TableMove-[0.04,-0.1],"c"+text(jj)); //190428
+ );
+ );
+ ); //190507
+ forall(0..n,jj,
+ tmp3="r"+text(jj);
+ if(length(rmvL)>=0,
+ tmp1="c"+text(0);
+ tmp2="c"+text(m);
+ Tlistplot("-"+name+tmp3+tmp1+tmp2,[tmp1+tmp3,tmp2+tmp3],options);
+ ,
+ forall(0..(m-1),
+ tmp1="c"+text(#);
+ tmp2="c"+text(#+1);
+ Tlistplot("-"+name+tmp3+tmp1+tmp2,[tmp1+tmp3,tmp2+tmp3],options);
+ );
+ );
+ if(tick!=0, //190421
+ if(mod(jj,tick)==0 % #==n,
+ drawtext(rlist_(jj+1)+TableMove-[0.4,0.1],"r"+text(jj)); //190428
+ );
+ );
+ );
+ Changetablestyle(rmvL,["nodisp"]); //190428
+ Addax(0);
+ Eps=10^(-3);
+ tmp1=clist_(length(clist));
+ tmp2=rlist_1;
+ tmp3=rlist_(length(rlist));
+ if(rng=="Y", // 16.12.16
+ Setwindow([0-Eps,tmp1_1+Eps],[tmp3_2-Eps,tmp2_2+Eps]);
+ );
+ Tb;
+);
+////%Tabledatalight end////
+
+////%Tabledatageo start//// //190428(renamed)
+Tabledatageo(nm,xLstorg,yLstorg,rmvL,options):=(
+ regional(eqL,ul,n,m,Tb,xLst,yLst,
+ rlist,clist,tmp,tmp1,tmp2);
+ xLst=xLstorg;
+ yLst=yLstorg;
+ tmp=Divoptions(options);
+ eqL=tmp_5;
+ TableMove=[0,0];
+ forall(eqL,
+ tmp=Strsplit(#,"=");;
+ tmp1=Toupper(substring(tmp_1,0,2));
+ tmp2=Toupper(substring(tmp_2,0,1));
+ if(tmp1=="MO",
+ TableMove=parse(tmp_2);
+ );
+ );
+ tmp=sum(yLst);
+ ul=[0,tmp]/10;
+ m=length(xLst);
+ n=length(yLst);
+ clist=[ul];
+ rlist=[ul];
+ forall(1..m,
+ tmp1=clist_(#)_1+xLst_#/10;
+ clist=append(clist,[tmp1,clist_1_2]);
+ );
+ forall(1..n,
+ tmp1=rlist_(#)_2-yLst_#/10;
+ rlist=append(rlist,[0,tmp1]);
+ );
+ forall(0..m,
+ tmp="C"+text(#);
+ tmp1=TableMove+clist_(#+1);
+ if(#==0,
+ Putpoint(tmp,tmp1);
+ ,
+ Putpoint(tmp,tmp1,[parse(tmp+".x"),tmp1_2]);
+ );
+ inspect(parse(tmp),"ptsize",3);
+ inspect(parse(tmp),"labeled",false);
+ );
+ forall(1..n,
+ tmp="R"+text(#);
+ tmp1=TableMove+rlist_(#+1);
+ Putpoint(tmp,tmp1,[tmp1_1,parse(tmp+".y")]);
+ inspect(parse(tmp),"ptsize",3);
+ inspect(parse(tmp),"labeled",false);
+ );
+ tmp1=0;
+ forall(1..m,
+ tmp=parse("C"+text(#)+".x")-TableMove_1;
+ tmp=tmp*10;
+ xLst_#=tmp-tmp1;
+ tmp1=tmp;
+ );
+ tmp1=C0.y*10;
+ forall(1..n,
+ tmp=parse("R"+text(#)+".y")-TableMove_2;
+ tmp=tmp*10;
+ yLst_#=tmp1-tmp;
+ tmp1=tmp;
+ );
+ Tb=Tabledatalight(nm,xLst,yLst,rmvL,options);
+ Tb;
+);
+////%Tabledatageo end////
+
+////%Tgrid start////
+Tgrid(ptstr):=(
+//help:Tgrid("c2r5");
+ regional(tb,tmp,tmp1,tmp2);
+ tmp=parse(ptstr);
+ if(islist(tmp),
+ tmp;
+ ,
+ tmp=indexof(ptstr,"r");
+ tmp1=substring(ptstr,1,tmp-1);
+ tmp1=parse(tmp1);
+ tmp2=substring(ptstr,tmp,length(ptstr));
+ tmp2=parse(tmp2);
+ tb=parse("tb"+text(TABLECOUNT)); //190428
+ [tb_1_(tmp1+1)_1,tb_2_(tmp2+1)_2]+TableMove; //190428
+ );
+);
+////%Tgrid end////
+
+////%Tlistplot start////
+Tlistplot(ptL):=Tlistplot(ptL,[]);
+Tlistplot(Ag1,Ag2):=(
+ regional(nm,ptL,options);
+ if(isstring(Ag1),
+ nm=Ag1;
+ ptL=Ag2;
+ options=[];
+ ,
+ ptL=Ag1;
+ options=Ag2;
+ nm=ptL_1+ptL_2;
+ );
+ Tlistplot(nm,ptL,options);
+);
+Tlistplot(nm,ptL,options):=(
+//help:Tlistplot(["c0r0","c0r4"]);
+//help:Tlistplot("1",["c0r0","c0r4"]);
+//help:Tlistplot([options2="Msg=y"]);
+ regional(tmp,tmp1);
+ tmp1=divoptions(options);//180404from
+ tmp1=tmp1_5;
+ tmp1=apply(tmp1,Toupper(substring(#,0,1)));
+ if(contains(tmp1,"M"),
+ tmp1=options;
+ ,
+ tmp1=append(options,"Msg=n");
+ );//180404to
+ tmp=apply(ptL,Tgrid(#)); // 15.06.03
+ Listplot(nm,tmp,tmp1);
+);
+////%Tlistplot end////
+
+////%Changetablestyle start////
+Changetablestyle(nameL,style):=(
+//help:Changetablestyle(["r0c0c3"],["da"]);
+ regional(nmL,nametb, name,grid,head,sb,tmp,tmp1,tmp2,tmp3,
+ tsg,pts,p1,p2,names,name,name1,nn,mm,gname,flg);
+ nametb="tb"+text(TABLECOUNT); //190428
+ if(islist(nameL),nmL=nameL,nmL=[nameL]);
+ forall(nmL,grid,
+ if(substring(grid,0,1)=="r",sb="c",sb="r");
+ tmp=indexof(grid,sb);
+ head=substring(grid,0,tmp-1);
+ if(sb=="r", //190507from
+ pts=head+sb+"x";
+ ,
+ pts=sb+"x"+head;
+ );
+ names=nametb+head+sb+"x"+sb+"y";//190507to
+ tmp3=apply(GCLIST,#_1); // 161206from
+ tmp3=select(tmp3,indexof(#,nametb)>0);
+ tmp3=apply(tmp3,substring(#,length(nametb),length(#))); //190507from
+ tmp3=select(tmp3,substring(#,0,length(head))==head);
+ tmp=Indexall(grid,sb);
+ tmp1=substring(grid,tmp_1,tmp_2-1);
+ tmp2=substring(grid,tmp_2,length(grid));
+ tsg=apply([tmp1,tmp2],parse(#));
+ flg=0;
+ forall(tmp3,gname,
+ if(flg==0,
+ tmp=Indexall(gname,sb);
+ tmp1=parse(substring(gname,tmp_1,tmp_2-1));
+ tmp2=parse(substring(gname,tmp_2,length(gname)));
+ if((tmp1<=tsg_1)&(tsg_2<=tmp2),
+ flg=1;
+ if(tmp1==tsg_1,
+ if(tsg_2==tmp2,
+ name=Replaceall(names,["x",tsg_1,"y",tsg_2]);
+ Changestyle(name,style);
+ ,
+ name=Replaceall(names,["x",tsg_2,"y",tmp2]);
+ name1=Replaceall(names,["x",tmp1,"y",tmp2]); //190508from
+ p1=Replaceall(pts,["x",tsg_2]);
+ p2=Replaceall(pts,["x",tmp2]);
+ Tlistplot("-"+name,[p1,p2],["notex"]);
+ GCLIST=GCLIST_(1..(length(GCLIST)-1));
+ nn=select(1..(length(GCLIST)),indexof(GCLIST_#_1,name1)>0);
+ nn=nn_1;
+ tmp=GCLIST_nn;
+ tmp=tmp_[2,3];
+ GCLIST_nn=prepend(name,tmp);
+ nn=select(1..(length(GLIST)),indexof(GLIST_#,name1)>0);
+ nn=nn_1;
+ GLIST_nn=replace(GLIST_nn,name1,name);
+ mm=select(1..(length(COM2ndlist)),indexof(COM2ndlist_#,name1)>0);
+ mm=mm_1;
+ COM2ndlist_mm=replace(COM2ndlist_mm,name1,name); //190508to
+ );
+ ,
+ name=Replaceall(names,["x",tmp1,"y",tsg_1]);
+ name1=Replaceall(names,["x",tmp1,"y",tmp2]); //190508from
+ p1=Replaceall(pts,["x",tmp1]);
+ p2=Replaceall(pts,["x",tsg_1]);
+ Tlistplot("-"+name,[p1,p2],["notex"]);
+ nn=select(1..(length(GCLIST)),indexof(GCLIST_#_1,name1)>0);
+ GCLIST=GCLIST_(1..(length(GCLIST)-1));
+ nn=nn_1;
+ tmp=GCLIST_nn;
+ tmp=tmp_[2,3];
+ GCLIST_nn=prepend(name,tmp);
+ nn=select(1..(length(GLIST)),indexof(GLIST_#,name1)>0);
+ nn=nn_1;
+ GLIST_nn=replace(GLIST_nn,name1,name);
+ mm=select(1..(length(COM2ndlist)),indexof(COM2ndlist_#,name1)>0);
+ mm=mm_1;
+ COM2ndlist_mm=replace(COM2ndlist_mm,name1,name); //190508to
+ if(tsg_2<tmp2,
+ p1=Replaceall(pts,["x",tsg_2]);
+ p2=Replaceall(pts,["x",tmp2]);
+ name=Replaceall(names,["x",tsg_2,"y",tmp2]);
+ Tlistplot("-"+name,[p1,p2]);
+ );
+ );
+ );
+ );
+ );
+ name=Replaceall(names,["x",tsg_1,"y",tsg_2]);
+ p1=Replaceall(pts,["x",tsg_1]);
+ p2=Replaceall(pts,["x",tsg_2]);
+ Tlistplot("-"+name,[p1,p2],style);
+ ); //170507to
+);
+////%Changetablestyle end////
+
+////%Findcell start////
+Findcell(pos1,pos2):=Findcell("",pos1,pos2);
+Findcell(Tbdata,pos1,pos2):=(
+//help:Findcell("c0r0","c2r1");
+ regional(tmp1,tmp2,posnw,posse,ctr,dx,dy);
+ if(isstring(pos1),
+ posnw=Tgrid(pos1); // 15.05.20
+ posse=Tgrid(pos2);
+ //posnw=parse(pos1);
+ //posse=parse(pos2);
+ ,
+ if(islist(pos1),
+ posnw=pos1;
+ posse=pos2;
+ ,
+ tmp1="c"+text(pos1-1)+"r"+text(pos2-1);
+ tmp2="c"+text(pos1)+"r"+text(pos2);
+ posnw=Tgrid(tmp1);
+ posse=Tgrid(tmp2);
+// posnw=parse(tmp1);
+// posse=parse(tmp2);
+ );
+ );
+ ctr=(posnw+posse)/2;
+ dx=abs(posse_1-ctr_1);
+ dy=abs(posnw_2-ctr_2);
+ [ctr,dx,dy];
+);
+////%Findcell end////
+
+////%Putcell start////
+Putcell(pos1,pos2,dir,lttr):=Putcell("",pos1,pos2,dir,lttr,[]); //190228from
+Putcell(Arg1,Arg2,Arg3,Arg4,Arg5):=(
+ if(islist(Arg5),
+ Putcell("",Arg1,Arg2,Arg3,Arg4,Arg5);
+ ,
+ Putcell(Arg1,Arg2,Arg3,Arg4,Arg5,[]);
+ );
+);
+Putcell(Tbdata,pos1,pos2,dir,lttr,options):=(
+//help:Putcell("c0r0","c2r1","lt","abc");
+//help:Putcell(2,3,"c","xyz");
+//help:Putcell(options=["Color="]);
+ regional(tmp,tmp1,tmp2,posnw,posse,
+ posdir,posstr,ctr,dx,dy);
+ tmp=Findcell(Tbdata,pos1,pos2);
+ ctr=tmp_1; dx=tmp_2; dy=tmp_3;
+ posdir=ctr;
+ posstr=dir;
+ if(indexof(dir,"b")>0,
+ posdir_2=posdir_2-dy;
+ posstr=replace(posstr,"b","n");
+ );
+ if(indexof(dir,"t")>0,
+ posdir_2=posdir_2+dy;
+ posstr=replace(posstr,"t","s");
+ );
+ if(indexof(dir,"l")>0,
+ posdir_1=posdir_1-dx;
+ posstr=replace(posstr,"l","e");
+ );
+ if(indexof(dir,"r")>0,
+ posdir_1=posdir_1+dx;
+ posstr=replace(posstr,"r","w");
+ );
+ Letter([posdir,posstr,text(lttr)],options);
+); //190228to
+////%Putcell end////
+
+////%Putcellexpr start////
+Putcellexpr(pos1,pos2,dir,ex):=Putcellexpr("",pos1,pos2,dir,ex,[]); //190228from
+Putcellexpr(Arg1,Arg2,Arg3,Arg4,Arg5):=(
+ if(islist(Arg5),
+ Putcellexpr("",Arg1,Arg2,Arg3,Arg4,Arg5);
+ ,
+ Putcellexpr(Arg1,Arg2,Arg3,Arg4,Arg5,[]);
+ );
+);
+Putcellexpr(Tbdata,pos1,pos2,dir,ex,options):=(
+//help:Putcellexpr("c0r0","c2r1","lt","abc");
+//help:Putcellexpr(2,3,"c","\sin x");
+ Putcell(Tbdata,pos1,pos2,dir,"$"+text(ex)+"$",options);
+); //190228to
+////%Putcellexpr end////
+
+////%Putrow start////
+Putrow(nrow,dir,lttrL):=Putrow("",nrow,dir,lttrL,[]); //190228from
+Putrow(Arg1,Arg2,Arg3,Arg4):=(
+ if(islist(Arg4),
+ Putrow("",Arg1,Arg2,Arg3,Arg4);
+ ,
+ Putcellrow(Arg1,Arg2,Arg3,Arg4,[]);
+ );
+);
+Putrow(Tbdata,nrow,dir,lttrL,options):=(
+//help:Putrow(1,"c",["x","y","z"]);
+ regional(tmp,tmp1,mcol);
+ mcol=length(lttrL);
+ forall(1..mcol,
+ Putcell(Tbdata,#,nrow,dir,lttrL_#,options);
+ );
+); //190228to
+////%Putrow end////
+
+////%Putrowexpr start////
+Putrowexpr(nrow,dir,exL):=Putrowexpr("",nrow,dir,exL,[]); //190228from
+Putrowexpr(Arg1,Arg2,Arg3,Arg4):=(
+ if(islist(Arg4),
+ Putrowexpr("",Arg1,Arg2,Arg3,Arg4);
+ ,
+ Putrowexpr(Arg1,Arg2,Arg3,Arg4,[]);
+ );
+);
+Putrowexpr(Tbdata,nrow,dir,exL,options):=(
+//help:Putrowexpr(2,"r",["x","y","z"]);
+ regional(lttrL);
+ lttrL=apply(exL,"$"+#+"$");
+ Putrow(Tbdata,nrow,dir,lttrL,options);
+); //190228to
+////%Putrowexpr end////
+
+////%Putcol start////
+Putcol(mcol,dir,lttrL):=Putcol("",mcol,dir,lttrL,[]); //190228from
+Putcellexpr(Arg1,Arg2,Arg3,Arg4):=(
+ if(islist(Arg4),
+ Putcellexpr("",Arg1,Arg2,Arg3,Arg4);
+ ,
+ Putcellexpr(Arg1,Arg2,Arg3,Arg4,[]);
+ );
+);
+Putcol(Tbdata,mcol,dir,lttrL,options):=(
+//help:PutcoL(1,"c",["x","y","z"]);
+ regional(tmp,tmp1,nrow);
+ nrow=length(lttrL);
+ forall(1..nrow,
+ Putcell(Tbdata,mcol,#,dir,lttrL_#,options);
+ );
+); //190228to
+////%Putcol end////
+
+////%Putcolexpr start////
+Putcolexpr(mcol,dir,exL):=Putcolexpr("",mcol,dir,exL,[]); //190228from
+Putcellexpr(Arg1,Arg2,Arg3,Arg4):=(
+ if(islist(Arg4),
+ Putcellexpr("",Arg1,Arg2,Arg3,Arg4);
+ ,
+ Putcellexpr(Arg1,Arg2,Arg3,Arg4,[]);
+ );
+);
+Putcolexpr(Tbdata,mcol,dir,exL,options):=(
+//help:Putcolexpr(2,"r",["x","y","z"]);
+ regional(lttrL);
+ lttrL=apply(exL,"$"+#+"$");
+ Putcol(Tbdata,mcol,dir,lttrL,options);
+); //190228to
+////%Putcolexpr end////
+
+////%Setrange start////
+Setrange():=(
+//help:Setrange();
+ SW.xy=Pcrd([XMIN,YMIN]);
+ NE.xy=Pcrd([XMAX,YMAX]);
+ drawpoly([Pcrd([XMIN,YMIN]), Pcrd([XMAX,YMIN]),
+ Pcrd([XMAX,YMAX]),Pcrd([XMIN,YMAX])],color->[1,1,1]);
+);
+////%Setrange end////
+
+////%Inwindow start////
+Inwindow(point):=Inwindow(point,[XMIN,XMAX],[YMIN,YMAX]);
+Inwindow(point,xrng,yrng):=(
+//help:Inwindow(point);
+//help:Inwindow(point,xrange,yrange);
+ regional(Eps,pt,x,y,xmin,xmax,ymin,ymax,tmp);
+ Eps=10.0^(-6);
+ if(ispoint(point),pt=point.xy,pt=point);
+ x=pt_1; y=pt_2;
+ xmin=xrng_1; xmax=xrng_2;
+ ymin=yrng_1; ymax=yrng_2;
+ tmp=(x>xmin-Eps)&(x<xmax+Eps)&(y>ymin-Eps)&(y<ymax+Eps);
+ if(tmp,true,false);
+);
+////%Inwindow end////
+
+////%Dashlinedata start////
+Dashlinedata(dataorg,sen,gap,ptn):=(
+ regional(data,eps,dtall,len,lenlist,ii,lenall,kari,
+ naga,tobi,nsen,seglist,segunit,hajime,owari,jj,
+ flg,tt,ptL,out,tmp,tmp1,tmp2);
+ eps=10.0^(-6);
+ if(isstring(dataorg),data=parse(dataorg),data=dataorg);
+ dtall=length(data);
+ out=[];
+ len=0; lenlist=[0];
+ forall(2..dtall,ii,
+ len=len+|data_ii-data_(ii-1)|;
+ lenlist=append(lenlist,len);
+ );
+ lenall=lenlist_dtall;
+ if(lenall>0,
+ kari=(sen+gap)*0.1;naga=sen*0.1;tobi=gap*0.1;
+ if(|data_1-data_dtall|<eps,
+ nsen=max([re(ceil(lenall/kari)),3]);
+ segunit=lenall/nsen;
+ naga=segunit*sen/(sen+gap);
+ tobi=segunit*gap/(sen+gap);
+ seglist=apply(0..(nsen-1),#*segunit);
+ ,
+ if(ptn==0,
+ nsen=max([re(ceil((lenall+tobi)/kari)),3]);
+ segunit=lenall*(sen+gap)/(nsen*sen+(nsen-1)*gap);
+ naga=segunit*sen/(sen+gap);
+ tobi=segunit*gap/(sen+gap);
+ seglist=apply(0..(nsen-1),#*segunit);
+ ,
+ nsen=max([re(ceil((lenall+naga)/kari)),3]);
+ segunit=lenall*(sen+gap)/((nsen-1)*sen+nsen*gap);
+ naga=segunit*sen/(sen+gap);
+ tobi=segunit*gap/(sen+gap);
+ seglist=apply(0..(nsen-2),tobi+#*segunit);
+ );
+ );
+ hajime=1;owari=1;
+ forall(1..(length(seglist)),ii,
+ len=seglist_ii;
+ flg=0;
+ forall(owari..dtall,jj,
+ if(flg==0,
+ if(len<lenlist_jj-eps,
+ flg=jj;
+ );
+ );
+ );
+ if(flg>0,hajime=flg-1);
+ flg=0;
+ forall(hajime..dtall,jj,
+ if(flg==0,
+ if(len+naga<lenlist_jj-eps,
+ flg=jj;
+ );
+ );
+ );
+ if(flg>0,owari=flg-1);
+ tt=len-lenlist_hajime;
+ tt=tt/(lenlist_(hajime+1)-lenlist_hajime);
+ tmp=data_hajime+tt*(data_(hajime+1)-data_hajime);
+ ptL=[tmp];
+ forall((hajime+1)..owari,jj,
+ ptL=append(ptL,data_jj);
+ );
+ tt=(len+naga-lenlist_owari);
+ tt=tt/(lenlist_(owari+1)-lenlist_owari);
+ tmp=data_owari+tt*(data_(owari+1)-data_owari);
+ ptL=append(ptL,tmp);
+ out=append(out,ptL);
+ );
+ );
+ out;
+);
+////%Dashlinedata end////
+
+////%Windispg start////
+Windispg():=(
+ if(ADDAXES=="1", //181215from
+ Drwxy();
+ ADDAXES="0";
+ ); //181215to
+ Windispg(GCLIST); //190125
+);
+Windispg(gcLorg):=( //190125
+ regional(gcL,Nj,Nk,Dt,Vj,tmp,tmp1,tmp2,tmp3,tmp4,opcindy);
+ gcL=gcLorg; //190125from
+ if(length(gcL)>0,
+ if(!islist(gcL_1),gcL=[gcL]);
+ ); //190125to
+ gsave();
+ layer(KETPIClayer);
+ forall(gcL,Nj,
+ if(isstring(Nj_1),Dt=parse(Nj_1),Dt=Nj_1); // 11.17
+ if(islist(Dt) & length(Dt)>0, // 12.19,12.22
+ tmp=Measuredepth(Dt);
+ if(tmp==1,Dt=[Dt]);
+ opcindy=Nj_3;
+ tmp=Nj_2; //190119from
+ if(!islist(tmp),tmp=[tmp,""]); //190123
+ if(tmp_1<0,tmp1=0,tmp1=tmp_1); //190119from
+ if(tmp1<10,
+ forall(Dt,Nk,
+ if(length(Nk)>1,
+ tmp3="";
+ if(indexof(opcindy,"color")==0, //190122from
+ tmp3=tmp3+",linecolor->"+KCOLOR;
+ );
+ tmp3=tmp3+opcindy;
+ if(tmp1==0, //190126from
+ if((length(tmp_2)>0)&(indexof(opcindy,"size")==0),
+ tmp3=tmp3+",size->"+tmp_2;
+ ); //190124to
+ tmp="connect("+Textformat(Nk,5)+tmp3+");";//190125
+ parse(tmp);
+ ,
+ if(tmp1==1,
+ tmp=tokenize(Nj_2_2,",");tmp4=Dashlinedata(Nk,tmp_1,tmp_2,0); //190512
+ forall(tmp4,
+ tmp="connect("+Textformat(#,5)+tmp3+");";
+ parse(tmp);
+ );
+ ,
+ tmp3=",dashtype->"+text(tmp1)+tmp3;
+ forall(1..(length(Nk)-1),
+ tmp="draw("+Textformat([Nk_#,Nk_(#+1)],5)+tmp3+");";
+ parse(tmp);
+ );
+ );
+ );
+ ,
+ if(indexof(opcindy,"size")==0, //190425from
+ opcindy=opciny+",size->"+text(TenSize/TenSizeInit);
+ ); //190425to
+ tmp="draw("+text(Nk_1)+opcindy+");";
+ parse(tmp);
+ ); //190126to
+ );
+ );
+ );
+ );
+ grestore();
+ layer(0);
+);
+////%Windispg end////
+
+
+////%Extractdata start////
+Extractdata(name):=Extractdata(1,name,[]);
+Extractdata(Arg1,Arg2):=(
+ if(isstring(Arg1),
+ Extractdata(1,Arg1,Arg2);
+ ,
+ Extractdata(Arg1,Arg2,[]);
+ );
+);
+Extractdata(number,name,options):=(
+//help:ExtractData("ha1");
+// help:ExtractData(1,"ha1");
+ regional(dlist,tmp,tmp1,tmp2,tmp3,File,Ltype,Noflg,opstr,opcindy,color);
+ tmp=Divoptions(options);
+ Ltype=tmp_1;
+ Noflg=tmp_2;
+ color=tmp_(length(tmp)-2);
+ opstr=tmp_(length(tmp)-1);
+ opcindy=tmp_(length(tmp));
+ tmp1=[];
+ forall(1..length(GOUTLIST),
+ if(contains(GOUTLIST_#_2,name),
+ tmp1=append(tmp1,#);
+ );
+ );
+ if(length(tmp1)==0,
+ println(name+" not found");
+ ,
+ tmp1=tmp1_number;
+ tmp2=GOUTLIST_tmp1;
+ tmp=remove(tmp2_2,[name]);
+ GOUTLIST_tmp1=[tmp2_1,tmp];
+ File=tmp2_1;
+ );
+ if(Noflg<3,
+ println("extract outdata "+name);
+ tmp1=parse(name);
+ tmp3=[ //17.09.18 //no ketjs on
+ "Tmpout=ReadOutData("+Dq+File+Dq+")"
+ ];
+ GLIST=concat(GLIST,tmp3); //no ketjs off
+ );
+ if(Noflg<2,
+ if(isstring(Ltype),
+ if((Noflg==0)&(color!=KCOLOR), //180904 //no ketjs on
+ Texcom("{");Com2nd("Setcolor("+color+")");//180722
+ ); //no ketjs off
+ Ltype=Getlinestyle(text(Noflg)+Ltype,name);
+ if((Noflg==0)&(color!=KCOLOR), //180904 //no ketjs on
+ Texcom("}");//180722
+ ); //no ketjs off
+ ,
+ if(Noflg==1,Ltype=0);
+ );
+ GCLIST=append(GCLIST,[name,Ltype,opcindy]);
+ );
+ tmp2;
+);
+////%Extractdata end////
+
+////%Removeout start////
+Removeout(pltlist):=(
+ regional(name,tmp,tmp1,tmp2);
+ forall(pltlist,name,
+ tmp1=[];
+ forall(GOUTLIST,
+ tmp=remove(#_2,[name]);
+ tmp1=append(tmp1,[#_1,tmp]);
+ );
+ GOUTLIST=tmp1;
+ );
+);
+////%Removeout end////
+
+////%Makecmdlist start////
+Makecmdlist(libname):=(
+//help:Makecmdlist("ketcindylib");
+ regional(cmdall,cmd,flg,tmp,tmp1,tmp2,out);
+ setdirectory(Dirlib);
+ tmp=load(libname+".cs");
+ cmdall=tokenize(tmp,":=");
+ out=[];
+ forall(cmdall,cmd,
+ tmp=max([0,length(cmd)-50]);
+ tmp1=";"+substring(cmd,tmp,length(cmd));
+ flg=0;
+ forall(reverse(1..length(tmp1)),
+ if(flg==0,
+ if(substring(tmp1,#-1,#)==";",
+ tmp=substring(tmp1,#,length(tmp1));
+ tmp2=substring(tmp,0,1);
+ if(length(tmp)>0,
+ if(!contains([" ","/"],tmp2),
+ out=append(out,tmp);
+ flg=1;
+ );
+ );
+ );
+ );
+ );
+ );
+ setdirectory(Dirwork);
+ tmp=length(out)-1;
+ out=out_(2..tmp);
+ out=sort(out);
+);
+////%Makecmdlist end////
+
+////%Savecmdlist start////
+Savecmdlist(cmdlist,cmdfile):=(
+ SCEOUTPUT=openfile(cmdfile+".cs");
+ forall(cmdlist,
+ println(SCEOUTPUT,#);
+ );
+ closefile(SCEOUTPUT);
+);
+////%Savecmdlist end////
+
+////%Quicksort start////
+Quicksort(seq):=(
+ regional(pivot,left,right,out);
+ if(length(seq)<2,
+ out=seq;
+ ,
+ pivot = max(seq_1,seq_2);
+ left = [];
+ right = [];
+ forall(seq,
+ if(#< pivot,
+ left=append(left,#);
+ ,
+ right=append(right,#);
+ );
+ );
+ left = Quicksort(left);
+ right = Quicksort(right);
+ out=concat(left,right);
+ );
+ out;
+);
+////%Quicksort end////
+
+////%Lessstr start////
+Lessstr(st1,st2):=(
+ regional(tmp,tmp1,tmp2,out);
+ tmp=min(length(st1),length(st2));
+ flg=0;
+ forall(1..tmp,
+ if(flg==0,
+ tmp1=substring(st1,#-1,#);
+ tmp2=substring(st2,#-1,#);
+ if(tmp1<tmp2,
+ out=(1<2);
+ flg=1;
+ ,
+ if(tmp1>tmp2,
+ out=(1>2);
+ flg=1;
+ );
+ );
+ );
+ );
+ if(flg==0,
+ if(length(st1)<length(str2),
+ out=(1<2);
+ ,
+ out=(1>2);
+ );
+ );
+ out;
+);
+////%Lessstr end////
+
+////%Makehelplist start////
+Makehelplist(libname):=(
+ regional(cmdall,cmd,flg,lev,tmp,tmp1,out);
+ tmp=load(libname);
+ cmdall=tokenize(tmp,"//help:");
+ cmdall=select(cmdall,substring(#,1,3)!=");");
+ flg=0;
+ forall(1..3,
+ if(flg==0,
+ if(substring(cmdall_#,0,7)=="start"+PPa(""),
+ cmdall=cmdall_((#+1)..length(cmdall));
+ flg=1;
+ );
+ );
+ );
+ flg=0;
+ tmp=length(cmdall);
+ forall(0..2,
+ if(flg==0,
+ if(substring(cmdall_(tmp-#),0,5)=="end"+PPa(""),
+ cmdall=cmdall_(1..(tmp-#-1));
+ flg=1;
+ );
+ );
+ );
+ out=[];
+ forall(cmdall,cmd,
+ tmp1=indexof(cmd,"(");
+ lev=1;
+ flg=0;
+ forall((tmp1+1)..length(cmd),
+ if(flg==0,
+ tmp=substring(cmd,#-1,#);
+ if(tmp=="(",lev=lev+1);
+ if(tmp==")",
+ lev=lev-1;
+ if(lev==0,
+ flg=1;
+ out=append(out,substring(cmd,0,#)+";");
+ );
+ );
+ );
+ );
+ );
+ sort(out);
+);
+////%Makehelplist end////
+
+////%Helplist start////
+Helplist():=Helplist(Dirlib,["+","+3d"],"helpJ");
+// 15.05.22
+Helplist(Arg):=(
+ if(islist(Arg),
+ Helplist(Dirlib,Arg,"helpJ"); // 15.06.20
+ ,
+ if(indexof(Arg,"help")>0,
+ Helplist(Dirlib,["+","+3d"],Arg);
+ ,
+ Helplist(Arg,["+","+3d"],"helpJ");
+ );
+ );
+);
+Helplist(Arg1,Arg2):=(
+ if(islist(Arg1),
+ Helplist(Dirlib,Arg1,Arg2);
+ ,
+ if(indexof(Arg2,"help")>0,
+ Helplist(Dirlib,Arg1,Arg2);
+ ,
+ Helplist(Arg,["+","+3d"],Arg2);
+ );
+ );
+);
+Helplist(dir,files,help):=(
+//help:Helplist();
+//help:Helplist("helpE");
+ regional(ketfiles,tmp,tmp1,tmp2);
+ setdirectory(dir);
+ if(contains(files,"+"),
+ tmp=remove(files,["+"]);
+ ketfiles=concat(["+basic1","+basic2","+basic3","+out"],tmp); //190414
+ ,
+ ketfiles=files;
+ );
+ ketfiles=apply(ketfiles,replace(#,"+","ketcindylib"));
+ ketfiles=apply(ketfiles,#+"r.cs"); // 15.11.05 from
+ tmp=apply(files,replace(#,"+","ketcindylib"));
+// tmp=apply(files,replace(#,"r.cs",""));
+// tmp=remove(tmp,["ketcindylibout"]);
+// tmp=apply(tmp,replace(#,"basic",""));
+ tmp=apply(tmp,#+help+".txt");
+ ketfiles=concat(ketfiles,tmp);// 15.11.05 until
+ tmp1=[];
+ forall(ketfiles,
+ tmp=Makehelplist(#);
+ tmp1=concat(tmp1,tmp);
+ );
+ if(!islist(HLIST), // 16.12.31from
+ HLIST=sort(tmp1);
+ ,
+ HLIST=sort(concat(HLIST,tmp1));
+ ); // 16.12.31until
+ setdirectory(Dirwork);
+);
+////%Helplist end////
+
+////%Help start////
+Help():=(
+ forall(HLIST,
+ println(#);
+ );
+);
+Help(strorg):=(
+//help:Help("Plot");
+//help:Help("*");
+ regional(str,sel,tmp,tmp1,tmp2,flg,Endflg);
+ if(length(HLIST)>0,flg=0,flg=-1);
+ str=replace(strorg,"'",Dq); // 15.11.25
+ if(length(str)==0,
+ forall(HLIST,
+ if(indexof(#,"*")>0,
+ println(#);
+ );
+ flg=1;
+ );
+ ,
+ if(str=="*",
+ sel=HLIST;
+ ,
+ sel=select(HLIST,substring(#,0,length(str))==str);
+ );
+ if(length(sel)>0,flg=1);
+ forall(sel,
+ tmp=indexof(#,"(");
+ if(substring(#,tmp-2,tmp-1)!="*",
+ println(#);
+ ,
+// println(substring(#,0,tmp-1));
+ tmp1=substring(#,tmp,length(#)-2);
+ tmp2=indexof(tmp1,"//");
+ Endflg=0;
+ forall(1..4,
+ if(Endflg==0,
+ tmp2=indexof(tmp1,"//");
+ if(tmp2==0,
+ println(" "+tmp1);
+ Endflg=1;
+ ,
+ println(" "+substring(tmp1,0,tmp2-1));
+ tmp1=substring(tmp1,tmp2+1,length(tmp1));
+ );
+ );
+ );
+ );
+ );
+ );
+ if(flg==-1,println(" Help not read in"));
+ if(flg==0,println(" no example"));
+);
+////%Help end////
+
+////%Helpkey start////
+Helpkey(str):=(
+ regional(tmp,tmp1,tmp2);
+ tmp1=select(HLIST,indexof(#,str)>0);
+ forall(tmp1,
+ tmp=substring(#,0,indexof(#,"*")-1);
+ Help(tmp);
+ );
+);
+Helpkey(str1,str2):=(
+//help:Helpkey(keyword);
+//help:Helpkey(keyword1,keyword2);
+ regional(tmp,tmp1,tmp2);
+ tmp1=select(HLIST,indexof(#,str1)>0);
+ tmp1=select(tmp1,indexof(#,str2)>0);
+ forall(tmp1,
+ tmp=substring(#,0,indexof(#,"*")-1);
+ Help(tmp);
+ );
+);
+////%Helpkey end////
+
+////%Example start////
+Example(exorg):=Example(exorg,"");
+Example(exorg,suborg):=(
+//help:Example("Mxfun","diff");
+ regional(ex,tmp,tmp1,tmp2);
+ ex=replace(exorg,"'",Dq);
+ sub=replace(suborg,"'",Dq);
+ setdirectory(Dirlib);
+ tmp=load("examples.txt");
+ setdirectory(Dirwork);
+ tmp=tokenize(tmp,"//");
+ tmp=tmp_(1..(length(tmp)-1));
+ tmp1=select(tmp,substring(#,0,length(ex))==ex);
+ tmp1=sort(tmp1);
+ if(length(sub)>0,
+ tmp1=select(tmp1,indexof(#,sub)>0);
+ );
+ forall(tmp1,
+ if((indexof(#,"##")>0) % (indexof(#,"~#")>0),
+ tmp=indexof(#,",");
+ println(substring(#,tmp,length(#)));
+ ,
+ println(#);
+ );
+ );
+);
+////%Example end////
+
+
+//help:end();
+
diff --git a/graphics/ketcindy/ketcindyfolder/scripts/ketlib/ketcindylibbasic3logr.txt b/graphics/ketcindy/ketcindyfolder/scripts/ketlib/ketcindylibbasic3logr.txt
new file mode 100644
index 0000000000..439a634247
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/scripts/ketlib/ketcindylibbasic3logr.txt
@@ -0,0 +1,61 @@
+// 20190623
+// Fracform,Gcd added
+// 20190618
+// Mkketcindyjs changed (Error message)
+// 20190615
+// WritetoRS,Usegraphics,Viewtex,Figpdf changed ( indexof for pict2e,tikz )
+// 20190604
+// Mkketcindyjs changed ( eqflg added )
+// 20190528
+// Animationparam changed ( stop => rng)
+// 20190524
+// Animationparam added
+// 20190522
+// Textedit2value changed
+// Tocindyform,Tocindyformpart debugged
+// Toctexform,Totexformpart debugged
+// 20190521
+// Textedit2value added
+// Tocindyform,Tocindyformpart adde
+// Totexform changed (pi => \pi, case without "()")
+// 20190515
+// Totexform,Totexformpart changed(enhanced)
+// 20190514
+// Totexform,Totexformpart added
+// Copyketcindyjs debugged ( "/" added for "cd")
+// 20190506
+// Setketcindyjs,Mkketcindyjs debugged (color)
+// 20190504
+// Mkketcindyjs changed ( rmptL,REMOVEPTJS,border,"z" )
+// 20190502
+// Mkketcindyjs changed ( only ketjs on/off added )
+// 20190430
+// Textedit added
+// Mkketcindyjs debugged ( only ketjs)
+// 20190428
+// Mkketcindyjs debugged ( basic3d => basic3 )
+// Tenkeybrd, Getkey changed
+// 20190427
+// Tenkeybrd, Getkey added
+// 20190423
+// Ketcindyjsdata and Mkketcindyjs changed
+// 20190422
+// Ketcindyjsdata added
+// Setketcindyjs, Mkketcindyjs changed ( for Ketcindyjsdata )
+// 20190419
+// Findfun debugged ( inside of "" removed )
+// 20190417
+// Mkketcindyjs changed ( Ignore options )
+// 20190416
+// Findfun, Extractun, Extractall moved from basic2
+// Mkketcindyjs, Extractall debugged ( IgnoreList, DL globalized )
+// 20190415
+// Makeshell debugged ( Dq -> Dqq )
+// Makebat debugged ( tex,path (\) )
+// parse( ..= ) changed ( ; added )
+// 20190414
+// Makeshell Makebat changed ( Dqq(fname )
+// 20190412
+// newly generated
+// Some functions moved from basic2
+// Figpdf debugged (SCALEY)
diff --git a/graphics/ketcindy/ketcindyfolder/scripts/ketlib/ketcindylibbasic3r.cs b/graphics/ketcindy/ketcindyfolder/scripts/ketlib/ketcindylibbasic3r.cs
new file mode 100644
index 0000000000..8a953f20a9
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/scripts/ketlib/ketcindylibbasic3r.cs
@@ -0,0 +1,4162 @@
+// Copyright (C) 2014 Setsuo Takato, KETCindy Japan project team
+//
+//This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see <http://www.gnu.org/licenses/>
+//
+
+println("ketcindylibbasic3[20190623] loaded");
+
+//help:start();
+
+////%Tenkeybrd start////
+Tenkeybrd(pLB):=Tenkeybrd(pLB,[]);
+Tenkeybrd(pLB,options):=(
+//help:Tenkeybrd([2,1],"Size=1.5");
+//help: Tenkeybrd(Buttons shoud be given)
+ regional(axes,xL,yL,size,shade,color,tmp,tmp1);
+ size="Size=1.5";
+ shade="Y";
+ color="Color=[0,0,0.2,0]";
+ forall(options,
+ tmp=Strsplit(#,"=");
+ tmp1=Toupper(substring(tmp_1,0,2));
+ if(tmp1=="SI",
+ size=#;
+ );
+ if(tmp1=="SH",
+ shade=Toupper(substring(tmp_2,0,1));
+ );
+ if(tmp1=="CO",
+ color=#;
+ );
+ );
+ axes=ADDAXES;
+ cell=8;
+ if(shade=="Y",
+ Framedata2("tenkey",[pLB,pLB+cell/10*[3,5]]);
+ Shade(["frtenkey"],[color]);
+ );
+ xL=apply(1..3,cell);
+ yL=apply(1..5,cell);
+ Tabledata(xL,yL,[],[0,"Setw=n","Move="+text(pLB)]);
+ Addax(axes);
+ [tmp1,tmp2];
+);
+////%Tenkeybrd end////
+
+////%Keyaction start////
+Keyaction(key):=(
+ regional(kL,kstr,endflg,sign);
+//help:Keyaction(key);
+//help:Getkey(Tenkeys should be given in advance)
+ endflg=0;
+ sign=1;
+ if(indexof(Tenkeys,"-")>0,
+ sign=-1;
+ Tenkeys=replace(Tenkeys,"-","");
+ );
+ kstr=Tenkeys;
+ if((key=="C")%(key=="A")%(key=="=")%(indexof(key,"-")>0),
+ if(key=="C",kstr=substring(kstr,0,length(kstr)-1));
+ if(key=="A",sign=1;kstr="");
+ if(key=="=",endflg=1);
+ if(indexof(key,"-")>0,sign=-sign);
+ ,
+ kstr=kstr+key;
+ );
+ if(substring(kstr,0,1)==".",kstr="0"+kstr);
+ if(sign==-1,
+ kstr="-"+kstr;
+ );
+ Tenkeys=kstr;
+ endflg;
+);
+////%Keyaction end////
+
+////%Dispchoice start////
+Dispchoice():=(
+ if(islist(Ch),
+ if(!isreal(ChNum),ChNum=1);
+ drawtext(mouse().xy,"Ch="+text(Ch)+" N="+text(ChNum),size->24,color->[0,0,1]);
+ );
+);
+////%Dispchoice end////
+
+////%Datetime start////
+Datetime():=(
+//help:Datetime();
+ regional(names,dt,tmp);
+ tmp=getdatetime();
+ dt=tokenize(tmp," ");
+ dt=apply(dt,if(!isstring(#),text(#),#));
+ names=["Jan","Feb","Mar","Apr","May","Jun",
+ "Jul","Aug","Sep","Oct","Nov","Dec"];
+ tmp=select(1..12,names_#==dt_2);
+ tmp=text(tmp_1);
+ tmp=[dt_6+"/"+tmp+"/"+dt_3,dt_4];
+);
+////%Datetime end////
+
+////%Readcsvsla start////
+Readcsvsla(fname):=Readplotdigdata(fname,[]);
+Readcsvsla(fname,options):=Readplotdigdata(fname,options);
+Readplotdigdata(fname):=Readplotdigdata(fname,[]);
+Readplotdigdata(fname,options):=(
+ regional(fsc,mv,cmdall,dataL,nd,npt,ptdata,ii,tmp,tmp1,tmp2,tmp3);
+ tmp=Divoptions(options);
+ tmp1=tmp_6;
+ sc=1;//10;
+ mv=[0,0];//[5,5];
+ forall(tmp1,
+ if(!islist(#),sc=#,mv=#);
+ );
+ if(indexof(fname,".")>0,
+ tmp=load(fname);
+ ,
+ tmp=load(fname+".txt");
+ );
+ cmdall=tokenize(tmp,"//");
+ dataL=[];
+ forall(2..length(cmdall),ii,
+ tmp1=parse("["+cmdall_ii+"]");
+ dataL=append(dataL,tmp1);
+ );
+ if(length(dataL_(length(dataL)))<2,
+ dataL=dataL_(1..(length(dataL)-1));
+ );
+ nd=length(dataL_1)/2;
+ npt=length(dataL);
+ ptdata=[];
+ forall(1..nd,ii,
+ tmp3=[];
+ forall(1..npt,
+ tmp1=dataL_#_(2*ii-1);
+ tmp2=dataL_#_(2*ii);
+ if(isreal(tmp1),
+ tmp3=append(tmp3,[tmp1,tmp2]);
+ );
+ );
+ ptdata=append(ptdata,tmp3);
+ );
+ tmp1=[];
+ forall(ptdata,
+ tmp=#/sc;
+ tmp=Translatedata("1",[tmp],-mv,["nodata"]);
+ tmp1=append(tmp1,tmp);
+ );
+ ptdata=tmp1;
+ ptdata;
+);
+////%Readcsvsla end////
+
+////%Writebezier start////
+Writebezier():=Writebezier(Fhead,"all");
+Writebezier(head):=Writebezier(head,"all");
+Writebezier(head,seL):=(
+//help:Writebezier(file);
+//help:Writebezier(file,"acd");
+ regional(bz,dt,name,tmp,tmp1,tmp2);
+ bz=select(GLIST,indexof(#,"=Bezier")>0);
+ tmp1=[]; // 16.04.22from
+ if(seL!="all",
+ forall(1..length(seL),
+ tmp=substring(seL,#-1,#);
+ tmp=select(bz,indexof(#,"bz"+tmp)>0);
+ tmp1=concat(tmp1,tmp);
+ );
+ bz=tmp1;// 16.04.22until
+ );
+ dt=[head+"n",[[length(bz),0]]];
+ forall(1..length(bz),
+ tmp=indexof(bz_#,"=");
+ name=substring(bz_#,0,tmp-1);
+ tmp=indexof(bz_#,","+Dq);
+ if(tmp>0,
+ tmp1=substring(bz_#,0,tmp-1)+")";
+ ,
+ tmp1=bz_#;
+ );
+ tmp1=replace(tmp1,"Bezier(","[");
+ tmp1=replace(tmp1,"list"+PaO(),"[");
+ tmp1=replace(tmp1,")","]");
+ tmp1=replace(tmp1,",",".xy,");
+ tmp1=replace(tmp1,"]",".xy]");
+ tmp1=replace(tmp1,".xy,[",",[");
+ tmp1=replace(tmp1,"].xy","]");
+ tmp1=replace(tmp1,name,head+text(#))+";"; //190415
+ parse(tmp1);
+ tmp=parse(head+text(#)+"_1");
+ dt=concat(dt,[head+text(#)+"k",tmp]);
+ tmp=parse(head+text(#)+"_2");
+ dt=concat(dt,[head+text(#)+"c",tmp]);
+ );
+ WriteOutData(head+".txt",dt);
+ dt;
+);
+////%Writebezier end////
+
+////%Readbezier start////
+Readbezier(file):=Readbezier(file,[]);
+Readbezier(file,optionorg):=(
+//help:Readbezier("xsr");
+//help:Readbezier(options=["Num=10","nogeo"]);
+ regional(nn,options,stL,geo,nc,alpha,out,tmp,tmp1,tmp2,tmp3);
+ options=optionorg;
+ tmp=Divoptions(options);
+ stL=tmp_7;
+ geo=0;
+ forall(stL,
+ tmp=Toupper(substring(#,0,1));
+ if(tmp=="G",geo=1);
+ options=remove(options,[#]);
+ );
+ Readoutdata(file);
+ tmp=file+"n_1_1";
+ nn=parse(tmp);
+ out=[];
+ forall(1..nn,nc,
+ tmp=file+text(nc);
+ tmp1=parse(tmp+"k");
+ tmp2=parse(tmp+"c");
+ if(Measuredepth(tmp2)==1,tmp2=[tmp2]); // 16.04.22from
+ if(geo==1,
+ alpha="abcdefghijklmnopqrstuvwxyz";
+ forall(1..length(tmp1),
+ tmp="k"+BezierNumber+"n"+text(nc)+substring(alpha,#-1,#);
+ Putpoint(tmp,tmp1_#,parse(tmp+".xy"));
+ inspect(parse(tmp),"labeled",false);
+ inspect(parse(tmp),"ptsize",3);
+ tmp1_#=parse(tmp+".xy");
+ );
+ forall(1..length(tmp2),
+ tmp="c"+BezierNumber+"n"+text(nc)+substring(alpha,#-1,#)+"1";
+ Putpoint(tmp,tmp2_#_1,parse(tmp+".xy"));
+ inspect(parse(tmp),"labeled",false);
+ inspect(parse(tmp),"color",4);
+ inspect(parse(tmp),"ptsize",3);
+ tmp2_#_1=parse(tmp+".xy");
+ tmp="c"+BezierNumber+"no"+text(nc)+substring(alpha,#-1,#)+"2";
+ Putpoint(tmp,tmp2_#_2,parse(tmp+".xy"));
+ inspect(parse(tmp),"labeled",false);
+ inspect(parse(tmp),"color",4);
+ inspect(parse(tmp),"ptsize",3);
+ tmp2_#_2=parse(tmp+".xy");
+ );
+ BezierNumber=BezierNumber+1;
+ );
+ Bezier(file+text(nc),tmp1,tmp2,options);// 16.04.22until
+ out=append(out,"bz"+tmp);
+ );
+ out;
+);
+////%Readbezier end////
+
+////%RSform start////
+RSform(str):=RSform(str,3);
+RSform(str,listfrom):=(
+//help:RSform(string,listfrom);
+ regional(posL,mxlv,rep1,rep2,rep3,prev,out,
+ tmp,tmp1,tmp2);
+ rep1="c"+PaO(); rep2="c"+PaO(); rep3="list"+PaO();
+ if(listfrom<3,rep2="list"+PaO());
+ if(listfrom==1,rep1="list"+PaO());
+ posL=Bracket(str,"[]");
+ tmp=apply(posL,#_2);
+ mxlv=max(tmp);
+ out="";
+ prev=0;
+ forall(posL,
+ out=out+substring(str,prev,#_1-1);
+ prev=#_1;
+ if(#_2>0,
+ tmp1=select(posL,tmp,(tmp_2<0)&(tmp_1>#_1));
+ tmp1=tmp1_1_1;
+ tmp=substring(str,#_1,tmp1);
+ if(#_2==mxlv,out=out+rep1);
+ if(#_2==mxlv-1,out=out+rep2);
+ if(#_2<=mxlv-2,out=out+rep3);
+ ,
+ out=out+")";
+ );
+ );
+ out=out+substring(str,prev,length(str));
+ out=replace(out,".xy","");
+ out=replace(out,".x","[1]");
+ out=replace(out,".y","[2]");
+ out=replace(out,"c"+PPa("1"),"[1]");//17.10.06[2lines]
+ out=replace(out,"c"+PPa("2"),"[2]");
+ out;
+);
+////%RSform end////
+
+////%RSslash start////
+RSslash(str):=( //17.09.24
+ regional(tmp);
+ tmp=replace(str,"\","\\");
+// tmp=replace(tmp,"\\\\","\\");
+ tmp;
+);
+////%RSslash end////
+
+////%Rform start////
+Rform(list):=(
+ regional(plotlist,comp,pos,out,strL,tmp,tmp1,tmp2,tmp3,Nj);
+ out=list;
+ out=replace(out,"[[[","list"+PaO()+"[[");
+ out=replace(out,"[","c"+PaO());
+ out=replace(out,"]",")");
+ out=replace(out,".xy","");
+ out=replace(out,".x","[1]");
+ out=replace(out,".y","[2]");
+ out;
+);
+////%Rform end////
+
+////%Defvar start////
+Defvar(varstr):=(
+ regional(name,value,tmp,tmp1);
+ if(isstring(varstr),
+ parse(varstr+";");
+ tmp=indexof(varstr,"=");
+ name=substring(varstr,0,tmp-1);
+ value=substring(varstr,tmp,length(varstr));
+ value=parse(value);
+ tmp1=select(1..length(VLIST),VLIST_#_1==name);
+ if(length(tmp1)>0,
+ tmp=tmp1_1;
+ VLIST_tmp=[name,value];
+ ,
+ VLIST=prepend([name,value],VLIST);
+ );
+ ,
+ forall(1..(length(varstr)/2), // 16.11.16from
+ name=varstr_(2*#-1);
+ value=varstr_(2*#);
+ Defvar(name,value);
+ ); // 16.11.16until
+ );
+);
+Defvar(name,value):=(
+//help:Defvar("a",0.3);
+//help:Defvar(["a",0.3,"b",2]);
+ regional(tmp,tmp1);
+ if(islist(value),
+ tmp1="[";
+ forall(value,
+ if(isstring(#), // 16.11.14
+ tmp1=tmp1+Dq+#+Dq+","; // 16.11.14
+ ,
+ tmp1=tmp1+format(#,5)+",";
+ );
+ );
+ tmp1=substring(tmp1,0,length(tmp1)-1)+"]";
+ ,
+ tmp1=format(value,5);
+ );
+ tmp=name+"="+tmp1+";"; // 15.02.06//190415
+ parse(tmp);
+ VLIST=select(VLIST,#_1!=name); // 15.02.08
+ VLIST=prepend([name,value],VLIST);
+);
+////%Defvar end////
+
+////%IftoR start////
+IftoR(strorg):=( //180802
+ regional(str,ifL,ppL,cpL,kk,sL,out,
+ tmp,tmp1,tmp2,tmp3,tmp4);
+ str=replace(strorg,LFmark,"");
+ ifL=Indexall(str,"if"+PaO());
+ ppL=Bracket(str,"()");
+ cpL=Indexall(str,",");
+ tmp1=Bracket(str,"[]");
+ forall(1..(length(tmp1)/2),kk,
+ cpL=select(cpL,#<tmp1_(2*kk-1)_1%#_1>tmp1_(2*kk)_1);
+ );
+ forall(1..length(ifL),kk,
+ tmp=select(ppL,#_1>ifL_kk);
+ tmp1=tmp_1;
+ tmp2=select(tmp,#_2==-tmp1_2);
+ tmp2=tmp2_1;
+ tmp3=select(cpL,#>tmp1_1 & #<tmp2_1);
+ ifL_kk=[tmp1_1,tmp2_1,tmp1_2,tmp3];
+ );
+ forall(1..length(cpL),kk,
+ tmp=select(1..length(ifL),contains(ifL_#_4,cpL_kk));
+ tmp1=tmp_(length(tmp));
+ cpL_kk=[cpL_kk,tmp1];
+ );
+ sL=apply(1..length(str),substring(str,#-1,#));
+ forall(1..length(ifL),kk,
+ tmp1=ifL_kk_1;
+ tmp2=ifL_kk_2;
+ tmp=select(cpL,#_2==kk);
+ tmp3=apply(tmp,#_1);
+ sL_tmp1="(";
+ sL_tmp2="}";
+ sL_(tmp3_1)="){";
+ if(length(tmp3)>1,
+ sL_(tmp3_2)="}else{";
+ );
+ );
+ out=sum(sL);
+ out;
+);
+////%IftoR end////
+
+////%FortoR start////
+FortoR(strorg):=(
+ regional(str,pre,post,sub,ppL,forstr,out,tmp,tmp1,tmp2);
+ str=strorg;
+ forstr=indexof(str,"forall(");
+ if(forstr==0,
+ out=str;
+ ,
+ pre=substring(str,0,forstr-1)+"for"+PaO();
+ ppL=Bracket(str,"()");
+ tmp1=forstr+6;
+ tmp=select(ppL,#_1==tmp1);
+ tmp=select(ppL,#_2==-tmp_1_2);
+ tmp2=tmp_1_1;
+ sub=substring(str,tmp1,tmp2-1);
+ post="}"+substring(str,tmp2,length(str));
+ tmp=indexof(sub,",");
+ tmp1=substring(sub,0,tmp-1);
+ tmp2=substring(sub,tmp,length(sub));
+ sub=tmp1+"){"+tmp2;
+ tmp1=indexof(sub,"{");
+ tmp2=indexof(sub,",");
+ tmp=substring(sub,tmp1,tmp2-1);
+ pre=pre+tmp+" in "+substring(sub,0,tmp1-1)+"{";
+ sub=substring(sub,tmp2,length(sub));
+ tmp=FortoR(sub);
+ out=pre+tmp+"}";
+ );
+ out=replace(out,"..",":");
+ out;
+);
+////%FortoR end////
+
+////%Deffun start////
+Deffun(name,bodylist):=(
+//help:Deffun("f(x)",["regional(y)","y=x^2*(x-3)","y"]);
+ regional(funstr,str,Pos,nbody,bdy,ppL,bpL,excma,tmp,tmp1,tmp2);
+ funstr=name+":=(";
+ forall(bodylist,
+ funstr=funstr+#+";";
+ );
+ funstr=funstr+");";
+ parse(funstr);
+ tmp=indexof(name,"(");
+ str=substring(name,0,tmp-1)+"<-function"+PaO();
+ str=str+substring(name,tmp,length(name))+"{";
+ forall(1..(length(bodylist)-1),nbody,
+ bdy=bodylist_nbody;
+ Pos=indexof(bdy,"regional")+indexof(bdy,"local");
+ if(Pos==0,
+ bdy=replace(bdy,LFmark,"");
+ bdy=replace(bdy," ","");
+ ppL=Bracket(bdy,"()");
+ bpL=Bracket(bdy,"[]");
+ tmp1=select(bpL,#_2==1);
+ tmp2=select(bpL,#_2==-1);
+ excma=[];
+ forall(1..(length(tmp1)),
+ excma=append(excma,[tmp1_#_1,tmp2_#_1]);
+ );
+ tmp1=Indexall(bdy,",");
+ forall(tmp1,cma,
+ tmp=select(excma,(#_1<cma)&(cma<#_2));
+ if(length(tmp)>0,
+ bdy=substring(bdy,0,cma-1)+"'"+substring(bdy,cma,length(bdy));
+ );
+ );
+ tmp=indexof(bdy,"forall");
+ if(tmp>0,
+ bdy=FortoR(bdy);
+ );
+ tmp=indexof(bdy,"if(");
+ if(tmp>0,
+ bdy=IftoR(bdy);
+ );
+ bdy=RSform(replace(bdy,"'",","));
+ str=str+bdy+";";
+ );
+ );
+ str=str+"return"+PaO()+bodylist_(length(bodylist))+")}";
+ FUNLIST=append(FUNLIST,str);
+);
+////%Deffun end////
+
+////%WritetoRS start////
+WritetoSci():=WritetoRS(); //17.12.19
+WritetoSci(Arg):=WritetoRS(Arg);//180619
+WritetoRS():=WritetoRS(FnameR);// 17.09.17from
+WritetoRS(Arg):=(
+ regional(string,filename,shch,tmp1,tmp2);
+ if(isstring(Arg),
+ string=Arg;
+ if(indexof(string,".r")>0,
+ filename=string;
+ shch="";
+ ,
+ filename=FnameR;
+ shch=string;
+ );
+ WritetoRS(filename,shch);
+ ,
+ if(Arg<=1,WritetoRS(FnameR,"all"));
+ if(Arg==2,WritetoRS(FnameR,"sh"));
+ );
+);
+WritetoRS(filename,shchoice):=(
+ regional(Plist,Pos,GrL,str,tmp,tmp1,tmp2,cmd,ns,spos,epos);
+ //help:WritetoRS(2);
+ println("Write to R "+filename);
+ Plist=[];
+ Pnamelist=[];
+ forall(remove(allpoints(),[SW,NE]),
+ if(indexof(#.name,"[")==0, //181106
+ tmp=Lcrd(#);
+ tmp1=format(re(tmp_1),6);// 15.02.05
+ tmp2=format(re(tmp_2),6);
+ tmp=#.name+"="+"c("+tmp1+","+tmp2+");";
+ tmp=tmp+"Assignadd('"+#.name+"',"+#.name+")";
+ Plist=append(Plist,tmp);
+ ,
+ println("Remove the abnormal poiint "+#.name); //181106
+ );
+ );
+ SCEOUTPUT = openfile(filename);
+ tmp=Datetime();
+ println(SCEOUTPUT,"# date time="+tmp_1+" "+tmp_2);
+ if(isstring(CindyName), // 16.12.25from
+ if(length(CindyPathName)>0,
+ println(SCEOUTPUT,
+ "# path file="+CindyPathName+" "+CindyFileName+".cdy");
+ ,
+ println(SCEOUTPUT,"");
+ );
+ ,
+ println(SCEOUTPUT,"");
+ );
+ if(iswindows(),
+ println(SCEOUTPUT,"options"+PaO()+"encoding='UTF-8')"); //190111
+ );
+ tmp1=replace(Dirwork,"\","/");
+ if((iswindows())&(indexof(tmp1,"Users")>0),
+ tmp=Indexall(tmp1,"/");
+ tmp2=substring(tmp1,tmp_3-1,length(tmp1));
+ tmp1=substring(tmp1,0,tmp_3-1);
+ println(SCEOUTPUT,"Drv=shell"+PaO()+"'echo %HOMEDRIVE%',intern=TRUE)"); //190111
+ println(SCEOUTPUT,"Drv=Drv[length"+PaO()+"Drv)]");
+ println(SCEOUTPUT,"Hpath=shell"+PaO()+"'echo %HOMEPATH%',intern=TRUE)");
+ println(SCEOUTPUT,"Hpath=Hpath[length"+PaO()+"Hpath)]");
+ println(SCEOUTPUT,"Rest="+Dqq(tmp2));
+ println(SCEOUTPUT,"Path=paste"+PaO()+"Drv,Hpath,Rest,sep='')");
+ println(SCEOUTPUT,"Path=gsub"+PaO()+"'\\','/',Path,fixed=TRUE)"); //180610
+ println(SCEOUTPUT,"setwd"+PaO()+"Path)");
+ ,
+ println(SCEOUTPUT,"setwd"+PaO()+"'"+tmp1+"')");
+ );//180409to
+ tmp=replace(Libname,"\","/"); //17.09.24from
+ println(SCEOUTPUT,"source"+PaO()+"'"+tmp+".r')"); //181213
+ if((indexof(PathT,"pdflatex")>0)%(indexof(PathT,"lualatex")>0),
+ if(GPACK=="tpic",GPACK="pict2e");
+ );
+ if(indexof(GPACK,"pict2e")>0, // 190615
+ tmp=replace(tmp+"_rep2e","\","/");
+ println(SCEOUTPUT,"source('"+tmp+".r')");
+ );
+ if(indexof(GPACK,"tikz")>0, //181213from //190615
+ tmp=replace(tmp+"_reptikz","\","/");
+ println(SCEOUTPUT,"source"+PaO()+"'"+tmp+".r')");
+ ); //181213to
+ println(SCEOUTPUT,"Ketinit"+PPa(""));
+ println(SCEOUTPUT,"cat"+PaO()+"ThisVersion,'\n')");
+ println(SCEOUTPUT,"Fnametex='"+Fnametex+"'");
+ println(SCEOUTPUT,"FnameR='"+FnameR+"'");
+ println(SCEOUTPUT,"Fnameout='"+Fnameout+"'");
+ println(SCEOUTPUT,"arccos=acos; arcsin=asin; arctan=atan");
+ println(SCEOUTPUT,"Acos<- function"+PPa("x")+"{acos"+PaO()+"max"+PaO()+"-1,min"+PaO()+"1,x)))}");
+ println(SCEOUTPUT,"Asin<- function"+PPa("x")+"{asin"+PaO()+"max"+PaO()+"-1,min"+PaO()+"1,x)))}");
+ println(SCEOUTPUT,"Atan=atan");
+ println(SCEOUTPUT,"Sqr<- function"+PPa("x")+"{if"+PaO()+"x>=0){sqrt"+PaO()+"x)}else{0}}");
+ println(SCEOUTPUT,"Factorial=factorial");
+ println(SCEOUTPUT,"Norm<- function"+PPa("x")+"{norm"+PaO()+"matrix"+PaO()+"x,nrow=1),"+Dqq("2")+")}");
+ println(SCEOUTPUT,"");
+ forall(COM0thlist,
+ if(indexof(#,"Texcom")==0, //17.09.22
+ println(SCEOUTPUT,RSform(#));
+ ,
+ println(SCEOUTPUT,#);
+ );
+ );
+ println(SCEOUTPUT,
+ "Setwindow(c"+PaO()+XMIN+","+XMAX+"), c"+PaO()+YMIN+","+YMAX+"))");
+ forall(Plist,
+ println(SCEOUTPUT,#);
+ );
+ VLIST=select(VLIST,substring(#_1,0,1)!="["); //181107
+ forall(VLIST,
+ tmp=#_1;
+ tmp1=#_2;
+ if(!isstring(tmp1),
+ if(islist(tmp1),
+ tmp2="[";
+ forall(tmp1,
+ tmp2=tmp2+Textformat(#,6)+",";
+ );
+ tmp1=substring(tmp2,0,length(tmp2)-1)+"]";
+ ,
+ tmp1=format(tmp1,6);
+ );
+ );
+ tmp1=RSform(tmp1);
+ print(SCEOUTPUT,tmp+"="+tmp1+";"); //17.09.22
+// tmp=substring(tmp,0,length(tmp)-1);
+ println(SCEOUTPUT,"Assignadd"+PaO()+"'"+tmp+"',"+tmp+")");
+ );
+ forall(FUNLIST,
+ println(SCEOUTPUT,#);
+ );
+ forall(GLIST, //no ketjs on
+ println(SCEOUTPUT,RSform(#));
+ ); //no ketjs off
+ tmp=text(Pnamelist);
+ tmp=replace(tmp,"[","list"+PaO());
+ Pnamelist=replace(tmp,"]",")");
+ println(SCEOUTPUT,"PtL="+Pnamelist);
+ tmp=select(GCLIST,#_2==-1);
+ GrL=apply(tmp,#_1);
+ tmp=text(GrL);
+ tmp=replace(tmp,"[","list"+PaO());
+ tmp=replace(tmp,"]",")");
+ println(SCEOUTPUT,"GrL="+tmp);
+ tmp1="";
+ if(length(tmp1)>0,
+ tmp1="WriteOutData"+PaO()+"Fnameout"+tmp1+");";
+ println(SCEOUTPUT,tmp1);
+ );
+ forall(COM1stlist,
+ if(indexof(#,"Texcom")==0, //17.09.22
+ println(SCEOUTPUT,RSform(#));
+ ,
+ println(SCEOUTPUT,#);
+ );
+ );
+ println(SCEOUTPUT,"");
+ println(SCEOUTPUT,"# Windisp"+PPa("GrL"));
+ println(SCEOUTPUT,"");
+ println(SCEOUTPUT,"if"+PaO()+"1==1){");
+ println(SCEOUTPUT,"");
+ tmp1=replace(Dirwork,"\","/"); //180408to
+ if((iswindows())&(indexof(tmp1,"Users")>0),
+ println(SCEOUTPUT,"Path=paste"+PaO()+"Path,"+Dqq("/"+Fnametex)+",sep='')");
+ tmp="Openfile(Path,'"+ULEN+"'";
+ ,
+ tmp="Openfile('"+tmp1+"/"+Fnametex+"','"+ULEN+"'";
+ );
+ tmp=tmp+",'Cdy="+Cindyname()+".cdy"; //180404
+ tmp=replace(tmp,"\","\\");
+ println(SCEOUTPUT,tmp+"')");
+ forall(COM2ndlistb, //180613from
+ if(indexof(#,"Texcom")==0,
+ println(SCEOUTPUT,RSform(#));
+ ,
+ println(SCEOUTPUT,#);
+ );
+ );//180613to
+ forall(COM2ndlist,cmd,
+ tmp=substring(cmd,0,4);
+ if(contains(["Lett","Expr"],tmp), //180721from
+ tmp1=Indexall(cmd,Dq);
+ tmp2=length(tmp1)/4;
+ str=""; ns=0;
+ forall(tmp2,
+ spos=tmp1_(4*#-1); epos=tmp1_(4*#);
+ str=str+RSform(substring(cmd,ns,spos-1));
+ str=str+substring(cmd,spos-1,epos);
+ ns=epos;
+ );
+ str=str+substring(cmd,ns,length(cmd));
+ println(SCEOUTPUT,str);
+ ,
+ if(indexof(cmd,"Texcom")==0,
+ println(SCEOUTPUT,RSform(cmd));
+ ,
+ println(SCEOUTPUT,cmd);
+ );
+ ); //180721to
+ );
+ if(length(GrL)>0,
+ println(SCEOUTPUT," Drwline"+PPa("GrL"));
+ );
+ // println(SCEOUTPUT,"Closefile"+PaO()+"'"+ADDAXES+"')"); //181224(2line)
+ println(SCEOUTPUT,"Closefile"+PaO()+""+Dqq("0")+")");
+ println(SCEOUTPUT,"");
+ println(SCEOUTPUT,"}");
+ if(shchoice=="sh",
+ println(SCEOUTPUT,"");
+ println(SCEOUTPUT,"quit"+PPa(""));
+ ,
+ println(SCEOUTPUT,"");
+ println(SCEOUTPUT,"#quit"+PPa(""));
+ );
+ closefile(SCEOUTPUT);
+ if(iswindows(), //180513from
+ SCEOUTPUT = openfile("execsrc.r");//180514
+ tmp1=replace(Dirwork,"\","/");
+ if(indexof(tmp1,"Users")>0,
+ tmp=Indexall(tmp1,"/");
+ tmp2=substring(tmp1,tmp_3-1,length(tmp1));
+ tmp1=substring(tmp1,0,tmp_3-1);
+ println(SCEOUTPUT,"Drv=shell"+PaO()+"'echo %HOMEDRIVE%',intern=TRUE)");
+ println(SCEOUTPUT,"Drv=Drv[length"+PaO()+"Drv)]");
+ println(SCEOUTPUT,"Hpath=shell"+PaO()+"'echo %HOMEPATH%',intern=TRUE)");
+ println(SCEOUTPUT,"Hpath=Hpath[length"+PaO()+"Hpath)]");
+ println(SCEOUTPUT,"Rest="+Dqq(tmp2));
+ println(SCEOUTPUT,"Path=paste"+PaO()+"Drv,Hpath,Rest,sep='')");
+ println(SCEOUTPUT,"setwd"+PaO()+"Path)");
+ println(SCEOUTPUT,"source"+PaO()+"'"+filename+"',encoding='UTF-8')");
+ );
+ closefile(SCEOUTPUT);
+ ); //180513to
+);
+////%WritetoRS end////
+
+////%Readoutdata start////
+Readoutdata():=Readoutdata(Fnameout);
+Readoutdata(filename):=Readoutdata("",filename); //16.03.07
+Readoutdata(Arg1,Arg2):=( //181030from
+ if(islist(Arg2),
+ Readoutdata("",Arg1,Arg2);
+ ,
+ Readoutdata(Arg1,Arg2,[]);
+ );
+); //181030to
+Readoutdata(pathorg,filenameorg,optionsorg):=(
+//help:Readoutdata();
+//help:Readoutdata("file.txt");
+//help:Readoutdata("/datafolder","file.txt");
+//help:Readoutdata(options=["Disp=n(/y)]");
+ regional(options,path,filename,varname,varL,ptL,pts,tmp,tmp1,tmp2,tmp3,tmp4,
+ nmbr,cmdall,cmd,cmdorg,outdt,goutdt,eqL,dispflg);
+ options=optionsorg;
+ dispflg=1;
+ tmp=Divoptions(options); //181024from
+ eqL=tmp_5;
+ forall(eqL,
+ tmp=Strsplit(#,"=");
+ tmp1=substring(tmp_1,0,1); tmp1=Toupper(tmp1);
+ tmp2=substring(tmp_2,0,1); tmp2=Toupper(tmp2);
+ if(tmp1=="D",
+ if(tmp2=="N",dispflg=0);
+ options=remove(options,[#]); //181030
+ );
+ ); //181024to
+ path=pathorg; //16.03.07 from
+ if(length(path)>0,
+ setdirectory(path);
+ if(indexof(path,"\")>0,tmp1="\",tmp1="/");
+ tmp=substring(path,length(path)-1,length(path));
+ if(tmp!=tmp1,path=path+tmp1);
+ ); //16.03.07to
+ filename=filenameorg; // 16.04.17
+ if(indexof(filename,".")==0,filename=filename+".txt");
+ tmp=load(filename);
+ cmdall=tokenize(tmp,"//");
+ varname=cmdall_1;
+ cmdall=cmdall_(2..length(cmdall));
+ outdt=[];
+ varL=[varname];
+ ptL=[];
+ forall(cmdall,cmdorg,
+ cmd=replace(cmdorg,LFmark,"");
+ if(length(cmd)>0,
+ if(cmd=="start" % cmd=="end" % substring(cmd,0,1)=="[",
+ if(cmd=="start",
+ pts=[];
+ );
+ if(cmd=="end",
+ ptL=append(ptL,pts);
+ );
+ if(substring(cmd,0,1)=="[",
+ tmp1=parse(cmd);
+ if(length(tmp1_1)==2,
+ tmp1=apply(tmp1,Pcrd(#));
+ );
+ pts=concat(pts,tmp1);
+ );
+ ,
+ if(length(ptL)>0,
+ if(length(ptL)==1,
+ ptL=ptL_1;
+ tmp=apply(ptL,Textformat(#,6));
+ ,
+ tmp="[";
+ forall(ptL,tmp1,
+ tmp=tmp+apply(tmp1,Textformat(#,6))+",";
+ );
+ tmp=substring(tmp,0,length(tmp)-1)+"]";
+ );
+ ,
+ tmp="[]";
+ );
+ parse(varname+"="+tmp+";"); //190415
+ outdt=append(outdt,ptL);
+ ptL=[];
+ varname=cmd;
+ varL=append(varL,varname);
+ );
+ );
+ );
+ if(length(ptL)>0,
+ if(length(ptL)==1,
+ ptL=ptL_1;
+ tmp=apply(ptL,Textformat(#,6));
+ ,
+ tmp="[";
+ forall(ptL,tmp1,
+ tmp=tmp+apply(tmp1,Textformat(#,6))+",";
+ );
+ tmp=substring(tmp,0,length(tmp)-1)+"]";
+ );
+ ,
+ tmp="[]";
+ );
+ parse(varname+"="+tmp+";"); //190415
+ outdt=append(outdt,ptL);
+ if(path=="",tmp=filename,tmp=path+filename); //16.03.07
+ GOUTLIST=append(GOUTLIST,[tmp,varL]);
+ if(length(path)>0, // 16.03.09
+ setdirectory(Dirwork); // 16.03.07
+ );
+ print("readoutdata from "+tmp+" : ");
+ if(dispflg==1, //181024from
+ println(varL);
+ ,
+ println("");
+ ); //181024to
+ varL;
+);
+////%Readoutdata end////
+
+////%Writeoutdata start////
+Writeoutdata(filename,ptlist):=(
+//help:Writeoutdata("file.txt",["g1",gr1,"sg",sgAB]);
+//help:Writeoutdata("file.txt",["g1",gr1,"sg",sgAB]);
+ regional(nn,Gname,Gdata,Str,Gstr,Gj,Pt,Flg,tmp,tmp1,loopend);
+ Flg=0;
+ if(isstring(ptlist_(length(ptlist))),
+ Flg=1;
+ );
+ SCEOUTPUT = openfile(filename);
+ if(Flg==0,
+ loopend=length(ptlist)/2;
+ ,
+ loopend=length(ptlist);
+ );
+ Gstr="[";
+ forall(1..loopend,nn,
+ if(Flg==0,
+ Gname=ptlist_(2*nn-1);
+ ,
+ Gname=ptlist_nn;
+ );
+ Gstr=Gstr+Gname+",";
+ println(SCEOUTPUT,Gname+"//");
+ if(Flg==0,
+ Gdata=ptlist_(2*nn);
+ ,
+ Gdata=parse(Gname);
+ );
+ Gdata=Flattenlist(Gdata);
+ if(Measuredepth(Gdata)==1,Gdata=[Gdata]);
+ forall(Gdata,Gj,
+ println(SCEOUTPUT,"start//");
+ Str="";
+ forall(Gj,Pt,
+ if(length(Str)>0,
+ Str=Str+","
+ );
+ Str=Str+"["+format(Pt_1,5)+",";
+ Str=Str+format(Pt_2,5);
+ if(length(Pt)<3,
+ Str=Str+"]";
+ ,
+ Str=Str+","+format(Pt_3,5)+"]";
+ );
+ if(length(Str)>80,
+ println(SCEOUTPUT,"["+Str+"]//");
+ Str="";
+ );
+ );
+ if(length(Str)>0,
+ println(SCEOUTPUT,"["+Str+"]//");
+ );
+ if((nn==loopend) & (Gj==Gdata_(length(Gdata))),
+ println(SCEOUTPUT,"end////");
+ ,
+ println(SCEOUTPUT,"end//");
+ );
+ );
+ );
+ closefile(SCEOUTPUT);
+ Gstr=substring(Gstr,0,length(Gstr)-1)+"]";
+ println("writeoutdata "+filename+":"+Gstr);
+);
+////%Writeoutdata end////
+
+////%Makeshell start////
+Makeshell():=(
+ if(length(Texmain)>0,
+ Texparent=Texmain;
+ );
+ if(length(Texparent)>0,
+ Makeshell(Texparent);
+ if(length(FigPdfList)>0,
+ SCEOUTPUT=openfile(Texparent+".tex");
+ forall(FigPdfList,println(SCEOUTPUT,#));
+ closefile(SCEOUTPUT);
+ );
+ ,
+ Makeshell(Fhead+"main");
+ );
+);
+Makeshell(texmainfile):=Makeshell(texmainfile,"rtv");
+Makeshell(texmainfile,flow):=(
+ regional(parent,tmp,tmp1,tmp2,tmp3,flg,tex,path,shnm);
+ parent=Dirwork+Shellparent; // 16.05.29
+ kc():=(
+ println("kc : "+kc(Dirwork+Shellparent,Mackc+Dirlib,Fnametex)); // 16.06.04,06.07
+ );
+ tmp1="";
+// tmp2=parent;
+ flg=0;
+ forall(reverse(1..length(parent)),
+ if(flg==0,
+ tmp=substring(parent,#-1,#);
+ if(tmp=="/" % tmp=="\", // 14.01.15
+ tmp1=substring(parent,0,#-1);
+ tmp2=substring(parent,#,length(parent));
+ flg=1;
+ );
+ );
+ );
+ if(length(tmp1)>0,
+ setdirectory(tmp1);
+ );
+ SCEOUTPUT = openfile(tmp2);
+ println(SCEOUTPUT,"#!/bin/sh");
+ println(SCEOUTPUT,"cd "+Dqq(Dirwork)); // 15.07.16
+ tmp1=" "+Dqq(Fhead)+" "+Dqq(texmainfile); // 15.12.11 //190415from
+ tmp=Indexall(PathT,"/");
+ flg=length(tmp);
+ if(flg>0,
+ tmp=tmp_(length(tmp));
+ tex=substring(PathT,tmp,length(PathT));
+ path=substring(PathT,0,tmp-1);
+ ); //190415to
+ if(flg==0, // 17.10.13[Norbert]
+ tex=PathT;
+ path="";
+ );
+ if(indexof(flow,"r")>0,
+ tmp=Dqq(PathR)+" --vanilla --slave < "+Dqq(Fhead+".r"); //190414
+ // 17.09.14
+ println(SCEOUTPUT,tmp);
+ );
+ if(tex=="latex" % tex=="platex" % tex=="uplatex", //17.08.13
+ tmp=Dqq(PathT)+" "+Dqq(texmainfile+".tex"); //190415
+ println(SCEOUTPUT,tmp);
+ if(indexof(flow,"tt")>0,println(SCEOUTPUT,tmp)); //17.10.14
+ tmp=replace(Dqq(PathT),tex,"dvipdfmx")+" "+Dqq(texmainfile+".dvi"); //190415
+ println(SCEOUTPUT,tmp);
+ tmp="rm "+Dqq(texmainfile+".dvi"); //190414
+ println(SCEOUTPUT,tmp);
+ );
+ if(tex=="xelatex",
+ tmp="export PATH="+path+":${PATH}";
+ println(SCEOUTPUT,tmp);
+ tmp="xelatex"+" "+Dqq(texmainfile+".tex"); //190414
+ println(SCEOUTPUT,tmp);
+ if(indexof(flow,"tt")>0,println(SCEOUTPUT,tmp)); //17.10.14
+ tmp="rm "+Dqq(texmainfile+".dvi"); //190414
+ println(SCEOUTPUT,tmp);
+ );
+ if(tex=="pdflatex" % tex=="pdftex",//16.11.22from
+ tmp=Dqq(PathT)+" "+Dqq(texmainfile+".tex"); //190414
+ println(SCEOUTPUT,tmp);
+ if(indexof(flow,"tt")>0,println(SCEOUTPUT,tmp)); //17.10.14
+ );//16.11.22until
+ if(tex=="lualatex",//16.12.16
+ tmp=Dqq(PathT)+" "+Dqq(texmainfile+".tex"); //190414
+ println(SCEOUTPUT,tmp);
+ if(indexof(flow,"tt")>0,println(SCEOUTPUT,tmp)); //17.10.14
+ );//16.12.16
+ if(!isstring(Pathpdf),
+ tmp="preview";
+ ,
+ tmp=Pathpdf;
+ );
+ if(tmp=="preview" % tmp=="skim", // 16.09.09from,16.10.20
+ tmp="open -a "+Dqq(tmp)+" "+Dqq(texmainfile+".pdf"); //190414
+ ,
+ tmp=Dqq(tmp)+" "+Dqq(texmainfile+".pdf"); //190414
+ );// 16.09.09until
+ println(SCEOUTPUT,tmp); // 16.07.21until
+ println(SCEOUTPUT,"exit 0");
+ closefile(SCEOUTPUT);
+ setdirectory(Dirwork);
+);
+////%Makeshell end////
+
+////%Convsjiswin start////
+Convsjiswin(dir,fname,ext):=( //180401
+ regional(ctr,flg,mx,tmp);
+ mx=200;
+ ctr=0;flg=0;
+ nkfwin(dir,fname,ext);
+ while((!isexists(dir,fname+".out"))&(ctr<mx),
+ wait(100);ctr=ctr+1;
+ );
+ if(ctr==mx,flg=1);
+ if(flg==0,
+ wait(100);ctr=0;
+ nkfcpdel(dir,fname,ext);
+ while((isexists(dir,fname+".out"))&(ctr<mx),
+ wait(100);ctr=ctr+1;
+ );
+ if(ctr==mx,flg=2);
+ );
+ tmp=dir+pathsep()+fname+"."+ext;
+ if(flg==0,
+ tmp=
+ println(tmp+" converted");
+ ,
+ println(tmp+" not converted "+text(flg));
+ );
+);
+////%Convsjiswin end////
+
+////%Makebat start////
+Makebat():=(
+ if(length(Texmain)>0,
+ Texparent=Texmain;
+ );
+ if(length(Texparent)>0,
+ Makebat(Texparent);
+ if(length(FigPdfList)>0,
+ SCEOUTPUT=openfile(Texparent+".tex");
+ forall(FigPdfList,println(SCEOUTPUT,#));
+ closefile(SCEOUTPUT);
+ );
+ ,
+ Makebat(Fhead+"main");
+ );
+);
+Makebat(texmainfile):=Makebat(texmainfile,"rtv");
+Makebat(texmainfile,flow):=(
+ regional(drive,fname,tmp,tmp1,tmp2,tmp3,flg,tex,path,batnm);
+ drive="C:";
+ fname=Dirwork+Batparent;
+ kc():=(
+ println("kc : "+kc(Dirwork+Batparent,Dirlib,Fnametex)); // 16.06.04
+ );
+ tmp=indexof(fname,":");
+ if(tmp>0,
+ drive=substring(fname,0,tmp);
+ fname=substring(fname,tmp,length(fname));
+ );
+ tmp1="";
+ tmp2=fname;
+ flg=0;
+ forall(reverse(1..length(fname)),
+ if(flg==0,
+ tmp=substring(fname,#-1,#);
+ if(tmp=="/" % tmp=="\" % tmp=="\", // 14.01.15
+ tmp1=substring(fname,0,#-1);
+ tmp2=substring(fname,#,length(fname));
+ flg=1;
+ );
+ );
+ );
+ if(length(tmp1)>0,
+ setdirectory(drive+tmp1);
+ );
+ SCEOUTPUT = openfile(tmp2);
+ fname=replace(Dirwork,"/","\");
+ tmp=indexof(fname,":");
+ if(tmp>0,
+ drive=substring(Dirwork,0,tmp);
+ fname=substring(Dirwork,tmp,length(Dirwork));
+ println(SCEOUTPUT,drive);
+ );
+ tmp=Dirwork;//180408form
+ if(iswindows(),
+ if((isincludefull(Dirwork))&(isexists(Dirwork,"sjis.txt")),
+ import("sjis.txt");
+ );
+ );
+// tmp=replace(tmp,"\","/"); //180408
+// println(SCEOUTPUT,"cd "+Dqq(tmp)); //180408
+ tmp1=indexof(fname,"Users");//180409from
+ tmp2=indexof(fname,Homehead);
+ if((tmp1>0)%(tmp2>0),
+ if(tmp1>0,
+ fname=substring(fname,tmp1+length("Users")-1,length(fname));
+ ,
+ fname=substring(fname,tmp2+length(Homehead)-1,length(fname));
+ );
+ tmp=Indexall(fname,"\");//180403from
+ fname=substring(fname,tmp_2,length(fname));
+ fname="%HOMEPATH%\"+fname;
+ );//180403to
+ println(SCEOUTPUT,"cd "+Dqq(fname));//180409to //190414
+ tmp1=Indexall(PathT,"/"); //190415from
+ tmp2=Indexall(PathT,"\");
+ tmp=concat(tmp1,tmp2);
+ flg=length(tmp);
+ if(flg>0,
+ tmp=tmp_(length(tmp));
+ tex=substring(PathT,tmp,length(PathT));
+ path=substring(PathT,0,tmp-1);
+ ); //190415to
+ if(flg==0, // 17.10.13[Norbert]
+ tex=PathT;
+ path="";
+ );
+ if(indexof(flow,"r")>0,
+ if(indexof(Dirwork,"Users")>0, //180917from
+ tmp=Dqq(PathR+"\R")+" --vanilla --slave < execsrc.r";//180514
+ ,
+ tmp=Dqq(PathR+"\R")+" --vanilla --slave < "+Dqq(Fhead+".r"); //190414
+ ); //180917to
+ println(SCEOUTPUT,tmp);
+ );
+ if(tex=="latex" % tex=="platex" % tex=="uplatex", //17.08.13
+ tmp=Dqq(PathT)+" "+Dqq(texmainfile+".tex"); //190414
+ println(SCEOUTPUT,tmp);
+ if(indexof(flow,"tt")>0,println(SCEOUTPUT,tmp)); //17.10.14
+ tmp=replace(Dqq(PathT),tex,"dvipdfmx")+" "+Dqq(texmainfile+".dvi"); //190414
+ println(SCEOUTPUT,tmp);
+ tmp="del "+Dqq(texmainfile+".dvi"); //190414
+ println(SCEOUTPUT,tmp);
+ );
+ if(tex=="xelatex",
+ tmp="set Path = %Path%;"+Dqq(path); //190414
+ println(SCEOUTPUT,tmp);
+ if(indexof(flow,"tt")>0,println(SCEOUTPUT,tmp)); //17.10.14
+ tmp="xelatex"+" "+texmainfile+".tex";
+ println(SCEOUTPUT,tmp);
+ tmp="del "+Dqq(texmainfile+".dvi");
+ println(SCEOUTPUT,tmp);
+ );
+ if(tex=="pdflatex" % tex=="pdftex",//16.11.22from
+ tmp=Dqq(PathT)+" "+Dqq(texmainfile+".tex");
+ println(SCEOUTPUT,tmp);
+ if(indexof(flow,"tt")>0,println(SCEOUTPUT,tmp)); //17.10.14
+ );//16.11.22until
+ if(tex=="lualatex",//16.12.16
+ tmp=Dqq(PathT)+" "+Dqq(texmainfile+".tex"); //190414
+ println(SCEOUTPUT,tmp);
+ if(indexof(flow,"tt")>0,println(SCEOUTPUT,tmp)); //17.10.14
+ );//16.12.16
+ if(!isstring(Pathpdf),
+ tmp=indexof(PathS,"\scilab");// 15.12.12
+ tmp=substring(PathS,0,tmp-1)+"\SumatraPDF\SumatraPDF.exe";
+ ,
+ tmp=Pathpdf;
+ );
+ tmp=Dqq(tmp)+" "+Dqq(texmainfile+".pdf"); //190414
+ println(SCEOUTPUT,tmp);
+ println(SCEOUTPUT,"exit 0");
+ closefile(SCEOUTPUT);
+ if(indexof(Dirwork,":")==0, // 14.01.15
+ drive="C:";
+ ,
+ drive="";
+ );
+ setdirectory(drive+Dirwork);
+);
+////%Makebat end////
+
+////%Addpackage start////
+Addpackage(packorg):=(
+//help:Addpackage("bm");
+//help:Addpackage(["bm","enumerate"]);
+//help:Addpackage(["bm","[c]{somepackage}"]);
+ regional(packL,tmp);
+ packL=packorg; //17.06.25from
+ if(!islist(packL),packL=[packL]);
+ packL=apply(packL,replace(#,"\","/"));
+ forall(1..(length(packL)),
+ tmp=packL_#;
+ if(substring(tmp,0,11)=="ketpicstyle",
+ tmp=replace(Dirhead+"/"+tmp,"\","/");
+ );
+ if(indexof(tmp,"[")==0,
+ packL_#="{"+tmp+"}";
+ );
+ );
+ ADDPACK=concat(ADDPACK,packL); //17.06.25to
+);
+////%Addpackage end////
+
+////%Usegraphics start////
+Usegraphics(gpack):=( //180817
+//help:Usegraphics("pict2e");
+ if(!contains(ADDPACK,gpack),
+ if(indexof(gpack,"tikz")>0, //181213from //190615
+ Addpackage(["pgf","tikz"]); //190101
+ ,
+ Addpackage([gpack]);
+ ); //181213to
+ );
+ GPACK=gpack;
+);
+////%Usegraphics end////
+
+////%Viewtex start////
+Viewtex():=(
+ regional(texfile,tmp,tmp1,sep);
+ texfile=Fhead+"main";
+// if(iswindows(),sep="\",sep="/"); // 17.04.07
+// sep="/";
+ SCEOUTPUT=openfile(texfile+".tex");
+ tmp="\documentclass{article}";
+ if(indexof(GPACK,"tikz")>0, //190324from //190615
+ if(indexof(PathT,"pdflatex")+indexof(PathT,"lualatex")==0,
+ tmp="\documentclass[dvipdfmx]{article}";
+ ); //190324to
+ );
+ if(indexof(PathT,"platex")>0,
+ tmp=replace(tmp,"article","jarticle");
+ if(indexof(PathT,"uplatex")>0, //17.08.13from
+ tmp=replace(tmp,"jarticle","ujarticle");
+ );//17.08.13to
+ );
+ println(SCEOUTPUT,tmp);
+ if((indexof(PathT,"pdflatex")>0)%(indexof(PathT,"lualatex")>0), //181213from
+ if(GPACK=="tpic", GPACK="pict2e");
+ );
+ if(GPACK=="tpic",
+ tmp=replace(Dirhead,"\","/");
+ println(SCEOUTPUT,"\usepackage{ketpic,ketlayer}");
+ );
+ if(indexof(GPACK,"pict2e")>0, //190615
+// println(SCEOUTPUT,"\usepackage{pict2e}"); //190615
+ println(SCEOUTPUT,"\usepackage{ketpic2e,ketlayer2e}");
+ if(indexof(PathT,"lualatex")>0,
+ println(SCEOUTPUT,"\usepackage{luatexja}");
+ );
+ );
+ if(indexof(GPACK,"tikz")>0, //190615
+ println(SCEOUTPUT,"\usepackage{pict2e}"); //190615
+ println(SCEOUTPUT,"\usepackage{ketpic2e,ketlayer2e}"); //190615
+ if(indexof(PathT,"lualatex")>0,
+ println(SCEOUTPUT,"\usepackage{luatexja}");
+ );
+ );//181213to
+ println(SCEOUTPUT,"\usepackage{amsmath,amssymb}");
+ println(SCEOUTPUT,"\usepackage{graphicx}");
+ println(SCEOUTPUT,"\usepackage{color}");
+ forall(ADDPACK, // 16.05.16from
+ println(SCEOUTPUT,"\usepackage"+#); //17.05.25
+ );// 16.05.16until
+ println(SCEOUTPUT,"");
+// println(SCEOUTPUT,"\def\ketcindy{{K\kern-.20em%"); // deleted 16.11.27,recovered11.29 redeleted17.04.07
+// println(SCEOUTPUT,"\lower.5ex\hbox{E}\kern-.125em{TCindy}}}");
+// println(SCEOUTPUT,"");
+ println(SCEOUTPUT,"\setmargin{20}{20}{20}{20}");
+ println(SCEOUTPUT,"");
+ println(SCEOUTPUT,"\begin{document}");
+ println(SCEOUTPUT,"");
+ println(SCEOUTPUT,"\verb|"+Fhead+"| by \ketcindy");// 16.01.12, 18, 16.04.08
+// println(SCEOUTPUT,"\verb|"+Fhead+"| by KeTCindy");// 16.11.29 temporarily
+ println(SCEOUTPUT,"\vspace{5mm}");
+ println(SCEOUTPUT,"");
+ println(SCEOUTPUT,"\input{"+Fhead+".tex}");
+ println(SCEOUTPUT,"");
+ println(SCEOUTPUT,"\end{document}");
+ closefile(SCEOUTPUT);
+ if(iswindows(),
+ kc():=(
+ println("kc : "+kc(Dirwork+Batparent,Dirlib,Fnametex)); // 16.06.04
+ );
+ Makebat(texfile);
+ ,
+ kc():=(
+ println("kc : "+kc(Dirwork+Shellparent,Mackc+Dirlib,Fnametex)); // 16.06.04
+ );
+ Makeshell(texfile);
+ );
+ WritetoRS(2); //17.09.19
+);
+////%Viewtex end////
+
+////%Viewparent start////
+Viewparent():=( //17.04.13
+ if(!isexists(Dirwork,Texparent+".tex"),
+ if(isstring(Texparent),
+ drawtext(mouse().xy,Texparent+".tex not exist",
+ size->24,color->[1,0,0]);
+ ,
+ drawtext(mouse().xy,"Texparent not defined",
+ size->24,color->[1,0,0]);
+ );
+ ,
+ if(iswindows(),
+ Makebat();
+ ,
+ Makeshell();
+ );
+ WritetoRS(2); //17.09.29
+ kc();
+ );
+);
+////%Viewparent end////
+
+////%Figpdf start////
+Figpdf():=Figpdf(Texparent,[]);
+Figpdf(Arg1):=(
+ if(isstring(Arg1),
+ Figpdf(Arg1,[]);
+ ,
+ Figpdf(Texparent,Arg1);
+ );
+);
+Figpdf(fnameorg,optionorg):=(
+//help:Figpdf();
+//help:Figpdf([10,,10,,[0,2] ]);(margin(4),move)
+//help:Figpdf([[0,0]]);(move)
+//help:Figpdf(options=[5,5,5,5,[0,0]]]);
+ regional(options,fname,mar,pos,dp,sc,tmp,tmp1,tmp2,sep);
+ fname=fnameorg;
+ if(indexof(fnameorg,".")==0,
+ fname=fnameorg+".tex";
+ );
+ tmp=apply(optionorg,if(isstring(#),parse("["+#+"]"),#)); // 16.04.07
+ tmp=select(tmp,#!=[]);
+ options=optionorg;//16.11.08from
+// mar=[5,5,5,5];
+ dp=[0,-3];
+ tmp=select(options,islist(#));
+ if(length(tmp)>0,
+ dp=tmp_1;
+ options=remove(options,tmp);
+ );
+ tmp=4-length(options);
+ tmp1=apply(1..tmp,5);
+ mar=concat(options,tmp1);
+ mar=apply(mar,if(length(#)==0,5,#));//16.11.08until
+ pos=[mar_1+dp_1,mar_3+dp_2];
+ sc=10;
+ tmp=indexof(ULEN,"cm");
+ if(tmp>0,
+ tmp1=Removespace(substring(ULEN,0,tmp-1));
+ sc=parse(tmp1)*10;
+ );
+ tmp=indexof(ULEN,"mm");
+ if(tmp>0,
+ tmp1=Removespace(substring(ULEN,0,tmp-1));
+ sc=parse(tmp1);
+ );
+ tmp="\documentclass{article}";
+ if(indexof(GPACK,"tikz")>0, //190324from //190615
+ if(indexof(PathT,"pdflatex")+indexof(PathT,"lualatex")==0,
+ tmp="\documentclass[dvipdfmx]{article}";
+ ); //190324to
+ );
+ if(indexof(PathT,"platex")>0,
+ tmp=replace(tmp,"article","jarticle");
+ if(indexof(PathT,"uplatex")>0, //170813from
+ tmp=replace(tmp,"jarticle","ujarticle");
+ );//170813to
+ );
+ FigPdfList=append(FigPdfList,tmp); // 16.06.09until
+ tmp1="\special{papersize=W mm,H mm}";
+ tmp=(XMAX-XMIN)*sc+(mar_1+mar_2);
+ tmp1=replace(tmp1,"W",text(tmp));
+ tmp=SCALEY*(YMAX-YMIN)*sc+(mar_3+mar_4); //190412
+ tmp1=replace(tmp1,"H",text(tmp));
+ FigPdfList=append(FigPdfList,tmp1);
+ if(indexof(PathT,"pdflatex")+indexof(PathT,"lualatex")>0, //17.11.05from
+ FigPdfList=append(FigPdfList,
+ "\usepackage{pict2e}");
+ tmp=replace(Dirhead,"\","/");
+ tmp=replace(tmp,"scripts","tex/latex");
+ if(isexists(tmp,""),
+ FigPdfList=append(FigPdfList,
+ "\usepackage{ketpic2e,ketlayer2e}");
+ ,
+ tmp=replace(Dirhead+"/ketpicstyle","\","/");
+ FigPdfList=concat(FigPdfList,
+ ["\usepackage{"+tmp+"/ketpic2e}",
+ "\usepackage{"+tmp+"/ketlayer2e}"]);
+ );
+ ,
+ tmp=replace(Dirhead,"\","/");
+ tmp=replace(tmp,"scripts","tex/latex");
+ if(isexists(tmp,""),
+ FigPdfList=append(FigPdfList,
+ "\usepackage{ketpic,ketlayer}");
+ ,
+ tmp=replace(Dirhead+"/ketpicstyle","\","/");
+ FigPdfList=concat(FigPdfList,
+ ["\usepackage{"+tmp+"/ketpic}",
+ "\usepackage{"+tmp+"/ketlayer}"]);
+ );
+ );//17.11.05until
+ FigPdfList=append(FigPdfList,
+ "\usepackage{amsmath,amssymb}");
+ FigPdfList=append(FigPdfList,
+ "\usepackage{graphicx,color}");
+ forall(ADDPACK, // 16.05.16from
+ tmp1="\usepackage"+#; //17.07.10
+ FigPdfList=append(FigPdfList,tmp1); // 16.09.05until
+ );
+ FigPdfList=append(FigPdfList,"");
+ FigPdfList=append(FigPdfList,
+ "\setmargin{0}{0}{0}{0}");
+ FigPdfList=append(FigPdfList,"");
+ FigPdfList=append(FigPdfList,"\begin{document}");
+ FigPdfList=append(FigPdfList,"");
+ FigPdfList=append(FigPdfList,
+ "\begin{layer}{50}{0}");
+ tmp1="\putnotese{X}{Y}{\input{";
+ tmp1=replace(tmp1,"X",text(pos_1));
+ tmp1=replace(tmp1,"Y",text(pos_2));
+ FigPdfList=append(FigPdfList,tmp1+Fhead+".tex}}");
+ FigPdfList=append(FigPdfList,"");
+ FigPdfList=append(FigPdfList,"\end{layer}");
+ FigPdfList=append(FigPdfList,"");
+ FigPdfList=append(FigPdfList,"\end{document}");
+ if(fnameorg!=Texparent,
+ SCEOUTPUT=openfile(fname);
+ forall(FigPdfList,println(SCEOUTPUT,#));
+ closefile(SCEOUTPUT);
+ );
+ FigPdfList;
+);
+////%Figpdf end////
+
+////%Slidework start////
+Slidework():=Slidework(Dirwork); // 16.06.10
+Slidework(dirorg):=(
+//help:Slidework(directory);
+ regional(dir,tmp); // 16.06.25
+ dir=replace(dirorg,unicode("000a"),""); // 16.06.25
+ dir=replace(dir,"/",pathsep());//17.11.20from
+ dir=replace(dir,"\",pathsep());
+ tmp=length(dir);
+ if(substring(dir,tmp-1,tmp)==pathsep(),
+ dir=substring(dir,0,tmp-1);
+ );//17.11.20until
+ if(isexists(dir,""), // 16.12.20
+ Changework(dir);
+ println(makedir(dir,"fig"));//17.11.23
+ tmp=dir+pathsep()+"fig"; //17.04.16from
+ Changework(tmp);// 17.02.19until
+ ,
+ println(dir+ " not exists");
+ );
+);
+////%Slidework end////
+
+////%Setslidemargin start////
+Setslidemargin(marginlist):=( // 180908
+//help:Setslidemargin([+5,-10]);
+ SlideMargin=marginlist;
+);
+////%Setslidemargin end////
+
+////%Setslidepage start////
+Setslidepage():=( // 17.03.05
+ regional(tmp1,tmp2,tmp3);
+ tmp1=["letterc","boxc","framec","shadowc","xpos","size"];
+ tmp2=apply([1,2,4,5,7,8],SlideColorList_#);
+ tmp3=apply(1..(length(tmp1)),tmp1_#+"="+tmp2_#);
+ println(tmp3);
+);
+Setslidepage(list):=( // 16.12.22
+//help:Setslidepage([letterc,boxc,framec,shadowc,xpos,size]);
+ regional(numlist,tmp,tmp1,letterc,boxc,shadowc,mboxc);
+ letterc=[0.98,0.13,0,0.43]; boxc=[0,0.32,0.52,0];
+ shadowc=[0,0,0,0.5]; mboxc="yellow";
+ if(!islist(SlideColorList),
+ SlideColorList=[letterc,boxc,boxc,boxc,shadowc,shadowc,6,1.3,
+ letterc,mboxc,mboxc,mboxc,62,2,letterc];
+ );
+ numlist=[1,2,4,5,7,8];
+ forall(1..(length(list)),
+ if(length(list_#)>0,
+ tmp=numlist_#;
+ SlideColorList_tmp=list_#;
+ );
+ );
+ SlideColorList_3=SlideColorList_2;
+ SlideColorList_6=SlideColorList_5;
+);
+////%Setslidepage end////
+
+////%Setslidemain start////
+Setslidemain():=( // 17.03.05
+ regional(tmp1,tmp2,tmp3);
+ tmp1=["letterc","boxc","framec","xpos","size"];
+ tmp2=apply([9,10,12,13,14],SlideColorList_#);
+ tmp3=apply(1..(length(tmp1)),tmp1_#+"="+tmp2_#);
+ println(tmp3);
+);
+Setslidemain(list):=( // 16.12.22
+//help:Setslidemain([letterc,boxc,framec,xpos,size]);
+ regional(numlist,tmp,tmp1,letterc,boxc,shadowc,mboxc);
+ letterc=[0.98,0.13,0,0.43]; boxc=[0,0.32,0.52,0];
+ shadowc=[0,0,0,0.5]; mboxc="yellow";
+ if(!islist(SlideColorList),
+ SlideColorList=[letterc,boxc,boxc,boxc,shadowc,shadowc,6,1.3,
+ letterc,mboxc,mboxc,mboxc,62,2,letterc];
+ );
+ numlist=[9,10,12,13,14];
+ forall(1..(length(list)),
+ if(length(list_#)>0, //17.01.04
+ tmp=numlist_#;
+ SlideColorList_tmp=list_#;
+ );
+ );
+ SlideColorList_11=SlideColorList_10;
+);
+////%Setslidemain end////
+
+////%Setslidebody start////
+Setslidebody():=( // 17.03.05
+ regional(tmp1,tmp2,tmp3);
+ tmp1=["letterc","style","thindense"];
+ tmp2=[SlideColorList_(15),BodyStyle,ThinDense];
+ tmp3=apply(1..(length(tmp1)),tmp1_#+"="+tmp2_#);
+ println(tmp3);
+);
+Setslidebody(str):=(
+ regional(clr,style,thin);
+ if(isstring(str),
+ Setslidebody(str,"\Large\bf\boldmath",0.1);
+ ,
+ if(length(str)==1,Setslidebody(str_1));
+ if(length(str)==2,Setslidebody(str_1,str_2));
+ if(length(str)==3,Setslidebody(str_1,str_2,str_3));
+ );
+);
+Setslidebody(str,Arg):=( //17.01.08
+ if(isstring(Arg),
+ Setslidebody(str,Arg,0.1);
+ ,
+ Setslidebody(str,"\Large\bf\boldmath",Arg);
+ );
+);
+Setslidebody(str,style,density):=( // 16.12.22,17.01.06,01.08
+//help:Setslidebody(["black",,0]);
+//help:Setslidebody(["blue","\Large\bf\boldmath",0.1]);
+ regional(numlist,tmp,tmp1,letterc,boxc,shadowc,mboxc);
+ letterc=[0.98,0.13,0,0.43]; boxc=[0,0.32,0.52,0];
+ shadowc=[0,0,0,0.5]; mboxc="yellow";
+ if(!islist(SlideColorList),
+ SlideColorList=[letterc,boxc,boxc,boxc,shadowc,shadowc,6,1.3,
+ letterc,mboxc,mboxc,mboxc,62,2,letterc];
+ );
+ if(length(str)>0,SlideColorList_(15)=str);
+ if(length(style)>0,BodyStyle=style);
+ ThinDense=density;//17.01.08
+);
+////%Setslidebody end////
+
+////%Setslidehyper start////
+Setslidehyper():=( 17.12.16from
+ Setslidehyper(["cl=true,lc=blue,fc=blue",125,70,1]);
+);
+Setslidehyper(Arg):=(
+ if(isstring(Arg),
+ Setslidehyper(Arg,["cl=true,lc=blue,fc=blue",125,70,1]);
+ ,
+ Setslidehyper("",Arg);
+ );
+);
+Setslidehyper(driverorg,options):=(
+//help:Setslidehyper();
+//help:Setslidehyper("dvipdfmx",["cl=true,lc=blue,fc=blue","Pos=[125,73]","Size=1"]);
+ regional(driver,eqL,reL,stL,,str,tmp,tmp1,tmp2);
+ driver=driverorg;
+ if(length(driver)==0,
+ if(indexof(PathT,"pdflatex")+indexof(PathT,"lualatex")==0,
+ driver="dvipdfmx";
+ );
+ );
+ tmp=Divoptions(options);
+ eqL=tmp_5;
+ reL=tmp_6;
+ stL=tmp_7;
+ tmp1=select(eqL,length(Indexall(#,"="))>1); //180813from
+ eqL=remove(eqL,tmp1);
+ stL=concat(stL,tmp1); //180813to
+ if(length(stL)>0,
+ str=stL_1;
+ ,
+ str="";
+ );
+ if(length(str)==0,
+ str="cl=true,lc=blue,fc=blue";
+ );
+ if(length(driver)==0,
+ tmp1="["+str+"]";
+ ,
+ tmp1="["+driver+","+str+"]";
+ );
+ tmp1=replace(tmp1,"cl=","colorlinks=");
+ tmp1=replace(tmp1,"lc=","linkcolor=");
+ tmp1=replace(tmp1,"fc=","filecolor=");
+ tmp1=replace(tmp1,"uc=","urlcolor=");
+ ADDPACK=select(ADDPACK,indexof(#,"hyperref")==0);
+ Addpackage(tmp1+"{hyperref}");
+ tmp=indexof(tmp1,"linkcolor=");//180813from
+ tmp1=substring(tmp1,tmp-1,length(tmp1));
+ tmp=indexof(tmp1,"=");
+ tmp1=substring(tmp1,tmp,length(tmp1));
+ tmp=indexof(tmp1,",");
+ if(length(tmp)>0,
+ tmp1=substring(tmp1,0,tmp-1);
+ );//180813to
+ LinkColor=tmp1;
+ LinkPosH=125;
+ LinkPosV=73;//180524
+ LinkSize=1;
+// if(length(reL)>0,
+// LinkPosH=reL_1;
+// if(length(reL)>1,LinkPosV=reL_2);
+// if(length(reL)>2,LinkSize=max(reL_3,0.1));
+// );
+ forall(eqL,
+ tmp=Indexall(#,"=");//180524from
+ if(length(tmp)==1,
+ tmp1=Toupper(substring(#,0,1));
+ tmp2=substring(#,tmp_1,length(#));
+ tmp2=parse(tmp2);
+ if(tmp1=="P",
+ LinkPosH=tmp2_1;
+ LinkPosV=tmp2_2;
+ );
+ if(tmp1=="S",
+ LinkSize=max(tmp2,0.1);
+ );
+ );//180524to
+ );
+); //17.12.16to
+////%Setslidehyper end////
+
+////%Settitle start////
+Settitle(cmdL):=Settitle("",cmdL,[]); // 180608from
+Settitle(Arg1,Arg2):=(
+ if(isstring(Arg1),
+ Settitle(Arg1,Arg2,[]);
+ ,
+ Settitle("",Arg1,Arg2);
+ );
+); // 180608to
+Settitle(titleold,cmdL,options):=(
+//help:Settitle(cmdL);
+//help:Settitle(name,cmdL);
+//help:Settitle(options=["Title=slide0","Layery=0","Color=blue"]);
+ regional(tmp,tmp1,tmp2,eqL,layery,color,size,font);
+ TitleName="slide0"; //180330
+ if(length(titleold)>0,TitleName=titleold);//180608
+ layery="0";
+ color="blue";
+ size="\Large";
+ font="\bf";
+// tmp=Divoptions(options);
+// eqL=tmp_5;
+ eqL=options; //180602
+ forall(eqL,
+ tmp1=Toupper(substring(#,0,1));
+ tmp=indexof(#,"=");
+ tmp2=substring(#,tmp,length(#));
+ if(tmp1=="L",
+ layery=tmp2;
+ );
+ if(tmp1=="C",
+ color=tmp2;
+ );
+ if(tmp1=="S",
+ size=tmp2;
+ if(substring(size,0,1)!="\",size="\"+size);
+ );
+ if(tmp1=="F",
+ font=tmp2;
+ if(substring(font,0,1)!="\",font="\"+font);
+ );
+ if(tmp1=="T", //180330
+ TitleName=tmp2;
+ );
+ );
+ TitleCmdL=["{"+size+font];
+ if(indexof(color,"[")>0,
+ tmp=replace(color,"[","{");
+ tmp=replace(tmp,"]","}");
+ tmp1=Indexall(tmp,",");
+ if(length(tmp1)>=3,
+ tmp="\color[cmyk]"+tmp;
+ ,
+ tmp="\color[rgb]"+tmp;
+ );
+ ,
+ tmp="\color{"+color+"}";
+ );
+ TitleCmdL=append(TitleCmdL,tmp);
+ TitleCmdL=concat(TitleCmdL,["","\begin{layer}{120}{"+layery+"}"]);
+ forall(1..(length(cmdL)),
+ tmp=cmdL_#;
+ if(length(tmp)>0,
+ if(#==1,
+ tmp="{\Huge \putnote"+tmp+"}"
+ ,
+ tmp="\putnote"+tmp;
+ );
+ TitleCmdL=append(TitleCmdL,tmp);
+ );
+ );
+ TitleCmdL=concat(TitleCmdL,["\end{layer}","","}"]);
+);
+////%Settitle end////
+
+////%Maketitle start////
+Maketitle():=(
+ if(!isstring(TitleName), //17.04.13from
+ drawtext(mouse().xy,"Settitle not defined",
+ size->24,color->[1,0,0]);
+ , //17.04.13until
+ Maketitle(TitleName);
+ );
+);
+Maketitle(name):=(
+//help:Maketitle();
+ regional(texfile,texmain,tmp,tmp1,sep,txtfile);
+ texfile=name;
+ texmain=name+"main";
+ SCEOUTPUT=openfile(texfile+".tex");
+ forall(TitleCmdL,
+ println(SCEOUTPUT,#);
+ );
+ closefile(SCEOUTPUT);
+ SCEOUTPUT=openfile(texmain+".tex");
+ tmp="\documentclass[landscape,10pt]{article}";
+ if(indexof(PathT,"platex")>0,
+ tmp=replace(tmp,"article","jarticle");
+ if(indexof(PathT,"uplatex")>0, //17.08.13from
+ tmp=replace(tmp,"jarticle","ujarticle");
+ );//17.08.13until
+ );
+ println(SCEOUTPUT,tmp);
+ tmp="\special{papersize=\the\paperwidth,\the\paperheight}";
+ println(SCEOUTPUT,tmp);
+ tmp=replace(Dirhead,"\","/");//17.11.01from
+ tmp=replace(tmp,"scripts","tex/latex");
+ if(isexists(tmp,""),
+ println(SCEOUTPUT,"\usepackage{ketpic,ketlayer,ketslide}");
+ ,
+ tmp=replace(Dirhead+"/ketpicstyle","\","/");
+ println(SCEOUTPUT,"\usepackage{"+tmp+"/ketpic}");
+ println(SCEOUTPUT,"\usepackage{"+tmp+"/ketlayer}");
+ println(SCEOUTPUT,"\usepackage{"+tmp+"/ketslide}");
+ );//17.11.01until
+ println(SCEOUTPUT,"\usepackage{amsmath,amssymb}");
+ println(SCEOUTPUT,"\usepackage{bm,enumerate}");
+ if((indexof(PathT,"pdflatex")>0)%(indexof(PathT,"lualatex")>0),
+ println(SCEOUTPUT,"\usepackage{graphicx}");
+ ,
+ println(SCEOUTPUT,"\usepackage[dvipdfmx]{graphicx}");
+ );
+ println(SCEOUTPUT,"\usepackage[usenames]{color}"); //190222
+ forall(ADDPACK,
+// if(indexof(#,"[")==0,
+// println(SCEOUTPUT,"\usepackage{"+#+"}");
+// ,
+ println(SCEOUTPUT,"\usepackage"+#); // 17.07.10
+// );
+ );
+ if(indexof(PathT,"platex")>0,tmp="\ketmarginJ",tmp="\ketmarginE");
+ println(SCEOUTPUT,tmp);
+ println(SCEOUTPUT,"\ketslideinit");
+ println(SCEOUTPUT,"");
+ println(SCEOUTPUT,"\begin{document}");
+ println(SCEOUTPUT,"");
+ println(SCEOUTPUT,"\input{"+texfile+".tex}");
+ println(SCEOUTPUT,"");
+ println(SCEOUTPUT,"\end{document}");
+ closefile(SCEOUTPUT);
+ if(iswindows(),
+ Makebat(texmain,"tv");
+ ,
+ Makeshell(texmain,"tv");
+ );
+ kc();
+ txtfile=Cindyname()+".txt"; //180815from
+ if(!isexists(Dircdy,txtfile),
+ setdirectory(Dircdy);
+ SCEOUTPUT=openfile(txtfile);
+ println(SCEOUTPUT,"title::"+name+"//");
+ println(SCEOUTPUT,"");
+ println(SCEOUTPUT,"%%%%%%%%%%%%%%%%//");
+ println(SCEOUTPUT,"main::"+PaO()+"title)//");
+ println(SCEOUTPUT,"\slidepage[m]//");
+ println(SCEOUTPUT,"");
+ println(SCEOUTPUT,"%%%%%%%%%%%%%%%%//");
+ println(SCEOUTPUT,"new::"+PaO()+"title)//");
+ println(SCEOUTPUT,"%repeat=1,para//");
+ println(SCEOUTPUT,"\slidepage//");
+ println(SCEOUTPUT,"");
+ println(SCEOUTPUT,"layer::{120}{0}//");
+ println(SCEOUTPUT,"%%putnote::s{65}{5}:://");
+ println(SCEOUTPUT,"end//");
+ println(SCEOUTPUT,"");
+ println(SCEOUTPUT,"itemize//");
+ println(SCEOUTPUT,"item//");
+ println(SCEOUTPUT,"end//");
+ closefile(SCEOUTPUT);
+ setdirectory(Dirwork); //180815to
+ );
+);
+////%Maketitle end////
+
+////%Repeatsameslide start////
+Repeatsameslide(repeatflg,sestr,addedL):=(
+ regional(seL,flg1,ss,nn,nrep,tmp,tmp1,tmp2,tmp3,str,j,k);
+ // global RepeatList, SCEOUTPUT, NonThinFlg
+ nrep=length(RepeatList);
+ flg1=0;
+ forall(addedL,ss,
+ if(repeatflg==0,
+ if(substring(ss,0,1)!="%", //16.01.04
+ println(SCEOUTPUT,ss);
+ );//16.01.04
+ ,
+ forall(1..nrep,nn,
+ if(sestr=="",
+ RepeatList_nn=append(RepeatList_nn,ss);
+ );
+ );
+ if(sestr=="",
+ seL=[1];
+ ,
+ tmp1=substring(sestr,1,length(sestr)-1);
+ tmp1=replace(tmp1,",-",".."+text(nrep));
+ tmp1=replace(tmp1,"-,","1..");
+ tmp1="["+tmp1+"]"; //17.01.03
+ seL=flatten(parse(tmp1)); //17.01.03
+ );
+ if(contains(seL,1),
+ if(substring(ss,0,1)!="%", //16.01.04
+ println(SCEOUTPUT,ss);
+ );
+ seL=remove(seL,[1]);
+ flg1=1;
+ );
+ forall(1..(length(seL)),nn,
+ tmp=seL_nn;
+ if(tmp<=length(RepeatList), //17.01.12from
+ RepeatList_tmp=append( RepeatList_tmp,ss);
+ ,
+ println(" "+sestr+" : "+text(tmp)+" > "+text(length(RepeatList)));
+ );
+ );
+ if(ThinFlg==1,//16.01.05from
+ if(flg1==1,seL=append(seL,1));
+ seL=remove(1..nrep,seL);
+ str=ss; // 17.05.28from
+ if(substring(str,0,16)=="\begin{minipage}",MiniFlg=1);//180526
+ repeat(10,
+ tmp1=Indexall(str,"{\color");
+ if(length(tmp1)>0,
+ tmp2=Indexall(str,"}");
+ tmp=select(tmp2,tmp1_1<#);
+ tmp=substring(str,tmp1_1,tmp_1);
+ str=replace(str,tmp+" ","");
+ str=replace(str,tmp,"");
+ );
+ );//17.05.28to
+ if(contains(seL,1),
+ if(substring(str,0,1)!="%",
+ if(NonThinFlg==0,
+ if(!contains(["\begi","\end{"],substring(str,0,5)),//17.01.15
+ if(MiniFlg==0, //180526from
+ println(SCEOUTPUT,"{\color[cmyk]{\thin,\thin,\thin,\thin}%");//180701
+ println(SCEOUTPUT,str);
+ println(SCEOUTPUT,"}%");
+ ,
+ println(SCEOUTPUT,str);
+ if(indexof(str,"\end{minipage}")>0, //180526from
+ println(SCEOUTPUT,"}%");
+ );
+ ); //180526to
+ ,
+ println(SCEOUTPUT,str);
+ if(indexof(str,"\end{minipage}")>0, //180526from
+ println(SCEOUTPUT,"}%");
+ MiniFlg=0;
+ );
+ );
+ );
+ if(NonThinFlg==1,
+ if(!contains(["\begi","\end{"],substring(str,0,5)),//17.01.15
+ println(SCEOUTPUT,"{\color[cmyk]{\thin,\thin,\thin,\thin}%");//180701
+ println(SCEOUTPUT,str);
+ ,
+ println(SCEOUTPUT,str);
+ if(indexof(str,"\end{minipage}")>0, //180526from
+ println(SCEOUTPUT,"}%");
+ MiniFlg=0;
+ );
+ );
+ );
+ if(NonThinFlg==2,
+ println(SCEOUTPUT,str);
+ if(!contains(["\begi","\end{"],substring(str,0,5)),//17.01.15
+ println(SCEOUTPUT,"}%");
+ , //180526from
+ if(indexof(str,"\end{minipage}")>0,
+ println(SCEOUTPUT,"}%");
+ MiniFlg=0;
+ ); //180526from
+ );
+ );
+ seL=remove(seL,[1]);
+ );
+ );
+ if(substring(ss,0,1)!="%", //16.01.04
+ forall(1..(length(seL)),nn,
+ if(substring(str,0,16)=="\begin{minipage}",MiniFlg=1);//180526
+ tmp=seL_nn;
+ if(NonThinFlg==0,
+ if(!contains(["\begi","\end{"],substring(str,0,5)),//180526from
+ if(MiniFlg==0,
+ tmp1="{\color[cmyk]{\thin,\thin,\thin,\thin}%";//180701
+ tmp1=[tmp1,str,"}%"];
+ ,
+ tmp1=[str];
+ if(indexof(str,"\end{minipage}")>0, //180526from
+ tmp1=append(tmp1,"}%");
+ );
+ );
+ ,
+ tmp1=[str];
+ if(indexof(str,"\end{minipage}")>0,
+ tmp1=append(tmp1,"}%");
+ MiniFlg=0;
+ );
+ );
+ );
+ if(NonThinFlg==1,
+ if(!contains(["\begi","\end{"],substring(str,0,5)),//17.01.15
+ tmp1="{\color[cmyk]{\thin,\thin,\thin,\thin}%";//180701
+ tmp1=[tmp1,str];
+ ,
+ tmp1=[str];
+ if(indexof(str,"\end{minipage}")>0,
+ tmp1=append(tmp1,"}%");
+ MiniFlg=0;
+ );
+ );
+ );
+ if(NonThinFlg==2,
+ tmp1=[str];
+ if(!contains(["\begi","\end{"],substring(str,0,5)),
+ tmp1=append(tmp1,"}%");
+ ,
+ if(indexof(str,"\end{minipage}")>0,
+ tmp1=append(tmp1,"}%");
+ MiniFlg=0;
+ );
+ );
+ );
+ RepeatList_tmp=concat( RepeatList_tmp,tmp1);
+ );
+ );
+ );//16.01.05to
+ );
+ );//16.12.05to
+);
+////%Repeatsameslide end////
+
+////%Presentation start////
+Presentation(texfile):=Presentation(texfile,texfile);
+Presentation(texfile,txtfile):=(
+//help:Presentation(texfile,txtfile);
+ regional(file,flgL,flg,verbflg,slideL,ns,slideorgL,wall,sld,slidecmd,tmp,tmp0,tmp1,
+ tmp2,tmp3,tmp4,tmp5,newoption,top,repeatflg,nrep,nrepprev,,repstr,
+ sestr,npara,paradt,parafiles,hyperflg,paractr,
+ letterc,boxc,shadowc,mboxc,sep);
+ MiniFlg=0;//180526
+ slidecmd=["\ketcletter","\ketcbox","\ketdbox","\ketcframe",
+ "\ketcshadow","\ketdshadow","\slidetitlex","\slidetitlesize",
+ "\mketcletter","\mketcbox","\mketdbox","\mketcframe",
+ "\mslidetitlex","\mslidetitlesize"];
+ if(!isstring(BodyStyle),//17.01.06
+ BodyStyle="\Large\bf\boldmath";
+ );
+ repeatflg=0;
+ RepeatList=[];
+ paractr=0; //16.12.31
+ if(indexof(texfile,".")==0,file=texfile+".tex",file=texfile);
+ if(indexof(txtfile,".")==0,tmp1=txtfile+".txt",tmp1=txtfile);
+// tmp=load(tmp1); //181125from
+ tmp=readfile2str(Dirwork,tmp1);
+ tmp=replace(tmp,"////","||||");
+ tmp=replace(tmp,"/L"+"F/::","::");
+ tmp=replace(tmp,"///L"+"F/","/L"+"F/");
+ slideL=tokenize(tmp,"/L"+"F/"); //181125to
+ slideorgL=slideL; // 16.07.11
+ slideL=apply(slideL,Removespace(#));
+ tmp=select(1..length(slideL),length(slideL_#)>0); // 16.07.11from
+ slideL=apply(tmp,slideL_#);
+ slideorgL=apply(tmp,slideorgL_#);
+// slideL=select(slideL,length(#)>0); // 16.07.11until
+ flg=0; // 16.06.09from
+ forall(1..10,
+ if(flg==0,
+ if(substring(slideL_1,0,1)!="%",
+ flg=1;
+ ,
+ slideL=slideL_(2..length(slideL));
+ slideorgL=slideorgL_(2..length(slideorgL));
+ );
+ );
+ ); // 16.06.09until
+ flgL=[];
+ SCEOUTPUT = openfile(file);
+ tmp=tokenize(slideL_1,"::");
+ tmp1=tmp_1;
+ if(length(tmp)>1,
+ tmp2=tmp_2;
+ tmp3=tmp_(3..length(tmp));//16.06.25
+ ,
+ tmp2="";
+ tmp3=tmp_(2..length(tmp));//16.06.25
+ );
+ wall=""; // 16.06.10
+ if(length(tmp3)>0,//16.06.25from
+ tmp=substring(tmp3_1,0,1);//180330
+ if((tmp!="\")&(tmp!="%")&(indexof(tmp3_1,"=")==0), //180330
+ wall=tmp3_1;
+ tmp3=tmp3_(2..length(tmp3));
+ );
+ );//16.06.25until
+ tmp="%%% "+tmp1+" "+txtfile;// 16.06.09from
+ println(SCEOUTPUT,tmp);
+ tmp="\documentclass[landscape,10pt]{article}";
+ if(indexof(PathT,"platex")>0,
+ tmp=replace(tmp,"article","jarticle");
+ if(indexof(PathT,"uplatex")>0, //17.08.13from
+ tmp=replace(tmp,"jarticle","ujarticle");
+ );//17.08.13until
+ );
+ println(SCEOUTPUT,tmp);// 16.06.09from
+ tmp=select(1..(length(tmp3)),indexof(tmp3_#,"\usepackage")>0);//17.06.18from
+ forall(tmp,
+ println(SCEOUTPUT,tmp3_#);
+ );
+ tmp=remove(1..(length(tmp3)),tmp);
+ tmp3=tmp3_tmp;//17.06.18until
+// if(iswindows(),sep="\",sep="/"); // 17.04.08
+// sep="/";
+ if((indexof(PathT,"pdflatex")>0)%(indexof(PathT,"lualatex")>0),
+ if(indexof(PathT,"lualatex")>0,
+ println(SCEOUTPUT,"\usepackage{luatexja}");
+ );
+ println(SCEOUTPUT,"\usepackage{pict2e}");
+ println(SCEOUTPUT,"\usepackage{ketpic2e,ketlayer2e}");// 17.04.08from
+ ,
+ println(SCEOUTPUT,"\special{papersize=\the\paperwidth,\the\paperheight}");
+ );// 17.04.08until
+ tmp=replace(Dirhead,"\","/");//17.11.01from
+ tmp=replace(tmp,"scripts","tex/latex");
+ if(isexists(tmp,""),
+ println(SCEOUTPUT,"\usepackage{ketpic,ketlayer}");
+ ,
+ tmp=replace(Dirhead+"/ketpicstyle","\","/");
+ println(SCEOUTPUT,"\usepackage{"+tmp+"/ketpic}");
+ println(SCEOUTPUT,"\usepackage{"+tmp+"/ketlayer}");
+ );
+ if(length(wall)==0,
+ tmp=replace(Dirhead,"\","/");//17.11.01from
+ tmp=replace(tmp,"scripts","tex/latex");
+ if(isexists(tmp,""),
+ println(SCEOUTPUT,"\usepackage{ketslide}");
+ ,
+ tmp=replace(Dirhead+"/ketpicstyle","\","/");
+ println(SCEOUTPUT,"\usepackage{"+tmp+"/ketslide}");
+ );
+ ,
+ tmp=replace(Dirhead,"\","/");
+ tmp=replace(tmp,"scripts","tex/latex");
+ if(isexists(tmp,""),
+ println(SCEOUTPUT,"\usepackage{ketslide2}");
+ ,
+ tmp=replace(Dirhead+"/ketpicstyle","\","/");
+ println(SCEOUTPUT,"\usepackage{"+tmp+"/ketslide2}");
+ );
+ );//17.04.08until
+ println(SCEOUTPUT,"\usepackage{amsmath,amssymb}");
+ println(SCEOUTPUT,"\usepackage{bm,enumerate}");
+ if((indexof(PathT,"pdflatex")>0)%(indexof(PathT,"lualatex")>0),
+ println(SCEOUTPUT,"\usepackage{graphicx}");
+ ,
+ println(SCEOUTPUT,"\usepackage[dvipdfmx]{graphicx}");
+ );
+ println(SCEOUTPUT,"\usepackage{color}");//190222
+ letterc=[0.98,0.13,0,0.43]; boxc=[0,0.32,0.52,0];
+ shadowc=[0,0,0,0.5]; mboxc="yellow";
+ tmp4="abcdefghijklmno";
+ forall(1..15,
+ tmp=SlideColorList_#;
+ if(islist(tmp),
+ tmp=text(tmp);
+ tmp=substring(tmp,1,length(tmp)-1);
+ if(length(SlideColorList_#)==4,//17.01.07from
+ println(SCEOUTPUT,"\definecolor{slidecolor"+tmp4_#+"}{cmyk}{"+tmp+"}");
+ );
+ if(length(SlideColorList_#)==3,
+ println(SCEOUTPUT,"\definecolor{slidecolor"+tmp4_#+"}{rgb}{"+tmp+"}");
+ );//17.01.07until
+ SlideColorList_#="slidecolor"+tmp4_#;
+ );
+ );
+ println(SCEOUTPUT,"\def\setthin#1{\def\thin{#1}}");//17.08.23
+ println(SCEOUTPUT,"\setthin{"+text(ThinDense)+"}");//17.08.23
+ println(SCEOUTPUT,"\newcommand{\slidepage}[1][s]{%");//180524from
+ println(SCEOUTPUT,"\setcounter{ketpicctra}{18}%");
+ println(SCEOUTPUT,"\if#1m \setcounter{ketpicctra}{1}\fi");
+ println(SCEOUTPUT,"\hypersetup{linkcolor=black}%");
+ println(SCEOUTPUT,"");//180908
+ println(SCEOUTPUT,"\begin{layer}{118}{0}");
+ println(SCEOUTPUT,"\putnotee{122}{-\theketpicctra.05}{\small\thepage/\pageref{pageend}}");
+ println(SCEOUTPUT,"\end{layer}\hypersetup{linkcolor="+LinkColor+"}");
+ println(SCEOUTPUT,"");//180908
+ println(SCEOUTPUT,"}");//189524to
+ forall(ADDPACK,// 16.06.09from
+ println(SCEOUTPUT,"\usepackage"+#);
+ );// 16.06.09to
+ tmp=select(ADDPACK,indexof(#,"{hyperref}")>0);//16.12.31from
+ if(length(tmp)>0,
+ hyperflg=1;
+ ,
+ hyperflg=0; //16.12.31until
+ );
+ forall(tmp3,
+ println(SCEOUTPUT,#);
+ );
+ if(indexof(PathT,"platex")>0, //180903,180908from
+ tmp="\setmargin{"+text(25+SlideMargin_1)+"}{";
+ tmp=tmp+text(145-SlideMargin_1)+"}{";
+ tmp=tmp+text(15+SlideMargin_2)+"}{";
+ tmp=tmp+text(100-SlideMargin_2)+"}";
+ ,
+ tmp="\setmargin{"+text(20+SlideMargin_1)+"}{";
+ tmp=tmp+text(135-SlideMargin_1)+"}{";
+ tmp=tmp+text(15+SlideMargin_2)+"}{";
+ tmp=tmp+text(100-SlideMargin_2)+"}";
+ ); // 180903,180908to
+ println(SCEOUTPUT,"");
+ println(SCEOUTPUT,tmp);
+ println(SCEOUTPUT,"");
+ println(SCEOUTPUT,"\ketslideinit");
+ println(SCEOUTPUT,"");
+ forall(tmp, // 15.07.21
+ if(substring(#,0,1)=="\", println(SCEOUTPUT,#));
+ );
+// if(!isstring(PageStyle),PageStyle="headings");//180524from
+// println(SCEOUTPUT,"\pagestyle{"+PageStyle+"}");
+ println(SCEOUTPUT,"\pagestyle{empty}");//180524to
+ println(SCEOUTPUT,"");
+ println(SCEOUTPUT,"\begin{document}");
+ println(SCEOUTPUT,"");
+ if(length(wall)>0,
+ println(SCEOUTPUT,"\input{fig/"+wall+".tex}");
+ println(SCEOUTPUT,"");
+ );
+ if(length(tmp2)>0,
+ if(indexof(tmp2," no")==0, // 16.11.11from
+ println(SCEOUTPUT,"\begin{layer}{120}{0}");
+ if(substring(tmp2,0,1)!="\",
+ tmp2="\putnotese{0}{0}{\input{fig/"+tmp2+".tex}}";//16.12.27
+ );
+ println(SCEOUTPUT,tmp2);
+ println(SCEOUTPUT,"\end{layer}");
+ println(SCEOUTPUT,"");
+ ,
+ tmp=indexof(tmp2,"=");
+ if(tmp==0,
+ top="10mm";
+ ,
+ top=substring(tmp2,tmp,length(tmp2));
+ );
+ println(SCEOUTPUT,"");
+ println(SCEOUTPUT,"\vspace*{"+top+"}");
+ println(SCEOUTPUT,"");
+ ); // 16.11.11until
+ );
+ println(SCEOUTPUT,"\def\mainslidetitley{22}");
+ forall(1..14, //16.12.22from
+ tmp=SlideColorList_#;
+ if(!isstring(tmp),tmp=text(tmp));
+ if(length(tmp)>0,
+ tmp="\def"+slidecmd_#+"{"+tmp+"}";
+ println(SCEOUTPUT,tmp);
+ );
+ );//16.12.22until
+ println(SCEOUTPUT,"");
+ println(SCEOUTPUT,"\color{"+SlideColorList_(15)+"}");
+ println(SCEOUTPUT,BodyStyle);//17.01.07
+// println(SCEOUTPUT,"\thispagestyle{empty}");//180524
+ println(SCEOUTPUT,"\addtocounter{page}{-1}");//17.01.29
+ println(SCEOUTPUT,"");
+ verbflg=0; //16.06.28
+ repeatflg=0;//16.12.02
+ nrep=0;//16.12.27
+ nrepprev=0;//17.01.03
+ npara=0;//16.12.27
+ forall(2..length(slideL),ns,
+ ThinFlg=0;
+ NonThinFlg=0;
+ flg=0;
+ tmp1="";
+ tmp2="";
+ tmp3="";
+ sld=Removespace(slideL_ns); // 16.06.28
+ sestr="";
+ if((substring(sld,0,1)=="%") & (substring(sld,0,2)!="%%"), // 17.06.23
+ Repeatsameslide(repeatflg,"",[slideL_ns]);
+ if(repeatflg>0,
+ tmp=indexof(sld,"]::");
+ if(tmp>0,
+ if(substring(sld,1,2)!="%",//17.05.31
+ if(substring(sld,1,5)=="thin",
+ ThinFlg=1;
+ );
+ sestr=substring(sld,1,tmp);
+ sld=substring(sld,tmp+2,length(sld));
+ tmp=indexof(sestr,"[");
+ sestr=substring(sestr,tmp-1,length(sestr));//17.01.05
+ );
+ );
+ );
+ if(substring(sld,1,7)=="repeat", // 16.12.09from
+ tmp=indexof(sld,"=");
+ tmp5=substring(sld,tmp,length(sld));
+ tmp=indexof(tmp5,",");
+ if(tmp>0,//17.01.03from
+ tmp5=substring(tmp5,0,tmp-1);
+ );//17.01.03until
+ repeatflg=1;
+ if(length(tmp5)>0,
+ nrep=parse(tmp5);
+ tmp=[];
+ if(length(wall)>0,
+ tmp=["","\input{fig/"+wall+".tex}"];
+ );
+ tmp=concat(tmp,
+ ["","\sameslide"+NewSlideOption,"","\vspace*{18mm}",""]);//180524
+ RepeatList=apply(1..nrep,if(#==1,[],tmp));
+ );
+ if(sestr=="",flg=1);
+ tmp=indexof(sld,",");//17.01.03from
+ if(tmp>0,
+ sld="%"+substring(sld,tmp,length(sld));
+ if(indexof(sld,"=")==0,sld=sld+"=");
+ );//17.01.03until
+ );
+ if(substring(sld,1,5)=="para",
+ paractr=paractr+1;
+ repeatflg=1;
+ tmp=indexof(sld,"=");
+ tmp=substring(sld,tmp,length(sld));
+ if(length(tmp)==0, //17.01.03
+ npara=0;
+ ,
+ paradt=tokenize(tmp,":");
+ tmp=fileslist(Dirwork+"/fig/"+paradt_1);
+ if(length(tmp)>0,
+ parafiles=tokenize(tmp,",");
+ if(indexof(paradt_4,"input")>0,
+ tmp0=indexof(paradt_4,",");//17.01.29from
+ if(tmp0>0,
+ paradt=append(paradt,substring(paradt_4,tmp0,length(paradt_4)));
+ paradt_4=substring(paradt_4,0,tmp0-1);
+ );//17.01.29until
+ parafiles=select(parafiles,indexof(#,".tex")>0);
+ parafiles=sort(parafiles); //180627
+ if(indexof(paradt_4,"\input")==0,paradt_4="\"+paradt_4);//16.12.17
+ );
+ if(indexof(paradt_4,"include")>0,
+ parafiles=select(parafiles,indexof(#,".pdf")>0);
+ parafiles=sort(parafiles); //180627
+ );
+ npara=length(parafiles);
+ ,
+ println(Dirwork+"/fig/"+paradt_1+" not found");
+ parafiles=[];
+ npara=0;
+ );
+ if(nrep==0,
+ nrep=npara;
+ if(length(wall)>0,
+ tmp=["","\input{fig/"+wall+".tex}"];
+ );
+ tmp=concat(tmp,
+ ["","\sameslide"+NewSlideOption,"","\vspace*{18mm}",""]);//180524
+ RepeatList=apply(1..nrep,if(#==1,[],tmp));
+ );
+ );
+ forall(1..nrep, //16.12.28
+ tmp4=[]; //16.12.31from
+ if(hyperflg>0,
+ tmp4=["\hypertarget{para"+text(paractr)+"pg"+text(#)+"}{}"];
+ );//16.12.31to
+ if(npara>0, //17.01.03
+ tmp4=concat(tmp4,["","\begin{layer}{120}"+paradt_2]);
+ if(#<=npara, //16.12.28from
+ tmp=parafiles_#;
+ ,
+ tmp=parafiles_npara;
+ );
+ tmp="{"+paradt_4+"{fig/"+paradt_1+"/"+tmp+"}}";
+ if(length(paradt)>=5,
+ tmp="{\scalebox{"+text(paradt_5)+"}"+tmp+"}";
+ );
+ if(substring(paradt_3,0,1)=="\",
+ tmp=paradt_3+tmp;
+ ,
+ tmp="\putnote"+paradt_3+tmp;
+ );
+ tmp4=concat(tmp4,[tmp]);//16.12.31
+ ,
+ tmp4=concat(tmp4,["","\begin{layer}{120}{0}"]);
+ );
+ if((hyperflg>0) & (LinkSize>0.15),
+ tmp="{"+text(LinkPosV)+"}{\hyperlink{para"; // 17.01.12from
+ tmp1=tmp+text(paractr)+"pg";
+ tmp2=tmp+text(paractr-1)+"pg"+text(nrepprev);
+ tmp=tmp2; //180526from
+ tmp3=[text(LinkPosH-29*LinkSize)+"}"+tmp+"}{\fbox{\Ctab{"
+ +text(2.5*LinkSize)+"mm}{\scalebox{"+text(LinkSize)
+ +"}{\scriptsize $\mathstrut||\!\lhd$}}}}}"];
+ if(nrep>1,//180526
+ tmp="{"+text(LinkPosV)+"}{\hyperlink{para"; // 17.01.12from
+ tmp1=tmp+text(paractr)+"pg";
+ tmp2=tmp+text(paractr-1)+"pg"+text(nrepprev);
+ tmp=tmp1+text(1);
+ tmp3=append(tmp3,
+ text(LinkPosH-24*LinkSize)+"}"+tmp+"}{\fbox{\Ctab{"
+ +text(2.5*LinkSize)+"mm}{\scalebox{"+text(LinkSize)
+ +"}{\scriptsize $\mathstrut|\!\lhd$}}}}}"); //180526to
+ if(#>1,tmp=tmp1+text(#-1),tmp=tmp2);
+ tmp3=append(tmp3,
+ text(LinkPosH-17*LinkSize)+"}"+tmp+"}{\fbox{\Ctab{"
+ +text(4.5*LinkSize)+"mm}{\scalebox{"+text(LinkSize)
+ +"}{\scriptsize $\mathstrut\!\!\lhd\!\!$}}}}}");
+ if(#<nrep,tmp=tmp1+text(#+1),tmp=tmp1+text(nrep));
+ tmp3=append(tmp3,
+ text(LinkPosH-10*LinkSize)+"}"+tmp+"}{\fbox{\Ctab{"
+ +text(4.5*LinkSize)+"mm}{\scalebox{"+text(LinkSize)
+ +"}{\scriptsize $\mathstrut\!\rhd\!$}}}}}");
+ tmp=tmp1+text(nrep); //180526from
+ tmp3=append(tmp3,
+ text(LinkPosH-5*LinkSize)+"}"+tmp+"}{\fbox{\Ctab{" // 17.01.19
+ +text(2.5*LinkSize)+"mm}{\scalebox{"+text(LinkSize)
+ +"}{\scriptsize $\mathstrut \!\rhd\!\!|$}}}}}");
+ );
+ tmp="{"+text(LinkPosV)+"}{\hyperlink{para"; //180529[2lines]
+ tmp=tmp+text(paractr+1)+"pg"+text(1);
+ tmp3=append(tmp3,
+ text(LinkPosH)+"}"+tmp+"}{\fbox{\Ctab{" // 17.01.19
+ +text(2.5*LinkSize)+"mm}{\scalebox{"+text(LinkSize)
+ +"}{\scriptsize $\mathstrut \!\rhd\!\!||$}}}}}"); //180526to
+ );
+ tmp3=apply(tmp3,tmp,"\putnotew{"+tmp);
+ tmp4=concat(tmp4,tmp3);// 17.01.12to
+ tmp="\putnotee{"+text(LinkPosH+1)+"}{"+text(LinkPosV)+"}";//180524
+ tmp=tmp+"{\scriptsize\color{blue} "+text(#)+"/"+text(nrep)+"}"; //180524[blue]
+ tmp4=append(tmp4,tmp);
+ tmp4=concat(tmp4,["\end{layer}",""]);//16.12.31until
+ Repeatsameslide(repeatflg,text([#]),tmp4);
+ );
+ );
+ );
+ if(substring(sld,0,2)=="%%", //17.06.23from
+ println(SCEOUTPUT,sld);
+ flg=1;
+ ); //17.06.23to
+ if(flg==0,
+ if(indexof(sld,"\begin{verbatim}")==1, // 16.06.28from
+ Repeatsameslide(repeatflg,sestr,[slideL_ns]);
+ verbflg=1;
+ flg=1;
+ ); // 16.06.28
+ if(indexof(sld,"\end{verbatim}")==1,
+ Repeatsameslide(repeatflg,sestr,[slideL_ns]);
+ verbflg=0;
+ flg=1;
+ ); // 16.06.28until
+ if(flg==0,
+ tmp=replace(sld,"||||","//"); // 16.05.11
+ tmp=tokenize(tmp,"::"); // 16.05.11
+ tmp1=tmp_1;
+ if(length(tmp)>1,tmp2=tmp_2,tmp2="");
+ if(length(tmp)>2,tmp3=tmp_3,tmp3="");
+ if(length(tmp)>3,tmp4=tmp_4,tmp4="");
+ if(length(tmp)>4,tmp5=tmp_5,tmp5="");
+ if(contains(["main","new","same"],tmp1),
+ if(tmp1=="new", // 16.11.09from
+ newoption="";
+ if(substring(tmp2,0,1)=="[",newoption=tmp2);
+ );
+ if(tmp1=="same",
+ if(length(tmp2)==0,tmp2=newoption);
+ );// 16.11.09until
+ println(SCEOUTPUT,"");
+ println(SCEOUTPUT,"%%%%%%%%%%%%%%%%%%%%");
+ println(SCEOUTPUT,"");
+ );
+ );
+ if(flg==0&tmp1=="main",
+ if(repeatflg==1,
+ forall(2..(length(RepeatList)),nrep,
+ tmp=RepeatList_nrep;
+ forall(tmp,
+ if(substring(#,0,1)!="%", //16.01.04
+ println(SCEOUTPUT,#);
+ );
+ );
+ );
+ println(SCEOUTPUT,"");
+ repeatflg=0;RepeatList=[];
+ nrepprev=nrep;//17.01.03
+ nrep=0;//16.12.27
+ npara=0;//16.12.27
+ );
+ if(length(wall)>0,
+ println(SCEOUTPUT,"\input{fig/"+wall+".tex}");
+ );
+ println(SCEOUTPUT,"\mainslide{"+tmp2+"}");
+ println(SCEOUTPUT,"");
+ println(SCEOUTPUT,"");
+ tmp2="";
+ flg=1;
+ );
+ if(flg==0&tmp1=="new",
+ if(repeatflg==1,
+ forall(2..(length(RepeatList)),nrep,
+ tmp=RepeatList_nrep;
+ forall(tmp,
+ if(substring(#,0,1)!="%", //16.01.04
+ println(SCEOUTPUT,#);
+ );
+ );
+ );
+ println(SCEOUTPUT,"");
+ repeatflg=0;RepeatList=[];
+ nrepprev=nrep;//17.01.03
+ nrep=0;
+ npara=0;
+ );
+ if(length(wall)>0,
+ Repeatsameslide(repeatflg,sestr,["\input{fig/"+wall+".tex}"]);
+ );
+ tmp="\newslide";
+ NewSlideOption=""; //17.01.04
+ if(substring(tmp2,0,1)=="[",
+ NewSlideOption=tmp2; //17.01.04
+ tmp=tmp+tmp2;
+ tmp2=tmp3;
+ tmp3=tmp4;
+ tmp4=tmp5;
+ );
+ tmp=tmp+"{"+tmp2+"}";
+ Repeatsameslide(repeatflg,sestr,[tmp,"","\vspace*{18mm}",""]);//180524
+ tmp2="";
+ flg=1;
+ );
+ if(flg==0&tmp1=="same",
+ if(repeatflg==1,
+ forall(2..(length(RepeatList)),nrep,
+ tmp=RepeatList_nrep;
+ forall(tmp,
+ if(substring(#,0,1)!="%", //16.01.04
+ println(SCEOUTPUT,#);
+ );
+ );
+ );
+ println(SCEOUTPUT,"");
+ repeatflg=0;RepeatList=[];
+ nrepprev=nrep;//17.01.03
+ nrep=0;
+ npara=0;
+ );
+ if(length(wall)>0,
+ println(SCEOUTPUT,"\input{fig/"+wall+".tex}");
+ );
+ tmp="\sameslide"+NewSlideOption; //17.01.04;
+// if(substring(tmp2,0,1)=="[",
+// tmp=tmp+tmp2;
+// tmp2=tmp3;
+// tmp3=tmp4;
+// );
+ println(SCEOUTPUT,tmp);
+ println(SCEOUTPUT,""); //180524
+ println(SCEOUTPUT,"\vspace*{18mm}");
+ println(SCEOUTPUT,"");
+ tmp4=tmp3;
+ tmp3=tmp2;
+ tmp2="";
+ flg=1;
+ );
+ if(flg==0&tmp1=="itemize",
+ Repeatsameslide(repeatflg,sestr,["\begin{itemize}"]);
+ flgL=append(flgL,"i");
+ tmp2="";
+ tmp3="";
+ flg=1;
+ );
+ if(flg==0&tmp1=="enumerate",
+ Repeatsameslide(repeatflg,sestr,["\begin{enumerate}"+tmp2]);
+ flgL=append(flgL,"e");
+ tmp2="";
+ tmp3="";
+ flg=1;
+ );
+ if(flg==0&tmp1=="verbatim", //16.06.28from
+ Repeatsameslide(repeatflg,sestr,["\begin{verbatim}"]);
+ flgL=append(flgL,"v");
+ tmp1="";
+ tmp2="";
+ tmp3="";
+ verbflg=1;
+ flg=1;
+ ); //16.06.28until
+ if(flg==0&tmp1=="layer",
+ Repeatsameslide(repeatflg,sestr,[""]);
+ tmp="\begin{layer}";
+ if(length(tmp2)>0,
+ tmp=tmp+tmp2;
+ ,
+ tmp=tmp+"{120}{0}";
+ );
+ Repeatsameslide(repeatflg,sestr,[tmp]);
+ flgL=append(flgL,"l");
+ tmp2="";
+ tmp3="";
+ flg=1;
+ );
+ if(flg==0&tmp1=="putnote",
+ tmp="\putnote"+tmp2+"{";
+ if(indexof(tmp3,"include")==0,
+ tmp1=indexof(tmp3,",");
+ if(tmp1==0,
+ tmp=tmp+"\input{fig/"+tmp3+".tex}}";
+ ,
+ tmp2=substring(tmp3,tmp1,length(tmp3));
+ tmp3=substring(tmp3,0,tmp1-1);
+ tmp=tmp+"\scalebox{"+tmp2+"}{\input{fig/"+tmp3+".tex}}}";
+ );
+ ,
+ tmp2=indexof(tmp3,"[");
+ tmp3=substring(tmp3,tmp2-1,length(tmp3));
+ tmp=tmp+"\includegraphics"+tmp3+"{fig/"+tmp4+"}}";
+ );
+ Repeatsameslide(repeatflg,sestr,[tmp]);
+ tmp2="";
+ tmp3="";
+ flg=1;
+ );
+ if(flg==0&tmp1=="item",
+ NonThinFlg=1;
+ Repeatsameslide(repeatflg,sestr,["\item"]);
+ tmp3="";
+ flg=1;
+ );
+ if(flg==0&tmp1=="end"&(length(flgL)>0), //180526
+ tmp=flgL_(length(flgL));
+ if(tmp=="i",
+ Repeatsameslide(repeatflg,sestr,["\end{itemize}"]);
+ );
+ if(tmp=="e",
+ Repeatsameslide(repeatflg,sestr,["\end{enumerate}"]);
+ );
+ if(tmp=="l",
+ Repeatsameslide(repeatflg,sestr,["\end{layer}",""]);
+ );
+ if(tmp=="v", // 16.06.28from
+ Repeatsameslide(repeatflg,sestr,["\end{verbatim}",""]);
+ verbflg=0;
+ ); // 16.06.28until
+ flgL=flgL_(1..(length(flgL)-1));
+ tmp2="";
+ tmp3="";
+ flg=1;
+ );
+ if(flg==0, // 16.06.28from
+ if(verbflg==0,
+ tmp2=tmp1;
+ ,
+ tmp2=slideorgL_ns; // 16.07.11
+ tmp2=replace(tmp2,"||","//"); // 16.07.10
+ tmp3="";
+ );
+ ); // 16.06.28until
+ if(length(tmp2)>0,
+ if(tmp2=="...", tmp2="");
+ if(NonThinFlg==1,NonThinFlg=2);
+ Repeatsameslide(repeatflg,sestr,[tmp2]);
+ );
+ if(length(tmp3)>0,
+ Repeatsameslide(repeatflg,sestr,["\begin{layer}{120}{0}"]);
+ if(substring(tmp3,0,1)=="{",
+ tmp=tmp3;
+ tmp3=tmp4;
+ ,
+ tmp="{60}{0}";
+ );
+ tmp1=indexof(tmp3,",");
+ if(tmp1==0,
+ tmp3="\putnotes"+tmp+"{\input{fig/"+tmp3+".tex}}";
+ ,
+ tmp2=substring(tmp3,tmp1,length(tmp3));
+ tmp3=substring(tmp3,0,tmp1-1);
+ tmp3="\putnotes"+tmp+"{\scalebox{"+tmp2+"}
+ {\input{fig/"+tmp3+".tex}}}";
+ );
+ Repeatsameslide(repeatflg,sestr,[tmp3,"\end{layer}",""]);
+ );
+ );
+ );
+ if(repeatflg==1,
+ forall(2..(length(RepeatList)),nrep,
+ tmp=RepeatList_nrep;
+ forall(tmp,
+ if(substring(#,0,1)!="%", //16.01.04
+ println(SCEOUTPUT,#);
+ );
+ );
+ );
+// println(SCEOUTPUT,"");
+ );
+ println(SCEOUTPUT,"\label{pageend}\mbox{}"); //180529
+ println(SCEOUTPUT,"");
+ println(SCEOUTPUT,"\end{document}");
+ closefile(SCEOUTPUT);
+);
+////%Presentation end////
+
+////%Mkslides start////
+Mkslides():=(
+ regional(store,sep,parent,texparentorg,tmp,tmp1,tmp2,tmp3,tmp4,flg);
+ store=Fillblack();//181125
+ tmp4=Fhead;
+ Fhead="";
+ if(!iswindows(), //17.10.13
+ Dirwork=replace(Dirwork,"\",pathsep());
+ parent=replace(Dirwork+Shellparent,"\",pathsep());
+ ,
+ Dirwork=replace(Dirwork,"/",pathsep());
+ parent=replace(Dirwork+Batparent,"/",pathsep());// 16.05.29
+ );
+ tmp=replace(Dirwork,pathsep()+"fig","");//180604[2lines]
+ Changework(tmp);
+ Setdirectory(Dirwork);
+ if(!iswindows(), //180604from
+ println(setexec(Dirwork,Shellparent));
+ ); //180604to
+ if(length(Texmain)>0, // 15.08.14 from
+ Texparent=Texmain;
+ );
+ texparentorg=Texparent; //17.04.10from
+ if(isstring(Slidename), // 15.08.14 from
+ Texparent=Slidename;
+ );//17.04.10until
+ if(!isexists(Dirwork,Texparent+".txt"), // 17.04.12from
+ drawtext(mouse().xy,Texparent+".txt not exist in "+Dirwork,
+ size->24,color->[1,0,0]);
+ , // 17.04.12until
+ Presentation(Texparent); // 15.08.14to
+ if(iswindows(),
+ tmp2=Batparent;
+ parent=replace(Dirwork+Batparent,sep+"fig","");// 16.05.29
+ if(indexof(Pathpdf,"Adobe")>0, //17.12.09from
+ Makebat(Texparent,"ttv");
+ ,
+ Makebat(Texparent,"tv");
+ ); //17.12.09until
+ kc():=(
+ println("kc : "+kc(parent,Dirlib,Fnametex)); // 16.06.10, 17.02.19
+ );
+ kc();
+ Batparent=tmp2;
+ ,
+ tmp2=Shellparent;
+ parent=replace(Dirwork+Shellparent,sep+"fig","");// 16.05.29
+ Shellparent=replace(Shellparent,sep+"fig","");
+ if(indexof(Pathpdf,"Adobe")>0, //17.12.09from
+ Makeshell(Texparent,"ttv");
+ ,
+ Makeshell(Texparent,"tv");
+ ); //17.12.09until
+ kc():=(
+ println("kc : "+kc(parent,Mackc+Dirlib,Fnametex)); // 16.06.10
+ );
+ kc();
+ Shellparent=tmp2;
+ );
+ );
+ Dirwork=Dirwork+pathsep()+"fig"; //17.10.16
+ setdirectory(Dirwork);
+ Fhead=tmp4;
+ Texparent=texparentorg;//17.04.10
+ Fillrestore(store);//181125
+);
+////%Mkslides end////
+
+////%Mkslidesummary start////
+Mkslidesummary():=( // 17.10.26 for R
+ regional(texparentorg);
+ texparentorg=Texparent;
+ if(isstring(Slidename),
+ Texparent=Slidename;
+ );
+ Mkslidesummary(Texparent,Texparent+"digest",["m","Wait=3"]);
+ Texparent=texparentorg;
+);
+Mkslidesummary(fin,fout):=
+ Mkslidesummary(fin,fout,["m","Wait=3"]);
+Mkslidesummary(inputfile,outputfile,options):=(
+//help:Mkslidesummary(fin,fout,options);
+ regional(store,fin,fout,out,figflg,dirworkorg,dirtop,tmp);
+ store=Fillblack();//181125
+ dirworkorg=Dirwork;//17.04.10from
+ dirtop=replace(Dirwork,pathsep()+"fig","");
+ Changework(dirtop);//17.04.10uptp
+ if(ismacosx(), //180604from
+ println(setexec(Dirwork,Shellparent));
+ ); //180604to
+ fin=inputfile;
+ if(indexof(fin,".")==0,fin=fin+".tex");
+ fout=outputfile;
+ if(indexof(fout,".")==0,fout=fout+".tex");
+ cmdL=[
+ "Dt=readLines"+PaO()+"'"+fin+"',encoding='UTF-8')",[],
+ "num=grep"+PaO()+"'hypertarget',Dt,fixed=TRUE)",[], //180412
+ "Dt=Dt[setdiff"+PaO()+"1:length"+PaO()+"Dt),num)]",[],
+ "Smain=c"+PPa("")+";Snew=c"+PPa("")+";Ssame=c"+PPa(""),[],
+ "for"+PaO()+"J in 1:length"+PaO()+"Dt)){",[],
+ " Tmp=length"+PaO()+"grep"+PaO()+"'mainslide{',Dt[J],fixed=TRUE))",[], //180412
+ " if"+PaO()+"Tmp>0){Smain=c"+PaO()+"Smain,1)}else{Smain=c"+PaO()+"Smain,0)}",[],
+ " Tmp=length"+PaO()+"grep"+PaO()+"'newslide{',Dt[J],fixed=TRUE))",[], //180412
+ " if"+PaO()+"Tmp>0){Snew=c"+PaO()+"Snew,1)}else{Snew=c"+PaO()+"Snew,0)}",[],
+ " Tmp=length"+PaO()+"grep"+PaO()+"'sameslide',Dt[J],fixed=TRUE))",[], //180412
+ " if"+PaO()+"Tmp>0){Ssame=c"+PaO()+"Ssame,1)}else{Ssame=c"+PaO()+"Ssame,0)}",[],
+ "}",[],
+ "Nnew=c"+PPa("")+";Nsame=c"+PPa(""),[],
+ "for"+PaO()+"J in 1:length"+PaO()+"Dt)){",[],
+ " if"+PaO(2)+"Snew[J]==1)|"+PaO()+"Smain[J]==1)){Nnew=c"+PaO()+"Nnew,J)}",[],
+ " if"+PaO()+"Ssame[J]==1){Nsame=c"+PaO()+"Nsame,J)}",[],
+ "}",[],
+ "Out=Dt[1:Nnew[1]]",[],
+ "for"+PaO()+"J in Looprange"+PaO()+"2,length"+PaO()+"Nnew))){",[],
+ " Tmp=max"+PaO()+"c"+PaO()+"1,Nsame[Nsame<Nnew[J]]))",[],
+ " Tmp=max"+PaO()+"c"+PaO()+"Tmp,Nnew[J-1]))+1",[],
+ " Out=c"+PaO()+"Out,Dt[Tmp:Nnew[J]])",[],
+ "}",[],
+ "Tmp=max"+PaO()+"c"+PaO()+"Nsame[-1],Nnew[-1]))+1",[],
+ "Out=c"+PaO()+"Out,Dt[Tmp:length"+PaO()+"Dt)])",[],
+ "writeLines"+PaO()+"Out,'"+fout+"',sep='\n')",[] //180412[2lines removed]
+ ];
+ CalcbyR("",cmdL,append(options,"Cat=n"));//180412
+ wait(1000);
+ Changework(dirtop);//17.04.10
+ tmp=replace(fout,".tex","");
+ if(iswindows(),
+ Makebat(tmp,"tv");
+ ,
+ Makeshell(tmp,"tv");
+ );
+ kc();
+ Changework(dirworkorg);//17.04.10
+ Fillstore(store);//181125
+);
+////%Mkslidesummary end////
+
+////%BBdata start////
+BBdata():=BBdata(BBTarget,0);
+BBdata(fname):=BBdata(fname,0); // 16.04.09
+BBdata(fname,optionorg):=(
+//help:BBdata(filename);
+//help:BBdata(options=0(automatic),1(make),"w=","h=");
+ regional(fout,flg,path,file,kcfile,options,eqL,reL,stL,
+ waiting,addop,tmp,tmp1,tmp2);
+ path="";
+ file=fname;
+ flg=0;
+ waiting=2;
+ forall(reverse(1..length(fname)),
+ if(flg==0,
+ tmp=substring(fname,#-1,#);
+ if(tmp=="/" % tmp=="\", // 14.01.15
+ path=substring(fname,0,#-1);
+ file=substring(fname,#,length(fname));
+ flg=1;
+ );
+ );
+ );
+ if(path=="",path=Dirwork);//16.10.05
+ if(indexof(file,".")==0,file=file+".pdf");
+ if(islist(optionorg),options=optionorg,options=[optionorg]);
+ tmp=Divoptions(options);
+ eqL=tmp_5;
+ reL=tmp_6;
+ stL=tmp_7;
+ flg=0;
+ addop="";
+ if(length(reL)>0,
+ tmp=reL_1;
+ if(tmp==1,flg=1);
+ );
+ forall(stL,
+ tmp=Toupper(substring(#,0,1));
+ if(tmp=="M",flg=1);
+ );
+ forall(eqL,
+ tmp=indexof(#,"=");
+ tmp1=Toupper(substring(#,0,1)); //181111
+ tmp2=substring(#,tmp,length(#));
+ if(tmp1=="W",
+ addop=addop+",width="+tmp2;
+ options=remove(options,[#]);
+ );
+ if(tmp1=="H",
+ addop=addop+",height="+tmp2;
+ options=remove(options,[#]);
+ );
+ );
+ tmp=indexof(file,".");
+ tmp1=substring(file,0,tmp-1);
+ fout=tmp1+".txt";
+ if(iswindows(),
+ kcfile="kc.bat";
+ ,
+ if(ismacosx(), //181219
+ kcfile="kc.command";
+ ,
+ kcfile="kc.sh";
+ );
+ );
+ if(flg==0,
+ tmp=load(fout); //
+ if(length(tmp)==0,
+ flg=1;
+ ,
+ tmp=tokenize(tmp,"%%");
+ tmp=tmp_2;
+ tmp1=indexof(tmp,":");
+ tmp=substring(tmp,tmp1,length(tmp));
+ tmp=Removespace(tmp);
+ if(tmp!=file,flg=1);
+ );
+ );
+ if(length(path)==0,
+ path=Dirwork;
+ );
+ if(flg==1,
+ setdirectory(path);
+ tmp=load(file);
+ setdirectory(Dirwork);
+ if(length(tmp)==0,
+ println(" => "+file+" not exists");
+ flg=-1;
+ );
+ );
+ if(flg==1,
+ SCEOUTPUT = openfile(kcfile);
+ if(!iswindows(),
+ println(SCEOUTPUT,"#!/bin/sh");
+ );
+ println(SCEOUTPUT,"cd "+Dqq(path)); //190414
+ tmp=replace(PathT,"pdflatex","extractbb"); //16.11.22
+ tmp=replace(tmp,"pdftex","extractbb"); //16.11.22
+ tmp=replace(tmp,"xelatex","extractbb");
+ tmp=replace(tmp,"uplatex","extractbb"); //17.09.20
+ tmp=replace(tmp,"platex","extractbb");
+ tmp=replace(tmp,"latex","extractbb");
+ tmp=tmp+" -O "+file;
+ if(iswindows(),
+ tmp=tmp+" > "+Dirwork+"\"+fout;
+ ,
+ tmp=tmp+" > "+Dirwork+"/"+fout;
+ );
+ println(SCEOUTPUT,tmp);
+ println(SCEOUTPUT,"exit 0");
+ closefile(SCEOUTPUT);
+ kc(Dirwork+"/"+kcfile,Mackc+Dirlib,Fnametex); // 16.06.07
+ );
+ if(flg>=0,
+ tmp1=0;
+ repeat(floor(waiting*1000/WaitUnit),
+ if(tmp1==0,
+ wait(10);
+ tmp=load(fout);
+ if(indexof(tmp,"CreationDate")>0,
+ tmp1=1;
+ );
+ );
+ );
+ if(length(tmp)==0,
+ println(fout+" not generated. Maybe "+kcfile+" not run.");
+ ,
+ tmp=tokenize(tmp,"%%");
+ tmp=select(tmp,indexof(#,"Bounding")>0);
+ tmp=tmp_2; //
+ tmp1=indexof(tmp,":");
+ tmp=substring(tmp,tmp1,length(tmp));
+ tmp=Removespace(tmp);
+ tmp=tokenize(tmp," ");
+ tmp1="";
+ forall(tmp,
+ tmp1=tmp1+Sprintf(#,2)+" ";
+ );
+ tmp1=Removespace(tmp1)+addop;
+ tmp2="\includegraphics[bb="+tmp1+"]{"+file+"}";
+ println(tmp2);
+ );
+ );
+// setdirectory(Dirwork);
+ tmp2; // 16.04.25
+);
+////%BBdata end////
+
+////%Gcd start//// //190623
+Gcd(xL):=Gcd(xL,100);
+Gcd(xL,nmx):=(
+//help:Gcd([12,18,24]);
+//help:Gcd(xlist,max<100>);
+ regional(mL,ng,tmp);
+ ng=nmx;
+ mL=apply(xL,mod(abs(#),ng));
+ while(sum(mL)>0,
+ ng=ng-1;
+ mL=apply(xL,mod(abs(#),ng));
+ );
+ ng;
+);
+////%Gcd end////
+
+////%Fracform start//// //190623
+Fracform(x):=Fracform(x,5);
+Fracform(x,denorg):=(
+//help:Fracform(1.3);
+//help:Fracform(1.3,[denomlist]);
+ regional(den,fL,tmp,nn,mm,err);
+ den=denorg;
+ if(islist(den),
+ if(!contains(den,1), den=prepend(1,den));
+ ,
+ den=1..den;
+ );
+ fL=[];
+ forall(den,
+ tmp=round(x*#);
+ fL=append(fL,[tmp,#,abs(tmp/#-x)]);
+ );
+ fL=sort(fL,#_3);
+ tmp=fL_1;
+ mm=tmp_1; nn=tmp_2; err=tmp_3;
+ if(nn>1,
+ out="fr("+text(mm)+","+text(nn)+")";
+ ,
+ out=text(mm);
+ );
+ [out,"err="+format(err,6)];
+);
+////%Fracform end////
+
+////%Totexformpart start////
+Totexformpart(str):=( //190514
+ regional(plv,funL,repL,flg,flgf,nall,nn,fun,funf,
+ frL,fr,out,tmp,tmp1,tmp2,tmp3,tmp4);
+ repL=[ //190515from
+ ["frac",["","\frac{xx}{yy}"]],
+ ["log",["\log{xx}","\log_{xx} yy"]],
+ ["sqrt",["\sqrt{xx}","\sqrt[xx]{yy}"]],
+ ["pow",["","{xx}^{yy}"]],
+ ["sin",["\sin{xx}","\sin^{xx}{yy}"]], //190522from
+ ["cos",["\cos{xx}","\cos^{xx}{yy}"]],
+ ["tan",["\tan{xx}","\tan^{xx}{yy}"]] //190522to
+ ];
+ funL=apply(repL,substring(#_1,0,2)); //190515to
+ out="";
+ plv=Bracket(str,"()");
+ nall=length(plv);
+ if(nall>0,
+ frL=[];
+ forall(1..nall,nn,
+ tmp1=plv_nn;
+ if(tmp1_2>0,
+ fun="";
+ flgf=0;
+ forall(1..20,
+ if(flgf==0,
+ tmp2=tmp1_1;
+ tmp=substring(str,tmp2-#-1,tmp2-#);
+ if((tmp>="a")&(tmp<="z"),
+ fun=tmp+fun;
+ ,
+ flgf=1;
+ );
+ );
+ );
+ tmp=substring(fun,0,2); //190515from
+ if(contains(funL,tmp),
+ tmp=select(repL,substring(#_1,0,2)==tmp);
+ funf=tmp_1_1; //190515to
+ tmp=select(plv,(#_1>tmp1_1)&(#_2==-tmp1_2));
+ tmp=tmp_1_1-1;
+ frL=append(frL,[fun,funf,tmp1_1,tmp,tmp1_2]);
+ );
+ );
+ );
+ if(length(frL)>0,
+ frL=sort(frL,[-#_5]);
+ fr=frL_1;
+ fun=fr_1; funf=fr_2;
+ tmp1=substring(str,fr_3,fr_4);
+ tmp=select(repL,#_1==funf);
+ tmp=tmp_1;
+ tmp2=tmp_2;
+ tmp=Strsplit(tmp1,","); //190515from
+ nn=length(tmp);
+ if(nn==1,
+ tmp2=Assign(tmp2_1,["xx",tmp_1]);
+ );
+ if(nn==2,
+ tmp2=Assign(tmp2_2,["xx",tmp_1,"yy",tmp_2]);
+ ); //190515to
+ nn=fr_3-length(fun);
+ tmp=substring(str,0,nn-1);
+ out=tmp+tmp2+substring(str,fr_4+1,length(str));
+ ,
+ out="";
+ );
+ );
+ out;
+);
+////%Totexformpart end////
+
+////%Totexform start////
+Totexform(str):=( //190514
+//help:Totexform("frac(2,3)");
+ regional(out,plv,flg,nn,tmp,tmp1);
+ out=replace(str," ","\ ");
+ out=replace(str,"*"," ");
+ plv=Bracket(out,"()"); //190515from
+ flg=0; //190521from
+ if(length(plv)==0,
+ flg=4; //190522
+ );
+ if(flg==0, //190521to
+ tmp=Indexall(out,"("); //190522from
+ tmp1=Indexall(out,")");
+ if(length(tmp)>length(tmp1),
+ flg=2;
+ out=out+"?+)?";
+ );
+ if(length(tmp)<length(tmp1),
+ flg=3;
+ out=out+"?)-?";
+ ); //190522to
+ forall(1..20,
+ if(flg==0,
+ tmp=Totexformpart(out);
+ if(length(tmp)==0,
+ flg=1;
+ ,
+ out=tmp;
+ );
+ );
+ );
+ );
+ if(flg<=1,
+ out=replace(out,"+-","\pm ");
+ out=replace(out,"-+","\mp ");
+ out=replace(out,"<=","\leq ");
+ out=replace(out,">=","\geq ");
+ out=Assign(out,["pi","\pi"]); //190521
+ tmp1=Indexall(out,"^");
+ forall(tmp1,nn,
+ if(substring(out,nn,nn+1)=="(",
+ tmp2=Bracket(substring(out,nn,length(out)),"()");
+ tmp2=select(tmp2,#_2==-1);
+ tmp2=tmp2_1_1+nn;
+ tmp=substring(out,nn+1,tmp2-1);
+ out=substring(out,0,nn)+"{"+tmp+"}";
+ out=out+substring(out,tmp2,length(out));
+ );
+ );
+ );
+ out;
+);
+////%Totexform end////
+
+////%Tocindyformpart start////
+Tocindyformpart(str):=( //190521
+ regional(plv,funL,repL,flg,flgf,nall,nn,fun,funf,
+ frL,fr,out,tmp,tmp1,tmp2,tmp3,tmp4);
+ repL=[ //190515from
+ ["frac",["","{xx}/{yy}"]],
+ ["log",["log{xx}","log{yy}/log{xx}"]],
+ ["sqrt",["sqrt{xx}","{yy}^(1/{xx})"]], //190522
+ ["pow",["","{xx}^{yy}"]],
+ ["sin",["sin{xx}","{sin{yy}}^{xx}"]], //190522from
+ ["cos",["cos{xx}","{cos{yy}}^{xx}"]],
+ ["tan",["tan{xx}","{tan{yy}}^{xx}"]] //190522to
+ ];
+ funL=apply(repL,substring(#_1,0,2)); //190515to
+ out="";
+ plv=Bracket(str,"()");
+ nall=length(plv);
+ if(nall>0,
+ frL=[];
+ forall(1..nall,nn,
+ tmp1=plv_nn;
+ if(tmp1_2>0,
+ fun="";
+ flgf=0;
+ forall(1..20,
+ if(flgf==0,
+ tmp2=tmp1_1;
+ tmp=substring(str,tmp2-#-1,tmp2-#);
+ if((tmp>="a")&(tmp<="z"),
+ fun=tmp+fun;
+ ,
+ flgf=1;
+ );
+ );
+ );
+ tmp=substring(fun,0,2); //190515from
+ if(contains(funL,tmp),
+ tmp=select(repL,substring(#_1,0,2)==tmp);
+ funf=tmp_1_1; //190515to
+ tmp=select(plv,(#_1>tmp1_1)&(#_2==-tmp1_2));
+ tmp=tmp_1_1-1;
+ frL=append(frL,[fun,funf,tmp1_1,tmp,tmp1_2]);
+ );
+ );
+ );
+ if(length(frL)>0,
+ frL=sort(frL,[-#_5]);
+ fr=frL_1;
+ fun=fr_1; funf=fr_2;
+ tmp1=substring(str,fr_3,fr_4);
+ tmp=select(repL,#_1==funf);
+ tmp=tmp_1;
+ tmp2=tmp_2;
+ tmp=Strsplit(tmp1,","); //190515from
+ nn=length(tmp);
+ if(nn==1,
+ tmp2=Assign(tmp2_1,["xx",tmp_1]);
+ );
+ if(nn==2,
+ tmp2=Assign(tmp2_2,["xx",tmp_1,"yy",tmp_2]);
+ ); //190515to
+ nn=fr_3-length(fun);
+ tmp=substring(str,0,nn-1);
+ out=tmp+tmp2+substring(str,fr_4+1,length(str));
+ ,
+ out="";
+ );
+ );
+ out;
+);
+////%Tocindyformpart end////
+
+////%Tocindyform start////
+Tocindyform(str):=( //190521
+//help:Tocindyform("frac(2,3)");
+ regional(out,plv,flg,nn,tmp,tmp1);
+ out=str;
+ plv=Bracket(out,"()");
+ flg=0;
+ if(length(plv)==0,
+ flg=4; //190522
+ );
+ if(flg==0,
+ tmp=Indexall(out,"("); //190522from
+ tmp1=Indexall(out,")");
+ if(length(tmp)>length(tmp1),
+ flg=2;
+ out=out+"?+)?";
+ );
+ if(length(tmp)<length(tmp1),
+ flg=3;
+ out=out+"?)-?";
+ ); //190522to
+ forall(1..20,
+ if(flg==0,
+ tmp=Tocindyformpart(out);
+ if(length(tmp)==0,
+ flg=1;
+ ,
+ out=tmp;
+ );
+ );
+ );
+ );
+ if(flg<=1,
+ tmp1=Indexall(out,"^");
+ forall(tmp1,nn,
+ if(substring(out,nn,nn+1)=="(",
+ tmp2=Bracket(substring(out,nn,length(out)),"()");
+ tmp2=select(tmp2,#_2==-1);
+ tmp2=tmp2_1_1+nn;
+ tmp=substring(out,nn+1,tmp2-1);
+ out=substring(out,0,nn)+"{"+tmp+"}";
+ out=out+substring(out,tmp2,length(out));
+ );
+ );
+ );
+ out=replace(out,"{","(");
+ out=replace(out,"}",")");
+ out;
+);
+////%Tocindyform end////
+
+////%Animepar start//// //190524
+Animepar(start,ratio,stop):=Animationparam(start,ratio,stop);
+////%Animepar end////
+
+////%Animationparam start////
+Animationparam(start,ratio,stop):=( //190524
+//help:Animationparam(S.x,5,30);
+//help:Animationparam(0,5,[-100,100]);
+// Animeflg,sstart,Dirflg,Current,sorg are used in animation buttons
+ regional(rng);
+ if(islist(stop),rng=stop,rng=[start,stop]);
+ if(isreal(Animeflg),
+ if(Animeflg==1,
+ sstart=Dirflg*ratio*seconds()+sorg;
+ );
+ ,
+ Current=start;
+ sstart=start;
+ );
+ if((sstart<=rng_1)%(sstart>=rng_2), //190528
+ if(sstart<=rng_1,sstart=rng_1, sstart=rng_2); //190528
+ stopanimation();
+ );
+ sstart;
+);
+////%Animationparam end////
+
+////%Copyketcindyjs start//// 190128
+Copyketcindyjs():=(
+ regional(tmp,tmp1,tmp2,drive,fname);
+ if(iswindows(),
+ drive="C:";
+ fname=Dirhead;
+ tmp=indexof(fname,":");
+ if(tmp>0,
+ drive=substring(Dirwork,0,tmp);
+ fname=substring(fname,tmp,length(fname));
+ );
+ kc():=(
+ println("kc : "+kc(Dirwork+Batparent,Dirlib,Fnametex)); // 16.06.04
+ );
+ SCEOUTPUT = openfile(Batparent);
+ println(SCEOUTPUT,drive);
+ println(SCEOUTPUT,"cd "+Dqq(fname));
+ println(SCEOUTPUT,"set xcp="+Dqq("\Windows\System32\xcopy"));
+ tmp1=Dqq("%xcp%")+" /Y /Q /S /E /R "+Dqq("ketcindyjs\");
+ tmp2=" "+Dqq(Dircdy+"ketcindyjs\");
+ println(SCEOUTPUT,tmp1+"Cindy.js.map"+tmp2);
+ println(SCEOUTPUT,tmp1+"webfont.js"+tmp2);
+ println(SCEOUTPUT,tmp1+"katex-plugin.js"+tmp2);
+ println(SCEOUTPUT,tmp1+"Cindy.js"+tmp2);
+ println(SCEOUTPUT,tmp1+"CindyJS.css"+tmp2);
+ tmp1=Dqq("%xcp%")+" /Y /Q /S /E /R "+Dqq("ketcindyjs\katex\");
+ tmp2=" "+Dqq(Dircdy+"ketcindyjs\katex\");
+ println(SCEOUTPUT,tmp1+"katex.min.css"+tmp2);
+ println(SCEOUTPUT,tmp1+"katex.min.js"+tmp2);
+ tmp1=Dqq("%xcp%")+" /Y /Q /S /E /R "+Dqq("ketcindyjs\katex\fonts\");
+ tmp2=" "+Dqq(Dircdy+"ketcindyjs\katex\fonts\");
+ println(SCEOUTPUT,tmp1+"KaTeX_Main-Regular.ttf"+tmp2);
+ println(SCEOUTPUT,tmp1+"KaTeX_Main-Regular.woff"+tmp2);
+ println(SCEOUTPUT,tmp1+"KaTeX_Main-Regular.woff2"+tmp2);
+ println(SCEOUTPUT,tmp1+"KaTeX_Math-Italic.ttf"+tmp2);
+ println(SCEOUTPUT,tmp1+"KaTeX_Math-Italic.woff"+tmp2);
+ println(SCEOUTPUT,tmp1+"KaTeX_Math-Italic.woff2"+tmp2);
+ println(SCEOUTPUT,"exit 0");
+ closefile(SCEOUTPUT);
+ ,
+ kc():=(
+ println("kc : "+kc(Dirwork+Shellparent,Mackc+Dirlib,Fnametex));
+ );
+ tmp1=Dircdy; //190214from
+ if(substring(tmp1,length(tmp1)-1,length(tmp1))=="/",
+ tmp1=substring(tmp1,0,length(tmp1)-1);
+ ); //190214to
+ SCEOUTPUT = openfile(Shellparent);
+ println(SCEOUTPUT,"#!/bin/sh");
+ println(SCEOUTPUT,"cd "+Dqq(tmp1+"/")); //190214from
+ println(SCEOUTPUT,"mkdir ketcindyjs");
+ println(SCEOUTPUT,"cd "+Dqq(Dirhead+"/ketcindyjs"));
+ println(SCEOUTPUT,"cp -r -p katex "+tmp1+"/ketcindyjs");
+ println(SCEOUTPUT,"cp -p Cindy.js "+tmp1+"/ketcindyjs");
+ println(SCEOUTPUT,"cp -p Cindy.js.map "+tmp1+"/ketcindyjs");
+ println(SCEOUTPUT,"cp -p CindyJS.css "+tmp1+"/ketcindyjs");
+ println(SCEOUTPUT,"cp -p katex-plugin.js "+tmp1+"/ketcindyjs");
+ println(SCEOUTPUT,"cp -p webfont.js "+tmp1+"/ketcindyjs"); //190214to
+ println(SCEOUTPUT,"exit 0");
+ closefile(SCEOUTPUT);
+ );
+ kc();
+);
+////%Copyketcindyjs end////
+
+////%Ketjsoption start//// 190201
+Ketjsoption():=Setketcindyjs();
+Ketjsoption(list):=Setketcindyjs(list);
+////%Ketjsoption end////
+
+////%Setketcindyjs start//// 190201
+Setketcindyjs():=(
+ KETJSOP;
+);
+Setketcindyjs(list):=(
+//help:Setketcindyjs();
+//help:Setketcindyjs(["Local=(n)","Scale=(1)","Nolabel=[](or all)","Color=","Grid="]);
+//help:Setketcindyjs(["Removept=[]"]);
+ KETJSOP=list;
+ KETJSOP;
+);
+////%Setketcindyjs end////
+
+////%Ketcindyjsdata start//// //190421
+Ketcindyjsdata(datalistorg):=(
+//help:Ketcindyjsdata(["ans",ans,"pea[parse]",pea]);
+ regional(nn,func,tmp,tmp1,tmp2);
+ datalist=datalistorg;
+ forall(1..(length(datalist)/2), nn, //190423from
+ tmp1=datalist_(2*nn-1);
+ func="";
+ tmp=indexof(tmp1,"[");
+ if(tmp>0,
+ func=substring(tmp1,tmp,length(tmp1)-1);
+ tmp1=substring(tmp1,0,tmp-1);
+ );
+ tmp2=datalist_(2*nn);
+ if(length(func)>0,
+ forall(1..(length(tmp2)),
+ tmp=func+"("+Dqq(tmp2_#)+")";
+ tmp2_#=parse(tmp);
+ );
+ );
+ if(islist(tmp2),
+ tmp="[";
+ forall(tmp2,
+ if(isstring(#),
+ tmp=tmp+Dqq(#)+",";
+ ,
+ tmp=tmp+Textformat(#,5)+",";
+ );
+ );
+ tmp2=substring(tmp,0,length(tmp)-1)+"]";
+ ,
+ tmp2=Dqq(tmp2);
+ );
+ tmp=tmp1+"="+tmp2;
+ KetcindyjsDataList=append(KetcindyjsDataList,tmp);
+ ); //190423to
+);
+Ketcindyjsdata(name,vaL):=(
+ Ketcindyjsdata([name,vaL]);
+);
+////%Ketcindyjsdata end////
+
+////%Findfun start////
+Findfun(name,lineorg):=(
+ regional(line,sep,pL,jj,kk,flg,rmv,out,tmp,tmp1,tmp2);
+ line=Removespace(lineorg);
+ rmv=[name,"regional","forall","if","text","curkernel","append","concat"];
+ rmv=concat(rmv,["append","apply","allelements","indexof"]);
+ rmv=concat(rmv,["substring","select","isstring","length"]);
+ rmv=concat(rmv,["round","unicode","openfile","closefile","println","replace"]);
+ rmv=concat(rmv,["setdirectory","parse","tokenize","import","load","ispoint"]);
+ rmv=concat(rmv,["isreal","layer","autoclearlayer","drawpoly","allcircles"]);
+ rmv=concat(rmv,["floor","flatten","prepend","islist","print","mod","abs","sum"]);
+ rmv=concat(rmv,["cos","sin","tan","arccos","arcsin","arctan","sqrt","reverse","re"]);
+ rmv=concat(rmv,["sort","contains","max","min","allpoints","isselected","common"]);
+ rmv=concat(rmv,["inspect","iscircle","alllines","repeat","remove","format"]);
+ rmv=concat(rmv,["ceil","while","dist","det","exp","err","arctan2","fillpoly"]);
+ rmv=concat(rmv,["drawtext","mouse","allsegments","createpoint","create"]);
+ rmv=concat(rmv,["gsave","connect","draw","grestore","wait"]);
+
+// rmv=concat(rmv,["d","list","c","funN","funP","function","for","return"]); // in string (for R)
+// rmv=concat(rmv,["gsub","cat"]); // in string (for R)
+// rmv=concat(rmv,["options"]); // written for Windows
+// rmv=concat(rmv,["isexists"]); // java functions
+
+ sep=[""," ",",","=","(","+","-","*","/","^","_","[",".","!","&","%",Dq,";",">","<",unicode("0009")];
+ out=[];
+ if(substring(line,0,2)!="//",
+ pL=Indexall(line,"(");
+ forall(pL,jj,
+ flg=0;
+ if(contains(pL,jj-1), flg=1);
+ forall(reverse(1..(jj-1)),
+ if(flg==0,
+ if(#==1,
+ tmp=substring(line,0,1);
+ if(contains(sep,tmp),
+ tmp=substring(line,1,jj-1);
+ ,
+ tmp=substring(line,0,jj-1);
+ );
+ flg=1;
+ );
+ );
+ if(flg==0,
+ tmp=substring(line,#-1,#);
+ if(contains(sep,tmp),
+ tmp=substring(line,#,jj-1);
+ if(indexof(substring(line,0,#-1),"//")==0,
+ flg=1;
+ );
+ );
+ );
+ );
+ if((flg==1)&(length(tmp)>0),
+ tmp1=Indexall(line,Dq); //190419from
+ tmp1=select(tmp1,#<jj);
+ if(mod(length(tmp1),2)==0,
+ out=append(out,tmp);
+ ); //190419
+ );
+ );
+ );
+ out=remove(out,rmv);
+ tmp=out;
+ out=[];
+ forall(tmp,
+ if(!contains(out,#),out=append(out,#));
+ );
+ out;
+);
+////%Findfun end////
+
+////%Extractfun start////
+Extractfun(strL):=(
+ regional(nL,str,str2,start,sep,out,tmp,tmp1,tmp2);
+ out=[];
+ forall(strL,str,
+ nL=Indexall(str,Dq);
+ str2="";
+ start=0;
+ forall(1..(length(nL)/2),
+ tmp1=nL_(2*#-1);
+ str2=str2+substring(str,start,tmp1-1);
+ start=nL_(2*#);
+ );
+ str2=str2+substring(str,start,length(str));
+ fL=Findfun("csdraw",str2);
+ out=remove(out,fL);
+ out=concat(out,fL);
+ );
+);
+////%Extractfun end////
+
+//DL1=Readcsv(Dirhead+pathsep()+"ketcindyjs","basic1list.txt");
+//DL2=Readcsv(Dirhead+pathsep()+"ketcindyjs","basic2list.txt");
+//DL=concat(DL1,DL2);
+//Out=[];
+
+////%Extractall start////
+Extractall(name):=(
+ regional(fL,jj,tmp,tmp1,tmp2,tmp3,flg);
+ fL=apply(Out,#_1);
+ tmp1=select(DL,#_1==name);
+ if(length(tmp1)>0,
+ tmp1=tmp1_1;
+ flg=0; //190417from
+ forall(IgnoreList,#,
+ if(flg==0,
+ tmp2=#; tmp3=length(tmp2);
+ tmp=indexof(tmp2,"*");
+ if(tmp>0,
+ tmp2=substring(#,0,tmp-1); tmp3=tmp-1;
+ );
+ if(substring(name,0,tmp3)==tmp2,
+ flg=1;
+ );
+ );
+ );
+ if(flg==0, //190417to
+ if(!contains(fL,tmp1),
+ Out=append(Out,tmp1);
+ fL=append(fL,tmp1_1);
+ if(length(tmp1)>=5,
+ forall(5..(length(tmp1)),jj,
+ tmp=tmp1_jj;
+ if(!contains(fL,tmp),
+ tmp2=Out;
+ Extractall(tmp);
+ tmp2=remove(Out,tmp2);
+ );
+ );
+ );
+ );
+ ); //190416
+ );
+ tmp1=Out;
+ Out=[];
+ forall(1..(length(tmp1)),
+ if(!contains(Out,tmp1_#),
+ Out=append(Out,tmp1_#);
+ );
+ );
+ Out;
+);
+////%Extractall end////
+
+////%Textedit start//// 190430
+Textedit(no):=(
+//help:Textedit(50);
+ regional(tmp,tmp1,tmp2);
+ tmp="Text"+text(no)+".currenttext";
+ tmp1=parse(tmp);
+ tmp1;
+);
+////%Textedit end////
+
+////%Textedit2value start//// 190521
+Textedit2value(no):=Textedit2value(no,[]);
+Textedit2value(no,options):=(
+//help:Textedit2value(50);
+//help:Textedit2value(51,["Parse=y/n","Form=c/t/m"]);
+ regional(str,tmp,tmp1,parseflg,formflg);
+ parseflg="Y";
+ formflg="C"; //190522
+ forall(options,
+ tmp=Strsplit(#,"=");
+ tmp1=Toupper(substring(tmp_1,0,1));
+ if(tmp1=="P",
+ parseflg=Toupper(substring(tmp_2,0,1));
+ );
+ if(tmp1=="F",
+ formflg=Toupper(substring(tmp_2,0,1));
+ );
+ );
+ str=Textedit(no);
+ str=Removespace(str);
+ if(formflg=="C",
+ str=Tocindyform(str);
+ if(indexof(str,"?")>0,parseflg="N"); //190522
+ );
+ if(formflg=="T", //190522from
+ str=Totexform(str);
+ parseflg="N";
+ );
+ if(formflg=="M",
+ str=Tomaxform(str);
+ parseflg="N";
+ ); //190522to
+ if(length(str)>0,
+ tmp=Strsplit(str,"=");
+ if(length(tmp)>1,str=tmp_2);
+ );
+ if(length(str)==0, //190522from
+ parseflg="N";
+ ); //190522from
+ if(parseflg=="Y",
+ str=parse(str); //190522
+ );
+ str;
+);
+////%Textedit2value end////
+
+////%Mkketcindyjs start//// 190115
+Mkketcindyjs():=Mkketcindyjs(KETJSOP); //190129
+Mkketcindyjs(options):=( //17.11.18
+//help:Mkketcindyjs();
+//help:Mkketcindyjs(options=["Local=(y)","Scale=(1)","Nolabel=[]","Color=","Grid="]);
+//help:Mkketcindyjs(optionsadd=["Web=(y)","Path=Dircdy","Ignore=","Equal="]);
+ regional(webflg,localflg,htm,htmorg,from,upto,flg,fL,fun,jj,tmp,tmp1,tmp2,tmp3,
+ libnameL,libL,lib,jc,nn,name,partL,toppart,lastpart,path,ketflg,flg,cmdL,scale,
+ nolabel,color,grid,out,Out,igno,onlyflg,rmptL,colorrgb,ptname,eqflg,eqrep);
+ libnameL=["basic1","basic2","basic3","3d"]; //190416,190428
+ webflg="Y"; //190128 texflg removed
+ localflg="Y"; //190209,0215
+ scale=1; //190129
+ nolabel=["SW","NE"]; //190129
+ color="lightgray"; //190503
+ eqflg=0; //190603
+ grid="";
+ path=Dircdy;
+ igno=[];
+ rmptL=REMOVEPTJS;
+ forall(options,
+ tmp=Strsplit(#,"=");
+ tmp1=Toupper(substring(tmp_1,0,1));
+ tmp2=tmp_2;
+ if(tmp1=="W",
+ if(length(tmp2)>0, //190209
+ webflg=Toupper(substring(tmp2,0,1));
+ );
+ );
+ if(tmp1=="L",
+ if(length(tmp2)>0, //190209
+ localflg=Toupper(substring(tmp2,0,1));
+ );
+ );
+ if(tmp1=="S",
+ if(length(tmp2)>0, //190209
+ scale=parse(tmp2);
+ );
+ );
+ if(tmp1=="N",
+ if(length(tmp2)>0, //190209
+ if(Toupper(tmp2)=="ALL", //190405from
+ tmp2=remove(allpoints(),[SW,NE]);
+ tmp2=text(tmp2);
+ ); //190405to
+ tmp=tmp2;
+ if(indexof(tmp2,"[")>0,
+ tmp=substring(tmp2,1,length(tmp2)-1);
+ );
+ tmp=tokenize(tmp,",");
+ nolabel=concat(nolabel,tmp);
+ );
+ );
+ if(tmp1=="C", //190209
+ if(length(tmp2)>0,
+ color=tmp2;
+ );
+ );
+ if(tmp1=="G",
+ if(length(tmp2)>0,
+ grid=tmp2;
+ );
+ );
+ if(tmp1=="E", //190603from
+ eqflg=1;
+ if(length(tmp2)>0,
+ eqrep=tmp2;
+ ,
+ eqrep="";
+ );
+ ); //190603to
+ if(tmp1=="P",
+ if(!tmp2="Dircdy",
+ path=tmp2;
+ );
+ );
+ if(tmp1=="I", //190417from
+ if(substring(tmp2,0,1)=="[",
+ tmp2=substring(tmp2,1,length(tmp2)-1);
+ igno=tokenize(tmp2,",");
+ );
+ ); //190417to
+ if(tmp1=="R", //190503from
+ if(substring(tmp2,0,1)=="[",
+ tmp2=substring(tmp2,1,length(tmp2)-1);
+ tmp2=tokenize(tmp2,",");
+ rmptL=concat(rmptL,tmp2);
+ ); //190503to
+ ); //190503to
+ );
+ if(substring(color,0,1)=="[",
+ tmp=parse(color);
+ if(length(tmp)==4,
+ colorrgb=Colorcode("cmyk","rgb",tmp); //190504
+ ,
+ colorrgb=color; //190506
+ );
+ ,
+ colorrgb=Colorname2rgb(color); //190504
+ ); //190503to
+ tmp=apply(colorrgb,round(#*255)); //190504
+ tmp=text(tmp);
+ color=substring(tmp,1,length(tmp)-1);
+ if((webflg=="N")&(localflg=="Y"),
+ if(!isexists(Dircdy,"ketcindyjs"),
+ println(3402);Copyketcindyjs();println(3403);
+ println("ketcindyjs has been copied");
+ );
+ );
+ if(!isexists(Dircdy,Fhead+".html"),
+ drawtext(mouse().xy-[0,1],Cdyname()+".html not found",size->24,color->[1,0,0]);
+ wait(3000);
+ ,
+ htmorg=Readlines(Dircdy,Fhead+".html");
+ tmp=select(1..(length(htmorg)),indexof(htmorg_#,"id="+Dqq("csinit"))>0); //190206from
+ from=tmp_1+5;
+ flg=0;
+ forall(from..(length(htmorg)),
+ if(flg==0,
+ if(indexof(htmorg_#,"</script>")>0,
+ upto=#-1;
+ flg=1;
+ );
+ );
+ );
+ tmp2=[];
+ ketflg="off";
+ onlyflg="off"; //190502
+ forall(htmorg_(from..upto),
+ if(indexof(#,"only ketjs on")>0,onlyflg="on"); //190502
+ if(indexof(#,"only ketjs off")>0,onlyflg="off"); //190502
+ if(indexof(#,"no ketjs")>0,
+ if(indexof(#,"no ketjs on")>0,
+ ketflg="on";
+ );
+ if(indexof(#,"no ketjs off")>0,
+ ketflg="off";
+ );
+ ,
+ if(ketflg=="off",
+ tmp=Removespace(#);
+ if(substring(tmp,0,2)!="//",
+ tmp2=append(tmp2,#);
+ ,
+ tmp1=indexof(tmp,"only ketjs"); //190430from
+ if((tmp1>0)%(onlyflg=="on"), //190502
+ if(tmp1>0,tmp=substring(#,0,tmp1-1)); //190502
+ tmp2=append(tmp2,substring(tmp,2,length(tmp)));
+ ); //190430to
+ );
+ );
+ );
+ );
+ tmp=select(1..(length(htmorg)),indexof(htmorg_#,"id="+Dqq("csdraw"))>0);
+ from=tmp_1+1;
+ flg=0;
+ forall(from..(length(htmorg)),
+ if(flg==0,
+ if(indexof(htmorg_#,"</script>")>0,
+ upto=#-1;
+ flg=1;
+ );
+ );
+ );
+ ketflg="off";
+ onlyflg="off"; //190502
+ forall(htmorg_(from..upto),
+ if(indexof(#,"only ketjs on")>0,onlyflg="on"); //190502
+ if(indexof(#,"only ketjs off")>0,onlyflg="off"); //190502
+ if(indexof(#,"no ketjs")>0,
+ if(indexof(#,"no ketjs on")>0,
+ ketflg="on";
+ );
+ if(indexof(#,"no ketjs off")>0,
+ ketflg="off";
+ );
+ ,
+ if(ketflg=="off",
+ tmp=Removespace(#);
+ if(substring(tmp,0,2)!="//",
+ tmp2=append(tmp2,#);
+ ,
+ tmp1=indexof(tmp,"only ketjs"); //190430from
+ if((tmp1>0)%(onlyflg=="on"), //190502
+ if(tmp1>0,tmp=substring(#,0,tmp1-1)); //190502
+ tmp2=append(tmp2,substring(tmp,2,length(tmp)));
+ ); //190430to
+ );
+ );
+ );
+ );
+ fL=Extractfun(tmp2); //190206to
+ DL=[];
+ forall(libnameL,name, //190209from
+ tmp2=Readlines(Dirhead+pathsep()+"ketcindyjs",name+"list.txt");
+ tmp1=[];
+ forall(1..(length(tmp2)),nn,
+ tmp=Indexall(tmp2_nn,",");
+ from=0;
+ tmp3=[];
+ forall(tmp,
+ tmp3=append(tmp3,substring(tmp2_nn,from,#-1));
+ from=#;
+ );
+ tmp3=append(tmp3,substring(tmp2_nn,from,length(tmp2_nn)));
+ tmp1=append(tmp1,tmp3);
+ );
+ DL=concat(DL,tmp1); //DL and Out are necessary for Extractall
+ ); //190209to
+ tmp=Readlines(Dirhead+pathsep()+"ketcindyjs","ignoredfun.txt"); //190416from
+ tmp=apply(tmp,Removespace(#)); //190131
+ IgnoreList=select(tmp,(length(#)>0)&(substring(#,0,2)!="//")); //190131//190416to
+ IgnoreList=concat(IgnoreList,igno); //190417
+ Out=[]; // necessary for Extractall
+ forall(fL,fun,
+ Extractall(fun);
+ );
+// tmp1=select(Out,contains(igL,#_1)); //190416
+// Out=remove(Out,tmp1); USEDFUN=apply(Out,#_1); //190130 //190416
+ tmp1=select(1..(length(htmorg)),indexof(htmorg_#,"script id=")>0);
+ partL=[];
+ forall(tmp1,nn,
+ from=nn;
+ tmp2=htmorg_from;
+ tmp=Indexall(tmp2,Dq);
+ name=substring(tmp2,tmp_1,tmp_2-1);
+ tmp=select((from+1)..(length(htmorg)),indexof(htmorg_#,"</script>")>0);
+ upto=tmp_1;
+ partL=append(partL,[name,from,upto]);
+ );
+ tmp=apply(partL,#_2);
+ tmp=min(tmp)-1;
+ toppart=[1,tmp];
+ tmp=apply(partL,#_3);
+ tmp=max(tmp)+1;
+ lastpart=[tmp,length(htmorg)];
+ if(webflg=="Y",
+ tmp1=Fhead+"json.html";
+ ,
+ tmp1=Fhead+"jsoff.html";
+ if(localflg=="Y",tmp1=replace(tmp1,"off.","offL.")); //190209
+ );
+ setdirectory(path);
+ SCEOUTPUT = openfile(tmp1);
+ tmp1=htmorg_((toppart_1)..(toppart_2));
+ if(webflg=="N",
+ if(localflg=="N", //190128
+ tmp3=replace(Dirhead+"/ketcindyjs/",pathsep(),"/");
+ tmp= " <link rel="+Dqq("stylesheet")+" href=";
+ tmp=tmp+Dq+"file:///"+tmp3+"CindyJS.css"+Dq+">";
+ tmp1_(length(tmp1)-2)=tmp;
+ tmp= " <script type="+Dqq("text/javascript")+" src=";
+ tmp=tmp+Dq+"file:///"+tmp3+"Cindy.js"+Dq+"></script>";
+ tmp1_(length(tmp1)-1)=tmp;
+ tmp=" <script type="+Dqq("text/javascript")+" src="; //190117from
+ tmp1_(length(tmp1))=""; //190120
+ ,
+ tmp1_(length(tmp1)-2)= //190128from
+ " <link rel="+Dqq("stylesheet")+" href="+Dqq("ketcindyjs/CindyJS.css")+">"; //190203
+ tmp1_(length(tmp1)-1)=
+ " <script type="+Dqq("text/javascript")+" src="+Dqq("ketcindyjs/Cindy.js")+"></script>";
+ //190203
+ tmp1_(length(tmp1))=""; //190128to
+ );
+ ,
+ tmp1_(length(tmp1))=""; //190117to
+ );
+ forall(tmp1,
+ println(SCEOUTPUT,#);
+ );
+ tmp="<script id="+Dqq("csinit")+" type=";
+ tmp=tmp+Dqq("text/x-cindyscript")+">";
+ println(SCEOUTPUT,tmp);
+// tmp=Readlines(Dirhead+pathsep()+"ketcindyjs","commonused.txt");
+// forall(tmp,
+// println(SCEOUTPUT,#);
+// );
+ libL=[]; //190209from
+ forall(libnameL,
+ tmp=Readlines(Dirhead+"/ketlib","ketcindylib"+#+"r.cs");
+ libL=append(libL,tmp);
+ ); //190209to
+ forall(Out,fun,
+ libf=fun_2;from=parse(fun_3);upto=parse(fun_4);
+ tmp=select(1..(length(libnameL)),indexof(libf,libnameL_#)>0); //190209from
+ tmp=tmp_1;
+ lib=libL_tmp;
+ tmp1=lib_(from..upto); //190209from
+ ketflg="off"; //190122from
+ onlyflg="off"; //190502
+ forall(tmp1,
+ if(indexof(#,"only ketjs on")>0,onlyflg="on"); //190502
+ if(indexof(#,"only ketjs off")>0,onlyflg="off"); //190502
+ if(indexof(#,"no ketjs")>0,
+ if(indexof(#,"no ketjs on")>0,
+ ketflg="on";
+ );
+ if(indexof(#,"no ketjs off")>0,
+ ketflg="off";
+ );
+ ,
+ if(ketflg=="off",
+ tmp=Removespace(#);
+ if(substring(tmp,0,2)!="//",
+ println(SCEOUTPUT,#);
+ ,
+ tmp1=indexof(tmp,"only ketjs"); //190430from
+ if((tmp1>0)%(onlyflg=="on"), //190502
+ if(tmp1>0,tmp=substring(#,0,tmp1-1)); //190502
+ println(SCEOUTPUT,substring(tmp,2,length(tmp)));
+ ); //190430to
+ );
+ ); //190122to
+ );
+ );
+ );
+ tmp=select(partL,#_1=="csinit");
+ if(length(tmp)>0,
+ tmp=tmp_1;
+ from=tmp_2+5; //190206
+ upto=tmp_3;
+ tmp1=htmorg_((from+1)..(upto-1)); //190119
+ ketflg="off"; //190206from
+ onlyflg="off"; //190502
+ forall(tmp1,
+ if(indexof(#,"only ketjs on")>0,onlyflg="on"); //190502
+ if(indexof(#,"only ketjs off")>0,onlyflg="off"); //190502
+ if(indexof(#,"no ketjs")>0,
+ if(indexof(#,"no ketjs on")>0,
+ ketflg="on";
+ );
+ if(indexof(#,"no ketjs off")>0,
+ ketflg="off";
+ );
+ ,
+ if(ketflg=="off",
+ tmp=Removespace(#);
+ if(substring(tmp,0,2)!="//",
+ println(SCEOUTPUT,#);
+ ,
+ tmp1=indexof(tmp,"only ketjs"); //19020l6from
+ if((tmp1>0)%(onlyflg=="on"), //190502
+ if(tmp1>0,tmp=substring(#,0,tmp1-1)); //190502
+ println(SCEOUTPUT,substring(tmp,2,length(tmp)));
+ ); //190206to
+ );
+ );
+ );
+ );
+ );
+ forall(KetcindyjsDataList, //190422from
+ println(SCEOUTPUT,#+";");
+ ); //190422to
+ println(SCEOUTPUT,"</script>");
+ tmp=select(partL,#_1=="csdraw");
+ tmp=tmp_1;
+ from=tmp_2;
+ upto=tmp_3;
+ tmp1=htmorg_(from..upto);
+ ketflg="off"; //190202from
+ onlyflg="off"; //190502
+ forall(tmp1,
+ if(indexof(#,"only ketjs on")>0,onlyflg="on"); //190502
+ if(indexof(#,"only ketjs off")>0,onlyflg="off"); //190502
+ if(indexof(#,"no ketjs")>0,
+ if(indexof(#,"no ketjs on")>0,
+ ketflg="on";
+ );
+ if(indexof(#,"no ketjs off")>0,
+ ketflg="off";
+ );
+ ,
+ if(ketflg=="off",
+ tmp=Removespace(#);
+ if(substring(tmp,0,2)!="//",
+ println(SCEOUTPUT,#);
+ ,
+ tmp1=indexof(tmp,"only ketjs"); //19020l6from
+ if((tmp1>0)%(onlyflg=="on"), //190502
+ if(tmp1>0,tmp=substring(tmp,0,tmp1-1)); //190502
+ println(SCEOUTPUT,substring(tmp,2,length(tmp))); //190502
+ ); //190206to
+ );
+ );
+ );
+ ); //190206to
+ tmp1=htmorg_((lastpart_1)..(lastpart_2));
+ tmp=select(1..(length(tmp1)),indexof(tmp1_#,Dqq("cs*"))>0);
+ tmp=tmp_1;
+ forall(1..tmp, //190117from
+ println(SCEOUTPUT,tmp1_#);
+ );
+ from=tmp+1; //190117to
+ tmp=" use: ["+Dqq("katex")+"],";
+ println(SCEOUTPUT,tmp);
+ out=[]; //190129
+ forall(from..(length(tmp1)),jj,
+ flg=0; //190126from
+ tmp2=["Figure","Parent","ParaF","Anime","Flip","Title","Slide","Digest",
+ "KeTJS","KeTJSoff","Objview"];
+ if(indexof(tmp1_jj,"type: "+Dqq("Button"))>0,
+ nn=indexof(tmp1_jj,"text: ");
+ tmp=substring(tmp1_jj,nn-1,length(tmp1_jj));
+ nn=Indexall(tmp,Dq);
+ tmp=substring(tmp,nn_1,nn_2-1);
+ if(!contains(tmp2,tmp),
+ out=append(out,tmp1_jj); //190129
+ );
+ flg=1;
+ );
+ if(flg==0,
+ if(indexof(tmp1_jj,"Evaluate")>0,
+ tmp=replace(tmp1_jj,Dqq("Evaluate"),Dqq("EditableText"));
+ if(eqflg==1,tmp=replace(tmp,"=",eqrep)); //190604
+ out=append(out,tmp);
+ flg=1;
+ );
+ );
+ if(flg==0,
+ if(indexof(tmp1_jj,"Calculation")>0,
+ tmp=replace(tmp1_jj,Dqq("Calculation"),Dqq("EditableText"));
+ if(eqflg==1,tmp=replace(tmp,"=",eqrep)); //190604
+ out=append(out,tmp);
+ flg=1;
+ );
+ );
+ tmp=indexall(tmp1_jj,Dq); //190504from
+ if(length(tmp)>0,
+ ptname=substring(tmp1_jj,tmp_1,tmp_2-1);
+ ,
+ ptname="";
+ );
+ if(flg==0,
+ if(contains(rmptL,ptname), flg=1);
+ );
+ tmp2=tmp1_jj;
+ if(length(ptname)>0,
+ if(indexof(tmp2,"size:")==0,
+ tmp2=replace(tmp2,"}",", size: 3.0}");
+ );
+ if(indexof(tmp2,"border:")==0,
+ tmp2=replace(tmp2,"}",", border: true }");
+ );
+ );
+ if(flg==0,
+ tmp=Indexof(tmp2,"labeled: ");
+ if((ptname=="")%(tmp==0),
+ out=append(out,tmp2);
+ flg=1;
+ );
+ );
+ if(flg==0,
+ if(contains(["TH","FI"],ptname),
+ if(SLIDEFLG=="Y",
+ out=append(out,tmp2);
+ flg=1;
+ );
+ );
+ );
+ if(flg==0,
+ if(contains(nolabel,ptname),
+ tmp2=replace(tmp2,"labeled: true","labeled: false");
+ );
+ if((indexof(ptname,"z")>0)%(contains(["NE","SW","TH","FI"],ptname)),
+ if(indexof(ptname,"z")>0,
+ tmp2=replace(tmp2,"labeled: true","labeled: false");
+ );
+ tmp=indexof(tmp2,"color:");
+ tmp3=Indexall(tmp2,"],");
+ tmp3=select(tmp3,#>tmp);
+ if(length(tmp3)>0,
+ tmp3=tmp3_1;
+ ,
+ tmp3=indexof(tmp2,"]}");
+ );
+ tmp=substring(tmp2,tmp-1,tmp3);
+ tmp2=replace(tmp2,tmp,"color: [1.0,1.0,1.0]");
+// tmp2=replace(tmp2,"color: tmp,"color: "+text(colorrgb));
+ tmp2=replace(tmp2,"border: true","border:false");
+ tmp=indexof(tmp2," size:");
+ tmp3=Indexall(tmp2,",");
+ tmp3=select(tmp3,#>tmp);
+ if(length(tmp3)>0,
+ tmp3=tmp3_1;
+ ,
+ tmp3=indexof(tmp2,"}");
+ );
+ tmp=substring(tmp2,tmp-1,tmp3-1);
+ tmp2=replace(tmp2,tmp," size: 2.0");
+ );
+ out=append(out,tmp2);
+ flg=1;
+ ); //190504to
+ if(flg==0,
+ if(length(tmp1_jj)>0, //190504from
+ out=append(out,tmp1_jj);
+ ); //190504to
+ ); //190126to
+ );
+ tmp=select(1..(length(out)),indexof(out_#," ],")>0); //190129from
+ tmp=tmp_1;
+ tmp1=out_(tmp-1);
+ if(substring(tmp1,length(tmp1)-1,length(tmp1))==",", //190201from
+ out_(tmp-1)=substring(tmp1,0,length(tmp1)-1);
+ ); //190201to
+ tmp=select(1..(length(out)),indexof(out_#,"width:")>0);
+ jj=tmp_1;
+ tmp1=out_jj;
+ flg=0;
+ forall(1..(length(tmp1)-1),
+ if(flg==0,
+ tmp=substring(tmp1,#-1,#);
+ if(tmp==":",
+ tmp2=substring(tmp1,#+1,length(tmp1)-1);
+ flg=1;
+ );
+ );
+ );
+ tmp=round(scale*parse(tmp2));
+ out_jj=" width: "+text(tmp)+",";
+ tmp=select(1..(length(out)),indexof(out_#,"height:")>0);
+ jj=tmp_1;
+ tmp1=out_jj;
+ flg=0;
+ forall(1..(length(tmp1)-1),
+ if(flg==0,
+ tmp=substring(tmp1,#-1,#);
+ if(tmp==":",
+ tmp2=substring(tmp1,#+1,length(tmp1)-1);
+ flg=1;
+ );
+ );
+ );
+ tmp=round(scale*parse(tmp2));
+ out_jj=" height: "+text(tmp)+",";
+ if(length(color)>0,
+ tmp=select(1..(length(out)),indexof(out_#,"background: ")>0);
+ jj=tmp_1;
+ tmp=indexof(out_jj,")"); //190130from
+ tmp=substring(out_jj,tmp-1,length(out_jj));
+ out_jj=" background: "+Dq+"rgb("+color+tmp; //190130to
+ );
+ if(length(grid)>0,
+ tmp=select(1..(length(out)),indexof(out_#,"grid:")>0);
+ jj=tmp_1;
+ tmp1=" grid: "+grid;
+ if(indexof(out_jj,",")>0,
+ tmp1=tmp1+",";
+ );
+ out_jj=tmp1;
+ );
+ forall(out,
+ println(SCEOUTPUT,#);
+ ); //190129to
+ closefile(SCEOUTPUT);
+ setdirectory(Dirwork);
+ if(webflg=="Y",tmp="json",tmp="jsoff");
+ drawtext(mouse().xy-[0,1],tmp+"in "+path,size->20,color->[1,0,0]);
+ wait(1000);
+ );
+);
+////%Mkketcindyjs end////
+
+//help:end();
+
diff --git a/graphics/ketcindy/ketcindyfolder/scripts/ketlib/ketcindylibhelpE.txt b/graphics/ketcindy/ketcindyfolder/scripts/ketlib/ketcindylibhelpE.txt
new file mode 100755
index 0000000000..ceec4ccd06
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/scripts/ketlib/ketcindylibhelpE.txt
@@ -0,0 +1,115 @@
+//help:start();
+//help:drawimage*(import image into the screen);
+//help:drawtext*(write letters on the screen);
+//help:Option1*(specify the style of drawing lines);
+//help:Option2*(specify the way of writing data out);
+//help:Option3*(specify the way of reading and writing data in);
+//help:Changestyle*(change the style for drawing plot data);
+//help:Workprocess*(display the process of execution);
+//help:Textformat*(convert number into string with specific number of digits);
+//help:Assign*(replace the name of variable in the string by some specific value);
+//help:Flattenlist*(flatten the list of data);
+//help:Dotprod*(inner product);
+//help:Crossprod*(exterior product);
+//help:Ptstart*(starting point of plot data);
+//help:Ptend*(ending point of plot data);
+//help:Numptcrvtenn*(number of points in plot data);
+//help:Ptcrv*(the n-th point of plot data);
+//help:Invert*(reverse the orientation of curve);
+//help:ParamonCurve*(information (parameter value etc.) of the point in plot data);
+//help:PointonCurve*(the point in the plot data specified by the given information);
+//help:Nearestptcrv*(the point in the curve which is nearest to the given point);
+//help:Nearestpt*(the points in two given curves which are nearest each other);
+//help:Derivative*(calculate the differential coefficient);
+//help:Integrate*(numerical integration);
+//help:Findarea*(calculate the area of the region surrounded by a closed curve);
+//help:Findlength*(calculate the length of curve);
+//help:Com2nd*(add the R command to write out plot data into TeX);
+//help:Texcom*(write command into TeX output exactly as written here);
+//help:Setunitlen*(specify the unit length);
+//help:Setmarklen*(specify the unit length of the tickmarks on coordinate axis);
+//help:Setorigin*(specify the position the origin);
+//help:Fontsize*(specify the size of font);
+ //help:Setpen*(specify the thickness of line);
+//help:Setpt*(specify the size of point);
+//help:Definecolor*(define the color for user's own use);
+//help:Setcolor*(specify the color);
+//help:Joincrvs*(join curves);
+//help:Partcrv*(cut out some part of the curve);
+//help:Pointdata*(generate the plot data of point
+//additional option : "Size=");
+//help:Listplot*(generate the plot data of a polyline);
+//help:Lineplot*(generate the plot data of line);
+//help:Plotdata*(generate the plot data of function
+//additional option : "Num=", "Exc=", "Dis=");
+//help:Paramplot*(generate the plot data of parametric function
+//additional option : "Num=", "Exc=", "Dis=");
+//help:Circledata*(generate the plot data of circle
+//additional option : "Num=", "Rng=");
+//help:Framedata*(generate the plot data of rectangle);
+//help:Ovaldata*(generate the plot data of oval shape);
+//help:Arrowhead*(generate the plot data of arrowhead
+//option : size, sharpness, shape and position in the arrow);
+//help:Arrowdata*(generate the plot data of arrow line
+//option : size of arrowhead, sharpness(angle),position of arrowhead);
+//help:Anglemark*(generate the plot data of angle mark option : size);
+//help:Paramark*(generate the plot data of right angle mark option : size);
+//help:Bowdata*(generate the plot data of bow arched curve
+//option : curvatute, size of the blank space, letter);
+//help:Deqplot*(generate the solution curve of differential equation
+//additional option : "Num=");
+//help:Hatchdata*(add hatching into some region
+// option : slope, degree, space betwen lines));
+//help:Enclosing*(generate the plot data of closed curve connecting some curves);
+//help:Shade*(add shading into some region option : color,trimming(y/n));
+//help:Rotatepoint*(rotate the point, option : center);
+//help:Translatepoint*(pararell transport of the point);
+//help:Scalepoint*(magnify or reduce the position of point option : center);
+ //help:Reflectpoint*(reflect the point);
+//help:Rotatedata*(rotate the plot data option : center);
+//help:Scaledata*(magnify or reduce the plot data option : center);
+//help:Reflectdata*(reflect the plot data);
+//help:Mksegments*(generate the plot data of all segments on the screen);
+//help:Mkcircles*(generate the plot data of all circles on the screen):
+//help:Setax*(specify the setting of coordinate axes);
+//help:Htickmark*(put a tickmark on the horizontal coordinate axis);
+//help:Vtickmark*(put a tickmark on the vertical coordinate axis);
+//help:Drwxy*(draw coordinate axes);
+//help:Addax*(specify whether coordinate axes are drawn or not);
+//help:Expr*(write mathematical expressions at a specific position);
+//help:Letter*(write letters at a specific position);
+//help:Letterrot*(write sloped letters at a specific position):
+//help:Exprrot*(write sloped mathematical expressions at a specific position):
+//help:Putpoint*(put a point at the specific position);
+//help:Bezier*(generate the plot data of Bezier curve);
+//help:Mkbezierptcrv*(generate the plot data of Bezier curve by automatically taking controll points);
+//help:CRspline*(generate the plot data of Catmull-Rom spline curve);
+//help:Beziersmooth*(generate the plot data of Bezier spline curve);
+//help:Bspline*(generate the plot data of B-spline curve);
+//help:PtonLine*(put a point on a specific line);
+//help:PtonSeg*(put a point on a specific segment);
+//help:PutonCurve*(put a point on a specific curve);
+//help:Setscaling*(specify the rate of magnification in the vertical direction);
+ //help:Tabledatalight*(generate the plot data of table without geometric points
+ //additional option : rules to be removed);
+ //help:Tgrid*(return the coordinates of a cell in the table);
+ //help:Tlistplot*(draw segment connecting two lattice points in the table);
+//help:ChangeTablestyle*(change the style for drawing rules in the table);
+//help:Tabledata*(generate the plot data of table with geometric points
+ //option : usual options+rules to be removed);
+//help:Tabledata*(xLst=apply(1..5,10);yLst=apply(1..4,8);rmvL=[];);
+//help:Findcell*(return the information of a cell in the table);
+//help:Putcell*(write letters in a specific cell of the table);
+//help:Putcellexpr*(write mathematical expressions in a specific cell of the table);
+//help:Putrow*(write letters in a specific row of the table));
+//help:Putrowexpr*(write mathematical expressions in a specific row of the table);
+//help:PutcoL*(write letters in a specific column of the table));
+//help:PutcoLexpr*(write mathematical expressions in a specific column of the table));
+//help:Setwindow*(specify the area of drawing);
+//help:Defvar*(the definition of a variable is called by R);
+//help:Deffun*(the definition of a function is called by R);
+//help:Extractdata*(endow attribute to the imported plot data);
+//help:ReadOutData*(import the plot data);
+//help:WriteOutData*(export the plot data);
+//help:Removespace*(remove spaces of in front and behind);
+//help:end();
diff --git a/graphics/ketcindy/ketcindyfolder/scripts/ketlib/ketcindylibhelpJ.txt b/graphics/ketcindy/ketcindyfolder/scripts/ketlib/ketcindylibhelpJ.txt
new file mode 100755
index 0000000000..a6a35d673f
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/scripts/ketlib/ketcindylibhelpJ.txt
@@ -0,0 +1,136 @@
+//help:start();
+//help:drawimage*(画像を画面に読み込む);
+//help:drawtext*(画面に文字を書き込む);
+//help:Option1*(線種を指定.コマンドのオプション);
+//help:Option2*(書き出しを指定.コマンドのオプション);
+//help:Option3*(外部ファイルの読込/書込の指定.コマンドのオプション);
+//help:Changestyle*(プロットデータのオプションを変更);
+//help:Workprocess*(実行手順を表示);
+//help:Textformat*(数値の文字列化で桁数指定);
+//help:Assign*(文字列内の変数への割当て);
+//help:Flattenlist*(データリストを平坦化);
+//help:Dotprod*(内積);
+//help:Crossprod*(外積);
+//help:Ptstart*(プロットデータの始点);
+//help:Ptend*(プロットデータの終点);
+//help:Numptcrvtenn*(プロットデータの点の数);
+//help:Ptcrv*(プロットデータのn番目の点);
+//help:Invert*(プロットデータの向きを逆にする);
+//help:ParamonCurve*(プロットデータ上の点の情報);
+//help:PointonCurve*(プロットデータ上の情報による点);
+//help:Nearestptcrv*(点についてプロットデータ上の最近点);
+//help:Nearestpt*(2曲線の最近点);
+//help:Derivative*(微分係数);
+//help:Integrate*(数値積分);
+//help:Findarea*(閉曲線に囲まれた面積);
+//help:Findlength*(曲線の長さ);
+//help:Com2nd*(TeXの書き出しコマンドを入れる);
+//help:Texcom*(TeXのコマンドを直接記述);
+//help:Setunitlen*(単位長を指定);
+//help:Setmarklen*(微小単位長を指定);
+//help:Setorigin*(原点の位置を指定);
+//help:Fontsize*(フォントサイズを指定);
+ //help:Setpen*(線の太さを指定);
+//help:Setpt*(点の大きさを指定);
+//help:Definecolor*(ユーザー色を定義);
+//help:Setcolor*(色を指定);
+//help:Joincrvs*(曲線をつなげる);
+//help:Partcrv*(部分曲線を作る);
+//help:Pointdata*(点データを表示/作成
+//追加オプション : "Size=");
+//help:Listplot*(線分や折れ線データを作成);
+//help:Lineplot*(直線データを作成);
+//help:Plotdata*(関数のグラフを作成
+//追加オプション : "Num=", "Exc=", "Dis=");
+//help:Paramplot*(媒介変数の関数のグラフを作成
+//追加オプション : "Num=", "Exc=", "Dis=");
+//help:Circledata*(円のデータを作成
+//追加オプション : "Num=", "Rng=");
+//help:Framedata*(長方形のデータを作成);
+//help:Ovaldata*(オーバルデータを作成);
+//help:Arrowhead*(鏃を作成
+//オプション : 大きさ,開き角,形状と位置);
+//help:Arrowdata*(矢印を作成
+//オプション : 大きさ,開き角,矢じり位置);
+//help:Anglemark*(角度マークを作成. オプション : 角の印の大きさ);
+//help:Paramark*(垂直マークを作成. オプション : 角の印の大きさ);
+//help:Bowdata*(弓形を描く
+//オプション : 曲がり,空白サイズ,文字);
+//help:Deqplot*(微分方程式の解曲線を作成
+//追加オプション : "Num=");
+//help:Hatchdata*(斜線塗り. オプション : 傾き(度),間隔);
+//help:Enclosing*(複数曲線をつなげて閉曲線を作成);
+//help:Shade*(シェーディング. オプション : 色, トリミング(y/n));
+//help:Rotatepoint*(点を回転. オプション : 中心);
+//help:Translatepoint*(点を平行移動);
+//help:Translatedata*(プロットデータを平行移動);
+//help:Scalepoint*(点を縮小/拡大. オプション : 中心);
+//help:Reflectpoint*(点を鏡映);
+//help:Rotatedata*(プロットデータを回転. オプション : 中心);
+//help:Scaledata*(プロットデータを縮小/拡大. オプション : 中心);
+//help:Reflectdata*(プロットデータを鏡映);
+//help:Mksegments*(画面にあるすべての線分データを作成);
+//help:Mkcircles*(画面にあるすべての円データを作成):
+//help:Setax*(座標軸を指定);
+//help:Htickmark*(横軸に目盛りを描く);
+//help:Vtickmark*(縦軸に目盛りを描く);
+//help:Drwxy*(座標軸を描く);
+//help:Addax*(座標軸を描くか描かないかの指定);
+//help:Expr*(数式を書き込む);
+//help:Letter*(文字を書き込む);
+//help:Letterrot*(傾いた文字を書き込む):
+//help:Exprrot*(傾いた数式を書き込む):
+//help:Putpoint*(幾何点をとる);
+//help:Bezier*(ベジェ曲線データを作成);
+//help:Mkbezierptcrv*(制御点を自動的にとってベジェを作成);
+//help:CRspline*(Catmull-Romスプラインを作成);
+//help:Beziersmooth*(ベジェスプラインを作成);
+//help:Bspline*(B-スプラインを作成);
+//help:PtonLine*(直線上に点をとる);
+//help:PtonSeg*(線分上に点をとる);
+//help:PutonCurve*(曲線上に点をとる);
+//help:Setscaling*(縦方向の倍率を指定);
+ //help:Tabledata*(表データ作成
+ //追加オプション : ラベルのとび,描画領域を表に合わせるか,幾何点を用いるか);
+ //help:Tgrid*(表のセルの座標を返す);
+ //help:Tlistplot*(表の2格子点を結ぶ線分);
+////help:ChangeTablestyle*(表の罫線のスタイル変更);
+//help:Findcell*(表のセルの情報を返す);
+//help:Putcell*(表のセルに文字を書き入れる);
+//help:Putcellexpr*(表のセルに数式を書き入れる);
+//help:Putrow*(表の行に文字を書き入れる));
+//help:Putrowexpr*(表の行に数式を書き入れる);
+//help:PutcoL*(表の列に文字を書き入れる));
+//help:PutcoLexpr*(表の列に数式を書き入れる));
+//help:Setwindow*(描画領域を指定);
+//help:Defvar*(変数をRに渡す);
+//help:Deffun*(関数をRに渡す);
+//help:Extractdata*(読み込んだデータに属性を与える);
+//help:ReadOutData*(データを読み込む);
+//help:WriteOutData*(データを書き出す);
+//help:Removespace*(前後のスペースを除く);
+//help:Drawlinetype*(線種を指定して曲線を描く);
+//help:Intersectcrvs*(交点リストを求める);
+//help:IntersectcrvsPp*(交点とパラメータ値のリストを求める);
+//help:Implicitplot*(陰関数のグラフを描く);
+//help:Boxplot*(箱ヒゲ図を描く(R使用));
+//help:CalcbyR*(Rのコマンドを実行して結果を返す);
+//help:CalcbyS*(Scilabのコマンドを実行して結果を返す);
+//help:Framedata2*(左下と右上の点で長方形を描く);
+//help:HIstplot*(ヒストグラムを描く(R使用));
+//help:Hyperbolaplot*(双曲線を描く);
+//help:Ellipseplot*(楕円を描く);
+//help:Ospline*(Oshimaのスプラインを描く);
+//help:Parabolaplot*(放物線を描く);
+//help:PlotdataR*(Rの関数のグラフを描く);
+//help:Polygonplot*(正多角形を描く);
+//help:Putintersect*(交点に幾何点をとる);
+//help:Rulerscale*(点の右と上に目盛を描く);
+//help:Segmark*(線分にマークをつける);
+//help:Sprintf*(小数点以下の長さを固定した文字列に変換);
+//help:Readcsv*(csvファイルを読み込み);
+//help:Writecsv*(csvファイルを書き込み);
+//help:Drwpt*(点をTeXに描く.オプション:白抜き 0);
+
+
+//help:end();
diff --git a/graphics/ketcindy/ketcindyfolder/scripts/ketlib/ketcindylibmvhelpE.txt b/graphics/ketcindy/ketcindyfolder/scripts/ketlib/ketcindylibmvhelpE.txt
new file mode 100755
index 0000000000..a5e5e8fc69
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/scripts/ketlib/ketcindylibmvhelpE.txt
@@ -0,0 +1,2 @@
+//help:start();
+//help:end();
diff --git a/graphics/ketcindy/ketcindyfolder/scripts/ketlib/ketcindylibmvhelpJ.txt b/graphics/ketcindy/ketcindyfolder/scripts/ketlib/ketcindylibmvhelpJ.txt
new file mode 100755
index 0000000000..a5e5e8fc69
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/scripts/ketlib/ketcindylibmvhelpJ.txt
@@ -0,0 +1,2 @@
+//help:start();
+//help:end();
diff --git a/graphics/ketcindy/ketcindyfolder/scripts/ketlib/ketcindylibmvlogr.txt b/graphics/ketcindy/ketcindyfolder/scripts/ketlib/ketcindylibmvlogr.txt
new file mode 100644
index 0000000000..a325fea4bd
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/scripts/ketlib/ketcindylibmvlogr.txt
@@ -0,0 +1,68 @@
+// 20190415
+// parse( ..= ) changed ( ; added )
+// 20190404
+// Mkanimation, Mkflipanime changed ( Filename )
+// 20190317
+// Setpara debugged ( default value of Frate changed to 20)
+// 20181224
+// Setpara debugged ( ADDAXES=="1")
+// 20181128
+// Mkviewobj changed (Fillblack added)
+// 20181125
+// Mkflipanime,Mkanimation,Parafolder changed (Fillblack added)
+// 20180711
+// Setpara changed ("Mag" removed )
+// 20180617
+// Setpara changed (Changework removed)
+// Parafolder debugged/changed ( fbkup, some of Changework removed)
+// Parafolder changed (time added )
+// Animatefiles,Mkflipfiles debugged ( sorting of tex files )
+// 20180615
+// Setpara changed (GLISTbkup)
+// 20180614
+// Setpara changed (ReadOutData&Projpara removed fromGLISTbkup)
+// Setpara changed (the above also removed from COM2ndlist)
+// 20180611
+// Parafolder changed (path removed, Dirworkbkup&Dirworksubbkup used)
+// 20180610
+// Parafolder debugged (files not removed, waiting time for R)
+// Parafolder changed ( pause option adde )
+// 20180609
+// Parafolder changed (CommonMake)
+// Mkflipanime,Animationfile changed ( length(ParaSL) )
+// 20180608
+// Parafolder changed (to "all.r", to delete file)
+// 20180607
+// Parafolder debugged ( FnameR,.. => Setfiles)
+// 20180606
+// Setpara,Parafolder renewed
+// 20180602
+// divoptions ( 8,9 ->length(tmp)-1,length(tmp))
+//2017.12.09
+// Parafolder debugged (Viewtex ->WritetoRS)
+// Mkanimation debugged ( \ -> / for windows )
+//2017.12.07
+// Setpara options changed
+// Animatefile changed (\figsize, OpA)
+//2017.11.24
+// Mkflipanime added
+// Old movie function removed
+// Flipbook removed
+// Mkanimation changed (for R)
+//2017.11.21
+// Ketinitmv, Paraamble, Mkmovie changed (for R)
+//2017.11.03
+// Mkanimation changed (ketpic.sty etc )
+//2017.10.28
+// Parafolder changed (timing of display of counter,time)
+//2017.10.24
+// Parafolder changed (file.exists added)
+//2017.10.14
+// Mkanimation changed ("Rem=" option added)
+//2017.10.13
+// Ketinitmv changed (Shellfile removed)
+// Parafolder debugged
+//2017.10.12
+// Parafolder changed ( cmdL for making TeX files)
+//2017.10.08
+// Mkanimation added
diff --git a/graphics/ketcindy/ketcindyfolder/scripts/ketlib/ketcindylibmvr.cs b/graphics/ketcindy/ketcindyfolder/scripts/ketlib/ketcindylibmvr.cs
new file mode 100755
index 0000000000..56351e659a
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/scripts/ketlib/ketcindylibmvr.cs
@@ -0,0 +1,660 @@
+// Copyright (C) 2014 Masataka Kaneko, Setsuo Takato, KETCindyJapan project team
+//
+//This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see <http://www.gnu.org/licenses/>
+//
+
+println("ketcindymv(20190415) loaded");
+
+//help:start();
+
+////%Setpara start////
+Setpara(path,fstr,sL):=Setpara(path,fstr,sL,[],[]);
+Setpara(pathorg,fstr,sL,options):=
+ Setpara(pathorg,fstr,sL,options,[]);
+Setpara(pathorg,fstr,sL,options,optionsanim):=(
+//help:Setpara("folder name","funstr","range",options,optionsanim);
+//help:Setpara(folder,funstr,range,options);
+//help:Setpara(options=["Div=25"]);
+//help:Setpara(options2anim1=["Frate=10","Scale=1"]);
+//help:Setpara(options2anim2=["OpA=[loop,controls,buttonsize=3mm]"]);
+//help:Setpara(options2anim3=["OpA=+step"]);
+//help :Setpara(options2anim4=["Mag=1600","Title=folder"]);
+//help:Setpara(options2anim4=["Title=folder"]);
+ regional(path,tmp,tmp1,tmp2,tmp3,eqL,ndiv,gtmp,ctmp,nn,flg);
+ if(length(pathorg)==0, path=Slidename,path=pathorg);//17.04.10
+ ParaPath=path;
+ ParaFstr=fstr;
+ ParaSL=sL;
+ if(isstring(sL),
+ ndiv=25;
+ tmp=Divoptions(options);
+ eqL=tmp_5;
+ forall(eqL,
+ tmp=Strsplit(#,"=");
+ tmp1=Toupper(tmp_1);
+ if(substring(tmp1,0,1)=="D",
+ ndiv=parse(tmp_2);
+ );
+ );
+ tmp=Strsplit(sL,"=");
+ tmp1=parse(tmp_2);
+ ParaSL=apply(0..ndiv,tmp1_1+#*(tmp1_2-tmp1_1)/ndiv);
+ );
+ ParaOp=options;
+ if((!contains(Paraop,"r"))&(!contains(ParaOp,"m")),
+ ParaOp=append(ParaOp,"m");//180604
+ );
+ ParaOpAnim=optionsanim;
+ if(ADDAXES=="1", //181224rom
+ Drwxy();
+// ADDAXES="0";
+ ); //181224to
+ GLISTback=GLIST;
+ GCLISTback=GCLIST;
+ GOUTLISTback=GOUTLIST;
+ POUTLISTback=POUTLIST;
+ VLISTback=VLIST;
+ FUNLISTback=FUNLIST;
+ LETTERlistback=LETTERlist;
+ COM0thlistback=COM0thlist;
+ COM1stlistback=COM1stlist;
+ COM2ndlistback=COM2ndlist;
+ Dirworkbkup=Dirwork; //0611from
+ Dirworksubbkup=Dirwork+pathsep()+ParaPath;
+ Fheadbkup=Fhead; //0611to
+ gtmp=GLISTback;
+ tmp1=select(1..(length(gtmp)),indexof(gtmp_#,"ReadOutData")>0); //180614from
+ tmp2=[];tmp3=[];
+ if(length(tmp1)>0, //180615
+ nn=tmp1_(length(tmp1));
+ tmp2=append(tmp2,nn);
+ flg=0;
+ tmp=min([nn+40,length(gtmp)]);
+ forall((nn+1)..tmp,
+ if(flg==0,
+ if(indexof(gtmp_#,"Projpara")>0,
+ tmp2=append(tmp2,#);
+ tmp=indexof(gtmp_#,"=");
+ tmp=substring(gtmp_#,0,tmp-1);
+ tmp3=append(tmp3,tmp);
+ ,
+ flg=1;
+ );
+ );
+ );
+ );
+ tmp1=remove(1..(length(gtmp)),tmp2);
+ GLISTback=apply(tmp1,GLIST_#); //180614to
+ ctmp=COM2ndlistback; //180614
+ forall(tmp3,tmp2,
+ tmp=select(ctmp,indexof(#,tmp2)>0);
+ ctmp=remove(ctmp,tmp);
+ );
+ COM2ndlistback=ctmp;
+);
+////%Setpara end////
+
+////%Parafolder start////
+Parafolder():=Parafolder(ParaFstr,ParaSL,ParaOp);
+Parafolder(fstr,sL):=Parafolder(fstr,sL,[]);
+Parafolder(fstr,sL,optionorg):=(
+//help:Parafolder(foldername,1..4);
+//help:Parafolder(foldername,"s=[0,1]");
+//help:Parafolder("mf(s)",foldername,"s=[0,1]");
+//help:Parafolder(options=["m/r","Div=25","Wait=20"]);
+//help:Parafolder(optionsadd=[""Outfile=n",Pause=10(ms)"]);
+//help:Paraslide(para=folder:layery:pos:input,scale);
+//help:Paraslide(para=folder:layery:pos:include:[width=100]);
+ regional(store,nn,tmp,tmp1,tmp2,strL,eqL,waiting,outflg,pause,
+ mkr,mktex,options,sfL,dirbkup,pfile,ctr,flg,varL,waitingR,timeC,timeR);
+ store=Fillblack(); //181125
+ tmp=indexof(fstr,"(");
+ tmp1=substring(fstr,tmp,length(fstr));
+ tmp=indexof(tmp1,")");
+ tmp1=substring(tmp1,0,tmp-1);
+ parse("Movieframe("+tmp1+"):="+fstr+";"); //190415
+ options=optionorg;
+ tmp=Divoptions(options);
+ eqL=tmp_5;
+ strL=tmp_7;
+ if(length(strL)==0,options=append(options,"m"));
+ mkr="A";
+ mktex="A";
+ waiting=30;
+ outflg=0;
+ pause=10;
+ forall(eqL,
+ tmp=Strsplit(#,"=");
+ tmp1=Toupper(substring(tmp_1,0,1));
+ if(tmp1=="W",
+ waiting=parse(tmp_2);
+ options=remove(options,[#]);
+ );
+ if((tmp1=="O")%(tmp1=="R"), //180606from
+ tmp=Toupper(substring(tmp_2,0,1));
+ if(tmp=="Y", outflg=1);
+ options=remove(options,[#]);
+ );
+ if(tmp1=="P", //180610from
+ pause=parse(tmp_2);
+ options=remove(options,[#]);
+ ); // //180610to
+ );
+ forall(strL,
+ tmp1=Toupper(substring(#,0,1));
+ if(tmp1=="M",
+ mkr="Y"; mktex="Y";
+ );
+ );
+ waitingR=min([length(sL)*waiting,120]);//180617
+ Changework(Dirworksubbkup);
+ SCEOUTPUT = openfile("all.r");
+ println(SCEOUTPUT,"");
+ closefile(SCEOUTPUT);//180608to
+ resetclock();//180617
+ if(outflg==1, //180606from
+ CommonMake=1;//180609
+ ctr=1;
+ forall(sL,
+ tmp="000000"+text(ctr);
+ pfile="p"+substring(tmp,length(tmp)-3,length(tmp));
+ Setfiles(pfile);
+ Movieframe(#);
+ ctr=ctr+1;
+ );
+ CommonMake=-1;//180609
+ Setfiles(Fheadbkup);//180617
+ timeC=seconds();//180617
+ ); //180606to
+ wait(pause); //180610
+ sfL=[];
+ ctr=1;
+ forall(1..(length(sL)),nn,
+ GLIST=GLISTback;
+ GCLIST=GCLISTback;
+ GOUTLIST=GOUTLISTback;
+ POUTLIST=POUTLISTback;
+ VLIST=VLISTback;
+ FUNLIST=FUNLISTback;
+ LETTERlist=LETTERlistback;
+ COM0thlist=COM0thlistback;
+ COM1stlist=COM1stlistback;
+ COM2ndlist=COM2ndlistback;
+ tmp="000000"+text(nn);
+ pfile="p"+substring(tmp,length(tmp)-3,length(tmp));
+ Changework(Dirworksubbkup);
+ Setfiles(pfile);
+ sfL=append(sfL,FnameR);
+ if(outflg==1,
+ wait(pause);
+ Movieframe(sL_nn);
+ Changework(Dirworksubbkup);//180606
+ ctr=ctr+1;
+ ,
+ Movieframe(sL_nn);
+ timeC=seconds();//180617
+ );
+ CommonMake=0;//180609
+ Setfiles(pfile); //180608
+ if(!isexists(Dirworksubbkup,FnameR) % mkr=="Y",
+ if(ErrFlag!=-1,
+ WritetoRS(2);
+ );
+ );
+ );
+ wait(pause); //180610
+ Setfiles(Fheadbkup);
+ GLIST=select(GLIST,indexof(#,"Projpara")==0);
+ tmp1=replace(Dirworksubbkup,"\\","/"); //180611
+ tmp1=replace(tmp1,"\","/");
+ cmdL=[
+ "setwd("+Dqq(tmp1)+")",[],
+ "size="+text(length(sL)),[],
+ "cat('',file='all.r',sep='',append=FALSE)",[], //180614
+ "for(n in Looprange(1,size)){",[],
+ " tmp=as.character(n)",[],
+ " tmp=paste('0000',tmp,sep='')",[],
+ " tmp=substring(tmp,nchar(tmp)-2,nchar(tmp))",[],
+ " fname=paste('p',tmp,'.r',sep='')",[],
+ " lines=readLines(fname)",[],
+ " if(n>1){",[], //180614from
+ " for(j in 1:length(lines)){",[],
+ " tmp=grep('source',lines[j],fixed=TRUE)",[],
+ " if(length(tmp)>0){",[],
+ " lines[j]=paste('#',lines[j],sep='')",[],
+ " lines[j+2]=paste('#',lines[j+2],sep='')",[],
+ " break",[],
+ " }",[],
+ " }",[],
+ " }",[],
+ " lines=lines[1:(length(lines)-1)]",[], //180614to
+ " tmp=paste('print(',as.character(n),')',sep='')",[],
+ " lines=c(tmp,lines)",[],
+ " for(j in Looprange(1,length(lines))){",[],
+ " cat(lines[j],file='all.r',sep='\n',append=TRUE)",[],
+ " }",[],
+ "}",[],
+ "source('all.r')",[]
+ ];
+ if(ErrFlag!=-1,
+ waiting=min([waiting,8])*length(ParaSL); //180610
+ if(!isexists(Dirworksubbkup,Fnametex) % mktex=="Y",
+ CalcbyR("",cmdL,["Cat=n","m","Wait="+text(waitingR)]);
+ ,
+ println("Parafolder finished");
+ );
+ if(length(after)>0,
+ parse(after+";"); //190415
+ );
+ );
+ if(ErrFlag!=-1,//180617from
+ timeR=seconds()-timeC;
+ println("C and R finished");
+ println(" C : "+Sprintf(timeC,2)+" sec");
+ println(" R : "+Sprintf(timeR,2)+" sec");
+ ); //180617to
+ Changework(Dirworkbkup);
+ Setfiles(Fheadbkup);
+ Fillrestore(store); //181125
+);
+////%Parafolder end////
+
+////%Animatefile start////
+Animatefile():=Animatefile(Dirwork,ParaPath);
+Animatefile(path,folder):=(
+//help:Animatefile();
+//help:Animatefile(Dirwork,ParaPath);
+ regional(FRate, Scale, OpA, pa,fname,eqL,tmp,tmp1,tmp2,texfiles);
+ tmp=divoptions(ParaOpAnim); //17.11.24
+ eqL=tmp_5;
+ FRate="20"; //190317
+ Scale="1";
+ OpA="loop,controls,buttonsize=3mm";
+ remflg=0;
+ forall(eqL,
+ tmp1=Toupper(substring(#,0,1)); //181111
+ tmp=indexof(#,"=");
+ tmp2=substring(#,tmp,length(#));
+ if(tmp1=="F",
+ FRate=tmp2;
+ );
+ if(tmp1=="S",
+ Scale=tmp2;
+ );
+ if(tmp1=="O", // 17.12.07from
+ if(length(tmp2)>0,
+ tmp2=replace(tmp2,"[","");
+ tmp2=replace(tmp2,"]","");
+ if(substring(tmp2,0,1)=="+",
+ OpA=OpA+","+substring(tmp2,1,length(tmp2));
+ ,
+ OpA=tmp2;
+ );
+ );
+ );
+ );
+ if(length(OpA)>0,OpA="["+OpA+"]");
+ pa=replace(path,"\","/");
+ fname="anim"+folder+".tex";
+ tmp=Dirwork+"/"+folder;
+ path=replace(tmp,"\","/");
+ if(iswindows(),tmp=replace(tmp,"/","\"));
+ tmp1=fileslist(tmp);
+ tmp1=tokenize(tmp1,",");
+ tmp1=select(tmp1,indexof(#,".tex")>0);
+ tmp1=sort(tmp1); //180617
+ texfiles=[];//180609from
+ forall(tmp1,
+ tmp=indexof(#,".");
+ tmp=parse(substring(#,1,tmp-1));
+ if(tmp<=length(ParaSL),
+ texfiles=append(texfiles,#);
+ );
+ );//180609to
+ SCEOUTPUT= openfile(fname);
+ println(SCEOUTPUT,"\def\parapath{"+pa+"}%"); //17.06.22
+ println(SCEOUTPUT,"\def\figsize{"+Scale+"}%"); //17.12.07
+ println(SCEOUTPUT,"\begin{animateinline}"+OpA+"{"+FRate+"}%");
+ forall(1..(length(texfiles)), //180609
+ if(Scale==1, // 17.08.30from
+ tmp="\input{\parapath/";
+ tmp=tmp+folder+"/"+tmp1_#+"}%";
+ ,
+ tmp="\scalebox{\figsize}{\input{\parapath/";//17.12.07
+ tmp=tmp+folder+"/"+tmp1_#+"}}%";
+ ); // 17.08.30until
+ println(SCEOUTPUT,tmp);
+// println(SCEOUTPUT,""); //17.06.25
+ if(#<length(tmp1),
+ println(SCEOUTPUT,"\newframe%");
+ );
+ );
+ println(SCEOUTPUT,"\end{animateinline}%");
+ closefile(SCEOUTPUT);
+ println(fname+" has been generated");
+);
+////%Animatefile end////
+
+////%Mkanimation start////
+Mkanimation():=(
+ regional(remflg,tmp,eqL,tmp1,tmp2);
+ if(!isexists(Dirwork,ParaPath), //17.10.14from
+ Parafolder();
+ );
+ Animatefile(); //17.10.14until
+ Mkanimation(Dirwork,ParaPath);
+);
+Mkanimation(folder):=Mkanimation(Dirwork,folder);
+Mkanimation(path,folder):=(
+//help:Mkanimation();
+//help:Mkanimation(path,folder);
+ regional(store,Fheadbkup,Pathpdfbkup,tex,article,parent,
+ eqL,mag,title,tmp,tmp1,tmp2,tmp3,flg);
+ store=Fillblack(); //181125
+ tmp=Divoptions(ParaOpAnim); //17.11.25from
+ eqL=tmp_5;
+ mag="1600";
+ title=folder;
+ forall(eqL,
+ tmp=Indexof(#,"=");
+ tmp1=Toupper(substring(#,0,1));
+ tmp2=substring(#,tmp,length(#));
+ if(tmp1=="M",
+ mag=tmp2;
+ );
+ if(tmp1=="T",
+ title=tmp2;
+ );
+ ); //17.11.25until
+ Fheadbkup=Fhead;
+ Fhead=folder+"animate"; //190404
+ Pathpdfbkup=Pathpdf;
+ Pathpdf=PathAd;
+ tmp1=replace(PathT,pathsep(),"/");
+ tmp=indexall(tmp1,"/");//17.10.14from
+ if(length(tmp)>0,
+ tex=substring(tmp1,tmp_(length(tmp)),length(tmp1));
+ ,
+ tex=tmp1;
+ );//17.10.14until
+ if((tex=="platex")%(tex=="uplatex"),
+ if(tex=="platex",article="jarticle",article="ujarticle");
+ ,
+ article="article";
+ );
+ SCEOUTPUT=openfile(Fhead+".tex");
+ println(SCEOUTPUT,"\documentclass[landscape]{"+article+"}");
+ if((tex=="platex")%(tex=="uplatex")%(tex=="latex"),
+ tmp="\special{papersize=\the\paperwidth,\the\paperheight}";
+ println(SCEOUTPUT,tmp);
+ println(SCEOUTPUT,"\mag="+mag);//17.11.25
+ );
+ if((tex=="pdflatex")%(tex=="lualatex")%(tex=="xelatex"),
+ if((tex=="pdflatex")%(tex=="xelatex"),
+ println(SCEOUTPUT,"\usepackage[pdftex]{pict2e}");
+ ,
+ println(SCEOUTPUT,"\usepackage{pict2e}");
+ println(SCEOUTPUT,"\usepackage{luatexja}");
+ );
+ tmp=replace(Dirhead,"\","/"); //17.10.30from
+ tmp=replace(tmp,"scripts","tex/latex");
+ if(isexists(tmp,""),
+ println(SCEOUTPUT,"\usepackage{ketpic2e,ketlayer2e}");
+ ,
+ tmp=replace(Dirhead+"/ketpicstyle","\","/");
+ println(SCEOUTPUT,"\usepackage{"+tmp+"/ketpic2e}");
+ println(SCEOUTPUT,"\usepackage{"+tmp+"/ketlayer2e}");
+ );
+ ,
+ tmp=replace(Dirhead,"\","/"); //17.10.30from
+ tmp=replace(tmp,"scripts","tex/latex");
+ if(isexists(tmp,""),
+ println(SCEOUTPUT,"\usepackage{ketpic,ketlayer}");
+ ,
+ tmp=replace(Dirhead+"/ketpicstyle","\","/");
+ println(SCEOUTPUT,"\usepackage{"+tmp+"/ketpic}");
+ println(SCEOUTPUT,"\usepackage{"+tmp+"/ketlayer}");
+ );
+ );
+ println(SCEOUTPUT,"\usepackage{amsmath,amssymb}");
+ println(SCEOUTPUT,"\usepackage{bm,enumerate}");
+ if((tex=="platex")%(tex=="uplatex")%(tex=="latex"),
+ println(SCEOUTPUT,"\usepackage[dvipdfmx]{graphicx}");
+ println(SCEOUTPUT,"\usepackage[dvipdfmx]{animate}");
+ ,
+ println(SCEOUTPUT,"\usepackage{graphicx}");
+ println(SCEOUTPUT,"\usepackage{animate}");
+ );
+ println(SCEOUTPUT,"\usepackage{xcolor}");
+ forall(ADDPACK, tmp1,
+ tmp=indexof(tmp1,"{animate}")+indexof(tmp1,"{hyperref}");
+ if(tmp==0,
+ println(SCEOUTPUT,"\usepackage"+tmp1);
+ );
+ );
+ println(SCEOUTPUT,"\pagestyle{empty}");
+ println(SCEOUTPUT,"\setmargin{0}{0}{0}{0}");
+ println(SCEOUTPUT,"");
+ println(SCEOUTPUT,"\begin{document}");
+ println(SCEOUTPUT,"\large");
+ println(SCEOUTPUT,"");
+ println(SCEOUTPUT,"\vspace*{25mm}");
+ println(SCEOUTPUT,"");
+ tmp=floor(parse("290*1000/"+mag));
+ print(SCEOUTPUT,"\Ctab{"+text(tmp)+"mm}{");
+ print(SCEOUTPUT,"\fbox{\Large\bf "+title+"}");
+ println(SCEOUTPUT,"}");
+ tmp=parse("6*1000/"+mag);
+ println(SCEOUTPUT,"\vspace{"+text(tmp)+"mm}");
+ println(SCEOUTPUT,"");
+ tmp=indexof(ULEN,"cm");
+ if(tmp>0,
+ tmp1=substring(ULEN,0,tmp-1);
+ tmp1=parse(replace(tmp1," ",""))*10;
+ );
+ tmp=indexof(ULEN,"mm");
+ if(tmp>0,
+ tmp1=substring(ULEN,0,tmp-1);
+ tmp1=parse(replace(tmp1," ",""));
+ );
+ tmp=parse("300*1000/"+mag);
+ tmp1=(tmp-(XMAX-XMIN)*tmp1)/2;
+ tmp1=tmp1+parse("("+mag+"-1000)/100*1.3");
+ print(SCEOUTPUT,"\hspace*{"+text(tmp1)+"mm}");
+ tmp=replace(path,"\","/"); //17.12.09(2lines)
+ println(SCEOUTPUT,"\input{"+tmp+"/anim"+folder+".tex}");
+ println(SCEOUTPUT,"\end{document}");
+ closefile(SCEOUTPUT);
+ if(iswindows(),
+ parent=Dirwork+Batparent;
+ Makebat(Fhead,"ttv");
+ kc():=(
+ println("kc : "+kc(parent,Dirlib,Fnametex))
+ );
+ kc();
+ ,
+ parent=Dirwork+Shellparent;
+ Makeshell(Fhead,"ttv");
+ kc():=(
+ println("kc : "+kc(parent,Mackc+Dirlib,Fnametex));
+ );
+ kc();
+ );
+ Fhead=Fheadbkup;
+ Pathpdf= Pathpdfbkup;
+ Fillrestore(store); //181125
+);
+////%Mkanimation end////
+
+////%Mkflipanime start////
+Mkflipanime():=(
+ regional(remflg,tmp,eqL,tmp1,tmp2);
+ if(!isexists(Dirwork,ParaPath), //17.10.14from
+ Parafolder();
+ );
+ Mkflipanime(Dirwork,ParaPath);
+);
+Mkflipanime(folder):=Mkflipanime(Dirwork,folder);
+Mkflipanime(path,folder):=(
+//help:Mkfilpanime();
+//help:Mkflipanime(path,folder);
+ regional(store,Fheadbkup,tex,article,parent,eqL,mag,title,
+ tmp,tmp1,tmp2,tmp3,texfiles,flg);
+ store=Fillblack(); //181125
+ tmp=Divoptions(ParaOpAnim); //17.11.25from
+ eqL=tmp_5;
+ mag="1600";
+ title=folder;
+ forall(eqL,
+ tmp=Indexof(#,"=");
+ tmp1=Toupper(substring(#,0,1));
+ tmp2=substring(#,tmp,length(#));
+ if(tmp1=="M",
+ mag=tmp2;
+ );
+ if(tmp1=="T",
+ title=tmp2;
+ );
+ ); //17.11.25until
+ Fheadbkup=Fhead;
+ Fhead=folder+"flipanime"; //190404
+ tmp1=replace(PathT,pathsep(),"/");
+ tmp=indexall(tmp1,"/");//17.10.14from
+ if(length(tmp)>0,
+ tex=substring(tmp1,tmp_(length(tmp)),length(tmp1));
+ ,
+ tex=tmp1;
+ );//17.10.14until
+ if((tex=="platex")%(tex=="uplatex"),
+ if(tex=="platex",article="jarticle",article="ujarticle");
+ ,
+ article="article";
+ );
+ SCEOUTPUT=openfile(Fhead+".tex");
+ println(SCEOUTPUT,"\documentclass[landscape]{"+article+"}");
+ if((tex=="platex")%(tex=="uplatex")%(tex=="latex"),
+ tmp="\special{papersize=\the\paperwidth,\the\paperheight}";
+ println(SCEOUTPUT,tmp);
+ println(SCEOUTPUT,"\mag="+mag);//17.11.25
+ );
+ if((tex=="pdflatex")%(tex=="lualatex")%(tex=="xelatex"),
+ if((tex=="pdflatex")%(tex=="xelatex"),
+ println(SCEOUTPUT,"\usepackage[pdftex]{pict2e}");
+ ,
+ println(SCEOUTPUT,"\usepackage{pict2e}");
+ println(SCEOUTPUT,"\usepackage{luatexja}");
+ );
+ tmp=replace(Dirhead,"\","/"); //17.10.30from
+ tmp=replace(tmp,"scripts","tex/latex");
+ if(isexists(tmp,""),
+ println(SCEOUTPUT,"\usepackage{ketpic2e,ketlayer2e}");
+ ,
+ tmp=replace(Dirhead+"/ketpicstyle","\","/");
+ println(SCEOUTPUT,"\usepackage{"+tmp+"/ketpic2e}");
+ println(SCEOUTPUT,"\usepackage{"+tmp+"/ketlayer2e}");
+ );
+ ,
+ tmp=replace(Dirhead,"\","/"); //17.10.30from
+ tmp=replace(tmp,"scripts","tex/latex");
+ if(isexists(tmp,""),
+ println(SCEOUTPUT,"\usepackage{ketpic,ketlayer}");
+ ,
+ tmp=replace(Dirhead+"/ketpicstyle","\","/");
+ println(SCEOUTPUT,"\usepackage{"+tmp+"/ketpic}");
+ println(SCEOUTPUT,"\usepackage{"+tmp+"/ketlayer}");
+ );
+ );
+ println(SCEOUTPUT,"\usepackage{amsmath,amssymb}");
+ println(SCEOUTPUT,"\usepackage{bm,enumerate}");
+ if((tex=="platex")%(tex=="uplatex")%(tex=="latex"),
+ println(SCEOUTPUT,"\usepackage[dvipdfmx]{graphicx}");
+ ,
+ println(SCEOUTPUT,"\usepackage{graphicx}");
+ );
+ println(SCEOUTPUT,"\usepackage{xcolor}");
+ forall(ADDPACK, tmp1,
+ if(tmp==0,
+ println(SCEOUTPUT,"\usepackage"+tmp1);
+ );
+ );
+ println(SCEOUTPUT,"\pagestyle{empty}");
+ println(SCEOUTPUT,"\setmargin{0}{0}{0}{0}");
+ println(SCEOUTPUT,"");
+ println(SCEOUTPUT,"\begin{document}");
+ println(SCEOUTPUT,"\large");
+ println(SCEOUTPUT,"");
+ tmp=fileslist(Dirwork+pathsep()+folder);
+ tmp=tokenize(tmp,",");
+ tmp1=select(tmp,indexof(#,".tex")>0); //180609from
+ tmp1=sort(tmp1);//180617
+ texfiles=[];
+ forall(tmp1,
+ tmp=indexof(#,".");
+ tmp=parse(substring(#,1,tmp-1));
+ if(tmp<=length(ParaSL),
+ texfiles=append(texfiles,#);
+ );
+ );//180609to
+ forall(texfiles,
+ println(SCEOUTPUT,"\vspace*{25mm}");
+ println(SCEOUTPUT,"");
+ tmp=floor(parse("290*1000/"+mag));
+ print(SCEOUTPUT,"\Ctab{"+text(tmp)+"mm}{");
+ print(SCEOUTPUT,"\fbox{\Large\bf "+title+"}");
+ println(SCEOUTPUT,"}");
+ tmp=parse("6*1000/"+mag);
+ println(SCEOUTPUT,"\vspace{"+text(tmp)+"mm}");
+ println(SCEOUTPUT,"");
+ tmp=indexof(ULEN,"cm");
+ if(tmp>0,
+ tmp1=substring(ULEN,0,tmp-1);
+ tmp1=parse(replace(tmp1," ",""))*10;
+ );
+ tmp=indexof(ULEN,"mm");
+ if(tmp>0,
+ tmp1=substring(ULEN,0,tmp-1);
+ tmp1=parse(replace(tmp1," ",""));
+ );
+ tmp=parse("300*1000/"+mag);
+ tmp1=(tmp-(XMAX-XMIN)*tmp1)/2;
+ tmp1=tmp1+parse("("+mag+"-1000)/100*1.3");
+ print(SCEOUTPUT,"\hspace*{"+text(tmp1)+"mm}");
+ println(SCEOUTPUT,"\input{"+folder+"/"+#+"}");
+ println(SCEOUTPUT,"");
+ println(SCEOUTPUT,"\newpage");
+ );
+ println(SCEOUTPUT,"\end{document}");
+ closefile(SCEOUTPUT);
+ if(iswindows(),
+ parent=Dirwork+Batparent;
+ Makebat(Fhead,"tv");
+ kc():=(
+ println("kc : "+kc(parent,Dirlib,Fnametex))
+ );
+ kc();
+ ,
+ parent=Dirwork+Shellparent;
+ Makeshell(Fhead,"tv");
+ kc():=(
+ println("kc : "+kc(parent,Mackc+Dirlib,Fnametex));
+ );
+ kc();
+ );
+ Fhead=Fheadbkup;
+ Fillrestore(store); //181125
+);
+////%Mkflipanime end////
+
+//help:end();
+
diff --git a/graphics/ketcindy/ketcindyfolder/scripts/ketlib/ketcindyliboutlogr.txt b/graphics/ketcindy/ketcindyfolder/scripts/ketlib/ketcindyliboutlogr.txt
new file mode 100644
index 0000000000..ddfac03553
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/scripts/ketlib/ketcindyliboutlogr.txt
@@ -0,0 +1,232 @@
+// 20190424
+// PlotdiscR changed ( "-" added to Listplot )
+// Mxfun debugged (options)
+// 20190415
+// parse( ..= ) changed ( ; added )
+// 20190411
+// CalcbyM changed ("Errchk=" added)
+// 20190327
+// Mxfun debugged ( eqL to 1 char)
+// 20190317
+// Readcsv debugged ( in case of 2 args )
+// 20190301
+// MeasureDepth => Measuredepth
+// Readcsv changed ( for 2 arg, ".csv" can be omitted )
+// 20190226
+// Histplot changed ( [ ] => c( ) )
+// 20190224
+// CalcbyR changed (defaut of Pre : PVOFG => VF )
+// 20190127
+// Gccexists changed (in case that PathC is full path in Mac/Windws)
+// 20190126
+// Boxplot changed ( Pointdata[size] )
+// 20190125
+// Readcsv changed/debugged ( option "Head=" added. For 1 line data )
+// HIstplot, Boxplot changed (wait=5)
+// 20190124
+// Gccexists added
+// Sfcutparadata debugged (optionh)
+// 20190123
+// Sfbdparadata,... debugged (in case of emply options,optionsh )
+// kcC chnage ( positon "-lm" changed for Mac/Linux )
+// 20181219
+// Rfun debugged ( Out=y )
+// CalcbyR debugged ( argment list changed to string)
+// 20181218
+// Help (Sfbdparadata ,,,, )
+// 20181217
+// Sfbdparadata debugged (replace fname+nm to fnameall )
+/// 20181209
+// MkprecommandR debugged (arc.. added )
+// Mkviewobj changed ( option "Zax=" added)
+// 20181103
+// Mkviewobj changed ( change coord in case of "preview")
+// Setobj changed ( option "preview" added )
+// 20181102
+// kcV3 changed ( "preview" for Mac )
+// 20181123
+// Mkviewobj debugged ( Out=n )
+// CalcbyR changed ( for cat )
+// 201811225
+// Readcsv majorly changed ( readfile2str used )
+// 20181116
+// Startsurf changed ( case of 4 argments added )
+// 20181114
+// Execcmd debugged ( Changestye3d for sfcut,wire )
+// Sfbdparadata,... changed ("Color=.." copied to optionh if no color option )
+// 20181112
+// Sfcutparadatacdy added
+// Sfcutparadatacdy debugged (case of MeasureDepth==1)
+// 20181107
+// Cform debugged (integer => integer.0)
+// global StyleListC added ( to Sfbdparadata,... )
+// 20181106
+// Cform debugged (new version made)
+// ExeccmdC changed (subgraph added )
+// 20181105
+// Crvsfparadata changed ( multi surface supported )
+// 20181101
+// CalcbyC chanded (wflg retured)
+// ExeccmdC changed ( WritedataC added when necessary )
+// Contsurf added
+// ExeccmdC changed ( for Contsurf )
+// 20181029
+// in ReadOutData C callings, option=["Disp=n"] added
+// 20181020
+// HatchdataR,Dotfilldata (Setscaling(SCALEX,SCALEY)
+// 20181014
+// Rulerscale changed (mag added to "r" )
+// 20181013
+// Scatterplot debugged and changed ( Readcsv, for case of data list, option "m/r")
+// Scatterplot changed (optionspt, optionsseg)
+// Scatterplot changed (position addede to optionsseg)
+// 20180906
+// Setobj debugged (objname removed)
+// 20180902
+// Setobj changed (null argument)
+// Mkviewobj changed (Cat=n)
+// 20180727
+// Wireparadata, Sfcutparadata debugged ("char fname..." removed)
+// 20180722
+// PlotdataR,Boxplot,Rulersclale changed (color option)
+// 20180712
+// SfbdparadataC,... renamed to Sfbdparadata,...
+// 20180617
+// CalcbyC debugged ( println removed)
+// 20180615
+// CalcbyC debugged ( flg block changed)
+// kcC changed ( 1000 =>10000)
+// 20180612
+// Hatchdata renamed to HatchdataR
+// kcC changed ( "gcc -lm" )
+// 20180611
+// StartsurfC changed ( "reset" of GLIST )
+// 20180610
+// StartsurfC debugged ( sizeL )
+// 20180609
+// StartsurfC changed ( multi type of setting constant)
+// ExeccmdC changed (CommonMake)
+// 20180608
+// StartsurfC changed ( FuncListC reset)
+// ExeccmdC changed ( Fhead printed)
+// ExeccmdC, Crvsfparadata,... changed (Projpara with "Msg=n" )
+// CalcbyR changed (Wait=30)
+// 20180607
+// CrvsfparadataC,WireparadataC debugged ( "sprintf..." of CommandListC);
+// SfbdparadataC changed (name: funnm =>nm )
+// 20180606
+// StartsurfC added
+// SfbdparadataC changed (FuncListC)
+// Setpara, Parafolder renewed
+// 20180605
+// ExeccmdC changed ("Path=" option supported )
+// 20180602
+// divoptions ( 8,9 ->length(tmp)-1,length(tmp))
+// ExeccmdC changed ( optionsh (default="do"), varL )
+// Crv2onsfparadata,Crv3onsfparadata debugged
+// 20180601
+// SfbdparadataC,... changed ( fbdy => sfbd)
+// Ctopsurf changed (data[DsizeL][3],sfbd[DsizeL][3] added )
+// Ctosurf changed (CutFunList)
+// SfbdparadataC changed ( "w" or "a" set according to CommandListC)
+// Wireparadata,Sfcutdata changed (cmdflg)
+// ExeccmdC changed ( EraseList );
+// 20180531
+// SfbdparadataC changed ( outputend added, readoutdata3 changed)
+// 20180530
+// Ctopsurf changed ( stdlib.h, string.h)
+// CrvsfparadataC,Crvonsfparadata,... changed (readoutdata3 used for fbdy)
+// 20180523
+// Cheadsurf,Ctopsurf debugged (case => break added )
+// Cheadsurf debugged ( Dirname "\" => "/")
+// CalcbyC debugged ( "////" )
+// 20180521
+// IntersectcrvsfC added
+// 20180517
+// Cform debugged ( "=", tmp=0)
+// SfbdparadataC,... changed ( "" removed from optionh )
+// CalcbyC changed ( "result" => "end" )
+// 20180516
+// Ctopsurf debugged ( : => ;)
+// 20180510
+// CalcbyR changed ( for the last command )
+// Crv2sfparadataC added
+// 20180508
+// MkprecommandR changed (PVOFG)
+// CalcbyR changed (option Pre)
+// 20180505
+// Ctopsurf changed ( for mult cutfun)
+// 20180504
+// Ketinit debuggde (MARKLEN : )
+// 20180502
+// CostC removed
+// SetconstantC added
+// 20180428
+// CrvsfparadataC changed (Changestyle => "nodisp")
+// Ctopsurf changed (data[DsizeLL][3] removed )
+// 20180426
+// CrvsfparadataC largely changed
+// WritedataC changed ( \n removed at the last line )
+// 2018.04.12
+// CalcbyR changed ( for blank name )
+// 2018.04.11
+// Mkketcindyjs debugged
+// 2018.03.27
+// functions of C changed
+// CalcbyC added
+// Sfbdparadata,Crvsfparadata added
+// 2018.03.24
+// WriteCdata changed ( 99999 )
+// 2018.03.03
+// ConvertFdtoC changed ( varnames converted to u,v )
+// 2018.03.01
+// Cform,ConvertFdtoC added
+// 2018.02.27
+// Rfun debugged
+// 2018.02.22
+// CalcbyR changed (adding ".txt" to wfile)
+// 2018.02.20
+// CalcbyR changed (Quick return of Erromessage)
+// 2018.02.12
+// MkprecommandR changed ( for GLIST )
+// 2018.02.11
+// Mkprecommand debugged
+// CalcbyR debugged ("ans" replaced to name )
+// 2018.02.01
+// CalcbyR changed (for matrix, wait=5 )
+// 2018.01.31
+// CalcbyR changed (for list of list )
+// 2018.01.29
+// CalcbyR debugged and changed (case of result is null )
+// 2018.01.27
+// CalcbyR changed ( output like Maxima(::),"Out")
+// 2018.01.07
+// Hatchdata debugged (fun removed )
+// 2017.12.24
+// Mkobjpoly,Mkobjplate debugged
+// Changeobjscalce changed for R
+// 2017.12.23
+// Mkobjsymbcmd debugged
+// Setoptions changed
+// Mkobjthickcmd added
+// 2017.12.22
+// Mkobjcrvcmd debugged
+// 2017.10.24
+// Maxima2Cindydata added
+// 2017.10.12
+// kcR debugged ( for Mac, => 2> )
+// 2017.10.07
+// CalcbyR debugged ( => WritetoRS )
+// ReadCdata changed ( execstr removed )
+// 2017.10.02
+// Imlicitplot changed (for R)
+// 2017.09.29
+// WritetoS debugged (LibnameS)
+// Dotfilldata changed
+// 2017.09.24
+// Circledata, WritetoR, PrecommandR debugged
+// 2017.09.23
+// Hatchdata debugged
+// 2017.09.18
+// Hatchdata changed (for R)
+// SCIWR,SCIRE removed
diff --git a/graphics/ketcindy/ketcindyfolder/scripts/ketlib/ketcindyliboutr.cs b/graphics/ketcindy/ketcindyfolder/scripts/ketlib/ketcindyliboutr.cs
new file mode 100644
index 0000000000..7de07986f3
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/scripts/ketlib/ketcindyliboutr.cs
@@ -0,0 +1,6634 @@
+// Copyright (C) 2014 Setsuo Takato, KETCindy Japan project team
+//
+//This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see <http://www.gnu.org/licenses/>
+//
+
+println("ketcindylibout[20190424] loaded");
+
+//help:start();
+
+////%WritetoS start////
+WritetoS(fname,cmdL):=(
+// help:WritetoS("outdata",cmdL);
+ regional(tmp,tmp1,tmp2,filename);
+ if(indexof(fname,".")==0,
+ filename=fname+".sce";
+ ,
+ filename=fname;
+ );
+ SCEOUTPUT = openfile(filename);
+ tmp="cd('"+Dirwork+"');//";
+ println(SCEOUTPUT,tmp);
+// tmp1=replace(Dirlib,"\","/");
+ tmp="Ketlib=lib("+Dq+LibnameS+Dq+");//"; //17.09.29
+ println(SCEOUTPUT,tmp);
+ tmp="Ketinit();//";
+ println(SCEOUTPUT,tmp);
+ tmp="Setwindow([XMIN,XMAX],[YMIN,YMAX]);"; // 16.06.26from
+ tmp=Assign(tmp,["XMIN",XMIN,"XMAX",XMAX,"YMIN",YMIN,"YMAX",YMAX]);
+ println(SCEOUTPUT,tmp); // 16.06.26until
+ if(iswindows(), // 17.01.11from
+ println(SCEOUTPUT,"setlanguage('en')");
+ ); // 17.01.11until
+ tmp="pi=%pi;////";
+ println(SCEOUTPUT,tmp);
+ forall(cmdL,
+ println(SCEOUTPUT,#+"//");
+ );
+ closefile(SCEOUTPUT);
+);
+////%WritetoS end////
+
+////%kcS start////
+kcS(path,fname):=kcS(path,fname,[]);
+kcS(path,fname,optionorg):=(
+//help:kcS(PathS,"boxdata");
+//help:kcS(options=["r/m"]);
+ regional(options,tmp,tmp1,tmp2,eqL,strL,filename,flg);
+ if(indexof(fname,".")==0,
+ filename=fname+".sce";
+ ,
+ filename=fname;
+ );
+ options=optionorg;
+ tmp=Divoptions(options);
+ eqL=tmp_5;
+ strL=tmp_7;
+ forall(eqL,
+ tmp=indexof(#,"=");
+ tmp1=substring(#,0,tmp-1);
+ tmp2=substring(#,tmp,length(#));
+ );
+ flg=0;
+ forall(strL,
+ if(Toupper(substring(#,0,1))=="R",
+ flg=0;
+ options=remove(options,[#]);
+ );
+ if(Toupper(substring(#,0,1))=="M",
+ flg=1;
+ );
+ );
+ if(flg==0,
+ tmp2=replace(filename,".sce",".txt");
+ tmp1=load(tmp2);
+ if(length(tmp1)==0,
+ flg=1;
+ );
+ );
+ if(flg==1,
+ tmp1=""; // 15.10.08 from
+ if(iswindows(),
+ tmp2=Batparent;
+ ,
+ tmp2=Shellparent;
+ );
+ flg=0;
+ forall(reverse(1..length(tmp2)),
+ if(flg==0,
+ tmp=substring(tmp2,#-1,#);
+ if(tmp=="/" % tmp=="\", // 14.01.15
+ tmp1=substring(tmp2,0,#-1);
+ tmp2=substring(tmp2,#,length(tmp2));
+ flg=1;
+ );
+ );
+ );
+ if(length(tmp1)>0,
+ setdirectory(tmp1);
+ ); // 15.10.08 to
+ if(iswindows(),
+ SCEOUTPUT = openfile("kc.bat");
+ println(SCEOUTPUT,"cd "+Dq+Dirwork+Dq);
+ tmp=Dq+path+Dq+" -nb -nwni -f "+filename;
+ println(SCEOUTPUT,tmp);
+ println(SCEOUTPUT,"exit");
+ closefile(SCEOUTPUT);
+ println(kc(Dirwork+Batparent,Dirlib,Fnametex));// 16.05.29, 0605
+ ,
+ if(ismacosx(), //181125from
+ SCEOUTPUT = openfile("kc.command");
+ ,
+ SCEOUTPUT = openfile("kc.sh");
+ ); //181125to
+ println(SCEOUTPUT,"#!/bin/sh");
+ println(SCEOUTPUT,"cd "+Dq+Dirwork+Dq);
+ tmp=Dq+path+Dq+" -nwni -f "+filename;
+ println(SCEOUTPUT,tmp);
+ println(SCEOUTPUT,"exit 0");
+ closefile(SCEOUTPUT);
+ println(kc(Dirwork+Shellparent,Mackc+Dirlib,Fnametex));// 16.05.29
+ );
+ wait(WaitUnit);
+ setdirectory(Dirwork);
+ );
+);
+////%kcS end////
+
+////%SetpathS start////
+SetpathS():=(
+ regional(tmp,tmp1);
+ if(!isstring(PathS), // 15.12.11
+ Setdirectory(Dirbin); // 15.12.07
+ tmp=load(Shellfile);
+ if(iswindows(),
+ tmp=tokenize(tmp," -nb");
+ PathS=tmp_1;
+ ,
+ tmp=tokenize(tmp," -nwni");
+ tmp=tokenize(tmp_1,"/Applications/sci");
+ PathS="/Applications/sci"+tmp_2;
+ );
+ setdirectory(Dirwork);
+ );
+ PathS;
+);
+////%SetpathS end////
+
+////%ErrhandleS start////
+ErrhandleS(fname):=( // 2016.02.28
+ regional(str); //17.04.14
+ if(indexof(PathS,"-6.")==0,
+ str=["if iserror(-1) then"," error=lasterror()+'????';"];
+ str=append(str," errclear(-1);"); // 16.03.14
+ str=append(str," Fd=mopen("+Dq+wfile+Dq+",'wt');");
+ str=append(str," mfprintf(Fd,'%s','Error: '+error);");
+ str=append(str," mclose(Fd);");
+ str=append(str," quit();");
+ str=append(str,"end;");
+ str;
+ ,
+ str=[]; //17.04.14
+ );
+);
+////%ErrhandleS end////
+
+////%Testfunstr start////
+Testfunstr(funstr,varx,vary):=(
+ regional(var,val,fun,tmp,tmp1,tmp2);
+ fun=replace(funstr,".x","(1)"); // 16.05.19
+ fun=replace(fun,".y","(2)"); // 16.05.19
+ tmp=indexof(varx,"=");
+ var=substring(varx,0,tmp-1);
+ val=substring(varx,tmp+1,length(varx));
+ tmp=indexof(val,",");
+ val=substring(val,0,tmp-1);
+ tmp1=replace(fun,var,"("+val+")");
+ tmp=indexof(vary,"=");
+ var=substring(vary,0,tmp-1);
+ val=substring(vary,tmp+1,length(vary));
+ tmp=indexof(val,",");
+ val=substring(val,0,tmp-1);
+ tmp1=replace(tmp1,var,"("+val+")");
+ tmp1;
+);
+////%Testfunstr end////
+
+////%CalcbyS start////
+CalcbyS(name,cmd):=CalcbyS(name,SetpathS(),cmd,[]);
+CalcbyS(name,Arg1,Arg2):=(
+ if(isstring(Arg1),
+ CalcbyS(name,Arg1,Arg2,[]);
+ ,
+ CalcbyS(name,SetpathS(),Arg1,Arg2);
+ );
+);
+CalcbyS(name,path,cmd,optionorg):=(
+//help:CalcbyS("a",cmd);
+//help:CalcbyS(options= ["m/r","Wait=10","Cat=middle"]]);
+//help:CalcbyS(options1= ["Ncol=2","File=result","Dig=5"]]);
+ regional(options,tmp,tmp1,tmp2,tmp3,tmp4,realL,strL,eqL,
+ ncoL,cat,dig,flg,wflg,file,nc,arg,cmdS,cmdlist,wfile,ext,
+ waiting, errcheck);
+ options=optionorg;
+ tmp=divoptions(options);
+ eqL=tmp_5;
+ realL=tmp_6;
+ strL=tmp_7;
+ cat="M";//16.11.24
+ ncoL=2;
+ ext=".txt";
+ waiting=10;
+ dig=5;
+ wfile="";
+ forall(eqL,
+ tmp=indexof(#,"=");
+ tmp1=Toupper(substring(#,0,1));
+ tmp2=substring(#,tmp,length(#));
+ if(tmp1=="C",
+ cat=Toupper(substring(tmp2,0,1));// 16.11.24
+ options=remove(options,[#]);
+ );
+ if(tmp1=="N",
+ ncoL=parse(tmp2);
+ options=remove(options,[#]);
+ );
+ if(tmp1=="E",
+ if(indexof(tmp2,".")==0,ext="."+tmp2,ext=tmp2);
+ options=remove(options,[#]);
+ );
+ if(tmp1=="W",
+ waiting=parse(tmp2);
+ options=remove(options,[#]);
+ );
+ if(tmp1=="D",
+ dig=parse(tmp2);
+ options=remove(options,[#]);
+ );
+ if(tmp1=="F", // 16.06.26from
+ wfile=tmp2;
+ options=remove(options,[#]);
+ ); // 16.06.26until
+ );
+ if(wfile=="",
+ if(cat=="Y",
+ wfile=Fhead+name;
+ ,
+ wfile="resultS";
+ );
+ );
+ if(indexof(wfile,".")==0,// 16.06.26from
+ wfile=wfile+ext;
+ ); // 16.06.26until
+ wflg=0;
+ forall(strL,
+ tmp=Toupper(substring(#,0,1));
+ if(tmp=="M",
+ wflg=1;
+ options=remove(options,[#]);
+ );
+ if(tmp=="R",
+ wflg=-1;
+ options=remove(options,[#]);
+ );
+ );
+ if(CONTINUED==0,
+ if((wflg==0) & (cat=="Y"), // 16.11.24
+ tmp=load(wfile);
+ if(length(tmp)==0,wflg=1);
+ );
+ );
+ file=Fhead+name;
+ cmdS=cmd;
+ cmdlist=[];
+ forall(1..floor(length(cmdS)/2),nc, //17.05.18
+ tmp1=cmdS_(2*nc-1);
+ tmp1=replace(tmp1,LFmark,""); // 16.06.12
+ tmp1=replace(tmp1,CRmark,""); // 16.12.13
+ if(nc==length(cmdR)/2, //16.10.23from
+ if(indexof(tmp1,"=")==0,tmp1="="+tmp1);
+ ); //16.10.23from
+ if(substring(tmp1,0,1)=="=",
+// tmp1=name+tmp1; // 16.12.20
+ );
+ tmp2=cmdS_(2*nc); // list of argments
+ tmp3="";
+ tmp4="";
+ errcheck=0;
+ forall(tmp2,arg,
+ if(isstring(arg),
+ if(Toupper(arg)=="ERROR",
+ errcheck=1;
+ ,
+ tmp3=tmp3+replace(arg,"'",Dq)+",";
+ );
+ ,
+ if(!islist(arg),
+ tmp3=tmp3+textformat(arg,dig)+",";
+ ,
+ tmp=select(arg,isstring(#) % islist(#));
+ if(length(tmp)>0,
+ tmp3=tmp3+"list(";
+ tmp4=")";
+ ,
+ tmp3=tmp3+"[";
+ tmp4="]";
+ );
+ forall(arg,
+ if(isstring(#),
+ tmp3=tmp3+replace(#,"'",Dq)+",";
+ ,
+ if(!islist(#), // 15.11.01 from
+ tmp3=tmp3+textformat(#,dig)+",";
+ ,
+ tmp=textformat(#,dig);
+ tmp=replace(tmp,"],[","];[");
+ tmp3=tmp3+tmp+",";
+ ); // 15.11.01 until
+ );
+ );
+ tmp3=substring(tmp3,0,length(tmp3)-1)+tmp4+",";
+ );
+ );
+ );
+ if(length(tmp3)>0,
+ tmp3=substring(tmp3,0,length(tmp3)-1);
+ tmp1=tmp1+"("+tmp3+");";
+ );
+ if(errcheck==1,
+ if(indexof(Dirlib,"sciL5")>0, // 17.03.20
+ cmdlist=append(cmdlist,"errcatch(-1,'continue','nomessage');");
+ ); // 17.03.20
+ );
+ cmdlist=append(cmdlist,tmp1);
+ if(errcheck==1,
+ tmp=ErrhandleS(wfile);
+ cmdlist=concat(cmdlist,tmp);
+ );
+ );
+ if(CONTINUED==1,
+ ComOutList=concat(ComOutList,cmdlist);
+ ,
+ if(cat=="Y",
+ tmp=[];
+ tmp=append(tmp,"Fd=mopen("+Dq+file+".txt"+Dq+",'wt');");
+ // 16.03.11 from
+ tmp=append(tmp,"mfprintf(Fd,'%s',"+name+");");
+ tmp=append(tmp,"mclose(Fd);");
+ cmdlist=concat(cmdlist,tmp);
+// tmp="fprintfMat("+Dq+file+".txt"+Dq+","+name+")";
+// cmdlist=append(cmdlist,tmp); // 16.03.11 until
+ ,
+// tmp="mputl(['????'],"+Dq+file+".txt"+Dq+");"; // 16.06.2 from
+// cmdlist=concat(cmdlist,[tmp]); // 16.06.2 until
+ );
+ if(cat!="Y", // 16.12.18
+ cmdlist=append(cmdlist,"mputl('||||','"+wfile+"')");
+ );
+ cmdlist=append(cmdlist,"quit()");
+ if(wflg==0,
+ tmp1=load(file+".sce");
+ if(length(tmp1)==0,
+ wflg=1;
+ ,
+ tmp1=tokenize(tmp1,"////");
+ tmp1=tokenize(tmp1_2,"//");
+ tmp1=tmp1_(1..(length(tmp1)-1));
+ if(length(tmp1)!=length(cmdlist),
+ wflg=1;
+ ,
+ tmp=select(1..length(tmp1),tmp1_#!=cmdlist_#);
+ if(length(tmp)>0, wflg=1);
+ );
+ );
+ );
+ if(wflg==0,wflg=-1); // 15.10.16
+ if(wflg==1,
+ if(length(wfile)>0, // 15.10.05
+ SCEOUTPUT=openfile(wfile);
+ println(SCEOUTPUT,"");
+ closefile(SCEOUTPUT);
+ );
+ WritetoS(file+".sce",cmdlist);
+ kcS(path,file,concat(options,["m"])); // 15.09.25
+ );
+ flg=0;
+ tmp1=floor(waiting*1000/WaitUnit);
+ repeat(tmp1,
+ if(flg==0,
+ tmp=load(wfile);
+ if(length(tmp)>=4,
+ tmp2=substring(tmp,length(tmp)-4,length(tmp));
+ if(tmp2=="////" % tmp2=="||||" % tmp2=="????", // 16.08.09
+ if(indexof(Toupper(tmp),"ERROR")>0,
+ println(tmp);
+ flg=2;
+ ,
+ flg=1;
+ );
+ );
+ tmp2=#*WaitUnit/1000;
+ ,
+ if(wflg==-1,
+ flg=-1;
+ ,
+ wait(WaitUnit);
+ );
+ );
+ );
+ );
+ if(flg<=0,
+ ErrFlag=1;
+ if(flg==-1,
+ println(wfile+" does not exist");
+ ,
+ tmp="("+text(waiting)+" s )";
+ println(wfile+" not generated "+tmp);
+ );
+ ,
+ if(flg==1,
+ println(" CalcbyS succeeded "+name+"("+text(tmp2)+" sec)"); //16.06.03
+ ,
+ ErrFlag=1;
+ );
+ );
+ );
+ if(wflg>-1,
+// wait(WaitUnit);
+ );
+);
+////%CalcbyS end////
+
+////%Scifun start////
+Scifun(name,fun,argL):=Scifun(name,fun,argL,[]);//16.10.22
+Scifun(name,fun,argL,optionorg):=(
+//help:Scifun("1","date()",[]);
+//help:Scifun(options=["Disp=y"]);
+ regional(nm,options,eqL,disp,cmdL,fname,
+ tmp,tmp1,tmp2);
+ nm="sc"+name;
+ fname=Fhead+nm+".txt";
+ options=optionorg;
+ tmp=divoptions(options);
+ precise=6;
+ disp=1;
+ pack=[];
+ set=[];
+ add="";
+ eqL=tmp_5;
+ forall(eqL,
+ tmp=indexof(#,"=");
+ tmp1=Toupper(substring(#,0,1)); //181111
+ tmp2=substring(#,tmp,length(#));
+ if(tmp1=="D" ,
+ tmp=Toupper(substring(tmp2,0,1));
+ if((tmp=="F") % (tmp=="N"),
+ disp=0;
+ );
+ options=remove(options,[#]);
+ );
+ );
+ cmdL=[];
+ cmdL=concat(cmdL,[
+ nm+"="+fun,argL,
+ "Fd=mopen",[Dq+fname+Dq,Dq+"wt"+Dq],
+ "Sla=char(47)+char(47);",[],
+ "mputl",["string("+nm+")+Sla","Fd"],
+ "mputl",["Sla","Fd"],
+ "mclose",["Fd"]
+ ]);
+ options=append(options,"Wait=2");
+ CalcbyS(nm,cmdL,options);
+ if(ErrFlag==0,
+ tmp=load(fname);
+ tmp=replace(tmp,"////","");
+ tmp=tokenize(tmp,"//");
+ tmp=apply(tmp,if(!isstring(#),textformat(#,6),Dq+#+Dq));
+ if(length(tmp)==1,
+ tmp=tmp_1;
+ );
+ tmp=nm+"="+text(tmp);
+ parse(tmp);
+ if(disp==1, // 15.11.24
+ println(nm+" is : ");
+ println(parse(nm));
+ );
+ );
+ parse(nm);
+);
+////%Scifun end////
+
+////%WritetoR start////
+WritetoR(fname,cmdL):=WritetoR(fname,cmdL,[]);
+WritetoR(fname,cmdL,options):=(
+// help:WritetoR("outdata",cmdL);
+ regional(eqL,tmp,tmp1,tmp2,filename,waiting);
+ if(indexof(fname,".")==0,
+ filename=fname+".r";
+ ,
+ filename=fname;
+ );
+ tmp=divoptions(options);
+ eqL=tmp_5;
+ waiting=5;
+ forall(eqL,
+ tmp=indexof(#,"=");
+ tmp1=substring(#,0,tmp-1);
+ tmp2=substring(#,tmp,length(#));
+ if(Toupper(substring(tmp1,0,1))=="W",
+ waiting=parse(tmp2);
+ );
+ );
+ SCEOUTPUT = openfile(filename);
+ tmp1=replace(Dirwork,"\","/");
+ tmp="setwd("+Dq+tmp1+Dq+")##";
+ println(SCEOUTPUT,tmp);
+ tmp1=replace(Libname,"\","/"); // 17.09.24from
+// tmp="load('"+tmp1+".Rdata')"; # 17.10.12
+ tmp="source('"+tmp1+".r')##"; // 17.09.24temporarily
+ println(SCEOUTPUT,tmp);
+ println(SCEOUTPUT,"Ketinit()##"); // 16.07.07
+ tmp="Setwindow(c(XMIN,XMAX),c(YMIN,YMAX))####"; // 16.06.26from
+ tmp=Assign(tmp,["XMIN",XMIN,"XMAX",XMAX,"YMIN",YMIN,"YMAX",YMAX]);
+ println(SCEOUTPUT,tmp);
+ forall(cmdL,
+ println(SCEOUTPUT,#+"##");
+ );
+ closefile(SCEOUTPUT);
+// flg=0;
+// tmp1=floor(waiting*1000/WaitUnit);
+// repeat(tmp1,
+// if(flg==0,
+// tmp=load(filename);
+// if(length(tmp)>0,
+// flg=1;
+// ,
+// wait(WaitUnit);
+// );
+// );
+// );
+);
+////%WritetoR end////
+
+////%kcR start////
+kcR(path,fname):=kcR(path,fname,[]);
+kcR(path,fname,optionorg):=(
+//help:kcR(PathR,"boxdata");
+//help:kcR(options=["m/r","Wait=10"]);
+ regional(options,tmp,tmp1,tmp2,eqL,strL,filename,ferr,flg);
+ if(indexof(fname,".")==0,
+ filename=fname+".r";
+ ,
+ filename=fname;
+ );
+ options=optionorg;
+ tmp=Divoptions(options);
+ eqL=tmp_5;
+ strL=tmp_7;
+ forall(eqL,
+ tmp=indexof(#,"=");
+ tmp1=substring(#,0,tmp-1);
+ tmp2=substring(#,tmp,length(#));
+ );
+ flg=0;
+ forall(strL,
+ if(Toupper(substring(#,0,1))=="R",
+ flg=0;
+ options=remove(options,[#]);
+ );
+ if(Toupper(substring(#,0,1))=="M",
+ flg=1;
+ options=remove(options,[#]);
+ );
+ );
+ if(flg==0,
+ tmp2=replace(filename,".r",".txt");
+ tmp1=load(tmp2);
+ if(length(tmp1)==0,
+ flg=1;
+ );
+ );
+ if(flg==1,
+ tmp1=""; // 15.10.08 from
+ if(iswindows(),
+ tmp2=Batparent;
+ ,
+ tmp2=Shellparent;
+ );
+ flg=0;
+ forall(reverse(1..length(tmp2)),
+ if(flg==0,
+ tmp=substring(tmp2,#-1,#);
+ if(tmp=="/" % tmp=="\", // 14.01.15
+ tmp1=substring(tmp2,0,#-1);
+ tmp2=substring(tmp2,#,length(tmp2));
+ flg=1;
+ );
+ );
+ );
+ if(length(tmp1)>0,
+ setdirectory(tmp1);
+ ); // 15.10.08 to
+ ferr="errormessageR.txt";//16.10.22from
+ SCEOUTPUT=openfile(ferr);
+ closefile(SCEOUTPUT);//16.10.22uptp
+ if(iswindows(),
+ SCEOUTPUT = openfile("kc.bat");
+ println(SCEOUTPUT,"cd "+Dq+Dirwork+Dq);
+ tmp=Dq+path+"\R"+Dq+" --vanilla --slave < "+filename+" 2> "+ferr;
+ //16.10.22
+ println(SCEOUTPUT,tmp);
+ println(SCEOUTPUT,"exit");
+ closefile(SCEOUTPUT);
+ println(kc(Dirwork+Batparent,Dirlib,Fnametex));// 16.05.29,06.05
+ ,
+ if(ismacosx(), //181125from
+ SCEOUTPUT = openfile("kc.command");
+ ,
+ SCEOUTPUT = openfile("kc.sh");
+ ); //181125to
+ println(SCEOUTPUT,"#!/bin/sh");
+ println(SCEOUTPUT,"cd "+Dq+Dirwork+Dq);
+ if(PathR=="",tmp="R",tmp=PathR);//16.10.20
+ tmp=tmp+" --vanilla --slave < "+filename+" 2> "+ferr;//17.10.12
+ println(SCEOUTPUT,tmp);
+ println(SCEOUTPUT,"exit 0");
+ closefile(SCEOUTPUT);
+ println(kc(Dirwork+Shellparent,Mackc+Dirlib,Fnametex));// 16.05.29,06.05
+ );
+ wait(WaitUnit);
+ setdirectory(Dirwork);
+ );
+);
+////%kcR end////
+
+////%Dataframe start////
+Dataframe(nmL,dL):=Dataframe(nmL,dL,[]);
+Dataframe(nmL,dL,options):=(
+//help:Dataframe(["name","no1","no2"],dtL);
+//help:Dataframe(options=["Dig=5"]);
+ regional(dig,tmp,tmp1,tmp2,out);
+ dig=5;
+ tmp=Divoptions(options);
+ tmp=tmp_5;
+ forall(tmp,
+ tmp1=Toupper(substring(#,0,1));
+ tmp2=indexof(#,"=");
+ tmp2=substring(#,tmp2,length(#));
+ if(tmp1=="D",
+ dig=parse(tmp2);
+ );
+ );
+ out="data.frame(";
+ forall(1..(length(nmL)),
+ tmp1=nmL_#;
+ tmp2=column(dL,#);
+ tmp2=apply(tmp2,if(isstring(#),Dq+#+Dq,format(#,dig)));
+ tmp=tmp1+"="+tmp2+",";
+ out=out+tmp;
+ );
+ out=substring(out,0,length(out)-1)+")";
+ out=replace(out,"[","c(");
+ out=replace(out,"]",")");
+);
+////%Dataframe end////
+
+////%MkprecommandR start////
+MkprecommandR():=MkprecommandR(6,"PVOFG"); //180508(9lines)
+MkprecommandR(Arg):=(
+ regional(out,tmp1);
+ if(isstring(Arg),
+ MkprecommandR(6,Arg);
+ ,
+ if(islist(Arg),
+ out=[];
+ forall(Arg,
+ tmp1=Rform(#);
+ out=concat(out,[tmp1,[]]);
+ );
+ out;
+ ,
+ MkprecommandR(Arg,"PVOFG");
+ );
+ );
+);
+MkprecommandR(prec,chstr):=(
+ regional(cmdL,Plist,tmp,tmp1,tmp2);
+ cmdL=[];
+ cmdL=concat(cmdL,["arccos=acos; arcsin=asin; arctan=atan",[]]); //181209
+ if(indexof(chstr,"P")>0,
+ Plist=[];
+ forall(remove(allpoints(),[SW,NE]),
+ tmp=textformat(re(Lcrd(#)),prec);
+ tmp=RSform(tmp);
+ tmp1=#.name;
+ tmp1=tmp1+"="+tmp+";Assignadd('"+tmp1+"',"+tmp1+")";
+ Plist=append(Plist,tmp1);
+ );
+ forall(1..(length(Plist)),
+ cmdL=concat(cmdL,[Plist_#,[]]);
+ );
+ );
+ if(indexof(chstr,"V")>0,
+ tmp2=sort(apply(VLIST,#_1)); // 16.02.03 from
+ tmp=apply(allpoints(),text(#));//18.02.11
+ tmp2=remove(tmp2,tmp);
+ tmp1=[];
+ forall(tmp2,tmp,
+ tmp1=concat(tmp1,select(VLIST,#_1==tmp));
+ );
+ VLIST=tmp1;// 17.09.24from
+ forall(VLIST,
+ tmp=#_1;
+ tmp1=#_2;
+ if(!isstring(tmp1),
+ if(islist(tmp1),
+ tmp2="[";
+ forall(tmp1,
+ tmp2=tmp2+textformat(#,prec)+",";
+ );
+ tmp1=substring(tmp2,0,length(tmp2)-1)+"]";
+ ,
+ tmp1=format(tmp1,prec);
+ );
+ );
+ tmp1=RSform(tmp1);
+ tmp1=tmp+"="+tmp1+";";
+ tmp1=tmp1+"Assignadd('"+tmp+"',"+tmp+")";
+ cmdL=concat(cmdL,[tmp1,[]]);//17.09.24until
+ );
+ );
+ if(indexof(chstr,"O")>0,
+ forall(OutFileList,
+ cmdL=concat(cmdL,["tmp=ReadOutData",[Dq+#+Dq]]);
+ );
+ );
+ if(indexof(chstr,"F")>0,
+ forall(FUNLIST,
+ cmdL=concat(cmdL,[#,[]]);
+ );
+ );
+ if(indexof(chstr,"G")>0,
+ forall(GLIST,
+ if(indexof(#,"ReadOutData")==0, //18.02.12
+ tmp1=Rform(#);
+ cmdL=concat(cmdL,[tmp1,[]]);
+ );
+ );
+ );
+ cmdL;
+);
+////%MkprecommandR end////
+
+////%CalcbyR start////
+CalcbyR(name,cmd):=CalcbyR(name,PathR,cmd,[]);
+CalcbyR(name,Arg1,Arg2):=(
+ if(isstring(Arg1),
+ CalcbyR(name,Arg1,Arg2,[]);
+ ,
+ CalcbyR(name,PathR,Arg1,Arg2);
+ );
+);
+CalcbyR(name,path,cmd,optionorg):=(
+//help:CalcbyR(name,cmd);
+//help:CalcbyR(options=["m/r","Wait=2","Out=y/n","Pre=PVFG"]);
+//help:CalcbyR(options2=["Pre=!G" ]);
+ regional(options,tmp,tmp1,tmp2,tmp3,realL,strL,eqL,
+ cat,dig,prestr,flg,wflg,file,nc,arg,cmdR,cmdlist,wfile,waiting);
+ options=optionorg;
+ tmp=divoptions(options);
+ eqL=tmp_5;
+ realL=tmp_6;
+ strL=tmp_7;
+ dig=5;
+ tmp=cmd_(length(cmd)-1); //181130from
+ if(!isstring(tmp),tmp=text(tmp)); //190109
+ if(indexof(tmp,"=")+indexof(tmp,"::")>0,
+ cat="Y";
+ ,
+ tmp=cmd_(length(cmd));
+ if(length(tmp)>0,
+ cat="Y";
+ ,
+ cat="N";
+ );
+ ); //181130to
+ wfile="";
+ prestr="VF"; //180508,190224
+ waiting=30; //180608
+ nopoint="n"; //190222
+ forall(eqL,
+ tmp=Strsplit(#,"=");
+ tmp1=Toupper(substring(tmp_1,0,1));
+ tmp2=tmp_2;
+ if((tmp1=="C")%(tmp1=="O"),
+ cat=Toupper(substring(tmp2,0,1));
+ options=remove(options,[#]);
+ );
+ if(tmp1=="W",
+ waiting=parse(tmp2);
+ options=remove(options,[#]);
+ );
+ if(tmp1=="P", //180508from
+ tmp2=Toupper(tmp2);
+ if(substring(tmp2,0,1)!="!",
+ prestr=tmp2;
+ ,
+ tmp2=substring(tmp2,1,length(tmp2));
+ forall(1..(length(tmp2)),
+ prestr=replace(prestr,substring(tmp2,#-1,#),"");
+ );
+ );//180508to
+ options=remove(options,[#]);
+ );
+ if(tmp1=="D",
+ dig=parse(tmp2);
+ options=remove(options,[#]);
+ );
+ if(tmp1=="F",
+ wfile=tmp2; //18.02.27
+ options=remove(options,[#]);
+ );
+ if(tmp1=="R",
+ wfile=tmp2; //180227
+ options=remove(options,[#]);
+ );
+ );
+ if(wfile=="",
+ if(cat=="Y",
+ wfile=Fhead+name+".txt";
+ ,
+ wfile="resultR.txt";
+ );
+ );
+ wflg=0;
+ forall(strL,
+ tmp=Toupper(substring(#,0,1));
+ if(tmp=="M",
+ wflg=1;
+ options=remove(options,[#]);
+ );
+ if(tmp=="R",
+ wflg=-1;
+ options=remove(options,[#]);
+ );
+ );
+ if(CONTINUED==0,
+ if((wflg==0) & (cat!="N"), // 16.11.13
+ tmp=load(wfile);
+ if(length(tmp)==0,wflg=1);
+ );
+ );
+ if(length(name)>0,//180412from
+ file=Fhead+name;
+ ,
+ file=Cindyname();
+ );//180412to
+ cmdR=[];
+ cmdR=MkprecommandR(6,prestr);
+ cmdR=concat(cmdR,cmd); //18.01.27to
+ cmdlist=[];
+ if(dig>5, //16.10.28from
+ cmdlist=append(cmdlist,"options(digits="+text(dig+2)+");");
+ ); //16.10.28until
+ forall(1..floor(length(cmdR)/2),nc, //17.05.18
+ tmp1=cmdR_(2*nc-1);
+ tmp1=replace(tmp1,LFmark,""); // 16.06.12
+// if(nc==length(cmdR)/2, //16.10.23from
+// if(indexof(tmp1,"=")==0,tmp1="="+tmp1);//16.12.20
+// ); //16.10.23uptp
+ if(substring(tmp1,0,1)=="=",
+ tmp1=name+tmp1;
+ );
+ tmp2=cmdR_(2*nc); // list of argments
+ tmp3="";
+ forall(tmp2,arg,
+ if(isstring(arg),
+ tmp3=tmp3+replace(arg,"'",Dq)+",";
+ ,
+ if(length(arg)==1,
+ tmp3=tmp3+textformat(arg,dig)+",";
+ ,
+ tmp3=tmp3+"c(";
+ forall(arg,
+ tmp3=tmp3+textformat(#,dig)+",";
+ );
+ tmp3=substring(tmp3,0,length(tmp3)-1)+")"+",";
+ );
+ );
+ );
+ if(length(tmp3)>0,
+ tmp3=substring(tmp3,0,length(tmp3)-1);
+ tmp1=tmp1+"("+tmp3+")";
+ );
+ cmdlist=append(cmdlist,tmp1);
+ );
+ tmp1=cmdlist_(length(cmdlist));
+ if(indexof(tmp1,"=")==0,
+ if(length(name)>0, //180412
+ tmp1=tokenize(tmp1,"::");
+ if(length(tmp1)==1,
+ if(indexof(tmp1_1,"(")==0, //180510from
+ tmp2=name+"="+tmp1_1;
+ ,
+ tmp2=tmp1_1;
+ ); //180510to
+ ,
+ tmp2=name+"=list(";
+ forall(tmp1,
+ tmp2=tmp2+#+",";
+ );
+ tmp2=substring(tmp2,0,length(tmp2)-1)+")"; //180510(moved)
+ );
+ cmdlist_(length(cmdlist))=tmp2;
+ );
+ );
+ if(CONTINUED==1,
+ ComOutList=concat(ComOutList,cmdlist);
+ ,
+ if(cat=="Y", //16.10.23from
+ tmp="sharp=rawToChar(as.raw(35))";
+ cmdlist=append(cmdlist,tmp);
+ tmp="sharps=paste(sharp,sharp,'\n',sep='')";
+ cmdlist=append(cmdlist,tmp);
+ tmp="if(Length("+name+")==0){"+name+"='nodata'}"; //18.01.29
+ cmdlist=append(cmdlist,tmp);
+ cmdlist=append(cmdlist,"if(is.matrix("+name+")){");
+ cmdlist=append(cmdlist," tmp=list()");//18.02.01from
+ cmdlist=append(cmdlist," for(ii in 1:Length("+name+")){");
+ cmdlist=append(cmdlist," tmp=c(tmp,list(Op(ii,"+name+")))");
+ cmdlist=append(cmdlist," }");
+ cmdlist=append(cmdlist," "+name+"=tmp");
+ cmdlist=append(cmdlist,"}");//18.02.01until
+ cmdlist=append(cmdlist,"if(is.list("+name+")){");
+// tmp=" cat(names("+name+"),file='"+wfile+"',sep=',')"; //18.01.27deleted
+// cmdlist=append(cmdlist,tmp);
+// tmp=" cat(sharps,file='"+wfile+"',append=TRUE)";
+// cmdlist=append(cmdlist,tmp);
+ cmdlist=append(cmdlist," for(ii in Looprange(1,length("+name+"))){");
+ cmdlist=append(cmdlist," if(is.list("+name+"[[ii]])){");
+ tmp=" cat('[',file='"+wfile+"',sep='',append=TRUE)";
+ cmdlist=append(cmdlist,tmp);
+ tmp=" cat(sharps,file='"+wfile+"',sep='',append=TRUE)";
+ cmdlist=append(cmdlist,tmp);
+ tmp=" for(jj in Looprange(1,length("+name+"[[ii]]))){";
+ cmdlist=append(cmdlist,tmp);
+ tmp=" cat("+name+"[[ii]][[jj]],file='"+wfile+"',sep=',',append=TRUE)";
+ cmdlist=append(cmdlist,tmp);
+ tmp=" cat(sharps,file='"+wfile+"',append=TRUE)";
+ cmdlist=append(cmdlist,tmp);
+ cmdlsit=append(cmdlist," }");
+ cmdlist=append(cmdlist," }");
+ tmp=" cat(']',file='"+wfile+"',sep=',',append=TRUE)";
+ cmdlist=append(cmdlist,tmp);
+ tmp=" cat(sharps,file='"+wfile+"',append=TRUE)";
+ cmdlist=append(cmdlist,tmp);
+ cmdlist=append(cmdlist," }else{");
+ tmp=" cat("+name+"[[ii]],file='"+wfile+"',";
+ tmp=tmp+"sep=',',append=TRUE)";
+ cmdlist=append(cmdlist,tmp);
+ tmp=" cat(sharps,file='"+wfile+"',append=TRUE)";
+ cmdlist=append(cmdlist,tmp);
+ cmdlist=append(cmdlist," }");
+ cmdlist=append(cmdlist," }");
+ cmdlist=append(cmdlist,"}else{");
+ tmp=" cat("+name+",file='"+wfile+"',sep=',')";
+ cmdlist=append(cmdlist,tmp);
+ tmp=" cat(sharps,file='"+wfile+"',append=TRUE)";
+ cmdlist=append(cmdlist,tmp);
+ cmdlist=append(cmdlist,"}");
+ tmp="cat('////',file='"+wfile+"',sep=',',append=TRUE)";
+ cmdlist=append(cmdlist,tmp);
+ ); //16.10.23until
+ if(cat!="Y", // 16.12.18
+ cmdlist=append(cmdlist,"cat('////',file='"+wfile+"',sep='')");
+ );
+ cmdlist=append(cmdlist,"quit()");
+ if(wflg==0,
+ tmp1=load(file+".r");
+ if(length(tmp1)==0,
+ wflg=1;
+ ,
+ tmp1=tokenize(tmp1,"####"); // 15.09.25 from
+ tmp1=tokenize(tmp1_2,"##");
+ tmp1=tmp1_(1..(length(tmp1)-1));
+ if(length(tmp1)!=length(cmdlist),
+ wflg=1;
+ ,
+ tmp=select(1..length(tmp1),tmp1_#!=cmdlist_#);
+ if(length(tmp)>0, wflg=1);
+ );
+ ); // 15.09.25 to
+ );
+ if(wflg==0,wflg=-1); // 15.10.16
+ if(wflg==1,
+ if(length(wfile)>0, // 15.10.05
+ SCEOUTPUT=openfile(wfile);
+ println(SCEOUTPUT,"");
+ closefile(SCEOUTPUT);
+ );
+ WritetoR(file+".r",cmdlist); //17.10.08
+ SCEOUTPUT=openfile("errormessageR.txt");//18.02.20from
+ println(SCEOUTPUT,"");
+ closefile(SCEOUTPUT);//18.02.20until
+ kcR(PathR,file,concat(options,["m"])); // 15.09.25
+ );
+ flg=0;
+ tmp1=floor(waiting*1000/WaitUnit);
+ repeat(tmp1,
+ if(flg==0,
+ tmp=load(wfile);
+ if(length(tmp)>=4,
+ tmp2=substring(tmp,length(tmp)-4,length(tmp));
+ if(tmp2=="////",
+ tmp=substring(tmp,0,length(tmp)-4);
+ flg=1;
+ tmp2=#*WaitUnit/1000;
+ );
+ ,
+ if(wflg==-1,
+ flg=-1;
+ ,
+ wait(WaitUnit);
+ tmp=load("errormessageR.txt");//18.02.20
+ if(length(tmp)>1,
+ println(tmp);
+ flg=-2;
+ );//18.02.20
+ );
+ );
+ );
+ );
+ if(flg<=0,
+ ErrFlag=1;
+ if(flg==-1,
+ println(wfile+" does not exist");
+ ,
+ if(flg==0,
+ tmp="("+text(waiting)+" s )";
+ println(wfile+" not generated "+tmp);
+ );
+ );
+ ,
+ println(" CalcbyR succeeded "+name+" ("+text(tmp2)+" sec)");
+ if(cat=="Y", // 16.10.29,11.25
+ tmp1=tokenize(tmp,"##"); //16.10.23from
+ tmp1=tmp1_(1..(length(tmp1)-1));
+ tmp2=[];
+ forall(tmp1,tmp3,
+ if(!isstring(tmp3),
+ tmp=format(tmp3,dig);
+ ,
+ if(indexof(tmp3,",")==0,
+ tmp=Dqq(tmp3); //180227
+ ,
+ tmp=tmp3;
+ if(substring(tmp3,0,2)=="c(",
+ tmp=substring(tmp3,2,length(tmp3)-1);
+ );
+ tmp=tokenize(tmp,",");
+ tmp=textformat(tmp,dig);
+ );
+ );
+ tmp2=append(tmp2,tmp);
+ );
+ if(length(tmp2)==1,
+ tmp2=tmp2_1;
+ if(length(tmp2)==1,tmp2=tmp2_1);
+ if(isstring(tmp2),
+ if(indexof(tmp2,"nodata")>0,tmp2="[]"); //180227from
+ tmp2=parse(tmp2);
+ );
+ tmp3=textformat(tmp2,dig);//180227until
+ ,
+ tmp3="";
+ forall(tmp2,
+ if(length(#)==0,
+ tmp3=tmp3+"[],";
+ ,
+ tmp3=tmp3+#+",";
+ );
+ );
+ tmp3="["+substring(tmp3,0,length(tmp3)-1)+"]";
+ tmp3=replace(tmp3,"[,","[");
+ tmp3=replace(tmp3,",]","]");
+ );
+ tmp=name+"="+tmp3+";";//180227//190415
+ parse(tmp);
+ );
+ );
+ );
+);
+////%CalcbyR end////
+
+////%Rfun start////
+Rfun(name,fun,argL):=Rfun(name,fun,argL,[]);//16.10.22
+Rfun(name,fun,argL,optionorg):=(
+//help:Rfun("1","rnorm",[10]);
+//help:Rfun(options=["Disp=y(n)","Pre="]);
+ regional(nm,options,eqL,disp,cmdL,
+ tmp,tmp1,tmp2);
+ nm="R"+name;
+ options=optionorg;
+ tmp=divoptions(options);
+ precise=6;
+ disp=1;
+ pack=[];
+ set=[];
+ add="";
+ eqL=tmp_5;
+ forall(eqL,
+ tmp=indexof(#,"=");
+ tmp1=Toupper(substring(#,0,1)); //181111
+ tmp2=substring(#,tmp,length(#));
+ if(tmp1=="D",
+ tmp=Toupper(substring(tmp2,0,1));
+ if((tmp=="F") % (tmp=="N"),
+ disp=0;
+ );
+ options=remove(options,[#]);
+ );
+ );
+ cmdL=[];
+ cmdL=concat(cmdL,[
+ nm+"="+fun,argL,
+ ]);
+// options=concat(options,["Wait=2"]);
+ options=concat(options,["Wait=2","Cat=y"]); //190109
+ CalcbyR(nm,cmdL,options);
+ if(ErrFlag==0,
+ if(disp==1, // 15.11.24
+ println(nm+" is : ");
+ println(parse(nm));
+ );
+ );
+ parse(nm);
+);
+////%Rfun end////
+
+////%Readcsv start////
+Readcsv(file):=Readcsv(Dirwork,file,[]);
+Readcsv(Arg1,Arg2):=(
+ if(isstring(Arg2),
+ Readcsv(Arg1,Arg2,[]);
+ ,
+ Readcsv(Dirwork,Arg1,Arg2);
+ );
+);
+Readcsv(pathorg,file,optionorg):=(
+// help:Readcsv("ex.csv");
+// help:Readcsv(directory,"ex.csv");
+// help:Readcsv(options=["Head=yes","Sep=-999","Flat=no","Use=R"]);
+ regional(path,fname,fout,options,eqL,header,cmdL,sep,
+ dt,nrow,tmp,tmp1,tmp2,csv,use,flat);
+ options=optionorg;
+ tmp=divoptions(options);
+ eqL=tmp_5;
+ header=1;
+ sep="-999";
+ csv="Y"; // 16.12.12
+ use="R";
+ flat="N";
+ forall(eqL,
+ tmp=indexof(#,"=");
+ tmp1=substring(#,0,tmp-1);
+ tmp2=substring(#,tmp,length(#));
+ tmp=Toupper(substring(tmp1,0,1)); //181111
+ if(tmp=="H",
+ tmp=Toupper(substring(tmp2,0,1));
+ if(tmp=="F" % tmp=="N",
+ header=0;
+ options=remove(options,[#]);
+ );
+ );
+ if(tmp=="S",
+ sep=tmp2;
+ options=remove(options,[#]);
+ );
+ if(tmp=="C",
+ csv=Toupper(substring(tmp2,0,1));
+ options=remove(options,[#]);
+ );
+ if(tmp=="U",
+ use=Toupper(substring(tmp2,0,1));
+ options=remove(options,[#]);
+ );
+ if(tmp=="F",
+ flat=Toupper(substring(tmp2,0,1));
+ options=remove(options,[#]);
+ );
+ );
+ if(flat=="Y",csv="N");
+ sep=","+sep;
+ tmp=indexof(file,".");
+ if(tmp==0,
+ fname=file+".csv";
+ fout=file+"sep.csv";
+ ,
+ fname=file;
+ tmp1=substring(file,0,tmp-1);
+ tmp2=substring(file,tmp-1,length(file));
+ fout=tmp1+"sep"+tmp2;
+ );
+ path=pathorg;
+ if(!isexists(path,fname),
+ println(path+" "+fname+" not found");
+ ,
+ path=replace(path,"\","/");
+ if(use=="S",
+ cmdL=[ // 16.12.20from
+ "cd('"+path+"')",[],
+ "Dt=mgetl('"+fname+"');",[],
+ "cd('"+Dirwork+"')",[],
+ "Dt2=[]",[],
+ "for I=1:size(Dt,1),
+ Tmp=Dt(I,:)+'"+sep+"';
+ Dt2=[Dt2;Tmp];
+ end",[],
+ "mputl(Dt2,'"+fout+"')",[]
+ ];
+ CalcbyS("sep",cmdL,options);
+ ,
+ cmdL=[
+ "setwd",[Dq+path+Dq],
+ "tmp1=readLines",[Dq+fname+Dq,"warn=FALSE"],
+ "fun=function(s) paste(s,"+Dq+sep+Dq+",sep="+Dq+Dq+")",[],
+ "tmp2=sapply(tmp1,fun)",[],
+ "writeLines",["tmp2",Dq+fout+Dq]
+ ];
+ CalcbyR("sep",cmdL,concat(options,["Cat=n"]));
+ ); // 16.12.20until
+ if(ErrFlag==1,
+ println("Readcsv not completed");
+ ,
+ dt=load(fout);
+ dt=tokenize(dt,sep);
+ dt=dt_(1..(length(dt)-1));//16.12.20
+ if(isstring(dt_1),// 17.02.10from
+ if(indexof(dt_1,",")==0,csv="N");
+ ,
+ csv="N";
+ );// 17.02.10until
+ if(csv=="Y",
+ dt=apply(dt,tokenize(#,","));
+ ,
+ dt=apply(dt,[#]);
+ );
+ forall(1..(length(dt)),nrow,
+ tmp1=dt_nrow;
+ tmp2=[];
+ forall(tmp1,
+ if(!isstring(#),
+ tmp=#;
+ ,
+ if(substring(#,0,1)==Dq,
+ tmp=parse(#);
+ ,
+ tmp=#;
+ );
+ );
+ tmp2=append(tmp2,tmp);
+ );
+ dt_nrow=tmp2;
+ );
+ if(header==0,dt=dt_(2..(length(dt))));
+ if(length(dt)==1,
+ dt=dt_1
+ ,
+ if(length(dt_1)==1,
+ dt=apply(dt,#_1);
+ );
+ );
+ dt;
+ );
+ );
+);
+// New readcsv [181125]
+Readcsv(file):=Readcsv(Dirwork,file);
+Readcsv(Arg1,Arg2):=( //190301from
+ if(islist(Arg2),
+ Readcsv(Dirwork,Arg1,Arg2);
+ ,
+ Readcsv(Arg1,Arg2,[]); //190317
+ );
+); //190301from
+Readcsv(path,file,options):=(
+//help:Readcsv("ex.csv");
+//help:Readcsv(directory,"ex.csv");
+//help:Readcsv(options=["Head=no"]);
+ regional(dt,eqL,head,from,end,tmp);
+ tmp=Divoptions(options);
+ eqL=tmp_5;
+ head="n"; from=1; //190125from
+ forall(eqL,
+ tmp=Strsplit(#,"=");
+ if(Toupper(substring(tmp_1,0,1))=="H",
+ head=substring(tmp_2,0,1);
+ );
+ );
+ if(Toupper(head)=="Y",
+ from=2;
+ ); //190125to
+ tmp=file;
+ if(indexof(tmp,".csv")==0,tmp=tmp+".csv"); //190301
+ dt=readfile2str(path,tmp);
+ dt=tokenize(dt,"/LF/");
+ end=length(dt);
+ if(dt_(length(dt))=="",
+ end=end-1;
+ dt=dt_(from..end); //190125
+ );
+ dt=apply(dt,tokenize(#,","));
+ if(length(dt)==1, dt=dt_1); //190125
+ dt;
+);
+////%Readcsv end////
+
+////%Writecsv start////
+Writecsv(nmL,data,file):=Writecsv(nmL,data,file,[]);
+Writecsv(nmL,dataorg,file,optionorg):=(
+//help:Writecsv([],data,"ex.csv");
+//help:Writecsv(["a","b"],data,"ex.csv");
+//help:Writecsv(optins=["Col=1"]);
+ regional(nameL,data,eqL,strL,ncol,nrow,fname,dig,tmp,tmp1,tmp2);
+ ncol=0; // 17.02.09from
+ dig=5;
+ if(isstring(dataorg),data=parse(dataorg),data=dataorg);
+ if(islist(data_1),
+ ncol=length(data_1);
+ data=flatten(data);
+ ); // 17.02.09until
+ options=optionorg;
+ tmp=divoptions(options);
+ eqL=tmp_5;
+ forall(eqL,
+ tmp=indexof(#,"=");
+ tmp1=substring(#,0,tmp-1);
+ tmp2=substring(#,tmp,length(#));
+ if(Toupper(substring(tmp1,0,1))=="C",
+ ncol=parse(tmp2);
+ options=remove(options,[#]);
+ );
+ );
+ if(indexof(file,".")==0,fname=file+".csv",fname=file);
+ if(ncol==0,ncol=max(1,length(nmL)));
+ tmp1=mod(length(data),ncol);
+ if(tmp1>0,
+ tmp=apply(1..(ncol-tmp1),-1);
+ data=concat(data,tmp);
+ );
+ nrow=length(data)/ncol;
+ if(length(nmL)<ncol,
+ nameL=apply(1..ncol,"c"+text(#));
+// tmp=nameL_length(nameL)+"##";//17.02.09
+ tmp=nameL_(length(nameL));//17.02.09
+ nameL_(length(nameL))=tmp;
+ ,
+ nameL=nmL;
+ );
+ SCEOUTPUT=openfile(fname);
+ tmp=text(nameL);
+ println(SCEOUTPUT,substring(tmp,1,length(tmp)-1));
+ forall(1..nrow,
+ tmp1=data_(((#-1)*ncol+1)..(#*ncol));
+ tmp2="";
+ forall(tmp1,
+ tmp2=tmp2+textformat(#,5)+",";
+ );
+ tmp2=substring(tmp2,0,length(tmp2)-1);
+ println(SCEOUTPUT,tmp2);
+ );
+ closefile(SCEOUTPUT);
+);
+////%Writecsv end////
+
+////%HatchdataR start////
+HatchdataR(nm,iostr,pltlist):=HatchdataR(nm,iostr,pltlist,[]);
+HatchdataR(nm,iostr,pltlist,optionorg):=( //17.09.18
+//help:HatchdataR("1","ii",[["gr1"],["gr2","n"]]);
+//help:HatchdataR(options=["Wait=5"]);
+ regional(options,name,eqL,reL,strL,
+ plt,fname,options,tmp,tmp1,tmp2,tmp3,flg,wflg,waiting);
+ name="ha"+nm;
+ fname=Fhead+name+".txt";
+ options=optionorg;
+ tmp=Divoptions(options);
+ eqL=tmp_5;
+ reL=tmp_6;
+ strL=tmp_7;
+ waiting=5;
+ forall(eqL,
+ tmp=indexof(#,"=");
+ tmp1=Toupper(substring(#,0,1));
+ tmp2=substring(#,tmp,length(#));
+ if(tmp1=="W",
+ waiting=parse(tmp2);
+ options=remove(options,[#]);
+ );
+ );
+ wflg=0;
+ forall(strL,
+ tmp=Toupper(substring(#,0,1));
+ if(length(#)==0,
+ options=remove(options,[#]);
+ );
+ if(tmp=="M",
+ wflg=1;
+ options=remove(options,[#]);
+ );
+ if(tmp=="R",
+ wflg=-1;
+ options=remove(options,[#]);
+ );
+ );
+ if(islist(iostr),
+ tmp1=text(apply(iostr,Dq+#+Dq));
+ tmp1=replace(tmp1,"[","list("); //16.02.14
+ tmp1=replace(tmp1,"]",")"); //16.02.14
+ ,
+ tmp1=Dq+iostr+Dq;
+ );
+ if(!islist(pltlist_1),
+ tmp2=apply(pltlist,if(length(#)==1,Dq+#+Dq,Chunderscore(#)));
+ tmp2=text(tmp2);
+ tmp2="list("+substring(tmp2,1,length(tmp2)-1)+"),";
+ ,
+ tmp2="";
+ forall(pltlist,plt,
+ tmp=apply(plt,if(length(#)==1,Dq+#+Dq,Chunderscore(#))); // 16.04.06
+ tmp=text(tmp);
+ tmp="list("+substring(tmp,1,length(tmp)-1)+")";
+ tmp2=tmp2+tmp+",";
+ );
+ );
+ cmdL=MkprecommandR();
+ tmp2=substring(tmp2,0,length(tmp2)-1);
+ tmp=[tmp1,tmp2];
+ tmp=concat(tmp,reL);
+ cmdL=concat(cmdL,[
+ "Setscaling",[SCALEX,SCALEY], //181020
+ "Setunitlen",[Dq+ULEN+Dq],
+ name+"=Hatchdata",tmp, //16.12.23
+ "WriteOutData",[Dq+fname+Dq,Dq+name+Dq,name]
+ ]);
+ options=append(options,"Wait="+text(waiting));
+ if(wflg==1,options=concat(options,["m"]));
+ if(wflg==-1,options=concat(options,["r"]));
+ options=append(options,"Cat=no");
+ if(ErrFlag==0,
+ CalcbyR(name,cmdL,options);
+ );
+ if(ErrFlag==1,
+ err("Hatchdata not completed");
+ ,
+ if(ErrFlag==0,
+ ReadOutData(fname);
+ Extractdata(name,options);
+ );
+ );
+);
+////%HatchdataR end////
+
+////%PlotdataR start////
+PlotdataR(name1,func,var):=PlotdataR(name1,PathR,func,var);
+PlotdataR(name1,Arg1,Arg2,Arg3):=(
+ if(islist(Arg3),
+ PlotdataR(name1,PathR,Arg1,Arg2,Arg3);
+ ,
+ PlotdataR(name1,Arg1,Arg2,Arg3,[]);
+ );
+);
+PlotdataR(name1,path,func,variable,optionorg):=(
+//help:PlotdataR("1","dnorm(x)","x");
+//help:PlotdataR(options=["m/r","Num=50","Wait=10"]);
+ regional(options,tmp,tmp1,tmp2,tmp3,name,varstr,flg,Num,
+ Ltype,Noflg,eqL,strL,flg,outreg,filename,wfile,cmdL,waiting);
+ name="grR"+name1;
+ options=optionorg;
+ tmp=Divoptions(options);
+ eqL=tmp_5;
+ strL=tmp_7;
+ Num=50;
+ waiting=5;
+ outreg=0;
+ flg=0;
+ forall(eqL,
+ tmp=indexof(#,"=");
+ tmp1=substring(#,tmp,length(#));
+ if(Toupper(substring(#,0,1))=="N",
+ Num=parse(tmp1);
+ options=remove(options,[#]);
+ );
+ if(Toupper(substring(#,0,1))=="W",
+ waiting=parse(tmp1);
+ options=remove(options,[#]);
+ );
+ if(Toupper(substring(#,0,1))=="O",
+ tmp=Toupper(substring(tmp1,0,1));
+ if(tmp=="T" % tmp=="Y", outreg=1);
+ options=remove(options,[#]);
+ );
+ );
+ tmp=indexof(variable,"=");
+ if(tmp>0,
+ varstr=variable;
+ ,
+ varstr=variable+"="+textformat([XMIN,XMAX],5);
+ );
+ varstr=replace(varstr,"[","c(");
+ varstr=replace(varstr,"]",")");
+ filename=Fhead+name+".r";
+ wfile=Fhead+name+".txt";
+ cmdL=MkprecommandR();
+ cmdL=concat(cmdL,[
+ name+"=Plotdata",[Dq+func+Dq,Dq+varstr+Dq,Dq+"Num="+text(Num)+Dq],
+ "WriteOutData",[Dq+wfile+Dq,Dq+name+Dq,name]
+ ]);
+ if(ErrFlag==0,
+ CalcbyR(name,cmdL,concat(options,["Cat=middle","Wait="+text(waiting)]));
+ );
+ if(ErrFlag==1,
+ println("PlotdataR not completed");
+ ,
+ if(outreg==1,
+ OutFileList=remove(OutFileList,[wfile]);
+ OutFileList=append(OutFileList,wfile);
+ );
+ ReadOutData(wfile);
+ Extractdata(name,options);
+ tmp=parse(name);
+ tmp1=name+"="+textformat(tmp,5)+";";
+ parse(tmp1);
+ tmp2=apply(tmp,Lcrd(#));
+ tmp2;
+ );
+);
+////%PlotdataR end////
+
+////%PlotdiscR start////
+PlotdiscR(nm,fun,varrng):=PlotdiscR(nm,fun,varrng,[]);
+PlotdiscR(nm,fun,varrng,options):=(
+//help:PlotdiscR("1","dbinom(k,10,0.4)","k=[0,10]");
+ regional(name,pb,cmdL,var,range,tmp,tmp1,tmp2,wfile);
+ name="grd"+nm;
+ tmp=indexof(varrng,"=");
+ var=substring(varrng,0,tmp-1);
+ range=parse(substring(varrng,tmp,length(varrng)));
+ if(length(range)==2,
+ range=(range_1)..(range_2);
+ );
+ cmdL=[
+ "fnb=function("+var+") "+fun,[],
+ name+"=sapply",[range,"fnb"]
+ ];
+ wfile=Fhead+name+".txt";
+ if(ErrFlag==0,
+ CalcbyR(name,cmdL,options);
+ );
+ if(ErrFlag==1,
+ println("PlotdiscR not completed");
+ ,
+ tmp1=load(wfile);
+ tmp1=substring(tmp1,0,length(tmp1)-4);
+ tmp1=replace(tmp1,"##","");
+ pb=tokenize(tmp1,",");
+ tmp=apply(range,[#,pb_(#+1)]);
+ Listplot("-"+name,tmp,options); //190424
+ );
+);
+////%PlotdiscR end////
+
+////%Boxplot start////
+Boxplot(nm,dataorg,ypos,dy):=Boxplot(nm,dataorg,ypos,dy,[]);
+Boxplot(nm,dataorg,ypos,dy,optionorg):=(
+//help:Boxplot("1",dt,2,1/2,[""]);
+ regional(options,name,data,bp,cmdL,waiting,tmp,tmp1,tmp2,tmp3,tmp4,
+ out,eqL,strL,pstr,ext,file,flg,wrflg);
+ name="bp"+nm;
+ options=optionorg;
+ tmp=divoptions(options);
+ eqL=tmp_5;
+ strL=tmp_7;
+ waiting=10;
+ wrflg=0;
+ forall(eqL,
+ tmp=indexof(#,"=");
+ tmp1=substring(#,0,tmp-1);
+ tmp2=substring(#,tmp,length(#));
+ if(Toupper(substring(tmp1,0,1))=="W",
+ waiting=parse(tmp2);
+ options=remove(options,[#]);
+ );
+ );
+ forall(strL,
+ tmp=Toupper(substring(#,0,1));
+ if(tmp=="R",
+ wrflg=-1;
+ options=remove(options,[#]);
+ );
+ if(tmp=="M",
+ wrflg=1;
+ options=remove(options,[#]);
+ );
+ );
+ data=dataorg;
+ if(isstring(data),
+ if(indexof(data,".")==0,data=data+".dat");
+ if(iswindows(), // 15.11.10
+ data=replace(data,"/","\");
+ flg="\";
+ ,
+ data=replace(data,"\","/");
+ flg="/";
+ );
+ forall(reverse(1..length(data)),
+ if(length(flg)>0,
+ tmp=substring(data,#-1,#);
+ if(tmp==flg,
+ tmp3=substring(data,0,#-1);
+ tmp4=substring(data,#,length(data));
+ if(indexof(tmp3,":")==0, // 11.11.10
+ tmp=substring(tmp3,0,1);
+ if(tmp!=flg,
+ tmp3=Dirwork+flg+tmp3;
+ );
+ );
+ flg="";
+ );
+ );
+ );
+ if(length(flg)>0,
+ tmp3=Dirwork; //15.11.10
+ tmp4=data;
+ );
+ setdirectory(tmp3);
+ tmp=load(tmp4);
+ if(length(tmp)==0, ErrFlag=2); // 15.11.07 until
+ setdirectory(Dirwork);
+ ,
+ file=Fhead+name+".dat";
+ tmp=load(file);
+ if(length(tmp)>0,
+ tmp1=tokenize(tmp,",");
+ tmp1=tmp1_(1..(length(tmp1)-1));
+ ,
+ tmp1=[];
+ );
+ flg=0;
+ if(length(tmp1)==length(data),
+ tmp=tmp1-data;
+ tmp=select(tmp,#!=0);
+ if(length(tmp)>0,flg=1);
+ ,
+ flg=1;
+ );
+ if(flg==1,
+ SCEOUTPUT=openfile(file);
+ forall(data,
+ print(SCEOUTPUT,textformat(#,5)+",");
+ );
+ println(SCEOUTPUT,"////");
+ closefile(SCEOUTPUT);
+// wait(WaitUnit);
+ );
+ data=file;
+ );
+ data=replace(data,"\","/");
+ cmdL=[
+ "tmp=readLines",[Dq+data+Dq, "warn=FALSE"],
+ "tmp=substring",["tmp",1,"nchar(tmp)-4"],
+ "data=strsplit",["tmp",Dq+","+Dq,"fix=TRUE"],
+ "data=data[[1]]",[],
+ "fun=function(s) eval(parse(text=s))",[],
+ "data=sapply",["data","fun"],
+ "data=data[!is.na(data)]",[],
+ "tmp=boxplot",["data","plot=FALSE"],
+ "tmp1=tmp$stat",[],
+ "tmp2=tmp$out",[],
+ name+"=c(tmp1,tmp2)",[]
+ ];
+ file=Fhead+name+".txt";
+ options=append(options,"Wait="+text(waiting));
+ if(wrflg==1,options=append(options,"m"));
+ if(wrflg==-1,options=append(options,"r"));
+ if(ErrFlag==0,
+ CalcbyR(name,cmdL,options);
+ );
+ if(ErrFlag>0,
+ if(ErrFlag==1,println("Boxplot not completed"));
+ if(ErrFlag==2,println(Dq+data+Dq+" not found"));
+ ,
+ bp=parse(name);
+ pstr="[";
+ tmp1=[bp_1,ypos-dy/2];
+ tmp2=[bp_1,ypos+dy/2];
+ Listplot(name+text(1),[tmp1,tmp2],concat(options,["Msg=no"]));
+ pstr=pstr+Dq+"sg"+name+text(1)+Dq+",";
+ tmp1=[bp_2,ypos-dy];
+ tmp2=[bp_2,ypos+dy];
+ tmp3=[bp_4,ypos+dy];
+ tmp4=[bp_4,ypos-dy];
+ Listplot(name+text(2),[tmp1,tmp2,tmp3,tmp4,tmp1],append(options,"Msg=no"));
+ pstr=pstr+Dq+"sg"+name+text(2)+Dq+",";
+ tmp1=[bp_5,ypos-dy/2];
+ tmp2=[bp_5,ypos+dy/2];
+ Listplot(name+text(3),[tmp1,tmp2],append(options,"Msg=no"));
+ pstr=pstr+Dq+"sg"+name+text(3)+Dq+",";
+ tmp1=[bp_3,ypos-dy];
+ tmp2=[bp_3,ypos+dy];
+ Listplot(name+text(4),[tmp1,tmp2],concat(options,["dr,2","Msg=no"]));
+ pstr=pstr+Dq+"sg"+name+text(4)+Dq+",";
+ tmp1=[bp_1,ypos];
+ tmp2=[bp_2,ypos];
+ Listplot(name+text(5),[tmp1,tmp2],concat(options,["da","Msg=no"]));
+ pstr=pstr+Dq+"sg"+name+text(5)+Dq+",";
+ tmp1=[bp_4,ypos];
+ tmp2=[bp_5,ypos];
+ Listplot(name+text(6),[tmp1,tmp2],concat(options,["da","Msg=no"]));
+ pstr=pstr+Dq+"sg"+name+text(6)+Dq+",";
+ out=bp_(6..length(bp));
+ if(length(out)>0,
+ out=apply(out,[#,ypos]);
+ Pointdata(name+text(1),out,concat(options,[0,"Size=2","Inside=white"])); //190125
+ );
+ pstr=substring(pstr,0,length(pstr)-1)+"]";
+ println("generate totally "+name);
+ tmp=name+"="+pstr;
+ [bp_(1..5),out];
+ );
+);
+////%Boxplot end////
+
+////%Histplot start//
+Histplot(nm,dataorg):=Histplot(nm,dataorg,[]);
+Histplot(nm,dataorg,optionorg):=(
+//help:Histplot("1",data(fillename));
+//help:Histplot(options=["Breaks=","Den=no","Rel=no"]);
+ regional(options,name,data,waiting,hp,cmdL,tmp,tmp1,tmp2,tmp3,tmp4,
+ out,eqL,strL,breaks,bdata,cdata,pstr,file,flg,rwflg,density,relative);
+ name="hp"+nm;
+ options=optionorg;
+ tmp=divoptions(options);
+ eqL=tmp_5;
+ strL=tmp_7;
+ breaks = "breaks="+Dq+"Sturges"+Dq;
+ density=0;
+ relative=0;
+ waiting=10; //190125
+ forall(eqL,
+ tmp=Strsplit(#,"=");
+ tmp1=Toupper(substring(tmp_1,0,1));
+ if(tmp1=="B",
+ if(substring(tmp_2,0,1)=="[", // 190226from
+ tmp1=RSform(tmp_2);
+ ,
+ tmp1=tmp_2;
+ );// 190226to
+ breaks="breaks="+tmp1;
+ options=remove(options,[#]);
+ );
+ if(Toupper(substring(#,0,1))=="D",
+ tmp2=Toupper(substring(tmp1,0,1));
+ if(tmp2=="T" % tmp2=="Y",
+ density=1;
+ );
+ options=remove(options,[#]);
+ );
+ if(Toupper(substring(#,0,1))=="R",
+ tmp2=Toupper(substring(tmp1,0,1));
+ if(tmp2=="T" % tmp2=="Y",
+ relative=1;
+ );
+ options=remove(options,[#]);
+ );
+ if(Toupper(substring(#,0,1))=="W",
+ waiting=parse(tmp1);
+ options=remove(options,[#]);
+ );
+ );
+ wrflg=0;
+ forall(strL,
+ tmp=Toupper(substring(#,0,1));
+ if(tmp=="R",
+ wrflg=-1;
+ options=remove(options,[#]);
+ );
+ if(tmp=="M",
+ wrflg=1;
+ options=remove(options,[#]);
+ );
+ );
+ data=dataorg;
+ if(isstring(data),
+ if(indexof(data,".")==0,data=data+".csv");
+ if(iswindows(), // 15.11.10
+ data=replace(data,"/","\");
+ flg="\";
+ ,
+ data=replace(data,"\","/");
+ flg="/";
+ );
+ forall(reverse(1..length(data)),
+ if(length(flg)>0,
+ tmp=substring(data,#-1,#);
+ if(tmp==flg,
+ tmp3=substring(data,0,#-1);
+ tmp4=substring(data,#,length(data));
+ if(indexof(tmp3,":")==0, // 11.11.10
+ tmp=substring(tmp3,0,1);
+ if(tmp!=flg,
+ tmp3=Dirwork+flg+tmp3;
+ );
+ );
+ flg="";
+ );
+ );
+ );
+ if(length(flg)>0,
+ tmp3=Dirwork; //15.11.10
+ tmp4=data;
+ );
+ setdirectory(tmp3);
+ tmp=load(tmp4);
+ if(length(tmp)==0, ErrFlag=2); // 15.11.07 until
+ setdirectory(Dirwork);
+ ,
+ file=Fhead+name+".dat";
+ tmp=load(file);
+ if(length(tmp)>0,
+ tmp1=tokenize(tmp,",");
+ tmp1=tmp1_(1..(length(tmp1)-1));
+ ,
+ tmp1=[];
+ );
+ flg=0;
+ if(length(tmp1)==length(data),
+ tmp=tmp1-data;
+ tmp=select(tmp,#!=0);
+ if(length(tmp)>0,flg=1);
+ ,
+ flg=1;
+ );
+ if(flg==1,
+ SCEOUTPUT=openfile(file);
+ forall(data,
+ print(SCEOUTPUT,textformat(#,5)+",");
+ );
+ println(SCEOUTPUT,"////");
+ closefile(SCEOUTPUT);
+// wait(WaitUnit);
+ );
+ data=file;
+ );
+ data=replace(data,"\","/");
+ cmdL=[
+ "tmp=readLines",[Dq+data+Dq, "warn=FALSE"],
+ "tmp=substring",["tmp",1,"nchar(tmp)-4"],
+ "data=strsplit",["tmp",Dq+","+Dq,"fix=TRUE"],
+ "data=data[[1]]",[],
+ "fun=function(s) eval(parse(text=s))",[],
+ "data=sapply",["data","fun"],
+ "data=data[!is.na(data)]",[],
+ "tmp=hist",["data","plot=FALSE",breaks],
+ "tmp1=tmp$breaks",[],
+ "tmp2=tmp$count",[],
+ "tmp3=tmp$density",[],
+ name+"=c(tmp1,tmp2,tmp3)",[]
+ ];
+ file=Fhead+name+".txt";
+ options=append(options,"Wait="+text(waiting));
+ if(wrflg==1,options=append(options,"m"));
+ if(wrflg==-1,options=append(options,"r"));
+ if(ErrFlag==0,
+ CalcbyR(name,cmdL,options);
+ );
+ if(ErrFlag>0,
+ if(ErrFlag==1,println("Histplot not completed"));
+ if(ErrFlag==2,println(Dq+data+Dq+" not found"));
+ ,
+// tmp=load(file);
+// tmp=replace(tmp,"/","");
+// tmp=tokenize(tmp,",");
+// tmp=name+"="+textformat(tmp,5)+";";
+// parse(tmp);
+ hp=parse(name);
+ tmp1=(length(hp)-1)/3+1;
+ tmp2=tmp1+(length(hp)-1)/3;
+ bdata=hp_(1..tmp1);
+ if(density==0,
+ cdata=hp_((tmp1+1)..tmp2);
+ ,
+ cdata=hp_((tmp2+1)..length(hp));
+ );
+ if(relative==1,
+ cdata=cdata/sum(cdata);
+ );
+ options=append(options,"Msg=no"); // 15.10.03
+ pstr="[";
+ forall(1..length(cdata),
+ tmp1=[bdata_#,0];
+ tmp2=[bdata_#,cdata_#];
+ tmp3=[bdata_(#+1),cdata_#];
+ tmp4=[bdata_(#+1),0];
+ Listplot(name+text(#),[tmp1,tmp2,tmp3,tmp4,tmp1],options);
+ pstr=pstr+Dq+"sg"+name+text(#)+Dq+",";
+ );
+ pstr=substring(pstr,0,length(pstr)-1)+"]";
+ println("generate totally "+name);
+ tmp=name+"="+pstr+";"; //190415
+ parse(tmp);
+ [bdata,cdata];
+ );
+);
+////%Histplot end//
+
+////%Scatterplot start////
+Scatterplot(nm,file):=Scatterplot(nm,file,[],[]);
+Scatterplot(nm,file,options):=Scatterplot(nm,file,options,[]);
+Scatterplot(nm,file,optionorg,optionsreg):=(
+//help:Scatterplot("1",(path+)filename);
+//help:Scatterplot("2",ptlist,["Size=2"],["da","Color=blue"]);
+//help:Scatterplot("3",ptlist,["Reg=n"]);
+//help:Scatterplot(options=["Reg=n","Size=3","Color="]);
+//help:Scatterplot(options1=["Reg=y(n)",pointstyle]);
+//help:Scatterplot(options2=[position([]), linestyle]);
+ regional(tmp,tmp1,tmp2,fname,name,reg,eqL,strL,cdysize,
+ options,dtx,dty,nn,mx,my,sx,sy,sxy,rr,aa,bb,size,pos);
+ name="sc"+nm;
+ options=optionorg;
+ tmp=divoptions(options);
+ eqL=tmp_5;
+ options=remove(options,tmp_6);
+ strL=tmp_7; //181013(2lines)
+ options=remove(options,strL);
+ size=3;
+ reg="y";
+ forall(eqL,
+ tmp=indexof(#,"=");
+ tmp1=Toupper(substring(#,0,1));
+ tmp2=substring(#,tmp,length(#));
+ if(tmp1=="R",
+ reg=substring(tmp2,0,1);
+ options=remove(options,[#]);
+ );
+ if(tmp1=="S",
+ size=parse(tmp2);
+ options=remove(options,[#]);
+ options=append(options,"Size="+text(size));//181013
+ );
+ );
+ if(isstring(file), //181013
+ if(indexof(file,".")==0,
+ fname=file+".csv";
+ ,
+ fname=file;
+ );
+ tmp=Readcsv(fname,strL);//181013from
+ ,
+ tmp=file;
+ );
+ parse("rc"+nm+"="+tmp+";"); //181013to //190415
+ Pointdata(name,parse("rc"+nm),options);
+ tmp=parse("rc"+nm);
+ dtx=apply(tmp,#_1);
+ dty=apply(tmp,#_2);
+ nn=length(dtx);
+ mx=sum(dtx)/nn;
+ my=sum(dty)/nn;
+ sx=sqrt(dtx*dtx/nn-mx^2);
+ sy=sqrt(dty*dty/nn-my^2);
+ sxy=dtx*dty/nn-mx*my;
+ rr=sxy/sx/sy;
+ aa=sxy/sx^2;
+ bb=my-aa*mx;
+ tmp1=optionsreg;
+ tmp=divoptions(tmp1);
+ reL=tmp_6; //181013(2lines)
+ tmp1=remove(tmp1,reL);
+ tmp1=append(tmp1,"Num=1");
+ pos=[];
+ if(length(reL)>0,
+ pos=reL_1;
+ );
+ tmp=Assign("a*x+b",["a",aa,"b",bb]);
+ if(reg!="n",
+ Plotdata(name,tmp,"x",tmp1);
+ );
+ if(length(pos)>0, //181013from
+ tmp="r="+textformat(rr,3)+",\ y=";
+ tmp=tmp+textformat(aa,3)+"x";
+ if(bb>0,tmp=tmp+"+",tmp=tmp+"-");
+ tmp=tmp+textformat(abs(bb),3);
+ Expr([pos,"e",tmp]); //181013to
+ );
+ [mx,my,sx,sy,sxy,rr,bb,aa];
+);
+////%Scatterplot end////
+
+////%Rulerscale start////
+Rulerscale(pt,hscale,vscale):=Rulerscale(pt,hscale,vscale,0.1,[]);//180722from
+Rulerscale(Arg1,Arg2,Arg3,Arg4):=(
+ if(!islist(Arg4),
+ Rulerscale(Arg1,Arg2,Arg3,Arg4,[]);
+ ,
+ Rulerscale(Arg1,Arg2,Arg3,0.2,Arg4);
+ );
+);//180722to
+Rulerscale(pt,hscale,vscale,tick,options):=(//180722
+//help:Rulerscale(A,["r",0,5,1],["s2",0,2,4]);
+//help:Rulerscale(A,["r",0,5,1],["f",10,"a",20,"w2","b"]);
+//help:Rulerscale(A,["r",0,5,1],["r",0,10,1],0.2);
+ regional(pA,pos,mrk,dir,mag,tmp,tmp1,tmp2,tmp3);
+ pA=Lcrd(pt);
+ if(length(hscale)>0,
+ pos=[]; mrk=[]; dir=[];
+ tmp=Toupper(substring(hscale_1,0,1));
+ if(tmp=="R" % tmp=="F",
+ if(tmp=="R",
+ dir="s2";
+ tmp1=hscale_2;
+ tmp2=hscale_3;
+ tmp3=hscale_4;
+ if(length(hscale)>4,mag=hscale_5,mag=1); //181014
+ tmp=floor((tmp2-tmp1)/tmp3);
+ pos=apply(0..tmp,tmp1+#*tmp3);//181014
+ mrk=apply(pos,text(#*mag));
+ dir=apply(1..length(pos),"s2");
+ ,
+ forall(2..(length(hscale)-2),
+ tmp1=hscale_(#);
+ tmp2=hscale_(#+1);
+ tmp3=hscale_(#+2);
+ if(isreal(tmp1),
+ pos=append(pos,tmp1);
+ if(isstring(tmp3),
+ dir=append(dir,tmp2);
+ mrk=append(mrk,tmp3);
+ ,
+ dir=append(dir,"s2");
+ mrk=append(mrk,tmp2);
+ );
+ );
+ );
+ if(isreal(tmp2),
+ pos=append(pos,tmp2);
+ dir=append(dir,"s2");
+ mrk=append(mrk,tmp3);
+ );
+ );
+ ,
+ pos=hscale_(2..length(hscale));
+ dir=apply(pos,"s2");
+ mrk=apply(pos,text(#));
+ );
+ pos=apply(pos,[#,pA_2]);
+ forall(1..length(pos),
+ Expr([pos_#,dir_#,mrk_#],options);
+ tmp1=pos_#;
+ tmp2=pos_#-Unscaling([0,tick]); //181017
+ Listplot("rsh"+text(#),[tmp1,tmp2],concat(options,["Msg=no"]));
+ );
+ );
+ if(length(vscale)>0,
+ pos=[]; mrk=[]; dir=[];
+ tmp=Toupper(substring(vscale_1,0,1));
+ if(tmp=="R" % tmp=="F",
+ if(tmp=="R",
+ dir="w2";
+ tmp1=vscale_2;
+ tmp2=vscale_3;
+ tmp3=vscale_4;
+ if(length(vscale)>4,mag=vscale_5,mag=1); //181014
+ tmp=floor((tmp2-tmp1)/tmp3);
+ pos=apply(0..tmp,tmp1+#*tmp3);
+ mrk=apply(pos,text(#*mag)); //181014
+ dir=apply(1..length(pos),"w2");
+ ,
+ forall(2..(length(vscale)-2),
+ tmp1=vscale_(#);
+ tmp2=vscale_(#+1);
+ tmp3=vscale_(#+2);
+ if(isreal(tmp1),
+ pos=append(pos,tmp1);
+ if(isstring(tmp3),
+ dir=append(dir,tmp2);
+ mrk=append(mrk,tmp3);
+ ,
+ dir=append(dir,"w2");
+ mrk=append(mrk,tmp2);
+ );
+ );
+ );
+ if(isreal(tmp2),
+ pos=append(pos,tmp2);
+ dir=append(dir,"w2");
+ mrk=append(mrk,tmp3);
+ );
+ );
+ ,
+ pos=vscale_(2..length(vscale));
+ dir=apply(pos,"w1");
+ mrk=apply(pos,text(#));
+ );
+ pos=apply(pos,[pA_1,#]);
+ forall(1..length(pos),
+ Expr([pos_#,dir_#,mrk_#],options);
+ tmp1=pos_#;
+ tmp2=pos_#-Unscaling([tick,0]); //181017
+ Listplot("rsv"+text(#),[tmp1,tmp2],concat(options,["Msg=no"]));
+ );
+ );
+);
+////%Rulerscale end////
+
+MkprecommandS():=MkprecommandS(6);
+MkprecommandS(prec):=(
+ regional(cmdL,Plist,Pnamelist,Pvaluelist,tmp,tmp1,tmp2);
+ cmdL=[];
+ Plist=[];
+ Pnamelist=[];
+ Pvaluelist=[];
+ forall(remove(allpoints(),[SW,NE]),
+ tmp=Lcrd(#);
+ tmp1=format(re(tmp_1),prec);// 15.02.05
+ tmp2=format(re(tmp_2),prec);
+ tmp="["+tmp1+","+tmp2+"]";
+ Plist=append(Plist,#.name+"="+tmp);
+ Pnamelist=append(Pnamelist,#.name);
+ Pvaluelist=append(Pvaluelist,tmp);
+ );
+ forall(1..length(Plist),
+ cmdL=concat(cmdL,[Plist_#,[]]);
+ cmdL=concat(cmdL,["Assignrep('"+Pnamelist_#+"',"+Pvaluelist_#+")",[]]);
+ );
+ tmp2=sort(apply(VLIST,#_1)); // 16.02.03 from
+ tmp1=[];
+ forall(tmp2,tmp,
+ tmp1=concat(tmp1,select(VLIST,#_1==tmp));
+ );
+ VLIST=tmp1;// 16.02.03 until
+ forall(VLIST,
+ tmp=Sciform(#_1);
+ tmp1=#_2; // 15.02.06
+ if(!isstring(tmp1),
+ if(islist(tmp1),
+ if(!isstring(tmp1_1), // 16.11.14
+ tmp2="[";
+ forall(tmp1,
+ if(abs(#)<10^(-prec), // 16.01.30
+ tmp2=tmp2+"0,";
+ ,
+ tmp2=tmp2+format(#,prec)+",";
+ );
+ );
+ tmp1=substring(tmp2,0,length(tmp2)-1)+"]";
+ ,
+ tmp2="list("; // 16.11.14from
+ forall(tmp1,
+ tmp2=tmp2+#+",";
+ );
+ tmp1=substring(tmp2,0,length(tmp2)-1)+")";
+ ); // 16.11.14until
+ ,
+ tmp1=format(tmp1,prec);
+ );
+ );
+ cmdL=concat(cmdL,[tmp+"evstr('"+tmp1+"')",[]]);
+ tmp=substring(tmp,0,length(tmp)-1);
+ cmdL=concat(cmdL,["Assignrep('"+tmp+"',"+tmp1+")",[]]); // 15.01.27
+ );
+ forall(OutFileList,
+ tmp=["tmp=ReadOutData",[Dq+#+Dq],
+ "if length(tmp(1))>8,execstr(tmp),end",[]];
+ cmdL=concat(cmdL,tmp);
+ );
+ forall(FUNLIST, // 16.02.17 from
+ cmdL=concat(cmdL,[#,[]]);
+ ); // 16.02.17 until
+ forall(GLIST,
+ tmp1=Sciform(#);
+ cmdL=concat(cmdL,[tmp1,[]]);
+ );
+ cmdL;
+);
+
+PlotdataS(name1,func,var):=PlotdataS(name1,func,var,[]);
+PlotdataS(nm,fun,variable,optionorg):=(
+// help:PlotdataS("1","besselj(1,x)","x");
+// help:PlotdataS(options=["m/r","Num=50","Wait=5","Mx=no"]);
+ regional(options,name,varstr,Num,waiting,mxcheck,outreg,
+ eqL,strL,fname,tmp,tmp1,tmp2,tmp3,cmdL,flg,wflg);
+ name="grsc"+nm;
+ fname=Fhead+name+".txt";
+ options=optionorg;
+ tmp=Divoptions(options);
+ eqL=tmp_5;
+ strL=tmp_7;
+ Num=50;
+ waiting=5;
+ mxcheck=0; // 16.03.02
+ outreg=0;
+ flg=0;
+ forall(eqL,
+ tmp=indexof(#,"=");
+ tmp1=Toupper(substring(#,0,1));
+ tmp2=substring(#,tmp,length(#));
+ if(tmp1=="N",
+ Num=parse(tmp2);
+ options=remove(options,[#]);
+ );
+ if(tmp1=="W",
+ waiting=parse(tmp2);
+ options=remove(options,[#]);
+ );
+ if(tmp1=="O",
+ tmp=Toupper(substring(tmp2,0,1));
+ if(tmp=="T" % tmp=="Y", outreg=1);
+ options=remove(options,[#]);
+ );
+ if(tmp1=="M",
+ tmp=Toupper(substring(tmp2,0,1));
+ if(tmp=="T" % tmp=="Y", mxcheck=1);
+ options=remove(options,[#]);
+ );
+ );
+ wflg=0;
+ forall(strL,
+ tmp=Toupper(substring(#,0,1));
+ if(length(#)==0,
+ options=remove(options,[#]);
+ );
+ if(tmp=="M",
+ wflg=1;
+ options=remove(options,[#]);
+ );
+ if(tmp=="R",
+ wflg=-1;
+ options=remove(options,[#]);
+ );
+ );
+ tmp=indexof(variable,"=");
+ if(tmp>0,
+ varstr=variable;
+ ,
+ varstr=variable+"="+textformat([XMIN,XMAX],5);
+ );
+ cmdL=MkprecommandS();
+ cmdL=concat(cmdL,[
+ name+"=Plotdata",[Dq+fun+Dq,Dq+varstr+Dq,Dq+"Num="+text(Num)+Dq],
+ "WriteOutData",[Dq+fname+Dq,Dq+name+Dq,name]
+ ]);
+ ErrFlag=0; // 16.03.02 from
+ if(mxcheck==1,
+ Mxfun(name,fun,[],["Disp=n"]);
+ tmp=parse("mx"+name);
+ if(!isstring(tmp),ErrFlag=1);
+ );
+ options=append(options,"Wait="+text(waiting));
+ if(wflg==1,options=append(options,"m"));
+ if(wflg==-1,options=append(options,"r"));// 16.03.02 until
+ if(ErrFlag==0,
+ CalcbyS(name,cmdL,concat(options,["cat=middle","Wait="+text(waiting)]));
+ );
+ if(ErrFlag==1,
+ println(" PlotdataS not completed");
+ ,
+ if(outreg==1, // 2016.03.02 ( // )
+ OutFileList=remove(OutFileList,[wfile]);
+ OutFileList=append(OutFileList,wfile);
+ );
+ ReadOutData(fname);
+ Extractdata(name,options);
+ tmp=parse(name);
+ tmp1=name+"="+textformat(tmp,5)+";"; //190415
+ parse(tmp1);
+// Addgraph(name); // 16.04.04
+ tmp2=apply(tmp,Lcrd(#));
+ tmp2;
+ );
+);
+
+Dotfilldata(nm,iostr,pltlist):=
+ Dotfilldata(nm,iostr,pltlist,[]);
+Dotfilldata(nm,iostr,pltlist,optionorg):=(
+//help:Dotfilldata("1","ii",[["sg1"],["sg2"]]);
+//help:Dotfilldata(options=[0.3,"Wait=5"]);
+ regional(options,name,fun,eqL,reL,strL,outreg,
+ plt,fname,options,tmp,tmp1,tmp2,tmp3,flg,
+ wflg,waiting,dense);
+ name="df"+nm;
+ fname=Fhead+name+".txt";
+ fun=fnorg;
+ tmp=indexof(fun,"=");
+ if(tmp>0,
+ tmp1=substring(fun,0,tmp-1);
+ tmp2=substring(fun,tmp,length(fun));
+ fun=tmp1+"-("+tmp2+")";
+ );
+ options=optionorg;
+ tmp=Divoptions(options);
+ eqL=tmp_5;
+ reL=tmp_6;
+ strL=tmp_7;
+ dense=0.3;
+ waiting=5;
+ outreg=0;
+ forall(reL,
+ dense=#;
+ );
+ forall(eqL,
+ tmp=indexof(#,"=");
+ tmp1=Toupper(substring(#,0,1));
+ tmp2=substring(#,tmp,length(#));
+ if(tmp1=="W",
+ waiting=parse(tmp2);
+ options=remove(options,[#]);
+ );
+ if(tmp1=="O",
+ tmp=Toupper(substring(tmp2,0,1));
+ if(tmp=="T" % tmp=="Y", outreg=1);
+ options=remove(options,[#]);
+ );
+ );
+ wflg=0;
+ forall(strL,
+ tmp=Toupper(substring(#,0,1));
+ if(length(#)==0,
+ options=remove(options,[#]);
+ );
+ if(tmp=="M",
+ wflg=1;
+ options=remove(options,[#]);
+ );
+ if(tmp=="R",
+ wflg=-1;
+ options=remove(options,[#]);
+ );
+ );
+ if(islist(iostr),
+ tmp1=text(apply(iostr,Dq+#+Dq));
+ tmp1=replace(tmp1,"[","list("); //16.02.14
+ tmp1=replace(tmp1,"]",")"); //16.02.14
+ ,
+ tmp1=Dq+iostr+Dq;
+ );
+ if(!islist(pltlist_1),
+ tmp2=apply(pltlist,if(length(#)==1,Dq+#+Dq,#));
+ tmp2=text(tmp2);
+ tmp2="list("+substring(tmp2,1,length(tmp2)-1)+"),";
+ ,
+ tmp2="";
+ forall(pltlist,plt,
+ tmp=apply(plt,if(length(#)==1,Dq+#+Dq,#));
+ tmp=text(tmp);
+ tmp="list("+substring(tmp,1,length(tmp)-1)+")";
+ tmp2=tmp2+tmp+",";
+ );
+ );
+ cmdL=MkprecommandR(); //17.09.29
+ tmp2=substring(tmp2,0,length(tmp2)-1);
+ tmp=[tmp1,tmp2];
+ tmp=concat(tmp,dense);
+ cmdL=concat(cmdL,[
+ "Setscaling",[SCALEX,SCALEY], //181020
+ "Setunitlen",[Dq+ULEN+Dq],
+ name+"=Dotfilldata",tmp,
+ "WriteOutData",[Dq+fname+Dq,Dq+name+Dq,name],
+ ]);
+ options=append(options,"Wait="+text(waiting));
+ if(wflg==1,options=concat(options,["m"]));
+ if(wflg==-1,options=concat(options,["r"]));
+ options=append(options,"Cat=n");
+ if(ErrFlag==0,
+ CalcbyR(name,cmdL,options); //17.09.29
+ );
+ if(ErrFlag==1,
+ println("Dotfilldata not completed");
+ ,
+ if(outreg==1,
+ OutFileList=remove(OutFileList,[fname]);
+ OutFileList=append(OutFileList,fname);
+ );
+ if(ErrFlag==0,
+ ReadOutData(fname);
+ tmp1=parse(name);
+ forall(tmp1,
+ tmp=#_1;
+ draw(tmp,pointsize->1);
+ );
+ Com2nd("tmp=ReadOutData("+Dq+fname+Dq+")");
+ Com2nd("Drwpt("+name+")");
+ );
+ );
+);
+
+WritetoA(fname,cmdL):=(
+// help:WritetoA("outdata",cmdL);
+ regional(tmp,tmp1,tmp2,filename,wfilename,endmark);
+ if(indexof(fname,".")==0,
+ filename=fname+".rr";
+ ,
+ filename=fname;
+ );
+ wfilename=replace(filename,".rr",".txt");
+ SCEOUTPUT = openfile(filename);
+// tmp=replace(Dirlib,"\","/");
+// tmp="load("+Dq+tmp+"/oshima/os_muldif.rr"+Dq+")$/*####*/";
+ tmp="/*####*/"; // 16.03.11
+ println(SCEOUTPUT,tmp);
+ tmp="output("+Dq+wfilename+Dq+")$/*##*/"; // 16.05.18from
+ println(SCEOUTPUT,tmp); // 16.05.18until
+ forall(1..(length(cmdL)),
+ tmp1=cmdL_#;
+ tmp=indexof(tmp1,";"); // 16.05.18from
+ if(tmp>0,endmark=";",endmark="$");
+ tmp1=replace(tmp1,";",""); // 16.05.18until
+ if(#==length(cmdL)-1,
+ println(SCEOUTPUT,tmp1+";/*##*/");
+ ,
+ println(SCEOUTPUT,tmp1+endmark+"/*##*/");//16.05.18
+ );
+ );
+ closefile(SCEOUTPUT);
+);
+
+////%kcA start////
+kcA(fname):=kcA(fname,[]);
+kcA(fname,optionorg):=(
+//help:kcA("boxdata");
+//help:kcA(options=["r/m"]);
+ regional(options,tmp,tmp1,tmp2,eqL,strL,filename,flg);
+ if(indexof(fname,".")==0,
+ filename=fname+".rr";
+ ,
+ filename=fname;
+ );
+ options=optionorg;
+ tmp=Divoptions(options);
+ eqL=tmp_5;
+ strL=tmp_7;
+ forall(eqL,
+ tmp=indexof(#,"=");
+ tmp1=substring(#,0,tmp-1);
+ tmp2=substring(#,tmp,length(#));
+ );
+ flg=0;
+ forall(strL,
+ if(Toupper(substring(#,0,1))=="R",
+ flg=0;
+ options=remove(options,[#]);
+ );
+ if(Toupper(substring(#,0,1))=="M",
+ flg=1;
+ );
+ );
+ if(flg==0,
+ tmp2=replace(filename,".rr",".txt");
+ tmp1=load(tmp2);
+ if(length(tmp1)==0,
+ flg=1;
+ );
+ );
+ if(flg==1,
+ tmp1="";
+ if(iswindows(),
+ tmp2=Batparent;
+ ,
+ tmp2=Shellparent;
+ );
+ flg=0;
+ forall(reverse(1..length(tmp2)),
+ if(flg==0,
+ tmp=substring(tmp2,#-1,#);
+ if(tmp=="/" % tmp=="\", // 14.01.15
+ tmp1=substring(tmp2,0,#-1);
+ tmp2=substring(tmp2,#,length(tmp2));
+ flg=1;
+ );
+ );
+ );
+ if(length(tmp1)>0,
+ setdirectory(tmp1);
+ );
+ if(iswindows(),
+ SCEOUTPUT = openfile("kc.bat");
+ println(SCEOUTPUT,"cd "+Dq+Dirwork+Dq);
+ tmp="del "+replace(filename,".rr",".txt");
+ println(SCEOUTPUT,tmp);
+ tmp=Dq+PathA+Dq+" -quiet -f "+Dq+filename+Dq;
+ println(SCEOUTPUT,tmp);
+ println(SCEOUTPUT,"exit");
+ closefile(SCEOUTPUT);
+ tmp=replace(filename,".rr",".txt");
+ println(kc(Dirwork+Batparent,Dirlib,tmp)); // 16.05.29,06.05
+ ,
+ if(ismacosx(), //181125from
+ SCEOUTPUT = openfile("kc.command");
+ ,
+ SCEOUTPUT = openfile("kc.sh");
+ ); //181125to
+ println(SCEOUTPUT,"#!/bin/sh");
+ println(SCEOUTPUT,"cd "+Dq+Dirwork+Dq);
+ tmp="rm "+replace(filename,".rr",".txt");
+ println(SCEOUTPUT,tmp);
+ tmp=Dq+PathA+Dq+" -quiet -f "+Dq+filename+Dq;
+ println(SCEOUTPUT,tmp);
+ println(SCEOUTPUT,"exit 0");
+ closefile(SCEOUTPUT);
+ tmp=replace(filename,".rr",".txt");
+ println(kc(Dirwork+Shellparent,Mackc+Dirlib,tmp));// 16.05.29,06.05
+
+ );
+// wait(WaitUnit);
+ setdirectory(Dirwork);
+ );
+);
+////%kcA end////
+
+////%CalcbyA start////
+CalcbyA(name,cmd):=CalcbyA(name,cmd,[]);
+CalcbyA(name,cmd,optionorg):=(
+//help:CalcbyA("a",cmd);
+//help:CalcbyA(options= ["m/r","Wait=10","Ext=txt","Dig=16"]]);
+ regional(options,tmp,tmp1,tmp2,tmp3,tmp4,realL,strL,eqL,
+ dig,flg,wflg,file,nc,arg,cmdA,cmdlist,wfile,ext,waiting,num,st);
+ options=optionorg;
+ tmp=divoptions(options);
+ eqL=tmp_5;
+ realL=tmp_6;
+ strL=tmp_7;
+ wfile="";
+ ext=".txt";
+ waiting=2;
+ dig=6;
+ forall(eqL,
+ tmp=indexof(#,"=");
+ tmp1=Toupper(substring(#,0,1));
+ tmp2=substring(#,tmp,length(#));
+ if(tmp1=="E",
+ if(indexof(tmp2,".")==0,ext="."+tmp2,ext=tmp2);
+ options=remove(options,[#]);
+ );
+ if(tmp1=="W",
+ waiting=parse(tmp2);
+ options=remove(options,[#]);
+ );
+ if(tmp1=="D",
+ dig=parse(tmp2);
+ options=remove(options,[#]);
+ );
+ );
+ wfile=Fhead+name+ext;
+ wflg=0;
+ forall(strL,
+ tmp=Toupper(substring(#,0,1));
+ if(tmp=="M",
+ wflg=1;
+ options=remove(options,[#]);
+ );
+ if(tmp=="R",
+ wflg=-1;
+ options=remove(options,[#]);
+ );
+ );
+ file=Fhead+name;
+ cmdA=cmd;
+ cmdlist=[];
+ forall(1..floor(length(cmdA)/2),nc, //17.5.18
+ tmp1=cmdA_(2*nc-1);
+ tmp1=replace(tmp1,LFmark,""); // 16.06.12
+ if(nc==length(cmdA)/2,
+ tmp=indexof(tmp1,"=");
+ tmp1=substring(tmp1,tmp,length(tmp1));
+ if(substring(tmp1,0,1)=="[",
+ tmp=substring(tmp1,0,length(tmp1)-1);
+ ,
+ tmp="["+Dq+"/start/"+Dq+","+tmp1; // 16.05.18
+ );
+ tmp=replace(tmp,"::",","+Dq+"//"+Dq+",");
+ tmp1=tmp+","+Dq+"////"+Dq+"]";
+ );
+ tmp2=cmdA_(2*nc); // list of argments
+ tmp3="";
+ tmp4="";
+ forall(tmp2,arg,
+ if(isstring(arg),
+ tmp3=tmp3+replace(arg,"'",Dq)+",";
+// tmp3=tmp3+arg;
+ ,
+ if(!islist(arg),
+ tmp3=tmp3+textformat(arg,dig)+",";
+ ,
+ tmp3=tmp3+"[";
+ tmp4="]";
+ forall(arg,
+ if(isstring(#),
+// tmp3=tmp3+Dq+#+Dq+",";
+ tmp=replace(#,"'",Dq);
+// tmp=#;// 2016.03.03
+ tmp3=tmp3+tmp+",";
+ ,
+ if(!islist(#),
+ tmp3=tmp3+textformat(#,dig)+",";
+ ,
+ tmp=textformat(#,dig);
+ tmp=replace(tmp,"],[","];[");
+ tmp3=tmp3+tmp+",";
+ );
+ );
+ );
+ tmp3=substring(tmp3,0,length(tmp3)-1)+tmp4+",";
+ );
+ );
+ );
+ if(length(tmp3)>0,
+ tmp3=substring(tmp3,0,length(tmp3)-1);
+ tmp1=tmp1+"("+tmp3+")";
+ );
+ cmdlist=append(cmdlist,tmp1);
+ );
+ cmdlist=append(cmdlist,"quit");
+ if(wflg==0,
+ tmp1=load(file+".rr");
+ if((length(tmp1)==0) % (indexof(tmp1,"/*####*/")==0), //15.11.26
+ wflg=1;
+ ,
+ tmp1=tokenize(tmp1,"/*####*/");
+ tmp1=tokenize(tmp1_2,"/*##*/");
+ tmp1=tmp1_(1..(length(tmp1)-1));
+ tmp=select(tmp1,indexof(#,"output")>0);
+ tmp1=remove(tmp1,tmp);
+ tmp1=apply(tmp1,substring(#,0,length(#)-1));
+ if(length(tmp1)!=length(cmdlist), // 15.12.06
+ wflg=1;
+ ,
+ tmp=select(1..length(tmp1),tmp1_#!=cmdlist_#);
+ if(length(tmp)>0, wflg=1);
+ );
+ );
+ );
+ if(wflg==0,wflg=-1); // 15.10.16
+ if(wflg==1,
+ if(length(wfile)>0, // 15.10.05
+ SCEOUTPUT=openfile(wfile);
+ println(SCEOUTPUT,"");
+ closefile(SCEOUTPUT);
+ );
+ WritetoA(file+".rr",cmdlist);
+ kcA(file,concat(options,["m"]));
+ );
+ flg=0;
+ tmp1=floor(waiting*1000/WaitUnit);
+ repeat(tmp1,
+ if(flg==0,
+ tmp=load(wfile);
+ if(length(tmp)>=4,
+ tmp2=substring(tmp,length(tmp)-5,length(tmp));
+ if(tmp2=="////]",
+ tmp=substring(tmp,1,length(tmp)-6);
+ num="1234567890+-.";
+ tmp1=tokenize(","+tmp,",//");
+ tmp3=apply(tmp1,substring(#,1,length(#)));
+ tmp1="[";
+ forall(tmp3,st,
+ tmp=select(1..length(st),indexof(num,substring(st,#-1,#))==0);
+ if((length(tmp)==0) & (length(st)<4), // 16.05.10 16=>4
+ tmp1=tmp1+st+",";
+ ,
+ tmp1=tmp1+Dq+st+Dq+",";
+ );
+ );
+ tmp=Indexof(tmp1,"/start/,"); // 16.05.18from
+ tmp1="["+Dq+substring(tmp1,tmp+7,length(tmp1)-1)+"]";
+ // 16.05.18until
+// tmp1=substring(tmp1,0,length(tmp1)-1)+"];"; //190415
+ parse(name+"="+tmp1);
+ tmp=parse(name);
+ if(length(tmp)==1,
+ tmp1=substring(tmp1,1,length(tmp1)-1);
+ parse(name+"="+tmp1+";"); //190415
+ );
+ flg=1;
+ tmp2=#*WaitUnit/1000;
+ );
+ ,
+ if(wflg==-1,
+ flg=-1;
+ ,
+ wait(WaitUnit);
+ );
+ );
+ );
+ );
+ if(flg<=0,
+ ErrFlag=1;
+ if(flg==-1,
+ println(wfile+" does not exist");
+ ,
+ tmp="("+text(waiting)+" s )";
+ println(wfile+" not generated "+tmp);
+ );
+ ,
+ println(" CalcbyA succeeded "+name+" ("+text(tmp2)+" sec)");
+ );
+);
+////%CalcbyA end////
+
+AsfunO(name,fun,argL):=AsirfunO(name,fun,argL); // 16.02.03
+AsfunO(name,fun,argL,options):=AsirfunO(name,fun,argL,options);
+Asfun(name,fun,argL):=Asirfun(name,fun,argL);
+Asfun(name,fun,argL,optionorg):=Asirfun(name,fun,argL,optionorg);
+AsirfunO(name,fun,argL):=AsirfunO(name,fun,argL,[]);
+AsirfunO(name,fun,argLorg,options):=(
+//help:AsirfunO("an1","fint",["1/(x^2+1)",32,"['-','+']"]);
+ regional(argL,tmp,tmp1,tmp2,eqL);// 16.05.26from
+ tmp=divoptions(options);
+ eqL=tmp_5;
+ argL=argLorg;
+ forall(eqL,
+ tmp=indexof(#,"=");
+ tmp1=Toupper(substring(#,0,1));
+ tmp2=substring(#,tmp,length(#));
+ if(tmp1=="P", // 16.05.26from
+ tmp=Toupper(substring(tmp2,0,1));
+ if((tmp=="T") % (tmp=="Y"),
+ tmp1=argL_(length(argL));
+ tmp=indexof(tmp1,"|");
+ if(tmp==0,
+ argL_(length(argL))=tmp1+"|dumb=-1,dviout=-2";
+ );
+ );
+ );
+ ); // 16.05.26until
+ Asirfun(name,"os_md."+fun,argL,options);
+);
+Asirfun(name,fun,argL):=Asirfun(name,fun,argL,[]);
+Asirfun(name,fun,argL,optionorg):=(
+//help:Asirfun("al1","2*(3+5^4)",[],[""]);
+ regional(nm,options,eqL,precise,disp,process,
+ cmdL,tmp,tmp1,tmp2,tmp3,tmp4,out,out2);
+ nm="as"+name;
+ options=optionorg;
+ tmp=divoptions(options);
+ precise=6;
+ disp=1;
+ process=0;
+ eqL=tmp_5;
+ forall(eqL,
+ tmp=indexof(#,"=");
+ tmp1=Toupper(substring(#,0,1)); //181111
+ tmp2=substring(#,tmp,length(#));
+ if(tmp1=="P",
+ precise=parse(tmp2);
+ options=remove(options,[#]);
+ );
+ if(tmp1=="D",
+ tmp=Toupper(substring(tmp2,0,1));
+ if((tmp=="F") % (tmp=="N"),
+ disp=0;
+ );
+ options=remove(options,[#]);
+ );
+ if(tmp1=="PRO", // 16.05.26from
+ tmp=Toupper(substring(tmp2,0,1));
+ if((tmp=="T") % (tmp=="Y"),
+ process=1;
+ );
+ options=remove(options,[#]);
+ ); // 16.05.26upt
+ );
+ tmp=replace(Dirlib,"\","/");
+ cmdL=[
+ "load",[Dq+tmp+"/oshima/os_muldif.rr"+Dq], // 16.03.11
+ "ctrl",[Dq+"real_digit"+Dq,precise],
+ "A="+fun,argL, // 16.05.26from
+ "A",[]
+ ];
+ CalcbyA(nm,cmdL,options);
+ out=parse(nm); //16.05.26from
+ if(process==1,
+ tmp1=Bracket(out,"[]");
+ tmp2=select(tmp1,abs(#_2)==2);
+ tmp2=apply(tmp2,#_1);
+ out=[];
+ forall(1..length(tmp2)/2,
+ tmp3=tmp2_(2*#-1);
+ tmp4=tmp2_(2*#);
+ tmp=substring(as1,tmp3+1,tmp4-2);
+ tmp=tokenize(tmp,"],[");
+ out=append(out,tmp);
+ );
+ out2=[];
+ forall(out,tmp2,
+ tmp4="";
+ forall(tmp2,tmp3,
+ tmp1=tokenize(tmp3,",");
+ if(tmp1_1==0,
+ tmp4=tmp4+tmp1_2+"="+tmp1_3+"+";
+ ,
+ if(tmp1_1==1,
+ tmp4=tmp4+tmp1_2+"+";
+ ,
+ tmp="'integrate(";
+ forall(2..length(tmp1),
+ tmp=tmp+tmp1_#+"+";
+ );
+ tmp=substring(tmp,0,length(tmp)-1);
+ tmp=tmp+","+tmp1_1+")";
+ tmp4=tmp4+tmp+"+";
+ );
+ );
+ );
+ tmp4=substring(tmp4,0,length(tmp4)-1);
+ out2=append(out2,tmp4);
+ );
+ out=out2;
+ tmp=apply(out,Dq+#+Dq);
+ parse(nm+"="+tmp+";"); //190415
+ );
+ if(ErrFlag==0,
+ if(disp==1, // 15.11.24
+ println(nm+" is : ");
+ println(parse(nm));
+ );
+ );
+ out; //16.05.26until
+);
+
+WritetoM(fname,cmdL,allflg):=(
+// help:WritetoM("outdata",cmdL);
+ regional(tmp,tmp1,tmp2,filename,wfilename,outflg);
+ if(indexof(fname,".")==0,
+ filename=fname+".max";
+ ,
+ filename=fname;
+ );
+ wfilename=replace(filename,".max",".txt");
+ SCEOUTPUT = openfile(filename);
+ outflg=0;
+ forall(1..(length(cmdL)),
+ tmp1=cmdL_#;
+
+ if(allflg==1, // 2016.02.23 from
+ if(#==1,
+ tmp="writefile("+Dq+Dirwork+"/"+wfilename+Dq+")$/*##*/";
+ tmp=replace(tmp,"\","/");
+ println(SCEOUTPUT,tmp);
+ outflg=1;
+ println(SCEOUTPUT,tmp1+"$/*##*/");
+ ,
+ println(SCEOUTPUT,tmp1+"$/*##*/");
+ );
+ ,
+ if((indexof(tmp1,"disp(")>0) & (outflg==0),
+ tmp="writefile("+Dq+Dirwork+"/"+wfilename+Dq+")$/*##*/";
+ tmp=replace(tmp,"\","/");
+ println(SCEOUTPUT,tmp);
+ outflg=1;
+ println(SCEOUTPUT,tmp1+"$/*##*/");
+ ,
+ println(SCEOUTPUT,tmp1+"$/*##*/");
+ );
+ );
+ );
+ closefile(SCEOUTPUT);
+);
+
+////%kcM start////
+kcM(fname):=kcM(fname,[]);
+kcM(fname,optionorg):=(
+//help:kcM("boxdata");
+//help:kcM(options=["r/m"]);
+ regional(options,tmp,tmp1,tmp2,eqL,strL,filename,flg);
+ if(indexof(fname,".")==0,
+ filename=fname+".max";
+ ,
+ filename=fname;
+ );
+ options=optionorg;
+ tmp=Divoptions(options);
+ eqL=tmp_5;
+ strL=tmp_7;
+ forall(eqL,
+ tmp=indexof(#,"=");
+ tmp1=substring(#,0,tmp-1);
+ tmp2=substring(#,tmp,length(#));
+ );
+ flg=0;
+ forall(strL,
+ if(Toupper(substring(#,0,1))=="R",
+ flg=0;
+ options=remove(options,[#]);
+ );
+ if(Toupper(substring(#,0,1))=="M",
+ flg=1;
+ );
+ );
+ if(flg==0,
+ tmp2=replace(filename,".max",".txt");
+ tmp1=load(tmp2);
+ if(length(tmp1)==0,
+ flg=1;
+ );
+ );
+ if(flg==1,
+ tmp1="";
+ if(iswindows(),
+ tmp2=Batparent;
+ ,
+ tmp2=Shellparent;
+ );
+ flg=0;
+ forall(reverse(1..length(tmp2)),
+ if(flg==0,
+ tmp=substring(tmp2,#-1,#);
+ if(tmp=="/" % tmp=="\", // 14.01.15
+ tmp1=substring(tmp2,0,#-1);
+ tmp2=substring(tmp2,#,length(tmp2));
+ flg=1;
+ );
+ );
+ );
+ if(length(tmp1)>0,
+ setdirectory(tmp1);
+ );
+ if(iswindows(),
+ SCEOUTPUT=openfile(replace(filename,".max",".txt"));
+ println(SCEOUTPUT,"");
+ closefile(SCEOUTPUT);
+ SCEOUTPUT = openfile("kc.bat");
+ println(SCEOUTPUT,"cd "+Dq+Dirwork+Dq);
+// tmp="del "+replace(filename,".max",".txt");
+// println(SCEOUTPUT,tmp);
+ tmp=Indexall(PathM,".");
+ tmp=substring(PathM,tmp_1,tmp_2-1);
+ tmp=parse(tmp);
+ if(tmp<39,
+ tmp="call "+Dq+Dq+PathM+Dq+Dq+" -b "+Dq+filename+Dq;
+ ,
+ tmp="call "+Dq+PathM+Dq+" -b "+Dq+filename+Dq;
+ );
+// tmp="cmd/c "+Dq+PathM+" -b "+filename+Dq;
+ println(SCEOUTPUT,tmp);
+ println(SCEOUTPUT,"exit");
+ closefile(SCEOUTPUT);
+ tmp=replace(filename,".max",".txt");
+ println(kc(Dirwork+Batparent,Mackc+Dirlib,tmp));// 16.05.29,06.05
+ ,
+ if(ismacosx(), //181125from
+ SCEOUTPUT = openfile("kc.command");
+ ,
+ SCEOUTPUT = openfile("kc.sh");
+ ); //181125to
+ println(SCEOUTPUT,"#!/bin/sh");
+ println(SCEOUTPUT,"cd "+Dq+Dirwork+Dq);
+ tmp="rm "+replace(filename,".max",".txt");
+ println(SCEOUTPUT,tmp);
+ tmp=Dq+PathM+Dq+" -b "+Dq+filename+Dq;
+ println(SCEOUTPUT,tmp);
+ println(SCEOUTPUT,"exit 0");
+ closefile(SCEOUTPUT);
+ tmp=replace(filename,".max",".txt");
+ println(kc(Dirwork+Shellparent,Mackc+Dirlib,tmp));// 16.05.29,06.05
+ );
+// wait(WaitUnit);
+ setdirectory(Dirwork);
+ );
+);
+////%kcM end////
+
+////%CalcbyM start////
+CalcbyM(name,cmd):=CalcbyM(name,cmd,[]);
+CalcbyM(name,cmd,optionorg):=(
+//help:CalcbyM("a",cmdL);
+//help:CalcbyM(options1= ["m/r","Wait=5","Errchk=y(/n)","Dig=6","Pow=no","All=y"]);
+//help:CalcbyM(options2= ["line=1000"]);
+ regional(options,tmp,tmp0,tmp1,tmp2,tmp3,tmp4,realL,strL,eqL,allflg,indL,line,
+ dig,flg,wflg,file,nc,arg,add,powerd,cmdM,cmdlist,wfile,errchk,waiting,num,st);
+ options=optionorg;
+ tmp=divoptions(options);
+ eqL=tmp_5;
+ realL=tmp_6;
+ strL=tmp_7;
+ wfile="";
+ errchk="Y"; //190411
+ waiting=5;
+ dig=6;
+ allflg=1;
+ powerd="false";
+ line=1000; // 16.06.13
+ forall(eqL,
+ tmp=Strsplit(#,"=");
+ tmp1=Toupper(substring(tmp_1,0,1));
+ tmp2=tmp_2;
+ if(tmp1=="E",
+ errchk=Toupper(substring(tmp_1,0,1)); //190411
+ options=remove(options,[#]);
+ );
+ if(tmp1=="W",
+ waiting=parse(tmp2);
+ options=remove(options,[#]);
+ );
+ if(tmp1=="D",
+ dig=parse(tmp2);
+ options=remove(options,[#]);
+ );
+ if(tmp1=="L", // 16.06.13
+ line=parse(tmp2);
+ options=remove(options,[#]);
+ );
+ if(tmp1=="P",
+ tmp=Toupper(substring(tmp2,0,1));
+ if((tmp=="y") % (tmp=="F"),powerd="true");
+ options=remove(options,[#]);
+ );
+ if(tmp1=="A", // 2016.02.23
+ tmp=Toupper(substring(tmp2,0,1));
+ if((tmp=="N") % (tmp=="F"),allflg=0);
+ options=remove(options,[#]);
+ );
+ );
+ wfile=Fhead+name+".txt"; //190411
+ wflg=0;
+ forall(strL,
+ tmp=Toupper(substring(#,0,1));
+ if(tmp=="M",
+ wflg=1;
+ options=remove(options,[#]);
+ );
+ if(tmp=="R",
+ wflg=-1;
+ options=remove(options,[#]);
+ );
+ );
+ file=Fhead+name;
+ cmdM=cmd;
+ cmdlist=[
+ "powerdisp:"+powerd,"display2d:false","linel:"+text(line) //15.11.25,16.06.13
+ ];
+ forall(1..floor(length(cmdM)/2),nc, //17.5.18
+ tmp1=replace(cmdM_(2*nc-1),"`","'");//2016.02.23
+ tmp1=replace(tmp1,LFmark,""); // 16.06.12
+ if(nc==length(cmdM)/2,
+ tmp=indexof(tmp1,"=");
+ tmp1=substring(tmp1,tmp,length(tmp1));
+ if(substring(tmp1,0,1)=="[",
+ tmp=substring(tmp1,0,length(tmp1)-1);
+ ,
+ tmp="["+tmp1;
+ );
+ tmp2="";
+ forall(1..length(tmp1),
+ if(substring(tmp1,#-1,#+1)=="::",
+ if(substring(tmp2,0,1)==":", tmp2=substring(tmp2,1,length(tmp2)));
+ cmdlist=append(cmdlist,"disp("+tmp2+")");
+ tmp2="";
+ ,
+ tmp2=tmp2+substring(tmp1,#-1,#);
+ );
+ );
+ if(length(tmp2)>0,
+ if(substring(tmp2,0,1)==":", tmp2=substring(tmp2,1,length(tmp2)));
+ cmdlist=append(cmdlist,"disp("+tmp2+")");
+ );
+ ,
+ tmp2=cmdM_(2*nc); // list of argments
+ tmp3="";
+ tmp4="";
+ add="";
+ forall(tmp2,arg,
+ if(isstring(arg),
+ if(substring(arg,0,1)!=",",
+ tmp=arg; // 16.03.03
+ tmp=replace(tmp,"`","'");// 2016.02.23
+ tmp3=tmp3+tmp+",";
+ ,
+ add=add+arg;
+ );
+ ,
+ if(!islist(arg),
+ tmp3=tmp3+textformat(arg,dig)+",";
+ ,
+ tmp3=tmp3+"[";
+ tmp4="]";
+ forall(arg,
+ if(isstring(#),
+ tmp=replace(#,"'",Dq);
+ tmp3=tmp3+tmp+",";
+ ,
+ if(!islist(#),
+ tmp3=tmp3+textformat(#,dig)+",";
+ ,
+ tmp=textformat(#,dig);
+ tmp=replace(tmp,"],[","];[");
+ tmp3=tmp3+tmp+",";
+ );
+ );
+ );
+ tmp3=substring(tmp3,0,length(tmp3)-1)+tmp4+",";
+ );
+ );
+ );
+ if(length(tmp3)>0,
+ tmp3=substring(tmp3,0,length(tmp3)-1);
+ tmp1=tmp1+"("+tmp3+")"+add;
+ );
+ cmdlist=append(cmdlist,tmp1);
+ );
+ );
+ cmdlist=append(cmdlist,"closefile()");
+ cmdlist=append(cmdlist,"quit()");
+ if(wflg==0,
+ tmp1=load(file+".max");
+ if(length(tmp1)==0,
+ wflg=1;
+ ,
+ if(indexof(tmp1,"/*##*/")==0, // 15.11.26
+ wflg=1;
+ ,
+ tmp1=tokenize(tmp1,"/*##*/");
+ tmp1=tmp1_(1..(length(tmp1)-1));
+ tmp=select(tmp1,indexof(#,"writefile")>0);
+ tmp1=remove(tmp1,tmp);
+ tmp1=apply(tmp1,substring(#,0,length(#)-1));
+ if(length(tmp1)!=length(cmdlist), // 15.12.07
+ wflg=1;
+ ,
+ tmp=select(1..length(tmp1),tmp1_#!=cmdlist_#);
+ if(length(tmp)>0, wflg=1);
+ );
+ );
+ );
+ );
+ if(wflg==0,wflg=-1); // 15.10.16
+ if(wflg==1,
+ if(length(wfile)>0, // 15.10.05
+ SCEOUTPUT=openfile(wfile);
+ println(SCEOUTPUT,"");
+ closefile(SCEOUTPUT);
+ );
+ WritetoM(file+".max",cmdlist,allflg); // 2016.02.23
+ kcM(file,concat(options,["m"]));
+ );
+ flg=0;
+ tmp1=floor(waiting*1000/WaitUnit);
+ repeat(tmp1,
+ if(flg==0,
+ tmp1=load(wfile);
+ if(wflg==1,wait(WaitUnit)); // 2016.02.23
+ if(length(tmp1)>0,
+ tmp=indexof(tmp1,"error")+indexof(tmp1,"syntax"); //2016.02.23
+ if((tmp>0)&(errchk=="Y"), //190411
+ println("Some error(s) occurred"); //2016.02.24 from
+ tmp2=tokenize(tmp1,"(%");
+ forall(4..length(tmp2),println(tmp2_#)); //2016.02.24 until
+ flg=2; //2016.02.23
+ ,
+ if(indexof(tmp1,"closefile()")>0, // 15.11.24
+ tmp=tokenize(tmp1,"disp(");
+ tmp1=tmp_(2..length(tmp));
+ tmp4=[];
+ forall(tmp1,tmp2,
+ tmp=indexof(tmp2,")");
+ tmp3=substring(tmp2,tmp,length(tmp2));
+ indL=Indexall(tmp3,"(%i"); // 16.04.26from
+ tmp0=0;
+ forall(indL,
+ if(tmp0==0,
+ tmp=substring(tmp3,#+2,#+3);
+ if(indexof("0123456789",tmp)>0,//16.04.25?
+ tmp3=removespace(substring(tmp3,0,#-1));
+ tmp4=append(tmp4,tmp3);
+ tmp0=1;
+ );
+ );// 16.04.26until
+ );
+ );
+ num="1234567890+-.";
+ tmp1="[";
+ forall(tmp4,st,
+ tmp=select(1..length(st),indexof(num,substring(st,#-1,#))==0);
+ if((length(tmp)==0) & (length(st)<4), // 16.05.10 16=>4
+ tmp1=tmp1+st+",";
+ ,
+ tmp1=tmp1+Dq+st+Dq+",";
+ );
+ );
+ tmp1=substring(tmp1,0,length(tmp1)-1)+"]";
+ tmp1=replace(tmp1,".d+0",""); // 15.11.23
+ parse(name+"="+tmp1+";"); //190415
+ tmp=parse(name);
+ if(length(tmp)==1,
+ tmp1=substring(tmp1,1,length(tmp1)-1);
+ parse(name+"="+tmp1+";"); //190415
+ );
+ flg=1;
+ tmp2=#*WaitUnit/1000;
+ );
+ );
+ ,
+ if(wflg==-1,
+ flg=-1;
+ ,
+ wait(WaitUnit);
+ );
+ );
+ );
+ );
+ if(flg<=0,
+ ErrFlag=1;
+ if(flg==-1,
+ println(wfile+" does not exist");
+ ,
+ tmp="("+text(waiting)+" s )";
+ tmp1=load(wfile);
+ if(length(tmp1)>0,
+ println(wfile+" incomplete"+tmp); // 2016.02.24
+ ,
+ println(wfile+" not generated "+tmp);
+ );
+ );
+ ,
+ if(flg==1, // 2016.02.23
+ println(" CalcbyM succeeded "+name+" ("+text(tmp2)+" sec)");
+ );
+ );
+);
+////%CalcbyM end////
+
+////%Mxfun start////
+Mxfun(name,fun,argL):=Mxfun(name,fun,argL,[]);
+Mxfun(name,fun,argL,optionorg):=(
+//help:Mxfun("ca1","diff",["sin(x)^3","x"],[""]);
+//help:Mxfun(options=["Pre=6","Disp=y","Load= :: ","Set=::","Add="]);
+ regional(nm,options,eqL,precise,disp,pack,set,add,cmdL,tmp,tmp1,tmp2);
+ nm="mx"+name;
+ options=optionorg;
+ tmp=divoptions(options);
+ precise=6;
+ disp=1;
+ pack=[];
+ set=[];
+ add="";
+ eqL=tmp_5;
+ forall(eqL,
+ tmp=Strsplit(#,"=");
+ tmp1=Toupper(substring(tmp_1,0,1)); //190424
+ tmp2=tmp_2;
+ if(tmp1=="P",
+ precise=parse(tmp2);
+ options=remove(options,[#]);
+ );
+ if(tmp1=="D" , //190327(to 1 char)
+ tmp=Toupper(substring(tmp2,0,1));
+ if((tmp=="F") % (tmp=="N"),
+ disp=0;
+ );
+ options=remove(options,[#]);
+ );
+ if((tmp1=="P") % (tmp1=="L"), //190327(to 1 char)
+ pack=tokenize(tmp2,"::");
+ options=remove(options,[#]);
+ );
+ if(tmp1=="S", //190327(to 1 char)
+ set=tokenize(tmp2,"::");
+ options=remove(options,[#]);
+ );
+ if(tmp1=="A", //190327(to 1 char)
+ add=","+tmp2;
+ options=remove(options,[#]);
+ );
+ );
+ cmdL=[];
+ forall(pack,
+ cmdL=concat(cmdL,["load",[#]]);
+ );
+ forall(set,
+ cmdL=concat(cmdL,[#,[]]);
+ );
+ if(length(add)>0,
+ tmp=append(argL,add);
+ ,
+ tmp=argL;
+ );
+ cmdL=concat(cmdL,[
+ "ans"+":"+fun,tmp,
+ "ans",[]
+ ]);
+ CalcbyM(nm,cmdL,options);
+ if(ErrFlag==0,
+ if(disp==1, // 15.11.24
+ println(nm+" is : ");
+ println(parse(nm));
+ );
+ );
+ parse(nm);
+);
+////%Mxfun end////
+
+////%Mxtex start////
+Mxtex(nm,ex):=Mxtex(nm,ex,[]);
+Mxtex(nm,ex,optionorg):=(
+//help:Mxtex("1","sin(x)/x");
+//help:Mxtex(options=["Disp=y"]);
+ regional(name,cmdL,eqL,options,tx,disp,out,set,
+ tmp,tmp1,tmp2); // 16.01.25
+ name="tx"+nm;
+ options=optionorg;
+ tmp=divoptions(options);
+ eqL=tmp_5;
+ disp=1;
+ set=[];
+ forall(eqL,
+ tmp=indexof(#,"=");
+ tmp1=Toupper(substring(#,0,1));
+ tmp2=substring(#,tmp,length(#));
+ if(tmp1=="D" ,
+ tmp=Toupper(substring(tmp2,0,1));
+ if((tmp=="F") % (tmp=="N"),
+ disp=0;
+ );
+ options=remove(options,[#]);
+ );
+ if(tmp1=="SET", // 16.03.01
+ set=tokenize(tmp2,"::");
+ options=remove(options,[#]);
+ );
+ if(tmp1=="ORD", // 16.03.01
+ tmp="ordergreat("+tmp2+")";
+ set=append(set,tmp);
+ options=remove(options,[#]);
+ );
+ );
+ cmdL=[
+ "load",[Dq+"mactex-utilities.lisp"+Dq]]; // 16.03.03
+ forall(set, // 16.03.01
+ cmdL=concat(cmdL,[#,[]]);
+ );
+ cmdL=concat(cmdL,[
+ name+":disp(tex("+ex+"))",[], // 16.01.18
+ name,[] // 16.01.18
+ ]);
+ CalcbyM(name,cmdL,options); // 16.02.19
+ tx=parse(name);
+ if(islist(tx), // 16.01.10
+ out=tx_1;
+ ,
+ out=tx;
+ );
+ tmp=indexof(out,"$$")+1;
+ out=substring(out,tmp,length(out));
+ tmp=indexof(out,"$$")-1;
+ out=substring(out,0,tmp);
+ if(disp==1, // 16.01.10
+ println(name+" is:");
+ println(out);
+ );
+ tmp=name+"="+Dq+out+Dq+";"; //16.01.10//190415
+ parse(tmp);
+ out;
+);
+////%Mxtex end////
+
+////%MxtexL start////
+MxtexL(nm,exlist):=MxtexL(nm,exlist,[]); // 16.05.27
+MxtexL(nm,exlist,options):=(
+ regional(out,tmp,tmp1);
+ out=[];
+ forall(1..length(exlist),
+ tmp=Mxtex(nm+"n"+text(#),exlist_#,["Disp=n"]);
+ out=append(out,Dq+tmp+Dq);
+ );
+ tmp="tx"+nm+"="+out+";"; //190415
+ parse(tmp);
+ println("tx"+nm+"is:");
+ apply(out,println(#));
+ out;
+);
+
+Mxbatch(file):=(
+//help:Mxbatch(["matoperation.max"]);
+ regional(figL,out,path,tmp,tmp1,tmp2);
+ if(!islist(file),figL=[file],figL=file);
+ path=replace(Dirlib+"/maximaL/","\","/");
+ out=[];
+ forall(figL,
+ if(indexof(#,".")==0,tmp1=#+".max",tmp1=#);
+ tmp1=Dq+path+tmp1+Dq;
+ tmp2=["batch",[tmp1]];
+ out=concat(out,tmp2);
+ );
+ out;
+);
+////%MxtexL end////
+
+////%Mxload start////
+Mxload(file):=( //17.06.16
+//help:Mxload(["rkfun.lispp"]);
+ regional(figL,out,path,tmp,tmp1,tmp2);
+ if(!islist(file),figL=[file],figL=file);
+ path=replace(Dirlib+"/maximaL/","\","/");
+ out=[];
+ forall(figL,
+ if(indexof(#,".")==0,tmp1=#+".lisp",tmp1=#);
+ tmp1=Dq+path+tmp1+Dq;
+ tmp2=["load",[tmp1]];
+ out=concat(out,tmp2);
+ );
+ out;
+);
+////%Mxload end////
+
+////%Maxima2Cindydata start////
+Maxima2Cindydata(str):=( //17.10.24
+ regional(out,numstr,eL,nn,ne,flg,tmp);
+ numstr="-0123456789";
+ eL=Indexall(str,"e");
+ if(length(eL)==0,
+ out=str;
+ ,
+ out=substring(str,0,eL_1-1);
+ forall(1..(length(eL)),nn,
+ ne=eL_nn;
+ flg=0;
+ forall(1..5,
+ if(flg==0,
+ tmp=substring(str,ne+#-1,ne+#);
+ if(indexof(numstr,tmp)==0,
+ flg=#;
+ tmp=substring(str,ne,ne+flg-1);
+ out=out+"*10^("+tmp+")";
+ );
+ );
+ );
+ if(nn<length(eL),
+ out=out+substring(str,ne+flg-1,eL_(nn+1)-1);
+ ,
+ out=out+substring(str,ne+flg-1,length(str));
+ );
+ );
+ );
+ parse(out);
+);
+////%Maxima2Cindydata end////
+
+////%kcV3 start////
+kcV3(fname):=kcV3(Dirwork,fname);
+kcV3(path,fname):=(
+//help:kcV3(path,"ex.obj");
+ regional(tmp,tmp1,tmp2,eqL,strL,filename,flg);
+ if(indexof(fname,".")==0,
+ filename=fname+".obj";
+ ,
+ filename=fname;
+ );
+ flg=1;
+ if(flg==1,
+ tmp1=""; // 15.10.08 from
+ if(iswindows(),
+ tmp2=Batparent;
+ ,
+ tmp2=Shellparent;
+ );
+ tmp=replace(path,"\","/");
+ tmp=substring(tmp,length(tmp)-1,length(tmp));
+ if(tmp=="/" % tmp=="\", tmp1=path, tmp1=path+"/");
+ if(iswindows(),
+ SCEOUTPUT = openfile("kc.bat");
+ println(SCEOUTPUT,"cd "+Dq+Dirwork+Dq);
+ tmp=Dqq(PathV3)+" "+Dqq(tmp1+filename);
+ println(SCEOUTPUT,tmp);
+ println(SCEOUTPUT,"exit");
+ closefile(SCEOUTPUT);
+ println(kc(Dirwork+Batparent,Dirlib,Fnametex));// 16.05.29,06.05
+ ,
+ if(ismacosx(), //181125from
+ SCEOUTPUT = openfile("kc.command");
+ ,
+ SCEOUTPUT = openfile("kc.sh");
+ ); //181125to
+ println(SCEOUTPUT,"#!/bin/sh");
+ println(SCEOUTPUT,"cd "+Dq+Dirwork+Dq);
+ if(PathV3=="preview", //181202from
+ tmp="open -a "+Dqq("preview");
+ ,
+ tmp=Dqq(PathV3);
+ );
+ tmp=tmp+" "+Dqq(tmp1+filename); //181202to
+ println(SCEOUTPUT,tmp);
+ println(SCEOUTPUT,"exit 0");
+ closefile(SCEOUTPUT);
+ println(kc(Dirwork+Shellparent,Mackc+Dirlib,Fnametex));// 16.05.29,06.05
+ );
+ wait(WaitUnit);
+ );
+ if(fig==2,
+ println("Obj file not exist / imperfect");
+ );
+);
+
+////%Changeobjscale start////
+Changeobjscale(fname):=(
+ regional(fout);
+ fout=replace(fname,".obj","");
+ fout=fout+"out.obj";
+ Changeobjscale(ULEN,fname,fout,[]);
+);
+Changeobjscale(fname,Arg):=(
+ regional(fout);
+ if(islist(Arg),
+ fout=replace(fname,".obj","");
+ fout=fout+"out.obj";
+ Changeobjscale(ULEN,fname,fout,Arg);
+ ,
+ Changeobjscale(ULEN,fname,Arg,[]);
+ );
+);
+Changeobjscale(Arg1,Arg2,Arg3):=(
+ if(islist(Arg3),
+ Changeobjscale(ULEN,Arg1,Arg2,Arg3);
+ ,
+ Changeobjscale(Arg1,Arg2,Arg3,[]);
+ );
+);
+Changeobjscale(unitlen,fnameorg,foutorg,optionorg):=(
+//help:Changeobjscale("20mm",fname,fnameout);
+//help:Changeobjscale(options=["Unit=mm",[0,0,0]]);
+ regional(fname,fout,fmd,unit,val,options,eqL,reL,
+ origin,outunit,sc,stL,nn,tmp,tmp1,tmp2);
+ options=optionorg;
+ tmp=Divoptions(options);
+ eqL=tmp_5;
+ reL=tmp_6;
+ outunit="IN";
+ forall(eqL,
+ tmp=indexof(#,"=");
+ tmp1=Toupper(substring(#,0,1));
+ tmp2=Toupper(substring(#,tmp,length(#)));
+ if(tmp1=="O" % tmp1=="U",
+ outunit=tmp2;
+ options=remove(options,[#]);
+ );
+ );
+ options=remove(options,reL);
+ origin=[0,0,0];
+ forall(reL,
+ if(islist(#),origin=#);
+ );
+ options=remove(options,reL);
+ tmp1=".0123456789+-*/";
+ unit="";
+ val=1;
+ tmp2=0;
+ forall(reverse(1..length(unitlen)),
+ tmp=substring(unitlen,#-1,#);
+ if(tmp2==0,
+ if(indexof(tmp1,tmp)>0,
+ tmp2=#;
+ );
+ );
+ unit=substring(unitlen,tmp2,length(unitlen));
+ unit=removespace(unit);
+ val=parse(substring(unitlen,0,tmp2));
+ );
+ sc=1;
+ if(unit=="cm",sc=1);
+ if(unit=="mm",sc=0.1);
+ if(unit=="in",sc=2.54);
+ sc=sc*val;
+ if(outunit=="IN",sc=sc/2.54);
+ if(outunit=="MM",sc=sc*10);
+ fname=fnameorg;
+ if(indexof(fname,".")==0,fname=fname+".obj");
+ fmd=replace(fname,".obj",".txt");
+ fout=foutorg;
+ if(indexof(fout,".")==0,fout=fout+".obj");
+ tmp1=Textformat(origin,4);
+ tmp1=RSform(tmp1);
+ cmdL=[
+ "Origin="+tmp1,[],
+ "Sc="+format(sc,6),[],
+ "Stv=readLines",[Dq+fname+Dq],
+ "cat('',file="+Dq+fout+Dq+")",[],
+ "for(nn in Looprange(1,length(Stv))){",[],
+ " if(substring(Stv[nn],1,2)=='v '){",[],
+ " Tmp1=paste('c(',substring(Stv[nn],3),')',sep='')",[],
+ " Tmp1=gsub(' ',',',Tmp1,fixed=TRUE)",[],
+ " Tmp1=gsub(',,',',',Tmp1,fixed=TRUE)",[],
+ " Tmp1=gsub('(,','(',Tmp1,fixed=TRUE)",[],
+ " Tmp=eval(parse(text=Tmp1))",[],
+ " Tmp=Origin+Sc*(Tmp-Origin)",[],
+ " Stv[nn]=paste('v ',sprintf('%8.5f %8.5f %8.5f',Tmp[1],Tmp[2],Tmp[3]),sep='')",[],
+ " }",[],
+ " cat(Stv[nn],'\n',sep='',file="+Dq+fout+Dq+",append=TRUE)",[],
+ "}",[]
+ ];
+ options=concat(["Wait=3","Cat=n","File="+fmd],options); // 16.06.26
+ CalcbyR("cs",cmdL,options);
+ println("Scale of "+fname+" changed");
+);
+////%Changeobjscale end////
+
+////%Setobj start////
+//Objname(str):=Objname(str,["m","v"]); //180906from
+//Objname(str,options):=Setobj(str,options);
+Setobj():=Setobj(Fhead,["m","v"]); //180901
+Setobj(Arg1):=(
+ if(isstring(Arg1),
+ Setobj(Arg1,["m","v"]); //17.01.12
+ ,
+ Setobj(Fhead,Arg1); //180902
+ );
+);
+Setobj(str,optionsorg):=( //180906to
+//help:Setobj();
+//help:Setobj(["v"]);
+//help:Setobj(options=["m","v","preview","Zax=y(/n)"]);
+ regional(options,tmp,strL);
+ options=select(optionsorg,length(#)>0); //17.12.23from
+ tmp=Divoptions(options); //181203from
+ strL=tmp_7;
+ forall(strL,
+ if(Toupper(substring(#,0,1))=="P",
+ PathV3="preview";
+ options=remove(options,[#]);
+ );
+ ); //181203to
+ if(length(str)>0,
+ OCNAME=str;
+ );
+ if(length(options)>0,
+ OCOPTION=options;
+ ,
+ OCOPTION=["m","v"];
+ ); //17.12.23until
+ println("generate OBJCMD. name="+OCNAME+", option="+OCOPTION);
+);
+////%Setobj end////
+
+////%Mkviewobj start////
+Mkviewobj():=Mkviewobj(OCNAME,OBJCMD,OCOPTION); //181209
+Mkviewobj(fname,cmdL):=Mkviewobj(Dirwork,fname,cmdL,[]);
+Mkviewobj(Arg1,Arg2,Arg3):=(
+ if(!isstring(OCNAME), //17.04.13from
+ drawtext(mouse().xy,"Mkobjcmd not defined",
+ size->24,color->[1,0,0]);
+ , //17.04.13until
+ if(islist(Arg2),
+ Mkviewobj(Dirwork,Arg1,Arg2,Arg3);
+ ,
+ Mkviewobj(Arg1,Arg2,Arg3,[]);
+ );
+ );
+);
+Mkviewobj(pathorg,fnameorg,cmdLorg,optionorg):=(
+//help:Mkviewobj();
+ regional(path,cmdL,eqL,strL,flg,fname,options,make,view,cmdlist,
+ vtx,face,unit,tmp,tmp1,tmp2,store,dt,nn,zax);
+ store=Fillblack(); //181128
+println([3647,store]);
+ path=replace(pathorg,"\","/");
+ if(substring(path,length(path)-1,length(path))!="/",path=path+"/");
+ fname=fnameorg;
+ if(indexof(fname,".")==0,fname=fname+".obj");
+ cmdL=cmdLorg;
+ options=optionorg;
+ tmp=divoptions(options);
+ eqL=tmp_5;
+ strL=tmp_7;
+ make=-1;
+ view=0;
+ unit="";
+ zax="Y";
+ forall(eqL,
+ tmp=Strsplit(#,"=");
+ tmp1=Toupper(substring(tmp_1,0,1));
+ if(tmp1=="U", // 16.06.30from
+ unit=tmp2;
+ options=remove(options,[#]);
+ ); // 16.06.30to
+ if(tmp1=="Z", // 16.06.30from
+ zax=Toupper(substring(tmp_2,0,1));
+ options=remove(options,[#]);
+ ); // 16.06.30to
+ );
+ forall(strL,
+ tmp=Toupper(substring(#,0,1));
+ if(tmp=="M",
+ make=1;
+// options=remove(options,[#]); //181203
+ );
+ if(tmp=="R",
+ make=0;
+// options=remove(options,[#]); //181203
+ );
+ if(tmp=="V",
+ view=1;
+ options=remove(options,[#]);
+ );
+ );
+ if(islist(cmdL),
+ if(length(cmdL)==0,
+ make=0;
+ println("Command sequence not defnamed");
+ );
+ ,
+ make=0;
+ println("Command sequence not defined");
+ );
+ if(make==-1,
+ setdirectory(pathorg);
+ tmp1=load(fname);
+ if(length(tmp1)==0,make=1,make=0);
+ setdirectory(Dirwork);
+ );
+ if(make==1,
+ if(isstring(cmdL_1),
+ cmdlist=MkprecommandR();
+ cmdlist=concat(cmdlist,["Openobj",[Dq+path+fname+Dq]]);
+ cmdlist=concat(cmdlist,cmdL);
+ tmp=["Closeobj()",[]];//181130
+ cmdlist=concat(cmdlist,tmp);
+ tmp1=apply(options,Toupper(substring(#,0,1))); // 16.04.23from
+ tmp1=select(tmp1,#=="W");
+ if(length(tmp1)==0,
+ tmp=append(tmp,"Wait=10");
+ );// 16.04.23to
+ CalcbyR("",cmdlist,tmp); //180902
+ wait(WaitUnit*100); // 16.03.18
+ ,
+ vtx=cmdL_1;
+ face=cmdL_2;
+ setdirectory(pathorg);
+ SCEOUTPUT = openfile(fname);
+ forall(vtx,tmp1,
+ tmp2=tmp1;
+ if(ispoint(tmp1),
+ tmp2=parse(text(tmp1)+"3d");
+ );
+ tmp2=apply(tmp2,format(#,5));
+ tmp="v "+tmp2_1+" "+tmp2_2+" "+tmp2_3;
+ println(SCEOUTPUT,tmp);
+ );
+ forall(face,tmp1,
+ tmp="f";
+ forall(tmp1,
+ tmp=tmp+" "+text(#);
+ );
+ println(SCEOUTPUT,tmp);
+ );
+ closefile(SCEOUTPUT);
+ setdirectory(Dirwork);
+ );
+ );
+ if(length(unit)>0, // 16.06.30from
+ Changeobjscale(fname,["Unit="+unit]);//16.10.04
+ ); // 16.06.30until
+ if(view==1,
+ if((PathV3=="preview")%(zax=="Y"), //181209
+ dt=Readlines(fname);
+ forall(1..(length(dt)),nn,
+ tmp1=dt_nn;
+ if(substring(tmp1,0,2)=="v ",
+ tmp=replace(tmp1," "," ");
+ tmp=tokenize(tmp," ");
+ tmp=Sprintf(tmp_(2..4),4);
+ tmp2="v "+tmp_2+" "+tmp_3+" "+tmp_1;
+ dt_nn=tmp2;
+ );
+ );
+ fname=replace(fname,".","prv.");
+ SCEOUTPUT = openfile(fname);
+ forall(dt,
+ println(SCEOUTPUT,#);
+ );
+ closefile(SCEOUTPUT);
+ );
+ kcV3(path,fname);
+ );
+ Fillrestore(store); //181128
+);
+////%Mkviewobj end////
+
+////%Mkobjcmd start////
+Mkobjcmd(nm,fd):=Mkobjcmd(nm,fd,[40,40,"+"]);
+Mkobjcmd(nm,fd,options):=(
+//help:Mkobjcmd("1",fd,[40,40,"+"]);
+ regional(ffd,cmd,out,div1,div2,side,
+ reL,stL,tmp,tmp1,tmp2,tmp3,tmp4);
+ div1=40;
+ div2=40;
+ side="+";
+ tmp=Divoptions(options);
+ reL=tmp_6;
+ stL=select(tmp_7,length(#)>0);
+ forall(1..length(reL),
+ if(#==1,
+ div1=reL_1;
+ div2=div1;
+ ,
+ div2=reL_2;
+ );
+ );
+ forall(stL,
+ side=#;
+ );
+ side="'"+side+"'";
+ ffd=Fullformfunc(fd);
+ tmp=indexof(ffd_5,"=");
+ tmp1=RSform(substring(ffd_5,0,tmp-1));
+ tmp2=RSform(substring(ffd_5,tmp,length(ffd_5)));
+ tmp=indexof(ffd_6,"=");
+ tmp3=RSform(substring(ffd_6,0,tmp-1));
+ tmp4=RSform(substring(ffd_6,tmp,length(ffd_6)));
+ out=["Fun"+nm+"<- function("+tmp1+","+tmp3+"){",[]];
+ tmp=" Out=c("+ffd_2+","+ffd_3+","+ffd_4+")";
+ out=concat(out,[tmp,[]]);
+ out=concat(out,["}",[]]);
+ tmp1=["Objsurf",
+ ["Fun"+nm,tmp2,tmp4,div1,div2,side]];
+ out=concat(out,tmp1);
+ tmp2=[]; // 16.06.10from
+ forall(out,tmp1,
+ if(islist(tmp1),
+ tmp=apply(tmp1,if(isstring(#),Dq+#+Dq,Textformat(#,5)));
+ ,
+ if(isstring(tmp1),tmp=Dq+tmp1+Dq,tmp=Textformat(#,5));
+ );
+ tmp2=append(tmp2,tmp);
+ );
+ parse("oc"+nm+"="+tmp2+";"); //190415
+ println("cmd seq oc"+nm+" generated"); // 16.06.10until
+ OBJCMD=concat(OBJCMD,out);//16.11.29
+ out;
+);
+////%Mkobjcmd end////
+
+////%Mkobjnrm start////
+Mkobjnrm(nm,fd):=Mkobjnrm(nm,fd,[]);
+Mkobjnrm(nm,fd,optionorg):=(
+//help:Mkobjnrm("1",fd1,["Disp=y"]);
+//help:Mkobjnrm("1","[x,y,x*y/(x^2+y^2)],x,y");
+ regional(name,options,stL,eqL,disp,ffd,fst,xst,yst,cmdL,
+ precmd,out,tmp,tmp1,tmp2,tmp3);
+ name="nrm"+nm;
+ options=select(optionorg,length(#)>0);
+ tmp=Divoptions(options);
+ eqL=tmp_5;
+ stL=tmp_7;
+ precmd=[];
+ disp="N";
+ forall(eqL, // 16.05.02
+ tmp1=Toupper(substring(#,0,1));
+ tmp=indexof(#,"=");
+ tmp2=Toupper(substring(#,tmp,tmp+1));
+ if(tmp1=="D",
+ if(tmp2=="Y" % tmp2=="T",
+ disp="Y";
+ options=remove(options,[#]);
+ );
+ );
+ );
+ forall(stL,
+ if(indexof(#,"+")+indexof(#,"-")==0,
+ precmd=concat(precmd,[#,[]]);
+ options=remove(options,[#]);
+ );
+ );
+ if(isstring(fd),
+ tmp=Indexall(fd,",");
+ fst=[
+ substring(fd,1,tmp_1-1),
+ substring(fd,tmp_1,tmp_2-1),
+ substring(fd,tmp_2,tmp_3-2)
+ ];
+ xst=substring(fd,tmp_3,tmp_4-1);
+ yst=substring(fd,tmp_4,length(fd));
+ ,
+ ffd=Fullformfunc(fd);
+ fst=text(ffd_(2..4));
+ tmp=indexof(ffd_5,"=");
+ xst=substring(ffd_5,0,tmp-1);
+ tmp=indexof(ffd_6,"=");
+ yst=substring(ffd_6,0,tmp-1);
+ );
+ cmdL=precmd;
+ cmdL=concat(cmdL,[
+ "fx:diff",[fst,xst],
+ "fy:diff",[fst,yst],
+ "nx:fx[2]*fy[3]-fx[3]*fy[2]",[],
+ "ny:fx[3]*fy[1]-fx[1]*fy[3]",[],
+ "nz:fx[1]*fy[2]-fx[2]*fy[1]",[],
+ "nn:factor(nx^2+ny^2+nz^2)",[], // 16.04.21
+ "nn:sqrt(nn)",[], // 16.04.20
+ "nx:nx/nn",[],
+ "ny:ny/nn",[],
+ "nz:nz/nn",[],
+ "n:[nx,ny,nz]",[], // 16.04.21from
+ "n:ratsimp(n)",[],
+ "n:trigsimp(n)",[],
+ "n:factor(n)",[], // 16.04.21until
+ "n",[]
+ ]);
+ CalcbyM(name,cmdL,options); // 16.05.12
+ tmp1=parse(name); // 16.05.12
+ out=[tmp1]; // 15.04.21b from
+ tmp2=[];
+ forall(1..3,
+ tmp=indexof(tmp1,",");
+ if(tmp==0,
+ tmp=indexof(tmp1,"]");
+ );
+ tmp3=substring(tmp1,0,tmp-1);
+ tmp1=substring(tmp1,tmp,length(tmp1));
+ tmp=indexof(tmp3,"/");
+ if(tmp>0,
+ tmp3=substring(tmp3,tmp,length(tmp3));
+ tmp2=append(tmp2,tmp3);
+ ,
+ tmp2=append(tmp2,"1");
+ );
+ );
+// out=append(out,tmp2);
+ out=out_1; // 16.05.02from
+ println("calculate "+name+":"); // 16.05.12
+ if(disp=="Y", // 16.05.02
+ println(out);
+ // println(out_2);
+ ); // 16.05.02until
+ out;
+);
+////%Mkobjnrm end////
+
+////%Mkobjthickcmd start////
+Mkobjthickcmd(nm,fd):=Mkobjthickcmd(nm,fd,"",[40,40,"+"]);
+Mkobjthickcmd(nm,fd,Arg):=(
+ if(islist(Arg),
+ Mkobjthickcmd(nm,fd,"",Arg);
+ ,
+ Mkobjthickcmd(nm,fd,Arg,[]);
+ );
+);
+Mkobjthickcmd(nm,fd,fnrm,optionorg):=(
+//help:Mkobjthickcmd("1",fd,["assume(R>0)"]);
+//help:Mkobjthickcmd("1",fd,fnorm);
+//help:Mkobjthickcmd(options1=[40,40,0.05,-0.05,"+n+s+e+w+"]);
+//help:Mkobjthickcmd(options2=["ratsimp","trigsimp"]);
+ regional(options,ffd,cmd,out,div1,div2,thick1,thick2,side,
+ reL,stL,addcmd,fst,xst,yst,tmp,tmp1,tmp2,tmp3,tmp4);
+ div1=40;
+ div2=40;
+ thick1=0.05;
+ thick2=-0.05;
+ side="+n+s+e+w+";
+ options=select(optionorg,length(#)>0);
+ tmp=Divoptions(options);
+ reL=tmp_6;
+ stL=tmp_7;
+ tmp1=1; // 16.04.21from
+ tmp2=1;
+ forall(1..length(reL),
+ tmp=reL_#;
+ if(tmp>1,
+ if(tmp1==1,
+ div1=tmp;
+ div2=tmp;
+ ,
+ div2=tmp;
+ );
+ tmp1=tmp1+1;
+ ,
+ if(tmp2==1,
+ thick1=tmp;
+ thick2=-tmp;
+ ,
+ thick2=tmp;
+ );
+ tmp2=tmp2+1;
+ );
+ ); // 16.04.21until
+ options=remove(options,reL);
+ forall(stL,
+ if(length(#)>0,
+ tmp=indexof(#,"+")+indexof(#,"-");
+ if(tmp>0,
+ side=#;
+ options=remove(options,[#]);
+ );
+ );
+ );
+ side="'"+side+"'";
+ ffd=Fullformfunc(fd);
+ tmp=indexof(ffd_5,"=");
+ tmp1=substring(ffd_5,0,tmp-1);
+ tmp2=RSform(substring(ffd_5,tmp,length(ffd_5)));
+ tmp=indexof(ffd_6,"=");
+ tmp3=substring(ffd_6,0,tmp-1);
+ tmp4=RSform(substring(ffd_6,tmp,length(ffd_6)));
+ fst=text(ffd_(2..4));
+ tmp=indexof(ffd_5,"=");
+ xst=substring(ffd_5,0,tmp-1);
+ tmp=indexof(ffd_6,"=");
+ yst=substring(ffd_6,0,tmp-1);
+ out=["Fun"+nm+"<- function("+tmp1+","+tmp3+"){",[]];
+ tmp=" c("+ffd_2+","+ffd_3+","+ffd_4+")";
+ out=concat(out,[tmp,[]]);
+ out=concat(out,["}",[]]);
+ tmp=["Fnrm"+nm+"<- function("+xst+","+yst+"){",[]];
+ out=concat(out,tmp);
+ if(fnrm=="",
+ tmp=Mkobjnrm(nm,fd,options);
+ tmp1=RSform(tmp);
+ tmp="Fnrmden"+nm+"("+xst+","+yst+"):="+tmp_2+";"; //190415
+ parse(tmp);
+ ,
+ tmp1=RSform(fnrm);
+// if(indexof(tmp1,"Out=")==0, // 16.05.09from
+// tmp1="Out="+tmp1;
+// ); // 16.05.09until
+ );
+ out=concat(out,[tmp1,[]]);
+ out=concat(out,["}",[]]);
+ tmp1=["Objthicksurf",
+ ["Fun"+nm,tmp2,tmp4,div1,div2,"Fnrm"+nm,thick1,thick2,side]];
+ out=concat(out,tmp1);
+ tmp2=[]; // 16.06.10from
+ forall(out,tmp1,
+ if(islist(tmp1),
+ tmp=apply(tmp1,if(isstring(#),Dq+#+Dq,Textformat(#,5)));
+ ,
+ if(isstring(tmp1),tmp=Dq+tmp1+Dq,tmp=Textformat(#,5));
+ );
+ tmp2=append(tmp2,tmp);
+ );
+ parse("oc"+nm+"="+tmp2+";"); //190415
+ println("cmd seq oc"+nm+" generated"); // 16.06.10until
+ OBJCMD=concat(OBJCMD,out);//16.11.29
+ out;
+);
+////%Mkobjthickcmd end////
+
+
+////%Mkobjpolycmd start////
+Mkobjpolycmd(nm,pd):=Mkobjpolycmd(nm,pd,[]);
+Mkobjpolycmd(nm,pd,optionorg):=(
+//help:Mkobjpolycmd("1",pd);
+//help:Mkobjpolycmd(options1=[internal([0,0,0])]);
+ regional(options,cmd,out,thick1,thick2,origin,
+ reL,stL,vtx,face,pt1,pt2,pt3,tmp,tmp1,tmp2);
+ thick1=0;
+ thick2=-0;
+ origin=[0,0,0];
+ options=select(optionorg,length(#)>0);
+ tmp=Divoptions(options);
+ reL=tmp_6;
+ stL=tmp_7;
+ tmp1=1;
+ forall(1..length(reL),
+ tmp=reL_#;
+ if(islist(tmp),
+ origin=tmp;
+ ,
+ if(tmp1==1,
+ thick1=tmp;
+ thick2=-tmp;
+ ,
+ thick2=tmp;
+ );
+ tmp1=tmp1+1; // 16.07.08
+ );
+ );
+ options=remove(options,reL);
+ forall(stL,
+ tmp=indexof(#,"+")+indexof(#,"-");
+ if(tmp>0,
+ side=#;
+ options=remove(options,[#]);
+ );
+ );
+ vtx=pd_1; //16.04.23from
+ if(length(pd)==2,face=pd_2,face=pd_3);
+ if(isstring(vtx),vtx=parse(vtx));
+ vtx=apply(vtx,if(isstring(#),parse(#),#)); // 16.06.18
+ if(isstring(face),face=parse(face));
+ forall(1..length(face),
+ tmp=face_#;
+ pt1=vtx_(tmp_1);// 16.06.18
+ pt2=vtx_(tmp_2);// 16.06.18
+ pt3=vtx_(tmp_(length(tmp)));// 16.06.18
+ tmp1=Crossprod(pt2-pt1,pt3-pt1);
+ tmp2=Dotprod(tmp1,pt1-origin);
+ if(tmp2<0,
+ face_#=reverse(face_#);
+ );
+ );
+ tmp1=RSform(textformat(vtx,5),2);//17.12.24from
+ tmp2=RSform(textformat(face,5),2);
+ out=["Objpolyhedron",[tmp1,tmp2]];//17.12.24until
+ tmp2=[]; // 16.06.10from
+ forall(out,tmp1,
+ if(islist(tmp1),
+ tmp=apply(tmp1,if(isstring(#),Dq+#+Dq,Textformat(#,5)));
+ ,
+ if(isstring(tmp1),tmp=Dq+tmp1+Dq,tmp=Textformat(#,5));
+ );
+ tmp2=append(tmp2,tmp);
+ );
+ parse("oc"+nm+"="+tmp2+";"); //190415
+ println("cmd seq oc"+nm+" generated"); // 16.06.10until
+ OBJCMD=concat(OBJCMD,out);//16.11.29
+ out;
+);
+////%Mkobjpolycmd end////
+
+////%Mkobjplatecmd start////
+Mkobjplatecmd(nm,pd):=Mkobjplatecmd(nm,pd,[]);
+Mkobjplatecmd(nm,pdorg,optionorg):=( // 16.06.18
+//help:Mkobjplatecmd("1",pd);
+//help:Mkobjplatecmd("1",vtxlist);
+//help:Mkobjplatecmd(options1=[0.05,-0.05]);
+ regional(pd,options,cmd,out,thick1,thick2,nn,pdn,
+ reL,vtx,face,nv,npttmp,tmp1,tmp2,tmp3,tmp4);
+ pd=pdorg;
+ if(Measuredepth(pd)==1,pd=[pd]);
+ if(Measuredepth(pd)==2,pd=[pd]);//16.10.04from
+ forall(1..length(pd),nn, // 16.06.19from
+ pdn=pd_nn;
+ vtx=pdn_1;
+ if(length(pdn)==1,face=[1..(length(vtx))],face=pdn_2);
+ vtx=apply(vtx,if(isstring(#),parse(#),#));
+ vtx=apply(vtx,if(ispoint(#),parse(text(#)+"3d"),#));
+ pd_nn=[vtx,face];//16.10.04until
+ ); // 16.06.19until
+ thick1=0.05;
+ thick2=-0.05;
+ options=select(optionorg,length(#)>0);
+ tmp=Divoptions(options);
+ reL=tmp_6;
+ tmp1=1;
+ forall(1..length(reL),
+ tmp=reL_#;
+ if(tmp1==1,
+ thick1=tmp;
+ thick2=-tmp;
+ ,
+ thick2=tmp;
+ );
+ tmp1=tmp1+1;// 16.07.08
+ );
+ options=remove(options,reL);
+ out=[];
+ forall(1..length(pd),npd,
+ forall(pd_npd_2,face,
+ vtx=apply(face,pd_npd_1_#);
+ npt=length(vtx);
+ tmp1=vtx_1;
+ tmp2=vtx_2;
+ tmp3=vtx_npt;
+ tmp=Crossprod(tmp2-tmp1,tmp3-tmp1);
+ nv=tmp/Dist3d(tmp);
+ tmp1=apply(vtx,#+thick1*nv);
+ tmp2=apply(vtx,#+thick2*nv);
+ vtx=concat(tmp1,tmp2);
+ tmp=apply(1..npt,#+npt);
+ tmp2=[1..npt,reverse(tmp)];
+ tmp=apply(1..(npt-1),[#,#+npt,#+npt+1,#+1]);
+ tmp2=concat(tmp2,tmp);
+ tmp=[npt,npt+npt,1+npt,1];
+ tmp2=append(tmp2,tmp);
+ tmp3=RSform(textformat(vtx,5),2);//17.12.24from
+ tmp4=RSform(textformat(tmp2,5),2);
+ out=concat(out,["Objpolyhedron",[tmp3,tmp4]]);//17.12.24until
+ );
+ );
+ tmp3="["; // 16.06.10from
+ forall(out,tmp1,
+ tmp2="";
+ if(isstring(tmp1),
+ tmp2=tmp2+Dq+tmp1+Dq+",[";
+ ,
+ tmp2=tmp2+Textformat(tmp1_1,5)+",";
+ tmp2=tmp2+Textformat(tmp1_2,5)+"],";
+ );
+ tmp3=tmp3+tmp2;
+ );
+ tmp3=substring(tmp3,0,length(tmp3)-1)+"]";
+ parse("oc"+nm+"="+tmp3+";"); //190415
+ println("cmd seq oc"+nm+" generated");
+ OBJCMD=concat(OBJCMD,out);//16.11.29
+ out;
+);
+////%Mkobjplatecmd end////
+
+////%Mkobjcrvcmd start////
+Mkobjcrvcmd(nm,pst):=Mkobjcrvcmd(nm,pst,[]);
+Mkobjcrvcmd(nm,pstorg,options):=(
+//help:Mkobjcrvcmd("1","sc3d1",[0.02,6,"xy"]);
+ regional(cmd,out,thick,poly,dir,phead,pst,
+ reL,stL,tmp,tmp1,tmp2,tmp3,tmp4,flg);
+ thick=0.02;
+ poly=6;
+ dir="xy";
+ tmp=Divoptions(options);
+ reL=tmp_6;
+ stL=select(tmp_7,length(#)>0);
+ forall(1..length(reL),
+ if(#==1,
+ thick=reL_1;
+ ,
+ poly=reL_2;
+ );
+ );
+ forall(stL,
+ dir=#;
+ );
+ dir="'"+dir+"'";
+ tmp=indexof(pstorg,"_");
+ if(tmp==0,
+ phead=pstorg;
+ ,
+ phead=substring(pstorg,0,tmp-1);
+ );
+ pst=pstorg;
+ out=[];
+ tmp1=select(GLIST,indexof(#,phead+"=")>0);
+ if(length(tmp1)==0, println(phead+" incorrect"));
+// out=[tmp1_1,[]];
+ out=[];
+ tmp1=parse(pst);
+ flg=0; // 16.04.23from
+ if(Measuredepth(tmp1)==2,flg=1);
+ if(Measuredepth(tmp1)==0,
+ if(islist(tmp1),flg=1);
+ );
+ if(flg==1, // 16.04.23until
+ if(!isstring(tmp1_1),
+ forall(1..length(tmp1),
+ tmp=["Objcurve",[pst+"[["+text(#)+"]]",thick,poly,dir]];//17.12.22
+ out=concat(out,tmp);
+ );
+ ,
+ forall(1..length(tmp1), // 16.11.14from
+ tmp=["Objcurve",[tmp1_#,thick,poly,dir]];
+ out=concat(out,tmp);
+ );// 16.11.14until
+ );
+ ,
+ tmp1=Chunderscore(pst);
+ tmp=["Objcurve",[tmp1,thick,poly,dir]];
+ out=concat(out,tmp);
+ );
+ tmp2=[]; // 16.06.10from
+ forall(out,tmp1,
+ if(islist(tmp1),
+ tmp=apply(tmp1,if(isstring(#),Dq+#+Dq,Textformat(#,5)));
+ ,
+ if(isstring(tmp1),tmp=Dq+tmp1+Dq,tmp=Textformat(#,5));
+ );
+ tmp2=append(tmp2,tmp);
+ );
+ parse("oc"+nm+"="+tmp2+";"); //190415
+ println("cmd seq oc"+nm+" generated"); // 16.06.10until
+ OBJCMD=concat(OBJCMD,out);//16.11.29
+ out;
+);
+////%Mkobjcrvcmd end////
+
+////%Mkobjsymbcmd start////
+Mkobjsymbcmd(symb,size,rot,dir,pos):=
+ Mkobjsymbcmd("",symb,size,rot,dir,pos,[]);
+Mkobjsymbcmd(Ar1,Ar2,Ar3,Ar4,Ar5,Ar6):=(
+ if(isstring(Ar2),
+ Mkobjsymbcmd(Ar1,Ar2,Ar3,Ar4,Ar5,Ar6,[]);
+ ,
+ Mkobjsymbcmd("",Ar1,Ar2,Ar3,Ar4,Ar5,Ar6);
+ );
+);
+Mkobjsymbcmd(path,symborg,size,rot,dir,pos,optionorg):=(
+//help:Mkobjsymbcmd("x",0.5,0,V3d,A3d);
+//help:Mkobjsymbcmd("P",0.5,0,V3d,A3d);
+//help:Mkobjsymbcmd(options=[0.05,4,"'yz'"]);
+ regional(symb,options,opbez,eqL,reL,stL,dtLstr,dtL,dt,
+ alpha,Alpha,out,mx,Mx,my,My,center,tmp,tmp1,tmp2);
+ alpha="abcdefghijklmnopqrstuvwxyz";
+ Alpha=Toupper(alpha);
+ symb=symborg;
+ options=optionorg;
+ opbez=["nodisp"];
+ tmp=Divoptions(options);
+ eqL=tmp_5;
+ reL=tmp_6;
+ stL=tmp_7;
+ opbez=concat(opbez,eqL);
+ options=remove(options,eqL);
+ tmp1=[0.05,4,"'yz'"];
+ if(length(reL)==0,
+ options=concat(options,tmp1_(1..2));
+ );
+ if(length(reL)==1, // debugged 16.06.18
+ options=concat(options,[tmp1_2]);
+ );
+ if(length(stL)==0,
+ options=concat(options,[tmp1_3]);
+ );
+ out=[];
+ tmp=parse(symb);
+ if((islist(symb)) % (islist(tmp)), //17.12.24from
+ if(islist(tmp),
+ dtL=[symb];
+ ,
+ dtL=symb;
+ ); //17.12.24until
+ ,
+ tmp=substring(symb,0,1);
+ if(tmp>="a" & tmp<="z",tmp1=tmp+"s");
+ if(tmp>="A" & tmp<="Z",
+ tmp=indexof(Alpha,tmp);
+ tmp=substring(alpha,tmp-1,tmp);
+ tmp1=tmp+"c";
+ );
+ if(length(symb)==1,
+ if(symb>"Z",
+ symb=tmp1+"i";
+ ,
+ symb=tmp1+"r";
+ );
+ );
+ if(length(symb)==2,symb=tmp1+substring(symb,1,2));
+ if(length(path)>0, // 16.04.23from
+ setdirectory(path);
+ ,
+ tmp=Dirhead+"/data/fontF"; // 16.05.10
+ setdirectory(tmp);
+ ); // 16.04.23until
+ dtL=Readbezier(symb,opbez);
+ dtLstr=dtL; //17.12.23
+ setdirectory(Dirwork);
+ forall(dtL,dt,
+ tmp=dt+"=";
+ tmp1=select(GLIST,indexof(#,tmp)>0);
+ if(length(tmp1)>0,//17.12.23from
+ tmp1=tmp1_1;
+ out=concat(out,[tmp1,[]]);
+ ); //17.12.23until
+ );
+ mx=100;Mx=-100;my=100;My=-100;
+ forall(dtL,dt,
+ tmp=apply(parse(dt),#_1);
+ mx=min(append(tmp,mx));
+ Mx=max(append(tmp,Mx));
+ tmp=apply(parse(dt),#_2);
+ my=min(append(tmp,my));
+ My=max(append(tmp,My));
+ );
+ center=[(mx+Mx)/2,(my+My)/2];
+ tmp1=[];
+ forall(dtL,dt,
+ Rotatedata(dt,dt,rot,[center,"nodisp"]);
+ Translatedata(dt,"rt"+dt,-center,["nodisp"]);
+ tmp1=append(tmp1,"tr"+dt);
+ );
+ dtL=tmp1;
+ forall(dtL,dt,
+ tmp=dt+"=";
+ tmp1=select(GLIST,indexof(#,tmp)>0);
+ if(length(tmp1)>0, //17.12.23from
+ tmp1=tmp1_1;
+ out=concat(out,[tmp1,[]]);
+ ); //17.12.23until
+ );
+ );
+ tmp1=text(options);
+ tmp1=substring(tmp1,1,length(tmp1)-1);
+ tmp2=""; //17.12.23from
+ forall(dtL,
+ tmp2=tmp2+","+#;
+ );
+ tmp2="list("+substring(tmp2,1,length(tmp2))+")"; //17.12.23until
+ out=concat(out,[
+ "Sd=Symb3data",[tmp2,size,0,dir,pos], //17.12.23
+ "Objsymb(Sd,"+tmp1+")",[]
+ ]);
+ tmp2=[]; // 16.06.10from
+ forall(out,tmp1,
+ if(islist(tmp1),
+ tmp=apply(tmp1,if(isstring(#),Dq+#+Dq,Textformat(#,5)));
+ ,
+ if(isstring(tmp1),tmp=Dq+tmp1+Dq,tmp=Textformat(#,5));
+ );
+ tmp2=append(tmp2,tmp);
+ );
+ parse("oc"+symborg+"="+tmp2+";"); //190415
+// println("cmd seq oc"+symborg+" generated"); // 16.06.10until
+ OBJCMD=concat(OBJCMD,out);//16.11.29
+ out;
+);
+////%Mkobjsymbcmd end////
+
+////%Concatcmd start////
+Concatcmd(cmdlist):=(
+//help:Concatcmd([cmdL1,cmdL2]);
+ regional(out);
+ out=[];
+ forall(cmdlist,
+ out=concat(out,#);
+ );
+ out;
+);
+////%Concatcmd end////
+
+WritetoF(fname,cmdL):=(
+// help:WritetoF("outdata",cmdL);
+ regional(tmp,tmp1,tmp2,filename,wfilename);
+ if(indexof(fname,".")==0,
+ filename=fname+".input";
+ ,
+ filename=fname;
+ );
+ wfilename=replace(filename,".input",".txt");
+ SCEOUTPUT = openfile(filename);
+ forall(1..(length(cmdL)),
+ tmp1=cmdL_#;
+ if(substring(tmp1,0,1)=="[",
+ tmp1=tmp1+" --##";
+ println(SCEOUTPUT,tmp1);
+ ,
+ println(SCEOUTPUT,tmp1);
+ println(SCEOUTPUT," --##");
+ );
+ );
+ closefile(SCEOUTPUT);
+);
+
+kcF(fname):=kcF(fname,[]);
+kcF(fname,optionorg):=(
+ regional(options,tmp,tmp1,tmp2,eqL,strL,
+ filename,wfile,flg);
+ if(indexof(fname,".")==0,
+ filename=fname+".input";
+ ,
+ filename=fname;
+ );
+ wfile=replace(filename,".input",".sfort");
+ options=optionorg;
+ tmp=Divoptions(options);
+ eqL=tmp_5;
+ strL=tmp_7;
+ forall(eqL,
+ tmp=indexof(#,"=");
+ tmp1=substring(#,0,tmp-1);
+ tmp2=substring(#,tmp,length(#));
+ );
+ flg=0;
+ forall(strL,
+ if(Toupper(substring(#,0,1))=="R",
+ flg=0;
+ options=remove(options,[#]);
+ );
+ if(Toupper(substring(#,0,1))=="M",
+ flg=1;
+ );
+ );
+ if(flg==0,
+ tmp2=replace(filename,".input",".sfort");
+ tmp1=load(tmp2);
+ if(length(tmp1)==0,
+ flg=1;
+ );
+ );
+ if(flg==1,
+ tmp1="";
+ if(iswindows(),
+ tmp2=Batparent;
+ ,
+ tmp2=Shellparent;
+ );
+ flg=0;
+ forall(reverse(1..length(tmp2)),
+ if(flg==0,
+ tmp=substring(tmp2,#-1,#);
+ if(tmp=="/" % tmp=="\", // 14.01.15
+ tmp1=substring(tmp2,0,#-1);
+ tmp2=substring(tmp2,#,length(tmp2));
+ flg=1;
+ );
+ );
+ );
+ if(length(tmp1)>0,
+ setdirectory(tmp1);
+ );
+ if(iswindows(),
+// SCEOUTPUT=openfile(wfile);
+// println(SCEOUTPUT,"");
+// closefile(SCEOUTPUT);
+ SCEOUTPUT = openfile("kc.bat");
+ tmp=Dq+PathF+"\bash"+Dq+" --login -i -c "+Dq+"/cygdrive/";
+ tmp1=replace(Dirwork,"\","/");
+ if(indexof(tmp1,":")==0,
+ tmp=tmp+"c/"+tmp1+"/kc.sh"+Dq;
+ ,
+ tmp1=replace(tmp1,":","");
+ tmp=tmp+tmp1+"/kc.sh"+Dq;
+ );
+ println(SCEOUTPUT,tmp);
+ println(SCEOUTPUT,"exit 0");
+ closefile(SCEOUTPUT);
+ ,
+ if(ismacosx(), //181125from
+ SCEOUTPUT = openfile("kc.command");
+ ,
+ SCEOUTPUT = openfile("kc.sh");
+ ); //181125to
+ Lf=unicode("10",base->10);
+ print(SCEOUTPUT,"#!/bin/sh"+Lf);
+ tmp1=replace(Dirwork,"\","/");
+ if(indexof(tmp1,":")==0,
+ tmp="cd "+Dq+"/cygdrive/c/"+tmp1+Dq;
+ ,
+ tmp1=replace(tmp1,":","");
+ tmp="cd "+Dq+"/cygdrive/"+tmp1+Dq;
+ );
+ print(SCEOUTPUT,tmp+Lf);
+ tmp=Dq+"/opt/fricas/bin/fricas";
+ tmp=tmp+Dq+" -nox -eval ";
+ tmp=tmp+Dq+")read "+filename+Dq;
+// tmp=tmp+" > "+Dq+wfile+Dq;
+ print(SCEOUTPUT,tmp+Lf);
+ print(SCEOUTPUT,"exit 0"+Lf);
+ closefile(SCEOUTPUT);
+ println(kc(Dirwork+Batparent,Dirlib,Fnametex));// 16.05.29,06.05
+ ,
+ if(ismacosx(), //181125from
+ SCEOUTPUT = openfile("kc.command");
+ ,
+ SCEOUTPUT = openfile("kc.sh");
+ ); //181125to
+ println(SCEOUTPUT,"#!/bin/sh");
+ println(SCEOUTPUT,"cd "+Dq+Dirwork+Dq);
+ tmp=Dq+PathF+Dq+" -nox -eval "+Dq+")read "+filename+Dq;
+// tmp=tmp+" > "+wfile;
+ println(SCEOUTPUT,tmp);
+ println(SCEOUTPUT,"exit 0");
+ closefile(SCEOUTPUT);
+ println(kc(Dirwork+Shellparent,Mackc+Dirlib,Fnametex));// 16.05.29,06.05
+ );
+ setdirectory(Dirwork);
+ );
+);
+
+CalcbyF(name,cmd):=CalcbyM(name,cmd,[]);
+CalcbyF(name,cmd,optionorg):=(
+//help:CalcbyF("a",cmdL);
+//help:CalcbyF(options= ["m/r","Wait=5"]]);
+ regional(options,tmp,tmp1,tmp2,tmp3,tmp4,strL,eqL,
+ flg,wflg,file,nc,arg,cmdF,cmdlist,wfile,Alpha,
+ waiting,num,dig,varlist);
+ options=optionorg;
+ tmp=divoptions(options);
+ eqL=tmp_5;
+ strL=tmp_7;
+ waiting=5;
+ dig=5;
+ forall(eqL,
+ tmp=indexof(#,"=");
+ tmp1=Toupper(substring(#,0,1));
+ tmp2=substring(#,tmp,length(#));
+ if(tmp1=="W",
+ waiting=parse(tmp2);
+ options=remove(options,[#]);
+ );
+ );
+ file=Fhead+name+".input";
+ wfile=Fhead+name+".sfort";
+ wflg=0;
+ forall(strL,
+ tmp=Toupper(substring(#,0,1));
+ if(tmp=="M",
+ wflg=1;
+ options=remove(options,[#]);
+ );
+ if(tmp=="R",
+ wflg=-1;
+ options=remove(options,[#]);
+ );
+ );
+ cmdF=cmd;
+ tmp1=")set breakmode quit";
+ tmp2=")set output fortran on";
+ tmp3=")set fortran precision single";
+ cmdlist=[tmp1,tmp2,tmp3];
+ tmp=")set output fortran "+wfile;
+ cmdlist=append(cmdlist,tmp);
+ forall(1..floor(length(cmdF)/2),nc, //17.5.18
+ tmp1=cmdF_(2*nc-1);
+ tmp1=replace(tmp1,LFmark,""); // 16.06.12
+ tmp2=cmdF_(2*nc); // list of argments
+ if(nc<length(cmdF)/2,
+ tmp3="";
+ forall(tmp2,arg,
+ if(isstring(arg),
+ tmp3=tmp3+arg+",";
+ ,
+ tmp3=tmp3+textformat(arg,dig)+",";
+ );
+ );
+ if(length(tmp3)>0,
+ tmp3=tmp1+
+ "("+substring(tmp3,0,length(tmp3)-1)+")";
+ ,
+ tmp3=tmp1;
+ );
+ cmdlist=append(cmdlist,tmp3);
+ ,
+ if(indexof(tmp1,"::")==0,
+ varlist=[tmp1];
+ ,
+ varlist=tokenize(tmp1,"::");
+ );
+ forall(varlist,
+ cmdlist=append(cmdlist,"["+#+"]");
+ );
+ );
+ );
+ cmdlist=concat(cmdlist,["111111*1",")quit"]);
+ if(wflg==0,
+ tmp1=load(file);
+ if(length(tmp1)==0,
+ wflg=1;
+ ,
+ if(indexof(tmp1," --##")==0, // 15.11.26
+ wflg=1;
+ ,
+ tmp1=tokenize(tmp1," --##");
+ tmp1=tmp1_(1..(length(tmp1)-1));
+ if(length(tmp1)!=length(cmdlist),
+ wflg=1;
+ ,
+ tmp=select(1..length(tmp1),tmp1_#!=cmdlist_#);
+ if(length(tmp)>0, wflg=1);
+ );
+ );
+ );
+ );
+ if(wflg==0,wflg=-1);
+ if(wflg==1,
+ if(length(wfile)>0,
+ SCEOUTPUT=openfile(wfile);
+ println(SCEOUTPUT,"");
+ closefile(SCEOUTPUT);
+ );
+ WritetoF(file,cmdlist);
+ kcF(file,concat(options,["m"]));
+ );
+ Alpha="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
+ flg=0;
+ tmp1=floor(waiting*1000/WaitUnit);
+ repeat(tmp1,
+ if(flg==0,
+ tmp1=load(wfile);
+ if(wflg==1,wait(WaitUnit));
+ tmp=indexof(tmp1,"Error")+indexof(tmp1,"find");
+ if(tmp>0,
+ println("Some error(s) occurred");
+ tmp=tokenize(tmp1," --##");
+ forall(tmp,
+ if(indexof(#,"Error")+indexof(#,"find")>0,
+ println(tmp_(length(tmp)));
+ );
+ );
+ flg=2;
+ );
+ if(indexof(tmp1,"111111")>0,
+ tmp1=replace(tmp1," &","");
+ tmp3="[";
+ forall(1..length(varlist),
+ tmp=indexof(tmp1,"["+varlist_#+"]");
+ tmp1=substring(tmp1,tmp,length(tmp1));
+ tmp=indexof(tmp1,"(1)=");
+ tmp1=substring(tmp1,tmp+3,length(tmp1));
+ tmp=indexof(tmp1," ");
+ tmp3=tmp3+Dq+substring(tmp1,0,tmp-1)+Dq+",";
+ );
+ tmp3=replace(tmp3,"**","^");
+ tmp3=replace(tmp3,".0","");
+ tmp4="";
+ forall(1..length(tmp3),
+ tmp=substring(tmp3,#-1,#);
+ tmp1=indexof(Alpha,tmp);
+ if(tmp1>0,
+ tmp4=tmp4+unicode(text(tmp1+96),base->10);
+ ,
+ if(tmp==" " % tmp=="&",
+ ,
+ tmp4=tmp4+tmp;
+ );
+ );
+ );
+ tmp=name+"="+substring(tmp4,0,length(tmp4)-1)+"];"; //190415
+ parse(tmp);
+ tmp=parse(name);
+ if(length(tmp)==1,
+ tmp1=substring(tmp4,1,length(tmp3)-1);
+ parse(name+"="+tmp1+";"); //190415
+ );
+ flg=1;
+ tmp2=#*WaitUnit/1000;
+ ,
+ if(wflg==-1,
+ flg=-1;
+ ,
+ wait(WaitUnit);
+ );
+ );
+ );
+ );
+ if(flg<=0,
+ if(flg==-1,
+ println(wfile+" does not exist");
+ ,
+ tmp="("+text(waiting)+" s )";
+ tmp1=load(wfile);
+ if(length(tmp1)>0,
+ println(wfile+" incomplete"+tmp); // 2016.02.24
+ ,
+ println(wfile+" not generated "+tmp);
+ );
+ );
+ ,
+ if(flg==1,
+ println(" Succeeded "+name+" ("+text(tmp2)+" sec)");
+ );
+ );
+);
+
+Frfun(name,fun,argL):=Frifun(name,fun,argL,[]);
+Frfun(name,fun,argL,optionorg):=Frifun(name,fun,argL,optionorg);
+Frifun(name,fun,argL):=Frifun(name,fun,argL,[]);
+Frifun(name,fun,argL,optionorg):=(
+//help:Frfun("1","integrate",["sin(x)^3","x"],[""]);
+//help:Mxfun(options=["Disp=y"]);
+ regional(nm,options,eqL,disp,cmdL,tmp,tmp1,tmp2);
+ nm="fri"+name;
+ options=optionorg;
+ tmp=divoptions(options);
+ disp=1;
+ eqL=tmp_5;
+ forall(eqL,
+ tmp=indexof(#,"=");
+ tmp1=Toupper(substring(#,0,1));
+ tmp2=substring(#,tmp,length(#));
+ if(tmp1=="D" ,
+ tmp=Toupper(substring(tmp2,0,1));
+ if((tmp=="F") % (tmp=="N"),
+ disp=0;
+ );
+ options=remove(options,[#]);
+ );
+ );
+ cmdL=[];
+ cmdL=concat(cmdL,[
+ "ans"+":="+fun,argL,
+ "ans",[]
+ ]);
+ CalcbyF(nm,cmdL,options);
+ if(disp==1, // 15.11.24
+ println(nm+" is : ");
+ println(parse(nm));
+ );
+ parse(nm);
+);
+
+///////////////// C function //////////////////
+
+Cformold(strorg):=(
+//help:Cform(str);
+ regional(str,ter,out,hat,pare,ns,ne,nn,jj,flg,flg2,
+ lv,str1,str2,tmp,tmp1,tmp2);
+ ter=["+","-","*","/","(",")","="]; //180517
+ str=replace(strorg,"pi","M_PI");
+ hat=Indexall(str,"^");
+ pare=Bracket(str,"()");
+ out="";
+ ns=0;
+ forall(hat,nn,
+ tmp=substring(str,nn-2,nn-1);
+ if(tmp==")",
+ tmp1=substring(str,ns,nn-1);
+ tmp2=Parlevel(tmp1);
+ tmp=tmp2_(length(tmp2))_2;
+ lv=select(tmp2,#_2==-tmp);
+ tmp=lv_1_1;
+ out=out+substring(str,ns,ns+tmp-1);
+ str1=substring(str,ns+tmp,nn-2);
+ ,
+ tmp=0;//180517
+ flg=0;
+ tmp2=reverse(ns..(nn-1));
+ forall(tmp2,jj,
+ if(flg==0,
+ tmp1=substring(str,jj-1,jj);
+ if(contains(ter,tmp1),
+ tmp=jj;
+ flg=1;
+ );
+ );
+ );
+ tmp1=substring(str,ns,tmp);
+ out=out+tmp1;
+ str1=substring(str,tmp,nn-1);
+ );
+ tmp=substring(str,nn,nn+1);
+ if(tmp=="(",
+ tmp1=substring(str,nn,length(str));
+ tmp2=Parlevel(tmp1);
+ lv=select(tmp2,#_2==-1);
+ tmp=lv_1_1;
+ str2=substring(tmp1,1,tmp-1);
+ ns=nn+tmp;
+ ,
+ flg=0;tmp=0;
+ forall(nn..(length(str)),jj,
+ if(flg==0,
+ tmp1=substring(str,jj,jj+1);
+ if((length(tmp1)==0)%(contains(ter,tmp1)),
+ tmp=jj;
+ flg=1;
+ );
+ );
+ );
+ str2=substring(str,nn,tmp);
+ ns=nn+1;
+ );
+ out=out+"pow("+str1+","+str2+")";
+ );
+ str=out+substring(str,ns,length(str));
+ str=str+"#";
+ ter=apply(0..9,text(#));
+ ter=append(ter,".");
+ out="";
+ tmp=substring(str,0,1);
+ if(contains(ter,tmp),
+ flg=1;out="";tmp1=tmp;
+ ,
+ flg=0;out=tmp;tmp1="";
+ );
+ forall(2..(length(str)),
+ tmp=substring(str,#-1,#);
+ if(contains(ter,tmp),
+ if(flg==1,
+ tmp1=tmp1+tmp;
+ ,
+ tmp1=tmp;
+ );
+ flg=1;
+ ,
+ if(flg==1,
+ if(indexof(tmp1,".")==0,
+ tmp1=tmp1+".0";
+ );
+ out=out+tmp1+tmp;
+ ,
+ out=out+tmp;
+ );
+ tmp1="";flg=0;
+ );
+ );
+ out=substring(out,0,length(out)-1);
+ out;
+);
+
+////%Cform start////
+Cform(strorg):=( //181106
+//help:Cform(str);
+ regional(str,str2,out,ter,num,hat,pare,jj,ns,ne,nsa,nea,flg,flg2,tmp,tmp1,tmp2);
+ ter=["+","-","*","/","(",")","="]; //180517
+ str=replace(strorg,"pi","M_PI");
+ num=apply(0..9,text(#)); //181107from
+ num=append(num,".");
+ flg=0;
+ tmp1=str+"/";
+ tmp2="";
+ str="";
+ forall(1..(length(tmp1)),
+ tmp=substring(tmp1,#-1,#);
+ if(contains(num,tmp),
+ if(flg==0,
+ tmp2=tmp;
+ flg=1;
+ ,
+ tmp2=tmp2+tmp;
+ );
+ ,
+ if(flg==1,
+ if(indexof(tmp2,".")==0, tmp2=tmp2+".0");
+ str=str+tmp2+tmp;
+ flg=0;
+ ,
+ str=str+tmp;
+ );
+ );
+ );
+ str=substring(str,0,length(str)-1); //181107to
+ out="";
+ flg=0;
+ forall(1..100,jj,
+ if(flg==0,
+ hat=indexof(str,"^");
+ if(hat==0,
+ out=out+str;
+ flg=1;
+ ,
+ ne=hat-1;
+ if(substring(str,ne-1,ne)==")",
+ ne=ne-1;
+ pare=Bracket(str,"()");
+ tmp=select(pare,#_1==hat-1);
+ tmp=tmp_1_2;
+ tmp1=select(pare,(#_1<hat)&(#_2==-tmp));
+ ns=tmp1_(length(tmp1))_1+1;
+ nsa=ns-1;
+ ,
+ flg2=0;
+ forall(reverse(1..ne),
+ if(flg2==0,
+ if(contains(ter,substring(str,#-1,#)),
+ ns=#+1;
+ flg2=1;
+ );
+ );
+ );
+ if(flg2==0,ns=1);
+ nsa=ns;
+ );
+ str2="pow("+substring(str,ns-1,ne)+",";
+ ns=hat;
+ if(substring(str,ns,ns+1)=="(",
+ ns=ns+2;
+ pare=Bracket(str,"()");
+ tmp=select(pare,#_1==hat+1);
+ tmp=tmp_1_2;
+ tmp1=select(pare,(#_1>hat)&(#_2==-tmp));
+ ne=tmp1_1_1-1;
+ nea=ne+1;
+ ,
+ ns=ns+1;
+ flg2=0;
+ forall(ns..(length(str)),
+ if(flg2==0,
+ if(contains(ter,substring(str,#-1,#)),
+ ne=#-1;
+ flg2=1;
+ );
+ );
+ );
+ if(flg2==0,ne=length(str));
+ nea=ne;
+ );
+ str2=str2+substring(str,ns-1,ne)+")";
+ out=out+substring(str,0,nsa-1)+str2;
+ str=substring(str,nea,length(str));
+ );
+ );
+ );
+ out;
+);
+////%Cform end////
+
+////%ConvertFdtoC start////
+ConvertFdtoC(Fd):=ConvertFdtoC(Fd,["x","y","z"]);
+ConvertFdtoC(Fd,name):=(
+//help:ConvertFd(Fd);
+ regional(FdL,FdC,uvar,vvar,tmp,tmp1);
+ FdL=Fullformfunc(Fd);
+ tmp=indexof(FdL_5,"="); //180303from
+ uvar=substring(FdL_5,0,tmp-1);
+ tmp=indexof(FdL_6,"=");
+ vvar=substring(FdL_6,0,tmp-1);
+ tmp1=apply(2..6,Assign(FdL_#,uvar,"u"));
+ tmp1=apply(tmp1,Assign(#,vvar,"v"));
+ tmp1=concat(tmp1,FdL_(7..8));
+ FdC=apply(1..3,name_#+"="+Cform(tmp1_#));
+ FdC=concat(FdC,[Cform(tmp1_4),Cform(tmp1_5)]);
+ FdC=concat(FdC,[tmp1_6]);
+);
+////%ConvertFdtoC end////
+
+////%Startsurf start////
+Startsurf():=StartsurfC();
+Startsurf(Arg):=StartsurfC(Arg);
+Startsurf(Nplist,Dsizelist,Epslist):=StartsurfC("",Nplist,Dsizelist,Epslist); //181116
+Startsurf(restr,Nplist,Dsizelist,Epslist):=StartsurfC(restr,Nplist,Dsizelist,Epslist);
+StartsurfC():=StartsurfC("",[50,50],[1500,500,200],[0.01,0.1]);//180611renewed
+StartsurfC(Arg):=(
+ regional(tmp);
+ if(isstring(Arg),
+ StartsurfC(Toupper(Arg),[50,50],[1500,500,200],[0.01,0.1]);
+ ,
+ tmp=max(Arg);
+ if(tmp>=500,
+ StartsurfC("",[50,50],Arg,[0.01,0.1]);
+ ,
+ if(tmp>1,
+ StartsurfC("",Arg,[1500,500,200],[0.01,0.1]);
+ ,
+ StartsurfC("",[50,50],[1500,500,200],Arg);
+ );
+ );
+ );
+);
+StartsurfC(restr,Nplist,Dsizelist,Epslist):=(//180501
+//help:Startsurf();
+//help:Startsurf("reset");
+//help::Startsurf([0.01,0.1]);
+//help:Startsurf([50,50],[1500,500,200],[0.01,0.1]);
+//help:Startsurf([50],[1500,500],[0.01,0.1]);
+ regional(divL,sizeL,epsL);
+ StyleListC=[]; //181107
+ CommandListC=[];//180608(2lines)
+ FuncListC=[];
+ if(substring(restr,0,1)=="R", //180611(3lines)
+ GLIST=[];
+ );
+ divL=Nplist; sizeL=Dsizelist; epsL=Epslist;
+ if(length(divL)==0,divL=[50]);
+ if(length(divL)==1,divL=append(divL,divL_1));
+ if(length(sizeL)==0,sizeL=[1500]); //180610from
+ if(length(sizeL)==1,sizeL=append(sizeL,500));
+ if(length(sizeL)==2,sizeL=append(sizeL,200));
+ sizeL=prepend(5000,sizeL); //180610to
+ if(length(epsL)==0,epsL=[0.01]);
+ if(length(epsL)==1,epsL=append(epsL,0.1));
+ epsL=prepend(0.00001,epsL);
+ ConstantListC=[divL,sizeL,epsL];
+);
+////%Startsurf end////
+
+////%Contsurf start////
+Contsurf():=ContsurfC("");
+Contsurf(restr):=ContsurfC(restr);
+ContsurfC(restr):=(//181101
+//help:Contsurf();
+ regional(cL,tmp,tmp1,tmp2);
+ if(substring(restr,0,1)=="R",
+ GLIST=[];
+ );
+ cL=CommandListC;
+ cL=cL_(1..(length(cL)-1));
+ CommandListC=cL;
+);
+////%Contsurf end////
+
+////%kcC start////
+kcC():=kcC(FheadC);
+kcC(cname):=(
+ regional(tmp, tmp1,flg,rfile);
+ rfile=cname+"end.txt"; //180517
+ if(iswindows(),
+ SCEOUTPUT = openfile("kc.bat");
+ println(SCEOUTPUT,"set path="+Dirwork);
+ tmp=Indexall(PathC,"\");
+ if(length(tmp)==0, tmp=ndexall(PathC,"/"));
+ tmp1=substring(PathC,0,tmp_(length(tmp))-1);
+ println(SCEOUTPUT,"cd "+tmp1);
+ tmp=PathC+" %path%\"+cname+".c";
+ tmp=tmp+" -o %path%\main.exe";
+ println(SCEOUTPUT,tmp);
+ println(SCEOUTPUT,"cd "+Dq+Dirwork+Dq);
+ println(SCEOUTPUT,"%path%\main.exe");
+ println(SCEOUTPUT,"echo ////> %path%\"+rfile);
+ println(SCEOUTPUT,"exit");
+ closefile(SCEOUTPUT);
+ tmp=cname+".txt";
+ println(kc(Dirwork+Batparent,Mackc+Dirlib,tmp));
+ ,
+ if(ismacosx(), //181125from
+ SCEOUTPUT = openfile("kc.command");
+ ,
+ SCEOUTPUT = openfile("kc.sh");
+ ); //181125to
+ println(SCEOUTPUT,"#!/bin/sh");
+ println(SCEOUTPUT,"cd "+Dq+Dirwork+Dq);
+ tmp=PathC+" "+cname+".c -o main.out -lm"; //190123
+ println(SCEOUTPUT,tmp);
+ println(SCEOUTPUT,"./main.out");
+ println(SCEOUTPUT,"echo ////>"+rfile);
+ println(SCEOUTPUT,"exit 0");
+ closefile(SCEOUTPUT);
+ tmp=cname+".txt";
+ println(kc(Dirwork+Shellparent,Mackc+Dirlib,tmp));
+ );
+ SCEOUTPUT=openfile(wfile);
+ println(SCEOUTPUT,"");
+ closefile(SCEOUTPUT);
+ flg=0;
+ repeat(floor(10*10000/WaitUnit), //180615
+ if(flg==0,
+ tmp1=load(wfile);
+ if(substring(tmp1,0,4)=="////",
+ flg=1;
+ );
+ wait(WaitUnit);
+ );
+ );
+ if(flg==0,
+ println("kcC not completed");
+ ,
+ println("kcC succeeded");
+ );
+);
+////%kcC end////
+
+ReaddataCold(var, fname):=ReaddataC(var, fname,[]);
+ReaddataC(var, fname,options):=(
+ regional(file,dt,name,str,tmp,tmp1,opstr,gout, out3,out2);
+ if(indexof(fname,".")==0,
+ file=fname+".txt";
+ name=fname;
+ ,
+ file=fname;
+ tmp=indexof(fname,".");
+ name=substring(fname,0,tmp-1);
+ );
+ tmp=Divoptions(options);
+ opstr=tmp_(length(tmp)-1);
+ gout=ReadOutData(file);
+ GLIST=Append(GLIST,"Tmpstr=ReadOutData("+Dq+file+Dq+")");
+ if(substring(var,length(var)-1,length(var))!="h",
+ if(length(parse(gout_1))>0,
+ Projpara(var+"3d",options);
+ );
+ ,
+ if(length(parse(gout_2))>0,
+ Projpara(var+"3d",options);
+ );
+ );//17.06.16until
+);
+
+////%ReaddataC start////
+ReaddataC(fnameorg):=(
+ regional(tmp,tmp1,fname,data,out);
+ fname=fnameorg;
+ if(indexof(fname,".")==0, fname=fname+".txt");
+ data=load(fname);
+ data=tokenize(data," -99999");
+ out=[];
+ tmp1=[];
+ forall(1..(length(data)-1),
+ tmp=replace(data_#," ",",");
+ if(indexof(tmp,"99999.")==0,
+ tmp="["+replace(data_#," ",",")+"]";
+ tmp=parse(tmp);
+ tmp1=append(tmp1,tmp);
+ ,
+ out=append(out,tmp1);
+ tmp1=[];
+ );
+ );
+ if(length(tmp1)>0,out=append(out,tmp1));
+ out;
+);
+////%ReaddataC end////
+
+////%WritedataC start////
+WritedataC(fnameorg,dataorg):=(
+//help:WritedataC(filename, 3ddata);
+ regional(tmp,fname,data,kk,nn,pt);
+ data=dataorg;
+ if(isstring(data),data=parse(data));
+ if(Measuredepth(data)==1,data=[data]);
+ fname=fnameorg;
+ if(indexof(fname,".")==0, fname=fname+".txt");
+ SCEOUTPUT=openfile(fname);
+ forall(1..(length(data)),kk,
+ forall(1..(length(data_kk)),nn,
+ pt=apply(1..3,Sprintf(data_kk_nn_#,5));
+ tmp=pt_1+" "+pt_2+" "+pt_3+" -99999";
+ print(SCEOUTPUT,tmp);
+ if(nn<length(data_kk), //180426from
+ println(SCEOUTPUT,"");
+ );//180426to
+ );
+ if(kk<length(data),
+ println(SCEOUTPUT,"");//180426
+ println(SCEOUTPUT,"99999.00000 2.00000 0.00000 -99999");
+ );
+ );
+ closefile(SCEOUTPUT);
+);
+////%WritedataC end////
+
+DisplayC():=DisplayC(DispC);
+DisplayC(name,options):=DisplayC([name,options]);
+DisplayC(dispc):=(
+//help:DisplayC("out",["Color=[1,0,0]");
+//help:DispC(options=["dr", "Color=[0,0,0]"])
+ regional(tmp,tmp1,cflg,var, file,options,eqL,opcindy,color);
+ forall(1..(floor(length(dispc)/2)), //17.05.18
+ var=dispc_(2*#-1); // 17.05.24
+ if(substring(var,length(var)-1,length(var))!="h",//17.06.09(5lines)
+ file=FheadC+var+".txt";
+ ,
+ file=FheadC+substring(var,0,length(var)-1)+".txt";
+ );
+ options=dispc_(2*#);
+ cflg=0;
+ tmp=Divoptions(options);//17.06.18from
+ eqL=tmp_5;
+ opcindy=tmp_(length(tmp));
+ forall(eqL,
+ if(Toupper(substring(#,0,1))=="C",
+ tmp=indexof(#,"=");
+ color=substring(#,tmp,length(#));
+ if(substring(color,0,1)=="[",
+ color=parse(color);
+ if(length(color)==3,
+ tmp1="color->"+text(color);
+ ,
+ tmp=Colorcode("rgb","cmyk",color);
+ tmp1="color->"+text(tmp);
+ );
+ options=append(options,tmp1);
+ );
+ options=remove(options,[#]);
+ cflg=1;
+ );
+ );
+ if(cflg==1,
+ Texcom("{");
+ Setcolor(color);
+ );
+ ReaddataC(var,file,options);// 17.05.24
+ if(cflg==1,
+ Texcom("}");
+ );
+ );
+);
+
+////%Cheadsurf start////
+Cheadsurf():=(
+ regional(cmd,jj,divL,sizeL,epsL,nf,var1,var2,tmp,tmp1,tmp2);
+ divL=ConstantListC_1;
+ sizeL=ConstantListC_2;
+ epsL=ConstantListC_3;
+ cmd=[];
+ tmp="const double XMIN="+Sprintf(XMIN,6);
+ tmp=tmp+",XMAX="+Sprintf(XMAX,6)+";";
+ cmd=append(cmd,tmp);
+ tmp="const double THETA="+Sprintf(THETA,6);
+ tmp=tmp+",PHI="+Sprintf(PHI,6)+";";
+ cmd=append(cmd,tmp);
+ tmp=" //THETA:"+Sprintf(THETA*180/pi,2);
+ tmp=tmp+", PHI:"+Sprintf(PHI*180/pi,2)+";";
+ cmd=append(cmd,tmp);
+ tmp1=apply(divL,text(#));
+ tmp="const int Mdv="+tmp1_1+",Ndv="+tmp1_2+";";
+ cmd=append(cmd,tmp);
+ tmp1=apply(sizeL,text(#));
+ tmp="#define DsizeLL "+tmp1_1;
+ cmd=append(cmd,tmp);
+ tmp="#define DsizeL "+tmp1_2;
+ cmd=append(cmd,tmp);
+ tmp="#define DsizeM "+tmp1_3;
+ cmd=append(cmd,tmp);
+ tmp="#define DsizeS "+tmp1_4;
+ cmd=append(cmd,tmp);
+ tmp1=apply(epsL,format(#,7));
+ tmp="const double Eps="+tmp1_1;
+ tmp=tmp+", Eps1="+tmp1_2;
+ tmp=tmp+", Eps2="+tmp1_3+";";
+ cmd=append(cmd,tmp);
+ tmp=replace(Dirwork,"\","/"); //180523(2lines)
+ tmp="const char Dirname[]="+Dq+tmp+"/"+Dq+";";
+ cmd=append(cmd,tmp);
+ cmd=append(cmd,"double Urng[2],Vrng[2];");
+ cmd=append(cmd, "int DrawE,DrawW,DrawS,DrawN;");
+ cmd=append(cmd,"void rangeUV(short ch){");
+ cmd=append(cmd," switch(ch){");
+ forall(1..(length(FuncListC)),nf,
+ tmp2=" case "+text(nf)+" : ";
+ forall(4..5,
+ tmp1=FuncListC_nf_#; tmp=indexof(tmp1,"=");
+ tmp1=substring(tmp1,tmp+1,length(tmp1)-1);
+ tmp1=tokenize(tmp1,",");
+ if(#==4,tmp="Urng",tmp="Vrng");
+ tmp2=tmp2+tmp+"[0]="+tmp1_1+";"+tmp+"[1]="+tmp1_2+";";
+ );
+ tmp2=tmp2+"break;"; //180523
+ cmd=append(cmd,tmp2);
+ );
+ cmd=append(cmd," }");
+ cmd=append(cmd, "}");
+ cmd=append(cmd,"void boundary(short ch){");
+ cmd=append(cmd," switch(ch){");
+ forall(1..(length(FuncListC)),nf,
+ tmp2=" case "+text(nf)+" : ";
+ tmp=FuncListC_nf_6;
+ tmp2=tmp2+"DrawE=";
+ if(indexof(tmp,"e")>0,tmp2=tmp2+"1;",tmp2=tmp2+"0;");
+ tmp2=tmp2+"DrawW=";
+ if(indexof(tmp,"w")>0,tmp2=tmp2+"1;",tmp2=tmp2+"0;");
+ tmp2=tmp2+"DrawS=";
+ if(indexof(tmp,"s")>0,tmp2=tmp2+"1;",tmp2=tmp2+"0;");
+ tmp2=tmp2+"DrawN=";
+ if(indexof(tmp,"n")>0,tmp2=tmp2+"1;",tmp2=tmp2+"0;");
+ tmp2=tmp2+"break;"; //180523
+ cmd=append(cmd,tmp2);
+ );
+ cmd=append(cmd," }");
+ cmd=append(cmd,"}");
+ tmp="void surffun(short ch,double u, double v, double p[3]){";
+ cmd=append(cmd,tmp);
+ cmd=append(cmd," switch(ch){");
+ forall(1..(length(FuncListC)),nf,
+ tmp2=" case "+text(nf)+" : ";
+ forall(1..3,
+ tmp1=FuncListC_nf_#; tmp=indexof(tmp1,"=");
+ tmp1=substring(tmp1,tmp,length(tmp1));
+ tmp2=tmp2+"p["+text(#-1)+"]="+tmp1+";";
+ );
+ tmp2=tmp2+"break;"; //180523
+ cmd=append(cmd,tmp2);
+ );
+ cmd=append(cmd," }");
+ cmd=append(cmd,"}");
+ cmd;
+);
+////%Cheadsurf end////
+
+////%Ctopsurf start////
+Ctopsurf(name):=Ctopsurf(name,CutFunList);
+Ctopsurf(name,cutfunLorg):=(
+ regional(cutfunL,path,cmd,tmp,tmp1,tmp2);
+ cutfunL=cutfunLorg; //180601from
+ if(length(cutfunL)==0,
+ cutfunL=["1"];
+ );//180601to
+ path=DirlibC+"/";
+ path=replace(path,"\","/");
+ cmd=[
+ "#include <stdio.h>","#include <math.h>",
+ "#include <stdlib.h>","#include <string.h>", //180530
+ "#include "+Dqq(Fhead+name+"header.h"),
+ "#include "+Dqq(path+"ketcommonhead.h"),
+ "#include "+Dqq(path+"ketcommon.h"),
+ "#include "+Dq+path+"surflibhead.h"+Dq,
+ "#include "+Dq+path+"surflib.h"+Dq,
+ "double cutfun(short chfd, short chcut, double u, double v){",
+ " double p[3],val;",
+ " surffun(chfd,u,v,p);",
+ " switch(chcut){"
+ ];
+ tmp1=[];
+ forall(1..(length(cutfunL)),
+ tmp2=replace(cutfunL_#,"x","p[0]");
+ tmp2=replace(tmp2,"y","p[1]");
+ tmp2=replace(tmp2,"z","p[2]");
+ tmp2=" case "+text(#)+": val="+tmp2+";";
+ tmp2=tmp2+"break;"; //180523
+ tmp1=append(tmp1,tmp2);
+ );
+ cmd=concat(cmd,tmp1);
+ cmd=concat(cmd,[
+ " }",
+ " return val;",
+ "}",
+ "int main(void){",
+ " double data[DsizeL][3],sfbd[DsizeL][3],out[DsizeL][3];", //180601
+ " int i, j, nall;",
+ " char dirfname[256] = {'\0'};"
+ ]);
+ cmd;
+);
+////%Ctopsurf end////
+
+////%WritetoC start////
+WritetoC(nm,header,main):=(
+ regional(hfile,mfile,top,body,tmp,tmp1,tmp2);
+ hfile=Fhead+nm+"header.h";
+ mfile=Fhead+nm+".c";
+ top=main_1;
+ body=main_2;
+ SCEOUTPUT=openfile(hfile);
+ forall(header,
+ println(SCEOUTPUT,#+"/**/");
+ );
+ closefile(SCEOUTPUT);
+ SCEOUTPUT=openfile(mfile);
+ forall(top,
+ println(SCEOUTPUT,#);
+ );
+ println(SCEOUTPUT,"/**/");
+ forall(body,
+ println(SCEOUTPUT,#+"/**/");
+ );
+ println(SCEOUTPUT," return 0;");
+ println(SCEOUTPUT,"}");
+ closefile(SCEOUTPUT);
+);
+////%WritetoC end////
+
+////%CalcbyC start////
+CalcbyC(name,cmd):=CalcbyC(name,PathC,cmd,[]);
+CalcbyC(name,Arg1,Arg2):=(
+ if(isstring(Arg1),
+ CalcbyC(name,Arg1,Arg2,[]);
+ ,
+ CalcbyC(name,PathC,Arg1,Arg2);
+ );
+);
+CalcbyC(name,path,cmd,optionorg):=(
+ regional(options,eqL,strL,waiting,wflg,header,top,body,
+ wfile,hfile,mfile,flg,tmp,tmp1,tmp2,tmp3);
+ header=cmd_1;
+ top=cmd_2;
+ body=cmd_3;
+ options=optionorg;
+ tmp=divoptions(options);
+ eqL=tmp_5;
+ strL=tmp_7;
+ waiting=40;
+ wfile=Fhead+name+"end.txt"; //180517
+ hfile=Fhead+name+"header.h";
+ mfile=Fhead+name+".c";
+ wflg=0;
+ forall(eqL,
+ tmp=Strsplit(#,"=");
+ tmp1=Toupper(substring(tmp_1,0,1));
+ if(tmp1=="W",
+ waiting=parse(tmp_2);
+ options=remove(options,[#]);
+ );
+ );
+ forall(strL,
+ tmp=Toupper(substring(#,0,1));
+ if(tmp=="M",
+ wflg=1;
+ options=remove(options,[#]);
+ );
+ if(tmp=="R",
+ wflg=-1;
+ options=remove(options,[#]);
+ );
+ );
+ if(wflg==0,
+ tmp1=header;
+ if(!isexists(Dirwork,hfile),wflg=1);
+ if(wflg==0,
+ tmp2=load(hfile);
+ tmp2=tokenize(tmp2,"/**/");
+ tmp2=tmp2_(1..(length(tmp2)-1));
+ if(length(tmp1)!=length(tmp2),wflg=1);
+ );
+ if(wflg==0,
+ forall(1..(length(tmp1)),
+ if(tmp1_#!=tmp2_#,wflg=1);
+ );
+ );
+ if(wflg==0,
+ tmp1=body;
+ if(!isexists(Dirwork+"/",mfile),wflg=1);
+ if(wflg==0,
+ tmp2=load(mfile);
+ tmp2=tokenize(tmp2,"/**/");
+ tmp2=tmp2_(2..(length(tmp2)-1));
+ if(length(tmp1)!=length(tmp2),wflg=1);
+ );
+ if(wflg==0,
+ forall(1..(length(tmp1)),
+ if(tmp1_#!=tmp2_#,wflg=1);
+ );
+ );
+ );
+ if(wflg==0,wflg=-1);
+ );
+ if(wflg==1,
+ WritetoC(name,header,[top,body]);
+ SCEOUTPUT=openfile(wfile);
+ println(SCEOUTPUT,"");
+ closefile(SCEOUTPUT);
+ kcC(Fhead+name);
+ );
+ flg=0;
+ tmp1=floor(waiting*1000/WaitUnit);
+ repeat(tmp1,
+ if(flg==0,
+ tmp=load(wfile);
+ if(indexof(tmp,"////")>0, //180523from
+ flg=1;
+ tmp2=#*WaitUnit/1000;//180523to
+ ,
+ if(wflg==-1,
+ flg=-1;
+ ,
+ wait(WaitUnit);
+ );
+ );
+ );
+ );
+ if(flg<=0, //180615from
+ ErrFlag=1;
+ if(flg==-1,
+ println(wfile+" does not exist");
+ ,
+ if(flg==0,
+ tmp="("+text(waiting)+" s )";
+ println(wfile+" not generated "+tmp);
+ );
+ );
+ );//180615to
+ wflg; //181101
+);
+////%CalcbyC end////
+
+////%Gccexists start////
+Gccexists():=( //190124
+ regional(out);
+ if(iswindows(),
+ out=isexists("",PathC);
+ ,
+ if(indexof(PathC,"/")==0, //190127from
+ out=isexists("/usr/bin",PathC);
+ ,
+ out=isexists("",PathC);
+ );
+ ); //190127to
+ out;
+);
+////%Gccexists end////
+
+////%ExeccmdC start////
+ExeccmdC(nm):=ExeccmdC(nm,[],["do"]); //180531
+ExeccmdC(nm,options):=ExeccmdC(nm,options,["do"]);
+ExeccmdC(nm,optionorg,optionhorg):=(
+//help:ExeccmdC("1",options1,options2);
+//help:ExeccmdC(options1=["dr(/da/do)","m/r","Wait=30"]);
+//help:ExeccmdC(options2=["do(/nodisp/da/do)"]);
+ regional(options,optionsh,name2,name3,waiting,dirbkup,
+ eqL,reL,strL,fname,cL,tmp,tmp1,tmp2,flg,wflg,varL);
+ fname=Fhead+nm+".txt";
+ options=optionorg;
+ optionsh=optionhorg;
+ optionsh=select(optionsh,length(#)>0);
+ if(length(optionsh)==0,optionsh=["do"]);
+ tmp=Divoptions(options);
+ eqL=tmp_5;
+ reL=tmp_6;
+ strL=tmp_7;
+ waiting=30;
+ wflg=0;
+ cmdflg=0;
+ forall(strL,
+ tmp=Toupper(substring(#,0,1));
+ if(tmp=="M",
+ wflg=1;
+ options=remove(options,[#]);
+ );
+ if(tmp=="R",
+ wflg=-1;
+ options=remove(options,[#]);
+ );
+ );
+ forall(eqL,
+ tmp=Strsplit(#,"=");
+ tmp1=Toupper(substring(tmp_1,0,1)); //181111
+ if(tmp1=="W",
+ waiting=parse(tmp_2);
+ options=remove(options,[#]);
+ );
+ );
+ options=remove(options,reL);
+ options=select(options,length(#)>0);
+ if(CommonMake==1,//180609from
+ tmp1=append(options,"m");
+ wflg=0;
+ );
+ if(CommonMake==-1,
+ tmp1=append(options,"r");
+ wflg=0;
+ );//180609to
+ if(wflg==1,tmp1=append(options,"m"));
+ if(wflg==-1,tmp1=append(options,"r"));
+ tmp1=append(tmp1,"Wait="+text(waiting));
+ tmp1=append(tmp1,"Disp=n"); //181024
+ cL=CommandListC; //181101from
+ tmp2=" char fnameall[]="+Dqq(fname)+";";
+ tmp=select(1..(length(cL)),indexof(cL_#,"char fnameall[]=")>0);
+ if(length(tmp)==0,
+ CommandListC=prepend(tmp2,CommandListC);
+ ,
+ tmp=tmp_1;
+ CommandListC_tmp=tmp2;
+ );
+ cL=CommandListC;
+ tmp2=" printf("+Dqq("%s\n")+","+Dqq("Execcmd "+nm)+");";
+ tmp=select(1..(length(cL)),indexof(cL_#,"printf("+Dqq("%s\n")+","+Dq+"Execcmd ")>0);
+ if(length(tmp)==0,
+ CommandListC=prepend(tmp2,CommandListC);
+ ,
+ tmp=tmp_1;
+ CommandListC_tmp=tmp2;
+ ); //181101to
+ tmp=select(CommandListC,indexof(#,"outputend")>0);
+ if(length(tmp)==0,
+ CommandListC=append(CommandListC," outputend(dirfname);");
+ );
+ if(length(CommandListC)<=2,ErrFlag=1);
+ if(ErrFlag==0,
+ CalcbyC(nm,[Cheadsurf(),Ctopsurf(nm),CommandListC],tmp1);
+ );
+ if(ErrFlag==1,
+ err("CommandListC is empty or execcmd is not completed");
+ ,
+ varL=ReadOutData(fname,["Disp=n"]); //181029
+ GLIST=append(GLIST,"ReadOutData("+Dqq(fname)+")");
+ tmp1=select(varL,indexof(#,"h3d")==0);
+ tmp2=remove(varL,tmp1);
+ tmp1=select(tmp1,indexof(#,"3d")>0);
+ tmp="";
+ if(length(options)>0,
+ forall(options,
+ tmp=tmp+Dqq(#)+",";
+ );
+ tmp=substring(tmp,0,length(tmp)-1);
+ );
+ if(length(tmp)>0,tmp=tmp+","); //180602
+ tmp=tmp+Dqq("Msg=no"); //180602
+ tmp1=apply(tmp1,replace(#,"3d","2d")+"=Projpara("+Dqq(#)+",["+tmp+"]);");
+ forall(tmp1,parse(#));
+ tmp="";
+ if(length(optionsh)>0,
+ forall(optionsh,
+ tmp=tmp+Dqq(#)+",";
+ );
+ tmp=substring(tmp,0,length(tmp)-1);
+ );
+ tmp2=apply(tmp2,replace(#,"3d","2d")+"=Projpara("+Dqq(#)+",["+tmp+"]);");
+ forall(tmp2,parse(#));
+ Changestyle3d(EraseList,["nodisp"]);//180601
+ );
+ varL=select(varL,length(parse(#))>0);
+ if(length(addpath)>0,Changework(dirbkup,["Sub=n"])); //180605
+ if(SUBSCR==1, // 15.02.11
+ forall(varL, //181106from
+ Subgraph(#,"");
+ );
+ ); //181106to
+ tmp=StyleListC; //181107from
+ tmp1=apply(1..(length(tmp)/2),[tmp_(2*#-1),tmp_(2*#)]);
+ forall(tmp1,tmp2,
+ strL=select(varL,indexof(#,tmp2_1)>0); //181114from
+ forall(strL,
+ if((length(parse(#))>0)&(length(tmp2_2))>0,
+ Changestyle3d(#,tmp2_2);
+ );
+ ); //181114to
+ ); //181107to
+ varL;
+);
+////%ExeccmdC end////
+
+////%Sfbdparadata start////
+Sfbdparadata(nm,fd):=SfbdparadataC(nm,fd);
+Sfbdparadata(nm,fd,options):=SfbdparadataC(nm,fd,options);
+Sfbdparadata(nm,fdorg,optionorg,optionsh):=SfbdparadataC(nm,fdorg,optionorg,optionsh);
+SfbdparadataC(nm,fd):=(
+ SfbdparadataC(nm,fd,[],["do"]);
+);
+SfbdparadataC(nm,fd,options):=
+ SfbdparadataC(nm,fd,options,["do"]);
+SfbdparadataC(nm,fdorg,optionorg,optionshorg):=(
+//help:Sfbdparadata("1",Fd,nohiddenoptions,hiddenoptions);
+ regional(funnm,fd,options,optionsh,name2,name3,name2h,name3h,waiting,
+ eqL,reL,strL,fname,tmp,tmp1,tmp2,flg,wflg,cmdflg);
+ if(ChNumber==0,ChNumber=Ch);
+ fd=ConvertFdtoC(fdorg);
+ tmp1=0; //180606from
+ forall(1..(length(FuncListC)),
+ if(FuncListC_#==fd,
+ funnm=#;
+ tmp1=1;
+ );
+ );
+ if(tmp1==0,
+ FuncListC=append(FuncListC,fd);
+ funnm=text(length(FuncListC));
+ ); //180606to
+ name2="sfbd2d"+nm;
+ name3="sfbd3d"+nm;
+ name2h="sfbdh2d"+nm;
+ name3h="sfbdh3d"+nm;
+ fname=Fhead+"sfbd"+nm+".txt";
+ options=select(optionorg,length(#)>0); //190123from
+ tmp=Divoptions(options);
+ if(length(tmp_7)==0,options=append(options,"dr"));
+ optionsh=select(optionshorg,length(#)>0);
+ tmp=Divoptions(optionsh);
+ if(length(tmp_7)==0,optionsh=append(optionsh,"do")); //190123to
+ tmp=Divoptions(options);
+ eqL=tmp_5;
+ reL=tmp_6;
+ strL=tmp_7;
+ waiting=60;
+ wflg=0;
+ cmdflg=1;
+ forall(strL,
+ tmp=Toupper(substring(#,0,1));
+ if(tmp=="M",
+ cmdflg=0;
+ wflg=1;
+ options=remove(options,[#]);
+ );
+ if(tmp=="R",
+ cmdflg=0;
+ wflg=-1;
+ options=remove(options,[#]);
+ );
+ if(tmp=="C", //180531
+ cmdflg=1;
+ options=remove(options,[#]);
+ );
+ );
+ options=remove(options,reL);
+ options=select(options,length(#)>0);
+ tmp1=select(options,
+ (indexof(#,"=")>0)&(Toupper(substring(#,0,1))=="C")); //181114from
+ if(length(tmp1)>0,
+ tmp1=tmp1_1;
+ tmp2=select(optionsh,
+ (indexof(#,"=")>0)&(Toupper(substring(#,0,1))=="C"));
+ if(length(tmp2)==0,
+ if(length(optionsh)==0,
+ optionsh=["do",tmp1];
+ ,
+ optionsh=append(optionsh,tmp1);
+ );
+ );
+ ); //181114to
+ StyleListC=concat(StyleListC,[name3,options,name3h,optionsh]); //181107
+ options=remove(options,eqL);
+ cmdL=[
+ " char fname"+nm+"[]="+Dqq(fname)+";",
+ " rangeUV("+funnm+");",
+ " boundary("+funnm+");",
+ " sfbdparadata("+funnm+",sfbd);",
+ " sprintf(dirfname,"+Dqq("%s%s")+",Dirname,fname"+nm+");",
+ " output3h("+Dqq("w")+","+Dqq("sfbd3d"+nm)+","+Dqq("sfbdh3d"+nm)+",dirfname,sfbd);",
+ " outputend(dirfname);"
+ ];
+ if(cmdflg==1, //180531from
+ println(" ExeccmdC will generate "+ name3+","+name3h);
+ tmp=replace(cmdL_5,"fname"+nm,"fnameall");cmdL_5=tmp; //181217
+ tmp=select(CommandListC,indexof(#,"output3")>0); //180601from
+ if(length(tmp)>0,
+ tmp=replace(cmdL_6,Dqq("w"),Dqq("a"));cmdL_6=tmp;
+ ); //180601from
+ cmdL=cmdL_(2..(length(cmdL)-1)); //181113
+ CommandListC=concat(CommandListC,cmdL); //180531to
+ ,
+ if(wflg==1,tmp1=append(options,"m"));
+ if(wflg==-1,tmp1=append(options,"r"));
+ if(ErrFlag==0,
+ tmp="sfbd"+nm;
+ CalcbyC(tmp,[Cheadsurf(),Ctopsurf(tmp),cmdL],tmp1);
+ );
+ if(ErrFlag==1,
+ err("Sfbdparadata not completed");
+ ,
+ ReadOutData(fname,["Disp=n"]); //181029
+ GLIST=append(GLIST,"ReadOutData("+Dqq(fname)+")");
+ if(islist(parse(name3)),
+ tmp1=name2+"=Projpara("+Dqq(name3)+",[";
+ tmp2="";
+ if(length(options)>0,
+ forall(options,
+ tmp2=tmp2+Dqq(#)+",";
+ );
+ tmp2=substring(tmp2,0,length(tmp2)-1);
+ );
+ tmp1=tmp1+tmp2+"]);";
+ parse(tmp1);
+ tmp2=select(optionsh,length(#)>0); //180517(2lines)
+ if(length(tmp2)==0,tmp2=["nodisp"]);
+ tmp1=name2h+"=Projpara("+Dqq(name3h)+",[";
+ forall(tmp2,
+ tmp1=tmp1+Dqq(#)+",";
+ );
+ tmp1=substring(tmp1,0,length(tmp1)-1)+"]);";
+ parse(tmp1);
+ ,
+ ErrFlag=1;
+ );
+ );
+ );
+);
+////%Sfbdparadata end////
+
+////%Crvsfparadata start////
+Crvsfparadata(nm,fk,sfbd,fd):=CrvsfparadataC(nm,fk,sfbd,fd);
+Crvsfparadata(nm,fk,sfbd,fd,options):=CrvsfparadataC(nm,fk,sfbd,fd,options);
+Crvsfparadata(nm,Fk,sfbdorg,fdorg,optionorg,optionsh):=
+ CrvsfparadataC(nm,Fk,sfbdorg,fdorg,optionorg,optionsh);
+CrvsfparadataC(nm,fk,sfbd,fd):=
+ CrvsfparadataC(nm,fk,sfbd,fd,[],["do"]);
+CrvsfparadataC(nm,fk,sfbd,fd,options):=
+ CrvsfparadataC(nm,fk,sfbd,fd,options,["do"]);
+CrvsfparadataC(nm,Fk,sfbdorg,fdorg,optionorg,optionshorg):=(
+//help:Crvsfparadata("1","ax3d","sfbd3d1",Fd,,nohiddenoptions,hiddenoptions);
+ regional(funnm,sfbd,fd,options,optionsh,name2,name3,name2h,name3h,waiting,
+ eqL,reL,strL,fname,tmp,tmp1,tmp2,flg,wflg,useflg,cmdlfg,ii,jj,eps);
+ eps=10^(-5);
+ sfbd=replace(sfbdorg,"bdy","sfbd");
+ fd=ConvertFdtoC(fdorg);
+ tmp=select(1..(length(FuncListC)),FuncListC_#==fd);
+ funnm=text(tmp_1); //180426
+ name2="crvsf2d"+nm;
+ name3="crvsf3d"+nm;
+ name2h="crvsfh2d"+nm;
+ name3h="crvsfh3d"+nm;
+ fname=Fhead+"crvsf"+nm+".txt";
+ options=select(optionorg,length(#)>0); //190123from
+ tmp=Divoptions(options);
+ if(length(tmp_7)==0,options=append(options,"dr"));
+ optionsh=select(optionshorg,length(#)>0);
+ tmp=Divoptions(optionsh);
+ if(length(tmp_7)==0,optionsh=append(optionsh,"do")); //190123to
+ tmp=Divoptions(options);
+ eqL=tmp_5;
+ reL=tmp_6;
+ strL=tmp_7;
+ waiting=60;
+ wflg=0;
+ cmdflg=1;
+ forall(strL,
+ tmp=Toupper(substring(#,0,1));
+ if(tmp=="M",
+ cmdflg=0;
+ wflg=1;
+ options=remove(options,[#]);
+ );
+ if(tmp=="R",
+ cmdflg=0;
+ wflg=-1;
+ options=remove(options,[#]);
+ );
+ if(tmp=="C", //180531
+ cmdflg=1;
+ options=remove(options,[#]);
+ );
+ );
+ useflg="N"; //181105from
+ forall(eqL,
+ tmp=Strsplit(#,"=");
+ tmp1=Toupper(substring(tmp_1,0,1));
+ if(tmp1=="U",
+ useflg=Toupper(substring(tmp_2,0,1));
+ );
+ ); //181105to
+ options=remove(options,reL);
+ options=select(options,length(#)>0);
+ tmp1=select(options,
+ (indexof(#,"=")>0)&(Toupper(substring(#,0,1))=="C")); //181114from
+ if(length(tmp1)>0,
+ tmp1=tmp1_1;
+ tmp2=select(optionsh,
+ (indexof(#,"=")>0)&(Toupper(substring(#,0,1))=="C"));
+ if(length(tmp2)==0,
+ if(length(optionsh)==0,
+ optionsh=["do",tmp1];
+ ,
+ optionsh=append(optionsh,tmp1);
+ );
+ );
+ ); //181114to
+ StyleListC=concat(StyleListC,[name3,options,name3h,optionsh]); //181107
+ options=remove(options,eqL);
+ if(useflg=="N",
+// flg=0;
+// tmp=Fhead+Fk+".dat";
+// if(!isexists(Dirwork,tmp),flg=1);
+// if(flg==0,
+// tmp1=ReaddataC(tmp);
+// tmp2=parse(Fk);
+// if(length(tmp1)==length(tmp2),
+// forall(1..(length(tmp1)),ii,
+// if(length(tmp1_ii)!=length(tmp2_ii),flg=1);
+// forall(1..(length(tmp1_ii)),jj,
+// if(flg==0,
+// if(Norm(tmp1_ii_jj-tmp2_ii_jj)>eps,flg=1);
+// );
+// );
+// );
+// );
+// );
+// if(flg==1,
+ if((islist(parse(Fk))),
+ tmp=Fhead+Fk+".dat";
+ WritedataC(tmp,Fk);
+ ,
+ useflg="Y";
+ );
+// );
+ ); //181105to
+ if(cmdflg==1,
+ EraseList=append(EraseList,Fk);
+ ,
+ Changestyle3d(Fk,["nodisp"]);
+ );
+ cmdL=[
+ " char fname"+nm+"[]="+Dqq(fname)+";",
+ " rangeUV("+funnm+");",
+ " boundary("+funnm+");"
+ ];
+ if(useflg=="N", //181105from
+ cmdL=concat(cmdL,[
+ " readdataC("+Dqq(Fhead+Fk+".dat")+",data);"
+ ]);
+ ,
+ cmdL=concat(cmdL,[
+ " readoutdata3(dirfname,"+Dqq(Fk)+",data);"
+ ]);
+ );
+ cmdL=concat(cmdL,[
+ " readoutdata3("+Dqq(Fhead+replace(sfbd,"3d","")+".txt")+","+Dqq(sfbd)+",sfbd);",
+ " crvsfparadata("+funnm+",data,sfbd, 0, out);",
+ " sprintf(dirfname,"+Dqq("%s%s")+",Dirname,fname"+nm+");",
+ " output3h("+Dqq("w")+","+Dqq("crvsf3d"+nm)+","+Dqq("crvsfh3d"+nm)+",dirfname,out);",
+ " outputend(dirfname);"
+ ]); //181105to
+ if(cmdflg==1,//180531from
+ println(" ExeccmdC will generate "+ name3+","+name3h);
+ cmdL_(length(cmdL)-4)=" readoutdata3(fnameall,"+Dqq(sfbd)+",sfbd);"; //181105(2lines)
+ cmdL_(length(cmdL)-2)=" sprintf(dirfname,"+Dqq("%s%s")+",Dirname,fnameall);";
+ tmp=replace(cmdL_(length(cmdL)-1),Dqq("w"),Dqq("a")); cmdL_(length(cmdL)-1)=tmp;
+ cmdL=cmdL_(1..(length(cmdL)-1)); //181113
+ CommandListC=concat(CommandListC,cmdL); //180531to
+ ,
+ if(wflg==1,tmp1=append(options,"m"));
+ if(wflg==-1,tmp1=append(options,"r"));
+ if(ErrFlag==0,
+ tmp="crvsf"+nm;
+ CalcbyC(tmp,[Cheadsurf(),Ctopsurf(tmp),cmdL],tmp1);
+ );
+ if(ErrFlag==1,
+ err("Crvsfparadata not completed");
+ ,
+ ReadOutData(fname,["Disp=n"]); //181029
+ GLIST=append(GLIST,"ReadOutData("+Dqq(fname)+")");
+ if(islist(parse(name3)),
+ tmp1=name2+"=Projpara("+Dqq(name3)+",[";
+ tmp2="";
+ if(length(options)>0,
+ forall(options,
+ tmp2=tmp2+Dqq(#)+",";
+ );
+ tmp2=substring(tmp2,0,length(tmp2)-1);
+ );
+ tmp1=tmp1+tmp2+"]);";
+ parse(tmp1);
+ tmp2=select(optionsh,length(#)>0); //180517(2lines)
+ if(length(tmp2)==0,tmp2=["nodisp"]);
+ tmp1=name2h+"=Projpara("+Dqq(name3h)+",[";
+ forall(tmp2,
+ tmp1=tmp1+Dqq(#)+",";
+ );
+ tmp1=substring(tmp1,0,length(tmp1)-1)+"]);";
+ parse(tmp1);
+ ,
+ ErrFlag=1;
+ );
+ );
+ );
+);
+////%Crvsfparadata end////
+
+////%Crv3onsfparadata start////
+Crv3onsfparadata(nm,crv3d,sfbd,fd):=Crv3onsfparadataC(nm,crv3d,sfbd,fd);
+Crv3onsfparadata(nm,crv3d,sfbd,fd,options):=Crv3onsfparadataC(nm,crv3d,sfbd,fd,options);
+Crv3onsfparadata(nm,crv3d,sfbdorg,fdorg,optionorg,optionsh):=
+ Crv3onsfparadataC(nm,crv3d,sfbdorg,fdorg,optionorg,optionsh);
+Crv3onsfparadataC(nm,crv3d,sfbd,fd):=
+ Crv3onsfparadataC(nm,crv3d,sfbd,fd,[],["do"]);
+Crv3onsfparadataC(nm,crv3d,sfbd,fd,options):=
+ Crv3onsfparadataC(nm,crv3d,sfbd,fd,options,["do"]);
+Crv3onsfparadataC(nm,crv3d,sfbdorg,fdorg,optionorg,optionshorg):=(
+//help:Crv3onsfparadata("1","sc3","sfbd3d1",fd,,nohiddenoptions,hiddenoptions);
+ regional(funnm,sfbd,fd,options,optionsh,name3,name3h,name2,name2h,waiting,
+ eqL,reL,strL,fname,tmp,tmp1,tmp2,flg,wflg,flg,ii,jj,eps,cmdflg);
+ tmp1=replace(crv3d,"3d","2d");
+ tmp=apply(GCLIST,#_1);
+ if(contains(tmp,tmp1),
+ if(cmdflg==1,
+ EraseList=append(EraseList,tmp1);
+ ,
+ Changestyle3d(tmp1,["nodisp"]);//180428
+ );
+ );
+ eps=10^(-5);
+ sfbd=replace(sfbdorg,"bdy","sfbd");
+ fd=ConvertFdtoC(fdorg);
+ tmp=select(1..(length(FuncListC)),FuncListC_#==fd);
+ funnm=text(tmp_1); //180426
+ name3="crv3onsf3d"+nm;
+ name3h="crv3onsfh3d"+nm;
+ name2=replace(name3,"3d","2d");
+ name2h=replace(name3h,"3d","2d");
+ fname=Fhead+"crv3onsf"+nm+".txt";
+ tmp=apply(fdorg,if(isstring(#),Dqq(#),#));
+ tmp=text(tmp);
+ options=optionorg;
+ optionsh=select(optionshorg,length(#)>0); //181107
+ tmp=Divoptions(options);
+ eqL=tmp_5;
+ reL=tmp_6;
+ strL=tmp_7;
+ waiting=60;
+ wflg=0;
+ cmdflg=1;
+ forall(strL,
+ tmp=Toupper(substring(#,0,1));
+ if(tmp=="M",
+ cmdflg=0;
+ wflg=1;
+ options=remove(options,[#]);
+ );
+ if(tmp=="R",
+ cmdflg=0;
+ wflg=-1;
+ options=remove(options,[#]);
+ );
+ if(tmp=="C", //180531
+ cmdflg=1;
+ options=remove(options,[#]);
+ );
+ );
+ options=remove(options,reL);
+ options=select(options,length(#)>0);
+ tmp1=select(options,
+ (indexof(#,"=")>0)&(Toupper(substring(#,0,1))=="C")); //181114from
+ if(length(tmp1)>0,
+ tmp1=tmp1_1;
+ tmp2=select(optionsh,
+ (indexof(#,"=")>0)&(Toupper(substring(#,0,1))=="C"));
+ if(length(tmp2)==0,
+ if(length(optionsh)==0,
+ optionsh=["do",tmp1];
+ ,
+ optionsh=append(optionsh,tmp1);
+ );
+ );
+ ); //181114to
+ StyleListC=concat(StyleListC,[name3,options,name3h,optionsh]); //181107
+ options=remove(options,eqL);
+ tmp2=parse(crv3d);
+ flg=0;
+ tmp=Fhead+crv3d+".dat";
+ if(!isexists(Dirwork,tmp),flg=1);
+ if(flg==0,
+ tmp1=ReaddataC(tmp);
+ if(length(tmp1)!=length(tmp2),flg=1);
+ if(flg==0,
+ forall(1..(length(tmp1)),ii,
+ if(length(tmp1_ii)!=length(tmp2_ii),flg=1);
+ forall(1..(length(tmp1_ii)),jj,
+ if(flg==0,
+ if(Norm(tmp1_ii_jj-tmp2_ii_jj)>eps,flg=1);
+ );
+ );
+ );
+ );
+ );
+ if(flg==1,WritedataC(tmp,crv3d));
+ cmdL=[
+ " char fname"+nm+"[]="+Dqq(fname)+";",
+ " rangeUV("+funnm+");",
+ " boundary("+funnm+");",
+ " readdataC("+Dqq(Fhead+crv3d+".dat")+",data);",
+ " readoutdata3("+Dqq(Fhead+replace(sfbd,"3d","")+".txt")+","+Dqq(sfbd)+",sfbd);", //180531
+ " crv3onsfparadata("+funnm+",data,sfbd,out);",
+ " sprintf(dirfname,"+Dqq("%s%s")+",Dirname,fname"+nm+");",
+ " output3h("+Dqq("w")+","+Dqq("crv3onsf3d"+nm)+","+Dqq("crv3onsfh3d"+nm)+",dirfname,out);",
+ " outputend(dirfname);"
+ ];
+ if(cmdflg==1,//180531from
+ println(" ExeccmdC will generate "+ name3+","+name3h);
+ cmdL_7=" sprintf(dirfname,"+Dqq("%s%s")+",Dirname,fnameall);"; //180607
+ tmp=replace(cmdL_(length(cmdL)-1),Dqq("w"),Dqq("a")); cmdL_(length(cmdL)-1)=tmp;
+ cmdL_5=" readoutdata3(fnameall,"+Dqq(sfbd)+",sfbd);";
+ cmdL=cmdL_(2..(length(cmdL)-1)); //181113
+// cmdL=remove(cmdL,[cmdL_1,cmdL_(length(cmdL))]);
+ CommandListC=concat(CommandListC,cmdL); //180531to
+ ,
+ if(wflg==1,tmp1=append(options,"m"));
+ if(wflg==-1,tmp1=append(options,"r"));
+ if(ErrFlag==0,
+ tmp="crv3onsf"+nm;
+ CalcbyC(tmp,[Cheadsurf(),Ctopsurf(tmp),cmdL],tmp1);
+ );
+ if(ErrFlag==1,
+ err("Crvonsfparadata not completed");
+ ,
+ ReadOutData(fname,["Disp=n"]);
+ GLIST=append(GLIST,"ReadOutData("+Dqq(fname)+")");
+ if(islist(parse(name3)),
+ tmp1=name2+"=Projpara("+Dqq(name3)+",[";
+ tmp2="";
+ if(length(options)>0,
+ forall(options,
+ tmp2=tmp2+Dqq(#)+",";
+ );
+ tmp2=substring(tmp2,0,length(tmp2)-1);
+ );
+ tmp1=tmp1+tmp2+"]);";
+ parse(tmp1);
+ tmp2=select(optionsh,length(#)>0); //180517(2lines)
+ if(length(tmp2)==0,tmp2=["nodisp"]);
+ tmp1=name2h+"=Projpara("+Dqq(name3h)+",[";
+ forall(tmp2,
+ tmp1=tmp1+Dqq(#)+",";
+ );
+ tmp1=substring(tmp1,0,length(tmp1)-1)+"]);";
+ parse(tmp1);
+ ,
+ ErrFlag=1;
+ );
+ );
+ );
+);
+////%Crv3onsfparadata end////
+
+////%Crv2onsfparadata start////
+Crv2onsfparadata(nm,crv2d,sfbd,fd):=Crv2onsfparadataC(nm,crv2d,sfbd,fd);
+Crv2onsfparadata(nm,crv2d,sfbd,fd,options):=Crv2onsfparadataC(nm,crv2d,sfbd,fd,options);
+Crv2onsfparadata(nm,crv2d,sfbd,fdorg,options,optionsh):=
+ Crv2onsfparadataC(nm,crv2d,sfbd,fdorg,options,optionsh);
+Crv2onsfparadataC(nm,crv2d,sfbd,fd):=
+ Crv2onsfparadataC(nm,crv2d,sfbd,fd,["c"],["do"]);
+Crv2onsfparadataC(nm,crv2d,sfbd,fd,options):=
+ Crv2onsfparadataC(nm,crv2d,sfbd,fd,options,["do"]);
+Crv2onsfparadataC(nm,crv2d,sfbd,fdorg,options,optionsh):=(
+//help:Crv2onsfparadata("1","gp1","sfbd3d1",fd,nohiddenoptions,hiddenoptions);
+ regional(fd,uname,vname,str,tmpfun,ii,jj,crv3d,tmp,tmp1,tmp2);
+ Changestyle3d(crv2d,["nodisp"]);
+ crv3d=crv2d+"3d";
+ fd=Fullformfunc(fdorg);
+ tmp=Strsplit(fd_5,"=");
+ uname=tmp_1;
+ tmp=Strsplit(fd_6,"=");
+ vname=tmp_1;
+ str="["+fd_2+","+fd_3+","+fd_4+"]";
+ tmp="tmpfun("+uname+","+vname+"):="+str+";";
+ parse(tmp);
+ tmp1=parse(crv2d);
+ tmp2=[];
+ forall(tmp1,
+ tmp2=append(tmp2,tmpfun(#_1,#_2));
+ );
+ tmp=crv3d+"="+textformat(tmp2,6)+";"; //190415
+ parse(tmp);
+ Crv3onsfparadataC(nm,crv3d,sfbd,fdorg,options,optionsh);
+);
+////%Crv2onsfparadata end////
+
+////%Wireparadata start////
+Wireparadata(nm,sfbd,fd,wr1,wr2):=WireparadataC(nm,sfbd,fd,wr1,wr2);
+Wireparadata(nm,sfbd,fd,wr1,wr2,options):=WireparadataC(nm,sfbd,fd,wr1,wr2,options);
+Wireparadata(nm,sfbd,fdorg,wr1,wr2,optionorg,optionsh):=
+ WireparadataC(nm,sfbd,fdorg,wr1,wr2,optionorg,optionsh);
+WireparadataC(nm,sfbd,fd,wr1,wr2):=
+ WireparadataC(nm,sfbd,fd,wr1,wr2,[],["do"]);
+WireparadataC(nm,sfbd,fd,wr1,wr2,options):=
+ WireparadataC(nm,sfbd,fd,wr1,wr2,options,["do"]);
+WireparadataC(nm,sfbd,fdorg,wr1,wr2,optionorg,optionshorg):=(
+//help:Wireparadata("1","sfbd3d1",fd,5,5,nohiddenoptions,hiddenoptions);
+ regional(funnm,fd,options,optionsh,name2,name3,name2h,name3h,waiting,
+ eqL,reL,strL,fname,fnameh,tmp,tmp1,tmp2,flg,wflg,flg,ii,jj,eps,udata,vdata,cmdflg);
+ eps=10^(-5);
+ fd=ConvertFdtoC(fdorg);
+ tmp=select(1..(length(FuncListC)),FuncListC_#==fd);
+ funnm=text(tmp_1);
+ name2="wire2d"+nm;
+ name3="wire3d"+nm;
+ name2h="wireh2d"+nm;
+ name3h="wireh3d"+nm;
+ fname=Fhead+"wire"+nm+".txt";
+ fnameh=replace(fname,".txt","h.txt");
+ options=select(optionorg,length(#)>0); //190123from
+ tmp=Divoptions(options);
+ if(length(tmp_7)==0,options=append(options,"dr"));
+ optionsh=select(optionshorg,length(#)>0);
+ tmp=Divoptions(optionsh);
+ if(length(tmp_7)==0,optionsh=append(optionsh,"do")); //190123to
+ tmp=Divoptions(options);
+ eqL=tmp_5;
+ reL=tmp_6;
+ strL=tmp_7;
+ waiting=60;
+ wflg=0;
+ options=remove(options,reL);
+ wflg=0;
+ cmdflg=1;
+ forall(strL,
+ tmp=Toupper(substring(#,0,1));
+ if(tmp=="M",
+ cmdflg=0;
+ wflg=1;
+ options=remove(options,[#]);
+ );
+ if(tmp=="R",
+ cmdflg=0;
+ wflg=-1;
+ options=remove(options,[#]);
+ );
+ if(tmp=="C", //180531
+ cmdflg=1;
+ options=remove(options,[#]);
+ );
+ );
+ options=remove(options,reL);
+ options=select(options,length(#)>0);
+ tmp1=select(options,
+ (indexof(#,"=")>0)&(Toupper(substring(#,0,1))=="C")); //181114from
+ if(length(tmp1)>0,
+ tmp1=tmp1_1;
+ tmp2=select(optionsh,
+ (indexof(#,"=")>0)&(Toupper(substring(#,0,1))=="C"));
+ if(length(tmp2)==0,
+ if(length(optionsh)==0,
+ optionsh=["do",tmp1];
+ ,
+ optionsh=append(optionsh,tmp1);
+ );
+ );
+ ); //181114to
+ StyleListC=concat(StyleListC,[name3,options,name3h,optionsh]); //181107
+ options=remove(options,eqL);
+ if(islist(wr1),
+ udata=prepend(length(wr1),wr1);
+ ,
+ tmp=Fullformfunc(fdorg);
+ tmp1=tmp_5;
+ tmp=indexof(tmp1,"=");
+ tmp=substring(tmp1,tmp,length(tmp1));
+ tmp=parse(tmp);
+ tmp1=tmp_1; tmp2=tmp_2;
+ udata=apply(1..wr1,tmp1+#*(tmp2-tmp1)/(wr1+1));
+ udata=prepend(wr1,udata);
+ );
+ udata=textformat(udata,6);
+ udata=substring(udata,1,length(udata)-1);
+ if(islist(wr2),
+ vdata=prepend(length(wr2),wr2);
+ ,
+ tmp=Fullformfunc(fdorg);
+ tmp1=tmp_6;
+ tmp=indexof(tmp1,"=");
+ tmp=substring(tmp1,tmp,length(tmp1));
+ tmp=parse(tmp);
+ tmp1=tmp_1; tmp2=tmp_2;
+ vdata=apply(1..wr2,tmp1+#*(tmp2-tmp1)/(wr2+1));
+ vdata=prepend(wr2,vdata);
+ );
+ vdata=textformat(vdata,6);
+ vdata=substring(vdata,1,length(vdata)-1);
+ cmdL=[
+ " double wireu[]={"+udata+"};",
+ " double wirev[]={"+vdata+"};",
+ " char fname[]="+Dqq(fname)+";",
+ " char fnameh[]="+Dqq(fnameh)+";",
+ " rangeUV("+funnm+");",
+ " boundary("+funnm+");",
+ " readoutdata3("+Dqq(Fhead+replace(sfbd,"3d","")+".txt")+","+Dqq(sfbd)+",sfbd);", //180531
+ " wireparadata("+funnm+",sfbd,wireu,wirev,fname,fnameh);"
+ ];
+ if(cmdflg==1,//180531from
+ println(" ExeccmdC will generate "+ name3+","+name3h);
+ tmp=replace(cmdL_8,"fnameh",Dqq(""));
+ tmp=replace(tmp,"fname","fnameall"); cmdL_8=tmp;
+ cmdL_7=" readoutdata3(fnameall,"+Dqq(sfbd)+",sfbd);";
+ cmdL=append(cmdL," outputend(dirfname);");
+ tmp=remove(1..(length(cmdL)),[3,4]); //181113(2lines)
+ cmdL=cmdL_tmp;
+// cmdL=remove(cmdL,[cmdL_3,cmdL_4]); //180827
+ CommandListC=concat(CommandListC,cmdL); //180531to
+ ,
+ if(wflg==1,tmp1=append(options,"m"));
+ if(wflg==-1,tmp1=append(options,"r"));
+ if(ErrFlag==0,
+ tmp="wire"+nm;
+ CalcbyC(tmp,[Cheadsurf(),Ctopsurf(tmp),cmdL],tmp1);
+ );
+ if(ErrFlag==1,
+ err("Wireparadata not completed");
+ ,
+ ReadOutData(fname,["Disp=n"]);
+ GLIST=append(GLIST,"ReadOutData("+Dqq(fname)+")");
+ ReadOutData(fnameh);
+ GLIST=append(GLIST,"ReadOutData("+Dqq(fnameh)+")");
+ if(islist(parse(name3)),
+ tmp1=name2+"=Projpara("+Dqq(name3)+",[";
+ tmp2="";
+ if(length(options)>0,
+ forall(options,
+ tmp2=tmp2+Dqq(#)+",";
+ );
+ tmp2=substring(tmp2,0,length(tmp2)-1);
+ );
+ tmp1=tmp1+tmp2+"]);";
+ parse(tmp1);
+ tmp2=select(optionsh,length(#)>0); //180517(2lines)
+ if(length(tmp2)==0,tmp2=["nodisp"]);
+ tmp1=name2h+"=Projpara("+Dqq(name3h)+",[";
+ forall(tmp2,
+ tmp1=tmp1+Dqq(#)+",";
+ );
+ tmp1=substring(tmp1,0,length(tmp1)-1)+"]);";
+ parse(tmp1);
+ ,
+ ErrFlag=1;
+ );
+ );
+ );
+);
+////%Wireparadata end////
+
+////%Intersectcrvsf start////
+Intersectcrvsf(nm,crv,fd):=IntersectcrvsfC(nm,crv,fd);
+Intersectcrvsf(nm,crv,fd,Arg):=IntersectcrvsfC(nm,crv,fd,Arg);
+Intersectcrvsf(nm,crv3d,fdorg,bdyeq,optionorg):=
+ IntersectcrvsfC(nm,crv3d,fdorg,bdyeq,optionorg);
+IntersectcrvsfC(nm,crv,fd):=IntersectcrvsfC(nm,crv,fd,"",[]);
+IntersectcrvsfC(nm,crv,fd,Arg):=(
+ if(isstring(Arg),
+ IntersectcrvsfC(nm,crv,fd,Arg,[]);
+ ,
+ IntersectcrvsfC(nm,crv,fd,"",Arg);
+ );
+);
+IntersectcrvsfC(nm,crv3d,fdorg,bdyeq,optionorg):=(
+//help:Intersectcrvsf("1",curve,fd);
+ regional(fd,funnm,name,crv,fd,options,reL,fname,crvfname,argR,
+ waiting,tmp,tmp1,tmp2,flg,wflg,pts,cmdflg);
+ fd=ConvertFdtoC(fdorg);
+ tmp=select(1..(length(FuncListC)),FuncListC_#==fd);
+ funnm=text(tmp_1); //180426
+ name="intercrvsf"+nm;
+ fname=Fhead+name+".txt";
+ crvfname=Fhead+"crv"+nm+".txt";
+ fd=apply(fdorg,if(isstring(#),Dqq(#),#));
+ options=optionorg;
+ tmp=Divoptions(options);
+ eqL=tmp_5;
+ reL=tmp_6;
+ strL=tmp_7;
+ waiting=60;
+ wflg=0;
+ cmdflg=1;
+ forall(strL,
+ tmp=Toupper(substring(#,0,1));
+ if(tmp=="M",
+ cmdflg=0;
+ wflg=1;
+ options=remove(options,[#]);
+ );
+ if(tmp=="R",
+ cmdflg=0;
+ wflg=-1;
+ options=remove(options,[#]);
+ );
+ if(tmp=="C", //180531
+ cmdflg=1;
+ options=remove(options,[#]);
+ );
+ );
+ options=remove(options,eqL);
+ options=remove(options,reL);
+ options=select(options,length(#)>0);
+ tmp2=parse(crv3d);
+ flg=0;
+ tmp=Fhead+crv3d+".dat";
+ if(!isexists(Dirwork,tmp),flg=1);
+ if(flg==0,
+ tmp1=ReaddataC(tmp);
+ if(length(tmp1)!=length(tmp2),flg=1);
+ if(flg==0,
+ forall(1..(length(tmp1)),ii,
+ if(length(tmp1_ii)!=length(tmp2_ii),flg=1);
+ forall(1..(length(tmp1_ii)),jj,
+ if(flg==0,
+ if(Norm(tmp1_ii_jj-tmp2_ii_jj)>eps,flg=1);
+ );
+ );
+ );
+ );
+ );
+ if(flg==1,WritedataC(tmp,crv3d));
+ cmdL=[
+ " double crv3d[DsizeL][3];",
+ " char fname"+nm+"[]="+Dqq(fname)+";",
+ " rangeUV("+funnm+");",
+ " boundary("+funnm+");",
+ " readdataC("+Dqq(Fhead+crv3d+".dat")+",crv3d);",
+ " intersectcrvsf("+Dqq("w")+","+funnm+",crv3d,"+Dqq(fname)+");",
+ " sprintf(dirfname,"+Dqq("%s%s")+",Dirname,fname"+nm+");"
+ ];
+ if(cmdflg==1,//180531from
+ cmdL_6=" intersectcrvsf("+Dqq("a")+","+funnm+",crv3d,fnameall);";
+ tmp=remove(1..(length(cmdL)),[2,length(cmdL)]); //181113(2lines)
+ cmdL=cmdL_tmp;
+// cmdL=remove(cmdL,[cmdL_2]);
+// cmdL=remove(cmdL,[cmdL_(length(cmdL))]);
+ CommandListC=concat(CommandListC,cmdL); //180531to
+ ,
+ if(wflg==1,tmp1=append(options,"m"));
+ if(wflg==-1,tmp1=append(options,"r"));
+ if(ErrFlag==0,
+ tmp="crv3onsf"+nm;
+ CalcbyC(tmp,[Cheadsurf(),Ctopsurf(tmp),cmdL],tmp1);
+ );
+ if(ErrFlag==1,
+ err("Intersectcrvsf not completed");
+ ,
+ ReadOutData(fname,["Disp=n"]); //181029
+ );
+ println("generate "+name);
+ parse(name);
+ );
+);
+////%Intersectcrvsf end////
+
+////%Sfcutparadatacdy start//// 181112
+Sfcutparadatacdy(nm,cutfun,fd):=
+ Sfcutparadatacdy(nm,cutfun,fd,[]);
+Sfcutparadatacdy(nm,cutfun,fd,options):=(
+//help:Sfcutparadatacdy("1","2*x+3*y+z=1","sfbd3d",fd,options);
+ regional(out3,out2,name3,name2,eps,fdL,rep,jj,pL,vn1,vn2,
+ tmp,tmp1,tmp2);
+ eps=10^(-5);
+ name2="sfcc2d"+nm;
+ name3="sfcc3d"+nm;
+ fdL=Fullformfunc(fd);
+ tmp=Strsplit(fdL_5,"=");
+ vn1=tmp_1;
+ tmp=Strsplit(fdL_6,"=");
+ vn2=tmp_1;
+ rep=["x",fdL_2,"y",fdL_3,"z",fdL_4];
+ tmp=Assign(cutfun,rep);
+ Implicitplot("sfc"+nm,tmp,fd_5,fd_6,["Msg=n","nodisp"]);
+ out3=[]; out2=[];
+ tmp1=parse("impsfc"+nm);
+ if(Measuredepth(tmp1)==1,tmp1=[tmp1]);
+ forall(1..(length(tmp1)),jj,
+ pL=tmp1_jj;
+ tmp2=[];
+ forall(pL,
+ tmp=Assign("[x,y,z]",rep);
+ tmp=Assign(tmp,[vn1,#_1,vn2,#_2]);
+ tmp=parse(tmp);
+ tmp2=append(tmp2,tmp);
+ );
+ Spaceline("-sfc"+nm+"n"+text(jj),tmp2,append(options,"Msg=n"));
+ out3=append(out3,tmp2);
+ tmp=Projcurve(tmp2);
+ out2=append(out2,tmp);
+ );
+ tmp=name3+"=["; tmp1=name3+"=[";
+ forall(1..(length(out3)),
+ tmp=tmp+"sfc"+nm+"n"+text(#)+"3d"+",";
+ tmp1=tmp1+Dqq("sfc"+nm+"n"+text(#)+"3d")+",";
+ );
+ tmp=substring(tmp,0,length(tmp)-1)+"];"; //190415
+ parse(tmp);
+ tmp1=substring(tmp1,0,length(tmp1)-1)+"]";
+ println("generate sfcutparadata "+tmp1);
+ tmp=name2+"="+Textformat(out2,6)+";"; //190415
+ parse(tmp);
+ out3;
+);
+////%Sfcutparadatacdy end////
+
+////%Sfcutparadata start////
+Sfcutparadata(nm,cutfunL,sfbd,fd):=SfcutparadataC(nm,cutfunL,sfbd,fd);
+Sfcutparadata(nm,cutfunL,sfbd,fd,options):=SfcutparadataC(nm,cutfunL,sfbd,fd,options);
+Sfcutparadata(nm,cutfunLorg,sfbd,fdorg,optionorg,optionsh):=
+ SfcutparadataC(nm,cutfunLorg,sfbd,fdorg,optionorg,optionsh);
+SfcutparadataC(nm,cutfunL,sfbd,fd):=(//180505
+ SfcutparadataC(nm,cutfunL,sfbd,fd,[],["do"]);
+);
+SfcutparadataC(nm,cutfunL,sfbd,fd,options):=
+ SfcutparadataC(nm,cutfunL,sfbd,fd,options,[]);
+SfcutparadataC(nm,cutfunLorg,sfbd,fdorg,optionorg,optionshorg):=(
+//help:Sfcutparadata("1","2*x+3*y+z=1","sfbd3d",fd,nohiddenoptions,hiddenoptions);
+ regional(funnm,cutfunL,fd,options,optionsh,name2,name3,name2h,name3h,
+ waiting,eqL,reL,strL,fname,fnameh,tmp,tmp1,tmp2,flg,wflg,flg,ii,jj,eps,cmdflg);
+ eps=10^(-5);
+ fd=ConvertFdtoC(fdorg);
+ tmp=select(1..(length(FuncListC)),FuncListC_#==fd);
+ funnm=text(tmp_1);
+ cutfunL=cutfunLorg;
+ if(!islist(cutfunL),cutfunL=[cutfunL]);
+ forall(1..(length(cutfunL)),
+ tmp1=Strsplit(cutfunL_#,"=");
+ if(length(tmp1)>1,
+ tmp2=tmp1_1+"-("+tmp1_2+")"; //180516
+ cutfunL_#=Cform(tmp2);
+ );
+ );
+ CutFunList=cutfunL; //180601
+ name2="sfcut2d"+nm;
+ name3="sfcut3d"+nm;
+ name2h="sfcuth2d"+nm;
+ name3h="sfcuth3d"+nm;
+ fname=Fhead+"sfcut"+nm+".txt";
+ fnameh=replace(fname,".txt","h.txt");
+ options=optionorg;
+ optionsh=select(optionshorg,length(#)>0); //181107
+ tmp=Divoptions(options);
+ eqL=tmp_5;
+ reL=tmp_6;
+ strL=tmp_7;
+ waiting=60;
+ wflg=0;
+ options=remove(options,reL);
+ wflg=0;
+ cmdflg=1;
+ forall(strL,
+ tmp=Toupper(substring(#,0,1));
+ if(tmp=="M",
+ cmdflg=0;
+ wflg=1;
+ options=remove(options,[#]);
+ );
+ if(tmp=="R",
+ cmdflg=0;
+ wflg=-1;
+ options=remove(options,[#]);
+ );
+ if(tmp=="C", //180531
+ cmdflg=1;
+ options=remove(options,[#]);
+ );
+ );
+ options=select(optionorg,length(#)>0); //190123from
+ tmp=Divoptions(options);
+ if(length(tmp_7)==0,options=append(options,"dr"));
+ optionsh=select(optionshorg,length(#)>0);
+ tmp=Divoptions(optionsh);
+ if(length(tmp_7)==0,optionsh=append(optionsh,"do")); //190123to
+ tmp1=select(options,
+ (indexof(#,"=")>0)&(Toupper(substring(#,0,1))=="C")); //181114from
+ if(length(tmp1)>0,
+ tmp1=tmp1_1;
+ tmp2=select(optionsh,
+ (indexof(#,"=")>0)&(Toupper(substring(#,0,1))=="C"));
+ if(length(tmp2)==0,
+ if(length(optionsh)==0,
+ optionsh=["do",tmp1];
+ ,
+ optionsh=append(optionsh,tmp1);
+ );
+ );
+ ); //181114to
+ StyleListC=concat(StyleListC,[name3,options,name3h,optionsh]); //181107
+ options=remove(options,eqL);
+ tmp1=text(length(cutfunL));
+ cmdL=[
+ " char fname[]="+Dqq(fname)+";",
+ " char fnameh[]="+Dqq(fnameh)+";",
+ " rangeUV("+funnm+");",
+ " boundary("+funnm+");",
+ " readoutdata3("+Dqq(Fhead+replace(sfbd,"3d","")+".txt")+","+Dqq(sfbd)+",sfbd);", //180531
+ " sfcutparadata("+funnm+","+tmp1+",sfbd,fname,fnameh);"
+ ];
+ if(cmdflg==1,//180531from
+ println(" ExeccmdC will generate "+ name3+","+name3h);
+ tmp=replace(cmdL_6,"fnameh",Dqq(""));
+ tmp=replace(tmp,"fname","fnameall"); cmdL_6=tmp;
+ cmdL_5=" readoutdata3(fnameall,"+Dqq(sfbd)+",sfbd);";
+ cmdL=append(cmdL," outputend(dirfname);");
+ cmdL=cmdL_(3..(length(cmdL))); //181113
+// cmdL=remove(cmdL,[cmdL_1,cmdL_2]); //180827
+ CommandListC=concat(CommandListC,cmdL); //180531to
+ ,
+ if(wflg==1,tmp1=append(options,"m"));
+ if(wflg==-1,tmp1=append(options,"r"));
+ if(ErrFlag==0,
+ tmp="sfcut"+nm;
+ CalcbyC(tmp,[Cheadsurf(),Ctopsurf(tmp),cmdL],tmp1); //180601
+ );
+ if(ErrFlag==1,
+ err("Sfcutparadata not completed");
+ ,
+ ReadOutData(fname,["Disp=n"]); //1810209
+ GLIST=append(GLIST,"ReadOutData("+Dqq(fname)+")");
+ ReadOutData(fnameh);
+ GLIST=append(GLIST,"ReadOutData("+Dqq(fnameh)+")");
+ if(islist(parse(name3)),
+ tmp1=name2+"=Projpara("+Dqq(name3)+",[";
+ tmp2="";
+ if(length(options)>0,
+ forall(options,
+ tmp2=tmp2+Dqq(#)+",";
+ );
+ tmp2=substring(tmp2,0,length(tmp2)-1);
+ );
+ tmp1=tmp1+tmp2+"]);";
+ parse(tmp1);
+ tmp2=select(optionsh,length(#)>0); //180517(2lines)
+ if(length(tmp2)==0,tmp2=["nodisp"]);
+ tmp1=name2h+"=Projpara("+Dqq(name3h)+",[";
+ forall(tmp2,
+ tmp1=tmp1+Dqq(#)+",";
+ );
+ tmp1=substring(tmp1,0,length(tmp1)-1)+"]);";
+ parse(tmp1);
+ ,
+ ErrFlag=1;
+ );
+ );
+ );
+);
+////%Sfcutparadata end////
+
+//help:end();
+
diff --git a/graphics/ketcindy/ketcindyfolder/scripts/ketlib/ketpicR/ketpic5_2_4.r b/graphics/ketcindy/ketcindyfolder/scripts/ketlib/ketpicR/ketpic5_2_4.r
new file mode 100644
index 0000000000..a53dd021a8
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/scripts/ketlib/ketpicR/ketpic5_2_4.r
@@ -0,0 +1,14413 @@
+# Copyright (C) 2014 Setsuo Takato, KETCindy Japan project team
+#
+#This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>
+
+
+#########################################
+
+ThisVersion<- "KeTpic for R v5_2_4(18.02.26)"
+
+print(ThisVersion)
+
+# 2018.02.26
+# Sfcutparadata changed
+# Partcrv3 debugged
+# Projcurve rewritten
+# Nohiddenparadata debugged
+# PthiddenQ debugged
+# 2018.02.24
+# Sfcutdata added ( for functions )
+# Meetpoints debugged (case Norm(PtB-PtA)<Eps0)
+# 2018.02.23
+# Makevaltable2 added ( for functions )
+# 2018.02.23
+# Crvonsfparadata,Crv3onsfparadata added
+# Wireparadata added
+# 2018.02.22
+# PthiddenQ,Nohiddenpara2 changed (Eps2)
+# 2018.02.21
+# PthiddenQ,Meetpoints debugged
+# Crvsfparadata debugged (OTHERPARTITION)
+# Partitionseg debugged (for non-list) and changed (Ns=0)
+# Intersectcrvsf added
+# 2018.02.19
+# Groupnearpt added
+# Collectnear debugged
+# Meetpoints,PthiddenQ debugged and changed (Groupnearpt used )
+# Parapt changed (for point list )
+# Partitionseg changed (remove close value )
+# Fullformfunc changed (Initialization of ADDPOINT)
+# Addpoints added
+# 2018.02.18
+# Projpara debugged ( for empty data, Mix replace )
+# WriteOutData debugged (for emply data )
+# Sfbdparadata,Cuspparadata debugged
+# Meetpoints replaced
+# 2018.02.17
+# PthiddenQ replaced
+# 2018.02.15
+# Cancoordpara debugged (X=-... )
+# 2018.02.14
+# Paramoncrv,Pointoncrv renamed to ...curve
+# 2018.02.12
+# Nohiddenpara2 debugged ( CUSPPT should be a list )
+# Dropnumlistcrv changed (Eps)
+# 2018.02.11
+# Paramocrv debugged ( case N=Length(PtL) )
+# Sfbdparadata, Borderparadata, Makexybdy, Partitionseg,
+# Evlptablepara, Fullformfunc, Dropnumlistcrv, Cuspsplitpara,
+# PthiddenQ, Nohiddenpara2 added
+# Crvsfparadata, Meetpoints, Clipdomain added
+# 2018.02.10
+# Partcrv3 debugged
+# 2018.02.09
+# Ptstart,Ptend changed ( for the case fig is empty)
+# Norm changed (Dotprod used )
+# 2018.02.07
+# Collectnear debugged (Looprange )
+# Intersectcurves debugged (sum)
+# 2018.02.06
+# Kukeiiwake debugged ( ParamonCurve -> Paramoncrv )
+# 2018.02.05
+# Dotprod changed ( crossprod not used )
+# Intersectpartseg changed ( case of length of result =1)
+# 2018.02.04
+# Diff added ( func, withvar, (varnamevalue1,... ))
+# Funvalue added ( for an expression )
+# 2018.02.02
+# Enclosing2 changed ( for distant curves, startpt option removed )
+# 2018.02.01
+# Intersectline,Intersectseg,...,Intersectcuves added
+# Quicksort added
+# Enclosing2 added (incomplete)
+# 2018.01.29
+# Length added
+# 2017.12.24
+# Objpolyhedron added
+# 2017.12.23
+# Objsymb, symb3data added
+# Objrecs, Objpolygon debugged
+# Objthicksurf added
+# 2017.12.22
+# Openobj,Closeobj,Writeobjpoint,Printobjstr,Objname,Objsurf added
+# Crossprod added
+# Objjoin, Objcurve, Objrecs, Objpolygon, Objsymb added
+# Spacecurve debugged
+# 2017.12.17
+# Setunitlen debugged ( MEMORI )
+# 2017.12.13
+# ReadOutData debugged
+# 2017.12.11
+# Enclosing debugged ( appendrow -> Appendrow )
+# 2017.11.29
+# Anglemark, Arrowhead, Ovaldata debugged ( Circldeta included )
+# 2017.11.27
+# Anglemark changed ( Scilab 16.12.29)
+# Plotdata,Paramplot,Spacecurve changed ( Scilab 16.12.13)
+# Enclosing changed ( Scilab 16.10.09)
+# Arrowhead,Arrowline changed ( Scilab 15.06.11)
+# Definecolor added ( Scilab 15.05.04)
+# 2017.11.26
+# Exprrot, Letterrot debugged ( `)
+# 2017.11.24
+# Deqplot debugged (Looprange)
+# 2017.11.20
+# InWindow debugged (for length=1)
+# 2017.10.28
+# Openfile changed (Creator)
+# 2017.10.23
+# ReadOutData greatly changed
+# 2017.10.11
+# Drwpt debugged (Flattenlist )
+# 2017.10.08
+# Bezier debugged ( Num )
+# 2017.10.07
+# ReadOutData debugged ( for null data )
+# 2017.10.06
+# Deqdata, Deqplot added
+# Connectseg remade(bug)
+# 2017.09.30
+# Bezierpt, Bezier added
+# 2017.09.29
+# Ptcrv debugged
+# 2017.09.28
+# Openfile changed
+# 2017.09.24
+# Circledata debugged
+# Kyoukai changed (Eps)
+# Shade updated
+# 2017.09.22
+# Setcolor changed
+# Plotdata,Paramplot,Spacecurve changed (N-1 -> N)
+# 2017.09.21
+# Shade changed (Sci 17.01.09)
+# 2017.09.17
+# Ovaldata,Assignadd changed
+# Dist added
+# Cicledata changed
+# Bowdata debugged (Circledata,etc)
+
+# 2015.11.05
+# WriteOutData changed
+
+# 2015.10.29
+# WriteOutData changed ( endmark //// )
+
+# 2015.10.24
+# ReadOutData changed ( in case of listlength=1 )
+
+# 2014.12.23
+# ReadOutData added
+
+# 2014.12.17
+# WriteOutData added
+
+# 2014.0905
+# Unscaling debugged MARKLENI => MARKLEN
+# 2014.03.31
+# PhHiddenData added
+# 2014.03.30
+# Facesdata changed ( for Hiddendata )
+# 2014.03.23
+# MARKLEN separated, Rotate3data debugged
+
+# 2013.12.19
+# Openfile, Closefile, Bowname, Bownamerot
+
+# 2013.11.13
+# Arrowhead, Arrowheaddata
+
+# 2013.08.07
+# Cancoordpara added
+
+# 2013.08.07
+# Integrate added
+
+# 2013.05.20
+# Openfile changed
+
+# 2013.05.03
+# Tabledata, Pointdata changed
+# Dividetable, Partframe added
+
+# 2013.02.10
+# Ketinit added
+
+# 2012.01.07
+# Arrowline, Arrowhead ( Cut implemented )
+
+# 2011.12.18
+# Framedata ( compliant for list )
+
+# 2011.12.12
+# Skeletonparadata... ( Flattellist used)
+
+# 2011.11.27
+# drwboxframe
+
+# 2011.11.07
+# metacommands added
+
+# 2011.11.02
+# Joingraphics ( for list structure )
+
+# 2011.08.24
+# Setcolor ( c(1,0,0,0.5) etc )
+# Rotate3data ( Point is available )
+
+# 2011.07.19
+# Drwline, Letter, Expr
+# Drwboxplot( etc ) min,max => outliners
+# Drwline ( unfinished in the case of "integer" )
+
+# 2011.06.25
+# joincrvs debugged
+
+# synchro with ketpict2e
+
+# 2011.06.01
+# Bowdata debugged
+
+#2011.05.28
+# Ratiocmyk, Setcolor ( new )
+
+#2011.04.28
+# Htickmark, Vtickmark debugged
+
+#2011.03.08
+# Drwboxframe debugged
+# Putrow, Putrowexpr debugged (Dpos )
+
+#2011.03.02
+# Tabledata ( index of hline ), PutcoL, PutcoLexpr ( "r",...) debugged
+# Texcom changed ( // => backslash )
+
+#2011.01.07
+# Dividegraphics, Splinedat are changed significantly
+# Readtextdata is changed
+
+#2011.01.04
+# Derivative, Integrate are added
+
+#2010.12.07
+# Translatedata, Scaledata, Reflectdata changed ( efficient for vector )
+# Rotatedata changed ( deg : logical )
+# HIstplotdata, Drwhistplot ( type => freq , fpplot (added) )
+
+# 2010.12.04
+# WindispT changed ( tickmark )
+# Lineplot changed ( mag=> length )
+# Plotdata debugged ( 'E=fun', 'D=')
+# Enclosing changed (return PD)
+
+# 2010.12.02
+# WindispT changed
+# Makecurves debugged
+
+# 2010.11.27
+# Pointdata changed ( efficient for matrix and data.frame )
+# WindispT
+# Setwindow ( decide from data )
+# Assign debugged ( strsplit => gsub(fixed=T))
+
+# 2010.11.20
+# Flattenlist, WindispT
+# Splinedata changed( efficient for data.frame )
+
+#2010.08.19 ( Maybe not finished )
+# Stripblanks
+# Fullformfunc, Sf3data
+
+#2010.08.17
+# Phparadata, Phpersdata, Phspersdata, Phsparadata
+# Facesdata, MakeveLfaceL, Menkakusi2
+# Rotate3data
+# Skeletonpersdata, Skeletonpers3data, Makeskeletonpersdata
+# Embed
+
+#2010.08.16
+# Spacecurve changed
+# CameracoordCurve, Partcrv3, Projpers, CameraCurve,
+# Perspt, Xyzaxpersname, Invperspt, Zparapt, Zperspt
+
+# 2010.08.15
+# Phcutoffdata added
+
+# 2010.08.13
+# Phcutdata, Spacecurve debugged
+# Setangle changed
+
+# 2010.08.09
+# Spacecurve
+# Rotate3data, Rotate3pt
+# Phcutdata
+
+# 2010.08.08
+# Implementing 3d
+# Initangle, Setangle, Setpers, SetstereoL, SetstereoR
+# Mixlength
+# Spaceline, Projpara, ProjCurve, Parapt
+# Xyzax3data, Xyzaxparaname
+# Cancoordpers, Invparapt, ProjcoordCurve
+# Skeletonparadata, Skeletonpara3data, Makeskeletondata, Kukannozoki
+
+# 2010.07.25
+# Rotatedata changed
+# Drwline changed (list of list)
+
+# 2010.04.09
+# Stat package added
+
+# 2010.04.02
+# Putcolexpr, Putrowexpr
+
+# 2010.04.02
+
+# Windisp, Op changed
+# Execmd added
+# Texnewcmd, Texrenewcmd, Texend,
+# Texctr, Texnewctr, Texsetctr
+# Kyoukai debugged
+
+# 2010.01.20
+# Partcrv, Makeshasen : debugged
+
+# 2010.01.23
+# Ovaldata, Ovalbox added
+
+# 2010.01.27
+# Readtextdata changed
+# Putrow, PutcoL debugged ( Putcol is OK)
+
+# 2010.01.31
+# Writetextdata added
+
+# 2010.02.12
+# Texvalctr, Texthectr added
+
+# 2010.02.22
+# Execmd changed
+
+# 2010.02.23
+# Op, Windisp changed
+
+# 2010.02.24
+# Execmd changed
+
+# 2010.03.07
+# Dotfilldata (Kosa>1)
+
+# 2010.03.21
+# Mixjoin
+# Koutenlist (bug)
+
+
+# 2010.03.24
+# Arrowhead ( bug in the case of "l" )
+
+# 2010.03.28
+# Tabledata
+# Diagcelldata ( New )
+
+# 2010.03.30
+# Tabledata
+
+###########################################
+
+XMIN<- -5
+XMAX<- 5
+YMIN<- -5 ; YMAX<- 5
+ZIKU<- "line"
+ARROWSIZE<- 1
+XNAME<- "$x$"
+XPOS<- "e"
+YNAME<- "$y$"
+YPOS<- "n"
+ONAME<- "O"
+OPOS<- "sw"
+ULEN<- "1cm"
+MilliIn<- 1/2.54*1000
+PenThick<- round(MilliIn*0.02)
+PenThickInit<- PenThick
+TenSizeInit<<- 0.02*2 #17.10.07
+TenSize<- TenSizeInit
+Wfile<-""
+MEMORI<- 0.05
+MEMORIInit<- MEMORI
+MEMORINow<- MEMORI
+MARKLEN<- 0.05
+MARKLENInit<- MARKLEN
+MARKLENNow<- MARKLEN
+GENTEN<- c(0,0)
+YaSize<- 1
+YaAngle<- 18
+YaPosition<- 1
+YaThick<- 1
+YaStyle<- "tf"
+PHI<- 30*pi/180
+THETA<- 60*pi/180
+FocusPoint<- c(0,0,0)
+EyePoint<- c(5,5,5)
+ASSIGNLIST<- list("`","'")
+
+SCALEX<- 1
+SCALEY<- 1
+LOGX<- 0
+LOGY<- 0
+
+TEXFORLEVEL<- 0
+TEXFORLAST<- list()
+
+#######################
+
+Ketinit<- function(){
+XMIN<<- -5
+XMAX<<- 5
+YMIN<<- -5 ; YMAX<<- 5
+ZIKU<<- "line"
+ARROWSIZE<<- 1
+XNAME<<- "$x$"
+XPOS<<- "e"
+YNAME<<- "$y$"
+YPOS<<- "n"
+ONAME<<- "O"
+OPOS<<- "sw"
+ULEN<<- "1cm"
+MilliIn<<- 1/2.54*1000
+PenThick<<- round(MilliIn*0.02)
+PenThickInit<<- PenThick
+TenSizeInit<<- 0.02*2 #17.10.07
+TenSize<<- TenSizeInit
+Wfile<<-""
+MEMORI<<- 0.05
+MEMORIInit<<- MEMORI
+MEMORINow<<- MEMORI
+MARKLEN<<- 0.05
+MARKLENInit<<- MARKLEN
+MARKLENNow<<- MARKLEN
+GENTEN<<- c(0,0)
+YaSize<<- 1
+YaAngle<<- 18
+YaPosition<<- 1
+YaThick<<- 1
+YaStyle<<- "tf"
+PHI<<- 30*pi/180
+THETA<<- 60*pi/180
+FocusPoint<<- c(0,0,0)
+EyePoint<<- c(5,5,5)
+ASSIGNLIST<<- list("`","'")
+
+SCALEX<<- 1
+SCALEY<<- 1
+LOGX<<- 0
+LOGY<<- 0
+
+TEXFORLEVEL<<- 0
+TEXFORLAST<<- list()
+}
+
+#-------------------------------------------------------
+
+Appendrow<- function(...)
+{
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ Out<-c()
+ Nc<- 0
+ for (I in 1:Nargs)
+ {
+ Dt<- varargin[[I]]
+ Nc<- max(Nc,Ncol(Dt))
+ if(class(Dt)=="matrix") Dt<-as.numeric(t(Dt))
+ Out<- c(Out,Dt)
+ }
+ if(Nc>0)
+ {
+ Out<-matrix(Out, nrow=Nc)
+ Out<-t(Out)
+ }
+ else
+ {
+ Out<-c()
+ }
+ return(Out)
+}
+
+Crossprod<-function(a,b)
+{
+ if(length(a)==3)
+ {
+ Tmp1<-a[2]*b[3]-a[3]*b[2]
+ Tmp2=a[3]*b[1]-a[1]*b[3]
+ Tmp3=a[1]*b[2]-a[2]*b[1]
+ Out=c(Tmp1,Tmp2,Tmp3)
+ }
+ else
+ {
+ Out=a[1]*b[2]-a[2]*b[1]
+ }
+ return(Out)
+}
+
+Datalength<-function(Data)
+{
+ if(length(Data)==0) return(0)
+ if(mode(Data)=="numeric") return(Nrow(Data))
+ if(mode(Data)=="character") return(nchar(Data))
+ if(mode(Data)=="list") return(length(Data))
+}
+
+Crossprod<- function (a,b){ # 17.12.22
+ if(length(a)==3){
+ Tmp1=a[2]*b[3]-a[3]*b[2]
+ Tmp2=a[3]*b[1]-a[1]*b[3]
+ Tmp3=a[1]*b[2]-a[2]*b[1]
+ Out=c(Tmp1,Tmp2,Tmp3)
+ }else{
+ Out=a[1]*b[2]-a[2]*b[1]
+ }
+}
+
+Dotprod<-function(a,b){ # 18.02.05
+ nn=min(length(a),length(b))
+ out=0
+ for(jj in Looprange(1,nn)){
+ out=out+a[jj]*b[jj]
+ }
+ return(out)
+}
+
+Dist<- function(...) # 17.09.17
+{
+ varargin<- list(...)
+ a=varargin[[1]]
+ if(length(varargin)==1){
+ tmp=sqrt(Dotprod(a,a))
+ return(as.vector(tmp))
+ }
+ else{
+ b=varargin[[2]]
+ tmp=sqrt(Dotprod(b-a,b-a))
+ retun(as.vector(tmp))
+ }
+}
+
+Member<-function(A,L)
+{
+ N<-length(L);
+ if(length(N)==0) return(FALSE)
+ for (I in 1:N)
+ {
+ if(class(L)=="list")
+ {
+ Tmp<-L[[I]]
+ }
+ else
+ {
+ Tmp<-L[I]
+ }
+ if(mode(A)=="numeric")
+ {
+ if(Norm(A-Tmp)==0) return(TRUE)
+ }
+ else
+ {
+ if(A==Tmp) return(TRUE)
+ }
+ }
+ return(FALSE)
+}
+
+Norm<-function(V)
+{
+ Tmp=Dotprod(V,V) #18.02.09
+# Tmp<-as.vector(V);
+# Tmp<-crossprod(Tmp,Tmp)
+ Tmp<-sqrt(Tmp)
+# as.numeric(Tmp)
+}
+
+Ncol<-function(P)
+{
+ if(class(P)=="matrix") return(ncol(P))
+ else return(length(P))
+}
+
+Nrow<-function(P)
+{
+ if(length(P)==0) return(0)
+ if(class(P)=="matrix") return(nrow(P))
+ else return(1)
+}
+
+Looprange<- function(a,b)
+{
+if(a<=b) return(a:b)
+return(c())
+}
+
+Stripblanks<- function(Ch){
+ Tmp<- gsub(" ","",Ch,fixed=TRUE)
+ return(Tmp)
+}
+
+Quicksort<- function(seqL,key){ #18.02.01
+ if(length(seqL)<2){
+ out=seqL
+ }else{
+ tmp1=Op(1,seqL)
+ tmp2=Op(2,seqL)
+ if(Op(key,tmp1)>=Op(key,tmp2)){
+ pivot = tmp1
+ }else{
+ pivot=tmp2
+ }
+ left = list()
+ right = list()
+ for(ii in 1:length(seqL)){
+ tmp=Op(ii,seqL)
+ if(Op(key,tmp)< Op(key,pivot)){
+ left=c(left,list(tmp))
+ }else{
+ right=c(right,list(tmp))
+ }
+ }
+ left = Quicksort(left,key)
+ right = Quicksort(right,key)
+ out=c(left,right)
+ }
+ return(out)
+}
+
+Derivative<- function(...)
+{
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ Fstr<- varargin[[1]]
+ Vstr<- varargin[[2]]
+ NvaL<- length(Vstr)
+ Flg<- 0
+ if(Nargs>=3){
+ VaL<- varargin[[3]]
+ Flg<- 1
+ }
+ Str<- paste("deriv(~",Fstr,",c('",Vstr[1],"'",sep="")
+ for(J in Looprange(2,NvaL)){
+ Str<- paste(Str,",'",Vstr[J],"'",sep="")
+ }
+ Str<- paste(Str,")",sep="")
+ if(NvaL<=3){
+ Str<- paste(Str,",func=TRUE)",sep="")
+ }
+ else{
+ Str<- paste(Str,")",sep="")
+ }
+ f<- eval(parse(text=Str))
+ if(Flg==1){
+ if(NvaL<=3){
+ if(NvaL==1){V<- f(VaL[1])}
+ if(NvaL==2){V<- f(VaL[1],VaL[2])}
+ if(NvaL==3){V<- f(VaL[1],VaL[2],VaL[3])}
+ }
+ else{
+ for(J in 1:NvaL){
+ Tmp<- paste(Vstr[J],'<-',as.character(VaL[J]))
+ eval(parse(text=Tmp))
+ }
+ V<- eval(f)
+ }
+ Out<- attr(V,'gradient')
+ Out<- Out[1,]
+ }
+ else{
+ Out<- f
+ }
+ return(Out)
+}
+
+Diff<- function(...){ #18.02.04
+ varargin=list(...)
+ Nargs=length(varargin)
+ fun=varargin[[1]]
+ withvar=varargin[[2]]
+ tmp=paste("f<- expression(",fun,")",sep="")
+ eval(parse(text=tmp))
+ nn=nchar(withvar)
+ for(jj in Looprange(1,nn)){
+ tmp=substring(withvar,jj,jj)
+ f=D(f,tmp)
+ }
+ var=c()
+ val=""
+ for(jj in Looprange(3,Nargs)){
+ tmp=strsplit(varargin[[jj]],"=")
+ var=c(var,tmp[[1]][1])
+ val=paste(val,tmp[[1]][2],",",sep="")
+ }
+ if(Length(val)>1){
+ val=substring(val,1,Length(val)-1)
+ f=deriv(f,var,func=TRUE)
+ tmp=paste("out=f(",val,")",sep="")
+ out=eval(parse(text=tmp))
+ return(out[1])
+ }else{
+ return(f)
+ }
+}
+
+Funvalue<- function(...){
+ varargin=list(...)
+ Nargs=length(varargin)
+ df=varargin[[1]]
+ var=c()
+ val=""
+ for(jj in Looprange(2,Nargs)){
+ tmp=strsplit(varargin[[jj]],"=")
+ var=c(var,tmp[[1]][1])
+ val=paste(val,tmp[[1]][2],",",sep="")
+ }
+ val=substring(val,1,Length(val)-1)
+ dfun=deriv(df,var,func=TRUE)
+ tmp=paste("out=dfun(",val,")",sep="")
+ eval(parse(text=tmp))
+ return(out[1])
+}
+
+Integrate<- function(...)
+{
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ Fstr<- varargin[[1]]
+ Vstr<- varargin[[2]]
+ IntvL<- varargin[[3]]
+ Str<- 'Tmpfun<- function('
+ Str<- paste(Str,Vstr,'){',sep='')
+ Str<- paste(Str,Fstr,'}',sep='')
+ eval(parse(text=Str))
+ Tmpfunv<- function(x){sapply(x,Tmpfun)}
+ Out<- 0
+ for (J in 1:(length(IntvL)-1)){
+ Tmp<- integrate(Tmpfunv,IntvL[J],IntvL[J+1])
+ Out<- Out+Tmp[[1]]
+ }
+ return(Out)
+}
+
+#--------------------------------------
+
+#########################
+
+Anglemark<- function(...)
+{
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ Eps<- 10^(-3)
+ PA<- varargin[[1]]
+ PB<- varargin[[2]]
+ PC=varargin[[3]]
+ r <- 0.5
+ if(Nargs>=4){
+ r<- varargin[[4]]*r
+ }
+ Out=c()
+ if(r>min(Norm(PA-PB),Norm(PC-PB))){
+ return(Out)
+ }
+ Cir<- Circledata(c(PB,r)) #17.11.29
+ Tmp<- IntersectcrvsPp(Cir,Listplot(PA,PB))
+ P1<- Op(2,Op(1,Tmp))
+ Tmp<- IntersectcrvsPp(Cir,Listplot(PC,PB))
+ P2<- Op(2,Op(1,Tmp))
+ if(abs(P1-P2)<Eps){
+ Out<-c()
+ return(Out)
+ }
+ if(P1<P2-Eps){
+ Out<- Partcrv(P1,P2,Cir)
+ }
+ else{
+ Tmp<- Numptcrv(Cir)
+ Tmp1<- Partcrv(P1,Tmp,Cir)
+ Tmp2<- Partcrv(1,P2,Cir)
+ Out<- Joincrvs(Tmp1,Tmp2)
+ }
+}
+
+##############################################
+
+Arrowdata<- function(...)
+{
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ P<- varargin[[1]]
+ Q<- varargin[[2]]
+ R<- Q
+ Futosa<- YaThick
+ Ookisa<- YaSize
+ Thickness<- 1
+ Hiraki<- YaAngle
+ Yapos<- YaPosition
+ Position<- 1
+ Str<- YaStyle
+ Flg<- 0
+ for (I in Looprange(3,Nargs)){
+ Tmp<- varargin[[I]]
+ if(mode(Tmp)=="numeric"){
+ if(length(Tmp)>1){
+ R<- Tmp
+ }
+ else{
+ if(Flg==0){
+ Ookisa<- Ookisa*Tmp
+ }
+ if(Flg==1){
+ if(Tmp<5){
+ Hiraki<- Tmp*Hiraki
+ }
+ else{
+ Hiraki<- Tmp
+ }
+ }
+ if(Flg==2){
+ R<- P+Tmp*(Q-P)
+ }
+ else{
+ R<- P+Yapos*(Q-P)
+ }
+ if(Flg==3){
+ Futosa<- Tmp
+ }
+ Flg<- Flg+1
+ }
+ }
+ if(mode(Tmp)=="character"){
+ Tmp<- grep("=", Tmp)
+ if(length(Tmp)>0){
+ eval(parse(text=Tmp))
+ Futosa<- Futosa*Thickness
+ R<- P+Position*(Q-P)
+ }
+ else{
+ Str<- Tmp
+ }
+ }
+ }
+ Tmp1<- Listplot(c(P,Q))
+ Tmp2<- Arrowheaddata(R,Q-P,Ookisa,Hiraki,Futosa,Str)
+ Out<- Joingraphics(Tmp1,Tmp2)
+}
+
+######################################
+
+# 2013.11.13 No Intersect debugged
+
+Arrowhead<-function(...)
+{ ## Scaling is implemented
+ ## 12.01.08 Kirikomi
+ varargin<-list(...)
+ Nargs<-length(varargin)
+ P<-varargin[[1]]
+ Houkou<-varargin[[2]]
+ Ookisa<-0.2*YaSize
+ Hiraki<-YaAngle
+ Futosa<-0.5*YaThick
+ Cut<- 0
+ Str<-YaStyle
+ Flg<- 0
+ for (I in Looprange(3,Nargs)){
+ Tmp<-varargin[[I]]
+ if(is.character(Tmp)){
+ Equal<- grep("=",Tmp,fixed=TRUE) # 12.01.07 from
+ if(length(Equal)>0){
+ Tmp1<- strsplit(Tmp,"=",fixed=TRUE)
+ Tmp2<- Tmp1[[1]]
+ if(Tmp2[1]=="Cut" || Tmp2[1]=="cut"){
+ Tmp<- paste("Cut=",Tmp2[2],sep="")
+ eval(parse(text=Tmp))
+ }
+ }else{
+ Str<- Tmp
+ } # 12.01.07 upto
+ }
+ if(is.numeric(Tmp) && length(Tmp)==1){
+ if(Flg==0) Ookisa<-Ookisa*Tmp
+ if(Flg==1){
+ if(Tmp<5) Hiraki<-Tmp*Hiraki
+ else Hiraki<-Tmp
+ }
+ if(Flg==2) Futosa<-Tmp
+ Flg<-Flg+1
+ }
+ }
+ Ookisa<-1000/2.54/MilliIn*Ookisa
+ Theta<-Hiraki*pi/180
+ if(Nrow(Houkou)>1){
+ P<- Doscaling(P)
+ Houkou<- Doscaling(Houkou)
+ Tmp<-Nearestpt(P,Houkou)
+ A<-Tmp[[1]]
+ I<-floor(Tmp[[2]])
+ G<-Circledata(c(P,Ookisa*cos(Theta)),N=10) #17.11.29
+ Flg<- 0 # 13.11.13
+ JL<-seq(I,1,by=-1)
+ for (J in JL){
+ B<-Ptcrv(J,Houkou)
+ Tmp<-IntersectcrvsPp(Listplot(list(A,B)),G)
+ if(length(Tmp)>0){
+ Flg<- 1
+ break
+ }
+ A<-B
+ }
+ if(Flg==0){ # 13.11.13
+ print("Arrowhead may be too large (no intersect)")
+ return(P)
+ }
+ Houkou<-P-Op(1,Tmp[[1]])
+ Houkou<- Unscaling(Houkou)
+ P<- Unscaling(P)
+ }
+ P<- Doscaling(P)
+ Houkou<- Doscaling(Houkou)
+ Ev<--1/Norm(Houkou)*Houkou
+ Nv<-c(-Ev[2],Ev[1])
+ if(length(grep("c",Str))>0){
+ P<-P-0.5*Ookisa*cos(Theta)*Ev
+ }
+ if(length(grep("b",Str))>0){
+ P<-P-Ookisa*cos(Theta)*Ev
+ }
+ A<-P+Ookisa*cos(Theta)*Ev+Ookisa*sin(Theta)*Nv
+ B<-P+Ookisa*cos(Theta)*Ev-Ookisa*sin(Theta)*Nv
+ if(length(grep("l",Str))>0){
+ Tmp<-Listplot(list(A,P,B))
+ Tmp1<- Unscaling(Tmp)
+ Drwline(Tmp1,Futosa)
+ }
+ else{
+ C<- P+(1-Cut)*((A+B)/2-P) # 12.01.07
+ Tmp<- Listplot(list(A,P,B,C,A)) # 12.01.07
+ Tmp1<- Unscaling(Tmp)
+ Shade(Tmp1)
+ Tmp=Listplot(c(A,P,B,C,A,P)) # 15.6.20
+ Tmp1=Unscaling(Tmp)
+ Drwline(Tmp1,0.1) # 15.06.11, 15.06.14
+ }
+}
+
+############################################
+
+# 2013.11.13 No intersect debugged
+
+Arrowheaddata<- function(...)
+{ ## Scaling is implemented
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ P<- varargin[[1]]
+ Houkou<- varargin[[2]]
+ Ookisa<- 0.2*YaSize
+ Hiraki<- YaAngle
+ Futosa<- 0
+ Thickness<- 1
+ Str<- YaStyle
+ Flg<- 0
+ for (I in Looprange(3,Nargs)){
+ Tmp<-varargin[[I]]
+ if(mode(Tmp)=="character"){
+ Tmp1<-grep("=",Tmp)
+ if(length(Tmp1)>0){
+ eval(parse(text=Tmp))
+ Futosa<- Thickness
+ }
+ else{
+ Str<- Tmp
+ }
+ }
+ if(mode(Tmp)=="numeric" && length(Tmp)==1){
+ if(Flg==0) Ookisa<-Ookisa*Tmp
+ if(Flg==1){
+ if(Tmp<5) Hiraki<-Tmp*Hiraki
+ else Hiraki<-Tmp
+ }
+ if(Flg==2) Futosa<-Tmp
+ Flg<-Flg+1
+ }
+ }
+ Theta<- Hiraki*pi/180
+ if(Nrow(Houkou)>1){
+ P<- Doscaling(P)
+ Houkou<- Doscaling(Houkou)
+ Tmp<-Nearestpt(P,Houkou)
+ A<-Tmp[[1]]
+ I<-floor(Tmp[[2]])
+ G<-Circledata(c(P,Ookisa*cos(Theta)),N=10) #17.11.29
+ Flg<- 0 # 13.11.13
+ JL<-seq(I,1,by=-1)
+ for (J in JL){
+ B<- Ptcrv(J,Houkou)
+ Tmp<- IntersectcrvsPp(Listplot(list(A,B)),G)
+ if(length(Tmp)>0){
+ Flg<- 1
+ break
+ }
+ A<-B
+ }
+ if(Flg==0){ # 13.11.13
+ print("Arrowhead may be too large (no intersect)")
+ return(P)
+ }
+ Houkou<-P-Op(1,Tmp[[1]])
+ Houkou<- Unscaling(Houkou)
+ P<- Unscaling(P)
+ }
+ P<- Doscaling(P)
+ Houkou<- Doscaling(Houkou)
+ Ev<- -1/Norm(Houkou)*Houkou
+ Nv<- c(-Ev[2],Ev[1])
+ if(length(grep("c",Str))>0){
+ P<-P-0.5*Ookisa*cos(Theta)*Ev
+ }
+ if(length(grep("b",Str))>0){
+ P<-P-Ookisa*cos(Theta)*Ev
+ }
+ A<-P+Ookisa*cos(Theta)*Ev+Ookisa*sin(Theta)*Nv
+ B<-P+Ookisa*cos(Theta)*Ev-Ookisa*sin(Theta)*Nv
+ Tmp<- Listplot(A,P,B)
+ Out<- Unscaling(Tmp)
+ return(Out)
+}
+
+##########################################
+
+Arrowline<- function(...)
+{ # 12.01.07 kirikomi
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ P<- varargin[[1]]
+ Q<- varargin[[2]]
+ Futosa<- YaThick
+ Ookisa<- YaSize
+ Hiraki<- YaAngle
+ Yapos<- YaPosition
+ Cutstr<- "Cut=0"
+ Str<- YaStyle
+ Flg<- 0
+ for (I in Looprange(3,Nargs)){
+ Tmp<- varargin[[I]]
+ if(is.character(Tmp)){
+ Equal<- grep("=",Tmp,fixed=TRUE) # 12.01.07 from
+ if(length(Equal)>0){
+ Tmp1<- strsplit(Tmp,"=")
+ Tmp2<- Tmp1[[1]]
+ if(Tmp2[1]=="Cut" || Tmp2[1]=="cut"){
+ Tmp<- paste("Cut=", Tmp2[2],sep="")
+ Cutstr<- Tmp
+ }
+ }
+ else{
+ Str<- Tmp
+ } # 12.01.07 upto
+ }
+ if(is.numeric(Tmp) && length(Tmp)==1){
+ if(Flg==0) Ookisa<- Ookisa*Tmp
+ if(Flg==1){
+ if(Tmp<5) Hiraki<- Tmp*Hiraki
+ else Hiraki<- Tmp
+ }
+ if(Flg==2) Yapos<- Tmp
+ if(Flg==3) Futosa<- Tmp
+ Flg<- Flg+1
+ }
+ }
+ R<- P+Yapos*(Q-P)
+ Tmp=Q-Unscaling(0.2*Ookisa/2*(Q-P)/Norm(Q-P)) # 15.10.24
+ Drwline(Listplot(c(P,Tmp)),Futosa)
+ Arrowhead(R,Q-P,Ookisa,Hiraki,Futosa,Cutstr,Str)
+}
+
+#########################################
+
+Assign<- function(...)
+{
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ if(Nargs==0){
+ ASSIGNLIST<<- list("`",Prime())
+ Out<- ASSIGNLIST
+ return()
+# return("Assign reset done");
+ }
+ L<- list("`","'")
+ if(Nargs%%2==0){
+ L<- Mixjoin(L,varargin)
+ ASSIGNLIST<<- L
+ Out<- L
+ return()
+# return("Assign set done");
+ }
+ if(Nargs==1){
+ Fnstr<- varargin[[1]]
+ if(nchar(Fnstr)==0){ # case of ""
+ L<- ASSIGNLIST
+ Out<- c()
+ for (I in seq(1,length(L),by=2)){
+ Tmp1<- L[[I]]
+ Tmp2<- L[[I+1]]
+ if(length(Tmp2)==1){
+ Tmp3<- as.character(Tmp2)
+ }
+ else{
+ if(mode(Tmp2)=="character"){
+ Tmp3<- Tmp2
+ }
+ else if(mode(Tmp2)=="list"){
+ Tmp3<- makeliststr(Tmp2)
+ }
+ else if(mode(Tmp2)=="numeric"){
+ Tmp3<- "c("
+ for (J in Looprange(1,length(Tmp2))){
+ Tmp3<- paste(Tmp3,as.character(Tmp2[J]),sep="")
+ if(J<length(Tmp2)){
+ Tmp3<- paste(Tmp3,",",sep="")
+ }
+ }
+ Tmp3<- paste(Tmp3,")",sep="")
+ if(class(Tmp2)=="matrix"){
+ Nr<- as.character(nrow(Tmp2))
+ Tmp3<- paste("matrix(",Tmp3,"nrow=",Nr,")",sep="")
+ }
+ }
+ }
+ Tmp<- paste(Tmp1,"=",Tmp3,sep="")
+ Out<- c(Out,Tmp)
+ }
+ return(Out);
+ }
+ if(substr(Fnstr,1,1)=="?"){
+ Fnstr<- substr(Fnstr,2,nchar(Fnstr))
+ for (I in seq(1,length(ASSIGNLIST),by=2)){
+ Tmp<- ASSIGNLIST[[I]]
+ if(Tmp==Fnstr){
+ Out<- Mixjoin(list(I),ASSIGNLIST[I+1])
+ return(Out)
+ }
+ }
+ Out<- "Not found"
+ return(Out);
+ }
+ L<- ASSIGNLIST
+ }
+ else{
+ if(mode(varargin[[2]])=="numeric"){
+ Fnstr<- varargin[[Nargs]]
+ for (I in Looprange(1,Nargs-1)){
+ L[[I]]=varargin[[I]]
+ }
+ }
+ else{
+ Fnstr<- varargin[[1]]
+ for (I in Looprange(2,Nargs)){
+ L[[I-1]]<- varargin[[I]]
+ }
+ }
+ }
+ for (I in seq(1,length(L),by=2)){
+ Vname<- L[[I]]
+ Val<- L[[I+1]]
+ if(mode(Val)=="numeric"){
+ if(Nrow(Val)==1){
+ for (K in Looprange(1,length(Val))){
+ Tmp<- paste(Vname,"[", as.character(K),"]",sep="")
+ if(mode(Val[K])=="numeric"){
+ Tmp1<- paste("(",as.character(Val[K]),")",sep="")
+ }
+ else{
+ Tmp1<- Val[K]
+ }
+ Fnstr<- gsub(Tmp,Tmp1,Fnstr,fixed=TRUE)
+ }
+ }
+ else{
+ for (J in Looprange(1,Nrow(Val))){
+ for (K in Looprange(1,Ncol(Val))){
+ Tmp<- paste(Vname,"(",as.character(J),",",as.character(K),")",sep="")
+ if(mode(Val[J,K])=="numeric"){
+ Tmp1<- paste("(",as.character(Val[J,K]),")",sep="")
+ }
+ else{
+ Tmp1<- Val[J,K]
+ }
+ Fnstr<- gsub(Tmp,Tmp1,Fnstr,fixed=TRUE)
+ }
+ }
+ }
+ if(length(Val)==1){
+ Rep<- as.character(Val)
+ }
+ else{
+ Rep<-""
+ if(class(Val)=="matrix"){
+ Rep<- "matrix("
+ }
+ Rep<- paste(Rep,"c(",sep="")
+ for (J in Looprange(1,length(Val))){
+ Rep<- paste(Rep,as.character(Val[J]),sep="")
+ if(J<length(Val)){
+ Rep<- paste(Rep,",",sep="")
+ }
+ else{
+ Rep<- paste(Rep,")",sep="")
+ }
+ }
+ if(class(Val)=="matrix"){
+ Rep<- paste(Rep,",nrow=",as.character(nrow(Val)),")",sep="")
+ }
+ }
+ Tmp1<- paste("(",Rep,")",sep="")
+ }
+ if(mode(Val)=="character"){
+ Tmp1<- Val
+ }
+ if(mode(Val)=="list"){
+ Tmp1<- Makeliststr(Val)
+ }
+ Fnstr<- gsub(Vname,Tmp1,Fnstr,fixed=TRUE) # 10.11.20
+ }
+ return(Fnstr)
+}
+
+#########################################
+
+Assignadd<- function(...)
+{
+ varargin<- list(...)
+ L<- ASSIGNLIST
+ L<- Mixjoin(L,varargin)
+ ASSIGNLIST<<- L
+# return("assign add done"); #17.09.17
+}
+
+#########################################
+
+Assignrep<- function(...)
+{
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ L<- ASSIGNLIST
+ for (I in seq(1,Nargs,by=2)){
+ Vname<- varargin[[I]]
+ Val<- varargin[[I+1]]
+ Tmp1<- paste("?",Vname,sep="")
+ Tmp<- Assign(Tmp)
+ if(mode(Tmp)=="character"){
+ next
+ }
+ I<- Tmp[[1]]
+ L<- Mixjoin(L,list(Val))
+ }
+ ASSIGNLIST<<- L
+}
+
+#########################################
+
+ Assignset<- function(...)
+{
+ Assign(...)
+}
+
+#########################################
+
+Beginpicture<-function(ul)
+{ ## Scaling is implemented
+ Tmp<- Doscaling(c(XMIN,YMIN))
+ Xm<- Tmp[1]
+ Ym<- Tmp[2]
+ Tmp<- Doscaling(c(XMAX,YMAX))
+ XM<- Tmp[1]
+ YM<- Tmp[2]
+ Dx<- XM-Xm
+ Dy<- YM-Ym
+ Sym<-".0123456789 +-*/"
+ SL<-Sym
+ OL<-"+-*/"
+ if(ul!=""){
+ ULEN<<-ul;
+ }
+ Is<-1;
+ VL<-"";
+ Ucode<-ULEN
+ for (I in Looprange(1,nchar(Ucode))){
+ C<-substring(Ucode,I,I);
+ if(length(grep(C,SL))>0){
+ if(length(grep(C,OL))>0){
+ Tmp<-substring(Ucode,Is,I-1);
+ Str<-paste(VL,Tmp,C,sep="")
+ VL<-Str
+ Is<-I+1;
+ }
+ }
+ else{
+ Unit<-substring(Ucode,I,I+1)
+ Str<-substring(Ucode,Is,I-1)
+ VL<-paste(VL,Str,sep="")
+ break;
+ }
+ }
+ Valu<-eval(parse(text=VL))
+ Str<-as.character(Valu);
+ ULEN<<- paste(Str,Unit,sep="")
+ if(Unit=="cm") MilliIn<<-1000/2.54*Valu
+ if(Unit=="mm") MilliIn<<-1000/2.54*Valu/10
+ if(Unit=="in") MilliIn<<-1000*Valu
+ if(Unit=="pt") MilliIn<<-1000/72.27*Valu
+ if(Unit=="pc") MilliIn<<-1000/6.022*Valu
+ if(Unit=="bp") MilliIn<<-1000/72*Valu
+ if(Unit=="dd2") MilliIn<<-1000/1238/1157/72.27*Valu
+ if(Unit=="cc") MilliIn<<-1000/1238/1157/72.27*12*Valu;
+ if(Unit=="sp") MilliIn<<-1000/72.27/65536*Valu/10
+ MARKLEN<<- MARKLENNow*1000/2.54/MilliIn;
+ Str<-paste("{\\unitlength=",ULEN,"%\n",sep="")
+ cat(Str,file=Wfile,append=TRUE)
+ cat("\\begin{picture}%\n",file=Wfile,append=TRUE)
+ Str<-"("
+ Tmp<-as.character(round(Dx,digits=6))
+ Str<-paste(Str,Tmp,",",sep="")
+ Tmp<-as.character(round(Dy,digits=6))
+ Str<-paste(Str,Tmp,")(",sep="")
+ Tmp<-as.character(round(Xm,digits=6))
+ Str<-paste(Str,Tmp,",",sep="")
+ Tmp<-as.character(round(Ym,digits=6))
+ Str<-paste(Str,Tmp,")%\n",sep="")
+ cat(Str,file=Wfile,append=TRUE)
+ Str<-paste("\\special{pn ",as.character(PenThickInit),"}%\n",sep="")
+ cat(Str,file=Wfile,append=TRUE)
+ cat("%\n",file=Wfile,append=TRUE)
+}
+
+#################################################
+
+Bowdata<- function(...) #17.09.17
+{
+ varargin <- list(...)
+ Nargs <- length(varargin)
+ PA <- varargin[[1]]
+ PB <- varargin[[2]]
+ Cut <- 0
+ D <- 1/2*Norm(PB-PA)
+ if(Nargs>=3) {
+ H <- varargin[[3]]*D*0.2
+ }
+ else {
+ H <- D*0.2
+ }
+ H <- min(H,D)
+ if(Nargs>=4){
+ Cut <- varargin[[4]]
+ }
+ Ydata <- MakeBowdata(PA,PB,H)
+ C <- Op(1,Ydata)
+ r <- Op(2,Ydata)
+ R1 <- Op(3,Ydata)
+ R2 <- Op(4,Ydata)
+ Rng <- paste("R=c(",as.character(R1),",",as.character(R2),")",sep="")
+ Theta <- (R1+R2)*0.5
+ BOWMIDDLE <<- list(c(C[1]+r*cos(Theta),C[2]+r*sin(Theta)),Theta)
+ M <- Op(1,BOWMIDDLE)
+ ThetaM <- Op(2,BOWMIDDLE)
+ BOWSTART <<- PA
+ BOWEND <<- PB
+ if(Cut==0){
+ Pd<- Circledata(c(C,r),Rng)
+ }
+ else{
+ Alpha <- R1; Beta <- ThetaM-Cut/(2*r)
+ Rng <- paste("Rng=c(",as.character(Alpha),",",as.character(Beta),")",sep="")
+ Pd <- Circledata(c(C,r),Rng)
+ Alpha <- ThetaM+Cut/(2*r); Beta <- R2
+ Rng <- paste("R=c(",as.character(Alpha),",",as.character(Beta),")",sep="")
+ Tmp <- Circledata(c(C,r),Rng)
+ Pd <- Appendrow(Pd,c(Inf,Inf),Tmp)
+ }
+}
+
+Bowmiddle <- function(...)
+{
+ varargin <- list(...)
+ Nargs <- length(varargin)
+ if( Nargs==0) {
+ M <- BOWMIDDLE
+ return(M)
+ }
+ if(Nargs==1) {
+ Bdata <- varargin[[1]]
+ A <- Bdata[1,]
+ Dind <- Dataindex(Bdata)
+ Dc <- Nrow(Dind)
+ Tmp <- Dind[Dc,2]
+ B <- Bdata[Tmp,]
+ if(Dc==1) {
+ Tmp1 <- round(Tmp/2)
+ }
+ else {
+ Tmp1 <- Dind[1,2]
+ }
+ D <- Bdata[Tmp1,]
+ B <- B-A
+ D <- D-A
+ Tmp1 <- B[1]*D[2]-D[1]*B[2]
+ Tmp2 <- (Norm(B)^2*D[2]-B[2]*Norm(D)^2)/2
+ Tmp3 <- -(Norm(B)^2*D[1]-B[1]*Norm(D)^2)/2
+ C <- c(Tmp2,Tmp3)/Tmp1+A
+ R <- Norm(C-A)
+ B <- B+A
+ V <- (A+B)/2-C
+ V <- V/Norm(V)
+ M <- C+R*V
+ }
+ else {
+ A <- varargin[[1]]; B <- varargin[[2]]
+ D <- 1/2*Norm(B-A)
+ H <- 0.2*D;
+ if(length(varargin)>=3) {
+ Tmp <- varargin[[3]]
+ H <- Tmp*D*0.2
+ }
+ H <- min(H,D)
+ Ydata <- MakeBowdata(A,B,H)
+ C <- Op(1,Ydata)
+ R <- Op(2,Ydata)
+ T <- (Op(3,Ydata)+Op(4,Ydata))/2
+ P <- C+R*c(cos(T),sin(T))
+ #M <- list(P,T)
+ M <- P
+ }
+ return(M)
+}
+
+##########################
+# 13.12.19 small movement supported
+
+Bowname<- function(...)
+{
+ varargin <- list(...)
+ Nargs <- length(varargin)
+ Siki <- varargin[[Nargs]]
+ Nargs<- Nargs-1
+ Dr<- "c"
+ if(Nargs>=1){
+ Tmp<- varargin[[Nargs]]
+ if(is.character(Tmp)){
+ Dr<- Tmp
+ Nargs<- Nargs-1
+ }
+ }
+ if(Nargs==0){
+ Siki <- varargin[[1]]
+ P <- Op(1,BOWMIDDLE)
+ }
+ else if(Nargs==1){
+ Bdata <- varargin[[1]]
+ P <- Bowmiddle(Bdata)
+ }
+ else{
+ A <- varargin[[1]]; B <- varargin[[2]]
+ D <- 1/2*Norm(B-A)
+ Tmp <- varargin[[3]]
+ if(is.character(Tmp)){
+ H <- D*0.2
+ }
+ else {
+ H <- Tmp*D*0.2
+ }
+ H <- min(H,D)
+ Ydata <- MakeBowdata(A,B,H)
+ Tmp <- Bowmiddle(Ydata)
+ P <- Op(1,Tmp)
+ }
+ Expr(P,Dr,Siki)
+}
+
+##########################
+# 13.12.19 small movement supported
+# A,B, ... no longer supported
+
+Bownamerot <- function(...)
+{
+ varargin <- list(...)
+ Nargs <- length(varargin)
+ Eps <- 10^(-6)
+ Flg <- 1
+ Tmp <- varargin[[Nargs]]
+ if(is.numeric(Tmp) && length(Tmp)==1 && Tmp<0){
+ Flg <- Tmp
+ Nargs <- Nargs-1
+ }
+ Siki <- varargin[[Nargs]]
+ Nargs<- Nargs-1
+ Dr<- "c"
+ if(Nargs>=1){
+ Tmp<- varargin[[Nargs]]
+ if(is.character(Tmp)){
+ Dr<- Tmp
+ Nargs<- Nargs-1
+ }
+ }
+ if(Nargs==0) {
+ P <- Op(1,BOWMIDDLE)
+ A <- BOWSTART
+ B <- BOWEND
+ }
+ else{
+ Bdata<- varargin[[1]]
+ P<- Bowmiddle(Bdata)
+ A=Bdata[1,]
+ B=Bdata[nrow(Bdata),]
+ Tm<- 0; Tv<- 0
+ if(Nargs>1){
+ Tm<- varargin[[2]]
+ if(Nargs>2){
+ Tv<- varargin[[3]]
+ }
+ }
+ }
+# else if(Nargs==2) {
+# Bdata <- varargin[[1]]
+# P <- Bowmiddle(Bdata)
+# A <- Bdata[1,]
+# B <- Bdata[Nrow(Bdata),]
+# Siki <- varargin[[2]]
+# }
+# else {
+# A <- varargin[[1]]; B <- varargin[[2]]
+# D <- 1/2*Norm(B-A)
+# Tmp <- varargin[[3]]
+# if(mode(Tmp)=="character") {
+# H <- 0.2*D; Siki <- Tmp
+# }
+# else {
+# H <- Tmp*D*0.2; Siki <- varargin[[4]]
+# }
+# H <- min(H,D)
+# Ydata <- MakeBowdata(A,B,H)
+# C <- Op(1,Ydata)
+# R <- Op(2,Ydata)
+# T <- (Op(3,Ydata)+Op(4,Ydata))/2
+# P <- C+R*c(cos(T),sin(T))
+# }
+ if(A[1]>B[1]+Eps){
+ Tmp <- A
+ A <- B
+ B <- Tmp
+ }
+ if(Flg>0) {
+ Tmp <- B-A
+ }
+ else{
+ Tmp <- A-B
+ }
+ Exprrot(P,Tmp,Tm,Tv,Siki)
+}
+
+CalcHeight<-function(Hoko,Moji)
+{
+ D<-0
+ H<-substring(Hoko,1,1)
+ Tmp<-paste("\\settoheight{\\Height}{",Moji,"}",sep="")
+ Str<-c(Tmp)
+ Tmp=paste("\\settodepth{\\Depth}{",Moji,"}",sep="")
+ Str<-c(Str,Tmp)
+ if(H=="n") Str<-c(Str,"\\setlength{\\Height}{\\Depth}")
+ if(H=="s") Str<-c(Str,"\\setlength{\\Height}{-\\Height}")
+ if(H=="c")
+ {
+ Str<-c(Str,"\\setlength{\\Height}{-0.5\\Height}")
+ Str<-c(Str,"\\setlength{\\Depth}{0.5\\Depth}")
+ Str<-c(Str,"\\addtolength{\\Height}{\\Depth}")
+ }
+ for (I in 1:length(Str)) cat(Str[I],file=Wfile,append=TRUE)
+ cat("%\n",file=Wfile,append=TRUE)
+}
+
+#########################
+
+CalcWidth<-function(Hoko,Moji)
+{
+ D<-0;
+ H<-substring(Hoko,2,2)
+ if(H=="e") D<-0
+ if(H=="w") D<--1.0
+ if(H=="c") D<--0.5
+ Str1<-paste("\\settowidth{\\Width}{",Moji,"}",sep="")
+ Tmp<-as.character(D)
+ Str2<-paste("\\setlength{\\Width}{",Tmp,"\\Width}",sep="")
+ cat(Str1,file=Wfile,append=TRUE)
+ cat(Str2,file=Wfile,append=TRUE)
+ cat("%\n",file=Wfile,append=TRUE)
+}
+
+#########################
+# 17.09.17
+# 17.09.24
+
+Circledata<- function(...){
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ Cr<- varargin[[1]]
+ C=Cr[1:2]
+ if(length(Cr)==4){
+ ra=Norm(C-Cr[3:4])
+ Nop=2
+ }
+ else{
+ ra=Cr[3]
+ Nop=2
+ }
+ R=c(0,2*pi)
+ N=50
+ for (I in Looprange(Nop,Nargs)){
+ Tmp<- varargin[[I]]
+ if(is.character(Tmp)){
+ Tmp1=regexpr("=",Tmp) #17.09.24from
+ Tmp2=substring(Tmp,Tmp1+1,nchar(Tmp))
+ Tmp1=substring(Tmp,1,Tmp1)
+ Tmp1=gsub("NUM", "N", toupper(Tmp1))
+ Tmp1=gsub("RNG", "R", Tmp1)
+ Tmp=paste(Tmp1,Tmp2,sep="") #17.09.24upto
+ eval(parse(text=Tmp))
+ }
+ }
+ Dt<- (R[2]-R[1])/N
+ T <- seq(R[1],R[2],by=Dt)
+ X <- C[1]+ra*cos(T)
+ Y <- C[2]+ra*sin(T)
+ XY<- c(X,Y)
+ P<- matrix(XY,ncol=2)
+ return(P)
+}
+
+#########################
+# 13.12.19
+
+Closefile<-function(...)
+{
+ varargin<- list(...)
+ if(length(varargin)>=1){
+ Pa<- varargin[[1]]
+ if(is.character(Pa)){
+ if(Pa=="1") Endpicture(1)
+ if(Pa=="0") Endpicture(0)
+ }
+ }
+ Wfile<<-""
+}
+
+#########################
+
+Closepar<- function()
+{
+ S<- "%\n\\end{minipage}"
+ cat(S,file=Wfile,append=TRUE)
+ Closephr()
+}
+
+
+####################################
+
+Closephr<- function()
+{
+ cat("%\n}%\n",file=Wfile,append=TRUE)
+}
+
+#####################################
+
+Dataindex<-function(P)
+{
+ # Inf;Inf : Terminator
+ Ndm<-c()
+ if(length(P)==0) return(Ndm)
+ N1<-1
+ Flg<-0
+ for (J in 1:Nrow(P))
+ {
+ if(P[J,1]==Inf)
+ {
+ Ndm<-Appendrow(Ndm,c(N1,J-1))
+ N1<-J+1;
+ if(P[N1,1]==Inf)
+ {
+ Flg<-1;
+ break;
+ }
+ }
+ }
+ if(Flg==0)
+ {
+ Ndm<-Appendrow(Ndm,c(N1,Nrow(P)))
+ }
+ if(class(Ndm)=="numeric")
+ {
+ Tmp<-matrix(Ndm,nrow=1)
+ Ndm<- Tmp
+ }
+ return(Ndm)
+}
+
+################################
+
+Dashline<- function(...)
+{
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ Nall<- Nargs; Sen<- 1 ; Gap<- 1
+ Tmp<- varargin[[Nall]]
+ if(mode(Tmp)=="numeric" && length(Tmp)==1 && Tmp>0){
+ Tmp1<- varargin[[Nall-1]]
+ if(mode(Tmp1)=="numeric" && length(Tmp1)==1 && Tmp1>0){
+ Sen<- Tmp1; Gap<- Tmp
+ Nall<- Nall-2
+ }
+ else{
+ Sen<- Tmp; Gap<- Sen
+ Nall<- Nall-1
+ }
+ }
+ Sen<- 1000/2.54/MilliIn*Sen
+ Gap<- 1000/2.54/MilliIn*Gap
+ for (N in Looprange(1,Nall)){
+ Pdata<- varargin[[N]]
+ if(is.numeric(Pdata)==1){
+ Pdata<- list(Pdata)
+ }
+ for (II in 1:length(Pdata)){
+ Figdata<- Op(II,Pdata)
+ Makehasen(Figdata,Sen,Gap,0)
+ }
+ }
+}
+
+##############################################
+# 17.11.27
+
+Definecolor<- function(Name,Data){
+ Tmp1=length(Data)
+ if((Tmp1<3) || (Tmp1>4)){
+ cat("Size of data should be 3 or 4.")
+ return()
+ }
+ if(Tmp1==4){
+ Tp="cmyk"
+ }else{
+ Tp="rgb"
+ }
+ Tmp=""
+ for(J in 1:Tmp1){
+ Tmp=paste(Tmp, as.character(Data[J]),sep="")
+ if(J<Tmp1){
+ Tmp=paste(Tmp,",",sep="")
+ }
+ }
+ Tmp=paste("\\definecolor{",Name,"}{",Tp,"}{",Tmp,"}",sep="")
+ Texcom(Tmp)
+}
+
+##############################################
+
+Diagcelldata<- function(Tb,Nc,Nr)
+{
+ Tmp<- Findcell(Tb,Nc,Nr)
+ C<- Tmp[[1]]
+ Dx<- Tmp[[2]]
+ Dy<- Tmp[[3]]
+ Pne<- C+c(Dx,Dy)
+ Pnw<- C+c(-Dx,Dy)
+ Psw<- C+c(-Dx,-Dy)
+ Pse<- C+c(Dx,-Dy)
+ Tmp1<- Listplot(Pnw,Pse)
+ Tmp2<- Listplot(Pne,Psw)
+ list(Tmp1,Tmp2)
+}
+
+##############################################
+# 11.01.07
+
+Dividegraphics<- function(Pd)
+{
+ if(length(Pd)==0){
+ return(Pd)
+ }
+ DtL<- Flattenlist(Pd)
+ OutL<- list()
+ for (J in 1:length(DtL)){
+ Dt<- as.matrix(DtL[[J]])
+ Ndm<- Dataindex(Dt)
+ for (I in Looprange(1,Nrow(Ndm))){
+ Fd<- Dt[Ndm[I,1]:Ndm[I,2],]
+ OutL<- c(OutL,list(Fd))
+ }
+ }
+ return(OutL)
+}
+
+##############################################
+# 13.05.03
+
+Dividetable<- function(Tb)
+{
+ G<- Tb[[1]]
+ Gw<- G[[1]]
+ Gt<- G[Tb[[2]]]
+ Gy<- G[Tb[[3]]]
+ list(Gw,Gt,Gy)
+}
+
+################################################
+
+Doscaling<- function(G)
+{
+ GLg<- G
+ if(class(GLg)=="numeric")
+ {
+ if(LOGX==1) GLg[1]<- log(G[1], base=10)
+ if(LOGY==1) GLg[2]<- log(G[2], base=10)
+ Tmp<-c(SCALEX*GLg[1],SCALEY*GLg[2])
+ return(Tmp)
+ }
+ else
+ {
+ if(LOGX==1) GLg[,1]<- log(G[,1],base=10)
+ if(LOGY==1) GLg[,2]<- log(G[,2],base=10)
+ Tmp1<-matrix(c(SCALEX,0,0,SCALEY),nrow=2)
+ Tmp<-GLg %*% Tmp1
+ return(Tmp)
+ }
+}
+
+########################################
+
+Dotfilldata<- function(...)
+{ ## Scaling is implemented
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ ShaL<- list()
+ Eps<- 0.01
+ Kakudo<- 45
+ Kosa<- 0.5
+ Tmp<- Doscaling(c(XMIN,YMIN))
+ Xmn<- Tmp[1]; Ymn<- Tmp[2]
+ Tmp<- Doscaling(c(XMAX,YMAX))
+ Xmx<- Tmp[1]; Ymx<- Tmp[2]
+ for (N in seq(Nargs,1,by=-1)){
+ Tmp<- varargin[[N]]
+ if(Mixtype(Tmp)!=1){
+ break
+ }
+ }
+ if(N<Nargs){
+ Kosa<- varargin[[N+1]]
+ }
+# Kosa<- min(Kosa,1)
+ Tmp<- 1/(2*Kosa)
+ Kankaku<- Tmp*0.100*1000/2.54/MilliIn
+ NaitenL<- varargin[[1]]
+ if(Mixtype(NaitenL)==1){
+ NaitenL<- list(NaitenL)
+ }
+ Ns<- 2
+ StartP<- Op(1,NaitenL)
+ if(mode(StartP)=="character"){
+ StartP<- c((Xmn+Xmx)/2,(Ymn+Ymx)/2)
+ }
+ else{
+ StartP<- Doscaling(StartP)
+ }
+ Tmp<- varargin[[2]]
+ if(Mixtype(Tmp)==1){
+ StartP<- Doscaling(Tmp)
+ Ns<- 3
+ }
+ Tmp<- list()
+ for (I in Looprange(Ns,N)){
+ Tmp<- Mixjoin(Tmp,list(varargin[[I]]))
+ }
+ Bdy<- Kyoukai(Tmp)
+ Bdys<-list()
+ for (I in 1:length(Bdy)){
+ Tmp1<- Bdy[[I]]
+ Tmp2<- Doscaling(Tmp1)
+ Bdys<- Mixjoin(Bdys,list(Tmp2))
+ }
+ Bdy<- Bdys
+ PtnL<- list()
+ for (I in Looprange(1,length(NaitenL))){
+ Tmp<- Op(I,NaitenL)
+ if(mode(Tmp)=="numeric"){
+ Tmp1<- Naigai(Tmp,Bdy)
+ PtnL<- Mixjoin(PtnL,list(Tmp1))
+ }
+ else{
+ if(mode(Tmp)!="character"){
+ return("Mode Error")
+ }
+ Ptn<- c()
+ for (J in Looprange(1,nchar(Tmp))){
+ if(substr(Tmp,J,J)=="i"){
+ Ptn<- c(Ptn,1)
+ }
+ else{
+ Ptn<- c(Ptn,0)
+ }
+ }
+ PtnL<- Mixjoin(PtnL,list(Ptn))
+ }
+ }
+ Call<- length(Bdy)
+ Ptn<- c(seq(0, 0, length=Call))
+ if(Member(Ptn,PtnL)){
+ Wn<- Doscaling(Framedata())
+ Bdy<- Mixjoin(Bdy,list(Wn))
+ Tmp<- list()
+ for (I in Looprange(1,length(PtnL))){
+ Tmp1<- c(Op(I,PtnL),1)
+ Tmp<- Mixjoin(Tmp,list(Tmp1))
+ }
+ PtnL<- Tmp
+ }
+ V<- c(cos(Kakudo*pi/180),sin(Kakudo*pi/180))
+ Vm<- c(-sin(Kakudo*pi/180),cos(Kakudo*pi/180))
+ Tmp<- Op(1,NaitenL)
+ if(mode(Tmp)=="numeric" && length(Tmp)==2){
+ Tmp<- Doscaling(Tmp)
+ Delta<- Tmp-StartP
+ K<- trunc(Dotprod(Delta,Vm)/Kankaku)
+ PA<- StartP+K*Kankaku*Vm
+ P<- PA
+ Sha<- Makeshasen(PtnL,P,V,Bdy)
+ Sha<- Dividegraphics(Sha)
+ I<- 1
+ while (length(Sha)>0){
+ for (J in Looprange(1,length(Sha))){
+ Tmp<- Op(J,Sha)
+ Q<- Tmp[1,]
+ R<- Tmp[2,]
+ Tmp<- Dotprod(Q-P,V)/Kankaku
+ K1<- ceiling(Tmp)
+ if(abs(K1-Tmp)<Eps) K1=K1+1
+ Tmp<- Dotprod(R-P,V)/Kankaku
+ K2<- floor(Tmp)
+ if(abs(Tmp-K2)<Eps) K2=K2-1
+ for (K in Looprange(K1,K2)){
+ Tmp1<- Pointdata(P+K*Kankaku*V)
+ ShaL<- Mixjoin(ShaL, list(Tmp1))
+ }
+ }
+ P<- PA+I*Kankaku*Vm
+ Sha<- Makeshasen(PtnL,P,V,Bdy)
+ Sha<- Dividegraphics(Sha)
+ I<- I+1
+ }
+ P<- PA-Kankaku*Vm
+ Sha<- Makeshasen(PtnL,P,V,Bdy)
+ I<- 2
+ while (length(Sha)>0){
+ for (J in 1:length(Sha)){
+ Tmp<- Op(J,Sha)
+ Q<- Tmp[1,]
+ R<- Tmp[2,]
+ Tmp<- Dotprod(Q-P,V)/Kankaku
+ K1<- ceiling(Tmp)
+ if(abs(K1-Tmp)<Eps) K1<- K1+1
+ Tmp<- Dotprod(R-P,V)/Kankaku
+ K2<- floor(Tmp)
+ if(abs(Tmp-K2)<Eps) K2<- K2-1
+ for (K in Looprange(K1,K2)){
+ Tmp1<- Pointdata(P+K*Kankaku*V)
+ ShaL<- Mixjoin(ShaL, list(Tmp1))
+ }
+ }
+ P<- PA-I*Kankaku*Vm
+ Sha<- Makeshasen(PtnL,P,V,Bdy)
+ I<- I+1
+ }
+ }
+ else{
+ Delta<- c(Xmn,Ymn)-StartP
+ K1<- trunc(Dotprod(Delta,Vm)/Kankaku)
+ Delta<- c(Xmx,Ymn)-StartP
+ K2<- trunc(Dotprod(Delta,Vm)/Kankaku)
+ Delta<- c(Xmx,Ymx)-StartP
+ K3<- trunc(Dotprod(Delta,Vm)/Kankaku)
+ Delta<- c(Xmn,Ymx)-StartP
+ K4<- trunc(Dotprod(Delta,Vm)/Kankaku)
+ IM<- max(K1,K2,K3,K4)
+ Im<- min(K1,K2,K3,K4)
+ for (I in Im:IM){
+ P<- StartP+I*Kankaku*Vm
+ Sha<- Makeshasen(PtnL,P,V,Bdy)
+ Sha<- Dividegraphics(Sha)
+ if(length(Sha)>0){
+ for (J in 1:length(Sha)){
+ Tmp<- Op(J,Sha)
+ Q<- Tmp[1,]
+ R<- Tmp[2,]
+ Tmp<- Dotprod(Q-P,V)/Kankaku
+ K1<- ceiling(Tmp)
+ if(abs(K1-Tmp)<Eps) K1=K1+1
+ Tmp<- Dotprod(R-P,V)/Kankaku
+ K2<- floor(Tmp)
+ if(abs(Tmp-K2)<Eps) K2=K2-1
+ for (K in Looprange(K1,K2)){
+ Tmp1<- Pointdata(P+K*Kankaku*V)
+ ShaL<- Mixjoin(ShaL, list(Tmp1))
+ }
+ }
+ }
+ }
+ }
+ ShaLs<-list()
+ for (I in Looprange(1,length(ShaL)))
+ {
+ Tmp<- ShaL[[I]]
+ Tmp1<- Unscaling(Tmp)
+ ShaLs<- Mixjoin(ShaLs,Tmp1)
+ }
+ ShaL<- ShaLs
+ return(ShaL)
+}
+
+#############################################
+
+Dottedline<- function(...)
+{
+ varargin <- list(...)
+ Nall <- length(varargin)
+ Nagasa <- 0.1
+ Ookisa <- PenThick
+ I <- Nall
+ Tmp <- varargin[[I]]
+ while (mode(Tmp)=="numeric" && length(Tmp)==1 ) {
+ I <- I-1
+ Tmp <- varargin[[I]]
+ }
+ if(I==Nall-1) {
+ Nagasa<-Nagasa*varargin[[Nall]]
+ Nall <- Nall-1
+ }
+ if(I==Nall-2) {
+ Nagasa <- Nagasa*varargin[[Nall-1]]
+ Ookisa <- round(Ookisa*varargin[[Nall]])
+ Nall <- Nall-2
+ }
+ Nagasa <- 1000/2.54/MilliIn*Nagasa
+ for (N in 1:Nall) {
+ Pdata <- varargin[[N]]
+ if(mode(Pdata)=="numeric") {
+ Pdata <- list(Pdata)
+ }
+ for (II in 1:length(Pdata)) {
+ Clist <- MakeCurves(Op(II,Pdata))
+ DinM <- Dataindex(Clist)
+ for (n in Looprange(1,Nrow(DinM))) {
+ Tmp <- DinM[n,]
+ Data <- Clist[Tmp[1]:Tmp[2],]
+ Len <- 0
+ Lenlist <- c(0)
+ for (I in Looprange(2,Nrow(Data))) {
+ Len <- Len+Norm(Data[I,]-Data[I-1,])
+ Lenlist <- c(Lenlist,Len)
+ }
+ Lenall <- Lenlist[length(Lenlist)]
+ if(Lenall==0) {
+ next
+ }
+ Naga <- Nagasa
+ Nten <- round(Lenall/Naga)+1
+ if(Nten > 1) {
+ Seg <- Lenall/(Nten-1)
+ }
+ else {
+ Seg <- Lenall
+ }
+ Eps <- 10^(-6)*Seg
+ PPd<-c()
+ Hajime <- 1
+ for (I in Looprange(0,Nten-1)) {
+ Len <- Seg*I
+ if(I>0) {
+ J <- Hajime
+ while( Len>=Lenlist[J]+Eps) {
+ J <- J+1
+ }
+ Hajime <- J-1
+ }
+ T <- (Len-Lenlist[Hajime])/
+ (Lenlist[Hajime+1]-Lenlist[Hajime])
+ P <- Data[Hajime,]+T*(Data[Hajime+1,]-Data[Hajime,])
+ PPd<-Appendrow(PPd,P)
+ if(I==Nten-1) {
+ if(Norm(P-Data[1,])<Eps) {
+ next
+ }
+ }
+ }
+ Str<-paste("\\special{pn ", as.character(Ookisa),"}%\n",sep="")
+ cat(Str,file=Wfile,append=TRUE)
+ for (I in Looprange(1,Nrow(PPd))){
+ P<- Op(I,PPd)
+ if(Nrow(PPd)==1){
+ V<- c(1,0)
+ }
+ else if(I==1){
+ Tmp<- Op(I+1,PPd)-P
+ V<- 1/Norm(Tmp)*Tmp
+ }
+ else if(I==Nrow(PPd)){
+ Tmp<- P-Op(I-1,PPd)
+ V<- 1/Norm(Tmp)*Tmp
+ }
+ else{
+ Tmp1<- Op(I+1,PPd)-P
+ Tmp2<- P-Op(I-1,PPd)
+ Tmp3<-1/Norm(Tmp1)*Tmp1+1/Norm(Tmp2)*Tmp2
+ V<- 1/Norm(Tmp3)*Tmp3
+ }
+ Tmp<- round(MilliIn*P[1]-1/2*Ookisa*V[1])
+ X<- as.character(Tmp)
+ Tmp<- -round(MilliIn*P[2]-1/2*Ookisa*V[2])
+ Y<- as.character(Tmp)
+ Str<-paste("\\special{pa ",X," ",Y,"}",sep="")
+ cat(Str,file=Wfile,append=TRUE)
+ Tmp<- round(MilliIn*P[1]+1/2*Ookisa*V[1])
+ X<- as.character(Tmp)
+ Tmp<- -round(MilliIn*P[2]+1/2*Ookisa*V[2])
+ Y<- as.character(Tmp)
+ Str<-paste("\\special{pa ",X," ",Y,"}",sep="")
+ cat(Str,file=Wfile,append=TRUE)
+ cat("\\special{fp}",file=Wfile,append=TRUE)
+ if(I%%2==0){
+ cat("%\n",file=Wfile,append=TRUE)
+ }
+ }
+ }
+ }
+ }
+ Tmp<-PenThick/PenThickInit
+ Setpen(Tmp);
+}
+
+###########################################
+
+Drwline<-function(...)
+{
+ varargin<-list(...)
+ Nall<-length(varargin)
+ Thick<-0
+ Tmp<-varargin[[Nall]]
+ if(mode(Tmp)=="numeric" && length(Tmp)==1){
+ Thick<-round(Tmp*PenThickInit)
+ Str<-paste("\\special{pn ", as.character(Thick),"}%\n",sep="")
+ cat(Str,file=Wfile,append=TRUE)
+ Nall<-Nall-1
+ }
+ for (N in 1:Nall){
+ Pdata<-varargin[[N]]
+ if(length(Pdata)==0) next
+ if(mode(Pdata)!="list") Pdata<-list(Pdata)
+ while(Mixtype(Pdata)==3){ # 10.07.25
+ Tmp1<- list()
+ for(II in Looprange(1,length(Pdata))){
+ Tmp1<- Mixjoin(Tmp1,Pdata[[II]])
+ }
+ Pdata<- Tmp1
+ } # 10.07.25
+ for (II in Looprange(1,length(Pdata))){
+ Clist<-MakeCurves(Pdata[[II]])
+ DinM<-Dataindex(Clist)
+ for (n in Looprange(1,Nrow(DinM))){
+ Tmp<-DinM[n,]
+ Data<-Clist[Tmp[1]:Tmp[2],]
+ Mojisu<-0
+ for (I in Looprange(1,Nrow(Data))){
+ Tmp<-Data[I,]
+ X<- sprintf("%5.0f",MilliIn*Tmp[1]) # 11.07.19
+ Y<- sprintf("%5.0f",-MilliIn*Tmp[2]) # 11.07.19
+ Str<-paste("\\special{pa ",X," ",Y,"}",sep="")
+ cat(Str,file=Wfile,append=TRUE)
+ Mojisu<-Mojisu+nchar(Str)
+ if(Mojisu>80){
+ cat("%\n",file=Wfile,append=TRUE)
+ Mojisu<-0
+ }
+ }
+ if(Mojisu!=0){
+ cat("%\n",file=Wfile,append=TRUE)
+ }
+ cat("\\special{fp}%\n",file=Wfile,append=TRUE)
+ }
+ }
+ }
+ Str<-"%"
+ if(Thick>0){
+ Tmp<-PenThick/PenThickInit
+ Setpen(Tmp)
+ }
+}
+
+###########################################
+
+Drwpt<-function(...)
+{ ## Scaling is implemented
+ varargin<-list(...)
+ Nargs<-length(varargin)
+ if(TenSize>TenSizeInit){
+ N<- round(6*sqrt(TenSize/TenSizeInit))
+ }
+ else{
+ N<-4
+ }
+ Tmp<- varargin[[Nargs]]
+ if(mode(Tmp)=="numeric"){
+ if(length(Tmp)>1){
+ Kosa<- 1; All<- Nargs
+ }
+ else{
+ Kosa<- Tmp; All<- Nargs-1
+ }
+ }
+ else if(mode(Tmp)=="list"){
+ Kosa<- 1; All<- Nargs
+ }
+ CL<-c()
+ for (J in 0:N){
+ Tmp<- TenSize*0.5*1000/2.54/MilliIn
+ Tmp<- Tmp*c(cos(pi/4+J*2*pi/N),sin(pi/4+J*2*pi/N))
+ CL<- append(CL,Tmp)
+ }
+ CL<- matrix(CL,nrow=2)
+ CL<- t(CL)
+ for (II in Looprange(1,All)){
+ MS<- varargin[[II]]
+ MS=Flattenlist(MS) #17.10.11
+ if(mode(MS)=="numeric"){
+ MS<- list(MS)
+ }
+ for (I in Looprange(1,length(MS))){
+ P<- MS[[I]]
+ if(InWindow(P)!="i") next
+ P<- Doscaling(P)
+ PL<-c()
+ for (J in 0:N){
+ PL<- c(PL,P+CL[J+1,])
+ }
+ PL<-matrix(PL,nrow=2)
+ PL<-t(PL)
+ Mojisu<-0
+ for (J in 1:Nrow(PL)){
+ Q<- PL[J,]
+ X<- as.character(round(MilliIn*Q[1]))
+ Y<- as.character(-round(MilliIn*Q[2]))
+ Str<- paste("\\special{pa ",X," ",Y,"}",sep="")
+ cat(Str,file=Wfile,append=TRUE)
+ Mojisu<- Mojisu+nchar(Str)
+ if(Mojisu>80){
+ cat("#\n",file=Wfile,append=TRUE)
+ }
+ Mojisu=0
+ }
+ Str1<- paste("\\special{sh ",as.character(Kosa),"}",sep="")
+ Str2<- "\\special{fp}%\n"
+ cat(Str1,file=Wfile,append=TRUE)
+ cat(Str2,file=Wfile,append=TRUE)
+ }
+ }
+}
+
+######################################################
+
+Drwxy<-function(...)
+{
+ varargin<-list(...)
+ Nargs <- length(varargin)
+ Tmp<-grep("arrow", ZIKU)
+ if(length(Tmp)>0)
+ {
+ Arrowline(c(XMIN,GENTEN[2]),c(XMAX,GENTEN[2]),ARROWSIZE)
+ Arrowline(c(GENTEN[1],YMIN),c(GENTEN[1],YMAX),ARROWSIZE)
+ }
+ else
+ {
+ Drwline(Listplot(c(XMIN,GENTEN[2]),c(XMAX,GENTEN[2])))
+ Drwline(Listplot(c(GENTEN[1],YMIN),c(GENTEN[1],YMAX)))
+ }
+ Letter(c(XMAX,GENTEN[2]),XPOS,XNAME)
+ Letter(c(GENTEN[1],YMAX),YPOS,YNAME)
+ Letter(GENTEN,OPOS,ONAME);
+}
+
+##########################################
+# 10.12.04
+
+Enclosing<- function(...)
+{
+ Eps=10^(-7) # Scilab 16.12.05
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ P<- varargin[[1]]
+ if(Mixtype(P)==2){
+ Tmp<- Op(1,P)
+ if(mode(Tmp)!="numeric" || length(Tmp)>1){
+ AnsL<- EnclosingS(...)
+ AnsL<- Joincrvs(AnsL) # 10.12.04
+ }
+ }
+ Tmp1=Op(1,AnsL) # Scilab 16.12.05from
+ Tmp2=Op(nrow(AnsL),AnsL)
+ if(Norm(Tmp2-Tmp1)>Eps){
+ AnsL=Appendrow(AnsL,Tmp1)
+ }
+ return(AnsL)
+}
+
+#########################################
+
+EnclosingS<- function(...)
+{
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ AnsL<- list()
+ PdataL<- varargin[[1]]
+ Nall<-length(PdataL)
+ Eps<- 10^(-3)
+ EEps<- 0.1
+ S<- c()
+ Flg<- 0
+ for (I in Looprange(2,Nargs)){
+ Tmp<- varargin[[I]]
+ if(mode(Tmp)=="numeric" && Nrow(Tmp)==1 && length(Tmp)>1){
+ S<- Tmp
+ }
+ if(mode(Tmp)=="numeric" && length(Tmp)==1){
+ if(Flg==0){
+ Eps<- Tmp
+ Flg=Flg+1
+ }
+ else{
+ EEps<- Tmp
+ }
+ }
+ }
+ F<- Op(1,PdataL); G<- Op(Nall,PdataL)
+ KL<- IntersectcrvsPp(F,G)
+ if(length(KL)==1){
+ Tmp<- Op(1,KL)
+ P<- Op(1,Tmp)
+ T1<- Op(2,Tmp)
+ }
+ if(length(KL)==0){
+ if(Numptcrv(F)>Numptcrv(G)){
+ Tmp<- Nearestpt(F,G)
+ P<- Op(1,Tmp)
+ T1=Op(2,Tmp)
+ }
+ else{
+ Tmp<- Nearestpt(G,F)
+ P<- Op(3,Tmp)
+ T1<- Op(4,Tmp)
+ }
+ }
+ if(length(KL)>=2){
+ if(length(S)==0){
+ return("No Start Point")
+ }
+ Tmp<- Op(1,KL)
+ P<- Op(1,Tmp)
+ T1<- Op(2,Tmp)
+ Tmp<- Norm(P-S)
+ for (I in Looprange(2,length(KL))){
+ Tmp1<- Op(1,Op(I,KL))
+ Tmp2<- Norm(Tmp1-S)
+ if(Tmp2<Tmp){
+ P<- Tmp1
+ T1<- Op(2,Op(I,KL))
+ Tmp<- Tmp2
+ }
+ }
+ }
+ S<- P
+ AnsL<- list()
+ for (N in Looprange(1,Nall)){
+ F<- Op(N,PdataL)
+ if(N>1) P<- Q
+ if(N==Nall){
+ Q=S
+ }
+ else{
+ Flg<- 0
+ G<- Op(N+1,PdataL)
+ KL<- IntersectcrvsPp(G,F)
+ if(length(KL)==1){
+ Tmp<- Op(1,KL)
+ Q<- Op(1,Tmp)
+ T3<- Op(2,Tmp)
+ Flg<- 10
+ }
+ if(length(KL)==0) Flg<- 1
+ if(length(KL)>=2){ # Maple bug?
+ Tmp1<- Op(1,Op(1,KL))
+ Tmp2<- Op(1,Op(2,KL))
+ Tmp<- Norm(Tmp1-Tmp2)
+ if(Tmp<Eps*10) Flg<- 1
+ }
+ if(Flg==1){
+ if(Numptcrv(F)>Numptcrv(G)){
+ Tmp<- Nearestpt(F,G)
+ Q<- Op(1,Tmp)
+ T3<- Op(4,Tmp)
+ Flg<- 10
+ }
+ else{
+ Tmp<- Nearestpt(G,F)
+ Q<- Op(3,Tmp)
+ T3<- Op(2,Tmp)
+ Flg<- 10
+ }
+ }
+ if(Flg<10){
+ T2<- Inf
+ for (I in Looprange(1,length(KL))){
+ Dt<- Op(I,KL)
+ Tmp1<- Op(1,Dt)
+ Tmp<- Op(3,Dt)
+ Tmp2<- Paramoncurve(Tmp1,Tmp,F)
+ Tmp3<- Op(2,Dt)
+ if(Tmp2>T1+Eps && Tmp2<T2-Eps){
+ Q<- Tmp1
+ T2<- Tmp2
+ T3<- Tmp3
+ }
+ }
+ }
+ }
+ Tmp<- Partcrv(P,Q,F)
+ T1<- T3
+ AnsL<- Mixjoin(AnsL,list(Tmp))
+ }
+ return(AnsL)
+}
+
+########################################
+
+Endpicture<-function(...)
+{
+ varargin<-list(...)
+ Nargs<-length(varargin)
+ if(Nargs==0)
+ {
+ Drwxy()
+ }
+ else
+ {
+ if(varargin[[1]]==1) Drwxy()
+ }
+ cat("\\end{picture}}%",file=Wfile,append=TRUE)
+# MEMORI<<-MEMORINow*1000/2.54/MilliIn
+ Setunitlen("1cm")
+}
+
+#########################################
+
+Execmd<- function(StrL)
+{
+ if(mode(StrL)=="character" && length(StrL)==1){
+ StrL<- list(StrL)
+ }
+ for (I in Looprange(1,length(StrL))){
+ if(!is.na(Op(I,StrL)) && nchar(Op(I,StrL))>0){
+ eval(parse(text=Op(I,StrL)))
+ }
+ }
+}
+
+#########################################
+
+Expr<-function(...)
+{ ## Scaling is implemented
+ varargin<-list(...)
+ Nargs<-length(varargin)
+ Irng<-c(seq(from=1,to=Nargs,by=3))
+ for (I in Irng)
+ {
+ Tmp<-varargin[[I]]
+ P<- Doscaling(Tmp)
+ X<-P[1]
+ Y<-P[2]
+ Houkou<-varargin[[I+1]]
+ Mojiretu<-paste("$",varargin[[I+2]],"$",sep="")
+ Hset<-Houkou
+ Vhoko<-"c"
+ if(length(grep("n",Hset))>0)
+ {
+ Vhoko<-"n"; Y<-Y+MEMORI
+ }
+ if(length(grep("s",Hset))>0)
+ {
+ Vhoko<-"s"; Y<-Y-MEMORI
+ }
+ Hhoko<-"c"
+ if(length(grep("e",Hset))>0)
+ {
+ Hhoko<-"e"; X<-X+MEMORI
+ }
+ if(length(grep("w",Hset))>0)
+ {
+ Hhoko<-"w"; X<-X-MEMORI
+ }
+ Hoko<-paste(Vhoko,Hhoko,sep="")
+ Suu<-"+-.0123456789"
+ SuuL<-Suu
+ J<-1; Dstr<-""
+ while (J<=nchar(Houkou))
+ {
+ Tmp<-substring(Houkou,J,J)
+ if(length(grep(Tmp,Suu))>0)
+ {
+ if(Dstr=="") Hk<-substring(Houkou,J-1,J-1)
+ Dstr<-paste(Dstr,Tmp,sep="")
+ }
+ else
+ {
+ if(Dstr!="")
+ {
+ Nmbr<-as.numeric(Dstr)
+ D<-Nmbr*MEMORI
+ if(Hk=="n") Y<-Y+D
+ if(Hk=="s") Y<-Y-D
+ if(Hk=="e") X<-X+D
+ if(Hk=="w") X<-X-D
+ Dstr<-""
+ }
+ }
+ J<-J+1
+ }
+ if(Dstr!="")
+ {
+ Nmbr<-as.numeric(Dstr)
+ D<-Nmbr*MEMORI;
+ if(Hk=="n") Y<-Y+D
+ if(Hk=="s") Y<-Y-D
+ if(Hk=="e") X<-X+D
+ if(Hk=="w") X<-X-D
+ }
+ CalcWidth(Hoko,Mojiretu)
+ CalcHeight(Hoko,Mojiretu)
+ cat("\\put(",file=Wfile,append=TRUE)
+ Tmp1<- sprintf("%7.7f",X) # 11.07.19
+ Tmp2<- sprintf("%7.7f",Y) # 11.07.19
+ Str<-paste(Tmp1,",",Tmp2,sep="")
+ cat(Str,file=Wfile,append=TRUE)
+ Tmp<-"){\\hspace*{\\Width}"
+ Str<-paste(Tmp,"\\raisebox{\\Height}{",Mojiretu,"}}%\n",sep="")
+ cat(Str,file=Wfile,append=TRUE)
+ cat("%\n",file=Wfile,append=TRUE)
+ }
+}
+
+##########################################
+
+Exprrot<- function(...)
+{
+ varargin<- list(...)
+ P<- varargin[[1]]
+ V<- varargin[[2]]; N<- 3
+ P<- Doscaling(P)
+ V<- Doscaling(V)
+ Tmov<- 0
+ Tmp<- varargin[[N]]
+ if(mode(Tmp)=="numeric"){
+ Tmov<- Tmp; N<- N+1
+ }
+ Nmov<- 0
+ Tmp<- varargin[[N]]
+ if(mode(Tmp)=="numeric"){
+ Nmov<- Tmp; N<- N+1
+ }
+ Mojiretu<- paste("$",Assign(varargin[[N]]),"$",sep="") # 2017.11.26
+ Tv<- 1/Norm(V)*V
+ Nv<- c(-Tv[2],Tv[1])
+ P<- P+MEMORI*Tmov*Tv+MEMORI*Nmov*Nv
+ Tmp<- acos(V[1]/Norm(V))
+ Theta<- round(Tmp*180/pi)
+ if(V[2]>=0){
+ Units<- ""
+ }
+ else{
+ Units<- "units=-360,"
+ }
+ Tmp<- paste("\\rotatebox[",Units,"origin=c]{",as.character(Theta),sep="")
+ Tmp<- paste(Tmp,"}{",Mojiretu,"}",sep="")
+ Letter(P,"c",Tmp)
+}
+
+######################################################
+
+Findcell<- function(...)
+{
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ TbL<- varargin[[1]]
+ Ag<- varargin[[2]]
+ Alpha<- "-ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+ if(mode(Ag)=="character"){
+ Clm<- c()
+ Rstr<- ""
+ for (I in Looprange(1,nchar(Ag))){
+ C<- substr(Ag,I,I)
+ C<- toupper(C)
+ Tmp<- strsplit(Alpha,C)
+ Tmp<- Tmp[[1]]
+ if(length(Tmp)>1){
+ Tmp1<- nchar(Tmp[1])
+ Clm<- c(Clm,Tmp1)
+ }
+ else{
+ Rstr<- paste(Rstr,C,sep="")
+ }
+ }
+ Nrg<- 0
+ for (I in seq(length(Clm),1,by=-1)){
+ Tmp<- Clm[I]
+ Tmp1<- length(Clm)-I
+ Nrg<- Nrg+Tmp*26^Tmp1
+ }
+ Mrg<- eval(parse(text=Rstr))
+ if(Nargs>=3){
+ Ag<- varargin[[3]]
+ Clm<- c()
+ Rstr<- ""
+ for (I in Looprange(1,nchar(Ag))){
+ C<- substr(Ag,1,1)
+ C<- toupper(C)
+ Tmp<- strsplit(Alpha,C)
+ if(length(Tmp)>1){
+ Clm<- c(Clm,Tmp+1)
+ }
+ else{
+ Rstr<- paste(Rstr,C,sep="")
+ }
+ }
+ Nrg2<- 0
+ for (I in seq(length(Clm),1,by=-1)){
+ Tmp<- Clm[I]
+ Tmp1<- length[Clm]-I
+ Nrg2<- Nrg2+Tmp*26^Tmp1
+ }
+ Nrg<- c(Nrg,Nrg2)
+ Tmp=eval(parse(text=Rstr))
+ Mrg<- c(Mrg,Tmp)
+ }
+ }
+ else{
+ Nrg<- varargin[[2]]
+ Mrg<- varargin[[3]]
+ }
+ if(length(Mrg)==1){
+ m1<- Mrg; m2<- m1+1
+ }
+ else{
+ m1<- Mrg[1]; m2<- Mrg[2] # 10.12.12
+ }
+ if(length(Nrg)==1){
+ n1<- Nrg; n2<- n1+1
+ }
+ else{
+ n1<- Nrg[1]; n2<- Nrg[2]
+ }
+ n1<- n1+1; n2<- n2+1
+ m1<- m1+1; m2<- m2+1
+ Hind<- TbL[[2]]
+ Vind<- TbL[[3]]
+ Tmp<- TbL[[1]]
+ HL<- Tmp[Hind]
+ Tmp1<- Op(1,TbL[[4]])
+ Tmp2<- Op(2,TbL[[4]])
+ HL<- Mixjoin(list(Tmp1),HL,list(Tmp2))
+ VL<- Tmp[Vind]
+ Tmp1<- Op(1,TbL[[5]])
+ Tmp2<- Op(2,TbL[[5]])
+ VL<- Mixjoin(list(Tmp1),VL,list(Tmp2))
+ Tmp<- TbL[[6]]
+ Tmp1<- Listplot(c(Ptsw(Tmp),Ptnw(Tmp)))
+ Tmp2<- Listplot(c(Ptse(Tmp),Ptne(Tmp)))
+ HL<- Mixjoin(list(Tmp1),HL,list(Tmp2))
+ Tmp1<- Listplot(c(Ptnw(Tmp),Ptne(Tmp)))
+ Tmp2<- Listplot(c(Ptsw(Tmp),Ptse(Tmp)))
+ VL<- Mixjoin(list(Tmp1),VL,list(Tmp2))
+ Tmp<- HL[[n1]]
+ if(mode(Tmp)=="numeric"){
+ H1<- Tmp[1,1]
+ }
+ else{
+ Tmp1<- Tmp[[1]]
+ H1<- Tmp1[1,1]
+ }
+ Tmp<- HL[[n2]]
+ if(mode(Tmp)=="numeric"){
+ H2<- Tmp[1,1]
+ }
+ else{
+ Tmp1<- Tmp[[1]]
+ H2<- Tmp1[1,1]
+ }
+ Tmp<- VL[[m1]]
+ if(mode(Tmp)=="numeric"){
+ V1<- Tmp[1,2]
+ }
+ else{
+ Tmp1<- Tmp[[1]]
+ V1<- Tmp1[1,2]
+ }
+ Tmp<- VL[[m2]]
+ if(mode(Tmp)=="numeric"){
+ V2<- Tmp[1,2]
+ }
+ else{
+ Tmp1<- Tmp[[1]]
+ V2<- Tmp1[1,2]
+ }
+ Pt<- c((H1+H2)/2,(V1+V2)/2)
+ High<- (V1-V2)/2
+ Wide<- (H2-H1)/2
+ Out<- list(Pt,Wide,High)
+ return(Out)
+}
+
+############################################
+
+Flattenlist<- function(...){
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ Out<- list()
+ for(N in Looprange(1,Nargs)){
+ D<- varargin[[N]]
+ if(is.data.frame(D) || !is.list(D)){ # modify
+ Out<- c(Out,list(D))
+ }
+ else{
+ for(I in Looprange(1,length(D))){
+ Ds<- D[[I]]
+ Tmp<- Flattenlist(Ds)
+ Out<- c(Out,Tmp)
+ }
+ }
+ }
+ return(Out)
+}
+
+############################################
+
+Fontsize<- function(Ookisa)
+{
+ Str<- "%"
+ S<- substr(Ookisa,1,1)
+ if(S=="n"){
+ Str<- "\\normalsize%"
+ }
+ if(S=="s"){
+ if(nchar(Ookisa)==1){
+ Tmp<- "n"
+ }
+ else{
+ Tmp<- substr(Ookisa,2,2)
+ }
+ if(Tmp=="s"){
+ Str<- "\\scriptsize%"
+ }
+ else{
+ Str<- "\\small%"
+ }
+ }
+ if(S=="f"){
+ Str<- "\\footnotesize%"
+ }
+ if(S=="t"){
+ Str<- "\\tiny%"
+ }
+ if(S=="l"){
+ Str<- "\\large%"
+ }
+ if(S=="L"){
+ if(nchar(Ookisa)==1){
+ Tmp<- "a"
+ }
+ else{
+ Tmp<- substr(Ookisa,2,2)
+ }
+ if(Tmp=="a"){
+ Str<- "\\Large%"
+ }
+ else{
+ Str<- "\\LARGE%"
+ }
+ }
+ if(S=="h"){
+ Str<- "\\huge%"
+ }
+ if(S=="H"){
+ Str<- "\\Huge%"
+ }
+ cat(Str,file=Wfile,append=TRUE)
+ cat("\n",file=Wfile,append=TRUE)
+}
+
+##########################################
+
+Fracform<- function(...)
+{
+ varargin<- list(...)
+ Eps<- 10^(-10)
+ Nmax<- 1/Eps
+ Nargs<- length(varargin)
+ X<- varargin[[1]]
+ Nr<- Nrow(X)
+ X<- as.matrix(X,nrow=Nr)
+ for (I in Looprange(2,Nargs)){
+ Tmp<- varargin[[I]]
+ if(mode(Tmp)!="numeric"){
+ next
+ }
+ if(Tmp>1){
+ Nmax<- Tmp
+ }
+ else if(Tmp>0){
+ Eps<- Tmp
+ }
+ }
+ Tmp<- rep("",length(X))
+ Out<- matrix(Tmp,nrow=nrow(X))
+ for (I in Looprange(1,nrow(X))){
+ for (J in Looprange(1,ncol(X))){
+ Dt<- X[I,J]
+ if(mode(Dt)=="character"){
+ Dt<- eval(parse(text=Dt))
+ }
+ R<- 1
+ N<- 0
+ Rmin<- R
+ Nr<- N
+ while (R>Eps && N<Nmax){
+ N<- N+1
+ M<- round(Dt*N)
+ R<- abs(Dt-M/N)
+ if(R<Rmin){
+ Rmin<- R
+ Nr<- N
+ }
+ }
+ if(N==Nmax){
+ N<- Nr
+ M<- round(Dt*N)
+ }
+ Tmp<- as.character(M)
+ if(N!=1){
+ Tmp<- paste(Tmp,"/",as.character(N),sep="")
+ }
+ Out[I,J]<- Tmp
+ }
+ }
+ if(nrow(Out)==1){
+ Out<- as.character(Out)
+ }
+ return(Out)
+}
+
+##############################################
+# 2011.12.17 ( list )
+
+Framedata<-function(...)
+{
+ varargin<- Flattenlist(list(...))
+ N<-length(varargin)
+ if(N<= 1){
+ H<- 1.0*10^(-4);
+ PA<-c(XMIN+H,YMIN+H)
+ PB<-c(XMAX-H,YMIN+H)
+ PC<-c(XMAX-H,YMAX-H)
+ PD<-c(XMIN+H,YMAX-H)
+ }
+ else{
+ Tmp<-varargin[[N]]
+ if(is.numeric(Tmp) && length(Tmp)==1){
+ Dy<-Tmp; Dx<-Dy
+ Tmp<-varargin[[N-1]]
+ if(is.numeric(Tmp) && length(Tmp)==1){
+ Dx<-Tmp
+ }
+ Tmp<-varargin[[1]]
+ X<-Tmp[1]; Y<-Tmp[2]
+ X1<-X-Dx; X2<-X+Dx; Y1<-Y-Dy; Y2<-Y+Dy
+ }
+ else{
+ Tmp<-varargin[[1]]
+ X1<-Tmp[1]; X2<-Tmp[2]
+ Tmp<-varargin[[2]]
+ Y1<-Tmp[1]; Y2<-Tmp[2]
+ }
+ PA<-c(X1,Y1); PB<-c(X2,Y1)
+ PC<-c(X2,Y2); PD<-c(X1,Y2)
+ }
+ Out<- Listplot(c(PA,PB,PC,PD,PA))
+ return(Out)
+}
+
+###################################
+
+Hatchdata<- function(...)
+{ ## Scaling is implemented
+ varargin<- list(...)
+ ShaL<- list()
+ Nargs<- length(varargin)
+ Kakudo<- 45
+ Kankaku<- 0.125*1000/2.54/MilliIn
+ Tmp<- Doscaling(c(XMIN,YMIN))
+ Xmn<- Tmp[1]; Ymn<- Tmp[2]
+ Tmp<- Doscaling(c(XMAX,YMAX))
+ Xmx<- Tmp[1]; Ymx<- Tmp[2]
+ for (N in seq(Nargs,1, by=-1))
+ {
+ Tmp<- varargin[[N]]
+ if(mode(Tmp)=="list")
+ {
+ break
+ }
+ }
+ if(N<Nargs)
+ {
+ Kakudo<- varargin[[N+1]]
+ if(N==Nargs-2)
+ {
+ Kankaku<- 0.125*varargin[[Nargs]]
+ }
+ }
+ NaitenL<- varargin[[1]]
+ if(mode(NaitenL)!="list")
+ {
+ NaitenL<- list(NaitenL)
+ }
+ Ns<- 2
+ StartP<- Op(1,NaitenL)
+ if(mode(StartP)=="character")
+ {
+ StartP<- c((Xmn+Xmx)/2, (Ymn+Ymx)/2)
+ }
+ if(mode(varargin[[2]])=="numeric")
+ {
+ StartP<- varargin[[2]]
+ StartP<- Doscaling(StartP)
+ Ns<- 3
+ }
+ Tmp<- list()
+ for ( I in Looprange(Ns,N))
+ {
+ Tmp1<- list(varargin[[I]])
+ Tmp2<- Mixjoin(Tmp, Tmp1)
+ Tmp<- Tmp2
+ }
+ Bdy<- Kyoukai(Tmp)
+ Bdys<-list()
+ for (I in 1:length(Bdy))
+ {
+ Tmp1<- Bdy[[I]]
+ Tmp2<- Doscaling(Tmp1)
+ Bdys<- Mixjoin(Bdys,list(Tmp2))
+ }
+ Bdy<- Bdys
+ PtnL<- list()
+ for (I in Looprange(1,length(NaitenL)))
+ {
+ Tmp<- Op(I, NaitenL)
+ if(mode(Tmp)=="numeric")
+ {
+ Tmp1<- Naigai(Tmp,Bdy)
+ Tmp2<- Mixjoin(PtnL, list(Tmp1))
+ PtnL<- Tmp2
+ }
+ else
+ {
+ if(mode(Tmp)!="character")
+ {
+ return("Mode Error")
+ }
+ Ptn<-c()
+ for (J in 1:nchar(Tmp))
+ {
+ if(Op(J,Tmp)=="i")
+ {
+ Ptn<- c(Ptn,1)
+ }
+ else
+ {
+ Ptn<- c(Ptn,0)
+ }
+ }
+ PtnL<- Mixjoin(PtnL, list(Ptn))
+ }
+ }
+ Call<- length(Bdy)
+ Ptn<- c(seq(0, 0, length=Call))
+ if(Member(Ptn,PtnL))
+ {
+ Wn<- Doscaling(Framedata())
+ Tmp<- Mixjoin(Bdy,list(Wn))
+ Bdy<- Tmp
+ Tmp<- list()
+ for (I in Looprange(1, length(PtnL)))
+ {
+ Tmp1<- c(Op(I,PtnL),1)
+ Tmp2<- Mixjoin(Tmp,list(Tmp1))
+ Tmp<- Tmp2
+ }
+ PtnL<- Tmp
+ }
+ V<- c(cos(Kakudo*pi/180),sin(Kakudo*pi/180))
+ Vm<- c(-sin(Kakudo*pi/180),cos(Kakudo*pi/180))
+ Tmp<- Op(1,NaitenL)
+ if(mode(Tmp)=="numeric" && length(Tmp)==2)
+ {
+ Tmp<- Doscaling(Tmp)
+ Delta<- Tmp-StartP
+ K<- trunc(Dotprod(Delta,Vm)/Kankaku)
+ PA<- StartP+K*Kankaku*Vm
+ Sha<- Makeshasen(PtnL,PA,V,Bdy)
+ I <- 1
+ while (length(Sha)>0)
+ {
+ Tmp<- Mixjoin(ShaL, list(Sha))
+ ShaL <- Tmp
+ Sha<- Makeshasen(PtnL,PA+I*Kankaku*Vm,V,Bdy)
+ I <- I+1
+ }
+ Sha<- Makeshasen(PtnL,PA-Kankaku*Vm,V,Bdy)
+ I<- 2
+ while (length(Sha)>0)
+ {
+ for (J in 1:length(Sha))
+ {
+ Tmp<- Mixjoin(ShaL,list(Sha[[J]]))
+ ShaL<- Tmp
+ }
+ Sha<- Makeshasen(PtnL,PA-I*Kankaku*Vm,V,Bdy)
+ I<- I+1
+ }
+ }
+ else
+ {
+ Delta<- c(Xmn,Ymn)-StartP
+ K1<- trunc(Dotprod(Delta,Vm)/Kankaku)
+ Delta<- c(Xmx,Ymn)-StartP
+ K2<- trunc(Dotprod(Delta,Vm)/Kankaku)
+ Delta<- c(Xmx,Ymx)-StartP
+ K3<- trunc(Dotprod(Delta,Vm)/Kankaku)
+ Delta<- c(Xmn,Ymx)-StartP
+ K4<- trunc(Dotprod(Delta,Vm)/Kankaku)
+ IM<- max(K1,K2,K3,K4)
+ Im<- min(K1,K2,K3,K4)
+ for (I in Im:IM)
+ {
+ Sha<- Makeshasen(PtnL,StartP+I*Kankaku*Vm,V,Bdy)
+ for (J in Looprange(1,length(Sha)))
+ {
+ Tmp<- Mixjoin(ShaL, list(Sha[[J]]))
+ ShaL<- Tmp
+ }
+ }
+ }
+ ShaLs<-list()
+ for (I in Looprange(1,length(ShaL)))
+ {
+ Tmp<- ShaL[[I]]
+ Tmp1<- Unscaling(Tmp)
+ Tmp2<- Mixjoin(ShaLs, list(Tmp1))
+ ShaLs<- Tmp2
+ }
+ ShaL<- ShaLs
+ return(ShaL)
+}
+
+######################################
+
+Htickmark<- function(...)
+{ ## Scaling is implemented
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ ArgsL<- varargin
+ if(mode(ArgsL[[1]])=="character"){
+ Str<- ArgsL[[1]]
+ Tmp<- strsplit(Str,"m")
+ Tmp<- Tmp[[1]]
+ if(length(Tmp)>1){
+ I<- nchar(Tmp[1])+1
+ }
+ else{
+ I<- 0
+ }
+ Tmp<- strsplit(Str,"n")
+ Tmp<- Tmp[[1]]
+ if(length(Tmp)>1){
+ J<- nchar(Tmp[1])+1
+ }
+ else{
+ J<- 0
+ }
+ Tmp<- strsplit(Str,"r")
+ Tmp<- Tmp[[1]]
+ if(length(Tmp)>1){
+ K=nchar(Tmp[1])+1
+ }
+ else{
+ K<- 0
+ }
+ if(K>0){
+ S<- substr(Str,K+1,nchar(Str))
+ R<- as.numeric(S)
+ if(is.na(R)){
+ R<- 1
+ }
+ }
+ else{
+ R<- 1
+ K<- nchar(Str)+1
+ }
+ if(J>0){
+ S<- substr(Str,J+1,K-1)
+ Dn<- as.numeric(S)
+ if(is.na(Dn)){
+ Dn<- 1
+ }
+ }
+ else{
+ Dn<- 1000
+ J<- nchar(Str)+1
+ }
+ S<- substr(Str,I+1,J-1)
+ Dm<- as.numeric(S)
+ if(is.na(Dm)){
+ Dm<- 1
+ }
+ ArgsL<- list()
+ for (I in Looprange(1, floor((XMAX-GENTEN[1])/Dm))){
+ ArgsL<- Mixjoin(ArgsL,I*Dm)
+ if(I-floor(I/Dn)*Dn==0){
+ Str<- as.character(I*Dm*R)
+ ArgsL<- Mixjoin(ArgsL,Str)
+ }
+ }
+ for (I in seq(-1,ceiling((XMIN-GENTEN[1])/Dm),by=-1)){
+ ArgsL<- Mixjoin(ArgsL,I*Dm)
+ if(I-floor(I/Dn)*Dn==0){
+ Str<- as.character(I*Dm*R)
+ ArgsL<- Mixjoin(ArgsL,Str)
+ }
+ }
+ }
+ MemoriList<- list()
+ Memori<- list()
+ for (N in 1:length(ArgsL)){
+ Dt<- ArgsL[[N]]
+ if(mode(Dt)=="numeric" && length(Dt)>1){
+ if(length(Memori)>0){
+ MemoriList<- Mixjoin(MemoriList,list(Memori))
+ }
+ Memori<- list(Dt[1],Dt[2])
+ next
+ }
+ if(mode(Dt)=="character"){
+ Memori<- Mixjoin(Memori,Dt)
+ }
+ else{
+ if(length(Memori)>0){
+ MemoriList<- Mixjoin(MemoriList,list(Memori))
+ }
+ Memori<- list(Dt,GENTEN[2])
+ }
+ }
+ MemoriList<- Mixjoin(MemoriList,list(Memori))
+ for (N in 1:length(MemoriList)){
+ Dt<- MemoriList[[N]]
+ Ndt<- length(Dt)
+ X=Op(1,Dt)
+ Y=Op(2,Dt)
+ Tmp<-Doscaling(c(X,Y))
+ X<- Tmp[1]
+ Y<- Tmp[2]
+ Moji<- Op(Ndt,Dt)
+ Tmp1<- Unscaling(c(X,Y+MARKLEN))
+ Tmp2<- Unscaling(c(X,Y-MARKLEN))
+ Fd<- Listplot(c(Tmp1,Tmp2))
+ Drwline(Fd)
+ if(Ndt==3){
+ Tmp<-Unscaling(c(X,Y-MARKLEN))
+ Expr(Tmp,"s",Moji)
+ }
+ if(Ndt==4){
+ Houkou<- Op(3,Dt)
+ Tmp<-grep("s",Houkou)
+ if(length(Tmp)>0){
+ Tmp<-Unscaling(c(X,Y-MARKLEN))
+ Expr(Tmp,Houkou,Moji)
+ }
+ else{
+ Tmp<- Unscaling(c(X,Y+MARKLEN))
+ Expr(Tmp,Houkou,Moji)
+ }
+ }
+ cat("%\n",file=Wfile,append=TRUE)
+ }
+}
+
+#############################################
+# 2013.08.07
+
+Integrate<- function(Fs,Vs, Intv){
+ if(is.function(Fs)){
+ Fn<- Fs
+ }
+ else{
+ Str<- paste("Fn<- function(",Vs, ") ", Fs, sep="")
+ eval(parse(text=Str))
+ }
+ Tmp<- integrate(Fn, Intv[[1]], Intv[[2]])
+ Out<- Tmp[[1]]
+ return(Out)
+}
+
+#############################################
+
+Intersectcrvs<-function(...)
+{
+ varargin<-list(...)
+ Nargs<-length(varargin)
+ Eps<-10^(-4)
+ Tmp<-varargin[[Nargs]]
+ if(mode(Tmp)=="numeric" && length(Tmp)==1)
+ {
+ Eps<-Tmp
+ }
+ G1<-varargin[[1]]
+ if(mode(G1)=="numeric")
+ {
+ G1<-list(G1)
+ }
+ G2<-varargin[[2]]
+ if(mode(G2)=="numeric")
+ {
+ G2<-list(G2)
+ }
+ PL<-list()
+ for (N in 1:length(G1))
+ {
+ for (M in 1:length(G2))
+ {
+ KL<-IntersectcrvsPp(G1[[N]],G2[[M]],Eps)
+ for (I in Looprange(1,length(KL)))
+ {
+ Tmp<-KL[[I]]
+ P<-Tmp[1]
+ PL<-append(PL,P)
+ }
+ }
+ }
+ return(PL)
+}
+
+###########################################
+
+IntersectcrvsPp<-function(...)
+{
+ varargin<-list(...)
+ Nargs<-length(varargin)
+ G1<-varargin[[1]]; G2<-varargin[[2]]
+ Eps<- 10.0^(-4)
+ if(Nargs>2) Eps<-varargin[[3]]
+ SqEps<- 10.0^(-10)
+ Eps2<- 0.1
+ if(Nargs>3) Eps2<-varargin[[4]]
+ Data1<-G1
+ Data2<-G2
+ if(Nrow(Data1)==Nrow(Data2))
+ {
+ Tmp<-seq(Nrow(Data2),1, by=-1)
+ Tmp1<-Data2[Tmp,]
+ Eps0<-10^(-6)
+ Tmp2<-Norm(Data1-Data2)
+ Tmp3<-Norm(Data1-Tmp1)
+ if(Tmp2<Eps0||Tmp3<Eps0)
+ {
+ KL<-list()
+ return(KL)
+ }
+ }
+ KL1<-list()
+ KL2<-list()
+ for (I in Looprange(1,Nrow(Data1)-1))
+ {
+ A<-Data1[I,]
+ B<-Data1[I+1,]
+ for (J in Looprange(1,Nrow(Data2)-1))
+ {
+ P<-Data2[J,]; Q<-Data2[J+1,]
+ Tmp<-Koutenseg(A,B,P,Q,Eps,Eps2)
+ if(mode(Tmp)=="list")
+ {
+ if(Tmp[[3]]==0)
+ {
+ Tmp1<-list(Tmp[[1]],Tmp[[2]],I,J)
+ KL1<-append(KL1,list(Tmp1))
+ }
+ else
+ {
+ Tmp2<-list(Tmp[[1]],Tmp[[2]],I,J)
+ KL2<-append(KL2, list(Tmp2))
+ }
+ }
+ }
+ }
+ KL<-list()
+ if(length(KL1)>0)
+ {
+ Tmp<-KL1[[1]]
+ P<-Tmp[[1]]
+ T<-Tmp[[2]]
+ I<-Tmp[[3]]
+ J<-Tmp[[4]]
+ Tmp<-list(P,I+T,J)
+ KL<-list(Tmp)
+ }
+ for (N in Looprange(2,length(KL1)))
+ {
+ Tmp<-KL1[[N]]
+ P<-Tmp[[1]]
+ Flg<-0
+ for (K in 1:length(KL))
+ {
+ if(1>length(KL)) break
+ Tmp<-KL[[K]]
+ if(Norm(P-Tmp[[1]])^2<SqEps)
+ {
+ Flg<-1
+ break
+ }
+ }
+ if(Flg==0)
+ {
+ Tmp<-KL1[[N]]
+ T<-Tmp[[2]]
+ I<-Tmp[[3]]
+ J<-Tmp[[4]]
+ Tmp<-list(P,I+T,J)
+ KL<-append(KL,list(Tmp))
+ }
+ }
+ for (N in Looprange(1,length(KL2)))
+ {
+ Tmp<-KL2[[N]]
+ P<-Tmp[[1]]
+ Flg<-0
+ for (K in Looprange(1,length(KL)))
+ {
+ Tmp<-KL[[K]]
+ if(Norm(P-Tmp[[1]])^2<SqEps)
+ {
+ Flg<-1
+ break
+ }
+ }
+ if(Flg==0)
+ {
+ Tmp<-KL2[[N]]
+ T<-Tmp[[2]]
+ T<-min(max(T,0),1)
+ I<-Tmp[[3]]
+ J<-Tmp[[4]]
+ Tmp<-list(P,I+T,J)
+ KL<-append(KL,list(Tmp))
+ }
+ }
+ return(KL)
+}
+
+###########################################
+# 13.12.20 debugged
+
+Invdashline<- function(...)
+{
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ Nall<- Nargs; Sen<- 1 ; Gap<- 1
+ Tmp<- varargin[[Nall]]
+ if(is.numeric(Tmp) && length(Tmp)==1 && Tmp>0){ # 13.12.20
+ Tmp1<- varargin[[Nall-1]]
+ if(is.numeric(Tmp1) && length(Tmp1)==1 && Tmp1>0){ # 13.12.20
+ Sen<- Tmp1; Gap<- Tmp
+ Nall<- Nall-2
+ }
+ else{
+ Sen<- Tmp; Gap<- Sen
+ Nall<- Nall-1
+ }
+ }
+ Sen<- 1000/2.54/MilliIn*Sen
+ Gap<- 1000/2.54/MilliIn*Gap
+ for (N in Looprange(1,Nall)){
+ Figdata<- varargin[[N]]
+ Makehasen(Figdata,Sen,Gap,1)
+ }
+}
+
+#########################################
+
+Invert<- function(Pd)
+{
+ OutL=Pd[nrow(Pd):1,]
+ return(OutL)
+}
+
+############################################
+
+InWindow<-function(PA)
+{
+ Eps<-10.0^(-6);
+ if((length(PA)==2)&(is.numeric(PA))){ # 17.11.20
+ X<-PA[1]; Y<-PA[2];
+ if(X>XMIN-Eps && X<XMAX+Eps && Y>YMIN-Eps && Y<YMAX+Eps)
+ Rx<-"i"
+ else
+ Rx<-"o"
+ return(Rx)
+ }else{
+ return("o")
+ }
+}
+
+#######################################
+
+Joincrvs<- function(...)
+{
+ varargin<- list(...)
+ Nall<- length(varargin)
+ Eps<- 10^(-4)
+ Tmp<- varargin[[Nall]]
+ if(mode(Tmp)=="numeric" && length(Tmp)==1){
+ Eps<- Tmp
+ Nall<- Nall-1
+ }
+ QdL<- Flattenlist(varargin[1:Nall]) # 11.06.25
+ if(length(QdL)==0){
+ PtL<-c()
+ return(PtL)
+ }
+ PtL<- Op(1,QdL)
+ for (I in Looprange(2,length(QdL))){
+ Qd<- Op(I,QdL)
+ if(Numptcrv(Qd)<=1){next} # 11.06.25
+ P<- Ptend(PtL)
+ S<- Ptstart(PtL)
+ Q<- Ptstart(Qd)
+ R<- Ptend(Qd)
+ MN<- min(Norm(P-Q),Norm(P-R),Norm(S-Q),Norm(S-R))
+ if(MN==Norm(P-R)){
+ Qd<- Invert(Qd)
+ }
+ else if(MN==Norm(S-Q)){
+ PtL=Invert(PtL)
+ }
+ else if(MN==Norm(S-R)){
+ PtL<- Invert(PtL)
+ Qd<- Invert(Qd)
+ }
+ if(MN>Eps){
+ PtL<- Appendrow(PtL,Qd)
+ }
+ else{
+ if(is.null(nrow(Qd))){ Qd<- as.matrix(Qd,nrow=1)}
+ PtL<- Appendrow(PtL,Qd[2:nrow(Qd),]) # 11.06.25
+ }
+ }
+ return(PtL)
+}
+
+########################################
+# 2011.11.02
+
+Joingraphics<- function(...)
+{
+ varargin<- list(...)
+ Ls<- Flattenlist(varargin)
+ N<- length(Ls)
+ Tp<- Ls[[N]]
+ Listflg<- 0
+ if( is.character(Tp)){
+ Tmp<- toupper(substr(Tp,1,1))
+ if(Tmp=="L"){
+ Listflg<- 1
+ }
+ N<- N-1
+ Ls<- Ls[1:N]
+ }
+ if(Listflg==1){
+ P<- Ls
+ }
+ else{
+ P<- c()
+ for (I in 1:N){
+ Tmp<- Ls[[I]]
+ P<- Appendrow(P,c(Inf,Inf))
+ P<- Appendrow(P,Tmp)
+ }
+ P<- P[2:nrow(P),]
+ }
+ return(P)
+}
+
+########################################
+
+Kouten<- function(PA,V,P,Q)
+{
+ Eps<- 10.0^(-6)
+ A1<- PA[1]; A2<- PA[2]
+ V1<- V[1]; V2<- V[2]
+ P1<- P[1]; P2<- P[2]
+ U1<- Q[1]-P1; U2<- Q[2]-P2
+ Tmp<- Norm(P-Q)*Norm(V)
+ if(Tmp==0)
+ {
+ Out<- list(Inf,-Inf)
+ return(Out)
+ }
+ D<- U1*V2-U2*V1
+ if(abs(D)/Tmp<Eps)
+ {
+ Out<- list(Inf,-Inf)
+ return(Out)
+ }
+ S<- ((-A2+P2)*V1+(A1-P1)*V2)/D
+ if(S>1+Eps || S<Eps)
+ {
+ Out<-list(Inf,-Inf)
+ return(Out)
+ }
+ T<- ((-A2+P2)*U1+(A1-P1)*U2)/D
+ Tmp<- PA+T*V
+ Out<- list(T,Tmp,sign(D))
+ return(Out)
+}
+
+##########################################
+
+KoutenList<- function(PA,V,Bdy)
+{
+ Eps<-10.0^(-6)
+ TenL<-list()
+ for (N in 1:length(Bdy))
+ {
+ KL<- Op(N,Bdy)
+ for (K in Looprange(1, Nrow(KL)-1))
+ {
+ P<- Op(K,KL); Q<- Op(K+1,KL)
+ if(P!="/" && Q!="/")
+ {
+ Tmp<- Kouten(PA,V,P,Q);
+ if(Tmp[[1]]!=Inf)
+ {
+ Ten<- append(Tmp,N)
+ Flg<- 0
+ NN<- length(TenL)
+ I<- 1
+ while (Flg==0 && I<=NN)
+ {
+ Tmp<- Op(I,TenL)
+ if(Op(1,Ten)<Op(1,Tmp)-Eps)
+ {
+ Tmp1<- TenL[Looprange(1,I-1)]
+ Tmp2<- TenL[Looprange(I,length(TenL))]
+ TenL<- Mixjoin(Tmp1,list(Ten),Tmp2)
+ Flg<-1
+ }
+ else
+ if(Op(1,Ten)<Op(1,Tmp)+Eps)
+ {
+ if(Op(4,Ten)!=Op(4,Tmp))
+ {
+ Tmp1<- TenL[Looprange(1,I-1)]
+ Tmp2<- TenL[Looprange(I,length(TenL))]
+ TenL<- Mixjoin(Tmp1,list(Ten),Tmp2)
+ Flg<-1
+ }
+ else
+ if(Op(3,Ten)!=Op(3,Tmp))
+ {
+ Tmp1<- TenL[Looprange(I,I-1)]
+ Tmp2<- TenL[Looprange(I+1,length(TenL))]
+ TenL<- Mixjoin(Tmp1,Tmp2)
+ }
+ Flg<- 1
+ }
+ I<- I+1
+ }
+ if(Flg==0)
+ {
+ TenL<- Mixjoin(TenL,list(Ten))
+ }
+ }
+ }
+ }
+ }
+ return(TenL)
+}
+
+##########################################
+
+Koutenseg<-function(...)
+{
+ #pointdata on AB at which AB intersects CD
+ varargin<-list(...)
+ Nargs<-length(varargin)
+ Eps0 <- 10^(-4)
+ A<-varargin[[1]]; V<-varargin[[2]]-A
+ Sv2 <- V[1]^2+V[2]^2
+ if(Sv2<10^(-6))
+ {
+ Out<-Inf
+ return(Out)
+ }
+ P<-varargin[[3]]-A; Q<-varargin[[4]]-A
+ Eps <- 10.0^(-3)
+ if(Nargs>=5)
+ {
+ Eps<-varargin[[5]]
+ }
+ Eps2 <- 0.2
+ if(Nargs>=6)
+ {
+ Eps2<-varargin[[6]]
+ }
+ Eps<-min(Eps2,Eps/sqrt(Sv2))
+ P1<-(P[1]*V[1]+P[2]*V[2])/Sv2
+ P2<-(-P[1]*V[2]+P[2]*V[1])/Sv2
+ Q1<-(Q[1]*V[1]+Q[2]*V[2])/Sv2
+ Q2<-(-Q[1]*V[2]+Q[2]*V[1])/Sv2
+ m1 <- -Eps; M1 <- 1+Eps
+ m2 <- -Eps; M2 <- Eps
+ if(max(P1,Q1)<m1 || min(P1,Q1)>M1)
+ {
+ Out<-Inf
+ return(Out)
+ }
+ if(max(P2,Q2)<m2 || min(P2,Q2)>M2)
+ {
+ Out<-Inf
+ return(Out)
+ }
+ if(P2*Q2<0)
+ {
+ T<- P1-(Q1-P1)/(Q2-P2)*P2
+ if(T>m1 && T<M1)
+ {
+ if(T > -Eps0 && T<1+Eps0)
+ {
+ Tmp1<-A+T*V
+ Tmp2<-min(max(T,0),1)
+ Out<-list(Tmp1,Tmp2,0)
+ }
+ else
+ {
+ Tmp1<-A+T*V
+ Tmp2<-min(max(T,0),1)
+ Out<-list(Tmp1,Tmp2,1)
+ }
+ return(Out)
+ }
+ if(P1<m1 || P1>M1 || P2<m2 || P2>M2)
+ {
+ if(Q1<m1 || Q1>M1 || Q2<m2 || Q2>M2)
+ {
+ Out<-Inf
+ return(Out)
+ }
+ T<-min(max(Q1,0),1)
+ Tmp=A+T*V
+ Out<-list(Tmp,T,1)
+ return(Out)
+ }
+ T<-min(max(P1,0),1)
+ Tmp<-A+T*V
+ Out<-list(Tmp,T,1)
+ return(Out)
+ }
+ if(P1> -Eps0 && P1<1+Eps0 && P2> -Eps0 && P2 < Eps0)
+ {
+ T<- P1
+ Tmp<- A+T*V
+ Out<- list(Tmp, T, 0)
+ return(Out)
+ }
+ if(Q1> -Eps0 && Q1<1+Eps0 && Q2> -Eps0 && Q2<Eps0)
+ {
+ T<- Q1
+ Tmp<-A+T*V
+ Out<- list(Tmp,T,0)
+ return(Out)
+ }
+ if(P1<m1 || P1>M1 || P2<m2 || P2>M2)
+ {
+ if(Q1<m1 || Q1>M1 || Q2<m2 || Q2>M2)
+ {
+ Out<-Inf
+ return(Out)
+ }
+ T<-min(max(Q1,0),1)
+ Tmp<-A+T*V
+ Out<-list(Tmp,T,1)
+ return(Out)
+ }
+ if(Q1<m1 || Q1>M1 || Q2<m2 || Q2>M2)
+ {
+ T<-min(max(P1,0),1)
+ Tmp<-A+T*V
+ Out<-list(Tmp,T,1)
+ return(Out)
+ }
+ if(abs(P2)<abs(Q2))
+ {
+ T<-min(max(P1,0),1)
+ }
+ else
+ {
+ T<-min(max(Q1,0),1)
+ }
+ Tmp<A+T*V
+ Out<-list(Tmp,T,1)
+ return(Out)
+}
+
+##########################################
+
+Kukeiwake<- function(PL)
+{
+ Eps<-10.0^(-6)
+ NW<- c(XMIN,YMAX); SW<-c(XMIN,YMIN)
+ SE<- c(XMAX,YMIN); NE<-c(XMAX,YMAX)
+ Tmp<-matrix(c(NW,SW,SE,NE,NW),nrow=2)
+ Sikaku<- t(Tmp)
+ Kt<- IntersectcrvsPp(PL,Sikaku)
+ if(length(Kt)!=2)
+ {
+ print("not two points")
+ return(c())
+ }
+ Tmp<- Op(1,Kt)
+ Pt1<- Op(1,Tmp)
+ N1<- trunc(Op(2,Tmp))
+ M1<- Op(3,Tmp)
+ Tmp<- Op(2,Kt)
+ Pt2<- Op(1,Tmp)
+ N2<- trunc(Op(2,Tmp))
+ M2<- Op(3,Tmp)
+ T1<- Paramoncurve(Pt1,M1,Sikaku) #18.02.06
+ T2<- Paramoncurve(Pt2,M2,Sikaku)
+ QL<c()
+ if(Norm(Pt1-Op(N1+1,PL))>Eps)
+ {
+ QL<-Pt1
+ }
+ Tmp<-Appendrow(QL,PL[(N1+1):N2,])
+ QL<- Tmp
+ if(Norm(Pt2-Op(N2,PL))>Eps)
+ {
+ Tmp<-Appendrow(QL,Pt2)
+ QL<- Tmp
+ }
+ HidariL<- QL
+ Ms<- M2+1; Me<- M1
+ if(T1<T2+Eps) Me<- M1+4
+ for (M in Looprange(Ms,Me))
+ {
+ Tmp<- Op(Nrow(HidariL),HidariL)
+ P<-Op(((M-1) %% 4)+1,Sikaku)
+ if(Norm(Tmp-P)>Eps)
+ {
+ Tmp<-Append(HidariL,P)
+ HidariL<-Tmp
+ }
+ }
+ Tmp<- Op(Nrow(HidariL),HidariL)
+ if(Norm(Tmp-Pt1)>Eps)
+ {
+ Tmp<-Append(HidariL,Pt1)
+ HidariL<-Tmp
+ }
+ MigiL<- QL
+ Ms<- M2; Me<- M1+1
+ if(T1>T2-Eps) Me<- Me-4
+ for (Mm in Looprange(Me,Ms))
+ {
+ M<- Me+Ms-Mm
+ Tmp<- Op(Nrow(MigiL),MigiL)
+ P<- Op(((M-1) %% 4)+1,Sikaku)
+ if(Norm(Tmp-P)>Eps)
+ {
+ Tmp<-Appendrow(MigiL,P)
+ MigiL<-Tmp
+ }
+ }
+ Tmp<- Op(Nrow(MigiL),MigiL)
+ if(Norm(Tmp-Pt1)>Eps)
+ {
+ Tmp<-Appendrow(MigiL,Pt1)
+ MigiL<-Tmp
+ }
+ Out<- list(HidariL,MigiL)
+ return(Out)
+}
+
+###################################
+# 17.09.24 Eps
+
+Kyoukai<- function(...)
+{
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ Eps0<- 10^(-7)
+ DataL<-list()
+ for (I in 1:Nargs){
+ Tmp<- varargin[[I]]
+ if(mode(Tmp)=="numeric"){
+ DataL<- Mixjoin(DataL,list(list(Tmp)))
+ }
+ if(mode(Tmp)=="list"){
+ if(mode(Tmp[[1]])!="list"){
+ DataL<- Mixjoin(DataL, list(Tmp))
+ }
+ else{
+ DataL<-Mixjoin(DataL,Tmp)
+ }
+ }
+ }
+ Eps<- 10.0^(-4) #17.09.24
+ PLall<- list()
+ Sflg<- 0
+ N<- length(DataL)
+ for (I in 1:N){
+ Data<- Op(I, DataL)
+ Tmp<- Op(length(Data),Data)
+ if(mode(Tmp)=="numeric" && Nrow(Tmp)==1 && length(Tmp)>1){
+ Rg<-Tmp ; Nd<-length(Data)-1
+ }
+ else{
+ if(mode(Tmp)=="character"){
+ Rg<- Tmp ; Nd<-length(Data)-1
+ }
+ else{
+ Rg<- "c" ; Nd<-length(Data)
+ }
+ }
+ for (J in Looprange(1,Nd)){
+ Tmp<- Op(J,Data)
+ if(mode(Tmp)=="character"){
+ Rg<- Tmp
+ next
+ }
+ Points<- Tmp
+ P1<- Ptstart(Points)
+ P2<- Ptend(Points)
+ if(J==1){
+ PL<- Points
+ Pfirst<- P1
+ Plast<- P2
+ if(Nd>=2){
+ Tmp<- Data[[2]]
+ P<- Ptstart(Tmp)
+ Q<- Ptend(Tmp)
+ if(Norm(P2-P)>Eps && Norm(P2-Q)>Eps){
+ Tmp< Nrow(PL)
+ PL<-PL[Tmp:1,]
+ Pfirst<- Ptstart(PL)
+ Plast<- Ptend(PL)
+ }
+ }
+ }
+ else{
+ if(Norm(P1-Plast)<Eps){
+ Stp<-1; Ks<-2; Ke=Nrow(Points)
+ }
+ else{
+ if(Norm(P2-Plast)<Eps) {
+ Stp<- -1; Ks<-Nrow(Points)-1; Ke=1
+ }
+ else{
+ Tmp<-Appendrow(PL,c(Inf,Inf),Points)
+ PL<- Tmp
+ Sflg<- 1
+ Pfirst<- P1
+ Plast<- P2
+ Stp<- 1; Ks<- Nrow(Points)-1; Ke<- 1
+ }
+ }
+ for (K in seq(Ks,Ke, by=Stp)){
+ Tmp<- Appendrow(PL,Op(K,Points))
+ PL<-Tmp
+ }
+ Plast<- Op(Ke,Points)
+ }
+ }
+ if(Norm(Pfirst-Plast)>Eps){
+ Np<- Nrow(PL)
+ if(Rg=="c"){
+ Tmp<- Appendrow(PL,Pfirst)
+ PL<- Tmp
+ }
+ else if(Rg=="s"){
+ Tmp<- c(PL[1:Np,2],YMIN)
+ Y<- min(Tmp)-1
+ P<- c(Plast[1],Y); Q<- c(Pfirst[1],Y)
+ Tmp<- Appendrow(PL,P,Q,Pfirst)
+ PL<- Tmp
+ }
+ else if(Rg=="n"){
+ Tmp<- c(PL[1:Np,2],YMAX)
+ Y<-max(Tmp)+1
+ P<- c(Plast[1],Y); Q<- c(Pfirst[1],Y)
+ Tmp<- Appendrow(PL,P,Q,Pfirst)
+ PL<- Tmp
+ }
+ else if(Rg=="w"){
+ Tmp<- c(PL[1:Np,1],XMIN)
+ X<- min(Tmp)-1
+ P<- c(X,Plast[2]); Q<- c(X,Pfirst[2])
+ Tmp<- Appendrow(PL,P,Q,Pfirst)
+ PL<- Tmp
+ }
+ else if(Rg=="e"){
+ Tmp<- c(PL[1:Np,1],XMAX)
+ X<- max(Tmp)+1
+ P<- c(X,Plast[2]); Q<- c(X,Pfirst[2])
+ Tmp<- Appendrow(PL,P,Q,Pfirst)
+ PL<- Tmp
+ }
+ else if(mode(Rg)=="numeric" && Nrow(Rg)==1 && length(Rg)>1){
+ Tmp<- Kukeiwake(PL)
+ Tmp1<- Op(1,Tmp)
+ Tmp2<- Naigai(Rg,list(Tmp1))
+ if(Tmp2==c(1)){
+ PL<-Op(1,Tmp)
+ }
+ else{
+ PL<- Op(2,Tmp)
+ }
+ }
+ }
+ Tmp<- Ptstart(PL)
+ for (J in 2:Nrow(PL)){
+ P<- Op(J,PL)
+ Q<- Op(Nrow(Tmp),Tmp)
+ if(Norm(P-Q)>Eps){
+ Tmp1<-Appendrow(Tmp,P)
+ Tmp<-Tmp1
+ }
+ }
+ PL<-Tmp
+ PLall<-Mixjoin(PLall,list(PL))
+ }
+ if(length(PLall)==1 && Sflg==0){
+ Tmp<- Op(1,PLall)
+# Tmp<- Op(1,Tmp)
+ if(Norm(Ptstart(Tmp)-Ptend(Tmp))>Eps0){
+ Tmp1<- Appendrow(Tmp,Ptstart(Tmp))
+ PLall<- list(Tmp1)
+ }
+ }
+ return(PLall)
+}
+
+######################################
+
+Letter<-function(...)
+{ ## Scaling is implemented
+ varargin<-list(...)
+ Nargs<-length(varargin)
+ Irng<-c(seq(from=1,to=Nargs,by=3))
+ for (I in Irng)
+ {
+ Tmp<-varargin[[I]]
+ P<- Doscaling(Tmp)
+ X<-P[1]
+ Y<-P[2]
+ Houkou<-varargin[[I+1]]
+ Mojiretu<-varargin[[I+2]]
+ Hset<-Houkou
+ Vhoko<-"c"
+ if(length(grep("n",Hset))>0)
+ {
+ Vhoko<-"n"; Y<-Y+MEMORI
+ }
+ if(length(grep("s",Hset))>0)
+ {
+ Vhoko<-"s"; Y<-Y-MEMORI
+ }
+ Hhoko<-"c"
+ if(length(grep("e",Hset))>0)
+ {
+ Hhoko<-"e"; X<-X+MEMORI
+ }
+ if(length(grep("w",Hset))>0)
+ {
+ Hhoko<-"w"; X<-X-MEMORI
+ }
+ Hoko<-paste(Vhoko,Hhoko,sep="")
+ Suu<-"+-.0123456789"
+ SuuL<-Suu
+ J<-1; Dstr<-""
+ while (J<=nchar(Houkou))
+ {
+ Tmp<-substring(Houkou,J,J)
+ if(length(grep(Tmp,SuuL))>0)
+ {
+ if(Dstr=="") Hk<-substring(Houkou,J-1,J-1)
+ Dstr<-paste(Dstr,Tmp,sep="")
+ }
+ else
+ {
+ if(Dstr!="")
+ {
+ Nmbr<-as.numeric(Dstr)
+ D<-Nmbr*MEMORI
+ if(Hk=="n") Y<-Y+D
+ if(Hk=="s") Y<-Y-D
+ if(Hk=="e") X<-X+D
+ if(Hk=="w") X<-X-D
+ Dstr<-""
+ }
+ }
+ J<-J+1
+ }
+ if(Dstr!="")
+ {
+ Nmbr<-as.numeric(Dstr)
+ D<-Nmbr*MEMORI;
+ if(Hk=="n") Y<-Y+D
+ if(Hk=="s") Y<-Y-D
+ if(Hk=="e") X<-X+D
+ if(Hk=="w") X<-X-D
+ }
+ CalcWidth(Hoko,Mojiretu)
+ CalcHeight(Hoko,Mojiretu)
+ cat("\\put(",file=Wfile,append=TRUE)
+ Tmp1<- sprintf("%7.7f",X) # 11.07.19
+ Tmp2<- sprintf("%7.7f",Y) # 11.07.19
+ Str<-paste(Tmp1,",",Tmp2,sep="")
+ cat(Str,file=Wfile,append=TRUE)
+ Tmp<-"){\\hspace*{\\Width}"
+ Str<-paste(Tmp,"\\raisebox{\\Height}{",Mojiretu,"}}%\n",sep="")
+ cat(Str,file=Wfile,append=TRUE)
+ cat("%\n",file=Wfile,append=TRUE)
+ }
+}
+
+######################################################
+
+Letterrot<- function(...)
+{
+ varargin<- list(...)
+ P<- varargin[[1]]
+ V<- varargin[[2]]; N<- 3
+ P<- Doscaling(P)
+ V<- Doscaling(V)
+ Tmov<- 0
+ Tmp<- varargin[[N]]
+ if(mode(Tmp)=="numeric"){
+ Tmov<- Tmp; N<- N+1
+ }
+ Nmov<- 0
+ Tmp<- varargin[[N]]
+ if(mode(Tmp)=="numeric"){
+ Nmov<- Tmp; N<- N+1
+ }
+ Mojiretu<- Assign(varargin[[N]]) #2017.11.26
+ Tv<- 1/Norm(V)*V
+ Nv<- c(-Tv[2],Tv[1])
+ P<- P+MEMORI*Tmov*Tv+MEMORI*Nmov*Nv
+ Tmp<- acos(V[1]/Norm(V))
+ Theta<- round(Tmp*180/pi)
+ if(V[2]>=0){
+ Units<- ""
+ }
+ else{
+ Units<- "units=-360,"
+ }
+ Tmp<- paste("\\rotatebox[",Units,"origin=c]{",as.character(Theta),sep="")
+ Tmp<- paste(Tmp,"}{",Mojiretu,"}",sep="")
+ Letter(P,"c",Tmp)
+}
+
+###################################
+# 10.12.04
+
+Lineplot<-function(...)
+{
+ varargin <- list(...)
+ Nargs<-length(varargin)
+ A<-varargin[[1]]
+ if(is.numeric(A)) {
+ Tmp<-length(A)
+ if(Tmp>3) {
+ B <- A[(Tmp/2+1):Tmp]
+ A <- A[1:(Tmp/2)]
+ Is <- 2
+ }
+ else {
+ B<-varargin[[2]]
+ Is <- 3
+ }
+ }
+ else {
+ B<-A[[2]]
+ A<-A[[1]]
+ Is <- 2
+ }
+ Mag <- 100 ; Semi <- "" ## 10.12.04
+ for (I in Looprange(Is,Nargs)) {
+ Tmp <- varargin[[I]]
+ switch ( mode(Tmp),
+ "numeric"= Mag <- Tmp,
+ "character"= Semi <- Tmp
+ )
+ }
+V<- Mag/Norm(B-A)*(B-A) ## 10.12.04 from here
+ if(Semi=="") {
+ Out<- Listplot(c(A-V,A+V))
+ }
+ else if(Semi=="+") {
+ Out<- Listplot(c(A,A+V))
+ }
+ else {
+ Out<- Listplot(c(A-V,A))
+ } ## 10.12.04 to here
+ return(Out)
+}
+
+################################
+
+Listplot<-function(...)
+{
+ varargin<-list(...);
+ Z<-c();
+ for (I in 1:length(varargin))
+ {
+ Data<-varargin[[I]];
+ if(mode(Data)=="numeric")
+ {
+ if(class(Data)=="numeric")
+ {
+ Tmp<-matrix(Data,nrow=2);
+ Tmp<-t(Tmp);
+ Z<-Appendrow(Z,Tmp)
+ }
+ else
+ Z<-Appendrow(Z,Data)
+ }
+ else
+ {
+ for (J in 1:length(Data))
+ {
+ Tmp<-Data[[J]];
+ Z<-Appendrow(Z,Tmp)
+ }
+ }
+ }
+ return(Z)
+}
+
+##############################
+
+MakeBowdata <- function(PA,PB,H)
+{
+ Eps <- 10^(-5)
+ BOWSTART <<- PA
+ BOWEND <<- PB
+ D <- 1/2*Norm(PB-PA)
+ R <- (H^2+D^2)/(2*H)
+ A1 <- PA[1]; A2<-PA[2]
+ B1 <- PB[1]; B2<-PB[2]
+ if(abs(A2-B2)>Eps){
+# x <- poly(0,"X")
+# y <- -(A1-B1)*x/(A2-B2)+(1/2)*(A1^2+A2^2-B1^2-B2^2)/(A2-B2)
+# Eq1 <- (A1-x)^2+(A2-y)^2-R^2
+# Tmp <- coeff(Eq1)
+# C0 <- Tmp[1]; C1<-Tm[2]; C2<-Tmp[3]
+ C0<- A1^2+(A2-(1/2)*(A1^2+A2^2-B1^2-B2^2)/(A2-B2))^2-R^2
+ C1<- -(A1+B1)*(A2^2+B2^2-2*A2*B2-2*A1*B1+A1^2+B1^2)/(A2-B2)^2
+ C2<- 1+(A1-B1)^2/(A2-B2)^2
+ Det <- sqrt(C1^2-4*C0*C2)
+ Ansx1 <- (-C1+Det)/(2*C2)
+ Ansx2 <- (-C1-Det)/(2*C2)
+ Tmp <- -(A1-B1)*Ansx1/(A2-B2)+(1/2)*(A1^2+A2^2-B1^2-B2^2)/(A2-B2)
+ PC <- c(Ansx1,Tmp)
+ Tmp <--(A1-B1)*Ansx2/(A2-B2)+(1/2)*(A1^2+A2^2-B1^2-B2^2)/(A2-B2)
+ PC2 <- c(Ansx2,Tmp)
+ }
+ else{
+ Tmp <- 0.5*(PA+PB)
+ PC <- Tmp+c(0,R-H) # 11.06.02
+ PC2 <- Tmp-c(0,R-H)
+ }
+ VA <- PA-PC
+ VB <- PB-PC
+ if(VA[1]*VB[2]-VA[2]*VB[1]<0) {
+ PC <- PC2
+ }
+ AngA <- acos((PA[1]-PC[1])/R)
+ if(PA[2]-PC[2]<0){
+ AngA <- -AngA
+ }
+ AngB <- acos((PB[1]-PC[1])/R)
+ if(PB[2]-PC[2]<0){
+ AngB <- -AngB
+ }
+ if(AngA>AngB) {
+ AngB <- AngB+2*pi
+ }
+ Out <- list(PC,R,AngA,AngB)
+ return(Out)
+}
+
+####################################################
+
+MakeCurves<-function(...){ ## Scaling is implemented
+ varargin<-list(...)
+ Figdata<-varargin[[1]]
+ if(class(Figdata)=="numeric"){
+ Figdata<-matrix(Figdata,nrow=1)
+ }
+ Ptout<-1
+ if(length(varargin)>=2) Ptout<-varargin[[2]]
+ Eps<-10.0^(-6)
+ IndM<-Dataindex(Figdata)
+ Atos<-c()
+ for (Nd in 1:Nrow(IndM)){
+ Tmp<-IndM[Nd,]
+ Motos<-Figdata[Tmp[1]:Tmp[2],]
+ All<-Nrow(Motos)
+ if(Nrow(Motos)==1){
+ if(InWindow(Motos)=="o"){
+ next
+ }
+ Tmp1<- as.numeric(Motos)
+ if(Ptout==1){
+ Drwpt(Tmp1)
+ }
+ else{
+ Tmp1<- Doscaling(Tmp1)
+ Atos<-Appendrow(Atos,c(Inf,Inf),Tmp1)
+ next
+ }
+ }
+ Crv<-c()
+ for (I in Looprange(2,All)){
+ P<- Op(I-1,Motos)
+ Q<- Op(I,Motos)
+ Snbn<-MeetWindow(P,Q)
+ if(length(Snbn)==0){
+ if(length(Crv)>0){
+ Atos<-Appendrow(Atos,c(Inf,Inf),Doscaling(Crv))
+ Crv<-c()
+ }
+ }
+ else{
+ if(Norm(Snbn[1,]-Snbn[2,])<Eps){ next} # naosi 101202
+ if(length(Crv)==0){
+ Crv<-Snbn
+ }
+ else{
+ Tmp<-Op(Nrow(Crv),Crv)
+ if(Norm(Tmp-Op(1,Snbn))<Eps){
+ Crv<-Appendrow(Crv,Op(2,Snbn))
+ }
+ else{
+ Atos<-Appendrow(Atos,c(Inf,Inf),Doscaling(Crv))
+ Crv<-Snbn
+ }
+ }
+ }
+ }
+ if(Nrow(Crv)>=2)
+ {
+ Atos<-Appendrow(Atos,c(Inf,Inf),Doscaling(Crv))
+ }
+ }
+ Outdata<-Atos[2:Nrow(Atos),]
+ if(class(Outdata)=="numeric")
+ {
+ Outdata<-matrix(Outdata,nrow=1)
+ }
+ return(Outdata)
+}
+
+######################################
+
+Makehasen<- function(Figdata,Sen,Gap,Ptn)
+{
+ Eps<- 10.0^(-6)
+ Clist<- MakeCurves(Figdata)
+ DinM<- Dataindex(Clist)
+ for (N in Looprange(1,Nrow(DinM))){
+ Tmp<- DinM[N,]
+ Data<- Clist[Tmp[1]:Tmp[2],]
+ Dtall<- Nrow(Data)
+ Len<- 0
+ Lenlist<- c(0)
+ for (I in Looprange(2,Dtall)){
+ Len<- Len+Norm(Data[I,]-Data[I-1,])
+ Lenlist<- c(Lenlist,Len)
+ }
+ Lenall<- Lenlist[Dtall]
+ if(Lenall==0){
+ next
+ }
+ Kari<- (Sen+Gap)*0.1
+ Naga<- Sen*0.1
+ Tobi<- Gap*0.1
+ if(Norm(Data[1,]-Data[Dtall,])<Eps){
+ Nsen<- max(ceiling(Lenall/Kari),3)
+ SegUnit<- Lenall/Nsen
+ Naga<- SegUnit*Sen/(Sen+Gap)
+ Tobi<- SegUnit*Gap/(Sen+Gap)
+ SegList<- c(seq(0,(Nsen-1)*SegUnit,by=SegUnit))
+ }
+ else{
+ if(Ptn==0){
+ Nsen<- max(ceiling((Lenall+Tobi)/Kari),3)
+ SegUnit<- Lenall*(Sen+Gap)/(Nsen*Sen+(Nsen-1)*Gap)
+ Naga<- SegUnit*Sen/(Sen+Gap)
+ Tobi<- SegUnit*Gap/(Sen+Gap)
+ SegList<- c(seq(0,(Nsen-1)*SegUnit,by=SegUnit))
+ }
+ else{
+ Nsen<- max(ceiling((Lenall+Naga)/Kari),3)
+ SegUnit<- Lenall*(Sen+Gap)/((Nsen-1)*Sen+Nsen*Gap)
+ Naga<- SegUnit*Sen/(Sen+Gap)
+ Tobi<- SegUnit*Gap/(Sen+Gap)
+ SegList<- c(seq(Tobi,Tobi+(Nsen-2)*SegUnit,by=SegUnit))
+ }
+ }
+ Hajime<- 1; Owari<- 1
+ Mojisu<- 0
+ for (I in Looprange(1,length(SegList))){
+ Len<- SegList[I]
+ J<- Owari
+ while (Len>=Lenlist[J]-Eps){
+ if(J==Dtall){
+ break
+ }
+ J<- J+1
+ }
+ Hajime<- J-1
+ J<- Hajime
+ while (Len+Naga>Lenlist[J]-Eps){
+ if(J==Dtall){
+ break
+ }
+ J<- J+1
+ }
+ Owari<- J-1
+ T<- (Len-Lenlist[Hajime])
+ T<- T/(Lenlist[Hajime+1]-Lenlist[Hajime])
+ P<- Data[Hajime,]+T*(Data[Hajime+1,]-Data[Hajime,])
+ X<- as.character(round(MilliIn*P[1]))
+ Y<- as.character(-round(MilliIn*P[2]))
+ Str<- paste("\\special{pa ",X," ",Y,"}",sep="")
+ cat(Str,file=Wfile,append=TRUE)
+ Mojisu<- Mojisu+nchar(Str)
+ for (J in Looprange(Hajime+1,Owari)){
+ P<- Data[J,]
+ X<- as.character(round(MilliIn*P[1]))
+ Y<- as.character(-round(MilliIn*P[2]))
+ Str<- paste("\\special{pa ",X," ",Y,"}",sep="")
+ cat(Str,file=Wfile,append=TRUE)
+ Mojisu<- Mojisu+nchar(Str)
+ }
+ T<- (Len+Naga-Lenlist[Owari])
+ T<- T/(Lenlist[Owari+1]-Lenlist[Owari])
+ P<- Data[Owari,]+T*(Data[Owari+1,]-Data[Owari,])
+ X<- as.character(round(MilliIn*P[1]))
+ Y<- as.character(-round(MilliIn*P[2]))
+ Str1<- paste("\\special{pa ",X," ",Y,"}",sep="")
+ Str2<- "\\special{fp}"
+ cat(Str1,file=Wfile,append=TRUE)
+ cat(Str2,file=Wfile,append=TRUE)
+ Mojisu<- Mojisu+nchar(Str1)+nchar(Str2)
+ if(Mojisu>80){
+ cat("%\n",file=Wfile,append=TRUE)
+ Mojisu<- 0
+ }
+ }
+ }
+ cat("%\n%\n",file=Wfile,append=TRUE);
+}
+
+######################################
+
+Makeliststr<- function(L)
+{
+ Out="list("
+ for (I in 1:length(L)){
+ Dt<- L[[I]]
+ if(mode(Dt)=="numeric"){
+ if(length(Dt)==1){
+ Dts<- as.character(Dt)
+ }
+ else{
+ Dts<- "c("
+ for (J in Looprange(1,Nrow(Dt))){
+ for (K in 1:ncol(Dt)){
+ Dts<- paste(Dts,as.character(Dt[J,K]),sep="")
+ if(K< ncol(Dt)){
+ Dts<- paste(Dts,",",sep="")
+ }
+ }
+ if(J<Nrow(Dt)){
+ Dts<- paste(Dts,";",sep="")
+ }
+ else{
+ Dts<- paste(Dts,")",sep="")
+ }
+ }
+ }
+ }
+ if(mode(Dt)=="character"){
+ Dts<- paste(Prime(),Dt,Prime(),sep="")
+ }
+ if(mode(Dt)=="list"){
+ Dts<- Makeliststr(Dt)
+ }
+ Out<- paste(Out,Dts,sep="")
+ if(I<length(L)){
+ Out<- paste(Out,",")
+ }
+ else{
+ Out<- paste(Out,")",sep="")
+ }
+ }
+ return(Out)
+}
+
+############################################
+
+Makeshasen<- function(PtnL,PA,V,Bdy)
+{
+ Eps<- 10^(-6)
+ TenL<- KoutenList(PA,V,Bdy)
+ Nten<- length(TenL)
+ Call<- length(Bdy)
+ Ptn<- c(seq(0, 0, length=Call))
+ Out<- list()
+ GL<- c()
+ Te<- -10^6
+ for (I in Looprange(1,Nten-1)){
+ TenP<- Op(I,TenL); TenQ<- Op(I+1,TenL)
+ Ts<- Op(1,TenP)
+ P<- Op(2,TenP); Q<- Op(2,TenQ)
+ NC<- Op(4,TenP)
+ Tmp<- (Op(NC,Ptn)+1) %% 2
+ Ptn[NC]<- Tmp
+ if(Op(1,TenQ)-Ts>Eps){
+ if(Member(Ptn,PtnL)){
+ if(abs(Te-Ts)>Eps){
+ if(Nrow(GL)>0){
+ Tmp<- Mixjoin(Out, list(GL))
+ Out<- Tmp
+ }
+ GL<- Listplot(P,Q)
+ }
+ else{
+ Tmp <- Appendrow(GL, Q)
+ GL<- Tmp
+ }
+ Te<- Op(1,TenQ)
+ }
+ }
+ }
+ if(Nrow(GL)>0){
+ Tmp<- Mixjoin(Out, list(GL))
+ Out<- Tmp
+ }
+ return(Out)
+}
+
+#############################################
+
+Mawarikomi<- function(...)
+{
+ varargin<- list(...)
+ haba<- "10cm"
+ Nargs<- length(varargin)
+ if(Nargs>0){
+ haba<- varargin[[1]]
+ }
+ cat("\\begin{mawarikomi}%\n",file="",append=TRUE)
+ cat("%<1>[5](0,0)%\n",file="",append=TRUE)
+ Str<- paste("{",haba,"}{%\n",sep="")
+ cat(Str,file="",append=TRUE)
+ cat("}%\n",file="",append=TRUE)
+ cat("\\end{mawarikomi}",file="",append=TRUE)
+}
+
+##############################################
+
+MeetWindow<-function(PA,PB)
+{
+ if(InWindow(PA)=="i" && InWindow(PB)=="i")
+ {
+ R<-Appendrow(PA,PB)
+ return(R)
+ };
+ Horner<-function(n,t)
+ {
+ PT<-(1-t)*PA+t*PB;
+ return(PT[n])
+ }
+ Eps<-10.0^(-6);
+ Txm<-(-1); TxM<-(-1); Tym<-(-1); TyM<-(-1);
+ if(PA[1]!=PB[1])
+ {
+ Txm<-(XMIN-PA[1])/(PB[1]-PA[1]);
+ TxM<-(XMAX-PA[1])/(PB[1]-PA[1]);
+ }
+ if(PA[2]!=PB[2])
+ {
+ Tym<-(YMIN-PA[2])/(PB[2]-PA[2]);
+ TyM<-(YMAX-PA[2])/(PB[2]-PA[2]);
+ }
+ Tmp<-Horner(2,Txm);
+ if(Tmp<YMIN-Eps || Tmp>YMAX+Eps)
+ {
+ Txm<-(-1);
+ }
+ Tmp<-Horner(2,TxM);
+ if(Tmp<YMIN-Eps || Tmp>YMAX+Eps)
+ {
+ TxM<-(-1)
+ }
+ Tmp<-Horner(1,Tym);
+ if(Tmp<XMIN-Eps || Tmp>XMAX+Eps)
+ {
+ Tym<--1
+ }
+ Tmp<-Horner(1,TyM);
+ if(Tmp<XMIN-Eps || Tmp>XMAX+Eps)
+ {
+ TyM<--1
+ }
+ Tans<-sort(c(Txm,TxM,Tym,TyM));
+ Tmp<-c();
+ for (I in 1:length(Tans))
+ {
+ Tmp1<-Tans[I];
+ if(Tmp1>-Eps && Tmp1<1+Eps)
+ {
+ if(length(Tmp)==0)
+ {
+ Tmp<-c(Tmp1);
+ }
+ else
+ {
+ if(abs(Tmp[length(Tmp)]-Tmp1)>Eps)
+ {
+ Tmp<-c(Tmp,Tmp1)
+ }
+ }
+ }
+ }
+ Tans<-Tmp;
+ if(length(Tans)==0)
+ {
+ R<-c();
+ return(R);
+ }
+ if(length(Tans)==1)
+ {
+ Ten1<-Horner(1:2,Tans[1]);
+ if(InWindow(PA)=="i")
+ {
+ R<-Appendrow(PA,Ten1)
+ return(R)
+ }
+ else
+ {
+ R<-Appendrow(Ten1,PB)
+ return(R)
+ }
+ }
+ Ten1<-Horner(1:2,Tans[1])
+ Ten2<-Horner(1:2,Tans[2])
+ R<-Appendrow(Ten1,Ten2)
+ return(R)
+}
+
+#########################################
+
+# New 10.03.21
+
+Mixjoin<-function(...)
+{
+ varargin<-list(...)
+ Nargs<- length(varargin)
+ M<- list()
+ for (I in 1:Nargs)
+ {
+ Tmp<-varargin[[I]]
+ if(length(Tmp)==0) next
+ if(Mixtype(Tmp)==1)
+ {
+ Tmp<-list(Tmp)
+ }
+ if(length(M)==0){
+ M <- Tmp
+ }
+ else{
+ M<- c(M,Tmp)
+ }
+ }
+ return(M)
+}
+
+#################################
+
+Mixlength<- function(PL){
+ if(length(PL)==0){
+ return(0)
+ }
+ if(Mixtype(PL)==1){
+ Out<- Nrow(PL)
+ }
+ else{
+ Out<- length(PL)
+ }
+ return(Out)
+}
+
+###########################################
+
+Mixtype<- function(D)
+{
+ if(mode(D)!="list") return(1)
+ for (I in 1:length(D))
+ {
+ Tmp<- D[[I]]
+ if(mode(Tmp)=="list") return(3)
+ }
+ return(2)
+}
+
+###########################################
+
+Naigai<- function(A,Bdy)
+{
+ V<- c(1,1)
+ Call<-length(Bdy)
+ KL<- KoutenList(A,V,Bdy)
+ Ptn<- seq(1,1,length=Call)
+ for (K in Looprange(1,length(KL)))
+ {
+ Ten<- Op(K,KL)
+ T<- Op(1,Ten); NC<- Op(4,Ten)
+ if(T<0)
+ {
+ Tmp<- (Ptn[NC]+1) %% 2
+ Ptn[NC]<- Tmp
+ }
+ }
+ return(Ptn)
+}
+
+########################################
+
+Nearestpt<- function(...){
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ PL1<- varargin[[1]]
+ if(!is.matrix(PL1)){
+ Tmp<- matrix(PL1);
+ PL1<- t(Tmp)
+ }
+ if(Nrow(PL1)==1) Flg=0
+ else Flg=1
+ Eps<- 10.0^(-6)
+ PL<- varargin[[2]]
+ Ans<- list(PL1[1,],1,PL[1,],1,Norm(PL1[1,]-PL[1,]))
+ for(N in Looprange(1,Nrow(PL1))){
+ PA<- PL1[N,]
+ Pm<- PL[1,]
+ Im<- 1
+ Sm<- Norm(Pm-PA)
+ for(I in Looprange(1,Nrow(PL)-1)){
+ A1<- PL[I,1]; A2<-PL[I,2]
+ B1<- PL[I+1,1]; B2<-PL[I+1,2]
+ V1<- B1-A1; V2<-B2-A2
+ X1<- PA[1]; X2<-PA[2]
+ Tmp<-V2^2+V1^2
+ if(abs(Tmp)<Eps) next
+ T<- (-A2*V2-V1*A1+V1*X1+X2*V2)/Tmp
+ if(T< -Eps){
+ P<- c(A1,A2)
+ }else{
+ if(T>1+Eps){
+ P<- c(B1,B2)
+ }else{
+ P<- c(A1+T*V1,A2+T*V2)
+ }
+ }
+ S<- Norm(P-PA)
+ if(S<Sm-Eps){
+ Tmp<- Paramoncurve(P,I,PL)
+ Pm<- P; Im<- Tmp; Sm<- S
+ }
+ }
+ if(Sm<Op(5,Ans)) Ans<- list(PA,N,Pm,Im,Sm)
+ if(Flg==0){
+ Ans<- Ans[3:5]
+ }
+ }
+ return(Ans)
+}
+
+#########################################
+
+Newlength<- function()
+{
+ Tmp1<- "\\newlength{\\Width}%\n"
+ Tmp2<- "\\newlength{\\Height}%\n"
+ Tmp3<- "\\newlength{\\Depth}%\n"
+ cat(Tmp1,file="",append=TRUE);
+ cat(Tmp2,file="",append=TRUE);
+ cat(Tmp3,file="",append=TRUE);
+}
+
+#########################################
+
+Numptcrv<-function(Fig)
+{
+ return(Nrow(Fig))
+}
+
+# 2018.01.29
+Length<- function(Data){
+ if(is.matrix(Data)){return(nrow(Data))}
+ if(is.character(Data)){return(nchar(Data))}
+ return(length(Data))
+}
+
+#########################################
+
+Op<-function(N,Data)
+{
+ C <- c()
+ if(length(Data)==0) return(C)
+ if(mode(Data)=="list"){
+ if(class(Data)=="data.frame"){ # 10.02.23
+ C<- Data[N,]
+ }
+ else{
+ C<- Data[[N]]
+ }
+ return(C)
+ }
+ if(mode(Data)=="character"){
+ if(length(Data)==1){
+ C<- substring(Data,N,N)
+ }
+ else{
+ C<- Data[N]
+ }
+ return(C)
+ }
+ if(mode(Data)=="numeric"){
+ if(class(Data)=="matrix"){
+ Din<- Dataindex(Data)
+ if(nrow(Din)==1){
+ C<- Data[N,]
+ }
+ else{
+ Tmp1<- Din[N,1]
+ Tmp2<- Din[N,2]
+ C<- Data[Tmp1:Tmp2,]
+ }
+ }
+ else{
+ C=Data[N]
+ }
+ }
+ return(C)
+}
+
+#########################################
+# 2013.05.20 Changed ( Creator recorded)
+# 2013.12.18 Beginpicture inclued
+
+Openfile<-function(...)
+{
+ varargin<- list(...)
+ File<- varargin[[1]]
+ Bflg<- 0
+ Wfile<<- File
+ Creator<- ""
+ Cflg<- 0
+ Nargs<- length(varargin)
+ for(N in Looprange(2,Nargs)){
+ Tmp<- varargin[[N]]
+ Tmp1<- strsplit(Tmp,"=",fixed=TRUE)
+ Tmp1<- Tmp1[[1]]
+ if(length(Tmp1)>1){
+ Creator<- Tmp1[2]
+ Cflg<- 1
+ }
+ else{
+ Unitstr<- Tmp
+ Bflg<- 1
+ }
+ }
+ Recentf<- ""
+ Fv<- list.files()
+ Nv<- grep("\\.r$", Fv)
+ Rfiles<- Fv[Nv]
+ StrW<- paste("%%% ",File,sep="") #17.10.28
+ StrC<- paste("%%% Generator=",Creator,sep="")
+ if(Cflg==0){
+ }
+ cat(StrW,"\n",file=Wfile)
+ cat(StrC,"\n",file=Wfile,append=TRUE)
+ if(Bflg==1){
+ Beginpicture(Unitstr)
+ }
+}
+
+#########################################
+
+Openpar<- function(...)
+{
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ Tmp<- varargin[[1]]
+ Tmp1<- substr(Tmp,1,1)
+ if(Tmp1=="\\"){
+ Namestr<- Tmp
+ N<- 2
+ }
+ else{
+ Namestr<- "\\tmp"
+ N<- 1
+ }
+ Habastr<- varargin[[N]]
+ if(Nargs>N){
+ Posstr<- paste("[",varargin[[N+1]],"]",sep="")
+ }
+ else{
+ Posstr<- "[c]"
+ }
+ Openphr(Namestr)
+ S<- paste("\\begin{minipage}",Posstr,"{",Habastr,"}%\n",sep="")
+ cat(S,file=Wfile,append=TRUE)
+}
+
+###################################
+
+Openphr<- function(Str)
+{
+ S<- paste("\\def",Str,"{%\n",sep="")
+ cat(S,file=Wfile,append=TRUE)
+}
+
+#####################################
+
+Ovalbox<- function(...)
+{
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ Pos<- varargin[[1]]
+ Dr<- varargin[[2]]
+ StrV<- varargin[[3]]
+ R<- 0.2
+ NDflg<- 0
+ for (I in Looprange(4,Nargs)){
+ Tmp<- varargin[[I]]
+ if(mode(Tmp)=="numeric"){
+ R<- Tmp
+ }
+ else{
+ if(substr(Tmp,1,1)=="-"){
+ NDflg<- 1
+ Tmp1<- substr(Tmp,2,nchar(Tmp))
+ Cmdstr<- chartr("*","G",Tmp1)
+ }
+ }
+ }
+ Xr<- c(XMIN,XMAX)
+ Yr<- c(YMIN,YMAX)
+ Uv<- 0.6; Uh<- 0.8
+ N<- nchar(StrV)
+ W<- Uh;H<- Uv*N
+ Setwindow(c(-W/2,W/2),c(-H,0))
+ G<- Ovaldata(c(0,-H/2),W/2,H/2,R)
+ Openphr("\\ketpictmp")
+ Beginpicture("1cm")
+ if(NDflg==0){
+ Drwline(G)
+ }
+ else{
+ eval(parse(text=Cmdstr))
+ }
+ for (I in Looprange(1,N)){
+ Letter(c(0,Uv/2-Uv*I),"c",Op(I,StrV))
+ }
+ Endpicture(0)
+ Closephr()
+ Setwindow(Xr,Yr)
+ Letter(Pos,Dr,"\\ketpictmp")
+}
+
+##########################################
+
+Ovaldata<- function(...) #17.09.11
+{
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ if(Nargs==1){
+ Eps<- 1.0*10^(-4)
+ C<- c((XMIN+XMAX)/2,(YMIN+YMAX)/2)
+ Dx<- XMAX-C(1)-Eps
+ Dy<- YMAX-C(2)-Eps
+ N<- 1
+ }
+ else{
+ C<- varargin[[1]]
+ Dx<- varargin[[2]]
+ Dy<- varargin[[3]]
+ N<- 4
+ }
+ Rc<- 0.2
+ if(N<=Nargs){ #15.11.15
+ Rc<- varargin[[N]]*Rc #15.11.15
+ }
+ Out<- c()
+ P<- C+c(Dx-Rc,Dy-Rc)
+ Tmp1<- Circledata(c(P,Rc),"R=c(0,pi/2)","N=10") #17.11.29
+ Tmp2<- Listplot(C+c(Dx-Rc,Dy),C+c(0,Dy))
+ Tmp3<- Listplot(C+c(Dx,0),C+c(Dx,Dy-Rc))
+ G<- Joincrvs(Tmp3,Tmp1,Tmp2)
+ Tmp<- Reflectdata(G,c(C,C+c(0,1)))
+ G<- Joincrvs(G,Tmp)
+ Tmp<- Reflectdata(G,c(C,C+c(1,0)))
+ Out<- Joincrvs(G,Tmp)
+}
+
+#########################################
+
+Paramark<- function(...)
+{
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ PA<- varargin[[1]]
+ PB<- varargin[[2]]
+ PC<- varargin[[3]]
+ R<- 0.5
+ if(Nargs>=4){
+ R<- varargin[[4]]*R
+ }
+ U<- R*(PA-PB)/Norm(PA-PB)
+ V<- R*(PC-PB)/Norm(PC-PB)
+ if(Crossprod(PA-PB,PC-PB)!=0){
+ P<- Listplot(c(PB+U,PB+U+V,PB+V))
+ }
+ else{
+ P<- c()
+ }
+}
+
+###########################################
+
+Paramoncurve<-function(...){
+ varargin<-list(...)
+ Nargs<-length(varargin)
+ Eps<-10^(-8)
+ P<-varargin[[1]]
+ Gdata<-varargin[[Nargs]]
+ if(Nrow(P)>1){
+ Tmp<-P; P<-Gdata; Gdata<-Tmp
+ }
+ if(Nargs==2){
+ Tmp<-Nearestpt(P,Gdata)
+ Out<-Tmp[[2]]
+ return(Out)
+ }
+ N<-varargin[[2]]
+ PtL<-Gdata
+ N=min(N,Length(PtL)-1) #18.02.11from
+ Pa<-Ptcrv(N,PtL)
+ Pb<-Ptcrv(N+1,PtL)
+ V<-Pb-Pa
+ W<-P-Pa
+ D2<-Norm(V)^2
+ if(D2<Eps) return(0)
+ S<-Dotprod(V,W)/D2
+ S<-min(max(S,0),1)
+ Out=N+S #18.02.11upto
+ return(Out)
+}
+
+##############################################
+
+Paramplot<- function(...)
+{
+ varargin<- list(...)
+ Eps<- 10^(-5)
+ Nargs<- length(varargin)
+ Fnflg<- 0
+ Fnstr<- varargin[[1]]; Is=2
+ Rgstr<- varargin[[Is]]; Is<- Is+1
+ Range<- c(0,2*pi)
+ N<- 50 # Numpoints
+ E<-c() # Exclusions
+ D<- Inf # Discont
+ for (I in Looprange(Is,Nargs))
+ {
+ Tmp<- varargin[[I]]
+ Tmp<- strsplit(Tmp,"=")
+ K<- Tmp[[1]]
+ Tmp<- K[1]
+ Lhs<- substring(Tmp,1,1)
+ Tmp1<- K[2]
+ Str<-paste(Lhs,"=",Tmp1,sep="")
+ eval(parse(text=Str))
+ }
+ Tmp<- strsplit(Rgstr,"=")
+ K<-Tmp[[1]]
+ if(length(K)>1)
+ {
+ Vname<- K[1]
+ Tmp1<- K[2]
+ Rng<- eval(parse(text=Tmp1))
+ }
+ else
+ {
+ Vname<- Rgstr
+ Rng<- c(0,2*pi)
+ }
+ T1<- Rng[1]; T2<- Rng[2]
+ Dt<- (T2-T1)/N #17.09.22
+ if(Fnflg==0)
+ {
+ Str<- gsub(Vname,"t",Fnstr)
+ }
+ if(abs(Dt)<Eps){ # 16.12.13
+ t=T1
+ P=eval(parse(text=Str))
+ return(P)
+ }
+ P<-c()
+ if(length(E)>0)
+ {
+ E<-sort(E)
+ E<E[length(E):1]
+ }
+ E<- c(E, Inf)
+ Tmp<- sort(E)
+ E<- E[length(Tmp):1]
+ Ke<- 1
+# for (t in seq(T1, T2+Eps, by=Dt)){#18.02.05
+ for(jj in 1:(N+1)){
+ t=T1+(jj-1)*Dt
+ Pa<- c()
+ if(t-E[Ke]< Eps)
+ {
+ if(Fnflg==0)
+ {
+ Tmp<-eval(parse(text=Str))
+ Pa<- Tmp
+ }
+ else
+ {
+ }
+ }
+ if(abs(t-E[Ke])<=Eps)
+ {
+ if(Nrow(P)>0 && Op(Nrow(P),P)!=c(Inf,Inf))
+ {
+ Pa<- c(Inf,Inf)
+ }
+ }
+ if(t-E[Ke]>Eps)
+ {
+ if(Fnflg==0)
+ {
+ Tmp<- eval(parse(text=Str))
+ Pa<- Tmp
+ }
+ else
+ {
+ }
+ Ke<-Ke+1
+ }
+ if(length(Pa)>0)
+ {
+ if(Pa[1]==Inf)
+ {
+ Tmp<-Appendrow(P,Pa)
+ P<-Tmp
+ }
+ else
+ {
+ if(Nrow(P)==0)
+ {
+ Tmp<- Appendrow(P,Pa)
+ P<-Tmp
+ }
+ else
+ {
+ Tmp<- Op(Nrow(P),P)
+ if(Tmp[1]==Inf)
+ {
+ Tmp<- Appendrow(P,Pa)
+ P<- Tmp
+ }
+ else
+ {
+ if(Norm(Tmp-Pa)<D)
+ {
+ Tmp<-Appendrow(P,Pa)
+ P<-Tmp
+ }
+ else
+ {
+ Tmp<- Appendrow(P,c(Inf,Inf),Pa)
+ P<- Tmp
+ }
+ }
+ }
+ }
+ }
+ }
+ Tmp<- Nrow(P)
+ Tmp1<- Op(Tmp,P)
+ if(Tmp1[1]==Inf)
+ {
+ P<- P[1:(Tmp-1),]
+ }
+ return(P)
+}
+
+#####################################
+
+Partcrv<- function(A,B,PkL)
+{
+ Eps<- 10.0^(-3)
+ if(mode(A)=="numeric" && length(A)==1){
+ if(A>B+Eps){
+ Npt<- Numptcrv(PkL)
+ Out1<- Partcrv(A,Npt,PkL)
+ Out2<- Partcrv(1,B,PkL)
+ Tmp<- Ptstart(PkL)-Ptend(PkL)
+ if(Norm(Tmp)<Eps){
+ Ans<- Joincrvs(Out1,Out2)
+ }
+ else{
+ Ans<- list(Out1,Out2)
+ }
+ return(Ans)
+ }
+ Is<- ceiling(A)
+ Ie<- floor(B)
+ PL<- c()
+ if(A<Is-Eps){
+ P<- (Is-A)*PkL[Is-1,]+(1-Is+A)*PkL[Is,]
+ PL<- c(P)
+ }
+ PL<- Appendrow(PL, PkL[Looprange(Is,Ie),])
+ if(B>Ie+Eps){
+ P<- (1-B+Ie)*PkL[Ie,]+(B-Ie)*PkL[Ie+1,]
+ PL<- Appendrow(PL,P)
+ }
+ Ans<- PL
+ return(Ans)
+ }
+ Tmp<- Nearestpt(A,PkL)
+ Ta<- Op(2,Tmp)
+ Tmp<- Nearestpt(B,PkL)
+ Tb<- Op(2,Tmp)
+ Ans<- Partcrv(Ta,Tb,PkL)
+}
+
+##########################################
+# 13.05.03
+
+Partframe<- function(Tb,St,Ed)
+{
+ G<- Dividetable(Tb)
+ Gw<- G[[1]]
+ Gt<- G[[2]]
+ Gy<- G[[3]]
+ Gwt<- Tb[[4]]
+ Gwy<- Tb[[5]]
+ Gat<- c(list(Gwt[[1]]),Gt,list(Gwt[[2]]))
+ Gay<- c(list(Gwy[[1]]),Gy,list(Gwy[[2]]))
+ Tmp1<- Ptstart(Gat[[St[1]]])
+ Tmp2<- Ptstart(Gay[[St[2]]])
+ Ps<- c(Tmp1[1],Tmp2[2])
+ Tmp1<- Ptstart(Gat[[Ed[1]]])
+ Tmp2<- Ptstart(Gay[[Ed[2]]])
+ Pe<- c(Tmp1[1],Tmp2[2])
+ Pars<- Paramoncurve(Ps,Gw)
+ Pare<- Paramoncurve(Pe,Gw)
+ if(Pars<Pare){
+ Out<- Partcrv(Pars,Pare,Gw)
+ }
+ else{
+ Tmp1<- Partcrv(Pars,Numptcrv(Gw),Gw)
+ Tmp2<- Partcrv(1,Pare,Gw)
+ Out<- Joincrvs(Tmp1,Tmp2)
+ }
+return(Out)
+}
+
+
+##########################################
+# 10.12.04
+
+Plotdata<- function(...)
+{
+ varargin<- list(...)
+ Eps<- 10^(-5)
+ Fnstr<- varargin[[1]]; Is<- 2
+ Fnflg<- 0
+ Rgstr<- varargin[[Is]]; Is<- Is+1
+ Tmp<- strsplit(Rgstr,"=")
+ K<-Tmp[[1]]
+ if(length(K)>1){
+ Vname<- K[1]
+ Tmp1<- K[2]
+ Rng<- eval(parse(text=Tmp1))
+ }
+ else{
+ Vname<- Rgstr
+ Rng<- c(XMIN,XMAX)
+ }
+ N<- 50 # Numpoints
+ E<-c() # Exclusions
+ Exfun<- "" # Exclusion function
+ D<- Inf # Discont
+ for (I in Looprange(Is,length(varargin))){
+ Tmp<- varargin[[I]]
+ Lhs<- substring(Tmp,1,1)
+ Tmp<- strsplit(Tmp,"=")
+ K<- Tmp[[1]]
+ Tmp1<- K[2]
+ Tmp2<- grep(Vname,Tmp1,fixed=TRUE) ## 10.12.04
+ if(length(Tmp2)==0){
+ Str<-paste(Lhs,"=",Tmp1,sep="")
+ eval(parse(text=Str))
+ }
+ else{
+ Exfun<-Tmp1
+ }
+ }
+ X1<- Rng[1]; X2<- Rng[2]
+ dx<- (X2-X1)/N # 17.09.22
+ if(Fnflg==0){
+ Str<- gsub(Vname,"x",Fnstr,fixed=TRUE)
+ }
+ if(abs(dx)<Eps){ # Scilab 16.12.13
+ x=X1
+ P=c(X1,eval(parse(text=Str)))
+ return(P)
+ }
+ Exfun<- gsub(Vname,"x",Exfun,fixed=TRUE)
+ P<-c()
+ if(length(E)>0){
+ E<-sort(E)
+ E<E[length(E):1]
+ }
+ E<- c(E, Inf)
+ Tmp<- sort(E)
+ E<- E[length(Tmp):1]
+ Ke<- 1
+ for (x in seq(X1,X2,by=dx)){
+ if(nchar(Exfun)>0){
+ Tmp<-eval(parse(text=Exfun))
+ if(abs(Tmp)<Eps){
+ P<- Appendrow(P,c(Inf,inf))
+ next
+ }
+ }
+ Pa<- c()
+ if(x-E[Ke]< -Eps){ ## 10.12.04
+ Tmp<-eval(parse(text=Str))
+ Pa<- c(x,Tmp)
+ }
+ if(abs(x-E[Ke])<=Eps){
+ if(Nrow(P)>0 && P[Nrow(P),]!=c(Inf,Inf)){
+ Pa<- c(Inf,Inf)
+ }
+ }
+ if(x-E[Ke]>Eps){
+ Tmp<- eval(parse(text=Str))
+ Pa<- c(x,Tmp)
+ Ke<-Ke+1
+ }
+ if(length(Pa)>0){
+ if(Pa[1]==Inf){
+ Tmp<-Appendrow(P,Pa)
+ P<-Tmp
+ }
+ else{
+ if(Nrow(P)==0){
+ Tmp<- Appendrow(P,Pa)
+ P<-Tmp
+ }
+ else{
+ Tmp<- P[Nrow(P),]
+ if(Tmp[1]==Inf){
+ Tmp<- Appendrow(P,Pa)
+ P<- Tmp
+ }
+ else{
+ if(Norm(Tmp-Pa)<D){
+ Tmp<-Appendrow(P,Pa)
+ P<-Tmp
+ }
+ else{
+ Tmp<- Appendrow(P,c(Inf,Inf),Pa)
+ P<- Tmp
+ }
+ }
+ }
+ }
+ }
+ }
+ Tmp<- Nrow(P)
+ Tmp1<-P[Tmp,]
+ if(Tmp1[1]==Inf)
+ {
+ P<- P[1:(Tmp-1),]
+ }
+ return(P)
+}
+
+######################################
+
+Pointoncurve<-function(...)
+{
+ varargin<-list(...)
+ Eps<-10^(-4)
+ T<-varargin[[1]]
+ Gdata<-varargin[[2]]
+ if(Nrow(T)>1)
+ {
+ Tmp<-T; T<-Gdata; Gdata<-Tmp
+ }
+ PtL<-Gdata
+ N<-trunc(T+Eps);
+ S<-max(T-N,0);
+ if(N==Nrow(PtL))
+ {
+ Out<-PtL[N,]
+ }
+ else
+ {
+ Pa<-PtL[N,]
+ Pb<-PtL[N+1,]
+ Out<-(1-S)*Pa+S*Pb
+ }
+ return(Out)
+}
+
+##############################################
+# 10.11.20
+# 13.05.03 Inf
+
+Pointdata<-function(...)
+{
+ varargin<-list(...)
+ Nargs<-length(varargin)
+ PL<- list()
+ for (I in Looprange(1,Nargs)){ # 10.11.20
+ DL<-varargin[[I]]
+ DL<- Flattenlist(DL) # 10.11.20 from here
+ for (J in Looprange(1,length(DL))){
+ Dt<- DL[[J]]
+ if(is.matrix(Dt)|| is.data.frame(Dt)){
+ for (K in 1:nrow(Dt)){
+ Tmp<- as.numeric(Dt[K,])
+ if(Tmp[1]<Inf){
+ PL<- c(PL,list(Tmp))
+ }
+ }
+ }
+ else{
+ PL<- c(PL,list(Dt))
+ }
+ }
+ } # to here
+ if(length(PL)==1)
+ {
+ PL<-PL[[1]]
+ }
+ return(PL)
+}
+
+##############################################
+
+Prime<- function(...)
+{
+ varargin<- list(...)
+ if(length(varargin)==0){
+ Out="'"
+ }
+ else{
+ Out<- paste(varargin[[1]],"'",sep="")
+ }
+ return(Out)
+}
+
+############################################
+# 17.09.29
+
+Ptcrv<-function(N,Fig)
+{
+ if(is.matrix(Fig)){
+ return(Fig[N,])
+ }
+ else{
+ return(Fig)
+ }
+}
+
+#########################################
+
+Ptend<-function(Fig)
+{
+ if(Length(Fig)>0){ #18.02.09
+ return(Op(Length(Fig),Fig))
+ }else{
+ return(c())
+ }
+}
+
+#########################################
+
+Ptne<-function(...)
+{
+ varargin<- list(...)
+ if(length(varargin)==0){
+ Out<- c(XMAX,YMAX)
+ }
+ else{
+ G<- varargin[[1]]
+ XM<- max(G[,1])
+ YM<- max(G[,2])
+ Out<- c(XM,YM)
+ }
+ return(Out)
+}
+
+#########################################
+
+Ptnw<-function(...)
+{
+ varargin<- list(...)
+ if(length(varargin)==0){
+ Out<- c(XMIN,YMAX)
+ }
+ else{
+ G<- varargin[[1]]
+ Xm<- min(G[,1])
+ YM<- max(G[,2])
+ Out<- c(Xm,YM)
+ }
+ return(Out)
+}
+
+#########################################
+
+Ptse<-function(...)
+{
+ varargin<- list(...)
+ if(length(varargin)==0){
+ Out<- c(XMAX,YMIN)
+ }
+ else{
+ G<- varargin[[1]]
+ XM<- max(G[,1])
+ Ym<- min(G[,2])
+ Out<- c(XM,Ym)
+ }
+ return(Out)
+}
+
+#############################################
+
+Ptstart<-function(Fig)
+{
+ if(Length(Fig)>0){ #18.02.09
+ return(Op(1,Fig))
+ }else{
+ return(c())
+ }
+}
+
+#########################################
+
+Ptsw<-function(...)
+{
+ varargin<- list(...)
+ if(length(varargin)==0){
+ Out<- c(XMIN,YMAX)
+ }
+ else{
+ G<- varargin[[1]]
+ Xm<- min(G[,1])
+ Ym<- min(G[,2])
+ Out<- c(Xm,Ym)
+ }
+ return(Out)
+}
+
+##############################################
+
+Putcell<- function(...)
+{
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ TbL<- varargin[[1]]
+ Str<- varargin[[Nargs]]
+ if(mode(Str)=="numeric"){
+ Str<- as.character(Str)
+ }
+ Pos<- varargin[[Nargs-1]]
+ Nrg<- varargin[[2]]
+ if(mode(Nrg)=="character"){
+ if(Nargs==4){
+ Cell<- Findcell(TbL,Nrg)
+ }
+ else{
+ Mrg<- varargin[[3]]
+ Cell<- Findcell(TbL,Nrg,Mrg)
+ }
+ }
+ else{
+ Mrg<- varargin[[3]]
+ Cell<- Findcell(TbL,Nrg,Mrg)
+ }
+ Pt<- Cell[[1]]; Dr<- "c"
+ Posh<- substr(Pos,1,1)
+ Post<- substr(Pos,2,nchar(Pos))
+ if(toupper(Posh)=="R"){
+ Pt<- Pt+c(Cell[[2]],0)
+ if(nchar(Post)==0){
+ Dr<- "w1"
+ }
+ else{
+ Dr<- paste("w",Post,sep="")
+ }
+ }
+ if(toupper(Posh)=="L"){
+ Pt=Pt-c(Cell[[2]],0)
+ if(nchar(Post)==0){
+ Dr<- "e1"
+ }
+ else{
+ Dr<- paste("e",Post,sep="")
+ }
+ }
+ if(toupper(Posh)=="U"){
+ Pt<- Pt+c(0,Cell[[3]])
+ if(nchar(Post)==0){
+ Dr<- "s1"
+ }
+ else{
+ Dr<- paste("s",Post,sep="")
+ }
+ }
+ if(toupper(Posh)=="D"){
+ Pt<- Pt-c(0,Cell[[3]])
+ if(nchar(Post)==0){
+ Dr<- "n1"
+ }
+ else{
+ Dr<- paste("n",Post,sep="")
+ }
+ }
+ if(toupper(Posh)=="B"){
+ Pt<- Pt-c(0,Cell[[3]])
+ if(nchar(Post)==0){
+ Dr<- "n1"
+ }
+ else{
+ Dr<- paste("n",Post,sep="")
+ }
+ Str<- paste("$\\mathstrut$",Str,sep="")
+ }
+ Letter(Pt,Dr,Str)
+}
+
+#############################################
+
+PutcoL<- function(...)
+{
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ TbL<- varargin[[1]]
+ if(mode(TbL)!="list"){
+ return("Tabledata missing")
+ }
+ Ag<- varargin[[2]]
+ if(mode(Ag)=="numeric"){
+ CoL<- Ag
+ }
+ else{
+ Alpha<- "-ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+ Clm<- c()
+ for (I in Looprange(1,nchar(Ag))){
+ C<- substr(Ag,I,I)
+ C<- toupper(C)
+ Tmp<- strsplit(Alpha,C)
+ Tmp<- Tmp[[1]]
+ if(length(Tmp)>1){
+ Tmp1<- nchar(Tmp[1])
+ Clm<- c(Clm,Tmp1)
+ }
+ }
+ Nrg<- 0
+ for (I in seq(length(Clm),1,by=-1)){
+ Tmp<- Clm[I]
+ Tmp1<- length(Clm)-I
+ Nrg<- Nrg+Tmp*26^Tmp1
+ }
+ CoL<- Nrg
+ }
+ Nc<- length(TbL[[3]])+1
+ K<- 1
+ Dpos<- varargin[[3]]
+ for (I in Looprange(4,Nargs)){
+ if(I-3>Nc){
+ break
+ }
+ Dt<- varargin[[I]]
+ if(mode(Dt)!="list"){
+ Putcell(TbL,CoL,K,Dpos,Dt) # 2011.03.02
+ K<- K+1
+ }
+ else{
+ N<- length(Dt)
+ Str<- Dt[[N]]
+ Rrng<- c(K,K+1)
+ Pos<- Dpos
+ for (J in Looprange(1,N-1)){
+ Tmp<- Dt[[J]]
+ if(mode(Tmp)=="numeric"){
+ Rrng<- c(K,K+Tmp)
+ }
+ if(mode(Tmp)=="character"){
+ Pos<- Tmp
+ }
+ }
+ Putcell(TbL,CoL,Rrng,Pos,Str)
+ K<- Crng[2]
+ }
+ }
+}
+
+Putcol<- function(...)
+{
+ PutcoL(...)
+}
+
+PutcoLexpr<- function(...)
+{
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ TbL<- varargin[[1]]
+ if(mode(TbL)!="list"){
+ return("Tabledata missing")
+ }
+ Ag<- varargin[[2]]
+ if(mode(Ag)=="numeric"){
+ CoL<- Ag
+ }
+ else{
+ Alpha<- "-ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+ Clm<- c()
+ for (I in Looprange(1,nchar(Ag))){
+ C<- substr(Ag,I,I)
+ C<- toupper(C)
+ Tmp<- strsplit(Alpha,C)
+ Tmp<- Tmp[[1]]
+ if(length(Tmp)>1){
+ Tmp1<- nchar(Tmp[1])
+ Clm<- c(Clm,Tmp1)
+ }
+ }
+ Nrg<- 0
+ for (I in seq(length(Clm),1,by=-1)){
+ Tmp<- Clm[I]
+ Tmp1<- length(Clm)-I
+ Nrg<- Nrg+Tmp*26^Tmp1
+ }
+ CoL<- Nrg
+ }
+ Nc<- length(TbL[[3]])+1
+ K<- 1
+ Dpos<- varargin[[3]]
+ for (I in Looprange(4,Nargs)){
+ if(I-3>Nc){
+ break
+ }
+ Dt<- varargin[[I]]
+ if(mode(Dt)!="list"){
+ Dt<- paste("$",Dt,"$",sep="")
+ Putcell(TbL,CoL,K,Dpos,Dt) # 2011.03.02
+ K<- K+1
+ }
+ else{
+ N<- length(Dt)
+ Str<- paste("$",Dt[[N]],"$",sep="")
+ Rrng<- c(K,K+1)
+ Pos<- Dpos
+ for (J in Looprange(1,N-1)){
+ Tmp<- Dt[[J]]
+ if(mode(Tmp)=="numeric"){
+ Rrng<- c(K,K+Tmp)
+ }
+ if(mode(Tmp)=="character"){
+ Pos<- Tmp
+ }
+ }
+ Putcell(TbL,CoL,Rrng,Pos,Str)
+ K<- Crng[2]
+ }
+ }
+}
+
+Putcolexpr<- function(...)
+{
+ PutcoLexpr(...)
+}
+
+#####################################################
+
+PutcoLstr<- function(...)
+{
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ Tb<- varargin[[1]]
+ Nr<- varargin[[2]]
+ Pos<- varargin[[3]]
+ Str<- varargin[[4]]
+ Sep<- ""
+ if(Nargs>4){
+ Sep<- varargin[[5]]
+ }
+ if(nchar(Sep)==0){
+ for (I in Looprange(1,nchar(Str))){
+ Tmp<- substr(Str,I,I)
+ Putcell(Tb,Nr,I,Pos,Tmp)
+ }
+ }
+ else{
+ Ltr<- ""
+ K<- 1
+ for (I in Looprange(1,length(Str))){
+ Tmp<- substr(Str,I,I)
+ if(Tmp==Sep){
+ Putcell(Tb,Nr,K,Pos,Ltr)
+ K<- K+1
+ Ltr<- ""
+ }
+ else{
+ Ltr<- paste(Ltr,Tmp,sep="")
+ }
+ }
+ if(nchar(Ltr)>0){
+ Putcell(Tb,Nr,K,Pos,Ltr)
+ }
+ }
+}
+
+#############################################
+
+Putrow<- function(...)
+{
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ TbL<- varargin[[1]]
+ if(mode(TbL)!="list"){
+ return("Tabledata missing")
+ }
+ Row<- varargin[[2]]
+ Nr<- length(TbL[[2]])+1
+ K<- 1
+ Dpos<- varargin[[3]]
+ for (I in Looprange(4,Nargs)){
+ if(I-3>Nr){
+ break;
+ }
+ Dt<- varargin[[I]]
+ if(mode(Dt)!="list"){
+ Putcell(TbL,K,Row,Dpos,Dt) # 110308
+ K<- K+1
+ }
+ else{
+ N<- length(Dt)
+ Str<- Dt[[N]]
+ Crng<- c(K,K+1)
+ Pos<- Dpos
+ for (J in Looprange(1,N-1)){
+ Tmp<- Dt[[J]]
+ if(mode(Tmp)=="numeric"){
+ Crng<- c(K,K+Tmp)
+ }
+ if(mode(Tmp)=="character"){
+ Pos<- Tmp
+ }
+ }
+ Putcell(TbL,Crng,Row,Pos,Str)
+ K<- Crng[2]
+ }
+ }
+}
+
+Putrowexpr<- function(...)
+{
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ TbL<- varargin[[1]]
+ if(mode(TbL)!="list"){
+ return("Tabledata missing")
+ }
+ Row<- varargin[[2]]
+ Nr<- length(TbL[[2]])+1
+ K<- 1
+ Dpos<- varargin[[3]]
+ for (I in Looprange(4,Nargs)){
+ if(I-3>Nr){
+ break;
+ }
+ Dt<- varargin[[I]]
+ if(mode(Dt)!="list"){
+ Dt<- paste("$",Dt,"$",sep="")
+ Putcell(TbL,K,Row,Dpos,Dt) #110308
+ K<- K+1
+ }
+ else{
+ N<- length(Dt)
+ Str<- paste("$",Dt[[N]],"$",sep="")
+ Crng<- c(K,K+1)
+ Pos<- Dpos
+ for (J in Looprange(1,N-1)){
+ Tmp<- Dt[[J]]
+ if(mode(Tmp)=="numeric"){
+ Crng<- c(K,K+Tmp)
+ }
+ if(mode(Tmp)=="character"){
+ Pos<- Tmp
+ }
+ }
+ Putcell(TbL,Crng,Row,Pos,Str)
+ K<- Crng[2]
+ }
+ }
+}
+
+####################################################
+
+Putrowstr<- function(...)
+{
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ Tb<- varargin[[1]]
+ Nr<- varargin[[2]]
+ Pos<- varargin[[3]]
+ Str<- varargin[[4]]
+ Sep<- ""
+ if(Nargs>4){
+ Sep<- varargin[[5]]
+ }
+ if(nchar(Sep)==0){
+ for (I in Looprange(1,nchar(Str))){
+ Tmp<- substr(Str,I,I)
+ Putcell(Tb,I,Nr,Pos,Tmp)
+ }
+ }
+ else{
+ Ltr<- ""
+ K<- 1
+ for (I in Looprange(1,length(Str))){
+ Tmp<- substr(Str,I,I)
+ if(Tmp==Sep){
+ Putcell(Tb,K,Nr,Pos,Ltr)
+ K<- K+1
+ Ltr<- ""
+ }
+ else{
+ Ltr<- paste(Ltr,Tmp,sep="")
+ }
+ }
+ if(nchar(Ltr)>0){
+ Putcell(Tb,K,Nr,Pos,Ltr)
+ }
+ }
+}
+
+############################################
+# 11.05.28
+
+Ratiocmyk<- function(Color)
+{
+ if(is.numeric(Color)){
+ return(Color)
+ }
+ R<-
+ switch(Color,
+ greenyellow=c(0.15,0,0.69,0),
+ yellow=c(0,0,1,0),
+ goldenrod=c(0,0.1,0.84,0),
+ dandelion=c(0,0.29,0.84,0),
+ apricot=c(0,0.32,0.52,0),
+ peach=c(0,0.5,0.7,0),
+ melon=c(0,0.46,0.5,0),
+ yelloworange=c(0,0.42,1,0),
+ orange=c(0,0.61,0.87,0),
+ burntorange=c(0,0.51,1,0),
+ bittersweet=c(0,0.75,1,0.24),
+ redorange=c(0,0.77,0.87,0),
+ mahogany=c(0,0.85,0.87,0.35),
+ maroon=c(0,0.87,0.68,0.32),
+ brickred=c(0,0.89,0.94,0.28),
+ red=c(0,1,1,0),
+ orangered=c(0,1,0.5,0),
+ rubinered=c(0,1,0.13,0),
+ wildstrawberry=c(0,0.96,0.39,0),
+ salmon=c(0,0.53,0.38,0),
+ carnationpink=c(0,0.63,0,0),
+ magenta=c(0,1,0,0),
+ violetred=c(0,0.81,0,0),
+ rhodamine=c(0,0.82,0,0),
+ mulberry=c(0.34,0.9,0,0.02),
+ redviolet=c(0.07,0.9,0,0.34),
+ fuchsia=c(0.47,0.91,0,0.08),
+ lavender=c(0,0.48,0,0),
+ thistle=c(0.12,0.59,0,0),
+ orchid=c(0.32,0.64,0,0),
+ darkorchid=c(0.4,0.8,0.2,0),
+ purple=c(0.45,0.86,0,0),
+ plum=c(0.5,1,0,0),
+ violet=c(0.79,0.88,0,0),
+ royalpurple=c(0.75,0.9,0,0),
+ blueviolet=c(0.86,0.91,0,0.04),
+ periwinkle=c(0.57,0.55,0,0),
+ cadetblue=c(0.62,0.57,0.23,0),
+ cornflowerblue=c(0.65,0.13,0,0),
+ midnightblue=c(0.98,0.13,0,0.43),
+ navyblue=c(0.94,0.54,0,0),
+ royalblue=c(1,0.5,0,0),
+ blue=c(1,1,0,0),
+ cerulean=c(0.94,0.11,0,0),
+ cyan=c(1,0,0,0),
+ processblue=c(0.96,0,0,0),
+ skyblue=c(0.62,0,0.12,0),
+ turquoise=c(0.85,0,0.2,0),
+ tealblue=c(0.86,0,0.34,0.02),
+ aquamarine=c(0.82,0,0.3,0),
+ bluegreen=c(0.85,0,0.33,0),
+ emerald=c(1,0,0.5,0),
+ junglegreen=c(0.99,0,0.52,0),
+ seagreen=c(0.69,0,0.5,0),
+ green=c(1,0,1,0),
+ forestgreen=c(0.91,0,0.88,0.12),
+ pinegreen=c(0.92,0,0.59,0.25),
+ limegreen=c(0.5,0,1,0),
+ yellowgreen=c(0.44,0,0.74,0),
+ springgreen=c(0.26,0,0.76,0),
+ olivegreen=c(0.64,0,0.95,0.4),
+ rawsienna=c(0,0.72,1,0.45),
+ sepia=c(0,0.83,1,0.7),
+ brown=c(0,0.81,1,0.6),
+ tan=c(0.14,0.42,0.56,0),
+ gray=c(0,0,0,0.5),
+ black=c(0,0,0,1),
+ white=c(0,0,0,0)
+ )
+ if(length(R)<4){
+ print("No color")
+ return(c())
+ }
+ return(R)
+}
+
+############################################
+# 11.01.07
+
+Readtextdata<- function(...)
+{
+ varargin<- list(...)
+ OutL<- list()
+ Nargs<- length(varargin)
+ Fname<- varargin[[1]]
+ Tmp<- readLines(Fname,n=1)
+ if(length(grep("\t",Tmp))>0){
+ Sep<- "\t"
+ }
+ else if(length(grep(",",Tmp))>0){
+ Sep<- ","
+ }
+ else{
+ Sep<- " "
+ }
+ Hajime<- c(1,1)
+ Owari<- c(Inf,Inf)
+ C<- Inf
+ R<- Inf
+ Rna<- FALSE
+ Cna<- TRUE
+ Mat<- FALSE
+ Num<- TRUE
+ D<- -Inf
+ Flg<- 0
+ for (I in Looprange(2,Nargs)){
+ Tmp<- varargin[[I]]
+ if(mode(Tmp)=="numeric"){
+ if (Flg==0){
+ Hajime<- Tmp
+ Flg<- 1
+ }
+ else{
+ Owari<- Tmp
+ }
+ }
+ else{
+ eval(parse(text=Tmp))
+ }
+ }
+ Tmp<- Hajime+c(R-1,C-1)
+ Owari<- c(min(Owari[1],Tmp[1]),min(Owari[2],Tmp[2]))
+ if(Cna){
+ Df<- read.table(Fname,sep=Sep,header=TRUE,,stringsAsFactors=FALSE)
+ }
+ else{
+ Df<- read.table(Fname,sep=Sep,header=FALSE,,stringsAsFactors=FALSE)
+ Nv<- c(1:ncol(Df))
+ colnames(Df)<- Nv
+ }
+ if(Rna){
+ rownames(Df)<-Df[,1]
+ Hajime<- Hajime+c(0,1)
+ }
+ if(Mat){
+ M<- as.matrix(Df)
+ Tmp1<- min(Owari[1],nrow(M))
+ Tmp2<- min(Owari[2],ncol(M))
+ Out<- as.matrix(M[Hajime[1]:Tmp1,Hajime[2]:Tmp2])
+ if(Num){
+ Tmp1<- as.numeric(Out)
+ Out<- matrix(Tmp1,nrow=nrow(Out))
+ }
+ }
+ else{
+ Tmp1<- min(Owari[1],nrow(Df))
+ Tmp2<- min(Owari[2],ncol(Df))
+ Out<- Df[Hajime[1]:Tmp1,Hajime[2]:Tmp2]
+ }
+ if(D!=-Inf){ # 11.01.20 v2
+ Tmp<- ncol(Out) # 11.01.07
+ Tmp1<- rep(Inf,Tmp)
+ Out[Out[,1]<=D,]<- Tmp1 # 11.01.07
+ }
+ return(Out)
+}
+
+##################################
+
+Reflectdata<- function(...)
+{
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ Eps<- 10^(-8)
+ ML<- varargin[[1]]
+ if(Mixtype(ML)==1){
+ ML<- list(ML)
+ }
+ if(Nargs==1){
+ PtA<- c(0,0); PtB<- PtA
+ }
+ else{
+ Pts<- varargin[[2]]
+ if(length(Pts)==2){
+ PtA<- Pts; PtB<- PtA
+ }
+ else{
+ PtA<- Pts[1:2]; PtB<- Pts[3:4]
+ }
+ }
+ OutL<- list()
+ for (N in Looprange(1,length(ML))){
+ GL<- Op(N,ML)
+ Out<- c()
+ for (I in Looprange(1,Nrow(GL))){
+ if(is.matrix(GL)){ # 10.12.07
+ Tmp<- GL[I,]
+ }
+ else{
+ Tmp<- GL
+ }
+ X1<- Tmp[1]
+ Y1<- Tmp[2]
+ if(X1==Inf){
+ X2<- X1
+ Y2<- Y1
+ }
+ else{
+ if(Norm(PtA-PtB)<Eps){
+ X2<- 2*PtA[1]-X1
+ Y2<- 2*PtA[2]-Y1
+ }
+ else{
+ U<- PtB[1]-PtA[1]
+ V<- PtB[2]-PtA[2]
+ A<- PtA[1]
+ B<- PtA[2]
+ X2<- (U^2-V^2)/(U^2+V^2)*X1+2*U*V/(U^2+V^2)*Y1
+ X2<- X2-2*V*(U*B-V*A)/(U^2+V^2)
+ Y2<- 2*U*V/(U^2+V^2)*X1-(U^2-V^2)/(U^2+V^2)*Y1
+ Y2<- Y2+2*U*(U*B-V*A)/(U^2+V^2)
+ }
+ }
+ Out<- Appendrow(Out,c(X2,Y2))
+ }
+ OutL<- Mixjoin(OutL,list(Out))
+ }
+ if(length(OutL)==1){
+ OutL<- Op(1,OutL)
+ }
+ return(OutL)
+}
+
+##########################################
+
+Writetextdata<- function(...)
+{
+ varargin<- list(...)
+ OutL<- list()
+ Nargs<- length(varargin)
+ Data<- varargin[[1]]
+ Fname<- varargin[[2]]
+ Sep=","
+ for (I in Looprange(3,Nargs)){
+ Tmp<- varargin[[I]]
+ eval(parse(text=Tmp))
+ }
+ write.table(Data,Fname,sep=Sep,row.names=FALSE,na="")
+}
+
+##########################################
+# 2014.12.17
+# 2015.10.29
+
+WriteOutData<- function(...){
+ varargin<- list(...)
+ Nargs<- length(varargin)
+# if modulo(Nargs,2)==0 then
+# Fname=Fnameout;
+# Nst=1;
+# else
+ Fname=varargin[[1]]
+ Nst=2;
+# end;
+ for(N in seq(Nst,Nargs,by=2)){
+ Gname=varargin[[N]]
+ Tmp=paste(Gname,"//",sep="")
+ if(N==Nst){
+ cat(Tmp,"\n",sep="",file=Fname)
+ }
+ else{
+ cat(Tmp,"\n",sep="",file=Fname,append=TRUE)
+ }
+ Gdata=varargin[[N+1]]
+ Gdata=Flattenlist(Gdata)
+ if(!is.list(Gdata)){Gdata=list(Gdata)}
+ for(K in Looprange(1,length(Gdata))){
+ GL=Dividegraphics(Gdata[[K]])
+# for(J in seq(1,length(GL))){
+ for(J in Looprange(1,length(GL))){
+ cat("start//","\n",sep="",file=Fname,append=TRUE)
+ Str=""
+ Iend=Numptcrv(GL[[J]])
+# for(II in seq(1,Iend)){
+ for(II in Looprange(1,Iend)){
+ Pt=Ptcrv(II,GL[[J]])
+ if(nchar(Str)>0){
+ Str=paste(Str,",",sep="")
+ }
+ if(length(Pt)<3){
+ Str=paste(Str,sprintf("[%5.5f,%5.5f]",Pt[1],Pt[2]),sep="")
+ }
+ else{
+ Str=paste(Str,sprintf("[%5.5f,%5.5f,%5.5f]",Pt[1],Pt[2],Pt[3]),sep="")
+ }
+ if(nchar(Str)>80){
+ cat("[",Str,"]//","\n",sep="",file=Fname,append=TRUE)
+ Str=""
+ }
+ }
+ if(nchar(Str)>0){
+ cat("[",Str,"]//","\n",sep="",file=Fname,append=TRUE)
+ }
+ if((N==Nargs-1) & (K==length(Gdata)) & (J==length(GL))){
+# cat("end////","\n",sep="",file=Fname,append=TRUE)
+ cat("end//","\n",sep="",file=Fname,append=TRUE)
+ }
+ else{
+ cat("end//","\n",sep="",file=Fname,append=TRUE)
+ }
+ }
+ }
+ }
+ cat("//","\n",sep="",file=Fname,append=TRUE) # 15.11.05
+}
+
+###### Old ####################################
+# 2015.10.23
+ReadOutData<- function(...){
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ Fname=varargin[[1]]
+ cmdall=readLines(Fname)
+ cmdall=gsub("//","",cmdall,fixed=TRUE)
+ varname=cmdall[1]
+ outdt=list()
+ varL=c()
+ ptL=list()
+ flg=0
+ for(cmd in cmdall){
+ if(nchar(cmd)>0){
+ if((cmd=="start") | cmd=="end" | substring(cmd,1,1)=="["){
+ if(cmd=="start"){
+ pts=c()
+ }
+ if(cmd=="end"){
+ ptL=c(ptL,list(pts))
+ }
+ if(substring(cmd,1,1)=="["){
+ tmp1=paste(",",substring(cmd,2,nchar(cmd)-1),sep="")
+ tmp1=strsplit(tmp1,"]",fixed=TRUE)
+ tmp1=tmp1[[1]]
+ tmp1=gsub(",[","c(",tmp1,fixed=TRUE)
+ for(st in tmp1){
+ tmp=eval(parse(text=paste(st,")",sep="")))
+ pts=rbind(pts,tmp)
+ }
+ row.names(pts)=1:nrow(pts)
+ }
+ }
+ else{
+ varname=cmd
+ varL=c(varL,varname)
+ if(flg==0){ # 17.10.07from
+ flg=1
+ }else{
+ outdt=c(outdt,list(ptL))
+ } # 17.10.07upto
+ ptL=c()
+ }
+ }
+ }
+ outdt=c(outdt,list(ptL)) # 17.10.07
+ names(outdt)=varL
+ for(var in varL){
+ tmp=paste(var,"<<- outdt$",var,sep="")
+ eval(parse(text=tmp))
+ }
+# print(varL)
+ outdt
+}
+
+####################################################
+
+ReadOutData<- function(...){ #2017.10.23
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ Fname=varargin[[1]]
+ cmdall=readLines(Fname)
+ cmdall=gsub("//","",cmdall,fixed=TRUE)
+ varname=""#17.12.13 cmdall[1]
+ outdt=list()
+ varL=c()
+ ptL=list()
+ flg=0
+ for(cmd in cmdall){
+ if(nchar(cmd)>0){
+ if((cmd=="start") | cmd=="end" | substring(cmd,1,1)=="["){
+ if(cmd=="start"){
+ tmp=paste(varname,"<<- c(",varname,",list(c()))",sep="")
+ eval(parse(text=tmp))
+ Ctr=Ctr+1
+ }
+ if(cmd=="end"){
+ }
+ if(substring(cmd,1,1)=="["){
+ tmp1=paste(",",substring(cmd,2,nchar(cmd)-1),sep="")
+ tmp1=strsplit(tmp1,"]",fixed=TRUE)
+ tmp1=tmp1[[1]]
+ tmp1=gsub(",[","c(",tmp1,fixed=TRUE)
+ for(st in tmp1){
+ tmp=paste(varname,"[[",as.character(Ctr),"]]",sep="")
+ tmp=paste(tmp,"<<- rbind(",tmp,",",st,"))",sep="")#
+ eval(parse(text=tmp))
+ }
+ }
+ }
+ else{
+ # 17.12.13from
+ if(nchar(varname)>0){
+ tmp=paste("if(length(",varname,")==1){",varname,"<<- ",varname,"[[1]]}",sep="")
+ eval(parse(text=tmp))
+ }
+ # 17.12.13upto
+ varname=cmd
+ tmp=paste(varname,"<<- list()",sep="")
+ eval(parse(text=tmp))
+ Ctr=0
+ if(flg==0){ # 17.10.07from
+ flg=1
+ }else{
+ } # 17.10.07upto
+ }
+ }
+ }
+ # 17.12.13from
+ tmp=paste("if(length(",varname,")==1){",varname,"<<- ",varname,"[[1]]}",sep="")
+ eval(parse(text=tmp))
+ # 17.12.13upto
+}
+
+####################################################
+
+Rotatedata<- function(..., deg=FALSE)
+{
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ Eps<- 10^(-8)
+ ML<- varargin[[1]]
+ if(Mixtype(ML)==1){
+ ML<- list(ML)
+ }
+ Theta<- varargin[[2]]
+ if(deg) Theta<- Theta*pi/180 # 10.12.07
+ if(Nargs==2){
+ Pt<- c(0,0)
+ }
+ else{
+ Pt<- varargin[[3]]
+ }
+ Cx<- Pt[1]; Cy<- Pt[2]
+ OutL<- c()
+ for (N in Looprange(1,length(ML))){
+ GL<- Op(N,ML)
+ Out<- c()
+ for (I in Looprange(1,Nrow(GL))){
+ if(is.matrix(GL)){
+ Tmp<- GL[I,]
+ }
+ else{
+ Tmp<- GL
+ }
+ X1<- Tmp[1]
+ Y1<- Tmp[2]
+ if(X1==Inf){
+ X2<- X1
+ Y2<- Y1
+ }
+ else{
+ X2<- Cx+(X1-Cx)*cos(Theta)-(Y1-Cy)*sin(Theta)
+ Y2<- Cy+(X1-Cx)*sin(Theta)+(Y1-Cy)*cos(Theta)
+ }
+ Out<- Appendrow(Out,c(X2,Y2))
+ }
+ if(nrow(Out)==1){
+ Out<- Out[1,]
+ }
+ OutL<- Mixjoin(OutL,list(Out))
+ }
+ if(length(OutL)==1){
+ OutL<- Op(1,OutL)
+ }
+ return(OutL)
+}
+
+###############################################
+
+Scaledata<- function(...)
+{
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ Eps<- 10^(-8)
+ ML<- varargin[[1]]
+ if(Mixtype(ML)==1){
+ ML<- list(ML)
+ }
+ A<- varargin[[2]]
+ B<- varargin[[3]]
+ if(Nargs==3){
+ Pt<- c(0,0)
+ }
+ else{
+ Pt<- varargin[[4]]
+ }
+ OutL<- list()
+ for (N in Looprange(1,length(ML))){
+ GL<- Op(N,ML)
+ Out<- c()
+ for (I in Looprange(1,Nrow(GL))){
+ if(is.matrix(GL)){ # 10.12.07
+ Tmp<- GL[I,]
+ }
+ else{
+ Tmp<- GL
+ }
+ X1<- Tmp[1]
+ Y1<- Tmp[2]
+ if(X1==Inf){
+ X2<- X1
+ Y2<-Y1
+ }
+ else{
+ X2<- Pt[1]+A*(X1-Pt[1])
+ Y2<- Pt[2]+B*(Y1-Pt[2])
+ }
+ Out<- Appendrow(Out,c(X2,Y2))
+ }
+ OutL<- Mixjoin(OutL,list(Out))
+ }
+ if(length(OutL)==1){
+ OutL<- Op(1,OutL)
+ }
+ return(OutL)
+}
+
+################################
+
+Setarrow<- function(...)
+{
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ if(Nargs==0){
+ Str<- paste("Size=",YaSize,",","Angle=",YaAngle,",",sep="")
+ Str<- paste(Str,"Position=",YaThick,",","Style=",YaStyle,sep="")
+ return(Str)
+ }
+ Flg<- 0
+ for (I in 1:Nargs){
+ Tmp<- varargin[[I]]
+ if(mode(Tmp)=="numeric"){
+ Flg<- Flg+1
+ if(Flg==1) YaSize<<-Tmp
+ if(Flg==2){
+ if(Tmp<5){
+ YaAngle<<- 18*Tmp
+ }
+ else{
+ YaAngle<<- Tmp
+ }
+ }
+ if(Flg==3) YaPosition<<- Tmp
+ if(Flg==4) YaThick<<- Tmp
+ }
+ if(mode(Tmp)=="character"){
+ YaStyle<<- Tmp
+ }
+ }
+}
+
+####################################
+
+Setax<- function(...)
+{
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ if(Nargs==0){
+ if(ZIKU=="line"){
+ Tmp<- ","
+ }
+ else{
+ Tmp<- paste("(Arrowsize=", as.character(ARROWSIZE),"),",sep="")
+ }
+ Str<- paste(ZIKU,Tmp,XNAME,",",XPOS,",",sep="")
+ Str<- paste(Str,YNAME,",",YPOS,",",ONAME,",",OPOS,sep="")
+ return(Str)
+ }
+ ArgL<- c()
+ Is<- 1
+ Tmp<- varargin[[1]]
+ if(mode(Tmp)=="numeric" && length(Tmp)==1){
+ Is<- varargin[[1]]
+ ArgL<- c()
+ for (I in Looprange(1,Is-1)){
+ ArgL<- c(ArgL,"")
+ }
+ for (I in Looprange(2,Nargs)){
+ ArgL<- c(ArgL,varargin[[I]])
+ }
+ }
+ else{
+ if(Nargs==1){
+ ArgL<- c(varargin[[1]])
+ }
+ else{
+ Tmp<- varargin[[2]]
+ if(mode(Tmp)=="numeric" && length(Tmp)==1){
+ ARROWSIZE<<-Tmp
+ ArgL<- c(varargin[[1]])
+ for (I in Looprange(3,Nargs)){
+ ArgL<- c(ArgL,varargin[[I]])
+ }
+ }
+ else{
+ ArgL<- c()
+ for (I in 1:Nargs){
+ ArgL<- c(ArgL,varargin[[I]])
+ }
+ }
+ }
+ }
+ for (I in Looprange(length(ArgL)+1,7)){
+ ArgL<- c(ArgL,"")
+ }
+ Zk<- ArgL[1]
+ if(nchar(Zk)>0){
+ ZL<-substr(Zk,2,nchar(Zk))
+ Zk<-substr(Zk,1,1)
+ if(nchar(ZL)>0){
+ ARROWSIZE<<- as.numeric(ZL)
+ }
+ }
+ Xn<- ArgL[2]; Xp<- ArgL[3]
+ Yn<- ArgL[4]; Yp<- ArgL[5]
+ Genn<- ArgL[6]; Genp<- ArgL[7]
+ if(nchar(Zk)>0){
+ C<- Zk
+ if(C=="a"){
+ ZIKU<<- "arrow"
+ }
+ else{
+ ZIKU<<- "line"
+ }
+ }
+ if(nchar(Xn)>0){
+ XNAME<<- paste("$",Xn,"$",sep="")
+ }
+ if(nchar(Xp)>0){
+ XPOS<<- Xp
+ }
+ if(nchar(Yn)>0){
+ YNAME<<- paste("$",Yn,"$",sep="")
+ }
+ if(nchar(Yp)>0){
+ YPOS<<-Yp
+ }
+ if(nchar(Genn)>0){
+ ONAME<<- Genn
+ }
+ if(nchar(Genp)>0){
+ OPOS<<- Genp
+ }
+ Out<- "";
+}
+
+#################################
+# 11.08.24
+
+Setcolor<- function(...){
+ varargin<- list(...)
+ Color<- 'black'
+ Kosa<- 1
+ for(J in Looprange(1,length(varargin))){
+ Tmp<- varargin[[J]]
+ if(is.character(Tmp)) Color<- Tmp
+ if(is.numeric(Tmp)){
+ if(length(Tmp)==1){# 11.08.24
+ Kosa<- Tmp
+ }
+ else{
+ Color<- Tmp
+ }
+ }# 11.08.24
+ }
+ Iro<- Ratiocmyk(Color)
+ if(length(Iro)==0) return(c())
+ Str<- "\\color[cmyk]{" #17.09.22
+ for(J in 1:4){
+ Str<- paste(Str,as.character(Kosa*Iro[J]),sep="")
+ if(J<4){
+ Str<- paste(Str,",",sep="")
+ }
+ }
+ Str<- paste(Str,"}",sep="")
+ Texcom(Str)
+}
+
+##################################
+
+Setmarklen<- function(...)
+{
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ if(Nargs==0){
+ Tmp<- MARKLENNow/MARKLENInit
+ Tmp=round(Tmp*100)/100
+ return(Tmp)
+ }
+ Size<- varargin[[1]]
+ MARKLENNow<<- MARKLENInit*Size
+ MARKLEN<<- MARKLENNow*1000/2.54/MilliIn
+}
+
+###############################
+
+Setorigin<- function(...)
+{
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ if(Nargs==0){
+ return(GENTEN)
+ }
+ Pt<- varargin[[1]]
+ GENTEN<<- Pt;
+}
+
+################################
+
+Setscaling<- function(...)
+{
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ if(Nargs==0)
+ {
+ return(c(SCALEY,LOGX,LOGY))
+ }
+ for (I in 1:Nargs)
+ {
+ Tmp<- varargin[[I]]
+ if(mode(Tmp)=="numeric")
+ {
+ SCALEY<<- Tmp
+ }
+ if(mode(Tmp)=="character")
+ {
+ if(Tmp=="l")
+ {
+ LOGX<<- 0
+ LOGY<<- 1
+ }
+ else if(Tmp=="ll")
+ {
+ LOGX<<- 1
+ LOGY<<- 1
+ }
+ else
+ {
+ LOGX<<- 0
+ LOGY<<- 0
+ }
+ }
+ }
+ Tmp<- c(SCALEY,LOGX,LOGY);
+}
+
+#########################################
+
+Setpen<-function(Width)
+{
+ PenThick<<-round(PenThickInit*Width)
+ Str=paste("\\special{pn ", as.character(PenThick),"}%\n",sep="")
+ cat(Str,file=Wfile,append=TRUE)
+}
+
+##############################################
+
+Setpt<- function(...)
+{
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ if(Nargs==0)
+ {
+ Tmp<- TenSize/TenSizeInit
+ Tmp<- round(Tmp*100)/100
+ return(Tmp)
+ }
+ Size<- varargin[[1]]
+ TenSize<<- TenSizeInit*Size;
+}
+
+##############################################
+
+Setunitlen<-function(...)
+{
+ varargin<-list(...)
+ if(length(varargin)==0){
+ return(ULEN)
+ }
+ Ul=varargin[[1]]
+ Dx<-XMAX-XMIN
+ Dy<-YMAX-YMIN
+ Sym<-".0123456789 +-*/"
+ SL<-Sym
+ OL<-"+-*/"
+ if(nchar(Ul)>0){
+ ULEN<<-Ul
+ }
+ Is<-1
+ VL<-""
+ Ucode<-ULEN
+ for (I in 1:nchar(Ucode)){
+ C<-substring(Ucode,I,I)
+ if(length(grep(C,SL))>0){
+ if(length(grep(C,OL))>0){
+ Tmp<-substring(Ucode,Is,I-1)
+ Str<-paste(VL,Tmp,C,sep="")
+ VL<-Str
+ Is<-I+1
+ }
+ }
+ else{
+ Unit<-substring(Ucode,I,I+1)
+ Str<-substring(Ucode,Is,I-1)
+ VL<-paste(VL,Str,sep="")
+ break;
+ }
+ }
+ Valu<-eval(parse(text=VL))
+ Str<-as.character(Valu)
+ ULEN<<-paste(Str,Unit,sep="");
+ if(Unit=="cm") MilliIn<<-1000/2.54*Valu
+ if(Unit=="mm") MilliIn<<-1000/2.54*Valu/10
+ if(Unit=="in") MilliIn<<-1000*Valu
+ if(Unit=="pt") MilliIn<<-1000/72.27*Valu
+ if(Unit=="pc") MilliIn<<-1000/6.022*Valu
+ if(Unit=="bp") MilliIn<<-1000/72*Valu
+ if(Unit=="dd2") MilliIn<<-1000/1238/1157/72.27*Valu
+ if(Unit=="cc") MilliIn<<-1000/1238/1157/72.27*12*Valu
+ if(Unit=="sp") MilliIn<<-1000/72.27/65536*Valu/10
+ MARKLEN<<-MARKLENNow*1000/2.54/MilliIn
+ MEMORI<<-MEMORINow*1000/2.54/MilliIn #17.12.17
+}
+
+#########################################
+# 10.11.20
+
+Setwindow<-function(...)
+{
+ varargin<-list(...)
+ Nargs<-length(varargin)
+ if(Nargs==0){
+ Out<-c(XMIN,XMAX,YMIN,YMAX)
+ return(Out)
+ }
+ if(Nargs==1){
+ Dt<- varargin[[1]]
+ if(is.list(Dt) && !is.data.frame(Dt)){
+ Tmp<- as.data.frame(Dt)
+ Dt<- t(Tmp)
+ }
+ Xm<- min(Dt[,1])
+ XM<- max(Dt[,1])
+ Ym<- min(Dt[,2])
+ YM<- max(Dt[,2])
+ Str<- "Setwindow("
+ Str<- paste(Str,"c(",as.character(Xm),",",as.character(XM),"),c(",sep="")
+ Str<- paste(Str,as.character(Ym),",",as.character(YM),")",sep="")
+ Str<- paste(Str,")",sep="")
+ print(Str)
+ }
+ if(Nargs==2){
+ RgX<-varargin[[1]]
+ RgY<-varargin[[2]]
+ XMIN<<-RgX[1]; XMAX<<-RgX[2]
+ YMIN<<-RgY[1]; YMAX<<-RgY[2]
+ }
+ if(Nargs==4){
+ XMIN<<-varargin[[1]]; XMAX<<-varargin[[2]]
+ YMIN<<-varargin[[3]]; YMAX<<-varargin[[4]]
+ }
+ Out<- c(XMIN,XMAX,YMIN,YMAX);
+}
+
+#########################################
+
+Shade<- function(...)
+{ ## Scaling is implemented
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ Iroflg=0
+ Kosa=1
+ if(Nargs>1){
+ Iro=varargin[[Nargs]]
+ if(is.character(Iro)){
+ Iroflg=1
+ if(length(grep("{",Iro))>0){
+ Str=paste("{\\color",Iro,sep="")
+ }
+ else{
+ Str=paste("{\\color{",Iro,"}",sep="")
+ }
+ }
+ else{
+ if(length(Iro)==1){
+ Kosa=Iro
+ }
+ else{
+ Iroflg=1
+ if(length(Iro)==4){
+ Str="{\\color[cmyk]{"
+ }
+ else{
+ if(length(Iro)==3){
+ Str="{\\color[rgb]{"
+ }
+ }
+ for(J in 1:length(Iro)){
+ Str=paste(Str,as.character(Iro[J]),sep="")
+ if(J<length(Iro)){
+ Str=paste(Str,",")
+ }
+ }
+ Str=paste(Str,"}")
+ }
+ }
+ if(Iroflg==1){
+ Str=paste(Str,"%\n",sep="")
+ cat(Str,file=Wfile,append=TRUE)
+ }
+ }
+ Tmp=varargin[[1]]
+ Data=Kyoukai(Tmp)
+ for (I in Looprange(1, length(Data))){
+ PL<- Op(I,Data)
+ Mojisu<- 0
+ for (J in 1:Nrow(PL)){
+ P<- Doscaling(Op(J,PL))
+ X<- as.character(round(MilliIn*P[1]))
+ Y<- as.character(-round(MilliIn*P[2]))
+ Str<- paste("\\special{pa ",X," ",Y,"}",sep="")
+ cat(Str,file=Wfile,append=TRUE)
+ Mojisu<- Mojisu+nchar(Str)
+ if(Mojisu>80){
+ cat("%\n",file=Wfile,append=TRUE)
+ Mojisu<- 0
+ }
+ }
+ Str1<- paste("\\special{sh ",as.character(Kosa),"}",sep="")
+ Str2<- paste("\\special{ip}%\n",sep="")
+ cat(Str1,file=Wfile,append=TRUE)
+ cat(Str2,file=Wfile,append=TRUE)
+ }
+ if(Iroflg==1){
+ cat("}%\n",file=Wfile,append=TRUE)
+ }
+}
+
+####### Shade new 17.09.24############
+
+Shade<- function(...)
+{ ## Scaling is implemented
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ Iroflg<- 0
+ Kosa<- 1
+ if(Nargs>1){
+ Iro<- varargin[[Nargs]]
+ if(mode(Iro)=="character"){
+ Iroflg<- 1
+ if(length(grep(Iro,"{"))>0)
+ Str<- paste("{\\color",Iro,sep="")
+ else
+ Str<- paste("{\\color{",Iro,"}",sep="")
+ }
+ else{
+ if(length(Iro)==1)
+ Kosa<- Iro
+ else{
+ Iroflg<- 1
+ if(length(Iro)==4)
+ Str<- paste("{\\color[cmyk]{",sep="")
+ else
+ if(length(Iro)==3)
+ Str<- paste("{\\color[rgb]{",sep="")
+ for (J in Looprange(1,length(Iro))){
+ Str<- paste(Str,as.character(Iro[J]),sep="")
+ if(J<length(Iro))
+ Str<- paste(Str,",",sep="")
+ }
+ Str<- paste(Str,"}",sep="")
+ }
+ }
+ if(Iroflg==1){
+ if(Wfile=="default")
+ cat(Str,"%\n",file="",append=TRUE,sep="")
+ else
+ cat(Str,"%\n",file=Wfile,append=TRUE,sep="")
+ }
+ }
+ Tmp<- varargin[[1]]
+ Data<- Kyoukai(Tmp)
+ for (I in Looprange(1, length(Data))){
+ PL<- Op(I,Data)
+ Mojisu<- 0
+ for (J in 1:Nrow(PL)){
+ P<- Doscaling(Op(J,PL))
+ X<- as.character(round(MilliIn*P[1]))
+ Y<- as.character(-round(MilliIn*P[2]))
+ Str<- paste("\\special{pa ",X," ",Y,"}",sep="")
+ if(Wfile=="default")
+ cat(Str,file="",append=TRUE,sep="")
+ else
+ cat(Str,file=Wfile,append=TRUE,sep="")
+ Mojisu<- Mojisu+nchar(Str)
+ if(Mojisu>80){
+ if(Wfile=="default")
+ cat("%\n",file="",append=TRUE,sep="")
+ else
+ cat("%\n",file=Wfile,append=TRUE,sep="")
+ Mojisu<- 0
+ }
+ }
+ Str1<- paste("\\special{sh ",as.character(Kosa),"}",sep="")
+ Str2<- paste("\\special{ip}%\n",sep="")
+ if(Wfile=="default"){
+ cat(Str1,file="",append=TRUE,sep="")
+ cat(Str2,file="",append=TRUE,sep="")
+ }
+ else{
+ cat(Str1,file=Wfile,append=TRUE,sep="")
+ cat(Str2,file=Wfile,append=TRUE,sep="")
+ }
+ }
+ if(Iroflg==1){
+ if(Wfile=="default")
+ cat("}%\n",file="",append=TRUE,sep="")
+ else
+ cat("}%\n",file=Wfile,append=TRUE,sep="")
+ }
+}
+
+##############################################
+# 11.01.07
+
+Splinedata<- function(...)
+{
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ Eps<- 10^(-3)
+ PL<- varargin[[1]]
+ if(mode(PL)=="character"){
+ Fname<- PL
+ PL<- Readtextdata(Fname)
+ }
+ else{
+ PL<- as.matrix(PL)
+ if(Nrow(PL)==1){
+ PL<- matrix(PL, nrow=length(PL)/2)
+ PL<- t(PL)
+ }
+ }
+ if(ncol(PL)==3){
+ Flg3<- 1
+ }
+ else{
+ Flg3<- 0
+ }
+ PLL<- Dividegraphics(PL)
+ N<- 50
+ C<- c()
+ for (I in Looprange(2,Nargs)){
+ Tmp<- varargin[[I]]
+ if(mode(Tmp)!="character") next
+ if(length(grep("=",Tmp,fixed=TRUE))>0){
+ eval(parse(text=Tmp))
+ }
+ else{
+ Tmp1<- substr(Tmp,1,1)
+ if(toupper(Tmp1)=="C"){
+ C<- 1:length(PLL)
+ }
+ }
+ }
+ Cflg<- rep(0,length(PLL))
+ for(J in Looprange(1,length(C))){
+ K<- C[J]
+ Cflg[K]<- 1
+ }
+ if(length(N)>1){
+ Nj<- as.numeric(N)
+ }
+ else{
+ Tmp<- lapply(PLL,nrow)
+ Tmp1<- as.numeric(Tmp)
+ MxP<- max(Tmp1)
+ Nj<- c()
+ for (J in 1:length(PLL)){
+ Tmp<- nrow(PLL[[J]])
+ Tmp1<- round(N/MxP*(Tmp-1))
+ Nj<- c(Nj,Tmp1)
+ }
+ }
+ OutL<- list()
+ for(J in 1:length(PLL)){
+ PL<- PLL[[J]]
+ if(Cflg[J]==1){
+ if(Norm(PL[1,]-PL[Nrow(PL),])>Eps){
+ PL<-Appendrow(PL,PL[1,])
+ Nj[J]=round(N/MxP*nrow(PL))
+ }
+ else{
+ PL[Nrow(PL),]<- PL[1,]
+ }
+ }
+ Tn<- 1:Nrow(PL)
+ Xn<- PL[,1]
+ Yn<- PL[,2]
+ if(Flg3==1) Zn<- PL[,3]
+ if(Cflg[J]==0){
+ Dxn<- spline(Tn,Xn,n=Nj[J])
+ Dyn<- spline(Tn,Yn,n=Nj[J])
+ if(Flg3==1) Dzn<- spline(Tn,Zn,n=Nj[J])
+ }
+ else{
+ Dxn<- spline(Tn,Xn,method="periodic")
+ Dyn<- spline(Tn,Yn,method="periodic")
+ if(Flg3==1) Dzn<- spline(Tn,Zn,method="periodic")
+ }
+ Tmp1<- Dxn$y
+ Tmp2<- Dyn$y
+ Tmp3<-c()
+ if(Flg3==1) Tmp3<- Dzn$y
+ Out<- matrix(c(Tmp1,Tmp2,Tmp3),nrow=length(Tmp1))
+ OutL<- c(OutL,list(Out))
+ }
+ return(OutL)
+}
+
+############################################
+# 2013.05.03 Domain is optional
+
+Tabledata<- function(...){
+ varargin<- list(...)
+ Eps<- 0.001
+ Tmp<- varargin[[1]] # 130503 from
+ if(is.numeric(Tmp)){
+ Domain<- varargin[[1]]
+ VL<- varargin[[2]]
+ HL<- varargin[[3]]
+ }
+ else{
+ Domain<- c(-1,-1)
+ VL<- varargin[[1]]
+ HL<- varargin[[2]]
+ } # 130503 upto
+ Hsize<- Domain[1]
+ SvL<- list(0)
+ S<- 0
+ for (I in Looprange(1,length(VL))){
+ Tmp<- VL[[I]]
+ S<- S+Tmp[1]
+ Tmp[1]<- S
+ SvL<- c(SvL,list(Tmp))
+ }
+ if(Hsize>S){
+ SvL<- c(SvL,list(Hsize))
+ }
+ Hsize<- Op(1,SvL[[length(SvL)]])
+ Vsize<- Domain[2]
+ ShL<- list(0)
+ S<- 0
+ for (I in Looprange(1,length(HL))){
+ Tmp<- HL[[I]]
+ S<- S+Tmp[1]
+ Tmp[1]<- S
+ ShL<- c(ShL,list(Tmp))
+ }
+ if(Vsize>S){
+ ShL<- c(ShL,list(Vsize))
+ }
+ Vsize<- Op(1,ShL[[length(ShL)]])
+ Marw<- 0; Mare<- 0; Mars<- 0; Marn<- 0
+ if(length(Domain)>2){
+ Marw<- Domain[3]
+ Mare<- Domain[4]
+ }
+ if(length(Domain)>4){
+ Marn<- Domain[5]
+ Mars<- Domain[6]
+ }
+ Setwindow(c(-Marw,Hsize+Mare),c(-Mars,Vsize+Marn))
+ Tmp<- Framedata(c(Eps,Hsize-Eps),c(Eps,Vsize-Eps))
+ Gdata<- list(Tmp)
+ Tmp<- -Marw
+ Hdata<- list(Listplot(c(c(Tmp,-Mars),c(Tmp,Vsize+Marn))))
+ for (I in Looprange(1,length(SvL))){
+ Data<- SvL[[I]]
+ X<- Data[1]
+ if(length(Data)==1){
+ Y1<- 0
+ Y2<- Vsize
+ G<- Listplot(c(X,Y1),c(X,Y2))
+ }
+ else{
+ G<- c()
+ for (J in seq(2,length(Data),by=2)){
+ Y1<- Vsize-Op(1,ShL[[Data[J]]])
+ Y2<- Vsize-Op(1,ShL[[Data[J+1]]])
+ Tmp<- Listplot(c(c(X,Y1),c(X,Y2)))
+ Tmp1<- Appendrow(G,c(Inf,Inf))
+ G<- Appendrow(Tmp1,Tmp)
+ }
+ G<- G[2:nrow(G),]
+ }
+ Hdata<- c(Hdata,list(G))
+ }
+ Tmp<- Hsize+Mare
+ Tmp1<- Listplot(c(c(Tmp,-Mars),c(Tmp,Vsize+Marn)))
+ Hdata<- c(Hdata,list(Tmp1))
+ Tmp<- Vsize+Marn
+ Vdata<- list(Listplot(c(c(-Marw,Tmp),c(Hsize+Mare,Tmp))))
+ for (I in Looprange(1,length(ShL))){
+ Data<- ShL[[I]]
+ Y<- Vsize-Data[1]
+ if(length(Data)==1){
+ X1<- 0
+ X2<- Hsize
+ G<- Listplot(c(X1,Y),c(X2,Y))
+ }
+ else{
+ G<- c()
+ for (J in seq(2,length(Data),by=2)){
+ X1<- Op(1,SvL[[Data[J]]])
+ X2<- Op(1,SvL[[Data[J+1]]])
+ Tmp<- Listplot(c(X1,Y),c(X2,Y))
+ G<- Appendrow(G,c(Inf,Inf))
+ G<- Appendrow(G,Tmp)
+ }
+ G<-G[2:nrow(G),]
+ }
+ Vdata<- c(Vdata,list(G))
+ }
+# Tmp<- Listplot(c(c(0,0),c(Hsize,0))) # 2011.03.02
+# Vdata<- Mixjoin(Vdata,list(Tmp))
+ Tmp<- Listplot(c(c(-Marw,-Mars),c(Hsize+Mare,-Mars)))
+ Vdata<- Mixjoin(Vdata,list(Tmp))
+ Tmp1<- Hdata[Looprange(3,length(Hdata)-2)]
+ Tmp2<- Vdata[Looprange(3,length(Vdata)-2)]
+ Gdata<- Mixjoin(Gdata,Tmp1,Tmp2)
+ Hind<- Looprange(2,1+length(Tmp1))
+ Vind<- Looprange(2+length(Tmp1),1+length(Tmp1)+length(Tmp2))
+ G=Gdata[[1]]
+ P1<- Ptsw(G); P2<- Ptnw(G)
+ Q1<- Ptse(G); Q2<- Ptne(G)
+ Tmp1<- list(Listplot(c(P1,P2)),Listplot(c(Q1,Q2)))
+ P1<- Ptnw(G); P2<- Ptne(G)
+ Q1<- Ptsw(G); Q2<- Ptse(G)
+ Tmp2<- list(Listplot(c(P1,P2)),Listplot(c(Q1,Q2)))
+ Tmp3<- Framedata()
+ Out<- list(Gdata,Hind,Vind,Tmp1,Tmp2,Tmp3)
+ return(Out)
+}
+
+################################
+
+Texcom<- function(Meirei)
+{
+ if(Meirei=="\\thinlines"){
+ Setpen(1);
+ return();
+ }
+ if(Meirei=="\\thicklines"){
+ Setpen(2);
+ return()
+ }
+ if(Meirei=="\\Thicklines"){
+ Setpen(3);
+ return()
+ }
+ if(length(Meirei)==0){ # 09.12.07
+ Tmp<- c()
+ }
+ else{
+ Tmp<- grep("newline",Meirei)
+ }
+ if(length(Tmp)>0){
+ cat("\n",file=Wfile,append=TRUE);
+ }
+ else{
+ Tmp<- paste(Meirei,"%\n",sep="")
+ Tmp<- gsub("//","\\",Tmp,fixed=TRUE) # 11.03.02
+ cat(Tmp,file=Wfile,append=TRUE);
+ }
+}
+
+###############################################
+
+Texctr<- function(N){
+ if(is.numeric(N)){
+ Alpha<- "abcdefghijklmnopqrstuvwxyz"
+ Out<- paste("ketpicctr",substr(Alpha,N,N),sep="")
+ }
+ else{
+ if(grep("\\",N,fixed=TRUE)>0){
+ Out<- substr(N,2,nchar(N))
+ }
+ else{
+ Out<- N
+ }
+ }
+ return(Out)
+}
+
+###############################################
+
+Texelse<- function (){
+ Texcom("");
+ Texcom("\\else")
+}
+
+###############################################
+
+Texend<- function()
+{
+ Texcom("%\n}")
+}
+
+###############################################
+
+Texendfor<- function(I){
+ Last<- TEXFORLAST[[TEXFORLEVEL]]
+ Texcom("")
+ Tmp<- paste("\\ifnum",Texthectr(I),"<",Last,sep="")
+ Texcom(Tmp)
+ Texcom("\\repeat")
+ Texcom("}")
+ TEXFORLEVEL<<- TEXFORLEVEL-1
+ TEXFORLAST<<- TEXFORLAST[1:(length(TEXFORLAST)-1)]
+}
+
+###############################################
+
+Texendif<- function(){
+ Texcom("")
+ Texcom("\\fi")
+ Texcom("}")
+}
+
+###############################################
+
+Texfor<- function(I,First,Last){
+ TEXFORLEVEL<<- TEXFORLEVEL+1;
+ Texsetctr(I,"0")
+ Texsetctr(I,paste(as.character(First),"-1",sep=""))
+ Texcom("")
+ Texcom("{")
+ Texcom("\\loop")
+ Texsetctr(I,"+1")
+ TEXFORLAST<<- c(TEXFORLAST,as.character(Last))
+}
+
+###############################################
+
+Texforinit<- function(){
+ TEXFORLEVEL<<- 0
+ TEXFORLAST<<- list()
+}
+
+###############################################
+
+Texif<- function(...){
+ varargin<- list(...)
+ Condstr<- varargin[[1]]
+ Tp<- 0
+ if(length(varargin)>1){
+ Tp<- varargin[[2]]
+ }
+ Texcom("")
+ Texcom("{")
+ if(Tp==0){
+ Texcom("\\ifnum")
+ }
+ else{
+ Texcom("\\ifdim ")
+ }
+ Texcom(paste(Condstr," ",sep=""))
+}
+
+######################################
+
+Texletter<- function(...)
+{
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ for (I in seq(1,Nargs,by=3)){
+ P<- varargin[[I]]
+ X<- P[1]
+ if(mode(X)=="numeric"){
+ X<- as.character(X)
+ }
+ Y<- P[2]
+ if(mode(Y)=="numeric"){
+ Y<- as.character(Y)
+ }
+ Houkou<- varargin[[I+1]]
+ Mojiretu<- varargin[[I+2]]
+ Hset<- Houkou
+ Vhoko<- "c"
+ if(length(grep("n",Hset))>0){
+ Vhoko<- "n"
+ }
+ if(length(grep("s",Hset))>0){
+ Vhoko<- "s"
+ }
+ Hhoko<- "c";
+ if(length(grep("e",Hset))>0){
+ Hhoko<- "e"
+ }
+ if(length(grep("w",Hset))>0){
+ Hhoko<- "w"
+ }
+ Hoko<- paste(Vhoko,Hhoko,sep="")
+ CalcWidth(Hoko,Mojiretu)
+ CalcHeight(Hoko,Mojiretu)
+ Tmp<- paste("\\put(",X,",",Y,"){\\hspace*{\\Width}",sep="")
+ Str<- paste(Tmp,"\\raisebox{\\Height}{",Mojiretu,"}}%\n",sep="")
+ cat(Str,file=Wfile,append=TRUE)
+ }
+}
+
+##################################################
+
+Texnewcmd<- function(...)
+{
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ Str<- varargin[[1]]
+ S<- paste("\\newcommand{",Str,"}",sep="")
+ if(Nargs>1){
+ Tmp<- as.character(varargin[[2]])
+ S<- paste(S,"[",Tmp,"]",sep="")
+ }
+ if(Nargs>2){
+ Tmp<- varargin[[3]]
+ if(mode(Tmp)=="numeric"){
+ Tmp<- as.character(Tmp)
+ }
+ S<- paste(S,"[",Tmp,"]",sep="")
+ }
+ S<- paste(S,"{",sep="")
+ Texcom(S)
+}
+
+###############################################
+
+Texnewctr<- function(N)
+{
+ if(mode(N)=="character"){
+ Str<- paste("\\newcounter{",N,"}",sep="")
+ Texcom(Str)
+ }
+ else{
+ for (I in N){
+ Str<- paste("\\newcounter{",Texctr(I),"}",sep="")
+ Texcom(Str)
+ }
+ }
+}
+###############################################
+
+Texrenewcmd<- function(...)
+{
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ Str<- varargin[[1]]
+ S<- paste("\\renewcommand{",Str,"}",sep="")
+ if(Nargs>1){
+ Tmp<- as.character(varargin[[2]])
+ S<- paste(S,"[",Tmp,"]",sep="")
+ }
+ if(Nargs>2){
+ Tmp<- varargin[[3]]
+ if(mode(Tmp)=="numeric"){
+ Tmp<- as.character(Tmp)
+ }
+ S<- paste(S,"[",Tmp,"]",sep="")
+ }
+ S<- paste(S,"{",sep="")
+ Texcom(S)
+}
+
+###############################################
+
+Texsetctr<- function(Nctr,Opstr)
+{
+ Ctr<- Texctr(Nctr)
+ Opstr<- paste(Opstr,"%",sep="")
+ OperL<- "+-*/%"
+ Oper<- ""
+ Va<- ""
+ Evflg<- 0
+ Paflg<- 0
+ for (I in Looprange(1,nchar(Opstr))){
+ Tmp<- substring(Opstr,I,I)
+ if(Tmp=="("){
+ Paflg<- 1
+ if(nchar(Va)>0){
+ Evflg<- 1
+ Va<- paste(Va,Tmp,sep="")
+ }
+ next
+ }
+ if(Tmp==")"){
+ Paflg<- 0
+ if(Evflg>0){
+ Va<- paste(Va,Tmp,sep="")
+ }
+ next
+ }
+ if(Paflg>0){
+ Va<- paste(Va,Tmp,sep="")
+ next
+ }
+ if(length(grep(Tmp,OperL))==0){
+ Va<- paste(Va,Tmp,sep="")
+ }
+ else{
+ if(Evflg>0){
+ Tmp1<- eval(parse(text=Va))
+ Va<- paste("\\value{",Tmp1,"}",sep="")
+ Evflg<- 0
+ }
+ if(Oper==""){
+ if(nchar(Va)>0){
+ Str<- paste("\\setcounter{",Ctr,"}{",Va,"}",sep="")
+ Texcom(Str)
+ }
+ Oper<- Tmp
+ Va<-""
+ }
+ else if(Oper=="+"){
+ Str<- paste("\\addtocounter{",Ctr,"}{",Va,"}",sep="")
+ Texcom(Str)
+ Oper<- Tmp
+ Va<-""
+ }
+ else if(Oper=="-"){
+ Str<- paste("\\addtocounter{",Ctr,"}{-",Va,"}",sep="")
+ Texcom(Str)
+ Oper<- Tmp
+ Va<-""
+ }
+ else if(Oper=="*"){
+ Str<- paste("\\multiply\\value{",Ctr,"} by ",Va,sep="")
+ Texcom(Str)
+ Oper<- Tmp
+ Va<-""
+ }
+ else if(Oper=="/"){
+ Str<- paste("\\divide\\value{",Ctr,"} by ",Va,sep="")
+ Texcom(Str)
+ Oper<- Tmp
+ Va<-""
+ }
+ }
+ }
+}
+
+###############################################
+
+Texthectr<- function(N)
+{
+ Out<- paste("\\the",Texctr(N),sep="")
+ return(Out)
+}
+
+###############################################
+
+Texvalctr<- function(N){
+ Out<- paste("\\value{",Texctr(N),"}",sep="")
+ return(Out)
+}
+
+###############################################
+
+Texvctr<- function(N)
+{
+ Out<- paste("\\value{",Texctr(N),"}",sep="")
+ return(Out)
+}
+
+###############################################
+
+Tonumeric <- function(...)
+{
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ Data<- varargin[[1]]
+ Sp<- c(1,1)
+ Ep<- c(Inf,Inf)
+ if(Nargs>1){
+ Sp<- varargin[[2]]
+ }
+ if(Nargs>2){
+ Ep<- varargin[[3]]
+ }
+ Nrs<- Sp[1]
+ Nre<- min(nrow(Data),Ep[1])
+ Ncs<- Sp[2]
+ Nce<- min(ncol(Data),Ep[2])
+ Tmp1<- Data[Nrs:Nre, Ncs:Nce]
+ Tmp2 <- as.numeric(Tmp1)
+ Out <- matrix(Tmp2,nrow=nrow(Tmp1))
+ Sp<- c()
+ for (I in 1:nrow(Out)){
+ for (J in 1:ncol(Out)){
+ Tmp<- Out[I,J]
+ if(!is.na(Tmp)){
+ Sp<- c(I,J)
+ break;
+ }
+ }
+ if(length(Sp)>0) break
+ }
+ if(length(Sp)==0){
+ return("Numeric data not found")
+ }
+ Ep<- c(nrow(Out),ncol(Out))
+ for (I in Sp[1]:nrow(Out)){
+ Tmp<- Out[I,Sp[2]]
+ if(is.na(Tmp)){
+ Ep[1]<- I-1
+ break
+ }
+ }
+ for (J in Sp[2]:ncol(Out)){
+ Tmp<- Out[Sp[1],J]
+ if(is.na(Tmp)){
+ Ep[2]<- J-1
+ break
+ }
+ }
+ Out<- Out[Sp[1]:Ep[1], Sp[2]:Ep[2]]
+ return(Out)
+}
+
+##################################################
+
+Translatedata<- function(...)
+{
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ Eps<- 10^(-8)
+ ML<- varargin[[1]]
+ if(Mixtype(ML)==1){
+ ML<- list(ML)
+ }
+ Tmp=varargin[[2]]
+ if(mode(Tmp)=="numeric" && length(Tmp)>1){
+ A<- Tmp[1]; B<- Tmp[2]
+ }
+ else{
+ A<- Tmp
+ if(Nargs>=3){
+ B<- varargin[[3]]
+ }
+ else{
+ B<- 0
+ }
+ }
+ OutL<- list()
+ for (N in Looprange(1,length(ML))){
+ GL<- Op(N,ML)
+ Out<- c()
+ for (I in Looprange(1,Nrow(GL))){
+ if(is.matrix(GL)){ # 10.12.07
+ Tmp<- GL[I,]
+ }
+ else{
+ Tmp<- GL
+ }
+ X1<- Tmp[1]
+ Y1<- Tmp[2]
+ if(X1==Inf){
+ X2<- X1
+ Y2<-Y1
+ }
+ else{
+ X2<- X1+A
+ Y2<- Y1+B
+ }
+ Out<- Appendrow(Out,c(X2,Y2))
+ }
+ OutL<- Mixjoin(OutL,list(Out))
+ }
+ if(length(OutL)==1){
+ OutL<- Op(1,OutL)
+ }
+ return(OutL)
+}
+
+#######################################
+
+Unscaling<- function(G)
+{
+ GLg<- G
+ if(class(GLg)=="numeric"){
+ GLg<-c(G[1]/SCALEX, G[2]/SCALEY)
+ Tmp<-GLg
+ if(LOGX==1) Tmp[1]<- 10^(GLg[1])
+ if(LOGY==1) Tmp[2]<- 10^(GLg[2])
+ return(Tmp)
+ }
+ else{
+ Tmp1<-matrix(c(1/SCALEX,0,0,1/SCALEY),nrow=2)
+ GLg<-G %*% Tmp1
+ Tmp<-GLg
+ if(LOGX==1) Tmp[,1]<- 10^(G[,1])
+ if(LOGY==1) Tmp[,2]<- 10^(G[,2])
+ return(Tmp)
+ }
+}
+
+#############################################
+
+Vtickmark<- function(...)
+{ ## Scaling is implemented
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ ArgsL<- varargin
+ if(mode(ArgsL[[1]])=="character"){
+ Str<- ArgsL[[1]]
+ Tmp<- strsplit(Str,"m")
+ Tmp<- Tmp[[1]]
+ if(length(Tmp)>1){
+ I<- nchar(Tmp[1])+1
+ }
+ else{
+ I<- 0
+ }
+ Tmp<- strsplit(Str,"n")
+ Tmp<- Tmp[[1]]
+ if(length(Tmp)>1){
+ J<- nchar(Tmp[1])+1
+ }
+ else{
+ J<- 0
+ }
+ Tmp<- strsplit(Str,"r")
+ Tmp<- Tmp[[1]]
+ if(length(Tmp)>1){
+ K=nchar(Tmp[1])+1
+ }
+ else{
+ K<- 0
+ }
+ if(K>0){
+ S<- substr(Str,K+1,nchar(Str))
+ R<- as.numeric(S)
+ if(is.na(R)){
+ R<- 1
+ }
+ }
+ else{
+ R<- 1
+ K<- nchar(Str)+1
+ }
+ if(J>0){
+ S<- substr(Str,J+1,K-1)
+ Dn<- as.numeric(S)
+ if(is.na(Dn)){
+ Dn<- 1
+ }
+ }
+ else{
+ Dn<- 1000
+ J<- nchar(Str)+1
+ }
+ S<- substr(Str,I+1,J-1)
+ Dm<- as.numeric(S)
+ if(is.na(Dm)){
+ Dm<- 1
+ }
+ ArgsL<- list()
+ for (I in 1:floor((YMAX-GENTEN[2])/Dm)){
+ ArgsL<- Mixjoin(ArgsL,I*Dm)
+ if(I-floor(I/Dn)*Dn==0){
+ Str<- as.character(I*Dm*R)
+ ArgsL<- Mixjoin(ArgsL,Str)
+ }
+ }
+ for (I in seq(-1,ceiling((YMIN-GENTEN[2])/Dm))){
+ ArgsL<- Mixjoin(ArgsL,I*Dm)
+ if(I-floor(I/Dn)*Dn==0){
+ Str<- as.character(I*Dm*R)
+ ArgsL<- Mixjoin(ArgsL,Str)
+ }
+ }
+ }
+ MemoriList<- list()
+ Memori<- list()
+ for (N in 1:length(ArgsL)){
+ Dt<- ArgsL[[N]]
+ if(mode(Dt)=="numeric" && length(Dt)>1){
+ if(length(Memori)>0){
+ MemoriList<- Mixjoin(MemoriList,list(Memori))
+ }
+ Memori<- list(Dt[1],Dt[2])
+ next
+ }
+ if(mode(Dt)=="character"){
+ Memori<- Mixjoin(Memori,Dt)
+ }
+ else{
+ if(length(Memori)>0){
+ MemoriList<- Mixjoin(MemoriList,list(Memori))
+ }
+ Memori<- list(GENTEN[1],Dt)
+ }
+ }
+ MemoriList<- Mixjoin(MemoriList,list(Memori))
+ for (N in 1:length(MemoriList)){
+ Dt<- MemoriList[[N]]
+ Ndt<- length(Dt)
+ X=Op(1,Dt)
+ Y=Op(2,Dt)
+ Tmp<-Doscaling(c(X,Y))
+ X<- Tmp[1]
+ Y<- Tmp[2]
+ Moji<- Op(Ndt,Dt)
+ Tmp1<- Unscaling(c(X+MARKLEN,Y))
+ Tmp2<- Unscaling(c(X-MARKLEN,Y))
+ Fd<- Listplot(c(Tmp1,Tmp2))
+ Drwline(Fd)
+ if(Ndt==3){
+ Tmp<-Unscaling(c(X-MARKLEN,Y))
+ Expr(Tmp,"w",Moji)
+ }
+ if(Ndt==4){
+ Houkou<- Op(3,Dt)
+ Tmp<-grep("w",Houkou)
+ if(length(Tmp)>0){
+ Tmp<-Unscaling(c(X-MARKLEN,Y))
+ Expr(Tmp,Houkou,Moji)
+ }
+ else{
+ Tmp<- Unscaling(c(X+MARKLEN,Y))
+ Expr(Tmp,Houkou,Moji)
+ }
+ }
+ cat("%\n",file=Wfile,append=TRUE)
+ }
+}
+
+############################################
+
+Windisp<-function(...){
+ varargin<-list(...)
+ Nargs<-length(varargin)
+ Tmp<- Doscaling(c(XMIN,YMIN))
+ Xmn<- Tmp[1]; Ymn<- Tmp[2]
+ Tmp<- Doscaling(c(XMAX,YMAX))
+ Xmx<- Tmp[1]; Ymx<- Tmp[2]
+ plot(c(Xmn,Xmx),c(Ymn,Ymx),type="n",asp=1,axes=FALSE,xlab="",ylab="")
+ Tmp<- Doscaling(Listplot(c(0,YMIN),c(0,YMAX)))
+ axis(2,at=as.numeric(Tmp[,2]), labels=round(c(YMIN,YMAX),2))
+ Tmp<- Doscaling(Listplot(c(XMIN,0),c(XMAX,0)))
+ axis(1,at=as.numeric(Tmp[,1]), labels=round(c(XMIN,XMAX),2))
+ Tmp1<- c(XMIN,GENTEN[2])
+ Tmp2<- c(XMAX,GENTEN[2])
+ Tmp3<- Listplot(Tmp1,Tmp2)
+ Tmp<- MakeCurves(Tmp3,0)
+ if(Datalength(Tmp)>0){
+ lines(Tmp[,1],Tmp[,2],col="green")
+ }
+ Tmp1<- c(GENTEN[1],YMAX)
+ Tmp2<- c(GENTEN[1],YMIN)
+ Tmp3<- Listplot(Tmp1,Tmp2)
+ Tmp<- MakeCurves(Tmp3,0)
+ if(Datalength(Tmp)>0){
+ lines(Tmp[,1],Tmp[,2],col="green")
+ }
+ Tmp<-Doscaling(Framedata())
+ lines(Tmp[,1],Tmp[,2])
+ for (I in Looprange(1,Nargs)){
+ Pdata<-varargin[[I]]
+ if(mode(Pdata)=="numeric"){
+ Pdata<-list(Pdata)
+ }
+ while(Mixtype(Pdata)==3){ # 10.02.23
+ Tmp1<- list()
+ for(II in Looprange(1,length(Pdata))){
+ Tmp1<- Mixjoin(Tmp1,Pdata[[II]])
+ }
+ Pdata<- Tmp1
+ } # 10.02.23
+ for (II in Looprange(1,length(Pdata))){
+ Tmp<-Pdata[[II]]
+ P<-MakeCurves(Tmp,0)
+ Ndm<-Dataindex(P)
+ for (J in Looprange(1,Nrow(Ndm))){
+ Q<-P[Ndm[J,1]:Ndm[J,2],]
+ if(Nrow(Q)==1){
+ Tmp<-seq(1,Ncol(Q),by=2)
+ for (K in Tmp){
+ Pt<-Q[K:(K+1)]
+ points(Pt[1],Pt[2])
+ }
+ }
+ else{
+ lines(Q[,1],Q[,2])
+ }
+ }
+ }
+ }
+}
+
+############################################
+
+WindispT<-function(..., color="black",width=1,new=FALSE,htick=c(),vtick=c()){ # 10.12.04
+ par(new=new)
+ varargin<-list(...)
+ Nargs<-length(varargin)
+ if(!new) # 10.12.04
+ {
+ Tmp<- Doscaling(c(XMIN,YMIN))
+ Xmn<- Tmp[1]; Ymn<- Tmp[2]
+ Tmp<- Doscaling(c(XMAX,YMAX))
+ Xmx<- Tmp[1]; Ymx<- Tmp[2]
+ plot(c(Xmn,Xmx),c(Ymn,Ymx),type="n",asp=1,axes=FALSE,xlab="",ylab="")
+ Tick<- sort(c(YMIN,YMAX,vtick)) #### 10.12.04 from here
+ Tmp1<- matrix(c(rep(0,length(Tick)),Tick),ncol=2)
+ Tmp<- Doscaling(Tmp1)
+ axis(2,at=as.numeric(Tmp[,2]), labels=round(Tick,2))
+ Tick<- sort(c(XMIN,XMAX,htick))
+ Tmp1<- matrix(c(Tick,rep(0,length(Tick))),ncol=2)
+ Tmp<- Doscaling(Tmp1)
+ axis(1,at=as.numeric(Tmp[,1]), labels=round(Tick,2)) #### 10.12.04 to here
+ Tmp1<- c(XMIN,GENTEN[2])
+ Tmp2<- c(XMAX,GENTEN[2])
+ Tmp3<- Listplot(Tmp1,Tmp2)
+ Tmp<- MakeCurves(Tmp3,0)
+ if(Datalength(Tmp)>0){
+ lines(Tmp[,1],Tmp[,2],col="green")
+ }
+ Tmp1<- c(GENTEN[1],YMAX)
+ Tmp2<- c(GENTEN[1],YMIN)
+ Tmp3<- Listplot(Tmp1,Tmp2)
+ Tmp<- MakeCurves(Tmp3,0)
+ if(Datalength(Tmp)>0){
+ lines(Tmp[,1],Tmp[,2],col="green")
+ }
+ Tmp<-Doscaling(Framedata())
+ lines(Tmp[,1],Tmp[,2])
+ }
+ for (I in Looprange(1,Nargs)){
+ Pdata<-Flattenlist(varargin[[I]]) # 101129 from here
+ Cmd<- list()
+ for (II in Looprange(1,length(Pdata))){
+ Tmp<-Pdata[[II]]
+ if(length(Tmp)==1){
+ Cmd<- c(Cmd,list(Tmp))
+ next
+ }
+
+ P<-MakeCurves(Tmp,0)
+
+ if(length(Cmd)>0){
+ if(length(Cmd)>=3){
+ polygon(P,col=Cmd[[1]],border=Cmd[[2]],density=Cmd[[3]])
+ }
+ else{
+ polygon(P,col=Cmd[[1]],border=Cmd[[2]])
+ }
+ next
+ } # 101129 to here
+ Ndm<-Dataindex(P)
+ for (J in Looprange(1,Nrow(Ndm))){
+ Q<-P[Ndm[J,1]:Ndm[J,2],]
+ if(Nrow(Q)==1){
+ Tmp<-seq(1,Ncol(Q),by=2)
+ for (K in Tmp){
+ Pt<-Q[K:(K+1)]
+ points(Pt[1],Pt[2],col=color)#taka101111
+ }
+ }
+ else{
+ lines(Q[,1],Q[,2],col=color,lwd=width)#taka101111
+ }
+ }
+ }
+ }
+ par(new=FALSE)
+}
+
+######################################
+
+# 3D
+
+#################################
+
+# 10.08.16
+CameracoordCurve<- function(Curve){
+ Out<- c()
+ for(J in Looprange(1,Nrow(Curve))){
+ P<- Ptcrv(J,Curve) #P=Curve(J,:);
+ Tmp<- P-FocusPoint
+ X1<- Tmp[1]; Y1<- Tmp[2]; Z1<- Tmp[3]
+ Tmp<- EyePoint-FocusPoint
+ E1<- Tmp[1]; F1<- Tmp[2]; G1<- Tmp[3]
+ Ca<- E1/sqrt(E1^2+F1^2)
+ Sa<- F1/sqrt(E1^2+F1^2)
+ X2<- X1*Ca+Y1*Sa; Y2<- -X1*Sa+Y1*Ca; Z2<- Z1
+ E2<- E1*Ca+F1*Sa; F2<- -E1*Sa+F1*Ca; G2<- G1
+ Cb<- E2/sqrt(E2^2+G2^2)
+ Sb<- G2/sqrt(E2^2+G2^2)
+ X3<- X2*Cb+Z2*Sb; Y3<- Y2; Z3<- -X2*Sb+Z2*Cb
+ E3<- E2*Cb+G2*Sb; F3<- F2; G3<- -E2*Sb+G2*Cb
+ Xz<- X3
+ Yz<- E3/(E3-X3)*Y3
+ Zz<- E3/(E3-X3)*Z3
+ Out<- rbind(Out,c(Yz,Zz,Xz))
+ }
+ rownames(Out)<- 1:Nrow(Out)
+ return(Out)
+}
+
+#########################################
+
+#100815
+CameraCurve<- function(Curve){
+ Eps<- 10^(-6)
+ for (I in Looprange(1,Nrow(Curve))){
+ P<- Curve[I,]
+ x<- P[1]; y<- P[2]; z<- P[3]
+ if(x!=Inf){
+ Tmp<- Perspt(P)
+ if(I==1){
+ AnsL<- rbind(c(),Tmp)
+ }else{
+ Tmp1<- AnsL[Nrow(AnsL),]
+ if(Tmp1[1]==Inf || Norm(Tmp-Tmp1)>Eps){
+ AnsL<- rbind(AnsL,Tmp)
+ }
+ }
+ }else{
+ AnsL<- rbind(AnsL,c(Inf,Inf))
+ }
+ }
+ rownames(AnsL)<- 1:Nrow(AnsL)
+ return(AnsL)
+}
+
+######################################
+
+Cancoordpara<- function(P){ # 18.02.15
+ Xz<- P[1]
+ Yz<- P[2]
+ Zz<- P[3]
+ X<- -Xz*sin(PHI)-Yz*cos(PHI)*cos(THETA)+Zz*cos(PHI)*sin(THETA)
+ Y<- Xz*cos(PHI)-Yz*sin(PHI)*cos(THETA)+Zz*sin(PHI)*sin(THETA)
+ Z<- Yz*sin(THETA)+Zz*cos(THETA)
+ Out<- c(X,Y,Z)
+ return(Out)
+}
+
+######################################
+
+Cancoordpers<- function(P){
+ Tmp<- EyePoint-FocusPoint
+ E1<- Tmp[1]; F1<- Tmp[2]; G1<- Tmp[3]
+ Ca<- E1/sqrt(E1^2+F1^2)
+ Sa<- F1/sqrt(E1^2+F1^2)
+ E2<- E1*Ca+F1*Sa; F2<- -E1*Sa+F1*Ca; G2<- G1
+ Cb<- E2/sqrt(E2^2+G2^2)
+ Sb<- G2/sqrt(E2^2+G2^2)
+ E3<- E2*Cb+G2*Sb; F3<- F2; G3<- -E2*Sb+G2*Cb
+ Xz<- P[3]; Yz<- P[1]; Zz<- P[2]
+ X3<- Xz; Y3<- Yz*(E3-Xz)/E3; Z3<- Zz*(E3-Xz)/E3
+ X2<- X3*Cb-Sb*Z3; Y2<- Y3; Z2<- Cb*Z3+Sb*X3
+ X1<- X2*Ca-Sa*Y2; Y1<- Ca*Y2+Sa*X2; Z1<- Z2
+ X<- X1+FocusPoint[1]
+ Y<- Y1+FocusPoint[2]
+ Z<- Z1+FocusPoint[3]
+ Out<- c(X,Y,Z)
+ return(Out)
+}
+
+#######################################
+
+Embed<- function(...){
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ Pd3<- varargin[[1]]
+ if(Mixtype(Pd3)==1){
+ Pd3<- list(Pd3)
+ }
+ else if(Mixtype(Pd3)==3){
+ Tmp<- list();
+ for(I in Looprange(1,length(Pd3))){
+ Tmp<- c(Tmp,Pd3[[I]])
+ }
+ Pd3<- Tmp
+ }
+ Tmpf=varargin[[2]]
+ if(mode(Tmpf)=="character"){
+ Tmp<- varargin[[3]]
+ Tmp1<- gsub("c(","(",Tmp,fixed=TRUE)
+ Vstr<- gsub(")",")",Tmp1,fixed=TRUE)
+ Str<- paste("Tmpfn<- function",Vstr,"{",Tmpf,"}",sep="")
+ eval(parse(text=Str))
+ }
+ else{
+ Tmpfn<- Tmpf
+ }
+ Out<- list()
+ for(I in Looprange(1,length(Pd3))){
+ PD<- Pd3[[I]]
+ Ans<- c()
+ for(J in Looprange(1,Nrow(PD))){
+ P<- PD[J,]
+ Tmp<- Tmpfn(P[1],P[2])
+ Ans<- rbind(Ans,Tmp)
+ }
+ Out<- c(Out, list(Ans))
+ }
+ if(length(Out)==1){
+ Out<- Out[[1]]
+ }
+ return(Out)
+}
+
+#######################
+# 10.08.17
+# 14.03.30
+Facesdata<- function(...){
+ varargin<-list(...)
+ Nargs<- length(varargin)
+ FL<- varargin[[1]]
+ PT<- varargin[[length(varargin)]]
+ Tmp<-grep("para",PT,fixed=TRUE)
+ if(length(Tmp)>0){
+ Ptype<- 1
+ }else{
+ Ptype<- -1
+ }
+ if(Nargs==2){
+ CLadd<- list()
+ }else{
+ CLadd<- varargin[[2]]
+ }
+ NohiddenL<- list()
+ HiddenL<- list()
+ Eps<- 10^(-4)
+ if(length(CLadd)>0){
+ if(mode(CLadd)=="numeric"){
+ C<- list()
+ if(Nrow(CLadd)>1){
+ for (I in Looprange(1,Nrow(CLadd))){
+ C<- c(C,list(CLadd[I,]))
+ }
+ }else{
+ I<- 1
+ while (I<=Ncol(CLadd)){
+ C<- c(C,list(CLadd[1,I:(I+2)]))
+ I<- I+3
+ }
+ }
+ CrvL<- list(C)
+ }else if(mode(CLadd[[1]])=="numeric"){
+ CrvL<- list()
+ for (J in Looprange(1,length(CL))){
+ Ctmp<- CLadd[[J]]
+ C<- list()
+ if(Nrow(Ctmp)>1){
+ for (I in Looprange(1,Nrow(Ctmp))){
+ C<- c(C,list(Ctmp[I,]))
+ }
+ }else{
+ I<- 1
+ while(I<=Ncol(Ctmp)){
+ C<- c(C,list(Ctmp[1,I:(I+2)]))
+ I<- I+3
+ }
+ }
+ CrvL<- c(CrvL,list(C))
+ }
+ }else{
+ CrvL<- CLadd
+ }
+ }else{
+ CrvL<- list()
+ }
+ Out<- MakeveLfaceL(FL)
+ VELNO<<- Out[[1]]
+ VELHI<<- list()
+ for (I in Looprange(1,length(CrvL))){
+ Tmp<- CrvL[[I]]
+ for (J in Looprange(1,length(Tmp)-1)){
+ Edge<- list(Tmp[J],Tmp[J+1])
+ Ntmp<- length(VELNO)
+ VELNO(Ntmp+1)<<- list(Edge,0,Ntmp+1)
+ }
+ }
+ FaceL<- Out[[2]]
+ Tmp<- grep("raw",PT,fixed=TRUE)
+ if(length(Tmp)==0){
+ for (Nf in Looprange(1,length(FaceL))){
+ Face<- FaceL[[Nf]]
+ Menkakusi2(Face,Nf,Ptype)
+ }
+ }
+ for (I in Looprange(1,length(VELNO))){
+ Edge<- Op(1,VELNO[[I]])
+ if(Norm(Edge[[1]]-Edge[[2]])>Eps){
+ NohiddenL<- c(NohiddenL,list(Spaceline(Edge)))
+ }
+ }
+ EdgeL<- list() # from 13.03.30
+ for(K in Looprange(1,length(VELHI))){
+ Edge<- Op(1,VELHI[[K]])
+ P<- Edge[[1]]; Q<- Edge[[2]]
+ if(Norm(P-Q)>Eps){
+ EdgeL<- c(EdgeL,list(Edge))
+ }
+ }
+ for(K in Looprange(1,length(EdgeL))){
+ Edge<- EdgeL[[K]]
+ P<- Edge[[1]]; Q<- Edge[[2]]
+ Cflg<- 0
+ for(J in Looprange(K+1,length(EdgeL))){
+ Ej<- EdgeL[[J]]
+ Pj<- Ej[[1]]; Qj<- Ej[[2]]
+ if(Norm(Crossprod(Q-P,Qj-Pj))>Eps){
+ next
+ }
+ if(Norm(Q-Pj)<Eps){
+ EdgeL[[J]]<- list(P,Qj)
+ Cflg<- 1
+ break
+ }
+ if(Norm(P-Qj)<Eps){
+ EdgeL[[J]]=list(Q,Pj)
+ Cflg<- 1
+ break
+ }
+ }
+ if(Cflg==0){
+ HiddenL<- c(HiddenL,list(Spaceline(Edge)))
+ }
+ } # upto 14.03.30
+ PHHIDDENDATA<<- HiddenL
+ return(NohiddenL)
+}
+
+##############################
+# 2014.03.31
+
+PhHiddenData<- function(){
+ PHHIDDENDATA
+}
+
+########## Old Fullform ( Check the case of Polygon )####################
+
+Fullformfunc<- function(FdL){# Out=Fullformfunc(FdL)
+ Out<- list(Op(1,FdL))
+ N<- Mixlength(FdL)
+ for (Jrg in Looprange(1,N)){
+ Tmp<- Stripblanks(Op(Jrg,FdL))
+ Tmp1<- grep("=c(",Tmp,fixed=TRUE)
+ if(length(Tmp1)>0){
+ break
+ }
+ }
+ Urg<- Stripblanks(Op(Jrg,FdL))
+ StrV<- strsplit(Urg,"=",fixed=TRUE)[[1]]
+ Uname<- StrV[1]
+ Vrg<- Stripblanks(Op(Jrg+1,FdL))
+ StrV<- strsplit(Vrg,"=",fixed=TRUE)[[1]]
+ Vname<- StrV[1]
+ if(Jrg==2){
+ Tmp<- Stripblanks(Op(1,FdL))
+ StrV<- strsplit(Tmp,"=",fixed=TRUE)[[1]]
+ Zf<- StrV[2]
+ Tmp<- list(Uname,Vname,Zf,Urg,Vrg)
+ Out<- c(Out,Tmp)
+ }else if(Jrg==4){
+ Tmp<- Stripblanks(Op(1,FdL))
+ StrV<- strsplit(Tmp,"=",fixed=TRUE)[[1]]
+ Zf<- StrV[2]
+ Tmp<- Stripblanks(Op(2,FdL))
+ StrV<- strsplit(Tmp,"=",fixed=TRUE)[[1]]
+ Xname<- StrV[1]
+ Xf<- StrV[2]
+ Tmp<- Stripblanks(Op(3,FdL))
+ StrV<- strsplit(Tmp,"=",fixed=TRUE)[[1]]
+ Yname<- StrV[1]
+ Yf<- StrV[2]
+ Tmp<- gsub(Xname,paste("(",Xf,")",sep=""),Zf,fixed=TRUE)
+ Zf<- gsub(Yname,paste("(",Yf,")",sep=""),Tmp,fixed=TRUE)
+ Tmp<- list(Xf,Yf,Zf,Urg,Vrg)
+ Out<- c(Out,Tmp)
+ }else{
+ Tmp<- Stripblanks(Op(2,FdL))
+ StrV<- strsplit(Tmp,"=",fixed=TRUE)[[1]]
+ Xf<- StrV[2]
+ Tmp<- Stripblanks(Op(3,FdL))
+ StrV<- strsplit(Tmp,"=",fixed=TRUE)[[1]]
+ Yf<- StrV[2]
+ Tmp<- Stripblanks(Op(4,FdL))
+ StrV<- strsplit(Tmp,"=",fixed=TRUE)[[1]]
+ Zf<- StrV[2]
+ Tmp<- list(Xf,Yf,Zf,Urg,Vrg)
+ Out<- c(Out,Tmp)
+ }
+ DrwS<- "enws"
+ BdyL<- c()
+ for (I in Looprange(Jrg+2,Mixlength(FdL))){
+ Tmp<- Op(I,FdL)
+ if(mode(Tmp)=="character"){
+ if(length(Tmp)==0){
+ Tmp<- " "
+ }
+ DrwS<- Tmp
+ }
+ if(mode(Tmp)=="numeric" && Ncol(Tmp)>1){
+ BdyL<- Tmp
+ }
+ }
+ Tmp<- list(DrwS,BdyL)
+ Out<- c(Out,Tmp)
+ return(Out)
+}
+
+####################################
+
+Initangle<- function (){
+ PHI<<- 30*pi/180
+ THETA<<- 60*pi/180
+}
+
+##########################
+
+Invparapt<- function(...){
+ varargin<- list(...)
+ Eps<- 10^(-4)
+ Fk<- varargin[[length(varargin)]]
+ NFk<- Numptcrv(Fk)
+ Tmp<- varargin[[1]]
+ if(mode(Tmp)=="numeric" && length(Tmp)==1){ # debug
+ Ph<- Tmp
+ Fh<- varargin[[2]]
+ }else{
+ Fh<- Projpara(Fk)
+ if(NFk>2){
+ Tmp1<- Nearestpt(Tmp,Fh)
+ Ph<- Tmp1[[2]]
+ }else{
+ Ah<- Ptcrv(1,Fh); Bh=Ptcrv(2,Fh)
+ V1<- Tmp-Ah; V2<- Bh-Ah
+ Tmp1<- Crossprod(V1,V2)
+ if(abs(Tmp1)>Eps){
+ print("Not on the line")
+ return(c())
+ }else{
+ Ph<- Dotprod(V1,V2)/Norm(V2)^2+1
+ }
+ }
+ }
+ if(NFk>2){
+ N<- trunc(Ph)
+ S0<- Ph-N
+ if(Ph>Numptcrv(Fh)-Eps){
+ Out<- list(Ptend(Fk),Numptcrv(Fh))
+ return(Out)
+ }
+ }else{
+ N<- 1
+ S0<- Ph-1
+ }
+ Ak<- Ptcrv(N,Fk); Bk=Ptcrv(N+1,Fk)
+ Ah<- Ptcrv(N,Fh); Bh=Ptcrv(N+1,Fh)
+ Ph<- (1-S0)*Ah+S0*Bh
+ T2<- S0
+ Pk<- (1-T2)*Ak+T2*Bk
+ Out<- list(Pk,N+T2)
+ return(Out)
+}
+
+#################################
+
+#100815
+Invperspt<- function(...){
+ varargin<-list(...)
+ Eps<- 10^(-4)
+ Fk<- varargin[[length(varargin)]]
+ NFk<- Numptcrv(Fk)
+ Tmp<- varargin[[1]]
+ if(mode(Tmp)=="numeric" && length(Tmp)==1){
+ Ph<- varargin[[1]]
+ Fh<- varargin[[2]]
+ }else{
+ Fh<- Projpers(Fk)
+ if(NFk>2){
+ Tmp1<- Nearestpt(Tmp,Fh)
+ Ph<- Tmp1[[2]]
+ }else{
+ Ah<- Ptcrv(1,Fh); Bh<- Ptcrv(2,Fh)
+ V1<- Tmp-Ah; V2<- Bh-Ah
+ Tmp1<- Crossprod(V1,V2)
+ if(abs(Tmp1)>Eps){
+ print("Not on the line")
+ Out<- c()
+ return(Out)
+ }else{
+ Ph<- Dotprod(V1,V2)/Norm(V2)^2+1# 09.11.12
+ }
+ }
+ }
+ if(NFk>2){
+ N<- trunc(Ph)
+ S0<- Ph-N
+ if(Ph>Numptcrv(Fh)-Eps){
+ Out<- list(Ptend(Fk),Numptcrv(Fh))
+ return(Out)
+ }
+ }else{
+ N<- 1
+ S0<- Ph-1 # 09.11.12
+ }
+ Ak<- Ptcrv(N,Fk); Bk<- Ptcrv(N+1,Fk)
+ Ah<- Ptcrv(N,Fh); Bh<- Ptcrv(N+1,Fh)
+ Ph<- (1-S0)*Ah+S0*Bh
+ Phc<- Cancoordpers(c(Ph,0))
+ Ahc<- Cancoordpers(c(Ah,0))
+ Bhc<- Cancoordpers(c(Bh,0))
+ Vp<- Phc-EyePoint
+ Va<- Ak-EyePoint
+ AB<- Bk-Ak
+ Cp<- Crossprod(Vp,AB)
+ Nmr<- Crossprod(Va,Vp)
+ Mx<- max(abs(Cp))
+ if(abs(Cp[1])==Mx){
+ T2<- Nmr[1]/Cp[1]
+ }else if(abs(Cp[2])==Mx){
+ T2<- Nmr[2]/Cp[2]
+ }else{
+ T2<- Nmr[3]/Cp[3]
+ }
+ Pk<- (1-T2)*Ak+T2*Bk
+ Out<- list(Pk,N+T2)
+ return(Out)
+}
+
+#########################
+
+Kukannozoku<- function(Jokyo,KukanL){
+ Eps<- 10^(-6)
+ N<- Nrow(KukanL)
+ T1<- Jokyo[1]; T2<- Jokyo[2]
+ Tmp<- KukanL[1,]
+ T1<- max(T1,Tmp[1])
+ Tmp<- KukanL[N,]
+ T2<- min(T2,Tmp[2])
+ Res<- c()
+ Flg<- 0
+ for (I in Looprange(1,N)){
+ Ku<- KukanL[I,]
+ if(Flg==0){
+ if(Ku[2]<T1){
+ Res<- rbind(Res,Ku)
+ }else{
+ Flg<- 1
+ if(Ku[1]<T1-Eps){
+ Tmp<- c(Ku[1],T1)
+ Res<- rbind(Res,Tmp)
+ }
+ if(Ku[2]>T2+Eps){
+ Tmp<- c(T2,Ku[2])
+ Res<- rbind(Res,Tmp)
+ }
+ }
+ }else if(Flg==1){
+ if(Ku[2]<T2){
+ next
+ }else{
+ Flg<- 2
+ if(Ku[1]<T2-Eps){
+ Ku<- c(T2,Ku[2])
+ }
+ Res<- rbind(Res,Ku)
+ }
+ }else{
+ Res<- rbind(Res,Ku)
+ }
+ }
+ return(Res)
+}
+
+########################################
+
+Makeskeletondata<- function(Obj2L,Plt2L,R0,Eps2){
+ Eps<- 10.0^(-3)
+ Dmat<- c()
+ Dind<- c()
+ for (I in Looprange(1,Mixlength(Plt2L))){
+ Dt<- Op(I,Plt2L)
+ N1<- Nrow(Dmat)+1
+ if(Nrow(Dmat)==0){
+ Dmat<- Dt
+ }else{
+ Dmat<- rbind(Dmat,Dt)
+ }
+ N2<- Nrow(Dmat)
+ Dind<- c(Dind,N1,N2)
+ }
+ Dind<- matrix(Dind,ncol=2,byrow=TRUE)
+ Nind<- Nrow(Dind)
+ Allres<- list()
+ for (Nobj in Looprange(1,Mixlength(Obj2L))){
+ Plt2<- Op(Nobj,Obj2L)
+ PhL<- Plt2[,1:2]
+ ClipL<- c()
+ for (Ns in Looprange(1,Nrow(PhL)-1)){
+ P1<- PhL[Ns:(Ns+1),]
+ for (I in Looprange(1,Nrow(Dind))){
+ Tmp<- Dmat[Dind[I,1]:Dind[I,2],]
+ P2<- Tmp[,1:2]
+ KC<- IntersectcrvsPp(P1,P2,Eps)
+ if(Mixlength(KC)>0){
+ for (J in 1:Mixlength(KC)){
+ P<- Op(1,Op(J,KC))
+ Tmp<- Op(2,Op(J,KC))
+ if(Tmp<1+Eps && Ns==1){
+ next
+ }
+ if(Tmp>Numptcrv(P1)-Eps && Ns==(Nrow(PhL)-1)){
+ next
+ }
+ N1<- Ns
+ N2<- Op(3,Op(J,KC))
+ Pa<- Plt2[N1,1:2]
+ Za<- Plt2[N1,3]
+ Pb<- Plt2[N1+1,1:2]
+ Zb<- Plt2[N1+1,3]
+ if(Norm(Pa-Pb)<Eps){
+ next
+ }
+ T1<- Norm(Pa-P)/Norm(Pa-Pb)
+ Z1<- (1-T1)*Za+T1*Zb
+ Tmp<- Dmat[Dind[I,1]:Dind[I,2],]
+ Pa<- Tmp[N2,1:2]
+ Za<- Tmp[N2,3]
+ Pb<- Tmp[N2+1,1:2]
+ Zb<- Tmp[N2+1,3]
+ if((Norm(Pa-Pb)<Eps)){
+ next
+ }
+ T2<- Norm(Pa-P)/Norm(Pa-Pb)
+ Z2<- (1-T2)*Za+T2*Zb
+ if(Z1<Z2-Eps2){
+ if(Nrow(ClipL)==0){
+ Tmp<- 1
+ }else{
+ Tmp1<- ClipL[,1]-P[1]
+ Tmp2<- ClipL[,2]-P[2]
+ Tmp3<- Tmp1^2+Tmp2^2
+ Tmp<- min(Tmp3)
+ }
+ if(Tmp>Eps^2){
+ Tmp1<- P1[2,]-P1[1,]
+ Tmp2<- Pb-Pa
+ Tmp3<- Dotprod(Tmp1,Tmp2)
+ Tmp3<- Tmp3/Norm(Tmp1)/Norm(Tmp2)
+ Tmp<- 1-0.5*Tmp3^2
+ ClipL<- rbind(ClipL,c(P,N1,T1,R0/Tmp))
+ }
+ }
+ }
+ }
+ }
+ }
+ Te<- Nrow(Plt2)
+ KukanL<- rbind(c(),c(1.0,Te))
+ P1<- PhL
+ if(Nrow(ClipL)>0){
+ for (I in 1:Nrow(ClipL)){
+ P<- ClipL[I,1:2]
+ NN<- ClipL[I,3]
+ T<- NN+ClipL[I,4]
+ R<- ClipL[I,5]
+ Flg<- 0
+ for (J in NN:1){
+ Q<- Pointoncurve(J,P1)
+ if(Norm(P-Q)<R){
+ next
+ }
+ Flg<- 1
+ break
+ }
+ if(Flg==0){
+ T1<- 1
+ }else{
+ T1<- J; T2<- T
+ H<- T2-T1
+ for (N in 1:10){
+ H<- H*0.5
+ Q<- Pointoncurve(T1+H,P1)
+ if(Norm(P-Q)<R){
+ T2<- T2-H
+ }else{
+ T1<- T1+H
+ }
+ }
+ }
+ Ku<- c(T1)
+ Flg<- 0
+ for (J in Looprange(NN+1,Te)){
+ Q<- Pointoncurve(J,P1)
+ if(Norm(P-Q)<R){
+ next
+ }
+ Flg<- 1
+ break
+ }
+ if(Flg==0){
+ T2<- Te
+ }else{
+ T1<- T; T2<- J
+ H<- T2-T1
+ for (N in 1:10){
+ H<- H*0.5
+ Q<- Pointoncurve(T1+H,P1)
+ if(Norm(P-Q)<R){
+ T1<- T1+H
+ }else{
+ T2<- T2-H
+ }
+ }
+ }
+ Ku<- c(Ku,T2)
+ KukanL<- Kukannozoku(Ku,KukanL)
+ }
+ }
+ Res<- list()
+ for (I in Looprange(1,Nrow(KukanL))){
+ T1<- KukanL[I,1]; N1<- trunc(T1)
+ T2<- KukanL[I,2]; N2<- trunc(T2)
+ PtL<- list()
+ if(T1-N1<1-Eps){
+ Tmp<- Pointoncurve(T1,P1)
+ PtL<- list(Tmp)
+ }
+ for (J in Looprange(N1+1,N2)){
+ Tmp<- Pointoncurve(J,P1)
+ PtL<- c(PtL,list(Tmp))
+ }
+ if(T2-N2>Eps){
+ Tmp<- Pointoncurve(T2,P1)
+ PtL<- c(PtL,list(Tmp))
+ }
+ Res<- c(Res,list(Listplot(PtL)))
+ }
+ Allres<- c(Allres,Res)
+ }
+ return(Allres)
+}
+
+#########################
+
+#100815
+Makeskeletonpersdata<- function(Obj2L,Plt2L,R0,Eps2){
+ Eps<- 10.0^(-3)
+ Dmat<- c()
+ Dind<- c()
+ for (I in Looprange(1,Mixlength(Plt2L))){
+ Dt<- Op(I,Plt2L)
+ N1<- Nrow(Dmat)+1
+ Dmat<- rbind(Dmat,Dt)
+ N2<- Nrow(Dmat)
+ Dind<- rbind(Dind,c(N1,N2))
+ }
+ Nind<- Nrow(Dind)
+ Allres<- list()
+ for (Nobj in Looprange(1,Mixlength(Obj2L))){
+ Plt2<- Op(Nobj,Obj2L)
+ PhL<- Plt2[,1:2]
+ ClipL<- c()
+ for (Ns in Looprange(1,Nrow(PhL)-1)){
+ P1<- PhL[Ns:(Ns+1),]
+ for (I in Looprange(1,Nrow(Dind))){
+ Tmp<- Dmat[Dind[I,1]:Dind[I,2],]
+ P2<- Tmp[,1:2]
+ KC<- IntersectcrvsPp(P1,P2,Eps)
+ if(Mixlength(KC)>0){
+ for (J in Looprange(1,Mixlength(KC))){#
+ P<- Op(1,Op(J,KC))
+ Tmp<- Op(2,Op(J,KC))
+ if(Tmp<(1+Eps) && Ns==1){
+ next
+ }
+ if(Tmp>Numptcrv(P1)-Eps && Ns==(Nrow(PhL)-1)){
+ next
+ }
+ N1<- Ns
+ N2<- Op(3,Op(J,KC))
+ Pa<- Plt2[N1,1:2]
+ Za<- Plt2[N1,3]
+ Pb<- Plt2[N1+1,1:2]
+ Zb<- Plt2[N1+1,3]
+ if(Norm(Pa-Pb)<Eps){
+ next
+ }
+ T1<- Norm(Pa-P)/Norm(Pa-Pb)#norm(Pa-P)/norm(Pa-Pb)
+ Pka<- Cancoordpers(c(Pa[1],Pa[2],Za))
+ Pkb<- Cancoordpers(c(Pb[1],Pb[2],Zb))
+ if(T1>1-Eps){
+ Pk<- Pkb
+ }else{
+ Tmp1<- Listplot(c(Pa,Pb))
+ Tmp2<- Spaceline(c(Pka,Pkb))
+ Tmp<- Invperspt(1+T1,Tmp1,Tmp2)
+ Pk<- Op(1,Tmp)
+ }
+ Z1<- Zperspt(Pk)
+ Tmp<- Dmat[Dind[I,1]:Dind[I,2],]
+ Pa<- Tmp[N2,1:2]
+ Za<- Tmp[N2,3]
+ Pb<- Tmp[N2+1,1:2]
+ Zb<- Tmp[N2+1,3]
+ if(Norm(Pa-Pb)<Eps){
+ next
+ }
+ T2<- Norm(Pa-P)/Norm(Pa-Pb)
+ Pka<- Cancoordpers(c(Pa[1],Pa[2],Za))
+ Pkb<- Cancoordpers(c(Pb[1],Pb[2],Zb))
+ if(T2>(1-Eps)){
+ Pk<- Pkb
+ }else{
+ Tmp1<- Listplot(c(Pa,Pb))
+ Tmp2<- Spaceline(c(Pka,Pkb))
+ Tmp<- Invperspt(1+T2,Tmp1,Tmp2)
+ Pk<- Op(1,Tmp)
+ }
+ Z2<- Zperspt(Pk)
+ if(Z1<(Z2-Eps2)){
+ if(length(ClipL)==0){
+ Tmp<- 1
+ }else{
+ Tmp1<- ClipL[,1]-P[1]
+ Tmp2<- ClipL[,2]-P[2]
+ Tmp3<- Tmp1^2+Tmp2^2
+ Tmp<- min(Tmp3)
+ }
+ if(Tmp>Eps^2){
+ Tmp1<- P1[2,]-P1[1,]
+ Tmp2<- Pb-Pa
+ Tmp3<- Dotprod(Tmp1,Tmp2)
+ Tmp3<- Tmp3/Norm(Tmp1)/Norm(Tmp2)
+ Tmp<- 1-0.5*Tmp3^2
+ ClipL<- rbind(ClipL,c(P,N1,T1,R0/Tmp))
+ }
+ }
+ }
+ }
+ }
+ }
+ Te<- Nrow(Plt2)
+ KukanL<- rbind(c(),c(1.0,Te))
+ P1<- PhL
+ if(Nrow(ClipL)>0){
+ for (I in Looprange(1,Nrow(ClipL))){
+ P<- ClipL[I,1:2]
+ NN<- ClipL[I,3]
+ T<- NN+ClipL[I,4]
+ R<- ClipL[I,5] #added 10.08.17
+ Flg<- 0
+ for (J in NN:1){
+ Q<- Pointoncurve(J,P1)
+ if(Norm(P-Q)<R){#(norm(P-Q)<R)
+ next
+ }
+ Flg<- 1
+ break
+ }
+ if(Flg==0){
+ T1<- 1
+ }else{
+ T1<- J; T2<- T
+ H<- T2-T1
+ for (N in 1:10){
+ H<- H*0.5
+ Q<- Pointoncurve(T1+H,P1)
+ if(Norm(P-Q)<R){ # norm(P-Q)<R
+ T2<- T2-H
+ }else{
+ T1<- T1+H
+ }
+ }
+ }
+ Ku<- c(T1)#Ku<- [T1]
+ Flg<- 0
+ for (J in Looprange(NN+1,Te)){
+ Q<- Pointoncurve(J,P1)
+ if(Norm(P-Q)<R){
+ next#continue
+ }
+ Flg<- 1
+ break
+ }
+ if(Flg==0){
+ T2<- Te
+ }else{
+ T1<- T; T2<- J
+ H<- T2-T1
+ for (N in 1:10){
+ H<- H*0.5
+ Q<- Pointoncurve(T1+H,P1)
+ if(Norm(P-Q)<R){
+ T1<- T1+H
+ }else{
+ T2<- T2-H
+ }
+ }
+ }
+ Ku<- c(Ku,T2)#[Ku,T2]
+ KukanL<- Kukannozoku(Ku,KukanL)
+ }
+ }
+ Res<- list()#[]
+ for (I in Looprange(1,Nrow(KukanL))){#(I=1:size(KukanL,1))
+ T1<- KukanL[I,1]; N1<- trunc(T1)
+ T2<- KukanL[I,2]; N2<- trunc(T2)
+ PtL<- list()#[]
+ if(T1-N1<1-Eps){
+ Tmp<- Pointoncurve(T1,P1)
+ PtL<- list(Tmp)#100816c(PtL,list(Tmp)) PtL<- MixS(Tmp)
+ }
+ for (J in Looprange(N1+1,N2)){
+ Tmp<- Pointoncurve(J,P1)
+ PtL<- c(PtL,list(Tmp))#Mixadd(PtL,Tmp)
+ }
+ if(T2-N2>Eps){
+ Tmp<- Pointoncurve(T2,P1)
+ PtL<- c(PtL,list(Tmp))#Mixadd(PtL,Tmp)
+ }
+ Res<- c(Res,list(Listplot(PtL)))#Res<- Mixadd(Res,Listplot(PtL))
+ }
+ Allres<- c(Allres,Res)#Allres<- Mixjoin(Allres,Res)
+ }
+ return(Allres)
+}
+
+##############################3
+
+MakeveLfaceL<- function(VfL){
+# // Out format
+# // VeL Edge, Face num(as numlist), VeL num
+# // FL Face (Vertexs)
+ Eps<- 10^(-4)
+ Tmp<- VfL[[length(VfL)]]
+ Tmp1<- Tmp[[1]]
+ if(mode(Tmp1)=="numeric"){
+ FvL<- list(VfL)
+ }else{
+ FvL<- VfL
+ }
+ EL<- list(); FL<- list()
+ for (Nn in Looprange(1,length(FvL))){
+ Tmp<- FvL[[Nn]]
+ VL<- Tmp[[1]]
+ if(length(VL)>0){
+ FnL<- Tmp[[2]]
+ FaceL<- list()
+ for (I in Looprange(1,length(FnL))){
+ Tmp1<- FnL[[I]]
+ PtL<- list()
+ for (J in Looprange(1,length(Tmp1))){
+ Tmp2<- Tmp1[[J]]
+ PtL[[J]]<- VL[[Tmp2]]
+ }
+ FaceL[[I]]<- PtL
+ }
+ }else{
+ FaceL<- list(Tmp[[2]])
+ }
+ for (I in Looprange(1,length(FaceL))){
+ Face<- FaceL[[I]]
+ Face<- c(Face,list(Face[[1]]))
+ FL<- c(FL,list(Face))
+ for (J in Looprange(1,length(Face)-1)){
+ Edge<- list(Face[[J]],Face[[J+1]])
+ Flg<- 0
+ for (K in Looprange(1,length(EL))){
+ Tmp<- EL[[K]]
+ Tmp1<- Tmp[[1]]
+ Tmp2<- Norm(Edge[[1]]-Tmp1[[1]])+Norm(Edge[[2]]-Tmp1[[2]])
+ Tmp3<- Norm(Edge[[1]]-Tmp1[[2]])+Norm(Edge[[2]]-Tmp1[[1]])
+ if(Tmp2<Eps || Tmp3<Eps){#(
+ Tmp<- EL[[K]]
+ Tmp1<- Tmp[[1]]
+ Tmp2<- c(Tmp[[2]],length(FL))
+ EL[[K]]<- list(Tmp1,Tmp2,K)
+ Flg<- 1
+ break
+ }
+ }
+ if(Flg==0){
+ Ntmp<- length(EL)
+ EL[[Ntmp+1]]<- list(Edge,c(length(FL)),Ntmp+1)
+ }
+ }
+ }
+ }
+ Out<- list(EL,FL)
+ return(Out)
+}
+
+###########################
+#// 09.10.29
+#// 09.11.15
+
+Menkakusi2<- function(Face,Nf,Ptype){
+# global THETA PHI EyePoint FocusPoint VELNO VELHI
+ Eps0<- 10^(-6)
+ Eps<- 10^(-4)
+ Tmp1<- Face[[1]]-Face[[2]]
+ Tmp2<- Face[[3]]-Face[[2]]
+ if(Norm(Tmp1)<Eps || Norm(Tmp2)<Eps){
+ return()
+ }
+ Vec<- 1/Norm(Tmp1)/Norm(Tmp2)*Crossprod(Tmp1,Tmp2)
+ if(Norm(Vec)<Eps){
+ return()
+ }
+ if(Ptype== -1){
+ W<- EyePoint
+ Tmp<- Dotprod(Vec,W-Face[[1]])
+ }else{
+ W<- c(sin(THETA)*cos(PHI),sin(THETA)*sin(PHI),cos(THETA))
+ W<- 100*W
+ Tmp<- Dotprod(Vec,W-Face[[1]])
+ }
+ if(abs(Tmp)<Eps){
+ return()
+ }
+ if(Tmp<-Eps){
+ Vec<- -Vec
+ }
+ if(Ptype==-1){
+ G1<- Projpers(Spaceline(Face))
+ }else{
+ G1<- Projpara(Spaceline(Face))
+ }
+ VL<- list()
+ for (I in Looprange(1,Numptcrv(G1))){
+ VL[[I]]<- Ptcrv(I,G1)
+ }
+ Out1L<- list()
+ Out2L<- VELHI
+ for (N in Looprange(1,length(VELNO))){
+ Out1<- list()
+ Out2<- list()
+ Tmp<- VELNO[[N]]
+ Edge<- Tmp[[1]]
+ Ne<- Tmp[[2]]
+ NNe<- Tmp[[3]]
+ if(Member(Nf,Ne)){
+ Out1L<- c(Out1L, list(list(Edge,Ne,NNe)))
+ next
+ }
+ if(Ptype==-1){
+ PtA<- Perspt(Edge[[1]])
+ PtB<- Perspt(Edge[[2]])
+ }else{
+ PtA<- Parapt(Edge[[1]])
+ PtB<- Parapt(Edge[[2]])
+ }
+ if(Norm(PtA-PtB)<Eps){
+ next
+ }
+ Bdy<- list(G1)
+ V<- PtB-PtA
+ TenL<- KoutenList(PtA,V,Bdy)
+ Nten<- length(TenL)
+ if(Nten==0){ # debug 10.08.17
+ Out1L<- c(Out1L,list(list(Edge,Ne,NNe)))
+ next
+ }
+ Te<- 0
+ Pe3<- Edge[[1]]
+ if(Ptype==-1){
+ Tmp1<- Perspt(Pe3)
+ Tmp<- Invperspt(Tmp1,Spaceline(Face))
+ }else{
+ Tmp1<- Parapt(Pe3)
+ Tmp<- Invparapt(Tmp1,Spaceline(Face))
+ }
+ Qe3<- Tmp[[1]]
+ Flg<- 0
+ for (I in Looprange(1,Nten)){
+ TenP<- TenL[[I]]
+ Ts<- TenP[[1]]
+ P<- TenP[[2]]
+ if(Ts< -Eps){
+ next
+ }
+ Eline<- Spaceline(Edge)
+ if(Ptype==-1){
+ Tmp<- Invperspt(P,Eline)
+ Tmp1<- Invperspt(P,Spaceline(Face))
+ }else{
+ Tmp<- Invparapt(P,Eline)
+ Tmp1<- Invparapt(P,Spaceline(Face))
+ }
+ P3<- Tmp[[1]]; Q3<- Tmp1[[1]]
+ if(Ts>1-Eps){# // P3, Q3 are necessary
+ Flg<- I
+ break
+ }
+ if(abs(Te-Ts)>Eps0){
+ if((I%%2)==1){
+ Out1<- c(Out1,list(list(Pe3,P3)))
+ }else{
+ if(length(Qe3)==0){
+ Tmp<- Op(2,TenL[[I-1]])
+ if(Ptype==-1){
+ Tmp1<- Invperspt(Tmp,Spaceline(Face))
+ }else{
+ Tmp1<- Invparapt(Tmp,Spaceline(Face))
+ }
+ Qe3<- Tmp1[[1]]
+ }
+ PM<- 0.5*(Pe3+P3); QM<- 0.5*(Qe3+Q3)
+ if(Ptype==-1){
+ Z1<- Zperspt(PM); Z2<- Zperspt(QM)
+ }else{
+ Z1<- Zparapt(PM); Z2<- Zparapt(QM)
+ }
+ if(Z1>Z2){
+ Out1<- c(Out1, list(list(Pe3,P3)))
+ }else{
+ Out2<- c(Out2, list(list(Pe3,P3)))
+ }##
+ }
+ }
+ Te<- Ts; Pe3<- P3; Qe3<- Q3
+ }
+ if(Flg==0){
+ if(Norm(Pe3-Edge[[2]])>Eps0){
+ Out1<- c(Out1, list(list(Pe3,Edge[[2]])))
+ }
+ }else{
+ if((Flg%%2)==1){
+ Out1<- c(Out1, list(list(Pe3,Edge[[2]])))
+ }else{
+ PM<- 0.5*(Pe3+P3); QM<- 0.5*(Qe3+Q3)
+ if(Ptype==-1){
+ Z1<- Zperspt(PM); Z2<- Zperspt(QM)
+ }else{
+ Z1<- Zparapt(PM); Z2<- Zparapt(QM)
+ }
+ if(Z1>Z2){
+ Out1<- c(Out1, list(list(Pe3,Edge[[2]])))
+ }else{
+ Out2<- c(Out2, list(list(Pe3,Edge[[2]])))
+ }
+ }
+ }
+ for (I in Looprange(1,length(Out1))){
+ Tmp<- Out1[[I]]
+ if(I==1){
+ SeL<- Tmp
+ }else{
+ if(Norm(SeL[[2]]-Tmp[[1]])<Eps0){
+ SeL[[2]]<- Tmp[[2]]
+ }else{
+ Out1L<- c(Out1L, list(list(SeL,Ne,NNe)))
+ SeL<- Tmp
+ }
+ }
+ }
+ if(length(Out1)>0){
+ Out1L<- c(Out1L, list(list(SeL,Ne,NNe)))
+ }
+ for (I in Looprange(1,length(Out2))){
+ Tmp<- Out2[[I]]
+ if(I==1){
+ SeL<- Tmp
+ }else{
+ if(Norm(SeL[[2]]-Tmp[[1]])<Eps0){
+ SeL[[2]]<- Tmp[[2]]
+ }else{
+ Out2L<- c(Out2L, list(list(SeL,Ne,NNe)))
+ SeL<- Tmp
+ }
+ }
+ }
+ if(length(Out2)>0){
+ Out2L<- c(Out2L, list(list(SeL,Ne,NNe)))
+ }
+ }
+ VELNO<<- Out1L
+ VELHI<<- Out2L
+}
+
+###################################
+
+Parapt<- function(Plist){ # 18.02.19 changed (for point list)
+ if(!is.list(Plist)){Plist=list(Plist)}
+ Out=list()
+ for(jj in 1:length(Plist)){
+ P=Op(jj,Plist)
+ x<- P[1]
+ y<- P[2]
+ z<- P[3]
+ Xz<- -x*sin(PHI)+y*cos(PHI)
+ Yz<- -x*cos(PHI)*cos(THETA)-y*sin(PHI)*cos(THETA)+z*sin(THETA)
+ Out<- c(Out,list(c(Xz,Yz)))
+ }
+ if(length(Out)==1){Out=Op(1,Out)}
+ return(Out)
+}
+
+###################################
+
+Partcrv3<- function(T1,T2,Fk){
+ Eps0=10^(-4)
+#// Tmp=Mixop(1,Fk)
+#// new part from
+ if(T1>(T2+Eps0)){
+ Npt<- Nrow(Fk)
+ Out1<- Partcrv3(T1,Npt,Fk)
+ Out2<- Partcrv3(1,T2,Fk)
+ Tmp<- Fk[1,]-Fk[Npt,]
+ if(Norm(Tmp)<Eps0){
+ PL<- Joincrvs(Out1,Out2)
+ }else{
+ PL<- list(Out1,Out2)
+ }
+ rownames(PL)<- 1:Nrow(PL)
+ return(PL)
+ }
+ if(floor(T1)==floor(T2)){ #18.02.26from
+ Tmp=floor(T1)
+ p1=Op(Tmp,Fk); p2=Op(Tmp+1,Fk)
+ PL=c(p1+(T1-Tmp)*(p2-p1))
+ PL=Appendrow(PL, p1+(T2-Tmp)*(p2-p1)) #18.02.26upto
+ }else{
+ Is<- ceiling(T1)
+ Ie<- floor(T2)
+ PL<- c()
+ if(T1<Is-Eps0){
+ P<- (Is-T1)*Fk[Is-1,]+(1-Is+T1)*Fk[Is,]
+ PL<- Appendrow(PL, P) #18.02.10(bug)
+ }
+ PL<- Appendrow(PL,Fk[Is:Ie,])
+ if(T2>(Ie+Eps0)){
+ P<- (1-T2+Ie)*Fk[Ie,]+(T2-Ie)*Fk[Ie+1,]
+ PL<- Appendrow(PL,P)
+ }
+ }
+ return(PL)
+}
+
+###################################
+
+#100815
+Perspt<- function(P){
+ Tmp<- P-FocusPoint
+ X1<- Tmp[1]; Y1<- Tmp[2]; Z1<- Tmp[3]
+ Tmp<- EyePoint-FocusPoint
+ E1<- Tmp[1];F1<- Tmp[2];G1<- Tmp[3]
+ Ca<- E1/sqrt(E1^2+F1^2)
+ Sa<- F1/sqrt(E1^2+F1^2)
+ X2<- X1*Ca+Y1*Sa; Y2<- -X1*Sa+Y1*Ca; Z2<- Z1
+ E2<- E1*Ca+F1*Sa; F2<- -E1*Sa+F1*Ca; G2<- G1
+ Cb<- E2/sqrt(E2^2+G2^2)
+ Sb<- G2/sqrt(E2^2+G2^2)
+ X3<- X2*Cb+Z2*Sb; Y3<- Y2; Z3<- -X2*Sb+Z2*Cb
+ E3<- E2*Cb+G2*Sb; F3<- F2; G3<- -E2*Sb+G2*Cb
+ Yz<- E3/(E3-X3)*Y3
+ Zz<- E3/(E3-X3)*Z3
+ Out<- c(Yz,Zz)
+ return(Out)
+}
+
+
+#################################
+
+Phcutdata<- function(VL,FaceL,PlaneD){
+ Out<- list()
+ EL<- list()
+ Eps<- 10^(-4)
+ for (I in Looprange(1,Mixlength(FaceL))){
+ Face<- Op(I,FaceL)
+ for (J in Looprange(1,length(Face))){
+ Nj<- J+1
+ if(J==length(Face)){
+ Nj<- 1
+ }
+ N1<- Face[J]; N2<- Face[Nj]
+ Tmp<- c(N1,N2)
+ Flg<- 0
+ for (K in Looprange(1,Mixlength(EL))){
+ Tmp1<- Op(K,EL)
+ Tmp2<- Tmp1[2:1]
+ if(all(Tmp==Tmp1) || all(Tmp==Tmp2)){
+ Flg<- 1
+ break
+ }
+ }
+ if(Flg==0){
+ EL<- c(EL,list(Tmp))
+ }
+ }
+ }
+ Out0<- list()
+ for (I in Looprange(1,Mixlength(EL))){
+ Tmp<- Op(I,EL)
+ Tmp1<- Op(Tmp[1],VL)
+ Tmp2<- Op(Tmp[2],VL)
+ Out0<- c(Out0, list(Spaceline(Tmp1,Tmp2)))
+ }
+ if(Mixtype(PlaneD)!=1){
+ V1<- Op(1,PlaneD)
+ Tmp<- Op(2,PlaneD)
+ if(length(Tmp)>1){
+ d<- V1[1]*Tmp[1]+V1[2]*Tmp[2]+V1[3]*Tmp[3]
+ }else{
+ d<- Tmp
+ }
+ }else if(mode(PlaneD)=="numeric"){
+ V1<- PlaneD[1:3]
+ d<- PlaneD[4]
+ }else{
+ StrV<- strsplit(PlaneD,"=",fixed=TRUE)
+ StrV<- StrV[[1]]
+ if(length(StrV)>1){
+ Tmp1<- StrV[1]
+ Tmp2<- StrV[2]
+ PlaneD<- paste(Tmp1,"-(",Tmp2,")",sep="")
+ }
+ x<- 0; y<- 0; z<- 0
+ d<- -eval(parse(text=PlaneD))
+ x<- 1; y<- 0; z<- 0;
+ Tmp1<- eval(parse(text=PlaneD))+d
+ x<- 0; y<- 1; z<- 0
+ Tmp2<- eval(parse(text=PlaneD))+d
+ x<- 0; y<- 0; z<- 1
+ Tmp3<- eval(parse(text=PlaneD))+d
+ V1<- c(Tmp1,Tmp2,Tmp3)
+ }
+ if(all(V1==c(0,0,0))){
+ return(Out0)
+ }
+ V3<- c(1,0,0)
+ Out1<- Rotate3data(Out0,V1,V3)
+ Tmp2<- Rotate3pt(c(1,0,0),V3,V1)
+ Tmp<- V1[1]*Tmp2[1]+V1[2]*Tmp2[2]+V1[3]*Tmp2[3]
+ x0<- d/Tmp
+ PtL<- list()
+ for (I in Looprange(1,Mixlength(Out1))){
+ Tmp<- Op(I,Out1)
+ Tmp1<- Tmp[1,]; Tmp2<- Tmp[2,]
+ P<- list(Tmp1,Tmp2-Tmp1)
+ Tmp<- list(Tmp1[1],Tmp2[1]-Tmp1[1])
+ if(abs(Tmp[[2]]) < Eps){
+ Tmp<- c()
+ }else{
+ Tmp1<- Tmp[[2]]
+ Tmp2<- x0-Tmp[[1]]
+ Tmp<- c(Tmp2/Tmp1)
+ }
+ if(length(Tmp)>0){
+ Tmp<- Tmp[1]
+ if(Tmp>-Eps && Tmp<(1+Eps)){
+ Tmp3<- P[[1]]+Tmp*P[[2]]
+ Tmp3<- Rotate3pt(Tmp3,V3,V1)
+ if(Tmp<Eps){
+ Tmp1<- Op(I,EL)
+ Tmp1<- Tmp1[1]
+ Tmp4<- list(c(Tmp1,Tmp1),Tmp3)
+ }else{
+ if(Tmp>1-Eps){
+ Tmp1<- Op(I,EL)
+ Tmp1<- Tmp1[2]
+ Tmp4<- list(c(Tmp1,Tmp1),Tmp3)
+ }else{
+ Tmp4<- list(Op(I,EL),Tmp3)
+ }
+ }
+ Flg<- 0
+ for (J in Looprange(1,Mixlength(PtL))){
+ Tmp<- Op(J,PtL)
+ Tmp<- Op(2,Tmp)
+ if(Norm(Tmp3-Tmp)<Eps){
+ Flg<- 1
+ break
+ }
+ }
+ if(Flg==0){
+ PtL<- c(PtL,list(Tmp4))
+ }
+ }
+ }
+ }
+ if(Mixlength(PtL)==0){
+ return(Out0)
+ }
+ PL<- list(Op(1,PtL))
+ QL<- PtL[2:Mixlength(PtL)]
+ N<- Mixlength(QL)
+ for (I in Looprange(2,N+1)){
+ Tmp1<- Op(Mixlength(PL),PL)
+ Tmp1<- Op(1,Tmp1)
+ for (J in Looprange(1,Mixlength(QL))){
+ Tmp2<- Op(J,QL)
+ Tmp2<- Op(1,Tmp2)
+ Flg<- 0
+ for (K in Looprange(1,Mixlength(FaceL))){
+ Tmp3<- Op(K,FaceL);
+ if(Member(Tmp1[1],Tmp3) &&
+ Member(Tmp1[2],Tmp3) &&
+ Member(Tmp2[1],Tmp3) &&
+ Member(Tmp2[2],Tmp3)){
+ Flg<- 1
+ break
+ }
+ }
+ if(Flg==1){
+ break
+ }
+ }
+ J<- min(J, Mixlength(QL))
+ PL<- c(PL,list(Op(J,QL)))
+ Tmp1<- QL[Looprange(1,J-1)]
+ Tmp2<- QL[Looprange(J+1,Mixlength(QL))]
+ QL<- c(Tmp1,Tmp2)
+ if(Mixlength(QL)==0){
+ break
+ }
+ }
+ PHCUTPOINTL<<- PL
+ Tmp<- list()
+ for (J in Looprange(1,Mixlength(PL))){
+ Tmp1<- Op(J,PL)
+ Tmp1<- Op(2,Tmp1)
+ Tmp<- c(Tmp,list(Tmp1))
+ }
+ Tmp1<- Op(1,PL)
+ Tmp1<- Op(2,Tmp1)
+ Tmp<- c(Tmp,list(Tmp1))
+ Out2<- Spaceline(Tmp)
+ Out<- c(Out0,list(Out2))
+}
+
+#########################################
+
+Phcutoffdata<- function(...){
+ varargin<-list(...)
+ Eps<- 10^(-4)
+ Out2<- list()
+ VL<- varargin[[1]]
+ FaceL<- varargin[[2]]
+ PlaneD<- varargin[[3]]
+ Sgnstr<- varargin[[4]]
+ Fugou<- 1
+ if(Sgnstr=="-" || Sgnstr=="n"){
+ Fugou<- -1
+ }
+ Out0<- Phcutdata(VL,FaceL,PlaneD)
+ PtL<- PHCUTPOINTL
+ PHVERTEXL<<- VL
+ PHFACEL<<- FaceL
+ if(length(PtL)==0){
+ Out2<- Out0
+ return(Out2)
+ }
+ N1<- Mixlength(VL)
+ Face<- c()
+ for (I in Looprange(1,Mixlength(PtL))){
+ Tmp<- Op(I,PtL)
+ Tmp3<- Op(1,Tmp)
+ Tmp1<- Tmp3[[1]]; Tmp2<- Tmp3[[2]] # debugged 10.08.14
+ if(Tmp1!=Tmp2){
+ VL<- c(VL,list(Op(2,Tmp)))
+ N1<- N1+1
+ Tmp1<- N1
+ }
+ Face<- c(Face,Tmp1)
+ PtL[[I]]<- list(Op(1,Tmp),Tmp1)
+ }
+ OutfL<- list(Face)
+ if(Mixtype(PlaneD)!=1){
+ V1<- Op(1,PlaneD)
+ Tmp<- Op(2,PlaneD)
+ if(length(Tmp)>1){
+ d<- V1[1]*Tmp[1]+V1[2]*Tmp[2]+V1[3]*Tmp[3]
+ }else{
+ d<- Tmp
+ }
+ }else if(mode(PlaneD)=="numeric"){
+ V1<- PlaneD[1:3]
+ d<- PlaneD[4]
+ }else{
+ StrV<- strsplit(PlaneD,"=",fixed=TRUE)
+ StrV<- StrV[[1]]
+ if(length(StrV)>1){
+ Tmp1<- StrV[1]
+ Tmp2<- StrV[2]
+ PlaneD<- paste(Tmp1,"-(",Tmp2,")",sep="")
+ }
+ x<- 0; y<- 0; z<- 0
+ d<- -eval(parse(text=PlaneD))
+ x<- 1; y<- 0; z<- 0
+ Tmp1<- eval(parse(text=PlaneD))+d
+ x<- 0; y<- 1; z<- 0
+ Tmp2<- eval(parse(text=PlaneD))+d
+ x<- 0; y<- 0; z<- 1
+ Tmp3<- eval(parse(text=PlaneD))+d
+ V1<- c(Tmp1,Tmp2,Tmp3)
+ }
+ for (I in Looprange(1,Mixlength(FaceL))){
+ Face<- Op(I,FaceL)
+ TmpL<- list()
+ for (J in Looprange(1,length(Face))){
+ N1<- Face[J]
+ if(J==length(Face)){
+ N2<- Face[1]
+ }else{
+ N2<- Face[J+1]
+ }
+ for (K in Looprange(1,Mixlength(PtL))){
+ Pd<- Op(K,PtL)
+ Tmp<- Op(1,Pd)
+ if(Tmp[1]==Tmp[2]){
+ if(Tmp[1]==N1){
+ TmpL<- c(TmpL,list(list(J,c(N1,N2),Op(2,Pd))))
+ }
+ }else{
+ if(all(Tmp==c(N1,N2)) || all(Tmp==c(N2,N1))){
+ TmpL<- c(TmpL,list(list(J,c(N1,N2),Op(2,Pd))))
+ }
+ }
+ }
+ }
+ if(Mixlength(TmpL)<2){
+ Flg<- 0
+ for (J in Looprange(1,length(Face))){
+ Tmp<- Op(Face[J],VL)
+ Tmp1<- Fugou*(Dotprod(V1,Tmp)-d)
+ if(Tmp1< -Eps){
+ Flg<- 1
+ break
+ }
+ }
+ if(Flg==0){
+ OutfL<- c(OutfL,list(Face))
+ }
+ next
+ }
+ Pd<- Op(1,TmpL)
+ Qd<- Op(2,TmpL)
+ Outf1<- c(Op(3,Pd))
+ Nf<- Op(1,Pd)+1
+ Tmp<- Op(2,Pd)
+ JJ<- 0
+ while (!all(Tmp==Op(2,Qd))){
+ JJ<- JJ+1
+ if(JJ>20){
+ print("bug")
+ return()
+ }
+ Tmp1<- Tmp[2]
+ if(Outf1[length(Outf1)]!=Tmp1){
+ Outf1<- c(Outf1,Tmp1)
+ }
+ Tmp<- c(Face[Nf])
+ Nf<- Nf+1
+ if(Nf>length(Face)){
+ Nf<- 1
+ }
+ Tmp<- c(Tmp,Face[Nf])
+ }
+ Tmp1<- Op(3,Qd)
+ if(Outf1[length(Outf1)]!=Tmp1){
+ Outf1<- c(Outf1,Tmp1)
+ }
+ Outf2<- c(Op(3,Pd))
+ Nf<- Op(1,Pd)
+ Tmp<- Op(2,Pd)
+ JJ<- 0
+ while (!all(Tmp==Op(2,Qd))){
+ JJ<- JJ+1
+ if(JJ>20){
+ print("bug")
+ return()
+ }
+ Tmp1<- Tmp[1]
+ if(Outf2[length(Outf2)]!=Tmp1){
+ Outf2<- c(Outf2,Tmp1)
+ }
+ Tmp<- c(Face[Nf])
+ Nf<- Nf-1
+ if(Nf<1){
+ Nf<- length(Face)
+ }
+ Tmp<- c(Face[Nf],Tmp)
+ }
+ Tmp1<- Op(3,Qd)
+ if(Outf2[length(Outf2)]!=Tmp1){
+ Outf2<- c(Outf2,Tmp1)
+ }
+ if(length(Outf1)<3 || length(Outf2)<3){
+ Face<- Outf1
+ if(length(Outf1)<length(Outf2)){
+ Face<- Outf2
+ }
+ Flg<- 0
+ for (J in Looprange(1,length(Face))){
+ Tmp<- Op(Face(J),VL)
+ Tmp1<- Fugou*(Dotprod(V1,Tmp)-d)
+ if(Tmp1<-Eps){
+ Flg<- 1
+ break
+ }
+ }
+ if(Flg==0){
+ OutfL<- c(OutfL,list(Face))
+ }
+ }else{
+ Tmp<- Op(Outf1[2],VL)
+ Tmp1<- Outf1
+ Tmp2<- Fugou*(Dotprod(V1,Tmp)-d)
+ if(Tmp2<0){
+ Tmp1<- Outf2
+ }
+ OutfL<- c(OutfL,list(Tmp1))
+ }
+ }
+ PHVERTEXL<<- VL
+ PHFACEL<<- OutfL
+ Out2<- Phcutdata(VL,OutfL,c(0,0,0,0))
+ return(Out2)
+}
+
+#######################
+
+Phparadata<- function(VL,FaceL){
+ Out<- Facesdata(list(VL,FaceL),"para")
+ return(Out)
+}
+
+####################################
+
+Phpersdata<- function(VL,FaceL){
+ Out<- Facesdata(list(VL,FaceL),"pers")
+ return(Out)
+}
+
+####################################
+
+Phspersdata<- function(Fdata){
+ Out<- Facesdata(Fdata,"pers")
+ return(Out)
+}
+
+####################################
+
+Phsparadata<- function(Fdata){
+ Out<- Facesdata(Fdata,"para")
+ return(Out)
+}
+
+#########################
+
+#100816
+Projpers<- function(...){
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ Flg<- 0
+ if(Nargs==1 && Mixtype(varargin[[1]])==1){
+ Flg<- 1
+ }
+ CL<- list()
+ for (N in Looprange(1,Nargs)){
+ Crv<- varargin[[N]]
+ if(Mixtype(Crv)==1){
+ Tmp<- CameraCurve(Crv)
+ CL<- c(CL,list(Tmp))
+ }else{
+ if(Mixtype(Crv)==3){
+ ObjL<- list()
+ for (I in Looprange(1,Mixlength(Crv))){
+ Tmp1<- Op(I,Crv)
+ if(Mixtype(Tmp1)==1){
+ ObjL<- c(ObjL,list(Tmp1))
+ }else{
+ ObjL<- c(ObjL,Tmp1)
+ }
+ }
+ Crv<- ObjL
+ }
+ for (J in Looprange(1,Mixlength(Crv))){
+ Tmp<- CameraCurve(Op(J,Crv))
+ CL<- c(CL,list(Tmp))
+ }
+ }
+ }
+ if(Mixlength(CL)==1 && Flg==1){
+ CL<- Op(1,CL)
+ }
+ return(CL)
+}
+
+###################################
+
+ProjcoordCurve<- function(Curve){
+ SP<- sin(PHI); CP<- cos(PHI)
+ ST<- sin(THETA); CT<- cos(THETA)
+ Out<- c()
+ for (J in Looprange(1,Nrow(Curve))){
+ P<- Ptcrv(J,Curve)
+ x<- P[1]; y<- P[2]; z<- P[3]
+ Xz<- -x*SP+y*CP
+ Yz<- -x*CP*CT-y*SP*CT+z*ST
+ Zz<- x*CP*ST+y*SP*ST+z*CT
+ Out<- c(Out,Xz,Yz,Zz)
+ }
+ Out<- matrix(Out,ncol=3,byrow=TRUE)
+ return(Out)
+}
+
+#################################
+
+ProjCurve<- function(Curve){ # 2018.02.26 rewritten
+ AnsL= c()
+ SP=sin(PHI); CP=cos(PHI)
+ ST=sin(THETA); CT=cos(THETA)
+ for(I in Looprange(1,Length(Curve)) ){
+ P=Op(I,Curve)
+ x=P[1]; y=P[2]; z=P[3]
+ if(x!=Inf){
+ Xz=-x*SP+y*CP
+ Yz= -x*CP*CT-y*SP*CT+z*ST
+ AnsL=Appendrow(AnsL,c(Xz,Yz))
+ Tmp= c(Xz,Yz)
+ }else{
+ AnsL=Appendrow(AnsL,c(Inf,Inf))
+ }
+ }
+ return(AnsL)
+}
+
+####################################
+
+Projpara<- function(...){
+ varargin<-list(...)
+ Nargs<- length(varargin)
+ Flg<- 0
+ if((Nargs==1)&&(is.numeric(varargin[[1]]))){
+ Flg<- 1
+ }
+ CL<- list()
+ for (N in Looprange(1,Nargs)){
+ Crv<- varargin[[N]]
+ if(is.numeric(Crv)){
+ Tmp<- ProjCurve(Crv)
+ CL<- c(CL,list(Tmp))
+ }
+ else{
+ if(is.list(Crv)){
+ ObjL<- list()
+ for (I in Looprange(1,Mixlength(Crv))){
+ Tmp1<- Op(I,Crv)
+ if(is.numeric(Tmp1)){
+ ObjL<- c(ObjL,list(Tmp1))
+ }
+ else{
+ ObjL<- c(ObjL,Tmp1)
+ }
+ }
+ Crv<- ObjL
+ }
+ for (J in Looprange(1,length(Crv))){
+ Tmp<- ProjCurve(Op(J,Crv))
+ CL<- c(CL,list(Tmp))
+ }
+ }
+ }
+ if((length(CL)==1)&&(Flg==1)){
+ CL<- Op(1,CL)
+ }
+ return(CL)
+}
+
+#########################
+
+#100816
+Projpers<- function(...){
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ Flg<- 0
+ if(Nargs==1 && Mixtype(varargin[[1]])==1){
+ Flg<- 1
+ }
+ CL<- list()
+ for (N in Looprange(1,Nargs)){
+ Crv<- varargin[[N]]
+ if(Mixtype(Crv)==1){
+ Tmp<- CameraCurve(Crv)
+ CL<- c(CL,list(Tmp))
+ }else{
+ if(Mixtype(Crv)==3){
+ ObjL<- list()
+ for (I in Looprange(1,Mixlength(Crv))){
+ Tmp1<- Op(I,Crv)
+ if(Mixtype(Tmp1)==1){
+ ObjL<- c(ObjL,list(Tmp1))
+ }else{
+ ObjL<- c(ObjL,Tmp1)
+ }
+ }
+ Crv<- ObjL
+ }
+ for (J in Looprange(1,Mixlength(Crv))){
+ Tmp<- CameraCurve(Op(J,Crv))
+ CL<- c(CL,list(Tmp))
+ }
+ }
+ }
+ if(Mixlength(CL)==1 && Flg==1){
+ CL<- Op(1,CL)
+ }
+ return(CL)
+}
+
+#########################################
+# 11.08.27
+# 14.03.23 Debugged "center"
+
+Rotate3data<- function(...){
+#Eps=10^(-4)
+ varargin<-list(...)
+ Nargs<- length(varargin)
+ Pd3<- varargin[[1]]
+ W1<- varargin[[2]]
+ W2<- varargin[[3]]
+ C<- c(0,0,0)
+ if(Nargs>=4){
+ C<- varargin[[4]]
+ }
+ if(Mixtype(Pd3)==1){
+ Pd3<- list(Pd3)
+ } else if(Mixtype(Pd3)==3){
+ Tmp<- list()
+ for (I in Looprange(1,Mixlength(Pd3))){
+ Tmp<- c(Tmp,Op(I,Pd3))
+ }
+ Pd3<- Tmp
+ }
+ Out<- list()
+ for (I in Looprange(1,Mixlength(Pd3))){
+ PD<- Op(I,Pd3)
+ Ans<- c()
+ for (J in Looprange(1,Nrow(PD))){
+ if(is.matrix(PD)){ # 11.08.27
+ P<- PD[J,]
+ }
+ else{
+ P<- PD
+ }
+ Tmp<- Rotate3pt(P,W1,W2,C) # 14.03.23
+ Ans<- rbind(Ans,Tmp)
+ } # 11.08.27
+ rownames(Ans)<- 1:Nrow(Ans) #10.08.16
+ Out<- c(Out,list(Ans))
+ }
+ if(Mixlength(Out)==1){
+ Out<- Op(1,Out)
+ }
+ return(Out)
+}
+
+#######################################
+
+Rotate3pt<- function(...){
+ varargin<-list(...)
+ Eps<-10^(-4)
+ Nargs<-length(varargin)
+ P<- varargin[[1]]
+ W1<- varargin[[2]]
+ W2<- varargin[[3]]
+ C<- c(0,0,0)
+ if(Nargs>=4){
+ C<- varargin[[4]]
+ }
+ if(mode(W2)=="numeric" && length(W2)==1){
+ Ct<- cos(W2)
+ St<- sin(W2)
+ V3<- 1/Norm(W1)*W1
+ if(V3[1]==0){
+ Tmp<- c(1,0,0)
+ }else{
+ Tmp<- c(0,1,0)
+ }
+ W1<- c(Tmp[2]*V3[3]-Tmp[3]*V3[2],
+ Tmp[3]*V3[1]-Tmp[1]*V3[3],
+ Tmp[1]*V3[2]-Tmp[2]*V3[1])
+ V1<- 1/Norm(W1)*W1
+ V2<- c(V3[2]*V1[3]-V3[3]*V1[2],
+ V3[3]*V1[1]-V3[1]*V1[3],
+ V3[1]*V1[2]-V3[2]*V1[1])
+ }else{
+ Tmp<- c(W1[2]*W2[3]-W1[3]*W2[2],
+ W1[3]*W2[1]-W1[1]*W2[3],
+ W1[1]*W2[2]-W1[2]*W2[1])
+ if(Norm(Tmp)<Eps){
+ Ans<- P
+ return(Ans)
+ }
+ V1<- 1/Norm(W1)*W1
+ Ns<- V1[1]*W2[1]+V1[2]*W2[2]+V1[3]*W2[3]
+ Tmp<- W2-Ns*V1
+ V2<- 1/Norm(Tmp)*Tmp
+ Tmp<- c(V1[2]*V2[3]-V1[3]*V2[2],
+ V1[3]*V2[1]-V1[1]*V2[3],
+ V1[1]*V2[2]-V1[2]*V2[1])
+ V3<- 1/Norm(Tmp)*Tmp
+ Ct<- Ns/Norm(W2)
+ St<- sqrt(1-Ct^2)
+ }
+ if(Norm(Tmp)<Eps){
+ Ans<- P
+ return(Ans)
+ }
+ V1x<- V1[1]; V1y<- V1[2]; V1z<- V1[3]
+ V2x<- V2[1]; V2y<- V2[2]; V2z<- V2[3]
+ V3x<- V3[1]; V3y<- V3[2]; V3z<- V3[3]
+ if(Mixtype(P)!=1){
+ PtL<- P
+ }else{
+ PtL<- list(P)
+ }
+ Ans<- list()
+ for (N in Looprange(1,Mixlength(PtL))){
+ P<- Op(N,PtL)
+ if(P[1]==Inf){
+ Ans<- c(Ans,list(c(Inf,Inf,Inf)))
+ next
+ }
+ x<- P[1]-C[1]; y=P[2]-C[2]; z=P[3]-C[3]
+ Tmp1<- ((V1x*Ct+V2x*St)*V1x+(-V1x*St+V2x*Ct)*V2x+V3x^2)*x
+ Tmp2<- ((V1x*Ct+V2x*St)*V1y+(-V1x*St+V2x*Ct)*V2y+V3x*V3y)*y
+ Tmp3<- ((V1x*Ct+V2x*St)*V1z+(-V1x*St+V2x*Ct)*V2z+V3x*V3z)*z
+ X<- Tmp1+Tmp2+Tmp3
+ Tmp1<- ((V1y*Ct+V2y*St)*V1x+(-V1y*St+V2y*Ct)*V2x+V3x*V3y)*x
+ Tmp2<- ((V1y*Ct+V2y*St)*V1y+(-V1y*St+V2y*Ct)*V2y+V3y^2)*y
+ Tmp3<- ((V1y*Ct+V2y*St)*V1z+(-V1y*St+V2y*Ct)*V2z+V3y*V3z)*z
+ Y<- Tmp1+Tmp2+Tmp3
+ Tmp1<- ((V1z*Ct+V2z*St)*V1x+(-V1z*St+V2z*Ct)*V2x+V3x*V3z)*x
+ Tmp2<- ((V1z*Ct+V2z*St)*V1y+(-V1z*St+V2z*Ct)*V2y+V3y*V3z)*y
+ Tmp3<- ((V1z*Ct+V2z*St)*V1z+(-V1z*St+V2z*Ct)*V2z+V3z^2)*z
+ Z<- Tmp1+Tmp2+Tmp3
+ Ans<- c(Ans,list(C+c(X,Y,Z)))
+ }
+ if(Mixlength(Ans)==1){
+ Ans<- Op(1,Ans)
+ }
+ return(Ans)
+}
+
+######################################
+
+Setangle<- function(...){
+ Eps<- 10^(-6)
+ varargin<-list(...)
+ Nargs<-length(varargin)
+ if(Nargs==0) {
+ }
+ else if(Nargs==1){
+ V<- varargin[[1]]
+ V<- V/Norm(V)
+ THETA<<- acos(V[3])
+ if(abs(sin(THETA))<Eps){
+ PHI<<- 0
+ }
+ else{
+ PHI<<- acos(V[1]/sin(THETA))
+ if(V[2]< -Eps) PHI<<- -PHI
+ }
+ }
+ else{
+ PHI<<- varargin[[2]]*pi/180
+ THETA<<- varargin[[1]]*pi/180
+ }
+ Out<- paste("theta=",as.character(THETA*180/pi)," phi=",
+ as.character(PHI*180/pi),sep="")
+ return (Out)
+}
+
+#################################
+
+Setpers<- function(...){
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ if(Nargs==0){
+ }
+ else{
+ FocusPoint<<- varargin[[1]]
+ EyePoint<<- varargin[[2]]
+ }
+ F<- as.character(FocusPoint)
+ E<- as.character(EyePoint)
+ Out<- paste("Focus = c(",F[1],",",F[2],",",F[3],") , ",
+ " Eye = c(", E[1],",",E[2],",",E[3],") ",sep="")
+ return (Out)
+}
+
+#################################
+
+SetstereoL<- function(R,T,P,H){
+ X<- R*sin(T*pi/180)*cos(P*pi/180)
+ Y<- R*sin(T*pi/180)*sin(P*pi/180)
+ Z<- R*cos(T*pi/180)
+ Eye<- c(X+H/2*Y/(X^2+Y^2),Y-H/2*X/(X^2+Y^2),Z)
+ Out<- Setpers(c(0,0,0),Eye)
+ return(Out)
+}
+
+#################################
+
+SetstereoR<- function(R,T,P,H){
+ X<- R*sin(T*pi/180)*cos(P*pi/180)
+ Y<- R*sin(T*pi/180)*sin(P*pi/180)
+ Z<- R*cos(T*pi/180)
+ Eye<- c(X-H/2*Y/(X^2+Y^2),Y+H/2*X/(X^2+Y^2),Z)
+ Out<- Setpers(c(0,0,0),Eye)
+ return(Out)
+}
+
+###############################
+
+Sf3data<- function(...){
+ varargin<-list(...)
+ Nargs<- length(varargin)
+ FdL<- Fullformfunc(varargin[[1]])
+ F<- Op(1,FdL)
+ Xf<- Op(2,FdL)
+ Yf<- Op(3,FdL)
+ Zf<- Op(4,FdL)
+ Urg<- Op(5,FdL)
+ Vrg<- Op(6,FdL)
+ Str<- strsplit(Urg,"=",fixed=TRUE)[[1]]
+ U<- Str[1]
+ Tmp<- Str[2]
+ Tmp<- eval(parse(text=Tmp))
+ Umin<- Tmp[1]; Umax<- Tmp[2]
+ Str<- strsplit(Vrg,"=",fixed=TRUE)[[1]]
+ V<- Str[1]
+ Tmp<- Str[2]
+ Tmp<- eval(parse(text=Tmp))
+ Vmin<- Tmp[1]; Vmax<- Tmp[2]
+ Ndu<- 25 ; Ndv<- 25; Np<- c(50,50)
+ if(Nargs>=3){
+ Ndu<- varargin[[2]]
+ Ndv<- varargin[[3]]
+ }
+ if(Nargs>=4){
+ Np<- varargin[[4]]
+ if(mode(Np)=="numeric" && length(Np)==1){
+ Np<- c(Np,Np)
+ }
+ }
+ Du<- (Umax-Umin)/Ndu
+ Dv<- (Vmax-Vmin)/Ndv
+ PL <- c()#PL <- []
+ Assign("Vmin",Vmin,"Vmax",Vmax)
+ Trgstr<- Assign("t=c(Vmin,Vmax)")
+ PL <- list()
+ for (I in Looprange(0,Ndu)){
+ U0 <- paste("(",as.character(Umin+I*Du),")",sep="")
+ Tmp<- gsub(U,U0,Xf,fixed=TRUE)
+ Tmp1<- gsub(V,"t",Tmp,fixed=TRUE)
+ Tmp<- gsub(U,U0,Yf,fixed=TRUE)
+ Tmp2<- gsub(V,"t",Tmp,fixed=TRUE)
+ Tmp<- gsub(U,U0,Zf,fixed=TRUE)
+ Tmp3<- gsub(V,"t",Tmp,fixed=TRUE)
+ Tmp<- paste("c(",Tmp1,",",Tmp2,",",Tmp3,")",sep="")
+ PD<- Spacecurve(Tmp,Trgstr,paste("N=",as.character(Np[2])))
+ PL<- c(PL,list(PD))
+ }
+ Assign("Umin",Umin,"Umax",Umax)
+ Trgstr<- Assign("t=c(Umin,Umax)")
+ for (J in Looprange(0,Ndv)){
+ V0<- paste("(",as.character(Vmin+J*Dv),")",sep="")
+ Tmp<- gsub(V,V0,Xf,fixed=TRUE)
+ Tmp1<- gsub(U,"t",Tmp,fixed=TRUE)
+ Tmp<- gsub(V,V0,Yf,fixed=TRUE)
+ Tmp2<- gsub(U,"t",Tmp,fixed=TRUE)
+ Tmp<- gsub(V,V0,Zf,fixed=TRUE)
+ Tmp3<- gsub(U,"t",Tmp,fixed=TRUE)
+ Tmp<- paste("c(",Tmp1,",",Tmp2,",",Tmp3,")")
+ PD<- Spacecurve(Tmp,Trgstr,paste("N=",as.character(Np[1])))
+ PL<- c(PL,list(PD))
+ }
+ return(PL)
+}
+
+###################################
+
+Skeletonparadata<- function(...){
+ varargin<-list(...)
+ Nargs<- length(varargin)
+ Out<- list()
+ ObjL<- Flattenlist(varargin[[1]])
+ Plt3L<- Flattenlist(varargin[[2]])
+ R<- 0.075*1000/2.54/MilliIn
+ if(Nargs>2){
+ R<- R*varargin[[3]]
+ }
+ Eps2<- 0.05
+ if(Nargs>3){
+ Eps2<- varargin[[4]]
+ }
+ Obj2L<- list()
+ for (I in Looprange(1,Mixlength(ObjL))){
+ Tmp<- ProjcoordCurve(Op(I,ObjL))
+ Obj2L<- c(Obj2L,list(Tmp))
+ }
+ Plt2L<- list()
+ for (I in Looprange(1,Mixlength(Plt3L))){
+ Tmp<- ProjcoordCurve(Op(I,Plt3L))
+ Plt2L<- c(Plt2L,list(Tmp))
+ }
+ Out<- Makeskeletondata(Obj2L,Plt2L,R,Eps2)
+ return(Out)
+}
+
+################################
+
+Skeletonpara3data<- function(...){
+ varargin<-list(...)
+ Nargs<- length(varargin)
+ ObjL<- Flattenlist(varargin[[1]])
+ Plt3L<- Flattenlist(varargin[[2]])
+ R<- 0.075*1000/2.54/MilliIn
+ if(Nargs>2){
+ R=R*varargin[[3]]
+ }
+ Eps2<- 0.05
+ if(Nargs>3){
+ Eps2<- varargin[[4]]
+ }
+ Plt2L<- list()
+ for (I in Looprange(1,Mixlength(Plt3L))){
+ Tmp<- ProjcoordCurve(Op(I,Plt3L))
+ Plt2L<- c(Plt2L,list(Tmp))
+ }
+ Out<- list()
+ for (I in Looprange(1,Mixlength(ObjL))){
+ Obj3<- Op(I,ObjL)
+ Tmp<- ProjcoordCurve(Obj3)
+ Data<- Makeskeletondata(list(Tmp),Plt2L,R,Eps2)
+ for (J in Looprange(1,Mixlength(Data))){
+ Gd<- Op(J,Data)
+ PtD<- c()
+ for (J in Looprange(1,Nrow(Gd))){
+ Tmp<- Ptcrv(J,Gd)
+ Tmp1<- Invparapt(Tmp,Obj3)
+ Tmp1<- Op(1,Tmp1)
+ PtD<- c(PtD,Tmp1)
+ }
+ PtD<- matrix(PtD,ncol=3,byrow=TRUE)
+ Out<- c(Out,list(PtD))
+ }
+ }
+ return(Out)
+}
+
+#################################
+
+#100815
+Skeletonpersdata<- function(...){
+ varargin<-list(...)
+ Nargs<- length(varargin)
+ Out<- list()
+ ObjL<- Flattenlist(varargin[[1]])
+ Plt3L<- Flattenlist(varargin[[2]])
+ R<- 0.075*1000/2.54/MilliIn
+ if(Nargs>2){
+ R<- R*varargin[[3]]
+ }
+ Eps2<- 0.05
+ if(Nargs>3){
+ Eps2<- varargin[[4]]
+ }
+ Obj2L<- list()
+ for (I in Looprange(1,Mixlength(ObjL))){
+ Tmp<- CameracoordCurve(Op(I,ObjL))
+ Obj2L<- c(Obj2L,list(Tmp))
+ }
+ Plt2L<- list()
+ for (I in Looprange(1,Mixlength(Plt3L))){
+ Tmp<- CameracoordCurve(Op(I,Plt3L))
+ Plt2L<- c(Plt2L,list(Tmp))
+ }
+ Out<- Makeskeletonpersdata(Obj2L,Plt2L,R,Eps2)
+ return(Out)
+}
+
+#####################
+#100815
+Skeletonpers3data<- function(...){
+ varargin<-list(...)
+ Nargs<- length(varargin)
+ Out<- list()
+ ObjL<- Flattenlist(varargin[[1]])
+ Plt3L<- Flattenlist(varargin[[2]])
+ R<- 0.075*1000/2.54/MilliIn
+ if(Nargs>2){
+ R<- R*varargin[[3]]
+ }
+ Eps2<- 0.05
+ if(Nargs>3){
+ Eps2<- varargin[[4]]
+ }
+ Plt2L<- list()
+ for (I in Looprange(1,Mixlength(Plt3L))){
+ Tmp<- CameracoordCurve(Op(I,Plt3L))
+ Plt2L<- c(Plt2L,list(Tmp))
+ }
+ Out<- list()
+ for (I in Looprange(1,Mixlength(ObjL))){
+ Obj3<- Op(I,ObjL)
+ Tmp<- CameracoordCurve(Obj3)
+ Data<- Makeskeletonpersdata(list(Tmp),Plt2L,R,Eps2)
+ for (J in Looprange(1,Mixlength(Data))){
+ Gd<- Op(J,Data)
+ PtD<- c()
+ for (J in Looprange(1,Nrow(Gd))){
+ Tmp<- Gd[J,]
+ Tmp1<- Invperspt(Tmp,Obj3)
+ Tmp1<- Op(1,Tmp1)
+ PtD<- rbind(PtD,Tmp1)
+ }
+ Out<- c(Out,list(PtD))
+ }
+ }
+ return(Out)
+}
+
+#################################
+
+Spacecurve<- function(...){
+ Eps<- 10^(-5)
+ varargin<-list(...)
+ Nargs<- length(varargin)
+ Fnstr<- varargin[[1]]
+ Rgstr<- varargin[[2]]
+ Range<- c(0,2*pi)
+ N<- 50 #Numpoints
+ E<- c() #Exclusions
+ D<- Inf #Discont (Changed)
+ for(I in Looprange(3,Nargs)){
+ Tmp<- varargin[[I]]
+ StrV<- strsplit(Tmp,"=",fixed=TRUE)
+ StrV<- StrV[[1]]
+ Tmp1<- toupper(StrV[1])
+ Lhs<- substr(Tmp1,1,1)
+ Str<- paste(Lhs,"=",StrV[2],sep="")
+ eval(parse(text=Str))
+ }
+ StrV<- strsplit(Rgstr,"=",fixed=TRUE)
+ StrV<- StrV[[1]]
+ if(length(StrV)>1){
+ Vname<- StrV[1]
+ Rng<- eval(parse(text=StrV[2]))
+ }
+ else{
+ Vname<- Rgstr
+ Rng<- c(XMIN,XMAX)
+ }
+ T1<- Rng[1]; T2<- Rng[2]
+ Dt<- (T2-T1)/N #17.09.22
+ Str<- gsub(Vname,"t",Fnstr)
+ Str=gsub("[","c(",Str,fixed=TRUE) #17.12.22(2lines)
+ Str=gsub("]",")",Str,fixed=TRUE)
+ if(abs(Dt)<Eps){ # 16.12.13
+ t=T1
+ P=eval(parse(text=Str))
+ return(P)
+ }
+ P<- c()
+# E<- sort(E,decreasing=FALSE)
+ E<- c(E,Inf)
+ E<- sort(E,decreasing=FALSE)
+ Ke<- 1
+ for(jj in 1:(N+1)){
+ t=T1+(jj-1)*Dt
+ Pa<- c()
+ if(t-E[Ke]< Eps){
+ Pa<- eval(parse(text=Str))
+ }
+ if(abs(t-E[Ke])<=Eps){
+ if(length(P)>0 && P[Nrow(P),1]!=Inf){
+ Pa<- c(Inf,Inf,Inf)
+ }
+ }
+ if(t-E[Ke]>Eps){
+ Pa<- eval(parse(text=Str))
+ Ke<- Ke+1
+ }
+ if(length(Pa)>0){
+ if(Pa[1]==Inf){
+ P<- rbind(P,Pa)
+ }else if(length(P)==0){
+ P<- rbind(c(),c(Pa))
+ }
+ else{
+ Tmp<- P[Nrow(P),]
+ if(Tmp[1]==Inf){
+ P<- rbind(P,Pa)
+ }
+ else if( Norm(Tmp-Pa)<D){
+ P<- rbind(P,Pa)
+ }
+ else{
+ P<- rbind(P,c(Inf,Inf,Inf))
+ P<- rbind(P,Pa)
+ }
+ }
+ }
+ }
+ rownames(P)<- 1:Nrow(P) # 10.08.16
+ return(P)
+}
+
+########################################
+
+Spaceline<- function(...){
+ varargin<- list(...)
+ Z<- c()
+ for(I in 1:length(varargin)){
+ Data<- varargin[[I]]
+ if(Mixtype(Data)==1){
+ J<- 1
+ while (J<=Ncol(Data)){
+ Tmp<- Data[J:(J+2)]
+ Z<-c(Z,Tmp)
+ J<- J+3
+ }
+ next
+ }
+ if(Mixtype(Data)==3){
+ Tmp<- list()
+ for(I in 1:Mixlength(Data)){
+ Tmp<- c(Tmp,Op(I,Data))
+ }
+ Data<- Tmp
+ }
+ for(J in 1:Mixlength(Data)){
+ Tmp<- Op(J,Data)
+ Z<- c(Z,Tmp)
+ }
+ }
+ Z<- matrix(Z,ncol=3,byrow=TRUE)
+ return(Z)
+}
+
+#################################
+
+Translate3data<- function(...){
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ Pd3<- varargin[[1]]
+ Mv<- varargin[[2]]
+ if(mode(Mv)=="numerice" && length(Mv)==1){
+ Mv<- c(varargin[[2]],varargin[[3]],varargin[[4]])
+ }
+ if(Mixtype(Pd3)==1){
+ Pd3<- list(Pd3)
+ }
+ else if(Mixtype(Pd3)==3){
+ Tmp<-list()
+ for(I in Looprange(1,Mixlength(Pd3))){
+ Tmp<- c(Tmp, Op(I,Pd3))
+ }
+ Pd3<- Tmp
+ }
+ Out<- list()
+ for(I in Looprange(1,Mixlength(Pd3))){
+ PD<- Op(I,Pd3)
+ PD<- rbind(c(),PD)
+ Ans<- c()
+ for(J in Looprange(1,Nrow(PD))){
+ P<- PD[J,]
+ Tmp<- P+Mv
+ Ans<- rbind(Ans,Tmp)
+ }
+ rownames(Ans)<- 1:Nrow(Ans)
+ Out<- c(Out,list(Ans))
+ }
+ if(Mixlength(Out)==1){
+ Out<- Op(1,Out)
+ }
+ return(Out)
+}
+
+###############################################
+
+Xyzax3data<- function(Xrange,Yrange,Zrange){
+ StrV<-strsplit(Xrange,"=",fixed=TRUE)
+ StrV<- StrV[[1]]
+ if(length(StrV)>1) StrV<- StrV[2]
+ Tmp<- eval(parse(text=StrV))
+ Px<- c(Tmp[1],0,0)
+ Qx<- c(Tmp[2],0,0)
+ StrV<-strsplit(Yrange,"=",fixed=TRUE)
+ StrV<- StrV[[1]]
+ if(length(StrV)>1) StrV<- StrV[2]
+ Tmp<- eval(parse(text=StrV))
+ Py<- c(0,Tmp[1],0)
+ Qy<- c(0,Tmp[2],0)
+ StrV<-strsplit(Zrange,"=",fixed=TRUE)
+ StrV<- StrV[[1]]
+ if(length(StrV)>1) StrV<- StrV[2]
+ Tmp<- eval(parse(text=StrV))
+ Pz<- c(0,0,Tmp[1])
+ Qz<- c(0,0,Tmp[2])
+ Out<- list(Spaceline(Px,Qx),Spaceline(Py,Qy),Spaceline(Pz,Qz))
+ return(Out)
+}
+
+###################################
+
+Xyzaxparaname<- function(...){
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ Eps<- 10.0^(-6)
+ Dr<- 0.19*1000/2.54/MilliIn
+ Tmp<- varargin[[Nargs]]
+ if(Nargs>1 && is.numeric(Tmp)){
+ Dr<- Dr*Tmp
+ Nargs<- Nargs-1
+ }
+ if(mode(varargin[[1]])=="character"){
+ Xname<- "x"
+ Yname<- "y"
+ Zname<- "z"
+ Xrange<- varargin[[1]]
+ Yrange<- varargin[[2]]
+ Zrange<- varargin[[3]]
+ StrV<-strsplit(Xrange,"=",fixed=TRUE)
+ StrV<- StrV[[1]]
+ if(length(StrV)>1){
+ Xname<- StrV[1]
+ StrV<- StrV[2]
+ }
+ Tmp<- eval(parse(text=StrV))
+ Px<- c(Tmp[1],0,0)
+ Qx<- c(Tmp[2],0,0)
+ StrV<-strsplit(Yrange,"=",fixed=TRUE)
+ StrV<- StrV[[1]]
+ if(length(StrV)>1){
+ Yname<- StrV[1]
+ StrV<- StrV[2]
+ }
+ Tmp<- eval(parse(text=StrV))
+ Py<- c(0,Tmp[1],0)
+ Qy<- c(0,Tmp[2],0)
+ StrV<-strsplit(Zrange,"=",fixed=TRUE)
+ StrV<- StrV[[1]]
+ if(length(StrV)>1){
+ Zname<- StrV[1]
+ StrV<- StrV[2]
+ }
+ Tmp<- eval(parse(text=StrV))
+ Pz<- c(0,0,Tmp[1])
+ Qz<- c(0,0,Tmp[2])
+ }else{
+ Data<- varargin[[1]]
+ Xname<- "x"; Yname<- "y"; Zname<- "z"
+ if(Nargs>1){
+ if(varargin[[2]]!=""){
+ Xname<- varargin[[2]]
+ }
+ if(varargin[[3]]!=""){
+ Yname<- varargin[[3]]
+ }
+ if(varargin[[4]]!=""){
+ Zname<- varargin[[4]]
+ }
+ }
+ Tmp<- Op(1,Data)
+ Px<- Tmp[1,]; Qx<- Tmp[2,]
+ Tmp<- Op(2,Data)
+ Py<- Tmp[1,]
+ Qy<- Tmp[2,]
+ Tmp<- Op(3,Data)
+ Pz<- Tmp[1,]
+ Qz<- Tmp[2,]
+ }
+ Ph<- Parapt(Px); Qh<- Parapt(Qx); R<-Norm(Ph-Qh)
+ Kekka<- list()
+ if(R>Eps){
+ Ch<- Qh+Dr/R*(Qh-Ph)
+ Kekka<- c(Kekka,list(Pointdata(Ch)))
+ Expr(Ch,"c",Xname)
+ }
+ Ph<- Parapt(Py); Qh<- Parapt(Qy); R<- Norm(Ph-Qh)
+ if(R>Eps){
+ Ch<- Qh+Dr/R*(Qh-Ph)
+ Kekka<- c(Kekka,list(Pointdata(Ch)))
+ Expr(Ch,"c",Yname)
+ }
+ Ph<- Parapt(Pz); Qh<- Parapt(Qz); R<- Norm(Ph-Qh)
+ if(R>Eps){
+ Ch<- Qh+Dr/R*(Qh-Ph)
+ Kekka<- c(Kekka,list(Pointdata(Ch)))
+ Expr(Ch,"c",Zname)
+ }
+# return(Kekka)
+}
+
+###################################
+
+Xyzaxpersname<- function(...){
+ varargin<- list(...)
+ Eps<- 10.0^(-6)
+ Nargs<- length(varargin)
+ Dr<- 0.19*1000/2.54/MilliIn
+ Tmp<- varargin[[Nargs]]
+ if(Nargs>1 && mode(Tmp)=="numeric"){
+ Dr<- Dr*Tmp
+ Nargs<- Nargs-1
+ }
+ if(mode(varargin[[1]])=="character"){
+ Xname<- "x"
+ Yname<- "y"
+ Zname<- "z"
+ Xrange<- varargin[[1]]
+ Yrange<- varargin[[2]]
+ Zrange<- varargin[[3]]
+ StrV<-strsplit(Xrange,"=",fixed=TRUE)
+ StrV<- StrV[[1]]
+ if(length(StrV)>1){
+ Xname<- StrV[1]
+ StrV<- StrV[2]
+ }
+ Tmp<- eval(parse(text=StrV))
+ Px<- c(Tmp[1],0,0)
+ Qx<- c(Tmp[2],0,0)
+ StrV<-strsplit(Yrange,"=",fixed=TRUE)
+ StrV<- StrV[[1]]
+ if(length(StrV)>1){
+ Yname<- StrV[1]
+ StrV<- StrV[2]
+ }
+ Tmp<- eval(parse(text=StrV))
+ Py<- c(0,Tmp[1],0)
+ Qy<- c(0,Tmp[2],0)
+ StrV<-strsplit(Zrange,"=",fixed=TRUE)
+ StrV<- StrV[[1]]
+ if(length(StrV)>1){
+ Zname<- StrV[1]
+ StrV<- StrV[2]
+ }
+ Tmp<- eval(parse(text=StrV))
+ Pz<- c(0,0,Tmp[1])
+ Qz<- c(0,0,Tmp[2])
+ }else{
+ Data<- varargin[[1]]
+ Xname<- "x"; Yname<- "y"; Zname<- "z"
+ if(Nargs>1){
+ if(varargin[[2]]!=""){
+ Xname<- varargin[[2]]
+ }
+ if(varargin[[3]]!=""){
+ Yname<- varargin[[3]]
+ }
+ if(varargin[[4]]!=""){
+ Zname<- varargin[[4]]
+ }
+ }
+ Tmp<- Op(1,Data)
+ Px<- Tmp[1,]; Qx<- Tmp[2,]
+ Tmp<- Op(2,Data)
+ Py<- Tmp[1,]
+ Qy<- Tmp[2,]
+ Tmp<- Op(3,Data)
+ Pz<- Tmp[1,]
+ Qz<- Tmp[2,]
+ }
+ Ph<- Perspt(Px)
+ Qh<- Perspt(Qx)
+ R<- Norm(Ph-Qh)
+ Kekka<- list()
+ if(R>Eps){
+ Ch<- Qh+Dr/R*(Qh-Ph)
+ Kekka<- c(Kekka,list(Pointdata(Ch)))
+ Expr(Ch,"c",Xname)
+ }
+ Ph<- Perspt(Py)
+ Qh<- Perspt(Qy)
+ R<- Norm(Ph-Qh)
+ if(R>Eps){
+ Ch<- Qh+Dr/R*(Qh-Ph)
+ Kekka<- c(Kekka,list(Pointdata(Ch)))
+ Expr(Ch,"c",Yname)
+ }
+ Ph<- Perspt(Pz)
+ Qh<- Perspt(Qz)
+ R<- Norm(Ph-Qh)
+ if(R>Eps){
+ Ch<- Qh+Dr/R*(Qh-Ph)
+ Kekka<- c(Kekka,list(Pointdata(Ch)))
+ Expr(Ch,"c",Zname)
+ }
+# return(Kekka)
+}
+
+#########################
+#100815
+Zparapt<- function(P){#function Out=Zparapt(P)
+ x<- P[1]; y<- P[2]; z<- P[3]
+ Out<- x*cos(PHI)*sin(THETA)+y*sin(PHI)*sin(THETA)+z*cos(THETA)
+ return(Out)
+}
+
+#########################
+#100815
+Zperspt<- function(P){
+ Tmp<- P-FocusPoint
+ X1<- Tmp[1]; Y1<- Tmp[2]; Z1<- Tmp[3]
+ Tmp<- EyePoint-FocusPoint
+ E1<- Tmp[1]; F1<- Tmp[2]; G1<- Tmp[3]
+ Ca<- E1/sqrt(E1^2+F1^2)
+ Sa<- F1/sqrt(E1^2+F1^2)
+ X2<- X1*Ca+Y1*Sa; Y2<- -X1*Sa+Y1*Ca; Z2<- Z1
+ E2<- E1*Ca+F1*Sa; F2<- -E1*Sa+F1*Ca; G2<- G1
+ Cb<- E2/sqrt(E2^2+G2^2)
+ Sb<- G2/sqrt(E2^2+G2^2)
+ X3<- X2*Cb+Z2*Sb
+ return(X3)
+}
+
+##########################################
+
+
+
+##########################################
+
+# Stat Package
+
+##########################################
+
+# 2010.04.12
+
+# new
+
+# Htickmarklower, Vtickmarkleft, HtickmarklowerV
+# VtickmarkleftV, Insertcom, Replacecom
+# Maketexfile, Formatting
+# Drwhistframe, Histplotdata, Drwhistplot
+
+Htickmarklower<- function(...)
+{ ## Scaling is implemented
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ ArgsL<- varargin
+ if(mode(ArgsL[[1]])=="character"){
+ Str<- ArgsL[[1]]
+ Tmp<- strsplit(Str,"m")
+ Tmp<- Tmp[[1]]
+ if(length(Tmp)>1){
+ I<- nchar(Tmp[1])+1
+ }
+ else{
+ I<- 0
+ }
+ Tmp<- strsplit(Str,"n")
+ Tmp<- Tmp[[1]]
+ if(length(Tmp)>1){
+ J<- nchar(Tmp[1])+1
+ }
+ else{
+ J<- 0
+ }
+ Tmp<- strsplit(Str,"r")
+ Tmp<- Tmp[[1]]
+ if(length(Tmp)>1){
+ K=nchar(Tmp[1])+1
+ }
+ else{
+ K<- 0
+ }
+ if(K>0){
+ S<- substr(Str,K+1,nchar(Str))
+ R<- as.numeric(S)
+ if(is.na(R)){
+ R<- 1
+ }
+ }
+ else{
+ R<- 1
+ K<- nchar(Str)+1
+ }
+ if(J>0){
+ S<- substr(Str,J+1,K-1)
+ Dn<- as.numeric(S)
+ if(is.na(Dn)){
+ Dn<- 1
+ }
+ }
+ else{
+ Dn<- 1000
+ J<- nchar(Str)+1
+ }
+ S<- substr(Str,I+1,J-1)
+ Dm<- as.numeric(S)
+ if(is.na(Dm)){
+ Dm<- 1
+ }
+ ArgsL<- list()
+ for (I in Looprange(1, floor((XMAX-GENTEN[1])/Dm))){
+ ArgsL<- Mixjoin(ArgsL,I*Dm)
+ if(I-floor(I/Dn)*Dn==0){
+ Str<- as.character(I*Dm*R)
+ ArgsL<- Mixjoin(ArgsL,Str)
+ }
+ }
+ for (I in seq(-1,ceiling((XMIN-GENTEN[1])/Dm),by=-1)){
+ ArgsL<- Mixjoin(ArgsL,I*Dm)
+ if(I-floor(I/Dn)*Dn==0){
+ Str<- as.character(I*Dm*R)
+ ArgsL<- Mixjoin(ArgsL,Str)
+ }
+ }
+ }
+ MemoriList<- list()
+ Memori<- list()
+ for (N in 1:length(ArgsL)){
+ Dt<- ArgsL[[N]]
+ if(mode(Dt)=="numeric" && length(Dt)>1){
+ if(length(Memori)>0){
+ MemoriList<- Mixjoin(MemoriList,list(Memori))
+ }
+ Memori<- list(Dt)
+ next
+ }
+ if(mode(Dt)=="character"){
+ Memori<- Mixjoin(Memori,Dt)
+ }
+ else{
+ if(length(Memori)>0){
+ MemoriList<- Mixjoin(MemoriList,list(Memori))
+ }
+ Memori<- list(Dt,GENTEN[2])
+ }
+ }
+ MemoriList<- Mixjoin(MemoriList,list(Memori))
+ for (N in 1:length(MemoriList)){
+ Dt<- MemoriList[[N]]
+ Ndt<- length(Dt)
+ X=Op(1,Dt)
+ Y=Op(2,Dt)
+ Tmp<-Doscaling(c(X,Y))
+ X<- Tmp[1]
+ Y<- Tmp[2]
+ Moji<- Op(Ndt,Dt)
+ Tmp1<- Unscaling(c(X,Y))
+ Tmp2<- Unscaling(c(X,Y-2*MARKLEN))
+ Fd<- Listplot(c(Tmp1,Tmp2))
+ Drwline(Fd)
+ if(Ndt==3){
+ Tmp<-Unscaling(c(X,Y-2*MARKLEN))
+ Expr(Tmp,"s",Moji)
+ }
+ if(Ndt==4){
+ Houkou<- Op(3,Dt)
+ Tmp<-grep("s",Houkou)
+ if(length(Tmp)>0){
+ Tmp<-Unscaling(c(X,Y-2*MARKLEN))
+ Expr(Tmp,Houkou,Moji)
+ }
+ else{
+ Tmp<- Unscaling(c(X,Y))
+ Expr(Tmp,Houkou,Moji)
+ }
+ }
+ cat("%\n",file=Wfile,append=TRUE)
+ }
+}
+
+Vtickmarkleft<- function(...)
+{ ## Scaling is implemented
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ ArgsL<- varargin
+ if(mode(ArgsL[[1]])=="character"){
+ Str<- ArgsL[[1]]
+ Tmp<- strsplit(Str,"m")
+ Tmp<- Tmp[[1]]
+ if(length(Tmp)>1){
+ I<- nchar(Tmp[1])+1
+ }
+ else{
+ I<- 0
+ }
+ Tmp<- strsplit(Str,"n")
+ Tmp<- Tmp[[1]]
+ if(length(Tmp)>1){
+ J<- nchar(Tmp[1])+1
+ }
+ else{
+ J<- 0
+ }
+ Tmp<- strsplit(Str,"r")
+ Tmp<- Tmp[[1]]
+ if(length(Tmp)>1){
+ K=nchar(Tmp[1])+1
+ }
+ else{
+ K<- 0
+ }
+ if(K>0){
+ S<- substr(Str,K+1,nchar(Str))
+ R<- as.numeric(S)
+ if(is.na(R)){
+ R<- 1
+ }
+ }
+ else{
+ R<- 1
+ K<- nchar(Str)+1
+ }
+ if(J>0){
+ S<- substr(Str,J+1,K-1)
+ Dn<- as.numeric(S)
+ if(is.na(Dn)){
+ Dn<- 1
+ }
+ }
+ else{
+ Dn<- 1000
+ J<- nchar(Str)+1
+ }
+ S<- substr(Str,I+1,J-1)
+ Dm<- as.numeric(S)
+ if(is.na(Dm)){
+ Dm<- 1
+ }
+ ArgsL<- list()
+ for (I in 1:floor((YMAX-GENTEN[2])/Dm)){
+ ArgsL<- Mixjoin(ArgsL,I*Dm)
+ if(I-floor(I/Dn)*Dn==0){
+ Str<- as.character(I*Dm*R)
+ ArgsL<- Mixjoin(ArgsL,Str)
+ }
+ }
+ for (I in seq(-1,ceiling((YMIN-GENTEN[2])/Dm))){
+ ArgsL<- Mixjoin(ArgsL,I*Dm)
+ if(I-floor(I/Dn)*Dn==0){
+ Str<- as.character(I*Dm*R)
+ ArgsL<- Mixjoin(ArgsL,Str)
+ }
+ }
+ }
+ MemoriList<- list()
+ Memori<- list()
+ for (N in 1:length(ArgsL)){
+ Dt<- ArgsL[[N]]
+ if(mode(Dt)=="numeric" && length(Dt)>1){
+ if(length(Memori)>0){
+ MemoriList<- Mixjoin(MemoriList,list(Memori))
+ }
+ Memori<- list(Dt)
+ next
+ }
+ if(mode(Dt)=="character"){
+ Memori<- Mixjoin(Memori,Dt)
+ }
+ else{
+ if(length(Memori)>0){
+ MemoriList<- Mixjoin(MemoriList,list(Memori))
+ }
+ Memori<- list(GENTEN[1],Dt)
+ }
+ }
+ MemoriList<- Mixjoin(MemoriList,list(Memori))
+ for (N in 1:length(MemoriList)){
+ Dt<- MemoriList[[N]]
+ Ndt<- length(Dt)
+ X=Op(1,Dt)
+ Y=Op(2,Dt)
+ Tmp<-Doscaling(c(X,Y))
+ X<- Tmp[1]
+ Y<- Tmp[2]
+ Moji<- Op(Ndt,Dt)
+ Tmp1<- Unscaling(c(X,Y))
+ Tmp2<- Unscaling(c(X-2*MARKLEN,Y))
+ Fd<- Listplot(c(Tmp1,Tmp2))
+ Drwline(Fd)
+ if(Ndt==3){
+ Tmp<-Unscaling(c(X-2*MARKLEN,Y))
+ Expr(Tmp,"w",Moji)
+ }
+ if(Ndt==4){
+ Houkou<- Op(3,Dt)
+ Tmp<-grep("w",Houkou)
+ if(length(Tmp)>0){
+ Tmp<-Unscaling(c(X-2*MARKLEN,Y))
+ Expr(Tmp,Houkou,Moji)
+ }
+ else{
+ Tmp<- Unscaling(c(X,Y))
+ Expr(Tmp,Houkou,Moji)
+ }
+ }
+ cat("%\n",file=Wfile,append=TRUE)
+ }
+}
+
+HtickmarklowerV<- function(Vec,digits=2,nsmall=2)
+{
+ for (I in 1:length(Vec)){
+ Tmp<- Vec[I]
+ Htickmarklower(Tmp, Formatting(Tmp,digits,nsmall))
+ }
+}
+
+HtickLV<- function(...)
+{
+ HtickmarklowerV(...)
+}
+
+VtickmarkleftV<- function(Vec,digits=2,nsmall=2)
+{
+ for (I in 1:length(Vec)){
+ Tmp<- Vec[I]
+ Vtickmarkleft(Tmp, Formatting(Tmp,digits,nsmall))
+ }
+}
+
+VtickLV<- function(...)
+{
+ VtickmarkleftV(...)
+}
+
+Insertcom<- function(CmdM,Npos,Str)
+{
+ if(is.matrix(CmdM)){
+ Cmd<- CmdM
+ }
+ else{
+ C<- paste("Cmd<- ",CmdM)
+ eval(parse(text=C))
+ }
+ Out<- Cmd[Looprange(1,Npos-1),]
+ Out<- c(Out,Str)
+ Tmp<- Cmd[Looprange(Npos,nrow(Cmd)),]
+ Out<- c(Out,Tmp)
+ Out<- matrix(Out)
+ if(!is.matrix(CmdM)){
+ C<- paste(CmdM,"<<- Out")
+ eval(parse(text=C))
+ }
+ return(Out)
+}
+
+Replacecom<- function(CmdM,Npos,Str)
+{
+ if(is.matrix(CmdM)){
+ Cmd<- CmdM
+ }
+ else{
+ C<- paste("Cmd<- ",CmdM)
+ eval(parse(text=C))
+ }
+ Out<- Cmd[Looprange(1,Npos-1),]
+ Out<- c(Out,Str)
+ Tmp<- Cmd[Looprange(Npos+1,nrow(Cmd)),]
+ Out<- c(Out,Tmp)
+ Out<- matrix(Out)
+ if(!is.matrix(CmdM)){
+ C<- paste(CmdM,"<<- Out")
+ eval(parse(text=C))
+ }
+ return(Out)
+}
+
+Deletecom<- function(CmdM,Npos)
+{
+ if(is.matrix(CmdM)){
+ Cmd<- CmdM
+ }
+ else{
+ C<- paste("Cmd<- ",CmdM)
+ eval(parse(text=C))
+ }
+ Out<- Cmd[Looprange(1,Npos-1),]
+ Tmp<- Cmd[Looprange(Npos+1,nrow(Cmd)),]
+ Out<- c(Out,Tmp)
+ Out<- matrix(Out)
+ if(!is.matrix(CmdM)){
+ C<- paste(CmdM,"<<- Out")
+ eval(parse(text=C))
+ }
+ return(Out)
+}
+
+Maketexfile<- function(commands="",texfile="")
+{
+ Openfile(texfile)
+ Execmd(commands)
+ Closefile()
+}
+
+Formatting<- function(X,D=2,N=2)
+{
+ if(D>0){
+ Xs <- format(X,digits=D,nsmall=N)
+ }
+ else{
+ Xs<- as.character(X)
+ }
+ return(Xs)
+}
+
+################################
+
+Boxplotdata1 <-function(DataF1,CenterX,Width,...)
+{
+ Xr <- Width
+ Temp <- boxplot(DataF1[1],plot=FALSE)
+ Stats <- Temp$stats
+ rownames(Stats) <- c("Lhige","Q1","Q2","Q3","Uhige")
+ Out <- Temp$out
+ Lhige <- Stats["Lhige",1]
+ Uhige <- Stats["Uhige",1]
+ Q1 <- Stats["Q1",1]
+ Q2 <- Stats["Q2",1]
+ Q3 <- Stats["Q3",1]
+ CenterY <- (Q1+Q3)/2
+ C <- c(CenterX,CenterY)
+ V <- c(0,(Q3-Q1)/2)
+ G1 <- Framedata(C,Xr/2,V[2]) # box
+ Temp1 <- c(0,Q1-Lhige)
+ Temp2 <- c(0,Uhige-Q3)
+ G2 <- Listplot(C-V,C-V-Temp1) #
+ G3 <- Listplot(C+V,C+V+Temp2) #
+ Temp3 <- c(Xr/4,0)
+ G4 <- Listplot(C-V-Temp1-Temp3,C-V-Temp1+Temp3) #
+ G5 <- Listplot(C+V+Temp2-Temp3,C+V+Temp2+Temp3) #
+ Temp4 <- c(0,Q3-Q2)
+ Temp5 <- c(Xr/2,0)
+ G6 <- Listplot(C+V-Temp4-Temp5,C+V-Temp4+Temp5) #
+ G7 <- list()
+ for(j in Looprange(1,length(Out))){
+ G7 <- c(G7,list(c(CenterX, Out[j])))
+ }
+ G7 <- G7[order(Out,decreasing=TRUE)]
+ list(median=G6,box=G1,uwhisker=G2,lwhisker=G3,lwp=G4,uwp=G5,outliers=G7)
+}
+
+Boxplotdata2 <- function(Data,Ratio, ...)
+{
+ DataF<- Flattenlist(Data) # 11.07.21(from)
+ ymin<- Inf
+ ymax<- -Inf
+ for(J in 1:length(DataF)){
+ Tmp<- DataF[[J]]
+ ymin<- min(ymin, min(Tmp))
+ ymax<- max(ymax,max(Tmp))
+ } # 11.07.21(upto)
+ dy <- ymax-ymin
+ Setwindow(c(0,XMAX-XMIN),c(ymin-0.1*dy,ymax+0.1*dy))
+ R1<- (YMAX-YMIN)/(XMAX-XMIN)
+ R<- Ratio/R1
+ Setscaling(R)
+ Delta <- XMAX/length(DataF)
+ W <- 0.6*Delta
+ PdL <- list()
+ for(i in 1:length(DataF)){ # 11.07.21
+ X <- (0.5+i-1)*Delta
+ G <- Boxplotdata1(DataF[i],X,W,...)
+ PdL <- c(PdL,list(G))
+ }
+ G <- Framedata()
+ Tmp<- list(frame=G)
+ PdL <-c(PdL,list(Tmp))
+ Epsi <-0
+ Setwindow(c(XMIN-Epsi,XMAX+Epsi),c(YMIN-Epsi,YMAX+Epsi))
+ return(PdL)
+}
+
+Drwboxframe<-function(BoxDataL)
+{
+ Setorigin(c(XMIN,YMIN))
+ Tmp<- Unscaling(c(0.2,0.2))
+ Setwindow(c(XMIN-0.2,XMAX),c(YMIN-Tmp[2],YMAX))
+ Hako<- BoxDataL$plotdata
+ title<- BoxDataL$title
+ cap<- BoxDataL$cap
+ ylab<- BoxDataL$ylab
+ if(mode(title)!="list") title<- list(title)
+ if(mode(cap)!="list") cap<- list(cap)
+ if(mode(ylab)!="list") ylab<- list(ylab)
+ if(length(title)==0) title<- list("")
+ if(length(title)==1) title<- c(title, list("n"))
+ if(length(title)==2) title<- c(title, list(""))
+ if(length(cap)==0) cap<- list("")
+ if(length(cap)==1) cap<- c(cap, list("n"),0) # 11.11.27
+ if(length(cap)==2) cap<- c(cap, 0) # 11.11.27
+ if(length(ylab)==0) ylab<- list("")
+ if(length(ylab)==1) ylab <- c(ylab, list("n"))
+ if(length(ylab)==2) ylab<- c(ylab, list(""))
+ Temp <- Hako[[length(Hako)]]
+ Drwline(Temp$frame)
+ Fontsize(cap[[2]])
+ for(i in Looprange(1,length(Hako)-1)){
+ Temp <- Hako[[i]]
+ attach(Temp)
+ Dashline(uwhisker,lwhisker)
+ Drwline(median,2)
+ Drwline(box,lwp,uwp)
+ Drwpt(outliers,0)
+ X <- uwhisker[1,1]
+ detach(Temp)
+ Htickmarklower(X)
+ if(nchar(cap[[1]])<1) next # 2011.03.08
+ if(length(cap)==2 || cap[[3]]==0){
+ pos<- 1
+ if(length(cap)>=4) pos<- cap[[4]]
+ Tmp<- paste("s",as.character(pos),sep="")
+ Letter(c(X,YMIN),Tmp, Op(i,cap[[1]]))
+ }
+ else{
+ rotate<- cap[[3]]
+ if(length(cap)==3){
+ pos<- 0
+ }
+ else{
+ pos<- cap[[4]]
+ }
+ Temp1 <- rotate*pi/180
+ Temp <- c(cos(Temp1),sin(Temp1))
+ Letterrot(c(X,YMIN-pos),Temp,Op(i,cap[[1]]))
+ }
+ }
+ if(nchar(ylab[[1]])>0){
+ Fontsize(ylab[[2]])
+ Tmp1<- ylab[[1]]
+ Tmp3<- ylab[[3]]
+ if(nchar(Tmp3)>0){
+ Tmp1<- paste("{\\",Tmp3," ",Tmp1,"}",sep="")
+ }
+ Letter(c(XMIN, YMAX),"n2",Tmp1)
+ Fontsize("n")
+ }
+ if(nchar(title[[1]])>0){
+ Fontsize(title[[2]])
+ Tmp1<- title[[1]]
+ Tmp3<- title[[3]]
+ if(nchar(Tmp3)>0){
+ Tmp1<- paste("{\\",Tmp3," ",Tmp1,"}",sep="")
+ }
+ Letter(c((XMIN+XMAX)/2,YMAX),"n2",Tmp1)
+ }
+ Fontsize("n")
+}
+
+Drwboxplot<- function(dataf,var,size,
+ title=list(""), cap=list(colnames(dataf)),
+ ylab=list(""), ptsize=5,plot=TRUE,...)
+ #Return : title,cap,ylab,commands,plotdata,info
+{
+ Tmp <- boxplot(dataf, plot=FALSE, ...)
+ Stats <- Tmp$stats
+ DataF<- Flattenlist(dataf) # 11.07.21(from)
+ ymin<- Inf
+ ymax<- -Inf
+ for(J in 1:length(DataF)){
+ Tmp<- DataF[[J]]
+ ymin<- min(ymin, min(Tmp))
+ ymax<- max(ymax,max(Tmp))
+ } # 11.07.21(upto)
+ Hako<- Boxplotdata2(dataf, size[2]/size[1], ...)
+ if(plot){
+ Windisp(Hako)
+ }
+ Tmp<- Formatting(size[1]/(XMAX-XMIN),5,5)
+ unit<- paste(Tmp,"cm",sep="")
+ Setunitlen(unit)
+ Exstr<- c(
+ "","",
+ paste("Beginpicture(","'",unit,"')",sep=""),
+ paste("Setpt(",as.character(ptsize),")",sep=""),
+ "","",
+ paste("Drwboxframe(",var,")",sep=""),
+ paste("VtickLV(c(",as.character(ymin),",", as.character(ymax),"),0,0)",sep=""),
+ "","","","",
+ "Setpt(1)",
+ "Endpicture(0)"
+ )
+ Exstr<- matrix(Exstr)
+ Xpos<- c()
+ for(i in Looprange(1,length(Hako)-1)){
+ Temp <- Hako[[i]]
+ Temp1 <- Temp[[5]]
+ Xpos <- c(Xpos,Temp1[1,1])
+ }
+ Info<- list(stats=Stats,window=matrix(c(XMIN,XMAX,YMIN,YMAX),nrow=2),xpos=Xpos)
+ Tmp<- paste(var,"<<- ",
+ "list(title=title,cap=cap,ylab=ylab,",
+ "commands=Exstr,plotdata=Hako,info=Info)",sep="")
+ eval(parse(text=Tmp))
+}
+
+
+###########################################
+
+Histplotdata <- function(DataV,Ratio,freq=TRUE,densplot=FALSE,...)
+# 10.12.07 freq
+{
+ Temp <- hist(DataV,plot=FALSE,...)
+ Breaks <- Temp$breaks
+ Counts <- Temp$counts
+ Density <- Temp$density
+ Mids <- Temp$mids
+ if(!freq){
+ Data<- Density
+ }
+ else{
+ Data<- Counts
+ }
+ Ghist <- list()
+ for(i in Looprange(1,length(Breaks)-1)){
+ Tmp1 <- c(Breaks[i],Breaks[i+1])
+ Tmp2 <- c(0,Data[i])
+ G1 <- Framedata(Tmp1,Tmp2) #bar
+ Ghist <- c(Ghist,list(G1))
+ }
+ Bin <- Breaks[2]-Breaks[1]
+ Eps <- 0.7*Bin # 0.7 times Bin
+ Temp1 <- c(min(Breaks)-Eps,max(Breaks)+Eps) # Put Eps at both sides
+ Temp2 <- c(0,max(Data)*1.02)
+ Setwindow(Temp1,Temp2)
+ Setorigin(c(Temp1[1],0))
+ R1<- (YMAX-YMIN)/(XMAX-XMIN)
+ R<- Ratio/R1
+ Setscaling(R)
+ VEps <- 0.05*(XMAX-XMIN)/5
+ Temp1<- Temp1-c(VEps,0)
+ Temp2<- Temp2-1/R*c(VEps,0)
+ Setwindow(Temp1,Temp2)
+ Fpt <- c(Mids[1]-Bin,0)
+ Lpt <- c(Mids[length(Mids)]+Bin,0)
+ Fp <- matrix(Fpt,nrow=1)
+ for(i in Looprange(1,length(Mids))){
+ Tmp <- c(Mids[i],Data[i])
+ Fp <- rbind(Fp,Tmp)
+ }
+ Fp <- rbind(Fp,Lpt)
+ rownames(Fp)<- c(1:nrow(Fp))
+ if(densplot){
+ Temp <- density(DataV)
+ X <- matrix(Temp$x)
+ Y <- matrix(Temp$y)
+ Gdens <- cbind(X,Y)
+ }
+ else{
+ Gdens <- list()
+ }
+ list(plotdata=list(histplot=Ghist,fpplot=list(Fp),densityplot=list(Gdens)),
+ breaks=Breaks,counts=Counts,density=Density,mids=Mids)
+}
+
+Drwhistframe<-function(HistDataL)
+{
+ title<- HistDataL$title
+ xlab<- HistDataL$xlab
+ ylab<- HistDataL$ylab
+ if(mode(title)!="list") title<- list(title)
+ if(mode(xlab)!="list") cap<- list(xlab)
+ if(mode(ylab)!="list") cap<- list(ylab)
+ if(length(title)==0) title<- list("")
+ if(length(title)==1) title<- c(title, list("n"))
+ if(length(title)==2) title<- c(title, list(""))
+ if(length(xlab)==0) xlab<- list("")
+ if(length(xlab)==1) xlab<- c(xlab, list("n"))
+ if(length(xlab)==2) xlab<- c(xlab, list(""))
+ if(length(xlab)==3) xlab<- c(xlab, list(8))
+ if(length(ylab)==0) ylab<- list("")
+ if(length(ylab)==1) ylab<- c(ylab, list("n"))
+ if(length(ylab)==2) ylab<- c(ylab, list(""))
+ if(nchar(title[[1]])>0){
+ Fontsize(title[[2]])
+ Tmp1<- title[[1]]
+ Tmp3<- title[[3]]
+ if(nchar(Tmp3)>0){
+ Tmp1<- paste("{\\",Tmp3," ",Tmp1,"}",sep="")
+ }
+ Letter(c((XMIN+XMAX)/2,YMAX),"n2",Tmp1)
+ Fontsize("n")
+ }
+ if(nchar(xlab[[1]])>0){
+ Fontsize(xlab[[2]])
+ Tmp1<- xlab[[1]]
+ Tmp3<- xlab[[3]]
+ if(nchar(Tmp3)>0){
+ Tmp1<- paste("{\\",Tmp3," ",Tmp1,"}",sep="")
+ }
+ Tmp4<- paste("s",as.character(xlab[[4]]),sep="")
+ Letter(c((XMIN+XMAX)/2,YMIN),Tmp4,Tmp1)
+ Fontsize("n")
+ }
+ if(nchar(ylab[[1]])>0){
+ Fontsize(ylab[[2]])
+ Tmp1<- ylab[[1]]
+ Tmp3<- ylab[[3]]
+ if(nchar(Tmp3)>0){
+ Tmp1<- paste("{\\",Tmp3," ",Tmp1,"}",sep="")
+ }
+ Tmp<- Setorigin()
+ Letter(c(Tmp[1], YMAX),"n2",Tmp1)
+ Fontsize("n")
+ }
+
+ Setax(2," ")
+ Setax(4," ")
+ Setax(6," ")
+}
+
+Drwhistplot<- function(datav,var,size,freq=TRUE,
+ title=list(""), xlab=list(""), ylab=list(""),
+ plot=TRUE,densplot=FALSE,fpplot=TRUE,...)
+ #Output : title,xlab,ylab,commands,plotdata,info
+{
+ H <- Histplotdata(datav, size[2]/size[1], freq=freq,densplot=densplot,...)
+ Pd<- H$plotdata
+ Ghist <- list(histplot=Pd$histplot,densityplot=Pd$densityplot) # 10.12.07
+ if(fpplot){
+ Ghist<- c(Ghist,list(fpplot=Pd$fpplot))
+ }
+ if(plot){
+ Windisp(Ghist)
+ }
+ Tmp<- Formatting(size[1]/(XMAX-XMIN),5,5)
+ unit<- paste(Tmp,"cm",sep="")
+ Setunitlen(unit)
+ Infostr<- paste(var,"$info",sep="")
+ Brkstr<- paste(Infostr,"$breaks",sep="")
+ Midstr<- paste(Infostr,"$mids",sep="")
+ if(!freq){
+ Digits<- ",2,2"
+ Denstr<- paste(Infostr,"$density",sep="")
+ }
+ else{
+ Digits<- ",0,0"
+ Denstr<- paste(Infostr,"$counts",sep="")
+ }
+
+ if(fpplot) Prefp<- "" else Prefp<- "#"
+ Exstr<- c(
+ "","",
+ paste("Beginpicture(","'",unit,"')",sep=""),
+ "","",
+ paste("Drwhistframe(",var,")",sep=""),
+ paste("HtickLV(",Midstr,",1,1)",sep=""),
+ paste("VtickLV(max(",Denstr,")",Digits,")",sep=""),
+ paste("Drwline(",var,"[['plotdata']]","$histplot)",sep=""),
+ paste(Prefp,"Dashline(",var,"[['plotdata']]","$fpplot)",sep=""),
+ paste("#Drwline(",var,"[['plotdata']]","$densityplot,2)",sep=""),
+ "","","","",
+ "Endpicture(1)"
+ )
+ Exstr<- matrix(Exstr)
+ Info<- list(breaks=H$breaks,counts=H$counts,density=H$density,mids=H$mids,
+ window=matrix(c(XMIN,XMAX,YMIN,YMAX),nrow=2))
+ Tmp<- paste(var,"<<- ",
+ "list(title=title,xlab=xlab,ylab=ylab,",
+ "commands=Exstr,plotdata=Ghist,info=Info)",sep="")
+ eval(parse(text=Tmp))
+}
+
+##########################
+#17.09.30
+
+Bezierpt<- function(t,Ptlist,Ctrlist){
+ if(length(Ptlist)==6){
+ P0=Ptlist[1:3]
+ P3=Ptlist[4:6]
+ P1=Ctrlist[1:3]
+ if(length(Ctrlist)==3){
+ P2=P3
+ flg3=0
+ }else{
+ P2=Ctrlist[4:6]
+ flg3=1
+ }
+ }else{
+ P0=Ptlist[1:2]
+ P3=Ptlist[3:4]
+ P1=Ctrlist[1:2]
+ if(length(Ctrlist)==2){
+ P2=P3
+ flg3=0
+ }else{
+ P2=Ctrlist[3:4]
+ flg3=1
+ }
+ }
+ P4=(1-t)*P0+t*P1
+ P5=(1-t)*P1+t*P2
+ P6=(1-t)*P2+t*P3
+ P7=(1-t)*P4+t*P5
+ P8=(1-t)*P5+t*P6
+ P9=(1-t)*P7+t*P8
+ if(flg3==0){
+ Out=P7
+ }else{
+ Out=P9
+ }
+ return(Out)
+}
+
+Bezier<- function(...){
+ varargin<- list(...)
+ Nargs=length(varargin)
+ Ptlist=varargin[[1]]
+ Ctrlist=varargin[[2]]
+ Num=10
+ for(J in Looprange(3,Nargs)){
+ Tmp=varargin[[J]]
+ K=strsplit(Tmp,'=',fixe=TRUE)
+ K=K[[1]]
+ Tmp1=substring(K[1],1,1)
+ Lhs=toupper(Tmp1)
+ if(Lhs=="N"){
+ Num=eval(parse(text=K[2]))
+ }
+ }
+ if(length(Num)==1){
+ Num=rep(Num,length(Ctrlist)) #17.10.08
+ }
+ Out=c()
+ for(ii in Looprange(1,length(Ctrlist))){
+ Tmp1=c(Ptlist[[ii]],Ptlist[[ii+1]])
+ Tmp2=Ctrlist[[ii]]
+ if(ii==1){
+ St=0
+ }else{
+ St=1
+ }
+ for(J in Looprange(St,Num[ii])){
+ Tmp=Bezierpt(J/Num[ii],Tmp1,Tmp2)
+ Out=Appendrow(Out,Tmp)
+ }
+ }
+ return(Out)
+}
+
+#######################
+# 17.10.02
+
+Connectseg<- function(...){
+ varargin=list(...)
+ Nargs=length(varargin)
+ Pdata=varargin[[1]]
+ Eps=10^(-4)
+ if(Nargs>=2){
+ Eps=varargin[[2]]
+ }
+ if(is.matrix(Pdata)){
+ Din=Dataindex(Pdata)
+ tmp1=list()
+ for(J in 1:nrow(Din)){
+ tmp=Pdata[Din[J,1]:Din[J,2],]
+ tmp1=c(tmp1,list(tmp))
+ }
+ Pdata=tmp1
+ }
+ PlotL=list(Op(1,Pdata))
+ VI=Looprange(2,length(Pdata))
+ while(length(VI)>0){
+ Qd=Op(Length(PlotL),PlotL)
+ Ah=Op(1,Qd); Ao=Op(Length(Qd),Qd)
+ Flg=0
+ for(J in 1:length(VI)){
+ Tmp1=Op(VI[J],Pdata)
+ P=Op(1,Tmp1); Q=Op(Length(Tmp1),Tmp1)
+ if(Norm(P-Ao)<Eps){
+ Tmp=Tmp1[Looprange(2,Length(Tmp1)),]
+ if(Length(Tmp)>0){
+ Qd=Appendrow(Qd,Tmp)
+ }
+ PlotL[[length(PlotL)]]=Qd
+ VI=VI[-J]
+ Flg=1
+ break
+ }
+ if(Norm(Q-Ao)<Eps){
+ Tmp=Tmp1[(nrow(Tmp1)-1):1,]
+ Qd=Appendrow(Qd,Tmp)
+ PlotL[[length(PlotL)]]=Qd
+ VI=VI[-J]
+ Flg=1
+ break
+ }
+ if(Norm(P-Ah)<Eps){
+ Tmp=Tmp1[2:nrow(Tmp1),]
+ Qd=Appendrow(Tmp,Qd)
+ PlotL[[length(PlotL)]]=Qd
+ VI=VI[-J]
+ Flg=1
+ break
+ }
+ if(Norm(Q-Ah)<Eps){
+ Tmp=Tmp1[(nrow(Tmp1)-1):1,]
+ Qd=Appendrow(Tmp,Qd)
+ PlotL[[length(PlotL)]]=Qd
+ VI=VI[-J]
+ Flg=1
+ break
+ }
+ }
+ if(Flg==0){
+ PlotL=c(PlotL,Pdata[VI[1]])
+ VI=VI[-1]
+ }
+ }
+ return(PlotL)
+}
+
+Makevaltable<- function(MS){
+ Eps=10^(-6)
+ Nargs=length(MS)
+ Fstr=Op(1,MS)
+ Tmp=Op(2,MS)
+ Tmp1=strsplit(Tmp,"=",fixed=TRUE)
+ Tmp1=Tmp1[[1]]
+ Xname=Tmp1[1]
+ Xrange=eval(parse(text=Tmp1[2]))
+ Tmp=Op(3,MS)
+ Tmp1=strsplit(Tmp,"=",fixed=TRUE)
+ Tmp1=Tmp1[[1]]
+ Yname=Tmp1[1]
+ Yrange=eval(parse(text=Tmp1[2]))
+ Tmp=gsub(Xname,"x",Fstr)
+ Fstr=gsub(Yname,"y",Tmp)
+ Tmp=grep(Xname,Fstr)
+ if(length(Tmp)==0){
+ Fstr=paste(Fstr,'+0*x',sep="")
+ }
+ Mdv=50
+ Ndv=50
+ if(Nargs>=4){
+ Tmp=Op(4,MS)
+ if(Length(Tmp)>1){ #18.02.09
+ Mdv=Op(1,Tmp)
+ Ndv=Op(2,Tmp)
+ }else{
+ Mdv=Tmp
+ if(Nargs==4){
+ Ndv=Mdv
+ }else{
+ Tmp1=Op(5,MS)
+ if((is.numeric(Tmp1))&&(length(Tmp1)==1)){
+ Ndv=Tmp1
+ }else{
+ Ndv=Mdv
+ }
+ }
+ }
+ }
+ X1=Xrange[1]; X2=Xrange[2]
+ Y1=Yrange[1]; Y2=Yrange[2]
+ Dx=(X2-X1)/Mdv
+ Dy=(Y2-Y1)/Ndv
+ Xval=c()
+ Tmp=X1
+ for(ii in 1:(Mdv+1)){
+ Tmp=X1+(ii-1)*Dx
+ Xval=c(Xval,Tmp)
+ }
+ Yval=c()
+ Tmp=Y1
+ for(jj in 1:(Ndv+1)){
+ Tmp=Y1+(jj-1)*Dy
+ Yval=c(Yval,Tmp)
+ }
+ Zval=matrix(nrow=Ndv+1,ncol=Mdv+1)
+ I=1
+ for(y in Yval){
+ J=1
+ for(x in Xval){
+ Zval[I,J]=eval(parse(text=Fstr))
+ J=J+1
+ }
+ I=I+1
+ }
+ return(list(Zval,Xval,Yval))
+}
+
+Implicitplot<- function(...){
+ varargin=list(...)
+ Eps0=10^(-4)
+ Nargs=length(varargin)
+ Fstr=varargin[[1]]
+ if(is.list(Fstr)){
+ MS=Fstr
+ Tmp=Makevaltable(MS)
+ Zval=Tmp[[1]]; Xval=Tmp[[2]]; Yval=Tmp[[3]]
+ }else if(is.character(Fstr)){
+# MS=list()
+# for(I in 1:Nargs){
+# MS=c(MS,varargin[I])
+# }
+# Tmp=Makevaltable(MS)
+ Tmp=Makevaltable(varargin) #18.02.24
+ Zval=Tmp[[1]]; Xval=Tmp[[2]]; Yval=Tmp[[3]]
+ }else{
+ Zval=varargin[[1]]
+ Xval=varargin[[2]]
+ Yval=varargin[[3]]
+ }
+ Out=c()
+ for(J in Looprange(1,length(Yval)-1)){
+ for(I in Looprange(1,length(Xval)-1)){
+ a1=Xval[I]; b1=Yval[J]; c1=Zval[J,I]
+ a2=Xval[I+1]; b2=Yval[J]; c2=Zval[J,I+1]
+ a3=Xval[I+1]; b3=Yval[J+1]; c3=Zval[J+1,I+1]
+ a4=Xval[I];b4=Yval[J+1];c4=Zval[J+1,I]
+ PL=matrix(c(a1,b1,a2,b2,a3,b3,a4,b4,a1,b1),ncol=2,byrow=TRUE)
+ VL=c(c1,c2,c3,c4,c1)
+ QL=c()
+ for(K in 1:4){
+ if(abs(VL[K])<=Eps0){
+ QL=Appendrow(QL,PL[K,])
+ }else if(VL[K]>Eps0){
+ if(VL[K+1]< -Eps0){
+ Tmp=1/(VL[K]-VL[K+1])*(-VL[K+1]*PL[K,]+VL[K]*PL[K+1,])
+ QL=Appendrow(QL,Tmp)
+ }
+ }else{
+ if(VL[K+1]>Eps0){
+ Tmp=1/(-VL[K]+VL[K+1])*(VL[K+1]*PL[K,]-VL[K]*PL[K+1,])
+ QL=Appendrow(QL,Tmp)
+ }
+ }
+ }
+ if(Length(QL)==2){
+ Out=Appendrow(Out,c(Inf,Inf))
+ Out=Appendrow(Out,QL)
+ }
+ }
+ }
+ Out=Out[2:nrow(Out),]
+ if(Length(Out)>0){
+ Out=Connectseg(Out)
+ }else{
+ Out=c()
+ }
+ return(Out)
+}
+
+#########################
+# 17.10.06
+
+Deqdata=function(deq,rng,initt,initf,Num){
+ Eps=10^(-3)
+ inf=10^3
+ tmp=strsplit(deq,"=")[[1]]
+ tmp1=gsub("`","",tmp[1],fixed=TRUE)
+ tmp1=substring(tmp1,3,nchar(tmp1)-1)
+ Xname=strsplit(tmp1,",")[[1]]
+ func=tmp[2]
+ for(J in 1:(length(Xname))){
+ tmp1=paste("X[",as.character(J),"]",sep="")
+ func=gsub(Xname[J],tmp1,func,fixed=TRUE)
+ }
+ tmp=strsplit(rng,"=")[[1]]
+ tname=tmp[1]
+ tmp=eval(parse(text=tmp[2]))
+ t1=tmp[1]
+ t2=tmp[2]
+ tmp=paste("function(",tname,",X){",func,"}",sep="")
+ funP=eval(parse(text=tmp))
+ tmp=paste("function(",tname,",X){-",func,"}",sep="")
+ funN=eval(parse(text=tmp))
+ dt=(t2-t1)/Num
+ tt=initt
+ X0=initf
+ pdL=c(tt,X0)
+ for(J in Looprange(1,floor((t2-initt)/dt))){
+ kl1=dt*funP(tt,X0)
+ kl2=dt*funP(tt+dt/2,X0+kl1/2)
+ kl3=dt*funP(tt+dt/2,X0+kl2/2)
+ kl4=dt*funP(tt+dt,X0+kl3)
+ X0=X0+(kl1+2*kl2+2*kl3+kl4)/6
+ tt=initt+J*dt
+ tmp=c(tt,X0)
+ if(Norm(tmp)>inf){break}
+ pdL=Appendrow(pdL,tmp)
+ }
+ tt=initt
+ X0=initf
+ for(J in Looprange(1,floor((initt-t1)/dt))){
+ kl1=dt*funN(tt,X0)
+ kl2=dt*funN(tt+dt/2,X0+kl1/2)
+ kl3=dt*funN(tt+dt/2,X0+kl2/2)
+ kl4=dt*funN(tt+dt,X0+kl3)
+ X0=X0+(kl1+2*kl2+2*kl3+kl4)/6
+ tt=initt-J*dt
+ tmp=c(tt,X0)
+ if(Norm(tmp)>inf){break}
+ pdL=Appendrow(tmp,pdL)
+ }
+ pdL
+}
+
+Deqplot=function(...){
+ varargin=list(...)
+ deq=varargin[[1]]
+ rng=varargin[[2]]
+ initt=varargin[[3]]
+ initf=varargin[[4]]
+ Num=50
+ Sel=c(1,2)
+ for(J in Looprange(5,length(varargin))){
+ tmp1=varargin[[J]]
+ if(is.character(tmp1)){
+ tmp=strsplit(tmp1,"=")[[1]]
+ Num=eval(parse(text=tmp[2]))
+ }else{
+ SeL=tmp1
+ }
+ }
+ pdL=Deqdata(deq,rng,initt,initf,Num)
+ pdL=pdL[,SeL]
+}
+
+
+############## obj ###############
+
+Openobj<- function(Fnm){
+ OBJFMT<<- "%7.4f"
+ NPOINT<<- 0
+ NNORM<<- 0
+ OBJSCALE<<- 1
+ OBJFIGNO<<- 0
+ OBJJOIN<<- 0
+ Wfile<<- Fnm
+ Tmp=grep(".obj",Fnm,fixed=TRUE)
+ if(length(Tmp)==0){
+ if(nchar(Fnm)>0){
+ Wfile<<- paste(Fnm,".obj",sep="")
+ }
+ }
+ cat("",file=Wfile,sep="")
+ Wfile
+}
+
+Closeobj<- function(){
+ Wfile=""
+}
+
+Writeobjpoint<- function(P){
+ X=sprintf(OBJFMT,P[1]*OBJSCALE)
+ Y=sprintf(OBJFMT,P[2]*OBJSCALE)
+ Z=sprintf(OBJFMT,P[3]*OBJSCALE)
+ Str=paste("v",X,Y,Z,sep=" ")
+ Printobjstr(Str)
+ NPOINT<<- NPOINT+1
+ return(NPOINT)
+}
+
+Printobjstr<- function(Str){
+ cat(Str,"\n",sep="",file=Wfile,append=TRUE)
+}
+
+Objname<- function(){
+ if(OBJJOIN==0){
+ OBJFIGNO<<- OBJFIGNO+1
+ Gname=paste("ketfig",as.character(OBJFIGNO),sep="")
+ Printobjstr(paste("# ",Gname,sep=""))
+ Printobjstr(paste("g ",Gname,sep=""))
+ }
+}
+
+Objjoin<- function(...){
+ varargin=list()
+ if(length(varargin)>0){
+ OBJJOIN<<- abs(sign(varargin[[1]]))
+ }
+ OBJJOIN
+}
+
+Objsurf<- function(...){ #17.12.18
+ Args<- list(...)
+ Nargs<- length(Args)
+ Sel=Args[[Nargs]]; Nargs=Nargs-1
+ Rf=Args[[1]]
+ N=2
+ Mg=0; Ng=0
+ if(is.numeric(Args[[N]])){
+ if(length(Args[[N]])>2){
+ U=Args[[N]]
+ Mg=length(U)-1
+ N=N+1
+ }else if(length(Args[[N]])==2){
+ Intab=Args[[N]]
+ Ag=Intab[1]; Bg=Intab[2]
+ N=N+1
+ }else{
+ Ag=Args[N]; Bg=Args[N+1]
+ N=N+2
+ }
+ }else{
+ Tmp0=Args[[N]]
+ Tmp=grep("=",Tmp0,fixed=TRUE)
+ if(length(Tmp)>0){
+ Tmp1=strsplit(Tmp0,"=")
+ Tmp0=Tmp1[[1]][2]
+ }
+ Intab=eval(parse(text=Tmp0))
+ Ag=Intab[1]; Bg=Intab[2]
+ N=N+1
+ }
+ if(is.numeric(Args[[N]])){
+ if(length(Args[[N]])>2){
+ V=Args[[N]]
+ Ng=length(V)-1
+ N=N+1
+ }else if(length(Args[[N]])==2){
+ Intab=Args[[N]]
+ Cg=Intab[1]; Dg=Intab[2]
+ N=N+1
+ }else{
+ Cg=Args[[N]]; Dg=Args[[N+1]]
+ N=N+2
+ }
+ }else{ # the case of is.character(Args[[N]])
+ Tmp0=Args[[N]]
+ Tmp=grep("=",Tmp0,fixed=TRUE)
+ if(length(Tmp)>0){
+ Tmp2=strsplit(Tmp0,"=")
+ Tmp0=Tmp2[[1]][2]
+ }
+ Intab=eval(parse(text=Tmp0))
+ Cg=Intab[1]; Dg=Intab[2]
+ N=N+1
+ }
+ if(Mg==0){
+ Mg=Args[[N]]
+ N=N+1
+ U=c()
+ for(J in Looprange(1,Mg+1)){
+ U=c(U,Ag+(J-1)/Mg*(Bg-Ag))
+ }
+ }
+ if(Ng==0){
+ Ng=Args[[N]]
+ V=c()
+ for(K in Looprange(1,Ng+1)){
+ V=c(V,Cg+(K-1)/Ng*(Dg-Cg))
+ }
+ }
+ Objname()
+ PL=list()
+ for(J in Looprange(1,Mg+1)){
+ for(K in Looprange(1,Ng+1)){
+ P=Rf(U[J],V[K])
+ Np=Writeobjpoint(P)
+ PL=c(PL,list(c(P,Np)))
+ }
+ }
+ Idx=1+(Ng+1)*(0:Mg)
+ Pus=PL[Idx]
+ Idx=(Ng+1)*(1:(Mg+1))
+ Pue=PL[Idx]
+ Idx=1:(Ng+1)
+ Pvs=PL[Idx]
+ Idx=((Ng+1)*Mg+1):((Ng+1)*(Mg+1))
+ Pve=PL[Idx]
+ Printobjstr("vt 0 0")
+ Printobjstr("vt 1 0")
+ Printobjstr("vt 1 1")
+ Printobjstr("vt 0 1")
+ for(J in Looprange(1,Mg)){
+ for(K in Looprange(1,Ng)){
+ P1=sprintf("%1d",Op(4,PL[[(Ng+1)*(J-1)+K]]))
+ P2=sprintf("%1d",Op(4,PL[[(Ng+1)*J+K]]))
+ P3=sprintf("%1d",Op(4,PL[[(Ng+1)*J+K+1]]))
+ P4=sprintf("%1d",Op(4,PL[[(Ng+1)*(J-1)+K+1]]))
+ N1=""; N2=""; N3=""; N4=""
+ if(Sel=="+"){
+ Str=paste("f ",P1,"/1/",N1," ",P2,"/2/",N2," ",sep="")
+ Str=paste(Str,P3,"/3/",N3," ",P4,"/4/",N4,sep="")
+ }else{
+ Str=paste("f ",P1,"/1/",N1," ",P4,"/4/",N4," ",sep="")
+ Str=paste(Str,P3,"/3/",N3," ",P2,"/2/",N2,sep="")
+ }
+ Printobjstr(Str)
+ }
+ }
+ list(U,V,Pus,Pue,Pvs,Pve)
+}
+
+Objthicksurf<- function(...){
+ Args=list(...)
+ Nargs=length(Args)
+ Sel=Args[[Nargs]]; Nargs=Nargs-1
+ Selsurf=substring(Sel,1,1)
+ Selside=c("0","0","0","0")
+ Tmp=grep("w",Sel,fixed=TRUE)
+ if(length(Tmp)>0){
+ Selside[1]="w"
+ }
+ Tmp=grep("e",Sel,fixed=TRUE)
+ if(length(Tmp)>0){
+ Selside[2]="e"
+ }
+ Tmp=grep("s",Sel,fixed=TRUE)
+ if(length(Tmp)>0){
+ Selside[3]="s"
+ }
+ Tmp=grep("n",Sel,fixed=TRUE)
+ if(length(Tmp)>0){
+ Selside[4]="n"
+ }
+ Nfth=Args[[Nargs-2]]
+ Thick1=Args[[Nargs-1]]
+ Thick2=Args[[Nargs]]
+ Nargs=Nargs-3
+ Rfth=Args[[1]]
+ N=2
+ Mg=0; Ng=0
+ if(is.numeric(Args[[N]])){
+ if(length(Args[[N]])>2){
+ U=Args[[N]]
+ Mg=length(U)-1
+ N=N+1
+ }else if(length(Args[[N]])==2){
+ Intab=Args[[N]]
+ Ag=Intab[1]; Bg=Intab[2]
+ N=N+1
+ }else{
+ Ag=Args[[N]]; Bg=Args[[N+1]]
+ N=N+2
+ }
+ }else{
+ Tmp0=Args[[N]]
+ Tmp=strsplit(Tmp0,"=",fixe=TRUE)
+ if(length(Tmp)>0){
+ Tmp0=Tmp[[1]][2]
+ }
+ Intab=eval(parse(text=Tmp0))
+ Ag=Intab[1]; Bg=Intab[2]
+ N=N+1
+ }
+ if(is.numeric(Args[[N]])){
+ if(length(Args[[N]])>2){
+ V=Args[[N]]
+ Ng=length(V)-1
+ N=N+1
+ }else if(length(Args[[N]])==2){
+ Intab=Args[[N]]
+ Cg=Intab[1]; Dg=Intab[2]
+ N=N+1
+ }else{
+ Cg=Args[[N]]; Dg=Args[[N+1]]
+ N=N+2
+ }
+ }else{
+ Tmp0=Args[[N]]
+ Tmp=strsplit(Tmp0,"=",fixed=TRUE)
+ if(length(Tmp)>0){
+ Tmp0=Tmp[[1]][2]
+ }
+ Intab=eval(parse(text=Tmp0))
+ Cg=Intab[1]; Dg=Intab[2]
+ N=N+1
+ }
+ if(Mg==0){
+ Mg=Args[[N]]
+ N=N+1
+ U=c()
+ for(J in Looprange(1,Mg+1)){
+ U=c(U,Ag+(J-1)/Mg*(Bg-Ag))
+ }
+ }
+ if(Ng==0){
+ Ng=Args[[N]]
+ V=c()
+ for(K in Looprange(1,Ng+1)){
+ V=c(V,Cg+(K-1)/Ng*(Dg-Cg))
+ }
+ }
+ Objname()
+ Join=OBJJOIN
+ OBJJOIN<<- 1
+ F1=function(u,v){
+ Rfth(u,v)+Thick1*Nfth(u,v)
+ }
+ F2=function(u,v){
+ Rfth(u,v)+Thick2*Nfth(u,v)
+ }
+ Dt1=Objsurf(F1,U,V,Selsurf)
+ if(Selsurf=="+"){
+ Tmp="-"
+ }else{
+ Tmp="+"
+ }
+ Dt2=Objsurf(F2,U,V,Tmp);
+ Out=list(Dt1,Dt2);
+
+ if(Selside[1]!="0"){
+ Dt=Objrecs(Op(3,Dt1),Op(3,Dt2),Selside[1])
+ Out=c(Out,list(Dt))
+ }
+ if(Selside[2]!="0"){
+ Dt=Objrecs(Op(4,Dt1),Op(4,Dt2),Selside[2])
+ Out=c(Out,list(Dt))
+ }
+ if(Selside[3]!="0"){
+ Dt=Objrecs(Op(5,Dt1),Op(5,Dt2),Selside[3])
+ Out=c(Out,list(Dt))
+ }
+ if(Selside[4]!="0"){
+ Dt=Objrecs(Op(6,Dt1),Op(6,Dt2),Selside[4])
+ Out=c(Out,list(Dt))
+ }
+ OBJJOIN<<- Join
+}
+
+Objrecs<- function(...){
+ Eps=10^(-6)
+ Args=list(...)
+ Nargs=length(Args)
+ Tmp=Args[[1]]
+ PtL=Flattenlist(Tmp)
+ for(J in Looprange(1,length(PtL))){ #17.12.23from
+ Tmp=PtL[[J]]
+ if(!is.matrix(Tmp)){
+ PtL[[J]]=matrix(Tmp,nrow=1)
+ }
+ } #17.12.23upto
+ PL1=list()
+ for(J in Looprange(1,length(PtL))){
+ Tmp=PtL[[J]]
+ for(K in Looprange(1,nrow(Tmp))){
+ PL1=c(PL1,list(Tmp[K,]))
+ }
+ }
+ Sel=Args[[Nargs]]; Nargs=Nargs-1
+ Objname()
+ for(J in Looprange(1,length(PL1))){
+ P=PL1[[J]]
+ if((length(P)<4) || (P[4]==0)){
+ Np=Writeobjpoint(P)
+ PL1[[J]]=c(P[1:3],Np)
+ }
+ }
+ Tmp=Args[[2]]
+ if((is.numeric(Tmp)) && (length(Tmp)==1)){
+ Drv=Tmp
+ Len=Norm(Drv)
+ PL2=list()
+ for(J in Looprange(1,length(PL1))){
+ Tmp=PL1[[J]]
+ P=Tmp[1:3]+Drv
+ Np=Writeobjpoint(P)
+ PL2=c(PL2,list(c(P[1:3],Np)))
+ if(J<length(PL1)){
+ Vec=PL1[[J+1]]-PL1[[J]]
+ if(Norm(Vec)>Eps){
+ Tmp1=Crossprod(Drv,Vec)
+ Tmp2=Crossprod(Tmp1,Vec)
+ Tmp3=Dotprod(Tmp2,Drv)
+ if(Tmp3<-Eps){
+ Tmp2=-Tmp2
+ }
+ Drv=Len/Norm(Tmp2)*Tmp2
+ }
+ }
+ }
+ }else{
+ PtL=Flattenlist(Tmp)
+ for(J in Looprange(1,length(PtL))){ #17.12.23from
+ Tmp=PtL[[J]]
+ if(!is.matrix(Tmp)){
+ PtL[[J]]=matrix(Tmp,nrow=1)
+ }
+ } #17.12.23upto
+ PL2=list()
+ for(J in Looprange(1,length(PtL))){
+ Tmp=PtL[[J]]
+ for(K in Looprange(1,nrow(Tmp))){
+ PL2=c(PL2,list(Tmp[K,]))
+ }
+ }
+ for(J in Looprange(1,length(PL2))){
+ P=PL2[[J]]
+ if((length(P)<4) || (P[4]==0)){
+ Np=Writeobjpoint(P)
+ PL2[[J]]=c(P[1:3],Np)
+ }
+ }
+ }
+ Printobjstr("vt 0 0")
+ Printobjstr("vt 1 0")
+ Printobjstr("vt 1 1")
+ Printobjstr("vt 0 1")
+ for(J in Looprange(2,length(PL1))){
+ P1=sprintf("%1d",Op(4,PL1[[J-1]]))
+ P2=sprintf("%1d",Op(4,PL2[[J-1]]))
+ P3=sprintf("%1d",Op(4,PL2[[J]]))
+ P4=sprintf("%1d",Op(4,PL1[[J]]))
+ N1=""; N2=""; N3=""; N4=""
+ if(Sel=="+"){
+ Str=paste("f ",P1,"/1/",N1," ",P2,"/2/",N2," ",sep="")
+ Str=paste(Str,P3,"/3/",N3," ",P4,"/4/",N4,sep="")
+ }else{
+ Str=paste("f ",P1,"/1/",N1," ",P4,"/4/",N4," ",sep="")
+ Str=paste(Str,P3,"/3/",N3," ",P2,"/2/",N2,sep="")
+ }
+ Printobjstr(Str)
+ }
+ list(PL1,PL2)
+}
+
+Objpolygon<- function(...){
+ Eps=10^(-6)
+ Args=list(...)
+ Nargs=length(Args)
+ Tmp=Args[[1]]
+ PtL=Flattenlist(Tmp)
+ for(J in Looprange(1,length(PtL))){ #17.12.23from
+ Tmp=PtL[[J]]
+ if(!is.matrix(Tmp)){
+ PtL[[J]]=matrix(Tmp,nrow=1)
+ }
+ } #17.12.23upto
+ PL=list()
+ for(J in Looprange(1,length(PtL))){
+ Tmp=PtL[[J]]
+ for(K in Looprange(1,nrow(Tmp))){
+ PL=c(PL,list(Tmp[K,]))
+ }
+ }
+ Sel=Args[[Nargs]]; Nargs=Nargs-1
+ Objname()
+ for(J in Looprange(1,length(PL))){
+ P=PL[[J]]
+ if((length(P)<4) || (P(4)==0)){
+ Np=Writeobjpoint(P)
+ PL[[J]]=c(P[1:3],Np)
+ }
+ }
+ if(Nargs==1){
+ Tmp=PL[[1]]
+ Cen=Tmp[1:3]
+ Nc=Tmp[4]
+ }else{
+ Tmp=Args[[2]]
+ if(length(Tmp)==1){
+ Tmp1=PL[[Tmp]]
+ Cen=Tmp1[1:3]
+ Nc=Tmp[4]
+ }else{
+ Cen=Tmp
+ Nc=Writeobjpoint(Cen)
+ }
+ }
+ for(J in Looprange(1,length(PL))){
+ if(J<length(PL)){
+ Je=J+1
+ }else{
+ Je=1
+ }
+ Pt1=Cen
+ PLj=PL[[J]]; PLje=PL[[Je]]
+ Pt2=PLj[1:3]; Pt3=PLje[1:3]
+ if(Norm(Crossprod(Pt2-Pt1,Pt3-Pt1))<Eps){
+ next
+ }
+ P1=sprintf("%1d",Nc)
+ P2=sprintf("%1d",PLj[4])
+ P3=sprintf("%1d",PLje[4])
+ if(Sel=="+"){
+ Str=paste("f",P1,P2,P3,"",sep=" ")
+ }else{
+ Str=paste("f",P1,P3,P2,"",sep=" ")
+ }
+ Printobjstr(Str)
+ }
+ PL
+}
+
+Objpolyhedron<- function(Vertex,Face){
+ OBJFIGNO<<- OBJFIGNO+1
+ Ninit=NPOINT
+ Objname()
+ for(N in Looprange(1,length(Vertex))){
+ P=Vertex[[N]]
+ Np=Writeobjpoint(P)
+ Vertex[[N]]=c(P[1:3],Np)
+ }
+ for(N in Looprange(1,length(Face))){
+ F=Face[[N]]+Ninit
+ Face[[N]]=F
+ Str="f"
+ for(J in Looprange(1,length(F))){
+ P=sprintf("%1d",F[J])
+ Str=paste(Str,P,sep=" ")
+ }
+ Printobjstr(Str)
+ }
+ list(Vertex,Face)
+}
+
+Objcurve<- function(...){
+ Eps=10^(-6)
+ Args=list(...)
+ Nargs=length(Args)
+ Tmp=Args[[1]]
+ PtL=Flattenlist(Tmp)
+ for(J in Looprange(1,length(PtL))){ #17.12.23from
+ Tmp=PtL[[J]]
+ if(!is.matrix(Tmp)){
+ PtL[[J]]=matrix(Tmp,nrow=1)
+ }
+ } #17.12.23upto
+ PL=list()
+ for(J in Looprange(1,length(PtL))){
+ Tmp=PtL[[J]]
+ for(K in Looprange(1,nrow(Tmp))){
+ PL=c(PL,list(Tmp[K,]))
+ }
+ }
+ Closed=Norm(PL[[length(PL)]]-PL[[1]])<Eps
+ Pstr="xy"
+ Tmp=Args[[Nargs]]
+ if(is.character(Tmp)){
+ Pstr=Tmp
+ Nargs=Nargs-1
+ }
+ Sz=0.1
+ Np=4
+ if(Nargs>=2){
+ Sz=Args[[2]]
+ }
+ if(Nargs>=3){
+ Np=Args[[3]]
+ }
+ Assign("Sz",Sz)
+ if(Pstr=="xy"){
+ Vz=c(0,0,1)
+ Fs=Assign("c(Sz*cos(t),Sz*sin(t),0)")
+ }
+ if(Pstr=="yz"){
+ Vz=c(1,0,0)
+ Fs=Assign("c(0,Sz*cos(t),Sz*sin(t))")
+ }
+ if(Pstr=="zx"){
+ Vz=c(0,1,0)
+ Fs=Assign("c(Sz*sin(t),0,Sz*cos(t))")
+ }
+ Gc0=Spacecurve(Fs,"t=c(0,2*pi)",paste("Num=",as.character(Np),sep=""))
+ P=PL[[1]]; Q=PL[[2]]; R=PL[[length(PL)-1]]
+ PQ1=Q-P
+ if(!Closed){
+ PQ2=PQ1
+ }else{
+ PQ2=P-R
+ }
+ Vp=PQ1/Norm(PQ1)+PQ2/Norm(PQ2)
+ Vp1=Vp/Norm(Vp)
+ Theta=acos(min(Dotprod(Vz,Vp1),1));
+ Vj=Crossprod(Vz,Vp1)
+ if(Norm(Vj)<Eps){
+ Vj=Vz
+ }
+ Gc1=Rotate3data(Gc0,Vj,Theta)
+ CL=list(Translate3data(Gc1,P))
+ for(J in Looprange(2,length(PL)-1)){
+ P=PL[[J]]; Q=PL[[J+1]]
+ PQ2=Q-P
+ if(Norm(PQ2)<Eps){
+ next
+ }
+ Vp=PQ1/Norm(PQ1)+PQ2/Norm(PQ2)
+ Vp2=Vp/Norm(Vp)
+ Theta=acos(min(Dotprod(Vp1,Vp2),1))
+ Vj=Crossprod(Vp1,Vp2)
+ if(Norm(Vj)<Eps){
+ Vj=Vp1
+ }
+ Gc2=Rotate3data(Gc1,Vj,Theta)
+ CL=c(CL,list(Translate3data(Gc2,P)))
+ PQ1=PQ2
+ Vp1=Vp2
+ Gc1=Gc2
+ }
+ if(!Closed){
+ Vp2=(Q-P)/Norm(Q-P)
+ Theta=acos(min(Dotprod(Vp1,Vp2),1))
+ Vj=Crossprod(Vp1,Vp2)
+ if(Norm(Vj)<Eps){
+ Vj=Vp1
+ }
+ Gc3=Rotate3data(Gc1,Vj,Theta)
+ CL=c(CL,list(Translate3data(Gc3,Q)))
+ }
+ Objname()
+ Join=Objjoin();
+ Objjoin(1)
+ GL1=CL[[1]]
+ for(J in Looprange(2,length(CL))){
+ GL2=CL[[J]]
+ Dt=Objrecs(GL1,GL2,"-")
+ GL1=Dt[[2]]
+ if(J==2){
+ GL0=Dt[[1]]
+ }
+ }
+ if(!Closed){
+ Objpolygon(CL[[1]],"-")
+ N=length(CL)
+ Objpolygon(CL[[N]],"+")
+ }else{
+ Objrecs(GL1,GL0,"-")
+ }
+ Out=CL
+ OBJJOIN<<- Join
+}
+
+Objsymb<- function(Symb,Thick,Face,Dir){
+ for(J in Looprange(1,length(Symb))){
+ Objcurve(Op(J,Symb),Thick,Face,Dir)
+ }
+}
+
+Symb3data<- function(Moji,Size,Kaiten,NV,Pos){
+ if(is.character(Moji)){
+ #Tmp=Symbdata(Moji)
+ # GY1=Tmp(2)
+ }else{
+ GY1=Moji
+ }
+ GY1=Scaledata(GY1,Size,Size)
+ GY1=Rotatedata(GY1,Kaiten*pi/180)
+ A=NV[1]; B=NV[2]; C=NV[3]
+ if(A^2+B^2==0){
+ E1=c(1,0,0)
+ E2=c(0,1,0)
+ }else{
+ E1=c(B,-A,0)
+ E2=c(-A*C,-B*C,A^2+B^2)
+ Tmp=matrix(c(E1,E2,NV),3,3)
+ D=det(Tmp)
+ if(D<0){
+ E1=-E1
+ }
+ E1=E1/Norm(E1)
+ E2=E2/Norm(E2)
+ }
+ Em<- function(X,Y){
+ c(E1[1]*X+E2[1]*Y,E1[2]*X+E2[2]*Y,E1[3]*X+E2[3]*Y)
+ }
+ GY1=Embed(GY1,Em)
+ GY1=Translate3data(GY1,Pos)
+ Flattenlist(GY1)
+}
+
+############## New Intersect 18.02.01 #############
+
+Intersectline<- function(p1,v1,p2,v2){
+ Eps0=10^(-5)
+ tmp=Dotprod(v1,v2)
+ tmp1=c(tmp,Norm(v1)^2)
+ tmp2=c(-Norm(v2)^2,-tmp)
+ tmp3=c(Dotprod(p2-p1,v2),Dotprod(p2-p1,v1))
+ d=Crossprod(tmp1,tmp2)
+ tmp=abs(Crossprod(v1,v2))
+ if(tmp>Eps0){
+ dt=Crossprod(tmp3,tmp2)
+ ds=Crossprod(tmp1,tmp3)
+ t=dt/d
+ s=ds/d
+ pt=p1+v1*t
+ out=list(pt,t,s)
+ }else{
+ tmp1=Crossprod(p2-p1,v1)/Norm(v1)
+ out=list(abs(tmp1))
+ }
+ return(out)
+}
+
+Intersectseg<- function(...){
+ varargin=list(...)
+ Nargs=length(varargin)
+ Eps0=10^(-4)
+ Eps1=0.01
+ seg1=varargin[[1]]
+ seg2=varargin[[2]]
+ if(Nargs>2){Eps1=varargin[[3]]}
+ p1=Op(1,seg1); q1=Op(2,seg1)
+ p2=Op(1,seg2); q2=Op(2,seg2)
+ if((Norm(q1-p1)<Eps0)||(Norm(q2-p2)<Eps0)){
+ out=list(-1)
+ }else{
+ tmp=Intersectline(p1,q1-p1,p2,q2-p2)
+ if(length(Op(1,tmp))>1){
+ pt=Op(1,tmp); t=Op(2,tmp); s=Op(3,tmp)
+ if((t*(t-1)<Eps0)&&(s*(s-1)<Eps0)){
+ out=list(0,pt,t,s)
+ }else{
+ t=min(max(t,0),1)
+ s=min(max(s,0),1)
+ tmp3=c(Norm(p1-p2),Norm(p1-q2),Norm(p2-p1),Norm(p2-q1))
+ tmp1=c(Op(2,q2-p2),-Op(1,q2-p2))
+ tmp=Intersectline(p1,tmp1,p2,q2-p2)
+ if(length(Op(1,tmp))>1){
+ if(Op(3,tmp)*(Op(3,tmp)-1)<Eps0){
+ tmp3=c(tmp3,Norm(Op(1,tmp)-p1))
+ }
+ }
+ tmp=Intersectline(q1,tmp1,p2,q2-p2)
+ if(length(Op(1,tmp))>1){
+ if(Op(3,tmp)*(Op(3,tmp)-1)<Eps0){
+ tmp3=c(tmp3,Norm(Op(1,tmp)-q1))
+ }
+ }
+ tmp1=c(Op(2,q1-p1),-Op(1,q1-p1))
+ tmp=Intersectline(p2,tmp1,p1,q1-p1);
+ if(length(Op(1,tmp))>1){
+ if(Op(3,tmp)*(Op(3,tmp)-1)<Eps0){
+ tmp3=c(tmp3,Norm(Op(1,tmp)-p2))
+ }
+ }
+ if(length(Op(1,tmp))>1){
+ if(Op(3,tmp)*(Op(3,tmp)-1)<Eps0){
+ tmp3=c(tmp3,Norm(Op(1,tmp)-q2))
+ }
+ }
+ out=list(min(tmp3),pt,t,s)
+ }
+ }else{
+ dist=tmp[[1]]
+ tmp1=q1-p1
+ n=c(tmp1[2],-tmp1[1])/Norm(tmp1)
+ pts=list()
+ tmp=Intersectline(p1,n,p2,q2-p2)
+ if((length(tmp)>1)&&(tmp[[3]]*(tmp[[3]]-1)<Eps0)){
+ tmp1=(1-tmp[[3]])*p2+tmp[[3]]*q2
+ pts=c(pts,list(list(tmp1,0,tmp[[3]])))
+ }
+ tmp=Intersectline(q1,n,p2,q2-p2)
+ if((length(tmp)>1)&&(tmp[[3]]*(tmp[[3]]-1)<Eps0)){
+ tmp1=(1-tmp[[3]])*p2+tmp[[3]]*q2
+ pts=c(pts,list(list(tmp1,1,tmp[[3]])))
+ }
+ tmp=Intersectline(p2,n,p1,q1-p1)
+ if((length(tmp)>1)&&(tmp[[3]]*(tmp[[3]]-1)<Eps0)){
+ tmp1=(1-tmp[[3]])*p1+tmp[[3]]*q1
+ pts=c(pts,list(list(tmp1,tmp[[3]],0)))
+ }
+ if((length(tmp)>1)&&(tmp[[3]]*(tmp[[3]]-1)<Eps0)){
+ tmp1=(1-tmp[[3]])*p1+tmp[[3]]*q1
+ pts=c(pts,list(list(tmp1,tmp[[3]],2)))
+ }
+ if(length(pts)==0){
+ tmp1=min(Norm(p2-p1),Norm(q2-p1),Norm(p2-q1),Norm(q2-q1))
+ out=list(tmp1)
+ }else{
+ if(dist>Eps1){
+ out=list(dist)
+ }else{
+ tmp=c();
+ for(j in 1:length(pts)){
+ tmp=Appendrow(tmp,Op(1,pts[[j]]))
+ }
+ tmp1=sum(tmp[,1])/(length(pts))
+ tmp2=sum(tmp[,2])/(length(pts))
+ tmp3=c(tmp1,tmp2)
+ tmp=Nearestpt(tmp3,seg1)
+ tmp1=tmp[[2]]
+ tmp=Nearestpt(tmp3,seg2)
+ tmp2=tmp[[2]]
+ out=list(dist,tmp3,tmp1,tmp2)
+ }
+ }
+ }
+ }
+ return(out)
+}
+
+Osplineseg<- function(...){
+ varargin=list(...)
+ Nargs=length(varargin)
+ Eps=10^(-2)
+ Eps0=10^(-6)
+ Ptlist=varargin[[1]]
+ Numstr="Num=20"
+ if(Nargs>1){
+ Numstr=varargin[[2]]
+ }
+ p0=Op(1,Ptlist); p1=Op(2,Ptlist); p2=Op(3,Ptlist); p3=Op(4,Ptlist)
+ tmp=Norm(p2-p0)*Norm(p3-p1)
+ tmp=1+sqrt((1+Dotprod(p2-p0,p3-p1)/tmp)/2)
+ cc=4*Norm(p2-p1)/3/(Norm(p2-p0)+Norm(p3-p1))/tmp
+ pQ=p1+cc*(p2-p0)
+ pR=p2+cc*(p1-p3)
+ ctrL=list(c(pQ,pR))
+ out=Bezier(list(p1,p2),ctrL,Numstr)
+ return(out)
+}
+
+Intersectpartseg<- function(...){
+ varargin=list(...)
+ Nargs=length(varargin)
+ crv1=varargin[[1]]
+ crv2=varargin[[2]]
+ ii=varargin[[3]]
+ jj=varargin[[4]]
+ Eps1=varargin[[5]]
+ Eps2=varargin[[6]]
+ Dist=10*Eps2
+ if(Nargs>6){Dist=varargin[[7]]}
+ Eps0=10^(-4)
+ out=list()
+ seg1=Listplot(Op(ii,crv1),Op(ii+1,crv1))
+ seg2=Listplot(Op(jj,crv2),Op(jj+1,crv2))
+ tmp1=Op(2,seg1)-Op(1,seg1)
+ tmp2=Op(2,seg2)-Op(1,seg2)
+ snang=abs(Crossprod(tmp1,tmp2))/(Norm(tmp1)*Norm(tmp2))
+ tmp=Intersectseg(seg1,seg2,Eps1)
+ dst=Op(1,tmp)
+ if(dst<Eps0){
+ out=list(Op(2,tmp),ii+Op(3,tmp),jj+Op(4,tmp),dst,snang)
+ }else{
+ if(dst<Eps2){
+ if((Length(crv1)==2)||(Norm(Op(2,seg1)-Op(1,seg1))>Dist-Eps0)){
+ os1=seg1
+ }else{
+ p1=Op(1,seg1); p2=Op(2,seg1)
+ if(ii==1){
+ p3=Op(3,crv1)
+ tmp=p2-p1
+ tmp=(p1+p2)/2+c(Op(2,tmp),-Op(1,tmp))
+ p0=Reflectdata(p3,c((p1+p2)/2,tmp))
+ }else{
+ if(ii==Length(crv1)-1){
+ p0=Op(ii-1,crv1)
+ tmp=p2-p1
+ tmp=(p1+p2)/2+c(Op(2,tmp),-Op(1,tmp))
+ p3=Reflectdata(p0,c((p1+p2)/2,tmp))
+ }else{
+ p0=Op(ii-1,crv1); p3=Op(ii+2,crv1)
+ }
+ }
+ os1=Osplineseg(list(p0,p1,p2,p3))
+ }
+ if((Length(crv2)==2)||(Norm(Op(2,seg2)-Op(1,seg2))>Dist-Eps0)){
+ os2=seg2
+ }else{
+ p1=Op(1,seg2); p2=Op(2,seg2)
+ if(jj==1){
+ p3=Op(3,crv2)
+ tmp=p2-p1
+ tmp=(p1+p2)/2+c(Op(2,tmp),-Op(1,tmp))
+ p0=Reflectdata(p3,c((p1+p2)/2,tmp))
+ }else{
+ if(jj==Length(crv2)-1){
+ p0=Op(jj-1,crv2)
+ tmp=p2-p1
+ tmp=(p1+p2)/2+c(Op(2,tmp),-Op(1,tmp))
+ p3=Reflectdata(p0,c((p1+p2)/2,tmp))
+ }else{
+ p0=Op(jj-1,crv2); p3=Op(jj+2,crv2)
+ }
+ }
+ os2=Osplineseg(list(p0,p1,p2,p3))
+ }
+ tmp2=list()
+ for(kk in Looprange(1,Length(os1)-1)){
+ for(ll in Looprange(1,Length(os2)-1)){
+ seg1=Listplot(Op(kk,os1),Op(kk+1,os1))
+ seg2=Listplot(Op(ll,os2),Op(ll+1,os2))
+ tmp=Intersectseg(seg1,seg2,Eps1)
+ if((Op(1,tmp)<Eps1)&&(length(tmp)>1)){ #18.02.05
+ if(Op(1,tmp)<dst+Eps0){
+ dst=Op(1,tmp)
+ tmp3=list()
+ for( nn in Looprange(1,length(tmp2))){
+ if(Op(1,tmp2[[nn]])<dst){
+ tmp3=c(tmp3,list(tmp2[[nn]]))
+ }
+ }
+ tmp2=c(tmp3,list(list(dst,Op(2,tmp))))
+ }
+ }
+ }
+ }
+ if(length(tmp2)>0){
+ tmp1=c()
+ for(nn in Looprange(1,length(tmp2))){
+ tmp1=Appendrow(tmp1,Op(2,tmp2[[nn]]))
+ }
+ tmp=sum(tmp1[,1])/length(tmp2)
+ tmp=c(tmp,sum(tmp1[,2])/length(tmp2))
+ out=list(tmp)
+ p1=Op(ii,crv1); p2=Op(ii+1,crv1)
+ tmp=c(Op(2,p2-p1),-Op(1,p2-p1))
+ tmp=Intersectline(Op(1,out),tmp,p1,p2-p1)
+ tmp=min(max(Op(3,tmp),0),1)
+ out=c(out,list(ii+tmp))
+ p1=Op(jj,crv2); p2=Op(jj+1,crv2)
+ tmp=c(Op(2,p2-p1),-Op(1,p2-p1))
+ tmp=Intersectline(Op(1,out),tmp,p1,p2-p1)
+ tmp=min(max(Op(3,tmp),0),1)
+ out=c(out,list(jj+tmp,dst,snang))
+ }
+ }
+ }
+ return(out)
+}
+
+Collectnear<- function(ptdL,Eps2){
+ gL=list(Op(1,ptdL))
+ rL=ptdL[Looprange(2,length(ptdL))] #18.02.07
+ for( ii in Looprange(1,length(ptdL)-1)){
+ numL=c()
+ for(jj in Looprange(1,length(rL))){
+ tmp1=100
+ for(kk in Looprange(1,length(gL))){
+ tmp=Norm(Op(1,gL[[kk]])-Op(1,rL[[jj]]))
+ if(tmp<tmp1){tmp1=tmp}
+ }
+ if(tmp1<Eps2){numL=c(numL,jj)}
+ }
+ if(length(numL)==0){
+ break
+ }else{
+ gL=c(gL,rL[numL]) #18.02.05
+ tmp=setdiff(1:(length(rL)),numL)
+ rL=rL[tmp]
+ }
+ }
+ return(list(gL,rL))
+}
+
+Groupnearpt<- function(...){
+ varargin=list(...)
+ Nargs=length(varargin)
+ Eps=varargin[[Nargs]]
+ plist=varargin[[1]]
+ qlist=varargin[[2]]
+ if(!is.list(qlist)){
+ qlist=plist
+ plist=list()
+ }
+ if(length(qlist)==0){
+ return(plist)
+ }
+ pt=qlist[[1]]
+ qlist=qlist[Looprange(2,length(qlist))]
+ if(length(plist)==0){
+ plist=list(matrix(pt,nrow=1))
+ }else{
+ flg=0
+ for(ii in Looprange(1,length(plist))){
+ gL=plist[[ii]]
+ for(jj in Looprange(1,Length(gL))){
+ if(Norm(Op(jj,gL)-pt)<Eps){
+ flg=1
+ break
+ }
+ }
+ if(flg==1){
+ plist[[ii]]=Appendrow(gL,pt)
+ break
+ }
+ }
+ if(flg==0){
+ plist=c(plist,list(matrix(pt,nrow=1)))
+ }
+ }
+ out=Groupnearpt(plist,qlist,Eps)
+ return(out)
+}
+
+IntersectcurvesPp<- function(...){
+ varargin=list(...)
+ Nargs=length(varargin)
+ Eps0=10^(-4)
+ Eps1=0.01
+ Eps2=0.05
+ Dist=10*Eps2
+ if(Nargs>2){Eps1=varargin[[3]]}
+ if(Nargs>3){Eps2=varargin[[4]]}
+ if(Nargs>4){Dist=varargin[[5]]}
+ tmp1=varargin[[1]]
+ crv1=matrix(Op(1,tmp1),nrow=1)
+ for(ii in Looprange(2,Length(tmp1))){
+ tmp=Op(Length(crv1),crv1)
+ if(Norm(tmp-Op(ii,tmp1))>Eps0){
+ crv1=Appendrow(crv1,Op(ii,tmp1))
+ }
+ }
+ tmp2=varargin[[2]]
+ crv2=matrix(Op(1,tmp2),nrow=1)
+ for(ii in Looprange(2,Length(tmp2))){
+ tmp=Op(Length(crv2),crv2)
+ if(Norm(tmp-Op(ii,tmp2))>Eps0){
+ crv2=Appendrow(crv2,Op(ii,tmp2))
+ }
+ }
+ if(Length(crv1)!=Length(crv2)){
+ self=0
+ }else{
+ self=1
+ for(ii in Looprange(1,Length(crv1))){
+ if(Norm(Op(ii,crv1)-Op(ii,crv2))>0){
+ self=0
+ break
+ }
+ }
+ }
+ out=list()
+ for(ii in Looprange(1,Length(crv1)-1)){
+ if(self==0){
+ loopL=Looprange(1,Length(crv2)-1)
+ }else{
+ loopL=Looprange(ii+2,Length(crv2)-1)
+ }
+ for(jj in loopL){
+ tmp=Intersectpartseg(crv1,crv2,ii,jj,Eps1,Eps2,Dist)
+ if(length(tmp)>1){ #18.02.05
+ if(length(out)==0){
+ out=list(tmp)
+ }else{
+ tmp1=Op(length(out),out)
+ if(Norm(Op(1,tmp1)-Op(1,tmp))>Eps1){
+ out=c(out,list(tmp))
+ }
+ }
+ if(self==1){
+ tmp=list(Op(1,tmp),Op(3,tmp),Op(2,tmp),Op(4,tmp),Op(5,tmp))
+ out=c(out,list(tmp))
+ }
+ }
+ }
+ }
+ tmp2=out
+ out=list()
+ tmp1=tmp2
+ for(ii in Looprange(1,length(tmp2))){
+ tmp=Collectnear(tmp1,Eps2)
+ out=c(out,list(Op(1,tmp)))
+ if(length(Op(2,tmp))==0){
+ break
+ }else{
+ tmp1=Op(2,tmp)
+ }
+ }
+ for(ii in Looprange(1,length(out))){
+ tmp1=Op(ii,out)
+ if(length(tmp1)==1){
+ out[[ii]]=Op(1,tmp1)
+ }else{
+ tmp=c()
+ for(jj in Looprange(1,length(tmp1))){
+ tmp=c(tmp,Op(4,tmp1[[jj]]))
+ }
+ dst=min(tmp)
+ tmp=c()
+ for(jj in Looprange(1,length(tmp1))){
+ if(Op(4,tmp1[[jj]])<dst+Eps0){
+ tmp=c(tmp,Op(1,tmp1[[jj]]))
+ }
+ }
+ tmp=matrix(tmp,ncol=2,byrow=TRUE)
+ tmp=c(sum(tmp[,1]),sum(tmp[,2]))/Length(tmp)
+ tmp2=list(tmp)
+ tmp=Nearestpt(Op(1,tmp2),crv1)
+ tmp2=c(tmp2,list(Op(2,tmp)))
+ tmp=Nearestpt(Op(1,tmp2),crv2)
+ tmp2=c(tmp2,list(Op(2,tmp)))
+ tmp2=c(tmp2,list(list(dst,Op(5,tmp1[[1]]))))
+ out[[ii]]=tmp2
+ }
+ }
+ return(out)
+}
+
+Intersectcurves<- function(...){
+ dtL=IntersectcurvesPp(...)
+ out=list()
+ for(jj in Looprange(1,length(dtL))){
+ out=c(out,list(Op(1,dtL[[jj]])))
+ }
+ return(out)
+}
+
+############## end of New Intersect #############
+
+############## New Enclosing2 #############
+
+Enclosing2<- function(...){
+ varargin=list(...)
+ Nargs=length(varargin)
+ plist=varargin[[1]]
+ Eps0=10^(-5)
+ Eps1=0.01
+ Eps2=0.1
+ Start=c()
+ flg=0
+ for(ii in Looprange(2,Nargs)){
+ tmp=varargin[[ii]]
+ if(length(tmp)>1){
+# Start=tmp
+ }else{
+ if(flg==0){Eps1=tmp}
+ if(flg==1){Eps2=tmp}
+ flg=flg+1
+ }
+ }
+ flg=0
+ AnsL=c()
+ if(length(plist)==1){
+ Fdata=plist[[1]]
+ tmp1=Op(1,Fdata)
+ tmp2=Op(Length(Fdata),Fdata)
+ if(Norm(tmp1-tmp2)<Eps0){
+ AnsL=Fdata
+ }else{
+ AnsL=Appendrow(Fdata,tmp1)
+ }
+ flg=1
+ }
+ if(flg==0){
+ Fdata=Op(1,plist)
+ Gdata=Op(length(plist),plist)
+ KL=IntersectcurvesPp(Fdata,Gdata)
+ if(length(KL)==0){
+ tmp1=Op(Length(Gdata),Gdata)
+ tmp2=Op(1,Fdata)
+ tmp=Listplot(tmp1,tmp2)
+ plist=c(plist,list(tmp))
+ Start=tmp2
+ tst=1
+# flg=1
+ }else{
+ if(length(KL)==1){
+ tmp=Op(1,KL)
+ tst=Op(2,tmp)
+ Start=crv(tst,Fdata)
+ }
+ if(length(KL)>1){
+ KL=Quicksort(KL,2)
+ if(length(Start)==0){
+ tmp=Op(1,KL)
+ tst=Op(2,tmp)
+ Start=Pointoncurve(tst,Fdata)
+ }else{
+ tmp=c()
+ for(ii in Looprange(1,length(KL))){
+ tmp=c(tmp,Norm(Op(1,KL[[ii]]-Start)))
+ }
+ tmp=min(tmp)
+ tmp1=list()
+ for(ii in Looprange(1,length(KL))){
+ tmp2=Op(1,KL[[ii]])
+ if(Norm(tmp2-Start)==tmp){
+ tmp1=c(tmp1,list(tmp2))
+ }
+ }
+ tmp=Op(1,tmp1)
+ tst=Op(2,tmp)
+ Start=Pointoncurve(tst,Fdata)
+ }
+ }
+ }
+ }
+ if(flg==0){
+ t1=tst
+ for(nn in Looprange(1,length(plist))){
+ Fdata=Op(nn,plist)
+ if(nn==length(plist)){
+ nxtno=1
+ }else{
+ nxtno=nn+1
+ }
+ Gdata=Op(nxtno,plist)
+ KL=IntersectcurvesPp(Fdata,Gdata)
+ if(length(KL)==0){
+ tmp=matrix(Op(Length(Fdata),Fdata),nrow=1) #18.02.02from
+ Gdata=Appendrow(tmp,Gdata)
+ plist[[nxtno]]=Gdata
+ t2=Length(Fdata)
+ ss=1 #18.02.02upto
+ }else{
+ tmp=Op(1,KL)
+ t2=Op(2,tmp)
+ ss=Op(3,tmp)
+ if(abs(t2-t1)<Eps0){
+ if(length(KL)>1){
+ tmp=Op(2,KL)
+ t2=Op(2,tmp)
+ ss=Op(3,tmp)
+ }else{
+# println(text(nn)+" and "+text(nn+1)+" not intersect");
+# flg=1
+ }
+ }
+ }
+ if(flg==0){
+ tmp=Partcrv(t1,t2,Fdata)
+ if(nn==1){
+ AnsL=tmp
+ }else{
+ tmp=tmp[2:Length(tmp),]
+ AnsL=Appendrow(AnsL,tmp)
+ }
+ t1=ss
+ }
+ }
+ }
+ return(AnsL)
+}
+
+############## end of Enclosing2 #############
+
+############## start of surface drawing #############
+
+Fullformfunc<- function(FdL){
+ ADDPOINT<<- list() #18.02.19
+ Out=list(Op(1,FdL))
+ N=length(FdL)
+ for(Jrg in Looprange(1,N)){
+ Tmp=grep("c(",Op(Jrg,FdL),fixed=TRUE)
+ if(length(Tmp)>0){
+ break
+ }
+ }
+ Urg=Stripblanks(Op(Jrg,FdL))
+ Tmp=strsplit(Urg,"=",fixed=TRUE)
+ UNAME<<- Tmp[[1]][1]
+ URNG<<- eval(parse(text=Tmp[[1]][2]))
+ Urg=paste(UNAME,"=c(",sprintf("%6.7f",URNG[1]),",",
+ sprintf("%6.7f",URNG[2]),")",sep="")
+ Vrg=Stripblanks(Op(Jrg+1,FdL))
+ Tmp=strsplit(Vrg,"=",fixed=TRUE)
+ VNAME<<- Tmp[[1]][1]
+ VRNG<<- eval(parse(text=Tmp[[1]][2]))
+ Vrg=paste(VNAME,"=c(",sprintf("%6.7f",VRNG[1]),",",
+ sprintf("%6.7f",VRNG[2]),")",sep="")
+ if(Jrg==2){
+ Xf=UNAME
+ Yf=VNAME
+ Tmp=Stripblanks(Op(1,FdL))
+ Tmp=strsplit(Tmp,"=",fixed=TRUE)
+ Zf=Tmp[[1]][2]
+ Tmp=list(UNAME,VNAME,Zf,Urg,Vrg)
+ Out=c(Out,Tmp)
+ }else if(Jrg==4){
+ Tmp=Stripblanks(Op(1,FdL))
+ Tmp=strsplit(Tmp,"=",fixed=TRUE)
+ Zf=Tmp[[1]][2]
+ Tmp=Stripblanks(Op(2,FdL))
+ Tmp=strsplit(Tmp,"=",fixed=TRUE)
+ Xname=Tmp[[1]][1]
+ Xf=Tmp[[1]][2]
+ Tmp=Stripblanks(Op(3,FdL))
+ Tmp=strsplit(Tmp,"=",fixed=TRUE)
+ Yname=Tmp[[1]][1]
+ Yf=Tmp[[1]][2]
+ Tmp=gsub(Xname,paste("(",Xf,")",sep=""),Zf,fixed=TRUE)
+ Zf=gsub(Yname,paste("(",Yf,")",sep=""),Tmp,fixed=TRUE)
+ Tmp=list(Xf,Yf,Zf,Urg,Vrg)
+ Out=c(Out,Tmp)
+ }else{
+ Tmp=Stripblanks(Op(2,FdL))
+ Tmp=strsplit(Tmp,"=",fixed=TRUE)
+ Xf=Tmp[[1]][2]
+ Tmp=Stripblanks(Op(3,FdL))
+ Tmp=strsplit(Tmp,"=",fixed=TRUE)
+ Yf=Tmp[[1]][2]
+ Tmp=Stripblanks(Op(4,FdL))
+ Tmp=strsplit(Tmp,"=",fixed=TRUE)
+ Zf=Tmp[[1]][2]
+ Tmp=list(Xf,Yf,Zf,Urg,Vrg)
+ Out=c(Out,Tmp)
+ }
+ tmp=paste("Xfunc<<- function(",UNAME,",",VNAME,"){",Xf,"}",sep='')
+ eval(parse(text=tmp))
+ tmp=paste("Yfunc<<- function(",UNAME,",",VNAME,"){",Yf,"}",sep='')
+ eval(parse(text=tmp))
+ tmp=paste("Zfunc<<- function(",UNAME,",",VNAME,"){",Zf,"}",sep='')
+ eval(parse(text=tmp))
+ tmp=paste("XYZfunc<<- function(",UNAME,",",VNAME,"){",sep='')
+ tmp=paste(tmp,"c(",Xf,",",Yf,",",Zf,")}",sep='')
+ eval(parse(text=tmp))
+ XYZstr<<- c(Xf,Yf,Zf)
+ DRWS<<- "enws"
+ BdyL=list()
+ for(I in Looprange(Jrg+2,length(FdL))){
+ Tmp=Op(I,FdL)
+ if(is.character(Tmp)){
+ if(nchar(Tmp)==0){
+ Tmp=" "
+ }
+ DRWS<<- list(Tmp)
+ }
+ if((is.numeric(Tmp))&&(Length(Tmp)>1)){
+ BdyL=list(Tmp)
+ }
+ }
+ BDYL<<- BdyL
+ Tmp=c(DRWS,BDYL)
+ Out=c(Out,Tmp)
+ return(Out)
+}
+
+Addpoints<- function(ptlist){
+ ADDPOINT<<- ptlist
+}
+
+Makexybdy<- function(Np){
+ Eps0=10^(-4)
+ Xystr=XYZstr[1:2]
+ Umin=URNG[1]; Umax=URNG[2]
+ Vmin=VRNG[1]; Vmax=VRNG[2]
+ Cflg=0
+ EhL=list()
+ Tmp=grep("e",DRWS,fixed=TRUE)
+ if(length(Tmp)>0){
+ Tmp1="c("
+ for(jj in 1:2){
+ Tmp=gsub(UNAME,paste("(",sprintf("%7.7f",Umax),")",sep=""),Xystr[jj])
+ Tmp1=paste(Tmp1,Tmp,",",sep="")
+ }
+ Tmp=substring(Tmp1,1,Length(Tmp1)-1)
+ Tmp1=paste(Tmp,")",sep="")
+ Tmp=sprintf("%6.6f",VRNG)
+ Tmp2=paste(VNAME,"=c(",Tmp[1],",",Tmp[2],")",sep='')
+ Tmp3=paste('N=',as.character(Np[2]))
+ Tmp=Paramplot(Tmp1,Tmp2,Tmp3)
+ if(Norm(Op(1,Tmp)-Op(Length(Tmp),Tmp))<Eps0){
+ Cflg=1
+ Tmp[Length(Tmp),]=Tmp[1,]
+ }
+ EhL=c(EhL,list(Tmp))
+ }
+ Tmp=grep("n",DRWS,fixed=TRUE)
+ if(length(Tmp)>0){
+ Tmp1="c("
+ for(jj in 1:2){
+ Tmp=gsub(VNAME,paste("(",sprintf("%7.7f",Vmax),")",sep=""),Xystr[jj])
+ Tmp1=paste(Tmp1,Tmp,",",sep="")
+ }
+ Tmp=substring(Tmp1,1,Length(Tmp1)-1)
+ Tmp1=paste(Tmp,")",sep="")
+ Tmp=sprintf("%6.6f",URNG)
+ Tmp2=paste(UNAME,"=c(",Tmp[1],",",Tmp[2],")",sep='')
+ Tmp3=paste('N=',as.character(Np[1]))
+ Tmp=Paramplot(Tmp1,Tmp2,Tmp3)
+ if(Cflg>0){
+ Tmp1=Op(length(EhL),EhL)
+ Tmp=Joincrvs(Tmp1,Tmp)
+ if(Norm(Op(1,Tmp)-Op(Length(Tmp),Tmp))<Eps0){
+ Cflg=1
+ Tmp[Length(Tmp),]=Tmp[1,]
+ }
+ Tmp1=EhL[Looprange(1,length(EhL)-1)]
+ EhL=c(Tmp1,Tmp)
+ }else{
+ Cflg=0
+ if(Norm(Op(1,Tmp)-Op(Length(Tmp),Tmp))<Eps0){
+ Cflg=1
+ Tmp[Length(Tmp),]=Tmp[1,]
+ }
+ EhL=c(EhL,list(Tmp))
+ }
+ }
+ Tmp=grep("w",DRWS,fixed=TRUE)
+ if(length(Tmp)>0){
+ Tmp1="c("
+ for(jj in 1:2){
+ Tmp=gsub(UNAME,paste("(",sprintf("%7.7f",Umin),")",sep=""),Xystr[jj])
+ Tmp1=paste(Tmp1,Tmp,",",sep="")
+ }
+ Tmp=substring(Tmp1,1,Length(Tmp1)-1)
+ Tmp1=paste(Tmp,")",sep="")
+ Tmp=sprintf("%6.6f",VRNG)
+ Tmp2=paste(VNAME,"=c(",Tmp[1],",",Tmp[2],")",sep='')
+ Tmp3=paste('N=',as.character(Np[2]))
+ Tmp=Paramplot(Tmp1,Tmp2,Tmp3)
+ if(Cflg>0){
+ Tmp1=Op(length(EhL),EhL)
+ Tmp=Joincrvs(Tmp1,Tmp)
+ if(Norm(Op(1,Tmp)-Op(Length(Tmp),Tmp))<Eps0){
+ Cflg=1
+ Tmp[Length(Tmp),]=Tmp[1,]
+ }
+ Tmp1=EhL[Looprange(1,length(EhL)-1)]
+ EhL=c(Tmp1,list(Tmp))
+ }else{
+ Cflg=0
+ if(Norm(Op(1,Tmp)-Op(Length(Tmp),Tmp))<Eps0){
+ Cflg=1
+ Tmp[Length(Tmp),]=Tmp[1,]
+ }
+ EhL=c(EhL,list(Tmp))
+ }
+ }
+ Tmp=grep("s",DRWS,fixed=TRUE)
+ if(length(Tmp)>0){
+ Tmp1="c("
+ for(jj in 1:2){
+ Tmp=gsub(VNAME,paste("(",sprintf("%7.7f",Vmin),")",sep=""),Xystr[jj])
+ Tmp1=paste(Tmp1,Tmp,",",sep="")
+ }
+ Tmp=substring(Tmp1,1,Length(Tmp1)-1)
+ Tmp1=paste(Tmp,")",sep="")
+ Tmp=sprintf("%6.6f",URNG)
+ Tmp2=paste(UNAME,"=c(",Tmp[1],",",Tmp[2],")",sep='')
+ Tmp3=paste('N=',as.character(Np[1]))
+ Tmp=Paramplot(Tmp1,Tmp2,Tmp3)
+ if(Cflg>0){
+ Tmp1=Op(length(EhL),EhL)
+ Tmp=Joincrvs(Tmp1,Tmp)
+ if(Norm(Op(1,Tmp)-Op(Length(Tmp),Tmp))<Eps0){
+ Cflg=1
+ Tmp1=EhL[Looprange(1,length(EhL)-1)]
+ }
+ Tmp1=EhL[Looprange(1,length(EhL)-1)]
+ EhL=c(Tmp1,list(Tmp))
+ }else{
+ Cflg=0
+ if(Norm(Op(1,Tmp)-Op(Length(Tmp),Tmp))<Eps0){
+ Cflg=1
+ Tmp[Length(Tmp),]=Tmp[1,]
+ }
+ EhL=c(EhL,list(Tmp))
+ }
+ }
+ return(EhL)
+}
+
+Partitionseg<- function(...){
+ varargin=list(...)
+ Nargs=length(varargin)
+ Fig=varargin[[1]]
+ GL=varargin[[2]]; N=3
+ if(!is.list(GL)){GL=list(GL)} #18.02.21
+ Eps0=10^(-4)
+ Eps=0.01
+ if(Nargs>2){
+ Eps=varargin[[3]]
+ }
+ Eps2=0.1
+ if(Nargs>3){
+ Eps2=varargin[[4]]
+ }
+ if(Nargs>4){
+ Ns=varargin[[5]]
+ if(Ns>0){#18.02.21from
+ Other=Op(Ns,OTHERPARTITION)
+ }else{
+ Other=c()
+ }#18.02.21upto
+ }else{
+ Ns=1
+ Other=c()
+ }
+ Npt=Length(Fig)
+ ParL=c(1,Npt,Other)
+ for(N in Looprange(max(1,Ns),Length(GL))){ #18.02.21
+ G=Op(N,GL)
+ KouL=IntersectcurvesPp(Fig,G,Eps,Eps2)
+ Tmp1=c(); Tmp2=c()
+ for(jj in Looprange(1,length(KouL))){
+ tmp=Op(2,KouL[[jj]])
+ if((tmp>1+Eps0)&&(tmp<Npt-Eps0)){
+ Tmp1=c(Tmp1,tmp)
+ }
+ tmp=Op(3,KouL[[jj]])
+ if((tmp>1+Eps0)&&(tmp<Length(G)-Eps0)){
+ Tmp2=c(Tmp2,tmp)
+ }
+ }
+ ParL=c(ParL,Tmp1)
+ if((Ns>0)&&(N>Ns)&&(length(Tmp2)>0)){ #18.02.21
+ tmp=OTHERPARTITION[[N]]
+ OTHERPARTITION[[N]]<<- c(tmp,Tmp2)
+ }
+ }
+ tmp1=sort(ParL)
+ ParL=c()
+ tmp2=-1
+ for(jj in Looprange(1,length(tmp1))){
+ tmp=Op(jj,tmp1)
+ if(abs(tmp-tmp2)>Eps){
+ ParL=c(ParL,tmp)
+ tmp2=tmp
+ }
+ }
+ return(ParL)
+}
+
+Evlptablepara<- function(...){
+ varargin=list(...)
+ Nargs=length(varargin)
+ Tmp=varargin[[1]]
+ Mdv=50
+ Ndv=50
+ if(Nargs>=2){
+ Tmp=varargin[[2]]
+ if(is.list(Tmp)){Tmp=Op(1,Tmp)}
+ if(length(Tmp)>1){
+ Mdv=Tmp[1]
+ Ndv=Tmp[2]
+ }else{
+ Mdv=Tmp
+ if(Nargs==2){
+ Ndv=Mdv
+ }else{
+ Tmp1=varargin[[3]]
+ if((is.numeric(Tmp1)) && (length(Tmp1)==1)){
+ Ndv=Tmp1
+ }else{
+ Ndv=Mdv
+ }
+ }
+ }
+ }
+ U1=URNG[1]; U2=URNG[2]
+ V1=VRNG[1]; V2=VRNG[2]
+ Du=(U2-U1)/(Mdv)
+ Dv=(V2-V1)/(Ndv)
+ sph=sprintf("%7.7f",sin(PHI))
+ cph=sprintf("%7.7f",cos(PHI))
+ sth=sprintf("%7.7f",sin(THETA))
+ cth=sprintf("%7.7f",cos(THETA))
+ xstr=paste("-(",XYZstr[1],")*(",sph,")+(",XYZstr[2],")*(",cph,")",sep="")
+ tmp=paste("-(",XYZstr[1],")*(",cph,")*(",cth,")-(",XYZstr[2],")*(",sph,")*(",cth,")",sep="")
+ ystr=paste(tmp,"+(",XYZstr[3],")*(",sth,")",sep="")
+ dxu=Diff(xstr,UNAME)
+ dxv=Diff(xstr,VNAME)
+ dyu=Diff(ystr,UNAME)
+ dyv=Diff(ystr,VNAME)
+ I=1
+ Zval=c()
+ for(jj in 1:(Ndv+1)){
+ v=V1+(jj-1)*Dv
+ ZuL=c()
+ for(ii in 1:(Mdv+1)){
+ u=U1+(ii-1)*Du
+ tmp1=paste(UNAME,"=(",sprintf("%7.7f",u),")",sep="")
+ tmp2=paste(VNAME,"=(",sprintf("%7.7f",v),")",sep="")
+ Dxu=Funvalue(dxu,tmp1,tmp2)
+ Dxv=Funvalue(dxv,tmp1,tmp2)
+ Dyu=Funvalue(dyu,tmp1,tmp2)
+ Dyv=Funvalue(dyv,tmp1,tmp2)
+ Tmp=Dxu*Dyv-Dxv*Dyu
+ ZuL=c(ZuL,Tmp)
+ }
+ Zval=Appendrow(Zval,ZuL)
+ }
+ Yval=c()
+ for(jj in 1:(Ndv+1)){
+ v=V1+(jj-1)*Dv
+ Yval=c(Yval,v)
+ }
+ Xval=c()
+ for(ii in 1:(Mdv+1)){
+ u=U1+(ii-1)*Du
+ Xval=c(Xval,u)
+ }
+ return(list(Zval,Xval,Yval))
+}
+
+Dropnumlistcrv<- function(QdL,Eps){
+ Eps0=10^(-4)
+ if(!is.list(QdL)){
+ PdL=list(QdL)
+ }else{
+ PdL=QdL
+ }
+ OutL=list()
+ for(I in Looprange(1,length(PdL))){
+ Pd=Op(I,PdL)
+ PtL=c(1)
+ P=Op(1,Pd)
+ for(K in Looprange(2,Length(Pd)-1)){
+ if(Norm(P-Op(K,Pd))>Eps){
+ PtL=c(PtL,K)
+ P=Op(K,Pd)
+ }
+ }
+ K=Length(Pd)
+ if(Norm(P-Op(K,Pd))>Eps){ #18.02.12 eps
+ PtL=c(PtL,K)
+ }
+ if(length(PtL)==1){
+ PtL=c()
+ }
+ OutL=c(OutL,list(PtL))
+ }
+ return(OutL)
+}
+
+Cuspsplitpara<- function(...){
+ varargin=list(...)
+ Nargs=length(varargin);
+ Gdxy=varargin[[1]]
+ if(!is.list(Gdxy)){
+ Gdxy=list(Gdxy)
+ }
+ Eps0=10^(-4)
+ Eps=0.01
+ if(Nargs>2){Eps=varargin[[2]]}
+ N=2
+ CUSPSPLITPT<<- list()
+ OutkL=list()
+ for(Ng in Looprange(1,length(Gdxy))){
+ PtxyL=Op(Ng,Gdxy)
+ PtkL=c()
+ PthL=c()
+ for(I in Looprange(1,Length(PtxyL))){
+ Tmp=Op(I,PtxyL)
+ Tmp1=paste(UNAME,'=',sprintf("%7.7f",Tmp[1]),sep="")
+ eval(parse(text=Tmp1))
+ Tmp1=paste(VNAME,'=',sprintf("%7.7f",Tmp[2]),sep="")
+ eval(parse(text=Tmp1))
+ Tmp2=c(eval(parse(text=XYZstr[1])))
+ Tmp2=c(Tmp2,eval(parse(text=XYZstr[2])))
+ Tmp2=c(Tmp2,eval(parse(text=XYZstr[3])))
+ Tmp3=Parapt(Tmp2)
+ if(I==1){
+ PtkL=matrix(Tmp2,nrow=1)
+ PthL=matrix(Tmp3,nrow=1)
+ }else{
+ Tmp4=Op(Length(PthL),PthL)
+ if(Norm(Tmp3-Tmp4)>Eps0){
+ PtkL=Appendrow(PtkL,Tmp2)
+ PthL=Appendrow(PthL,Tmp3)
+ }
+ }
+ }
+ if(Length(PthL)==0){
+ return(list())
+ }
+ Ps=Op(1,PthL); Pe=Op(Length(PthL),PthL)
+ Cflg=0
+ if(Norm(Ps-Pe)<Eps){Cflg=1}
+ CuspL=c()
+ Cva=cos(10*pi/180)
+ for(I in Looprange(1,Length(PthL)-1)){
+ if(Length(PthL)==2){break}
+ Tmp=Op(I,PthL)
+ if(I==1){
+ if(Cflg==0){next}
+ Tmp1=Op(Length(PthL)-1,PthL)
+ }else{
+ Tmp1=Op(I-1,PthL)
+ }
+ Tmp2=Op(I+1,PthL)
+ V1=Tmp-Tmp1
+ V2=Tmp2-Tmp
+ Tmp3=Dotprod(V1,V2)/(Norm(V1)*Norm(V2))
+ Cuspflg=0
+ if(Tmp3<Cva){
+ P=Op(I,PthL)
+ Kaku=acos(Tmp3)*180/pi
+ if(Crossprod(V1,V2)<0){
+ Kaku=-Kaku
+ }
+ Cuspflg=0
+ for(J in Looprange(I+1,Length(PthL)-1)){
+ if(abs(Kaku)>90){
+ Cuspflg=1
+ break
+ }
+ Q=Op(J,PthL)
+ if(Norm(P-Q)>Eps){
+ break
+ }
+ V1=Q-Op(J-1,PthL)
+ V2=Op(J+1,PthL)-Q
+ Tmp3=Dotprod(V1,V2)/(norm(V1)*norm(V2))
+ Tmp=acos(Tmp3)*180/pi
+ if(Crossprod(V1,V2)<0){
+ Tmp=-Tmp
+ }
+ Kaku=Kaku+Tmp
+ }
+ if(Cuspflg==1){
+ Tmp=trunc((I+J)*0.5)
+ I=J
+ if(length(CuspL)==0){
+ CuspL=c(Tmp)
+ }else{
+ CuspL=c(CuspL,Tmp)
+ }
+ }
+ }
+ }
+ if(Cflg==0){
+ CuspL=c(1,CuspL,Length(PthL))
+ }else if(length(CuspL)==0){
+ CuspL=c(1,Length(PthL))
+ }else if(Op(1,CuspL)==1){
+ CuspL=c(CuspL,Length(PthL))
+ }else{
+ Tmp=Op(1,CuspL)
+ Tmp1=PthL[Tmp:Length(PthL),]
+ Tmp2=PthL[2:Tmp,]
+ PthL=Appendrow(Tmp1,Tmp2)
+ Tmp1=PtkL[Tmp:Length(PthL),]
+ Tmp2=PtkL[2:Tmp,]
+ PtkL=Appendrow(Tmp1,Tmp2)
+ CuspL=CuspL-Tmp+1
+ CuspL=c(CuspL,Length(PthL))
+ }
+ if(length(CuspL)==2){
+ Tmp4=PthL[Length(PthL),]
+ if(Length(PtkL)>=2){
+ CUSPSPLITPT<<- c(CUSPSPLITPT,list(Tmp4))
+ OutkL=c(OutkL,list(PtkL))
+ }
+ next
+ }
+ Outk=list()
+ Is=1
+ for(I in Looprange(1,length(CuspL)-1)){
+ Tmp1=CuspL[Is]; Tmp2=CuspL[I+1]
+ Tmp3=Op(Tmp1,PthL); Tmp4=Op(Tmp2,PthL)
+ if(Norm(Tmp3-Tmp4)>Eps){
+ Tmpk=PtkL[Tmp1:Tmp2,]
+ Outk=c(Outk,list(Tmpk))
+ CUSPSPLITPT<<- c(CUSPSPLITPT,list(Tmp4))
+ Is=I+1
+ }
+ }
+ OutkL=c(OutkL,Outk)
+ }
+ Tmp1=Dropnumlistcrv(Projpara(OutkL),Eps*0.5)
+ Tmp=list()
+ for(I in Looprange(1,length(OutkL))){
+ Tmp2=Op(I,OutkL)
+ Tmp3=Op(I,Tmp1)
+ Tmp4=c()
+ for(J in Looprange(1,Length(Tmp3))){
+ Tmp5=Op(Tmp3[J],Tmp2)
+ Tmp4=Appendrow(Tmp4,Tmp5)
+ }
+ if(Length(Tmp4)>0){
+ Tmp=c(Tmp,list(Tmp4))
+ }
+ }
+ return(Tmp)
+}
+
+PthiddenQ<- function(PtA,Vec,Uveq,Np,Eps,Eps2){
+ Eps0=10^(-4)
+ Out=c()
+ Vec=1/Norm(Vec)*Vec
+ if(length(Np)==1){
+ Np=c(Np,Np)
+ }
+ Tmp=paste("Eqfun<- function(U,V){",sep='')
+ if((abs(Vec[2])>Eps0) || (abs(Vec[1])>Eps0)){
+ Vstr=sprintf("%6.6f",Vec)
+ Pstr=sprintf("%6.6f",PtA)
+ Tmp=paste(Tmp,"(",Vstr[2],")*(Xfunc(U,V)-(",Pstr[1],"))",sep='')
+ Tmp=paste(Tmp,"-(",Vstr[1],")*(Yfunc(U,V)-(",Pstr[2],"))}",sep='')
+ }else{
+ Tmp=paste(Tmp,"Xfunc(U,V)}",sep='')
+ }
+ eval(parse(text=Tmp))
+ Dx=(URNG[2]-URNG[1])/Np[1]
+ Dy=(VRNG[2]-VRNG[1])/Np[2]
+ for(J in Looprange(1,Np[2])){ #####
+ Vval1=VRNG[1]+(J-1)*Dy
+ Vval2=VRNG[1]+J*Dy
+ for(I in Looprange(1,Np[1])){ #####
+ Uval1=URNG[1]+(I-1)*Dx
+ Uval2=URNG[1]+I*Dx
+ Eval11=Eqfun(Uval1,Vval1)
+ Eval12=Eqfun(Uval1,Vval2)
+ Eval21=Eqfun(Uval2,Vval1)
+ Eval22=Eqfun(Uval2,Vval2)
+ a1=Uval1;b1=Vval1;c1=Eval11
+ a2=Uval2;b2=Vval1;c2=Eval21
+ a3=Uval2;b3=Vval2;c3=Eval22
+ a4=Uval1;b4=Vval2;c4=Eval12
+ PL=matrix(c(a1,b1,a2,b2,a3,b3,a4,b4,a1,b1),ncol=2,byrow=TRUE)
+ VL=c(c1,c2,c3,c4,c1)
+ QL=c()
+ for(K in 1:4){
+ P1=Op(K,PL); P2=Op(K+1,PL)
+ M1=Op(K,VL); M2=Op(K+1,VL)
+ if(abs(M1)<Eps0){
+ QL=Appendrow(QL,P1)
+ next
+ }
+ if(abs(M2)<Eps0){
+# QL=Appendrow(QL,P2)
+ next
+ }
+ if((M1> 0) && (M2> 0)){
+ next
+ }
+ if((M1< 0) && (M2< 0)){
+ next
+ }
+ Tmp=1/(M1-M2)*(-M2*P1+M1*P2)
+ QL=Appendrow(QL,Tmp)
+ }
+ if(Length(QL)==2){
+ Puv1=Op(1,QL); Puv2=Op(2,QL)
+ Tmp1=Op(1,Puv1)
+ Tmp2=Op(2,Puv1)
+ Xv=Xfunc(Tmp1,Tmp2)
+ Yv=Yfunc(Tmp1,Tmp2)
+ Zv=Zfunc(Tmp1,Tmp2)
+ P1=c(Xv,Yv,Zv)
+ Tmp1=Op(1,Puv2)
+ Tmp2=Op(2,Puv2)
+ Xv=Xfunc(Tmp1,Tmp2)
+ Yv=Yfunc(Tmp1,Tmp2)
+ Zv=Zfunc(Tmp1,Tmp2)
+ P2=c(Xv,Yv,Zv)
+ V1=Vec[1]; V2=Vec[2]; V3=Vec[3]
+ if(abs(V1)>Eps0){
+ M1=PtA[3]+V3/V1*(P1[1]-PtA[1])-P1[3]
+ M2=PtA[3]+V3/V1*(P2[1]-PtA[1])-P2[3]
+ }else if(abs(V2)>Eps0){
+ M1=PtA[3]+V3/V2*(P1[2]-PtA[2])-P1[3]
+ M2=PtA[3]+V3/V2*(P2[2]-PtA[2])-P2[3]
+ }else{
+ M1=PtA[2]-P1[2]
+ M2=PtA[2]-P2[2]
+ }
+ if(M1*M2>= 0){
+ if(((M1>0) && (M2>0)) || ((M1< 0) && (M2< 0))){
+ next
+ }
+ if(M1==0){
+ Pt=P1; Ptuv=Puv1
+ }else{
+ Pt=P2; Ptuv=Puv2
+ }
+ }else{
+ Pt=1/(M1-M2)*(-M2*P1+M1*P2)
+ Ptuv=1/(M1-M2)*(-M2*Puv1+M1*Puv2)
+ }
+ if(is.character(Uveq)){
+ Tmp1=paste('(',sprintf("%6.6f",Ptuv[1]),')',sep='')
+ Tmp2=paste('('+sprintf("%6.6f",Ptuv[2]),')',sep='')
+ Tmp=gsub(UNAME,Tmp1,Uveq,fixed=TRUE)
+ Tmp=gsub(VNAME,Tmp2,Tmp,fixed=TRUE)
+ Tmp=eval(parse(text=Tmp))
+ if(Tmp< -Eps0){
+ next
+ }
+ }
+ Tmp1=Crossprod(Pt-PtA,Vec)
+ if(Norm(Tmp1)<Eps){ #18.02.19
+ if(Zparapt(Pt)>Zparapt(PtA)+Eps2){
+ return(list(1,Pt,Zparapt(Pt),Zparapt(PtA)))
+ }else{
+ Out=Appendrow(Out,Pt)
+ }
+ }
+ }
+ }
+ }
+ if(Length(Out)==0){
+ return(list(0,c()))
+ }
+ return(c(list(0,Out)))
+}
+
+Nohiddenpara2<- function (Par,Fk,Uveq,Np,Eps,Eps2){
+ Eps0=10^(-4)
+ Fh=Projpara(Fk)
+ P1=Ptstart(Fh)
+ P2=Ptend(Fh)
+ Csp=CUSPPT
+ if(!is.list(Csp)){Csp=list(Csp)}
+ Cspflg=1
+ for(I in Looprange(1,length(Csp))){
+ Tmp=Op(I,Csp)
+ if(Norm(Tmp-P1)<Eps0){
+ if(Cspflg==1){Cspflg=2}
+ if(Cspflg==3){Cspflg=6}
+ next
+ }
+ if(Norm(Tmp-P2)<Eps0){
+ if(Cspflg==1){Cspflg=3}
+ if(Cspflg==2){Cspflg=6}
+ next
+ }
+ }
+ PaL=c()
+ tmp2=-1
+ for(jj in Looprange(1,length(Par)-1)){
+ tmp1=Op(jj,Par)
+ if(abs(tmp1-tmp2)>Eps2){
+ PaL=c(PaL,tmp1)
+ tmp2=tmp1
+ }
+ }
+ tmp1=PaL[length(PaL)] #18.02.26from
+ tmp2=Par[length(Par)]
+ if(abs(tmp1-tmp2)<Eps2){
+ PaL[length(PaL)]=tmp2
+ }else{
+ PaL=c(PaL,tmp2)
+ } #18.02.26upto
+ SeL=c()
+ for(N in Looprange(1,length(PaL)-1)){
+ S=(PaL[N]+PaL[N+1])/2
+ Tmp=Invparapt(S,Fh,Fk)
+ PtA=Op(1,Tmp)
+ PtAp=Parapt(PtA)
+ Vec=c(sin(THETA)*cos(PHI),sin(THETA)*sin(PHI),cos(THETA))
+ Flg=PthiddenQ(PtA,Vec,Uveq,Np,Eps,Eps2)
+ if(Flg[[1]]==0){
+ SeL=c(SeL,N)
+ }
+ }
+ FigL=list()
+ FigkL=list()
+ for(I in Looprange(1,length(SeL))){
+ Tmp1=Pointoncurve(PaL[SeL[I]],Fh)
+ Tmp2=Pointoncurve(PaL[SeL[I]+1],Fh)
+ if(I==1){
+ P=Tmp1; SP=PaL[SeL[I]]
+ Q=Tmp2; SQ=PaL[SeL[I]+1]
+ }else{
+ if(Member(SeL[I]-1,SeL)){
+ Q=Tmp2; SQ=PaL[SeL[I]+1]
+ }else{
+ FigL=c(FigL,list(Partcrv(SP,SQ,Fh)))
+ Tmp3=Invparapt(SP,Fh,Fk)
+ TP=Op(2,Tmp3)
+ Tmp3=Invparapt(SQ,Fh,Fk)
+ TQ=Op(2,Tmp3)
+ Tmp4=Partcrv3(TP,TQ,Fk)
+ FigkL=c(FigkL,list(Tmp4))
+ P=Tmp1; SP=PaL[SeL[I]]
+ Q=Tmp2; SQ=PaL[SeL[I]+1]
+ }
+ }
+ }
+ if(length(SeL)>0){
+ if(Norm(P-Q)>Eps0){ #18.02.14
+ FigL=c(FigL,list(Partcrv(P,Q,Fh)))
+ Tmp3=Invparapt(SP,Fh,Fk)
+ TP=Op(2,Tmp3)
+ Tmp3=Invparapt(SQ,Fh,Fk)
+ TQ=Op(2,Tmp3)
+ FigkL=c(FigkL,list(Partcrv3(TP,TQ,Fk)))
+ }else{
+ FigL=c(FigL,list(Fh))
+ FigkL=c(FigkL,list(Fk))
+ }
+ }
+ Tmp=c()
+ for(I in Looprange(1,length(PaL)-1)){
+ if(!Member(I,SeL)){
+ Tmp=c(Tmp,I)
+ }
+ }
+ SeL=Tmp
+ HIDDENDATA<<- list()
+ for(I in Looprange(1,length(SeL))){
+ Tmp=PaL[SeL[I]]
+ Tmp1=Pointoncurve(Tmp,Fh)
+ Tmp=PaL[SeL[I]+1]
+ Tmp2=Pointoncurve(Tmp,Fh)
+ if(I==1){
+ P=Tmp1; SP=PaL[SeL[I]]
+ Q=Tmp2; SQ=PaL[SeL[I]+1]
+ }else{
+ if(Member(SeL[I]-1,SeL)){
+ Q=Tmp2; SQ=PaL[SeL[I]+1]
+ }else{
+ Tmp=Invparapt(SP,Fh,Fk)
+ TP=Op(2,Tmp)
+ Tmp=Invparapt(SQ,Fh,Fk)
+ TQ=Op(2,Tmp)
+ HIDDENDATA<<- c(HIDDENDATA,list(Partcrv3(TP,TQ,Fk)))
+ P=Tmp1; SP=PaL[SeL[I]]
+ Q=Tmp2; SQ=PaL[SeL[I]+1]
+ }
+ }
+ }
+ if(length(SeL)>0){
+ if(Norm(P-Q)>Eps0){ #18.02.14
+ Tmp=Invparapt(SP,Fh,Fk)
+ TP=Op(2,Tmp)
+ Tmp=Invparapt(SQ,Fh,Fk)
+ TQ=Op(2,Tmp)
+ HIDDENDATA<<- c(HIDDENDATA,list(Partcrv3(TP,TQ,Fk)))
+ }else{
+ HIDDENDATA<<- c(HIDDENDATA,list(Fk))
+ }
+ }
+ return(FigkL)
+}
+
+Borderparadata<- function(...){
+ varargin=list(...)
+ Nargs=length(varargin)
+ FkL=varargin[[1]]
+ Np=c(50,50)
+ Eps=0.01
+ Eps2=0.05
+ ctr=0
+ for(jj in Looprange(2,Nargs)){
+ tmp=varargin[[jj]]
+ if((length(tmp)>1)||(tmp>1)){
+ Np=tmp
+ if(length(Np)==1){
+ Np=c(Np,Np)
+ }
+ }else{
+ ctr=ctr+1
+ if(ctr==1){Eps=tmp}
+ if(ctr==2){Eps2=tmp}
+ }
+ }
+ Umin=URNG[1]; Umax=URNG[2]
+ Vmin=VRNG[1]; Vmax=VRNG[2]
+ EkL=list()
+ Tmp=grep("e",DRWS,fixed=TRUE)
+ if(length(Tmp)>0){
+ Tmp1="c("
+ for(jj in 1:3){
+ Tmp=gsub(UNAME,paste("(",sprintf("%7.7f",Umax),")",sep=""),XYZstr[jj])
+ Tmp1=paste(Tmp1,Tmp,",",sep="")
+ }
+ Tmp=substring(Tmp1,1,Length(Tmp1)-1)
+ Tmp1=paste(Tmp,")",sep="")
+ Tmp=sprintf("%6.6f",VRNG)
+ Tmp2=paste(VNAME,"=c(",Tmp[1],",",Tmp[2],")",sep='')
+ Tmp3=paste('N=',as.character(Np[2]),sep="")
+ Tmp=Spacecurve(Tmp1,Tmp2,Tmp3)
+ EkL=c(EkL,list(Tmp))
+ }
+ Tmp=grep("n",DRWS,fixed=TRUE)
+ if(length(Tmp)>0){
+ Tmp1="c("
+ for(jj in 1:3){
+ Tmp=gsub(VNAME,paste("(",sprintf("%7.7f",Vmax),")",sep=""),XYZstr[jj])
+ Tmp1=paste(Tmp1,Tmp,",",sep="")
+ }
+ Tmp=substring(Tmp1,1,Length(Tmp1)-1)
+ Tmp1=paste(Tmp,")",sep="")
+ Tmp=sprintf("%6.6f",URNG)
+ Tmp2=paste(UNAME,"=c(",Tmp[1],",",Tmp[2],")",sep='')
+ Tmp3=paste('N=',as.character(Np[1]),sep="")
+ Tmp=Spacecurve(Tmp1,Tmp2,Tmp3)
+ EkL=c(EkL,list(Tmp))
+ }
+ Tmp=grep("w",DRWS,fixed=TRUE)
+ if(length(Tmp)>0){
+ Tmp1="c("
+ for(jj in 1:3){
+ Tmp=gsub(UNAME,paste("(",sprintf("%7.7f",Umin),")",sep=""),XYZstr[jj])
+ Tmp1=paste(Tmp1,Tmp,",",sep="")
+ }
+ Tmp=substring(Tmp1,1,Length(Tmp1)-1)
+ Tmp1=paste(Tmp,")",sep="")
+ Tmp=sprintf("%6.6f",VRNG)
+ Tmp2=paste(VNAME,"=c(",Tmp[1],",",Tmp[2],")",sep='')
+ Tmp3=paste('N=',as.character(Np[2]))
+ Tmp=Spacecurve(Tmp1,Tmp2,Tmp3)
+ EkL=c(EkL,list(Tmp))
+ }
+ Tmp=grep("s",DRWS,fixed=TRUE)
+ if(length(Tmp)>0){
+ Tmp1="c("
+ for(jj in 1:3){
+ Tmp=gsub(VNAME,paste("(",sprintf("%7.7f",Vmin),")",sep=""),XYZstr[jj])
+ Tmp1=paste(Tmp1,Tmp,",",sep="")
+ }
+ Tmp=substring(Tmp1,1,Length(Tmp1)-1)
+ Tmp1=paste(Tmp,")",sep="")
+ Tmp=sprintf("%6.6f",URNG)
+ Tmp2=paste(UNAME,"=c(",Tmp[1],",",Tmp[2],")",sep='')
+ Tmp3=paste('N=',as.character(Np[1]))
+ Tmp=Spacecurve(Tmp1,Tmp2,Tmp3)
+ EkL=c(EkL,list(Tmp))
+ }
+ if(length(EkL)>0){
+ FkL=c(FkL,EkL)
+ }
+ Fall=Projpara(FkL)
+ if(is.numeric(Fall)){
+ Fall=list(Fall)
+ }
+ Fbdxy=Makexybdy(Np)
+ BORDERPT<<- list()
+ Tmp1=list()
+ for(I in Looprange(1,length(Fall))){
+ Tmp1=c(Tmp1,list(c()))
+ }
+ OTHERPARTITION<<- Tmp1
+ FsL=list()
+ BORDERHIDDENDATA<<- list()
+ starttime=proc.time()
+ for(I in Looprange(1,length(FkL))){
+ Tmp=Op(I,FkL)
+ Tmp=Projpara(Tmp)
+ Par=Partitionseg(Tmp,Fall,Eps,Eps2,I)
+ Tmp1=Op(I,FkL)
+ Tmp=Nohiddenpara2(Par,Tmp1,1,Np,Eps,Eps2)
+ if(length(HIDDENDATA)>0){
+ BORDERHIDDENDATA<<- c(BORDERHIDDENDATA,HIDDENDATA)
+ }
+ if(length(Tmp)>0){
+ FsL=c(FsL,Tmp)
+ }
+ Tmp=paste('Border',formatC(I,width=2,flag="0"),'/',sep='')
+ Tmp=paste(Tmp,as.character(length(FkL)),' obtained : Time =',sep='')
+ Tmp1=proc.time()-starttime
+ print(paste(Tmp,sprintf("%6.3f",Tmp1[1]),sep=''))
+ }
+ return(FsL)
+}
+
+Sfbdparadata<- function(...){
+ varargin=list(...)
+ Nargs=length(varargin)
+ Fd=varargin[[1]]
+ FdL=Fullformfunc(Fd)
+ Np=c(50,50)
+ Eps=0.01
+ Eps2=0.05
+ ctr=0
+ for(jj in Looprange(2,Nargs)){
+ tmp=varargin[[jj]]
+ if((length(tmp)>1)||(tmp>1)){
+ Np=tmp
+ if(length(Np)==1){
+ Np=c(Np,Np)
+ }
+ }else{
+ ctr=ctr+1
+ if(ctr==1){Eps=tmp}
+ if(ctr==2){Eps2=tmp}
+ }
+ }
+ starttime=proc.time()
+ tmp=Evlptablepara(Np)
+ Zval=tmp[[1]]; Xval=tmp[[2]]; Yval=tmp[[3]]
+ Out3=Implicitplot(Zval,Xval,Yval)
+ tmp3=list()
+ for(jj in Looprange(1,length(Out3))){
+ tmp1=Op(jj,Out3)
+ tmp2=c()
+ for(kk in Looprange(1,Length(tmp1))){
+ tmp=Op(kk,tmp1)
+ tmp2=Appendrow(tmp2,XYZfunc(tmp[1],tmp[2]))
+ }
+ Nlist=Dropnumlistcrv(tmp2,Eps)
+ Nlist=Nlist[[1]]
+ tmp=c()
+ for(kk in Looprange(1,length(Nlist))){
+ tmp=Appendrow(tmp,Op(Nlist[kk],tmp1)) #18.02.18
+ }
+ if(Length(tmp)>0){
+ tmp3=c(tmp3,list(tmp))
+ }
+ }
+ Out3=tmp3
+ IMPLICITDATA<<- Out3
+ Tmp=proc.time()-starttime
+ print(paste('ImplicitData obtained : Time =',sprintf("%6.3f",Tmp[1]),sep=''))
+ starttime=proc.time()
+ Out4=Cuspsplitpara(Out3,Eps)
+ CUSPDATA<<- Out4
+ CUSPPT<<- CUSPSPLITPT
+ Tmp=proc.time()-starttime
+ print(paste('CuspData obtained : Time =',sprintf("%6.3f",Tmp[1]),sep=''))
+ Out5=Borderparadata(Out4,Np,Eps,Eps2)
+ return(Out5)
+}
+
+Meetpoints<- function(PtA,PtB,Uveq,Np,Eps){
+ Eps0=10^(-4)
+ Vec=PtB-PtA
+ if(Norm(Vec)<Eps0){return(list())} #18.02.24
+ Out=list()
+ Vec=1/Norm(Vec)*Vec
+ if(length(Np)==1){
+ Np=c(Np,Np)
+ }
+ Tmp=paste("Eqfun<- function(U,V){",sep='')
+ if((abs(Vec[2])>Eps0) || (abs(Vec[1])>Eps0)){
+ Vstr=sprintf("%6.6f",Vec)
+ Pstr=sprintf("%6.6f",PtA)
+ Tmp=paste(Tmp,"(",Vstr[2],")*(Xfunc(U,V)-(",Pstr[1],"))",sep='')
+ Tmp=paste(Tmp,"-(",Vstr[1],")*(Yfunc(U,V)-(",Pstr[2],"))}",sep='')
+ }else{
+ Tmp=paste(Tmp,"Xfunc(U,V)}",sep='')
+ }
+ eval(parse(text=Tmp))
+ Dx=(URNG[2]-URNG[1])/Np[1]
+ Dy=(VRNG[2]-VRNG[1])/Np[2]
+ for(J in Looprange(1,Np[2])){ #####
+ Vval1=VRNG[1]+(J-1)*Dy
+ Vval2=VRNG[1]+J*Dy
+ for(I in Looprange(1,Np[1])){ #####
+ Uval1=URNG[1]+(I-1)*Dx
+ Uval2=URNG[1]+I*Dx
+ Eval11=Eqfun(Uval1,Vval1)
+ Eval12=Eqfun(Uval1,Vval2)
+ Eval21=Eqfun(Uval2,Vval1)
+ Eval22=Eqfun(Uval2,Vval2)
+ a1=Uval1;b1=Vval1;c1=Eval11
+ a2=Uval2;b2=Vval1;c2=Eval21
+ a3=Uval2;b3=Vval2;c3=Eval22
+ a4=Uval1;b4=Vval2;c4=Eval12
+ PL=matrix(c(a1,b1,a2,b2,a3,b3,a4,b4,a1,b1),ncol=2,byrow=TRUE)
+ VL=c(c1,c2,c3,c4,c1)
+ QL=c()
+ for(K in 1:4){
+ P1=Op(K,PL); P2=Op(K+1,PL)
+ M1=Op(K,VL); M2=Op(K+1,VL)
+ if(abs(M1)<Eps0){
+ QL=Appendrow(QL,P1)
+ next
+ }
+ if(abs(M2)<Eps0){
+# QL=Appendrow(QL,P2)
+ next
+ }
+ if((M1> 0) && (M2> 0)){
+ next
+ }
+ if((M1< 0) && (M2< 0)){
+ next
+ }
+ Tmp=1/(M1-M2)*(-M2*P1+M1*P2)
+ QL=Appendrow(QL,Tmp)
+ }
+ if(Length(QL)==2){
+ Puv1=Op(1,QL); Puv2=Op(2,QL)
+ Tmp1=Op(1,Puv1)
+ Tmp2=Op(2,Puv1)
+ Xv=Xfunc(Tmp1,Tmp2)
+ Yv=Yfunc(Tmp1,Tmp2)
+ Zv=Zfunc(Tmp1,Tmp2)
+ P1=c(Xv,Yv,Zv)
+ Tmp1=Op(1,Puv2)
+ Tmp2=Op(2,Puv2)
+ Xv=Xfunc(Tmp1,Tmp2)
+ Yv=Yfunc(Tmp1,Tmp2)
+ Zv=Zfunc(Tmp1,Tmp2)
+ P2=c(Xv,Yv,Zv)
+ V1=Vec[1]; V2=Vec[2]; V3=Vec[3]
+ if(abs(V1)>Eps0){
+ M1=PtA[3]+V3/V1*(P1[1]-PtA[1])-P1[3]
+ M2=PtA[3]+V3/V1*(P2[1]-PtA[1])-P2[3]
+ }else if(abs(V2)>Eps0){
+ M1=PtA[3]+V3/V2*(P1[2]-PtA[2])-P1[3]
+ M2=PtA[3]+V3/V2*(P2[2]-PtA[2])-P2[3]
+ }else{
+ M1=PtA[2]-P1[2]
+ M2=PtA[2]-P2[2]
+ }
+ if(M1*M2>= 0){ #18.02.21
+ if(((M1>0) && (M2>0)) || ((M1< 0) && (M2< 0))){
+ next
+ }
+ if(M1==0){
+ Pt=P1; Ptuv=Puv1
+ }else{
+ Pt=P2; Ptuv=Puv2
+ }
+ }else{
+ Pt=1/(M1-M2)*(-M2*P1+M1*P2)
+ Ptuv=1/(M1-M2)*(-M2*Puv1+M1*Puv2)
+ }
+ if(is.character(Uveq)){
+ Tmp1=paste('(',sprintf("%6.6f",Ptuv[1]),')',sep='')
+ Tmp2=paste('('+sprintf("%6.6f",Ptuv[2]),')',sep='')
+ Tmp=gsub(UNAME,Tmp1,Uveq,fixed=TRUE)
+ Tmp=gsub(VNAME,Tmp2,Tmp,fixed=TRUE)
+ Tmp=eval(parse(text=Tmp))
+ if(Tmp< -Eps0){
+ next
+ }
+ }
+ Tmp1=Crossprod(Pt-PtA,Vec)
+ if(Norm(Tmp1)<Eps){ #18.02.19
+ Tmp1=Dotprod(Pt-PtA,Vec) #18.02.21
+ if((Tmp1>-Eps0)&&(Tmp1<Norm(PtB-PtA)+Eps0)){
+ Out=c(Out,list(Pt))
+ }
+ }
+ }
+ }
+ }
+ tmp1=Groupnearpt(Out,Eps)
+ Out=list()
+ for(jj in Looprange(1,length(tmp1))){
+ tmp=Op(jj,tmp1)
+ tmp=c(sum(tmp[,1]),sum(tmp[,2]),sum(tmp[,3]))/Length(tmp)
+ Out=c(Out,list(tmp))
+ }
+ return(Out)
+}
+
+Clipindomain<- function(ObjL,FigL){
+ Eps0=10^(-4)
+ Eps1=0.01
+ Eps2=0.05
+ Bdy=Kyoukai(FigL)
+ if(length(Bdy)>=2){
+ Fbdy=Joincrvs(FigL)
+ }else{
+ Fbdy=Op(1,FigL)
+ }
+ if(!is.list(ObjL)){
+ ObjL=list(ObjL)
+ }
+ if(!is.list(FigL)){
+ FigL=list(FigL)
+ }
+ OutL=list()
+ for(Nobj in Looprange(1,length(ObjL))){
+ Obj=Op(Nobj,ObjL)
+ ParL=c(1,Length(Obj))
+ Tmp=IntersectcurvesPp(Obj,Fbdy,Eps1,Eps2)
+ for(J in Looprange(1,length(Tmp))){
+ Tmp1=Op(J,Tmp)
+ ParL=c(ParL,Op(2,Tmp1))
+ }
+ ParL=sort(ParL)
+ Tmp=c(1)
+ for(I in Looprange(1,length(ParL))){
+ Tmp1=Op(length(Tmp),Tmp)
+ Tmp2=ParL[I]
+ if(Tmp2-Tmp1>Eps0){
+ Tmp=c(Tmp,Tmp2)
+ }
+ }
+ ParL=Tmp
+ Tmp1=Op(length(ParL),ParL)
+ Tmp2=Length(Obj)
+ if(abs(Tmp1-Tmp2)<Eps){
+ ParL=c(ParL[Looprange(1,length(ParL)-1)],Tmp2)
+ }
+ Fig=list()
+ for(N in Looprange(1,length(ParL)-1)){
+ Tmp=(ParL[N]+ParL[N+1])*0.5
+ Tmp=Pointoncurve(Tmp,Obj)
+ Tmp=Naigai(Tmp,Bdy)
+ Tmp1=sum(Tmp)%%2
+ if(Tmp1==0){
+ next
+ }
+ Fig=c(Fig,list(Partcrv(ParL[N],ParL[N+1],Obj)))
+ }
+ OutL=c(OutL,Fig)
+ }
+ return(OutL)
+}
+
+Crvsfparadata<- function(...){
+ starttime=proc.time()
+ varargin=list(...)
+ Nargs=length(varargin)
+ Sepflg=0
+ Tmp=varargin[[Nargs]]
+ if((is.numeric(Tmp))&&(Tmp<=0)){
+ Sepflg=1
+ Nargs=Nargs-1
+ }
+ Fk=varargin[[1]]
+ if(!is.list(Fk)){
+ FkL=list(Fk)
+ }else{
+ FkL=Fk
+ }
+ Fbdy=Projpara(varargin[[2]])
+ Fd=varargin[[3]];
+ Fullformfunc(Fd) #18.02.17
+ Np=c(50,50)
+ Eps=0.01
+ Eps2=0.05
+ ctr=0
+ for(jj in Looprange(4,Nargs)){
+ tmp=varargin[[jj]]
+ if((length(tmp)>1)||(tmp>1)){
+ Np=tmp
+ if(length(Np)==1){
+ Np=c(Np,Np)
+ }
+ }else{
+ ctr=ctr+1
+ if(ctr==1){Eps=tmp}
+ if(ctr==2){Eps2=tmp}
+ }
+ }
+ Out=list()
+ CRVSFHIDDENDATA<<- list()
+ for(Nn in Looprange(1,length(FkL))){
+ Fk=Op(Nn,FkL)
+ Tmp=Projpara(Fk)
+ Par=Partitionseg(Tmp,Fbdy,Eps,Eps2,0)
+ if(Sepflg==0){
+ for(I in Looprange(1,Length(Fk)-1)){
+ Pa=Op(I,Fk)
+ Pb=Op(I+1,Fk)
+ PtL=Meetpoints(Pa,Pb,1,Np,Eps)
+ for(J in Looprange(1,Length(PtL))){
+ Tmp=Op(J,PtL)
+ Tmp=Parapt(Tmp)
+ Tmp1=Paramoncurve(Tmp,I,Projpara(Fk))
+ Tmp2=min(abs(Par-Tmp1))
+ if(Tmp2*Norm(Parapt(Pb-Pa))>Eps) {
+ Par=c(Par,Tmp1)
+ }
+ }
+ Par=sort(Par)
+ }
+ }
+ for(jj in Looprange(1,length(ADDPOINT))){ #18.02.19from
+ tmp=Parapt(Op(jj,ADDPOINT))
+ tmp=Nearestpt(tmp,Projpara(Fk))
+ if(tmp[[3]]<Eps){
+ Par=c(Par,tmp[[2]])
+ }
+ } #18.02.19upto
+ tmp1=sort(Par)
+ Par=c()
+ tmp2=-1
+ for(jj in Looprange(1,length(tmp1))){
+ tmp=Op(jj,tmp1)
+ if(abs(tmp-tmp2)>Eps){
+ Par=c(Par,tmp)
+ tmp2=tmp
+ }
+ }
+ Tmp1=Nohiddenpara2(Par,Fk,1,Np,Eps,Eps2)
+ Out=c(Out,Tmp1)
+ CRVSFHIDDENDATA<<- c(CRVSFHIDDENDATA,HIDDENDATA)
+ Tmp=paste('Crvsfdata',formatC(Nn,width=2,flag="0"),'/',sep='')
+ Tmp=paste(Tmp,as.character(length(FkL)),' obtained : Time =',sep='')
+ Tmp1=proc.time()-starttime
+ print(paste(Tmp,sprintf("%6.3f",Tmp1[1]),sep=''))
+ }
+ return(Out)
+}
+
+Crv3onsfparadata<- function(...){
+ starttime=proc.time()
+ varargin=list(...)
+ Nargs=length(varargin)
+ Fk=varargin[[1]]
+ if(!is.list(Fk)){
+ FkL=list(Fk)
+ }else{
+ FkL=Fk
+ }
+ Fbdy=Projpara(varargin[[2]])
+ Fd=varargin[[3]]
+ Fullformfunc(Fd) #18.02.17
+ Np=c(50,50)
+ Eps=0.01
+ Eps2=0.05
+ ctr=0
+ for(jj in Looprange(4,Nargs)){
+ tmp=varargin[[jj]]
+ if((length(tmp)>1)||(tmp>1)){
+ Np=tmp
+ if(length(Np)==1){
+ Np=c(Np,Np)
+ }
+ }else{
+ ctr=ctr+1
+ if(ctr==1){Eps=tmp}
+ if(ctr==2){Eps2=tmp}
+ }
+ }
+ Out=list()
+ CRVONSFHIDDENDATA<<- list()
+ for(Nn in Looprange(1,length(FkL))){
+ Fk=Op(Nn,FkL)
+ Tmp=Projpara(Fk)
+ Par=Partitionseg(Tmp,Fbdy,Eps,Eps2,0)
+ for(jj in Looprange(1,length(ADDPOINT))){
+ tmp=Parapt(Op(jj,ADDPOINT))
+ tmp=Nearestpt(tmp,Projpara(Fk))
+ if(tmp[[3]]<Eps){
+ Par=c(Par,tmp[[2]])
+ }
+ }
+ Par=sort(Par)
+ Tmp1=Nohiddenpara2(Par,Fk,1,Np,Eps,Eps2)
+ Out=c(Out,Tmp1)
+ CRVONSFHIDDENDATA<<- c(CRVONSFHIDDENDATA,HIDDENDATA)
+ Tmp=paste('Crvonsfdata',formatC(Nn,width=2,flag="0"),'/',sep='')
+ Tmp=paste(Tmp,as.character(length(FkL)),' obtained : Time =',sep='')
+ Tmp1=proc.time()-starttime
+ print(paste(Tmp,sprintf("%6.3f",Tmp1[1]),sep=''))
+ }
+ return(Out)
+}
+
+Crvonsfparadata<- function(...){
+ starttime=proc.time()
+ varargin=list(...)
+ Nargs=length(varargin)
+ Fuv=varargin[[1]]
+ Fbdy3=varargin[[2]]
+ Fd=varargin[[3]]
+ Fullformfunc(Fd)
+ if(!is.list(Fuv)){
+ Fuv=list(Fuv)
+ }
+ FkL=list()
+ for(jj in Looprange(1,length(Fuv))){
+ tmp1=Op(jj,Fuv)
+ tmp2=c()
+ for(kk in Looprange(1,Length(tmp1))){
+ tmp=Op(kk,tmp1)
+ tmp2=Appendrow(tmp2,XYZfunc(tmp[1],tmp[2]))
+ }
+ FkL=c(FkL,list(tmp2))
+ }
+ Np=c(50,50)
+ Eps=0.01
+ Eps2=0.05
+ ctr=0
+ for(jj in Looprange(4,Nargs)){
+ tmp=varargin[[jj]]
+ if((length(tmp)>1)||(tmp>1)){
+ Np=tmp
+ if(length(Np)==1){
+ Np=c(Np,Np)
+ }
+ }else{
+ ctr=ctr+1
+ if(ctr==1){Eps=tmp}
+ if(ctr==2){Eps2=tmp}
+ }
+ }
+ Out=Crv3onsfparadata(FkL,Fbdy3,Fd,Np,Eps,Eps2)
+ return(Out)
+}
+
+Wireparadata<- function(...){
+ starttime=proc.time()
+ varargin=list(...)
+ Nargs=length(varargin)
+ Fbdy3=varargin[[1]]
+ Fd=varargin[[2]]
+ FdL=Fullformfunc(Fd)
+ DuL=varargin[[3]]
+ DvL=varargin[[4]]
+ Np=c(50,50)
+ Eps=0.01
+ Eps2=0.05
+ ctr=0
+ for(jj in Looprange(5,Nargs)){
+ tmp=varargin[[jj]]
+ if((length(tmp)>1)||(tmp>1)){
+ Np=tmp
+ if(length(Np)==1){
+ Np=c(Np,Np)
+ }
+ }else{
+ ctr=ctr+1
+ if(ctr==1){Eps=tmp}
+ if(ctr==2){Eps2=tmp}
+ }
+ }
+ if(is.numeric(DuL)){
+ tmp1=DuL
+ DuL=list()
+ for(jj in Looprange(1,tmp1)){
+ tmp=jj*(URNG[2]-URNG[1])/(tmp1+1)
+ DuL=c(DuL,list(tmp))
+ }
+ }
+ if(is.numeric(DvL)){
+ tmp1=DvL
+ DvL=list()
+ for(jj in Looprange(1,tmp1)){
+ tmp=jj*(VRNG[2]-VRNG[1])/(tmp1+1)
+ DvL=c(DvL,list(tmp))
+ }
+ }
+ Fuv=list()
+ for(jj in Looprange(1,length(DuL))){
+ tmp1=paste("c(",as.character(Op(jj,DuL)),",",VNAME,")",sep="")
+ tmp2=paste("N=",as.character(Np[2]),sep="")
+ tmp1=Paramplot(tmp1,Op(6,FdL),tmp2)
+ tmp2=c()
+ for(kk in Looprange(1,Length(tmp1))){
+ tmp=Op(kk,tmp1)
+ tmp2=Appendrow(tmp2,tmp)
+ }
+ Fuv=c(Fuv,list(tmp2))
+ }
+ FkL=list()
+ for(jj in Looprange(1,length(Fuv))){
+ tmp1=Op(jj,Fuv)
+ tmp2=c()
+ for(kk in Looprange(1,Length(tmp1))){
+ tmp=Op(kk,tmp1)
+ tmp2=Appendrow(tmp2,XYZfunc(tmp[1],tmp[2]))
+ }
+ FkL=c(FkL,list(tmp2))
+ }
+ Tmp1=proc.time()-starttime
+ cat(UNAME,"direction started","\n")
+ Out1=Crv3onsfparadata(FkL,Fbdy3,Fd,Np,Eps,Eps2)
+ WIREHIDDENDATA<<- CRVONSFHIDDENDATA
+ Fuv=list()
+ for(jj in Looprange(1,length(DvL))){
+ tmp1=paste("c(",UNAME,",",as.character(Op(jj,DvL)),")",sep="")
+ tmp2=paste("N=",as.character(Np[2]),sep="")
+ tmp1=Paramplot(tmp1,Op(5,FdL),tmp2)
+ tmp2=c()
+ for(kk in Looprange(1,Length(tmp1))){
+ tmp=Op(kk,tmp1)
+ tmp2=Appendrow(tmp2,tmp)
+ }
+ Fuv=c(Fuv,list(tmp2))
+ }
+ FkL=list()
+ for(jj in Looprange(1,length(Fuv))){
+ tmp1=Op(jj,Fuv)
+ tmp2=c()
+ for(kk in Looprange(1,Length(tmp1))){
+ tmp=Op(kk,tmp1)
+ tmp2=Appendrow(tmp2,XYZfunc(tmp[1],tmp[2]))
+ }
+ FkL=c(FkL,list(tmp2))
+ }
+ cat(VNAME,"direction started","\n")
+ Out2=Crv3onsfparadata(FkL,Fbdy3,Fd,Np,Eps,Eps2)
+ WIREHIDDENDATA<<- c(WIREHIDDENDATA, CRVONSFHIDDENDATA)
+ Out=c(Out1,Out2)
+ return(Out)
+}
+
+Intersectcrvsf<- function(...){
+ # bdyeq is the equation of boundary f(x,y,z) =0
+ starttime=proc.time()
+ varargin=list(...)
+ Nargs=length(varargin)
+ crv=varargin[[1]]
+ Fd=varargin[[2]]
+ Fullformfunc(Fd)
+ bdyflg=0
+ bdyeq=varargin[[Nargs]]
+ if(is.character(bdyeq)){
+ Nargs=Nargs-1
+ bdyflg=1
+ tmp=strsplit(bdyeq,"=",fixed=TRUE)
+ tmp=tmp[[1]]
+ if(length(tmp)>1){
+ bdyeq=paste("(",tmp[1],")-(",tmp[2],")",sep="")
+ }
+ tmp=paste("bdyeq<- function(P){x=P[1];y=P[2];z=P[3];",bdyeq,"}",sep="")
+ eval(parse(text=tmp))
+ }
+ Eps0=10^(-4)
+ Np=c(50,50)
+ Eps=0.01
+ Eps2=0.05
+ ctr=0
+ for(jj in Looprange(3,Nargs)){
+ tmp=varargin[[jj]]
+ if((length(tmp)>1)||(tmp>1)){
+ Np=tmp
+ if(length(Np)==1){
+ Np=c(Np,Np)
+ }
+ }else{
+ ctr=ctr+1
+ if(ctr==1){Eps=tmp}
+ if(ctr==2){Eps2=tmp}
+ }
+ }
+ PtL=list()
+ for(I in Looprange(1,Length(crv)-1)){
+ Pa=Op(I,crv)
+ Pb=Op(I+1,crv)
+ if(bdyflg==0){
+ tmp=Meetpoints(Pa,Pb,1,Np,Eps)
+ }else{
+ M1=bdyeq(Pa); M2=bdyeq(Pb)
+ if(M1*M2>= 0){ #18.02.21
+ if(((M1>0) && (M2>0)) || ((M1< 0) && (M2< 0))){
+ next
+ }
+ if(M1==0){
+ tmp=list(Pa)
+ }else{
+ tmp=list(Pb)
+ }
+ }else{
+ while(Norm(Pb-Pa)>Eps0){
+ if(bdyeq(Pa)==0){
+ tmp=list(Pa)
+ break
+ }
+ if(bdyeq(Pa)*bdyeq((Pa+Pb)/2)>0){
+ Pa=(Pa+Pb)/2
+ }else{
+ Pb=(Pa+Pb)/2
+ }
+ }
+ tmp=list(1/(M1-M2)*(-M2*Pa+M1*Pb))
+ }
+ }
+ PtL=c(PtL,tmp)
+ }
+ Tmp=paste('Intersectcrvsf obtained : Time =',sep='')
+ Tmp1=proc.time()-starttime
+ print(paste(Tmp,sprintf("%6.3f",Tmp1[1]),sep=''))
+ return(PtL)
+}
+
+Sfcutparadata<- function(...){
+ varargin=list(...)
+ Nargs=length(varargin)
+ CutD=varargin[[1]]
+ Fbdy3=varargin[[2]]
+ Fd=varargin[[3]]
+ FdL=Fullformfunc(Fd)
+ Np=c(50,50)
+ Eps0=10^(-4)
+ Eps=0.01
+ Eps2=0.05
+ ctr=0
+ for(jj in Looprange(4,Nargs)){
+ Tmp=varargin[[jj]]
+ if((length(Tmp)>1)||(Tmp>1)){
+ Np=Tmp
+ if(length(Np)==1){
+ Np=c(Np,Np)
+ }
+ }else{
+ ctr=ctr+1
+ if(ctr==1){Eps=Tmp}
+ if(ctr==2){Eps2=Tmp}
+ }
+ }
+ starttime=proc.time()
+ Tmp=strsplit(CutD,'=')
+ Tmp=Tmp[[1]]
+ if(length(Tmp)==1){
+ Eq=CutD
+ }else{
+ Eq=paste("(",Tmp[1],")-(",Tmp[2],")",sep="")
+ }
+ Eq=gsub("x","Xfunc(U,V)",Eq,fixed=TRUE)
+ Eq=gsub("y","Yfunc(U,V)",Eq,fixed=TRUE)
+ Eq=gsub("z","Zfunc(U,V)",Eq,fixed=TRUE)
+ Tmp=paste("Eqfun<<- function(U,V){",Eq,"}",sep="") ########
+ eval(parse(text=Tmp))
+ Du=(URNG[2]-URNG[1])/Np[1]
+ Dv=(VRNG[2]-VRNG[1])/Np[2]
+ Out=list();Out2=list()
+ for(J in Looprange(1,Np[2])){ #####
+ Vval1=VRNG[1]+(J-1)*Dv
+ Vval2=VRNG[1]+J*Dv
+ for(I in Looprange(1,Np[1])){ #####
+ Uval1=URNG[1]+(I-1)*Du
+ Uval2=URNG[1]+I*Du
+ Eval11=Eqfun(Uval1,Vval1)
+ Eval12=Eqfun(Uval1,Vval2)
+ Eval21=Eqfun(Uval2,Vval1)
+ Eval22=Eqfun(Uval2,Vval2)
+ a1=Uval1;b1=Vval1;c1=Eval11
+ a2=Uval2;b2=Vval1;c2=Eval21
+ a3=Uval2;b3=Vval2;c3=Eval22
+ a4=Uval1;b4=Vval2;c4=Eval12
+ PL=matrix(c(a1,b1,a2,b2,a3,b3,a4,b4,a1,b1),ncol=2,byrow=TRUE)
+ VL=c(c1,c2,c3,c4,c1)
+ QL=c()
+ for(K in 1:4){
+ P1=Op(K,PL); P2=Op(K+1,PL)
+ M1=Op(K,VL); M2=Op(K+1,VL)
+ if(abs(M1)<Eps0){
+ QL=Appendrow(QL,P1)
+ next
+ }
+ if(abs(M2)<Eps0){
+# QL=Appendrow(QL,P2)
+ next
+ }
+ if((M1> 0) && (M2> 0)){
+ next
+ }
+ if((M1< 0) && (M2< 0)){
+ next
+ }
+ Tmp=1/(M1-M2)*(-M2*P1+M1*P2)
+ QL=Appendrow(QL,Tmp)
+ }
+ if(Length(QL)==2){
+ q11=QL[1,1];q12=QL[1,2];q21=QL[2,1];q22=QL[2,2]
+ if(((q11==a1)&&(q21==a1))||((q11==a3)&&(q21==a3))){
+ if(((q21==b1)&&(q22==b1))||((q21==b3)&&(q22==b3))){
+ Out2=c(Out2,list(QL))
+ }else{
+ Out=c(Out,list(QL))
+ }
+ next
+ }
+ if(((q12==b1)&&(q22==b1))||((q12==b3)&&(q22==b3))){
+ if(((q11==a1)&&(q21==a1))||((q11==a3)&&(q21==a3))){
+ Out2=c(Out2,list(QL))
+ }else{
+ Out=c(Out,list(QL))
+ }
+ next
+ }
+ Out=c(Out,list(QL))
+ }
+ }
+ }
+ while(length(Out2)>0){
+ tmp1=Out2[[1]]
+ Out=c(Out,list(tmp1))
+ Out2=Out2[-1]
+ rmv=c()
+ for(jj in Looprange(1,length(Out2))){
+ tmp2=Out2[[jj]]
+ diff1=Norm(tmp2[1,]-tmp1[1,])+Norm(tmp2[2,]-tmp1[2,])
+ diff2=Norm(tmp2[1,]-tmp1[2,])+Norm(tmp2[2,]-tmp1[1,])
+ if((diff1<Eps0)||(diff2<Eps0)){
+ rmv=c(rmv,jj)
+ next
+ }
+ }
+ Out2=Out2[-rmv]
+ }
+ Out=Connectseg(Out,Eps)
+ Tmp1=Out
+ Out=list()
+ for(ii in Looprange(1,length(Tmp1))){
+ Tmp2=Op(ii,Tmp1)
+ Tmp3=c()
+ for(jj in Looprange(1,Length(Tmp2))){
+ Tmp=Op(jj,Tmp2)
+ Tmp=XYZfunc(Tmp[1],Tmp[2])
+ if(Length(Tmp3)>0){
+ if(Norm(Op(Length(Tmp3),Tmp3)-Tmp)<Eps){next}
+ }
+ Tmp3=Appendrow(Tmp3,Tmp)
+ }
+ Out=c(Out,list(Tmp3))
+ }
+ Out=Crv3onsfparadata(Out,Fbdy3,Fd,Np,Eps,Eps2)
+ return(Out)
+}
diff --git a/graphics/ketcindy/ketcindyfolder/scripts/ketlib/ketpiccurrent.r b/graphics/ketcindy/ketcindyfolder/scripts/ketlib/ketpiccurrent.r
new file mode 100755
index 0000000000..be7bba6346
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/scripts/ketlib/ketpiccurrent.r
@@ -0,0 +1,14960 @@
+# Copyright (C) 2014 Setsuo Takato, KETCindy Japan project team
+#
+#This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>
+
+
+#########################################
+
+ThisVersion<- "KeTpic for R v5_2_4(20190511)"
+
+print(ThisVersion)
+
+# 20190511
+# Implicitplot changed (Eps=> 10^(-6))
+# 20190508
+# Implicitplot debugged ( bisection method employed )
+# 20190409
+# Plotdata debugged ( Exclution at left side)
+# 20190408
+# Projpara debugged ( for a single point )
+# 20190405
+# Drwpt changed(Incolor,Same)
+# Makecurves changed(Drwpt)
+# 20190322
+# Plotdata debugged (in the case fo Exc)
+# 20190127
+# Mvprod added
+# 20181231
+# Drwpt debugged/changed ( grep removed, N=8 set )
+# 20181230
+# Drwpt changed ( Same, Incolor )
+# 20181128
+# Objthicksurf debugged
+# 20181031
+# space before # removed
+# 20181024
+# Wireparadata debugged ( for DuL(DvL)=c(..) )
+# Nohiddenpara2 debugged (for SeL=Null )
+# 20181020
+# Setscaling changed ( Setscaling(scalex,scaley) supported )
+# 20181019
+# Arrowhead changed(debugged) ( for basic1.cs )
+# 20181017
+# Drwxy debugged (Doscaling)
+# Arrowhead debugged (Unscaling removed)
+# Paramplot debugged (Assign(fun,var,"t"))
+# 20181015
+# Listplot debugged ( Unscaling implemented )
+# 20180929
+# Paramplot Plotdata, Spacecurve , Implicitplot changed
+# ( Dt,dx not divided by N)
+# Shade changed (Kyoukai => Joincrvs)
+# 20180928
+# Paramplot changed ( case of stationary point)
+# 20180901
+# Objcurve debugged ( Assign rewritten )
+# 20180820,21
+# Drwxy changed ( optional arguments added )
+# Setax changed (ARROWSIZE removed )
+# 20180812
+# Assign debugged ( case nchar(vname)>1)
+# 20180808
+# Scalept3pt changed (ratio)
+# 20180807
+# Reflect3pt,Reflect3data,Scale3pt,Scale3data added
+# 20180717
+# Hatchdata debugged (width option)
+# Enclosing debugged ( for closed curve )
+# 20180713
+# Enclosing2 debugged (for Lineplot: distance of pts added)
+# 20180711
+# Enclosing2 debugged (length => Length)
+# 20180707
+# Enclosing2 debugged (epspara)
+# 20180706
+# Enclosing2 debugged (crv => c)
+# Hatchdata changed ( Interval > *2 )
+# 20180621
+# Kyoukai debugged (1st point converted to matrix, length=>Length)
+# 20180615
+# Assign changed (Replace function added)
+# 20180603
+# Setcolor debugged (length(Iro))
+# Scaledata,Reflectdata,Rotatedata,Translatedata changed ( for point list)
+# 20180602
+# Setcolor changed (rgb supported)
+# 20180523
+# Mkskeletondata debugged
+# 20180517
+# Sfbdparadata debugged ( tmp2[]=>tmp[2])
+# 20180511
+# Arrowhead,Arrowheaddata debugged ( for closed curve)
+# 20180510
+# Plotdata,Paramplot changed ( Assign added for KeTCindy )
+# Texsetctr debugged (grep, fixed=T)
+# Anglemark debugged ( for PB,PA,angle)
+# 20180509
+# Crvonsfparadata renamed to Crv2onsfparadata
+# Makecurves debugged ( Looprange used )
+# 20180506
+# Anglemark changed ( PB,PA,angle) supported
+# 20180501
+# Wireparadata changed and debugged ( is.numeric => length==1 )
+# 20180402
+# Implicitplot largely changed
+# 20180327
+# Kyoukai debugged
+# 20180317
+# IntersectcurvesPp changed and debugged
+# Intersectpartseg changed (Eps00 )
+# Collectsameseg added, Collectnear commented out
+# 20180306
+# PthiddenQ,Meetpoints,Sfcutparadata changed (to avoid duplications )
+# Sfbdparadata changed ( for near points in Implicitdata )
+# Envelopedata, Evlpfun added
+# 20180305
+# (for surface drwaings ) Eps => Eps1
+# 2018.02.27
+# Nohiddenpara2,Crvsfparadara debugged (Eps=>Eps0)
+# 2018.02.26
+# Sfcutparadata changed
+# Partcrv3 debugged
+# Projcurve rewritten
+# Nohiddenparadata debugged
+# PthiddenQ debugged
+# 2018.02.24
+# Sfcutdata added ( for functions )
+# Meetpoints debugged (case Norm(PtB-PtA)<Eps0)
+# 2018.02.23
+# Makevaltable2 added ( for functions )
+# 2018.02.23
+# Crvonsfparadata,Crv3onsfparadata added
+# Wireparadata added
+# 2018.02.22
+# PthiddenQ,Nohiddenpara2 changed (Eps2)
+# 2018.02.21
+# PthiddenQ,Meetpoints debugged
+# Crvsfparadata debugged (OTHERPARTITION)
+# Partitionseg debugged (for non-list) and changed (Ns=0)
+# Intersectcrvsf added
+# 2018.02.19
+# Groupnearpt added
+# Collectnear debugged
+# Meetpoints,PthiddenQ debugged and changed (Groupnearpt used )
+# Parapt changed (for point list )
+# Partitionseg changed (remove close value )
+# Fullformfunc changed (Initialization of ADDPOINT)
+# Addpoints added
+# 2018.02.18
+# Projpara debugged ( for empty data, Mix replace )
+# WriteOutData debugged (for emply data )
+# Sfbdparadata,Cuspparadata debugged
+# Meetpoints replaced
+# 2018.02.17
+# PthiddenQ replaced
+# 2018.02.15
+# Cancoordpara debugged (X=-... )
+# 2018.02.14
+# Paramoncrv,Pointoncrv renamed to ...curve
+# 2018.02.12
+# Nohiddenpara2 debugged ( CUSPPT should be a list )
+# Dropnumlistcrv changed (Eps)
+# 2018.02.11
+# Paramocrv debugged ( case N=Length(PtL) )
+# Sfbdparadata, Borderparadata, Makexybdy, Partitionseg,
+# Evlptablepara, Fullformfunc, Dropnumlistcrv, Cuspsplitpara,
+# PthiddenQ, Nohiddenpara2 added
+# Crvsfparadata, Meetpoints, Clipdomain added
+# 2018.02.10
+# Partcrv3 debugged
+# 2018.02.09
+# Ptstart,Ptend changed ( for the case fig is empty)
+# Norm changed (Dotprod used )
+# 2018.02.07
+# Collectnear debugged (Looprange )
+# Intersectcurves debugged (sum)
+# 2018.02.06
+# Kukeiiwake debugged ( ParamonCurve -> Paramoncrv )
+# 2018.02.05
+# Dotprod changed ( crossprod not used )
+# Intersectpartseg changed ( case of length of result =1)
+# 2018.02.04
+# Diff added ( func, withvar, (varnamevalue1,... ))
+# Funvalue added ( for an expression )
+# 2018.02.02
+# Enclosing2 changed ( for distant curves, startpt option removed )
+# 2018.02.01
+# Intersectline,Intersectseg,...,Intersectcuves added
+# Quicksort added
+# Enclosing2 added (incomplete)
+# 2018.01.29
+# Length added
+# 2017.12.24
+# Objpolyhedron added
+# 2017.12.23
+# Objsymb, symb3data added
+# Objrecs, Objpolygon debugged
+# Objthicksurf added
+# 2017.12.22
+# Openobj,Closeobj,Writeobjpoint,Printobjstr,Objname,Objsurf added
+# Crossprod added
+# Objjoin, Objcurve, Objrecs, Objpolygon, Objsymb added
+# Spacecurve debugged
+# 2017.12.17
+# Setunitlen debugged ( MEMORI )
+# 2017.12.13
+# ReadOutData debugged
+# 2017.12.11
+# Enclosing debugged ( appendrow -> Appendrow )
+# 2017.11.29
+# Anglemark, Arrowhead, Ovaldata debugged ( Circldeta included )
+# 2017.11.27
+# Anglemark changed ( Scilab 16.12.29)
+# Plotdata,Paramplot,Spacecurve changed ( Scilab 16.12.13)
+# Enclosing changed ( Scilab 16.10.09)
+# Arrowhead,Arrowline changed ( Scilab 15.06.11)
+# Definecolor added ( Scilab 15.05.04)
+# 2017.11.26
+# Exprrot, Letterrot debugged ( `)
+# 2017.11.24
+# Deqplot debugged (Looprange)
+# 2017.11.20
+# InWindow debugged (for length=1)
+# 2017.10.28
+# Openfile changed (Creator)
+# 2017.10.23
+# ReadOutData greatly changed
+# 2017.10.11
+# Drwpt debugged (Flattenlist )
+# 2017.10.08
+# Bezier debugged ( Num )
+# 2017.10.07
+# ReadOutData debugged ( for null data )
+# 2017.10.06
+# Deqdata, Deqplot added
+# Connectseg remade(bug)
+# 2017.09.30
+# Bezierpt, Bezier added
+# 2017.09.29
+# Ptcrv debugged
+# 2017.09.28
+# Openfile changed
+# 2017.09.24
+# Circledata debugged
+# Kyoukai changed (Eps)
+# Shade updated
+# 2017.09.22
+# Setcolor changed
+# Plotdata,Paramplot,Spacecurve changed (N-1 -> N)
+# 2017.09.21
+# Shade changed (Sci 17.01.09)
+# 2017.09.17
+# Ovaldata,Assignadd changed
+# Dist added
+# Cicledata changed
+# Bowdata debugged (Circledata,etc)
+
+# 2015.11.05
+# WriteOutData changed
+
+# 2015.10.29
+# WriteOutData changed ( endmark //// )
+
+# 2015.10.24
+# ReadOutData changed ( in case of listlength=1 )
+
+# 2014.12.23
+# ReadOutData added
+
+# 2014.12.17
+# WriteOutData added
+
+# 2014.0905
+# Unscaling debugged MARKLENI => MARKLEN
+# 2014.03.31
+# PhHiddenData added
+# 2014.03.30
+# Facesdata changed ( for Hiddendata )
+# 2014.03.23
+# MARKLEN separated, Rotate3data debugged
+
+# 2013.12.19
+# Openfile, Closefile, Bowname, Bownamerot
+
+# 2013.11.13
+# Arrowhead, Arrowheaddata
+
+# 2013.08.07
+# Cancoordpara added
+
+# 2013.08.07
+# Integrate added
+
+# 2013.05.20
+# Openfile changed
+
+# 2013.05.03
+# Tabledata, Pointdata changed
+# Dividetable, Partframe added
+
+# 2013.02.10
+# Ketinit added
+
+# 2012.01.07
+# Arrowline, Arrowhead ( Cut implemented )
+
+# 2011.12.18
+# Framedata ( compliant for list )
+
+# 2011.12.12
+# Skeletonparadata... ( Flattellist used)
+
+# 2011.11.27
+# drwboxframe
+
+# 2011.11.07
+# metacommands added
+
+# 2011.11.02
+# Joingraphics ( for list structure )
+
+# 2011.08.24
+# Setcolor ( c(1,0,0,0.5) etc )
+# Rotate3data ( Point is available )
+
+# 2011.07.19
+# Drwline, Letter, Expr
+# Drwboxplot( etc ) min,max => outliners
+# Drwline ( unfinished in the case of "integer" )
+
+# 2011.06.25
+# joincrvs debugged
+
+# synchro with ketpict2e
+
+# 2011.06.01
+# Bowdata debugged
+
+#2011.05.28
+# Ratiocmyk, Setcolor ( new )
+
+#2011.04.28
+# Htickmark, Vtickmark debugged
+
+#2011.03.08
+# Drwboxframe debugged
+# Putrow, Putrowexpr debugged (Dpos )
+
+#2011.03.02
+# Tabledata ( index of hline ), PutcoL, PutcoLexpr ( "r",...) debugged
+# Texcom changed ( // => backslash )
+
+#2011.01.07
+# Dividegraphics, Splinedat are changed significantly
+# Readtextdata is changed
+
+#2011.01.04
+# Derivative, Integrate are added
+
+#2010.12.07
+# Translatedata, Scaledata, Reflectdata changed ( efficient for vector )
+# Rotatedata changed ( deg : logical )
+# HIstplotdata, Drwhistplot ( type => freq , fpplot (added) )
+
+# 2010.12.04
+# WindispT changed ( tickmark )
+# Lineplot changed ( mag=> length )
+# Plotdata debugged ( 'E=fun', 'D=')
+# Enclosing changed (return PD)
+
+# 2010.12.02
+# WindispT changed
+# Makecurves debugged
+
+# 2010.11.27
+# Pointdata changed ( efficient for matrix and data.frame )
+# WindispT
+# Setwindow ( decide from data )
+# Assign debugged ( strsplit => gsub(fixed=T))
+
+# 2010.11.20
+# Flattenlist, WindispT
+# Splinedata changed( efficient for data.frame )
+
+#2010.08.19 ( Maybe not finished )
+# Stripblanks
+# Fullformfunc, Sf3data
+
+#2010.08.17
+# Phparadata, Phpersdata, Phspersdata, Phsparadata
+# Facesdata, MakeveLfaceL, Menkakusi2
+# Rotate3data
+# Skeletonpersdata, Skeletonpers3data, Makeskeletonpersdata
+# Embed
+
+#2010.08.16
+# Spacecurve changed
+# CameracoordCurve, Partcrv3, Projpers, CameraCurve,
+# Perspt, Xyzaxpersname, Invperspt, Zparapt, Zperspt
+
+# 2010.08.15
+# Phcutoffdata added
+
+# 2010.08.13
+# Phcutdata, Spacecurve debugged
+# Setangle changed
+
+# 2010.08.09
+# Spacecurve
+# Rotate3data, Rotate3pt
+# Phcutdata
+
+# 2010.08.08
+# Implementing 3d
+# Initangle, Setangle, Setpers, SetstereoL, SetstereoR
+# Mixlength
+# Spaceline, Projpara, ProjCurve, Parapt
+# Xyzax3data, Xyzaxparaname
+# Cancoordpers, Invparapt, ProjcoordCurve
+# Skeletonparadata, Skeletonpara3data, Makeskeletondata, Kukannozoki
+
+# 2010.07.25
+# Rotatedata changed
+# Drwline changed (list of list)
+
+# 2010.04.09
+# Stat package added
+
+# 2010.04.02
+# Putcolexpr, Putrowexpr
+
+# 2010.04.02
+
+# Windisp, Op changed
+# Execmd added
+# Texnewcmd, Texrenewcmd, Texend,
+# Texctr, Texnewctr, Texsetctr
+# Kyoukai debugged
+
+# 2010.01.20
+# Partcrv, Makeshasen : debugged
+
+# 2010.01.23
+# Ovaldata, Ovalbox added
+
+# 2010.01.27
+# Readtextdata changed
+# Putrow, PutcoL debugged ( Putcol is OK)
+
+# 2010.01.31
+# Writetextdata added
+
+# 2010.02.12
+# Texvalctr, Texthectr added
+
+# 2010.02.22
+# Execmd changed
+
+# 2010.02.23
+# Op, Windisp changed
+
+# 2010.02.24
+# Execmd changed
+
+# 2010.03.07
+# Dotfilldata (Kosa>1)
+
+# 2010.03.21
+# Mixjoin
+# Koutenlist (bug)
+
+
+# 2010.03.24
+# Arrowhead ( bug in the case of "l" )
+
+# 2010.03.28
+# Tabledata
+# Diagcelldata ( New )
+
+# 2010.03.30
+# Tabledata
+
+###########################################
+
+XMIN<- -5
+XMAX<- 5
+YMIN<- -5 ; YMAX<- 5
+ZIKU<- "l"
+#ARROWSIZE<- 1
+XNAME<- "$x$"
+XPOS<- "e"
+YNAME<- "$y$"
+YPOS<- "n"
+ONAME<- "O"
+OPOS<- "sw"
+ULEN<- "1cm"
+MilliIn<- 1/2.54*1000
+PenThick<- round(MilliIn*0.02)
+PenThickInit<- PenThick
+TenSizeInit<<- 0.02*2 #17.10.07
+TenSize<- TenSizeInit
+Wfile<-""
+MEMORI<- 0.05
+MEMORIInit<- MEMORI
+MEMORINow<- MEMORI
+MARKLEN<- 0.05
+MARKLENInit<- MARKLEN
+MARKLENNow<- MARKLEN
+GENTEN<- c(0,0)
+YaSize<- 1
+YaAngle<- 18
+YaPosition<- 1
+YaThick<- 1
+YaStyle<- "tf"
+PHI<- 30*pi/180
+THETA<- 60*pi/180
+FocusPoint<- c(0,0,0)
+EyePoint<- c(5,5,5)
+ASSIGNLIST<- list("`","'")
+
+SCALEX<- 1
+SCALEY<- 1
+LOGX<- 0
+LOGY<- 0
+
+TEXFORLEVEL<- 0
+TEXFORLAST<- list()
+
+#######################
+
+Ketinit<- function(){
+XMIN<<- -5
+XMAX<<- 5
+YMIN<<- -5 ; YMAX<<- 5
+ZIKU<<- "l"
+#ARROWSIZE<<- 1
+XNAME<<- "$x$"
+XPOS<<- "e"
+YNAME<<- "$y$"
+YPOS<<- "n"
+ONAME<<- "O"
+OPOS<<- "sw"
+ULEN<<- "1cm"
+MilliIn<<- 1/2.54*1000
+PenThick<<- round(MilliIn*0.02)
+PenThickInit<<- PenThick
+TenSizeInit<<- 0.02*2 #17.10.07
+TenSize<<- TenSizeInit
+Wfile<<-""
+MEMORI<<- 0.05
+MEMORIInit<<- MEMORI
+MEMORINow<<- MEMORI
+MARKLEN<<- 0.05
+MARKLENInit<<- MARKLEN
+MARKLENNow<<- MARKLEN
+GENTEN<<- c(0,0)
+YaSize<<- 1
+YaAngle<<- 18
+YaPosition<<- 1
+YaThick<<- 1
+YaStyle<<- "tf"
+PHI<<- 30*pi/180
+THETA<<- 60*pi/180
+FocusPoint<<- c(0,0,0)
+EyePoint<<- c(5,5,5)
+ASSIGNLIST<<- list("`","'")
+
+SCALEX<<- 1
+SCALEY<<- 1
+LOGX<<- 0
+LOGY<<- 0
+
+TEXFORLEVEL<<- 0
+TEXFORLAST<<- list()
+}
+
+#-------------------------------------------------------
+
+Appendrow<- function(...)
+{
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ Out<-c()
+ Nc<- 0
+ for (I in 1:Nargs)
+ {
+ Dt<- varargin[[I]]
+ Nc<- max(Nc,Ncol(Dt))
+ if(class(Dt)=="matrix") Dt<-as.numeric(t(Dt))
+ Out<- c(Out,Dt)
+ }
+ if(Nc>0)
+ {
+ Out<-matrix(Out, nrow=Nc)
+ Out<-t(Out)
+ }
+ else
+ {
+ Out<-c()
+ }
+ return(Out)
+}
+
+Datalength<-function(Data)
+{
+ if(length(Data)==0) return(0)
+ if(mode(Data)=="numeric") return(Nrow(Data))
+ if(mode(Data)=="character") return(nchar(Data))
+ if(mode(Data)=="list") return(length(Data))
+}
+
+Crossprod<- function (a,b){ # 17.12.22
+ if(length(a)==3){
+ Tmp1=a[2]*b[3]-a[3]*b[2]
+ Tmp2=a[3]*b[1]-a[1]*b[3]
+ Tmp3=a[1]*b[2]-a[2]*b[1]
+ Out=c(Tmp1,Tmp2,Tmp3)
+ }else{
+ Out=a[1]*b[2]-a[2]*b[1]
+ }
+ return(Out)
+}
+
+Dotprod<-function(a,b){ # 18.02.05
+ nn=min(length(a),length(b))
+ out=0
+ for(jj in Looprange(1,nn)){
+ out=out+a[jj]*b[jj]
+ }
+ return(out)
+}
+
+Mvprod<- function(...){ # 190127
+ varargin<- list(...)
+ mat=varargin[[1]]
+ vec=varargin[[2]]
+ if(length(varargin)>2){
+ nn=varargin[[3]]
+ }else{
+ nn=1
+ }
+ mm=round(length(vec)/nn)
+ mat=matrix(mat,ncol=mm,byrow=TRUE)
+ vec=matrix(vec,nrow=nn,byrow=TRUE)
+ out=c()
+ for(jj in 1:nn){
+ tmp=mat%*%Op(jj,vec)
+ out=c(out,tmp)
+ }
+ if(nn>1){
+ out=matrix(out,nrow=nn,byrow=TRUE)
+ }
+ return(out)
+}
+
+Dist<- function(...) # 17.09.17
+{
+ varargin<- list(...)
+ a=varargin[[1]]
+ if(length(varargin)==1){
+ tmp=sqrt(Dotprod(a,a))
+ return(as.vector(tmp))
+ }
+ else{
+ b=varargin[[2]]
+ tmp=sqrt(Dotprod(b-a,b-a))
+ retun(as.vector(tmp))
+ }
+}
+
+Member<-function(A,L)
+{
+ N<-length(L);
+ if(length(N)==0) return(FALSE)
+ for (I in 1:N)
+ {
+ if(class(L)=="list")
+ {
+ Tmp<-L[[I]]
+ }
+ else
+ {
+ Tmp<-L[I]
+ }
+ if(mode(A)=="numeric")
+ {
+ if(Norm(A-Tmp)==0) return(TRUE)
+ }
+ else
+ {
+ if(A==Tmp) return(TRUE)
+ }
+ }
+ return(FALSE)
+}
+
+Norm<-function(V)
+{
+ Tmp=Dotprod(V,V) #18.02.09
+# Tmp<-as.vector(V);
+# Tmp<-crossprod(Tmp,Tmp)
+ Tmp<-sqrt(Tmp)
+# as.numeric(Tmp)
+}
+
+Ncol<-function(P)
+{
+ if(class(P)=="matrix") return(ncol(P))
+ else return(length(P))
+}
+
+Nrow<-function(P)
+{
+ if(length(P)==0) return(0)
+ if(class(P)=="matrix") return(nrow(P))
+ else return(1)
+}
+
+Looprange<- function(a,b)
+{
+if(a<=b) return(a:b)
+return(c())
+}
+
+Stripblanks<- function(Ch){
+ Tmp<- gsub(" ","",Ch,fixed=TRUE)
+ return(Tmp)
+}
+
+Quicksort<- function(seqL,key){ #18.02.01
+ if(length(seqL)<2){
+ out=seqL
+ }else{
+ tmp1=Op(1,seqL)
+ tmp2=Op(2,seqL)
+ if(Op(key,tmp1)>=Op(key,tmp2)){
+ pivot = tmp1
+ }else{
+ pivot=tmp2
+ }
+ left = list()
+ right = list()
+ for(ii in 1:length(seqL)){
+ tmp=Op(ii,seqL)
+ if(Op(key,tmp)< Op(key,pivot)){
+ left=c(left,list(tmp))
+ }else{
+ right=c(right,list(tmp))
+ }
+ }
+ left = Quicksort(left,key)
+ right = Quicksort(right,key)
+ out=c(left,right)
+ }
+ return(out)
+}
+
+Derivative<- function(...)
+{
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ Fstr<- varargin[[1]]
+ Vstr<- varargin[[2]]
+ NvaL<- length(Vstr)
+ Flg<- 0
+ if(Nargs>=3){
+ VaL<- varargin[[3]]
+ Flg<- 1
+ }
+ Str<- paste("deriv(~",Fstr,",c('",Vstr[1],"'",sep="")
+ for(J in Looprange(2,NvaL)){
+ Str<- paste(Str,",'",Vstr[J],"'",sep="")
+ }
+ Str<- paste(Str,")",sep="")
+ if(NvaL<=3){
+ Str<- paste(Str,",func=TRUE)",sep="")
+ }
+ else{
+ Str<- paste(Str,")",sep="")
+ }
+ f<- eval(parse(text=Str))
+ if(Flg==1){
+ if(NvaL<=3){
+ if(NvaL==1){V<- f(VaL[1])}
+ if(NvaL==2){V<- f(VaL[1],VaL[2])}
+ if(NvaL==3){V<- f(VaL[1],VaL[2],VaL[3])}
+ }
+ else{
+ for(J in 1:NvaL){
+ Tmp<- paste(Vstr[J],'<-',as.character(VaL[J]))
+ eval(parse(text=Tmp))
+ }
+ V<- eval(f)
+ }
+ Out<- attr(V,'gradient')
+ Out<- Out[1,]
+ }
+ else{
+ Out<- f
+ }
+ return(Out)
+}
+
+Diff<- function(...){ #18.02.04
+ varargin=list(...)
+ Nargs=length(varargin)
+ fun=varargin[[1]]
+ withvar=varargin[[2]]
+ tmp=paste("f<- expression(",fun,")",sep="")
+ eval(parse(text=tmp))
+ nn=nchar(withvar)
+ for(jj in Looprange(1,nn)){
+ tmp=substring(withvar,jj,jj)
+ f=D(f,tmp)
+ }
+ var=c()
+ val=""
+ for(jj in Looprange(3,Nargs)){
+ tmp=strsplit(varargin[[jj]],"=")
+ var=c(var,tmp[[1]][1])
+ val=paste(val,tmp[[1]][2],",",sep="")
+ }
+ if(Length(val)>1){
+ val=substring(val,1,Length(val)-1)
+ f=deriv(f,var,func=TRUE)
+ tmp=paste("out=f(",val,")",sep="")
+ out=eval(parse(text=tmp))
+ return(out[1])
+ }else{
+ return(f)
+ }
+}
+
+Funvalue<- function(...){
+ varargin=list(...)
+ Nargs=length(varargin)
+ df=varargin[[1]]
+ var=c()
+ val=""
+ for(jj in Looprange(2,Nargs)){
+ tmp=strsplit(varargin[[jj]],"=")
+ var=c(var,tmp[[1]][1])
+ val=paste(val,tmp[[1]][2],",",sep="")
+ }
+ val=substring(val,1,Length(val)-1)
+ dfun=deriv(df,var,func=TRUE)
+ tmp=paste("out=dfun(",val,")",sep="")
+ eval(parse(text=tmp))
+ return(out[1])
+}
+
+Integrate<- function(...)
+{
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ Fstr<- varargin[[1]]
+ Vstr<- varargin[[2]]
+ IntvL<- varargin[[3]]
+ Str<- 'Tmpfun<- function('
+ Str<- paste(Str,Vstr,'){',sep='')
+ Str<- paste(Str,Fstr,'}',sep='')
+ eval(parse(text=Str))
+ Tmpfunv<- function(x){sapply(x,Tmpfun)}
+ Out<- 0
+ for (J in 1:(length(IntvL)-1)){
+ Tmp<- integrate(Tmpfunv,IntvL[J],IntvL[J+1])
+ Out<- Out+Tmp[[1]]
+ }
+ return(Out)
+}
+
+#--------------------------------------
+
+#########################
+# 180506 (pB,pA,angle) supported
+
+Anglemark<- function(...)
+{
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ Eps<- 10^(-3)
+ PB<- varargin[[1]]
+ PA<- varargin[[2]]
+ PC=varargin[[3]]
+ r <- 0.5
+ if(Nargs>=4){
+ r<- varargin[[4]]*r
+ }
+ Out=c()
+ if(length(PC)>1){ #180506from
+ Tmp=min(Norm(PB-PA),Norm(PC-PA))
+ }else{
+ Tmp=Norm(PB-PA)
+ }
+ if(r>Tmp){ #180506to
+ return(Out)
+ }
+ Cir<- Circledata(c(PA,r)) #17.11.29
+ Tmp<- IntersectcrvsPp(Cir,Listplot(PA,PB))
+ P1<- Op(2,Op(1,Tmp))
+ if(length(PC)>1){
+ Tmp<- IntersectcrvsPp(Cir,Listplot(PA,PC))
+ P2<- Op(2,Op(1,Tmp))
+ if(abs(P1-P2)<Eps){
+ Out<-c()
+ return(Out)
+ }
+ if(P1<P2-Eps){
+ Out<- Partcrv(P1,P2,Cir)
+ }
+ else{
+ Tmp<- Numptcrv(Cir)
+ Tmp1<- Partcrv(P1,Tmp,Cir)
+ Tmp2<- Partcrv(1,P2,Cir)
+ Out<- Joincrvs(Tmp1,Tmp2)
+ }
+ }else{
+ Tmp1=Pointoncurve(1,Cir)-PA
+ Tmp2=Pointoncurve(2,Cir)-PA
+ Tmp=Dotprod(Tmp1,Tmp2)/(Norm(Tmp1)*Norm(Tmp2))
+ Tmp=PC/acos(Tmp)
+ if(P1+Tmp<Length(Cir)){
+ Out<- Partcrv(P1,P1+Tmp,Cir)
+ }else{
+ Tmp1= Partcrv(P1,Length(Cir),Cir)
+ Tmp2= Partcrv(1,P1+Tmp-Length(Cir)+1,Cir)
+ Out<- Joincrvs(Tmp1,Tmp2)
+ }
+ }
+ Out
+}
+
+##############################################
+
+Arrowdata<- function(...)
+{
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ P<- varargin[[1]]
+ Q<- varargin[[2]]
+ R<- Q
+ Futosa<- YaThick
+ Ookisa<- YaSize
+ Thickness<- 1
+ Hiraki<- YaAngle
+ Yapos<- YaPosition
+ Position<- 1
+ Str<- YaStyle
+ Flg<- 0
+ for (I in Looprange(3,Nargs)){
+ Tmp<- varargin[[I]]
+ if(mode(Tmp)=="numeric"){
+ if(length(Tmp)>1){
+ R<- Tmp
+ }
+ else{
+ if(Flg==0){
+ Ookisa<- Ookisa*Tmp
+ }
+ if(Flg==1){
+ if(Tmp<5){
+ Hiraki<- Tmp*Hiraki
+ }
+ else{
+ Hiraki<- Tmp
+ }
+ }
+ if(Flg==2){
+ R<- P+Tmp*(Q-P)
+ }
+ else{
+ R<- P+Yapos*(Q-P)
+ }
+ if(Flg==3){
+ Futosa<- Tmp
+ }
+ Flg<- Flg+1
+ }
+ }
+ if(mode(Tmp)=="character"){
+ Tmp<- grep("=", Tmp)
+ if(length(Tmp)>0){
+ eval(parse(text=Tmp))
+ Futosa<- Futosa*Thickness
+ R<- P+Position*(Q-P)
+ }
+ else{
+ Str<- Tmp
+ }
+ }
+ }
+ Tmp1<- Listplot(c(P,Q))
+ Tmp2<- Arrowheaddata(R,Q-P,Ookisa,Hiraki,Futosa,Str)
+ Out<- Joingraphics(Tmp1,Tmp2)
+}
+
+######################################
+
+# 2018.10.19 for new basic1.cs
+# 2013.11.13 No Intersect debugged
+
+Arrowhead<-function(...){
+## Scaling is implemented
+## 12.01.08 Kirikomi
+ Eps=10^(-3)
+ varargin<-list(...)
+ Nargs<-length(varargin)
+ P<-varargin[[1]]
+ Houkou<-varargin[[2]]
+ Ookisa<-0.2*YaSize
+ Hiraki<-YaAngle
+ Futosa<-0.5*YaThick
+ Cut<- 0
+ Str<-YaStyle
+ Flg<- 0
+ for (I in Looprange(3,Nargs)){
+ Tmp<-varargin[[I]]
+ if(is.character(Tmp)){
+ Equal<- grep("=",Tmp,fixed=TRUE) # 12.01.07 from
+ if(length(Equal)>0){
+ Tmp1<- strsplit(Tmp,"=",fixed=TRUE)
+ Tmp2<- Tmp1[[1]]
+ if(Tmp2[1]=="Cut" || Tmp2[1]=="cut"){
+ Tmp<- paste("Cut=",Tmp2[2],sep="")
+ eval(parse(text=Tmp))
+ }
+ }else{
+ Str<- Tmp
+ } # 12.01.07 until
+ }
+ if(is.numeric(Tmp) && length(Tmp)==1){
+ if(Flg==0) Ookisa<-Ookisa*Tmp
+ if(Flg==1){
+ if(Tmp<5) Hiraki<-Tmp*Hiraki
+ else Hiraki<-Tmp
+ }
+ if(Flg==2) Futosa<-Tmp
+ Flg<-Flg+1
+ }
+ }
+ Ookisa<-1000/2.54/MilliIn*Ookisa
+ Theta<-Hiraki*pi/180
+ P<- Doscaling(P)
+ Houkou<- Doscaling(Houkou)
+ if(Nrow(Houkou)>1){
+ Tmp<-Nearestpt(P,Houkou) #181019 (2lines)
+ P<- Tmp[[1]]
+ I<-floor(Tmp[[2]])
+ if(I==1){# 180511
+ if(Norm(Ptend(Houkou)-Ptstart(Houkou))<Eps){
+ I=Numptcrv(Houkou)
+ }
+ }
+ G<-Circledata(c(P,Ookisa*cos(Theta)),"Num=10") #181019(2lines)
+ Flg<- 0 # 13.11.13
+ JL<-seq(I,1,by=-1)
+ for (J in JL){
+ Tmp1=matrix(c(P,Op(J,Houkou)),ncol=2,byrow=TRUE) #181019
+# Tmp<-IntersectcurvesPp(Tmp1,G,0.001,0.01)
+ Tmp<-IntersectcrvsPp(Tmp1,G)
+ if(Length(Tmp)>0){
+ Houkou<-P-Op(1,Tmp[[1]])
+ Flg<- 1
+ break
+ }
+ }
+ if(Flg==0){ # 13.11.13
+ print("Arrowhead may be too large (no intersect)")
+ return(P)
+ }
+ }
+ Ev<--1/Norm(Houkou)*Houkou
+ Nv<-c(-Ev[2],Ev[1])
+ if(length(grep("c",Str))>0){
+ P<- P-0.5*Ookisa*cos(Theta)*Ev
+ }
+ if(length(grep("b",Str))>0){
+ P<- P-Ookisa*cos(Theta)*Ev
+ }
+ A<- P+Ookisa*cos(Theta)*Ev+Ookisa*sin(Theta)*Nv
+ B<- P+Ookisa*cos(Theta)*Ev-Ookisa*sin(Theta)*Nv
+ if(length(grep("l",Str,fixed=TRUE))>0){
+ Tmp<- matrix(c(A,P,B),ncol=2,byrow=TRUE)#181019(2lines)
+ Tmp1<- Unscaling(Tmp)
+ Drwline(Tmp1,Futosa)
+ }
+ else{
+ C<- P+(1-Cut)*((A+B)/2-P) # 12.01.07
+ Tmp<- matrix(c(A,P,B,C,A),ncol=2,byrow=TRUE) #181019(2lines)
+ Tmp1<- Unscaling(Tmp)
+ Shade(Tmp1)
+ Tmp= matrix(c(A,P,B,C,A,P),ncol=2,byrow=TRUE)#181019(2lines)
+ Tmp1=Unscaling(Tmp)
+ Drwline(Tmp1,0.1) # 15.06.11, 15.06.14
+ }
+}
+
+############################################
+
+# 2013.11.13 No intersect debugged
+
+Arrowheaddata<- function(...)
+{ ## Scaling is implemented
+ Eps=10^(-3)
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ P<- varargin[[1]]
+ Houkou<- varargin[[2]]
+ Ookisa<- 0.2*YaSize
+ Hiraki<- YaAngle
+ Futosa<- 0
+ Thickness<- 1
+ Str<- YaStyle
+ Flg<- 0
+ for (I in Looprange(3,Nargs)){
+ Tmp<-varargin[[I]]
+ if(mode(Tmp)=="character"){
+ Tmp1<-grep("=",Tmp)
+ if(length(Tmp1)>0){
+ eval(parse(text=Tmp))
+ Futosa<- Thickness
+ }
+ else{
+ Str<- Tmp
+ }
+ }
+ if(mode(Tmp)=="numeric" && length(Tmp)==1){
+ if(Flg==0) Ookisa<-Ookisa*Tmp
+ if(Flg==1){
+ if(Tmp<5) Hiraki<-Tmp*Hiraki
+ else Hiraki<-Tmp
+ }
+ if(Flg==2) Futosa<-Tmp
+ Flg<-Flg+1
+ }
+ }
+ Theta<- Hiraki*pi/180
+ if(Nrow(Houkou)>1){
+ P<- Doscaling(P)
+ Houkou<- Doscaling(Houkou)
+ Tmp<-Nearestpt(P,Houkou)
+ A<-Tmp[[1]]
+ I<-floor(Tmp[[2]])
+ if(I==1){# 180511
+ if(Norm(Ptend(Houkou)-Ptstart(Houkou))<Eps){
+ I=Numptcrv(Houkou)
+ }
+ }
+ G<-Circledata(c(P,Ookisa*cos(Theta)),N=10) #17.11.29
+ Flg<- 0 # 13.11.13
+ JL<-seq(I,1,by=-1)
+ for (J in JL){
+ B<- Ptcrv(J,Houkou)
+ Tmp<- IntersectcrvsPp(Listplot(list(A,B)),G)
+ if(length(Tmp)>0){
+ Flg<- 1
+ break
+ }
+ A<-B
+ }
+ if(Flg==0){ # 13.11.13
+ print("Arrowhead may be too large (no intersect)")
+ return(P)
+ }
+ Houkou<-P-Op(1,Tmp[[1]])
+ Houkou<- Unscaling(Houkou)
+ P<- Unscaling(P)
+ }
+ P<- Doscaling(P)
+ Houkou<- Doscaling(Houkou)
+ Ev<- -1/Norm(Houkou)*Houkou
+ Nv<- c(-Ev[2],Ev[1])
+ if(length(grep("c",Str))>0){
+ P<-P-0.5*Ookisa*cos(Theta)*Ev
+ }
+ if(length(grep("b",Str))>0){
+ P<-P-Ookisa*cos(Theta)*Ev
+ }
+ A<-P+Ookisa*cos(Theta)*Ev+Ookisa*sin(Theta)*Nv
+ B<-P+Ookisa*cos(Theta)*Ev-Ookisa*sin(Theta)*Nv
+ Tmp<- Listplot(A,P,B)
+ Out<- Unscaling(Tmp)
+ return(Out)
+}
+
+##########################################
+
+Arrowline<- function(...)
+{ # 12.01.07 kirikomi
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ P<- varargin[[1]]
+ Q<- varargin[[2]]
+ Futosa<- YaThick
+ Ookisa<- YaSize
+ Hiraki<- YaAngle
+ Yapos<- YaPosition
+ Cutstr<- "Cut=0"
+ Str<- YaStyle
+ Flg<- 0
+ for (I in Looprange(3,Nargs)){
+ Tmp<- varargin[[I]]
+ if(is.character(Tmp)){
+ Equal<- grep("=",Tmp,fixed=TRUE) # 12.01.07 from
+ if(length(Equal)>0){
+ Tmp1<- strsplit(Tmp,"=")
+ Tmp2<- Tmp1[[1]]
+ if(Tmp2[1]=="Cut" || Tmp2[1]=="cut"){
+ Tmp<- paste("Cut=", Tmp2[2],sep="")
+ Cutstr<- Tmp
+ }
+ }
+ else{
+ Str<- Tmp
+ } # 12.01.07 until
+ }
+ if(is.numeric(Tmp) && length(Tmp)==1){
+ if(Flg==0) Ookisa<- Ookisa*Tmp
+ if(Flg==1){
+ if(Tmp<5) Hiraki<- Tmp*Hiraki
+ else Hiraki<- Tmp
+ }
+ if(Flg==2) Yapos<- Tmp
+ if(Flg==3) Futosa<- Tmp
+ Flg<- Flg+1
+ }
+ }
+ R<- P+Yapos*(Q-P)
+ Tmp=Q-Unscaling(0.2*Ookisa/2*(Q-P)/Norm(Q-P)) # 15.10.24
+ Drwline(Listplot(c(P,Tmp)),Futosa)
+ Tmp=SCALEY
+ Setscaling(1)
+ Arrowhead(R,Q-P,Ookisa,Hiraki,Futosa,Cutstr,Str)
+ Setscaling(Tmp)
+}
+
+#########################################
+
+Assign<- function(...){
+ Replace=function (vname,rep,str){#180615from
+ opv=c("+","-","*","/","(",")","=","<",">",""," ",",") #180812
+ out=""
+ start=1
+ Tmp=gregexpr(vname,str,fixed=TRUE)
+ Vp=Op(1,Tmp)
+ if(min(Vp)>0){
+ for(j in Vp){
+ if(j==1){bf=""}else{bf=substring(str,j-1,j-1)}
+ Tmp=j+nchar(vname)-1 #180812(2lines)
+ if(Tmp==nchar(str)){af=""}else{af=substring(str,Tmp+1,Tmp+1)}
+ tmp1=length(intersect(bf,opv))
+ tmp2=length(intersect(af,opv))
+ tmp=substring(str,start,j+nchar(vname)-1) #180812
+ if((tmp1>0)&&(tmp2>0)){
+ tmp=gsub(vname,rep,tmp,fixed=TRUE)
+ }
+ out=paste(out,tmp,sep='')
+ start=j+nchar(vname) #180812
+ }
+ }
+ out=paste(out,substring(str,start,nchar(str)),sep='')
+ }#180615to
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ if(Nargs==0){
+ ASSIGNLIST<<- list("`",Prime())
+ Out<- ASSIGNLIST
+ return()
+# return("Assign reset done");
+ }
+ L<- list("`","'")
+ if(Nargs%%2==0){
+ L<- Mixjoin(L,varargin)
+ ASSIGNLIST<<- L
+ Out<- L
+ return()
+# return("Assign set done");
+ }
+ if(Nargs==1){
+ Fnstr<- varargin[[1]]
+ if(nchar(Fnstr)==0){ # case of ""
+ L<- ASSIGNLIST
+ Out<- c()
+ for (I in seq(1,length(L),by=2)){
+ Tmp1<- L[[I]]
+ Tmp2<- L[[I+1]]
+ if(length(Tmp2)==1){
+ Tmp3<- as.character(Tmp2)
+ }
+ else{
+ if(mode(Tmp2)=="character"){
+ Tmp3<- Tmp2
+ }
+ else if(mode(Tmp2)=="list"){
+ Tmp3<- makeliststr(Tmp2)
+ }
+ else if(mode(Tmp2)=="numeric"){
+ Tmp3<- "c("
+ for (J in Looprange(1,length(Tmp2))){
+ Tmp3<- paste(Tmp3,as.character(Tmp2[J]),sep="")
+ if(J<length(Tmp2)){
+ Tmp3<- paste(Tmp3,",",sep="")
+ }
+ }
+ Tmp3<- paste(Tmp3,")",sep="")
+ if(class(Tmp2)=="matrix"){
+ Nr<- as.character(nrow(Tmp2))
+ Tmp3<- paste("matrix(",Tmp3,"nrow=",Nr,")",sep="")
+ }
+ }
+ }
+ Tmp<- paste(Tmp1,"=",Tmp3,sep="")
+ Out<- c(Out,Tmp)
+ }
+ return(Out);
+ }
+ if(substr(Fnstr,1,1)=="?"){
+ Fnstr<- substr(Fnstr,2,nchar(Fnstr))
+ for (I in seq(1,length(ASSIGNLIST),by=2)){
+ Tmp<- ASSIGNLIST[[I]]
+ if(Tmp==Fnstr){
+ Out<- Mixjoin(list(I),ASSIGNLIST[I+1])
+ return(Out)
+ }
+ }
+ Out<- "Not found"
+ return(Out);
+ }
+ L<- ASSIGNLIST
+ }
+ else{
+ if(mode(varargin[[2]])=="numeric"){
+ Fnstr<- varargin[[Nargs]]
+ for (I in Looprange(1,Nargs-1)){
+ L[[I]]=varargin[[I]]
+ }
+ }
+ else{
+ Fnstr<- varargin[[1]]
+ for (I in Looprange(2,Nargs)){
+ L[[I-1]]<- varargin[[I]]
+ }
+ }
+ }
+
+FlagL<<- 0
+
+ for (I in seq(1,length(L),by=2)){
+ Vname<- L[[I]]
+ Val<- L[[I+1]]
+ if(mode(Val)=="numeric"){
+ if(Nrow(Val)==1){
+ for (K in Looprange(1,length(Val))){
+ if(length(Val)==1){
+ Tmp<- Vname
+ }
+ else{
+ Tmp<- paste(Vname,"[", as.character(K),"]",sep="")
+ }
+ if(mode(Val[K])=="numeric"){
+ Tmp1<- paste("(",as.character(Val[K]),")",sep="")
+ }
+ else{
+ Tmp1<- Val[K]
+ }
+ Fnstr<- Replace(Tmp,Tmp1,Fnstr)#180615
+ }
+ }
+ else{
+ for (J in Looprange(1,Nrow(Val))){
+ for (K in Looprange(1,Ncol(Val))){
+ Tmp<- paste(Vname,"(",as.character(J),",",as.character(K),")",sep="")
+ if(mode(Val[J,K])=="numeric"){
+ Tmp1<- paste("(",as.character(Val[J,K]),")",sep="")
+ }
+ else{
+ Tmp1<- Val[J,K]
+ }
+ Fnstr<- Replace(Tmp,Tmp1,Fnstr)#180615
+ }
+ }
+ }
+ if(length(Val)==1){
+ Rep<- as.character(Val)
+ }
+ else{
+ Rep<-""
+ if(class(Val)=="matrix"){
+ Rep<- "matrix("
+ }
+ Rep<- paste(Rep,"c(",sep="")
+ for (J in Looprange(1,length(Val))){
+ Rep<- paste(Rep,as.character(Val[J]),sep="")
+ if(J<length(Val)){
+ Rep<- paste(Rep,",",sep="")
+ }
+ else{
+ Rep<- paste(Rep,")",sep="")
+ }
+ }
+ if(class(Val)=="matrix"){
+ Rep<- paste(Rep,",nrow=",as.character(nrow(Val)),")",sep="")
+ }
+ }
+ Tmp1<- paste("(",Rep,")",sep="")
+ }
+ if(mode(Val)=="character"){
+ Tmp1<- Val
+ }
+ if(mode(Val)=="list"){
+ Tmp1<- Makeliststr(Val)
+ }
+ Fnstr<- Replace(Vname,Tmp1,Fnstr) #180615
+ }
+ return(Fnstr)
+}
+
+#########################################
+
+Assignadd<- function(...)
+{
+ varargin<- list(...)
+ L<- ASSIGNLIST
+ L<- Mixjoin(L,varargin)
+ ASSIGNLIST<<- L
+# return("assign add done"); #17.09.17
+}
+
+#########################################
+
+Assignrep<- function(...)
+{
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ L<- ASSIGNLIST
+ for (I in seq(1,Nargs,by=2)){
+ Vname<- varargin[[I]]
+ Val<- varargin[[I+1]]
+ Tmp1<- paste("?",Vname,sep="")
+ Tmp<- Assign(Tmp)
+ if(mode(Tmp)=="character"){
+ next
+ }
+ I<- Tmp[[1]]
+ L<- Mixjoin(L,list(Val))
+ }
+ ASSIGNLIST<<- L
+}
+
+#########################################
+
+ Assignset<- function(...)
+{
+ Assign(...)
+}
+
+#########################################
+
+Beginpicture<-function(ul)
+{ ## Scaling is implemented
+ Tmp<- Doscaling(c(XMIN,YMIN))
+ Xm<- Tmp[1]
+ Ym<- Tmp[2]
+ Tmp<- Doscaling(c(XMAX,YMAX))
+ XM<- Tmp[1]
+ YM<- Tmp[2]
+ Dx<- XM-Xm
+ Dy<- YM-Ym
+ Sym<-".0123456789 +-*/"
+ SL<-Sym
+ OL<-"+-*/"
+ if(ul!=""){
+ ULEN<<-ul;
+ }
+ Is<-1;
+ VL<-"";
+ Ucode<-ULEN
+ for (I in Looprange(1,nchar(Ucode))){
+ C<-substring(Ucode,I,I);
+ if(length(grep(C,SL))>0){
+ if(length(grep(C,OL))>0){
+ Tmp<-substring(Ucode,Is,I-1);
+ Str<-paste(VL,Tmp,C,sep="")
+ VL<-Str
+ Is<-I+1;
+ }
+ }
+ else{
+ Unit<-substring(Ucode,I,I+1)
+ Str<-substring(Ucode,Is,I-1)
+ VL<-paste(VL,Str,sep="")
+ break;
+ }
+ }
+ Valu<-eval(parse(text=VL))
+ Str<-as.character(Valu);
+ ULEN<<- paste(Str,Unit,sep="")
+ if(Unit=="cm") MilliIn<<-1000/2.54*Valu
+ if(Unit=="mm") MilliIn<<-1000/2.54*Valu/10
+ if(Unit=="in") MilliIn<<-1000*Valu
+ if(Unit=="pt") MilliIn<<-1000/72.27*Valu
+ if(Unit=="pc") MilliIn<<-1000/6.022*Valu
+ if(Unit=="bp") MilliIn<<-1000/72*Valu
+ if(Unit=="dd2") MilliIn<<-1000/1238/1157/72.27*Valu
+ if(Unit=="cc") MilliIn<<-1000/1238/1157/72.27*12*Valu;
+ if(Unit=="sp") MilliIn<<-1000/72.27/65536*Valu/10
+ MARKLEN<<- MARKLENNow*1000/2.54/MilliIn;
+ Str<-paste("{\\unitlength=",ULEN,"%\n",sep="")
+ cat(Str,file=Wfile,append=TRUE)
+ cat("\\begin{picture}%\n",file=Wfile,append=TRUE)
+ Str<-"("
+ Tmp<-as.character(round(Dx,digits=6))
+ Str<-paste(Str,Tmp,",",sep="")
+ Tmp<-as.character(round(Dy,digits=6))
+ Str<-paste(Str,Tmp,")(",sep="")
+ Tmp<-as.character(round(Xm,digits=6))
+ Str<-paste(Str,Tmp,",",sep="")
+ Tmp<-as.character(round(Ym,digits=6))
+ Str<-paste(Str,Tmp,")%\n",sep="")
+ cat(Str,file=Wfile,append=TRUE)
+ Str<-paste("\\special{pn ",as.character(PenThickInit),"}%\n",sep="")
+ cat(Str,file=Wfile,append=TRUE)
+ cat("%\n",file=Wfile,append=TRUE)
+}
+
+#################################################
+
+Bowdata<- function(...) #17.09.17
+{
+ varargin <- list(...)
+ Nargs <- length(varargin)
+ PA <- varargin[[1]]
+ PB <- varargin[[2]]
+ Cut <- 0
+ D <- 1/2*Norm(PB-PA)
+ if(Nargs>=3) {
+ H <- varargin[[3]]*D*0.2
+ }
+ else {
+ H <- D*0.2
+ }
+ H <- min(H,D)
+ if(Nargs>=4){
+ Cut <- varargin[[4]]
+ }
+ Ydata <- MakeBowdata(PA,PB,H)
+ C <- Op(1,Ydata)
+ r <- Op(2,Ydata)
+ R1 <- Op(3,Ydata)
+ R2 <- Op(4,Ydata)
+ Rng <- paste("R=c(",as.character(R1),",",as.character(R2),")",sep="")
+ Theta <- (R1+R2)*0.5
+ BOWMIDDLE <<- list(c(C[1]+r*cos(Theta),C[2]+r*sin(Theta)),Theta)
+ M <- Op(1,BOWMIDDLE)
+ ThetaM <- Op(2,BOWMIDDLE)
+ BOWSTART <<- PA
+ BOWEND <<- PB
+ if(Cut==0){
+ Pd<- Circledata(c(C,r),Rng)
+ }
+ else{
+ Alpha <- R1; Beta <- ThetaM-Cut/(2*r)
+ Rng <- paste("Rng=c(",as.character(Alpha),",",as.character(Beta),")",sep="")
+ Pd <- Circledata(c(C,r),Rng)
+ Alpha <- ThetaM+Cut/(2*r); Beta <- R2
+ Rng <- paste("R=c(",as.character(Alpha),",",as.character(Beta),")",sep="")
+ Tmp <- Circledata(c(C,r),Rng)
+ Pd <- Appendrow(Pd,c(Inf,Inf),Tmp)
+ }
+}
+
+Bowmiddle <- function(...)
+{
+ varargin <- list(...)
+ Nargs <- length(varargin)
+ if( Nargs==0) {
+ M <- BOWMIDDLE
+ return(M)
+ }
+ if(Nargs==1) {
+ Bdata <- varargin[[1]]
+ A <- Bdata[1,]
+ Dind <- Dataindex(Bdata)
+ Dc <- Nrow(Dind)
+ Tmp <- Dind[Dc,2]
+ B <- Bdata[Tmp,]
+ if(Dc==1) {
+ Tmp1 <- round(Tmp/2)
+ }
+ else {
+ Tmp1 <- Dind[1,2]
+ }
+ D <- Bdata[Tmp1,]
+ B <- B-A
+ D <- D-A
+ Tmp1 <- B[1]*D[2]-D[1]*B[2]
+ Tmp2 <- (Norm(B)^2*D[2]-B[2]*Norm(D)^2)/2
+ Tmp3 <- -(Norm(B)^2*D[1]-B[1]*Norm(D)^2)/2
+ C <- c(Tmp2,Tmp3)/Tmp1+A
+ R <- Norm(C-A)
+ B <- B+A
+ V <- (A+B)/2-C
+ V <- V/Norm(V)
+ M <- C+R*V
+ }
+ else {
+ A <- varargin[[1]]; B <- varargin[[2]]
+ D <- 1/2*Norm(B-A)
+ H <- 0.2*D;
+ if(length(varargin)>=3) {
+ Tmp <- varargin[[3]]
+ H <- Tmp*D*0.2
+ }
+ H <- min(H,D)
+ Ydata <- MakeBowdata(A,B,H)
+ C <- Op(1,Ydata)
+ R <- Op(2,Ydata)
+ T <- (Op(3,Ydata)+Op(4,Ydata))/2
+ P <- C+R*c(cos(T),sin(T))
+ #M <- list(P,T)
+ M <- P
+ }
+ return(M)
+}
+
+##########################
+# 13.12.19 small movement supported
+
+Bowname<- function(...)
+{
+ varargin <- list(...)
+ Nargs <- length(varargin)
+ Siki <- varargin[[Nargs]]
+ Nargs<- Nargs-1
+ Dr<- "c"
+ if(Nargs>=1){
+ Tmp<- varargin[[Nargs]]
+ if(is.character(Tmp)){
+ Dr<- Tmp
+ Nargs<- Nargs-1
+ }
+ }
+ if(Nargs==0){
+ Siki <- varargin[[1]]
+ P <- Op(1,BOWMIDDLE)
+ }
+ else if(Nargs==1){
+ Bdata <- varargin[[1]]
+ P <- Bowmiddle(Bdata)
+ }
+ else{
+ A <- varargin[[1]]; B <- varargin[[2]]
+ D <- 1/2*Norm(B-A)
+ Tmp <- varargin[[3]]
+ if(is.character(Tmp)){
+ H <- D*0.2
+ }
+ else {
+ H <- Tmp*D*0.2
+ }
+ H <- min(H,D)
+ Ydata <- MakeBowdata(A,B,H)
+ Tmp <- Bowmiddle(Ydata)
+ P <- Op(1,Tmp)
+ }
+ Expr(P,Dr,Siki)
+}
+
+##########################
+# 13.12.19 small movement supported
+# A,B, ... no longer supported
+
+Bownamerot <- function(...)
+{
+ varargin <- list(...)
+ Nargs <- length(varargin)
+ Eps <- 10^(-6)
+ Flg <- 1
+ Tmp <- varargin[[Nargs]]
+ if(is.numeric(Tmp) && length(Tmp)==1 && Tmp<0){
+ Flg <- Tmp
+ Nargs <- Nargs-1
+ }
+ Siki <- varargin[[Nargs]]
+ Nargs<- Nargs-1
+ Dr<- "c"
+ if(Nargs>=1){
+ Tmp<- varargin[[Nargs]]
+ if(is.character(Tmp)){
+ Dr<- Tmp
+ Nargs<- Nargs-1
+ }
+ }
+ if(Nargs==0) {
+ P <- Op(1,BOWMIDDLE)
+ A <- BOWSTART
+ B <- BOWEND
+ }
+ else{
+ Bdata<- varargin[[1]]
+ P<- Bowmiddle(Bdata)
+ A=Bdata[1,]
+ B=Bdata[nrow(Bdata),]
+ Tm<- 0; Tv<- 0
+ if(Nargs>1){
+ Tm<- varargin[[2]]
+ if(Nargs>2){
+ Tv<- varargin[[3]]
+ }
+ }
+ }
+# else if(Nargs==2) {
+# Bdata <- varargin[[1]]
+# P <- Bowmiddle(Bdata)
+# A <- Bdata[1,]
+# B <- Bdata[Nrow(Bdata),]
+# Siki <- varargin[[2]]
+# }
+# else {
+# A <- varargin[[1]]; B <- varargin[[2]]
+# D <- 1/2*Norm(B-A)
+# Tmp <- varargin[[3]]
+# if(mode(Tmp)=="character") {
+# H <- 0.2*D; Siki <- Tmp
+# }
+# else {
+# H <- Tmp*D*0.2; Siki <- varargin[[4]]
+# }
+# H <- min(H,D)
+# Ydata <- MakeBowdata(A,B,H)
+# C <- Op(1,Ydata)
+# R <- Op(2,Ydata)
+# T <- (Op(3,Ydata)+Op(4,Ydata))/2
+# P <- C+R*c(cos(T),sin(T))
+# }
+ if(A[1]>B[1]+Eps){
+ Tmp <- A
+ A <- B
+ B <- Tmp
+ }
+ if(Flg>0) {
+ Tmp <- B-A
+ }
+ else{
+ Tmp <- A-B
+ }
+ Exprrot(P,Tmp,Tm,Tv,Siki)
+}
+
+CalcHeight<-function(Hoko,Moji)
+{
+ D<-0
+ H<-substring(Hoko,1,1)
+ Tmp<-paste("\\settoheight{\\Height}{",Moji,"}",sep="")
+ Str<-c(Tmp)
+ Tmp=paste("\\settodepth{\\Depth}{",Moji,"}",sep="")
+ Str<-c(Str,Tmp)
+ if(H=="n") Str<-c(Str,"\\setlength{\\Height}{\\Depth}")
+ if(H=="s") Str<-c(Str,"\\setlength{\\Height}{-\\Height}")
+ if(H=="c")
+ {
+ Str<-c(Str,"\\setlength{\\Height}{-0.5\\Height}")
+ Str<-c(Str,"\\setlength{\\Depth}{0.5\\Depth}")
+ Str<-c(Str,"\\addtolength{\\Height}{\\Depth}")
+ }
+ for (I in 1:length(Str)) cat(Str[I],file=Wfile,append=TRUE)
+ cat("%\n",file=Wfile,append=TRUE)
+}
+
+#########################
+
+CalcWidth<-function(Hoko,Moji)
+{
+ D<-0;
+ H<-substring(Hoko,2,2)
+ if(H=="e") D<-0
+ if(H=="w") D<--1.0
+ if(H=="c") D<--0.5
+ Str1<-paste("\\settowidth{\\Width}{",Moji,"}",sep="")
+ Tmp<-as.character(D)
+ Str2<-paste("\\setlength{\\Width}{",Tmp,"\\Width}",sep="")
+ cat(Str1,file=Wfile,append=TRUE)
+ cat(Str2,file=Wfile,append=TRUE)
+ cat("%\n",file=Wfile,append=TRUE)
+}
+
+#########################
+# 17.09.17
+# 17.09.24
+
+Circledata<- function(...){
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ Cr<- varargin[[1]]
+ C=Cr[1:2]
+ if(length(Cr)==4){
+ ra=Norm(C-Cr[3:4])
+ Nop=2
+ }
+ else{
+ ra=Cr[3]
+ Nop=2
+ }
+ R=c(0,2*pi)
+ N=50
+ for (I in Looprange(Nop,Nargs)){
+ Tmp<- varargin[[I]]
+ if(is.character(Tmp)){
+ Tmp1=regexpr("=",Tmp) #17.09.24from
+ Tmp2=substring(Tmp,Tmp1+1,nchar(Tmp))
+ Tmp1=substring(Tmp,1,Tmp1)
+ Tmp1=gsub("NUM", "N", toupper(Tmp1))
+ Tmp1=gsub("RNG", "R", Tmp1)
+ Tmp=paste(Tmp1,Tmp2,sep="") #17.09.24until
+ eval(parse(text=Tmp))
+ }
+ }
+ Dt<- (R[2]-R[1])/N
+ T <- seq(R[1],R[2],by=Dt)
+ X <- C[1]+ra*cos(T)
+ Y <- C[2]+ra*sin(T)
+ XY<- c(X,Y)
+ P<- matrix(XY,ncol=2)
+ return(P)
+}
+
+#########################
+# 13.12.19
+
+Closefile<-function(...)
+{
+ varargin<- list(...)
+ if(length(varargin)>=1){
+ Pa<- varargin[[1]]
+ if(is.character(Pa)){
+ if(Pa=="1") Endpicture(1)
+ if(Pa=="0") Endpicture(0)
+ }
+ }
+ Wfile<<-""
+}
+
+#########################
+
+Closepar<- function()
+{
+ S<- "%\n\\end{minipage}"
+ cat(S,file=Wfile,append=TRUE)
+ Closephr()
+}
+
+
+####################################
+
+Closephr<- function()
+{
+ cat("%\n}%\n",file=Wfile,append=TRUE)
+}
+
+#####################################
+
+Dataindex<-function(P)
+{
+ # Inf;Inf : Terminator
+ Ndm<-c()
+ if(length(P)==0) return(Ndm)
+ N1<-1
+ Flg<-0
+ for (J in 1:Nrow(P))
+ {
+ if(P[J,1]==Inf)
+ {
+ Ndm<-Appendrow(Ndm,c(N1,J-1))
+ N1<-J+1;
+ if(P[N1,1]==Inf)
+ {
+ Flg<-1;
+ break;
+ }
+ }
+ }
+ if(Flg==0)
+ {
+ Ndm<-Appendrow(Ndm,c(N1,Nrow(P)))
+ }
+ if(class(Ndm)=="numeric")
+ {
+ Tmp<-matrix(Ndm,nrow=1)
+ Ndm<- Tmp
+ }
+ return(Ndm)
+}
+
+################################
+
+Dashline<- function(...)
+{
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ Nall<- Nargs; Sen<- 1 ; Gap<- 1
+ Tmp<- varargin[[Nall]]
+ if(mode(Tmp)=="numeric" && length(Tmp)==1 && Tmp>0){
+ Tmp1<- varargin[[Nall-1]]
+ if(mode(Tmp1)=="numeric" && length(Tmp1)==1 && Tmp1>0){
+ Sen<- Tmp1; Gap<- Tmp
+ Nall<- Nall-2
+ }
+ else{
+ Sen<- Tmp; Gap<- Sen
+ Nall<- Nall-1
+ }
+ }
+ Sen<- 1000/2.54/MilliIn*Sen
+ Gap<- 1000/2.54/MilliIn*Gap
+ for (N in Looprange(1,Nall)){
+ Pdata<- varargin[[N]]
+ if(is.numeric(Pdata)==1){
+ Pdata<- list(Pdata)
+ }
+ for (II in 1:length(Pdata)){
+ Figdata<- Op(II,Pdata)
+ Makehasen(Figdata,Sen,Gap,0)
+ }
+ }
+}
+
+##############################################
+# 17.11.27
+
+Definecolor<- function(Name,Data){
+ Tmp1=length(Data)
+ if((Tmp1<3) || (Tmp1>4)){
+ cat("Size of data should be 3 or 4.")
+ return()
+ }
+ if(Tmp1==4){
+ Tp="cmyk"
+ }else{
+ Tp="rgb"
+ }
+ Tmp=""
+ for(J in 1:Tmp1){
+ Tmp=paste(Tmp, as.character(Data[J]),sep="")
+ if(J<Tmp1){
+ Tmp=paste(Tmp,",",sep="")
+ }
+ }
+ Tmp=paste("\\definecolor{",Name,"}{",Tp,"}{",Tmp,"}",sep="")
+ Texcom(Tmp)
+}
+
+##############################################
+
+Diagcelldata<- function(Tb,Nc,Nr)
+{
+ Tmp<- Findcell(Tb,Nc,Nr)
+ C<- Tmp[[1]]
+ Dx<- Tmp[[2]]
+ Dy<- Tmp[[3]]
+ Pne<- C+c(Dx,Dy)
+ Pnw<- C+c(-Dx,Dy)
+ Psw<- C+c(-Dx,-Dy)
+ Pse<- C+c(Dx,-Dy)
+ Tmp1<- Listplot(Pnw,Pse)
+ Tmp2<- Listplot(Pne,Psw)
+ list(Tmp1,Tmp2)
+}
+
+##############################################
+# 11.01.07
+
+Dividegraphics<- function(Pd)
+{
+ if(length(Pd)==0){
+ return(Pd)
+ }
+ DtL<- Flattenlist(Pd)
+ OutL<- list()
+ for (J in 1:length(DtL)){
+ Dt<- as.matrix(DtL[[J]])
+ Ndm<- Dataindex(Dt)
+ for (I in Looprange(1,Nrow(Ndm))){
+ Fd<- Dt[Ndm[I,1]:Ndm[I,2],]
+ OutL<- c(OutL,list(Fd))
+ }
+ }
+ return(OutL)
+}
+
+##############################################
+# 13.05.03
+
+Dividetable<- function(Tb)
+{
+ G<- Tb[[1]]
+ Gw<- G[[1]]
+ Gt<- G[Tb[[2]]]
+ Gy<- G[Tb[[3]]]
+ list(Gw,Gt,Gy)
+}
+
+################################################
+
+Doscaling<- function(G)
+{
+ GLg<- G
+ if(class(GLg)=="numeric")
+ {
+ if(LOGX==1) GLg[1]<- log(G[1], base=10)
+ if(LOGY==1) GLg[2]<- log(G[2], base=10)
+ Tmp<-c(SCALEX*GLg[1],SCALEY*GLg[2])
+ return(Tmp)
+ }
+ else
+ {
+ if(LOGX==1) GLg[,1]<- log(G[,1],base=10)
+ if(LOGY==1) GLg[,2]<- log(G[,2],base=10)
+ Tmp1<-matrix(c(SCALEX,0,0,SCALEY),nrow=2)
+ Tmp<-GLg %*% Tmp1
+ return(Tmp)
+ }
+}
+
+########################################
+
+Dotfilldata<- function(...)
+{ ## Scaling is implemented
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ ShaL<- list()
+ Eps<- 0.01
+ Kakudo<- 45
+ Kosa<- 0.5
+ Tmp<- Doscaling(c(XMIN,YMIN))
+ Xmn<- Tmp[1]; Ymn<- Tmp[2]
+ Tmp<- Doscaling(c(XMAX,YMAX))
+ Xmx<- Tmp[1]; Ymx<- Tmp[2]
+ for (N in seq(Nargs,1,by=-1)){
+ Tmp<- varargin[[N]]
+ if(Mixtype(Tmp)!=1){
+ break
+ }
+ }
+ if(N<Nargs){
+ Kosa<- varargin[[N+1]]
+ }
+# Kosa<- min(Kosa,1)
+ Tmp<- 1/(2*Kosa)
+ Kankaku<- Tmp*0.100*1000/2.54/MilliIn
+ NaitenL<- varargin[[1]]
+ if(Mixtype(NaitenL)==1){
+ NaitenL<- list(NaitenL)
+ }
+ Ns<- 2
+ StartP<- Op(1,NaitenL)
+ if(mode(StartP)=="character"){
+ StartP<- c((Xmn+Xmx)/2,(Ymn+Ymx)/2)
+ }
+ else{
+ StartP<- Doscaling(StartP)
+ }
+ Tmp<- varargin[[2]]
+ if(Mixtype(Tmp)==1){
+ StartP<- Doscaling(Tmp)
+ Ns<- 3
+ }
+ Tmp<- list()
+ for (I in Looprange(Ns,N)){
+ Tmp<- Mixjoin(Tmp,list(varargin[[I]]))
+ }
+ Bdy<- Kyoukai(Tmp)
+ Bdys<-list()
+ for (I in 1:length(Bdy)){
+ Tmp1<- Bdy[[I]]
+ Tmp2<- Doscaling(Tmp1)
+ Bdys<- Mixjoin(Bdys,list(Tmp2))
+ }
+ Bdy<- Bdys
+ PtnL<- list()
+ for (I in Looprange(1,length(NaitenL))){
+ Tmp<- Op(I,NaitenL)
+ if(mode(Tmp)=="numeric"){
+ Tmp1<- Naigai(Tmp,Bdy)
+ PtnL<- Mixjoin(PtnL,list(Tmp1))
+ }
+ else{
+ if(mode(Tmp)!="character"){
+ return("Mode Error")
+ }
+ Ptn<- c()
+ for (J in Looprange(1,nchar(Tmp))){
+ if(substr(Tmp,J,J)=="i"){
+ Ptn<- c(Ptn,1)
+ }
+ else{
+ Ptn<- c(Ptn,0)
+ }
+ }
+ PtnL<- Mixjoin(PtnL,list(Ptn))
+ }
+ }
+ Call<- length(Bdy)
+ Ptn<- c(seq(0, 0, length=Call))
+ if(Member(Ptn,PtnL)){
+ Wn<- Doscaling(Framedata())
+ Bdy<- Mixjoin(Bdy,list(Wn))
+ Tmp<- list()
+ for (I in Looprange(1,length(PtnL))){
+ Tmp1<- c(Op(I,PtnL),1)
+ Tmp<- Mixjoin(Tmp,list(Tmp1))
+ }
+ PtnL<- Tmp
+ }
+ V<- c(cos(Kakudo*pi/180),sin(Kakudo*pi/180))
+ Vm<- c(-sin(Kakudo*pi/180),cos(Kakudo*pi/180))
+ Tmp<- Op(1,NaitenL)
+ if(mode(Tmp)=="numeric" && length(Tmp)==2){
+ Tmp<- Doscaling(Tmp)
+ Delta<- Tmp-StartP
+ K<- trunc(Dotprod(Delta,Vm)/Kankaku)
+ PA<- StartP+K*Kankaku*Vm
+ P<- PA
+ Sha<- Makeshasen(PtnL,P,V,Bdy)
+ Sha<- Dividegraphics(Sha)
+ I<- 1
+ while (length(Sha)>0){
+ for (J in Looprange(1,length(Sha))){
+ Tmp<- Op(J,Sha)
+ Q<- Tmp[1,]
+ R<- Tmp[2,]
+ Tmp<- Dotprod(Q-P,V)/Kankaku
+ K1<- ceiling(Tmp)
+ if(abs(K1-Tmp)<Eps) K1=K1+1
+ Tmp<- Dotprod(R-P,V)/Kankaku
+ K2<- floor(Tmp)
+ if(abs(Tmp-K2)<Eps) K2=K2-1
+ for (K in Looprange(K1,K2)){
+ Tmp1<- Pointdata(P+K*Kankaku*V)
+ ShaL<- Mixjoin(ShaL, list(Tmp1))
+ }
+ }
+ P<- PA+I*Kankaku*Vm
+ Sha<- Makeshasen(PtnL,P,V,Bdy)
+ Sha<- Dividegraphics(Sha)
+ I<- I+1
+ }
+ P<- PA-Kankaku*Vm
+ Sha<- Makeshasen(PtnL,P,V,Bdy)
+ I<- 2
+ while (length(Sha)>0){
+ for (J in 1:length(Sha)){
+ Tmp<- Op(J,Sha)
+ Q<- Tmp[1,]
+ R<- Tmp[2,]
+ Tmp<- Dotprod(Q-P,V)/Kankaku
+ K1<- ceiling(Tmp)
+ if(abs(K1-Tmp)<Eps) K1<- K1+1
+ Tmp<- Dotprod(R-P,V)/Kankaku
+ K2<- floor(Tmp)
+ if(abs(Tmp-K2)<Eps) K2<- K2-1
+ for (K in Looprange(K1,K2)){
+ Tmp1<- Pointdata(P+K*Kankaku*V)
+ ShaL<- Mixjoin(ShaL, list(Tmp1))
+ }
+ }
+ P<- PA-I*Kankaku*Vm
+ Sha<- Makeshasen(PtnL,P,V,Bdy)
+ I<- I+1
+ }
+ }
+ else{
+ Delta<- c(Xmn,Ymn)-StartP
+ K1<- trunc(Dotprod(Delta,Vm)/Kankaku)
+ Delta<- c(Xmx,Ymn)-StartP
+ K2<- trunc(Dotprod(Delta,Vm)/Kankaku)
+ Delta<- c(Xmx,Ymx)-StartP
+ K3<- trunc(Dotprod(Delta,Vm)/Kankaku)
+ Delta<- c(Xmn,Ymx)-StartP
+ K4<- trunc(Dotprod(Delta,Vm)/Kankaku)
+ IM<- max(K1,K2,K3,K4)
+ Im<- min(K1,K2,K3,K4)
+ for (I in Im:IM){
+ P<- StartP+I*Kankaku*Vm
+ Sha<- Makeshasen(PtnL,P,V,Bdy)
+ Sha<- Dividegraphics(Sha)
+ if(length(Sha)>0){
+ for (J in 1:length(Sha)){
+ Tmp<- Op(J,Sha)
+ Q<- Tmp[1,]
+ R<- Tmp[2,]
+ Tmp<- Dotprod(Q-P,V)/Kankaku
+ K1<- ceiling(Tmp)
+ if(abs(K1-Tmp)<Eps) K1=K1+1
+ Tmp<- Dotprod(R-P,V)/Kankaku
+ K2<- floor(Tmp)
+ if(abs(Tmp-K2)<Eps) K2=K2-1
+ for (K in Looprange(K1,K2)){
+ Tmp1<- Pointdata(P+K*Kankaku*V)
+ ShaL<- Mixjoin(ShaL, list(Tmp1))
+ }
+ }
+ }
+ }
+ }
+ ShaLs<-list()
+ for (I in Looprange(1,length(ShaL)))
+ {
+ Tmp<- ShaL[[I]]
+ Tmp1<- Unscaling(Tmp)
+ ShaLs<- Mixjoin(ShaLs,Tmp1)
+ }
+ ShaL<- ShaLs
+ return(ShaL)
+}
+
+#############################################
+
+Dottedline<- function(...)
+{
+ varargin <- list(...)
+ Nall <- length(varargin)
+ Nagasa <- 0.1
+ Ookisa <- PenThick
+ I <- Nall
+ Tmp <- varargin[[I]]
+ while (mode(Tmp)=="numeric" && length(Tmp)==1 ) {
+ I <- I-1
+ Tmp <- varargin[[I]]
+ }
+ if(I==Nall-1) {
+ Nagasa<-Nagasa*varargin[[Nall]]
+ Nall <- Nall-1
+ }
+ if(I==Nall-2) {
+ Nagasa <- Nagasa*varargin[[Nall-1]]
+ Ookisa <- round(Ookisa*varargin[[Nall]])
+ Nall <- Nall-2
+ }
+ Nagasa <- 1000/2.54/MilliIn*Nagasa
+ for (N in 1:Nall) {
+ Pdata <- varargin[[N]]
+ if(mode(Pdata)=="numeric") {
+ Pdata <- list(Pdata)
+ }
+ for (II in 1:length(Pdata)) {
+ Clist <- MakeCurves(Op(II,Pdata))
+ DinM <- Dataindex(Clist)
+ for (n in Looprange(1,Nrow(DinM))) {
+ Tmp <- DinM[n,]
+ Data <- Clist[Tmp[1]:Tmp[2],]
+ Len <- 0
+ Lenlist <- c(0)
+ for (I in Looprange(2,Nrow(Data))) {
+ Len <- Len+Norm(Data[I,]-Data[I-1,])
+ Lenlist <- c(Lenlist,Len)
+ }
+ Lenall <- Lenlist[length(Lenlist)]
+ if(Lenall==0) {
+ next
+ }
+ Naga <- Nagasa
+ Nten <- round(Lenall/Naga)+1
+ if(Nten > 1) {
+ Seg <- Lenall/(Nten-1)
+ }
+ else {
+ Seg <- Lenall
+ }
+ Eps <- 10^(-6)*Seg
+ PPd<-c()
+ Hajime <- 1
+ for (I in Looprange(0,Nten-1)) {
+ Len <- Seg*I
+ if(I>0) {
+ J <- Hajime
+ while( Len>=Lenlist[J]+Eps) {
+ J <- J+1
+ }
+ Hajime <- J-1
+ }
+ T <- (Len-Lenlist[Hajime])/
+ (Lenlist[Hajime+1]-Lenlist[Hajime])
+ P <- Data[Hajime,]+T*(Data[Hajime+1,]-Data[Hajime,])
+ PPd<-Appendrow(PPd,P)
+ if(I==Nten-1) {
+ if(Norm(P-Data[1,])<Eps) {
+ next
+ }
+ }
+ }
+ Str<-paste("\\special{pn ", as.character(Ookisa),"}%\n",sep="")
+ cat(Str,file=Wfile,append=TRUE)
+ for (I in Looprange(1,Nrow(PPd))){
+ P<- Op(I,PPd)
+ if(Nrow(PPd)==1){
+ V<- c(1,0)
+ }
+ else if(I==1){
+ Tmp<- Op(I+1,PPd)-P
+ V<- 1/Norm(Tmp)*Tmp
+ }
+ else if(I==Nrow(PPd)){
+ Tmp<- P-Op(I-1,PPd)
+ V<- 1/Norm(Tmp)*Tmp
+ }
+ else{
+ Tmp1<- Op(I+1,PPd)-P
+ Tmp2<- P-Op(I-1,PPd)
+ Tmp3<-1/Norm(Tmp1)*Tmp1+1/Norm(Tmp2)*Tmp2
+ V<- 1/Norm(Tmp3)*Tmp3
+ }
+ Tmp<- round(MilliIn*P[1]-1/2*Ookisa*V[1])
+ X<- as.character(Tmp)
+ Tmp<- -round(MilliIn*P[2]-1/2*Ookisa*V[2])
+ Y<- as.character(Tmp)
+ Str<-paste("\\special{pa ",X," ",Y,"}",sep="")
+ cat(Str,file=Wfile,append=TRUE)
+ Tmp<- round(MilliIn*P[1]+1/2*Ookisa*V[1])
+ X<- as.character(Tmp)
+ Tmp<- -round(MilliIn*P[2]+1/2*Ookisa*V[2])
+ Y<- as.character(Tmp)
+ Str<-paste("\\special{pa ",X," ",Y,"}",sep="")
+ cat(Str,file=Wfile,append=TRUE)
+ cat("\\special{fp}",file=Wfile,append=TRUE)
+ if(I%%2==0){
+ cat("%\n",file=Wfile,append=TRUE)
+ }
+ }
+ }
+ }
+ }
+ Tmp<-PenThick/PenThickInit
+ Setpen(Tmp);
+}
+
+###########################################
+
+Drwline<-function(...)
+{
+ varargin<-list(...)
+ Nall<-length(varargin)
+ Thick<-0
+ Tmp<-varargin[[Nall]]
+ if(mode(Tmp)=="numeric" && length(Tmp)==1){
+ Thick<-round(Tmp*PenThickInit)
+ Str<-paste("\\special{pn ", as.character(Thick),"}%\n",sep="")
+ cat(Str,file=Wfile,append=TRUE)
+ Nall<-Nall-1
+ }
+ for (N in 1:Nall){
+ Pdata<-varargin[[N]]
+ if(length(Pdata)==0) next
+ if(mode(Pdata)!="list") Pdata<-list(Pdata)
+ while(Mixtype(Pdata)==3){ # 10.07.25
+ Tmp1<- list()
+ for(II in Looprange(1,length(Pdata))){
+ Tmp1<- Mixjoin(Tmp1,Pdata[[II]])
+ }
+ Pdata<- Tmp1
+ } # 10.07.25
+ for (II in Looprange(1,length(Pdata))){
+ Clist<-MakeCurves(Pdata[[II]])
+ DinM<-Dataindex(Clist)
+ for (n in Looprange(1,Nrow(DinM))){
+ Tmp<-DinM[n,]
+ Data<-Clist[Tmp[1]:Tmp[2],]
+ Mojisu<-0
+ for (I in Looprange(1,Nrow(Data))){
+ Tmp<-Data[I,]
+ X<- sprintf("%5.0f",MilliIn*Tmp[1]) # 11.07.19
+ Y<- sprintf("%5.0f",-MilliIn*Tmp[2]) # 11.07.19
+ Str<-paste("\\special{pa ",X," ",Y,"}",sep="")
+ cat(Str,file=Wfile,append=TRUE)
+ Mojisu<-Mojisu+nchar(Str)
+ if(Mojisu>80){
+ cat("%\n",file=Wfile,append=TRUE)
+ Mojisu<-0
+ }
+ }
+ if(Mojisu!=0){
+ cat("%\n",file=Wfile,append=TRUE)
+ }
+ cat("\\special{fp}%\n",file=Wfile,append=TRUE)
+ }
+ }
+ }
+ Str<-"%"
+ if(Thick>0){
+ Tmp<-PenThick/PenThickInit
+ Setpen(Tmp)
+ }
+}
+
+###########################################
+
+Drwpt<-function(...){
+ varargin<-list(...)
+ Nargs<-length(varargin)
+ if(TenSize>TenSizeInit){
+ N=round(10*sqrt(TenSize/TenSizeInit)) #181231
+ }
+ else{
+ if(TenSize==TenSizeInit){ #181231from
+ N=10
+ }else{
+ N=4
+ } #181231to
+ }
+ All=Nargs #181230from
+ Same="y"
+ Incolor=""
+ Tmp=varargin[[All]]
+ if((is.numeric(Tmp))&&(length(Tmp)>2)){ #190405from
+ if(Tmp[1]==-1){
+ Same="no"
+ }else{
+ Tmp1=sapply(Tmp,as.character)
+ Incolor=paste("{",Tmp1[1],",",Tmp1[2],",",Tmp1[3],"}",sep="")
+ Same="n"
+ }
+ All=All-1
+ }#190405to
+ CL<- c()
+ for (J in 0:N){
+ Tmp<- TenSize*0.5*1000/2.54/MilliIn
+ Tmp<- Tmp*c(cos(pi/4+J*2*pi/N),sin(pi/4+J*2*pi/N))
+ CL<- append(CL,Tmp)
+ }
+ CL<- matrix(CL,nrow=2)
+ CL<- t(CL)
+ for (II in Looprange(1,All)){
+ MS<- varargin[[II]]
+ MS=Flattenlist(MS) #17.10.11
+ if(mode(MS)=="numeric"){
+ MS<- list(MS)
+ }
+ for (I in Looprange(1,length(MS))){
+ P<- MS[[I]]
+ if(InWindow(P)!="i") next
+ P<- Doscaling(P)
+ PL<-c()
+ for (J in 0:N){
+ PL<- c(PL,P+CL[J+1,])
+ }
+ PL<- matrix(PL,nrow=2)
+ PL<- t(PL)
+ if(Same!="no"){ #190405
+ if(Same=="n"){ #190405
+ Str1<- paste("{\\special{pn 0}\\color[rgb]",Incolor,"%\n",sep="")
+ cat(Str1,file=Wfile,append=TRUE)
+ }
+ Mojisu<-0
+ for (J in 1:Nrow(PL)){
+ Q<- PL[J,]
+ X<- as.character(round(MilliIn*Q[1]))
+ Y<- as.character(-round(MilliIn*Q[2]))
+ Str<- paste("\\special{pa ",X," ",Y,"}",sep="")
+ cat(Str,file=Wfile,append=TRUE)
+ Mojisu<- Mojisu+nchar(Str)
+ if(Mojisu>80){
+ cat("#\n",file=Wfile,append=TRUE)
+ }
+ Mojisu=0
+ }
+ Str1<- "\\special{sh}\\special{fp}" #190405from
+ if(Same=="n"){
+ Str1<- paste(Str1,"}",sep="")
+ }
+ Str1<- paste(Str1,"%\n",sep="") #190405to
+ cat(Str1,file=Wfile,append=TRUE)
+ }
+ cat("\\special{pn 4}",file=Wfile,append=TRUE) #181231
+ Mojisu=0
+ for (J in 1:Nrow(PL)){
+ Q<- PL[J,]
+ X<- as.character(round(MilliIn*Q[1]))
+ Y<- as.character(-round(MilliIn*Q[2]))
+ Str<- paste("\\special{pa ",X," ",Y,"}",sep="")
+ cat(Str,file=Wfile,append=TRUE)
+ Mojisu<- Mojisu+nchar(Str)
+ if(Mojisu>80){
+ cat("#\n",file=Wfile,append=TRUE)
+ }
+ Mojisu=0
+ }
+ if(Same=="y"){
+ Str1<- paste("\\special{sh",Incolor,"}\\special{fp}%\n",sep="")
+ }else{
+ Str1<- paste("\\special{fp}%\n",sep="")
+ }
+ cat(Str1,file=Wfile,append=TRUE) #181230to
+ }
+ }
+}
+
+######################################################
+
+Drwxy<-function(...){ #180820
+ varargin<-list(...)
+ Nargs <- length(varargin)
+ Origin=GENTEN
+ Origins=Doscaling(Origin) #181016
+ Xrng=c(XMIN,XMAX)
+ Yrng=c(YMIN,YMAX)
+ Tmp1=Doscaling(c(XMIN,YMIN)) #181017from
+ Tmp2=Doscaling(c(XMAX,YMAX))
+ Xrngs=c(Tmp1[1],Tmp2[1])
+ Yrngs=c(Tmp1[2],Tmp2[2]) #181017from
+ Ziku=ZIKU #180821from
+ Xname=XNAME
+ Xpos=XPOS
+ Yname=YNAME
+ Ypois=YPOS
+ Oname=ONAME
+ Opos=OPOS #180821to
+ for(J in Looprange(1,Nargs)){
+ Tmp=strsplit(varargin[[J]],"=")
+ Tmp=Tmp[[1]]
+ Tmp1=toupper(substring(Tmp[1],1,1))
+ Tmp2=Tmp[2]
+ if(Tmp1=="O"){
+ Origin=eval(parse(text=Tmp2))
+ }
+ if(Tmp1=="X"){
+ Xrng=eval(parse(text=Tmp2))
+ }
+ if(Tmp1=="Y"){
+ Yrng=eval(parse(text=Tmp2))
+ }
+ if(Tmp1=="A"){ #180821from
+ if(substring(Tmp2,1,1)=="c"){
+ Tmp2=substring(Tmp2,3,nchar(Tmp2)-1)
+ }
+ Tmp2=gsub(",","','",Tmp2,fixed=TRUE)
+ Tmp2=paste("'",Tmp2,"'",sep="")
+ Tmp=paste("Setax(",Tmp2,")",sep="")
+ eval(parse(text=Tmp)) #180821to
+ }
+ }
+ Xrng=Xrng+Origin[1]
+ Yrng=Yrng+Origin[2]
+ Xrngs=Xrngs+Origins[1] #181016(2lines)
+ Yrngs=Yrngs+Origins[2]
+ Tmp<- substring(ZIKU,1,1) #180821
+ if(Tmp=="a")
+ {
+ Tmp=substring(ZIKU,2,nchar(ZIKU))
+ if(nchar(Tmp)==0){Tmp=1}else{Tmp=eval(parse(text=Tmp))}
+ Arrowline(c(Xrngs[1],Origins[2]),c(Xrngs[2],Origins[2]),Tmp)#181016(2lines)
+ Arrowline(c(Origins[1],Yrngs[1]),c(Origins[1],Yrngs[2]),Tmp)
+ }
+ else
+ {
+ Drwline(Listplot(c(Xrngs[1],Origins[2]),c(Xrngs[2],Origins[2])))#181016(2lines)
+ Drwline(Listplot(c(Origins[1],Yrngs[1]),c(Origins[1],Yrngs[2])))
+ }
+ Letter(c(Xrng[2],Origin[2]),XPOS,XNAME)
+ Letter(c(Origin[1],Yrng[2]),YPOS,YNAME)
+ Letter(Origin,OPOS,ONAME)
+ Setax(Ziku,Xname,Xpos,Yname,Ypois,Oname,Opos) #180821
+}
+
+##########################################
+# 10.12.04
+
+Enclosing<- function(...)
+{
+ Eps=10^(-7) # Scilab 16.12.05
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ P<- varargin[[1]]
+ if(Mixtype(P)==2){
+ Tmp<- Op(1,P)
+ if(mode(Tmp)!="numeric" || length(Tmp)>1){
+ AnsL<- EnclosingS(...)
+ AnsL<- Joincrvs(AnsL) # 10.12.04
+ }
+ }
+ Tmp1=Op(1,AnsL) # Scilab 16.12.05from
+ Tmp2=Op(nrow(AnsL),AnsL)
+ if(Norm(Tmp2-Tmp1)>Eps){
+ AnsL=Appendrow(AnsL,Tmp1)
+ }
+ return(AnsL)
+}
+
+#########################################
+
+EnclosingS<- function(...)
+{
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ AnsL<- list()
+ PdataL<- varargin[[1]]
+ Nall<-length(PdataL)
+ Eps<- 10^(-3)
+ EEps<- 0.1
+ S<- c()
+ Flg<- 0
+ for (I in Looprange(2,Nargs)){
+ Tmp<- varargin[[I]]
+ if(mode(Tmp)=="numeric" && Nrow(Tmp)==1 && length(Tmp)>1){
+ S<- Tmp
+ }
+ if(mode(Tmp)=="numeric" && length(Tmp)==1){
+ if(Flg==0){
+ Eps<- Tmp
+ Flg=Flg+1
+ }
+ else{
+ EEps<- Tmp
+ }
+ }
+ }
+ F<- Op(1,PdataL); G<- Op(Nall,PdataL)
+ KL<- IntersectcrvsPp(F,G)
+ if(length(KL)==1){
+ Tmp<- Op(1,KL)
+ P<- Op(1,Tmp)
+ T1<- Op(2,Tmp)
+ }
+ if(length(KL)==0){
+ if(Numptcrv(F)>Numptcrv(G)){
+ Tmp<- Nearestpt(F,G)
+ P<- Op(1,Tmp)
+ T1=Op(2,Tmp)
+ }
+ else{
+ Tmp<- Nearestpt(G,F)
+ P<- Op(3,Tmp)
+ T1<- Op(4,Tmp)
+ }
+ }
+ if(length(KL)>=2){
+ if(length(S)==0){
+ return("No Start Point")
+ }
+ Tmp<- Op(1,KL)
+ P<- Op(1,Tmp)
+ T1<- Op(2,Tmp)
+ Tmp<- Norm(P-S)
+ for (I in Looprange(2,length(KL))){
+ Tmp1<- Op(1,Op(I,KL))
+ Tmp2<- Norm(Tmp1-S)
+ if(Tmp2<Tmp){
+ P<- Tmp1
+ T1<- Op(2,Op(I,KL))
+ Tmp<- Tmp2
+ }
+ }
+ }
+ S<- P
+ AnsL<- list()
+ for (N in Looprange(1,Nall)){
+ F<- Op(N,PdataL)
+ if(N>1) P<- Q
+ if(N==Nall){
+ Q=S
+ }
+ else{
+ Flg<- 0
+ G<- Op(N+1,PdataL)
+ KL<- IntersectcrvsPp(G,F)
+ if(length(KL)==1){
+ Tmp<- Op(1,KL)
+ Q<- Op(1,Tmp)
+ T3<- Op(2,Tmp)
+ Flg<- 10
+ }
+ if(length(KL)==0) Flg<- 1
+ if(length(KL)>=2){ # Maple bug?
+ Tmp1<- Op(1,Op(1,KL))
+ Tmp2<- Op(1,Op(2,KL))
+ Tmp<- Norm(Tmp1-Tmp2)
+ if(Tmp<Eps*10) Flg<- 1
+ }
+ if(Flg==1){
+ if(Numptcrv(F)>Numptcrv(G)){
+ Tmp<- Nearestpt(F,G)
+ Q<- Op(1,Tmp)
+ T3<- Op(4,Tmp)
+ Flg<- 10
+ }
+ else{
+ Tmp<- Nearestpt(G,F)
+ Q<- Op(3,Tmp)
+ T3<- Op(2,Tmp)
+ Flg<- 10
+ }
+ }
+ if(Flg<10){
+ T2<- Inf
+ for (I in Looprange(1,length(KL))){
+ Dt<- Op(I,KL)
+ Tmp1<- Op(1,Dt)
+ Tmp<- Op(3,Dt)
+ Tmp2<- Paramoncurve(Tmp1,Tmp,F)
+ Tmp3<- Op(2,Dt)
+ if(Tmp2>T1+Eps && Tmp2<T2-Eps){
+ Q<- Tmp1
+ T2<- Tmp2
+ T3<- Tmp3
+ }
+ }
+ }
+ }
+ Tmp<- Partcrv(P,Q,F)
+ T1<- T3
+ AnsL<- Mixjoin(AnsL,list(Tmp))
+ }
+ return(AnsL)
+}
+
+########################################
+
+Endpicture<-function(...)
+{
+ varargin<-list(...)
+ Nargs<-length(varargin)
+ if(Nargs==0)
+ {
+ Drwxy()
+ }
+ else
+ {
+ if(varargin[[1]]==1) Drwxy()
+ }
+ cat("\\end{picture}}%",file=Wfile,append=TRUE)
+# MEMORI<<-MEMORINow*1000/2.54/MilliIn
+ Setunitlen("1cm")
+}
+
+#########################################
+
+Execmd<- function(StrL)
+{
+ if(mode(StrL)=="character" && length(StrL)==1){
+ StrL<- list(StrL)
+ }
+ for (I in Looprange(1,length(StrL))){
+ if(!is.na(Op(I,StrL)) && nchar(Op(I,StrL))>0){
+ eval(parse(text=Op(I,StrL)))
+ }
+ }
+}
+
+#########################################
+
+Expr<-function(...)
+{ ## Scaling is implemented
+ varargin<-list(...)
+ Nargs<-length(varargin)
+ Irng<-c(seq(from=1,to=Nargs,by=3))
+ for (I in Irng)
+ {
+ Tmp<-varargin[[I]]
+ P<- Doscaling(Tmp)
+ X<-P[1]
+ Y<-P[2]
+ Houkou<-varargin[[I+1]]
+ Mojiretu<-paste("$",varargin[[I+2]],"$",sep="")
+ Hset<-Houkou
+ Vhoko<-"c"
+ if(length(grep("n",Hset))>0)
+ {
+ Vhoko<-"n"; Y<-Y+MEMORI
+ }
+ if(length(grep("s",Hset))>0)
+ {
+ Vhoko<-"s"; Y<-Y-MEMORI
+ }
+ Hhoko<-"c"
+ if(length(grep("e",Hset))>0)
+ {
+ Hhoko<-"e"; X<-X+MEMORI
+ }
+ if(length(grep("w",Hset))>0)
+ {
+ Hhoko<-"w"; X<-X-MEMORI
+ }
+ Hoko<-paste(Vhoko,Hhoko,sep="")
+ Suu<-"+-.0123456789"
+ SuuL<-Suu
+ J<-1; Dstr<-""
+ while (J<=nchar(Houkou))
+ {
+ Tmp<-substring(Houkou,J,J)
+ if(length(grep(Tmp,Suu))>0)
+ {
+ if(Dstr=="") Hk<-substring(Houkou,J-1,J-1)
+ Dstr<-paste(Dstr,Tmp,sep="")
+ }
+ else
+ {
+ if(Dstr!="")
+ {
+ Nmbr<-as.numeric(Dstr)
+ D<-Nmbr*MEMORI
+ if(Hk=="n") Y<-Y+D
+ if(Hk=="s") Y<-Y-D
+ if(Hk=="e") X<-X+D
+ if(Hk=="w") X<-X-D
+ Dstr<-""
+ }
+ }
+ J<-J+1
+ }
+ if(Dstr!="")
+ {
+ Nmbr<-as.numeric(Dstr)
+ D<-Nmbr*MEMORI;
+ if(Hk=="n") Y<-Y+D
+ if(Hk=="s") Y<-Y-D
+ if(Hk=="e") X<-X+D
+ if(Hk=="w") X<-X-D
+ }
+ CalcWidth(Hoko,Mojiretu)
+ CalcHeight(Hoko,Mojiretu)
+ cat("\\put(",file=Wfile,append=TRUE)
+ Tmp1<- sprintf("%7.7f",X) # 11.07.19
+ Tmp2<- sprintf("%7.7f",Y) # 11.07.19
+ Str<-paste(Tmp1,",",Tmp2,sep="")
+ cat(Str,file=Wfile,append=TRUE)
+ Tmp<-"){\\hspace*{\\Width}"
+ Str<-paste(Tmp,"\\raisebox{\\Height}{",Mojiretu,"}}%\n",sep="")
+ cat(Str,file=Wfile,append=TRUE)
+ cat("%\n",file=Wfile,append=TRUE)
+ }
+}
+
+##########################################
+
+Exprrot<- function(...)
+{
+ varargin<- list(...)
+ P<- varargin[[1]]
+ V<- varargin[[2]]; N<- 3
+ P<- Doscaling(P)
+ V<- Doscaling(V)
+ Tmov<- 0
+ Tmp<- varargin[[N]]
+ if(mode(Tmp)=="numeric"){
+ Tmov<- Tmp; N<- N+1
+ }
+ Nmov<- 0
+ Tmp<- varargin[[N]]
+ if(mode(Tmp)=="numeric"){
+ Nmov<- Tmp; N<- N+1
+ }
+ Mojiretu<- paste("$",Assign(varargin[[N]]),"$",sep="") # 2017.11.26
+ Tv<- 1/Norm(V)*V
+ Nv<- c(-Tv[2],Tv[1])
+ P<- P+MEMORI*Tmov*Tv+MEMORI*Nmov*Nv
+ Tmp<- acos(V[1]/Norm(V))
+ Theta<- round(Tmp*180/pi)
+ if(V[2]>=0){
+ Units<- ""
+ }
+ else{
+ Units<- "units=-360,"
+ }
+ Tmp<- paste("\\rotatebox[",Units,"origin=c]{",as.character(Theta),sep="")
+ Tmp<- paste(Tmp,"}{",Mojiretu,"}",sep="")
+ Letter(P,"c",Tmp)
+}
+
+######################################################
+
+Findcell<- function(...)
+{
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ TbL<- varargin[[1]]
+ Ag<- varargin[[2]]
+ Alpha<- "-ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+ if(mode(Ag)=="character"){
+ Clm<- c()
+ Rstr<- ""
+ for (I in Looprange(1,nchar(Ag))){
+ C<- substr(Ag,I,I)
+ C<- toupper(C)
+ Tmp<- strsplit(Alpha,C)
+ Tmp<- Tmp[[1]]
+ if(length(Tmp)>1){
+ Tmp1<- nchar(Tmp[1])
+ Clm<- c(Clm,Tmp1)
+ }
+ else{
+ Rstr<- paste(Rstr,C,sep="")
+ }
+ }
+ Nrg<- 0
+ for (I in seq(length(Clm),1,by=-1)){
+ Tmp<- Clm[I]
+ Tmp1<- length(Clm)-I
+ Nrg<- Nrg+Tmp*26^Tmp1
+ }
+ Mrg<- eval(parse(text=Rstr))
+ if(Nargs>=3){
+ Ag<- varargin[[3]]
+ Clm<- c()
+ Rstr<- ""
+ for (I in Looprange(1,nchar(Ag))){
+ C<- substr(Ag,1,1)
+ C<- toupper(C)
+ Tmp<- strsplit(Alpha,C)
+ if(length(Tmp)>1){
+ Clm<- c(Clm,Tmp+1)
+ }
+ else{
+ Rstr<- paste(Rstr,C,sep="")
+ }
+ }
+ Nrg2<- 0
+ for (I in seq(length(Clm),1,by=-1)){
+ Tmp<- Clm[I]
+ Tmp1<- length[Clm]-I
+ Nrg2<- Nrg2+Tmp*26^Tmp1
+ }
+ Nrg<- c(Nrg,Nrg2)
+ Tmp=eval(parse(text=Rstr))
+ Mrg<- c(Mrg,Tmp)
+ }
+ }
+ else{
+ Nrg<- varargin[[2]]
+ Mrg<- varargin[[3]]
+ }
+ if(length(Mrg)==1){
+ m1<- Mrg; m2<- m1+1
+ }
+ else{
+ m1<- Mrg[1]; m2<- Mrg[2] # 10.12.12
+ }
+ if(length(Nrg)==1){
+ n1<- Nrg; n2<- n1+1
+ }
+ else{
+ n1<- Nrg[1]; n2<- Nrg[2]
+ }
+ n1<- n1+1; n2<- n2+1
+ m1<- m1+1; m2<- m2+1
+ Hind<- TbL[[2]]
+ Vind<- TbL[[3]]
+ Tmp<- TbL[[1]]
+ HL<- Tmp[Hind]
+ Tmp1<- Op(1,TbL[[4]])
+ Tmp2<- Op(2,TbL[[4]])
+ HL<- Mixjoin(list(Tmp1),HL,list(Tmp2))
+ VL<- Tmp[Vind]
+ Tmp1<- Op(1,TbL[[5]])
+ Tmp2<- Op(2,TbL[[5]])
+ VL<- Mixjoin(list(Tmp1),VL,list(Tmp2))
+ Tmp<- TbL[[6]]
+ Tmp1<- Listplot(c(Ptsw(Tmp),Ptnw(Tmp)))
+ Tmp2<- Listplot(c(Ptse(Tmp),Ptne(Tmp)))
+ HL<- Mixjoin(list(Tmp1),HL,list(Tmp2))
+ Tmp1<- Listplot(c(Ptnw(Tmp),Ptne(Tmp)))
+ Tmp2<- Listplot(c(Ptsw(Tmp),Ptse(Tmp)))
+ VL<- Mixjoin(list(Tmp1),VL,list(Tmp2))
+ Tmp<- HL[[n1]]
+ if(mode(Tmp)=="numeric"){
+ H1<- Tmp[1,1]
+ }
+ else{
+ Tmp1<- Tmp[[1]]
+ H1<- Tmp1[1,1]
+ }
+ Tmp<- HL[[n2]]
+ if(mode(Tmp)=="numeric"){
+ H2<- Tmp[1,1]
+ }
+ else{
+ Tmp1<- Tmp[[1]]
+ H2<- Tmp1[1,1]
+ }
+ Tmp<- VL[[m1]]
+ if(mode(Tmp)=="numeric"){
+ V1<- Tmp[1,2]
+ }
+ else{
+ Tmp1<- Tmp[[1]]
+ V1<- Tmp1[1,2]
+ }
+ Tmp<- VL[[m2]]
+ if(mode(Tmp)=="numeric"){
+ V2<- Tmp[1,2]
+ }
+ else{
+ Tmp1<- Tmp[[1]]
+ V2<- Tmp1[1,2]
+ }
+ Pt<- c((H1+H2)/2,(V1+V2)/2)
+ High<- (V1-V2)/2
+ Wide<- (H2-H1)/2
+ Out<- list(Pt,Wide,High)
+ return(Out)
+}
+
+############################################
+
+Flattenlist<- function(...){
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ Out<- list()
+ for(N in Looprange(1,Nargs)){
+ D<- varargin[[N]]
+ if(is.data.frame(D) || !is.list(D)){ # modify
+ Out<- c(Out,list(D))
+ }
+ else{
+ for(I in Looprange(1,length(D))){
+ Ds<- D[[I]]
+ Tmp<- Flattenlist(Ds)
+ Out<- c(Out,Tmp)
+ }
+ }
+ }
+ return(Out)
+}
+
+############################################
+
+Fontsize<- function(Ookisa)
+{
+ Str<- "%"
+ S<- substr(Ookisa,1,1)
+ if(S=="n"){
+ Str<- "\\normalsize%"
+ }
+ if(S=="s"){
+ if(nchar(Ookisa)==1){
+ Tmp<- "n"
+ }
+ else{
+ Tmp<- substr(Ookisa,2,2)
+ }
+ if(Tmp=="s"){
+ Str<- "\\scriptsize%"
+ }
+ else{
+ Str<- "\\small%"
+ }
+ }
+ if(S=="f"){
+ Str<- "\\footnotesize%"
+ }
+ if(S=="t"){
+ Str<- "\\tiny%"
+ }
+ if(S=="l"){
+ Str<- "\\large%"
+ }
+ if(S=="L"){
+ if(nchar(Ookisa)==1){
+ Tmp<- "a"
+ }
+ else{
+ Tmp<- substr(Ookisa,2,2)
+ }
+ if(Tmp=="a"){
+ Str<- "\\Large%"
+ }
+ else{
+ Str<- "\\LARGE%"
+ }
+ }
+ if(S=="h"){
+ Str<- "\\huge%"
+ }
+ if(S=="H"){
+ Str<- "\\Huge%"
+ }
+ cat(Str,file=Wfile,append=TRUE)
+ cat("\n",file=Wfile,append=TRUE)
+}
+
+##########################################
+
+Fracform<- function(...)
+{
+ varargin<- list(...)
+ Eps<- 10^(-10)
+ Nmax<- 1/Eps
+ Nargs<- length(varargin)
+ X<- varargin[[1]]
+ Nr<- Nrow(X)
+ X<- as.matrix(X,nrow=Nr)
+ for (I in Looprange(2,Nargs)){
+ Tmp<- varargin[[I]]
+ if(mode(Tmp)!="numeric"){
+ next
+ }
+ if(Tmp>1){
+ Nmax<- Tmp
+ }
+ else if(Tmp>0){
+ Eps<- Tmp
+ }
+ }
+ Tmp<- rep("",length(X))
+ Out<- matrix(Tmp,nrow=nrow(X))
+ for (I in Looprange(1,nrow(X))){
+ for (J in Looprange(1,ncol(X))){
+ Dt<- X[I,J]
+ if(mode(Dt)=="character"){
+ Dt<- eval(parse(text=Dt))
+ }
+ R<- 1
+ N<- 0
+ Rmin<- R
+ Nr<- N
+ while (R>Eps && N<Nmax){
+ N<- N+1
+ M<- round(Dt*N)
+ R<- abs(Dt-M/N)
+ if(R<Rmin){
+ Rmin<- R
+ Nr<- N
+ }
+ }
+ if(N==Nmax){
+ N<- Nr
+ M<- round(Dt*N)
+ }
+ Tmp<- as.character(M)
+ if(N!=1){
+ Tmp<- paste(Tmp,"/",as.character(N),sep="")
+ }
+ Out[I,J]<- Tmp
+ }
+ }
+ if(nrow(Out)==1){
+ Out<- as.character(Out)
+ }
+ return(Out)
+}
+
+##############################################
+# 2011.12.17 ( list )
+
+Framedata<-function(...)
+{
+ varargin<- Flattenlist(list(...))
+ N<-length(varargin)
+ if(N<= 1){
+ H<- 1.0*10^(-4);
+ PA<-c(XMIN+H,YMIN+H)
+ PB<-c(XMAX-H,YMIN+H)
+ PC<-c(XMAX-H,YMAX-H)
+ PD<-c(XMIN+H,YMAX-H)
+ }
+ else{
+ Tmp<-varargin[[N]]
+ if(is.numeric(Tmp) && length(Tmp)==1){
+ Dy<-Tmp; Dx<-Dy
+ Tmp<-varargin[[N-1]]
+ if(is.numeric(Tmp) && length(Tmp)==1){
+ Dx<-Tmp
+ }
+ Tmp<-varargin[[1]]
+ X<-Tmp[1]; Y<-Tmp[2]
+ X1<-X-Dx; X2<-X+Dx; Y1<-Y-Dy; Y2<-Y+Dy
+ }
+ else{
+ Tmp<-varargin[[1]]
+ X1<-Tmp[1]; X2<-Tmp[2]
+ Tmp<-varargin[[2]]
+ Y1<-Tmp[1]; Y2<-Tmp[2]
+ }
+ PA<-c(X1,Y1); PB<-c(X2,Y1)
+ PC<-c(X2,Y2); PD<-c(X1,Y2)
+ }
+ Out<- Listplot(c(PA,PB,PC,PD,PA))
+ return(Out)
+}
+
+###################################
+
+Hatchdata<- function(...)
+{ ## Scaling is implemented
+ varargin<- list(...)
+ ShaL<- list()
+ Nargs<- length(varargin)
+ Kakudo<- 45
+# Kankaku<- 0.125*1000/2.54/MilliIn
+ Kankaku<- 0.25*1000/2.54/MilliIn #180706
+ Tmp<- Doscaling(c(XMIN,YMIN))
+ Xmn<- Tmp[1]; Ymn<- Tmp[2]
+ Tmp<- Doscaling(c(XMAX,YMAX))
+ Xmx<- Tmp[1]; Ymx<- Tmp[2]
+ for (N in seq(Nargs,1, by=-1))
+ {
+ Tmp<- varargin[[N]]
+ if(mode(Tmp)=="list")
+ {
+ break
+ }
+ }
+ if(N<Nargs)
+ {
+ Kakudo<- varargin[[N+1]]
+ if(N==Nargs-2)
+ {
+ Kankaku<- Kankaku*varargin[[Nargs]] #180716
+ }
+ }
+ NaitenL<- varargin[[1]]
+ if(mode(NaitenL)!="list")
+ {
+ NaitenL<- list(NaitenL)
+ }
+ Ns<- 2
+ StartP<- Op(1,NaitenL)
+ if(mode(StartP)=="character")
+ {
+ StartP<- c((Xmn+Xmx)/2, (Ymn+Ymx)/2)
+ }
+ if(mode(varargin[[2]])=="numeric")
+ {
+ StartP<- varargin[[2]]
+ StartP<- Doscaling(StartP)
+ Ns<- 3
+ }
+ Tmp<- list()
+ for ( I in Looprange(Ns,N))
+ {
+ Tmp1<- list(varargin[[I]])
+ Tmp2<- Mixjoin(Tmp, Tmp1)
+ Tmp<- Tmp2
+ }
+ Bdy<- Kyoukai(Tmp)
+ Bdys<-list()
+ for (I in 1:length(Bdy))
+ {
+ Tmp1<- Bdy[[I]]
+ Tmp2<- Doscaling(Tmp1)
+ Bdys<- Mixjoin(Bdys,list(Tmp2))
+ }
+ Bdy<- Bdys
+ PtnL<- list()
+ for (I in Looprange(1,length(NaitenL)))
+ {
+ Tmp<- Op(I, NaitenL)
+ if(mode(Tmp)=="numeric")
+ {
+ Tmp1<- Naigai(Tmp,Bdy)
+ Tmp2<- Mixjoin(PtnL, list(Tmp1))
+ PtnL<- Tmp2
+ }
+ else
+ {
+ if(mode(Tmp)!="character")
+ {
+ return("Mode Error")
+ }
+ Ptn<-c()
+ for (J in 1:nchar(Tmp))
+ {
+ if(Op(J,Tmp)=="i")
+ {
+ Ptn<- c(Ptn,1)
+ }
+ else
+ {
+ Ptn<- c(Ptn,0)
+ }
+ }
+ PtnL<- Mixjoin(PtnL, list(Ptn))
+ }
+ }
+ Call<- length(Bdy)
+ Ptn<- c(seq(0, 0, length=Call))
+ if(Member(Ptn,PtnL))
+ {
+ Wn<- Doscaling(Framedata())
+ Tmp<- Mixjoin(Bdy,list(Wn))
+ Bdy<- Tmp
+ Tmp<- list()
+ for (I in Looprange(1, length(PtnL)))
+ {
+ Tmp1<- c(Op(I,PtnL),1)
+ Tmp2<- Mixjoin(Tmp,list(Tmp1))
+ Tmp<- Tmp2
+ }
+ PtnL<- Tmp
+ }
+ V<- c(cos(Kakudo*pi/180),sin(Kakudo*pi/180))
+ Vm<- c(-sin(Kakudo*pi/180),cos(Kakudo*pi/180))
+ Tmp<- Op(1,NaitenL)
+ if(mode(Tmp)=="numeric" && length(Tmp)==2)
+ {
+ Tmp<- Doscaling(Tmp)
+ Delta<- Tmp-StartP
+ K<- trunc(Dotprod(Delta,Vm)/Kankaku)
+ PA<- StartP+K*Kankaku*Vm
+ Sha<- Makeshasen(PtnL,PA,V,Bdy)
+ I <- 1
+ while (length(Sha)>0)
+ {
+ Tmp<- Mixjoin(ShaL, list(Sha))
+ ShaL <- Tmp
+ Sha<- Makeshasen(PtnL,PA+I*Kankaku*Vm,V,Bdy)
+ I <- I+1
+ }
+ Sha<- Makeshasen(PtnL,PA-Kankaku*Vm,V,Bdy)
+ I<- 2
+ while (length(Sha)>0)
+ {
+ for (J in 1:length(Sha))
+ {
+ Tmp<- Mixjoin(ShaL,list(Sha[[J]]))
+ ShaL<- Tmp
+ }
+ Sha<- Makeshasen(PtnL,PA-I*Kankaku*Vm,V,Bdy)
+ I<- I+1
+ }
+ }
+ else
+ {
+ Delta<- c(Xmn,Ymn)-StartP
+ K1<- trunc(Dotprod(Delta,Vm)/Kankaku)
+ Delta<- c(Xmx,Ymn)-StartP
+ K2<- trunc(Dotprod(Delta,Vm)/Kankaku)
+ Delta<- c(Xmx,Ymx)-StartP
+ K3<- trunc(Dotprod(Delta,Vm)/Kankaku)
+ Delta<- c(Xmn,Ymx)-StartP
+ K4<- trunc(Dotprod(Delta,Vm)/Kankaku)
+ IM<- max(K1,K2,K3,K4)
+ Im<- min(K1,K2,K3,K4)
+ for (I in Im:IM)
+ {
+ Sha<- Makeshasen(PtnL,StartP+I*Kankaku*Vm,V,Bdy)
+ for (J in Looprange(1,length(Sha)))
+ {
+ Tmp<- Mixjoin(ShaL, list(Sha[[J]]))
+ ShaL<- Tmp
+ }
+ }
+ }
+ ShaLs<-list()
+ for (I in Looprange(1,length(ShaL)))
+ {
+ Tmp<- ShaL[[I]]
+ Tmp1<- Unscaling(Tmp)
+ Tmp2<- Mixjoin(ShaLs, list(Tmp1))
+ ShaLs<- Tmp2
+ }
+ ShaL<- ShaLs
+ return(ShaL)
+}
+
+######################################
+
+Htickmark<- function(...)
+{ ## Scaling is implemented
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ ArgsL<- varargin
+ if(mode(ArgsL[[1]])=="character"){
+ Str<- ArgsL[[1]]
+ Tmp<- strsplit(Str,"m")
+ Tmp<- Tmp[[1]]
+ if(length(Tmp)>1){
+ I<- nchar(Tmp[1])+1
+ }
+ else{
+ I<- 0
+ }
+ Tmp<- strsplit(Str,"n")
+ Tmp<- Tmp[[1]]
+ if(length(Tmp)>1){
+ J<- nchar(Tmp[1])+1
+ }
+ else{
+ J<- 0
+ }
+ Tmp<- strsplit(Str,"r")
+ Tmp<- Tmp[[1]]
+ if(length(Tmp)>1){
+ K=nchar(Tmp[1])+1
+ }
+ else{
+ K<- 0
+ }
+ if(K>0){
+ S<- substr(Str,K+1,nchar(Str))
+ R<- as.numeric(S)
+ if(is.na(R)){
+ R<- 1
+ }
+ }
+ else{
+ R<- 1
+ K<- nchar(Str)+1
+ }
+ if(J>0){
+ S<- substr(Str,J+1,K-1)
+ Dn<- as.numeric(S)
+ if(is.na(Dn)){
+ Dn<- 1
+ }
+ }
+ else{
+ Dn<- 1000
+ J<- nchar(Str)+1
+ }
+ S<- substr(Str,I+1,J-1)
+ Dm<- as.numeric(S)
+ if(is.na(Dm)){
+ Dm<- 1
+ }
+ ArgsL<- list()
+ for (I in Looprange(1, floor((XMAX-GENTEN[1])/Dm))){
+ ArgsL<- Mixjoin(ArgsL,I*Dm)
+ if(I-floor(I/Dn)*Dn==0){
+ Str<- as.character(I*Dm*R)
+ ArgsL<- Mixjoin(ArgsL,Str)
+ }
+ }
+ for (I in seq(-1,ceiling((XMIN-GENTEN[1])/Dm),by=-1)){
+ ArgsL<- Mixjoin(ArgsL,I*Dm)
+ if(I-floor(I/Dn)*Dn==0){
+ Str<- as.character(I*Dm*R)
+ ArgsL<- Mixjoin(ArgsL,Str)
+ }
+ }
+ }
+ MemoriList<- list()
+ Memori<- list()
+ for (N in 1:length(ArgsL)){
+ Dt<- ArgsL[[N]]
+ if(mode(Dt)=="numeric" && length(Dt)>1){
+ if(length(Memori)>0){
+ MemoriList<- Mixjoin(MemoriList,list(Memori))
+ }
+ Memori<- list(Dt[1],Dt[2])
+ next
+ }
+ if(mode(Dt)=="character"){
+ Memori<- Mixjoin(Memori,Dt)
+ }
+ else{
+ if(length(Memori)>0){
+ MemoriList<- Mixjoin(MemoriList,list(Memori))
+ }
+ Memori<- list(Dt,GENTEN[2])
+ }
+ }
+ MemoriList<- Mixjoin(MemoriList,list(Memori))
+ for (N in 1:length(MemoriList)){
+ Dt<- MemoriList[[N]]
+ Ndt<- length(Dt)
+ X=Op(1,Dt)
+ Y=Op(2,Dt)
+ Tmp<-Doscaling(c(X,Y))
+ X<- Tmp[1]
+ Y<- Tmp[2]
+ Moji<- Op(Ndt,Dt)
+ Tmp1<- Unscaling(c(X,Y+MARKLEN))
+ Tmp2<- Unscaling(c(X,Y-MARKLEN))
+ Fd<- Listplot(c(Tmp1,Tmp2))
+ Drwline(Fd)
+ if(Ndt==3){
+ Tmp<-Unscaling(c(X,Y-MARKLEN))
+ Expr(Tmp,"s",Moji)
+ }
+ if(Ndt==4){
+ Houkou<- Op(3,Dt)
+ Tmp<-grep("s",Houkou)
+ if(length(Tmp)>0){
+ Tmp<-Unscaling(c(X,Y-MARKLEN))
+ Expr(Tmp,Houkou,Moji)
+ }
+ else{
+ Tmp<- Unscaling(c(X,Y+MARKLEN))
+ Expr(Tmp,Houkou,Moji)
+ }
+ }
+ cat("%\n",file=Wfile,append=TRUE)
+ }
+}
+
+#############################################
+# 2013.08.07
+
+Integrate<- function(Fs,Vs, Intv){
+ if(is.function(Fs)){
+ Fn<- Fs
+ }
+ else{
+ Str<- paste("Fn<- function(",Vs, ") ", Fs, sep="")
+ eval(parse(text=Str))
+ }
+ Tmp<- integrate(Fn, Intv[[1]], Intv[[2]])
+ Out<- Tmp[[1]]
+ return(Out)
+}
+
+#############################################
+
+Intersectcrvs<-function(...)
+{
+ varargin<-list(...)
+ Nargs<-length(varargin)
+ Eps<-10^(-4)
+ Tmp<-varargin[[Nargs]]
+ if(mode(Tmp)=="numeric" && length(Tmp)==1)
+ {
+ Eps<-Tmp
+ }
+ G1<-varargin[[1]]
+ if(mode(G1)=="numeric")
+ {
+ G1<-list(G1)
+ }
+ G2<-varargin[[2]]
+ if(mode(G2)=="numeric")
+ {
+ G2<-list(G2)
+ }
+ PL<-list()
+ for (N in 1:length(G1))
+ {
+ for (M in 1:length(G2))
+ {
+ KL<-IntersectcrvsPp(G1[[N]],G2[[M]],Eps)
+ for (I in Looprange(1,length(KL)))
+ {
+ Tmp<-KL[[I]]
+ P<-Tmp[1]
+ PL<-append(PL,P)
+ }
+ }
+ }
+ return(PL)
+}
+
+###########################################
+
+IntersectcrvsPp<-function(...)
+{
+ varargin<-list(...)
+ Nargs<-length(varargin)
+ G1<-varargin[[1]]; G2<-varargin[[2]]
+ Eps<- 10.0^(-4)
+ if(Nargs>2) Eps<-varargin[[3]]
+ SqEps<- 10.0^(-10)
+ Eps2<- 0.1
+ if(Nargs>3) Eps2<-varargin[[4]]
+ Data1<-G1
+ Data2<-G2
+ if(Nrow(Data1)==Nrow(Data2))
+ {
+ Tmp<-seq(Nrow(Data2),1, by=-1)
+ Tmp1<-Data2[Tmp,]
+ Eps0<-10^(-6)
+ Tmp2<-Norm(Data1-Data2)
+ Tmp3<-Norm(Data1-Tmp1)
+ if(Tmp2<Eps0||Tmp3<Eps0)
+ {
+ KL<-list()
+ return(KL)
+ }
+ }
+ KL1<-list()
+ KL2<-list()
+ for (I in Looprange(1,Nrow(Data1)-1))
+ {
+ A<-Data1[I,]
+ B<-Data1[I+1,]
+ for (J in Looprange(1,Nrow(Data2)-1))
+ {
+ P<-Data2[J,]; Q<-Data2[J+1,]
+ Tmp<-Koutenseg(A,B,P,Q,Eps,Eps2)
+ if(mode(Tmp)=="list")
+ {
+ if(Tmp[[3]]==0)
+ {
+ Tmp1<-list(Tmp[[1]],Tmp[[2]],I,J)
+ KL1<-append(KL1,list(Tmp1))
+ }
+ else
+ {
+ Tmp2<-list(Tmp[[1]],Tmp[[2]],I,J)
+ KL2<-append(KL2, list(Tmp2))
+ }
+ }
+ }
+ }
+ KL<-list()
+ if(length(KL1)>0)
+ {
+ Tmp<-KL1[[1]]
+ P<-Tmp[[1]]
+ T<-Tmp[[2]]
+ I<-Tmp[[3]]
+ J<-Tmp[[4]]
+ Tmp<-list(P,I+T,J)
+ KL<-list(Tmp)
+ }
+ for (N in Looprange(2,length(KL1)))
+ {
+ Tmp<-KL1[[N]]
+ P<-Tmp[[1]]
+ Flg<-0
+ for (K in 1:length(KL))
+ {
+ if(1>length(KL)) break
+ Tmp<-KL[[K]]
+ if(Norm(P-Tmp[[1]])^2<SqEps)
+ {
+ Flg<-1
+ break
+ }
+ }
+ if(Flg==0)
+ {
+ Tmp<-KL1[[N]]
+ T<-Tmp[[2]]
+ I<-Tmp[[3]]
+ J<-Tmp[[4]]
+ Tmp<-list(P,I+T,J)
+ KL<-append(KL,list(Tmp))
+ }
+ }
+ for (N in Looprange(1,length(KL2)))
+ {
+ Tmp<-KL2[[N]]
+ P<-Tmp[[1]]
+ Flg<-0
+ for (K in Looprange(1,length(KL)))
+ {
+ Tmp<-KL[[K]]
+ if(Norm(P-Tmp[[1]])^2<SqEps)
+ {
+ Flg<-1
+ break
+ }
+ }
+ if(Flg==0)
+ {
+ Tmp<-KL2[[N]]
+ T<-Tmp[[2]]
+ T<-min(max(T,0),1)
+ I<-Tmp[[3]]
+ J<-Tmp[[4]]
+ Tmp<-list(P,I+T,J)
+ KL<-append(KL,list(Tmp))
+ }
+ }
+ return(KL)
+}
+
+###########################################
+# 13.12.20 debugged
+
+Invdashline<- function(...)
+{
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ Nall<- Nargs; Sen<- 1 ; Gap<- 1
+ Tmp<- varargin[[Nall]]
+ if(is.numeric(Tmp) && length(Tmp)==1 && Tmp>0){ # 13.12.20
+ Tmp1<- varargin[[Nall-1]]
+ if(is.numeric(Tmp1) && length(Tmp1)==1 && Tmp1>0){ # 13.12.20
+ Sen<- Tmp1; Gap<- Tmp
+ Nall<- Nall-2
+ }
+ else{
+ Sen<- Tmp; Gap<- Sen
+ Nall<- Nall-1
+ }
+ }
+ Sen<- 1000/2.54/MilliIn*Sen
+ Gap<- 1000/2.54/MilliIn*Gap
+ for (N in Looprange(1,Nall)){
+ Figdata<- varargin[[N]]
+ Makehasen(Figdata,Sen,Gap,1)
+ }
+}
+
+#########################################
+
+Invert<- function(Pd)
+{
+ OutL=Pd[nrow(Pd):1,]
+ return(OutL)
+}
+
+############################################
+
+InWindow<-function(PA)
+{
+ Eps<-10.0^(-6);
+ if((length(PA)==2)&(is.numeric(PA))){ # 17.11.20
+ X<-PA[1]; Y<-PA[2];
+ if(X>XMIN-Eps && X<XMAX+Eps && Y>YMIN-Eps && Y<YMAX+Eps)
+ Rx<-"i"
+ else
+ Rx<-"o"
+ return(Rx)
+ }else{
+ return("o")
+ }
+}
+
+#######################################
+
+Joincrvs<- function(...)
+{
+ varargin<- list(...)
+ Nall<- length(varargin)
+ Eps<- 10^(-4)
+ Tmp<- varargin[[Nall]]
+ if(mode(Tmp)=="numeric" && length(Tmp)==1){
+ Eps<- Tmp
+ Nall<- Nall-1
+ }
+ QdL<- Flattenlist(varargin[1:Nall]) # 11.06.25
+ if(length(QdL)==0){
+ PtL<-c()
+ return(PtL)
+ }
+ PtL<- Op(1,QdL)
+ for (I in Looprange(2,length(QdL))){
+ Qd<- Op(I,QdL)
+ if(Numptcrv(Qd)<=1){next} # 11.06.25
+ P<- Ptend(PtL)
+ S<- Ptstart(PtL)
+ Q<- Ptstart(Qd)
+ R<- Ptend(Qd)
+ MN<- min(Norm(P-Q),Norm(P-R),Norm(S-Q),Norm(S-R))
+ if(MN==Norm(P-R)){
+ Qd<- Invert(Qd)
+ }
+ else if(MN==Norm(S-Q)){
+ PtL=Invert(PtL)
+ }
+ else if(MN==Norm(S-R)){
+ PtL<- Invert(PtL)
+ Qd<- Invert(Qd)
+ }
+ if(MN>Eps){
+ PtL<- Appendrow(PtL,Qd)
+ }
+ else{
+ if(is.null(nrow(Qd))){ Qd<- as.matrix(Qd,nrow=1)}
+ PtL<- Appendrow(PtL,Qd[2:nrow(Qd),]) # 11.06.25
+ }
+ }
+ return(PtL)
+}
+
+########################################
+# 2011.11.02
+
+Joingraphics<- function(...)
+{
+ varargin<- list(...)
+ Ls<- Flattenlist(varargin)
+ N<- length(Ls)
+ Tp<- Ls[[N]]
+ Listflg<- 0
+ if( is.character(Tp)){
+ Tmp<- toupper(substr(Tp,1,1))
+ if(Tmp=="L"){
+ Listflg<- 1
+ }
+ N<- N-1
+ Ls<- Ls[1:N]
+ }
+ if(Listflg==1){
+ P<- Ls
+ }
+ else{
+ P<- c()
+ for (I in 1:N){
+ Tmp<- Ls[[I]]
+ P<- Appendrow(P,c(Inf,Inf))
+ P<- Appendrow(P,Tmp)
+ }
+ P<- P[2:nrow(P),]
+ }
+ return(P)
+}
+
+########################################
+
+Kouten<- function(PA,V,P,Q)
+{
+ Eps<- 10.0^(-6)
+ A1<- PA[1]; A2<- PA[2]
+ V1<- V[1]; V2<- V[2]
+ P1<- P[1]; P2<- P[2]
+ U1<- Q[1]-P1; U2<- Q[2]-P2
+ Tmp<- Norm(P-Q)*Norm(V)
+ if(Tmp==0)
+ {
+ Out<- list(Inf,-Inf)
+ return(Out)
+ }
+ D<- U1*V2-U2*V1
+ if(abs(D)/Tmp<Eps)
+ {
+ Out<- list(Inf,-Inf)
+ return(Out)
+ }
+ S<- ((-A2+P2)*V1+(A1-P1)*V2)/D
+ if(S>1+Eps || S<Eps)
+ {
+ Out<-list(Inf,-Inf)
+ return(Out)
+ }
+ T<- ((-A2+P2)*U1+(A1-P1)*U2)/D
+ Tmp<- PA+T*V
+ Out<- list(T,Tmp,sign(D))
+ return(Out)
+}
+
+##########################################
+
+KoutenList<- function(PA,V,Bdy)
+{
+ Eps<-10.0^(-6)
+ TenL<-list()
+ for (N in 1:length(Bdy))
+ {
+ KL<- Op(N,Bdy)
+ for (K in Looprange(1, Nrow(KL)-1))
+ {
+ P<- Op(K,KL); Q<- Op(K+1,KL)
+ if(P!="/" && Q!="/")
+ {
+ Tmp<- Kouten(PA,V,P,Q);
+ if(Tmp[[1]]!=Inf)
+ {
+ Ten<- append(Tmp,N)
+ Flg<- 0
+ NN<- length(TenL)
+ I<- 1
+ while (Flg==0 && I<=NN)
+ {
+ Tmp<- Op(I,TenL)
+ if(Op(1,Ten)<Op(1,Tmp)-Eps)
+ {
+ Tmp1<- TenL[Looprange(1,I-1)]
+ Tmp2<- TenL[Looprange(I,length(TenL))]
+ TenL<- Mixjoin(Tmp1,list(Ten),Tmp2)
+ Flg<-1
+ }
+ else
+ if(Op(1,Ten)<Op(1,Tmp)+Eps)
+ {
+ if(Op(4,Ten)!=Op(4,Tmp))
+ {
+ Tmp1<- TenL[Looprange(1,I-1)]
+ Tmp2<- TenL[Looprange(I,length(TenL))]
+ TenL<- Mixjoin(Tmp1,list(Ten),Tmp2)
+ Flg<-1
+ }
+ else
+ if(Op(3,Ten)!=Op(3,Tmp))
+ {
+ Tmp1<- TenL[Looprange(I,I-1)]
+ Tmp2<- TenL[Looprange(I+1,length(TenL))]
+ TenL<- Mixjoin(Tmp1,Tmp2)
+ }
+ Flg<- 1
+ }
+ I<- I+1
+ }
+ if(Flg==0)
+ {
+ TenL<- Mixjoin(TenL,list(Ten))
+ }
+ }
+ }
+ }
+ }
+ return(TenL)
+}
+
+##########################################
+
+Koutenseg<-function(...)
+{
+ #pointdata on AB at which AB intersects CD
+ varargin<-list(...)
+ Nargs<-length(varargin)
+ Eps0 <- 10^(-4)
+ A<-varargin[[1]]; V<-varargin[[2]]-A
+ Sv2 <- V[1]^2+V[2]^2
+ if(Sv2<10^(-6))
+ {
+ Out<-Inf
+ return(Out)
+ }
+ P<-varargin[[3]]-A; Q<-varargin[[4]]-A
+ Eps <- 10.0^(-3)
+ if(Nargs>=5)
+ {
+ Eps<-varargin[[5]]
+ }
+ Eps2 <- 0.2
+ if(Nargs>=6)
+ {
+ Eps2<-varargin[[6]]
+ }
+ Eps<-min(Eps2,Eps/sqrt(Sv2))
+ P1<-(P[1]*V[1]+P[2]*V[2])/Sv2
+ P2<-(-P[1]*V[2]+P[2]*V[1])/Sv2
+ Q1<-(Q[1]*V[1]+Q[2]*V[2])/Sv2
+ Q2<-(-Q[1]*V[2]+Q[2]*V[1])/Sv2
+ m1 <- -Eps; M1 <- 1+Eps
+ m2 <- -Eps; M2 <- Eps
+ if(max(P1,Q1)<m1 || min(P1,Q1)>M1)
+ {
+ Out<-Inf
+ return(Out)
+ }
+ if(max(P2,Q2)<m2 || min(P2,Q2)>M2)
+ {
+ Out<-Inf
+ return(Out)
+ }
+ if(P2*Q2<0)
+ {
+ T<- P1-(Q1-P1)/(Q2-P2)*P2
+ if(T>m1 && T<M1)
+ {
+ if(T > -Eps0 && T<1+Eps0)
+ {
+ Tmp1<-A+T*V
+ Tmp2<-min(max(T,0),1)
+ Out<-list(Tmp1,Tmp2,0)
+ }
+ else
+ {
+ Tmp1<-A+T*V
+ Tmp2<-min(max(T,0),1)
+ Out<-list(Tmp1,Tmp2,1)
+ }
+ return(Out)
+ }
+ if(P1<m1 || P1>M1 || P2<m2 || P2>M2)
+ {
+ if(Q1<m1 || Q1>M1 || Q2<m2 || Q2>M2)
+ {
+ Out<-Inf
+ return(Out)
+ }
+ T<-min(max(Q1,0),1)
+ Tmp=A+T*V
+ Out<-list(Tmp,T,1)
+ return(Out)
+ }
+ T<-min(max(P1,0),1)
+ Tmp<-A+T*V
+ Out<-list(Tmp,T,1)
+ return(Out)
+ }
+ if(P1> -Eps0 && P1<1+Eps0 && P2> -Eps0 && P2 < Eps0)
+ {
+ T<- P1
+ Tmp<- A+T*V
+ Out<- list(Tmp, T, 0)
+ return(Out)
+ }
+ if(Q1> -Eps0 && Q1<1+Eps0 && Q2> -Eps0 && Q2<Eps0)
+ {
+ T<- Q1
+ Tmp<-A+T*V
+ Out<- list(Tmp,T,0)
+ return(Out)
+ }
+ if(P1<m1 || P1>M1 || P2<m2 || P2>M2)
+ {
+ if(Q1<m1 || Q1>M1 || Q2<m2 || Q2>M2)
+ {
+ Out<-Inf
+ return(Out)
+ }
+ T<-min(max(Q1,0),1)
+ Tmp<-A+T*V
+ Out<-list(Tmp,T,1)
+ return(Out)
+ }
+ if(Q1<m1 || Q1>M1 || Q2<m2 || Q2>M2)
+ {
+ T<-min(max(P1,0),1)
+ Tmp<-A+T*V
+ Out<-list(Tmp,T,1)
+ return(Out)
+ }
+ if(abs(P2)<abs(Q2))
+ {
+ T<-min(max(P1,0),1)
+ }
+ else
+ {
+ T<-min(max(Q1,0),1)
+ }
+ Tmp<A+T*V
+ Out<-list(Tmp,T,1)
+ return(Out)
+}
+
+##########################################
+
+Kukeiwake<- function(PL)
+{
+ Eps<-10.0^(-6)
+ NW<- c(XMIN,YMAX); SW<-c(XMIN,YMIN)
+ SE<- c(XMAX,YMIN); NE<-c(XMAX,YMAX)
+ Tmp<-matrix(c(NW,SW,SE,NE,NW),nrow=2)
+ Sikaku<- t(Tmp)
+ Kt<- IntersectcrvsPp(PL,Sikaku)
+ if(length(Kt)!=2)
+ {
+ print("not two points")
+ return(c())
+ }
+ Tmp<- Op(1,Kt)
+ Pt1<- Op(1,Tmp)
+ N1<- trunc(Op(2,Tmp))
+ M1<- Op(3,Tmp)
+ Tmp<- Op(2,Kt)
+ Pt2<- Op(1,Tmp)
+ N2<- trunc(Op(2,Tmp))
+ M2<- Op(3,Tmp)
+ T1<- Paramoncurve(Pt1,M1,Sikaku) #18.02.06
+ T2<- Paramoncurve(Pt2,M2,Sikaku)
+ QL<c()
+ if(Norm(Pt1-Op(N1+1,PL))>Eps)
+ {
+ QL<-Pt1
+ }
+ Tmp<-Appendrow(QL,PL[(N1+1):N2,])
+ QL<- Tmp
+ if(Norm(Pt2-Op(N2,PL))>Eps)
+ {
+ Tmp<-Appendrow(QL,Pt2)
+ QL<- Tmp
+ }
+ HidariL<- QL
+ Ms<- M2+1; Me<- M1
+ if(T1<T2+Eps) Me<- M1+4
+ for (M in Looprange(Ms,Me))
+ {
+ Tmp<- Op(Nrow(HidariL),HidariL)
+ P<-Op(((M-1) %% 4)+1,Sikaku)
+ if(Norm(Tmp-P)>Eps)
+ {
+ Tmp<-Append(HidariL,P)
+ HidariL<-Tmp
+ }
+ }
+ Tmp<- Op(Nrow(HidariL),HidariL)
+ if(Norm(Tmp-Pt1)>Eps)
+ {
+ Tmp<-Append(HidariL,Pt1)
+ HidariL<-Tmp
+ }
+ MigiL<- QL
+ Ms<- M2; Me<- M1+1
+ if(T1>T2-Eps) Me<- Me-4
+ for (Mm in Looprange(Me,Ms))
+ {
+ M<- Me+Ms-Mm
+ Tmp<- Op(Nrow(MigiL),MigiL)
+ P<- Op(((M-1) %% 4)+1,Sikaku)
+ if(Norm(Tmp-P)>Eps)
+ {
+ Tmp<-Appendrow(MigiL,P)
+ MigiL<-Tmp
+ }
+ }
+ Tmp<- Op(Nrow(MigiL),MigiL)
+ if(Norm(Tmp-Pt1)>Eps)
+ {
+ Tmp<-Appendrow(MigiL,Pt1)
+ MigiL<-Tmp
+ }
+ Out<- list(HidariL,MigiL)
+ return(Out)
+}
+
+###################################
+# 17.09.24 Eps
+
+Kyoukai<- function(...)
+{
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ Eps0<- 10^(-7)
+ DataL<-list()
+ for (I in 1:Nargs){
+ Tmp<- varargin[[I]]
+ if(mode(Tmp)=="numeric"){
+ DataL<- Mixjoin(DataL,list(list(Tmp)))
+ }
+ if(mode(Tmp)=="list"){
+ if(mode(Tmp[[1]])!="list"){
+ DataL<- Mixjoin(DataL, list(Tmp))
+ }
+ else{
+ DataL<-Mixjoin(DataL,Tmp)
+ }
+ }
+ }
+ Eps<- 10.0^(-4) #17.09.24
+ PLall<- list()
+ Sflg<- 0
+ N<- Length(DataL) #180621
+ for (I in Looprange(1,N)){
+ Data<- Op(I, DataL)
+ Tmp<- Op(Length(Data),Data)
+ if(mode(Tmp)=="numeric" && Nrow(Tmp)==1 && Length(Tmp)>1){ #180621
+ Rg<-Tmp ; Nd<- Length(Data)-1 #180621
+ }
+ else{
+ if(mode(Tmp)=="character"){
+ Rg<- Tmp ; Nd<- Length(Data)-1 #180621
+ }
+ else{
+ Rg<- "c" ; Nd<- Length(Data) #180621
+ }
+ }
+ for (J in Looprange(1,Nd)){
+ Tmp<- Op(J,Data)
+ if(mode(Tmp)=="character"){
+ Rg<- Tmp
+ next
+ }
+ Points<- Tmp
+ P1<- Ptstart(Points)
+ P2<- Ptend(Points)
+ if(J==1){
+ PL<- Points
+ Pfirst<- P1
+ Plast<- P2
+ if(Nd>=2){
+ Tmp<- Op(2,Data)
+ P<- Ptstart(Tmp)
+ Q<- Ptend(Tmp)
+ if(Norm(P2-P)>Eps && Norm(P2-Q)>Eps){
+ Tmp< Length(PL) #180621
+ PL<-PL[Tmp:1,]
+ Pfirst<- Ptstart(PL)
+ Plast<- Ptend(PL)
+ }
+ }
+ }
+ else{
+ if(Norm(P1-Plast)<Eps){
+ Stp<-1; Ks<-2; Ke=Length(Points) #180621
+ }
+ else{
+ if(Norm(P2-Plast)<Eps) {
+ Stp<- -1; Ks<-Length(Points)-1; Ke=1 #180621
+ }
+ else{
+ Tmp<-Appendrow(PL,c(Inf,Inf))
+ PL<- Appendrow(Tmp,Points)
+ Sflg<- 1
+ Pfirst<- P1
+ Plast<- P2
+ Stp<- 1; Ks<- Length(Points)-1; Ke<- 1 #180621
+ }
+ }
+ for (K in seq(Ks,Ke, by=Stp)){
+ Tmp<- Appendrow(PL,Op(K,Points))
+ PL<-Tmp
+ }
+ Plast<- Op(Ke,Points)
+ }
+ }
+ if(Norm(Pfirst-Plast)>Eps){
+ Np<- Length(PL) #180621
+ if(Rg=="c"){
+ Tmp<- Appendrow(PL,Pfirst)
+ PL<- Tmp
+ }
+ else if(Rg=="s"){
+ Tmp<- c(PL[1:Np,2],YMIN)
+ Y<- min(Tmp)-1
+ P<- c(Plast[1],Y); Q<- c(Pfirst[1],Y)
+ Tmp<- Appendrow(PL,P)
+ Tmp=Appendrow(Tmp,Q)
+ PL=Appendrow(Tmp,Pfirst)
+ }
+ else if(Rg=="n"){
+ Tmp<- c(PL[1:Np,2],YMAX)
+ Y<-max(Tmp)+1
+ P<- c(Plast[1],Y); Q<- c(Pfirst[1],Y)
+ Tmp<- Appendrow(PL,P)
+ Tmp<- Appendrow(Tmp,Q)
+ PL<- Appendrow(Tmp,Pfirst)
+ }
+ else if(Rg=="w"){
+ Tmp<- c(PL[1:Np,1],XMIN)
+ X<- min(Tmp)-1
+ P<- c(X,Plast[2]); Q<- c(X,Pfirst[2])
+ Tmp<- Appendrow(PL,P)
+ Tmp<- Appendrow(Tmp,Q)
+ PL<- Appendrow(Tmp,Pfirst)
+ }
+ else if(Rg=="e"){
+ Tmp<- c(PL[1:Np,1],XMAX)
+ X<- max(Tmp)+1
+ P<- c(X,Plast[2]); Q<- c(X,Pfirst[2])
+ Tmp<- Appendrow(PL,P)
+ Tmp<- Appendrow(Tmp,Q)
+ PL<- Appendrow(Tmp,Pfirst)
+ }
+ else if(mode(Rg)=="numeric" && Nrow(Rg)==1 && Length(Rg)>1){ #180621
+ Tmp<- Kukeiwake(PL)
+ Tmp1<- Op(1,Tmp)
+ Tmp2<- Naigai(Rg,list(Tmp1))
+ if(Tmp2==c(1)){
+ PL<-Op(1,Tmp)
+ }
+ else{
+ PL<- Op(2,Tmp)
+ }
+ }
+ }
+ Tmp<- matrix(Ptstart(PL),nrow=1) #180621
+ for (J in Looprange(2,Length(PL))){
+ P<- Op(J,PL)
+ Q<- Op(Length(Tmp),Tmp)
+ if(Norm(P-Q)>Eps){
+ Tmp1<-Appendrow(Tmp,P)
+ Tmp<-Tmp1
+ }
+ }
+ PL<-Tmp
+ PLall<-c(PLall,list(PL))
+ }
+ if(Length(PLall)==1 && Sflg==0){
+ Tmp<- Op(1,PLall)
+# Tmp<- Op(1,Tmp)
+ if(Norm(Ptstart(Tmp)-Ptend(Tmp))>Eps0){
+ Tmp1<- Appendrow(Tmp,Ptstart(Tmp))
+ PLall<- list(Tmp1)
+ }
+ }
+ return(PLall)
+}
+
+######################################
+
+Letter<-function(...)
+{ ## Scaling is implemented
+ varargin<-list(...)
+ Nargs<-length(varargin)
+ Irng<-c(seq(from=1,to=Nargs,by=3))
+ for (I in Irng)
+ {
+ Tmp<-varargin[[I]]
+ P<- Doscaling(Tmp)
+ X<-P[1]
+ Y<-P[2]
+ Houkou<-varargin[[I+1]]
+ Mojiretu<-varargin[[I+2]]
+ Hset<-Houkou
+ Vhoko<-"c"
+ if(length(grep("n",Hset))>0)
+ {
+ Vhoko<-"n"; Y<-Y+MEMORI
+ }
+ if(length(grep("s",Hset))>0)
+ {
+ Vhoko<-"s"; Y<-Y-MEMORI
+ }
+ Hhoko<-"c"
+ if(length(grep("e",Hset))>0)
+ {
+ Hhoko<-"e"; X<-X+MEMORI
+ }
+ if(length(grep("w",Hset))>0)
+ {
+ Hhoko<-"w"; X<-X-MEMORI
+ }
+ Hoko<-paste(Vhoko,Hhoko,sep="")
+ Suu<-"+-.0123456789"
+ SuuL<-Suu
+ J<-1; Dstr<-""
+ while (J<=nchar(Houkou))
+ {
+ Tmp<-substring(Houkou,J,J)
+ if(length(grep(Tmp,SuuL))>0)
+ {
+ if(Dstr=="") Hk<-substring(Houkou,J-1,J-1)
+ Dstr<-paste(Dstr,Tmp,sep="")
+ }
+ else
+ {
+ if(Dstr!="")
+ {
+ Nmbr<-as.numeric(Dstr)
+ D<-Nmbr*MEMORI
+ if(Hk=="n") Y<-Y+D
+ if(Hk=="s") Y<-Y-D
+ if(Hk=="e") X<-X+D
+ if(Hk=="w") X<-X-D
+ Dstr<-""
+ }
+ }
+ J<-J+1
+ }
+ if(Dstr!="")
+ {
+ Nmbr<-as.numeric(Dstr)
+ D<-Nmbr*MEMORI;
+ if(Hk=="n") Y<-Y+D
+ if(Hk=="s") Y<-Y-D
+ if(Hk=="e") X<-X+D
+ if(Hk=="w") X<-X-D
+ }
+ CalcWidth(Hoko,Mojiretu)
+ CalcHeight(Hoko,Mojiretu)
+ cat("\\put(",file=Wfile,append=TRUE)
+ Tmp1<- sprintf("%7.7f",X) # 11.07.19
+ Tmp2<- sprintf("%7.7f",Y) # 11.07.19
+ Str<-paste(Tmp1,",",Tmp2,sep="")
+ cat(Str,file=Wfile,append=TRUE)
+ Tmp<-"){\\hspace*{\\Width}"
+ Str<-paste(Tmp,"\\raisebox{\\Height}{",Mojiretu,"}}%\n",sep="")
+ cat(Str,file=Wfile,append=TRUE)
+ cat("%\n",file=Wfile,append=TRUE)
+ }
+}
+
+######################################################
+
+Letterrot<- function(...)
+{
+ varargin<- list(...)
+ P<- varargin[[1]]
+ V<- varargin[[2]]; N<- 3
+ P<- Doscaling(P)
+ V<- Doscaling(V)
+ Tmov<- 0
+ Tmp<- varargin[[N]]
+ if(mode(Tmp)=="numeric"){
+ Tmov<- Tmp; N<- N+1
+ }
+ Nmov<- 0
+ Tmp<- varargin[[N]]
+ if(mode(Tmp)=="numeric"){
+ Nmov<- Tmp; N<- N+1
+ }
+ Mojiretu<- Assign(varargin[[N]]) #2017.11.26
+ Tv<- 1/Norm(V)*V
+ Nv<- c(-Tv[2],Tv[1])
+ P<- P+MEMORI*Tmov*Tv+MEMORI*Nmov*Nv
+ Tmp<- acos(V[1]/Norm(V))
+ Theta<- round(Tmp*180/pi)
+ if(V[2]>=0){
+ Units<- ""
+ }
+ else{
+ Units<- "units=-360,"
+ }
+ Tmp<- paste("\\rotatebox[",Units,"origin=c]{",as.character(Theta),sep="")
+ Tmp<- paste(Tmp,"}{",Mojiretu,"}",sep="")
+ Letter(P,"c",Tmp)
+}
+
+###################################
+# 10.12.04
+
+Lineplot<-function(...)
+{
+ varargin <- list(...)
+ Nargs<-length(varargin)
+ A<-varargin[[1]]
+ if(is.numeric(A)) {
+ Tmp<-length(A)
+ if(Tmp>3) {
+ B <- A[(Tmp/2+1):Tmp]
+ A <- A[1:(Tmp/2)]
+ Is <- 2
+ }
+ else {
+ B<-varargin[[2]]
+ Is <- 3
+ }
+ }
+ else {
+ B<-A[[2]]
+ A<-A[[1]]
+ Is <- 2
+ }
+ Mag <- 100 ; Semi <- "" ## 10.12.04
+ for (I in Looprange(Is,Nargs)) {
+ Tmp <- varargin[[I]]
+ switch ( mode(Tmp),
+ "numeric"= Mag <- Tmp,
+ "character"= Semi <- Tmp
+ )
+ }
+V<- Mag/Norm(B-A)*(B-A) ## 10.12.04 from here
+ if(Semi=="") {
+ Out<- Listplot(c(A-V,A+V))
+ }
+ else if(Semi=="+") {
+ Out<- Listplot(c(A,A+V))
+ }
+ else {
+ Out<- Listplot(c(A-V,A))
+ } ## 10.12.04 to here
+ return(Out)
+}
+
+################################
+
+Listplot<-function(...){
+ varargin<-list(...);
+ Z<-c();
+ for (I in 1:length(varargin)){
+ Data<-varargin[[I]];
+ if(mode(Data)=="numeric"){
+ if(class(Data)=="numeric"){
+ Tmp<- matrix(Data,nrow=2);
+ Tmp<- t(Tmp);
+ Z<-Appendrow(Z,Unscaling(Tmp)) #181015
+ }else{
+ Z<-Appendrow(Z,Unscaling(Data)) #181015
+ }
+ }else{
+ for (J in 1:length(Data)){
+ Tmp<-Data[[J]];
+ Z<-Appendrow(Z,Unscaling(Tmp)) #181015
+ }
+ }
+ }
+ return(Z)
+}
+
+##############################
+
+MakeBowdata <- function(PA,PB,H)
+{
+ Eps <- 10^(-5)
+ BOWSTART <<- PA
+ BOWEND <<- PB
+ D <- 1/2*Norm(PB-PA)
+ R <- (H^2+D^2)/(2*H)
+ A1 <- PA[1]; A2<-PA[2]
+ B1 <- PB[1]; B2<-PB[2]
+ if(abs(A2-B2)>Eps){
+# x <- poly(0,"X")
+# y <- -(A1-B1)*x/(A2-B2)+(1/2)*(A1^2+A2^2-B1^2-B2^2)/(A2-B2)
+# Eq1 <- (A1-x)^2+(A2-y)^2-R^2
+# Tmp <- coeff(Eq1)
+# C0 <- Tmp[1]; C1<-Tm[2]; C2<-Tmp[3]
+ C0<- A1^2+(A2-(1/2)*(A1^2+A2^2-B1^2-B2^2)/(A2-B2))^2-R^2
+ C1<- -(A1+B1)*(A2^2+B2^2-2*A2*B2-2*A1*B1+A1^2+B1^2)/(A2-B2)^2
+ C2<- 1+(A1-B1)^2/(A2-B2)^2
+ Det <- sqrt(C1^2-4*C0*C2)
+ Ansx1 <- (-C1+Det)/(2*C2)
+ Ansx2 <- (-C1-Det)/(2*C2)
+ Tmp <- -(A1-B1)*Ansx1/(A2-B2)+(1/2)*(A1^2+A2^2-B1^2-B2^2)/(A2-B2)
+ PC <- c(Ansx1,Tmp)
+ Tmp <--(A1-B1)*Ansx2/(A2-B2)+(1/2)*(A1^2+A2^2-B1^2-B2^2)/(A2-B2)
+ PC2 <- c(Ansx2,Tmp)
+ }
+ else{
+ Tmp <- 0.5*(PA+PB)
+ PC <- Tmp+c(0,R-H) # 11.06.02
+ PC2 <- Tmp-c(0,R-H)
+ }
+ VA <- PA-PC
+ VB <- PB-PC
+ if(VA[1]*VB[2]-VA[2]*VB[1]<0) {
+ PC <- PC2
+ }
+ AngA <- acos((PA[1]-PC[1])/R)
+ if(PA[2]-PC[2]<0){
+ AngA <- -AngA
+ }
+ AngB <- acos((PB[1]-PC[1])/R)
+ if(PB[2]-PC[2]<0){
+ AngB <- -AngB
+ }
+ if(AngA>AngB) {
+ AngB <- AngB+2*pi
+ }
+ Out <- list(PC,R,AngA,AngB)
+ return(Out)
+}
+
+####################################################
+
+MakeCurves<-function(...){ ## Scaling is implemented
+ varargin<-list(...)
+ Figdata<-varargin[[1]]
+ if(class(Figdata)=="numeric"){
+ Figdata<-matrix(Figdata,nrow=1)
+ }
+ Ptout<-1
+ if(length(varargin)>=2) Ptout<-varargin[[2]]
+ Eps<-10.0^(-6)
+ IndM<-Dataindex(Figdata)
+ Atos<-c()
+ for (Nd in Looprange(1,Nrow(IndM))){ #180509
+ Tmp<-IndM[Nd,]
+ Motos<- Figdata[Tmp[1]:Tmp[2],]
+ All<-Nrow(Motos)
+ if(Nrow(Motos)==1){
+ if(InWindow(Motos)=="o"){
+ next
+ }
+ Tmp1<- as.numeric(Motos)
+ Tmp1=list(Tmp1) #190405
+ if(Ptout==1){
+ Drwpt(Tmp1)
+ }
+ else{
+ Tmp1<- Doscaling(Tmp1)
+ Atos<-Appendrow(Atos,c(Inf,Inf),Tmp1)
+ next
+ }
+ }
+ Crv<-c()
+ for (I in Looprange(2,All)){
+ P<- Op(I-1,Motos)
+ Q<- Op(I,Motos)
+ Snbn<-MeetWindow(P,Q)
+ if(length(Snbn)==0){
+ if(length(Crv)>0){
+ Atos<-Appendrow(Atos,c(Inf,Inf),Doscaling(Crv))
+ Crv<-c()
+ }
+ }
+ else{
+ if(Norm(Snbn[1,]-Snbn[2,])<Eps){ next} # naosi 101202
+ if(length(Crv)==0){
+ Crv<-Snbn
+ }
+ else{
+ Tmp<-Op(Nrow(Crv),Crv)
+ if(Norm(Tmp-Op(1,Snbn))<Eps){
+ Crv<-Appendrow(Crv,Op(2,Snbn))
+ }
+ else{
+ Atos<-Appendrow(Atos,c(Inf,Inf),Doscaling(Crv))
+ Crv<-Snbn
+ }
+ }
+ }
+ }
+ if(Nrow(Crv)>=2)
+ {
+ Atos<-Appendrow(Atos,c(Inf,Inf),Doscaling(Crv))
+ }
+ }
+ Outdata<-Atos[2:Nrow(Atos),]
+ if(class(Outdata)=="numeric")
+ {
+ Outdata<-matrix(Outdata,nrow=1)
+ }
+ return(Outdata)
+}
+
+######################################
+
+Makehasen<- function(Figdata,Sen,Gap,Ptn)
+{
+ Eps<- 10.0^(-6)
+ Clist<- MakeCurves(Figdata)
+ DinM<- Dataindex(Clist)
+ for (N in Looprange(1,Nrow(DinM))){
+ Tmp<- DinM[N,]
+ Data<- Clist[Tmp[1]:Tmp[2],]
+ Dtall<- Nrow(Data)
+ Len<- 0
+ Lenlist<- c(0)
+ for (I in Looprange(2,Dtall)){
+ Len<- Len+Norm(Data[I,]-Data[I-1,])
+ Lenlist<- c(Lenlist,Len)
+ }
+ Lenall<- Lenlist[Dtall]
+ if(Lenall==0){
+ next
+ }
+ Kari<- (Sen+Gap)*0.1
+ Naga<- Sen*0.1
+ Tobi<- Gap*0.1
+ if(Norm(Data[1,]-Data[Dtall,])<Eps){
+ Nsen<- max(ceiling(Lenall/Kari),3)
+ SegUnit<- Lenall/Nsen
+ Naga<- SegUnit*Sen/(Sen+Gap)
+ Tobi<- SegUnit*Gap/(Sen+Gap)
+ SegList<- c(seq(0,(Nsen-1)*SegUnit,by=SegUnit))
+ }
+ else{
+ if(Ptn==0){
+ Nsen<- max(ceiling((Lenall+Tobi)/Kari),3)
+ SegUnit<- Lenall*(Sen+Gap)/(Nsen*Sen+(Nsen-1)*Gap)
+ Naga<- SegUnit*Sen/(Sen+Gap)
+ Tobi<- SegUnit*Gap/(Sen+Gap)
+ SegList<- c(seq(0,(Nsen-1)*SegUnit,by=SegUnit))
+ }
+ else{
+ Nsen<- max(ceiling((Lenall+Naga)/Kari),3)
+ SegUnit<- Lenall*(Sen+Gap)/((Nsen-1)*Sen+Nsen*Gap)
+ Naga<- SegUnit*Sen/(Sen+Gap)
+ Tobi<- SegUnit*Gap/(Sen+Gap)
+ SegList<- c(seq(Tobi,Tobi+(Nsen-2)*SegUnit,by=SegUnit))
+ }
+ }
+ Hajime<- 1; Owari<- 1
+ Mojisu<- 0
+ for (I in Looprange(1,length(SegList))){
+ Len<- SegList[I]
+ J<- Owari
+ while (Len>=Lenlist[J]-Eps){
+ if(J==Dtall){
+ break
+ }
+ J<- J+1
+ }
+ Hajime<- J-1
+ J<- Hajime
+ while (Len+Naga>Lenlist[J]-Eps){
+ if(J==Dtall){
+ break
+ }
+ J<- J+1
+ }
+ Owari<- J-1
+ T<- (Len-Lenlist[Hajime])
+ T<- T/(Lenlist[Hajime+1]-Lenlist[Hajime])
+ P<- Data[Hajime,]+T*(Data[Hajime+1,]-Data[Hajime,])
+ X<- as.character(round(MilliIn*P[1]))
+ Y<- as.character(-round(MilliIn*P[2]))
+ Str<- paste("\\special{pa ",X," ",Y,"}",sep="")
+ cat(Str,file=Wfile,append=TRUE)
+ Mojisu<- Mojisu+nchar(Str)
+ for (J in Looprange(Hajime+1,Owari)){
+ P<- Data[J,]
+ X<- as.character(round(MilliIn*P[1]))
+ Y<- as.character(-round(MilliIn*P[2]))
+ Str<- paste("\\special{pa ",X," ",Y,"}",sep="")
+ cat(Str,file=Wfile,append=TRUE)
+ Mojisu<- Mojisu+nchar(Str)
+ }
+ T<- (Len+Naga-Lenlist[Owari])
+ T<- T/(Lenlist[Owari+1]-Lenlist[Owari])
+ P<- Data[Owari,]+T*(Data[Owari+1,]-Data[Owari,])
+ X<- as.character(round(MilliIn*P[1]))
+ Y<- as.character(-round(MilliIn*P[2]))
+ Str1<- paste("\\special{pa ",X," ",Y,"}",sep="")
+ Str2<- "\\special{fp}"
+ cat(Str1,file=Wfile,append=TRUE)
+ cat(Str2,file=Wfile,append=TRUE)
+ Mojisu<- Mojisu+nchar(Str1)+nchar(Str2)
+ if(Mojisu>80){
+ cat("%\n",file=Wfile,append=TRUE)
+ Mojisu<- 0
+ }
+ }
+ }
+ cat("%\n%\n",file=Wfile,append=TRUE);
+}
+
+######################################
+
+Makeliststr<- function(L)
+{
+ Out="list("
+ for (I in 1:length(L)){
+ Dt<- L[[I]]
+ if(mode(Dt)=="numeric"){
+ if(length(Dt)==1){
+ Dts<- as.character(Dt)
+ }
+ else{
+ Dts<- "c("
+ for (J in Looprange(1,Nrow(Dt))){
+ for (K in 1:ncol(Dt)){
+ Dts<- paste(Dts,as.character(Dt[J,K]),sep="")
+ if(K< ncol(Dt)){
+ Dts<- paste(Dts,",",sep="")
+ }
+ }
+ if(J<Nrow(Dt)){
+ Dts<- paste(Dts,";",sep="")
+ }
+ else{
+ Dts<- paste(Dts,")",sep="")
+ }
+ }
+ }
+ }
+ if(mode(Dt)=="character"){
+ Dts<- paste(Prime(),Dt,Prime(),sep="")
+ }
+ if(mode(Dt)=="list"){
+ Dts<- Makeliststr(Dt)
+ }
+ Out<- paste(Out,Dts,sep="")
+ if(I<length(L)){
+ Out<- paste(Out,",")
+ }
+ else{
+ Out<- paste(Out,")",sep="")
+ }
+ }
+ return(Out)
+}
+
+############################################
+
+Makeshasen<- function(PtnL,PA,V,Bdy)
+{
+ Eps<- 10^(-6)
+ TenL<- KoutenList(PA,V,Bdy)
+ Nten<- length(TenL)
+ Call<- length(Bdy)
+ Ptn<- c(seq(0, 0, length=Call))
+ Out<- list()
+ GL<- c()
+ Te<- -10^6
+ for (I in Looprange(1,Nten-1)){
+ TenP<- Op(I,TenL); TenQ<- Op(I+1,TenL)
+ Ts<- Op(1,TenP)
+ P<- Op(2,TenP); Q<- Op(2,TenQ)
+ NC<- Op(4,TenP)
+ Tmp<- (Op(NC,Ptn)+1) %% 2
+ Ptn[NC]<- Tmp
+ if(Op(1,TenQ)-Ts>Eps){
+ if(Member(Ptn,PtnL)){
+ if(abs(Te-Ts)>Eps){
+ if(Nrow(GL)>0){
+ Tmp<- Mixjoin(Out, list(GL))
+ Out<- Tmp
+ }
+ GL<- Listplot(P,Q)
+ }
+ else{
+ Tmp <- Appendrow(GL, Q)
+ GL<- Tmp
+ }
+ Te<- Op(1,TenQ)
+ }
+ }
+ }
+ if(Nrow(GL)>0){
+ Tmp<- Mixjoin(Out, list(GL))
+ Out<- Tmp
+ }
+ return(Out)
+}
+
+#############################################
+
+Mawarikomi<- function(...)
+{
+ varargin<- list(...)
+ haba<- "10cm"
+ Nargs<- length(varargin)
+ if(Nargs>0){
+ haba<- varargin[[1]]
+ }
+ cat("\\begin{mawarikomi}%\n",file="",append=TRUE)
+ cat("%<1>[5](0,0)%\n",file="",append=TRUE)
+ Str<- paste("{",haba,"}{%\n",sep="")
+ cat(Str,file="",append=TRUE)
+ cat("}%\n",file="",append=TRUE)
+ cat("\\end{mawarikomi}",file="",append=TRUE)
+}
+
+##############################################
+
+MeetWindow<-function(PA,PB)
+{
+ if(InWindow(PA)=="i" && InWindow(PB)=="i")
+ {
+ R<-Appendrow(PA,PB)
+ return(R)
+ };
+ Horner<-function(n,t)
+ {
+ PT<-(1-t)*PA+t*PB;
+ return(PT[n])
+ }
+ Eps<-10.0^(-6);
+ Txm<-(-1); TxM<-(-1); Tym<-(-1); TyM<-(-1);
+ if(PA[1]!=PB[1])
+ {
+ Txm<-(XMIN-PA[1])/(PB[1]-PA[1]);
+ TxM<-(XMAX-PA[1])/(PB[1]-PA[1]);
+ }
+ if(PA[2]!=PB[2])
+ {
+ Tym<-(YMIN-PA[2])/(PB[2]-PA[2]);
+ TyM<-(YMAX-PA[2])/(PB[2]-PA[2]);
+ }
+ Tmp<-Horner(2,Txm);
+ if(Tmp<YMIN-Eps || Tmp>YMAX+Eps)
+ {
+ Txm<-(-1);
+ }
+ Tmp<-Horner(2,TxM);
+ if(Tmp<YMIN-Eps || Tmp>YMAX+Eps)
+ {
+ TxM<-(-1)
+ }
+ Tmp<-Horner(1,Tym);
+ if(Tmp<XMIN-Eps || Tmp>XMAX+Eps)
+ {
+ Tym<--1
+ }
+ Tmp<-Horner(1,TyM);
+ if(Tmp<XMIN-Eps || Tmp>XMAX+Eps)
+ {
+ TyM<--1
+ }
+ Tans<-sort(c(Txm,TxM,Tym,TyM));
+ Tmp<-c();
+ for (I in 1:length(Tans))
+ {
+ Tmp1<-Tans[I];
+ if(Tmp1>-Eps && Tmp1<1+Eps)
+ {
+ if(length(Tmp)==0)
+ {
+ Tmp<-c(Tmp1);
+ }
+ else
+ {
+ if(abs(Tmp[length(Tmp)]-Tmp1)>Eps)
+ {
+ Tmp<-c(Tmp,Tmp1)
+ }
+ }
+ }
+ }
+ Tans<-Tmp;
+ if(length(Tans)==0)
+ {
+ R<-c();
+ return(R);
+ }
+ if(length(Tans)==1)
+ {
+ Ten1<-Horner(1:2,Tans[1]);
+ if(InWindow(PA)=="i")
+ {
+ R<-Appendrow(PA,Ten1)
+ return(R)
+ }
+ else
+ {
+ R<-Appendrow(Ten1,PB)
+ return(R)
+ }
+ }
+ Ten1<-Horner(1:2,Tans[1])
+ Ten2<-Horner(1:2,Tans[2])
+ R<-Appendrow(Ten1,Ten2)
+ return(R)
+}
+
+#########################################
+
+# New 10.03.21
+
+Mixjoin<-function(...)
+{
+ varargin<-list(...)
+ Nargs<- length(varargin)
+ M<- list()
+ for (I in 1:Nargs)
+ {
+ Tmp<-varargin[[I]]
+ if(length(Tmp)==0) next
+ if(Mixtype(Tmp)==1)
+ {
+ Tmp<-list(Tmp)
+ }
+ if(length(M)==0){
+ M <- Tmp
+ }
+ else{
+ M<- c(M,Tmp)
+ }
+ }
+ return(M)
+}
+
+#################################
+
+Mixlength<- function(PL){
+ if(length(PL)==0){
+ return(0)
+ }
+ if(Mixtype(PL)==1){
+ Out<- Nrow(PL)
+ }
+ else{
+ Out<- length(PL)
+ }
+ return(Out)
+}
+
+###########################################
+
+Mixtype<- function(D)
+{
+ if(mode(D)!="list") return(1)
+ for (I in 1:length(D))
+ {
+ Tmp<- D[[I]]
+ if(mode(Tmp)=="list") return(3)
+ }
+ return(2)
+}
+
+###########################################
+
+Naigai<- function(A,Bdy)
+{
+ V<- c(1,1)
+ Call<-length(Bdy)
+ KL<- KoutenList(A,V,Bdy)
+ Ptn<- seq(1,1,length=Call)
+ for (K in Looprange(1,length(KL)))
+ {
+ Ten<- Op(K,KL)
+ T<- Op(1,Ten); NC<- Op(4,Ten)
+ if(T<0)
+ {
+ Tmp<- (Ptn[NC]+1) %% 2
+ Ptn[NC]<- Tmp
+ }
+ }
+ return(Ptn)
+}
+
+########################################
+
+Nearestpt<- function(...){
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ PL1<- varargin[[1]]
+ if(!is.matrix(PL1)){
+ Tmp<- matrix(PL1);
+ PL1<- t(Tmp)
+ }
+ if(Nrow(PL1)==1) Flg=0
+ else Flg=1
+ Eps<- 10.0^(-6)
+ PL<- varargin[[2]]
+ Ans<- list(PL1[1,],1,PL[1,],1,Norm(PL1[1,]-PL[1,]))
+ for(N in Looprange(1,Nrow(PL1))){
+ PA<- PL1[N,]
+ Pm<- PL[1,]
+ Im<- 1
+ Sm<- Norm(Pm-PA)
+ for(I in Looprange(1,Nrow(PL)-1)){
+ A1<- PL[I,1]; A2<-PL[I,2]
+ B1<- PL[I+1,1]; B2<-PL[I+1,2]
+ V1<- B1-A1; V2<-B2-A2
+ X1<- PA[1]; X2<-PA[2]
+ Tmp<-V2^2+V1^2
+ if(abs(Tmp)<Eps) next
+ T<- (-A2*V2-V1*A1+V1*X1+X2*V2)/Tmp
+ if(T< -Eps){
+ P<- c(A1,A2)
+ }else{
+ if(T>1+Eps){
+ P<- c(B1,B2)
+ }else{
+ P<- c(A1+T*V1,A2+T*V2)
+ }
+ }
+ S<- Norm(P-PA)
+ if(S<Sm-Eps){
+ Tmp<- Paramoncurve(P,I,PL)
+ Pm<- P; Im<- Tmp; Sm<- S
+ }
+ }
+ if(Sm<Op(5,Ans)) Ans<- list(PA,N,Pm,Im,Sm)
+ if(Flg==0){
+ Ans<- Ans[3:5]
+ }
+ }
+ return(Ans)
+}
+
+#########################################
+
+Newlength<- function()
+{
+ Tmp1<- "\\newlength{\\Width}%\n"
+ Tmp2<- "\\newlength{\\Height}%\n"
+ Tmp3<- "\\newlength{\\Depth}%\n"
+ cat(Tmp1,file="",append=TRUE);
+ cat(Tmp2,file="",append=TRUE);
+ cat(Tmp3,file="",append=TRUE);
+}
+
+#########################################
+
+Numptcrv<-function(Fig)
+{
+ return(Nrow(Fig))
+}
+
+# 2018.01.29
+Length<- function(Data){
+ if(is.matrix(Data)){return(nrow(Data))}
+ if(is.character(Data)){return(nchar(Data))}
+ return(length(Data))
+}
+
+#########################################
+
+Op<-function(N,Data)
+{
+ C <- c()
+ if(length(Data)==0) return(C)
+ if(mode(Data)=="list"){
+ if(class(Data)=="data.frame"){ # 10.02.23
+ C<- Data[N,]
+ }
+ else{
+ C<- Data[[N]]
+ }
+ return(C)
+ }
+ if(mode(Data)=="character"){
+ if(length(Data)==1){
+ C<- substring(Data,N,N)
+ }
+ else{
+ C<- Data[N]
+ }
+ return(C)
+ }
+ if(mode(Data)=="numeric"){
+ if(class(Data)=="matrix"){
+ Din<- Dataindex(Data)
+ if(nrow(Din)==1){
+ C<- Data[N,]
+ }
+ else{
+ Tmp1<- Din[N,1]
+ Tmp2<- Din[N,2]
+ C<- Data[Tmp1:Tmp2,]
+ }
+ }
+ else{
+ C=Data[N]
+ }
+ }
+ return(C)
+}
+
+#########################################
+# 2013.05.20 Changed ( Creator recorded)
+# 2013.12.18 Beginpicture inclued
+
+Openfile<-function(...)
+{
+ varargin<- list(...)
+ File<- varargin[[1]]
+ Bflg<- 0
+ Wfile<<- File
+ Creator<- ""
+ Cflg<- 0
+ Nargs<- length(varargin)
+ for(N in Looprange(2,Nargs)){
+ Tmp<- varargin[[N]]
+ Tmp1<- strsplit(Tmp,"=",fixed=TRUE)
+ Tmp1<- Tmp1[[1]]
+ if(length(Tmp1)>1){
+ Creator<- Tmp1[2]
+ Cflg<- 1
+ }
+ else{
+ Unitstr<- Tmp
+ Bflg<- 1
+ }
+ }
+ Recentf<- ""
+ Fv<- list.files()
+ Nv<- grep("\\.r$", Fv)
+ Rfiles<- Fv[Nv]
+ StrW<- paste("%%% ",File,sep="") #17.10.28
+ StrC<- paste("%%% Generator=",Creator,sep="")
+ if(Cflg==0){
+ }
+ cat(StrW,"\n",file=Wfile)
+ cat(StrC,"\n",file=Wfile,append=TRUE)
+ if(Bflg==1){
+ Beginpicture(Unitstr)
+ }
+}
+
+#########################################
+
+Openpar<- function(...)
+{
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ Tmp<- varargin[[1]]
+ Tmp1<- substr(Tmp,1,1)
+ if(Tmp1=="\\"){
+ Namestr<- Tmp
+ N<- 2
+ }
+ else{
+ Namestr<- "\\tmp"
+ N<- 1
+ }
+ Habastr<- varargin[[N]]
+ if(Nargs>N){
+ Posstr<- paste("[",varargin[[N+1]],"]",sep="")
+ }
+ else{
+ Posstr<- "[c]"
+ }
+ Openphr(Namestr)
+ S<- paste("\\begin{minipage}",Posstr,"{",Habastr,"}%\n",sep="")
+ cat(S,file=Wfile,append=TRUE)
+}
+
+###################################
+
+Openphr<- function(Str)
+{
+ S<- paste("\\def",Str,"{%\n",sep="")
+ cat(S,file=Wfile,append=TRUE)
+}
+
+#####################################
+
+Ovalbox<- function(...)
+{
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ Pos<- varargin[[1]]
+ Dr<- varargin[[2]]
+ StrV<- varargin[[3]]
+ R<- 0.2
+ NDflg<- 0
+ for (I in Looprange(4,Nargs)){
+ Tmp<- varargin[[I]]
+ if(mode(Tmp)=="numeric"){
+ R<- Tmp
+ }
+ else{
+ if(substr(Tmp,1,1)=="-"){
+ NDflg<- 1
+ Tmp1<- substr(Tmp,2,nchar(Tmp))
+ Cmdstr<- chartr("*","G",Tmp1)
+ }
+ }
+ }
+ Xr<- c(XMIN,XMAX)
+ Yr<- c(YMIN,YMAX)
+ Uv<- 0.6; Uh<- 0.8
+ N<- nchar(StrV)
+ W<- Uh;H<- Uv*N
+ Setwindow(c(-W/2,W/2),c(-H,0))
+ G<- Ovaldata(c(0,-H/2),W/2,H/2,R)
+ Openphr("\\ketpictmp")
+ Beginpicture("1cm")
+ if(NDflg==0){
+ Drwline(G)
+ }
+ else{
+ eval(parse(text=Cmdstr))
+ }
+ for (I in Looprange(1,N)){
+ Letter(c(0,Uv/2-Uv*I),"c",Op(I,StrV))
+ }
+ Endpicture(0)
+ Closephr()
+ Setwindow(Xr,Yr)
+ Letter(Pos,Dr,"\\ketpictmp")
+}
+
+##########################################
+
+Ovaldata<- function(...) #17.09.11
+{
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ if(Nargs==1){
+ Eps<- 1.0*10^(-4)
+ C<- c((XMIN+XMAX)/2,(YMIN+YMAX)/2)
+ Dx<- XMAX-C(1)-Eps
+ Dy<- YMAX-C(2)-Eps
+ N<- 1
+ }
+ else{
+ C<- varargin[[1]]
+ Dx<- varargin[[2]]
+ Dy<- varargin[[3]]
+ N<- 4
+ }
+ Rc<- 0.2
+ if(N<=Nargs){ #15.11.15
+ Rc<- varargin[[N]]*Rc #15.11.15
+ }
+ Out<- c()
+ P<- C+c(Dx-Rc,Dy-Rc)
+ Tmp1<- Circledata(c(P,Rc),"R=c(0,pi/2)","N=10") #17.11.29
+ Tmp2<- Listplot(C+c(Dx-Rc,Dy),C+c(0,Dy))
+ Tmp3<- Listplot(C+c(Dx,0),C+c(Dx,Dy-Rc))
+ G<- Joincrvs(Tmp3,Tmp1,Tmp2)
+ Tmp<- Reflectdata(G,c(C,C+c(0,1)))
+ G<- Joincrvs(G,Tmp)
+ Tmp<- Reflectdata(G,c(C,C+c(1,0)))
+ Out<- Joincrvs(G,Tmp)
+}
+
+#########################################
+
+Paramark<- function(...)
+{
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ PA<- varargin[[1]]
+ PB<- varargin[[2]]
+ PC<- varargin[[3]]
+ R<- 0.5
+ if(Nargs>=4){
+ R<- varargin[[4]]*R
+ }
+ U<- R*(PA-PB)/Norm(PA-PB)
+ V<- R*(PC-PB)/Norm(PC-PB)
+ if(Crossprod(PA-PB,PC-PB)!=0){
+ P<- Listplot(c(PB+U,PB+U+V,PB+V))
+ }
+ else{
+ P<- c()
+ }
+}
+
+###########################################
+
+Paramoncurve<-function(...){
+ varargin<-list(...)
+ Nargs<-length(varargin)
+ Eps<-10^(-8)
+ P<-varargin[[1]]
+ Gdata<-varargin[[Nargs]]
+ if(Nrow(P)>1){
+ Tmp<-P; P<-Gdata; Gdata<-Tmp
+ }
+ if(Nargs==2){
+ Tmp<-Nearestpt(P,Gdata)
+ Out<-Tmp[[2]]
+ return(Out)
+ }
+ N<-varargin[[2]]
+ PtL<-Gdata
+ N=min(N,Length(PtL)-1) #18.02.11from
+ Pa<-Ptcrv(N,PtL)
+ Pb<-Ptcrv(N+1,PtL)
+ V<-Pb-Pa
+ W<-P-Pa
+ D2<-Norm(V)^2
+ if(D2<Eps) return(0)
+ S<-Dotprod(V,W)/D2
+ S<-min(max(S,0),1)
+ Out=N+S #18.02.11until
+ return(Out)
+}
+
+##############################################
+
+Paramplot<- function(...)
+{
+ varargin<- list(...)
+ Eps<- 10^(-5)
+ Nargs<- length(varargin)
+ Fnflg<- 0
+ Fnstr<- varargin[[1]]; Is=2
+ Rgstr<- varargin[[Is]]; Is<- Is+1
+ Tmp=strsplit(Rgstr,"=") #181017from
+ Var=Tmp[[1]][1]
+ Fnstr=Assign(Fnstr,Var,"t")
+ Rgstr=Assign(Rgstr,Var,"t") #181017from
+ Range<- c(0,2*pi)
+ N<- 50 # Numpoints
+ E<-c() # Exclusions
+ D<- Inf # Discont
+ for (I in Looprange(Is,Nargs))
+ {
+ Tmp<- varargin[[I]]
+ Tmp<- strsplit(Tmp,"=")
+ K<- Tmp[[1]]
+ Tmp<- K[1]
+ Lhs<- substring(Tmp,1,1)
+ Tmp1<- K[2]
+ Str<-paste(Lhs,"=",Tmp1,sep="")
+ eval(parse(text=Str))
+ }
+ Tmp<- strsplit(Rgstr,"=")
+ K<-Tmp[[1]]
+ if(length(K)>1)
+ {
+ Vname<- K[1]
+ Tmp1<- K[2]
+ Rng<- eval(parse(text=Tmp1))
+ }
+ else
+ {
+ Vname<- Rgstr
+ Rng<- c(0,2*pi)
+ }
+ T1<- Rng[1]; T2<- Rng[2]
+ Dt<- (T2-T1) #180929
+ if(Fnflg==0)
+ {
+ Str<- gsub(Vname,"t",Fnstr)
+ }
+ if(abs(Dt)<Eps){ # 16.12.13
+ t=T1
+ P=eval(parse(text=Str))
+ return(P)
+ }
+ P<-c()
+ if(length(E)>0)
+ {
+ E<-sort(E)
+ E<E[length(E):1]
+ }
+ E<- c(E, Inf)
+ Tmp<- sort(E)
+ E<- E[length(Tmp):1]
+ Ke<- 1
+ for(jj in 1:(N+1)){
+ t=T1+(jj-1)*Dt/N #180929
+ Pa<- c()
+ if(t-E[Ke]< Eps)
+ {
+ if(Fnflg==0)
+ {
+ Tmp<-eval(parse(text=Str))
+ Pa<- Tmp
+ }
+ else
+ {
+ }
+ }
+ if(abs(t-E[Ke])<=Eps)
+ {
+ if(Nrow(P)>0 && Op(Nrow(P),P)!=c(Inf,Inf))
+ {
+ Pa<- c(Inf,Inf)
+ }
+ }
+ if(t-E[Ke]>Eps)
+ {
+ if(Fnflg==0)
+ {
+ Tmp<- eval(parse(text=Str))
+ Pa<- Tmp
+ }
+ else
+ {
+ }
+ Ke<-Ke+1
+ }
+ if(length(Pa)>0){
+ if(Pa[1]==Inf){
+ Tmp<-Appendrow(P,Pa)
+ P<-Tmp
+ }else{
+ if(Nrow(P)==0){
+ Tmp<- Appendrow(P,Pa)
+ P<-Tmp
+ }else{
+ Tmp<- Op(Nrow(P),P)
+ if(Tmp[1]==Inf){
+ Tmp<- Appendrow(P,Pa)
+ P<- Tmp
+ }else{
+ if(Norm(Tmp-Pa)<D){
+ if(Norm(Tmp-Pa)>Eps){ #180928
+ Tmp<-Appendrow(P,Pa)
+ P<-Tmp
+ } #180928
+ }else{
+ Tmp<- Appendrow(P,c(Inf,Inf),Pa)
+ P<- Tmp
+ }
+ }
+ }
+ }
+ }
+ }
+ Tmp<- Nrow(P)
+ Tmp1<- Op(Tmp,P)
+ if(Tmp1[1]==Inf)
+ {
+ P<- P[1:(Tmp-1),]
+ }
+ return(P)
+}
+
+#####################################
+
+Partcrv<- function(A,B,PkL)
+{
+ Eps<- 10.0^(-3)
+ if(mode(A)=="numeric" && length(A)==1){
+ if(A>B+Eps){
+ Npt<- Numptcrv(PkL)
+ Out1<- Partcrv(A,Npt,PkL)
+ Out2<- Partcrv(1,B,PkL)
+ Tmp<- Ptstart(PkL)-Ptend(PkL)
+ if(Norm(Tmp)<Eps){
+ Ans<- Joincrvs(Out1,Out2)
+ }
+ else{
+ Ans<- list(Out1,Out2)
+ }
+ return(Ans)
+ }
+ Is<- ceiling(A)
+ Ie<- floor(B)
+ PL<- c()
+ if(A<Is-Eps){
+ P<- (Is-A)*PkL[Is-1,]+(1-Is+A)*PkL[Is,]
+ PL<- c(P)
+ }
+ PL<- Appendrow(PL, PkL[Looprange(Is,Ie),])
+ if(B>Ie+Eps){
+ P<- (1-B+Ie)*PkL[Ie,]+(B-Ie)*PkL[Ie+1,]
+ PL<- Appendrow(PL,P)
+ }
+ Ans<- PL
+ return(Ans)
+ }
+ Tmp<- Nearestpt(A,PkL)
+ Ta<- Op(2,Tmp)
+ Tmp<- Nearestpt(B,PkL)
+ Tb<- Op(2,Tmp)
+ Ans<- Partcrv(Ta,Tb,PkL)
+}
+
+##########################################
+# 13.05.03
+
+Partframe<- function(Tb,St,Ed)
+{
+ G<- Dividetable(Tb)
+ Gw<- G[[1]]
+ Gt<- G[[2]]
+ Gy<- G[[3]]
+ Gwt<- Tb[[4]]
+ Gwy<- Tb[[5]]
+ Gat<- c(list(Gwt[[1]]),Gt,list(Gwt[[2]]))
+ Gay<- c(list(Gwy[[1]]),Gy,list(Gwy[[2]]))
+ Tmp1<- Ptstart(Gat[[St[1]]])
+ Tmp2<- Ptstart(Gay[[St[2]]])
+ Ps<- c(Tmp1[1],Tmp2[2])
+ Tmp1<- Ptstart(Gat[[Ed[1]]])
+ Tmp2<- Ptstart(Gay[[Ed[2]]])
+ Pe<- c(Tmp1[1],Tmp2[2])
+ Pars<- Paramoncurve(Ps,Gw)
+ Pare<- Paramoncurve(Pe,Gw)
+ if(Pars<Pare){
+ Out<- Partcrv(Pars,Pare,Gw)
+ }
+ else{
+ Tmp1<- Partcrv(Pars,Numptcrv(Gw),Gw)
+ Tmp2<- Partcrv(1,Pare,Gw)
+ Out<- Joincrvs(Tmp1,Tmp2)
+ }
+return(Out)
+}
+
+
+##########################################
+# 10.12.04
+
+Plotdata<- function(...)
+{
+ varargin<- list(...)
+ Eps<- 10^(-5)
+ Fnstr<- varargin[[1]]; Is<- 2
+ Fnstr=Assign(Fnstr) #180510(for KeTCindy)
+ Fnflg<- 0
+ Rgstr<- varargin[[Is]]; Is<- Is+1
+ Rgstr=Assign(Rgstr) #180510(for KeTCindy)
+ Tmp<- strsplit(Rgstr,"=")
+ K<-Tmp[[1]]
+ if(length(K)>1){
+ Vname<- K[1]
+ Tmp1<- K[2]
+ Rng<- eval(parse(text=Tmp1))
+ }
+ else{
+ Vname<- Rgstr
+ Rng<- c(XMIN,XMAX)
+ }
+ N<- 50 # Numpoints
+ E<-c() # Exclusions
+ Exfun<- "" # Exclusion function
+ D<- Inf # Discont
+ for (I in Looprange(Is,length(varargin))){
+ Tmp<- varargin[[I]]
+ Lhs<- substring(Tmp,1,1)
+ Tmp<- strsplit(Tmp,"=")
+ K<- Tmp[[1]]
+ Tmp1<- K[2]
+ Tmp2<- grep(Vname,Tmp1,fixed=TRUE) ## 10.12.04
+ if(length(Tmp2)==0){
+ Str<-paste(Lhs,"=",Tmp1,sep="")
+ eval(parse(text=Str))
+ }
+ else{
+ Exfun<-Tmp1
+ }
+ }
+ X1<- Rng[1]; X2<- Rng[2]
+ dx<- (X2-X1) #180929
+ if(Fnflg==0){
+ Str<- gsub(Vname,"x",Fnstr,fixed=TRUE)
+ }
+ if(abs(dx/N)<Eps){ #180929
+ x=X1
+ P=c(X1,eval(parse(text=Str)))
+ return(P)
+ }
+ Exfun<- gsub(Vname,"x",Exfun,fixed=TRUE)
+ P<-c()
+ if(length(E)>0){
+ E<-sort(E)
+ E<E[length(E):1]
+ }
+ E<- c(E, Inf)
+ Tmp<- sort(E)
+ E<- E[length(Tmp):1]
+ Ke<- 1
+ for (J in 0:N){ #180929
+ x=X1+dx*J/N #180929
+ if(nchar(Exfun)>0){
+ Tmp<-eval(parse(text=Exfun))
+ if(abs(Tmp)<Eps){
+ P<- Appendrow(P,c(Inf,inf))
+ next
+ }
+ }
+ Pa<- c()
+ if(x-E[Ke]< -Eps){ ## 10.12.04
+ Tmp<-eval(parse(text=Str))
+ Pa<- c(x,Tmp)
+ }
+ if(abs(x-E[Ke])<=Eps){
+ if(Nrow(P)>0 && P[Nrow(P),]!=c(Inf,Inf)){
+ Pa<- c(Inf,Inf)
+ }
+ }
+ if(x-E[Ke]>Eps){
+ Tmp<- eval(parse(text=Str))
+ Pa<- c(x,Tmp)
+ Ke<-Ke+1
+ }
+ if(length(Pa)>0){
+ if((abs(Pa[1])==Inf)||(abs(Pa[2])==Inf)){ #190409
+ Pa=c(Inf,Inf) #190322
+ Tmp<-Appendrow(P,Pa)
+ P<-Tmp
+ }
+ else{
+ if(Nrow(P)==0){
+ Tmp<- Appendrow(P,Pa)
+ P<-Tmp
+ }
+ else{
+ Tmp<- P[Nrow(P),]
+ if(Tmp[1]==Inf){
+ Tmp<- Appendrow(P,Pa)
+ P<- Tmp
+ }
+ else{
+ if(Norm(Tmp-Pa)<D){
+ Tmp<-Appendrow(P,Pa)
+ P<-Tmp
+ }
+ else{
+ Tmp<- Appendrow(P,c(Inf,Inf),Pa)
+ P<- Tmp
+ }
+ }
+ }
+ }
+ }
+ }
+ Tmp<- Nrow(P)
+ Tmp1<-P[Tmp,]
+ if(Tmp1[1]==Inf)
+ {
+ P<- P[1:(Tmp-1),]
+ }
+ return(P)
+}
+
+######################################
+
+Pointoncurve<-function(...)
+{
+ varargin<-list(...)
+ Eps<-10^(-4)
+ T<-varargin[[1]]
+ Gdata<-varargin[[2]]
+ if(Nrow(T)>1)
+ {
+ Tmp<-T; T<-Gdata; Gdata<-Tmp
+ }
+ PtL<-Gdata
+ N<-trunc(T+Eps);
+ S<-max(T-N,0);
+ if(N==Nrow(PtL))
+ {
+ Out<-PtL[N,]
+ }
+ else
+ {
+ Pa<-PtL[N,]
+ Pb<-PtL[N+1,]
+ Out<-(1-S)*Pa+S*Pb
+ }
+ return(Out)
+}
+
+##############################################
+# 10.11.20
+# 13.05.03 Inf
+
+Pointdata<-function(...)
+{
+ varargin<-list(...)
+ Nargs<-length(varargin)
+ PL<- list()
+ for (I in Looprange(1,Nargs)){ # 10.11.20
+ DL<-varargin[[I]]
+ DL<- Flattenlist(DL) # 10.11.20 from here
+ for (J in Looprange(1,length(DL))){
+ Dt<- DL[[J]]
+ if(is.matrix(Dt)|| is.data.frame(Dt)){
+ for (K in 1:nrow(Dt)){
+ Tmp<- as.numeric(Dt[K,])
+ if(Tmp[1]<Inf){
+ PL<- c(PL,list(Tmp))
+ }
+ }
+ }
+ else{
+ PL<- c(PL,list(Dt))
+ }
+ }
+ } # to here
+ if(length(PL)==1)
+ {
+ PL<-PL[[1]]
+ }
+ return(PL)
+}
+
+##############################################
+
+Prime<- function(...)
+{
+ varargin<- list(...)
+ if(length(varargin)==0){
+ Out="'"
+ }
+ else{
+ Out<- paste(varargin[[1]],"'",sep="")
+ }
+ return(Out)
+}
+
+############################################
+# 17.09.29
+
+Ptcrv<-function(N,Fig)
+{
+ if(is.matrix(Fig)){
+ return(Fig[N,])
+ }
+ else{
+ return(Fig)
+ }
+}
+
+#########################################
+
+Ptend<-function(Fig)
+{
+ if(Length(Fig)>0){ #18.02.09
+ return(Op(Length(Fig),Fig))
+ }else{
+ return(c())
+ }
+}
+
+#########################################
+
+Ptne<-function(...)
+{
+ varargin<- list(...)
+ if(length(varargin)==0){
+ Out<- c(XMAX,YMAX)
+ }
+ else{
+ G<- varargin[[1]]
+ XM<- max(G[,1])
+ YM<- max(G[,2])
+ Out<- c(XM,YM)
+ }
+ return(Out)
+}
+
+#########################################
+
+Ptnw<-function(...)
+{
+ varargin<- list(...)
+ if(length(varargin)==0){
+ Out<- c(XMIN,YMAX)
+ }
+ else{
+ G<- varargin[[1]]
+ Xm<- min(G[,1])
+ YM<- max(G[,2])
+ Out<- c(Xm,YM)
+ }
+ return(Out)
+}
+
+#########################################
+
+Ptse<-function(...)
+{
+ varargin<- list(...)
+ if(length(varargin)==0){
+ Out<- c(XMAX,YMIN)
+ }
+ else{
+ G<- varargin[[1]]
+ XM<- max(G[,1])
+ Ym<- min(G[,2])
+ Out<- c(XM,Ym)
+ }
+ return(Out)
+}
+
+#############################################
+
+Ptstart<-function(Fig)
+{
+ if(Length(Fig)>0){ #18.02.09
+ return(Op(1,Fig))
+ }else{
+ return(c())
+ }
+}
+
+#########################################
+
+Ptsw<-function(...)
+{
+ varargin<- list(...)
+ if(length(varargin)==0){
+ Out<- c(XMIN,YMAX)
+ }
+ else{
+ G<- varargin[[1]]
+ Xm<- min(G[,1])
+ Ym<- min(G[,2])
+ Out<- c(Xm,Ym)
+ }
+ return(Out)
+}
+
+##############################################
+
+Putcell<- function(...)
+{
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ TbL<- varargin[[1]]
+ Str<- varargin[[Nargs]]
+ if(mode(Str)=="numeric"){
+ Str<- as.character(Str)
+ }
+ Pos<- varargin[[Nargs-1]]
+ Nrg<- varargin[[2]]
+ if(mode(Nrg)=="character"){
+ if(Nargs==4){
+ Cell<- Findcell(TbL,Nrg)
+ }
+ else{
+ Mrg<- varargin[[3]]
+ Cell<- Findcell(TbL,Nrg,Mrg)
+ }
+ }
+ else{
+ Mrg<- varargin[[3]]
+ Cell<- Findcell(TbL,Nrg,Mrg)
+ }
+ Pt<- Cell[[1]]; Dr<- "c"
+ Posh<- substr(Pos,1,1)
+ Post<- substr(Pos,2,nchar(Pos))
+ if(toupper(Posh)=="R"){
+ Pt<- Pt+c(Cell[[2]],0)
+ if(nchar(Post)==0){
+ Dr<- "w1"
+ }
+ else{
+ Dr<- paste("w",Post,sep="")
+ }
+ }
+ if(toupper(Posh)=="L"){
+ Pt=Pt-c(Cell[[2]],0)
+ if(nchar(Post)==0){
+ Dr<- "e1"
+ }
+ else{
+ Dr<- paste("e",Post,sep="")
+ }
+ }
+ if(toupper(Posh)=="U"){
+ Pt<- Pt+c(0,Cell[[3]])
+ if(nchar(Post)==0){
+ Dr<- "s1"
+ }
+ else{
+ Dr<- paste("s",Post,sep="")
+ }
+ }
+ if(toupper(Posh)=="D"){
+ Pt<- Pt-c(0,Cell[[3]])
+ if(nchar(Post)==0){
+ Dr<- "n1"
+ }
+ else{
+ Dr<- paste("n",Post,sep="")
+ }
+ }
+ if(toupper(Posh)=="B"){
+ Pt<- Pt-c(0,Cell[[3]])
+ if(nchar(Post)==0){
+ Dr<- "n1"
+ }
+ else{
+ Dr<- paste("n",Post,sep="")
+ }
+ Str<- paste("$\\mathstrut$",Str,sep="")
+ }
+ Letter(Pt,Dr,Str)
+}
+
+#############################################
+
+PutcoL<- function(...)
+{
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ TbL<- varargin[[1]]
+ if(mode(TbL)!="list"){
+ return("Tabledata missing")
+ }
+ Ag<- varargin[[2]]
+ if(mode(Ag)=="numeric"){
+ CoL<- Ag
+ }
+ else{
+ Alpha<- "-ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+ Clm<- c()
+ for (I in Looprange(1,nchar(Ag))){
+ C<- substr(Ag,I,I)
+ C<- toupper(C)
+ Tmp<- strsplit(Alpha,C)
+ Tmp<- Tmp[[1]]
+ if(length(Tmp)>1){
+ Tmp1<- nchar(Tmp[1])
+ Clm<- c(Clm,Tmp1)
+ }
+ }
+ Nrg<- 0
+ for (I in seq(length(Clm),1,by=-1)){
+ Tmp<- Clm[I]
+ Tmp1<- length(Clm)-I
+ Nrg<- Nrg+Tmp*26^Tmp1
+ }
+ CoL<- Nrg
+ }
+ Nc<- length(TbL[[3]])+1
+ K<- 1
+ Dpos<- varargin[[3]]
+ for (I in Looprange(4,Nargs)){
+ if(I-3>Nc){
+ break
+ }
+ Dt<- varargin[[I]]
+ if(mode(Dt)!="list"){
+ Putcell(TbL,CoL,K,Dpos,Dt) # 2011.03.02
+ K<- K+1
+ }
+ else{
+ N<- length(Dt)
+ Str<- Dt[[N]]
+ Rrng<- c(K,K+1)
+ Pos<- Dpos
+ for (J in Looprange(1,N-1)){
+ Tmp<- Dt[[J]]
+ if(mode(Tmp)=="numeric"){
+ Rrng<- c(K,K+Tmp)
+ }
+ if(mode(Tmp)=="character"){
+ Pos<- Tmp
+ }
+ }
+ Putcell(TbL,CoL,Rrng,Pos,Str)
+ K<- Crng[2]
+ }
+ }
+}
+
+Putcol<- function(...)
+{
+ PutcoL(...)
+}
+
+PutcoLexpr<- function(...)
+{
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ TbL<- varargin[[1]]
+ if(mode(TbL)!="list"){
+ return("Tabledata missing")
+ }
+ Ag<- varargin[[2]]
+ if(mode(Ag)=="numeric"){
+ CoL<- Ag
+ }
+ else{
+ Alpha<- "-ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+ Clm<- c()
+ for (I in Looprange(1,nchar(Ag))){
+ C<- substr(Ag,I,I)
+ C<- toupper(C)
+ Tmp<- strsplit(Alpha,C)
+ Tmp<- Tmp[[1]]
+ if(length(Tmp)>1){
+ Tmp1<- nchar(Tmp[1])
+ Clm<- c(Clm,Tmp1)
+ }
+ }
+ Nrg<- 0
+ for (I in seq(length(Clm),1,by=-1)){
+ Tmp<- Clm[I]
+ Tmp1<- length(Clm)-I
+ Nrg<- Nrg+Tmp*26^Tmp1
+ }
+ CoL<- Nrg
+ }
+ Nc<- length(TbL[[3]])+1
+ K<- 1
+ Dpos<- varargin[[3]]
+ for (I in Looprange(4,Nargs)){
+ if(I-3>Nc){
+ break
+ }
+ Dt<- varargin[[I]]
+ if(mode(Dt)!="list"){
+ Dt<- paste("$",Dt,"$",sep="")
+ Putcell(TbL,CoL,K,Dpos,Dt) # 2011.03.02
+ K<- K+1
+ }
+ else{
+ N<- length(Dt)
+ Str<- paste("$",Dt[[N]],"$",sep="")
+ Rrng<- c(K,K+1)
+ Pos<- Dpos
+ for (J in Looprange(1,N-1)){
+ Tmp<- Dt[[J]]
+ if(mode(Tmp)=="numeric"){
+ Rrng<- c(K,K+Tmp)
+ }
+ if(mode(Tmp)=="character"){
+ Pos<- Tmp
+ }
+ }
+ Putcell(TbL,CoL,Rrng,Pos,Str)
+ K<- Crng[2]
+ }
+ }
+}
+
+Putcolexpr<- function(...)
+{
+ PutcoLexpr(...)
+}
+
+#####################################################
+
+PutcoLstr<- function(...)
+{
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ Tb<- varargin[[1]]
+ Nr<- varargin[[2]]
+ Pos<- varargin[[3]]
+ Str<- varargin[[4]]
+ Sep<- ""
+ if(Nargs>4){
+ Sep<- varargin[[5]]
+ }
+ if(nchar(Sep)==0){
+ for (I in Looprange(1,nchar(Str))){
+ Tmp<- substr(Str,I,I)
+ Putcell(Tb,Nr,I,Pos,Tmp)
+ }
+ }
+ else{
+ Ltr<- ""
+ K<- 1
+ for (I in Looprange(1,length(Str))){
+ Tmp<- substr(Str,I,I)
+ if(Tmp==Sep){
+ Putcell(Tb,Nr,K,Pos,Ltr)
+ K<- K+1
+ Ltr<- ""
+ }
+ else{
+ Ltr<- paste(Ltr,Tmp,sep="")
+ }
+ }
+ if(nchar(Ltr)>0){
+ Putcell(Tb,Nr,K,Pos,Ltr)
+ }
+ }
+}
+
+#############################################
+
+Putrow<- function(...)
+{
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ TbL<- varargin[[1]]
+ if(mode(TbL)!="list"){
+ return("Tabledata missing")
+ }
+ Row<- varargin[[2]]
+ Nr<- length(TbL[[2]])+1
+ K<- 1
+ Dpos<- varargin[[3]]
+ for (I in Looprange(4,Nargs)){
+ if(I-3>Nr){
+ break;
+ }
+ Dt<- varargin[[I]]
+ if(mode(Dt)!="list"){
+ Putcell(TbL,K,Row,Dpos,Dt) # 110308
+ K<- K+1
+ }
+ else{
+ N<- length(Dt)
+ Str<- Dt[[N]]
+ Crng<- c(K,K+1)
+ Pos<- Dpos
+ for (J in Looprange(1,N-1)){
+ Tmp<- Dt[[J]]
+ if(mode(Tmp)=="numeric"){
+ Crng<- c(K,K+Tmp)
+ }
+ if(mode(Tmp)=="character"){
+ Pos<- Tmp
+ }
+ }
+ Putcell(TbL,Crng,Row,Pos,Str)
+ K<- Crng[2]
+ }
+ }
+}
+
+Putrowexpr<- function(...)
+{
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ TbL<- varargin[[1]]
+ if(mode(TbL)!="list"){
+ return("Tabledata missing")
+ }
+ Row<- varargin[[2]]
+ Nr<- length(TbL[[2]])+1
+ K<- 1
+ Dpos<- varargin[[3]]
+ for (I in Looprange(4,Nargs)){
+ if(I-3>Nr){
+ break;
+ }
+ Dt<- varargin[[I]]
+ if(mode(Dt)!="list"){
+ Dt<- paste("$",Dt,"$",sep="")
+ Putcell(TbL,K,Row,Dpos,Dt) #110308
+ K<- K+1
+ }
+ else{
+ N<- length(Dt)
+ Str<- paste("$",Dt[[N]],"$",sep="")
+ Crng<- c(K,K+1)
+ Pos<- Dpos
+ for (J in Looprange(1,N-1)){
+ Tmp<- Dt[[J]]
+ if(mode(Tmp)=="numeric"){
+ Crng<- c(K,K+Tmp)
+ }
+ if(mode(Tmp)=="character"){
+ Pos<- Tmp
+ }
+ }
+ Putcell(TbL,Crng,Row,Pos,Str)
+ K<- Crng[2]
+ }
+ }
+}
+
+####################################################
+
+Putrowstr<- function(...)
+{
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ Tb<- varargin[[1]]
+ Nr<- varargin[[2]]
+ Pos<- varargin[[3]]
+ Str<- varargin[[4]]
+ Sep<- ""
+ if(Nargs>4){
+ Sep<- varargin[[5]]
+ }
+ if(nchar(Sep)==0){
+ for (I in Looprange(1,nchar(Str))){
+ Tmp<- substr(Str,I,I)
+ Putcell(Tb,I,Nr,Pos,Tmp)
+ }
+ }
+ else{
+ Ltr<- ""
+ K<- 1
+ for (I in Looprange(1,length(Str))){
+ Tmp<- substr(Str,I,I)
+ if(Tmp==Sep){
+ Putcell(Tb,K,Nr,Pos,Ltr)
+ K<- K+1
+ Ltr<- ""
+ }
+ else{
+ Ltr<- paste(Ltr,Tmp,sep="")
+ }
+ }
+ if(nchar(Ltr)>0){
+ Putcell(Tb,K,Nr,Pos,Ltr)
+ }
+ }
+}
+
+############################################
+# 11.05.28
+
+Ratiocmyk<- function(Color)
+{
+ if(is.numeric(Color)){
+ return(Color)
+ }
+ R<-
+ switch(Color,
+ greenyellow=c(0.15,0,0.69,0),
+ yellow=c(0,0,1,0),
+ goldenrod=c(0,0.1,0.84,0),
+ dandelion=c(0,0.29,0.84,0),
+ apricot=c(0,0.32,0.52,0),
+ peach=c(0,0.5,0.7,0),
+ melon=c(0,0.46,0.5,0),
+ yelloworange=c(0,0.42,1,0),
+ orange=c(0,0.61,0.87,0),
+ burntorange=c(0,0.51,1,0),
+ bittersweet=c(0,0.75,1,0.24),
+ redorange=c(0,0.77,0.87,0),
+ mahogany=c(0,0.85,0.87,0.35),
+ maroon=c(0,0.87,0.68,0.32),
+ brickred=c(0,0.89,0.94,0.28),
+ red=c(0,1,1,0),
+ orangered=c(0,1,0.5,0),
+ rubinered=c(0,1,0.13,0),
+ wildstrawberry=c(0,0.96,0.39,0),
+ salmon=c(0,0.53,0.38,0),
+ carnationpink=c(0,0.63,0,0),
+ magenta=c(0,1,0,0),
+ violetred=c(0,0.81,0,0),
+ rhodamine=c(0,0.82,0,0),
+ mulberry=c(0.34,0.9,0,0.02),
+ redviolet=c(0.07,0.9,0,0.34),
+ fuchsia=c(0.47,0.91,0,0.08),
+ lavender=c(0,0.48,0,0),
+ thistle=c(0.12,0.59,0,0),
+ orchid=c(0.32,0.64,0,0),
+ darkorchid=c(0.4,0.8,0.2,0),
+ purple=c(0.45,0.86,0,0),
+ plum=c(0.5,1,0,0),
+ violet=c(0.79,0.88,0,0),
+ royalpurple=c(0.75,0.9,0,0),
+ blueviolet=c(0.86,0.91,0,0.04),
+ periwinkle=c(0.57,0.55,0,0),
+ cadetblue=c(0.62,0.57,0.23,0),
+ cornflowerblue=c(0.65,0.13,0,0),
+ midnightblue=c(0.98,0.13,0,0.43),
+ navyblue=c(0.94,0.54,0,0),
+ royalblue=c(1,0.5,0,0),
+ blue=c(1,1,0,0),
+ cerulean=c(0.94,0.11,0,0),
+ cyan=c(1,0,0,0),
+ processblue=c(0.96,0,0,0),
+ skyblue=c(0.62,0,0.12,0),
+ turquoise=c(0.85,0,0.2,0),
+ tealblue=c(0.86,0,0.34,0.02),
+ aquamarine=c(0.82,0,0.3,0),
+ bluegreen=c(0.85,0,0.33,0),
+ emerald=c(1,0,0.5,0),
+ junglegreen=c(0.99,0,0.52,0),
+ seagreen=c(0.69,0,0.5,0),
+ green=c(1,0,1,0),
+ forestgreen=c(0.91,0,0.88,0.12),
+ pinegreen=c(0.92,0,0.59,0.25),
+ limegreen=c(0.5,0,1,0),
+ yellowgreen=c(0.44,0,0.74,0),
+ springgreen=c(0.26,0,0.76,0),
+ olivegreen=c(0.64,0,0.95,0.4),
+ rawsienna=c(0,0.72,1,0.45),
+ sepia=c(0,0.83,1,0.7),
+ brown=c(0,0.81,1,0.6),
+ tan=c(0.14,0.42,0.56,0),
+ gray=c(0,0,0,0.5),
+ black=c(0,0,0,1),
+ white=c(0,0,0,0)
+ )
+ if(length(R)<4){
+ print("No color")
+ return(c())
+ }
+ return(R)
+}
+
+############################################
+# 11.01.07
+
+Readtextdata<- function(...)
+{
+ varargin<- list(...)
+ OutL<- list()
+ Nargs<- length(varargin)
+ Fname<- varargin[[1]]
+ Tmp<- readLines(Fname,n=1)
+ if(length(grep("\t",Tmp))>0){
+ Sep<- "\t"
+ }
+ else if(length(grep(",",Tmp))>0){
+ Sep<- ","
+ }
+ else{
+ Sep<- " "
+ }
+ Hajime<- c(1,1)
+ Owari<- c(Inf,Inf)
+ C<- Inf
+ R<- Inf
+ Rna<- FALSE
+ Cna<- TRUE
+ Mat<- FALSE
+ Num<- TRUE
+ D<- -Inf
+ Flg<- 0
+ for (I in Looprange(2,Nargs)){
+ Tmp<- varargin[[I]]
+ if(mode(Tmp)=="numeric"){
+ if (Flg==0){
+ Hajime<- Tmp
+ Flg<- 1
+ }
+ else{
+ Owari<- Tmp
+ }
+ }
+ else{
+ eval(parse(text=Tmp))
+ }
+ }
+ Tmp<- Hajime+c(R-1,C-1)
+ Owari<- c(min(Owari[1],Tmp[1]),min(Owari[2],Tmp[2]))
+ if(Cna){
+ Df<- read.table(Fname,sep=Sep,header=TRUE,,stringsAsFactors=FALSE)
+ }
+ else{
+ Df<- read.table(Fname,sep=Sep,header=FALSE,,stringsAsFactors=FALSE)
+ Nv<- c(1:ncol(Df))
+ colnames(Df)<- Nv
+ }
+ if(Rna){
+ rownames(Df)<-Df[,1]
+ Hajime<- Hajime+c(0,1)
+ }
+ if(Mat){
+ M<- as.matrix(Df)
+ Tmp1<- min(Owari[1],nrow(M))
+ Tmp2<- min(Owari[2],ncol(M))
+ Out<- as.matrix(M[Hajime[1]:Tmp1,Hajime[2]:Tmp2])
+ if(Num){
+ Tmp1<- as.numeric(Out)
+ Out<- matrix(Tmp1,nrow=nrow(Out))
+ }
+ }
+ else{
+ Tmp1<- min(Owari[1],nrow(Df))
+ Tmp2<- min(Owari[2],ncol(Df))
+ Out<- Df[Hajime[1]:Tmp1,Hajime[2]:Tmp2]
+ }
+ if(D!=-Inf){ # 11.01.20 v2
+ Tmp<- ncol(Out) # 11.01.07
+ Tmp1<- rep(Inf,Tmp)
+ Out[Out[,1]<=D,]<- Tmp1 # 11.01.07
+ }
+ return(Out)
+}
+
+##################################
+
+Reflectdata<- function(...)
+{
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ Eps<- 10^(-8)
+ ML<- varargin[[1]]
+ if(Mixtype(ML)==1){
+ ML<- list(ML)
+ }
+ if(Nargs==1){
+ PtA<- c(0,0); PtB<- PtA
+ }
+ else{
+ Pts<- varargin[[2]]
+ if(length(Pts)==2){
+ PtA<- Pts; PtB<- PtA
+ }
+ else{
+ PtA<- Pts[1:2]; PtB<- Pts[3:4]
+ }
+ }
+ ML=Flattenlist(ML) #180603
+ OutL<- list()
+ for (N in Looprange(1,Length(ML))){
+ GL<- Op(N,ML)
+ if(!is.matrix(GL)){GL=matrix(GL,ncol=2)} #180603
+ Out<- c()
+ for (I in Looprange(1,Length(GL))){
+ Tmp<- GL[I,]
+ X1<- Tmp[1]
+ Y1<- Tmp[2]
+ if(X1==Inf){
+ X2<- X1
+ Y2<- Y1
+ }
+ else{
+ if(Norm(PtA-PtB)<Eps){
+ X2<- 2*PtA[1]-X1
+ Y2<- 2*PtA[2]-Y1
+ }
+ else{
+ U<- PtB[1]-PtA[1]
+ V<- PtB[2]-PtA[2]
+ A<- PtA[1]
+ B<- PtA[2]
+ X2<- (U^2-V^2)/(U^2+V^2)*X1+2*U*V/(U^2+V^2)*Y1
+ X2<- X2-2*V*(U*B-V*A)/(U^2+V^2)
+ Y2<- 2*U*V/(U^2+V^2)*X1-(U^2-V^2)/(U^2+V^2)*Y1
+ Y2<- Y2+2*U*(U*B-V*A)/(U^2+V^2)
+ }
+ }
+ Out<- Appendrow(Out,c(X2,Y2))
+ }
+ OutL<- Mixjoin(OutL,list(Out))
+ }
+ if(length(OutL)==1){
+ OutL<- Op(1,OutL)
+ }
+ return(OutL)
+}
+
+##########################################
+
+Writetextdata<- function(...)
+{
+ varargin<- list(...)
+ OutL<- list()
+ Nargs<- length(varargin)
+ Data<- varargin[[1]]
+ Fname<- varargin[[2]]
+ Sep=","
+ for (I in Looprange(3,Nargs)){
+ Tmp<- varargin[[I]]
+ eval(parse(text=Tmp))
+ }
+ write.table(Data,Fname,sep=Sep,row.names=FALSE,na="")
+}
+
+##########################################
+# 2014.12.17
+# 2015.10.29
+
+WriteOutData<- function(...){
+ varargin<- list(...)
+ Nargs<- length(varargin)
+# if modulo(Nargs,2)==0 then
+# Fname=Fnameout;
+# Nst=1;
+# else
+ Fname=varargin[[1]]
+ Nst=2;
+# end;
+ for(N in seq(Nst,Nargs,by=2)){
+ Gname=varargin[[N]]
+ Tmp=paste(Gname,"//",sep="")
+ if(N==Nst){
+ cat(Tmp,"\n",sep="",file=Fname)
+ }
+ else{
+ cat(Tmp,"\n",sep="",file=Fname,append=TRUE)
+ }
+ Gdata=varargin[[N+1]]
+ Gdata=Flattenlist(Gdata)
+ if(!is.list(Gdata)){Gdata=list(Gdata)}
+ for(K in Looprange(1,length(Gdata))){
+ GL=Dividegraphics(Gdata[[K]])
+# for(J in seq(1,length(GL))){
+ for(J in Looprange(1,length(GL))){
+ cat("start//","\n",sep="",file=Fname,append=TRUE)
+ Str=""
+ Iend=Numptcrv(GL[[J]])
+# for(II in seq(1,Iend)){
+ for(II in Looprange(1,Iend)){
+ Pt=Ptcrv(II,GL[[J]])
+ if(nchar(Str)>0){
+ Str=paste(Str,",",sep="")
+ }
+ if(length(Pt)<3){
+ Str=paste(Str,sprintf("[%5.5f,%5.5f]",Pt[1],Pt[2]),sep="")
+ }
+ else{
+ Str=paste(Str,sprintf("[%5.5f,%5.5f,%5.5f]",Pt[1],Pt[2],Pt[3]),sep="")
+ }
+ if(nchar(Str)>80){
+ cat("[",Str,"]//","\n",sep="",file=Fname,append=TRUE)
+ Str=""
+ }
+ }
+ if(nchar(Str)>0){
+ cat("[",Str,"]//","\n",sep="",file=Fname,append=TRUE)
+ }
+ if((N==Nargs-1) & (K==length(Gdata)) & (J==length(GL))){
+# cat("end////","\n",sep="",file=Fname,append=TRUE)
+ cat("end//","\n",sep="",file=Fname,append=TRUE)
+ }
+ else{
+ cat("end//","\n",sep="",file=Fname,append=TRUE)
+ }
+ }
+ }
+ }
+ cat("//","\n",sep="",file=Fname,append=TRUE) # 15.11.05
+}
+
+###### Old ####################################
+# 2015.10.23
+ReadOutData<- function(...){
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ Fname=varargin[[1]]
+ cmdall=readLines(Fname)
+ cmdall=gsub("//","",cmdall,fixed=TRUE)
+ varname=cmdall[1]
+ outdt=list()
+ varL=c()
+ ptL=list()
+ flg=0
+ for(cmd in cmdall){
+ if(nchar(cmd)>0){
+ if((cmd=="start") | cmd=="end" | substring(cmd,1,1)=="["){
+ if(cmd=="start"){
+ pts=c()
+ }
+ if(cmd=="end"){
+ ptL=c(ptL,list(pts))
+ }
+ if(substring(cmd,1,1)=="["){
+ tmp1=paste(",",substring(cmd,2,nchar(cmd)-1),sep="")
+ tmp1=strsplit(tmp1,"]",fixed=TRUE)
+ tmp1=tmp1[[1]]
+ tmp1=gsub(",[","c(",tmp1,fixed=TRUE)
+ for(st in tmp1){
+ tmp=eval(parse(text=paste(st,")",sep="")))
+ pts=rbind(pts,tmp)
+ }
+ row.names(pts)=1:nrow(pts)
+ }
+ }
+ else{
+ varname=cmd
+ varL=c(varL,varname)
+ if(flg==0){ # 17.10.07from
+ flg=1
+ }else{
+ outdt=c(outdt,list(ptL))
+ } # 17.10.07until
+ ptL=c()
+ }
+ }
+ }
+ outdt=c(outdt,list(ptL)) # 17.10.07
+ names(outdt)=varL
+ for(var in varL){
+ tmp=paste(var,"<<- outdt$",var,sep="")
+ eval(parse(text=tmp))
+ }
+# print(varL)
+ outdt
+}
+
+####################################################
+
+ReadOutData<- function(...){ #2017.10.23
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ Fname=varargin[[1]]
+ cmdall=readLines(Fname)
+ cmdall=gsub("//","",cmdall,fixed=TRUE)
+ varname=""#17.12.13 cmdall[1]
+ outdt=list()
+ varL=c()
+ ptL=list()
+ flg=0
+ for(cmd in cmdall){
+ if(nchar(cmd)>0){
+ if((cmd=="start") | cmd=="end" | substring(cmd,1,1)=="["){
+ if(cmd=="start"){
+ tmp=paste(varname,"<<- c(",varname,",list(c()))",sep="")
+ eval(parse(text=tmp))
+ Ctr=Ctr+1
+ }
+ if(cmd=="end"){
+ }
+ if(substring(cmd,1,1)=="["){
+ tmp1=paste(",",substring(cmd,2,nchar(cmd)-1),sep="")
+ tmp1=strsplit(tmp1,"]",fixed=TRUE)
+ tmp1=tmp1[[1]]
+ tmp1=gsub(",[","c(",tmp1,fixed=TRUE)
+ for(st in tmp1){
+ tmp=paste(varname,"[[",as.character(Ctr),"]]",sep="")
+ tmp=paste(tmp,"<<- rbind(",tmp,",",st,"))",sep="")#
+ eval(parse(text=tmp))
+ }
+ }
+ }
+ else{
+ # 17.12.13from
+ if(nchar(varname)>0){
+ tmp=paste("if(length(",varname,")==1){",varname,"<<- ",varname,"[[1]]}",sep="")
+ eval(parse(text=tmp))
+ }
+ # 17.12.13until
+ varname=cmd
+ tmp=paste(varname,"<<- list()",sep="")
+ eval(parse(text=tmp))
+ Ctr=0
+ if(flg==0){ # 17.10.07from
+ flg=1
+ }else{
+ } # 17.10.07until
+ }
+ }
+ }
+ # 17.12.13from
+ tmp=paste("if(length(",varname,")==1){",varname,"<<- ",varname,"[[1]]}",sep="")
+ eval(parse(text=tmp))
+ # 17.12.13until
+}
+
+####################################################
+
+Rotatedata<- function(..., deg=FALSE)
+{
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ Eps<- 10^(-8)
+ ML<- varargin[[1]]
+ if(Mixtype(ML)==1){
+ ML<- list(ML)
+ }
+ Theta<- varargin[[2]]
+ if(deg) Theta<- Theta*pi/180 # 10.12.07
+ if(Nargs==2){
+ Pt<- c(0,0)
+ }
+ else{
+ Pt<- varargin[[3]]
+ }
+ ML=Flattenlist(ML) #180603
+ Cx<- Pt[1]; Cy<- Pt[2]
+ OutL<- c()
+ for (N in Looprange(1,Length(ML))){
+ GL<- Op(N,ML)
+ if(!is.matrix(GL)){GL=matrix(GL,ncol=2)} #180603
+ Out<- c()
+ for (I in Looprange(1,Length(GL))){
+ Tmp<- GL[I,]
+ X1<- Tmp[1]
+ Y1<- Tmp[2]
+ if(X1==Inf){
+ X2<- X1
+ Y2<- Y1
+ }
+ else{
+ X2<- Cx+(X1-Cx)*cos(Theta)-(Y1-Cy)*sin(Theta)
+ Y2<- Cy+(X1-Cx)*sin(Theta)+(Y1-Cy)*cos(Theta)
+ }
+ Out<- Appendrow(Out,c(X2,Y2))
+ }
+ if(nrow(Out)==1){
+ Out<- Out[1,]
+ }
+ OutL<- Mixjoin(OutL,list(Out))
+ }
+ if(length(OutL)==1){
+ OutL<- Op(1,OutL)
+ }
+ return(OutL)
+}
+
+###############################################
+
+Scaledata<- function(...)
+{
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ Eps<- 10^(-8)
+ ML<- varargin[[1]]
+ if(Mixtype(ML)==1){
+ ML<- list(ML)
+ }
+ A<- varargin[[2]]
+ B<- varargin[[3]]
+ if(Nargs==3){
+ Pt<- c(0,0)
+ }
+ else{
+ Pt<- varargin[[4]]
+ }
+ ML=Flattenlist(ML) #180603
+ OutL<- list()
+ for (N in Looprange(1,Length(ML))){
+ GL<- Op(N,ML)
+ if(!is.matrix(GL)){GL=matrix(GL,ncol=2)} #180603
+ Out<- c()
+ for (I in Looprange(1,Length(GL))){
+ Tmp<- GL[I,]
+ X1<- Tmp[1]
+ Y1<- Tmp[2]
+ if(X1==Inf){
+ X2<- X1
+ Y2<-Y1
+ }
+ else{
+ X2<- Pt[1]+A*(X1-Pt[1])
+ Y2<- Pt[2]+B*(Y1-Pt[2])
+ }
+ Out<- Appendrow(Out,c(X2,Y2))
+ }
+ OutL<- Mixjoin(OutL,list(Out))
+ }
+ if(length(OutL)==1){
+ OutL<- Op(1,OutL)
+ }
+ return(OutL)
+}
+
+################################
+
+Setarrow<- function(...)
+{
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ if(Nargs==0){
+ Str<- paste("Size=",YaSize,",","Angle=",YaAngle,",",sep="")
+ Str<- paste(Str,"Position=",YaThick,",","Style=",YaStyle,sep="")
+ return(Str)
+ }
+ Flg<- 0
+ for (I in 1:Nargs){
+ Tmp<- varargin[[I]]
+ if(mode(Tmp)=="numeric"){
+ Flg<- Flg+1
+ if(Flg==1) YaSize<<-Tmp
+ if(Flg==2){
+ if(Tmp<5){
+ YaAngle<<- 18*Tmp
+ }
+ else{
+ YaAngle<<- Tmp
+ }
+ }
+ if(Flg==3) YaPosition<<- Tmp
+ if(Flg==4) YaThick<<- Tmp
+ }
+ if(mode(Tmp)=="character"){
+ YaStyle<<- Tmp
+ }
+ }
+}
+
+####################################
+
+Setax<- function(...)
+{
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ if(Nargs==0){ #180821(next 2 lines)
+ Str<- paste(ZIKU,",",XNAME,",",XPOS,",",sep="")
+ Str<- paste(Str,YNAME,",",YPOS,",",ONAME,",",OPOS,sep="")
+ return(Str)
+ }
+ ArgL<- c()
+ Tmp<- varargin[[1]]
+ if(is.numeric(Tmp)){ #180821
+ Is<- varargin[[1]]
+ ArgL<- c()
+ for (I in Looprange(1,Is-1)){
+ ArgL<- c(ArgL,"")
+ }
+ for (I in Looprange(2,Nargs)){
+ ArgL<- c(ArgL,varargin[[I]])
+ }
+ }
+ else{ #180821from
+ for (I in Looprange(1,Nargs)){
+ ArgL<- c(ArgL,varargin[[I]])
+ }
+ }
+ for (I in Looprange(length(ArgL)+1,7)){
+ ArgL<- c(ArgL,"")
+ } #180821to
+ Xn<- ArgL[2]; Xp<- ArgL[3]
+ Yn<- ArgL[4]; Yp<- ArgL[5]
+ On<- ArgL[6]; Op<- ArgL[7]
+ ZIKU<<- ArgL[1] #180821
+ if(nchar(Xn)>0){
+ XNAME<<- paste("$",Xn,"$",sep="")
+ }
+ if(nchar(Xp)>0){
+ XPOS<<- Xp
+ }
+ if(nchar(Yn)>0){
+ YNAME<<- paste("$",Yn,"$",sep="")
+ }
+ if(nchar(Yp)>0){
+ YPOS<<-Yp
+ }
+ if(nchar(On)>0){
+ ONAME<<- On
+ }
+ if(nchar(Op)>0){
+ OPOS<<- Op
+ }
+ Out<- "";
+}
+
+#################################
+# 11.08.24
+
+Setcolor<- function(...){
+ varargin<- list(...)
+ Color<- 'black'
+ Kosa<- 1
+ for(J in Looprange(1,length(varargin))){
+ Tmp<- varargin[[J]]
+ if(is.character(Tmp)) Color<- Tmp
+ if(is.numeric(Tmp)){
+ if(length(Tmp)==1){# 11.08.24
+ Kosa<- Tmp
+ }
+ else{
+ Color<- Tmp
+ }
+ }# 11.08.24
+ }
+ Iro<- Ratiocmyk(Color)
+ if(length(Iro)==0) return(c())
+ if(length(Iro)==4){ #180602from
+ Str<- "\\color[cmyk]{"
+ }else{
+ Str<- "\\color[rgb]{"
+ } #180602to
+ for(J in 1:length(Iro)){
+ Str<- paste(Str,as.character(Kosa*Iro[J]),sep="")
+ if(J<length(Iro)){ #180603
+ Str<- paste(Str,",",sep="")
+ }
+ }
+ Str<- paste(Str,"}",sep="")
+ Texcom(Str)
+}
+
+##################################
+
+Setmarklen<- function(...)
+{
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ if(Nargs==0){
+ Tmp<- MARKLENNow/MARKLENInit
+ Tmp=round(Tmp*100)/100
+ return(Tmp)
+ }
+ Size<- varargin[[1]]
+ MARKLENNow<<- MARKLENInit*Size
+ MARKLEN<<- MARKLENNow*1000/2.54/MilliIn
+}
+
+###############################
+
+Setorigin<- function(...)
+{
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ if(Nargs==0){
+ return(GENTEN)
+ }
+ Pt<- varargin[[1]]
+ GENTEN<<- Pt;
+}
+
+################################
+
+Setscaling<- function(...){
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ if(Nargs==0){
+ return(c(SCALEX,SCALEY,LOGX,LOGY))
+ }
+ Tmp=varargin[[1]] #181020from
+ if((Nargs==1)&&(is.numeric(Tmp))){
+ SCALEY<<- Tmp
+ return(invisible(c(SCALEX,SCALEY,LOGX,LOGY)))
+ }
+ nCtr=1 #181020to
+ for (I in 1:Nargs){
+ Tmp<- varargin[[I]]
+ if(mode(Tmp)=="numeric"){
+ if(nCtr==1)SCALEX<<- Tmp #181020(2llines)
+ if(nCtr==2)SCALEY<<- Tmp
+ nCtr=nCtr+1
+ }
+ if(mode(Tmp)=="character"){
+ if(Tmp=="l"){
+ LOGX<<- 0
+ LOGY<<- 1
+ }else if(Tmp=="ll"){
+ LOGX<<- 1
+ LOGY<<- 1
+ }else{
+ LOGX<<- 0
+ LOGY<<- 0
+ }
+ }
+ }
+ Tmp<- c(SCALEX,SCALEY,LOGX,LOGY)
+}
+
+#########################################
+
+Setpen<-function(Width)
+{
+ PenThick<<-round(PenThickInit*Width)
+ Str=paste("\\special{pn ", as.character(PenThick),"}%\n",sep="")
+ cat(Str,file=Wfile,append=TRUE)
+}
+
+##############################################
+
+Setpt<- function(...)
+{
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ if(Nargs==0)
+ {
+ Tmp<- TenSize/TenSizeInit
+ Tmp<- round(Tmp*100)/100
+ return(Tmp)
+ }
+ Size<- varargin[[1]]
+ TenSize<<- TenSizeInit*Size;
+}
+
+##############################################
+
+Setunitlen<-function(...)
+{
+ varargin<-list(...)
+ if(length(varargin)==0){
+ return(ULEN)
+ }
+ Ul=varargin[[1]]
+ Dx<-XMAX-XMIN
+ Dy<-YMAX-YMIN
+ Sym<-".0123456789 +-*/"
+ SL<-Sym
+ OL<-"+-*/"
+ if(nchar(Ul)>0){
+ ULEN<<-Ul
+ }
+ Is<-1
+ VL<-""
+ Ucode<-ULEN
+ for (I in 1:nchar(Ucode)){
+ C<-substring(Ucode,I,I)
+ if(length(grep(C,SL))>0){
+ if(length(grep(C,OL))>0){
+ Tmp<-substring(Ucode,Is,I-1)
+ Str<-paste(VL,Tmp,C,sep="")
+ VL<-Str
+ Is<-I+1
+ }
+ }
+ else{
+ Unit<-substring(Ucode,I,I+1)
+ Str<-substring(Ucode,Is,I-1)
+ VL<-paste(VL,Str,sep="")
+ break;
+ }
+ }
+ Valu<-eval(parse(text=VL))
+ Str<-as.character(Valu)
+ ULEN<<-paste(Str,Unit,sep="");
+ if(Unit=="cm") MilliIn<<-1000/2.54*Valu
+ if(Unit=="mm") MilliIn<<-1000/2.54*Valu/10
+ if(Unit=="in") MilliIn<<-1000*Valu
+ if(Unit=="pt") MilliIn<<-1000/72.27*Valu
+ if(Unit=="pc") MilliIn<<-1000/6.022*Valu
+ if(Unit=="bp") MilliIn<<-1000/72*Valu
+ if(Unit=="dd2") MilliIn<<-1000/1238/1157/72.27*Valu
+ if(Unit=="cc") MilliIn<<-1000/1238/1157/72.27*12*Valu
+ if(Unit=="sp") MilliIn<<-1000/72.27/65536*Valu/10
+ MARKLEN<<-MARKLENNow*1000/2.54/MilliIn
+ MEMORI<<-MEMORINow*1000/2.54/MilliIn #17.12.17
+}
+
+#########################################
+# 10.11.20
+
+Setwindow<-function(...)
+{
+ varargin<-list(...)
+ Nargs<-length(varargin)
+ if(Nargs==0){
+ Out<-c(XMIN,XMAX,YMIN,YMAX)
+ return(Out)
+ }
+ if(Nargs==1){
+ Dt<- varargin[[1]]
+ if(is.list(Dt) && !is.data.frame(Dt)){
+ Tmp<- as.data.frame(Dt)
+ Dt<- t(Tmp)
+ }
+ Xm<- min(Dt[,1])
+ XM<- max(Dt[,1])
+ Ym<- min(Dt[,2])
+ YM<- max(Dt[,2])
+ Str<- "Setwindow("
+ Str<- paste(Str,"c(",as.character(Xm),",",as.character(XM),"),c(",sep="")
+ Str<- paste(Str,as.character(Ym),",",as.character(YM),")",sep="")
+ Str<- paste(Str,")",sep="")
+ print(Str)
+ }
+ if(Nargs==2){
+ RgX<-varargin[[1]]
+ RgY<-varargin[[2]]
+ XMIN<<-RgX[1]; XMAX<<-RgX[2]
+ YMIN<<-RgY[1]; YMAX<<-RgY[2]
+ }
+ if(Nargs==4){
+ XMIN<<-varargin[[1]]; XMAX<<-varargin[[2]]
+ YMIN<<-varargin[[3]]; YMAX<<-varargin[[4]]
+ }
+ Out<- c(XMIN,XMAX,YMIN,YMAX);
+}
+
+#########################################
+
+Shadeold<- function(...)
+{ ## Scaling is implemented
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ Iroflg=0
+ Kosa=1
+ if(Nargs>1){
+ Iro=varargin[[Nargs]]
+ if(is.character(Iro)){
+ Iroflg=1
+ if(length(grep("{",Iro))>0){
+ Str=paste("{\\color",Iro,sep="")
+ }
+ else{
+ Str=paste("{\\color{",Iro,"}",sep="")
+ }
+ }
+ else{
+ if(length(Iro)==1){
+ Kosa=Iro
+ }
+ else{
+ Iroflg=1
+ if(length(Iro)==4){
+ Str="{\\color[cmyk]{"
+ }
+ else{
+ if(length(Iro)==3){
+ Str="{\\color[rgb]{"
+ }
+ }
+ for(J in 1:length(Iro)){
+ Str=paste(Str,as.character(Iro[J]),sep="")
+ if(J<length(Iro)){
+ Str=paste(Str,",")
+ }
+ }
+ Str=paste(Str,"}")
+ }
+ }
+ if(Iroflg==1){
+ Str=paste(Str,"%\n",sep="")
+ cat(Str,file=Wfile,append=TRUE)
+ }
+ }
+ Tmp=varargin[[1]]
+ Data=Kyokai(Tmp)
+ Data=list(Data) ####180327
+ for (I in Looprange(1, length(Data))){
+ PL<- Op(I,Data)
+ Mojisu<- 0
+ for (J in 1:Nrow(PL)){
+ P<- Doscaling(Op(J,PL))
+ X<- as.character(round(MilliIn*P[1]))
+ Y<- as.character(-round(MilliIn*P[2]))
+ Str<- paste("\\special{pa ",X," ",Y,"}",sep="")
+ cat(Str,file=Wfile,append=TRUE)
+ Mojisu<- Mojisu+nchar(Str)
+ if(Mojisu>80){
+ cat("%\n",file=Wfile,append=TRUE)
+ Mojisu<- 0
+ }
+ }
+ Str1<- paste("\\special{sh ",as.character(Kosa),"}",sep="")
+ Str2<- paste("\\special{ip}%\n",sep="")
+ cat(Str1,file=Wfile,append=TRUE)
+ cat(Str2,file=Wfile,append=TRUE)
+ }
+ if(Iroflg==1){
+ cat("}%\n",file=Wfile,append=TRUE)
+ }
+}
+
+####### Shade new 17.09.24############
+
+Shade<- function(...)
+{ ## Scaling is implemented
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ Iroflg<- 0
+ Kosa<- 1
+ if(Nargs>1){
+ Iro<- varargin[[Nargs]]
+ if(mode(Iro)=="character"){
+ Iroflg<- 1
+ if(length(grep(Iro,"{"))>0)
+ Str<- paste("{\\color",Iro,sep="")
+ else
+ Str<- paste("{\\color{",Iro,"}",sep="")
+ }
+ else{
+ if(length(Iro)==1)
+ Kosa<- Iro
+ else{
+ Iroflg<- 1
+ if(length(Iro)==4)
+ Str<- paste("{\\color[cmyk]{",sep="")
+ else
+ if(length(Iro)==3)
+ Str<- paste("{\\color[rgb]{",sep="")
+ for (J in Looprange(1,length(Iro))){
+ Str<- paste(Str,as.character(Iro[J]),sep="")
+ if(J<length(Iro))
+ Str<- paste(Str,",",sep="")
+ }
+ Str<- paste(Str,"}",sep="")
+ }
+ }
+ if(Iroflg==1){
+ }
+ }
+ Tmp<- varargin[[1]]
+# Data<- Kyoukai(Tmp)
+ Data= Joincrvs(Tmp) #180929from
+ Data=list(Data) #180929to
+ for (I in Looprange(1, Length(Data))){ #180621
+ PL<- Op(I,Data)
+ PL=Appendrow(PL,Op(1,PL)) #180929
+ Mojisu<- 0
+ for (J in Looprange(1,Length(PL))){
+ P<- Doscaling(Op(J,PL))
+ X<- as.character(round(MilliIn*P[1]))
+ Y<- as.character(-round(MilliIn*P[2]))
+ Str<- paste("\\special{pa ",X," ",Y,"}",sep="")
+ cat(Str,file=Wfile,append=TRUE,sep="")
+ Mojisu<- Mojisu+nchar(Str)
+ if(Mojisu>80){
+ cat("%\n",file=Wfile,append=TRUE,sep="")
+ Mojisu<- 0
+ }
+ }
+ Str1<- paste("\\special{sh ",as.character(Kosa),"}",sep="")
+ Str2<- paste("\\special{ip}%\n",sep="")
+ cat(Str1,file=Wfile,append=TRUE,sep="")
+ cat(Str2,file=Wfile,append=TRUE,sep="")
+ }
+ if(Iroflg==1){
+ cat("}%\n",file=Wfile,append=TRUE,sep="")
+ }
+}
+
+##############################################
+# 11.01.07
+
+Splinedata<- function(...)
+{
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ Eps<- 10^(-3)
+ PL<- varargin[[1]]
+ if(mode(PL)=="character"){
+ Fname<- PL
+ PL<- Readtextdata(Fname)
+ }
+ else{
+ PL<- as.matrix(PL)
+ if(Nrow(PL)==1){
+ PL<- matrix(PL, nrow=length(PL)/2)
+ PL<- t(PL)
+ }
+ }
+ if(ncol(PL)==3){
+ Flg3<- 1
+ }
+ else{
+ Flg3<- 0
+ }
+ PLL<- Dividegraphics(PL)
+ N<- 50
+ C<- c()
+ for (I in Looprange(2,Nargs)){
+ Tmp<- varargin[[I]]
+ if(mode(Tmp)!="character") next
+ if(length(grep("=",Tmp,fixed=TRUE))>0){
+ eval(parse(text=Tmp))
+ }
+ else{
+ Tmp1<- substr(Tmp,1,1)
+ if(toupper(Tmp1)=="C"){
+ C<- 1:length(PLL)
+ }
+ }
+ }
+ Cflg<- rep(0,length(PLL))
+ for(J in Looprange(1,length(C))){
+ K<- C[J]
+ Cflg[K]<- 1
+ }
+ if(length(N)>1){
+ Nj<- as.numeric(N)
+ }
+ else{
+ Tmp<- lapply(PLL,nrow)
+ Tmp1<- as.numeric(Tmp)
+ MxP<- max(Tmp1)
+ Nj<- c()
+ for (J in 1:length(PLL)){
+ Tmp<- nrow(PLL[[J]])
+ Tmp1<- round(N/MxP*(Tmp-1))
+ Nj<- c(Nj,Tmp1)
+ }
+ }
+ OutL<- list()
+ for(J in 1:length(PLL)){
+ PL<- PLL[[J]]
+ if(Cflg[J]==1){
+ if(Norm(PL[1,]-PL[Nrow(PL),])>Eps){
+ PL<-Appendrow(PL,PL[1,])
+ Nj[J]=round(N/MxP*nrow(PL))
+ }
+ else{
+ PL[Nrow(PL),]<- PL[1,]
+ }
+ }
+ Tn<- 1:Nrow(PL)
+ Xn<- PL[,1]
+ Yn<- PL[,2]
+ if(Flg3==1) Zn<- PL[,3]
+ if(Cflg[J]==0){
+ Dxn<- spline(Tn,Xn,n=Nj[J])
+ Dyn<- spline(Tn,Yn,n=Nj[J])
+ if(Flg3==1) Dzn<- spline(Tn,Zn,n=Nj[J])
+ }
+ else{
+ Dxn<- spline(Tn,Xn,method="periodic")
+ Dyn<- spline(Tn,Yn,method="periodic")
+ if(Flg3==1) Dzn<- spline(Tn,Zn,method="periodic")
+ }
+ Tmp1<- Dxn$y
+ Tmp2<- Dyn$y
+ Tmp3<-c()
+ if(Flg3==1) Tmp3<- Dzn$y
+ Out<- matrix(c(Tmp1,Tmp2,Tmp3),nrow=length(Tmp1))
+ OutL<- c(OutL,list(Out))
+ }
+ return(OutL)
+}
+
+############################################
+# 2013.05.03 Domain is optional
+
+Tabledata<- function(...){
+ varargin<- list(...)
+ Eps<- 0.001
+ Tmp<- varargin[[1]] # 130503 from
+ if(is.numeric(Tmp)){
+ Domain<- varargin[[1]]
+ VL<- varargin[[2]]
+ HL<- varargin[[3]]
+ }
+ else{
+ Domain<- c(-1,-1)
+ VL<- varargin[[1]]
+ HL<- varargin[[2]]
+ } # 130503 until
+ Hsize<- Domain[1]
+ SvL<- list(0)
+ S<- 0
+ for (I in Looprange(1,length(VL))){
+ Tmp<- VL[[I]]
+ S<- S+Tmp[1]
+ Tmp[1]<- S
+ SvL<- c(SvL,list(Tmp))
+ }
+ if(Hsize>S){
+ SvL<- c(SvL,list(Hsize))
+ }
+ Hsize<- Op(1,SvL[[length(SvL)]])
+ Vsize<- Domain[2]
+ ShL<- list(0)
+ S<- 0
+ for (I in Looprange(1,length(HL))){
+ Tmp<- HL[[I]]
+ S<- S+Tmp[1]
+ Tmp[1]<- S
+ ShL<- c(ShL,list(Tmp))
+ }
+ if(Vsize>S){
+ ShL<- c(ShL,list(Vsize))
+ }
+ Vsize<- Op(1,ShL[[length(ShL)]])
+ Marw<- 0; Mare<- 0; Mars<- 0; Marn<- 0
+ if(length(Domain)>2){
+ Marw<- Domain[3]
+ Mare<- Domain[4]
+ }
+ if(length(Domain)>4){
+ Marn<- Domain[5]
+ Mars<- Domain[6]
+ }
+ Setwindow(c(-Marw,Hsize+Mare),c(-Mars,Vsize+Marn))
+ Tmp<- Framedata(c(Eps,Hsize-Eps),c(Eps,Vsize-Eps))
+ Gdata<- list(Tmp)
+ Tmp<- -Marw
+ Hdata<- list(Listplot(c(c(Tmp,-Mars),c(Tmp,Vsize+Marn))))
+ for (I in Looprange(1,length(SvL))){
+ Data<- SvL[[I]]
+ X<- Data[1]
+ if(length(Data)==1){
+ Y1<- 0
+ Y2<- Vsize
+ G<- Listplot(c(X,Y1),c(X,Y2))
+ }
+ else{
+ G<- c()
+ for (J in seq(2,length(Data),by=2)){
+ Y1<- Vsize-Op(1,ShL[[Data[J]]])
+ Y2<- Vsize-Op(1,ShL[[Data[J+1]]])
+ Tmp<- Listplot(c(c(X,Y1),c(X,Y2)))
+ Tmp1<- Appendrow(G,c(Inf,Inf))
+ G<- Appendrow(Tmp1,Tmp)
+ }
+ G<- G[2:nrow(G),]
+ }
+ Hdata<- c(Hdata,list(G))
+ }
+ Tmp<- Hsize+Mare
+ Tmp1<- Listplot(c(c(Tmp,-Mars),c(Tmp,Vsize+Marn)))
+ Hdata<- c(Hdata,list(Tmp1))
+ Tmp<- Vsize+Marn
+ Vdata<- list(Listplot(c(c(-Marw,Tmp),c(Hsize+Mare,Tmp))))
+ for (I in Looprange(1,length(ShL))){
+ Data<- ShL[[I]]
+ Y<- Vsize-Data[1]
+ if(length(Data)==1){
+ X1<- 0
+ X2<- Hsize
+ G<- Listplot(c(X1,Y),c(X2,Y))
+ }
+ else{
+ G<- c()
+ for (J in seq(2,length(Data),by=2)){
+ X1<- Op(1,SvL[[Data[J]]])
+ X2<- Op(1,SvL[[Data[J+1]]])
+ Tmp<- Listplot(c(X1,Y),c(X2,Y))
+ G<- Appendrow(G,c(Inf,Inf))
+ G<- Appendrow(G,Tmp)
+ }
+ G<-G[2:nrow(G),]
+ }
+ Vdata<- c(Vdata,list(G))
+ }
+# Tmp<- Listplot(c(c(0,0),c(Hsize,0))) # 2011.03.02
+# Vdata<- Mixjoin(Vdata,list(Tmp))
+ Tmp<- Listplot(c(c(-Marw,-Mars),c(Hsize+Mare,-Mars)))
+ Vdata<- Mixjoin(Vdata,list(Tmp))
+ Tmp1<- Hdata[Looprange(3,length(Hdata)-2)]
+ Tmp2<- Vdata[Looprange(3,length(Vdata)-2)]
+ Gdata<- Mixjoin(Gdata,Tmp1,Tmp2)
+ Hind<- Looprange(2,1+length(Tmp1))
+ Vind<- Looprange(2+length(Tmp1),1+length(Tmp1)+length(Tmp2))
+ G=Gdata[[1]]
+ P1<- Ptsw(G); P2<- Ptnw(G)
+ Q1<- Ptse(G); Q2<- Ptne(G)
+ Tmp1<- list(Listplot(c(P1,P2)),Listplot(c(Q1,Q2)))
+ P1<- Ptnw(G); P2<- Ptne(G)
+ Q1<- Ptsw(G); Q2<- Ptse(G)
+ Tmp2<- list(Listplot(c(P1,P2)),Listplot(c(Q1,Q2)))
+ Tmp3<- Framedata()
+ Out<- list(Gdata,Hind,Vind,Tmp1,Tmp2,Tmp3)
+ return(Out)
+}
+
+################################
+
+Texcom<- function(Meirei)
+{
+ if(Meirei=="\\thinlines"){
+ Setpen(1);
+ return();
+ }
+ if(Meirei=="\\thicklines"){
+ Setpen(2);
+ return()
+ }
+ if(Meirei=="\\Thicklines"){
+ Setpen(3);
+ return()
+ }
+ if(length(Meirei)==0){ # 09.12.07
+ Tmp<- c()
+ }
+ else{
+ Tmp<- grep("newline",Meirei)
+ }
+ if(length(Tmp)>0){
+ cat("\n",file=Wfile,append=TRUE);
+ }
+ else{
+ Tmp<- paste(Meirei,"%\n",sep="")
+ Tmp<- gsub("//","\\",Tmp,fixed=TRUE) # 11.03.02
+ cat(Tmp,file=Wfile,append=TRUE);
+ }
+}
+
+###############################################
+
+Texctr<- function(N){
+ if(is.numeric(N)){
+ Alpha<- "abcdefghijklmnopqrstuvwxyz"
+ Out<- paste("ketpicctr",substr(Alpha,N,N),sep="")
+ }
+ else{
+ if(grep("\\",N,fixed=TRUE)>0){
+ Out<- substr(N,2,nchar(N))
+ }
+ else{
+ Out<- N
+ }
+ }
+ return(Out)
+}
+
+###############################################
+
+Texelse<- function (){
+ Texcom("");
+ Texcom("\\else")
+}
+
+###############################################
+
+Texend<- function()
+{
+ Texcom("%\n}")
+}
+
+###############################################
+
+Texendfor<- function(I){
+ Last<- TEXFORLAST[[TEXFORLEVEL]]
+ Texcom("")
+ Tmp<- paste("\\ifnum",Texthectr(I),"<",Last,sep="")
+ Texcom(Tmp)
+ Texcom("\\repeat")
+ Texcom("}")
+ TEXFORLEVEL<<- TEXFORLEVEL-1
+ TEXFORLAST<<- TEXFORLAST[1:(length(TEXFORLAST)-1)]
+}
+
+###############################################
+
+Texendif<- function(){
+ Texcom("")
+ Texcom("\\fi")
+ Texcom("}")
+}
+
+###############################################
+
+Texfor<- function(I,First,Last){
+ TEXFORLEVEL<<- TEXFORLEVEL+1;
+ Texsetctr(I,"0")
+ Texsetctr(I,paste(as.character(First),"-1",sep=""))
+ Texcom("")
+ Texcom("{")
+ Texcom("\\loop")
+ Texsetctr(I,"+1")
+ TEXFORLAST<<- c(TEXFORLAST,as.character(Last))
+}
+
+###############################################
+
+Texforinit<- function(){
+ TEXFORLEVEL<<- 0
+ TEXFORLAST<<- list()
+}
+
+###############################################
+
+Texif<- function(...){
+ varargin<- list(...)
+ Condstr<- varargin[[1]]
+ Tp<- 0
+ if(length(varargin)>1){
+ Tp<- varargin[[2]]
+ }
+ Texcom("")
+ Texcom("{")
+ if(Tp==0){
+ Texcom("\\ifnum")
+ }
+ else{
+ Texcom("\\ifdim ")
+ }
+ Texcom(paste(Condstr," ",sep=""))
+}
+
+######################################
+
+Texletter<- function(...)
+{
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ for (I in seq(1,Nargs,by=3)){
+ P<- varargin[[I]]
+ X<- P[1]
+ if(mode(X)=="numeric"){
+ X<- as.character(X)
+ }
+ Y<- P[2]
+ if(mode(Y)=="numeric"){
+ Y<- as.character(Y)
+ }
+ Houkou<- varargin[[I+1]]
+ Mojiretu<- varargin[[I+2]]
+ Hset<- Houkou
+ Vhoko<- "c"
+ if(length(grep("n",Hset))>0){
+ Vhoko<- "n"
+ }
+ if(length(grep("s",Hset))>0){
+ Vhoko<- "s"
+ }
+ Hhoko<- "c";
+ if(length(grep("e",Hset))>0){
+ Hhoko<- "e"
+ }
+ if(length(grep("w",Hset))>0){
+ Hhoko<- "w"
+ }
+ Hoko<- paste(Vhoko,Hhoko,sep="")
+ CalcWidth(Hoko,Mojiretu)
+ CalcHeight(Hoko,Mojiretu)
+ Tmp<- paste("\\put(",X,",",Y,"){\\hspace*{\\Width}",sep="")
+ Str<- paste(Tmp,"\\raisebox{\\Height}{",Mojiretu,"}}%\n",sep="")
+ cat(Str,file=Wfile,append=TRUE)
+ }
+}
+
+##################################################
+
+Texnewcmd<- function(...)
+{
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ Str<- varargin[[1]]
+ S<- paste("\\newcommand{",Str,"}",sep="")
+ if(Nargs>1){
+ Tmp<- as.character(varargin[[2]])
+ S<- paste(S,"[",Tmp,"]",sep="")
+ }
+ if(Nargs>2){
+ Tmp<- varargin[[3]]
+ if(mode(Tmp)=="numeric"){
+ Tmp<- as.character(Tmp)
+ }
+ S<- paste(S,"[",Tmp,"]",sep="")
+ }
+ S<- paste(S,"{",sep="")
+ Texcom(S)
+}
+
+###############################################
+
+Texnewctr<- function(N)
+{
+ if(mode(N)=="character"){
+ Str<- paste("\\newcounter{",N,"}",sep="")
+ Texcom(Str)
+ }
+ else{
+ for (I in N){
+ Str<- paste("\\newcounter{",Texctr(I),"}",sep="")
+ Texcom(Str)
+ }
+ }
+}
+###############################################
+
+Texrenewcmd<- function(...)
+{
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ Str<- varargin[[1]]
+ S<- paste("\\renewcommand{",Str,"}",sep="")
+ if(Nargs>1){
+ Tmp<- as.character(varargin[[2]])
+ S<- paste(S,"[",Tmp,"]",sep="")
+ }
+ if(Nargs>2){
+ Tmp<- varargin[[3]]
+ if(mode(Tmp)=="numeric"){
+ Tmp<- as.character(Tmp)
+ }
+ S<- paste(S,"[",Tmp,"]",sep="")
+ }
+ S<- paste(S,"{",sep="")
+ Texcom(S)
+}
+
+###############################################
+
+Texsetctr<- function(Nctr,Opstr)
+{
+ Ctr<- Texctr(Nctr)
+ Opstr<- paste(Opstr,"%",sep="")
+ OperL<- "+-*/%"
+ Oper<- ""
+ Va<- ""
+ Evflg<- 0
+ Paflg<- 0
+ for (I in Looprange(1,nchar(Opstr))){
+ Tmp<- substring(Opstr,I,I)
+ if(Tmp=="("){
+ Paflg<- 1
+ if(nchar(Va)>0){
+ Evflg<- 1
+ Va<- paste(Va,Tmp,sep="")
+ }
+ next
+ }
+ if(Tmp==")"){
+ Paflg<- 0
+ if(Evflg>0){
+ Va<- paste(Va,Tmp,sep="")
+ }
+ next
+ }
+ if(Paflg>0){
+ Va<- paste(Va,Tmp,sep="")
+ next
+ }
+ if(length(grep(Tmp,OperL,fixed=TRUE))==0){ #180510
+ Va<- paste(Va,Tmp,sep="")
+ }
+ else{
+ if(Evflg>0){
+ Tmp1<- eval(parse(text=Va))
+ Va<- paste("\\value{",Tmp1,"}",sep="")
+ Evflg<- 0
+ }
+ if(Oper==""){
+ if(nchar(Va)>0){
+ Str<- paste("\\setcounter{",Ctr,"}{",Va,"}",sep="")
+ Texcom(Str)
+ }
+ Oper<- Tmp
+ Va<-""
+ }
+ else if(Oper=="+"){
+ Str<- paste("\\addtocounter{",Ctr,"}{",Va,"}",sep="")
+ Texcom(Str)
+ Oper<- Tmp
+ Va<-""
+ }
+ else if(Oper=="-"){
+ Str<- paste("\\addtocounter{",Ctr,"}{-",Va,"}",sep="")
+ Texcom(Str)
+ Oper<- Tmp
+ Va<-""
+ }
+ else if(Oper=="*"){
+ Str<- paste("\\multiply\\value{",Ctr,"} by ",Va,sep="")
+ Texcom(Str)
+ Oper<- Tmp
+ Va<-""
+ }
+ else if(Oper=="/"){
+ Str<- paste("\\divide\\value{",Ctr,"} by ",Va,sep="")
+ Texcom(Str)
+ Oper<- Tmp
+ Va<-""
+ }
+ }
+ }
+}
+
+###############################################
+
+Texthectr<- function(N)
+{
+ Out<- paste("\\the",Texctr(N),sep="")
+ return(Out)
+}
+
+###############################################
+
+Texvalctr<- function(N){
+ Out<- paste("\\value{",Texctr(N),"}",sep="")
+ return(Out)
+}
+
+###############################################
+
+Texvctr<- function(N)
+{
+ Out<- paste("\\value{",Texctr(N),"}",sep="")
+ return(Out)
+}
+
+###############################################
+
+Tonumeric <- function(...)
+{
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ Data<- varargin[[1]]
+ Sp<- c(1,1)
+ Ep<- c(Inf,Inf)
+ if(Nargs>1){
+ Sp<- varargin[[2]]
+ }
+ if(Nargs>2){
+ Ep<- varargin[[3]]
+ }
+ Nrs<- Sp[1]
+ Nre<- min(nrow(Data),Ep[1])
+ Ncs<- Sp[2]
+ Nce<- min(ncol(Data),Ep[2])
+ Tmp1<- Data[Nrs:Nre, Ncs:Nce]
+ Tmp2 <- as.numeric(Tmp1)
+ Out <- matrix(Tmp2,nrow=nrow(Tmp1))
+ Sp<- c()
+ for (I in 1:nrow(Out)){
+ for (J in 1:ncol(Out)){
+ Tmp<- Out[I,J]
+ if(!is.na(Tmp)){
+ Sp<- c(I,J)
+ break;
+ }
+ }
+ if(length(Sp)>0) break
+ }
+ if(length(Sp)==0){
+ return("Numeric data not found")
+ }
+ Ep<- c(nrow(Out),ncol(Out))
+ for (I in Sp[1]:nrow(Out)){
+ Tmp<- Out[I,Sp[2]]
+ if(is.na(Tmp)){
+ Ep[1]<- I-1
+ break
+ }
+ }
+ for (J in Sp[2]:ncol(Out)){
+ Tmp<- Out[Sp[1],J]
+ if(is.na(Tmp)){
+ Ep[2]<- J-1
+ break
+ }
+ }
+ Out<- Out[Sp[1]:Ep[1], Sp[2]:Ep[2]]
+ return(Out)
+}
+
+##################################################
+
+Translatedata<- function(...)
+{
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ Eps<- 10^(-8)
+ ML<- varargin[[1]]
+ if(Mixtype(ML)==1){
+ ML<- list(ML)
+ }
+ Tmp=varargin[[2]]
+ if(mode(Tmp)=="numeric" && length(Tmp)>1){
+ A<- Tmp[1]; B<- Tmp[2]
+ }
+ else{
+ A<- Tmp
+ if(Nargs>=3){
+ B<- varargin[[3]]
+ }
+ else{
+ B<- 0
+ }
+ }
+ ML=Flattenlist(ML) #180603
+ OutL<- list()
+ for (N in Looprange(1,Length(ML))){
+ GL<- Op(N,ML)
+ if(!is.matrix(GL)){GL=matrix(GL,ncol=2)} #180603
+ Out<- c()
+ for (I in Looprange(1,Length(GL))){
+ Tmp<- GL[I,] #180603
+ X1<- Tmp[1]
+ Y1<- Tmp[2]
+ if(X1==Inf){
+ X2<- X1
+ Y2<-Y1
+ }
+ else{
+ X2<- X1+A
+ Y2<- Y1+B
+ }
+ Out<- Appendrow(Out,c(X2,Y2))
+ }
+ OutL<- Mixjoin(OutL,list(Out))
+ }
+ if(length(OutL)==1){
+ OutL<- Op(1,OutL)
+ }
+ return(OutL)
+}
+
+#######################################
+
+Unscaling<- function(G)
+{
+ GLg<- G
+ if(class(GLg)=="numeric"){
+ GLg<-c(G[1]/SCALEX, G[2]/SCALEY)
+ Tmp<-GLg
+ if(LOGX==1) Tmp[1]<- 10^(GLg[1])
+ if(LOGY==1) Tmp[2]<- 10^(GLg[2])
+ return(Tmp)
+ }
+ else{
+ Tmp1<-matrix(c(1/SCALEX,0,0,1/SCALEY),nrow=2)
+ GLg<-G %*% Tmp1
+ Tmp<-GLg
+ if(LOGX==1) Tmp[,1]<- 10^(G[,1])
+ if(LOGY==1) Tmp[,2]<- 10^(G[,2])
+ return(Tmp)
+ }
+}
+
+#############################################
+
+Vtickmark<- function(...)
+{ ## Scaling is implemented
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ ArgsL<- varargin
+ if(mode(ArgsL[[1]])=="character"){
+ Str<- ArgsL[[1]]
+ Tmp<- strsplit(Str,"m")
+ Tmp<- Tmp[[1]]
+ if(length(Tmp)>1){
+ I<- nchar(Tmp[1])+1
+ }
+ else{
+ I<- 0
+ }
+ Tmp<- strsplit(Str,"n")
+ Tmp<- Tmp[[1]]
+ if(length(Tmp)>1){
+ J<- nchar(Tmp[1])+1
+ }
+ else{
+ J<- 0
+ }
+ Tmp<- strsplit(Str,"r")
+ Tmp<- Tmp[[1]]
+ if(length(Tmp)>1){
+ K=nchar(Tmp[1])+1
+ }
+ else{
+ K<- 0
+ }
+ if(K>0){
+ S<- substr(Str,K+1,nchar(Str))
+ R<- as.numeric(S)
+ if(is.na(R)){
+ R<- 1
+ }
+ }
+ else{
+ R<- 1
+ K<- nchar(Str)+1
+ }
+ if(J>0){
+ S<- substr(Str,J+1,K-1)
+ Dn<- as.numeric(S)
+ if(is.na(Dn)){
+ Dn<- 1
+ }
+ }
+ else{
+ Dn<- 1000
+ J<- nchar(Str)+1
+ }
+ S<- substr(Str,I+1,J-1)
+ Dm<- as.numeric(S)
+ if(is.na(Dm)){
+ Dm<- 1
+ }
+ ArgsL<- list()
+ for (I in 1:floor((YMAX-GENTEN[2])/Dm)){
+ ArgsL<- Mixjoin(ArgsL,I*Dm)
+ if(I-floor(I/Dn)*Dn==0){
+ Str<- as.character(I*Dm*R)
+ ArgsL<- Mixjoin(ArgsL,Str)
+ }
+ }
+ for (I in seq(-1,ceiling((YMIN-GENTEN[2])/Dm))){
+ ArgsL<- Mixjoin(ArgsL,I*Dm)
+ if(I-floor(I/Dn)*Dn==0){
+ Str<- as.character(I*Dm*R)
+ ArgsL<- Mixjoin(ArgsL,Str)
+ }
+ }
+ }
+ MemoriList<- list()
+ Memori<- list()
+ for (N in 1:length(ArgsL)){
+ Dt<- ArgsL[[N]]
+ if(mode(Dt)=="numeric" && length(Dt)>1){
+ if(length(Memori)>0){
+ MemoriList<- Mixjoin(MemoriList,list(Memori))
+ }
+ Memori<- list(Dt[1],Dt[2])
+ next
+ }
+ if(mode(Dt)=="character"){
+ Memori<- Mixjoin(Memori,Dt)
+ }
+ else{
+ if(length(Memori)>0){
+ MemoriList<- Mixjoin(MemoriList,list(Memori))
+ }
+ Memori<- list(GENTEN[1],Dt)
+ }
+ }
+ MemoriList<- Mixjoin(MemoriList,list(Memori))
+ for (N in 1:length(MemoriList)){
+ Dt<- MemoriList[[N]]
+ Ndt<- length(Dt)
+ X=Op(1,Dt)
+ Y=Op(2,Dt)
+ Tmp<-Doscaling(c(X,Y))
+ X<- Tmp[1]
+ Y<- Tmp[2]
+ Moji<- Op(Ndt,Dt)
+ Tmp1<- Unscaling(c(X+MARKLEN,Y))
+ Tmp2<- Unscaling(c(X-MARKLEN,Y))
+ Fd<- Listplot(c(Tmp1,Tmp2))
+ Drwline(Fd)
+ if(Ndt==3){
+ Tmp<-Unscaling(c(X-MARKLEN,Y))
+ Expr(Tmp,"w",Moji)
+ }
+ if(Ndt==4){
+ Houkou<- Op(3,Dt)
+ Tmp<-grep("w",Houkou)
+ if(length(Tmp)>0){
+ Tmp<-Unscaling(c(X-MARKLEN,Y))
+ Expr(Tmp,Houkou,Moji)
+ }
+ else{
+ Tmp<- Unscaling(c(X+MARKLEN,Y))
+ Expr(Tmp,Houkou,Moji)
+ }
+ }
+ cat("%\n",file=Wfile,append=TRUE)
+ }
+}
+
+############################################
+
+Windisp<-function(...){
+ varargin<-list(...)
+ Nargs<-length(varargin)
+ Tmp<- Doscaling(c(XMIN,YMIN))
+ Xmn<- Tmp[1]; Ymn<- Tmp[2]
+ Tmp<- Doscaling(c(XMAX,YMAX))
+ Xmx<- Tmp[1]; Ymx<- Tmp[2]
+ plot(c(Xmn,Xmx),c(Ymn,Ymx),type="n",asp=1,axes=FALSE,xlab="",ylab="")
+ Tmp<- Doscaling(Listplot(c(0,YMIN),c(0,YMAX)))
+ axis(2,at=as.numeric(Tmp[,2]), labels=round(c(YMIN,YMAX),2))
+ Tmp<- Doscaling(Listplot(c(XMIN,0),c(XMAX,0)))
+ axis(1,at=as.numeric(Tmp[,1]), labels=round(c(XMIN,XMAX),2))
+ Tmp1<- c(XMIN,GENTEN[2])
+ Tmp2<- c(XMAX,GENTEN[2])
+ Tmp3<- Listplot(Tmp1,Tmp2)
+ Tmp<- MakeCurves(Tmp3,0)
+ if(Datalength(Tmp)>0){
+ lines(Tmp[,1],Tmp[,2],col="green")
+ }
+ Tmp1<- c(GENTEN[1],YMAX)
+ Tmp2<- c(GENTEN[1],YMIN)
+ Tmp3<- Listplot(Tmp1,Tmp2)
+ Tmp<- MakeCurves(Tmp3,0)
+ if(Datalength(Tmp)>0){
+ lines(Tmp[,1],Tmp[,2],col="green")
+ }
+ Tmp<-Doscaling(Framedata())
+ lines(Tmp[,1],Tmp[,2])
+ for (I in Looprange(1,Nargs)){
+ Pdata<-varargin[[I]]
+ if(mode(Pdata)=="numeric"){
+ Pdata<-list(Pdata)
+ }
+ while(Mixtype(Pdata)==3){ # 10.02.23
+ Tmp1<- list()
+ for(II in Looprange(1,length(Pdata))){
+ Tmp1<- Mixjoin(Tmp1,Pdata[[II]])
+ }
+ Pdata<- Tmp1
+ } # 10.02.23
+ for (II in Looprange(1,length(Pdata))){
+ Tmp<-Pdata[[II]]
+ P<-MakeCurves(Tmp,0)
+ Ndm<-Dataindex(P)
+ for (J in Looprange(1,Nrow(Ndm))){
+ Q<-P[Ndm[J,1]:Ndm[J,2],]
+ if(Nrow(Q)==1){
+ Tmp<-seq(1,Ncol(Q),by=2)
+ for (K in Tmp){
+ Pt<-Q[K:(K+1)]
+ points(Pt[1],Pt[2])
+ }
+ }
+ else{
+ lines(Q[,1],Q[,2])
+ }
+ }
+ }
+ }
+}
+
+############################################
+
+WindispT<-function(..., color="black",width=1,new=FALSE,htick=c(),vtick=c()){ # 10.12.04
+ par(new=new)
+ varargin<-list(...)
+ Nargs<-length(varargin)
+ if(!new) # 10.12.04
+ {
+ Tmp<- Doscaling(c(XMIN,YMIN))
+ Xmn<- Tmp[1]; Ymn<- Tmp[2]
+ Tmp<- Doscaling(c(XMAX,YMAX))
+ Xmx<- Tmp[1]; Ymx<- Tmp[2]
+ plot(c(Xmn,Xmx),c(Ymn,Ymx),type="n",asp=1,axes=FALSE,xlab="",ylab="")
+ Tick<- sort(c(YMIN,YMAX,vtick)) #### 10.12.04 from here
+ Tmp1<- matrix(c(rep(0,length(Tick)),Tick),ncol=2)
+ Tmp<- Doscaling(Tmp1)
+ axis(2,at=as.numeric(Tmp[,2]), labels=round(Tick,2))
+ Tick<- sort(c(XMIN,XMAX,htick))
+ Tmp1<- matrix(c(Tick,rep(0,length(Tick))),ncol=2)
+ Tmp<- Doscaling(Tmp1)
+ axis(1,at=as.numeric(Tmp[,1]), labels=round(Tick,2)) #### 10.12.04 to here
+ Tmp1<- c(XMIN,GENTEN[2])
+ Tmp2<- c(XMAX,GENTEN[2])
+ Tmp3<- Listplot(Tmp1,Tmp2)
+ Tmp<- MakeCurves(Tmp3,0)
+ if(Datalength(Tmp)>0){
+ lines(Tmp[,1],Tmp[,2],col="green")
+ }
+ Tmp1<- c(GENTEN[1],YMAX)
+ Tmp2<- c(GENTEN[1],YMIN)
+ Tmp3<- Listplot(Tmp1,Tmp2)
+ Tmp<- MakeCurves(Tmp3,0)
+ if(Datalength(Tmp)>0){
+ lines(Tmp[,1],Tmp[,2],col="green")
+ }
+ Tmp<-Doscaling(Framedata())
+ lines(Tmp[,1],Tmp[,2])
+ }
+ for (I in Looprange(1,Nargs)){
+ Pdata<-Flattenlist(varargin[[I]]) # 101129 from here
+ Cmd<- list()
+ for (II in Looprange(1,length(Pdata))){
+ Tmp<-Pdata[[II]]
+ if(length(Tmp)==1){
+ Cmd<- c(Cmd,list(Tmp))
+ next
+ }
+
+ P<-MakeCurves(Tmp,0)
+
+ if(length(Cmd)>0){
+ if(length(Cmd)>=3){
+ polygon(P,col=Cmd[[1]],border=Cmd[[2]],density=Cmd[[3]])
+ }
+ else{
+ polygon(P,col=Cmd[[1]],border=Cmd[[2]])
+ }
+ next
+ } # 101129 to here
+ Ndm<-Dataindex(P)
+ for (J in Looprange(1,Nrow(Ndm))){
+ Q<-P[Ndm[J,1]:Ndm[J,2],]
+ if(Nrow(Q)==1){
+ Tmp<-seq(1,Ncol(Q),by=2)
+ for (K in Tmp){
+ Pt<-Q[K:(K+1)]
+ points(Pt[1],Pt[2],col=color)#taka101111
+ }
+ }
+ else{
+ lines(Q[,1],Q[,2],col=color,lwd=width)#taka101111
+ }
+ }
+ }
+ }
+ par(new=FALSE)
+}
+
+######################################
+
+# 3D
+
+#################################
+
+# 10.08.16
+CameracoordCurve<- function(Curve){
+ Out<- c()
+ for(J in Looprange(1,Nrow(Curve))){
+ P<- Ptcrv(J,Curve) #P=Curve(J,:);
+ Tmp<- P-FocusPoint
+ X1<- Tmp[1]; Y1<- Tmp[2]; Z1<- Tmp[3]
+ Tmp<- EyePoint-FocusPoint
+ E1<- Tmp[1]; F1<- Tmp[2]; G1<- Tmp[3]
+ Ca<- E1/sqrt(E1^2+F1^2)
+ Sa<- F1/sqrt(E1^2+F1^2)
+ X2<- X1*Ca+Y1*Sa; Y2<- -X1*Sa+Y1*Ca; Z2<- Z1
+ E2<- E1*Ca+F1*Sa; F2<- -E1*Sa+F1*Ca; G2<- G1
+ Cb<- E2/sqrt(E2^2+G2^2)
+ Sb<- G2/sqrt(E2^2+G2^2)
+ X3<- X2*Cb+Z2*Sb; Y3<- Y2; Z3<- -X2*Sb+Z2*Cb
+ E3<- E2*Cb+G2*Sb; F3<- F2; G3<- -E2*Sb+G2*Cb
+ Xz<- X3
+ Yz<- E3/(E3-X3)*Y3
+ Zz<- E3/(E3-X3)*Z3
+ Out<- rbind(Out,c(Yz,Zz,Xz))
+ }
+ rownames(Out)<- 1:Nrow(Out)
+ return(Out)
+}
+
+#########################################
+
+#100815
+CameraCurve<- function(Curve){
+ Eps<- 10^(-6)
+ for (I in Looprange(1,Nrow(Curve))){
+ P<- Curve[I,]
+ x<- P[1]; y<- P[2]; z<- P[3]
+ if(x!=Inf){
+ Tmp<- Perspt(P)
+ if(I==1){
+ AnsL<- rbind(c(),Tmp)
+ }else{
+ Tmp1<- AnsL[Nrow(AnsL),]
+ if(Tmp1[1]==Inf || Norm(Tmp-Tmp1)>Eps){
+ AnsL<- rbind(AnsL,Tmp)
+ }
+ }
+ }else{
+ AnsL<- rbind(AnsL,c(Inf,Inf))
+ }
+ }
+ rownames(AnsL)<- 1:Nrow(AnsL)
+ return(AnsL)
+}
+
+######################################
+
+Cancoordpara<- function(P){ # 18.02.15
+ Xz<- P[1]
+ Yz<- P[2]
+ Zz<- P[3]
+ X<- -Xz*sin(PHI)-Yz*cos(PHI)*cos(THETA)+Zz*cos(PHI)*sin(THETA)
+ Y<- Xz*cos(PHI)-Yz*sin(PHI)*cos(THETA)+Zz*sin(PHI)*sin(THETA)
+ Z<- Yz*sin(THETA)+Zz*cos(THETA)
+ Out<- c(X,Y,Z)
+ return(Out)
+}
+
+######################################
+
+Cancoordpers<- function(P){
+ Tmp<- EyePoint-FocusPoint
+ E1<- Tmp[1]; F1<- Tmp[2]; G1<- Tmp[3]
+ Ca<- E1/sqrt(E1^2+F1^2)
+ Sa<- F1/sqrt(E1^2+F1^2)
+ E2<- E1*Ca+F1*Sa; F2<- -E1*Sa+F1*Ca; G2<- G1
+ Cb<- E2/sqrt(E2^2+G2^2)
+ Sb<- G2/sqrt(E2^2+G2^2)
+ E3<- E2*Cb+G2*Sb; F3<- F2; G3<- -E2*Sb+G2*Cb
+ Xz<- P[3]; Yz<- P[1]; Zz<- P[2]
+ X3<- Xz; Y3<- Yz*(E3-Xz)/E3; Z3<- Zz*(E3-Xz)/E3
+ X2<- X3*Cb-Sb*Z3; Y2<- Y3; Z2<- Cb*Z3+Sb*X3
+ X1<- X2*Ca-Sa*Y2; Y1<- Ca*Y2+Sa*X2; Z1<- Z2
+ X<- X1+FocusPoint[1]
+ Y<- Y1+FocusPoint[2]
+ Z<- Z1+FocusPoint[3]
+ Out<- c(X,Y,Z)
+ return(Out)
+}
+
+#######################################
+
+Embed<- function(...){
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ Pd3<- varargin[[1]]
+ if(Mixtype(Pd3)==1){
+ Pd3<- list(Pd3)
+ }
+ else if(Mixtype(Pd3)==3){
+ Tmp<- list();
+ for(I in Looprange(1,length(Pd3))){
+ Tmp<- c(Tmp,Pd3[[I]])
+ }
+ Pd3<- Tmp
+ }
+ Tmpf=varargin[[2]]
+ if(mode(Tmpf)=="character"){
+ Tmp<- varargin[[3]]
+ Tmp1<- gsub("c(","(",Tmp,fixed=TRUE)
+ Vstr<- gsub(")",")",Tmp1,fixed=TRUE)
+ Str<- paste("Tmpfn<- function",Vstr,"{",Tmpf,"}",sep="")
+ eval(parse(text=Str))
+ }
+ else{
+ Tmpfn<- Tmpf
+ }
+ Out<- list()
+ for(I in Looprange(1,length(Pd3))){
+ PD<- Pd3[[I]]
+ Ans<- c()
+ for(J in Looprange(1,Nrow(PD))){
+ P<- PD[J,]
+ Tmp<- Tmpfn(P[1],P[2])
+ Ans<- rbind(Ans,Tmp)
+ }
+ Out<- c(Out, list(Ans))
+ }
+ if(length(Out)==1){
+ Out<- Out[[1]]
+ }
+ return(Out)
+}
+
+#######################
+# 10.08.17
+# 14.03.30
+Facesdata<- function(...){
+ varargin<-list(...)
+ Nargs<- length(varargin)
+ FL<- varargin[[1]]
+ PT<- varargin[[length(varargin)]]
+ Tmp<-grep("para",PT,fixed=TRUE)
+ if(length(Tmp)>0){
+ Ptype<- 1
+ }else{
+ Ptype<- -1
+ }
+ if(Nargs==2){
+ CLadd<- list()
+ }else{
+ CLadd<- varargin[[2]]
+ }
+ NohiddenL<- list()
+ HiddenL<- list()
+ Eps<- 10^(-4)
+ if(length(CLadd)>0){
+ if(mode(CLadd)=="numeric"){
+ C<- list()
+ if(Nrow(CLadd)>1){
+ for (I in Looprange(1,Nrow(CLadd))){
+ C<- c(C,list(CLadd[I,]))
+ }
+ }else{
+ I<- 1
+ while (I<=Ncol(CLadd)){
+ C<- c(C,list(CLadd[1,I:(I+2)]))
+ I<- I+3
+ }
+ }
+ CrvL<- list(C)
+ }else if(mode(CLadd[[1]])=="numeric"){
+ CrvL<- list()
+ for (J in Looprange(1,length(CL))){
+ Ctmp<- CLadd[[J]]
+ C<- list()
+ if(Nrow(Ctmp)>1){
+ for (I in Looprange(1,Nrow(Ctmp))){
+ C<- c(C,list(Ctmp[I,]))
+ }
+ }else{
+ I<- 1
+ while(I<=Ncol(Ctmp)){
+ C<- c(C,list(Ctmp[1,I:(I+2)]))
+ I<- I+3
+ }
+ }
+ CrvL<- c(CrvL,list(C))
+ }
+ }else{
+ CrvL<- CLadd
+ }
+ }else{
+ CrvL<- list()
+ }
+ Out<- MakeveLfaceL(FL)
+ VELNO<<- Out[[1]]
+ VELHI<<- list()
+ for (I in Looprange(1,length(CrvL))){
+ Tmp<- CrvL[[I]]
+ for (J in Looprange(1,length(Tmp)-1)){
+ Edge<- list(Tmp[J],Tmp[J+1])
+ Ntmp<- length(VELNO)
+ VELNO(Ntmp+1)<<- list(Edge,0,Ntmp+1)
+ }
+ }
+ FaceL<- Out[[2]]
+ Tmp<- grep("raw",PT,fixed=TRUE)
+ if(length(Tmp)==0){
+ for (Nf in Looprange(1,length(FaceL))){
+ Face<- FaceL[[Nf]]
+ Menkakusi2(Face,Nf,Ptype)
+ }
+ }
+ for (I in Looprange(1,length(VELNO))){
+ Edge<- Op(1,VELNO[[I]])
+ if(Norm(Edge[[1]]-Edge[[2]])>Eps){
+ NohiddenL<- c(NohiddenL,list(Spaceline(Edge)))
+ }
+ }
+ EdgeL<- list() # from 13.03.30
+ for(K in Looprange(1,length(VELHI))){
+ Edge<- Op(1,VELHI[[K]])
+ P<- Edge[[1]]; Q<- Edge[[2]]
+ if(Norm(P-Q)>Eps){
+ EdgeL<- c(EdgeL,list(Edge))
+ }
+ }
+ for(K in Looprange(1,length(EdgeL))){
+ Edge<- EdgeL[[K]]
+ P<- Edge[[1]]; Q<- Edge[[2]]
+ Cflg<- 0
+ for(J in Looprange(K+1,length(EdgeL))){
+ Ej<- EdgeL[[J]]
+ Pj<- Ej[[1]]; Qj<- Ej[[2]]
+ if(Norm(Crossprod(Q-P,Qj-Pj))>Eps){
+ next
+ }
+ if(Norm(Q-Pj)<Eps){
+ EdgeL[[J]]<- list(P,Qj)
+ Cflg<- 1
+ break
+ }
+ if(Norm(P-Qj)<Eps){
+ EdgeL[[J]]=list(Q,Pj)
+ Cflg<- 1
+ break
+ }
+ }
+ if(Cflg==0){
+ HiddenL<- c(HiddenL,list(Spaceline(Edge)))
+ }
+ } # until 14.03.30
+ PHHIDDENDATA<<- HiddenL
+ return(NohiddenL)
+}
+
+##############################
+# 2014.03.31
+
+PhHiddenData<- function(){
+ PHHIDDENDATA
+}
+
+########## Old Fullform ( Check the case of Polygon )####################
+
+Fullformfunc<- function(FdL){# Out=Fullformfunc(FdL)
+ Out<- list(Op(1,FdL))
+ N<- Mixlength(FdL)
+ for (Jrg in Looprange(1,N)){
+ Tmp<- Stripblanks(Op(Jrg,FdL))
+ Tmp1<- grep("=c(",Tmp,fixed=TRUE)
+ if(length(Tmp1)>0){
+ break
+ }
+ }
+ Urg<- Stripblanks(Op(Jrg,FdL))
+ StrV<- strsplit(Urg,"=",fixed=TRUE)[[1]]
+ Uname<- StrV[1]
+ Vrg<- Stripblanks(Op(Jrg+1,FdL))
+ StrV<- strsplit(Vrg,"=",fixed=TRUE)[[1]]
+ Vname<- StrV[1]
+ if(Jrg==2){
+ Tmp<- Stripblanks(Op(1,FdL))
+ StrV<- strsplit(Tmp,"=",fixed=TRUE)[[1]]
+ Zf<- StrV[2]
+ Tmp<- list(Uname,Vname,Zf,Urg,Vrg)
+ Out<- c(Out,Tmp)
+ }else if(Jrg==4){
+ Tmp<- Stripblanks(Op(1,FdL))
+ StrV<- strsplit(Tmp,"=",fixed=TRUE)[[1]]
+ Zf<- StrV[2]
+ Tmp<- Stripblanks(Op(2,FdL))
+ StrV<- strsplit(Tmp,"=",fixed=TRUE)[[1]]
+ Xname<- StrV[1]
+ Xf<- StrV[2]
+ Tmp<- Stripblanks(Op(3,FdL))
+ StrV<- strsplit(Tmp,"=",fixed=TRUE)[[1]]
+ Yname<- StrV[1]
+ Yf<- StrV[2]
+ Tmp<- gsub(Xname,paste("(",Xf,")",sep=""),Zf,fixed=TRUE)
+ Zf<- gsub(Yname,paste("(",Yf,")",sep=""),Tmp,fixed=TRUE)
+ Tmp<- list(Xf,Yf,Zf,Urg,Vrg)
+ Out<- c(Out,Tmp)
+ }else{
+ Tmp<- Stripblanks(Op(2,FdL))
+ StrV<- strsplit(Tmp,"=",fixed=TRUE)[[1]]
+ Xf<- StrV[2]
+ Tmp<- Stripblanks(Op(3,FdL))
+ StrV<- strsplit(Tmp,"=",fixed=TRUE)[[1]]
+ Yf<- StrV[2]
+ Tmp<- Stripblanks(Op(4,FdL))
+ StrV<- strsplit(Tmp,"=",fixed=TRUE)[[1]]
+ Zf<- StrV[2]
+ Tmp<- list(Xf,Yf,Zf,Urg,Vrg)
+ Out<- c(Out,Tmp)
+ }
+ DrwS<- "enws"
+ BdyL<- c()
+ for (I in Looprange(Jrg+2,Mixlength(FdL))){
+ Tmp<- Op(I,FdL)
+ if(mode(Tmp)=="character"){
+ if(length(Tmp)==0){
+ Tmp<- " "
+ }
+ DrwS<- Tmp
+ }
+ if(mode(Tmp)=="numeric" && Ncol(Tmp)>1){
+ BdyL<- Tmp
+ }
+ }
+ Tmp<- list(DrwS,BdyL)
+ Out<- c(Out,Tmp)
+ return(Out)
+}
+
+####################################
+
+Initangle<- function (){
+ PHI<<- 30*pi/180
+ THETA<<- 60*pi/180
+}
+
+##########################
+
+Invparapt<- function(...){
+ varargin<- list(...)
+ Eps<- 10^(-4)
+ Fk<- varargin[[length(varargin)]]
+ NFk<- Numptcrv(Fk)
+ Tmp<- varargin[[1]]
+ if(mode(Tmp)=="numeric" && length(Tmp)==1){ # debug
+ Ph<- Tmp
+ Fh<- varargin[[2]]
+ }else{
+ Fh<- Projpara(Fk)
+ if(NFk>2){
+ Tmp1<- Nearestpt(Tmp,Fh)
+ Ph<- Tmp1[[2]]
+ }else{
+ Ah<- Ptcrv(1,Fh); Bh=Ptcrv(2,Fh)
+ V1<- Tmp-Ah; V2<- Bh-Ah
+ Tmp1<- Crossprod(V1,V2)
+ if(abs(Tmp1)>Eps){
+ print("Not on the line")
+ return(c())
+ }else{
+ Ph<- Dotprod(V1,V2)/Norm(V2)^2+1
+ }
+ }
+ }
+ if(NFk>2){
+ N<- trunc(Ph)
+ S0<- Ph-N
+ if(Ph>Numptcrv(Fh)-Eps){
+ Out<- list(Ptend(Fk),Numptcrv(Fh))
+ return(Out)
+ }
+ }else{
+ N<- 1
+ S0<- Ph-1
+ }
+ Ak<- Ptcrv(N,Fk); Bk=Ptcrv(N+1,Fk)
+ Ah<- Ptcrv(N,Fh); Bh=Ptcrv(N+1,Fh)
+ Ph<- (1-S0)*Ah+S0*Bh
+ T2<- S0
+ Pk<- (1-T2)*Ak+T2*Bk
+ Out<- list(Pk,N+T2)
+ return(Out)
+}
+
+#################################
+
+#100815
+Invperspt<- function(...){
+ varargin<-list(...)
+ Eps<- 10^(-4)
+ Fk<- varargin[[length(varargin)]]
+ NFk<- Numptcrv(Fk)
+ Tmp<- varargin[[1]]
+ if(mode(Tmp)=="numeric" && length(Tmp)==1){
+ Ph<- varargin[[1]]
+ Fh<- varargin[[2]]
+ }else{
+ Fh<- Projpers(Fk)
+ if(NFk>2){
+ Tmp1<- Nearestpt(Tmp,Fh)
+ Ph<- Tmp1[[2]]
+ }else{
+ Ah<- Ptcrv(1,Fh); Bh<- Ptcrv(2,Fh)
+ V1<- Tmp-Ah; V2<- Bh-Ah
+ Tmp1<- Crossprod(V1,V2)
+ if(abs(Tmp1)>Eps){
+ print("Not on the line")
+ Out<- c()
+ return(Out)
+ }else{
+ Ph<- Dotprod(V1,V2)/Norm(V2)^2+1# 09.11.12
+ }
+ }
+ }
+ if(NFk>2){
+ N<- trunc(Ph)
+ S0<- Ph-N
+ if(Ph>Numptcrv(Fh)-Eps){
+ Out<- list(Ptend(Fk),Numptcrv(Fh))
+ return(Out)
+ }
+ }else{
+ N<- 1
+ S0<- Ph-1 # 09.11.12
+ }
+ Ak<- Ptcrv(N,Fk); Bk<- Ptcrv(N+1,Fk)
+ Ah<- Ptcrv(N,Fh); Bh<- Ptcrv(N+1,Fh)
+ Ph<- (1-S0)*Ah+S0*Bh
+ Phc<- Cancoordpers(c(Ph,0))
+ Ahc<- Cancoordpers(c(Ah,0))
+ Bhc<- Cancoordpers(c(Bh,0))
+ Vp<- Phc-EyePoint
+ Va<- Ak-EyePoint
+ AB<- Bk-Ak
+ Cp<- Crossprod(Vp,AB)
+ Nmr<- Crossprod(Va,Vp)
+ Mx<- max(abs(Cp))
+ if(abs(Cp[1])==Mx){
+ T2<- Nmr[1]/Cp[1]
+ }else if(abs(Cp[2])==Mx){
+ T2<- Nmr[2]/Cp[2]
+ }else{
+ T2<- Nmr[3]/Cp[3]
+ }
+ Pk<- (1-T2)*Ak+T2*Bk
+ Out<- list(Pk,N+T2)
+ return(Out)
+}
+
+#########################
+
+Kukannozoku<- function(Jokyo,KukanL){
+ Eps<- 10^(-6)
+ N<- Nrow(KukanL)
+ T1<- Jokyo[1]; T2<- Jokyo[2]
+ Tmp<- KukanL[1,]
+ T1<- max(T1,Tmp[1])
+ Tmp<- KukanL[N,]
+ T2<- min(T2,Tmp[2])
+ Res<- c()
+ Flg<- 0
+ for (I in Looprange(1,N)){
+ Ku<- KukanL[I,]
+ if(Flg==0){
+ if(Ku[2]<T1){
+ Res<- rbind(Res,Ku)
+ }else{
+ Flg<- 1
+ if(Ku[1]<T1-Eps){
+ Tmp<- c(Ku[1],T1)
+ Res<- rbind(Res,Tmp)
+ }
+ if(Ku[2]>T2+Eps){
+ Tmp<- c(T2,Ku[2])
+ Res<- rbind(Res,Tmp)
+ }
+ }
+ }else if(Flg==1){
+ if(Ku[2]<T2){
+ next
+ }else{
+ Flg<- 2
+ if(Ku[1]<T2-Eps){
+ Ku<- c(T2,Ku[2])
+ }
+ Res<- rbind(Res,Ku)
+ }
+ }else{
+ Res<- rbind(Res,Ku)
+ }
+ }
+ return(Res)
+}
+
+########################################
+
+Makeskeletondata<- function(Obj2L,Plt2L,R0,Eps2){
+ Eps<- 10.0^(-3)
+ Dmat<- c()
+ Dind<- c()
+ for (I in Looprange(1,Mixlength(Plt2L))){
+ Dt<- Op(I,Plt2L)
+ N1<- Nrow(Dmat)+1
+ if(Nrow(Dmat)==0){
+ Dmat<- Dt
+ }else{
+ Dmat<- rbind(Dmat,Dt)
+ }
+ N2<- Nrow(Dmat)
+ Dind<- c(Dind,N1,N2)
+ }
+ Dind<- matrix(Dind,ncol=2,byrow=TRUE)
+ Nind<- Nrow(Dind)
+ Allres<- list()
+ for (Nobj in Looprange(1,Mixlength(Obj2L))){
+ Plt2<- Op(Nobj,Obj2L)
+ PhL<- Plt2[,1:2]
+ ClipL<- c()
+ for (Ns in Looprange(1,Nrow(PhL)-1)){
+ P1<- PhL[Ns:(Ns+1),]
+ for (I in Looprange(1,Nrow(Dind))){
+ Tmp<- Dmat[Dind[I,1]:Dind[I,2],]
+ P2<- Tmp[,1:2]
+ KC<- IntersectcrvsPp(P1,P2)
+ if(Mixlength(KC)>0){
+ for (J in 1:Mixlength(KC)){
+ P<- Op(1,Op(J,KC))
+ Tmp<- Op(2,Op(J,KC))
+ if(Tmp<1+Eps && Ns==1){
+ next
+ }
+ if(Tmp>Numptcrv(P1)-Eps && Ns==(Nrow(PhL)-1)){
+ next
+ }
+ N1<- Ns
+ N2<- Op(3,Op(J,KC))
+ Pa<- Plt2[N1,1:2]
+ Za<- Plt2[N1,3]
+ Pb<- Plt2[N1+1,1:2]
+ Zb<- Plt2[N1+1,3]
+ if(Norm(Pa-Pb)<Eps){
+ next
+ }
+ T1<- Norm(Pa-P)/Norm(Pa-Pb)
+ Z1<- (1-T1)*Za+T1*Zb
+ Tmp<- Dmat[Dind[I,1]:Dind[I,2],]
+ Pa<- Tmp[N2,1:2]
+ Za<- Tmp[N2,3]
+ Pb<- Tmp[N2+1,1:2]
+ Zb<- Tmp[N2+1,3]
+ if((Norm(Pa-Pb)<Eps)){
+ next
+ }
+ T2<- Norm(Pa-P)/Norm(Pa-Pb)
+ Z2<- (1-T2)*Za+T2*Zb
+ if(Z1<Z2-Eps2){
+ if(Nrow(ClipL)==0){
+ Tmp<- 1
+ }else{
+ Tmp1<- ClipL[,1]-P[1]
+ Tmp2<- ClipL[,2]-P[2]
+ Tmp3<- Tmp1^2+Tmp2^2
+ Tmp<- min(Tmp3)
+ }
+ if(Tmp>Eps^2){
+ Tmp1<- P1[2,]-P1[1,]
+ Tmp2<- Pb-Pa
+ Tmp3<- Dotprod(Tmp1,Tmp2)
+ Tmp3<- Tmp3/Norm(Tmp1)/Norm(Tmp2)
+ Tmp<- 1-0.5*Tmp3^2
+ ClipL<- rbind(ClipL,c(P,N1,T1,R0/Tmp))
+ }
+ }
+ }
+ }
+ }
+ }
+ Te<- Nrow(Plt2)
+ KukanL<- rbind(c(),c(1.0,Te))
+ P1<- PhL
+ if(Nrow(ClipL)>0){
+ for (I in 1:Nrow(ClipL)){
+ P<- ClipL[I,1:2]
+ NN<- ClipL[I,3]
+ T<- NN+ClipL[I,4]
+ R<- ClipL[I,5]
+ Flg<- 0
+ for (J in NN:1){
+ Q<- Pointoncurve(J,P1)
+ if(Norm(P-Q)<R){
+ next
+ }
+ Flg<- 1
+ break
+ }
+ if(Flg==0){
+ T1<- 1
+ }else{
+ T1<- J; T2<- T
+ H<- T2-T1
+ for (N in 1:10){
+ H<- H*0.5
+ Q<- Pointoncurve(T1+H,P1)
+ if(Norm(P-Q)<R){
+ T2<- T2-H
+ }else{
+ T1<- T1+H
+ }
+ }
+ }
+ Ku<- c(T1)
+ Flg<- 0
+ for (J in Looprange(NN+1,Te)){
+ Q<- Pointoncurve(J,P1)
+ if(Norm(P-Q)<R){
+ next
+ }
+ Flg<- 1
+ break
+ }
+ if(Flg==0){
+ T2<- Te
+ }else{
+ T1<- T; T2<- J
+ H<- T2-T1
+ for (N in 1:10){
+ H<- H*0.5
+ Q<- Pointoncurve(T1+H,P1)
+ if(Norm(P-Q)<R){
+ T1<- T1+H
+ }else{
+ T2<- T2-H
+ }
+ }
+ }
+ Ku<- c(Ku,T2)
+ KukanL<- Kukannozoku(Ku,KukanL)
+ }
+ }
+ Res<- list()
+ for (I in Looprange(1,Nrow(KukanL))){
+ T1<- KukanL[I,1]; N1<- trunc(T1)
+ T2<- KukanL[I,2]; N2<- trunc(T2)
+ PtL<- list()
+ if(T1-N1<1-Eps){
+ Tmp<- Pointoncurve(T1,P1)
+ PtL<- list(Tmp)
+ }
+ for (J in Looprange(N1+1,N2)){
+ Tmp<- Pointoncurve(J,P1)
+ PtL<- c(PtL,list(Tmp))
+ }
+ if(T2-N2>Eps){
+ Tmp<- Pointoncurve(T2,P1)
+ PtL<- c(PtL,list(Tmp))
+ }
+ Res<- c(Res,list(Listplot(PtL)))
+ }
+ Allres<- c(Allres,Res)
+ }
+ return(Allres)
+}
+
+#########################
+
+#100815
+Makeskeletonpersdata<- function(Obj2L,Plt2L,R0,Eps2){
+ Eps<- 10.0^(-3)
+ Dmat<- c()
+ Dind<- c()
+ for (I in Looprange(1,Mixlength(Plt2L))){
+ Dt<- Op(I,Plt2L)
+ N1<- Nrow(Dmat)+1
+ Dmat<- rbind(Dmat,Dt)
+ N2<- Nrow(Dmat)
+ Dind<- rbind(Dind,c(N1,N2))
+ }
+ Nind<- Nrow(Dind)
+ Allres<- list()
+ for (Nobj in Looprange(1,Mixlength(Obj2L))){
+ Plt2<- Op(Nobj,Obj2L)
+ PhL<- Plt2[,1:2]
+ ClipL<- c()
+ for (Ns in Looprange(1,Nrow(PhL)-1)){
+ P1<- PhL[Ns:(Ns+1),]
+ for (I in Looprange(1,Nrow(Dind))){
+ Tmp<- Dmat[Dind[I,1]:Dind[I,2],]
+ P2<- Tmp[,1:2]
+ KC<- IntersectcrvsPp(P1,P2,Eps)
+ if(Mixlength(KC)>0){
+ for (J in Looprange(1,Mixlength(KC))){#
+ P<- Op(1,Op(J,KC))
+ Tmp<- Op(2,Op(J,KC))
+ if(Tmp<(1+Eps) && Ns==1){
+ next
+ }
+ if(Tmp>Numptcrv(P1)-Eps && Ns==(Nrow(PhL)-1)){
+ next
+ }
+ N1<- Ns
+ N2<- Op(3,Op(J,KC))
+ Pa<- Plt2[N1,1:2]
+ Za<- Plt2[N1,3]
+ Pb<- Plt2[N1+1,1:2]
+ Zb<- Plt2[N1+1,3]
+ if(Norm(Pa-Pb)<Eps){
+ next
+ }
+ T1<- Norm(Pa-P)/Norm(Pa-Pb)#norm(Pa-P)/norm(Pa-Pb)
+ Pka<- Cancoordpers(c(Pa[1],Pa[2],Za))
+ Pkb<- Cancoordpers(c(Pb[1],Pb[2],Zb))
+ if(T1>1-Eps){
+ Pk<- Pkb
+ }else{
+ Tmp1<- Listplot(c(Pa,Pb))
+ Tmp2<- Spaceline(c(Pka,Pkb))
+ Tmp<- Invperspt(1+T1,Tmp1,Tmp2)
+ Pk<- Op(1,Tmp)
+ }
+ Z1<- Zperspt(Pk)
+ Tmp<- Dmat[Dind[I,1]:Dind[I,2],]
+ Pa<- Tmp[N2,1:2]
+ Za<- Tmp[N2,3]
+ Pb<- Tmp[N2+1,1:2]
+ Zb<- Tmp[N2+1,3]
+ if(Norm(Pa-Pb)<Eps){
+ next
+ }
+ T2<- Norm(Pa-P)/Norm(Pa-Pb)
+ Pka<- Cancoordpers(c(Pa[1],Pa[2],Za))
+ Pkb<- Cancoordpers(c(Pb[1],Pb[2],Zb))
+ if(T2>(1-Eps)){
+ Pk<- Pkb
+ }else{
+ Tmp1<- Listplot(c(Pa,Pb))
+ Tmp2<- Spaceline(c(Pka,Pkb))
+ Tmp<- Invperspt(1+T2,Tmp1,Tmp2)
+ Pk<- Op(1,Tmp)
+ }
+ Z2<- Zperspt(Pk)
+ if(Z1<(Z2-Eps2)){
+ if(length(ClipL)==0){
+ Tmp<- 1
+ }else{
+ Tmp1<- ClipL[,1]-P[1]
+ Tmp2<- ClipL[,2]-P[2]
+ Tmp3<- Tmp1^2+Tmp2^2
+ Tmp<- min(Tmp3)
+ }
+ if(Tmp>Eps^2){
+ Tmp1<- P1[2,]-P1[1,]
+ Tmp2<- Pb-Pa
+ Tmp3<- Dotprod(Tmp1,Tmp2)
+ Tmp3<- Tmp3/Norm(Tmp1)/Norm(Tmp2)
+ Tmp<- 1-0.5*Tmp3^2
+ ClipL<- rbind(ClipL,c(P,N1,T1,R0/Tmp))
+ }
+ }
+ }
+ }
+ }
+ }
+ Te<- Nrow(Plt2)
+ KukanL<- rbind(c(),c(1.0,Te))
+ P1<- PhL
+ if(Nrow(ClipL)>0){
+ for (I in Looprange(1,Nrow(ClipL))){
+ P<- ClipL[I,1:2]
+ NN<- ClipL[I,3]
+ T<- NN+ClipL[I,4]
+ R<- ClipL[I,5] #added 10.08.17
+ Flg<- 0
+ for (J in NN:1){
+ Q<- Pointoncurve(J,P1)
+ if(Norm(P-Q)<R){#(norm(P-Q)<R)
+ next
+ }
+ Flg<- 1
+ break
+ }
+ if(Flg==0){
+ T1<- 1
+ }else{
+ T1<- J; T2<- T
+ H<- T2-T1
+ for (N in 1:10){
+ H<- H*0.5
+ Q<- Pointoncurve(T1+H,P1)
+ if(Norm(P-Q)<R){ # norm(P-Q)<R
+ T2<- T2-H
+ }else{
+ T1<- T1+H
+ }
+ }
+ }
+ Ku<- c(T1)#Ku<- [T1]
+ Flg<- 0
+ for (J in Looprange(NN+1,Te)){
+ Q<- Pointoncurve(J,P1)
+ if(Norm(P-Q)<R){
+ next#continue
+ }
+ Flg<- 1
+ break
+ }
+ if(Flg==0){
+ T2<- Te
+ }else{
+ T1<- T; T2<- J
+ H<- T2-T1
+ for (N in 1:10){
+ H<- H*0.5
+ Q<- Pointoncurve(T1+H,P1)
+ if(Norm(P-Q)<R){
+ T1<- T1+H
+ }else{
+ T2<- T2-H
+ }
+ }
+ }
+ Ku<- c(Ku,T2)#[Ku,T2]
+ KukanL<- Kukannozoku(Ku,KukanL)
+ }
+ }
+ Res<- list()#[]
+ for (I in Looprange(1,Nrow(KukanL))){#(I=1:size(KukanL,1))
+ T1<- KukanL[I,1]; N1<- trunc(T1)
+ T2<- KukanL[I,2]; N2<- trunc(T2)
+ PtL<- list()#[]
+ if(T1-N1<1-Eps){
+ Tmp<- Pointoncurve(T1,P1)
+ PtL<- list(Tmp)#100816c(PtL,list(Tmp)) PtL<- MixS(Tmp)
+ }
+ for (J in Looprange(N1+1,N2)){
+ Tmp<- Pointoncurve(J,P1)
+ PtL<- c(PtL,list(Tmp))#Mixadd(PtL,Tmp)
+ }
+ if(T2-N2>Eps){
+ Tmp<- Pointoncurve(T2,P1)
+ PtL<- c(PtL,list(Tmp))#Mixadd(PtL,Tmp)
+ }
+ Res<- c(Res,list(Listplot(PtL)))#Res<- Mixadd(Res,Listplot(PtL))
+ }
+ Allres<- c(Allres,Res)#Allres<- Mixjoin(Allres,Res)
+ }
+ return(Allres)
+}
+
+##############################3
+
+MakeveLfaceL<- function(VfL){
+# // Out format
+# // VeL Edge, Face num(as numlist), VeL num
+# // FL Face (Vertexs)
+ Eps<- 10^(-4)
+ Tmp<- VfL[[length(VfL)]]
+ Tmp1<- Tmp[[1]]
+ if(mode(Tmp1)=="numeric"){
+ FvL<- list(VfL)
+ }else{
+ FvL<- VfL
+ }
+ EL<- list(); FL<- list()
+ for (Nn in Looprange(1,length(FvL))){
+ Tmp<- FvL[[Nn]]
+ VL<- Tmp[[1]]
+ if(length(VL)>0){
+ FnL<- Tmp[[2]]
+ FaceL<- list()
+ for (I in Looprange(1,length(FnL))){
+ Tmp1<- FnL[[I]]
+ PtL<- list()
+ for (J in Looprange(1,length(Tmp1))){
+ Tmp2<- Tmp1[[J]]
+ PtL[[J]]<- VL[[Tmp2]]
+ }
+ FaceL[[I]]<- PtL
+ }
+ }else{
+ FaceL<- list(Tmp[[2]])
+ }
+ for (I in Looprange(1,length(FaceL))){
+ Face<- FaceL[[I]]
+ Face<- c(Face,list(Face[[1]]))
+ FL<- c(FL,list(Face))
+ for (J in Looprange(1,length(Face)-1)){
+ Edge<- list(Face[[J]],Face[[J+1]])
+ Flg<- 0
+ for (K in Looprange(1,length(EL))){
+ Tmp<- EL[[K]]
+ Tmp1<- Tmp[[1]]
+ Tmp2<- Norm(Edge[[1]]-Tmp1[[1]])+Norm(Edge[[2]]-Tmp1[[2]])
+ Tmp3<- Norm(Edge[[1]]-Tmp1[[2]])+Norm(Edge[[2]]-Tmp1[[1]])
+ if(Tmp2<Eps || Tmp3<Eps){#(
+ Tmp<- EL[[K]]
+ Tmp1<- Tmp[[1]]
+ Tmp2<- c(Tmp[[2]],length(FL))
+ EL[[K]]<- list(Tmp1,Tmp2,K)
+ Flg<- 1
+ break
+ }
+ }
+ if(Flg==0){
+ Ntmp<- length(EL)
+ EL[[Ntmp+1]]<- list(Edge,c(length(FL)),Ntmp+1)
+ }
+ }
+ }
+ }
+ Out<- list(EL,FL)
+ return(Out)
+}
+
+###########################
+# 09.10.29
+# 09.11.15
+
+Menkakusi2<- function(Face,Nf,Ptype){
+# global THETA PHI EyePoint FocusPoint VELNO VELHI
+ Eps0<- 10^(-6)
+ Eps<- 10^(-4)
+ Tmp1<- Face[[1]]-Face[[2]]
+ Tmp2<- Face[[3]]-Face[[2]]
+ if(Norm(Tmp1)<Eps || Norm(Tmp2)<Eps){
+ return()
+ }
+ Vec<- 1/Norm(Tmp1)/Norm(Tmp2)*Crossprod(Tmp1,Tmp2)
+ if(Norm(Vec)<Eps){
+ return()
+ }
+ if(Ptype== -1){
+ W<- EyePoint
+ Tmp<- Dotprod(Vec,W-Face[[1]])
+ }else{
+ W<- c(sin(THETA)*cos(PHI),sin(THETA)*sin(PHI),cos(THETA))
+ W<- 100*W
+ Tmp<- Dotprod(Vec,W-Face[[1]])
+ }
+ if(abs(Tmp)<Eps){
+ return()
+ }
+ if(Tmp<-Eps){
+ Vec<- -Vec
+ }
+ if(Ptype==-1){
+ G1<- Projpers(Spaceline(Face))
+ }else{
+ G1<- Projpara(Spaceline(Face))
+ }
+ VL<- list()
+ for (I in Looprange(1,Numptcrv(G1))){
+ VL[[I]]<- Ptcrv(I,G1)
+ }
+ Out1L<- list()
+ Out2L<- VELHI
+ for (N in Looprange(1,length(VELNO))){
+ Out1<- list()
+ Out2<- list()
+ Tmp<- VELNO[[N]]
+ Edge<- Tmp[[1]]
+ Ne<- Tmp[[2]]
+ NNe<- Tmp[[3]]
+ if(Member(Nf,Ne)){
+ Out1L<- c(Out1L, list(list(Edge,Ne,NNe)))
+ next
+ }
+ if(Ptype==-1){
+ PtA<- Perspt(Edge[[1]])
+ PtB<- Perspt(Edge[[2]])
+ }else{
+ PtA<- Parapt(Edge[[1]])
+ PtB<- Parapt(Edge[[2]])
+ }
+ if(Norm(PtA-PtB)<Eps){
+ next
+ }
+ Bdy<- list(G1)
+ V<- PtB-PtA
+ TenL<- KoutenList(PtA,V,Bdy)
+ Nten<- length(TenL)
+ if(Nten==0){ # debug 10.08.17
+ Out1L<- c(Out1L,list(list(Edge,Ne,NNe)))
+ next
+ }
+ Te<- 0
+ Pe3<- Edge[[1]]
+ if(Ptype==-1){
+ Tmp1<- Perspt(Pe3)
+ Tmp<- Invperspt(Tmp1,Spaceline(Face))
+ }else{
+ Tmp1<- Parapt(Pe3)
+ Tmp<- Invparapt(Tmp1,Spaceline(Face))
+ }
+ Qe3<- Tmp[[1]]
+ Flg<- 0
+ for (I in Looprange(1,Nten)){
+ TenP<- TenL[[I]]
+ Ts<- TenP[[1]]
+ P<- TenP[[2]]
+ if(Ts< -Eps){
+ next
+ }
+ Eline<- Spaceline(Edge)
+ if(Ptype==-1){
+ Tmp<- Invperspt(P,Eline)
+ Tmp1<- Invperspt(P,Spaceline(Face))
+ }else{
+ Tmp<- Invparapt(P,Eline)
+ Tmp1<- Invparapt(P,Spaceline(Face))
+ }
+ P3<- Tmp[[1]]; Q3<- Tmp1[[1]]
+ if(Ts>1-Eps){# P3, Q3 are necessary
+ Flg<- I
+ break
+ }
+ if(abs(Te-Ts)>Eps0){
+ if((I%%2)==1){
+ Out1<- c(Out1,list(list(Pe3,P3)))
+ }else{
+ if(length(Qe3)==0){
+ Tmp<- Op(2,TenL[[I-1]])
+ if(Ptype==-1){
+ Tmp1<- Invperspt(Tmp,Spaceline(Face))
+ }else{
+ Tmp1<- Invparapt(Tmp,Spaceline(Face))
+ }
+ Qe3<- Tmp1[[1]]
+ }
+ PM<- 0.5*(Pe3+P3); QM<- 0.5*(Qe3+Q3)
+ if(Ptype==-1){
+ Z1<- Zperspt(PM); Z2<- Zperspt(QM)
+ }else{
+ Z1<- Zparapt(PM); Z2<- Zparapt(QM)
+ }
+ if(Z1>Z2){
+ Out1<- c(Out1, list(list(Pe3,P3)))
+ }else{
+ Out2<- c(Out2, list(list(Pe3,P3)))
+ }##
+ }
+ }
+ Te<- Ts; Pe3<- P3; Qe3<- Q3
+ }
+ if(Flg==0){
+ if(Norm(Pe3-Edge[[2]])>Eps0){
+ Out1<- c(Out1, list(list(Pe3,Edge[[2]])))
+ }
+ }else{
+ if((Flg%%2)==1){
+ Out1<- c(Out1, list(list(Pe3,Edge[[2]])))
+ }else{
+ PM<- 0.5*(Pe3+P3); QM<- 0.5*(Qe3+Q3)
+ if(Ptype==-1){
+ Z1<- Zperspt(PM); Z2<- Zperspt(QM)
+ }else{
+ Z1<- Zparapt(PM); Z2<- Zparapt(QM)
+ }
+ if(Z1>Z2){
+ Out1<- c(Out1, list(list(Pe3,Edge[[2]])))
+ }else{
+ Out2<- c(Out2, list(list(Pe3,Edge[[2]])))
+ }
+ }
+ }
+ for (I in Looprange(1,length(Out1))){
+ Tmp<- Out1[[I]]
+ if(I==1){
+ SeL<- Tmp
+ }else{
+ if(Norm(SeL[[2]]-Tmp[[1]])<Eps0){
+ SeL[[2]]<- Tmp[[2]]
+ }else{
+ Out1L<- c(Out1L, list(list(SeL,Ne,NNe)))
+ SeL<- Tmp
+ }
+ }
+ }
+ if(length(Out1)>0){
+ Out1L<- c(Out1L, list(list(SeL,Ne,NNe)))
+ }
+ for (I in Looprange(1,length(Out2))){
+ Tmp<- Out2[[I]]
+ if(I==1){
+ SeL<- Tmp
+ }else{
+ if(Norm(SeL[[2]]-Tmp[[1]])<Eps0){
+ SeL[[2]]<- Tmp[[2]]
+ }else{
+ Out2L<- c(Out2L, list(list(SeL,Ne,NNe)))
+ SeL<- Tmp
+ }
+ }
+ }
+ if(length(Out2)>0){
+ Out2L<- c(Out2L, list(list(SeL,Ne,NNe)))
+ }
+ }
+ VELNO<<- Out1L
+ VELHI<<- Out2L
+}
+
+###################################
+
+Parapt<- function(Plist){ # 18.02.19 changed (for point list)
+ if(!is.list(Plist)){Plist=list(Plist)}
+ Out=list()
+ for(jj in 1:length(Plist)){
+ P=Op(jj,Plist)
+ x<- P[1]
+ y<- P[2]
+ z<- P[3]
+ Xz<- -x*sin(PHI)+y*cos(PHI)
+ Yz<- -x*cos(PHI)*cos(THETA)-y*sin(PHI)*cos(THETA)+z*sin(THETA)
+ Out<- c(Out,list(c(Xz,Yz)))
+ }
+ if(length(Out)==1){Out=Op(1,Out)}
+ return(Out)
+}
+
+###################################
+
+Partcrv3<- function(T1,T2,Fk){
+ Eps0=10^(-4)
+# Tmp=Mixop(1,Fk)
+# new part from
+ if(T1>(T2+Eps0)){
+ Npt<- Nrow(Fk)
+ Out1<- Partcrv3(T1,Npt,Fk)
+ Out2<- Partcrv3(1,T2,Fk)
+ Tmp<- Fk[1,]-Fk[Npt,]
+ if(Norm(Tmp)<Eps0){
+ PL<- Joincrvs(Out1,Out2)
+ }else{
+ PL<- list(Out1,Out2)
+ }
+ rownames(PL)<- 1:Nrow(PL)
+ return(PL)
+ }
+ if(floor(T1)==floor(T2)){ #18.02.26from
+ Tmp=floor(T1)
+ p1=Op(Tmp,Fk); p2=Op(Tmp+1,Fk)
+ PL=c(p1+(T1-Tmp)*(p2-p1))
+ PL=Appendrow(PL, p1+(T2-Tmp)*(p2-p1)) #18.02.26until
+ }else{
+ Is<- ceiling(T1)
+ Ie<- floor(T2)
+ PL<- c()
+ if(T1<Is-Eps0){
+ P<- (Is-T1)*Fk[Is-1,]+(1-Is+T1)*Fk[Is,]
+ PL<- Appendrow(PL, P) #18.02.10(bug)
+ }
+ PL<- Appendrow(PL,Fk[Is:Ie,])
+ if(T2>(Ie+Eps0)){
+ P<- (1-T2+Ie)*Fk[Ie,]+(T2-Ie)*Fk[Ie+1,]
+ PL<- Appendrow(PL,P)
+ }
+ }
+ return(PL)
+}
+
+###################################
+
+#100815
+Perspt<- function(P){
+ Tmp<- P-FocusPoint
+ X1<- Tmp[1]; Y1<- Tmp[2]; Z1<- Tmp[3]
+ Tmp<- EyePoint-FocusPoint
+ E1<- Tmp[1];F1<- Tmp[2];G1<- Tmp[3]
+ Ca<- E1/sqrt(E1^2+F1^2)
+ Sa<- F1/sqrt(E1^2+F1^2)
+ X2<- X1*Ca+Y1*Sa; Y2<- -X1*Sa+Y1*Ca; Z2<- Z1
+ E2<- E1*Ca+F1*Sa; F2<- -E1*Sa+F1*Ca; G2<- G1
+ Cb<- E2/sqrt(E2^2+G2^2)
+ Sb<- G2/sqrt(E2^2+G2^2)
+ X3<- X2*Cb+Z2*Sb; Y3<- Y2; Z3<- -X2*Sb+Z2*Cb
+ E3<- E2*Cb+G2*Sb; F3<- F2; G3<- -E2*Sb+G2*Cb
+ Yz<- E3/(E3-X3)*Y3
+ Zz<- E3/(E3-X3)*Z3
+ Out<- c(Yz,Zz)
+ return(Out)
+}
+
+
+#################################
+
+Phcutdata<- function(VL,FaceL,PlaneD){
+ Out<- list()
+ EL<- list()
+ Eps<- 10^(-4)
+ for (I in Looprange(1,Mixlength(FaceL))){
+ Face<- Op(I,FaceL)
+ for (J in Looprange(1,length(Face))){
+ Nj<- J+1
+ if(J==length(Face)){
+ Nj<- 1
+ }
+ N1<- Face[J]; N2<- Face[Nj]
+ Tmp<- c(N1,N2)
+ Flg<- 0
+ for (K in Looprange(1,Mixlength(EL))){
+ Tmp1<- Op(K,EL)
+ Tmp2<- Tmp1[2:1]
+ if(all(Tmp==Tmp1) || all(Tmp==Tmp2)){
+ Flg<- 1
+ break
+ }
+ }
+ if(Flg==0){
+ EL<- c(EL,list(Tmp))
+ }
+ }
+ }
+ Out0<- list()
+ for (I in Looprange(1,Mixlength(EL))){
+ Tmp<- Op(I,EL)
+ Tmp1<- Op(Tmp[1],VL)
+ Tmp2<- Op(Tmp[2],VL)
+ Out0<- c(Out0, list(Spaceline(Tmp1,Tmp2)))
+ }
+ if(Mixtype(PlaneD)!=1){
+ V1<- Op(1,PlaneD)
+ Tmp<- Op(2,PlaneD)
+ if(length(Tmp)>1){
+ d<- V1[1]*Tmp[1]+V1[2]*Tmp[2]+V1[3]*Tmp[3]
+ }else{
+ d<- Tmp
+ }
+ }else if(mode(PlaneD)=="numeric"){
+ V1<- PlaneD[1:3]
+ d<- PlaneD[4]
+ }else{
+ StrV<- strsplit(PlaneD,"=",fixed=TRUE)
+ StrV<- StrV[[1]]
+ if(length(StrV)>1){
+ Tmp1<- StrV[1]
+ Tmp2<- StrV[2]
+ PlaneD<- paste(Tmp1,"-(",Tmp2,")",sep="")
+ }
+ x<- 0; y<- 0; z<- 0
+ d<- -eval(parse(text=PlaneD))
+ x<- 1; y<- 0; z<- 0;
+ Tmp1<- eval(parse(text=PlaneD))+d
+ x<- 0; y<- 1; z<- 0
+ Tmp2<- eval(parse(text=PlaneD))+d
+ x<- 0; y<- 0; z<- 1
+ Tmp3<- eval(parse(text=PlaneD))+d
+ V1<- c(Tmp1,Tmp2,Tmp3)
+ }
+ if(all(V1==c(0,0,0))){
+ return(Out0)
+ }
+ V3<- c(1,0,0)
+ Out1<- Rotate3data(Out0,V1,V3)
+ Tmp2<- Rotate3pt(c(1,0,0),V3,V1)
+ Tmp<- V1[1]*Tmp2[1]+V1[2]*Tmp2[2]+V1[3]*Tmp2[3]
+ x0<- d/Tmp
+ PtL<- list()
+ for (I in Looprange(1,Mixlength(Out1))){
+ Tmp<- Op(I,Out1)
+ Tmp1<- Tmp[1,]; Tmp2<- Tmp[2,]
+ P<- list(Tmp1,Tmp2-Tmp1)
+ Tmp<- list(Tmp1[1],Tmp2[1]-Tmp1[1])
+ if(abs(Tmp[[2]]) < Eps){
+ Tmp<- c()
+ }else{
+ Tmp1<- Tmp[[2]]
+ Tmp2<- x0-Tmp[[1]]
+ Tmp<- c(Tmp2/Tmp1)
+ }
+ if(length(Tmp)>0){
+ Tmp<- Tmp[1]
+ if(Tmp>-Eps && Tmp<(1+Eps)){
+ Tmp3<- P[[1]]+Tmp*P[[2]]
+ Tmp3<- Rotate3pt(Tmp3,V3,V1)
+ if(Tmp<Eps){
+ Tmp1<- Op(I,EL)
+ Tmp1<- Tmp1[1]
+ Tmp4<- list(c(Tmp1,Tmp1),Tmp3)
+ }else{
+ if(Tmp>1-Eps){
+ Tmp1<- Op(I,EL)
+ Tmp1<- Tmp1[2]
+ Tmp4<- list(c(Tmp1,Tmp1),Tmp3)
+ }else{
+ Tmp4<- list(Op(I,EL),Tmp3)
+ }
+ }
+ Flg<- 0
+ for (J in Looprange(1,Mixlength(PtL))){
+ Tmp<- Op(J,PtL)
+ Tmp<- Op(2,Tmp)
+ if(Norm(Tmp3-Tmp)<Eps){
+ Flg<- 1
+ break
+ }
+ }
+ if(Flg==0){
+ PtL<- c(PtL,list(Tmp4))
+ }
+ }
+ }
+ }
+ if(Mixlength(PtL)==0){
+ return(Out0)
+ }
+ PL<- list(Op(1,PtL))
+ QL<- PtL[2:Mixlength(PtL)]
+ N<- Mixlength(QL)
+ for (I in Looprange(2,N+1)){
+ Tmp1<- Op(Mixlength(PL),PL)
+ Tmp1<- Op(1,Tmp1)
+ for (J in Looprange(1,Mixlength(QL))){
+ Tmp2<- Op(J,QL)
+ Tmp2<- Op(1,Tmp2)
+ Flg<- 0
+ for (K in Looprange(1,Mixlength(FaceL))){
+ Tmp3<- Op(K,FaceL);
+ if(Member(Tmp1[1],Tmp3) &&
+ Member(Tmp1[2],Tmp3) &&
+ Member(Tmp2[1],Tmp3) &&
+ Member(Tmp2[2],Tmp3)){
+ Flg<- 1
+ break
+ }
+ }
+ if(Flg==1){
+ break
+ }
+ }
+ J<- min(J, Mixlength(QL))
+ PL<- c(PL,list(Op(J,QL)))
+ Tmp1<- QL[Looprange(1,J-1)]
+ Tmp2<- QL[Looprange(J+1,Mixlength(QL))]
+ QL<- c(Tmp1,Tmp2)
+ if(Mixlength(QL)==0){
+ break
+ }
+ }
+ PHCUTPOINTL<<- PL
+ Tmp<- list()
+ for (J in Looprange(1,Mixlength(PL))){
+ Tmp1<- Op(J,PL)
+ Tmp1<- Op(2,Tmp1)
+ Tmp<- c(Tmp,list(Tmp1))
+ }
+ Tmp1<- Op(1,PL)
+ Tmp1<- Op(2,Tmp1)
+ Tmp<- c(Tmp,list(Tmp1))
+ Out2<- Spaceline(Tmp)
+ Out<- c(Out0,list(Out2))
+}
+
+#########################################
+
+Phcutoffdata<- function(...){
+ varargin<-list(...)
+ Eps<- 10^(-4)
+ Out2<- list()
+ VL<- varargin[[1]]
+ FaceL<- varargin[[2]]
+ PlaneD<- varargin[[3]]
+ Sgnstr<- varargin[[4]]
+ Fugou<- 1
+ if(Sgnstr=="-" || Sgnstr=="n"){
+ Fugou<- -1
+ }
+ Out0<- Phcutdata(VL,FaceL,PlaneD)
+ PtL<- PHCUTPOINTL
+ PHVERTEXL<<- VL
+ PHFACEL<<- FaceL
+ if(length(PtL)==0){
+ Out2<- Out0
+ return(Out2)
+ }
+ N1<- Mixlength(VL)
+ Face<- c()
+ for (I in Looprange(1,Mixlength(PtL))){
+ Tmp<- Op(I,PtL)
+ Tmp3<- Op(1,Tmp)
+ Tmp1<- Tmp3[[1]]; Tmp2<- Tmp3[[2]] # debugged 10.08.14
+ if(Tmp1!=Tmp2){
+ VL<- c(VL,list(Op(2,Tmp)))
+ N1<- N1+1
+ Tmp1<- N1
+ }
+ Face<- c(Face,Tmp1)
+ PtL[[I]]<- list(Op(1,Tmp),Tmp1)
+ }
+ OutfL<- list(Face)
+ if(Mixtype(PlaneD)!=1){
+ V1<- Op(1,PlaneD)
+ Tmp<- Op(2,PlaneD)
+ if(length(Tmp)>1){
+ d<- V1[1]*Tmp[1]+V1[2]*Tmp[2]+V1[3]*Tmp[3]
+ }else{
+ d<- Tmp
+ }
+ }else if(mode(PlaneD)=="numeric"){
+ V1<- PlaneD[1:3]
+ d<- PlaneD[4]
+ }else{
+ StrV<- strsplit(PlaneD,"=",fixed=TRUE)
+ StrV<- StrV[[1]]
+ if(length(StrV)>1){
+ Tmp1<- StrV[1]
+ Tmp2<- StrV[2]
+ PlaneD<- paste(Tmp1,"-(",Tmp2,")",sep="")
+ }
+ x<- 0; y<- 0; z<- 0
+ d<- -eval(parse(text=PlaneD))
+ x<- 1; y<- 0; z<- 0
+ Tmp1<- eval(parse(text=PlaneD))+d
+ x<- 0; y<- 1; z<- 0
+ Tmp2<- eval(parse(text=PlaneD))+d
+ x<- 0; y<- 0; z<- 1
+ Tmp3<- eval(parse(text=PlaneD))+d
+ V1<- c(Tmp1,Tmp2,Tmp3)
+ }
+ for (I in Looprange(1,Mixlength(FaceL))){
+ Face<- Op(I,FaceL)
+ TmpL<- list()
+ for (J in Looprange(1,length(Face))){
+ N1<- Face[J]
+ if(J==length(Face)){
+ N2<- Face[1]
+ }else{
+ N2<- Face[J+1]
+ }
+ for (K in Looprange(1,Mixlength(PtL))){
+ Pd<- Op(K,PtL)
+ Tmp<- Op(1,Pd)
+ if(Tmp[1]==Tmp[2]){
+ if(Tmp[1]==N1){
+ TmpL<- c(TmpL,list(list(J,c(N1,N2),Op(2,Pd))))
+ }
+ }else{
+ if(all(Tmp==c(N1,N2)) || all(Tmp==c(N2,N1))){
+ TmpL<- c(TmpL,list(list(J,c(N1,N2),Op(2,Pd))))
+ }
+ }
+ }
+ }
+ if(Mixlength(TmpL)<2){
+ Flg<- 0
+ for (J in Looprange(1,length(Face))){
+ Tmp<- Op(Face[J],VL)
+ Tmp1<- Fugou*(Dotprod(V1,Tmp)-d)
+ if(Tmp1< -Eps){
+ Flg<- 1
+ break
+ }
+ }
+ if(Flg==0){
+ OutfL<- c(OutfL,list(Face))
+ }
+ next
+ }
+ Pd<- Op(1,TmpL)
+ Qd<- Op(2,TmpL)
+ Outf1<- c(Op(3,Pd))
+ Nf<- Op(1,Pd)+1
+ Tmp<- Op(2,Pd)
+ JJ<- 0
+ while (!all(Tmp==Op(2,Qd))){
+ JJ<- JJ+1
+ if(JJ>20){
+ print("bug")
+ return()
+ }
+ Tmp1<- Tmp[2]
+ if(Outf1[length(Outf1)]!=Tmp1){
+ Outf1<- c(Outf1,Tmp1)
+ }
+ Tmp<- c(Face[Nf])
+ Nf<- Nf+1
+ if(Nf>length(Face)){
+ Nf<- 1
+ }
+ Tmp<- c(Tmp,Face[Nf])
+ }
+ Tmp1<- Op(3,Qd)
+ if(Outf1[length(Outf1)]!=Tmp1){
+ Outf1<- c(Outf1,Tmp1)
+ }
+ Outf2<- c(Op(3,Pd))
+ Nf<- Op(1,Pd)
+ Tmp<- Op(2,Pd)
+ JJ<- 0
+ while (!all(Tmp==Op(2,Qd))){
+ JJ<- JJ+1
+ if(JJ>20){
+ print("bug")
+ return()
+ }
+ Tmp1<- Tmp[1]
+ if(Outf2[length(Outf2)]!=Tmp1){
+ Outf2<- c(Outf2,Tmp1)
+ }
+ Tmp<- c(Face[Nf])
+ Nf<- Nf-1
+ if(Nf<1){
+ Nf<- length(Face)
+ }
+ Tmp<- c(Face[Nf],Tmp)
+ }
+ Tmp1<- Op(3,Qd)
+ if(Outf2[length(Outf2)]!=Tmp1){
+ Outf2<- c(Outf2,Tmp1)
+ }
+ if(length(Outf1)<3 || length(Outf2)<3){
+ Face<- Outf1
+ if(length(Outf1)<length(Outf2)){
+ Face<- Outf2
+ }
+ Flg<- 0
+ for (J in Looprange(1,length(Face))){
+ Tmp<- Op(Face(J),VL)
+ Tmp1<- Fugou*(Dotprod(V1,Tmp)-d)
+ if(Tmp1<-Eps){
+ Flg<- 1
+ break
+ }
+ }
+ if(Flg==0){
+ OutfL<- c(OutfL,list(Face))
+ }
+ }else{
+ Tmp<- Op(Outf1[2],VL)
+ Tmp1<- Outf1
+ Tmp2<- Fugou*(Dotprod(V1,Tmp)-d)
+ if(Tmp2<0){
+ Tmp1<- Outf2
+ }
+ OutfL<- c(OutfL,list(Tmp1))
+ }
+ }
+ PHVERTEXL<<- VL
+ PHFACEL<<- OutfL
+ Out2<- Phcutdata(VL,OutfL,c(0,0,0,0))
+ return(Out2)
+}
+
+#######################
+
+Phparadata<- function(VL,FaceL){
+ Out<- Facesdata(list(VL,FaceL),"para")
+ return(Out)
+}
+
+####################################
+
+Phpersdata<- function(VL,FaceL){
+ Out<- Facesdata(list(VL,FaceL),"pers")
+ return(Out)
+}
+
+####################################
+
+Phspersdata<- function(Fdata){
+ Out<- Facesdata(Fdata,"pers")
+ return(Out)
+}
+
+####################################
+
+Phsparadata<- function(Fdata){
+ Out<- Facesdata(Fdata,"para")
+ return(Out)
+}
+
+#########################
+
+#100816
+Projpers<- function(...){
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ Flg<- 0
+ if(Nargs==1 && Mixtype(varargin[[1]])==1){
+ Flg<- 1
+ }
+ CL<- list()
+ for (N in Looprange(1,Nargs)){
+ Crv<- varargin[[N]]
+ if(Mixtype(Crv)==1){
+ Tmp<- CameraCurve(Crv)
+ CL<- c(CL,list(Tmp))
+ }else{
+ if(Mixtype(Crv)==3){
+ ObjL<- list()
+ for (I in Looprange(1,Mixlength(Crv))){
+ Tmp1<- Op(I,Crv)
+ if(Mixtype(Tmp1)==1){
+ ObjL<- c(ObjL,list(Tmp1))
+ }else{
+ ObjL<- c(ObjL,Tmp1)
+ }
+ }
+ Crv<- ObjL
+ }
+ for (J in Looprange(1,Mixlength(Crv))){
+ Tmp<- CameraCurve(Op(J,Crv))
+ CL<- c(CL,list(Tmp))
+ }
+ }
+ }
+ if(Mixlength(CL)==1 && Flg==1){
+ CL<- Op(1,CL)
+ }
+ return(CL)
+}
+
+###################################
+
+ProjcoordCurve<- function(Curve){
+ SP<- sin(PHI); CP<- cos(PHI)
+ ST<- sin(THETA); CT<- cos(THETA)
+ Out<- c()
+ for (J in Looprange(1,Nrow(Curve))){
+ P<- Ptcrv(J,Curve)
+ x<- P[1]; y<- P[2]; z<- P[3]
+ Xz<- -x*SP+y*CP
+ Yz<- -x*CP*CT-y*SP*CT+z*ST
+ Zz<- x*CP*ST+y*SP*ST+z*CT
+ Out<- c(Out,Xz,Yz,Zz)
+ }
+ Out<- matrix(Out,ncol=3,byrow=TRUE)
+ return(Out)
+}
+
+#################################
+
+ProjCurve<- function(Curve){ # 2018.02.26 rewritten
+ AnsL= c()
+ SP=sin(PHI); CP=cos(PHI)
+ ST=sin(THETA); CT=cos(THETA)
+ for(I in Looprange(1,Length(Curve)) ){
+ P=Op(I,Curve)
+ x=P[1]; y=P[2]; z=P[3]
+ if(x!=Inf){
+ Xz=-x*SP+y*CP
+ Yz= -x*CP*CT-y*SP*CT+z*ST
+ AnsL=Appendrow(AnsL,c(Xz,Yz))
+ Tmp= c(Xz,Yz)
+ }else{
+ AnsL=Appendrow(AnsL,c(Inf,Inf))
+ }
+ }
+ return(AnsL)
+}
+
+####################################
+
+Projpara<- function(...){
+ varargin<-list(...)
+ Nargs<- length(varargin)
+ Flg<- 0
+ if((Nargs==1)&&(is.numeric(varargin[[1]]))){
+ Flg<- 1
+ }
+ CL<- list()
+ for (N in Looprange(1,Nargs)){
+ Crv<- varargin[[N]]
+ if(is.numeric(Crv)){
+ if(!is.matrix(Crv)){ # 190408from
+ Crv=matrix(Crv,ncol=3)
+ } # 190408to
+ Tmp<- ProjCurve(Crv)
+ CL<- c(CL,list(Tmp))
+ }
+ else{
+ if(is.list(Crv)){
+ ObjL<- list()
+ for (I in Looprange(1,Mixlength(Crv))){
+ Tmp1<- Op(I,Crv)
+ if(is.numeric(Tmp1)){
+ ObjL<- c(ObjL,list(Tmp1))
+ }
+ else{
+ ObjL<- c(ObjL,Tmp1)
+ }
+ }
+ Crv<- ObjL
+ }
+ for (J in Looprange(1,length(Crv))){
+ Tmp<- ProjCurve(Op(J,Crv))
+ CL<- c(CL,list(Tmp))
+ }
+ }
+ }
+ if((length(CL)==1)&&(Flg==1)){
+ CL<- Op(1,CL)
+ }
+ return(CL)
+}
+
+#########################
+
+#100816
+Projpers<- function(...){
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ Flg<- 0
+ if(Nargs==1 && Mixtype(varargin[[1]])==1){
+ Flg<- 1
+ }
+ CL<- list()
+ for (N in Looprange(1,Nargs)){
+ Crv<- varargin[[N]]
+ if(Mixtype(Crv)==1){
+ Tmp<- CameraCurve(Crv)
+ CL<- c(CL,list(Tmp))
+ }else{
+ if(Mixtype(Crv)==3){
+ ObjL<- list()
+ for (I in Looprange(1,Mixlength(Crv))){
+ Tmp1<- Op(I,Crv)
+ if(Mixtype(Tmp1)==1){
+ ObjL<- c(ObjL,list(Tmp1))
+ }else{
+ ObjL<- c(ObjL,Tmp1)
+ }
+ }
+ Crv<- ObjL
+ }
+ for (J in Looprange(1,Mixlength(Crv))){
+ Tmp<- CameraCurve(Op(J,Crv))
+ CL<- c(CL,list(Tmp))
+ }
+ }
+ }
+ if(Mixlength(CL)==1 && Flg==1){
+ CL<- Op(1,CL)
+ }
+ return(CL)
+}
+
+#########################################
+# 180807
+
+Reflect3data<- function(...){
+ varargin<-list(...)
+ Nargs<- length(varargin)
+ Pd3<- varargin[[1]]
+ VL<- varargin[[2]]
+ if(Mixtype(Pd3)==1){
+ Pd3<- list(Pd3)
+ } else if(Mixtype(Pd3)==3){
+ Tmp<- list()
+ for (I in Looprange(1,Length(Pd3))){
+ Tmp<- c(Tmp,Op(I,Pd3))
+ }
+ Pd3<- Tmp
+ }
+ Out<- list()
+ for (I in Looprange(1,Length(Pd3))){
+ PD<- Op(I,Pd3)
+ Ans<- c()
+ for (J in Looprange(1,Nrow(PD))){
+ if(is.matrix(PD)){
+ P<- PD[J,]
+ }
+ else{
+ P<- PD
+ }
+ Tmp<- Reflect3pt(P,VL)
+ Ans<- rbind(Ans,Tmp)
+ }
+ rownames(Ans)<- 1:Nrow(Ans)
+ Out<- c(Out,list(Ans))
+ }
+ if(Length(Out)==1){
+ Out<- Op(1,Out)
+ }
+ return(Out)
+}
+
+#######################################
+
+Reflect3pt<- function(...){
+ varargin<-list(...)
+ Nargs<-length(varargin)
+ P<- varargin[[1]]
+ VL<- varargin[[2]]
+ if(Length(VL)==1){
+ Ans=2*Op(1,VL)-P
+ }
+ if(Length(VL)==2){
+ V1=Op(1,VL)
+ V2=Op(2,VL)
+ V3=(V2-V1)/Norm(V2-V1)
+ Tmp=V1+Dotprod(P-V1,V3)*V3
+ Ans=2*Tmp-P
+ }
+ if(Length(VL)==3){
+ V1=Op(1,VL)
+ V2=Op(2,VL)
+ V3=Op(3,VL)
+ Tmp=Crossprod(V2-V1,V3-V1)
+ Tmp1=P-Dotprod(Tmp, P-V1)/Norm(Tmp)^2*Tmp
+ Ans=2*Tmp1-P
+ }
+ return(Ans)
+}
+
+#########################################
+# 180807
+
+Scale3data<- function(...){
+ varargin<-list(...)
+ Nargs<- length(varargin)
+ Pd3<- varargin[[1]]
+ R<- varargin[[2]]
+ C<- varargin[[3]]
+ C<- c(0,0,0)
+ if(Nargs>=3){
+ C<- varargin[[3]]
+ }
+ if(Mixtype(Pd3)==1){
+ Pd3<- list(Pd3)
+ } else if(Mixtype(Pd3)==3){
+ Tmp<- list()
+ for (I in Looprange(1,Length(Pd3))){
+ Tmp<- c(Tmp,Op(I,Pd3))
+ }
+ Pd3<- Tmp
+ }
+ Out<- list()
+ for (I in Looprange(1,Length(Pd3))){
+ PD<- Op(I,Pd3)
+ Ans<- c()
+ for (J in Looprange(1,Nrow(PD))){
+ if(is.matrix(PD)){
+ P<- PD[J,]
+ }
+ else{
+ P<- PD
+ }
+ Tmp<- Scale3pt(P,R,C)
+ Ans<- rbind(Ans,Tmp)
+ }
+ rownames(Ans)<- 1:Nrow(Ans)
+ Out<- c(Out,list(Ans))
+ }
+ if(Length(Out)==1){
+ Out<- Op(1,Out)
+ }
+ return(Out)
+}
+
+#######################################
+
+Scale3pt<- function(...){
+ varargin<-list(...)
+ Nargs<-length(varargin)
+ P<- varargin[[1]]
+ R<- varargin[[2]]
+ if(length(R)==1){ #180808from
+ R=c(R,R,R)
+ } #180808to
+ C<- c(0,0,0)
+ if(Nargs>=3){
+ C<- varargin[[3]]
+ }
+ X1=P[1]; Y1=P[2]; Z1=P[3]
+ Cx=C[1]; Cy=C[2]; Cz=C[3]
+ X2=Cx+R[1]*(X1-Cx)
+ Y2=Cy+R[2]*(Y1-Cy)
+ Z2=Cz+R[3]*(Z1-Cz)
+ Ans=c(X2,Y2,Z2)
+ return(Ans)
+}
+
+#########################################
+# 11.08.27
+# 14.03.23 Debugged "center"
+
+Rotate3data<- function(...){
+#Eps=10^(-4)
+ varargin<-list(...)
+ Nargs<- length(varargin)
+ Pd3<- varargin[[1]]
+ W1<- varargin[[2]]
+ W2<- varargin[[3]]
+ C<- c(0,0,0)
+ if(Nargs>=4){
+ C<- varargin[[4]]
+ }
+ if(Mixtype(Pd3)==1){
+ Pd3<- list(Pd3)
+ } else if(Mixtype(Pd3)==3){
+ Tmp<- list()
+ for (I in Looprange(1,Mixlength(Pd3))){
+ Tmp<- c(Tmp,Op(I,Pd3))
+ }
+ Pd3<- Tmp
+ }
+ Out<- list()
+ for (I in Looprange(1,Mixlength(Pd3))){
+ PD<- Op(I,Pd3)
+ Ans<- c()
+ for (J in Looprange(1,Nrow(PD))){
+ if(is.matrix(PD)){ # 11.08.27
+ P<- PD[J,]
+ }
+ else{
+ P<- PD
+ }
+ Tmp<- Rotate3pt(P,W1,W2,C) # 14.03.23
+ Ans<- rbind(Ans,Tmp)
+ } # 11.08.27
+ rownames(Ans)<- 1:Nrow(Ans) #10.08.16
+ Out<- c(Out,list(Ans))
+ }
+ if(Mixlength(Out)==1){
+ Out<- Op(1,Out)
+ }
+ return(Out)
+}
+
+#######################################
+
+Rotate3pt<- function(...){
+ varargin<-list(...)
+ Eps<-10^(-4)
+ Nargs<-length(varargin)
+ P<- varargin[[1]]
+ W1<- varargin[[2]]
+ W2<- varargin[[3]]
+ C<- c(0,0,0)
+ if(Nargs>=4){
+ C<- varargin[[4]]
+ }
+ if(mode(W2)=="numeric" && length(W2)==1){
+ Ct<- cos(W2)
+ St<- sin(W2)
+ V3<- 1/Norm(W1)*W1
+ if(V3[1]==0){
+ Tmp<- c(1,0,0)
+ }else{
+ Tmp<- c(0,1,0)
+ }
+ W1<- c(Tmp[2]*V3[3]-Tmp[3]*V3[2],
+ Tmp[3]*V3[1]-Tmp[1]*V3[3],
+ Tmp[1]*V3[2]-Tmp[2]*V3[1])
+ V1<- 1/Norm(W1)*W1
+ V2<- c(V3[2]*V1[3]-V3[3]*V1[2],
+ V3[3]*V1[1]-V3[1]*V1[3],
+ V3[1]*V1[2]-V3[2]*V1[1])
+ }else{
+ Tmp<- c(W1[2]*W2[3]-W1[3]*W2[2],
+ W1[3]*W2[1]-W1[1]*W2[3],
+ W1[1]*W2[2]-W1[2]*W2[1])
+ if(Norm(Tmp)<Eps){
+ Ans<- P
+ return(Ans)
+ }
+ V1<- 1/Norm(W1)*W1
+ Ns<- V1[1]*W2[1]+V1[2]*W2[2]+V1[3]*W2[3]
+ Tmp<- W2-Ns*V1
+ V2<- 1/Norm(Tmp)*Tmp
+ Tmp<- c(V1[2]*V2[3]-V1[3]*V2[2],
+ V1[3]*V2[1]-V1[1]*V2[3],
+ V1[1]*V2[2]-V1[2]*V2[1])
+ V3<- 1/Norm(Tmp)*Tmp
+ Ct<- Ns/Norm(W2)
+ St<- sqrt(1-Ct^2)
+ }
+ if(Norm(Tmp)<Eps){
+ Ans<- P
+ return(Ans)
+ }
+ V1x<- V1[1]; V1y<- V1[2]; V1z<- V1[3]
+ V2x<- V2[1]; V2y<- V2[2]; V2z<- V2[3]
+ V3x<- V3[1]; V3y<- V3[2]; V3z<- V3[3]
+ if(Mixtype(P)!=1){
+ PtL<- P
+ }else{
+ PtL<- list(P)
+ }
+ Ans<- list()
+ for (N in Looprange(1,Mixlength(PtL))){
+ P<- Op(N,PtL)
+ if(P[1]==Inf){
+ Ans<- c(Ans,list(c(Inf,Inf,Inf)))
+ next
+ }
+ x<- P[1]-C[1]; y=P[2]-C[2]; z=P[3]-C[3]
+ Tmp1<- ((V1x*Ct+V2x*St)*V1x+(-V1x*St+V2x*Ct)*V2x+V3x^2)*x
+ Tmp2<- ((V1x*Ct+V2x*St)*V1y+(-V1x*St+V2x*Ct)*V2y+V3x*V3y)*y
+ Tmp3<- ((V1x*Ct+V2x*St)*V1z+(-V1x*St+V2x*Ct)*V2z+V3x*V3z)*z
+ X<- Tmp1+Tmp2+Tmp3
+ Tmp1<- ((V1y*Ct+V2y*St)*V1x+(-V1y*St+V2y*Ct)*V2x+V3x*V3y)*x
+ Tmp2<- ((V1y*Ct+V2y*St)*V1y+(-V1y*St+V2y*Ct)*V2y+V3y^2)*y
+ Tmp3<- ((V1y*Ct+V2y*St)*V1z+(-V1y*St+V2y*Ct)*V2z+V3y*V3z)*z
+ Y<- Tmp1+Tmp2+Tmp3
+ Tmp1<- ((V1z*Ct+V2z*St)*V1x+(-V1z*St+V2z*Ct)*V2x+V3x*V3z)*x
+ Tmp2<- ((V1z*Ct+V2z*St)*V1y+(-V1z*St+V2z*Ct)*V2y+V3y*V3z)*y
+ Tmp3<- ((V1z*Ct+V2z*St)*V1z+(-V1z*St+V2z*Ct)*V2z+V3z^2)*z
+ Z<- Tmp1+Tmp2+Tmp3
+ Ans<- c(Ans,list(C+c(X,Y,Z)))
+ }
+ if(Mixlength(Ans)==1){
+ Ans<- Op(1,Ans)
+ }
+ return(Ans)
+}
+
+#################################
+
+Translate3data<- function(...){
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ Pd3<- varargin[[1]]
+ Mv<- varargin[[2]]
+ if(mode(Mv)=="numerice" && length(Mv)==1){
+ Mv<- c(varargin[[2]],varargin[[3]],varargin[[4]])
+ }
+ if(Mixtype(Pd3)==1){
+ Pd3<- list(Pd3)
+ }
+ else if(Mixtype(Pd3)==3){
+ Tmp<-list()
+ for(I in Looprange(1,Mixlength(Pd3))){
+ Tmp<- c(Tmp, Op(I,Pd3))
+ }
+ Pd3<- Tmp
+ }
+ Out<- list()
+ for(I in Looprange(1,Mixlength(Pd3))){
+ PD<- Op(I,Pd3)
+ PD<- rbind(c(),PD)
+ Ans<- c()
+ for(J in Looprange(1,Nrow(PD))){
+ P<- PD[J,]
+ Tmp<- P+Mv
+ Ans<- rbind(Ans,Tmp)
+ }
+ rownames(Ans)<- 1:Nrow(Ans)
+ Out<- c(Out,list(Ans))
+ }
+ if(Mixlength(Out)==1){
+ Out<- Op(1,Out)
+ }
+ return(Out)
+}
+
+######################################
+
+Setangle<- function(...){
+ Eps<- 10^(-6)
+ varargin<-list(...)
+ Nargs<-length(varargin)
+ if(Nargs==0) {
+ }
+ else if(Nargs==1){
+ V<- varargin[[1]]
+ V<- V/Norm(V)
+ THETA<<- acos(V[3])
+ if(abs(sin(THETA))<Eps){
+ PHI<<- 0
+ }
+ else{
+ PHI<<- acos(V[1]/sin(THETA))
+ if(V[2]< -Eps) PHI<<- -PHI
+ }
+ }
+ else{
+ PHI<<- varargin[[2]]*pi/180
+ THETA<<- varargin[[1]]*pi/180
+ }
+ Out<- paste("theta=",as.character(THETA*180/pi)," phi=",
+ as.character(PHI*180/pi),sep="")
+ return (Out)
+}
+
+#################################
+
+Setpers<- function(...){
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ if(Nargs==0){
+ }
+ else{
+ FocusPoint<<- varargin[[1]]
+ EyePoint<<- varargin[[2]]
+ }
+ F<- as.character(FocusPoint)
+ E<- as.character(EyePoint)
+ Out<- paste("Focus = c(",F[1],",",F[2],",",F[3],") , ",
+ " Eye = c(", E[1],",",E[2],",",E[3],") ",sep="")
+ return (Out)
+}
+
+#################################
+
+SetstereoL<- function(R,T,P,H){
+ X<- R*sin(T*pi/180)*cos(P*pi/180)
+ Y<- R*sin(T*pi/180)*sin(P*pi/180)
+ Z<- R*cos(T*pi/180)
+ Eye<- c(X+H/2*Y/(X^2+Y^2),Y-H/2*X/(X^2+Y^2),Z)
+ Out<- Setpers(c(0,0,0),Eye)
+ return(Out)
+}
+
+#################################
+
+SetstereoR<- function(R,T,P,H){
+ X<- R*sin(T*pi/180)*cos(P*pi/180)
+ Y<- R*sin(T*pi/180)*sin(P*pi/180)
+ Z<- R*cos(T*pi/180)
+ Eye<- c(X-H/2*Y/(X^2+Y^2),Y+H/2*X/(X^2+Y^2),Z)
+ Out<- Setpers(c(0,0,0),Eye)
+ return(Out)
+}
+
+###############################
+
+Sf3data<- function(...){
+ varargin<-list(...)
+ Nargs<- length(varargin)
+ FdL<- Fullformfunc(varargin[[1]])
+ F<- Op(1,FdL)
+ Xf<- Op(2,FdL)
+ Yf<- Op(3,FdL)
+ Zf<- Op(4,FdL)
+ Urg<- Op(5,FdL)
+ Vrg<- Op(6,FdL)
+ Str<- strsplit(Urg,"=",fixed=TRUE)[[1]]
+ U<- Str[1]
+ Tmp<- Str[2]
+ Tmp<- eval(parse(text=Tmp))
+ Umin<- Tmp[1]; Umax<- Tmp[2]
+ Str<- strsplit(Vrg,"=",fixed=TRUE)[[1]]
+ V<- Str[1]
+ Tmp<- Str[2]
+ Tmp<- eval(parse(text=Tmp))
+ Vmin<- Tmp[1]; Vmax<- Tmp[2]
+ Ndu<- 25 ; Ndv<- 25; Np<- c(50,50)
+ if(Nargs>=3){
+ Ndu<- varargin[[2]]
+ Ndv<- varargin[[3]]
+ }
+ if(Nargs>=4){
+ Np<- varargin[[4]]
+ if(mode(Np)=="numeric" && length(Np)==1){
+ Np<- c(Np,Np)
+ }
+ }
+ Du<- (Umax-Umin)/Ndu
+ Dv<- (Vmax-Vmin)/Ndv
+ PL <- c()#PL <- []
+ Assign("Vmin",Vmin,"Vmax",Vmax)
+ Trgstr<- Assign("t=c(Vmin,Vmax)")
+ PL <- list()
+ for (I in Looprange(0,Ndu)){
+ U0 <- paste("(",as.character(Umin+I*Du),")",sep="")
+ Tmp<- gsub(U,U0,Xf,fixed=TRUE)
+ Tmp1<- gsub(V,"t",Tmp,fixed=TRUE)
+ Tmp<- gsub(U,U0,Yf,fixed=TRUE)
+ Tmp2<- gsub(V,"t",Tmp,fixed=TRUE)
+ Tmp<- gsub(U,U0,Zf,fixed=TRUE)
+ Tmp3<- gsub(V,"t",Tmp,fixed=TRUE)
+ Tmp<- paste("c(",Tmp1,",",Tmp2,",",Tmp3,")",sep="")
+ PD<- Spacecurve(Tmp,Trgstr,paste("N=",as.character(Np[2])))
+ PL<- c(PL,list(PD))
+ }
+ Assign("Umin",Umin,"Umax",Umax)
+ Trgstr<- Assign("t=c(Umin,Umax)")
+ for (J in Looprange(0,Ndv)){
+ V0<- paste("(",as.character(Vmin+J*Dv),")",sep="")
+ Tmp<- gsub(V,V0,Xf,fixed=TRUE)
+ Tmp1<- gsub(U,"t",Tmp,fixed=TRUE)
+ Tmp<- gsub(V,V0,Yf,fixed=TRUE)
+ Tmp2<- gsub(U,"t",Tmp,fixed=TRUE)
+ Tmp<- gsub(V,V0,Zf,fixed=TRUE)
+ Tmp3<- gsub(U,"t",Tmp,fixed=TRUE)
+ Tmp<- paste("c(",Tmp1,",",Tmp2,",",Tmp3,")")
+ PD<- Spacecurve(Tmp,Trgstr,paste("N=",as.character(Np[1])))
+ PL<- c(PL,list(PD))
+ }
+ return(PL)
+}
+
+###################################
+
+Skeletonparadata<- function(...){
+ varargin<-list(...)
+ Nargs<- length(varargin)
+ Out<- list()
+ ObjL<- Flattenlist(varargin[[1]])
+ Plt3L<- Flattenlist(varargin[[2]])
+ R<- 0.075*1000/2.54/MilliIn
+ if(Nargs>2){
+ R<- R*varargin[[3]]
+ }
+ Eps2<- 0.05
+ if(Nargs>3){
+ Eps2<- varargin[[4]]
+ }
+ Obj2L<- list()
+ for (I in Looprange(1,Mixlength(ObjL))){
+ Tmp<- ProjcoordCurve(Op(I,ObjL))
+ Obj2L<- c(Obj2L,list(Tmp))
+ }
+ Plt2L<- list()
+ for (I in Looprange(1,Mixlength(Plt3L))){
+ Tmp<- ProjcoordCurve(Op(I,Plt3L))
+ Plt2L<- c(Plt2L,list(Tmp))
+ }
+ Out<- Makeskeletondata(Obj2L,Plt2L,R,Eps2)
+ return(Out)
+}
+
+################################
+
+Skeletonpara3data<- function(...){
+ varargin<-list(...)
+ Nargs<- length(varargin)
+ ObjL<- Flattenlist(varargin[[1]])
+ Plt3L<- Flattenlist(varargin[[2]])
+ R<- 0.075*1000/2.54/MilliIn
+ if(Nargs>2){
+ R=R*varargin[[3]]
+ }
+ Eps2<- 0.05
+ if(Nargs>3){
+ Eps2<- varargin[[4]]
+ }
+ Plt2L<- list()
+ for (I in Looprange(1,Mixlength(Plt3L))){
+ Tmp<- ProjcoordCurve(Op(I,Plt3L))
+ Plt2L<- c(Plt2L,list(Tmp))
+ }
+ Out<- list()
+ for (I in Looprange(1,Mixlength(ObjL))){
+ Obj3<- Op(I,ObjL)
+ Tmp<- ProjcoordCurve(Obj3)
+ Data<- Makeskeletondata(list(Tmp),Plt2L,R,Eps2)
+ for (J in Looprange(1,Mixlength(Data))){
+ Gd<- Op(J,Data)
+ PtD<- c()
+ for (J in Looprange(1,Nrow(Gd))){
+ Tmp<- Ptcrv(J,Gd)
+ Tmp1<- Invparapt(Tmp,Obj3)
+ Tmp1<- Op(1,Tmp1)
+ PtD<- c(PtD,Tmp1)
+ }
+ PtD<- matrix(PtD,ncol=3,byrow=TRUE)
+ Out<- c(Out,list(PtD))
+ }
+ }
+ return(Out)
+}
+
+#################################
+
+#100815
+Skeletonpersdata<- function(...){
+ varargin<-list(...)
+ Nargs<- length(varargin)
+ Out<- list()
+ ObjL<- Flattenlist(varargin[[1]])
+ Plt3L<- Flattenlist(varargin[[2]])
+ R<- 0.075*1000/2.54/MilliIn
+ if(Nargs>2){
+ R<- R*varargin[[3]]
+ }
+ Eps2<- 0.05
+ if(Nargs>3){
+ Eps2<- varargin[[4]]
+ }
+ Obj2L<- list()
+ for (I in Looprange(1,Mixlength(ObjL))){
+ Tmp<- CameracoordCurve(Op(I,ObjL))
+ Obj2L<- c(Obj2L,list(Tmp))
+ }
+ Plt2L<- list()
+ for (I in Looprange(1,Mixlength(Plt3L))){
+ Tmp<- CameracoordCurve(Op(I,Plt3L))
+ Plt2L<- c(Plt2L,list(Tmp))
+ }
+ Out<- Makeskeletonpersdata(Obj2L,Plt2L,R,Eps2)
+ return(Out)
+}
+
+#####################
+#100815
+Skeletonpers3data<- function(...){
+ varargin<-list(...)
+ Nargs<- length(varargin)
+ Out<- list()
+ ObjL<- Flattenlist(varargin[[1]])
+ Plt3L<- Flattenlist(varargin[[2]])
+ R<- 0.075*1000/2.54/MilliIn
+ if(Nargs>2){
+ R<- R*varargin[[3]]
+ }
+ Eps2<- 0.05
+ if(Nargs>3){
+ Eps2<- varargin[[4]]
+ }
+ Plt2L<- list()
+ for (I in Looprange(1,Mixlength(Plt3L))){
+ Tmp<- CameracoordCurve(Op(I,Plt3L))
+ Plt2L<- c(Plt2L,list(Tmp))
+ }
+ Out<- list()
+ for (I in Looprange(1,Mixlength(ObjL))){
+ Obj3<- Op(I,ObjL)
+ Tmp<- CameracoordCurve(Obj3)
+ Data<- Makeskeletonpersdata(list(Tmp),Plt2L,R,Eps2)
+ for (J in Looprange(1,Mixlength(Data))){
+ Gd<- Op(J,Data)
+ PtD<- c()
+ for (J in Looprange(1,Nrow(Gd))){
+ Tmp<- Gd[J,]
+ Tmp1<- Invperspt(Tmp,Obj3)
+ Tmp1<- Op(1,Tmp1)
+ PtD<- rbind(PtD,Tmp1)
+ }
+ Out<- c(Out,list(PtD))
+ }
+ }
+ return(Out)
+}
+
+#################################
+
+Spacecurve<- function(...){
+ Eps<- 10^(-5)
+ varargin<-list(...)
+ Nargs<- length(varargin)
+ Fnstr<- varargin[[1]]
+ Rgstr<- varargin[[2]]
+ Range<- c(0,2*pi)
+ N<- 50 #Numpoints
+ E<- c() #Exclusions
+ D<- Inf #Discont (Changed)
+ for(I in Looprange(3,Nargs)){
+ Tmp<- varargin[[I]]
+ StrV<- strsplit(Tmp,"=",fixed=TRUE)
+ StrV<- StrV[[1]]
+ Tmp1<- toupper(StrV[1])
+ Lhs<- substr(Tmp1,1,1)
+ Str<- paste(Lhs,"=",StrV[2],sep="")
+ eval(parse(text=Str))
+ }
+ StrV<- strsplit(Rgstr,"=",fixed=TRUE)
+ StrV<- StrV[[1]]
+ if(length(StrV)>1){
+ Vname<- StrV[1]
+ Rng<- eval(parse(text=StrV[2]))
+ }
+ else{
+ Vname<- Rgstr
+ Rng<- c(XMIN,XMAX)
+ }
+ T1<- Rng[1]; T2<- Rng[2]
+ Dt<- (T2-T1) #180929
+ Str<- gsub(Vname,"t",Fnstr)
+ Str=gsub("[","c(",Str,fixed=TRUE) #17.12.22(2lines)
+ Str=gsub("]",")",Str,fixed=TRUE)
+ if(abs(Dt/N)<Eps){ #180929
+ t=T1
+ P=eval(parse(text=Str))
+ return(P)
+ }
+ P<- c()
+# E<- sort(E,decreasing=FALSE)
+ E<- c(E,Inf)
+ E<- sort(E,decreasing=FALSE)
+ Ke<- 1
+ for(jj in 1:(N+1)){
+ t=T1+(jj-1)*Dt/N #180929
+ Pa<- c()
+ if(t-E[Ke]< Eps){
+ Pa<- eval(parse(text=Str))
+ }
+ if(abs(t-E[Ke])<=Eps){
+ if(length(P)>0 && P[Nrow(P),1]!=Inf){
+ Pa<- c(Inf,Inf,Inf)
+ }
+ }
+ if(t-E[Ke]>Eps){
+ Pa<- eval(parse(text=Str))
+ Ke<- Ke+1
+ }
+ if(length(Pa)>0){
+ if(Pa[1]==Inf){
+ P<- rbind(P,Pa)
+ }else if(length(P)==0){
+ P<- rbind(c(),c(Pa))
+ }
+ else{
+ Tmp<- P[Nrow(P),]
+ if(Tmp[1]==Inf){
+ P<- rbind(P,Pa)
+ }
+ else if( Norm(Tmp-Pa)<D){
+ P<- rbind(P,Pa)
+ }
+ else{
+ P<- rbind(P,c(Inf,Inf,Inf))
+ P<- rbind(P,Pa)
+ }
+ }
+ }
+ }
+ rownames(P)<- 1:Nrow(P) # 10.08.16
+ return(P)
+}
+
+########################################
+
+Spaceline<- function(...){
+ varargin<- list(...)
+ Z<- c()
+ for(I in 1:length(varargin)){
+ Data<- varargin[[I]]
+ if(Mixtype(Data)==1){
+ J<- 1
+ while (J<=Ncol(Data)){
+ Tmp<- Data[J:(J+2)]
+ Z<-c(Z,Tmp)
+ J<- J+3
+ }
+ next
+ }
+ if(Mixtype(Data)==3){
+ Tmp<- list()
+ for(I in 1:Mixlength(Data)){
+ Tmp<- c(Tmp,Op(I,Data))
+ }
+ Data<- Tmp
+ }
+ for(J in 1:Mixlength(Data)){
+ Tmp<- Op(J,Data)
+ Z<- c(Z,Tmp)
+ }
+ }
+ Z<- matrix(Z,ncol=3,byrow=TRUE)
+ return(Z)
+}
+
+###############################################
+
+Xyzax3data<- function(Xrange,Yrange,Zrange){
+ StrV<-strsplit(Xrange,"=",fixed=TRUE)
+ StrV<- StrV[[1]]
+ if(length(StrV)>1) StrV<- StrV[2]
+ Tmp<- eval(parse(text=StrV))
+ Px<- c(Tmp[1],0,0)
+ Qx<- c(Tmp[2],0,0)
+ StrV<-strsplit(Yrange,"=",fixed=TRUE)
+ StrV<- StrV[[1]]
+ if(length(StrV)>1) StrV<- StrV[2]
+ Tmp<- eval(parse(text=StrV))
+ Py<- c(0,Tmp[1],0)
+ Qy<- c(0,Tmp[2],0)
+ StrV<-strsplit(Zrange,"=",fixed=TRUE)
+ StrV<- StrV[[1]]
+ if(length(StrV)>1) StrV<- StrV[2]
+ Tmp<- eval(parse(text=StrV))
+ Pz<- c(0,0,Tmp[1])
+ Qz<- c(0,0,Tmp[2])
+ Out<- list(Spaceline(Px,Qx),Spaceline(Py,Qy),Spaceline(Pz,Qz))
+ return(Out)
+}
+
+###################################
+
+Xyzaxparaname<- function(...){
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ Eps<- 10.0^(-6)
+ Dr<- 0.19*1000/2.54/MilliIn
+ Tmp<- varargin[[Nargs]]
+ if(Nargs>1 && is.numeric(Tmp)){
+ Dr<- Dr*Tmp
+ Nargs<- Nargs-1
+ }
+ if(mode(varargin[[1]])=="character"){
+ Xname<- "x"
+ Yname<- "y"
+ Zname<- "z"
+ Xrange<- varargin[[1]]
+ Yrange<- varargin[[2]]
+ Zrange<- varargin[[3]]
+ StrV<-strsplit(Xrange,"=",fixed=TRUE)
+ StrV<- StrV[[1]]
+ if(length(StrV)>1){
+ Xname<- StrV[1]
+ StrV<- StrV[2]
+ }
+ Tmp<- eval(parse(text=StrV))
+ Px<- c(Tmp[1],0,0)
+ Qx<- c(Tmp[2],0,0)
+ StrV<-strsplit(Yrange,"=",fixed=TRUE)
+ StrV<- StrV[[1]]
+ if(length(StrV)>1){
+ Yname<- StrV[1]
+ StrV<- StrV[2]
+ }
+ Tmp<- eval(parse(text=StrV))
+ Py<- c(0,Tmp[1],0)
+ Qy<- c(0,Tmp[2],0)
+ StrV<-strsplit(Zrange,"=",fixed=TRUE)
+ StrV<- StrV[[1]]
+ if(length(StrV)>1){
+ Zname<- StrV[1]
+ StrV<- StrV[2]
+ }
+ Tmp<- eval(parse(text=StrV))
+ Pz<- c(0,0,Tmp[1])
+ Qz<- c(0,0,Tmp[2])
+ }else{
+ Data<- varargin[[1]]
+ Xname<- "x"; Yname<- "y"; Zname<- "z"
+ if(Nargs>1){
+ if(varargin[[2]]!=""){
+ Xname<- varargin[[2]]
+ }
+ if(varargin[[3]]!=""){
+ Yname<- varargin[[3]]
+ }
+ if(varargin[[4]]!=""){
+ Zname<- varargin[[4]]
+ }
+ }
+ Tmp<- Op(1,Data)
+ Px<- Tmp[1,]; Qx<- Tmp[2,]
+ Tmp<- Op(2,Data)
+ Py<- Tmp[1,]
+ Qy<- Tmp[2,]
+ Tmp<- Op(3,Data)
+ Pz<- Tmp[1,]
+ Qz<- Tmp[2,]
+ }
+ Ph<- Parapt(Px); Qh<- Parapt(Qx); R<-Norm(Ph-Qh)
+ Kekka<- list()
+ if(R>Eps){
+ Ch<- Qh+Dr/R*(Qh-Ph)
+ Kekka<- c(Kekka,list(Pointdata(Ch)))
+ Expr(Ch,"c",Xname)
+ }
+ Ph<- Parapt(Py); Qh<- Parapt(Qy); R<- Norm(Ph-Qh)
+ if(R>Eps){
+ Ch<- Qh+Dr/R*(Qh-Ph)
+ Kekka<- c(Kekka,list(Pointdata(Ch)))
+ Expr(Ch,"c",Yname)
+ }
+ Ph<- Parapt(Pz); Qh<- Parapt(Qz); R<- Norm(Ph-Qh)
+ if(R>Eps){
+ Ch<- Qh+Dr/R*(Qh-Ph)
+ Kekka<- c(Kekka,list(Pointdata(Ch)))
+ Expr(Ch,"c",Zname)
+ }
+# return(Kekka)
+}
+
+###################################
+
+Xyzaxpersname<- function(...){
+ varargin<- list(...)
+ Eps<- 10.0^(-6)
+ Nargs<- length(varargin)
+ Dr<- 0.19*1000/2.54/MilliIn
+ Tmp<- varargin[[Nargs]]
+ if(Nargs>1 && mode(Tmp)=="numeric"){
+ Dr<- Dr*Tmp
+ Nargs<- Nargs-1
+ }
+ if(mode(varargin[[1]])=="character"){
+ Xname<- "x"
+ Yname<- "y"
+ Zname<- "z"
+ Xrange<- varargin[[1]]
+ Yrange<- varargin[[2]]
+ Zrange<- varargin[[3]]
+ StrV<-strsplit(Xrange,"=",fixed=TRUE)
+ StrV<- StrV[[1]]
+ if(length(StrV)>1){
+ Xname<- StrV[1]
+ StrV<- StrV[2]
+ }
+ Tmp<- eval(parse(text=StrV))
+ Px<- c(Tmp[1],0,0)
+ Qx<- c(Tmp[2],0,0)
+ StrV<-strsplit(Yrange,"=",fixed=TRUE)
+ StrV<- StrV[[1]]
+ if(length(StrV)>1){
+ Yname<- StrV[1]
+ StrV<- StrV[2]
+ }
+ Tmp<- eval(parse(text=StrV))
+ Py<- c(0,Tmp[1],0)
+ Qy<- c(0,Tmp[2],0)
+ StrV<-strsplit(Zrange,"=",fixed=TRUE)
+ StrV<- StrV[[1]]
+ if(length(StrV)>1){
+ Zname<- StrV[1]
+ StrV<- StrV[2]
+ }
+ Tmp<- eval(parse(text=StrV))
+ Pz<- c(0,0,Tmp[1])
+ Qz<- c(0,0,Tmp[2])
+ }else{
+ Data<- varargin[[1]]
+ Xname<- "x"; Yname<- "y"; Zname<- "z"
+ if(Nargs>1){
+ if(varargin[[2]]!=""){
+ Xname<- varargin[[2]]
+ }
+ if(varargin[[3]]!=""){
+ Yname<- varargin[[3]]
+ }
+ if(varargin[[4]]!=""){
+ Zname<- varargin[[4]]
+ }
+ }
+ Tmp<- Op(1,Data)
+ Px<- Tmp[1,]; Qx<- Tmp[2,]
+ Tmp<- Op(2,Data)
+ Py<- Tmp[1,]
+ Qy<- Tmp[2,]
+ Tmp<- Op(3,Data)
+ Pz<- Tmp[1,]
+ Qz<- Tmp[2,]
+ }
+ Ph<- Perspt(Px)
+ Qh<- Perspt(Qx)
+ R<- Norm(Ph-Qh)
+ Kekka<- list()
+ if(R>Eps){
+ Ch<- Qh+Dr/R*(Qh-Ph)
+ Kekka<- c(Kekka,list(Pointdata(Ch)))
+ Expr(Ch,"c",Xname)
+ }
+ Ph<- Perspt(Py)
+ Qh<- Perspt(Qy)
+ R<- Norm(Ph-Qh)
+ if(R>Eps){
+ Ch<- Qh+Dr/R*(Qh-Ph)
+ Kekka<- c(Kekka,list(Pointdata(Ch)))
+ Expr(Ch,"c",Yname)
+ }
+ Ph<- Perspt(Pz)
+ Qh<- Perspt(Qz)
+ R<- Norm(Ph-Qh)
+ if(R>Eps){
+ Ch<- Qh+Dr/R*(Qh-Ph)
+ Kekka<- c(Kekka,list(Pointdata(Ch)))
+ Expr(Ch,"c",Zname)
+ }
+# return(Kekka)
+}
+
+#########################
+#100815
+Zparapt<- function(P){
+ x<- P[1]; y<- P[2]; z<- P[3]
+ Out<- x*cos(PHI)*sin(THETA)+y*sin(PHI)*sin(THETA)+z*cos(THETA)
+ return(Out)
+}
+
+#########################
+#100815
+Zperspt<- function(P){
+ Tmp<- P-FocusPoint
+ X1<- Tmp[1]; Y1<- Tmp[2]; Z1<- Tmp[3]
+ Tmp<- EyePoint-FocusPoint
+ E1<- Tmp[1]; F1<- Tmp[2]; G1<- Tmp[3]
+ Ca<- E1/sqrt(E1^2+F1^2)
+ Sa<- F1/sqrt(E1^2+F1^2)
+ X2<- X1*Ca+Y1*Sa; Y2<- -X1*Sa+Y1*Ca; Z2<- Z1
+ E2<- E1*Ca+F1*Sa; F2<- -E1*Sa+F1*Ca; G2<- G1
+ Cb<- E2/sqrt(E2^2+G2^2)
+ Sb<- G2/sqrt(E2^2+G2^2)
+ X3<- X2*Cb+Z2*Sb
+ return(X3)
+}
+
+##########################################
+
+
+
+##########################################
+
+# Stat Package
+
+##########################################
+
+# 2010.04.12
+
+# new
+
+# Htickmarklower, Vtickmarkleft, HtickmarklowerV
+# VtickmarkleftV, Insertcom, Replacecom
+# Maketexfile, Formatting
+# Drwhistframe, Histplotdata, Drwhistplot
+
+Htickmarklower<- function(...)
+{ ## Scaling is implemented
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ ArgsL<- varargin
+ if(mode(ArgsL[[1]])=="character"){
+ Str<- ArgsL[[1]]
+ Tmp<- strsplit(Str,"m")
+ Tmp<- Tmp[[1]]
+ if(length(Tmp)>1){
+ I<- nchar(Tmp[1])+1
+ }
+ else{
+ I<- 0
+ }
+ Tmp<- strsplit(Str,"n")
+ Tmp<- Tmp[[1]]
+ if(length(Tmp)>1){
+ J<- nchar(Tmp[1])+1
+ }
+ else{
+ J<- 0
+ }
+ Tmp<- strsplit(Str,"r")
+ Tmp<- Tmp[[1]]
+ if(length(Tmp)>1){
+ K=nchar(Tmp[1])+1
+ }
+ else{
+ K<- 0
+ }
+ if(K>0){
+ S<- substr(Str,K+1,nchar(Str))
+ R<- as.numeric(S)
+ if(is.na(R)){
+ R<- 1
+ }
+ }
+ else{
+ R<- 1
+ K<- nchar(Str)+1
+ }
+ if(J>0){
+ S<- substr(Str,J+1,K-1)
+ Dn<- as.numeric(S)
+ if(is.na(Dn)){
+ Dn<- 1
+ }
+ }
+ else{
+ Dn<- 1000
+ J<- nchar(Str)+1
+ }
+ S<- substr(Str,I+1,J-1)
+ Dm<- as.numeric(S)
+ if(is.na(Dm)){
+ Dm<- 1
+ }
+ ArgsL<- list()
+ for (I in Looprange(1, floor((XMAX-GENTEN[1])/Dm))){
+ ArgsL<- Mixjoin(ArgsL,I*Dm)
+ if(I-floor(I/Dn)*Dn==0){
+ Str<- as.character(I*Dm*R)
+ ArgsL<- Mixjoin(ArgsL,Str)
+ }
+ }
+ for (I in seq(-1,ceiling((XMIN-GENTEN[1])/Dm),by=-1)){
+ ArgsL<- Mixjoin(ArgsL,I*Dm)
+ if(I-floor(I/Dn)*Dn==0){
+ Str<- as.character(I*Dm*R)
+ ArgsL<- Mixjoin(ArgsL,Str)
+ }
+ }
+ }
+ MemoriList<- list()
+ Memori<- list()
+ for (N in 1:length(ArgsL)){
+ Dt<- ArgsL[[N]]
+ if(mode(Dt)=="numeric" && length(Dt)>1){
+ if(length(Memori)>0){
+ MemoriList<- Mixjoin(MemoriList,list(Memori))
+ }
+ Memori<- list(Dt)
+ next
+ }
+ if(mode(Dt)=="character"){
+ Memori<- Mixjoin(Memori,Dt)
+ }
+ else{
+ if(length(Memori)>0){
+ MemoriList<- Mixjoin(MemoriList,list(Memori))
+ }
+ Memori<- list(Dt,GENTEN[2])
+ }
+ }
+ MemoriList<- Mixjoin(MemoriList,list(Memori))
+ for (N in 1:length(MemoriList)){
+ Dt<- MemoriList[[N]]
+ Ndt<- length(Dt)
+ X=Op(1,Dt)
+ Y=Op(2,Dt)
+ Tmp<-Doscaling(c(X,Y))
+ X<- Tmp[1]
+ Y<- Tmp[2]
+ Moji<- Op(Ndt,Dt)
+ Tmp1<- Unscaling(c(X,Y))
+ Tmp2<- Unscaling(c(X,Y-2*MARKLEN))
+ Fd<- Listplot(c(Tmp1,Tmp2))
+ Drwline(Fd)
+ if(Ndt==3){
+ Tmp<-Unscaling(c(X,Y-2*MARKLEN))
+ Expr(Tmp,"s",Moji)
+ }
+ if(Ndt==4){
+ Houkou<- Op(3,Dt)
+ Tmp<-grep("s",Houkou)
+ if(length(Tmp)>0){
+ Tmp<-Unscaling(c(X,Y-2*MARKLEN))
+ Expr(Tmp,Houkou,Moji)
+ }
+ else{
+ Tmp<- Unscaling(c(X,Y))
+ Expr(Tmp,Houkou,Moji)
+ }
+ }
+ cat("%\n",file=Wfile,append=TRUE)
+ }
+}
+
+Vtickmarkleft<- function(...)
+{ ## Scaling is implemented
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ ArgsL<- varargin
+ if(mode(ArgsL[[1]])=="character"){
+ Str<- ArgsL[[1]]
+ Tmp<- strsplit(Str,"m")
+ Tmp<- Tmp[[1]]
+ if(length(Tmp)>1){
+ I<- nchar(Tmp[1])+1
+ }
+ else{
+ I<- 0
+ }
+ Tmp<- strsplit(Str,"n")
+ Tmp<- Tmp[[1]]
+ if(length(Tmp)>1){
+ J<- nchar(Tmp[1])+1
+ }
+ else{
+ J<- 0
+ }
+ Tmp<- strsplit(Str,"r")
+ Tmp<- Tmp[[1]]
+ if(length(Tmp)>1){
+ K=nchar(Tmp[1])+1
+ }
+ else{
+ K<- 0
+ }
+ if(K>0){
+ S<- substr(Str,K+1,nchar(Str))
+ R<- as.numeric(S)
+ if(is.na(R)){
+ R<- 1
+ }
+ }
+ else{
+ R<- 1
+ K<- nchar(Str)+1
+ }
+ if(J>0){
+ S<- substr(Str,J+1,K-1)
+ Dn<- as.numeric(S)
+ if(is.na(Dn)){
+ Dn<- 1
+ }
+ }
+ else{
+ Dn<- 1000
+ J<- nchar(Str)+1
+ }
+ S<- substr(Str,I+1,J-1)
+ Dm<- as.numeric(S)
+ if(is.na(Dm)){
+ Dm<- 1
+ }
+ ArgsL<- list()
+ for (I in 1:floor((YMAX-GENTEN[2])/Dm)){
+ ArgsL<- Mixjoin(ArgsL,I*Dm)
+ if(I-floor(I/Dn)*Dn==0){
+ Str<- as.character(I*Dm*R)
+ ArgsL<- Mixjoin(ArgsL,Str)
+ }
+ }
+ for (I in seq(-1,ceiling((YMIN-GENTEN[2])/Dm))){
+ ArgsL<- Mixjoin(ArgsL,I*Dm)
+ if(I-floor(I/Dn)*Dn==0){
+ Str<- as.character(I*Dm*R)
+ ArgsL<- Mixjoin(ArgsL,Str)
+ }
+ }
+ }
+ MemoriList<- list()
+ Memori<- list()
+ for (N in 1:length(ArgsL)){
+ Dt<- ArgsL[[N]]
+ if(mode(Dt)=="numeric" && length(Dt)>1){
+ if(length(Memori)>0){
+ MemoriList<- Mixjoin(MemoriList,list(Memori))
+ }
+ Memori<- list(Dt)
+ next
+ }
+ if(mode(Dt)=="character"){
+ Memori<- Mixjoin(Memori,Dt)
+ }
+ else{
+ if(length(Memori)>0){
+ MemoriList<- Mixjoin(MemoriList,list(Memori))
+ }
+ Memori<- list(GENTEN[1],Dt)
+ }
+ }
+ MemoriList<- Mixjoin(MemoriList,list(Memori))
+ for (N in 1:length(MemoriList)){
+ Dt<- MemoriList[[N]]
+ Ndt<- length(Dt)
+ X=Op(1,Dt)
+ Y=Op(2,Dt)
+ Tmp<-Doscaling(c(X,Y))
+ X<- Tmp[1]
+ Y<- Tmp[2]
+ Moji<- Op(Ndt,Dt)
+ Tmp1<- Unscaling(c(X,Y))
+ Tmp2<- Unscaling(c(X-2*MARKLEN,Y))
+ Fd<- Listplot(c(Tmp1,Tmp2))
+ Drwline(Fd)
+ if(Ndt==3){
+ Tmp<-Unscaling(c(X-2*MARKLEN,Y))
+ Expr(Tmp,"w",Moji)
+ }
+ if(Ndt==4){
+ Houkou<- Op(3,Dt)
+ Tmp<-grep("w",Houkou)
+ if(length(Tmp)>0){
+ Tmp<-Unscaling(c(X-2*MARKLEN,Y))
+ Expr(Tmp,Houkou,Moji)
+ }
+ else{
+ Tmp<- Unscaling(c(X,Y))
+ Expr(Tmp,Houkou,Moji)
+ }
+ }
+ cat("%\n",file=Wfile,append=TRUE)
+ }
+}
+
+HtickmarklowerV<- function(Vec,digits=2,nsmall=2)
+{
+ for (I in 1:length(Vec)){
+ Tmp<- Vec[I]
+ Htickmarklower(Tmp, Formatting(Tmp,digits,nsmall))
+ }
+}
+
+HtickLV<- function(...)
+{
+ HtickmarklowerV(...)
+}
+
+VtickmarkleftV<- function(Vec,digits=2,nsmall=2)
+{
+ for (I in 1:length(Vec)){
+ Tmp<- Vec[I]
+ Vtickmarkleft(Tmp, Formatting(Tmp,digits,nsmall))
+ }
+}
+
+VtickLV<- function(...)
+{
+ VtickmarkleftV(...)
+}
+
+Insertcom<- function(CmdM,Npos,Str)
+{
+ if(is.matrix(CmdM)){
+ Cmd<- CmdM
+ }
+ else{
+ C<- paste("Cmd<- ",CmdM)
+ eval(parse(text=C))
+ }
+ Out<- Cmd[Looprange(1,Npos-1),]
+ Out<- c(Out,Str)
+ Tmp<- Cmd[Looprange(Npos,nrow(Cmd)),]
+ Out<- c(Out,Tmp)
+ Out<- matrix(Out)
+ if(!is.matrix(CmdM)){
+ C<- paste(CmdM,"<<- Out")
+ eval(parse(text=C))
+ }
+ return(Out)
+}
+
+Replacecom<- function(CmdM,Npos,Str)
+{
+ if(is.matrix(CmdM)){
+ Cmd<- CmdM
+ }
+ else{
+ C<- paste("Cmd<- ",CmdM)
+ eval(parse(text=C))
+ }
+ Out<- Cmd[Looprange(1,Npos-1),]
+ Out<- c(Out,Str)
+ Tmp<- Cmd[Looprange(Npos+1,nrow(Cmd)),]
+ Out<- c(Out,Tmp)
+ Out<- matrix(Out)
+ if(!is.matrix(CmdM)){
+ C<- paste(CmdM,"<<- Out")
+ eval(parse(text=C))
+ }
+ return(Out)
+}
+
+Deletecom<- function(CmdM,Npos)
+{
+ if(is.matrix(CmdM)){
+ Cmd<- CmdM
+ }
+ else{
+ C<- paste("Cmd<- ",CmdM)
+ eval(parse(text=C))
+ }
+ Out<- Cmd[Looprange(1,Npos-1),]
+ Tmp<- Cmd[Looprange(Npos+1,nrow(Cmd)),]
+ Out<- c(Out,Tmp)
+ Out<- matrix(Out)
+ if(!is.matrix(CmdM)){
+ C<- paste(CmdM,"<<- Out")
+ eval(parse(text=C))
+ }
+ return(Out)
+}
+
+Maketexfile<- function(commands="",texfile="")
+{
+ Openfile(texfile)
+ Execmd(commands)
+ Closefile()
+}
+
+Formatting<- function(X,D=2,N=2)
+{
+ if(D>0){
+ Xs <- format(X,digits=D,nsmall=N)
+ }
+ else{
+ Xs<- as.character(X)
+ }
+ return(Xs)
+}
+
+################################
+
+Boxplotdata1 <-function(DataF1,CenterX,Width,...)
+{
+ Xr <- Width
+ Temp <- boxplot(DataF1[1],plot=FALSE)
+ Stats <- Temp$stats
+ rownames(Stats) <- c("Lhige","Q1","Q2","Q3","Uhige")
+ Out <- Temp$out
+ Lhige <- Stats["Lhige",1]
+ Uhige <- Stats["Uhige",1]
+ Q1 <- Stats["Q1",1]
+ Q2 <- Stats["Q2",1]
+ Q3 <- Stats["Q3",1]
+ CenterY <- (Q1+Q3)/2
+ C <- c(CenterX,CenterY)
+ V <- c(0,(Q3-Q1)/2)
+ G1 <- Framedata(C,Xr/2,V[2]) # box
+ Temp1 <- c(0,Q1-Lhige)
+ Temp2 <- c(0,Uhige-Q3)
+ G2 <- Listplot(C-V,C-V-Temp1) #
+ G3 <- Listplot(C+V,C+V+Temp2) #
+ Temp3 <- c(Xr/4,0)
+ G4 <- Listplot(C-V-Temp1-Temp3,C-V-Temp1+Temp3) #
+ G5 <- Listplot(C+V+Temp2-Temp3,C+V+Temp2+Temp3) #
+ Temp4 <- c(0,Q3-Q2)
+ Temp5 <- c(Xr/2,0)
+ G6 <- Listplot(C+V-Temp4-Temp5,C+V-Temp4+Temp5) #
+ G7 <- list()
+ for(j in Looprange(1,length(Out))){
+ G7 <- c(G7,list(c(CenterX, Out[j])))
+ }
+ G7 <- G7[order(Out,decreasing=TRUE)]
+ list(median=G6,box=G1,uwhisker=G2,lwhisker=G3,lwp=G4,uwp=G5,outliers=G7)
+}
+
+Boxplotdata2 <- function(Data,Ratio, ...)
+{
+ DataF<- Flattenlist(Data) # 11.07.21(from)
+ ymin<- Inf
+ ymax<- -Inf
+ for(J in 1:length(DataF)){
+ Tmp<- DataF[[J]]
+ ymin<- min(ymin, min(Tmp))
+ ymax<- max(ymax,max(Tmp))
+ } # 11.07.21(until)
+ dy <- ymax-ymin
+ Setwindow(c(0,XMAX-XMIN),c(ymin-0.1*dy,ymax+0.1*dy))
+ R1<- (YMAX-YMIN)/(XMAX-XMIN)
+ R<- Ratio/R1
+ Setscaling(R)
+ Delta <- XMAX/length(DataF)
+ W <- 0.6*Delta
+ PdL <- list()
+ for(i in 1:length(DataF)){ # 11.07.21
+ X <- (0.5+i-1)*Delta
+ G <- Boxplotdata1(DataF[i],X,W,...)
+ PdL <- c(PdL,list(G))
+ }
+ G <- Framedata()
+ Tmp<- list(frame=G)
+ PdL <-c(PdL,list(Tmp))
+ Epsi <-0
+ Setwindow(c(XMIN-Epsi,XMAX+Epsi),c(YMIN-Epsi,YMAX+Epsi))
+ return(PdL)
+}
+
+Drwboxframe<-function(BoxDataL)
+{
+ Setorigin(c(XMIN,YMIN))
+ Tmp<- Unscaling(c(0.2,0.2))
+ Setwindow(c(XMIN-0.2,XMAX),c(YMIN-Tmp[2],YMAX))
+ Hako<- BoxDataL$plotdata
+ title<- BoxDataL$title
+ cap<- BoxDataL$cap
+ ylab<- BoxDataL$ylab
+ if(mode(title)!="list") title<- list(title)
+ if(mode(cap)!="list") cap<- list(cap)
+ if(mode(ylab)!="list") ylab<- list(ylab)
+ if(length(title)==0) title<- list("")
+ if(length(title)==1) title<- c(title, list("n"))
+ if(length(title)==2) title<- c(title, list(""))
+ if(length(cap)==0) cap<- list("")
+ if(length(cap)==1) cap<- c(cap, list("n"),0) # 11.11.27
+ if(length(cap)==2) cap<- c(cap, 0) # 11.11.27
+ if(length(ylab)==0) ylab<- list("")
+ if(length(ylab)==1) ylab <- c(ylab, list("n"))
+ if(length(ylab)==2) ylab<- c(ylab, list(""))
+ Temp <- Hako[[length(Hako)]]
+ Drwline(Temp$frame)
+ Fontsize(cap[[2]])
+ for(i in Looprange(1,length(Hako)-1)){
+ Temp <- Hako[[i]]
+ attach(Temp)
+ Dashline(uwhisker,lwhisker)
+ Drwline(median,2)
+ Drwline(box,lwp,uwp)
+ Drwpt(outliers,0)
+ X <- uwhisker[1,1]
+ detach(Temp)
+ Htickmarklower(X)
+ if(nchar(cap[[1]])<1) next # 2011.03.08
+ if(length(cap)==2 || cap[[3]]==0){
+ pos<- 1
+ if(length(cap)>=4) pos<- cap[[4]]
+ Tmp<- paste("s",as.character(pos),sep="")
+ Letter(c(X,YMIN),Tmp, Op(i,cap[[1]]))
+ }
+ else{
+ rotate<- cap[[3]]
+ if(length(cap)==3){
+ pos<- 0
+ }
+ else{
+ pos<- cap[[4]]
+ }
+ Temp1 <- rotate*pi/180
+ Temp <- c(cos(Temp1),sin(Temp1))
+ Letterrot(c(X,YMIN-pos),Temp,Op(i,cap[[1]]))
+ }
+ }
+ if(nchar(ylab[[1]])>0){
+ Fontsize(ylab[[2]])
+ Tmp1<- ylab[[1]]
+ Tmp3<- ylab[[3]]
+ if(nchar(Tmp3)>0){
+ Tmp1<- paste("{\\",Tmp3," ",Tmp1,"}",sep="")
+ }
+ Letter(c(XMIN, YMAX),"n2",Tmp1)
+ Fontsize("n")
+ }
+ if(nchar(title[[1]])>0){
+ Fontsize(title[[2]])
+ Tmp1<- title[[1]]
+ Tmp3<- title[[3]]
+ if(nchar(Tmp3)>0){
+ Tmp1<- paste("{\\",Tmp3," ",Tmp1,"}",sep="")
+ }
+ Letter(c((XMIN+XMAX)/2,YMAX),"n2",Tmp1)
+ }
+ Fontsize("n")
+}
+
+Drwboxplot<- function(dataf,var,size,
+ title=list(""), cap=list(colnames(dataf)),
+ ylab=list(""), ptsize=5,plot=TRUE,...)
+ #Return : title,cap,ylab,commands,plotdata,info
+{
+ Tmp <- boxplot(dataf, plot=FALSE, ...)
+ Stats <- Tmp$stats
+ DataF<- Flattenlist(dataf) # 11.07.21(from)
+ ymin<- Inf
+ ymax<- -Inf
+ for(J in 1:length(DataF)){
+ Tmp<- DataF[[J]]
+ ymin<- min(ymin, min(Tmp))
+ ymax<- max(ymax,max(Tmp))
+ } # 11.07.21(until)
+ Hako<- Boxplotdata2(dataf, size[2]/size[1], ...)
+ if(plot){
+ Windisp(Hako)
+ }
+ Tmp<- Formatting(size[1]/(XMAX-XMIN),5,5)
+ unit<- paste(Tmp,"cm",sep="")
+ Setunitlen(unit)
+ Exstr<- c(
+ "","",
+ paste("Beginpicture(","'",unit,"')",sep=""),
+ paste("Setpt(",as.character(ptsize),")",sep=""),
+ "","",
+ paste("Drwboxframe(",var,")",sep=""),
+ paste("VtickLV(c(",as.character(ymin),",", as.character(ymax),"),0,0)",sep=""),
+ "","","","",
+ "Setpt(1)",
+ "Endpicture(0)"
+ )
+ Exstr<- matrix(Exstr)
+ Xpos<- c()
+ for(i in Looprange(1,length(Hako)-1)){
+ Temp <- Hako[[i]]
+ Temp1 <- Temp[[5]]
+ Xpos <- c(Xpos,Temp1[1,1])
+ }
+ Info<- list(stats=Stats,window=matrix(c(XMIN,XMAX,YMIN,YMAX),nrow=2),xpos=Xpos)
+ Tmp<- paste(var,"<<- ",
+ "list(title=title,cap=cap,ylab=ylab,",
+ "commands=Exstr,plotdata=Hako,info=Info)",sep="")
+ eval(parse(text=Tmp))
+}
+
+
+###########################################
+
+Histplotdata <- function(DataV,Ratio,freq=TRUE,densplot=FALSE,...)
+# 10.12.07 freq
+{
+ Temp <- hist(DataV,plot=FALSE,...)
+ Breaks <- Temp$breaks
+ Counts <- Temp$counts
+ Density <- Temp$density
+ Mids <- Temp$mids
+ if(!freq){
+ Data<- Density
+ }
+ else{
+ Data<- Counts
+ }
+ Ghist <- list()
+ for(i in Looprange(1,length(Breaks)-1)){
+ Tmp1 <- c(Breaks[i],Breaks[i+1])
+ Tmp2 <- c(0,Data[i])
+ G1 <- Framedata(Tmp1,Tmp2) #bar
+ Ghist <- c(Ghist,list(G1))
+ }
+ Bin <- Breaks[2]-Breaks[1]
+ Eps <- 0.7*Bin # 0.7 times Bin
+ Temp1 <- c(min(Breaks)-Eps,max(Breaks)+Eps) # Put Eps at both sides
+ Temp2 <- c(0,max(Data)*1.02)
+ Setwindow(Temp1,Temp2)
+ Setorigin(c(Temp1[1],0))
+ R1<- (YMAX-YMIN)/(XMAX-XMIN)
+ R<- Ratio/R1
+ Setscaling(R)
+ VEps <- 0.05*(XMAX-XMIN)/5
+ Temp1<- Temp1-c(VEps,0)
+ Temp2<- Temp2-1/R*c(VEps,0)
+ Setwindow(Temp1,Temp2)
+ Fpt <- c(Mids[1]-Bin,0)
+ Lpt <- c(Mids[length(Mids)]+Bin,0)
+ Fp <- matrix(Fpt,nrow=1)
+ for(i in Looprange(1,length(Mids))){
+ Tmp <- c(Mids[i],Data[i])
+ Fp <- rbind(Fp,Tmp)
+ }
+ Fp <- rbind(Fp,Lpt)
+ rownames(Fp)<- c(1:nrow(Fp))
+ if(densplot){
+ Temp <- density(DataV)
+ X <- matrix(Temp$x)
+ Y <- matrix(Temp$y)
+ Gdens <- cbind(X,Y)
+ }
+ else{
+ Gdens <- list()
+ }
+ list(plotdata=list(histplot=Ghist,fpplot=list(Fp),densityplot=list(Gdens)),
+ breaks=Breaks,counts=Counts,density=Density,mids=Mids)
+}
+
+Drwhistframe<-function(HistDataL)
+{
+ title<- HistDataL$title
+ xlab<- HistDataL$xlab
+ ylab<- HistDataL$ylab
+ if(mode(title)!="list") title<- list(title)
+ if(mode(xlab)!="list") cap<- list(xlab)
+ if(mode(ylab)!="list") cap<- list(ylab)
+ if(length(title)==0) title<- list("")
+ if(length(title)==1) title<- c(title, list("n"))
+ if(length(title)==2) title<- c(title, list(""))
+ if(length(xlab)==0) xlab<- list("")
+ if(length(xlab)==1) xlab<- c(xlab, list("n"))
+ if(length(xlab)==2) xlab<- c(xlab, list(""))
+ if(length(xlab)==3) xlab<- c(xlab, list(8))
+ if(length(ylab)==0) ylab<- list("")
+ if(length(ylab)==1) ylab<- c(ylab, list("n"))
+ if(length(ylab)==2) ylab<- c(ylab, list(""))
+ if(nchar(title[[1]])>0){
+ Fontsize(title[[2]])
+ Tmp1<- title[[1]]
+ Tmp3<- title[[3]]
+ if(nchar(Tmp3)>0){
+ Tmp1<- paste("{\\",Tmp3," ",Tmp1,"}",sep="")
+ }
+ Letter(c((XMIN+XMAX)/2,YMAX),"n2",Tmp1)
+ Fontsize("n")
+ }
+ if(nchar(xlab[[1]])>0){
+ Fontsize(xlab[[2]])
+ Tmp1<- xlab[[1]]
+ Tmp3<- xlab[[3]]
+ if(nchar(Tmp3)>0){
+ Tmp1<- paste("{\\",Tmp3," ",Tmp1,"}",sep="")
+ }
+ Tmp4<- paste("s",as.character(xlab[[4]]),sep="")
+ Letter(c((XMIN+XMAX)/2,YMIN),Tmp4,Tmp1)
+ Fontsize("n")
+ }
+ if(nchar(ylab[[1]])>0){
+ Fontsize(ylab[[2]])
+ Tmp1<- ylab[[1]]
+ Tmp3<- ylab[[3]]
+ if(nchar(Tmp3)>0){
+ Tmp1<- paste("{\\",Tmp3," ",Tmp1,"}",sep="")
+ }
+ Tmp<- Setorigin()
+ Letter(c(Tmp[1], YMAX),"n2",Tmp1)
+ Fontsize("n")
+ }
+
+ Setax(2," ")
+ Setax(4," ")
+ Setax(6," ")
+}
+
+Drwhistplot<- function(datav,var,size,freq=TRUE,
+ title=list(""), xlab=list(""), ylab=list(""),
+ plot=TRUE,densplot=FALSE,fpplot=TRUE,...)
+ #Output : title,xlab,ylab,commands,plotdata,info
+{
+ H <- Histplotdata(datav, size[2]/size[1], freq=freq,densplot=densplot,...)
+ Pd<- H$plotdata
+ Ghist <- list(histplot=Pd$histplot,densityplot=Pd$densityplot) # 10.12.07
+ if(fpplot){
+ Ghist<- c(Ghist,list(fpplot=Pd$fpplot))
+ }
+ if(plot){
+ Windisp(Ghist)
+ }
+ Tmp<- Formatting(size[1]/(XMAX-XMIN),5,5)
+ unit<- paste(Tmp,"cm",sep="")
+ Setunitlen(unit)
+ Infostr<- paste(var,"$info",sep="")
+ Brkstr<- paste(Infostr,"$breaks",sep="")
+ Midstr<- paste(Infostr,"$mids",sep="")
+ if(!freq){
+ Digits<- ",2,2"
+ Denstr<- paste(Infostr,"$density",sep="")
+ }
+ else{
+ Digits<- ",0,0"
+ Denstr<- paste(Infostr,"$counts",sep="")
+ }
+
+ if(fpplot) Prefp<- "" else Prefp<- "#"
+ Exstr<- c(
+ "","",
+ paste("Beginpicture(","'",unit,"')",sep=""),
+ "","",
+ paste("Drwhistframe(",var,")",sep=""),
+ paste("HtickLV(",Midstr,",1,1)",sep=""),
+ paste("VtickLV(max(",Denstr,")",Digits,")",sep=""),
+ paste("Drwline(",var,"[['plotdata']]","$histplot)",sep=""),
+ paste(Prefp,"Dashline(",var,"[['plotdata']]","$fpplot)",sep=""),
+ paste("#Drwline(",var,"[['plotdata']]","$densityplot,2)",sep=""),
+ "","","","",
+ "Endpicture(1)"
+ )
+ Exstr<- matrix(Exstr)
+ Info<- list(breaks=H$breaks,counts=H$counts,density=H$density,mids=H$mids,
+ window=matrix(c(XMIN,XMAX,YMIN,YMAX),nrow=2))
+ Tmp<- paste(var,"<<- ",
+ "list(title=title,xlab=xlab,ylab=ylab,",
+ "commands=Exstr,plotdata=Ghist,info=Info)",sep="")
+ eval(parse(text=Tmp))
+}
+
+##########################
+#17.09.30
+
+Bezierpt<- function(t,Ptlist,Ctrlist){
+ if(length(Ptlist)==6){
+ P0=Ptlist[1:3]
+ P3=Ptlist[4:6]
+ P1=Ctrlist[1:3]
+ if(length(Ctrlist)==3){
+ P2=P3
+ flg3=0
+ }else{
+ P2=Ctrlist[4:6]
+ flg3=1
+ }
+ }else{
+ P0=Ptlist[1:2]
+ P3=Ptlist[3:4]
+ P1=Ctrlist[1:2]
+ if(length(Ctrlist)==2){
+ P2=P3
+ flg3=0
+ }else{
+ P2=Ctrlist[3:4]
+ flg3=1
+ }
+ }
+ P4=(1-t)*P0+t*P1
+ P5=(1-t)*P1+t*P2
+ P6=(1-t)*P2+t*P3
+ P7=(1-t)*P4+t*P5
+ P8=(1-t)*P5+t*P6
+ P9=(1-t)*P7+t*P8
+ if(flg3==0){
+ Out=P7
+ }else{
+ Out=P9
+ }
+ return(Out)
+}
+
+Bezier<- function(...){
+ varargin<- list(...)
+ Nargs=length(varargin)
+ Ptlist=varargin[[1]]
+ Ctrlist=varargin[[2]]
+ Num=10
+ for(J in Looprange(3,Nargs)){
+ Tmp=varargin[[J]]
+ K=strsplit(Tmp,'=',fixe=TRUE)
+ K=K[[1]]
+ Tmp1=substring(K[1],1,1)
+ Lhs=toupper(Tmp1)
+ if(Lhs=="N"){
+ Num=eval(parse(text=K[2]))
+ }
+ }
+ if(length(Num)==1){
+ Num=rep(Num,length(Ctrlist)) #17.10.08
+ }
+ Out=c()
+ for(ii in Looprange(1,length(Ctrlist))){
+ Tmp1=c(Ptlist[[ii]],Ptlist[[ii+1]])
+ Tmp2=Ctrlist[[ii]]
+ if(ii==1){
+ St=0
+ }else{
+ St=1
+ }
+ for(J in Looprange(St,Num[ii])){
+ Tmp=Bezierpt(J/Num[ii],Tmp1,Tmp2)
+ Out=Appendrow(Out,Tmp)
+ }
+ }
+ return(Out)
+}
+
+#######################
+# 17.10.02
+
+Connectseg<- function(...){
+ varargin=list(...)
+ Nargs=length(varargin)
+ Pdata=varargin[[1]]
+ Eps=10^(-4)
+ if(Nargs>=2){
+ Eps=varargin[[2]]
+ }
+ if(is.matrix(Pdata)){
+ Din=Dataindex(Pdata)
+ tmp1=list()
+ for(J in 1:nrow(Din)){
+ tmp=Pdata[Din[J,1]:Din[J,2],]
+ tmp1=c(tmp1,list(tmp))
+ }
+ Pdata=tmp1
+ }
+ PlotL=list(Op(1,Pdata))
+ VI=Looprange(2,length(Pdata))
+ while(length(VI)>0){
+ Qd=Op(Length(PlotL),PlotL)
+ Ah=Op(1,Qd); Ao=Op(Length(Qd),Qd)
+ Flg=0
+ for(J in 1:length(VI)){
+ Tmp1=Op(VI[J],Pdata)
+ P=Op(1,Tmp1); Q=Op(Length(Tmp1),Tmp1)
+ if(Norm(P-Ao)<Eps){
+ Tmp=Tmp1[Looprange(2,Length(Tmp1)),]
+ if(Length(Tmp)>0){
+ Qd=Appendrow(Qd,Tmp)
+ }
+ PlotL[[length(PlotL)]]=Qd
+ VI=VI[-J]
+ Flg=1
+ break
+ }
+ if(Norm(Q-Ao)<Eps){
+ Tmp=Tmp1[(nrow(Tmp1)-1):1,]
+ Qd=Appendrow(Qd,Tmp)
+ PlotL[[length(PlotL)]]=Qd
+ VI=VI[-J]
+ Flg=1
+ break
+ }
+ if(Norm(P-Ah)<Eps){
+ Tmp=Tmp1[2:nrow(Tmp1),]
+ Qd=Appendrow(Tmp,Qd)
+ PlotL[[length(PlotL)]]=Qd
+ VI=VI[-J]
+ Flg=1
+ break
+ }
+ if(Norm(Q-Ah)<Eps){
+ Tmp=Tmp1[(nrow(Tmp1)-1):1,]
+ Qd=Appendrow(Tmp,Qd)
+ PlotL[[length(PlotL)]]=Qd
+ VI=VI[-J]
+ Flg=1
+ break
+ }
+ }
+ if(Flg==0){
+ PlotL=c(PlotL,Pdata[VI[1]])
+ VI=VI[-1]
+ }
+ }
+ return(PlotL)
+}
+
+Implicitplot<- function(...){ #180402
+ varargin=list(...)
+ Eps=10^(-6) #190511
+ Nargs=length(varargin)
+ Func=varargin[[1]]
+ Xrng=varargin[[2]]
+ Yrng=varargin[[3]]
+ Mdv=50;Ndv=50
+ for (I in Looprange(4,length(varargin))){
+ Str= varargin[[I]]
+ Tmp=strsplit(Str,"=",fixed=TRUE)
+ Tmp=Tmp[[1]]
+ Tmp1=toupper(Tmp[1])
+ if(substring(Tmp1,1,1)=="N"){
+ Mdv=eval(parse(text=Tmp[2]))
+ if(length(Mdv)==1){
+ Ndv=Mdv
+ }else{
+ Ndv=Mdv[2]
+ Mdv=Mdv[1]
+ }
+ }
+ }
+ Tmp=strsplit(Func,"=",fixed=TRUE)
+ Tmp=Tmp[[1]]
+ if(length(Tmp)==1){
+ Fn=Func
+ }else{
+ Fn=paste(Tmp[1],"-(",Tmp[2],")",sep="")
+ }
+ Tmp=strsplit(Xrng,"=",fixed=TRUE)
+ Tmp=Tmp[[1]]
+ Varx=Tmp[1]
+ Rngx=eval(parse(text=Tmp[2]))
+ Tmp=strsplit(Yrng,"=",fixed=TRUE)
+ Tmp=Tmp[[1]]
+ Vary=Tmp[1]
+ Rngy=eval(parse(text=Tmp[2]))
+ Tmp=paste("Impfun<- function(",Varx,",",Vary,"){",Fn,"}",sep="")
+ eval(parse(text=Tmp))
+ dx=(Rngx[2]-Rngx[1]) #180929
+ dy=(Rngy[2]-Rngy[1]) #180929
+ out=list()
+ for(jj in 1:Ndv){
+ yval1=Rngy[1]+(jj-1)*dy/Ndv #180929
+ yval2=Rngy[1]+jj*dy/Ndv #180929
+ xval1=Rngx[1]
+ eval11=Impfun(xval1,yval1)
+ eval12=Impfun(xval1,yval2)
+ for(ii in 1:Mdv){
+ xval2=Rngx[1]+ii*dx/Mdv #180929
+ eval21=Impfun(xval2,yval1)
+ eval22=Impfun(xval2,yval2)
+ pL=list(c(xval1,yval1));vL=c(eval11)
+ pL=c(pL,list(c(xval2,yval1)));vL=c(vL,eval21)
+ pL=c(pL,list(c(xval2,yval2)));vL=c(vL,eval22)
+ pL=c(pL,list(c(xval1,yval2)));vL=c(vL,eval12)
+ pL=c(pL,list(c(xval1,yval1)));vL=c(vL,eval11)
+ qL=c()
+ for(kk in 1:4){
+ if(abs(vL[kk])<=Eps){
+ qL=Appendrow(qL,pL[[kk]])
+ }else{
+ if(vL[kk]>Eps){
+ if(vL[kk+1]< -Eps){
+# tmp=1/(vL[kk]-vL[kk+1])*
+# (-vL[kk+1]*pL[[kk]]+vL[kk]*pL[[kk+1]])
+ tmp1=pL[[kk]]; tmp2=pL[[kk+1]] #190508from
+ for(ii in 1:20){ #190511
+ tmp=(tmp1+tmp2)/2
+ tmp3=Impfun(tmp[1],tmp[2])
+ if(abs(tmp3)<=Eps){break}
+ if(tmp3>Eps){tmp1=tmp}else{tmp2=tmp}
+ } #190508to
+ qL=Appendrow(qL,tmp)
+ }
+ }else{
+ if(vL[kk+1]>Eps){
+# tmp=1/(-vL[kk]+vL[kk+1])*
+# (vL[kk+1]*pL[[kk]]-vL[kk]*pL[[kk+1]])
+ tmp1=pL[[kk]]; tmp2=pL[[kk+1]] #190508from
+ for(ii in 1:20){ #190511
+ tmp=(tmp1+tmp2)/2
+ tmp3=Impfun(tmp[1],tmp[2])
+ if(abs(tmp3)<=Eps){break}
+ if(tmp3>Eps){tmp2=tmp}else{tmp1=tmp}
+ } #190508to
+ qL=Appendrow(qL,tmp)
+ }
+ }
+ }
+ }
+ xval1=xval2
+ eval11=eval21
+ eval12=eval22
+ if(Length(qL)==2){
+ out=c(out,list(qL))
+ }
+ }
+ }
+ if(length(out)>0){
+ out=Connectseg(out)
+ }
+ if(length(out)==1){
+ out=out[[1]]
+ }
+ return(out)
+}
+
+#########################
+# 17.10.06
+
+Deqdata=function(deq,rng,initt,initf,Num){
+ Eps=10^(-3)
+ inf=10^3
+ tmp=strsplit(deq,"=")[[1]]
+ tmp1=gsub("`","",tmp[1],fixed=TRUE)
+ tmp1=substring(tmp1,3,nchar(tmp1)-1)
+ Xname=strsplit(tmp1,",")[[1]]
+ func=tmp[2]
+ for(J in 1:(length(Xname))){
+ tmp1=paste("X[",as.character(J),"]",sep="")
+ func=gsub(Xname[J],tmp1,func,fixed=TRUE)
+ }
+ tmp=strsplit(rng,"=")[[1]]
+ tname=tmp[1]
+ tmp=eval(parse(text=tmp[2]))
+ t1=tmp[1]
+ t2=tmp[2]
+ tmp=paste("function(",tname,",X){",func,"}",sep="")
+ funP=eval(parse(text=tmp))
+ tmp=paste("function(",tname,",X){-",func,"}",sep="")
+ funN=eval(parse(text=tmp))
+ dt=(t2-t1)/Num
+ tt=initt
+ X0=initf
+ pdL=c(tt,X0)
+ for(J in Looprange(1,floor((t2-initt)/dt))){
+ kl1=dt*funP(tt,X0)
+ kl2=dt*funP(tt+dt/2,X0+kl1/2)
+ kl3=dt*funP(tt+dt/2,X0+kl2/2)
+ kl4=dt*funP(tt+dt,X0+kl3)
+ X0=X0+(kl1+2*kl2+2*kl3+kl4)/6
+ tt=initt+J*dt
+ tmp=c(tt,X0)
+ if(Norm(tmp)>inf){break}
+ pdL=Appendrow(pdL,tmp)
+ }
+ tt=initt
+ X0=initf
+ for(J in Looprange(1,floor((initt-t1)/dt))){
+ kl1=dt*funN(tt,X0)
+ kl2=dt*funN(tt+dt/2,X0+kl1/2)
+ kl3=dt*funN(tt+dt/2,X0+kl2/2)
+ kl4=dt*funN(tt+dt,X0+kl3)
+ X0=X0+(kl1+2*kl2+2*kl3+kl4)/6
+ tt=initt-J*dt
+ tmp=c(tt,X0)
+ if(Norm(tmp)>inf){break}
+ pdL=Appendrow(tmp,pdL)
+ }
+ pdL
+}
+
+Deqplot=function(...){
+ varargin=list(...)
+ deq=varargin[[1]]
+ rng=varargin[[2]]
+ initt=varargin[[3]]
+ initf=varargin[[4]]
+ Num=50
+ Sel=c(1,2)
+ for(J in Looprange(5,length(varargin))){
+ tmp1=varargin[[J]]
+ if(is.character(tmp1)){
+ tmp=strsplit(tmp1,"=")[[1]]
+ Num=eval(parse(text=tmp[2]))
+ }else{
+ SeL=tmp1
+ }
+ }
+ pdL=Deqdata(deq,rng,initt,initf,Num)
+ pdL=pdL[,SeL]
+}
+
+
+############## obj ###############
+
+Openobj<- function(Fnm){
+ OBJFMT<<- "%7.4f"
+ NPOINT<<- 0
+ NNORM<<- 0
+ OBJSCALE<<- 1
+ OBJFIGNO<<- 0
+ OBJJOIN<<- 0
+ Wfile<<- Fnm
+ Tmp=grep(".obj",Fnm,fixed=TRUE)
+ if(length(Tmp)==0){
+ if(nchar(Fnm)>0){
+ Wfile<<- paste(Fnm,".obj",sep="")
+ }
+ }
+ cat("",file=Wfile,sep="")
+ Wfile
+}
+
+Closeobj<- function(){
+ Wfile=""
+}
+
+Writeobjpoint<- function(P){
+ X=sprintf(OBJFMT,P[1]*OBJSCALE)
+ Y=sprintf(OBJFMT,P[2]*OBJSCALE)
+ Z=sprintf(OBJFMT,P[3]*OBJSCALE)
+ Str=paste("v",X,Y,Z,sep=" ")
+ Printobjstr(Str)
+ NPOINT<<- NPOINT+1
+ return(NPOINT)
+}
+
+Printobjstr<- function(Str){
+ cat(Str,"\n",sep="",file=Wfile,append=TRUE)
+}
+
+Objname<- function(){
+ if(OBJJOIN==0){
+ OBJFIGNO<<- OBJFIGNO+1
+ Gname=paste("ketfig",as.character(OBJFIGNO),sep="")
+ Printobjstr(paste("# ",Gname,sep=""))
+ Printobjstr(paste("g ",Gname,sep=""))
+ }
+}
+
+Objjoin<- function(...){
+ varargin=list()
+ if(length(varargin)>0){
+ OBJJOIN<<- abs(sign(varargin[[1]]))
+ }
+ OBJJOIN
+}
+
+Objsurf<- function(...){ #17.12.18
+ Args<- list(...)
+ Nargs<- length(Args)
+ Sel=Args[[Nargs]]; Nargs=Nargs-1
+ Rf=Args[[1]]
+ N=2
+ Mg=0; Ng=0
+ if(is.numeric(Args[[N]])){
+ if(length(Args[[N]])>2){
+ U=Args[[N]]
+ Mg=length(U)-1
+ N=N+1
+ }else if(length(Args[[N]])==2){
+ Intab=Args[[N]]
+ Ag=Intab[1]; Bg=Intab[2]
+ N=N+1
+ }else{
+ Ag=Args[N]; Bg=Args[N+1]
+ N=N+2
+ }
+ }else{
+ Tmp0=Args[[N]]
+ Tmp=grep("=",Tmp0,fixed=TRUE)
+ if(length(Tmp)>0){
+ Tmp1=strsplit(Tmp0,"=")
+ Tmp0=Tmp1[[1]][2]
+ }
+ Intab=eval(parse(text=Tmp0))
+ Ag=Intab[1]; Bg=Intab[2]
+ N=N+1
+ }
+ if(is.numeric(Args[[N]])){
+ if(length(Args[[N]])>2){
+ V=Args[[N]]
+ Ng=length(V)-1
+ N=N+1
+ }else if(length(Args[[N]])==2){
+ Intab=Args[[N]]
+ Cg=Intab[1]; Dg=Intab[2]
+ N=N+1
+ }else{
+ Cg=Args[[N]]; Dg=Args[[N+1]]
+ N=N+2
+ }
+ }else{ # the case of is.character(Args[[N]])
+ Tmp0=Args[[N]]
+ Tmp=grep("=",Tmp0,fixed=TRUE)
+ if(length(Tmp)>0){
+ Tmp2=strsplit(Tmp0,"=")
+ Tmp0=Tmp2[[1]][2]
+ }
+ Intab=eval(parse(text=Tmp0))
+ Cg=Intab[1]; Dg=Intab[2]
+ N=N+1
+ }
+ if(Mg==0){
+ Mg=Args[[N]]
+ N=N+1
+ U=c()
+ for(J in Looprange(1,Mg+1)){
+ U=c(U,Ag+(J-1)/Mg*(Bg-Ag))
+ }
+ }
+ if(Ng==0){
+ Ng=Args[[N]]
+ V=c()
+ for(K in Looprange(1,Ng+1)){
+ V=c(V,Cg+(K-1)/Ng*(Dg-Cg))
+ }
+ }
+ Objname()
+ PL=list()
+ for(J in Looprange(1,Mg+1)){
+ for(K in Looprange(1,Ng+1)){
+ P=Rf(U[J],V[K])
+ Np=Writeobjpoint(P)
+ PL=c(PL,list(c(P,Np)))
+ }
+ }
+ Idx=1+(Ng+1)*(0:Mg)
+ Pus=PL[Idx]
+ Idx=(Ng+1)*(1:(Mg+1))
+ Pue=PL[Idx]
+ Idx=1:(Ng+1)
+ Pvs=PL[Idx]
+ Idx=((Ng+1)*Mg+1):((Ng+1)*(Mg+1))
+ Pve=PL[Idx]
+ Printobjstr("vt 0 0")
+ Printobjstr("vt 1 0")
+ Printobjstr("vt 1 1")
+ Printobjstr("vt 0 1")
+ for(J in Looprange(1,Mg)){
+ for(K in Looprange(1,Ng)){
+ P1=sprintf("%1d",Op(4,PL[[(Ng+1)*(J-1)+K]]))
+ P2=sprintf("%1d",Op(4,PL[[(Ng+1)*J+K]]))
+ P3=sprintf("%1d",Op(4,PL[[(Ng+1)*J+K+1]]))
+ P4=sprintf("%1d",Op(4,PL[[(Ng+1)*(J-1)+K+1]]))
+ N1=""; N2=""; N3=""; N4=""
+ if(Sel=="+"){
+ Str=paste("f ",P1,"/1/",N1," ",P2,"/2/",N2," ",sep="")
+ Str=paste(Str,P3,"/3/",N3," ",P4,"/4/",N4,sep="")
+ }else{
+ Str=paste("f ",P1,"/1/",N1," ",P4,"/4/",N4," ",sep="")
+ Str=paste(Str,P3,"/3/",N3," ",P2,"/2/",N2,sep="")
+ }
+ Printobjstr(Str)
+ }
+ }
+ list(U,V,Pus,Pue,Pvs,Pve)
+}
+
+Objthicksurf<- function(...){
+ Args=list(...)
+ Nargs=length(Args)
+ Sel=Args[[Nargs]]; Nargs=Nargs-1 #181128from
+ Selsurf=substring(Sel,1,1)
+ Selside=c("0","0","0","0")
+ Tmp=strsplit(Sel,"w");Tmp=Tmp[[1]]
+ if(length(Tmp)==2){
+ Selside[[1]]=substr(Tmp[2],1,1)
+ }
+ Tmp=strsplit(Sel,"e");Tmp=Tmp[[1]]
+ if(length(Tmp)==2){
+ Selside[[2]]=substr(Tmp[2],1,1)
+ }
+ Tmp=strsplit(Sel,"s");Tmp=Tmp[[1]]
+ if(length(Tmp)==2){
+ Selside[[3]]=substr(Tmp[2],1,1)
+ }
+ Tmp=strsplit(Sel,"n");Tmp=Tmp[[1]]
+ if(length(Tmp)==2){
+ Selside[[4]]=substr(Tmp[2],1,1)
+ } #181128to
+ Nfth=Args[[Nargs-2]]
+ Thick1=Args[[Nargs-1]]
+ Thick2=Args[[Nargs]]
+ Nargs=Nargs-3
+ Rfth=Args[[1]]
+ N=2
+ Mg=0; Ng=0
+ if(is.numeric(Args[[N]])){
+ if(length(Args[[N]])>2){
+ U=Args[[N]]
+ Mg=length(U)-1
+ N=N+1
+ }else if(length(Args[[N]])==2){
+ Intab=Args[[N]]
+ Ag=Intab[1]; Bg=Intab[2]
+ N=N+1
+ }else{
+ Ag=Args[[N]]; Bg=Args[[N+1]]
+ N=N+2
+ }
+ }else{
+ Tmp0=Args[[N]]
+ Tmp=strsplit(Tmp0,"=",fixe=TRUE)
+ if(length(Tmp)>0){
+ Tmp0=Tmp[[1]][2]
+ }
+ Intab=eval(parse(text=Tmp0))
+ Ag=Intab[1]; Bg=Intab[2]
+ N=N+1
+ }
+ if(is.numeric(Args[[N]])){
+ if(length(Args[[N]])>2){
+ V=Args[[N]]
+ Ng=length(V)-1
+ N=N+1
+ }else if(length(Args[[N]])==2){
+ Intab=Args[[N]]
+ Cg=Intab[1]; Dg=Intab[2]
+ N=N+1
+ }else{
+ Cg=Args[[N]]; Dg=Args[[N+1]]
+ N=N+2
+ }
+ }else{
+ Tmp0=Args[[N]]
+ Tmp=strsplit(Tmp0,"=",fixed=TRUE)
+ if(length(Tmp)>0){
+ Tmp0=Tmp[[1]][2]
+ }
+ Intab=eval(parse(text=Tmp0))
+ Cg=Intab[1]; Dg=Intab[2]
+ N=N+1
+ }
+ if(Mg==0){
+ Mg=Args[[N]]
+ N=N+1
+ U=c()
+ for(J in Looprange(1,Mg+1)){
+ U=c(U,Ag+(J-1)/Mg*(Bg-Ag))
+ }
+ }
+ if(Ng==0){
+ Ng=Args[[N]]
+ V=c()
+ for(K in Looprange(1,Ng+1)){
+ V=c(V,Cg+(K-1)/Ng*(Dg-Cg))
+ }
+ }
+ Objname()
+ Join=OBJJOIN
+ OBJJOIN<<- 1
+ F1=function(u,v){
+ Rfth(u,v)+Thick1*Nfth(u,v)
+ }
+ F2=function(u,v){
+ Rfth(u,v)+Thick2*Nfth(u,v)
+ }
+ Dt1=Objsurf(F1,U,V,Selsurf)
+ if(Selsurf=="+"){
+ Tmp="-"
+ }else{
+ Tmp="+"
+ }
+ Dt2=Objsurf(F2,U,V,Tmp);
+ Out=list(Dt1,Dt2);
+ if(Selside[[1]]!="0"){
+ Dt=Objrecs(Op(3,Dt1),Op(3,Dt2),Selside[[1]])
+ Out=c(Out,list(Dt))
+ }
+ if(Selside[[2]]!="0"){
+ Dt=Objrecs(Op(4,Dt1),Op(4,Dt2),Selside[[2]])
+ Out=c(Out,list(Dt))
+ }
+ if(Selside[[3]]!="0"){
+ Dt=Objrecs(Op(5,Dt1),Op(5,Dt2),Selside[[3]])
+ Out=c(Out,list(Dt))
+ }
+ if(Selside[[4]]!="0"){
+ Dt=Objrecs(Op(6,Dt1),Op(6,Dt2),Selside[[4]])
+ Out=c(Out,list(Dt))
+ }
+ OBJJOIN<<- Join
+}
+
+Objrecs<- function(...){
+ Eps=10^(-6)
+ Args=list(...)
+ Nargs=length(Args)
+ Tmp=Args[[1]]
+ PtL=Flattenlist(Tmp)
+ for(J in Looprange(1,length(PtL))){ #17.12.23from
+ Tmp=PtL[[J]]
+ if(!is.matrix(Tmp)){
+ PtL[[J]]=matrix(Tmp,nrow=1)
+ }
+ } #17.12.23until
+ PL1=list()
+ for(J in Looprange(1,length(PtL))){
+ Tmp=PtL[[J]]
+ for(K in Looprange(1,nrow(Tmp))){
+ PL1=c(PL1,list(Tmp[K,]))
+ }
+ }
+ Sel=Args[[Nargs]]; Nargs=Nargs-1
+ Objname()
+ for(J in Looprange(1,length(PL1))){
+ P=PL1[[J]]
+ if((length(P)<4) || (P[4]==0)){
+ Np=Writeobjpoint(P)
+ PL1[[J]]=c(P[1:3],Np)
+ }
+ }
+ Tmp=Args[[2]]
+ if((is.numeric(Tmp)) && (length(Tmp)==1)){
+ Drv=Tmp
+ Len=Norm(Drv)
+ PL2=list()
+ for(J in Looprange(1,length(PL1))){
+ Tmp=PL1[[J]]
+ P=Tmp[1:3]+Drv
+ Np=Writeobjpoint(P)
+ PL2=c(PL2,list(c(P[1:3],Np)))
+ if(J<length(PL1)){
+ Vec=PL1[[J+1]]-PL1[[J]]
+ if(Norm(Vec)>Eps){
+ Tmp1=Crossprod(Drv,Vec)
+ Tmp2=Crossprod(Tmp1,Vec)
+ Tmp3=Dotprod(Tmp2,Drv)
+ if(Tmp3<-Eps){
+ Tmp2=-Tmp2
+ }
+ Drv=Len/Norm(Tmp2)*Tmp2
+ }
+ }
+ }
+ }else{
+ PtL=Flattenlist(Tmp)
+ for(J in Looprange(1,length(PtL))){ #17.12.23from
+ Tmp=PtL[[J]]
+ if(!is.matrix(Tmp)){
+ PtL[[J]]=matrix(Tmp,nrow=1)
+ }
+ } #17.12.23until
+ PL2=list()
+ for(J in Looprange(1,length(PtL))){
+ Tmp=PtL[[J]]
+ for(K in Looprange(1,nrow(Tmp))){
+ PL2=c(PL2,list(Tmp[K,]))
+ }
+ }
+ for(J in Looprange(1,length(PL2))){
+ P=PL2[[J]]
+ if((length(P)<4) || (P[4]==0)){
+ Np=Writeobjpoint(P)
+ PL2[[J]]=c(P[1:3],Np)
+ }
+ }
+ }
+ Printobjstr("vt 0 0")
+ Printobjstr("vt 1 0")
+ Printobjstr("vt 1 1")
+ Printobjstr("vt 0 1")
+ for(J in Looprange(2,length(PL1))){
+ P1=sprintf("%1d",Op(4,PL1[[J-1]]))
+ P2=sprintf("%1d",Op(4,PL2[[J-1]]))
+ P3=sprintf("%1d",Op(4,PL2[[J]]))
+ P4=sprintf("%1d",Op(4,PL1[[J]]))
+ N1=""; N2=""; N3=""; N4=""
+ if(Sel=="+"){
+ Str=paste("f ",P1,"/1/",N1," ",P2,"/2/",N2," ",sep="")
+ Str=paste(Str,P3,"/3/",N3," ",P4,"/4/",N4,sep="")
+ }else{
+ Str=paste("f ",P1,"/1/",N1," ",P4,"/4/",N4," ",sep="")
+ Str=paste(Str,P3,"/3/",N3," ",P2,"/2/",N2,sep="")
+ }
+ Printobjstr(Str)
+ }
+ list(PL1,PL2)
+}
+
+Objpolygon<- function(...){
+ Eps=10^(-6)
+ Args=list(...)
+ Nargs=length(Args)
+ Tmp=Args[[1]]
+ PtL=Flattenlist(Tmp)
+ for(J in Looprange(1,length(PtL))){ #17.12.23from
+ Tmp=PtL[[J]]
+ if(!is.matrix(Tmp)){
+ PtL[[J]]=matrix(Tmp,nrow=1)
+ }
+ } #17.12.23until
+ PL=list()
+ for(J in Looprange(1,length(PtL))){
+ Tmp=PtL[[J]]
+ for(K in Looprange(1,nrow(Tmp))){
+ PL=c(PL,list(Tmp[K,]))
+ }
+ }
+ Sel=Args[[Nargs]]; Nargs=Nargs-1
+ Objname()
+ for(J in Looprange(1,length(PL))){
+ P=PL[[J]]
+ if((length(P)<4) || (P(4)==0)){
+ Np=Writeobjpoint(P)
+ PL[[J]]=c(P[1:3],Np)
+ }
+ }
+ if(Nargs==1){
+ Tmp=PL[[1]]
+ Cen=Tmp[1:3]
+ Nc=Tmp[4]
+ }else{
+ Tmp=Args[[2]]
+ if(length(Tmp)==1){
+ Tmp1=PL[[Tmp]]
+ Cen=Tmp1[1:3]
+ Nc=Tmp[4]
+ }else{
+ Cen=Tmp
+ Nc=Writeobjpoint(Cen)
+ }
+ }
+ for(J in Looprange(1,length(PL))){
+ if(J<length(PL)){
+ Je=J+1
+ }else{
+ Je=1
+ }
+ Pt1=Cen
+ PLj=PL[[J]]; PLje=PL[[Je]]
+ Pt2=PLj[1:3]; Pt3=PLje[1:3]
+ if(Norm(Crossprod(Pt2-Pt1,Pt3-Pt1))<Eps){
+ next
+ }
+ P1=sprintf("%1d",Nc)
+ P2=sprintf("%1d",PLj[4])
+ P3=sprintf("%1d",PLje[4])
+ if(Sel=="+"){
+ Str=paste("f",P1,P2,P3,"",sep=" ")
+ }else{
+ Str=paste("f",P1,P3,P2,"",sep=" ")
+ }
+ Printobjstr(Str)
+ }
+ PL
+}
+
+Objpolyhedron<- function(Vertex,Face){
+ OBJFIGNO<<- OBJFIGNO+1
+ Ninit=NPOINT
+ Objname()
+ for(N in Looprange(1,length(Vertex))){
+ P=Vertex[[N]]
+ Np=Writeobjpoint(P)
+ Vertex[[N]]=c(P[1:3],Np)
+ }
+ for(N in Looprange(1,length(Face))){
+ F=Face[[N]]+Ninit
+ Face[[N]]=F
+ Str="f"
+ for(J in Looprange(1,length(F))){
+ P=sprintf("%1d",F[J])
+ Str=paste(Str,P,sep=" ")
+ }
+ Printobjstr(Str)
+ }
+ list(Vertex,Face)
+}
+
+Objcurve<- function(...){
+ Eps=10^(-6)
+ Args=list(...)
+ Nargs=length(Args)
+ Tmp=Args[[1]]
+ PtL=Flattenlist(Tmp)
+ for(J in Looprange(1,length(PtL))){ #17.12.23from
+ Tmp=PtL[[J]]
+ if(!is.matrix(Tmp)){
+ PtL[[J]]=matrix(Tmp,nrow=1)
+ }
+ } #17.12.23until
+ PL=list()
+ for(J in Looprange(1,length(PtL))){
+ Tmp=PtL[[J]]
+ for(K in Looprange(1,nrow(Tmp))){
+ PL=c(PL,list(Tmp[K,]))
+ }
+ }
+ Closed=Norm(PL[[length(PL)]]-PL[[1]])<Eps
+ Pstr="xy"
+ Tmp=Args[[Nargs]]
+ if(is.character(Tmp)){
+ Pstr=Tmp
+ Nargs=Nargs-1
+ }
+ Sz=0.1
+ Np=4
+ if(Nargs>=2){
+ Sz=Args[[2]]
+ }
+ if(Nargs>=3){
+ Np=Args[[3]]
+ }
+# Assignadd("Sz",Sz) #180901
+ if(Pstr=="xy"){
+ Vz=c(0,0,1)
+ Fs=Assign("c(Sz*cos(t),Sz*sin(t),0)","Sz",Sz) #180901
+ }
+ if(Pstr=="yz"){
+ Vz=c(1,0,0)
+ Fs=Assign("c(0,Sz*cos(t),Sz*sin(t))","Sz",Sz) #180901
+ }
+ if(Pstr=="zx"){
+ Vz=c(0,1,0)
+ Fs=Assign("c(Sz*sin(t),0,Sz*cos(t))","Sz",Sz) #180901
+ }
+ Gc0=Spacecurve(Fs,"t=c(0,2*pi)",paste("Num=",as.character(Np),sep=""))
+ P=PL[[1]]; Q=PL[[2]]; R=PL[[length(PL)-1]]
+ PQ1=Q-P
+ if(!Closed){
+ PQ2=PQ1
+ }else{
+ PQ2=P-R
+ }
+ Vp=PQ1/Norm(PQ1)+PQ2/Norm(PQ2)
+ Vp1=Vp/Norm(Vp)
+ Theta=acos(min(Dotprod(Vz,Vp1),1));
+ Vj=Crossprod(Vz,Vp1)
+ if(Norm(Vj)<Eps){
+ Vj=Vz
+ }
+ Gc1=Rotate3data(Gc0,Vj,Theta)
+ CL=list(Translate3data(Gc1,P))
+ for(J in Looprange(2,length(PL)-1)){
+ P=PL[[J]]; Q=PL[[J+1]]
+ PQ2=Q-P
+ if(Norm(PQ2)<Eps){
+ next
+ }
+ Vp=PQ1/Norm(PQ1)+PQ2/Norm(PQ2)
+ Vp2=Vp/Norm(Vp)
+ Theta=acos(min(Dotprod(Vp1,Vp2),1))
+ Vj=Crossprod(Vp1,Vp2)
+ if(Norm(Vj)<Eps){
+ Vj=Vp1
+ }
+ Gc2=Rotate3data(Gc1,Vj,Theta)
+ CL=c(CL,list(Translate3data(Gc2,P)))
+ PQ1=PQ2
+ Vp1=Vp2
+ Gc1=Gc2
+ }
+ if(!Closed){
+ Vp2=(Q-P)/Norm(Q-P)
+ Theta=acos(min(Dotprod(Vp1,Vp2),1))
+ Vj=Crossprod(Vp1,Vp2)
+ if(Norm(Vj)<Eps){
+ Vj=Vp1
+ }
+ Gc3=Rotate3data(Gc1,Vj,Theta)
+ CL=c(CL,list(Translate3data(Gc3,Q)))
+ }
+ Objname()
+ Join=Objjoin();
+ Objjoin(1)
+ GL1=CL[[1]]
+ for(J in Looprange(2,length(CL))){
+ GL2=CL[[J]]
+ Dt=Objrecs(GL1,GL2,"-")
+ GL1=Dt[[2]]
+ if(J==2){
+ GL0=Dt[[1]]
+ }
+ }
+ if(!Closed){
+ Objpolygon(CL[[1]],"-")
+ N=length(CL)
+ Objpolygon(CL[[N]],"+")
+ }else{
+ Objrecs(GL1,GL0,"-")
+ }
+ Out=CL
+ OBJJOIN<<- Join
+}
+
+Objsymb<- function(Symb,Thick,Face,Dir){
+ for(J in Looprange(1,Length(Symb))){
+ Objcurve(Op(J,Symb),Thick,Face,Dir)
+ }
+}
+
+Symb3data<- function(Moji,Size,Kaiten,NV,Pos){
+ if(is.character(Moji)){
+ #Tmp=Symbdata(Moji)
+ # GY1=Tmp(2)
+ }else{
+ GY1=Moji
+ }
+ GY1=Scaledata(GY1,Size,Size)
+ GY1=Rotatedata(GY1,Kaiten*pi/180)
+ A=NV[1]; B=NV[2]; C=NV[3]
+ if(A^2+B^2==0){
+ E1=c(1,0,0)
+ E2=c(0,1,0)
+ }else{
+ E1=c(B,-A,0)
+ E2=c(-A*C,-B*C,A^2+B^2)
+ Tmp=matrix(c(E1,E2,NV),3,3)
+ D=det(Tmp)
+ if(D<0){
+ E1=-E1
+ }
+ E1=E1/Norm(E1)
+ E2=E2/Norm(E2)
+ }
+ Em<- function(X,Y){
+ c(E1[1]*X+E2[1]*Y,E1[2]*X+E2[2]*Y,E1[3]*X+E2[3]*Y)
+ }
+ GY1=Embed(GY1,Em)
+ GY1=Translate3data(GY1,Pos)
+ Flattenlist(GY1)
+}
+
+############## New Intersect 18.02.01 #############
+
+Intersectline<- function(p1,v1,p2,v2){
+ Eps0=10^(-5)
+ tmp=Dotprod(v1,v2)
+ tmp1=c(tmp,Norm(v1)^2)
+ tmp2=c(-Norm(v2)^2,-tmp)
+ tmp3=c(Dotprod(p2-p1,v2),Dotprod(p2-p1,v1))
+ d=Crossprod(tmp1,tmp2)
+ tmp=abs(Crossprod(v1,v2))
+ if(tmp>Eps0){
+ dt=Crossprod(tmp3,tmp2)
+ ds=Crossprod(tmp1,tmp3)
+ t=dt/d
+ s=ds/d
+ pt=p1+v1*t
+ out=list(pt,t,s)
+ }else{
+ tmp1=Crossprod(p2-p1,v1)/Norm(v1)
+ out=list(abs(tmp1))
+ }
+ return(out)
+}
+
+Intersectseg<- function(...){
+ varargin=list(...)
+ Nargs=length(varargin)
+ Eps0=10^(-4)
+ Eps1=0.01
+ seg1=varargin[[1]]
+ seg2=varargin[[2]]
+ if(Nargs>2){Eps1=varargin[[3]]}
+ p1=Op(1,seg1); q1=Op(2,seg1)
+ p2=Op(1,seg2); q2=Op(2,seg2)
+ if((Norm(q1-p1)<Eps0)||(Norm(q2-p2)<Eps0)){
+ out=list(-1)
+ }else{
+ tmp=Intersectline(p1,q1-p1,p2,q2-p2)
+ if(length(Op(1,tmp))>1){
+ pt=Op(1,tmp); t=Op(2,tmp); s=Op(3,tmp)
+ if((t*(t-1)<Eps0)&&(s*(s-1)<Eps0)){
+ out=list(0,pt,t,s)
+ }else{
+ t=min(max(t,0),1)
+ s=min(max(s,0),1)
+ tmp3=c(Norm(p1-p2),Norm(p1-q2),Norm(q1-p2),Norm(q1-q2)) #180317
+ tmp1=c(Op(2,q2-p2),-Op(1,q2-p2))
+ tmp=Intersectline(p1,tmp1,p2,q2-p2)
+ if(length(Op(1,tmp))>1){
+ if(Op(3,tmp)*(Op(3,tmp)-1)<Eps0){
+ tmp3=c(tmp3,Norm(Op(1,tmp)-p1))
+ }
+ }
+ tmp=Intersectline(q1,tmp1,p2,q2-p2)
+ if(length(Op(1,tmp))>1){
+ if(Op(3,tmp)*(Op(3,tmp)-1)<Eps0){
+ tmp3=c(tmp3,Norm(Op(1,tmp)-q1))
+ }
+ }
+ tmp1=c(Op(2,q1-p1),-Op(1,q1-p1))
+ tmp=Intersectline(p2,tmp1,p1,q1-p1);
+ if(length(Op(1,tmp))>1){
+ if(Op(3,tmp)*(Op(3,tmp)-1)<Eps0){
+ tmp3=c(tmp3,Norm(Op(1,tmp)-p2))
+ }
+ }
+ tmp=Intersectline(q2,tmp1,p1,q1-p1); #180322
+ if(length(Op(1,tmp))>1){
+ if(Op(3,tmp)*(Op(3,tmp)-1)<Eps0){
+ tmp3=c(tmp3,Norm(Op(1,tmp)-q2))
+ }
+ }
+ out=list(min(tmp3),pt,t,s)
+ }
+ }else{
+ dist=tmp[[1]]
+ tmp1=q1-p1
+ n=c(tmp1[2],-tmp1[1])/Norm(tmp1)
+ pts=list()
+ tmp=Intersectline(p1,n,p2,q2-p2)
+ if((length(tmp)>1)&&(tmp[[3]]*(tmp[[3]]-1)<Eps0)){
+ tmp1=(1-tmp[[3]])*p2+tmp[[3]]*q2
+ pts=c(pts,list(list(tmp1,0,tmp[[3]])))
+ }
+ tmp=Intersectline(q1,n,p2,q2-p2)
+ if((length(tmp)>1)&&(tmp[[3]]*(tmp[[3]]-1)<Eps0)){
+ tmp1=(1-tmp[[3]])*p2+tmp[[3]]*q2
+ pts=c(pts,list(list(tmp1,1,tmp[[3]])))
+ }
+ tmp=Intersectline(p2,n,p1,q1-p1)
+ if((length(tmp)>1)&&(tmp[[3]]*(tmp[[3]]-1)<Eps0)){
+ tmp1=(1-tmp[[3]])*p1+tmp[[3]]*q1
+ pts=c(pts,list(list(tmp1,tmp[[3]],0)))
+ }
+ if((length(tmp)>1)&&(tmp[[3]]*(tmp[[3]]-1)<Eps0)){
+ tmp1=(1-tmp[[3]])*p1+tmp[[3]]*q1
+ pts=c(pts,list(list(tmp1,tmp[[3]],2)))
+ }
+ if(length(pts)==0){
+ tmp1=min(Norm(p2-p1),Norm(q2-p1),Norm(p2-q1),Norm(q2-q1))
+ out=list(tmp1)
+ }else{
+ if(dist>Eps1){
+ out=list(dist)
+ }else{
+ tmp=c();
+ for(j in 1:length(pts)){
+ tmp=Appendrow(tmp,Op(1,pts[[j]]))
+ }
+ tmp1=sum(tmp[,1])/(length(pts))
+ tmp2=sum(tmp[,2])/(length(pts))
+ tmp3=c(tmp1,tmp2)
+ tmp=Nearestpt(tmp3,seg1)
+ tmp1=tmp[[2]]
+ tmp=Nearestpt(tmp3,seg2)
+ tmp2=tmp[[2]]
+ out=list(dist,tmp3,tmp1,tmp2)
+ }
+ }
+ }
+ }
+ return(out)
+}
+
+Osplineseg<- function(...){
+ varargin=list(...)
+ Nargs=length(varargin)
+ Eps=10^(-2)
+ Eps0=10^(-6)
+ Ptlist=varargin[[1]]
+ Numstr="Num=20"
+ if(Nargs>1){
+ Numstr=varargin[[2]]
+ }
+ p0=Op(1,Ptlist); p1=Op(2,Ptlist); p2=Op(3,Ptlist); p3=Op(4,Ptlist)
+ tmp=Norm(p2-p0)*Norm(p3-p1)
+ tmp=1+sqrt((1+Dotprod(p2-p0,p3-p1)/tmp)/2)
+ cc=4*Norm(p2-p1)/3/(Norm(p2-p0)+Norm(p3-p1))/tmp
+ pQ=p1+cc*(p2-p0)
+ pR=p2+cc*(p1-p3)
+ ctrL=list(c(pQ,pR))
+ out=Bezier(list(p1,p2),ctrL,Numstr)
+ return(out)
+}
+
+Intersectpartseg<- function(...){
+ varargin=list(...)
+ Nargs=length(varargin)
+ crv1=varargin[[1]]
+ crv2=varargin[[2]]
+ ii=varargin[[3]]
+ jj=varargin[[4]]
+ Eps1=varargin[[5]]
+ Eps2=varargin[[6]]
+ Dist=10*Eps2
+ if(Nargs>6){Dist=varargin[[7]]}
+ Eps00=10^(-8)
+ Eps0=10^(-4)
+ out=list()
+ seg1=Listplot(Op(ii,crv1),Op(ii+1,crv1))
+ seg2=Listplot(Op(jj,crv2),Op(jj+1,crv2))
+ tmp1=Op(2,seg1)-Op(1,seg1)
+ tmp2=Op(2,seg2)-Op(1,seg2)
+ snang=abs(Crossprod(tmp1,tmp2))/(Norm(tmp1)*Norm(tmp2))
+ tmp=Intersectseg(seg1,seg2,Eps1)
+ dst=Op(1,tmp)
+ if(dst<Eps0){
+ out=list(Op(2,tmp),ii+Op(3,tmp),jj+Op(4,tmp),dst,snang)
+ }else{
+ if(dst<Eps2){
+ if((Length(crv1)==2)||(Norm(Op(2,seg1)-Op(1,seg1))>Dist-Eps0)){
+ os1=seg1
+ }else{
+ p1=Op(1,seg1); p2=Op(2,seg1)
+ if(ii==1){
+ p3=Op(3,crv1)
+ tmp=p2-p1
+ tmp=(p1+p2)/2+c(Op(2,tmp),-Op(1,tmp))
+ p0=Reflectdata(p3,c((p1+p2)/2,tmp))
+ }else{
+ if(ii==Length(crv1)-1){
+ p0=Op(ii-1,crv1)
+ tmp=p2-p1
+ tmp=(p1+p2)/2+c(Op(2,tmp),-Op(1,tmp))
+ p3=Reflectdata(p0,c((p1+p2)/2,tmp))
+ }else{
+ p0=Op(ii-1,crv1); p3=Op(ii+2,crv1)
+ }
+ }
+ os1=Osplineseg(list(p0,p1,p2,p3))
+ }
+ if((Length(crv2)==2)||(Norm(Op(2,seg2)-Op(1,seg2))>Dist-Eps0)){
+ os2=seg2
+ }else{
+ p1=Op(1,seg2); p2=Op(2,seg2)
+ if(jj==1){
+ p3=Op(3,crv2)
+ tmp=p2-p1
+ tmp=(p1+p2)/2+c(Op(2,tmp),-Op(1,tmp))
+ p0=Reflectdata(p3,c((p1+p2)/2,tmp))
+ }else{
+ if(jj==Length(crv2)-1){
+ p0=Op(jj-1,crv2)
+ tmp=p2-p1
+ tmp=(p1+p2)/2+c(Op(2,tmp),-Op(1,tmp))
+ p3=Reflectdata(p0,c((p1+p2)/2,tmp))
+ }else{
+ p0=Op(jj-1,crv2); p3=Op(jj+2,crv2)
+ }
+ }
+ os2=Osplineseg(list(p0,p1,p2,p3))
+ }
+ tmp2=list()
+ for(kk in Looprange(1,Length(os1)-1)){
+ for(ll in Looprange(1,Length(os2)-1)){
+ seg1=Listplot(Op(kk,os1),Op(kk+1,os1))
+ seg2=Listplot(Op(ll,os2),Op(ll+1,os2))
+ tmp=Intersectseg(seg1,seg2,Eps1)
+ if((Op(1,tmp)<Eps1)&&(length(tmp)>1)){ #18.02.05
+ if(Op(1,tmp)<dst+Eps00){
+ dst=Op(1,tmp)
+ tmp3=list()
+ for( nn in Looprange(1,length(tmp2))){
+ if(Op(1,tmp2[[nn]])<dst){
+ tmp3=c(tmp3,list(tmp2[[nn]]))
+ }
+ }
+ tmp2=c(tmp3,list(list(dst,Op(2,tmp))))
+ }
+ }
+ }
+ }
+ if(length(tmp2)>0){
+ tmp1=c()
+ for(nn in Looprange(1,length(tmp2))){
+ tmp1=Appendrow(tmp1,Op(2,tmp2[[nn]]))
+ }
+ tmp=sum(tmp1[,1])/length(tmp2)
+ tmp=c(tmp,sum(tmp1[,2])/length(tmp2))
+ out=list(tmp)
+ p1=Op(ii,crv1); p2=Op(ii+1,crv1)
+ tmp=c(Op(2,p2-p1),-Op(1,p2-p1))
+ tmp=Intersectline(Op(1,out),tmp,p1,p2-p1)
+ tmp=min(max(Op(3,tmp),0),1)
+ out=c(out,list(ii+tmp))
+ p1=Op(jj,crv2); p2=Op(jj+1,crv2)
+ tmp=c(Op(2,p2-p1),-Op(1,p2-p1))
+ tmp=Intersectline(Op(1,out),tmp,p1,p2-p1)
+ tmp=min(max(Op(3,tmp),0),1)
+ out=c(out,list(jj+tmp,dst,snang))
+ }
+ }
+ }
+ return(out)
+}
+
+if(1==0){ #start of skip
+
+Collectnear<- function(ptdL,Eps2){
+ gL=list(Op(1,ptdL))
+ rL=ptdL[Looprange(2,length(ptdL))] #18.02.07
+ for( ii in Looprange(1,length(ptdL)-1)){
+ numL=c()
+ for(jj in Looprange(1,length(rL))){
+ tmp1=100
+ for(kk in Looprange(1,length(gL))){
+ tmp=Norm(Op(1,gL[[kk]])-Op(1,rL[[jj]]))
+ if(tmp<tmp1){tmp1=tmp}
+ }
+ if(tmp1<Eps2){numL=c(numL,jj)}
+ }
+ if(length(numL)==0){
+ break
+ }else{
+ gL=c(gL,rL[numL]) #18.02.05
+ tmp=setdiff(1:(length(rL)),numL)
+ rL=rL[tmp]
+ }
+ }
+ return(list(gL,rL))
+}
+
+}# end of skip
+
+Collectsameseg<- function(ptdL){
+ Eps00=10^(-8)
+ if(length(ptdL)==0){
+ gL=list();rL=list()
+ }else{
+ tmp1md=ptdL[1]
+ rL=ptdL[Looprange(2,length(ptdL))]
+ tmp1=tmp1md[[1]]
+ kk=floor(Op(2,tmp1))
+ if(Op(2,tmp1)<kk+Eps00){
+ s1=kk-1-Eps00; e1=s1+2+2*Eps00
+ }else{
+ s1=kk-Eps00; e1=s1+1+2*Eps00
+ }
+ kk=floor(Op(3,tmp1))
+ if(Op(3,tmp1)<kk+Eps00){
+ s2=kk-1-Eps00; e2=s2+2+2*Eps00
+ }else{
+ s2=kk-Eps00; e2=s2+1+2*Eps00
+ }
+ diffL=c()
+ for(ii in Looprange(1,length(rL))){
+ tmp=rL[[ii]]
+ tmp1=Op(2,tmp);tmp2=Op(3,tmp)
+ if((tmp1>s1)&&(tmp1<e1)&&(tmp2>s2)&&(tmp2<e2)){
+ tmp1md=c(tmp1md,list(tmp))
+ }else{
+ diffL=c(diffL,ii)
+ }
+ }
+ tmp=c()
+ for(ii in Looprange(1,length(tmp1md))){
+ tmp=c(tmp,Op(4,tmp1md[[ii]]))
+ }
+ dst=min(tmp)
+ gL=list()
+ for(ii in Looprange(1,length(tmp1md))){
+ tmp=tmp1md[[ii]]
+ if(Op(4,tmp)<dst+Eps00){
+ gL=c(gL,list(tmp))
+ }
+ }
+ tmp1=rL
+ rL=rL[diffL]
+ }
+ return(list(gL,rL))
+}
+
+Groupnearpt<- function(...){
+ varargin=list(...)
+ Nargs=length(varargin)
+ Eps1=varargin[[Nargs]]
+ plist=varargin[[1]]
+ qlist=varargin[[2]]
+ if(!is.list(qlist)){
+ qlist=plist
+ plist=list()
+ }
+ if(length(qlist)==0){
+ return(plist)
+ }
+ pt=qlist[[1]]
+ qlist=qlist[Looprange(2,length(qlist))]
+ if(length(plist)==0){
+ plist=list(matrix(pt,nrow=1))
+ }else{
+ flg=0
+ for(ii in Looprange(1,length(plist))){
+ gL=plist[[ii]]
+ for(jj in Looprange(1,Length(gL))){
+ if(Norm(Op(jj,gL)-pt)<Eps1){
+ flg=1
+ break
+ }
+ }
+ if(flg==1){
+ plist[[ii]]=Appendrow(gL,pt)
+ break
+ }
+ }
+ if(flg==0){
+ plist=c(plist,list(matrix(pt,nrow=1)))
+ }
+ }
+ out=Groupnearpt(plist,qlist,Eps1)
+ return(out)
+}
+
+IntersectcurvesPp<- function(...){
+ varargin=list(...)
+ Nargs=length(varargin)
+ Eps0=10^(-4)
+ Eps1=0.01
+# Eps2=0.05
+ Eps2=0.1
+ Dist=10*Eps2
+ if(Nargs>2){Eps1=varargin[[3]]}
+ if(Nargs>3){Eps2=varargin[[4]]}
+ if(Nargs>4){Dist=varargin[[5]]}
+ tmp1=varargin[[1]]
+ crv1=matrix(Op(1,tmp1),nrow=1)
+ for(ii in Looprange(2,Length(tmp1))){
+ tmp=Op(Length(crv1),crv1)
+ if(Norm(tmp-Op(ii,tmp1))>Eps0){
+ crv1=Appendrow(crv1,Op(ii,tmp1))
+ }
+ }
+ tmp2=varargin[[2]]
+ crv2=matrix(Op(1,tmp2),nrow=1)
+ for(ii in Looprange(2,Length(tmp2))){
+ tmp=Op(Length(crv2),crv2)
+ if(Norm(tmp-Op(ii,tmp2))>Eps0){
+ crv2=Appendrow(crv2,Op(ii,tmp2))
+ }
+ }
+ if(Length(crv1)!=Length(crv2)){
+ self=0
+ }else{
+ self=1
+ for(ii in Looprange(1,Length(crv1))){
+ if(Norm(Op(ii,crv1)-Op(ii,crv2))>0){
+ self=0
+ break
+ }
+ }
+ }
+ out=list()
+ for(ii in Looprange(1,Length(crv1)-1)){
+ if(self==0){
+ loopL=Looprange(1,Length(crv2)-1)
+ }else{
+ loopL=Looprange(ii+2,Length(crv2)-1)
+ }
+ for(jj in loopL){
+ tmp=Intersectpartseg(crv1,crv2,ii,jj,Eps1,Eps2,Dist)
+ if(length(tmp)>1){ #18.02.05
+ if(length(out)==0){
+ out=list(tmp)
+ }else{
+ tmp1=Op(length(out),out)
+ if(Norm(Op(1,tmp1)-Op(1,tmp))>Eps1){
+ out=c(out,list(tmp))
+ }
+ }
+ if(self==1){
+ tmp=list(Op(1,tmp),Op(3,tmp),Op(2,tmp),Op(4,tmp),Op(5,tmp))
+ out=c(out,list(tmp))
+ }
+ }
+ }
+ }
+ tmp2=out
+ out=list()
+ tmp1=tmp2
+ for(ii in Looprange(1,length(tmp2))){
+ tmp=Collectsameseg(tmp1)
+ out=c(out,list(Op(1,tmp)))
+ if(length(Op(2,tmp))==0){
+ break
+ }else{
+ tmp1=Op(2,tmp)
+ }
+ }
+ for(ii in Looprange(1,length(out))){
+ tmp1=Op(ii,out)
+ if(length(tmp1)==1){
+ out[[ii]]=Op(1,tmp1)
+ }else{
+ tmp=c()
+ for(jj in Looprange(1,length(tmp1))){
+ tmp=c(tmp,Op(4,tmp1[[jj]]))
+ }
+ dst=min(tmp)
+ tmp=c()
+ for(jj in Looprange(1,length(tmp1))){
+ if(Op(4,tmp1[[jj]])<dst+Eps0){
+ tmp=c(tmp,Op(1,tmp1[[jj]]))
+ }
+ }
+ tmp=matrix(tmp,ncol=2,byrow=TRUE)
+ tmp=c(sum(tmp[,1]),sum(tmp[,2]))/Length(tmp)
+ tmp2=list(tmp)
+ tmp=Nearestpt(Op(1,tmp2),crv1)
+ tmp2=c(tmp2,list(Op(2,tmp)))
+ tmp=Nearestpt(Op(1,tmp2),crv2)
+ tmp2=c(tmp2,list(Op(2,tmp)))
+ tmp2=c(tmp2,list(list(dst,Op(5,tmp1[[1]]))))
+ out[[ii]]=tmp2
+ }
+ }
+ return(out)
+}
+
+Intersectcurves<- function(...){
+ dtL=IntersectcurvesPp(...)
+ out=list()
+ for(jj in Looprange(1,length(dtL))){
+ out=c(out,list(Op(1,dtL[[jj]])))
+ }
+ return(out)
+}
+
+############## end of New Intersect #############
+
+############## New Enclosing2 #############
+
+Enclosing2<- function(...){
+ varargin=list(...)
+ Nargs=length(varargin)
+ plist=varargin[[1]]
+ Eps0=10^(-5)
+ epspara=1; #180707
+ Eps1=0.01
+ Eps2=0.1
+ Start=c()
+ flg=0
+ for(ii in Looprange(2,Nargs)){
+ tmp=varargin[[ii]]
+ if(length(tmp)>1){
+ Start=tmp
+ }else{
+ if(flg==0){epspara=tmp}
+ if(flg==1){Eps1=tmp}
+ if(flg==2){Eps2=tmp}
+ flg=flg+1
+ }
+ }
+ flg=0
+ AnsL=c()
+ if(length(plist)==1){
+ Fdata=plist[[1]]
+ tmp1=Op(1,Fdata)
+ tmp2=Op(Length(Fdata),Fdata)
+ if(Norm(tmp1-tmp2)<Eps0){
+ AnsL=Fdata
+ }else{
+ AnsL=Appendrow(Fdata,tmp1)
+ }
+ flg=1
+ }
+ if(flg==0){
+ Fdata=Op(1,plist)
+ Gdata=Op(length(plist),plist)
+ KL=IntersectcurvesPp(Fdata,Gdata)
+ if(length(KL)==0){
+ tmp1=Op(Length(Gdata),Gdata)
+ tmp2=Op(1,Fdata)
+ tmp=Listplot(tmp1,tmp2)
+ plist=c(plist,list(tmp))
+ Start=tmp2
+ tst=1
+ }else{
+ if(length(KL)==1){
+ tmp=Op(1,KL)
+ tst=Op(2,tmp)
+ Start=Op(1,tmp) #180706
+ }
+ if(length(KL)>1){
+ KL=Quicksort(KL,2) #180706from
+ if(length(Start)==0){
+ tmp=Op(1,KL)
+ tst=Op(2,tmp)
+ Start=Op(1,tmp)
+ }else{
+ tmp=c()
+ tmp1=list()
+ for(ii in Looprange(1,length(KL))){
+ tmp2=Op(1,KL[[ii]])
+ flgsame=0 #180717from
+ for(jj in Looprange(1,length(tmp1))){
+ if(Norm(tmp2-Op(jj,tmp1))<Eps1){
+ flgsame=1
+ break
+ }
+ }
+ if(flgsame==0){
+ tmp=c(tmp,Norm(Op(1,KL[[ii]])-Start))
+ tmp1=c(tmp1,list(tmp2))
+ } #180717to
+ }
+ tmp=order(tmp)
+ tmp=Op(tmp[1],KL)
+ tst=Op(2,tmp)
+ Start=Op(1,tmp)#180706to
+ }
+ }
+ }
+ }
+ if(flg==0){
+ t1=tst
+ p1=Pointoncurve(t1,Fdata)#180713
+ for(nn in Looprange(1,length(plist))){
+ Fdata=Op(nn,plist)
+ if(nn==length(plist)){
+ nxtno=1
+ }else{
+ nxtno=nn+1
+ }
+ Gdata=Op(nxtno,plist)
+ KL=IntersectcurvesPp(Fdata,Gdata)
+ if(length(KL)==0){
+ tmp=matrix(Op(Length(Fdata),Fdata),nrow=1) #18.02.02from
+ Gdata=Appendrow(tmp,Gdata)
+ plist[[nxtno]]=Gdata
+ t2=Length(Fdata)
+ ss=1 #18.02.02to
+ }else{
+# KL=Quicksort(KL,2); #180706from
+# for(j in Looprange(1,length(KL))){
+# tmp1=t1+epspara/50*Length(Fdata)#180713(2lines)
+# tmp2=Op(2,KL[[j]])
+# if((tmp2>tmp1)||((tmp2>t1)&&(Norm(Op(3,KL[[j]])-p1)>Eps1))){
+# break
+# } #180711,16
+# }
+# t2=Op(2,KL[[j]])
+# p2=Pointoncurve(t2,Fdata)#180713
+# ss=Op(3,KL[[j]])# 180706to
+ tmp=c() #180711from
+ for(j in Looprange(1,length(KL))){
+ tmp=c(tmp,Op(2,KL[[j]]))
+ }
+ tmp1=order(tmp)
+ tmp2=KL
+ KL=list()
+ for(j in tmp1){
+ tmp=tmp2[[j]]
+ tmp3=t1+epspara/50*Length(Fdata)
+ tmp4=Op(2,tmp)
+ if((tmp4>tmp3)||((tmp4>t1)&&(Norm(Op(1,tmp)-p1)>Eps1))){
+ KL=c(KL,list(tmp))
+ }
+ }
+ t2=Op(2,KL[[1]])
+ ss=Op(3,KL[[1]]) #180711from
+ if(abs(t2-t1)<Eps0){
+ if(length(KL)>1){
+ tmp=Op(2,KL)
+ t2=Op(2,tmp)
+ ss=Op(3,tmp)
+ }else{
+ }
+ }
+ }
+ if(flg==0){
+ tmp=Partcrv(t1,t2,Fdata)
+ if(nn==1){
+ AnsL=tmp
+ }else{
+ tmp=tmp[2:Length(tmp),]
+ AnsL=Appendrow(AnsL,tmp)
+ }
+ }
+ t1=ss
+ p1=Pointoncurve(t1,Gdata)#180713
+ }
+ }
+ return(AnsL)
+}
+
+############## end of Enclosing2 #############
+
+############## start of surface drawing #############
+
+Fullformfunc<- function(FdL){
+ ADDPOINT<<- list() #18.02.19
+ Out=list(Op(1,FdL))
+ N=length(FdL)
+ for(Jrg in Looprange(1,N)){
+ Tmp=grep("c(",Op(Jrg,FdL),fixed=TRUE)
+ if(length(Tmp)>0){
+ break
+ }
+ }
+ Urg=Stripblanks(Op(Jrg,FdL))
+ Tmp=strsplit(Urg,"=",fixed=TRUE)
+ UNAME<<- Tmp[[1]][1]
+ URNG<<- eval(parse(text=Tmp[[1]][2]))
+ Urg=paste(UNAME,"=c(",sprintf("%6.7f",URNG[1]),",",
+ sprintf("%6.7f",URNG[2]),")",sep="")
+ Vrg=Stripblanks(Op(Jrg+1,FdL))
+ Tmp=strsplit(Vrg,"=",fixed=TRUE)
+ VNAME<<- Tmp[[1]][1]
+ VRNG<<- eval(parse(text=Tmp[[1]][2]))
+ Vrg=paste(VNAME,"=c(",sprintf("%6.7f",VRNG[1]),",",
+ sprintf("%6.7f",VRNG[2]),")",sep="")
+ if(Jrg==2){
+ Xf=UNAME
+ Yf=VNAME
+ Tmp=Stripblanks(Op(1,FdL))
+ Tmp=strsplit(Tmp,"=",fixed=TRUE)
+ Zf=Tmp[[1]][2]
+ Tmp=list(UNAME,VNAME,Zf,Urg,Vrg)
+ Out=c(Out,Tmp)
+ }else if(Jrg==4){
+ Tmp=Stripblanks(Op(1,FdL))
+ Tmp=strsplit(Tmp,"=",fixed=TRUE)
+ Zf=Tmp[[1]][2]
+ Tmp=Stripblanks(Op(2,FdL))
+ Tmp=strsplit(Tmp,"=",fixed=TRUE)
+ Xname=Tmp[[1]][1]
+ Xf=Tmp[[1]][2]
+ Tmp=Stripblanks(Op(3,FdL))
+ Tmp=strsplit(Tmp,"=",fixed=TRUE)
+ Yname=Tmp[[1]][1]
+ Yf=Tmp[[1]][2]
+ Tmp=gsub(Xname,paste("(",Xf,")",sep=""),Zf,fixed=TRUE)
+ Zf=gsub(Yname,paste("(",Yf,")",sep=""),Tmp,fixed=TRUE)
+ Tmp=list(Xf,Yf,Zf,Urg,Vrg)
+ Out=c(Out,Tmp)
+ }else{
+ Tmp=Stripblanks(Op(2,FdL))
+ Tmp=strsplit(Tmp,"=",fixed=TRUE)
+ Xf=Tmp[[1]][2]
+ Tmp=Stripblanks(Op(3,FdL))
+ Tmp=strsplit(Tmp,"=",fixed=TRUE)
+ Yf=Tmp[[1]][2]
+ Tmp=Stripblanks(Op(4,FdL))
+ Tmp=strsplit(Tmp,"=",fixed=TRUE)
+ Zf=Tmp[[1]][2]
+ Tmp=list(Xf,Yf,Zf,Urg,Vrg)
+ Out=c(Out,Tmp)
+ }
+ tmp=paste("Xfunc<<- function(",UNAME,",",VNAME,"){",Xf,"}",sep='')
+ eval(parse(text=tmp))
+ tmp=paste("Yfunc<<- function(",UNAME,",",VNAME,"){",Yf,"}",sep='')
+ eval(parse(text=tmp))
+ tmp=paste("Zfunc<<- function(",UNAME,",",VNAME,"){",Zf,"}",sep='')
+ eval(parse(text=tmp))
+ tmp=paste("XYZfunc<<- function(",UNAME,",",VNAME,"){",sep='')
+ tmp=paste(tmp,"c(",Xf,",",Yf,",",Zf,")}",sep='')
+ eval(parse(text=tmp))
+ XYZstr<<- c(Xf,Yf,Zf)
+ DRWS<<- "enws"
+ BdyL=list()
+ for(I in Looprange(Jrg+2,length(FdL))){
+ Tmp=Op(I,FdL)
+ if(is.character(Tmp)){
+ if(nchar(Tmp)==0){
+ Tmp=" "
+ }
+ DRWS<<- list(Tmp)
+ }
+ if((is.numeric(Tmp))&&(Length(Tmp)>1)){
+ BdyL=list(Tmp)
+ }
+ }
+ BDYL<<- BdyL
+ Tmp=c(DRWS,BDYL)
+ Out=c(Out,Tmp)
+ return(Out)
+}
+
+Addpoints<- function(ptlist){
+ ADDPOINT<<- ptlist
+}
+
+Makexybdy<- function(Np){
+ Eps0=10^(-4)
+ Xystr=XYZstr[1:2]
+ Umin=URNG[1]; Umax=URNG[2]
+ Vmin=VRNG[1]; Vmax=VRNG[2]
+ Cflg=0
+ EhL=list()
+ Tmp=grep("e",DRWS,fixed=TRUE)
+ if(length(Tmp)>0){
+ Tmp1="c("
+ for(jj in 1:2){
+ Tmp=gsub(UNAME,paste("(",sprintf("%7.7f",Umax),")",sep=""),Xystr[jj])
+ Tmp1=paste(Tmp1,Tmp,",",sep="")
+ }
+ Tmp=substring(Tmp1,1,Length(Tmp1)-1)
+ Tmp1=paste(Tmp,")",sep="")
+ Tmp=sprintf("%6.6f",VRNG)
+ Tmp2=paste(VNAME,"=c(",Tmp[1],",",Tmp[2],")",sep='')
+ Tmp3=paste('N=',as.character(Np[2]))
+ Tmp=Paramplot(Tmp1,Tmp2,Tmp3)
+ if(Norm(Op(1,Tmp)-Op(Length(Tmp),Tmp))<Eps0){
+ Cflg=1
+ Tmp[Length(Tmp),]=Tmp[1,]
+ }
+ EhL=c(EhL,list(Tmp))
+ }
+ Tmp=grep("n",DRWS,fixed=TRUE)
+ if(length(Tmp)>0){
+ Tmp1="c("
+ for(jj in 1:2){
+ Tmp=gsub(VNAME,paste("(",sprintf("%7.7f",Vmax),")",sep=""),Xystr[jj])
+ Tmp1=paste(Tmp1,Tmp,",",sep="")
+ }
+ Tmp=substring(Tmp1,1,Length(Tmp1)-1)
+ Tmp1=paste(Tmp,")",sep="")
+ Tmp=sprintf("%6.6f",URNG)
+ Tmp2=paste(UNAME,"=c(",Tmp[1],",",Tmp[2],")",sep='')
+ Tmp3=paste('N=',as.character(Np[1]))
+ Tmp=Paramplot(Tmp1,Tmp2,Tmp3)
+ if(Cflg>0){
+ Tmp1=Op(length(EhL),EhL)
+ Tmp=Joincrvs(Tmp1,Tmp)
+ if(Norm(Op(1,Tmp)-Op(Length(Tmp),Tmp))<Eps0){
+ Cflg=1
+ Tmp[Length(Tmp),]=Tmp[1,]
+ }
+ Tmp1=EhL[Looprange(1,length(EhL)-1)]
+ EhL=c(Tmp1,Tmp)
+ }else{
+ Cflg=0
+ if(Norm(Op(1,Tmp)-Op(Length(Tmp),Tmp))<Eps0){
+ Cflg=1
+ Tmp[Length(Tmp),]=Tmp[1,]
+ }
+ EhL=c(EhL,list(Tmp))
+ }
+ }
+ Tmp=grep("w",DRWS,fixed=TRUE)
+ if(length(Tmp)>0){
+ Tmp1="c("
+ for(jj in 1:2){
+ Tmp=gsub(UNAME,paste("(",sprintf("%7.7f",Umin),")",sep=""),Xystr[jj])
+ Tmp1=paste(Tmp1,Tmp,",",sep="")
+ }
+ Tmp=substring(Tmp1,1,Length(Tmp1)-1)
+ Tmp1=paste(Tmp,")",sep="")
+ Tmp=sprintf("%6.6f",VRNG)
+ Tmp2=paste(VNAME,"=c(",Tmp[1],",",Tmp[2],")",sep='')
+ Tmp3=paste('N=',as.character(Np[2]))
+ Tmp=Paramplot(Tmp1,Tmp2,Tmp3)
+ if(Cflg>0){
+ Tmp1=Op(length(EhL),EhL)
+ Tmp=Joincrvs(Tmp1,Tmp)
+ if(Norm(Op(1,Tmp)-Op(Length(Tmp),Tmp))<Eps0){
+ Cflg=1
+ Tmp[Length(Tmp),]=Tmp[1,]
+ }
+ Tmp1=EhL[Looprange(1,length(EhL)-1)]
+ EhL=c(Tmp1,list(Tmp))
+ }else{
+ Cflg=0
+ if(Norm(Op(1,Tmp)-Op(Length(Tmp),Tmp))<Eps0){
+ Cflg=1
+ Tmp[Length(Tmp),]=Tmp[1,]
+ }
+ EhL=c(EhL,list(Tmp))
+ }
+ }
+ Tmp=grep("s",DRWS,fixed=TRUE)
+ if(length(Tmp)>0){
+ Tmp1="c("
+ for(jj in 1:2){
+ Tmp=gsub(VNAME,paste("(",sprintf("%7.7f",Vmin),")",sep=""),Xystr[jj])
+ Tmp1=paste(Tmp1,Tmp,",",sep="")
+ }
+ Tmp=substring(Tmp1,1,Length(Tmp1)-1)
+ Tmp1=paste(Tmp,")",sep="")
+ Tmp=sprintf("%6.6f",URNG)
+ Tmp2=paste(UNAME,"=c(",Tmp[1],",",Tmp[2],")",sep='')
+ Tmp3=paste('N=',as.character(Np[1]))
+ Tmp=Paramplot(Tmp1,Tmp2,Tmp3)
+ if(Cflg>0){
+ Tmp1=Op(length(EhL),EhL)
+ Tmp=Joincrvs(Tmp1,Tmp)
+ if(Norm(Op(1,Tmp)-Op(Length(Tmp),Tmp))<Eps0){
+ Cflg=1
+ Tmp1=EhL[Looprange(1,length(EhL)-1)]
+ }
+ Tmp1=EhL[Looprange(1,length(EhL)-1)]
+ EhL=c(Tmp1,list(Tmp))
+ }else{
+ Cflg=0
+ if(Norm(Op(1,Tmp)-Op(Length(Tmp),Tmp))<Eps0){
+ Cflg=1
+ Tmp[Length(Tmp),]=Tmp[1,]
+ }
+ EhL=c(EhL,list(Tmp))
+ }
+ }
+ return(EhL)
+}
+
+Partitionseg<- function(...){
+ varargin=list(...)
+ Nargs=length(varargin)
+ Fig=varargin[[1]]
+ GL=varargin[[2]]; N=3
+ if(!is.list(GL)){GL=list(GL)} #18.02.21
+ Eps0=10^(-4)
+ Eps1=0.01
+ if(Nargs>2){
+ Eps1=varargin[[3]]
+ }
+ Eps2=0.1
+ if(Nargs>3){
+ Eps2=varargin[[4]]
+ }
+ if(Nargs>4){
+ Ns=varargin[[5]]
+ if(Ns>0){#18.02.21from
+ Other=Op(Ns,OTHERPARTITION)
+ }else{
+ Other=c()
+ }#18.02.21until
+ }else{
+ Ns=1
+ Other=c()
+ }
+ Npt=Length(Fig)
+ ParL=c(1,Npt,Other)
+ for(N in Looprange(max(1,Ns),Length(GL))){ #18.02.21
+ G=Op(N,GL)
+ KouL=IntersectcurvesPp(Fig,G,Eps1,Eps2)
+ Tmp1=c(); Tmp2=c()
+ for(jj in Looprange(1,length(KouL))){
+ tmp=Op(2,KouL[[jj]])
+ if((tmp>1+Eps0)&&(tmp<Npt-Eps0)){
+ Tmp1=c(Tmp1,tmp)
+ }
+ tmp=Op(3,KouL[[jj]])
+ if((tmp>1+Eps0)&&(tmp<Length(G)-Eps0)){
+ Tmp2=c(Tmp2,tmp)
+ }
+ }
+ ParL=c(ParL,Tmp1)
+ if((Ns>0)&&(N>Ns)&&(length(Tmp2)>0)){ #18.02.21
+ tmp=OTHERPARTITION[[N]]
+ OTHERPARTITION[[N]]<<- c(tmp,Tmp2)
+ }
+ }
+ tmp1=sort(ParL)
+ ParL=c()
+ tmp2=-1
+ for(jj in Looprange(1,length(tmp1))){
+ tmp=Op(jj,tmp1)
+ if(abs(tmp-tmp2)>Eps1){
+ ParL=c(ParL,tmp)
+ tmp2=tmp
+ }
+ }
+ return(ParL)
+}
+
+Evlptablepara<- function(...){
+ varargin=list(...)
+ Nargs=length(varargin)
+ Tmp=varargin[[1]]
+ Mdv=50
+ Ndv=50
+ if(Nargs>=2){
+ Tmp=varargin[[2]]
+ if(is.list(Tmp)){Tmp=Op(1,Tmp)}
+ if(length(Tmp)>1){
+ Mdv=Tmp[1]
+ Ndv=Tmp[2]
+ }else{
+ Mdv=Tmp
+ if(Nargs==2){
+ Ndv=Mdv
+ }else{
+ Tmp1=varargin[[3]]
+ if((is.numeric(Tmp1)) && (length(Tmp1)==1)){
+ Ndv=Tmp1
+ }else{
+ Ndv=Mdv
+ }
+ }
+ }
+ }
+ U1=URNG[1]; U2=URNG[2]
+ V1=VRNG[1]; V2=VRNG[2]
+ Du=(U2-U1)/(Mdv)
+ Dv=(V2-V1)/(Ndv)
+ sph=sprintf("%7.7f",sin(PHI))
+ cph=sprintf("%7.7f",cos(PHI))
+ sth=sprintf("%7.7f",sin(THETA))
+ cth=sprintf("%7.7f",cos(THETA))
+ xstr=paste("-(",XYZstr[1],")*(",sph,")+(",XYZstr[2],")*(",cph,")",sep="")
+ tmp=paste("-(",XYZstr[1],")*(",cph,")*(",cth,")-(",XYZstr[2],")*(",sph,")*(",cth,")",sep="")
+ ystr=paste(tmp,"+(",XYZstr[3],")*(",sth,")",sep="")
+ dxu=Diff(xstr,UNAME)
+ dxv=Diff(xstr,VNAME)
+ dyu=Diff(ystr,UNAME)
+ dyv=Diff(ystr,VNAME)
+ I=1
+ Zval=c()
+ for(jj in 1:(Ndv+1)){
+ v=V1+(jj-1)*Dv
+ ZuL=c()
+ for(ii in 1:(Mdv+1)){
+ u=U1+(ii-1)*Du
+ tmp1=paste(UNAME,"=(",sprintf("%7.7f",u),")",sep="")
+ tmp2=paste(VNAME,"=(",sprintf("%7.7f",v),")",sep="")
+ Dxu=Funvalue(dxu,tmp1,tmp2)
+ Dxv=Funvalue(dxv,tmp1,tmp2)
+ Dyu=Funvalue(dyu,tmp1,tmp2)
+ Dyv=Funvalue(dyv,tmp1,tmp2)
+ Tmp=Dxu*Dyv-Dxv*Dyu
+ ZuL=c(ZuL,Tmp)
+ }
+ Zval=Appendrow(Zval,ZuL)
+ }
+ Yval=c()
+ for(jj in 1:(Ndv+1)){
+ v=V1+(jj-1)*Dv
+ Yval=c(Yval,v)
+ }
+ Xval=c()
+ for(ii in 1:(Mdv+1)){
+ u=U1+(ii-1)*Du
+ Xval=c(Xval,u)
+ }
+ return(list(Zval,Xval,Yval))
+}
+
+Evlpfun<- function(u,v){
+ tmp1=paste(UNAME,"=(",sprintf("%7.7f",u),")",sep="")
+ tmp2=paste(VNAME,"=(",sprintf("%7.7f",v),")",sep="")
+ Dxu=Funvalue(dxu,tmp1,tmp2)
+ Dxv=Funvalue(dxv,tmp1,tmp2)
+ Dyu=Funvalue(dyu,tmp1,tmp2)
+ Dyv=Funvalue(dyv,tmp1,tmp2)
+ Tmp=Dxu*Dyv-Dxv*Dyu
+ return(Tmp)
+}
+
+Envelopedata<- function(...){
+ varargin=list(...)
+ Eps0=10^(-4)
+ Nargs=length(varargin)
+ Fd=varargin[[1]]
+ Fullformfunc(Fd)
+ Mdv=50
+ Ndv=50
+ if(Nargs>=2){
+ Tmp=varargin[[2]]
+ if(is.list(Tmp)){Tmp=Op(1,Tmp)}
+ if(length(Tmp)>1){
+ Mdv=Tmp[1]
+ Ndv=Tmp[2]
+ }else{
+ Mdv=Tmp
+ if(Nargs==2){
+ Ndv=Mdv
+ }else{
+ Tmp1=varargin[[3]]
+ if((is.numeric(Tmp1)) && (length(Tmp1)==1)){
+ Ndv=Tmp1
+ }else{
+ Ndv=Mdv
+ }
+ }
+ }
+ }
+ sph=sprintf("%7.7f",sin(PHI))
+ cph=sprintf("%7.7f",cos(PHI))
+ sth=sprintf("%7.7f",sin(THETA))
+ cth=sprintf("%7.7f",cos(THETA))
+ xstr=paste("-(",XYZstr[1],")*(",sph,")+(",XYZstr[2],")*(",cph,")",sep="")
+ tmp=paste("-(",XYZstr[1],")*(",cph,")*(",cth,")-(",XYZstr[2],")*(",sph,")*(",cth,")",sep="")
+ ystr=paste(tmp,"+(",XYZstr[3],")*(",sth,")",sep="")
+ dxu<<- Diff(xstr,UNAME)
+ dxv<<- Diff(xstr,VNAME)
+ dyu<<- Diff(ystr,UNAME)
+ dyv<<- Diff(ystr,VNAME)
+ U1=URNG[1]; U2=URNG[2]
+ V1=VRNG[1]; V2=VRNG[2]
+ Du=(U2-U1)/Mdv
+ Dv=(V2-V1)/Ndv
+ Out=c()
+ for(J in 1:(Ndv)){
+ Vval1=VRNG[1]+(J-1)*Dv
+ Vval2=VRNG[1]+J*Dv
+ Uval1=URNG[1]
+ Eval11=Evlpfun(Uval1,Vval1)
+ Eval12=Evlpfun(Uval1,Vval2)
+ for(I in 1:(Mdv)){
+ Uval2=URNG[1]+I*Du
+ Eval21=Evlpfun(Uval2,Vval1)
+ Eval22=Evlpfun(Uval2,Vval2)
+ a1=Uval1;b1=Vval1;c1=Eval11
+ a2=Uval2;b2=Vval1;c2=Eval21
+ a3=Uval2;b3=Vval2;c3=Eval22
+ a4=Uval1;b4=Vval2;c4=Eval12
+ PL=matrix(c(a1,b1,a2,b2,a3,b3,a4,b4,a1,b1),ncol=2,byrow=TRUE)
+ VL=c(c1,c2,c3,c4,c1)
+ QL=c()
+ for(K in 1:4){
+ if(abs(VL[K])<=Eps0){
+ QL=Appendrow(QL,PL[K,])
+ }else if(VL[K]>Eps0){
+ if(VL[K+1]< -Eps0){
+ Tmp=1/(VL[K]-VL[K+1])*(-VL[K+1]*PL[K,]+VL[K]*PL[K+1,])
+ QL=Appendrow(QL,Tmp)
+ }
+ }else{
+ if(VL[K+1]>Eps0){
+ Tmp=1/(-VL[K]+VL[K+1])*(VL[K+1]*PL[K,]-VL[K]*PL[K+1,])
+ QL=Appendrow(QL,Tmp)
+ }
+ }
+ }
+ Uval1=Uval2
+ Eval11=Eval21
+ Eval12=Eval22
+ if(Length(QL)==2){
+ Out=Appendrow(Out,c(Inf,Inf))
+ Out=Appendrow(Out,QL)
+ }
+ }
+ }
+ Out=Out[2:nrow(Out),]
+ if(Length(Out)>0){
+ Out=Connectseg(Out)
+ }else{
+ Out=c()
+ }
+ return(Out)
+}
+
+Dropnumlistcrv<- function(QdL,Eps1){
+ Eps0=10^(-4)
+ if(!is.list(QdL)){
+ PdL=list(QdL)
+ }else{
+ PdL=QdL
+ }
+ OutL=list()
+ for(I in Looprange(1,length(PdL))){
+ Pd=Op(I,PdL)
+ PtL=c(1)
+ P=Op(1,Pd)
+ for(K in Looprange(2,Length(Pd)-1)){
+ if(Norm(P-Op(K,Pd))>Eps1){
+ PtL=c(PtL,K)
+ P=Op(K,Pd)
+ }
+ }
+ K=Length(Pd)
+ if(Norm(P-Op(K,Pd))>Eps1){ #18.02.12 eps
+ PtL=c(PtL,K)
+ }
+ OutL=c(OutL,list(PtL))
+ }
+ return(OutL)
+}
+
+Cuspsplitpara<- function(...){
+ varargin=list(...)
+ Nargs=length(varargin);
+ Gdxy=varargin[[1]]
+ if(!is.list(Gdxy)){
+ Gdxy=list(Gdxy)
+ }
+ Eps0=10^(-4)
+ Eps1=0.01
+ if(Nargs>2){Eps1=varargin[[2]]}
+ N=2
+ CUSPSPLITPT<<- list()
+ OutkL=list()
+ for(Ng in Looprange(1,length(Gdxy))){
+ PtxyL=Op(Ng,Gdxy)
+ PtkL=c()
+ PthL=c()
+ for(I in Looprange(1,Length(PtxyL))){
+ Tmp=Op(I,PtxyL)
+ Tmp1=paste(UNAME,'=',sprintf("%7.7f",Tmp[1]),sep="")
+ eval(parse(text=Tmp1))
+ Tmp1=paste(VNAME,'=',sprintf("%7.7f",Tmp[2]),sep="")
+ eval(parse(text=Tmp1))
+ Tmp2=c(eval(parse(text=XYZstr[1])))
+ Tmp2=c(Tmp2,eval(parse(text=XYZstr[2])))
+ Tmp2=c(Tmp2,eval(parse(text=XYZstr[3])))
+ Tmp3=Parapt(Tmp2)
+ if(I==1){
+ PtkL=matrix(Tmp2,nrow=1)
+ PthL=matrix(Tmp3,nrow=1)
+ }else{
+ Tmp4=Op(Length(PthL),PthL)
+ if(Norm(Tmp3-Tmp4)>Eps0){
+ PtkL=Appendrow(PtkL,Tmp2)
+ PthL=Appendrow(PthL,Tmp3)
+ }
+ }
+ }
+ if(Length(PthL)==0){
+ return(list())
+ }
+ Ps=Op(1,PthL); Pe=Op(Length(PthL),PthL)
+ Cflg=0
+ if(Norm(Ps-Pe)<Eps1){Cflg=1}
+ CuspL=c()
+ Cva=cos(10*pi/180)
+ for(I in Looprange(1,Length(PthL)-1)){
+ if(Length(PthL)==2){break}
+ Tmp=Op(I,PthL)
+ if(I==1){
+ if(Cflg==0){next}
+ Tmp1=Op(Length(PthL)-1,PthL)
+ }else{
+ Tmp1=Op(I-1,PthL)
+ }
+ Tmp2=Op(I+1,PthL)
+ V1=Tmp-Tmp1
+ V2=Tmp2-Tmp
+ Tmp3=Dotprod(V1,V2)/(Norm(V1)*Norm(V2))
+ Cuspflg=0
+ if(Tmp3<Cva){
+ P=Op(I,PthL)
+ Kaku=acos(Tmp3)*180/pi
+ if(Crossprod(V1,V2)<0){
+ Kaku=-Kaku
+ }
+ Cuspflg=0
+ for(J in Looprange(I+1,Length(PthL)-1)){
+ if(abs(Kaku)>90){
+ Cuspflg=1
+ break
+ }
+ Q=Op(J,PthL)
+ if(Norm(P-Q)>Eps1){
+ break
+ }
+ V1=Q-Op(J-1,PthL)
+ V2=Op(J+1,PthL)-Q
+ Tmp3=Dotprod(V1,V2)/(norm(V1)*norm(V2))
+ Tmp=acos(Tmp3)*180/pi
+ if(Crossprod(V1,V2)<0){
+ Tmp=-Tmp
+ }
+ Kaku=Kaku+Tmp
+ }
+ if(Cuspflg==1){
+ Tmp=trunc((I+J)*0.5)
+ I=J
+ if(length(CuspL)==0){
+ CuspL=c(Tmp)
+ }else{
+ CuspL=c(CuspL,Tmp)
+ }
+ }
+ }
+ }
+ if(Cflg==0){
+ CuspL=c(1,CuspL,Length(PthL))
+ }else if(length(CuspL)==0){
+ CuspL=c(1,Length(PthL))
+ }else if(Op(1,CuspL)==1){
+ CuspL=c(CuspL,Length(PthL))
+ }else{
+ Tmp=Op(1,CuspL)
+ Tmp1=PthL[Tmp:Length(PthL),]
+ Tmp2=PthL[2:Tmp,]
+ PthL=Appendrow(Tmp1,Tmp2)
+ Tmp1=PtkL[Tmp:Length(PthL),]
+ Tmp2=PtkL[2:Tmp,]
+ PtkL=Appendrow(Tmp1,Tmp2)
+ CuspL=CuspL-Tmp+1
+ CuspL=c(CuspL,Length(PthL))
+ }
+ if(length(CuspL)==2){
+ Tmp4=PthL[Length(PthL),]
+ if(Length(PtkL)>=2){
+ CUSPSPLITPT<<- c(CUSPSPLITPT,list(Tmp4))
+ OutkL=c(OutkL,list(PtkL))
+ }
+ next
+ }
+ Outk=list()
+ Is=1
+ for(I in Looprange(1,length(CuspL)-1)){
+ Tmp1=CuspL[Is]; Tmp2=CuspL[I+1]
+ Tmp3=Op(Tmp1,PthL); Tmp4=Op(Tmp2,PthL)
+ if(Norm(Tmp3-Tmp4)>Eps1){
+ Tmpk=PtkL[Tmp1:Tmp2,]
+ Outk=c(Outk,list(Tmpk))
+ CUSPSPLITPT<<- c(CUSPSPLITPT,list(Tmp4))
+ Is=I+1
+ }
+ }
+ OutkL=c(OutkL,Outk)
+ }
+ Tmp1=Dropnumlistcrv(Projpara(OutkL),Eps1*0.5)
+ Tmp=list()
+ for(I in Looprange(1,length(OutkL))){
+ Tmp2=Op(I,OutkL)
+ Tmp3=Op(I,Tmp1)
+ Tmp4=c()
+ for(J in Looprange(1,Length(Tmp3))){
+ Tmp5=Op(Tmp3[J],Tmp2)
+ Tmp4=Appendrow(Tmp4,Tmp5)
+ }
+ if(Length(Tmp4)>0){
+ Tmp=c(Tmp,list(Tmp4))
+ }
+ }
+ return(Tmp)
+}
+
+PthiddenQ<- function(PtA,Vec,Uveq,Np,Eps1,Eps2){
+ Eps0=10^(-4)
+ Out=c()
+ Vec=1/Norm(Vec)*Vec
+ if(length(Np)==1){
+ Np=c(Np,Np)
+ }
+ Tmp=paste("Eqfun<- function(U,V){",sep='')
+ if((abs(Vec[2])>Eps0) || (abs(Vec[1])>Eps0)){
+ Vstr=sprintf("%6.6f",Vec)
+ Pstr=sprintf("%6.6f",PtA)
+ Tmp=paste(Tmp,"(",Vstr[2],")*(Xfunc(U,V)-(",Pstr[1],"))",sep='')
+ Tmp=paste(Tmp,"-(",Vstr[1],")*(Yfunc(U,V)-(",Pstr[2],"))}",sep='')
+ }else{
+ Tmp=paste(Tmp,"Xfunc(U,V)}",sep='')
+ }
+ eval(parse(text=Tmp))
+ Dx=(URNG[2]-URNG[1])/Np[1]
+ Dy=(VRNG[2]-VRNG[1])/Np[2]
+ for(J in Looprange(1,Np[2])){ #180227
+ Vval1=VRNG[1]+(J-1)*Dy
+ Vval2=VRNG[1]+J*Dy
+ Uval1=URNG[1] #180306(3lines)
+ Eval11=Eqfun(Uval1,Vval1)
+ Eval12=Eqfun(Uval1,Vval2)
+ for(I in Looprange(1,Np[1])){ #180227
+ Uval2=URNG[1]+I*Dx
+ Eval21=Eqfun(Uval2,Vval1)
+ Eval22=Eqfun(Uval2,Vval2)
+ a1=Uval1;b1=Vval1;c1=Eval11
+ a2=Uval2;b2=Vval1;c2=Eval21
+ a3=Uval2;b3=Vval2;c3=Eval22
+ a4=Uval1;b4=Vval2;c4=Eval12
+ PL=matrix(c(a1,b1,a2,b2,a3,b3,a4,b4,a1,b1),ncol=2,byrow=TRUE)
+ VL=c(c1,c2,c3,c4,c1)
+ QL=c()
+ for(K in 1:4){
+ P1=Op(K,PL); P2=Op(K+1,PL)
+ M1=Op(K,VL); M2=Op(K+1,VL)
+ if(abs(M1)<Eps0){
+ QL=Appendrow(QL,P1)
+ next
+ }
+ if(abs(M2)<Eps0){
+ next
+ }
+ if((M1> 0) && (M2> 0)){
+ next
+ }
+ if((M1< 0) && (M2< 0)){
+ next
+ }
+ Tmp=1/(M1-M2)*(-M2*P1+M1*P2)
+ QL=Appendrow(QL,Tmp)
+ }
+ Uval1=Uval2 #180306(3lines)
+ Eval11=Eval21
+ Eval12=Eval22
+ if(Length(QL)==2){
+ Puv1=Op(1,QL); Puv2=Op(2,QL)
+ Tmp1=Op(1,Puv1)
+ Tmp2=Op(2,Puv1)
+ Xv=Xfunc(Tmp1,Tmp2)
+ Yv=Yfunc(Tmp1,Tmp2)
+ Zv=Zfunc(Tmp1,Tmp2)
+ P1=c(Xv,Yv,Zv)
+ Tmp1=Op(1,Puv2)
+ Tmp2=Op(2,Puv2)
+ Xv=Xfunc(Tmp1,Tmp2)
+ Yv=Yfunc(Tmp1,Tmp2)
+ Zv=Zfunc(Tmp1,Tmp2)
+ P2=c(Xv,Yv,Zv)
+ V1=Vec[1]; V2=Vec[2]; V3=Vec[3]
+ if(abs(V1)>Eps0){
+ M1=PtA[3]+V3/V1*(P1[1]-PtA[1])-P1[3]
+ M2=PtA[3]+V3/V1*(P2[1]-PtA[1])-P2[3]
+ }else if(abs(V2)>Eps0){
+ M1=PtA[3]+V3/V2*(P1[2]-PtA[2])-P1[3]
+ M2=PtA[3]+V3/V2*(P2[2]-PtA[2])-P2[3]
+ }else{
+ M1=PtA[2]-P1[2]
+ M2=PtA[2]-P2[2]
+ }
+ if(M1*M2>= 0){
+ if(((M1>0) && (M2>0)) || ((M1< 0) && (M2< 0))){
+ next
+ }
+ if(M1==0){
+ Pt=P1; Ptuv=Puv1
+ }else{
+ Pt=P2; Ptuv=Puv2
+ }
+ }else{
+ Pt=1/(M1-M2)*(-M2*P1+M1*P2)
+ Ptuv=1/(M1-M2)*(-M2*Puv1+M1*Puv2)
+ }
+ if(is.character(Uveq)){
+ Tmp1=paste('(',sprintf("%6.6f",Ptuv[1]),')',sep='')
+ Tmp2=paste('('+sprintf("%6.6f",Ptuv[2]),')',sep='')
+ Tmp=gsub(UNAME,Tmp1,Uveq,fixed=TRUE)
+ Tmp=gsub(VNAME,Tmp2,Tmp,fixed=TRUE)
+ Tmp=eval(parse(text=Tmp))
+ if(Tmp< -Eps0){
+ next
+ }
+ }
+ Tmp1=Crossprod(Pt-PtA,Vec)
+ if(Norm(Tmp1)<Eps1){ #18.02.19
+ if(Zparapt(Pt)>Zparapt(PtA)+Eps2){
+ return(list(1,Pt,Zparapt(Pt),Zparapt(PtA)))
+ }else{
+ Out=Appendrow(Out,Pt)
+ }
+ }
+ }
+ }
+ }
+ if(Length(Out)==0){
+ return(list(0,c()))
+ }
+ return(c(list(0,Out)))
+}
+
+Nohiddenpara2<- function (Par,Fk,Uveq,Np,Eps1,Eps2){
+ Eps0=10^(-4)
+ Fh=Projpara(Fk)
+ P1=Ptstart(Fh)
+ P2=Ptend(Fh)
+ Csp=CUSPPT
+ if(!is.list(Csp)){Csp=list(Csp)}
+ Cspflg=1
+ for(I in Looprange(1,length(Csp))){
+ Tmp=Op(I,Csp)
+ if(Norm(Tmp-P1)<Eps0){
+ if(Cspflg==1){Cspflg=2}
+ if(Cspflg==3){Cspflg=6}
+ next
+ }
+ if(Norm(Tmp-P2)<Eps0){
+ if(Cspflg==1){Cspflg=3}
+ if(Cspflg==2){Cspflg=6}
+ next
+ }
+ }
+ PaL=c()
+ tmp2=-1
+ for(jj in Looprange(1,length(Par)-1)){
+ tmp1=Op(jj,Par)
+ if(abs(tmp1-tmp2)>Eps0){ #180227
+ PaL=c(PaL,tmp1)
+ tmp2=tmp1
+ }
+ }
+ tmp1=PaL[length(PaL)] #18.02.26from
+ tmp2=Par[length(Par)]
+ if(abs(tmp1-tmp2)<Eps0){ #180227
+ PaL[length(PaL)]=tmp2
+ }else{
+ PaL=c(PaL,tmp2)
+ } #18.02.26to
+ SeL=c()
+ for(N in Looprange(1,length(PaL)-1)){
+ S=(PaL[N]+PaL[N+1])/2
+ Tmp=Invparapt(S,Fh,Fk)
+ PtA=Op(1,Tmp)
+ PtAp=Parapt(PtA)
+ Vec=c(sin(THETA)*cos(PHI),sin(THETA)*sin(PHI),cos(THETA))
+ Flg=PthiddenQ(PtA,Vec,Uveq,Np,Eps1,Eps2)
+ if(Flg[[1]]==0){
+ SeL=c(SeL,N)
+ }
+ }
+ FigL=list()
+ FigkL=list()
+ for(I in Looprange(1,length(SeL))){
+ Tmp1=Pointoncurve(PaL[SeL[I]],Fh)
+ Tmp2=Pointoncurve(PaL[SeL[I]+1],Fh)
+ if(I==1){
+ P=Tmp1; SP=PaL[SeL[I]]
+ Q=Tmp2; SQ=PaL[SeL[I]+1]
+ }else{
+ if(Member(SeL[I]-1,SeL)){
+ Q=Tmp2; SQ=PaL[SeL[I]+1]
+ }else{
+ FigL=c(FigL,list(Partcrv(SP,SQ,Fh)))
+ Tmp3=Invparapt(SP,Fh,Fk)
+ TP=Op(2,Tmp3)
+ Tmp3=Invparapt(SQ,Fh,Fk)
+ TQ=Op(2,Tmp3)
+ Tmp4=Partcrv3(TP,TQ,Fk)
+ FigkL=c(FigkL,list(Tmp4))
+ P=Tmp1; SP=PaL[SeL[I]]
+ Q=Tmp2; SQ=PaL[SeL[I]+1]
+ }
+ }
+ }
+ if(length(SeL)>0){
+ if(Norm(P-Q)>Eps0){ #18.02.14
+ FigL=c(FigL,list(Partcrv(P,Q,Fh)))
+ Tmp3=Invparapt(SP,Fh,Fk)
+ TP=Op(2,Tmp3)
+ Tmp3=Invparapt(SQ,Fh,Fk)
+ TQ=Op(2,Tmp3)
+ FigkL=c(FigkL,list(Partcrv3(TP,TQ,Fk)))
+ }else{
+ FigL=c(FigL,list(Fh))
+ FigkL=c(FigkL,list(Fk))
+ }
+ }
+ if(length(SeL)==0){#181024from
+ Tmp=Looprange(1,length(PaL)-1)
+ }else{ #181024to
+ Tmp=c()
+ for(I in Looprange(1,length(PaL)-1)){
+ if(!Member(I,SeL)){
+ Tmp=c(Tmp,I)
+ }
+ }
+ }
+ SeL=Tmp
+ HIDDENDATA<<- list()
+ for(I in Looprange(1,length(SeL))){
+ Tmp=PaL[SeL[I]]
+ Tmp1=Pointoncurve(Tmp,Fh)
+ Tmp=PaL[SeL[I]+1]
+ Tmp2=Pointoncurve(Tmp,Fh)
+ if(I==1){
+ P=Tmp1; SP=PaL[SeL[I]]
+ Q=Tmp2; SQ=PaL[SeL[I]+1]
+ }else{
+ if(Member(SeL[I]-1,SeL)){
+ Q=Tmp2; SQ=PaL[SeL[I]+1]
+ }else{
+ Tmp=Invparapt(SP,Fh,Fk)
+ TP=Op(2,Tmp)
+ Tmp=Invparapt(SQ,Fh,Fk)
+ TQ=Op(2,Tmp)
+ HIDDENDATA<<- c(HIDDENDATA,list(Partcrv3(TP,TQ,Fk)))
+ P=Tmp1; SP=PaL[SeL[I]]
+ Q=Tmp2; SQ=PaL[SeL[I]+1]
+ }
+ }
+ }
+ if(length(SeL)>0){
+ if(Norm(P-Q)>Eps0){ #18.02.14
+ Tmp=Invparapt(SP,Fh,Fk)
+ TP=Op(2,Tmp)
+ Tmp=Invparapt(SQ,Fh,Fk)
+ TQ=Op(2,Tmp)
+ HIDDENDATA<<- c(HIDDENDATA,list(Partcrv3(TP,TQ,Fk)))
+ }else{
+ HIDDENDATA<<- c(HIDDENDATA,list(Fk))
+ }
+ }
+ return(FigkL)
+}
+
+Borderparadata<- function(...){
+ varargin=list(...)
+ Nargs=length(varargin)
+ FkL=varargin[[1]]
+ Np=c(50,50)
+ Eps1=0.01
+ Eps2=0.05
+ ctr=0
+ for(jj in Looprange(2,Nargs)){
+ tmp=varargin[[jj]]
+ if((length(tmp)>1)||(tmp>1)){
+ Np=tmp
+ if(length(Np)==1){
+ Np=c(Np,Np)
+ }
+ }else{
+ ctr=ctr+1
+ if(ctr==1){Eps1=tmp}
+ if(ctr==2){Eps2=tmp}
+ }
+ }
+ Umin=URNG[1]; Umax=URNG[2]
+ Vmin=VRNG[1]; Vmax=VRNG[2]
+ EkL=list()
+ Tmp=grep("e",DRWS,fixed=TRUE)
+ if(length(Tmp)>0){
+ Tmp1="c("
+ for(jj in 1:3){
+ Tmp=gsub(UNAME,paste("(",sprintf("%7.7f",Umax),")",sep=""),XYZstr[jj])
+ Tmp1=paste(Tmp1,Tmp,",",sep="")
+ }
+ Tmp=substring(Tmp1,1,Length(Tmp1)-1)
+ Tmp1=paste(Tmp,")",sep="")
+ Tmp=sprintf("%6.6f",VRNG)
+ Tmp2=paste(VNAME,"=c(",Tmp[1],",",Tmp[2],")",sep='')
+ Tmp3=paste('N=',as.character(Np[2]),sep="")
+ Tmp=Spacecurve(Tmp1,Tmp2,Tmp3)
+ EkL=c(EkL,list(Tmp))
+ }
+ Tmp=grep("n",DRWS,fixed=TRUE)
+ if(length(Tmp)>0){
+ Tmp1="c("
+ for(jj in 1:3){
+ Tmp=gsub(VNAME,paste("(",sprintf("%7.7f",Vmax),")",sep=""),XYZstr[jj])
+ Tmp1=paste(Tmp1,Tmp,",",sep="")
+ }
+ Tmp=substring(Tmp1,1,Length(Tmp1)-1)
+ Tmp1=paste(Tmp,")",sep="")
+ Tmp=sprintf("%6.6f",URNG)
+ Tmp2=paste(UNAME,"=c(",Tmp[1],",",Tmp[2],")",sep='')
+ Tmp3=paste('N=',as.character(Np[1]),sep="")
+ Tmp=Spacecurve(Tmp1,Tmp2,Tmp3)
+ EkL=c(EkL,list(Tmp))
+ }
+ Tmp=grep("w",DRWS,fixed=TRUE)
+ if(length(Tmp)>0){
+ Tmp1="c("
+ for(jj in 1:3){
+ Tmp=gsub(UNAME,paste("(",sprintf("%7.7f",Umin),")",sep=""),XYZstr[jj])
+ Tmp1=paste(Tmp1,Tmp,",",sep="")
+ }
+ Tmp=substring(Tmp1,1,Length(Tmp1)-1)
+ Tmp1=paste(Tmp,")",sep="")
+ Tmp=sprintf("%6.6f",VRNG)
+ Tmp2=paste(VNAME,"=c(",Tmp[1],",",Tmp[2],")",sep='')
+ Tmp3=paste('N=',as.character(Np[2]))
+ Tmp=Spacecurve(Tmp1,Tmp2,Tmp3)
+ EkL=c(EkL,list(Tmp))
+ }
+ Tmp=grep("s",DRWS,fixed=TRUE)
+ if(length(Tmp)>0){
+ Tmp1="c("
+ for(jj in 1:3){
+ Tmp=gsub(VNAME,paste("(",sprintf("%7.7f",Vmin),")",sep=""),XYZstr[jj])
+ Tmp1=paste(Tmp1,Tmp,",",sep="")
+ }
+ Tmp=substring(Tmp1,1,Length(Tmp1)-1)
+ Tmp1=paste(Tmp,")",sep="")
+ Tmp=sprintf("%6.6f",URNG)
+ Tmp2=paste(UNAME,"=c(",Tmp[1],",",Tmp[2],")",sep='')
+ Tmp3=paste('N=',as.character(Np[1]))
+ Tmp=Spacecurve(Tmp1,Tmp2,Tmp3)
+ EkL=c(EkL,list(Tmp))
+ }
+ if(length(EkL)>0){
+ FkL=c(FkL,EkL)
+ }
+ Fall=Projpara(FkL)
+ if(is.numeric(Fall)){
+ Fall=list(Fall)
+ }
+ Fbdxy=Makexybdy(Np)
+ BORDERPT<<- list()
+ Tmp1=list()
+ for(I in Looprange(1,length(Fall))){
+ Tmp1=c(Tmp1,list(c()))
+ }
+ OTHERPARTITION<<- Tmp1
+ FsL=list()
+ BORDERHIDDENDATA<<- list()
+ starttime=proc.time()
+ for(I in Looprange(1,length(FkL))){
+ Tmp=Op(I,FkL)
+ Tmp=Projpara(Tmp)
+ Par=Partitionseg(Tmp,Fall,Eps1,Eps2,I)
+ Tmp1=Op(I,FkL)
+ Tmp=Nohiddenpara2(Par,Tmp1,1,Np,Eps1,Eps2)
+ if(length(HIDDENDATA)>0){
+ BORDERHIDDENDATA<<- c(BORDERHIDDENDATA,HIDDENDATA)
+ }
+ if(length(Tmp)>0){
+ FsL=c(FsL,Tmp)
+ }
+ Tmp=paste('Border',formatC(I,width=2,flag="0"),'/',sep='')
+ Tmp=paste(Tmp,as.character(length(FkL)),' obtained : Time =',sep='')
+ Tmp1=proc.time()-starttime
+ print(paste(Tmp,sprintf("%6.3f",Tmp1[1]),sep=''))
+ }
+ return(FsL)
+}
+
+Sfbdparadata<- function(...){
+ varargin=list(...)
+ Nargs=length(varargin)
+ Fd=varargin[[1]]
+ FdL=Fullformfunc(Fd)
+ Np=c(50,50)
+ Eps0=10^(-4)
+ Eps1=0.01
+ Eps2=0.05
+ ctr=0
+ for(jj in Looprange(2,Nargs)){
+ tmp=varargin[[jj]]
+ if((length(tmp)>1)||(tmp>1)){
+ Np=tmp
+ if(length(Np)==1){
+ Np=c(Np,Np)
+ }
+ }else{
+ ctr=ctr+1
+ if(ctr==1){Eps1=tmp}
+ if(ctr==2){Eps2=tmp}
+ }
+ }
+ starttime=proc.time()
+ Out3=Envelopedata(Fd) #180306
+ tmp3=list()
+ pts=list() #180306
+ for(jj in Looprange(1,length(Out3))){
+ tmp1=Op(jj,Out3)
+ tmp2=c()
+ for(kk in Looprange(1,Length(tmp1))){
+ tmp=Op(kk,tmp1)
+ tmp2=Appendrow(tmp2,XYZfunc(tmp[1],tmp[2]))
+ }
+ Nlist=Dropnumlistcrv(tmp2,Eps1)
+ Nlist=Nlist[[1]]
+ if(Length(Nlist)==1){ #180306from
+ tmp=Op(1,Nlist)
+ tmp=Op(tmp,tmp1)
+ pts=c(pts,list(tmp))
+ }else{
+ tmp=c()
+ for(kk in Looprange(1,length(Nlist))){
+ tmp=Appendrow(tmp,Op(Nlist[kk],tmp1)) #18.02.18
+ }
+ if(Length(tmp)>0){
+ tmp3=c(tmp3,list(tmp))
+ }
+ }
+ }
+ Out3=tmp3
+ tmp3=pts #180306from
+ pts=list()
+ for(ii in Looprange(1,length(tmp3))){
+ tmp=Op(ii,tmp3)
+ tmp1=XYZfunc(tmp[1],tmp[2])
+ flg=0
+ for(jj in Looprange(1,length(pts))){
+ tmp=Op(jj,pts)
+ tmp2=XYZfunc(tmp[1],tmp[2]) #180517
+ if(Norm(tmp1-tmp2)<Eps1){
+ flg=1; break
+ }
+ }
+ if(flg==0){pts=c(pts,list(Op(ii,tmp3)))}
+ }
+ for(ii in Looprange(1,length(pts))){
+ tmp=Op(ii,pts)
+ tmp1=XYZfunc(tmp[1],tmp[2])
+ for(jj in Looprange(1,length(Out3))){
+ tmp2=Op(jj,Out3)
+ eps=1
+ for(kk in Looprange(1,Length(tmp2)-1)){
+ tmp=Op(kk,tmp2)
+ tmp1=XYZfunc(tmp[1],tmp[2])
+ tmp=Op(kk+1,tmp2)
+ tmp=XYZfunc(tmp[1],tmp[2])
+ eps=min(c(eps,Norm(tmp1-tmp)))
+ }
+ tmp=Ptstart(tmp2)
+ if(Norm(tmp1-XYZfunc(tmp[1],tmp[2]))<eps+Eps0){
+ Out3[[jj]]=Appendrow(Op(ii,pts),tmp2)
+ next
+ }
+ tmp=Ptend(tmp2)
+ if(Norm(tmp1-XYZfunc(tmp[1],tmp[2]))<eps+Eps0){
+ Out3[[jj]]=Appendrow(tmp2,Op(ii,pts))
+ next
+ }
+ }
+ } #180306to
+ IMPLICITDATA<<- Out3
+ Tmp=proc.time()-starttime
+ print(paste('ImplicitData obtained : Time =',sprintf("%6.3f",Tmp[1]),sep=''))
+ starttime=proc.time()
+ Out4=Cuspsplitpara(Out3,Eps1)
+ CUSPDATA<<- Out4
+ CUSPPT<<- CUSPSPLITPT
+ Tmp=proc.time()-starttime
+ print(paste('CuspData obtained : Time =',sprintf("%6.3f",Tmp[1]),sep=''))
+ Out5=Borderparadata(Out4,Np,Eps1,Eps2)
+ return(Out5)
+}
+
+Meetpoints<- function(PtA,PtB,Uveq,Np,Eps1){
+ Eps0=10^(-4)
+ Vec=PtB-PtA
+ if(Norm(Vec)<Eps0){return(list())} #18.02.24
+ Out=list()
+ Vec=1/Norm(Vec)*Vec
+ if(length(Np)==1){
+ Np=c(Np,Np)
+ }
+ Tmp=paste("Eqfun<- function(U,V){",sep='')
+ if((abs(Vec[2])>Eps0) || (abs(Vec[1])>Eps0)){
+ Vstr=sprintf("%6.6f",Vec)
+ Pstr=sprintf("%6.6f",PtA)
+ Tmp=paste(Tmp,"(",Vstr[2],")*(Xfunc(U,V)-(",Pstr[1],"))",sep='')
+ Tmp=paste(Tmp,"-(",Vstr[1],")*(Yfunc(U,V)-(",Pstr[2],"))}",sep='')
+ }else{
+ Tmp=paste(Tmp,"Xfunc(U,V)}",sep='')
+ }
+ eval(parse(text=Tmp))
+ Dx=(URNG[2]-URNG[1])/Np[1]
+ Dy=(VRNG[2]-VRNG[1])/Np[2]
+ for(J in Looprange(1,Np[2])){
+ Vval1=VRNG[1]+(J-1)*Dy
+ Vval2=VRNG[1]+J*Dy
+ Uval1=URNG[1] #180305(3lines)
+ Eval11=Eqfun(Uval1,Vval1)
+ Eval12=Eqfun(Uval1,Vval2)
+ for(I in Looprange(1,Np[1])){
+ Uval2=URNG[1]+I*Dx
+ Eval21=Eqfun(Uval2,Vval1)
+ Eval22=Eqfun(Uval2,Vval2)
+ a1=Uval1;b1=Vval1;c1=Eval11
+ a2=Uval2;b2=Vval1;c2=Eval21
+ a3=Uval2;b3=Vval2;c3=Eval22
+ a4=Uval1;b4=Vval2;c4=Eval12
+ PL=matrix(c(a1,b1,a2,b2,a3,b3,a4,b4,a1,b1),ncol=2,byrow=TRUE)
+ VL=c(c1,c2,c3,c4,c1)
+ QL=c()
+ for(K in 1:4){
+ P1=Op(K,PL); P2=Op(K+1,PL)
+ M1=Op(K,VL); M2=Op(K+1,VL)
+ if(abs(M1)<Eps0){
+ QL=Appendrow(QL,P1)
+ next
+ }
+ if(abs(M2)<Eps0){
+ next
+ }
+ if((M1> 0) && (M2> 0)){
+ next
+ }
+ if((M1< 0) && (M2< 0)){
+ next
+ }
+ Tmp=1/(M1-M2)*(-M2*P1+M1*P2)
+ QL=Appendrow(QL,Tmp)
+ }
+ Uval1=Uval2 #180306(3lines)
+ Eval11=Eval21
+ Eval12=Eval22
+ if(Length(QL)==2){
+ Puv1=Op(1,QL); Puv2=Op(2,QL)
+ Tmp1=Op(1,Puv1)
+ Tmp2=Op(2,Puv1)
+ Xv=Xfunc(Tmp1,Tmp2)
+ Yv=Yfunc(Tmp1,Tmp2)
+ Zv=Zfunc(Tmp1,Tmp2)
+ P1=c(Xv,Yv,Zv)
+ Tmp1=Op(1,Puv2)
+ Tmp2=Op(2,Puv2)
+ Xv=Xfunc(Tmp1,Tmp2)
+ Yv=Yfunc(Tmp1,Tmp2)
+ Zv=Zfunc(Tmp1,Tmp2)
+ P2=c(Xv,Yv,Zv)
+ V1=Vec[1]; V2=Vec[2]; V3=Vec[3]
+ if(abs(V1)>Eps0){
+ M1=PtA[3]+V3/V1*(P1[1]-PtA[1])-P1[3]
+ M2=PtA[3]+V3/V1*(P2[1]-PtA[1])-P2[3]
+ }else if(abs(V2)>Eps0){
+ M1=PtA[3]+V3/V2*(P1[2]-PtA[2])-P1[3]
+ M2=PtA[3]+V3/V2*(P2[2]-PtA[2])-P2[3]
+ }else{
+ M1=PtA[2]-P1[2]
+ M2=PtA[2]-P2[2]
+ }
+ if(M1*M2>= 0){ #18.02.21
+ if(((M1>0) && (M2>0)) || ((M1< 0) && (M2< 0))){
+ next
+ }
+ if(M1==0){
+ Pt=P1; Ptuv=Puv1
+ }else{
+ Pt=P2; Ptuv=Puv2
+ }
+ }else{
+ Pt=1/(M1-M2)*(-M2*P1+M1*P2)
+ Ptuv=1/(M1-M2)*(-M2*Puv1+M1*Puv2)
+ }
+ if(is.character(Uveq)){
+ Tmp1=paste('(',sprintf("%6.6f",Ptuv[1]),')',sep='')
+ Tmp2=paste('('+sprintf("%6.6f",Ptuv[2]),')',sep='')
+ Tmp=gsub(UNAME,Tmp1,Uveq,fixed=TRUE)
+ Tmp=gsub(VNAME,Tmp2,Tmp,fixed=TRUE)
+ Tmp=eval(parse(text=Tmp))
+ if(Tmp< -Eps0){
+ next
+ }
+ }
+ Tmp1=Crossprod(Pt-PtA,Vec)
+ if(Norm(Tmp1)<Eps1){ #18.02.19
+ Tmp1=Dotprod(Pt-PtA,Vec) #18.02.21
+ if((Tmp1>-Eps0)&&(Norm(Pt-PtA)<Norm(PtB-PtA)+Eps0)){#180429
+ Out=c(Out,list(Pt))
+ }
+ }
+ }
+ }
+ }
+ tmp1=Groupnearpt(Out,Eps1)
+ Out=list()
+ for(jj in Looprange(1,length(tmp1))){
+ tmp=Op(jj,tmp1)
+ tmp=c(sum(tmp[,1]),sum(tmp[,2]),sum(tmp[,3]))/Length(tmp)
+ Out=c(Out,list(tmp))
+ }
+ return(Out)
+}
+
+Clipindomain<- function(ObjL,FigL){
+ Eps0=10^(-4)
+ Eps1=0.01
+ Eps2=0.05
+ Bdy=Kyoukai(FigL)
+ if(length(Bdy)>=2){
+ Fbdy=Joincrvs(FigL)
+ }else{
+ Fbdy=Op(1,FigL)
+ }
+ if(!is.list(ObjL)){
+ ObjL=list(ObjL)
+ }
+ if(!is.list(FigL)){
+ FigL=list(FigL)
+ }
+ OutL=list()
+ for(Nobj in Looprange(1,length(ObjL))){
+ Obj=Op(Nobj,ObjL)
+ ParL=c(1,Length(Obj))
+ Tmp=IntersectcurvesPp(Obj,Fbdy,Eps1,Eps2)
+ for(J in Looprange(1,length(Tmp))){
+ Tmp1=Op(J,Tmp)
+ ParL=c(ParL,Op(2,Tmp1))
+ }
+ ParL=sort(ParL)
+ Tmp=c(1)
+ for(I in Looprange(1,length(ParL))){
+ Tmp1=Op(length(Tmp),Tmp)
+ Tmp2=ParL[I]
+ if(Tmp2-Tmp1>Eps0){
+ Tmp=c(Tmp,Tmp2)
+ }
+ }
+ ParL=Tmp
+ Tmp1=Op(length(ParL),ParL)
+ Tmp2=Length(Obj)
+ if(abs(Tmp1-Tmp2)<Eps1){
+ ParL=c(ParL[Looprange(1,length(ParL)-1)],Tmp2)
+ }
+ Fig=list()
+ for(N in Looprange(1,length(ParL)-1)){
+ Tmp=(ParL[N]+ParL[N+1])*0.5
+ Tmp=Pointoncurve(Tmp,Obj)
+ Tmp=Naigai(Tmp,Bdy)
+ Tmp1=sum(Tmp)%%2
+ if(Tmp1==0){
+ next
+ }
+ Fig=c(Fig,list(Partcrv(ParL[N],ParL[N+1],Obj)))
+ }
+ OutL=c(OutL,Fig)
+ }
+ return(OutL)
+}
+
+Crvsfparadata<- function(...){
+ starttime=proc.time()
+ varargin=list(...)
+ Nargs=length(varargin)
+ Sepflg=0
+ Tmp=varargin[[Nargs]]
+ if((is.numeric(Tmp))&&(Tmp<=0)){
+ Sepflg=1
+ Nargs=Nargs-1
+ }
+ Fk=varargin[[1]]
+ if(!is.list(Fk)){
+ FkL=list(Fk)
+ }else{
+ FkL=Fk
+ }
+ Fbdy=Projpara(varargin[[2]])
+ Fd=varargin[[3]];
+ Fullformfunc(Fd) #18.02.17
+ Np=c(50,50)
+ Eps0=10^(-4)
+ Eps1=0.01
+ Eps2=0.05
+ ctr=0
+ for(jj in Looprange(4,Nargs)){
+ tmp=varargin[[jj]]
+ if((length(tmp)>1)||(tmp>1)){
+ Np=tmp
+ if(length(Np)==1){
+ Np=c(Np,Np)
+ }
+ }else{
+ ctr=ctr+1
+ if(ctr==1){Eps1=tmp}
+ if(ctr==2){Eps2=tmp}
+ }
+ }
+ Out=list()
+ CRVSFHIDDENDATA<<- list()
+ for(Nn in Looprange(1,length(FkL))){
+ Fk=Op(Nn,FkL)
+ Tmp=Projpara(Fk)
+ Par=Partitionseg(Tmp,Fbdy,Eps1,Eps2,0)
+ if(Sepflg==0){
+ for(I in Looprange(1,Length(Fk)-1)){
+ Pa=Op(I,Fk)
+ Pb=Op(I+1,Fk)
+ PtL=Meetpoints(Pa,Pb,1,Np,Eps1)
+ for(J in Looprange(1,Length(PtL))){
+ Tmp=Op(J,PtL)
+ Tmp=Parapt(Tmp)
+ Tmp1=Paramoncurve(Tmp,I,Projpara(Fk))
+ Tmp2=min(abs(Par-Tmp1))
+ if(Tmp2*Norm(Parapt(Pb-Pa))>Eps0) { #180227
+ Par=c(Par,Tmp1)
+ }
+ }
+ Par=sort(Par)
+ }
+ }
+ for(jj in Looprange(1,length(ADDPOINT))){ #18.02.19from
+ tmp=Parapt(Op(jj,ADDPOINT))
+ tmp=Nearestpt(tmp,Projpara(Fk))
+ if(tmp[[3]]<Eps1){
+ Par=c(Par,tmp[[2]])
+ }
+ } #18.02.19until
+ tmp1=sort(Par)
+ Par=c()
+ tmp2=-1
+ for(jj in Looprange(1,length(tmp1))){
+ tmp=Op(jj,tmp1)
+ if(abs(tmp-tmp2)>Eps0){ #180227
+ Par=c(Par,tmp)
+ tmp2=tmp
+ }
+ }
+ Tmp1=Nohiddenpara2(Par,Fk,1,Np,Eps1,Eps2)
+ Out=c(Out,Tmp1)
+ CRVSFHIDDENDATA<<- c(CRVSFHIDDENDATA,HIDDENDATA)
+ Tmp=paste('Crvsfdata',formatC(Nn,width=2,flag="0"),'/',sep='')
+ Tmp=paste(Tmp,as.character(length(FkL)),' obtained : Time =',sep='')
+ Tmp1=proc.time()-starttime
+ print(paste(Tmp,sprintf("%6.3f",Tmp1[1]),sep=''))
+ }
+ return(Out)
+}
+
+Crv3onsfparadata<- function(...){
+ starttime=proc.time()
+ varargin=list(...)
+ Nargs=length(varargin)
+ Fk=varargin[[1]]
+ if(!is.list(Fk)){
+ FkL=list(Fk)
+ }else{
+ FkL=Fk
+ }
+ Fbdy=Projpara(varargin[[2]])
+ Fd=varargin[[3]]
+ Fullformfunc(Fd) #18.02.17
+ Np=c(50,50)
+ Eps1=0.01
+ Eps2=0.05
+ ctr=0
+ for(jj in Looprange(4,Nargs)){
+ tmp=varargin[[jj]]
+ if((length(tmp)>1)||(tmp>1)){
+ Np=tmp
+ if(length(Np)==1){
+ Np=c(Np,Np)
+ }
+ }else{
+ ctr=ctr+1
+ if(ctr==1){Eps1=tmp}
+ if(ctr==2){Eps2=tmp}
+ }
+ }
+ Out=list()
+ CRVONSFHIDDENDATA<<- list()
+ for(Nn in Looprange(1,length(FkL))){
+ Fk=Op(Nn,FkL)
+ Tmp=Projpara(Fk)
+ Par=Partitionseg(Tmp,Fbdy,Eps1,Eps2,0)
+ for(jj in Looprange(1,length(ADDPOINT))){
+ tmp=Parapt(Op(jj,ADDPOINT))
+ tmp=Nearestpt(tmp,Projpara(Fk))
+ if(tmp[[3]]<Eps1){
+ Par=c(Par,tmp[[2]])
+ }
+ }
+ Par=sort(Par)
+ Tmp1=Nohiddenpara2(Par,Fk,1,Np,Eps1,Eps2)
+ Out=c(Out,Tmp1)
+ CRVONSFHIDDENDATA<<- c(CRVONSFHIDDENDATA,HIDDENDATA)
+ Tmp=paste('Crvonsfdata',formatC(Nn,width=2,flag="0"),'/',sep='')
+ Tmp=paste(Tmp,as.character(length(FkL)),' obtained : Time =',sep='')
+ Tmp1=proc.time()-starttime
+ print(paste(Tmp,sprintf("%6.3f",Tmp1[1]),sep=''))
+ }
+ return(Out)
+}
+
+Crv2onsfparadata<- function(...){
+ starttime=proc.time()
+ varargin=list(...)
+ Nargs=length(varargin)
+ Fuv=varargin[[1]]
+ Fbdy3=varargin[[2]]
+ Fd=varargin[[3]]
+ Fullformfunc(Fd)
+ if(!is.list(Fuv)){
+ Fuv=list(Fuv)
+ }
+ FkL=list()
+ for(jj in Looprange(1,length(Fuv))){
+ tmp1=Op(jj,Fuv)
+ tmp2=c()
+ for(kk in Looprange(1,Length(tmp1))){
+ tmp=Op(kk,tmp1)
+ tmp2=Appendrow(tmp2,XYZfunc(tmp[1],tmp[2]))
+ }
+ FkL=c(FkL,list(tmp2))
+ }
+ Np=c(50,50)
+ Eps1=0.01
+ Eps2=0.05
+ ctr=0
+ for(jj in Looprange(4,Nargs)){
+ tmp=varargin[[jj]]
+ if((length(tmp)>1)||(tmp>1)){
+ Np=tmp
+ if(length(Np)==1){
+ Np=c(Np,Np)
+ }
+ }else{
+ ctr=ctr+1
+ if(ctr==1){Eps1=tmp}
+ if(ctr==2){Eps2=tmp}
+ }
+ }
+ Out=Crv3onsfparadata(FkL,Fbdy3,Fd,Np,Eps1,Eps2)
+ return(Out)
+}
+
+Wireparadata<- function(...){
+ starttime=proc.time()
+ varargin=list(...)
+ Nargs=length(varargin)
+ Fbdy3=varargin[[1]]
+ Fd=varargin[[2]]
+ FdL=Fullformfunc(Fd)
+ DuL=varargin[[3]]
+ DvL=varargin[[4]]
+ Np=c(50,50)
+ Eps1=0.01
+ Eps2=0.1
+ ctr=0
+ for(jj in Looprange(5,Nargs)){
+ tmp=varargin[[jj]]
+ if((length(tmp)>1)||(tmp>1)){
+ Np=tmp
+ if(length(Np)==1){
+ Np=c(Np,Np)
+ }
+ }else{
+ ctr=ctr+1
+ if(ctr==1){Eps1=tmp}
+ if(ctr==2){Eps2=tmp}
+ }
+ }
+ if(!is.list(DuL)){ #181024
+ tmp1=DuL
+ DuL=list()
+ for(jj in Looprange(1,tmp1)){
+ tmp=jj*(URNG[2]-URNG[1])/(tmp1+1)
+ DuL=c(DuL,list(tmp))
+ }
+ }
+ if(!is.list(DvL)){ #181024
+ tmp1=DvL
+ DvL=list()
+ for(jj in Looprange(1,tmp1)){
+ tmp=jj*(VRNG[2]-VRNG[1])/(tmp1+1)
+ DvL=c(DvL,list(tmp))
+ }
+ }
+ Fuv=list()
+ for(jj in Looprange(1,length(DuL))){
+ tmp1=paste("c(",as.character(Op(jj,DuL)),",",VNAME,")",sep="")
+ tmp2=paste("N=",as.character(Np[2]),sep="")
+ tmp1=Paramplot(tmp1,Op(6,FdL),tmp2)
+ tmp2=c()
+ for(kk in Looprange(1,Length(tmp1))){
+ tmp=Op(kk,tmp1)
+ tmp2=Appendrow(tmp2,tmp)
+ }
+ Fuv=c(Fuv,list(tmp2))
+ }
+ FkL=list()
+ for(jj in Looprange(1,length(Fuv))){
+ tmp1=Op(jj,Fuv)
+ tmp2=c()
+ for(kk in Looprange(1,Length(tmp1))){
+ tmp=Op(kk,tmp1)
+ tmp2=Appendrow(tmp2,XYZfunc(tmp[1],tmp[2]))
+ }
+ FkL=c(FkL,list(tmp2))
+ }
+ Tmp1=proc.time()-starttime
+ cat(UNAME,"direction started","\n")
+ Out1=Crv3onsfparadata(FkL,Fbdy3,Fd,Np,Eps1,Eps2)
+ WIREHIDDENDATA<<- CRVONSFHIDDENDATA
+ Fuv=list()
+ for(jj in Looprange(1,length(DvL))){
+ tmp1=paste("c(",UNAME,",",as.character(Op(jj,DvL)),")",sep="")
+ tmp2=paste("N=",as.character(Np[2]),sep="")
+ tmp1=Paramplot(tmp1,Op(5,FdL),tmp2)
+ tmp2=c()
+ for(kk in Looprange(1,Length(tmp1))){
+ tmp=Op(kk,tmp1)
+ tmp2=Appendrow(tmp2,tmp)
+ }
+ Fuv=c(Fuv,list(tmp2))
+ }
+ FkL=list()
+ for(jj in Looprange(1,length(Fuv))){
+ tmp1=Op(jj,Fuv)
+ tmp2=c()
+ for(kk in Looprange(1,Length(tmp1))){
+ tmp=Op(kk,tmp1)
+ tmp2=Appendrow(tmp2,XYZfunc(tmp[1],tmp[2]))
+ }
+ FkL=c(FkL,list(tmp2))
+ }
+ cat(VNAME,"direction started","\n")
+ Out2=Crv3onsfparadata(FkL,Fbdy3,Fd,Np,Eps1,Eps2)
+ WIREHIDDENDATA<<- c(WIREHIDDENDATA, CRVONSFHIDDENDATA)
+ Out=c(Out1,Out2)
+ return(Out)
+}
+
+Intersectcrvsf<- function(...){
+ # bdyeq is the equation of boundary f(x,y,z) =0
+ starttime=proc.time()
+ varargin=list(...)
+ Nargs=length(varargin)
+ crv=varargin[[1]]
+ Fd=varargin[[2]]
+ Fullformfunc(Fd)
+ bdyflg=0
+ bdyeq=varargin[[Nargs]]
+ if(is.character(bdyeq)){
+ Nargs=Nargs-1
+ bdyflg=1
+ tmp=strsplit(bdyeq,"=",fixed=TRUE)
+ tmp=tmp[[1]]
+ if(length(tmp)>1){
+ bdyeq=paste("(",tmp[1],")-(",tmp[2],")",sep="")
+ }
+ tmp=paste("bdyeq<- function(P){x=P[1];y=P[2];z=P[3];",bdyeq,"}",sep="")
+ eval(parse(text=tmp))
+ }
+ Eps0=10^(-4)
+ Np=c(50,50)
+ Eps1=0.01
+ Eps2=0.05
+ ctr=0
+ for(jj in Looprange(3,Nargs)){
+ tmp=varargin[[jj]]
+ if((length(tmp)>1)||(tmp>1)){
+ Np=tmp
+ if(length(Np)==1){
+ Np=c(Np,Np)
+ }
+ }else{
+ ctr=ctr+1
+ if(ctr==1){Eps1=tmp}
+ if(ctr==2){Eps2=tmp}
+ }
+ }
+ PtL=list()
+ for(I in Looprange(1,Length(crv)-1)){
+ Pa=Op(I,crv)
+ Pb=Op(I+1,crv)
+ if(bdyflg==0){
+ tmp=Meetpoints(Pa,Pb,1,Np,Eps1)
+ }else{
+ M1=bdyeq(Pa); M2=bdyeq(Pb)
+ if(M1*M2>= 0){ #18.02.21
+ if(((M1>0) && (M2>0)) || ((M1< 0) && (M2< 0))){
+ next
+ }
+ if(M1==0){
+ tmp=list(Pa)
+ }else{
+ tmp=list(Pb)
+ }
+ }else{
+ while(Norm(Pb-Pa)>Eps0){
+ if(bdyeq(Pa)==0){
+ tmp=list(Pa)
+ break
+ }
+ if(bdyeq(Pa)*bdyeq((Pa+Pb)/2)>0){
+ Pa=(Pa+Pb)/2
+ }else{
+ Pb=(Pa+Pb)/2
+ }
+ }
+ tmp=list(1/(M1-M2)*(-M2*Pa+M1*Pb))
+ }
+ }
+ PtL=c(PtL,tmp)
+ }
+ Tmp=paste('Intersectcrvsf obtained : Time =',sep='')
+ Tmp1=proc.time()-starttime
+ print(paste(Tmp,sprintf("%6.3f",Tmp1[1]),sep=''))
+ return(PtL)
+}
+
+Sfcutparadata<- function(...){
+ varargin=list(...)
+ Nargs=length(varargin)
+ CutD=varargin[[1]]
+ Fbdy3=varargin[[2]]
+ Fd=varargin[[3]]
+ FdL=Fullformfunc(Fd)
+ Np=c(50,50)
+ Eps0=10^(-4)
+ Eps1=0.01
+ Eps2=0.05
+ ctr=0
+ for(jj in Looprange(4,Nargs)){
+ Tmp=varargin[[jj]]
+ if((length(Tmp)>1)||(Tmp>1)){
+ Np=Tmp
+ if(length(Np)==1){
+ Np=c(Np,Np)
+ }
+ }else{
+ ctr=ctr+1
+ if(ctr==1){Eps1=Tmp}
+ if(ctr==2){Eps2=Tmp}
+ }
+ }
+ starttime=proc.time()
+ Tmp=strsplit(CutD,'=')
+ Tmp=Tmp[[1]]
+ if(length(Tmp)==1){
+ Eq=CutD
+ }else{
+ Eq=paste("(",Tmp[1],")-(",Tmp[2],")",sep="")
+ }
+ Eq=gsub("x","Xfunc(U,V)",Eq,fixed=TRUE)
+ Eq=gsub("y","Yfunc(U,V)",Eq,fixed=TRUE)
+ Eq=gsub("z","Zfunc(U,V)",Eq,fixed=TRUE)
+ Tmp=paste("Eqfun<<- function(U,V){",Eq,"}",sep="")
+ eval(parse(text=Tmp))
+ Du=(URNG[2]-URNG[1])/Np[1]
+ Dv=(VRNG[2]-VRNG[1])/Np[2]
+ Out=list();Out2=list()
+ for(J in Looprange(1,Np[2])){
+ Vval1=VRNG[1]+(J-1)*Dv
+ Vval2=VRNG[1]+J*Dv
+ Uval1=URNG[1] #180305(3lines)
+ Eval11=Eqfun(Uval1,Vval1)
+ Eval12=Eqfun(Uval1,Vval2)
+ for(I in Looprange(1,Np[1])){
+ Uval2=URNG[1]+I*Du
+ Eval21=Eqfun(Uval2,Vval1)
+ Eval22=Eqfun(Uval2,Vval2)
+ a1=Uval1;b1=Vval1;c1=Eval11
+ a2=Uval2;b2=Vval1;c2=Eval21
+ a3=Uval2;b3=Vval2;c3=Eval22
+ a4=Uval1;b4=Vval2;c4=Eval12
+ PL=matrix(c(a1,b1,a2,b2,a3,b3,a4,b4,a1,b1),ncol=2,byrow=TRUE)
+ VL=c(c1,c2,c3,c4,c1)
+ QL=c()
+ for(K in 1:4){
+ P1=Op(K,PL); P2=Op(K+1,PL)
+ M1=Op(K,VL); M2=Op(K+1,VL)
+ if(abs(M1)<Eps0){
+ QL=Appendrow(QL,P1)
+ next
+ }
+ if(abs(M2)<Eps0){
+ next
+ }
+ if((M1> 0) && (M2> 0)){
+ next
+ }
+ if((M1< 0) && (M2< 0)){
+ next
+ }
+ Tmp=1/(M1-M2)*(-M2*P1+M1*P2)
+ QL=Appendrow(QL,Tmp)
+ }
+ Uval1=Uval2 #180306(3lines)
+ Eval11=Eval21
+ Eval12=Eval22
+ if(Length(QL)==2){
+ q11=QL[1,1];q12=QL[1,2];q21=QL[2,1];q22=QL[2,2]
+ if(((q11==a1)&&(q21==a1))||((q11==a3)&&(q21==a3))){
+ if(((q21==b1)&&(q22==b1))||((q21==b3)&&(q22==b3))){
+ Out2=c(Out2,list(QL))
+ }else{
+ Out=c(Out,list(QL))
+ }
+ next
+ }
+ if(((q12==b1)&&(q22==b1))||((q12==b3)&&(q22==b3))){
+ if(((q11==a1)&&(q21==a1))||((q11==a3)&&(q21==a3))){
+ Out2=c(Out2,list(QL))
+ }else{
+ Out=c(Out,list(QL))
+ }
+ next
+ }
+ Out=c(Out,list(QL))
+ }
+ }
+ }
+ while(length(Out2)>0){
+ tmp1=Out2[[1]]
+ Out=c(Out,list(tmp1))
+ Out2=Out2[-1]
+ rmv=c()
+ for(jj in Looprange(1,length(Out2))){
+ tmp2=Out2[[jj]]
+ diff1=Norm(tmp2[1,]-tmp1[1,])+Norm(tmp2[2,]-tmp1[2,])
+ diff2=Norm(tmp2[1,]-tmp1[2,])+Norm(tmp2[2,]-tmp1[1,])
+ if((diff1<Eps0)||(diff2<Eps0)){
+ rmv=c(rmv,jj)
+ next
+ }
+ }
+ Out2=Out2[-rmv]
+ }
+ Out=Connectseg(Out,Eps1)
+ Tmp1=Out
+ Out=list()
+ for(ii in Looprange(1,length(Tmp1))){
+ Tmp2=Op(ii,Tmp1)
+ Tmp3=c()
+ for(jj in Looprange(1,Length(Tmp2))){
+ Tmp=Op(jj,Tmp2)
+ Tmp=XYZfunc(Tmp[1],Tmp[2])
+ if(Length(Tmp3)>0){
+ if(Norm(Op(Length(Tmp3),Tmp3)-Tmp)<Eps1){next}
+ }
+ Tmp3=Appendrow(Tmp3,Tmp)
+ }
+ Out=c(Out,list(Tmp3))
+ }
+ Out=Crv3onsfparadata(Out,Fbdy3,Fd,Np,Eps1,Eps2)
+ return(Out)
+}
diff --git a/graphics/ketcindy/ketcindyfolder/scripts/ketlib/ketpiccurrent_rep2e.r b/graphics/ketcindy/ketcindyfolder/scripts/ketlib/ketpiccurrent_rep2e.r
new file mode 100755
index 0000000000..084f94c70c
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/scripts/ketlib/ketpiccurrent_rep2e.r
@@ -0,0 +1,531 @@
+# Copyright (C) 2014 Setsuo Takato, KETCindy Japan project team
+#
+#This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>
+
+
+#########################################
+
+ThisVersion<- "2ev5_2_4(190405)"
+
+# 20190405
+# Drwpt debugged/changed ( Incolor )
+# 20181230
+# Drwpt changed ( Inside )
+# 20180930
+# Drwpt debugged ( the last newline added)
+# 20180929
+# Shade changed (Kyoukai => Joincrvs)
+# 2017.10.28
+# Drwpt debugged ( Flattenlist )
+# 2017.10.07
+# Dottedline,Drwline,Drwpt,Makehasen,Beginpicture,Setpen,Shade
+
+#############################################
+
+Dottedline<- function(...)
+{
+ varargin <- list(...)
+ Nall <- length(varargin)
+ Nagasa <- 0.1
+ Ookisa <- PenThick*2 #17.10.07
+ I <- Nall
+ Tmp <- varargin[[I]]
+ while (mode(Tmp)=="numeric" && length(Tmp)==1 ) {
+ I <- I-1
+ Tmp <- varargin[[I]]
+ }
+ if (I==Nall-1) {
+ Nagasa<-Nagasa*varargin[[Nall]]
+ Nall <- Nall-1
+ }
+ if (I==Nall-2) {
+ Nagasa <- Nagasa*varargin[[Nall-1]]
+ Ookisa <- round(Ookisa*varargin[[Nall]])
+ Nall <- Nall-2
+ }
+ Nagasa <- 1000/2.54/MilliIn*Nagasa
+ Ra=Ookisa/MilliIn
+ for (N in 1:Nall) {
+ Pdata <- varargin[[N]]
+ if (mode(Pdata)=="numeric") {
+ Pdata <- list(Pdata)
+ }
+ for (II in 1:length(Pdata)) {
+ Clist <- MakeCurves(Op(II,Pdata))
+ DinM <- Dataindex(Clist)
+ Mojisu=0
+ for (n in Looprange(1,Nrow(DinM))) {
+ Tmp <- DinM[n,]
+ Data <- Clist[Tmp[1]:Tmp[2],]
+ Len <- 0
+ Lenlist <- c(0)
+ for (I in Looprange(2,Nrow(Data))) {
+ Len <- Len+Norm(Data[I,]-Data[I-1,])
+ Lenlist <- c(Lenlist,Len)
+ }
+ Lenall <- Lenlist[length(Lenlist)]
+ if (Lenall==0) {
+ next
+ }
+ Naga <- Nagasa
+ Nten <- round(Lenall/Naga)+1
+ if (Nten > 1) {
+ Seg <- Lenall/(Nten-1)
+ }
+ else {
+ Seg <- Lenall
+ }
+ Eps <- 10^(-6)*Seg
+ PPd<-c()
+ Hajime <- 1
+ for (I in Looprange(0,Nten-1)) {
+ Len <- Seg*I
+ if (I>0) {
+ J <- Hajime
+ while( Len>=Lenlist[J]+Eps) {
+ J <- J+1
+ }
+ Hajime <- J-1
+ }
+ T <- (Len-Lenlist[Hajime])/
+ (Lenlist[Hajime+1]-Lenlist[Hajime])
+ P <- Data[Hajime,]+T*(Data[Hajime+1,]-Data[Hajime,])
+ PPd<-Appendrow(PPd,P)
+ if (I==Nten-1) {
+ if (Norm(P-Data[1,])<Eps) {
+ next
+ }
+ }
+ }
+ for (I in Looprange(1,Nrow(PPd))){
+ P<- Op(I,PPd)
+ if (Nrow(PPd)==1){
+ V<- c(1,0)
+ }
+ else if (I==1){
+ Tmp<- Op(I+1,PPd)-P
+ V<- 1/Norm(Tmp)*Tmp
+ }
+ else if (I==Nrow(PPd)){
+ Tmp<- P-Op(I-1,PPd)
+ V<- 1/Norm(Tmp)*Tmp
+ }
+ else{
+ Tmp1<- Op(I+1,PPd)-P
+ Tmp2<- P-Op(I-1,PPd)
+ Tmp3<-1/Norm(Tmp1)*Tmp1+1/Norm(Tmp2)*Tmp2
+ V<- 1/Norm(Tmp3)*Tmp3
+ }
+ X=sprintf('%5.5f',P[1])
+ Y=sprintf('%5.5f',P[2])
+ Str=paste('\\put(',X,',',Y,'){\\circle*{',sprintf('%6.6f',Ra),'}}',sep="")
+ cat(Str,file=Wfile,append=TRUE)
+ Mojisu=Mojisu+nchar(Str)
+ if(Mojisu>80){
+ cat("\n",file=Wfile,append=TRUE)
+ Mojisu=0
+ }
+ }
+ }
+ }
+ if(Mojisu>0){
+ cat("\n",file=Wfile,append=TRUE)
+ }
+ }
+ Tmp<-PenThick/PenThickInit
+ Setpen(Tmp)
+}
+
+
+###########################################
+
+Drwline<-function(...)
+{
+ varargin<-list(...)
+ Nall<-length(varargin)
+ Thick<-0
+ Tmp<-varargin[[Nall]]
+ if (mode(Tmp)=="numeric" && length(Tmp)==1){
+ Setpen(Tmp)
+ Nall<-Nall-1
+ }
+ for (N in 1:Nall){
+ Pdata<-varargin[[N]]
+ if (length(Pdata)==0) next
+ if (mode(Pdata)!="list") Pdata<-list(Pdata)
+ while(Mixtype(Pdata)==3){
+ Tmp1<- list()
+ for(II in Looprange(1,length(Pdata))){
+ Tmp1<- Mixjoin(Tmp1,Pdata[[II]])
+ }
+ Pdata<- Tmp1
+ }
+ for (II in Looprange(1,length(Pdata))){
+ Clist<-MakeCurves(Pdata[[II]])
+ DinM<-Dataindex(Clist)
+ for (n in Looprange(1,Nrow(DinM))){
+ Tmp<-DinM[n,]
+ Data<-Clist[Tmp[1]:Tmp[2],]
+ Mojisu<-0
+ for (I in Looprange(1,Nrow(Data))){
+ Tmp<-Data[I,]
+ X=sprintf('%5.5f',Tmp[1])
+ Y=sprintf('%5.5f',Tmp[2])
+ Pt=paste('(',X,',',Y,')',sep="")
+ if(I==1){
+ Str=paste('\\polyline',Pt,sep="")
+ }else{
+ Str=Pt
+ }
+ cat(Str,file=Wfile,append=TRUE)
+ Mojisu<-Mojisu+nchar(Str)
+ if (Mojisu>80){
+ cat("%\n",file=Wfile,append=TRUE)
+ Mojisu<-0
+ }
+ }
+ if (Mojisu!=0){
+ cat("%\n",file=Wfile,append=TRUE)
+ }
+ cat("%\n",file=Wfile,append=TRUE)
+ }
+ }
+ }
+ if (Thick>0){
+ Tmp<-PenThick/PenThickInit
+ Setpen(Tmp)
+ }
+}
+
+###########################################
+
+Drwpt<-function(...) #190405
+{
+ varargin<-list(...)
+ Nargs<-length(varargin)
+ All=Nargs
+ Same="y"
+ Incolor=""
+ Tmp=varargin[[All]]
+ if((is.numeric(Tmp))&&(length(Tmp)>2)){ #190405from
+ if(Tmp[1]==-1){
+ Same="no"
+ }else{
+ Tmp1=sapply(Tmp,as.character)
+ Incolor=paste("{",Tmp1[1],",",Tmp1[2],",",Tmp1[3],"}",sep="")
+ Same="n"
+ }
+ All=All-1
+ }#190405to
+ Ra=TenSize*1000/2.54/MilliIn
+ for (II in Looprange(1,All)){
+ MS<- varargin[[II]]
+ MS=Flattenlist(MS) #17.10.28
+ if (mode(MS)=="numeric"){
+ MS<- list(MS)
+ }
+ for (I in Looprange(1,length(MS))){
+ P<- MS[[I]]
+ if (InWindow(P)!="i") next
+ P<- Doscaling(P)
+ X=sprintf('%5.5f',P[1])
+ Y=sprintf('%5.5f',P[2])
+ if(Same!="no"){ #190405from
+ Str=paste("{\\linethickness{0 in}%\n",sep="")
+ cat(Str,file=Wfile,append=TRUE)
+ if(Same=="n"){ #190405
+ Str1<- paste("{\\color[rgb]",Incolor,"%\n",sep="")
+ cat(Str1,file=Wfile,append=TRUE)
+ }
+ Str=paste('\\put(',X,',',Y,'){\\circle*{',sprintf('%6.6f',Ra),'}}%\n',sep="")
+ cat(Str,file=Wfile,append=TRUE)
+ if(Same=="n"){
+ cat("}%\n",file=Wfile,append=TRUE)
+ }
+ cat("}%\n",file=Wfile,append=TRUE)
+ }
+ Str=paste('\\put(',X,',',Y,'){\\circle{',sprintf('%6.6f',Ra),'}}%\n',sep="")
+ cat(Str,file=Wfile,append=TRUE)
+ }
+ } # 190405to
+ cat("\n",file=Wfile,append=TRUE)
+}
+
+
+######################################
+
+Makehasen<- function(Figdata,Sen,Gap,Ptn)
+{
+ Eps<- 10.0^(-6)
+ Clist<- MakeCurves(Figdata)
+ DinM<- Dataindex(Clist)
+ for (N in Looprange(1,Nrow(DinM))){
+ Tmp<- DinM[N,]
+ Data<- Clist[Tmp[1]:Tmp[2],]
+ Dtall<- Nrow(Data)
+ Len<- 0
+ Lenlist<- c(0)
+ for (I in Looprange(2,Dtall)){
+ Len<- Len+Norm(Data[I,]-Data[I-1,])
+ Lenlist<- c(Lenlist,Len)
+ }
+ Lenall<- Lenlist[Dtall]
+ if (Lenall==0){
+ next
+ }
+ Kari<- (Sen+Gap)*0.1
+ Naga<- Sen*0.1
+ Tobi<- Gap*0.1
+ if (Norm(Data[1,]-Data[Dtall,])<Eps){
+ Nsen<- max(ceiling(Lenall/Kari),3)
+ SegUnit<- Lenall/Nsen
+ Naga<- SegUnit*Sen/(Sen+Gap)
+ Tobi<- SegUnit*Gap/(Sen+Gap)
+ SegList<- c(seq(0,(Nsen-1)*SegUnit,by=SegUnit))
+ }
+ else{
+ if (Ptn==0){
+ Nsen<- max(ceiling((Lenall+Tobi)/Kari),3)
+ SegUnit<- Lenall*(Sen+Gap)/(Nsen*Sen+(Nsen-1)*Gap)
+ Naga<- SegUnit*Sen/(Sen+Gap)
+ Tobi<- SegUnit*Gap/(Sen+Gap)
+ SegList<- c(seq(0,(Nsen-1)*SegUnit,by=SegUnit))
+ }
+ else{
+ Nsen<- max(ceiling((Lenall+Naga)/Kari),3)
+ SegUnit<- Lenall*(Sen+Gap)/((Nsen-1)*Sen+Nsen*Gap)
+ Naga<- SegUnit*Sen/(Sen+Gap)
+ Tobi<- SegUnit*Gap/(Sen+Gap)
+ SegList<- c(seq(Tobi,Tobi+(Nsen-2)*SegUnit,by=SegUnit))
+ }
+ }
+ Hajime<- 1; Owari<- 1
+ Mojisu<- 0
+ for (I in Looprange(1,length(SegList))){
+ Len<- SegList[I]
+ J<- Owari
+ while (Len>=Lenlist[J]-Eps){
+ if (J==Dtall){
+ break
+ }
+ J<- J+1
+ }
+ Hajime<- J-1
+ J<- Hajime
+ while (Len+Naga>Lenlist[J]-Eps){
+ if (J==Dtall){
+ break
+ }
+ J<- J+1
+ }
+ Owari<- J-1
+ T<- (Len-Lenlist[Hajime])
+ T<- T/(Lenlist[Hajime+1]-Lenlist[Hajime])
+ P<- Data[Hajime,]+T*(Data[Hajime+1,]-Data[Hajime,])
+ X0=sprintf('%5.5f',P[1])
+ Y0=sprintf('%5.5f',P[2])
+ Pt0=paste('(',X0,',',Y0,')',sep="")
+ Str=paste('\\polyline',Pt0,sep="")
+ cat(Str,file=Wfile,append=TRUE)
+ Mojisu<- Mojisu+nchar(Str)
+ for (J in Looprange(Hajime+1,Owari)){
+ P=Data[J,]
+ X=sprintf('%5.5f',P[1])
+ Y=sprintf('%5.5f',P[2])
+ Pt=paste('(',X,',',Y,')',sep="")
+ Str=Pt
+ cat(Str,file=Wfile,append=TRUE)
+ Pt0=Pt
+ Mojisu=Mojisu+nchar(Str)
+ }
+ T<- (Len+Naga-Lenlist[Owari])
+ T<- T/(Lenlist[Owari+1]-Lenlist[Owari])
+ P<- Data[Owari,]+T*(Data[Owari+1,]-Data[Owari,])
+ X=sprintf('%5.5f',P[1])
+ Y=sprintf('%5.5f',P[2])
+ Pt=paste('(',X,',',Y,')',sep="")
+ Str=Pt
+ cat(Str,file=Wfile,append=TRUE)
+ Mojisu<- Mojisu+nchar(Str)
+ if (Mojisu>80){
+ cat("%\n",file=Wfile,append=TRUE)
+ Mojisu<- 0
+ }
+ }
+ }
+ cat("%\n%\n",file=Wfile,append=TRUE);
+}
+
+#########################################
+
+Beginpicture<-function(ul)
+{ ## Scaling is implemented
+ Tmp<- Doscaling(c(XMIN,YMIN))
+ Xm<- Tmp[1]
+ Ym<- Tmp[2]
+ Tmp<- Doscaling(c(XMAX,YMAX))
+ XM<- Tmp[1]
+ YM<- Tmp[2]
+ Dx<- XM-Xm
+ Dy<- YM-Ym
+ Sym<-".0123456789 +-*/"
+ SL<-Sym
+ OL<-"+-*/"
+ if (ul!=""){
+ ULEN<<-ul;
+ }
+ Is<-1;
+ VL<-"";
+ Ucode<-ULEN
+ for (I in Looprange(1,nchar(Ucode))){
+ C<-substring(Ucode,I,I);
+ if (length(grep(C,SL,fixed=TRUE))>0){
+ if (length(grep(C,OL,fixed=TRUE))>0){
+ Tmp<-substring(Ucode,Is,I-1);
+ Str<-paste(VL,Tmp,C,sep="")
+ VL<-Str
+ Is<-I+1;
+ }
+ }
+ else{
+ Unit<-substring(Ucode,I,I+1);
+ Str<-substring(Ucode,Is,I-1);
+ VL<-paste(VL,Str,sep="")
+ break;
+ }
+ }
+ Valu<-eval(parse(text=VL));
+ Str<-as.character(Valu);
+ ULEN<<- paste(Str,Unit,sep="");
+ if (Unit=="cm") MilliIn<<-1000/2.54*Valu
+ if (Unit=="mm") MilliIn<<-1000/2.54*Valu/10
+ if (Unit=="in") MilliIn<<-1000*Valu
+ if (Unit=="pt") MilliIn<<-1000/72.27*Valu
+ if (Unit=="pc") MilliIn<<-1000/6.022*Valu
+ if (Unit=="bp") MilliIn<<-1000/72*Valu
+ if (Unit=="dd2") MilliIn<<-1000/1238/1157/72.27*Valu
+ if (Unit=="cc") MilliIn<<-1000/1238/1157/72.27*12*Valu;
+ if (Unit=="sp") MilliIn<<-1000/72.27/65536*Valu/10
+ MARKLEN<<- MARKLENNow*1000/2.54/MilliIn;
+ Str<-paste("{\\unitlength=",ULEN,"%\n",sep="");
+ cat(Str,file=Wfile,append=TRUE);
+ cat("\\begin{picture}%\n",file=Wfile,append=TRUE);
+ Str<-"(";
+ Tmp<-as.character(round(Dx,digits=6));
+ Str<-paste(Str,Tmp,",",sep="");
+ Tmp<-as.character(round(Dy,digits=6));
+ Str<-paste(Str,Tmp,")(",sep="");
+ Tmp<-as.character(round(Xm,digits=6));
+ Str<-paste(Str,Tmp,",",sep="");
+ Tmp<-as.character(round(Ym,digits=6));
+ Str<-paste(Str,Tmp,")%\n",sep="");
+ cat(Str,file=Wfile,append=TRUE);
+ Str=paste('\\linethickness{',as.character(PenThickInit/1000),'in}%',sep="")
+ cat(Str,file=Wfile,append=TRUE)
+ cat("%\n",file=Wfile,append=TRUE)
+}
+
+#########################################
+
+Setpen<-function(Width)
+{
+ PenThick<<-round(PenThickInit*Width)
+ Str=paste('\\linethickness{',as.character(PenThick/1000),'in}%',sep="")
+ cat(Str,file=Wfile,append=TRUE)
+ cat("%\n",file=Wfile,append=TRUE)
+}
+
+#########################################
+
+Shade<- function(...)
+{ ## Scaling is implemented
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ Iroflg=0
+ if(Nargs>1){
+ Iro=varargin[[Nargs]]
+ if(is.character(Iro)){
+ Iroflg=1
+ if(length(grep("{",Iro,fixed=TRUE))>0){
+ Str=paste("{\\color",Iro,sep="")
+ }
+ else{
+ Str=paste("{\\color{",Iro,"}",sep="")
+ }
+ }
+ else{
+ if(length(Iro)==1){
+ Kosa=Iro
+ }
+ else{
+ Iroflg=1
+ if(length(Iro)==4){
+ Str="{\\color[cmyk]{"
+ }
+ else{
+ if(length(Iro)==3){
+ Str="{\\color[rgb]{"
+ }
+ }
+ for(J in 1:length(Iro)){
+ Str=paste(Str,as.character(Iro[J]),sep="")
+ if(J<length(Iro)){
+ Str=paste(Str,",")
+ }
+ }
+ Str=paste(Str,"}")
+ }
+ }
+ if(Iroflg==1){
+ Str=paste(Str,"%\n",sep="")
+ cat(Str,file=Wfile,append=TRUE)
+ }
+ }
+ Mojisu=0
+ Tmp=varargin[[1]]
+# Data=Kyoukai(Tmp)
+ Data= Joincrvs(Tmp) #180929from
+ Data=list(Data) #180929to
+ for (I in Looprange(1, length(Data))){
+ PL<- Op(I,Data)
+ PL=Appendrow(PL,Op(1,PL)) #180929
+ Mojisu<- 0
+ for (J in 1:Nrow(PL)){
+ P<- Doscaling(Op(J,PL))
+ X=sprintf('%5.5f',P[1])
+ Y=sprintf('%5.5f',P[2])
+ Pt=paste('(',X,',',Y,')',sep="")
+ if(J==1){
+ Str=paste('\\polygon*',Pt,sep="")
+ }else{
+ Str=Pt
+ }
+ cat(Str,file=Wfile,append=TRUE)
+ Mojisu<- Mojisu+nchar(Str)
+ if (Mojisu>80){
+ cat("%\n",file=Wfile,append=TRUE)
+ Mojisu<- 0
+ }
+ }
+ }
+ if(Iroflg==1){
+ Str='}%'
+ if(Mojisu>0){
+ Str=paste('\n',Str,'\n',sep="")
+ }else{
+ Str=paste(Str,'\n')
+ }
+ cat(Str,file=Wfile,append=TRUE)
+ }
+}
diff --git a/graphics/ketcindy/ketcindyfolder/scripts/ketlib/ketpiccurrent_reptikz.r b/graphics/ketcindy/ketcindyfolder/scripts/ketlib/ketpiccurrent_reptikz.r
new file mode 100644
index 0000000000..c68ccc5e83
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/scripts/ketlib/ketpiccurrent_reptikz.r
@@ -0,0 +1,705 @@
+# Copyright (C) 2014 Setsuo Takato, KETCindy Japan project team
+#
+#This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>
+
+
+#########################################
+
+ThisVersion<- "tikzv1_1_1(190402)"
+
+# 2019.04.05 Drwpt ( Incolor, Takato)
+# 2019.04.02 Beginpicture ( Unitlen, Takato)
+# 2019.04.02 Drwline ( Sepen restore when finished, Takato)
+# 2019.03.17 from 20190207
+# Ketinit, Beginpicture, Endpicture, Drwline, Setpen, Dottedline, Makehasen, Drwpt, Shade, Letter #from 20190317
+
+########### Ketinit ############
+
+Ketinit<- function(){
+XMIN<<- -5
+XMAX<<- 5
+YMIN<<- -5 ; YMAX<<- 5
+ZIKU<<- "l"
+#ARROWSIZE<<- 1
+XNAME<<- "$x$"
+XPOS<<- "e"
+YNAME<<- "$y$"
+YPOS<<- "n"
+ONAME<<- "O"
+OPOS<<- "sw"
+ULEN<<- "1cm"
+MilliIn<<- 1/2.54*1000
+PenThick<<- round(MilliIn*0.02)*0.075 #from 20190317
+PenThickInit<<- PenThick
+TenSizeInit<<- 0.02*2 #17.10.07
+TenSize<<- TenSizeInit
+Wfile<<-""
+MEMORI<<- 0.05
+MEMORIInit<<- MEMORI
+MEMORINow<<- MEMORI
+MARKLEN<<- 0.05
+MARKLENInit<<- MARKLEN
+MARKLENNow<<- MARKLEN
+GENTEN<<- c(0,0)
+YaSize<<- 1
+YaAngle<<- 18
+YaPosition<<- 1
+YaThick<<- 1
+YaStyle<<- "tf"
+PHI<<- 30*pi/180
+THETA<<- 60*pi/180
+FocusPoint<<- c(0,0,0)
+EyePoint<<- c(5,5,5)
+ASSIGNLIST<<- list("`","'")
+
+SCALEX<<- 1
+SCALEY<<- 1
+LOGX<<- 0
+LOGY<<- 0
+
+TEXFORLEVEL<<- 0
+TEXFORLAST<<- list()
+}
+
+################### Beginpicture ######################
+
+Beginpicture<-function(ul)
+{ ## Scaling is implemented
+ Tmp<- Doscaling(c(XMIN,YMIN))
+ Xm<- Tmp[1]
+ Ym<- Tmp[2]
+ Tmp<- Doscaling(c(XMAX,YMAX))
+ XM<- Tmp[1]
+ YM<- Tmp[2]
+ Dx<- XM-Xm
+ Dy<- YM-Ym
+ Sym<-".0123456789 +-*/"
+ SL<-Sym
+ OL<-"+-*/"
+ if (ul!=""){
+ ULEN<<-ul;
+ }
+ Is<-1;
+ VL<-"";
+ Ucode<-ULEN
+ for (I in Looprange(1,nchar(Ucode))){
+ C<-substring(Ucode,I,I);
+ if (length(grep(C,SL,fixed=TRUE))>0){
+ if (length(grep(C,OL,fixed=TRUE))>0){
+ Tmp<-substring(Ucode,Is,I-1);
+ Str<-paste(VL,Tmp,C,sep="")
+ VL<-Str
+ Is<-I+1;
+ }
+ }
+ else{
+ Unit<-substring(Ucode,I,I+1);
+ Str<-substring(Ucode,Is,I-1);
+ VL<-paste(VL,Str,sep="")
+ break;
+ }
+ }
+ Valu<-eval(parse(text=VL));
+ Str<-as.character(Valu);
+ ULEN<<- paste(Str,Unit,sep="");
+ if (Unit=="cm") MilliIn<<-1000/2.54*Valu
+ if (Unit=="mm") MilliIn<<-1000/2.54*Valu/10
+ if (Unit=="in") MilliIn<<-1000*Valu
+ if (Unit=="pt") MilliIn<<-1000/72.27*Valu
+ if (Unit=="pc") MilliIn<<-1000/6.022*Valu
+ if (Unit=="bp") MilliIn<<-1000/72*Valu
+ if (Unit=="dd2") MilliIn<<-1000/1238/1157/72.27*Valu
+ if (Unit=="cc") MilliIn<<-1000/1238/1157/72.27*12*Valu;
+ if (Unit=="sp") MilliIn<<-1000/72.27/65536*Valu/10
+ MARKLEN<<- MARKLENNow*1000/2.54/MilliIn;
+ Str<-paste("{\\unitlength=",ULEN,"%\n",sep="");
+ cat(Str,file=Wfile,append=TRUE);
+ cat("\\begin{tikzpicture}[x=",ULEN,",y=",ULEN,"]%\n",file=Wfile,append=TRUE);#190404
+ Str<-"\\clip (";
+ Tmp<-as.character(round(Xm,digits=6));
+ Str<-paste(Str,Tmp,",",sep="");
+ Tmp<-as.character(round(Ym,digits=6));
+ Str<-paste(Str,Tmp,") rectangle (",sep="");
+ Tmp<-as.character(round(XM,digits=6)+0.5);
+ Str<-paste(Str,Tmp,",",sep="");
+ Tmp<-as.character(round(YM,digits=6)+0.5);
+ Str<-paste(Str,Tmp,");%\n",sep="");
+ cat(Str,file=Wfile,append=TRUE);
+# Str=paste('\\linethickness{',as.character(PenThickInit/1000),'in}%',sep="") #20190207
+# cat(Str,file=Wfile,append=TRUE)
+# cat("%\n",file=Wfile,append=TRUE)
+}
+
+################### Endpicture #####################
+
+Endpicture<-function(...)
+{
+ varargin<-list(...)
+ Nargs<-length(varargin)
+ if(Nargs==0)
+ {
+ Drwxy()
+ }
+ else
+ {
+ if(varargin[[1]]==1) Drwxy()
+ }
+ cat("\\end{tikzpicture}}%",file=Wfile,append=TRUE)
+ MEMORI<<-MEMORINow*1000/2.54/MilliIn
+ Setunitlen("1cm")
+}
+
+##################### Drwline ######################
+
+Drwline<-function(...)
+{
+ varargin<-list(...)
+ Nall <- length(varargin)
+ Tmp <- varargin[[Nall]]
+ Width <- PenThick/PenThickInit
+ Thick <- 1
+ if (mode(Tmp)=="numeric" && length(Tmp)==1){
+ Thick <- Tmp
+ Setpen(Width*Thick)
+ Nall <- Nall-1
+ }else{
+ Setpen(Width)
+ }
+ for (N in 1:Nall){
+ Pdata <- varargin[[N]]
+ if (length(Pdata)==0) next
+ if (mode(Pdata)!="list") Pdata<-list(Pdata)
+ while(Mixtype(Pdata)==3){
+ Tmp1 <- list()
+ for(II in Looprange(1,length(Pdata))){
+ Tmp1 <- Mixjoin(Tmp1,Pdata[[II]])
+ }
+ Pdata <- Tmp1
+ }
+ for (II in Looprange(1,length(Pdata))){
+ Clist <- MakeCurves(Pdata[[II]])
+ DinM <- Dataindex(Clist)
+ for (n in Looprange(1,Nrow(DinM))){
+ Tmp <- DinM[n,]
+ Data <- Clist[Tmp[1]:Tmp[2],]
+# Mojisu <- 0 #from 20190317
+ for (I in Looprange(1,Nrow(Data))){
+ Tmp <- Data[I,]
+ X=sprintf('%5.5f',Tmp[1])
+ Y=sprintf('%5.5f',Tmp[2])
+ Pt=paste('(',X,',',Y,')',sep="")
+ if (I==1){
+# if (Width>1){ #from 20190317
+ Str=paste('\\draw [line width=',round(PenThick,digit=6),']',Pt,sep="")
+# }else{
+# if (Thick>1){
+# Str=paste('\\draw [line width=',round(PenThick,digit=6),']',Pt,sep="")
+# }else{
+# Str=paste('\\draw [line width=',round(PenThick,digit=6),']',Pt,sep="")
+# }
+# }
+ }else{
+ Str=paste('--',Pt,sep="")
+ }
+ cat(Str,file=Wfile,append=TRUE)
+# Mojisu <- Mojisu+nchar(Str)
+# if (Mojisu>80){
+# cat(";%\n",file=Wfile,append=TRUE)
+# Mojisu <- 0
+# }
+ }
+# if (Mojisu!=0){
+# cat(";%\n",file=Wfile,append=TRUE)
+# }
+ cat(";%\n",file=Wfile,append=TRUE)
+ }
+ }
+ }
+ if (Thick!=1){ #from 20190402
+ Setpen(Width)
+ }
+}
+
+################### Setpen ######################
+
+Setpen<-function(Width)
+{
+ PenThick <<- PenThickInit*Width #from 20190317
+# Str=paste('\\linethickness{',as.character(PenThick/1000),'in}%',sep="")
+# cat(Str,file=Wfile,append=TRUE)
+# cat("%\n",file=Wfile,append=TRUE)
+}
+
+##################### Dottedline ########################
+
+Dottedline<- function(...)
+{
+ varargin <- list(...)
+ Nall <- length(varargin)
+ Nagasa <- 0.1
+ Ookisa <- PenThick*2 #17.10.07
+ I <- Nall
+ Tmp <- varargin[[I]]
+ while (mode(Tmp)=="numeric" && length(Tmp)==1 ) {
+ I <- I-1
+ Tmp <- varargin[[I]]
+ }
+ if (I==Nall-1) {
+ Nagasa<-Nagasa*varargin[[Nall]]
+ Nall <- Nall-1
+ }
+ if (I==Nall-2) {
+ Nagasa <- Nagasa*varargin[[Nall-1]]
+ Ookisa <- round(Ookisa*varargin[[Nall]])
+ Nall <- Nall-2
+ }
+ Nagasa <- 1000/2.54/MilliIn*Nagasa
+ Ra=Ookisa/MilliIn
+ for (N in 1:Nall) {
+ Pdata <- varargin[[N]]
+ if (mode(Pdata)=="numeric") {
+ Pdata <- list(Pdata)
+ }
+ for (II in 1:length(Pdata)) {
+ Clist <- MakeCurves(Op(II,Pdata))
+ DinM <- Dataindex(Clist)
+ Mojisu=0
+ for (n in Looprange(1,Nrow(DinM))) {
+ Tmp <- DinM[n,]
+ Data <- Clist[Tmp[1]:Tmp[2],]
+ Len <- 0
+ Lenlist <- c(0)
+ for (I in Looprange(2,Nrow(Data))) {
+ Len <- Len+Norm(Data[I,]-Data[I-1,])
+ Lenlist <- c(Lenlist,Len)
+ }
+ Lenall <- Lenlist[length(Lenlist)]
+ if (Lenall==0) {
+ next
+ }
+ Naga <- Nagasa
+ Nten <- round(Lenall/Naga)+1
+ if (Nten > 1) {
+ Seg <- Lenall/(Nten-1)
+ }
+ else {
+ Seg <- Lenall
+ }
+ Eps <- 10^(-6)*Seg
+ PPd<-c()
+ Hajime <- 1
+ for (I in Looprange(0,Nten-1)) {
+ Len <- Seg*I
+ if (I>0) {
+ J <- Hajime
+ while( Len>=Lenlist[J]+Eps) {
+ J <- J+1
+ }
+ Hajime <- J-1
+ }
+ T <- (Len-Lenlist[Hajime])/
+ (Lenlist[Hajime+1]-Lenlist[Hajime])
+ P <- Data[Hajime,]+T*(Data[Hajime+1,]-Data[Hajime,])
+ PPd<-Appendrow(PPd,P)
+ if (I==Nten-1) {
+ if (Norm(P-Data[1,])<Eps) {
+ next
+ }
+ }
+ }
+ for (I in Looprange(1,Nrow(PPd))){
+ P<- Op(I,PPd)
+ if (Nrow(PPd)==1){
+ V<- c(1,0)
+ }
+ else if (I==1){
+ Tmp<- Op(I+1,PPd)-P
+ V<- 1/Norm(Tmp)*Tmp
+ }
+ else if (I==Nrow(PPd)){
+ Tmp<- P-Op(I-1,PPd)
+ V<- 1/Norm(Tmp)*Tmp
+ }
+ else{
+ Tmp1<- Op(I+1,PPd)-P
+ Tmp2<- P-Op(I-1,PPd)
+ Tmp3<-1/Norm(Tmp1)*Tmp1+1/Norm(Tmp2)*Tmp2
+ V<- 1/Norm(Tmp3)*Tmp3
+ }
+ X=sprintf('%5.5f',P[1])
+ Y=sprintf('%5.5f',P[2])
+ Str=paste('\\put(',X,',',Y,'){\\circle*{',sprintf('%6.6f',Ra),'}}',sep="")
+ cat(Str,file=Wfile,append=TRUE)
+ Mojisu=Mojisu+nchar(Str)
+ if(Mojisu>80){
+ cat("\n",file=Wfile,append=TRUE)
+ Mojisu=0
+ }
+ }
+ }
+ }
+ if(Mojisu>0){
+ cat("\n",file=Wfile,append=TRUE)
+ }
+ }
+ Tmp<-PenThick/PenThickInit
+ Setpen(Tmp)
+}
+
+################### Makehasen ###################
+
+Makehasen<- function(Figdata,Sen,Gap,Ptn)
+{
+ Width <- PenThick/PenThickInit #from 20190317
+ Setpen(Width) #from 20190317
+ Eps<- 10.0^(-6)
+ Clist<- MakeCurves(Figdata)
+ DinM<- Dataindex(Clist)
+ for (N in Looprange(1,Nrow(DinM))){
+ Tmp<- DinM[N,]
+ Data<- Clist[Tmp[1]:Tmp[2],]
+ Dtall<- Nrow(Data)
+ Len<- 0
+ Lenlist<- c(0)
+ for (I in Looprange(2,Dtall)){
+ Len<- Len+Norm(Data[I,]-Data[I-1,])
+ Lenlist<- c(Lenlist,Len)
+ }
+ Lenall<- Lenlist[Dtall]
+ if (Lenall==0){
+ next
+ }
+ Kari<- (Sen+Gap)*0.1
+ Naga<- Sen*0.1
+ Tobi<- Gap*0.1
+ if (Norm(Data[1,]-Data[Dtall,])<Eps){
+ Nsen<- max(ceiling(Lenall/Kari),3)
+ SegUnit<- Lenall/Nsen
+ Naga<- SegUnit*Sen/(Sen+Gap)
+ Tobi<- SegUnit*Gap/(Sen+Gap)
+ SegList<- c(seq(0,(Nsen-1)*SegUnit,by=SegUnit))
+ }
+ else{
+ if (Ptn==0){
+ Nsen<- max(ceiling((Lenall+Tobi)/Kari),3)
+ SegUnit<- Lenall*(Sen+Gap)/(Nsen*Sen+(Nsen-1)*Gap)
+ Naga<- SegUnit*Sen/(Sen+Gap)
+ Tobi<- SegUnit*Gap/(Sen+Gap)
+ SegList<- c(seq(0,(Nsen-1)*SegUnit,by=SegUnit))
+ }
+ else{
+ Nsen<- max(ceiling((Lenall+Naga)/Kari),3)
+ SegUnit<- Lenall*(Sen+Gap)/((Nsen-1)*Sen+Nsen*Gap)
+ Naga<- SegUnit*Sen/(Sen+Gap)
+ Tobi<- SegUnit*Gap/(Sen+Gap)
+ SegList<- c(seq(Tobi,Tobi+(Nsen-2)*SegUnit,by=SegUnit))
+ }
+ }
+ Com=paste0('%%%%% start dashline, Senlength=',Sen,', Gaplength=',Gap,' %%%%%%') #from 20190317
+ cat(Com,file=Wfile,append=TRUE)
+ cat(";%\n%\n",file=Wfile,append=TRUE);
+ Hajime<- 1; Owari<- 1
+# Mojisu<- 0
+ for (I in Looprange(1,length(SegList))){
+ Len<- SegList[I]
+ J<- Owari
+ while (Len>=Lenlist[J]-Eps){
+ if (J==Dtall){
+ break
+ }
+ J<- J+1
+ }
+ Hajime<- J-1
+ J<- Hajime
+ while (Len+Naga>Lenlist[J]-Eps){
+ if (J==Dtall){
+ break
+ }
+ J<- J+1
+ }
+ Owari<- J-1
+ T<- (Len-Lenlist[Hajime])
+ T<- T/(Lenlist[Hajime+1]-Lenlist[Hajime])
+ P<- Data[Hajime,]+T*(Data[Hajime+1,]-Data[Hajime,])
+ X0=sprintf('%5.5f',P[1])
+ Y0=sprintf('%5.5f',P[2])
+ Pt0=paste('(',X0,',',Y0,')',sep="")
+ Str=paste('\\draw [line width=',round(PenThick,digits=6),']',Pt0,sep="") #from 20190317
+ cat(Str,file=Wfile,append=TRUE)
+# Mojisu<- Mojisu+nchar(Str)
+ for (J in Looprange(Hajime+1,Owari)){
+ P=Data[J,]
+ X=sprintf('%5.5f',P[1])
+ Y=sprintf('%5.5f',P[2])
+ Pt=paste(' -- (',X,',',Y,')',sep="")
+ Str=Pt
+ cat(Str,file=Wfile,append=TRUE)
+# Pt0=Pt
+# Mojisu=Mojisu+nchar(Str)
+ }
+ T<- (Len+Naga-Lenlist[Owari])
+ T<- T/(Lenlist[Owari+1]-Lenlist[Owari])
+ P<- Data[Owari,]+T*(Data[Owari+1,]-Data[Owari,])
+ X=sprintf('%5.5f',P[1])
+ Y=sprintf('%5.5f',P[2])
+ Pt=paste(' -- (',X,',',Y,')',sep="")
+ Str=Pt
+ cat(Str,file=Wfile,append=TRUE)
+ cat(";%\n",file=Wfile,append=TRUE); #190412
+# Mojisu<- Mojisu+nchar(Str)
+# if (Mojisu>80){
+# cat("%\n",file=Wfile,append=TRUE)
+# Mojisu<- 0
+# }
+ }
+ Com=paste0('%%%%%% finish dashline, Senlength=',Sen,', Gaplength=',Gap,' %%%%%%') #from 20190317
+ cat(Com,file=Wfile,append=TRUE)
+ cat(";%\n%\n",file=Wfile,append=TRUE);
+ }
+# cat("%\n%\n",file=Wfile,append=TRUE);
+}
+
+##################### Drwpt ######################
+
+Drwpt<-function(...) #181230
+{
+ varargin<-list(...)
+ Nargs<-length(varargin)
+ All=Nargs
+ Same="y"
+ Incolor=""
+ Tmp=varargin[[All]]
+ if((is.numeric(Tmp))&&(length(Tmp)>2)){ #190405from
+ if(Tmp[1]==-1){
+ Same="no"
+ }else{
+ Tmp1=sapply(Tmp,as.character)
+ Incolor=paste("{",Tmp1[1],",",Tmp1[2],",",Tmp1[3],"}",sep="")
+ Same="n"
+ }
+ All=All-1
+ }#190405to
+ Ra=TenSize*1000/2.54/MilliIn
+ for (II in Looprange(1,All)){
+ MS<- varargin[[II]]
+ MS=Flattenlist(MS) #17.10.28
+ if (mode(MS)=="numeric"){
+ MS<- list(MS)
+ }
+ for (I in Looprange(1,length(MS))){
+ P<- MS[[I]]
+ if (InWindow(P)!="i") next
+ P<- Doscaling(P)
+ X=sprintf('%5.5f',P[1])
+ Y=sprintf('%5.5f',P[2])
+ if(Same!="no"){ #190405from
+ Str=paste("{\\linethickness{0 in}",Incolor,sep="")
+ }
+ if(Same!="no"){ #190405from
+ Str=paste("{\\linethickness{0 in}%\n",sep="")
+ cat(Str,file=Wfile,append=TRUE)
+ if(Same=="n"){ #190405
+ Str1<- paste("{\\color[rgb]",Incolor,"%\n",sep="")
+ cat(Str1,file=Wfile,append=TRUE)
+ }
+ Str=paste('\\put(',X,',',Y,'){\\circle*{',sprintf('%6.6f',Ra),'}}%\n',sep="")
+ cat(Str,file=Wfile,append=TRUE)
+ if(Same=="n"){
+ cat("}%\n",file=Wfile,append=TRUE)
+ }
+ cat("}%\n",file=Wfile,append=TRUE)
+ }
+ Str=paste('\\put(',X,',',Y,'){\\circle{',sprintf('%6.6f',Ra),'}}%\n',sep="")
+ cat(Str,file=Wfile,append=TRUE)
+ }
+ } # 190405to
+ cat("\n",file=Wfile,append=TRUE)
+}
+
+#################### Shade #####################
+
+Shade<- function(...)
+{ ## Scaling is implemented
+ varargin<- list(...)
+ Nargs<- length(varargin)
+ Iroflg=0
+ if(Nargs>1){
+ Iro=varargin[[Nargs]]
+ if(is.character(Iro)){
+ Iroflg=1
+ if(length(grep("{",Iro,fixed=TRUE))>0){
+ Str=paste("{\\color",Iro,sep="")
+ }
+ else{
+ Str=paste("{\\color{",Iro,"}",sep="")
+ }
+ }
+ else{
+ if(length(Iro)==1){
+ Kosa=Iro
+ }
+ else{
+ Iroflg=1
+ if(length(Iro)==4){
+ Str="{\\color[cmyk]{"
+ }
+ else{
+ if(length(Iro)==3){
+ Str="{\\color[rgb]{"
+ }
+ }
+ for(J in 1:length(Iro)){
+ Str=paste(Str,as.character(Iro[J]),sep="")
+ if(J<length(Iro)){
+ Str=paste(Str,",")
+ }
+ }
+ Str=paste(Str,"}")
+ }
+ }
+ if(Iroflg==1){
+ Str=paste(Str,"%\n",sep="")
+ cat(Str,file=Wfile,append=TRUE)
+ }
+ }
+# Mojisu=0
+ Tmp=varargin[[1]]
+# Data=Kyoukai(Tmp)
+ Data= Joincrvs(Tmp) #180929from
+ Data=list(Data) #180929to
+ for (I in Looprange(1, length(Data))){
+ PL<- Op(I,Data)
+ PL=Appendrow(PL,Op(1,PL)) #180929
+ Mojisu<- 0
+ for (J in 1:Nrow(PL)){
+ P<- Doscaling(Op(J,PL))
+ X=sprintf('%5.5f',P[1])
+ Y=sprintf('%5.5f',P[2])
+ Pt=paste('(',X,',',Y,')',sep="")
+ if(J==1){
+ Str=paste('\\fill',Pt,sep="")
+ }else{
+ Str=paste('--',Pt,sep="")
+ }
+ cat(Str,file=Wfile,append=TRUE)
+# Mojisu<- Mojisu+nchar(Str)
+# if (Mojisu>80){
+# cat("%\n",file=Wfile,append=TRUE)
+# Mojisu<- 0
+# }
+ }
+ cat(";%\n",file=Wfile,append=TRUE)
+ }
+# if(Iroflg==1){
+# Str='}%\n'
+# if(Mojisu>0){
+# Str=paste('\n',Str,'\n',sep="")
+# }else{
+# Str=paste(Str,'\n')
+# }
+# cat(Str,file=Wfile,append=TRUE)
+# }
+}
+
+################## Letter ####################
+
+Letter<-function(...)
+{ ## Scaling is implemented
+ varargin<-list(...)
+ Nargs<-length(varargin)
+ Irng<-c(seq(from=1,to=Nargs,by=3))
+ for (I in Irng)
+ {
+ Tmp<-varargin[[I]]
+ P<- Doscaling(Tmp)
+ X<-P[1]
+ Y<-P[2]
+ Houkou<-varargin[[I+1]]
+ Mojiretu<-varargin[[I+2]]
+ if(length(grep("\\$",Mojiretu))>0) #from 20190317
+ {
+ Mojiretu <- Mojiretu
+ }
+ else
+ {
+ Mojiretu <- paste0("$\\mathrm{",Mojiretu,"}$")
+ }
+ Hset<-Houkou
+ Vhoko<-"c"
+ if(length(grep("n",Hset))>0)
+ {
+ Vhoko<-"n"; Y<-Y+MEMORI
+ }
+ if(length(grep("s",Hset))>0)
+ {
+ Vhoko<-"s"; Y<-Y-MEMORI
+ }
+ Hhoko<-"c"
+ if(length(grep("e",Hset))>0)
+ {
+ Hhoko<-"e"; X<-X+MEMORI
+ }
+ if(length(grep("w",Hset))>0)
+ {
+ Hhoko<-"w"; X<-X-MEMORI
+ }
+ Hoko<-paste(Vhoko,Hhoko,sep="")
+ Suu<-"+-.0123456789"
+ SuuL<-Suu
+ J<-1; Dstr<-""
+ while (J<=nchar(Houkou))
+ {
+ Tmp<-substring(Houkou,J,J)
+ if(length(grep(Tmp,SuuL))>0)
+ {
+ if(Dstr=="") Hk<-substring(Houkou,J-1,J-1)
+ Dstr<-paste(Dstr,Tmp,sep="")
+ }
+ else
+ {
+ if(Dstr!="")
+ {
+ Nmbr<-as.numeric(Dstr)
+ D<-Nmbr*MEMORI
+ if(Hk=="n") Y<-Y+D
+ if(Hk=="s") Y<-Y-D
+ if(Hk=="e") X<-X+D
+ if(Hk=="w") X<-X-D
+ Dstr<-""
+ }
+ }
+ J<-J+1
+ }
+ if(Dstr!="")
+ {
+ Nmbr<-as.numeric(Dstr)
+ D<-Nmbr*MEMORI;
+ if(Hk=="n") Y<-Y+D
+ if(Hk=="s") Y<-Y-D
+ if(Hk=="e") X<-X+D
+ if(Hk=="w") X<-X-D
+ }
+ CalcWidth(Hoko,Mojiretu)
+ CalcHeight(Hoko,Mojiretu)
+ cat("\\put(",file=Wfile,append=TRUE)
+ Tmp1<- sprintf("%7.7f",X) # 11.07.19
+ Tmp2<- sprintf("%7.7f",Y) # 11.07.19
+ Str<-paste(Tmp1,",",Tmp2,sep="")
+ cat(Str,file=Wfile,append=TRUE)
+ Tmp<-"){\\hspace*{\\Width}"
+ Str<-paste(Tmp,"\\raisebox{\\Height}{",Mojiretu,"}}%\n",sep="")
+ cat(Str,file=Wfile,append=TRUE)
+ cat("%\n",file=Wfile,append=TRUE)
+ }
+}
diff --git a/graphics/ketcindy/ketcindyfolder/scripts/ketlib/maximaL/fourier_sec.max b/graphics/ketcindy/ketcindyfolder/scripts/ketlib/maximaL/fourier_sec.max
new file mode 100644
index 0000000000..c70f7f465d
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/scripts/ketlib/maximaL/fourier_sec.max
@@ -0,0 +1,260 @@
+/*
+Package fourier_sec, to study piecewise defined functions
+(sectionally defined, hence the name).
+
+Author: Jose A. Vallejo
+ Faculty of Sciences
+ Universidad Autonoma de San Luis Potosi (Mexico)
+ http://galia.fc.uaslp.mx/~jvallejo
+
+It is assumed that the functions are defined using the format
+ if ... then ... else ...
+as, for example,
+(%i1) absolute(x):=if (x<=0) then -x elseif (x>0) then x$
+(it will not work with 'abs').
+It provides three functions:
+1. 'paritycheck', to check if a given piecewise defined
+ function is even or odd (or none). For instance,
+ (%i2) paritycheck(absolute(x),x);
+ (%o2) 0
+ A '0' means 'even', '1' is 'odd', and '-1' is 'none'
+2. 'fourier_sec_coeff', to compute the Fourier sine and cosine
+ coefficients. The function must have compact support.For
+ instance, for the unit step we have:
+ (%i3) h(x):=if (-%pi<=x and x<0) then 0 elseif (0<=x and x<=%pi) then 1$
+ (%i4) fourier_sec_coeff(h(x),x);
+ (%o4) [1/2,0,-((-1)^n-1)/(%pi*n)]
+3. 'fourier_sec_series', to compute the Fourier series, truncated
+ or not. The series for the unit step to the 10th order:
+ (%i5) fourier_sec_series(h(x),x,10);
+ (%o5) (2*sin(9*x))/(9*%pi)+(2*sin(7*x))/(7*%pi)+(2*sin(5*x))/(5*%pi)+(2*sin(3*x))/(3*%pi)+(2*sin(x))/%pi+1/2
+ and the whole Fourier series
+ (%i6) fourier_sec_series(h(x),x,inf);
+ (%o6) (sum(((1/n-(-1)^n/n)*sin(n*x))/%pi,n,1,inf))+1/2
+*/
+
+
+load(fourie)$
+
+load(simplify_sum)$
+
+paritycheck(funvar,x):=block([subintervals,subvalues,tmp1,tmp2,token1,token0,tmp3,
+ subvalues_list,subintervals_list,icentral:0,middle,minusmiddle,token2,
+ side_subintervals_list,L,side_subvalues_list,
+ zero_subintervals,tmp4,tmp5,non_zero_side_subvalues_list,
+ non_zero_side_subintervals_list,LL,token3,expr1,expr2],
+ local(M,N,P,Q,count1,count2,count3,count4),
+ subintervals:makelist(part(funvar,i),i,makelist(2*k-1,k,1,(length(funvar)-2)/2)),
+ subvalues:makelist(part(funvar,i),i,makelist(2*k,k,1,(length(funvar)-2)/2)),
+ for j:1 thru length(subintervals) do (if operatorp(subintervals[j],["<",">","<=",">="]) then tmp1[j]:1 else tmp1[j]:0),
+ tmp1:makelist(tmp1[j],j,1,length(subintervals)),
+ tmp2:sublist_indices(tmp1,lambda([x],x=1)),
+
+ /* if length(tmp2)=0 all the subintervals in the domain of funvar are bounded! */
+
+ if is(equal(length(tmp2),0)) then
+ (
+ subvalues_list:copylist(subvalues),
+ tmp3:copylist(subintervals),
+ for j:1 thru length(tmp3) do
+ (
+ M[j]:makelist(part(tmp3[j],k),k,1,length(tmp3[j])),
+ for m:1 thru 2 do N[j,m]:makelist(part(M[j],m,n),n,1,length(M[j])),
+ P[j]:append(N[j,1],N[j,2]),Q[j]:sort(delete(x,P[j]),"<")
+ ),
+ subintervals_list:makelist(Q[j],j,1,length(tmp3)),
+ for i:1 thru length(subintervals_list) do (if is(lmin(subintervals_list[i])*lmax(subintervals_list[i])<0) then icentral:i),
+ if is(icentral>0) then middle:subvalues_list[icentral],
+ if is(icentral>0) then
+ (if evenfunp(middle,x) then token2:0 elseif oddfunp(middle,x) then token2:1 else return(-1))
+ else
+
+ /* now we analyze what happens if icentral=0, so there are only side intervals */
+
+ (
+ /* as before, there must be an even number of symmetric intervals, otherwise -1 */
+ side_subintervals_list:copylist(subintervals_list),
+ if not(evenp(length(side_subintervals_list))) then return(-1),
+ L:length(side_subintervals_list)/2,
+ for k:1 thru L do count1[k]:charfun(is(equal(side_subintervals_list[k],reverse(map("-",side_subintervals_list[2*L+1-k]))))),
+ if sum(count1[j],j,1,L)#L then return(-1),
+ side_subvalues_list:copylist(subvalues_list),
+ for k:1 thru L do count2[k]:charfun(is(equalp(side_subvalues_list[k],ratsubst(-x,x,side_subvalues_list[2*L+1-k])))),
+ if is(equal(sum(count2[j],j,1,L),L)) then token3:0,
+ for k:1 thru L do count3[k]:charfun(is(equalp(side_subvalues_list[k],-ratsubst(-x,x,side_subvalues_list[2*L+1-k])))),
+ if is(equal(sum(count3[j],j,1,L),L)) then token3:1,
+ if is(not(equalp(token3,0)) and not(equalp(token3,1))) then return(-1) ,
+ return(token3)
+ ),
+
+ /* and what happens if icentral#0 */
+
+ side_subintervals_list:delete(subintervals_list[icentral],subintervals_list),
+ if is(equal(length(side_subintervals_list),0)) then (if is(equal(token1,token2)) then return(token1*token2) else return(-1)),
+ if not(evenp(length(side_subintervals_list))) then return(-1),
+ L:length(side_subintervals_list)/2,
+ for k:1 thru L do count1[k]:charfun(is(equal(side_subintervals_list[k],reverse(map("-",side_subintervals_list[2*L+1-k]))))),
+ if sum(count1[j],j,1,L)#L then return(-1),
+ side_subvalues_list:delete(subvalues_list[icentral],subvalues_list),
+
+ /* remove those subintervals in which funvar vanishes */
+
+ zero_subintervals:sublist_indices(side_subvalues_list,lambda([x],x=0)),
+ tmp4:copylist(side_subintervals_list),
+ for j:1 thru length(zero_subintervals) do
+ (tmp4:delete(side_subintervals_list[zero_subintervals[j]],tmp4)),
+ non_zero_side_subintervals_list:tmp4,
+ tmp5:copylist(side_subvalues_list),
+ for j:1 thru length(zero_subintervals) do
+ (tmp5:delete(side_subvalues_list[zero_subintervals[j]],tmp5)),
+ non_zero_side_subvalues_list:tmp5,
+
+ /* if length(non_zero_side_subintervals_list)=0 then we are done just with token2 */
+
+ if is(equal(length(non_zero_side_subintervals_list),0)) then return(token2),
+
+ /* otherwise, we must also take into account token3 */
+ LL:length(non_zero_side_subintervals_list)/2,
+ for k:1 thru LL do count2[k]:charfun(is(equalp(non_zero_side_subvalues_list[k],ratsubst(-x,x,non_zero_side_subvalues_list[2*LL+1-k])))),
+ if is(equal(sum(count2[j],j,1,LL),LL)) then token3:0,
+ for k:1 thru LL do count3[k]:charfun(is(equalp(non_zero_side_subvalues_list[k],-ratsubst(-x,x,non_zero_side_subvalues_list[2*LL+1-k])))),
+ if is(equal(sum(count3[j],j,1,LL),LL)) then token3:1,
+ if is(not(equal(token3,0) or equal(token3,1))) then return(-1) elseif
+ is(token2#token3) then return(-1)
+ elseif is(equal(token2,0)) then return(0)
+ elseif is(equal(token2,1)) then return(1)
+
+ ),
+
+ /* we continue here with unbounded intervals */
+
+ expr1:subvalues[tmp2[1]],
+ expr2:ratsubst(-x,x,subvalues[tmp2[2]]),
+ if is(equalp(expr1,expr2)) then token1:0
+ elseif is(equalp(expr1,-expr2)) then token1:1
+ else return(-1),
+
+ /* the problem when defining token1 is that if the asymptotic value is 0, then it is always token1:0 */
+ /* although the function could be odd. To cope with this, we define token0 below */
+
+ tmp3:makelist(subintervals[i],i,sublist_indices(tmp1,lambda([x],x=0))),
+ if is(equal(length(tmp3),0)) then return(token1),
+ subvalues_list:makelist(subvalues[i],i,sublist_indices(tmp1,lambda([x],x=0))),
+ token0:if member(0,makelist(subvalues[i],i,tmp2)) then 0 else 7,
+ for j:1 thru length(tmp3) do
+ (
+ M[j]:makelist(part(tmp3[j],k),k,1,length(tmp3[j])),
+ for m:1 thru 2 do N[j,m]:makelist(part(M[j],m,n),n,1,length(M[j])),
+ P[j]:append(N[j,1],N[j,2]),Q[j]:sort(delete(x,P[j]),"<")
+ ),
+ subintervals_list:makelist(Q[j],j,1,length(tmp3)),
+ for i:1 thru length(subintervals_list) do (if is(lmin(subintervals_list[i])*lmax(subintervals_list[i])<0) then icentral:i),
+ if is(icentral>0) then middle:subvalues_list[icentral],
+ if is(icentral>0) then
+ (if evenfunp(middle,x) then token2:0 elseif oddfunp(middle,x) then token2:1 else return(-1))
+ else
+
+ /* now we analyze what happens if icentral=0, so there are only non-bounded intervals and side intervals */
+
+ (
+ /* as before, there must be an even number of symmetric intervals, otherwise -1 */
+ side_subintervals_list:copylist(subintervals_list),
+ if not(evenp(length(side_subintervals_list))) then return(-1),
+ L:length(side_subintervals_list)/2,
+ for k:1 thru L do count1[k]:charfun(is(equal(side_subintervals_list[k],reverse(map("-",side_subintervals_list[2*L+1-k]))))),
+ if sum(count1[j],j,1,L)#L then return(-1),
+ side_subvalues_list:copylist(subvalues_list),
+ for k:1 thru L do count2[k]:charfun(is(equalp(side_subvalues_list[k],ratsubst(-x,x,side_subvalues_list[2*L+1-k])))),
+ if is(equal(sum(count2[j],j,1,L),L)) then token3:0,
+ for k:1 thru L do count3[k]:charfun(is(equalp(side_subvalues_list[k],-ratsubst(-x,x,side_subvalues_list[2*L+1-k])))),
+ if is(equal(sum(count3[j],j,1,L),L)) then token3:1,
+ if is(not(equal(token3,0)) and not(equal(token3,1))) then return(-1) elseif
+ is(not(equal(token1,token3)) and not(equal(token0,0))) then return(-1)
+ elseif is( equal(token0,0) and equal(token3,0)) then return(0)
+ elseif is( equal(token0,0) and equal(token3,1)) then return(1)
+ elseif is(not(equal(token0,0)) and equal(token1,token3)) then return(token3)
+ elseif is(not(equal(token0,0)) and not(equal(token1,token3))) then return(-1)
+ ),
+
+ /* and what happens if icentral#0 */
+
+ side_subintervals_list:delete(subintervals_list[icentral],subintervals_list),
+ if is(equal(length(side_subintervals_list),0)) then (if is(equal(token1,token2)) then return(token1*token2) else return(-1)),
+ if not(evenp(length(side_subintervals_list))) then return(-1),
+ L:length(side_subintervals_list)/2,
+ for k:1 thru L do count1[k]:charfun(is(equal(side_subintervals_list[k],reverse(map("-",side_subintervals_list[2*L+1-k]))))),
+ if sum(count1[j],j,1,L)#L then return(-1),
+ side_subvalues_list:delete(subvalues_list[icentral],subvalues_list),
+
+ /* remove those subintervals in which funvar vanishes */
+
+ zero_subintervals:sublist_indices(side_subvalues_list,lambda([x],x=0)),
+ tmp4:copylist(side_subintervals_list),
+ for j:1 thru length(zero_subintervals) do
+ (tmp4:delete(side_subintervals_list[zero_subintervals[j]],tmp4)),
+ non_zero_side_subintervals_list:tmp4,
+ tmp5:copylist(side_subvalues_list),
+ for j:1 thru length(zero_subintervals) do
+ (tmp5:delete(side_subvalues_list[zero_subintervals[j]],tmp5)),
+ non_zero_side_subvalues_list:tmp5,
+
+ /* if length(non_zero_side_subintervals_list)=0 then we are done just with token1 and token2 */
+
+ if is(equal(length(non_zero_side_subintervals_list),0)) then (if is(equal(token1,token2)) then return(token1*token2) else return(-1)),
+
+ /* otherwise, we must also take into account token3 */
+ LL:length(non_zero_side_subintervals_list)/2,
+ for k:1 thru LL do count2[k]:charfun(is(equalp(non_zero_side_subvalues_list[k],ratsubst(-x,x,non_zero_side_subvalues_list[2*LL+1-k])))),
+ if is(equal(sum(count2[j],j,1,LL),LL)) then token3:0,
+ for k:1 thru LL do count3[k]:charfun(is(equalp(non_zero_side_subvalues_list[k],-ratsubst(-x,x,non_zero_side_subvalues_list[2*LL+1-k])))),
+ if is(equal(sum(count3[j],j,1,LL),LL)) then token3:1,
+ if is(not(equal(token0,0)) and is(not(equal(token1,token2)) or not(equal(token1,token3)) or not(equal(token2,token3))) ) then return(-1)
+ elseif is(not(equal(token0,0)) and is(equal(token1,0)) ) then return(0)
+ elseif is(not(equal(token0,0)) and is(equal(token1,1)) ) then return(1)
+ elseif is( equal(token0,0) and equal(token3,0) and equal(token2,0)) then return(0)
+ elseif is( equal(token0,0) and equal(token3,1) and equal(token2,1)) then return(1)
+ else return(-1)
+
+)$
+
+fourier_sec_coeff(fuvar,x):=
+block([pp,LL,lm,a0,coeff],
+ local(a,b,n,MM,NN,PP,QQ),
+ declare(n,integer),
+ pp:((length(fuvar)/2)-1),
+ LL:makelist(part(fuvar,i),i,makelist(2*s-1,s,1,pp)),
+ for j:1 thru length(LL) step 1 do
+ (
+ MM[j]:makelist(part(LL[j],r),r,1,length(LL[j])),
+ for r:1 thru 2 do NN(j,r):=makelist(part(MM[j],r,k),k,1,length(MM[j])),
+ PP[j]:append(NN(j,1),NN(j,2)),QQ[j]:delete(x,PP[j])
+ ),
+ for i:1 thru pp step 1 do partsums[i]:sort(QQ[i],"<"),
+ for i:1 thru pp step 1 do partfunc[i]:part(fuvar,2*i),
+ lm:lmax(unique(flatten(makelist(QQ[q],q,1,length(LL))))),
+ a0:(1/(2*lm))*sum(integrate(partfunc[i],x,partsums[i][1],partsums[i][2]),i,1,pp),
+ if is(equal(paritycheck(fuvar,x),1)) then a(n):=0 else a(n):=(1/lm)*sum(adefint(partfunc[i]*cos(%pi*n*x/lm),x,partsums[i][1],partsums[i][2]),i,1,pp),
+ if is(equal(paritycheck(fuvar,x),0)) then b(n):=0 else b(n):=(1/lm)*sum(adefint(partfunc[i]*sin(%pi*n*x/lm),x,partsums[i][1],partsums[i][2]),i,1,pp),
+ coeff:[a0,simplify_sum(a(n)),simplify_sum(b(n))],
+ factor(ratsimp(coeff))
+)$
+
+fourier_sec_series(fuvar,x,u):=
+block([pp,LL,lm,a0,coeff],
+ local(a,b,n,MM,NN,PP,QQ),
+ declare(n,integer),
+ pp:((length(fuvar)/2)-1),
+ LL:makelist(part(fuvar,i),i,makelist(2*s-1,s,1,pp)),
+ for j:1 thru length(LL) step 1 do
+ (
+ MM[j]:makelist(part(LL[j],r),r,1,length(LL[j])),
+ for r:1 thru 2 do NN(j,r):=makelist(part(MM[j],r,k),k,1,length(MM[j])),
+ PP[j]:append(NN(j,1),NN(j,2)),QQ[j]:delete(x,PP[j])
+ ),
+ for i:1 thru pp step 1 do partsums[i]:sort(QQ[i],"<"),
+ for i:1 thru pp step 1 do partfunc[i]:part(fuvar,2*i),
+ lm:lmax(unique(flatten(makelist(QQ[q],q,1,length(LL))))),
+ a0:(1/(2*lm))*sum(integrate(partfunc[i],x,partsums[i][1],partsums[i][2]),i,1,pp),
+ if is(equal(paritycheck(fuvar,x),1)) then a(n):=0 else a(n):=(1/lm)*sum(adefint(partfunc[i]*cos(%pi*n*x/lm),x,partsums[i][1],partsums[i][2]),i,1,pp),
+ if is(equal(paritycheck(fuvar,x),0)) then b(n):=0 else b(n):=(1/lm)*sum(adefint(partfunc[i]*sin(%pi*n*x/lm),x,partsums[i][1],partsums[i][2]),i,1,pp),
+ a0+intosum(sum(a(n)*cos(%pi*n*x/lm),n,1,u))+intosum(sum(b(n)*sin(%pi*n*x/lm),n,1,u)))$ \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/scripts/ketlib/maximaL/matoperation.max b/graphics/ketcindy/ketcindyfolder/scripts/ketlib/maximaL/matoperation.max
new file mode 100644
index 0000000000..512a9ffb66
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/scripts/ketlib/maximaL/matoperation.max
@@ -0,0 +1,47 @@
+/* Maxima tips http://www.cymric.jp/maxima/tips.html */
+
+rowmult(X, n, c) := block([M],
+ M:matrix(),
+ for i:1 thru length(X) do
+ if i=n then M:addrow(M, c*row(X, i))
+ else M:addrow(M, row(X, i)),
+ M
+);
+rowadd(X, n, m, c) := block([M],
+ M:matrix(),
+ for i:1 thru length(X) do
+ if i=n then M:addrow(M, c * row(X, m) + row(X, i))
+ else M:addrow(M, row(X, i)),
+ M
+);
+rowch(X, m, n) := block([M],
+ M:matrix(),
+ for i:1 thru length(X) do
+ if i=m then M:addrow(M, row(X, n))
+ else if i=n then M:addrow(M, row(X, m))
+ else M:addrow(M, row(X, i)),
+ M
+);
+
+colmult(X, n, c) := block([M],
+ M:matrix(),
+ for i:1 thru length(transpose(X)) do
+ if i=n then M:addcol(M, c*col(X, i))
+ else M:addcol(M, col(X, i)),
+ M
+);
+coladd(X, n, m, c) := block([M],
+ M:matrix(),
+ for i:1 thru length(transpose(X)) do
+ if i=n then M:addcol(M, c * col(X, m) + col(X, i))
+ else M:addcol(M, col(X, i)),
+ M
+);
+colch(X, m, n) := block([M],
+ M:matrix(),
+ for i:1 thru length(transpose(X)) do
+ if i=m then M:addcol(M, col(X, n))
+ else if i=n then M:addcol(M, col(X, m))
+ else M:addcol(M, col(X, i)),
+ M
+);
diff --git a/graphics/ketcindy/ketcindyfolder/scripts/ketlib/maximaL/pdefourier.mac b/graphics/ketcindy/ketcindyfolder/scripts/ketlib/maximaL/pdefourier.mac
new file mode 100644
index 0000000000..7b968144a0
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/scripts/ketlib/maximaL/pdefourier.mac
@@ -0,0 +1,1199 @@
+/*
+Fourier analysis Maxima package
+
+Authors: Jose A. Vallejo
+ Faculty of Sciences
+ Universidad Autonoma de San Luis Potosi (Mexico)
+ http://galia.fc.uaslp.mx/~jvallejo
+
+ Emmanuel Roque
+ Faculty of Sciences
+ Universidad Autonoma de San Luis Potosi (Mexico)
+*/
+
+load(fourie)$
+load(simplify_sum)$
+load(draw)$
+/*The following rules are intented to work with intervals in "a canonical way"
+leq,geq,lss,grtr are for bounded intervals
+
+
+Note: Instead of using constantp inside of matchdeclare, numberp but this approach won't work if %pi is used, so probably is not an option since this is a Fourier package and %pi will appear most of the time. Another possible approach is to use freeof(var) instead of constantp
+*/
+matchdeclare(constn, constantp)$
+defrule(leq,constn>=xx,xx<=constn)$
+defrule(geq,xx>=constn,constn<=xx)$
+defrule(lss,constn>xx,xx<constn)$
+defrule(grtr,xx>constn,constn<xx)$
+
+/* fun_parts(expr,var)
+Input: piecewise defined function written in one of the following ways
+
+if x>=a_0 and x<=a_1 then expr1 elseif x>a_1 and x<= a_2 then expr2 ... elseif x>a_n and x<=a_{n+1} then expr_{n+1}
+
+if x<=a_0 then expr0 elseif x>a0 and x<=a1 then expr1 ... elseif x>=a_n then exprn
+
+Output: A list [[a0,a1,expr1],[a1,a2,expr2,]...]
+
+Important notes:
+-In all cases it is expected that a_i<a_{i+1}
+Writing (x<=7 and x>=6) instead of (x>=6 and x<=7) does not work.
+-If in the function definition some of the intervals are empty (e.g x>=3 and x<=-3) returns error.
+-Use of else is currently unsupported, the expr after else is ignored! Use elseif instead.
+-functionality with logical operator "or" is currently unsupported, will be treated same as "and".
+-fun_parts does not check if the intervals are disjoint!
+*/
+
+fun_parts(expr,var):=block(
+ [subint,subval,tmp,ll,tmp1,tmp2,xx,ans,tmp3,tmpb,leftU,rightU],
+ if not piecewisep(expr) then error("The function is not piecewise defined") else (
+ xx:var,
+ ll:(length(expr)-2)/2,
+ tmp:makelist(inpart(expr,i),i,makelist(2*k-1,k,1,ll)),
+ subval:makelist(inpart(expr,i),i,makelist(2*k,k,1,ll)),
+ tmp1:makelist(operatorp(tmp[j],["<",">","<=",">="]),j,1,ll),
+ tmp2:sublist_indices(tmp1,lambda([x],x=true)),
+ /*if tmp2 is an empty list then all the intervals in the domain
+ of the function are bounded */
+ if emptyp(tmp2) then(
+ /*Get rid of logical operators*/
+ tmp:makelist(makelist(inpart(tmp[k],i),i,1,2),k,1,ll),
+ /*Use canonical ordering*/
+ tmp:apply1(tmp,leq,geq,lss,grtr),
+ /*Extract subintervals*/
+ subint:makelist(makelist(inpart(tmp[i][j],j),j,1,2),i,1,ll),
+ /*Check for ill defined subintervals*/
+ tmp3:map(lambda([L],lfreeof(L,var)),subint),
+ if not emptyp(sublist_indices(tmp3,lambda([x],x=false))) then
+ error("Check function definition, some interval(s) appear to be empty or ill-defined. Read documentation for further details.")
+ else (ans:makelist([subint[k],subval[k]],k,1,ll),
+ return(ans) )
+ )
+ /*Function is not bounded*/
+ else(
+ if not is(tmp2=[1,ll]) then error("Check function definition, some interval(s) appear to be empty or ill-defined. Read documentation for further details.")
+ else (if is(ll=2) then(
+ tmp:apply1(tmp,leq,geq,lss,grtr),
+ leftU:[[minf,inpart(tmp[1],2)],subval[1]],
+ rightU:[[inpart(tmp[2],1),inf],subval[2]],
+ ans:[leftU,rightU],
+ return(ans)
+ )
+ elseif is(ll>2) then(
+ leftU:apply1(tmp[1],leq,geq,lss,grtr),
+ rightU:apply1(tmp[ll],leq,geq,lss,grtr),
+ leftU:[[minf,inpart(leftU,2)],subval[1]],
+ rightU:[[inpart(rightU,1),inf],subval[ll]],
+ /*Get rid of logical operators in the bounded intervals*/
+ tmpb:makelist(makelist(inpart(tmp[k],i),i,1,2),k,2,ll-1),
+ /*Use canonical ordering*/
+ tmpb:apply1(tmpb,leq,geq,lss,grtr),
+ /*Extract bounded subintervals*/
+ subint:makelist(makelist(inpart(tmpb[i][j],j),j,1,2),i,1,ll-2),
+ /*Check for ill-defined subintervals*/
+ tmp3:map(lambda([L],lfreeof(L,var)),subint),
+ if not emptyp(sublist_indices(tmp3,lambda([x],x=false))) then
+ error("Check function definition, some interval(s) appear to be empty or ill-defined. Read documentation for further details.")
+ else ( ans:append([leftU],makelist([subint[k],subval[k+1]],k,1,ll-2),[rightU]),
+ return(ans))
+ )
+
+ )
+ )
+))$
+
+/*bint_comp(L1,L2,var)
+Bounded intervals comparison
+Input: Two lists, L1 and L2, each one having the following format
+[[a_i,b_i],expr_i]
+Output: A flag used by parityL
+*/
+
+bint_comp(L1,L2,var):=block(
+ if is(L1[1][1]=-L2[1][2]) and is(L1[1][2]=-L2[1][1]) then(
+ if is(L1[2]=0) and is(L2[2]=0) then return('zero)
+ elseif equalp(L1[2],ratsubst(-var,var,L2[2])) then return('even)
+ elseif equalp(L1[2],-ratsubst(-var,var,L2[2])) then return('odd) else return('none)
+ )
+ else return('none)
+)$
+/* uint_comp(L1,L2,var)
+Unbounded intervals comparison
+Input: Two list, L1 and L2, corresponding to unbounded intervals in
+the following format
+[[minf,b_1],expr1] or [[a_2,inf],expr2]
+Output: A flag used by parityL
+It is assumed that parity check has already checked if a_1,b_2 are equal to minf,inf respectively.
+*/
+uint_comp(L1,L2,var):=block(
+ if is(L1[1][2]=-L2[1][1]) then(
+ if is(L1[2]=0) and is(L2[2]=0) then return('zero)
+ elseif equalp(L1[2],ratsubst(-var,var,L2[2])) then return('even)
+ elseif equalp(L1[2],-ratsubst(-var,var,L2[2])) then return('odd) else return('none)
+ )
+ else return('none)
+)$
+
+/*parityb(L,var)
+Input: A list returned by fun_parts of a bounded function
+Output: A list used by parityL
+*/
+parityb(L,var):=block(
+ [ll,icentral,aux,ans,llaux,Laux,paux],
+ ll:length(L),
+ /* Trivial case, just check if the only interval has
+ an even expression, an odd expression or neither of them.*/
+ if is(ll=1) and is(L[1][1][1]=-L[1][1][2]) then(
+ if evenfunp(L[1][2],var) then return('even)
+ elseif oddfunp(L[1][2],var) then return('odd)
+ else return('none)
+ )
+ elseif is(ll>1) then(
+ icentral:0,
+ /*Search if there is a central interval*/
+ for i:1 thru ll do (if is(L[i][1][1]*L[i][1][2]<0) then icentral:i),
+ /*Case 1: icentral=0 */
+ if is(icentral=0) then(
+ if not evenp(ll) then return('none) else(
+ aux:makelist(bint_comp(L[i],L[ll+1-i],var),i,1,ll/2),
+ if is(length(sublist_indices(aux,lambda([x],x=even or x=zero)))=ll/2)
+ then return('even)
+ elseif is(length(sublist_indices(aux,lambda([x],x=odd or x=zero)))=ll/2)
+ then return('odd)
+ else return('none)
+ )
+ )
+ /*icentral>0*/
+ elseif is(icentral>0) and oddp(ll) then(
+ /*Check parity of central element*/
+ if is(L[icentral][1][1]=-L[icentral][1][2]) then (
+ if evenfunp(L[icentral][2],var) then paux:'even
+ elseif oddfunp(L[icentral][2],var) then paux:'odd
+ else return('none),
+ Laux:delete(L[icentral],L),
+ aux:makelist(bint_comp(Laux[i],Laux[ll-i],var),i,1,(ll-1)/2),
+ if is(length(sublist_indices(aux,lambda([x],x=even or x=zero)))=(ll-1)/2) and is(paux=even)
+ then return('even)
+ elseif is(length(sublist_indices(aux,lambda([x],x=odd or x=zero)))=(ll-1)/2) and is(paux=odd)
+ then return('odd)
+ else return('none)
+ )
+ else return('none)
+ )
+ ))$
+
+
+
+/*parityL(L,var)
+
+Input: A list returned by fun_parts
+Output: the parity of the function
+
+Important notes:
+-
+*/
+parityL(L,var):=block(
+ [aux1,aux2,Laux,ll],
+ ll:length(L),
+ if (not boundedp(L)) and is(ll=2) then(
+ if is(uint_comp(L[1],L[2],var)=zero) or is(uint_comp(L[1],L[2],var)=even) then return('even)
+ elseif is(uint_comp(L[1],L[2],var)=odd) then
+ return('odd)
+ else return('none)
+ )
+ /*Check if there are unbounded intervals*/
+ elseif (not boundedp(L)) and is(ll>2) then(
+ aux1:uint_comp(L[1],L[ll],var),
+ Laux:delete(L[1],L),
+ Laux:delete(L[ll],Laux),
+ aux2:parityb(Laux,var),
+ if (is(aux1=zero) and is(aux2=even)) or
+ (is(aux1=even) and is(aux2=even)) then
+ return('even) elseif (is(aux1=zero) and is(aux2=odd)) or
+ (is(aux1=odd) and is(aux2=odd)) then return('odd)
+ else return('none)
+ )
+ else return(parityb(L,var))
+
+)$
+boundedp(L):=block(
+ [ll],
+ ll:length(L),
+ if is(L[1][1][1]=minf) and is (L[ll][1][2]=inf)
+ then return(false)
+ else return(true)
+)$
+
+piecewisep(expr):=if atom(expr) then false else is(inpart(expr,0)="if")$
+paritycheck(expr,var):=block(
+ if piecewisep(expr) then return(parityL(fun_parts(expr,var),var))
+ elseif listp(expr) then return(parityL(expr,var))
+ else (
+ if equalp(ratsubst(-var,var,expr),expr) then return('even)
+ elseif equalp(ratsubst(-var,var,expr),-expr) then return('odd)
+ else return('none)
+ )
+)$
+
+/*Check if the domain is bounded and symmetric [-L,L]
+symbintp(L)
+intput: a list L returned by fun_parts
+output: true or false
+*/
+
+symbintp(L):=if boundedp(L) and is(L[1][1][1]=-L[length(L)][1][2]) then L[length(L)][1][2] else false$
+
+/*integratepw(L,var)
+
+Integrate the list form of a piecewise defined function
+
+*/
+
+integratepw(L,var):=block(
+ [ll],
+ ll:length(L),
+ return(sum(integrate(L[i][2],var,L[i][1][1],L[i][1][2]),i,1,ll))
+)$
+
+/* sum2list(expr)
+Auxiliary function
+Input: An expression
+Output: A list whose elements are the terms of expression
+
+Important notes: sum2list does not check by itself if op(expr)="+" or not*/
+
+sum2list(expr):= if is(expr=0) then [0] elseif is(nterms(expr)=1) then [expr] else args(expr)$
+
+/*secsum2bl(L)
+Input: A list as in fun_parts output format
+Output:
+*/
+secsum2bl(L):=block(
+ [ll,laux],
+ ll:length(L),
+ laux:makelist(i,i,1,ll),
+ create_list([L[i][1],y],i,laux,y,sum2list(L[i][2]))
+)$
+
+/*Match rules for special cases*/
+matchdeclare(nexp,lambda([e],e#0 and nonnegintegerp(e)))$
+matchdeclare(nfreq,lambda([e],e#0 and nonnegintegerp(e)))$
+matchdeclare(const,lambda([e],e#0 and freeof(xargument,e)))$
+/*matchdeclare(argtrig,lambda([e],e#0 and constantp(e)))$
+defmatch(powx,const*xargument^nexp,xargument)$*/
+defmatch(powxsin,const*xargument^nexp*sin(nfreq*%pi*xargument/pargument),xargument,pargument)$
+defmatch(powxcos,const*xargument^nexp*cos(nfreq*%pi*xargument/pargument),xargument,pargument)$
+defmatch(multsin,const*sin(nfreq*%pi*xargument/pargument),xargument,pargument)$
+defmatch(multcos,const*cos(nfreq*%pi*xargument/pargument),xargument,pargument)$
+/*powxcos_int
+Computes \int_a^b (x^r*cos(n*%pi*x/L)dx for r>=0
+*/
+powxcos_int(pow,freq,p,a,b):=block(
+ if is(freq=0) then (b^(pow+1)-a^(pow+1))/(pow+1)
+ elseif is(pow=0) then (p/(%pi*freq))*(sin(freq*%pi*b/p)-sin(freq*%pi*a/p))
+ elseif is(pow>0) then (p/(%pi*freq))*(b^pow*sin(freq*%pi*b/p)-a^pow*sin(freq*%pi*a/p))-(p*pow/(freq*%pi)*powxsin_int(pow-1,freq,p,a,b))
+)$
+/*powxsin_int
+Computes \int_a^b x^r*sin(n*%pi*x/L) dx for r>=0 */
+powxsin_int(pow,freq,p,a,b):=block(
+ if is(freq=0) then 0
+ elseif is(pow=0) then (p/(%pi*freq))*(cos(freq*%pi*a/p)-cos(freq*%pi*b/p))
+ elseif is(pow>0) then (p/(%pi*freq))*(a^pow*cos(freq*%pi*a/p)-b^pow*cos(freq*%pi*b/p))+(p*pow/(freq*%pi)*powxcos_int(pow-1,freq,p,a,b))
+)$
+/*Heuristic a_n
+
+*/
+heuristic_an(expr,var,p,a,b):=block(
+ [n,ans],
+ declare(n,integer),
+ if listp(powxsin(expr,var,p)) then (
+ if is(a=-b) and evenp(nexp) then 0 else(
+ ans:(const/(2*p))*powxsin_int(nexp,nfreq+n,p,a,b)+ev((const/(2*p))*powxsin_int(nexp,nfreq-n,p,a,b),noeval,n),
+ remove(n,integer),
+ ans
+ )
+ )
+ elseif listp(powxcos(expr,var,p)) then (
+ if is(a=-b) and oddp(nexp) then 0 else(
+ ans:(const/(2*p))*powxcos_int(nexp,nfreq+n,p,a,b)+ev((const/(2*p))*powxcos_int(nexp,nfreq-n,p,a,b),noeval,n),
+ remove(n,integer),
+ ans)
+ )
+ elseif listp(multsin(expr,var,p)) then(
+ if is(a=-b) then 0 else(
+ ans:(const/(2*p))*powxsin_int(0,nfreq+n,p,a,b)+ev((const/(2*p))*powxsin_int(0,nfreq-n,p,a,b),noeval,n),
+ remove(n,integer),
+ ans
+ )
+ )
+ elseif listp(multcos(expr,var,p)) then (
+ ans:(const/(2*p))*powxcos_int(0,nfreq+n,p,a,b)+ev((const/(2*p))*powxcos_int(0,nfreq-n,p,a,b),noeval,n),
+ remove(n,integer),
+ ans
+ )
+ else(
+ ans:adefint(expr*cos(n*%pi*var/p),var,a,b)/p,
+ remove(n,integer),
+ ans
+ )
+)$
+/*Heuristic b_n
+
+*/
+heuristic_bn(expr,var,p,a,b):=block(
+ [n,ans],
+ declare(n,integer),
+ if listp(powxsin(expr,var,p)) then (
+ if is(a=-b) and oddp(nexp) then 0 else(
+ ans:(-const/(2*p))*powxcos_int(nexp,nfreq+n,p,a,b)+ev((const/(2*p))*powxcos_int(nexp,nfreq-n,p,a,b),noeval,n),
+ remove(n,integer),
+ ans
+ )
+ )
+ elseif listp(powxcos(expr,var,p)) then (
+ if is(a=-b) and evenp(nexp) then 0 else(
+ ans:(const/(2*p))*powxsin_int(nexp,nfreq+n,p,a,b)+ev((const/(2*p))*powxsin_int(nexp,n-nfreq,p,a,b),noeval,n),
+ remove(n,integer),
+ ans
+ )
+ )
+ elseif listp(multsin(expr,var,p)) then(
+ ans:(-const/(2*p))*powxcos_int(0,nfreq+n,p,a,b)+ev((const/(2*p))*powxcos_int(0,nfreq-n,p,a,b),noeval,n),
+ remove(n,integer),
+ ans
+ )
+ elseif listp(multcos(expr,var,p)) then (
+ if is(a=-b) then 0 else(
+ ans:(const/(2*p))*powxsin_int(0,nfreq+n,p,a,b)+ev((const/(2*p))*powxsin_int(0,n-nfreq,p,a,b),noeval,n),
+ remove(n,integer),
+ ans
+ )
+ )
+ else(
+ ans:adefint(expr*sin(n*%pi*var/p),var,a,b)/p,
+ remove(n,integer),
+ ans
+ )
+)$
+
+/*foucoeffpw(L,var)
+Fourier coefficients of a piecewise defined function
+Currently it only works with functions defined on an interval of the form [-p,p].
+The output is a list of the form [a0,a1,b1,an,bn]
+*/
+
+foucoeffpw(L,var):=block(
+ [llaux,ll,a0,an,bn,answ,lm],
+ ll:length(L),
+ lm:(L[ll][1][2]-L[1][1][1])/2, /*For more general intervals*/
+ Laux:secsum2bl(L),
+ llaux:length(Laux),
+ if is(parityL(L,var)=odd) then (
+ a0:0, an:0,
+ bn:sum(heuristic_bn(Laux[i][2],var,lm,Laux[i][1][1],Laux[i][1][2]),i,1,llaux),
+ answ:[a0,an,simplify_sum(bn)],
+ return(ratsimp(answ)))
+ elseif is(parityL(L,var)=even) then (
+ a0:(1/(2*lm))*integratepw(L,var),
+ an:sum(heuristic_an(Laux[i][2],var,lm,Laux[i][1][1],Laux[i][1][2]),i,1,llaux),
+ bn:0,
+ answ:[simplify_sum(a0),simplify_sum(an),bn],
+ return(ratsimp(answ)))
+ else(
+ a0:(1/(2*lm))*integratepw(L,var),
+ an:sum(heuristic_an(Laux[i][2],var,lm,Laux[i][1][1],Laux[i][1][2]),i,1,llaux),
+ bn:sum(heuristic_bn(Laux[i][2],var,lm,Laux[i][1][1],Laux[i][1][2]),i,1,llaux),
+ answ:[a0,an,bn],
+ answ:map(simplify_sum,answ),
+ return(ratsimp(answ) ))
+)$
+
+foucoeffterm(term,var,p):=block(
+ [a0,bn,an,ans],
+ if listp(term) then(
+ /* if is(symbintp(term,var)=p) then */
+ return(foucoeffpw(term,var))
+ /* else error("Domain of the piecewise function is not valid. Read the documentation for further details")*/
+ )
+ elseif piecewisep(term) then(
+ /*Check if the domain is valid*/
+ /*if is(symbintp(fun_parts(term,var))=p) then*/
+ if is(boundedp(fun_parts(term,var))) then
+ return(foucoeffpw(map(lambda([e],[e[1],expand(trigrat(e[2]))]),fun_parts(term,var)),var))
+ else error("Domain of the piecewise function is not valid. Read the documentation for further details")
+ )
+ else(
+ /*Check parity of term*/
+ if is(paritycheck(term,var)=even) then(
+ a0:ratsimp((1/(2*p))*adefint(term,var,-p,p)),
+ an:heuristic_an(term,var,p,-p,p),
+ bn:0,
+ ans:ratsimp([a0,an,bn]),
+ return(ans)
+ )
+ elseif is(paritycheck(term,var)=odd) then(
+ a0:0, an:0,
+ bn:heuristic_bn(term,var,p,-p,p),
+ ans:ratsimp([a0,an,bn]),
+ return(ans)
+ )
+ else(
+ a0:ratsimp((1/(2*p))*adefint(term,var,-p,p)),
+ an:heuristic_an(term,var,p,-p,p),
+ bn:heuristic_bn(term,var,p,-p,p),
+ ans:ratsimp([a0,an,bn]),
+ return(ans)
+ )
+ )
+)$
+
+list2bl(L):=block(
+ [ll,laux],
+ ll:length(L),
+ laux:makelist(i,i,1,ll),
+ create_list(y,i,laux,y,sum2list(L[i]))
+)$
+
+trigpattern(term,var,p):=block(
+ if listp(powxsin(term,var,p)) then return(nfreq)
+ elseif listp(powxcos(term,var,p)) then return(nfreq)
+ elseif listp(multcos(term,var,p)) then return(nfreq)
+ elseif listp(multsin(term,var,p)) then return(nfreq)
+ else return(false)
+)$
+
+searchpoles_term(term,var,p):=block(
+ [L,Laux,indx_aux,indx],
+ if listp(term) then(
+ L:secsum2bl(term),
+ indx_aux:map(lambda([e],trigpattern(e[2],var,p)),L),
+ indx:unique(sublist(indx_aux,integerp)),
+ return(indx)
+ )
+ elseif piecewisep(term) then(
+ Laux:map(lambda([e],[e[1],expand(trigrat(e[2]))]),fun_parts(term,var)),
+ L:secsum2bl(Laux),
+ indx_aux:map(lambda([e],trigpattern(e[2],var,p)),L),
+ indx:unique(sublist(indx_aux,integerp)),
+ return(indx)
+ ) else(
+ indx_aux:trigpattern(term,var,p),
+ if integerp(indx_aux) then return([indx_aux])
+ else return([])
+ )
+)$
+
+searchpoles(expr,var,p):=block(
+ [L,Laux,indx],
+ Laux:sum2list(expand(expr)),
+ Laux:map(lambda([e],if not piecewisep(e) then expand(trigrat(e)) else e),Laux),
+ L:list2bl(Laux),
+ indx:apply(append,map(lambda([e],searchpoles_term(e,var,p)),L)),
+ return(unique(indx))
+ )$
+
+fouriercoeff(expr,var,p):=block(
+ [ans,Llist,Laux,coeffpoles,poles,n],
+ Laux:sum2list(expand(expr)),
+ Llist:map(lambda([e],if not piecewisep(e) then expand(trigrat(e)) else e),Laux),
+ Llist:list2bl(Llist),
+ ans:lsum(y,y,map(lambda([e],foucoeffterm(e,var,p)),Llist)),
+ ans:ratsimp(ans),
+ poles:searchpoles(expr,var,p),
+ coeffpoles:makelist(at([i,ans[2],ans[3]],n=i),i,poles),
+ declare(n,integer),
+ coeffpoles:ev(coeffpoles),
+ ans:ev(ans),
+ remove(n,integer),
+ return(ratsimp([ans,coeffpoles]))
+)$
+
+fouriercoeff_expand(fcoeff,var,p,NN):=block(
+ [ans,a0,an,bn,poles,indx_poles,polessum,sl_indx,laux],
+ [[a0,an,bn],poles]:fcoeff,
+ an:ev(an),
+ bn:ev(bn),
+ if emptyp(poles) then(
+ ans:a0+sum(at(an*cos(n*%pi*var/p)+bn*sin(n*%pi*var/p),n=n),n,1,NN),
+ return(ans)
+ ) else(
+ indx_poles:makelist(poles[i][1],i,1,length(poles)),
+ if is(NN=inf) then(
+ polessum:sum(poles[i][2]*cos(poles[i][1]*%pi*var/p)+poles[i][3]*sin(poles[i][1]*%pi*var/p),i,1,length(poles)),
+ ans:a0+polessum+sum(at(an*cos(n*%pi*var/p)+bn*sin(n*%pi*var/p),n=n),n,1,inf),
+ if is(an=0) and is(bn=0) then return(ans),
+ print("The sum is over \\N -",setify(indx_poles)),
+ return(ans)
+ )
+ else(
+ sl_indx:sublist_indices(indx_poles,lambda([e],is(e<=NN))),
+ polessum:lsum(poles[i][2]*cos(poles[i][1]*%pi*var/p)+poles[i][3]*sin(poles[i][1]*%pi*var/p),i,sl_indx),
+ laux:listify(setdifference(setify(makelist(i,i,1,NN)),setify(indx_poles))),
+ ans:a0+polessum+lsum(at(an*cos(n*%pi*var/p)+bn*sin(n*%pi*var/p),n=i),i,laux),
+ return(ans)
+ )
+ )
+)$
+
+fourier_series(expr,var,p,NN):=block(
+ [fcoeff,ans],
+ fcoeff:fouriercoeff(expr,var,p),
+ ans:fouriercoeff_expand(fcoeff,var,p,NN),
+ ans
+)$
+
+fourier_amplitudes(expr,var,p,N):=block(
+ [a0,an,bn,ans,poles,indx_poles,polelist,sl_indx,laux],
+ [[a0,an,bn],poles]:fouriercoeff(expr,var,p),
+ an:ev(an),
+ bn:ev(bn),
+ if emptyp(poles) then(
+ ans:makelist(at([n,sqrt(an^2+bn^2)],n=i),i,1,N),
+ /*ans:float(ans),*/
+ return(ans)) else(
+ indx_poles:makelist(poles[i][1],i,1,length(poles)),
+ sl_indx:sublist_indices(indx_poles,lambda([e],is(e<N))),
+ polelist:makelist([poles[i][1],sqrt(poles[i][2]^2+poles[i][3]^2)],i,sl_indx),
+ laux:listify(setdifference(setify(makelist(i,i,1,N)),setify(indx_poles))),
+ ans:append(polelist,makelist(at([n,sqrt(an^2+bn^2)],n=i),i,laux)),
+ /*ans:float(ans),*/
+ ans:sort(ans,lambda([a,b],a[1]<b[1])),
+ return(ans)
+ )
+)$
+
+fourier_freq_list(expr,var,p,N):=block(
+ [modules],
+ modules:float(fourier_amplitudes(expr,var,p,N))
+)$
+
+fourier_freq(expr,var,p,N):=block(
+ [modules],
+ modules:float(fourier_amplitudes(expr,var,p,N)),
+ draw2d(points_joined=impulses,line_width=4,color="blue",points(modules),
+ xlabel="w(n)=nw_0",ylabel="|c_n|",axis_top=false,axis_right=false,xtics=1,user_preamble="set grid ytics")
+)$
+
+wxfourier_freq(expr,var,p,N):=block(
+ [modules],
+ modules:float(fourier_amplitudes(expr,var,p,N)),
+ wxdraw2d(points_joined=impulses,line_width=4,color="blue",points(modules),
+ xlabel="w(n)=nw_0",ylabel="|c_n|",axis_top=false,axis_right=false,xtics=1,user_preamble="set grid ytics")
+)$
+
+atan_fourier(an,bn):=if is(an=0) and is(bn=0) then 0 else atan2(an,bn)$
+
+fourier_phshift(expr,var,p,N):=block(
+ [a0,an,bn,ans,poles,indx_poles,polelist,sl_indx,laux],
+ [[a0,an,bn],poles]:fouriercoeff(expr,var,p),
+ an:ev(an),
+ bn:ev(bn),
+ if emptyp(poles) then(
+ ans:makelist([i,atan_fourier(at(bn,n=i),at(an,n=i))],i,1,N),
+ /*ans:float(ans),*/
+ return(ans)) else(
+ indx_poles:makelist(poles[i][1],i,1,length(poles)),
+ sl_indx:sublist_indices(indx_poles,lambda([e],is(e<N))),
+ polelist:makelist([poles[i][1],atan_fourier(poles[i][3],poles[i][2])],i,sl_indx),
+ laux:listify(setdifference(setify(makelist(i,i,1,N)),setify(indx_poles))),
+ ans:append(polelist,makelist([i,atan_fourier(at(bn,n=i),at(an,n=i))],i,laux)),
+ /*ans:float(ans),*/
+ ans:sort(ans,lambda([a,b],a[1]<b[1])),
+ return(ans)
+ )
+)$
+
+
+
+fourier_harm(expr,var,p,N):=block(
+ [amplitudes,phshift,ans],
+ amplitudes:fourier_amplitudes(expr,var,p,N),
+ phshift:fourier_phshift(expr,var,p,N),
+ ans:makelist(amplitudes[i][2]*cos(i*%pi*var/p-phshift[i][2]),i,1,N),
+ return(ans)
+)$
+
+chop(expr,[N]):=if emptyp(N) then scanmap(lambda([x],if is(numberp(x)) then (if is(abs(x)<1.0*10^(-12)) then 0.0 else x) else x),expr)
+else scanmap(lambda([x],if is(numberp(x)) then (if is(abs(x)<1.0*10^(-N[1])) then 0.0 else x) else x),expr)$
+
+oddextension_pwterm(L,var):=block(
+ [Laux],
+ Laux:[[-L[1][2],-L[1][1]],-ratsubst(-x,x,L[2])],
+ Laux
+)$
+
+oddextensionpw(L,var):=block(
+ [Lodd],
+ Lodd:append(reverse(map(lambda([e],oddextension_pwterm(e,var)),L)),L),
+ Lodd
+)$
+
+evenextension_pwterm(L,var):=block(
+ [Laux],
+ Laux:[[-L[1][2],-L[1][1]],ratsubst(-x,x,L[2])],
+ Laux
+)$
+
+evenextensionpw(L,var):=block(
+ [Lodd],
+ Lodd:append(reverse(map(lambda([e],evenextension_pwterm(e,var)),L)),L),
+ Lodd
+)$
+
+odd_extension(expr,var,p):=block(
+ [Laux],
+ if piecewisep(expr) then(
+ Laux:fun_parts(expr,var),
+ if is(Laux[1][1][1]=0) and is(Laux[length(Laux)][1][2]=p) then return(oddextensionpw(Laux,var))
+ else error("The domain must be of the form [0,p]")
+ )
+ else(
+ Laux:[[[0,p],expr]],
+ return(oddextensionpw(Laux,var))
+ )
+)$
+
+even_extension(expr,var,p):=block(
+ [Laux],
+ if piecewisep(expr) then(
+ Laux:fun_parts(expr,var),
+ if is(Laux[1][1][1]=0) and is(Laux[length(Laux)][1][2]=p) then return(evenextensionpw(Laux,var))
+ else error("The domain must be of the form [0,p]")
+ )
+ else(
+ Laux:[[[0,p],expr]],
+ return(evenextensionpw(Laux,var))
+ )
+)$
+
+/*foucoscoeff(expr,var,p):=block(
+ [Laux,fcoeff,a0,an,bn,poles],
+ Laux:even_extension(expr,var,p),
+ [[a0,an,bn],poles]:fouriercoeff(Laux,var,p),
+ fcoeff:[[a0,an],map(lambda([e],[e[1],e[2]]),poles)],
+ return(fcoeff)
+)$
+
+fousincoeff(expr,var,p):=block(
+ [Laux,fcoeff,a0,an,bn,poles],
+ Laux:odd_extension(expr,var,p),
+ [[a0,an,bn],poles]:fouriercoeff(Laux,var,p),
+ fcoeff:[[bn],map(lambda([e],[e[1],e[3]]),poles)],
+ return(fcoeff)
+)$
+*/
+
+/*Here we have the new implementation of fouriersincoeff and fouriercoscoeff*/
+
+fouriersincoeffpw(Llist,var):=block(
+ [llaux,ll,bn,answ,lm],
+ ll:length(Llist),
+ lm:(Llist[ll][1][2]-Llist[1][1][1]), /*No need to divide by 2*/
+ Laux:secsum2bl(Llist),
+ llaux:length(Laux),
+ bn:2*sum(heuristic_bn(Laux[i][2],var,lm,Laux[i][1][1],Laux[i][1][2]),i,1,llaux),
+ answ:[bn],
+ answ:map(simplify_sum,answ),
+ return(ratsimp(answ) )
+)$
+
+fouriercoscoeffpw(Llist,var):=block(
+ [llaux,ll,a0,an,answ,lm],
+ ll:length(Llist),
+ lm:(Llist[ll][1][2]-Llist[1][1][1]), /*No need to divide by 2*/
+ Laux:secsum2bl(Llist),
+ llaux:length(Laux),
+ a0:(1/(lm))*integratepw(Llist,var),
+ an:2*sum(heuristic_an(Laux[i][2],var,lm,Laux[i][1][1],Laux[i][1][2]),i,1,llaux),
+ answ:[a0,an],
+ answ:map(simplify_sum,answ),
+ return(ratsimp(answ) )
+)$
+
+fouriersincoeffterm(term,var,p):=block(
+ [bn,ans],
+ if listp(term) then(
+ /* if is(symbintp(term,var)=p) then */
+ return(fouriersincoeffpw(term,var))
+ /* else error("Domain of the piecewise function is not valid. Read the documentation for further details")*/
+ )
+ elseif piecewisep(term) then(
+ /*Check if the domain is valid*/
+ /*if is(symbintp(fun_parts(term,var))=p) then*/
+ if is(boundedp(fun_parts(term,var))) then
+ return(fouriersincoeffpw(map(lambda([e],[e[1],expand(trigrat(e[2]))]),fun_parts(term,var)),var))
+ else error("Domain of the piecewise function is not valid. Read the documentation for further details")
+ )
+ else(
+ bn:2*heuristic_bn(term,var,p,0,p),
+ ans:ratsimp([bn]),
+ return(ans)
+ )
+)$
+
+fouriercoscoeffterm(term,var,p):=block(
+ [a0,an,ans],
+ if listp(term) then(
+ /* if is(symbintp(term,var)=p) then */
+ return(fouriercoscoeffpw(term,var))
+ /* else error("Domain of the piecewise function is not valid. Read the documentation for further details")*/
+ )
+ elseif piecewisep(term) then(
+ /*Check if the domain is valid*/
+ /*if is(symbintp(fun_parts(term,var))=p) then*/
+ if is(boundedp(fun_parts(term,var))) then
+ return(fouriercoscoeffpw(map(lambda([e],[e[1],expand(trigrat(e[2]))]),fun_parts(term,var)),var))
+ else error("Domain of the piecewise function is not valid. Read the documentation for further details")
+ )
+ else(
+ a0:ratsimp((1/p)*adefint(term,var,0,p)),
+ an:2*heuristic_an(term,var,p,0,p),
+ ans:ratsimp([a0,an]),
+ return(ans)
+ )
+)$
+
+fouriersincoeff(expr,var,p):=block(
+ [ans,Llist,Laux,coeffpoles,poles,n],
+ Laux:sum2list(expand(expr)),
+ Llist:map(lambda([e],if not piecewisep(e) then expand(trigrat(e)) else e),Laux),
+ Llist:list2bl(Llist),
+ ans:lsum(y,y,map(lambda([e],fouriersincoeffterm(e,var,p)),Llist)),
+ ans:ratsimp(ans),
+ poles:searchpoles(expr,var,p),
+ /*Now there is only a list of the form [bn]*/
+ coeffpoles:makelist(at([i,ans[1]],n=i),i,poles),
+ declare(n,integer),
+ coeffpoles:ev(coeffpoles),
+ ans:ev(ans),
+ remove(n,integer),
+ return(ratsimp([ans,coeffpoles]))
+)$
+
+fouriercoscoeff(expr,var,p):=block(
+ [ans,Llist,Laux,coeffpoles,poles,n],
+ Laux:sum2list(expand(expr)),
+ Llist:map(lambda([e],if not piecewisep(e) then expand(trigrat(e)) else e),Laux),
+ Llist:list2bl(Llist),
+ ans:lsum(y,y,map(lambda([e],fouriercoscoeffterm(e,var,p)),Llist)),
+ ans:ratsimp(ans),
+ poles:searchpoles(expr,var,p),
+ /*Now there is only a list of the form [a0,an]*/
+ coeffpoles:makelist(at([i,ans[2]],n=i),i,poles),
+ declare(n,integer),
+ coeffpoles:ev(coeffpoles),
+ ans:ev(ans),
+ remove(n,integer),
+ return(ratsimp([ans,coeffpoles]))
+)$
+
+fouriersincoeff_expand(sincoeff,var,p,NN):=block(
+ [ans,bn,poles,indx_poles,polessum,sl_indx,laux],
+ [[bn],poles]:sincoeff,
+ bn:ev(bn),
+ if emptyp(poles) then(
+ ans:sum(at(bn*sin(n*%pi*var/p),n=n),n,1,NN),
+ return(ans)
+ ) else(
+ indx_poles:makelist(poles[i][1],i,1,length(poles)),
+ if is(NN=inf) then(
+ polessum:sum(poles[i][2]*sin(poles[i][1]*%pi*var/p),i,1,length(poles)),
+ ans:polessum+sum(at(bn*sin(n*%pi*var/p),n=n),n,1,inf),
+ if is(bn=0) then return(ans),
+ print("The sum is over \\N-",setify(indx_poles)),
+ return(ans)
+ )
+ else(
+ sl_indx:sublist_indices(indx_poles,lambda([e],is(e<=NN))),
+ polessum:lsum(poles[i][2]*sin(poles[i][1]*%pi*var/p),i,sl_indx),
+ laux:listify(setdifference(setify(makelist(i,i,1,NN)),setify(indx_poles))),
+ ans:polessum+lsum(at(bn*sin(n*%pi*var/p),n=i),i,laux),
+ return(ans)
+ )
+ )
+)$
+
+fouriercoscoeff_expand(coscoeff,var,p,NN):=block(
+ [ans,a0,an,poles,indx_poles,polessum,sl_indx,laux],
+ [[a0,an],poles]:coscoeff,
+ an:ev(an),
+ if emptyp(poles) then(
+ ans:a0+sum(at(an*cos(n*%pi*var/p),n=n),n,1,NN),
+ return(ans)
+ ) else(
+ indx_poles:makelist(poles[i][1],i,1,length(poles)),
+ if is(NN=inf) then(
+ polessum:sum(poles[i][2]*cos(poles[i][1]*%pi*var/p),i,1,length(poles)),
+ ans:a0+polessum+sum(at(an*cos(n*%pi*var/p),n=n),n,1,inf),
+ if is(an=0) then return(ans),
+ print("The sum is over \\N -",setify(indx_poles)),
+ return(ans)
+ )
+ else(
+ sl_indx:sublist_indices(indx_poles,lambda([e],is(e<=NN))),
+ polessum:lsum(poles[i][2]*cos(poles[i][1]*%pi*var/p),i,sl_indx),
+ laux:listify(setdifference(setify(makelist(i,i,1,NN)),setify(indx_poles))),
+ ans:a0+polessum+lsum(at(an*cos(n*%pi*var/p),n=i),i,laux),
+ return(ans)
+ )
+ )
+)$
+
+fouriersin_series(expr,var,p,NN):=block(
+ [ans,sincoeff],
+ sincoeff:fouriersincoeff(expr,var,p),
+ ans:fouriersincoeff_expand(sincoeff,var,p,NN),
+ ans
+)$
+
+fouriercos_series(expr,var,p,NN):=block(
+ [ans,coscoeff],
+ coscoeff:fouriercoscoeff(expr,var,p),
+ ans:fouriercoscoeff_expand(coscoeff,var,p,NN),
+ ans
+)$
+
+real2complex_fcoeff(fcoeff):=block(
+ [c0,cn,cpoles,rpoles,a0,an,bn],
+ [[a0,an,bn],rpoles]:fcoeff,
+ c0:a0,
+ cn:(an-%i*bn)/2,
+ cpoles:map(lambda([e],[e[1],(e[2]-%i*e[3])/2]),rpoles),
+ ratsimp([[c0,cn],cpoles])
+)$
+
+cfouriercoeff(expr,var,p):=real2complex_fcoeff(fouriercoeff(expr,var,p))$
+
+cfouriercoeff_expand(cfcoeff,var,p,NN):=block(
+ [ans,c0,cn,cpoles,indx_cpoles,cpolessumpos,cpolessumneg,sl_indx,laux],
+ [[c0,cn],cpoles]:cfcoeff,
+ an:ev(cn),
+ if emptyp(cpoles) then(
+ if is(NN=inf) then(
+ ans:c0+sum(at(cn*exp(%i*n*%pi*var/p),n=n),n,minf,inf),
+ print("The sum is over \\N-\{0\}"),
+ return(ans)
+ ) else(
+ ans:c0+sum(at(conjugate(cn)*exp(%i*-n*%pi*var/p),n=n),n,1,NN)
+ +sum(at(cn*exp(%i*n*%pi*var/p),n=n),n,1,NN),
+ return(ratsimp(demoivre(ans))))
+ ) else(
+ indx_cpoles:map(first,cpoles),
+ if is(NN=inf) then(
+ cpolessumpos:sum(cpoles[i][2]*exp(%i*cpoles[i][1]*%pi*var/p),i,1,length(cpoles)),
+ cpolessumneg:sum(conjugate(cpoles[i][2])*exp(-%i*cpoles[i][1]*%pi*var/p),i,1,length(cpoles)),
+ ans:c0+cpolessumpos+cpolessumneg+sum(at(cn*exp(%i*n*%pi*var/p),n=n),n,minf,inf),
+ if is(cn=0) then return(ans),
+ print("The sum is over \\N -",setify(append(indx_cpoles,[0]))),
+ return(ans)
+ )
+ else(
+ sl_indx:sublist_indices(indx_cpoles,lambda([e],is(e<=NN))),
+ cpolessumpos:lsum(cpoles[i][2]*exp(%i*cpoles[i][1]*%pi*var/p),i,sl_indx),
+ cpolessumneg:lsum(conjugate(cpoles[i][2])*exp(-%i*cpoles[i][1]*%pi*var/p),i,sl_indx),
+ laux:listify(setdifference(setify(makelist(i,i,1,NN)),setify(indx_cpoles))),
+ ans:c0+cpolessumpos+cpolessumneg+lsum(at(cn*exp(%i*n*%pi*var/p),n=i),i,laux)
+ +lsum(at(conjugate(cn)*exp(-%i*n*%pi*var/p),n=i),i,laux),
+ return(ratsimp(demoivre(ans)))
+ )
+ )
+)$
+
+cfourier_series(expr,var,p,NN):=cfouriercoeff_expand(cfouriercoeff(expr,var,p),var,p,NN)$
+
+evalpole_scn(bfn,polesf,indx_pf,indx):=block([n],
+ if member(indx,indx_pf) then return(assoc(indx,polesf))
+ else return(at(bfn,n=indx))
+)$
+
+fourier_heatcoeff(Qexpr,fexpr,var,p,kap):=block(
+ [bnf,bnQ,polesf,polesQ,indxpf,indxpQ,indxp,n,un,polesU,ans],
+ /* [[bnf],polesf]:fousincoeff(fexpr,var,p),
+ [[bnQ],polesQ]:fousincoeff(Qexpr,var,p), */
+ [[bnf],polesf]:fouriersincoeff(fexpr,var,p),
+ [[bnQ],polesQ]:fouriersincoeff(Qexpr,var,p),
+ declare(n,integer),
+ un:bnf*exp(-(n*%pi/p)^2*kap*t)+integrate(at(bnQ,t=s)*exp(-(n*%pi/p)^2*kap*(t-s)),s,0,t),
+ if emptyp(polesf) and emptyp(polesQ) then (ans:[[un],[]], remove(n,integer), return(ratsimp(ans)))
+ /*now let's deal with the poles*/
+ else(
+ indxpf:map(first,polesf), indxpQ:map(first,polesQ),
+ indxp:unique(append(indxpf,indxpQ)),
+ polesU:map(lambda([e],[e,evalpole_scn(bnf,polesf,indxpf,e)*exp(-(e*%pi/p)^2*kap*t)
+ +integrate(at(evalpole_scn(bnQ,polesQ,indxpQ,e),t=s)*exp(-(e*%pi/p)^2*kap*(t-s)),s,0,t)]),indxp),
+ ans:[[un],polesU],
+ remove(n,integer),
+ return(ratsimp(ans))
+ )
+)$
+
+fourier_heat(Qexpr,fexpr,var,p,kap,NN):=fouriersincoeff_expand(fourier_heatcoeff(Qexpr,fexpr,var,p,kap),var,p,NN)$
+
+fourier_wavecoeff(Qexpr,fexpr,gexpr,var,p,A):=block(
+ [indxp,indxpf,indxpQ,indxpg,n,polesf,polesg,polesQ,bnf,bnQ,bng,Ln,un,polesU],
+ Ln:(n*%pi*A)/p,
+/* [[bnf],polesf]:fousincoeff(fexpr,var,p),
+ [[bng],polesg]:fousincoeff(gexpr,var,p),
+ [[bnQ],polesQ]:fousincoeff(Qexpr,var,p), */
+ [[bnf],polesf]:fouriersincoeff(fexpr,var,p),
+ [[bng],polesg]:fouriersincoeff(gexpr,var,p),
+ [[bnQ],polesQ]:fouriersincoeff(Qexpr,var,p),
+ bng:bng/Ln, polesg:map(lambda([e],[e[1],e[2]*at(1/Ln,n=e[1])]),polesg),
+ declare(n,integer),
+ un:bnf*cos(Ln*t)+bng*sin(Ln*t)+(1/Ln)*integrate(at(bnQ,t=s)*sin(Ln*(t-s)),s,0,t),
+ if emptyp(polesf) and emptyp(polesQ) and emptyp(polesg) then (ans:[[un],[]], remove(n,integer), return(ratsimp(ans)))
+ /*now let's deal with the poles*/
+ else(
+ indxpf:map(first,polesf), indxpQ:map(first,polesQ), indxpg:map(first,polesg),
+ indxp:unique(append(indxpf,indxpQ,indxpg)),
+ polesU:map(lambda([e],[e,evalpole_scn(bnf,polesf,indxpf,e)*cos(e*%pi*A*t/p)+
+ evalpole_scn(bng,polesg,indxpg,e)*sin(e*%pi*A*t/p)+
+ (p/(e*%pi*A))*integrate(at(evalpole_scn(bnQ,polesQ,indxpQ,e),t=s)*sin(e*%pi*A*(t-s)/p),s,0,t)]),indxp),
+ ans:[[un],polesU],
+ remove(n,integer),
+ return(ratsimp(ans))
+ )
+)$
+
+fourier_wave(Qexpr,fexpr,gexpr,var,p,A,NN):=fouriersincoeff_expand(fourier_wavecoeff(Qexpr,fexpr,gexpr,var,p,A),var,p,NN)$
+
+dirichlet_heat(Qexpr,fexpr,h1expr,h2expr,var,p,kap,NN):=block(
+[Qaux,faux,vaux],
+ vaux:(h1expr-h2expr)*var/p-h1expr,
+ Qaux:Qexpr+diff(vaux,t),
+ faux:fexpr+at(vaux,t=0),
+ fourier_heat(Qaux,faux,var,p,kap,NN)-vaux
+)$
+
+dirichlet_wave(Qexpr,fexpr,gexpr,h1expr,h2expr,var,p,A,NN):=block(
+[Qaux,faux,gaux,vaux],
+ vaux:(h1expr-h2expr)*var/p-h1expr,
+ Qaux:Qexpr+diff(vaux,t,2),
+ faux:fexpr+at(vaux,t=0),
+ gaux:gexpr+at(diff(vaux,t),t=0),
+ fourier_wave(Qaux,faux,gaux,var,p,A,NN)-vaux
+)$
+
+dirichlet_laplace_disk(a,fexpr,var,NN):=block(
+ [cn,c0,cpoles,n],
+ [[c0,cn],cpoles]:cfouriercoeff(fexpr,var,%pi),
+ cn:(r/a)^abs(n)*cn,
+ cpoles:map(lambda([e],[e[1],(r/a)^e[1]*e[2]]),cpoles),
+ cfouriercoeff_expand([[c0,cn],cpoles],var,%pi,NN)
+)$
+
+neumann_laplace_disk(a,fexpr,var,NN):=block([a0,an,bn,poles,n],
+ [[a0,an,bn],poles]:fouriercoeff(fexpr,var,%pi),
+ if not is(a0=0) then return("The solution does not exist.")
+ else(
+ an:(a/n)*an*(r/a)^n,
+ bn:(a/n)*bn*(r/a)^n,
+ poles:map(lambda([e],[e[1],e[2]*(a/e[1])*(r/a)^e[1],e[3]*(a/e[1])*(r/a)^e[1]]),poles),
+ return(fouriercoeff_expand([[a0,an,bn],poles],var,%pi,NN))
+ )
+)$
+
+dirichlet_laplace_annulus(a,b,fexpr,gexpr,var,NN):=block(
+ [n,cnf,c0f,cng,c0g,cpolesf,cpolesg,c0aux,cnaux,cpolesaux,
+ indxpf,indxpg,indxp,ans],
+ [[c0f,cnf],cpolesf]:cfouriercoeff(fexpr,var,%pi),
+ [[c0g,cng],cpolesg]:cfouriercoeff(gexpr,var,%pi),
+ c0aux:(c0g*log(b)-c0f*log(a))*log(b/a)+(c0f-c0g)*log(r)/log(b/a),
+ cnaux:(b^abs(n)*r^abs(n)-a^abs(2*n)*b^abs(n)*r^(-abs(n)))*cnf/(b^abs(2*n)-a^abs(2*n))+
+ cng*(b^abs(2*n)*a^abs(n)*r^(-abs(n))-a^abs(n)*r^abs(n))/(b^abs(2*n)-a^abs(2*n)),
+ if emptyp(cpolesf) and emptyp(cpolesg) then(
+ ans:cfouriercoeff_expand(ratsimp([[c0aux,cnaux],[]]),var,%pi,NN),
+ return(ans)
+ ) /*now let's deal with the poles*/
+ else(
+ indxpf:map(first,cpolesf), indxpg:map(first,cpolesg),
+ indxp:unique(append(indxpf,indxpg)),
+ cpolesaux:map(lambda([e],[e,(b^e*r^e-a^(2*e)*b^e*r^(-e))*evalpole_scn(cnf,cpolesf,indxpf,e)/(b^(2*e)-a^(2*e))+
+ evalpole_scn(cng,cpolesg,indxpg,e)*(b^(2*e)*a^e*r^(-e)-a^e*r^e)/(b^(2*e)-a^(2*e))]),indxp),
+ ans:cfouriercoeff_expand(ratsimp([[c0aux,cnaux],cpolesaux]),var,%pi,NN),
+ return(ans)
+ )
+)$
+
+dirichlet_laplace_wedge(R,a,fexpr,var,NN):=block(
+ [bnf,polesf,bnaux,polesaux,n,p:a],
+ [[bnf],polesf]:fouriersincoeff(fexpr,var,p),
+ bnaux:bnf*(r/R)^(n*%pi/a),
+ if emptyp(polesf) then return(fouriersincoeff_expand([[bnaux],[]],var,p,NN))
+ else(
+ polesaux:map(lambda([e],[e[1],e[2]*(r/R)^(e[1]*%pi/a)]),polesf),
+ return(fouriersincoeff_expand([[bnaux],polesaux],var,p,NN))
+ )
+)$
+
+neumann_laplace_wedge(R,a,fexpr,var,NN):=block(
+ [bnf,polesf,bnaux,polesaux,n,p:a],
+ [[bnf],polesf]:fouriersincoeff(fexpr,var,p),
+ bnaux:bnf*(r/R)^(n*%pi/a)*(R*a/(n*%pi)),
+ if emptyp(polesf) then return(fouriersincoeff_expand([[bnaux],[]],var,p,NN))
+ else(
+ polesaux:map(lambda([e],[e[1],e[2]*(r/R)^(e[1]*%pi/a)*(R*a/(e[1]*%pi))]),polesf),
+ return(fouriersincoeff_expand([[bnaux],polesaux],var,p,NN))
+ )
+)$
+
+dirichlet_laplace_rectangle(a,b,f1expr,f2expr,g1expr,g2expr,var1,var2,NN):=block(
+[n,f1n,polesf1,f2n,polesf2,g1n,polesg1,g2n,polesg2,indxpf1,indxpf2,indxpg1,indxpg2,
+ indxp,Fnaux,Gnaux,polesFaux,polesGaux,ans],
+ [[f1n],polesf1]:fouriersincoeff(f1expr,var1,a),
+ [[f2n],polesf2]:fouriersincoeff(f2expr,var1,a),
+ [[g1n],polesg1]:fouriersincoeff(g1expr,var2,b),
+ [[g2n],polesg2]:fouriersincoeff(g2expr,var2,b),
+ Fnaux:f1n*sinh(n*%pi*(b-var2)/a)/sinh(n*%pi*b/a)+f2n*sinh(n*%pi*var2/a)/sinh(n*%pi*b/a),
+ Gnaux:g1n*sinh(n*%pi*(a-var1)/b)/sinh(n*%pi*a/b)+g2n*sinh(n*%pi*var1/b)/sinh(n*%pi*a/b),
+ if emptyp(polesf1) and emptyp(polesf2) and emptyp(polesg1) and emptyp(polesg2) then(
+ ans:fouriersincoeff_expand([[Fnaux],[]],var1,a,NN)+fouriersincoeff_expand([[Gnaux],[]],var2,b,NN),
+ return(ans)
+ )
+ else(
+ indxpf1:map(first,polesf1), indxpf2:map(first,polesf2),
+ indxpg1:map(first,polesg1), indxpg2:map(first,polesg2),
+ indxp:unique(append(indxpf1,indxpf2,indxpg1,indxpg2)),
+ polesFaux:map(lambda([e],[e,evalpole_scn(f1n,polesf1,indxpf1,e)*sinh(e*%pi*(b-var2)/a)/sinh(e*%pi*b/a)
+ +evalpole_scn(f2n,polesf2,indxpf2,e)*sinh(e*%pi*var2/a)/sinh(e*%pi*b/a)]),indxp),
+ polesGaux:map(lambda([e],[e,evalpole_scn(g1n,polesg1,indxpg1,e)*sinh(e*%pi*(a-var1)/b)/sinh(e*%pi*a/b)
+ +evalpole_scn(g2n,polesg2,indxpg2,e)*sinh(e*%pi*var1/b)/sinh(e*%pi*a/b)]),indxp),
+ ans:fouriersincoeff_expand([[Fnaux],polesFaux],var1,a,NN)+fouriersincoeff_expand([[Gnaux],polesGaux],var2,b,NN),
+ return(ans)
+ )
+)$
+
+neumann_laplace_rectangle(a,b,f1expr,f2expr,g1expr,g2expr,var1,var2,NN):=block(
+[n,f1n,polesf1,f2n,polesf2,g1n,polesg1,g2n,polesg2,indxpf1,indxpf2,indxpg1,indxpg2,
+ indxp,Fnaux,Gnaux,polesFaux,polesGaux,C,ans,f10,g10,f20,g20],
+ [[f10,f1n],polesf1]:fouriercoscoeff(f1expr,var1,a),
+ [[f20,f2n],polesf2]:fouriercoscoeff(f2expr,var1,a),
+ [[g10,g1n],polesg1]:fouriercoscoeff(g1expr,var2,b),
+ [[g20,g2n],polesg2]:fouriercoscoeff(g2expr,var2,b),
+ Fnaux:(-a/(n*%pi))*f1n*cosh(n*%pi*(b-var2)/a)/sinh(n*%pi*b/a)+(a/(n*%pi))*f2n*cosh(n*%pi*var2/a)/sinh(n*%pi*b/a),
+ Gnaux:(-b/(n*%pi))*g1n*cosh(n*%pi*(a-var1)/b)/sinh(n*%pi*a/b)+(b/(n*%pi))*g2n*cosh(n*%pi*var1/b)/sinh(n*%pi*a/b),
+ if emptyp(polesf1) and emptyp(polesf2) and emptyp(polesg1) and emptyp(polesg2) then(
+ ans:fouriercoscoeff_expand([[0,Fnaux],[]],var1,a,NN)+fouriercoscoeff_expand([[0,Gnaux],[]],var2,b,NN),
+ return(ans+C)
+ )
+ else(
+ indxpf1:map(first,polesf1), indxpf2:map(first,polesf2),
+ indxpg1:map(first,polesg1), indxpg2:map(first,polesg2),
+ indxp:unique(append(indxpf1,indxpf2,indxpg1,indxpg2)),
+ polesFaux:map(lambda([e],[e,(-a/(n*%pi))*evalpole_scn(f1n,polesf1,indxpf1,e)*cosh(e*%pi*(b-var2)/a)/sinh(e*%pi*b/a)
+ +(a/(n*%pi))*evalpole_scn(f2n,polesf2,indxpf2,e)*cosh(e*%pi*var2/a)/sinh(e*%pi*b/a)]),indxp),
+ polesGaux:map(lambda([e],[e,(-b/(n*%pi))*evalpole_scn(g1n,polesg1,indxpg1,e)*cosh(e*%pi*(a-var1)/b)/sinh(e*%pi*a/b)
+ +(b/(n*%pi))*evalpole_scn(g2n,polesg2,indxpg2,e)*cosh(e*%pi*var1/b)/sinh(e*%pi*a/b)]),indxp),
+ ans:fouriercoscoeff_expand([[0,Fnaux],polesFaux],var1,a,NN)+fouriercoscoeff_expand([[0,Gnaux],polesGaux],var2,b,NN),
+ return(ans+C)
+ )
+)$
+
+/*Beggining of 2D Wave equation*/
+
+BesselJZeros(m,k,[u]):=block([a,alpha,A,answ],local(a,alpha,A),
+if is(not(m>-1)) then return("The order m must be m>-1"),
+if (is(not(integerp(k))) or is(not(k > 0))) then return("k must be an integer k>0"),
+a[i]:=m+2*i,
+alpha[i,j]:=if is(equal(i,j)) then 2/((a[i]-1)*(a[i]+1))
+ elseif is(equal(j,i-1)) then 1/((a[i]-1)*sqrt((a[i]-2)*a[i]))
+ elseif is(equal(j,i+1)) then 1/((a[i+1]-1)*sqrt((a[i+1]-2)*a[i+1]))
+ else 0,
+A:genmatrix(alpha,ceiling(k/0.64)+10,ceiling(k/0.64)+10),
+answ:2/sqrt(first(eigens_by_jacobi(A,floatfield))),
+if (is(not(equal(length(u),0))) and is(equal(first(u),all))) then
+ firstn(sort(answ),k)
+elseif (is(not(equal(length(u),0))) and is(not(equal(first(u),all)))) then
+ return("Do you want the first k roots? In this case, the option is 'all'")
+else
+ last(firstn(sort(answ),k))
+)$
+
+simpgen(l1,l2):=append(endcons(last(l1)+first(l2),rest(l1,-1)),rest(l2,1))$
+
+pairing(L1,L2):=xreduce(append,map(lambda([x],map(lambda([y],[x,y]),L2)),L1))$
+
+nintegrate(f,m,[I]):=block([n:length(args(lhs(apply(fundef,[f])))),tmp:xreduce(simpgen,makelist([1,4,1],j,1,m/2)),x,deltax,p,w,ww,xx],local(x,deltax,p,w),
+if is(not(evenp(m))) then return ("The number of subdivisions m must be even")
+elseif is(not(equal(length(I),n))) then return("The number of variables xi and intervals [ai,bi] must match") else
+ (
+ for i:1 thru n do x[i]:args(lhs(apply(fundef,[f])))[i],
+ for i:1 thru n do deltax[i]:(I[i][2]-I[i][1])/m,
+ for j:1 thru n do p[j]:makelist(I[j][1]+k*deltax[j],k,0,m),
+ for j:1 thru n do w[j]:(deltax[j]/3)*tmp,
+ if is(equal(n,1)) then
+ ww:w[1]
+ else
+ ww:map(lambda([x],apply("*",x)),map(flatten,xreduce(pairing,makelist(w[j],j,1,n)))),
+ if is(equal(n,1)) then
+ xx:p[1]
+ else
+ xx:map(flatten,xreduce(pairing,makelist(p[j],j,1,n))),
+ if is(equal(n,1)) then
+ bfloat(apply("+",ww*map(f,xx)))
+ else
+ bfloat(apply("+",ww*map(lambda([x],apply(f,x)),xx)))
+ )
+)$
+
+a0(n,a,f):=block([r:args(lhs(apply(fundef,[f])))[1],theta:args(lhs(apply(fundef,[f])))[2],lam:BesselJZeros(0,n)/a,p:%pi,ff,k],local(ff),
+define(funmake(ff,[r,theta]),apply(f,[r,theta])*r*bessel_j(0,lam*r)),
+k:1/(p*a^2*(bessel_j(1,lam))^2),
+k*nintegrate(ff,14,[0,a],[0,2*p])
+)$
+
+a(m,n,a,f):=block([r:args(lhs(apply(fundef,[f])))[1],theta:args(lhs(apply(fundef,[f])))[2],lam:BesselJZeros(0,n)/a,p:%pi,ff,k],local(ff),
+define(funmake(ff,[r,theta]),apply(f,[r,theta])*r*bessel_j(0,lam*r)*cos(m*theta)),
+k:2/(p*a^2*(bessel_j(m+1,lam))^2),
+k*nintegrate(ff,14,[0,a],[0,2*p])
+)$
+
+b(m,n,a,f):=block(
+[r:args(lhs(apply(fundef,[f])))[1],theta:args(lhs(apply(fundef,[f])))[2],lam:BesselJZeros(0,n)/a,p:%pi,ff,k],local(ff),
+define(funmake(ff,[r,theta]),apply(f,[r,theta])*r*bessel_j(0,lam*r)*sin(m*theta)),
+k:2/(p*a^2*(bessel_j(m+1,lam))^2),
+k*nintegrate(ff,14,[0,a],[0,2*p])
+)$
+
+as0(n,a,c,f):=block([r:args(lhs(apply(fundef,[f])))[1],theta:args(lhs(apply(fundef,[f])))[2],lam:BesselJZeros(0,n)/a,p:%pi,ff,k],local(ff),
+define(funmake(ff,[r,theta]),apply(f,[r,theta])*r*bessel_j(0,lam*r)),
+k:1/(c*p*lam*a^2*(bessel_j(1,lam))^2),
+k*nintegrate(ff,14,[0,a],[0,2*p])
+)$
+
+as(m,n,a,c,f):=block([r:args(lhs(apply(fundef,[f])))[1],theta:args(lhs(apply(fundef,[f])))[2],lam:BesselJZeros(0,n)/a,p:%pi,ff,k],local(ff),
+define(funmake(ff,[r,theta]),apply(f,[r,theta])*r*bessel_j(0,lam*r)*cos(m*theta)),
+k:2/(c*p*lam*a^2*(bessel_j(m+1,lam))^2),
+k*nintegrate(ff,14,[0,a],[0,2*p])
+)$
+
+bs(m,n,a,c,f):=block([r:args(lhs(apply(fundef,[f])))[1],theta:args(lhs(apply(fundef,[f])))[2],lam:BesselJZeros(0,n)/a,p:%pi,ff,k],local(ff),
+define(funmake(ff,[r,theta]),apply(f,[r,theta])*r*bessel_j(0,lam*r)*sin(m*theta)),
+k:2/(c*p*lam*a^2*(bessel_j(m+1,lam))^2),
+k*nintegrate(ff,14,[0,a],[0,2*p])
+)$
+
+wave2d_disk(c,a,f,g,k,l):=block([A0,A,B,As0,As,Bs,lamb],local(A0,A,B,As0,As,Bs,lamb,t),
+A0[i]:=a0(i,a,f),A[i,j]:=a(i,j,a,f),B[i,j]:=b(i,j,a,f),As0[i]:=as0(i,a,c,g),As[i,j]:=as(i,j,a,c,g),Bs[i,j]:=bs(i,j,a,c,g),
+lamb[i,j]:=BesselJZeros(i,j)/a,
+sum(A0[n]*bessel_j(0,lamb[0,n]*r)*cos(c*lamb[0,n]*t),n,1,l)
++sum(sum(bessel_j(m,lamb[m,n]*r)*(A[m,n]*cos(m*theta)+B[m,n]*sin(m*theta))*cos(c*lamb[m,n]*t),n,1,l),m,1,k)
++sum(As0[n]*bessel_j(0,lamb[0,n]*r)*sin(c*lamb[0,n]*t),n,1,l)
++sum(sum(bessel_j(m,lamb[m,n]*r)*(As[m,n]*cos(m*theta)+Bs[m,n]*sin(m*theta))*sin(c*lamb[m,n]*t),n,1,l),m,1,k)
+)$
+
+Arect(f,a,b,m,n):=block([x:args(lhs(apply(fundef,[f])))[1],y:args(lhs(apply(fundef,[f])))[2]],
+define(funmake(ff,[x,y]),apply(f,[x,y])*sin(m*%pi*x/a)*sin(m*%pi*y/b)),
+4*(nintegrate(ff,14,[0,a],[0,b]))/(a*b)
+)$
+
+Brect(g,a,b,c,m,n):=block([x:args(lhs(apply(fundef,[f])))[1],y:args(lhs(apply(fundef,[f])))[2],lamb],local(lamb),
+lamb[m,n]:=((m/a)^2+(n/b)^2)/(%pi^2),
+define(funmake(gg,[x,y]),apply(g,[x,y])*sin(m*%pi*x/a)*sin(m*%pi*y/b)),
+4*(nintegrate(gg,14,[0,a],[0,b]))/(a*b*c*sqrt(lam[m,n]))
+)$
+
+wave2d_rectangle(c,a,b,f,g,k,l):=block([x:args(lhs(apply(fundef,[f])))[1],y:args(lhs(apply(fundef,[f])))[2],lamb,t],local(lamb,t),
+lamb[m,n]:=((m/a)^2+(n/b)^2)/(%pi^2),
+sum(sum((Arect(f,a,b,m,n)*cos(sqrt(lamb[0,n])*c*t)+Brect(g,a,b,c,m,n)*sin(sqrt(lamb[0,n])*c*t))*sin(m*%pi*x/a)*sin(n*%pi*y/b),m,1,k),n,1,l)
+)$
diff --git a/graphics/ketcindy/ketcindyfolder/scripts/ketlib/maximaL/poincare.mac b/graphics/ketcindy/ketcindyfolder/scripts/ketlib/maximaL/poincare.mac
new file mode 100644
index 0000000000..aefab3a21a
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/scripts/ketlib/maximaL/poincare.mac
@@ -0,0 +1,71 @@
+/* Poincare.mac is a set of routines for the computation
+of Poincare surfaces of sections of Hamiltonian systems */
+
+/* Author: Jose A Vallejo
+Universidad Autonoma de San Luis Potosi (Mexico)
+josanv@gmail.com */
+
+/* To avoid messages when loading draw, execute
+with_stdout("/dev/null",load(draw))$ (in Linux)
+with_stdout("NUL",load(draw))$ (in Windows) */
+
+/* Poincare.mac requires a compiled version of
+rkfun.lisp, a LISP implementation of the RK4
+algorithm due to Richard Fateman. The original
+code can be downloaded from
+https://people.eecs.berkeley.edu/~fateman/lisp/rkfun.lisp */
+
+/*load("rkfun.fasl");*/
+/*load("rkfun.lisp");*/
+
+
+hameqs(H,name):=block(
+[vv,t,tvv,n,Q,P,eqq,eqp,eqs],
+vv:args(lhs(apply(fundef,[H]))),
+tvv:cons(t,vv),
+n:length(vv)/2,
+Q:makelist(vv[2*j-1],j,1,n),
+P:makelist(vv[2*k],k,1,n),
+eqq:makelist(float(diff(apply(H,vv),P[j])),j,1,n),
+eqp:makelist(float(-diff(apply(H,vv),Q[j])),j,1,n),
+eqs:join(eqq,eqp),
+for j:1 thru 2*n do define(funmake(concat(name,j),tvv),block([],mode_identity(float,vv),eqs[j])),
+apply(compile,makelist(concat(name,j),j,1,2*n)),
+[makelist(apply(concat(name,j),tvv),j,1,2*n),vv,makelist(concat(name,j),j,1,2*n)]
+)$
+
+lextract(ll,n):=block([l,a,b],
+l:length(ll),
+a:rest(ll,n),
+b:rest(ll,n-l-1),
+append(b,a)
+)$
+
+poincare3d(H,name,inicond,timestep,coord):=block(
+[heq,vars,tvars,hfuns,c,sol],
+heq:hameqs(H,name),
+vars:heq[2],
+tvars:cons(t,vars),
+hfuns:heq[3],
+c:first(sublist_indices(vars,lambda([x],x=coord))),
+sol:rkfun(hfuns,tvars,float(inicond),timestep),
+map(lambda([x],lextract(x,c)),map(lambda([x],rest(x)),sol))
+)$
+
+poincare2d(H,name,inicond,timestep,scene):=block(
+[heq,vars,tvars,hfuns,solu,c,soluc,sola,solb,subind,sol,e,f],
+heq:hameqs(H,name),
+vars:heq[2],
+tvars:cons(t,vars),
+hfuns:heq[3],
+solu:rkfun(hfuns,tvars,float(inicond),timestep),
+c:first(sublist_indices(vars,lambda([x],x=first(scene)))),
+soluc:map(lambda([x],x[c+1]),solu),
+sola:rest(soluc,-1)-second(scene),
+solb:rest(soluc)-second(scene),
+subind:sublist_indices(sola*solb,lambda([x],is(x < 0))),
+sol:makelist(solu[k],k,subind),
+e:first(sublist_indices(vars,lambda([x],x=third(scene))))+1,
+f:first(sublist_indices(vars,lambda([x],x=fourth(scene))))+1,
+makelist([j[e],j[f]],j,sol)
+)$ \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/scripts/ketlib/maximaL/rkfun.lisp b/graphics/ketcindy/ketcindyfolder/scripts/ketlib/maximaL/rkfun.lisp
new file mode 100644
index 0000000000..70aafc7fff
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/scripts/ketlib/maximaL/rkfun.lisp
@@ -0,0 +1,99 @@
+;; variation on runge-kutta (rk) routine in complex_dynamics.lisp by villate@fe.up.pt
+;; this one with changed by fateman@berkeley.edu
+
+#| rkfun may be much faster than rk because it calls compiled programs.
+ rkfun (this file) should also be compiled to speed it up.
+ how to use:
+
+
+ first, read and understand the documentation for rk().
+ next, define the ODE right hand sides as functions as shown below
+
+fun1(y,x,x0):= x0$
+fun2(y,x,x0):= block([], mode_declare([y, x0,x],float),(1-x^2)*x0-x);
+compile(fun1)$
+compile(fun2)$
+showtime:all$
+
+last(rkfun([fun1,fun2],[x,xdot],[0.0,0.6],[t,0,50,0.01]));
+
+/* which is, in one test, 18 times faster than */
+
+last(rk([xdot,(1-x^2)*xdot -x],[x,xdot],[0.0,0.6],[t,0,50,0.01]));
+
+|#
+
+(defun $rkfun (funs vars initial domain ;; taken from complex_dynamics.lisp
+ &aux d u funlist k1 k2 k3 k4 r1 r2 r3 traj r
+ (it (mapcar #'coerce-float (cddr domain))))
+ (unless ($listp funs) (setq funs `((mlist) ,funs)))
+ (unless ($listp initial) (setq initial `((mlist) ,initial)))
+ (unless ($listp vars) (setq vars `((mlist) ,vars)))
+ (dolist (var (cdr vars))
+ (unless (symbolp var)
+ (merror (intl:gettext "rk: variable name expected; found: ~M") var)))
+ (unless (symbolp (cadr domain))
+ (merror (intl:gettext "rk: variable name expected; found: ~M")
+ (cadr domain)))
+ (setq vars (append '((mlist)) (list (cadr domain)) (cdr vars)))
+ (setq r (append `(,(car it)) (mapcar #'coerce-float (cdr initial))))
+ (setq funlist (cdr funs))
+
+ (setq d (/ (- (cadr it) (car it)) (caddr it)))
+ (setq traj (list (cons '(mlist) r)))
+ (do ((m 1 (1+ m))) ((> m d))
+ (progn ;;; was ignore-errors
+ (setq k1 (mapcar #'(lambda (x) (apply x r)) funlist))
+ (setq r1 (map 'list #'+ (cdr r) (mapcar #'(lambda (x) (* 0.5d0 (caddr it) x)) k1)))
+ (push (+ (car r) (/ (caddr it) 2)) r1)
+ (setq k2 (mapcar #'(lambda (x) (apply x r1)) funlist))
+ (setq r2 (map 'list #'+ (cdr r) (mapcar #'(lambda (x) (* 0.5d0(caddr it) x)) k2)))
+ (push (+ (car r) (/ (caddr it) 2)) r2)
+ (setq k3 (mapcar #'(lambda (x) (apply x r2)) funlist))
+ (setq r3 (map 'list #'+ (cdr r) (mapcar #'(lambda (x) (* (caddr it) x)) k3)))
+ (push (+ (car r) (caddr it)) r3)
+ (setq k4 (mapcar #'(lambda (x) (apply x r3)) funlist))
+ (setq u (map 'list #'+
+ (mapcar #'(lambda (x) (* #.(/ 1.0 6.0d0) x)) k1)
+ (mapcar #'(lambda (x) (* #.(/ 1.0 3.0d0) x)) k2)
+ (mapcar #'(lambda (x) (* #.(/ 1.0 3.0d0) x)) k3)
+ (mapcar #'(lambda (x) (* #.(/ 1.0 6.0d0) x)) k4)))
+ (setq r
+ (append
+ `(,(+ (car it) (* m (caddr it))))
+ (map 'list #'+ (cdr r) (mapcar #'(lambda (x) (* (caddr it) x)) u))))
+ (push (cons '(mlist) r) traj)))
+ (when (< (car r) (cadr it))
+ (let ((s (- (cadr it) (car r))) )
+ (declare(double-float s)(special s)(optimize (speed 3)(safety 0)))
+ (progn ;; was ignore-errors
+ (setq k1 (mapcar #'(lambda (x) (mapply x r nil)) funlist))
+ (setq r1 (map 'list #'+ (cdr r) (mapcar #'(lambda (x)
+ (declare(double-float x))
+ (* s 0.5d0 x)) k1)))
+ (push (+ (car r) (* 0.5d0 s)) r1)
+ (setq k2 (mapcar #'(lambda (x) (mapply x r1 nil)) funlist))
+ (setq r2 (map 'list #'+ (cdr r) (mapcar #'(lambda (x)(declare(double-float x))
+ (* s 0.5d0 x)) k2)))
+ (push (+ (car r) (* 0.5d0 s)) r2)
+ (setq k3 (mapcar #'(lambda (x) (mapply x r2 nil)) funlist))
+ (setq r3 (map 'list #'+ (cdr r) (mapcar #'(lambda (x)(declare(double-float x))
+ (* s x)) k3)))
+ (push (+ (car r) s) r3)
+ (setq k4 (mapcar #'(lambda (x) (mapply x r3 nil)) funlist))
+ (setq u (map 'list #'+
+ (mapcar #'(lambda (x)(declare(double-float x))
+ (* #.(/ 1.0d0 6.0d0) x)) k1)
+ (mapcar #'(lambda (x)(declare(double-float x))
+ (* #.(/ 1.0d0 3.0d0) x)) k2)
+ (mapcar #'(lambda (x) (declare(double-float x))
+ (* #.(/ 1.0d0 3.0d0) x)) k3)
+ (mapcar #'(lambda (x)(declare(double-float x))
+ (* #.(/ 1.0d0 6.0d0) x)) k4)))
+ (setq r
+ (append
+ `(,(cadr it))
+ (map 'list #'+ (cdr r) (mapcar #'(lambda (x)(declare(double-float x))
+ (* s x)) u))))
+ (push (cons '(mlist) r) traj))))
+ (cons '(mlist) (nreverse traj))) \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/scripts/ketlib/oshima/os_muldif.pdf b/graphics/ketcindy/ketcindyfolder/scripts/ketlib/oshima/os_muldif.pdf
new file mode 100644
index 0000000000..33864232e4
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/scripts/ketlib/oshima/os_muldif.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/scripts/ketlib/oshima/os_muldif.rr b/graphics/ketcindy/ketcindyfolder/scripts/ketlib/oshima/os_muldif.rr
new file mode 100644
index 0000000000..ba7131ab35
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/scripts/ketlib/oshima/os_muldif.rr
@@ -0,0 +1,19295 @@
+/* The latest version will be at ftp://akagi.ms.u-tokyo.ac.jp/pub/math/muldif
+ scp os_muldif.[dp]* ${USER}@lemon.math.kobe-u.ac.jp:/home/web/OpenXM/Current/doc/other-docs
+*/
+#define USEMODULE 1
+/* #undef USEMODULE */
+
+/* os_muldif.rr (Library for Risa/Asir)
+ * Toshio Oshima (Nov. 2007 - Aug. 2017)
+ *
+ * For polynomials and differential operators with coefficients
+ * in rational funtions (See os_muldif.pdf)
+ *
+ * "Tab = 4 column" is best
+ */
+
+ord([zz,dz,dy,dx])$
+
+#ifdef USEMODULE
+module os_md;
+static Muldif.rr$
+static TeXEq$
+static TeXLim$
+static DIROUT$
+static DIROUTD$
+static DVIOUTL$
+static DVIOUTA$
+static DVIOUTB$
+static DVIOUTH$
+static DVIOUTF$
+static LCOPT$
+static COLOPT$
+static LPOPT$
+static LFOPT$
+static ErMsg$
+static FLIST$
+static IsYes$
+static XYPrec$
+static XYcm$
+static TikZ$
+static XYLim$
+static Canvas$
+static ID_PLOT$
+static Rand$
+static LQS$
+localf spType2$
+localf erno$
+localf chkfun$
+localf makev$
+localf shortv$
+localf makenewv$
+localf vweyl$
+localf mycat$
+localf mycat0$
+localf fcat$
+localf findin$
+localf countin$
+localf mycoef$
+localf mydiff$
+localf myediff$
+localf m2l$
+localf m2ll$
+localf mydeg$
+localf pfctr$
+localf mymindeg$
+localf m1div$
+localf mulsubst$
+localf cmpsimple$
+localf simplify$
+localf monotos$
+localf minustos$
+localf monototex$
+localf vnext$
+localf ldict$
+localf ndict$
+localf nextsub$
+localf nextpart$
+localf transpart$
+localf trpos$
+localf sprod$
+localf sinv$
+localf slen$
+localf sord$
+localf vprod$
+localf dvangle$
+localf dvprod$
+localf dnorm$
+localf mulseries$
+localf pluspower$
+localf vtozv$
+localf dupmat$
+localf matrtop$
+localf mytrace$
+localf mydet$
+localf mperm$
+localf mtranspose$
+localf mtoupper$
+localf mydet2$
+localf myrank$
+localf meigen$
+localf transm$
+localf vgen$
+localf mmc$
+localf lpgcd$
+localf mdivisor$
+localf mdsimplify$
+localf m2mc$
+localf easierpol$
+localf paracmpl$
+localf mykernel$
+localf myimage$
+localf mymod$
+localf mmod$
+localf ladd$
+localf lchange$
+localf llsize$
+localf llbase$
+localf lsort$
+localf lmax$
+localf lmin$
+localf lgcd$
+localf llcm$
+localf ldev$
+localf lsol$
+localf lnsol$
+localf l2p$
+localf m2v$
+localf lv2m$
+localf m2lv$
+localf s2m$
+localf c2m$
+localf m2diag$
+localf myinv$
+localf madjust$
+localf mpower$
+localf mrot$
+localf texlen$
+localf isdif$
+localf fctrtos$
+localf texlim$
+localf fmult$
+localf radd$
+localf getel$
+localf ptol$
+localf rmul$
+localf mtransbys$
+localf drawopt$
+localf execdraw$
+localf execproc$
+localf myswap$
+localf mysubst$
+localf evals$
+localf myval$
+localf myeval$
+localf mydeval$
+localf myfeval$
+localf myf2eval$
+localf myf3eval$
+localf myfdeval$
+localf myf2deval$
+localf myf3deval$
+localf myexp$
+localf mycos$
+localf mysin$
+localf mytan$
+localf myarg$
+localf myasin$
+localf myacos$
+localf myatan$
+localf mylog$
+localf mypow$
+localf scale$
+localf arg$
+localf sqrt$
+localf gamma$
+localf lngamma$
+localf digamma$
+localf dilog$
+localf zeta$
+localf eta$
+localf jell$
+localf frac$
+localf erfc$
+localf orthpoly$
+localf schurpoly$
+localf fouriers$
+localf todf$
+localf f2df$
+localf df2big$
+localf compdf$
+localf fzero$
+localf fmmx$
+localf flim$
+localf fcont$
+localf fresidue$
+localf mmulbys$
+localf appldo$
+localf appledo$
+localf muldo$
+localf jacobian$
+localf hessian$
+localf wronskian$
+localf adj$
+localf laplace1$
+localf laplace$
+localf mce$
+localf mc$
+localf rede$
+localf ad$
+localf add$
+localf vadd$
+localf addl$
+localf cotr$
+localf rcotr$
+localf muledo$
+localf mulpdo$
+localf transpdosub$
+localf transpdo$
+localf translpdo$
+localf rpdiv$
+localf mygcd$
+localf mylcm$
+localf sftpexp$
+localf applpdo$
+localf tranlpdo$
+localf divdo$
+localf qdo$
+localf sqrtdo$
+localf ghg$
+localf ev4s$
+localf b2e$
+localf sftpow$
+localf sftpowext$
+localf polinsft$
+localf pol2sft$
+localf polroots$
+localf fctri$
+localf binom$
+localf expower$
+localf seriesHG$
+localf seriesMc$
+localf seriesTaylor$
+localf evalred$
+localf toeul$
+localf fromeul$
+localf sftexp$
+localf fractrans$
+localf soldif$
+localf chkexp$
+localf sqrtrat$
+localf getroot$
+localf expat$
+localf polbyroot$
+localf polbyvalue$
+localf pcoef$
+localf prehombf$
+localf prehombfold$
+localf sub3e$
+localf fuchs3e$
+localf okubo3e$
+localf eosub$
+localf even4e$
+localf odd5e$
+localf extra6e$
+localf rigid211$
+localf solpokuboe$
+localf stoe$
+localf dform$
+localf polinvsym$
+localf polinsym$
+localf tohomog$
+localf substblock$
+localf okuboetos$
+localf heun$
+localf fspt$
+localf abs$
+localf sgn$
+localf calc$
+localf isint$
+localf israt$
+localf iscrat$
+localf isalpha$
+localf isnum$
+localf isalphanum$
+localf isdecimal$
+localf isvar$
+localf isyes$
+localf isall$
+localf iscoef$
+localf iscombox$
+localf sproot$
+localf spgen$
+localf chkspt$
+localf cterm$
+localf terms$
+localf polcut$
+localf redgrs$
+localf cutgrs$
+localf mcgrs$
+localf mc2grs$
+localf mcmgrs$
+localf anal2sp$
+localf delopt$
+localf str_char$
+localf str_pair$
+localf str_cut$
+localf str_str$
+localf str_subst$
+localf str_times$
+localf str_tb$
+localf strip$
+localf i2hex$
+localf sjis2jis$
+localf jis2sjis$
+localf s2os$
+localf l2os$
+localf r2os$
+localf s2euc$
+localf s2sjis$
+localf r2ma$
+localf evalma$
+localf ssubgrs$
+localf verb_tex_form$
+localf tex_cuteq$
+localf my_tex_form$
+localf texket$
+localf smallmattex$
+localf divmattex$
+localf dviout0$
+localf myhelp$
+localf isMs$
+localf showbyshell$
+localf readcsv$
+localf tocsv$
+localf getbyshell$
+localf show$
+localf dviout$
+localf rtotex$
+localf mtotex$
+localf ltotex$
+localf texbegin$
+localf texcr$
+localf texsp$
+localf getbygrs$
+localf mcop$
+localf shiftop$
+localf conf1sp$
+localf pgen$
+localf diagm$
+localf mgen$
+localf madj$
+localf newbmat$
+localf unim$
+localf pfrac$
+localf cfrac$
+localf cfrac2n$
+localf sqrt2rat$
+localf s2sp$
+localf sp2grs$
+localf fimag$
+localf trig2exp$
+localf intpoly$
+localf integrate$
+localf simplog$
+localf fshorter$
+localf isshortneg$
+localf intrat$
+localf powsum$
+localf bernoulli$
+localf lft01$
+localf linfrac01$
+localf nthmodp$
+localf issquaremodp$
+localf rootmodp$
+localf rabin$
+localf primroot$
+localf varargs$
+localf ptype$
+localf pfargs$
+localf average$
+localf sint$
+localf frac2n$
+localf xyproc$
+localf xypos$
+localf xyput$
+localf xybox$
+localf xyline$
+localf xylines$
+localf xycirc$
+localf xybezier$
+localf lbezier$
+localf draw_bezier$
+localf tobezier$
+localf velbezier$
+localf ptbezier$
+localf cutf$
+localf fsum$
+localf fint$
+localf periodicf$
+localf cmpf$
+localf areabezier$
+localf saveproc$
+localf xygraph$
+localf xy2graph$
+localf addIL$
+localf xy2curve$
+localf xygrid$
+localf xyarrow$
+localf xyarrows$
+localf xyang$
+localf xyoval$
+localf ptcommon$
+localf ptcopy$
+localf ptaffine$
+localf ptlattice$
+localf ptpolygon$
+localf ptwindow$
+localf ptbbox$
+localf lninbox$
+localf ptcombezier$
+localf ptcombz$
+localf lchange$
+localf init$
+localf powprimroot$
+localf distpoint$
+localf ntable$
+localf keyin$
+localf mqsub$
+localf msort$
+#else
+extern Muldif.rr$
+extern TeXEq$
+extern TeXLim$
+extern DIROUT$
+extern DIROUTD$
+extern DVIOUTL$
+extern DVIOUTA$
+extern DVIOUTB$
+extern DVIOUTH$
+extern DVIOUTF$
+static LCOPT$
+static COLOPT$
+static LPOPT$
+static LFOPT$
+extern TikZ$
+extern ErMsg$
+extern FLIST$
+extern IsYes$
+extern XYPrec$
+extern XYcm$
+extern TikZ$
+extern XYLim$
+extern Canvas$
+extern ID_PLOT$
+extern Rand$
+extern LQS$
+#endif
+static S_Fc,S_Dc,S_Ic,S_Ec,S_EC,S_Lc$
+static S_FDot$
+extern AMSTeX$
+Muldif.rr="00170825"$
+AMSTeX=1$
+TeXEq=5$
+TeXLim=80$
+TikZ=0$
+XYcm=0$
+XYPrec=3$
+XYLim=4$
+Rand=0$
+DIROUT="%HOME%\\tex"$
+DVIOUTL="%ASIRROOT%\\bin\\risatex0.bat"$
+DVIOUTA="%ASIRROOT%\\bin\\risatex.bat"$
+DVIOUTB="%ASIRROOT%\\bin\\risatex1%TikZ%.bat"$
+DVIOUTH="start dviout -2 -hyper=0x90 \"%ASIRROOT%\\help\\os_muldif.dvi\" #%LABEL%"$
+DVIOUTF=0$
+LCOPT=["red","green","blue","yellow","cyan","magenta","black","white","gray"]$
+COLOPT=[0xff,0xff00,0xff0000,0xffff,0xffff00,0xff00ff,0,0xffffff,0xc0c0c0]$
+LPOPT=["above","below","left","right"]$
+LFOPT=["very thin","thin","dotted","dashed"]$
+Canvas=[400,400]$
+LQS=[[1,0]]$
+
+ErMsg = newvect(3,[
+ "irregal argument", /* 0 */
+ "too big size", /* 1 */
+ "irregal option" /* 2 */
+])$
+FLIST=0$
+IsYes=[]$
+ID_PLOT=-1$
+
+def erno(N)
+{
+ /* extern ErMsg; */
+ print(ErMsg[N]);
+}
+
+def chkfun(Fu, Fi)
+{
+ /* extern FLIST; */
+ /* extern Muldif.rr; */
+
+ if(type(Fu) <= 1){
+ if(Fu==1)
+ mycat(["Loaded os_muldif Ver.", Muldif.rr, "(Toshio Oshima)"]);
+ else
+ mycat(["Risa/Asir Ver.", version()]);
+ return 1;
+ }
+ if(type(FLIST) < 4)
+ FLIST = flist();
+ if(type(Fu) == 4){
+ for(; Fu != [] ;Fu = cdr(Fu))
+ if(chkfun(car(Fu),Fi) == 0) return 0;
+ return 1;
+ }
+ if(findin(Fu, FLIST) >= 0)
+ return 1;
+ FLIST = flist();
+ if(findin(Fu, FLIST) >= 0)
+ return 1;
+ if(type(Fi)==7){
+ mycat0(["load(\"", Fi,"\") -> try again!\n"],1);
+ load(Fi);
+ }
+ return 0;
+/*
+ if(type(Fi) == 7)
+ Fi = [Fi];
+ for( ; Fi != []; Fi = cdr(Fi))
+ load(car(Fi));
+ FLIST = flist();
+ return (findin(Fu,FLIST)>=0)?1:0;
+*/
+}
+
+def makev(L)
+{
+ S = "";
+ Num=getopt(num);
+ while(length(L) > 0){
+ VL = car(L); L = cdr(L);
+ if(type(VL) == 7)
+ S = S+VL;
+ else if(type(VL) == 2 || VL < 10)
+ S = S+rtostr(VL);
+ else if(VL<46 && Num!=1)
+ S = S+asciitostr([VL+87]);
+ else
+ S = S+rtostr(VL);
+ }
+ return strtov(S);
+}
+
+def makenewv(L)
+{
+ if((V=getopt(var))<2) V="z_";
+ else if(isvar(V)) V=rtostr(V);
+ if(type(N=getopt(num))!=1) N=0;
+ Var=varargs(L|all=2);
+ for(XX=[],I=J=0;;I++){
+ X=strtov(V+rtostr(I));
+ if(findin(X,Var)<0){
+ XX=cons(X,XX);
+ if(++J>N) return X;
+ else if(J==N) return reverse(XX);
+ }
+ }
+}
+
+def shortv(P,L)
+{
+ V=vars(P);
+ if(type(T=getopt(top))==2) T=strtoascii(rtostr(T))[0]-87;
+ else T=10;
+ for(;L!=[];L=cdr(L)){
+ for(J=0;J<36;J++){
+ if(findin(X=makev([car(L),J]|num=1),V)>=0){
+ while(findin(Y=makev([T]),V)>=0) T++;
+ if(T>35) return P;
+ P=subst(P,X,Y);
+ T++;
+ }else if(J>0) break;
+ }
+ }
+ return P;
+}
+
+def vweyl(L)
+{
+ if(type(L) == 4){
+ if(length(L) == 2)
+ return L;
+ else
+ return [L[0],makev(["d",L[0]])];
+ }
+ /* else if(type(L)<2) return L; */
+ return [L,makev(["d", L])];
+}
+
+def mycat(L)
+{
+ if(type(L) != 4){
+ print(L);
+ return;
+ }
+ Opt = getopt(delim);
+ Del = (type(Opt) >= 0)?Opt:" ";
+ Opt = getopt(cr);
+ CR = (type(Opt) >= 0)?0:1;
+ while(L != []){
+ if(Do==1)
+ print(Del,0);
+ print(car(L),0);
+ L=cdr(L);
+ Do = 1;
+ }
+ if(CR) print("");
+}
+
+def fcat(S,X)
+{
+ if(type(S)!=7){
+ if(type(DIROUTD)!=7){
+ DIROUTD=str_subst(DIROUT,["%HOME%","%ASIRROOT%","\\"],
+ [getenv("HOME"),get_rootdir(),"/"])+"/";
+ if(isMs()) DIROUTD=str_subst(DIROUTD,"/","\\"|sjis=1);
+ }
+ if(S==-1) return;
+ T="fcat";
+ if(S>=2&&S<=9) T+=rtostr(S);
+ T=DIROUTD+T+".txt";
+ if(S==-1) return T;
+ if(S!=0&&access(T)) remove_file(T);
+ S=T;
+ }
+ R=output(S);
+ print(X);
+ output();
+ if(getopt(exe)==1) shell("\""+S+"\"");
+ return R;
+}
+
+def mycat0(L,T)
+{
+ Opt = getopt(delim);
+ Del = (type(Opt) >= 0)?Opt:"";
+ if(type(L)!=4) L=[L];
+ while(L != []){
+ if(Do==1)
+ print(Del,0);
+ print(car(L),0);
+ L=cdr(L);
+ Do = 1;
+ }
+ if(T) print("");
+}
+
+def findin(M,L)
+{
+ if(type(L)==4){
+ for(I = 0; L != []; L = cdr(L), I++)
+ if(car(L) == M) return I;
+ }else if(type(L)==5){
+ K=length(L);
+ for(I = 0; I < K; I++)
+ if(L[I] == M) return I;
+ }else return -2;
+ return -1;
+}
+
+def countin(S,M,L)
+{
+ Step=getopt(step);
+ if(type(Step)==1){
+ N=(Step>0)?Step:-Step;
+ if(type(L)==5) L=vtol(L);
+ L=qsort(L);
+ while(car(L)<S&&L!=[]) L=cdr(L);
+ S+=M;
+ for(R=[],C=I=0;L!=[];){
+ if(car(L)<S||(Step>0&&car(L)==S)){
+ C++;
+ L=cdr(L);
+ }else{
+ R=cons(C,R);C=0;S+=M;
+ if(N>1&&++I>=N) break;
+ }
+ }
+ if(C>0) R=cons(C,R);
+ if(N>1&&(N-=length(R))>0) while(N-->0) R=cons(0,R);
+ return reverse(R);
+ }
+ if(type(L)==4){
+ for(N=0; L!=[]; L=cdr(L))
+ if(car(L)>=S && car(L)<=M) N++;
+ }else if(type(L)==5){
+ K=length(L);
+ for(I = 0; I < K; I++)
+ if(L[I]>=S && L[I]<=M) N++;
+ }else return -2;
+ return N;
+}
+
+def mycoef(P,N,X)
+{
+ if(type(P)<3 && type(N)<3)
+ return coef(P,N,X);
+ if(type(P) >= 4)
+#ifdef USEMODULE
+ return map(os_md.mycoef,P,N,X);
+#else
+ return map(mycoef,P,N,X);
+#endif
+ if(type(N)==4){
+ for(;N!=[];N=cdr(N),X=cdr(X))
+ P=mycoef(P,car(N),car(X));
+ return P;
+ }
+ if(deg(dn(P), X) > 0){
+ P = red(P);
+ if(deg(dn(P), X) > 0)
+ return 0;
+ }
+ return red(coef(nm(P),N,X)/dn(P));
+}
+
+def mydiff(P,X)
+{
+ if(X == 0)
+ return 0;
+ if(type(P)<3 && type(X)<3)
+ return diff(P,X);
+ if(type(P) >= 4)
+#ifdef USEMODULE
+ return map(os_md.mydiff,P,X);
+#else
+ return map(mydiff,P,X);
+#endif
+ if(type(X)==4){
+ for(;X!=[];X=cdr(X)) P=mydiff(P,car(X));
+ return P;
+ }
+ if(ptype(dn(P),X)<2)
+ return red(diff(nm(P),X)/dn(P));
+ return red(diff(P,X));
+}
+
+def myediff(P,X)
+{
+ if(X == 0)
+ return 0;
+ if(type(P) < 3)
+ return ediff(P,X);
+ if(type(P) >= 4)
+#ifdef USEMODULE
+ return map(os_md.myediff,P,X);
+#else
+ return map(myediff,P,X);
+#endif
+ if(deg(dn(P),X) == 0)
+ return red(ediff(nm(P),X)/dn(P));
+ return red(X*diff(P,X));
+}
+
+def m2l(M)
+{
+ if(type(M) < 4)
+ return [M];
+ if(type(M) == 4){
+ if(type(car(M))==4 && getopt(flat)==1){
+ for(MM = []; M!=[]; M=cdr(M))
+ MM = append(MM,car(M));
+ return MM;
+ }
+ return M;
+ }
+ if(type(M) == 5)
+ return vtol(M);
+ S = size(M);
+ for(MM = [], I = S[0]-1; I >= 0; I--)
+ MM = append(vtol(M[I]), MM);
+ return MM;
+}
+
+def mydeg(P,X)
+{
+ if(type(P) < 3)
+ return deg(P,X);
+ II = -1;
+ Opt = getopt(opt);
+ if(type(P) >= 4){
+ S=(type(P) == 6)?size(P)[0]:0;
+ P = m2l(P);
+ for(I = 0, Deg = -3; P != []; P = cdr(P), I++){
+ if( (DT = mydeg(car(P),X)) == -2)
+ return -2;
+ if(DT > Deg){
+ Deg = DT;
+ II = I;
+ }
+ }
+ return (Opt==1)?([Deg,(S==0)?II:[idiv(II,S),irem(II,S)]]):Deg;
+ }
+ P = red(P);
+ if(deg(dn(P),X) == 0)
+ return deg(nm(P),X);
+ return -2;
+}
+
+def pfctr(P,X)
+{
+ P=red(P);
+ if((T=ptype(P,X))>3) return [];
+ if(T==3){
+ G=pfctr(dn(P),X);
+ F=pfctr(nm(P),X);
+ R=[[car(F)[0]/car(G)[0],1]];
+ for(F=cdr(F);F!=[];F=cdr(F)) R=cons(car(F),R);
+ for(G=cdr(G);G!=[];G=cdr(G)) R=cons([car(G)[0],-car(G)[1]],R);
+ return reverse(R);
+ }
+ F=fctr(nm(P));
+ for(R=[],C=1/dn(P);F!=[];F=cdr(F))
+ if(mydeg(car(F)[0],X)>0) R=cons(car(F),R);
+ else C*=car(F)[0]^car(F)[1];
+ return cons([C,1],reverse(R));
+}
+
+def mymindeg(P,X)
+{
+ if(type(P) < 3)
+ return mindeg(P,X);
+ II = -1;T=60;
+ Opt = getopt(opt);
+ if(type(P) >= 4){
+ S=(type(P) == 6)?size(P)[0]:0;
+ P = m2l(P);
+ for(I = 0, Deg = -3; P != []; P = cdr(P), I++){
+ if(car(P) == 0)
+ continue;
+ if( (DT = mydeg(car(P),X)) == -2)
+ return -2;
+ if(DT < Deg || Deg == -3){
+ if(DT==0){
+ if(type(car(P))>=T) continue;
+ T=type(car(P));
+ }
+ Deg = DT;
+ II = I;
+ }
+ }
+ return (Opt==1)?([Deg,(S==0)?II:[idiv(II,S),irem(II,S)]]):Deg;
+ }
+ P = red(P);
+ if(deg(dn(P),X) == 0)
+ return mindeg(nm(P),X);
+ return -2;
+}
+
+def m1div(M,N,L)
+{
+ L = (type(L) <= 3)?[0,L]:vweyl[L];
+ DX = L[1]; X = L[0];
+ if(mydeg(N,DX) != 0)
+ return 0;
+ DD = mydeg(M,DX);
+ MM = M;
+ while( (Deg=mydeg(MM,DX)) > 0){
+ MC = mycoef(MM,Deg,DX)*DX^(Deg-1);
+ MS = radd(MC, MS);
+ MM = radd(MM, muldo(MC,radd(-DX,N),L));
+ }
+ return [MM, MS];
+}
+
+
+def mulsubst(F,L)
+{
+ N = length(L);
+ if(N == 0)
+ return F;
+ if(type(L[0])!=4) L=[L];
+ if(getopt(inv)==1){
+ for(R=[];L!=[];L=cdr(L)) R=cons([car(L)[1],car(L)[0]],R);
+ L=reverse(R);
+ }
+ if(length(L)==1) return mysubst(F,L);
+ L1 = newvect(N);
+ for(J = 0; J < N ; J++)
+ L1[J] = uc();
+ L2 = newvect(N);
+ for(J = 0; J < N; J++){
+ S = L[J][1];
+ for(I = 0; I < N; I++)
+ S = mysubst(S,[L[I][0],L1[I]]);
+ L2[J] = S;
+ }
+ for(J = 0; J < N; J++)
+ F = mysubst(F, [L[J][0],L2[J]]);
+ for(J = 0; J < N; J++)
+ F = mysubst(F, [L1[J],L[J][0]]);
+ return F;
+}
+
+def cmpsimple(P,Q)
+{
+ T = getopt(comp);
+ if(P == Q)
+ return 0;
+ D = 0;
+ if(type(T) < 0)
+ T = 7;
+ if(iand(T,1))
+ D = length(vars(P)) - length(vars(Q));
+ if(!D && iand(T,2))
+ D = nmono(P) - nmono(Q);
+ if(!D && iand(T,4))
+ D = str_len(rtostr(P)) - str_len(rtostr(Q));
+ if(!D){
+ if(P > Q) D++;
+ else D--;
+ }
+ return D;
+}
+
+def simplify(P,L,T)
+{
+ if(type(P) > 3)
+#ifdef USEMODULE
+ return map(os_md.simplify,P,L,T);
+#else
+ return map(simplify,P,L,T);
+#endif
+ if(type(L[0]) == 4){
+ if(length(L[0]) > 1)
+#if USEMODULE
+ return fmult(os_md.simplify,P,L,[T]);
+#else
+ return fmult(simplify,P,L,[T]);
+#endif
+ L = L[0];
+ }
+ if(type(Var=getopt(var)) == 4 && Var!=[]){
+ if(type(P) == 3)
+ return simplify(nm(P),P,L,T|var=Var)/simplify(dn(P),P,L,T|var=Var);
+ V = car(Var);
+ if((I = mydeg(P,V)) > 0){
+ Var = cdr(Var);
+ for(Q=0; I>=0 ; I--)
+ Q += simplify(mycoef(P,I,V), L, T|var=Var)*V^I;
+ return Q;
+ }
+ }
+ if(length(L) == 1){
+ L = car(L);
+ for(V = vars(L); V != []; V = cdr(V)){
+ VT = car(V);
+ if(deg(L,VT) != 1) continue;
+ P = simplify(P, [VT, -red(coef(L,0,VT)/coef(L,1,VT))], T);
+ }
+ return P;
+ }
+ Q = mysubst(P,[L[0],L[1]]);
+ return (cmpsimple(P,Q|comp=T) <= 0)?P:Q;
+}
+
+def monotos(P)
+{
+ if(nmono(P) <= 1)
+ return rtostr(P);
+ return "("+rtostr(P)+")";
+}
+
+
+def monototex(P)
+{
+ Q=my_tex_form(P);
+ if(nmono(P)<2 && (getopt(minus)!=1 || str_str(Q,"-"|top=0,end=0)<0))
+ return Q;
+ return "("+Q+")";
+}
+
+def minustos(S)
+{
+ if(str_str(S,"-"|top=0,end=0)<0) return S;
+ return "("+S+")";
+}
+
+def vnext(V)
+{
+ S = length(V);
+ for(I = S-1; I > 0; I--){
+ if(V[I-1] < V[I]){
+ V0 = V[I-1];
+ for(J = I+1; J < S; J++)
+ if(V0 >= V[J]) break;
+ V[I-1] = V[--J];
+ V[J] = V0;
+ for(J = S-1; I < J; I++, J--){
+ V0 = V[I];
+ V[I] = V[J];
+ V[J] = V0;
+ }
+ return 1;
+ }
+ }
+ return 0;
+}
+
+def ldict(N, M)
+{
+ Opt = getopt(opt);
+ R = S = [];
+ for(I = 2; N > 0; I++){
+ R = cons(irem(N,I), R);
+ N = idiv(N,I);
+ }
+ L = LL = length(R);
+ T=newvect(LL+1);
+ while(L-- > 0){
+ V = car(R); R = cdr(R);
+ for(I = J = 0; J <= V ; I++){
+ if(T[I] == 0)
+ J++;
+ }
+ T[I-1] = 1;
+ S = cons(LL-I+1, S);
+ }
+ for(I = 0; I <= LL; I++){
+ if(T[I] == 0){
+ S = cons(LL-I, S);
+ break;
+ }
+ }
+ if(M == 0)
+ return S;
+ if(M <= LL){
+ print("too small size");
+ return 0;
+ }
+ T = [];
+ for(I = --M; I > LL; I--)
+ T = cons(I,T);
+ S = append(S,T);
+ if(Opt == 2 || Opt == 3)
+ S = reverse(S);
+ if(Opt != 1 && Opt != 3)
+ return S;
+ for(T = []; S != []; S = cdr(S))
+ T = cons(M-car(S),T);
+ return T;
+}
+
+def ndict(L)
+{
+ Opt = getopt(opt);
+ R = [];
+ if(Opt != 1 && Opt != 2)
+ L = reverse(L);
+ T = (Opt == 1 || Opt == 3)?1:0;
+ for( ; L != []; L = cdr(L)){
+ for(I = 0, V = car(L), LT = cdr(L); LT != []; LT = cdr(LT))
+ if(T == 0){
+ if(V < car(LT)) I++;
+ }else if (V > car(LT)) I++;
+ R = cons(I, R);
+ }
+ R = reverse(R);
+ for(V = 0, I = length(R); I > 0; R = cdr(R), I--)
+ V = V*I + car(R);
+ return V;
+}
+
+def nextsub(L,N)
+{
+ if(type(L) == 1){
+ for(LL = [], I = L-1; I >= 0; I--)
+ LL = cons(I,LL);
+ return LL;
+ }
+ M = length(L = ltov(L));
+ K = N-M;
+ for(I = M-1; I >= 0; I--)
+ if(L[I] < I+K) break;
+ if(I < 0)
+ return 0;
+ for(J = L[I]+1; I < M; I++, J++)
+ L[I] = J;
+ return vtol(L);
+}
+
+def nextpart(L)
+{
+ if(car(L) <= 1)
+ return 0;
+ for(I = 0, L = reverse(L); car(L) == 1; L=cdr(L))
+ I++;
+ I += (K = car(L));
+ R = irem(I,--K);
+ R = (R==0)?[]:[R];
+ for(J = idiv(I,K); J > 0; J--)
+ R = cons(K,R);
+ L = cdr(L);
+ while(L!=[]){
+ R = cons(car(L), R);
+ L = cdr(L);
+ }
+ return R;
+}
+
+def transpart(L)
+{
+ L = reverse(L);
+ for(I=1, R=[]; L!= []; I++){
+ R = cons(length(L), R);
+ while(L != [] && car(L) <= I)
+ L = cdr(L);
+ }
+ return reverse(R);
+}
+
+def trpos(A,B,N)
+{
+ S = newvect(N);
+ for(I = 0; I < N; I++)
+ S[I]=(I==A)?B:((I==B)?A:I);
+ return S;
+}
+
+def sprod(S,T)
+{
+ L = length(S);
+ V = newvect(L);
+ while(--L >= 0)
+ V[L] = S[T[L]];
+ return V;
+}
+
+def sinv(S)
+{
+ L = length(S);
+ V = newvect(L);
+ while(--L >= 0)
+ V[S[L]] = L;
+ return V;
+}
+
+def slen(S)
+{
+ L = length(S);
+ for(V = 0, J = 2; J < L; i++){
+ for(I = 0; I < J; I++)
+ if(S[I] > S[J]) V++;
+ }
+ return V;
+}
+
+def sord(W,V)
+{
+ L = length(W);
+ W0 = nevect(L);
+ V0 = newvect(L);
+ for(I = F = C = 0; I < L; I++){
+ C = 0;
+ if( (W1 = W[I]) > (V1 = V[I]) ){
+ if(F < 0) C = 1;
+ else if(F==0) F = 1;
+ }else if(W1 < V1){
+ if(F > 0) C = 1;
+ else if(F==0) F = -1;
+ }
+ for(J = I;--J >= 0 && W0[J] > W1; ) W0[J+1] = W0[J];
+ W0[J+1] = W1;
+ for(J = I;--J >= 0 && V0[J] > V1; ) V0[J+1] = V0[J];
+ V0[J+1] = V1;
+ if(C){
+ for(J = I; J >= 0; J--){
+ if((W1=W0[J]) == (V1=V0[J])) continue;
+ if(W1 > V1){
+ if(F < 0) return 2;
+ }
+ else if(F > 0) return 2;
+ }
+ }
+ }
+ return F;
+}
+
+def vprod(V1,V2)
+{
+ for(R = 0, I = length(V1)-1; I >= 0; I--)
+ R = radd(R, rmul(V1[I], V2[I]));
+ return R;
+}
+
+def dnorm(V)
+{
+ if(type(V)<2) return dabs(V);
+ R=0;
+ if(type(V)!=4)
+ for (I = length(V)-1; I >= 0; I--) R+= V[I]^2;
+ else{
+ if(type(V[0])>3){
+ V=ltov(V[0])-ltov(V[1]);
+ return dnorm(V);
+ }
+ for(;V!=[]; V=cdr(V)) R+=car(V)^2;
+ }
+ return dsqrt(R);
+}
+
+def dvprod(V1,V2)
+{
+ if(type(V1)<2) return V1*V2;
+ R=0;
+ if(type(V1)!=4)
+ for(I = length(V1)-1; I >= 0; I--)
+ R += V1[I]*V2[I];
+ else{
+ for(; V1!=[]; V1=cdr(V1),V2=cdr(V2))
+ R+=car(V1)*car(V2);
+ }
+ return R;
+}
+
+def dvangle(V1,V2)
+{
+ if(V2==0 && type(V1)==4 && length(V1)==3 &&
+ (type(V1[0])==4 || type(V1[0])==5 || type(V1[1])==4 || type(V1[1])==5 ||
+ type(V1[2])==4 || type(V1[2])==5) ){
+ if(V1[0]==0 || V1[1]==0 || V1[2]==0) return 1;
+ PV2=V1[1];
+ if(type(PV2)==4){
+ PV2=ltov(PV2);
+ return dvangle(PV2-ltov(V1[0]),ltov(V1[2])-PV2);
+ }else
+ return dvangle(PV2-V1[0],V1[2]-PV2);
+ }
+ if((L1=dnorm(V1))==0 || (L2=dnorm(V2))==0) return 1;
+ return dvprod(V1,V2)/(L1*L2);
+}
+
+def mulseries(V1,V2)
+{
+ L = length(V1);
+ if(size(V2) < L)
+ L = size(V2);
+ VV = newvect(L);
+ for(J = 0; J < L; J++){
+ for(K = R = 0; K <= J; K++)
+ R = radd(R,rmul(V1[K],V2[J-K]));
+ VV[J] = R;
+ }
+ return VV;
+}
+
+def scale(L)
+{
+ T=0;LS=1;
+ Pr=getopt(prec);
+ if(type(L)!=4){
+ if(L==2){
+ L=(Pr!=1)?
+ [[[1,2,1/20],[2,5,1/10],[5,10,1/5], [10,20,1/2],[20,50,1],[50,100,2]],
+ [[1,2,1/10],[2,5,1/2], [10,20,1],[20,50,5]],
+ [[1,2,1/2],[2,10,1], [10,20,5],[20,100,10]]]:
+ [[[1,2,1/50],[2,5,1/20],[5,10,1/10], [10,20,1/5],[20,50,1/2],[50,100,1]],
+ [[1,5,1/10],[5,10,1/2], [10,20,1],[50,100,5]],
+ [[1,5,1/2],[5,10,1], [10,50,5],[50,100,10]]];
+ LS=2;
+ }else if(L==3){
+ L=(Pr!=1)?
+ [[[1,2,1/20],[2,5,1/10],[5,10,1/5], [10,20,1/2],[20,50,1],[50,100,2],
+ [100,200,5],[200,500,10],[500,1000,20]],
+ [[1,2,1/10],[2,5,1/2], [10,20,1],[20,50,5], [100,200,10],[200,500,50]],
+ [[1,2,1/2],[2,10,1], [10,20,5],[20,100,10], [100,200,50],[200,1000,100]]]:
+ [[[1,2,1/50],[2,5,1/20],[5,10,1/10],[10,20,1/5],[20,50,1/2],[50,100,1],
+ [100,200,2],[200,500,5],[500,1000,10]],
+ [[1,5,1/10],[5,10,1/2], [10,50,1],[50,100,5], [100,500,10],[500,1000,50]],
+ [[1,5,1/2],[5,10,1], [10,50,5],[50,100,10], [100,500,50],[500,1000,100]]];
+ LS=3;
+ }else{
+ L=(Pr!=1)?
+ [[[1,2,1/50],[2,5,1/20],[5,10,1/10]],
+ [[1,5,1/10],[5,10,1/2]],
+ [[1,5,1/2],[5,10,1]]]:
+ [[[1,2,1/100],[2,5,1/50],[5,10,1/20]],
+ [[1,2,1/20],[2,10,1/10]],
+ [[1,2,1/10],[2,10,1/2]]];
+ }
+ }else if(type(L[0])!=4){
+ L=[L];
+ if(length(L)!=3||L[0]+L[2]>L[1]) T=L;
+ }
+ if(T==0){
+ if(type(L[0][0])!=4) L=[L];
+ for(R=[];L!=[];L=cdr(L)){
+ for(RR=[],LT=car(L);LT!=[];LT=cdr(LT))
+ for(I=car(LT)[0];I<=car(LT)[1];I+=car(LT)[2]) RR=cons(I,RR);
+ RR=lsort(RR,[],1);
+ R=cons(RR,R);
+ }
+ R=reverse(R);
+ for(T=[];R!=[];R=cdr(R)){
+ if(length(R)>1) T=cons(lsort(R[0],R[1],"setminus"),T);
+ else T=cons(R[0],T);
+ }
+ }
+ V0=dlog(10);
+ S0=S1=1;D0=D1=0;
+ SC=getopt(scale);
+ if(type(SC)==4){
+ S0=SC[0];S1=SC[1];
+ }else if(type(SC)==1){
+ S0=SC;S1=0;
+ }else return T;
+ if(type(D=getopt(shift))==4){
+ D0=D[0];D1=D[1];
+ }
+ if(type(F=getopt(f))>1) F=f2df(F);
+ else F=0;
+ for(M=M0=[],I=length(T);T!=[];T=cdr(T),I--){
+ for(S=car(T);S!=[];S=cdr(S)){
+ V=((!F)?dlog(car(S))/dlog(10)/LS:myfdeval(F,car(S)))*S0;
+ if(S1!=0){
+ M=cons([V+D0,D1],M);
+ M=cons([V+D0,I*((length(SC)>2)?SC[I]:S1)+D1],M);
+ M=cons(0,M);
+ }else M0=cons(V+D0,M0);
+ }
+ if(S1==0) M=cons(reverse(M0),M);
+ }
+ if(S1!=0) M=cdr(M);
+ if(S1==0||getopt(TeX)!=1) return M;
+ M=reverse(M);
+ if(type(U=getopt(line))==4)
+ M=cons([U[0]+D0,D1],cons([U[1]+D0,D1],cons(0,M)));
+ if(type(Col=getopt(col))<1) S=xylines(M);
+ else S=xylines(M|opt=Col);
+ if(type(Mes=getopt(mes))==4){
+ S3=car(Mes);
+ if(type(S3)==4){
+ Col=S3[1];
+ S3=car(S3);
+ }else Col=0;
+ V=car(scale(cdr(Mes)));
+ if(!F) Mes=scale(cdr(Mes)|scale=[S0/LS,0],shift=[D0,D1]);
+ else Mes=scale(cdr(Mes)|f=F,scale=[S0,0],shift=[D0,D1]);
+ for(M=car(Mes);M!=[];M=cdr(M),V=cdr(V)){
+ VT=deval(car(V));
+ if(Col!=0) VT=[Col,VT];
+ S+=xyput([car(M),S3,VT]);
+ }
+ }
+ return S;
+}
+
+def pluspower(P,V,N,M)
+{
+ RR = 1;
+ for(K = R = 1; K < M-1; I++){
+ R = R*(N-K+1)*P/K;
+ RR = radd(RR,R);
+ }
+ VV = newvect(M);
+ for(K = 0; K < M-1; K++)
+ VV[K] = red(mycoef(RR,K,V));
+}
+
+def vtozv(V)
+{
+ if(type(V)<4) V=newvect(1,[V]);
+ S = length(V);
+ VV = newvect(S);
+ Lcm = 1;
+ for(K = 0; K < S; K++){
+ VV[K] = red(V[K]);
+ Lcm = lcm(Lcm,dn(VV[K]));
+ C = ptozp(nm(VV[K])|factor=0);
+ if(K == 0){
+ Dn = dn(C[1]);
+ Nm = nm(C[1]);
+ PNm = nm(C[0]);
+ }else{
+ Dn = ilcm(Dn,dn(C[1]));
+ Nm = igcd(Nm,nm(C[1]));
+ PNm = gcd(PNm,nm(C[0]));
+ }
+ }
+ if(!(M=Nm*PNm)) return [VV,0];
+ Mul = (Lcm*Dn)/M;
+ for(K = 0; K < S; K++)
+ VV[K] = rmul(VV[K],Mul);
+ return [VV,Mul];
+}
+
+def dupmat(M)
+{
+ if(type(M) == 6){
+ Size = size(M);
+ MM = newmat(Size[0],Size[1]);
+ for(I = 0; I < Size[0]; I++){
+ for(J = 0; J < Size[1]; J++)
+ MM[I][J] = M[I][J];
+ }
+ return MM;
+ }
+ if(type(M) == 5)
+ return ltov(vtol(M));
+ return M;
+}
+
+def matrtop(M)
+{
+ S = size(M);
+ MM = dupmat(M);
+ Lcm = newvect(S[0]);
+ for(J = 0; J < S[0]; J++){
+ U = vtozv(M[J]);
+ for(K = -1, I = 0; I < S[1]; I++)
+ MM[J][I] = U[0][I];
+ Lcm[J] = U[1];
+ }
+ return [MM,Lcm];
+}
+
+def mytrace(M)
+{
+ S=size(M);
+ if(S[0]!=S[1]) return 0;
+ for(I=V=0; I<S[0]; I++){
+ V+=M[I][I];
+ }
+ return V;
+}
+
+def mydet(M)
+{
+ MM = matrtop(M);
+ if(type(MM[0]) == 6){
+ S = size(M);
+ for(Dn = 1, I = 0; I < S[0]; I++)
+ Dn *= MM[1][I];
+ return (!Dn)?0:red(det(MM[0])/Dn);
+ }
+}
+
+def mperm(M,P,Q)
+{
+ if(type(M) == 6){
+ S = size(M);
+ if(type(P) <= 1)
+ P=(P==1)?Q:trpos(0,0,S[0]);
+ if(type(P) > 3 && type(P[0]) >= 4)
+ P = trpos(P[0][0],P[0][1],S[0]);
+ else if(type(P) == 4){
+ if(length(P)==2 && type(P[1])==4){
+ P0=P[0];P1=car(P[1]);P=newvect(P1);
+ for(I=0;I<P1;I++) P[I]=P0+I;
+ }else P = ltov(P);
+ }
+ if(type(Q) <= 1)
+ Q=(Q==1)?P:trpos(0,0,S[1]);
+ if(type(Q) > 3 && type(Q[0]) >= 4)
+ Q = trpos(Q[0][0],Q[0][1],S[1]);
+ if(type(Q) == 4){
+ if(length(Q)==2 && type(Q[1])==4){
+ P0=Q[0];P1=car(Q[1]);Q=newvect(P1);
+ for(I=0;I<P1;I++) Q[I]=P0+I;
+ }else Q = ltov(Q);
+ }
+ MM = newmat(S0=length(P),S1=length(Q));
+ for(I = 0; I < S0; I++){
+ MMI = MM[I]; MPI = M[P[I]];
+ for(J = 0; J < S1; J++)
+ MMI[J] = MPI[Q[J]];
+ }
+ return MM;
+ }
+ if((type(M) == 5 || type(M) == 4) && type(P) >= 4){
+ if(length(P) == 1 && type(car(P)) == 4)
+ P = trpos(car(P)[0],car(P)[1],length(M));
+ MM = newvect(S = length(P));
+ for(I = 0; I < S; I++)
+ MM[I] = M[P[I]];
+ if(type(M) == 4)
+ MM = vtol(MM);
+ return MM;
+ }
+ return M;
+}
+
+def mtranspose(M)
+{
+ if(type(M)==4){
+ MV=ltov(M);
+ II=length(MV);
+ for(I=L=0; I<II; I++){
+ if(type(MV[I])!=4) return M;
+ MV[I]=ltov(MV[I]);
+ }
+ for(R=[],J=0; ;J++){
+ for(T=[],I=F=0; I<II; I++){
+ if(length(MV[I])>J){
+ F=1;
+ T=cons(MV[I][J],T);
+ }
+ }
+ if(F==0) return reverse(R);
+ if(F==1) R=cons(reverse(T),R);
+ }
+ }
+ if(type(M) != 6)
+ return M;
+ S = size(M);
+ MM = newmat(S[1],S[0]);
+ for(I = 0; I < S[0]; I++){
+ for(J = 0; J < S[1]; J++)
+ MM[J][I] = M[I][J];
+ }
+ return MM;
+}
+
+def mtoupper(MM, F)
+{
+ TeXs=["\\ -=\\ ","\\ +=\\ "];
+ Lins=[" -= line"," += line"];
+ Assume=["If","Assume"];
+ if(type(St = getopt(step))!=1) St=0;
+ Opt = getopt(opt);
+ if(type(Opt)!=1) Opt=0;
+ TeX=getopt(dviout);
+ if(type(Tab=getopt(tab))!=1 && Tab!=0) Tab=2;
+ Line="\\text{line}";
+ if(type(TeX)!=1 || !St) TeX=0;
+ Size = size(MM);
+ if(F==-1){
+ M = newmat(Size[0], Size[1]+1);
+ for(I = 0; I < Size[0]; I++){
+ for(J = 0; J < Size[1]; J++)
+ M[I][J] = MM[I][J];
+ M[I][Size[1]] = zz^I;
+ }
+ Size = size(M);
+ F = 1;
+ }else if(F<0){
+ F=Size[0];
+ M = newbmat(1,2,[[MM,mgen(F,0,[1],0)]]);
+ Size=[Size[0],F+Size[1]];
+ }else
+ M = dupmat(MM);
+ if(St){
+ if(TeX) Lout=[[dupmat(M)]];
+ else mycat0([M,"\n\n"],0);
+ }
+ Top="";
+ if(Opt>3){
+ for(I=Opt; I>4; I--)
+ Top+=(TeX)?"\\ ":" ";
+ }
+ PC=IF=1;
+ for(K = JJ = 0; K < Size[1] - F; K++){
+ for(J = JJ; J < Size[0]; J++){
+ if(M[J][K] != 0){ /* search simpler element */
+ if(Opt>2 && (Mul=M[J][K])!=1){
+ for(FF=0,JT=J; JT<Size[0]; JT++){
+ if((Val=M[JT][K])==1){ /* 1 */
+ Mul=1;J=JT; break;
+ }
+ if(Val==0 || type(Val)>type(Mul)) continue;
+ if(type(Val)<type(Mul) || (Val==-1 && Mul!=-1)){
+ Mul=Val; J=JT; /* smaller type */
+ }
+ else if(Opt>3){
+ if(isint(Val)==1){ /* integer elememt */
+ if(isint(Mul)!=1){
+ Mul=Val; J=JT; /* integer */
+ }
+ if(FF<3||(FF==3&&Val>0)){
+ for(JK=K+1;;){
+ if(JK>=Size[1]-F){
+ J=JT;
+ FF=((Mul=Val)>0)?4:3;
+ break; /* divisible int => 4: pos_int 3: neg_int */
+ }
+ if(isint(M[JT][JK++]/Val)!=1) break;
+ }
+ }
+ }else if(!FF){
+ for(JK=K+1; JK<Size[1]-F; JK++){
+ if(isint(M[JT][JK]/Val)!=1) break;
+ J=JT; FF=1; /* divisible => 1: non integer */
+ }
+ }
+ }
+ }
+ if(FF==0 && Opt>3 && Mul!=1 && Mul!=-1){ /* FF > 0 => divisible */
+ for(FF=0,J0=J; J0<Size[0]-1 && FF!=9; J0++){
+ VV0=M[J0][K];
+ if(VV0==0 || isint(VV0)==0) continue;
+ for(J1=J0+1;J1<Size[0] && FF!=9; J1++){
+ VV1=M[J1][K];
+ if(VV1==0 || isint(VV1)==0) continue;
+ for(C=FT=0,V0=VV0,V1=VV1; C<2 && FF!=10; C++,V1=V0,V0=VV1){
+ for(CC=0,RC=ceil(V0/V1);CC<2;CC++,RC--){
+ if((CD=V0-RC*V1)==0 && (RC==1 || RC==-1)){
+ FT=1; FF=10; /* 10: vanish by +- */
+ }else if(CD==1){
+ FV=(vars(M[J0])==[]&&vars(M[J1])==[])?1:0;
+ if((RC==1 || RC==-1) && FF<8+FV){
+ FT=1; FF=8+FV; /* 8/9: 1 by +- */
+ }else if(FF<6+VF){
+ FT=1; FF=6+FV; /* 6/7: 1 by times */
+ }
+ }else if(CD==-1){
+ FV=(vars(M[J0])==[]&&vars(M[J1])==[])?1:0;
+ if((RC==1 || RC==-1) && FF<4+FV){
+ FT=1; FF=4+FV; /* 4/5: 1 by +- */
+ }else if(FF<2+VF){
+ FT=1; FF=2+FV; /* 2/3: 1 by times */
+ }
+ }
+ if(FT==1){
+ FT=0; KRC=RC;
+ if(C==0){
+ KJ0=J0; KJ1=J1;
+ }else{
+ KJ0=J1; KJ1=J0;
+ }
+ }
+ }
+ }
+ }
+ }
+ if(FF>0){
+ for(I=K;I<Size[1];I++)
+ M[KJ0][I]=radd(M[KJ0][I],rmul(M[KJ1][I],-KRC));
+ if(KRC<0){
+ KRC=-KRC;Sgn=1;
+ }else
+ Sgn=0;
+ if(St){
+ if(TeX){
+ if(KRC==1)
+ Lout=cons([Top+"\\xrightarrow{", Line,KJ0+1,TeXs[Sgn],
+ Line,KJ1+1,"}",dupmat(M)],Lout);
+ else
+ Lout=cons([Top+"\\xrightarrow{", Line,KJ0+1,TeXs[Sgn],
+ Line,KJ1+1,"\\times\\left(",KRC,"\\right)}",
+ dupmat(M)],Lout);
+
+ }else{
+ if(KRC==1)
+ mycat([Top+"line",KJ0+1,Lins[Sgn],KJ1+1,"\n",M,"\n"]); else
+ mycat([Top+"line",KJ0+1,Lins[Sgn],KJ1+1," * (",KRC,")\n",M,"\n"]);
+ }
+ }
+ Mul=M[KJ0][K]; J=KJ0;
+ if(FF==10){
+ J--; continue;
+ }
+ }
+ }
+ }
+ /* a parameter Var */
+ Var=0;
+ if(St && Opt>4 && length(Var=vars(nm(M[J][K])))==1){
+ J0=J;Jv=mydeg(nm(M[J0][K]),car(Var));
+ for(I=JJ;I<Size[0]; I++){
+ if((MIK=M[I][K])==0) continue;
+ if((T=vars(MIK=nm(MIK)))==[]){ /* 1/poly */
+ J=I;Var=[]; break;
+ }
+ if(length(T)>1) continue;
+ if(mydeg(MIK,T[0])<Jv){
+ J0=I;Jv=mydeg(MIK);Var=T; /* search minimal degree */
+ }
+ }
+ if(length(Var)==1){
+ Var=car(Var);
+ Q=nm(M[J0][K]);
+ for(I=JJ; I<Size[0]; I++){
+ if(I==J0 || mydeg(nm(M[I][K]),Var)<0) continue;
+ T=rpdiv(nm(M[I][K]),Q,Var);
+ if(T[0]!=0 && (vars(T)==[] || vars(T)==[Var])) break; /* dec. deg */
+ }
+ }
+ }
+ if(type(Var)==2){ /* 1 variable */
+ if(I==Size[0]){
+ for(QF=0,Q0=1,QR=getroot(Q,Var|mult=1);QR!=[];QR=cdr(QR)){
+ if(deg(T=QR[0][1],Var)>0){
+ QF=1;Q0*=T; continue;
+ }
+ if(subst(PC,Var,T)==0) continue;
+ Q0*=(Var-(T=QR[0][1]));
+ if(type(T)<2){
+ M0=subst(M,Var,T);
+ if(TeX){
+ Lout=cons(["\\hspace{",Tab*(St-3)-1,"mm}\\text{If }",
+ Var,"=",T,","] ,Lout);
+ Lout=append(mtoupper(M0,F|step=St+1,opt=Opt,dviout=-2,tab=Tab),Lout);
+ }else{
+ mycat([str_times(" ",St-1)+"If",Var,"=",T,","]);
+ mtoupper(M0,F|step=St+1,opt=Opt);
+ }
+ }
+ }
+ if(Q0!=1){
+ if(TeX)
+ Lout=cons(["\\hspace{",Tab*(St-3)-1,"mm}\\text{"+Assume[QF]+" }",
+ Q0/=fctr(Q0)[0][0],"\\ne0,"],Lout);
+ else
+ mycat([str_times(" ",St-1)+Assume[QF],Q0,"!=0,"]);
+ PC*=Q0;
+ }
+ IF=0;St++;
+ }else{
+ KRC=-red((T[2]*dn(M[J0][K]))/(T[1]*dn(M[I][K])));
+ for(II=K;II<Size[1];II++)
+ M[I][II]=radd(M[I][II],rmul(M[J0][II],KRC));
+ if(TeX)
+ Lout=cons([Top+"\\xrightarrow{", Line,I+1,"\\ +=\\ ",Line,
+ J0+1,"\\times\\left(",KRC,"\\right)}",dupmat(M)],Lout);
+ else
+ mycat([Top+"line",I+1,"+=",Line,J0+1," * (",KRC,")\n",M,"\n"]);
+ J=JJ-1;
+ continue;
+ }
+ }
+ if(J != JJ){
+ for(I = K; I < Size[1]; I++){
+ Temp = M[JJ][I];
+ M[JJ][I] = M[J][I];
+ M[J][I] = (Opt>=2)?Temp:-Temp;
+ }
+ if(St){
+ if(TeX)
+ Lout=cons([Top+"\\xrightarrow{",Line,JJ+1,"\\ \\leftrightarrow\\ ",
+ Line,J+1,"}",dupmat(M)],Lout);
+ else
+ mycat0([Top+"line",JJ+1," <-> line",J+1,"\n",M,"\n\n"],0);
+ }
+ }
+ /* Assume PC != 0 */
+ if(Opt>1){
+ Mul = M[JJ][K];
+ if(Opt > 5 && St && IF && (Var=vars(MIK=nm(Mul)))!=[]){
+ TF=fctr(MIK);
+ for(FF=0,Q0=1,TP=cdr(TF);TP!=[];TP=cdr(TP)){
+ if(type(dn(red(PC/(TP0=car(car(TP))))))<2) continue; /* divisible */
+ Q0*=TP0;
+ for(Var=vars(TP0);Var!=[];Var=cdr(Var)){
+ if(mydeg(TP0,X=car(Var))==1 && type(dn(red(PC/mycoef(TP0,1,X))))<2){
+ /* TP0=A*X+B with non-vanishing A */
+ T=red(-mycoef(TP0,0,X)/mycoef(TP0,1,X));
+ M0=mysubst(M,[X,T]);
+ if(TeX){
+ Lout=cons(["\\hspace{",Tab*(St-3)-1,"mm}\\text{If }",
+ X,"=",T,","] ,Lout);
+ Lout=append(mtoupper(M0,F|step=St+1,opt=Opt,dviout=-2,tab=Tab),
+ Lout);
+ }else{
+ mycat([str_times(" ",St-1)+"If",X,"=",T,","]);
+ mtoupper(M0,F|step=St+1,opt=Opt);
+ }
+ break;
+ }
+ }
+ if(Var==[] && Opt>6){
+ for(Var=vars(TP0);Var!=[];Var=cdr(Var)){
+ if(mydeg(TP0,X=car(Var))==1){
+ /* TP0=A*X+B, A is a poly of X0 with rational funct */
+ T=nm(mycoef(TP0,1,X));
+ for(Var0=vars(T);Var0!=[]; Var0=cdr(Var0)){
+ X0=car(Var0);
+ if(type(dn(red(PC/type(mycoef(T,mydeg(T,X0),X0)))))>1) continue;
+ TR=getroot(T,X0|mult=1);
+ if(findin(X0,vars(TR))<0) break;
+ }
+ if(Var0==[]) continue;
+ for(;TR!=[0];TR=cdr(TR)){
+ if(TR==[]){
+ TR=[0,0];
+ T0=-mycoef(TP0,0,X)/mycoef(TP0,1,X);
+ X0=X;
+ }else T0=car(TR)[1];
+ M0=mysubst(M,[X0,T0]);
+ if(TeX){
+ Lout=cons(["\\hspace{",Tab*(St-3)-1,"mm}\\text{If }",
+ X0,"=",T0,","] ,Lout);
+ Lout=append(mtoupper(M0,F|step=St+1,opt=Opt,dviout=-2,tab=Tab),
+ Lout);
+ }else{
+ mycat([str_times(" ",St-1)+"If",X0,"=",T0,","]);
+ mtoupper(M0,F|step=St+1,opt=Opt);
+ }
+ }
+
+ }
+ break;
+ }
+ }
+ if(Var==[]){
+ FF=1;
+ }
+ }
+ if(Q0!=1){
+ if(FF) FF=1;
+ if(TeX) Lout=cons(["\\hspace{",Tab*(St-3)-1,"mm}\\text{"+Assume[FF]+" }",Q0/=fctr(Q0)[0][0],"\\ne0,"],
+ Lout);
+ else mycat([str_times(" ",St-1)+Assume[FF],Q0,"!=0,"]);
+ PC*=Q0;St++;
+ }
+ }
+ IF=M[JJ][K]=1;
+ if(Mul!=1){
+ for(L=K+1; L<Size[1]; L++)
+ M[JJ][L]=red(M[JJ][L]/Mul);
+ if(St){
+ if(TeX)
+ Lout=cons([Top+"\\xrightarrow{",Line,JJ+1,
+ "\\ \\times=\\ \\left(",red(1/Mul),"\\right)}",
+ dupmat(M)],Lout);
+ else
+ mycat0([Top+"line",JJ+1, " *= (",red(1/Mul), ")\n",M,"\n\n"],0);
+ }
+ }
+
+ }
+ for(J = (Opt>0)?0:(JJ+1); J < Size[0]; J++){
+ if(J == JJ)
+ continue;
+ Mul = -M[J][K];
+ if(Mul!=0){
+ if(Opt!=2) Mul=rmul(Mul,1/M[JJ][K]);
+ for(I = K+1; I < Size[1]; I++)
+ M[J][I] = radd(M[J][I],rmul(M[JJ][I],Mul));
+ M[J][K] = 0;
+ if(St){
+ if(Mul<0){
+ Mul=-Mul;Sgn=0;
+ }else Sgn=1;
+ if(TeX){
+ if(Mul==1)
+ Lout=cons([Top+"\\xrightarrow{", Line,J+1,TeXs[Sgn],Line,JJ+1,
+ "}",dupmat(M)],Lout);
+ else Lout=cons([Top+"\\xrightarrow{", Line,J+1,TeXs[Sgn],Line,JJ+1,
+ "\\times\\left(",Mul,"\\right)}",dupmat(M)],Lout);
+ }else{
+ if(Mul==1)
+ mycat0([Top+"line",J+1, Lins[Sgn],JJ+1,"\n",M,"\n\n"],0);
+ else
+ mycat0([Top+"line",J+1, Lins[Sgn],JJ+1," * (",Mul,")\n",M,"\n\n"],0);
+ }
+ }
+ }
+ }
+ JJ++;
+ }
+ }
+ }
+ if(TeX){
+ if(TeX==-2) return Lout;
+ Lout=reverse(Lout);
+ Br="\\allowdisplaybreaks";
+ Cr="\\\\\n &";
+ if(getopt(pages)==1) Cr=Br+Cr;
+ if(type(S=getopt(cr))==7) Cr=S;
+ if(type(Lim=getopt(lim))==1){
+ if(Lim>0){
+ if(Lim<30) Lim=TeXLim;
+ Lim*=2;
+ }
+ }else Lim=0;
+ Out = ltotex(Lout|opt=["cr","spts0"],str=1,cr=Cr,lim=Lim);
+ if(TeX<0) return Out;
+ dviout(Out|eq=(str_str(Cr,Br)>=0)?6:5,keep=(TeX==1)?0:1);
+ }
+ return M;
+}
+
+def mydet2(M)
+{
+ S = size(M);
+ Det = 1;
+ MM = mtoupper(M,0);
+ for(I = 0; I < S[0]; I++)
+ Det = rmul(Det,MM[I][I]);
+ return Det;
+}
+
+def myrank(MM)
+{
+ S = size(MM);
+ M = dupmat(MM);
+ M = mtoupper(M,0);
+ C = 0;
+ for(I = K = 0; I < S[0]; I++){
+ for(J = K; J < S[1]; J++){
+ if(M[I][J] != 0){
+ C++; K++;
+ break;
+ }
+ }
+ }
+ return C;
+}
+
+def meigen(M)
+{
+ F = getopt(mult);
+ if(type(M)==4 || type(M)==5){
+ II=length(M);
+ for(R=[],I=II-1; I>=0; I--){
+ if(F==1)
+ R=cons(meigen(M[I]|mult=1),R);
+ else
+ R=cons(meigen(M[I]),R);
+ }
+ return R;
+ }
+ S = size(M)[0];
+ P = mydet2(mgen(S,0,[zz],0)-M);
+ return (F==1)?getroot(P,zz|mult=1):getroot(P,zz);
+}
+
+def transm(M)
+{
+ if(type(M)!=6) M=s2m(M);
+ if(type(M)!=6){
+ errno(0);
+ return 0;
+ }
+ L=[M];TeX="";
+ Line=["\\text{line}","\\text{col}"];
+ if((DVI=getopt(dviout)) !=1) DVI=0;
+ else dviout(M);
+ for(;;){
+ print(L0=dupmat(car(L)));
+ Sz=size(L0);
+ S=keyin("? ");
+ N=0;
+ if(str_len(S)<=1){
+ if(S=="q") return L;
+ if(S=="t"){
+ N=mtranspose(L0);
+ TeX=["\\text{transpose}"];
+ }
+ else if(S=="f"){
+ if(length(L)>1){
+ if(LF!=0) TeX="";
+ L=cdr(L);LF=L0;
+ if(DVI){
+ dviout0(-1);
+ dviout(" ");
+ }
+ }
+ }else if(S=="g"){
+ if(LF!=0) N=LF;
+ }else if(S=="0"){
+ N=M;L=[];TeX=[];
+ }else if(S=="a"||S=="A"){
+ if(DVI&&S=="A") mtoupper(L0,0|step=1,opt=10,dviout=1);
+ else mtoupper(L0,0|step=1,opt=10);
+ }else{
+ mycat0([
+ "2,5 : line2 <-> line5",
+ "2,5,-2 ; line2 += (-2)*line5",
+ "2,2,-2 : line2 *= -2",
+ "2,5,0 : line2 += (?)*line5 for reduction",
+ "r,2,5 : raw2 <-> raw5 (r,2,5,-2 etc.)",
+ "s,x,2 : subst(*,x,2)",
+ "t : transpose",
+ "0 : first matrix",
+ "f : previous matrix",
+ "g : next matrix (only after f)",
+ "A : auto (a : without TeX)",
+ "q : quit"
+ ],1|delim="\n");
+ }
+ }else{
+ FR=0;
+ S=evals(S|del=",");
+ if(S[0]==r){
+ FR=1; S=cdr(S);
+ }
+ if((LL=length(S))>=2){
+ S0=S[0]-1;S1=S[1]-1;
+ if(S[0]==s){
+ if(length(S)==3) N=subst(L0,S[1],S[2]);
+ if(DVI) TeX=[S[1],"\\mapsto",S[2]];
+ }else if(FR==0){
+ if(S0<0 || S0>=Sz[0] || S1<0 || S1>=Sz[0]) continue;
+ if(LL==2){
+ N=rowx(L0,S0,S1);
+ if(DVI) TeX=[Line[0],S[0],"\\ \\leftrightarrow\\ ",Line[0],S[1]];
+ }else{
+ S2=S[2];
+ if(S0==S1){
+ N=rowm(L0,S0,S2);
+ if(DVI) TeX=[Line[0],S[0],"\\ \\times=\\ ",S2];
+ }else{
+ if(S2==0){
+ for(J=0;J<Sz[1] && L0[S1][J]==0;J++);
+ if(J<Sz[1]) S2=-L0[S0][J]/L0[S1][J];
+ }
+ if(S2!=0){
+ N=rowa(L0,S0,S1,S2);
+ if(DVI) TeX=[Line[0],S[0],"\\ +=\\ ",Line[0],
+ S[1],"\\ \\times\\ (",S2,")"];
+ }
+ }
+ }
+ }else{
+ if(S0<0 || S0>=Sz[1] || S1<0 && S1>=Sz[1]) continue;
+ if(LL==2){
+ N=colx(L0,S0,S1);
+ if(DVI) TeX=[Line[1],S[0],"\\ \\leftrightarrow\\ ",Line[1],S[1]];
+ }else{
+ S2=S[2];
+ if(S0==S1){
+ N=colm(L0,S0,S2);
+ if(DVI) TeX=[Line[1],S[0],"\\ \\times=\\ ",S[2]];
+ }else{
+ if(S2!=0){
+ for(J=0; I1<Sz[0] && L0[I1][J]==0; J++);
+ if(J<Sz[0]) S2=-L0[J][S0]/L0[J][S1];
+ }if(S2!=0){
+ N=cola(L0,S0,S1,S2);
+ if(DVI) TeX=[Line[1],S[0],"\\ +=\\ ",Line[1],
+ S[1],"\\ \\times\\ (",S2,")"];
+ }
+ }
+ }
+ }
+ }
+ }
+ if(N!=0){
+ LF=0;L=cons(N,L);
+ if(DVI) dviout("\\xrightarrow{"+ltotex(TeX|opt="spts0",str=1)+"}"+mtotex(N)|eq=8);
+ }
+ }
+}
+
+def vgen(V,W,S)
+{
+ IM=length(V);
+ I=(getopt(opt)==0)?IM:0;
+ for(SS=0; I<IM && (SS==0 || V[I]<=W[I]); I++)
+ SS += W[I];
+ if(I<IM){
+ W[I]++;
+ SS--;
+ }else
+ SS=S;
+ for(J=0;J<I;J++){
+ W[J] = (SS<=V[J])?SS:V[J];
+ SS -= W[J];
+ }
+ if(SS>0)
+ return -1;
+ return(I==IM)?0:I;
+}
+
+def mmc(M,X)
+{
+ Mt=getopt(mult);
+ if(type(M)==7) M=os_md.s2sp(M);
+ if(type(M)!=4||type(M[0])!=6) return 0;
+ if(type(M[0])!=6){ /* spectre type -> GRS */
+ G=s2sp(M|std=1);
+ L=length(G);
+ for(V=[],I=L-2;I>=0;I--) V=cons(makev([I+10]),V);
+ V=cons(makev([L+9]),V);
+ G=sp2grs(G,V,[1,length(G[0]),-1]|mat=1);
+ if(getopt(short)!=0){
+ V=append(cdr(V),[V[0]]);
+ G=shortv(G,V);
+ }
+ R=chkspt(G|mat=1);
+ if(Mt!=1) Mt=0;
+ if(R[2]!=2 || R[3]!=0 || !(R=getbygrs(G,1|mat=1))) return 0;
+ MZ=newmat(1,1);
+ SS=length(G);
+ if(Mt==1) SS=SS*(SS-1)/2;
+ for(M=[],I=0;I<SS;I++) M=cons(MZ,M);
+ for(RR=R; RR!=[]; RR=cdr(RR)){
+ RT=car(RR)[0];
+ if(type(RT)==4){
+ if(RT[0]!=0) M=mmc(M,[RT[0]]|simplify=Simp);
+ M=mmc(M,[cdr(RT)]);
+ }
+ }
+/* for(R=cdr(R);R!=[];R=cdr(R)) M=mmc(M,[car(R)[0]]|mult=Mt); */
+ }
+ if(X==0) return M;
+ L=length(M);
+ if((L>=6 && Mt!=0)||(L==3&&Mt==1)){
+ for(SS=2,I=3; I<L; I+=(++SS));
+ if(I!=L) return -1;
+ Mt=1;
+ }else{
+ SS=L;Mt=0;
+ }
+ if(length(X)==SS+1){
+ if(car(X)!=0&&(M=mmc(M,[car(X)]|mult=Mt))==0) return M;
+ return mmc(M,cdr(X)|mult=Mt);
+ }
+ for(I=X;I!=[];I=cdr(I)) if(I[0]!=0) break;
+ if(I==[]) return M;
+ Simp=getopt(simplify);
+ if(Simp!=0 && type(Simp)!=1) Simp=2;
+ N=newvect(L);
+ for(I=0;I<L;I++) N[I]=dupmat(M[I]);
+ S=size(N[0])[0];
+ if(type(X)==4&&length(X)>SS){ /* addition */
+ for(I=0;I<SS;I++,X=cdr(X)) if(X[I] != 0) N[I] = radd(N[I],car(X));
+ }
+ if(length(X)!=1) return 0;
+ X=X[0];
+ MZ = newmat(S,S);
+ MM = newvect(L);
+ for(M1=J=0; J<SS; J++){
+ for(R=[],I=SS-1; I>=0; I--){
+ if(I==J){
+ for(RR=[],K=SS-1; K>=0; K--)
+ RR=cons((K==I)?N[K]+diagm(S,[X]):N[K],RR);
+ R=cons(RR,R);
+ }else R=cons([MZ],R);
+ }
+ MM[J]=newbmat(SS,SS,R);
+ if(J==0) M1=MM[0];
+ else M1=radd(M1,MM[J]);
+ }
+ /* middle convolution */
+ for(P=0,Q=1;J<L;J++){ /* A_{P,Q} */
+ for(R=[],I=SS-1; I>=0; I--){
+ for(RR=[],K=SS-1;K>=0;K--){
+ MT=MZ;
+ if(I==K){
+ MT=N[J];
+ if(I==P) MT-=N[Q];
+ else if(I==Q) MT-=N[P];
+ }else if(I==P && K==Q) MT=N[Q];
+ else if(I==Q && K==P) MT=N[P];
+ RR=cons(MT,RR);
+ }
+ R=cons(RR,R);
+ }
+ MM[J]=newbmat(SS,SS,R);
+ if(++Q==SS){
+ P++;Q=P+1;
+ }
+ }
+ for(R=[],I=SS-1; I>=0; I--){
+ for(RR=[N[I]],J=0; J<I; J++) RR=cons(MZ,RR);
+ R=cons(RR,R);
+ }
+ M0 = newbmat(SS,SS,R);
+ KE = append(mykernel(M0|opt=1),mykernel(M1|opt=1));
+ if(length(KE) == 0) return MM;
+ KK = mtoupper(lv2m(KE),0);
+ for(I=0;I<L;I++) MM[I] = mmod(MM[I],KK);
+ if(Simp!=0) MM = mdsimplify(MM|type=Simp);
+ return MM;
+}
+
+def lpgcd(L)
+{
+ for(F=[]; L!=[]; L=cdr(L)){
+ if((P=car(L))==0) continue;
+ if(F==[]){
+ F=fctr(P);
+ S=length(F);
+ S--;
+ V=newvect(S);
+ M=newvect(S);
+ for(I=0; I<S; I++){
+ M[I] = F[I+1][1];
+ V[I] = F[I+1][0];
+ }
+ N=nm(ptozp(P|factor=1)[1]);
+ continue;
+ }
+ N=igcd(ptozp(P|factor=1)[1],N);
+ for(I=0; I<S; I++){
+ for(Q=P,CT=0; CT<M[I]; CT++)
+ if((Q=tdiv(Q,V[I])) == 0) break;
+ if(CT<M[I]) M[I]=CT;
+ }
+ }
+ if(F==[]) return 0;
+ for(Q=N,I=0;I<S; I++){
+ while(M[I]>0){
+ Q *= V[I];
+ M[I]--;
+ }
+ }
+ return Q;
+}
+
+def mdivisor(M,X)
+{
+ S=size(M=dupmat(M));
+ XX=(type(X)==4||X==0)?X:[0,X];
+ S0=S[0]; S1=S[1];
+ if((Tr=getopt(trans))==1||Tr==2){
+ Tr0=1;
+ GR=mgen(S0,0,1,0); GC=mgen(S1,0,1,0);
+ }else Tr=Tr0=0;
+ /* 0,a,b : (a,b)->(1,1)
+ 1 : (1,1) invertible
+ 2,i,M : line 0,i by M
+ 3,j,M : col 0,j by M
+ 4,j : col 1 += col j
+ 5,j,T : line j by T
+ 6,j,T : col 1 += col j by T (non-com)
+ 7,j : line 2<->j (non-com)
+ */
+ if(type(V=getopt(dviout))==1){
+ if(type(XX)==4 && type(XX[0])>1) Var=[XX[1],"\\partial"];
+ else Var=0;
+ Tr=(abs(V)==3)?0:1;
+ MM=dupmat(M);
+ II=((S[0]>S[1])?S[1]:S[0])+1;
+ if(abs(V)>1){
+ Is1=Js1=S[0]+S[1];
+ Is=Js=[0,[Is1]];
+ }else{
+ Is=[0,[Is1=S[0]]];Js=[0,[Js1=S[1]]];
+ }
+ VV=V;
+ V=newvect(II);
+ for(I=0;I<II;I++) V[I]=[];
+ N=newbmat(2,2,[[M,mgen(S[0],0,[1],0)],[mgen(S[1],0,[1],0)]]);
+ mdivisor(M,X|step=1,dviout=V);
+ L=S[0]+S[1];
+ if(Tr){
+ NN=mperm(N,Is1,Js1);
+ for(K=S[0];K<Is1;K++){
+ for(L=S[1];L<Js1;L++)
+ NN[K][L]=" ";
+ }
+ Out=[[mperm(NN,Is,Js)]];
+ }
+ for(I=1;I<II;I++){
+ I0=I-1;
+ if(V[I]==[]) continue;
+ for(T=reverse(V[I]);T!=[];T=cdr(T)){
+ St=[];
+ C=car(R=car(T));
+ if(C==0){
+ N=mperm(N,(R[1]==0)?0:[[R[1]+I0,I0]],(R[2]==0)?0:[[R[2]+I0,I0]]);
+
+ if(Tr){
+ if(R[2]!=0) St=append(["C",I,"\\leftrightarrow C",R[2]+I],St);
+ if(R[1]!=0){
+ if(R[2]!=0) St=cons(",\\ ",St);
+ St=append(["L",I,"\\leftrightarrow L",R[1]+I],St);
+ }
+ Out=cons(St,Out);
+ }
+ }else if(C==1){
+ P=1/N[I0][I0];N[I0][I0]=1;
+ if(P!=1){
+ for(J=I;J<L;J++)
+ N[I0][J]=muldo(P,N[I0][J],XX);
+
+ if(Tr){
+ St=append(["L",I,"\\leftarrow(",P,")","\\times L",I],St);
+ Out=cons(St,Out);
+ NN=mperm(N,Is1,Js1);
+ for(K=S[0];K<Is1;K++){
+ for(L=S[1];L<Js1;L++)
+ NN[K][L]=" ";
+ }
+ Out=cons(["\\to",mperm(NN,Is,Js)],Out);
+ }
+ }
+ for(F=0,J=I;J<S[0];J++){
+ if((P=N[J][I0])==0) continue;
+ F++;
+ N[J][I0]=0;
+ for(K=I;K<L;K++)
+ N[J][K]=red(N[J][K]-muldo(P,N[I0][K],XX));
+
+ }
+ if(F){
+ if(Tr){
+ Out=cons(["Li\\ -\\!=\\ \\circ\\times L",I,"\\quad(i>",I,")"],Out);
+ NN=mperm(N,Is1,Js1);
+ for(K=S[0];K<Is1;K++){
+ for(L=S[1];L<Js1;L++)
+ NN[K][L]=" ";
+ }
+ Out=cons(["\\to",mperm(NN,Is,Js)],Out);
+ }
+ }
+ for(F=0,J=I;J<S[1];J++){
+ if((P=N[I0][J])==0) continue;
+ F++;
+ N[I0][J]=0;
+ for(K=I;K<L;K++)
+ N[K][J]=red(N[K][J]-muldo(N[K][I0],P,XX));
+ }
+ if(F&&Tr) Out=cons(["Cj\\ -\\!=\\ C",I,"\\times\\circ\\quad(j>",I,")"],Out);
+ else continue;
+ }else if(C==2){
+ C=mat(N[I0],N[R[1]+I0]);C=muldo(R[2],C,XX);
+ for(J=0;J<L;J++){
+ N[I0][J]=C[0][J];N[R[1]+I0][J]=C[1][J];
+ }
+ if(Tr) Out=cons([dupmat(R[2]),"\\begin{pmatrix}L",I,"\\\\L",R[1]+I,
+ "\\end{pmatrix}"],Out);
+ }else if(C==3){
+ C=newmat(L,2);
+ for(J=0;J<L;J++){
+ C[J][0]=N[J][I0];C[J][1]=N[J][R[1]+I0];
+ }
+ C=muldo(C,R[2],XX);
+ for(J=0;J<L;J++){
+ N[J][I0]=C[J][0];N[J][R[1]+I0]=C[J][1];
+ }
+ if(Tr) Out=cons(["\\begin{pmatrix}C",I,"&C",R[1]+I,"\\end{pmatrix}",
+ dupmat(R[2])],Out);
+ }else if(C==4){
+ for(J=0;J<L;J++)
+ N[J][I0]=red(N[J][I0]+N[J][R[1]+I0]);
+ if(Tr) Out=cons(["C",I,"\\ +\\!=\\ C",R[1]+I],Out);
+ }else if(C==5){
+ for(J=0;J<L;J++)
+ N[I0+R[1]][J]=red(R[2]*N[I0+R[1]][J]);
+ if(Tr) Out=cons(["L",I+R[1],"\\leftarrow(", R[2],")\\times L",I+R[1]],
+ Out);
+ }else if(C==6){
+ for(J=0;J<L;J++)
+ N[J][I0]=N[J][I0]+muldo(N[J][I0+R[1]],R[2],XX);
+ if(Tr) Out=cons(["C",I,"\\ +\\!=\\ C",I+R[1],"\\times(", R[2],")"],
+ Out);
+ }else if(C==7){
+ mycat(["line",I+1,"\\leftrightarrow",R[1]+I]);
+ for(J=0;J<L;J++){
+ C=N[I][J];N[I][J]=N[R[1]+I0][J];N[R[1]+I0][J]=C;
+ }
+ if(Tr) Out=cons(["L",I+1,"\\leftrightarrow L",R[1]+I],Out);
+ }
+ if(Tr){
+ NN=mperm(N,Is,Js);
+ for(K=S[0];K<Is1;K++){
+ for(L=S[1];L<Js1;L++)
+ NN[K][L]=" ";
+ }
+ Out=cons(["\\to",NN],Out);
+ }
+ }
+ }
+ if(!Tr){
+ NN=mperm(N,Is,Js);
+ Out=[];
+ }
+ if(S[0]+S[1]==Is1){
+ N1=mperm(NN,[0,[S[0]]],[S[1],[S[0]]]);
+ N2=mperm(NN,[S[0],[S[1]]],[0,[S[1]]]);
+ N3=mperm(NN,[0,[S[0]]],[0,[S[1]]]);
+ R1=mdivisor(N1,X|trans=1)[1];
+ R2=mdivisor(N2,X|trans=1)[1];
+ if(Tr){
+ Out=cons(["\\text{As a result,}"],Out);
+ Out=cons([N3,"=",N1,MM,N2],Out);
+ if(S[0]==S[1] && N3==mgen(S[0],0,1,0)){
+ Out=cons(["=",muldo(N2,N1,XX),MM,"."],Out);
+ }else{
+ Out=cons([N1,"^{-1}=",R1,","],Out);
+ Out=cons([N2,"^{-1}=",R2,"."],Out);
+ }
+ }else{
+ Out=cons([N3,"=P",MM,"Q,"],Out);
+ Out=cons(["P=",N1,"=",R1,"^{-1},"],Out);
+ Out=cons(["Q=",N2,"=",R2,"^{-1}."],Out);
+ }
+ }
+ Out = ltotex(reverse(Out)|opt=["cr","spts0"],str=1,cr=15,var=Var);
+ if(S[0]+S[1]==Is1)
+ Out=str_subst(Out,"\\texttt{ }","");
+ if(VV>0){
+ dviout(Out|eq=6);
+ return NN;
+ }
+ return Out;
+ }else if(type(V)!=5) V=0;
+
+ if(type(St=getopt(step))!=1) St=0;
+ for(FF=": start";;){
+ if(St && V==0){
+ if(Tr){
+ mycat0([St,FF,"\n"],0);
+ mycat([GR,"\n"]);mycat([M,"\n"]);mycat([GC,"\n"]);
+ }
+ else mycat0([St,FF,"\n",M,"\n"],0);
+ }
+ if(X==0||X==[0,0]){ /* search minimal non-zero element */
+ for(K=F=I=0; I<S0; I++){
+ for(J=0; J<S1; J++){
+ if((P=abs(M[I][J]))!=0 && (K>P || K==0)){
+ K=P; R=[I,J];
+ }
+ }
+ }
+ R=cons(K-1,[R]);
+ }
+ else R=mymindeg(M,XX[1]|opt=1);
+ if(R[0]<0){ /*zero matrix */
+ if(Tr) return [[],mgen(S0,0,1,0),mgen(S1,0,1,0)];
+ return [];
+ }
+ R0=R[1][0];R1=R[1][1];
+ if(R0!=0){
+ M=rowx(M,0,R0);
+ if(Tr) GR=rowx(GR,0,R0);
+ }
+ if(R1!=0){
+ M=colx(M,0,R1);
+ if(Tr) GC=colx(GC,0,R1);
+ }
+ if(St>0 && (R0!=0 || R1!=0))
+ if(type(V)==5) V[St]=cons([0,R0,R1],V[St]);
+ else if(Tr){
+ mycat0([St,": (",R0+1,",",R1+1,") -> (1,1)\n"],0);
+ mycat([GR,"\n"]);mycat([M,"\n"]);mycat([GC,"\n"]);
+ }else mycat0([St,": (",R0+1,",",R1+1,") -> (1,1)\n",M,"\n"],0);
+ if(R[0]==0){ /* (1,1) : invertible */
+ if(type(V)==5) V[St]=cons([1],V[St]);
+ P=M[0][0]; M[0][0]=1;
+ for(J=0;J<S1;J++){ /* (1,1) -> 1 */
+ if(J>0) M[0][J]= red(M[0][J]/P);
+ if(Tr) GR[0][J]=red(GR[0][J]/P);
+ }
+ if(S0>1 && S1>1) N=newmat(S0-1,S1-1);
+ else N=0;
+ for(I=1;I<S0;I++){
+ P=M[I][0]; M[I][0]=0;
+ for(J=1;J<S1;J++)
+ N[I-1][J-1]=M[I][J]=red(M[I][J] - muldo(P,M[0][J],XX));
+ if(Tr){
+ for(J=0;J<S0;J++)
+ GR[I][J] = red(GR[I][J] -muldo(P,GR[0][J],XX));
+ }
+ }
+ if(Tr){
+ for(J=1;J<S1; J++){
+ for(I=0;I<S1;I++) GC[I][J]=red(GC[I][J]-muldo(GC[I][0],M[0][J],XX));
+ M[0][J]=0;
+ }
+ }
+ if(St>0 && V==0){
+ if(Tr){
+ mycat0([St,": unit\n"],0);
+ mycat([GR,"\n"]);mycat([M,"\n"]);mycat([GC,"\n"]);
+ }
+ else mycat0([St,": unit\n",M,"\n"],0);
+ }
+ if(N==0){
+ if(!Tr) return [1];
+ if(Tr==2){
+ GR0=mdivisor(GR,X|trans=1)[1];
+ GC0=mdivisor(GC,X|trans=1)[1];
+ return [[1],GR,GC,GR0,GC0];
+ }
+ return [[1],GR,GC];
+ }
+ R=mdivisor(N,XX|dviout=V,trans=Tr0,step=(St>0)?St+1:St);
+ if(!Tr) return cons(1,R);
+ GR=muldo(newbmat(2,2,[[1],[0,R[1]]]),GR,XX);
+ GC=muldo(GC,newbmat(2,2,[[1],[0,R[2]]]),XX);
+ if(S0==S1 && countin(1,1,R[0])==S0-1){
+ GR=muldo(GC,GR,XX); GC=mgen(S0,0,1,0);
+ }
+ if(Tr==2){
+ GR0=mdivisor(GR,X|trans=1)[1];
+ GC0=mdivisor(GC,X|trans=1)[1];
+ return [cons(1,R[0]),GR,GC,GR0,GC0];
+ }
+ return [cons(1,R[0]),GR,GC];
+ }
+ for(I=1;I<S0;I++){
+ if(M[I][0]!=0){
+/* Error! when mygcd(A,B,0) with A<=0 or B<=0 */
+ R=mygcd(M[I][0],M[0][0],XX); /* R[0]=R[1]*M[I][0]+R[2]*M[0][0] */
+ M[0][0]=R[0]; M[I][0]=0; /* 0=R[3]*M[I][0]+R[4]*M[0][0] */
+ for(J=1;J<S1;J++){
+ T=red(muldo(R[1],M[I][J],XX)+muldo(R[2],M[0][J],XX));
+ M[I][J]=red(muldo(R[3],M[I][J],XX)+muldo(R[4],M[0][J],XX));
+ M[0][J]=T;
+ }
+ if(Tr){
+ for(J=0;J<S0;J++){
+ T=red(muldo(R[1],GR[I][J],XX)+muldo(R[2],GR[0][J],XX));
+ GR[I][J]=red(muldo(R[3],GR[I][J],XX)+muldo(R[4],GR[0][J],XX));
+ GR[0][J]=T;
+ }
+ }
+ if(St && V==0){
+ mycat([" [",R[2],R[1],"]*"]);
+ mycat([" [",R[4],R[3],"]"]);
+ }
+ if(type(V)==5) V[St]=cons([2,I,mat([R[2],R[1]],[R[4],R[3]])],V[St]);
+ FF=": line 1 & "+rtostr(I+1); I=S0;
+ }
+ }
+ if(I>S0) continue;
+ for(J=1;J<S1;J++){
+ if(M[0][J]!=0){
+ R=mygcd(M[0][J],M[0][0],XX|rev=1); /* R[0]=M[0][J]*R[1]+M[0][0]*R[2] */
+ M[0][0]=R[0]; M[0][J]=0; /* 0=M[0][J]*R[3]+M[0][0]*R[4] */
+ for(I=1;I<S0;I++){
+ T=red(muldo(M[I][J],R[1],XX)+muldo(M[I][0],R[2],XX));
+ M[I][J]=red(muldo(M[I][J],R[3],XX)+muldo(M[I][0],R[4],XX));
+ M[I][0]=T;
+ }
+ if(Tr){
+ for(I=0;I<S1;I++){
+ T=red(muldo(GC[I][J],R[1],XX)+muldo(GC[I][0],R[2],XX));
+ GC[I][J]=red(muldo(GC[I][J],R[3],XX)+muldo(GC[I][0],R[4],XX));
+ GC[I][0]=T;
+ }
+ }
+ if(type(V)==5) V[St]=cons([3,J,mat([R[2],R[4]],[R[1],R[3]])],V[St]);
+ FF=": column 1 & "+rtostr(J+1);J=S1;
+ if(St && V==0){
+ mycat([" *[",R[2],R[4],"]"]);
+ mycat([" [",R[1],R[3],"]"]);
+ }
+ }
+ }
+ if(J>S1) continue;
+ if(S0==1 || S1==1){
+ P=M[0][0];
+ if(X==0){
+ if(P<0){
+ P=-P;
+ if(Tr) for(J=0;J<S0;J++) GR[0][J]=-GR[0][J];
+ if(type(V)==5) V[St]=cons([5,0,-1],V[St]);
+ }
+ }else{
+ P=nm(P);
+ if((R=fctr(P)[0][0])!=1){
+ P/=R;
+ if(Tr) for(J=0;J<S0;J++) GR[0][J]/=R;
+ if(type(V)==5) V[St]=cons([5,0,1/R],V[St]);
+ }
+ }
+ if(!Tr) return [P];
+ if(Tr==2){
+ GR0=mdivisor(GR,X|trans=1)[1];
+ GC0=mdivisor(GC,X|trans=1)[1];
+ return [[P],GR,GC,GR0,GC0];
+ }
+ return [[P],GR,GC];
+ }
+ if(XX==0 || (type(XX)==4 && XX[0]==0)){ /* commutative case */
+ P=M[0][0];
+ for(I=1; I<S0; I++){
+ for(J=1; J<S1; J++)
+ if(divdo(M[I][J],P,XX)[1]!=0) break;
+ if(J<S1){
+ if(type(V)==5) V[St]=cons([4,J],V[St]);
+ FF=": column 1 += col"+rtostr(J+1);
+ for(I=1;I<S0;I++) M[I][0]=M[I][J];
+ if(Tr) for(I=0;I<S1;I++) GC[I][0]=red(GC[I][0]+GC[I][J]);
+ break;
+ }
+ }
+ if(J<S1) continue;
+ N=newmat(S0-1,S1-1);
+ for(I=1;I<S0;I++)
+ for(J=1;J<S1;J++) N[I-1][J-1]=red(M[I][J]/P);
+ if(X==0){
+ if(P<0) P=-P;
+ if(Tr) for(J=0;J<S0;J++) GR[0][J]=-GR[0][J];
+ }else{
+ P=M[0][0];
+ P=nm(P);
+ P/=fctr(P)[0][0];
+ if(Tr) for(J=0;J<S0;J++) GR[0][J]/=fctr(P)[0][0];
+ }
+ R=mdivisor(N,XX|dviout=V,trans=Tr0,step=(St>0)?St+1:St);
+ RT=(Tr)?R[0]:R;
+ for(RR=[],L=reverse(RT);L!=[];L=cdr(L))
+ RR=cons(red(P*car(L)),RR);
+ RR=cons(P,RR);
+ if(!Tr) return RR;
+ GR=muldo(newbmat(2,2,[[1],[0,R[1]]]),GR,XX);
+ GC=muldo(GC,newbmat(2,2,[[1],[0,R[2]]]),XX);
+ if(S0==S1 && countin(1,1,RR)==S0){
+ GR=muldo(GC,GR,XX); GC=mgen(S0,0,1,0);
+ }
+ if(Tr==2){
+ GR0=mdivisor(GR,X|trans=1)[1];
+ GC0=mdivisor(GC,X|trans=1)[1];
+ return [RR,GR,GC,GR0,GC0];
+ }
+ return [RR,GR,GC];
+ } /* End of commutative case */
+ for(I=1; I<S0; I++){
+ for(J=1; J<S1; J++){
+ if(M[I][J] != 0){
+ for(T=1;I<S0;T*=XX[0]){
+ R=divdo(muldo(M[I][J],T,XX),M[0][0],XX);
+ if(R[1]!=0){
+ if(type(V)==5) V[St]=cons([6,J,T],V[St]);
+ FF=": column 1 += col"+rtostr((J+1)*T);
+ if(I>1){
+ M=rowx(M,1,I);
+ if(Tr) GR=rowx(GR,1,I);
+ if(type(V)==5) V[St]=cons([7,I],V[St]);
+ FF+=", line 2<->"+rtostr(I+1);
+ }
+ for(I=1;I<S0;I++) M[I][0]=muldo(M[I][J],T,XX);
+ if(Tr)
+ for(I=1;I<S1;I++) GC[I][0]=red(GC[I][0]+muldo(GC[I][J],T,XX));
+ I=S0+1; J=S1;
+ break;
+ }
+ }
+ }
+ }
+ if(I>S0) break;
+ }
+ if(I==S0) return []; /* zero matrix : never happen */
+ }
+}
+
+def mdsimplify(L)
+{
+ T=getopt(type);
+ SS=0;
+ if(type(L)==6){
+ L=[L]; SS=1;
+ }
+ if(type(L)==5){
+ SS=2;
+ L = vtol(L);
+ }
+ M=car(L);
+ S=size(M)[0];
+#if 0
+ MN=newmat(S,S);
+ MD=newmat(S,S);
+ for(I=0;I<S;I++){
+ for(J=0;J<S;J++){
+ TN=0;TD=1;
+ for(PL=L;PL!=[];PL=cdr(PL)){
+ TM=red(car(PL)[I][J]);
+ TN=lgcd([TN,nm(TM)]|pol=1);
+ TD=llcm([TD,dn(TM)]|pol=1);
+ }
+ MN[I][J]=TM;
+ MD[I][J]=TN;
+ }
+ }
+ for(I=0;I<S;I++){
+ for(J=0;J<S;J++){
+ if(I==J||type(TD[I][J])<2||type(TN[J][I])<2) continue;
+ for(FC=cdr(fctr(TD[I][J]));FC!=[];){
+ TFC=car(FC);
+ if(type(red(TN[J][I]/TFC[0]))>2) continue;
+ }
+ }
+ }
+#endif
+ DD=newvect(S);
+ for(I=0; I<S; I++){
+ LN=RN=[];
+ LD=RD=1;
+ for(LL=L; LL!=[]; LL=cdr(LL)){
+ M = car(LL);
+ for(J=0; J<S; J++){
+ if(J==I) continue;
+ if((MM=M[I][J]) != 0){
+ LN = cons(nm(MM),LN);
+ if(type(MM)==3 && tdiv(LD,P=dn(MM))==0)
+ LD=tdiv(LD*P,gcd(LD,P));
+ }
+ if((MM=M[J][I]) != 0){
+ RN = cons(nm(MM),RN);
+ if(type(MM)==3 && tdiv(RD,P=dn(MM))==0)
+ RD=tdiv(RD*P,gcd(RD,P));
+ }
+ }
+ }
+ if(T==1 || T==3) LQ=RD;
+ else{
+ P=lpgcd(LN);
+ LQ=gcd(P,RD);
+ if(P!=0) LQ *= nm(fctr(P)[0][0]);
+ }
+ if(T==1 || T==2) RQ=LD;
+ else{
+ P=lpgcd(RN);
+ RQ=gcd(P,LD);
+ if(P!=0) RQ *= nm(fctr(P)[0][0]);
+ }
+ if((P=gcdz(LQ,RQ))!=1){
+ LQ = red(LQ/P); RQ=red(RQ/P);
+ }
+ DD[I]=red(LQ/RQ);
+ if(LQ!=1 || RQ!=1){
+ for(LA=[],LL=L; LL!=[]; LL=cdr(LL)){
+ M = car(LL);
+ for(J=0; J<S; J++){
+ if(I!=J){
+ if(LQ!=1){
+ M[I][J] = red(M[I][J]/LQ);
+ M[J][I] = red(M[J][I]*LQ);
+ }
+ if(RQ!=1){
+ M[J][I] = red(M[J][I]/RQ);
+ M[I][J] = red(M[I][J]*RQ);
+ }
+ }
+ }
+ }
+ }
+ }
+ if(SS==2) L=ltov(L);
+ if(SS==1) L=L[0];
+ if(getopt(show)==1) L=[L,DD];
+ return L;
+}
+
+def m2mc(M,X)
+{
+ if(type(M)<2){
+ mycat([
+"m2mc(m,t) or m2mc(m,[t,s])\t Calculation of Pfaff system of two variables\n",
+" m : list of 5 residue mat. or GRS/spc for rigid 4 singular points\n",
+" t : [a0,ay,a1,c], swap, GRS, GRSC, sp, irreducible, pair, pairs, Pfaff, All\n",
+" s : TeX, dviout, GRSC\n",
+" option : swap, small, simplify, operator, int\n",
+" Ex: m2mc(\"21,21,21,21\",\"All\")\n"
+]);
+ return 0;
+ }
+ if(type(M)==7) M=s2sp(M);
+ if(type(X)==7) X=[X];
+ Simp=getopt(simplify);
+ if(Simp!=0 && type(Simp)!=1) Simp=2;
+ Small=(getopt(small)==1)?1:0;
+ if(type(M[0])==4){
+ if(type(M[0][0])==1){ /* spectral type */
+ XX=getopt(dep);
+ if(type(XX)!=4 || type(XX[0])>1) XX=[1,length(M[0])];
+ M=sp2grs(M,[d,a,b,c],[XX[0],XX[1],-2]|mat=1);
+ if(XX[0]>1 && XX[1]<2) XX=[XX[0],2];
+ if(getopt(int)!=0){
+ T=M[XX[0]-1][XX[1]-1][1];
+ for(V=vars(T);V!=[];V=cdr(V)){
+ F=coef(T,1,car(V));
+ if(type(F)==1 && dn(F)>1)
+ M = subst(M,car(V),dn(F)*car(V));
+ }
+ }
+ V=vars(M);
+ if(findin(d1,V)>=0 && findin(d2,V)<0 && findin(d3,V)<0)
+ M=subst(M,d1,d);
+ }
+ RC=chkspt(M|mat=1);
+ if(RC[2] != 2 || RC[3] != 0){ /* rigidity idx and Fuchs cond */
+ erno(0);return 0;
+ }
+ R=getbygrs(M,1|mat=1);
+ if(getopt(anal)==1) return R; /* called by mc2grs() */
+ Z=newmat(1,1,[[0]]);
+ N=[Z,Z,Z,Z,Z];
+ for(RR=R; RR!=[]; RR=cdr(RR)){
+ RT=car(RR)[0];
+ if(type(RT)==4){
+ if(RT[0]!=0) N=m2mc(N,RT[0]|simplify=Simp);
+ N=m2mc(N,[RT[1],RT[2],RT[3]]|simplify=Simp);
+ }
+ }
+ if(type(X)==4 && type(X[0])==7)
+ return m2mc(N,X|keep=Keep,small=Small);
+ return N;
+ }
+ if(type(X)==4 && type(X[0])==7){
+ Keep=(getopt(keep)==1)?1:0;
+ if(X[0]=="All"){
+ dviout("Riemann scheme"|keep=1);
+ m2mc(M,[(findin("GRSC",X)>=0)?"GRSC":"GRS","dviout"]|keep=1);
+ dviout("Spectral types : "|keep=1);
+ m2mc(M,["sp","dviout"]|keep=1);
+ dviout("\\\\\nBy the decompositions"|keep=1);
+ R=m2mc(M,["pairs","dviout"]|keep=1);
+ for(R0=R1=[],I=1; R!=[]; I++, R=cdr(R)){
+ for(S=0,RR=car(R)[1][0];RR!=[]; RR=cdr(RR)) S+=RR[0];
+ if(S==0) R0=cons(I,R0);
+ else if(S<0) R1=cons(I,R1);
+ }
+ S="irreducibility\\ $"+((length(R0)==0)?"\\Leftrightarrow":"\\Leftarrow")
+ +"\\ \\emptyset=\\mathbb Z\\cap$";
+ dviout(S|keep=1);
+ m2mc(M,["irreducible","dviout"]|keep=1);
+ if(R0!=[])
+ dviout(ltotex(reverse(R0))|eq=0,keep=1,
+ title="The following conditions may not be necessary for the irreducibility.");
+ if(R1!=[])
+ dviout(ltotex(reverse(R1))|eq=0,keep=1,title="The following conditions can be omitted.");
+ if(getopt(operator)!=0){
+ dviout("The equation in a Pfaff form is"|keep=1);
+ m2mc(M,["Pfaff","dviout"]|keep=Keep,small=Small);
+ }
+ else if(Keep!=1) dviout(" ");
+ return M;
+ }
+ Show=0;
+ if(length(X)>1){
+ if(X[1]=="dviout") Show=2;
+ if(X[1]=="TeX") Show=1;
+ }
+ if(X[0]=="GRS"||X[0]=="GRSC"||X[0]=="sp"){
+ Y=radd(-M[0],-M[1]-M[2]);
+ if(X[0]!="GRSC"){
+ L=meigen([M[0],M[1],M[2],M[3],M[4],Y,radd(-M[1],-M[3]-M[4]),radd(Y,-M[3]-M[4])]|mult=1);
+ if(X[0]=="sp"){
+ L=chkspt(L|opt="sp");
+ V=[L[1],L[0],L[2],L[5]]; W=[L[1],L[3],L[4],L[6]];
+ if(Show==2) dviout(s2sp(V)+" : "+s2sp(W)|keep=Keep);
+ return [V,W];
+ }
+ S="x=0&x=y&x=1&y=0&y=1&x=\\infty&y=\\infty&x=y=\\infty\\\\\n";
+ }else{
+ L=meigen([M[0],M[1],M[2],M[3],M[4],Y,radd(-M[1],-M[3]-M[4]),radd(Y,-M[3]-M[4]),
+ radd(M[0],M[1]+M[3]),radd(M[1],M[2]+M[4])]|mult=1);
+ S="x=0&x=y&x=1&y=0&y=1&x=\\infty&y=\\infty&x=y=\\infty&x=y=0&x=y=1\\\\\n";
+ }
+ T=ltotex(L|opt="GRS",pre=S,small=Small);
+ if(Show==2) dviout(T|eq=0,keep=Keep);
+ if(Show==1) L=T;
+ return L;
+ }
+ if(X[0]=="Pfaff"){
+ S=ltotex(M|opt=["Pfaff",u,x,x-y,x-1,y,y-1],small=Small);
+ if(Show==2) dviout(S|eq=0,keep=Keep);
+ return S;
+ }
+ if(X[0]=="irreducible"){
+ L=meigen([M[0],M[1],M[2],radd(-M[0],-M[1]-M[2])]|mult=1);
+ S=getbygrs(L,10|mat=1);
+ if(Show==2) dviout(ltotex(S)|eq=0,keep=Keep);
+ return S;
+ }
+ if(X[0]=="pairs"||X[0]=="pair"){
+ L=meigen([M[0],M[1],M[2],radd(-M[0],-M[1]-M[2])]|mult=1);
+ S=chkspt(L|opt=0);
+ V=(Show==2)?1:0;
+ S=sproot(L,X[0]|dviout=V,keep=Keep);
+ return S;
+ }
+ if(X[0]=="swap"){
+ Swap=getopt(swap);
+ if(type(Swap)<1 || Swap==1)
+ return newvect(5,[M[3],M[1],M[4],M[0],M[2]]);
+ if(Swap==2)
+ return newvect(5,[radd(M[0],M[1]+M[3]),M[4],M[2],radd(-M[1],-M[3]-M[4]),M[1]]);
+ if(type(Swap)==4 && length(Swap)==3){
+ MX=radd(-M[0],-M[1]-M[2]); MY=radd(-M[3],-M[1]-M[4]);
+ if(Swap[0]==1){
+ MX0=M[2];MY0=M[4];
+ }
+ else if(Swap[0]==2){
+ MX0=MX;MY0=MY;
+ }else{
+ MX0=M[0];MY0=M[3];
+ }
+ if(Swap[1]==1){
+ MX1=M[2];MY1=M[4];
+ }
+ else if(Swap[1]==2){
+ MX1=MX;MY1=MY;
+ }else{
+ MX1=M[0];MY1=M[3];
+ }
+ return newvect(5,MX0,M[1],MX1,MY0,MY1);
+ }
+ }
+ return 0;
+ }
+ if(getopt(swap)==1)
+ return m2mc(m2mc(m2mc(M,"swap"),X),"swap");
+ N=newvect(5);
+ for(I=0;I<5;I++)
+ N[I]=M[I];
+ S=size(N[0])[0];
+ if(type(X)==4){
+ for(I=0;I<3;I++){
+ if(X[I] != 0)
+ N[I] = radd(N[I],X[I]);
+ }
+ if(length(X)==3) return N;
+ X=X[3];
+ }
+ MZ = newmat(S,S);
+ ME = mgen(S,0,[X],0);
+ MM = newvect(5);
+ MM[0] = newbmat(3,3, [[N[0]+ME,N[1],N[2]], [MZ], [MZ]]);
+ MM[1] = newbmat(3,3, [[MZ], [N[0],N[1]+ME,N[2]], [MZ]]);
+ MM[2] = newbmat(3,3, [[MZ], [MZ], [N[0],N[1],N[2]+ME]]);
+ MM[3] = newbmat(3,3, [[N[3]+N[1],-N[1]], [-N[0],radd(N[0],N[3])], [MZ,MZ,N[3]]]);
+ MM[4] = newbmat(3,3, [[N[4]], [MZ,N[4]+N[2],-N[2]], [MZ,-N[1],radd(N[4],N[1])]]);
+ M0 = newbmat(3,3, [[N[0]], [MZ,N[1]], [MZ,MZ,N[2]]]);
+ M1 = radd(MM[0],MM[1]+MM[2]);
+ KE = append(mykernel(M0|opt=1),mykernel(M1|opt=1));
+ if(length(KE) == 0) return MM;
+ KK = mtoupper(lv2m(KE),0);
+ for(I=0;I<5;I++)
+ MM[I] = mmod(MM[I],KK);
+ if(Simp!=0) MM = mdsimplify(MM|type=Simp);
+ return MM;
+}
+
+def easierpol(P,X)
+{
+ if(type(X) == 4){
+ for( Y = [] ; X != []; X = cdr(X) )
+ Y = cons([0,car(X)], Y);
+ }else
+ Y = [0,X];
+ return rede(P,Y);
+}
+
+def l2p(L,V)
+{
+ if(type(L)==4){
+ for(S=I=0;L!=[];L=cdr(L),I++)
+ S+=car(L)*V^I;
+ return S;
+ }else if(type(L)==5){
+ for(S=0,I=size(L)-1;I>=0;I--)
+ S+=L[I]*V^I;
+ return S;
+ }else{
+ if(type(D=getopt(size))==1) D--;
+ else D=mydeg(L,V);
+ for(S=[];D>=0;D--)
+ S=cons(mycoef(L,D,V),S);
+ return S;
+ }
+}
+
+def paracmpl(L,V)
+{
+ if(type(L)==4) L=ltov(L);
+ S=length(L);
+ Lim=getopt(lim);Low=getopt(low);
+ if((F=type(L[0]))>3){
+ SV=length(L[0]);
+ V0=makenewv(L);
+ for(LL=[];S>0;S--)
+ LL=cons(l2p(L[S-1],V0),LL);
+ G=paracmpl(LL,V|option_list=getopt());
+ H=(Lim==1)?G:G[0];
+ for(HH=[];H!=[];H=cdr(H)){
+ HT=l2p(car(H),V0|size=SV);
+ if(F==5) HT=ltov(HT);
+ HH=cons(HT,HH);
+ }
+ H=reverse(HH);
+ return (Lim==1)?H:[H,G[1]];
+ }
+ H=newvect(S);D=newvect(S);
+ for(Dn=1,I=0;I<S;I++){
+ P=dn(L[I]=red(L[I]));
+ Dn=red(Dn*P/gcd(Dn,P));
+ }
+ if(Dn!=1){
+ for(I=0;I<S;I++) L[I]=red(Dn*L[I]);
+ }
+ G=diagm(S,[1]);
+ if(type(V)<4) V=[V];
+ VV=lsort(vars(L),V,1);
+ V=car(V);
+ for(I=0;I<S;I++){
+ P=L[I];
+ for(J=0,C=P;J<I;J++){
+ if(D[J]!=[]){
+ C=mycoef(C,DT,VV);
+ P-=C*H[J];
+ G=cola(G,I,J,-C);
+ }
+ }
+ if(P==0){
+ D[I]=[];continue;
+ }
+ P0=nm(red(P));
+ K=mymindeg(P0,V);
+ C=mycoef(P0,K,V);
+ if(K>0){
+ P=red(P/V^K);
+ G=colm(G,I,1/V^K);
+ }
+ for(DT=[],VT=VV;VT!=[];VT=cdr(VT)){
+ K=(Low==1)?mymindeg(C,car(VT)):mydeg(C,car(VT));
+ C=mycoef(C,K,car(VT));
+ DT=cons(K,DT);
+ }
+ D[I]=DT=reverse(DT);
+ for(C=P,VT=VV;VT!=[];VT=cdr(VT),DT=cdr(DT))
+ C=mycoef(C,car(DT),car(VT));
+ H[I]=P=red(P/C);
+ G=colm(G,I,1/C);
+ }
+ if(Dn!=1){
+ for(I=0;I<S;I++){
+ TH=red(H[I]/Dn);
+ F=fctr(dn(TH));F=cdr(F);
+ if(Lim!=1||subst(Dn,V,0)==0){
+ for(;F!=[];F=cdr(F)){
+ if(lsort(vars(car(F)[0]),VV,2)==[]){
+ C=car(F)[0]^car(F)[1];
+ TH=red(TH*C);
+ G=colm(G,I,C);
+ }
+ }
+ }
+ H[I]=TH;
+ }
+ }
+ H=vtol(H);
+ if(Lim==1){
+ H=subst(H,V,0);
+ return map(red,H);
+ }
+ return [H,map(red,G)];
+}
+
+def mykernel(M)
+{
+ if(getopt(opt) == 1)
+ M = mtranspose(M);
+ S = size(M);
+ R = [];
+ MM = mtoupper(M,-1);
+ for(I = S[0]-1; I >= 0; I--){
+ for(J = S[1]-1; J >= 0; J--){
+ if(MM[I][J] != 0)
+ return R;
+ }
+ P = easierpol(MM[I][S[1]],zz);
+ RR = newvect(S[0]);
+ for(J = 0; J < S[0]; J++)
+ RR[J] = mycoef(P,J,zz);
+ R = cons(RR,R);
+ }
+ return R;
+}
+
+def myimage(M)
+{
+ if(getopt(opt) == 1)
+ M = mtranspose(M);
+ S = size(M);
+ V = [];
+ M0 = newvect(S[1]);
+ M = mtoupper(M,0|opt=1);
+ for(I = S[0]-1; I >= 0; I--)
+ if(M0 != M[I])
+ V = cons(vtozv(M[I])[0], V);
+ return V;
+}
+
+def mymod(V,L)
+{
+ Opt = getopt(opt);
+ S = length(V);
+ VP = newvect(S);
+ if(type(L)==6)
+ L=m2lv(L);
+ CT = length(L);
+ for(LT = L; LT != []; LT = cdr(LT)){
+ for(VT = car(LT), I = 0; I < S; I++)
+ if(VT[I] != 0) break;
+ if(I >= S){
+ CT--;
+ continue;
+ }
+ VP[I] = 1;
+ MI = -red(V[I]/VT[I]);
+ if(MI != 0)
+ V = radd(V,rmul(MI,VT));
+ }
+ if(Opt==1){
+ for(I = 0; I < S; I++)
+ if(V[I] != 0)
+ return 1;
+ return 0;
+ }
+ if(Opt==2){
+ W=newvect(S-CT);
+ for(CC = I = 0; I < S; I++){
+ if(VP[I]==0) W[CC++] =V[I];
+ }
+ return W;
+ }
+ return V;
+}
+
+def mmod(M,L)
+{
+ S=size(M)[1];
+ MM=mtranspose(M);
+ VP = newvect(S);
+ if(type(L)==6)
+ L=m2lv(L);
+ for(CT = 0, LT = L; LT != []; LT = cdr(LT)){
+ for(VT = car(LT), I = 0; I < S; I++){
+ if(VT[I] != 0){
+ VP[I] = 1;
+ break;
+ }
+ }
+ }
+ if(getopt(opt)==1)
+ NE=1;
+ for(D=I=0; I<S; I++){
+ if(NE != 1 && VP[I] == 1) continue;
+ T = mymod(MM[I],L|opt=2);
+ if(D==0){
+ K=length(T);
+ MN=newmat((NE==1)?S:K,K);
+ }
+ for(J=0;J<K;J++)
+ MN[J][D]=T[J];
+ D++;
+ }
+ return MN;
+}
+
+def llsize(V)
+{
+ for(I=J=0;V!=[];V=cdr(V),I++)
+ if(length(car(V))>J) J=length(car(V));
+ return [I,J];
+}
+
+def llbase(VV,L)
+{
+ S = length(VV);
+ V = dupmat(VV);
+ if(type(V) == 4)
+ V = ltov(V);
+ T = length(L);
+ for(I = 0; I < S; I++)
+ V[I] = nm(red(V[I]));
+ LV = 0;
+ for(J = 0; J < T; J++){
+ X = var(L[J]); N = deg(L[J],X);
+ for(I = LV; I < S; I++){
+ if((C2=coef(V[I],N,X)) != 0){
+ if(I > LV){
+ Temp = V[I];
+ V[I] = V[LV];
+ V[LV] = Temp;
+ }
+ for(I = 0; I < S; I++){
+ if(I == LV || (C1 = coef(V[I],N,X)) == 0)
+ continue;
+ Gcd = gcd(C1,C2);
+ V[I] = V[I]*tdiv(C2,Gcd)-V[LV]*tdiv(C1,Gcd);
+ }
+ LV++;
+ }
+ }
+ }
+ return V;
+}
+
+def lsort(L1,L2,T)
+{
+ C1=getopt(c1);C2=getopt(c2);
+ if(type(T)==4){
+ K=T;
+ if(length(T)>0){
+ T=K[0];
+ K=cdr(K);
+ }else T=0;
+ }else K=0;
+ if(type(TT=T)==7)
+ T = findin(T,["cup","setminus","cap","reduce","sum","subst"]);
+ if(type(L2)==7&&T<0)
+ T=findin(TT,["put","get","sub"]);
+ if(K){ /* [[..],..] */
+ if(K!=[]) KN=K[0];
+ if(L2==[]||L2=="sort"){ /* sort or deduce duplication */
+ if((T!=0&&T!=3)||length(K)!=1) return L1;
+ if(KN<0){
+ KN=-KN-1;
+ F=-1;
+ }else F=1;
+ L1=msort(L1,[F,0,KN]);
+ if(T==3){
+ R=[car(L1)];L1=cdr(L1);
+ for(;L1!=[];L1=cdr(L1)){
+ if(car(L1)[KN]!=car(R)[KN]) R=cons(car(L1),R);
+ }
+ L1=reverse(R);
+ }
+ return L1;
+ }else if((L2==0||L2=="col")&&type(C1)==4){
+ if(T==0||T==1){ /* extract or delete columns */
+ for(R=[];L1!=[];L1=cdr(L1)){
+ if(T==1&&C1==[0]){ /* delete top column */
+ R=cons(cdr(car(L1)),R);
+ continue;
+ }
+ LT=car(L1);RT=[];
+ if(T==0){
+ for(CT=C1;CT!=[];CT=cdr(CT)) RT=cons(LT[car(CT)],RT);
+ }else{
+ for(I=0;LT!=[];I++,LT=cdr(LT))
+ if(findin(I,C1)<0) RT=cons(car(LT),RT);
+ RT=reverse(RT);
+ }
+ R=cons(RT,R);
+ }
+ return reverse(R);
+ }
+ }else if(type(L2)==1||type(L2)==7){
+ if(L2==1||L2=="num"){
+ if(T==4) T=3;
+ I=(length(K)<2)?(-1):K[1];
+ if(T==0||T==1||T==2||T==3){
+ S=F=CT=0;R=[];
+ if(K==[] || type((S=K[0]))==1 || S==0){
+ if(T==0||T==1||T==2){
+ for(J;L1!=[];L1=cdr(L1),J++){
+ if(T==0) R=cons(cons(J+S,car(L1)),R);
+ else if(T==1){
+ for( ;C1!=[]; C1=cdr(C1))
+ R=cons(L1[car(C1)],R);
+ }else{
+ if(findin(J,C1)<0) R=cons(car(L1),R);
+ }
+ }
+ return reverse(R);
+ }else if(T==3) return length(L1);
+ }else{
+ if(type(S)==2&&vtype(S)>2) F=1;
+ else if(type(S)==4) F=2;
+ else if(S=="+") F=3;
+ else return L1;
+ }
+ for(R=[];L1!=[];L1=cdr(L1)){
+ L1T=car(L1);
+ if(F==1) V=call(S,(I<0)?L1T:L1T[I]);
+ else if(F==2) V=calc((I<0)?L1T:L1T[I],S);
+ else if(F==3){
+ for(C=C1,V=0;C!=[];C=cdr(C))
+ if(type(X=L1T[car(C)])==1) V+=X;
+ }
+ if(T==0) R=cons(cons(V,L1T),R);
+ else if(T==1){
+ if(V) R=cons(L1T,R);
+ }else if(T==2){
+ if(!V) R=cons(L1T,R);
+ }else if(T==3){
+ if(F==3) CT+=V;
+ else if(V) CT++;
+ }
+ }
+ return (T==3)?CT:reverse(R);
+ }else if(TT=="col"){
+ J=(length(K)>0)?car(K):0;
+ I=length(car(L1))+J;
+ for(V=[];I>J;)
+ V=cons(--I,V);
+ return cons(V,L1);
+ }
+ }else if(L2=="transpose") return mtranspose(L1);
+ else if(L2=="subst"||L2=="adjust"){
+ Null=(!K)?"":car(K);
+ if(L2=="adjust") C1=[];
+ R=lv2m(L1|null="");
+ for(;C1!=[];C1=cdr(C1)) R[car(C1)[0]][car(C1)[1]]=car(C1)[2];
+ return m2ll(R);
+ }
+ return L1;
+ }else{ /* [[..],..], [[..],..] */
+ if(type(L2[0])<4){
+ for(R=[];L2!=[];L2=cdr(L2)) R=cons([car(L2)],R);
+ L2=reverse(R);
+ }
+ if(TT=="sum") T=3;
+ if(TT=="over") T=4;
+ if(findin(T,[0,1,2,3,4,5])<0) return L1;
+ if(T==4||T==5){
+ if(type(C1)<2) C1=[C1];
+ if(type(C2)<2) C2=[C2];
+ }
+ if(type(car(L2))!=4){
+ for(R=[];L2!=[];L2=cdr(L2)) R=cons([car(L2)],R);
+ R=reverse(R);
+ if(length(K)==1) K=[K[0],0];
+ C2=0;
+ }
+ L1=lsort(L1,"num",["put",0]); /* insert number */
+ K0=(length(K)>0)?K[0]+1:1;
+ K1=(length(K)>1)?K1=K[1]:0;
+ L1=lsort(L1,"sort",[0,K0]);
+ if(T<4&&type(C2)==4&&length(L2[0])>1){
+ L2=lsort(L2,"col",["put"]|c1=cons(K1,C2)); /* add key and extract columns */
+ C2=0;K1=0;
+ }
+ L2=lsort(L2,"sort",[0,K1]);
+ for(R0=[],S=S1=length(L1[0]);S>0;S--) R0=cons("",R0);
+ for(R1=[],S=length(L2[0]);S>0;S--) R1=cons("",R1);
+ if(!K1&&T!=3) R1=cdr(R1);
+ for(R=[];L1!=[];L1=cdr(L1)){
+ while(L2!=[]&&car(L1)[K0]>car(L2)[K1]){
+ if(T==3) R=cons(append(R0,car(L2)),R);
+ L2=cdr(L2);
+ }
+ if(L2==[]||car(L1)[K0]<car(L2)[K1]){
+ if(T!=2) R=cons((T==1||T>3||R1==[])?car(L1):append(car(L1),R1),R);
+ }else if(T==0||T==2||T==3){
+ if(R0==[]) R=append(car(L1),R);
+ else R=cons(append(car(L1),(!K1&&T!=3)?cdr(car(L2)):car(L2)),R);
+ L2=cdr(L2);
+ }else if(T==4||T==5){
+ V1=ltov(car(L1));V2=ltov(car(L2));
+ for(D1=C1,D2=C2;D1!=[];D1=cdr(D1),D2=cdr(D2))
+ if((I=V2[car(D2)])!=""||T==4) V1[car(D1)+1]=I;
+ R=cons(vtol(V1),R);
+ }
+ }
+ if(T==3){
+ while(L2!=[]){
+ R=cons(append(R0,car(L2)),R);
+ L2=cdr(L2);
+ }
+ }
+ R=lsort(R,"sort",["put",0]); /* original order */
+ D=(((T==0||T==2)&&!K1)||T==3)?[0]:[0,S1+K1];
+ R=lsort(R,0,[1]|c1=D); /* delete */
+ if(type(C1)!=4||T==1||T==4||T==5) return R;
+ C=[];S0=size(L1[0]);
+ for(;C1!=[];C1=cdr(C1)) C=cons(car(C1),C);
+ for(I=0;I<S0-S1;I++) C=cons(I+S1,C);
+ C=reverse(C);
+ return lsort(R,"col",[1]|c1=C);
+ }
+ }
+ if(L2 == []){ /* [...] */
+ if(T==8||TT=="count") return [length(L1),length(lsort(L1,[],1))];
+ if(T==7||TT=="cut"){
+ K=length(L1);
+ if(C1<0) C1=K+C1;
+ for(R=[],I=0;I<C1&&L1!=[];I++,L1=cdr(L1))
+ R=cons(car(L1),R);
+ for(S=[];L1!=[];L1=cdr(L1))
+ S=cons(car(L1),S);
+ return [reverse(R),reverse(S)];
+ }
+ if(T==2) return L2;
+ if(T==3) return [L1,L2];
+ L1 = ltov(L1); qsort(L1);
+ if(T != 1)
+ return vtol(L1);
+ L3 = [];
+ for(I = length(L1)-1; I >= 0; I--){
+ if(I > 0 && L1[I] == L1[I-1])
+ continue;
+ L3 = cons(L1[I], L3);
+ }
+ return L3;
+ }
+ if(T==8||TT=="count"){
+ K=length(lsort(L1,L2,3)[0]);
+ R=[length(L2),length(L1)];
+ L1 = lsort(L1,[],1);
+ L2 = lsort(L2,[],1);
+ R=append([length(L2),length(L1)],R);
+ R=cons(length(lsort(L1,L2,2)),R);
+ return reverse(cons(K,R));
+ }
+ if((T==9||TT=="cons")&&type(car(L1))==4){
+ if(type(L2)!=4) L2=[L2];
+ for(R=[];L1!=[];L1=cdr(L1)){
+ R=cons(cons(car(L2),car(L1)),R);
+ if(length(L2)>1) L2=cdr(L2);
+ }
+ return reverse(R);
+ }
+ if(T==10||TT=="cmp"){
+ if(length(L1)!=length(L2)){
+ mycat("Different length!");
+ return 1;
+ }
+ R=[];
+ if(type(car(L1))==4){
+ for(U=[],I=0;L1!=[];I++,L1=cdr(L1),L2=cdr(L2)){
+ if(length(S=car(L1))!=length(T=car(L2))){
+ mycat(["Different size : line ",I]);
+ return 0;
+ }
+ for(J=0;S!=[];S=cdr(S),T=cdr(T),J++)
+ if(car(S)!=car(T)) U=cons([[I,J],car(S),car(T)],U);
+ }
+ if(U!=[]) R=cons(reverse(U),R);
+ }else{
+ for(I=0;L1!=[];L1=cdr(L1),L2=cdr(L2),I++)
+ if(car(L1)!=car(L2)) R=cons([I,car(L1),car(L2)],R);
+ }
+ return reverse(R);
+ }
+ if(T==11||TT=="append"){
+ if(type(car(L1))!=4) return append(L1,L2);
+ for(R=[];L1!=[];L1=cdr(L1),L2=cdr(L2))
+ R=cons(append(car(L1),car(L2)),R);
+ return reverse(R);
+ }
+ if(T == 1 || T == 2){
+ L1 = lsort(L1,[],1);
+ L2 = lsort(L2,[],1);
+ L3 = [];
+ if(T == 1){
+ while(L1 != []){
+ if(L2 == [] || car(L1) < car(L2)){
+ L3 = cons(car(L1), L3);
+ L1 = cdr(L1);
+ continue;
+ }
+ if(car(L1) > car(L2)){
+ L2 = cdr(L2);
+ continue;
+ }
+ L1 = cdr(L1); L2 = cdr(L2);
+ }
+ return reverse(L3);
+ }
+ if(T==2){
+ while(L1 != [] && L2 != []){
+ if(car(L1) != car(L2)){
+ if(car(L1) <= car(L2))
+ L1 = cdr(L1);
+ else L2 = cdr(L2);
+ continue;
+ }
+ while(car(L1) == car(L2))
+ L1 = cdr(L1);
+ L3 = cons(car(L2), L3);
+ }
+ return reverse(L3);
+ }
+ }
+ if(T==3){
+ L1 = qsort(L1); L2 = qsort(L2);
+ L3 = L4 = [];
+ while(L1 != [] && L2 != []){
+ if(car(L1) == car(L2)){
+ L1 = cdr(L1); L2 = cdr(L2);
+ }else if(car(L1) < car(L2)){
+ L3 = cons(car(L1),L3);
+ L1 = cdr(L1);
+ }else{
+ L4 = cons(car(L2), L4);
+ L2 = cdr(L2);
+ }
+ }
+ L4 = append(reverse(L4),L2);
+ L3 = append(reverse(L3),L1);
+ return [L3,L4];
+ }
+ L1 = append(L1,L2);
+ return lsort(L1,[],1);
+}
+
+def mqsub(X,Y)
+{
+ for(L=LQS;L!=[];L=cdr(L)){
+ F=(T=car(L))[0];M=(T=cdr(T))[0];
+ X0=X;Y0=Y;
+ for(T=cdr(T);T!=[];T=cdr(T)){
+ X0=X0[car(T)];Y0=Y0[car(T)];
+ }
+ if(type(M)==1){
+ if(M==3){
+ X0=type(X0);Y0=type(Y0);
+ }else if(M==4&&type(X0)<2&&type(Y0)<2){
+ X0=abs(X0);Y0=abs(Y0);
+ }else if(M==5){
+ X0=str_len(rtostr(X0));Y0=str_len(rtostr(Y0));
+ }else if(type(X0)==type(Y0)&&type(X0)>3&&type(X0)<7){
+ if(M==1){
+ X0=length(X0);Y0=length(Y0);
+ }else if(M==2){
+ LX=length(X0);LY=length(Y0);
+ L0=(LX<LY)?LX:LY;
+ for(I=0;;I++){
+ if(I==L0){
+ X0=LX;Y0=LY;break;
+ }
+ if(X0[I]==Y0[I]) continue;
+ X0=X0[I];Y0=Y0[I];break;
+ }
+ }
+ }
+ }else if(type(M)==2){
+ X0=(*M)(X0,Y0);Y0=0;
+ }else if(type(M)==4&&length(M)==1){
+ X0=(*car(M))(X0);Y0=(*car(M))(Y0);
+ }
+ if(X0==Y0) continue;
+ return (X0<Y0)?-F:F;
+ }
+ return 0;
+}
+
+def msort(L,S)
+{
+ if(type(S)!=4) return qsort(L);
+ if(type(S[0])!=4) S=[S];
+ LQS=S;
+ return qsort(L,os_md.mqsub);
+}
+
+def lmax(L)
+{
+ if(type(L)==4){
+ V=car(L);
+ while((L=cdr(L))!=[])
+ if(V < car(L)) V=car(L);
+ return V;
+ }else if(type(L)==5||type(L)==6)
+ return lmax(m2l(L));
+ return [];
+}
+
+def lmin(L)
+{
+ if(type(L)==4){
+ V=car(L);
+ while((L=cdr(L))!=[])
+ if(V > car(L)) V=car(L);
+ return V;
+ }else if(type(L)==5||type(L)==6)
+ return lmin(m2l(L));
+ return [];
+}
+
+def lgcd(L)
+{
+ if(type(L)==4){
+ F=getopt(poly);
+ V=car(L);
+ while((L=cdr(L))!=[]&&V!=1){
+ if(V!=0)
+ V=(F==1)?gcd(V,car(L)):igcd(V,car(L));
+ }
+ return V;
+ }else if(type(L)==5||type(L)==6)
+ return lgcd(m2l(L)|option_list=getopt());
+ return [];
+}
+
+def llcm(L)
+{
+ if(type(L)==4){
+ F=getopt(poly);
+ V=car(L);
+ while((L=cdr(L))!=[]){
+ if(V!=0){
+ if((V0=car(L))!=0)
+ V=(F==1)?red(V*V0/gcd(V,V0)):ilcm(V,V0);
+ }
+ else V=car(L);
+ }
+ if(F!=1&&V<0) V=-V;
+ return V;
+ }
+ else if(type(L)==5||type(L)==6)
+ return llcm(m2l(L)|option_list=getopt());
+ return [];
+}
+
+def ldev(L,S)
+{
+ M=abs(lmax(L));N=abs(lmin(L));
+ if(M<N) M=N;
+ for(C=0,LT=L;;C++){
+ LT=ladd(LT,S,1);
+ MT=abs(lmax(LT));NT=abs(lmin(LT));
+ if(MT<NT) MT=NT;
+ if(MT>=M) break;
+ M=MT;
+ }
+ if(!C){
+ for(C=0,LT=L;;C--){
+ LT=ladd(LT,S,-1);
+ MT=abs(lmax(LT));NT=abs(lmin(LT));
+ if(MT<NT) MT=NT;
+ if(MT>=M) break;
+ M=MT;
+ }
+ }
+ return [C,ladd(L,S,C)];
+}
+
+def lchange(L,P,V)
+{
+ if(getopt(flat)==1&&type(P)==4){
+ for(L=ltov(L);P!=[];P=cdr(P),V=cdr(V))
+ L[car(P)]=car(V);
+ return vtol(L);
+ }
+ if(type(P)==4){
+ IP=car(P); P=cdr(P);
+ }else{
+ IP=P; P=[];
+ }
+ for(I=0, LL=[], LT=L; LT!=[]; I++,LT=cdr(LT)){
+ if(I==IP){
+ LL=cons((P==[])?V:lchange(car(LT),P,V),LL);
+ }else
+ LL=cons(car(LT),LL);
+ }
+ return reverse(LL);
+}
+
+def lsol(VV,L)
+{
+ if(type(VV)<4 && type(L)==2)
+ return red(L-VV/mycoef(VV,1,L));
+ S = length(VV);
+ T = length(L);
+ V = llbase(VV,L);
+ for(J = K = 0; J < T; J++){
+ X = var(L[J]); N = deg(L[J],X);
+ for(I = K; I < S; I++){
+ if((C=mycoef(V[I], N, X)) != 0){
+ V[I] = [L[J],red(X^N-V[I]/C)];
+ K++;
+ break;
+ }
+ }
+ }
+ return V;
+}
+
+def lnsol(VV,L)
+{
+ LL=lsort(vars(VV),L,1);
+ VV=ptol(VV,LL|opt=0);
+ return lsol(VV,L);
+}
+
+
+def ladd(X,Y,M)
+{
+ if(type(X)==4) X=ltov(X);
+ if(type(Y)==4) Y=ltov(Y);
+ return vtol(X+M*Y);
+}
+
+def mrot(X)
+{
+ if(type(X)==4){
+ if(getopt(deg)==1)
+ X=[deval(@pi*X[0]/180),deval(@pi*X[1]/180),deval(@pi*X[2]/180)];
+ if(getopt(conj)==1)
+ return mrot([-X[2],-X[1],0])*mrot([X[0],X[1],X[2]]);
+ if(X[1]==0){
+ X=[X[0]+X[2],0,0];
+ if(X[0]==0) return diagm(3,[1]);
+ }
+ if(X[0]!=0){
+ M=mat([dcos(X[0]),-dsin(X[0]),0],[dsin(X[0]),dcos(X[0]),0],[0,0,1]);
+ if(X[1]==0) return M;
+ }
+ N=mat([dcos(X[1]),0,-dsin(X[1])],[0,1,0],[dsin(X[1]),0,dcos(X[1])]);
+ if(X[0]!=0) N=M*N;
+ if(X[2]==0) return N;
+ return N*mrot([X[2],0,0]);
+ }
+ if(getopt(deg)==1) X=@pi*X/180;
+ X=deval(X);
+ return mat([dcos(X),-dsin(X)],[dsin(X),dcos(X)]);
+}
+
+def m2v(M)
+{
+ S = size(M);
+ V = newvect(S[0]*S[1]);
+ for(I = C = 0; I < S[0]; I++){
+ MI = M[I];
+ for(J = 0; J < S[1]; J++)
+ V[C++] = MI[J];
+ }
+ return V;
+}
+
+def lv2m(L)
+{
+ if(type(L)==5) L=vtol(L);
+ II=length(L);
+ for(J=1,T=L; T!=[]; T=cdr(T))
+ if(length(car(T))>JJ) JJ=length(car(T));
+ M = newmat(II,JJ);
+ N = getopt(null);
+ if(type(N)<0) N=0;
+ for(I=0; I<II; I++){
+ V=car(L); L=cdr(L);
+ for(J=length(V);--J>=0;)
+ M[I][J] = V[J];
+ if(N!=0){
+ for(J=length(V); J<JJ; J++)
+ M[I][J]=N;
+ }
+ }
+ return M;
+}
+
+def m2lv(M)
+{
+ I=size(M)[0];
+ for(N=[],I=size(M)[0];I-->0;)
+ N=cons(M[I],N);
+ return N;
+}
+
+def s2m(S)
+{
+ if(type(S)==6) return S;
+ if(type(S)==7){
+ if(str_chr(S,0,"[")!=0) S=s2sp(S);
+ else if(str_chr(S,0,",")>=0) return eval_str(S);
+ else{
+ for(L=LL=[],I=0; ; ){
+ II=str_chr(S,I+2,"]");
+ if(II<0) return 0;
+ J=str_chr(S,I+2," ");
+ while(str_chr(S,J+1," ")==J+1) J++;
+ if(J>II-2 || J<0) J=II;
+ V=eval_str(sub_str(S,I+1,J-1));
+ L=cons(V,L);
+ I=J;
+ if(J==II){
+ LL=cons(ltov(reverse(L)),LL);
+ L=[];
+ if((I=str_chr(S,II+1,"["))<0)
+ return lv2m(reverse(LL));
+ }
+ }
+ }
+ }
+ if(type(S)==5) S=vtol(S);
+ if(type(S[0])==5) return lv2m(S);
+ I=length(S);
+ for(J=1,T=S; T!=[]; T=cdr(T))
+ if(length(car(T))>J) J=length(car(T));
+ return newmat(I,J,S);
+}
+
+def c2m(L,V)
+{
+ if(type(Pow=getopt(pow))!=1){
+ if(isvar(V)==1){
+ for(Pow=0,LT=L;LT!=[];LT=cdr(LT)){
+ if(mydeg(car(LT),V)>JJ) Pow=mydeg(car(LT),V);
+ }
+ JJ=Pow+1;
+ }else{
+ Pow=-1;
+ JJ=length(V);
+ }
+ }else JJ=Pow+1;
+ M=newmat(length(L),JJ);
+ for(I=0;L!=[];L=cdr(L),I++){
+ for(J=0;J<JJ;J++){
+ LT=car(L);
+ M[I][J]=(Pow>=0)?mycoef(LT,J,V):mycoef(LT,1,V[J]);
+ }
+ }
+ return M;
+}
+
+#if 0
+def m2diag(M,N)
+{
+ S = size(M);
+ MM = mtoupper(M,N);
+ for(I = S[0]-1; I >= 0; I--){
+ for(J = 0; I < S[1]-N; I++){
+ if(MM[I][J] != 0){
+ P = MM[I][J];
+ for(K = 0; K < I; K++){
+ Q = -rmul(MM[K][J],1/P);
+ MM[K][J] = 0;
+ if(Q != 0){
+ for(L = J+1; L < S[1]; L++){
+ if(MM[I][L] != 0)
+ MM[K][L] = radd(MM[K][L], rmul(MM[I][L],Q));
+ }
+ }
+ }
+ }
+ }
+ }
+ return MM;
+}
+#endif
+
+def myinv(M)
+{
+ S = size(M);
+ if((T=S[0]) != S[1])
+ return 0;
+ MM = mtoupper(M,-T|opt=2);
+ if(MM[T-1][T-1] != 1) return 0;
+ return mperm(MM,0,[T,[T]]);
+}
+
+def madj(G,M)
+{
+ H=myinv(G);
+ if(type(M)==6)
+ return rmul(rmul(G,M),H);
+ if(type(M)==4||type(M)==5){
+ L=length(M);
+ N=newvect(L);
+ for(I=0;I<L;I++){
+ N[I]=rmul(rmul(G,M[I]),H);
+ }
+ if(type(N)==4) N=vtol(N);
+ return N;
+ }
+ return -1;
+}
+
+def mpower(M,N)
+{
+ if(type(M)<=3) return (red(M))^N;
+ S = size(M);
+ if(S[0] != S[1])
+ return 0;
+ if(N == 0) return mgen(S[0],0,[1],0);
+ if(N < 0)
+ return(mpower(myinv(M), -N));
+ R = dupmat(M);
+ V=1;
+ for(V=1;;){
+ if(iand(N,1)){
+ V=map(red,R*V);
+ N--;
+ }
+ if((N/=2)==0) break;
+ R=map(red,R*R);
+ }
+ return V;
+}
+
+def texlen(S)
+{
+ if(type(S)!=7) return 0;
+ LF=I=J=0;
+ LM=str_len(S);
+ while((I=str_str(S,"\\frac{"|top=J))>=0){
+ if(I>J) LF+=texlen(str_cut(S,J,I-1));
+ I+=6;
+ for(F=L=0,J=I;F<2 && J<LM-1;F++){
+ for(C=1;C>0 && J<LM;){
+ if((K0=str_char(S,J,"}"))<0) K0=LM;
+ if((K1=str_char(S,J,"{"))<0) K1=LM;
+ if(K0<0 && K1<0){
+ J = str_len(S)-1;
+ break;
+ }
+ if(K0<K1){
+ J=K0+1; C--;
+ }else{
+ J=K1+1; C++;
+ }
+ }
+ T=str_cut(S,I,J-1);
+ if(F==0){
+ I=J=K1+1;C=1;
+ }else J=K0+1;
+ if(type(T)==7 && (LL=texlen(T))>L) L=LL;
+ }
+ LF+=L;
+ }
+ if(J>0) S=str_cut(S,J,str_len(S)-1);
+ if(S==0) return LF;
+ S=ltov(strtoascii(S));
+ L=LL=length(S);
+ for(I=F=0; I<L; I++){
+ if(S[I]==92) F=1;
+ else if(F==1){
+ if((S[I]>96 && S[I]<123)||(S[I]>64 && S[I]<91)) LL--;
+ else F=0;
+ }
+ if(S[I]<=32||S[I]==123||S[I]==125||S[I]==94||S[I]==38) LL--; /* {}^& */
+ else if(S[I]==95){
+ LL--;
+ if(I+2<L && S[I+2]==94) LL--; /* x_2^3 */
+ else if(I+6<L && S[I+1]==123 && S[I+4]==125){ /* x_{11}^2 */
+ if(S[I+5]==94 || (S[I+5]==125 && S[I+6]==94)) LL-- ; /* x_{11}}^2 */
+ }
+ }
+ }
+ return LL+LF;
+}
+
+def isdif(P)
+{
+ if(type(P)<1 || type(P)>3) return 0;
+ for(Var=[],R=vars(P);R!=[];R=cdr(R)){
+ V0=rtostr(car(R));
+ if(V0>"d" && V0<"e"){
+ V=sub_str(V0,1,str_len(V0)-1);
+ if(V>="a" && V<"{") Var=cons([strtov(V),strtov(V0)],Var);
+ }
+ }
+ if(Var==[]) return 0;
+ for(V=Var; V!=[]; V=cdr(V))
+ if(ptype(P,car(V)[1])==3) return 0;
+ return Var;
+}
+
+def texsp(P)
+{
+ Q=strtoascii(P);
+ if((J=str_char(Q,0,92))<0 || (C=Q[L=str_len(P)-1])==32||C==41||C==125)
+ return P;
+ for(;;){
+ if((I=str_char(Q,J+1,92))<0) break;
+ J=I;
+ };
+ for(I=J+1;I<L&&isalpha(Q[I]);I++);
+ return(I==L)?P+" ":P;
+}
+
+def fctrtos(P)
+{
+ /* extern TeXLim; */
+
+ if(!chkfun("write_to_tb", "names.rr"))
+ return 0;
+
+ TeX = getopt(TeX);
+ if(TeX != 1 && TeX != 2 && TeX != 3)
+ TeX = 0;
+ if((Dvi=getopt(dviout)==1) && TeX<2) TeX=3;
+ if(TeX>0){
+ Lim=getopt(lim);
+ if(Lim!=0 && TeX>1 && (type(Lim)!=1||Lim<30)) Lim=TeXLim;
+ else if(type(Lim)!=1) Lim=0;
+ CR=(TeX==2)?"\\\\\n":"\\\\\n&";
+ if(TeX==1 || Lim==0) CR="";
+ else if((Pages=getopt(pages))==1) CR="\\allowdisplaybreaks"+CR;
+ if(!chkfun("print_tex_form", "names.rr"))
+ return 0;
+ Small=getopt(small);
+ }
+ Dif=getopt(dif);
+ Var=getopt(var);
+ if(Lim>0 && type(Var)<2 && TeX!=1) Var=[strtov("0"),""];
+ Dif=0;
+ if(Var=="dif"){
+ Dif=DV=1;
+ }else if (Var=="dif0") Dif=1;
+ else if(Var=="dif1") Dif=2;
+ else if(Var=="dif2") Dif=3;
+ if(Dif>0){
+ for(Var=[],R=vars(P);R!=[];R=cdr(R)){
+ V=rtostr(car(R));
+ if(V>"d" && V<"e"){
+ V=sub_str(V,1,str_len(V)-1);
+ if(V>="a" && V<"{"){
+ if(TeX>0){
+ V=my_tex_form(strtov(V));
+ if(Dif>=1){
+ if(Dif==1){
+ if(str_len(V)==1) V="\\partial_"+V;
+ else V="\\partial_{"+V+"}";
+ }
+ Var=cons([car(R),V],Var);
+ }
+ else Var=cons([car(R)],Var);
+ }else Var=cons([car(R)],Var);
+ }
+ }
+ }
+ if(TeX>0){
+ if(length(Var)==1){
+ if(DV==1 && str_len(Var[0][1])==10) Var=[[Var[0][0],"\\partial"]];
+ }else if(DV==1){
+ for(V=Var;V!=[];V=cdr(V)){
+ VV=rtostr(car(V)[0]);
+ if(VV<"dx0" || VV>= "dx:" || str_len(VV)>4) break;
+ }
+ if(V==[]){
+ for(VT=[],V=Var;V!=[];V=cdr(V)){
+ VV=str_cut(rtostr(car(V)[0]),2,3);
+ if(str_len(VV)==1) VT=cons([car(V)[0],"\\partial_"+VV],VT);
+ else VT=cons([car(V)[0],"\\partial_{"+VV+"}"],VT);
+ }
+ Var=reverse(VT);
+ }
+ }else
+ if(Dif==2 && length(Var)>1) Dif=3;
+ }
+ if(Dif>0) Dif--;
+ }
+ if(type(Var)>1 && Var!=[]){ /* as a polynomial of Var */
+ Add=getopt(add);
+ if(type(Add)>0){
+ if(type(Add)!=7){
+ Add=my_tex_form(Add);
+ if(str_char(Add,0,"-")>=0 || str_char(Add,0,"+")>=0) Add="("+Add+")";
+ }
+ if(str_char(Add,0,"(")!=0) Add = " "+Add;
+ }else Add=0;
+ if(type(Var)!=4) Var=[Var];
+ if(length(Var)==2 && type(Var[1]) == 7)
+ Var = [Var];
+ for(VV=VD=[]; Var!=[];Var=cdr(Var)){
+ VT=(type(car(Var))==4)?car(Var):[car(Var)];
+ VT0=var(car(VT));
+ VV=cons(VT0,VV);
+ if(length(VT)==1){
+ VD=cons((TeX>=1)?my_tex_form(VT0):rtostr(VT0),VD);
+ }else VD=cons(VT[1],VD);
+ }
+ VV=reverse(VV);VD=reverse(VD);
+ Rev=(getopt(rev)==1)?1:0;
+ Dic=(getopt(dic)==1)?1:0;
+ TT=terms(P,VV|rev=Rev,dic=Dic);
+ if(TeX==0){
+ Pre="("; Post=")";
+ }else{
+ Pre="{"; Post="}";
+ }
+ Out = string_to_tb("");
+ for(L=C=0,Tm=TT;Tm!=[];C++,Tm=cdr(Tm)){
+ for(I=0,PC=P,T=cdr(car(Tm)),PW="";T!=[];T=cdr(T),I++){
+ PC=mycoef(PC,D=car(T),VV[I]);
+ if(PC==0) continue;
+ PT="";
+ if(D!=0 && VD[I]!=""){
+ if(TeX==0 && PW!="") PW+="*";
+ if(D>1){
+ if(D>9) PT="^"+Pre+rtostr(D)+Post;
+ else PT="^"+rtostr(D);
+ }
+ if(Dif>0) PW+=(Dif==1)?"d":"\\partial ";
+ PW+=VD[I]+PT;
+ }
+ }
+ D=car(Tm)[0];
+ if(Dif>0 && D>0){
+ Op=(Dif==1)?"\\frac{d":"\\frac{\\partial";
+ if(D>1) Op+="^"+((D>9)?(Pre+rtostr(D)+Post):rtostr(D));
+ PW=Op+Add+"}{"+PW+"}";
+ }else if(Add!=0) PW=PW+Add;
+ if(TeX>=1){
+ if(type(PC)==1 && ntype(PC)==0 && PC<0)
+ OC="-"+my_tex_form(-PC);
+ else OC=fctrtos(PC|TeX=1,br=1);
+ }else OC=fctrtos(PC|br=1);
+ if(PW!=""){
+ if(OC == "1") OC = "";
+ else if(OC == "-1") OC = "-";
+ }
+ if(TeX==0 && D!=0 && OC!="" && OC!="-") PW= "*"+PW;
+ if((TOC=type(OC)) == 4){ /* rational coef. */
+ if(Lim>0 && (texlen(OC[0])>Lim || texlen(OC[0])>Lim)){
+ OC = (Small==1)?"("+OC[0]+")/("+OC[1]+")"
+ :"\\Bigl("+OC[0]+"\\Bigr)\\Bigm/\\Bigl("+OC[1]+"\\Bigr)";
+ TOC = 7;
+ }else{
+ if(str_char(OC[0],0,"-")==0){
+ OC = fctrtos(-PC|TeX=1,br=1);
+ OC = "-\\frac{"+OC[0]+"}{"+OC[1]+"}";
+ }
+ else
+ OC = "\\frac{"+OC[0]+"}{"+OC[1]+"}";
+ }
+ }
+ if(Lim>0){
+ LL=texlen(OC)+texlen(PW);
+ if(LL+L>=Lim){
+ if(L>0) str_tb(CR,Out);
+ if(LL>Lim){
+ if(TOC==7) OC=texlim(OC,Lim|cut=CR);
+ PW+=CR; L=0;
+ }else L=LL;
+ }else L+=LL;
+ }else if(length(Tm)!=1) PW += CR; /* not final term */
+ if(TeX) OC=texsp(OC);
+ if(str_chr(OC,0,"-") == 0 || C==0) str_tb([OC,PW], Out);
+ else{
+ str_tb(["+",OC,PW],Out);
+ if(LL<=Lim) L++;
+ }
+ }
+ S=str_tb(0,Out);
+ if(S=="") S="0";
+ }else{ /* Var is not specified */
+ if((TP=type(P)) == 3){ /* rational function */
+ P = red(P); Nm=nm(P); Dn=dn(P);
+ Q=dn(ptozp(Nm|factor=1)[1]);
+ if(Q>1){
+ Nm*=Q;Dn*=Q;
+ }
+ if(TeX>0){
+ return (TeX==2)?
+ "\\frac\{"+fctrtos(Nm|TeX=1)+"\}\{"+fctrtos(Dn|TeX=1)+"\}"
+ :[fctrtos(Nm|TeX=1),fctrtos(Dn|TeX=1)];
+ }
+ else{
+ S=fctrtos(Nm);
+ if(nmono(Nm)>1) S="("+S+")";
+ return S+"/("+fctrtos(Dn)+")";
+ }
+ }
+ if(imag(P)==0) P = fctr(P); /* usual polynomial */
+ else P=[[P,1]];
+ S = str_tb(0,0);
+ for(J = N = 0; J < length(P); J++){
+ if(type(P[J][0]) <= 1){
+ if(P[J][0] == -1){
+ write_to_tb("-",S);
+ if(length(P) == 1)
+ str_tb("1", S);
+ }else if(P[J][0] != 1){
+ str_tb((TeX>=1)?my_tex_form(P[J][0]):rtostr(P[J][0]), S);
+ N++;
+ }else if(length(P) == 1)
+ str_tb("1", S);
+ else if(getopt(br)!=1 && length(P) == 2 && P[1][1] == 1){
+ str_tb((TeX>=1)?my_tex_form(P[1][0]):rtostr(P[1][0]), S);
+ J++;
+ }
+ continue;
+ }
+ if(N > 0 && TeX != 1 && TeX != 2 && TeX != 3)
+ write_to_tb("*", S);
+ SS=(TeX>=1)?my_tex_form(P[J][0]):rtostr(P[J][0]);
+ N++;
+ if(P[J][1] != 1){ /* (log(x))^2 */
+ if(nmono(P[J][0])>1||
+ (!isvar(P[J][0])||vtype(P[J][0]))&&str_len(SS)>1) SS="("+SS+")";
+ write_to_tb(SS,S);
+ str_tb(["^", (TeX>1)?rtotex(P[J][1]):monotos(P[J][1])],S);
+ }else{
+ if(nmono(P[J][0])>1) SS="("+SS+")";
+ write_to_tb(SS,S);
+ }
+ }
+ S = str_tb(0,S);
+ if((Lim>0 || TP!=2) && CR!="") S=texlim(S,Lim|cut=CR);
+ }
+ if(TeX>0){
+ if(Small==1) S=str_subst(S,"\\frac{","\\tfrac{");
+ if(Dvi==1){
+ dviout(strip(S,"(",")")|eq=(Pages==1)?6:0); S=1;
+ }
+ }
+ return S;
+}
+
+def strip(S,S0,S1)
+{
+ SS=strtoascii(S);
+ if(length(SS)>1){
+ if(SS[0]==40&&SS[length(SS)-1]==41&&str_pair(SS,1,S0,S1)==length(SS)-1)
+ S=str_cut(SS,1,length(SS)-2);
+ }
+ return S;
+}
+
+def texlim(S,Lim)
+{
+ /* extern TeXLim; */
+ if(S==1 && Lim>10){
+ TeXLim=Lim;
+ mycat(["Set TeXLim =",Lim]);
+ return 1;
+ }
+ if(type(Out=getopt(cut))!=7) Out="\\\\\n&";
+ if(type(Del=getopt(del))!=7) Del=Out;
+ if(Lim<30) Lim=TeXLim;
+ S=ltov(strtoascii(S));
+ for(L=[0],I=F=0;F==0; ){
+ II=str_str(S,Del|top=I)+2;
+ if(II<2){
+ F++;II=/* str_len(S) */ length(S)-1;
+ }
+ for(J=JJ=I+1;;JJ=K+1){
+ K=str_char(S,JJ,43); /* + */
+ if((K1=str_char(S,JJ,45))>2 && K1<K){ /* - */
+ if(S[K1-1]!=123 && S[K1-1]!=40) K=K1; /* {, ( */
+ }
+ if((K1=str_char(S,JJ,40))>0 && K1-JJ>6 && K1<K && S[K1-1]!=43 && S[K1-1]!=45){ /* ( */
+ T=str_char(S,K1-6,"\\"); /* \Big*(, \big*( */
+ if((T==K1-6 || T==K1-5)
+ && (str_str(S,"big"|top=T+1,end=T+1)>0 || str_str(S,"Big"|top=T+1,end=T+1)>0))
+ K=T;
+ else if(K1>0 && K1<K) K=K1;
+ }
+ if(K<0 || K>II) break;
+ if(K-J>Lim && texlen(str_cut(S,J,K-1))>=Lim){
+ J=K+1; L=cons(JJ-1,L); SL=0;
+ }
+ }
+ I=II;
+ }
+ SS=str_tb(0,0);
+ L=cons(length(S),L);
+ L=reverse(L);
+ for(I=0; L!=[]; I=J,L=cdr(L)){
+ str_tb((I==0)?"":Out,SS);
+ J=car(L);
+ str_tb(str_cut(S,I,J-1),SS);
+ }
+ return str_tb(0,SS);
+}
+
+def fmult(FN,M,L,N)
+{
+ Opt=getopt();
+ for(I = 0; I < length(M); I++)
+ M = call(FN, cons(M,cons(L[I],N))|option_list=Opt);
+ return M;
+}
+
+def radd(P,Q)
+{
+ if(type(P) <= 3 || type(Q) <= 3){
+ if(type(P) >= 5)
+ return radd(Q,P);
+ if(type(Q) >= 5){
+ R = dupmat(Q);
+ if(P == 0)
+ return R;
+ if(type(Q) == 6){
+ S = size(Q);
+ if(S[0] != S[1])
+ return 0;
+ for(I = 0; I < S[0]; I++)
+ R[I][I] = radd(R[I][I], P);
+ }else{
+ for(I = length(R)-1; I >= 0; I--)
+ R[I] = radd(R[I],P);
+ }
+ return R;
+ }
+ /* P=red(P);Q=red(Q); */
+ if((P1=dn(P)) == (Q1=dn(Q))){
+ if(P1==1) return P+Q;
+ return red((nm(P)+nm(Q))/P1);
+ }
+ R=gcd(P1,Q1);S=tdiv(P1,R);
+ return red((nm(P)*tdiv(Q1,R)+nm(Q)*S)/(S*Q1));
+ }
+ if(type(P) == 5){
+ S = length(P);
+ R = newvect(S);
+ for(I = 0; I < S; I++)
+ R[I] = radd(P[I],Q[I]);
+ return R;
+ }
+ if(type(P) == 6){
+ S = size(P);
+ R = newmat(S[0],S[1]);
+ for(I = 0; I < S[0]; I++){
+ for(J = 0; J < S[1]; J++)
+ R[I][J] = radd(P[I][J],Q[I][J]);
+ }
+ return R;
+ }
+ erno(0);
+}
+
+def getel(M,I)
+{
+ if(type(M) >= 4 && type(M) <= 6 && type(I) <= 1)
+ return M[I];
+ if(type(M) == 6 && type(I) == 5)
+ return M[I][J];
+ return M;
+}
+
+def ptol(P,X)
+{
+ F=(getopt(opt)==0)?0:1;
+ if(type(P) <= 3)
+ P = [P];
+ if(type(X) == 4){
+ for( ; X != []; X = cdr(X))
+ P=ptol(P,car(X)|opt=F);
+ return P;
+ }
+ P = reverse(P);
+ for(R=[]; P != []; P = cdr(P)){
+ Q = car(P);
+ for(I = mydeg(Q,X); I >= 0; I--){
+ S=mycoef(Q,I,X);
+ if(F==1 || S!=0) R = cons(S,R);
+ }
+ }
+ return R;
+}
+
+def rmul(P,Q)
+{
+ if(type(P) <= 3 && type(Q) <= 3){
+ P=red(P);Q=red(Q);
+ P1=dn(P);P2=nm(P);Q1=dn(Q);Q2=nm(Q);
+ if(P1==1 && Q1==1)
+ return P*Q;
+ if((R=gcd(P1,Q2)) != 1){
+ P1=tdiv(P1,R);Q2=tdiv(Q2,R);
+ }
+ if((R=gcd(Q1,P2)) != 1){
+ Q1=tdiv(Q1,R);P2=tdiv(P2,R);
+ }
+ return P2*Q2/(P1*Q1);
+ }
+#ifdef USEMODULE
+ return mmulbys(os_md.rmul,P,Q,[]);
+#else
+ return mmulbys(rmul,P,Q,[]);
+#endif
+}
+
+def mtransbys(FN,F,LL)
+{
+ Opt=getopt();
+ if(type(F) == 4){
+ F = ltov(F);
+ S = length(F);
+ R = newvect(S);
+ for(I = 0; I < S; I++)
+ R[I] = mtransbys(FN,F[I],LL|option_list=Opt);
+ return vtol(R);
+ }
+ if(type(F) == 5){
+ S = length(F);
+ R = newvect(S);
+ for(I = 0; I < S; I++)
+ R[I] = mtransbys(FN,F[I],LL|option_list=Opt);
+ return R;
+ }
+ if(type(F) == 6){
+ S = size(F);
+ R = newmat(S[0],S[1]);
+ for(I = 0; I < S[0]; I++){
+ for(J = 0; J < S[1]; J++)
+ R[I][J] = mtransbys(FN,F[I][J],LL|option_list=Opt);
+ }
+ return R;
+ }
+ if(type(F) == 7) return F;
+ return call(FN, cons(F,LL)|option_list=Opt);
+}
+
+def drawopt(S,T)
+{
+ if(type(S)!=7) return -1;
+ if(T==0||T==1){
+ for(I=0,R=LCOPT;I<7;I++,R=cdr(R))
+ if(str_str(S,car(R))>=0) return(T==0)?COLOPT[I]:car(R);
+ return -1;
+ }
+ if(T==2){
+ V0=V1=0;
+ for(I=0,R=LPOPT;R!=[];I++,R=cdr(R)){
+ if(str_str(S,car(R))>=0){
+ if(I==0) V1++;
+ else if(I==1) V1--;
+ else if(I==2) V0--;
+ else V0++;
+ }
+ }
+ if(V0==0&&V1==0) return -1;
+ return [V0,V1];
+ }
+ if(T==3){
+ V=0;
+ for(I=1,R=LFOPT;R!=[];R=cdr(R),I*=2){
+ if(str_str(S,car(R))>=0) V+=I;
+ }
+ return (V==0)?-1:V;
+ }
+ return -1;
+}
+
+def execdraw(L,P)
+{
+ if((Proc=getopt(proc))!=1) Proc=0;
+ if(type(P)<2) P=[P];
+ if(L!=[]&&type(L[0])!=4) L=[L];
+ /* special command */
+ if(P[0]<0){
+ if(length(P)==1&&(P[0]==-1||P[0]==-2||P[0]==-3)){ /* Bounding Box */
+ W=WS=N=LS=0;
+ for(LL=L;LL!=[];LL=cdr(LL)){
+ T=car(LL);
+ if(P[0]!=-3 && T[0]==0){
+ if(length(T)>3) S=" by "+rtostr(T[3])+" cm";
+ else S="";
+ if(P[0]==-1){
+ mycat(["Windows : ",T[1][0],"< x <",T[1][1],", ",
+ T[2][0],"< y <",T[2][1],S]);
+ if(length(T)>4 && type(T[4])==4) mycat(["ext :",T[4]]);
+ if(length(T)>5) mycat(["shift :",T[5]]);
+ }
+ return cdr(T);
+ }
+ if(type(T[0])==1){
+ if(T[0]==1){
+ for(TT=cdr(cdr(T));TT!=[];TT=cdr(TT)){
+ D=car(TT);
+ if(type(D[0][0])==4){
+ for(DT=D;DT!=[];DT=cdr(DT)){
+ if(N++==0) W=ptbbox(car(DT));
+ else W=ptbbox(car(DT)|box=W);
+ }
+ }else{
+ if(N++==0) W=ptbbox(D);
+ else W=ptbbox(D|box=W);
+ }
+ }
+ }else if(T[0]==2){
+ V=T[2];
+ if(type(V[0])>1||type(V[1])>1) continue; /* not supported */
+ if((Sc=delopt(T[1],"scale"|inv=1))!=[]){
+ Sc=car(Sc)[1];
+ if(type(Sc)==1) V=[Sc*V[0],Sc*V[1]];
+ else V=[Sc[0]*V[0],Sc[1]*V[1]];
+ }
+ if(LS==0) WS=ptbbox([V]);
+ else WS=ptbbox([V]|box=WS);
+ if(length(T)>4) S=T[4];
+ else if(type(S=T[3])==4){
+ S=S[0];
+ if(type(S)==4) S=S[length(S)-1];
+ S=rtostr(S);
+ }
+ if(str_len(S)>LS) LS=str_len(S);
+ }else if(T[0]==3||T[0]==4){
+ if(N++==0) W=ptbbox(cdr(cdr(T)));
+ else W=ptbbox(cdr(cdr(T))|box=W);
+ }
+ }
+ }
+ if(W!=0&&WS!=0) W=ptbbox([W,WS]|box=1);
+ return (P[0]==-3)?[W,LS,WS]:W;
+ }else if(length(P)>1&&P[0]==-1){ /* set Bounding Box */
+ P=cons(0,cdr(P));
+ Ex=Sft=[0,0];
+ if(type(X=getopt(ext))==4) Ex=X;
+ if(type(X=getopt(shift))==4) Sft=X;
+ if(Ex!=Sft||Ex!=[0,0]){
+ if(Sft==[0,0]) Sft=[Ex];
+ else Sft=[Ex,Sft];
+ if(length(P)==3) Sft=cons(1,Sft);
+ if(length(P)==3||length(P)==4) P=append(P,Sft);
+ }
+ return cons(P,delopt(L,0));
+ }
+ if(P[0]==-4){
+ for(N=0,LT=L;LT!=[];LT=cdr(LT)){ /* count coord. */
+ T=car(LT);
+ if(T[0]==1){
+ for(T=cdr(cdr(T));T!=[];T=cdr(T)){
+ if(type((S=car(T))[0][0])==4) N+=length(S);
+ else for(;S!=[];S=cdr(S)) if(type(car(S))==4) N++;
+ }
+ }else if(T[0]==2) N++;
+ else if(T[0]==3||T[0]==4) N+=2;
+ }
+ return N;
+ }
+ if(P[0]==-5){ /* functions */
+ for(N=0,R=[],LT=L;LT!=[];LT=cdr(LT)){
+ T=car(LT);
+ if(T[0]==0) N=ior(N,1);
+ else if(type(T[0])==1){
+ if(T[0]>0) N=ior(N,2^T[0]);
+ }
+ else if(Type(T[0])==2){
+ if(findin(T[0],R)<0) R=cons(T[0],R);
+ }
+ }
+ for(I=5;I>=0;I--) if(iand(N,2^I)) R=cons(I,R);
+ return R;
+ }
+ return 0;
+ }
+
+ if(length(P)>1){
+ if(type(P[1])==6||(type(P[1])<2&&P[1]>0)) M=P[1];
+ else if(type(P[1])==4&&length(P[1])==2) M=diagm(2,P[1]);
+ }
+ if(length(P)>2&&type(P[2])==4){
+ Org=[["shift",P[2]]];
+ if(M==0) M=1;
+ }else Org=[];
+ if(P[0]==0||(type(P[0])==4&&P[0][0]==0)){ /* Risa/Asir */
+ PP=car(P);PPP=0;
+ if(type(PP)!=4) PP=[PP];
+ if(length(PP)<3){
+ if(length(PP)==1 || type(PP[1])==4){
+ if(ID_PLOT<0) ID_PLOT=ox_launch_nox(0,"ox_plot");
+ Id=ID_PLOT;
+ if(length(PP)==1&&type(Canvas)==4&&length(Canvas)==2)
+ PP=cons(PP[0],[Canvas]);
+ if(length(PP)>1){
+ PPP=PP[1][0];
+ PPQ=(length(PP[1])==2)?PP[1][1]:PPP;
+ open_canvas(Id,[PPP,PPQ]);
+ }else open_canvas(Id);
+ Ind=ox_pop_cmo(Id);
+ }else{
+ Ind=PP[1];
+ if(getopt(cl)==1) clear_canvas(Id,Ind);
+ }
+ }else{
+ Id=PP[1];Ind=PP[2];
+ if(length(PP)>3 && type(PP[3])==1) PPP=PP[3];
+ if(length(PP)>4 && type(PP[4])==1) PPQ=PP[4];
+ if(getopt(cl)==1) clear_canvas(Id,Ind);
+ }
+ if(L==[]) return (PPP>0)? [0,Id,Ind,PPP,PPQ]:[0,Id,Ind];
+ Ex0=Ex0;Sft=[0,0];
+ if(length(P)>1&&P[1]==0&&length(P)<4){
+ R=execdraw(L,-3);
+ Ex0=Ex1=Ex2=10;
+ if((U=R[1])>0){ /* string */
+ if(U>20) U=16; /* adj 16,8,2,7,15 */
+ if(R[0][0][0]>R[2][0][0]-(R[0][0][1]-R[0][0][0])/256) Ex0+=8*U; /* adj 256 */
+ else Ex0+=2*U;
+ if(R[0][0][1]<R[2][0][1]+(R[0][0][1]-R[0][0][0])/256) Ex1+=7*U;
+ else Ex1+=2*U;
+ if(R[0][1][1]<R[2][1][1]+(R[0][1][1]-R[0][1][0])/256) Ex2+=15;
+ }
+ R=[R[0][0],R[0][1],0,[Ex0,Ex1],[0,-Ex2]];
+ if(length(P)>2 && P[2]==1)
+ mycat0(["Box:",[R[0],R[1]], ", ext=",R[3],", shift=",R[4]],1);
+ }else R=execdraw((length(P)>3)?P[3]:L,-2); /* Windows */
+ XW=R[0];YW=R[1];
+ if(length(R)>3){
+ if(R[3]!=0 && R[3]!=[0,0]) Ex=R[3];
+ if(length(R)>4) Sft=R[4];
+ }
+ if(type(X=getopt(ext))==4)
+ Ex=(Ex0)?[X[0]+Ex[0],X[1]+Ex[1]]:X;
+ if(type(M)<2){
+ if(length(P)>1&&type(P[1])==1) M=P[1];
+ else if((length(P)==1||P[1]==0||P[1]==1)&& PPP>0) M=PPP;
+ if(M<2) M=400;
+ if(Ex!=0 && type(Ex)==4){
+ M-=Ex[0]+Ex[1];
+ }
+ M=(M/(XW[1]-XW[0]))*diagm(2,[1,-1]);
+ }
+ if(type(X=getopt(shift))==4) Sft=(Ex0)?[Sft[0]+X[0],Sft[1]+X[1]]:X;
+ if(type(Sft)==4) Sft=[Sft[0],-Sft[1]];
+ if(Ex!=0) Sft=[Sft[0]+Ex[0],Sft[1]];
+ Org=[["shift",ptaffine(M,[-XW[0],-YW[1]]|shift=Sft)]];
+ for(CT=0;CT<2;CT++){
+ for(LT=L;LT!=[];LT=cdr(LT)){
+ T=car(LT);
+ if(!CT && T[0]!=2) continue;
+ if(CT && T[0]==2) continue;
+ if(T[0]==1){
+ for(TT=cdr(cdr(T));TT!=[];TT=cdr(TT)){
+ D=car(TT);
+ if(type(D[0][0])==4){
+ for(DT=D;DT!=[];DT=cdr(DT)){
+ V=car(DT);
+ if(M) V=ptaffine(M,V|option_list=Org);
+ draw_bezier(Id,Ind,V|option_list=T[1]);
+ }
+ }else{
+ if(M) D=ptaffine(M,D|option_list=Org);
+ draw_bezier(Id,Ind,D|option_list=T[1]);
+ }
+ }
+ }else if(T[0]==2){ /* put */
+ if(length(T)<4) continue;
+ V=T[2];
+ if(type(VLB)==4&&V[0]=="_") V=VLB;
+ else if(type(V[0])>1||type(V[1])>1) continue; /* not supported */
+ if(length(T)>3&&type(T[3])==4&&length(T[3])>1&&T[3][1]==1) VLB=V;
+ F++;MM=M;
+ if((Sc=delopt(T[1],"scale"|inv=1))!=[]){
+ if(!MM) MM=1;
+ Sc=car(Sc)[1];
+ if(type(Sc)==1) MM=MM*Sc;
+ else if(type(Sc)==6) MM=MM*diagm(2,Sc);
+ }
+ if(MM) V=ptaffine(MM,V|option_list=Org);
+ if(type(S=S0=T[3])==4) S=S0[0];
+ if(length(T)>4) S=T[4]; /* subst. string */
+ if(type(S0)==4&&type(S0[0])==4){
+ if((Col=drawopt(S0[0][0],0))<0) Col=0; /* attrib. */
+ if(type(S)!=7) S=rtostr(S0[0][1]);
+ S=str_subst(S,[["$\\bullet$","*"],["$\\times$","x"],["$",""]],0);
+ if(type(Pos=drawopt(S0[0][0],2))==4)
+ V=[V[0]+4*str_len(S)*Pos[0],V[1]-10*Pos[1]]; /* adjustable */
+ }else S=str_subst(rtostr(S),[["$\\bullet$","*"],["$\\times$","x"],["$",""]],0);
+ V=[V[0]-str_len(S)*4,V[1]-8]; /* adjustable */
+ draw_string(Id,Ind,V,S,Col);
+ }else if(T[0]==3){ /* arrow */
+ F++;
+ T1=T[2];T2=T[3];
+ if(M){
+ T1=ptaffine(M,T1|option_list=Org);
+ T2=ptaffine(M,T2|option_list=Org);
+ }
+ draw_bezier(Id,Ind,[T1,T2]|option_list=T[1]);
+ }else if(T[0]==4){ /* line */
+ F++;
+ T1=T[2];T2=T[3];
+ if(M){
+ T1=ptaffine(M,T1|option_list=Org);
+ T2=ptaffine(M,T2|option_list=Org);
+ }
+ V=delopt(T1=T[1],"opt"|inv=1);
+ if(V!=[]&&str_str(V[1],".")>=0)
+ T1=cons(["opt",cons("dotted,",V[1])],delopt(T1,"opt"));
+ draw_bezier(Id,Ind,[T1,T2]|option_list=T1);
+ }else if(T[0]==5){ /* TeX */
+ mycat(rtostr(T[2]));
+ if(F){
+ S=str_tb(0,Out);
+ Out=str_tb(0,0);
+ F=0;
+ if(S!=""){
+ if(P[0]==2) dviout(xyproc(S)|keep=1);
+ else LOut=cons(xyproc(S),LOut);
+ }
+ if(P[0]==2) dviout(T[2]|option_list=T[1]);
+ else{
+ LOut=cons(T[2],Out);
+ }
+ }
+ }else if(Proc==1&&type(T[0])==2){
+ if(length(T)<3) call(T[0],T[1]);
+ else call(T[0],T[1]|option_list=T[2]);
+ }
+ }
+ }
+ S=(PPP>0)? [0,Id,Ind,PPP,PPQ]:[0,Id,Ind];
+ if(Ex==0&&Sft!=[0,0]) Ex=[0,0];
+ return (Ex!=0&&length(P)>2&&P[2]==-1)?
+ [S,0,0,[0,R[0],R[1],0,Ex,[Sft[0]-Ex[0],-Sft[1]]]]:S;
+ }
+ if(P[0]==1||P[0]==2){ /* TeX */
+ Out=str_tb(0,0);LOut=[];F=0;
+ if(getopt(cl)==1) dviout0(0);
+ for(;L!=[];L=cdr(L)){
+ T=car(L);Opt=T[1];
+ if(type(T[0])>=2) continue;
+ if(T[0]==0){
+ XW=T[1];YW=T[2];
+ if(length(P)>1&&type(P[1])==1&&P[1]<0)
+ M=-P[1]/(XW[0]-XW[1]);
+ }else if(T[0]==1){
+ F++;
+ for(TT=cdr(cdr(T));TT!=[];TT=cdr(TT)){
+ D=car(TT);
+ if(type(D[0][0])==4){
+ for(DT=D;DT!=[];DT=cdr(DT)){
+ V=car(DT);
+ if(M) V=ptaffine(M,V|option_list=Org);
+ str_tb(xybezier(V|option_list=Opt),Out);
+ }
+ }else{
+ if(M) D=ptaffine(M,D|option_list=Org);
+ str_tb(xybezier(D|option_list=Opt),Out);
+ }
+ }
+ }else if(T[0]==2){
+ F++;V=T[2];
+ Opt=delopt(Opt,"scale"|inv=1);
+ MM=M;
+ if(Opt!=[]){
+ Opt=car(Opt)[1];
+ if(type(Opt)==1) Opt=[Opt,Opt];
+ if(Opt!=[1,1]){
+ if(!MM) MM=1;
+ MM=MM*diagm(2,[Opt[0],Opt[1]]);
+ }
+ }
+ if(MM) V=ptaffine(MM,V|option_list=Org);
+ if(length(T)>3) V=append(V,T[3]);
+ str_tb(xyput(V),Out);
+ }else if(T[0]==3){
+ F++;
+ T1=T[2];T2=T[3];
+ if(M){
+ T1=ptaffine(M,T1|option_list=Org);
+ T2=ptaffine(M,T2|option_list=Org);
+ }
+ str_tb(xyarrow(T1,T2|option_list=Opt),Out);
+ }else if(T[0]==4){
+ F++;
+ T1=T[2];T2=T[3];
+ if(M){
+ T1=ptaffine(M,T1|option_list=Org);
+ T2=ptaffine(M,T2|option_list=Org);
+ }
+ str_tb(xyline(T1,T2|option_list=Opt),Out);
+ }else if(T[0]==5){
+ if(F){
+ S=str_tb(0,Out);
+ Out=str_tb(0,0);
+ F=0;
+ if(S!=""){
+ if(P[0]==2) dviout(xyproc(S)|keep=1);
+ else LOut=cons(xyproc(S),LOut);
+ }
+ if(P[0]==2) dviout(T[2]|option_list=T[1]);
+ else LOut=cons(T[2],Out);
+ }
+ }else if(T[0]==-2)
+ str_tb(["%",T[1],"\n"],Out);
+ else if(Proc==1&&type(T[0])==2){
+ if(length(T)<3) call(T[0],T[1]);
+ else call(T[0],T[1]|option_list=T[2]);
+ }
+ }
+ S=str_tb(0,Out);
+ if(P[0]==1){
+ if(F) LOut=cons(xyproc(S),LOut);
+ Out=str_tb(0,0);
+ for(L=reverse(LOut);L!=[];L=cdr(L))
+ str_tb(car(L),Out);
+ return str_tb(0,Out);
+ }
+ if(F) dviout(xyproc(S));
+ else dviout(" ");
+ }
+}
+
+def execproc(L)
+{
+ if(type(N=getopt(var))!=1&&N!=0) N=2;
+ for(R=[];L!=[];L=cdr(L)){
+ P=car(L);
+ if(type(P[0])==2&&vtype(P[0])==3){
+ if((VS=vars(cdr(P)))!=[]){
+ for(I=0;I<N;I++){
+ V=makev(["v",I+1]);
+ if(findin(V,VS)>=0) P=mysubst(P,[V,R[I]]);
+ }
+ }
+ if(length(P)<3) R=cons(call(P[0],P[1]),R);
+ else R=cons(call(P[0],P[1]|option_list=P[2]),R);
+ }
+ }
+ return (getopt(all)==1)?R:car(R);
+}
+
+def myswap(P,L)
+{
+ X=makenewv(P);
+ for(L=reverse(L);length(L)>1;L=cdr(L))
+ P=subst(P,L[0],X,L[1],L[0],X,L[1]);
+ return P;
+}
+
+def mysubst(P,L)
+{
+ if(P==0) return 0;
+ Inv=getopt(inv);
+ if(type(L[0]) == 4){
+ while((L0 = car(L))!=[]){
+ P = mysubst(P,(Inv==1)?[L0[1],L0[0]]:L0);
+ L = cdr(L);
+ }
+ return P;
+ }
+ if(Inv==1) L=[L[1],L[0]];
+ if(type(P) > 3){
+ if(type(P)==7) return P;
+ if(type(P)>7)
+ return subst(P,L[0],L[1]);
+#ifdef USEMODULE
+ return mtransbys(os_md.mysubst,P,[L]);
+#else
+ return mtransbys(mysubst,P,[L]);
+#endif
+ }
+ P = red(P);
+ if(type(P) == 3){
+ A=mysubst(nm(P),L);B=mysubst(dn(P),L);
+ return red(nm(A)/nm(B))*red(dn(B)/dn(A));
+ }
+ L1=(type(L[1])==3)?red(L[1]):L[1];X=L[0];
+ if(ptype(L1,X)==3){
+ LN=nm(L1);LD=dn(L1);
+ Deg=mydeg(P,X);
+ if(Deg <= 0) return P;
+ V = newvect(Deg+1);
+ for(V[I=Deg]=1;I >= 1;I--)
+ V[I-1]=V[I]*LD;
+ for(R = 0, I = Deg; I >= 0; I--)
+ R = R*LN + mycoef(P,I,X)*V[I];
+ return red(R/V[0]);
+ }
+ return subst(P,X,L1);
+}
+
+def mmulbys(FN,P,F,L)
+{
+ Opt=getopt();
+ if(type(F) <= 3){
+ if(type(P) <= 3)
+ return call(FN, cons(P,cons(F,L))|option_list=Opt);
+ if(type(P) == 5){
+ S = length(P);
+ R = newvect(S);
+ for(I = 0; I < S; I++)
+ R[I] = call(FN, cons(P[I],cons(F,L))|option_list=Opt);
+ return R;
+ }else if(type(P) == 6){
+ S = size(P);
+ R = newmat(S[0],S[1]);
+ for(I = 0; I < S[0]; I++){
+ for(J = 0; J < S[1]; J++)
+ R[I][J] = call(FN, cons(P[I][J],cons(F,L))|option_list=Opt);
+ }
+ return R;
+ }
+ }
+ if(type(F) == 5){
+ S = length(F);
+ if(type(P) <= 3){
+ R = newvect(S);
+ for(I = 0; I < S; I++)
+ R[I] = call(FN, cons(P,cons(F[I],L))|option_list=Opt);
+ return R;
+ }
+ if(type(P) == 5){
+ for(J=R=0; J<S; J++)
+ R = radd(R, call(FN, cons(P[J],cons(F[J],L)))|option_list=Opt);
+ return R;
+ }
+ T = size(P);
+ R = newvect(T[0]);
+ for(I = 0; I < T[0]; I++){
+ for(J = 0; J < S; J++)
+ R[I] = radd(R[I], call(FN, cons(P[I][J],cons(F[J],L))|option_list=Opt));
+ }
+ return R;
+ }
+ if(type(F) == 6){
+ S = size(F);
+ if(type(P) <= 3){
+ R = newmat(S[0],S[1]);
+ for(I = 0; I < S[0]; I++){
+ for(J = 0; J < S[1]; J++)
+ R[I][J] = call(FN, cons(P,cons(F[I][J],L))|option_list=Opt);
+ }
+ return R;
+ }
+ if(type(P) == 5){
+ R = newvect(S[1]);
+ for(J = 0; J < S[1]; J++){
+ for(K = U = 0; K < S[0]; K++)
+ U = radd(U, call(FN, cons(P[K],cons(F[K][J],L))|option_list=Opt));
+ R[J] = U;
+ }
+ return R;
+ }
+ T = size(P);
+ R = newmat(T[0],S[1]);
+ for(I = 0; I < T[0]; I++){
+ for(J = 0; J < S[1]; J++){
+ for(K = U = 0; K < S[0]; K++)
+ U = radd(U, call(FN, cons(P[I][K],cons(F[K][J],L)|option_list=Opt)));
+ R[I][J] = U;
+ }
+ }
+ return R;
+ }
+ erno(0);
+ return 0;
+}
+
+def appldo(P,F,L)
+{
+ if(type(F) <= 3){
+ if(type(L) == 4 && type(L[0]) == 4)
+ return applpdo(P,F,L);
+ L = vweyl(L);
+ X = L[0]; DX = L[1];
+ J = mydeg(P,DX);
+ for(I = R = 0; I <= J; I++){
+ if(I > 0)
+ F = mydiff(F,X);
+ R = radd(R,mycoef(P,I,DX)*F);
+ }
+ return R;
+ }
+#ifdef USEMODULE
+ return mmulbys(os_md.appldo,P,F,[L]);
+#else
+ return mmulbys(appldo,P,F,[L]);
+#endif
+}
+
+def appledo(P,F,L)
+{
+ if(type(F) <= 3){
+ L = vweyl(L);
+ X = L[0]; DX = L[1];
+ J = mydeg(P,DX);
+ for(I = R = 0; I <= J; I++){
+ if(I > 0)
+ F = myediff(F,X);
+ R = radd(R,mycoef(P,I,DX)*F);
+ }
+ return R;
+ }
+#ifdef USEMODULE
+ mmulbys(os_md.appledo,P,F,[L]);
+#else
+ mmulbys(appledo,P,F,[L]);
+#endif
+}
+
+def muldo(P,Q,L)
+{
+ if(type(Lim=getopt(lim))!=1) Lim=100;
+ if(type(Q) <= 3){
+ if(type(L) == 4 && type(L[0]) == 4)
+ return mulpdo(P,Q,L|lim=Lim); /* several variables */
+ R = rmul(P,Q);
+ L = vweyl(L);
+ X = L[0]; DX = L[1];
+ if(X != 0){
+ for(I = F = 1; ; I++){
+ P = mydiff(P,DX);
+ if(I>Lim){
+ mycat(["Over", Lim,"derivations!"]);
+ break;
+ }
+ if(P == 0)
+ break;
+ Q = mydiff(Q,X);
+ if(Q == 0)
+ break;
+ F *= I;
+ R = radd(R,P*Q/F);
+ }
+ }
+ return R;
+ }
+#ifdef USEMODULE
+ return mmulbys(os_md.muldo,P,Q,[L]);
+#else
+ return mmulbys(muldo,P,Q,[L]);
+#endif
+}
+
+def jacobian(F,X)
+{
+ F=ltov(F);X=ltov(X);
+ N=length(F);
+ M=newmat(N,N);
+ for(I=0;I<N;I++)
+ for(J=0;J<N;J++) M[I][J]=red(diff(F[I],X[J]));
+ if(getopt(mat)==1) return M;
+ return mydet(M);
+}
+
+def hessian(F,X)
+{
+ X=ltov(X);
+ N=length(X);
+ M=newmat(N,N);
+ for(I=0;I<N;I++){
+ G=red(diff(F,X[I]));
+ for(J=0;J<N;J++) M[I][J]=red(diff(G,X[J]));
+ }
+ if(getopt(mat)==1) return M;
+ return mydet(M);
+}
+
+def wronskian(F,X)
+{
+ N=length(F);
+ M=newmat(N,N);
+ for(I=0;F!=[];F=cdr(F),I++){
+ M[I][0]=car(F);
+ for(J=1;J<N;J++) M[I][J]=red(diff(M[I][J-1],X));
+ }
+ if(getopt(mat)==1) return M;
+ return mydet(M);
+}
+
+def adj(P,L)
+{
+ if(type(P) == 4)
+#ifdef USEMODULE
+ return map(os_md.adj,mtranspose(P),L);
+#else
+ return map(adj,mtranspose(P),L);
+#endif
+ if(type(L) == 4 && type(L[0]) == 4)
+#ifdef USEMODULE
+ return fmult(os_md.adj,P,L,[]);
+#else
+ return fmult(adj,P,L,[]);
+#endif
+ L = vweyl(L);
+ X = L[0]; DX = L[1];
+ P = R = subst(P, DX, -DX);
+ for(I = 1; (R = mydiff(mydiff(R, X), DX)/I) != 0 && I < 100; I++)
+ P = radd(P,R);
+ return P;
+}
+
+def laplace1(P,L)
+{
+ if(type(L) == 4 && type(L[0]) == 4)
+#ifdef USEMODULE
+ return fmult(os_md.laplace,P,L,[]);
+#else
+ return fmult(laplace,P,L,[]);
+#endif
+ L = vweyl(L);
+ X = L[0]; DX = L[1];
+ P = adj(P, L);
+ return subst(P,X,o_1,DX,X,o_1,DX);
+}
+
+def laplace(P,L)
+{
+ if(type(L) == 4 && type(L[0]) == 4)
+#ifdef USEMODULE
+ return fmult(os_md.laplace1,P,L,[]);
+#else
+ return fmult(laplace1,P,L,[]);
+#endif
+ L = vweyl(L);
+ X = L[0]; DX = L[1];
+ P = adj(P, L);
+ return subst(P,X,o_1,DX,-X,o_1,-DX);
+}
+
+def mce(P,L,V,R)
+{
+ L = vweyl(L);
+ X = L[0]; DX = L[1];
+ P = sftexp(laplace1(P,L),L,V,R);
+ return laplace(P,L);
+}
+
+def mc(P,L,R)
+{
+ return mce(P,L,0,R);
+}
+
+def rede(P,L)
+{
+ Q = ltov(fctr(nm(red(P))));
+ P = 1;
+ if(type(L) < 4)
+ L = [L];
+ if(type(L[0]) < 4)
+ L = [L];
+ for( ; L != []; L = cdr(L)){
+ DX = vweyl(car(L))[1];
+ for(I = 1; I < length(Q); I++){
+ if(mydeg(Q[I][0],DX) > 0){
+ P *= (Q[I][0])^(Q[I][1]);
+ Q[I]=[1,0];
+ }
+ }
+ }
+ return P;
+}
+
+def ad(P,L,R)
+{
+ L = vweyl(L);
+ DX = L[1];
+ K = mydeg(P,DX);
+ S = mycoef(P,0,DX);
+ Q = 1;
+ for(I=1; I <= K;I++){
+ Q = muldo(Q,DX-R,L);
+ S = radd(S,mycoef(P,I,DX)*Q);
+ }
+ return S;
+}
+
+def add(P,L,R)
+{
+ return rede(ad(P,L,R),L);
+}
+
+
+def vadd(P,L,R)
+{
+ L = vweyl(L);
+ if(type(R) != 4)
+ return 0;
+ N = length(R);
+ DN = 1; Ad = PW = 0;
+ for( ; R != []; R = cdr(R), PW++){
+ DN *= (T=1-car(R)[0]*L[0]);
+ Ad = Ad*T-car(R)[1]*x^PW;
+ }
+ Ad /= DN;
+ return add(P,L,Ad);
+}
+
+def addl(P,L,R)
+{
+ return laplace1(add(laplace(P,L),L,R),L);
+}
+
+def cotr(P,L,R)
+{
+ L = vweyl(L);
+ X = L[0]; DX = L[1];
+ T = 1/mydiff(P,DX);
+ K = mydeg(P,DX);
+ S = mysubst(mycoef(P,0,DX), [X, R]);
+ Q = 1;
+ for(I = 1; I <= K; I++){
+ Q = muldo(Q, K*DX, L);
+ S = radd(S,mysubst(mycoef(P,I,DX), [X, R])*Q);
+ }
+}
+
+def rcotr(P,L,R)
+{
+ return rede(cotr(P,L,R), L);
+}
+
+def muledo(P,Q,L)
+{
+ if(type(Q)>3)
+#ifdef USEMODULE
+ return mmulbys(os_md.muledo,P,Q,[L]);
+#else
+ return mmulbys(muledo,P,Q,[L]);
+#endif
+ R = P*Q;
+ L = vweyl(L);
+ X = L[0]; DX = L[1];
+ for(I = F = 1; I < 100; I++){
+ P = mydiff(P,DX);
+ if(P == 0)
+ break;
+ Q = myediff(Q,X);
+ if(Q == 0)
+ break;
+ F = rmul(F,I);
+ R = radd(R,P*Q/F);
+ }
+ return R;
+}
+
+
+#if 1
+def mulpdo(P,Q,L)
+{
+ if(type(Q)>3)
+#ifdef USEMODULE
+ return mmulbys(os_md.mulpdo,P,Q,[L]);
+#else
+ return mmulbys(mulpdo,P,Q,[L]);
+#endif
+ if(type(Lim=getopt(lim))!=1) Lim=100;
+ M = vweyl(car(L)); X= M[0]; DX = M[1];
+ L = cdr(L);
+ R = 0;
+ for(I = 0; Q != 0 && I <= Lim; I++){
+ if(I>Lim){
+ mycat(["Over", Lim,"derivations!"]);
+ break;
+ }
+ if(I > 0)
+ P /= I;
+ if(length(L)==0)
+ R = radd(R,P*Q);
+ else
+ R = radd(R,mulpdo(P,Q,L));
+ if(X==0) break;
+ P = mydiff(P,DX);
+ if(P == 0)
+ break;
+ Q = mydiff(Q,X);
+ }
+ if(I>Lim) mycat(["Over", Lim,"derivations!"]);
+ return R;
+}
+
+#else
+def mulpdo(P,Q,L);
+{
+ if(type(Q)>3)
+#ifdef USEMODULE
+ return mmulbys(os_md.mulpdo,P,Q,[L]);
+#else
+ return mmulbys(mulpdo,P,Q,[L]);
+#endif
+ if(type(Lim=getopt(lim))!=1) Lim=100;
+ N = length(L);
+ VO = newvect(2*N);
+ VN = newvect(2*N);
+ for(I = J = 0; I < N; J += 2, I++){
+ M = vweyl(L[I]);
+ P = subst(P, VO[J]=M[0], VN[J]=strtov("o_"+rtostr(V[J])),
+ VO[J+1]=M[1], VN[J+1] = strtov("o_"+rtostr(V[J+1])));
+ }
+ for(PQ = P*Q, I = 0; I < 2*N; I += 2){
+ for(R = PQ, J = 1; J < Lim; J++){
+ R = mydiff(R, VN[I+1])/J;
+ if(R == 0)
+ break;
+ R = mydiff(R, VO[I]);
+ if(R == 0)
+ break;
+ PQ = radd(PQ,R);
+ }
+ if(I==Lim) mycat(["Over", Lim,"derivations!"]);
+ PQ = red(subst(PQ,VN[I],VO[I],VN[I+1],VO[I+1]));
+ }
+}
+#endif
+
+def transpdosub(P,LL,K)
+{
+ Len = length(K)-1;
+ if(Len < 0 || P == 0)
+ return P;
+ KK=K[Len];
+ if(type(KK)==4){
+ KK0=KK[0]; KK1=KK[1];
+ }else{
+ L = vweyl(LL[Len]);
+ KK0=L[1]; KK1=K[Len];
+ }
+ Deg = mydeg(P,KK0);
+ K1 = reverse(cdr(reverse(K)));
+ R = transpdosub(mycoef(P,0,KK0),LL,K1);
+ for(I = M = 1; I <= Deg ; I++){
+ M = mulpdo(M,KK1,LL);
+ S = mycoef(P,I,KK0);
+ if(Len > 0)
+ S = transpdosub(S,LL,K1);
+ R = radd(R,mulpdo(S,M,LL));
+ }
+ return R;
+}
+
+def transpdo(P,LL,K)
+{
+ if(type(K[0]) < 4)
+ K = [K];
+ Len = length(K)-1;
+ K1=K2=[];
+ if(type(LL)!=4) LL=[LL];
+ if(type(LL[0])!=4) LL=[LL];
+ if(getopt(ex)==1){
+ for(LT=LL, KT=K; KT!=[]; LT=cdr(LT), KT=cdr(KT)){
+ L = vweyl(LL[J]);
+ K1=cons([L[0],car(KT)[0]],K1);
+ K2=cons([L[1],car(KT)[1]],K2);
+ }
+ K2=append(K1,K2);
+ }else{
+ for(J = length(K)-1; J >= 0; J--){
+ L = vweyl(LL[J]);
+ if(L[0] != K[J][0])
+ K1 = cons([L[0],K[J][0]],K1);
+ K2 = cons(K[J][1],K2);
+ }
+ P = mulsubst(P, K1);
+ }
+ return transpdosub(P,LL,K2);
+}
+
+def translpdo(P,LL,M)
+{
+ S=length(LL);
+ L0=newvect(S);L1=newvect(S);
+ K=newvect(S);
+ for(J=0;J<S;J++){
+ L = vweyl(LL[J]);
+ L0[J]=L[0];
+ L1[J]=L[1];
+ }
+ K=rmul(M,L0);
+ for(T=[],J=0;J<S;J++)
+ T=cons([L0[J],K[J]],T);
+ P=mulsubst(P,T);
+ K=rmul(myinv(M),L1);
+ for(T=[],J=0;J<S;J++)
+ T=cons([L1[J],K[J]],T);
+ return mulsubst(P,T);
+}
+
+/*
+ return [R, M, S] : R = M*P - S*Q
+ deg(R,X) < deg(Q,X)
+*/
+def rpdiv(P,Q,X)
+{
+ if(P == 0)
+ return [0,1,0];
+ DQ = mydeg(Q,X);
+ CO = mycoef(Q,DQ,X);
+ S = 0;
+ while((DP = mydeg(P,X)) >= DQ){
+ R = mycoef(P,DP,X)/CO;
+ S = radd(S,R*X^(DP-DQ));
+ P = radd(P, -R*Q*X^(DP-DQ));
+ }
+ Lcm = lcm(dn(S),dn(P));
+ Gcd = gcd(nm(S),nm(P));
+ return [red(P*Lcm/Gcd), red(Lcm/Gcd),red(S*Lcm/Gcd)];
+}
+
+def texbegin(T,S)
+{
+ if(type(Opt=getopt(opt))==7) Opt="["+Opt+"]\n";
+ else Opt="\n";
+ return "\\begin{"+T+"}"+Opt+S+"%\n\\end{"+T+"}\n";
+}
+
+def mygcd(P,Q,L)
+{
+ if((Dvi=getopt(dviout))==3 || Dvi==-3){ /* dviout=3 */
+ if((Rev=getopt(rev))!=1) Rev=0;
+ R=mygcd(P,Q,L|rev=Rev);
+ if(type(L)<2) Var=0;
+ else if(type(L)==2){
+ Val=L;L=[0,L];
+ }else if(type(L)==4){
+ L=vweyl(L);
+ Var=[[L[1],"\\partial"]];
+ }
+ S=mat([P],[Q]);T=mat([R[0]],[0]);
+ M=mat([R[1],R[2]],[R[3],R[4]]);
+ if(type(Val)==4)
+ N=mdivisor(M,L|trans=1)[1];
+ else N=myinv(M);
+ Tb=str_tb(mtotex(S|var=Var),0);
+ str_tb("&="+mtotex(N|var=Var)+mtotex(T|var=Var)+",\\\\\n",Tb);
+ str_tb(mtotex(T|var=Var),Tb);
+ str_tb("&="+mtotex(M|var=Var)+mtotex(S|var=Var)+".",Tb);
+ Out=str_tb(0,Tb);
+ if(Dvi<0) return Out;
+ dviout(Out|eq="align*");
+ return 1;
+ }
+ if((type(Dvi)==1||Dvi==0) && getopt(rev)!=1) V=[[P,Q]];
+ else V=0;
+ if(L==0){ /* integer case */
+ if(type(P) > 1 || type(Q) > 1 || Q==0 /* P <= 0 || Q <= 0 */
+ || dn(P) > 1 || dn(Q) > 1)
+ return 0;
+ CPP = CQQ = 1; CQP = CPQ = 0;
+ P1 = P; Q1 = Q;
+ /* P1 = CPP*P + CPQ*Q
+ Q1 = CQP*P + CQQ*Q */
+ while(Q1 != 0){
+ Div1 = idiv(P1,Q1); Div2 = irem(P1,Q1);
+ if(type(V)==4) V=cons([Div1,Div2],V);
+ P1 = Q1 ; Q1 = Div2;
+ TP = CQP; TQ = CQQ;
+ CQP = CPP-Div1*CQP;
+ CQQ = CPQ-Div1*CQQ;
+ CPP = TP; CPQ = TQ;
+ }
+ if(V!=0){
+ V=reverse(V);
+ if((DVI=abs(Dvi))==0) return V;
+ PT=P;QT=Q;
+ if(DVI==1 || DVI==2){
+ Tb=str_tb(0,0);
+ for(C=0,V=cdr(V);V!=[];V=cdr(V)){
+ T=car(V);
+ if(C++) str_tb(texcr(11),Tb);
+ if(DVI==1){
+ Qs=rtostr(QT);
+ if(QT<0) Qs="("+Qs+")";
+ if(T[1]>0) Qs=Qs+"+";
+ if(T[1]!=0) Qs=Qs+rtostr(T[1]);
+ str_tb(rtostr(PT)+"&="
+ +rtostr(T[0])+"\\times"+Qs,Tb);
+ }else{
+ N=mat([T[0],1],[1,0]);
+ if(C==1){
+ str_tb(S0=mtotex(mat([PT],[QT])),Tb);
+ M=N;
+ }
+ str_tb("&=",Tb);
+ if(C>1) str_tb(mtotex(M),Tb);
+ str_tb(mtotex(N),Tb);
+ str_tb(S=mtotex(mat([QT],[T[1]])),Tb);
+ if(C>1){
+ str_tb("=",Tb);
+ str_tb(mtotex(M=M*N),Tb);
+ str_tb(S,Tb);
+ }
+ }
+ PT=QT;QT=T[1];
+ }
+ if(DVI==2){
+ str_tb(texcr(43)+S+"&=",Tb);
+ str_tb(mtotex(myinv(M)),Tb);
+ str_tb(S0,Tb);
+ }
+ Out=str_tb(0,Tb);
+ if(Dvi>0){
+ dviout(Out|eq="align*");
+ return 1;
+ }
+ return Out;
+ }
+ }
+ if(P1<0) return [-P1,-CPP,-CPQ,CQP,CQQ];
+ return [P1, CPP, CPQ, CQP, CQQ];
+ }
+ if(type(L) == 2) /* polynomical case */
+ L = [0,L];
+ if(getopt(rev)==1 && L[0]!=0){
+ R=mygcd(adj(P,L),adj(Q,L),L);
+ return [adj(R[0],L),adj(R[1],L),adj(R[2],L),adj(R[3],L),adj(R[4],L)];
+ }
+ if(type(P) == 3)
+ P = red(P);
+ if(type(Q) == 3)
+ Q = red(Q);
+ CP=newvect(2,[1/dn(P),0]); CQ=newvect(2,[0,1/dn(Q)]);
+ P=PT=nm(P); Q =QT=nm(Q);
+ L = vweyl(L);
+ while(Q != 0){
+ R = divdo(P,Q,L);
+ if(type(V)==4) V=cons(R,V);
+/* R[1] = R[2]*P - R[0]*Q
+ = R[2]*(CP[0]*P0+CP[1]*Q0) - R[0]*(CQ[0]*P0+CQ[1]*Q0) */
+/*
+ P(n) |0 1 | P(n-1)
+ = | |
+ R[1] |R[2] -R[0]| P(n)
+ P(n+1) = R[1], P(n) = P, P(n-1) = Q
+*/
+ P = Q;
+ Q = R[1];
+ {
+ CT = dupmat(CQ);
+ CQ = [R[2]*CP[0]-muldo(R[0],CQ[0],L),
+ R[2]*CP[1]-muldo(R[0],CQ[1],L)];
+ CP = CT;
+ }
+ }
+ if(V!=0){
+ V=reverse(V);
+ if((DVI=abs(Dvi))==0) return V;
+ if(type(L[0])<1) Var=L[1];
+ else Var=[L[1],"\\partial"];
+ if(DVI==1 || DVI==2){
+ Tb=str_tb(0,0);
+ PT=car(V)[0];QT=car(V)[1];
+ for(C=0,V=cdr(V);V!=[];V=cdr(V)){
+ T=car(V);
+ if(C++) str_tb(texcr(11),Tb);
+ if(DVI==1){
+ if(T[2]!=1){
+ str_tb(monototex(T[2]),Tb);
+ str_tb("(",Tb);
+ str_tb(fctrtos(PT|var=Var,TeX=2),Tb);
+ str_tb(")&=",Tb);
+ }else{
+ str_tb(fctrtos(PT|var=Var,TeX=2),Tb);
+ str_tb("&=",Tb);
+ }
+ str_tb("(",Tb);
+ str_tb(fctrtos(T[0]|var=Var,TeX=2),Tb);
+ str_tb(")(",Tb);
+ str_tb(fctrtos(QT|var=Var,TeX=2),Tb);
+ if(T[1]!=0){
+ str_tb(")+(",Tb);
+ str_tb(fctrtos(T[1]|var=Var,TeX=2),Tb);
+ }
+ str_tb(")",Tb);
+ }else{
+ N=mat([red(T[0]/T[2]),1],[1,0]);
+ if(C==1){
+ str_tb(S0=mtotex(mat([PT],[QT])|var=Var),Tb);
+ M=N;
+ }
+ str_tb("&=",Tb);
+ if(C>1) str_tb(mtotex(M),Tb);
+ str_tb(mtotex(N|var=Var),Tb);
+ str_tb(S=mtotex(mat([QT],[T[1]])|var=Var),Tb);
+ if(C>1){
+ str_tb("=",Tb);
+ str_tb(mtotex(M=muldo(M,N,L)|var=Var),Tb);
+ str_tb(S,Tb);
+ }
+ }
+ PT=QT;QT=T[1];
+ }
+ if(DVI==2){
+ FT=fctr(PT);
+ for(R=1;FT!=[];FT=cdr(FT)){
+ if(mydeg(car(FT)[0],L[1])<1)
+ for(J=car(FT)[1];J>0;J--) R*=car(FT)[0];
+ }
+ if(R!=1){
+ str_tb(texcr(79),Tb);
+ M=muldo(M,mat([R,0],[0,1]),L);
+ str_tb(mtotex(M|var=Var),Tb);
+ str_tb(S=mtotex(mat([PT/R],[QT])|var=Var),Tb);
+ }
+ str_tb(texcr(43)+S+"&=",Tb);
+ if(type(Var)==4){
+ N=mdivisor(M,L|trans=1);
+ N=N[1];
+ }else
+ N=myinv(M);
+ str_tb(mtotex(N|var=Var),Tb);
+ str_tb(S0,Tb);
+ }
+ Out=str_tb(0,Tb);
+ if(Dvi>0){
+ dviout(Out|eq="align*");
+ return 1;
+ }
+ return Out;
+ }
+ }
+ Q = rede(P,L);
+ R = red(P/Q);
+ return [Q,red(CP[0]/R),red(CP[1]/R),red(CQ[0]/R),red(CQ[1]/R)];
+}
+
+def mylcm(P,Q,L)
+{
+ Rev=(getopt(rev)==1)?1:0;
+ if(Rev==1){
+ P=adj(P); Q=adj(Q);
+ }
+ R = mygcd(P,Q,L);
+ S=(type(L)<=2)?R[3]*P:muldo(R[3],P,L);
+ S = nm(S);
+ if(type(S) <= 1 && type(L) <= 1){
+ if(S<0) S = -S;
+ return S;
+ }
+ if(type(L) == 2)
+ return easierpol(S,L);
+ S=rede(easierpol(S,L[1]),L);
+ return (Rev==1)?adj(S):S;
+}
+
+def sftpexp(P,LL,F,Q)
+{
+ if(type(LL[0]) < 4)
+ LL = [LL];
+ for(L0=L1=[],LT=LL;LT!=[];LT=cdr(LT)){
+ W=vweyl(car(LT));
+ L0=cons(W,L0);
+ D=mydiff(F,W[0]);
+ if(D!=0) L1=cons(W[1]+Q*D/F,L1);
+ else L1=cons(W[1],L1);
+ }
+ return rede(transpdosub(P,L0,L1),L0);
+}
+
+def applpdo(P,F,LL)
+{
+ if(type(F)>3)
+#ifdef USEMODULE
+ return mmulbys(os_md.applpdo,P,F,[LL]);
+#else
+ return mmulbys(applpdo,P,F,[LL]);
+#endif
+ L = vweyl(LL[0]);
+ LL = cdr(LL);
+ Deg = deg(P,L[1]);
+ S = F;
+ for(I = R = 0; I <= Deg ; I++){
+ if(I > 0)
+ S = mydiff(S,L[0]);
+ if(LL == [])
+ R = radd(R,mycoef(P,I,L[1])*S);
+ else
+ R = radd(R,applpdo(mycoef(P,I,L[1]), S, LL));
+ }
+ return R;
+}
+
+def tranlpdo(P,L,M)
+{
+ N = length(L);
+ R = size(M);
+ if(R[0] != N || R[1] != N){
+ print("Strange size");
+ return;
+ }
+ InvM = M;
+ if(InvM[1] == 0){
+ print("Not invertible");
+ return;
+ }
+ XL = newvector(N);
+ DL = newvector(N);
+ for(I = 0; I < 0; I++){
+ R = vweyl(L[I]);
+ XL[I] = R[0];
+ DL[I] = R[1];
+ }
+ for(I = 0; I < N; I++){
+ for(J = XX = D0 = 0; J < N; J++){
+ XX = radd(XX,M[I][J]*XL[J]);
+ DD = radd(DD, red(InvM[0][I][J]/InvM[1])*DL[J]);
+ P = mysubst(P,[[XL[I],XX],[DL[I],DD]]);
+ }
+ }
+ return P;
+}
+
+def divdo(P,Q,L)
+{
+ if(L==0){
+ R=P-idiv(P,Q)*Q;
+ if(R<0){
+ if(Q>0) R+=Q;
+ else R-=Q;
+ }
+ return [(P-R)/Q,R,1];
+ }
+ L = vweyl(L);
+ if(getopt(rev)==1){
+ R=divdo(adj(P,L),adj(Q,L),L);
+ return [adj(R[0],L),adj(R[1],L),R[2]];
+ }
+ X = L[0]; DX = L[1];
+ S = 0;
+ M = 1;
+ I = mydeg(Q,DX);
+ CQ = mycoef(Q,I,DX);
+ while((J=mydeg(P,DX)) >= I){
+ C = mycoef(P,J,DX);
+ SR = red(C/CQ);
+ if(dn(SR) != 1){
+ M *= dn(SR);
+ P *= dn(SR);
+ S *= dn(SR);
+ SR = nm(SR);
+ }
+ P -= muldo(SR*(DX)^(J-I),Q,L);
+ S += SR*(DX)^(J-I);
+ }
+ return [S,P,M];
+}
+
+def qdo(P,Q,L)
+{
+ L = vweyl(L); DX = L[1]; OD = deg(P,DX);
+ V = newvect(OD+1);
+ for(I = 0; I <= OD; I++){
+ if(I)
+ Q = muldo(DX,Q,L);
+ S = divdo(Q,P,L);
+ V[I] = S[1]*DX-S[2]*zz^I;
+ }
+ for(K = [], I = OD; I >= 0; I--)
+ K = cons(DX^(I+1), K);
+ R = lsol(V,K);
+ S = length(R);
+ for(I = P1 = 0; I < S; I++){
+ if(type(R[I]) < 4 && mydeg(R[I],DX) == 0 && R[I] != 0
+ && (mydeg(R[I],zz) <= mydeg(P,DX)))
+ P1 = R[I];
+ else if(type(R[I]) == 4 && R[I][0] == DX)
+ P2 = R[I][1];
+ }
+ T=fctr(P1);
+ for(I=0, S=length(T), P1=1; I<S; I++){
+ if(mydeg(T[I][0],zz) > 0)
+ P1 *= T[I][0]^(T[I][1]);
+ }
+ return subst([P1,P2],zz,DX);
+}
+
+def sqrtdo(P,L)
+{
+ L = vweyl(L);
+ P = toeul(P,L,0);
+ V = -1;
+ for(R = 0, Ord = mydeg(P,L[1]); Ord >= 0; Ord--){
+ Q = coef(P,Ord,L[1]);
+ M = mydeg(Q,L[0]);
+ N = mymindeg(Q,L[0]);
+ if(V < 0)
+ V = M+N;
+ else if(V != M+N){
+ print("Cannot be transformed!");
+ return;
+ }
+ Q = tohomog(red(Q/L[0]^N), [L[0]], z_z);
+ if(irem(Ord,2))
+ B = x-z_z;
+ else
+ B = x+z_z;
+ Q = substblock(Q,x,B,z_zz);
+ if(mydeg(Q,x) > 0){
+ print("Cannot be transformed!");
+ return;
+ }
+ R += mysubst(Q,[z_zz,x])*L[1]^Ord;
+ }
+ return fromeul(R,L,0);
+}
+
+def ghg(A,B)
+{
+ R = dx;
+ while(length(B)>0){
+ R = muldo(x*dx+car(B),R,[x,dx]);
+ B = cdr(B);
+ }
+ T = 1;
+ while(length(A)>0){
+ T = muldo(x*dx+car(A),T,[x,dx]);
+ A = cdr(A);
+ }
+ return R-T;
+}
+
+def ev4s(A,B,C,S,T)
+{
+ R4 = x^2*(x-1)^2;
+ R3 = x*(x-1)*((2*A-2*B-8)*x-2*A+5);
+ R2 = (-3/2*(A^2+B^2)+3*A*B+9*A-9*B-29/2+1/4*(S^2+T^2))*x^2
+ +(5*A^2/2-13*A-3*A*B+B^2/2+7*B-C^2+C+35/2 - 1/4*(S^2+T^2))*x
+ - (2*A+2*C-5)*(2*A-2*C-3)/4;
+ R1 = 1/4*(A-B-2)*(2*A^2-4*A*B-8*A+2*B^2+8*B+10-S^2-T^2)*x
+ +15/4+3*B^2/4-C^2/2+11*A^2/4 - 11*A/2+3*B+B*C-7*A*B/2+C/2-A*B^2/2
+#if 1
+ + A^2*B
+#endif
+ - B*C^2 - A^3/2+(2*A-3)*(S^2+T^2)/8;
+/* OK? for the above term added */
+ R0 = -(A-B-1-S)*(A-B-1+S)*(A-B-1-T)*(A-B-1+T)/16;
+ return (R4*dx^4-R3*dx^3-R2*dx^2-R1*dx-R0);
+}
+
+def b2e(A,B,C,S,T)
+{
+ R4 = x^2*(x-1)^2;
+ R3 = x*(x-1)*(2*x-1)*(2*c-5);
+ R2 = (-6*C^2+24*C-25+1/2*S^2+1/2*T^2)*x^2
+ +(6*C^2-24*C+25-1/2*S^2-1/2*T^2-A^2+B^2+A-B)*x
+ +A^2-C^2-A+4*C-15/4;
+ R1 = (2*C-3)*(2*C^2-6*C+5-1/2*S^2-1/2*T^2)*x
+ +(2*C-3)*(-C^2+3*C+1/2*A^2-1/2*B^2+1/2*B-1/2*A-5/2+1/4*S^2+1/4*T^2);
+ R0 = -(2-2*C+S+T)*(2-2*C-S-T)*(2-2*C+S-T)*(2-2*C-S+T)/16;
+ return (R4*dx^4-R3*dx^3-R2*dx^2-R1*dx-R0);
+}
+
+
+/*
+ T^m = T(T-1)....(T-m+1)
+ f(t) -> g(t)
+
+ f(t) = a_mt^m + ... + a_1t+a_0
+ g(x*dx) = a_m*x^m*dx^m + ... + a_1*x*dx+a_0
+
+ ret: x(x-1)...(x-i+1)
+ */
+def sftpow(X,I)
+{
+ R = 1;
+ for(J=0;J<I;J++)
+ R *= X-J;
+ return(R);
+}
+
+/*
+ ret: x(x+K)(x+2*k)...(x+(i-1)*k)
+*/
+def sftpowext(X,I,K)
+{
+ R = 1;
+ for(J=0;J<I;J++)
+ R *= X+K*J;
+ return(R);
+}
+
+def polinsft(F,A)
+{
+ R = 0;
+ while(F != 0){
+ D = mydeg(F,A);
+ C = mycoef(F,D,A);
+ R += C*A^D;
+ F -= C*sftpow(A,D);
+ }
+ return R;
+}
+
+def pol2sft(F,A)
+{
+ S=getopt(sft);
+ if(type(S)<0 || type(S)>2) S=1;
+ R = 0;
+ for(I = mydeg(F,A); I >= 0; I--)
+ R = R*(A-I*S) + mycoef(F,I,A);
+ return R;
+}
+
+def binom(P,N)
+{
+ if(type(N)!=1 || N<=0) return 1;
+ for(S=1;N>0;N--,P-=1) S*=P/N;
+ return red(S);
+}
+
+def expower(P,R,N)
+{
+ if(type(N)!=1 || N<0) return 0;
+ for(S=S0=K=1;K<=N;K++,R-=1){
+ S0*=P*R/K;S+=S0;
+ }
+ return red(S);
+}
+
+def seriesHG(A,B,X,N)
+{
+ if(N==0) return 1;
+ if(type(N)!=1 || N<0) return 0;
+ if(type(X)<4){
+ for(K=0,S=S0=1;K<N;K++){
+ for(T=A; T!=[]; T=cdr(T)) S0*=car(T)+K;
+ for(T=B; T!=[]; T=cdr(T)) S0/=car(T)+K;
+ S0=red(S0*X/(K+1));
+ DN=dn(S0);
+ S=red((red(S*DN)+nm(S0))/DN);
+ }
+ return S;
+ }
+ S=0;
+ for(K=0;K<=N;K++){
+ for(I=0;I<=N-K;I++){
+ C=1/sftpowext(1,I,1)/sftpowext(1,J,1);
+ for(T=A[0];T!=[];T=cdr(T)) C*=sftpowext(car(T),I+K,1);
+ for(T=A[1];T!=[];T=cdr(T)) C*=sftpowext(car(T),I,1);
+ for(T=A[2];T!=[];T=cdr(T)) C*=sftpowext(car(T),K,1);
+ for(T=B[0];T!=[];T=cdr(T)) C/=sftpowext(car(T),I+K,1);
+ for(T=B[1];T!=[];T=cdr(T)) C/=sftpowext(car(T),I,1);
+ for(T=B[2];T!=[];T=cdr(T)) C/=sftpowext(car(T),K,1);
+ S+=red(C*X[0]^I*X[1]^K);
+ }
+ }
+ return S;
+}
+
+def evalred(F)
+{
+ Opt=getopt(opt);
+ if(type(Opt)!=4){
+ Opt=[];
+ }else if(length(Opt)==2 && type(Opt[0])!=4) Opt=[Opt];
+ for(;;){
+ G=mysubst(F,[[tan(0),0],[asin(0),0],[atan(0),0],[sinh(0),0],[tanh(0),0],
+ [log(1),0],[cosh(0),1],[exp(0),1]]);
+ for(Rep=Opt; Rep!=[]; Rep=cdr(Rep))
+ G=subst(G,car(Rep)[0],car(Rep)[1]);
+ Var=vars(G);
+ for(V=Var; V!=[]; V=cdr(V)){
+ if(!(VV=args(CV=car(V)))) continue;
+ if((functor(CV)==sin||functor(CV)==cos)){
+ P=2*red(VV[0]/@pi);
+ if(functor(CV)==sin) P=1-P;
+ if(isint(P)){
+ if(iand(P,1)) G=subst(G,CV,0);
+ else if(!iand(P,3)) G=subst(G,CV,1);
+ else G=subst(G,CV,-1);
+ continue;
+ }
+ if(isint(P*=3/2)){
+ if(iand(P,3)==1) G=subst(G,CV,1/2);
+ else G=subst(G,CV,-1/2);
+ }
+ }
+ for(;VV!=[];VV=cdr(VV))
+ if(car(VV)!=(TV=evalred(car(VV)))) G=subst(G,car(VV),TV);
+ if(functor(CV)!=pow || (args(CV)[0])!=1) continue;
+ G=subst(G,CV,1);
+ }
+ if(G==F) return F;
+ F=G;
+ }
+}
+
+def seriesMc(F,N,V)
+{
+ if(type(V)<4) V=[V];
+ V=reverse(V);
+ L=length(V);
+ if(type(Opt=getopt(evalopt))!=4) Opt=[];
+ P=newvect(L);
+ G=newvect(L+1);
+ G[0]=F;
+ for(I=0;I<L;I++)
+ G[I+1]=eval(evalred(subst(G[I],V[I],0)|opt=Opt));
+ R=G[L];
+ for(;;){
+ for(M=0,I=0;I<L;I++){
+ M+=P[I];
+ if(M==N) break;
+ }
+ if(M<N){
+ P[L-1]++;
+ G[L-1]=mydiff(G[L-1],V[L-1]);
+ G[L]=eval(evalred(mysubst(G[L-1],[V[L-1],0])|opt=Opt));
+ }else{
+ if(I--==0) break;
+ P[I]++;
+ G[I]=mydiff(G[I],V[I]);
+ while(I++<L){
+ G[I]=eval(evalred(mysubst(G[I-1],[V[I-1],0])|opt=Opt));
+ if(I<L) P[I]=0;
+ }
+ }
+ K=1;
+ for(I=0;I<L;I++) K*=V[I]^P[I]/fac(P[I]);
+ R+=G[L]*K;
+ }
+ return R;
+}
+
+def seriesTaylor(F,N,V)
+{
+ G=F;
+ if(isvar(V)) V=[V];
+ if(length(V)==2 && type(car(V))!=4 && !isvar(V[1])) V=[V];
+ for(V0=V1=[];V!=[];V=cdr(V)){
+ if(type(T=car(V))!=4) T=[T];
+ V0=cons(X=car(T),V0);
+ if(length(T)==1 || T[1]==0){
+ V1=cons(X,V1);continue;
+ }
+ S=my_tex_form(-T[1]);
+ if(str_char(S,0,"-")!=0) S="+"+S;
+ S="("+my_tex_form(X)+S+")";
+ V1=cons([X,S],V1);
+ F=red(subst(F,T[0],T[0]+T[1]));
+ }
+ V0=reverse(V0);V1=reverse(V1);
+ F=seriesMc(F,N,V0|option_list=getopt());
+ if(getopt(frac)==0) F=frac2n(F);
+ T=getopt(dviout);
+ if(type(T)!=1) T=0;
+ F=fctrtos(F|var=V1,rev=1,TeX=(T==0||T==2)?2:3);
+ if(getopt(small)==1) F=str_subst(F,"\\frac{","\\tfrac{");
+ if(T<0 || T==1) F="\\begin{align}\\begin{split}\n"+
+ my_tex_form(G)+"&="+F+"+\\cdots\n\\end{split}\\end{align}\n";
+ if(T==1) dviout(F);
+ else if(T==1) dviout(F|eq=4);
+ return F;
+}
+
+def toeul(F,L,V)
+{
+ L = vweyl(L);
+ X = L[0]; DX = L[1];
+ I = mydeg(F,DX);
+ if(V == "infty"){
+ for(II=I; II>=0; II--){
+ J = mydeg(P=mycoef(F,I,DX),X);
+ if(II==I) S=II-J;
+ else if(P!=0 && II-J>S) S=II-J;
+ }
+ F *= X^S;
+ R = 0;
+ for( ; I >= 0; I--)
+ R += red((mysubst(mycoef(F,I,DX),[X,1/X])*(x*DX)^I));
+ return(subst(pol2sft(R,DX),DX,-DX));
+ }
+ F = subst(F,X,X+V);
+ for(II=I; II>=0; II--){
+ J = mymindeg(P=mycoef(F,II,DX),X);
+ if(II==I) S=II-J;
+ else if(P!=0 && II-J>S) S=II-J;
+ }
+ F *= X^S;
+ R = 0;
+ for( ; I >= 0; I--)
+ R += (red(mycoef(F,I,DX)/X^I))*DX^I;
+ return pol2sft(R,DX);
+}
+
+/*
+def topoldif(P,F,L)
+{
+ L = vweyl(L);
+ P = nm(red(P));
+ while(deg(P,L[1]) > 0){
+ R = coef(P,0,L[0]);
+ Q = red((P-R)/(F*L[0]);
+ P = nm(Q)*zz+F*R*dn(Q);
+ }
+}
+*/
+
+def fromeul(P,L,V)
+{
+ if(P == 0)
+ return 0;
+ L = vweyl(L);
+ X = L[0]; DX = L[1];
+ I = mydeg(P,DX);
+ if(V == "infty"){
+ P = subst(P,DX,-DX);
+ J = mydeg(P,X);
+ P = red(mysubst(P,[X,1/X])*X^J);
+ }
+ R = mycoef(P,0,DX);
+ S = 1;
+ for(S = J = 1; J <= I; J++){
+ S = DX*(S*X + mydiff(S,DX));
+ R += mycoef(P,J,DX)*S;
+ }
+ while(mycoef(R,0,X) == 0)
+ R = tdiv(R,X);
+ if(V != "infty" && V != 0)
+ R = mysubst(R,[X,X-V]);
+ return R;
+}
+
+def sftexp(P,L,V,N)
+{
+ L = vweyl(L); DX = L[1];
+ P = mysubst(toeul(P,L,V),[DX,DX+N]);
+ return fromeul(P,L,V);
+}
+
+
+def fractrans(P,L,N0,N1,N2)
+{
+ L = vweyl(L);
+ if(N2 != "infty"){
+ if(N0 == "infty")
+ N0 = 0;
+ else
+ N0 = red(1/(N0-N2));
+ if(N1 == "infty")
+ N1 = 0;
+ else
+ N1 = red(1/(N1-N2));
+ P = mysubst(P,[L[0],L[0]+N2]);
+ P = fromeul(toeul(P,L,"infty"),L,0);
+ }
+ if(N0 != 0){
+ P = mysubst(P,[L[0],L[0]+N0]);
+ N1 -= N0;
+ }
+ if(N1 != 1)
+ P = mysubst(P,[[L[0],L[0]/N1],[L[1],L[1]*N1]]);
+ return P;
+}
+
+def soldif(P,L,V,Q,N)
+{
+ L = vweyl(L); X = L[0]; DX = L[1];
+ P = mysubst(toeul(P,L,V),[DX,DX+Q]);
+ DEG = mydeg(P,X);
+ P0 = newvect(DEG+1);
+ for(I = 0; I <= DEG; I++)
+ P0[I] = coef(P,I,X);
+ if(P0[0] == 0)
+ return 0;
+ if(subst(P0[0],DX,0) != 0){
+ mycat([Q,"is not the exponent at", V])$
+ return 0;
+ }
+ R = newvect(N+1);
+ R[0] = 1;
+ for(I = 1; I <= N; I++){
+ for(S = 0, K = 1; K <= DEG && K <= I; K++)
+ S += mysubst(P0[K],[DX,I-K])*R[I-K];
+ S = red(S);
+ M = mysubst(P0[0],[DX,I]);
+ if(M != 0){
+ R[I] = -red(S/M);
+ if(R1 != 0){
+ for(S = 0, K = 1; K <= DEG && K <= I; K++)
+ S += mysubst(P0[K],[DX,I-K])*R1[I-K] +
+ mysubst(P1[K],[DX,I-K])*R[I-K];
+ R1[I] = -red(S/M);
+ }
+ }else{
+ if(S == 0){
+ if(R1 != 0){
+ for(S = 0, K = 1; K <= DEG && K <= I; K++)
+ S += mysubst(P0[K],[DX,I-K])*R1[I-K] +
+ mysubst(P1[K],[DX,I-K])*R[I-K];
+ }
+ if(S == 0)
+ continue;
+ }
+ R1 = newvect(N+1);
+ for(K = 0; K < I; K++){
+ R1[K] = R[K];
+ R[K] = 0;
+ }
+ R1[I] = 0;
+ P1 = newvect(DEG);
+ for(K = 0; K <= DEG; K++)
+ P1[K] = mydiff(P0[K], DX);
+ M = mysubst(P1[0],[DX,I]);
+ if(M == 0){
+ cat(["multiple log at ", I])$
+ return 0;
+ }
+ R[I] = -red(S/M);
+ }
+ }
+ if(R1 != 0)
+ return [R1, R];
+ else
+ return R;
+}
+
+def chkexp(P,L,V,Q,N)
+{
+ L = vweyl(L); X = L[0]; DX = L[1];
+ P = mysubst(toeul(P,L,V),[DX,DX+Q]);
+ P = fromeul(P,L,0);
+ D = mydeg(P,DX);
+ Z = mindeg(mycoef(P,D,DX), X) - (D-N);
+ R = [];
+ for(I = 0; I < Z; I++){
+ S = mycoef(P,I,X);
+ if(S != 0){
+ for(J = mydeg(S,DX); J >= 0; J--){
+ T = mycoef(S,J,DX);
+ if(T != 0)
+ R = cons(T,R);
+ }
+ }
+ }
+ return R;
+}
+
+
+def sqrtrat(P)
+{
+ if(P==0) return 0;
+ if(type(P)==3||type(P)==2){
+ P=red(P);
+ if(imag(dn(P))!=0||imag(nm(P))!=0){
+ if(imag(dn(P))==0&&real(P)!=0){
+ F=red(imag(P)/real(P));
+ if(F==3^(1/2)||F==-3^(1/2)){
+ if(eval(real(P))<0)
+ return -real(P)+imag(P)*@i;
+ else{
+ if(eval(imag(P))>0) return imag(P)+real(P)*@i;
+ else return -imag(P)-real(P)*@i;
+ }
+ }
+ }
+ return [];
+ }
+ F=fctr(dn(P));
+ R=sqrtrat(car(F)[0]);
+ for(F=cdr(F);F!=[];F=cdr(F)){
+ if(!iand(car(F)[1],1)) R*=car(F)[0]^(car(F)[1]/2);
+ else return [];
+ }
+ F=fctr(nm(P));
+ R=sqrtrat(car(F)[0])/R;
+ for(F=cdr(F);F!=[];F=cdr(F)){
+ if(!iand(car(F)[1],1)) R*=car(F)[0]^(car(F)[1]/2);
+ else return [];
+ }
+ return R;
+ }
+ if(ntype(P)==4){
+ P0=real(P);P1=imag(P)/2;
+ X=makenewv(P);
+ for(R=fctr(X^4-P0*X^2-P1^2);R!=[];R=cdr(R)){
+ RT=car(R)[0];
+ if(deg(RT,X)==1){
+ X=-mycoef(RT,0,X)/mycoef(RT,1,X);
+ return X+P1/X*@i;
+ }
+ if(deg(RT,X)==2){
+ if((D=mycoef(RT,1,X)^2-4*mycoef(RT,2,X)*mycoef(RT,0,X))<0) continue;
+ X=(-mycoef(RT,1,X)+sqrtrat(D))/(2*mycoef(RT,2,X));
+ return X+P1*sqrt2rat(1/X)*@i;
+ }
+ }
+ D=P0^2+4*P1^2;
+ if(P1>0) return ((sqrtrat(D)+P0)/2)^(1/2)+((sqrtrat(D)-P0)/2)^(1/2)*@i;
+ return ((sqrtrat(D)+P0)/2)^(1/2)-((sqrtrat(D)-P0)/2)^(1/2)*@i;
+ }else if(ntype(P)!=0) return [];
+ if(P==1) return P;
+ Dn=dn(P);Nm=nm(P);C=R=1;
+ N=pari(factor,Dn);
+ if(N){
+ for(II=car(size(N))-1;II>=0;II--){
+ if(iand(K=N[II][1],1)){
+ R*=N[II][0];
+ K++;
+ }
+ C/=N[II][0]^(K/2);
+ }
+ }
+ N=pari(factor,Nm);
+ if(N){
+ for(II=car(size(N))-1;II>=0;II--){
+ if(N[II][0]==-1){
+ C*=@i;
+ continue;
+ }
+ K=N[II][1];
+ if(iand(K,1)){
+ R*=N[II][0];
+ K--;
+ }
+ if(K!=0) C*=N[II][0]^(K/2);
+ }
+ }
+ if(R!=1) C*=R^(1/2);
+ return C;
+}
+
+def fctri(F)
+{
+ R=(iscoef(F,os_md.israt))?fctr(F):[[1,1],[F,1]];
+ if(!iscoef(F,os_md.iscrat)||chkfun("af_noalg",0)==0) return R;
+ X=makenewv(vars(F));
+ for(S=[];R!=[];R=cdr(R)){
+ if(length(Var=vars(R0=car(R)[0])) == 1 && (D=mydeg(R0,Var=car(Var))) > 0){
+ if(imag(T=mycoef(R0,D,Var))!=0) R0/=T;
+ T=af_noalg(real(R0)+imag(R0)*X,[[X,X^2+1]]);
+ if(length(T)>1||T[0][1]>1){
+ T=subst(T,X,@i);
+ for(; T!=[];T=cdr(T)){
+ if(vars(T[0])!=[])
+ S=cons([car(T)[0],car(T)[1]*car(R)[1]],S);
+ }
+ continue;
+ }
+ }
+ S=cons(R[0],S);
+ }
+ return reverse(S);
+}
+
+def getroot(F,X)
+{
+ S=[];
+ if(type(Cpx=getopt(cpx))!=1) Cpx=0;
+ M=getopt(mult);
+ if(type(F) == 3)
+ F = nm(red(F));
+ for(R=fctri(F); length(R)>0; R = cdr(R)){
+ T=car(R);
+ P=car(T);
+ I=car(cdr(T));
+ if(mydeg(P,X)>0){
+ if(mydeg(P,X)==1){
+ C = mycoef(P,1,X);
+ P = X - red(P/C);
+ }else if(mydeg(P,X)==2 && Cpx>0){
+ C2=mycoef(P,2,X);C1=mycoef(P,1,X);C0=mycoef(P,0,X);
+ C=sqrt2rat(C1^2-4*C0*C2);
+ C0=[];
+ if(type(C)==0&&ntype(C)==0&&pari(issquare,-C)) C0=sqrt(C);
+ else if(Cpx>1) C0=sqrtrat(C);
+ if(C0==[]&&Cpx>2) C0=C^(1/2);
+ if(C0!=[]){
+ if(M==1)
+ S=cons([I,sqrt2rat((-C1+C0)/(2*C2))],S);
+ else{
+ for(II=I; II>0; II--)
+ S=cons(sqrt2rat((-C1+C0)/(2*C2)),S);
+ }
+ P=sqrt2rat((-C1-C0)/(2*C2));
+ }
+ }else if(mydeg(P,X)==3 && Cpx>1){
+ Omg=(-1+3^(1/2)*@i)/2;
+ PP=P/mycoef(P,3,X);
+ C2=mycoef(PP,2,X)/3;
+ PP=subst(PP,X,X-C2);
+ if((C1=mycoef(PP,1,X))==0){
+ C0=mycoef(PP,0,X);
+ if(real(C0)==0||imag(C0)==0){
+ if(real(C0)==0){
+ PP=getroot(X^3+imag(C0),X);
+ if(length(PP)==3){
+ for(;PP!=[];PP=cdr(PP)){
+ if(imag(PP[0])==0){
+ C0=PP[0]*@i;
+ break;
+ }
+ }
+ if(PP==[]) C0=0;
+ }
+ }else{
+ if(C0>0) C0=C0^(1/3);
+ else C0=-(-C0)^(1/3);
+ }
+ if(C0!=0){
+ if(M==1){
+ S=cons([I,C0-C2],S);
+ S=cons([I,C0*Omg-C2],S);
+ S=cons([I,C0*(-1-Omg)-C2],S);
+ }else{
+ for(II=I; II>0; II--){
+ S=cons(C0-C2,S);
+ S=cons(C0*Omg-C2,S);
+ S=cons(C0*(-1-Omg)-C2,S);
+ }
+ }
+ continue;
+ }
+ }
+ }
+ if(Cpx>2){
+ Q=X^2+(mycoef(PP,1,X)/3)*X+mycoef(PP,0,X)^3;
+ SQ=getroot(Q,X|cpx=2);
+ SQ=SQ[0]^(1/3);SQ2=mycoef(PP,0,X)/SQ;
+ if(M==1){
+ S=cons([I,SQ+SQ2-C2],S);
+ S=cons([I,SQ*Omg+SQ2*(-1-Omg)-C2],S);
+ S=cons([I,SQ*(-1-Omg)+SQ2*Omg-C2],S);
+ }else{
+ for(II=I; II>0; II--){
+ S=cons(SQ+SQ2-C2,S);
+ S=cons(SQ*Omg+SQ2*(-1-Omg)-C2,S);
+ S=cons(SQ*(-1-Omg)+SQ2*Omg-C2,S);
+ }
+ }
+ continue;
+ }
+ }else if(mydeg(P,X)==4 && Cpx>0){
+ C2=mycoef(P,3,X)/(4*mycoef(P,4,X));
+ PP=subst(P,X,X-C2);
+ if(mycoef(PP,1,X)==0){
+ PP=mycoef(PP,4,X)*X^2+mycoef(PP,2,X)*X+(SQ2=mycoef(PP,0,X));
+ SQ=getroot(PP,X|cpx=2);
+ if(length(SQ)==2){
+ if((C0=sqrtrat(SQ[0]))==[]){
+ if(mycoef(PP,1,X)==0){
+ if(SQ2<0) C0=(-SQ2)^(1/4);
+ else C0=SQ2^(1/4)*(1+@i)/2;
+ }
+ else if(Cpx>2) C0=SQ[0]^(1/2);
+ else C0=0;
+ }
+ if((C1=sqrtrat(SQ[1]))==[]){
+ if(mycoef(PP,1,X)==0) C1=-C0;
+ else C1=SQ[1]^(1/2);
+ }
+ if(C0!=0){
+ if(M==1)
+ S=append([[I,C0-C2],[I,-C0-C2],[I,C1-C2],[I,-C1-C2]],S);
+ else{
+ for(II=I; II>0; II--)
+ S=append([C0-C2,-C0-C2,C1-C2,-C1-C2],S);
+ }
+ continue;
+ }
+ }
+ }else{
+ PP/=mycoef(PP,4,X);
+ CC=mycoef(PP,2,X);C1=mycoef(PP,1,X);C0=mycoef(PP,0,X);
+ SQ=getroot(X*(CC+X)^2-4*C0*X-C1^2,X|cpx=Cpx);
+ if(length(SQ)>1){
+ SQ=sqrt2rat(SQ[0]);
+ SQ2=getroot(X^2-SQ,X|cpx=Cpx);
+ if(length(SQ2)>1){
+ C1=SQ2[0]*X-C1/SQ2[0]/2;
+ C0=getroot(X^2+CC/2+SQ/2+C1,X|cpx=Cpx);
+ C1=getroot(X^2+CC/2+SQ/2-C1,X|cpx=Cpx);
+ if(length(C0)>1&&length(C1)>1){
+ C0=[sqrt2rat(C0[0]-C2),sqrt2rat(C0[1]-C2),
+ sqrt2rat(C1[0]-C2),sqrt2rat(C1[1]-C2)];
+ if(M==1) for(II=0;II<4;II++) S=cons([I,C0[II]],S);
+ else for(II=I; II>0; II--) S=append(C0,S);
+ continue;
+ }
+ }
+ }
+ }
+ }
+ if(M==1)
+ S=cons([I,P],S);
+ else for( ; I>0; I--) S=cons(P,S);
+ }
+ }
+ S=qsort(S);
+ if(M==1) S=reverse(S);
+ return S;
+}
+
+def expat(F,L,V)
+{
+ L = vweyl(L);
+ if(V == "?"){
+ Ans = [];
+
+ F = nm(red(F));
+ S = fromeul(toeul(F,L,"infty"),L,0);
+ S = mycoef(S,mydeg(S,L[1]),L[1]);
+ if(mydeg(S,L[0]) > 0)
+ Ans = cons(["infty", expat(F,L,"infty")],Ans);
+
+ S = mycoef(F,mydeg(F,L[1]), L[1]);
+ R = getroot(S,L[0]);
+ for(I = 0; I < length(R); I++){
+ if(I > 0 && R[I-1] == R[I])
+ continue;
+ if(mydeg(R[I], L[0]) <= 0)
+ Ans = cons([R[I], expat(F,L,R[I])], Ans);
+ else
+ Ans = cons([R[I]], Ans);
+ }
+ return Ans;
+ }
+ return getroot(subst(toeul(F,L,V),L[0],0),L[1]);
+}
+
+def polbyroot(P,X)
+{
+ R = 1;
+ while(length(P)){
+ R *= X-car(P);
+ if(type(R)>2) R = red(R);
+ P = cdr(P);
+ }
+ return R;
+}
+
+def polbyvalue(P,X)
+{
+ R = 1; S = 0;
+ while(length(P)){
+ T = car(P);
+ V0 = T[1] - mysubst(S,[X,T[0]]);
+ if(V0 != 0){
+ if(type(R) > 2) R = red(R);
+ V1 = mysubst(R,[X,T[0]]);
+ if(V1 == 0){
+ erno(0);
+ return 0;
+ }
+ S += (V0/V1)*R;
+ if(type(S) > 2) S = red(S);
+ }
+ R *= X - T[0];
+ P = cdr(P);
+ }
+ return S;
+}
+
+
+def pcoef(P,L,Q)
+{
+ if(L==0)
+ return 1;
+ Coef=TP=0;
+ if(type(Q)>=4){
+ TP=1;
+ V=Q[0];
+ if(type(V)==4)
+ V=ltov(V);
+ else V=dupmat(V);
+ N=length(V);
+ if(type(Q[1])==5) MR=dupmat(Q[1]);
+ else{
+ MR=newvect(N);
+ for(K=Q[1], I=0; I< N; I++){
+ MR[I] = car(K);
+ K = cdr(K);
+ }
+ }
+ }else{
+ V=ltov(vars(P));
+ N=length(V);
+ MR=newvect(N);
+ for(I=0;I<N;I++){
+ MR[I]=mydeg(Q,V[I]);
+ Q=mycoef(Q,MR[I],V[I]);
+ }
+ if(type(Q)>1) return 0;
+ }
+ if(L==1){
+ for(I=0;I<N;I++)
+ P=mycoef(P,MR[I],V[I]);
+ return P;
+ }
+ for(I=1;I<N;I++){ /* sorted by required degrees */
+ for(K1=MR[I],K2=V[I],J=I-1; J>=0 && MR[J]<K1; J--);
+ for(II=I-1;II>J;II--){
+ MR[II+1]=MR[II];V[II+1]=V[II];
+ }
+ MR[II+1]=K1;V[II+1]=K2;
+ }
+ for(NN=N; N>0 && MR[N-1]==0; N--);
+ Mon=[];Coe=[];Q=P;
+ while(Q!=0){
+ M=newvect(N);
+ for(R=Q,F=I=0,MT=1;I<NN;I++){
+ K=mydeg(R,V[I]);
+ R=mycoef(R,K,V[I]);
+ if(I<N) M[I]=K;
+ if(K>0) MT*=V[I]^K;
+ if(K>MR[I]) F=1;
+ }
+ Q -= R*MT;
+ if(F==0){
+ Mon=cons(M,Mon);
+ Coe=cons(R,Coe);
+ }
+ }
+ Mon=ltov(reverse(Mon));
+ Coe=ltov(reverse(Coe));
+ Len=length(Mon);
+ S=newvect(Len);
+ for(JL=0; JL<Len;JL++){
+ if(L*Mon[JL][0]<MR[0]) break;
+ }
+ S[0]=L;
+
+ K0=Mon[0][0];
+ K=L*K0-MR[0];
+ for(I=II=0;II<Len && K>=0;II++){
+ if((K1=K0-Mon[0][II])>0){
+ while(K>K1 && S[I]>0){
+ S[I]--;S[II]++;
+ K-=K1;
+ I=II;
+ K0=Mon[0][II];
+ }
+ }else break;
+ }
+
+ I=0;
+ while(1){
+ for(T=T0=J=JP=0; J<Len; J++){
+ if(S[J]!=0){
+ if(T0==0 && J>=JL) return Coef;
+ JP=J;T0=1;
+ T+=S[J]*Mon[J][I];
+ }
+ }
+ if(T==MR[I]){
+ if(++I<N) continue;
+ for(TT=1,J=1; J<=L; J++) /* find a solution */
+ TT*=J;
+ for(J=0;J<Len;J++){
+ if(S[J]!=0){
+ TT*=Coe[J]^S[J];
+ for(II=S[J]; II>1; II--)
+ TT/=II;
+ }
+ }
+ Coef+=TT;
+ if(TP==1 && type(Coef)==3) Coef=red(Coef);
+ if(JP<Len-2 && S[JP]>1){
+ S[JP]-=2;S[JP+1]++;S[JP+2]++;
+ }else{
+ for(JT=JP-1;JT>=0&&S[JT]==0;JT--);
+ if(JT<0) break;
+ if(JT==JP-1){
+ S[JT]--;
+ if(JP<Len-1)
+ S[JP+1]++;
+ else
+ S[JP]++;
+ }else{
+ S[JT]--;
+ S[JT+1]+=S[JP]+1;
+ S[JP]=0;
+ }
+ }
+ I=0;
+ continue;
+ }
+ if(JP<Len-1){
+ for(JP1=JP+1;JP1<Len-1;JP1++){
+ if(Mon[JP1][I]!=Mon[JP][I]) break;
+ }
+
+ if(I>0 && Mon[JP1][0] < Mon[JP][0]){
+ S[JP]--;S[Len-1]++;JP=JP-1;
+ }else{
+
+ S[JP]--;
+ if(JP1<Len){
+ S[JP1]++;
+ }else{
+ S[JP1-1]++;
+ }
+ }
+ }
+ if(JP==Len-1){
+ for(JT=JP-1;JT>=0 && S[JT]==0;JT--);
+ if(JT<0) break;
+ S[JT]--;
+ if(JT==JP-1){
+ S[JP]++;
+ }else{
+ S[JT+1]+=S[JP]+1;
+ S[JP]=0;
+ }
+ }
+ I=0;
+ }
+ return Coef;
+}
+
+def prehombf(P,Q)
+{
+ if((Mem=getopt(mem))!=1 && Mem!=-1)
+ return prehombfold(P,Q);
+ if(Q==0) Q=P;
+ V=ltov(vars(P));
+ N=length(V);
+ for(I=1;I<N;I++){ /* sorted by required degrees */
+ for(K=mydeg(P,V[I]),K1=V[I],J=I-1; J>=0 && mydeg(P,V[J])<K; J--);
+ for(II=I-1;II>J;II--) V[II+1]=V[II];
+ V[II+1]=K1;
+ }
+ S=newvect(N);T=newvect(N);U=newvect(N);
+ for(R=P,M=1,Deg=I=0;I<N;I++){ /* extreme vector */
+ Deg+=(S[I]=mydeg(R,V[I]));
+ R=mycoef(R,S[I],V[I]);
+ }
+ DR=[[-1,0]];
+ if((R1=N/Deg)!=1){
+ DR=cons([-R1,0],DR);
+ Sft=1;
+ }else Sft=0;
+ if(Deg%2==0) Sg=1;
+ else Sg=-1;
+ for(I=0,R=R2=1,QQ=Q; 2*I+Sft < Deg; I++){
+ if(Mem==-1){
+ print(I+1,0);print("/",0);print(idiv(Deg-Sft+1,2),0);print(" ",2);
+ }
+ Coef=0;
+ Q=QQ;
+ while(Q!=0){
+ for(R=Q,J=0,RR=1;J<N;J++){
+ T[J]=mydeg(R,V[J]);
+ R=mycoef(R,T[J],V[J]);
+ if(T[J]>0) RR*=V[J]^T[J];
+ }
+ Q-=R*RR;
+ for(J=0,CC=R;J<N;J++){
+ U[J]=I*S[J]+T[J];
+ for(II=0; II<T[J]; II++)
+ CC*=(U[J]-II);
+ }
+ CC*=pcoef(P,I+1,[V,U]);
+ if(Mem==-1) print("*",2);
+ Coef+=CC;
+ }
+ DR=cons([I,Coef],DR);
+ DR=cons([-R1-1-I,Sg*Coef],DR);
+ if(Mem==-1) print("");
+ }
+ P = polbyvalue(DR,s);
+ return fctr(P);
+}
+
+def prehombfold(P,Q)
+{
+ V = vars(P);
+ if(Q==0) Q=P;
+ for(Deg=0, R=P, V1=V, DD=[]; V1!=[]; V1=cdr(V1)){
+ VT = car(V1);
+ D = mydeg(R,VT);
+ R = mycoef(R,D,VT);
+ Deg += D;
+ X = makev(["d",VT]);
+ Q = subst(Q,VT,X);
+ DD=cons([VT,X],DD);
+ }
+ DR=[[-1,0]];
+ NV=length(V);
+ if((R1=NV/Deg)!=1){
+ DR=cons([-R1,0],DR);
+ Sft=1;
+ }else
+ Sft=0;
+ if(Deg%2==0)
+ Sg=1;
+ else Sg=-1;
+ for(I = 0, R=R2=1; 2*I+Sft < Deg; I++){
+ R = R2;
+ R2 = R*P;
+ S = appldo(Q,R2,DD);
+ QQ = sdiv(S,R);
+ DR=cons([I,QQ],DR);
+ DR=cons([-R1-1-I,Sg*QQ],DR);
+ }
+ P = polbyvalue(DR,s);
+ return fctr(P);
+}
+
+def sub3e(P0,P1,P2,N0,N1,N)
+{
+ R = x^N0*(x-1)^N1*dx^N;
+ for(V = I = 1, J = 1; I <= N; I++){
+ S = 0;
+ M = N-I;
+ if(I <= N0){
+ T = mycoef(P0,N0-I,x);
+ S += T;
+ R += T*x^(N0-I)*(x-1)^N1*dx^M;
+ K1 = N0-I+1;
+ }else
+ K1 = 0;
+ if(I <= N1){
+ T = mycoef(P1,N1-I,x);
+ S += T;
+ R += T*x^N0*(x-1)^(N1-I)*dx^M;
+ K2 = N0-1;
+ }else
+ K2 = N-I;
+ for(K = K1; K <= K2; K++){
+ if(K == K2){
+ R += (mycoef(P2,N-I,x)-S)*x^K*(x-1)^(M-K)*dx^M;
+ continue;
+ }
+ R += strtov("r"+rtostr(V))*x^K*(x-1)^(M-K)*dx^M;
+ S += strtov("r"+rtostr(V++));
+ }
+ }
+ if(V > 1)
+ mycat([V-1, "accessory parameters: r1,r2,..."]);
+ return R;
+}
+
+def fuchs3e(P,Q,R)
+{
+ return getbygrs([R,P,Q],3);
+}
+
+def okubo3e(P,Q,R)
+{
+ if(getopt(opt)==1){
+ N=length(R);
+ M1=N-length(P);M2=N-length(Q);
+ V=(M1-1)*(M2-1);
+ if(V>0) mycat([V, "accessory parameters"]);
+ return getbygrs([R,cons([M1,0],P),cons([M2,0],Q)],3);
+ }
+ S = 0;
+ V = -1;
+ L = newvect(3,[[],[],[]]);
+ N = newvect(3,[0,0,0]);
+ if(type(R) < 4){
+ I = -1;
+ V = 3;
+ }else{
+ I = 2;
+ V = -1;
+ }
+ for( ; I >= 0; I--){
+ if(I == 2)
+ U = R;
+ else if(I == 1)
+ U = Q;
+ else
+ U = P;
+ for( ; length(U); U = cdr(U)){
+ T = car(U);
+ if( T == "?"){
+ if(V < 0)
+ V = I;
+ else
+ return 0;
+ }else{
+ if(I == 2)
+ L[I] = cons(-T, L[I]);
+ else
+ L[I] = cons(T, L[I]);
+ S += T;
+ }
+ N[I]++;
+ }
+ }
+ if(V == 3){
+ N[2] = N[0] + N[1];
+ P2 = x^N;
+ for(I = 1; I <= N; I++)
+ P2 += makev([R,I])*x^(N-I);
+ }else{
+ if(N[0]+N[1] != N[2]){
+ print("Number of exponents are wrong",0);
+ return -1;
+ }
+ S -= N[0]*N[1];
+ if(V < 0){
+ if(S != 0){
+ mycat(["Viorate Fuchs relation ->",S]);
+ return -2;
+ }
+ }else{
+ if(V != 2)
+ S = -S;
+ L[V] = cons(S, L[V]);
+ }
+ P2 = polinsft(polbyroot(L[2],x),x);
+ }
+ P0 = polinsft(mysubst(polbyroot(L[0],x),[x,x+N[1]]),x);
+ P1 = polinsft(mysubst(polbyroot(L[1],x),[x,x+N[0]]),x);
+ return sub3e(P0,P1,P2,N[0],N[1],N[2]);
+}
+
+/* N = 2*M (N-M = M) or 2*M+1 (N-M = M+1)
+ 0 : 0 1 ..... M-1 B B+1 ... B+N-M-2 A
+ 1 : C C+1 ... C+M-1 0 1 .... N-M-2 N-M-1
+ */
+def eosub(A,B,C,N)
+{
+ M = N%2;
+ P = [];
+ Q = [];
+ P = cons(A,P);
+ for(I = 0; I < N-M-1; I++)
+ P = cons(B+I,P);
+ for(I = 0; I < M; I++)
+ Q = cons(C+I,Q);
+ P = okubo3e(P,Q,s);
+
+ C = newvect(2);
+ L = newvect(2);
+ C[1] = chkexp(P,[x,dx],0,b,N-M-1);
+ C[0] = chkexp(P,[x,dx],1,c,M);
+ for(LL = K = 0; K < 2; K++){
+ L[K] = length(C[K]);
+ C[K] = ltov(C[K]);
+ if(L[K] > LL)
+ LL = L[K];
+ }
+ JJ = 0;
+
+ for(I = 1; Do; I++){
+ Do = 0;
+ S = makev(["r",I]);
+ for(J = JJ; J < LL; J++){
+ JJ = LL;
+ for(K = 0; K < 2; K++){
+ if(J >= L[K] || C[K][J] == 0)
+ continue;
+ if(J < JJ)
+ JJ = J;
+ if(Do == 1){
+ CC = C[K];
+ CC[J] = mysubst(CC[J], [S, Var]);
+ continue;
+ }
+ if(mydeg(C[K][J]) >= 1){
+ if(mydeg(C[K][J]) > 1){
+ print("Internal error");
+ return;
+ }
+ Var = getroot(C[K][J],S);
+ Var = Var[0];
+ CC = C[K];
+ CC[J] = 0;
+ P = mysubst(P, [S, Var]);
+ Do = 1;
+ J = JJ - 1;
+ K++;
+ }
+ }
+ }
+ }
+ if(JJ != L){
+ print("Internal error (non Rigid)");
+ return;
+ }
+ return P;
+}
+
+def even4e(X,Y){
+ if(length(X) != 4 || length(Y) != 2){
+ print("Usage: even4e([a,b,c,d],[e,f])");
+ print("0: 0 1 e f");
+ print("1; 0 1 * *+1");
+ print("infty: a b c d");
+ return;
+ }
+ S = -3;
+ for(I = 0; I < 4; I++){
+ S += X[I];
+ if(I < 2)
+ S += Y[I];
+ }
+ S = -S/2;
+ P = okubo3e(Y,[S,"?"],X);
+ T = chkexp(P,x,1,S,2);
+ T = getroot(T[0],r1);
+ return mysubst(P,[r1,T[0]]);
+}
+
+def odd5e(X,Y)
+{
+ if(length(X) != 5 || length(Y) != 2){
+ print("Usage: spec6e([a,b,c,d,e],[f,g])");
+ print("0: 0 1 f g g+1");
+ print("1: 0 1 2 * *+1");
+ print("infty: a b c d e");
+ return;
+ }
+ S = -4;
+ for(I = 0; I < 5; I++){
+ S += X[I];
+ if(I < 2)
+ S += Y[I];
+ }
+ S = -(S + Y[1])/2;
+ P = okubo3e([Y[0],Y[1],Y[1]+1],[S,"?"],X);
+ T = chkexp(P,x,1,S,2);
+ T = getroot(T[0],r1);
+ P = mysubst(P,[r1,T[0]]);
+ T = chkexp(P,x,0,Y[1],2);
+ T = getroot(T[0],r2);
+ return mysubst(P,[r2,T[0]]);
+}
+
+def extra6e(X,Y)
+{
+ if(length(X) != 6 || length(Y) != 2){
+ print("Usage: extra6e([a,b,c,d,e,f],[g,h])");
+ print("0: 0 1 g g+1 h h+1");
+ print("1: 0 1 2 3 * *+1");
+ print("infty: a b c d e f");
+ return;
+ }
+ S = -5;
+ for(I = 0; I < 6; I++){
+ S += X[I];
+ if(I < 2)
+ S += 2*Y[I];
+ }
+ S = -S/2;
+ P = okubo3e([Y[0],Y[0]+1,Y[1],Y[1]+1],[S,"?"],X);
+ T = chkexp(P,x,1,S,2);
+ T = getroot(T[0],r1);
+ P = mysubst(P,[r1,T[0]]);
+ T = chkexp(P,x,0,Y[0],2);
+ T = getroot(T[0],r3);
+ P = mysubst(P,[r3,T[0]]);
+ T = chkexp(P,x,0,Y[1],2);
+ T = getroot(T[0],r2);
+ return mysubst(P,[r2,T[0]]);
+}
+
+def rigid211(X,Y,Z)
+{
+ if(length(X) != 2 || length(Y) != 2 || length(Z) != 2){
+ print("Usage: rigid211([a,b],[c,d],[e,f])");
+ print("0: 0 1 a b");
+ print("1: 0 1 c d");
+ print("infty: e e+1 f *");
+ return;
+ }
+ P = okubo3e(X,Y,[Z[0],Z[0]+1,Z[1],"?"]);
+ T = chkexp(P,x,"infty",Z[0],2);
+ T = getroot(T[0],r1);
+ return mysubst(P,[r1,T[0]]);
+}
+
+def solpokuboe(P,L,N)
+{
+ if(type(N) > 1 || ntype(N) != 0 || dn(N) != 1){
+ mycat(["Irrigal argument :", N]);
+ return 0;
+ }
+ L = vweyl(L);
+ DD=N+1;
+ for(U = S = L[0]^N; U != 0; ){
+ D = mydeg(U,L[0]);
+ if(D>=DD){
+ mycat(["Internal Error",D,DD]);
+ return -1;
+ }
+ DD=D;
+ UU = L[0]^D;
+ R = appldo(P,UU,L);
+ if(mydeg(R,L[0]) > D){
+ printf("Bad operator\n");
+ return 0;
+ }
+ CC = mycoef(R,D,L[0]);
+ if(D == N){
+ P -= (E = CC);
+ U = R-E*U;
+ continue;
+ }
+ if(CC == 0){
+ printf("No polynomial\n");
+ return 0;
+ }
+ CC= mycoef(U,D,L[0])/CC;
+ S = red(S - UU*CC);
+ U = red(U - R*CC);
+ }
+ return [nm(S),E];
+}
+
+def stoe(M,L,N)
+{
+ L = vweyl(L);
+ Size = size(M);
+ S = Size[0];
+ NN = 0;
+ if(type(N) == 4){
+ NN=N[0]; N=N[1];
+ }else if(N < 0){
+ NN=-N; N=0;
+ }
+ if(S != Size[1] || N >= S || NN >= S)
+ return;
+ D = newmat(S+1,S+1);
+ MN = dupmat(M);
+ MD = newmat(S,S);
+ DD = D[0];
+ DD[N] = 1; DD[S] = 1;
+ for(Lcm = I = 1; ; ){
+ DD = D[I];
+ MM = MN[N];
+ for(J = 0; J < S; J++){
+ DD[J] = MM[J];
+ Lcm = lcm(dn(DD[J]),Lcm);
+ }
+ DD[S] = L[1]^I;
+ for(J = 0; J <= S; J++)
+ DD[J] = red(DD[J]*Lcm);
+ if(I++ >= S)
+ break;
+ if(I==S && NN>0){
+ DD = D[I];
+ DD[0]=-z_zz; DD[NN]=1;
+ break;
+ }
+ Mm = dupmat(MN*M);
+ for(J = 0; J < S; J++){
+ for(K = 0; K < S; K++)
+ MN[J][K] = red(diff(MN[J][K],L[0])+Mm[J][K]);
+ }
+ }
+#if 0
+ P = fctr(mydet2(D));
+#else
+ P = fctr(det(D));
+#endif
+ for(I = R = 1; I < length(P); I++){
+ if(mydeg(P[I][0],L[1]) > 0)
+ R *= P[I][0]^P[I][1];
+ }
+ if(NN > 0)
+ R = -red(coef(R,0,z_zz)/coef(R,1,z_zz));
+ return R;
+}
+
+def dform(L,X)
+{
+ if(type(X)==2) X=[X];
+ if(type(L[0])!=4) L=[L];
+ if(type(X)==4) X=ltov(X);
+ M=length(X);
+ if(length(car(L))==2){
+ R=newvect(M);
+ for(LL=L; LL!=[]; LL=cdr(LL)){
+ for(I=0; I<M; I++){
+ RT=rmul(car(LL)[0],mydiff(car(LL)[1],X[I]));
+ R[I] = (R[I]==0)?RT:radd(R[I],RT);
+ }
+ }
+ Dif=getopt(dif);
+ for(RR=[], I=M-1; I>=0; I--){
+ if(Dif==1) RR=cons([1,R[I],X[I]],RR);
+ else RR=cons([R[I],X[I]],RR);
+ }
+ if(Dif==1) RR=dform(RR,X);
+ return RR;
+ }else if(length(car(L))!=3) return L;
+ N=M*(M-1)/2;
+ R=newvect(N);
+ S=newvect(N);
+ for(LL=L; LL!=[]; LL=cdr(LL)){
+ for(I=K=0; I<M; I++){
+ for(J=I+1; J<M; J++, K++){
+ if(LL==L) S[K]=[X[I],X[J]];
+ LT=car(LL);
+ R1=mydiff(LT[2],X[J]);
+ R2=mydiff(-LT[2],X[I]);
+ if(R2==0){
+ if(R1==0) continue;
+ R1=rmul(mydiff(LT[1],X[I]),R1);
+ }else if(R1==0){
+ R1=rmul(mydiff(LT[1],X[J]),R2);
+ }else
+ R1=rmul(mydiff(LT[1],X[I]),R1)+rmul(mydiff(LT[1],X[J]),R2);
+ R1=rmul(LT[0],R1);
+ R[K] = (R[K]==0)?R1:radd(R[K],R1);
+ }
+ }
+ }
+ for(RR=[],I=N-1; I>=0; I--)
+ RR=cons([R[I],S[I][0],S[I][1]],RR);
+ return RR;
+}
+
+def polinvsym(P,Q,Sym)
+{
+ N = length(Q);
+ T = polbyroot(Q,zz);
+ for(I = 1; I <= N; I++){
+ P = mysubst(P,[makev([Sym,I]), (-1)^I*coef(T,N-I,zz)]);
+ }
+ return P;
+}
+
+def polinsym(P,Q,Sym)
+{
+ if(type(P) == 3){
+ P = red(P);
+ if(type(P) == 3){
+ D = polinsym(dn(P),Q,Sym);
+ if(D == 0)
+ return 0;
+ return polinsym(nm(P),Q,Sym)/D;
+ }
+ }
+ N = length(Q);
+ V = newvect(N+1);
+ S = newvect(N+1);
+ E = newvect(N+1);
+ E0 = newvect(N+1);
+ T = polbyroot(Q,zzz);
+ for(J = 1; J <= N; J++){
+ K = coef(T,N-J,zzz);
+ if(J % 2)
+ K = -K;
+ S[J] = K;
+ V[J] = makev([Sym,J]);
+ }
+ K = deg(P,Q[0]);
+ for(J = 0; J <= N; J++)
+ E0[J] = K+1;
+ E[0] = K+1;
+ while(deg(P,Q[0]) > 0){
+ for(P0 = P, J = 1; J <= N; J++){
+ E[J] = deg(P0,Q[J-1]);
+ P0 = coef(P0,E[J],Q[J-1]);
+ }
+ /* P0*Q[0]^E[1]*Q[1]^E[2]*... E[1] >= E[2} >= ... */
+ for(J = 1; J <= N; J++){
+ if(E[J] < E0[J])
+ break;
+ if(E[J-1] < E[J])
+ J = N;
+ }
+ if(J > N){
+ print("Not symmetric");
+ return 0;
+ }
+ for(J = 1; J <= N; J++)
+ E0[J] = E[J];
+ for(J = N; J > 1; J--){
+ if(E[J] != 0)
+ for(K = 1; K < J; K++)
+ E[K] -= E[J];
+ }
+ for(R0 = P0, K = 1; K <= N; K++){
+ if(E[K] > 0)
+ P0 *= S[K]^E[K];
+ R0 *= V[K]^E[K];
+ }
+ P += R0 - P0;
+ }
+ return P;
+}
+
+def tohomog(P,L,V)
+{
+ while(length(L)>0){
+ P = mysubst(P,[car(L),car(L)/V]);
+ L = cdr(L);
+ }
+ P = red(P);
+ N = mindeg(dn(P),V);
+ if(N > 0)
+ P = red(P*V^N);
+ N = mindeg(dn(P),V);
+ if(N > 0)
+ P = red(P/(V^N));
+ return P;
+}
+
+def substblock(P,X,Q,Y)
+{
+ P = red(P);
+ if(deg(dn(P),X) > 0)
+ return substblock(nm(P),X,Q,Y)/substblock(dn(P),X,Q,Y);
+ N = mydeg(Q,X);
+ if(N < 1)
+ return P;
+ R = mycoef(Q,N,X);
+ while(M = mydeg(P,X), M >= N)
+ P = red(P - mycoef(P,M,X)*(Q-Y)*X^(M-N)/R);
+ return P;
+}
+
+def okuboetos(P,L)
+{
+ L = vweyl(L); X = L[0]; DX = L[1];
+ N = mydeg(P,DX);
+ C = mycoef(P,N,DX);
+ K = mydeg(C,X);
+ if(K > N){
+ print("Irregular singularity at infinity")$
+ return 0;
+ }
+ if(N > K)
+ P *= x^(N-K);
+
+ L = getroot(mycoef(P,N,DX),x);
+ L = ltov(reverse(L));
+ if(length(L) != N || N == 0){
+ print("Cannot get exponents")$
+ return 0;
+ }
+ if( type(LL = getopt(diag)) == 4 ){
+ LL = ltov(LL);
+ if(length(LL) != N){
+ mycat(["Length of the option should be", N]);
+ return 0;
+ }
+ Tmp = newvect(N);
+ for(I = N-1; I >= 0; I--){
+ for(LLT = LL[I], J = N-1; J >=0 ; J--){
+ if(LLT == L[J] && Tmp[J] == 0){
+ Tmp[J] = 1;
+ break;
+ }
+ }
+ if(J < 0){
+ print("option is wrong");
+ return 0;
+ }
+ }
+ L = LL;
+ }
+ P /= mycoef(C,N,X);
+ A = newmat(N,N);
+ AT = newmat(N+1,N+1);
+ Phi= newvect(N+1);
+ Phi[0] = 1;
+ for(J = 0; J < N; J++)
+ Phi[J+1] = Phi[J]*(X-L[J]);
+ for(ATT = AT[N], J = 0; J < N; J++)
+ ATT[J] = mycoef(P,J,DX);
+
+ for(K = 1; K <= N; K++){
+ for(J = N; J >= K; J--){
+ Aj = A[J-1];
+ SIG = AT[J][J-K];
+ for(I = 0; I <= K-2; I++)
+ SIG += Aj[J-I-1]*AT[J-I-1][J-K];
+ if(K == 1)
+ DAT = mydiff(Phi[J-1],X);
+ else
+ DAT = mydiff(AT[J-1][J-K],X);
+ Aj[J-K] = -SIG+(X-L[J-1])*DAT;
+ Aj[J-K] /= Phi[J-K];
+ Aj[J-K] = mysubst(Aj[J-K],[X,L[J-1]]);
+ if(J < K+1) continue;
+ ATj = AT[J-1];
+ ATj[J-K-1] = SIG+Aj[J-K]*Phi[J-K];
+ ATj[J-K-1] /= (X - L[J-1]);
+ ATj[J-K-1] = red(ATj[J-K-1]-DAT);
+ }
+ }
+
+ ATT = newmat(N,N);
+ for(J = 0; J < N; J++){
+ for(K = 0; K < N; K++){
+ ATj = ATT[J];
+ ATj[K] = AT[J][K];
+ }
+ ATj[J] = Phi[J];
+ if(J < N-1){
+ ATj = A[J];
+ ATj[J+1] = 1;
+ }
+ }
+ return [L,A,ATT];
+}
+
+def heun(X,P,R)
+{
+ if(type(X) != 4 || length(X) != 5){
+ print("Usage: huen([a,b,c,d,e],p,r)");
+ print("0: 0 c");
+ print("1: 0 d");
+ print("p: 0 e");
+ print("infty: a b");
+ print("Fuchs relation: a+b+1 = c+d+e");
+ return;
+ }
+ S = 1;
+ V = -1;
+ X = ltov(X);
+ for(I = 0; I < 5; I++){
+ if(X[I] == "?"){
+ if(V >= 0)
+ return;
+ V = I;
+ }else if(I < 2){
+ S += X[I];
+ }else
+ S -= X[I];
+ }
+ if(V >= 0){
+ if(V < 2)
+ X[V] = -S;
+ else
+ X[V] = S;
+ }else if(S != 0){
+ mycat(["Fuch relation:", S,"should be zero!"]);
+ return;
+ }
+ return
+ x*(x-1)*(x-P)*dx^2
+ + (X[2]*(x-1)*(x-P)+X[3]*x*(x-P)+X[4]*x*(x-1))*dx
+ + X[0]*X[1]*(x-R);
+}
+
+def fspt(M,T)
+{
+ if(type(M)==7) M=s2sp(M);
+ if(T == 3) /* 3: cut 0 */
+ return cutgrs(M);
+ if(T == 4 || T== 5){ /* 4: short 5: long */
+ for(MN = [] ; M != []; M = cdr(M)){
+ MT = car(M);
+ for(MNT = []; MT != []; MT = cdr(MT)){
+ if(type(car(MT)) <= 3){
+ if(T == 4) MNT = cons(car(MT),MNT);
+ else MNT = cons([1,car(MT)],MNT);
+ }else{
+ if(T == 5 || car(MT)[0] > 1) MNT = cons(car(MT),MNT);
+ else if(car(MT)[0] == 1) MNT = cons(car(MT)[1],MNT);
+ }
+ }
+ MN = cons(reverse(MNT), MN);
+ }
+ return reverse(MN);
+ }
+ if(type(M[0][0]) == 4){
+ for(MN = [] ; M != []; M = cdr(M)){
+ MT = car(M);
+ for(MNT = []; MT != []; MT = cdr(MT))
+ MNT = cons(car(MT)[0], MNT);
+ MN = cons(reverse(MNT), MN);
+ }
+ return fspt(reverse(MN),T);
+ }
+ if(T == 0) /* 0: sp */
+ return M;
+ for(MN = [] ; M != []; M = cdr(M)){
+ MT = qsort(ltov(car(M)));
+ L = length(MT);
+ for(MNT = [], I = 0; I < L; I++)
+ MNT = cons(MT[I], MNT);
+ MN = cons(MNT, MN);
+ }
+ MN = reverse(MN);
+ if(T==6) return MN; /* 7: sort */
+ L = length(MN);
+ for(M = MN; M != []; M = cdr(M)){
+ for(I = 0, MT = car(M); MT != []; MT = cdr(MT))
+ I += car(MT);
+ if(OD == 0)
+ OD = I;
+ else if(OD != I || OD == 0)
+ return 0;
+ }
+ ALL = [MN];
+ RD=[];
+ while(OD > 0){
+ for(S = 0, MT = MN; MT != []; MT = cdr(MT))
+ S += car(MT)[0];
+ S -= (L-2)*OD;
+ if(S <= 0){
+ if(T==7) return [ALL[0],ALL[length(ALL)-1],RD];
+ return (T==1)?MN:ALL;
+ }
+ RD=cons([S,0,0],RD);
+ for(NP=0, M = [], MT = MN; MT != []; NP++, MT = cdr(MT)){
+ MTT = car(MT);
+ I = MTT[0] - S;
+ if(I < 0){
+ if(I+OD!=0) return 0;
+ if(T==7) return [ALL[0],ALL[length(ALL)-1],cdr(RD)];
+ return (T==1)?MN:ALL;
+ }
+ MTT = cdr(MTT);
+ NC=1; DO=0;
+ for(MNT = []; MTT != []; MTT = cdr(MTT)){
+ if(MTT[0] > I){
+ if(DO==0) RD=cons([MTT[0]-I,NP,NC++],RD);
+ MNT = cons(MTT[0], MNT);
+ }
+ else if(MTT[0] <= I && I != 0){
+ DO=1;
+ MNT = cons(I, MNT);
+ I = 0;
+ if(MTT[0] > 0)
+ MNT = cons(MTT[0], MNT);
+ }
+ }
+ if(I > 0)
+ MNT = cons(I,MNT);
+ M = cons(reverse(MNT), M);
+ }
+ MN = reverse(M);
+ ALL = cons(MN,ALL);
+ OD -= S;
+ }
+}
+
+def abs(X)
+{
+ if(vars(X)!=[]) return todf(os_md.abs,[X]);
+ if(type(X)==4){
+ P=X[1];X=X[0];
+ }else P=0;
+ if(type(X)==1){
+ if((T=ntype(X))<2 || T==3){
+ if(X<0) X=-X;
+ }else if(T==4) X=P?pari(abs,X,P):pari(abs,X);
+ }
+ return X;
+}
+
+def sgn(X)
+{
+ if(X==0) return 0;
+ if(type(X)==1){
+ return (X>0)?1:-1;
+ }
+ if(type(X)==5) X=vtol(X);
+ if(type(X)==4){
+ for(W=0,Y=X;Y!=[];Y=cdr(Y))
+ for(Z=cdr(Y);Z!=[];Z=cdr(Z))
+ if(car(Y)>car(Z)) W++;
+ if(getopt(val)==1) return W;
+ return (iand(W,1))?-1:1;
+ }
+}
+
+def calc(X,L)
+{
+ if(type(X)<4||type(X)==7){
+ if(type(L)==4||type(L)==7){
+ V=L[1];
+ if(type(X)!=7){
+ if((L0=L[0])=="+") X+=V;
+ else if(L0=="-") X-=V;
+ else if(L0=="*") X*=V;
+ else if(L0=="/") X/=V;
+ else if(L0=="^") X^=V;
+ }
+ if((L0=L[0])==">") X=(X>V);
+ else if(L0=="<") X=(X<V);
+ else if(L0=="=") X=(X==V);
+ else if(L0==">=") X=(X>=V);
+ else if(L0=="<=") X=(X<=V);
+ else if(L0=="!=") X=(X!=V);
+ }else if(type(L)==7&&type(X)<4){
+ if(L=="neg") X=-X;
+ else if(L=="abs") X=abs(X);
+ else if(L=="neg") X=-X;
+ else if(L=="sqr") X*=X;
+ else if(L=="inv") X=1/X;
+ else if(L=="sgn"){
+ if(X>0)X=1;
+ else if(X<0) X=-1;
+ }
+ }
+ }
+ return X;
+}
+
+def isint(X)
+{
+ if(X==0||(type(X)==1 && ntype(X)==0 && dn(X)==1)) return 1;
+ return 0;
+}
+
+def israt(X)
+{
+ if(X==0||(type(X)==1 && ntype(X)==0)) return 1;
+ return 0;
+}
+
+def iscrat(X)
+{
+ if(X==0 || (type(X)==1 && israt(real(X)) && israt(imag(X)))) return 1;
+ return 0;
+}
+
+def isalpha(X)
+{
+ return ((X>64&&X<91)||(X>96&&X<123))?1:0;
+}
+
+def isnum(X)
+{
+ return (X>47&&X<58)?1:0;
+}
+
+def isalphanum(X)
+{
+ return (isalpha(X)||isnum(X))?1:0;
+}
+
+def isdecimal(X)
+{
+ if(type(X)!=7) return 0;
+ F=S=0;
+ L=strtoascii(X);
+ while(L!=[]&&car(L)==32) L=cdr(L);
+ if(L!=[]&&car(L)==45) L=cdr(L); /* - */
+ while(L!=[]&&isnum(car(L))){
+ F=1; L=cdr(L);
+ }
+ while(L!=[]&&car(L)<33){
+ S=1;L=cdr(L);
+ }
+ if(L==[]) return F;
+ else if(S||car(L)!=46) return 0; /* . */
+ L=cdr(L);F=0;
+ while(L!=[]&&isnum(car(L))){
+ F=1; L=cdr(L);
+ }
+ while(L!=[]&&car(L)<33) L=cdr(L);
+ return (L==[])?F:0;
+}
+
+def isvar(X)
+{
+ return ([X]==vars(X)&&vtype(X)<3)?1:0;
+}
+
+def isyes(F)
+{
+ if((CC=getopt(set))==1){
+ IsYes=(type(F[0])==4)?F:[F];
+ return 1;
+ }else if(CC==0) return(IsYes);
+ if(type(CC)!=7)
+ CC=IsYes;
+ for(;CC!=[]; CC=cdr(CC)){
+ C=car(CC);
+ V=call(C[0],cons(F,C[1]));
+ if(type(C[2])!=4){
+ if(V!=C[2]) break;
+ }else{
+ if(C[2][0]!="" && V<C[2][0]) break;
+ if(C[2][1]!="" && V>C[2][1]) break;
+ }
+ }
+ return (CC==[])?1:0;
+}
+
+def isall(FN,M)
+{
+ if(type(M)<4 || type(M)>6) return ((*FN)(M)==0)?0:1;
+ if(type(M)==4){
+ for(;M!=[];M=cdr(M))
+ if((*FN)(car(M))==0) return 0;
+ }else if(type(M)==5){
+ K=length(M);
+ for(I=0;I<K;I++)
+ if((*FN)(M[I])==0) return 0;
+ }else if(type(M)==6){
+ K=size(M)[0];
+ for(I=0;I<K;I++)
+ if (isall(FN,M[I])==0) return 0;
+ }
+ return 1;
+}
+
+def sproot(MP,T)
+{
+ if((I=str_chr(T,0,","))>0){
+ if(type(MP)==7) M=s2sp(MP);
+ else M=chkspt(MP|opt=0);
+ if(I==length(M[0])){
+ N=s2sp(T);S=SM=SN=K=0;
+ for(MM=M,NN=N;MM!=[];MM=cdr(MM),NN=cdr(NN),K++){
+ for(MT=car(MM),NT=car(NN);MT!=[];MT=cdr(MT),NT=cdr(NT)){
+ S+=car(MT)*car(NT);
+ if(K==0){
+ SM+=car(MT);SN+=car(NT);
+ }
+ }
+ }
+ return S-(length(M)-2)*SM*SN;
+ }
+ }
+ MM=chkspt(MP|opt=7);
+ if(T=="base") return MM;
+ Keep=(getopt(keep)==1)?1:0;
+ Null=getopt(null);
+ Only=getopt(only);
+ if(type(Only)!=1) Only=7;
+ M0=MM[0];
+ M1=MM[1];
+ M=MM[2];
+ if(T=="length") return length(M);
+ if(T=="height"){
+ for(J=2,S=M1[0][0],M2=M1; M2!=[]; M2=cdr(M2)){
+ for(MT=cdr(car(M2)); MT!=[]; J++, MT=cdr(MT)){
+ S+= J*car(MT);
+ }
+ J=1;
+ }
+ return S;
+ }
+ for(OD=0, MT=M1[0]; MT!=[]; MT=cdr(MT)) OD+=car(MT);
+ if(T=="type"){
+ R=newvect(OD+1);
+ for(MT=M; MT!=[]; MT=cdr(MT)) R[MT[0][0]]++;
+ for(RR=[],I=OD; I>0; I--)
+ if(R[I]>0) RR=cons([R[I],I],RR);
+ return RR;
+ }
+ if(T=="part"||T=="pair"||T=="pairs"){
+ NP=length(M1);
+ LM=newvect(NP);
+ R=newvect(length(M));
+ for(K=0; K<NP; K++) LM[K]=length(M1[K]);
+ for(I=0,TM=M; TM!=[]; I++, TM=cdr(TM)){
+ V=newvect(NP);
+ for(K=0; K<NP; K++) V[K]=newvect(LM[K]);
+ TP=car(TM);
+ if(TP[2]==0){
+ for(K=0;K<NP;K++) V[K][0]=1;
+ for(J=0; J<I; J++){
+ VJ=R[J][1];
+ for(S=K=0;K<NP;K++) S+=VJ[K][0];
+ for(OD=0,K=0;K<LM[0];K++) OD+=VJ[0][K];
+ S-=(NP-2)*OD;
+ for(K=0;K<NP;K++) VJ[K][0]-=S;
+ }
+ }else{
+ K=TP[1]; P=TP[2];
+ V[K][P-1]=-1; V[K][P]=1;
+ for(J=0; J<I; J++){
+ VJ=R[J][1];
+ S=VJ[K][P]; VJ[K][P]=VJ[K][P-1]; VJ[K][P-1]=S;
+ }
+ }
+ R[I]=[TP[0],V];
+ }
+ if(T=="pair"||T=="pairs"){
+ MV=ltov(M1);
+ for(K=0; K<NP; K++) MV[K] = ltov(MV[K]);
+ for(RR=UU=SS=[],I=0; I<length(M); I++){
+ V=newvect(NP); W=newvect(NP); U=newvect(NP);
+ for(K=0; K<NP; K++){
+ U[K]=newvect(LM[K]); V[K]=newvect(LM[K]); W[K]=newvect(LM[K]);
+ }
+ S=R[I][0];
+ for(K=0; K<NP; K++){
+ for(Q=J=0; J<LM[K]; J++){
+ V[K][J] = S*(U[K][J] = R[I][1][K][J]);
+ Q+=(W[K][J] = MV[K][J] - V[K][J]);
+ }
+ }
+ if(Q>0 && iand(Only,1)==0) continue;
+ if(Q==0 && iand(Only,2)==0) continue;
+ if(Q<0 && iand(Only,4)==0) continue;
+ for(K=0; K<NP; K++){
+ V[K] = vtol(V[K]); W[K] = vtol(W[K]); U[K]=vtol(U[K]);
+ }
+ V=vtol(V); W=vtol(W);U=vtol(U);
+ if(Q<0) S=-S;
+ RR = cons([V,W], RR); UU = cons(U,UU); SS=cons(S,SS);
+ }
+ RR = reverse(RR); UU=reverse(UU); SS=reverse(SS);
+ if(getopt(dviout)==1 && (Null!=1 || RR!=[])){
+ Out=string_to_tb("\\begin{align}\\begin{split}"+s2sp(M1)+"&=");
+ for(I=0,R=RR, U=UU; R!=[]; I++, R=cdr(R), U=cdr(U)){
+ if(I>0) str_tb("\\\\\n &=",Out);
+ if(T=="pairs"){
+ if((S=SS[I])<0) S=-S;
+ if(S>1) str_tb([my_tex_form(S),"("],Out);
+ str_tb(s2sp(car(U)),Out);
+ if(S>1) str_tb(")",Out);
+ str_tb(" \\oplus ",Out);
+ if(SS[I]<0){
+#ifdef USEMODULE
+ str_tb(["-(",s2sp(mtransbys(os_md.abs,car(R)[1],[])),")"],Out);
+#else
+ str_tb(["-(",s2sp(mtransbys(abs,car(R)[1],[])),")"],Out);
+#endif
+ }else
+ str_tb(s2sp(car(R)[1]),Out);
+ }else
+ str_tb([s2sp(car(R)[0])," \\oplus ",s2sp(car(R)[1])],Out);
+ }
+ str_tb("\n\\end{split}\\end{align}",Out);
+ dviout(str_tb(0,Out)|keep=Keep);
+ }
+ return RR;
+ }
+ for(I=0; I<length(M); I++){
+ for(K=0; K<NP; K++) R[I][1][K] = vtol(R[I][1][K]);
+ R[I] = [R[I][0],vtol(R[I][1])];
+ }
+ R = vtol(R);
+ return [M0,M1,R];
+ }
+}
+
+def spgen(MO)
+{
+ Eq=(getopt(eq)==1)?1:0;
+ Sp=getopt(sp);
+ if(type(Sp)==7) Sp=s2sp(Sp);
+ St=getopt(str);
+ LP=getopt(pt);
+ F=getopt(std);
+ if(F!=1&&F!=-1) F=0;
+ if(type(LP)==4){
+ L0=LP[0]; L1=LP[1];
+ }else{
+ L0=0; L1=MO+1;
+ }
+ if(MO<=0){
+ MO=-MO;
+ if(iand(MO,1)==1) return [];
+ if(MO>1){
+ if(isMs()==0) return [];
+ Cmd="okubo "+rtostr(-MO);
+ MO/=2;
+ if(L1>0) Cmd=Cmd+"+"+rtostr(L0)+"-"+rtostr(L1);
+ else L1=MO+4;
+ Cmd=Cmd+" B";
+ Id=getbyshell(Cmd);
+ if(Id<0) return [];
+ B=[];
+ while((S=get_line(Id)) !=0){
+ P0=str_chr(S,1,":")+1;
+ if(P0>1){
+ P1=str_chr(S,P,"\n");
+ if(P1<0) P1=str_len(S);
+ B=cons(sub_str(S,P0,P1-1),B);
+ }
+ }
+ close_file(Id);
+ }else{
+ MO/=2;
+ if(L1<=1) L1=MO+4;
+BB=[
+["11,11,11,11","111,111,111","1^4,1^4,22","1^6,222,33"],
+["11,11,11,11,11","1^4,1^4,211","211,22,22,22","1^6,2211,33",
+"2211,222,222","22211,2^4,44","2^511,444,66","1^4,22,22,31",
+"2^5,3331,55","1^5,1^5,32","1^8,332,44","111,111,21,21","1^5,221,221"],
+["11,11,11,11,11,11","1^4,1^4,1^4","1^4,22,22,22","111,111,111,21",
+"1^6,21^4,33","21^4,222,222","221^4,2^4,44","2^41^4,444,66",
+"1^5,1^5,311","1^8,3311,44","1^6,222,321","321,33,33,33",
+"3321,333,333","33321,3^4,66","3^721,666,99","2^5,3322,55",
+"1^6,1^6,42","222,33,33,42","1^a,442,55","1^6,33,33,51",
+"222,222,33,51","1^9,333,54","2^7,554,77","1^5,2111,221",
+"2^41,333,441","1^7,2221,43","211,211,22,22","2211,2211,222",
+"22211,22211,44","1^4,211,22,31","2^411,3331,55","1^4,1^4,31,31",
+"22,22,22,31,31","1^7,331,331","2221,2221,331","111,21,21,21,21"],
+["11,11,11,11,11,11,11","111,111,111,111","1^6,1^6,33",
+"1^6,222,222","222,33,33,33","1^5,1^5,221",
+"1^4,211,22,22","1^4,1^4,22,31","22,22,22,22,31",
+"111,111,21,21,21","21^6,2^4,44","2221^6,444,66",
+"1^6,222,3111","3111,33,33,33","33111,333,333",
+"333111,3^4,66","3^5111,666,99","2^5,33211,55",
+"1^8,3221,44","3222,333,333","33222,3^4,66",
+"3^4222,666,99","1^6,1^6,411","222,33,33,411",
+"1^a,4411,55","2^4,2^4,431","431,44,44,44",
+"2^6,4431,66","4431,444,444","44431,4^4,88",
+"4^531,888,cc","1^a,433,55","1^7,1^7,52",
+"1^c,552,66","3^4,444,552","1^8,2^4,53",
+"1^8,44,44,71","3^5,555,771","21^4,2211,222",
+"221^4,22211,44","2221^4,3331,55","1^6,2211,321",
+"2^411,3322,55","1^7,322,331","2211,33,33,42",
+"3^42,4442,77","2211,222,33,51","3^51,5551,88",
+"2^611,554,77","2221,2221,322","2^41,2^41,54",
+"1^5,2111,2111","222111,333,441","1^7,22111,43",
+"1^5,1^5,41,41","1^9,441,441","22111,2221,331",
+"1^5,221,32,41","221,221,221,41","211,211,211,22",
+"2211,2211,2211","1^4,211,211,31","211,22,22,31,31",
+"1^4,22,31,31,31","1^5,32,32,32","221,221,32,32","21,21,21,21,21,21"],
+["11,11,11,11,11,11,11,11","1^4,1^4,22,22","1^8,2^4,44",
+"1^6,2211,222","2211,33,33,33","111,111,111,21,21",
+"1^5,1^5,2111","1^4,211,211,22","1^4,1^4,211,31",
+"211,22,22,22,31","1^4,22,22,31,31","111,21,21,21,21,21",
+"221^8,444,66","2^5,331^4,55","1^8,32111,44",
+"32211,333,333","332211,3^4,66","3^42211,666,99",
+"2^5,32221,55","1^7,1^7,511","1^c,5511,66",
+"3^4,444,5511","541,55,55,55","5541,555,555",
+"55541,5^4,aa","5^541,aaa,ff","1^8,1^8,62",
+"1^a1^4,662,77","1^a,55,55,91","2^71,555,87",
+"21^6,22211,44","221^6,3331,55","1^6,2211,3111",
+"2^411,33211,55","1^7,3211,331","2211,33,33,411",
+"3^42,44411,77","22211,2^4,431","2^511,4431,66",
+"1^8,332,431","3^42,4433,77","1^8,22211,53",
+"2221,2221,3211","221^5,333,441","1^7,21^5,43",
+"1^b,443,65","21^5,2221,331","2^51,3332,65",
+"21^4,21^4,222","221^4,221^4,44","1^6,21^4,321",
+"2221^4,3322,55","21^4,33,33,42","21^4,222,33,51",
+"2^51^4,554,77","2^4,3311,3311","3^411,4442,77",
+"321,321,33,33","3321,3321,333","33321,33321,66",
+"222,321,33,42","1^6,321,33,51","222,222,321,51",
+"1^9,3321,54","1^7,322,322","3^422,5551,88",
+"1^6,33,42,42","1^6,222,42,51","33,33,33,42,51",
+"1^6,1^6,51,51","222,33,33,51,51","1^b,551,551",
+"1^5,221,311,41","2^41,3321,441","22111,2221,322",
+"2^51,443,551","222111,2^41,54","21^4,2211,2211",
+"1^5,311,32,32","3331,3331,442","2211,2211,33,51",
+"221,221,311,32","22111,22111,331","1^5,2111,32,41",
+"2111,221,221,41","2111,221,32,32","211,211,211,211",
+"211,211,22,31,31","1^4,211,31,31,31","22,22,31,31,31,31"],
+["11,11,11,11,11,11,11,11,11","1^5,1^5,1^5","2^5,2^5,55",
+"111,111,111,111,21","2^41,333,333","1^4,1^4,211,22",
+"211,22,22,22,22","1^8,22211,44","1^4,1^4,1^4,31",
+"1^4,22,22,22,31","1^7,1^7,43","1^7,2221,331",
+"2221,2221,2221","1^6,21^4,222","21^4,33,33,33",
+"1^6,1^6,321","222,321,33,33","1^6,33,33,42",
+"222,222,33,42","1^6,222,33,51","222,222,222,51",
+"33,33,33,33,51","1^6,2211,2211","111,111,21,21,21,21",
+"1^5,1^5,32,41","1^5,221,221,41","1^5,221,32,32",
+"221,221,221,32","1^4,211,211,211","211,211,22,22,31",
+"1^4,211,22,31,31","1^4,1^4,31,31,31","22,22,22,31,31,31",
+"21,21,21,21,21,21,21","21^a,444,66","1^8,31^5,44",
+"321^4,333,333","3321^4,3^4,66","3^421^4,666,99",
+"2^5,322111,55","32^41,3^4,66","3332^41,666,99",
+"1^8,1^8,611","2^4,44,44,611","1^d,6611,77",
+"4^5,66611,aa","2^6,444,651","3^4,3^4,651",
+"651,66,66,66","3^6,6651,99","6651,666,666",
+"66651,6^4,cc","6^551,ccc,ii","2^8,655,88",
+"1^9,1^9,72","1^g,772,88","1^c,444,75",
+"2^6,3^4,75","1^c,66,66,b1","3^4,444,66,b1",
+"3^7,777,ba","1^7,2221,4111","2^41,333,4311",
+"1^9,2^41,63","21^8,3331,55","2^411,331^4,55",
+"1^7,31^4,331","2^411,32221,55","22211,2^4,422",
+"2^511,4422,66","1^8,332,422","2^5,3331,541",
+"22211,44,44,62","2^411,2^5,64","2^711,664,88",
+"1^a,3331,64","2221,2221,31^4","21^7,333,441",
+"333,333,441,81","2^6111,555,87","21^6,221^4,44",
+"221^6,3322,55","2^41^6,554,77","1^6,21^4,3111",
+"3111,321,33,33","33111,3321,333","333111,33321,66",
+"222,3111,33,42","1^6,3111,33,51","222,222,3111,51",
+"1^9,33111,54","2221^4,33211,55","1^7,3211,322",
+"3^4211,5551,88","2^4,3221,3311","333221,4442,77",
+"3222,3321,333","33222,33321,66","1^9,3222,54",
+"21^4,33,33,411","3^411,44411,77","222,321,33,411",
+"1^6,33,411,42","1^6,222,411,51","33,33,33,411,51",
+"221^4,2^4,431","2^41^4,4431,66","1^8,3311,431",
+"3^411,4433,77","33321,444,552","1^8,221^4,53",
+"3311,44,44,53","4^42,5553,99","2^4,3311,44,71",
+"3^421,555,771","4^52,7771,bb","3^611,776,aa",
+"2^41,33111,441","22111,2221,3211","2^41,3222,441",
+"2^61,4441,76","3331,3331,4411","22211,22211,431",
+"3331,3331,433","3^41,3^41,76","1^7,1^7,61,61",
+"1^d,661,661","21^5,2221,322","221^5,2^41,54",
+"2^51,33311,65","21^5,22111,331","3^41,4441,661",
+"1^7,331,43,61","2221,2221,43,61","2221,331,331,61",
+"21^4,21^4,2211","21^4,2211,33,51","22211,3311,3311",
+"1^5,311,311,32","2211,321,33,42","2211,222,321,51",
+"3322,3331,442","2211,222,42,42","2^411,442,442",
+"1^6,2211,42,51","2211,33,33,51,51","221,221,311,311",
+"1^5,2111,311,41","222111,3321,441","22111,22111,322",
+"222111,222111,54","2111,221,311,32","2111,2111,221,41",
+"1^5,221,41,41,41","2221,43,43,43","1^5,32,32,41,41",
+"331,331,43,43","221,221,32,41,41","221,32,32,32,41",
+"211,211,211,31,31","211,22,31,31,31,31","1^4,31,31,31,31,31"]];
+ B=BB[MO];
+ }
+ if(St!=1){
+ for(R=[]; B!=[]; B=cdr(B)){
+ RT=F?s2sp(car(B)|std=F):s2sp(car(B));
+ if(length(RT)<L0 || length(RT)>L1) continue;
+ R=cons(RT,R);
+ }
+ return reverse(R);
+ }else{
+ if(L0<=3 && L1>=MO+4) return B;
+ for(R=[]; B!=[]; B=cdr(B)){
+ RT=s2sp(T=car(B));
+ if(length(RT)<L0 || length(RT)>L1) continue;
+ if(F) T=s2sp(s2sp(T|std=K));
+ R=cons(T,R);
+ }
+ return reverse(R);
+ }
+ }
+ MP=(L1<MO+1)?L1:MO+1;
+ LL=newvect(MO+1);
+ R=newvect(MP+2);
+ R0=newvect(MP+2);
+ for(I=1; I<=MO; I++) LL[I]=[];
+ if(type(Sp)==4){
+ if(getopt(basic)==1) Sp=chkspt(Sp[6]);
+ R=chkspt(Sp);
+ if(R[1]>MO) return 0;
+ LL[R[1]]=R;
+ K=R[1];
+ }
+ if(K==1||type(Sp)!=4){
+ LL[1]=[[[1]]];
+ for(I=2; I<=MO && I<MP;I++){
+ for(T=[], J=0; J<I+1; J++)
+ T=cons([I-1,1],T);
+ LL[I]=cons(T,LL[I]);
+ }
+ K=2;
+ }
+ for(OD=K; OD<MO; OD++){
+ for(LT=LL[OD]; LT!=[]; LT=cdr(LT)){
+ for(II=0,L=car(LT); L!=[]; II++, L=cdr(L)){
+ R0[II]=R[II]=car(L);
+ }
+ for(; ;){
+ for(S=-2*OD, I=0; I<II; I++){
+ S += OD;
+ if(R[I]!=[]) S-=car(R[I]);
+ }
+ --I;
+ for(;S+OD<=MO && I<=MP;S+=OD,I++){
+ if(S<=0) continue;
+ for(J=0;J<=I;J++){
+ if(J>=II){
+ if(S<OD) break;
+ }else
+ if(S+((R[J]==[])?0:car(R[J]))<car(R0[J])) break;
+ }
+ if(--J>=I){
+ V=newvect(I);
+ RRR=[];
+ for(;J>=0;J--){
+ if(J>=II) RR=[OD,S];
+ else{
+ K=length(R[J]);
+ RR=[S+((K==0)?0:car(R[J]))];
+ K=length(R0[J])-K;
+ for(RT=R0[J]; RT!=[]; K--,RT=cdr(RT)){
+ if(K!=0) RR=cons(car(RT),RR);
+ }
+ }
+ RRR=cons(reverse(RR),RRR);
+ }
+ RRR=qsort(reverse(RRR));
+ if(findin(RRR,LL[S+OD])<0)
+ LL[S+OD]=cons(RRR,LL[S+OD]);
+ }
+ }
+ for(K=0; K<II; K++){
+ if(R[K]!=[]){
+ S=car(R[K]);
+ while((R[K]=cdr(R[K]))!=[] && car(R[K])==S);
+ break;
+ }else R[K]=R0[K];
+ }
+ if(K>=II) break;
+ }
+ }
+ }
+ if(L0>0 || L1<MO+1 || St==1 || F){
+ for(J=1; J<=MO; J++){
+ for(RT=[],R=LL[J];R!=[];R=cdr(R)){
+ L=length(T=car(R));
+ if(L<L0 || L>L1) continue;
+ if(F) T=s2sp(T|std=F);
+ RT=cons((St==1)?s2sp(T):T,RT);
+ }
+ LL[J] = reverse(RT);
+ }
+ }
+ if(Eq==1) return LL[MO];
+ return LL;
+}
+
+def spType2(L)
+{
+ C=0;R=[];
+ for(LT=L;LT!=[];LT=cdr(LT)){
+ D=-1;LP=car(LT);
+ for(LPT=LP;LPT!=[];LPT=cdr(LPT)){
+ if(D==-1) D=car(LPT);
+ else D=igcd(D,car(LPT));
+ if(D==1){
+ C++;break;
+ }
+ }
+ if(C==2) return 0;
+ R=cons(D,R);
+ }
+ if(C==0) return L;
+ if(C==1){
+ for(K=length(R)-1;R[K]!=1;K--);
+ D=-1;
+ for(I=length(R)-1;I>=0;I--){
+ if(I==K) continue;
+ if(D==-1) D=R[I];
+ else D=igcd(D,R[I]);
+ if(D==1) return 0;
+ }
+ }
+ return L;
+}
+
+
+/* ret [#points, order, idx, Fuchs, reduction order, reduction exponents, fund] */
+def chkspt(M)
+{
+ Opt= getopt(opt);
+ Mat= getopt(mat);
+ if(type(M)==7) M=s2sp(M);
+ if(type(Opt) >= 0){
+ if(type(Opt) == 7)
+ Opt = findin(Opt, ["sp","basic","construct","strip","short","long","sort","root"]);
+ if(Opt < 0){
+ erno(2);
+ return 0;
+ }
+ return fspt(M,Opt);
+ }
+ MR = fspt(M,1);
+ P = length(M);
+ OD = -1;
+ XM = newvect(P);
+ Fu = 0;
+ for( I = SM = SSM = 0; I < P; I++ ){
+ LJ = length(M[I]);
+ JM = JMV = 0;
+ for(J = SM = 0; J < LJ; J++){
+ MV = M[I][J];
+ if(type(MV) == 4){
+ Fu += MV[0]*MV[1];
+ MV = MV[0];
+ }
+ if(MV > JMV){
+ JM = J; JMV = MV;
+ }
+ SM += MV;
+ SSM += MV^2;
+ }
+ if(OD < 0)
+ OD = SM;
+ else if(OD != SM){
+ print("irregal partitions");
+ return 0;
+ }
+ XM[I] = JM;
+ }
+ SSM -= (P-2)*OD^2;
+ for(I = SM = JM = 0; I < P; I++){
+ MV = M[I][XM[I]];
+ if(type(MV) == 4){
+ MV = MV[0]; JM = 1;
+ }
+ if(I == 0)
+ SMM = MV;
+ else if(SMM > MV)
+ SMM = MV;
+ SM += MV;
+ }
+ SM -= (P-2)*OD;
+ if(SM > SMM && SM != 2*OD){
+ print("not realizable");
+ return -1;
+ }
+ if(JM==1 && Mat!=1)
+ Fu -= OD - SSM/2;
+ return [P, OD, SSM, Fu, SM, XM, MR];
+}
+
+def cterm(P)
+{
+ V = getopt(var);
+ if(type(V) != 4)
+ V=vars(P);
+ for(; V !=[]; V = cdr(V))
+ P = mycoef(P,0,car(V));
+ return P;
+}
+
+def terms(P,L)
+{
+ Lv=getopt(level);
+ if(type(Lv)!=1) Lv=0;
+ V=car(L);L=cdr(L);
+ for(R=[],D=mydeg(P,V);D>=0; D--){
+ if((Q=mycoef(P,D,V))==0) continue;
+ if(L!=[]){
+ R0=terms(Q,L|level=Lv+1);
+ for(;R0!=[];R0=cdr(R0)) R=cons(cons(D,car(R0)),R);
+ }else R=cons([D],R);
+ }
+ if(Lv>0) return R;
+ R=qsort(R);
+ Rev = getopt(rev); Dic=getopt(dic);
+ if(Dic==1 && Rev==1) R=reverse(R);
+ for(R0=[];R!=[];R=cdr(R)){
+ for(RT=car(R),S=0;RT!=[];RT=cdr(RT)) S+=car(RT);
+ R0=cons(cons(S,car(R)),R0);
+ }
+ if(Dic==1) return R0;
+ if(Rev==1){
+ for(R=[];R0!=[];R0=cdr(R0)){
+ T=car(R0);
+ R=cons(cons(-car(T),cdr(T)),R);
+ }
+ R0=R;
+ }
+ R0=qsort(R0);
+ if(Rev==1){
+ for(R=[];R0!=[];R0=cdr(R0)){
+ T=car(R0);
+ R=cons(cons(-car(T),cdr(T)),R);
+ }
+ R0=R;
+ }
+ return (Rev==1)?R0:reverse(R0);
+}
+
+def polcut(P,N,L)
+{
+ if(type(L)==2) L=[L];
+ M=getopt(top);
+ if(type(M)!=1) M=0;
+ T=terms(P,L);
+ for(S=0;T!=[];T=cdr(T)){
+ LT=car(T);
+ if(LT[0]<M || LT[0]>N) continue;
+ for(PW=1,LT=cdr(LT),V=L,Q=P;LT!=[];LT=cdr(LT),V=cdr(V)){
+ Q=mycoef(Q,car(LT),car(V));PW*=car(V)^car(LT);
+ }
+ S+=Q*PW;
+ }
+ return S;
+}
+
+def redgrs(M)
+{
+ Mat = getopt(mat);
+ if(Mat!=1) Mat=0;
+ R = chkspt(M|mat=Mat);
+ if(type(R) < 4)
+ return -1;
+ if(R[4] <= 0)
+ return 1-R[4];
+ if(R[4] == 2*R[1])
+ return 0;
+ V = newvect(R[0]);
+ Type = type(M[0][0]);
+ if(Type > 3){
+ Mu = Mat-1;
+ for(I = 0; I < R[0]; I++)
+ Mu += M[I][R[5][I]][1];
+ }
+ for(I = 0; I < R[0]; I++){
+ IR = R[5][I]; L = []; MI = M[I]; MIE=MI[IR];
+ for(J = length(MI)-1; J >= 0; J--){
+ if(Type <= 3){
+ VM = MI[J];
+ if(J == IR){
+ VM -= R[4];
+ if(VM < 0) return -1;
+ }
+ L = cons(VM, L);
+ }else{
+ VM = MI[J][0];
+ if(J == IR){
+ VM -= R[4];
+ if(VM < 0)
+ return -1;
+ if(I == 0)
+ EV = 1-Mat-Mu;
+ else
+ EV = 0;
+ }else{
+ if(I == 0)
+ EV = MI[J][1] - M[0][R[5][0]][1] + 1-Mat; /* + MX - Mu; */
+ else
+ EV = MI[J][1] - MIE[1] + Mu;
+ }
+ L = cons([VM,EV], L);
+/*
+ if(R[2] >= 2){ */ /* digid */
+/* P = dx^(R[1]);
+ } */
+ }
+ }
+ V[I] = L;
+ }
+ return [R[5], vtol(V)];
+}
+
+def cutgrs(A)
+{
+ for(AL=[] ; A!=[]; A=cdr(A)){ /* AT: level 2 */
+ for(ALT=[], AT=car(A); AT!=[]; AT=cdr(AT)){
+ M = (type(car(AT)) < 4)?car(AT):car(AT)[0];
+ if(M > 0)
+ ALT = cons(car(AT), ALT); /* ALT: level 2 */
+ }
+ AL = cons(reverse(ALT), AL); /* AL: level 3 */
+ }
+ return reverse(AL);
+}
+
+def mcgrs(G, R)
+{
+ NP = length(G);
+ Mat = (getopt(mat)==1)?0:1;
+ for(R = reverse(R) ; R != []; R = cdr(R)){
+ GN = [];
+ L = length(G)-1;
+ RT = car(R);
+ if(type(RT) == 4){
+ RT = reverse(RT); S = 0;
+ for(G = reverse(G); G != []; G = cdr(G), L--){
+ AD = car(RT); RT = cdr(RT);
+ if(L > 0)
+ S += AD;
+ else
+ AD = -S;
+ for(GTN = [], GT = reverse(car(G)); GT != []; GT = cdr(GT))
+ GTN = cons([car(GT)[0],car(GT)[1]+AD], GTN);
+ GN = cons(GTN, GN);
+ }
+ G = GN;
+ continue;
+ }
+ VP = newvect(L+1); GV = ltov(G);
+ for(I = S = OD = 0; I <= L; I++){
+ RTT = (I==0)?(Mat-RT):0;
+ VP[I] = -1;
+ for(J = M = 0, GT = GV[I]; GT != []; GT = cdr(GT), J++){
+ if(I == 0)
+ OD += car(GT)[0];
+ if(car(GT)[1] == RTT && car(GT)[0] > M){
+ S += car(GT)[0]-M;
+ VP[I] = J;
+ }
+ }
+ S -= (L-1)*OD;
+ for(GN = [] ; L >= 0; L--){
+ GT = GV[L];
+ RTT = (L==0)?(-RT):RT;
+ FTN = (VP[L] >= 0 || S == 0)?[]:[-S,(L==0)?(Mat-RT):0];
+ for(J = 0; GT != []; GT = cdr(GT), J++){
+ if(J != VP[L]){
+ GTN = cons([car(GT)[0],car(GT)[1]+RTT], GTN);
+ continue;
+ }
+ K = car(GT)[0] - S;
+ if(K < 0){
+ print("Not realizable");
+ return;
+ }
+ GTN = cons([K,(L==0)?(Mat-RT):0], GTN);
+ }
+ GN = cons(reverse(GTN), GN);
+ }
+ }
+ G = cutgrs(GN);
+ }
+ return G;
+}
+
+/*
+ F=0 : unify
+ F=["add",S] :
+ F=["sub",S] :
+ F=["+",A,B] :
+ F=["*",A,B] :
+ F=["mul",K];
+ F=["get",F,V] :
+ F=["put",F,V] :
+ F=["get1",F,V] :
+ F=["put1",F,V] :
+ F=["put1"] :
+ F=["val",F];
+ F=["swap"];
+ */
+def anal2sp(R,F)
+{
+ if(type(F)==4&&type(F[0])==4){ /* multiple commands */
+ for(;F!=[];F=cdr(F)) R=anal2sp(R,car(F));
+ return R;
+ }
+ if(type(F)==7) F=[F];
+ if(F==0){ /* unify */
+ R=ltov(R);
+ L=length(R);
+ for(J=1;J<L;J++){
+ for(I=0;I<J;I++){
+ if(cdr(R[I])==cdr(R[J])){
+ R[I]=cons(R[I][0]+R[J][0],cdr(R[I]));
+ R[J]=cons(0,cdr(R[J]));
+ break;
+ }
+ }
+ }
+ for(G=[],I=L-1;I>=0;I--)
+ if(R[I][0]!=0) G=cons(R[I],G);
+ if(length(G[0])==2){ /* sort by multiplicity */
+ R=ltov(G);
+ L=length(R);
+ for(I=1;I<L;I++){
+ for(J=I;J>0;J--){
+ if(R[J-1][0]>R[J][0]) break;
+ if(R[J-1][0]==R[J][0]){
+ S1=rtostr(R[J-1][1]);S2=rtostr(R[J][1]);
+ if((K=str_len(S1)-str_len(S2))<0) break;
+ if(!K&&S1<S2) break;
+ }
+ S=R[J-1];R[J-1]=R[J];R[J]=S;
+ }
+ }
+ G=vtol(R);
+ }
+ return G;
+ }
+ if(F[0]=="add") return append(R,F[1]);
+ R=reverse(R);
+ if(F[0]=="sub"){
+ for(S=F[1];S!=[];S=cdr(S))
+ R=cons(cons(-car(S)[0],cdr(car(S))),R);
+ return reverse(R);
+ }
+ if(F[0]=="swap"){
+ for(G=[];R!=[];R=cdr(R))
+ G=cons([car(R)[0],car(R)[2],car(R)[1]],G);
+ return G;
+ }
+ if(F[0]=="+"){
+ for(G=[];R!=[];R=cdr(R))
+ G=cons([car(R)[0],car(R)[1]+F[1],car(R)[2]+F[2]],G);
+ return G;
+ }
+ if(F[0]=="*"){
+ for(G=[];R!=[];R=cdr(R))
+ G=cons([car(R)[0],car(R)[1]*F[1]+car(R)[2]*F[2]],G);
+ return G;
+ }
+ if(F[0]=="mult"){
+ K=F[1];
+ for(G=[];R!=[];R=cdr(R)) G=cons(cons(K*car(R)[0],cdr(car(R))),G);
+ return G;
+ }
+ if(F[0]=="get"){
+ for(G=[];R!=[];R=cdr(R))
+ if(car(R)[F[1]]==F[2]) G=cons(car(R),G);
+ return G;
+ }
+ if(F[0]=="put"){
+ if(F[1]==1){
+ for(G=[];R!=[];R=cdr(R)) G=cons([car(R)[0],F[2],car(R)[2]],G);
+ }else{
+ for(G=[];R!=[];R=cdr(R)) G=cons([car(R)[0],car(R)[1],F[2]],G);
+ }
+ return G;
+ }
+ if(F[0]=="get1"){
+ if(length(F)==2){
+ for(G=[];R!=[];R=cdr(R)) G=cons([R[0][0],car(R)[F[1]]],G);
+ return G;
+ }
+ for(G=[];R!=[];R=cdr(R))
+ if(car(R)[F[1]]==F[2]) G=cons([R[0][0],car(R)[3-F[1]]],G);
+ return G;
+ }
+ if(F[0]=="put1"){
+ if(length(F)==1)
+ for(G=[];R!=[];R=cdr(R)) G=cons([car(R)[0],car(R)[1],car(R)[1]],G);
+ else if(F[1]==1)
+ for(G=[];R!=[];R=cdr(R)) G=cons([car(R)[0],F[2],car(R)[1]],G);
+ else{
+ for(G=[];R!=[];R=cdr(R)) G=cons([car(R)[0],car(R)[1],F[2]],G);
+ }
+ return G;
+ }
+ if(F[0]=="val"){
+ V=(length(F)==1)?1:F[1];
+ for(I=J=0;R!=[];R=cdr(R)){
+ I+=car(R)[0];
+ J+=car(R)[0]*car(R)[V];
+ }
+ return [I,J];
+ }
+ return 0;
+}
+
+/*
+ G=0 get trivial common spct
+ G="..,..," spectre type of 4 singular points
+ P=["get"] all spct
+ P=["get",L]
+ L=n for variable x_n
+ L=[m,n] for residue [m,n]
+ L=[[m,n],[m',n']] for common spct
+ P=["get0",[m,n],[m',n']] for the sum of residues
+ P=["swap",[m,n]] for symmetry
+ P=["perm",[...]] for symmetry
+ P=["deg"]
+ P=["homog"]
+ P=["sort"]
+ P=[[[m,n],c],...] for addition
+ P=[c] or [[c],...] for middle convolution wrt 0
+ P=[m,c] or [[m,c],...] for general middle convolution
+ P=[[a,b,c]] for special additions
+ P=[[d,a,b,c]] for middle convotution and additions
+ P=["multi",...] multiple commands
+ P=0,1,3 : return sim. spectre of 4 singular points
+*/
+def mc2grs(G,P)
+{
+ if(G==0){
+ G=[];
+ for(I=4;I>=0;I--){
+ V=lsort([0,1,2,3,4],[I],1);
+ for(J=1;J<4;J++){
+ for(T=[],K=3;K>0;K--)
+ if(K!=J) T=cons(V[K],T);
+ G=cons([[[V[0],V[J]],T],[1,0,0]],G);
+ }
+ }
+ G=mc2grs(G,"sort");
+ }else if(type(G)==7||(type(G)==4&&length(G)==4)){
+ if(type(G)==7) G=s2sp(G);
+ F=(getopt(top)==0)?1:0;
+ K=[];
+ if(type(P)==1&&iand(P,1)&&type(G[0][0])<4){
+ G=s2sp(G|std=1);
+ if(F) G=[G[1],G[2],G[3],G[0]];
+ G=sp2grs(G,[d,c,b,a],[1,length(G[0]),-1]|mat=1);
+ G=reverse(G);
+ if(iand(P,3)==3){
+ V=vars(G);
+ for(H=L=[a,b,c,d];H!=[];H=cdr(H))
+ if(findin(car(H),V)>=0) G=subst(G,car(H),makev([car(H),1]));
+ G=shortv(G,[a,b,c,d]);
+ V=vars(G);
+ for(H=G[3];H!=[];H=cdr(H)){
+ T=car(H)[1];
+ if(type(T)>1&&!isvar(T)){
+ K=[car(H)[0],T];
+ break;
+ }
+ }
+ }
+ F=1;
+ }
+ if(F) G=[G[3],G[0],G[1],G[2]];
+ S=cons(["anal",1],getopt());
+ if(!(R=m2mc(G,0|option_list=S))) return R;
+ for(G=0,R=cdr(R);R!=[];R=cdr(R)){
+ TR=car(R)[0];
+ if(TR[0]) G=mc2grs(G,[[TR[0]]]);
+ G=mc2grs(G,[cdr(TR)]);
+ }
+ if(type(P)==1&&K!=[]){
+ for(T=10;T<36;T++){
+ if(findin(X=makev([T]),V)>=0) continue;
+ F=K[0]*(X-K[1]);
+ return [F,simplify(G,[F],4)];
+ }
+ }
+ }
+ if(type(P)<2) return G;
+ F=0;
+ if(type(P)==7||(type(P)==4&&type(P[0])<4)) P=[P];
+ if((Dvi=getopt(dviout))!=1&&Dvi!=2&&Dvi!=-1) Dvi=0;
+ Keep=(Dvi==2)?1:0;
+ if(type(P)==4&&type(F=car(P))==7){
+ if(F=="mult"){
+ for(P=cdr(P);P!=[];P=cdr(P)) G=mc2grs(G,car(P)|option_list=getopt());
+ return G;
+ }
+ if(F=="show"){
+ for(R=str_tb(0,0);G!=[];){
+ L=car(G);
+ I=L[0][0];J=L[0][1];
+ str_tb("[A_{"+rtostr(I[0])+rtostr(I[1])+"}:A_{"+rtostr(J[0])+rtostr(J[1])
+ +"}]&=\\left\\{",R);
+ for(L=cdr(L);;){
+ S=car(L);
+ str_tb("["+my_tex_form(S[1])+":"+my_tex_form(S[2])+"]",R);
+ if(S[0]!=1) str_tb("_{"+rtostr(S[0])+"}",R);
+ if((L=cdr(L))==[]) break;
+ str_tb(",\\,",R);
+ }
+ str_tb("\\right\\}",R);
+ if((G=cdr(G))==[]) break;
+ str_tb(",\\\\\n",R);
+ }
+ R=texbegin("align*",str_tb(0,R));
+ if(Dvi!=-1) dviout(R|keep=Keep);
+ return R;
+ }
+ if(F=="show0"){
+ for(S="",L=[];G!=[];G=cdr(G)){
+ for(TL=[],TG=cdr(car(G));TG!=[];TG=cdr(TG)) TL=cons(car(TG)[0],TL);
+ TL=msort(TL,[-1,0]);
+ if(Dvi){
+ if(S!="") S=S+",";
+ for(I=J=0,T=append(TL,[[0]]);T!=[];T=cdr(T)){
+ if(car(T)==I) J++;
+ else{
+ if(I>0&&J>0){
+ if(I>9) S=S+"("+rtostr(I)+")";
+ else S=S+rtostr(I);
+ if(J>1){
+ if(J>9) S=S+"^{"+rtostr(J)+"}";
+ else S=S+"^"+rtostr(J);
+ }
+ }
+ I=car(T);J=1;
+ }
+ }
+ }
+ L=cons(TL,L);
+ }
+ if(Dvi){
+ if(Dvi!=-1) dviout(S|eq=0);
+ return S;
+ }
+ return reverse(L);
+ }
+ if(F=="sort"){
+ G=ltov(G);L=length(G);
+ for(I=0;I<L;I++){
+ S=G[I][0];
+ if(S[0][0]>S[0][1]) S=[[S[0][1],S[0][0]],S[1]];
+ if(S[1][0]>S[1][1]) S=[S[0],[S[1][1],S[1][0]]];
+ if(S[0]>S[1]){
+ F=0;S=[S[1],S[0]];
+ }
+ if(S!=G[I][0]){
+ if(F==0) G[I]=cons(S,anal2sp(cdr(G[I]),"swap"));
+ else G[I]=cons(S,cdr(G[I]));
+ }
+ for(J=I;J>0;J--){
+ if(G[J-1][0]<G[J][0]) break;
+ S=G[J-1];G[J-1]=G[J];G[J]=S;
+ }
+ }
+ return vtol(G);
+ }
+ if(F=="get"||F=="get0"){
+ if(Dvi!=0) F="get";
+ if(length(P)==1||type(P[1])<2){
+ L=[];
+ if(length(P)==1){
+ for(I=3;I>=0;I--){
+ for(J=4;J>I;J--) L=cons(mc2grs(G,[F,[I,J]]),L);
+ }
+ }else{
+ for(I=P[1],J=4;J>=0;J--){
+ if(I==J) continue;
+ L=cons(mc2grs(G,[F,(I<J)?[I,J]:[J,I]]),L);
+ }
+ }
+ if(Dvi){
+ if(length(L)==10){
+ R=ltov(L);
+ if(R[6][0]==[1,4]){
+ S=R[6];R[6]=R[7];R[7]=S;
+ L=vtol(R);
+ }
+ }
+ for(R=S=[],L=reverse(L);L!=[];L=cdr(L)){
+ T=car(L);
+ R=cons(cdr(T),R);
+ if(S==[]) S="A_{"+rtostr(T[0][0])+rtostr(T[0][1])+"}\\\\\n";
+ else S="A_{"+rtostr(T[0][0])+rtostr(T[0][1])+"}&"+S;
+ }
+ L=ltotex(R|opt="GRS",pre=S);
+ if(Dvi>0) dviout(L|eq=0,keep=Keep);
+ }
+ return L; /* get all spct */
+ }
+ if(type(T=P[1])==4){
+ if(F=="get0"&&length(P)==3&&type(I=P[1])==4&&type(J=P[2])==4){
+ if(I[0]>I[1]) I=[I[1],I[0]];
+ if(J[0]>J[1]) J=[J[1],J[0]];
+ if(I[0]>I[0]){S=I;I=J;J=S;};
+ K=lsort(I,J,0);
+ if(length(K)==4){
+ S=sp2grs(G,["get0",[I,J]]);
+ return anal2sp(S,[["*",1,1],0]);
+ }
+ I=lsort(K,lsort(I,J,2),1);
+ S=lsort([0,1,2,3,4],K,1);
+ D=sp2grs(G,"deg");
+ if(findin(4,S)<0) D=-D;
+ J=sp2grs(G,["get0",[I,S]]);
+ if(I[0]>S[0]) J=sp2grs(J,"swap");
+ return anal2sp(J,[["+",0,D],["*",-1,1]]);
+ }
+ if(type(car(T))==4){
+ if(T[0][0]>T[0][1]) T=[[T[0][1],T[0][0]],T[1]];
+ if(T[1][0]>T[1][1]) T=[T[0],[T[1][1],T[1][0]]];
+ if(T[0][0]>T[1][0]) T=[T[1],T[0]];
+ for(PG=G;PG!=[];PG=cdr(PG))
+ if(car(PG)[0]==T) return (F=="get")?car(PG):cdr(car(PG));
+ return []; /* get common spct */
+ }
+ if(T[0]>T[1]) T=[T[1],T[0]];
+ for(FT=0,PG=G;PG!=[];PG=cdr(PG)){
+ if(car(PG)[0][0]==T){
+ FT=1;break;
+ }
+ if(car(PG)[0][1]==T){
+ FT=2;break;
+ }
+ }
+ if(!FT) return [];
+ L=anal2sp(cdr(car(PG)),[["get1",FT],0]);
+ return (F=="get")?cons(T,L):L;
+ }
+ }
+ if(F=="deg"){
+ for(S=I=0;I<3;I++){
+ for(J=I+1;J<4;J++){
+ L=mc2grs(G,["get0",[I,J]]);
+ L=anal2sp(L,"val");
+ S+=L[1];
+ }
+ }
+ return S/L[0];
+ }
+ if(F=="spct"){
+ G=mc2grs(G,"get");
+ M=newmat(5,5);
+ for(;G!=[];G=cdr(G)){
+ GT=car(G);I=GT[0][0];J=GT[0][1];
+ for(S=0,L=[],GT=cdr(GT);GT!=[];GT=cdr(GT)){
+ L=cons(car(GT)[0],L);
+ }
+ L=reverse(qsort(L));
+ M[I][J]=M[J][I]=L;
+ }
+ for(D=0,GT=M[0][1];GT!=[];GT=cdr(GT)) D+=car(GT);
+ for(I=0;I<5;I++){
+ S=-2*D^2;
+ for(J=0;J<5;J++){
+ if(I==J) continue;
+ for(L=M[I][J];L!=[];L=cdr(L)) S+=car(L)^2;
+ }
+ M[I][I]=S;
+ }
+ if(Dvi){
+ S=[];
+ for(I=4;I>=0;I--){
+ L=[M[I][I]];
+ for(J=4;J>=0;J--){
+ if(I==J) L=cons("",L);
+ else L=cons(s2sp([M[I][J]]),L);
+ }
+ S=cons(L,S);
+ }
+ S=cons([x0,x1,x2,x3,x4,"idx"],S);
+ M=ltotex(S|opt="tab",hline=[0,1,z],vline=[0,1,z-1,z],left=["","$x_0$","$x_1$","$x_2$","$x_3$","$x_4$"]);
+ if(Dvi>0) dviout(M|keep=Keep);
+ }
+ return M;
+ }
+ if(F=="swap"||F=="perm"){
+ if(F=="perm") TR=P[1];
+ else{
+ TR=newvect(5,[0,1,2,3,4]);
+ K=P[1][0];L=P[1][1];
+ TR[K]=L;TR[L]=K;
+ if(TR[4]!=4) G=mc2grs(G,"deg");
+ }
+ V=newvect(2);
+ for(L=[],T=G;T!=[];T=cdr(T)){
+ TP=car(T)[0];
+ for(TQ=[],I=1;I>=0;I--){
+ V=[TR[TP[I][0]],TR[TP[I][1]]];
+ if(V[0]>V[1]) V=[V[1],V[0]];
+ TQ=cons(V,TQ);
+ }
+ if(TQ[0][0]<TQ[1][0]){
+ L=cons(cons(TQ,cdr(car(T))),L);
+ continue;
+ }
+ TQ=[[TQ[1],TQ[0]]];
+ for(TP=cdr(car(T));TP!=[];TP=cdr(TP))
+ TQ=cons([car(TP)[0],car(TP)[2],car(TP)[1]],TQ);
+ L=cons(reverse(TQ),L);
+ }
+ return mc2grs(L,"sort");
+ }
+ if(F=="homog"){
+ V=mc2grs(G,"deg");
+ return mc2grs(G,[[[2,3],-V]]);
+ }else if(F=="deg"){
+ R=mc2grs(G,4);
+ for(V=0;R!=[];R++){
+ for(TR=cdr(R);TR!=[];TR=cdr(TR))
+ V+=car(TR)[0]*car(TR)[1];
+ }
+ return -V;
+ }
+ }
+ if(type(F)!=4) return 0;
+ if(type(P[0])!=4) P=[P];
+ for(;P!=[];P=cdr(P)){
+ if(type((S=P[0])[0])==4){ /* addition */
+ T=P[0][0];
+ if(T[0]>T[1]) T=[T[1],T[0]];
+ T1=[T[0],4];T2=[T[1],4];
+ for(L=[],PG=reverse(G);PG!=[];PG=cdr(PG)){
+ R=car(PG);R0=R[0];F=0;K=P[0][1];
+ if(R0[0]==T) F=1;
+ else if(R0[1]==T) F=2;
+ else if(getopt(unique)!=1){
+ K=-K;
+ if(R0[0]==T1||R0[0]==T2) F=1;
+ else if(R0[1]==T1||R0[1]==T2) F=2;
+ }
+ if(F==0) L=cons(R,L);
+ else{
+ R1=anal2sp(cdr(R),(F==1)?["+",K,0]:["+",0,K]);
+ L=cons(cons(R0,R1),L);
+ }
+ }
+ G=L;
+ }else if(type(S[0])<4){
+ if(length(S)==1){ /* mc wrt0 4:cases */
+ U=mc2grs(G,"deg");
+ C=P[0][0];
+ L=[];
+ /* [[0,1],[2,3]] : [K=[0,k],J=[i,j]], S=[k,4] : 3 cases */
+ for(K=1;K<4;K++){
+ J=lsort([1,2,3],[K],1);
+ K4=[K,4];K0=[0,K];
+ G0=mc2grs(G,["get0",[K0,J]]);
+ LT=anal2sp(G0,["+",C,0]);
+ G0=mc2grs(G,["get0",J]);
+ L0=anal2sp(G0,["put1",1,0]);
+ LT=anal2sp(LT,["add",L0]);
+ G0=mc2grs(G,["get0",K4]);
+ L0=anal2sp(G0,[["put1",1,0],["+",0,U]]);
+ LT=anal2sp(LT,["add",L0]);
+ G0=mc2grs(G,["get0",[[0,J[0]],K4]]);
+ L0=anal2sp(G0,[["get",1,0],["+",0,U]]);
+ LT=anal2sp(LT,["sub",L0]);
+ G0=mc2grs(G,["get0",[[0,J[1]],K4]]);
+ L0=anal2sp(G0,[["get",1,0],["+",0,U]]);
+ LT=anal2sp(LT,["sub",L0]);
+ G0=mc2grs(G,["get0",[K0,J]]);
+ L0=anal2sp(G0,[["get",1,0],["+",C,0]]);
+ LT=anal2sp(LT,["sub",L0]);
+ G0=mc2grs(G,["get0",[[0,4],J]]);
+ L0=anal2sp(G0,[["+",-C,0],["get",1,0]]);
+ LT=anal2sp(LT,[["sub",L0],0]);
+ L=cons(cons([K0,J],LT),L);
+ }
+ /* [[0,1],[2,4]] : [K,I]=[[0,k],[i,4]] S=[j,k] : 6 cases */
+ for(K=1;K<4;K++){
+ for(I=1;I<4;I++){
+ if(I==K) continue;
+ for(J=1;J<4;J++) if(J!=I&&J!=K) break;
+ I4=[I,4];S=(J<K)?[J,K]:[K,J];K0=[0,K];
+ G0=cdr(mc2grs(G,["get",[K0,I4]]));
+ LT=anal2sp(G0,["+",C,0]);
+ G0=cdr(mc2grs(G,["get",I4]));
+ L0=anal2sp(G0,["put1",1,0]);
+ LT=anal2sp(LT,["add",L0]);
+ G0=cdr(mc2grs(G,["get",S]));
+ L0=anal2sp(G0,[["put1",1,0],["+",0,-C-U]]);
+ LT=anal2sp(LT,["add",L0]);
+
+ G0=cdr(mc2grs(G,["get",[[0,I],S]]));
+ L0=anal2sp(G0,[["get",1,0],["+",0,-C-U]]);
+ LT=anal2sp(LT,["sub",L0]);
+ G0=cdr(mc2grs(G,["get",[[0,J],I4]]));
+ L0=anal2sp(G0,["get",1,0]);
+ LT=anal2sp(LT,["sub",L0]);
+ G0=cdr(mc2grs(G,["get",[K0,I4]]));
+ L0=anal2sp(G0,[["get",1,0],["+",C,0]]);
+ LT=anal2sp(LT,["sub",L0]);
+ G0=cdr(mc2grs(G,["get",[[0,4],S]]));
+ L0=anal2sp(G0,[["get",1,C],["+",-C,-C-U]]);
+ LT=anal2sp(LT,[["sub",L0],0]);
+ L=cons(cons([K0,I4],LT),L);
+ }
+ }
+ /* [[0,4],[2,3]] : [[0,4],J]=[[0,4],[i,j]] 3 cases */
+ for(K=3;K>0;K--){
+ J=lsort([1,2,3],[K],1);
+ G0=mc2grs(G,["get0",[[0,4],J]]);
+ LT=anal2sp(G0,["+",-C,0]);
+ G0=mc2grs(G,["get0",J]);
+ L0=anal2sp(G0,["put1",1,-C]);
+ LT=anal2sp(LT,["add",L0]);
+ G0=mc2grs(G,["get0",[K,4]]);
+ L0=anal2sp(G0,[["put1",1,-C],["+",0,U]]);
+ LT=anal2sp(LT,["add",L0]);
+
+ G0=mc2grs(G,["get0",[[0,J[0]],[K,4]]]);
+ L0=anal2sp(G0,[["get",1,0],["+",-C,U]]);
+ LT=anal2sp(LT,["sub",L0]);
+ G0=mc2grs(G,["get0",[[0,J[1]],[K,4]]]);
+ L0=anal2sp(G0,[["get",1,0],["+",-C,U]]);
+ LT=anal2sp(LT,["sub",L0]);
+ G0=mc2grs(G,["get0",[[0,K],J]]);
+ L0=anal2sp(G0,[["get",1,0],["+",-C,0]]);
+ LT=anal2sp(LT,["sub",L0]);
+ G0=mc2grs(G,["get0",[[0,4],J]]);
+ L0=anal2sp(G0,[["get",1,C],["put",1,0]]);
+ LT=anal2sp(LT,[["sub",L0],0]);
+ L=cons(cons([[0,4],J],LT),L);
+ }
+ /* [[1,2],[3,4]] : [J,K]=[[i,j],[k,4]] 3 cases */
+ for(K=3;K>0;K--){
+ J=lsort([1,2,3],[K],1);
+ if(K>1)
+ LT=mc2grs(G,["get0",[J,[K,4]]]);
+ else{
+ LT=mc2grs(G,["get0",[[K,4],J]]);
+ LT=anal2sp(LT,"swap");
+ }
+ G0=mc2grs(G,["get0",J]);
+ L0=anal2sp(G0,[["put1"],["+",0,-C-U]]);
+ LT=anal2sp(LT,["add",L0]);
+ G0=mc2grs(G,["get0",[K,4]]);
+ L0=anal2sp(G0,[["put1"],["+",U,0]]);
+ LT=anal2sp(LT,["add",L0]);
+
+ G0=mc2grs(G,["get0",[[0,J[0]],[K,4]]]);
+ L0=anal2sp(G0,[["get1",1,0],["put1"],["+",U,0]]);
+ LT=anal2sp(LT,["sub",L0]);
+ G0=mc2grs(G,["get0",[[0,J[1]],[K,4]]]);
+ L0=anal2sp(G0,[["get1",1,0],["put1"],["+",U,0]]);
+ LT=anal2sp(LT,["sub",L0]);
+ G0=mc2grs(G,["get0",[[0,K],J]]);
+ L0=anal2sp(G0,[["get1",1,0],["put1"],["+",0,-C-U]]);
+ LT=anal2sp(LT,["sub",L0]);
+ G0=mc2grs(G,["get0",[[0,4],J]]);
+ L0=anal2sp(G0,[["get1",1,C],["put1"],["+",0,-C-U]]);
+ LT=anal2sp(LT,[["sub",L0],0]);
+ if(K==1){
+ LT=anal2sp(LT,"swap");
+ L=cons(cons([[K,4],J],LT),L);
+ }else L=cons(cons([J,[K,4]],LT),L);
+ }
+ G=L;
+ }else if(length(S)==2){ /* general mc */
+ if(S[1]!=0){
+ I=S[0];
+ if(I!=0) G=mc2grs(G,["swap",[0,I]]);
+ G=mc2grs(G,[S[1]]);
+ if(I!=0) G=mc2grs(G,["swap",[0,I]]);
+ }
+ }else if(length(S)==3||length(S)==4){ /* addition */
+ for(I=1;I<4;I++,S=cdr(S))
+ if(S[0]) G=mc2grs(G,[[[0,I],S[0]]]);
+ if(length(S)==1 && S[0]) /* mc */
+ G=mc2grs(G,[S[0]]);
+ }
+ }
+ }
+ return mc2grs(G,"sort");
+}
+
+def mcmgrs(G,P)
+{
+ if(type(G)<2){
+ if(G>1){
+ N=G+2;G=[];
+ for(I=1;I<=N;I++){
+ for(J=1;J<N;J++){
+ if(I==J) continue;
+ for(K=J+1;K<=N;K++){
+ if(I==K) continue;
+ G=cons([[[0,I],[J,K]],[1,0,0]],G);
+ }
+ }
+ }
+ for(I=1;I<=N;I++){
+ for(J=1;J<I;J++) G=cons([[[0,I],[0,J,I]],[1,0,0]],G);
+ for(J=I+1;J<=N;J++) G=cons([[[0,I],[0,I,J]],[1,0,0]],G);
+ }
+ return reverse(G);
+ }
+ return 0;
+ }
+ if(type(G)==7) G=os_md.s2sp(G);
+ if(type(G)!=4||type(G[0])!=4) return 0;
+ if(type(G[0][0])!=4){ /* spectre type -> GRS */
+ G=s2sp(G|std=1);
+ L=length(G);
+ for(V=[],I=L-2;I>=0;I--) V=cons(makev([I+10]),V);
+ V=cons(makev([L+9]),V);
+ G=sp2grs(G,V,[1,length(G[0]),-1]|mat=1);
+ if(getopt(short)!=0){
+ V=append(cdr(V),[V[0]]);
+ G=shortv(G,V);
+ }
+ R=chkspt(G|mat=1);
+ if(R[2] != 2 || R[3] != 0 || !(R=getbygrs(G,1|mat=1))) return 0;
+ if(getopt(anal)==1) return R; /* called by mcmgrs() */
+ if(!(G=mcmgrs(L-2,0))) return 0;
+ for(R=cdr(R);R!=[];R=cdr(R)){
+ TR=car(R)[0];
+ if(TR[0]) G=mcmgrs(G,[[TR[0]]]);
+ G=mcmgrs(G,[cdr(TR)]);
+ }
+ }
+ L=length(G);
+ for(N=4;N<25;N++){
+ K=N^2*(N-1)/2;
+ if(K>L) return 0;
+ if(K==L) break;
+ }
+ if(type(P)<2) return G;
+ F=0;
+ if(type(P)==7||(type(P)==4&&type(P[0])<4)) P=[P];
+ if((Dvi=getopt(dviout))!=1&&Dvi!=2&&Dvi!=-1) Dvi=0;
+ Keep=(Dvi==2)?1:0;
+ if(type(P)==4 && type(F=car(P))==7){
+ if(F=="mult"){
+ for(P=cdr(P);P!=[];P=cdr(P)) G=os_md.mc2grs(G,car(P)|option_list=getopt());
+ return G;
+ }
+ if(F=="get"||F=="get0"){
+ if(Dvi!=0) F="get";
+ if(length(P)==2){
+ if(type(P[1])==4){
+ if(type(P[1][1])==4){ /* [[,],[,]] */
+ for(PG=reverse(G);PG!=[];PG=cdr(PG)){
+ TP=car(PG);
+ if(TP[0]==P[1]) return (F=="get")?TP:cdr(TP);
+ }
+ return [];
+ }
+ if(P[1][0]==0){
+ if(length(P[1])==2){ /* [0,] */
+ for(J=1;J<=N;J++) if(J!=P[1][1]) break;
+ for(K=J+1;K<=N;K++) if(K!=P[1][1]) break;
+ L=mcmgrs(G,["get0",[P[1],[J,K]]]);
+ L=anal2sp(L,["get1",1]);
+ }else{ /* [0,*,*] */
+ L=mcmgrs(G,["get0",[[P[1][0],P[1][1]],P[1]]]);
+ L=anal2sp(L,["get1",2]);
+ }
+ }else{ /* [,] */
+ for(J=1;J<=N;J++) if(J!=P[1][0]&&J!=P[1][1]) break;
+ L=mcmgrs(G,["get0",[[0,J],P[1]]]);
+ L=anal2sp(L,["get1",2]);
+ }
+ L=anal2sp(L,0);
+ if(F=="get") L=cons(P[1],L);
+ return L;
+ }else{ /* I */
+ for(L=[],I=P[1],J=0;J<=N;J++){
+ if(I==J) continue;
+ II=(I<J)?[I,J]:[J,I];
+ L=cons(mcmgrs(G,[F,II]),L);
+ }
+ }
+ }else{
+ for(L=[],I=0;I<N;I++){
+ for(J=I+1;J<=N;J++) L=cons(mcmgrs(G,[F,[I,J]]),L);
+ }
+ }
+ if(Dvi){
+ for(R=S=[];L!=[];L=cdr(L)){
+ T=car(L);
+ R=cons(cdr(T),R);
+ if(S==[]) S="A_{"+rtostr(T[0][0])+rtostr(T[0][1])+"}\\\\\n";
+ else S="A_{"+rtostr(T[0][0])+rtostr(T[0][1])+"}&"+S;
+ }
+ L=ltotex(R|opt="GRS",pre=S);
+ if(type(V=getopt(div))!=4) V=[];
+ if(V==[]&&(K=length(R))>10)
+ for(I=9;I<K;I+=9) V=cons(I,V);
+ V=reverse(V);
+ if(V!=[]) L=divmattex(L,V);
+ if(Dvi>0){
+ if(V!=[]) dviout(L|keep=Keep);
+ else dviout(L|eq=0,keep=Keep);
+ }
+ }else L=reverse(L);
+ return L;
+ }
+ if(F=="show"){
+ for(R=str_tb(0,0);G!=[];){
+ L=car(G);
+ I=L[0][0];J=L[0][1];
+ str_tb("[A_{"+rtostr(I[0])+rtostr(I[1])+"}:A_{"+rtostr(J[0])+rtostr(J[1]),R);
+ if(length(J)==3) str_tb(rtostr(J[2]),R);
+ str_tb("}]&=\\left\\{",R);
+ for(L=cdr(L);;){
+ S=car(L);
+ str_tb("["+my_tex_form(S[1])+":"+my_tex_form(S[2])+"]",R);
+ if(S[0]!=1) str_tb("_{"+rtostr(S[0])+"}",R);
+ if((L=cdr(L))==[]) break;
+ str_tb(",\\,",R);
+ }
+ str_tb("\\right\\}",R);
+ if((G=cdr(G))==[]) break;
+ str_tb(texcr(43),R);
+ }
+ R=texbegin("align*",str_tb(0,R));
+ if(Dvi!=-1) dviout(R|keep=Keep);
+ return R;
+ }
+ if(F=="show0"){
+ for(C=N*(N-1)*(N-2)/2,S="",L=[];G!=[];G=cdr(G)){
+ for(TL=[],TG=cdr(car(G));TG!=[];TG=cdr(TG)) TL=cons(car(TG)[0],TL);
+ TL=msort(TL,[-1,0]);
+ if(Dvi){
+ if(S!=""){
+ if(--C==0) S=S+";";
+ else S=S+",";
+ }
+ for(I=J=0,T=append(TL,[[0]]);T!=[];T=cdr(T)){
+ if(car(T)==I) J++;
+ else{
+ if(I>0&&J>0){
+ if(I>9) S=S+"("+rtostr(I)+")";
+ else S=S+rtostr(I);
+ if(J>1){
+ if(J>9) S=S+"^{"+rtostr(J)+"}";
+ else S=S+"^"+rtostr(J);
+ }
+ }
+ I=car(T);J=1;
+ }
+ }
+ }
+ L=cons(TL,L);
+ }
+ if(Dvi){
+ if(Dvi!=-1) dviout(S|eq=0);
+ return S;
+ }
+ return reverse(L);
+ }
+ if(F=="spct"){
+ G=mcmgrs(G,"get");
+ M=newmat(N+1,N+1);
+ for(;G!=[];G=cdr(G)){
+ GT=car(G);I=GT[0][0];J=GT[0][1];
+ for(S=0,L=[],GT=cdr(GT);GT!=[];GT=cdr(GT)){
+ L=cons(car(GT)[0],L);
+ }
+ L=reverse(qsort(L));
+ M[I][J]=M[J][I]=L;
+ }
+ for(D=0,GT=M[0][1];GT!=[];GT=cdr(GT)) D+=car(GT);
+ for(I=0;I<=N;I++){
+ S=-(N-2)*D^2;
+ for(J=0;J<=N;J++){
+ if(I==J) continue;
+ for(L=M[I][J];L!=[];L=cdr(L)) S+=car(L)^2;
+ }
+ M[I][I]=S;
+ }
+ if(Dvi){
+ S=[];
+ for(LS=[],I=N;I>=0;I--){
+ L=[M[I][I]];
+ for(J=N;J>=0;J--){
+ if(I==J) L=cons("",L);
+ else L=cons(s2sp([M[I][J]]),L);
+ }
+ S=cons(L,S);
+ LS=cons("$x_"+rtostr(I)+"$",LS);
+ }
+ S=cons(append(LS,["idx"]),S);
+ M=ltotex(S|opt="tab",hline=[0,1,z],vline=[0,1,z-1,z],left=cons("",LS));
+ if(Dvi>0) dviout(M|keep=Keep);
+ }
+ return M;
+ }
+ if(F=="deg"){
+ for(S=I=0;I<N-1;I++){
+ for(J=I+1;J<N;J++){
+ L=mcmgrs(G,["get0",[I,J]]);
+ L=anal2sp(L,"val");
+ S+=L[1];
+ }
+ }
+ return S/L[0];
+ }
+ }
+ L=[];
+ if(type(F)!=4) return 0;
+ if(type(P[0])!=4||length(P[0])==2) P=[P];
+ for(;P!=[];P=cdr(P)){
+ if(type(T=(S=car(P))[0])==4){ /* addition */
+ if((K=P[0][1])!=0){
+ if(T[0]>T[1]) T=[T[1],T[0]];
+ T1=[T[0],N];T2=[T[1],N];
+ T01=cons(0,T1);T02=cons(0,T2);
+ for(PG=G;PG!=[];PG=cdr(PG)){
+ R=car(PG);R0=R[0];K1=K2=0;
+ TP=R0[0];
+ if(TP==T) K1=K;
+ else if(TP==T1||TP==T2) K1=-K;
+ if(length(TP=R0[1])==2){
+ if(TP==T) K2=K;
+ else if(TP==T1||TP==T2) K2=-K;
+ }else{
+ S=0;
+ if(findin(T[0],TP)>=0) S++;
+ if(findin(T[1],TP)>=0) S++;
+ if(S>0&&TP[2]==N) K2=-K;
+ else if(S==2) K2=K;
+ }
+ R1=anal2sp(cdr(R),["+",K1,K2]);
+ L=cons(cons(R0,R1),L);
+ }
+ G=reverse(L);
+ }
+ }else if(length(S)==1){ /* middle convolution */
+ C=S[0];L=[];
+ for(I=1;I<=N;I++){
+ for(J=1;J<=N;J++){
+ if(I==J) continue;
+ for(K=J+1;K<=N;K++){ /* [[0,I],[J,K]] */
+ if(I==K)continue;
+ T=[[0,I],JK=[J,K]];
+ if(I==N){
+ LT=mcmgrs(G,["get0",T]);
+ G0=mcmgrs(G,["get0",JK]);
+ L0=anal2sp(G0,[["put1",1,0],["mult",N-3]]);
+ G0=mcmgrs(G,["get0",[0,J,K]]);
+ LT=anal2sp(LT,["add",L0]);
+ L0=anal2sp(G0,["put1",1,0]);
+ LT=anal2sp(LT,["add",L0]);
+ for(V=1;V<=N;V++){
+ if(V==I){
+ G0=mcmgrs(G,["get0",T]);
+ L0=anal2sp(G0,["get",1,C]);
+ }else if(V==J||V==K){
+ G0=mcmgrs(G,["get0",[[0,V],[0,J,K]]]);
+ L0=anal2sp(G0,["get",1,0]);
+ }else{
+ G0=mcmgrs(G,["get0",[[0,V],JK]]);
+ L0=anal2sp(G0,["get",1,0]);
+ }
+ LT=anal2sp(LT,["sub",L0]);
+ }
+ LT=anal2sp(LT,["+",-C,0]);
+ }else if(K==N){
+ LT=mcmgrs(G,["get0",T]);
+ LT=anal2sp(LT,["+",C,0]);
+ G0=mcmgrs(G,["get0",JK]);
+ L0=anal2sp(G0,[["put1",1,0],["mult",N-3]]);
+ LT=anal2sp(LT,["add",L0]);
+ G0=mcmgrs(G,["get0",[0,J,K]]);
+ L0=anal2sp(G0,[["put1",1,0],["+",0,-C]]);
+ LT=anal2sp(LT,["add",L0]);
+ for(V=1;V<=N;V++){
+ if(V==I){
+ G0=mcmgrs(G,["get0",T]);
+ L0=anal2sp(G0,[["get",1,0],["+",C,0]]);
+ }else if(V==J){
+ G0=mcmgrs(G,["get0",[[0,V],[0,J,K]]]);
+ L0=anal2sp(G0,[["get",1,0],["+",0,-C]]);
+ }else if(V==N){
+ G0=mcmgrs(G,["get0",[[0,V],[0,J,K]]]);
+ L0=anal2sp(G0,[["get",1,C],["+",-C,-C]]);
+ }else{
+ G0=mcmgrs(G,["get0",[[0,V],JK]]);
+ L0=anal2sp(G0,["get",1,0]);
+ }
+ LT=anal2sp(LT,["sub",L0]);
+ }
+ }else{
+ G0=mcmgrs(G,["get0",T]);
+ LT=anal2sp(G0,["+",C,0]);
+ G0=mcmgrs(G,["get0",JK]);
+ L0=anal2sp(G0,[["put1",1,0],["mult",N-3]]);
+ LT=anal2sp(LT,["add",L0]);
+ G0=mcmgrs(G,["get0",[0,J,K]]);
+ L0=anal2sp(G0,["put1",1,0]);
+ LT=anal2sp(LT,["add",L0]);
+ for(V=1;V<=N;V++){
+ if(V==I){
+ G0=mcmgrs(G,["get0",T]);
+ L0=anal2sp(G0,[["get",1,0],["+",C,0]]);
+ }else if(V==J||V==K){
+ G0=mcmgrs(G,["get0",[[0,V],[0,J,K]]]);
+ L0=anal2sp(G0,["get",1,0]);
+ }else if(V==N){
+ G0=mcmgrs(G,["get0",[[0,V],JK]]);
+ L0=anal2sp(G0,[["get",1,C],["+",-C,0]]);
+ }else{
+ G0=mcmgrs(G,["get0",[[0,V],JK]]);
+ L0=anal2sp(G0,["get",1,0]);
+ }
+ LT=anal2sp(LT,["sub",L0]);
+ }
+ }
+ LT=anal2sp(LT,0);
+ L=cons(cons(T,LT),L);
+ }
+ T=[[0,I],(I<J)?[0,I,J]:[0,J,I]]; /* [0,I], [0,I,J] */
+ JK=(I<J)?[I,J]:[J,I];
+ if(I==N){
+ G0=mcmgrs(G,["get0",T]);
+ LT=anal2sp(G0,["+",-C,0]);
+ G0=mcmgrs(G,["get0",JK]);
+ L0=anal2sp(G0,[["put1",1,-C],["mult",N-3]]);
+ LT=anal2sp(LT,["add",L0]);
+ G0=mcmgrs(G,["get0",T[1]]);
+ L0=anal2sp(G0,["put1",1,-C]);
+ LT=anal2sp(LT,["add",L0]);
+ for(V=1;V<=N;V++){
+ if(V==J){
+ G0=mcmgrs(G,["get0",T]);
+ L0=anal2sp(G0,[["get",1,0],["+",-C,0]]);
+ }else if(V==N){
+ G0=mcmgrs(G,["get0",[[0,V],T[1]]]);
+ L0=anal2sp(G0,[["get",1,C],["+",-C,0]]);
+ }else{
+ G0=mcmgrs(G,["get0",[[0,V],JK]]);
+ L0=anal2sp(G0,[["get",1,0],["+",-C,0]]);
+ }
+ LT=anal2sp(LT,["sub",L0]);
+ }
+ LT=anal2sp(LT,["+",0,C]);
+ }else if(J==N){
+ G0=mcmgrs(G,["get0",T]);
+ LT=anal2sp(G0,["+",C,0]);
+ G0=mcmgrs(G,["get0",T[0]]);
+ L0=anal2sp(G0,[["put1",1,0],["mult",N-3]]);
+ LT=anal2sp(LT,["add",L0]);
+ G0=mcmgrs(G,["get0",T[1]]);
+ L0=anal2sp(G0,["put1",1,0]);
+ LT=anal2sp(LT,["add",L0]);
+ for(V=1;V<=N;V++){
+ if(V==I){
+ G0=mcmgrs(G,["get0",T]);
+ L0=anal2sp(G0,[["get",1,0],["+",C,0]]);
+ }else if(V==N){
+ G0=mcmgrs(G,["get0",[[0,V],T[1]]]);
+ L0=anal2sp(G0,[["get",1,C],["+",-C,0]]);
+ }else{
+ G0=mcmgrs(G,["get0",[[0,V],JK]]);
+ L0=anal2sp(G0,["get",1,0]);
+ }
+ LT=anal2sp(LT,["sub",L0]);
+ }
+ LT=anal2sp(LT,["+",0,-C]);
+ }else{
+ G0=mcmgrs(G,["get0",T]);
+ LT=anal2sp(G0,["+",C,C]);
+ G0=mcmgrs(G,["get0",JK]);
+ L0=anal2sp(G0,[["put1",1,0],["mult",N-3]]);
+ LT=anal2sp(LT,["add",L0]);
+ G0=mcmgrs(G,["get0",T[1]]);
+ L0=anal2sp(G0,[["put1",1,0],["+",0,C]]);
+ LT=anal2sp(LT,["add",L0]);
+ for(V=1;V<=N;V++){
+ if(V==I){
+ G0=mcmgrs(G,["get0",T]);
+ L0=anal2sp(G0,[["get",1,0],["+",C,C]]);
+ }else if(V==J){
+ G0=mcmgrs(G,["get0",[[0,V],T[1]]]);
+ L0=anal2sp(G0,[["get",1,0],["+",0,C]]);
+ }else if(V==N){
+ G0=mcmgrs(G,["get0",[[0,V],JK]]); L0=anal2sp(G0,[["get",1,C],["+",-C,0]]);
+ }else{
+ G0=mcmgrs(G,["get0",[[0,V],JK]]);
+ L0=anal2sp(G0,["get",1,0]);
+ }
+ LT=anal2sp(LT,["sub",L0]);
+ }
+ }
+ LT=anal2sp(LT,0);
+ L=cons(cons(T,LT),L);
+ }
+ }
+ for(G0=G=[];L!=[];L=cdr(L)){
+ if(length(car(L)[0][1])==2) G0=cons(car(L),G0);
+ else G=cons(car(L),G);
+ }
+ G=append(G0,G);
+ }else{
+ if(length(S)==N-1||length(S)==N){ /* [a_1,...,a_{N-1},c] */
+ for(I=1;I<N;S=cdr(S),I++) G=mcmgrs(G,[[0,I],car(S)]);
+ if(length(S)==1) G=mcmgrs(G,[S[0]]);
+ }else return 0;
+ }
+ }
+ return G;
+}
+
+
+def delopt(L,S)
+{
+ if((Inv=getopt(inv))!=1) Inv=0;
+ for(R=[];L!=[];L=cdr(L)){
+ if(type(car(L))!=4) F=0;
+ else if(type(S)==4) F=(findin(car(L)[0],S)<0)?0:1;
+ else F=(car(L)[0]==S)?1:0;
+ if(F==Inv) R=cons(car(L),R);
+ }
+ return reverse(R);
+}
+
+def str_char(S,N,L)
+{
+ if(type(S)==7){
+ if(type(L)==1) L=asciitostr([L]);
+ return str_chr(S,N,L);
+ }
+ if(type(L)==7) L=strtoascii(L)[0];
+ if(type(S)==4){
+ M=N;
+ while(M-->0) S=cdr(S);
+ M=findin(L,S);
+ return (M>=0)?findin(L,S)+N:-1;
+ }else if(type(S)==5){
+ K=length(S);
+ for(I=N;I<K;I++)
+ if(S[I]==L) return I;
+ }
+ return -1;
+}
+
+def str_pair(S,N,I,J)
+{
+ if(type(I)==7) I=(II=strtoascii(I))[0];
+ if(type(J)==7) J=(JJ=strtoascii(J))[0];
+ if(type(S)==7) S=strtoascii(S);
+ if(getopt(inv)==1){
+ if(II!=0){
+ I=asciitostr(reverse(II));
+ IL=length(II);
+ }else IL=1;
+ if(JJ!=0) J=asciitostr(reverse(JJ));
+ R=str_pair(reverse(S),length(S)-N-1,J,I);
+ if(R>=0) R=length(S)-IL-R;
+ return R;
+ }
+ if((SJIS=getopt(sjis))!=1) SJIS=0;
+ if((II!=0&&length(II)>1)||(JJ!=0&&length(JJ)>1)){
+ for(;;){
+ MJ=str_str(S,N|top=JJ,sjis=SJIS);
+ if(MJ>=0){
+ MI=str_str(S,II|top=N,sjis=SJIS);
+ if(MI<0 || MI>MJ){
+ if(C==0) return MJ;
+ C--; N=MJ+length(II);
+ }else if(MI>=0){
+ C++; N=MI+length(JJ);
+ }
+ }
+ return -1;
+ }
+ }
+ if(type(S)==4){
+ M=N;
+ while(M-->0) S=cdr(S);
+ while(S!=[]){
+ if(car(S)==I) C++;
+ else if(car(S)==J){
+ if(C==0) return N;
+ C--;
+ }
+ S=cdr(S);N++;
+ }
+ }else if(type(S)==5){
+ K=length(S);
+ for(T=N;T<K && C>=0;T++){
+ if(S[T]==I) C++;
+ else if(S[T]==J){
+ if(C==0) return T;
+ C--;
+ }
+ }
+ }
+ return -1;
+}
+
+
+def str_cut(S,I,J)
+{
+ if(type(S)==7) return sub_str(S,I,J);
+ if((JJ=length(S))<=J) J=JJ-1;
+ if(type(S)==5){
+ for(L=[],K=J; K>=I; K--) L=cons(S[K],L);
+ }else if(type(S)==4){
+ J-=I;
+ while(I-->0) S=cdr(S);
+ for(L=[];J-->=0;S=cdr(S)) L=cons(car(S),L);
+ L=reverse(L);
+ }
+ return asciitostr(L);
+}
+
+def str_str(S,T)
+{
+ if(S==0) return -1;
+ if(type(S) == 7)
+ S = strtoascii(S);
+ if(type(J=getopt(top))!=1 || J<0) J=0;
+ LS=length(S);
+ if(LS-J<1) return -1;
+ if(type(S)==4){
+ LS-=(J0=J);
+ for( ; J>0 && S!=[]; S=cdr(S),J--);
+ }
+ if(type(JJ=getopt(end))!=1 && JJ!=0) JJ=LS;
+ else JJ-=J0;
+ if((SJIS=getopt(sjis))!=1) SJIS=0;
+ if(JJ-J<0) return -1;
+ /* search from J-th to JJ-th */
+ if(type(T)==1) T=[T];
+ else if(type(T)==7) T = strtoascii(T);
+ else if(type(T)==4 && type(T[0])>3){
+ for(K=(KF=-1)-J0; T!=[]; F++,T=cdr(T)){
+ JK=str_str(S,car(T)|top=J,end=JJ,sjis=SJIS);
+ if(JK>=0){
+ JJ=(K=JK)-1; KF=F;
+ if(J>JJ) break;
+ }
+ }
+ return [KF,J0+K];
+ }
+ if(type(T)==4) T=ltov(T);
+ LT = length(T);
+ if(LT>0){
+ LE = LS-LT;
+ LP = T[0];
+ if(JJ==0 ||(type(JJ)==1 && JJ<LE)) LE=JJ;
+ if(type(S)==5){
+ for(; J <= LE; J++){
+ if(S[J] != LP){
+ if(SJIS && (V=S[J])>128){
+ if(V<160 || (V>223 && V<240)) J++;
+ }
+ continue;
+ }
+ for(I = 1; I < LT && S[I+J] == T[I]; I++);
+ if(I >= LT) return J;
+ }
+ }else if(type(S)==4){
+ for(; J<=LE; S=cdr(S),J++){
+ if(car(S) != LP){
+ if(SJIS && (V=S[J])>128){
+ if(V<160 || (V>223 && V<240)) J++;
+ }
+ continue;
+ }
+ for(ST=cdr(S), I = 1; I < LT && car(ST) == T[I]; I++, ST=cdr(ST));
+ if(I >= LT) return J0+J;
+ }
+ }
+ }
+ return -1;
+}
+
+def str_times(S,N)
+{
+ if(!isint(N)) return "";
+ if(type(S)==7){
+ for(Tb=str_tb(0,0);N-->0;)
+ str_tb(S,Tb);
+ return str_tb(0,Tb);
+ }
+ if(type(S)==4){
+ for(LT=[],I=0;I<N;I++){
+ if(type(car(S))==7){
+ LT=cons(car(S),LT);
+ S=cdr(S);
+ if(S==[]) S=[[""]];
+ }else if(type(car(S))==4){
+ ST=car(S);
+ for(J=0;I<N;I++){
+ if(J==length(ST)) J=0;
+ LT=cons(ST[J++],LT);
+ }
+ }
+ }
+ return reverse(LT);
+ }
+ return S;
+}
+
+def ssubgrs(M,L)
+{
+ if(type(L)==7) L=s2sp(L);
+ for(S=0, L=L, M=M; L!=[]; L=cdr(L), M=cdr(M)){
+ for(LT=car(L), MT=car(M); LT!=[]; LT=cdr(LT), MT=cdr(MT)){
+ S += car(LT)*car(MT)[1];
+ }
+ }
+ return S;
+}
+
+def s2os(S)
+{
+ return str_subst(S,[["\\","\\\\"],["\"","\\\""]],0);
+}
+
+def l2os(S)
+{
+ if(type(S)==6)
+ S=m2ll(S);
+ else if(type(S)==5)
+ S=vtol(S);
+ else if(type(S)==7) return "\""+s2os(S)+"\"";
+ else if(type(S)<4) return rtostr(S);
+ if(type(S)==4){
+ for(F=0,Tb=str_tb("[",0);S!=[];S=cdr(S)){
+ if(F++) str_tb(", ",Tb);
+ str_tb(l2os(car(S)),Tb);
+ }
+ str_tb("]",Tb);
+ return str_tb(0,Tb);
+ }
+ return 0;
+}
+
+def r2os(S)
+{
+ if(type(S)==6){
+ for(T="",S=m2ll(S);S!=[];S=cdr(S)){
+ if(T!="") T=T+","+r2os(car(S));
+ else T=r2os(car(S));
+ }
+ return "mat("+T+")\n";
+ }else if(type(S)==5){
+ for(T="",S=v2l(S);S!=[];S=cdr(S)){
+ if(T!="") T=T+","+r2os(car(S));
+ else T=r2os(car(S));
+ }
+ return "vect("+T+")\n";
+ }else if(type(S)<4) return rtostr(S);
+ else if(type(S)==4){
+ for(T="";S!=[];S=cdr(S)){
+ if(T!="") T=T+","+r2os(car(S));
+ else T=r2os(car(S));
+ }
+ return "["+T+"]";
+ }else if(type(S)==7) return "\""+s2os(S)+"\"";
+ return "";
+}
+
+def s2euc(S)
+{
+ for(R=[],CR=0,L=strtoascii(S);L!=[];L=cdr(L)){
+ if((C=car(L)) == 0x1b && length(L)>1) {
+ if((C=car(L=cdr(L)))==0x24 && length(L)>1){ /* $ */
+ if((C = car(L=cdr(L))) == 0x40 || C == 0x42) { /* @, B */
+ Mode = 1;
+ } else return 0;
+ }else if(C == 0x28 && length(L)>1) { /* ( */
+ if((C = car(L=cdr(L)))== 0x42 || C == 0x4a) { /* B, J */
+ Mode = 0;
+ }else if(C == 0x49) { /* I */
+ Mode = 2;
+ }else{
+ R=cons(0x1b,R);R=cons(0x28,R);R=cons(C,R);
+ }
+ }else if (C == 0x26 && length(L)>1 && car(cdr(L))==0x1b) { /* & ESC */
+ L=cdr(L);
+ }else{
+ R=cons(0x1b,R);R=cons(C,R);
+ }
+ }else if(C == 0x0e) {
+ Mode = 2;
+ }else if(C == 0x0f) {
+ Mode = 0;
+ }else if(Mode == 1 && C>0x20 && C<0x7f && length(L)>1) { /* JIS KANJI */
+ D=car(L=cdr(L));
+ if(D>0x20 && D<0x7f) {
+ R=cons(ior(C,0x80),R);R=cons(ior(D,0x80),R);
+ } else return 0;
+ }else if(Mode == 2 && C > 0x1f && C < 0x60) { /* JIS KANA */
+ R=cons(0x8e,R); R=cons(ior(C,0x80),R);
+ }else if(((C>0x80 && C<0xa0) || (C>0xdf && C<0xf0)) && length(L)>1) { /* ShiftJIS */
+ D=car(L=cdr(L));
+ if(D>0x3f && D<0xfd && D!=0x7f) {
+ T=sjis2jis([C,D]);
+ R=cons(ior(T[0],0x80),R); R=cons(ior(T[1],0x80),R);
+ }else return 0;
+ }else if(C>0x9f && C<0xe0) { /* HanKana */
+ R=cons(0x8e,R); R=cons(C,R);
+ }else if(C == 0x0a){
+ CR++;
+ }else if(C == 0x0d){
+ R=cons(0x0d,R);
+ CR=0;
+ }else{
+ while(CR-->0) R=cons(0x0d,R);
+ R=cons(C,R);
+ }
+ }
+ while(CR-->0) R=cons(0x0d,R);
+ return asciitostr(reverse(R));
+}
+
+def s2sjis(S)
+{
+ for(R=[],CR=0,L=strtoascii(S);L!=[];L=cdr(L)){
+ if((C=car(L)) == 0x1b && length(L)>1) {
+ if((C=car(L=cdr(L)))==0x24 && length(L)>1){ /* $ */
+ if((C = car(L=cdr(L))) == 0x40 || C == 0x42) { /* @, B */
+ Mode = 1;
+ } else return 0;
+ }else if(C == 0x28 && length(L)>1) { /* ( */
+ if((C = car(L=cdr(L)))== 0x42 || C == 0x4a) { /* B, J */
+ Mode = 0;
+ }else if(C == 0x49) { /* I */
+ Mode = 2;
+ }else{
+ R=cons(0x1b,R);R=cons(0x28,R);R=cons(C,R);
+ }
+ }else if (C == 0x26 && length(L)>1 && car(cdr(L))==0x1b) { /* & ESC */
+ L=cdr(L);
+ }else{
+ R=cons(0x1b,R);R=cons(C,R);
+ }
+ }else if(C == 0x0e) {
+ Mode = 2;
+ }else if(C == 0x0f) {
+ Mode = 0;
+ }else if(Mode == 1 && C>0x20 && C<0x7f && length(L)>1) { /* JIS KANJI */
+ D=car(L=cdr(L));
+ if(D>0x20 && D<0x7f) {
+ T=jis2sjis([C,D]);
+ R=cons(T[0],R);R=cons(T[1],R);
+ } else return 0;
+ }else if(Mode == 2 && C > 0x1f && C < 0x60) { /* JIS KANA */
+ R=cons(ior(C,0x80),R);
+ }else if(C>0xa0 && C<0xff && length(L)>1) { /* EUC */
+ D=car(L=cdr(L));
+ if(D>0xa0 && D<0xff) {
+ T=jis2sjis([iand(C,0x7f),iand(D,0x7f)]);
+ R=cons(T[0],R);R=cons(T[1],R);
+ }else return 0;
+ }else if(C == 0x0a){
+ CR++;
+ }else if(C == 0x0d){
+ R=cons(0x0a,R);R=cons(0x0d,R);
+ CR=0;
+ }else{
+ while(CR-->0){
+ R=cons(0x0a,R);R=cons(0x0d,R);
+ }
+ R=cons(C,R);
+ }
+ }
+ while(CR-->0){
+ R=cons(0x0a,R);R=cons(0x0d,R);
+ }
+ return asciitostr(reverse(R));
+}
+
+def r2ma(S)
+{
+ return evalma(S|inv=1);
+}
+
+def evalma(S)
+{
+ L0=["\n","\d","{","}","[","]","Log","Exp","Sinh","Cosh","Tanh","Sin","Cos","Tan",
+ "ArcSin","ArcCos","ArcTan"];
+ L1=["", "" ,"[","]","(",")","log","exp","sinh","cosh","tanh","sin","cos","tan",
+ "asin", "acos", "atan"];
+ if(getopt(inv)==1){
+ if(type(S)==6) S=m2ll(S);
+ else if(type(S)==5) S=vtol(S);
+ if(type(S)==4){
+ for(L=[];S!=[];S=cdr(S)){
+ if(type(car(S))==6) L=cons(m2ll(car(S)),L);
+ else if(type(car(S))==5) L=cons(vtol(car(S)),L);
+ else L=cons(car(S),L);
+ }
+ S=reverse(L);
+ }else return 0;
+ return str_subst(rtostr(S),cdr(cdr(L1)),cdr(cdr(L0)));
+ }
+ if(S==0){
+ print("Mathematica text (terminated by ;) ?");
+ purge_stdin();
+ Tb=str_tb(0,0);
+ for(;;){
+ S=get_line();
+ str_tb(S,Tb);
+ if(str_char(S,0,";")>=0) break;
+ }
+ S=str_tb(0,Tb);
+ }
+/*
+ while((P=str_chr(S,0,";"))>=0){
+ V0=evalma(str_cut(S,0,P+1));
+ S=str_cut(S,P+1,length(S));
+ }
+ if((P=str_char(S,0,"="))>=0){
+ X=strtoascii(str_cut(S,0,P));
+ L=length(X);
+ for(P0=P1=-1,I=0;I<L;I++){
+ if(L(I)<=32) continue;
+ if(isalphanum(L[I])){
+ if(P0<0){
+ if(isnum(L[I])) break;
+ P0=I;
+ }
+ else if(P1!=I+1) break;
+ P1=I;
+ }
+ }
+ if(I==L && P0>=0){
+ for(I==P0;I-->0;) X=cdr(X);
+ if((X0=car(X))>96) X0-=32;
+ Y=[X0];X=cdr(X);
+ for(I=P1-P0;I-->0;X=cdr(X))
+ Y=cons(car(X),Y);
+ Y=cons(61,Y);
+ Var=asciitostr(reverse(Y));
+ S=str_cut(S,P,length(S));
+ }
+ }
+*/
+ S=eval_str(str_subst(S,L0,L1));
+ if(type(S)==4){
+ for(L=-1,T=S;T!=[];T=cdr(T)){
+ if(type(T0=car(T))>4) break;
+ if(type(T0)<4){
+ if(L>=0) break;
+ L=-2;continue;
+ }
+ if(L<-2) break;
+ if(L==-1) L=length(T0);
+ else if(L!=length(T0)) break;
+ }
+ if(T==[]){
+ if(L>0) S=s2m(S);
+ else S=ltov(S);
+ }
+ }
+/*
+ if(S==0 && V0!=0) return V0;
+ if(type(Var)==7){
+ T=rtostr(S);
+ if(type(S)==7) T="\""+T+"\"";
+ S=eval_str(Var+T);
+ mycat(["Define",Var]);
+ }
+*/
+ return S;
+}
+
+def i2hex(N)
+{
+ Opt=getopt();
+ if(type(N)==4 && isint(car(N))){
+#ifdef USEMODULE
+ L=mtransbys(os_md.i2hex,N,[]|option_list=Opt);
+#else
+ L=mtransbys(i2hex,N,[]|option_list=Opt);
+#endif
+ return rtostr(L);
+ }
+ if(!isint(N) || N<0) return 0;
+ if(!N) L=[];
+ else{
+ Cap=(getopt(cap)==1)?32:0;
+ for(L=[];N!=0;N=ishift(N,4)){
+ J=iand(N,15);
+ L=cons(((J>9)?(87-Cap):48)+J,L);
+ }
+ }
+ if(!isint(Min=getopt(min))) Min=2;
+ for(Min-=length(L);Min-->0;)
+ L=cons(48,L);
+ if(getopt(num)==1){
+ L=cons(120,L);L=cons(48,L);
+ }
+ return asciitostr(L);
+}
+
+def sjis2jis(L)
+{
+ L1=L[1];
+ if((L0=L[0])<=0x9f){
+ if(L1<0x9f) L0=L0*2-0xe1;
+ else L0=(L0*2)-0xe0;
+ }else{
+ if(L1<0x9f) L0=L0*2-0x161;
+ else L0=L0*2-0x160;
+ }
+ if(L1<0x7f) return [L0,L1-0x1f];
+ else if(L1<0x9f) return [L0,L1-0x20];
+ return [L0,L1-0x7e];
+}
+
+def jis2sjis(L)
+{
+ L1=L[1];
+ if(iand(L0=L[0],1)){
+ if(L1<0x60) L=[L1+0x1f];
+ else L=[L1+0x20];
+ }else L=[L1+0x7e];
+ if(L0<0x5f) return cons(ishift(L0+0xe1,1),L);
+ return cons(ishift(L0+0x161,1),L);
+}
+
+def verb_tex_form(P)
+{
+ L = reverse(strtoascii(rtostr(P)));
+ for(SS = []; L != []; L = cdr(L)){
+ Ch = car(L); /* ^~\{} */
+ if(Ch == 92 || Ch == 94 || Ch == 123 || Ch == 125 || Ch == 126){
+ SS = append([92,Ch,123,125],SS); /* \Ch{} */
+ if(Ch != 94 && Ch != 126) /* \char` */
+ SS = append([92,99,104,97,114,96],SS);
+ continue;
+ }
+ SS = cons(Ch, SS);
+ if((Ch >= 35 && Ch <= 38) || Ch == 95) /* #$%&_ */
+ SS = cons(92, SS); /* \Ch */
+ }
+ return asciitostr(SS);
+}
+
+def tex_cuteq(S,P)
+{
+ if(P==0) return 0;
+ if(S[P]==125){ /* } */
+ if((Q=str_pair(S,P-1,"{","}"|inv=1))<0) return -1;
+ if(Q<2||S[Q-1]!=95) return Q;
+ return tex_cuteq(S,Q-2);
+ }
+ if(!isalphanum(S[Q=P--])) return -1;
+ while(P>0&&isalphanum(S[P])) P--;
+ if(S[P]==92){ /* \ */
+ if(P==0) return P;
+ else P--;
+ }
+ if(S[P]!=95||P==0) return Q; /* _ */
+ return tex_cuteq(S,P-1);
+}
+
+
+def texket(S)
+{
+ if(!isint(F=getopt(all))) F=0;
+ if(type(S)==7){
+ L=str_len(S);
+ SS=strtoascii(S);
+ }else{
+ L=length(S);
+ SS=S;
+ }
+ for(T="",I=I0=0;I<L-1;){
+ J=str_char(SS,I,"(");
+ if(J<0) break;
+ if(J<L-1 && J>4 && str_str(SS,"\\left"|top=J-5,end=J-1)>=0){
+ I=J+1;continue;
+ }
+ if((K=str_pair(SS,J+1,"(",")"))>=0){
+ KK=str_char(SS,J+2,"(");
+ if(KK>K||KK<0){
+ if(F!=1){
+ if(!F){
+ for(N=J+1;N<K;N++) /* + - _ { } */
+ if(!isalphanum(P=SS[N])&&findin(P,[32,43,45,95,123,125])<0) break;
+ }else N=K;
+ if(N==K){
+ I=K+1;continue;
+ }
+ }
+ T=T+str_cut(SS,I0,J-1)+"\\left"+str_cut(SS,J,K-1)+"\\right)";
+ I0=I=K+1;
+ }else{
+ T=T+str_cut(SS,I0,J-1)+"\\left("+texket(str_cut(SS,J+1,K-1)|all=F) +"\\right)";
+ I0=I=K+1;
+ }
+ }else break;
+ }
+ return T+str_cut(SS,I0,L);
+}
+
+
+def my_tex_form(S)
+{
+ if(getopt(skip) != 1){
+ if(type(S)==1 && S<0) return "-"+print_tex_form(-S);
+ if(type(S)==6) return mtotex(S);
+ S = print_tex_form(S);
+ for(F=Top=0;(L=str_str(S,"\\verb`"|top=Top))>=0;Top=LV+1){
+ F++;
+ if(Top==0) Tb = string_to_tb("");
+ LV = str_chr(S, L+6, "`");
+ if(LV<0) LV=str_len(S);
+ str_tb([my_tex_form(sub_str(S, Top, L-1)|skip=1), "\\texttt{"], Tb);
+ str_tb([verb_tex_form(sub_str(S,L+6, LV-1)),"}"], Tb);
+ Top=LV+1;
+ }
+ if(F>0){
+ str_tb(my_tex_form(sub_str(S, Top,str_len(S)-1)|skip=1), Tb);
+ return tb_to_string(Tb);
+ }
+ }
+ if(S==0) return "";
+ S = ltov(strtoascii(S));
+ L = length(S)-1;
+ while(L >= 1 && S[L] == 10)
+ L--;
+ if((Fr=getopt(frac))!=0 && Fr!=1) Fr=2;
+ for(I = L+1, T = K = 0, SS = []; --I >= 0; ){
+ if(S[I] == 32 && I!=L){
+ if(I==L) continue;
+ if(findin(S[I+1], [32,40,41,43,45,123,125]) >= 0 /* " ()+-{}" */
+ || (S[I+1] >= 49 && S[I+1] <= 57)) /* 1 - 9 */
+ if(I == 0 || S[I-1] >= 32) continue;
+ }
+ if(Fr && S[I]>=48 && S[I]<=57){ /* 2/3 -> \tfrac{2}{3} */
+ for(K=0,II=I; II>=0; II--){
+ if(S[II]>=48 && S[II]<=57) continue;
+ if(S[II]==47){ /* / */
+ if(K>0) break;
+ K=II;
+ }else break;
+ }
+ if(K>II+1){
+ SS=cons(125,SS);
+ for(J=I; J>K; J--) SS=cons(S[J],SS);
+ if(AMSTeX){
+ SS=cons(123,SS);SS=cons(125,SS);
+ }else{
+ for(J=[114,101,118,111,92];J!=[];J=cdr(J)) /* \over */
+ SS=cons(car(J),SS);
+ }
+ for(J=K-1;J>II;J--) SS=cons(S[J],SS);
+ SS=cons(123,SS);
+ if(AMSTeX){
+ J=(Fr==2)?[99,97,114,102,116,92]:[99,97,114,102,92];
+ for(;J!=[];J=cdr(J)) /* \tfrac */
+ SS=cons(car(J),SS);
+ }
+ I=II+1;
+ }else{
+ for(;I>II;I--) SS = cons(S[I], SS);
+ I++;
+ }
+ continue;
+ }
+ SS = cons(S[I], SS);
+ }
+ SS=str_subst(SS,"\\\\\n\\end{pmatrix}","\n\\end{pmatrix}"|raw=1);
+ Subst=getopt(subst);
+ Sub0=["{asin}","{acos}","{atan}"];
+ Sub1=["\\arcsin ","\\arccos","\\arctan "];
+ if(type(Subst) == 4){
+ Sub0=append(Sub0,Subst[0]);Sub1=append(Sub1,Subst[1]);
+ }
+ SS = str_subst(SS,Sub0,Sub1|raw=1);
+ S = ltov(SS);
+ L = length(S);
+ SS = [];
+ while(--L >= 0){
+ if(S[I=L] == 125){
+ while(--I >= 0 && S[I] == 125);
+ J = 2*I - L;
+ if(J >= 0 && S[I] != 123){
+ for(K = J; K < I && S[K] == 123; K++);
+ if(K == I){
+ if(J-- <= 0 || S[J] < 65 || S[J] > 122 || (S[J] > 90 && S[J] < 97)){
+ SS = cons(S[I],SS);
+ L = J+1;
+ continue;
+ }
+ }
+ }
+ }
+ SS = cons(S[L],SS);
+ }
+ RT=getopt(root);
+ for(Top=0;;Top++){ /* ((x+1))^{y} , 1/y=2,3,...,9 */
+#if 1
+ P=str_str(SS,["))^","^{\\tfrac{1}"]|top=Top);
+ if(P[0]<0) break;
+ Sq=0;
+ if(P[0]==0){
+ P=P[1];
+ if((Q=str_pair(SS,P,"(",")"|inv=1))<0||SS[Q+1]!=40) continue;
+ if((RT==2||(RT!=0 && P-Q<33)) && str_str(SS,"{\\tfrac{1}"|top=P+3,end=P+3)==P+3
+ && SS[P+14]==125){
+ if((Sq=SS[P+13]-48)<2||Sq>9) Sq=0;
+ }
+ F=2;
+ }else{
+ P=P[1];
+ if(SS[P+12]!=125||(Sq=(SS[P+11]-48))<2||Sq>9) break;
+ if(SS[P-1]==125){
+ if((Q=str_pair(SS,P-2,"{","}"|inv=1))<0) break;
+ if(Q>1&&SS[Q-1]==95){
+ if((Q=tex_cuteq(SS,Q-2))<0) break;
+ F=0;
+ }else F=1;
+ }else{
+ if(!isalphanum(SS[Q=P-1]) || (Q=tex_cuteq(SS,Q))<0) break;
+ F=0;
+ }
+ if(RT!=2&&P-Q>32) break;
+ }
+#else
+ if((P=str_str(SS,"))^"|top=Top))<0 || (Q=str_pair(SS,P,"(",")"|inv=1))<0) break;
+ else F=2;
+ Sq=0;
+ if((RT==2||(RT!=0 && P-Q<33)) && str_str(SS,"{\\tfrac{1}"|top=P+3,end=P+3)==P+3
+ && SS[P+14]==125){
+ if((Sq=SS[P+13]-48)<2||Sq>9) Sq=0;
+ }
+#endif
+ for(I=0,S=[];SS!=[];SS=cdr(SS),I++){
+ if(I==Q){
+ if(Sq){
+ S=append([116,114,113,115,92],S);
+ if(Sq>2) S=append([93,Sq+48,91],S);
+ S=cons(123,S);
+ if(F==2) SS=cdr(SS);
+ else if(F==0) S=cons(car(SS),S);
+ }else if(F==2&&P-Q==3){ /* (2)^x -> 2^x*/
+ SS=cdr(SS);SS=cdr(SS);
+ S=cons(123,S);S=cons(car(SS),S);S=cons(125,S);
+ SS=cdr(SS);SS=cdr(SS);
+ I+=3;
+ }
+ continue;
+ }else if(I==P){
+ if(Sq){
+ if(F>0) S=cdr(S);
+ S=cons(125,S);
+ if(F==2) SS=cdr(SS);
+ for(J=0;J<12;J++) SS=cdr(SS);
+ }
+ continue;
+ }
+ S=cons(car(SS),S);
+ }
+ SS=reverse(S);
+ Top=P;
+ }
+ S=asciitostr(SS);
+ if((K=getopt(ket))==1) S=texket(S);
+ else if(K==2) S=texket(S|all=1);
+ return S;
+}
+
+def smallmattex(S)
+{
+ return str_subst(S,[["\\begin{pmatrix}","\\left(\\begin{smallmatrix}"],
+ ["\\end{pmatrix}","\\end{smallmatrix}\\right)"],
+ ["\\begin{Bmatrix}","\\left\\{\\begin{smallmatrix}"],
+ ["\\end{Bmatrix}","\\end{smallmatrix}\\right\\}"],
+ ["\\begin{bmatrix}","\\left[{\\begin{smallmatrix}"],
+ ["\\end{bmatrix}","\\end{smallmatrix}\\right]"],
+ ["\\begin{vmatrix}","\\left|\\begin{smallmatrix}"],
+ ["\\end{vmatrix}","\\end{smallmatrix}\\right|"],
+ ["\\begin{Vmatrix}","\\left\\|\\begin{smallmatrix}"],
+ ["\\end{Vmatrix}","\\end{smallmatrix}\\right\\|"],
+ ["\\begin{matrix}","\\begin{smallmatrix}"],
+ ["\\end{matrix}","\\end{smallmatrix}"]],0);
+}
+
+
+def divmattex(S,T)
+{
+ TF=["matrix","pmatrix","Bmatrix","bmatrix","vmatrix","Vmatrix"];
+ TG=[0,"(","\\{","[","|","\\|"];
+ TH=[0,")","\\}","]","|","\\|"];
+ if(type(S)!=7) S=mtotex(S);
+ S=strtoascii(S0=S);
+ if((P0=str_str(S,"\\begin{"))<0 || (P1=str_str(S,"}"|top=P0+7))<0)
+ return S0;
+ F=str_cut(S,P0+7,P1-1);
+ if((K=findin(F,TF))<0) return S0;
+ Q=str_str(S,"\\end{"+F+"}");
+ if(Q<0) return S0;
+ for(J=P1+1;S[J]<33;J++);
+ for(L0=L=[],I=J;J<Q;J++){
+ if(S[J]==38){ /* & */
+ if(I>=J) L0=cons(0,L0);
+ else L0=cons(str_cut(S,I,J-1),L0);
+ I=J+1;
+ }
+ if(S[J]==92&&S[J+1]==92){ /* \\ */
+ if(I>=J) L0=cons(0,L0);
+ else L0=cons(str_cut(S,I,J-1),L0);
+ L=cons(reverse(L0),L);
+ L0=[];
+ J++;
+ for(I=J+1;S[I]<33;I++);
+ }
+ }
+ J--;
+ if(S[J]<33) J--;
+ if(I<=J) L0=cons(str_cut(S,I,J),L0);
+ if(length(L0)>0) L=cons(reverse(L0),L);
+ L=lv2m(reverse(L)); /* get matrix */
+ if(T==0) return L;
+ Size=size(L);S0=Size[0];
+ if(type(T[0])!=4){
+ S1=Size[1];
+ T=append(T,[S1]);
+ for(TT=[],I=0;T!=[];T=cdr(T)){
+ J=car(T);
+ if(J>S1) J=S1;
+ for(T0=[];J>I;J--) T0=cons(J-1,T0);
+ if(T0!=[]) TT=cons(T0,TT);
+ I=car(T);
+ }
+ T=reverse(TT);
+ }
+ SS=length(T);
+ St=str_tb(0,0);
+ if(SS==1) St=str_tb("\\begin{"+F+"}\n",St);
+ else{
+ if(K>0) St=str_tb("&\\left"+TG[K],St);
+ St=str_tb("\\begin{matrix}\n",St);
+ }
+ for(;T!=[];T=cdr(T)){
+ for(I=0;I<S0;I++){
+ for(J=0,TT=car(T);TT!=[];TT=cdr(TT),J++){
+ if(J>0) St=str_tb("&",St);
+ if(L[I][car(TT)]!=0) St=str_tb(L[I][car(TT)],St);
+ }
+ if(I<S0-1) St=str_tb("\\\\",St);
+ St=str_tb("\n",St);
+ }
+ if(length(T)>1)
+ St=str_tb("\\end{matrix}\\right.\\\\\n&\\quad\\left.\\begin{matrix}\n",St);
+ else{
+ if(SS==1) St=str_tb("\\end{"+F+"}\n",St);
+ else St=str_tb("\\end{matrix}\\right"+TH[K]+"\n",St);
+ }
+ }
+ S=str_tb(0,St);
+ if(SS==1) return S;
+ return texbegin("align*",S);
+}
+
+def str_subst(S, L0, L1)
+{
+ if(type(S) == 7)
+ S = strtoascii(S);
+ if(type(S) == 4)
+ S = ltov(S);
+ SE = length(S);
+ if(L1 == 0){
+ for(L1 = L = [], L0 = reverse(L0); L0 != []; L0 = cdr(L0)){
+ L = cons(car(L0)[0], L);
+ L1 = cons(car(L0)[1], L1);
+ }
+ L0 = L;
+ }
+ if(type(L0)==7) L0 = [strtoascii(L0)];
+ else{
+ for(LT = []; L0 != []; L0 = cdr(L0))
+ LT = cons(strtoascii(car(L0)), LT);
+ L0 = ltov(LT);
+ }
+ E0 = length(L0);
+ if(type(L1)==7) L1 = [strtoascii(L1)];
+ else{
+ for(LT = []; L1 != []; L1 = cdr(L1))
+ LT = cons(strtoascii(car(L1)), LT);
+ L1 = ltov(LT);
+ }
+ if(getopt(inv)==1){
+ L2=L0;L0=L1;L0=L2;
+ }
+ if((SJIS=getopt(sjis))!=1) SJIS=0;
+ for(J = JJ = 0, ST = []; J < SE; J++){
+ SP = S[J];
+ for(I = E0-1; I >= 0; I--){
+ if(SP != L0[I][0] || J + (K = length(L0[I])) > SE)
+ continue;
+ while(--K >= 1)
+ if(L0[I][K] != S[J+K]) break;
+ if(K > 0) continue;
+ for(KE = length(L1[I]), K = 0 ;K < KE; K++)
+ ST = cons(L1[I][K],ST);
+ J += length(L0[I])-1;
+ break;
+ }
+ if(I < 0){
+ ST = cons(S[J],ST);
+ if(SJIS && (V=S[J])>128){
+ if(V<160 || (V>223 && V<240)) ST = cons(S[J++],ST);
+ }
+ }
+ }
+ if(getopt(raw)==1) return reverse(ST);
+ return asciitostr(reverse(ST));
+}
+
+def dviout0(L)
+{
+ Cmd=["TikZ","TeXLim","TeXEq","DVIOUT","XYPrec","XYcm","XYLim","Canvas"];
+ if(type(Opt=getopt(opt))==7){
+ if((F=findin(Opt,Cmd)) < 0) return -1;
+ if(L==-1){
+ if(F<=3){
+ if(F==0) V=TikZ;
+ else if(F==1) V=TeXLim;
+ else if(F==2) V=TeXEq;
+ else V=iand(DVIOUTF,1);
+ }else{
+ if(F==4) V=XYPrec;
+ else if(F==5) V=XYcm;
+ else if(F==6) V=XYLim;
+ else V=Canvas;
+ }
+ return V;
+ }
+ if(F==0) TikZ=L;
+ else if(F==2) TeXEq=L;
+ else if(F==3){
+ if(iand(DVIOUTF,1)==L)
+ mycat0(["DVIOUTA=\"", DVIOUTA,"\""],1);
+ else dviout0(4);
+ return 1;
+ }else if(F==7&&type(L)==4)
+ Canvas=L;
+ else if(L>0){
+ if(F==1) TeXLim=L;
+ else if(F==4) XYPrec=L;
+ else if(F==5) XYcm=L;
+ else if(F==6) XYLim=L;
+ }
+ mycat0([Cmd[F],"=",L],1);
+ return 1;
+ }
+ if(type(L) == 4){
+ for( ; L != []; L = cdr(L)) dviout0(car(L));
+ return 1;
+ }
+ if(type(L) == 7){
+ if(L=="") dviout(" \n"|keep=1);
+ else if(L=="cls") dviout0(0);
+ else if(L=="show") dviout(" ");
+ else if(L=="?") dviout0(3);
+ else dviout("\\"+L+"\n"|keep=1);
+ return 1;
+ }
+ if(L == 0)
+ dviout(" "|keep=1,clear=1);
+ else if(L == 1)
+ dviout(" ");
+ else if(L == 2)
+ dviout(" "|clear=1);
+ else if(L>10)
+ dviout("\\setcounter{MaxMatrixCols}{"+rtostr(L)+"}%"|keep=1);
+ else if(L < 0)
+ dviout(" "|delete=-L,keep=1);
+ else if(L == 3){
+ mycat0(["DIROUT =\"", DIROUT,"\""],1);
+ mycat0(["DVIOUTH=\"", DVIOUTH,"\""],1);
+ mycat0(["DVIOUTA=\"", DVIOUTA,"\""],1);
+ mycat0(["DVIOUTB=\"", DVIOUTB,"\""],1);
+ mycat0(["DVIOUTL=\"", DVIOUTL,"\""],1);
+ mycat(["Canvas =", Canvas]);
+ mycat(["TeXLim =", TeXLim]);
+ mycat(["TeXEq =", TeXEq]);
+ mycat(["AMSTeX =", AMSTeX]);
+ mycat(["TikZ =", TikZ]);
+ mycat(["XYPrec =", XYPrec]);
+ mycat(["XYcm =", XYcm]);
+ mycat(["XYLim =", XYLim]);
+ }else if(L==4){
+ Tmp=DVIOUTA; DVIOUTA=DVIOUTB; DVIOUTB=Tmp;
+ mycat0(["DVIOUTA=\"", DVIOUTA,"\""],1);
+ DVIOUTF++;
+ }else if(L==5){
+ if(!iand(DVIOUTF,1)) dviout0(4);
+ }else if(L==6){
+ TikZ=1;mycat("TikZ=1");
+ }else if(L==7){
+ TikZ=0;mycat("TikZ=0");
+ }
+ return 1;
+}
+
+def myhelp(T)
+{
+ /* extern DVIOUT; */
+ /* extern HDVI; */
+ /* extern DVIOUTH; */
+
+ if(type(T)==2){
+ if(T==getbygrs){
+ getbygrs(0,0);
+ return 0;
+ }
+ else if(T==m2mc){
+ m2mc(0,0);
+ return 0;
+ }
+ else if(T==mgen){
+ mgen(0,0,0,0);
+ return 0;
+ }
+ else T=rtostr(T);
+ }
+ if(type(T)==4 && typeT[0]==7){
+ if(length(T)==2 && type(T[1])==1){
+ DVIOUTH="start "+T[0]+" -"+rtostr(T[1])+"-hyper:0x90 \"%ASIRROOT%\\help\\os_muldif.dvi\" #r:%LABEL%";
+ }else if(str_len(T[0])>2) DVIOUTH=T[0];
+ mycat(["DVIOUTH="+DVIOUTH,"\nmyhelp(fn) is set!"]);
+ return 0;
+ }
+ if(T==0){
+ mycat([
+ "myhelp(t) : show help\n",
+#ifdef USEMODULE
+ " t : -1 (dvi), 1 (pdf) or os_md.getbygrs, os_md.m2mc, os_md.mgen\n",
+#else
+ " t : -1 (dvi), 1 (pdf) or getbygrs, m2mc, mgen\n",
+#endif
+ " \"fn\" : Help of the function fn\n",
+ " [path,n] : path of dviout, n = # dviout\n",
+ " [DVIOUTH] : Way to jump to the help of a function\n",
+ " default: start dviout -2 \"%ASIRTOOT%\\help\\os_muldif.dvi\" #r:%LABEL%"
+ ]);
+ return 0;
+ }
+ if(type(T)==7){
+ if(str_str(T,"os_md.")==0) T=str_cut(T,6,str_len(T)-1);
+ Dr=str_subst(DVIOUTH,["%ASIRROOT%","%LABEL%"],[get_rootdir(),"r:"+str_subst(T,"_","")]);
+ shell(Dr);
+ return 0;
+ }
+ Dr=get_rootdir();
+ if(T==-1) Dr+="\\help\\os_muldif.dvi";
+ else Dr+="\\help\\os_muldif.pdf";
+ if(!isMs()) Dr=str_subst(Dr,"\\","/");
+ shell(Dr);
+ return 0;
+}
+
+def isMs()
+{
+ if(type(Tmp=getenv("TEMP"))!=7) {
+ if (type(Tmp=getenv("TMP")) != 7) Tmp=getenv("HOME");
+ }
+ if(type(Tmp)==7 && str_chr(Tmp,0,"\\")==2) return 1;
+ else return 0;
+}
+
+def tocsv(L)
+{
+ if(type(L)==6) L=m2ll(L);
+ else if(type(L)==5) L=vtol(L);
+ Null=getopt(null);
+ Tb=str_tb(0,0);
+ for(LL=L; LL!=[]; LL=cdr(LL)){
+ LT=car(LL);
+ if(type(LT)==5) LT=vtol(LT);
+ if(type(LT)<4) LT=[LT];
+ for(N=0; LT!=[]; LT=cdr(LT),N++){
+ if(N) str_tb(", ",Tb);
+ if((T=car(LT))==Null) continue;
+ if(type(T)==7){
+ K=str_len(T);
+ T=str_subst(T,["\""],["\"\""]);
+ if(str_len(T)>K||str_char(T,0,",")>=0) T="\""+T+"\"";
+ str_tb(T,Tb);
+ }else str_tb(rtostr(T),Tb);
+ }
+ str_tb("\n",Tb);
+ }
+ S=str_tb(0,Tb);
+ if(type(EXE=getopt(exe))!=1&&EXE!=0&&type(EXE)!=7) return S;
+ if(type(F)!=7){
+ fcat(-1,0);
+ F="risaout";
+ if(EXE>=2&&EXE<=9) F+=rtostr(EXE);
+ F=DIROUTD+F+".csv";
+ }else F=S;
+ if(EXE!=0 && access(F)) remove_file(F);
+ fcat(F,S|exe=1);
+ return 1;
+}
+
+def readcsv(F)
+{
+ if((ID=open_file(F))<0) return -1;
+ SJIS=isMs();
+ L=[];
+ if(type(V=getopt(eval))!=4){
+ if(V=="all") V=1;
+ else if(type(V)==1) V=[V];
+ else V=[];
+ }
+ Eq=getopt(eq);
+ Sp=getopt(sp);
+ if(type(T=getopt(col))!=1) T=0;
+ Null=getopt(null);
+ if(type(Null)<0) Null=(Eq==1)?0:"";
+ while((S=get_line(ID))!=0){
+ S=strtoascii(S);
+ N=length(S);
+ for(I=J=F=0,LL=LT=[];I<N;I++){
+ C=S[I];
+ if(F==0){
+ if(C<=32) continue;
+ if(C==34){F=2;continue;}
+ F=1;
+ }
+ if(F==2 && C==34){
+ if(I<N-1&& S[I+1]==34){
+ LT=cons(34,LT);I++;continue;
+ }
+ F=-2;
+ }
+ if(F==1){
+ if((C==44&&Sp!=1)||(C<=32&&Sp==1)) F=-1;
+ else if(C<32 && C!=9) continue;
+ }
+ if(SJIS && I<N-1 && ((C>128 && C<160)||(C>223 && C<240))){
+ LT=cons(C,LT);LT=cons(S[++I],LT);continue;
+ }
+ if(F>0){
+ LT=cons(C,LT);continue;
+ }
+ LS=asciitostr(reverse(LT));
+ if(V==1||findin(++J,V)>=0){
+ if(Eq==1) LS=(LS=="")?Null:eval_str(LS);
+ else LS=(isdecimal(LS))?eval_str(LS):((LS=="")?Null:LS);
+ }
+ if(!T || T==J) LL=cons(LS,LL);
+ if(F==-2) while(++I<N && Sp!=1 && S[I]!=44);
+ F=0;LT=[];
+ }
+ if(I<=N && (Sp!=1 || length(LT)>0)){ /* lastline */
+ LS=asciitostr(reverse(LT));
+ if(V==1||findin(++J,V)>=0){
+ if(Eq==1) LS=(LS=="")?Null:eval_str(LS);
+ else LS=(isdecimal(LS))?eval_str(LS):((LS=="")?Null:LS);
+ }
+ if(!T || T==J) LL=cons(LS,LL);
+ }
+ L=cons(reverse(LL),L);
+ }
+ close_file(ID);
+ if(T) L=m2l(L|flat=1);
+ L=reverse(L);
+ return L;
+}
+
+def showbyshell(S)
+{
+ Id = getbyshell(S);
+ if(Id<0) return Id;
+ while((S=get_line(Id))!=0) print(S,2);
+ return close_file(Id);
+}
+
+
+def getbyshell(S)
+{
+ /* extern DIROUT; */
+
+ Home=getenv("HOME");
+ if(type(Home)!=7) Home="";
+ if(type(Tmp=getenv("TEMP"))!=7 && type(Tmp=getenv("TMP")) != 7)
+ Tmp=str_subst(DIROUT,["%HOME%","%ASIRROOT%"],[Home,get_rootdir()]);
+ Sep=isMs()?"\\":"/";
+ F=Tmp+Sep+"muldif.tmp";
+ if(type(S)<=1 && S>=0) close_file(S);
+ remove_file(F);
+ if(type(S)<=1) return -1;
+ shell(S+" > \""+F+"\"");
+ return open_file(F);
+}
+
+def show(P)
+{
+ T=type(P);
+ S=P;
+ Var=getopt(opt);
+ if(Var=="verb"){
+ dviout("{\\tt"+verb_tex_form(T)+"}\n\n");
+ return;
+ }
+ if(type(Var)<0) Var=getopt(var);
+ if(T==6){
+ if((Sp=getopt(sp))==1 || Sp==2)
+ S=mtotex(P|lim=1,small=2,sp=Sp,null=1,mat="B");
+ else if(type(Var)==4 || type(Var)==7)
+ S=mtotex(P|lim=1,small=2,var=Var);
+ else
+ S=mtotex(P|lim=1,small=2);
+ Size=size(P);
+ Size=(Size[0]>Size[1])?Size[0]:Size[1];
+ if(Size>10) dviout0(Size);
+ }else if(T<=3){
+ X=0;
+ if(Var=="pfrac") X=var(P);
+ else X=getopt(pfrac);
+ if(isvar(X)){
+ pfrac(P,X|dviout=1);
+ return;
+ }
+ Opt=cons(["dviout",1],getopt());
+ if(type(Var)==2||type(Var)==4||type(Var)==7) fctrtos(P|option_list=Opt);
+ else{
+ if(isdif(P)!=0) Opt=cons(["var","dif"],Opt);
+ else Opt=cons(["br",1],Opt);
+ fctrtos(P|option_list=Opt);
+ }
+ return;
+ }else if(T==4){
+ if(type(Var)==4 || type(Var)==7){
+ S=ltotex(P|option_list=getopt());
+ if(Var=="text"){
+ dviout(S);
+ return;
+ }
+ }else{
+ for(F=0,L=P;L!=[] && F!=-1;L=cdr(L)){
+ LL=car(L);
+ if(type(LL)==4){
+ if(F==0){
+ T=type(LL[0]);
+ if(T==4) F=2; /* [[[? */
+ else if(T==1 || T==0) F=1; /* [[num,.. */
+ }
+ if(F==1){
+ if(length(LL)!=2 || !isint(LL[0]) || LL[0]<0 || type(LL[1])>3)
+ F=-1; /* [[num,rat],[num,rat],...] */
+ }else if(F==2){
+ for(LLT=LL; LLT!=[] && F!=-1; LLT=cdr(LLT)){
+ LLL=car(LLT); /* [[[num,rat],[num,rat],...],[[..],..]],....] */
+ if(length(LLL)!=2 || !isint(LLL[0]) || LLL[0]<0 || type(LLL[1])>3)
+ F=-1;
+ }
+ }
+ }else if((F==0 || F==7) && type(LL)==7){
+ F=7;
+ }else F=-1;
+ }
+ if(F==1) S=ltotex(P|opt="spt");
+ else if(F==2){
+ M=mtranspose(lv2m(S));
+ show(M|sp=1); /* GRS */
+ return;
+ }else if(F==7) S=ltotex(P|opt="spts");
+ else{
+ for(F=0,L=P;L!=[] && F!=-1;L=cdr(L)){
+ LL=car(L);
+ if(type(LL)!=4){
+ F=-1; break;
+ }
+ for(LLT=LL; LLT!=[] && F!=-1; LLT=cdr(LLT)){
+ T=type(LLL=car(LLT));
+ if(T<7 && T!=4) F0++;
+ else if(T==7){
+ if(str_char(LLL,0,"\\")<0) F1++;
+ else F2++;
+ }else F=-1;
+ }
+ }
+ }
+ if(F==0 && F0>0 && (F1+F2)>0){ /* list of list of eq and str */
+ if(F2>0) S=ltotex(P|opt=["cr","spts0"],str=1);
+ else S=ltotex(P|opt=["cr","spts"]);
+ }else{
+ for(S="[";;){
+ S+=my_tex_form(car(P));
+ if((P=cdr(P))==[]){
+ S+="]";break;
+ }
+ S+=",";
+ }
+ }
+ }
+ }else if(T==7){
+ if(Var=="raw" ||
+ (Var !="eq" && str_chr(P,0,"\\")<0 && str_char(P,0,"^")<0 && str_char(P,0,"_")<0
+ && str_char(P,0,"&")<0)){
+ dviout(P+"\n\n");
+ return;
+ }
+ }
+ dviout(S|eq=5);
+}
+
+
+/* options : eq = 1 - 8, clear=1, keep=1, delete=1, title=s,
+ fctr=1, begin=s */
+def dviout(L)
+{
+ /* extern AMSTeX, TeXEq, DIROUT, DVIOUTA, DVIOUTB, DVIOUTL; */
+
+ MyEq = [
+ ["\\[\n ","\\]"],
+ ["\\begin{align}\n","\\end{align}"],
+ ["\\begin{gather}\n ","\\end{gather}"],
+ ["\\begin{multline}\n ","\\\\[-15pt]\\end{multline}"],
+ ["\\begin{align}\\begin{split}\n &","\\end{split}\\end{align}"],
+ ["\\begin{align*}\n &","\\end{align*}"],
+ ["\\begin{gather*}\n ","\\end{gather*}"],
+ ["\\begin{equation}\n ","\\end{equation}"]
+ ];
+ if(!chkfun("print_tex_form", "names.rr"))
+ return 0;
+ Home=getenv("HOME");
+ if(type(Home)!=7) Home="";
+ Dir=str_subst(DIROUT,["%HOME%","%ASIRROOT%","\\"],[Home,get_rootdir(),"/"]);
+ Dirout=Dir+(AMSTeX?"/out.tex":"/out0.tex");
+ Risaout=(AMSTeX)?"risaout":"risaout0";
+ Dirisa=Dir+"/"+Risaout+".tex";
+ Viewer="dviout";
+ SV=["c:/w32tex/dviout","c:/dviout"];
+ Risatex=str_subst(AMSTeX?DVIOUTA:DVIOUTL,
+ ["%HOME%","%ASIRROOT%","%TikZ%"],[Home,get_rootdir(),rtostr(TikZ)]);
+ if(isMs() && !access(Risatex)){
+ for(TV=SV; TV!=[]; TV=cdr(TV)){
+ VV=car(TV)+"/dviout.exe";
+ if(access(VV)){
+ Viewer=str_subst(VV,"/","\\");
+ break;
+ }
+ }
+ output(Risatex);
+ print("cd \""+str_subst(Dir,"/","\\")+"\"");
+ print("latex -src=cr,display,hbox,math,par "+Risaout);
+ print("start "+Viewer+" -1 \""+Dr+"\\tex\\"+Risaout+"\" 1000");
+ output();
+ }
+ if(access(Dirisa) == 0){
+ D0="\""+(isMs()?str_subst(Dir,"/","\\")+"\"":Dir);
+ shell("mkdir "+D0);
+ output(Dirisa);
+ if(AMSTeX){
+ print("\\documentclass[a4paper]{amsart}");
+ print("\\usepackage{amsmath,amssymb,amsfonts}");
+ }else
+ print("\\documentclass[a4paper]{article}");
+ print("\\pagestyle{empty}\n\\begin{document}\n\\thispagestyle{empty}");
+ print(AMSTeX?"\\input{out}\n\\end{document}":"\\input{out0}\n\\end{document}");
+ output();
+ }
+ if((K = getopt(delete)) >= 1){ /* delete */
+ LC = 0;
+ if(type(K) == 1 && K > 10) K = 10;
+ if(type(K) == 4){
+ K = qsort(K);
+ LC = 1; /* specific lines */
+ }
+ Done = 1;
+ Id = open_file(Dirout);
+ if(Id >= 0){
+ Buf = Buf0 = Buf1 = Key = "";
+ PE = 0;
+ if(type(K) == 1)
+ BufE = newvect(K--);
+ Dout = Dirout+"0";
+ remove_file(Dout);
+ output(Dout);
+ while((S = get_line(Id)) != 0){
+ if(LC){
+ while(K != [] && car(K) < LC)
+ K = cdr(K);
+ if(K == [] || car(K) > LC)
+ output(S);
+ }
+ if(Key == ""){
+ if((P0 = str_str(S,"\\begin{")) == 0){
+ Key = sub_str(S,7,str_str(S,"}")-1);
+ if(findin(Key,["align", "gather","multline", "equation","align*"]) < 0)
+ Key = "";
+ else{
+ Key = "\\end{"+Key+"}";
+ if(!LC){
+ if(Buf != ""){
+ if(PE < K)
+ BufE[PE++] = Buf1+Buf;
+ else{
+ if(K > 0){
+ print(BufE[0]);
+ for(I = 1; I < K; I++)
+ BufE[I-1]=BufE[I];
+ BufE[K-1] = Buf1+Buf;
+ }else
+ print(Buf1+Buf);
+ Done = 0;
+ }
+ Buf1 = Buf0;
+ Buf = Buf0 ="";
+ }
+ }
+ }
+ }
+ if(Key == "" && !LC) Buf0 += S;
+ }
+ if(Key != ""){
+ if(!LC) Buf += S;
+ if(str_str(S,Key) >= 0){
+ Key = "";
+ if(LC) LC++;
+ }
+ }
+ }
+ output();
+ close_file(Id);
+ }
+ if(Done==0){
+ Id = open_file(Dout);
+ if(Id >= 0){
+ remove_file(Dirout);
+ output(Dirout);
+ while((S = get_line(Id)) != 0)
+ print(S,0);
+ output();
+ close_file(Id);
+ }
+ remove_file(Dout);
+ }else L=" ";
+ }
+ if(getopt(clear) == 1 || Done == 1){ /* clear */
+ remove_file(Dirout);
+ if(L == "" || L == " "){
+ output(Dirout);
+ print("\\centerline{Risa/Asir}");
+ output();
+ }
+ }
+ if(L != " "){
+ Eq=1;
+ Eqo = getopt(eq);
+ Fc = getopt(fctr);
+ if(Fc == 1 && (type(L) == 2 || type(L) == 3)){
+ L = fctrtos(L|TeX=1);
+ if(type(L) == 4)
+ L = "\\fact{"+L[0]+"}{"+L[1]+"}";
+ if(type(Eqo) != 0 && type(Eqo) !=7){
+ Eqo=0;
+ }
+ }
+ if(type(L) != 4 || getopt(mult) != 1)
+ L = [L];
+ if(type(Eqo)!=7 && (Eqo<1 || Eqo>8))
+ Eqo = (AMSTeX==1)?TeXEq:1;
+ Title = getopt(title);
+ if(type(Title) == 7){
+ output(Dirout);
+ print(Title);
+ output();
+ }
+ Sb = getopt(subst);
+ for( ; L != []; L = cdr(L)){
+ Eq = 1;
+ if(type(LT=car(L)) != 7 && type(LT) != 21)
+ LT = my_tex_form(LT);
+ else if(type(getopt(eq)) < 0)
+ Eq = 0;
+ if(type(Sb) == 4)
+ LT = str_subst(LT,Sb[0],Sb[1]);
+ output(Dirout);
+ if(Eq == 1){
+ if(type(Eqo)==7)
+ print(texbegin(Eqo,LT));
+ else if(Eqo >= 1 && Eqo <= 8){
+ mycat0([MyEq[Eqo-1][0],LT,"%"],1);
+ print(MyEq[Eqo-1][1]);
+ }else print(LT);
+ }else print(LT);
+ output();
+ }
+ }
+ if(str_char(Risatex,0," ")>=0 && str_char(DVIOUTA,0," ")<0 && str_char(DVIOUTB,0," ")<0
+ && str_char(DVIOUTL,0," ")<0)
+ Risatex="\""+Risatex+"\"";
+ if(getopt(keep) != 1) shell(Risatex);
+ return 1;
+}
+
+def rtotex(P)
+{
+ S = my_tex_form(P);
+ return (str_len(S) == 1)?S:"{"+S+"}";
+}
+
+def mtotex(M)
+{
+ /* extern TexLim; */
+
+ MB=mat(["(",")","p"],["\\{","\\}","B"],["[","]","b"],["|","|","v"],
+ ["\\|","\\|","V"], [".",".",""]);
+ if(type(MT=getopt(mat))==7){
+ MT=findin(MT,["p","B","b","v","V",""]);
+ if(MT<0) MT=0;
+ }
+ else MT=0;
+ MT=MB[MT];
+ if((F=getopt(small))!=1 && F!=2) F=0;
+ Lim=getopt(lim);
+ if(type(Lim)==1){
+ if(Lim<30 && Lim!=0) Lim = TexLim;
+ }else Lim=0;
+ FL=getopt(len);
+ Rw=getopt(raw);
+ Sp=getopt(sp);
+ Idx=getopt(idx);
+ if(type(Idx)==4) Idx=ltov(Idx);
+ if(type(Idx)==6 && length(Idx)==0) Idx=-1;
+ Var=getopt(var);
+ if(Lim>0) FL=1;
+ Null=getopt(null);
+ if(Null!=1 && Null!=2) Null=0;
+ if(type(M)==5) M=lv2m([V]);
+ else if(type(M)!=6) return monototex(M);
+ S=size(M);
+ if(FL==1){
+ L=newmat(S[0],S[1]); LL=newvect(S[1]);
+ }
+ SS=newmat(S[0],S[1]);
+ for(I=0; I<S[0]; I++){
+ for(J=0; J<S[1]; J++){
+ if(type(P=M[I][J])<=3){
+ if(P!=0 || Null == 0 || (Null==2 && I==J)){
+ SS[I][J]=(type(Var)>1)?fctrtos(P|TeX=2,lim=0,var=Var):fctrtos(P|TeX=2,lim=0);
+ if(type(P)==1 && str_str(SS[I][J],"\\frac{-"|end=0)==0)
+ SS[I][J]="-\\frac{"+str_cut(SS[I][J],7,100000);
+ }
+ }else if(type(P)==6){
+ ST= mtotex(P|small=1,len=1);
+ SS[I][J]=ST[0];
+ L[I][J]=ST[1];
+ }else if(type(P)==7){
+ if(Rw==1) SS[I][J]=P;
+ else SS[I][J]="\\text{"+P+"\}";
+ }else if(type(P)==4 && length(P)==2 && P[0]>0 && (Sp==1 || Sp==2)){
+ if(P[0]==1){
+ SS[I][J]=fctrtos(P[1]|TeX=2,lim=0);
+ }else{
+ ST=my_tex_form(P[0]);
+ if(Sp==2) ST="("+ST+")";
+ SS[I][J]="["+fctrtos(P[1]|TeX=2,lim=0)+"]_";
+ if(str_len(ST)<2) SS[I][J]+=ST;
+ else SS[I][J]+="{"+ST+"}";
+ }
+ }else
+ SS[I][J]=my_tex_form(P);
+ if(FL==1) L[I][J]=texlen(SS[I][J]);
+ }
+ }
+ if(Lim>0 || FL==1){
+ for(LLL=J=0; J<S[1];J++){
+ for(I=K=0; I<S[0];I++){
+ if(K<L[I][J]) K=L[I][J];
+ }
+ LLL+=(LL[J]=K);
+ }
+ }
+ if(Lim>0){
+ if(F==2 && LLL>Lim-2*S[1]-2) F=1;
+ if(F==1)
+ Lim=idiv(Lim*6,5);
+ if(LLL<=Lim-(2-F)*S[I]-2) Lim=0;
+ }
+ Mat=(F==1)?"smallmatrix}":"matrix}";
+ if(F==1) Out=str_tb("\\left"+MT[0]+"\\begin{",0);
+ else Out=str_tb((Lim==0)?"\\begin{"+MT[2]:"\\left"+MT[0]+"\\begin{",0);
+ Out = str_tb(Mat,Out);
+ for(I=II=LT=0; II<=S[0]; II++){
+ if(Lim==0) II=S[0];
+ if(II<S[0]){
+ K=LL[II]+(2-F);
+ if(I==II){
+ LT+=K;
+ continue;
+ }
+ if(LT+K<Lim-2) continue;
+ LT=K;
+ }
+ for(I0=I; I<II; I++){
+ if(I==I0){
+ str_tb((I==0)?
+ "\n ":
+ "\\right.\\\\\n \\allowdisplaybreaks\\\\\n &\\ \\left.\\begin{"+Mat+"\n ", Out);
+ if(Idx==1||Idx==0||type(Idx)==5){
+ for(J=I; J<II; J++){
+ if(type(Idx)!=4)
+ str_tb("("+rtostr(J+Idx)+")",Out);
+ else{
+ JJ=length(Idx)-1;
+ if(J<JJ) JJ=J;
+ str_tb(my_tex_form(Idx[JJ]),Out);
+ }
+ if(J<II) str_tb(" & ",Out);
+ }
+ str_tb("\\\\\n ",Out);
+ }
+ }
+ else str_tb("\\\\\n ",Out);
+ for(J=0; J<S[1]; J++){
+ if(J!=0) str_tb(" & ",Out);
+ if(type(SS[I][J])==7) str_tb(SS[I][J],Out);
+ }
+ }
+ Out=str_tb("\n\\end{", Out);
+ if(II==S[0]) Out=str_tb((Lim==0&&F!=1)?MT[2]+Mat:Mat+"\\right"+MT[1],Out);
+ else Out=str_tb(Mat+"\\right.",Out);
+ }
+ SS = str_tb(0,Out);
+ if(FL!=1) return SS;
+ if(F==1) LLL=idiv((LLL+S[1])*5+13,6);
+ else LLL+=2*(1+S[1]);
+ return [SS,LLL];
+}
+
+def sint(N,P)
+{
+ if( type(N)==1 || N==0 ) {
+ NT=ntype(N);
+ if((type(Opt=getopt(str))==1 || Opt==0) && Opt>=0 && P>=0){
+ if(Opt==2 || Opt==4 || Opt==0){
+ if(N==0) return (Opt>0)?"0":0;
+ Pw=0;
+ if(NT==4){
+ NN=abs(real(N));N1=abs(imag(N));
+ if(NN<N1) NN=N1;
+ }else NN=abs(N);
+ while(NN<1 && NN>-1){
+ Pw--;
+ N*=10;NN*=10;
+ }
+ while(N>=10 || N<=-10){
+ Pw++;
+ N/=10;NN/=10;
+ }
+ if(Opt==0) return sint(N*10^Pw,P-Pw-1);
+ S=(getopt(sqrt)==1)?sint(N,P|str=(Opt==4)?3:1,sqrt=1):sint(N,P|str=(Opt==4)?3:1);
+ if(Pw==0) return S;
+ if(NT==4)
+ S="("+S+")";
+ if(Pw==1){
+ if(Opt==2)
+ return S+"*10";
+ else
+ return S+"\\times10";
+ }
+ if(Opt==2)
+ return S+"*10^("+rtostr(Pw)+")";
+ else
+ return S+"\\times10^{"+rtostr(Pw)+"}";
+ }
+ if(NT==4){
+ NN=real(N);
+ if(NN!=0){
+ S=sint(NN,P|str=1);
+ if(imag(N)>0) S=S+"+";
+ }
+ else S="";
+ S=S+sint(imag(N),P|str=1)+((Opt==3)?((getopt(sqrt)==1)?"\\sqrt{-1}":"i"):"@i");
+ return S;
+ }
+ if(N<0){
+ N=-N;
+ Neg="-";
+ }else Neg="";
+ N=rint(N*10^P)/10^P;
+ NN=floor(N);
+ NV=(N-NN+1)*10^P;
+ NS=rtostr(NN);
+ if(P<=0) return Neg+NS;
+ if(NN==0 && getopt(zero)==0) NS="";
+ return Neg+NS+"."+str_cut(rtostr(NV),1,P);
+ }
+ if(NT==4)
+ return sint(real(N),P)+sint(imag(N),P)*@i;
+ X = rint( N*10^P );
+ return deval(X/10^P);
+ }
+ if( (type(N)==2) || (type(N)==3) ){
+ NN = eval(N);
+ if( type(NN)==1 )
+ return sint(NN,P|option_list=getopt());
+ else return N;
+ }
+ if( type(N)>3 && type(N) < 7)
+#ifdef USEMODULE
+ return mtransbys(os_md.sint,N,[P]|option_list=getopt());
+#else
+ return mtransbys(sint,N,[P]|option_list=getopt()));
+#endif
+ return N;
+}
+
+def frac2n(N)
+{
+ if((T=type(N))<0) return N;
+ E=(getopt(big)==1)?eval(@e):0.1;
+ if(T==1){
+ if(ntype(N)==0) return (E*N)/E;
+ else if(ntype(N)!=4) return N;
+ else return (E*(1+@i)*N)/(E*(1+@i));
+ }
+ if(T==3||T==2){
+ N=red(N);
+ Nm=nm(N);Var=vars(Nm);V=car(Var);K=length(Var);
+ for(S=0,I=mydeg(Nm,V);I>=0;I--) S+=frac2n(mycoef(Nm,I,V))*V^I;
+ return S/dn(N);
+ }
+ if(T<4) return (E*N)/E;
+#ifdef USEMODULE
+ return mtransbys(os_md.frac2n,N,[]|option_list=getopt());
+#else
+ return mtransbys(frac2n,N,[]|option_list=getopt());
+#endif
+}
+
+def xyproc(F)
+{
+ if(type(Opt=getopt(opt))!=7) Opt="";
+ if(type(Env=getopt(env))!=7)
+ Env=(!TikZ)?"xy":"tikzpicture";
+ if(F==1)
+ return(Opt=="")?"\\begin{"+Env+"}\n":"\\begin{"+Env+"}["+Opt+"]\n";
+ if(F==0) return "\\end{"+Env+"}\n";
+ if(type(F)==7){
+ F=xyproc(1|opt=Opt,env=Env)+F+xyproc(0|env=Env);
+ if(getopt(dviout)==1) dviout(F);
+ else return F;
+ }
+}
+
+def xypos(P)
+{
+ if(type(P[0])==7){
+ if(P[0]=="") S="";
+ else S=(!TikZ)?"\""+P[0]+"\"":"("+P[0]+")";
+ }
+ else{
+ if(TikZ==0 && XYcm==1){
+ X=sint(P[0]*10,XYPrec); Y=sint(P[1]*10,XYPrec);
+ }else{
+ X=sint(P[0],XYPrec); Y=sint(P[1],XYPrec);
+ }
+ S="("+rtostr(X)+","+rtostr(Y)+")";
+ }
+ if(!TikZ){
+ if(length(P)>2 && (PP=P[2])!=""){
+ S=S+" *";
+ if(type(PP)==4 && length(PP)==2 && type(PP[0])==7){
+ S=S+PP[0];
+ PP=PP[1];
+ }
+ if(type(PP)==7){
+ L=str_len(PP);
+ if(str_chr(PP,0,"$")==0 && str_chr(PP,L-1,"$")==L-1){
+ PP=str_cut(PP,1,L-2);
+ }else S+="\\txt";
+ }
+ else PP=my_tex_form(PP);
+ S=S+"{"+PP+"}";
+ }
+ if(length(P)>3){
+ if(type(P[3])==7 && P[3]!="") S=S+"=\""+P[3]+"\"";
+ if(length(P)>4 && type(P[4])==7) S=S+P[4];
+ }
+ }else{
+ T="";
+ if(length(P)>2 && (PP=P[2])!=""){
+ F=1;
+ if(type(PP)==4){
+ if(length(PP)==2 && type(PP[0])==7){
+ T="["+PP[0]+"]";
+ PP=PP[1];
+ }
+ }
+ if(type(PP)!=7) PP="$"+my_tex_form(PP)+"$";
+ S=S+"{"+PP+"}";
+ }else F=0;
+ if(length(P)>3){
+ if(type(P[3])==7 && P[3]!="") T=T+"("+P[3]+")";
+ else if(P[3]==1) T=T+"(_)";
+ if(length(P)>4 && type(P[4])==7) S=S+P[4];
+ }
+ if(length(P)>2){
+ if(F) S="node"+T+" at"+S;
+ else S="coordinate"+T+" at"+S;
+ }
+ }
+ return S;
+}
+
+def xyput(P)
+{
+ if((type(Sc=getopt(scale))==1 && Sc!=1) || type(Sc)==4){
+ if(type(Sc)==1) Sc=[Sc,Sc];
+ Sx=Sc[0];Sy=Sc[1];
+ if(length(P)>2)
+ P1=cons(Sy*P[1],cdr(cdr(P)));
+ else P1=[Sy*P[1]];
+ P=cons((type(P[0])==7)?P[0]:(Sx*P[0]),P1);
+ }
+ if(!TikZ) return "{"+xypos(P)+"};\n";
+ return "\\"+xypos(P)+";\n";
+}
+
+def xyline(P,Q)
+{
+ if(!TikZ) return "{"+xypos(P)+" \\ar@{-} "+xypos(Q)+"};\n";
+ if(type(T=getopt(opt))!=7) T="";
+ else T="["+T+"]";
+ if(length(P)<3 && length(Q)<3)
+ return "\\draw"+T+xypos(P)+"--"+xypos(Q)+";\n";
+ if(length(P)==2) P=[P[0],P[1],"","_0"];
+ else if(length(P)==3 || (length(P)==4 && P[3]==""))
+ P=[P[0],P[1],P[2],"_0"];
+ else if(length(P)>4 && P[3]=="")
+ P=[P[0],P[1],P[2],"_0",P[4]];
+ if(length(Q)==2) Q=[Q[0],Q[1],"","_1"];
+ else if(length(Q)==3 || (length(Q)==4 && Q[3]==""))
+ Q=[Q[0],Q[1],Q[2],"_1"];
+ else if(length(Q)>4 && Q[3]=="")
+ Q=[Q[0],Q[1],Q[2],"_1",Q[4]];
+ return "\\draw "+T+xypos(P)+" "+xypos(Q)+"("+P[3]+")--("+Q[3]+");\n";
+}
+
+def xylines(P)
+{
+ Lf=getopt(curve);
+ if(type(Lf)!=1) Lf=0;
+ SS=getopt(opt);
+ SF=(SS==0)?1:0;
+ if((Proc=getopt(proc))==1||Proc==2||Proc==3){
+ OL=cons(["opt",0],delopt(getopt(),["opt","proc"]));
+ R=xylines(P|option_list=OL);
+ OP=(type(SS)<0)?[]:((type(SS)==4)?[["opt",SS[0]],["cmd",SS[1]]]:[["opt",SS]]);
+ return [1,OP,R];
+ }
+ if(type(SS)!=7 && type(SS)!=4){
+ if(Lf==0 && !TikZ) SS="@{-}";
+ else SS="";
+ }
+ if(type(Sc=getopt(scale))==1 || type(Sc)==4){
+ if(type(Sc)==1) Sc=[Sc,Sc];
+ Sx=Sc[0];Sy=Sc[1];
+ if(Sx!=1 || Sy!=1){
+ for(PP=[], P0=P; P0!=[]; P0=cdr(P0)){
+ PT=car(P0);
+ if((type(PT)!=4 && type(PT)!=5) || (type(PT[0])!=1 && PT[0]!=0))
+ PP=cons(PT,PP);
+ else{
+ if(length(PT)>2 && type(PT)==4)
+ P1=cons(Sy*PT[1],cdr(cdr(PT)));
+ else P1=[Sy*PT[1]];
+ PP=cons(cons(Sx*PT[0],P1),PP);
+ }
+ }
+ P=reverse(PP);
+ }
+ }
+ if(type(Cl=CL0=getopt(close))!=1) Cl=0;
+ if((Vb=getopt(verb))!=1&&type(Vb)!=4) Vb=0;
+ if(type(Lf)!=1 || Lf==0){ /* lines */
+ if(TikZ||SF){
+ for(L=[],F=0,PT=P;PT!=[];PT=cdr(PT)){
+ if(type(car(PT))<4){
+ L=cons(car(PT),L);
+ F=0;
+ }else{
+ if(F++>1) L=cons(1,L);
+ L=cons(car(PT),L);
+ }
+ }
+ if(Cl==1){
+ L=cons(1,L);L=cons(-1,L);
+ }
+ if(L) L=reverse(L);
+ if(SF) return L;
+ if(type(SS)!=4) S=xybezier(L|opt=SS);
+ else S=xybezier(L|opt=SS[0],cmd=SS[1]);
+
+ }else{
+ Out = str_tb(0,0);
+ for(PT=P; PT!=[]; ){
+ PS1=car(PT);
+ PT=cdr(PT);
+ if(PT==[]){
+ if(Cl==1) PS2=car(P);
+ else PS2=0;
+ }else PS2=car(PT);
+ str_tb(xyarrow(PS1,PS2|opt=SS),Out);
+ }
+ S=str_tb(0,Out);
+ }
+ }else if(Lf==2){ /* B-spline */
+ if(SF) return P;
+ if(!TikZ){
+ Out = str_tb("{\\curve{",0);
+ for(PT=P;PT!=[];PT=cdr(PT)){
+ if(car(PT)==0){
+ str_tb("}};\n{\\curve{",Out);
+ continue;
+ }
+ if(PT!=P) str_tb("&",Out);
+ str_tb(xypos([car(PT)[0],car(PT)[1]]),Out);
+ }
+ str_tb("}};\n",Out);
+ S=str_tb(0,Out);
+ }else Out=str_tb(xybezier(P|opt=SS),0);
+ for(I=0;I<2;I++){
+ Q=car(P);
+ if(length(Q)>2)
+ str_tb(xyput(Q),Out);
+ P=reverse(P);
+ }
+ S=str_tb(0,Out);
+ }else{ /* extended Bezier */
+ RTo=getopt(ratio);
+ if(type(Acc=getopt(Acc))!=1) Acc=0;
+ if(type(RTo)!=1 || RTo>1.5 || RTo<0.001) RTo=0;
+ if(Cl==1){
+ PR=reverse(P);
+ PT=car(PR);
+ PR=cons(P[0],PR);
+ PR=cons(P[1],PR);
+ P=cons(PT,reverse(PR));
+ }else if(Cl==-1) Cl=1;
+ for(L=P2=P3=0,PT=P;;){
+ P1=P2;P2=P3;P3=P4;
+ P4=(PT==[])?0:car(PT);
+ if(PT==[] && (Cl==1 || P3==0)) break;
+ PT=cdr(PT);
+ if(P3==0) str_tb("%\n", Out);
+ if(P2==0 || P3==0 || (Cl==1 && P1==0)) continue;
+ if(L!=0){
+ if(car(L)==P2)
+ L=cons(1,L);
+ else{
+ L=cons(0,L); L=cons(P2,L);
+ }
+ }else L=[P2];
+ X=P3[0]-P2[0];Y=P3[1]-P2[1];
+ DL1=DL2=0;DL=Acc?sqrt(X^2+Y^2):dsqrt(X^2+Y^2);
+ if(P4!=0){
+ XD1=P4[0]-P2[0];YD1=P4[1]-P2[1];DL1=Acc?sqrt(XD1^2+YD1^2):dsqrt(XD1^2+YD1^2);
+ }
+ if(P1!=0){
+ XD2=P3[0]-P1[0];YD2=P3[1]-P1[1];DL2=Acc?sqrt(XD2^2+YD2^2):dsqrt(XD2^2+YD2^2);
+ }
+ if(RTo!=0)
+ R=RTo;
+ else if(DL1>0 && DL2>0){
+ Cos=(XD1*XD2+YD1*YD2)/(DL1*DL2);
+ RT=4/(3*(Acc?sqrt((1+Cos)/2):dsqrt((1+Cos)/2))+3);
+ R=DL*RT/(DL1+DL2);
+ }else if(DL1!=0)
+ R=DL/(2*DL1);
+ else if(DL2!=0)
+ R=DL/(2*DL2);
+ if(DL2!=0) L=cons([P2[0]+R*XD2,P2[1]+R*YD2],L);
+ if(DL1!=0) L=cons([P3[0]-R*XD1,P3[1]-R*YD1],L);
+ L=cons([P3[0],P3[1]],L);
+ }
+ if(CL0==1) L=cons(-1,cdr(L));
+ if(L!=0) L=reverse(L);
+ if(SF) return L;
+ if(type(SS)==4)
+ S=xybezier(L|opt=SS[0],cmd=SS[1],verb=Vb);
+ else
+ S=xybezier(L|opt=SS,verb=Vb);
+ }
+ if(getopt(dviout)!=1) return S;
+ xyproc(S|dviout=1);
+}
+
+def saveproc(S,Out)
+{
+ if(type(Out)==4){
+ Out=cons(S,Out);
+ return Out;
+ }else{
+ str_tb(S,Out);
+ return Out;
+ }
+}
+
+def xygrid(X,Y)
+{
+ for(RR=[],I=0,Z=X;I<2;I++){
+ U=Z[2];L=LL=[];M=Z[3];
+ if(Z[1]==1||Z[1]==-1){
+ if(type(M)==4) L=M;
+ else{
+ if(U*(-dlog(1-1/20)/dlog(10))>=M){
+ L=cons([1,2,1/10],L);
+ LL=cons([1,2,1/2],LL);
+ }else if(U*(-dlog(1-1/10)/dlog(10))>=M)
+ L=cons([1,2,1/5],L);
+ else if(U*(-dlog(1-1/4)/dlog(10))>=M)
+ L=cons([1,2,1/2],L);
+ if(U*(-dlog(1-1/50)/dlog(10))>=M){
+ L=cons([2,5,1/10],L);
+ LL=cons([2,5,1/2],LL);
+ }else if(U*(-dlog(1-1/25)/dlog(10))>=M)
+ L=cons([2,5,1/5],L);
+ else if(U*(-dlog(1-1/10)/dlog(10))>=M)
+ L=cons([2,5,1/2],L);
+ if(U*(-dlog(1-1/100)/dlog(10))>=M){
+ L=cons([5,10,1/10],L);
+ LL=cons([5,10,1/2],LL);
+ }
+ else if(U*(-dlog(1-1/50)/dlog(10))>=M)
+ L=cons([5,10,1/5],L);
+ else if(U*(-dlog(1-1/20)/dlog(10))>=M)
+ L=cons([5,10,1/2],L);
+ L=cons(L,cons(LL,[[[1,10,1]]]));
+ }
+ R=scale(L|scale=U);
+ if(Z[1]==-1){
+ for(LL=[];R!=[];R=cdr(R)){
+ for(L=[],T=car(R);T!=[];T=cdr(T)) L=cons(U-car(T),L);
+ LL=cons(reverse(L),LL);
+ }
+ R=reverse(LL);
+ }
+ }else if(Z[1]==0){
+ if(type(M)==4){
+ R=scale(M|f=x,scale=U);
+ }else{
+ V=0;
+ if(U/10>=M) V=1/10;
+ else if(U/5>=M) V=1/5;
+ else if(U/2>=M) V=1/2;
+ R=[];
+ if(V>0){
+ UU=U*V;
+ for(R=[],J=UU;J<U;J+=UU) R=cons(J,R);
+ }
+ if(V==1/10) L=[U/2];
+ else L=[];
+ R=cons(R,cons(L,[[0,U]]));
+ }
+ }else if(type(Z[1])==4){
+ R=Z[1];
+ if(length(R)==0||type(R[0])!=4) R=[[],[],R];
+ }else return 0;
+ K=length(R);
+ S=newvect(K);
+ for(J=0;J<K;J++){
+ for(S[J]=[],JJ=0;JJ<=Z[0];JJ+=U){
+ for(P=R[J];P!=[];P=cdr(P))
+ if(car(P)+JJ<=Z[0]) S[J]=cons(car(P)+JJ,S[J]);
+ }
+ }
+ for(J=0;J<K;J++) S[J]=lsort(S[J],[],1);
+ for(U=[],J=K-1;J>0;J--){
+ U=lsort(S[J],U,0);S[J-1]=lsort(S[J-1],U,1);
+ }
+ RR=cons(vtol(S),RR);
+ Z=Y;
+ }
+ if((Raw=getopt(raw))==1) return RR;
+ SS=[];
+ if(type(Sf=getopt(shift))==7){
+ Sx=Sf[0];Sy=Sf[1];
+ }else Sx=Sy=0;
+ for(I=0;I<2;I++){
+ for(S0=[],L=RR[I];L!=[];L=cdr(L)){
+ for(S=[],T=car(L);T!=[];T=cdr(T)){
+ if(S!=[]) S=cons(0,S);
+ if(I==0){
+ S=cons([X[0]+Sx,car(T)+Sy],S);
+ S=cons([Sx,car(T)+Sy],S);
+ }else{
+ S=cons([car(T)+Sx,Y[0]+Sy],S);
+ S=cons([car(T)+Sx,Sy],S);
+ }
+ }
+ S0=cons(S,S0);
+ }
+ SS=cons(reverse(S0),SS);
+ }
+ SS=reverse(SS);
+ if(Raw==2) return SS;
+ if(length(Y)<5) T=[["",""]];
+ else if(type(Y[4])==4) T=[Y[4]];
+ else T=[Y[4],Y[4]];
+ if(length(X[4])==4) T=cons([""],T);
+ else if(type(X[4])==4) T=cons(X[4],T);
+ else T=cons([X[4]],T);
+ for(Sx=Sy=[],I=0;I<2;I++){
+ TT=T[I];
+ for(V=SS[I];V!=[];V=cdr(V)){
+ Op=car(TT);
+ if(length(TT)>1) TT=cdr(TT);
+ if(car(V)==[]) continue;
+ if(Op=="") S=xylines(car(V));
+ else S=xylines(car(V)|opt=Op);
+ if(I==0) Sx=cons(S,Sx);
+ else Sy=cons(S,Sy);
+ }
+ }
+ for(S="",Sx=reverse(Sx), Sy=reverse(Sy);Sx!=[]&&Sy!=[];){
+ if(Sx!=[]){
+ S+=car(Sx);Sx=cdr(Sx);
+ }
+ if(Sy!=[]){
+ S+=car(Sy);Sy=cdr(Sy);
+ }
+ }
+ return S;
+}
+
+
+def addIL(I,L)
+{
+ if(I==0){
+ for(R=[];L!=[];L=cdr(L)) R=addIL(car(L),R);
+ return reverse(R);
+ }
+ if(type(In=getopt(in))==1){
+ if(In==-1){
+ J=JJ=I[1];I=I[0];
+ for(R=[];L!=[];L=cdr(L)){
+ J=lmin([car(L)[0],JJ]);
+ if(J>I) R=cons([I,J],R);
+ I=lmax([car(L)[1],I]);
+ }
+ if(I<JJ) R=cons([I,JJ],R);
+ return reverse(R);
+ }else{
+ for(;L!=[];L=cdr(L)){
+ if(car(L)[0]>I) return 0;
+ if(car(L)[1]>=I){
+ if(In==3) return car(L);
+ if(In==1||(I!=car(L)[0]&&I!=car(L)[1])) return 1;
+ return 2;
+ }
+ }
+ return 0;
+ }
+ }
+ I0=car(I);I1=I[1];
+ for(F=0,R=[];L!=[];L=cdr(L)){
+ if(I0>car(L)[1]){
+ R=cons(car(L),R);
+ continue;
+ }
+ if(I0<=car(L)[1]){
+ I0=lmin([I0,car(L)[0]]);
+ if(I1<car(L)[0]){
+ R=cons([I0,I1],R);
+ for( ;L!=[];L=cdr(L)) R=cons(car(L),R);
+ F=1;
+ break;
+ }
+ I1=lmax([I1,car(L)[1]]);
+ }
+ }
+ if(!F) R=cons([I0,I1],R);
+ return reverse(R);
+}
+
+def xy2curve(F,N,Lx,Ly,Lz,A,B)
+{
+ Raw=getopt(raw);
+ if(type(Gap=getopt(gap))==4){
+ MG=Gap[1];Gap=car(Gap);
+ }else MG=3;
+ if(type(Gap)!=1 && Gap!=0) Gap=0.7;
+ if(type(Dvi=getopt(dviout))<1) Dvi=0;
+ OL=[["dviout",Dvi]];
+ if(type(Opt=getopt(opt))<1) Opt=0;
+ else OL=cons(["opt",Opt],OL);
+ if(type(Sc=getopt(scale))!=1 && type(Sc)!=4) Sc=[1,1,1];
+ else if(type(Sc)!=4) Sc=[Sc,Sc,Sc];
+ else if(length(Sc)!=3) Sc=[Sc[0],Sc[1],Sc[1]];
+ M=diagm(3,Sc);
+ if(A!=0||B!=0){
+ if(type(A)!=6){ /* M=mrot([-A,B,0]|deg=1)*M; */
+ Pi=deval(@pi);
+ Ac=dcos(Pi*A/180);As=dsin(Pi*A/180);
+ M=mat([Ac,As,0],[-As,Ac,0],[0,0,1])*M;
+ Ac=dcos(Pi*B/180);As=dsin(Pi*B/180);
+ M=mat([Ac,0,As],[0,1,0],[-As,0,Ac])*M;
+ }else M=A;
+ V=M*newvect(3,[x,y,z]);
+ Fx=compdf(V[0],[x,y,z],F);Fy=compdf(V[1],[x,y,z],F);Fz=compdf(V[2],[x,y,z],F);
+ }else{
+ for(I=0;I<3;I++){
+ if(type(T=F[I])!=4) T=f2df(T);
+ if(type(T)==4) T=cons(car(T)*Sc[I],cdr(T));
+ else T*=Sc[I];
+ if(I==0) Fx=T;
+ else if(I==1) Fy=T;
+ else Fz=T;
+ }
+ }
+ if(Raw==5||!Gap)
+ return (Dvi||!Gap)? xygraph([Fy,Fz],N,Lx,Ly,Lz|option_list=OL):[Fx,Fy,Fz];
+ R=xygraph([Fy,Fz],N,Lx,Ly,Lz|raw=2);
+ R0=cdr(car(R));R1=R[1];
+ for(LT=[];R0!=[];R0=cdr(R0),R1=cdr(R1))
+ if(car(R0)!=0) LT=cons([R1[0],R1[1]],LT);
+ LT=reverse(LT);
+ if(N<0){
+ Be=xylines(car(R)|curve=1,proc=3,close=-1);
+ LT=reverse(cdr(LT));
+ LT=reverse(cdr(LT));
+ }
+ else Be=xylines(car(R)|curve=1,proc=3);
+ Be=cdr(cdr(Be));
+ Be=lbezier(car(Be));
+ if(Raw==4) return [Be,LT,Lx];
+ X=ptcombz(Be,0,0);
+ Var=(length(Lx)==3)?car(Lx):x;
+ if(type(Eq=getopt(eq))!=1) Eq=0.01;
+ if(TikZ==1){
+ Gap/=10;Eq/=10;
+ }
+ for(R=[],XT=X;XT!=[];XT=cdr(XT)){
+ V=car(XT);
+ U=LT[V[0][0]];
+ T=U[0]*V[1][0]+U[1]*(1-V[1][0]);
+ VV=myfdeval(Fx,[Var,T]);
+ U=LT[V[0][1]];
+ T=U[0]*V[1][1]+U[1]*(1-V[1][1]);
+ VV-=myfdeval(Fx,[Var,T]);
+ if(abs(VV)<Eq) continue;
+ I=(VV<0)?0:1;
+ R=cons([V[0][I],V[1][I],V[0][1-I],V[1][1-I]],R);
+ }
+ R=qsort(R);
+ if(Raw==3) return [Be,R];
+ Db=newvect(L=length(Be));
+ for(I=0;I<L;I++) Db[I]=[];
+ for(TR=R;TR!=[];TR=cdr(TR)){
+ V1=ptbezier(Be,[I=car(TR)[0],P=car(TR)[1]])[1];
+ V2=ptbezier(Be,[car(TR)[2],car(TR)[3]])[1];
+ T=dsqrt(1-dvangle(V1,V2)^2);
+ if(T<1/MG) T=MG;
+ GP=Gap/T;
+ W=GP/dnorm(V1);
+ Db[I]=addIL([P-W,P+W],Db[I]);
+ if(P-W<0 && I>0) Db[I-1]=addIL([P-W+1,1],Db[I-1]);
+ if(P+W>1 && I+1<L) Db[I+1]=addIL([0,P+W-1],Db[I+1]);
+ }
+ Db=vtol(Db);
+ for(Bf=[];Be!=[];Be=cdr(Be),Db=cdr(Db)){
+ if(car(Db)==[]) Bf=cons(car(Be),Bf);
+ else{
+ D=addIL([0,1],car(Db)|in=-1);
+ for(;D!=[];D=cdr(D))
+ Bf=cons(tobezier(car(Be)|inv=car(D)),Bf);
+ }
+ }
+ Bf=reverse(Bf);
+ if(Raw==2) return Bf;
+ OL=[];
+ if(Opt){
+ if(type(Opt)==4&&length(Opt)>1) OL=[["opt",Opt[0]],["cmd",Opt[1]]];
+ else OL=[["opt",Opt]];
+ }else OL=[];
+ S=xybezier(lbezier(Bf|inv=1)|option_list=OL);
+ if(Raw==1||!Dvi) return S;
+ return xyproc(S|dviout=Dvi);
+}
+
+def xy2graph(F0,N,Lx,Ly,Lz,A,B)
+{
+ /* (x,y,z) -> (z sin B + x cos A cos B + y sin A cos B,
+ -x sin A + y cos A, z cos B - x cos A sin B - y sin A sin B) */
+ if((Proc=getopt(proc))==1||Proc==2){
+ OPT0=[["proc",3]];
+ }else{
+ Proc=0;OPT0=[];
+ }
+ if(type(DV=getopt(dviout))==4){
+ S=["ext","shift","cl","dviout"];
+ OL=delopt(getopt(),S);
+ OL=cons(["proc",1],OL);
+ R=xy2graph(F0,N,Lx,Ly,Lz,A,B|option_list=OL);
+ OL=delopt(getopt(),S|inv=1);
+ return execdraw(R,DV|optilon_list=OL);
+ }
+ if(N==0 || N>100 || N<-100) N=-16;
+ if(N<0){
+ N=-N;N1=-1;N2=NN+1;
+ }else{
+ N1=0;N2=NN=N;
+ }
+
+ Ratio=Ratio2=1;
+ if(type(Sc=Sc0=getopt(scale))!=1 && type(Sc)!=4) Sc=1;
+ if(type(Sc)==4){
+ Ratio=Sc[1]/Sc[0];
+ if(length(Sc)>2) Ratio2=Sc[2]/Sc[0];
+ Sc=Sc[0];
+ }
+ if(type(Vw=getopt(view))!=1) Vw=0;
+ if(type(Raw=getopt(raw))!=1) Raw=0;
+ if(type(M1=getopt(dev))==1) M2=M1;
+ else if(type(M1)==4){
+ M2=M1[1];M1=M1[0];
+ }else M1=0;
+ if(type(M3=getopt(acc))!=1 || (M3<0.5 && M3>100)) M3=1;
+ if(M1<=0) M1=16;
+ if(M2<=0) M2=16;
+ OL=[["para",1],["scale",Sc]];
+ if(Raw==1) OL=cons(["raw",1],OL);
+ if(type(Prec=getopt(prec))>=0) OL=cons(["prec",Prec],OL);
+ L=newvect(4,[[Lx[1],Ly[0]],[Lx[1],Ly[1]],[Lx[0],Ly[1]],[Lx[0],Ly[0]]]);
+ Lx=[deval(Lx[0]),deval(Lx[1])];
+ Ly=[deval(Ly[0]),deval(Ly[1])];
+ Lz=[deval(Lz[0]),deval(Lz[1])];
+ A=(A0=A)%360;
+ F00=F0;
+ if(type(F0)<4){
+ FC=f2df(F0);
+ if(findin(z,Vars=vars(FC))>=0 && findin(x,Vars)<0 && findin(y,Vars)<0)
+ F0=[w,[z,0,x+y*@i],[w,os_md.abs,FC]];
+ }
+ if(type(Org=getopt(org))==4){ /* shift origin */
+ Lx=[Lx[0]-Org[0],Lx[1]-Org[0]];
+ Ly=[Ly[0]-Org[1],Ly[1]-Org[1]];
+ Lz=[Lz[0]-Org[2],Lz[1]-Org[2]];
+ F0=mysubst(F0,[[x,x+Org[0]],[y,y+Org[1]]]);
+ if(type(F0)==4){
+ F0=cons(F0[0]-Org[2],cdr(F0));
+ }
+ else F0-=Org[2];
+ }else Org=[0,0,0];
+ Cpx=getopt(cpx);
+ if(type(Cpx)<0){
+ if(str_str(rtostr(F0),"@i")>=0) Cpx=1;
+ else Cpx=0;
+ }
+ if(A<0) A+=360;
+ if(A<90){
+ Sh=1;F1=F0;Cx=x-Org[0];Cy=y-Org[1];
+ }else if(A<180){ /* x -> y, y -> -x */
+ Sh=2;A-=90; F1=mulsubst(F0,[[x,-y],[y,x]]);
+ LL=Ly;Ly=[-Lx[1],-Lx[0]];Lx=LL;Cx=y-Org[1];Cy=-x+Org[0];
+ }else if(A<270){
+ Sh=3;A-=180; F1=subst(F0,[[x,-x],[y,-y]]);
+ Lx=[-Lx[1],-Lx[0]];Ly=[-Ly[1],-Ly[0]];Cx=-x+Org[0];Cy=-y+Org[1];
+ }else{
+ Sh=4;A-=270;F1=mulsubst(F0,[[x,y],[y,-x]]);
+ LL=Lx;Lx=[-Ly[1],-Ly[0]];Ly=LL;Cx=-y+Org[1];Cy=x-Org[0];
+ }
+ A=@pi*A/180; B=@pi*B/180;
+ if(A==0) A=@pi/3;
+ if(B==0) B=@pi/12;
+ NN=N*M2;
+ Ac=dcos(deval(A)); As=dsin(deval(A));
+ if(Ac<=0.087 || As<=0.087){
+ mycat(["Unsuitable angle",A0,"(6-th argument)!"]);
+ return -1;
+ }
+ Bc=Ratio*dcos(deval(B)); Bs=dsin(deval(B));
+ if(Bc<0){
+ mycat("Unsuitable angle (7-th argument)!");
+ return -1;
+ }
+ /*
+ z = f(x,y) => X=-As*x+Ac*y, Y= Bc*f(x,y)-Bsc*x-Bss*y
+ Out X-coord is in [X0,X1], dvided by Dev segments
+ J-th segment of Y-coord : ZF[J]==1 => [Z0[0],Z1[J]]
+ */
+ Bsc=Bs*Ac;Bss=Bs*As;
+ if(Ratio2!=1){
+ if(Sh%2==1){
+ Ac*=Ratio2;Bss*=Ratio2;
+ }else{
+ As*=Ratio2;Bsc*=Ratio2;
+ }
+ }
+ CX=-As*Cx+Ac*Cy;CY=Bc*(z-Org[2])-Bsc*Cx-Bss*Cy;
+ if(type(Dvi=getopt(dviout))!=1 && getopt(trans)==1) return [CX*Sc,CY*Sc];
+ if(type(N1=getopt(inf))==1){
+ if(Proc) Dvi=N1;
+ else if(Dvi<=0) Dvi=-N1;
+ }
+ X0=-As*Lx[1]+Ac*Ly[0];X1=-As*Lx[0]+Ac*Ly[1];
+ F1=mysubst(F1,[@pi,deval(@pi)]);
+ Tf=type(F1=f2df(F1|opt=0));
+ if(Tf!=4) F=Bc*F1-Bsc*x-Bss*y;
+ else F=append([Bc*F1[0]-Bsc*x-Bss*y],cdr(F1));
+ Dx=(Lx[1]-Lx[0])/NN; Dy=(Ly[1]-Ly[0])/NN;
+ if(type(Err=getopt(err))==1)
+ F=mysubst(F,[[x,x+Err*Dx/1011.23],[y,y+Err*Dy/1101.34]]);
+ Out=(Proc)?[]:str_tb(0,0);
+ Dev=N*M1;
+ XD=(X1-X0)/Dev;
+ OLV=newvect(2,[OL,OL]);
+ if(type(Ura=getopt(opt))==4 || type(Ura)==7){
+ if(type(Ura)==7) Ura=[Ura,Ura];
+ else{
+ OLV[0]=cons(["opt",Ura[0]],OL);
+ OLV[1]=cons(["opt",Ura[1]],OL);
+ }
+ }
+ for(KC=0; KC<=1; KC++){ /* draw curves */
+ Z0=newvect(Dev+1); Z1=newvect(Dev+1); ZF=newvect(Dev+1);
+ for(I=0; I<=NN; I++){
+ FV=I%M2;
+ if(KC==0){
+ X=x; Y=Ly[1]-I*Dy; LX=Lx; DD=Dx; G=mysubst(F,[y,Y]);
+ if(!FV){
+ if(!Proc) str_tb(["%y=",rtostr(Y),"\n"],Out);
+ else Out=cons([-2,"y="+rtostr(Y)],Out);
+ }
+ }else{
+ X=Lx[1]-I*Dx; Y=x; LX=Ly; DD=Dy; G=mysubst(F,[[x,X],[y,Y]]);
+ if(!FV){
+ if(!Proc) str_tb(["%x=",rtostr(X),"\n"],Out);
+ else Out=cons([-2,"x="+rtostr(X)],Out);
+ }
+ }
+ XX=-As*X+Ac*Y; A1=coef(XX,1,x); A0=coef(XX,0,x); /* XX = A1*x + A0, x = (XX-A0)/A1 */
+ if(!FV && Vw==1){
+ if(Proc) Out=cons(xygraph([XX,G],N,LX,[X0,X1],Lz|scale=Sc,para=1,proc=3),Out);
+ else str_tb(xygraph([XX,G],N,LX,[X0,X1],Lz|scale=Sc,para=1),Out);
+ continue;
+ }
+ V=VT=LX[1];
+ J0=(subst(XX,x,LX[0])-X0)/XD; J1=(subst(XX,x,LX[1])-X0)/XD;
+ if(J0<J1){
+ J0=ceil(J0); J1=floor(J1); JD=1; /* fixed x: y: dec => (x,z):(dec,inc) */
+ }else{
+ J0=floor(J0); J1=ceil(J1); JD=-1; /* fixed y: x: dec => (x,z):(inc,inc) */
+ }
+ for(FF=1,J=J1;;J-=JD){
+ V1=VT;
+ VT=(X0+J*XD-A0)/A1;GG=mysubst(G,[x,VT]);
+ if(Cpx>=1) VV=myeval(GG);
+ else VV=(Tf==4)? mydeval(GG):deval(GG); /* J -> V */
+ if(ZF[J]==0 || VV<=Z0[J] || VV>=Z1[J]){ /* visible */
+ if(FF==0){
+ V0=(VT+V1)/2;
+ if(!FV && Vw==-1 && Raw!=1){ /* draw doted line */
+ K=ceil(M3*(V-V0)/(M2*DD));
+ if(N1<0) K=-K;
+ OPT=append(OPT0,[["opt",(TikZ)?"dotted":"~*=<3pt>{.}"],["scale",Sc],["para",1]]);
+ Out=saveproc(xygraph([XX,G],K,[V0,V],[X0-1,X1+1],Lz|
+ option_list=OPT),Out);
+ }
+ V=V0;
+ }
+ if(ZF[J]==0){
+ ZF[J]=1; Z0[J]=Z1[J]=VV;
+ }else if(VV<=Z0[J]) Z0[J]=VV;
+ else Z1[J]=VV;
+
+ if(VV>=Z1[J]) FF=1;
+ else if(VV<=Z0[J]) FF=-1;
+ }else{
+ if(FF!=0){
+ V0=(VT+V1)/2;
+ K=ceil(M3*(V-V0)/(M2*DD));
+ if(N1<0) K=-K;
+ if(!FV){
+ OPT=append(OPT0,OLV[(1-FF)/2]);
+ Out=saveproc(xygraph([XX,G],K,[V0,V],[X0-1,X1+1],Lz|option_list=OPT),Out);
+ }
+ V=V0;
+ }
+ FF=0;
+ }
+ if(J==J0) break;
+ }
+ if(FV) continue;
+ V0=LX[0];K=ceil(M3*(V-V0)/(M2*DD));
+ if(N1<0) K=-K;
+ if(FF!=0){
+ if(Raw!=1){
+ OPT=append(OPT0,OLV[(1-FF)/2]);
+ Out=saveproc(xygraph([XX,G],K,[V0,V],[X0-1,X1+1],Lz|option_list=OPT),Out);
+ }else if(Vw==-1 && Raw!=1){
+ OPT=append(OPT0,[["opt",(TikZ)?"dotted":"~*=<3pt>{.}"]]);
+ Out=saveproc(xygraph([XX,G],K,[V0,V],[X0-1,X1+1],Lz|option_list=OPT),Out);
+ }
+ }
+ }
+ }
+ OptSc=(Sc==1)?[]:[["scale",Sc]];
+ if(type(LZ=getopt(ax))==4){ /* draw box */
+ FC=0;
+ if(length(LZ)==3) FC=LZ[2];
+ P0=newvect(2,[-As*Lx[1]+Ac*Ly[1],Bc*(LZ[0]-Org[0])-Bsc*Lx[1]-Bss*Ly[1]]);
+ Vx=newvect(2,[As*(Lx[1]-Lx[0]),Bsc*(Lx[1]-Lx[0])]);
+ Vy=newvect(2,[Ac*(Ly[0]-Ly[1]),Bss*(Ly[1]-Ly[0])]);
+ Vz=newvect(2,[0,Bc*(LZ[1]-LZ[0])]);
+ OL=OL0=append(OPT0,OL);
+ if(TikZ && type(Ura)==4 && length(Ura)>2) OL0=cons(["opt",Ura[2]],OL);
+ LL=[[P0+Vz,P0+Vx+Vz],[P0,P0+Vx]];
+ if(Bs>0){
+ LL=cons([P0+Vy+Vz,Pz=P0+Vx+Vy+Vz],LL);
+ LL=cons([P0+Vx+Vz,Pz],LL);
+ PP=Pz-Vz;
+ }
+ else{
+ LL=cons([P0+Vy,Pz=P0+Vx+Vy+Vz],LL);
+ LL=cons([P0+Vx,Pz],LL);
+ PP=Pz+Vz;
+ }
+ J=ceil((PP[0]-X0)/XD+0.5);
+ LL=append([[P0+Vy,P0+Vy+Vz],[P0+Vy,P0+Vy+Vz],[P0+Vx,P0+Vx+Vz],[P0,P0+Vz],
+ [P0+Vz,P0+Vy+Vz],[P0,P0+Vy]],LL);
+ for(LL=reverse(LL);LL!=[];LL=cdr(LL)) Out=saveproc(xylines(car(LL)|option_list=OL0),Out);
+ if(Dev>4) Dev2=ceil(Dev/2);
+ if(FC<0 && Raw!=1){
+ if(TikZ){
+ if(type(Ura)==4 && length(Ura)>2)
+ OL1=cons(["opt",Ura[2]+",dotted"],OL);
+ else OL1=cons(["opt","dotted"],OL);
+ }else OL1=cons(["opt","@{.}"],OL);
+ if(FC==-8) FC=0;
+ }
+ for(I=0;I<3;I++){ /* box with hidden part */
+ if(I==1) Pz=PP-Vx;
+ else if(I==2) Pz=PP-Vy;
+ LP=Pz-PP;
+ for(FV=-1,K=0;K<=Dev2; K++){
+ PPx=PP[0]+(K/Dev2)*LP[0]; PPy=PP[1]+(K/Dev2)*LP[1];
+ J=ceil((PPx-X0)/XD);
+ if(K!=Dev2 && (J<0||J>Dev)) continue;
+ if(K!=Dev2 && (ZF[J]==0 || PPy<Z0[J] || PPy>Z1[J])){ /* visible */
+ if(FV!=1){
+ FV=1;
+ PPP=[PPx,PPy];
+ }
+ }else{
+ if(FV!=0){
+ if(FV==1) Out=saveproc(xylines([PPP,[PPx,PPy]]|option_list=OL1),Out);
+ FV=0;
+ }
+ }
+ }
+ }
+ if(FC!=0 && Raw!=1){ /* show coordinate*/
+ if(iand(FC,4)){
+ Sub=1;
+ if(TikZ){
+ S0="\\scriptsize";S1="";
+ }else{
+ S0="{}_{"; S1="}";
+ }
+ }else Sub=0;
+ if(iand(FC,2))
+ LLL=[[1,0,P0+Vx,(TikZ)?"right":"+!L"],[3,0,P0+Vy,(TikZ)?"left":"+!R"]];
+ else LL=[];
+ if(Bs>0){
+ LLL=cons([0,0,P0,(TikZ)?"below":"+!U"],LLL);
+ LLL=cons([2,1,P0+Vx+Vy+Vz,(TikZ)?"above":"+!D"],LLL);
+ }else{
+ LLL=cons([2,0,P0+Vx+Vy,(TikZ)?"below":"+!U"],LLL);
+ LLL=cons([0,1,P0+Vz,(TikZ)?"above":"+!D"],LLL);
+ }
+ for(TLL=LLL;TLL!=[];TLL=cdr(TLL)){
+ TL=car(TLL);LL=L[(Sh+TL[0])%4];
+ if(Cpx==0 || Cpx==3){
+ S=ltotex([LL[0],LL[1],LZ[TL[1]]]|opt="coord");
+ SS="("+rtostr(LL[0]) +","+rtostr(LL[1])+","+rtostr(LZ[TL[1]])+")";
+ }else{
+ S=ltotex([LL[0]+LL[1]*@i,LZ[TL[1]]]|opt="coord",cpx=Cpx);
+ SS="("+rtostr(LL[0])+"+"+rtostr(LL[1])+"i,"+ rtostr(LZ[TL[1]])+")";
+ }
+ if(TikZ) S="$"+S+"$";
+ if(Sub) S=S0+S+S1;
+ if(!TikZ) S="$"+S+"$";
+ if(Proc) Out=cons([2,OptSc,[TL[2][0],TL[2][1]],[[TL[3],S]],SS],Out);
+ else str_tb(xyput([TL[2][0],TL[2][1],[TL[3],S]]|option_list=OptSc),Out);
+ }
+ }
+ }
+ if(type(Pt=getopt(pt))==4){ /* option pt=[] */
+ if(type(Pt[0])<4) Pt=[[Pt]];
+ if(length(Pt)>1&&type(Pt[1])!=4) Pt=[Pt];
+ for(PT=Pt;PT!=[];PT=cdr(PT)){
+ PP=car(PT);
+ if(type(PP)==4 && length(PP)==3 && type(PP[0])<2 && type(PP[2])<2) PP=[PP];
+ P=car(PP);
+ if(type(P)==7) Q=[P,0];
+ else if(P==1) Q=["_",0];
+ else Q=mysubst([CX,CY],[[x,deval(P[0])],[y,deval(P[1])],[z,deval(P[2])]]);
+ if(length(PP)>1 && type(PP[1])==4 && length(PP[1])==3){ /* draw line */
+ PP=cdr(PP);P=car(PP);
+ if(type(P)==7) Q1=P;
+ else if(P==1) Q="_";
+ else Q1=mysubst([CX,CY],[[x,deval(P[0])],[y,deval(P[1])],[z,deval(P[2])]]);
+ if(length(PP)<2 || PP[1]==0 || iand(PP[1],1)) OL2="";
+ else OL2=(TikZ)?"dotted":"@{.}";
+ if(length(PP)>2 && type(PP[2])==7){
+ if(OL2=="") OL2=PP[2];
+ else{
+ if(TikZ) OL2=OL2+",";
+ OL2=OL2+PP[2];
+ }
+ }
+ OL1=OL;
+ if(OL2!="") OL1=cons(["opt",OL2],OL1);
+ if(length(PP)<2 || PP[1]>=0)
+ Out=saveproc(xylines([Q,Q1]|option_list=OL1),Out);
+ else{
+ LP0=Q1[0]-Q[0];LP1=Q1[1]-Q[1];
+ for(FV=-1,K=0;K<=Dev2; K++){
+ PPx=Q[0]+(K/Dev2)*LP0; PPy=Q[1]+(K/Dev2)*LP1;
+ J=ceil((PPx-X0)/XD);
+ if(K!=Dev2 && (J<0 || J>Dev || ZF[J]==0 || PPy<Z0[J] || PPy>Z1[J])){
+ /* visible */
+ if(FV!=1){
+ FV=1;
+ PPP=[PPx,PPy];
+ }
+ }else{
+ if(FV!=0){
+ if(FV==1) Out=saveproc(xylines([PPP,[PPx,PPy]]|option_list=OL1),Out);
+ FV=0;
+ }
+ }
+ }
+ }
+ continue;
+ }
+ if(length(PP)==1) S="$\\bullet$";
+ else if(type(PP[1])==7) S=PP[1];
+ else if(type(PP[1])==4){
+ if(length(PP[1])>1 && type(PP[1][1])!=7)
+ S=cons(car(PP),cons("$\\bullet$",cdr(cdr(PP))));
+ else S=PP[1];
+ }else S="$\\bullet$";
+ if(length(PP)<=2){
+ if(Proc) Out=cons([2,OptSc,[Q[0],Q[1]],[S]],Out);
+ else str_tb(xyput([Q[0],Q[1],S]|option_list=OptSc),Out);
+ }else if(!TikZ){
+ if(Proc) Out=cons([2,OptSc,[Q[0],Q[1]],[S,"",PP[2]]],Out);
+ else str_tb(xyput([Q[0],Q[1],S,"",PP[2]]|option_list=OptSc),Out);
+ }else{
+ if(Proc) Out=cons([2,OptSc,[Q[0],Q[1]],cons(S,cdr(cdr(PP)))],Out);
+ else str_tb(xyput(append([Q[0],Q[1],S],cdr(cdr(PP)))|option_list=OptSc),Out);
+ }
+ }
+ }
+ if(Proc){
+ S=reverse(Out);
+ if(Proc==1||Proc==3){
+ for(W=[],I=0;I<2;I++) for(J=0;J<2;J++) for(K=0;K<2;K++)
+ W=cons(mysubst([CX*Sc,CY*Sc],[[x,Lx[I]],[y,Ly[J]],[z,Lz[K]]]),W);
+ W=ptbbox(W);
+ S=cons([0,W[0],W[1],(TikZ)?1:1/10],S);
+ }
+ }else S=str_tb(0,Out);
+ if(type(Dvi)!=1||(Proc&&abs(Dvi)<2)) return S;
+ Lout=[];
+ if(abs(Dvi)>=2){
+ /* show title */
+ L0=[];
+ Title=getopt(title);
+ if(type(Title)!=7)
+ Title=(type(F00)==4)?("\\texttt{"+verb_tex_form(F00)+"}"):my_tex_form(F00);
+ if(type(Title)==7){
+ T=my_tex_form(L[3][0])+"\\le x\\le "+my_tex_form(L[1][0])+",\\,"+
+ my_tex_form(L[3][1])+"\\le y\\le "+my_tex_form(L[1][1])+")";
+ if(Proc){
+ if(Cpx>=1) L0=[[5,[["eq",1]],"|"+Title+"|\\quad(z=x+yi,\\ "+T]];
+ else L0=[[5,[["eq",1]],"z="+Title+"\\ \\ ("+T]];
+ }else{
+ if(Cpx>=1) dviout("|"+Title+"|\\quad(z=x+yi,\\ "+T|eq=1,keep=1);
+ else dviout("z="+Title+"\\ \\ ("+T|eq=1,keep=1);
+ }
+ }
+ A=rint(deval(180*A/@pi))+90*(Sh-1);
+ if(A>=180) A-=180;
+ B=rint(deval(180*B/@pi));
+ if(abs(Dvi)>=3){
+ T="\\text{angle } ("+my_tex_form(A)+"^\\circ,"+my_tex_form(B)+"^\\circ)";
+ if(Ratio!=1 || Ratio2!=1) T=T+"\\quad\\text{ratio }1:"
+ +my_tex_form(sint(Ratio2,2))+":"+my_tex_form(sint(Ratio,2));
+ if(Proc) L0=cons([5,[["eq",1]],T],L0);
+ else dviout(T|eq=1,keep=1);
+ }
+ SS="% range "+rtostr([L[3][0],L[1][0]])+"x"+rtostr([L[3][1],L[1][1]])+
+ " angle ("+ rtostr(A) +","+ rtostr(B)+") dev=";
+ if(M1==M2) SS=SS+rtostr(M1);
+ else SS=SS+rtostr([M1,M2]);
+ if(M3!=1) SS=SS+" acc="+rtostr(M3);
+ if(type(Sc0)>=0) SS=SS+" scale="+rtostr(Sc0);
+ if(Proc){
+ S=cons([5,[],SS],S);
+ for(;L0!=[];L0=cdr(L0)) S=cons(car(L0),S);
+ return S;
+ }
+ if(Dvi>0){
+ dviout(SS|keep=1);
+ dviout(xyproc(S)|eq=8);
+ }else Lout=[SS,S];
+ }else{
+ if(Dvi>0) dviout(xyproc(S));
+ else Lout=[S];
+ }
+ if(getopt(trans)==1) return cons([CX*Sc,CY*Sc],Lout);
+ if(Dvi<0) return Lout;
+}
+
+def orthpoly(N)
+{
+ F=0;
+ if(type(P=getopt(pol))==7){
+ for(L=["Le","Ge","Tc","2T","Ja","He","La","Se"];L!=[];L=cdr(L),F++)
+ if(str_str(P,car(L)|end=2)==0) break;
+ }else P=0;
+ if(type(D=N)==4) D=N[0];
+ if(!isint(D)||D<0) return 0;
+ if(F==0) return seriesHG([-D,D+1],[1],(1-x)/2,D);
+ if(F==1) return red(seriesHG([-D,D+2*N[1]],[N[1]+1/2],(1-x)/2,D)*binom(D+2*N[1]-1,D));
+ if(F==2) return seriesHG([-D,D],[1/2],(1-x)/2,D);
+ if(F==3){
+ if(D==0) return 0;
+ return orthpoly([D-1,1]|pol="Ge");
+ }
+ if(F==4) return red(seriesHG([-D,D+N[1]],[N[2]],x,D));
+ if(F==5){
+ for(S=I=1;I<=D;I+=2) S*=I;
+ if(iand(D,1)) return seriesHG([-(D-1)/2],[3/2],x^2/2,D-1)*x*S*(-1)^((D-1)/2);
+ else return seriesHG([-D/2],[1/2],x^2/2,D)*S*(-1)^(D/2);
+ }
+ if(F==6){
+ NN=(type(N)==4)?N[1]:0;
+ return red(seriesHG([-D],[NN+1],x,D)*binom(D+NN,D));
+ }
+ if(F==7){
+ NN=N[1];
+ for(S=1,I=1;I<=D;I++) S+=(-1)^I*binom(D,I)*binom(D+I,I)*sftpow(x,I)/sftpow(NN,I);
+ return S;
+ }
+ return 0;
+}
+
+def schurpoly(L)
+{
+ N=length(L);
+ for(R=[],I=1;L!=[];L=cdr(L),I++) R=cons(car(L)+N-I,R);
+ L=reverse(R);
+ if(type(X=getopt(var))!=4){
+ V=(type(X)>1)?X:"x";
+ for(X=[],I=0;I<N;I++) X=cons(makev([V,N-I]),X);
+ }
+ M=newmat(N,N);
+ for(I=0;I<N;I++)
+ for(J=0;J<N;J++) M[I][J]=X[I]^L[J];
+ P=det(M);
+ for(I=0;I<N;I++)
+ for(J=I+1;J<N;J++) P=sdiv(P,X[I]-X[J]);
+ return P;
+}
+
+def fouriers(A,B,X)
+{
+ if((Y=getopt(y))==0||type(Y)>0) Y=deval(Y);
+ else Y=0;
+ if((V=getopt(const))==0||type(V)>0){
+ V=myfeval(V,Y);
+ K=1;
+ }else K=0;
+ if(A!=[]&&type(car(A))>1){
+ for(C=[],I=A[1];I>=K;I--) C=cons(myf2eval(car(A),I,Y),C);
+ if(K) C=cons(0,C);
+ A=C;
+ }
+ if(K){
+ if(A!=[]) A=cdr(A);
+ A=cons(V,A);
+ }
+ if(B!=[]&&type(car(B))>1){
+ for(C=[],I=B[1];I>0;I--) C=cons(myf2eval(car(B),I,Y),C);
+ B=C;
+ }
+ L=length(B)+1;
+ if(length(A)>=L) L=length(A)+1;
+ if(type(Sum=getopt(sum))>0){
+ if(Sum==1) Sum=1-x;
+ else if(Sum==2) Sum=[(z__)/(3.1416*x),[z__,os_md.mysin,3.1416*x]];
+ else Sum=f2df(Sum);
+ C=[];
+ if(A!=[]){
+ C=cons(car(A),C);
+ A=cdr(A);
+ }
+ for(I=1;A!=[];A=cdr(A),I++) C=cons(car(A)*myf2eval(Sum,I/L,L),C);
+ A=reverse(C);
+ for(C=[],I=1;B!=[];B=cdr(B),I++) C=cons(car(B)*myf2eval(Sum,I/L,L),C);
+ B=reverse(C);
+ }
+ if(getopt(cpx)==1){
+ if(type(X=eval(X))>1) return todf([os_md.fouriers,[["cpx",1]]],[[A],[B],[X]]);
+ V=dexp(@i*X);
+ for(C=A,P=1,I=0;C!=[];C=cdr(C),I++){
+ R+=S*car(C)*P;
+ P*=V;
+ }
+ V=dexp(-@i*X);
+ for(C=B,P=1,I=0;C!=[];C=cdr(C),I++){
+ P*=V;
+ R+=car(C)*P;
+ }
+ return R;
+ }
+ if(type(X=eval(X))>1) return todf(os_md.fouriers,[[A],[B],[X]]);
+ for(C=A,I=0;C!=[];C=cdr(C),I++)
+ R+=car(C)*mycos(I*X);
+ for(C=B,I=1;C!=[];C=cdr(C),I++)
+ R+=car(C)*mysin(I*X);
+ return R;
+}
+
+
+def myexp(Z)
+{
+ if(type(Z=eval(Z))>1) return todf(os_md.myexp,[Z]);
+ if((Im=imag(Z))==0) return dexp(Z);
+ return dexp(real(Z))*(dcos(Im)+@i*dsin(Im));
+}
+
+def mycos(Z)
+{
+ if(type(Z=eval(Z))>1) return todf(os_md.mycos,[Z]);
+ if((Im=imag(Z))==0) return dcos(Z);
+ V=myexp(Z*@i);
+ return (V+1/V)/2;
+}
+
+def mysin(Z)
+{
+ if(type(Z=eval(Z))>1) return todf(os_md.mysin,[Z]);
+ if((Im=imag(Z))==0) return dsin(Z);
+ V=myexp(Z*@i);
+ return (1/V-V)*@i/2;
+}
+
+def mytan(Z)
+{
+ if(type(Z=eval(Z))>1) return todf(os_md.mytan,[Z]);
+ if((Im=imag(Z))==0) return dtan(Z);
+ V=myexp(2*Z*@i);
+ return @i*(1-V)/(1+V);
+}
+
+def mylog(Z)
+{
+ if(type(Z=eval(Z))>1) return todf(os_md.mylog,[Z]);
+ if((Im=imag(Z))==0) return dlog(Z);
+ return dlog(dabs(Z))+@i*myarg(Z);
+}
+
+def mypow(Z,R)
+{
+ if(type(Z=eval(Z))>1||type(R=eval(R))>1) return todf(os_md.mypow,[Z,R]);
+ if(Z==0) return 0;
+ if(isint(2*R)){
+ if(R==0) return 1;
+ if(isint(R)) return Z^R;
+ V=dsqrt(Z);
+ if(R==1/2) return V;
+ return Z^(R-1/2)*V;
+ }
+ return myexp(R*mylog(Z));
+}
+
+def myarg(Z)
+{
+ if(type(Z=map(eval,Z))==4){
+ if(length(Z)!=2) return todf(os_md.myarg,[Z]);
+ Re=Z[0];Im=Z[1];
+ }else if(type(Z)>1){
+ return todf(os_md.myarg,[Z]);
+ }else {
+ Im=imag(Z);Re=real(Z);
+ }
+ if(Re==0) return (Im<0)?-deval(@pi)/2:deval(@pi)/2;
+ V=datan(Im/Re);
+ if(Re>0) return V;
+ return (V>0)?(V-deval(@pi)):(V+deval(@pi));
+}
+
+def myatan(Z)
+{
+ if(type(Z=eval(Z))>1) return todf(os_md.myatan,[Z]);
+ if((Im=imag(Z))==0) return datan(Z);
+ mylog((1-Z*@i)/(1+Z*@i))*@i/2;
+}
+
+def myasin(Z)
+{
+ if(type(Z=eval(Z))>1) return todf(os_md.myasin,[Z]);
+ return deval(@pi/2)-myacos(Z);
+}
+
+def frac(X)
+{
+ if(type(X=eval(X))>1) return todf(os_md.frac,[X]);
+ return (ntype(X)==3)? pari(frac,X):(X-floor(X));
+}
+
+def myacos(Z)
+{
+ if(type(Z=eval(Z))>1) return todf(os_md.myacos,[Z]);
+ if(imag(Z)==0 && Z<=1 && Z>=-1) return dacos(Z);
+ return mylog(Z-dsqrt(Z^2-1))*@i;
+}
+
+def arg(Z)
+{
+ if(vars(Z=map(eval,Z))!=[]) return todf(os_md.arg,[Z]);
+ return (type(Z)==4)?pari(arg,Z[0],Z[1]):arg(sqrt,Z);
+}
+
+def sqrt(Z){
+ if(vars(Z=map(eval,Z))!=[]) return todf(os_md.sqrt,[Z]);
+ R=(type(Z)==4)?Z[1]:Z;
+ if(ntype(R)==0){
+ if(R==0) return 0;
+ if(R>0){
+ if(pari(issquare,R)) return pari(isqrt,nm(R))/pari(isqrt,dn(R));
+ }else{
+ R=-R;
+ if(pari(issquare,R)) return pari(isqrt,nm(R))/pari(isqrt,dn(R))*@i;
+ }
+ }
+ return (type(Z)==4)?pari(sqrt,Z[0],Z[1]):pari(sqrt,Z);
+}
+
+def gamma(Z)
+{
+ if(vars(Z=map(eval,Z))!=[]) return todf(os_md.gamma,[Z]);
+ return (type(Z)==4)?pari(gamma,Z[0],Z[1]):pari(gamma,Z);
+}
+
+def lngamma(Z)
+{
+ if(vars(Z=map(eval,Z))!=[]) return todf(os_md.lngamma,[Z]);
+ return (type(Z)==4)?pari(lngamma,Z[0],Z[1]):pari(lngamma,Z);
+}
+
+def digamma(Z)
+{
+ if(vars(Z=map(eval,Z))!=[]) return todf(os_md.digamma,[Z]);
+ return (type(Z)==4)?pari(digamma,Z[0],Z[1]):pari(digamma,Z);
+}
+
+def dilog(Z)
+{
+ if(vars(Z=map(eval,Z))!=[]) return todf(os_md.dilog,[Z]);
+ return (type(Z)==4)?pari(dilog,Z[0],Z[1]):pari(dilog,Z);
+}
+
+def erfc(Z)
+{
+ if(vars(Z=map(eval,Z))!=[]) return todf(os_md.erfc,[Z]);
+ return (type(Z)==4)?pari(erfc,Z[0],Z[1]):pari(erfc,Z);
+}
+
+def zeta(Z)
+{
+ if(vars(Z=map(eval,Z))!=[]) return todf(os_md.zeta,[Z]);
+ return (type(Z)==4)?pari(zeta,Z[0],Z[1]):pari(zeta,Z);
+}
+
+def eta(Z)
+{
+ if(vars(Z=map(eval,Z))!=[]) return todf(os_md.eta,[Z]);
+ return (type(Z)==4)?pari(eta,Z[0],Z[1]):pari(eta,Z);
+}
+
+def jell(Z)
+{
+ if(vars(Z=map(eval,V))>1) return todf(os_md.jell,[Z]);
+ return (type(Z)==4)?pari(jell,Z[0],Z[1]):jell(jell,Z);
+}
+
+def evals(F)
+{
+ if(type(F)==7){
+ if(type(Del=getopt(del))!= 7) return eval_str(F);
+ S=strtoascii(Del);K=length(S);
+ if(K==0) return [eval_str(F)];
+ Raw=getopt(raw);
+ F=strtoascii(F);L=[];T1=0;
+ do{
+ T2=str_str(F,S|top=T1);
+ if(T2<0) T2=10000;
+ FT=str_cut(F,T1,T2-1);
+ L=cons((Raw==1)?FT:evals(FT),L);
+ T1=T2+K;
+ }while(T2!=10000);
+ return reverse(L);
+ }
+ if(type(F)==4){
+ if(type(S=car(F))==7){
+ S+="(";
+ for(I=0,FT=cdr(F); FT!=[]; I++,FT=cdr(FT)){
+ if(type(ST=car(FT))!=7) ST=rtostr(ST);
+ if(I>0) S=S+","+ST;
+ else S=S+ST;
+ }
+ S=S+")";
+ return eval_str(S);
+ }else return call(S,cdr(F));
+ }
+ return F;
+}
+
+def myval(F)
+{
+ if(type(F)!=4){
+ F=f2df(sqrt2rat(F));
+ if(type(F)!=4) return F;
+ };
+ if(length(F)==1) V=car(F);
+ else for(V=car(F),F=cdr(F); F!=[];){
+ FT=car(F);
+ if(type(G=FT[1])==2){
+ if(length(FT)>2){
+ FT2=myval(FT[2]);
+ if(length(FT)>3) FT3=myval(FT[3]);
+ };
+ X=red(FT2/@pi);Vi=-red(FT2*@i/@pi);W=red(FT2/@e);
+ if(G==os_md.mypow && FT3==1/2){
+ G=os_md.sqrt;
+ FT=[FT[0],G,FT[2]];
+ }
+ if((T=findin(G,
+ [sin,os_md.mysin,cos,os_md.mycos,tan,os_md.mytan]))>=0
+ &&(isint(6*X)||isint(4*X))){
+ if(T==2||T==3){
+ T=0;X=1/2-X;
+ }
+ X=X-floor(X/2)*2;
+ if(T==0||T==1){
+ if(X>1){
+ S=-1;X-=1;
+ }else S=1;
+ if(X>1/2) X=1-X;
+ if(X==0) R=0;
+ else if(X==1/6) R=1/2;
+ else if(X==1/4) R=2^(1/2)/2;
+ else if(X==1/3) R=3^(1/2)/2;
+ else R=1;
+ R*=S;
+ }else{
+ if(X>1) X-=1;
+ if(X>1/2){
+ S=-1;V=1-X;
+ }else S=1;
+ if(X==0) R=0;
+ else if(X==1/6) R=3^(1/2)/3;
+ else if(X==1/4) R=1;
+ else if(X==1/3) R=3^(1/2);
+ else R=2^512;
+ R*=S;
+ }
+ }else if((G==exp||G==os_md.myexp)&&(isint(FT2)||isint(6*Vi)||isint(4*Vi))){
+ if(isint(FT2)) R=@e^FT2;
+ else R=myval([z+w*@i,[z,cos,Vi*@pi],[w,sin,Vi*@pi]]);
+ }else if((G==pow||G==os_md.mypow) && (isint(FT3)||FT2==1||FT2==0)){
+ if(FT2==0) R=0;
+ else if(FT2==1) R=1;
+ else R=FT2^FT3;
+ }else if(G==os_md.abs&&ntype(P=eval(FT2))<4){
+ R=FT2;
+ if(P<0) R=-R;
+ }else if((G==os_md.sqrt||G==dsqrt)&&type(FT2)<2&&ntype(FT2)==0)
+ R=sqrtrat(FT2);
+ else if((G==os_md.mylog||G==dlog)&&(FT2==@e||FT2==1))
+ R=(FT2==1)?0:1;
+ else if(length(FT)==3) R=eval((*G)(myeval(FT2)));
+#ifdef USEMODULE
+ else R=call(G,map(os_md.myeval,cdr(cdr(FT))));
+#else
+ else R=call(G,map(myeval,cdr(cdr(FT))));
+#endif
+ }
+ else if(G==0) R=FT[2];
+#ifdef USEMODULE
+ else R=eval(call(G[0],map(os_md.myeval,cdr(cdr(FT)))|option_list=G[1]));
+#else
+ else R=eval(call(G[0],map(myeval,cdr(cdr(FT)))|option_list=G[1]));
+#endif
+ V=mysubst(V,[FT[0],R]);
+ F=mysubst(cdr(F),[FT[0],R]);
+ }
+ if(type(V)<4 && !iscoef(V,os_md.iscrat)) V=eval(V);
+#if 0
+ return (type(V)<4)?myeval(V):mtransbys(os_md.myeval,V,[]);
+#else
+ return V;
+#endif
+}
+
+/* -1: 0: 1:L 2:Gauss 3:GaussL 4:ȊO̕f */
+/* def vntype(F)
+{
+ if((T=type(F))<2){
+ if(T<0) return -1;
+ if((Tn=ntype(F))==0){
+ return (isint(F))?0:1;
+ }
+ if(Tn==4){
+ if(ntype(real(F))==0&&ntype(real(F))==0)
+ return (isint(F)&&isint(F))?2:3;
+ return 4;
+ }
+ }
+ if(T==2){
+ V=vars(F);
+ if((VV=lsort(V,[@e,@pi],1))==[]){
+ FT=mycoef(
+ }else{
+ if(length(VV)==1){
+ }else
+ }
+ }else if(T==3){
+
+ }
+}
+*/
+
+
+def myeval(F)
+{
+ if(type(F)!=4) V=F;
+ else if(length(F)==1) V=car(F);
+ else for(V=car(F),F=cdr(F); F!=[];){
+ FT=car(F);
+ if(type(G=FT[1])==2){
+ if(length(FT)==3) R=(*G)(myeval(FT[2]));
+#ifdef USEMODULE
+ else R=call(G,map(os_md.myeval,cdr(cdr(FT))));
+#else
+ else R=call(G,map(myeval,cdr(cdr(FT))));
+#endif
+ }
+ else if(G==0) R=myeval(FT[2]);
+#ifdef USEMODULE
+ else R=call(G[0],map(os_md.myeval,cdr(cdr(FT)))|option_list=G[1]);
+#else
+ else R=call(G[0],map(myeval,cdr(cdr(FT)))|option_list=G[1]);
+#endif
+ V=mysubst(V,[FT[0],R]);
+ F=mysubst(cdr(F),[FT[0],R]);
+ }
+ return (type(V)<4)?eval(V):mtransbys(eval,V,[]);
+}
+
+def mydeval(F)
+{
+ if(type(F)!=4) V=F;
+ else if(length(F)==1) V=car(F);
+ else for(V=car(F),F=cdr(F); F!=[]; ){
+ FT=car(F);
+ if(type(G=FT[1])==2){
+ if(length(FT)==3) R=(*G)(myeval(FT[2]));
+#ifdef USEMODULE
+ else R=call(G,map(os_md.mydeval,cdr(cdr(FT))));
+#else
+ else R=call(G,map(mydeval,cdr(cdr(FT))));
+#endif
+ }
+ else if(G==0) R=mydeval(FT[2]);
+#ifdef USEMODULE
+ else R=call(G[0],map(os_md.mydeval,cdr(cdr(FT)))|option_list=G[1]);
+#else
+ else R=call(G[0],map(mydeval,cdr(cdr(FT)))|option_list=G[1]);
+#endif
+ V=mysubst(V,[FT[0],R]);
+ F=mysubst(cdr(F),[FT[0],R]);
+ }
+ return (type(V)<4)?deval(V):mtransbys(deval,V,[]);
+}
+
+def myfeval(F,X)
+{
+ if(type(X)==4){
+ if(isvar(X[0])&&length(X)==2)
+ return mydeval(mysubst(F,[X[0],X[1]]));
+ if(type(X[0])==4&&isvar(X[0][0])&&length(X[0])==2){
+ for(Y=X;Y!=[];Y=cdr(Y))
+ F=mysubst(F,[car(Y)[0],car(Y)[1]]);
+ return myeval(F);
+ }
+ }
+ return myeval(mysubst(F,[x,X]));
+}
+
+def myf2eval(F,X,Y)
+{
+ return myeval(mysubst(F,[[x,X],[y,Y]]));
+}
+
+def myf3eval(F,X,Y,Z)
+{
+ return myeval(mysubst(F,[[x,X],[y,Y],[z,Z]]));
+}
+
+def myfdeval(F,X)
+{
+ if(type(X)==4){
+ if(isvar(X[0])&&length(X)==2)
+ return mydeval(mysubst(F,[X[0],X[1]]));
+ if(type(X[0])==4&&isvar(X[0][0])&&length(X[0])==2){
+ for(Y=X;Y!=[];Y=cdr(Y))
+ F=mysubst(F,[car(Y)[0],car(Y)[1]]);
+ return mydeval(F);
+ }
+ }
+ return mydeval(mysubst(F,[x,X]));
+}
+
+def myf2deval(F,X,Y)
+{
+ return mydeval(mysubst(F,[[x,X],[y,Y]]));
+}
+
+def myf3deval(F,X,Y,Z)
+{
+ return mydeval(mysubst(F,[[x,X],[y,Y],[z,Z]]));
+}
+
+def df2big(F)
+{
+ AG=[[os_md.mysin,sin],[os_md.mycos,cos],[os_md.mytan,tan],[os_md.myasin,asin],
+ [os_md.acos,acos],[os_md,atan,atan],[os_md.myexp,exp],[os_md.mylog,log],[os_md.mypow,pow]];
+ if(getopt(inv)!=1) return mysubst(F,AG);
+ else return mysubst(F,AG|inv=1);
+
+}
+
+def f2df(F)
+{
+ if(type(Opt=getopt(opt))!=1) Opt=0;
+ if(iand(Opt,1)){
+ if(Opt>0) F=map(eval,F);
+ else F=map(deval,F);
+ }
+ Cpx=getopt(cpx);
+ if(type(F)==4 && iand(Opt,2)==0) return F;
+ K=getopt(level);
+ if(type(K)!=1) K=0;
+ AG=[sin,cos,tan,asin,acos,atan,exp,sinh,cosh,tanh,log,pow];
+ AGd=[os_md.mysin,os_md.mycos,os_md.mytan,os_md.myasin,os_md.myacos,
+ os_md.myatan,os_md.myexp,os_md.myexp,os_md.myexp,os_md.myexp,
+ os_md.mylog,os_md.sqrt,os_md.myexp];
+ for(R=[],I=0,Arg=vars(F);Arg!=[];Arg=cdr(Arg)){
+ Fn=functor(car(Arg));
+ if(vtype(Fn)!=3) continue;
+ V=args(car(Arg));
+ for(PAG=AG,PAGd=AGd;PAG!=[];PAG=cdr(PAG),PAGd=cdr(PAGd)){
+ if(Fn==car(PAG)){
+ if(K==0) L="z__";
+ else L="z"+rtostr(K)+"__";
+ if(I==0) VC=makev([L]);
+ else VC=makev([L,I]);
+ I++;
+ VC0=VC;
+ if(Fn==sinh || Fn==cosh || Fn==tanh){
+ VC=makev([L,I++]);
+ if(Fn==sinh)
+ R=cons([VC0,0,(VC^2-1)/(2*VC)],R);
+ else if(Fn==cosh)
+ R=cons([VC0,0,(VC^2+1)/(2*VC)],R);
+ else
+ R=cons([VC0,0,(VC^2-1)/(VC^2+1)],R);
+ }
+ if(Fn==pow && (V[1]!=1/2||Cpx==1)){
+#if 0
+ R0=f2df(V[1]*((type(V[0])==1)?dlog(V[0]):log(V[0]))|level=K+1);
+ PAGd=cdr(PAGd);
+#else
+ R=cons([VC,os_md.mypow,V[0],V[1]],R);
+ F=mysubst(F,[car(Arg),VC0]);
+ Arg=cons(0,vars(F));
+ break;
+#endif
+ }else R0=f2df(V[0]|level=K+1);
+ R=cons([VC,car(PAGd),R0],R);
+ F=mysubst(F,[car(Arg),VC0]);
+ Arg=cons(0,vars(F));
+ break;
+ }
+ }
+ }
+ if(R==[]) return F;
+ if(Cpx==1){
+ for(PAG=P,PAGd=AGd;PAG!=[];PAG=cdr(PAG),PAGd=cdr(PAGd))
+ R=mysubst(R,[car(PADd),car(PAG)]);
+ }
+ return cons(F,reverse(R));
+}
+
+def todf(F,V)
+{
+ if(type(V)!=4) V=[V];
+ for(R=[];V!=[];V=cdr(V)){
+ R=cons(f2df(car(V)),R);
+ }
+ V=reverse(R);
+ Z=makenewv([F,V]);
+ return [Z,cons(Z,cons(F,V))];
+}
+
+def compdf(F,V,G)
+{
+ FL=["abs","floor","rint","zeta","gamma","arg","real","imag","conj"];
+ FS=[os_md.abs,floor,rint,os_md.zeta,os_md.gamma,os_md.myarg,real,imag,conj];
+ if(type(F)==7){
+ if(str_str(F,"|")==0){
+ F="abs("+str_cut(F,1,str_len(F)-2)+")";
+ }else if(str_str(F,"[")==0){
+ F="floor("+str_cut(F,1,str_len(F)-2)+")";
+ }
+ I=str_str(F,"(");
+ Var=x;
+ if(I>0){
+ J=str_pair(F,I+1,"(",")");
+ if(J<0) return 0;
+ Var=eval_str(str_cut(F,I+1,J-1));
+ Var=f2df(Var);
+ F0=str_cut(F,0,I-1);
+ }
+ if((I=findin(F0,FL))<0&&(I=findin(F,FL))<0) F=f2df(eval_str(F));
+ else F=[z__,[z__,FS[I],Var]];
+ }
+ if(type(F)!=4) F=f2df(F);
+ if(type(G)!=4) G=f2df(G);
+ if(V==G) return F; /* subst(F(V),V,G) */
+ VF=vars(F);VG=vars(G);
+ if(type(V)==4){
+ for(VT=[],VV=V;VV!=[];VV=cdr(VV)){
+ if(findin(car(VV),VF)>=0){
+ X=makenewv(append(VF,VG));
+ VF=cons(X,VF);
+ F=mysubst(F,[car(VV),X]);
+ VT=cons(X,VT);
+ }else VT=cons(car(VV),VT);
+ }
+ for(V=reverse(VT);V!=[];V=cdr(V),G=cdr(G)) F=compdf(F,car(V),car(G));
+ return F;
+ }
+ for(E=I=0;I<30;I++){
+ for(J=0;J<30;J++){
+ X=makev(["z__",I,J]);
+ if(findin(X,VF)<0 && findin(X,VG)<0){
+ E=1;break;
+ }
+ }
+ if(E) break;
+ }
+ if(!E) return 0;
+ if(type(G)<4) return mysubst(F,[V,G]);
+ if(type(F)<4) F=[F]; /* return compdf([X,[X,0,F]],V,G); */
+ F=mysubst(F,[V,X]);
+ if(isvar(G[0])){
+ G=mysubst(G,[G[0],X]);
+ if(length(G)==2&&type(G[1])==4&&G[1][0]==X) G=G[1];
+ G=cons(G,cdr(F));
+ }
+ else G=cons([X,0,G],cdr(F));
+ return cons(car(F),G);
+}
+
+def fzero(F,LX)
+{
+ if(length(LX)==3){
+ V=LX[0];LX=cdr(LX);
+ }else V=x;
+ LX1=eval(LX[0]);LX2=eval(LX[1]);
+ if(getopt(zero)==1){
+ if(getopt(cont)==1) CT=1;
+ else CT=0;
+ if(getopt(trans)!=1 && type(F)<4) F=f2df(F);
+ F=mysubst(F,[[@pi,deval(@pi)],[@e,deval(@e)]]);
+ if(type(Dev=getopt(dev))!=1 || Dev<2) Dev=16;
+ V1=myeval(mysubst(F,[V,X1=LX1]));
+ V2=myeval(mysubst(F,[V,X2=LX2]));
+ if(V1>0){
+ V0=V1;V1=V2;V2=V0;
+ X0=X1;X1=X2;X2=X0;
+ }
+ if(V1<0 && V2>0){
+ D=(V2-V1)*1024;
+ for(I=0; I<Dev; I++){
+/* mycat([D,X1,V1,X2,V2]) ; */
+ if(iand(I,1)) X0=(X1+X2)/2;
+ else X0=(V2*X1-V1*X2)/(V2-V1);
+ V0=myeval(mysubst(F,[V,X0]));
+ if(V0==0||V0==V1||V0==V2) return [X0,V0];
+ if(V0<0){
+ if(!CT && V0+D<0) return [];
+ V1=V0;X1=X0;
+ }else{
+ if(!CT && V0>D) return [];
+ V2=V0;X2=X0;
+ }
+ }
+ X0=(V2*X1-V1*X2)/(V2-V1);
+ return [X0,myeval(mysubst(F,[V,X0]))];
+ }
+ if(V0==0) return [X0,V0];
+ if(V1==0) return [X1,V1];
+ return [];
+ }
+ if(type(F)<4) F=f2df(F);
+ F=mysubst(F,[[@pi,deval(@pi)],[@e,deval(@e)]]);
+ L=[];
+ if(type(F)<4){
+ if(type(F)==3) F=nm(red(F));
+ if((Deg=deg(F,V))<=2){
+ if(Deg==2){
+ D=(C1=coef(F,1,V))^2-4*(C2=coef(F,2,V))*coef(F,0,V);
+ if(D>=0){
+ R=dsqrt(D);
+ if((S=(-C1+R)/(2*C2))>=LX1&&S<=LX2) L=[[S,mysubst(F,[V,S])]];
+ if(D!=0 && (S=(-C1-R)/(2*C2))>=LX1&&S<=LX2) L=cons([S,mysubst(F,[V,S])],L);
+ }
+ L=qsort(L);
+ }else if(Deg==1&&(S=-coef(F,0,V)/coef(F,1,V))>=LX1&&S<=LX2)
+ L=[[S,mysubst(F,[V,S])]];
+ return L;
+ }
+ for(L=[];S!=[];S=cdr(S))
+ if(car(S)>=LX1&&car(S)<=LX2) L=cons([car(S),mysubst(F,[V,car(S)])],L);
+ return qsort(L);
+ }
+ if(type(Div=getopt(mesh))!=1 || Div<=0)
+ Div = 2^(10);
+ W=(LX2-LX1)/Div;
+ for(I=V2=0;I<=Div;I++){
+ X1=X2;X2=LX1+I*W;V1=V2;
+ if((V2=myeval(mysubst(F,[V,X2])))==0)
+ L=cons([X2,V2],L);
+ if(V1*V2<0){
+ L0=fzero(F,[V,X1,X2]|zero=1,trans=1);
+ if(L0!=[]) L=cons(L0,L);
+ }
+ }
+ return reverse(L);
+}
+
+def fmmx(F,LX)
+{
+ if(length(LX)==3){
+ V=LX[0];LX=cdr(LX);
+ }else V=x;
+ LX1=eval(LX[0]);LX2=eval(LX[1]);
+ FT=F;
+ if(getopt(trans)!=1 && type(F)<4) FT=f2df(FT);
+ FT=mysubst(FT,[[@pi,eval(@pi)],[@e,eval(@e)]]);
+ if(type(G=getopt(dif))>=1){
+ if(G==1) G=os_md.mydiff(F,V);
+ L=fzero(G,[V,LX1,LX2]|option_list=getopt());
+ R=[[LX1,myeval(mysubst(FT,[V,LX1]))]];
+ for(I=0;L!=[];L=cdr(L),I++){
+ X=car(L)[0];
+ if(X==LX1) continue;
+ R=cons([X,myeval(mysubst(FT,[V,X]))],R);
+ }
+ if(X!=LX2) R=cons([LX2,myeval(mysubst(FT,[V,LX2]))],R);
+ if(getopt(mmx)!=1) return reverse(R);
+ for(Mi=Ma=car(R);R!=[];R=cdr(R)){
+ if(car(R)[1]>Ma[1]) Ma=car(R);
+ else if(car(R)[1]<Mi[1]) Mi=car(R);
+ }
+ return [Mi,Ma];
+ }
+ if(type(Div=getopt(mesh))!=1 || Div<=0)
+ Div = 2^(10);
+ if(type(Dev=getopt(dev))!=1 || Dev<2) Dev=16;
+ W=(LX2-LX1)/Div;
+ for(I=V2=V3=0;I<=Div;I++){
+ X1=X2;X2=X3;X3=LX1+I*W;V1=V2;V2=V3;
+ V3=myeval(mysubst(FT,[V,X3]));
+ if(I==0) L=[[X3,V3]];
+ if(I<2) continue;
+ if((V1-V2)*(V2-V3)<0){
+ X02=X2;V02=V2;X03=X3;V03=V3;
+ for(J=0; J<Dev && X1!=X3; J++){
+ X12=(X1+X2)/2;V12=myeval(mysubst(FT,[V,X12]));
+ if((V1-V12)*(V12-V2)<=0){
+ X3=X2;V3=V2;X2=X12;V2=V12;continue;
+ }
+ X23=(X2+X3)/2;V23=myeval(mysubst(FT,[V,X23]));
+ if((V12-V2)*(V2-V23)<=0){
+ X1=X12;V1=V12;X3=X23;V3=V23;continue;
+ }
+ if((V2-V23)*(V23-V3)<=0){
+ X1=X2;V1=V2;X2=X23;V2=V23;continue;
+ }
+ }
+ L=cons([X2,V2],L);
+ X2=X02;V2=V02;X3=X03;V3=V03;
+ }
+ }
+ L=cons([LX2,myeval(mysubst(FT,[V,LX2]))],L);
+ if(getopt(mmx)!=1) return L;
+ for(Mi=Ma=car(L);L!=[];L=cdr(L)){
+ if(car(L)[1]>Ma[1]) Ma=car(L);
+ else if(car(L)[1]<Mi[1]) Mi=car(L);
+ }
+ return [Mi,Ma];
+}
+
+def flim(F,L)
+{
+ FD=f2df(F);
+ Lim0=4;Lim=12;FS=1;
+ if(type(Pc=getopt(prec))==1){
+ if((Pc>1&&Pc<31)||Pc>-5) Lim+=Pc;
+ }
+ if(type(Pc=getopt(init))==1 && Pc>0) FS*=Pc;
+ if(type(L)==7) L=[L];
+ else if(type(L)<2){
+ K=flim(F,["+",L]|option_list=getopt());
+ if(K=="") return K;
+ K1=flim(F,["-",L]|option_list=getopt());
+ if(K1=="") return K1;
+ if(type(K)==7||type(K1)==7){
+ if(K!=K1) return "";
+ return K;
+ }
+ if(abs(K)<10^(-5)){
+ if(abs(K1)<10^(-5)) return (K1+K)/2;
+ else return "";
+ }
+ if(abs((K1-K)/K)<10^(-4)) return (K1+K)/2;
+ return "";
+ }
+ if(type(L)!=4||type(L[0])!=7) return "";
+ if(L[0]=="-"||L[0]=="-infty"){
+ FS=-FS;
+ }else if(L[0]!="+"&&L[0]!="infty") return "";
+ FI=(length(L)==1)?1:0;
+ for(Inf=0,I=Lim0;I<Lim;I++){
+ D1=FS*8^I;D2=8*D1;
+ if(FI==0){
+ D1=1/D1;D2=1/D2;
+ }
+ if(D1>D2){
+ D=D1;D1=D2;D1=D;
+ X1=D1;X2=D2;
+ }
+ if(FI==0){
+ D1+=L[1];D2+=L[1];
+ }
+ K=fmmx(FD,[D1,D2]|mmx=1,mesh=16,dev=4);
+ if(I>Lim0){
+ if(DF<K[1][1]-K[0][1]&&DF>10^(-8)&&DF<10^7){
+ if(I>Lim0+1){
+ if(Inf==0) return "";
+ }else Inf=1;
+ }else if(Inf==1) return "";
+ }
+ DF=K[1][1]-K[0][1];
+ }
+ if(Inf==1){
+ if(K[0][1]>10^8) return "+";
+ else if(K[1][1]<-10^8) return "-";
+ return "";
+ }
+ V=(myfeval(FD,D1)+1.0)-1.0;
+ if(V!=0 && abs(V)<10^(-9)) return 0;
+ return V;
+}
+
+def fcont(F,LX)
+{
+ if(length(LX)==3){
+ V=LX[0];LX=cdr(LX);
+ }else V=x;
+ LX1=eval(LX[0]);LX2=eval(LX[1]);
+ if(getopt(trans)!=1 && type(F)<4) FT=f2df(F);
+ if(type(Div=getopt(mesh))!=1 || Div<=0)
+ Div = 2^(10);
+ if(type(Dev=getopt(dev))!=1 || Dev<2) Dev=16;
+ W=(LX2-LX1)/Div;
+ if((Df=getopt(dif))!=1){
+ Df=0;
+ }else{
+ if(Dev==16) Dev=6;
+ WD=W/2^(Dev+1);
+ }
+ F=FT;
+ C=2;
+ for(I=V2=V3=0;I<=Div;I++){
+ X1=X2;X2=X3;X3=LX1+I*W;V1=V2;V2=V3;
+ V3=myeval(mysubst(F,[V,X3]));
+ if(Df){
+ if(I==Div) break;
+ V3=(myeval(mysubst(F,[V,X3+WD]))-V3)/WD;
+ }
+ if(I==0) L=[[X3,V3]];
+ if(I<2) continue;
+ if(C*dabs(2*V2-V1-V3) > dabs(V1-V3)){
+ X01=X1;V01=V1;X02=X2;V02=V2;X03=X3;V03=V3;
+ for(J=0; X01!=X03; J++){
+ if(dabs(V01-V02)>dabs(V02-V03)){
+ X03=X02;V03=V02;
+ }else{
+ X01=X02;V01=V02;
+ }
+ if(J==Dev) break;
+ X02=(X01+X02)/2;
+ V02=myeval(mysubst(F,[V,X02]));
+ if(Df) V02=(myeval(mysubst(F,[V,WD]))-V02)/WD;
+ if(C*dabs(2*V02-V01-V03) < dabs(V01-V03)) break;
+ }
+ if(J==Dev||X01==X03) L=cons([X01,X03,V03-V01],L);
+ }
+ }
+ return reverse(L);
+}
+
+def xygraph(F,N,LT,LX,LY)
+{
+ if((Proc=getopt(proc))!=1&&Proc!=2&&Proc!=3) Proc=0;
+ if(type(DV=getopt(dviout))==4){
+ OL=delopt(getopt(),["dviout","shift","ext","cl"]);
+ OL=cons(["proc",1],OL);
+ R=xygraph(F,N,LT,LX,LY|option_list=OL);
+ OL=delopt(getopt(),["shift","ext","cl"]|inv=1);
+ return execdraw(R,DV|optilon_list=OL);
+ }
+ if(N==0) N=32;
+ if(N<0){
+ N=-N;
+ N1=-1; N2=N+1;
+ }else{
+ N1=0; N2=N;
+ }
+ if(length(LT)==3 && isvar(LT[0])==1){
+ TT=LT[0]; LT=cdr(LT);
+ F=mysubst(F,[TT,x]);
+ }
+ if(LX==0) LX=LT;
+ if((Acc=getopt(Acc))!=1) Acc=0;
+ if(Acc){
+ LX=[eval(LX[0]),eval(LX[1])];
+ LY=[eval(LY[0]),eval(LY[1])];
+ LT=[eval(LT[0]),eval(LT[1])];
+ }else{
+ LX=[deval(LX[0]),deval(LX[1])];
+ LY=[deval(LY[0]),deval(LY[1])];
+ LT=[deval(LT[0]),deval(LT[1])];
+ }
+ TD=(LT[1]-LT[0])/N;
+ if(type(Mul=getopt(scale))!=1){
+ if(type(Mul)==4){
+ MulX=Mul[0]; MulY=Mul[1];
+ }else MulX=MulY=1;
+ }else MulX=MulY=Mul;
+ if(type(Org=getopt(org))==4){
+ Orgx=Org[0];Orgy=Org[1];
+ }else Orgx=Orgy=0;
+ if(type(F)!=4 || (getopt(para)!=1 && length(F)>1 && type(F[0])<4 && type(F[1])==4)) {
+ if(getopt(rev)!=1){
+ F1=x; /* LX[0]+(LX[1]-LX[0])*(x-LT[0])/(TD*N); */
+ F2=F;
+ }else{
+ F1=F;
+ F2=x; /* LY[0]+(LY[1]-LY[0])*(x-LT[0])/(TD*N); */
+ }
+ }else{
+ F1=F[0]; F2=F[1];
+ }
+ if(F1==0 || F2==0) LT=[];
+ if(length(LT)==2){
+ if(Acc){
+ for(LTT=[],I=N2;I>=N1;I--)
+ LTT=cons(eval(LT[0]+I*(LT[1]-LT[0])/N),LTT);
+ }else{
+ for(LTT=[],I=N2;I>=N1;I--)
+ LTT=cons(deval(LT[0]+I*(LT[1]-LT[0])/N),LTT);
+ }
+ LT=LTT;
+ }
+ Cpx=getopt(cpx);
+ if(Cpx!=1 && (str_str(rtostr(F1),"@i")>=0 || str_str(rtostr(F2),"@i")>=0))
+ Cpx=1;
+ if(type(Cpx)<0) Cpx=0;
+ if(!Acc){
+ if(type(F1)<4) F1=f2df(F1);
+ if(type(F2)<4) F2=f2df(F2);
+ }
+ if(type(Err=getopt(err))==1){
+ F1=mysubst(F1,[x,x+Err*TD/1001.23]);
+ F2=mysubst(F2,[x,x+Err*TD/1001.23]);
+ }
+ if(type(F1)==4 || type(F2)==4){
+ Dn=1;
+ }else Dn=dn(F1)*dn(F2);
+ for(V=[],PT=LT;PT!=[]; PT=cdr(PT)){
+ T=car(PT);
+ if(myfeval(Dn,T)==0){
+ V=cons(0,V); continue;
+ }
+ if(Cpx>0||Acc){
+ X=myfeval(F1,T);Y=myfeval(F2,T);
+ }else{
+ X=myfdeval(F1,T);Y=myfdeval(F2,T);
+ }
+ if((N1==0||(PT!=LT&&length(PT)!=1)) && (X<LX[0]||X>LX[1]||Y<LY[0]||Y>LY[1]))
+ V=cons(0,V);
+ else
+ V=cons([MulX*(X-Orgx),MulY*(Y-Orgy)],V);
+ }
+ V=reverse(V);
+ Gap0=Gap=Arg=0;
+ if(type(Prec=getopt(prec))<0)
+ Level=0;
+ else if(Prec==0) Level=4;
+ else if(type(Prec)==1){
+ Level=Prec;
+ if(Level<0){
+ Level=-Level;
+ Gap0=1;
+ }
+ }else if(type(Prec)==4){
+ Level=Prec[0];
+ if(length(Prec)>1) Arg=Prec[1];
+ if(length(Prec)>2) Gap0=Prec[2];
+ }
+ if(Level>0){
+ if(Level>16) Level=16;
+ if(Arg<=0) Arg=30;
+ else if(Arg>120) Arg=120;
+ Arg=Acc?eval(@pi*Arg/180):deval(@pi*Arg/180);
+ SL=dcos(Arg);
+ }
+ if(Gap0>0){
+ if(Gap0<2) Gap0=16;
+ else if(Gap0>512) Gap0=512;
+ Gap=((MulX*(LX[1]-LX[0]))^2+(MulY*(LY[1]-LY[0]))^2)/(Gap0^2);
+ }
+ for(I=0;I<Level;I++){
+ for(F=K=G=0,NV=NLT=[],PLT=LT,PV=V;PLT!=[];K++,PLT=cdr(PLT),PV=cdr(PV)){
+ TG=0;D0=D1;CLT0=CLT;CV0=CV;CV=car(PV);CLT=car(PLT);
+ if(length(PV)>1){
+ if((CV1=car(cdr(PV)))!=0 && CV!=0)
+ D1=[CV[0]-CV1[0],CV[1]-CV1[1]];
+ else D1=0;
+ }else K=-1; /* ? */
+ if(K>0 &&(((D1==0||D0==0)&&(CV0!=0||CV!=0||CV1!=0)) || dvangle(D0,D1)<SL ||
+ (Gap>0 && type(D0)==4 && (TG=(D0[0]^2+D0[1]^2-Gap)>0)))){
+ G++;T1=(CLT0+CLT)/2;
+ if(F==0 && (CV0!=0 || CV!=0)){
+ if(myfdeval(Dn,T1)==0){
+ NV=cons(0,NV); NLT=cons(T1,NLT);
+ }
+ if(Cpx>0||Acc){
+ X=myfeval(F1,T1);Y=myfeval(F2,T1);
+ }else{
+ X=myfdeval(F1,T1);Y=myfdeval(F2,T1);
+ }
+ if(K==1 && N1<0){
+ NV=[];NLT=[];
+ }
+ if((K>1||N1==0)&&(X<LX[0]||X>LX[1]||Y<LY[0]||Y>LY[1])){
+ NV=cons(0,NV);NLT=cons(T1,NLT);F=0;
+ }else{
+ NV=cons([MulX*(X-Orgx),MulY*(Y-Orgy)],NV);NLT=cons(T1,NLT);
+ }
+ }
+ NV=cons(CV,NV);NLT=cons(CLT,NLT);
+ if(!TG&&(CV0!=0||CV1!=0)){
+ T2=(car(cdr(PLT))+CLT)/2;
+ if(myfdeval(Dn,T2)==0){
+ NV=cons(0,NV); NLT=cons(CLT,NLT);
+ }
+ if(Cpx>0||Acc){
+ X=myfeval(F1,T2);Y=myfeval(F2,T2);
+ }else{
+ X=myfdeval(F1,T2);Y=myfdeval(F2,T2);
+ }
+ if((N1==0||length(PV)!=2)&&(X<LX[0]||X>LX[1]||Y<LY[0]||Y>LY[1])){
+ NV=cons(0,NV);NLT=cons(T1,NLT);
+ }else{
+ NV=cons([MulX*(X-Orgx),MulY*(Y-Orgy)],NV);NLT=cons(T2,NLT);
+ }
+ }
+ if(length(PV)==2 && N1==-1) break;
+ F=1;
+ }else{
+ F=0;NV=cons(CV,NV);NLT=cons(CLT,NLT);
+ }
+ }
+ V=reverse(NV);LT=reverse(NLT);
+ if(G==0) break;
+ }
+ if(Gap>0){
+ for(NV=[],PV=V;PV!=[];PV=cdr(PV)){
+ NV=cons(P0=car(PV),NV);
+ if(length(PV)>1 && P0!=0 && PV[1]!=0
+ && (P0[0]-PV[1][0])^2+(P0[1]-PV[1][1])^2>Gap) NV=cons(0,NV);
+ }
+ V=reverse(NV);
+ }
+ if((Raw=getopt(raw))==1) return V;
+ if(Raw==2) return [V,LT];
+ OL=[["curve",1]];OLP=[];
+ if(type(C=getopt(ratio))==1){
+ OL=cons(["ratio",C],OL);OLP=cons(["ratio",C],OLP);
+ }
+ if(Acc==1) OL=cons(["Acc",1],OL);
+ if(N1<0) OL=cons(["close",-1],OL);
+ if(type(Opt=getopt(opt))!=7 && type(Opt)!=4){
+ if(Opt==0) return xylines(V|option_list=cons(["opt",0],OL));
+ }
+ OL=cons(["opt",(Proc)?0:Opt],OL);
+ if(type(Opt)>=0) OLP=cons(["opt",Opt],OLP);
+ if(type(Vb=getopt(verb))==1||type(Vb)==4){
+ OL=cons(["verb",Vb],OL);OLP=cons(["verb",Vb],OL);
+ }
+ if(Proc){
+ S=(Proc==1)?
+ [[0,[MulX*(LX[0]-Orgx),MulX*(LX[1]-Orgx)],[MulY*(LY[0]-Orgy),MulY*(LY[1]-Orgy)],
+ (TikZ)?1:1/10]]:[];
+ S=cons([1,OLP,xylines(V|option_list=OL)],S);
+ if(Proc==3) return car(S);
+ }else S=xylines(V|option_list=OL);
+ if(type(Pt=getopt(pt))==4){
+ if(type(Pt[0])!=4) Pt=[Pt];
+ if(length(Pt)>1 && type(Pt[1])!=4) Pt=[Pt];
+ for(PT=Pt;PT!=[];PT=cdr(PT)){
+ PP=car(PT);
+ if(type(PP[0])!=4) PP=[PP];
+ P=car(PP);PP=cdr(PP);
+ Qx=MulX*(P[0]-Orgx);Qy=MulY*(P[1]-Orgy);
+ if(length(PP)>0 && type(PP[0])==4){ /* draw line */
+ P=car(PP);
+ Q1x=MulX*(P[0]-Orgx);Q1y=MulY*(P[1]-Orgy);
+ if(length(PP)<1 || car(PP)==0 || iand(car(PP),1))
+ OL=["opt",(TikZ)?"-":"@{-}"];
+ else OL=["opt",(TikZ)?".":"@{.}"];
+ if(Proc) S=cons([1,OL,[[Qx,Qy],[Q1x,Q1y]]],S);
+ else S=S+xylines([[Qx,Qy],[Q1x,Q1y]]|optilon_list=OL);
+ continue;
+ }
+ if(length(PP)==0 || type(car(PP))!=7) SS="$\\bullet$";
+ else SS=car(PP);
+ if(length(PP)<=1){
+ if(Proc) S=cons([2,[],[Qx,Qy],[SS]],S);
+ else S=S+xyput([Qx,Qy,SS]);
+ }else{
+ if(Proc) S=cons([2,[],[Qx,Qy],[[SS],"",PP[1]]],S);
+ S=S+xyput([Qx,Qy,SS,"",PP[1]]);
+ }
+ }
+ }
+ if(type(Ax=getopt(ax))==4){ /* draw axis */
+ Adx0=Ady0=0; Adx1=Ady1=0.1;
+ if(!TikZ){
+ if(!XYcm) Adx1=Ady1=1;
+ LOp="@{-}"; LxOp="+!U"; LyOp="+!R";
+ }else{
+ LOp="-"; LxOp="below"; LyOp="left";
+ }
+ LOp0=LOp1=LOp;
+ LxOO=(Ax[1]==LY[0])?LxOp:(TikZ)?"below left":"+!UR";
+ if(type(AxOp=getopt(axopt))>0){
+ if(type(AxOp)==1){
+ if(AxOp>0) Adx1=Ady1=AxOp;
+ else if(AxOp<0){
+ Adx1=Ady1=0; Adx0=Ady0=AxOp;
+ }
+ }else if(type(AxOp)==4){
+ if(type(T=car(AxOp))==4 && length(AxOp)>1){
+ if(type(T)==7){
+ LxOp=T; LyOp=AxOp[1];
+ }else if(type(T)==4){
+ Ay0=T[0]; Ay1=T[1]; Ax0=AxOp[1][0]; Ax1=AxOp[1][1];
+ if(length(T)>2) LxOp=T[2];
+ if(length(AxOp[1])>2) LyOp=AxOp[1][2];
+ }
+ }
+ if(length(AxOp)>2 && type(AxOp[2])==7) LxOO=AxOp[2];
+ if(length(AxOp)>3 && type(AxOp[3])==7) LOp0=AxOp[3];
+ if(length(AxOp)>4 && type(AxOp[4])==7) LOp1=AxOp[4];
+ }
+ if(type(AxOp)==7) LOp0=AxOp;
+ }
+ if(Ax[0]>=LX[0] && Ax[0]<=LX[1]){ /* draw marks on x-axis */
+ if(Proc) S=cons([3,(type(LOp0)>=0)?[["opt",LOp0]]:[],
+ [MulX*(Ax[0]-Orgx),MulY*(LY[0]-Orgy)],[MulX*(Ax[0]-Orgx),MulY*(LY[1]-Orgy)]],S);
+ else S=S+xyarrow([MulX*(Ax[0]-Orgx),MulY*(LY[0]-Orgy)],
+ [MulX*(Ax[0]-Orgx),MulY*(LY[1]-Orgy)]|opt=LOp0);
+ if(length(Ax)>2){
+ D=Ax[2];
+ if(type(D)==1 && D>0){
+ I0=ceil((LX[0]-Ax[0])/D); I1=floor((LX[1]-Ax[0])/D);
+ for(DD=[],I=I0; I<=I1; I++){
+ if(length(Ax)<5) DD=cons(I*D,DD);
+ else if(Ax[4]==0) DD=cons([I*D,I*D+Ax[0]],DD);
+ else if(Ax[4]==1) DD=cons([I*D,I*D],DD);
+ else if(Ax[4]==2) DD=cons([I*D,I],DD);
+ }
+ D=DD;
+ }
+ if(type(D)==4){
+ for(;D!=[]; D=cdr(D)){
+ T=car(D);
+ if(type(T)==4) T=car(T);
+ X=MulX*(T+Ax[0]-Orgx); Y=MulY*(Ax[1]-Orgy);
+ if(T!=0){
+ if(Proc) S=cons([3,(type(LOp1)>=0)?[["opt",LOp1]]:[],[X,Y+Ady0],[X,Y+Ady1]],S);
+ else S=S+xyarrow([X,Y+Ady0],[X,Y+Ady1]|opt=LOp1);
+ }
+ if(type(car(D))==4){
+ Arg=[(T==0)?LxOO:LxOp,D[0][1]];
+ if(Proc) S=cons([2,[],[X,Y+Ady0],[Arg]],S);
+ else S=S+xyput([X,Y+Ady0,Arg]);
+ }
+ }
+ }
+ }
+ }
+ if(Ax[1]>=LY[0] && Ax[1]<=LY[1]){ /* draw marks on y-axis */
+ if(Proc) S=cons([3,[["opt",LOp0]],
+ [MulX*(LX[0]-Orgx),MulY*(Ax[1]-Orgy)],
+ [MulX*(LX[1]-Orgx),MulY*(Ax[1]-Orgy)]],S);
+ else S=S+xyarrow([MulX*(LX[0]-Orgx),MulY*(Ax[1]-Orgy)],
+ [MulX*(LX[1]-Orgx),MulY*(Ax[1]-Orgy)]|opt=LOp0);
+ if(length(Ax)>3){
+ D=Ax[3];
+ if(type(D)==1 && D>0){
+ I0=ceil((LY[0]-Ax[1])/D); I1=floor((LY[1]-Ax[0])/D);
+ for(DD=[],I=I0; I<=I1; I++){
+ if(length(Ax)<5) DD=cons(I*D,DD);
+ else if(I!=0){
+ if(Ax[4]==0) DD=cons([I*D,I*D+Ax[1]],DD);
+ if(Ax[4]==1) DD=cons([I*D,I*D],DD);
+ if(Ax[4]==2) DD=cons([I*D,I],DD);
+ }
+ }
+ D=DD;
+ }
+ if(type(D)==4){
+ for(;type(D)==4&&D!=[]; D=cdr(D)){
+ T=car(D);
+ if(type(T)==4) T=car(T);
+ X=MulX*(Ax[0]-Orgx); Y=MulY*(T+Ax[1]-Orgy);
+ if(T!=0){
+ if(Proc) S=cons([3,(type(LOp0)>=0)?[["opt",LOp1]]:[],
+ [X+Adx0,Y],[X+Adx1,Y]],S);
+ else S=S+xyarrow([X+Adx0,Y],[X+Adx1,Y]|opt=LOp1);
+ }
+ if(type(car(D))==4){
+ if(Proc) S=cons([2,[],[X,Y+Ady0],[[LyOp,D[0][1]]]],S);
+ else S=S+xyput([X,Y+Ady0,[LyOp,D[0][1]]]);
+ }
+ }
+ }
+ }
+ }
+ }
+ if(Proc) return reverse(S);
+ if(getopt(dviout)!=1) return S;
+ xyproc(S|dviout=1);
+}
+
+def xyarrow(P,Q)
+{
+ Cmd = ["fill","filldaw","shade","shadedraw","clip ","pattern","path ","node","coordinate"];
+ if(type(P)<4) return "%\n";
+ SS=getopt(opt);
+ if(!TikZ){
+ if(type(Q)<4) return "";
+ S="{"+xypos(P)+" \\ar";
+ if(type(SS)==7) S=S+SS;
+ return S+" "+xypos(Q)+"};\n";
+ }
+ if(type(SS)==4 && length(SS)>1){
+ if(length(SS)>2) SU=SS[2];
+ ST=SS[1];
+ SS=SS[0];
+ }
+ if(type(SS)!=7) SS="->";
+ if(type(ST)!=7) ST=" -- ";
+ if(type(SU)!=7) SU="";
+ if(type(S=getopt(cmd))==7) S="\\"+S;
+ else S="\\draw";
+ if(type(Q)!=4){
+ if(Q>0 && Q<=length(Cmd)) S="\\"+Cmd[Q-1]+"";
+ if(SS!="-") S=S+"["+SS+"]";
+ if(SU!="") SU="["+SU+"]";
+ return S+xypos(P)+ST+SU+";\n";
+ }
+ if(SS!="-"&&SS!="") S=S+"["+SS+"]";
+ if(length(P)<3 && length(Q)<3)
+ return S+xypos(P)+ST+xypos(Q)+SU+";\n";
+ if(length(P)==2) P=[P[0],P[1],"","_0"];
+ else if(length(P)==3 || (length(P)==4 && P[3]==""))
+ P=[P[0],P[1],P[2],"_0"];
+ else if(P[3]=="")
+ P=[P[0],P[1],P[2],"_0",P[4]];
+ if(length(Q)==2) Q=[Q[0],Q[1],"","_1"];
+ else if(length(Q)==3 || (length(Q)==4 && Q[3]==""))
+ Q=[Q[0],Q[1],Q[2],"_1"];
+ else if(Q[3]=="")
+ Q=[Q[0],Q[1],Q[2],"_1",Q[4]];
+ return S+xypos(P)+" "+xypos(Q)+"("+P[3]+")"+ST+"("+Q[3]+")"+SU+";\n";
+}
+
+def xyarrows(P,Q,R)
+{
+ PQ=newvect(4);
+ PQ[0]=(type(P[0])!=4)?f2df(P[0]):P[0];
+ PQ[1]=(type(P[1])!=4)?f2df(P[1]):P[1];
+ PQ[2]=(type(Q[0])!=4)?f2df(Q[0]):Q[0];
+ PQ[3]=(type(Q[1])!=4)?f2df(Q[1]):Q[1];
+ if(type(R[0])!=4) R=[R];
+ TR=R[0];NX=TR[2];X=X0=TR[0];DX=(TR[1]-TR[0])/NX;
+ if(length(R)==2){
+ TR=R[1];NY=TR[2];Y=TR[0];DY=(TR[1]-TR[0])/NY;
+ }else{
+ NY=1;Y=DY=0;
+ }
+ if(type(L=getopt(abs))!=1) L=0;
+ if(type(Sc=getopt(scale))!=1) Sc=0;
+ OL=[];
+ if(type(Opt=getopt(opt))==7) OL=cons(["opt",Opt],OL);
+ Tb=str_tb(0,0);
+ for(J=0;J<NY;Y+=DY,J++){
+ for(I=0,X=X0;I<NX;I++,X+=DX){
+ PX=myf2eval(PQ[0],X,Y);PY=myf2eval(PQ[1],X,Y);
+ VX=myf2eval(PQ[2],X,Y);VY=myf2eval(PQ[3],X,Y);
+ if(L>0){
+ C=dnorm([VX,VY]);
+ if(C!=0){
+ VX*=L/C;VY*=L/C;
+ }
+ }
+ if(Sc){
+ VX*=Sc;VY*=Sc;
+ }
+ if(VX||VY) str_tb(xyarrow([PX,PY],[PX+VX,PY+VY]|optilon_list=OL),Tb);
+ }
+ }
+ return str_tb(0,Tb);
+}
+
+def polroots(L,V)
+{
+ INIT=1;
+ if(type(CF=getopt(comp))!=1) CF=0;
+ OL=getopt();
+ if(CF>32){
+ CF-=64;
+ INIT=0;
+ }else OL=cons(["comp",CF+64],delopt(OL,"comp"));
+ if(type(V)==4&&length(V)==1){
+ L=L[0];V=V[0];
+ }
+ Lim=Lim2=[];
+ if(type(L)<4){
+ if(type(Lim=getopt(lim))==4){
+ if(type(Lim[0])!=4){
+ if(!isvar(Lim[0])) Lim=cons(V,[Lim]);
+ Lim=[Lim];
+ }
+ if(!isvar(Lim[0][0])) Lim=[cons(V,Lim)];
+ Lim=delopt(Lim,V|inv=1);
+ if(Lim!=[]){
+ Lim=Lim[0];
+ if(length(Lim)==3) Lim2=Lim[2];
+ Lim=Lim[1];
+ }
+ }else{
+ Lim=Lim2=[];
+ }
+ if((CF==-2||CF==-1||CF==2)&&iscoef(L,os_md.israt)){ /* Rat+Comp, Rat+Real or Rat */
+ S=(CF==-1)?getroot(L,V|cpx=1):getroot(L,V);
+ for(RR=[],F=x;S!=[];S=cdr(S)){
+ if(findin(V,vars(C=car(S)))<0){ /* Rational solution */
+ if(type(C)<2){
+ if(Lim!=[]&&(real(C)<Lim[0]||real(C)>Lim[1])) continue;
+ if(Lim2!=[]&&(imag(C)<Lim2[0]||imag(C)>Lim2[1])) continue;
+ }
+ if(F!=C) RR=cons(F=C,RR);
+ }else if(CF<0){ /* Irrational solution */
+ if((R=pari(roots,mysubst(C,[V,x])))!=0){
+ for(R=vtol(R);R!=[];R=cdr(R))
+ if((C=car(R))!=F && ntype(C)<CF+6){
+ if(Lim!=[]&&(real(C)<Lim[0]||real(C)>Lim[1])) continue;
+ if(Lim2!=[]&&(imag(C)<Lim2[0]||imag(C)>Lim2[1])) continue;
+ RR=cons(F=C,RR);
+ }
+ }
+ }
+ }
+ return qsort(RR);
+ }
+ R=pari(roots,subst(L,V,x));
+ if(R==0){
+ R=[0];
+ if(CF==1){
+ for(R=[0],I=mydeg(L,V);I>1; I--)
+ R=cons(0,R);
+ }
+ return R;
+ }
+ if(CF==1){ /* Complex */
+ if(Lim==[]&&Lim2==[]) return vtol(R);
+ for(L=[],I=length(R)-1;I>=0;I--){
+ C=R[I];
+ if(Lim!=[]&&(real(C)<Lim[0]||real(C)>Lim[1])) continue;
+ if(Lim2!=[]&&(imag(C)<Lim2[0]||imag(C)>Lim2[1])) continue;
+ L=cons(C,L);
+ }
+ return L;
+ }
+ for(L=[],F=x,I=length(R)-1;I>=0;I--){ /* Real */
+ if(ntype(R[I])<4 && F!=R[I]){
+ if(Lim!=[] && (R[I]<Lim[0]||R[I]>Lim[1])) continue;
+ L=cons(F=R[I],L);
+ }
+ }
+ return qsort(L);
+ }
+ if(SS==0&&INIT==1){
+ SS=polroots(L,V|option_list=OL);
+ if(SS!=0) return SS;
+ for(C=0;SS==0&&C<5;C++){
+ I=(C==0)?1:(iand(random(),0xff)-0x80);
+ for(LL=[],K=length(L)-1;K>=0;K--){
+ for(Q=0,J=length(L)-1;J>=0;J--)
+ Q+=L[J]*(I+K)^J;
+ LL=cons(Q,LL);
+ }
+ SS=polroots(LL,V|option_list=OL);
+ if(SS!=0) return SS;
+ }
+ return SS;
+ }
+ C=2^(-32);
+ if(type(getopt(err))==1) C=err;
+ if((N=length(V))!=length(L)) return [];
+ if(N==1) return polroots(L[0],V[0]|option_list=OL);
+ for(L1=[],I=1;I<N;I++){
+ Res=res(V[0],L[I-1],L[I]);
+ if(type(Res)<2) return Res;
+ L1=cons(res(V[0],L[I-1],L[I]),L1);
+ }
+ R=polroots(L1,V1=cdr(V)|option_list=OL);
+ if(type(R)<2) return R;
+ for(SS=[];R!=[];R=cdr(R)){
+ RS=(N==2)?[car(R)]:car(R);
+ for(I=0,L0=L[0];I<N-1;I++) L0=mysubst(L0,[V1[I],RS[I]]);
+ if(L0==0) return 0;
+ S0=polroots(L0,V[0]|option_list=OL);
+ if(type(S0)<2) return S0;
+ for(S=S0;S!=[];S=cdr(S)){
+ S0=cons(car(S),RS);
+ for(LT=cdr(L);LT!=[];LT=cdr(LT)){
+ for(I=0,TV=car(LT);I<N;I++) TV=mysubst(TV,[V[I],S0[I]]);
+ if(abs(TV)>C) break;
+ }
+ if(LT==[]) SS=cons(S0,SS);
+ }
+ }
+ return reverse(SS);
+}
+
+def ptcommon(X,Y)
+{
+ if(length(X)!=2 || length(Y)!=2) return 0;
+ if(type(X[1])==4){ /* X is a line */
+ if((In=getopt(in))==-1||In==-2||In==-3){
+ X0=(X[0][0]+X[1][0])/2;X1=(X[0][1]+X[1][1])/2;
+ X=[[X0,X1],[X0+X[1][1]-X[0][1],X1-X[1][0]+X[0][0]]];
+ if(In==-1&&type(Y[1])==4) return ptcommon(Y,X|in=-2);
+ /* for the second line */
+ if(In==-3) In=1;
+ else In=0;
+ }else if(In==2||In==3){
+ X=(X[1][0]-X[0][0])+(X[1][1]-X[0][1])*@i;
+ if(X==0) return 0;
+ Y=(Y[1][0]-Y[0][0])+(Y[1][1]-Y[0][1])*@i;
+ X=myarg(Y/X);
+ return (In==2)?X:(X*180/deval(@pi));
+ }else if(In!=1) In=0;
+ if(type(Y[0])<=3){
+ if(In==1){
+ return [(Y[1]*X[0][0]+Y[0]*X[1][0])/(Y[0]+Y[1]),
+ (Y[1]*X[0][1]+Y[0]*X[1][1])/(Y[0]+Y[1])];
+ }
+ XX=X[1][0]-X[0][0];YY=X[1][1]-X[0][1];
+ Arg=(length(Y)<2)?0:Y[1];
+ Arg=deval(Arg);
+ if(Arg!=0){
+ S=dcos(Arg)*XX-dsin(Arg)*YY;
+ YY=dsin(Arg)*XX+dcos(Arg)*YY;
+ XX=S;
+ }
+ S=dnorm([XX,YY]);
+ if(S!=0){
+ XX*=Y[0]/S;YY*=Y[0]/S;
+ }
+ return [X[1][0]+XX,X[1][1]+YY];
+ }
+ S=[X[0][0]+(X[1][0]-X[0][0])*x_,X[0][1]+(X[1][1]-X[0][1])*x_];
+ if(type(Y[1])==4){ /* Y is a line */
+ T=[Y[0][0]+(Y[1][0]-Y[0][0])*y_-S[0],
+ Y[0][1]+(Y[1][1]-Y[0][1])*y_-S[1]];
+ R=lsol(T,[x_,y_]);
+ if(type(R[0])==4&&type(R[1])==4&&R[0][0]==x_&&R[1][0]==y_){
+ if(!In || (R[0][1]>=0&&R[0][1]<=1&&R[1][1]>=0&&R[1][1]<=1) )
+ return subst(S,x_,R[0][1],y_,R[1][1]);
+ }
+ if((type(R[0])>0&&type(R[0])<4)||(type(R[1])>0&&type(R[1])<4)) return 0;
+ if(!In) return 1;
+ I=(X[0][0]==X[1][0]&&Y[0][0]==Y[1][0]&&X[0][0]==Y[0][0])?1:0;
+ if(X[0][I]<=X[1][I]){
+ X0=X[0][I];X1=X[1][I];
+ }else{
+ X1=X[0][I];X0=X[1][I];
+ }
+ return ((Y[0][I]<X0 && Y[1][I]<X0)||(Y[0][I]>X1&&Y[1][I]>X1))?0:1;
+ }else if(Y[1]==0){ /* orth */
+ T=[Y[0][0]+(X[1][1]-X[0][1])*y_-S[0],
+ Y[0][1]-(X[1][0]-X[0][0])*y_-S[1]];
+ R=lsol(T,[x_,y_]);
+ if(type(R[0])==4&&type(R[1])==4&&R[0][0]==x_&&R[1][0]==y_){
+ if(!In||(R[0][1]>=0&&R[0][1]<=1))
+ return subst(S,x_,R[0][1],y_,R[1][1]);
+ }
+ return (X[0]==X[1])?0:1;
+ }else if(type(Y[1])==1 && Y[1]>0){ /* circle */
+ T=(S[0]-Y[0][0])^2+(S[1]-Y[0][1])^2-Y[1]^2;
+ D=mycoef(T,1,x_)^2-4*mycoef(T,0,x_)*mycoef(T,2,x_);
+ if(D==0){
+ V=mycoef(T,1,x_)/(2*mycoef(T,2,x_));
+ if(!in||(V>=0&&V<=1)) return [subst(S,x_,V)];
+ }
+ else if((type(D)==1&&D>0)){
+ D=dsqrt(D);
+ V=-(mycoef(T,1,x_)+D)/(2*mycoef(T,2,x_));
+ if(!In||(V>=0&&V<=1)) L=[subst(S,x_,V)];
+ else L=[];
+ V=(D-mycoef(T,1,x_))/(2*mycoef(T,2,x_));
+ if(!In||(V>=0&&V<=1)) L=cons(subst(S,x_,V),L);
+ if(length(L)>0) return L;
+ }
+ }
+ return 0;
+ }
+ if(type(Y[1])==4 || X[1]==0) return ptcommon(Y,X);
+ /* X is a circle */
+ if(Y[1]==0){ /* tangent line */
+ if(Y[0][0]==X[0][0]+X[1] || Y[0][0]==X[0][0]-X[1]) L=[[Y[0][0],X[0][1]]];
+ else L=[];
+ P=(Y[0][0]+x_-X[0][0])^2+(Y[0][1]+x_*y_-X[0][1])^2-X[1]^2;
+ Q=mycoef(P,1,x_)^2-4*mycoef(P,2,x_)*mycoef(P,0,x_);
+ for(R=polroots(Q,y_);R!=[];R=cdr(R)){
+ X0=-subst(mycoef(P,1,x_)/(2*mycoef(P,2,x_)),y_,car(R));
+ L=cons([Y[0][0]+X0,Y[0][1]+car(R)*X0],L);
+ }
+ }else{ /* Y is a circle */
+ P=(x_-X[0][0])^2+(y_-X[0][1])^2-X[1]^2;
+ Q=(x_-Y[0][0])^2+(y_-Y[0][1])^2-Y[1]^2;
+ V=(X[0][0]!=Y[0][0])?[x_,y_]:[y_,x_];
+ R=subst(P,V[0],T=lsol(P-Q,V[0]));
+ if(type(T[0])<4) return (T[0]==0)?1:0;
+ S=polroots(R,V[1]);
+ for(L=[];S!=[];S=cdr(S)){
+ R=subst(T,V[1],car(S));
+ if(V[0]==x_) L=cons([R,car(S)],L);
+ else L=cons([S,R],L);
+ }
+ }
+ if(length(L)!=0) return L;
+ return 0;
+}
+
+def tobezier(L)
+{
+ if((Div=getopt(div))==1||Div==2){
+ if(length(L)!=4) return [tobezier(L|inv=[0,1/2]),tobezier(L|inv=[1/2,1])];
+ if(type(L)==4) L=ltov(L);
+ if(type(L[0])==4)
+ L=[ltov(L[0]),ltov(L[1]),ltov(L[2]),ltov(L[3])];
+ S=[(L[0]+3*L[1]+3*L[2]+L[3])/8];
+ T=[L[3]];
+ S=cons((L[0]+2*L[1]+L[2])/4,S);
+ T=cons((L[2]+L[3])/2,T);
+ S=cons((L[0]+L[1])/2,S);
+ T=cons((L[1]+2*L[2]+L[3])/4,T);
+ S=cons(L[0],S);
+ T=cons((L[0]+3*L[1]+3*L[2]+L[3])/8,T);
+ return [S,T];
+ }
+ if(Div>2&&Div<257){
+ L=tobezier(L);
+ for(R=[],I=Div-1;I>=0;I--)
+ R=cons(tobezier(L|inv=[I/Div,(I+1)/Div]),R);
+ return R;
+ }
+ if((V=getopt(inv))==1 || type(V)>3){
+ if(type(L[0])>3 && type(V)>3) L=tobezier(L);
+ if(type(V)>3 && length(V)>2) V2=V[2];
+ if(type(V2)!=2) V2=t;
+ if(type(V)>3) L=subst(L,V2,(V[1]-V[0])*V2+V[0]);
+ N=mydeg(L,V2);
+ for(R=[],I=0;I<=N;I++){
+ RT=mycoef(L,I,V2);
+ R=cons(RT/binom(N,I),R);
+ L-=RT*V2^I*(1-V2)^(N-I);
+ }
+ return reverse(R);
+ };
+ N=length(L)-1;
+ V=newvect(2);
+ for(I=0;I<=N;I++,L=cdr(L)){
+ if(type(X=car(L))==4) X=ltov(X);
+ V+=X*binom(N,I)*t^I*(1-t)^(N-I);
+ }
+ return V;
+}
+
+def cutf(F,X,VV)
+{
+ if(type(car(V=VV))==2){
+ Y=[car(V),X];
+ V=cdr(V);
+ }else Y=X;
+ if(type(X)>1){
+ Y=(type(Y)==4)?Y[0]:x;
+ V1=makenewv(F);
+ if(X==Y||Y==x){
+ V2=makenewv([F,V1]);
+ F=mysubst(F,[Y,V2]);
+ V=cons(V2,V);
+ }
+ return [V1,[V1,os_md.cutf,[F],X,[V]]];
+ }
+ if(car(V)!=[] && X<car(V)[0]) return myfeval(car(V)[1],Y);
+ for(V=cdr(V); ;V=R){
+ if((R=cdr(V))==[]){
+ if(car(V)!=[] && car(V)[0]<X) return myfeval(car(V)[1],Y);
+ return myfeval(F,Y);
+ }
+ if(car(V)==[]||X>car(V)[0]) continue;
+ if(X==car(V)[0]) return car(V)[1];
+ return myfeval(F,Y);
+ }
+}
+
+def fsum(F,L)
+{
+ if(getopt(df)==1){
+ F=f2df(F);
+ }else Sub=getopt(subst);
+ if(type(L[0])==2){
+ X=L[0];
+ L=cdr(L);
+ }else X=0;
+ V=(length(L)>2)?L[2]:1;
+ for(R=0,I=L[0];;I+=V){
+ if(V==0||(I-L[1])*V>0) return R;
+ R+=(Sub==1)?subst(F,X?X:x,I):os_md.myfeval(F,X?[X,I]:I);
+ }
+}
+
+def periodicf(F,L,X)
+{
+ if(type(L)==4) L=[eval(L[0]),eval(L[1])];
+ else L=eval(L);
+ if(isvar(X)){
+ Y=makenewv([X,F]);
+ Z=makenewv([X,Y,F]);
+ return [Z,[Z,os_md.periodicf,[mysubst(F,[x,Y])],(type(L)==4)?[L]:L,[[Y,X]]]];
+ }
+ if(type(X)==4){
+ V=X[0];
+ X=X[1];
+ }else V=x;
+ if(type(F)==5){
+ X=eval(X);
+ return myfeval(F[floor(X/L)%length(F)],[V,X-floor(X/L)*L]);
+ }
+ if(type(L)==4){
+ X-=floor((X-L[0])/(L[1]-L[0]))*(L[1]-L[0]);
+ return myfeval(F,[V,X]);
+ }
+}
+
+def cmpf(X)
+{
+ if(type(X)>3){
+ if(type(L)==7) return [S_Fc,Dx,S_Ic,S_Ec,S_EC,S_Lc];
+ S_Lc=0;
+ if(type(S_Fc=X[0])!=4) S_Fc=f2df(S_Fc);
+ S_Ic=X[1];
+ if(length(S_Ic)>2){
+ S_Fc=mysubst(S_Fc,[S_Ic[0],x]);
+ S_Ic=cdr(S_Ic);
+ }
+ S_Dc=(type(S_Ic[0])==7)?1:0;
+ if(type(S_Ic[1])==7) S_Dc=ior(S_Dc,2);
+ if(type(S_Ec=getopt(exp))!=1) S_Ec=0;
+ if(S_Ec<=0){
+ S_EC=-S_Ec;
+ if(S_EC==0) S_EC=1;
+ if(S_Dc==3) S_EC*=2;
+ else S_EC/=4;
+ if(type(F=X[0])==3&&vars(F)==[x]&&(D=deg(nm(F),x))==deg(dn(F),x)-2){
+ S_Lc=S_EC*coef(nm(F),D,x)/coef(dn(F),D+2,x);
+ }
+ }else{
+ S_EC=S_Ec;
+ if(S_Dc==3) S_EC*=12;
+ else S_EC/=6;
+ }
+ if(type(S_Fc)==3) S_Fc=red(S_Fc);
+ S_EC=1/S_EC;
+ return [z_,[z_,os_md.cmpf,x]];
+ }
+ if(X<=0 && iand(S_Dc,1)) return S_Lc;
+ if(X>=1 && iand(S_Dc,2)) return S_Lc;
+ if(S_Dc==3){
+ if(S_Ec>0){
+ Y0=dexp(1/X)*S_EC;
+ Y1=dexp(1/(1-X))*S_EC;
+ return myfeval(S_Fc,Y1-Y0)*(Y0/X^2+Y1/(1-X)^2);
+ }
+ return myfeval(S_Fc,S_EC/(1-X)-S_EC/X)*(S_EC/(1-X)^2+S_EC/X^2);
+ }
+ if(S_Dc==1){
+ if(S_Ec>0){
+ Y=dexp(1-1/X);
+ R=myfeval(S_Fc,S_EC*(Y-1)+I[1])*Y;
+ }
+ else R=myfeval(S_Fc,I[1]+(1-1/X)*S_EC);
+ return R*S_EC/X^2;
+ }
+ if(S_Dc==2){
+ if(S_Ec>0){
+ Y=dexp(X/(1-X));
+ R=myfeval(S_Fc,S_EC*(Y-1)+S_Ic[0])*Y;
+ }else R=myfeval(S_Fc,S_EC*X/(1-X)+S_Ic[0]);
+ return R*S_EC/(1-X)^2;
+ }
+ X=S_Ic[0]+(S_Ic[1]-S_Ic[0])*X;
+ return myfeval(S_Fc,X)/(S_Ic[1]-Ic[0]);
+}
+
+def fresidue(P,Q)
+{
+ if(iscoef(Q,os_md.israt)) S=fctr(Q);
+ else S=[[Q,1]];
+ for(R=[];S!=[];S=cdr(S)){
+ T=car(S);
+ if((D=mydeg(T[0],z))==0) continue;
+ L=[];
+ if(iscoef(T[0],os_md.iscrat)) L=getroot(T[0],z|cpx=2);
+ if(findin(z,vars(L))>=0) L=[];
+ if(L==[]) L=polroots(T[0],z|comp=-1);
+ for(;L!=[];L=cdr(L)){
+ QQ=Q;
+ for(I=T[1]; I>1;I--) QQ=mydiff(QQ,z);
+ for(U=0,W=I=T[1];I>0;I--,W++){
+ QQ=diff(QQ,z);
+ U+=subst(QQ,z,L[0])*(z-L[0])^(W-T[1])/fac(W);
+ }
+ UD=mydiff(U,z);
+ for(I=T[1],K=1,PP=P; I>1;I--,K++)
+ PP=diff(PP,z)*U-K*PP*UD;
+ QQ=subst(PP,z,L[0])/subst(U,z,L[0])^K;
+/* if(D==2) QQ=sqrt2rat(QQ); */
+ R=cons([L[0],sqrt2rat(QQ)],R);
+ }
+ }
+ if(type(L=getopt(cond))==4){
+ for(S=[];R!=[];R=cdr(R)){
+ Z=car(R);
+ for(LL=L;LL!=[];LL=cdr(LL)){
+ X=real(car(Z));Y=imag(car(Z));
+ if(myf3eval(car(LL),X,Y,car(Z))<=0) break;
+ }
+ if(LL==[]) S=cons(Z,S);
+ }
+ R=reverse(S);
+ }
+ if((Sum=getopt(sum))==1||Sum==2){
+ for(S=0;R!=[];R=cdr(R)) S+=car(R)[1];
+ if(Sum==2) S*=2*@pi*@i;
+ return sqrt2rat(S);
+ }
+ return R;
+}
+
+def fint(F,D,V)
+{
+ if(((L=length(V))==2 || (L==3&&isvar(V[0])<3))
+ && (type(V[L-1])==7||(type(V[L-1])<3&&type(eval(V[L-1]))<2)))
+ /* real integral */
+ return areabezier([F,D,V]|option_list=getopt());
+ /* complex integral */
+ if(L>1&&type(V[1])==4&&type(V[1][1])<4){
+ if(type(V[0])==4&&type(V[0][0])<2){
+ for(R=[],VT=car(V),VV=cdr(V);VV!=[];VV=cdr(VV),VT=VU){
+ if((VU=car(VV))==-1) VU=car(V);
+ R=cons([ptcommon([VT,VU],[t,1-t]|in=1),[0,1]],R);
+ }
+ V=reverse(R);
+ }
+ else if(L==2) V=[V];
+ }
+ Opt=cons(["cpx",1],getopt());
+ for(R=0;V!=[];V=cdr(V)){
+ VT=car(V);
+ X=car(VT)[0];XD=red(diff(X,t));
+ Y=car(VT)[1];YD=red(diff(Y,t));
+ F=mysubst(F,[[x,X],[y,Y],[z,X+@i*Y]]);
+ if(type(F)==4)
+ FF=cons(F[0]*(XD+@i*YD),cdr(F));
+ else FF=red(F*(XD+@i*YD));
+ R+=areabezier([FF,D,cons(t,VT[1])]|option_list=Opt);
+ }
+ return R;
+}
+
+def areabezier(V)
+{
+ if(getopt(cpx)==1){
+ Opt=delopt(getopt(),"cpx");
+ F=V[0];
+ if(!isvar(Var=V[2][0])) Var=x;
+ if(type(F)==3 && vars(F)==[Var] && imag(dn(F))!=0){
+ F=(nm(F)*conj(dn(F)))/(dn(F)*conj(dn(F)));
+ V0=red(real(nm(F))/dn(F));
+ R=areabezier([V0,V[1],V[2]]|option_list=Opt);
+ V0=red(imag(nm(F))/dn(F));
+ return R+@i*areabezier([V0,V[1],V[2]]|option_list=Opt);
+ }
+ if(getopt(Acc)!=1) F=f2df(F);
+ V0=compdf([o,[o,real,o_]],o_,F);
+ R=areabezier([V0,V[1],V[2]]|option_list=Opt);
+ V0=compdf([o,[o,imag,o_]],o_,F);
+ return R+@i*areabezier([V0,V[1],V[2]]|option_list=Opt);
+ }
+ if(type(V[0])!=4 || vars(V[0][0])!=0){
+ Mx=[-2.0^(512),2.0^(512)];
+ I=length(V[2]);
+ if(type(V[2][I-1])==7||type(V[2][I-2])==7){ /* infinite interval */
+ if(type(Ec=getopt(exp))==1) R=cmpf([V[0],V[2]]|exp=Ec);
+ else R=cmpf([V[0],V[2]]);
+ V=[R,V[1],[0,1]];
+ }
+ if(type((Int=getopt(int)))==1 && type(V[0])<4 && (V1=V[1])>=0){
+ if(Int==2&&iand(V1,1)) V1++;
+ if(!V1) V1=32;
+ Opt=cons(["raw",1],getopt());
+ W=xygraph(V[0],V[1],V[2],Mx,Mx|option_list=Opt);
+ SS=W[0][1];
+ for(S0=S1=0,I=0,L=W;L!=[] && I<=V1;I++, L=cdr(L)){
+ if(iand(I,1)) S1+=car(L)[1];
+ else S0+=car(L)[1];
+ if (I==V1) SS+=car(L)[1];
+ }
+ VV=deval(V[2][1]-V[2][0]);
+ if(Int==2)
+ return (2*S0+4*S1-SS)*VV/(3*V1);
+ else
+ return (2*S0+2*S1-SS)*VV/(2*V1);
+ }
+ Opt=cons(["opt",0],getopt());
+ V=xygraph(V[0],V[1],V[2],Mx,Mx|option_list=Opt);
+ }
+ if(type(V[0][0])!=4) V=os_md.lbezier(V);
+ for(S=0; V!=[]; V=cdr(V)){
+ B=tobezier(car(V));
+ P=intpoly(B[1]*diff(B[0],t),t);
+ S+=mysubst(P,[t,1]);
+ }
+ return S;
+}
+
+def velbezier(V,L)
+{
+ if(L==0) L=[t,0,1];
+ else L=[(length(L)==3)?L[2]:t,L[0],L[1]];
+ for(R=[],II=length(V)-1;II>=0;II--){
+ S=fmmx(diff(V[II],L[0]|dif=1),L|dif=1);
+ for(U=0;S!=[];S=cdr(S)) if((T=abs(car(S)[1]))>U) U=T;
+ R=cons(U,R);
+ }
+ return R;
+}
+
+def ptbezier(V,L)
+{
+ if(type(V[0])==4&&type(V[0][0])!=4) V=lbezier(V);
+ K=length(V);
+ if(type(L)<2){
+ if(L<0) return K;
+ if(L>=K-1) L=[K-1,1];
+ else{
+ L0=floor(L);
+ if(L0>=K-1) L0=K-1;
+ L=[L0,L-L0];
+ }
+ }
+ if(L[0]>=0) B=V[L[0]];
+ else B=V[K+L[0]];
+ B=tobezier(B);
+ BB=[diff(B[0],t),diff(B[1],t)];
+ return [subst(B,t,L[1]),subst(BB,t,L[1])];
+}
+
+def ptcombezier(P,Q,T)
+{
+ if(type(T)<2){
+ if(T<2) T=20; /* default */
+ return ptcombezier(P,Q,[0,0,1,T]);
+ }
+ V=T[2]/2;;
+ PB=tobezier(P|div=1);
+ PP=[ptbbox(PB[0]),ptbbox(PB[1])];
+ QB=tobezier(Q|div=1);
+ QQ=[ptbbox(QB[0]),ptbbox(QB[1])];
+ for(L=[],I=0;I<2;I++){
+ for(J=0;J<2;J++){
+ if(!iscombox(PP[I],QQ[J])) continue;
+ if(T[3]<=1) return
+ [[T[0]+(I+0.5)*V,T[1]+(J+0.5)*V,
+ [(PP[I][0][0]+PP[I][0][1])/2,(PP[I][1][0]+PP[I][1][1])/2]]];
+ else{
+#if 0
+ U=PB[I][0];V=PB[I][length(PB[I])-1];
+ if(abs(A=(U[0]-V[0]))>abs(B=(U[1]-V[I])))
+ M=mat([1,0],[-B/A,1]);
+ else if(U!=V)
+ M=mat([1,-A/B],[0,1]);
+ else continue;
+ if(!iscombox(ptbox(ptaffine(M,PB[I])),ptbox(ptaffine(M,QB[J])))) continue;
+#endif
+
+ LN=ptcombezier(PB[I],QB[J],[T[0]+I*V,T[1]+J*V,V,T[3]-1]);
+#if 0
+ L=append(LN,L);
+#else
+ if(LN!=[]){
+ if(L==[]) L=LN;
+ else for(VV=3*V/2^T[3];LN!=[];LN=cdr(LN)){
+ for(LT=L;LT!=[];LT=cdr(LT)){
+ if(abs(car(LN)[0]-car(LT)[0])<VV&&abs(car(LN)[1]-car(LT)[1])<VV) break;
+ }
+ }
+ }
+ if(length(L)>32){ /* Too many points */
+ I=J=2;
+ }
+#endif
+ }
+ }
+ }
+ return L;
+}
+
+
+def ptcombz(P,Q,T)
+{
+ if(P==Q) Q=0;
+ if(type(P[0][0])!=4) P=P0=lbezier(P);
+ if(Q==0){
+ Q=P;F=1;
+ }
+ else if(type(Q[0][0])!=4) Q=lbezier(Q);
+ for(R=[],I=0,Q0=Q;P!=[];P=cdr(P),I++){
+ for(J=0,Q=Q0;Q!=[];Q=cdr(Q),J++){
+ if(F==1&&I<J+2) break;
+ if((RT=ptcombezier(car(P),car(Q),T))!=[]){
+ RT=cons([I,J],RT);
+ R=cons(RT,R);
+ }
+ }
+ }
+ if((Red=getopt(red))==1||Red==2){
+ if(type(M=getopt(prec))!=1) M=12;
+ for(F=0,T=P0;T!=[];T=cdr(T)){
+ for(S=car(T);S!=[];S=cdr(S)){
+ if(type(ST=car(S))==4 && type(ST[0])<2){
+ if(F++==0){
+ X0=X1=ST[0];Y0=Y1=ST[1];
+ }else{
+ if(ST[0]<X0) X0=ST[0];
+ if(ST[0]>X1) X1=ST[0];
+ if(ST[1]<Y0) Y0=ST[1];
+ if(ST[1]>Y1) Y1=ST[1];
+ }
+ }
+ }
+ }
+ V0=(X1-X0)/2^M;V1=(Y1-Y2)/2^M;
+ for(RR=[],RT=R;RT!=[];RT=cdr(RT))
+ for(S=cdr(car(RT));S!=[];S=cdr(S)) RR=cons(car(S)[2],RR);
+ RR=ltov(RR);L=length(RR);
+ for(I=0;I<L;I++)
+ for(K=1,J=I+1;K!=0&&J<L;J++)
+ if(abs(RR[I][0]-RR[J][0])<V0 && abs(RR[I][1]-RR[J][1])<V1) RR[I]=K=0;
+ R0=[];
+ I=L-1;
+ if(Red==2){
+ for(;I>=0;I--) if(RR[I]!=0) R0=cons(RR[I],R0);
+ }else{
+ for(RT=R;RT!=[];RT=cdr(RT)){
+ R00=[car(RT)[0]];
+ for(S=cdr(car(RT));S!=[];S=cdr(S),I--)
+ if(RR[L-I-1]!=0) R00=cons(car(S),R00);
+ if(length(R00)>1) R0=cons(reverse(R00),R0);
+ }
+ }
+ return R0;
+ }
+ return reverse(R);
+}
+
+def draw_bezier(ID,IDX,B)
+{
+ if(getopt(init)==1){
+ S_FDot=0;
+ return;
+ }
+ if(type(Col=getopt(col))!=1&&Col!=0) Col=0;
+ Dot=0;
+ if(type(Opt=getopt(opt))==7){
+ if(!Col){
+ Col=drawopt(Opt,0);
+ if(Col==-1) Col=0;
+ }
+ T=drawopt(Opt,3);
+ if(iand(T,2)){
+ M=iand(T,1)?1/8:1/4;
+ for(C=Col,Col=I=0;I<20;I+=8)
+ Col+=ishift(0xff-(floor((0xff-iand(0xff,ishift(C,I)))*M)),-I);
+ }
+ if(iand(T,4)) Dot=2; /* 2 or 3 or 4 or 6 */
+ else if(iand(T,8)) Dot=4;
+ }
+ if(type(B)==4 && (type(B[0])==4||type(B[0])==5) && type(B[0][0])<2) B=lbezier(B);
+ else if(type(B)==5) B=[vtol(B)];
+ for(;B!=[];B=cdr(B)){
+ if(vars(F=car(B))==[]){
+#if 1
+ if(length(F)<3&&!Dot){ /* line or point */
+ if(length(F)>0){
+ G=[rint(F[0][0]),rint(F[0][1])];
+ if(length(F)==1) draw_obj(ID,IDX,G,Col);
+ else{
+ G=[G[0],G[1],rint(F[1][0]),rint(F[1][1])];
+ draw_obj(ID,IDX,G,Col);
+ }
+ }
+ continue;
+ }
+#endif
+ if(length(F)<2) continue;
+ F=tobezier(F);
+ }
+ N=velbezier(F,0);
+ N=(N[0]>N[1])?N[0]:N[1];
+ if(!N) N=1;
+ for(I=0;I<=N;I++,S_FDot++){
+ if(Dot!=iand(S_FDot,Dot)) continue;
+ G=subst(F,t,I/N);
+ G=[rint(G[0]),rint(G[1])];
+ if(G!=G0){
+ draw_obj(ID,IDX,G,Col);
+ G0=G;
+ }
+ }
+ }
+ if(S_FDot-->=2^32) S_FDot=0;
+ return 0;
+}
+
+def lbezier(L)
+{
+ if((In=getopt(inv))==1||In==2||In==3){
+ for(F=0,R=[];L!=[];L=cdr(L)){
+ LT=car(L);
+ if(F==car(LT)) R=cons(1,R);
+ else{
+ if(R!=[]&&F!=0) R=cons(0,R);
+ R=cons(G=car(LT),R);
+ if(In==3) In==2;
+ }
+ for(LT=cdr(LT);LT!=[];LT=cdr(LT))
+ R=cons(car(LT),R);
+ if((F=car(R))==G&&In==1){
+ R=cons(-1,cdr(R));
+ F=0;
+ }
+ }
+ if(In==3 && car(R)==G) R=cons(-1,cdr(R));
+ return reverse(R);
+ }
+ for(F=0,RT=R=[];L!=[];L=cdr(L)){
+ if(type(T=car(L))==4||type(T)==5){
+ if(F==0){
+ FT=T;F=1;
+ }
+ RT=cons(T,RT);
+ }else if(T==0){
+ if(RT==[]) R=cons(reverse(RT),R);
+ RT=[];F=0;
+ }else if(T==1){
+ if(RT!=[]){
+ R=cons(reverse(RT),R);
+ RT=[car(RT)];
+ }else{
+ RT=[];F=0;
+ }
+ }else if(T==-1){
+ RT=cons(FT,RT);
+ R=cons(reverse(RT),R);
+ RT=[];F=0;
+ }
+ }
+ if(RT!=[]) R=cons(reverse(RT),R);
+ return reverse(R);
+}
+
+
+def xybezier(L)
+{
+ if(L==0 || (LS=length(L))==0) return "";
+ Out=str_tb(0,0);
+ if(type(VF=getopt(verb))==4){
+ if(type(car(VF))>3){
+ VFS=VF;VF=1;
+ }else{
+ VFS=cdr(VF);VF=car(VF);
+ }
+ }else VFS=["$\\bullet$","$\\times$"];
+ if(VF!=1 && VF!=2) VF=0;
+ if(!TikZ){
+ if(VF) Ob=str_tb(0,0);
+ T="\n**\\crv{";
+ if(type(Opt=getopt(opt))==7 && Opt!="") T=T+Opt;
+ L00=Q=L[I0=0];S=S1="";
+ for(F=0,I=1;I<=LS;I++){
+ P=Q;Q=(I==LS)?0:L[I];
+ if(type(Q)==4){
+ if(F==0){
+ S1="";L0=P;F=1;
+ continue;
+ }else if(F==1)
+ F=2;
+ else if(F==2){
+ S1=S1+"&";
+ }
+ S1=S1+xypos(P);
+ if(VF&&length(VFS)>1) str_tb(xyput([P[0],P[1],VFS[1]]),Ob);
+ }else{
+ if(Q==0){
+ if(F>0){
+ str_tb("{"+xypos(L0)+";"+xypos(P)+T+S1+"}};\n",Out);
+ if(VF){
+ str_tb(xyput([L[0][0],L[0][1],VFS[0]]),Ob);
+ if(VF==1) str_tb(xyput([P[0],P[1],VFS[0]]),Ob);
+ }
+ F=0;
+ }
+ }else if(Q==1){
+ str_tb("{"+xypos(L0)+";"+xypos(P)+T+S1+"}};\n",Out);
+ if(VF){
+ str_tb(xyput([L[0][0],L[0][1],VFS[0]]),Ob);
+ if(VF==1) str_tb(xyput([P[0],P[1],VFS[0]]),Ob);
+ }
+ F=1;
+ }else if(Q==-1){
+ if(F==2)
+ S1=S1+"&";
+ str_tb("{"+xypos(L0)+";"+xypos(L00)+T+S1+xypos(P)+"}};\n",Out);
+ if(VF) str_tb(xyput([L[0][0],L[0][1],VFS[0]]),Ob);
+ F=0;
+ }
+ if(F==1){
+ if(I<LS-1 && type(L[I+1])<2){
+ if(L[I+1]==-1){
+ str_tb("{"+xypos(P)+";"+xypos(L00)+T+"}};\n",Out);
+ }
+ if(VF) str_tb(xyput([P[0][0],P[0][1],VFS[0]]),Ob);
+ F=0;
+ }
+ }
+ while(++I<LS && type(L[I])<2);
+ if(I>=LS) break;
+ if(F==1){
+ Q=P;I--;F=0;
+ }else L00=Q=L[I];
+ }
+ }
+ }else{
+ if(type(T=getopt(cmd))==7){
+ if(T!="") T="\\"+T;
+ }else T="\\draw";
+ if((Rel=getopt(relative))==1) VF=0;
+ if(VF) Ob=str_tb(0,0);
+ if(type(Opt=getopt(opt))==7 && Opt!="") T=T+"["+Opt+"]";
+ Out=str_tb(T,0);
+ Q=L[0];
+ for(F=M=0,I=1;I<=LS;I++){
+ P=Q; Q=(I==LS)?0:L[I];
+ if(++M>XYLim){
+ str_tb("\n",Out);M=1;
+ }
+ if(type(Q)==4 || type(Q)==5 || type(Q)==7){
+ if(F==0){
+ str_tb(" ",Out);
+ F=1;
+ }else if(F==1){
+ str_tb(" .. controls ",Out);
+ F=2;
+ }else if(F==2){
+ str_tb(" and ",Out);
+ F=2;
+ }
+ PP=xypos(P);
+ if(Rel==1 && F==2) PP="+"+PP;
+ str_tb(PP,Out);
+ if(VF&&((F<2)||length(VFS)>1))
+ str_tb(xyput([P[0],P[1],(F<2)?VFS[0]:VFS[1]]),Ob);
+ }else{
+/* if(I<LS-1) VF=0; */
+ if(Q==0||Q==1){
+ PP=xypos(P);
+ if(Rel==1) PP="+"+PP;
+ str_tb(((F==0)?" ":((F==1)?" -- ":" .. "))+PP,Out);
+ if(VF) str_tb(xyput([P[0],P[1],VFS[0]]),Ob);
+ F=Q;
+ }else if(Q==-1){
+ PP=xypos(P);
+ if(Rel==1) PP="+"+PP;
+ if(F==1)
+ str_tb("..controls "+PP+" .. cycle",Out);
+ else if(F==2)
+ str_tb(" and "+PP+" .. cycle",Out);
+ if(VF&&length(VFS)>1) str_tb(xyput([P[0],P[1],VFS[1]]),Ob);
+ F=0;
+ }
+ if(F==1){
+ if(I<LS-1){
+ if(L[I+1]==-1){
+ str_tb(" -- cycle",Out);
+ I=I+1;
+ F=0;
+ }
+ else if(type(L[I+1])<2) F=0;
+ }
+ }
+ while(++I<LS && type(L[I])<2);
+ if(I>=LS) break;
+ Q=L[I];
+ }
+ }
+ str_tb(";\n",Out);
+ }
+ if(VF) str_tb(str_tb(0,Ob),Out);
+ return str_tb(0,Out);
+}
+
+def xybox(L)
+{
+ K=length(L);
+ P=L[0];Q=L[1];
+ if(K==2)
+ LL=[ P, [P[0],Q[1]], Q, [Q[0],P[1]] ];
+ else{
+ R=L[2];
+ LL=[ P, R, Q, [P[0]+Q[0]-R[0],P[1]+Q[1]-R[1]] ];
+ }
+ Opt=getopt();
+ SS=getopt(opt);
+ FL=getopt(color);
+ if(TikZ&&type(SS)<1&&K==2){
+ if(type(FL)==4){
+ F=FL[0];
+ if(length(FL)>1) CMD=FL[1];
+ }else if(type(FL)==7) F=FL;
+ else F="";
+ F=cons(F,["rectangle"]);
+ if(CMD) return xyarrow(P,Q|opt=F,cmd=CMD);
+ else return xyarrow(P,Q|opt=F);
+ }
+ if(type(SS)!=7&&!TikZ) Opt=cons(["opt","@{-}"],Opt);
+ Opt=cons(["close",1],Opt);
+ return xylines(LL|option_list=Opt);
+}
+
+def xyang(S,P,Q,R)
+{
+ Opt=getopt();
+ if(type(Prec=getopt(prec))!=1) Prec=0;
+ if(type(Q)>2){
+ if(R==1||R==-1){ /* p */
+ P1=ptcommon([Q,P],[-S,0]);
+ S*=R;
+ P2=ptcommon([P,P1],[S,@pi/2]);
+ P3=ptcommon([P1,P2],[S,@pi/2]);
+ return xylines([P1,P2,P3]|option_list=Opt);
+ }else if((AR=abs(R))==0||AR==2||AR==3||AR==4){ /* */
+ Ang=myarg([Q[0]-P[0],Q[1]-P[1]]);
+ if(R<0) Ang+=3.14159;
+ ANG=[0.7854,0.5236,1.0472];
+ X=(AR==0)?1.5708:ANG[AR-2];
+ U=[P[0]+S*dcos(Ang+X),P[1]+S*dsin(Ang+X)];
+ V=[P[0]+S*dcos(Ang-X),P[1]+S*dsin(Ang-X)]; /* */
+ V=(X==0)?[U,V]:[U,P,V];
+ if(getopt(ar)==1) V=append([Q,P,0],V); /* S_ */
+ return xylines(V|option_list=Opt);
+ }else if(AR>4&&AR<9){
+ Ang=myarg([Q[0]-P[0],Q[1]-P[1]]);
+ ANG=[0.7854,0.5236,0.3927,0.2618];
+ X=ANG[AR-5];
+ U=[P[0]+S*dcos(Ang+X),P[1]+S*dsin(Ang+X)];
+ V=[P[0]+S*dcos(Ang-X),P[1]+S*dsin(Ang-X)];
+ W=ptcommon([P,U],[P,Q]|in=-2);
+ W1=[(U[0]+P[0]+W[0])/3,(U[1]+P[1]+W[1])/3];
+ W2=[(V[0]+P[0]+W[0])/3,(V[1]+P[1]+W[1])/3];
+ L=[U,W1,P,1,W2,V];
+ if(getopt(ar)==1) L=append([Q,P,0],L);
+ if(type(Sc=getopt(scale))>0){
+ if(type(Sc)==1) Sc=[Sc,Sc];
+ L=ptaffine(diagm(2,Sc),L);
+ }
+ Opt=getopt(opt);
+ if(type(Opt)>0) OL=[["opt",Opt]];
+ else OL=[];
+ if(getopt(proc)==1) return append([2,OL],L);
+ S=xybezier(L|optilon_list=OL);
+ if(getopt(dviout)!=1) return S;
+ dviout(S);
+ return 1;
+ }
+ }
+ if(type(Q)<3){
+ X=deval(Q); Y=deval(R);
+ }else{
+ X=myarg([Q[0]-P[0],Q[1]-P[1]]);
+ Y=myarg([R[0]-P[0],R[1]-P[1]]);
+ }
+ if(Prec>2) N=8;
+ else if(Prec==2) N=6;
+ else if(Prec==1) N=4;
+ else N=3;
+ U=deval(@pi)*2/N;
+ if(X==Y||Y-X>6.28318){
+ for(L=[],I=N-1;I>=0;I--) L=cons([P[0]+S*dcos(I*U),P[1]+S*dsin(I*U)],L);
+ return xylines(L|option_list=append([["curve",1],["close",1]],Opt));
+ }
+ for(M=1;(Y-X)/M>U;M++);
+ for(L=[],I=M+1;I>-2;I--){
+ Ang=X+(Y-X)*I/M;
+ L=cons([P[0]+S*dcos(Ang),P[1]+S*dsin(Ang)],L);
+ }
+ if(getopt(ar)!=1) return xylines(L|option_list=append([["curve",1],["close",-1]],Opt));
+ OL=delopt(Opt,["dviout","opt","proc"]);
+ S=xylines(L|option_list=append([["curve",1],["close",-1],["opt",0]],OL));
+ T=xylines([P,L[1]]|option_list=cons(["opt",0],OL));
+ S=ptaffine("close",[S,T]); /* connect curves */
+ if(getopt(opt)==0) return S;
+ OL=(type(SS=getopt(opt))>1)?[["opt",SS]]:[];
+ if(type(T=getopt(proc))==1 && T>=1 && T<=3) return [1,OL,S];
+ if(OL==[]) S=xybezier(S);
+ else S=(type(SS)==7)? xybezier(S|opt=SS):xybezier(S|opt=SS[0],cmd=SS[1]);
+ if(getopt(dviout)==1) return xyproc(S|dviout=1);
+ return S;
+}
+
+def xyoval(P,L,R)
+{
+ if(type(Arg=getopt(arg))!=4 && type(Arg=getopt(deg))==4){
+ if(length(Arg)>2)
+ Arg=[@pi*Arg[0]/180,@pi*Arg[1]/180,@pi*Arg[2]/180];
+ else
+ Arg=[@pi*Arg[0]/180,@pi*Arg[1]/180];
+ }
+ if(type(Arg)==4){
+ Arg0=deval(Arg[0]); Arg1=deval(Arg[1]);
+ if(length(Arg)>2) Arg2=deval(Arg[2]);
+ if(Arg1<Arg0 || Arg0<-7) return 0;
+ }
+ if(type(Prec=getopt(prec))!=0) Prec=0;
+ if((Ar=getopt(ar))!=1) Ar=0;
+ L=xyang(L,[0,0],Arg0,Arg1|prec=Prec,opt=0,ar=Ar);
+ Sc=getopt(scale);
+ if(type(Sc=getopt(scale))<1) Sc=[1,1];
+ else if(type(Sc)==1) Sc=[Sc,Sc];
+ M=mat([1,0],[0,R]);
+ L=ptaffine(M,L|shift=P);
+ M=mat([Sc[0],0],[0,Sc[1]]);
+ L=ptaffine(M,L|arg=Arg2);
+ if((Opt=getopt(opt))==0) return L;
+ Opt=(type(Opt)>1)? [["opt2",Opt]]:[];
+ if(getopt(proc)==1) return [1,Opt,L];
+ S=xybezier(L|option_list=getopt());
+ if(getopt(dviout)==1){
+ xyproc(S|dviout=1);
+ return 1;
+ }
+ return S;
+}
+
+def xycirc(P,R)
+{
+ ST=getopt(opt);
+ if(type(ST)<0) ST="";
+ if(type(Arg=getopt(arg))!=4 && type(Arg=getopt(deg))==4){
+ Arg=[@pi*Arg[0]/180,@pi*Arg[1]/180];
+ }
+/* Is it OK?
+ if(TikZ==0 && XYcm==1){
+ R*=10; P=[P[0]*10,P[1]*10];
+ }
+*/
+ if(type(Arg)==4){
+ Arg0=deval(Arg[0]); Arg1=deval(Arg[1]);
+ if(Arg1<=Arg0 || Arg0<-7 || Arg1-Arg0>7) return 0;
+ if(type(ST)==7)
+ S=xygraph([R*cos(x)+P[0],R*sin(x)+P[1]],-4,[Arg0,Arg1],[P[0]-R-1,P[0]+R+1],
+ [P[1]-R-1,P[1]+R+1]|opt=ST);
+ else
+ S=xygraph([R*cos(x)+P[0],R*sin(x)+P[1]],-4,[Arg0,Arg1],[P[0]-R-1,P[0]+R+1],
+ [P[1]-R-1,P[1]+R+1]);
+ if(getopt(close)==1){
+ S=S+xyline([0,0],
+ [deval(subst(R*cos(x)+P[0],x,Arg0)),deval(subst(R*sin(x)+P[0],x,Arg0))]);
+ S=S+xyline([0,0],
+ [deval(subst(R*cos(x)+P[0],x,Arg1)),deval(subst(R*sin(x)+P[0],x,Arg1))]);
+ }
+ return S;
+ }
+ if(TikZ){
+ SP="";
+ if(length(P)>2) SP=P[2];
+ if(type(SP)!=7) SP="$"+my_tex_form(SP)+"$";
+ if(R==0){
+ if(ST!="") ST=ST+",";
+ return "\\node ["+ST+"circle,draw]"+xypos([P[0],P[1]])+ "{"+SP+"};\n";
+ }
+ if(type(R)!=7) R=rtostr(deval(R));
+ if(ST!="") ST="["+ST+"]";
+ S="\\draw "+ST+xypos([P[0],P[1]])+" circle [radius="+R+"]";
+ if(SP!="") S=S+" node at"+xypos([P[0],P[1]])+" {"+SP+"}";
+ return S+";\n";
+ }
+ S="{"+xypos([P[0],P[1]]);
+ if(length(P)>2){
+ SP=P[2];
+ if(type(P)!=7) SP=my_tex_form(SP);
+ S=S+" *+{"+SP+"}";
+ }
+ S =S+" *\\cir";
+ if(R!=0){
+ R=deval(R);
+ S=S+"<"+rtostr(R)+((XYcm)?"cm>":"mm>");
+ }
+ S = S+"{";
+ if(type(ST)==7) S=S+ST;
+ return S+"}};\n";
+}
+
+def ptaffine(M,L)
+{
+ if(type(L)!=4&&type(L)!=5){
+ erno(0);return L;
+ }
+ if(type(M)==7){ /* connect lists */
+ if(M=="reverse"){
+ for(LO=LR=[],F=0,LT=L; LT!=[]; LT=cdr(LT)){
+ if(type(P=car(LT))==4 || type(P)==7){
+ LR=cons(P,LR);
+ continue;
+ }else{
+ if(P==-1){
+ LL=reverse(LR);
+ LO=append(reverse(cons(-1,cdr(LL))),LO);
+ LO=cons(car(LL),LO);
+ LR=[];
+ }else if(P==1){
+ LR=cons(car(LR),cons(1,cdr(LR)));
+ }else if(P==0 || length(LT)==1){
+ if(LO!=[] && car(LO)!=0 && (type(car(LO))==4 || car(LO)==1))
+ LO=cons(0,LO);
+ LO=append(LR,LO);
+ if(length(LT)>1&&length(LO)>0&&car(LO)!=0) LO=cons(0,LO);
+ LR=[];
+ }
+ }
+ }
+ return append(LR,LO);
+ }
+ if(type(L[0][0])!=4) L=[L];
+ LO=[];
+ if(M=="connect" || M=="close" || M=="loop"){
+ Top=car(car(L));
+ for(K=1,LL=L; LL!=[]; LL=cdr(LL)){
+ for(F=0,LT=car(LL); LT!=[]; LT=cdr(LT),F++){
+ if((LTT=car(LT))==0) LTT=1;
+ if(F==0 && LO!=[]){
+ LO0=car(LO);
+ if(car(LO)!=1&&length(LO)>1) LO=cons(1,LO);
+ if(LTT==LO0) continue;
+ else LO=cons(1,cons(LTT, LO));
+ }else LO=cons(LTT, LO);
+ }
+ }
+ if(M!="connect"){
+ if(Top==car(LO) || car(LO)==1 || M=="loop")
+ LO=cons(-1,cdr(LO));
+ else
+ LO=cons(-1,cons(1,LO));
+ }
+ return reverse(LO);
+ }
+ if(M=="union"){
+ for(LL=reverse(L); LL!=[]; LL=cdr(LL)){
+ if(LO!=[]) LO=cons(0,LO);
+ LO=append(car(LL),LO);
+ }
+ L=LO;
+ }
+ return L;
+ }
+ if(type(Arg=getopt(deg))==1)
+ Arg=@pi*Arg/180;
+ else Arg=getopt(arg);
+ if(type(Arg)==2) Arg=deval(Arg);
+ if(type(Arg)==1)
+ M=M*mat([dcos(Arg),-dsin(Arg)],[dsin(Arg),dcos(Arg)]);
+ if(type(Sft=getopt(org))==4){
+ Sft=ltov(Sft);
+ Sft-=M*Sft;
+ }else Sft=ltov([0,0]);
+ if(type(V=getopt(shift))==4)
+ Sft+=ltov(V);
+ if(getopt(proc)==1){
+ if(Sft!=0&&ltov(Sft)!=[0,0]) Sft=[["shift",vtol(Sft)]];
+ else Sft=[];
+ for(LO=[],LT=L;LT!=[];LT=cdr(LT)){
+ if(type(car(T=car(LT)))<2){
+ if((P=car(T))==0){ /* exedraw 0 */
+ V=[[T[1][0],T[2][0]],[T[1][0],T[2][1]],[T[1][1],T[2][0]],[T[1][1],T[2][1]]];
+ V=ptbbox(ptaffine(M,V|option_list=Sft));
+ L1=cdr(cdr(cdr(T)));
+ LO=cons(append([0,V[0],V[1]],L1),LO);
+ continue;
+ }else if(P==1){ /* exedraw 1 */
+ L1=[];
+ for(TT=cdr(cdr(T));TT!=[];TT=cdr(TT)){
+ D=car(TT);
+ if(type(D[0][0])==4){
+ for(L2=[],DT=D;DT!=[];DT=cdr(DT))
+ L2=cons(ptaffine(M,car(DT)|option_list=Sft),L2);
+ L1=cons(reverse(L2),L1);
+ }else L1=cons(ptaffine(M,D|option_list=Sft),L1);
+ }
+ LO=cons(append([1,T[1]],reverse(L1)),LO);
+ continue;
+ }else if(P>=2 && P<=5){
+ L1=ptaffine(M,cdr(cdr(T))|optilon_list=Sft);
+ LO=cons(append([P,T[1]],L1),LO);
+ continue;
+ }
+ }
+ LO=cons(T,LO);
+ }
+ return reverse(LO);
+ }
+ F=0;
+ if(type(L)==4){
+ for(LT=L; LT!=[]; LT=cdr(LT)){
+ if((T=type(car(LT)))==4||T==5){
+ F=1; break;
+ }
+ }
+ }
+ if(F==0) return (Sft==0)?ptaffine(M,[L])[0]:ptaffine(M,[L]|shift=vtol(Sft))[0];
+ for(LO=[],LT=L; LT!=[]; LT=cdr(LT)){
+ if(((T=type(P=car(LT)))!=4 && T!=5)||type(P[0])>3) LO=cons(P,LO);
+ else{
+ if(T==4) P=ltov(P);
+ V=M*P;
+ if(Sft!=0) V+=Sft;
+ if(T==4) V=vtol(V);
+ LO=cons(V,LO);
+ }
+ }
+ return reverse(LO);
+}
+
+def ptlattice(M,N,X,Y)
+{
+ if(type(S=getopt(scale))!=1) S=1;
+ if(type(Cond=getopt(cond))!=4) Cond=[];
+ Line=getopt(line);
+ if(Line==1 || Line==2) F=newmat(M,N);
+ else Line=0;
+ if(type(Org=getopt(org))==4) Org=ltov(Org);
+ else Org=newvect(length(X));
+ X=ltov(X); Y=ltov(Y);
+ for(L=[],I=M-1;I>=0;I--){
+ for(P0=P1=0,J=N-1;J>=0;J--){
+ P=Org+I*X+J*Y;
+ for(C=Cond; C!=[]; C=cdr(C))
+ if(subst(car(C),x,P[0],y,P[1])<0) break;
+ if(C!=[]) continue;
+ if(Line) F[I][J]=1;
+ else L=cons(vtol(S*P),L);
+ }
+ }
+ if(Line==0) return L;
+ for(I=M-1;I>=0;I--){
+ for(T0=0,T1=J=N-1;J>=0;J--){
+ if((K=F[I][J])!=0){
+ if(T0==0) T0=J;
+ else T1=J;
+ }
+ if(K==0 || T1==0){
+ if(T1<T0){
+ L=cons(vtol(S*(Org+I*X+T0*Y)), L);
+ L=cons(vtol(S*(Org+I*X+T1*Y)), L);
+ L=cons(0,L);
+ }
+ T0=0; T1=N-1;
+ }
+ }
+ }
+ for(J=N-1;J>=0;J--){
+ for(T0=0,T1=I=M-1;I>=0;I--){
+ if((K=F[I][J])!=0){
+ if(T0==0) T0=I;
+ else T1=I;
+ }
+ if(K==0 || T1==0){
+ if(T1<T0){
+ L=cons(vtol(S*(Org+T0*X+J*Y)), L);
+ L=cons(vtol(S*(Org+T1*X+J*Y)), L);
+ L=cons(0,L);
+ }
+ T0=0; T1=M-1;
+ }
+ }
+ }
+ return cdr(L);
+}
+
+def ptpolygon(N,R)
+{
+ if(type(S=getopt(scale))!=1) S=1;
+ if(type(Org=getopt(org))!=4) Org=[0,0];
+ Pi=deval(@pi);
+ if(type(Arg=getopt(deg))==1)
+ Arg=Pi*Arg/180;
+ else Arg=getopt(arg);
+ if(type(Arg)==2) Arg=deval(Arg);
+ if(type(Arg)!=1) Arg=0;
+ Arg -= Pi*(1/2+1/N);
+ D=Pi*2/N;
+ for(L=[],I=N-1; I>=0; I--)
+ L=cons([S*(Org[0]+R*dcos(Arg+I*D)),S*(Org[1]+R*dsin(Arg+I*D))],L);
+ return L;
+}
+
+def ptwindow(L,X,Y)
+{
+ if(type(S=getopt(scale))==1){
+ X=[S*X[0],S*X[1]]; Y=[S*Y[0],S*Y[1]];
+ }
+ for(R=[],LT=L;LT!=[];LT=cdr(LT)){
+ P=car(LT);
+ if(P[0]<X[0] || P[0]>X[1] || P[1]<Y[0] || P[1]>Y[1])
+ R=cons(0,R);
+ else R=cons(P,R);
+ }
+ return reverse(R);
+}
+
+def lninbox(L,W)
+{
+ if(L[0]==L[1]) return 0;
+ R=newvect(2);C=newvect(2);
+ for(J=0;J<2;J++){
+ C[J]=L[1][J]-L[0][J];
+ if(C[J]!=0){
+ R[J]=[(W[J][0]-L[0][J])/C[J],(W[J][1]-L[0][J])/C[J]];
+ if(R[J][0]>R[J][1]) R[J]=[R[J][1],R[J][0]];
+ }
+ }
+ if(R[0]==0) R[0]=R[1];
+ if(R[1]==0) R[1]=R[0];
+ S0=(R[0][0]<R[1][0])?R[1][0]:R[0][0];
+ S1=(R[0][1]<R[1][1])?R[0][1]:R[1][1];
+ if(getopt(in)==1){
+ if(S0<0) S0=0;
+ if(S1>1) S1=1;
+ }
+ if(S0>S1) return 0;
+ return [[L[0][0]+C[0]*S0,L[0][1]+C[1]*S0],[L[0][0]+C[0]*S1,L[0][1]+C[1]*S1]];
+}
+
+def ptbbox(L)
+{
+ J=length(L[0]);
+ if((Box=getopt(box))==1){
+ for(R=[],I=0;I<J;I++){
+ P=car(LT=L)[I][0];Q=car(LT)[I][1];
+ for(;LT!=[];LT=cdr(LT)){
+ if((type(T=car(LT))==4 || type(T)==5) && length(T)==J){
+ if(T[I][0]<P) P=T[I][0];
+ if(T[I][1]>Q) Q=T[I][1];
+ }
+ }
+ R=cons([P,Q],R);
+ }
+ }else if(type(Box)==4) return ptbbox([ptbbox(L),Box]|box=1);
+ else{
+ for(R=[],I=0;I<J;I++){
+ P=Q=car(LT=L)[I];LT=cdr(LT);
+ for(;LT!=[];LT=cdr(LT)){
+ if((type(T=car(LT))==4||type(T)==5) && type(T[0])<2 && length(T)==J){
+ if((V=T[I])<P) P=V;
+ else if(V>Q) Q=V;
+ }
+ }
+ R=cons([P,Q],R);
+ }
+ }
+ return reverse(R);
+}
+
+def iscombox(S,T)
+{
+ for(;S!=[];S=cdr(S),T=cdr(T))
+ if(car(S)[0]>car(T)[1] || car(S)[1]<car(T)[0]) return 0;
+ return 1;
+}
+
+def ptcopy(L,V)
+{
+ if(type(V[0])!=4) V=[V];
+ for(F=0,LL=[]; V!=[]; V=cdr(V)){
+ if(F) LL=append(LL,[0]);
+ F++;
+ LL=append(LL,ptaffine(1,L|shift=car(V)));
+ }
+}
+
+def average(L)
+{
+ L=os_md.m2l(L|flat=1);
+ M0=M1=car(L);
+ for(I=SS=0, LT=L; LT!=[]; LT=cdr(LT), I++){
+ S+=(V=car(LT));
+ SS+=V^2;
+ if(V<M0) M0=V;
+ else if(V>M1) M1=V;
+ }
+ SS=dsqrt(SS/I-S^2/I^2);
+ S=[deval(S/I),SS,I,M0,M1];
+ if(isint(N=getopt(sint))) S=sint(S,N);
+ return S;
+}
+
+def m2ll(M)
+{
+ for(R=[],I=size(M)[0]-1; I>=0; I--)
+ R=cons(vtol(M[I]),R);
+ return R;
+}
+
+def madjust(M,W)
+{
+ if(type(Null=getopt(null))<0) Null=0;
+ if(type(M)==4 && type(M[0])==4){
+ M=lv2m(M|null=Null);
+ return m2ll(madjust(M,W|null=Null));
+ }
+ S=size(M);
+ if(W<0){
+ W=-W;
+ T0=ceil(S[0]/W);
+ T1=S[1]*W;
+ N=newmat(T0,T1);
+ for(I=0; I<T0; I++){
+ for(K=0; K<W; K++){
+ II=K*T0+I;
+ for(J=0; J<S[1]; J++)
+ N[I][S[1]*K+J]=(II<S[0])?M[II][J]:Null;
+ }
+ }
+ }else{
+ T1=W;
+ T0=S[0]*(D=ceil(S[1]/T1));
+ N=newmat(T0,T1);
+ for(K=0; K<D; K++){
+ for(J=0; J<W;J++){
+ JJ=W*K+J;
+ for(I=0; I<S[0]; I++)
+ N[S[0]*K+I][J]=(JJ<S[1])?M[I][JJ]:Null;
+ }
+ }
+ }
+ return N;
+}
+
+def texcr(N)
+{
+ if(!isint(N) || N<0 || N>127) return N;
+ S=(iand(N,8))? "\\allowdisplaybreaks":"";
+ if(iand(N,2)) S=S+"\\\\";
+ if(iand(N,16)) S=S+"\\pause";
+ if(iand(N,1)) S=S+"\n";
+ if(iand(N,4)) S=S+"& ";
+ else if(!iand(N,1)) S=S+" ";
+ if(iand(N,64)) S=S+"=";
+ if(iand(N,32)) S=","+S;
+ return S;
+}
+
+def ltotex(L)
+{
+ /* extern TeXLim; */
+
+ if(type(L)==5)
+ L = vtol(L);
+ if(type(L) != 4)
+ return my_tex_form(L);
+ Opt=getopt(opt);
+ Pre=getopt(pre);
+ if(type(Var=getopt(var))<1) Var=0;
+ Cr2="\n";
+ if(type(Cr=getopt(cr))==4){
+ Cr2=Cr[1];Cr=Cr[0];
+ }
+ if(isint(Cr)) Cr=texcr(Cr);
+ if(type(Cr)!=7) Cr="\\\\\n & "; /* Cr=7 */
+ if(type(Opt)==7) Opt=[Opt];
+ if(type(Opt)!=4)
+ Op = -1;
+ else{
+ Op=findin(Opt[0],["spt","GRS","Pfaff","Fuchs","vect","cr","text","spts","spts0",
+ "dform","tab", "graph","coord"]);
+ Opt=cdr(Opt);
+ }
+ if(Op==0){ /* spt */
+ Out = str_tb("\\left\\{\n ",0);
+ for(CC=0; L!=[]; L=cdr(L), CC++){
+ if(CC>0) str_tb(",\\, ",Out);
+ TP=car(L);
+ if(Op!=0)
+ str_tb(my_tex_form(TP),Out);
+ else if(TP[0]==1)
+ str_tb(my_tex_form(TP[1]),Out);
+ else
+ str_tb(["[", my_tex_form(TP[1]), "]_", rtotex(TP[0])],Out);
+ }
+ str_tb("%\n\\right\\}\n",Out);
+ }else if(Op==1){ /* GRS */
+ Out = string_to_tb("\\begin{Bmatrix}\n");
+ if(type(Pre)==7) str_tb(Pre,Out);
+ MC=length(M=ltov(L));
+ for(ML=0, I=length(M); --I>=0; ){
+ if(length(M[I]) > ML) ML=length(M[I]);
+ }
+ for(I=0; I<ML; I++){
+ for(CC=J=0; J<MC; J++, CC++){
+ if(length(M[J]) <= I){
+ if(CC > 0) str_tb(" & ",Out);
+ }else if(M[J][I][0] <= 1){
+ if(M[J][I][0] == 0) str_tb(" & ",Out);
+ else
+ str_tb([(!CC)?" ":" & ", my_tex_form(M[J][I][1])], Out);
+ }else
+ str_tb([((!CC)?" [":" & ["), my_tex_form(M[J][I][1]), "]_",
+ rtotex(M[J][I][0])], Out);
+ }
+ str_tb((I<ML-1)?"\\\\\n":"\n", Out);
+ }
+ str_tb("\\end{Bmatrix}",Out);
+ }else if(Op==2){ /* Pfaff */
+ V=monototex(Opt[0]);
+ Out = string_to_tb("d"+V+"= \\Biggl(");
+ Opt=cdr(Opt);
+ II=length(Opt);
+ for(I=0; I<II; I++){
+ str_tb([(I>0)?" + ":" ",mtotex(L[I]),"\\frac{d",monototex(Opt[I]),"}{",
+ my_tex_form(Opt[I]),(I==II-1)?"}\n":"}\n\\\\&\n"],Out);
+ }
+ str_tb(["\\Biggr)",V,"\n"],Out);
+ }else if(Op==3){ /* Fuchs */
+ Out = string_to_tb("\\frac{d");
+ V=my_tex_form(Opt[0]);
+ str_tb([V,"}{d",my_tex_form(Opt[1]),"}="] ,Out);
+ Opt=cdr(Opt); Opt=cdr(Opt);
+ II=length(Opt);
+ for(I=0; I<II; I++){
+ str_tb([(I>0)?" +":"\\Biggl(", " \\frac{",
+ my_tex_form(L[I]),"}{", my_tex_form(Opt[I]),"}\n"],Out);
+ }
+ str_tb(["\\Biggr)",V,"\n"],Out);
+ }else if(Op==4){ /* vect */
+ Out=str_tb(mtotex(matc(L)|lim=0,var=Var),0);
+ }else if(Op==5 || Op==6){ /* cr or text */
+ Out = str_tb(0,0);
+ if(type(Lim=getopt(lim))!=1) Lim=0;
+ else if(Lim<30&&Lim>0) Lim=TeXLim;
+ Str=getopt(str);
+ if(length(Opt)==1 && (car(Opt)=="spts" || car(Opt)=="spts0") && type(Str)!=1)
+ Str=2;
+ for(K=I=0; L!=[]; I++, L=cdr(L)){
+ LT=car(L);
+ if((!Lim||Op==6)&&I>0) str_tb((Op==5)?Cr:"\n",Out);
+ if(Op==6){
+ if(type(LT)==7){
+ str_tb([LT," "],Out);
+ I=-1;
+ continue;
+ }
+ str_tb("$",Out);
+ }
+ KK=0;
+ if(Str>0 && type(LT)==4 && Opt!=[])
+ S=ltotex(LT|opt=car(Opt),lim=0,str=Str,cr=Cr2,var=Var);
+ else if(type(LT)==6){
+ if(Lim>0){
+ S=mtotex(LT|var=Var,lim=0,len=1);
+ KK=S[1];
+ S=S[0];
+ }else S=mtotex(LT|var=Var,lim=0);
+ }else if(type(LT)==3 || type(LT)==2)
+ S=fctrtos(LT|TeX=2,lim=0,var=Var);
+ else S=my_tex_form(LT);
+ if(Op!=6&&I>0&&Lim){
+ if(Lim<0){
+ if(I%(-Lim)==0)
+ str_tb((Op==5)?Cr:"\n",Out);
+ }else if((K+=(KK=(KK)?KK:texlen(S)))>Lim){
+ str_tb((Op==5)?Cr:"\n",Out);
+ K=KK;
+ }
+ }
+ str_tb(S,Out);
+ if(Op==6) str_tb("$",Out);
+ }
+ }else if(Op==7||Op==8){ /* spts, spts0 */
+ if(type(Lim=getopt(lim))!=1 || (Lim<30 && Lim!=0))
+ Lim=TeXLim;
+ Str=getopt(str);
+ Out = str_tb(0,0);
+ for(K=0; L!=[]; L=cdr(L)){
+ LT=car(L);
+ KK=0;
+ if(type(LT)==7 && Str==1) S=LT;
+ else if(type(LT)==3 || type(LT)==2)
+ S=fctrtos(LT|TeX=2,lim=0,var=Var);
+ else if(type(LT)==6){
+ if(Lim){
+ S=mtotex(LT|var=Var,lim=0,len=1);
+ KK=S[1];
+ S=S[0];
+ }else S=mtotex(LT|var=Var,lim=0);
+ }else
+ S=my_tex_form(LT);
+ if(Lim!=0){
+ if(!KK) KK=texlen(S);
+ if(K>0 && K+KK>Lim){
+ str_tb(Cr,Out);
+ K=0;
+ }
+ }
+ if(K>0){
+ str_tb((Op==7)?"\\ ":" ",Out);
+ if(type(LT)>3 && type(LT)<7) str_tb("%\n",Out);
+ }
+ str_tb(S,Out);
+ K+=KK;
+ if(OP==7) K++;
+ }
+ }else if(Op==9){ /* dform */
+ Out=str_tb(0,0);
+ for(I=0;L!=[];L=cdr(L),I++){
+ for(J=0,LT=car(L); LT!=[]; LT=cdr(LT),J++){
+ if(J==0){
+ if((V=car(LT))==0) continue;
+ if(I>0){
+ if(type(V)==1){
+ if(V<0){
+ str_tb("-",Out);
+ V=-V;
+ }
+ else str_tb("+",Out);
+ if(V==1 && length(LT)>1) continue;
+ str_tb(monototex(V),Out);
+ continue;
+ }
+ else str_tb("+",Out);
+ }
+ }else if(J>0) str_tb((J>1)?"\\wedge d":"\\,d",Out);
+ V=monototex(car(LT));
+ if(V<"-" || V>=".") str_tb(V,Out);
+ else str_tb(["(",V,")"],Out);
+ }
+ }
+ }else if(Op==10 && type(L)==4 && type(car(L))==4){ /* tab */
+ if(type(Null=getopt(null))<0) Null="";
+ if(getopt(vert)==1){
+ M=lv2m(L|null=Null);
+ L=m2ll(mtranspose(M));
+ }
+ if(type(W=getopt(width))==1)
+ L=madjust(L,W|null=Null);
+ LV=ltov(L);
+ S=length(LV);
+#if 1
+ if(type(T=getopt(left))==4){
+ T=str_times(T,S);
+ for(L=[],I=0;I<S;I++){
+ L=cons(cons(car(T),LV[I]),L);
+ T=cdr(T);
+ }
+ LV=reverse(L);
+ }
+ if(type(T=getopt(right))==4){
+ T=str_times(T,S);
+ for(L=[],I=0;I<S;I++){
+ L=cons(append(LV[I],[car(T)]),L);
+ T=cdr(T);
+ }
+ LV=reverse(L);
+ }
+ for(I=CS=0; I<S; I++)
+ if(length(LV[I])>CS) CS=length(LV[I]);
+ if(type(T=getopt(top))==4){
+ LV=cons(str_times(T,CS),vtol(LV));
+ S++;
+ }
+ if(type(T=getopt(last))==4){
+ LV=append(vtol(LV),[str_times(T,CS)]);
+ S++;
+ }
+#else
+ for(I=CS=0; I<S; I++)
+ if(length(LV[I])>CS) CS=length(LV[I]);
+#endif
+ if(type(Title=getopt(title))!=7) Title="";
+ if(type(Vline=getopt(vline))!=4) Vline=[0,CS];
+ else Vline=subst(Vline,z,CS);
+ for(VV=[],VT=Vline;VT!=[];VT=cdr(VT)){
+ if(type(T=car(VT))==4 && T[1]>0){
+ for(I=T[0];I<=CS;I+=T[1]) VV=cons(I,VV);
+ }else VV=cons(T,VV);
+ }
+ Vline=qsort(VV);
+ Out=str_tb("\\begin{tabular}{",0);
+ if(type(Al=getopt(align))==7 && str_len(Al)>1){
+ str_tb(Al,Out);
+ }else{
+ if(type(Al)!=7 || str_len(Al)<1) Al="r";
+ for(I=0;I<=CS;I++){
+ if(I!=0) str_tb(Al,Out);
+ while(Vline!=[] && car(Vline)==I){
+ str_tb("|",Out);
+ Vline=cdr(Vline);
+ }
+ }
+ }
+ str_tb("}",Out);
+ if(Title!="")
+ str_tb("\n\\multicolumn{"+rtostr(CS)+"}{c}{"+Title+"}\\\\",Out);
+ if(type(Hline=getopt(hline))!=4) Hline=[0,S];
+ else Hline=subst(Hline,z,S);
+ for(VV=[],VT=Hline;VT!=[];VT=cdr(VT)){
+ if(type(T=car(VT))==4 && T[1]>0){
+ for(I=T[0];I<=S;I+=T[1]) VV=cons(I,VV);
+ }else VV=cons(T,VV);
+ }
+ Hline=qsort(VV);
+ while(Hline!=[] && car(Hline)==0){
+ str_tb(" \\hline\n",Out);
+ Hline=cdr(Hline);
+ }
+/*
+ if(type(getopt(left))==4) CS++;
+ if(type(getopt(right))==4) CS++;
+ if(type(T=getopt(top))==4){
+ LV=cons(str_times(T,CS),vtol(LV));
+ S++;
+ }
+ if(type(T=getopt(last))==4){
+ LV=append(vtol(LV),[str_times(T,CS)]);
+ S++;
+ }
+ if(type(T=getopt(left))==4){
+ T=str_times(T,S);
+ for(L=[],I=0;I<S;I++){
+ L=cons(cons(car(T),LV[I]),L);
+ T=cdr(T);
+ }
+ LV=reverse(L);
+ }
+ if(type(T=getopt(right))==4){
+ T=str_times(T,S);
+ for(L=[],I=0;I<S;I++){
+ L=cons(append(LV[I],[car(T)]),L);
+ T=cdr(T);
+ }
+ LV=reverse(L);
+ }
+*/
+ for(I=0; I<S; I++){
+ for(C=0,LT=LV[I];C<CS; C++){
+ if(LT!=[]){
+ P=car(LT);
+ if(type(P)!=7) P="$"+my_tex_form(P)+"$";
+ if(P!="") str_tb(P,Out);
+ LT=cdr(LT);
+ }
+ if(C<CS-1) str_tb("& ",Out);
+ }
+ str_tb("\\\\",Out);
+ while(Hline!=[] && car(Hline)==I+1){
+ str_tb(" \\hline",Out);
+ Hline=cdr(Hline);
+ }
+ str_tb("\n",Out);
+ }
+ str_tb("\\end{tabular}\n",Out);
+ }else if(Op==11){ /* graph */
+ if(type(Strip=getopt(strip))!=1) Strip=0;
+ if(type(MX=getopt(max))!=1) MX=0;
+ if(type(ML=getopt(mult))!=1) ML=0;
+ if((REL=getopt(relative))!=1) REL=0;
+ CL=getopt(color);
+ OL=delopt(getopt(),["color","strip","mult"]);
+ if(ML==1&&type(CL)==4){
+ LL=L[1];L=L[0];K=length(L);S=T="";
+ if(!MX){
+ MX=vector(length(L[0]));
+ for(LT=L;LT!=[];LT=cdr(LT)){
+ for(I=0,LTT=car(LT);LTT!=[];I++,LTT=cdr(LTT)){
+ if(REL==1) MX[I]+=car(LTT);
+ else if(MX[I]<car(LTT)) MX[I]=car(LTT);
+ }
+ }
+ MX=lmax(MX);
+ OL=cons(["max",MX],OL);
+ }
+ if(REL==1) MX=newvect(length(L[0]));
+ for(I=0;I<K;I++){
+ for(R=[],J=length(L[I]);--J>=0;){
+ if(REL==1){
+ R=cons([MX[J],V=MX[J]+L[I][J]],R);
+ MX[J]=V;
+ }else R=cons([(!I)?0:L[I-1][J],L[I][J]],R);
+ }
+ OP=cons(["color",CL[I]],OL);
+ S+=ltotex([R,LL]|option_list=cons(["value",0],cons(["strip",(!I)?1:2],OP)));
+ T+=ltotex([R,LL]|option_list=cons(["strip",3],OP));
+ }
+ return(!Strip)?xyproc(S+T):(S+T);
+ }else if(!TikZ) CL=0;
+ if(type(Line=getopt(line))!=1){
+ if(type(Line)==4){
+ if(type(Line[0])==1 && (type(Line[1])==7 || type(Line[1])==1)){
+ Opt=Line[1]; Line=Line[0];
+ }else if(ML==1){
+ OL=delopt(OL,"line");
+ LL=L[1];L=L[0];K=length(L);S="";
+ if(!MX){
+ MX=newvect(length(L[0]));
+ for(LT=L;LT!=[];LT=cdr(LT)){
+ for(I=0,LTT=car(LT);LTT!=[];I++,LTT=cdr(LTT)){
+ if(REL==1) MX[I]+=car(LTT);
+ else if(MX[I]<car(LTT)) MX[I]=car(LTT);
+ }
+ }
+ MX=lmax(MX);
+ OL=cons(["max",MX],OL);
+ }
+ for(I=0;I<K;I++)
+ S+=ltotex([L[I],LL]|option_list
+ =cons(["line",Line[I]],cons(["strip",(!I)?1:2],OL)));
+ return(!Strip)?xyproc(S):S;
+ }
+ }else Line=0;
+ }else Opt="@{-}";
+ Width=8; Hight=3; WRet=1/2; HMerg=(getopt(horiz)==1)?0.3:0.2;
+ if(!TikZ){
+ Width*=10; Hight*=10; HMerg*=10;
+ }
+ VMerg=HMerg;
+ if(type(Shift=getopt(shift))!=1)
+ Shift=0;
+ if(type(V=getopt(size))==4){
+ Width=V[0];Hight=V[1];
+ if(length(V)>2) WRet=V[2];
+ if(length(V)>3) VMerg=VMerg=V[3];
+ if(length(V)>4) HMerg=V[4];
+ }
+ Val=getopt(value);
+ if(!isint(Val)) Val=-1;
+ if(type(Line=getopt(line))!=1){
+ if(type(Line)==4 && type(Line[0])==1 && (type(Line[1])==7 || type(Line[1])==1)){
+ Opt=Line[1]; Line=Line[0];
+ }else Line=0;
+ }else Opt="@{-}";
+ if(type(car(L))==4){
+ LL=L[1]; L=L[0];
+ }else LL=[];
+ if(Line==-1){
+ for(Sum=0, LT=L; LT!=[]; LT=cdr(LT)){
+ if((S=car(LT))<=0) return 0;
+ Sum+=S;
+ }
+ for(R=[],LT=L;LT!=[];LT=cdr(LT)) R=cons(car(LT)/Sum,R);
+ R=reverse(R);
+ Opt0=Opt*2/3;
+ Out=str_tb((Strip>0)?0:xyproc(1),0);
+ if(type(CL)!=4) str_tb(xylines(ptpolygon(6,Opt)|close=1,curve=1),Out);
+ for(S=0,RT=R,LT=LL;RT!=[];RT=cdr(RT)){
+ SS=S+RT[0];
+ if(type(CL)==4){
+ str_tb(xyang(Opt,[0,0],(0.25-SS)*6.2832,(0.25-S)*6.2832|ar=1,opt=car(CL)),Out);
+ if(length(CL)>0) CL=cdr(CL);
+ }else str_tb(xyline([0,0],[Opt*dsin(S*6.2832),Opt*dcos(S*6.2832)]),Out);
+ T=(S+SS)/2;
+ S=SS;
+ if(LT!=[]){
+ str_tb(xyput([Opt0*dsin(T*6.2832),Opt0*dcos(T*6.2832),car(LT)]),Out);
+ LT=cdr(LT);
+ }
+ }
+ if(!Strip) str_tb(xyproc(0),Out);
+ return str_tb(0,Out);
+ }
+ if(MX==0){
+ for(MX=0,LT=L; LT!=[]; LT=cdr(LT))
+ if(car(LT)>MX) MX=car(LT);
+ }
+ MX-=Shift;
+ S=length(L);
+ WStep=Width/S;
+ WWStep=WStep*WRet;
+ HStep=(Hight<0)?-Hight:Hight/MX;
+ if(LL!=[]&&length(LL)==S-1) WS2=WStep/2;
+ else WS2=0;
+ Out=str_tb((Strip>0)?0:xyproc(1),0);
+ Hori=getopt(horiz);
+ if(Strip<2){
+ if(Hori==1) str_tb(xyline([0,0],[0,Width-WStep+WWStep]),Out);
+ else str_tb(xyline([0,0],[Width-WStep+WWStep,0]),Out);
+ }
+ for(I=0,LT=L;LT!=[]; LT=cdr(LT),I++){
+ XP=WStep*I; XPM=XP+WWStep/2;
+ if(type(LTT=car(LT))==4){
+ YP0=(car(LTT)-Shift)*HStep;YP=(LTT[1]-Shift)*HStep;
+ VL=LTT[1];
+ if(REL) VL-=LTT[0];
+ }else{
+ YP0=0;YP=(LTT-Shift)*HStep;VL=LTT;
+ }
+ if(Hori==1){
+ if(Line!=0){
+ if(I>0)
+ str_tb(xyarrow([XPM,YP],[XPM-WStep,YPP]|opt=Opt),Out);
+ if(Val!=0)
+ str_tb(xyput([YP+HMerg, XPM,car(LT)]),Out);
+ if(Line==2)
+ str_tb(xyput([YP,XPM,"$\\bullet$"]),Out);
+ YPP=YP;
+ }else if(YP!=0 || Val==1){
+ if(Strip!=3){
+ if(CL) str_tb(xybox([[YP,XP+WWStep], [YP0,XP]]|color=CL),Out);
+ else str_tb(xybox([[YP,XP+WWStep],[YP0,XP]]),Out);
+ }
+ if(Val!=0) str_tb(xyput([(YP<0||REL==1)?(YP-HMerg):(YP+HMerg),XPM,VL]),Out);
+ }
+ if(LL!=[]&&I<length(LL)&&Strip<2) str_tb(xyput([-VMerg,XPM+WS2,LL[I]]),Out);
+ }else{
+ if(Line!=0){
+ if(I>0)
+ str_tb(xyarrow([XPM-WStep,YPP],[XPM,YP]|opt=Opt),Out);
+ if(Val!=0)
+ str_tb(xyput([XPM,YP+HMerg,car(LT)]),Out);
+ if(Line==2)
+ str_tb(xyput([XPM,YP,"$\\bullet$"]),Out);
+ YPP=YP;
+ }else if(YP!=0 || Val==1){
+ if(Strip!=3){
+ if(CL) str_tb(xybox([[XP,YP0],[XP+WWStep,YP]]|color=CL),Out);
+ else str_tb(xybox([[XP,YP0],[XP+WWStep,YP]]),Out);
+ }
+ if(Val!=0) str_tb(xyput([XPM,(YP<0||REL==1)?(YP-HMerg):(YP+HMerg),VL]),Out);
+ }
+ if(LL!=[]&&I<length(LL)&&Strip<2) str_tb(xyput([XPM+WS2,-VMerg,LL[I]]),Out);
+ }
+ }
+ if(!Strip)str_tb(xyproc(0),Out);
+ }else if(Op==12){ /* coord */
+ Out=str_tb("(",0);
+ for(LT=L;;){
+ X=car(LT);
+ if(type(X)>3 || imag(X)==0) str_tb(my_tex_form(X),Out);
+ else{
+ XR=real(X);XI=imag(X);
+ S=monototex(imag(X));
+ if(S=="1") S="";
+ else if(S=="- 1") S="-";
+ if(getopt(cpx)==2) S=S+"\\sqrt{-1}";
+ else S=S+"i";
+ if(XR!=0){
+ if(str_char(S,0,"-")==0) S=monototex(XR)+S;
+ else S=monototex(XR)+"+"+S;
+ }
+ str_tb(S,Out);
+ }
+ if((LT=cdr(LT))==[]) break;
+ else str_tb(",",Out);
+ }
+ str_tb(")",Out);
+ }
+ else return my_tex_form(L);
+ S = str_tb(0,Out);
+ return (getopt(small)==1)?smallmattex(S):S;
+}
+
+
+def str_tb(L,TB)
+{
+ if(type(TB) == 0) TB = "";
+ if(L == 0)
+ return (type(TB) == 7)?string_to_tb(TB):tb_to_string(TB);
+ if(type(L) == 7)
+ L = [L];
+ else if(type(L) != 4){
+ erno(0);
+ return 0;
+ }
+ if(type(TB) <= 7)
+ TB = string_to_tb((type(TB)==7)?TB:"");
+ for(; L != []; L = cdr(L))
+ write_to_tb(car(L), TB);
+ return TB;
+}
+
+/*
+def redgrs(M,T)
+{
+ L = [zzz];
+ for(I=S=0,Eq=[],MT=M; MT!=[]; I++, MT=cdr(MT)){
+ for(J=LS=0, N=car(MT); N!=[]; N=cdr(N)){
+ X = makev([z,I,z,J]);
+ L=cons(X,L);
+ LS += X;
+ S += car(N)[1]*X;
+ }
+ Eq = cons(LS-zzz,Eq);
+ }
+ Eq = cons(S-T,Eq);
+ Sol= lnsol(Eq,L);
+ for(LS=[],S=Sol; S!=[]; S=cdr(S)){
+ T=car(S);
+ if(type(S)!=4) return 0;
+ LS=cons(car(S)[0],LS);
+ }
+}
+*/
+
+/* T=0 : all reduction
+ =1 : construction procedure
+ =2 : connection coefficient
+ =3 : operator
+ =4 : series expansion
+ =5 : expression by TeX
+ =6 : Fuchs relation
+ =7 : All
+ =8 : basic
+ =9 : ""
+ =10: irreducible
+ =11: recurrence */
+def getbygrs(M, TT)
+{
+ /* extern TeXEq; */
+
+ if(type(M)==7) M=s2sp(M);
+ if(type(M) != 4 || TT =="help"){
+ mycat(
+["getbygrs(m,t) or getbygrs(m,[t,s_1,s_2,...]|perm=?,var=?,pt=?,mat=?)\n",
+" m: generalized Riemann scheme or spectral type\n",
+" t: reduction, construct, connection, series, operator, TeX, Fuchs, irreducible, basic, recurrence,\n",
+" All\n",
+" s: TeX dviout simplify short general operator irreducible top0 x1 x2 sft\n",
+"Ex: getbygrs(\"111,21,111\", [\"All\",\"dviout\",\"operator\",\"top0\"])\n"]);
+ return 0;
+ }
+ if(type(TT) == 4){
+ T = TT[0];
+ T1 = cdr(TT);
+ }else{
+ T = TT;
+ T1 = [];
+ }
+ if(type(T) == 7)
+ T = findin(T,["reduction","construct","connection", "operator", "series",
+ "TeX", "Fuchs", "All", "basic", "", "irreducible", "recurrence"]);
+ TeX = findin("TeX", T1);
+ Simp = findin("simplify", T1);
+ Short = findin("short", T1);
+ Dviout= findin("dviout", T1);
+ General=findin("general", T1);
+ Op =findin("operator", T1);
+ Irr =findin("irreducible", T1);
+ Top0 =findin("top0",T1);
+ X1 =findin("x1",T1);
+ X2 =findin("x2",T1);
+ Sft =findin("sft",T1);
+ Title = getopt(title);
+ Mat = getopt(mat);
+ if(Mat!=1 || T<0 ||(T!=0&&T!=1&&T!=5&&T!=6&&T!=8&&T!=10&&T!=9)) Mat = 0;
+ if(findin("keep",T1) >= 0)
+ Keep = Dviout = 1;
+ else Keep = 0;
+ if(Dviout >= 0 || T == 5) TeX = 1;
+ for(J = 0, MM = M; J == 0 && MM != []; MM = cdr(MM)){
+ for(MI = car(MM); MI != []; MI = cdr(MI)){
+ if(type(car(MI)) != 1 || car(MI) <= 0){
+ J = 1; break;
+ }
+ }
+ }
+
+ /* spectral type -> GRS */
+ if(J == 0){
+ for(R = [], S = J = 0, MM = M; MM != []; MM = cdr(MM), J++){
+ MT = qsort(car(MM));
+ R = cons(reverse(MT), R);
+ if(J == 1){
+ S = length(MT)-1;
+ if(MT[S] > MT[0]) S = 0;
+ }
+ }
+ M = reverse(R);
+ R = getopt(var);
+ if(type(R)<1){
+ for(R = [], I = J-1; I >= 0; I--)
+ R = cons(asciitostr([97+I]), R);
+ }
+ Sft=(Sft>=0)?1:0;
+ if(General < 0)
+ Sft=-Sft-1;
+ M = sp2grs(M,R,Sft|mat=Mat);
+ }
+ for(M0=[],MM=M;MM!=[];MM=cdr(MM)){ /* change "?" -> z_z */
+ for(M1=[],Mm=car(MM);Mm!=[];Mm=cdr(Mm)){
+ Mt=car(Mm);
+ if(type(Mt)==4 && Mt[1]=="?"){
+ M1=cons([Mt[0],z_z],M1);
+ continue;
+ }else if(type(Mt)==7 && Mt=="?"){
+ M1=cons(z_z,M1);
+ continue;
+ }
+ M1=cons(Mt,M1);
+ }
+ M0=cons(reverse(M1),M0);
+ }
+ M = fspt(reverse(M0),5); /* short -> long */
+ if(findin(z_z,vars(M))>=0)
+ M=subst(M,z_z,lsol(chkspt(M|mat=Mat)[3],z_z)); /* Fuchs relation */
+ NP = length(M);
+ Perm = getopt(perm);
+ if(type(Perm) == 4)
+ M = mperm(M,Perm,0);
+ if(T == 9){ /* "" */
+ if(Short >= 0)
+ M = chkspt(M|opt=4,mat=Mat);
+ return M;
+ }
+ R = [0,M];
+ ALL = [R];
+
+ while(type(R = redgrs(R[1]|mat=Mat)) == 4)
+ ALL = cons(R, ALL);
+ if(R < 0)
+ return 0;
+
+ /* TeX */
+ if(TeX >= 0 && !chkfun("print_tex_form", "names.rr"))
+ return 0;
+ if(Dviout >= 0 && type(Title) == 7)
+ dviout(Title|keep=1);
+ if(T == 7 && Dviout >= 0){
+ S=["keep","simplify"];
+ if(Top0 >= 0)
+ S = cons("top0",S);
+ getbygrs(M,cons(5,S)|title="\\noindent Riemann Scheme",mat=Mat);
+ Same = 0;
+ if(R > 0){
+ MM = getbygrs(M,8|mat=Mat); /* basic GRS */
+ MS = chkspt(MM|opt=0,mat=Mat); /* spectral type */
+ if(M != MM)
+ getbygrs(MM,cons(5,S)|title="Basic Riemann Scheme",mat=Mat);
+ else{
+ dviout("This is a basic Riemann Scheme.\n\n\\noindent"|keep=1);
+ Same = 1;
+ }
+ dviout(MS|keep=1);
+ }
+ if(chkspt(ALL[0][1]|mat=Mat)[3] != 0)
+ getbygrs(M,cons(6,S)|title="Fuchs condition",mat=Mat);
+ if(Same == 0){
+ M1 = M[1];
+ if(M1[length(M1)-1][0]==1 && Mat!=1){
+ M1=M[2];
+ if(M1[length(M1)-1][0] == 1){
+ getbygrs(M,cons(2,S)|title="Connection formula");
+ if(M1[length(M[0][0])-1][0] == 1 && R==0)
+ getbygrs(M,cons(11,S)|title="Recurrence relation shifting the last exponents at $\\infty$, 0, 1");
+ }
+ getbygrs(M,cons(1,S)|title="Integral representation");
+ getbygrs(M,cons(4,S)|title="Series expansion");
+ }
+ if(Irr < 0){
+ TI="Irreduciblity $\\Leftrightarrow$ any value of the following linear forms $\\notin\\mathbb Z$";
+ if(R > 0)
+ TI += " + fundamental irreducibility";
+ getbygrs(M,cons(10,S)|title=TI,mat=Mat);
+ dviout("which coorespond to the decompositions"|keep=1);
+ sproot(chkspt(M|opt=0),"pairs"|dviout=1,keep=1);
+ }
+ }
+ if(Op >= 0 && Mat!=1) getbygrs(M,cons(3,S)|title="Operator");
+ dviout(" ");
+ return 1;
+ }
+ if(T == 0 && TeX >= 0){
+ T = 1; TeX = 16;
+ }
+/* Fuchs */
+ Fuc = chkspt(ALL[0][1]|Mat=mat)[3];
+ if(Fuc == 0) Simp = -1;
+ if(type(Fuc) == 1){
+ print("Violate Fuchs condition");
+ return 0;
+ }
+ if(T == 6){
+ if(Dviout >= 0) dviout(Fuc|eq=0,keep=Keep);
+ return (TeX >= 0)?my_tex_form(Fuc):Fuc;
+ }
+ Fuc = [Fuc];
+/* Generelized Riemann scheme */
+ if(T == 5){
+ M = ltov(M);
+ for(ML=0, I=0; I<NP; I++){
+ L = length(M[I]);
+ if(L > ML) ML = L;
+ }
+ Out = string_to_tb("P\\begin{Bmatrix}\nx=");
+ if(Top0 < 0)
+ write_to_tb("\\infty & ",Out);
+ Pt = getopt(pt);
+ if(type(Pt) == 4){
+ for(J = 3; J < NP; J++){
+ str_tb(["& ",rtotex(car(Pt))],Out);
+ Pt = cdr(Pt);
+ }
+ }
+ else if(X2>=0)
+ str_tb("0 & x_2",Out);
+ else
+ str_tb((X1>=0)?"x_1 & x_2":"0 & 1",Out);
+ for(J = 3; J < NP; J++)
+ str_tb(["& x_",rtotex(J)],Out);
+ if(Top0 >= 0)
+ write_to_tb("& \\infty",Out);
+ write_to_tb("\\\\\n",Out);
+ for(I = 0; I < ML; I++){
+ for(CC = 0, J = (Top0 >= 0)?1:0; ; J++, CC++){
+ if(J == NP){
+ if(Top0 < 0) break;
+ J = 0;
+ }
+ if(length(M[J]) <= I){
+ if(CC > 0) write_to_tb(" & ",Out);
+ }else if(M[J][I][0] <= 1){
+ if(M[J][I][0] == 0) str_tb(" & ",Out);
+ else
+ str_tb([(!CC)?" ":" & ", my_tex_form(M[J][I][1])], Out);
+ }else{
+ str_tb([((!CC)?"[":" & ["), my_tex_form(M[J][I][1]),
+ (Mat==1)?"]_{":"]_{("],Out);
+ str_tb([my_tex_form(M[J][I][0]),(Mat==1)?"}":")}"],Out);
+ }
+ if(Top0 >= 0 && J == 0)
+ break;
+ }
+ if(I == 0)
+ str_tb("&\\!\\!;x",Out);
+ str_tb("\\\\\n",Out);
+ }
+ str_tb("\\end{Bmatrix}",Out);
+ Out = str_tb(0,Out);
+ if(Dviout >= 0)
+ dviout(Out|eq=0,keep=Keep);
+ return Out;
+ }
+
+/* Reduction */
+ if(T == 0){
+ if(Simp >= 0)
+ ALL = simplify(ALL,Fuc,4);
+ return reverse(ALL);
+ }
+ LA = length(ALL) - 1;
+ NP = length(ALL[0][1]);
+
+/* irreducible */
+ if(T == 10){
+ for(IR=[], I = 0; I < LA; I++){
+ AI = ALL[I]; AIT = AI[1];
+ K = AI[0][0];
+ P = -AIT[0][K][1];
+ P -= cterm(P);
+ IR = cons(P, IR);
+ for(J = 0; J < NP; J++){
+ K = AI[0][J];
+ for(L = length(AIT[J]) - 1; L >= 0 ; L--){
+ if(L == K || AIT[J][L][0] <= AIT[J][K][0])
+ continue;
+ P = AIT[J][L][1] - AIT[J][K][1];
+ Q = cterm(P);
+ if(dn(Q)==1)
+ P -= Q;
+ IR = cons(P,IR);
+ }
+ }
+ }
+ P=Fuc[0];
+ Q=cterm(P);
+ if(type(Q)==1 && dn(Q)==1){
+ for(F=0,V=vars(P);V!=[];V=cdr(V)){
+ R=mycoef(P,1,car(V));
+ if(type(R)!=1 || Q%R!=0){
+ F=1; break;
+ }
+ }
+ if(F==0){
+ P-=Q;
+ Simp=0;
+ }
+ }
+ if(Simp >= 0){
+ IR=simplify(IR,[P],4);
+ for(R=[]; IR!=[]; IR=cdr(IR)){
+ P=car(IR);
+ Q=cterm(P);
+ if(dn(Q)==1) P-=Q;
+ R=cons(P,R);
+ }
+ IR=R;
+ }
+ for(R=[]; IR!=[]; IR=cdr(IR)){
+ P=car(IR);
+ if(str_len(rtostr(P)) > str_len(rtostr(-P)))
+ P = -P;
+ R = cons(P,R);
+ }
+ R = ltov(R);
+#ifdef USEMODULE
+ R = qsort(R,os_md.cmpsimple);
+#else
+ R = qsort(R,cmpsimple);
+#endif
+ R = vtol(R);
+ if(TeX >= 0){
+ Out = string_to_tb("");
+ for(I=L=K=0; R!=[]; R=cdr(R),I++){
+ K1 = K;
+ RS = my_tex_form(car(R));
+ K = nmono(car(R));
+ L += K;
+ if(I){
+ if(K1 == K && L < 30)
+ str_tb("\\quad ",Out);
+ else{
+ L = K;
+ str_tb((TeXEq==5)?["\\\\%\n &"]:["\\\\%\n "],Out);
+ }
+ }
+ str_tb(RS,Out);
+ }
+ R = Out;
+ if(Dviout>=0){
+ dviout(R|eq=0,keep=Keep);
+ return 1;
+ }
+ }
+ return R;
+ }
+
+ AL = []; SS = 0;
+ for(I = 0; I <= LA; I++){
+ AI = ALL[I]; AIT = AI[1]; /* AIT: GRS */
+ if(I > 0){
+ for(S = J = 0; J < NP; J++){
+ GE = AIT[J][AI0[J]][1];
+ S += GE;
+ if(J == 0)
+ SS = [];
+ else
+ SS = cons(GE,SS);
+ }
+ SS = cons(1-Mat-S, reverse(SS));
+ }
+ AI0 = AI[0];
+ AL = cons([SS, cutgrs(AIT)], AL);
+ }
+ AL = reverse(AL);
+ AD = newvect(NP);
+ ALT = AL[0][1];
+ for(J = 1; J < NP; J++){
+ /* AD[J] = ALT[J][0][1]; [J][?][1] <- [J][?][0]: max */
+ for(MMX=0, K = KM = length(ALT[J])-1; K >= 0; K--){
+ if(MMX <= ALT[J][K][0]){
+ if(J == 1 && MMX == ALT[J][K][0])
+ continue;
+ KM = K;
+ MMX = ALT[J][K][0];
+ }
+ }
+ AD[J] = ALT[J][KM][1];
+ }
+ AL = cdr(AL);
+ AL = cons([vtol(AD), ALT], AL);
+ AL = cons([0, mcgrs(ALT, [vtol(-AD)]|mat=Mat)], AL);
+ if(Simp >= 0 && T != 3)
+ AL = simplify(AL,Fuc,4);
+/* Basic */
+ if(T == 8){
+ ALT = AL[0][1];
+ if(TeX >= 0){
+ if(Dviout >= 0){
+ return getbygrs(ALT,["TeX","dviout","keep"]);
+ }
+ return getbygrs(ALT,"TeX");
+ }
+ if(Short >= 0)
+ ALT = chkspt(ALT|opt=4);
+ return ALT;
+ }
+
+/* Construct */
+ if(T == 1){
+ if(TeX >= 0){
+ L = length(AL);
+ I = Done = 0; Out0=Out1=""; NM = DN = [];
+ if(TeX != 16){
+ AL11=AL[L-1][1][1];
+ AT = AL11[length(AL11)-1];
+ if(type(AT) == 4){
+ PW = (AT[0] > 1)?"":AT[1];
+ }else PW = AT;
+ }
+ Out = string_to_tb("");
+ while(--L >= 0){
+ if(TeX == 16){
+ if(Done)
+ write_to_tb(":\\ ", Out);
+ write_to_tb(getbygrs(AL[L][1],(Top0>=0)?["TeX", "top0"]:"TeX"|mat=Mat), Out);
+ Done = 1;
+ if(L != 0) write_to_tb((TeXEq==5)?
+ "\\\\%\n&\\leftarrow ":"\\\\%\n\\leftarrow ", Out);
+ }
+ ALT = AL[L][0];
+ if(TeX != 16){
+ V1 = (I==0)?"x":V2;
+ V2 = /* (I==0 && L<=2)?"s": */
+ "s_"+rtotex(I);
+ }else V1=V2="x";
+ JJ = (type(ALT) == 4)?length(ALT):0;
+ if(I > 0 && L > 0)
+ write_to_tb("\n ", Out);
+ for(Outt = "", J = 1; J < JJ; J++){
+ if(ALT[J] == 0) continue;
+ if(J == 1) Outt += V1;
+ else if(J == 2) Outt += "(1-"+V1+")";
+ else Outt += "(x_"+rtotex(J)+"-"+V1+")";
+ Outt += "^"+ rtotex(ALT[J]);
+ }
+ if(TeX != 16) write_to_tb(Outt, Out);
+ else if(Outt != "")
+ str_tb(["\\mathrm{Ad}\\Bigl(",Outt,"\\Bigr)"], Out);
+ if(JJ == 0){
+ if(I != 0)
+ Out1 = "ds_"+rtotex(I-1)+Out1;
+ continue;
+ }
+ if(ALT[0] == 0) continue;
+ Out0 += "\\int_p^{"+V1+"}";
+ if(TeX == 16)
+ str_tb(["mc_",rtotex(ALT[0])], Out);
+ else{
+ str_tb(["(",V1,"-",V2,")^",rtotex(-1+ALT[0])], Out);
+ AL11=AL[L-1][1][1];
+ AT = AL11[length(AL11)-1];
+ if(type(AT) == 4) AT = AT[1];
+ DN = cons(ALT[0]+AT+1,DN);
+ NM = cons(AT+1,cons(ALT[0],NM));
+ }
+ if(L != 2) Out1 += "d"+V2;
+ I++;
+ }
+ if(R){
+ if(I == 0) Ov = "x";
+ else Ov = "s_"+rtotex(I-1);
+ Out1 = "u_B("+Ov+")"+Out1;
+ }
+ if(TeX != 16){
+ Out0 = string_to_tb(Out0);
+ str_tb([Out, Out1], Out0);
+ Out = Out0;
+ NM = simplify(NM, Fuc, 4);
+ DN = simplify(DN, Fuc, 4);
+ DNT = lsort(NM,DN,"reduce");
+ NMT = DNT[0]; DNT = DNT[1];
+ if(NMT != [] && PW != ""){
+ write_to_tb((TeXEq==5)?"\\\\\n &\\sim\\frac{\n"
+ :"\\\\\n \\sim\\frac{\n", Out);
+ for(PT = NMT; PT != []; PT = cdr(PT))
+ str_tb([" \\Gamma(",my_tex_form(car(PT)), ")\n"], Out);
+ write_to_tb(" }{\n", Out);
+ for(PT = DNT; PT != []; PT = cdr(PT))
+ write_to_tb(" \\Gamma("+my_tex_form(car(PT))+")\n", Out);
+ write_to_tb(" }", Out);
+ if(R > 0) write_to_tb("C_0", Out);
+ write_to_tb("x^"+rtotex(PW) +"\\ \\ (p=0,\\ x\\to0)", Out);
+ }
+ }else
+ Out = str_tb(0, Out);
+ if(Dviout >= 0){
+ dviout(Out|eq=0,keep=Keep);
+ return 1;
+ }
+ return O;
+ }
+ if(Short >= 0){
+ for(ALL = [] ; AL != []; AL = cdr(AL)){
+ AT = car(AL);
+ ALL = cons([AT[0], chkspt(AT[1]|opt=4)], ALL);
+ }
+ AL = reverse(ALL);
+ }
+ return AL; /* AL[0][1] : reduced GRS, R==0 -> rigid */
+ }
+
+ if(T == 2 || T == 4 || T == 11){
+ for(I = (T==2)?2:1; I >= (T==11)?0:1; I--){
+ ALT = M[I];
+ if(ALT[length(ALT)-1][0] != 1){
+ mycat(["multiplicity for",I,":",ALT[length(ALT)-1][1],
+ "should be 1"]);
+ return;
+ }
+ }
+ }
+ LA++;
+ NM = DN = [];
+
+/* Three term relation */
+ if(T == 11){
+ if(R > 0){
+ print("This is not rigid\n");
+ return 0;
+ }
+ for(I = 0; I <= LA; I++){
+ if(I > 0){
+ AI = AL[I][0]; /* operation */
+ if(AI[0] != 0){
+ DN = cons(simplify(AI1+1,Fuc,4),DN);
+ NM = cons(simplify(AI1+AI[0]+1,Fuc,4),NM);
+ }
+ }
+ ALT = AL[I][1][1]; AI1 = ALT[length(ALT)-1][1];
+ }
+ DNT = lsort(NM,DN,"reduce");
+ if(TeX < 0) return DNT;
+ NMT = DNT[0]; DNT = DNT[1];
+ Out = str_tb("u_{0,0,0}-u_{+1,0,-1}=\\frac{","");
+ for(PT = NMT; PT != []; PT = cdr(PT))
+ str_tb(["(",my_tex_form(car(PT)),")"], Out);
+ str_tb(["}\n{"],Out);
+ for(PT = DNT; PT != []; PT = cdr(PT))
+ str_tb(["(",my_tex_form(car(PT)),")"], Out);
+ write_to_tb("}u_{0,+1,-1}",Out);
+ if(Dviout >= 0){
+ dviout(Out|eq=0,keep=Keep);
+ return 1;
+ }
+ return Out;
+ }
+
+ AD=newvect(NP);
+ for(I = 0; I <= LA; I++){
+ if(I > 0){
+ AI = AL[I][0]; /* operation */
+ if(T == 2 && AI[0] != 0){
+ DN = cons(simplify(-AI2,Fuc,4), cons(simplify(AI1+1,Fuc,4),DN));
+ NM = cons(simplify(-AI2-AI[0],Fuc,4), cons(simplify(AI1+AI[0]+1,Fuc,4),
+ NM));
+ }
+ for(J = 1; J < NP; J++)
+ AD[J] += simplify(AI[J],Fuc,4);
+ }
+ if(T == 2){
+ ALT = AL[I][1][1]; AI1 = ALT[length(ALT)-1][1];
+ ALT = AL[I][1][2]; AI2 = ALT[length(ALT)-1][1];
+ if(I == 0){
+ C3 = AI1; C4 = AI2;
+ }
+ }
+ }
+
+/* Connection */
+ if(T == 2){
+ DNT = lsort(NM,DN,"reduce");
+ NMT = DNT[0]; DNT = DNT[1];
+ if(TeX < 0) return [NMT,DNT,AD];
+ C0 = M[1][length(M[1])-1][1];
+ C1 = M[2][length(M[2])-1][1];
+ M = AL[0][1];
+ C3 = M[1][length(M[1])-1][1];
+ C4 = M[2][length(M[2])-1][1];
+ Out = str_tb(["c(0\\!:\\!", my_tex_form(C0),
+ " \\rightsquigarrow 1\\!:\\!", my_tex_form(C1),")"], "");
+ if(R > 0 && AMSTeX == 1 && (TeXEq == 4 || TeXEq == 5)){
+ write_to_tb("\\\\\n", Out);
+ if(TeXEq == 5) write_to_tb(" &", Out);
+ }
+ write_to_tb("=\\frac{\n",Out);
+ for(PT = NMT; PT != []; PT = cdr(PT))
+ write_to_tb(" \\Gamma("+my_tex_form(car(PT))+")\n", Out);
+ write_to_tb(" }{\n",Out);
+ for(PT = DNT; PT != []; PT = cdr(PT))
+ write_to_tb(" \\Gamma("+my_tex_form(car(PT))+")\n",Out);
+ write_to_tb(" }", Out);
+ for(J = 3; J < length(AD); J++){
+ if(AD[J] == 0) continue;
+ str_tb(["\n (1-x_", rtotex(J), "^{-1})^", rtotex(AD[J])], Out);
+ }
+ if(R != 0)
+ str_tb(["\n c_B(0\\!:\\!", my_tex_form(C3),
+ " \\rightsquigarrow 1\\!:\\!", my_tex_form(C4), ")"], Out);
+ Out = tb_to_string(Out);
+ if(Dviout >= 0){
+ dviout(Out|eq=0,keep=Keep);
+ return 1;
+ }
+ return Out;
+ }
+
+/* Series */
+ if(T == 4){
+ AL11 = AL[0][1][1];
+ V = AL11[length(AL11)-1][1];
+ S00 = -V; S01 = (R==0)?[]:[[0,0]];
+ S1 = S2 = [];
+ for(Ix = 1, ALL = cdr(AL); ALL != []; ){
+ ALT = ALL[0][0];
+ if(ALT[0] != 0){ /* mc */
+ for(Sum = [], ST = S01; ST != []; ST = cdr(ST))
+ Sum = cons(car(ST)[0], Sum);
+ S1 = cons(cons(S00+1,Sum), S1);
+ S2 = cons(cons(S00+1+ALT[0],Sum),S2);
+ S00 += ALT[0];
+ }
+ ALL = cdr(ALL);
+ for(I = 1; I < length(ALT); I++){ /* addition */
+ if(I == 1){
+ S00 += ALT[1];
+ if(ALL == [])
+ S00 = [S00];
+ }else{
+ if(ALT[I] == 0)
+ continue;
+ if(ALL != []){
+ S1 = cons([-ALT[I],Ix],S1);
+ S2 = cons([1,Ix],S2);
+ S01= cons([Ix,I],S01);
+ Ix++;
+ }else
+ S00 = cons([ALT[I],I],S00);
+ }
+ }
+ }
+ S00 = reverse(S00);
+ S01 = qsort(S01); S1 = qsort(S1); S2 = qsort(S2);
+ if(Simp >= 0){
+ S00 = simplify(S00,Fuc,4);
+ S01 = simplify(S01,Fuc,4);
+ S1 = simplify(S1,Fuc,4);
+ S2 = simplify(S2,Fuc,4);
+ SS = lsort(S1,S2,"reduce");
+ S1 = SS[0]; S2 = SS[1];
+ }
+
+ if(TeX >= 0){
+ /* Top linear power */
+ TOP = Ps = Sm = "";
+ for(TOP = Ps = Sm = "", ST = cdr(S00); ST != []; ST = cdr(ST)){
+ SP = car(ST);
+ if(SP[0] != 0){
+ if(SP[1] == 2)
+ TOP += "(1-x)^"+rtotex(SP[0]);
+ else
+ TOP += "(1-x/x_"+rtotex(SP[1])+")^"+rtotex(SP[0]);
+ }
+ }
+ /* Top power */
+ PW = my_tex_form(car(S00));
+ if(PW == "0")
+ PW = "";
+ NP = length(AL[0][1]);
+ PWS = newvect(NP);
+ for(I = 0; I < NP; I++)
+ PWS[I] = "";
+ for(S = S01, I = 0; S != []; S = cdr(S), I++){
+ SI = rtotex(car(S)[0]);
+ if(I > 0) Sm += ",\\ ";
+ Sm += "n_"+SI+"\\ge0";
+ if(PW != "")
+ PW += "+";
+ PW += "n_"+SI;
+ if(car(S)[1] > 2)
+ PWS[car(S)[1]] += "-n_"+rtotex(car(S)[0]);
+ else if(car(S)[1] == 0)
+ Ps = "C_{n_0}"+Ps;
+ }
+ for(I = 3; I < NP; I++){
+ if(PWS[I] != "")
+ Ps += "x_"+rtotex(I)+"^{"+PWS[I]+"}";
+ }
+ Out = str_tb([TOP, Ps, "x^{", PW, "}"], "");
+ /* Gamma factor */
+ for(I = 0, SS = S1; I <= 1; I++, SS = S2){
+ PW = string_to_tb("");
+ for(PW1=""; SS != [] ; SS = cdr(SS)){
+ for(J = 0, SST = car(SS); SST != []; SST = cdr(SST), J++){
+ if(J == 0){
+ JJ = (car(SST) == 1)?((length(SST)==2)?(-1):0):1;
+ if(JJ > 0)
+ str_tb(["(", my_tex_form(car(SST)), ")_{"], PW);
+ else if(JJ == 0)
+ PW1 = "(";
+ }else{
+ if(JJ > 0){
+ if(J > 1) write_to_tb("+", PW);
+ str_tb(["n_", rtotex(car(SST))], PW);
+ }else{
+ if(J > 1) PW1 += "+";
+ PW1 += "n_"+rtotex(car(SST));
+ }
+ }
+ }
+ if(JJ > 0) write_to_tb("}", PW);
+ else PW1 += (JJ == 0)?")!":"!";
+ }
+ if(I == 0)
+ Out0 = "\\frac";
+ Out0 += "{"+tb_to_string(PW)+PW1+"}";
+ PW = string_to_tb(""); PW1 = "";
+ }
+ if(Out0 == "\\frac{}{}")
+ Out0 = "";
+ Out = "\\sum_{"+Sm+"}"+Out0 + Top + tb_to_string(Out);
+ if(length(S01) == 1){
+ Out = str_subst(Out, "{n_"+SI+"}", "n");
+ Out = str_subst(Out, "n_"+SI, "n");
+ }
+ if(Dviout >= 0)
+ dviout(Out|eq=0,keep=Keep);
+ return Out;
+ }
+ return [cons(S00, S01), S1, S2];
+ }
+
+/* Operator */
+ if(T==3){
+ Fuc0 = car(Fuc);
+ if(Fuc0 != 0){ /* Kill Fuchs relation */
+ for(V = vars(Fuc0); V != []; V = cdr(V)){
+ VT = car(V);
+ if(deg(Fuc0,VT) == 1){
+ AL = mysubst(AL, [VT, -red(coef(Fuc0,0,VT)/coef(Fuc0,1,VT))]);
+ break;
+ }
+ }
+ if(V == []){
+ print("Fuchs condition has no variable with degree 1");
+ return 0;
+ }
+ }
+ L = newvect(NP);
+ Pt = getopt(pt);
+ for(I = NP-1; I >= 1; I--){
+ if(type(Pt) == 4)
+ L[I] = Pt[I-1];
+ else if(I >= 3 || X1 >= 0 || (X2 >= 0 && I >= 2))
+ L[I] = makev(["x_", I]);
+ else L[I] = I-1;
+ }
+ if(R){ /* non-rigid basic */
+ MM = AL[0][1]; /* Riemann scheme */
+ for(OD = 0, MT = car(MM); MT != []; MT = cdr(MT))
+ OD += car(MT)[0];
+ for(V = DN = [], M = MM; M != []; M = cdr(M)){
+ MT = car(M); /* exponents */
+ for(K = KM = 0, NT = []; ; K++){
+ for(J = 0, P = 1, MTT = MT; MTT != []; MTT = cdr(MTT)){
+ if(J == 0 && car(MTT)[1] == 0)
+ KM = car(MTT)[0];
+ for(KK = car(MTT)[0] - K -1; KK >= 0; KK--)
+ P *= (dx-car(MTT)[1]-KK);
+ }
+ if(P == 1) break;
+ NT = cons(P,NT);
+ }
+ V = cons(reverse(NT), V);
+ DN = cons(KM, DN);
+ }
+ V = ltov(reverse(V)); /* conditions for GRS */
+ DN = ltov(reverse(DN)); /* dims of local hol. sol. */
+ for(J = OD; J >= 0; J--){
+ for(I = Q = 1; I < NP; I++){
+ if(J > DN[I])
+ Q *= (x-L[I])^(J-DN[I]);
+ }
+ K = mydeg(Q,x);
+ if(J == OD){
+ P = Q*dx^J;
+ DM = K;
+ }else{
+ for(I = DM-OD+J-K; I >= 0; I--){
+ X = makev(["r",J,"_",I]);
+ P += Q*x^I*X*dx^J;
+ }
+ }
+ }
+ for(R = [], I = 0; I < NP; I++){
+ Q = toeul(P, [x,dx], (I==0)?"infty":L[I]); /* Euler at I-th pt */
+ for(VT = V[I], J=0; VT != [] ; VT = cdr(VT), J++){
+ if(car(VT) != 0)
+ R = cons(rpdiv(coef(Q,J,x), car(VT), dx)[0], R); /* equations */
+ }
+ }
+ for(RR = RRR = [], I = OD-1; I>=0; I--){
+ RR = [];
+ for(RT = R; RT != [] ; RT = cdr(RT)){
+ if( (VT = mycoef(car(RT), I, dx)) != 0)
+ RR = cons(VT, RR); /* real linear eqs */
+ }
+ J = mydeg(mycoef(P,I,dx),x);
+ for(S = 0, VVV = []; J >= 0; J--){
+ X = makev(["r",I,"_",J]);
+ VVV = cons(X, VVV); /* unknowns */
+ }
+ RR = lsol(RR,VVV);
+ LN = length(RR);
+ for(K=0; K<LN; K++){
+ RRT = RR[K];
+ if(type(RRT) != 4) continue;
+ R = mysubst(R,RRT);
+ P = mysubst(P,RRT);
+ }
+ }
+ }else /* Rigid case */
+ P = dx^(AL[0][1][0][0][0]);
+ /* additions and middle convolutions */
+ for(ALT = AL; ALT != []; ALT = cdr(ALT)){
+ AI = car(ALT)[0];
+ if(type(AI) != 4) continue;
+ V = ltov(AI);
+ if(V[0] != 0) P = mc(P,x,V[0]);
+ for(I = 1; I < NP; I++){
+ if(V[I] != 0)
+ P = sftexp(P,x,L[I],-V[I]);
+ }
+ }
+ P = (Simp>=0)? simplify(P,Fuc,4|var=[dx]):simplify(P,Fuc,4);
+ if(TeX >= 0){
+ Val = 1;
+ if(mydeg(P,dx) > 2 && AMSTeX == 1 && TeXEq > 3)
+ Val = (TeXEq==5)?3:2;
+ Out = fctrtos(P|var=[dx,"\\partial"],TeX=Val);
+ if(Dviout < 0) return Out;
+ dviout(Out|eq=0,keep=Keep);
+ return 1;
+ }
+ return P;
+ }
+ return 0;
+}
+
+def mcop(P,M,S)
+{
+ for(V=[],ST=S;ST!=[];ST=cdr(ST))
+ if(isvar(VT=car(ST))) V=cons(vweyl(VT),V);
+ V=reverse(V);
+ N=length(V);
+ for(MT=M;MT!=[];MT=cdr(MT)){
+ T=car(MT);
+ if(T[0]!=0)
+ P=mc(P,V[0],T[0]);
+ for(TT=cdr(T),ST=cdr(S);ST!=[];TT=cdr(TT),ST=cdr(ST))
+ if(car(TT)!=0) P=sftpexp(P,V,S[0]-ST[0],-car(TT));
+ }
+ return P;
+}
+
+/* option: zero, all, raw */
+def shiftop(M,S)
+{
+ if(type(M)==7) M=s2sp(M);
+ if(type(S)==7) S=s2sp(S);
+ Zero=getopt(zero);
+ NP=length(M);
+ for(V=L=[],I=NP-1; I>=0; I--){
+ V=cons(strtov(asciitostr([97+I])),V);
+ if(I>2) L=cons(makev(["y_", I-1]),L);
+ else L=cons(I-1,L);
+ }
+ if(type(M[0][0])==4){
+ F=1;RS=M;SS=S;
+ R=chkspt(M);
+ if(R[2]!=2 || R[3]!=0){
+ mycat("GRS is not valid!");return 0;
+ }
+ for(; S!=[]; S=cdr(S)){
+ if(nmono(S[0][0])!=1) break;
+ if(isint(S[0][1]-S[0][0])==0) break;
+ }
+ if(S!=[]){
+ mycat("Error in shift!"); return 0;
+ }
+ }else{
+ F=0;
+ RS=sp2grs(M,V,[1,length(M[0]),1]);
+ for(SS=S0=[],I=0; I<NP; I++){
+ for(J=F=0; J<length(M[I]); J++){
+ if(I==0 && J==length(M[0])-1) break;
+ if((U=S[I][J])!=0){
+ if(isint(U)!=1){
+ mycat("Error in shift!"); return 0;
+ }
+ VT=RS[I][J][1];
+ SS=cons([VT,VT+U],SS);
+ }else if(I>0 && Zero==1 && F==0){
+ RS=mysubst(RS,[RS[I][J][1],0]);
+ F=J+1;
+ }
+ }
+ if((F>0 && J==2) || (I==0 && J==1)){
+ J=(I==0)?0:2-F; VT=RS[I][J][1];
+ S0=cons([VT,strtov(asciitostr([strtoascii(rtostr(VT))[0]]))],S0);
+ }
+ }
+ }
+ RS1=mysubst(RS,SS);
+ if(F==1){
+ R=chkspt(RS1);
+ if(R[2]!=2 || R[3]!=0){
+ mycat("Error in shift!");
+ return 0;
+ }
+ }
+ R=getbygrs(RS,1); R1=getbygrs(RS1,1);
+ RT=R[0][1][0];
+ if(length(RT)!=1 || RT[0][0]!=1){
+ mycat("Not rigid!");
+ return 0;
+ }
+ P=dx;Q=Q1=1;
+ for(RT = R, RT1=R1; RT != []; RT = cdr(RT), RT1=cdr(RT1)){
+ V=car(RT)[0]; V1=car(RT1)[0];
+ if(type(V) != 4) continue;
+
+ if(V[0] != 0){
+ P = mc(P,x,V[0]); /* middle convolution */
+ QT = mc(Q,x,V[0]);
+ }else QT=Q;
+ D0=mydeg(Q,dx);D0T=mydeg(QT,dx);
+ C0=red(mycoef(Q,D0,dx)/mycoef(QT,D0T,dx));
+ if(C0!=1) QT=red(C0*QT);
+
+ if(V1[0] != 0) Q1T = mc(Q1,x,V1[0]);
+ else Q1T=Q1;
+ D1=mydeg(Q1,dx);D1T=mydeg(Q1T,dx);
+ C1=red(mycoef(Q1,D1,dx)/mycoef(Q1T,D1T,dx));
+ if(C1!=1) Q1T=red(C1*Q1T);
+ DD=(V[0]-V1[0])+(D0-D0T)-(D1-D1T);
+ if(DD>0){
+ QT=muldo(dx^DD,QT,[x,dx]);
+ D0T+=DD;
+ }else if(DD<0){
+ Q1T=muldo(dx^(-DD),Q1T,[x,dx]);
+ D1T-=DD;
+ }
+ C=mylcm(dn(QT),dn(Q1T),x);
+ if(C!=1){
+ QT=red(C*QT); Q1T=red(C*Q1T);
+ }
+ Q=QT;Q1=Q1T;
+ for(I = 1; I < NP; I++){
+ if(V[I]!=0){
+ P = sftexp(P,x,L[I],-V[I]); /* addition u -> (x-L[I])^V[I]u */
+ QT = sftexp(QT,x,L[I],-V[I]);
+ }
+ if(V1[I]!=0)
+ Q1T = sftexp(Q1T,x,L[I],-V1[I]);
+ }
+ C=red(mycoef(QT,D0T,dx)*mycoef(Q1,D1T,dx)/(mycoef(Q,D0T,dx)*mycoef(Q1T,D1T,dx)));
+ Q=red(dn(C)*QT);Q1=red(nm(C)*Q1T);
+ for(I = 1; I < NP; I++){
+ if((J=V[I]-V1[I])!=0){
+ if(J>0) Q1*=(x-L[I])^J;
+ else Q*=(x-L[I])^(-J);
+ }
+ while((QT=tdiv(Q,x-L[I]))!=0){
+ if((Q1T=tdiv(Q1,x-L[I]))!=0){
+ Q=QT;Q1=Q1T;
+ }else break;
+ }
+ }
+ }
+ P1=mysubst(P,SS);
+ if(type(S0)==4 && S0!=[]){
+ P=mysubst(P,S0); Q=mysubst(Q,S0);
+ P1=mysubst(P1,S0); Q1=mysubst(Q1,S0);
+ RS=mysubst(RS,S0); RS1=mysubst(RS1,S0);
+ }
+ R=mygcd(Q1,P1,[x,dx]);
+ if(findin(dx,vars(R[0]))>=0){
+ mycat("Some error!");
+ return 0;
+ }
+ Q=muldo(R[1]/R[0],Q,[x,dx]);
+ R=divdo(Q,P,[x,dx]);
+ Q=red(R[1]/R[2]);
+ R=fctr(nm(Q));
+ QQ=Q/R[0][0];
+ R1=fctr(dn(QQ));
+ for(RR=cdr(R1); RR!=[]; RR=cdr(RR)){
+ VT=vars(car(RR)[0]);
+ if(findin(x,VT)<0 && findin(dx,VT)<0){
+ for(I=car(RR)[1];I>0;I--) QQ=red(QQ*car(RR)[0]);
+ }
+ }
+ Raw=getopt(raw);
+ Dviout=getopt(dviout);
+ if(Dviout==1) Raw=4;
+ if(Raw!=1){
+ for(RR=cdr(R); RR!=[]; RR=cdr(RR)){
+ VT=vars(car(RR)[0]);
+ if(findin(x,VT)<0 && findin(dx,VT)<0){
+ for(I=car(RR)[1];I>0;I--) QQ=red(QQ/car(RR)[0]);
+ }
+ }
+ }
+ if(Raw==2||Raw==3||Raw==4){
+ R=mygcd(QQ,P,[x,dx]); /* R[0]=R[1]*QQ + R[2]*P */
+ Q1=red(R[0]/R[2]);
+ for(Q=1,RR=cdr(fctr(nm(Q1))); RR!=[]; RR=cdr(RR)){
+ VT=vars(car(RR)[0]);
+ if(findin(x,VT)<0){
+ for(I=car(RR)[1];I>0;I--) Q*=car(RR)[0];
+ }
+ }
+ if(Raw==3) QQ=[QQ,Q];
+ else if(Raw==4) /* Q=Q*R[1]/R[0]*QQ+Q/R[0]*P */
+ QQ=[QQ,Q,red(R[1]*Q/R[0])];
+ else QQ=Q;
+ }
+ F=getopt(all);
+ if(Dviout==1){
+ Pre = " x=\\infty & 0 & 1";
+ for(I=3; I<NP; I++) Pre = Pre+"& "+rtostr(L[I]);
+ Pre = Pre+"\\\\\n";
+ PW=str_tb(ltotex(RS|opt="GRS",pre=Pre),0);
+ str_tb(
+"=\\{u\\mid Pu=0\\}\\\\\n&\\underset{Q_2}{\\overset{Q_1}{\\rightleftarrows}}\n",PW);
+ str_tb([ltotex(RS1|opt="GRS",pre=Pre),"\\\\\n"],PW);
+ R=fctrtos(QQ[0]|TeX=3,var=[dx,"\\partial"]);
+ if(type(R)==4) R="\\frac1{"+R[1]+"}"+R[0];
+ str_tb(["Q_1&=",R,"\\\\\n"],PW);
+ R=fctrtos(QQ[2]|TeX=3,var=[dx,"\\partial"]);
+ if(type(R)==4) R="\\frac1{"+R[1]+"}"+R[0];
+ str_tb(["Q_2&=",R,"\\\\\n"],PW);
+ str_tb(["Q_2Q_1&\\equiv ",fctrtos(QQ[1]|TeX=3),"\\mod W(x)P"],PW);
+ if(F==1)
+ str_tb(["\\\\\nP&=",fctrtos(P|TeX=3,var=[dx,"\\partial"])],PW);
+ dviout(str_tb(0,PW)|eq=0,title="Shift Operator");
+ }
+ if(F==1) return [QQ,P,RS,P1,RS1];
+ else if(F==0) return QQ;
+ return [QQ,P,RS];
+}
+
+def conf1sp(M)
+{
+ if(type(M)==7) M=s2sp(M);
+ L0 = length(M);
+ L1 = length(M[L0-1]);
+ X2 = getopt(x2);
+ Conf= getopt(conf);
+ if(Conf != 0)
+ Conf = -1;
+ if((X2==1 || X2==-1) && Conf != 0){
+ X1 = 0;
+ X = x_1;
+ }else{
+ X1 = 1;
+ X = x_2;
+ }
+ G = sp2grs(M,a,[L0,L1]);
+ for(I = 0; I < L0-1; I++){
+ V = makev([a,I-Conf,0]);
+ G = subst(G,V,0);
+ }
+ L2 = length(M[1]);
+ for(I=J=S0=S1=0; I < L2; I++){
+ S1 += G[1][I][0];
+ while(S0 < S1){
+ S0 += G[0][J][0];
+ if((V=G[0][J][1]) != 0)
+ G = mysubst(G,[V,V-G[1][I][1]]);
+ J++;
+ }
+ if(S0 > S1){
+ print("Error in data!");
+ return 0;
+ }
+ }
+ if(Conf==0){
+ for(L=[], I=L0-2; I>=0; I--)
+ L=cons(I,L);
+ L=cons(L0-1,L);
+ P = getbygrs(G,["operator","x2"]|perm=L);
+ }else if(X1)
+ P = getbygrs(mperm(G,[[1,2]],[]), ["operator","x2"]);
+ else
+ P = getbygrs(G,["operator","x1"]);
+ if(Conf==0)
+ P=nm(mysubst(P,[X,c]));
+ else{
+ P = nm(mysubst(P,[X,1/c]));
+ if(X2==-1){
+ for(I=2; I<L0; I++){
+ V=makev(["x_",I]); VC=makev([c,I]);
+ P = nm(mysubst(P,[V,1/VC]));
+ }
+ }
+ }
+ for(I = 1; I < L2; I++){
+ X = G[1][I][1];
+ P = nm(mysubst(P,[X,X/c]));
+ }
+ VS = vars(P);
+ while(VS!=[]){
+ V = car(VS);
+ if(str_chr(rtostr(V),0,"r")==0){
+ CV = mycoef(P,1,V);
+ D = mymindeg(CV,c);
+ if(D > 0) P = mysubst(P,[V,V/c^D]);
+ CV = mycoef(P,1,V);
+ DD = mydeg(CV,dx);
+ CVV = mycoef(CV,DD,dx);
+ CD1 = mydeg(CVV,x);
+ CD = (X==x1)?0:CD1;
+ while(CD>=0 && CD<=CD1){
+ CC = mycoef(CVV,CD,x);
+ if(type(CC)==1){
+ VT = mycoef(mycoef(mycoef(P,DD,dx),CD,x),0,V)/CC;
+ if(VT != 0) P = mysubst(P,[V,V-VT]);
+ break;
+ }
+ if(X==x1) CD++;
+ else CD--;
+ }
+ while(subst(P,c,0,V,0) == 0)
+ P = red(mysubst(P,[V,c*V])/c);
+ }
+ VS =cdr(VS);
+ }
+ return P;
+}
+
+def pgen(L,VV)
+{
+ if(type(L[0])<4) L=[L];
+ if(type(L)==4) L=ltov(L);
+ K=length(L);
+ V=newvect(K);
+ if(type(Sum=getopt(sum))!=1) Sum=0;
+ if((Num=getopt(num))!=1) Num=0;
+ if((Sep=getopt(sep))!=1) Sep=0;
+ if(type(Shift=getopt(shift))!=1) Shift=0;
+ for(;;){
+ for(PP=1,R=[],II=K-1; II>=0; II--){
+ R=cons(V[II]+Shift,R);
+ if(II>0 && Sep==1) R=cons("_",R);
+ PP*=L[II][0]^V[II];
+ }
+ P+=makev(cons(VV,R)|num=Num)*PP;
+ for(I=0;I<K;){
+ if(++V[I]<=L[I][1]){
+ if(Sum>0){
+ for(S=II=0;II<K;) S+=V[II++];
+ if(S>Sum){
+ V[I++]=0;
+ continue;
+ }
+ }
+ }else{
+ V[I++]=0;
+ continue;
+ }
+ break;
+ }
+ if(I>=K) return P;
+ }
+}
+
+def diagm(M,A)
+{
+ return mgen(M,0,A,1);
+}
+
+def mgen(M,N,A,S)
+{
+ if(M==0 && N==0){
+ mycat([
+"mgen(m,n,a,s|sep=1) : generate a matrix of size m x n\n",
+" n : a number or \"diagonal\", \"highdiag\", \"lowdiag\",\"skew\",\"symmetric\",\"perm\" = 0,-1,-2,..\n",
+" a : a symbol or list (ex. a, [a], [a,b,c], [1,2,3])\n",
+" s : 0 or 1 (shift of suffix)\n"
+ ]);
+ return 0;
+ }
+ if(type(N)==7) N=-findin(N,["diag","highdiag","lowdiag","skew","symmetric","perm"]);
+ Sep=(getopt(sep)==1)?1:0;
+ if(S < 0 || S > 2)
+ S = 0;
+ if(M+S > 30 || N+S > 30){
+ erno(1);
+ return;
+ }
+ if(N==-5){
+ NM=newmat(M,M);
+ for(I=0;I<M;I++,A=cdr(A)) NM[I][car(A)-S]=1;
+ return NM;
+ }
+ if(type(A) == 4)
+ L = length(A)-1;
+ else
+ L = -1;
+ if(N <= 0 && N >= -2){
+ MM = newmat(M,M);
+ J = K = 0;
+ if(N == -1){
+ K = 1; M--;
+ }else if(N == -2){
+ J = 1; M--;
+ }
+ for(I = 0; I < M; I++){
+ if(L >= 0)
+ MM[I+J][I+K] = A[(I > L)?L:I];
+ else if(type(A)==7 || isvar(A))
+ MM[I+J][I+K] = makev([A,S+I]|sep=Sep);
+ else
+ MM[I+J][I+K] = A;
+ }
+ return MM;
+ }
+ K = N;
+ if(K < 0) N = M;
+ MM = newmat(M,N);
+ for(I = 0; I < M; I++){
+ if(L >= 0)
+ AA = rtostr(A[(I > L)?L:I]);
+ else
+ AA = rtostr(A)+rtostr(I+S);
+ if(AA>="0" && AA<=":"){
+ erno(0); return;
+ }
+ for(J = 0; J < N; J++){
+ if(K < 0){
+ if(I > J) continue;
+ if(K == -3 && I == J) continue;
+ }
+ MM[I][J] = makev([AA,J+S]|sep=Sep);
+ }
+ }
+ if(K < 0){
+ for(I = 0; I < M; I++){
+ for(J = 0; J < I; J++)
+ MM[I][J] = (K == -4)?MM[J][I]:-MM[J][I];
+ }
+ }
+ return MM;
+}
+
+def newbmat(M,N,R)
+{
+ S = newvect(M);
+ T = newvect(N);
+ IM = length(R);
+ for(I = 0; I < IM; I++){
+ RI = R[I];
+ JM = length(RI);
+ for(J = 0; J < JM; J++){
+ RIJ = RI[J];
+ if(type(RIJ) == 6){
+ S[I] = size(RIJ)[0];
+ T[J] = size(RIJ)[1];
+ }
+ }
+ }
+ for(I = K = 0; I < M; I++){
+ if(S[I] == 0)
+ S[I] = 1;
+ K += S[I];
+ }
+ for(J = L = 0; J < N; J++){
+ if(T[J] == 0)
+ T[J] = 1;
+ L += T[J];
+ }
+ M = newmat(K,L);
+ if(type(Null=getopt(null))>0){
+ for(I=0;I<K;I++){
+ for(J=0;J<L;J++) M[I][J]=Null;
+ }
+ }
+ for(I0 = II = 0; II < IM; I0 += S[II++]){
+ RI = R[II];
+ JM = length(RI);
+ for(J0 = JJ = 0; JJ < JM; J0 += T[JJ++]){
+ if((RIJ = RI[JJ]) == 0)
+ continue;
+ Type = type(RIJ);
+ for(I = 0; I < S[II]; I++){
+ for(J = 0; J < T[JJ]; J++){
+ if(Type == 6)
+ M[I0+I][J0+J] = RIJ[I][J];
+ else if(Type == 4 || Type == 5)
+ M[I0+I][J0+J] = (I>0)?RIJ[I]:RIJ[J];
+ else
+ M[I0+I][J0+J] = RIJ;
+ }
+ }
+ }
+ }
+ return M;
+}
+
+def unim(S)
+{
+ if(!Rand++) random(currenttime());
+ if(!isint(Wt=getopt(wt))||Wt<0||Wt>10) Wt=2;
+ if(!isint(Xa=getopt(abs)) || Xa<1)
+ Xa=9;
+ if((Xaa=Xa)>10) Xaa=10;
+ if(Xaa%2) Xaa++;
+ Xh=Xaa/2;
+ if(type(S0=SS=S)==4){
+ Int=(getopt(int)==1)?1:0;
+ U=[1,1,1,1,1,1,1,1,1,1,1,1,2,2,3,4];
+ M=newmat(S[0],S[1]);
+ SS=cdr(S);SS=cdr(SS);
+ if(Rk=length(SS)) L=SS;
+ else{
+ L=[0];
+ I=(S[0]>S[1])?S[1]:S[0];
+ if(I<=2) return 0;
+ if(!isint(Rk=getopt(rank))||Rk<1||Rk>S[0]||Rk>S[1])
+ Rk=random()%(I-1)+2;
+ for(I=1;I<Rk;){
+ P=random()%(S[1]+Wt)-Wt;
+ if(P<=0) P=1;
+ if(findin(P,L)!=0){
+ L=cons(P,L);
+ I++;
+ }
+ }
+ }
+ L=ltov(qsort(L));
+ M[0][L[0]]=1;
+ for(I=1;I<Rk;I++){
+ P=Int?1:U[random()%length(U)];
+ if(P>Xa) P=Xa;
+ M[I][L[I]]=(random()%2)?P:(-P);
+ }
+ for(I=0;I<Rk;I++){
+ if(I!=0&&abs(M[I][L[I]])>1) M[K=random()%I][KK=L[I]]=1;
+ I0=(I==0)?1:L[I]+1;
+ I1=(I==Rk-1)?S[1]:L[I+1];
+ for(J=I0;J<I1;J++){
+ for(K=1;K<=Xa;K++){
+ P=random()%(I+1);
+ if((random()%2)==1) M[P][J]++;
+ else M[P][J]--;
+ }
+ }
+ }
+ S=M;
+ Res=(getopt(res)==1)?dupmat(S):0;
+ }
+ Conj=0;
+ if(type(S)<2){
+ if(S<2||S>20) return 0;
+ if(getopt(conj)==1){
+ M=S+Wt;
+ if(M>15) M=10;
+ M0=floor((M-1)/2);
+ for(R=[],I=0;I<S;I++) R=cons(random()%M-M0,R);
+ R=qsort(R);
+ M=diagm(S,R);
+ if(getopt(diag)!=1){
+ for(I=1;I<S;I++)
+ if(M[I-1][I-1]==M[I][I] && random()%2) M[I-1][I]=1;
+ }
+ if(M[0][0]==M[S-1][S-1]){
+ for(I=1;I<S;I++) if(M[I-1][I]==1) break;
+ if(I==S){
+ if(M[0][0]>0) M[0][0]--;
+ else M[S-1][S-1]++;
+ }
+ }
+ if(getopt(res)==1) RR=diagm(S,[1]);
+ S1=S;
+ Res=dupmat(S=M);
+ if(isint(I=getopt(int))&&I>1&&random()%I==0){
+ K=S[0][0];L=K+1;
+ for(I=1;I<S1;I++){
+ if(S[I][I]>L && S[I-1][I]==0 && (I==S1-1||S[I][I+1]==0)){
+ L=S[I][I];
+ if(RR){
+ RR[I][I]=L-K;RR[0][I]=1;
+ }
+ S[0][I]=1;
+ if(!(random()%3)) break;
+ }
+ }
+ if(random()%3==0){
+ for(I=0;I<S1-1;I++){
+ if(iand(S[I][I],1)&&S[I][I+1]==1){
+ for(J=I+2;J<S1&&S[I][J]==0;J++);
+ if(J<S1) continue;
+ for(J=I-1;J>=0&&S[J][I]==0;J--);
+ if(J>=0) continue;
+ S[I][I+1]=2;
+ for(J=0;J<S1;J++) RR[I][J]*=2;
+ break;
+ }
+ }
+ }
+ }
+ }else{
+ M=diagm(S,[1]);
+ S1=S;
+ }
+ }
+ if(type(S)==6){
+ M=dupmat(S);
+ S=size(S);
+ S1=S[1];S=S[0];
+ Nt=1;
+ if(getopt(conj)==1&&S==S1) Conj=1;
+ }
+ if(!isint(Ct=getopt(time)))
+ Ct=(S>3||S1>3)?100:200;
+ if(getopt(both)==1){
+ OL=delopt(getopt(),"both");
+ M=unim(mtranspose(M)|option_list=OL);
+ M=mtranspose(M);
+ }
+ Mx=20;
+ for(I=K=LL=0;I<Ct+Mx;I++){
+ P=random()%S;Q=random()%S;
+ if(3*K>Ct) T=random()%Xaa-Xh;
+ else if(5*K<Ct) T=random()%2-1;
+ else T=random()%4-2;
+ if(T>=0) T++;
+ if(P==Q) continue;
+ for(G=0,J=S1-1;J>=0;J--){
+ if((H=abs(M[Q][J]+M[P][J]*T))>Xa&&(!Conj||J!=P)) break;
+ if(K<Mx&&!Conj) G=igcd(G,H);
+ }
+ if(K<Mx && G>1) J=1;
+ if(J>0) continue;
+ if(J<0&&Conj==1){
+ for(J=S1-1;J>=0;J--)
+ if(J!=Q&&abs(M[J][P]-M[J][Q]*T)>Xa) break;
+ if(J<0&&abs(M[Q][P]-M[Q][Q]*T+M[P][P]*T-M[P][Q]*T^2)>Xa) J=1;
+ if(J<0&&M[P][P]==M[Q][Q]){
+ LF=0;
+ for(L=S1-1;J>=0;J--) if(L!=Q&&M[J][Q]!=0) LF++;
+ for(L=S1-1;J>=0;J--) if(L!=P&&M[P][J]!=0) LF++;
+ if(!LF) J=1;
+ }
+ }
+ if(J<0){
+ for(J=S1-1;J>=0;J--)
+ M[Q][J]+=M[P][J]*T;
+ if(Conj==1)
+ for(J=S1-1;J>=0;J--) M[J][P]-=M[J][Q]*T;
+ if(RR) for(J=S1-1;J>=0;J--) RR[Q][J]+=RR[P][J]*T;
+ K++;
+ }
+ if(K%5==0){
+ if(!Nt) M=mtranspose(M);
+ else if(!Conj&&K%2==0){
+ for(F=0;F<S;F++){
+ if((V=lgcd(M[F]))>1){
+ for(L=0;L<S1;L++) M[F][L]/=V;
+ }
+ }
+ }
+ }
+ if(I>Ct){
+ for(L=S-1;L>=0;L--){
+ for(F=0,J=S1-1;J>=0;J--)
+ if(M[L][J]!=0) F++;
+ if(F<2){
+ F=-1;break;
+ }
+ else F=0;
+ }
+ if(F<0 && LL++<5){
+ I=(CT-CT%2)/2;K=1;
+ }
+ if(I>Ct) break;
+ }
+ }
+ if(RR){
+ for(I=F=0;I<S1;I++){
+ V=Res[I][I];
+ for(J=I+1;J<S1;J++){
+ if(Res[J][J]!=V) break;
+ for(LP=0;LP<2;LP++){
+ if(J==S1-1||Res[J][J+1]==0){
+ if(I==0||Res[I-1][I]==0){
+ for(VL=VS=[],K=0;K<S1;K++){
+ VL=cons(RR[K][J],VL);VS=cons(RR[K][I],VS);
+ }
+ VR=ldev(VL,VS);
+ if(VR[0]){
+ for(K=S1-1,VN=VR[1];K>=0;K--,VN=cdr(VN))
+ RR[K][J]=car(VN);
+ F=1;
+ }
+ }
+ }
+ K=I;I=J;J=K;
+ }
+ }
+ if(F&&I==S1-1){
+ F=0;I=-1;
+ }
+ }
+ if(getopt(int)==1){
+ N=mtranspose(M);
+ for(F=I=0;I<S1;I++) if(lgcd(M[I])>1||lgcd(N[I])>1) F++;
+ if(F){
+ for(F=I=0;I<S1;I++){
+ if(Res[I][I]==-1) F=ior(F,1);
+ else if(Res[I][I]==1) F=ior(F,2);
+ }
+ C=0;
+ if(!iand(F,1)) C=1;
+ else if(!iand(F,2)) C=-1;
+ if(C){
+ for(I=0;I<S1;I++){
+ M[I][I]+=C;Res[I][I]+=C;
+ }
+ }
+ }
+ }
+ if(getopt(rep)!=1){
+ for(Lp=0;Lp<5;Lp++){
+ F=(M==Res||abs(lmax(RR))>Xa*10||abs(lmin(RR))>Xa*10)?1:0;
+ for(I=0;!F&&I<S1&&Lp<4;I++){
+ for(K=L=J=0;J<S1;J++){
+ if(M[I][J]) K++;
+ if(M[J][I]) L++;
+ }
+ if(K<2||L<2) F=1;
+ }
+ if(!F) break;
+ R=unim(S0|option_list=cons(["rep",1],getopt()));
+ M=R[0];Res=R[1];RR=R[3];
+ }
+ }
+ }
+ if(Res==0) return M;
+ if(RR){
+ for(I=K=V=0;I<S1;I++){
+ for(J=0;J<S1;J++){
+ if(RR[J][I]>0) V++;
+ else if(RR[J][I]<0) V--;
+ }
+ if(I<S1-1&&Res[I][I+1]!=0) continue;
+ if(V<0){
+ for(;K<=I;K++) RR=colm(RR,K,-1);
+ }
+ K=I+1;V=0;
+ }
+ }
+ if(getopt(rep)!=1){
+ if((F=getopt(dviout))==1){
+ if(getopt(conj)==1){
+ if(RR) show([Res,"=",myinv(RR),M,RR]|opt="spts0",str=1,lim=200);
+ }else{
+ if(type(Lim=getopt(lim))==1)
+ mtoupper(M,0|step=1,opt=7,dviout=1,pages=1,lim=Lim);
+ else mtoupper(M,0|step=1,opt=7,dviout=1,pages=1);
+ }
+ }else if(F==-1){
+ if(getopt(conj)==1){
+ if(RR) return ltotex([Res,"=",myinv(RR),M,RR]|opt="spts0",str=1,lim=200);
+ }else{
+ if(type(Lim=getopt(lim))==1)
+ return mtoupper(M,0|step=1,opt=7,pages=1,lim=Lim,dviout=-1);
+ else return mtoupper(M,0|step=1,opt=7,pages=1,dviout=-1);
+ }
+ }
+ }
+ if(RR==0) return[M,Res];
+ return [M,Res,myinv(RR),RR];
+}
+
+def pfrac(F,X)
+{
+ F = red(F);
+ FN = nm(F);
+ FD = dn(F);
+ if(mydeg(FD,X) == 0)
+ return [[F,1,1]];
+ R = rpdiv(FN,FD,X);
+ FN = R[0]/R[1];
+ R0 = R[2]/R[1];
+ FC = fctr(FD);
+ RT=[];
+ if(getopt(root)==2){
+ for(FE=[],FT=FC;FT!=[];FT=cdr(FT)){
+ if(mydeg(P=car(FT)[0],X)==4 && vars(P)==[X] && pari(issquare,C=mycoef(P,4,X))){
+ if((S=mycoef(P,3,X)/4/C)!=0) P=subst(P,X,X-S);
+ if(mycoef(P,1,X)==0 && pari(issquare,C0=mycoef(P,0,X))){
+ C=sqrtrat(C);C0=sqrtrat(C0);C1=2*C*C0-mycoef(P,2,X);
+ if(C1>0){
+ FE=cons([C*(X+S)^2-C1^(1/2)*(X+S)+C0,car(FT)[1]],FE);
+ FE=cons([C*(X+S)^2+C1^(1/2)*(X+S)+C0,car(FT)[1]],FE);
+ RT=cons(C1,RT);
+ continue;
+ }
+ }
+ }
+ FE=cons(car(FT),FE);
+ }
+ FC=reverse(FE);
+ }
+ N = Q = 0;
+ L = [];
+ for(I = length(FC)-1; I >= 0; I--){
+ if((D = mydeg(FC[I][0],X)) == 0) continue;
+ for(K=1; K<=FC[I][1]; K++){
+ for(J=P=0; J < D; J++){
+ V = makev(["zz_",++N]);
+ P = P*X + V;
+ L = cons(V,L);
+ }
+ Q += P/(FC[I][0]^K);
+ Q = red(Q);
+ }
+ }
+ L=reverse(L);
+ Q = nm(red(red(Q*FD)-FN));
+ Q = ptol(Q,X);
+ S = lsol(Q,L);
+ R = (R0==0)?[]:[[R0,1,1]];
+ for(N=0,I=length(FC)-1; I >= 0; I--){
+ if((D = mydeg(FC[I][0],X)) == 0) continue;
+ for(K=1; K<=FC[I][1]; K++){
+ for(P=J=0; J < D; N++,J++)
+ P = P*X + S[N][1];
+ if(P!=0) R = cons([P,FC[I][0],K],R);
+ }
+ }
+ for(;RT!=[];RT=cdr(RT)){
+ RTT=car(RT);
+ R=mtransbys(os_md.substblock,R,[RTT^(1/2),(RTT^(1/2))^2,RTT]);
+ }
+ TeX=getopt(TeX);
+ if((Dvi=getopt(dviout))==1||TeX==1){
+ V=strtov("0");
+ for(S=L=0,RR=R;RR!=[];RR=cdr(RR),L++){
+ RT=car(RR);
+ S+=(RT[0]/RT[1]^RT[2])*V^L;
+ }
+ if(TeX!=1) fctrtos(S|var=[V,""],dviout=1);
+ else return fctrtos(S|var=[V,""],TeX=3);
+ }
+ return reverse(R);
+}
+
+def cfrac(X,N)
+{
+ F=[floor(X)];
+ if(N<0){
+ Max=N=-N;
+ }
+ X-=F[0];
+ if(Max!=1)
+ M=mat([F[0],1],[1,0]);
+ for(;N>0 && X!=0;N--){
+ X=1/X;
+ F=cons(Y=floor(X),F);
+ X-=Y;
+ if(Max){
+ M0=M[0][0];M1=M[1][0];
+ M=M*mat([Y,1],[1,0]);
+ if(M[0][0]>Max) return M0/M1;
+ }
+ }
+ return (Max==0)?reverse(F):M[0][0]/M[1][0];
+}
+
+def sqrt2rat(X)
+{
+ if(type(X)>3) return X;
+ X=red(X);
+ if(getopt(mult)==1){
+ for(V=vars(X);V!=[];V=cdr(V)){
+ T=funargs(F=car(V));
+ if(type(T)==4&&length(T)>1){
+ Y=T[1];
+ Z=sqrt2rat(Y);
+ if(Y!=Z){
+ if(length(T)==2){
+ T0=T[0];
+ X=subst(X,F,T0(Z));
+ }else if(T[0]==pow)
+ X=subst(X,F,Y^T[2]);
+ }
+ }
+ }
+ }
+ for(V=vars(X);V!=[];V=cdr(V)){ /* r(x)^(1/2+n) -> r(x)^n*r(x)^(1/2) */
+ T=args(Y=car(V));
+ if(functor(Y)==pow&&T[1]!=1/2&&isint(T2=2*T[1])){
+ if(iand(T2,1)){
+ R=(T[0])^(1/2);T2--;
+ }else R=1;
+ R*=T[0]^(T2/2);
+ X=red(subst(X,Y,R));
+ }
+ }
+ D=dn(X);N=nm(X);
+ if(imag(D)!=0){
+ N*=conj(D);
+ D*=conj(D);
+ return sqrt2rat(N/D);
+ }
+ for(V=vars(N);V!=[];V=cdr(V)){ /* (r(x)^(n/m))^k */
+ T=args(Y=car(V));
+ if(functor(Y)==pow&&(T[1]==0||(type(T[1])==1&&ntype(T[1])==0))){
+ Dn=dn(T[1]);Nm=nm(T[1]);
+ N=substblock(N,Y,Y^Dn,T[0]^Nm);
+ }
+ }
+ for(V=vars(D);V!=[];V=cdr(V)){
+ T=args(Y=car(V));
+ if(functor(Y)==pow&&(T[1]==0||(type(T[1])==1&&ntype(T[1])==0))){
+ Dn=dn(T[1]);Nm=nm(T[1]);
+ D=substblock(D,Y,Y^Dn,T[0]^Nm);
+ }
+ }
+ for(V=vars(D);V!=[];V=cdr(V)){
+ T=args(Y=car(V));
+ if(functor(Y)==pow&&T[1]==1/2&&mydeg(D,Y)==1){
+ N*=mycoef(D,0,Y)-mycoef(D,1,Y)*Y;
+ N=mycoef(N,0,Y)+mycoef(N,1,Y)*Y+mycoef(N,2,Y)*T[0];
+ D=mycoef(D,0,Y)^2-mycoef(D,1,Y)^2*T[0];
+ X=red(N/D);
+ D=dn(X);N=nm(X);
+ break;
+ }
+ }
+ X=red(N/D);
+ D=dn(X);N=nm(X);
+ for(V=vars(D);V!=[];V=cdr(V)){
+ T=args(Y=car(V));
+ if(functor(Y)==pow&&T[1]==1/2)
+ D=substblock(D,T[0]^T[1],(T[0]^T[1])^2,T[0]);
+ }
+ for(V=vars(N);V!=[];V=cdr(V)){
+ T=args(Y=car(V));
+ if(functor(Y)==pow&&T[1]==1/2)
+ N=substblock(N,T[0]^T[1],(T[0]^T[1])^2,T[0]);
+ }
+ for(V=vars(N);V!=[];V=cdr(V)){
+ T=args(Y=car(V));
+ if(functor(Y)==pow&&T[1]==1/2){
+ Ag=T[0];
+ R=S=1;
+ An=fctr(nm(Ag));
+ CA=An[0][0];
+ if(CA<0){
+ CA=-CA;R=-1;
+ }
+ if(type(I=sqrtrat(CA))<2) S=I;
+ else R*=CA;
+ for(An=cdr(An);An!=[];An=cdr(An)){
+ Pw=car(An)[1];I=iand(Pw,1);
+ if(I) R*=car(An)[0];
+ if((Q=(Pw-I)/2)>0) S*=car(An)[0]^Q;
+ }
+ for(An=fctr(dn(Ag));An!=[];An=cdr(An)){
+ Pw=car(An)[1];I=iand(Pw,1);
+ if(I) R/=car(An)[0]^I;
+ if((Q=(Pw-I)/2)>0) S/=car(An)[0]^Q;
+ }
+ if(S!=1) N=subst(N,Y,R^(1/2)*S);
+ }
+ }
+ for(V=vars(N);V!=[];V=cdr(V)){
+ T=args(Y=car(V));
+ if(functor(Y)==pow&&T[1]==1/2){
+ C=mycoef(N,1,Y);
+ for(VC=vars(C);VC!=[];VC=cdr(VC)){
+ TC=args(YC=car(VC));
+ if(functor(YC)==pow&&TC[1]==1/2){
+ Ag=red(T[0]*TC[0]);
+ R=S=1;
+ An=fctr(nm(Ag));
+ CA=An[0][0];
+ if(CA<0){
+ CA=-CA;R=-1;
+ }
+ if(type(I=sqrtrat(CA))<2) S=I;
+ else R*=CA;
+ for(An=cdr(An);An!=[];An=cdr(An)){
+ Pw=car(An)[1];I=iand(Pw,1);
+ if(I) R*=car(An)[0];
+ if((Q=(Pw-I)/2)>0) S*=car(An)[0]^Q;
+ }
+ for(An=fctr(dn(Ag));An!=[];An=cdr(An)){
+ Pw=car(An)[1];I=iand(Pw,1);
+ if(I) R/=car(An)[0]^I;
+ if((Q=(Pw-I)/2)>0) S/=car(An)[0]^Q;
+ }
+ CC=mycoef(C,1,YC);
+ N=N-CC*YC*Y+CC*R^(1/2)*S;
+ }
+ }
+ }
+ }
+ return red(N/D);
+}
+
+def cfrac2n(X)
+{
+ if(type(L=getopt(loop))==1&&L>0)
+ C=x;
+ else{
+ C=0;L=0;
+ }
+ if(L>1){
+ for(Y=[];L>1;L--){
+ Y=cons(car(X),Y);
+ X=cdr(X);
+ }
+ if(X!=[]){
+ P=cfrac2n(X|loop=1);
+ for(V=P,Y=reverse(Y);Y!=[];Y=cdr(Y))
+ V=sqrt2rat(car(Y)+1/V);
+ return V;
+ }else{
+ C=0;X=reverse(Y);
+ }
+ }
+ for(V=C,X=reverse(X);X!=[];X=cdr(X)){
+ if(V!=0) V=1/V;
+ V+=car(X);
+ }
+ if(C!=0){
+ V=red(V);P=dn(V)*x-nm(V);
+ S=getroot(P,x|cpx=2);
+ T=map(eval,S);
+ V=(T[0]>0)?S[0]:S[1];
+ }
+ return V;
+}
+
+def s2sp(S)
+{
+ if(getopt(short)==1){
+ if(type(F=getopt(std))==1) S=s2sp(S|std=F);
+ if(type(S)!=7) S=s2sp(S);
+ L=strtoascii(S);
+ for(LS=[],F=C=0;L!=[];L=cdr(L)){
+ if((G=car(L))!=F){
+ LS=cons(G,LS);C=0;
+ }else if(C<3){
+ LS=cons(G,LS);
+ }else if(C==3){
+ LS=cdr(LS);LS=cdr(LS);
+ LS=cons(94,LS);LS=cons(52,LS);
+ }else if(C==9){
+ LS=cdr(LS);LS=cons(97,LS);
+ }else{
+ K=car(LS);LS=cdr(LS);LS=cons(K+1,LS);
+ }
+ C++;F=G;
+ }
+ return asciitostr(reverse(LS));
+ }
+ if(type(F=getopt(std))==1){
+ F=(F>0)?1:-1;
+ if(type(S)==7) S=s2sp(S);
+ for(L=[];S!=[];S=cdr(S))
+ L=cons(os_md.msort(car(S),[-1,0]),L);
+ return os_md.msort(L,[F,2]);
+ }
+ if(type(S)==7){
+ S = strtoascii(S);
+ if(type(S) == 5) S = vtol(S);
+ for(N=0,R=TR=[]; S!=[]; S=cdr(S)){
+ if(car(S)==45) /* - */
+ N=1;
+ else if(car(S)==47) /* / */
+ N=2;
+ if(N>0){
+ while(car(S)<48&&car(S)!=40) S=cdr(S);
+ }
+ if((T=car(S))>=48 && T<=57) TR=cons(T-48,TR);
+ else if(T>=97) TR=cons(T-87,TR);
+ else if(T>=65 && T<=90) TR=cons(T-29,TR); /* A-Z */
+ else if(T==44){
+ R=cons(reverse(TR),R);
+ TR=[];
+ }else if(T==94){ /* ^ */
+ S=cdr(S);
+ if(car(S)==40){ /* ( */
+ S=cdr(S);
+ for(T=0; car(S)!=41 && S!=[]; S=cdr(S)){
+ V=car(S)-48;
+ if(V>=10) V-=39;
+ T=10*T+V;
+ }
+ }else{
+ while(car(S)<48) S=cdr(S);
+ T=car(S)-48;
+ if(T>=10) T-=39;
+ }
+ while(--T>=1) TR=cons(car(TR),TR);
+ }else if(T==40){ /* ( */
+ S=cdr(S);
+ if(N==1){
+ N=0; NN=1;
+ }else NN=0;
+ if(car(S)==45){ /* - */
+ S=cdr(S);
+ NN=1-NN;
+ }
+ for(I=0; I<2; I++){
+ for(V=0; (SS=car(S))!=41 && SS!=47 && S!=[]; S=cdr(S)){
+ T=SS-48;
+ if(T>=10) T-=39;
+ V=10*V+T;
+ }
+ if(NN==1){
+ V=-V; NN=0;
+ }
+ TR=cons(V,TR);
+ if(SS!=47) break;
+ else{
+ N=2; S=cdr(S);
+ }
+ }
+ }else if(T==60){
+ for(V=[],S=cdr(S);S!=[]&&car(S)!=62;S=cdr(S))
+ V=cons(car(S),V);
+ if(car(S)!=62) continue;
+ TR=cons(eval_str(asciitostr(reverse(V))),TR);
+ }else if(T<48) continue;
+ if(N==1){
+ T = car(TR);
+ TR=cons(-T,cdr(TR));
+ N=0;
+ }else if(N==2){
+ T=car(TR); TR=cdr(TR);
+ TR=cons(car(TR)/T,cdr(TR));
+ N=0;
+ }
+ }
+ return reverse(cons(reverse(TR),R));
+ }else if(type(S)==4){
+ Num=getopt(num);
+ for(R=[]; ; ){
+ if(type(TS=car(S))!=4) return;
+ for(; TS!=[]; TS=cdr(TS)){
+ V=car(TS);
+ if(type(V)>1||(type(V)==1&&ntype(V)>0)){
+ V="<"+rtostr(V)+">";
+ R=append(reverse(strtoascii(V)),R);
+ continue;
+ }
+ if(dn(V)>1){
+ P=reverse(strtoascii(rtostr(V)));
+ R=append(P,cons(40,R));
+ R=cons(41,R);
+ continue;
+ }
+ if(V<0 && V>-10){
+ V=-V;
+ R=cons(45,R);
+ }
+ if(V<0 || V>35 || (V>9 && Num==1)){
+ P=reverse(strtoascii(rtostr(V)));
+ R=append(P,cons(40,R));
+ V=41;
+ }else if(V<10) V+=48;
+ else V+=87;
+ R=cons(V,R);
+ }
+ if((S=cdr(S))==[]) break;
+ R=cons(44,R);
+ }
+ return asciitostr(reverse(R));
+ }
+ return 0;
+}
+
+def sp2grs(M,A,L)
+{
+ MM = [];
+ T0 = 0;
+ Mat=getopt(mat);
+ if(Mat!=1) Mat=0;
+ if(type(M)==7) M=s2sp(M);
+ if((LM = length(M)) > 10 && type(A) < 4)
+ CK = 1;
+ Sft = (type(L)==1)?L:0;
+ if(type(L)==4 && length(L)>=3)
+ Sft = L[2];
+ if(Sft < 0){
+ T0 = 1;
+ Sft = -Sft-1;
+ }
+ for(I = LM-1; I >= 0; I--){
+ MI = M[I]; MN = [];
+ if(CK == 1 && length(MI) > 10){
+ erno(1);
+ return;
+ }
+ if(type(A) == 4)
+ AA = rtostr(A[I]);
+ else
+ AA = rtostr(A)+rtostr(I);
+ for(J = LM = length(MI)-1; J >= 0; J--){
+ V = MI[J];
+ if(type(V) > 3)
+ V = V[0];
+ if(T0 == 0 || I == 0)
+ MN = cons([V, makev([AA,J+Sft])], MN);
+ else{
+ if(LM == 1)
+ MN = cons([V, (J==0)?0:makev([AA])], MN);
+ else if(I == 1 && Mat == 0)
+ MN = cons([V, (J==length(MI)-1)?0:makev([AA,J+Sft])], MN);
+ else
+ MN = cons([V, (J==0)?0:makev([AA,J])], MN);
+ }
+ }
+ MM = cons(MN, MM);
+ }
+ if(type(L) == 4 && length(L) >= 2){
+ R = chkspt(MM|mat=Mat); /* R[3]: Fuchs */
+ AA = var(MM[L[0]-1][L[1]-1][1]);
+ if(AA==0) AA=var(R[3]);
+ if(AA!=0 && (P = mycoef(R[3],1,AA))!=0){
+ P = -mycoef(R[3], 0, AA)/P;
+ MM = mysubst(MM,[AA,P]);
+ }
+ }
+ return MM;
+}
+
+def intpoly(F,X)
+{
+ if((T=ptype(F,X))<4){
+ if(T<3){ /* polynomial */
+ if(type(C=getopt(cos))>0){
+ V=vars(F);
+ Z=makenewv(V);
+ W=makenewv(cons(Z,V));
+ Q=intpoly(F,X|exp=Z);
+ Q=(subst(Q,Z,@i*C)*(Z+@i*W)+subst(Q,Z,-@i*C)*(Z-@i*W))/2;
+ return [mycoef(Q,1,Z),mycoef(Q,1,W)];
+ }
+ if(type(C=getopt(sin))>0){
+ Q=intpoly(F,X|cos=C);
+ return [-Q[1],Q[0]];
+ }
+ if(type(C=getopt(log))>0){
+ Q=intpoly(F,X);
+ if(C[0]==0) return [Q,0];
+ if(length(C)<3) C=[C[0],C[1],1];
+ Q-=subst(Q,X,-C[1]/C[0]);
+ if(iscoef(Q,os_md.israt)) Q=red(Q);
+ if(C[2]==0) return [Q];
+ S=subst(-Q*C[0]*C[2],X,X-C[1]/C[0]);
+ for(R=0,D=mydeg(S,X);D>0;D--) R+=mycoef(S,D,X)*X^(D-1);
+ R=subst(R,X,X+C[1]/C[0]);
+ return cons(Q,intpoly(R,X|log=[C[0],C[1],C[2]-1]));
+ }
+ if(type(C=getopt(exp))>0){
+ D = mydeg(F,X);
+ for(P=Q=F/C;D>=0;D--){
+ Q=-mydiff(Q,X)/C;
+ P+=Q;
+ }
+ return P;
+ }
+ for(P=0,I=mydeg(F,X);I >= 0;I--)
+ P += mycoef(F,I,X)*X^(I+1)/(I+1);
+ return P;
+ }
+ R=pfrac(F,X|root=2); /* rational */
+ for(P=0;R!=[];R=cdr(R)){
+ if(type(V=getopt(dumb))==5){
+ for(PF=[],RR=R;RR!=[];RR=cdr(RR))
+ PF=cons(RR[0][0]/RR[0][1]^RR[0][2],PF);
+ PF=[cons(X,reverse(PF))];
+ if(P) PF=cons([1,P],PF);
+ V[0]=cons(PF,V[0]);
+ }
+ RT=car(R);
+ if(mydeg(RT[1],X)==0) P+=intpoly(RT[0]*RT[2],X);
+ else if((Deg=mydeg(RT[1],X))==1){
+ if(RT[2]>1) P+=RT[0]*RT[1]^(1-RT[2])/(1-RT[2])/mycoef(RT[1],1,X);
+ else P+=RT[0]*log(RT[1])/mycoef(RT[1],1,X);
+ P=red(P);
+ }else if(Deg==2){
+ D1=diff(RT[1],X);C1=mycoef(D1,1,X);
+ B=2*C1*mycoef(RT[1],0,X)-mycoef(RT[1],1,X)^2; /* ax^2+bx+c => B=4ac-b^2 */
+ B=sqrt2rat(B);
+ N=RT[0];
+ for(I=RT[2];I>0&&N!=0;I--){
+ C0=mycoef(N,1,X)/C1;N-=C0*D1;
+ if(C0){
+ if(I>1) P-=C0/RT[1]^(I-1)/(I-1);
+ else P+=C0*log(RT[1]);
+ }
+ if(I>1){
+ BB=B/C1;
+ P+=N*X/RT[1]^(I-1)/(I-1)/BB;
+ N*=(2*I-3)/(I-1)/BB;
+ }else{
+ if(type(BR=sqrtrat(B))>3){
+ mycat(["Cannot obtain sqare root of ",B]);
+ return [];
+ }
+ if(real(nm(BR))!=0){
+ P+=(2*N/BR)*atan(sqrt2rat(D1/BR|mult=1));
+ }else{
+ BR*=@i;BRI=sqrt2rat(1/BR);
+ R1=(-mycoef(RT[1],1,X)+BR)/C1;
+ R2=(-mycoef(RT[1],1,X)-BR)/C1;
+ P+=N*BRI*log( /* sqrt2rat */((x-R1)/(x-R2)));
+ }
+ }
+ P=red(P);
+ }
+ P=sqrt2rat(P);
+ }else{
+ mycat(["Cannot get an indefinite integral of ",F]);
+ return [];
+ }
+ }
+ Q=simplog(P,X);
+ if(type(V)==5&&nmono(P)!=nmono(Q)) V[0]=cons([[1,red(P)]],V[0]);
+ return red(Q);
+ }
+ return [];
+}
+
+def fshorter(P,X)
+{
+ Q=sqrt2rat(P);
+ R=trig2exp(Q,X|inv=1);
+ if(str_len(fctrtos(R))<str_len(fctrtos(Q))) Q=R;
+ Var=pfargs(Q,X|level=1);
+ for(C=F=0,R=1,V=Var;V!=[];V=cdr(V)){
+ if(findin(car(V)[1],[cos,sin,tan])>=0){
+ if(!C){
+ F=car(V)[2];
+ }else{
+ R=red(car(V)[2]/F);
+ if(type(R)!=1) break;
+ F/=dn(R);
+ }
+ C++;
+ }
+ }
+ if(getopt(period)==1) return F;
+ if(!isint(Log=getopt(log))) Log=0;
+ if(V==[]&&F!=0){
+ if(iand(Log,1)){
+ H=append(cdr(fctr(nm(Q))),cdr(fctr(dn(Q))));
+ for(L=0;H!=[];H=cdr(H))
+ L+=str_len(rtostr(car(H)[0]));
+ }else L=str_len(fctrtos(Q));
+ S=trig2exp(P,X);
+ for(T=[sin(F),tan(F),cos(F),sin(F/2),cos(F/2),tan(F/2)];T!=[];T=cdr(T)){
+ R=trig2exp(S,X|inv=car(T));
+ if(iand(Log,1)){
+ H=append(cdr(fctr(nm(R))),cdr(fctr(dn(R))));
+ for(K=0;H!=[];H=cdr(H))
+ K+=str_len(rtostr(car(H)[0]));
+ }else K=str_len(fctrtos(R));
+ if(K<L){
+ Q=R;L=K;
+ }
+ }
+ }
+ return Q;
+}
+
+def isshortneg(P)
+{
+ return(str_len(rtostr(P))>str_len(rtostr(-P)))?1:0;
+}
+
+def simplog(R,X)
+{
+ for(V=[],Var=pfargs(R,X);Var!=[];Var=cdr(Var)){
+ VT=car(Var);
+ if(VT[1]==log && ptype(R,VT[0])==2 && mydeg(R,VT[0])==1)
+ V=cons([VT[0],VT[2],mycoef(R,1,VT[0])],V);
+ }
+ for(;V!=[];V=cdr(V)){
+ VT=car(V);
+ for(V2=cdr(V);V2!=[];V2=cdr(V2)){
+ Dn=1;
+ if((C=red(car(V2)[2]/VT[2]))!=1&&C!=-1){
+ if(getopt(mult)==1&&type(C)==1&&ntype(C)==0){
+ Dn=dn(C);C*=Dn;
+ }else continue;
+ }
+ Log=red(VT[1]^Dn*car(V2)[1]^(Dn*C));
+ L=str_len(rtostr(dn(Log)))-str_len(rtostr(nm(Log)));
+ if(L>0 || (L==0&&isshortneg(VT[2])) ){
+ Dn=-Dn;Log=1/Log;
+ }
+ R=mycoef(R,0,VT[0]);R=mycoef(R,0,car(V2)[0]);
+ return(R+VT[2]*log(Log)/Dn);
+ }
+ }
+ return R;
+}
+
+def integrate(P,X)
+{
+ Dvi=getopt(dviout);
+ if(type(I=getopt(I))==4){
+ if((R=integrate(P,X))==[]) II="?";
+ else if(type(I[0])>3||type(I[1])>3){
+ R=subst(R,X,x);
+ V=flim(R,I[0]);VV=flim(R,I[1]);
+ if(V==""||VV=="") II="?";
+ else if(type(V)==7||type(VV)==7){
+ if(V==VV) II="?";
+ else II=(VV=="+"||V=="-")?"\\infty":"-\\infty";
+ }else{
+ II=VV-V;
+ if(II>10^10) II="\\infty";
+ else if(II<-10^10) II="-\\infty";
+ }
+ }else{
+ V=subst(R,X,I[1])-subst(R,X,I[0]);
+ VV=myval(V);
+ II=(type(VV)>=2||ntype(VV)<1)?VV:evalred(V);
+ }
+ if(type(Dvi)!=1) return II;
+ I=ltov(I);
+ for(J=0;J<2;J++){
+ if(type(I[J])>3){
+ if(type(I[J])==4&&length(I[J])>1) I[J]=I[J][1];
+ else I[J]=(J==0)?"-\\infty":"\\infty";
+ }
+ if(type(I[J])<4) I[J]=my_tex_form(I[J]);
+ }
+ S=(type(II)==7)?II:my_tex_form(II);
+ S="\\int_{"+I[0]+"}^{"+I[1]+"}"+monototex(P)+"\\,d"+my_tex_form(X)+"&="+S;
+ if(Dvi==1) dviout(texbegin("align",S));
+ return S;
+ }
+ if(isint(Dvi)==1){
+ if(Dvi==2||getopt(dumb)==-1){
+ V=newvect(1);V[0]=[];
+ }else V=0;
+ if((RR=integrate(P,X|dumb=V))==[]) return R;
+ S=fshorter(RR,X);
+ VV=[X];
+ if(V!=0){
+ R=cons([[1,RR]],V[0]);
+ if(S!=RR) R=cons([[1,RR=S]],R);
+ for(V=FR=[];R!=[];R=cdr(R))
+ if(car(R)!=FR) V=cons(FR=car(R),V);
+ Var=varargs(V|all=2);
+ for(S0=[x0,x1,x2,x3],S=[t,s,u,v,w];S0!=[]&&S!=[];){
+ if(findin(car(S0),Var)<0){
+ S0=cdr(S0); continue;
+ }
+ if(findin(car(S),Var)>=0){
+ S=cdr(S); continue;
+ }
+ V=subst(V,[car(S0),car(S)]);S0=cdr(S0);S=cdr(S);
+ }
+ if(Dvi==-2) return V;
+ S1="\\,dx&";
+ }else{
+ V=[[],[[1,RR=S]]];
+ S1="\\,dx";
+ }
+ if(type(P)>2){
+ if(type(nm(P))<2){
+ P=P*dx;S1=V?"&":"";
+ }
+ S=fctrtos(P|TeX=2,lim=0);SV0=my_tex_form(P);
+ if(str_len(SV0)<str_len(S)) S=SV0;
+ }else S=monototex(P);
+ if(Dvi!=-2) S="\\int "+S+S1;
+ else S="";
+ for(L=[],V=cdr(V);V!=[];V=cdr(V)){
+ CL=car(V);S0=["="]; /* a line */
+ for(FL=0;CL!=[];CL=cdr(CL),FL++){
+ CT=car(CL); /* a term */
+ if((Y=CT[0])==0){ /* a variable */
+ CT=cdr(CT);
+ if(length(CT)>2) CT=cdr(CT);
+ S0=["\\qquad(",CT[0],"=",CT[1],")"];
+ break;
+ }else{
+ for(FT=0,S2=[],CT=cdr(CT);CT!=[];CT=cdr(CT),FT++){
+ SV=fctrtos(car(CT)|TeX=2,lim=0);SV0=my_tex_form(car(CT));
+ if(str_len(SV0)<str_len(SV)) SV=SV0;
+ if(FL||FT||(F&&type(Y)<2)) SV=minustos(SV);
+ S2=append(["+",SV],S2);
+ }
+ S2=reverse(cdr(S2));
+ if(type(Y)>1){
+ if(length(S2)>1){
+ S1="\\int\\left(";S3="\\right)\\,d";
+ }else{
+ S1="\\int";S3="\\,d";
+ }
+ S2=cons(S1,append(S2,[S3,Y]));
+ if(findin(Y,VV)<0) VV=cons(Y,VV);
+ }
+ if(FL) S0=append(S0,cons("+",S2));
+ else S0=append(S0,S2);
+ }
+ }
+ L=append([S0],L);
+ };
+ V=pfargs(RR,X|level=1);
+ for(Var=[];V!=[];V=cdr(V)) Var=cons(car(V)[0],Var);
+ Var=reverse(Var);
+ if(!isint(J=getopt(frac))) J=0;;
+ if(!iand(J,4)&&(!iand(J,2)||length(Var)==1)&&(iand(J,8)==8||ptype(RR,Var)==2)){
+ F=1;
+ if(iand(J,1)){
+ K=str_len(fctrtos(RR));
+ I=str_len(fctrtos(RR|var=Var));
+ if(I>=K) F=0;
+ }
+ if(F){
+ V=[fctrtos(RR|var=Var,TeX=2)];
+ if(Dvi!=-2) V=cons("=",V);
+ if(length(L)>0) L=cdr(L);
+ L=append([V],L);
+ }
+ }else if(ptype(RR,X)==2){
+ L=cdr(L);
+ V=[fctrtos(RR|var=X,TeX=2)];
+ if(Dvi!=-2) V=cons("=",V);
+ L=append([V],L);
+ }
+ S=texket(S+ltotex(reverse(L)|opt=["cr","spts0"],str=1));
+ if(getopt(log)!=1){
+ for(V=[];VV!=[];VV=cdr(VV))
+ V=cons(strtoascii(my_tex_form(car(VV))),V);
+ S1=strtoascii("\\log");
+ for(F=1;F;){ /* log(log(x)) */
+ F=FT=0;
+ S0=strtoascii(S); /* log(x) -> log|x| */
+ L=length(S0);
+ S2=str_tb(0,0);
+ for(I=0;;){
+ if(I>=L||(J=str_str(S0,S1|top=I+FT))<0){
+ S=str_tb(0,S2)+str_cut(S0,I,100000);
+ break;
+ }
+ if((K=str_str(S0,40|top=J+4))<0
+ ||(K!=J+4&&K!=J+9)||(N=str_pair(S0,K+1,40,41))<0){
+ FT=J-I+4;continue;
+ }
+ FT=0;
+ if(str_str(S0,V|top=K+1,end=N-1)[0]<0) S2=str_tb(str_cut(S0,I,N),S2);
+ else{
+ /* log(a) -> log(a) */
+ F=1;
+ if(N<L-1&&S0[N+1]==94){ /* log(x)^2 -> (log|x|)^2 */
+ S2=str_tb([str_cut(S0,I,J-1),"\\left(",str_cut(S0,J,K-1),
+ "|",str_cut(S0,K+1,N-1),"|\\right)"],S2);
+ }
+ else S2=str_tb([str_cut(S0,I,K-1),"|",str_cut(S0,K+1,N-1),"|"],S2);
+ }
+ I=N+1;
+ }
+ }
+ }
+ if(Dvi>0){
+ dviout(texbegin("align*",S));
+ return 1;
+ }
+ return S;
+ } /* end of dviout */
+ SM=["Cannot integrate",P,"at present"];
+ P=sqrt2rat(P|mult=1);
+ Dumb2=1;Dumb3=0;W=newvect(1);W[0]=[];
+ if(type(Dumb=getopt(dumb))==5){
+ Dumb2=Dumb3=Dumb;D2=W;
+ }else if(!isint(Dumb)) Dumb=0;
+ if(Dumb==-1){
+ Dumb2=Dumb3=-1;
+ }
+ if(type(Dumb)!=5) D2=Dumb2;
+ if(!isint(Mul=getopt(mult))) Mul=0;
+ else Mul++;
+ if(type(VAR=getopt(var))!=4) VAR=[];
+ if(type(P)>4) return [];
+ if(iand(T=ptype(P=red(P),X),63)>3||Mul>4){
+ if(Dumb!=1) mycat(SM);
+ return [];
+ }
+ if(Dumb==-1) mycat(["integrate", P]);
+ else if(type(Dumb)==5) Dumb[0]=cons([[X,P]],Dumb[0]);
+ if(T<4 && (T<3||iscoef(P,os_md.israt))){
+ if(Dumb==-1) mycat(["rational function",P]);
+ else if(type(Dumb)==5) Dumb[0]=cons([[X,P]],Dumb[0]);
+ return intpoly(P,X|dumb=Dumb); /* rational function */
+ }
+ Var=pfargs(P,X);
+ for(F=0,VV=Var;VV!=[];VV=cdr(VV)){
+ /* p(x)*log(x^2-1), @e^x, a^x, f(x)^(m/n) etc.->simplify */
+ V=car(VV);
+ if(V[1]==log && (T=ptype(V[2],X))>1 && T<4){
+ if(mydeg(dn(V[2]),X)>0||mydeg(nm(V[2]),X)>1){
+ FC=pfctr(V[2],X);RV=1;
+ if(length(FC)>2){
+ RR=0;RV=1;
+ if((F0=car(FC)[0])!=1){
+ if(type(F0)!=1 && F0<0){
+ for(FT=cdr(FT);FT!=[];FT=cdr(FT)){
+ if(iand(car(FT)[1],1)){
+ RV=-1;F0=-F0;break;
+ }
+ }
+ }
+ }
+ if(F0!=1) RR=log(F0);
+ for(FC=cdr(FC);FC!=[];FC=cdr(FC)){
+ if(RV==-1&&iand(car(FC)[1],1)==1){
+ RR+=car(FC)[1]*log(-car(FC)[0]);
+ RV=1;
+ }else
+ RR+=car(FC)[1]*log(car(FC)[0]);
+ }
+ P=subst(P,V[0],RR);
+ F=1;
+ }
+ }
+ F=1;
+ }else if(V[1]==pow){
+ if(ptype(V[2],X)==1){
+ F=1;
+ if(V[2]==@e){ /* @e^(f(x)) */
+ P=subst(P,V[0],exp(V[3]));
+ }else P=subst(P,V[0],exp(log(V[2])*V[3]));
+ }else if(type(V[3])<=1 && ntype(V[3])==0){ /* r(x)^(m/n) */
+ if((Pw=floor(V[3]))!=0){
+ R=V[2]^Pw;
+ if((PF=V[3]-Pw)!=0) R*=V[2]^PF;
+ P=subst(P,V[0],R);
+ F=1;
+ V=[V[2]^PF,V[1],V[2],PF];
+ }
+ if(ptype(nm(V[2]),X)<2&&V[3]>0){ /* (1/p(x))^(m/n) */
+ P=subst(P,V[0],V[2]*red(1/V[2])^(1-V[3]));
+ F=0;VV=cons(0,Var=pfargs(P,X));continue;
+ }
+ if(ptype(V[2],X)<4&&(K=dn(V[3]))>1){
+ V2=red(V[2]);
+ DN=mydeg(nm(V2),X);DD=mydeg(dn(V2),X);
+ if(DN+DD>1){
+ VF=pfctr(V2,X);
+ R=car(VF)[0]^(car(VF)[1]);RR=0;
+ for(VF=cdr(VF);VF!=[];VF=cdr(VF)){
+ TV=car(VF);TM=TV[1];
+ while(abs(TM)>=K){
+ RR=1;
+ if(TM>0){
+ TM-=K;
+ RR*=TV[0]^nm(V[3]);
+ }else{
+ TM+=K;
+ RR/=TV[0]^nm(V[3]);
+ }
+ }
+ if(TM!=0) R*=TV[0]^TM;
+ }
+ if(RR){
+ P=subst(P,V[0],RR*red(R)^(V[3]));F=1;
+ F=0;VV=cons(0,Var=pfargs(P,X));continue;
+ }
+ }
+ }
+ }
+ }
+ }
+ if(F){
+ P=sqrt2rat(P|mult=1);
+ Var=pfargs(P=red(P),X);T=ptype(P,X);
+ if(T<4 && (T<3||iscoef(P,os_md.israt))){
+ if(Dumb==-1) mycat(["rational function",P]);
+ else if(type(Dumb)==5){
+ Dumb[0]=cons([[X,P]],Dumb[0]);
+ return intpoly(P,X|dumb=Dumb3);
+ }
+ return intpoly(P,X); /* rational function */
+ }
+ }
+#if 1
+ for(P0=P,V=pfargs(P,X|level=1);V!=[];V=cdr(V)) /* P:tan(x) -> P0:sin(x)/cos(x) */
+ if(car(V)[1]==tan) P0=red(subst(P0,car(V)[0],sin(car(V)[2])/cos(car(V)[2])));
+ if(iand(ptype(P0,X),128)){ /* (log f)'=f'/f */
+ for(Df=cdr(fctr(dn(P0)));Df!=[];Df=cdr(Df)){
+ if(!iand(ptype(car(Df)[0],X),64)) continue;
+ Q=car(Df)[0]^(car(Df)[1]);QQ=red(dn(P0)/Q);
+ DQ=red(diff(Q,X)*QQ);
+ if(type(C=DQ/nm(P0))<2&&C!=0){
+ PP=0;DN=[1];
+ }else for(DN=cdr(fctr(DQ));DN!=[];DN=cdr(DN)){
+ Y=car(DN)[0];
+ if(!iand(ptype(Y,X),64)||(I=mydeg(nm(P0),Y))!=mydeg(DQ,Y)
+ || ptype((C=red(mycoef(nm(P0),I,Y)/mycoef(DQ,I,Y))),X)>1||C==0) continue;
+ PP=red(P0-C*diff(Q,X)/Q);
+ if(nmono(P0)>nmono(PP)) break;
+ }
+ if(DN!=[]){
+ R=C*log(Q);
+ if(PP==0){
+ if(P!=P0&&type(Dumb)==5) Dumb[0]=cons([[X,P0]],Dumb[0]);
+ return R;
+ }
+ W[0]=[];
+ S=integrate(PP,X|dumb=D2);
+ if(S!=[]){
+ if(type(Dumb)==5){
+ Dumb[0]=cons([[X,red(P0-PP),PP]],Dumb[0]);
+ TD=W[0];
+ for(W0=[],TD=reverse(TD);TD!=[];TD=cdr(TD)){
+ if(car(TD)[0][0]){
+ WL=cons([1,R],car(TD));
+ Dumb[0]=cons(WL,Dumb[0]);
+ }
+ else Dumb[0]=cons(car(TD),Dumb[0]);
+ }
+ }
+ return red(R+S);
+ }
+ }
+ }
+ }
+#endif
+ if((length(Var)==1||getopt(exe)==1) && /* p(x)*atan(q(x))^m+r(x), etc */
+ findin((VT=car(Var))[1],[atan,asin,acos,log])>=0 && ptype(P,VT[0])==2 &&
+ (VT[1]!=log||(T!=65&&T!=66)||mydeg(VT[2],X)!=1)){ /* exclude x*log(x+1)^2 */
+ for(R=0,D=mydeg(P,VT[0]);D>=0;D--){
+ Q=S=mycoef(P,D,VT[0]);
+ if(S){
+ if(D>0){
+ if((Q=integrate(S,X|mult=Mul))==[]) return Q;
+ }else{
+ W[0]=[];
+ if((Q=integrate(S,X|dumb=D2,var=VAR,mult=Mul))==[]) return Q;
+ if(type(Dumb)==5){
+ TD=W[0];
+ for(W0=[],TD=reverse(TD);TD!=[];TD=cdr(TD)){
+ if(car(TD)[0][0]){
+ WL=cons([1,R],car(TD));
+ Dumb[0]=cons(WL,Dumb[0]);
+ }
+ else Dumb[0]=cons(car(TD),Dumb[0]);
+ }
+ if(car(Dumb[0])!=[[1,R],[1,Q]])
+ Dumb[0]=cons([[1,R,Q]],Dumb[0]);
+ }
+ return red(R+Q);
+ }
+ }else if(D>0) continue;
+ if(D==0){
+ if(Q!=0&&type(Dumb)==5) Dumb[0]=cons([[1,R,Q]],Dumb[0]);
+ return red(Q+R);
+ }
+ R0=Q*VT[0]^D;
+ P=(P0=P)-S*VT[0]^D-Q*diff(VT[0]^D,X);
+ if(mydeg(P,VT[0])>=D){ /* (x+1)*log(x)/x^2 */
+ if(mydeg(P,VT[0])==D &&
+ ptype(C=red(mycoef(P,D,VT[0])/diff(VT[0],X)),VT[0])<2){
+ P=P0-(S*VT[0]^D+Q*diff(VT[0]^D,X)+C*diff(VT[0]^(D+1),X)/(D+1));
+ R0+=C*VT[0]^(D+1)/(D+1);
+ }else{
+ P=P0;
+ if(Dumb!=1) mycat(SM);
+ return [];
+ }
+ }
+ if(type(Dumb)==5){
+ if(P) Dumb[0]=cons([R?[1,R,R0]:[1,R0],[X,P]],Dumb[0]);
+ else if(R!=0) Dumb[0]=cons([[1,R,R0]],Dumb[0]);
+ }
+ R+=R0;
+ }
+ }
+ if(length(Var)==1 && (VT=car(Var))[1]==pow && mydeg(P,VT[0])==1 && (PT=ptype(VT[2],X))<4){
+ PR=mycoef(P,0,VT[0]);
+ if(RR!=0){
+ RR=integrate(RR,X|dumb=Dumb3,var=Var);
+ if(RR==[]) return RR;
+ }
+ PW=VT[3];
+ if((D=mydeg(nm(V2=VT[2]),X))==2&&PT==2){ /* f(x)*(ax^2+bx+c)^(m/2)+r(x) */
+ if(isint(2*PW)){
+ C2=mycoef(V20=V2,2,X);F=1;
+ if((C21=sqrtrat(C2))==[]) return [];
+ if(imag(C21)!=0){
+ if(real(C21)!=0) return [];
+ C21=C21/@i;F=-1;
+ }
+ if(type(C21)>3) return [];
+ P=subst(P,X,X/C21);VT=mysubst(VT,[X,X/C21]);V2=VT[2];
+ C1=mycoef(V2,1,X)/F/2;
+ if(C1!=0){
+ P=subst(P,X,X-C1);VT=mysubst(VT,[X,X-C1]);V2=VT[2];
+ }
+ C0=mycoef(V2,0,X);
+ if((C01=sqrtrat(C0))==[]) return [];
+ if(imag(nm(C01))!=0){
+ if(real(nm(C01))!=0) return [];
+ C01=C01/@i;G=-1;
+ }else G=1;
+ if(type(C01)>3||(F==-1&&G==-1)) return [];
+ Y=makenewv([P,VAR]|var=x);
+ if(F==-1){ /* (c^2-x^2)^(1/2) */
+ Q=subst(P,VT[0],(C01*cos(Y))^(2*PW),X,YX=C01*sin(Y))
+ *C01*cos(Y)/C21;
+ SY=(C21*X+C1);CY=V20;YY=asin(sqrt2rat((C21*X+C1)/C01|mult=1));
+ }else if(G==-1){ /* (x^2-c^2)^(1/2) */
+ Q=subst(P,VT[0],(C01*sin(Y)/cos(Y))^(2*PW),X,YX=C01/cos(Y))
+ *C01*sin(Y)/cos(Y)^2/C21;
+ SY=V20;CY=1/(C21*X+C1);YY=acos(sqrt2rat(C01*(C21*X+C1)|mult=1));
+ }else{ /* (x^2+c^2)^(1/2) */
+ Q=subst(P,VT[0],(C01/cos(Y))^(2*PW),X,YX=C01*sin(Y)/cos(Y))
+ *C01/cos(Y)^2/C21;
+ CY=V20; YY=atan(sqrt2rat((C21*X+C1)/C01|mult=1));
+ }
+ if(Dumb==-1) mycat([C21*X+C1,"=",YX]);
+ else if(type(Dumb)==5) Dumb[0]=cons([[0,Y,C21*X+C1,YX]],Dumb[0]);
+ Q=sqrt2rat(Q);
+ QQ=red(substblock(nm(Q),sin(Y),sin(Y)^2,1-cos(Y)^2)
+ /substblock(dn(Q),sin(Y),sin(Y)^2,1-cos(Y)^2));
+ if(cmpsimple(QQ,Q|comp=2)<0) Q=QQ;
+ QQ=red(substblock(nm(Q),cos(Y),cos(Y)^2,1-sin(Y)^2)
+ /substblock(dn(Q),cos(Y),cos(Y)^2,1-sin(Y)^2));
+ if(cmpsimple(QQ,Q|comp=2)<0) Q=QQ;
+ if((Q=integrate(Q,Y|dumb=Dumb2,var=cons(X,Var)))==[]) return [];
+ Q=trig2exp(Q,Y|inv=cos(Y));
+ for(V=vars(Q);V!=[];V=cdr(V)){
+ FA=funargs(car(V));
+ if(type(FA)==4&&FA[0]==log){
+ QQ=trig2exp(FA[1],Y|inv=cos(Y));
+ Q=mycoef(Q,0,car(V))+mycoef(Q,1,car(V))*log(QQ);
+ }
+ }
+ if(type(Dumb)==5) Dumb[0]=cons([[1,Q]],Dumb[0]);
+ if(F==-1) Q=subst(Q,sin(Y),SY/C01,cos(Y),CY^(1/2)/C01,Y,YY);
+ else if(G==-1){
+ Q=red(subst(Q,sin(Y),SY^(1/2)*cos(Y)/C01));
+ Q=red(subst(Q,cos(Y),C01*CY,Y,YY));
+ }else{
+ Q=red(subst(Q,sin(Y),(C21*X+C1)*cos(Y)/C01));
+ Nm=substblock(nm(Q),cos(Y),C01^2/CY,cos(Y)^2);
+ Nm=subst(Nm,cos(Y),C01/CY^(1/2));
+ Dn=substblock(dn(Q),cos(Y),C01^2/CY,cos(Y)^2);
+ Dn=subst(Dn,cos(Y),C01/CY^(1/2));
+ Q=red(subst(Nm/Dn,Y,YY));
+ }
+ if(findin(Y,vars(Q))>=0) return [];
+ for(R=[],Var=vars(Q);Var!=[];Var=cdr(Var)){
+ VT=funargs(V=car(Var));
+ if(type(VT)==4&&VT[0]==log&&ptype(VT[1],X)>60&&mydeg(Q,V)==1)
+ R=cons([mycoef(Q,1,V),V],R);
+ }
+ if(length(R)==2 && (R[0][0]==R[1][0]||R[0][0]+R[1][0]==0)){
+ R0=args(R[0][1])[0];R1=args(R[1][1])[0];
+ if(R[0][0]==R[1][0]) S=R0*R1;
+ else S=R1/R0;
+ Q=mycoef(Q,0,R[0][1]);Q=mycoef(Q,0,R[1][1]);
+ Q+=R[1][0]*log(red(S));
+ }
+ for(Var=vars(Q);Var!=[];Var=cdr(Var)){
+ VT=funargs(car(Var));
+ if(type(VT)==4&&VT[0]==log&&ptype(VT[1],X)>60){
+ S=trig2exp(VT[1],X|inv=cos(X),arc=1);
+ if(ptype(dn(S),X)<2 && mydeg(Q,car(Var))==1
+ && ptype(mycoef(Q,1,car(Var)),X)<2){
+ S=nm(S);
+ SF=fctr(S);
+ S/=SF[0][0];
+ }
+ if(cmpsimple(S,-S)>0) S=-S;
+ Q=subst(Q,car(Var),log(S));
+ }
+ } /* x/(1-x^2)^(1/2) */
+ if(type(Q=red(Q+RR))==2&&type(Dumb)!=5) Q-=cterm(Q);
+ if(Dumb==-1) mycat(["->",Q]);
+ else if(type(Dumb)==5) Dumb[0]=cons([[1,Q]],Dumb[0]);
+ return Q;
+ }
+ }else if(D==1 && mydeg(Dn=dn(V2),X)<2 && type(PW)==1 && ntype(PW)==0 &&
+ (V2!=X||ptype(mycoef(P,1,VT[0]),X)>2)){ /* p(x)((ax+b)/(cx+d))^(m/n) */
+ PN=nm(PW);PD=dn(PW);
+ Y=makenewv([P,VAR]|var=x);Q=Y^PD*Dn-nm(V2);F=-mycoef(Q,0,X)/mycoef(Q,1,X);
+ Q=red(subst(P,VT[0],Y^PN,X,F)*diff(F,Y));
+ if(Dumb==-1) mycat([Y,"=",V2^(1/PD)]);
+ else if(type(Dumb)==5) Dumb[0]=cons([[0,Y,V2^(1/PD)]],Dumb[0]);
+ if((Q=integrate(Q,Y|dumb=Dumb3,var=cons(X,Var)))==[]) return [];
+ Q=red(Q);
+ QN=subst(substblock(nm(Q),Y,Y^PD,V2),Y,V2^(1/PD));
+ QD=subst(substblock(dn(Q),Y,Y^PD,V2),Y,V2^(1/PD));
+ Q=red(QN/QD+RR);
+ if(Dumb==-1) mycat(["->",Q]);
+ else if(type(Dumb)==5) Dumb[0]=cons([[1,Q]],Dumb[0]);
+ return Q;
+ }
+ }else if(length(Var)==2 && /* r(x,(ax+b)^(1/2),(cx+d)^(1/2)) */
+ (VT=car(Var))[1]==pow && ptype(VT[2],X)==1 && mydeg(VT[2],X)==1 && VT[3]==1/2 &&
+ (VS=car(car(Var)))[1]==pow && ptype(VS[2],X)==1 && mydeg(VS[2],X)==1 && VS[3]==1/2){
+ Y=makenewv([P,VAR]|var=x);R=(Y^2-myceof(VS[0],0,X))/(C=mycoef(VS[0],1,X));
+ if(Dumb==-1) mycat([Y,"=",VS[0]]);
+ else if(type(Dumb)==5) Dumb[0]=cons([[0,Y,VD[0]]],Dumb[0]);
+ R=integrate(subst(P,VS[0],Y,X,R)*2*Y/C,Y|dumb=Dumb3,var=cons(X,Var));
+ if(R!=[]){
+ R=subst(substblock(R,Y,VS[0],Y^2),Y,VS[0]);
+ if(Dumb==-1) mycat(["->",R]);
+ else if(type(Dumb)==5) Dumb[0]=cons([[1,R]],Dumb[0]);
+ }
+ return R;
+ }
+ if(T==65||T==66){ /* polynomial including sin, exp etc */
+ for(F=0,VT=Var;VT!=[];VT=cdr(VT)){
+ VTT=car(VT);
+ if(ptype(VTT[2],X)>2||mydeg(VTT[2],X)>1) F=ior(F,256); /* compos. or rat. or nonlin. */
+ K=findin(VTT[1],[cos,sin,tan,exp,log,pow]);
+ F=ior(F,2^(K+1)); /* 1:other,2:cos,4:sin,8:tan,16:exp,32:log,64:pow */
+ if((Deg=mydeg(P,VTT[0]))>1&&K!=4) F=ior(F,1024); /* nonlinear */
+ if(K==5 && (ptype(VTT[3],X)!=0 || VTT[2]!=x||Deg>1)) F=ior(F,8192); /* pow */
+ for(;Deg>0;Deg--){ /* coef */
+ if(ptype(mycoef(P,Deg,VTT[0]),X)>2){
+ if(K==4||K==5) F=ior(F,2048); /* exp, log */
+ else F=ior(F,4096);
+ }
+ }
+ }
+ if(!iand(F,1+8+64+256+512+2048+8192)){ /* cos,sin,exp,log^n,x^c */
+ if(iand(F,1024+4096)&&!iand(F,32+64)){ /* cos,sin,exp */
+ if(type(Dumb)==5){
+ S=trig2exp(P,X|inv=1);
+ if(P!=S) Dumb[0]=cons([[X,S]],Dumb[0]);
+ }
+ R=integrate(trig2exp(P,X),X);
+ if(R!=[]) S=trig2exp(R,X|inv=1);
+ R=fshorter(S,X);
+ if(type(Dumb)==5&&R!=S){
+ Dumb[0]=cons([[1,S]],Dumb[0]);
+ }
+ return R;
+ }
+ for(R=0,VT=Var;VT!=[];VT=cdr(VT)){
+ CV=car(VT);
+ C0=mycoef(CV[2],0,X);C1=mycoef(CV[2],1,X);
+ Q=mycoef(P,1,CV[0]);
+ if(CV[1]==sin||CV[1]==cos){
+ TR=(CV[1]==sin)?intpoly(Q,X|sin=C1):intpoly(Q,X|cos=C1);
+ R+=TR[0]*cos(CV[2])+TR[1]*sin(CV[2]);
+ }else if(CV[1]==exp){
+ QT=exp(CV[2]);
+ for(V2=vars(C1);V2!=[];V2=cdr(V2)){ /* exp(2*log(a)*x) => a^(2*x) */
+ if(vtype(VA=car(V2))==2&&functor(VA)==log){
+ if(ptype(C1,VA)!=2||mydeg(C1,VA)==1&&mycoef(C1,0,VA)==0){
+ QT=args(VA)[0]^(red(C1/VA)*X);
+ if(C0!=0) QT*=exp(C0);
+ break;
+ }
+ }
+ }
+ R+=intpoly(Q,X|exp=C1)*QT;
+ }else if(CV[1]==pow)
+ R+=intpoly(Q,X|pow=CV[2])*x^CV[2];
+ else if(CV[1]==log){
+ for(Deg=mydeg(P,CV[0]);Deg>0; Deg--){
+ Q=mycoef(P,Deg,CV[0]);
+ TR=intpoly(Q,X|log=[C1,C0,Deg]);
+ for(I=0;TR!=[];I++,TR=cdr(TR)){
+ if(I==Deg) R+=car(TR)-subst(car(TR),X,0);
+ else R+=car(TR)*CV[0]^(Deg-I);
+ }
+ }
+ }
+ P=mycoef(P,0,CV[0]);
+ }
+ R+=intpoly(P,X);
+ return R;
+ }
+ }
+ for(K=0,VX=[],VT=Var;VT!=[];VT=cdr(VT)){ /* contain only both pow and trig */
+ VTT=car(VT);
+ if(findin(VTT[1],[cos,sin,tan])>=0){
+ if(ptype(VTT[2],X)!=2||mydeg(VTT[2],X)!=1) break;
+ VX=cons(VTT,VX);
+ }else if(VTT[1]==pow) K=1;
+ else break;
+ }
+ if(VT==[]&&K==1&&VX!=[]){
+ D=VX[0][2];
+ if(VX[0][1]==tan) D*=2;
+ for(VT=cdr(VX);VT!=[];VT=cdr(VT)){
+ K=VT[0][2]/D;
+ if(VT[0][1]==tan) K*=2;
+ if(type(K)!=1||ntype(K)!=0) break;
+ D/=dn(K);
+ }
+ if(VT==[]){
+ Y=makenewv([P,VAR]|var=x);
+ for(Q=P,VT=VX;VT!=[];VT=cdr(VT)){
+ VTT=car(VT);
+ if(VTT[1]==cos||VTT[1]==sin){
+ VV=trig2exp(VTT[0],X|inv=cos(D));
+ VV=subst(VV,cos(D),(1-Y^2)/(1+Y^2),sin(D),2*Y/(Y^2+1));
+ }else if(VTT[1]==tan){
+ VV=trig2exp(VTT[0],X|inv=tan(D/2));
+ VV=subst(VV,tan(D),Y);
+ }
+ Q=subst(Q,VTT[0],VV);
+ }
+ Q*=2/(Y^2+1);
+ if(diff(Q,X)==0){
+ if(Dumb==-1) mycat([Y,"=",tan(D/2)]);
+ else if(type(Dumb)==5) Dumb[0]=cons([[0,Y,tan(D/2)]],Dumb[0]);
+ R=integrate(Q,Y|dumb=Dumb2,var=cons(X,Var));
+ if(R!=[]){
+ if(Dumb==-1) mycat(["->",R]);
+ else if(type(Dumb)==5) Dumb[0]=cons([[1,R]],Dumb[0]);
+ return sqrt2rat(subst(R,Y,tan(D/2))|mult=1);
+ }
+ }
+ }
+ }
+ if(T>65||iand(F,8)){ /* rational for functions or tan */
+ if(findin(X,vars(P))<0){
+ for(XV=XE=0,VT=Var;VT!=[];VT=cdr(VT)){
+ VTT=car(VT);
+ if(mydeg(VTT[2],X)!=1) break;
+ if(VTT[1]==cos||VTT[1]==sin||VTT[1]==tan){
+ K=red(VTT[2]/X);
+ if(type(K)>1||ntype(K)>0) break;
+ if(XV==0) XV=K;
+ else XV/=dn(K/XV);
+ if(VTT[1]==tan) P=red(subst(P,VTT[0],sin(VTT[2])/cos(VTT[2])));
+ }else if(VTT[1]==exp){
+ K=red(VTT[2]/X);
+ if(type(K)>1||ntype(K)>0) break;
+ if(XE==0) XE=K;
+ else XE/=dn(K/XE);
+ }else break;
+ }
+ if(VT==[]&&XE*XV==0){
+ if(XE){
+ if(XE<0) XE=-XE;
+ Y=makenewv([P,VAR]|var=x);
+ for(F=0,VT=Var;VT!=[];VT=cdr(VT),F++){
+ VTT=car(VT);C=red(VTT[2]/X/XE);
+ P=subst(P,VTT[0],Y^C);
+ if(!F){
+ if(Dumb==-1) mycat([Y^C,"=",VTT[0]]);
+ else if(type(Dumb)==5) Dumb[0]=cons([[0,Y^C,VTT[0]]],Dumb[0]);
+ }
+ }
+ P/=XE*Y;
+ Q=integrate(P,Y|dumb=Dumb3,var=cons(X,VAR));
+ if(Q==[]) return [];
+ Q=subst(Q,Y,exp(XE*X));
+ Q=trig2exp(Q,X);
+ if(Dumb==-1) mycat(["->",Q]);
+ else if(type(Dumb)==5) Dumb[0]=cons([[1,Q]],Dumb[0]);
+ return Q;
+ }
+ P=trig2exp(nm(P),X|inv=cos(XV*X))/trig2exp(dn(P),X|inv=cos(XV*X));
+ Y=makenewv([P,VAR]|var=x);
+ Q=red(subst(P,sin(XV*X),Y*cos(XV*X)));
+ Q=substblock(nm(Q),cos(XV*X),cos(XV*X)^2,1/(Y^2+1))/
+ (substblock(dn(Q),cos(XV*X),cos(XV*X)^2,1/(Y^2+1))*(Y^2+1));
+ Q=red(Q);
+ if(ptype(Q,X)<2){
+ XV*=2;P=Q;
+ }else{
+ P=subst(P,cos(XV*X),(1-Y^2)/(1+Y^2),sin(XV*X),2*Y/(1+Y^2))*2/K/(1+Y^2);
+ P=red(P);
+ }
+ if(Dumb==-1){
+ mycat([Y,"=",tan(XV*X/2)]);
+ mycat(["integrate",P]);
+ }else if(type(Dumb)==5) Dumb[0]=cons([[Y,P]],cons([[0,Y,tan(XV*X/2)]],Dumb[0]));
+ R=intpoly(P,Y|dumb=Dumb);
+ if(R==[]) return R;
+ if(Dumb==-1) mycat(["->",R]);
+ else if(type(Dumb)==5) Dumb[0]=cons([[1,R]],Dumb[0]);
+ for(Log=1,K=0,Var=pfargs(RR=R,Y);Var!=[];Var=cdr(Var)){
+ VTT=car(Var);
+ if(VTT[1]==log){
+ C=mycoef(R,1,VTT[0]);
+ VT2=VTT[2];
+ if(K==0){
+ K=C;Log=VT2;
+ if(K<0){
+ K=-K;Log=1/Log;
+ }
+ }else{
+ if((V=red(C/K))<0){
+ VT2=1/VT2;V=-V;
+ }
+ if(type(V)>1||ntype(V)>0){
+ Log=1;break;
+ }
+ if(isint(V)) Log*=VT2^V;
+ else{
+ D=dn(V);K/=D;
+ Log=Log^D*VT2^nm(V);
+ }
+ }
+ RR=mycoef(RR,0,VTT[0]);
+ }
+ }
+ if(Log!=1){
+ R=RR;
+ if(type(Dumb)==5){
+ if(RR) Dumb[0]=cons([[1,K*log(Log),RR]],Dumb[0]);
+ else Dumb[0]=cons([[1,K*log(Log)]],Dumb[0]);
+ }
+ Log=red(subst(red(Log),Y,sin(XV*X/2)/cos(XV*X/2)));
+ Log=fshorter(Log,X|log=1); /* log(cos(2*x)+1)=-2*log(cos(x)) */
+ Nm=fctr(nm(Log));
+ for(T=[];Nm!=[];Nm=cdr(Nm)){
+ if(ptype(car(Nm)[0],X)>1) T=cons(car(Nm),T);
+ }
+ Nm=fctr(dn(Log));
+ for(;Nm!=[];Nm=cdr(Nm)){
+ if(ptype(car(Nm)[0],X)>1) T=cons([car(Nm)[0],-car(Nm)[1]],T);
+ }
+ for(I=0,Nm=T;T!=[];T=cdr(T)){
+ if(I=0) I=abs(car(T)[1]);
+ else I=igcd(I,car(T)[1]);
+ }
+ for(Log=1;Nm!=[];Nm=cdr(Nm)) Log*=car(Nm)[0]^(car(Nm)[1]/I);
+ K*=I;
+ if(cmpsimple(nm(Log),dn(Log))<0){
+ K=-K;Log=red(1/Log);
+ }
+ Log=K*log(Log);
+ if(type(Dumb)==5){
+ if(RR) Dumb[0]=cons([[1,Log,RR]],Dumb[0]);
+ else Dumb[0]=cons([[1,Log]],Dumb[0]);
+ }
+ }else Log=0;
+ for(Atan=0,Var=pfargs(RR=R,Y);Var!=[];Var=cdr(Var)){
+ VTT=car(Var);
+ if(VTT[1]==atan){
+ W=subst(VTT[2],Y,sin(XV*X/2)/cos(XV*X/2));
+ W=trig2exp(W,X|inv=1);
+ V2=funargs(dn(W));
+ if(type(V2)==4&&length(V2)==2){
+ V3=V2[1]*mycoef(R,1,VTT[0]);
+ Z=0;
+ if(V2[0]==cos)
+ Z=red(W*cos(V2[1])/sin(V2[1]));
+ else if(V2[0]==sin){
+ Z=red(W*sin(V2[1])/cos(V2[1]));
+ V3=-V3;
+ }
+ if(Z==1){
+ Atan+=V3;W=0;
+ }else if(Z==-1){
+ Atan-=V3;W=0;
+ }
+ }
+ R0=mycoef(R,0,VTT[0]);
+ if(W!=0) Atan+=subst(R-R0,VTT[0],atan(W)); /* atan(W); */
+ R=R0;
+ }
+ }
+ if(R!=0){
+ R=subst(R,Y,sin(XV*X/2)/cos(XV*X/2));
+ R=red(R);
+ R=trig2exp(nm(R),X|inv=1)/trig2exp(dn(R),X|inv=1);
+ }
+ if(type(Dumb)==5){
+ F=0;WL=[];
+ if(R){
+ WL=cons(R,WL);
+ F++;
+ }
+ if(Atan){
+ WL=cons(Atan,WL);
+ F++;
+ }
+ if(Log){
+ WL=cons(Log,WL);
+ F++;
+ }
+ WL=cons(1,WL);
+ if(F>1) Dumb[0]=cons([WL],Dumb[0]);
+ }
+ R=red(R+Log+Atan);
+ if(Dumb==-1) mycat(["->",R]);
+ else if(type(Dumb)==5) Dumb[0]=cons([[1,R]],Dumb[0]);
+ return fshorter(R,X);
+ }
+ }
+ }
+ VT=pfargs(Q=P,X|level=1);
+ V=(iand(ptype(P,X),7)<3)?[X]:[];
+ for(;VT!=[];VT=cdr(VT))
+ if(ptype(P,car(VT)[0])<3) V=cons(car(VT)[0],V);
+ if(length(V)>0){ /* 1/x+tan(x)+... etc.: sums */
+ for(R=0;V!=[];V=cdr(V)){
+ T=mycoef(Q,0,car(V));
+ W[0]=[];
+ S=integrate(TD=red(Q-T),X|dumb=D2,mult=Mul,exe=1);
+ if(S==[]) continue;
+ if(type(Dumb)==5){
+ WL=0;
+ if(T!=0) WL=[[X,TD,T]];
+ if(R!=0) WL=cons([1,R],WL);
+ if(WL) Dumb[0]=cons(WL,Dumb[0]);
+ TD=W[0];
+ if(R!=0||T!=0){
+ for(W0=[],TD=reverse(TD);TD!=[];TD=cdr(TD)){
+ if(car(TD)[0][0]){
+ WL=(!T)?[]:[[X,T]];
+ WL=append(car(TD),WL);
+ if(R!=0) WL=cons([1,R],WL);
+ }else WL=car(TD);
+ Dumb[0]=cons(WL,Dumb[0]);
+ }
+ }else Dumb[0]=append(TD,Dumb[0]);
+ }
+ R+=S;Q=T;
+ if(!Q) return red(R);
+ }
+ W[0]=[];
+ if(P!=Q&&type(S=integrate(Q,X|dumb=D2,mult=Mul))<4){
+ RR=red(R+S);
+ if(type(Dumb)==5){
+ TD=W[0];
+ for(W0=[],TD=reverse(TD);TD!=[];TD=cdr(TD)){
+ if(car(TD)[0][0]){
+ WL=cons([1,R],car(TD));
+ Dumb[0]=cons(WL,Dumb[0]);
+ }
+ else Dumb[0]=append(TD,Dumb[0]);
+ }
+ if(nmono(R)+nmono(S)!=nmono(RR)) Dumb[0]=cons([[1,R,S]],Dumb[0]);
+ }
+ return RR;
+ }
+ }
+ if(Dumb!=1) mycat(SM);
+ return [];
+}
+
+def fimag(P)
+{
+ for(V=vars(P);V!=[];V=cdr(V)){
+ Q=[];
+ if(vtype(VF=car(V))==2){
+ VAA=args(VF);
+ if(VAA==[]) continue;
+ VA=sqrt2rat(VAA[0]);
+ if(functor(VF)==exp){
+ if(imag(VA)!=0){
+ R=(real(VA)!=0)?exp(real(VA)):1;
+ Q=subst(P,VF,R*(cos(imag(VA))+sin(imag(VA))*@i));
+ }
+ }else if(functor(VF)==pow){
+ VA=sqrt2rat(VAA[1]);
+ if(imag(VA)!=0){
+ R=(real(VA)!=0)?VAA[0]^(real(VA)):1;
+ L=(VAA[0]!=@e)?log(VAA[0]):1;
+ Q=subst(P,VAA[0]^(VAA[1]),R*(cos(L*imag(VA))+sin(L*imag(VA))*@i));
+ }else if(VAA[1]!=(V0=fimag(VA)))
+ Q=subst(P,VAA[0]^(VAA[1]),VAA[0]^(V0));
+ }
+ V0=VA;
+ if(length(VAA)==1&&(VAA[0]!=V0||VA!=(V0=fimag(VA))))
+ Q=subst(P,VF,subst(VF,VAA[0],V0));
+ }
+ if(Q!=[]&&P!=Q){
+ P=Q;V=cons(0,vars(P));
+ }
+ }
+ return P;
+}
+
+
+def trig2exp(P,X)
+{
+ if(iand(ptype(P,X),128)){
+ OL=getopt();
+ Nm=trig2exp(nm(P),X|option_list=OL);
+ Dn=trig2exp(dn(P),X|option_list=OL);
+ R=red(Nm/Dn);
+ if(getopt(arc)==1) return sqrt2rat(R);
+ }
+ if((Inv=getopt(inv))==1||type(Inv)==2){
+ for(VT=T=vars(P);T!=[];T=cdr(T)){
+ if(findin(functor(car(T)),[cos,sin,tan])>=0){
+ P=trig2exp(P,X);VT=vars(P);break;
+ }
+ }
+ for(;VT!=[];VT=cdr(VT)){
+ if(functor(CT=car(VT))==exp){
+ if((Re=real(args(CT)[0]))!=0){
+ if(isint(Re)) S=@e^Re;
+ else S=exp(Re);
+ }else S=1;
+ if((Im=imag(args(CT)[0]))!=0){
+ Q=nm(Im);Q=mycoef(Q,mydeg(Q,X),X);
+ if(-Q>Q) S*=cos(-Im)-@i*sin(-Im);
+ else S*=cos(Im)+@i*sin(Im);
+ }
+ P=subst(P,CT,S);
+ }
+ }
+ P=red(P);
+ U=vars(Inv);
+ if(length(U)!=1||((F=functor(car(U)))!=sin&&F!=cos&&F!=tan)) return P;
+ XX=args(car(U))[0];
+ if(mydeg(XX,X)!=1) return P;
+ if(!isvar(XX)) P=subst(P,X,(X-mycoef(XX,0,X))/mycoef(XX,1,X));
+ for(VT=vars(P);VT!=[];VT=cdr(VT)){
+ if(vtype(CT=car(VT))<2) continue;
+ TX=args(CT)[0];
+ if(mydeg(TX,X)!=1) continue;
+ if(!isint(C1=mycoef(TX,1,X))) continue;
+ if((C0=mycoef(TX,0,X))==0){
+ CC=1;CS=0;
+ }else if(vars(C0)==[@pi]){
+ CC=myval(cos(C0));
+ if(CC!=0&&type(CC)==1&&ntype(CC)!=0){
+ CC=cos(C0);CS=sin(C0);
+ }else CS=myval(sin(C0));
+ }else{
+ CC=cos(C0);CS=sin(C0);
+ }
+ K=C1;
+ if(K<0) K=-K;
+ for(CC1=0,I=K;I>=0;I-=2) CC1+=(-1)^((K-I)/2)*binom(K,I)*cos(X)^I*sin(X)^(K-I);
+ for(CS1=0,I=K-1;I>=0;I-=2) CS1+=(-1)^((K-I-1)/2)*binom(K,I)*cos(X)^I*sin(X)^(K-I);
+ if(C1<0) CS1=-CS1;
+ if((TF=functor(CT))==cos) P=subst(P,cos(TX),CC1*CC-CS1*CS);
+ else if(TF==sin) P=subst(P,sin(TX),CS1*CC+CC1*CS);
+ }
+ if(F==sin)
+ P=substblock(P,cos(X),cos(X)^2,1-sin(X)^2);
+ else{
+ P=substblock(P,sin(X),sin(X)^2,1-cos(X)^2);
+ if(F==tan){
+ P=subst(P,sin(X),cos(X)*tan(X));
+ P=substblock(P,cos(X),cos(X)^2,1/(tan(X)^2+1));
+ }
+ }
+ if(!isvar(XX)) P=subst(P,X,XX);
+
+ if(getopt(arc)==1){
+ for(VT=vars(P);VT!=[];VT=cdr(VT)){
+ FA=funargs(car(VT));
+ if(type(FA)==4&&(FA[0]==cos||FA[0]==sin)&&ptype(FA[1],X)>60){
+ VTT=vars(FA[1]);
+ if(type(FA[1])!=2||length(VTT)!=1) break;
+ FB=funargs(VTT[0]);
+ if(type(FB)!=4||(FF=findin(FB[0],[asin,acos,atan]))<0) break;
+ if(!isint(2*(C=mycoef(FA[1],1,VTT[0])))||mycoef(FA[1],0,VTT[0])!=0) break;
+ if(C==1/2){
+ if(FF==1){
+ U=(FA[0]==cos)?(1+FB[1])/2:(1-FB[1])/2;
+ P=subst(P,car(VT),red(U)^(1/2));
+ }else if(FF==2){
+ if(FA[0]==sin){
+ FB1=red(FB[1]);
+ Nm=nm(FB1);CC=fctr(Nm)[0][0];Dn=dn(FB1);
+ if(CC<0) CC=-CC;
+ Nm/=CC;Dn/=CC;
+ NN=Nm^2+Dn^2;
+ P=subst(P,car(VT),((NN)^(1/2)-Dn)/Nm*cos(FA[1]));
+ }
+ }
+ P=red(P);
+ }else if(C==1){
+ if(FF==1){
+ if(FA[0]==cos) P=subst(P,car(VT),FB[1]);
+ else P=subst(P,car(VT),(1-FB[1])^(1/2));
+ }else if(FF==0){
+ if(FA[0]==sin) P=subst(P,car(VT),FB[1]);
+ else P=subst(P,car(VT),(1-FB[1])^(1/2));
+ }
+ P=red(P);
+ }
+ }
+ }
+ P=sqrt2rat(P);
+ }
+ return red(P);
+ }
+ Var=pfargs(P,X);
+ for(VT=Var;VT!=[];VT=cdr(VT)){
+ CT=car(VT);
+ if(CT[1]==cos)
+ P=subst(P,CT[0],exp(CT[2]*@i)/2+exp(-CT[2]*@i)/2);
+ else if(CT[1]==sin)
+ P=subst(P,CT[0],exp(-CT[2]*@i)*@i/2-exp(CT[2]*@i)*@i/2);
+ else if (CT[1]==tan)
+ P=subst(P,CT[0],(exp(-CT[2]*@i)*@i-exp(CT[2]*@i)*@i)/(exp(CT[2]*@i)+exp(-CT[2]*@i)));
+ else if(CT[1]==pow){
+ if(ptype(CT[2],X)>1) continue;
+ if(CT[2]==@e) P=subst(P,CT[0],exp(CT[3]));
+ else P=subst(P,CT[0],exp(log(CT[2])*exp(CT[3])));
+ }
+ }
+ P=red(P);
+ for(PP=1,Lp=(dn(P)==1)?1:0;Lp<2;Lp++){
+ PP=1/PP;
+ U=(Lp==0)?dn(P):nm(P);
+ if(U==1) continue;
+ Var=vars(U);
+ for(R=[],VT=Var;VT!=[];VT=cdr(VT))
+ if(functor(car(VT))==exp) R=cons(car(VT),R);
+ RR=os_md.terms(U,R);
+ for(Q=0,RRT=RR;RRT!=[];RRT=cdr(RRT)){
+ for(S=0,CT=cdr(car(RRT)),CR=R,UT=U;CR!=[];CR=cdr(CR),CT=cdr(CT)){
+ UT=mycoef(UT,car(CT),car(CR));S+=car(CT)*args(car(CR))[0];
+ }
+ if(S==0) Q+=UT;
+ else Q+=UT*exp(S);
+ }
+ PP*=Q;
+ }
+ return PP;
+}
+
+def powsum(N)
+{
+ if (N < 0) return 0;
+ if (N == 0) return x;
+ P = intpoly(N*powsum(N-1),x);
+ C = subst(P,x,1);
+ return P+(1-C)*x;
+}
+
+def bernoulli(N)
+{
+ return mydiff(powsum(N),x) - N*x^(N-1);
+}
+
+/* linfrac01([x,y]) */
+/* linfrac01(newvect(10,[0,1,2,3,4,5,6,7,8,9]) */
+/* 0:x=0, 1:x=y, 2:x=1, 3:y=0, 4:y=1, 5:x=\infty, 6:y=\infty, 7:x=y=0, 8:x=y=1, 9:x=y=\infty
+ 10:y_2=0, 11:y_2=x, 12:y_2=y, 13: y_2=1, 14: y_2=\infty
+ 15:y_3=0, 16:y_3=x, 17:y_3=y, 18: y_3=y_2, 19: y_3=1, 20:y_3=\infty
+ X[0],X[11],X[2],X[10],X[13],X[5],X[14],X[7],X[8],X[9],
+ X[3],X[1],X[12],X[4],X[6]
+
+ T=0 (x_2,x_1,x_3,x_4,...)
+ T=-j (x_1,x_2,..,x_{j-1},x_{j+1},x_j,x_{j+2},...)
+ T=1 (1-x_1,1-x_2,1-x_3,1-x_4,...)
+ T=2 (1/x_1,1/x_2,1/x_3,1/x_4,...)
+ T=3 (x_1,x_1/x_2,x_1/x_3,x_1/x_4,...)
+*/
+
+def lft01(X,T)
+{
+ MX=getopt();
+ if(type(X)==4){
+ K=length(X);
+ if(K>=1) D=1;
+ }
+ if(type(X)==5){
+ K=length(X);
+ for(J=5, F=K-10; F>0; F-=J++);
+ if(F==0) D=2;
+ }
+ if(D==0) return 0;
+ if(T==0){ /* x <-> y */
+ if(D==1){
+ R=cdr(X); R=cdr(R);
+ R=cons(X[0],R);
+ return cons(X[1],R);
+ }
+ R=newvect(K,[X[3],X[1],X[4],X[0],X[2],X[6],X[5]]);
+ for(I=7;I<K;I++) R[I]=X[I];
+ for(I=11,J=5; I<K; I+=J++){
+ R[I]=X[I+1]; R[I+1]=X[I];
+ }
+ return R;
+ }
+ if(T==1){
+ if(D==1){
+ for(R=[];X!=[];X=cdr(X)) R=cons(1-car(X),R);
+ return reverse(R);
+ }
+ R=newvect(K,[X[2],X[1],X[0],X[4],X[3],X[5],X[6],X[8],X[7],X[9]]);
+ for(I=11;I<K;I++) R[I]=X[I];
+ for(I=10, J=5; I<K; I+=J++){
+ R[I]=X[I+J-2]; R[I+J-2]=X[I];
+ }
+ return R;
+ }
+ if(T==2){
+ if(D==1){
+ for(R=[]; X!=[]; X=cdr(X)) R=cons(red(1/car(X)),R);
+ return reverse(R);
+ }
+ R=newvect(K,[X[5],X[1],X[2],X[6],X[4],X[0],X[3],X[9],X[8],X[7]]);
+ for(I=11;I<K;I++) R[I]=X[I];
+ for(I=10,J=5; I<K; I+=J++){
+ R[I]=X[I+J-1]; R[I+J-1]=X[I];
+ }
+ return R;
+ }
+ if(T==3){
+ if(D==1){
+ T=car(X);
+ for(R=[T],X=cdr(X); X!=[]; X=cdr(X))
+ R=cons(red(T/car(X)),R);
+ return reverse(R);
+ }
+ R=newvect(K,[X[7],X[4],X[2],X[6],X[1],X[9],X[3],X[0],X[8],X[5]]);
+ for(I=10,J=5; I<K; I+=J++){
+ R[I]=X[I+J-1]; R[I+1]=X[I+J-2]; R[I+J-2]=X[I+1]; R[I+J-1]=X[I];
+ }
+ return R;
+ }
+ if(T==-1){
+ if(D==1){
+ return append([X[1],X[2],X[0]],cdr(cdr(cdr(X))));
+ }
+ R=newvect(K,[X[0],X[11],X[2],X[10],X[13],X[5],X[14],X[7],X[8],X[9],
+ X[3],X[1],X[12],X[4],X[6]]);
+ for(I=11;I<K;I++) R[I]=X[I];
+ for(I=17,J=5; I<K; I+=J++){
+ R[I]=X[I+1]; R[I+1]=X[I];
+ }
+ return R;
+ }
+ if(T<0){
+ if(D==1){
+ for(R=[],I=0; X!=[]; X=cdr(X),I--){
+ if(I==T){
+ R=cons(X[1],R);
+ R=cons(X[0],R);
+ X=cdr(X);
+ }
+ else R=cons(car(X),R);
+ }
+ return reverse(R);
+ }
+ T=3-T;
+ R=newvect(K);
+ for(I=0;I<K;I++) R[I]=X[I];
+ for(I=10,J=5;J<T;I+=J++);
+ for(II=0; II<J-2; II++){
+ R[I]=X[I+J]; R[I+J]=R[I];
+ }
+ for( ; II<J; II++){
+ R[I]=X[I+J+1]; R[I+J+1]=X[I];
+ }
+ return R;
+ }
+ return 0;
+}
+
+def linfrac01(X)
+{
+ if(type(X)==4) K=length(X)-2;
+ else if(type(X)==5){
+ L=length(X);
+ for(K=0,I=10,J=5; I<L; K++,I+=J++);
+ if(I!=L) return 0;
+ }
+ if(K>3 && getopt(over)!=1) return(-1);
+ II=(K==-1)?3:4;
+ for(CC=C=1,L=[X]; C!=0; CC+=C){
+ for(F=C,C=0,R=L; F>0; R=cdr(R), F--){
+ P=car(R);
+ for(I=-K; I<II; I++){
+ S=lft01(P,I);
+ if(findin(S,L) < 0){
+ C++; L=cons(S,L);
+ }
+ }
+ }
+ }
+ return L;
+}
+
+
+def varargs(P)
+{
+ if((All=getopt(all))!=1&&All!=2) All=0;
+ V=vars(P);
+ for(Arg=FC=[];V!=[];V=cdr(V)){
+ if(vtype(CV=car(V))==0&&All!=0){
+ Arg=lsort([CV],Arg,0);
+ }
+ if(vtype(CV)!=2) continue;
+ if(findin(F=functor(CV),FC)<0) FC=cons(F,FC);
+ for(AT=vars(args(CV));AT!=[];AT=cdr(AT)){
+ if(vtype(X=car(AT))<2){
+ if(findin(X,Arg)<0) Arg=cons(X,Arg);
+ }else if(vtype(X)==2){
+ R=varargs(X);
+ if(R[1]!=[]){
+ Arg=lsort(R[1],Arg,0);
+ FC=lsort(R[0],FC,0);
+ }
+ }
+ }
+ }
+ Arg=reverse(Arg);
+ return (All==2)?Arg:[reverse(FC),Arg];
+}
+
+def pfargs(P,X)
+{
+ if(type(L=getopt(level))!=1) L=0;
+ for(Var=[],V=vars(P);V!=[];V=cdr(V)){
+ if(vtype(car(V))==2){
+ VT=funargs(car(V));
+ if(length(VT)>1){
+ if(L<2 &&(ptype(VT[1],X)>1 || (length(VT)>2 && ptype(VT[2],X)>1)))
+ Var=cons(cons(car(V),VT),Var);
+ if(L!=1 && (R=pfargs(VT[1],X|level=L-1))!=[]) Var=append(R,Var);
+ }
+ }
+ }
+ return reverse(Var);
+}
+
+def ptype(P,L)
+{
+ if((T=type(P))<2 || T>3) return T;
+ if(type(L)!=4) L=[L];
+ F=0;
+ if(lsort(L,varargs(dn(P))[1],2)!=[]) F=128;
+ if(lsort(L,varargs(nm(P))[1],2)!=[]) F+=64;
+ if(lsort(L,vars(dn(P)),2)!=[]) return F+3;
+ return (lsort(L,vars(nm(P)),2)==[])?(F+1):(F+2);
+}
+
+def nthmodp(X,N,P)
+{
+ X=X%P;
+ for(Z=1;;){
+ if((W=iand(N,1))==1) Z=(Z*X)%P;
+ if((N=(N-W)/2)<=0) return Z;
+ X=irem(X*X,P);
+ }
+}
+
+def issquaremodp(X,P)
+{
+ N=getopt(power);
+ if(!isint(N)) N=2;
+ if(P<=1 || !isint(P) || !pari(ispsp,P) || !isint(X) || !isint(N) || N<1){
+ errno(0);
+ return -2;
+ }
+ M=(P-1)/igcd(N,P-1);
+ if((X%=P) == 0) return 0;
+ if(X==1 || M==P-1) return 1;
+ return (nthmodp(X,M,P)==1)?1:-1;
+}
+
+def iscoef(P,F)
+{
+ if(P==0) return 1;
+ if(type(P)==1) return F(P);
+ if(type(P)==2) {
+ X=var(P);
+ for(I=deg(P,X); I>=0; I--){
+ if(!iscoef(mycoef(P,I,X),F)) return 0;
+ }
+ }else if(type(P)==3){
+ if(!iscoef(nm(P),F)||!iscoef(dn(P),F)) return 0;
+ }else if(type(P)==4){
+ for(;P!=[];P=cdr(P)) if(!iscoef(P,F)) return 0;
+ }else if(type(P)>4 && type(P)<7) return iscoef(m2l(PP),F);
+ else return 0;
+ return 1;
+}
+
+def rootmodp(X,P)
+{
+ X%=P;
+ if(X==0) return [0];
+ N=getopt(power);
+ PP=pari(factor,P);
+ P0=PP[0][0]; P1=PP[0][1];
+ P2=pari(phi,P);
+ if(!isint(N)) N=2;
+ N%=P2;
+ if(P0==2 || size(PP)[0]>1){
+ for(I=1,R=[]; I<P2; I++)
+ if(nthmodp(I,N,P)==X) R=cons(I,R);
+ return qsort(R);
+ }
+ Y=primroot(P);
+ if(Y==0) return 0;
+ Z=nthmodp(Y,N,P);
+ G=igcd(N,P2);
+ P3=P2/G;
+ for(I=0, W=1; I<P3;I++){
+ if(W==X) break;
+ W=(W*Z)%P;
+ }
+ if(I==P3) return [];
+ W=nthmodp(Y,I,P);
+ Z=nthmodp(Y,P3,P);
+ for(I=0,R=[];;){
+ R=cons(W,R);
+ if(++I>=G) break;
+ W=(W*Z)%P;
+ }
+ return qsort(R);
+}
+
+def primroot(P)
+{
+ PP=pari(factor,P);
+ P0=PP[0][0]; P1=PP[0][1];
+ S=size(PP);
+ if(S[0]>1 || !isint(P) || P0<=2){
+ print("Not odd prime(power)!");
+ return 0;
+ }
+ if(isint(Ind=getopt(ind))){
+ Ind %= P;
+ if(Ind<=0 || igcd(Ind,P)!=1 || (Z=primroot(P))==0){
+ print("Not exist!");
+ return 0;
+ }
+ P2=P0^(P1-1)*(P0-1);
+ for(I=1,S=1; I<P2; I++)
+ if((S = (S*Z)%P) == Ind) return I;
+ return 0;
+ }
+ if(getopt(all)==1){
+ I=primroot(P);
+ P2=P0^(P1-1)*(P0-1);
+ for(L=[],J=1; J<P2; J++){
+ if(P1>1 && igcd(P0,J)!=1) continue;
+ if(igcd(P0-1,J)!=1) continue;
+ L=cons(nthmodp(I,J,P),L);
+ }
+ return qsort(L);
+ }
+ if(PP[0][1]>1){
+ I=primroot(P0);
+ P2=P0^(P1-2)*(P0-1);
+ if(nthmodp(I,P2,P)==1) I+=P0;
+ return I;
+ }
+ F=pari(factor,P-1);
+ SF=size(F)[0];
+ for(I=2; I<P; I++){
+ for(J=0; J<SF; J++)
+ if(nthmodp(I,(P-1)/F[J][0],P)==1) break;
+ if(J==SF) return I;
+ }
+}
+
+def rabin(P,X)
+{
+ for(M=0,Q=P-1;iand(Q,1)==0;M++,Q/=2);
+ Z=nthmodp(X,Q,P);
+ for(N=M;M>0&&Z!=1&&Z!=P-1;M--,Z=(Z*Z)%P);
+ return (M<N&&(M==0||Z==1))?0:1;
+}
+
+def powprimroot(P,N)
+{
+ if(P<3) P=3;
+ FE=getopt(exp);
+ if(FE!=1) FE=0;
+ if((Log=getopt(log))==1||Log==2) FE=-1;
+ else if(Log==3){
+ FE=-2;
+ for(PP=1, L0=["$r$","$p/a$"];;){
+ PP=pari(nextprime,PP+1);
+ if(PP>=P) break;
+ L0=cons(PP, L0);
+ }
+ L0=reverse(L0);
+ }
+ if(FE==0) All=getopt(all);
+ for(I=0, PP=P, LL=[]; I<N; I++,PP++){
+ PP=pari(nextprime,PP);
+ if(All==1){
+ PR=primroot(PP|all=1);
+ LL=cons(cons(PP,PR),LL);
+ continue;
+ }
+ PR=primroot(PP);
+ if(FE==-2){ /* log=3 */
+ LT=cdr(L0);LT=cdr(L0);
+ for(L=[PP];LT!=[];LT=cdr(LT))
+ L=cons(primroot(PP|ind=car(LT)),L);
+ LL=cons(reverse(L),LL);
+ if(I<N-1) L0=append(L0,[PP]);
+ }else if(FE){
+ for(J=1, L=[PP], K=1; J<PP; J++){
+ if(FE==-1){ /* log=1,2 */
+ K=primroot(PP|ind=J);
+ if(K==0 && Log==2) K=PP-1;
+ }
+ else K=(K*PR)%PP; /* exp=1 */
+ L=cons(K,L);
+ }
+ LL=cons(reverse(L),LL);
+ }else
+ LL=cons([PP,PR],LL); /* default */
+ }
+ LL=reverse(LL);
+ if(!FE) return LL;
+ PP--;
+ if(FE==-2) return append(LL,[L0]);
+ for(I=1,L=["$p$"];I<PP; I++) L=cons(I,L);
+ return cons(reverse(L),LL);
+}
+
+def ntable(F,II,D)
+{
+ F=f2df(F|opt=-1);
+ Df=getopt(dif);
+ Str=getopt(str);
+ if(Df!=1) Df=0;
+ L=[];
+ if(type(D)==4){
+ if(type(II[0])==4){
+ T1=II[0][1]-II[0][0];T2=II[1][1]-II[1][0];
+ for(L0=[],I=0;I<D[0];I++){
+ for(R=[],J=0;J<D[1];J++)
+ R=cons(myf2eval(F,II[0][0]+I*T1/D[0],II[1][0]+J*T2/D[1]),R);
+ L=cons(reverse(R),L);L0=cons(II[0][0]+I*T1/D[0],L0);
+ }
+ }else{
+ for(T=II[1]-II[0],L0=[],I=0;I<D[0];I++){
+ for(R=[],J=0;J<D[1];J++)
+ R=cons(myfdeval(F,II[0]+I*T/D[0]+J*T/D[0]/D[1]),R);
+ L=cons(reverse(R),L);L0=cons(II[0]+I*T/D[0],L0);
+ }
+ }
+ L=reverse(L);L0=reverse(L0);
+ if(type(Str)==4){
+ L0=mtransbys(os_md.sint,L0,[Str[0]]|str=1,zero=0);
+ L=mtransbys(os_md.sint,L,[Str[1]]|str=1,zero=0);
+ if(Df==1){
+ for(DT=[],RT=L,I=0;RT!=[];){
+ for(LT=[],TT=car(RT);TT!=[];TT=cdr(TT)){
+ VV=car(TT);
+ if((J=str_char(VV,0,"."))>=0){
+ if(J==0) VV=str_cut(VV,1,10000);
+ else VV=str_cut(VV,0,J-1)+str_cut(VV,J+1,10000);
+ }
+ V1=eval_str(VV);
+ if(I++) LT=cons(V1-V0,LT);
+ V0=V1;
+ }
+ DT=cons(LT,DT);
+ if((RT=cdr(RT))==[]){
+ VE=rint(myfdeval(F,II[1])*10^Str[1]);
+ DT=cons([VE-V0],DT);
+ }
+ }
+ for(I=0,D=[],TT=DT;TT!=[];TT=cdr(TT)){
+ if(!I++) V=car(TT)[0];
+ else{
+ T1=reverse(cons(V,car(TT)));
+ V=car(T1);
+ if(length(TT)>1) T1=cdr(T1);
+ D=cons(T1,D);
+ }
+ }
+ for(DD=[],TT=D;TT!=[];TT=cdr(TT))
+ DD=cons([os_md.lmin(car(TT)),os_md.lmax(car(TT))],DD);
+ DD=reverse(DD);
+ L=lsort(L,DD,"append");
+ }
+ }
+ L=lsort(L,L0,"cons");
+ if(type(Top=getopt(top))==4||getopt(TeX)==1){
+ if(type(Top)==4){
+ K=length(L[0])-length(Top);
+ if(K>0&&K<4){
+ if(K>1){
+ Top=append(Top,["",""]);
+ K-=2;
+ }
+ if(K) Top=cons("",Top);
+ }
+ L=cons(Top,L);
+ }
+ if(type(H=getopt(hline))!=4) H=[0,1,z];
+ if(type(V=getopt(vline))!=4) V=[0,1,(DF)?z-2:z];
+ if(type(T=getopt(title))!=7) Out=ltotex(L|opt="tab",hline=H,vline=V);
+ else Out=ltotex(L|opt="tab",hline=H,vline=V,title=T);
+ if(Df) Out=str_subst(Out,"\\hline","\\cline{1-"+rtostr(length(L[0])-2)+"}");
+ return Out;
+ }
+ return L;
+ }
+ for(L=[],I=0;I<=D;I++){
+ X=II[0]+I*T/D;
+ L=cons([X,myfdeval(F,X)],L);
+ }
+ if(Df==1){
+ for(LD=[],LL=L;LL!=[];LL=cdr(LL)){
+ if(LD==[]) LD=cons([car(LL)[0],car(LL)[1],0],LD);
+ else LD=cons([car(LL)[0],car(LL)[1],abs(car(LL)[1]-car(LD)[1])],LD);
+ }
+ L=reverse(LD);
+ }
+ if(type(Str)==4){
+ if(length(Str)==1) Str=[Str[0],Str[0]];
+ if(Df==1 && length(Str)==2) Str=[Str[0],Str[1],Str[1]];
+ for(S=Str,Str=[];S!=[];S=cdr(S)){
+ if(type(car(S))!=4) Str=cons([car(S),3],Str);
+ else Str=cons(car(S),Str);
+ }
+ Str=reverse(Str);
+ for(LD=[],LL=L;LL!=[];LL=cdr(LL)){
+ for(K=[],J=length(Str); --J>=0; )
+ K=cons(sint(car(LL)[J],Str[J][0]|str=Str[J][1]),K);
+ LD=cons(K,LD);
+ }
+ L=LD;
+ }else
+ L=reverse(L);
+ if(type(M=getopt(mult))==1){
+ Opt=[["opt","tab"],["vline",[[0,2+Df]]],["width",-M]];
+ if(type(T=getopt(title))==7)
+ Opt=cons(["title",T],Opt);
+ if(type(Tp=getopt(top))==4)
+ Opt=cons(["top",Tp],Opt);
+ L=ltotex(L|option_list=Opt);
+ }
+ return L;
+}
+
+def distpoint(L)
+{
+ L=m2l(L|flat=1);
+ if(getopt(div)==5) Div=5;
+ else Div=10;
+ V=newvect(100/Div);
+ for(LT=L,LL=[],N=0; LT!=[]; LT=cdr(LT)){
+ if(type(K=car(LT))>1||K<0){
+ N++; continue;
+ }
+ LL=cons(K,LL);
+ T=idiv(K,Div);
+ if(Div==10 && T>=9) T=9;
+ else if(Div==5 && T>=19) T=19;
+ V[T]++;
+ }
+ V=vtol(V);
+ if((Opt=getopt(opt))=="data") return V;
+ Title=getopt(title);
+ OpList=[["opt","tab"]];
+ if(type(Title=getopt(title)) == 7)
+ OpList=cons(["title",Title],OpList);
+ if(Opt=="average"){
+ T=isMs()?["ϓ_","W΍","Œ_","ō_","󌱐l"]:
+ ["average","deviation","min","max","examinees"];
+ L=average(LL);
+ L=[sint(L[0],1),sint(L[1],1),L[3],L[4],L[2]];
+ if(N>0){
+ T=append(T,[isMs()?"Ȏ":"absentees"]);L=append(L,[N]);
+ }
+ OpList=cons(["align","c"],OpList);
+ return ltotex([T,L]|option_list=OpList);
+ }
+
+ if(getopt(opt)=="graph"){
+ Mul=getopt(size);
+ if(Div==5){
+ V0=["00","05","10","15","20","25","30","35","40","45","50","55",
+ "60","65","70","75","80","85","90","95"];
+ if(type(Mul)!=4){
+ Size = (TikZ)?[12,3,1/2,0.2]:[120,30,1/2,2];
+ }
+ }else{
+ V0=["00-","10-","20-","30-","40-","50-","60-","70-","80-","90-"];
+ if(type(Mul)!=4){
+ Size = (TikZ)?[8,3,1/2,0.2]:[80,30,1/2,2];
+ }
+ }
+ return ltotex([V,V0]|opt="graph",size=Size);
+ }
+ if(Div==5)
+ V0=["00--04","05--09","10--14","15--19", "20--24", "25--29", "30--34", "35-39",
+ "40--44", "45--49","50--54", "55--59","60--64", "65--69",
+ "70--74", "75--79","80--84", "85--89","90--94", "95--100"];
+ else
+ V0=["00--09","10--19","20--29","30--39","40--49","50--59","60--69",
+ "70--79","80--89","90--100"];
+ Title=getopt(title);
+ return ltotex([V0,V]|option_list=OpList);
+}
+
+def keyin(S)
+{
+ print(S,2);
+ purge_stdin();
+ S=get_line();
+ L=length(S=strtoascii(S));
+ if(L==0) return "";
+ return str_cut(S,0,L-2);
+}
+
+def init() {
+ LS=["DIROUT","DVIOUTA","DVIOUTB","DVIOUTH","DVIOUTL","TeXLim","TeXEq","TikZ",
+ "XYPrec","XYcm","Canvas"];
+ if(!access(get_rootdir()+"/help/os_muldif.dvi")||!access(get_rootdir()+"/help/os_muldif.pdf"))
+ mycat(["Put os_muldif.dvi and os_muldif.pdf in", get_rootdir()+(isMs()?"\\help.":"/help.")]);
+ if(!isMs()){
+ DIROUT="%HOME%/asir/tex";
+ DVIOUTA=str_subst(DVIOUTA,[["\\","/"],[".bat",".sh"]],0);
+ DVIOUTB=str_subst(DVIOUTB,[["\\","/"],[".bat",".sh"]],0);
+ DVIOUTL=str_subst(DVIOUTL,[["\\","/"],[".bat",".sh"]],0);
+ DVIOUTH="%ASIRROOT%/help/os_muldif.pdf";
+ }
+ Home=getenv("HOME");
+ if(type(Home)!=7) Home="";
+ for(Id=-7, F=Home; Id<-1;){
+ G = F+"/.muldif";
+ if(access(G)) Id = open_file(G);
+ else Id++;
+ if(Id==-6) F+="/asir";
+ else if(Id==-5) F=get_rootdir();
+ else if(Id==-4) F+="/bin";
+ else if(Id==-3) F=get_rootdir()+"/lib-asir-contrib";
+ }
+ if(Id>=0){
+ while((S=get_line(Id))!=0){
+ if(type(P=str_str(S,LS))==4 && (P0=str_char(S,P[1]+4,"="))>0){
+ if(P[0]<5){
+ P0=str_chr(S,P0+1,"\"");
+ if(P0>0){
+ for(P1=P0;(P2=str_char(S,P1+1,"\""))>0; P1=P2);
+ if(P1>P0+1){
+ SS=str_cut(S,P0+1,P1-1);
+ SS=str_subst(SS,["\\\\","\\\""],["\\","\""]);
+ if(P[0]==0) DIROUT=SS;
+ else if(P[0]==1) DVIOUTA=SS;
+ else if(P[0]==2) DVIOUTB=SS;
+ else if(P[0]==3) DVIOUTH=SS;
+ else if(P[0]==4) DVIOUTL=SS;
+ }
+ }
+ if(P0<0 || P1<P0+2) mycat(["Error! Definiton of", LS[P[0]],
+ "in .muldif"]);
+ }else{
+ SV=eval_str(str_cut(S,P0+1,str_len(S)-1));
+ if(P[0]==5) TeXLim=SV;
+ else if(P[0]==6) TeXEq=SV;
+ else if(P[0]==7) TikZ=SV;
+ else if(P[0]==8) XYPrec=SV;
+ else if(P[0]==9) XYcm=SV;
+ else if(P[0]==10) Canvas=SV;
+ }
+ }
+ }
+ close_file(Id);
+ }
+ chkfun(1,0);
+}
+
+#ifdef USEMODULE
+endmodule;
+os_md.init()$
+#else
+init()$
+#endif
+
+end$
diff --git a/graphics/ketcindy/ketcindyfolder/scripts/ketlibC/ketcommon.h b/graphics/ketcindy/ketcindyfolder/scripts/ketlibC/ketcommon.h
new file mode 100644
index 0000000000..7c0425cc64
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/scripts/ketlibC/ketcommon.h
@@ -0,0 +1,2418 @@
+//20181024 memberi debugged (for null list )
+//20180308 norm added
+
+int length1(double gdata[]){
+ return floor(gdata[0]+0.5);
+}
+
+int length2(double gdata[][2]){
+ return floor(gdata[0][0]+0.5);
+}
+
+int length3(double gdata[][3]){
+ return floor(gdata[0][0]+0.5);
+}
+
+int length4(double gdata[][4]){
+ return floor(gdata[0][0]+0.5);
+}
+
+int length5(double gdata[][5]){
+ return floor(gdata[0][0]+0.5);
+}
+
+int length6(double gdata[][6]){
+ return floor(gdata[0][0]+0.5);
+}
+
+int length2i(int gdata[][2]){
+ return gdata[0][0];
+}
+
+void copyd(int from, int upto, double q[], double p[]){
+ int i;
+ for(i=from; i<=upto; i++){
+ p[i]=q[i];
+ }
+}
+
+void copyi(int from, int upto, int q[], int p[]){
+ int i;
+ for(i=from; i<=upto; i++){
+ p[i]=q[i];
+ }
+}
+
+int push2(double x, double y, double ptL[][2]){
+ int nall=length2(ptL);
+ nall++;
+ ptL[nall][0]=x; ptL[nall][1]=y;
+ ptL[0][0]=nall;
+ return nall;
+}
+
+int push3(double x, double y, double z, double ptL[][3]){
+ int nall=length3(ptL);
+ nall++;
+ ptL[nall][0]=x; ptL[nall][1]=y; ptL[nall][2]=z;
+ ptL[0][0]=nall;
+ return nall;
+}
+
+int push4(double x, double y, double z, double w, double ptL[][4]){
+ int nall=length4(ptL);
+ nall++;
+ ptL[nall][0]=x; ptL[nall][1]=y;
+ ptL[nall][2]=z; ptL[nall][3]=w;
+ ptL[0][0]=nall;
+ return nall;
+}
+
+int push5(double x, double y, double z, double w, double u, double ptL[][5]){
+ int nall=length5(ptL);
+ nall++;
+ ptL[nall][0]=x; ptL[nall][1]=y;
+ ptL[nall][2]=z; ptL[nall][3]=w; ptL[nall][4]=u;
+ ptL[0][0]=nall;
+ return nall;
+}
+
+int push6(double x, double y, double z, double w, double u, double v,double ptL[][6]){
+ int nall=ptL[0][0];
+ nall++;
+ ptL[nall][0]=x; ptL[nall][1]=y;ptL[nall][2]=z;
+ ptL[nall][3]=w; ptL[nall][4]=u; ptL[nall][5]=v;
+ ptL[0][0]=nall;
+ return nall;
+}
+
+void pull3(int num, double ptL[][3],double pt[3]){
+ pt[0]=ptL[num][0]; pt[1]=ptL[num][1]; pt[2]=ptL[num][2];
+}
+
+void pull2(int num, double ptL[][2],double pt[2]){
+ pt[0]=ptL[num][0]; pt[1]=ptL[num][1];
+}
+
+void pull4(int num, double ptL[][4],double pt[4]){
+ pt[0]=ptL[num][0]; pt[1]=ptL[num][1];
+ pt[2]=ptL[num][2]; pt[3]=ptL[num][3];
+}
+
+void pull5(int num, double ptL[][5],double pt[5]){
+ pt[0]=ptL[num][0]; pt[1]=ptL[num][1];
+ pt[2]=ptL[num][2]; pt[3]=ptL[num][3]; pt[4]=ptL[num][4];
+}
+
+void pull6(int num, double ptL[][6],double pt[6]){
+ pt[0]=ptL[num][0]; pt[1]=ptL[num][1]; pt[2]=ptL[num][2];
+ pt[3]=ptL[num][3]; pt[4]=ptL[num][4]; pt[5]=ptL[num][5];
+}
+
+int add1(double gdata[], double x){
+ int nall;
+ nall=length1(gdata);
+ nall++;
+ gdata[nall]=x;
+ gdata[0]=nall;
+ return nall;
+}
+
+int add2(double gdata[][2], double x, double y){
+ int nall;
+ nall=push2(x, y, gdata);
+ return nall;
+}
+
+int add3(double gdata[][3], double x, double y, double z){
+ int nall;
+ nall=push3(x, y, z,gdata);
+ return nall;
+}
+
+int addptd3(double gdata[][3], double pt[3]){
+ int nall;
+ nall=push3(pt[0],pt[1],pt[2],gdata);
+ return nall;
+}
+
+int addptd2(double gdata[][2], double pt[2]){
+ int nall;
+ nall=push2(pt[0],pt[1],gdata);
+ return nall;
+}
+
+int addptd4(double gdata[][4], double pt[4]){
+ int nall;
+ nall=push4(pt[0],pt[1],pt[2],pt[3],gdata);
+ return nall;
+}
+
+int addptd5(double gdata[][5], double pt[5]){
+ int nall;
+ nall=push5(pt[0],pt[1],pt[2],pt[3],pt[4],gdata);
+ return nall;
+}
+
+int addptd6(double gdata[][6], double pt[6]){
+ int nall;
+ nall=push6(pt[0],pt[1],pt[2],pt[3],pt[4],pt[5],gdata);
+ return nall;
+}
+
+int appendd2(int level, int from,int upto, double gdata[][2],double mat[][2]){
+ int j, np, nall=length2(mat);
+ np=upto-from+1;
+ if(np<0){np=0;}
+ if(np>0){
+ if(level>0){
+ if(nall>0){
+ nall=add2(mat,Inf, level);
+ }
+ }
+ for(j=1; j<=np; j++){
+ mat[nall+j][0]=gdata[from+j-1][0];
+ mat[nall+j][1]=gdata[from+j-1][1];
+ }
+ }
+ mat[0][0]=nall+np;
+ return nall+np;
+}
+
+int appendd3(int level, int from,int upto, double gdata[][3],double mat[][3]){
+ int j, np, nall=length3(mat);
+ np=upto-from+1;
+ if(np<0){np=0;}
+ if(np>0){
+ if(level>0){
+ if(nall>0){
+ nall=add3(mat,Inf, level, 0);
+ }
+ }
+ for(j=1; j<=np; j++){
+ mat[nall+j][0]=gdata[from+j-1][0];
+ mat[nall+j][1]=gdata[from+j-1][1];
+ mat[nall+j][2]=gdata[from+j-1][2];
+ }
+ }
+ mat[0][0]=nall+np;
+ return nall+np;
+}
+
+int appendd6(int level, int from,int upto, double gdata[][6],double mat[][6]){
+ int j, np, nall=length6(mat);
+ np=upto-from+1;
+ if(np<0){np=0;}
+ if(np>0){
+ if(level>0){
+ if(nall>0){
+ nall=push6(Inf,level,0,0,0,0,mat);
+ }
+ }
+ for(j=1; j<=np; j++){
+ mat[nall+j][0]=gdata[from+j-1][0];
+ mat[nall+j][1]=gdata[from+j-1][1];
+ mat[nall+j][2]=gdata[from+j-1][2];
+ mat[nall+j][3]=gdata[from+j-1][3];
+ mat[nall+j][4]=gdata[from+j-1][4];
+ mat[nall+j][5]=gdata[from+j-1][5]; }
+ }
+ mat[0][0]=nall+np;
+ return nall+np;
+}
+
+int prependd2(int from,int upto, double gdata[][2],double mat[][2]){
+ int j,np, nall=length2(mat);
+ if(from<=upto){
+ np=upto-from+1;
+ for(j=nall; j>=1; j--){
+ mat[np+j][0]=mat[j][0];
+ mat[np+j][1]=mat[j][1];
+ }
+ for(j=1; j<=np; j++){
+ mat[j][0]=gdata[from+j-1][0];
+ mat[j][1]=gdata[from+j-1][1];
+ }
+ }else{
+ np=from-upto+1;
+ for(j=nall; j>=1; j--){
+ mat[np+j][0]=mat[j][0];
+ mat[np+j][1]=mat[j][1];
+ }
+ for(j=1; j<=np; j++){
+ mat[nall+j][0]=gdata[from-j+1][0];
+ mat[nall+j][1]=gdata[from-j+1][1];
+ }
+ }
+ mat[0][0]=nall+np;
+ return nall+np;
+}
+
+int prependd3(int from,int upto, double gdata[][3],double mat[][3]){
+ int j,np, nall=length3(mat);
+ if(from<=upto){
+ np=upto-from+1;
+ for(j=nall; j>=1; j--){
+ mat[np+j][0]=mat[j][0];
+ mat[np+j][1]=mat[j][1];
+ mat[np+j][2]=mat[j][2];
+ }
+ for(j=1; j<=np; j++){
+ mat[j][0]=gdata[from+j-1][0];
+ mat[j][1]=gdata[from+j-1][1];
+ mat[j][2]=gdata[from+j-1][2];
+ }
+ }else{
+ np=from-upto+1;
+ for(j=nall; j>=1; j--){
+ mat[np+j][0]=mat[j][0];
+ mat[np+j][1]=mat[j][1];
+ mat[np+j][2]=mat[j][2];
+ }
+ for(j=1; j<=np; j++){
+ mat[nall+j][0]=gdata[from-j+1][0];
+ mat[nall+j][1]=gdata[from-j+1][1];
+ mat[nall+j][2]=gdata[from-j+1][2];
+ }
+ }
+ mat[0][0]=nall+np;
+ return nall+np;
+}
+
+int appendd1(double num,double numvec[]){
+ int n;
+ n=floor(numvec[0]+0.5);
+ numvec[n+1]=num;
+ numvec[0]=n+1;
+ return n+1;
+}
+
+int appendi1(int num,int numvec[]){
+ int n;
+ n=numvec[0];
+ numvec[n+1]=num;
+ numvec[0]=n+1;
+ return n+1;
+}
+
+int prependd1(double num, double numvec[]){
+ int i,n;
+ n=numvec[0];
+ for(i=n; i>=1; i--){
+ numvec[i+1]=numvec[i];
+ }
+ numvec[1]=num;
+ numvec[0]=n+1;
+ return n+1;
+}
+
+int prependi1(int num, int numvec[]){
+ int i,n;
+ n=numvec[0];
+ for(i=n; i>=1; i--){
+ numvec[i+1]=numvec[i];
+ }
+ numvec[1]=num;
+ numvec[0]=n+1;
+ return n+1;
+}
+
+int removei2(int nrmv,int mat[][2]){
+ int j,nall=mat[0][0];
+ if(nall>0){
+ for(j=nrmv; j<=nall-1; j++){
+ mat[j][0]=mat[j+1][0];
+ mat[j][1]=mat[j+1][1];
+ }
+ mat[0][0]=nall-1;
+ return nall-1;
+ }
+ else{
+ mat[0][0]=0;
+ return 0;
+ }
+}
+
+void removed3(int nrmv,double mat[][3]){
+ int j,nall=length3(mat);
+ if(nall>0){
+ for(j=nrmv; j<=nall-1; j++){
+ mat[j][0]=mat[j+1][0];
+ mat[j][1]=mat[j+1][1];
+ mat[j][2]=mat[j+1][2];
+ }
+ mat[0][0]=nall-1;
+ return;
+ }
+}
+
+int dataindexd1(double out[],int din[][2]){
+ int n1=1, j, ctr=0, nall=floor(out[0]+0.5);
+ if(nall==0){
+ din[0][0]=0;
+ return 0;
+ }
+ for(j=1; j<=nall; j++){
+ if(out[j]>Inf-1){
+ ctr++;
+ din[ctr][0]=n1;
+ din[ctr][1]=j-1;
+ n1=j+1;
+ }
+ }
+ ctr++;
+ din[ctr][0]=n1;
+ din[ctr][1]=nall;
+ din[0][0]=ctr;
+ return ctr;
+}
+
+int dataindexd2(int level,double out[][2],int din[][2]){
+ int n1=1, j, ctr=0, nall=length2(out);
+ if(nall==0){
+ din[0][0]=0;
+ return 0;
+ }
+ for(j=1; j<=nall; j++){
+ if(out[j][0]>Inf-1){
+ if((level==0) || (out[j][1]==level)){
+ ctr++;
+ din[ctr][0]=n1;
+ din[ctr][1]=j-1;
+ n1=j+1;
+ }
+ }
+ }
+ ctr++;
+ din[ctr][0]=n1;
+ din[ctr][1]=nall;
+ din[0][0]=ctr;
+ return ctr;
+}
+
+int dataindexd3(int level, double out[][3],int din[][2]){
+ int n1=1, j, ctr=0, nall=length3(out);
+ if(nall==0){
+ din[0][0]=0;
+ return 0;
+ }
+ for(j=1; j<=nall; j++){
+ if(out[j][0]>Inf-1){
+ if((level==0) || (out[j][1]==level)){
+ ctr++;
+ din[ctr][0]=n1;
+ din[ctr][1]=j-1;
+ n1=j+1;
+ }
+ }
+ }
+ ctr++;
+ din[ctr][0]=n1;
+ din[ctr][1]=nall;
+ din[0][0]=ctr;
+ return ctr;
+}
+
+int dataindexd4(int level, double out[][4],int din[][2]){
+ int n1=1, j, ctr=0, nall=length4(out);
+ if(nall==0){
+ din[0][0]=0;
+ return 0;
+ }
+ for(j=1; j<=nall; j++){
+ if(out[j][0]>Inf-1){
+ if((level==0) || (out[j][1]==level)){
+ ctr++;
+ din[ctr][0]=n1;
+ din[ctr][1]=j-1;
+ n1=j+1;
+ }
+ }
+ }
+ ctr++;
+ din[ctr][0]=n1;
+ din[ctr][1]=nall;
+ din[0][0]=ctr;
+ return ctr;
+}
+
+int dataindexd6(int level, double out[][6],int din[][2]){
+ int n1=1, j, ctr=0, nall=length6(out);
+ if(nall==0){
+ din[0][0]=0;
+ return 0;
+ }
+ for(j=1; j<=nall; j++){
+ if(out[j][0]>Inf-1){
+ if((level==0) || (out[j][1]==level)){
+ ctr++;
+ din[ctr][0]=n1;
+ din[ctr][1]=j-1;
+ n1=j+1;
+ }
+ }
+ }
+ ctr++;
+ din[ctr][0]=n1;
+ din[ctr][1]=nall;
+ din[0][0]=ctr;
+ return ctr;
+}
+
+int dataindexi1(int out[],int din[][2]){
+ int n1=1, j, ctr=0, nall=out[0], ninfp=0;
+ if(nall==0){
+ din[0][0]=0; din[0][1]=-1;
+ return 0;
+ }
+ for(j=1; j<=nall; j++){
+ if(out[j]==Infint){
+ ctr++;
+ if(j==ninfp+1){
+ din[ctr][0]=0; din[ctr][1]=-1;
+ }
+ else{
+ din[ctr][0]=n1; din[ctr][1]=j-1;
+ }
+ ninfp=j;
+ n1=j+1;
+ }
+ }
+ ctr++;
+ if(out[nall]==Infint){
+ din[ctr][0]=0; din[ctr][1]=0;
+ }
+ else{
+ din[ctr][0]=n1; din[ctr][1]=nall;
+ }
+ din[0][0]=ctr;
+ return ctr;
+}
+
+void replacelistd1(int ii,double out[],double rep[]){
+ int din[DsizeS][2],k,j,js,je, nall=length1(out),nr=length1(rep);
+ double tmpd1[DsizeL];
+ dataindexd1(out,din);
+ tmpd1[0]=0;
+ for(k=1;k<=din[0][0];k++){
+ if(k!=1){
+ appendd1(Inf,tmpd1);
+ }
+ if(k!=ii){
+ js=din[k][0]; je=din[k][1];
+ for(j=js;j<=je;j++){
+ appendd1(out[j],tmpd1);
+ }
+ }else{
+ for(j=1;j<=nr;j++){
+ appendd1(rep[j],tmpd1);
+ }
+ }
+ }
+ nall=length1(tmpd1);
+ out[0]=0;
+ for(j=1;j<=nall;j++){
+ appendd1(tmpd1[j],out);
+ }
+}
+
+void replacelistd2(int level,int ii,double out[][2],double rep[][2]){//180419
+ int din[DsizeS][2],k,js,je, nall=length2(out),nr=length2(rep);
+ double tmpmd2[DsizeL][2];
+ dataindexd2(level,out,din);
+ tmpmd2[0][0]=0;
+ for(k=1;k<=din[0][0];k++){
+ if(k!=ii){
+ js=din[k][0]; je=din[k][1];
+ appendd2(level,js,je,out,tmpmd2);
+ }else{
+ appendd2(level,1,nr,rep,tmpmd2);
+ }
+ }
+ nall=length2(tmpmd2);
+ out[0][0]=0;
+ appendd2(level,1,nall,tmpmd2,out);
+}
+
+void replacelistd3(int level,int ii,double out[][3],double rep[][3]){//180428
+ int din[DsizeS][2],k,js,je, nall=length3(out),nr=length3(rep);
+ double tmpmd3[DsizeL][3];
+ dataindexd3(level,out,din);
+ tmpmd3[0][0]=0;
+ for(k=1;k<=din[0][0];k++){
+ if(k!=ii){
+ js=din[k][0]; je=din[k][1];
+ appendd3(level,js,je,out,tmpmd3);
+ }else{
+ appendd3(level,1,nr,rep,tmpmd3);
+ }
+ }
+ nall=length3(tmpmd3);
+ out[0][0]=0;
+ appendd3(level,1,nall,tmpmd3,out);
+}
+
+void replacelistd6(int level,int ii,double out[][6],double rep[][6]){//180421
+ int din[DsizeS][2],k,js,je, nall=length6(out),nr=length6(rep);
+ double tmpmd6[DsizeL][6];
+ dataindexd6(level,out,din);
+ js=din[ii][0]; je=din[ii][1];
+ tmpmd6[0][0]=0;
+ for(k=1;k<=din[0][0];k++){
+ if(k!=ii){
+ js=din[k][0]; je=din[k][1];
+ appendd6(level,js,je,out,tmpmd6);
+ }else{
+ appendd6(level,1,nr,rep,tmpmd6);
+ }
+ }
+ nall=length6(tmpmd6);
+ out[0][0]=0;
+ appendd6(level,1,nall,tmpmd6,out);
+}
+
+void removelistd2(int level,int ii,double out[][2]){//180503
+ int din[DsizeS][2],k,js,je,nall=length2(out);
+ double tmpmd[DsizeL][2];
+ dataindexd2(level,out,din);
+ js=din[ii][0]; je=din[ii][1];
+ tmpmd[0][0]=0;
+ appendd2(0,je+1,nall,out,tmpmd);
+ out[0][0]=0;
+ if(js>1){
+ out[0][0]=js-2;
+ }
+ appendd2(0,1,length2(tmpmd),tmpmd,out);
+}
+
+void dispvec(int n,double dt[]){
+ int i;
+ for(i=0; i<n; i++){
+ printf("%f ",dt[i]);
+ }
+ printf("\n");
+}
+
+void dispveci(int n,int dt[]){
+ int i;
+ for(i=0; i<n; i++){
+ printf("%d ",dt[i]);
+ }
+ printf("\n");
+}
+
+void dispmatd2(int from, int upto, double mat[][2]){
+ int i;
+ for(i=from; i<upto+1; i++){
+ printf("%3d %7.5f %7.5f\n",i,mat[i][0],mat[i][1]);
+ }
+}
+
+void dispmatd3(int from, int upto, double mat[][3]){
+ int i;
+ for(i=from; i<upto+1; i++){
+ printf("%3d %7.5f %7.5f %7.5f\n",i,mat[i][0],mat[i][1],mat[i][2]);
+ }
+}
+
+void dispmatd4(int from, int upto, double mat[][4]){
+ int i;
+ for(i=from; i<upto+1; i++){
+ printf("%3d %7.5f %7.5f ",i,mat[i][0],mat[i][1]);
+ printf("%7.5f %7.5f\n",mat[i][2],mat[i][3]);
+ }
+}
+
+void dispmatd5(int from, int upto, double mat[][5]){
+ int i;
+ for(i=from; i<upto+1; i++){
+ printf("%3d %7.5f %7.5f ",i,mat[i][0],mat[i][1]);
+ printf("%7.5f %7.5f %7.5f\n",mat[i][2],mat[i][3],mat[i][4]);
+ }
+}
+
+void dispmatd6(int from, int upto, double mat[][6]){
+ int i;
+ for(i=from; i<upto+1; i++){
+ printf("%3d %7.5f %7.5f %7.5f ",i,mat[i][0],mat[i][1],mat[i][2]);
+ printf("%7.5f %7.5f %7.5f\n",mat[i][3],mat[i][4],mat[i][5]);
+ }
+}
+
+void dispmatd1all(double dt[]){
+ int i,n;
+ n=length1(dt);
+ for(i=1; i<=n; i++){
+ printf("%f ",dt[i]);
+ }
+ printf("\n");
+}
+
+void dispmatd2all(double mat[][2]){
+ int i;
+ if(mat[0][0]==0){printf("%s\n","no data");return;}
+ for(i=1; i<mat[0][0]+1; i++){
+ printf("%3d %7.5f %7.5f\n",i,mat[i][0],mat[i][1]);
+ }
+}
+
+void dispmatd3all(double mat[][3]){
+ int i;
+ if(mat[0][0]==0){printf("%s\n","no data");return;}
+ for(i=1; i<mat[0][0]+1; i++){
+ printf("%3d %7.5f %7.5f %7.5f\n",i,mat[i][0],mat[i][1],mat[i][2]);
+ }
+}
+
+void dispmatd4all(double mat[][4]){
+ int i;
+ if(mat[0][0]==0){printf("%s\n","no data");return;}
+ for(i=1; i<mat[0][0]+1; i++){
+ printf("%3d %7.5f %7.5f ",i,mat[i][0],mat[i][1]);
+ printf("%7.5f %7.5f\n",mat[i][2],mat[i][3]);
+ }
+}
+
+void dispmatd5all(double mat[][5]){
+ int i;
+ if(mat[0][0]==0){printf("%s\n","no data");return;}
+ for(i=1; i<mat[0][0]+1; i++){
+ printf("%3d %7.5f %7.5f ",i,mat[i][0],mat[i][1]);
+ printf("%7.5f %7.5f %7.5f\n",mat[i][2],mat[i][3],mat[i][4]);
+ }
+}
+
+void dispmatd6all(double mat[][6]){
+ int i;
+ if(mat[0][0]==0){printf("%s\n","no data");return;}
+ for(i=1; i<mat[0][0]+1; i++){
+ printf("%3d %7.5f %7.5f %7.5f ",i,mat[i][0],mat[i][1],mat[i][2]);
+ printf("%7.5f %7.5f %7.5f\n",mat[i][3],mat[i][4],mat[i][5]);
+ }
+}
+
+void dispmati2(int from, int upto, int mat[][2]){
+ int i;
+ for(i=from; i<upto+1; i++){
+ printf("%3d %d %d\n",i,mat[i][0],mat[i][1]);
+ }
+}
+
+void dispmati1(int from, int upto, int mat[]){
+ int i;
+ for(i=from; i<upto+1; i++){
+ printf("%3d %d\n",i,mat[i]);
+ }
+}
+
+void writedata3(const char *fname, double out[][3]){
+ int i, nall;
+ FILE *fp;
+ nall=length3(out);
+ fp=fopen(fname,"w");
+ for(i=1; i<=nall; i++){
+ fprintf(fp,"%7.5f %7.5f %7.5f",out[i][0],out[i][1],out[i][2]);
+ if(i<nall){fprintf(fp,"\n");}
+ }
+ fclose(fp);
+}
+
+void readdata3(const char *fname, double out[][3]){
+ int n,j;
+ FILE *fp;
+ fp=fopen(fname,"r");
+ if(fp==NULL){
+ printf("file not found\n");
+ return;
+ }
+ n=1;
+ while( ! feof(fp) && n<DsizeL){
+ for(j=0;j<3;j++){
+ fscanf(fp,"%lf",&out[n][j]);
+ }
+ n++;
+ }
+ n--;
+ fclose(fp);
+ out[0][0]=n;
+}
+
+void writedata2(const char *fname, double out[][2]){
+ int i, nall;
+ FILE *fp;
+ nall=length2(out);
+ fp=fopen(fname,"w");
+ for(i=1; i<=nall; i++){
+ fprintf(fp,"%7.5f %7.5f",out[i][0],out[i][1]);
+ if(i<nall){fprintf(fp,"\n");}
+ }
+ fclose(fp);
+}
+
+void readdata2(const char *fname, double out[][2]){
+ int n,j;
+ FILE *fp;
+ fp=fopen(fname,"r");
+ if(fp==NULL){
+ printf("file not found\n");
+ return;
+ }
+ n=1;
+ while( ! feof(fp) && n<DsizeL){
+ for(j=0;j<2;j++){
+ fscanf(fp,"%lf",&out[n][j]);
+ }
+ n++;
+ }
+ n--;
+ fclose(fp);
+ out[0][0]=n;
+}
+
+int output2(const char *var, const char *fname, int level, double out[][2]){
+ int nall=length2(out), ndin, din[DsizeM][2],i,j;
+ double tmpd[2];
+ FILE *fp;
+ fp=fopen(fname,"w");
+ if (fp == NULL) {
+ printf("cannot open\n");
+ return -1;
+ }
+ ndin=dataindexd2(level, out,din);
+ fprintf(fp,"%s//\n",var);
+ for(i=1; i<=ndin; i++){
+ fprintf(fp,"start//\n");
+ fprintf(fp,"[");
+ for(j=din[i][0]; j<=din[i][1]; j++){
+ pull2(j,out,tmpd);
+ fprintf(fp,"[ %7.5f, %7.5f]",tmpd[0],tmpd[1]);
+ if(j<din[i][1]){
+ fprintf(fp,",");
+ }
+ }
+ fprintf(fp,"]//\n");
+ if(i<ndin){
+ fprintf(fp,"end//\n");
+ }
+ else{
+ fprintf(fp,"end////\n");
+ }
+ }
+ fclose(fp);
+ return 0;
+}
+
+void simplesort(double number[]){
+ int i,j, total=number[0];
+ double tmp;
+ for (i=1; i<=total; i++) {
+ for (j=i+1; j<=total; j++) {
+ if (number[i] > number[j]) {
+ tmp = number[i];
+ number[i] = number[j];
+ number[j] = tmp;
+ }
+ }
+ }
+}
+
+int memberi(int a, int list[]){
+ int i, n=list[0];
+ if(n==0){return 0;} //181024
+ for(i=1; i<=n; i++){
+ if(a==list[i]){
+ return 1;
+ }
+ }
+ return 0;
+}
+
+double dotprod(int dim, double p[], double q[]){
+ double ans;
+ ans=p[0]*q[0]+p[1]*q[1];
+ if(dim>2){
+ ans=ans+p[2]*q[2];
+ }
+ return ans;
+}
+
+double norm(int dim, double p[]){
+ double ans;
+ ans=dotprod(dim,p,p);
+ return sqrt(ans);
+}
+
+double dist(int dim, double p[], double q[]){
+ double tmp;
+ tmp=pow(q[0]-p[0],2)+pow(q[1]-p[1],2);
+ if(dim>2){
+ tmp=tmp+pow(q[2]-p[2],2);
+ }
+ return sqrt(tmp);
+}
+
+void crossprod(int dim,double a[3],double b[3], double out[3]){
+ if(dim==3){
+ out[0]=a[1]*b[2]-a[2]*b[1];
+ out[1]=a[2]*b[0]-a[0]*b[2];
+ out[2]=a[0]*b[1]-a[1]*b[0];
+ }else{
+ out[0]=a[0]*b[1]-a[1]*b[0];
+ out[1]=Inf;
+ }
+}
+
+void reflectpoint(double p1[2],double regard[][2],double p2[2]){
+ double pa[2],pb[2],u,v,a,b,u2,v2;
+ pull2(1,regard,pa);
+ if(length2(regard)==1){
+ p2[0]=2*pa[0]-p1[0]; p2[1]=2*pa[1]-p1[1];
+ }else{
+ pull2(2,regard,pb);
+ u=pb[0]-pa[0]; u2=pow(u,2.0);
+ v=pb[1]-pa[1]; v2=pow(v,2.0);
+ a=pa[0]; b=pa[1];
+ p2[0]=(u2-v2)/(u2+v2)*p1[0]+2*u*v/(u2+v2)*p1[1];
+ p2[0]=p2[0]-2*v*(u*b-v*a)/(u2+v2);
+ p2[1]=2*u*v/(u2+v2)*p1[0]-(u2-v2)/(u2+v2)*p1[1];
+ p2[1]=p2[1]+2*u*(u*b-v*a)/(u2+v2);
+ }
+}
+
+void pointoncurve(double t, double gdata[][2], double eps, double pt[]){
+ double pa[2],pb[2], s;
+ int n, nall;
+ n=floor(t+eps);
+ s=fmax(t-n,0);
+ nall=length2(gdata);
+ if(n>=nall){
+ pull2(nall,gdata,pt);
+// pt[0]=gdata[nall][0]; pt[1]=gdata[nall][1];
+ }
+ else{
+ pull2(n,gdata,pa);
+ pull2(n+1,gdata,pb);
+ pt[0]=(1-s)*pa[0]+s*pb[0];
+ pt[1]=(1-s)*pa[1]+s*pb[1];
+ }
+}
+
+int partcrv(double a,double b,double pkL[][2], double pL[][2]){
+ int i, is, ie, nall;
+ double eps=pow(10,-3.2);
+ is=ceil(a);
+ ie=floor(b);
+ nall=0;
+ if(a<is-eps){
+ nall++;
+ pL[nall][0]=(is-a)*pkL[is-1][0]+(1-is+a)*pkL[is][0];
+ pL[nall][1]=(is-a)*pkL[is-1][1]+(1-is+a)*pkL[is][1];
+ }
+ for(i=is; i<=ie; i++){
+ nall++;
+ pL[nall][0]=pkL[i][0];
+ pL[nall][1]=pkL[i][1];
+ }
+ if(b>ie+eps){
+ nall++;
+ pL[nall][0]=(1-b+ie)*pkL[ie][0]+(b-ie)*pkL[ie+1][0];
+ pL[nall][1]=(1-b+ie)*pkL[ie][1]+(b-ie)*pkL[ie+1][1];
+ }
+ pL[0][0]=nall;
+ return nall;
+}
+
+int partcrv3(double a,double b,double pkL[][3], double pL[][3]){
+ int i, is, ie, nall;
+ double eps=pow(10,-3.2);
+ is=ceil(a);
+ ie=floor(b);
+ nall=0;
+ if(a<is-eps){
+ nall++;
+ pL[nall][0]=(is-a)*pkL[is-1][0]+(1-is+a)*pkL[is][0];
+ pL[nall][1]=(is-a)*pkL[is-1][1]+(1-is+a)*pkL[is][1];
+ pL[nall][2]=(is-a)*pkL[is-1][2]+(1-is+a)*pkL[is][2];
+ }
+ for(i=is; i<=ie; i++){
+ nall++;
+ pL[nall][0]=pkL[i][0];
+ pL[nall][1]=pkL[i][1];
+ pL[nall][2]=pkL[i][2];
+ }
+ if(b>ie+eps){
+ nall++;
+ pL[nall][0]=(1-b+ie)*pkL[ie][0]+(b-ie)*pkL[ie+1][0];
+ pL[nall][1]=(1-b+ie)*pkL[ie][1]+(b-ie)*pkL[ie+1][1];
+ pL[nall][2]=(1-b+ie)*pkL[ie][2]+(b-ie)*pkL[ie+1][2];
+ }
+ pL[0][0]=nall;
+ return nall;
+}
+
+int connectseg(double pdata[][2], double eps, double out[][2]){
+ int din[DsizeM][2], nd, nq, i, j, flg, st, en, ntmp;
+ int nall=length2(pdata), nout=0;
+ double qd[DsizeM][2], ah[2], ao[2], p[2], q[2], tmp[2];
+ out[0][0]=0;
+ if(length2(pdata)==0){return 0;} //180613
+ nd=dataindexd2(0,pdata,din);
+ qd[0][0]=0;
+ nq=appendd2(0,din[1][0],din[1][1],pdata,qd);
+ nd=removei2(1,din);
+ while(nd>0){
+ pull2(1,qd,ah);
+ pull2(nq,qd,ao);
+ flg=0;
+ for(j=1; j<=nd; j++){
+ st=din[j][0];
+ en=din[j][1];
+ pull2(st,pdata,p);
+ pull2(en,pdata,q);
+ if(dist(2,p,ao)<eps){
+ nq=appendd2(0,st+1,en,pdata,qd);
+ nd=removei2(j,din);
+ flg=1;
+ break;
+ }
+ if(dist(2,q,ao)<eps){
+ nq=appendd2(0,en-1,st,pdata,qd);
+ nd=removei2(j,din);
+ flg=1;
+ break;
+ }
+ if(dist(2,p,ah)<eps){
+ nq=prependd2(en,st+1,pdata,qd);
+ nd=removei2(j,din);
+ flg=1;
+ break;
+ }
+ if(dist(2,q,ah)<eps){
+ nq=prependd2(st,en-1,pdata,qd);
+ nd=removei2(j,din);
+ flg=1;
+ break;
+ }
+ }
+ if(flg==0){
+ nout=appendd2(2,1,nq,qd,out);
+ qd[0][0]=0;
+ nq=appendd2(0,din[1][0],din[1][1],pdata,qd);
+ nd=removei2(1,din);
+ }
+ }
+ if(nq>0){
+ nout=appendd2(2,1,nq,qd,out);
+ }
+ return nout;
+}
+
+int connectseg3(double pdata[][3], double eps, double out[][3]){
+ int din[DsizeM][2],i,j,nd,nq,flg, st, en, ntmp;
+ int nall=length3(pdata), nout=0;
+ double qd[DsizeM][3], ah[3], ao[3], p[3], q[3], tmp[3];
+ out[0][0]=0;
+ if(length3(pdata)==0){return 0;} //180613
+ nd=dataindexd3(0,pdata,din);
+ qd[0][0]=0;
+ nq=appendd3(0,din[1][0],din[1][1],pdata,qd);
+ removei2(1,din);
+ while(nd>0){
+ pull3(1,qd,ah);
+ pull3(nq,qd,ao);
+ flg=0;
+ for(j=1; j<=nd; j++){
+ st=din[j][0];
+ en=din[j][1];
+ pull3(st,pdata,p);
+ pull3(en,pdata,q);
+ if(dist(3,p,ao)<eps){
+ nq=appendd3(0,st+1,en,pdata,qd);
+ nd=removei2(j,din);
+ flg=1;
+ break;
+ }
+ if(dist(3,q,ao)<eps){
+ nq=appendd3(0,en-1,st,pdata,qd);
+ nd=removei2(j,din);
+ flg=1;
+ break;
+ }
+ if(dist(3,p,ah)<eps){
+ nq=prependd3(en,st+1,pdata,qd);
+ nd=removei2(j,din);
+ flg=1;
+ break;
+ }
+ if(dist(3,q,ah)<eps){
+ nq=prependd3(st,en-1,pdata,qd);
+ nd=removei2(j,din);
+ flg=1;
+ break;
+ }
+ }
+ if(flg==0){
+ nout=appendd3(2,1,nq,qd,out);
+ qd[0][0]=0;
+ nq=appendd3(0,din[1][0],din[1][1],pdata,qd);
+ nd=removei2(1,din);
+ }
+ }
+ if(nq>0){
+ nout=appendd3(2,1,nq,qd,out);
+ }
+ return nout;
+}
+
+void koutenseg(double a[2], double b[2], double c[2], double d[2],
+ double eps, double eps2, double out[4]){
+ double v[2], epss,eps0=Eps, sv2, p1, p2, q1,q2,m1, m2, M1, M2, t;
+ double tmp1d2[2], tmp2d1, p[2], q[2];
+ v[0]=b[0]-a[0]; v[1]=b[1]-a[1];
+ sv2=pow(v[0],2.0)+pow(v[1],2.0);
+ if(sv2<pow(10,-6.0)){
+ out[0]=Inf;
+ return;
+ }
+ p[0]=c[0]-a[0]; p[1]=c[1]-a[1];
+ q[0]=d[0]-a[0]; q[1]=d[1]-a[1];
+ epss=fmin(eps2, eps/sqrt(sv2));
+ p1=(p[0]*v[0]+p[1]*v[1])/sv2;
+ p2=(-p[0]*v[1]+p[1]*v[0])/sv2;
+ q1=(q[0]*v[0]+q[1]*v[1])/sv2;
+ q2=(-q[0]*v[1]+q[1]*v[0])/sv2;
+ m1=-epss; M1=1+epss;
+ m2=-epss; M2=epss;
+ if((fmax(p1,q1)<m1) || (fmin(p1,q1)>M1)){
+ out[0]=Inf;
+ return;
+ }
+ if((fmax(p2,q2)<m2) || (fmin(p2,q2)>M2)){
+ out[0]=Inf;
+ return;
+ }
+ if(p2*q2<0){
+ t=p1-(q1-p1)/(q2-p2)*p2;
+ if((t>m1)&& (t<M1)){
+ if((t>-eps0) && (t<1+eps0)){
+ tmp1d2[0]=a[0]+t*v[0]; tmp1d2[1]=a[1]+t*v[1];
+ tmp2d1=fmin(fmax(t,0),1);
+ out[0]=tmp1d2[0]; out[1]=tmp1d2[1];
+ out[2]=tmp2d1; out[3]=0;
+ }
+ else{
+ tmp1d2[0]=a[0]+t*v[0]; tmp1d2[1]=a[1]+t*v[1];
+ tmp2d1=fmin(fmax(t,0),1);
+ out[0]=tmp1d2[0]; out[1]=tmp1d2[1];
+ out[2]=tmp2d1; out[3]=1;
+ }
+ return;
+ }
+ if((p1<m1)||(p1>M1)||(p2<m2)||(p2>M2)){
+ if((q1<m1)||(q1>M1)||(q2<m2)||(q2>M2)){
+ out[0]=Inf;
+ return;
+ }
+ t=fmin(fmax(q1,0),1);
+ tmp1d2[0]=a[0]+t*v[0]; tmp1d2[1]=a[1]+t*v[1];
+ out[0]=tmp1d2[0]; out[1]=tmp1d2[1];
+ out[2]=t; out[3]=1;
+ return;
+ }
+ t=fmin(fmax(p1,0),1);
+ tmp1d2[0]=a[0]+t*v[0]; tmp1d2[1]=a[1]+t*v[1];
+ out[0]=tmp1d2[0]; out[1]=tmp1d2[1];
+ out[2]=t; out[3]=1;
+ return;
+ }
+ if((p1>-eps0)&&(p1<1+eps0)&&(p2>-eps0)&&(p2<eps0)){
+ t= p1;
+ tmp1d2[0]=a[0]+t*v[0]; tmp1d2[1]=a[1]+t*v[1];
+ out[0]=tmp1d2[0]; out[1]=tmp1d2[1];
+ out[2]=t; out[3]=0;
+ return;
+ }
+ if((q1>-eps0)&&(q1<1+eps0)&&(q2>-eps0)&&(q2<eps0)){
+ t= q1;
+ tmp1d2[0]=a[0]+t*v[0]; tmp1d2[1]=a[1]+t*v[1];
+ out[0]=tmp1d2[0]; out[1]=tmp1d2[1];
+ out[2]=t; out[3]=0;
+ return;
+ }
+ if((p1<m1)||(p1>M1)||(p2<m2)||(p2>M2)){
+ if((q1<m1)||(q1>M1)||(q2<m2)||(q2>M2)){
+ out[0]=Inf;
+ return;
+ }
+ t=fmin(fmax(q1,0),1);
+ tmp1d2[0]=a[0]+t*v[0]; tmp1d2[1]=a[1]+t*v[1];
+ out[0]=tmp1d2[0]; out[1]=tmp1d2[1];
+ out[2]=t; out[3]=1;
+ return;
+ }
+ if((q1<m1)||(q1>M1)||(q2<m2)||(q2>M2)){
+ t=fmin(fmax(p1,0),1);
+ tmp1d2[0]=a[0]+t*v[0]; tmp1d2[1]=a[1]+t*v[1];
+ out[0]=tmp1d2[0]; out[1]=tmp1d2[1];
+ out[2]=t; out[3]=1;
+ return;
+ }
+ if(fabs(p2)<fabs(q2)){
+ t=fmin(fmax(p1,0),1);
+ }
+ else{
+ t=fmin(fmax(q1,0),1);
+ }
+ tmp1d2[0]=a[0]+t*v[0]; tmp1d2[1]=a[1]+t*v[1];
+ out[0]=tmp1d2[0]; out[1]=tmp1d2[1];
+ out[2]=t; out[3]=1;
+ return;
+}
+
+double paramoncurve(double p[2], int n, double ptL[][2]){
+ double pa[2], pb[2], v[2], w[2], o[2], d2, s;
+ int nptL=length2(ptL);
+ if(n==nptL){
+ return nptL;
+ }
+ else{
+ pull2(n,ptL,pa);
+ pull2(n+1,ptL,pb);
+ v[0]=pb[0]-pa[0]; v[1]=pb[1]-pa[1];
+ w[0]=p[0]-pa[0]; w[1]=p[1]-pa[1];
+ o[0]=0; o[1]=0;
+ d2=pow(dist(2,v,o),2.0);
+ s=dotprod(2,v,w)/d2;
+ s=fmin(fmax(s,0),1);
+ return n+s;
+ }
+}
+
+void nearestptpt(double pa[2], double pL[][2], double pt[4]){
+ double eps0=pow(10,-6.0), p[2], pm[2], im, sm, s;
+ double ans[7], a1,a2, b1,b2, v1, v2, x1, x2, t, tmpd1;
+ int i, n, npL=length2(pL);
+ ans[0]=pa[0]; ans[1]=pa[1];
+ ans[2]=1;
+ p[0]=pL[1][0]; p[1]=pL[1][1];
+ ans[3]=p[0]; ans[4]=p[1];
+ ans[5]=1; ans[6]=dist(2,pa,p);
+ pm[0]=pL[1][0]; pm[1]=pL[1][1];
+ im=1;
+ sm=dist(2,pm,pa);
+ for(i=1; i<=npL-1; i++){
+ a1=pL[i][0]; a2=pL[i][1];
+ b1=pL[i+1][0]; b2=pL[i+1][1];
+ v1=b1-a1; v2=b2-a2;
+ x1=pa[0]; x2=pa[1];
+ tmpd1=pow(v2,2.0)+pow(v1,2.0);
+ if(fabs(tmpd1)<eps0){
+ continue;
+ }
+ t=(-a2*v2-v1*a1+v1*x1+x2*v2)/tmpd1;
+ if(t<-eps0){
+ p[0]=a1; p[1]=a2;
+ }
+ else if(t>1+eps0){
+ p[0]=b1; p[1]=b2;
+ }
+ else{
+ p[0]=a1+t*v1; p[1]=a2+t*v2;
+ }
+ s=dist(2,p,pa);
+ if(s<sm-eps0){
+ tmpd1=paramoncurve(p,i,pL);
+ pm[0]=p[0]; pm[1]=p[1];
+ im=tmpd1; sm=s;
+ }
+ }
+ if(sm<ans[6]){
+ ans[0]=pa[0]; ans[1]=pa[1];
+ ans[2]=n;
+ ans[3]=pm[0]; ans[4]=pm[1];
+ ans[5]=im; ans[6]=sm;
+ }
+ pt[0]=ans[3]; pt[1]=ans[4];
+ pt[2]=ans[5]; pt[3]=ans[6];
+}
+
+int intersectselfPp(double data1[][2],double eps,double eps1s,double kL[][4]){
+ double a[2], b[2], tmpd2[2], tmpd4[4], tmpd5[5], p[2], q[2], t, s;
+ double eps0=pow(10,-5.0);
+ double tmpd1, tmp1d1, tmp2d1;
+ int i, j, k, n, is, ndata1,nkL, ntmp, ntmp1,flg, closed=0;
+ ndata1=length2(data1);
+ p[0]=data1[1][0]; p[1]=data1[1][1];
+ q[0]=data1[ndata1][0]; q[1]=data1[ndata1][1];
+ if(dist(2,p,q)<Eps){closed=1;}
+ kL[0][0]=0; nkL=0;
+ for(i=1; i<=ndata1; i++){
+ ntmp=0; tmpd1=Inf;
+ pull2(i,data1,a);
+ nearestptpt(a, data1, tmpd4);
+ n=floor(tmpd4[2]+0.5);
+ if(n==i){continue;}
+ if(closed==1){
+ if((i==1)&&(n==ndata1)){continue;}
+ if((i==ndata1)&&(n==1)){continue;}
+ }
+ ntmp1=floor(tmpd4[2]+Eps);
+ if((tmpd4[3]<eps1s)&&(ntmp1!=i)){
+ if(ntmp<ntmp1){
+ ntmp=ntmp1;
+ tmpd1=tmpd4[3];
+ nkL=addptd4(kL,tmpd4);
+ }
+ else if(tmpd4[3]<tmpd1){
+ tmpd1=tmpd4[3];
+ kL[0][0]--;
+ nkL=addptd4(kL,tmpd4);
+ }
+ }
+ }
+ return nkL;
+}
+
+/*
+int intersectcrvsPptest(double data1[][2], double data2[][2],
+ double eps1,double eps2, double kL[][4]){
+ double t, s, a[2], b[2], p[2], q[2];
+ double sqeps=pow(10,-10.0), eps0=pow(10,-2.0);
+ double tmp1d2[2],tmp2d2[2],tmpd4[4],tmp1d4[4],tmpd5[5];
+ double tmpd1,tmp1d1,tmp2d1, kL0[DsizeL][5], ds;
+ int i, j, k, n, is, nkL, nall, ndata1,ndata2,ntmp, ntmp1, flg;
+ ndata1=length2(data1);
+ ndata2=length2(data2);
+ if(ndata1==ndata2){
+ tmp1d1=0; tmp2d1=0;
+ for(i=1; i<=ndata1; i++){
+ tmp1d1=tmp1d1+pow(data1[i][0]-data2[i][0],2.0);
+ tmp1d1=tmp1d1+pow(data1[i][1]-data2[i][1],2.0);
+ tmp2d1=tmp2d1+pow(data1[i][0]-data2[ndata2-i+1][0],2.0);
+ tmp2d1=tmp2d1+pow(data1[i][1]-data2[ndata2-i+1][1],2.0);
+ }
+ tmp1d1=sqrt(tmp1d1); tmp2d1=sqrt(tmp2d1);
+ if((tmp1d1<Eps)||(tmp2d1<Eps)){
+ kL[0][0]=0; nkL=0;
+ return nkL;
+ }
+ }
+ kL0[0][0]=0; nkL=0;
+ for(i=1; i<=ndata1; i++){
+ ntmp=0; tmpd1=Inf;
+ pull2(i,data1,a);
+ nearestptpt(a, data2, tmpd4);
+ tmp1d1=floor(tmpd4[2]+Eps); //17.06.03
+ a[0]=tmpd4[0]; a[1]=tmpd4[1];
+ nearestptpt(a, data1, tmpd4);
+ tmpd5[0]=tmpd4[0]; tmpd5[1]=tmpd4[1];
+ tmpd5[2]=tmpd4[2]; tmpd5[3]=tmp1d1;
+ tmpd5[4]=tmpd4[3];
+ nkL=addptd5(kL0,tmpd5);
+ }
+ kL[0][0]=0; nall=0;
+ p[0]=Inf; p[1]=0;
+ for(i=1; i<=nkL; i++){
+ if(kL0[i][4]<eps2){
+ q[0]=kL0[i][0]; q[1]=kL0[i][1];
+ if(dist(2,p,q)>eps2){
+ nall=push4(kL0[i][0],kL0[i][1],kL0[i][2],kL0[i][3],kL);
+ p[0]=kL0[i][0]; p[1]=kL0[i][1];
+ ds=kL0[i][4];
+ continue;
+ }
+ if(kL0[i][4]<ds){
+ kL[0][0]--;
+ nall=push4(kL0[i][0],kL0[i][1],kL0[i][2],kL0[i][3],kL);
+ p[0]=kL0[i][0]; p[1]=kL0[i][1];
+ ds=kL0[i][4];
+ }
+ }
+ }
+ return nall;
+}
+*/
+
+int intersectcrvsPp(double data1[][2], double data2[][2],
+ double eps,double eps1s, double kL[][4]){
+ double t, s, a[2], b[2], p[2], q[2];
+ double sqeps=pow(10,-10.0), eps0=pow(10,-2.0);
+ double tmp1d2[2],tmp2d2[2],tmpd4[4],tmp1d4[4],tmpd5[5];
+ double tmpd1,tmp1d1,tmp2d1;
+ int i, j, k, n, is, ndata1, ndata2, nkL,nkL1,nkL2,ntmp, ntmp1, flg;
+ ndata1=length2(data1);
+ ndata2=length2(data2);
+ if(ndata1==ndata2){
+ tmp1d1=0; tmp2d1=0;
+ for(i=1; i<=ndata1; i++){
+ tmp1d1=tmp1d1+pow(data1[i][0]-data2[i][0],2.0);
+ tmp1d1=tmp1d1+pow(data1[i][1]-data2[i][1],2.0);
+ tmp2d1=tmp2d1+pow(data1[i][0]-data2[ndata2-i+1][0],2.0);
+ tmp2d1=tmp2d1+pow(data1[i][1]-data2[ndata2-i+1][1],2.0);
+ }
+ tmp1d1=sqrt(tmp1d1); tmp2d1=sqrt(tmp2d1);
+ if((tmp1d1<Eps)||(tmp2d1<Eps)){
+ kL[0][0]=0; nkL=0;
+ return nkL;
+ }
+ }
+ kL[0][0]=0; nkL=0;
+ for(i=1; i<=ndata1;i++){
+ ntmp=0; tmpd1=Inf;
+ pull2(i,data1,a);
+ nearestptpt(a, data2, tmpd4);
+ tmp1d1=floor(tmpd4[2]+Eps); //17.06.03
+ a[0]=tmpd4[0]; a[1]=tmpd4[1];
+ nearestptpt(a, data1, tmpd4);
+ if(tmpd4[3]<eps1s){
+ flg=0;
+ p[0]=tmpd4[0]; p[1]=tmpd4[1];
+ for(j=1; j<=nkL; j++){
+ q[0]=kL[j][0]; q[1]=kL[j][1];
+ if(dist(2,p,q)<eps0){
+ flg=1;
+ break;
+ }
+ }
+ if(flg==1){continue;}
+ ntmp1=floor(tmpd4[2]+Eps);
+ if(ntmp<ntmp1){
+ ntmp=ntmp1;
+ tmpd1=tmpd4[3];
+ tmp1d4[0]=tmpd4[0]; tmp1d4[1]=tmpd4[1];
+ tmp1d4[2]=tmpd4[2]; tmp1d4[3]=tmp1d1;
+ nkL=addptd4(kL,tmp1d4);
+ }
+ else if(tmpd4[3]<tmpd1){
+ tmpd1=tmpd4[3];
+ kL[0][0]--;
+ tmp1d4[0]=tmpd4[0]; tmp1d4[1]=tmpd4[1];
+ tmp1d4[2]=tmpd4[2]; tmp1d4[3]=tmp1d1;
+ nkL=addptd4(kL,tmp1d4);
+ }
+ }
+ }
+ return nkL;
+}
+
+int intersectcrvsPpold(double data1[][2], double data2[][2],
+ double eps,double eps1s, double kL[][4]){
+// 17.05.22
+ double kL1[DsizeL][5], kL2[DsizeL][5];
+ double t, s, a[2], b[2], p[2], q[2];
+ double sqeps=pow(10,-10.0), eps0=pow(10,-6.0);
+ double tmp1d2[2],tmp2d2[2],tmpd4[4],tmpd5[5];
+ double tmpd1,tmp1d1,tmp2d1;
+ int i, j, k, n, is, ndata1, ndata2, nkL,nkL1,nkL2,ntmp,flg;
+ ndata1=length2(data1);
+ ndata2=length2(data2);
+ if(ndata1==ndata2){
+ tmp1d1=0; tmp2d1=0;
+ for(i=1; i<=ndata1; i++){
+ tmp1d1=tmp1d1+pow(data1[i][0]-data2[i][0],2.0);
+ tmp1d1=tmp1d1+pow(data1[i][1]-data2[i][1],2.0);
+ tmp2d1=tmp2d1+pow(data1[i][0]-data2[ndata2-i+1][0],2.0);
+ tmp2d1=tmp2d1+pow(data1[i][1]-data2[ndata2-i+1][1],2.0);
+ }
+ tmp1d1=sqrt(tmp1d1); tmp2d1=sqrt(tmp2d1);
+ if((tmp1d1<eps0)||(tmp2d1<eps0)){
+ kL[0][0]=0; nkL=0;
+ return nkL;
+ }
+ }
+ kL1[0][0]=0; nkL1=0;
+ kL2[0][0]=0; nkL2=0;
+ for(i=1; i<=ndata1-1; i++){
+ pull2(i,data1,a);
+ pull2(i+1,data1,b);
+ for(j=1; j<=ndata2-1; j++){
+ pull2(j, data2, p);
+ pull2(j+1, data2, q);
+ koutenseg(a,b,p,q,eps,eps1s,tmpd4);
+ if(tmpd4[0]<Inf-1){
+ ntmp=floor(tmpd4[3]+Eps);
+ if(ntmp==0){
+ tmpd5[0]=tmpd4[0]; tmpd5[1]=tmpd4[1];
+ tmpd5[2]=tmpd4[2]; tmpd5[3]=i; tmpd5[4]=j;
+ nkL1=addptd5(kL1,tmpd5);
+ }
+ else{
+ tmpd5[0]=tmpd4[0]; tmpd5[1]=tmpd4[1];
+ tmpd5[2]=tmpd4[2]; tmpd5[3]=i; tmpd5[4]=j;
+ nkL2=addptd5(kL2,tmpd5);
+ }
+ }
+ }
+ }
+ kL[0][0]=0; nkL=0;
+ if(nkL1>0){
+ pull5(1,kL1,tmpd5);
+ p[0]=tmpd5[0]; p[1]=tmpd5[1];
+ t=tmpd5[2];
+ i=floor(tmpd5[3]+Eps);
+ j=floor(tmpd5[4]+Eps);
+ tmpd4[0]=p[0]; tmpd4[1]=p[1];
+ tmpd4[2]=i+t; tmpd4[3]=j;
+ nkL=addptd4(kL,tmpd4);
+ }
+ for(n=2; n<=nkL1; n++){
+ pull5(n,kL1,tmpd5);
+ p[0]=tmpd5[0]; p[1]=tmpd5[1];
+ flg=0;
+ for(k=1; k<=nkL; k++){
+ pull4(k,kL,tmpd4);
+ tmp1d2[0]=tmpd4[0]; tmp1d2[1]=tmpd4[1];
+ if(pow(dist(2,p,tmp1d2),2.0)<sqeps){
+ flg=1;
+ break;
+ }
+ }
+ if(flg==0){
+ tmpd4[0]=p[0]; tmpd4[1]=p[1];
+ t=tmpd5[2];
+ i=floor(tmpd5[3]+Eps);
+ j=floor(tmpd5[4]+Eps);
+ tmpd4[2]=t+i; tmpd4[3]=j;
+ nkL=addptd4(kL,tmpd4);
+ }
+ }
+ for(n=1; n<=nkL2; n++){
+ pull5(n,kL2,tmpd5);
+ p[0]=tmpd5[0]; p[1]=tmpd5[1];
+ flg=0;
+ for(k=1; k<=nkL; k++){
+ pull4(k,kL,tmpd4);
+ tmp1d2[0]=tmpd4[0]; tmp1d2[1]=tmpd4[1];
+ if(pow(dist(2,p,tmp1d2),2.0)<sqeps){
+ flg=1;
+ break;
+ }
+ }
+ if(flg==0){
+ tmpd4[0]=p[0]; tmpd4[1]=p[1];
+ t=tmpd5[2];
+ i=floor(tmpd5[3]+Eps);
+ j=floor(tmpd5[4]+Eps);
+ tmpd4[2]=i+t; tmpd4[3]=j;
+ nkL=addptd4(kL,tmpd4);
+ }
+ }
+ return nkL;
+}
+
+int dropnumlistcrv(double qd[][2], double eps1, int out[]){
+ int i,j,k, nout,nall=length2(qd), nd, se, en, npd, nptL;
+ int din[DsizeM][2],ptL[DsizeL];
+ double eps=pow(10.0,-6.0), pd[DsizeL][2], p[2], tmp2d[2];
+ out[0]=0; nout=0;
+ nd=dataindexd2(2,qd,din);
+ for(j=1; j<=nd; j++){
+ se=din[j][0]; en=din[j][1];
+ pd[0][0]=0; npd=0;
+ npd=appendd2(0,se,en,qd,pd);
+ ptL[0]=0; nptL=0;
+ nptL=appendi1(1,ptL);
+ pull2(1,pd,p);
+ for(k=2; k<=npd-1; k++){
+ pull2(k,pd,tmp2d);
+ if(dist(2,p,tmp2d)>eps1){
+ nptL=appendi1(k,ptL);
+ pull2(k,pd,p);
+ }
+ }
+ pull2(npd-1,pd,p);
+ pull2(npd,pd,tmp2d);
+ if(dist(2,p,tmp2d)>eps){ // eps -> eps1 ?
+ nptL=appendi1(npd,ptL);
+ }
+ if(nptL==1){ptL[0]=0; nptL=0;}
+ if(nout>0){
+ nout=appendi1(Infint,out);
+ }
+ for(i=1; i<=nptL; i++){
+ nout=appendi1(ptL[i],out);
+ }
+ }
+ out[0]=nout;
+ return nout;
+}
+
+int increasept2(double ptL[][2], int nn, double out[][2]){
+ int ii, jj, npt, nall;
+ double tmpd2[2];
+ npt=length2(ptL);
+ out[0][0]=0;
+ for(ii=1; ii<=npt-1; ii++){
+ for(jj=0; jj<nn; jj++){
+ tmpd2[0]=ptL[ii][0]+1.0*jj/nn*(ptL[ii+1][0]-ptL[ii][0]);
+ tmpd2[1]=ptL[ii][1]+1.0*jj/nn*(ptL[ii+1][1]-ptL[ii][1]);
+ addptd2(out,tmpd2);
+ }
+ }
+ nall=appendd2(0,npt,npt,ptL,out);
+ return nall;
+}
+
+int increasept3(double ptL[][3], int nn, double out[][3]){
+ int ii, jj, npt, nall;
+ double tmpd3[3];
+ npt=length3(ptL);
+ out[0][0]=0;
+ for(ii=1; ii<=npt-1; ii++){
+ for(jj=0; jj<nn; jj++){
+ tmpd3[0]=ptL[ii][0]+1.0*jj/nn*(ptL[ii+1][0]-ptL[ii][0]);
+ tmpd3[1]=ptL[ii][1]+1.0*jj/nn*(ptL[ii+1][1]-ptL[ii][1]);
+ tmpd3[2]=ptL[ii][2]+1.0*jj/nn*(ptL[ii+1][2]-ptL[ii][2]);
+ addptd3(out,tmpd3);
+ }
+ }
+ nall=appendd3(0,npt,npt,ptL,out);
+ return nall;
+}
+
+void bezierpt(double t, double p0[], double p3[], double p1[], double p2[],
+ double pout[]){
+ double p4[2], p5[2], p6[2], p7[2], p8[2];
+ int i, flg3=1;
+ if(p2[0]>Inf-1){
+ for(i=0; i<2; i++){
+ p2[i]=p3[i];
+ }
+ flg3=0;
+ }
+ for(i=0; i<2; i++){
+ p4[i]=(1-t)*p0[i]+t*p1[i];
+ }
+ for(i=0; i<2; i++){
+ p5[i]=(1-t)*p1[i]+t*p2[i];
+ }
+ for(i=0; i<2; i++){
+ p6[i]=(1-t)*p2[i]+t*p3[i];
+ }
+ for(i=0; i<2; i++){
+ p7[i]=(1-t)*p4[i]+t*p5[i];
+ }
+ if(flg3==0){
+ for(i=0; i<2; i++){
+ pout[i]=p7[i];
+ }
+ }
+ else{
+ for(i=0; i<2; i++){
+ p8[i]=(1-t)*p5[i]+t*p6[i];
+ }
+ for(i=0; i<2; i++){
+ pout[i]=(1-t)*p7[i]+t*p8[i];
+ }
+ }
+}
+
+int bezier(double ptL[][2], double ctrL[][4], int num, double out[][2]){
+ double p0[2], p3[2], p1[2], p2[2], pt[2], dt=1.0/num;
+ int i, j, n, nall;
+ out[0][0]=0; nall=0;
+ nall=appendd2(0,1,1,ptL,out);
+ n=length2(ptL);
+ for(i=1; i<=n-1; i++){
+ pull2(i,ptL, p0);
+ pull2(i+1,ptL, p3);
+ p1[0]=ctrL[i][0]; p1[1]=ctrL[i][1];
+ p2[0]=ctrL[i][2]; p2[1]=ctrL[i][3];
+ for(j=1; j<=num; j++){
+ bezierpt(j*dt,p0,p3,p1,p2,pt);
+ nall=push2(pt[0],pt[1], out);
+ }
+ }
+ return nall;
+}
+
+int ospline(int level, double ptL[][2], int num, double out[][2]){
+ double ctrlist[DsizeM][4], eps0=pow(10,-6.0), tmp, cc;
+ double p[2], q[2], p0[2], p3[2], p1[2], p2[2], pQ[2], pR[2];
+ double ptlist[DsizeM][2], tmpmd2[DsizeM][2];
+ int nd, i, j, npt, nall, nctr, flg, ndin, closed, din[DsizeM][2], ntmp;
+ out[0][0]=0;
+ if(num==1){
+ npt=length2(ptL);
+ for(i=0; i<=npt; i++){
+ out[i][0]=ptL[i][0]; out[i][1]=ptL[i][1];
+ }
+ nall=length2(out);
+ return nall;
+ }
+ ndin=dataindexd2(level,ptL,din);
+ for(nd=1; nd<=ndin; nd++){
+ ptlist[0][0]=0;
+ npt=appendd2(0,din[nd][0],din[nd][1],ptL,ptlist);
+ if(npt==2){
+ appendd2(2, 1,npt,ptlist,out);
+ continue;
+ }
+ closed=0;
+ pull2(1,ptlist,p);
+ pull2(npt,ptlist,q);
+ if(dist(2,p,q)<eps0){
+ closed=1;
+ }
+ ctrlist[0][0]=0; nctr=0;
+ for(i=1; i<=npt-1; i++){
+ flg=0;
+ pull2(i, ptlist,p1);
+ pull2(i+1, ptlist,p2);
+ if((i==1)||(i==npt-1)){
+ flg=1;
+ if(closed==0){
+ pQ[0]=(p1[0]+2*p2[0])/3.0;
+ pQ[1]=(p1[1]+2*p2[1])/3.0;
+ pR[0]=(2*p1[0]+p2[0])/3.0;
+ pR[1]=(2*p1[1]+p2[1])/3.0;
+ nctr++;
+ ctrlist[nctr][0]=pQ[0]; ctrlist[nctr][1]=pQ[1];
+ ctrlist[nctr][2]=pR[0]; ctrlist[nctr][3]=pR[1];
+ flg=2;
+ }
+ else{
+ if(i==1){
+ pull2(npt-1, ptlist,p0);
+ pull2(i+2, ptlist,p3);
+ }
+ else{
+ pull2(i-1, ptlist, p0);
+ pull2(2, ptlist, p3);
+ }
+ }
+ }
+ if(flg<=1){
+ if(flg==0){
+ pull2(i-1, ptlist, p0);
+ pull2(i+2, ptlist, p3);
+ }
+ p[0]=p2[0]-p0[0]; p[1]=p2[1]-p0[1];
+ q[0]=p3[0]-p1[0]; q[1]=p3[1]-p1[1];
+ tmp=1+sqrt((1+dotprod(2,p,q)/dist(2,p0,p2)/dist(2,p1,p3))/2);
+ cc=4*dist(2,p1,p2)/3/(dist(2,p0,p2)+dist(2,p1,p3))/tmp;
+ pQ[0]=p1[0]+cc*(p2[0]-p0[0]); pQ[1]=p1[1]+cc*(p2[1]-p0[1]);
+ pR[0]=p2[0]+cc*(p1[0]-p3[0]); pR[1]=p2[1]+cc*(p1[1]-p3[1]);
+ nctr++;
+ ctrlist[nctr][0]=pQ[0]; ctrlist[nctr][1]=pQ[1];
+ ctrlist[nctr][2]=pR[0]; ctrlist[nctr][3]=pR[1];
+ }
+ }
+ if(closed==0){
+ p1[0]=ctrlist[2][0]; p1[1]=ctrlist[2][1];
+ pull2(2, ptlist, p2);
+ pQ[0]=p2[0]+(p2[0]-p1[0]); pQ[1]=p2[1]+(p2[1]-p1[1]);
+ ctrlist[1][0]=pQ[0]; ctrlist[1][1]=pQ[1];
+ ctrlist[1][2]=Inf; ctrlist[1][3]=0;
+ p1[0]=ctrlist[nctr-1][2]; p1[1]=ctrlist[nctr-1][3];
+ pull2(nctr,ptlist,p2);
+ pQ[0]=p2[0]+(p2[0]-p1[0]); pQ[1]=p2[1]+(p2[1]-p1[1]);
+ ctrlist[nctr][0]=pQ[0]; ctrlist[nctr][1]=pQ[1];
+ ctrlist[nctr][2]=Inf; ctrlist[1][3]=0;
+ }
+ ctrlist[0][0]=nctr;
+ if(length2(ptlist)>2){
+ ntmp=bezier(ptlist,ctrlist,num, tmpmd2);
+ nall=appendd2(2,1,ntmp,tmpmd2,out);
+ }
+ }
+ return nall;
+}
+
+void bezierpt3(double t, double p0[], double p3[], double p1[], double p2[],
+ double pout[]){
+ double p4[3], p5[3], p6[3], p7[3], p8[3];
+ int i, flg3=1;
+ if(p2[0]>Inf-1){
+ for(i=0; i<3; i++){
+ p2[i]=p3[i];
+ }
+ flg3=0;
+ }
+ for(i=0; i<3; i++){
+ p4[i]=(1-t)*p0[i]+t*p1[i];
+ }
+ for(i=0; i<3; i++){
+ p5[i]=(1-t)*p1[i]+t*p2[i];
+ }
+ for(i=0; i<3; i++){
+ p6[i]=(1-t)*p2[i]+t*p3[i];
+ }
+ for(i=0; i<3; i++){
+ p7[i]=(1-t)*p4[i]+t*p5[i];
+ }
+ if(flg3==0){
+ for(i=0; i<3; i++){
+ pout[i]=p7[i];
+ }
+ }
+ else{
+ for(i=0; i<3; i++){
+ p8[i]=(1-t)*p5[i]+t*p6[i];
+ }
+ for(i=0; i<3; i++){
+ pout[i]=(1-t)*p7[i]+t*p8[i];
+ }
+ }
+}
+
+int bezier3(double ptL[][3], double ctrL[][6], int num, double out[][3]){
+ double p0[3], p3[3], p1[3], p2[3], pt[3], dt=1.0/num;
+ int i, j, n, nall;
+ out[0][0]=0; nall=0;
+ nall=appendd3(0,1,1,ptL,out);
+ n=length3(ptL);
+ for(i=1; i<=n-1; i++){
+ pull3(i,ptL, p0);
+ pull3(i+1,ptL, p3);
+ p1[0]=ctrL[i][0]; p1[1]=ctrL[i][1]; p1[2]=ctrL[i][2];
+ p2[0]=ctrL[i][3]; p2[1]=ctrL[i][4]; p2[2]=ctrL[i][5];
+ for(j=1; j<=num; j++){
+ bezierpt3(j*dt,p0,p3,p1,p2,pt);
+ nall=push3(pt[0],pt[1],pt[2], out);
+ }
+ }
+ return nall;
+}
+
+int ospline3(int level, double ptL[][3], int num, double out[][3]){
+ double ctrlist[DsizeM][6], eps0=pow(10,-6.0), tmp, cc;
+ double p[3], q[3], p0[3], p3[3], p1[3], p2[3], pQ[3], pR[3];
+ double ptlist[DsizeM][3], tmpmd2[DsizeM][3];
+ int nd, i, j, n, npt, nall, nctr, closed, flg, ndin, din[DsizeM][2], ntmp;
+ out[0][0]=0; nall=0;
+ if(num==1){
+ npt=length3(ptL);
+ for(i=0; i<=npt; i++){
+ out[i][0]=ptL[i][0]; out[i][1]=ptL[i][1]; out[i][2]=ptL[i][2];
+ }
+ nall=length3(out);
+ return nall;
+ }
+ ndin=dataindexd3(2,ptL,din);
+ for(nd=1; nd<=ndin; nd++){
+ ptlist[0][0]=0;
+ npt=din[nd][1]-din[nd][0];
+ if(npt<=3){
+ n=appendd3(0, din[nd][0], din[nd][0], ptL, ptlist);
+ for(i=1; i<=npt-1; i++){
+ pull3(din[nd][0]+i,ptL,p);
+ pull3(din[nd][0]+i+1,ptL,q);
+ for(j=1; j<=num; j++){
+ p1[0]=p[0]+1.0*j/num*(q[0]-p[0]);
+ p1[1]=p[1]+1.0*j/num*(q[1]-p[1]);
+ p1[2]=p[2]+1.0*j/num*(q[2]-p[2]);
+ n=addptd3(ptlist,p1);
+ }
+ }
+ nall=appendd3(2, 1,n,ptlist,out);
+ continue;
+ }
+ appendd3(0,din[nd][0],din[nd][1],ptL,ptlist);
+ closed=0;
+ pull3(1,ptlist,p);
+ pull3(npt,ptlist,q);
+ if(dist(3,p,q)<eps0){closed=1;}
+ ctrlist[0][0]=0; nctr=0;
+ for(i=1; i<=npt-1; i++){
+ flg=0;
+ pull3(i, ptlist,p1);
+ pull3(i+1, ptlist,p2);
+ if((i==1)||(i==npt-1)){
+ flg=1;
+ if(closed==0){
+ pQ[0]=(p1[0]+2*p2[0])/3.0;
+ pQ[1]=(p1[1]+2*p2[1])/3.0;
+ pQ[2]=(p1[2]+2*p2[2])/3.0;
+ pR[0]=(2*p1[0]+p2[0])/3.0;
+ pR[1]=(2*p1[1]+p2[1])/3.0;
+ pR[2]=(2*p1[2]+p2[2])/3.0;
+ nctr++;
+ ctrlist[nctr][0]=pQ[0]; ctrlist[nctr][1]=pQ[1]; ctrlist[nctr][2]=pQ[2];
+ ctrlist[nctr][3]=pR[0]; ctrlist[nctr][4]=pR[1]; ctrlist[nctr][5]=pR[2];
+ flg=2;
+ }
+ else{
+ if(i==1){
+ pull3(npt-1, ptlist,p0);
+ pull3(i+2, ptlist,p3);
+ }
+ else{
+ pull3(i-1, ptlist, p0);
+ pull3(2, ptlist, p3);
+ }
+ }
+ }
+ if(flg<=1){
+ if(flg==0){
+ pull3(i-1, ptlist, p0);
+ pull3(i+2, ptlist, p3);
+ }
+ p[0]=p2[0]-p0[0]; p[1]=p2[1]-p0[1]; p[2]=p2[2]-p0[2];
+ q[0]=p3[0]-p1[0]; q[1]=p3[1]-p1[1]; q[2]=p3[2]-p1[2];
+ tmp=1+sqrt((1+dotprod(3,p,q)/dist(3,p0,p2)/dist(3,p1,p3))/2);
+ cc=4*dist(3,p1,p2)/3/(dist(3,p0,p2)+dist(3,p1,p3))/tmp;
+ pQ[0]=p1[0]+cc*(p2[0]-p0[0]); pQ[1]=p1[1]+cc*(p2[1]-p0[1]);
+ pQ[2]=p1[2]+cc*(p2[2]-p0[2]);
+ pR[0]=p2[0]+cc*(p1[0]-p3[0]); pR[1]=p2[1]+cc*(p1[1]-p3[1]);
+ pR[2]=p2[2]+cc*(p1[2]-p3[2]);
+ nctr++;
+ ctrlist[nctr][0]=pQ[0]; ctrlist[nctr][1]=pQ[1]; ctrlist[nctr][2]=pQ[2];
+ ctrlist[nctr][3]=pR[0]; ctrlist[nctr][4]=pR[1]; ctrlist[nctr][5]=pR[2];
+ }
+ }
+ if(closed==0){
+ p1[0]=ctrlist[2][0]; p1[1]=ctrlist[2][1]; p1[2]=ctrlist[2][2];
+ pull3(2, ptlist, p2);
+ pQ[0]=p2[0]+(p2[0]-p1[0]); pQ[1]=p2[1]+(p2[1]-p1[1]);
+ pQ[2]=p2[2]+(p2[2]-p1[2]);
+ ctrlist[1][0]=pQ[0]; ctrlist[1][1]=pQ[1]; ctrlist[1][2]=pQ[2];
+ ctrlist[1][3]=Inf; ctrlist[1][4]=0; ctrlist[1][5]=0;
+ p1[0]=ctrlist[nctr-1][3]; p1[1]=ctrlist[nctr-1][4]; p1[2]=ctrlist[nctr-1][5];
+ pull3(nctr,ptlist,p2);
+ pQ[0]=p2[0]+(p2[0]-p1[0]); pQ[1]=p2[1]+(p2[1]-p1[1]);
+ pQ[2]=p2[2]+(p2[2]-p1[2]);
+ ctrlist[nctr][0]=pQ[0]; ctrlist[nctr][1]=pQ[1]; ctrlist[nctr][2]=pQ[2];
+ ctrlist[nctr][3]=Inf; ctrlist[1][4]=0; ctrlist[1][5]=0;
+ }
+ ctrlist[0][0]=nctr;
+ if(length3(ptlist)>2){
+ ntmp=bezier3(ptlist,ctrlist,num, tmpmd2);
+ nall=appendd3(2,1,ntmp,tmpmd2,out);
+ }
+ }
+ return nall;
+}
+
+void segplot(double x1,double y1,double x2,double y2,double seg[][2]){
+ seg[0][0]=0;
+ push2(x1,y1,seg);
+ push2(x2,y2,seg);
+}
+
+void addsegplot(double x1,double y1,double seg[][2]){
+ push2(x1,y1,seg);
+}
+
+void circledata(double cx,double cy,double r, int num,double out[][2]){
+ double t,dt,pt[2];
+ int i;
+ dt=2*M_PI/num;
+ out[0][0]=0;
+ for(i=0; i<=num; i++){
+ push2(cx+r*cos(i*dt),cy+r*sin(i*dt),out);
+ }
+}
+
+void intersectline(double p1[2],double v1[2], double p2[2],double v2[2],double out[4]){
+ double tmp,d,dt,ds,t,s,tmp1[2],tmp2[2],tmp3[2],pt[2];
+ tmp=dotprod(2,v1,v2);
+ tmp1[0]=tmp; tmp1[1]=pow(norm(2,v1),2.0);
+ tmp2[0]=-pow(norm(2,v2),2.0);tmp2[1]=-tmp;
+ pt[0]=p2[0]-p1[0];pt[1]=p2[1]-p1[1];
+ tmp3[0]=dotprod(2,pt,v2);tmp3[1]=dotprod(2,pt,v1);
+ crossprod(2,tmp1,tmp2,pt); d=pt[0];
+ crossprod(2,v1,v2,pt); tmp=fabs(pt[0]);
+ if(tmp>Eps){
+ crossprod(2,tmp3,tmp2,pt); dt=pt[0];
+ crossprod(2,tmp1,tmp3,pt); ds=pt[0];
+ t=dt/d;
+ s=ds/d;
+ pt[0]=p1[0]+v1[0]*t; pt[1]=p1[1]+v1[1]*t;
+ out[0]=pt[0];out[1]=pt[1];out[2]=t; out[3]=s;
+ }else{
+ pt[0]=p2[0]-p1[0];pt[1]=p2[1]-p1[1];
+ crossprod(2,pt,v1,tmp1);
+ tmp=tmp1[0]/norm(2,v1);
+ out[0]=fabs(tmp); out[1]=Inf;
+ }
+}
+
+void intersectseg(double seg1[][2],double seg2[][2], double out[5]){
+ double p1[2],q1[2],p2[2],q2[2],pt[2],pt1[2],nv[2],pts[DsizeS][4];
+ double q1p1[2],q2p2[2],p1q2[2],q1p2[2],p1p2[2],q1q2[2];
+ double tmp[2],tmp1[2],tmp2[2],tmp3[2],tmp4[2];
+ double tmpd1,x,y,t,s,t1,s1,distance,tmpd[4],tmp3d[7];
+ int ctr=0, i;
+ pull2(1,seg1,p1); pull2(2,seg1,q1);
+ pull2(1,seg2,p2); pull2(2,seg2,q2);
+ q1p1[0]=q1[0]-p1[0];q1p1[1]=q1[1]-p1[1];
+ q2p2[0]=q2[0]-p2[0];q2p2[1]=q2[1]-p2[1];
+ p1q2[0]=p1[0]-q2[0];p1q2[1]=p1[1]-q2[1];
+ q1p2[0]=q1[0]-p2[0];q1p2[1]=q1[1]-p2[1];
+ p1p2[0]=p1[0]-p2[0];p1p2[1]=p1[1]-p2[1];
+ p1q2[0]=p1[0]-q2[0];p1q2[1]=p1[1]-q2[1];
+ q1q2[0]=q1[0]-q2[0];q1q2[1]=q1[1]-q2[1];
+ if((norm(2,q1p1)<Eps)||(norm(2,q2p2)<Eps)){
+ out[0]=-1; out[1]=Inf;
+ }else{
+ intersectline(p1,q1p1,p2,q2p2,tmpd);
+ if(tmpd[1]<Inf-Eps){
+ pt[0]=tmpd[0];pt[1]=tmpd[1];t=tmpd[2];s=tmpd[3];
+ if((t*(t-1)<Eps)&&(s*(s-1)<Eps)){
+ out[0]=0;out[1]=pt[0];out[2]=pt[1];out[3]=t;out[4]=s;
+ }else{
+ if(t<0){t=0;}; if(t>1){t=1;};
+ if(s<0){s=0;}; if(s>1){s=1;};
+ tmp3d[ctr]=norm(2,p1p2);ctr++;
+ tmp3d[ctr]=norm(2,p1q2);ctr++;
+ tmp3d[ctr]=norm(2,q1p2);ctr++;
+ tmp3d[ctr]=norm(2,q1q2);ctr++;
+ tmp1[0]=q2p2[1];tmp1[1]=-q2p2[0];
+ intersectline(p1,tmp1,p2,q2p2,tmpd);
+ if(tmpd[1]!=Inf){
+ pt1[0]=tmpd[0];pt1[1]=tmpd[1];s1=tmpd[3];
+ if(s1*(s1-1)<Eps){
+ tmp3d[ctr]=dist(2,pt1,p1);ctr++;
+ }
+ }
+ intersectline(q1,tmp1,p2,q2p2,tmpd);
+ if(tmpd[1]!=Inf){
+ pt1[0]=tmpd[0];pt1[1]=tmpd[1];s1=tmpd[3];
+ if(s1*(s1-1)<Eps){
+ tmp3d[ctr]=dist(2,pt1,q1);ctr++;
+ }
+ }
+ tmp1[0]=q1p1[1];tmp1[1]=-q1p1[0];
+ intersectline(p2,tmp1,p1,q1p1,tmpd);
+ if(tmpd[1]!=Inf){
+ pt1[0]=tmpd[0];pt1[1]=tmpd[1];s1=tmpd[3];
+ if(s1*(s1-1)<Eps){
+ tmp3d[ctr]=dist(2,pt1,p2);ctr++;
+ }
+ }
+ intersectline(q2,tmp1,p1,q1p1,tmpd);
+ if(tmpd[1]!=Inf){
+ pt1[0]=tmpd[0];pt1[1]=tmpd[1];s1=tmpd[3];
+ if(s1*(s1-1)<Eps){
+ tmp3d[ctr]=dist(2,pt1,q2);ctr++;
+ }
+ }
+ tmpd1=tmp3d[0];
+ for(i=1;i<ctr;i++){
+ if(tmp3d[i]<tmpd1){tmpd1=tmp3d[i];};
+ }
+ out[0]=tmpd1;out[1]=pt[0];out[2]=pt[1];
+ out[3]=t;out[4]=s;
+ }
+ }else{
+ distance=tmpd[0];
+ nv[0]=q1p1[1]/norm(2,q1p1);nv[1]=-q1p1[0]/norm(2,q1p1);
+ pts[0][0]=0;
+ intersectline(p1,nv,p2,q2p2,tmpd);
+ s1=tmpd[3];
+ if((tmpd[1]!=Inf)&&(s1*(s1-1)<Eps)){
+ x=(1-s1)*p2[0]+s1*q2[0];y=(1-s1)*p2[1]+s1*q2[1];
+ push4(x,y,0,s1,pts);
+ }
+ intersectline(q1,nv,p2,q2p2,tmpd);
+ s1=tmpd[3];
+ if((tmpd[1]!=Inf)&&(s1*(s1-1)<Eps)){
+ x=(1-s1)*p2[0]+s1*q2[0];y=(1-s1)*p2[1]+s1*q2[1];
+ push4(x,y,1,s1,pts);
+ }
+ intersectline(p2,nv,p1,q1p1,tmpd);
+ s1=tmpd[3];
+ if((tmpd[1]!=Inf)&&(s1*(s1-1)<Eps)){
+ x=(1-s1)*p1[0]+s1*q1[0];y=(1-s1)*p1[1]+s1*q1[1];
+ push4(x,y,s1,0,pts);
+ }
+ intersectline(q2,nv,p1,q1p1,tmpd);
+ if((tmpd[1]!=Inf)&&(s1*(s1-1)<Eps)){
+ x=(1-s1)*p1[0]+s1*q1[0];y=(1-s1)*p1[1]+s1*q1[1];
+ push4(x,y,s1,2,pts);
+ }
+ if(length4(pts)==0){
+ tmpd1=norm(2,p1p2);
+ if(norm(2,p1q2)<tmpd1){tmpd1=norm(2,p1q2);}
+ if(norm(2,q1p2)<tmpd1){tmpd1=norm(2,q1p2);}
+ if(norm(2,q1q2)<tmpd1){tmpd1=norm(2,q1q2);}
+ out[0]=tmpd1;out[1]=Inf;
+ }else{
+ if(distance>Eps1){
+ out[0]=distance;out[1]=Inf;
+ }else{
+ x=0; y=0;
+ for(i=1; i<=length4(pts); i++){
+ x=x+pts[i][0];
+ y=y+pts[i][1];
+ }
+ tmp3[0]=x/length4(pts); tmp3[1]=y/length4(pts);
+ nearestptpt(tmp3,seg1,tmpd);
+ t=tmpd[2];
+ nearestptpt(tmp3,seg2,tmpd);
+ s=tmpd[2];
+ out[0]=distance; out[1]=tmp3[0]; out[2]=tmp3[1];
+ out[3]=t;out[4]=s;
+ }
+ }
+ }
+ }
+}
+
+int osplineseg(double ptlist[5][2],int num,double out[][2]){
+ double p0[2],p1[2],p2[2],p3[2],p2p0[2],p3p1[2],p2p1[2];
+ double tmp,cc,pq[2],pr[2],knots[3][2],ctrlist[2][4];
+ pull2(1,ptlist,p0); pull2(2,ptlist,p1);
+ pull2(3,ptlist,p2); pull2(4,ptlist,p3);
+ p2p0[0]=p2[0]-p0[0];p2p0[1]=p2[1]-p0[1];
+ p3p1[0]=p3[0]-p1[0];p3p1[1]=p3[1]-p1[1];
+ p2p1[0]=p2[0]-p1[0];p2p1[1]=p2[1]-p1[1];
+ tmp=norm(2,p2p0)*norm(2,p3p1);
+ tmp=1+sqrt((1+dotprod(2,p2p0,p3p1)/tmp)/2);
+ cc=4*norm(2,p2p1)/3/(norm(2,p2p0)+norm(2,p3p1))/tmp;
+ pq[0]=p1[0]+cc*p2p0[0]; pq[1]=p1[1]+cc*p2p0[1];
+ pr[0]=p2[0]-cc*p3p1[0];pr[1]=p2[1]-cc*p3p1[1];
+ ctrlist[0][0]=0;
+ push4(pq[0],pq[1],pr[0],pr[1],ctrlist);
+ knots[0][0]=0;
+ addptd2(knots,p1);addptd2(knots,p2);
+ bezier(knots,ctrlist,num,out);
+ return length2(out);
+}
+
+void intersectpartseg(double crv1[][2],double crv2[][2],int ii, int jj,int num,double out[6]){
+ double distance=10*Eps2,seg1[3][2],seg2[3][2],tmpd[2],tmp1d[2],tmp2d[2];
+ double tmp,snang,dst,tmpd5[5],os1[DsizeS][2],os2[DsizeS][2];
+ double p0[2],p1[2],p2[2],p3[2],ptlist[5][2],regard[3][2];
+ double tmp1md[20][2],tmpd3[3],tmp3md3[20][3],tmp2md3[20][3];
+ double tmpd4[4],Eps00=pow(10,-8.0);
+ double sx,sy;
+ int kk,ll,nn;
+ out[0]=Inf;
+ for(kk=1;kk<6;kk++){out[kk]=0;}
+ seg1[0][0]=0;seg2[0][0]=0;
+ appendd2(1,ii,ii+1,crv1,seg1);
+ appendd2(1,jj,jj+1,crv2,seg2);
+ pull2(2,seg1,tmp1d);
+ pull2(1,seg1,tmpd);
+ tmp1d[0]=tmp1d[0]-tmpd[0]; tmp1d[1]=tmp1d[1]-tmpd[1];
+ pull2(2,seg2,tmp2d);
+ pull2(1,seg2,tmpd);
+ tmp2d[0]=tmp2d[0]-tmpd[0]; tmp2d[1]=tmp2d[1]-tmpd[1];
+ crossprod(2,tmp1d,tmp2d,tmpd);
+ snang=fabs(tmpd[0])/(norm(2,tmp1d)*norm(2,tmp2d));
+ intersectseg(seg1,seg2,tmpd5);
+ dst=tmpd5[0];
+ if(dst<Eps){
+ if(dst>-Eps){
+ out[0]=tmpd5[1];out[1]=tmpd5[2];out[2]=ii+tmpd5[3];
+ out[3]=jj+tmpd5[4];out[4]=dst;out[5]=snang;
+ }
+ }else{
+ if(dst<Eps2){
+ os1[0][0]=0;os2[0][0]=0;
+ pull2(1,seg1,tmp1d);
+ pull2(2,seg1,tmp2d);
+ tmpd[0]=tmp2d[0]-tmp1d[0];tmpd[1]=tmp2d[1]-tmp1d[1];
+ if((length2(crv1)==2)||(norm(2,tmpd)>distance-Eps)){
+ appendd2(1,1,2,seg1,os1);
+ }else{
+ pull2(1,seg1,p1);pull2(2,seg1,p2);
+ if(ii==1){
+ pull2(3,crv1,p3);
+ tmpd[0]=p2[0]-p1[0];tmpd[1]=p2[1]-p1[1];
+ tmp1d[0]=(p1[0]+p2[0])/2;
+ tmp1d[1]=(p1[1]+p2[1])/2;
+ tmp2d[0]=tmp1d[0]+tmpd[1];
+ tmp2d[1]=tmp1d[1]-tmpd[0];
+ regard[0][0]=0;
+ addptd2(regard,tmp1d); addptd2(regard,tmp2d);
+ reflectpoint(p3,regard,p0);
+ }else{
+ if(ii==length2(crv1)-1){
+ pull2(ii-1,crv1,p0);
+ tmpd[0]=p2[0]-p1[0]; tmpd[1]=p2[1]-p1[1];
+ tmp1d[0]=(p1[0]+p2[0])/2;
+ tmp1d[1]=(p1[1]+p2[1])/2;
+ tmp2d[0]=tmp1d[0]+tmpd[1];
+ tmp2d[1]=tmp1d[1]-tmpd[0];
+ regard[0][0]=0;
+ addptd2(regard,tmp1d); addptd2(regard,tmp2d);
+ reflectpoint(p0,regard,p3);
+ }else{
+ pull2(ii-1,crv1,p0);pull2(ii+2,crv1,p3);
+ }
+ }
+ ptlist[0][0]=0;
+ addptd2(ptlist,p0);addptd2(ptlist,p1);
+ addptd2(ptlist,p2);addptd2(ptlist,p3);
+ osplineseg(ptlist,num,os1);
+ }
+ pull2(1,seg2,tmp1d);
+ pull2(2,seg2,tmp2d);
+ if((length2(crv2)==2)||(dist(2,tmp2d,tmp1d)>distance-Eps)){
+ appendd2(1,1,2,seg2,os2);
+ }else{
+ pull2(1,seg2,p1);pull2(2,seg2,p2);
+ if(jj==1){
+ pull2(3,crv2,p3);
+ tmpd[0]=p2[0]-p1[0];tmpd[1]=p2[1]-p1[1];
+ tmp1d[0]=(p1[0]+p2[0])/2;
+ tmp1d[1]=(p1[1]+p2[1])/2;
+ tmp2d[0]=tmp1d[0]+tmpd[1];
+ tmp2d[1]=tmp1d[1]-tmpd[0];
+ regard[0][0]=0;
+ addptd2(regard,tmp1d); addptd2(regard,tmp2d);
+ reflectpoint(p3,regard,p0);
+ }else{
+ if(jj==length2(crv2)-1){
+ pull2(jj-1,crv2,p0);
+ tmpd[0]=p2[0]-p1[0]; tmpd[1]=p2[1]-p1[1];
+ tmp1d[0]=(p1[0]+p2[0])/2;
+ tmp1d[1]=(p1[1]+p2[1])/2;
+ tmp2d[0]=tmp1d[0]+tmpd[1];
+ tmp2d[1]=tmp1d[1]-tmpd[0];
+ regard[0][0]=0;
+ addptd2(regard,tmp1d); addptd2(regard,tmp2d);
+ reflectpoint(p0,regard,p3);
+ }else{
+ pull2(jj-1,crv2,p0);pull2(jj+2,crv2,p3);
+ }
+ }
+ ptlist[0][0]=0;
+ addptd2(ptlist,p0);addptd2(ptlist,p1);
+ addptd2(ptlist,p2);addptd2(ptlist,p3);
+ osplineseg(ptlist,num,os2);
+ }
+ tmp2md3[0][0]=0;
+ for(kk=1;kk<length2(os1);kk++){
+ for(ll=1;ll<length2(os2);ll++){
+ seg1[0][0]=0; seg2[0][0]=0;
+ pull2(kk,os1,tmpd);addptd2(seg1,tmpd);
+ pull2(kk+1,os1,tmpd);addptd2(seg1,tmpd);
+ pull2(ll,os2,tmpd);addptd2(seg2,tmpd);
+ pull2(ll+1,os2,tmpd);addptd2(seg2,tmpd);
+ intersectseg(seg1,seg2,tmpd5);
+ if((tmpd5[0]<Eps1)&&(tmpd5[1]<Inf-Eps)){
+ if(tmpd5[0]<dst+Eps00){
+ dst=tmpd5[0];
+ tmp3md3[0][0]=0;
+ for(nn=1;nn<=length3(tmp2md3);nn++){
+ pull3(nn,tmp2md3,tmpd3);
+ if(tmpd3[0]<dst+Eps00){
+ addptd3(tmp3md3,tmpd3);
+ }
+ }
+ tmp2md3[0][0]=0;
+ for(nn=1;nn<=length3(tmp3md3);nn++){
+ pull3(nn,tmp3md3,tmpd3);
+ addptd3(tmp2md3,tmpd3);
+ }
+ push3(dst,tmpd5[1],tmpd5[2],tmp2md3);
+ }
+ }
+ }
+ }
+ if(length3(tmp2md3)>0){
+ tmp1md[0][0]=0;
+ sx=0; sy=0;
+ for(nn=1;nn<=length3(tmp2md3);nn++){
+ pull3(nn,tmp2md3,tmpd3);
+ push2(tmpd3[1],tmpd3[2],tmp1md);
+ sx=sx+tmpd3[1];
+ sy=sy+tmpd3[2];
+ }
+ sx=sx/length3(tmp2md3);
+ sy=sy/length3(tmp2md3);
+ p0[0]=sx; p0[1]=sy;
+ pull2(ii,crv1,p1); pull2(ii+1,crv1,p2);
+ tmp1d[0]=p2[0]-p1[0];tmp1d[1]=p2[1]-p1[1];
+ tmpd[0]=tmp1d[1];tmpd[1]=-tmp1d[0];
+ intersectline(p0,tmpd,p1,tmp1d,tmpd4);
+ tmp=tmpd4[3];
+ if(tmp<0){tmp=0;}
+ if(tmp>1){tmp=1;}
+ out[0]=sx;out[1]=sy;out[2]=ii+tmp;
+ pull2(jj,crv2,p1); pull2(jj+1,crv2,p2);
+ tmp1d[0]=p2[0]-p1[0];tmp1d[1]=p2[1]-p1[1];
+ tmpd[0]=tmp1d[1];tmpd[1]=-tmp1d[0];
+ intersectline(p0,tmpd,p1,tmp1d,tmpd4);
+ tmp=tmpd4[3];
+ if(tmp<0){tmp=0;}
+ if(tmp>1){tmp=1;}
+ out[3]=jj+tmp;out[4]=dst;out[5]=snang;
+ }
+ }
+ }
+}
+
+void collectsameseg(double ptdL[][6],double rL[][6]){
+ double Eps00=pow(10,-8.0),tmp1d[2],tmp2d[2],tmp1d6[6],tmp2d6[6];
+ int ii,jj,kk,istr,nr,numL[40],diffL[40];
+ double s1,e1,s2,e2,dst,tmp1,tmp2,tmp1md6[40][6];
+ rL[0][0]=0;
+ if(length6(ptdL)==0){
+ return;
+ }
+ for(ii=2;ii<=length6(ptdL);ii++){
+ pull6(ii,ptdL,tmp1d6);addptd6(rL,tmp1d6);
+ }
+ tmp1md6[0][0]=0;
+ pull6(1,ptdL,tmp1d6);
+ addptd6(tmp1md6,tmp1d6);
+ kk=tmp1d6[2];
+ if(tmp1d6[2]<kk+Eps00){
+ s1=kk-1-Eps00;e1=s1+2+2*Eps00;
+ }else{
+ s1=kk-Eps00; e1=s1+1+2*Eps00;
+ }
+ kk=tmp1d6[3];
+ if(tmp1d6[3]<kk+Eps00){
+ s2=kk-1-Eps00;e2=s2+2+2*Eps00;
+ }else{
+ s2=kk-Eps00; e2=s2+1+2*Eps00;
+ }
+ numL[0]=0;
+ for(ii=1;ii<=length6(rL);ii++){
+ pull6(ii,rL,tmp1d6);
+ tmp1=tmp1d6[2]; tmp2=tmp1d6[3];
+ if((tmp1>s1)&&(tmp1<e1)&&(tmp2>s2)&&(tmp2<e2)){
+ addptd6(tmp1md6,tmp1d6);
+ appendi1(ii,numL);
+ }
+ }
+ dst=100;
+ for(ii=1;ii<=length6(tmp1md6);ii++){
+ pull6(ii,tmp1md6,tmp1d6);
+ if(tmp1d6[4]<dst){
+ dst=tmp1d6[4];
+ }
+ }
+ ptdL[0][0]=0;
+ for(ii=1;ii<=length6(tmp1md6);ii++){
+ pull6(ii,tmp1md6,tmp1d6);
+ if(tmp1d6[4]<dst+Eps00){
+ addptd6(ptdL,tmp1d6);
+ }
+ }
+ for(ii=0;ii<=length6(rL);ii++){
+ diffL[ii]=0;
+ }
+ for(ii=1;ii<=numL[0];ii++){
+ kk=numL[ii];
+ diffL[kk]=1;
+ }
+ nr=length6(rL);
+ rL[0][0]=0;
+ for(ii=1;ii<=nr;ii++){
+ if(diffL[ii]==0){
+ pull6(ii,rL,tmp1d6);addptd6(rL,tmp1d6);
+ }
+ }
+}
+
+void intersectcurvesPp(double crv1s[][2],double crv2s[][2],int nbez,double out[][6]){
+ double Eps00=pow(10,-8.0),Dist=10*Eps2, crv1[DsizeL][2],crv2[DsizeL][2];
+ double tmp1md6[DsizeS][6],tmp2md6[DsizeS][6],tmpmd1[DsizeS];
+ double tmpd[2],tmp1d[2],tmp2d[2],tmpd6[6],tmp1d6[6];
+ double sx,sy,dst,ans1[4],ans2[4];
+ int ii,jj,kk,nall,self,js,je,din[DsizeS][2];
+ crv1[0][0]=0;
+ pull2(1,crv1s,tmpd);addptd2(crv1,tmpd);
+ for(ii=2;ii<=length2(crv1s);ii++){
+ pull2(length2(crv1),crv1,tmp1d);
+ pull2(ii,crv1s,tmp2d);
+ if(dist(2,tmp1d,tmp2d)>Eps){
+ addptd2(crv1,tmp2d);
+ }
+ }
+ crv2[0][0]=0;
+ pull2(1,crv2s,tmpd);
+ addptd2(crv2,tmpd);
+ for(ii=2;ii<=length2(crv2s);ii++){
+ pull2(length2(crv2),crv2,tmp1d);
+ pull2(ii,crv2s,tmp2d);
+ if(dist(2,tmp1d,tmp2d)>Eps){
+ addptd2(crv2,tmp2d);
+ }
+ }
+ if(length2(crv1)!=length2(crv2)){
+ self=0;
+ }else{
+ self=1;
+ for(ii=1;ii<=length2(crv1);ii++){
+ pull2(ii,crv1,tmp1d);pull2(ii,crv2,tmp2d);
+ if(dist(2,tmp1d,tmp2d)>0){
+ self=0;
+ break;
+ }
+ }
+ }
+ tmp1md6[0][0]=0;
+ for(ii=1;ii<=length2(crv1)-1;ii++){
+ if(self==0){
+ js=1; je=length2(crv2)-1;
+ }else{
+ js=ii+2; je=length2(crv2)-1;
+ }
+ for(jj=js;jj<=je;jj++){
+ intersectpartseg(crv1,crv2,ii,jj,nbez,tmpd6);
+ if(tmpd6[0]<Inf-Eps){
+ tmpd[0]=tmpd6[0];tmpd[1]=tmpd6[1];
+ if(length6(tmp1md6)==0){
+ addptd6(tmp1md6,tmpd6);
+ }else{
+ pull6(length6(tmp1md6),tmp1md6,tmp1d6);
+ tmp1d[0]=tmp1d6[0];tmp1d[1]=tmp1d6[1];
+ if(dist(2,tmp1d,tmpd)>Eps1){
+ addptd6(tmp1md6,tmpd6);
+ }
+ }
+ if(self==1){
+ push6(tmpd6[0],tmpd6[1],tmpd6[3],tmpd6[2],tmpd6[4],tmpd6[5],tmp1md6);
+ }
+ }
+ }
+ }
+ out[0][0]=0;
+ tmp2md6[0][0]=0;
+ while(length6(tmp1md6)>0){
+ collectsameseg(tmp1md6,tmp2md6);
+ appendd6(2,1,length6(tmp1md6),tmp1md6,out);
+ tmp1md6[0][0]=0;
+ for(ii=1;ii<=length6(tmp2md6);ii++){
+ pull6(ii,tmp2md6,tmpd6);addptd6(tmp1md6,tmpd6);
+ }
+ }
+ dataindexd6(2,out,din);
+ for(ii=1;ii<=length2i(din);ii++){
+ tmp1md6[0][0]=0;
+ appendd6(2,din[ii][0],din[ii][1],out,tmp1md6);
+ if(length6(tmp1md6)==1){
+ replacelistd6(2,ii,out,tmp1md6);
+ }else{
+ dst=100;
+ for(jj=1;jj<=length6(tmp1md6);jj++){
+ pull6(jj,tmp1md6,tmpd6);
+ if(tmpd6[4]<dst){
+ dst=tmpd6[4];
+ }
+ }
+ sx=0; sy=0;nall=0;
+ for(jj=1;jj<=length6(tmp1md6);jj++){
+ pull6(jj,tmp1md6,tmpd6);
+ if(tmpd6[4]<dst+Eps00){
+ nall++;
+ sx=sx+tmpd6[0]; sy=sy+tmpd6[1];
+ }
+ }
+ tmp1d[0]=sx/nall; tmp1d[1]=sy/nall;
+ nearestptpt(tmp1d,crv1,ans1);
+ nearestptpt(tmp1d,crv2,ans2);
+ tmp2md6[0][0]=0;
+ push6(sx/nall,sy/nall,ans1[2],ans2[2],dst,tmp1md6[1][5],tmp2md6);
+ replacelistd6(2,ii,out,tmp2md6);
+ }
+ }
+}
+
+void intersectcurves(double crv1[][2],double crv2[][2],int nbez,double out[][2]){
+ double out6[DsizeS][6],tmpd[2],tmpd6[6];
+ int jj;
+ intersectcurvesPp(crv1,crv2,nbez,out6);
+ out[0][0]=0;
+ for(jj=1;jj<=length6(out6);jj++){
+ pull6(jj,out6,tmpd6);push2(tmpd6[0],tmpd6[1],out);
+ }
+}
diff --git a/graphics/ketcindy/ketcindyfolder/scripts/ketlibC/ketcommonhead.h b/graphics/ketcindy/ketcindyfolder/scripts/ketlibC/ketcommonhead.h
new file mode 100644
index 0000000000..7b22ddfba8
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/scripts/ketlibC/ketcommonhead.h
@@ -0,0 +1,112 @@
+int length1(double gdata[]);
+int length2(double gdata[][2]);
+int length3(double gdata[][3]);
+int length4(double gdata[][4]);
+int length5(double gdata[][5]);
+int length6(double gdata[][6]);
+int length2i(int gdata[][2]);
+void copyd(int from, int upto, double q[], double p[]);
+void copyi(int from, int upto, int q[], int p[]);
+int addptd2(double gdata[][2], double pt[2]);
+int addptd3(double gdata[][3], double pt[3]);
+int addptd4(double gdata[][4], double pt[4]);
+int addptd5(double gdata[][5], double pt[5]);
+int addptd6(double gdata[][6], double pt[6]);
+int add1(double gdata[], double x);
+int add2(double gdata[][2], double x, double y);
+int add3(double gdata[][3], double x, double y, double z);
+int push2(double x, double y, double ptL[][2]);
+int push3(double x, double y, double z, double ptL[][3]);
+int push4(double x, double y, double z, double w, double ptL[][4]);
+int push5(double x, double y, double z, double w, double u, double ptL[][5]);
+int push6(double x, double y, double z, double w, double u, double v,double ptL[][6]);
+void pull2(int num, double ptL[][2],double pt[2]);
+void pull3(int num, double ptL[][3],double pt[3]);
+void pull4(int num, double ptL[][4],double pt[4]);
+void pull5(int num, double ptL[][5],double pt[5]);
+void pull6(int num, double ptL[][6],double pt[6]);
+int appendd2(int level, int from,int upto, double gdata[][2],double mat[][2]);
+int appendd3(int level, int from,int upto, double gdata[][3],double mat[][3]);
+int appendd6(int level, int from,int upto, double gdata[][6],double mat[][6]);
+int prependd2(int from,int upto, double gdata[][2],double mat[][2]);
+int prependd3(int from,int upto, double gdata[][3],double mat[][3]);
+int appendd1(double num,double numvec[]);
+int prependd1(double num, double numvec[]);
+int appendi1(int num,int numvec[]);
+int prependi1(int num, int numvec[]);
+int removei2(int nrmv,int mat[][2]);
+void removed3(int nrmv,double mat[][3]);
+int dataindexi1(int out[],int din[][2]);
+int dataindexd1(double out[],int din[][2]);
+int dataindexd2(int level,double out[][2],int din[][2]);
+int dataindexd3(int level, double out[][3],int din[][2]);
+int dataindexd4(int level, double out[][4],int din[][2]);
+int dataindexd6(int level, double out[][6],int din[][2]);
+void replacelistd1(int ii,double out[],double rep[]);
+void replacelistd2(int level,int jj,double out[][2],double rep[][2]);
+void replacelistd3(int level,int jj,double out[][3],double rep[][3]);
+void replacelistd6(int level,int ii,double out[][6],double rep[][6]);
+void removelistd2(int level,int ii,double out[][2]);
+void dispvec(int n,double dt[]);
+void dispveci(int n,int dt[]);
+void dispmatd1all(double dt[]);
+void dispmatd2(int from, int upto, double mat[][2]);
+void dispmatd3(int from, int upto, double mat[][3]);
+void dispmatd4(int from, int upto, double mat[][4]);
+void dispmatd5(int from, int upto, double mat[][5]);
+void dispmatd6(int from, int upto, double mat[][6]);
+void dispmatd2all(double mat[][2]);
+void dispmatd3all(double mat[][3]);
+void dispmatd4all(double mat[][4]);
+void dispmatd5all(double mat[][5]);
+void dispmatd6all(double mat[][6]);
+void dispmati2(int from, int upto, int mat[][2]);
+void dispmati1(int from, int upto, int mat[]);
+void writedata3(const char *fname, double out[][3]);
+void readdata3(const char *fname, double out[][3]);
+void writedata2(const char *fname, double out[][2]);
+void readdata2(const char *fname, double out[][2]);
+int output2(const char *var, const char *fname, int level, double out[][2]);
+void simplesort(double number[]);
+int memberi(int a, int list[]);
+double dotprod(int dim, double p[], double q[]);
+double norm(int dim, double p[]);
+double dist(int dim, double p[], double q[]);
+void crossprod(int dim,double a[3],double b[3], double out[3]);
+void reflectpoint(double p1[2],double regard[][2],double p2[2]);
+void pointoncurve(double t, double gdata[][2], double eps, double pt[]);
+int partcrv(double a,double b,double pkL[][2], double pL[][2]);
+int partcrv3(double a,double b,double pkL[][3], double pL[][3]);
+int connectseg(double pdata[][2], double eps, double out[][2]);
+int connectseg3(double pdata[][3], double eps, double out[][3]);
+void koutenseg(double a[2], double b[2], double c[2], double d[2],
+ double eps, double eps2, double out[4]);
+double paramoncurve(double p[2], int n, double ptL[][2]);
+void nearestptpt(double pa[2], double pL[][2], double ans[4]);
+int intersectselfPp(double data1[][2],double eps,double eps1s,double kL[][4]);
+int intersectcrvsPp(double data1[][2], double data2[][2],
+ double eps,double eps1s, double kL[][4]);
+int dropnumlistcrv(double qd[][2], double eps1, int out[]);
+int increasept2(double ptL[][2], int nn, double out[][2]);
+int increasept3(double ptL[][3], int nn, double out[][3]);
+void bezierpt(double t, double p0[2], double p3[2],
+ double p1[2], double p2[2], double ptout[2]);
+int bezier(double ptL[][2], double ctrL[][4], int num, double out[][2]);
+int ospline(int level, double ptL[][2], int num, double out[][2]);
+void bezierpt3(double t, double p0[3], double p3[3],
+ double p1[3], double p2[3], double ptout[3]);
+int bezier3(double ptL[][3], double ctrL[][6], int num, double out[][3]);
+int ospline3(int level, double ptL[][3], int num, double out[][3]);
+void segplot(double x1,double y1,double x2,double y2,double seg[][2]);
+void addsegplot(double x1,double y1,double seg[][2]);
+void circledata(double cx,double cy,double r, int num,double out[][2]);
+void intersectline(double p1[2],double v1[2], double p2[2],double v2[2],double out[4]);
+void intersectseg(double seg1[][2],double seg2[][2], double out[5]);
+int osplineseg(double ptlist[5][2],int num,double out[][2]);
+void intersectpartseg(double crv1[][2],double crv2[][2],int ii, int jj,int num,double out[6]);
+void collectsameseg(double ptdL[][6],double rL[][6]);
+void intersectcurvesPp(double crv1s[][2],double crv2s[][2],int nbez,double out[][6]);
+void intersectcurves(double crv1[][2],double crv2[][2],int nbez,double out[][2]);
+
+const double Inf=99999;
+const int Infint=30000;
diff --git a/graphics/ketcindy/ketcindyfolder/scripts/ketlibC/ketlibClog.txt b/graphics/ketcindy/ketcindyfolder/scripts/ketlibC/ketlibClog.txt
new file mode 100644
index 0000000000..d3f9ac4d8d
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/scripts/ketlibC/ketlibClog.txt
@@ -0,0 +1,38 @@
+190124
+ readoutdata3 changed (tmp,strtmp)
+190123
+ Use of sprintf
+181105
+ output3h debugged ( ctr=0 added in varh )
+ readoutdata3 debugged (//,etc )
+181104
+ line display(123) for debugging removed
+181025
+ crv3onsfparadata debugged (case of out=NULL )
+181023
+ pthiddenQ changed ( int flg, double out[4] )
+180705
+ nohiddenparadata2 debugged (|sp-sq}>1)
+180703
+ nohiddenparadata2 debugged (for closed curve)
+180616
+ nohiddenparadata2 debugged (rewritten a part )
+ output3h debugged (case where din1[0][0]==1)
+180613
+ connectseg,connectseg3 changed ( for null data )
+ output3h debugged (case where din1[0][0]==1)
+180609
+ crv3onsfparadata debugged ( case where curve has multi parts)
+ connectseg3 added
+180601
+ wireparadata changed (for cmdflg=1)
+ sfcutparadata changed ( for cmdflg=1)
+180531
+ outputend added
+ output3,output3h changed
+ readoutdata3 changed ( varname added )
+ intersectcrvsf changed (ws added)
+180530
+ readoutdata3 added ( hidden data not included )
+180523
+ crvsfparadata debugged (npar removed)
diff --git a/graphics/ketcindy/ketcindyfolder/scripts/ketlibC/surflib.h b/graphics/ketcindy/ketcindyfolder/scripts/ketlibC/surflib.h
new file mode 100644
index 0000000000..f700a07125
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/scripts/ketlibC/surflib.h
@@ -0,0 +1,2074 @@
+// 180430
+// crv2sfparadata,wireparadata added
+// output3h,output3 chanded
+// 180426 readdataC,writedataC changed
+// 180420 newly rewrited
+// 170616 crvsfparadata changed ( num of devision )
+
+int output3(short head, const char *wa,const char *var, const char *fname,double out[][3]){
+ int din[DsizeS][2],i,j,ctr;
+ double tmpd[3];
+ FILE *fp;
+ fp=fopen(fname,wa);
+ if (fp == NULL) {
+ printf("cannot open\n");
+ return -1;
+ }
+ dataindexd3(2, out,din);
+ if(head==1){
+ fprintf(fp,"%s//\n",var);
+ }
+ for(i=1; i<=length2i(din); i++){
+ fprintf(fp,"start//\n");
+ fprintf(fp,"[");
+ ctr=0;
+ for(j=din[i][0]; j<=din[i][1]; j++){
+ pull3(j,out,tmpd);
+ fprintf(fp,"[ %7.5f, %7.5f, %7.5f]",tmpd[0],tmpd[1],tmpd[2]);
+ ctr++;
+ if(ctr==5){
+ fprintf(fp,"]//\n");
+ ctr=0;
+ if(j<din[i][1]){
+ fprintf(fp,"[");
+ }
+ }else{
+ if(j<din[i][1]){
+ fprintf(fp,",");
+ }else{
+ fprintf(fp,"]//\n");
+ }
+ }
+ }
+ fprintf(fp,"end//\n");
+ }
+ fclose(fp);
+ return 0;
+}
+
+int output3h(const char *wa,const char *var, const char *varh, const char *fname, double out[][3]){
+ // 17.06.09
+ double out1[DsizeLL][3], tmpd[3];
+ int din1[DsizeM][2],din2[DsizeM][2], i, j,ctr;
+ FILE *fp;
+ fp=fopen(fname,wa);
+ if (fp == NULL) {
+ printf("cannot open\n");
+ return -1;
+ }
+ dataindexd3(3,out,din1);
+ out1[0][0]=0;
+ appendd3(0, din1[1][0],din1[1][1],out,out1);
+ dataindexd3(2, out1,din2);
+ fprintf(fp,"%s//\n",var);
+ for(i=1; i<=length2i(din2); i++){
+ fprintf(fp,"start//\n");
+ fprintf(fp,"[");
+ ctr=0;
+ for(j=din2[i][0]; j<=din2[i][1]; j++){
+ pull3(j,out1,tmpd);
+ fprintf(fp,"[ %7.5f, %7.5f, %7.5f]",tmpd[0],tmpd[1],tmpd[2]);
+ ctr++;
+ if(ctr==5){
+ if(j<din2[i][1]){
+ fprintf(fp,"]//\n[");
+ ctr=0;
+ }
+ }else{
+ if(j<din2[i][1]){
+ fprintf(fp,",");
+ }
+ }
+ }
+ fprintf(fp,"]//\n");
+ fprintf(fp,"end//\n");
+ }
+ out1[0][0]=0;
+ fprintf(fp,"%s//\n",varh); //17.06.16from
+ if(din1[0][0]>1){ //180613from
+ appendd3(0, din1[2][0],din1[2][1],out,out1);
+ }//180613to
+ dataindexd3(2, out1,din2);
+ for(i=1; i<=length2i(din2); i++){
+ fprintf(fp,"start//\n");
+ fprintf(fp,"[");
+ ctr=0; //181105
+ for(j=din2[i][0]; j<=din2[i][1]; j++){
+ pull3(j,out1,tmpd);
+ fprintf(fp,"[ %7.5f, %7.5f, %7.5f]",tmpd[0],tmpd[1],tmpd[2]);
+ ctr++;
+ if(ctr==5){
+ if(j<din2[i][1]){
+ fprintf(fp,"]//\n[");
+ ctr=0;
+ }
+ }else{
+ if(j<din2[i][1]){
+ fprintf(fp,",");
+ }
+ }
+ }
+ fprintf(fp,"]//\n");
+ fprintf(fp,"end//\n");
+ }
+// fprintf(fp,"//\n"); //180531
+ fclose(fp);
+ return 0;
+}
+
+void outputend(const char *fname){
+ FILE *fp;
+ fp=fopen(fname,"a");
+ fprintf(fp,"//\n");
+ fclose(fp);
+}
+
+int writedataC(const char *fname, double out[][3]){
+ int i, nall;
+ FILE *fp;
+ nall=length3(out);
+ fp=fopen(fname,"w");
+ for(i=1; i<=nall; i++){
+ fprintf(fp,"%7.5f %7.5f %7.5f %6s",out[i][0],out[i][1],out[i][2],"-99999");
+ if(i<nall){
+ fprintf(fp,"\n");
+ };
+ }
+ fclose(fp);
+ return nall;
+}
+
+int readdataC(const char *fname, double data[][3]){
+ int i, j, ndata=0;
+ double tmpd4[4];
+ FILE *fp;
+ fp=fopen(fname,"r");
+ if(fp==NULL){
+ printf("file not found\n");
+ return 1;
+ }
+ data[0][0]=0;
+ while( ! feof(fp) && ndata<DsizeL){
+ for(j=0;j<=3;j++){
+ fscanf(fp,"%lf",&tmpd4[j]);
+ }
+ push3(tmpd4[0],tmpd4[1],tmpd4[2],data);
+ }
+ fclose(fp);
+ return length3(data);
+}
+
+void parapt(double pt3[3],double pt2[2]){
+ if(fabs(pt3[0])>Inf-1){
+ pt2[0]=pt3[0]; pt2[1]=pt3[1];
+ }
+ else{
+ pt2[0]=-pt3[0]*sin(PHI)+pt3[1]*cos(PHI);
+ pt2[1]=-pt3[0]*cos(PHI)*cos(THETA)-pt3[1]*sin(PHI)*cos(THETA)+pt3[2]*sin(THETA);
+ }
+}
+
+double zparapt(double p[3]){
+ double x=p[0], y=p[1], z=p[2], out;
+ out=x*cos(PHI)*sin(THETA)+y*sin(PHI)*sin(THETA)+z*cos(THETA);
+ return out;
+}
+
+int projpara(double p3[][3], double p2[][2]){
+ double pt3[3], pt2[2];
+ int i, nall, nall2;
+ nall=length3(p3);
+ p2[0][0]=0;
+ for(i=1; i<=nall; i++){
+ pull3(i,p3,pt3);
+ parapt(pt3,pt2);
+ nall2=addptd2(p2,pt2);
+ }
+ return nall2;
+}
+
+double invparapt(double ph, double fh[][2], double fk[][3],double out[3]){
+ int n, nfk=length3(fk), nph=length2(fh);
+ double s0=ph-n, ak[3], bk[3], ah[2], bh[2], pk[3];
+ if(nfk>2){
+ n=trunc(ph);
+ s0=ph-n;
+ if(ph>nph-Eps){
+ out[0]=fk[nfk][0]; out[1]=fk[nfk][1]; out[2]=fk[nfk][2];
+ return nph;
+ }
+ }
+ else{
+ n=1;
+ s0=ph-1;
+ }
+ ak[0]=fk[n][0]; ak[1]=fk[n][1]; ak[2]=fk[n][2];
+ bk[0]=fk[n+1][0]; bk[1]=fk[n+1][1]; bk[2]=fk[n+1][2];
+ ah[0]=fh[n][0]; ah[1]=fh[n][1];
+ bh[0]=fh[n+1][0]; bh[1]=fh[n+1][1];
+ out[0]=(1-s0)*ak[0]+s0*bk[0];
+ out[1]=(1-s0)*ak[1]+s0*bk[1];
+ out[2]=(1-s0)*ak[2]+s0*bk[2];
+ return n+s0;
+}
+
+void surfcurve(short ch,double crv[][2], double pdata[][3]){
+ double pd2[2], pt[3];
+ int i;
+ pdata[0][0]=0;
+ for(i=1; i<=length2(crv); i++){
+ pull2(i,crv,pd2);
+ surffun(ch,pd2[0],pd2[1],pt);
+ addptd3(pdata,pt);
+ }
+}
+
+double evlpfun(short ch, double u, double v){
+ double u1,u2,v1,v2,pt1[3],pt2[3],pt2d1[2],pt2d2[2],dxu,dyu,dxv,dyv;
+ double du=(Urng[1]-Urng[0])/Mdv, dv=(Vrng[1]-Vrng[0])/Ndv;
+ double eps=0.00001;
+ u1=u-eps/2; u2=u+eps/2;
+ if(u1<Urng[0]){u1=Urng[0];}
+ if(u2>Urng[1]){u2=Urng[1];}
+ surffun(ch,u1,v,pt1); parapt(pt1,pt2d1);
+ surffun(ch,u2,v,pt2); parapt(pt2,pt2d2);
+ dxu=(pt2d2[0]-pt2d1[0])/(u2-u1);
+ dyu=(pt2d2[1]-pt2d1[1])/(u2-u1);
+ v1=v-eps/2; v2=v+eps/2;
+ if(v1<Vrng[0]){v1=Vrng[0];}
+ if(v2>Vrng[1]){v2=Vrng[1];}
+ surffun(ch,u,v1,pt1); parapt(pt1,pt2d1);
+ surffun(ch,u,v2,pt2); parapt(pt2,pt2d2);
+ dxv=(pt2d2[0]-pt2d1[0])/(v2-v1);
+ dyv=(pt2d2[1]-pt2d1[1])/(v2-v1);
+ return dxu*dyv-dxv*dyu;
+};
+
+int envelopedata(short ch, double out[][2]){
+ int i, j, k, ctrq=0,ctr, nall;
+ double uval1,uval2,vval1,vval2,eval11,eval12,eval21,eval22;
+ double pl[5][2], vl[5], ql[11][2], out2[DsizeM][2];
+ double du=(Urng[1]-Urng[0])/Mdv;
+ double dv=(Vrng[1]-Vrng[0])/Ndv; //180427
+ ctr=0;
+ for (j = 0; j < Ndv; j++) {
+ vval1=Vrng[0]+j*dv;
+ vval2=Vrng[0]+(j+1)*dv;
+ uval1=Urng[0];
+ eval11=evlpfun(ch,uval1,vval1);
+ eval12=evlpfun(ch,uval1,vval2);
+ for (i = 0; i < Mdv; i++) {
+ uval2=Urng[0]+(i+1)*du;
+ eval21=evlpfun(ch,uval2,vval1);
+ eval22=evlpfun(ch,uval2,vval2);
+ pl[0][0]=uval1; pl[0][1]=vval1; vl[0]=eval11;
+ pl[1][0]=uval2; pl[1][1]=vval1; vl[1]=eval21;
+ pl[2][0]=uval2; pl[2][1]=vval2; vl[2]=eval22;
+ pl[3][0]=uval1; pl[3][1]=vval2; vl[3]=eval12;
+ pl[4][0]=uval1; pl[4][1]=vval1; vl[4]=eval11;
+ ctrq=0;
+ for (k = 0; k < 4; k++) {
+ if(fabs(vl[k])<=Eps){
+ ql[ctrq][0]=pl[k][0];
+ ql[ctrq][1]=pl[k][1];
+ ctrq++;
+ }
+ else if(vl[k]>Eps){
+ if(vl[k+1]< -Eps){
+ ql[ctrq][0]=1/(vl[k]-vl[k+1])*(-vl[k+1]*pl[k][0]+vl[k]*pl[k+1][0]);
+ ql[ctrq][1]=1/(vl[k]-vl[k+1])*(-vl[k+1]*pl[k][1]+vl[k]*pl[k+1][1]);
+ ctrq++;
+ }
+ }
+ else{
+ if(vl[k+1]>Eps){
+ ql[ctrq][0]=1/(-vl[k]+vl[k+1])*(vl[k+1]*pl[k][0]-vl[k]*pl[k+1][0]);
+ ql[ctrq][1]=1/(-vl[k]+vl[k+1])*(vl[k+1]*pl[k][1]-vl[k]*pl[k+1][1]);
+ ctrq++;
+ }
+ }
+ }
+ uval1=uval2;
+ eval11=eval21;
+ eval12=eval22;
+ if(ctrq==2){
+ if(ctr>0){
+ ctr++;
+ out[ctr][0]=Inf;
+ out[ctr][1]=2; // 2 <- 0 ?
+ }
+ ctr++;
+ out[ctr][0]=ql[0][0];
+ out[ctr][1]=ql[0][1];
+ ctr++;
+ out[ctr][0]=ql[1][0];
+ out[ctr][1]=ql[1][1];
+ }
+ }
+ }
+ out[0][0]=ctr;
+ if(ctr>0){
+ nall=connectseg(out, Eps, out2);
+ out[0][0]=0;
+ nall=appendd2(2,1,nall,out2,out);
+ }
+ return nall;
+}
+
+int cuspsplitpara(short ch,double pdata[][2], double outkL[][3]){
+ int i, j, ng, n, nd, ndd, ndrop, is, ncusp=0, ncusppt,st, en, npk,nph, cflg;
+ int cusp[DsizeM], cuspflg;
+ int ntmp,ntmp1,ntmp2, ntmpnum, noutkL=0, noutk=0, nout=0;
+ int din[DsizeM][2], dind[DsizeM][2], drop[DsizeL], tmpnum[DsizeM];
+ double eps=pow(10.0,-6.0);
+ double vtmp, vtmp1,kaku,cva, ps[2], pe[2],v1[2],v2[2];
+ double tmp[2],tmp1[2],tmp2[2],pt3d[3],pt2d[2],q3d[3],q2d[2];
+ double ptk[DsizeM][3],pth[DsizeM][2], outk[DsizeM][3];
+ double ptxy[DsizeM][2],tmp3d[DsizeM][3];
+ double tmp3d1[DsizeM][3],tmp3d2[DsizeM][3],tmp2d[DsizeM][2];
+ outkL[0][0]=0;
+ cusp[0]=0;
+ Cuspsplitpt[0][0]=0;
+ nd=dataindexd2(0,pdata,din);
+ for(ng=1; ng<=nd; ng++){
+ ptk[0][0]=0; pth[0][0]=0;
+ st=din[ng][0]; en=din[ng][1];
+ ptxy[0][0]=0;
+ n=appendd2(0,st,en,pdata,ptxy);
+ npk=0; nph=0;
+ for(i=1; i<=en-st+1; i++){
+ pull2(st+i-1,pdata,tmp);
+ surffun(ch,tmp[0],tmp[1],pt3d);
+ parapt(pt3d,pt2d);
+ if(i==1){
+ npk=addptd3(ptk,pt3d);
+ nph=addptd2(pth,pt2d);
+ }
+ else{
+ pull2(nph,pth,tmp1);
+ if(dist(2,tmp1,pt2d)>eps){
+ npk=addptd3(ptk,pt3d);
+ nph=addptd2(pth,pt2d);
+ }
+ }
+ }
+ if(nph==0){
+ npk=0;
+ return 0;
+ };
+ pull2(1,pth,ps);
+ pull2(nph,pth,pe);
+ cflg=0;
+ if(dist(2,ps,pe)<Eps1){cflg=1;}
+ ncusp=0; cusp[0]=0;
+ cva=cos(10*M_PI/180);
+ for(i=1; i<=nph-1; i++){
+ if(nph==2){break;}
+ pull2(i,pth,tmp);
+ tmp[0]=pth[i][0]; tmp[1]=pth[i][1];
+ if(i==1){
+ if(cflg==0){continue;}
+ pull2(nph-1,pth,tmp1);
+ }
+ else{
+ pull2(i-1,pth,tmp1);
+ }
+ pull2(i+1,pth,tmp2);
+ v1[0]=tmp[0]-tmp1[0]; v1[1]=tmp[1]-tmp1[1];
+ v2[0]=tmp2[0]-tmp[0]; v2[1]=tmp2[1]-tmp[1];
+ vtmp=v1[0]*v2[0]+v1[1]*v2[1];
+ tmp[0]=0; tmp[1]=0;
+ vtmp=vtmp/(dist(2,v1,tmp)*dist(2,v2,tmp));
+ cuspflg=0;
+ if(vtmp<cva){
+ pt2d[0]=pth[i][0]; pt2d[1]=pth[i][1];
+ kaku=acos(vtmp)*180/M_PI;
+ if(v1[0]*v2[1]-v1[1]*v2[0]<0){
+ kaku=-kaku;
+ }
+ cuspflg=0;
+ for(j=i+1; j<=nph-1; j++){
+ if(fabs(kaku)>90){
+ cuspflg=1;
+ break;
+ }
+ pull2(j,pth,q2d);
+ if(dist(2,pt2d,q2d)>Eps1){
+ break;
+ }
+ v1[0]=q2d[0]-pth[j-1][0]; v1[1]=q2d[1]-pth[j-1][1];
+ v2[0]=pth[j+1][0]-q2d[0]; v2[1]=pth[j+1][1]-q2d[1];
+ vtmp=v1[0]*v2[0]+v1[1]*v2[1];
+ tmp[0]=0; tmp[1]=0;
+ vtmp=vtmp/(dist(2,v1,tmp)*dist(2,v2,tmp));
+ vtmp=acos(vtmp)*180/M_PI;
+ if(v1[0]*v2[1]-v1[1]*v2[0]<0){
+ vtmp=-vtmp;
+ }
+ kaku=kaku+vtmp;
+ }
+ if(cuspflg==1){
+ ntmp=trunc((i+j)*0.5);
+ i=j;
+ if(cusp[0]==0){
+ ncusp=appendi1(ntmp,cusp);
+ }
+ else{
+ ncusp=appendi1(ntmp,cusp);
+ }
+ }
+ }
+ }
+ if(cflg==0){
+ ncusp=prependi1(1,cusp);
+ ncusp=appendi1(nph,cusp);
+ }
+ else if(ncusp==0){
+ ncusp=prependi1(1,cusp);
+ ncusp=appendi1(nph,cusp);
+ }
+ else if(cusp[1]==1){
+ ncusp=appendi1(nph,cusp);
+ }
+ else{
+ ntmp=cusp[1];
+ ntmp1=nph;
+ tmp2d[0][0]=0;
+ n=appendd2(0,ntmp,ntmp1,pth,tmp2d);
+ n=appendd2(0,2,ntmp,pth,tmp2d);
+ pth[0][0]=0;
+ nph=appendd2(0,1,n,tmp2d,pth);
+ tmp3d[0][0]=0;
+ n=appendd3(0,ntmp,ntmp1,ptk,tmp3d);
+ n=appendd3(0,2,ntmp,ptk,tmp3d);
+ ptk[0][0]=0;
+ npk=appendd3(0,1,n,tmp3d,ptk);
+ for(i=1; i<=cusp[0]; i++){
+ cusp[i]=cusp[i]-ntmp+1;
+ }
+ ncusp=appendi1(nph,cusp);
+ }
+ if(ncusp==2){
+ pull2(nph,pth,tmp);
+ if(npk>=2){
+ ncusppt=addptd2(Cuspsplitpt,tmp);
+ noutkL=appendd3(2,1,npk,ptk,outkL);
+ }
+ continue;
+ }
+ outk[0][0]=0;
+ is=1;
+ for(i=1; i<=ncusp-1; i++){
+ ntmp1=cusp[is]; ntmp2=cusp[i+1];
+ pull2(ntmp1,pth,tmp1);
+ pull2(ntmp2,pth,tmp2);
+ if(dist(2,tmp1,tmp2)>Eps1){
+ tmp3d[0][0]=0;
+ n=appendd3(0,ntmp1,ntmp2,ptk,tmp3d);
+ noutk=appendd3(2,1,n,tmp3d,outk);
+ ncusppt=addptd2(Cuspsplitpt,tmp2);
+ is=i+1;
+ }
+ }
+ noutkL=appendd3(2,1,noutk,outk,outkL);
+ }
+ n=projpara(outkL,tmp2d);
+ ndrop=dropnumlistcrv(tmp2d,Eps1*0.5,drop);
+ nd=dataindexd3(2,outkL,din);
+ ndd=dataindexi1(drop,dind);
+ tmp3d2[0][0]=0; ntmp2=0;
+ for(i=1; i<=nd; i++){
+ tmp3d[0][0]=0; ntmp=0;
+ ntmp=appendd3(0,din[i][0],din[i][1],outkL,tmp3d);
+ tmpnum[0]=0; ntmpnum=0;
+ for(j=dind[i][0]; j<=dind[i][1]; j++){
+ ntmpnum=appendi1(drop[j],tmpnum);
+ }
+ tmp3d1[0][0]=0; ntmp1=0;
+ for(j=1; j<=ntmpnum; j++){
+ pt3d[0]=tmp3d[tmpnum[j]][0];
+ pt3d[1]=tmp3d[tmpnum[j]][1];
+ pt3d[2]=tmp3d[tmpnum[j]][2];
+ ntmp1=addptd3(tmp3d1,pt3d);
+ }
+ if(ntmp1>0){
+ ntmp2=appendd3(2,1,ntmp1,tmp3d1,tmp3d2);
+ }
+ }
+ outkL[0][0]=0; noutkL=0;
+ noutkL=appendd3(0,1,ntmp2,tmp3d2,outkL);
+ return noutkL;
+}
+
+int makexybdy(short ch,double ehL[][2]){
+ int i, nehL, ntmpd2;
+ double ptd3[3],ptd2[2],tmpd2[DsizeM][2],du,dv;
+ ehL[0][0]=0; nehL=0;
+ du=(Urng[1]-Urng[0])/Mdv;
+ dv=(Vrng[1]-Vrng[0])/Ndv;
+ if(DrawE==1){
+ tmpd2[0][0]=0; ntmpd2=0;
+ for(i=0; i<=Ndv; i++){
+ surffun(ch,Urng[1],Vrng[0]+i*dv,ptd3);
+ ntmpd2=push2(ptd3[0],ptd3[1],tmpd2);
+ }
+ nehL=appendd2(2,1,ntmpd2,tmpd2,ehL);
+ }
+ if(DrawN==1){
+ tmpd2[0][0]=0; ntmpd2=0;
+ for(i=0; i<=Mdv; i++){
+ surffun(ch,Urng[0]+i*du,Vrng[1],ptd3);
+ ntmpd2=push2(ptd3[0],ptd3[1],tmpd2);
+ }
+ nehL=appendd2(2,1,ntmpd2,tmpd2,ehL);
+ }
+ if(DrawW==1){
+ tmpd2[0][0]=0; ntmpd2=0;
+ for(i=0; i<=Ndv; i++){
+ surffun(ch,Urng[0],Vrng[0]+i*dv,ptd3);
+ ntmpd2=push2(ptd3[0],ptd3[1],tmpd2);
+ }
+ nehL=appendd2(2,1,ntmpd2,tmpd2,ehL);
+ }
+ if(DrawS==1){
+ tmpd2[0][0]=0; ntmpd2=0;
+ for(i=0; i<=Mdv; i++){
+ surffun(ch,Urng[0]+i*du,Vrng[0],ptd3);
+ ntmpd2=push2(ptd3[0],ptd3[1],tmpd2);
+ }
+ nehL=appendd2(2,1,ntmpd2,tmpd2,ehL);
+ }
+ return nehL;
+}
+
+void partitionseg(double fig[][2],double gL[][2], int ns, double parL[]){
+ int ii,jj,kk,n,din[DsizeM][2];
+ double eps0=pow(10,-5.0),tmpd4[4], tmpd6[6],tmp,tmp2;
+ double p[2], q[2], pd3[3], ans[4], tmp1d1[DsizeM], tmp2d1[DsizeM];
+ double other[DsizeM], g[DsizeM][2], kouL[DsizeS][4],kouL6[DsizeS][6];
+ if(ns>0){
+ dataindexd1(Otherpartition,din);
+ other[0]=0;
+ for(ii=din[ns][0]; ii<=din[ns][1]; ii++){
+ appendd1(Otherpartition[ii],other);
+ }
+ }else{
+ other[0]=0;
+ }
+ parL[0]=0;
+ appendd1(1,parL);
+ appendd1(length2(fig),parL);
+ if(length1(other)>0){
+ for(ii=1; ii<=length1(other); ii++){
+ appendd1(other[ii],parL);
+ }
+ }
+ dataindexd2(2,gL,din);
+ for(n=fmax(ns,1); n<=din[0][0]; n++){
+ g[0][0]=0;
+ appendd2(2,din[n][0],din[n][1],gL,g);
+ intersectcurvesPp(fig,g,20,kouL6);
+ kouL[0][0]=0;
+ for(ii=1;ii<=length6(kouL6);ii++){
+ pull6(ii,kouL6,tmpd6);
+ push4(tmpd6[0],tmpd6[1],tmpd6[2],tmpd6[3],kouL);
+ }
+ tmp1d1[0]=0;tmp2d1[0]=0;
+ for(jj=1;jj<=length4(kouL);jj++){
+ pull4(jj,kouL,tmpd4);
+ tmp=tmpd4[2];
+ if((tmp>1+Eps)&&(tmp<length2(fig)-Eps)){
+ appendd1(tmp,tmp1d1);
+ }
+ tmp=tmpd4[3];
+ if((tmp>1+Eps)&&(tmp<length2(g)-Eps)){
+ appendd1(tmp,tmp2d1);
+ }
+ }
+ for(jj=1;jj<=length1(tmp1d1);jj++){
+ appendd1(tmp1d1[jj],parL);
+ }
+ if((ns>0)&&(n>ns)&&(length1(tmp2d1)>0)){
+ dataindexd1(Otherpartition,din);
+ tmp1d1[0]=0;
+ for(jj=din[n][0];jj<=din[n][1];jj++){
+ appendd1(Otherpartition[jj],tmp1d1);
+ }
+ replacelistd1(n,Otherpartition,tmp2d1);
+ }
+ }
+ simplesort(parL);
+ tmp1d1[0]=0;
+ for(ii=1;ii<=length1(parL);ii++){
+ appendd1(parL[ii],tmp1d1);
+ }
+ parL[0]=0;
+ tmp2=-1;
+ for(jj=1;jj<=length1(tmp1d1);jj++){
+ tmp=tmp1d1[jj];
+ if(fabs(tmp-tmp2)>Eps1){
+ appendd1(tmp,parL);
+ tmp2=tmp;
+ }
+ }
+}
+
+double funpthiddenQ(short ch,double u, double v,double pa[3]){
+ double Vec[3]={sin(THETA)*cos(PHI),sin(THETA)*sin(PHI),cos(THETA)};
+ double eps0=pow(10,-4.0)*(XMAX-XMIN)/10, pt[3], out;
+ surffun(ch,u, v, pt);
+ if((fabs(Vec[1])>eps0)||(fabs(Vec[0])>eps0)){
+ out=(Vec[1]*(pt[0]-pa[0])-Vec[0]*(pt[1]-pa[1]));
+ }
+ else{
+ out=pt[0]-pa[0];
+ }
+ return out;
+}
+
+int pthiddenQ(short ch,double pta[3], int uveq,double out[4]){
+ int i, j, k;
+ double Vec[3]={sin(THETA)*cos(PHI),sin(THETA)*sin(PHI),cos(THETA)};
+ double v1,v2,v3;
+ double du=(Urng[1]-Urng[0])/Mdv, dv=(Vrng[1]-Vrng[0])/Ndv;
+ double uval1,uval2,vval1,vval2,eval11,eval12,eval21,eval22;
+ double pl[5][2], vl[5], ql[11][2],p1[2],p2[2],m1,m2;
+ double ptuv[2], puv1[2], puv2[2],p1d3[3], p2d3[3], ptd3[3];
+ double tmpd1, tmpd2[2],tmpd3[3],tmp1d3[3];
+// Out=1 : hidden
+// SL : List of segments near PtA+Vec
+ out[3]=-Inf;
+ for(j=0; j<=Ndv-1; j++){
+ vval1=Vrng[0]+j*dv;
+ vval2=Vrng[0]+(j+1)*dv;
+ uval1=Urng[0];
+ eval11=funpthiddenQ(ch,uval1,vval1,pta);
+ eval12=funpthiddenQ(ch,uval1,vval2,pta);
+ for(i=0; i<=Mdv-1; i++){
+ uval2=Urng[0]+(i+1)*du;
+ eval21=funpthiddenQ(ch,uval2,vval1,pta);
+ eval22=funpthiddenQ(ch,uval2,vval2,pta);
+ pl[0][0]=uval1; pl[0][1]=vval1; vl[0]=eval11;
+ pl[1][0]=uval2; pl[1][1]=vval1; vl[1]=eval21;
+ pl[2][0]=uval2; pl[2][1]=vval2; vl[2]=eval22;
+ pl[3][0]=uval1; pl[3][1]=vval2; vl[3]=eval12;
+ pl[4][0]=uval1; pl[4][1]=vval1; vl[4]=eval11;
+ ql[0][0]=0;
+ for(k=0; k<=3; k++){
+ pull2(k,pl,p1);
+ pull2(k+1,pl,p2);
+ m1=vl[k]; m2=vl[k+1];
+ if(fabs(m1)<Eps){
+ addptd2(ql, p1);
+ continue;
+ }
+ if(fabs(m2)<Eps){
+ continue;
+ }
+ if((m1>0)&&(m2>0)){
+ continue;
+ }
+ if((m1< 0)&&(m2< 0)){
+ continue;
+ }
+ tmpd2[0]=1/(m1-m2)*(-m2*p1[0]+m1*p2[0]);
+ tmpd2[1]=1/(m1-m2)*(-m2*p1[1]+m1*p2[1]);
+ addptd2(ql, tmpd2);
+ }
+ uval1=uval2;
+ eval11=eval21;
+ eval12=eval22;
+ if(length2(ql)==2){
+ puv1[0]=ql[1][0]; puv1[1]=ql[1][1];
+ puv2[0]=ql[2][0]; puv2[1]=ql[2][1];
+ surffun(ch,puv1[0],puv1[1],p1d3);
+ surffun(ch,puv2[0],puv2[1],p2d3);
+ v1=Vec[0]; v2=Vec[1]; v3=Vec[2];
+ if(fabs(v1)>Eps){
+ m1=pta[2]+v3/v1*(p1d3[0]-pta[0])-p1d3[2];
+ m2=pta[2]+v3/v1*(p2d3[0]-pta[0])-p2d3[2];
+ }else if(fabs(v2)>Eps){
+ m1=pta[2]+v3/v2*(p1d3[1]-pta[1])-p1d3[2];
+ m2=pta[2]+v3/v2*(p2d3[1]-pta[1])-p2d3[2];
+ }else{
+ m1=pta[1]-p1d3[1];
+ m2=pta[1]-p2d3[2];
+ }
+ if(m1*m2>= 0){
+ if(((m1>0) && (m2>0)) || ((m1< 0) && (m2< 0))){
+ continue;
+ }
+ if(m1==0){
+ ptd3[0]=p1d3[0]; ptd3[1]=p1d3[1]; ptd3[2]=p1d3[2];
+ ptuv[0]=puv1[0]; ptuv[1]=puv1[1];
+ }else{
+ ptd3[0]=p2d3[0]; ptd3[1]=p2d3[1]; ptd3[2]=p2d3[2];
+ ptuv[0]=puv2[0]; ptuv[1]=puv2[1];
+ }
+ }else{
+ ptd3[0]=1/(m1-m2)*(-m2*p1d3[0]+m1*p2d3[0]);
+ ptd3[1]=1/(m1-m2)*(-m2*p1d3[1]+m1*p2d3[1]);
+ ptd3[2]=1/(m1-m2)*(-m2*p1d3[2]+m1*p2d3[2]);
+ ptuv[0]=1/(m1-m2)*(-m2*puv1[0]+m1*puv2[0]);
+ ptuv[1]=1/(m1-m2)*(-m2*puv1[1]+m1*puv2[1]);
+ }
+ tmpd3[0]=ptd3[0]-pta[0];
+ tmpd3[1]=ptd3[1]-pta[1];
+ tmpd3[2]=ptd3[2]-pta[2];
+ crossprod(3,tmpd3,Vec, tmp1d3);
+ if(norm(3,tmp1d3)<Eps1){
+ tmpd1=zparapt(ptd3)-zparapt(pta)-Eps2;
+ if(tmpd1>0){
+ copyd(0,2,ptd3,out); out[3]=tmpd1;
+ return 1;
+ }else{
+ if(tmpd1>out[3]){
+ copyd(0,2,ptd3,out); out[3]=tmpd1;
+ }
+ }
+ }
+ }
+ }
+ }
+ return 0;
+}
+
+int nohiddenpara2(short ch,double par[], double fk[][3], int uveq, double figkL[][3]){
+ double eps0=pow(10,-4.0), s, p1[2], p2[2], q[2],tmpd1, tmpd2[2],tmp1,tmp2;
+ double paL[DsizeM], fh[DsizeM][2], pta[3], ptap[2], vec[3];
+ double figL[DsizeM][2], tmpmd2[DsizeM][2], tmpmd3[DsizeM][3];
+ double tmp1d2[2], tmp2d2[2], tmp3d2[2], tmpd3[3],tmpd4[4];
+ double pd2[2], qd2[2], pd3[3], qd3[3], sp, sq, tp, tq, dtmp, dtmp1, dtmp2;
+ int flg;
+ int ncusp=floor(Cusppt[0][0]+0.5), seL[DsizeM];
+ int i,j,n, nfh, nfk, cspflg,tmpi1[DsizeM];
+ vec[0]=sin(THETA)*cos(PHI);
+ vec[1]=sin(THETA)*sin(PHI);
+ vec[2]=cos(THETA);
+ nfk=length3(fk);
+ nfh=projpara(fk, fh);
+ pull2(1,fh,p1);
+ pull2(nfh,fh,p2);
+ cspflg=1;
+ for(i=1; i<=ncusp; i++){
+ pull2(i, Cusppt, tmpd2);
+ if(dist(2,tmpd2,p1)<eps0){
+ if(cspflg==1){
+ cspflg=2;
+ }
+ else if(cspflg==3){
+ cspflg=6;
+ }
+ continue;
+ }
+ if(dist(2,tmpd2,p2)<eps0){
+ if(cspflg==1){
+ cspflg=3;
+ }
+ else if(cspflg==2){
+ cspflg=6;
+ }
+ continue;
+ }
+ }
+ paL[0]=0;
+ tmp2=-1;
+ for(j=1;j<=length1(par)-1;j++){
+ tmp1=par[j];
+ if(fabs(tmp1-tmp2)>Eps){
+ add1(paL,tmp1);
+ tmp2=tmp1;
+ }
+ }
+ tmp1=paL[length1(paL)];
+ tmp2=par[length1(par)];
+ if(fabs(tmp1-tmp2)<Eps){
+ paL[length1(paL)]=tmp2;
+ }else{
+ add1(paL,tmp2);
+ }
+ seL[0]=0;
+ for(n=1; n<=length1(paL)-1; n++){
+ s=(paL[n]+paL[n+1])/2.0;
+ invparapt(s,fh,fk, pta);
+ parapt(pta,ptap);
+ flg=pthiddenQ(ch,pta, uveq, tmpd4);
+ if(flg==0){ //180518
+ appendi1(n,seL);
+ }
+ }
+ figL[0][0]=0;figkL[0][0]=0;
+ for(i=1; i<=seL[0]; i++){
+ sp=paL[seL[i]]; //180616from
+ sq=paL[seL[i]+1];
+ pointoncurve(sp, fh, Eps, pd2);
+ pointoncurve(sq, fh, Eps, qd2);
+ if(dist(2,pd2,qd2)>Eps1){
+ nearestptpt(pd2,fh,tmpd4);
+ dtmp1=tmpd4[2];
+ nearestptpt(qd2,fh,tmpd4);
+ dtmp2=tmpd4[2];
+ partcrv(dtmp1,dtmp2,fh,tmpmd2);
+ appendd2(2,1,length2(tmpmd2),tmpmd2,figL);
+ tp=invparapt(sp,fh,fk,tmpd3);
+ tq=invparapt(sq,fh,fk,tmpd3);
+ partcrv3(tp,tq,fk,tmpmd3);
+ appendd3(2,1,length3(tmpmd3), tmpmd3, figkL);
+ }//180616to
+ else{//180705from
+ if(fabs(sp-sq)>1){
+ appendd2(2,1,length2(fh),fh,figL);
+ appendd3(2,1,length3(fk),fk,figkL);
+ }
+ }//180705to
+ }
+ tmpi1[0]=0;
+ for(i=1; i<=length1(paL)-1; i++){
+ if(memberi(i,seL)==0){
+ appendi1(i,tmpi1);
+ }
+ }
+ copyi(0,tmpi1[0],tmpi1,seL);
+ seL[0]=tmpi1[0];
+ Hiddendata[0][0]=0;
+ for(i=1; i<=seL[0]; i++){
+ dtmp=paL[seL[i]];
+ pointoncurve(dtmp,fh,Eps,tmp1d2);
+ dtmp=paL[seL[i]+1];
+ pointoncurve(dtmp,fh,Eps, tmp2d2);
+ if(i==1){
+ copyd(0,1,tmp1d2,pd2);
+ sp=paL[seL[i]];
+ copyd(0,1,tmp2d2,qd2);
+ sq=paL[seL[i]+1];
+ }
+ else{
+ if(memberi(seL[i]-1,seL)==1){
+ copyd(0,1,tmp2d2,qd2);
+ sq=paL[seL[i]+1];
+ }
+ else{
+ tp=invparapt(sp,fh,fk,tmpd3);
+ tq=invparapt(sq,fh,fk,tmpd3);
+ partcrv3(tp,tq,fk,tmpmd3);
+ appendd3(2,1,length3(tmpmd3),tmpmd3,Hiddendata);
+ copyd(0,1,tmp1d2,pd2);
+ sp=paL[seL[i]];
+ copyd(0,1,tmp2d2,qd2);
+ sq=paL[seL[i]+1];
+ }
+ }
+ }
+ if(seL[0]>0){
+ if(dist(2,pd2,qd2)>Eps1){
+ tp=invparapt(sp,fh,fk,tmpd3);
+ tq=invparapt(sq,fh,fk,tmpd3);
+ partcrv3(tp,tq,fk,tmpmd3);
+ appendd3(2,1,length3(tmpmd3),tmpmd3,Hiddendata);
+ }
+ else{
+ appendd3(2,1,length3(fk),fk,Hiddendata);
+ }
+ }
+ return length3(figkL);
+}
+
+void borderparadata(short ch,double fkL[][3], double fsL[][3]){
+ double ekL[DsizeL][3], fall[DsizeL][2], fbdxy[DsizeL][2];
+ double tmpd3[DsizeM][3], tmpd2[DsizeM][2], p[2], p3[3];
+ double figkL[DsizeM][3], du, dv;
+ int i, j;
+ int din[DsizeS][2],din2[DsizeM][2];
+ int ntmp, ntmpd3,ntmpd2;
+ double par[DsizeM];
+ du=(Urng[1]-Urng[0])/Mdv;
+ dv=(Vrng[1]-Vrng[0])/Ndv;
+ fsL[0][0]=0;
+ ekL[0][0]=0;;
+ if(DrawE==1){
+ tmpd2[0][0]=0;;
+ for(j=0; j<=Ndv; j++){
+ add2(tmpd2, Urng[1], Vrng[0]+j*dv);
+ }
+ surfcurve(ch,tmpd2,tmpd3);
+ appendd3(2,1,length3(tmpd3),tmpd3,ekL);
+ }
+ if(DrawN==1){
+ tmpd2[0][0]=0;
+ for(j=0; j<=Mdv; j++){
+ add2(tmpd2, Urng[0]+j*du, Vrng[1]);
+ }
+ surfcurve(ch,tmpd2,tmpd3);
+ appendd3(2,1,length3(tmpd3),tmpd3,ekL);
+ }
+ if(DrawW==1){
+ tmpd2[0][0]=0;
+ for(j=0; j<=Ndv; j++){
+ add2(tmpd2, Urng[0], Vrng[0]+j*dv);
+ }
+ surfcurve(ch,tmpd2,tmpd3);
+ appendd3(2,1,length3(tmpd3),tmpd3,ekL);
+ }
+ if(DrawS==1){
+ tmpd2[0][0]=0;
+ for(j=0; j<=Mdv; j++){
+ add2(tmpd2, Urng[0]+j*du, Vrng[0]);
+ }
+ surfcurve(ch,tmpd2,tmpd3);
+ appendd3(2,1,length3(tmpd3),tmpd3,ekL);
+ }
+ if(length3(ekL)>0){
+ appendd3(2,1,length3(ekL),ekL,fkL);
+ }
+ projpara(fkL,fall);
+ makexybdy(ch,fbdxy);
+ dataindexd2(2,fall,din);
+ Borderpt[0][0]=0;
+ Otherpartition[0]=0;
+ for(i=1; i<=length2i(din)-1; i++){
+ Otherpartition[i]=Inf; Otherpartition[0]++;
+ }
+ Borderhiddendata[0][0]=0;
+ dataindexd3(2,fkL,din2);
+ for(i=1; i<= length2i(din2); i++){
+ tmpd3[0][0]=0;
+ appendd3(0,din2[i][0],din2[i][1],fkL,tmpd3);
+ projpara(tmpd3,tmpd2);
+ partitionseg(tmpd2,fall,0,par);
+/*
+ if(length1(par)>2){
+ ntmp=length1(par)-1;
+ tmpd2[0][0]=0;
+ for(j=2; j<=ntmp; j++){
+ pull2(j,Partitionpt,p);
+ addptd2(tmpd2, p);
+ }
+ appendd2(0, 1,length2(tmpd2),tmpd2,Borderpt);
+ }
+*/
+ tmpd3[0][0]=0;
+ appendd3(0,din2[i][0],din2[i][1],fkL,tmpd3);
+// for(j=din2[i][0]; j<=din2[i][1]; j++){
+// pull3(j,fkL,p3);
+// addptd3(tmpd3,p3);
+// }
+ nohiddenpara2(ch,par,tmpd3,1, figkL);
+ if(length3(figkL)>0){
+ appendd3(2,1,length3(figkL),figkL, fsL);
+ }
+ ntmp=length3(Hiddendata);
+ if(ntmp>0){
+ appendd3(2,1,ntmp,Hiddendata,Borderhiddendata);
+ }
+ }
+}
+
+int dropnumlistcrv3(double qd[][3], double eps1, int out[]){
+ int i,j,k,nout,nall=length3(qd), nd, se, en, npd, nptL;
+ int din[DsizeM][2],ptL[DsizeL];
+ double eps=pow(10.0,-6.0), pd[DsizeL][3], p[3], tmp2d[3];
+ out[0]=0; nout=0;
+ nd=dataindexd3(2,qd,din);
+ for(j=1; j<=nd; j++){
+ se=din[j][0]; en=din[j][1];
+ pd[0][0]=0; npd=0;
+ npd=appendd3(0,se,en,qd,pd);
+ ptL[0]=0; nptL=0;
+ nptL=appendi1(1,ptL);
+ pull3(1,pd,p);
+ for(k=2; k<=npd-1; k++){
+ pull3(k,pd,tmp2d);
+ if(dist(3,p,tmp2d)>eps1){
+ nptL=appendi1(k,ptL);
+ pull3(k,pd,p);
+ }
+ }
+ pull3(npd-1,pd,p);
+ pull3(npd,pd,tmp2d);
+ if(dist(3,p,tmp2d)>eps){ // eps -> eps1 ?
+ nptL=appendi1(npd,ptL);
+ }
+ if(nout>0){
+ nout=appendi1(Infint,out);
+ }
+ for(i=1; i<=nptL; i++){
+ nout=appendi1(ptL[i],out);
+ }
+ }
+ out[0]=nout;
+ return nout;
+}
+
+void sfbdparadata(short ch,double outd3[][3]){
+ double pdatad3[DsizeL][3];
+ double pts[DsizeL][2],out3md[DsizeL][2],eps;
+ double tmpmd[DsizeL][2],tmp1md[DsizeL][2],tmp2md[DsizeL][2],tmp3md[DsizeL][2];
+ double tmpd[2],tmp1d[2],tmpd3[3],tmp1d3[3],tmp2d3[3],tmp2md3[DsizeL][3];
+ int din[DsizeS][2],nlist[DsizeL];
+ int ii,jj,kk,n,nall,flg;
+ envelopedata(ch, out3md); //180517from
+ tmp3md[0][0]=0;
+ pts[0][0]=0;
+ dataindexd2(2,out3md,din);
+ for(jj=1;jj<=length2i(din);jj++){
+ tmp1md[0][0]=0;
+ tmp2md3[0][0]=0;
+ for(kk=din[jj][0];kk<=din[jj][1];kk++){
+ pull2(kk,out3md,tmpd);
+ addptd2(tmp1md,tmpd);
+ surffun(ch,tmpd[0],tmpd[1],tmpd3);
+ addptd3(tmp2md3,tmpd3);
+ }
+ dropnumlistcrv3(tmp2md3,Eps1,nlist);
+ if(nlist[0]==1){
+ pull2(nlist[1],tmp1md,tmpd);
+ addptd2(pts,tmpd);
+ }else{
+ tmpmd[0][0]=0;
+ for(kk=1;kk<=nlist[0];kk++){
+ pull2(nlist[kk],tmp1md,tmpd);
+ addptd2(tmpmd,tmpd);
+ }
+ if(length2(tmpmd)>0){
+ appendd2(2,1,length2(tmpmd),tmpmd,tmp3md);
+ }
+ }
+ }
+ out3md[0][0]=0;
+ appendd2(0,1,length2(tmp3md),tmp3md,out3md);
+ tmp3md[0][0]=0;
+ appendd2(0,1,length2(pts),pts,tmp3md);
+ pts[0][0]=0;
+ for(ii=1;ii<=length2(tmp3md);ii++){
+ pull2(ii,tmp3md,tmpd);
+ surffun(ch,tmpd[0],tmpd[1],tmp1d3);
+ flg=0;
+ for(jj=1;jj<=length2(pts);jj++){
+ pull2(jj,pts,tmpd);
+ surffun(ch,tmpd[0],tmpd[1],tmp2d3);
+ if(dist(3,tmp1d3,tmp2d3)<Eps1){
+ flg=1; break;
+ }
+ }
+ if(flg==0){
+ pull2(ii,tmp3md,tmpd);
+ addptd2(pts,tmpd);
+ }
+ }
+ for(ii=1;ii<=length2(pts);ii++){
+ pull2(ii,pts,tmpd);
+ surffun(ch,tmpd[0],tmpd[1],tmp1d3);
+ dataindexd2(2,out3md,din);
+ for(jj=1;jj<=length2i(din);jj++){
+ tmp2md[0][0]=0;
+ appendd2(0,din[jj][0],din[jj][1],out3md,tmp2md);
+ eps=1;
+ for(kk=1;kk<=length2(tmp2md)-1;kk++){
+ pull2(kk,tmp2md,tmpd);
+ surffun(ch,tmpd[0],tmpd[1],tmp1d3);
+ pull2(kk+1,tmp2md,tmpd);
+ surffun(ch,tmpd[0],tmpd[1],tmpd3);
+ if(eps>dist(3,tmp1d3,tmpd3)){
+ eps=dist(3,tmp1d3,tmpd3);
+ }
+ }
+ pull2(1,tmp2md,tmpd);
+ surffun(ch,tmpd[0],tmpd[1],tmpd3);
+ if(dist(3,tmp1d3,tmpd3)<eps+Eps){
+ prependd2(ii,ii,pts,tmp2md);
+ replacelistd2(2,jj,out3md,tmp2md);
+ dataindexd2(2,out3md,din);//180517
+ continue;
+ }
+ pull2(length2(tmp2md),tmp2md,tmpd);
+ surffun(ch,tmpd[0],tmpd[1],tmpd3);
+ if(dist(3,tmp1d3,tmpd3)<eps+Eps){
+ appendd2(0,ii,ii,pts,tmp2md);
+ replacelistd2(2,jj,out3md,tmp2md);
+ dataindexd2(2,out3md,din);//180517
+ continue;
+ }
+ }
+ }
+ nall=cuspsplitpara(ch,out3md, pdatad3);
+ n=length2(Cuspsplitpt);
+ Cusppt[0][0]=0;
+ nall=appendd2(0, 1,n,Cuspsplitpt,Cusppt);
+ borderparadata(ch,pdatad3, outd3);
+ push3(Inf,3,0,outd3);
+ nall=appendd3(0,1,length3(Borderhiddendata),Borderhiddendata,outd3);
+ push3(Inf,3,0,outd3);
+}
+
+void groupnearpt3(double qlist[][3],double plist[][3]){
+// 180428
+ int ii,jj,flg,din[DsizeS][2];
+ double p1[3],p2[3],gl[DsizeS][3];
+ while(length3(qlist)>0){
+ gl[0][0]=0;
+ appendd3(2,1,1,qlist,gl);
+ removed3(1,qlist);
+ for(ii=1;ii<=length3(qlist);ii++){
+ flg=0;
+ pull3(ii,qlist,p1);
+ for(jj=1;jj<=length3(gl);jj++){
+ pull3(jj,gl,p2);
+ if(dist(3,p1,p2)<Eps1){
+ flg=1;
+ break;
+ }
+ }
+ if(flg==1){
+ addptd3(gl,p1);
+ removed3(ii,qlist);
+ }
+ }
+ appendd3(2,1,length3(gl),gl,plist);
+ }
+}
+
+double funmeet(short ch,double u, double v,double pa[3], double vec[3]){
+ double pt[3], out;
+ surffun(ch,u, v, pt);
+ if((fabs(vec[1])>Eps)||(fabs(vec[0])>Eps)){
+ out=(vec[1]*(pt[0]-pa[0])-vec[0]*(pt[1]-pa[1]));
+ }else{
+ out=pt[0];
+ }
+ return out;
+}
+
+void meetpoints(short ch,double pta[3], double ptb[3], int uveq,double out[][3]){
+ int i, j, k,flg,din[DsizeS][2];
+ double vec[3],v1,v2,v3;
+ double du=(Urng[1]-Urng[0])/Mdv, dv=(Vrng[1]-Vrng[0])/Ndv;
+ double uval1,uval2,vval1,vval2,eval11,eval12,eval21,eval22;
+ double pl[5][2], vl[5], ql[11][2],p1[2],p2[2],m1,m2;
+ double ptuv[2], puv1[2], puv2[2],p1d3[3], p2d3[3], ptd3[3];
+ double tmpd1, tmpd2[2],tmpd3[3],tmp1d3[3],tmp1md3[DsizeS][3];
+ vec[0]=ptb[0]-pta[0]; vec[1]=ptb[1]-pta[1]; vec[2]=ptb[2]-pta[2];
+ out[0][0]=0;
+ if(norm(3,vec)<Eps){
+ return;
+ }
+ for(j=0; j<=Ndv-1; j++){
+ vval1=Vrng[0]+j*dv;
+ vval2=Vrng[0]+(j+1)*dv;
+ uval1=Urng[0];
+ eval11=funmeet(ch,uval1,vval1,pta,vec);
+ eval12=funmeet(ch,uval1,vval2,pta,vec);
+ for(i=0; i<=Mdv-1; i++){
+ uval2=Urng[0]+(i+1)*du;
+ eval21=funmeet(ch,uval2,vval1,pta,vec);
+ eval22=funmeet(ch,uval2,vval2,pta,vec);
+ pl[0][0]=uval1; pl[0][1]=vval1; vl[0]=eval11;
+ pl[1][0]=uval2; pl[1][1]=vval1; vl[1]=eval21;
+ pl[2][0]=uval2; pl[2][1]=vval2; vl[2]=eval22;
+ pl[3][0]=uval1; pl[3][1]=vval2; vl[3]=eval12;
+ pl[4][0]=uval1; pl[4][1]=vval1; vl[4]=eval11;
+ ql[0][0]=0;
+ for(k=0; k<=3; k++){
+ pull2(k,pl,p1);
+ pull2(k+1,pl,p2);
+ m1=vl[k]; m2=vl[k+1];
+ if(fabs(m1)<Eps){
+ addptd2(ql, p1);
+ continue;
+ }
+ if(fabs(m2)<Eps){
+ continue;
+ }
+ if((m1>0)&&(m2>0)){
+ continue;
+ }
+ if((m1< 0)&&(m2< 0)){
+ continue;
+ }
+ tmpd2[0]=1/(m1-m2)*(-m2*p1[0]+m1*p2[0]);
+ tmpd2[1]=1/(m1-m2)*(-m2*p1[1]+m1*p2[1]);
+ addptd2(ql, tmpd2);
+ }
+ uval1=uval2;
+ eval11=eval21;
+ eval12=eval22;
+ if(length2(ql)==2){
+ puv1[0]=ql[1][0]; puv1[1]=ql[1][1];
+ puv2[0]=ql[2][0]; puv2[1]=ql[2][1];
+ surffun(ch,puv1[0],puv1[1],p1d3);
+ surffun(ch,puv2[0],puv2[1],p2d3);
+ v1=vec[0]; v2=vec[1]; v3=vec[2];
+ if(fabs(v1)>Eps){
+ m1=pta[2]+v3/v1*(p1d3[0]-pta[0])-p1d3[2];
+ m2=pta[2]+v3/v1*(p2d3[0]-pta[0])-p2d3[2];
+ }else if(fabs(v2)>Eps){
+ m1=pta[2]+v3/v2*(p1d3[1]-pta[1])-p1d3[2];
+ m2=pta[2]+v3/v2*(p2d3[1]-pta[1])-p2d3[2];
+ }else{
+ m1=pta[1]-p1d3[1];
+ m2=pta[1]-p2d3[2];
+ }
+ if(m1*m2>= 0){
+ if(((m1>0) && (m2>0)) || ((m1< 0) && (m2< 0))){
+ continue;
+ }
+ if(m1==0){
+ ptd3[0]=p1d3[0]; ptd3[1]=p1d3[1]; ptd3[2]=p1d3[2];
+ ptuv[0]=puv1[0]; ptuv[1]=puv1[1];
+ }else{
+ ptd3[0]=p2d3[0]; ptd3[1]=p2d3[1]; ptd3[2]=p2d3[2];
+ ptuv[0]=puv2[0]; ptuv[1]=puv2[1];
+ }
+ }else{
+ ptd3[0]=1/(m1-m2)*(-m2*p1d3[0]+m1*p2d3[0]);
+ ptd3[1]=1/(m1-m2)*(-m2*p1d3[1]+m1*p2d3[1]);
+ ptd3[2]=1/(m1-m2)*(-m2*p1d3[2]+m1*p2d3[2]);
+ ptuv[0]=1/(m1-m2)*(-m2*puv1[0]+m1*puv2[0]);
+ ptuv[1]=1/(m1-m2)*(-m2*puv1[1]+m1*puv2[1]);
+ }
+ tmpd3[0]=ptd3[0]-pta[0];
+ tmpd3[1]=ptd3[1]-pta[1];
+ tmpd3[2]=ptd3[2]-pta[2];
+ crossprod(3,tmpd3,vec, tmp1d3);
+ if(norm(3,tmp1d3)<Eps1){
+ tmpd1=dotprod(3,tmpd3,vec);
+ if((tmpd1>-Eps)&&(norm(3,tmpd3)<norm(3,vec)+Eps)){
+ if(length3(out)==0){
+ addptd3(out,ptd3);
+ }else{
+ pull3(length3(out),out,p1d3);
+ if(dist(3,p1d3,ptd3)>Eps){
+ addptd3(out,ptd3);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ tmp1md3[0][0]=0;
+ groupnearpt3(out,tmp1md3);
+ dataindexd3(2,tmp1md3,din);
+ out[0][0]=0;
+ for(i=1;i<=din[0][0];i++){
+ p1d3[0]=0; p1d3[1]=0; p1d3[2]=0;
+ tmpd1=din[i][1]-din[i][0]+1;
+ for(j=din[i][0];j<=din[i][1];j++){
+ p1d3[0]=p1d3[0]+tmp1md3[j][0]/tmpd1;
+ p1d3[1]=p1d3[1]+tmp1md3[j][1]/tmpd1;
+ p1d3[2]=p1d3[2]+tmp1md3[j][2]/tmpd1;
+ }
+ addptd3(out,p1d3);
+ }
+}
+
+void crvsfparadata(short ch, double fkL[][3], double fbdkL[][3], int sepflg, double out[][3]){
+ double fbdy[DsizeL][2], fk[DsizeM][3],outh[DsizeL][3];
+// double fkp[DsizeM][3], dt;
+ double fh[DsizeM][2], parL[DsizeM], tmpmd3[DsizeM][3];
+ double ptL[DsizeM][3], tmpd2[2], tmpd3[3], tmp1d1, tmp2d1;
+ double po[2]={0,0}, epsd2[2]={Eps1,1}, pa[3], pb[3];
+ int nbor=length3(Borderhiddendata);
+ int ncshidden,din[DsizeM][2],din2[DsizeS][2];
+ int nn, i, j, k, n;
+ projpara(fbdkL,fbdy);
+ out[0][0]=0;
+ outh[0][0]=0;
+ dataindexd3(2,fkL,din);
+ for(nn=1; nn<=length2i(din); nn++){
+ fk[0][0]=0;
+ appendd3(0,din[nn][0],din[nn][1],fkL,fk);
+ projpara(fk,fh);
+ partitionseg(fh,fbdy,0,parL);
+ if(sepflg==0){ //180522
+ for(i=1; i<=length3(fk)-1; i++){
+ pull3(i,fk,pa);
+ pull3(i+1,fk,pb);
+ meetpoints(ch,pa,pb,1,ptL);
+ for(j=1; j<=length3(ptL); j++){
+ pull3(j,ptL,tmpd3);
+ parapt(tmpd3,tmpd2);
+ tmp1d1=paramoncurve(tmpd2,i,fh);
+ tmp2d1=Inf;
+ for(k=1; k<=length1(parL); k++){
+ tmp2d1=fmin(tmp2d1,fabs(parL[k]-tmp1d1));
+ }
+ tmpd3[0]=pb[0]-pa[0]; tmpd3[1]=pb[1]-pa[1];
+ tmpd3[2]=pb[2]-pa[2];
+ if(tmp2d1*dist(3,tmpd3,po)>Eps1){
+ appendd1(tmp1d1,parL);
+ }
+ }
+ simplesort(parL);
+ }
+ }
+ nohiddenpara2(ch,parL,fk,1, tmpmd3);
+ appendd3(2,1,length3(tmpmd3),tmpmd3,out);
+ appendd3(2,1, length3(Hiddendata),Hiddendata,outh);
+ }
+ push3(Inf,3,0,out); //17.06.17
+ appendd3(0,1,length3(outh),outh,out);
+}
+
+void crv3onsfparadata(short ch,double fk[][3], double fbdyd3[][3], double out[][3]){
+ // 180609 debugged(renewed)
+ double fbdy[DsizeL][2],fh[DsizeL][2],fks[DsizeL][3],fhs[DsizeL][2],par[DsizeM];
+ double tmpmd3[DsizeL][3],outh[DsizeL][3];
+ int i,j,din[DsizeS][2];
+ projpara(fbdyd3,fbdy);
+ projpara(fk,fh);
+ out[0][0]=0;
+ outh[0][0]=0;
+ dataindexd2(2,fh,din);
+ for(i=1;i<=din[0][0];i++){
+ fhs[0][0]=0; fks[0][0]=0;
+ appendd2(0,din[i][0],din[i][1],fh,fhs);
+ appendd3(0,din[i][0],din[i][1],fk,fks);
+ tmpmd3[0][0]=0;
+ if(length2(fhs)>1){
+ partitionseg(fhs,fbdy,0, par);
+ nohiddenpara2(ch,par,fks,1,tmpmd3);
+ appendd3(2,1,length3(tmpmd3),tmpmd3,out);
+ appendd3(2,1,length3(Hiddendata),Hiddendata,outh);
+ }else{
+ appendd3(2,1,1,fks,out);
+ }
+ }
+ connectseg3(out, Eps1,tmpmd3);
+ out[0][0]=0;
+ appendd3(0,1,length3(tmpmd3),tmpmd3,out);
+ push3(Inf,3,0,out); //181025
+ connectseg3(outh, Eps1,tmpmd3);
+ appendd3(0,1,length3(tmpmd3),tmpmd3,out);//181025
+}
+
+void crv2onsfparadata(short ch,double fh[][2], double fbdyd3[][3], double out[][3]){
+ double fk[DsizeL][3];
+ surfcurve(ch,fh,fk);
+ crv3onsfparadata(ch,fk,fbdyd3,out);
+}
+
+void wireparadata(short ch,double bdyk[][3], double udata[], double vdata[],const char *fname,const char *fnameh){
+ double crv2d[DsizeL][2],out[DsizeL][3],out1[DsizeL][3],out2[DsizeL][3];
+ double du=(Urng[1]-Urng[0])/Mdv;
+ double dv=(Vrng[1]-Vrng[0])/Ndv;
+ int i,j,din[DsizeS][2];
+ short allflg=1;
+ if(strlen(fnameh)>0){
+ allflg=0;
+ }
+ char var0[]="wire3d";
+ char varh0[]="wireh3d";
+ char var[20];
+ char varh[20];
+ char varnow[40];
+ char varhnow[40];
+ varnow[0]='\0';
+ varhnow[0]='\0';
+ sprintf(var,"%s%d",var0,ch);
+ sprintf(varh,"%s%d",varh0,ch);
+ char dirfname[256];
+ char dirfnameh[256];
+ char varname[256];
+ char varnameh[256];
+ dirfname[0]='\0';
+ dirfnameh[0]='\0';
+ varname[0]='\0';
+ varnameh[0]='\0';
+ sprintf(varname,"%s%d",var,ch);
+ sprintf(varnameh,"%s%d",varh,ch);
+ sprintf(dirfname,"%s%s",Dirname,fname);
+ sprintf(dirfnameh,"%s%s",Dirname,fnameh);
+ if((length1(udata)==0)&&(allflg==0)){
+ out[0][0]=0;
+ output3(1,"w",varname,dirfname,out);
+ output3(1,"w",varnameh,dirfnameh,out);
+ }
+ for(i=1;i<=length1(udata);i++){
+ crv2d[0][0]=0;
+ for(j=0; j<=Ndv; j++){
+ add2(crv2d, udata[i],Vrng[0]+j*dv);
+ }
+ if(allflg==1){out[0][0]=0;}
+ crv2onsfparadata(ch,crv2d,bdyk,out);
+ if(allflg==0){
+ dataindexd3(3,out,din);
+ out1[0][0]=0; out2[0][0]=0;
+ appendd3(0,din[1][0],din[1][1],out,out1);
+ appendd3(0,din[2][0],din[2][1],out,out2);
+ if(i==1){
+ output3(1,"w",varname,dirfname,out1);
+ output3(1,"w",varnameh,dirfnameh,out2);
+ }else{
+ output3(0,"a",varname,dirfname,out1);
+ output3(0,"a",varnameh,dirfnameh,out2);
+ }
+ }else{
+ sprintf(varnow,"%s%s%d",var,"u",i);
+ sprintf(varhnow,"%s%s%d",varh,"u",i);
+ output3h("a",varnow, varhnow,fname,out);
+ }
+ }
+ for(j=1;j<=length1(vdata);j++){
+ crv2d[0][0]=0;
+ for(i=0; i<=Mdv; i++){
+ add2(crv2d, Urng[0]+i*du,vdata[j]);
+ }
+ if(allflg==1){out[0][0]=0;}
+ crv2onsfparadata(ch,crv2d,bdyk,out);
+ if(allflg==0){
+ dataindexd3(3,out,din);
+ out1[0][0]=0; out2[0][0]=0;
+ appendd3(0,din[1][0],din[1][1],out,out1);
+ appendd3(0,din[2][0],din[2][1],out,out2);
+ if(i<length1(vdata)){
+ output3(0,"a",varname,dirfname,out1);
+ output3(0,"a",varnameh,dirfnameh,out2);
+ }else{
+ output3(0,"a",varname,dirfname,out1);
+ outputend(dirfname);
+ output3(0,"a",varnameh,dirfnameh,out2);
+ outputend(dirfnameh);
+ }
+ }else{
+ sprintf(varnow,"%s%s%d",var,"v",j);
+ sprintf(varhnow,"%s%s%d",varh,"v",j);
+ output3h("a",varnow, varhnow,fname,out);
+ }
+ }
+ if(allflg==0){
+ outputend(dirfname);
+ outputend(dirfnameh);
+ }
+}
+
+void intersectcrvsf(const char *wa, short chfd,double crv[][3],const char *fname){
+ double pa[3],pb[3],out[DsizeM][3],ptL[DsizeM][3];
+ int i;
+ short chcut;
+ char chc[10];
+ sprintf(chc,"%d",chfd);
+ char var[]="intercrvsf";
+ char dirfname[256];
+ dirfname[0] = '\0';
+ sprintf(dirfname,"%s%s",Dirname,fname);
+ char varname[256];
+ varname[0] = '\0';
+ sprintf(varname,"%s%s",var,chc);
+ ptL[0][0]=0;
+ for(i=1;i<length3(crv);i++){
+ pull3(i,crv,pa);
+ pull3(i+1,crv,pb);
+ meetpoints(chfd,pa,pb,1,out);
+ appendd3(0,1,length3(out),out,ptL);
+ }
+ output3(1,wa,varname,dirfname,ptL);
+}
+
+void sfcutparadata(short chfd, short ncut, double fbdy3[][3],const char *fname,const char *fnameh){
+ double Vec[3]={sin(THETA)*cos(PHI),sin(THETA)*sin(PHI),cos(THETA)};
+ double v1=Vec[0],v2=Vec[1],v3=Vec[2];
+ double out[DsizeM][2],out2[DsizeM][2],outd3[DsizeL][3];
+ double ekL[DsizeL][3],out1d3[DsizeL][3],out2d3[DsizeL][3];
+ double uval1,uval2,vval1,vval2,eval11,eval12,eval21,eval22;
+ double pl[5][2], vl[5], ql[11][2],diff1,diff2;
+ double tmp1md[DsizeM][2],tmp2md[DsizeM][2],tmpd[2],tmp1d[2],tmp2d[2];
+ double tmp2md3[DsizeM][3],tmpd3[3],tmp1d3[3];
+ double du=(Urng[1]-Urng[0])/Mdv;
+ double dv=(Vrng[1]-Vrng[0])/Ndv;
+ double p1[2],p2[2],m1,m2,q11,q12,q21,q22,a1,a3,b1,b3;
+ int i,j,k,din[DsizeS][2],ns,ne,rmv[DsizeS];
+ short chcut, allflg=0;
+ if(strlen(fnameh)==0){
+ allflg=1;
+ }
+ char var0[]="sfcut3d";
+ char varh0[]="sfcuth3d";
+ char var[20];
+ char varh[20];
+ sprintf(var,"%s%d",var0,chfd);
+ sprintf(varh,"%s%d",varh0,chfd);
+ char varnow[40];
+ char varhnow[40];
+ char dirfname[256];
+ char dirfnameh[256];
+ char varname[256];
+ char varnameh[256];
+ varnow[0]='\0';
+ varhnow[0]='\0';
+ dirfname[0]='\0';
+ dirfnameh[0]='\0';
+ varname[0]='\0';
+ varnameh[0]='\0';
+ sprintf(varname,"%s%d",var,chfd);
+ sprintf(varnameh,"%s%d",varh,chfd);
+ sprintf(dirfname,"%s%s",Dirname,fname);
+ sprintf(dirfnameh,"%s%s",Dirname,fnameh);
+ for(chcut=1;chcut<=ncut;chcut++){
+ out[0][0]=0; out2[0][0]=0;
+ for(j=0; j<=Ndv-1; j++){
+ vval1=Vrng[0]+j*dv;
+ vval2=Vrng[0]+(j+1)*dv;
+ uval1=Urng[0];
+ eval11=cutfun(chfd, chcut,uval1, vval1);
+ eval12=cutfun(chfd, chcut,uval1, vval2);
+ for(i=0; i<=Mdv-1; i++){
+ uval2=Urng[0]+(i+1)*du;
+ eval21=cutfun(chfd, chcut,uval2, vval1);
+ eval22=cutfun(chfd, chcut,uval2, vval2);
+ pl[0][0]=uval1; pl[0][1]=vval1; vl[0]=eval11;
+ pl[1][0]=uval2; pl[1][1]=vval1; vl[1]=eval21;
+ pl[2][0]=uval2; pl[2][1]=vval2; vl[2]=eval22;
+ pl[3][0]=uval1; pl[3][1]=vval2; vl[3]=eval12;
+ pl[4][0]=uval1; pl[4][1]=vval1; vl[4]=eval11;
+ ql[0][0]=0;
+ for(k=0; k<=3; k++){
+ pull2(k,pl,p1);
+ pull2(k+1,pl,p2);
+ m1=vl[k]; m2=vl[k+1];
+ if(fabs(m1)<Eps){
+ addptd2(ql, p1);
+ continue;
+ }
+ if(fabs(m2)<Eps){
+ continue;
+ }
+ if((m1>0)&&(m2>0)){
+ continue;
+ }
+ if((m1< 0)&&(m2< 0)){
+ continue;
+ }
+ tmpd[0]=1/(m1-m2)*(-m2*p1[0]+m1*p2[0]);
+ tmpd[1]=1/(m1-m2)*(-m2*p1[1]+m1*p2[1]);
+ addptd2(ql, tmpd);
+ }
+ uval1=uval2;
+ eval11=eval21;
+ eval12=eval22;
+ if(length2(ql)==2){
+ q11=ql[1][0];q12=ql[1][1];q21=ql[2][0];q22=ql[2][1];
+ a1=uval1;a3=uval2;b1=vval1;b3=vval2;
+ if(((q11==a1)&&(q21==a1))||((q11==a3)&&(q21==a3))){
+ if(((q21==b1)&&(q22==b1))||((q21==b3)&&(q22==b3))){
+ appendd2(2,1,2,ql,out2);
+ }else{
+ appendd2(2,1,2,ql,out);
+ }
+ continue;
+ }
+ if(((q12==b1)&&(q22==b1))||((q12==b3)&&(q22==b3))){
+ if(((q11==a1)&&(q21==a1))||((q11==a3)&&(q21==a3))){
+ appendd2(2,1,2,ql,out2);
+ }else{
+ appendd2(2,1,2,ql,out);
+ }
+ continue;
+ }
+ appendd2(2,1,2,ql,out);
+ }
+ }
+ }
+ dataindexd2(2,out2,din);
+ while(length2i(din)>0){
+ ns=din[1][0];ne=din[1][1];
+ tmp1md[0][0]=0;
+ appendd2(0,ns,ne,out2,tmp1md);
+ appendd2(2,ns,ne,out2,out);
+ removelistd2(2,1,out2);
+ dataindexd2(2,out2,din);
+ rmv[0]=0;
+ for(j=1;j<=length2i(din);j++){
+ ns=din[j][0];ne=din[j][1];
+ tmp2md[0][0]=0;
+ appendd2(0,ns,ne,out2,tmp2md);
+ pull2(1,tmp2md,tmp2d);pull2(1,tmp1md,tmp1d);
+ diff1=dist(2,tmp1d,tmp2d);
+ pull2(2,tmp2md,tmp2d);pull2(2,tmp1md,tmp1d);
+ diff1=diff1+dist(2,tmp1d,tmp2d);
+ pull2(1,tmp2md,tmp2d);pull2(2,tmp1md,tmp1d);
+ diff2=dist(2,tmp1d,tmp2d);
+ pull2(2,tmp2md,tmp2d);pull2(1,tmp1md,tmp1d);
+ diff2=diff2+dist(2,tmp1d,tmp2d);
+ if((diff1<Eps)||(diff2<Eps)){
+ appendi1(j,rmv);
+ continue;
+ }
+ }
+ for(j=1;j<=rmv[0];j++){
+ removelistd2(2,rmv[j],out2);
+ }
+ dataindexd2(2,out2,din);
+ }
+ connectseg(out, Eps1, out2);
+ dataindexd2(2,out2,din);
+ outd3[0][0]=0;
+ for(i=1;i<=length2i(din);i++){
+ ns=din[i][0];ne=din[i][1];
+ tmp1md[0][0]=0;
+ appendd2(0,ns,ne,out2,tmp1md);
+ tmp2md3[0][0]=0;
+ for(j=1;j<=length2(tmp1md);j++){
+ pull2(j,tmp1md,tmpd);
+ surffun(chfd,tmpd[0],tmpd[1],tmpd3);
+ if(length3(tmp2md3)>0){
+ pull3(length3(tmp2md3),tmp2md3,tmp1d3);
+ if(dist(3,tmpd3,tmp1d3)<Eps1){
+ continue;
+ }
+ }
+ addptd3(tmp2md3,tmpd3);
+ }
+ appendd3(2,1,length3(tmp2md3),tmp2md3,outd3);
+ }
+ crv3onsfparadata(chfd,outd3,fbdy3,ekL);
+ if(allflg==0){
+ dataindexd3(3,ekL,din);
+ out1d3[0][0]=0; out2d3[0][0]=0;
+ appendd3(0,din[1][0],din[1][1],ekL,out1d3);
+ appendd3(0,din[2][0],din[2][1],ekL,out2d3);
+ if(chcut==1){
+ output3(1,"w",varname,dirfname,out1d3);
+ output3(1,"w",varnameh,dirfnameh,out2d3);
+ }else{
+ output3(0,"a",varname,dirfname,out1d3);
+ output3(0,"a",varnameh,dirfnameh,out2d3);
+ }
+ }else{
+ sprintf(varnow,"%s%d",var,chcut);
+ sprintf(varhnow,"%s%d",varh,chcut);
+ output3h("a",varnow, varhnow,fname,ekL);
+ }
+ }
+ if(allflg==0){
+ outputend(dirfname);
+ outputend(dirfnameh);
+ }
+}
+
+int projcoordcurve(double curve[][3], double out[][3]){
+ double SP=sin(PHI), CP=cos(PHI), ST=sin(THETA), CT=cos(THETA);
+ double pt[3], xz, yz, zz;
+ int i, n, nall;
+ out[0][0]=0;
+ n=length3(curve);
+ for(i=1; i<=n; i++){
+ pull3(i, curve, pt);
+ if(pt[0]>Inf-1){
+ xz=pt[0]; yz=pt[1]; zz=pt[2];
+ }
+ else{
+ xz=-pt[0]*SP+pt[1]*CP;
+ yz=-pt[0]*CP*CT-pt[1]*SP*CT+pt[2]*ST;
+ zz=pt[0]*CP*ST+pt[1]*SP*ST+pt[2]*CT;
+ }
+ nall=push3(xz,yz,zz,out);
+ }
+ return nall;
+}
+
+int kukannozoku(double jokyo[2], double kukanL[][2], double res[][2]){
+ double t1, t2, tmpd2[2], ku[2];
+ int i, j, ii, nn, flg, nres;
+ nn=length2(kukanL);
+ t1=jokyo[0];
+ t2=jokyo[1];
+ pull2(1,kukanL,tmpd2);
+ t1=fmax(t1,tmpd2[0]);
+ pull2(nn,kukanL,tmpd2);
+ t2=fmin(t2,tmpd2[1]);
+ res[0][0]=0; nres=0;
+ flg=0;
+ for(ii=1; ii<=nn; ii++){
+ pull2(ii,kukanL,ku);
+ if(flg==0){
+ if(ku[1]<t1){
+ nres=addptd2(res,ku);
+ }
+ else{
+ flg=1;
+ if(ku[0]<t1-Eps){
+ tmpd2[0]=ku[0]; tmpd2[1]=t1;
+ nres=addptd2(res,tmpd2);
+ }
+ if(ku[1]>t2+Eps){
+ tmpd2[0]=t2; tmpd2[1]=ku[1];
+ nres=addptd2(res,tmpd2);
+ }
+ }
+ }
+ else if(flg==1){
+ if(ku[1]<t2){
+ continue;
+ }
+ else{
+ flg=2;
+ if(ku[0]<t2-Eps){
+ ku[0]=t2;
+ }
+ nres=addptd2(res,ku);
+ }
+ }
+ else{
+ nres=addptd2(res,ku);
+ }
+ }
+ return nres;
+}
+
+int skeletondata3(double data[][3], double r00,
+ double eps1, double eps2, double allres[][3]){
+ double objL[DsizeLL][3], pltL[DsizeLL][3];
+ double clipL[DsizeL][5],koc2d6[DsizeM][6],tmpd6[6];
+ double pts1[DsizeL][2],koc[DsizeM][4], koc2[DsizeM][4], kukanL[DsizeL][2];
+ double r0, t1, t2, z1, z2, tt, rr, origin[2], te, hh, ku[2], za, zb, ds[DsizeM],dmin;
+ double pt[2], pta[2], ptb[2], ptq[2];
+ double ptL[DsizeL][3], ptL2[DsizeL][2], res2[DsizeL][2], allres2[DsizeL][2];
+ double obj[DsizeL][3], plt[DsizeL][3];
+ double objp[DsizeL][3], pltp[DsizeL][3];
+ double obj2d[DsizeL][2], plt2d[DsizeL][2];
+ double tmpd1, tmp2d1, tmp3d1, tmp1d2[2], tmp2d2[2],tmpd3[3];
+ double tmpmd2[DsizeL][2], tmpmd3[DsizeL][3], tmpd4[4], tmp1d4[4];
+ int j, ii, jj, nobj, nplt, nall, din1[DsizeM][2], din2[DsizeM][2];
+ int nkoc, nkoc2, nn,nn1,nn2, nclipL, flg, ntmp;
+ char str1[100], str2[100];
+ objL[0][0]=0; pltL[0][0]=0;
+ dataindexd3(3,data,din1);
+ appendd3(0, din1[1][0],din1[1][1],data,objL);
+ appendd3(0, din1[2][0],din1[2][1],data,pltL);
+ allres[0][0]=0;
+ allres2[0][0]=0;
+ dataindexd3(2,objL,din1);
+ dataindexd3(2,pltL,din2);
+ for(nobj=1; nobj<=length2i(din1); nobj++){
+ tmpmd3[0][0]=0;
+ ntmp=appendd3(2,din1[nobj][0],din1[nobj][1],objL,tmpmd3);
+ nn=ceil((fmax(Mdv,Ndv)*2-1)/(ntmp-1));
+ increasept3(tmpmd3,nn,obj);
+ appendd3(0,ntmp,ntmp,tmpmd3,obj);
+ projcoordcurve(obj,objp);
+ obj2d[0][0]=0;
+ for(j=1; j<=length3(objp); j++){
+ push2(objp[j][0],objp[j][1],obj2d);
+ }
+ clipL[0][0]=0; nclipL=0;
+ for(nplt=1; nplt<=length2i(din2); nplt++){
+ tmpmd3[0][0]=0;
+ ntmp=appendd3(2,din2[nplt][0],din2[nplt][1],pltL,tmpmd3);
+ nn=ceil((fmax(Mdv,Ndv)*2-1)/(ntmp-1));
+ increasept3(tmpmd3,nn,plt);
+ appendd3(0,ntmp,ntmp,tmpmd3,plt);
+ projcoordcurve(plt,pltp);
+ plt2d[0][0]=0;
+ for(j=1; j<=length3(pltp); j++){
+ push2(pltp[j][0],pltp[j][1],plt2d);
+ }
+ intersectcurvesPp(obj2d,plt2d,20,koc2d6); //180324from
+ nkoc2=length6(koc2d6);
+ koc2[0][0]=0;
+ for(ii=1;ii<=nkoc2;ii++){
+ pull6(ii,koc2d6,tmpd6);
+ push4(tmpd6[0],tmpd6[1],tmpd6[2],tmpd6[3],koc2);
+ }//180324to
+ if(nkoc2>0){
+ koc[0][0]=0; nkoc=0;
+ pull2(1,plt2d,pta);
+ pull2(length2(plt2d),plt2d,ptb);
+ for(j=1; j<=nkoc2; j++){
+ pt[0]=koc2[j][0]; pt[1]=koc2[j][1];
+ nearestptpt(pt, plt2d, tmpd4);
+ koc2[j][3]=tmpd4[2];
+ pt[0]=tmpd4[0]; pt[1]=tmpd4[1];
+ nearestptpt(pt, obj2d, tmpd4);
+ koc2[j][0]=tmpd4[0]; koc2[j][1]=tmpd4[1];
+ koc2[j][2]=tmpd4[2];
+ ds[j]=tmpd4[3];
+ }
+ pull4(1,koc2,tmp1d4);
+ dmin=ds[1];
+ for(j=2; j<=nkoc2; j++){
+ if(fabs(koc2[j][2]-tmp1d4[2])<4){
+ if(ds[j]<dmin){
+ pull4(j,koc2,tmp1d4);
+ dmin=ds[j];
+ }
+ }
+ else{
+ addptd4(koc,tmp1d4);
+ pull4(j,koc2,tmp1d4);
+ dmin=ds[j];
+ }
+ }
+ nkoc=addptd4(koc,tmp1d4);
+/*
+ if(tmpd4[3]<2*eps1){
+ if((dist(2,pta,pt)<eps2)&&(tmpd4[2]<0.1*length2(plt2d))){
+ continue;
+ }
+ if((dist(2,ptb,pt)<eps2)&&(tmpd4[2]>0.9*length2(plt2d))){
+ continue;
+ }
+ pull4(j,koc2,tmpd4);
+ nkoc=addptd4(koc,tmpd4);
+ }
+ }
+*/
+ for(jj=1; jj<=nkoc; jj++){
+ pt[0]=koc[jj][0]; pt[1]=koc[jj][1];
+ pta[0]=plt2d[1][0]; pta[1]=plt2d[1][1];
+ ptb[0]=plt2d[length2(plt2d)][0]; ptb[1]=plt2d[length2(plt2d)][1];
+ if((dist(2,pt,pta)<eps2)&&(koc[jj][3]<0.3*length2(plt2d))){
+ continue;
+ }
+ if((dist(2,pt,ptb)<eps2)&&(koc[jj][3]>0.7*length2(plt2d))){
+ continue;
+ }
+ nn1=floor(koc[jj][2]);
+ nn2=koc[jj][3];
+ pta[0]=objp[nn1][0]; pta[1]=objp[nn1][1];
+ za=objp[nn1][2];
+ ptb[0]=objp[nn1+1][0]; ptb[1]=objp[nn1+1][1];
+ zb=objp[nn1+1][2];
+ if(dist(2,pta,ptb)<eps1){
+ continue;
+ }
+ t1=dist(2,pta,pt)/dist(2,pta,ptb);
+ z1=(1-t1)*za+t1*zb;
+ pta[0]=pltp[nn2][0]; pta[1]=pltp[nn2][1];
+ za=tmpmd3[nn2][2];
+ ptb[0]=pltp[nn2+1][0]; ptb[1]=pltp[nn2+1][1];
+ zb=tmpmd3[nn2+1][2];
+ if(dist(2,pta,ptb)<Eps){
+ continue;
+ }
+ t2=dist(2,pta,pt)/dist(2,pta,ptb);
+ z2=(1-t2)*za+t2*zb;
+ if(z1<z2-eps1){
+ if(nclipL==0){
+ tmpd1=1;
+ }
+ }
+ else{
+ tmpd1=Inf;
+ for(j=1; j<=nclipL; j++){
+ tmp2d1=pow(clipL[j][0]-pt[0],2.0);
+ tmp2d1=tmp2d1+pow(clipL[j][1]-pt[1],2.0);
+ tmpd1=fmin(tmpd1,tmp2d1);
+ }
+ }
+ if(tmpd1>pow(Eps,2.0)){
+ pts1[0][0]=0;
+ pointoncurve(nn1,obj2d,Eps,tmp1d2);
+ addptd2(pts1,tmp1d2);
+ pointoncurve(nn1+1,obj2d,Eps,tmp1d2);
+ addptd2(pts1,tmp1d2);
+ tmp1d2[0]=pts1[2][0]-pts1[1][0];
+ tmp1d2[1]=pts1[2][1]-pts1[1][1];
+ tmp2d2[0]=ptb[0]-pta[0];
+ tmp2d2[1]=ptb[1]-pta[1];
+ tmp3d1=dotprod(2,tmp1d2,tmp2d2);
+ origin[0]=0; origin[1]=0;
+ tmp3d1=tmp3d1/dist(2,tmp1d2,origin)/dist(2,tmp2d2,origin);
+ tmpd1=1-0.5*pow(tmp3d1,2.0);
+ r0=0.075*r00;
+ nclipL=push5(pt[0],pt[1], nn1,t1,r0/tmpd1, clipL);
+ }
+ }
+ }
+ }
+ kukanL[0][0]=0;
+ te=length3(obj);
+ push2(1.0,te, kukanL);
+ for(ii=1; ii<=nclipL; ii++){
+ pt[0]=clipL[ii][0]; pt[1]=clipL[ii][1];
+ nn=clipL[ii][2];
+ tt=nn+clipL[ii][3];
+ rr=clipL[ii][4];
+ flg=0;
+ for(jj=nn; jj>=1; jj--){
+ pointoncurve(jj,obj2d,Eps,ptq);
+ if(dist(2,pt,ptq)<rr){
+ continue;
+ }
+ flg=jj;
+ break;
+ }
+ if(flg==0){
+ t1=1;
+ }
+ else{
+ t1=flg; t2=tt;
+ hh=t2-t1;
+ for(j=1; j<=10; j++){
+ hh=hh*0.5;
+ pointoncurve(t1+hh,obj2d,Eps,ptq);
+ if(dist(2,pt,ptq)<rr){
+ t2=t2-hh;
+ }
+ else{
+ t1=t1+hh;
+ }
+ }
+ }
+ ku[0]=t1;
+ flg=0;
+ for(jj=nn+1; jj<=te; jj++){
+ pointoncurve(jj,obj2d,Eps,ptq);
+ if(dist(2,pt,ptq)<rr){
+ continue;
+ }
+ flg=jj;
+ break;
+ }
+ if(flg==0){
+ t2=te;
+ }
+ else{
+ t1=tt; t2=flg;
+ hh=t2-t1;
+ for(j=1; j<=10; j++){
+ hh=hh*0.5;
+ pointoncurve(t1+hh,obj2d,Eps,ptq);
+ if(dist(2,pt,ptq)<rr){
+ t1=t1+hh;
+ }
+ else{
+ t2=t2-hh;
+ }
+ }
+ }
+ ku[1]=t2;
+ ntmp=kukannozoku(ku,kukanL,tmpmd2);
+ kukanL[0][0]=0;
+ appendd2(0,1,ntmp,tmpmd2,kukanL);
+ }
+ for(jj=1; jj<=length2(kukanL); jj++){
+ tmp1d2[0]=kukanL[jj][0]; tmp1d2[1]=kukanL[jj][1];
+ t1=kukanL[jj][0]; nn1=floor(t1);
+ t2=kukanL[jj][1]; nn2=floor(t2);
+ ptL2[0][0]=0;
+ ptL[0][0]=0;
+ if(t1-nn1<1-Eps){
+ pointoncurve(t1,obj2d,Eps,tmp1d2);
+ addptd2(ptL2,tmp1d2);
+ invparapt(t1, obj2d, obj, tmpd3);
+ addptd3(ptL,tmpd3);
+ }
+ for(j=nn1+1; j<=nn2; j++){
+ pointoncurve(j,obj2d,Eps,tmp1d2);
+ addptd2(ptL2,tmp1d2);
+ invparapt(j, obj2d, obj, tmpd3);
+ addptd3(ptL,tmpd3);
+ }
+ if(t2-nn2>Eps){
+ pointoncurve(t2,obj2d,Eps,tmp1d2);
+ addptd2(ptL2,tmp1d2);
+ invparapt(t2, obj2d, obj, tmpd3);
+ addptd3(ptL,tmpd3);
+ }
+ if(length2(ptL2)>1){
+ appendd2(2,1,length2(ptL2),ptL2,allres2);
+ appendd3(2,1,length3(ptL),ptL,allres);
+ }
+ }
+ }
+ return length3(allres);
+}
+
+void readoutdata3(const char *fname, const char *var, double data[][3]){
+ double x,y,z;
+ float xx;
+ char dstrorg[256];
+ dstrorg[0]='\0';
+ char dstr[256];
+ dstr[0]='\0';
+ char str[10];
+ str[0]='\0';
+ char strtmp[30];
+ char tmp[10];
+ tmp[0]='\0';
+ int linectr=0, start=0,ii,jj,nn,nctr;
+ FILE *fp;
+ fp=fopen(fname,"r");
+ if(fp==NULL){
+ printf("file not found\n");
+ return;
+ }
+ data[0][0]=0;
+ nn=strlen(var);
+ while( !feof(fp)){
+ fgets(dstr,250,fp);
+ linectr++;
+ jj=strlen(dstr);
+ if(jj>1){
+ dstr[jj-3]='\0';
+ }else{
+ dstr[0]='\0';
+ }
+ if(strncmp(dstr,var,nn)==0){
+ start=linectr;
+ }else{
+ if(start==0){
+ continue;
+ }
+ }
+ if(linectr==start){
+ continue;
+ }
+ if(strncmp(dstr,"sta",3)==0){
+ if(linectr>start+1){
+ add3(data,Inf,2,0);
+ }
+ continue;
+ }
+ if(strncmp(dstr,"end",3)==0){
+ continue;
+ }
+ if(strncmp(dstr,"[",1)!=0){
+ break;
+ }
+ str[0]='\0';
+ nctr=0;
+ for(jj=2;jj<250;jj++){
+ tmp[0]='\0'; sprintf(tmp,"%c",dstr[jj]);
+ if(strncmp(tmp,"/",1)==0){
+ break;
+ }
+ if(strncmp(tmp," ",1)==0){
+ continue;
+ }
+ if(strncmp(tmp,",",1)==0){
+ nctr++;
+ if(nctr==1){
+ x=atof(str); str[0]='\0';
+ continue;
+ }
+ if(nctr==2){
+ y=atof(str);str[0]='\0';
+ continue;
+ }
+ }
+ if(strncmp(tmp,"]",1)==0){
+ z=atof(str);str[0]='\0';
+ add3(data,x,y,z);
+ nctr=0;
+ jj++;
+ tmp[0]='\0'; sprintf(tmp,"%c",dstr[jj]);
+ if(strncmp(tmp,",",1)==0){
+ jj++;
+ }
+ continue;
+ }
+ strtmp[0]='\0';
+ sprintf(strtmp,"%s%s",str,tmp);
+ str[0]='\0';
+ for(ii=0;ii<20;ii++){
+ str[ii]=strtmp[ii];
+ if(strtmp[ii]=='\0'){
+ break;
+ }
+ }
+ }
+ }
+ fclose(fp);
+}
+
diff --git a/graphics/ketcindy/ketcindyfolder/scripts/ketlibC/surflibhead.h b/graphics/ketcindy/ketcindyfolder/scripts/ketlibC/surflibhead.h
new file mode 100644
index 0000000000..cc10b300d7
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/scripts/ketlibC/surflibhead.h
@@ -0,0 +1,56 @@
+double Xval[DsizeS], Yval[DsizeS], Zval[DsizeS][DsizeS];
+
+//////////////////////
+short Ch=1;
+/////////////////////
+
+//double Implicitdata[DsizeL][2]; //180320
+double Cuspsplitpt[DsizeL][2];
+double Cusppt[DsizeM][2];
+double Otherpartition [DsizeM];
+//double Partitionpt[DsizeM][2];
+double Cuspdata[DsizeM];
+double Wirept[DsizeM][3];
+double Hiddendata[DsizeL][3];
+double Borderpt[DsizeM][2];
+double Borderhiddendata[DsizeL][3];
+double Surf[DsizeL][3];
+double Crvdata[DsizeL][3];
+//double Wiredata[DsizeLL][3];
+
+int output3(short head,const char *wa,const char *var, const char *fname,double out[][3]);
+int output3h(const char *wa,const char *var, const char *varh, const char *fname, double out[][3]);
+void outputend(const char *fname);
+int writedataC(const char *fname, double out[][3]);
+int readdataC(const char *fname, double data[][3]);
+void readoutdata3(const char *fname, const char *var, double data[][3]);
+void parapt(double pt3[3],double pt2[2]);
+double zparapt(double p[3]);
+int projpara(double p3[][3], double p2[][2]);
+double invparapt(double ph, double fh[][2], double fk[][3],double out[3]);
+void surfcurve(short ch,double crv[][2], double pdata[][3]);
+double evlpfun(short ch, double u, double v);
+int envelopedata(short ch, double out[][2]);
+int cuspsplitpara(short ch,double pdata[][2], double outkL[][3]);
+int makexybdy(short ch,double ehL[][2]);
+void partitionseg(double fig[][2],double gL[][2], int ns, double parL[]);
+double funpthiddenQ(short ch,double u, double v,double pa[3]);
+int pthiddenQ(short ch,double pta[3], int uveq,double out[4]);
+int nohiddenpara2(short ch,double paL[], double fk[][3], int uveq, double figkL[][3]);
+void borderparadata(short ch,double fkL[][3], double fsL[][3]);
+int dropnumlistcrv3(double qd[][3], double eps1, int out[]);
+void sfbdparadata(short ch,double outd3[][3]);
+double funmeet(short ch,double u, double v,double pa[3], double vec[3]);
+void meetpoints(short ch,double pta[3], double ptb[3], int uveq,double out[][3]);
+void crvsfparadata(short ch,double fkL[][3], double fbdkL[][3], int sepflg, double out[][3]);
+void crv3onsfparadata(short ch,double fk[][3], double fbdyd3[][3], double out[][3]);
+void crv2onsfparadata(short ch,double fh[][2], double fbdyd3[][3], double out[][3]);
+void intersectcrvsf(const char *wa, short chfd,double crv[][3],const char *fname);
+void wireparadata(short ch,double bdyk[][3], double udata[], double vdata[],const char *fname,const char *fnameh);
+void sfcutparadata(short chfd, short ncut, double fbdy3[][3],const char *fname,const char *fnameh);
+int projcoordcurve(double curve[][3], double out[][3]);
+int kukannozoku(double jokyo[2], double kukanL[][2], double res[][2]);
+int skeletondata3(double data[][3], double r00, double eps1, double eps2,
+ double allres[][3]);
+
+double cutfun(short chfd,short chcut,double u, double v);
diff --git a/graphics/ketcindy/ketcindyfolder/scripts/ketoutset.txt b/graphics/ketcindy/ketcindyfolder/scripts/ketoutset.txt
new file mode 100644
index 0000000000..5fb93561f5
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/scripts/ketoutset.txt
@@ -0,0 +1,48 @@
+if(!isstring(PathThead),
+ PathThead="";
+);
+PathT=PathThead+"uplatex";
+if(iswindows(),
+ PathS="C:\Program Files\scilab-6.0.0\bin\scilex";
+ PathC="C:\MinGW\bin\gcc.exe";
+ Pathpdf="C:\Program Files\SumatraPDF\SumatraPDF.exe";
+ PathR="C:\Program Files\R\R-3.4.2\bin";
+ PathA="C:\Program Files\asir\bin\asir";
+ PathM="C:\maxima-5.37.3\bin\maxima.bat";
+ PathV3="C:\Program Files\VCG\MeshLab\meshlab";
+ PathF="C:\cygwin\bin";
+ PathAd="C:\Program Files\Adobe\Acrobat Reader DC\Reader\AcroRd32.exe";
+);
+if(ismacosx(),
+ PathS="/Applications/scilab-6.0.0.app/Contents/MacOS/bin/scilab";
+ Pathpdf="preview";
+ PathC="gcc";
+ PathR="/Library/Frameworks/R.framework/Versions/Current/Resources/bin/R";
+ PathA="/Applications/cfep.app/OpenXM/rc/asir";
+ PathM="/Applications/Maxima.app/Contents/Resources/maxima.sh";
+ PathV3="/Applications/meshlab.app/Contents/MacOS/MeshLab";
+ PathF="/Applications/FriCAS.app/Contents/Resources/bin/fricas";
+ PathAd="/Applications/Adobe Acrobat Reader DC.app/Contents/MacOS/AdobeReader";
+ Mackc="sh";
+);
+if(islinux(),
+ PathS="scilab";
+ Pathpdf="evince";
+ PathC="gcc";
+ PathR="R";
+ PathA="asir";
+ PathM="maxima";
+ PathV3="Meshlab";
+ PathF="fricas";
+ PathAd="acroread";
+);
+
+if(indexof(PathT,"platex")>0,
+ Helplist(["+","+3d","+mv"],"helpJ");
+,
+ Helplist(["+","+3d","+mv"],"helpE");
+);
+
+setdirectory(Dircdy);
+
+
diff --git a/graphics/ketcindy/ketcindyfolder/scripts/setketcindy.txt b/graphics/ketcindy/ketcindyfolder/scripts/setketcindy.txt
new file mode 100755
index 0000000000..293d1b7496
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/scripts/setketcindy.txt
@@ -0,0 +1,13 @@
+// e:2018.02.26
+Dirlib=Dirhead+pathsep()+"ketlib";
+Libname=Dirlib+pathsep()+"ketpiccurrent";
+DirlibC=Dirhead+pathsep()+"ketlibC";
+setdirectory(Dirlib);
+import("ketcindylibbasic1r.cs");
+import("ketcindylibbasic2r.cs");
+import("ketcindylibbasic3r.cs");
+import("ketcindyliboutr.cs");
+import("ketcindylib3dr.cs");
+import("ketcindylibmvr.cs");
+
+setdirectory(Dirhead);
diff --git a/graphics/ketcindy/ketcindyfolder/style/ketlayer.sty b/graphics/ketcindy/ketcindyfolder/style/ketlayer.sty
new file mode 100755
index 0000000000..4581724224
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/style/ketlayer.sty
@@ -0,0 +1,2836 @@
+%Copyright (C) 2014 Setsuo Takato, KETpic developer team
+%*
+%* This program is free software: you can redistribute it and/or modify
+%* it under the terms of the GNU General Public License as published by
+%* the Free Software Foundation; either version 3 of the License, or
+%* (at your option) any later version.
+%*
+%* This program is distributed in the hope that it will be useful,
+%* but WITHOUT ANY WARRANTY; without even the implied warranty of
+%* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+%* GNU General Public License for more details.
+%*
+%* You should have received a copy of the GNU General Public License
+%* along with this program. If not, see <http://www.gnu.org/licenses/>
+%%% ketlayer.sty 2017-1-13 12:53
+%%% ketlayer170109.sce 2017-1-13 12:53
+% 2017.01.09%
+\newlength{\layercurrentunit}%
+\newcommand{\shadebox}[7][0]{%
+\def\tmpcontents{%
+{\unitlength=1mm%
+\begin{picture}%
+( 100.00000, 100.00000)( 0.00000, 0.00000)%
+\special{pn 8}%
+%
+{\color{#6}%
+\special{pa 0 0}\special{pa 3937 0}\special{pa 3937 -3937}\special{pa 0 -3937}\special{pa 0 0}%
+\special{sh 1}\special{ip}%
+}%
+\end{picture}}%%
+}%
+%
+{%
+\ifnum %
+#4<10 %
+%
+{%
+\ifnum %
+#5<10 %
+\settowidth{\Width}{{\color{#7}\scalebox{0.0#4}[0.0#5]{\tmpcontents}}}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{{\color{#7}\scalebox{0.0#4}[0.0#5]{\tmpcontents}}}\settodepth{\Depth}{{\color{#7}\scalebox{0.0#4}[0.0#5]{\tmpcontents}}}\setlength{\Height}{-\Height}%
+\put(#2,-#3){\hspace*{\Width}\raisebox{\Height}{{\color{#7}\scalebox{0.0#4}[0.0#5]{\tmpcontents}}}}%
+%
+\else%
+\settowidth{\Width}{{\color{#7}\scalebox{0.0#4}[0.#5]{\tmpcontents}}}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{{\color{#7}\scalebox{0.0#4}[0.#5]{\tmpcontents}}}\settodepth{\Depth}{{\color{#7}\scalebox{0.0#4}[0.#5]{\tmpcontents}}}\setlength{\Height}{-\Height}%
+\put(#2,-#3){\hspace*{\Width}\raisebox{\Height}{{\color{#7}\scalebox{0.0#4}[0.#5]{\tmpcontents}}}}%
+%
+\fi%
+}%
+%
+\else%
+%
+{%
+\ifnum %
+#5<10 %
+\settowidth{\Width}{{\color{#7}\scalebox{0.#4}[0.0#5]{\tmpcontents}}}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{{\color{#7}\scalebox{0.#4}[0.0#5]{\tmpcontents}}}\settodepth{\Depth}{{\color{#7}\scalebox{0.#4}[0.0#5]{\tmpcontents}}}\setlength{\Height}{-\Height}%
+\put(#2,-#3){\hspace*{\Width}\raisebox{\Height}{{\color{#7}\scalebox{0.#4}[0.0#5]{\tmpcontents}}}}%
+%
+\else%
+\settowidth{\Width}{{\color{#7}\scalebox{0.#4}[0.#5]{\tmpcontents}}}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{{\color{#7}\scalebox{0.#4}[0.#5]{\tmpcontents}}}\settodepth{\Depth}{{\color{#7}\scalebox{0.#4}[0.#5]{\tmpcontents}}}\setlength{\Height}{-\Height}%
+\put(#2,-#3){\hspace*{\Width}\raisebox{\Height}{{\color{#7}\scalebox{0.#4}[0.#5]{\tmpcontents}}}}%
+%
+\fi%
+}%
+%
+\fi%
+}%
+%
+{%
+\ifnum %
+#1>0 %
+\boxframese{#2}{#3}{#4}{#5}{}%
+%
+\fi%
+}%
+%
+}%
+\newcommand{\shadeboxse}[7][0]{%
+\shadebox[#1]{#2}{#3}{#4}{#5}{#6}{#7}%
+%
+}%
+\newcommand{\shadeboxc}[7][0]{%
+\setcounter{ketpicctrd}{-#4}%
+\divide\value{ketpicctrd} by 2%
+\addtocounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{-#4}%
+\divide\value{ketpicctre} by 2%
+\addtocounter{ketpicctre}{#3}%
+\shadebox[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}{#6}{#7}%
+%
+}%
+\newcommand{\shadeboxe}[7][0]{%
+\setcounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{-#4}%
+\divide\value{ketpicctre} by 2%
+\addtocounter{ketpicctre}{#3}%
+\shadebox[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}{#6}{#7}%
+%
+}%
+\newcommand{\shadeboxw}[7][0]{%
+\setcounter{ketpicctrd}{-#4}%
+\addtocounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{-#4}%
+\divide\value{ketpicctre} by 2%
+\addtocounter{ketpicctre}{#3}%
+\shadebox[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}{#6}{#7}%
+%
+}%
+\newcommand{\shadeboxn}[7][0]{%
+\setcounter{ketpicctrd}{-#4}%
+\divide\value{ketpicctrd} by 2%
+\addtocounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{#3}%
+\addtocounter{ketpicctre}{-#4}%
+\shadebox[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}{#6}{#7}%
+%
+}%
+\newcommand{\shadeboxs}[7][0]{%
+\setcounter{ketpicctrd}{-#4}%
+\divide\value{ketpicctrd} by 2%
+\addtocounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{#3}%
+\shadebox[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}{#6}{#7}%
+%
+}%
+\newcommand{\shadeboxnw}[7][0]{%
+\setcounter{ketpicctrd}{-#4}%
+\addtocounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{#3}%
+\addtocounter{ketpicctre}{-#4}%
+\shadebox[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}{#6}{#7}%
+%
+}%
+\newcommand{\shadeboxne}[7][0]{%
+\setcounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{#3}%
+\addtocounter{ketpicctre}{-#4}%
+\shadebox[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}{#6}{#7}%
+%
+}%
+\newcommand{\shadeboxsw}[7][0]{%
+\setcounter{ketpicctrd}{-#4}%
+\addtocounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{#3}%
+\shadebox[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}{#6}{#7}%
+%
+}%
+\newcommand{\eraser}[5][0]{%
+\def\tmpcontents{%
+{\unitlength=1mm%
+\begin{picture}%
+( 100.00000, 100.00000)( 0.00000, 0.00000)%
+\special{pn 8}%
+%
+\special{pa 0 0}\special{pa 3937 0}\special{pa 3937 -3937}\special{pa 0 -3937}\special{pa 0 0}%
+\special{sh 0}\special{ip}%
+\end{picture}}%%
+}%
+%
+{%
+\ifnum %
+#4<10 %
+%
+{%
+\ifnum %
+#5<10 %
+\settowidth{\Width}{\scalebox{0.0#4}[0.0#5]{\tmpcontents}}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{\scalebox{0.0#4}[0.0#5]{\tmpcontents}}\settodepth{\Depth}{\scalebox{0.0#4}[0.0#5]{\tmpcontents}}\setlength{\Height}{-\Height}%
+\put(#2,-#3){\hspace*{\Width}\raisebox{\Height}{\scalebox{0.0#4}[0.0#5]{\tmpcontents}}}%
+%
+\else%
+\settowidth{\Width}{\scalebox{0.0#4}[0.#5]{\tmpcontents}}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{\scalebox{0.0#4}[0.#5]{\tmpcontents}}\settodepth{\Depth}{\scalebox{0.0#4}[0.#5]{\tmpcontents}}\setlength{\Height}{-\Height}%
+\put(#2,-#3){\hspace*{\Width}\raisebox{\Height}{\scalebox{0.0#4}[0.#5]{\tmpcontents}}}%
+%
+\fi%
+}%
+%
+\else%
+%
+{%
+\ifnum %
+#5<10 %
+\settowidth{\Width}{\scalebox{0.#4}[0.0#5]{\tmpcontents}}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{\scalebox{0.#4}[0.0#5]{\tmpcontents}}\settodepth{\Depth}{\scalebox{0.#4}[0.0#5]{\tmpcontents}}\setlength{\Height}{-\Height}%
+\put(#2,-#3){\hspace*{\Width}\raisebox{\Height}{\scalebox{0.#4}[0.0#5]{\tmpcontents}}}%
+%
+\else%
+\settowidth{\Width}{\scalebox{0.#4}[0.#5]{\tmpcontents}}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{\scalebox{0.#4}[0.#5]{\tmpcontents}}\settodepth{\Depth}{\scalebox{0.#4}[0.#5]{\tmpcontents}}\setlength{\Height}{-\Height}%
+\put(#2,-#3){\hspace*{\Width}\raisebox{\Height}{\scalebox{0.#4}[0.#5]{\tmpcontents}}}%
+%
+\fi%
+}%
+%
+\fi%
+}%
+%
+{%
+\ifnum %
+#1>0 %
+\boxframese{#2}{#3}{#4}{#5}{}%
+%
+\fi%
+}%
+%
+}%
+\newcommand{\eraserse}[5][0]{%
+\eraser[#1]{#2}{#3}{#4}{#5}%
+%
+}%
+\newcommand{\eraserc}[5][0]{%
+\setcounter{ketpicctrd}{-#4}%
+\divide\value{ketpicctrd} by 2%
+\addtocounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{-#4}%
+\divide\value{ketpicctre} by 2%
+\addtocounter{ketpicctre}{#3}%
+\eraser[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}%
+%
+}%
+\newcommand{\erasere}[5][0]{%
+\setcounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{-#4}%
+\divide\value{ketpicctre} by 2%
+\addtocounter{ketpicctre}{#3}%
+\eraser[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}%
+%
+}%
+\newcommand{\eraserw}[5][0]{%
+\setcounter{ketpicctrd}{-#4}%
+\addtocounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{-#4}%
+\divide\value{ketpicctre} by 2%
+\addtocounter{ketpicctre}{#3}%
+\eraser[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}%
+%
+}%
+\newcommand{\erasern}[5][0]{%
+\setcounter{ketpicctrd}{-#4}%
+\divide\value{ketpicctrd} by 2%
+\addtocounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{#3}%
+\addtocounter{ketpicctre}{-#4}%
+\eraser[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}%
+%
+}%
+\newcommand{\erasers}[5][0]{%
+\setcounter{ketpicctrd}{-#4}%
+\divide\value{ketpicctrd} by 2%
+\addtocounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{#3}%
+\eraser[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}%
+%
+}%
+\newcommand{\erasernw}[5][0]{%
+\setcounter{ketpicctrd}{-#4}%
+\addtocounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{#3}%
+\addtocounter{ketpicctre}{-#4}%
+\eraser[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}%
+%
+}%
+\newcommand{\eraserne}[5][0]{%
+\setcounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{#3}%
+\addtocounter{ketpicctre}{-#4}%
+\eraser[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}%
+%
+}%
+\newcommand{\erasersw}[5][0]{%
+\setcounter{ketpicctrd}{-#4}%
+\addtocounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{#3}%
+\eraser[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}%
+%
+}%
+\newcommand{\arrowhead}[4][1]{%
+\def\tmpcontents{%
+{\unitlength=1mm%
+\begin{picture}%
+( 4.00000, 1.23607)( -2.00000, -0.61803)%
+\special{pn 8}%
+%
+\special{pn 4}%
+\special{pa 0 0}\special{pa 79 24}\special{pa 79 -24}\special{pa 0 0}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 0 0}\special{pa 79 24}\special{pa 79 -24}\special{pa 0 0}\special{sh 1}\special{ip}%
+\end{picture}}%%
+}%
+\settowidth{\Width}{\rotatebox[origin=c]{#4}{\scalebox{#1}{\tmpcontents}}}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{\rotatebox[origin=c]{#4}{\scalebox{#1}{\tmpcontents}}}\settodepth{\Depth}{\rotatebox[origin=c]{#4}{\scalebox{#1}{\tmpcontents}}}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(#2,-#3){\hspace*{\Width}\raisebox{\Height}{\rotatebox[origin=c]{#4}{\scalebox{#1}{\tmpcontents}}}}%
+%
+}%
+\newcommand{\lineseg}[5][12]{%
+\def\tmpcontents{%
+\setcounter{ketpicctra}{0}%
+\setcounter{ketpicctra}{1}%
+\addtocounter{ketpicctra}{-1}%
+%
+{%
+\loop%
+\addtocounter{ketpicctra}{1}%
+{\unitlength=1mm%
+\begin{picture}%
+( 1.00000, 0.00200)( 0.00000, -0.00100)%
+\special{pn 8}%
+%
+\special{pn #1}%
+\special{pa 0 0}\special{pa 39 0}%
+\special{fp}%
+\end{picture}}%%
+\ifnum\theketpicctra<#4%
+\repeat%
+}%
+%
+}%
+%
+{%
+\ifnum %
+#5>0 %
+%
+{%
+\ifnum %
+#5<90 %
+\settowidth{\Width}{\rotatebox[origin=c]{#5}{\tmpcontents}}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{\rotatebox[origin=c]{#5}{\tmpcontents}}\settodepth{\Depth}{\rotatebox[origin=c]{#5}{\tmpcontents}}\setlength{\Height}{\Depth}%
+\put(#2,-#3){\hspace*{\Width}\raisebox{\Height}{\rotatebox[origin=c]{#5}{\tmpcontents}}}%
+%
+\else%
+\settowidth{\Width}{\rotatebox[origin=c]{#5}{\tmpcontents}}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{\rotatebox[origin=c]{#5}{\tmpcontents}}\settodepth{\Depth}{\rotatebox[origin=c]{#5}{\tmpcontents}}\setlength{\Height}{\Depth}%
+\put(#2,-#3){\hspace*{\Width}\raisebox{\Height}{\rotatebox[origin=c]{#5}{\tmpcontents}}}%
+%
+\fi%
+}%
+%
+\else%
+%
+{%
+\ifnum %
+#5>-90 %
+\settowidth{\Width}{\rotatebox[origin=c]{#5}{\tmpcontents}}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{\rotatebox[origin=c]{#5}{\tmpcontents}}\settodepth{\Depth}{\rotatebox[origin=c]{#5}{\tmpcontents}}\setlength{\Height}{-\Height}%
+\put(#2,-#3){\hspace*{\Width}\raisebox{\Height}{\rotatebox[origin=c]{#5}{\tmpcontents}}}%
+%
+\else%
+\settowidth{\Width}{\rotatebox[origin=c]{#5}{\tmpcontents}}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{\rotatebox[origin=c]{#5}{\tmpcontents}}\settodepth{\Depth}{\rotatebox[origin=c]{#5}{\tmpcontents}}\setlength{\Height}{-\Height}%
+\put(#2,-#3){\hspace*{\Width}\raisebox{\Height}{\rotatebox[origin=c]{#5}{\tmpcontents}}}%
+%
+\fi%
+}%
+%
+\fi%
+}%
+%
+}%
+\newcommand{\dashlineseg}[5][12]{%
+\def\tmpcontents{%
+\setcounter{ketpicctra}{0}%
+\setcounter{ketpicctra}{1}%
+\addtocounter{ketpicctra}{-1}%
+%
+{%
+\loop%
+\addtocounter{ketpicctra}{1}%
+{\unitlength=1mm%
+\begin{picture}%
+( 1.00000, 0.00200)( 0.00000, -0.00100)%
+\special{pn 8}%
+%
+\special{pn #1}%
+\special{pa 0 0}\special{pa 20 0}%
+\special{fp}%
+\end{picture}}%%
+\ifnum\theketpicctra<#4%
+\repeat%
+}%
+%
+}%
+%
+{%
+\ifnum %
+#5>0 %
+%
+{%
+\ifnum %
+#5<90 %
+\settowidth{\Width}{\rotatebox[origin=c]{#5}{\tmpcontents}}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{\rotatebox[origin=c]{#5}{\tmpcontents}}\settodepth{\Depth}{\rotatebox[origin=c]{#5}{\tmpcontents}}\setlength{\Height}{\Depth}%
+\put(#2,-#3){\hspace*{\Width}\raisebox{\Height}{\rotatebox[origin=c]{#5}{\tmpcontents}}}%
+%
+\else%
+\settowidth{\Width}{\rotatebox[origin=c]{#5}{\tmpcontents}}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{\rotatebox[origin=c]{#5}{\tmpcontents}}\settodepth{\Depth}{\rotatebox[origin=c]{#5}{\tmpcontents}}\setlength{\Height}{\Depth}%
+\put(#2,-#3){\hspace*{\Width}\raisebox{\Height}{\rotatebox[origin=c]{#5}{\tmpcontents}}}%
+%
+\fi%
+}%
+%
+\else%
+%
+{%
+\ifnum %
+#5>-90 %
+\settowidth{\Width}{\rotatebox[origin=c]{#5}{\tmpcontents}}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{\rotatebox[origin=c]{#5}{\tmpcontents}}\settodepth{\Depth}{\rotatebox[origin=c]{#5}{\tmpcontents}}\setlength{\Height}{-\Height}%
+\put(#2,-#3){\hspace*{\Width}\raisebox{\Height}{\rotatebox[origin=c]{#5}{\tmpcontents}}}%
+%
+\else%
+\settowidth{\Width}{\rotatebox[origin=c]{#5}{\tmpcontents}}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{\rotatebox[origin=c]{#5}{\tmpcontents}}\settodepth{\Depth}{\rotatebox[origin=c]{#5}{\tmpcontents}}\setlength{\Height}{-\Height}%
+\put(#2,-#3){\hspace*{\Width}\raisebox{\Height}{\rotatebox[origin=c]{#5}{\tmpcontents}}}%
+%
+\fi%
+}%
+%
+\fi%
+}%
+%
+}%
+\def\arrowline#1#2#3#4{%
+\lineseg[12]{#1}{#2}{#3}{#4}%
+\arrowhead{#1}{#2}{#4}%
+%
+}%
+\newcommand{\arrowlineseg}[5][12]{%
+\lineseg[#1]{#2}{#3}{#4}{#5}%
+\arrowhead{#2}{#3}{#5}%
+%
+}%
+\newcommand{\conversion}[1]{%
+\setcounter{ketpicctra}{#1}%
+\multiply\value{ketpicctra} by 3937%
+\divide\value{ketpicctra} by 100%
+\{\theketpicctra\}%
+%
+}%
+\def\drwline#1#2#3#4{%
+\special{pn 8}%
+\special{pa #1 #2}\special{pa #3 #4}%
+\special{fp}%
+%
+}%
+\newcommand{\dispgrid}[2]{%
+\def\tmpcontents{%
+{\unitlength=1mm%
+\begin{picture}%
+( 10.00000, 0.02000)( 0.00000, -0.01000)%
+\special{pn 8}%
+%
+\special{pn 12}%
+\special{pa -6 0}\special{pa 6 0}\special{fp}\special{pa 33 0}\special{pa 45 0}\special{fp}%
+\special{pa 73 0}\special{pa 85 0}\special{fp}\special{pa 112 0}\special{pa 124 0}\special{fp}%
+\special{pa 151 0}\special{pa 163 0}\special{fp}\special{pa 191 0}\special{pa 203 0}\special{fp}%
+\special{pa 230 0}\special{pa 242 0}\special{fp}\special{pa 270 0}\special{pa 282 0}\special{fp}%
+\special{pa 309 0}\special{pa 321 0}\special{fp}\special{pa 348 0}\special{pa 360 0}\special{fp}%
+\special{pa 388 0}\special{pa 400 0}\special{fp}\special{pn 8}%
+\end{picture}}%%
+}%
+\setcounter{ketpicctre}{#2}%
+\divide\value{ketpicctre} by 10%
+\setcounter{ketpicctrf}{#1}%
+\divide\value{ketpicctrf} by 10%
+\addtocounter{ketpicctrf}{-1}%
+\setcounter{ketpicctra}{0}%
+\setcounter{ketpicctra}{0}%
+\addtocounter{ketpicctra}{-1}%
+%
+{%
+\loop%
+\addtocounter{ketpicctra}{1}%
+\setcounter{ketpicctrd}{0}%
+\addtocounter{ketpicctrd}{-\value{ketpicctra}}%
+\multiply\value{ketpicctrd} by 10%
+\setcounter{ketpicctrc}{0}%
+\setcounter{ketpicctrb}{0}%
+\setcounter{ketpicctrb}{0}%
+\addtocounter{ketpicctrb}{-1}%
+%
+{%
+\loop%
+\addtocounter{ketpicctrb}{1}%
+\settowidth{\Width}{\tmpcontents}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{\tmpcontents}\settodepth{\Depth}{\tmpcontents}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(\theketpicctrc,\theketpicctrd){\hspace*{\Width}\raisebox{\Height}{\tmpcontents}}%
+\addtocounter{ketpicctrc}{10}%
+%
+\ifnum\theketpicctrb<\theketpicctrf%
+\repeat%
+}%
+\setcounter{ketpicctrg}{0}%
+\addtocounter{ketpicctrg}{-\value{ketpicctrd}}%
+\settowidth{\Width}{\theketpicctrg}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{\theketpicctrg}\settodepth{\Depth}{\theketpicctrg}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-1,\theketpicctrd){\hspace*{\Width}\raisebox{\Height}{\theketpicctrg}}%
+%
+\ifnum\theketpicctra<\theketpicctre%
+\repeat%
+}%
+%
+{%
+\ifnum %
+\theketpicctrd>-#2 %
+\setcounter{ketpicctrc}{0}%
+\setcounter{ketpicctrb}{0}%
+\setcounter{ketpicctrb}{0}%
+\addtocounter{ketpicctrb}{-1}%
+%
+{%
+\loop%
+\addtocounter{ketpicctrb}{1}%
+\settowidth{\Width}{\tmpcontents}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{\tmpcontents}\settodepth{\Depth}{\tmpcontents}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(\theketpicctrc,-#2){\hspace*{\Width}\raisebox{\Height}{\tmpcontents}}%
+\addtocounter{ketpicctrc}{10}%
+%
+\ifnum\theketpicctrb<\theketpicctrf%
+\repeat%
+}%
+%
+\fi%
+}%
+\def\tmpcontents{%
+{\unitlength=1mm%
+\begin{picture}%
+( 0.02000, 10.00000)( -0.01000, 0.00000)%
+\special{pn 8}%
+%
+\special{pn 12}%
+\special{pa 0 6}\special{pa 0 -6}\special{fp}\special{pa 0 -33}\special{pa 0 -45}\special{fp}%
+\special{pa 0 -73}\special{pa 0 -85}\special{fp}\special{pa 0 -112}\special{pa 0 -124}\special{fp}%
+\special{pa 0 -151}\special{pa 0 -163}\special{fp}\special{pa 0 -191}\special{pa 0 -203}\special{fp}%
+\special{pa 0 -230}\special{pa 0 -242}\special{fp}\special{pa 0 -270}\special{pa 0 -282}\special{fp}%
+\special{pa 0 -309}\special{pa 0 -321}\special{fp}\special{pa 0 -348}\special{pa 0 -360}\special{fp}%
+\special{pa 0 -388}\special{pa 0 -400}\special{fp}\special{pn 8}%
+\end{picture}}%%
+}%
+\def\tmpcontentsb{%
+{\unitlength=1mm%
+\begin{picture}%
+( 0.02000, 0.02000)( -0.01000, -0.01000)%
+\special{pn 8}%
+%
+\special{pa 3 -3}\special{pa -3 -3}\special{pa -3 3}\special{pa 3 3}\special{pa 3 -3}%
+\special{sh 1}\special{fp}%
+\end{picture}}%%
+}%
+\setcounter{ketpicctre}{#2}%
+\divide\value{ketpicctre} by 10%
+\addtocounter{ketpicctre}{-1}%
+\setcounter{ketpicctrf}{#1}%
+\divide\value{ketpicctrf} by 10%
+\setcounter{ketpicctra}{0}%
+\setcounter{ketpicctra}{0}%
+\addtocounter{ketpicctra}{-1}%
+%
+{%
+\loop%
+\addtocounter{ketpicctra}{1}%
+\setcounter{ketpicctrd}{0}%
+\addtocounter{ketpicctrd}{\value{ketpicctra}}%
+\multiply\value{ketpicctrd} by 10%
+\setcounter{ketpicctrc}{0}%
+\setcounter{ketpicctrb}{0}%
+\setcounter{ketpicctrb}{0}%
+\addtocounter{ketpicctrb}{-1}%
+%
+{%
+\loop%
+\addtocounter{ketpicctrb}{1}%
+\settowidth{\Width}{\tmpcontents}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{\tmpcontents}\settodepth{\Depth}{\tmpcontents}\setlength{\Height}{-\Height}%
+\put(\theketpicctrd,\theketpicctrc){\hspace*{\Width}\raisebox{\Height}{\tmpcontents}}%
+\addtocounter{ketpicctrc}{-10}%
+%
+\ifnum\theketpicctrb<\theketpicctre%
+\repeat%
+}%
+%
+{%
+\ifnum %
+\theketpicctrc>-#2 %
+\setcounter{ketpicctrb}{0}%
+\setcounter{ketpicctrb}{-#2}%
+\addtocounter{ketpicctrb}{-1}%
+%
+{%
+\loop%
+\addtocounter{ketpicctrb}{1}%
+\settowidth{\Width}{\tmpcontentsb}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{\tmpcontentsb}\settodepth{\Depth}{\tmpcontentsb}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(\theketpicctrd,\theketpicctrb){\hspace*{\Width}\raisebox{\Height}{\tmpcontentsb}}%
+%
+\ifnum\theketpicctrb<\theketpicctrc%
+\repeat%
+}%
+%
+\fi%
+}%
+\setcounter{ketpicctrg}{-#2}%
+\addtocounter{ketpicctrg}{-1}%
+\settowidth{\Width}{\theketpicctrd}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{\theketpicctrd}\settodepth{\Depth}{\theketpicctrd}\setlength{\Height}{-\Height}%
+\put(\theketpicctrd,\theketpicctrg){\hspace*{\Width}\raisebox{\Height}{\theketpicctrd}}%
+%
+\ifnum\theketpicctra<\theketpicctrf%
+\repeat%
+}%
+%
+}%
+\newcommand{\dispgridneg}[2]{%
+\def\tmpcontents{%
+{\unitlength=1mm%
+\begin{picture}%
+( 10.00000, 0.02000)( 0.00000, -0.01000)%
+\special{pn 8}%
+%
+\special{pn 12}%
+\special{pa -6 0}\special{pa 6 0}\special{fp}\special{pa 33 0}\special{pa 45 0}\special{fp}%
+\special{pa 73 0}\special{pa 85 0}\special{fp}\special{pa 112 0}\special{pa 124 0}\special{fp}%
+\special{pa 151 0}\special{pa 163 0}\special{fp}\special{pa 191 0}\special{pa 203 0}\special{fp}%
+\special{pa 230 0}\special{pa 242 0}\special{fp}\special{pa 270 0}\special{pa 282 0}\special{fp}%
+\special{pa 309 0}\special{pa 321 0}\special{fp}\special{pa 348 0}\special{pa 360 0}\special{fp}%
+\special{pa 388 0}\special{pa 400 0}\special{fp}\special{pn 8}%
+\end{picture}}%%
+}%
+\setcounter{ketpicctre}{#2}%
+\multiply\value{ketpicctre} by -1%
+\divide\value{ketpicctre} by 10%
+\setcounter{ketpicctrf}{#1}%
+\divide\value{ketpicctrf} by 10%
+\addtocounter{ketpicctrf}{-1}%
+\setcounter{ketpicctra}{0}%
+\setcounter{ketpicctra}{0}%
+\addtocounter{ketpicctra}{-1}%
+%
+{%
+\loop%
+\addtocounter{ketpicctra}{1}%
+\setcounter{ketpicctrd}{\value{ketpicctra}}%
+\multiply\value{ketpicctrd} by 10%
+\setcounter{ketpicctrc}{0}%
+\setcounter{ketpicctrb}{0}%
+\setcounter{ketpicctrb}{0}%
+\addtocounter{ketpicctrb}{-1}%
+%
+{%
+\loop%
+\addtocounter{ketpicctrb}{1}%
+\settowidth{\Width}{\tmpcontents}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{\tmpcontents}\settodepth{\Depth}{\tmpcontents}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(\theketpicctrc,\theketpicctrd){\hspace*{\Width}\raisebox{\Height}{\tmpcontents}}%
+\addtocounter{ketpicctrc}{10}%
+%
+\ifnum\theketpicctrb<\theketpicctrf%
+\repeat%
+}%
+\setcounter{ketpicctrg}{0}%
+\addtocounter{ketpicctrg}{-\value{ketpicctrd}}%
+\settowidth{\Width}{\theketpicctrg}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{\theketpicctrg}\settodepth{\Depth}{\theketpicctrg}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-1,\theketpicctrd){\hspace*{\Width}\raisebox{\Height}{\theketpicctrg}}%
+%
+\ifnum\theketpicctra<\theketpicctre%
+\repeat%
+}%
+%
+{%
+\ifnum %
+\theketpicctrd>-#2 %
+\setcounter{ketpicctrc}{0}%
+\setcounter{ketpicctrb}{0}%
+\setcounter{ketpicctrb}{0}%
+\addtocounter{ketpicctrb}{-1}%
+%
+{%
+\loop%
+\addtocounter{ketpicctrb}{1}%
+\settowidth{\Width}{\tmpcontents}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{\tmpcontents}\settodepth{\Depth}{\tmpcontents}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(\theketpicctrc,-#2){\hspace*{\Width}\raisebox{\Height}{\tmpcontents}}%
+\addtocounter{ketpicctrc}{10}%
+%
+\ifnum\theketpicctrb<\theketpicctrf%
+\repeat%
+}%
+%
+\fi%
+}%
+\def\tmpcontents{%
+{\unitlength=1mm%
+\begin{picture}%
+( 0.02000, 10.00000)( -0.01000, 0.00000)%
+\special{pn 8}%
+%
+\special{pn 12}%
+\special{pa 0 6}\special{pa 0 -6}\special{fp}\special{pa 0 -33}\special{pa 0 -45}\special{fp}%
+\special{pa 0 -73}\special{pa 0 -85}\special{fp}\special{pa 0 -112}\special{pa 0 -124}\special{fp}%
+\special{pa 0 -151}\special{pa 0 -163}\special{fp}\special{pa 0 -191}\special{pa 0 -203}\special{fp}%
+\special{pa 0 -230}\special{pa 0 -242}\special{fp}\special{pa 0 -270}\special{pa 0 -282}\special{fp}%
+\special{pa 0 -309}\special{pa 0 -321}\special{fp}\special{pa 0 -348}\special{pa 0 -360}\special{fp}%
+\special{pa 0 -388}\special{pa 0 -400}\special{fp}\special{pn 8}%
+\end{picture}}%%
+}%
+\def\tmpcontentsb{%
+{\unitlength=1mm%
+\begin{picture}%
+( 0.02000, 0.02000)( -0.01000, -0.01000)%
+\special{pn 8}%
+%
+\special{pa 3 -3}\special{pa -3 -3}\special{pa -3 3}\special{pa 3 3}\special{pa 3 -3}%
+\special{sh 1}\special{fp}%
+\end{picture}}%%
+}%
+\setcounter{ketpicctre}{#2}%
+\multiply\value{ketpicctre} by -1%
+\divide\value{ketpicctre} by 10%
+\addtocounter{ketpicctre}{-1}%
+\setcounter{ketpicctrf}{#1}%
+\divide\value{ketpicctrf} by 10%
+\setcounter{ketpicctra}{0}%
+\setcounter{ketpicctra}{0}%
+\addtocounter{ketpicctra}{-1}%
+%
+{%
+\loop%
+\addtocounter{ketpicctra}{1}%
+\setcounter{ketpicctrd}{0}%
+\addtocounter{ketpicctrd}{\value{ketpicctra}}%
+\multiply\value{ketpicctrd} by 10%
+\setcounter{ketpicctrc}{0}%
+\setcounter{ketpicctrb}{0}%
+\setcounter{ketpicctrb}{0}%
+\addtocounter{ketpicctrb}{-1}%
+%
+{%
+\loop%
+\addtocounter{ketpicctrb}{1}%
+\settowidth{\Width}{\tmpcontents}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{\tmpcontents}\settodepth{\Depth}{\tmpcontents}\setlength{\Height}{\Depth}%
+\put(\theketpicctrd,\theketpicctrc){\hspace*{\Width}\raisebox{\Height}{\tmpcontents}}%
+\addtocounter{ketpicctrc}{10}%
+%
+\ifnum\theketpicctrb<\theketpicctre%
+\repeat%
+}%
+%
+{%
+\ifnum %
+\theketpicctrc>-#2 %
+\setcounter{ketpicctrb}{0}%
+\setcounter{ketpicctrb}{-#2}%
+\addtocounter{ketpicctrb}{-1}%
+%
+{%
+\loop%
+\addtocounter{ketpicctrb}{1}%
+\settowidth{\Width}{\tmpcontentsb}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{\tmpcontentsb}\settodepth{\Depth}{\tmpcontentsb}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(\theketpicctrd,\theketpicctrb){\hspace*{\Width}\raisebox{\Height}{\tmpcontentsb}}%
+%
+\ifnum\theketpicctrb<\theketpicctrc%
+\repeat%
+}%
+%
+\fi%
+}%
+\setcounter{ketpicctrg}{-#2}%
+\addtocounter{ketpicctrg}{1}%
+\settowidth{\Width}{\theketpicctrd}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{\theketpicctrd}\settodepth{\Depth}{\theketpicctrd}\setlength{\Height}{\Depth}%
+\put(\theketpicctrd,\theketpicctrg){\hspace*{\Width}\raisebox{\Height}{\theketpicctrd}}%
+%
+\ifnum\theketpicctra<\theketpicctrf%
+\repeat%
+}%
+%
+}%
+\newenvironment{layer}[3][0]{%
+\setlength{\layercurrentunit}{\unitlength}%
+\unitlength=1 mm%
+\vspace{-\baselineskip}%
+\noindent%
+\hspace*{#1 mm}%
+\begin{picture}(#3,0)(0,0)%
+%
+{%
+\ifnum %
+#3>0 %
+\dispgrid{#2}{#3}%
+%
+\fi%
+}%
+%
+{%
+\ifnum %
+#3<0 %
+\dispgridneg{#2}{#3}%
+%
+\fi%
+}%
+}{%
+\end{picture}%
+\setlength{\unitlength}{\layercurrentunit}%
+%
+}%
+\newenvironment{layerv}[3][0]{%
+\setlength{\layercurrentunit}{\unitlength}%
+\unitlength=1 mm%
+\vspace*{-\baselineskip}%
+\vspace*{#2 mm}%
+
+\setcounter{ketpicctrj}{-#2}%
+\noindent%
+\hspace*{#1 mm}%
+\begin{picture}(100,0)(0,0)%
+%
+{%
+\ifnum %
+#3>0 %
+\setlength{\Width}{\textwidth}%
+\addtolength{\Width}{-#1 mm}%
+\setcounter{ketpicctri}{0}%
+\setcounter{ketpicctri}{1}%
+\addtocounter{ketpicctri}{-1}%
+%
+{%
+\loop%
+\addtocounter{ketpicctri}{1}%
+%
+{%
+\ifdim %
+\theketpicctri mm>\Width %
+\addtocounter{ketpicctri}{500}%
+%
+\fi%
+}%
+%
+\ifnum\theketpicctri<400%
+\repeat%
+}%
+\addtocounter{ketpicctri}{-500}%
+\addtocounter{ketpicctri}{-1}%
+\dispgrid{\theketpicctri}{#3}%
+%
+\fi%
+}%
+}{%
+\end{picture}%
+\vspace*{\theketpicctrj mm}%
+\setlength{\unitlength}{\layercurrentunit}%
+%
+}%
+\newenvironment{layerg}[2][1]{%
+\setlength{\layercurrentunit}{\unitlength}%
+\unitlength=1 mm%
+\vspace*{-\baselineskip}%
+\ketcalcheight{#2}%
+\setcounter{ketpicctrj}{\value{ketpicctra}}%
+\ketcalcdepth{#2}%
+\addtocounter{ketpicctrj}{\value{ketpicctra}}%
+\vspace*{-\theketpicctrj mm}%
+
+\noindent%
+\begin{picture}(100,0)(0,0)%
+%
+{%
+\ifnum %
+#1>0 %
+\setlength{\Width}{\textwidth}%
+\addtolength{\Width}{-#1 mm}%
+\setcounter{ketpicctri}{0}%
+\setcounter{ketpicctri}{1}%
+\addtocounter{ketpicctri}{-1}%
+%
+{%
+\loop%
+\addtocounter{ketpicctri}{1}%
+%
+{%
+\ifdim %
+\theketpicctri mm>\Width %
+\addtocounter{ketpicctri}{500}%
+%
+\fi%
+}%
+%
+\ifnum\theketpicctri<400%
+\repeat%
+}%
+\addtocounter{ketpicctri}{-500}%
+\addtocounter{ketpicctri}{-1}%
+\dispgrid{\theketpicctri}{\theketpicctrj}%
+%
+\fi%
+}%
+}{%
+\end{picture}%
+\vspace*{\theketpicctrj mm}%
+\setlength{\unitlength}{\layercurrentunit}%
+%
+}%
+\newcommand{\putnotec}[3]{%
+\settowidth{\Width}{#3}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{#3}\settodepth{\Depth}{#3}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(#1,-#2){\hspace*{\Width}\raisebox{\Height}{#3}}%
+%
+}%
+\newcommand{\putnotee}[3]{%
+\settowidth{\Width}{#3}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{#3}\settodepth{\Depth}{#3}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(#1,-#2){\hspace*{\Width}\raisebox{\Height}{#3}}%
+%
+}%
+\newcommand{\putnotew}[3]{%
+\settowidth{\Width}{#3}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{#3}\settodepth{\Depth}{#3}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(#1,-#2){\hspace*{\Width}\raisebox{\Height}{#3}}%
+%
+}%
+\newcommand{\putnotes}[3]{%
+\settowidth{\Width}{#3}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{#3}\settodepth{\Depth}{#3}\setlength{\Height}{-\Height}%
+\put(#1,-#2){\hspace*{\Width}\raisebox{\Height}{#3}}%
+%
+}%
+\newcommand{\putnoten}[3]{%
+\settowidth{\Width}{#3}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{#3}\settodepth{\Depth}{#3}\setlength{\Height}{\Depth}%
+\put(#1,-#2){\hspace*{\Width}\raisebox{\Height}{#3}}%
+%
+}%
+\newcommand{\putnotene}[3]{%
+\settowidth{\Width}{#3}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{#3}\settodepth{\Depth}{#3}\setlength{\Height}{\Depth}%
+\put(#1,-#2){\hspace*{\Width}\raisebox{\Height}{#3}}%
+%
+}%
+\newcommand{\putnotenw}[3]{%
+\settowidth{\Width}{#3}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{#3}\settodepth{\Depth}{#3}\setlength{\Height}{\Depth}%
+\put(#1,-#2){\hspace*{\Width}\raisebox{\Height}{#3}}%
+%
+}%
+\newcommand{\putnotese}[3]{%
+\settowidth{\Width}{#3}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{#3}\settodepth{\Depth}{#3}\setlength{\Height}{-\Height}%
+\put(#1,-#2){\hspace*{\Width}\raisebox{\Height}{#3}}%
+%
+}%
+\newcommand{\putnotesw}[3]{%
+\settowidth{\Width}{#3}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{#3}\settodepth{\Depth}{#3}\setlength{\Height}{-\Height}%
+\put(#1,-#2){\hspace*{\Width}\raisebox{\Height}{#3}}%
+%
+}%
+\newcommand{\ballonr}[5][8]{%
+\def\tempcontents{%
+{\unitlength=1cm%
+\begin{picture}%
+( 4.00000, 3.50000)( -2.00000, 0.00000)%
+\special{pn 8}%
+%
+\special{pn #1}%
+\special{pa 124 -260}\special{pa 123 -261}\special{pa 120 -262}\special{pa 115 -263}%
+\special{pa 109 -264}\special{pa 101 -266}\special{pa 92 -267}\special{pa 82 -269}%
+\special{pa 71 -271}\special{pa 59 -273}\special{pa 45 -276}\special{pa 32 -279}\special{pa 17 -282}%
+\special{pa 2 -286}\special{pa -14 -290}\special{pa -30 -295}\special{pa -47 -300}%
+\special{pa -63 -306}\special{pa -80 -312}\special{pa -96 -319}\special{pa -112 -327}%
+\special{pa -128 -335}\special{pa -144 -344}\special{pa -159 -354}\special{pa -174 -365}%
+\special{pa -188 -376}\special{pa -201 -388}\special{pa -213 -401}\special{pa -224 -416}%
+\special{pa -234 -431}\special{pa -243 -447}\special{pa -250 -464}\special{pa -256 -482}%
+\special{pa -260 -501}\special{pa -263 -522}\special{pa -264 -544}\special{pa -263 -566}%
+\special{pa -260 -591}\special{pa -265 -595}\special{pa -274 -599}\special{pa -287 -603}%
+\special{pa -302 -607}\special{pa -320 -611}\special{pa -340 -615}\special{pa -360 -620}%
+\special{pa -381 -626}\special{pa -402 -633}\special{pa -423 -641}\special{pa -442 -651}%
+\special{pa -459 -662}\special{pa -473 -675}\special{pa -484 -691}\special{pa -492 -709}%
+\special{pa -496 -728}\special{pa -498 -750}\special{pa -498 -772}\special{pa -496 -794}%
+\special{pa -493 -817}\special{pa -490 -839}\special{pa -487 -860}\special{pa -483 -880}%
+\special{pa -479 -899}\special{pa -472 -918}\special{pa -464 -935}\special{pa -452 -952}%
+\special{pa -437 -969}\special{pa -418 -984}\special{pa -395 -999}\special{pa -370 -1013}%
+\special{pa -342 -1026}\special{pa -312 -1037}\special{pa -280 -1048}\special{pa -248 -1057}%
+\special{pa -216 -1065}\special{pa -184 -1071}\special{pa -152 -1076}\special{pa -122 -1078}%
+\special{pa -95 -1079}\special{pa -69 -1078}\special{pa -47 -1075}\special{pa -37 -1085}%
+\special{pa -26 -1095}\special{pa -15 -1106}\special{pa -1 -1117}\special{pa 13 -1129}%
+\special{pa 29 -1140}\special{pa 47 -1152}\special{pa 67 -1162}\special{pa 90 -1172}%
+\special{pa 114 -1181}\special{pa 142 -1189}\special{pa 172 -1196}\special{pa 205 -1201}%
+\special{pa 242 -1205}\special{pa 282 -1206}\special{pa 324 -1206}\special{pa 368 -1204}%
+\special{pa 411 -1200}\special{pa 454 -1195}\special{pa 494 -1189}\special{pa 531 -1181}%
+\special{pa 565 -1172}\special{pa 594 -1162}\special{pa 619 -1150}\special{pa 642 -1136}%
+\special{pa 662 -1120}\special{pa 680 -1102}\special{pa 697 -1081}\special{pa 712 -1057}%
+\special{pa 726 -1031}\special{pa 738 -1004}\special{pa 748 -975}\special{pa 755 -945}%
+\special{pa 760 -916}\special{pa 762 -886}\special{pa 760 -857}\special{pa 755 -829}%
+\special{pa 745 -803}\special{pa 732 -779}\special{pa 713 -758}\special{pa 690 -740}%
+\special{pa 661 -726}\special{pa 668 -717}\special{pa 675 -706}\special{pa 681 -695}%
+\special{pa 688 -683}\special{pa 694 -670}\special{pa 699 -657}\special{pa 704 -643}%
+\special{pa 708 -629}\special{pa 712 -614}\special{pa 715 -599}\special{pa 718 -583}%
+\special{pa 719 -567}\special{pa 720 -551}\special{pa 719 -534}\special{pa 718 -518}%
+\special{pa 715 -501}\special{pa 712 -484}\special{pa 707 -468}\special{pa 701 -451}%
+\special{pa 693 -435}\special{pa 684 -418}\special{pa 673 -402}\special{pa 661 -387}%
+\special{pa 648 -372}\special{pa 633 -357}\special{pa 617 -343}\special{pa 600 -329}%
+\special{pa 581 -316}\special{pa 560 -304}\special{pa 539 -293}\special{pa 516 -283}%
+\special{pa 491 -273}\special{pa 466 -265}\special{pa 439 -258}\special{pa 410 -252}%
+\special{pa 381 -247}\special{pa 349 -244}\special{pa 317 -242}\special{pa 283 -242}%
+\special{pa 278 -228}\special{pa 273 -215}\special{pa 267 -202}\special{pa 261 -190}%
+\special{pa 255 -178}\special{pa 248 -166}\special{pa 242 -155}\special{pa 235 -144}%
+\special{pa 228 -133}\special{pa 220 -123}\special{pa 213 -114}\special{pa 205 -104}%
+\special{pa 197 -95}\special{pa 189 -87}\special{pa 180 -79}\special{pa 171 -71}\special{pa 162 -63}%
+\special{pa 153 -57}\special{pa 144 -50}\special{pa 134 -44}\special{pa 124 -38}\special{pa 114 -33}%
+\special{pa 104 -28}\special{pa 93 -23}\special{pa 82 -19}\special{pa 71 -15}\special{pa 60 -11}%
+\special{pa 48 -8}\special{pa 37 -6}\special{pa 25 -3}\special{pa 12 -1}\special{pa 0 0}%
+\special{pa 8 -6}\special{pa 15 -12}\special{pa 23 -18}\special{pa 30 -25}\special{pa 37 -31}%
+\special{pa 43 -38}\special{pa 49 -45}\special{pa 55 -52}\special{pa 61 -59}\special{pa 67 -66}%
+\special{pa 72 -73}\special{pa 77 -81}\special{pa 82 -88}\special{pa 86 -96}\special{pa 90 -104}%
+\special{pa 94 -112}\special{pa 98 -120}\special{pa 102 -129}\special{pa 105 -137}%
+\special{pa 108 -146}\special{pa 111 -155}\special{pa 113 -163}\special{pa 115 -172}%
+\special{pa 117 -182}\special{pa 119 -191}\special{pa 121 -200}\special{pa 122 -210}%
+\special{pa 123 -220}\special{pa 123 -229}\special{pa 124 -239}\special{pa 124 -250}%
+\special{pa 124 -260}%
+\special{fp}%
+\settowidth{\Width}{{\begin{minipage}{1.8cm}#5\end{minipage}}}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{{\begin{minipage}{1.8cm}#5\end{minipage}}}\settodepth{\Depth}{{\begin{minipage}{1.8cm}#5\end{minipage}}}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(0.5000,1.8000){\hspace*{\Width}\raisebox{\Height}{{\begin{minipage}{1.8cm}#5\end{minipage}}}}%
+%
+%
+\end{picture}}%%
+}%
+\setcounter{ketpicctra}{-#3}%
+\settowidth{\Width}{{\scalebox{#4}{\tempcontents}}}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{{\scalebox{#4}{\tempcontents}}}\settodepth{\Depth}{{\scalebox{#4}{\tempcontents}}}\setlength{\Height}{\Depth}%
+\put(#2,\theketpicctra){\hspace*{\Width}\raisebox{\Height}{{\scalebox{#4}{\tempcontents}}}}%
+%
+}%
+\newcommand{\ballonl}[5][8]{%
+\def\tempcontents{%
+{\unitlength=1cm%
+\begin{picture}%
+( 5.00000, 2.50000)( -2.50000, 0.00000)%
+\special{pn 8}%
+%
+\special{pn #1}%
+\special{pa -225 -221}\special{pa -262 -199}\special{pa -296 -180}\special{pa -329 -163}%
+\special{pa -360 -149}\special{pa -390 -138}\special{pa -419 -128}\special{pa -446 -121}%
+\special{pa -473 -116}\special{pa -499 -112}\special{pa -525 -110}\special{pa -550 -109}%
+\special{pa -576 -109}\special{pa -602 -111}\special{pa -628 -113}\special{pa -655 -115}%
+\special{pa -682 -119}\special{pa -709 -124}\special{pa -736 -131}\special{pa -762 -139}%
+\special{pa -786 -151}\special{pa -810 -165}\special{pa -831 -182}\special{pa -851 -202}%
+\special{pa -868 -224}\special{pa -883 -248}\special{pa -895 -274}\special{pa -904 -301}%
+\special{pa -909 -329}\special{pa -912 -357}\special{pa -910 -386}\special{pa -906 -414}%
+\special{pa -898 -441}\special{pa -887 -467}\special{pa -874 -492}\special{pa -857 -515}%
+\special{pa -838 -537}\special{pa -817 -555}\special{pa -793 -572}\special{pa -767 -585}%
+\special{pa -738 -594}\special{pa -708 -600}\special{pa -676 -602}\special{pa -684 -633}%
+\special{pa -688 -663}\special{pa -689 -691}\special{pa -687 -718}\special{pa -681 -743}%
+\special{pa -673 -766}\special{pa -663 -788}\special{pa -650 -808}\special{pa -635 -827}%
+\special{pa -619 -843}\special{pa -601 -858}\special{pa -582 -871}\special{pa -562 -883}%
+\special{pa -541 -892}\special{pa -520 -900}\special{pa -498 -906}\special{pa -476 -911}%
+\special{pa -452 -915}\special{pa -427 -918}\special{pa -401 -920}\special{pa -372 -922}%
+\special{pa -342 -924}\special{pa -311 -926}\special{pa -279 -927}\special{pa -248 -928}%
+\special{pa -217 -927}\special{pa -187 -925}\special{pa -160 -922}\special{pa -136 -918}%
+\special{pa -114 -912}\special{pa -94 -904}\special{pa -77 -894}\special{pa -61 -882}%
+\special{pa -47 -869}\special{pa -35 -853}\special{pa -23 -836}\special{pa -13 -816}%
+\special{pa -3 -794}\special{pa 7 -770}\special{pa 16 -744}\special{pa 25 -715}\special{pa 35 -684}%
+\special{pa 56 -683}\special{pa 76 -680}\special{pa 95 -677}\special{pa 112 -672}%
+\special{pa 128 -667}\special{pa 142 -661}\special{pa 156 -654}\special{pa 169 -646}%
+\special{pa 180 -637}\special{pa 191 -627}\special{pa 202 -616}\special{pa 211 -603}%
+\special{pa 221 -590}\special{pa 230 -576}\special{pa 238 -561}\special{pa 246 -545}%
+\special{pa 253 -528}\special{pa 258 -510}\special{pa 262 -492}\special{pa 264 -473}%
+\special{pa 264 -455}\special{pa 261 -436}\special{pa 257 -417}\special{pa 250 -399}%
+\special{pa 242 -382}\special{pa 232 -365}\special{pa 222 -348}\special{pa 212 -333}%
+\special{pa 202 -320}\special{pa 192 -307}\special{pa 181 -296}\special{pa 170 -285}%
+\special{pa 158 -276}\special{pa 144 -268}\special{pa 130 -260}\special{pa 114 -253}%
+\special{pa 96 -246}\special{pa 77 -241}\special{pa 55 -235}\special{pa 31 -230}\special{pa 4 -225}%
+\special{pa -26 -221}\special{pa -26 -214}\special{pa -26 -208}\special{pa -26 -201}%
+\special{pa -27 -194}\special{pa -26 -187}\special{pa -26 -181}\special{pa -26 -174}%
+\special{pa -26 -167}\special{pa -26 -160}\special{pa -25 -154}\special{pa -25 -147}%
+\special{pa -24 -140}\special{pa -24 -133}\special{pa -23 -126}\special{pa -22 -119}%
+\special{pa -22 -113}\special{pa -21 -106}\special{pa -20 -99}\special{pa -19 -92}%
+\special{pa -18 -85}\special{pa -17 -78}\special{pa -16 -71}\special{pa -14 -64}\special{pa -13 -57}%
+\special{pa -12 -50}\special{pa -10 -43}\special{pa -9 -36}\special{pa -7 -29}\special{pa -5 -21}%
+\special{pa -4 -14}\special{pa -2 -7}\special{pa 0 0}\special{pa -9 -11}\special{pa -17 -21}%
+\special{pa -26 -32}\special{pa -34 -42}\special{pa -42 -52}\special{pa -50 -61}\special{pa -58 -71}%
+\special{pa -66 -80}\special{pa -74 -88}\special{pa -82 -97}\special{pa -89 -105}%
+\special{pa -97 -113}\special{pa -104 -121}\special{pa -111 -129}\special{pa -119 -136}%
+\special{pa -126 -143}\special{pa -133 -150}\special{pa -139 -156}\special{pa -146 -162}%
+\special{pa -153 -168}\special{pa -160 -174}\special{pa -166 -180}\special{pa -172 -185}%
+\special{pa -179 -190}\special{pa -185 -195}\special{pa -191 -199}\special{pa -197 -203}%
+\special{pa -203 -207}\special{pa -208 -211}\special{pa -214 -215}\special{pa -220 -218}%
+\special{pa -225 -221}%
+\special{fp}%
+\settowidth{\Width}{{\begin{minipage}{1.5cm}#5\end{minipage}}}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{{\begin{minipage}{1.5cm}#5\end{minipage}}}\settodepth{\Depth}{{\begin{minipage}{1.5cm}#5\end{minipage}}}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-0.8000,1.2000){\hspace*{\Width}\raisebox{\Height}{{\begin{minipage}{1.5cm}#5\end{minipage}}}}%
+%
+%
+\end{picture}}%%
+}%
+\setcounter{ketpicctra}{-#3}%
+\settowidth{\Width}{{\scalebox{#4}{\tempcontents}}}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{{\scalebox{#4}{\tempcontents}}}\settodepth{\Depth}{{\scalebox{#4}{\tempcontents}}}\setlength{\Height}{\Depth}%
+\put(#2,\theketpicctra){\hspace*{\Width}\raisebox{\Height}{{\scalebox{#4}{\tempcontents}}}}%
+%
+}%
+\newcommand{\lefthand}[3][16]{%
+\def\tempcontents{%
+{\unitlength=1cm%
+\begin{picture}%
+( 1.01000, 0.82000)( -1.00000, -0.80000)%
+\special{pn 8}%
+%
+\special{pn #1}%
+\special{pa -324 274}\special{pa -311 261}\special{pa -296 251}\special{pa -280 243}%
+\special{pa -265 237}\special{pa -249 232}\special{pa -233 228}\special{pa -219 225}%
+\special{pa -204 222}\special{pa -192 218}\special{pa -180 215}\special{pa -170 210}%
+\special{pa -163 204}\special{pa -156 198}\special{pa -150 191}\special{pa -143 184}%
+\special{pa -136 178}\special{pa -127 173}\special{pa -118 169}\special{pa -108 165}%
+\special{pa -99 162}\special{pa -91 160}\special{pa -84 158}\special{pa -80 156}\special{pa -78 154}%
+\special{pa -76 152}\special{pa -76 151}\special{pa -76 149}\special{pa -77 146}\special{pa -78 144}%
+\special{pa -80 142}\special{pa -82 140}\special{pa -85 138}\special{pa -88 137}\special{pa -92 136}%
+\special{pa -97 136}\special{pa -102 136}\special{pa -107 136}\special{pa -112 136}%
+\special{pa -117 137}\special{pa -122 137}\special{pa -126 138}\special{pa -130 138}%
+\special{pa -133 139}%
+\special{fp}%
+\special{pa -165 170}\special{pa -161 166}\special{pa -156 161}\special{pa -149 154}%
+\special{pa -142 147}\special{pa -133 138}\special{pa -123 129}\special{pa -113 119}%
+\special{pa -102 109}\special{pa -91 98}\special{pa -79 88}\special{pa -67 78}\special{pa -55 69}%
+\special{pa -43 60}\special{pa -34 52}\special{pa -25 44}\special{pa -19 38}\special{pa -14 32}%
+\special{pa -10 26}\special{pa -7 22}\special{pa -5 17}\special{pa -3 12}\special{pa -1 8}%
+\special{pa 0 4}\special{pa 0 1}\special{pa -1 -1}\special{pa -3 -3}\special{pa -6 -3}%
+\special{pa -11 -2}\special{pa -17 1}\special{pa -25 5}\special{pa -35 12}\special{pa -47 20}%
+\special{pa -60 30}\special{pa -74 42}\special{pa -90 55}\special{pa -106 68}\special{pa -122 82}%
+\special{pa -137 95}\special{pa -150 106}\special{pa -161 115}\special{pa -168 122}%
+\special{pa -171 124}\special{pa -169 123}\special{pa -161 116}%
+\special{fp}%
+\special{pa -151 107}\special{pa -151 105}\special{pa -150 104}\special{pa -150 102}%
+\special{pa -151 101}\special{pa -151 99}\special{pa -151 98}\special{pa -152 97}%
+\special{pa -153 96}\special{pa -153 94}\special{pa -154 93}\special{pa -155 92}\special{pa -156 92}%
+\special{pa -158 91}\special{pa -159 90}\special{pa -160 89}\special{pa -161 89}\special{pa -163 88}%
+\special{pa -164 88}\special{pa -165 87}\special{pa -167 87}\special{pa -168 86}\special{pa -170 86}%
+\special{pa -171 86}\special{pa -173 85}\special{pa -174 85}\special{pa -176 85}\special{pa -177 85}%
+\special{pa -178 85}\special{pa -179 85}\special{pa -181 85}\special{pa -182 85}\special{pa -183 85}%
+\special{pa -184 85}\special{pa -185 85}\special{pa -185 85}\special{pa -186 85}\special{pa -187 85}%
+\special{fp}%
+\special{pa -198 97}\special{pa -196 96}\special{pa -193 94}\special{pa -192 93}\special{pa -190 91}%
+\special{pa -189 90}\special{pa -188 88}\special{pa -188 87}\special{pa -187 86}\special{pa -187 84}%
+\special{pa -188 83}\special{pa -188 82}\special{pa -189 81}\special{pa -190 80}\special{pa -191 78}%
+\special{pa -192 77}\special{pa -193 76}\special{pa -194 76}\special{pa -195 75}\special{pa -197 74}%
+\special{pa -198 73}\special{pa -199 72}\special{pa -201 72}\special{pa -202 71}\special{pa -204 71}%
+\special{pa -205 70}\special{pa -206 70}\special{pa -207 69}\special{pa -209 69}\special{pa -210 69}%
+\special{pa -211 68}\special{pa -213 68}\special{pa -214 68}\special{pa -215 68}\special{pa -216 68}%
+\special{pa -218 68}\special{pa -219 68}\special{pa -220 68}\special{pa -221 68}\special{pa -222 68}%
+\special{fp}%
+\special{pa -232 80}\special{pa -230 78}\special{pa -228 76}\special{pa -227 75}\special{pa -226 73}%
+\special{pa -225 71}\special{pa -224 69}\special{pa -223 67}\special{pa -223 66}\special{pa -223 64}%
+\special{pa -223 63}\special{pa -224 61}\special{pa -225 60}\special{pa -226 58}\special{pa -227 57}%
+\special{pa -229 55}\special{pa -231 54}\special{pa -233 53}\special{pa -236 53}\special{pa -240 53}%
+\special{pa -244 54}\special{pa -248 56}\special{pa -253 58}\special{pa -259 62}\special{pa -265 67}%
+\special{pa -271 73}\special{pa -277 79}\special{pa -283 86}\special{pa -289 93}\special{pa -294 101}%
+\special{pa -299 110}\special{pa -303 118}\special{pa -307 127}\special{pa -312 137}%
+\special{pa -316 146}\special{pa -321 156}\special{pa -325 165}\special{pa -331 175}%
+\special{pa -336 185}\special{pa -343 194}\special{pa -350 203}\special{pa -358 213}%
+\special{pa -367 221}%
+\special{fp}%
+\end{picture}}%%
+}%
+\setcounter{ketpicctra}{-#3}%
+\settowidth{\Width}{{\tempcontents}}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{{\tempcontents}}\settodepth{\Depth}{{\tempcontents}}\setlength{\Height}{-\Height}%
+\put(#2,\theketpicctra){\hspace*{\Width}\raisebox{\Height}{{\tempcontents}}}%
+%
+}%
+\newcommand{\righthand}[3][16]{%
+\def\tempcontents{%
+{\unitlength=1cm%
+\begin{picture}%
+( 1.01000, 0.82000)( -0.01000, -0.80000)%
+\special{pn 8}%
+%
+\special{pn #1}%
+\special{pa 324 274}\special{pa 311 261}\special{pa 296 251}\special{pa 280 243}\special{pa 265 237}%
+\special{pa 249 232}\special{pa 233 228}\special{pa 219 225}\special{pa 204 222}\special{pa 192 218}%
+\special{pa 180 215}\special{pa 170 210}\special{pa 163 204}\special{pa 156 198}\special{pa 150 191}%
+\special{pa 143 184}\special{pa 136 178}\special{pa 127 173}\special{pa 118 169}\special{pa 108 165}%
+\special{pa 99 162}\special{pa 91 160}\special{pa 84 158}\special{pa 80 156}\special{pa 78 154}%
+\special{pa 76 152}\special{pa 76 151}\special{pa 76 149}\special{pa 77 146}\special{pa 78 144}%
+\special{pa 80 142}\special{pa 82 140}\special{pa 85 138}\special{pa 88 137}\special{pa 92 136}%
+\special{pa 97 136}\special{pa 102 136}\special{pa 107 136}\special{pa 112 136}\special{pa 117 137}%
+\special{pa 122 137}\special{pa 126 138}\special{pa 130 138}\special{pa 133 139}%
+\special{fp}%
+\special{pa 165 170}\special{pa 161 166}\special{pa 156 161}\special{pa 149 154}\special{pa 142 147}%
+\special{pa 133 138}\special{pa 123 129}\special{pa 113 119}\special{pa 102 109}\special{pa 91 98}%
+\special{pa 79 88}\special{pa 67 78}\special{pa 55 69}\special{pa 43 60}\special{pa 34 52}%
+\special{pa 25 44}\special{pa 19 38}\special{pa 14 32}\special{pa 10 26}\special{pa 7 22}%
+\special{pa 5 17}\special{pa 3 12}\special{pa 1 8}\special{pa 0 4}\special{pa 0 1}%
+\special{pa 1 -1}\special{pa 3 -3}\special{pa 6 -3}\special{pa 11 -2}\special{pa 17 1}%
+\special{pa 25 5}\special{pa 35 12}\special{pa 47 20}\special{pa 60 30}\special{pa 74 42}%
+\special{pa 90 55}\special{pa 106 68}\special{pa 122 82}\special{pa 137 95}\special{pa 150 106}%
+\special{pa 161 115}\special{pa 168 122}\special{pa 171 124}\special{pa 169 123}\special{pa 161 116}%
+\special{fp}%
+\special{pa 151 107}\special{pa 151 105}\special{pa 150 104}\special{pa 150 102}\special{pa 151 101}%
+\special{pa 151 99}\special{pa 151 98}\special{pa 152 97}\special{pa 153 96}\special{pa 153 94}%
+\special{pa 154 93}\special{pa 155 92}\special{pa 156 92}\special{pa 158 91}\special{pa 159 90}%
+\special{pa 160 89}\special{pa 161 89}\special{pa 163 88}\special{pa 164 88}\special{pa 165 87}%
+\special{pa 167 87}\special{pa 168 86}\special{pa 170 86}\special{pa 171 86}\special{pa 173 85}%
+\special{pa 174 85}\special{pa 176 85}\special{pa 177 85}\special{pa 178 85}\special{pa 179 85}%
+\special{pa 181 85}\special{pa 182 85}\special{pa 183 85}\special{pa 184 85}\special{pa 185 85}%
+\special{pa 185 85}\special{pa 186 85}\special{pa 187 85}%
+\special{fp}%
+\special{pa 198 97}\special{pa 196 96}\special{pa 193 94}\special{pa 192 93}\special{pa 190 91}%
+\special{pa 189 90}\special{pa 188 88}\special{pa 188 87}\special{pa 187 86}\special{pa 187 84}%
+\special{pa 188 83}\special{pa 188 82}\special{pa 189 81}\special{pa 190 80}\special{pa 191 78}%
+\special{pa 192 77}\special{pa 193 76}\special{pa 194 76}\special{pa 195 75}\special{pa 197 74}%
+\special{pa 198 73}\special{pa 199 72}\special{pa 201 72}\special{pa 202 71}\special{pa 204 71}%
+\special{pa 205 70}\special{pa 206 70}\special{pa 207 69}\special{pa 209 69}\special{pa 210 69}%
+\special{pa 211 68}\special{pa 213 68}\special{pa 214 68}\special{pa 215 68}\special{pa 216 68}%
+\special{pa 218 68}\special{pa 219 68}\special{pa 220 68}\special{pa 221 68}\special{pa 222 68}%
+\special{fp}%
+\special{pa 232 80}\special{pa 230 78}\special{pa 228 76}\special{pa 227 75}\special{pa 226 73}%
+\special{pa 225 71}\special{pa 224 69}\special{pa 223 67}\special{pa 223 66}\special{pa 223 64}%
+\special{pa 223 63}\special{pa 224 61}\special{pa 225 60}\special{pa 226 58}\special{pa 227 57}%
+\special{pa 229 55}\special{pa 231 54}\special{pa 233 53}\special{pa 236 53}\special{pa 240 53}%
+\special{pa 244 54}\special{pa 248 56}\special{pa 253 58}\special{pa 259 62}\special{pa 265 67}%
+\special{pa 271 73}\special{pa 277 79}\special{pa 283 86}\special{pa 289 93}\special{pa 294 101}%
+\special{pa 299 110}\special{pa 303 118}\special{pa 307 127}\special{pa 312 137}\special{pa 316 146}%
+\special{pa 321 156}\special{pa 325 165}\special{pa 331 175}\special{pa 336 185}\special{pa 343 194}%
+\special{pa 350 203}\special{pa 358 213}\special{pa 367 221}%
+\special{fp}%
+\end{picture}}%%
+}%
+\setcounter{ketpicctra}{-#3}%
+\settowidth{\Width}{{\tempcontents}}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{{\tempcontents}}\settodepth{\Depth}{{\tempcontents}}\setlength{\Height}{-\Height}%
+\put(#2,\theketpicctra){\hspace*{\Width}\raisebox{\Height}{{\tempcontents}}}%
+%
+}%
+\newcommand{\leftdownhand}[3][16]{%
+\def\tempcontents{%
+{\unitlength=1cm%
+\begin{picture}%
+( 1.01000, 0.82000)( -1.00000, -0.02000)%
+\special{pn 8}%
+%
+\special{pn #1}%
+\special{pa -324 -274}\special{pa -311 -261}\special{pa -296 -251}\special{pa -280 -243}%
+\special{pa -265 -237}\special{pa -249 -232}\special{pa -233 -228}\special{pa -219 -225}%
+\special{pa -204 -222}\special{pa -192 -218}\special{pa -180 -215}\special{pa -170 -210}%
+\special{pa -163 -204}\special{pa -156 -198}\special{pa -150 -191}\special{pa -143 -184}%
+\special{pa -136 -178}\special{pa -127 -173}\special{pa -118 -169}\special{pa -108 -165}%
+\special{pa -99 -162}\special{pa -91 -160}\special{pa -84 -158}\special{pa -80 -156}%
+\special{pa -78 -154}\special{pa -76 -152}\special{pa -76 -151}\special{pa -76 -149}%
+\special{pa -77 -146}\special{pa -78 -144}\special{pa -80 -142}\special{pa -82 -140}%
+\special{pa -85 -138}\special{pa -88 -137}\special{pa -92 -136}\special{pa -97 -136}%
+\special{pa -102 -136}\special{pa -107 -136}\special{pa -112 -136}\special{pa -117 -137}%
+\special{pa -122 -137}\special{pa -126 -138}\special{pa -130 -138}\special{pa -133 -139}%
+\special{fp}%
+\special{pa -165 -170}\special{pa -161 -166}\special{pa -156 -161}\special{pa -149 -154}%
+\special{pa -142 -147}\special{pa -133 -138}\special{pa -123 -129}\special{pa -113 -119}%
+\special{pa -102 -109}\special{pa -91 -98}\special{pa -79 -88}\special{pa -67 -78}%
+\special{pa -55 -69}\special{pa -43 -60}\special{pa -34 -52}\special{pa -25 -44}\special{pa -19 -38}%
+\special{pa -14 -32}\special{pa -10 -26}\special{pa -7 -22}\special{pa -5 -17}\special{pa -3 -12}%
+\special{pa -1 -8}\special{pa 0 -4}\special{pa 0 -1}\special{pa -1 1}\special{pa -3 3}%
+\special{pa -6 3}\special{pa -11 2}\special{pa -17 -1}\special{pa -25 -5}\special{pa -35 -12}%
+\special{pa -47 -20}\special{pa -60 -30}\special{pa -74 -42}\special{pa -90 -55}\special{pa -106 -68}%
+\special{pa -122 -82}\special{pa -137 -95}\special{pa -150 -106}\special{pa -161 -115}%
+\special{pa -168 -122}\special{pa -171 -124}\special{pa -169 -123}\special{pa -161 -116}%
+\special{fp}%
+\special{pa -151 -107}\special{pa -151 -105}\special{pa -150 -104}\special{pa -150 -102}%
+\special{pa -151 -101}\special{pa -151 -99}\special{pa -151 -98}\special{pa -152 -97}%
+\special{pa -153 -96}\special{pa -153 -94}\special{pa -154 -93}\special{pa -155 -92}%
+\special{pa -156 -92}\special{pa -158 -91}\special{pa -159 -90}\special{pa -160 -89}%
+\special{pa -161 -89}\special{pa -163 -88}\special{pa -164 -88}\special{pa -165 -87}%
+\special{pa -167 -87}\special{pa -168 -86}\special{pa -170 -86}\special{pa -171 -86}%
+\special{pa -173 -85}\special{pa -174 -85}\special{pa -176 -85}\special{pa -177 -85}%
+\special{pa -178 -85}\special{pa -179 -85}\special{pa -181 -85}\special{pa -182 -85}%
+\special{pa -183 -85}\special{pa -184 -85}\special{pa -185 -85}\special{pa -185 -85}%
+\special{pa -186 -85}\special{pa -187 -85}%
+\special{fp}%
+\special{pa -198 -97}\special{pa -196 -96}\special{pa -193 -94}\special{pa -192 -93}%
+\special{pa -190 -91}\special{pa -189 -90}\special{pa -188 -88}\special{pa -188 -87}%
+\special{pa -187 -86}\special{pa -187 -84}\special{pa -188 -83}\special{pa -188 -82}%
+\special{pa -189 -81}\special{pa -190 -80}\special{pa -191 -78}\special{pa -192 -77}%
+\special{pa -193 -76}\special{pa -194 -76}\special{pa -195 -75}\special{pa -197 -74}%
+\special{pa -198 -73}\special{pa -199 -72}\special{pa -201 -72}\special{pa -202 -71}%
+\special{pa -204 -71}\special{pa -205 -70}\special{pa -206 -70}\special{pa -207 -69}%
+\special{pa -209 -69}\special{pa -210 -69}\special{pa -211 -68}\special{pa -213 -68}%
+\special{pa -214 -68}\special{pa -215 -68}\special{pa -216 -68}\special{pa -218 -68}%
+\special{pa -219 -68}\special{pa -220 -68}\special{pa -221 -68}\special{pa -222 -68}%
+\special{fp}%
+\special{pa -232 -80}\special{pa -230 -78}\special{pa -228 -76}\special{pa -227 -75}%
+\special{pa -226 -73}\special{pa -225 -71}\special{pa -224 -69}\special{pa -223 -67}%
+\special{pa -223 -66}\special{pa -223 -64}\special{pa -223 -63}\special{pa -224 -61}%
+\special{pa -225 -60}\special{pa -226 -58}\special{pa -227 -57}\special{pa -229 -55}%
+\special{pa -231 -54}\special{pa -233 -53}\special{pa -236 -53}\special{pa -240 -53}%
+\special{pa -244 -54}\special{pa -248 -56}\special{pa -253 -58}\special{pa -259 -62}%
+\special{pa -265 -67}\special{pa -271 -73}\special{pa -277 -79}\special{pa -283 -86}%
+\special{pa -289 -93}\special{pa -294 -101}\special{pa -299 -110}\special{pa -303 -118}%
+\special{pa -307 -127}\special{pa -312 -137}\special{pa -316 -146}\special{pa -321 -156}%
+\special{pa -325 -165}\special{pa -331 -175}\special{pa -336 -185}\special{pa -343 -194}%
+\special{pa -350 -203}\special{pa -358 -213}\special{pa -367 -221}%
+\special{fp}%
+\end{picture}}%%
+}%
+\setcounter{ketpicctra}{-#3}%
+\settowidth{\Width}{{\tempcontents}}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{{\tempcontents}}\settodepth{\Depth}{{\tempcontents}}\setlength{\Height}{\Depth}%
+\put(#2,\theketpicctra){\hspace*{\Width}\raisebox{\Height}{{\tempcontents}}}%
+%
+}%
+\newcommand{\rightdownhand}[3][16]{%
+\def\tempcontents{%
+{\unitlength=1cm%
+\begin{picture}%
+( 1.01000, 0.82000)( -0.01000, -0.02000)%
+\special{pn 8}%
+%
+\special{pn #1}%
+\special{pa 324 -274}\special{pa 311 -261}\special{pa 296 -251}\special{pa 280 -243}%
+\special{pa 265 -237}\special{pa 249 -232}\special{pa 233 -228}\special{pa 219 -225}%
+\special{pa 204 -222}\special{pa 192 -218}\special{pa 180 -215}\special{pa 170 -210}%
+\special{pa 163 -204}\special{pa 156 -198}\special{pa 150 -191}\special{pa 143 -184}%
+\special{pa 136 -178}\special{pa 127 -173}\special{pa 118 -169}\special{pa 108 -165}%
+\special{pa 99 -162}\special{pa 91 -160}\special{pa 84 -158}\special{pa 80 -156}\special{pa 78 -154}%
+\special{pa 76 -152}\special{pa 76 -151}\special{pa 76 -149}\special{pa 77 -146}\special{pa 78 -144}%
+\special{pa 80 -142}\special{pa 82 -140}\special{pa 85 -138}\special{pa 88 -137}\special{pa 92 -136}%
+\special{pa 97 -136}\special{pa 102 -136}\special{pa 107 -136}\special{pa 112 -136}%
+\special{pa 117 -137}\special{pa 122 -137}\special{pa 126 -138}\special{pa 130 -138}%
+\special{pa 133 -139}%
+\special{fp}%
+\special{pa 165 -170}\special{pa 161 -166}\special{pa 156 -161}\special{pa 149 -154}%
+\special{pa 142 -147}\special{pa 133 -138}\special{pa 123 -129}\special{pa 113 -119}%
+\special{pa 102 -109}\special{pa 91 -98}\special{pa 79 -88}\special{pa 67 -78}\special{pa 55 -69}%
+\special{pa 43 -60}\special{pa 34 -52}\special{pa 25 -44}\special{pa 19 -38}\special{pa 14 -32}%
+\special{pa 10 -26}\special{pa 7 -22}\special{pa 5 -17}\special{pa 3 -12}\special{pa 1 -8}%
+\special{pa 0 -4}\special{pa 0 -1}\special{pa 1 1}\special{pa 3 3}\special{pa 6 3}%
+\special{pa 11 2}\special{pa 17 -1}\special{pa 25 -5}\special{pa 35 -12}\special{pa 47 -20}%
+\special{pa 60 -30}\special{pa 74 -42}\special{pa 90 -55}\special{pa 106 -68}\special{pa 122 -82}%
+\special{pa 137 -95}\special{pa 150 -106}\special{pa 161 -115}\special{pa 168 -122}%
+\special{pa 171 -124}\special{pa 169 -123}\special{pa 161 -116}%
+\special{fp}%
+\special{pa 151 -107}\special{pa 151 -105}\special{pa 150 -104}\special{pa 150 -102}%
+\special{pa 151 -101}\special{pa 151 -99}\special{pa 151 -98}\special{pa 152 -97}%
+\special{pa 153 -96}\special{pa 153 -94}\special{pa 154 -93}\special{pa 155 -92}\special{pa 156 -92}%
+\special{pa 158 -91}\special{pa 159 -90}\special{pa 160 -89}\special{pa 161 -89}\special{pa 163 -88}%
+\special{pa 164 -88}\special{pa 165 -87}\special{pa 167 -87}\special{pa 168 -86}\special{pa 170 -86}%
+\special{pa 171 -86}\special{pa 173 -85}\special{pa 174 -85}\special{pa 176 -85}\special{pa 177 -85}%
+\special{pa 178 -85}\special{pa 179 -85}\special{pa 181 -85}\special{pa 182 -85}\special{pa 183 -85}%
+\special{pa 184 -85}\special{pa 185 -85}\special{pa 185 -85}\special{pa 186 -85}\special{pa 187 -85}%
+\special{fp}%
+\special{pa 198 -97}\special{pa 196 -96}\special{pa 193 -94}\special{pa 192 -93}\special{pa 190 -91}%
+\special{pa 189 -90}\special{pa 188 -88}\special{pa 188 -87}\special{pa 187 -86}\special{pa 187 -84}%
+\special{pa 188 -83}\special{pa 188 -82}\special{pa 189 -81}\special{pa 190 -80}\special{pa 191 -78}%
+\special{pa 192 -77}\special{pa 193 -76}\special{pa 194 -76}\special{pa 195 -75}\special{pa 197 -74}%
+\special{pa 198 -73}\special{pa 199 -72}\special{pa 201 -72}\special{pa 202 -71}\special{pa 204 -71}%
+\special{pa 205 -70}\special{pa 206 -70}\special{pa 207 -69}\special{pa 209 -69}\special{pa 210 -69}%
+\special{pa 211 -68}\special{pa 213 -68}\special{pa 214 -68}\special{pa 215 -68}\special{pa 216 -68}%
+\special{pa 218 -68}\special{pa 219 -68}\special{pa 220 -68}\special{pa 221 -68}\special{pa 222 -68}%
+\special{fp}%
+\special{pa 232 -80}\special{pa 230 -78}\special{pa 228 -76}\special{pa 227 -75}\special{pa 226 -73}%
+\special{pa 225 -71}\special{pa 224 -69}\special{pa 223 -67}\special{pa 223 -66}\special{pa 223 -64}%
+\special{pa 223 -63}\special{pa 224 -61}\special{pa 225 -60}\special{pa 226 -58}\special{pa 227 -57}%
+\special{pa 229 -55}\special{pa 231 -54}\special{pa 233 -53}\special{pa 236 -53}\special{pa 240 -53}%
+\special{pa 244 -54}\special{pa 248 -56}\special{pa 253 -58}\special{pa 259 -62}\special{pa 265 -67}%
+\special{pa 271 -73}\special{pa 277 -79}\special{pa 283 -86}\special{pa 289 -93}\special{pa 294 -101}%
+\special{pa 299 -110}\special{pa 303 -118}\special{pa 307 -127}\special{pa 312 -137}%
+\special{pa 316 -146}\special{pa 321 -156}\special{pa 325 -165}\special{pa 331 -175}%
+\special{pa 336 -185}\special{pa 343 -194}\special{pa 350 -203}\special{pa 358 -213}%
+\special{pa 367 -221}%
+\special{fp}%
+\end{picture}}%%
+}%
+\setcounter{ketpicctra}{-#3}%
+\settowidth{\Width}{{\tempcontents}}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{{\tempcontents}}\settodepth{\Depth}{{\tempcontents}}\setlength{\Height}{\Depth}%
+\put(#2,\theketpicctra){\hspace*{\Width}\raisebox{\Height}{{\tempcontents}}}%
+%
+}%
+\newcommand{\cirscoremark}[2][20]{%
+\scalebox{#2}{%
+{\unitlength=0.04mm%
+\begin{picture}%
+( 621.63538, 724.07834)( 277.81039,2339.74153)%
+\special{pn 8}%
+%
+\special{pn #1}%
+\special{pa 916 -3691}\special{pa 815 -3685}\special{pa 726 -3696}\special{pa 650 -3725}%
+\special{pa 585 -3768}\special{pa 533 -3824}\special{pa 492 -3891}\special{pa 463 -3966}%
+\special{pa 445 -4049}\special{pa 437 -4137}\special{pa 441 -4228}\special{pa 455 -4321}%
+\special{pa 479 -4413}\special{pa 514 -4503}\special{pa 558 -4588}\special{pa 612 -4664}%
+\special{pa 676 -4729}\special{pa 748 -4780}\special{pa 830 -4813}\special{pa 920 -4825}%
+\special{pa 1016 -4817}\special{pa 1113 -4791}\special{pa 1204 -4750}\special{pa 1285 -4698}%
+\special{pa 1351 -4638}\special{pa 1395 -4572}\special{pa 1416 -4502}\special{pa 1416 -4431}%
+\special{pa 1400 -4358}\special{pa 1369 -4284}\special{pa 1327 -4210}\special{pa 1278 -4137}%
+\special{pa 1225 -4066}\special{pa 1171 -3997}\special{pa 1120 -3932}\special{pa 1074 -3871}%
+\special{pa 1037 -3815}\special{pa 1012 -3765}%
+\special{fp}%
+\special{pa 980 -3765}\special{pa 918 -3783}\special{pa 864 -3802}\special{pa 818 -3820}%
+\special{pa 778 -3839}\special{pa 746 -3859}\special{pa 720 -3880}\special{pa 701 -3903}%
+\special{pa 688 -3928}\special{pa 681 -3956}\special{pa 680 -3986}\special{pa 684 -4020}%
+\special{pa 694 -4058}\special{pa 709 -4099}\special{pa 729 -4143}\special{pa 753 -4189}%
+\special{pa 781 -4234}\special{pa 813 -4276}\special{pa 848 -4314}\special{pa 887 -4346}%
+\special{pa 927 -4371}\special{pa 969 -4387}\special{pa 1009 -4396}\special{pa 1048 -4396}%
+\special{pa 1083 -4386}\special{pa 1114 -4367}\special{pa 1139 -4338}\special{pa 1159 -4302}%
+\special{pa 1173 -4261}\special{pa 1183 -4216}\special{pa 1187 -4171}\special{pa 1187 -4127}%
+\special{pa 1183 -4086}\special{pa 1174 -4046}\special{pa 1163 -4009}\special{pa 1149 -3974}%
+\special{pa 1132 -3940}\special{pa 1115 -3908}\special{pa 1096 -3876}\special{pa 1077 -3846}%
+\special{pa 1059 -3816}\special{pa 1041 -3786}\special{pa 1025 -3756}\special{pa 1012 -3727}%
+\special{fp}%
+\end{picture}}%%
+}%
+%
+}%
+\newcommand{\scirscoremark}[2][20]{%
+\scalebox{#2}{%
+{\unitlength=0.04mm%
+\begin{picture}%
+( 535.76632, 538.46556)( 296.43854,1549.10000)%
+\special{pn 8}%
+%
+\special{pn #1}%
+\special{pa 951 -2440}\special{pa 865 -2450}\special{pa 787 -2470}\special{pa 718 -2499}%
+\special{pa 658 -2535}\special{pa 606 -2577}\special{pa 563 -2624}\special{pa 527 -2675}%
+\special{pa 500 -2728}\special{pa 481 -2781}\special{pa 470 -2835}\special{pa 467 -2889}%
+\special{pa 471 -2941}\special{pa 483 -2991}\special{pa 502 -3039}\special{pa 527 -3083}%
+\special{pa 558 -3124}\special{pa 592 -3160}\special{pa 631 -3191}\special{pa 672 -3218}%
+\special{pa 716 -3241}\special{pa 761 -3259}\special{pa 808 -3273}\special{pa 856 -3283}%
+\special{pa 906 -3288}\special{pa 959 -3287}\special{pa 1013 -3281}\special{pa 1067 -3269}%
+\special{pa 1117 -3251}\special{pa 1162 -3227}\special{pa 1200 -3196}\special{pa 1232 -3160}%
+\special{pa 1258 -3119}\special{pa 1279 -3074}\special{pa 1296 -3025}\special{pa 1306 -2974}%
+\special{pa 1311 -2922}\special{pa 1309 -2868}\special{pa 1300 -2815}\special{pa 1284 -2763}%
+\special{pa 1262 -2712}\special{pa 1233 -2662}\special{pa 1198 -2615}\special{pa 1157 -2571}%
+\special{pa 1109 -2531}\special{pa 1056 -2494}%
+\special{fp}%
+\end{picture}}%%
+}%
+%
+}%
+\newcommand{\triscoremark}[2][20]{%
+\scalebox{#2}{%
+{\unitlength=0.04mm%
+\begin{picture}%
+( 579.38800, 435.04900)( 235.82100, 892.46100)%
+\special{pn 8}%
+%
+\special{pn #1}%
+\special{pa 909 -2091}\special{pa 893 -2068}\special{pa 877 -2045}\special{pa 861 -2022}%
+\special{pa 845 -2000}\special{pa 829 -1977}\special{pa 813 -1954}\special{pa 797 -1932}%
+\special{pa 782 -1910}\special{pa 766 -1888}\special{pa 750 -1866}\special{pa 735 -1844}%
+\special{pa 719 -1822}\special{pa 704 -1801}\special{pa 688 -1780}\special{pa 673 -1759}%
+\special{pa 658 -1739}\special{pa 643 -1718}\special{pa 628 -1698}\special{pa 613 -1679}%
+\special{pa 598 -1660}\special{pa 584 -1641}\special{pa 569 -1622}\special{pa 555 -1604}%
+\special{pa 541 -1587}\special{pa 527 -1569}\special{pa 513 -1553}\special{pa 499 -1537}%
+\special{pa 486 -1521}\special{pa 472 -1506}\special{pa 459 -1491}\special{pa 446 -1477}%
+\special{pa 433 -1463}\special{pa 420 -1451}\special{pa 408 -1438}\special{pa 395 -1427}%
+\special{pa 383 -1416}\special{pa 371 -1405}%
+\special{fp}%
+\special{pa 371 -1405}\special{pa 379 -1412}\special{pa 388 -1418}\special{pa 399 -1423}%
+\special{pa 410 -1429}\special{pa 423 -1434}\special{pa 437 -1438}\special{pa 452 -1443}%
+\special{pa 468 -1447}\special{pa 486 -1451}\special{pa 504 -1455}\special{pa 523 -1459}%
+\special{pa 544 -1462}\special{pa 565 -1465}\special{pa 587 -1468}\special{pa 610 -1471}%
+\special{pa 634 -1473}\special{pa 659 -1476}\special{pa 685 -1478}\special{pa 711 -1480}%
+\special{pa 738 -1482}\special{pa 766 -1483}\special{pa 795 -1485}\special{pa 824 -1487}%
+\special{pa 854 -1488}\special{pa 884 -1489}\special{pa 915 -1490}\special{pa 947 -1491}%
+\special{pa 979 -1492}\special{pa 1011 -1493}\special{pa 1044 -1494}\special{pa 1077 -1495}%
+\special{pa 1111 -1495}\special{pa 1145 -1496}\special{pa 1179 -1497}\special{pa 1214 -1497}%
+\special{pa 1249 -1498}\special{pa 1284 -1498}%
+\special{fp}%
+\special{pa 1284 -1498}\special{pa 1271 -1513}\special{pa 1259 -1528}\special{pa 1247 -1543}%
+\special{pa 1235 -1558}\special{pa 1223 -1572}\special{pa 1212 -1586}\special{pa 1201 -1601}%
+\special{pa 1190 -1615}\special{pa 1180 -1628}\special{pa 1169 -1642}\special{pa 1159 -1656}%
+\special{pa 1149 -1670}\special{pa 1140 -1683}\special{pa 1130 -1697}\special{pa 1121 -1711}%
+\special{pa 1112 -1724}\special{pa 1103 -1738}\special{pa 1094 -1752}\special{pa 1085 -1765}%
+\special{pa 1076 -1779}\special{pa 1068 -1793}\special{pa 1059 -1807}\special{pa 1051 -1821}%
+\special{pa 1043 -1835}\special{pa 1035 -1849}\special{pa 1026 -1863}\special{pa 1018 -1878}%
+\special{pa 1010 -1892}\special{pa 1002 -1907}\special{pa 994 -1922}\special{pa 986 -1937}%
+\special{pa 978 -1952}\special{pa 970 -1968}\special{pa 962 -1984}\special{pa 954 -2000}%
+\special{pa 946 -2016}\special{pa 938 -2033}%
+\special{fp}%
+\end{picture}}%%
+}%
+%
+}%
+\newcommand{\crosscoremark}[2][20]{%
+\scalebox{#2}{%
+{\unitlength=0.04mm%
+\begin{picture}%
+( 727.79300, 479.77400)( 209.39300, 264.28200)%
+\special{pn 8}%
+%
+\special{pn #1}%
+\special{pa 839 -1159}\special{pa 847 -1123}\special{pa 855 -1088}\special{pa 862 -1055}%
+\special{pa 870 -1023}\special{pa 877 -992}\special{pa 885 -962}\special{pa 892 -934}%
+\special{pa 899 -907}\special{pa 906 -880}\special{pa 913 -855}\special{pa 920 -831}%
+\special{pa 926 -808}\special{pa 933 -786}\special{pa 939 -764}\special{pa 946 -744}%
+\special{pa 952 -724}\special{pa 958 -705}\special{pa 965 -687}\special{pa 971 -669}%
+\special{pa 977 -652}\special{pa 983 -636}\special{pa 989 -620}\special{pa 995 -604}%
+\special{pa 1001 -589}\special{pa 1007 -575}\special{pa 1013 -560}\special{pa 1019 -547}%
+\special{pa 1025 -533}\special{pa 1031 -520}\special{pa 1037 -506}\special{pa 1043 -493}%
+\special{pa 1049 -481}\special{pa 1055 -468}\special{pa 1061 -455}\special{pa 1067 -442}%
+\special{pa 1073 -429}\special{pa 1079 -416}%
+\special{fp}%
+\special{pa 330 -490}\special{pa 362 -513}\special{pa 394 -536}\special{pa 426 -558}%
+\special{pa 458 -580}\special{pa 490 -602}\special{pa 521 -623}\special{pa 553 -644}%
+\special{pa 584 -664}\special{pa 615 -684}\special{pa 646 -704}\special{pa 676 -724}%
+\special{pa 707 -743}\special{pa 738 -762}\special{pa 768 -780}\special{pa 798 -799}%
+\special{pa 829 -817}\special{pa 859 -835}\special{pa 889 -853}\special{pa 920 -870}%
+\special{pa 950 -888}\special{pa 980 -905}\special{pa 1011 -922}\special{pa 1041 -939}%
+\special{pa 1071 -956}\special{pa 1102 -972}\special{pa 1132 -989}\special{pa 1163 -1006}%
+\special{pa 1194 -1022}\special{pa 1224 -1039}\special{pa 1255 -1055}\special{pa 1286 -1072}%
+\special{pa 1318 -1088}\special{pa 1349 -1105}\special{pa 1380 -1122}\special{pa 1412 -1138}%
+\special{pa 1444 -1155}\special{pa 1476 -1172}%
+\special{fp}%
+\end{picture}}%%
+}%
+%
+}%
+\newcommand{\boxline}[5][8]{%
+\def\tmpcontents{%
+{\unitlength=1mm%
+\begin{picture}%
+( 1.00000, 0.02000)( 0.00000, -0.01000)%
+\special{pn 8}%
+%
+\special{pn #1}%
+\special{pa 0 0}\special{pa 39 0}%
+\special{fp}%
+\end{picture}}%%
+}%
+\setcounter{ketpicctrc}{-#3}%
+\addtocounter{ketpicctrc}{-#5}%
+\setcounter{ketpicctra}{0}%
+\setcounter{ketpicctra}{1}%
+\addtocounter{ketpicctra}{-1}%
+%
+{%
+\loop%
+\addtocounter{ketpicctra}{1}%
+\setcounter{ketpicctrb}{#2}%
+\addtocounter{ketpicctrb}{\value{ketpicctra}}%
+\addtocounter{ketpicctrb}{-1}%
+\settowidth{\Width}{\tmpcontents}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{\tmpcontents}\settodepth{\Depth}{\tmpcontents}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(\theketpicctrb,-#3){\hspace*{\Width}\raisebox{\Height}{\tmpcontents}}%
+\settowidth{\Width}{\tmpcontents}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{\tmpcontents}\settodepth{\Depth}{\tmpcontents}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(\theketpicctrb,\theketpicctrc){\hspace*{\Width}\raisebox{\Height}{\tmpcontents}}%
+%
+\ifnum\theketpicctra<#4%
+\repeat%
+}%
+\def\tmpcontents{%
+{\unitlength=1mm%
+\begin{picture}%
+( 0.02000, 1.00000)( -0.01000, 0.00000)%
+\special{pn 8}%
+%
+\special{pn #1}%
+\special{pa 0 0}\special{pa 0 -39}%
+\special{fp}%
+\end{picture}}%%
+}%
+\setcounter{ketpicctrc}{#2}%
+\addtocounter{ketpicctrc}{#4}%
+\setcounter{ketpicctra}{0}%
+\setcounter{ketpicctra}{1}%
+\addtocounter{ketpicctra}{-1}%
+%
+{%
+\loop%
+\addtocounter{ketpicctra}{1}%
+\setcounter{ketpicctrb}{-#3}%
+\addtocounter{ketpicctrb}{-#5}%
+\addtocounter{ketpicctrb}{\value{ketpicctra}}%
+\addtocounter{ketpicctrb}{-1}%
+\settowidth{\Width}{\tmpcontents}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{\tmpcontents}\settodepth{\Depth}{\tmpcontents}\setlength{\Height}{\Depth}%
+\put(#2,\theketpicctrb){\hspace*{\Width}\raisebox{\Height}{\tmpcontents}}%
+\settowidth{\Width}{\tmpcontents}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{\tmpcontents}\settodepth{\Depth}{\tmpcontents}\setlength{\Height}{\Depth}%
+\put(\theketpicctrc,\theketpicctrb){\hspace*{\Width}\raisebox{\Height}{\tmpcontents}}%
+%
+\ifnum\theketpicctra<#5%
+\repeat%
+}%
+%
+}%
+\newcommand{\boxlinene}[5][8]{%
+\boxline[#1]{#2}{#3}{#4}{#5}%
+%
+}%
+\newcommand{\boxlinec}[5][8]{%
+\setcounter{ketpicctrd}{-#4}%
+\divide\value{ketpicctrd} by 2%
+\addtocounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{#5}%
+\divide\value{ketpicctre} by 2%
+\addtocounter{ketpicctre}{#3}%
+\boxline[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}%
+%
+}%
+\newcommand{\boxlinee}[5][8]{%
+\setcounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{#5}%
+\divide\value{ketpicctre} by 2%
+\addtocounter{ketpicctre}{#3}%
+\boxline[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}%
+%
+}%
+\newcommand{\boxlinew}[5][8]{%
+\setcounter{ketpicctrd}{-#4}%
+\addtocounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{#5}%
+\divide\value{ketpicctre} by 2%
+\addtocounter{ketpicctre}{#3}%
+\boxline[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}%
+%
+}%
+\newcommand{\boxlinen}[5][8]{%
+\setcounter{ketpicctrd}{-#4}%
+\divide\value{ketpicctrd} by 2%
+\addtocounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{#3}%
+\boxline[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}%
+%
+}%
+\newcommand{\boxlines}[5][8]{%
+\setcounter{ketpicctrd}{-#4}%
+\divide\value{ketpicctrd} by 2%
+\addtocounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{#5}%
+\addtocounter{ketpicctre}{#3}%
+\boxline[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}%
+%
+}%
+\newcommand{\boxlinenw}[5][8]{%
+\setcounter{ketpicctrd}{-#4}%
+\addtocounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{#3}%
+\boxline[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}%
+%
+}%
+\newcommand{\boxlinese}[5][8]{%
+\setcounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{#5}%
+\addtocounter{ketpicctre}{#3}%
+\boxline[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}%
+%
+}%
+\newcommand{\boxlinesw}[5][8]{%
+\setcounter{ketpicctrd}{-#4}%
+\addtocounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{#5}%
+\addtocounter{ketpicctre}{#3}%
+\boxline[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}%
+%
+}%
+\newcommand{\ketboxframe}[6][8]{%
+\def\tmpcontents{%
+\setcounter{ketpicctrf}{#4}%
+\addtocounter{ketpicctrf}{-4}%
+\setlength{\Width}{\theketpicctrf\unitlength}%
+\begin{minipage}{\Width}%
+#6%
+\end{minipage}%
+%
+}%
+\setcounter{ketpicctrg}{#2}%
+\addtocounter{ketpicctrg}{2}%
+\setcounter{ketpicctrh}{-#3}%
+\addtocounter{ketpicctrh}{-2}%
+\settowidth{\Width}{\tmpcontents}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{\tmpcontents}\settodepth{\Depth}{\tmpcontents}\setlength{\Height}{-\Height}%
+\put(\theketpicctrg,\theketpicctrh){\hspace*{\Width}\raisebox{\Height}{\tmpcontents}}%
+\boxline[#1]{#2}{#3}{#4}{#5}%
+%
+}%
+\newcommand{\boxframese}[6][8]{%
+\ketboxframe[#1]{#2}{#3}{#4}{#5}{#6}%
+%
+}%
+\newcommand{\boxframec}[6][8]{%
+\setcounter{ketpicctrd}{-#4}%
+\divide\value{ketpicctrd} by 2%
+\addtocounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{-#5}%
+\divide\value{ketpicctre} by 2%
+\addtocounter{ketpicctre}{#3}%
+\ketboxframe[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}{#6}%
+%
+}%
+\newcommand{\boxframee}[6][8]{%
+\setcounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{-#5}%
+\divide\value{ketpicctre} by 2%
+\addtocounter{ketpicctre}{#3}%
+\ketboxframe[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}{#6}%
+%
+}%
+\newcommand{\boxframew}[6][8]{%
+\setcounter{ketpicctrd}{-#4}%
+\addtocounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{-#5}%
+\divide\value{ketpicctre} by 2%
+\addtocounter{ketpicctre}{#3}%
+\ketboxframe[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}{#6}%
+%
+}%
+\newcommand{\boxframen}[6][8]{%
+\setcounter{ketpicctrd}{-#4}%
+\divide\value{ketpicctrd} by 2%
+\addtocounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{#3}%
+\addtocounter{ketpicctre}{-#5}%
+\ketboxframe[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}{#6}%
+%
+}%
+\newcommand{\boxframes}[6][8]{%
+\setcounter{ketpicctrd}{-#4}%
+\divide\value{ketpicctrd} by 2%
+\addtocounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{#3}%
+\ketboxframe[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}{#6}%
+%
+}%
+\newcommand{\boxframenw}[6][8]{%
+\setcounter{ketpicctrd}{-#4}%
+\addtocounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{#3}%
+\addtocounter{ketpicctre}{-#5}%
+\ketboxframe[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}{#6}%
+%
+}%
+\newcommand{\boxframene}[6][8]{%
+\setcounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{#3}%
+\addtocounter{ketpicctre}{-#5}%
+\ketboxframe[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}{#6}%
+%
+}%
+\newcommand{\boxframesw}[6][8]{%
+\setcounter{ketpicctrd}{-#4}%
+\addtocounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{#3}%
+\ketboxframe[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}{#6}%
+%
+}%
+\newcommand{\circleline}[4][8]{%
+\settowidth{\Width}{\circlemark[#1]{#4}}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{\circlemark[#1]{#4}}\settodepth{\Depth}{\circlemark[#1]{#4}}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(#2,-#3){\hspace*{\Width}\raisebox{\Height}{\circlemark[#1]{#4}}}%
+%
+}%
+\newcommand{\hjaggyline}[4][8]{%
+\def\tmpcontents{%
+{\unitlength=1mm%
+\begin{picture}%
+( 1.00000, 1.00000)( 0.00000, 0.00000)%
+\special{pn 8}%
+%
+\special{pn #1}%
+\special{pa 0 0}\special{pa 39 -39}%
+\special{fp}%
+\end{picture}}%%
+}%
+\def\tmpcontentsb{%
+{\unitlength=1mm%
+\begin{picture}%
+( 1.00000, 1.00000)( 0.00000, 0.00000)%
+\special{pn 8}%
+%
+\special{pn #1}%
+\special{pa 0 -39}\special{pa 39 0}%
+\special{fp}%
+\end{picture}}%%
+}%
+\setcounter{ketpicctra}{0}%
+\setcounter{ketpicctra}{1}%
+\addtocounter{ketpicctra}{-1}%
+%
+{%
+\loop%
+\addtocounter{ketpicctra}{1}%
+\setcounter{ketpicctrb}{#2}%
+\addtocounter{ketpicctrb}{\value{ketpicctra}}%
+\addtocounter{ketpicctrb}{-1}%
+\setcounter{ketpicctrc}{\value{ketpicctra}}%
+\divide\value{ketpicctrc} by 2%
+\multiply\value{ketpicctrc} by 2%
+%
+{%
+\ifnum %
+\theketpicctrc<\theketpicctra %
+\settowidth{\Width}{\tmpcontents}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{\tmpcontents}\settodepth{\Depth}{\tmpcontents}\setlength{\Height}{\Depth}%
+\put(\theketpicctrb,-#3){\hspace*{\Width}\raisebox{\Height}{\tmpcontents}}%
+%
+\else%
+\settowidth{\Width}{\tmpcontentsb}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{\tmpcontentsb}\settodepth{\Depth}{\tmpcontentsb}\setlength{\Height}{\Depth}%
+\put(\theketpicctrb,-#3){\hspace*{\Width}\raisebox{\Height}{\tmpcontentsb}}%
+%
+\fi%
+}%
+%
+\ifnum\theketpicctra<#4%
+\repeat%
+}%
+%
+}%
+\newcommand{\vjaggyline}[4][8]{%
+\def\tmpcontents{%
+{\unitlength=1mm%
+\begin{picture}%
+( 1.00000, 1.00000)( 0.00000, -1.00000)%
+\special{pn 8}%
+%
+\special{pn #1}%
+\special{pa 0 0}\special{pa 39 39}%
+\special{fp}%
+\end{picture}}%%
+}%
+\def\tmpcontentsb{%
+{\unitlength=1mm%
+\begin{picture}%
+( 1.00000, 1.00000)( 0.00000, -1.00000)%
+\special{pn 8}%
+%
+\special{pn #1}%
+\special{pa 39 0}\special{pa 0 39}%
+\special{fp}%
+\end{picture}}%%
+}%
+\setcounter{ketpicctra}{0}%
+\setcounter{ketpicctra}{1}%
+\addtocounter{ketpicctra}{-1}%
+%
+{%
+\loop%
+\addtocounter{ketpicctra}{1}%
+\setcounter{ketpicctrb}{-#3}%
+\addtocounter{ketpicctrb}{-\value{ketpicctra}}%
+\addtocounter{ketpicctrb}{1}%
+\setcounter{ketpicctrc}{\value{ketpicctra}}%
+\divide\value{ketpicctrc} by 2%
+\multiply\value{ketpicctrc} by 2%
+%
+{%
+\ifnum %
+\theketpicctrc<\theketpicctra %
+\settowidth{\Width}{\tmpcontents}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{\tmpcontents}\settodepth{\Depth}{\tmpcontents}\setlength{\Height}{-\Height}%
+\put(#2,\theketpicctrb){\hspace*{\Width}\raisebox{\Height}{\tmpcontents}}%
+%
+\else%
+\settowidth{\Width}{\tmpcontentsb}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{\tmpcontentsb}\settodepth{\Depth}{\tmpcontentsb}\setlength{\Height}{-\Height}%
+\put(#2,\theketpicctrb){\hspace*{\Width}\raisebox{\Height}{\tmpcontentsb}}%
+%
+\fi%
+}%
+%
+\ifnum\theketpicctra<#4%
+\repeat%
+}%
+%
+}%
+\newcommand{\hjaggylineb}[4][8]{%
+\def\tmpcontents{%
+{\unitlength=1mm%
+\begin{picture}%
+( 1.00000, 1.00000)( 0.00000, 0.00000)%
+\special{pn 8}%
+%
+\special{pn #1}%
+\special{pa 0 0}\special{pa 39 -39}%
+\special{fp}%
+\end{picture}}%%
+}%
+\def\tmpcontentsb{%
+{\unitlength=1mm%
+\begin{picture}%
+( 1.00000, 1.00000)( 0.00000, 0.00000)%
+\special{pn 8}%
+%
+\special{pn #1}%
+\special{pa 0 -39}\special{pa 39 0}%
+\special{fp}%
+\end{picture}}%%
+}%
+\setcounter{ketpicctra}{0}%
+\setcounter{ketpicctra}{1}%
+\addtocounter{ketpicctra}{-1}%
+%
+{%
+\loop%
+\addtocounter{ketpicctra}{1}%
+\setcounter{ketpicctrb}{#2}%
+\addtocounter{ketpicctrb}{\value{ketpicctra}}%
+\addtocounter{ketpicctrb}{-1}%
+\setcounter{ketpicctrc}{\value{ketpicctra}}%
+\divide\value{ketpicctrc} by 2%
+\multiply\value{ketpicctrc} by 2%
+%
+{%
+\ifnum %
+\theketpicctrc<\theketpicctra %
+\settowidth{\Width}{\tmpcontentsb}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{\tmpcontentsb}\settodepth{\Depth}{\tmpcontentsb}\setlength{\Height}{-\Height}%
+\put(\theketpicctrb,-#3){\hspace*{\Width}\raisebox{\Height}{\tmpcontentsb}}%
+%
+\else%
+\settowidth{\Width}{\tmpcontents}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{\tmpcontents}\settodepth{\Depth}{\tmpcontents}\setlength{\Height}{-\Height}%
+\put(\theketpicctrb,-#3){\hspace*{\Width}\raisebox{\Height}{\tmpcontents}}%
+%
+\fi%
+}%
+%
+\ifnum\theketpicctra<#4%
+\repeat%
+}%
+%
+}%
+\newcommand{\vjaggylineb}[4][8]{%
+\def\tmpcontents{%
+{\unitlength=1mm%
+\begin{picture}%
+( 1.00000, 1.00000)( 0.00000, -1.00000)%
+\special{pn 8}%
+%
+\special{pn #1}%
+\special{pa 0 0}\special{pa 39 39}%
+\special{fp}%
+\end{picture}}%%
+}%
+\def\tmpcontentsb{%
+{\unitlength=1mm%
+\begin{picture}%
+( 1.00000, 1.00000)( 0.00000, -1.00000)%
+\special{pn 8}%
+%
+\special{pn #1}%
+\special{pa 39 0}\special{pa 0 39}%
+\special{fp}%
+\end{picture}}%%
+}%
+\setcounter{ketpicctra}{0}%
+\setcounter{ketpicctra}{1}%
+\addtocounter{ketpicctra}{-1}%
+%
+{%
+\loop%
+\addtocounter{ketpicctra}{1}%
+\setcounter{ketpicctrb}{-#3}%
+\addtocounter{ketpicctrb}{-\value{ketpicctra}}%
+\addtocounter{ketpicctrb}{1}%
+\setcounter{ketpicctrc}{\value{ketpicctra}}%
+\divide\value{ketpicctrc} by 2%
+\multiply\value{ketpicctrc} by 2%
+%
+{%
+\ifnum %
+\theketpicctrc<\theketpicctra %
+\settowidth{\Width}{\tmpcontentsb}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{\tmpcontentsb}\settodepth{\Depth}{\tmpcontentsb}\setlength{\Height}{-\Height}%
+\put(#2,\theketpicctrb){\hspace*{\Width}\raisebox{\Height}{\tmpcontentsb}}%
+%
+\else%
+\settowidth{\Width}{\tmpcontents}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{\tmpcontents}\settodepth{\Depth}{\tmpcontents}\setlength{\Height}{-\Height}%
+\put(#2,\theketpicctrb){\hspace*{\Width}\raisebox{\Height}{\tmpcontents}}%
+%
+\fi%
+}%
+%
+\ifnum\theketpicctra<#4%
+\repeat%
+}%
+%
+}%
+\newcommand{\jaggyboxframe}[6][8]{%
+\def\tmpcontents{%
+\setcounter{ketpicctrf}{#4}%
+\addtocounter{ketpicctrf}{-4}%
+\setlength{\Width}{\theketpicctrf\unitlength}%
+\begin{minipage}{\Width}%
+#6%
+\end{minipage}%
+%
+}%
+\setcounter{ketpicctrg}{#2}%
+\addtocounter{ketpicctrg}{2}%
+\setcounter{ketpicctrh}{-#3}%
+\addtocounter{ketpicctrh}{-2}%
+\settowidth{\Width}{\tmpcontents}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{\tmpcontents}\settodepth{\Depth}{\tmpcontents}\setlength{\Height}{-\Height}%
+\put(\theketpicctrg,\theketpicctrh){\hspace*{\Width}\raisebox{\Height}{\tmpcontents}}%
+\setcounter{ketpicctrg}{#2}%
+\setcounter{ketpicctrh}{#3}%
+\hjaggylineb[#1]{\theketpicctrg}{\theketpicctrh}{#4}%
+\vjaggylineb[#1]{\theketpicctrg}{\theketpicctrh}{#5}%
+\setcounter{ketpicctrg}{#2}%
+\setcounter{ketpicctrh}{#3}%
+\addtocounter{ketpicctrh}{#5}%
+\hjaggyline[#1]{\theketpicctrg}{\theketpicctrh}{#4}%
+\setcounter{ketpicctrg}{#2}%
+\addtocounter{ketpicctrg}{#4}%
+\setcounter{ketpicctrh}{#3}%
+\vjaggyline[#1]{\theketpicctrg}{\theketpicctrh}{#5}%
+%
+}%
+\newcommand{\jaggyboxframese}[6][8]{%
+\jaggyboxframe[#1]{#2}{#3}{#4}{#5}{#6}%
+%
+}%
+\newcommand{\jaggyboxframec}[6][8]{%
+\setcounter{ketpicctrd}{-#4}%
+\divide\value{ketpicctrd} by 2%
+\addtocounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{-#5}%
+\divide\value{ketpicctre} by 2%
+\addtocounter{ketpicctre}{#3}%
+\jaggyboxframe[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}{#6}%
+%
+}%
+\newcommand{\jaggyboxframee}[6][8]{%
+\setcounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{-#5}%
+\divide\value{ketpicctre} by 2%
+\addtocounter{ketpicctre}{#3}%
+\jaggyboxframe[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}{#6}%
+%
+}%
+\newcommand{\jaggyboxframew}[6][8]{%
+\setcounter{ketpicctrd}{-#4}%
+\addtocounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{-#5}%
+\divide\value{ketpicctre} by 2%
+\addtocounter{ketpicctre}{#3}%
+\jaggyboxframe[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}{#6}%
+%
+}%
+\newcommand{\jaggyboxframen}[6][8]{%
+\setcounter{ketpicctrd}{-#4}%
+\divide\value{ketpicctrd} by 2%
+\addtocounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{#3}%
+\addtocounter{ketpicctre}{-#5}%
+\jaggyboxframe[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}{#6}%
+%
+}%
+\newcommand{\jaggyboxframes}[6][8]{%
+\setcounter{ketpicctrd}{-#4}%
+\divide\value{ketpicctrd} by 2%
+\addtocounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{#3}%
+\jaggyboxframe[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}{#6}%
+%
+}%
+\newcommand{\jaggyboxframenw}[6][8]{%
+\setcounter{ketpicctrd}{-#4}%
+\addtocounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{#3}%
+\addtocounter{ketpicctre}{-#5}%
+\jaggyboxframe[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}{#6}%
+%
+}%
+\newcommand{\jaggyboxframene}[6][8]{%
+\setcounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{#3}%
+\addtocounter{ketpicctre}{-#5}%
+\jaggyboxframe[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}{#6}%
+%
+}%
+\newcommand{\jaggyboxframesw}[6][8]{%
+\setcounter{ketpicctrd}{-#4}%
+\addtocounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{#3}%
+\jaggyboxframe[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}{#6}%
+%
+}%
+\newcommand{\hdialine}[4][8]{%
+\def\tmpcontents{%
+{\unitlength=1mm%
+\begin{picture}%
+( 1.00000, 1.00000)( 0.00000, -0.50000)%
+\special{pn 8}%
+%
+\special{pn #1}%
+\special{pa 39 -20}\special{pa 0 0}\special{pa 39 20}%
+\special{fp}%
+\end{picture}}%%
+}%
+\def\tmpcontentsb{%
+{\unitlength=1mm%
+\begin{picture}%
+( 1.00000, 1.00000)( 0.00000, -0.50000)%
+\special{pn 8}%
+%
+\special{pn #1}%
+\special{pa 0 -20}\special{pa 39 0}\special{pa 0 20}%
+\special{fp}%
+\end{picture}}%%
+}%
+\setcounter{ketpicctra}{0}%
+\setcounter{ketpicctra}{1}%
+\addtocounter{ketpicctra}{-1}%
+%
+{%
+\loop%
+\addtocounter{ketpicctra}{1}%
+\setcounter{ketpicctrb}{#2}%
+\addtocounter{ketpicctrb}{\value{ketpicctra}}%
+\addtocounter{ketpicctrb}{-1}%
+\setcounter{ketpicctrc}{\value{ketpicctra}}%
+\divide\value{ketpicctrc} by 2%
+\multiply\value{ketpicctrc} by 2%
+%
+{%
+\ifnum %
+\theketpicctrc<\theketpicctra %
+\settowidth{\Width}{\tmpcontents}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{\tmpcontents}\settodepth{\Depth}{\tmpcontents}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(\theketpicctrb,-#3){\hspace*{\Width}\raisebox{\Height}{\tmpcontents}}%
+%
+\else%
+\settowidth{\Width}{\tmpcontentsb}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{\tmpcontentsb}\settodepth{\Depth}{\tmpcontentsb}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(\theketpicctrb,-#3){\hspace*{\Width}\raisebox{\Height}{\tmpcontentsb}}%
+%
+\fi%
+}%
+%
+\ifnum\theketpicctra<#4%
+\repeat%
+}%
+%
+}%
+\newcommand{\vdialine}[4][8]{%
+\def\tmpcontents{%
+{\unitlength=1mm%
+\begin{picture}%
+( 1.00000, 1.00000)( -0.50000, 0.00000)%
+\special{pn 8}%
+%
+\special{pn #1}%
+\special{pa -20 0}\special{pa 0 -39}\special{pa 20 0}%
+\special{fp}%
+\end{picture}}%%
+}%
+\def\tmpcontentsb{%
+{\unitlength=1mm%
+\begin{picture}%
+( 1.00000, 1.00000)( -0.50000, 0.00000)%
+\special{pn 8}%
+%
+\special{pn #1}%
+\special{pa -20 -39}\special{pa 0 0}\special{pa 20 -39}%
+\special{fp}%
+\end{picture}}%%
+}%
+\setcounter{ketpicctra}{0}%
+\setcounter{ketpicctra}{1}%
+\addtocounter{ketpicctra}{-1}%
+%
+{%
+\loop%
+\addtocounter{ketpicctra}{1}%
+\setcounter{ketpicctrb}{-#3}%
+\addtocounter{ketpicctrb}{-\value{ketpicctra}}%
+\addtocounter{ketpicctrb}{1}%
+\setcounter{ketpicctrc}{\value{ketpicctra}}%
+\divide\value{ketpicctrc} by 2%
+\multiply\value{ketpicctrc} by 2%
+%
+{%
+\ifnum %
+\theketpicctrc<\theketpicctra %
+\settowidth{\Width}{\tmpcontents}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{\tmpcontents}\settodepth{\Depth}{\tmpcontents}\setlength{\Height}{-\Height}%
+\put(#2,\theketpicctrb){\hspace*{\Width}\raisebox{\Height}{\tmpcontents}}%
+%
+\else%
+\settowidth{\Width}{\tmpcontentsb}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{\tmpcontentsb}\settodepth{\Depth}{\tmpcontentsb}\setlength{\Height}{-\Height}%
+\put(#2,\theketpicctrb){\hspace*{\Width}\raisebox{\Height}{\tmpcontentsb}}%
+%
+\fi%
+}%
+%
+\ifnum\theketpicctra<#4%
+\repeat%
+}%
+%
+}%
+\newcommand{\diaboxframe}[6][4]{%
+\def\tmpcontents{%
+\setcounter{ketpicctrf}{#4}%
+\addtocounter{ketpicctrf}{-4}%
+\setlength{\Width}{\theketpicctrf\unitlength}%
+\begin{minipage}{\Width}%
+#6%
+\end{minipage}%
+%
+}%
+\setcounter{ketpicctrg}{#2}%
+\addtocounter{ketpicctrg}{2}%
+\setcounter{ketpicctrh}{-#3}%
+\addtocounter{ketpicctrh}{-2}%
+\settowidth{\Width}{\tmpcontents}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{\tmpcontents}\settodepth{\Depth}{\tmpcontents}\setlength{\Height}{-\Height}%
+\put(\theketpicctrg,\theketpicctrh){\hspace*{\Width}\raisebox{\Height}{\tmpcontents}}%
+\setcounter{ketpicctrh}{#3}%
+\hdialine[#1]{#2}{\theketpicctrh}{#4}%
+\setcounter{ketpicctrh}{#3}%
+\addtocounter{ketpicctrh}{#5}%
+\hdialine[#1]{#2}{\theketpicctrh}{#4}%
+\setcounter{ketpicctrg}{#2}%
+\vdialine[#1]{\theketpicctrg}{#3}{#5}%
+\setcounter{ketpicctrg}{#2}%
+\addtocounter{ketpicctrg}{#4}%
+\vdialine[#1]{\theketpicctrg}{#3}{#5}%
+%
+}%
+\newcommand{\diaboxframese}[6][8]{%
+\diaboxframe[#1]{#2}{#3}{#4}{#5}{#6}%
+%
+}%
+\newcommand{\diaboxframec}[6][8]{%
+\setcounter{ketpicctrd}{-#4}%
+\divide\value{ketpicctrd} by 2%
+\addtocounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{-#5}%
+\divide\value{ketpicctre} by 2%
+\addtocounter{ketpicctre}{#3}%
+\diaboxframe[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}{#6}%
+%
+}%
+\newcommand{\diaboxframee}[6][8]{%
+\setcounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{-#5}%
+\divide\value{ketpicctre} by 2%
+\addtocounter{ketpicctre}{#3}%
+\diaboxframe[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}{#6}%
+%
+}%
+\newcommand{\diaboxframew}[6][8]{%
+\setcounter{ketpicctrd}{-#4}%
+\addtocounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{-#5}%
+\divide\value{ketpicctre} by 2%
+\addtocounter{ketpicctre}{#3}%
+\diaboxframe[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}{#6}%
+%
+}%
+\newcommand{\diaboxframen}[6][8]{%
+\setcounter{ketpicctrd}{-#4}%
+\divide\value{ketpicctrd} by 2%
+\addtocounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{-#5}%
+\addtocounter{ketpicctre}{#3}%
+\diaboxframe[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}{#6}%
+%
+}%
+\newcommand{\diaboxframes}[6][8]{%
+\setcounter{ketpicctrd}{-#4}%
+\divide\value{ketpicctrd} by 2%
+\addtocounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{#3}%
+\diaboxframe[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}{#6}%
+%
+}%
+\newcommand{\diaboxframenw}[6][8]{%
+\setcounter{ketpicctrd}{-#4}%
+\addtocounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{-#5}%
+\addtocounter{ketpicctre}{#3}%
+\diaboxframe[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}{#6}%
+%
+}%
+\newcommand{\diaboxframene}[6][8]{%
+\setcounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{-#5}%
+\addtocounter{ketpicctre}{#3}%
+\diaboxframe[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}{#6}%
+%
+}%
+\newcommand{\diaboxframesw}[6][8]{%
+\setcounter{ketpicctrd}{-#4}%
+\addtocounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{#3}%
+\diaboxframe[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}{#6}%
+%
+}%
+\newcommand{\hdashline}[4][8]{%
+\def\tmpcontents{%
+{\unitlength=1mm%
+\begin{picture}%
+( 1.00000, 0.02000)( 0.00000, -0.01000)%
+\special{pn 8}%
+%
+\special{pn #1}%
+\special{pa 0 0}\special{pa 20 0}%
+\special{fp}%
+\end{picture}}%%
+}%
+\setcounter{ketpicctra}{0}%
+\setcounter{ketpicctra}{1}%
+\addtocounter{ketpicctra}{-1}%
+%
+{%
+\loop%
+\addtocounter{ketpicctra}{1}%
+\setcounter{ketpicctrb}{#2}%
+\addtocounter{ketpicctrb}{\value{ketpicctra}}%
+\addtocounter{ketpicctrb}{-1}%
+\settowidth{\Width}{\tmpcontents}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{\tmpcontents}\settodepth{\Depth}{\tmpcontents}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(\theketpicctrb,-#3){\hspace*{\Width}\raisebox{\Height}{\tmpcontents}}%
+%
+\ifnum\theketpicctra<#4%
+\repeat%
+}%
+%
+}%
+\newcommand{\hdashlineb}[4][8]{%
+\def\tmpcontents{%
+{\unitlength=1mm%
+\begin{picture}%
+( 1.00000, 0.02000)( 0.00000, -0.01000)%
+\special{pn 8}%
+%
+\special{pn #1}%
+\special{pa 20 0}\special{pa 39 0}%
+\special{fp}%
+\end{picture}}%%
+}%
+\setcounter{ketpicctra}{0}%
+\setcounter{ketpicctra}{1}%
+\addtocounter{ketpicctra}{-1}%
+%
+{%
+\loop%
+\addtocounter{ketpicctra}{1}%
+\setcounter{ketpicctrb}{#2}%
+\addtocounter{ketpicctrb}{\value{ketpicctra}}%
+\addtocounter{ketpicctrb}{-1}%
+\settowidth{\Width}{\tmpcontents}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{\tmpcontents}\settodepth{\Depth}{\tmpcontents}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(\theketpicctrb,-#3){\hspace*{\Width}\raisebox{\Height}{\tmpcontents}}%
+%
+\ifnum\theketpicctra<#4%
+\repeat%
+}%
+%
+}%
+\newcommand{\vdashline}[4][8]{%
+\def\tmpcontents{%
+{\unitlength=1mm%
+\begin{picture}%
+( 0.02000, 1.00000)( -0.01000, 0.00000)%
+\special{pn 8}%
+%
+\special{pn #1}%
+\special{pa 0 0}\special{pa 0 -20}%
+\special{fp}%
+\end{picture}}%%
+}%
+\setcounter{ketpicctra}{0}%
+\setcounter{ketpicctra}{1}%
+\addtocounter{ketpicctra}{-1}%
+%
+{%
+\loop%
+\addtocounter{ketpicctra}{1}%
+\setcounter{ketpicctrb}{-#3}%
+\addtocounter{ketpicctrb}{-\value{ketpicctra}}%
+\addtocounter{ketpicctrb}{1}%
+\settowidth{\Width}{\tmpcontents}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{\tmpcontents}\settodepth{\Depth}{\tmpcontents}\setlength{\Height}{-\Height}%
+\put(#2,\theketpicctrb){\hspace*{\Width}\raisebox{\Height}{\tmpcontents}}%
+%
+\ifnum\theketpicctra<#4%
+\repeat%
+}%
+%
+}%
+\newcommand{\vdashlineb}[4][8]{%
+\def\tmpcontents{%
+{\unitlength=1mm%
+\begin{picture}%
+( 0.02000, 1.00000)( -0.01000, 0.00000)%
+\special{pn 8}%
+%
+\special{pn #1}%
+\special{pa 0 -20}\special{pa 0 -39}%
+\special{fp}%
+\end{picture}}%%
+}%
+\setcounter{ketpicctra}{0}%
+\setcounter{ketpicctra}{1}%
+\addtocounter{ketpicctra}{-1}%
+%
+{%
+\loop%
+\addtocounter{ketpicctra}{1}%
+\setcounter{ketpicctrb}{-#3}%
+\addtocounter{ketpicctrb}{-\value{ketpicctra}}%
+\addtocounter{ketpicctrb}{1}%
+\settowidth{\Width}{\tmpcontents}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{\tmpcontents}\settodepth{\Depth}{\tmpcontents}\setlength{\Height}{-\Height}%
+\put(#2,\theketpicctrb){\hspace*{\Width}\raisebox{\Height}{\tmpcontents}}%
+%
+\ifnum\theketpicctra<#4%
+\repeat%
+}%
+%
+}%
+\newcommand{\dashboxframe}[6][4]{%
+\def\tmpcontents{%
+\setcounter{ketpicctrf}{#4}%
+\addtocounter{ketpicctrf}{-4}%
+\setlength{\Width}{\theketpicctrf\unitlength}%
+\begin{minipage}{\Width}%
+#6%
+\end{minipage}%
+%
+}%
+\setcounter{ketpicctrg}{#2}%
+\addtocounter{ketpicctrg}{2}%
+\setcounter{ketpicctrh}{-#3}%
+\addtocounter{ketpicctrh}{-2}%
+\settowidth{\Width}{\tmpcontents}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{\tmpcontents}\settodepth{\Depth}{\tmpcontents}\setlength{\Height}{-\Height}%
+\put(\theketpicctrg,\theketpicctrh){\hspace*{\Width}\raisebox{\Height}{\tmpcontents}}%
+\setcounter{ketpicctrh}{#3}%
+\hdashline[#1]{#2}{\theketpicctrh}{#4}%
+\setcounter{ketpicctrh}{#3}%
+\addtocounter{ketpicctrh}{#5}%
+\hdashlineb[#1]{#2}{\theketpicctrh}{#4}%
+\setcounter{ketpicctrg}{#2}%
+\vdashline[#1]{\theketpicctrg}{#3}{#5}%
+\setcounter{ketpicctrg}{#2}%
+\addtocounter{ketpicctrg}{#4}%
+\vdashlineb[#1]{\theketpicctrg}{#3}{#5}%
+%
+}%
+\newcommand{\dashboxframese}[6][8]{%
+\dashboxframe[#1]{#2}{#3}{#4}{#5}{#6}%
+%
+}%
+\newcommand{\dashboxframec}[6][8]{%
+\setcounter{ketpicctrd}{-#4}%
+\divide\value{ketpicctrd} by 2%
+\addtocounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{-#5}%
+\divide\value{ketpicctre} by 2%
+\addtocounter{ketpicctre}{#3}%
+\dashboxframe[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}{#6}%
+%
+}%
+\newcommand{\dashboxframee}[6][8]{%
+\setcounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{-#5}%
+\divide\value{ketpicctre} by 2%
+\addtocounter{ketpicctre}{#3}%
+\dashboxframe[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}{#6}%
+%
+}%
+\newcommand{\dashboxframew}[6][8]{%
+\setcounter{ketpicctrd}{-#4}%
+\addtocounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{-#5}%
+\divide\value{ketpicctre} by 2%
+\addtocounter{ketpicctre}{#3}%
+\dashboxframe[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}{#6}%
+%
+}%
+\newcommand{\dashboxframen}[6][8]{%
+\setcounter{ketpicctrd}{-#4}%
+\divide\value{ketpicctrd} by 2%
+\addtocounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{#3}%
+\addtocounter{ketpicctre}{-#5}%
+\dashboxframe[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}{#6}%
+%
+}%
+\newcommand{\dashboxframes}[6][8]{%
+\setcounter{ketpicctrd}{-#4}%
+\divide\value{ketpicctrd} by 2%
+\addtocounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{#3}%
+\dashboxframe[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}{#6}%
+%
+}%
+\newcommand{\dashboxframenw}[6][8]{%
+\setcounter{ketpicctrd}{-#4}%
+\addtocounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{#3}%
+\addtocounter{ketpicctre}{-#5}%
+\dashboxframe[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}{#6}%
+%
+}%
+\newcommand{\dashboxframene}[6][8]{%
+\setcounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{#3}%
+\addtocounter{ketpicctre}{-#5}%
+\dashboxframe[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}{#6}%
+%
+}%
+\newcommand{\dashboxframesw}[6][8]{%
+\setcounter{ketpicctrd}{-#4}%
+\addtocounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{#3}%
+\dashboxframe[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}{#6}%
+%
+}%
+\newcommand{\boxlinep}[6][8]{%
+\def\tmpcontents{%
+{\unitlength=1mm%
+\begin{picture}%
+( 1.00000, 0.02000)( 0.00000, -0.01000)%
+\special{pn 8}%
+%
+\special{pn #1}%
+\special{pa 0 0}\special{pa 39 0}%
+\special{fp}%
+\end{picture}}%%
+}%
+\def\tmpcontentsb{%
+{\unitlength=0.1mm%
+\begin{picture}%
+( 1.00000, 0.02000)( 0.00000, -0.01000)%
+\special{pn 8}%
+%
+\special{pn #1}%
+\special{pa 0 0}\special{pa 4 0}%
+\special{fp}%
+\end{picture}}%%
+}%
+{\unitlength=0.1mm%
+\setcounter{ketpicctrc}{-#3}%
+\addtocounter{ketpicctrc}{-#5}%
+\setcounter{ketpicctra}{0}%
+\setcounter{ketpicctra}{1}%
+\addtocounter{ketpicctra}{-1}%
+%
+{%
+\loop%
+\addtocounter{ketpicctra}{1}%
+\setcounter{ketpicctrb}{\value{ketpicctra}}%
+\addtocounter{ketpicctrb}{9}%
+%
+{%
+\ifnum %
+\theketpicctrb>#4 %
+\setcounter{ketpicctrb}{#2}%
+\addtocounter{ketpicctrb}{\value{ketpicctra}}%
+\settowidth{\Width}{{\color{#6}\tmpcontentsb}}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{{\color{#6}\tmpcontentsb}}\settodepth{\Depth}{{\color{#6}\tmpcontentsb}}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(\theketpicctrb,-#3){\hspace*{\Width}\raisebox{\Height}{{\color{#6}\tmpcontentsb}}}%
+\settowidth{\Width}{{\color{#6}\tmpcontentsb}}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{{\color{#6}\tmpcontentsb}}\settodepth{\Depth}{{\color{#6}\tmpcontentsb}}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(\theketpicctrb,\theketpicctrc){\hspace*{\Width}\raisebox{\Height}{{\color{#6}\tmpcontentsb}}}%
+%
+\else%
+\addtocounter{ketpicctra}{9}%
+\setcounter{ketpicctrb}{#2}%
+\addtocounter{ketpicctrb}{\value{ketpicctra}}%
+\settowidth{\Width}{{\color{#6}\tmpcontents}}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{{\color{#6}\tmpcontents}}\settodepth{\Depth}{{\color{#6}\tmpcontents}}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(\theketpicctrb,-#3){\hspace*{\Width}\raisebox{\Height}{{\color{#6}\tmpcontents}}}%
+\settowidth{\Width}{{\color{#6}\tmpcontents}}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{{\color{#6}\tmpcontents}}\settodepth{\Depth}{{\color{#6}\tmpcontents}}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(\theketpicctrb,\theketpicctrc){\hspace*{\Width}\raisebox{\Height}{{\color{#6}\tmpcontents}}}%
+%
+\fi%
+}%
+%
+\ifnum\theketpicctra<#4%
+\repeat%
+}%
+}%
+\def\tmpcontents{%
+{\unitlength=1mm%
+\begin{picture}%
+( 0.02000, 1.00000)( -0.01000, 0.00000)%
+\special{pn 8}%
+%
+\special{pn #1}%
+\special{pa 0 0}\special{pa 0 -39}%
+\special{fp}%
+\end{picture}}%%
+}%
+\def\tmpcontentsb{%
+{\unitlength=0.1mm%
+\begin{picture}%
+( 0.02000, 1.00000)( -0.01000, 0.00000)%
+\special{pn 8}%
+%
+\special{pn #1}%
+\special{pa 0 0}\special{pa 0 -4}%
+\special{fp}%
+\end{picture}}%%
+}%
+{\unitlength=0.1mm%
+\setcounter{ketpicctrc}{#2}%
+\addtocounter{ketpicctrc}{#4}%
+\setcounter{ketpicctra}{0}%
+\setcounter{ketpicctra}{1}%
+\addtocounter{ketpicctra}{-1}%
+%
+{%
+\loop%
+\addtocounter{ketpicctra}{1}%
+\setcounter{ketpicctrb}{\value{ketpicctra}}%
+\addtocounter{ketpicctrb}{9}%
+%
+{%
+\ifnum %
+\theketpicctrb>#5 %
+\setcounter{ketpicctrb}{-#3}%
+\addtocounter{ketpicctrb}{-\value{ketpicctra}}%
+\settowidth{\Width}{{\color{#6}\tmpcontentsb}}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{{\color{#6}\tmpcontentsb}}\settodepth{\Depth}{{\color{#6}\tmpcontentsb}}\setlength{\Height}{\Depth}%
+\put(#2,\theketpicctrb){\hspace*{\Width}\raisebox{\Height}{{\color{#6}\tmpcontentsb}}}%
+\settowidth{\Width}{{\color{#6}\tmpcontentsb}}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{{\color{#6}\tmpcontentsb}}\settodepth{\Depth}{{\color{#6}\tmpcontentsb}}\setlength{\Height}{\Depth}%
+\put(\theketpicctrc,\theketpicctrb){\hspace*{\Width}\raisebox{\Height}{{\color{#6}\tmpcontentsb}}}%
+%
+\else%
+\addtocounter{ketpicctra}{9}%
+\setcounter{ketpicctrb}{-#3}%
+\addtocounter{ketpicctrb}{-\value{ketpicctra}}%
+\settowidth{\Width}{{\color{#6}\tmpcontents}}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{{\color{#6}\tmpcontents}}\settodepth{\Depth}{{\color{#6}\tmpcontents}}\setlength{\Height}{\Depth}%
+\put(#2,\theketpicctrb){\hspace*{\Width}\raisebox{\Height}{{\color{#6}\tmpcontents}}}%
+\settowidth{\Width}{{\color{#6}\tmpcontents}}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{{\color{#6}\tmpcontents}}\settodepth{\Depth}{{\color{#6}\tmpcontents}}\setlength{\Height}{\Depth}%
+\put(\theketpicctrc,\theketpicctrb){\hspace*{\Width}\raisebox{\Height}{{\color{#6}\tmpcontents}}}%
+%
+\fi%
+}%
+%
+\ifnum\theketpicctra<#5%
+\repeat%
+}%
+}%
+%
+}%
+\newcommand{\shadeframep}[6][1]{%
+\def\tmpcontents{%
+{\unitlength=1mm%
+\begin{picture}%
+( 100.00000, 100.00000)( 0.00000, 0.00000)%
+\special{pn 8}%
+%
+{\color{#1}%
+\special{pa 0 0}\special{pa 3937 0}\special{pa 3937 -3937}\special{pa 0 -3937}\special{pa 0 0}%
+\special{sh 1}\special{ip}%
+}%
+\end{picture}}%%
+}%
+{\unitlength=0.1mm%
+%
+{%
+\ifnum %
+#4<100 %
+%
+{%
+\ifnum %
+#5<100 %
+\settowidth{\Width}{{\color{#6}\scalebox{0.0#4}[0.0#5]{\tmpcontents}}}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{{\color{#6}\scalebox{0.0#4}[0.0#5]{\tmpcontents}}}\settodepth{\Depth}{{\color{#6}\scalebox{0.0#4}[0.0#5]{\tmpcontents}}}\setlength{\Height}{-\Height}%
+\put(#2,-#3){\hspace*{\Width}\raisebox{\Height}{{\color{#6}\scalebox{0.0#4}[0.0#5]{\tmpcontents}}}}%
+%
+\else%
+\settowidth{\Width}{{\color{#6}\scalebox{0.0#4}[0.#5]{\tmpcontents}}}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{{\color{#6}\scalebox{0.0#4}[0.#5]{\tmpcontents}}}\settodepth{\Depth}{{\color{#6}\scalebox{0.0#4}[0.#5]{\tmpcontents}}}\setlength{\Height}{-\Height}%
+\put(#2,-#3){\hspace*{\Width}\raisebox{\Height}{{\color{#6}\scalebox{0.0#4}[0.#5]{\tmpcontents}}}}%
+%
+\fi%
+}%
+%
+\else%
+%
+{%
+\ifnum %
+#4<1000 %
+%
+{%
+\ifnum %
+#5<100 %
+\settowidth{\Width}{{\color{#6}\scalebox{0.#4}[0.0#5]{\tmpcontents}}}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{{\color{#6}\scalebox{0.#4}[0.0#5]{\tmpcontents}}}\settodepth{\Depth}{{\color{#6}\scalebox{0.#4}[0.0#5]{\tmpcontents}}}\setlength{\Height}{-\Height}%
+\put(#2,-#3){\hspace*{\Width}\raisebox{\Height}{{\color{#6}\scalebox{0.#4}[0.0#5]{\tmpcontents}}}}%
+%
+\else%
+\settowidth{\Width}{{\color{#6}\scalebox{0.#4}[0.#5]{\tmpcontents}}}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{{\color{#6}\scalebox{0.#4}[0.#5]{\tmpcontents}}}\settodepth{\Depth}{{\color{#6}\scalebox{0.#4}[0.#5]{\tmpcontents}}}\setlength{\Height}{-\Height}%
+\put(#2,-#3){\hspace*{\Width}\raisebox{\Height}{{\color{#6}\scalebox{0.#4}[0.#5]{\tmpcontents}}}}%
+%
+\fi%
+}%
+%
+\else%
+%
+{%
+\ifnum %
+#5<100 %
+\settowidth{\Width}{{\color{#6}\scalebox{1}[0.0#5]{\tmpcontents}}}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{{\color{#6}\scalebox{1}[0.0#5]{\tmpcontents}}}\settodepth{\Depth}{{\color{#6}\scalebox{1}[0.0#5]{\tmpcontents}}}\setlength{\Height}{-\Height}%
+\put(#2,-#3){\hspace*{\Width}\raisebox{\Height}{{\color{#6}\scalebox{1}[0.0#5]{\tmpcontents}}}}%
+\setcounter{ketpicctra}{#2}%
+\addtocounter{ketpicctra}{#4}%
+\settowidth{\Width}{{\color{#6}\scalebox{1}[0.0#5]{\tmpcontents}}}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{{\color{#6}\scalebox{1}[0.0#5]{\tmpcontents}}}\settodepth{\Depth}{{\color{#6}\scalebox{1}[0.0#5]{\tmpcontents}}}\setlength{\Height}{-\Height}%
+\put(\theketpicctra,-#3){\hspace*{\Width}\raisebox{\Height}{{\color{#6}\scalebox{1}[0.0#5]{\tmpcontents}}}}%
+%
+\else%
+\settowidth{\Width}{{\color{#6}\scalebox{1}[0.#5]{\tmpcontents}}}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{{\color{#6}\scalebox{1}[0.#5]{\tmpcontents}}}\settodepth{\Depth}{{\color{#6}\scalebox{1}[0.#5]{\tmpcontents}}}\setlength{\Height}{-\Height}%
+\put(#2,-#3){\hspace*{\Width}\raisebox{\Height}{{\color{#6}\scalebox{1}[0.#5]{\tmpcontents}}}}%
+\setcounter{ketpicctra}{#2}%
+\addtocounter{ketpicctra}{#4}%
+\settowidth{\Width}{{\color{#6}\scalebox{1}[0.#5]{\tmpcontents}}}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{{\color{#6}\scalebox{1}[0.#5]{\tmpcontents}}}\settodepth{\Depth}{{\color{#6}\scalebox{1}[0.#5]{\tmpcontents}}}\setlength{\Height}{-\Height}%
+\put(\theketpicctra,-#3){\hspace*{\Width}\raisebox{\Height}{{\color{#6}\scalebox{1}[0.#5]{\tmpcontents}}}}%
+%
+\fi%
+}%
+%
+\fi%
+}%
+%
+\fi%
+}%
+}%
+%
+}%
+\newcommand{\popframe}[9][8]{%
+{\unitlength=0.1mm%
+\ketcalcwidth{#9}%
+\setcounter{ketpicctrh}{\value{ketpicctra}}%
+\ketcalcheight{#9}%
+\setcounter{ketpicctri}{\value{ketpicctra}}%
+\ketcalcdepth{#9}%
+\addtocounter{ketpicctri}{\value{ketpicctra}}%
+\addtocounter{ketpicctrh}{30}%
+\addtocounter{ketpicctri}{30}%
+\setcounter{ketpicctrf}{#2}%
+\multiply\value{ketpicctrf} by 10%
+\addtocounter{ketpicctrf}{15}%
+\setcounter{ketpicctrg}{#3}%
+\multiply\value{ketpicctrg} by 10%
+\addtocounter{ketpicctrg}{15}%
+\shadeframep[#5]{\theketpicctrf}{\theketpicctrg}{\theketpicctrh}{\theketpicctri}{#5}%
+\setcounter{ketpicctrf}{#2}%
+\multiply\value{ketpicctrf} by 10%
+\setcounter{ketpicctrg}{#3}%
+\multiply\value{ketpicctrg} by 10%
+\shadeframep[#7]{\theketpicctrf}{\theketpicctrg}{\theketpicctrh}{\theketpicctri}{#7}%
+\boxlinep[#1]{\theketpicctrf}{\theketpicctrg}{\theketpicctrh}{\theketpicctri}{#8}%
+\addtocounter{ketpicctrf}{15}%
+\setcounter{ketpicctra}{\value{ketpicctri}}%
+\divide\value{ketpicctra} by 2%
+\addtocounter{ketpicctrg}{\value{ketpicctra}}%
+\multiply\value{ketpicctrg} by -1%
+\settowidth{\Width}{{#9}}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{{#9}}\settodepth{\Depth}{{#9}}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(\theketpicctrf,\theketpicctrg){\hspace*{\Width}\raisebox{\Height}{{#9}}}%
+}%
+%
+}%
+\newcommand{\colorframe}[7][8]{%
+{\unitlength=0.1mm%
+\ketcalcwidth{#7}%
+\setcounter{ketpicctrh}{\value{ketpicctra}}%
+\ketcalcheight{#7}%
+\setcounter{ketpicctri}{\value{ketpicctra}}%
+\ketcalcdepth{#7}%
+\addtocounter{ketpicctri}{\value{ketpicctra}}%
+\addtocounter{ketpicctrh}{30}%
+\addtocounter{ketpicctri}{30}%
+\setcounter{ketpicctrf}{#2}%
+\multiply\value{ketpicctrf} by 10%
+\setcounter{ketpicctrg}{#3}%
+\multiply\value{ketpicctrg} by 10%
+\shadeframep[#4]{\theketpicctrf}{\theketpicctrg}{\theketpicctrh}{\theketpicctri}{#5}%
+\boxlinep[#1]{\theketpicctrf}{\theketpicctrg}{\theketpicctrh}{\theketpicctri}{#6}%
+\addtocounter{ketpicctrf}{15}%
+\setcounter{ketpicctra}{\value{ketpicctri}}%
+\divide\value{ketpicctra} by 2%
+\addtocounter{ketpicctrg}{\value{ketpicctra}}%
+\multiply\value{ketpicctrg} by -1%
+\settowidth{\Width}{{#7}}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{{#7}}\settodepth{\Depth}{{#7}}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(\theketpicctrf,\theketpicctrg){\hspace*{\Width}\raisebox{\Height}{{#7}}}%
+}%
+%
+}%
+\newcommand{\colorframes}[7][8]{%
+{\unitlength=0.1mm%
+\ketcalcwidth{#7}%
+\setcounter{ketpicctrh}{\value{ketpicctra}}%
+\ketcalcheight{#7}%
+\setcounter{ketpicctri}{\value{ketpicctra}}%
+\ketcalcdepth{#7}%
+\addtocounter{ketpicctri}{\value{ketpicctra}}%
+\addtocounter{ketpicctrh}{30}%
+\addtocounter{ketpicctri}{30}%
+\setcounter{ketpicctrf}{#2}%
+\multiply\value{ketpicctrf} by 10%
+\setcounter{ketpicctra}{\value{ketpicctrh}}%
+\divide\value{ketpicctra} by 2%
+\addtocounter{ketpicctrf}{-\value{ketpicctra}}%
+\setcounter{ketpicctrg}{#3}%
+\multiply\value{ketpicctrg} by 10%
+\shadeframep[#5]{\theketpicctrf}{\theketpicctrg}{\theketpicctrh}{\theketpicctri}{#5}%
+\boxlinep[#1]{\theketpicctrf}{\theketpicctrg}{\theketpicctrh}{\theketpicctri}{#6}%
+\addtocounter{ketpicctrf}{15}%
+\setcounter{ketpicctra}{\value{ketpicctri}}%
+\divide\value{ketpicctra} by 2%
+\addtocounter{ketpicctrg}{\value{ketpicctra}}%
+\multiply\value{ketpicctrg} by -1%
+\settowidth{\Width}{{#7}}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{{#7}}\settodepth{\Depth}{{#7}}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(\theketpicctrf,\theketpicctrg){\hspace*{\Width}\raisebox{\Height}{{#7}}}%
+}%
+%
+}%
diff --git a/graphics/ketcindy/ketcindyfolder/style/ketlayer2e.sty b/graphics/ketcindy/ketcindyfolder/style/ketlayer2e.sty
new file mode 100644
index 0000000000..62d2ad67a3
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/style/ketlayer2e.sty
@@ -0,0 +1,3155 @@
+%Copyright (C) 2014 Setsuo Takato, KETpic developer team
+%*
+%* This program is free software: you can redistribute it and/or modify
+%* it under the terms of the GNU General Public License as published by
+%* the Free Software Foundation; either version 3 of the License, or
+%* (at your option) any later version.
+%*
+%* This program is distributed in the hope that it will be useful,
+%* but WITHOUT ANY WARRANTY; without even the implied warranty of
+%* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+%* GNU General Public License for more details.
+%*
+%* You should have received a copy of the GNU General Public License
+%* along with this program. If not, see <http://www.gnu.org/licenses/>%%% ketlayer2e.sty 2017-1-11 8:5
+%%% ketlayer2e170109.sce 2017-1-10 13:47
+% 2017.01.09%
+\newlength{\layercurrentunit}%
+\newcommand{\ketshadebox}[7][0]{%
+\def\tmpcontents{%
+{\unitlength=1mm%
+\begin{picture}%
+( 100.00000, 100.00000)( 0.00000, 0.00000)%
+\linethickness{0.008in}%
+%
+{\color{#7}
+\polygon*(0.00010,0.00010)(99.99990,0.00010)(99.99990,99.99990)(0.00010,99.99990)%
+(0.00010,0.00010)
+}%
+\end{picture}}%%
+}%
+%
+{%
+\ifnum %
+#4<10 %
+%
+{%
+\ifnum %
+#5<10 %
+\settowidth{\Width}{{\color{#7}\scalebox{0.0#4}[0.0#5]{\tmpcontents}}}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{{\color{#7}\scalebox{0.0#4}[0.0#5]{\tmpcontents}}}\settodepth{\Depth}{{\color{#7}\scalebox{0.0#4}[0.0#5]{\tmpcontents}}}\setlength{\Height}{-\Height}%
+\put(#2,-#3){\hspace*{\Width}\raisebox{\Height}{{\color{#7}\scalebox{0.0#4}[0.0#5]{\tmpcontents}}}}%
+%
+\else%
+\settowidth{\Width}{{\color{#7}\scalebox{0.0#4}[0.#5]{\tmpcontents}}}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{{\color{#7}\scalebox{0.0#4}[0.#5]{\tmpcontents}}}\settodepth{\Depth}{{\color{#7}\scalebox{0.0#4}[0.#5]{\tmpcontents}}}\setlength{\Height}{-\Height}%
+\put(#2,-#3){\hspace*{\Width}\raisebox{\Height}{{\color{#7}\scalebox{0.0#4}[0.#5]{\tmpcontents}}}}%
+%
+\fi%
+}%
+%
+\else%
+%
+{%
+\ifnum %
+#5<10 %
+\settowidth{\Width}{{\color{#7}\scalebox{0.#4}[0.0#5]{\tmpcontents}}}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{{\color{#7}\scalebox{0.#4}[0.0#5]{\tmpcontents}}}\settodepth{\Depth}{{\color{#7}\scalebox{0.#4}[0.0#5]{\tmpcontents}}}\setlength{\Height}{-\Height}%
+\put(#2,-#3){\hspace*{\Width}\raisebox{\Height}{{\color{#7}\scalebox{0.#4}[0.0#5]{\tmpcontents}}}}%
+%
+\else%
+\settowidth{\Width}{{\color{#7}\scalebox{0.#4}[0.#5]{\tmpcontents}}}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{{\color{#7}\scalebox{0.#4}[0.#5]{\tmpcontents}}}\settodepth{\Depth}{{\color{#7}\scalebox{0.#4}[0.#5]{\tmpcontents}}}\setlength{\Height}{-\Height}%
+\put(#2,-#3){\hspace*{\Width}\raisebox{\Height}{{\color{#7}\scalebox{0.#4}[0.#5]{\tmpcontents}}}}%
+%
+\fi%
+}%
+%
+\fi%
+}%
+%
+{%
+\ifnum %
+#1>0 %
+\boxframese{#2}{#3}{#4}{#5}{}%
+%
+\fi%
+}%
+%
+}%
+\newcommand{\shadeboxse}[7][0]{%
+\ketshadebox[#1]{#2}{#3}{#4}{#5}{#6}{#7}%
+%
+}%
+\newcommand{\shadeboxc}[7][0]{%
+\setcounter{ketpicctrd}{-#4}%
+\divide\value{ketpicctrd} by 2%
+\addtocounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{-#4}%
+\divide\value{ketpicctre} by 2%
+\addtocounter{ketpicctre}{#3}%
+\ketshadebox[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}{#6}{#7}%
+%
+}%
+\newcommand{\shadeboxe}[7][0]{%
+\setcounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{-#4}%
+\divide\value{ketpicctre} by 2%
+\addtocounter{ketpicctre}{#3}%
+\ketshadebox[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}{#6}{#7}%
+%
+}%
+\newcommand{\shadeboxw}[7][0]{%
+\setcounter{ketpicctrd}{-#4}%
+\addtocounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{-#4}%
+\divide\value{ketpicctre} by 2%
+\addtocounter{ketpicctre}{#3}%
+\ketshadebox[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}{#6}{#7}%
+%
+}%
+\newcommand{\shadeboxn}[7][0]{%
+\setcounter{ketpicctrd}{-#4}%
+\divide\value{ketpicctrd} by 2%
+\addtocounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{#3}%
+\addtocounter{ketpicctre}{-#4}%
+\ketshadebox[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}{#6}{#7}%
+%
+}%
+\newcommand{\shadeboxs}[7][0]{%
+\setcounter{ketpicctrd}{-#4}%
+\divide\value{ketpicctrd} by 2%
+\addtocounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{#3}%
+\ketshadebox[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}{#6}{#7}%
+%
+}%
+\newcommand{\shadeboxnw}[7][0]{%
+\setcounter{ketpicctrd}{-#4}%
+\addtocounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{#3}%
+\addtocounter{ketpicctre}{-#4}%
+\ketshadebox[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}{#6}{#7}%
+%
+}%
+\newcommand{\shadeboxne}[7][0]{%
+\setcounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{#3}%
+\addtocounter{ketpicctre}{-#4}%
+\ketshadebox[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}{#6}{#7}%
+%
+}%
+\newcommand{\shadeboxsw}[7][0]{%
+\setcounter{ketpicctrd}{-#4}%
+\addtocounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{#3}%
+\ketshadebox[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}{#6}{#7}%
+%
+}%
+\newcommand{\eraser}[5][0]{%
+\def\tmpcontents{%
+{\unitlength=1mm%
+\begin{picture}%
+( 100.00000, 100.00000)( 0.00000, 0.00000)%
+\linethickness{0.008in}%
+%
+{\color[cmyk]{0,0,0,0}
+\polygon*(0.00010,0.00010)(99.99990,0.00010)(99.99990,99.99990)(0.00010,99.99990)%
+(0.00010,0.00010)
+}%
+\end{picture}}%%
+}%
+%
+{%
+\ifnum %
+#4<10 %
+%
+{%
+\ifnum %
+#5<10 %
+\settowidth{\Width}{\scalebox{0.0#4}[0.0#5]{\tmpcontents}}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{\scalebox{0.0#4}[0.0#5]{\tmpcontents}}\settodepth{\Depth}{\scalebox{0.0#4}[0.0#5]{\tmpcontents}}\setlength{\Height}{-\Height}%
+\put(#2,-#3){\hspace*{\Width}\raisebox{\Height}{\scalebox{0.0#4}[0.0#5]{\tmpcontents}}}%
+%
+\else%
+\settowidth{\Width}{\scalebox{0.0#4}[0.#5]{\tmpcontents}}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{\scalebox{0.0#4}[0.#5]{\tmpcontents}}\settodepth{\Depth}{\scalebox{0.0#4}[0.#5]{\tmpcontents}}\setlength{\Height}{-\Height}%
+\put(#2,-#3){\hspace*{\Width}\raisebox{\Height}{\scalebox{0.0#4}[0.#5]{\tmpcontents}}}%
+%
+\fi%
+}%
+%
+\else%
+%
+{%
+\ifnum %
+#5<10 %
+\settowidth{\Width}{\scalebox{0.#4}[0.0#5]{\tmpcontents}}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{\scalebox{0.#4}[0.0#5]{\tmpcontents}}\settodepth{\Depth}{\scalebox{0.#4}[0.0#5]{\tmpcontents}}\setlength{\Height}{-\Height}%
+\put(#2,-#3){\hspace*{\Width}\raisebox{\Height}{\scalebox{0.#4}[0.0#5]{\tmpcontents}}}%
+%
+\else%
+\settowidth{\Width}{\scalebox{0.#4}[0.#5]{\tmpcontents}}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{\scalebox{0.#4}[0.#5]{\tmpcontents}}\settodepth{\Depth}{\scalebox{0.#4}[0.#5]{\tmpcontents}}\setlength{\Height}{-\Height}%
+\put(#2,-#3){\hspace*{\Width}\raisebox{\Height}{\scalebox{0.#4}[0.#5]{\tmpcontents}}}%
+%
+\fi%
+}%
+%
+\fi%
+}%
+%
+{%
+\ifnum %
+#1>0 %
+\boxframese{#2}{#3}{#4}{#5}{}%
+%
+\fi%
+}%
+%
+}%
+\newcommand{\eraserse}[5][0]{%
+\eraser[#1]{#2}{#3}{#4}{#5}%
+%
+}%
+\newcommand{\eraserc}[5][0]{%
+\setcounter{ketpicctrd}{-#4}%
+\divide\value{ketpicctrd} by 2%
+\addtocounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{-#4}%
+\divide\value{ketpicctre} by 2%
+\addtocounter{ketpicctre}{#3}%
+\eraser[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}%
+%
+}%
+\newcommand{\erasere}[5][0]{%
+\setcounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{-#4}%
+\divide\value{ketpicctre} by 2%
+\addtocounter{ketpicctre}{#3}%
+\eraser[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}%
+%
+}%
+\newcommand{\eraserw}[5][0]{%
+\setcounter{ketpicctrd}{-#4}%
+\addtocounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{-#4}%
+\divide\value{ketpicctre} by 2%
+\addtocounter{ketpicctre}{#3}%
+\eraser[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}%
+%
+}%
+\newcommand{\erasern}[5][0]{%
+\setcounter{ketpicctrd}{-#4}%
+\divide\value{ketpicctrd} by 2%
+\addtocounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{#3}%
+\addtocounter{ketpicctre}{-#4}%
+\eraser[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}%
+%
+}%
+\newcommand{\erasers}[5][0]{%
+\setcounter{ketpicctrd}{-#4}%
+\divide\value{ketpicctrd} by 2%
+\addtocounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{#3}%
+\eraser[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}%
+%
+}%
+\newcommand{\erasernw}[5][0]{%
+\setcounter{ketpicctrd}{-#4}%
+\addtocounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{#3}%
+\addtocounter{ketpicctre}{-#4}%
+\eraser[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}%
+%
+}%
+\newcommand{\eraserne}[5][0]{%
+\setcounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{#3}%
+\addtocounter{ketpicctre}{-#4}%
+\eraser[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}%
+%
+}%
+\newcommand{\erasersw}[5][0]{%
+\setcounter{ketpicctrd}{-#4}%
+\addtocounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{#3}%
+\eraser[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}%
+%
+}%
+\newcommand{\arrowhead}[4][1]{%
+\def\tmpcontents{%
+{\unitlength=1mm%
+\begin{picture}%
+( 4.00000, 1.23607)( -2.00000, -0.61803)%
+\linethickness{0.008in}%
+%
+\linethickness{0.004in}%
+\polyline(0.00000,0.00000)(2.00000,-0.61803)(2.00000,0.61803)(0.00000,0.00000)%
+%
+\linethickness{0.008in}%
+\polygon*(0.00000,0.00000)(2.00000,-0.61803)(2.00000,0.61803)(0.00000,0.00000)\end{picture}}%%
+}%
+\settowidth{\Width}{\rotatebox[origin=c]{#4}{\scalebox{#1}{\tmpcontents}}}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{\rotatebox[origin=c]{#4}{\scalebox{#1}{\tmpcontents}}}\settodepth{\Depth}{\rotatebox[origin=c]{#4}{\scalebox{#1}{\tmpcontents}}}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(#2,-#3){\hspace*{\Width}\raisebox{\Height}{\rotatebox[origin=c]{#4}{\scalebox{#1}{\tmpcontents}}}}%
+%
+}%
+\newcommand{\lineseg}[5][12]{%
+\def\tmpcontents{%
+\setcounter{ketpicctra}{0}%
+\setcounter{ketpicctra}{1}%
+\addtocounter{ketpicctra}{-1}%
+%
+{%
+\loop%
+\addtocounter{ketpicctra}{1}%
+{\unitlength=1mm%
+\begin{picture}%
+( 1.00000, 0.00200)( 0.00000, -0.00100)%
+\linethickness{0.008in}%
+%
+%
+{%
+\ifnum %
+#1<10 %
+\linethickness{0.00#1 in}%
+%
+\else%
+\linethickness{0.0#1 in}%
+%
+\fi%
+}%
+\polyline(0.00000,0.00000)(1.00000,0.00000)%
+%
+\linethickness{0.008in}%
+\end{picture}}%%
+\ifnum\theketpicctra<#4%
+\repeat%
+}%
+%
+}%
+%
+{%
+\ifnum %
+#5>0 %
+%
+{%
+\ifnum %
+#5<90 %
+\settowidth{\Width}{\rotatebox[origin=c]{#5}{\tmpcontents}}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{\rotatebox[origin=c]{#5}{\tmpcontents}}\settodepth{\Depth}{\rotatebox[origin=c]{#5}{\tmpcontents}}\setlength{\Height}{\Depth}%
+\put(#2,-#3){\hspace*{\Width}\raisebox{\Height}{\rotatebox[origin=c]{#5}{\tmpcontents}}}%
+%
+\else%
+\settowidth{\Width}{\rotatebox[origin=c]{#5}{\tmpcontents}}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{\rotatebox[origin=c]{#5}{\tmpcontents}}\settodepth{\Depth}{\rotatebox[origin=c]{#5}{\tmpcontents}}\setlength{\Height}{\Depth}%
+\put(#2,-#3){\hspace*{\Width}\raisebox{\Height}{\rotatebox[origin=c]{#5}{\tmpcontents}}}%
+%
+\fi%
+}%
+%
+\else%
+%
+{%
+\ifnum %
+#5>-90 %
+\settowidth{\Width}{\rotatebox[origin=c]{#5}{\tmpcontents}}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{\rotatebox[origin=c]{#5}{\tmpcontents}}\settodepth{\Depth}{\rotatebox[origin=c]{#5}{\tmpcontents}}\setlength{\Height}{-\Height}%
+\put(#2,-#3){\hspace*{\Width}\raisebox{\Height}{\rotatebox[origin=c]{#5}{\tmpcontents}}}%
+%
+\else%
+\settowidth{\Width}{\rotatebox[origin=c]{#5}{\tmpcontents}}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{\rotatebox[origin=c]{#5}{\tmpcontents}}\settodepth{\Depth}{\rotatebox[origin=c]{#5}{\tmpcontents}}\setlength{\Height}{-\Height}%
+\put(#2,-#3){\hspace*{\Width}\raisebox{\Height}{\rotatebox[origin=c]{#5}{\tmpcontents}}}%
+%
+\fi%
+}%
+%
+\fi%
+}%
+%
+}%
+\newcommand{\dashlineseg}[5][12]{%
+\def\tmpcontents{%
+\setcounter{ketpicctra}{0}%
+\setcounter{ketpicctra}{1}%
+\addtocounter{ketpicctra}{-1}%
+%
+{%
+\loop%
+\addtocounter{ketpicctra}{1}%
+{\unitlength=1mm%
+\begin{picture}%
+( 1.00000, 0.00200)( 0.00000, -0.00100)%
+\linethickness{0.008in}%
+%
+%
+{%
+\ifnum %
+#1<10 %
+\linethickness{0.00#1 in}%
+%
+\else%
+\linethickness{0.0#1 in}%
+%
+\fi%
+}%
+\polyline(0.00000,0.00000)(0.50000,0.00000)%
+%
+\linethickness{0.008in}%
+\end{picture}}%%
+\ifnum\theketpicctra<#4%
+\repeat%
+}%
+%
+}%
+%
+{%
+\ifnum %
+#5>0 %
+%
+{%
+\ifnum %
+#5<90 %
+\settowidth{\Width}{\rotatebox[origin=c]{#5}{\tmpcontents}}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{\rotatebox[origin=c]{#5}{\tmpcontents}}\settodepth{\Depth}{\rotatebox[origin=c]{#5}{\tmpcontents}}\setlength{\Height}{\Depth}%
+\put(#2,-#3){\hspace*{\Width}\raisebox{\Height}{\rotatebox[origin=c]{#5}{\tmpcontents}}}%
+%
+\else%
+\settowidth{\Width}{\rotatebox[origin=c]{#5}{\tmpcontents}}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{\rotatebox[origin=c]{#5}{\tmpcontents}}\settodepth{\Depth}{\rotatebox[origin=c]{#5}{\tmpcontents}}\setlength{\Height}{\Depth}%
+\put(#2,-#3){\hspace*{\Width}\raisebox{\Height}{\rotatebox[origin=c]{#5}{\tmpcontents}}}%
+%
+\fi%
+}%
+%
+\else%
+%
+{%
+\ifnum %
+#5>-90 %
+\settowidth{\Width}{\rotatebox[origin=c]{#5}{\tmpcontents}}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{\rotatebox[origin=c]{#5}{\tmpcontents}}\settodepth{\Depth}{\rotatebox[origin=c]{#5}{\tmpcontents}}\setlength{\Height}{-\Height}%
+\put(#2,-#3){\hspace*{\Width}\raisebox{\Height}{\rotatebox[origin=c]{#5}{\tmpcontents}}}%
+%
+\else%
+\settowidth{\Width}{\rotatebox[origin=c]{#5}{\tmpcontents}}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{\rotatebox[origin=c]{#5}{\tmpcontents}}\settodepth{\Depth}{\rotatebox[origin=c]{#5}{\tmpcontents}}\setlength{\Height}{-\Height}%
+\put(#2,-#3){\hspace*{\Width}\raisebox{\Height}{\rotatebox[origin=c]{#5}{\tmpcontents}}}%
+%
+\fi%
+}%
+%
+\fi%
+}%
+%
+}%
+\def\arrowline#1#2#3#4{%
+\lineseg[12]{#1}{#2}{#3}{#4}%
+\arrowhead{#1}{#2}{#4}%
+%
+}%
+\newcommand{\arrowlineseg}[5][12]{%
+\lineseg[#1]{#2}{#3}{#4}{#5}%
+\arrowhead{#2}{#3}{#5}%
+%
+}%
+\newcommand{\conversion}[1]{%
+\setcounter{ketpicctra}{#1}%
+\multiply\value{ketpicctra} by 3937%
+\divide\value{ketpicctra} by 100%
+\{\theketpicctra\}%
+%
+}%
+\newcommand{\dispgrid}[2]{%
+\def\tmpcontents{%
+{\unitlength=1mm%
+\begin{picture}%
+( 10.00000, 0.02000)( 0.00000, -0.01000)%
+\linethickness{0.008in}%
+%
+\put(0.00000,0.00000){\circle*{0.304800}}\put(1.00000,0.00000){\circle*{0.304800}}%
+\put(2.00000,0.00000){\circle*{0.304800}}\put(3.00000,0.00000){\circle*{0.304800}}%
+\put(4.00000,0.00000){\circle*{0.304800}}\put(5.00000,0.00000){\circle*{0.304800}}%
+\put(6.00000,0.00000){\circle*{0.304800}}\put(7.00000,0.00000){\circle*{0.304800}}%
+\put(8.00000,0.00000){\circle*{0.304800}}\put(9.00000,0.00000){\circle*{0.304800}}%
+\put(10.00000,0.00000){\circle*{0.304800}}%
+\end{picture}}%%
+}%
+\setcounter{ketpicctre}{#2}%
+\divide\value{ketpicctre} by 10%
+\setcounter{ketpicctrf}{#1}%
+\divide\value{ketpicctrf} by 10%
+\addtocounter{ketpicctrf}{-1}%
+\setcounter{ketpicctra}{0}%
+\setcounter{ketpicctra}{0}%
+\addtocounter{ketpicctra}{-1}%
+%
+{%
+\loop%
+\addtocounter{ketpicctra}{1}%
+\setcounter{ketpicctrd}{0}%
+\addtocounter{ketpicctrd}{-\value{ketpicctra}}%
+\multiply\value{ketpicctrd} by 10%
+\setcounter{ketpicctrc}{0}%
+\setcounter{ketpicctrb}{0}%
+\setcounter{ketpicctrb}{0}%
+\addtocounter{ketpicctrb}{-1}%
+%
+{%
+\loop%
+\addtocounter{ketpicctrb}{1}%
+\settowidth{\Width}{\tmpcontents}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{\tmpcontents}\settodepth{\Depth}{\tmpcontents}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(\theketpicctrc,\theketpicctrd){\hspace*{\Width}\raisebox{\Height}{\tmpcontents}}%
+\addtocounter{ketpicctrc}{10}%
+%
+\ifnum\theketpicctrb<\theketpicctrf%
+\repeat%
+}%
+\setcounter{ketpicctrg}{0}%
+\addtocounter{ketpicctrg}{-\value{ketpicctrd}}%
+\settowidth{\Width}{\theketpicctrg}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{\theketpicctrg}\settodepth{\Depth}{\theketpicctrg}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-1,\theketpicctrd){\hspace*{\Width}\raisebox{\Height}{\theketpicctrg}}%
+%
+\ifnum\theketpicctra<\theketpicctre%
+\repeat%
+}%
+%
+{%
+\ifnum %
+\theketpicctrd>-#2 %
+\setcounter{ketpicctrc}{0}%
+\setcounter{ketpicctrb}{0}%
+\setcounter{ketpicctrb}{0}%
+\addtocounter{ketpicctrb}{-1}%
+%
+{%
+\loop%
+\addtocounter{ketpicctrb}{1}%
+\settowidth{\Width}{\tmpcontents}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{\tmpcontents}\settodepth{\Depth}{\tmpcontents}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(\theketpicctrc,-#2){\hspace*{\Width}\raisebox{\Height}{\tmpcontents}}%
+\addtocounter{ketpicctrc}{10}%
+%
+\ifnum\theketpicctrb<\theketpicctrf%
+\repeat%
+}%
+%
+\fi%
+}%
+\def\tmpcontents{%
+{\unitlength=1mm%
+\begin{picture}%
+( 0.02000, 10.00000)( -0.01000, 0.00000)%
+\linethickness{0.008in}%
+%
+\put(0.00000,0.00000){\circle*{0.304800}}\put(0.00000,1.00000){\circle*{0.304800}}%
+\put(0.00000,2.00000){\circle*{0.304800}}\put(0.00000,3.00000){\circle*{0.304800}}%
+\put(0.00000,4.00000){\circle*{0.304800}}\put(0.00000,5.00000){\circle*{0.304800}}%
+\put(0.00000,6.00000){\circle*{0.304800}}\put(0.00000,7.00000){\circle*{0.304800}}%
+\put(0.00000,8.00000){\circle*{0.304800}}\put(0.00000,9.00000){\circle*{0.304800}}%
+\put(0.00000,10.00000){\circle*{0.304800}}%
+\end{picture}}%%
+}%
+\def\tmpcontentsb{%
+{\unitlength=1mm%
+\begin{picture}%
+( 0.02000, 0.02000)( -0.01000, -0.01000)%
+\linethickness{0.008in}%
+%
+\put(0.00000,0.00000){\circle*{0.200000}}
+
+\put(0.00000,0.00000){\circle{0.200000}}
+%
+\end{picture}}%%
+}%
+\setcounter{ketpicctre}{#2}%
+\divide\value{ketpicctre} by 10%
+\addtocounter{ketpicctre}{-1}%
+\setcounter{ketpicctrf}{#1}%
+\divide\value{ketpicctrf} by 10%
+\setcounter{ketpicctra}{0}%
+\setcounter{ketpicctra}{0}%
+\addtocounter{ketpicctra}{-1}%
+%
+{%
+\loop%
+\addtocounter{ketpicctra}{1}%
+\setcounter{ketpicctrd}{0}%
+\addtocounter{ketpicctrd}{\value{ketpicctra}}%
+\multiply\value{ketpicctrd} by 10%
+\setcounter{ketpicctrc}{0}%
+\setcounter{ketpicctrb}{0}%
+\setcounter{ketpicctrb}{0}%
+\addtocounter{ketpicctrb}{-1}%
+%
+{%
+\loop%
+\addtocounter{ketpicctrb}{1}%
+\settowidth{\Width}{\tmpcontents}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{\tmpcontents}\settodepth{\Depth}{\tmpcontents}\setlength{\Height}{-\Height}%
+\put(\theketpicctrd,\theketpicctrc){\hspace*{\Width}\raisebox{\Height}{\tmpcontents}}%
+\addtocounter{ketpicctrc}{-10}%
+%
+\ifnum\theketpicctrb<\theketpicctre%
+\repeat%
+}%
+%
+{%
+\ifnum %
+\theketpicctrc>-#2 %
+\setcounter{ketpicctrb}{0}%
+\setcounter{ketpicctrb}{-#2}%
+\addtocounter{ketpicctrb}{-1}%
+%
+{%
+\loop%
+\addtocounter{ketpicctrb}{1}%
+\settowidth{\Width}{\tmpcontentsb}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{\tmpcontentsb}\settodepth{\Depth}{\tmpcontentsb}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(\theketpicctrd,\theketpicctrb){\hspace*{\Width}\raisebox{\Height}{\tmpcontentsb}}%
+%
+\ifnum\theketpicctrb<\theketpicctrc%
+\repeat%
+}%
+%
+\fi%
+}%
+\setcounter{ketpicctrg}{-#2}%
+\addtocounter{ketpicctrg}{-1}%
+\settowidth{\Width}{\theketpicctrd}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{\theketpicctrd}\settodepth{\Depth}{\theketpicctrd}\setlength{\Height}{-\Height}%
+\put(\theketpicctrd,\theketpicctrg){\hspace*{\Width}\raisebox{\Height}{\theketpicctrd}}%
+%
+\ifnum\theketpicctra<\theketpicctrf%
+\repeat%
+}%
+%
+}%
+\newcommand{\dispgridneg}[2]{%
+\def\tmpcontents{%
+{\unitlength=1mm%
+\begin{picture}%
+( 10.00000, 0.02000)( 0.00000, -0.01000)%
+\linethickness{0.008in}%
+%
+\put(0.00000,0.00000){\circle*{0.304800}}\put(1.00000,0.00000){\circle*{0.304800}}%
+\put(2.00000,0.00000){\circle*{0.304800}}\put(3.00000,0.00000){\circle*{0.304800}}%
+\put(4.00000,0.00000){\circle*{0.304800}}\put(5.00000,0.00000){\circle*{0.304800}}%
+\put(6.00000,0.00000){\circle*{0.304800}}\put(7.00000,0.00000){\circle*{0.304800}}%
+\put(8.00000,0.00000){\circle*{0.304800}}\put(9.00000,0.00000){\circle*{0.304800}}%
+\put(10.00000,0.00000){\circle*{0.304800}}%
+\end{picture}}%%
+}%
+\setcounter{ketpicctre}{#2}%
+\multiply\value{ketpicctre} by -1%
+\divide\value{ketpicctre} by 10%
+\setcounter{ketpicctrf}{#1}%
+\divide\value{ketpicctrf} by 10%
+\addtocounter{ketpicctrf}{-1}%
+\setcounter{ketpicctra}{0}%
+\setcounter{ketpicctra}{0}%
+\addtocounter{ketpicctra}{-1}%
+%
+{%
+\loop%
+\addtocounter{ketpicctra}{1}%
+\setcounter{ketpicctrd}{\value{ketpicctra}}%
+\multiply\value{ketpicctrd} by 10%
+\setcounter{ketpicctrc}{0}%
+\setcounter{ketpicctrb}{0}%
+\setcounter{ketpicctrb}{0}%
+\addtocounter{ketpicctrb}{-1}%
+%
+{%
+\loop%
+\addtocounter{ketpicctrb}{1}%
+\settowidth{\Width}{\tmpcontents}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{\tmpcontents}\settodepth{\Depth}{\tmpcontents}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(\theketpicctrc,\theketpicctrd){\hspace*{\Width}\raisebox{\Height}{\tmpcontents}}%
+\addtocounter{ketpicctrc}{10}%
+%
+\ifnum\theketpicctrb<\theketpicctrf%
+\repeat%
+}%
+\setcounter{ketpicctrg}{0}%
+\addtocounter{ketpicctrg}{-\value{ketpicctrd}}%
+\settowidth{\Width}{\theketpicctrg}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{\theketpicctrg}\settodepth{\Depth}{\theketpicctrg}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-1,\theketpicctrd){\hspace*{\Width}\raisebox{\Height}{\theketpicctrg}}%
+%
+\ifnum\theketpicctra<\theketpicctre%
+\repeat%
+}%
+%
+{%
+\ifnum %
+\theketpicctrd>-#2 %
+\setcounter{ketpicctrc}{0}%
+\setcounter{ketpicctrb}{0}%
+\setcounter{ketpicctrb}{0}%
+\addtocounter{ketpicctrb}{-1}%
+%
+{%
+\loop%
+\addtocounter{ketpicctrb}{1}%
+\settowidth{\Width}{\tmpcontents}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{\tmpcontents}\settodepth{\Depth}{\tmpcontents}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(\theketpicctrc,-#2){\hspace*{\Width}\raisebox{\Height}{\tmpcontents}}%
+\addtocounter{ketpicctrc}{10}%
+%
+\ifnum\theketpicctrb<\theketpicctrf%
+\repeat%
+}%
+%
+\fi%
+}%
+\def\tmpcontents{%
+{\unitlength=1mm%
+\begin{picture}%
+( 0.02000, 10.00000)( -0.01000, 0.00000)%
+\linethickness{0.008in}%
+%
+\put(0.00000,0.00000){\circle*{0.304800}}\put(0.00000,1.00000){\circle*{0.304800}}%
+\put(0.00000,2.00000){\circle*{0.304800}}\put(0.00000,3.00000){\circle*{0.304800}}%
+\put(0.00000,4.00000){\circle*{0.304800}}\put(0.00000,5.00000){\circle*{0.304800}}%
+\put(0.00000,6.00000){\circle*{0.304800}}\put(0.00000,7.00000){\circle*{0.304800}}%
+\put(0.00000,8.00000){\circle*{0.304800}}\put(0.00000,9.00000){\circle*{0.304800}}%
+\put(0.00000,10.00000){\circle*{0.304800}}%
+\end{picture}}%%
+}%
+\def\tmpcontentsb{%
+{\unitlength=1mm%
+\begin{picture}%
+( 0.02000, 0.02000)( -0.01000, -0.01000)%
+\linethickness{0.008in}%
+%
+\put(0.00000,0.00000){\circle*{0.200000}}
+
+\put(0.00000,0.00000){\circle{0.200000}}
+%
+\end{picture}}%%
+}%
+\setcounter{ketpicctre}{#2}%
+\multiply\value{ketpicctre} by -1%
+\divide\value{ketpicctre} by 10%
+\addtocounter{ketpicctre}{-1}%
+\setcounter{ketpicctrf}{#1}%
+\divide\value{ketpicctrf} by 10%
+\setcounter{ketpicctra}{0}%
+\setcounter{ketpicctra}{0}%
+\addtocounter{ketpicctra}{-1}%
+%
+{%
+\loop%
+\addtocounter{ketpicctra}{1}%
+\setcounter{ketpicctrd}{0}%
+\addtocounter{ketpicctrd}{\value{ketpicctra}}%
+\multiply\value{ketpicctrd} by 10%
+\setcounter{ketpicctrc}{0}%
+\setcounter{ketpicctrb}{0}%
+\setcounter{ketpicctrb}{0}%
+\addtocounter{ketpicctrb}{-1}%
+%
+{%
+\loop%
+\addtocounter{ketpicctrb}{1}%
+\settowidth{\Width}{\tmpcontents}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{\tmpcontents}\settodepth{\Depth}{\tmpcontents}\setlength{\Height}{\Depth}%
+\put(\theketpicctrd,\theketpicctrc){\hspace*{\Width}\raisebox{\Height}{\tmpcontents}}%
+\addtocounter{ketpicctrc}{10}%
+%
+\ifnum\theketpicctrb<\theketpicctre%
+\repeat%
+}%
+%
+{%
+\ifnum %
+\theketpicctrc>-#2 %
+\setcounter{ketpicctrb}{0}%
+\setcounter{ketpicctrb}{-#2}%
+\addtocounter{ketpicctrb}{-1}%
+%
+{%
+\loop%
+\addtocounter{ketpicctrb}{1}%
+\settowidth{\Width}{\tmpcontentsb}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{\tmpcontentsb}\settodepth{\Depth}{\tmpcontentsb}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(\theketpicctrd,\theketpicctrb){\hspace*{\Width}\raisebox{\Height}{\tmpcontentsb}}%
+%
+\ifnum\theketpicctrb<\theketpicctrc%
+\repeat%
+}%
+%
+\fi%
+}%
+\setcounter{ketpicctrg}{-#2}%
+\addtocounter{ketpicctrg}{1}%
+\settowidth{\Width}{\theketpicctrd}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{\theketpicctrd}\settodepth{\Depth}{\theketpicctrd}\setlength{\Height}{\Depth}%
+\put(\theketpicctrd,\theketpicctrg){\hspace*{\Width}\raisebox{\Height}{\theketpicctrd}}%
+%
+\ifnum\theketpicctra<\theketpicctrf%
+\repeat%
+}%
+%
+}%
+\newenvironment{layer}[3][0]{%
+\setlength{\layercurrentunit}{\unitlength}%
+\unitlength=1 mm%
+\vspace{-\baselineskip}%
+\noindent%
+\hspace*{#1 mm}%
+\begin{picture}(#3,0)(0,0)%
+%
+{%
+\ifnum %
+#3>0 %
+\dispgrid{#2}{#3}%
+%
+\fi%
+}%
+%
+{%
+\ifnum %
+#3<0 %
+\dispgridneg{#2}{#3}%
+%
+\fi%
+}%
+}{%
+\end{picture}%
+\setlength{\unitlength}{\layercurrentunit}%
+%
+}%
+\newenvironment{layerv}[3][0]{%
+\setlength{\layercurrentunit}{\unitlength}%
+\unitlength=1 mm%
+\vspace*{-\baselineskip}%
+\vspace*{#2 mm}%
+
+\setcounter{ketpicctrj}{-#2}%
+\noindent%
+\hspace*{#1 mm}%
+\begin{picture}(100,0)(0,0)%
+%
+{%
+\ifnum %
+#3>0 %
+\setlength{\Width}{\textwidth}%
+\addtolength{\Width}{-#1 mm}%
+\setcounter{ketpicctri}{0}%
+\setcounter{ketpicctri}{1}%
+\addtocounter{ketpicctri}{-1}%
+%
+{%
+\loop%
+\addtocounter{ketpicctri}{1}%
+%
+{%
+\ifdim %
+\theketpicctri mm>\Width %
+\addtocounter{ketpicctri}{500}%
+%
+\fi%
+}%
+%
+\ifnum\theketpicctri<400%
+\repeat%
+}%
+\addtocounter{ketpicctri}{-500}%
+\addtocounter{ketpicctri}{-1}%
+\dispgrid{\theketpicctri}{#3}%
+%
+\fi%
+}%
+}{%
+\end{picture}%
+\vspace*{\theketpicctrj mm}%
+\setlength{\unitlength}{\layercurrentunit}%
+%
+}%
+\newenvironment{layerg}[2][1]{%
+\setlength{\layercurrentunit}{\unitlength}%
+\unitlength=1 mm%
+\vspace*{-\baselineskip}%
+\ketcalcheight{#2}%
+\setcounter{ketpicctrj}{\value{ketpicctra}}%
+\ketcalcdepth{#2}%
+\addtocounter{ketpicctrj}{\value{ketpicctra}}%
+\vspace*{-\theketpicctrj mm}%
+
+\noindent%
+\begin{picture}(100,0)(0,0)%
+%
+{%
+\ifnum %
+#1>0 %
+\setlength{\Width}{\textwidth}%
+\addtolength{\Width}{-#1 mm}%
+\setcounter{ketpicctri}{0}%
+\setcounter{ketpicctri}{1}%
+\addtocounter{ketpicctri}{-1}%
+%
+{%
+\loop%
+\addtocounter{ketpicctri}{1}%
+%
+{%
+\ifdim %
+\theketpicctri mm>\Width %
+\addtocounter{ketpicctri}{500}%
+%
+\fi%
+}%
+%
+\ifnum\theketpicctri<400%
+\repeat%
+}%
+\addtocounter{ketpicctri}{-500}%
+\addtocounter{ketpicctri}{-1}%
+\dispgrid{\theketpicctri}{\theketpicctrj}%
+%
+\fi%
+}%
+}{%
+\end{picture}%
+\vspace*{\theketpicctrj mm}%
+\setlength{\unitlength}{\layercurrentunit}%
+%
+}%
+\newcommand{\putnotec}[3]{%
+\settowidth{\Width}{#3}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{#3}\settodepth{\Depth}{#3}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(#1,-#2){\hspace*{\Width}\raisebox{\Height}{#3}}%
+%
+}%
+\newcommand{\putnotee}[3]{%
+\settowidth{\Width}{#3}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{#3}\settodepth{\Depth}{#3}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(#1,-#2){\hspace*{\Width}\raisebox{\Height}{#3}}%
+%
+}%
+\newcommand{\putnotew}[3]{%
+\settowidth{\Width}{#3}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{#3}\settodepth{\Depth}{#3}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(#1,-#2){\hspace*{\Width}\raisebox{\Height}{#3}}%
+%
+}%
+\newcommand{\putnotes}[3]{%
+\settowidth{\Width}{#3}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{#3}\settodepth{\Depth}{#3}\setlength{\Height}{-\Height}%
+\put(#1,-#2){\hspace*{\Width}\raisebox{\Height}{#3}}%
+%
+}%
+\newcommand{\putnoten}[3]{%
+\settowidth{\Width}{#3}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{#3}\settodepth{\Depth}{#3}\setlength{\Height}{\Depth}%
+\put(#1,-#2){\hspace*{\Width}\raisebox{\Height}{#3}}%
+%
+}%
+\newcommand{\putnotene}[3]{%
+\settowidth{\Width}{#3}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{#3}\settodepth{\Depth}{#3}\setlength{\Height}{\Depth}%
+\put(#1,-#2){\hspace*{\Width}\raisebox{\Height}{#3}}%
+%
+}%
+\newcommand{\putnotenw}[3]{%
+\settowidth{\Width}{#3}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{#3}\settodepth{\Depth}{#3}\setlength{\Height}{\Depth}%
+\put(#1,-#2){\hspace*{\Width}\raisebox{\Height}{#3}}%
+%
+}%
+\newcommand{\putnotese}[3]{%
+\settowidth{\Width}{#3}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{#3}\settodepth{\Depth}{#3}\setlength{\Height}{-\Height}%
+\put(#1,-#2){\hspace*{\Width}\raisebox{\Height}{#3}}%
+%
+}%
+\newcommand{\putnotesw}[3]{%
+\settowidth{\Width}{#3}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{#3}\settodepth{\Depth}{#3}\setlength{\Height}{-\Height}%
+\put(#1,-#2){\hspace*{\Width}\raisebox{\Height}{#3}}%
+%
+}%
+\newcommand{\ballonr}[5][8]{%
+\def\tempcontents{%
+{\unitlength=1cm%
+\begin{picture}%
+( 4.00000, 3.50000)( -2.00000, 0.00000)%
+\linethickness{0.008in}%
+%
+%
+{%
+\ifnum %
+#1<10 %
+\linethickness{0.00#1 in}%
+%
+\else%
+\linethickness{0.0#1 in}%
+%
+\fi%
+}%
+\polyline(0.31500,0.66000)(0.31187,0.66265)(0.30427,0.66539)(0.29249,0.66830)(0.27679,0.67148)%
+(0.25744,0.67501)(0.23472,0.67898)(0.20890,0.68347)(0.18024,0.68859)(0.14903,0.69440)%
+(0.11553,0.70101)(0.08002,0.70850)(0.04276,0.71695)(0.00403,0.72646)(-0.03590,0.73711)%
+(-0.07675,0.74900)(-0.11826,0.76220)(-0.16016,0.77681)(-0.20216,0.79292)(-0.24401,0.81061)%
+(-0.28543,0.82997)(-0.32614,0.85109)(-0.36587,0.87406)(-0.40436,0.89896)(-0.44133,0.92588)%
+(-0.47651,0.95492)(-0.50963,0.98615)(-0.54041,1.01967)(-0.56858,1.05557)(-0.59388,1.09393)%
+(-0.61602,1.13484)(-0.63475,1.17838)(-0.64978,1.22466)(-0.66084,1.27374)(-0.66767,1.32573)%
+(-0.66998,1.38072)(-0.66752,1.43877)(-0.66000,1.50000)(-0.67265,1.51154)(-0.69581,1.52188)%
+(-0.72792,1.53157)(-0.76744,1.54117)(-0.81283,1.55123)(-0.86253,1.56232)(-0.91500,1.57500)%
+(-0.96870,1.58982)(-1.02207,1.60734)(-1.07358,1.62812)(-1.12167,1.65272)(-1.16480,1.68169)%
+(-1.20143,1.71560)(-1.23000,1.75500)(-1.24947,1.80016)(-1.26077,1.85015)(-1.26535,1.90376)%
+(-1.26462,1.95976)(-1.26003,2.01695)(-1.25302,2.07410)(-1.24500,2.13000)(-1.23692,2.18365)%
+(-1.22772,2.23494)(-1.21582,2.28399)(-1.19966,2.33091)(-1.17768,2.37580)(-1.14832,2.41880)%
+(-1.11000,2.46000)(-1.06166,2.49946)(-1.00422,2.53695)(-0.93909,2.57220)(-0.86769,2.60491)%
+(-0.79143,2.63481)(-0.71173,2.66160)(-0.63000,2.68500)(-0.54766,2.70473)(-0.46612,2.72050)%
+(-0.38680,2.73203)(-0.31111,2.73903)(-0.24047,2.74121)(-0.17630,2.73830)(-0.12000,2.73000)%
+(-0.09460,2.75467)(-0.06709,2.78128)(-0.03698,2.80930)(-0.00373,2.83822)(0.03317,2.86749)%
+(0.07424,2.89659)(0.12000,2.92500)(0.17096,2.95218)(0.22764,2.97761)(0.29056,3.00076)%
+(0.36024,3.02110)(0.43720,3.03811)(0.52194,3.05125)(0.61500,3.06000)(0.71632,3.06396)%
+(0.82363,3.06329)(0.93405,3.05824)(1.04476,3.04912)(1.15288,3.03618)(1.25558,3.01972)%
+(1.35000,3.00000)(1.43396,2.97717)(1.50797,2.95077)(1.57321,2.92024)(1.63085,2.88498)%
+(1.68208,2.84441)(1.72807,2.79794)(1.77000,2.74500)(1.80872,2.68530)(1.84374,2.61981)%
+(1.87426,2.54981)(1.89946,2.47655)(1.91852,2.40132)(1.93064,2.32537)(1.93500,2.25000)%
+(1.93079,2.17646)(1.91719,2.10603)(1.89340,2.03998)(1.85860,1.97958)(1.81197,1.92610)%
+(1.75271,1.88082)(1.68000,1.84500)(1.69733,1.82055)(1.71432,1.79394)(1.73080,1.76532)%
+(1.74658,1.73483)(1.76150,1.70260)(1.77537,1.66877)(1.78801,1.63348)(1.79925,1.59686)%
+(1.80890,1.55905)(1.81680,1.52020)(1.82276,1.48043)(1.82660,1.43988)(1.82815,1.39870)%
+(1.82722,1.35702)(1.82365,1.31498)(1.81725,1.27272)(1.80784,1.23036)(1.79525,1.18806)%
+(1.77929,1.14594)(1.75980,1.10416)(1.73670,1.06286)(1.70998,1.02223)(1.67968,0.98246)%
+(1.64581,0.94374)(1.60838,0.90626)(1.56741,0.87019)(1.52291,0.83572)(1.47491,0.80304)%
+(1.42342,0.77234)(1.36845,0.74381)(1.31002,0.71762)(1.24815,0.69397)(1.18285,0.67303)%
+(1.11414,0.65501)(1.04204,0.64008)(0.96655,0.62842)(0.88771,0.62024)(0.80552,0.61570)%
+(0.72000,0.61500)(0.70658,0.58034)(0.69258,0.54668)(0.67799,0.51401)(0.66281,0.48234)%
+(0.64705,0.45167)(0.63070,0.42199)(0.61377,0.39331)(0.59625,0.36562)(0.57814,0.33894)%
+(0.55945,0.31324)(0.54018,0.28854)(0.52031,0.26484)(0.49986,0.24214)(0.47883,0.22043)%
+(0.45721,0.19972)(0.43500,0.18000)(0.41221,0.16128)(0.38883,0.14355)(0.36486,0.12683)%
+(0.34031,0.11109)(0.31518,0.09636)(0.28945,0.08262)(0.26314,0.06987)(0.23625,0.05812)%
+(0.20877,0.04737)(0.18070,0.03762)(0.15205,0.02886)(0.12281,0.02109)(0.09299,0.01433)%
+(0.06258,0.00855)(0.03158,0.00378)(0.00000,0.00000)(0.01983,0.01518)(0.03902,0.03070)%
+(0.05757,0.04658)(0.07547,0.06281)(0.09272,0.07939)(0.10934,0.09633)(0.12530,0.11361)%
+(0.14062,0.13125)(0.15530,0.14924)(0.16934,0.16758)(0.18272,0.18627)(0.19547,0.20531)%
+(0.20757,0.22471)(0.21902,0.24445)(0.22983,0.26455)(0.24000,0.28500)(0.24952,0.30580)%
+(0.25840,0.32695)(0.26663,0.34846)(0.27422,0.37031)(0.28116,0.39252)(0.28746,0.41508)%
+(0.29312,0.43799)(0.29812,0.46125)(0.30249,0.48486)(0.30621,0.50883)(0.30929,0.53314)%
+(0.31172,0.55781)(0.31351,0.58283)(0.31465,0.60820)(0.31515,0.63393)(0.31500,0.66000)%
+%
+\linethickness{0.008in}%
+\settowidth{\Width}{{\begin{minipage}{1.8cm}#5\end{minipage}}}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{{\begin{minipage}{1.8cm}#5\end{minipage}}}\settodepth{\Depth}{{\begin{minipage}{1.8cm}#5\end{minipage}}}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(0.5000,1.8000){\hspace*{\Width}\raisebox{\Height}{{\begin{minipage}{1.8cm}#5\end{minipage}}}}%
+%
+%
+\end{picture}}%%
+}%
+\setcounter{ketpicctra}{-#3}%
+\settowidth{\Width}{{\scalebox{#4}{\tempcontents}}}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{{\scalebox{#4}{\tempcontents}}}\settodepth{\Depth}{{\scalebox{#4}{\tempcontents}}}\setlength{\Height}{\Depth}%
+\put(#2,\theketpicctra){\hspace*{\Width}\raisebox{\Height}{{\scalebox{#4}{\tempcontents}}}}%
+%
+}%
+\newcommand{\ballonl}[5][8]{%
+\def\tempcontents{%
+{\unitlength=1cm%
+\begin{picture}%
+( 5.00000, 2.50000)( -2.50000, 0.00000)%
+\linethickness{0.008in}%
+%
+%
+{%
+\ifnum %
+#1<10 %
+\linethickness{0.00#1 in}%
+%
+\else%
+\linethickness{0.0#1 in}%
+%
+\fi%
+}%
+\polyline(-0.57200,0.56100)(-0.66502,0.50474)(-0.75287,0.45596)(-0.83608,0.41418)%
+(-0.91517,0.37896)(-0.99068,0.34982)(-1.06311,0.32633)(-1.13300,0.30800)(-1.20087,0.29439)%
+(-1.26724,0.28503)(-1.33264,0.27947)(-1.39759,0.27725)(-1.46262,0.27790)(-1.52825,0.28097)%
+(-1.59500,0.28600)(-1.66316,0.29276)(-1.73209,0.30198)(-1.80088,0.31459)(-1.86866,0.33154)%
+(-1.93453,0.35380)(-1.99760,0.38230)(-2.05700,0.41800)(-2.11187,0.46151)(-2.16154,0.51214)%
+(-2.20539,0.56886)(-2.24279,0.63064)(-2.27311,0.69644)(-2.29572,0.76523)(-2.31000,0.83600)%
+(-2.31548,0.90773)(-2.31232,0.97953)(-2.30083,1.05052)(-2.28134,1.11983)(-2.25416,1.18660)%
+(-2.21960,1.24995)(-2.17800,1.30900)(-2.12966,1.36289)(-2.07491,1.41075)(-2.01405,1.45170)%
+(-1.94742,1.48487)(-1.87532,1.50939)(-1.79807,1.52439)(-1.71600,1.52900)(-1.73655,1.60873)%
+(-1.74760,1.68448)(-1.74979,1.75622)(-1.74378,1.82389)(-1.73021,1.88744)(-1.70974,1.94683)%
+(-1.68300,2.00200)(-1.65065,2.05290)(-1.61334,2.09949)(-1.57171,2.14172)(-1.52641,2.17953)%
+(-1.47810,2.21288)(-1.42741,2.24172)(-1.37500,2.26600)(-1.32132,2.28578)(-1.26601,2.30158)%
+(-1.20854,2.31404)(-1.14835,2.32378)(-1.08489,2.33143)(-1.01763,2.33763)(-0.94600,2.34300)%
+(-0.86985,2.34798)(-0.79052,2.35223)(-0.70976,2.35517)(-0.62929,2.35627)(-0.55085,2.35498)%
+(-0.47618,2.35074)(-0.40700,2.34300)(-0.34466,2.33128)(-0.28894,2.31535)(-0.23922,2.29505)%
+(-0.19488,2.27022)(-0.15531,2.24071)(-0.11989,2.20636)(-0.08800,2.16700)(-0.05903,2.12248)%
+(-0.03237,2.07263)(-0.00739,2.01731)(0.01653,1.95634)(0.03998,1.88957)(0.06360,1.81685)%
+(0.08800,1.73800)(0.14258,1.73395)(0.19323,1.72765)(0.24018,1.71905)(0.28370,1.70812)%
+(0.32401,1.69482)(0.36136,1.67913)(0.39600,1.66100)(0.42817,1.64040)(0.45812,1.61730)%
+(0.48608,1.59166)(0.51231,1.56344)(0.53704,1.53262)(0.56052,1.49915)(0.58300,1.46300)%
+(0.60454,1.42421)(0.62448,1.38306)(0.64198,1.33994)(0.65622,1.29521)(0.66636,1.24923)%
+(0.67157,1.20237)(0.67100,1.15500)(0.66413,1.10751)(0.65163,1.06036)(0.63448,1.01405)%
+(0.61367,0.96907)(0.59016,0.92591)(0.56495,0.88505)(0.53900,0.84700)(0.51304,0.81212)%
+(0.48675,0.78032)(0.45955,0.75138)(0.43086,0.72510)(0.40009,0.70124)(0.36666,0.67962)%
+(0.33000,0.66000)(0.28952,0.64218)(0.24465,0.62594)(0.19480,0.61107)(0.13939,0.59735)%
+(0.07784,0.58458)(0.00957,0.57253)(-0.06600,0.56100)(-0.06660,0.54413)(-0.06703,0.52723)%
+(-0.06729,0.51028)(-0.06738,0.49328)(-0.06729,0.47624)(-0.06703,0.45916)(-0.06660,0.44204)%
+(-0.06600,0.42487)(-0.06523,0.40767)(-0.06428,0.39041)(-0.06316,0.37312)(-0.06187,0.35578)%
+(-0.06041,0.33840)(-0.05878,0.32098)(-0.05698,0.30351)(-0.05500,0.28600)(-0.05285,0.26845)%
+(-0.05053,0.25085)(-0.04804,0.23321)(-0.04537,0.21553)(-0.04254,0.19781)(-0.03953,0.18004)%
+(-0.03635,0.16223)(-0.03300,0.14437)(-0.02948,0.12648)(-0.02578,0.10854)(-0.02191,0.09056)%
+(-0.01787,0.07253)(-0.01366,0.05446)(-0.00928,0.03635)(-0.00473,0.01820)(0.00000,0.00000)%
+(-0.02187,0.02752)(-0.04348,0.05440)(-0.06484,0.08063)(-0.08594,0.10622)(-0.10678,0.13116)%
+(-0.12736,0.15546)(-0.14768,0.17912)(-0.16775,0.20212)(-0.18756,0.22449)(-0.20711,0.24621)%
+(-0.22640,0.26729)(-0.24544,0.28772)(-0.26421,0.30751)(-0.28273,0.32665)(-0.30100,0.34515)%
+(-0.31900,0.36300)(-0.33675,0.38021)(-0.35423,0.39677)(-0.37146,0.41269)(-0.38844,0.42797)%
+(-0.40515,0.44260)(-0.42161,0.45659)(-0.43781,0.46993)(-0.45375,0.48262)(-0.46943,0.49468)%
+(-0.48486,0.50609)(-0.50003,0.51685)(-0.51494,0.52697)(-0.52959,0.53644)(-0.54398,0.54527)%
+(-0.55812,0.55346)(-0.57200,0.56100)%
+%
+\linethickness{0.008in}%
+\settowidth{\Width}{{\begin{minipage}{1.5cm}#5\end{minipage}}}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{{\begin{minipage}{1.5cm}#5\end{minipage}}}\settodepth{\Depth}{{\begin{minipage}{1.5cm}#5\end{minipage}}}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(-0.8000,1.2000){\hspace*{\Width}\raisebox{\Height}{{\begin{minipage}{1.5cm}#5\end{minipage}}}}%
+%
+%
+\end{picture}}%%
+}%
+\setcounter{ketpicctra}{-#3}%
+\settowidth{\Width}{{\scalebox{#4}{\tempcontents}}}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{{\scalebox{#4}{\tempcontents}}}\settodepth{\Depth}{{\scalebox{#4}{\tempcontents}}}\setlength{\Height}{\Depth}%
+\put(#2,\theketpicctra){\hspace*{\Width}\raisebox{\Height}{{\scalebox{#4}{\tempcontents}}}}%
+%
+}%
+\newcommand{\lefthand}[3][16]{%
+\def\tempcontents{%
+{\unitlength=1cm%
+\begin{picture}%
+( 1.01000, 0.82000)( -1.00000, -0.80000)%
+\linethickness{0.008in}%
+%
+%
+{%
+\ifnum %
+#1<10 %
+\linethickness{0.00#1 in}%
+%
+\else%
+\linethickness{0.0#1 in}%
+%
+\fi%
+}%
+\polyline(-0.82419,-0.69564)(-0.78908,-0.66318)(-0.75158,-0.63725)(-0.71246,-0.61684)%
+(-0.67248,-0.60097)(-0.63240,-0.58865)(-0.59300,-0.57888)(-0.55504,-0.57068)(-0.51928,-0.56304)%
+(-0.48649,-0.55497)(-0.45744,-0.54549)(-0.43288,-0.53361)(-0.41280,-0.51898)(-0.39570,-0.50254)%
+(-0.37987,-0.48534)(-0.36363,-0.46845)(-0.34530,-0.45295)(-0.32358,-0.43973)(-0.29944,-0.42879)%
+(-0.27467,-0.41976)(-0.25107,-0.41230)(-0.23044,-0.40605)(-0.21452,-0.40067)(-0.20374,-0.39585)%
+(-0.19724,-0.39136)(-0.19411,-0.38695)(-0.19341,-0.38238)(-0.19423,-0.37742)(-0.19592,-0.37195)%
+(-0.19858,-0.36627)(-0.20245,-0.36070)(-0.20775,-0.35558)(-0.21472,-0.35126)(-0.22356,-0.34804)%
+(-0.23405,-0.34593)(-0.24580,-0.34478)(-0.25843,-0.34446)(-0.27152,-0.34481)(-0.28469,-0.34568)%
+(-0.29753,-0.34694)(-0.30966,-0.34843)(-0.32067,-0.35001)(-0.33016,-0.35154)(-0.33774,-0.35286)%
+\polyline(-0.41839,-0.43100)(-0.40862,-0.42173)(-0.39536,-0.40850)(-0.37893,-0.39183)%
+(-0.35961,-0.37226)(-0.33771,-0.35032)(-0.31352,-0.32655)(-0.28734,-0.30146)(-0.25947,-0.27560)%
+(-0.23021,-0.24949)(-0.19985,-0.22367)(-0.16898,-0.19861)(-0.13874,-0.17463)(-0.11037,-0.15207)%
+(-0.08509,-0.13123)(-0.06413,-0.11244)(-0.04790,-0.09575)(-0.03554,-0.08081)(-0.02614,-0.06722)%
+(-0.01872,-0.05461)(-0.01239,-0.04261)(-0.00683,-0.03113)(-0.00249,-0.02050)(0.00015,-0.01101)%
+(0.00061,-0.00300)(-0.00156,0.00320)(-0.00679,0.00711)(-0.01539,0.00804)(-0.02769,0.00535)%
+(-0.04401,-0.00164)(-0.06467,-0.01354)(-0.08964,-0.03035)(-0.11867,-0.05169)(-0.15155,-0.07719)%
+(-0.18802,-0.10645)(-0.22772,-0.13897)(-0.26909,-0.17335)(-0.31003,-0.20776)(-0.34845,-0.24036)%
+(-0.38225,-0.26930)(-0.40932,-0.29275)(-0.42756,-0.30887)(-0.43488,-0.31583)(-0.42916,-0.31178)%
+(-0.40831,-0.29489)%
+\polyline(-0.38311,-0.27221)(-0.38240,-0.26776)(-0.38210,-0.26354)(-0.38219,-0.25954)%
+(-0.38266,-0.25575)(-0.38347,-0.25218)(-0.38462,-0.24881)(-0.38607,-0.24564)(-0.38782,-0.24266)%
+(-0.38983,-0.23987)(-0.39209,-0.23727)(-0.39458,-0.23485)(-0.39729,-0.23260)(-0.40018,-0.23051)%
+(-0.40324,-0.22859)(-0.40644,-0.22682)(-0.40978,-0.22521)(-0.41322,-0.22374)(-0.41676,-0.22241)%
+(-0.42036,-0.22122)(-0.42401,-0.22016)(-0.42768,-0.21922)(-0.43137,-0.21840)(-0.43504,-0.21770)%
+(-0.43868,-0.21710)(-0.44227,-0.21661)(-0.44578,-0.21621)(-0.44920,-0.21591)(-0.45251,-0.21569)%
+(-0.45568,-0.21555)(-0.45870,-0.21549)(-0.46155,-0.21551)(-0.46420,-0.21558)(-0.46664,-0.21572)%
+(-0.46884,-0.21591)(-0.47079,-0.21615)(-0.47246,-0.21644)(-0.47384,-0.21676)%
+\polyline(-0.50409,-0.24700)(-0.49723,-0.24301)(-0.49144,-0.23910)(-0.48667,-0.23526)%
+(-0.48284,-0.23151)(-0.47990,-0.22784)(-0.47780,-0.22427)(-0.47648,-0.22078)(-0.47587,-0.21740)%
+(-0.47593,-0.21411)(-0.47658,-0.21093)(-0.47778,-0.20786)(-0.47946,-0.20489)(-0.48156,-0.20204)%
+(-0.48403,-0.19931)(-0.48681,-0.19669)(-0.48984,-0.19420)(-0.49306,-0.19184)(-0.49641,-0.18961)%
+(-0.49984,-0.18751)(-0.50329,-0.18555)(-0.50672,-0.18373)(-0.51014,-0.18205)(-0.51354,-0.18050)%
+(-0.51692,-0.17909)(-0.52029,-0.17782)(-0.52363,-0.17668)(-0.52695,-0.17568)(-0.53025,-0.17481)%
+(-0.53352,-0.17407)(-0.53677,-0.17347)(-0.53998,-0.17300)(-0.54317,-0.17266)(-0.54633,-0.17245)%
+(-0.54946,-0.17237)(-0.55256,-0.17243)(-0.55562,-0.17261)(-0.55864,-0.17291)(-0.56163,-0.17335)%
+(-0.56458,-0.17391)%
+\polyline(-0.58978,-0.20416)(-0.58464,-0.19911)(-0.58011,-0.19420)(-0.57622,-0.18941)%
+(-0.57296,-0.18473)(-0.57035,-0.18018)(-0.56839,-0.17573)(-0.56710,-0.17139)(-0.56647,-0.16715)%
+(-0.56652,-0.16301)(-0.56726,-0.15897)(-0.56868,-0.15502)(-0.57081,-0.15115)(-0.57364,-0.14737)%
+(-0.57718,-0.14366)(-0.58147,-0.14010)(-0.58662,-0.13698)(-0.59277,-0.13468)(-0.60005,-0.13357)%
+(-0.60861,-0.13403)(-0.61859,-0.13643)(-0.63011,-0.14114)(-0.64323,-0.14845)(-0.65761,-0.15822)%
+(-0.67283,-0.17027)(-0.68845,-0.18437)(-0.70404,-0.20032)(-0.71919,-0.21791)(-0.73345,-0.23692)%
+(-0.74652,-0.25717)(-0.75858,-0.27848)(-0.76993,-0.30070)(-0.78085,-0.32369)(-0.79166,-0.34729)%
+(-0.80265,-0.37135)(-0.81410,-0.39571)(-0.82633,-0.42023)(-0.83963,-0.44475)(-0.85430,-0.46912)%
+(-0.87062,-0.49319)(-0.88891,-0.51680)(-0.90946,-0.53981)(-0.93256,-0.56206)%
+%
+\linethickness{0.008in}%
+\end{picture}}%%
+}%
+\setcounter{ketpicctra}{-#3}%
+\settowidth{\Width}{{\tempcontents}}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{{\tempcontents}}\settodepth{\Depth}{{\tempcontents}}\setlength{\Height}{-\Height}%
+\put(#2,\theketpicctra){\hspace*{\Width}\raisebox{\Height}{{\tempcontents}}}%
+%
+}%
+\newcommand{\righthand}[3][16]{%
+\def\tempcontents{%
+{\unitlength=1cm%
+\begin{picture}%
+( 1.01000, 0.82000)( -0.01000, -0.80000)%
+\linethickness{0.008in}%
+%
+%
+{%
+\ifnum %
+#1<10 %
+\linethickness{0.00#1 in}%
+%
+\else%
+\linethickness{0.0#1 in}%
+%
+\fi%
+}%
+\polyline(0.82419,-0.69564)(0.78908,-0.66318)(0.75158,-0.63725)(0.71246,-0.61684)%
+(0.67248,-0.60097)(0.63240,-0.58865)(0.59300,-0.57888)(0.55504,-0.57068)(0.51928,-0.56304)%
+(0.48649,-0.55497)(0.45744,-0.54549)(0.43288,-0.53361)(0.41280,-0.51898)(0.39570,-0.50254)%
+(0.37987,-0.48534)(0.36363,-0.46845)(0.34530,-0.45295)(0.32358,-0.43973)(0.29944,-0.42879)%
+(0.27467,-0.41976)(0.25107,-0.41230)(0.23044,-0.40605)(0.21452,-0.40067)(0.20374,-0.39585)%
+(0.19724,-0.39136)(0.19411,-0.38695)(0.19341,-0.38238)(0.19423,-0.37742)(0.19592,-0.37195)%
+(0.19858,-0.36627)(0.20245,-0.36070)(0.20775,-0.35558)(0.21472,-0.35126)(0.22356,-0.34804)%
+(0.23405,-0.34593)(0.24580,-0.34478)(0.25843,-0.34446)(0.27152,-0.34481)(0.28469,-0.34568)%
+(0.29753,-0.34694)(0.30966,-0.34843)(0.32067,-0.35001)(0.33016,-0.35154)(0.33774,-0.35286)%
+\polyline(0.41839,-0.43100)(0.40862,-0.42173)(0.39536,-0.40850)(0.37893,-0.39183)%
+(0.35961,-0.37226)(0.33771,-0.35032)(0.31352,-0.32655)(0.28734,-0.30146)(0.25947,-0.27560)%
+(0.23021,-0.24949)(0.19985,-0.22367)(0.16898,-0.19861)(0.13874,-0.17463)(0.11037,-0.15207)%
+(0.08509,-0.13123)(0.06413,-0.11244)(0.04790,-0.09575)(0.03554,-0.08081)(0.02614,-0.06722)%
+(0.01872,-0.05461)(0.01239,-0.04261)(0.00683,-0.03113)(0.00249,-0.02050)(-0.00015,-0.01101)%
+(-0.00061,-0.00300)(0.00156,0.00320)(0.00679,0.00711)(0.01539,0.00804)(0.02769,0.00535)%
+(0.04401,-0.00164)(0.06467,-0.01354)(0.08964,-0.03035)(0.11867,-0.05169)(0.15155,-0.07719)%
+(0.18802,-0.10645)(0.22772,-0.13897)(0.26909,-0.17335)(0.31003,-0.20776)(0.34845,-0.24036)%
+(0.38225,-0.26930)(0.40932,-0.29275)(0.42756,-0.30887)(0.43488,-0.31583)(0.42916,-0.31178)%
+(0.40831,-0.29489)%
+\polyline(0.38311,-0.27221)(0.38240,-0.26776)(0.38210,-0.26354)(0.38219,-0.25954)%
+(0.38266,-0.25575)(0.38347,-0.25218)(0.38462,-0.24881)(0.38607,-0.24564)(0.38782,-0.24266)%
+(0.38983,-0.23987)(0.39209,-0.23727)(0.39458,-0.23485)(0.39729,-0.23260)(0.40018,-0.23051)%
+(0.40324,-0.22859)(0.40644,-0.22682)(0.40978,-0.22521)(0.41322,-0.22374)(0.41676,-0.22241)%
+(0.42036,-0.22122)(0.42401,-0.22016)(0.42768,-0.21922)(0.43137,-0.21840)(0.43504,-0.21770)%
+(0.43868,-0.21710)(0.44227,-0.21661)(0.44578,-0.21621)(0.44920,-0.21591)(0.45251,-0.21569)%
+(0.45568,-0.21555)(0.45870,-0.21549)(0.46155,-0.21551)(0.46420,-0.21558)(0.46664,-0.21572)%
+(0.46884,-0.21591)(0.47079,-0.21615)(0.47246,-0.21644)(0.47384,-0.21676)%
+\polyline(0.50409,-0.24700)(0.49723,-0.24301)(0.49144,-0.23910)(0.48667,-0.23526)%
+(0.48284,-0.23151)(0.47990,-0.22784)(0.47780,-0.22427)(0.47648,-0.22078)(0.47587,-0.21740)%
+(0.47593,-0.21411)(0.47658,-0.21093)(0.47778,-0.20786)(0.47946,-0.20489)(0.48156,-0.20204)%
+(0.48403,-0.19931)(0.48681,-0.19669)(0.48984,-0.19420)(0.49306,-0.19184)(0.49641,-0.18961)%
+(0.49984,-0.18751)(0.50329,-0.18555)(0.50672,-0.18373)(0.51014,-0.18205)(0.51354,-0.18050)%
+(0.51692,-0.17909)(0.52029,-0.17782)(0.52363,-0.17668)(0.52695,-0.17568)(0.53025,-0.17481)%
+(0.53352,-0.17407)(0.53677,-0.17347)(0.53998,-0.17300)(0.54317,-0.17266)(0.54633,-0.17245)%
+(0.54946,-0.17237)(0.55256,-0.17243)(0.55562,-0.17261)(0.55864,-0.17291)(0.56163,-0.17335)%
+(0.56458,-0.17391)%
+\polyline(0.58978,-0.20416)(0.58464,-0.19911)(0.58011,-0.19420)(0.57622,-0.18941)%
+(0.57296,-0.18473)(0.57035,-0.18018)(0.56839,-0.17573)(0.56710,-0.17139)(0.56647,-0.16715)%
+(0.56652,-0.16301)(0.56726,-0.15897)(0.56868,-0.15502)(0.57081,-0.15115)(0.57364,-0.14737)%
+(0.57718,-0.14366)(0.58147,-0.14010)(0.58662,-0.13698)(0.59277,-0.13468)(0.60005,-0.13357)%
+(0.60861,-0.13403)(0.61859,-0.13643)(0.63011,-0.14114)(0.64323,-0.14845)(0.65761,-0.15822)%
+(0.67283,-0.17027)(0.68845,-0.18437)(0.70404,-0.20032)(0.71919,-0.21791)(0.73345,-0.23692)%
+(0.74652,-0.25717)(0.75858,-0.27848)(0.76993,-0.30070)(0.78085,-0.32369)(0.79166,-0.34729)%
+(0.80265,-0.37135)(0.81410,-0.39571)(0.82633,-0.42023)(0.83963,-0.44475)(0.85430,-0.46912)%
+(0.87062,-0.49319)(0.88891,-0.51680)(0.90946,-0.53981)(0.93256,-0.56206)%
+%
+\linethickness{0.008in}%
+\end{picture}}%%
+}%
+\setcounter{ketpicctra}{-#3}%
+\settowidth{\Width}{{\tempcontents}}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{{\tempcontents}}\settodepth{\Depth}{{\tempcontents}}\setlength{\Height}{-\Height}%
+\put(#2,\theketpicctra){\hspace*{\Width}\raisebox{\Height}{{\tempcontents}}}%
+%
+}%
+\newcommand{\leftdownhand}[3][16]{%
+\def\tempcontents{%
+{\unitlength=1cm%
+\begin{picture}%
+( 1.01000, 0.82000)( -1.00000, -0.02000)%
+\linethickness{0.008in}%
+%
+%
+{%
+\ifnum %
+#1<10 %
+\linethickness{0.00#1 in}%
+%
+\else%
+\linethickness{0.0#1 in}%
+%
+\fi%
+}%
+\polyline(-0.82419,0.69564)(-0.78908,0.66318)(-0.75158,0.63725)(-0.71246,0.61684)%
+(-0.67248,0.60097)(-0.63240,0.58865)(-0.59300,0.57888)(-0.55504,0.57068)(-0.51928,0.56304)%
+(-0.48649,0.55497)(-0.45744,0.54549)(-0.43288,0.53361)(-0.41280,0.51898)(-0.39570,0.50254)%
+(-0.37987,0.48534)(-0.36363,0.46845)(-0.34530,0.45295)(-0.32358,0.43973)(-0.29944,0.42879)%
+(-0.27467,0.41976)(-0.25107,0.41230)(-0.23044,0.40605)(-0.21452,0.40067)(-0.20374,0.39585)%
+(-0.19724,0.39136)(-0.19411,0.38695)(-0.19341,0.38238)(-0.19423,0.37742)(-0.19592,0.37195)%
+(-0.19858,0.36627)(-0.20245,0.36070)(-0.20775,0.35558)(-0.21472,0.35126)(-0.22356,0.34804)%
+(-0.23405,0.34593)(-0.24580,0.34478)(-0.25843,0.34446)(-0.27152,0.34481)(-0.28469,0.34568)%
+(-0.29753,0.34694)(-0.30966,0.34843)(-0.32067,0.35001)(-0.33016,0.35154)(-0.33774,0.35286)%
+\polyline(-0.41839,0.43100)(-0.40862,0.42173)(-0.39536,0.40850)(-0.37893,0.39183)%
+(-0.35961,0.37226)(-0.33771,0.35032)(-0.31352,0.32655)(-0.28734,0.30146)(-0.25947,0.27560)%
+(-0.23021,0.24949)(-0.19985,0.22367)(-0.16898,0.19861)(-0.13874,0.17463)(-0.11037,0.15207)%
+(-0.08509,0.13123)(-0.06413,0.11244)(-0.04790,0.09575)(-0.03554,0.08081)(-0.02614,0.06722)%
+(-0.01872,0.05461)(-0.01239,0.04261)(-0.00683,0.03113)(-0.00249,0.02050)(0.00015,0.01101)%
+(0.00061,0.00300)(-0.00156,-0.00320)(-0.00679,-0.00711)(-0.01539,-0.00804)(-0.02769,-0.00535)%
+(-0.04401,0.00164)(-0.06467,0.01354)(-0.08964,0.03035)(-0.11867,0.05169)(-0.15155,0.07719)%
+(-0.18802,0.10645)(-0.22772,0.13897)(-0.26909,0.17335)(-0.31003,0.20776)(-0.34845,0.24036)%
+(-0.38225,0.26930)(-0.40932,0.29275)(-0.42756,0.30887)(-0.43488,0.31583)(-0.42916,0.31178)%
+(-0.40831,0.29489)%
+\polyline(-0.38311,0.27221)(-0.38240,0.26776)(-0.38210,0.26354)(-0.38219,0.25954)%
+(-0.38266,0.25575)(-0.38347,0.25218)(-0.38462,0.24881)(-0.38607,0.24564)(-0.38782,0.24266)%
+(-0.38983,0.23987)(-0.39209,0.23727)(-0.39458,0.23485)(-0.39729,0.23260)(-0.40018,0.23051)%
+(-0.40324,0.22859)(-0.40644,0.22682)(-0.40978,0.22521)(-0.41322,0.22374)(-0.41676,0.22241)%
+(-0.42036,0.22122)(-0.42401,0.22016)(-0.42768,0.21922)(-0.43137,0.21840)(-0.43504,0.21770)%
+(-0.43868,0.21710)(-0.44227,0.21661)(-0.44578,0.21621)(-0.44920,0.21591)(-0.45251,0.21569)%
+(-0.45568,0.21555)(-0.45870,0.21549)(-0.46155,0.21551)(-0.46420,0.21558)(-0.46664,0.21572)%
+(-0.46884,0.21591)(-0.47079,0.21615)(-0.47246,0.21644)(-0.47384,0.21676)%
+\polyline(-0.50409,0.24700)(-0.49723,0.24301)(-0.49144,0.23910)(-0.48667,0.23526)%
+(-0.48284,0.23151)(-0.47990,0.22784)(-0.47780,0.22427)(-0.47648,0.22078)(-0.47587,0.21740)%
+(-0.47593,0.21411)(-0.47658,0.21093)(-0.47778,0.20786)(-0.47946,0.20489)(-0.48156,0.20204)%
+(-0.48403,0.19931)(-0.48681,0.19669)(-0.48984,0.19420)(-0.49306,0.19184)(-0.49641,0.18961)%
+(-0.49984,0.18751)(-0.50329,0.18555)(-0.50672,0.18373)(-0.51014,0.18205)(-0.51354,0.18050)%
+(-0.51692,0.17909)(-0.52029,0.17782)(-0.52363,0.17668)(-0.52695,0.17568)(-0.53025,0.17481)%
+(-0.53352,0.17407)(-0.53677,0.17347)(-0.53998,0.17300)(-0.54317,0.17266)(-0.54633,0.17245)%
+(-0.54946,0.17237)(-0.55256,0.17243)(-0.55562,0.17261)(-0.55864,0.17291)(-0.56163,0.17335)%
+(-0.56458,0.17391)%
+\polyline(-0.58978,0.20416)(-0.58464,0.19911)(-0.58011,0.19420)(-0.57622,0.18941)%
+(-0.57296,0.18473)(-0.57035,0.18018)(-0.56839,0.17573)(-0.56710,0.17139)(-0.56647,0.16715)%
+(-0.56652,0.16301)(-0.56726,0.15897)(-0.56868,0.15502)(-0.57081,0.15115)(-0.57364,0.14737)%
+(-0.57718,0.14366)(-0.58147,0.14010)(-0.58662,0.13698)(-0.59277,0.13468)(-0.60005,0.13357)%
+(-0.60861,0.13403)(-0.61859,0.13643)(-0.63011,0.14114)(-0.64323,0.14845)(-0.65761,0.15822)%
+(-0.67283,0.17027)(-0.68845,0.18437)(-0.70404,0.20032)(-0.71919,0.21791)(-0.73345,0.23692)%
+(-0.74652,0.25717)(-0.75858,0.27848)(-0.76993,0.30070)(-0.78085,0.32369)(-0.79166,0.34729)%
+(-0.80265,0.37135)(-0.81410,0.39571)(-0.82633,0.42023)(-0.83963,0.44475)(-0.85430,0.46912)%
+(-0.87062,0.49319)(-0.88891,0.51680)(-0.90946,0.53981)(-0.93256,0.56206)%
+%
+\linethickness{0.008in}%
+\end{picture}}%%
+}%
+\setcounter{ketpicctra}{-#3}%
+\settowidth{\Width}{{\tempcontents}}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{{\tempcontents}}\settodepth{\Depth}{{\tempcontents}}\setlength{\Height}{\Depth}%
+\put(#2,\theketpicctra){\hspace*{\Width}\raisebox{\Height}{{\tempcontents}}}%
+%
+}%
+\newcommand{\rightdownhand}[3][16]{%
+\def\tempcontents{%
+{\unitlength=1cm%
+\begin{picture}%
+( 1.01000, 0.82000)( -0.01000, -0.02000)%
+\linethickness{0.008in}%
+%
+%
+{%
+\ifnum %
+#1<10 %
+\linethickness{0.00#1 in}%
+%
+\else%
+\linethickness{0.0#1 in}%
+%
+\fi%
+}%
+\polyline(0.82419,0.69564)(0.78908,0.66318)(0.75158,0.63725)(0.71246,0.61684)(0.67248,0.60097)%
+(0.63240,0.58865)(0.59300,0.57888)(0.55504,0.57068)(0.51928,0.56304)(0.48649,0.55497)%
+(0.45744,0.54549)(0.43288,0.53361)(0.41280,0.51898)(0.39570,0.50254)(0.37987,0.48534)%
+(0.36363,0.46845)(0.34530,0.45295)(0.32358,0.43973)(0.29944,0.42879)(0.27467,0.41976)%
+(0.25107,0.41230)(0.23044,0.40605)(0.21452,0.40067)(0.20374,0.39585)(0.19724,0.39136)%
+(0.19411,0.38695)(0.19341,0.38238)(0.19423,0.37742)(0.19592,0.37195)(0.19858,0.36627)%
+(0.20245,0.36070)(0.20775,0.35558)(0.21472,0.35126)(0.22356,0.34804)(0.23405,0.34593)%
+(0.24580,0.34478)(0.25843,0.34446)(0.27152,0.34481)(0.28469,0.34568)(0.29753,0.34694)%
+(0.30966,0.34843)(0.32067,0.35001)(0.33016,0.35154)(0.33774,0.35286)%
+\polyline(0.41839,0.43100)(0.40862,0.42173)(0.39536,0.40850)(0.37893,0.39183)(0.35961,0.37226)%
+(0.33771,0.35032)(0.31352,0.32655)(0.28734,0.30146)(0.25947,0.27560)(0.23021,0.24949)%
+(0.19985,0.22367)(0.16898,0.19861)(0.13874,0.17463)(0.11037,0.15207)(0.08509,0.13123)%
+(0.06413,0.11244)(0.04790,0.09575)(0.03554,0.08081)(0.02614,0.06722)(0.01872,0.05461)%
+(0.01239,0.04261)(0.00683,0.03113)(0.00249,0.02050)(-0.00015,0.01101)(-0.00061,0.00300)%
+(0.00156,-0.00320)(0.00679,-0.00711)(0.01539,-0.00804)(0.02769,-0.00535)(0.04401,0.00164)%
+(0.06467,0.01354)(0.08964,0.03035)(0.11867,0.05169)(0.15155,0.07719)(0.18802,0.10645)%
+(0.22772,0.13897)(0.26909,0.17335)(0.31003,0.20776)(0.34845,0.24036)(0.38225,0.26930)%
+(0.40932,0.29275)(0.42756,0.30887)(0.43488,0.31583)(0.42916,0.31178)(0.40831,0.29489)%
+\polyline(0.38311,0.27221)(0.38240,0.26776)(0.38210,0.26354)(0.38219,0.25954)(0.38266,0.25575)%
+(0.38347,0.25218)(0.38462,0.24881)(0.38607,0.24564)(0.38782,0.24266)(0.38983,0.23987)%
+(0.39209,0.23727)(0.39458,0.23485)(0.39729,0.23260)(0.40018,0.23051)(0.40324,0.22859)%
+(0.40644,0.22682)(0.40978,0.22521)(0.41322,0.22374)(0.41676,0.22241)(0.42036,0.22122)%
+(0.42401,0.22016)(0.42768,0.21922)(0.43137,0.21840)(0.43504,0.21770)(0.43868,0.21710)%
+(0.44227,0.21661)(0.44578,0.21621)(0.44920,0.21591)(0.45251,0.21569)(0.45568,0.21555)%
+(0.45870,0.21549)(0.46155,0.21551)(0.46420,0.21558)(0.46664,0.21572)(0.46884,0.21591)%
+(0.47079,0.21615)(0.47246,0.21644)(0.47384,0.21676)%
+\polyline(0.50409,0.24700)(0.49723,0.24301)(0.49144,0.23910)(0.48667,0.23526)(0.48284,0.23151)%
+(0.47990,0.22784)(0.47780,0.22427)(0.47648,0.22078)(0.47587,0.21740)(0.47593,0.21411)%
+(0.47658,0.21093)(0.47778,0.20786)(0.47946,0.20489)(0.48156,0.20204)(0.48403,0.19931)%
+(0.48681,0.19669)(0.48984,0.19420)(0.49306,0.19184)(0.49641,0.18961)(0.49984,0.18751)%
+(0.50329,0.18555)(0.50672,0.18373)(0.51014,0.18205)(0.51354,0.18050)(0.51692,0.17909)%
+(0.52029,0.17782)(0.52363,0.17668)(0.52695,0.17568)(0.53025,0.17481)(0.53352,0.17407)%
+(0.53677,0.17347)(0.53998,0.17300)(0.54317,0.17266)(0.54633,0.17245)(0.54946,0.17237)%
+(0.55256,0.17243)(0.55562,0.17261)(0.55864,0.17291)(0.56163,0.17335)(0.56458,0.17391)%
+\polyline(0.58978,0.20416)(0.58464,0.19911)(0.58011,0.19420)(0.57622,0.18941)(0.57296,0.18473)%
+(0.57035,0.18018)(0.56839,0.17573)(0.56710,0.17139)(0.56647,0.16715)(0.56652,0.16301)%
+(0.56726,0.15897)(0.56868,0.15502)(0.57081,0.15115)(0.57364,0.14737)(0.57718,0.14366)%
+(0.58147,0.14010)(0.58662,0.13698)(0.59277,0.13468)(0.60005,0.13357)(0.60861,0.13403)%
+(0.61859,0.13643)(0.63011,0.14114)(0.64323,0.14845)(0.65761,0.15822)(0.67283,0.17027)%
+(0.68845,0.18437)(0.70404,0.20032)(0.71919,0.21791)(0.73345,0.23692)(0.74652,0.25717)%
+(0.75858,0.27848)(0.76993,0.30070)(0.78085,0.32369)(0.79166,0.34729)(0.80265,0.37135)%
+(0.81410,0.39571)(0.82633,0.42023)(0.83963,0.44475)(0.85430,0.46912)(0.87062,0.49319)%
+(0.88891,0.51680)(0.90946,0.53981)(0.93256,0.56206)%
+%
+\linethickness{0.008in}%
+\end{picture}}%%
+}%
+\setcounter{ketpicctra}{-#3}%
+\settowidth{\Width}{{\tempcontents}}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{{\tempcontents}}\settodepth{\Depth}{{\tempcontents}}\setlength{\Height}{\Depth}%
+\put(#2,\theketpicctra){\hspace*{\Width}\raisebox{\Height}{{\tempcontents}}}%
+%
+}%
+\newcommand{\cirscoremark}[2][20]{%
+\scalebox{#2}{%
+{\unitlength=0.04mm%
+\begin{picture}%
+( 621.63538, 724.07834)( 277.81039,2339.74153)%
+\linethickness{0.008in}%
+%
+%
+{%
+\ifnum %
+#1<10 %
+\linethickness{0.00#1 in}%
+%
+\else%
+\linethickness{0.0#1 in}%
+%
+\fi%
+}%
+\polyline(581.42100,2343.98000)(517.25871,2339.74153)(461.02448,2347.24212)(412.58070,2365.27538)%
+(371.78973,2392.63490)(338.51396,2428.11428)(312.61577,2470.50710)(293.95752,2518.60696)%
+(282.40160,2571.20746)(277.81039,2627.10220)(280.04626,2685.08476)(288.97159,2743.94874)%
+(304.44877,2802.48773)(326.33983,2859.45726)(354.50312,2913.17008)(388.79455,2961.65333)%
+(429.07001,3002.92940)(475.18538,3035.02067)(526.99654,3055.94950)(584.29056,3063.81987)%
+(645.27185,3058.61222)(706.56216,3042.18351)(764.71444,3016.47226)(816.28162,2983.41699)%
+(857.81665,2944.95624)(885.90654,2903.01977)(899.18278,2859.01098)(899.44577,2813.51741)%
+(888.76853,2767.05643)(869.22406,2720.14541)(842.88537,2673.30172)(811.82546,2627.04273)%
+(778.11735,2581.88580)(743.83405,2538.34830)(711.04855,2496.94761)(681.83387,2458.20108)%
+(658.26302,2422.62609)(642.40900,2390.74000)%
+\polyline(622.08000,2390.74000)(583.00266,2402.49652)(548.77013,2414.09750)(519.23649,2425.79318)%
+(494.25586,2437.83376)(473.68232,2450.46947)(457.36999,2463.95054)(445.17295,2478.52717)%
+(436.94531,2494.44961)(432.54116,2511.96806)(431.81461,2531.33275)(434.61976,2552.79389)%
+(440.81070,2576.60172)(450.23717,2602.92167)(462.70610,2631.08618)(478.00010,2659.95493)%
+(495.90151,2688.38216)(516.19267,2715.22212)(538.65591,2739.32904)(563.05305,2759.58189)%
+(588.80104,2775.27493)(615.03072,2786.04698)(640.86425,2791.54730)(665.42380,2791.42518)%
+(687.83153,2785.32986)(707.22241,2772.93278)(723.15440,2754.63757)(735.69523,2731.73029)%
+(744.94296,2705.54955)(750.99569,2677.43394)(753.95148,2648.72206)(753.90950,2620.74666)%
+(751.06452,2594.33214)(745.77971,2569.40718)(738.43537,2545.80933)(729.41181,2523.37610)%
+(719.08936,2501.94502)(707.84831,2481.35362)(696.06898,2461.43943)(684.13168,2442.03997)%
+(672.41672,2422.99277)(661.30441,2404.13536)(651.17507,2385.30526)(642.40900,2366.34000)%
+%
+\linethickness{0.008in}%
+\end{picture}}%%
+}%
+%
+}%
+\newcommand{\scirscoremark}[2][20]{%
+\scalebox{#2}{%
+{\unitlength=0.04mm%
+\begin{picture}%
+( 535.76632, 538.46556)( 296.43854,1549.10000)%
+\linethickness{0.008in}%
+%
+%
+{%
+\ifnum %
+#1<10 %
+\linethickness{0.00#1 in}%
+%
+\else%
+\linethickness{0.0#1 in}%
+%
+\fi%
+}%
+\polyline(603.78400,1549.10000)(549.09950,1555.72780)(499.93413,1568.59203)(456.23153,1586.89332)%
+(417.93533,1609.83230)(384.98918,1636.60958)(357.33669,1666.42580)(334.92151,1698.48158)%
+(317.68727,1731.97755)(305.57594,1766.14560)(298.51789,1800.43565)(296.43854,1834.39046)%
+(299.26329,1867.55317)(306.88798,1899.47041)(318.93045,1929.72197)(334.85626,1957.90583)%
+(354.12938,1983.62013)(376.21735,2006.48478)(400.63359,2026.40258)(426.92367,2043.47418)%
+(454.63379,2057.80428)(483.32821,2069.48943)(512.90936,2078.47342)(543.58006,2084.56434)%
+(575.55355,2087.56556)(609.01674,2087.28028)(643.39940,2083.50671)(677.27873,2076.03742)%
+(709.18644,2064.66465)(737.66856,2049.18630)(761.96761,2029.67427)(782.32209,2006.59228)%
+(799.04710,1980.43418)(812.45557,1951.69401)(822.64859,1920.88299)(829.34059,1888.54374)%
+(832.20486,1855.22221)(830.91512,1821.46418)(825.26103,1787.76328)(815.30455,1754.49078)%
+(801.14666,1722.00039)(782.88837,1690.64582)(760.63067,1660.78079)(734.47454,1632.75900)%
+(704.52099,1606.93416)(670.87100,1583.66000)%
+%
+\linethickness{0.008in}%
+\end{picture}}%%
+}%
+%
+}%
+\newcommand{\triscoremark}[2][20]{%
+\scalebox{#2}{%
+{\unitlength=0.04mm%
+\begin{picture}%
+( 579.38800, 435.04900)( 235.82100, 892.46100)%
+\linethickness{0.008in}%
+%
+%
+{%
+\ifnum %
+#1<10 %
+\linethickness{0.00#1 in}%
+%
+\else%
+\linethickness{0.0#1 in}%
+%
+\fi%
+}%
+\polyline(577.35500,1327.51000)(567.14266,1313.03444)(556.94693,1298.57080)(546.77105,1284.13099)%
+(536.61828,1269.72692)(526.49187,1255.37053)(516.39507,1241.07373)(506.33113,1226.84844)%
+(496.30330,1212.70658)(486.31483,1198.66006)(476.36899,1184.72081)(466.46901,1170.90075)%
+(456.61814,1157.21179)(446.81965,1143.66586)(437.07678,1130.27487)(427.39279,1117.05074)%
+(417.77092,1104.00540)(408.21442,1091.15076)(398.72656,1078.49874)(389.31057,1066.06126)%
+(379.96972,1053.85024)(370.70724,1041.87760)(361.52641,1030.15526)(352.43045,1018.69513)%
+(343.42264,1007.50914)(334.50621,996.60921)(325.68443,986.00725)(316.96053,975.71519)%
+(308.33779,965.74494)(299.81943,956.10842)(291.40872,946.81756)(283.10891,937.88427)%
+(274.92325,929.32047)(266.85499,921.13808)(258.90739,913.34901)(251.08369,905.96520)%
+(243.38714,898.99856)(235.82100,892.46100)%
+\polyline(235.82100,892.46100)(240.77169,896.42750)(246.54485,900.19895)(253.12099,903.78079)%
+(260.48059,907.17841)(268.60416,910.39725)(277.47218,913.44271)(287.06515,916.32022)%
+(297.36356,919.03519)(308.34792,921.59304)(319.99871,923.99919)(332.29642,926.25905)%
+(345.22156,928.37804)(358.75462,930.36158)(372.87609,932.21508)(387.56647,933.94397)%
+(402.80624,935.55366)(418.57592,937.04957)(434.85598,938.43711)(451.62693,939.72170)%
+(468.86925,940.90877)(486.56345,942.00372)(504.69002,943.01197)(523.22945,943.93895)%
+(542.16224,944.79006)(561.46888,945.57073)(581.12987,946.28637)(601.12569,946.94241)%
+(621.43686,947.54425)(642.04385,948.09731)(662.92717,948.60702)(684.06730,949.07879)%
+(705.44475,949.51803)(727.04001,949.93017)(748.83356,950.32061)(770.80592,950.69479)%
+(792.93757,951.05811)(815.20900,951.41600)%
+\polyline(815.20900,951.41600)(807.14899,961.02180)(799.28294,970.50244)(791.60435,979.86661)%
+(784.10672,989.12298)(776.78356,998.28023)(769.62835,1007.34705)(762.63460,1016.33211)%
+(755.79580,1025.24409)(749.10546,1034.09168)(742.55707,1042.88355)(736.14412,1051.62839)%
+(729.86013,1060.33486)(723.69859,1069.01167)(717.65299,1077.66747)(711.71684,1086.31096)%
+(705.88363,1094.95081)(700.14686,1103.59571)(694.50003,1112.25433)(688.93664,1120.93535)%
+(683.45019,1129.64746)(678.03417,1138.39933)(672.68209,1147.19965)(667.38744,1156.05709)%
+(662.14373,1164.98033)(656.94444,1173.97805)(651.78308,1183.05894)(646.65315,1192.23168)%
+(641.54814,1201.50493)(636.46156,1210.88739)(631.38690,1220.38773)(626.31767,1230.01464)%
+(621.24735,1239.77679)(616.16945,1249.68287)(611.07746,1259.74154)(605.96490,1269.96151)%
+(600.82524,1280.35143)(595.65200,1290.92000)%
+%
+\linethickness{0.008in}%
+\end{picture}}%%
+}%
+%
+}%
+\newcommand{\crosscoremark}[2][20]{%
+\scalebox{#2}{%
+{\unitlength=0.04mm%
+\begin{picture}%
+( 727.79300, 479.77400)( 209.39300, 264.28200)%
+\linethickness{0.008in}%
+%
+%
+{%
+\ifnum %
+#1<10 %
+\linethickness{0.00#1 in}%
+%
+\else%
+\linethickness{0.0#1 in}%
+%
+\fi%
+}%
+\polyline(532.63100,735.92500)(537.69449,712.99599)(542.66769,690.94870)(547.55386,669.75605)%
+(552.35624,649.39093)(557.07808,629.82627)(561.72263,611.03497)(566.29315,592.98994)%
+(570.79288,575.66409)(575.22507,559.03032)(579.59297,543.06155)(583.89984,527.73068)%
+(588.14892,513.01063)(592.34346,498.87430)(596.48672,485.29460)(600.58193,472.24444)%
+(604.63236,459.69673)(608.64125,447.62437)(612.61185,436.00028)(616.54742,424.79737)%
+(620.45119,413.98854)(624.32643,403.54671)(628.17638,393.44477)(632.00429,383.65565)%
+(635.81342,374.15225)(639.60700,364.90747)(643.38830,355.89423)(647.16056,347.08544)%
+(650.92703,338.45400)(654.69096,329.97283)(658.45560,321.61483)(662.22420,313.35291)%
+(666.00002,305.15998)(669.78629,297.00895)(673.58628,288.87273)(677.40322,280.72422)%
+(681.24038,272.53634)(685.10100,264.28200)%
+\polyline(209.39300,311.04000)(229.97986,325.81197)(250.42730,340.29966)(270.74288,354.51284)%
+(290.93421,368.46126)(311.00886,382.15466)(330.97442,395.60280)(350.83847,408.81544)%
+(370.60861,421.80232)(390.29242,434.57320)(409.89748,447.13783)(429.43138,459.50596)%
+(448.90171,471.68735)(468.31604,483.69175)(487.68198,495.52890)(507.00709,507.20857)%
+(526.29897,518.74050)(545.56520,530.13446)(564.81338,541.40018)(584.05108,552.54742)%
+(603.28588,563.58594)(622.52539,574.52549)(641.77717,585.37581)(661.04883,596.14667)%
+(680.34793,606.84782)(699.68208,617.48900)(719.05884,628.07997)(738.48582,638.63049)%
+(757.97060,649.15029)(777.52075,659.64915)(797.14387,670.13681)(816.84755,680.62301)%
+(836.63936,691.11753)(856.52690,701.63010)(876.51775,712.17048)(896.61949,722.74842)%
+(916.83971,733.37368)(937.18600,744.05600)%
+%
+\linethickness{0.008in}%
+\end{picture}}%%
+}%
+%
+}%
+\newcommand{\boxline}[5][8]{%
+\def\tmpcontents{%
+{\unitlength=1mm%
+\begin{picture}%
+( 1.00000, 0.02000)( 0.00000, -0.01000)%
+\linethickness{0.008in}%
+%
+%
+{%
+\ifnum %
+#1<10 %
+\linethickness{0.00#1 in}%
+%
+\else%
+\linethickness{0.0#1 in}%
+%
+\fi%
+}%
+\polyline(0.00000,0.00000)(1.00000,0.00000)%
+%
+\linethickness{0.008in}%
+\end{picture}}%%
+}%
+\setcounter{ketpicctrc}{-#3}%
+\addtocounter{ketpicctrc}{-#5}%
+\setcounter{ketpicctra}{0}%
+\setcounter{ketpicctra}{1}%
+\addtocounter{ketpicctra}{-1}%
+%
+{%
+\loop%
+\addtocounter{ketpicctra}{1}%
+\setcounter{ketpicctrb}{#2}%
+\addtocounter{ketpicctrb}{\value{ketpicctra}}%
+\addtocounter{ketpicctrb}{-1}%
+\settowidth{\Width}{\tmpcontents}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{\tmpcontents}\settodepth{\Depth}{\tmpcontents}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(\theketpicctrb,-#3){\hspace*{\Width}\raisebox{\Height}{\tmpcontents}}%
+\settowidth{\Width}{\tmpcontents}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{\tmpcontents}\settodepth{\Depth}{\tmpcontents}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(\theketpicctrb,\theketpicctrc){\hspace*{\Width}\raisebox{\Height}{\tmpcontents}}%
+%
+\ifnum\theketpicctra<#4%
+\repeat%
+}%
+\def\tmpcontents{%
+{\unitlength=1mm%
+\begin{picture}%
+( 0.02000, 1.00000)( -0.01000, 0.00000)%
+\linethickness{0.008in}%
+%
+%
+{%
+\ifnum %
+#1<10 %
+\linethickness{0.00#1 in}%
+%
+\else%
+\linethickness{0.0#1 in}%
+%
+\fi%
+}%
+\polyline(0.00000,0.00000)(0.00000,1.00000)%
+%
+\linethickness{0.008in}%
+\end{picture}}%%
+}%
+\setcounter{ketpicctrc}{#2}%
+\addtocounter{ketpicctrc}{#4}%
+\setcounter{ketpicctra}{0}%
+\setcounter{ketpicctra}{1}%
+\addtocounter{ketpicctra}{-1}%
+%
+{%
+\loop%
+\addtocounter{ketpicctra}{1}%
+\setcounter{ketpicctrb}{-#3}%
+\addtocounter{ketpicctrb}{-#5}%
+\addtocounter{ketpicctrb}{\value{ketpicctra}}%
+\addtocounter{ketpicctrb}{-1}%
+\settowidth{\Width}{\tmpcontents}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{\tmpcontents}\settodepth{\Depth}{\tmpcontents}\setlength{\Height}{\Depth}%
+\put(#2,\theketpicctrb){\hspace*{\Width}\raisebox{\Height}{\tmpcontents}}%
+\settowidth{\Width}{\tmpcontents}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{\tmpcontents}\settodepth{\Depth}{\tmpcontents}\setlength{\Height}{\Depth}%
+\put(\theketpicctrc,\theketpicctrb){\hspace*{\Width}\raisebox{\Height}{\tmpcontents}}%
+%
+\ifnum\theketpicctra<#5%
+\repeat%
+}%
+%
+}%
+\newcommand{\boxlinene}[5][8]{%
+\boxline[#1]{#2}{#3}{#4}{#5}%
+%
+}%
+\newcommand{\boxlinec}[5][8]{%
+\setcounter{ketpicctrd}{-#4}%
+\divide\value{ketpicctrd} by 2%
+\addtocounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{#5}%
+\divide\value{ketpicctre} by 2%
+\addtocounter{ketpicctre}{#3}%
+\boxline[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}%
+%
+}%
+\newcommand{\boxlinee}[5][8]{%
+\setcounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{#5}%
+\divide\value{ketpicctre} by 2%
+\addtocounter{ketpicctre}{#3}%
+\boxline[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}%
+%
+}%
+\newcommand{\boxlinew}[5][8]{%
+\setcounter{ketpicctrd}{-#4}%
+\addtocounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{#5}%
+\divide\value{ketpicctre} by 2%
+\addtocounter{ketpicctre}{#3}%
+\boxline[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}%
+%
+}%
+\newcommand{\boxlinen}[5][8]{%
+\setcounter{ketpicctrd}{-#4}%
+\divide\value{ketpicctrd} by 2%
+\addtocounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{#3}%
+\boxline[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}%
+%
+}%
+\newcommand{\boxlines}[5][8]{%
+\setcounter{ketpicctrd}{-#4}%
+\divide\value{ketpicctrd} by 2%
+\addtocounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{#5}%
+\addtocounter{ketpicctre}{#3}%
+\boxline[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}%
+%
+}%
+\newcommand{\boxlinenw}[5][0.008]{%
+\setcounter{ketpicctrd}{-#4}%
+\addtocounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{#3}%
+\boxline[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}%
+%
+}%
+\newcommand{\boxlinese}[5][8]{%
+\setcounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{#5}%
+\addtocounter{ketpicctre}{#3}%
+\boxline[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}%
+%
+}%
+\newcommand{\boxlinesw}[5][8]{%
+\setcounter{ketpicctrd}{-#4}%
+\addtocounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{#5}%
+\addtocounter{ketpicctre}{#3}%
+\boxline[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}%
+%
+}%
+\newcommand{\ketboxframe}[6][8]{%
+\def\tmpcontents{%
+\setcounter{ketpicctrf}{#4}%
+\addtocounter{ketpicctrf}{-4}%
+\setlength{\Width}{\theketpicctrf\unitlength}%
+\begin{minipage}{\Width}%
+#6%
+\end{minipage}%
+%
+}%
+\setcounter{ketpicctrg}{#2}%
+\addtocounter{ketpicctrg}{2}%
+\setcounter{ketpicctrh}{-#3}%
+\addtocounter{ketpicctrh}{-2}%
+\settowidth{\Width}{\tmpcontents}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{\tmpcontents}\settodepth{\Depth}{\tmpcontents}\setlength{\Height}{-\Height}%
+\put(\theketpicctrg,\theketpicctrh){\hspace*{\Width}\raisebox{\Height}{\tmpcontents}}%
+\boxline[#1]{#2}{#3}{#4}{#5}%
+%
+}%
+\newcommand{\boxframese}[6][8]{%
+\ketboxframe[#1]{#2}{#3}{#4}{#5}{#6}%
+%
+}%
+\newcommand{\boxframec}[6][8]{%
+\setcounter{ketpicctrd}{-#4}%
+\divide\value{ketpicctrd} by 2%
+\addtocounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{-#5}%
+\divide\value{ketpicctre} by 2%
+\addtocounter{ketpicctre}{#3}%
+\ketboxframe[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}{#6}%
+%
+}%
+\newcommand{\boxframee}[6][8]{%
+\setcounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{-#5}%
+\divide\value{ketpicctre} by 2%
+\addtocounter{ketpicctre}{#3}%
+\ketboxframe[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}{#6}%
+%
+}%
+\newcommand{\boxframew}[6][8]{%
+\setcounter{ketpicctrd}{-#4}%
+\addtocounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{-#5}%
+\divide\value{ketpicctre} by 2%
+\addtocounter{ketpicctre}{#3}%
+\ketboxframe[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}{#6}%
+%
+}%
+\newcommand{\boxframen}[6][8]{%
+\setcounter{ketpicctrd}{-#4}%
+\divide\value{ketpicctrd} by 2%
+\addtocounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{#3}%
+\addtocounter{ketpicctre}{-#5}%
+\ketboxframe[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}{#6}%
+%
+}%
+\newcommand{\boxframes}[6][8]{%
+\setcounter{ketpicctrd}{-#4}%
+\divide\value{ketpicctrd} by 2%
+\addtocounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{#3}%
+\ketboxframe[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}{#6}%
+%
+}%
+\newcommand{\boxframenw}[6][8]{%
+\setcounter{ketpicctrd}{-#4}%
+\addtocounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{#3}%
+\addtocounter{ketpicctre}{-#5}%
+\ketboxframe[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}{#6}%
+%
+}%
+\newcommand{\boxframene}[6][8]{%
+\setcounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{#3}%
+\addtocounter{ketpicctre}{-#5}%
+\ketboxframe[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}{#6}%
+%
+}%
+\newcommand{\boxframesw}[6][8]{%
+\setcounter{ketpicctrd}{-#4}%
+\addtocounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{#3}%
+\ketboxframe[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}{#6}%
+%
+}%
+\newcommand{\circleline}[4][8]{%
+\settowidth{\Width}{\circlemark[#1]{#4}}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{\circlemark[#1]{#4}}\settodepth{\Depth}{\circlemark[#1]{#4}}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(#2,-#3){\hspace*{\Width}\raisebox{\Height}{\circlemark[#1]{#4}}}%
+%
+}%
+\newcommand{\hjaggyline}[4][8]{%
+\def\tmpcontents{%
+{\unitlength=1mm%
+\begin{picture}%
+( 1.00000, 1.00000)( 0.00000, 0.00000)%
+\linethickness{0.008in}%
+%
+%
+{%
+\ifnum %
+#1<10 %
+\linethickness{0.00#1 in}%
+%
+\else%
+\linethickness{0.0#1 in}%
+%
+\fi%
+}%
+\polyline(0.00000,0.00000)(1.00000,1.00000)%
+%
+\linethickness{0.008in}%
+\end{picture}}%%
+}%
+\def\tmpcontentsb{%
+{\unitlength=1mm%
+\begin{picture}%
+( 1.00000, 1.00000)( 0.00000, 0.00000)%
+\linethickness{0.008in}%
+%
+%
+{%
+\ifnum %
+#1<10 %
+\linethickness{0.00#1 in}%
+%
+\else%
+\linethickness{0.0#1 in}%
+%
+\fi%
+}%
+\polyline(0.00000,1.00000)(1.00000,0.00000)%
+%
+\linethickness{0.008in}%
+\end{picture}}%%
+}%
+\setcounter{ketpicctra}{0}%
+\setcounter{ketpicctra}{1}%
+\addtocounter{ketpicctra}{-1}%
+%
+{%
+\loop%
+\addtocounter{ketpicctra}{1}%
+\setcounter{ketpicctrb}{#2}%
+\addtocounter{ketpicctrb}{\value{ketpicctra}}%
+\addtocounter{ketpicctrb}{-1}%
+\setcounter{ketpicctrc}{\value{ketpicctra}}%
+\divide\value{ketpicctrc} by 2%
+\multiply\value{ketpicctrc} by 2%
+%
+{%
+\ifnum %
+\theketpicctrc<\theketpicctra %
+\settowidth{\Width}{\tmpcontents}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{\tmpcontents}\settodepth{\Depth}{\tmpcontents}\setlength{\Height}{\Depth}%
+\put(\theketpicctrb,-#3){\hspace*{\Width}\raisebox{\Height}{\tmpcontents}}%
+%
+\else%
+\settowidth{\Width}{\tmpcontentsb}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{\tmpcontentsb}\settodepth{\Depth}{\tmpcontentsb}\setlength{\Height}{\Depth}%
+\put(\theketpicctrb,-#3){\hspace*{\Width}\raisebox{\Height}{\tmpcontentsb}}%
+%
+\fi%
+}%
+%
+\ifnum\theketpicctra<#4%
+\repeat%
+}%
+%
+}%
+\newcommand{\vjaggyline}[4][8]{%
+\def\tmpcontents{%
+{\unitlength=1mm%
+\begin{picture}%
+( 1.00000, 1.00000)( 0.00000, -1.00000)%
+\linethickness{0.008in}%
+%
+%
+{%
+\ifnum %
+#1<10 %
+\linethickness{0.00#1 in}%
+%
+\else%
+\linethickness{0.0#1 in}%
+%
+\fi%
+}%
+\polyline(0.00000,0.00000)(1.00000,-1.00000)%
+%
+\linethickness{0.008in}%
+\end{picture}}%%
+}%
+\def\tmpcontentsb{%
+{\unitlength=1mm%
+\begin{picture}%
+( 1.00000, 1.00000)( 0.00000, -1.00000)%
+\linethickness{0.008in}%
+%
+%
+{%
+\ifnum %
+#1<10 %
+\linethickness{0.00#1 in}%
+%
+\else%
+\linethickness{0.0#1 in}%
+%
+\fi%
+}%
+\polyline(1.00000,0.00000)(0.00000,-1.00000)%
+%
+\linethickness{0.008in}%
+\end{picture}}%%
+}%
+\setcounter{ketpicctra}{0}%
+\setcounter{ketpicctra}{1}%
+\addtocounter{ketpicctra}{-1}%
+%
+{%
+\loop%
+\addtocounter{ketpicctra}{1}%
+\setcounter{ketpicctrb}{-#3}%
+\addtocounter{ketpicctrb}{-\value{ketpicctra}}%
+\addtocounter{ketpicctrb}{1}%
+\setcounter{ketpicctrc}{\value{ketpicctra}}%
+\divide\value{ketpicctrc} by 2%
+\multiply\value{ketpicctrc} by 2%
+%
+{%
+\ifnum %
+\theketpicctrc<\theketpicctra %
+\settowidth{\Width}{\tmpcontents}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{\tmpcontents}\settodepth{\Depth}{\tmpcontents}\setlength{\Height}{-\Height}%
+\put(#2,\theketpicctrb){\hspace*{\Width}\raisebox{\Height}{\tmpcontents}}%
+%
+\else%
+\settowidth{\Width}{\tmpcontentsb}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{\tmpcontentsb}\settodepth{\Depth}{\tmpcontentsb}\setlength{\Height}{-\Height}%
+\put(#2,\theketpicctrb){\hspace*{\Width}\raisebox{\Height}{\tmpcontentsb}}%
+%
+\fi%
+}%
+%
+\ifnum\theketpicctra<#4%
+\repeat%
+}%
+%
+}%
+\newcommand{\hjaggylineb}[4][8]{%
+\def\tmpcontents{%
+{\unitlength=1mm%
+\begin{picture}%
+( 1.00000, 1.00000)( 0.00000, 0.00000)%
+\linethickness{0.008in}%
+%
+%
+{%
+\ifnum %
+#1<10 %
+\linethickness{0.00#1 in}%
+%
+\else%
+\linethickness{0.0#1 in}%
+%
+\fi%
+}%
+\polyline(0.00000,0.00000)(1.00000,1.00000)%
+%
+\linethickness{0.008in}%
+\end{picture}}%%
+}%
+\def\tmpcontentsb{%
+{\unitlength=1mm%
+\begin{picture}%
+( 1.00000, 1.00000)( 0.00000, 0.00000)%
+\linethickness{0.008in}%
+%
+%
+{%
+\ifnum %
+#1<10 %
+\linethickness{0.00#1 in}%
+%
+\else%
+\linethickness{0.0#1 in}%
+%
+\fi%
+}%
+\polyline(0.00000,1.00000)(1.00000,0.00000)%
+%
+\linethickness{0.008in}%
+\end{picture}}%%
+}%
+\setcounter{ketpicctra}{0}%
+\setcounter{ketpicctra}{1}%
+\addtocounter{ketpicctra}{-1}%
+%
+{%
+\loop%
+\addtocounter{ketpicctra}{1}%
+\setcounter{ketpicctrb}{#2}%
+\addtocounter{ketpicctrb}{\value{ketpicctra}}%
+\addtocounter{ketpicctrb}{-1}%
+\setcounter{ketpicctrc}{\value{ketpicctra}}%
+\divide\value{ketpicctrc} by 2%
+\multiply\value{ketpicctrc} by 2%
+%
+{%
+\ifnum %
+\theketpicctrc<\theketpicctra %
+\settowidth{\Width}{\tmpcontentsb}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{\tmpcontentsb}\settodepth{\Depth}{\tmpcontentsb}\setlength{\Height}{-\Height}%
+\put(\theketpicctrb,-#3){\hspace*{\Width}\raisebox{\Height}{\tmpcontentsb}}%
+%
+\else%
+\settowidth{\Width}{\tmpcontents}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{\tmpcontents}\settodepth{\Depth}{\tmpcontents}\setlength{\Height}{-\Height}%
+\put(\theketpicctrb,-#3){\hspace*{\Width}\raisebox{\Height}{\tmpcontents}}%
+%
+\fi%
+}%
+%
+\ifnum\theketpicctra<#4%
+\repeat%
+}%
+%
+}%
+\newcommand{\vjaggylineb}[4][8]{%
+\def\tmpcontents{%
+{\unitlength=1mm%
+\begin{picture}%
+( 1.00000, 1.00000)( 0.00000, -1.00000)%
+\linethickness{0.008in}%
+%
+%
+{%
+\ifnum %
+#1<10 %
+\linethickness{0.00#1 in}%
+%
+\else%
+\linethickness{0.0#1 in}%
+%
+\fi%
+}%
+\polyline(0.00000,0.00000)(1.00000,-1.00000)%
+%
+\linethickness{0.008in}%
+\end{picture}}%%
+}%
+\def\tmpcontentsb{%
+{\unitlength=1mm%
+\begin{picture}%
+( 1.00000, 1.00000)( 0.00000, -1.00000)%
+\linethickness{0.008in}%
+%
+%
+{%
+\ifnum %
+#1<10 %
+\linethickness{0.00#1 in}%
+%
+\else%
+\linethickness{0.0#1 in}%
+%
+\fi%
+}%
+\polyline(1.00000,0.00000)(0.00000,-1.00000)%
+%
+\linethickness{0.008in}%
+\end{picture}}%%
+}%
+\setcounter{ketpicctra}{0}%
+\setcounter{ketpicctra}{1}%
+\addtocounter{ketpicctra}{-1}%
+%
+{%
+\loop%
+\addtocounter{ketpicctra}{1}%
+\setcounter{ketpicctrb}{-#3}%
+\addtocounter{ketpicctrb}{-\value{ketpicctra}}%
+\addtocounter{ketpicctrb}{1}%
+\setcounter{ketpicctrc}{\value{ketpicctra}}%
+\divide\value{ketpicctrc} by 2%
+\multiply\value{ketpicctrc} by 2%
+%
+{%
+\ifnum %
+\theketpicctrc<\theketpicctra %
+\settowidth{\Width}{\tmpcontentsb}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{\tmpcontentsb}\settodepth{\Depth}{\tmpcontentsb}\setlength{\Height}{-\Height}%
+\put(#2,\theketpicctrb){\hspace*{\Width}\raisebox{\Height}{\tmpcontentsb}}%
+%
+\else%
+\settowidth{\Width}{\tmpcontents}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{\tmpcontents}\settodepth{\Depth}{\tmpcontents}\setlength{\Height}{-\Height}%
+\put(#2,\theketpicctrb){\hspace*{\Width}\raisebox{\Height}{\tmpcontents}}%
+%
+\fi%
+}%
+%
+\ifnum\theketpicctra<#4%
+\repeat%
+}%
+%
+}%
+\newcommand{\jaggyboxframe}[6][8]{%
+\def\tmpcontents{%
+\setcounter{ketpicctrf}{#4}%
+\addtocounter{ketpicctrf}{-4}%
+\setlength{\Width}{\theketpicctrf\unitlength}%
+\begin{minipage}{\Width}%
+#6%
+\end{minipage}%
+%
+}%
+\setcounter{ketpicctrg}{#2}%
+\addtocounter{ketpicctrg}{2}%
+\setcounter{ketpicctrh}{-#3}%
+\addtocounter{ketpicctrh}{-2}%
+\settowidth{\Width}{\tmpcontents}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{\tmpcontents}\settodepth{\Depth}{\tmpcontents}\setlength{\Height}{-\Height}%
+\put(\theketpicctrg,\theketpicctrh){\hspace*{\Width}\raisebox{\Height}{\tmpcontents}}%
+\setcounter{ketpicctrg}{#2}%
+\setcounter{ketpicctrh}{#3}%
+\hjaggylineb[#1]{\theketpicctrg}{\theketpicctrh}{#4}%
+\vjaggylineb[#1]{\theketpicctrg}{\theketpicctrh}{#5}%
+\setcounter{ketpicctrg}{#2}%
+\setcounter{ketpicctrh}{#3}%
+\addtocounter{ketpicctrh}{#5}%
+\hjaggyline[#1]{\theketpicctrg}{\theketpicctrh}{#4}%
+\setcounter{ketpicctrg}{#2}%
+\addtocounter{ketpicctrg}{#4}%
+\setcounter{ketpicctrh}{#3}%
+\vjaggyline[#1]{\theketpicctrg}{\theketpicctrh}{#5}%
+%
+}%
+\newcommand{\jaggyboxframese}[6][8]{%
+\jaggyboxframe[#1]{#2}{#3}{#4}{#5}{#6}%
+%
+}%
+\newcommand{\jaggyboxframec}[6][8]{%
+\setcounter{ketpicctrd}{-#4}%
+\divide\value{ketpicctrd} by 2%
+\addtocounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{-#5}%
+\divide\value{ketpicctre} by 2%
+\addtocounter{ketpicctre}{#3}%
+\jaggyboxframe[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}{#6}%
+%
+}%
+\newcommand{\jaggyboxframee}[6][8]{%
+\setcounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{-#5}%
+\divide\value{ketpicctre} by 2%
+\addtocounter{ketpicctre}{#3}%
+\jaggyboxframe[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}{#6}%
+%
+}%
+\newcommand{\jaggyboxframew}[6][8]{%
+\setcounter{ketpicctrd}{-#4}%
+\addtocounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{-#5}%
+\divide\value{ketpicctre} by 2%
+\addtocounter{ketpicctre}{#3}%
+\jaggyboxframe[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}{#6}%
+%
+}%
+\newcommand{\jaggyboxframen}[6][8]{%
+\setcounter{ketpicctrd}{-#4}%
+\divide\value{ketpicctrd} by 2%
+\addtocounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{#3}%
+\addtocounter{ketpicctre}{-#5}%
+\jaggyboxframe[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}{#6}%
+%
+}%
+\newcommand{\jaggyboxframes}[6][8]{%
+\setcounter{ketpicctrd}{-#4}%
+\divide\value{ketpicctrd} by 2%
+\addtocounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{#3}%
+\jaggyboxframe[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}{#6}%
+%
+}%
+\newcommand{\jaggyboxframenw}[6][8]{%
+\setcounter{ketpicctrd}{-#4}%
+\addtocounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{#3}%
+\addtocounter{ketpicctre}{-#5}%
+\jaggyboxframe[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}{#6}%
+%
+}%
+\newcommand{\jaggyboxframene}[6][8]{%
+\setcounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{#3}%
+\addtocounter{ketpicctre}{-#5}%
+\jaggyboxframe[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}{#6}%
+%
+}%
+\newcommand{\jaggyboxframesw}[6][8]{%
+\setcounter{ketpicctrd}{-#4}%
+\addtocounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{#3}%
+\jaggyboxframe[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}{#6}%
+%
+}%
+\newcommand{\hdialine}[4][8]{%
+\def\tmpcontents{%
+{\unitlength=1mm%
+\begin{picture}%
+( 1.00000, 1.00000)( 0.00000, -0.50000)%
+\linethickness{0.008in}%
+%
+%
+{%
+\ifnum %
+#1<10 %
+\linethickness{0.00#1 in}%
+%
+\else%
+\linethickness{0.0#1 in}%
+%
+\fi%
+}%
+\polyline(1.00000,0.50000)(0.00000,0.00000)(1.00000,-0.50000)%
+%
+\linethickness{0.008in}%
+\end{picture}}%%
+}%
+\def\tmpcontentsb{%
+{\unitlength=1mm%
+\begin{picture}%
+( 1.00000, 1.00000)( 0.00000, -0.50000)%
+\linethickness{0.008in}%
+%
+%
+{%
+\ifnum %
+#1<10 %
+\linethickness{0.00#1 in}%
+%
+\else%
+\linethickness{0.0#1 in}%
+%
+\fi%
+}%
+\polyline(0.00000,0.50000)(1.00000,0.00000)(0.00000,-0.50000)%
+%
+\linethickness{0.008in}%
+\end{picture}}%%
+}%
+\setcounter{ketpicctra}{0}%
+\setcounter{ketpicctra}{1}%
+\addtocounter{ketpicctra}{-1}%
+%
+{%
+\loop%
+\addtocounter{ketpicctra}{1}%
+\setcounter{ketpicctrb}{#2}%
+\addtocounter{ketpicctrb}{\value{ketpicctra}}%
+\addtocounter{ketpicctrb}{-1}%
+\setcounter{ketpicctrc}{\value{ketpicctra}}%
+\divide\value{ketpicctrc} by 2%
+\multiply\value{ketpicctrc} by 2%
+%
+{%
+\ifnum %
+\theketpicctrc<\theketpicctra %
+\settowidth{\Width}{\tmpcontents}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{\tmpcontents}\settodepth{\Depth}{\tmpcontents}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(\theketpicctrb,-#3){\hspace*{\Width}\raisebox{\Height}{\tmpcontents}}%
+%
+\else%
+\settowidth{\Width}{\tmpcontentsb}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{\tmpcontentsb}\settodepth{\Depth}{\tmpcontentsb}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(\theketpicctrb,-#3){\hspace*{\Width}\raisebox{\Height}{\tmpcontentsb}}%
+%
+\fi%
+}%
+%
+\ifnum\theketpicctra<#4%
+\repeat%
+}%
+%
+}%
+\newcommand{\vdialine}[4][8]{%
+\def\tmpcontents{%
+{\unitlength=1mm%
+\begin{picture}%
+( 1.00000, 1.00000)( -0.50000, 0.00000)%
+\linethickness{0.008in}%
+%
+%
+{%
+\ifnum %
+#1<10 %
+\linethickness{0.00#1 in}%
+%
+\else%
+\linethickness{0.0#1 in}%
+%
+\fi%
+}%
+\polyline(-0.50000,0.00000)(0.00000,1.00000)(0.50000,0.00000)%
+%
+\linethickness{0.008in}%
+\end{picture}}%%
+}%
+\def\tmpcontentsb{%
+{\unitlength=1mm%
+\begin{picture}%
+( 1.00000, 1.00000)( -0.50000, 0.00000)%
+\linethickness{0.008in}%
+%
+%
+{%
+\ifnum %
+#1<10 %
+\linethickness{0.00#1 in}%
+%
+\else%
+\linethickness{0.0#1 in}%
+%
+\fi%
+}%
+\polyline(-0.50000,1.00000)(0.00000,0.00000)(0.50000,1.00000)%
+%
+\linethickness{0.008in}%
+\end{picture}}%%
+}%
+\setcounter{ketpicctra}{0}%
+\setcounter{ketpicctra}{1}%
+\addtocounter{ketpicctra}{-1}%
+%
+{%
+\loop%
+\addtocounter{ketpicctra}{1}%
+\setcounter{ketpicctrb}{-#3}%
+\addtocounter{ketpicctrb}{-\value{ketpicctra}}%
+\addtocounter{ketpicctrb}{1}%
+\setcounter{ketpicctrc}{\value{ketpicctra}}%
+\divide\value{ketpicctrc} by 2%
+\multiply\value{ketpicctrc} by 2%
+%
+{%
+\ifnum %
+\theketpicctrc<\theketpicctra %
+\settowidth{\Width}{\tmpcontents}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{\tmpcontents}\settodepth{\Depth}{\tmpcontents}\setlength{\Height}{-\Height}%
+\put(#2,\theketpicctrb){\hspace*{\Width}\raisebox{\Height}{\tmpcontents}}%
+%
+\else%
+\settowidth{\Width}{\tmpcontentsb}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{\tmpcontentsb}\settodepth{\Depth}{\tmpcontentsb}\setlength{\Height}{-\Height}%
+\put(#2,\theketpicctrb){\hspace*{\Width}\raisebox{\Height}{\tmpcontentsb}}%
+%
+\fi%
+}%
+%
+\ifnum\theketpicctra<#4%
+\repeat%
+}%
+%
+}%
+\newcommand{\diaboxframe}[6][4]{%
+\def\tmpcontents{%
+\setcounter{ketpicctrf}{#4}%
+\addtocounter{ketpicctrf}{-4}%
+\setlength{\Width}{\theketpicctrf\unitlength}%
+\begin{minipage}{\Width}%
+#6%
+\end{minipage}%
+%
+}%
+\setcounter{ketpicctrg}{#2}%
+\addtocounter{ketpicctrg}{2}%
+\setcounter{ketpicctrh}{-#3}%
+\addtocounter{ketpicctrh}{-2}%
+\settowidth{\Width}{\tmpcontents}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{\tmpcontents}\settodepth{\Depth}{\tmpcontents}\setlength{\Height}{-\Height}%
+\put(\theketpicctrg,\theketpicctrh){\hspace*{\Width}\raisebox{\Height}{\tmpcontents}}%
+\setcounter{ketpicctrh}{#3}%
+\hdialine[#1]{#2}{\theketpicctrh}{#4}%
+\setcounter{ketpicctrh}{#3}%
+\addtocounter{ketpicctrh}{#5}%
+\hdialine[#1]{#2}{\theketpicctrh}{#4}%
+\setcounter{ketpicctrg}{#2}%
+\vdialine[#1]{\theketpicctrg}{#3}{#5}%
+\setcounter{ketpicctrg}{#2}%
+\addtocounter{ketpicctrg}{#4}%
+\vdialine[#1]{\theketpicctrg}{#3}{#5}%
+%
+}%
+\newcommand{\diaboxframese}[6][8]{%
+\diaboxframe[#1]{#2}{#3}{#4}{#5}{#6}%
+%
+}%
+\newcommand{\diaboxframec}[6][8]{%
+\setcounter{ketpicctrd}{-#4}%
+\divide\value{ketpicctrd} by 2%
+\addtocounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{-#5}%
+\divide\value{ketpicctre} by 2%
+\addtocounter{ketpicctre}{#3}%
+\diaboxframe[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}{#6}%
+%
+}%
+\newcommand{\diaboxframee}[6][8]{%
+\setcounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{-#5}%
+\divide\value{ketpicctre} by 2%
+\addtocounter{ketpicctre}{#3}%
+\diaboxframe[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}{#6}%
+%
+}%
+\newcommand{\diaboxframew}[6][8]{%
+\setcounter{ketpicctrd}{-#4}%
+\addtocounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{-#5}%
+\divide\value{ketpicctre} by 2%
+\addtocounter{ketpicctre}{#3}%
+\diaboxframe[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}{#6}%
+%
+}%
+\newcommand{\diaboxframen}[6][8]{%
+\setcounter{ketpicctrd}{-#4}%
+\divide\value{ketpicctrd} by 2%
+\addtocounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{-#5}%
+\addtocounter{ketpicctre}{#3}%
+\diaboxframe[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}{#6}%
+%
+}%
+\newcommand{\diaboxframes}[6][0.008]{%
+\setcounter{ketpicctrd}{-#4}%
+\divide\value{ketpicctrd} by 2%
+\addtocounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{#3}%
+\diaboxframe[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}{#6}%
+%
+}%
+\newcommand{\diaboxframenw}[6][8]{%
+\setcounter{ketpicctrd}{-#4}%
+\addtocounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{-#5}%
+\addtocounter{ketpicctre}{#3}%
+\diaboxframe[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}{#6}%
+%
+}%
+\newcommand{\diaboxframene}[6][8]{%
+\setcounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{-#5}%
+\addtocounter{ketpicctre}{#3}%
+\diaboxframe[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}{#6}%
+%
+}%
+\newcommand{\diaboxframesw}[6][8]{%
+\setcounter{ketpicctrd}{-#4}%
+\addtocounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{#3}%
+\diaboxframe[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}{#6}%
+%
+}%
+\newcommand{\hdashline}[4][8]{%
+\def\tmpcontents{%
+{\unitlength=1mm%
+\begin{picture}%
+( 1.00000, 0.02000)( 0.00000, -0.01000)%
+\linethickness{0.008in}%
+%
+%
+{%
+\ifnum %
+#1<10 %
+\linethickness{0.00#1 in}%
+%
+\else%
+\linethickness{0.0#1 in}%
+%
+\fi%
+}%
+\polyline(0.00000,0.00000)(0.50000,0.00000)%
+%
+\linethickness{0.008in}%
+\end{picture}}%%
+}%
+\setcounter{ketpicctra}{0}%
+\setcounter{ketpicctra}{1}%
+\addtocounter{ketpicctra}{-1}%
+%
+{%
+\loop%
+\addtocounter{ketpicctra}{1}%
+\setcounter{ketpicctrb}{#2}%
+\addtocounter{ketpicctrb}{\value{ketpicctra}}%
+\addtocounter{ketpicctrb}{-1}%
+\settowidth{\Width}{\tmpcontents}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{\tmpcontents}\settodepth{\Depth}{\tmpcontents}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(\theketpicctrb,-#3){\hspace*{\Width}\raisebox{\Height}{\tmpcontents}}%
+%
+\ifnum\theketpicctra<#4%
+\repeat%
+}%
+%
+}%
+\newcommand{\hdashlineb}[4][8]{%
+\def\tmpcontents{%
+{\unitlength=1mm%
+\begin{picture}%
+( 1.00000, 0.02000)( 0.00000, -0.01000)%
+\linethickness{0.008in}%
+%
+%
+{%
+\ifnum %
+#1<10 %
+\linethickness{0.00#1 in}%
+%
+\else%
+\linethickness{0.0#1 in}%
+%
+\fi%
+}%
+\polyline(0.50000,0.00000)(1.00000,0.00000)%
+%
+\linethickness{0.008in}%
+\end{picture}}%%
+}%
+\setcounter{ketpicctra}{0}%
+\setcounter{ketpicctra}{1}%
+\addtocounter{ketpicctra}{-1}%
+%
+{%
+\loop%
+\addtocounter{ketpicctra}{1}%
+\setcounter{ketpicctrb}{#2}%
+\addtocounter{ketpicctrb}{\value{ketpicctra}}%
+\addtocounter{ketpicctrb}{-1}%
+\settowidth{\Width}{\tmpcontents}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{\tmpcontents}\settodepth{\Depth}{\tmpcontents}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(\theketpicctrb,-#3){\hspace*{\Width}\raisebox{\Height}{\tmpcontents}}%
+%
+\ifnum\theketpicctra<#4%
+\repeat%
+}%
+%
+}%
+\newcommand{\vdashline}[4][8]{%
+\def\tmpcontents{%
+{\unitlength=1mm%
+\begin{picture}%
+( 0.02000, 1.00000)( -0.01000, 0.00000)%
+\linethickness{0.008in}%
+%
+%
+{%
+\ifnum %
+#1<10 %
+\linethickness{0.00#1 in}%
+%
+\else%
+\linethickness{0.0#1 in}%
+%
+\fi%
+}%
+\polyline(0.00000,0.00000)(0.00000,0.50000)%
+%
+\linethickness{0.008in}%
+\end{picture}}%%
+}%
+\setcounter{ketpicctra}{0}%
+\setcounter{ketpicctra}{1}%
+\addtocounter{ketpicctra}{-1}%
+%
+{%
+\loop%
+\addtocounter{ketpicctra}{1}%
+\setcounter{ketpicctrb}{-#3}%
+\addtocounter{ketpicctrb}{-\value{ketpicctra}}%
+\addtocounter{ketpicctrb}{1}%
+\settowidth{\Width}{\tmpcontents}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{\tmpcontents}\settodepth{\Depth}{\tmpcontents}\setlength{\Height}{-\Height}%
+\put(#2,\theketpicctrb){\hspace*{\Width}\raisebox{\Height}{\tmpcontents}}%
+%
+\ifnum\theketpicctra<#4%
+\repeat%
+}%
+%
+}%
+\newcommand{\vdashlineb}[4][8]{%
+\def\tmpcontents{%
+{\unitlength=1mm%
+\begin{picture}%
+( 0.02000, 1.00000)( -0.01000, 0.00000)%
+\linethickness{0.008in}%
+%
+%
+{%
+\ifnum %
+#1<10 %
+\linethickness{0.00#1 in}%
+%
+\else%
+\linethickness{0.0#1 in}%
+%
+\fi%
+}%
+\polyline(0.00000,0.50000)(0.00000,1.00000)%
+%
+\linethickness{0.008in}%
+\end{picture}}%%
+}%
+\setcounter{ketpicctra}{0}%
+\setcounter{ketpicctra}{1}%
+\addtocounter{ketpicctra}{-1}%
+%
+{%
+\loop%
+\addtocounter{ketpicctra}{1}%
+\setcounter{ketpicctrb}{-#3}%
+\addtocounter{ketpicctrb}{-\value{ketpicctra}}%
+\addtocounter{ketpicctrb}{1}%
+\settowidth{\Width}{\tmpcontents}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{\tmpcontents}\settodepth{\Depth}{\tmpcontents}\setlength{\Height}{-\Height}%
+\put(#2,\theketpicctrb){\hspace*{\Width}\raisebox{\Height}{\tmpcontents}}%
+%
+\ifnum\theketpicctra<#4%
+\repeat%
+}%
+%
+}%
+\newcommand{\dashboxframe}[6][4]{%
+\def\tmpcontents{%
+\setcounter{ketpicctrf}{#4}%
+\addtocounter{ketpicctrf}{-4}%
+\setlength{\Width}{\theketpicctrf\unitlength}%
+\begin{minipage}{\Width}%
+#6%
+\end{minipage}%
+%
+}%
+\setcounter{ketpicctrg}{#2}%
+\addtocounter{ketpicctrg}{2}%
+\setcounter{ketpicctrh}{-#3}%
+\addtocounter{ketpicctrh}{-2}%
+\settowidth{\Width}{\tmpcontents}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{\tmpcontents}\settodepth{\Depth}{\tmpcontents}\setlength{\Height}{-\Height}%
+\put(\theketpicctrg,\theketpicctrh){\hspace*{\Width}\raisebox{\Height}{\tmpcontents}}%
+\setcounter{ketpicctrh}{#3}%
+\hdashline[#1]{#2}{\theketpicctrh}{#4}%
+\setcounter{ketpicctrh}{#3}%
+\addtocounter{ketpicctrh}{#5}%
+\hdashlineb[#1]{#2}{\theketpicctrh}{#4}%
+\setcounter{ketpicctrg}{#2}%
+\vdashline[#1]{\theketpicctrg}{#3}{#5}%
+\setcounter{ketpicctrg}{#2}%
+\addtocounter{ketpicctrg}{#4}%
+\vdashlineb[#1]{\theketpicctrg}{#3}{#5}%
+%
+}%
+\newcommand{\dashboxframese}[6][8]{%
+\dashboxframe[#1]{#2}{#3}{#4}{#5}{#6}%
+%
+}%
+\newcommand{\dashboxframec}[6][8]{%
+\setcounter{ketpicctrd}{-#4}%
+\divide\value{ketpicctrd} by 2%
+\addtocounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{-#5}%
+\divide\value{ketpicctre} by 2%
+\addtocounter{ketpicctre}{#3}%
+\dashboxframe[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}{#6}%
+%
+}%
+\newcommand{\dashboxframee}[6][8]{%
+\setcounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{-#5}%
+\divide\value{ketpicctre} by 2%
+\addtocounter{ketpicctre}{#3}%
+\dashboxframe[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}{#6}%
+%
+}%
+\newcommand{\dashboxframew}[6][8]{%
+\setcounter{ketpicctrd}{-#4}%
+\addtocounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{-#5}%
+\divide\value{ketpicctre} by 2%
+\addtocounter{ketpicctre}{#3}%
+\dashboxframe[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}{#6}%
+%
+}%
+\newcommand{\dashboxframen}[6][8]{%
+\setcounter{ketpicctrd}{-#4}%
+\divide\value{ketpicctrd} by 2%
+\addtocounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{#3}%
+\addtocounter{ketpicctre}{-#5}%
+\dashboxframe[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}{#6}%
+%
+}%
+\newcommand{\dashboxframes}[6][8]{%
+\setcounter{ketpicctrd}{-#4}%
+\divide\value{ketpicctrd} by 2%
+\addtocounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{#3}%
+\dashboxframe[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}{#6}%
+%
+}%
+\newcommand{\dashboxframenw}[6][8]{%
+\setcounter{ketpicctrd}{-#4}%
+\addtocounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{#3}%
+\addtocounter{ketpicctre}{-#5}%
+\dashboxframe[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}{#6}%
+%
+}%
+\newcommand{\dashboxframene}[6][8]{%
+\setcounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{#3}%
+\addtocounter{ketpicctre}{-#5}%
+\dashboxframe[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}{#6}%
+%
+}%
+\newcommand{\dashboxframesw}[6][8]{%
+\setcounter{ketpicctrd}{-#4}%
+\addtocounter{ketpicctrd}{#2}%
+\setcounter{ketpicctre}{#3}%
+\dashboxframe[#1]{\theketpicctrd}{\theketpicctre}{#4}{#5}{#6}%
+%
+}%
+\newcommand{\boxlinep}[6][8]{%
+\def\tmpcontents{%
+{\unitlength=1mm%
+\begin{picture}%
+( 1.00000, 0.02000)( 0.00000, -0.01000)%
+\linethickness{0.008in}%
+%
+%
+{%
+\ifnum %
+#1<10 %
+\linethickness{0.00#1 in}%
+%
+\else%
+\linethickness{0.0#1 in}%
+%
+\fi%
+}%
+\polyline(0.00000,0.00000)(1.00000,0.00000)%
+%
+\linethickness{0.008in}%
+\end{picture}}%%
+}%
+\def\tmpcontentsb{%
+{\unitlength=0.1mm%
+\begin{picture}%
+( 1.00000, 0.02000)( 0.00000, -0.01000)%
+\linethickness{0.008in}%
+%
+%
+{%
+\ifnum %
+#1<10 %
+\linethickness{0.00#1 in}%
+%
+\else%
+\linethickness{0.0#1 in}%
+%
+\fi%
+}%
+\polyline(0.00000,0.00000)(1.00000,0.00000)%
+%
+\linethickness{0.008in}%
+\end{picture}}%%
+}%
+{\unitlength=0.1mm%
+\setcounter{ketpicctrc}{-#3}%
+\addtocounter{ketpicctrc}{-#5}%
+\setcounter{ketpicctra}{0}%
+\setcounter{ketpicctra}{1}%
+\addtocounter{ketpicctra}{-1}%
+%
+{%
+\loop%
+\addtocounter{ketpicctra}{1}%
+\setcounter{ketpicctrb}{\value{ketpicctra}}%
+\addtocounter{ketpicctrb}{9}%
+%
+{%
+\ifnum %
+\theketpicctrb>#4 %
+\setcounter{ketpicctrb}{#2}%
+\addtocounter{ketpicctrb}{\value{ketpicctra}}%
+\settowidth{\Width}{{\color{#6}\tmpcontentsb}}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{{\color{#6}\tmpcontentsb}}\settodepth{\Depth}{{\color{#6}\tmpcontentsb}}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(\theketpicctrb,-#3){\hspace*{\Width}\raisebox{\Height}{{\color{#6}\tmpcontentsb}}}%
+\settowidth{\Width}{{\color{#6}\tmpcontentsb}}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{{\color{#6}\tmpcontentsb}}\settodepth{\Depth}{{\color{#6}\tmpcontentsb}}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(\theketpicctrb,\theketpicctrc){\hspace*{\Width}\raisebox{\Height}{{\color{#6}\tmpcontentsb}}}%
+%
+\else%
+\addtocounter{ketpicctra}{9}%
+\setcounter{ketpicctrb}{#2}%
+\addtocounter{ketpicctrb}{\value{ketpicctra}}%
+\settowidth{\Width}{{\color{#6}\tmpcontents}}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{{\color{#6}\tmpcontents}}\settodepth{\Depth}{{\color{#6}\tmpcontents}}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(\theketpicctrb,-#3){\hspace*{\Width}\raisebox{\Height}{{\color{#6}\tmpcontents}}}%
+\settowidth{\Width}{{\color{#6}\tmpcontents}}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{{\color{#6}\tmpcontents}}\settodepth{\Depth}{{\color{#6}\tmpcontents}}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(\theketpicctrb,\theketpicctrc){\hspace*{\Width}\raisebox{\Height}{{\color{#6}\tmpcontents}}}%
+%
+\fi%
+}%
+%
+\ifnum\theketpicctra<#4%
+\repeat%
+}%
+}%
+\def\tmpcontents{%
+{\unitlength=1mm%
+\begin{picture}%
+( 0.02000, 1.00000)( -0.01000, 0.00000)%
+\linethickness{0.008in}%
+%
+%
+{%
+\ifnum %
+#1<10 %
+\linethickness{0.00#1 in}%
+%
+\else%
+\linethickness{0.0#1 in}%
+%
+\fi%
+}%
+\polyline(0.00000,0.00000)(0.00000,1.00000)%
+%
+\linethickness{0.008in}%
+\end{picture}}%%
+}%
+\def\tmpcontentsb{%
+{\unitlength=0.1mm%
+\begin{picture}%
+( 0.02000, 1.00000)( -0.01000, 0.00000)%
+\linethickness{0.008in}%
+%
+%
+{%
+\ifnum %
+#1<10 %
+\linethickness{0.00#1 in}%
+%
+\else%
+\linethickness{0.0#1 in}%
+%
+\fi%
+}%
+\polyline(0.00000,0.00000)(0.00000,1.00000)%
+%
+\linethickness{0.008in}%
+\end{picture}}%%
+}%
+{\unitlength=0.1mm%
+\setcounter{ketpicctrc}{#2}%
+\addtocounter{ketpicctrc}{#4}%
+\setcounter{ketpicctra}{0}%
+\setcounter{ketpicctra}{1}%
+\addtocounter{ketpicctra}{-1}%
+%
+{%
+\loop%
+\addtocounter{ketpicctra}{1}%
+\setcounter{ketpicctrb}{\value{ketpicctra}}%
+\addtocounter{ketpicctrb}{9}%
+%
+{%
+\ifnum %
+\theketpicctrb>#5 %
+\setcounter{ketpicctrb}{-#3}%
+\addtocounter{ketpicctrb}{-\value{ketpicctra}}%
+\settowidth{\Width}{{\color{#6}\tmpcontentsb}}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{{\color{#6}\tmpcontentsb}}\settodepth{\Depth}{{\color{#6}\tmpcontentsb}}\setlength{\Height}{\Depth}%
+\put(#2,\theketpicctrb){\hspace*{\Width}\raisebox{\Height}{{\color{#6}\tmpcontentsb}}}%
+\settowidth{\Width}{{\color{#6}\tmpcontentsb}}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{{\color{#6}\tmpcontentsb}}\settodepth{\Depth}{{\color{#6}\tmpcontentsb}}\setlength{\Height}{\Depth}%
+\put(\theketpicctrc,\theketpicctrb){\hspace*{\Width}\raisebox{\Height}{{\color{#6}\tmpcontentsb}}}%
+%
+\else%
+\addtocounter{ketpicctra}{9}%
+\setcounter{ketpicctrb}{-#3}%
+\addtocounter{ketpicctrb}{-\value{ketpicctra}}%
+\settowidth{\Width}{{\color{#6}\tmpcontents}}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{{\color{#6}\tmpcontents}}\settodepth{\Depth}{{\color{#6}\tmpcontents}}\setlength{\Height}{\Depth}%
+\put(#2,\theketpicctrb){\hspace*{\Width}\raisebox{\Height}{{\color{#6}\tmpcontents}}}%
+\settowidth{\Width}{{\color{#6}\tmpcontents}}\setlength{\Width}{-0.5\Width}%
+\settoheight{\Height}{{\color{#6}\tmpcontents}}\settodepth{\Depth}{{\color{#6}\tmpcontents}}\setlength{\Height}{\Depth}%
+\put(\theketpicctrc,\theketpicctrb){\hspace*{\Width}\raisebox{\Height}{{\color{#6}\tmpcontents}}}%
+%
+\fi%
+}%
+%
+\ifnum\theketpicctra<#5%
+\repeat%
+}%
+}%
+%
+}%
+\newcommand{\shadeframep}[6][white]{%
+\def\tmpcontents{%
+{\unitlength=1mm%
+\begin{picture}%
+( 100.00000, 100.00000)( 0.00000, 0.00000)%
+\linethickness{0.008in}%
+%
+{\color{#1}
+\polygon*(0.00010,0.00010)(99.99990,0.00010)(99.99990,99.99990)(0.00010,99.99990)%
+(0.00010,0.00010)
+}%
+\end{picture}}%%
+}%
+{\unitlength=0.1mm%
+%
+{%
+\ifnum %
+#4<100 %
+%
+{%
+\ifnum %
+#5<100 %
+\settowidth{\Width}{{\color{#6}\scalebox{0.0#4}[0.0#5]{\tmpcontents}}}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{{\color{#6}\scalebox{0.0#4}[0.0#5]{\tmpcontents}}}\settodepth{\Depth}{{\color{#6}\scalebox{0.0#4}[0.0#5]{\tmpcontents}}}\setlength{\Height}{-\Height}%
+\put(#2,-#3){\hspace*{\Width}\raisebox{\Height}{{\color{#6}\scalebox{0.0#4}[0.0#5]{\tmpcontents}}}}%
+%
+\else%
+\settowidth{\Width}{{\color{#6}\scalebox{0.0#4}[0.#5]{\tmpcontents}}}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{{\color{#6}\scalebox{0.0#4}[0.#5]{\tmpcontents}}}\settodepth{\Depth}{{\color{#6}\scalebox{0.0#4}[0.#5]{\tmpcontents}}}\setlength{\Height}{-\Height}%
+\put(#2,-#3){\hspace*{\Width}\raisebox{\Height}{{\color{#6}\scalebox{0.0#4}[0.#5]{\tmpcontents}}}}%
+%
+\fi%
+}%
+%
+\else%
+%
+{%
+\ifnum %
+#4<1000 %
+%
+{%
+\ifnum %
+#5<100 %
+\settowidth{\Width}{{\color{#6}\scalebox{0.#4}[0.0#5]{\tmpcontents}}}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{{\color{#6}\scalebox{0.#4}[0.0#5]{\tmpcontents}}}\settodepth{\Depth}{{\color{#6}\scalebox{0.#4}[0.0#5]{\tmpcontents}}}\setlength{\Height}{-\Height}%
+\put(#2,-#3){\hspace*{\Width}\raisebox{\Height}{{\color{#6}\scalebox{0.#4}[0.0#5]{\tmpcontents}}}}%
+%
+\else%
+\settowidth{\Width}{{\color{#6}\scalebox{0.#4}[0.#5]{\tmpcontents}}}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{{\color{#6}\scalebox{0.#4}[0.#5]{\tmpcontents}}}\settodepth{\Depth}{{\color{#6}\scalebox{0.#4}[0.#5]{\tmpcontents}}}\setlength{\Height}{-\Height}%
+\put(#2,-#3){\hspace*{\Width}\raisebox{\Height}{{\color{#6}\scalebox{0.#4}[0.#5]{\tmpcontents}}}}%
+%
+\fi%
+}%
+%
+\else%
+%
+{%
+\ifnum %
+#5<100 %
+\settowidth{\Width}{{\color{#6}\scalebox{1}[0.0#5]{\tmpcontents}}}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{{\color{#6}\scalebox{1}[0.0#5]{\tmpcontents}}}\settodepth{\Depth}{{\color{#6}\scalebox{1}[0.0#5]{\tmpcontents}}}\setlength{\Height}{-\Height}%
+\put(#2,-#3){\hspace*{\Width}\raisebox{\Height}{{\color{#6}\scalebox{1}[0.0#5]{\tmpcontents}}}}%
+\setcounter{ketpicctra}{#2}%
+\addtocounter{ketpicctra}{#4}%
+\settowidth{\Width}{{\color{#6}\scalebox{1}[0.0#5]{\tmpcontents}}}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{{\color{#6}\scalebox{1}[0.0#5]{\tmpcontents}}}\settodepth{\Depth}{{\color{#6}\scalebox{1}[0.0#5]{\tmpcontents}}}\setlength{\Height}{-\Height}%
+\put(\theketpicctra,-#3){\hspace*{\Width}\raisebox{\Height}{{\color{#6}\scalebox{1}[0.0#5]{\tmpcontents}}}}%
+%
+\else%
+\settowidth{\Width}{{\color{#6}\scalebox{1}[0.#5]{\tmpcontents}}}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{{\color{#6}\scalebox{1}[0.#5]{\tmpcontents}}}\settodepth{\Depth}{{\color{#6}\scalebox{1}[0.#5]{\tmpcontents}}}\setlength{\Height}{-\Height}%
+\put(#2,-#3){\hspace*{\Width}\raisebox{\Height}{{\color{#6}\scalebox{1}[0.#5]{\tmpcontents}}}}%
+\setcounter{ketpicctra}{#2}%
+\addtocounter{ketpicctra}{#4}%
+\settowidth{\Width}{{\color{#6}\scalebox{1}[0.#5]{\tmpcontents}}}\setlength{\Width}{-1\Width}%
+\settoheight{\Height}{{\color{#6}\scalebox{1}[0.#5]{\tmpcontents}}}\settodepth{\Depth}{{\color{#6}\scalebox{1}[0.#5]{\tmpcontents}}}\setlength{\Height}{-\Height}%
+\put(\theketpicctra,-#3){\hspace*{\Width}\raisebox{\Height}{{\color{#6}\scalebox{1}[0.#5]{\tmpcontents}}}}%
+%
+\fi%
+}%
+%
+\fi%
+}%
+%
+\fi%
+}%
+}%
+%
+}%
+\newcommand{\popframe}[9][8]{%
+{\unitlength=0.1mm%
+\ketcalcwidth{#9}%
+\setcounter{ketpicctrh}{\value{ketpicctra}}%
+\ketcalcheight{#9}%
+\setcounter{ketpicctri}{\value{ketpicctra}}%
+\ketcalcdepth{#9}%
+\addtocounter{ketpicctri}{\value{ketpicctra}}%
+\addtocounter{ketpicctrh}{30}%
+\addtocounter{ketpicctri}{30}%
+\setcounter{ketpicctrf}{#2}%
+\multiply\value{ketpicctrf} by 10%
+\addtocounter{ketpicctrf}{15}%
+\setcounter{ketpicctrg}{#3}%
+\multiply\value{ketpicctrg} by 10%
+\addtocounter{ketpicctrg}{15}%
+\shadeframep[#5]{\theketpicctrf}{\theketpicctrg}{\theketpicctrh}{\theketpicctri}{#5}%
+\setcounter{ketpicctrf}{#2}%
+\multiply\value{ketpicctrf} by 10%
+\setcounter{ketpicctrg}{#3}%
+\multiply\value{ketpicctrg} by 10%
+\shadeframep[#7]{\theketpicctrf}{\theketpicctrg}{\theketpicctrh}{\theketpicctri}{#7}%
+\boxlinep[#1]{\theketpicctrf}{\theketpicctrg}{\theketpicctrh}{\theketpicctri}{#8}%
+\addtocounter{ketpicctrf}{15}%
+\setcounter{ketpicctra}{\value{ketpicctri}}%
+\divide\value{ketpicctra} by 2%
+\addtocounter{ketpicctrg}{\value{ketpicctra}}%
+\multiply\value{ketpicctrg} by -1%
+\settowidth{\Width}{{#9}}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{{#9}}\settodepth{\Depth}{{#9}}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(\theketpicctrf,\theketpicctrg){\hspace*{\Width}\raisebox{\Height}{{#9}}}%
+}%
+%
+}%
+\newcommand{\colorframe}[7][8]{%
+{\unitlength=0.1mm%
+\ketcalcwidth{#7}%
+\setcounter{ketpicctrh}{\value{ketpicctra}}%
+\ketcalcheight{#7}%
+\setcounter{ketpicctri}{\value{ketpicctra}}%
+\ketcalcdepth{#7}%
+\addtocounter{ketpicctri}{\value{ketpicctra}}%
+\addtocounter{ketpicctrh}{30}%
+\addtocounter{ketpicctri}{30}%
+\setcounter{ketpicctrf}{#2}%
+\multiply\value{ketpicctrf} by 10%
+\setcounter{ketpicctrg}{#3}%
+\multiply\value{ketpicctrg} by 10%
+\shadeframep[#4]{\theketpicctrf}{\theketpicctrg}{\theketpicctrh}{\theketpicctri}{#5}%
+\boxlinep[#1]{\theketpicctrf}{\theketpicctrg}{\theketpicctrh}{\theketpicctri}{#6}%
+\addtocounter{ketpicctrf}{15}%
+\setcounter{ketpicctra}{\value{ketpicctri}}%
+\divide\value{ketpicctra} by 2%
+\addtocounter{ketpicctrg}{\value{ketpicctra}}%
+\multiply\value{ketpicctrg} by -1%
+\settowidth{\Width}{{#7}}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{{#7}}\settodepth{\Depth}{{#7}}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(\theketpicctrf,\theketpicctrg){\hspace*{\Width}\raisebox{\Height}{{#7}}}%
+}%
+%
+}%
+\newcommand{\colorframes}[7][8]{%
+{\unitlength=0.1mm%
+\ketcalcwidth{#7}%
+\setcounter{ketpicctrh}{\value{ketpicctra}}%
+\ketcalcheight{#7}%
+\setcounter{ketpicctri}{\value{ketpicctra}}%
+\ketcalcdepth{#7}%
+\addtocounter{ketpicctri}{\value{ketpicctra}}%
+\addtocounter{ketpicctrh}{30}%
+\addtocounter{ketpicctri}{30}%
+\setcounter{ketpicctrf}{#2}%
+\multiply\value{ketpicctrf} by 10%
+\setcounter{ketpicctra}{\value{ketpicctrh}}%
+\divide\value{ketpicctra} by 2%
+\addtocounter{ketpicctrf}{-\value{ketpicctra}}%
+\setcounter{ketpicctrg}{#3}%
+\multiply\value{ketpicctrg} by 10%
+\shadeframep[#5]{\theketpicctrf}{\theketpicctrg}{\theketpicctrh}{\theketpicctri}{#5}%
+\boxlinep[#1]{\theketpicctrf}{\theketpicctrg}{\theketpicctrh}{\theketpicctri}{#6}%
+\addtocounter{ketpicctrf}{15}%
+\setcounter{ketpicctra}{\value{ketpicctri}}%
+\divide\value{ketpicctra} by 2%
+\addtocounter{ketpicctrg}{\value{ketpicctra}}%
+\multiply\value{ketpicctrg} by -1%
+\settowidth{\Width}{{#7}}\setlength{\Width}{0\Width}%
+\settoheight{\Height}{{#7}}\settodepth{\Depth}{{#7}}\setlength{\Height}{-0.5\Height}\setlength{\Depth}{0.5\Depth}\addtolength{\Height}{\Depth}%
+\put(\theketpicctrf,\theketpicctrg){\hspace*{\Width}\raisebox{\Height}{{#7}}}%
+}%
+%
+}%
diff --git a/graphics/ketcindy/ketcindyfolder/style/ketmedia.sty b/graphics/ketcindy/ketcindyfolder/style/ketmedia.sty
new file mode 100644
index 0000000000..aa6eecac87
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/style/ketmedia.sty
@@ -0,0 +1,108 @@
+\newcommand{\inputsound}[3][90]{
+% 20180305 changed
+% 20180317 changed
+\def\soundbuttona{\color{blue}\small\fbox{\strut$\oplus\triangleright$}}
+\def\soundbuttonb{\color{blue}\small\fbox{\strut$\ll$}}
+{\unitlength=1pt
+\ketcalcwidth[0]{\soundbuttona}
+\setcounter{ketpicctrb}{\theketpicctra}
+\ketcalcwidth[0]{\soundbuttonb}
+\addtocounter{ketpicctrb}{\theketpicctra}
+\addtocounter{ketpicctrb}{20}
+
+\noindent
+\hspace*{#1mm}\hspace{20pt}%
+\mediabutton[
+mediacommand=#3:playPause,
+overface={\soundbuttona}%,
+%downface={\color{red}\strut Pause/Pause}%
+]{\soundbuttona}%
+\mediabutton[
+mediacommand=#3:rewind,
+overface={\soundbuttonb}
+%downface={\color{red}\strut Pause/Pause}%
+]{\soundbuttonb}%
+\hspace{-\theketpicctrb pt}%
+\includemedia[
+ label=#3,
+ addresource=#2#3.mp3,
+ activate=pageopen,
+ flashvars={
+ source=#2#3.mp3
+ &autoPlay=true
+ }
+% transparent,
+% passcontext
+]{\color{blue}\small\fbox{\Ctab{15pt}{\strut}}}{APlayer.swf}
+}}
+
+\newcommand{\inputsoundclick}[3][90]{
+% 20180317 added
+\def\soundbuttona{\color{blue}\small\fbox{\strut$\oplus\triangleright$}}
+\def\soundbuttonb{\color{blue}\small\fbox{\strut$\ll$}}
+{\unitlength=1pt
+\ketcalcwidth[0]{\soundbuttona}
+\setcounter{ketpicctrb}{\theketpicctra}
+\ketcalcwidth[0]{\soundbuttonb}
+\addtocounter{ketpicctrb}{\theketpicctra}
+\addtocounter{ketpicctrb}{20}
+
+\noindent
+\hspace*{#1mm}\hspace{20pt}%
+\mediabutton[
+mediacommand=#3:playPause,
+overface={\soundbuttona}%,
+%downface={\color{red}\strut Pause/Pause}%
+]{\soundbuttona}%
+\mediabutton[
+mediacommand=#3:rewind,
+overface={\soundbuttonb}
+%downface={\color{red}\strut Pause/Pause}%
+]{\soundbuttonb}%
+\hspace{-\theketpicctrb pt}%
+\includemedia[
+ label=#3,
+ addresource=#2#3.mp3,
+ activate=onclick,
+ flashvars={
+ source=#2#3.mp3
+ &autoPlay=true
+ }
+% transparent,
+% passcontext
+]{\color{blue}\small\fbox{\Ctab{15pt}{\strut}}}{APlayer.swf}
+}}
+
+\newcommand{\inputmovie}[5][90]{
+% 20180306 changed
+% width,height,dir,name
+\def\soundbuttona{\small\fbox{\strut$\oplus\triangleright$}}
+\def\soundbuttonb{\small\fbox{\strut$\ll$}}
+
+\hspace*{#1 mm}\mediabutton[
+ mediacommand=#5:playPause,
+ overface={\color{blue}\soundbuttona},
+ downface={\color{red}\soundbuttona}
+]{\fbox{\soundbuttona}}
+\mediabutton[
+ mediacommand=#5:rewind,
+ overface={\color{blue}\soundbuttonb},
+ downface={\color{red}\soundbuttonb}
+]{\fbox{\soundbuttonb}}
+
+\includemedia[
+ label=#5,
+ width=#2\linewidth,totalheight=#3\linewidth,
+ activate=pageopen,
+ addresource=#4#5.mp4,
+ flashvars={
+ source=#4#5.mp4
+% &showloading=never
+% &autoRewind=true
+ &autoplay=true
+% &loop=1
+% &buffer=0.2
+ }
+]{}{VPlayer.swf}
+
+} \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/style/ketpic.sty b/graphics/ketcindy/ketcindyfolder/style/ketpic.sty
new file mode 100644
index 0000000000..5215cd1f11
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/style/ketpic.sty
@@ -0,0 +1,844 @@
+%Copyright (C) 2014 Setsuo Takato, KETpic developer team
+%*
+%* This program is free software: you can redistribute it and/or modify
+%* it under the terms of the GNU General Public License as published by
+%* the Free Software Foundation; either version 3 of the License, or
+%* (at your option) any later version.
+%*
+%* This program is distributed in the hope that it will be useful,
+%* but WITHOUT ANY WARRANTY; without even the implied warranty of
+%* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+%* GNU General Public License for more details.
+%*
+%* You should have received a copy of the GNU General Public License
+%* along with this program. If not, see <http://www.gnu.org/licenses/>
+%%% ketpic.sty
+% 2018.09.20
+% setmargintrue added
+% 2016.12.08
+% NEarrow, ..., SELarrow,... added
+% argument ( option ) = size
+% 2016.04.07
+% ketcindy, selarrow, serarrow, nelarrow, nerarrow
+% 2010.09.17 %
+%
+\newcounter{ketpicctra}%
+\newcounter{ketpicctrb}%
+\newcounter{ketpicctrc}%
+\newcounter{ketpicctrd}%
+\newcounter{ketpicctre}%
+\newcounter{ketpicctrf}%
+\newcounter{ketpicctrg}%
+\newcounter{ketpicctrh}%
+\newcounter{ketpicctri}%
+\newcounter{ketpicctrj}%
+\def\ketpic{%
+{K\kern-.20em\lower.5ex\hbox{E}\kern-.125em{Tpic}}%
+%
+}%
+\def\ketcindy{{K\kern-.20em%
+\lower.5ex\hbox{E}\kern-.125em{TCindy}}}%
+\def\KeTpic{\ketpic}%
+\def\KeTCindy{\ketcindy}%
+\newlength{\Width}%
+\newlength{\Height}%
+\newlength{\Depth}%
+\newcommand{\Ltab}[2]{%
+\settowidth{\Width}{#2}%
+\setlength{\Width}{-\Width}%
+\addtolength{\Width}{#1}%
+#2\hspace{\Width}\mbox{}%
+%
+}%
+\newcommand{\Rtab}[2]{%
+\settowidth{\Width}{#2}%
+\setlength{\Width}{-\Width}%
+\addtolength{\Width}{#1}%
+\hspace*{\Width}#2\mbox{}%
+%
+}%
+\newcommand{\Ctab}[2]{%
+\settowidth{\Width}{#2}%
+\setlength{\Width}{-\Width}%
+\addtolength{\Width}{#1}%
+\setlength{\Width}{0.5\Width}%
+\hspace*{\Width}#2\hspace{\Width}\mbox{}%
+%
+}%
+\newcommand{\vbackward}[1]{%
+\settoheight{\Height}{#1}%
+\vspace*{-\Height}%
+%
+}%
+\newcommand{\vforward}[1]{%
+\settoheight{\Height}{#1}%
+\vspace*{\Height}%
+%
+}%
+\newcommand{\usepack}{%
+\usepackage{amsmath,amssymb}%
+\usepackage{graphicx}%
+\usepackage{color}%
+%
+}%
+\newcommand{\setmargin}[4]{%
+\setlength{\oddsidemargin}{-25.4mm}%
+\addtolength{\oddsidemargin}{#1 mm}%
+\setlength{\textwidth}{\paperwidth}%
+\addtolength{\textwidth}{-#1 mm}%
+\addtolength{\textwidth}{-#2 mm}%
+\setlength{\headheight}{0mm}%
+\setlength{\headsep}{0mm}%
+\setlength{\topmargin}{-25.4mm}%
+\addtolength{\topmargin}{#3 mm}%
+\setlength{\textheight}{\paperheight}%
+\addtolength{\textheight}{-#3 mm}%
+\addtolength{\textheight}{-#4 mm}%
+%
+}%
+\newcommand{\setmargintrue}[4]{
+\setlength{\oddsidemargin}{-25.4truemm}%
+\addtolength{\oddsidemargin}{#1 truemm}%
+\setlength{\textwidth}{\paperwidth}%
+\addtolength{\textwidth}{-#1 truemm}%
+\addtolength{\textwidth}{-#2 truemm}%
+\setlength{\topmargin}{-25.4truemm}% 1in=25.4mm
+\addtolength{\topmargin}{#3 truemm}%
+\addtolength{\topmargin}{-\headheight}%
+\addtolength{\topmargin}{-\headsep}%
+\addtolength{\topmargin}{-\topskip}%
+\setlength{\textheight}{\paperheight}%
+\addtolength{\textheight}{-#3 truemm}%
+\addtolength{\textheight}{-#4 truemm}%
+\addtolength{\textheight}{\topskip}%
+%
+}%
+\newcommand{\ketcalcwidth}[2][0]{%
+\settowidth{\Depth}{#2}%
+\setlength{\Width}{0\unitlength}%
+\setcounter{ketpicctra}{0}%
+\setcounter{ketpicctra}{1}%
+\addtocounter{ketpicctra}{-1}%
+%
+{%
+\loop%
+\addtocounter{ketpicctra}{1}%
+\addtolength{\Width}{\unitlength}%
+%
+{%
+\ifdim %
+\Width>\Depth %
+\addtocounter{ketpicctra}{6000}%
+%
+\fi%
+}%
+%
+\ifnum\theketpicctra<5000%
+\repeat%
+}%
+\addtocounter{ketpicctra}{-6000}%
+%
+{%
+\ifnum %
+#1>0 %
+\theketpicctra%
+%
+\fi%
+}%
+%
+}%
+\newcommand{\ketcalcheight}[2][0]{%
+\settoheight{\Depth}{#2}%
+\setlength{\Height}{0\unitlength}%
+\setcounter{ketpicctra}{0}%
+\setcounter{ketpicctra}{1}%
+\addtocounter{ketpicctra}{-1}%
+%
+{%
+\loop%
+\addtocounter{ketpicctra}{1}%
+\addtolength{\Height}{\unitlength}%
+%
+{%
+\ifdim %
+\Height>\Depth %
+\addtocounter{ketpicctra}{6000}%
+%
+\fi%
+}%
+%
+\ifnum\theketpicctra<5000%
+\repeat%
+}%
+\addtocounter{ketpicctra}{-6000}%
+%
+{%
+\ifnum %
+#1>0 %
+\theketpicctra%
+%
+\fi%
+}%
+%
+}%
+\newcommand{\ketcalcdepth}[2][0]{%
+\settodepth{\Width}{#2}%
+\setlength{\Depth}{0\unitlength}%
+\setcounter{ketpicctra}{0}%
+\setcounter{ketpicctra}{1}%
+\addtocounter{ketpicctra}{-1}%
+%
+{%
+\loop%
+\addtocounter{ketpicctra}{1}%
+\addtolength{\Depth}{\unitlength}%
+%
+{%
+\ifdim %
+\Depth>\Width %
+\addtocounter{ketpicctra}{5000}%
+%
+\fi%
+}%
+%
+\ifnum\theketpicctra<5000%
+\repeat%
+}%
+\addtocounter{ketpicctra}{-5000}%
+%
+{%
+\ifnum %
+#1>0 %
+\theketpicctra%
+%
+\fi%
+}%
+%
+}%
+\newcommand{\ketcalcwh}[1]{%
+{\unitlength=0.1mm%
+\ketcalcwidth{#1}%
+\setcounter{ketpicctrb}{\value{ketpicctra}}%
+\divide\value{ketpicctrb} by 10%
+\addtocounter{ketpicctrb}{0}%
+\{\theketpicctrb.%
+\multiply\value{ketpicctrb} by 10%
+\addtocounter{ketpicctrb}{0}%
+\addtocounter{ketpicctra}{-\value{ketpicctrb}}%
+\theketpicctra\}\{%
+\ketcalcheight{#1}%
+\setcounter{ketpicctrb}{\value{ketpicctra}}%
+\ketcalcdepth{#1}%
+\addtocounter{ketpicctra}{\value{ketpicctrb}}%
+\setcounter{ketpicctrb}{\value{ketpicctra}}%
+\divide\value{ketpicctrb} by 10%
+\addtocounter{ketpicctrb}{0}%
+\theketpicctrb.%
+\multiply\value{ketpicctrb} by 10%
+\addtocounter{ketpicctrb}{0}%
+\addtocounter{ketpicctra}{-\value{ketpicctrb}}%
+\theketpicctra\}%
+%
+}%
+%
+}%
+\newcommand{\dangerbendmark}[1][1]{%
+\def\tmpcontents{%
+{\unitlength=0.911mm%
+\begin{picture}%
+( 3.85072, 4.34364)( 3.18982, 4.86836)%
+\special{pn 8}%
+%
+\special{pa 229 -200}\special{pa 211 -204}\special{pa 195 -208}\special{pa 183 -210}%
+\special{pa 173 -212}\special{pa 166 -213}\special{pa 160 -214}\special{pa 155 -215}%
+\special{pa 151 -215}\special{pa 149 -215}\special{pa 146 -215}\special{pa 143 -216}%
+\special{pa 142 -217}\special{pa 141 -218}\special{pa 142 -220}\special{pa 146 -222}%
+\special{pa 152 -226}\special{pa 160 -229}\special{pa 169 -233}\special{pa 180 -237}%
+\special{pa 190 -241}\special{pa 201 -245}\special{pa 211 -248}\special{pa 221 -252}%
+\special{pa 229 -255}\special{pa 235 -258}\special{pa 240 -260}\special{pa 243 -263}%
+\special{pa 246 -266}\special{pa 248 -270}\special{pa 250 -275}\special{pa 251 -280}%
+\special{pa 252 -286}\special{pa 253 -292}\special{pa 252 -298}\special{pa 249 -302}%
+\special{pa 245 -306}\special{pa 240 -309}\special{pa 235 -312}\special{pa 228 -314}%
+\special{pa 221 -316}\special{pa 214 -319}\special{pa 207 -320}\special{pa 198 -322}%
+\special{pa 190 -324}\special{pa 181 -326}\special{pa 172 -327}\special{pa 163 -328}%
+\special{pa 153 -329}\special{pa 142 -330}\special{pa 142 -330}\special{pa 142 -329}%
+\special{pa 142 -329}\special{pa 142 -328}\special{pa 142 -328}\special{pa 142 -327}%
+\special{pa 142 -327}\special{pa 142 -326}\special{pa 142 -326}\special{pa 142 -325}%
+\special{pa 141 -325}\special{pa 141 -324}\special{pa 141 -324}\special{pa 141 -323}%
+\special{pa 141 -323}\special{pa 141 -322}\special{pa 141 -322}\special{pa 141 -321}%
+\special{pa 141 -321}\special{pa 141 -320}\special{pa 141 -320}\special{pa 141 -319}%
+\special{pa 141 -319}\special{pa 141 -318}\special{pa 141 -318}\special{pa 141 -317}%
+\special{pa 140 -317}\special{pa 140 -316}\special{pa 140 -316}\special{pa 140 -315}%
+\special{pa 140 -315}\special{pa 140 -314}\special{pa 140 -313}\special{pa 140 -313}%
+\special{pa 140 -312}\special{pa 140 -312}\special{pa 140 -311}\special{pa 140 -311}%
+\special{pa 140 -310}\special{pa 140 -310}\special{pa 140 -309}\special{pa 140 -309}%
+\special{pa 139 -308}\special{pa 139 -308}\special{pa 139 -307}\special{pa 139 -307}%
+\special{pa 139 -306}\special{pa 139 -306}\special{pa 139 -305}\special{pa 159 -301}%
+\special{pa 175 -297}\special{pa 188 -294}\special{pa 198 -293}\special{pa 206 -292}%
+\special{pa 211 -291}\special{pa 215 -291}\special{pa 217 -290}\special{pa 218 -290}%
+\special{pa 219 -289}\special{pa 219 -289}\special{pa 219 -287}\special{pa 219 -286}%
+\special{pa 219 -285}\special{pa 220 -284}\special{pa 220 -283}\special{pa 220 -283}%
+\special{pa 219 -282}\special{pa 215 -280}\special{pa 210 -278}\special{pa 201 -275}%
+\special{pa 190 -272}\special{pa 179 -268}\special{pa 167 -264}\special{pa 155 -259}%
+\special{pa 145 -255}\special{pa 136 -251}\special{pa 128 -246}\special{pa 122 -242}%
+\special{pa 118 -238}\special{pa 116 -234}\special{pa 115 -230}\special{pa 114 -225}%
+\special{pa 115 -221}\special{pa 115 -216}\special{pa 116 -211}\special{pa 118 -206}%
+\special{pa 121 -202}\special{pa 125 -197}\special{pa 132 -194}\special{pa 140 -190}%
+\special{pa 150 -188}\special{pa 160 -185}\special{pa 171 -183}\special{pa 183 -181}%
+\special{pa 194 -180}\special{pa 205 -178}\special{pa 215 -176}\special{pa 224 -175}%
+\special{pa 224 -175}\special{pa 224 -176}\special{pa 224 -176}\special{pa 224 -176}%
+\special{pa 224 -177}\special{pa 224 -177}\special{pa 224 -178}\special{pa 225 -178}%
+\special{pa 225 -179}\special{pa 225 -179}\special{pa 225 -180}\special{pa 225 -180}%
+\special{pa 225 -181}\special{pa 225 -181}\special{pa 225 -182}\special{pa 225 -182}%
+\special{pa 226 -183}\special{pa 226 -183}\special{pa 226 -184}\special{pa 226 -184}%
+\special{pa 226 -184}\special{pa 226 -185}\special{pa 226 -185}\special{pa 226 -186}%
+\special{pa 226 -186}\special{pa 227 -187}\special{pa 227 -187}\special{pa 227 -188}%
+\special{pa 227 -188}\special{pa 227 -189}\special{pa 227 -189}\special{pa 227 -190}%
+\special{pa 227 -190}\special{pa 227 -191}\special{pa 227 -191}\special{pa 228 -192}%
+\special{pa 228 -192}\special{pa 228 -192}\special{pa 228 -193}\special{pa 228 -193}%
+\special{pa 228 -194}\special{pa 228 -194}\special{pa 228 -195}\special{pa 228 -195}%
+\special{pa 229 -196}\special{pa 229 -196}\special{pa 229 -197}\special{pa 229 -197}%
+\special{pa 229 -198}\special{pa 229 -200}\special{sh 1}\special{ip}%
+\special{pn 8}%
+\special{pa 229 -200}\special{pa 211 -204}\special{pa 195 -208}\special{pa 183 -210}%
+\special{pa 173 -212}\special{pa 166 -213}\special{pa 160 -214}\special{pa 155 -215}%
+\special{pa 151 -215}\special{pa 149 -215}\special{pa 146 -215}\special{pa 143 -216}%
+\special{pa 142 -217}\special{pa 141 -218}\special{pa 142 -220}\special{pa 146 -222}%
+\special{pa 152 -226}\special{pa 160 -229}\special{pa 169 -233}\special{pa 180 -237}%
+\special{pa 190 -241}\special{pa 201 -245}\special{pa 211 -248}\special{pa 221 -252}%
+\special{pa 229 -255}\special{pa 235 -258}\special{pa 240 -260}\special{pa 243 -263}%
+\special{pa 246 -266}\special{pa 248 -270}\special{pa 250 -275}\special{pa 251 -280}%
+\special{pa 252 -286}\special{pa 253 -292}\special{pa 252 -298}\special{pa 249 -302}%
+\special{pa 245 -306}\special{pa 240 -309}\special{pa 235 -312}\special{pa 228 -314}%
+\special{pa 221 -316}\special{pa 214 -319}\special{pa 207 -320}\special{pa 198 -322}%
+\special{pa 190 -324}\special{pa 181 -326}\special{pa 172 -327}\special{pa 163 -328}%
+\special{pa 153 -329}\special{pa 142 -330}%
+\special{fp}%
+\special{pa 142 -330}\special{pa 142 -330}\special{pa 142 -329}\special{pa 142 -329}%
+\special{pa 142 -328}\special{pa 142 -328}\special{pa 142 -327}\special{pa 142 -327}%
+\special{pa 142 -326}\special{pa 142 -326}\special{pa 142 -325}\special{pa 141 -325}%
+\special{pa 141 -324}\special{pa 141 -324}\special{pa 141 -323}\special{pa 141 -323}%
+\special{pa 141 -322}\special{pa 141 -322}\special{pa 141 -321}\special{pa 141 -321}%
+\special{pa 141 -320}\special{pa 141 -320}\special{pa 141 -319}\special{pa 141 -319}%
+\special{pa 141 -318}\special{pa 141 -318}\special{pa 141 -317}\special{pa 140 -317}%
+\special{pa 140 -316}\special{pa 140 -316}\special{pa 140 -315}\special{pa 140 -315}%
+\special{pa 140 -314}\special{pa 140 -313}\special{pa 140 -313}\special{pa 140 -312}%
+\special{pa 140 -312}\special{pa 140 -311}\special{pa 140 -311}\special{pa 140 -310}%
+\special{pa 140 -310}\special{pa 140 -309}\special{pa 140 -309}\special{pa 139 -308}%
+\special{pa 139 -308}\special{pa 139 -307}\special{pa 139 -307}\special{pa 139 -306}%
+\special{pa 139 -306}\special{pa 139 -305}%
+\special{fp}%
+\special{pa 139 -305}\special{pa 159 -301}\special{pa 175 -297}\special{pa 188 -294}%
+\special{pa 198 -293}\special{pa 206 -292}\special{pa 211 -291}\special{pa 215 -291}%
+\special{pa 217 -290}\special{pa 218 -290}\special{pa 219 -289}\special{pa 219 -289}%
+\special{pa 219 -287}\special{pa 219 -286}\special{pa 219 -285}\special{pa 220 -284}%
+\special{pa 220 -283}\special{pa 220 -283}\special{pa 219 -282}\special{pa 215 -280}%
+\special{pa 210 -278}\special{pa 201 -275}\special{pa 190 -272}\special{pa 179 -268}%
+\special{pa 167 -264}\special{pa 155 -259}\special{pa 145 -255}\special{pa 136 -251}%
+\special{pa 128 -246}\special{pa 122 -242}\special{pa 118 -238}\special{pa 116 -234}%
+\special{pa 115 -230}\special{pa 114 -225}\special{pa 115 -221}\special{pa 115 -216}%
+\special{pa 116 -211}\special{pa 118 -206}\special{pa 121 -202}\special{pa 125 -197}%
+\special{pa 132 -194}\special{pa 140 -190}\special{pa 150 -188}\special{pa 160 -185}%
+\special{pa 171 -183}\special{pa 183 -181}\special{pa 194 -180}\special{pa 205 -178}%
+\special{pa 215 -176}\special{pa 224 -175}%
+\special{fp}%
+\special{pa 224 -175}\special{pa 224 -175}\special{pa 224 -176}\special{pa 224 -176}%
+\special{pa 224 -176}\special{pa 224 -177}\special{pa 224 -177}\special{pa 224 -178}%
+\special{pa 225 -178}\special{pa 225 -179}\special{pa 225 -179}\special{pa 225 -180}%
+\special{pa 225 -180}\special{pa 225 -181}\special{pa 225 -181}\special{pa 225 -182}%
+\special{pa 225 -182}\special{pa 226 -183}\special{pa 226 -183}\special{pa 226 -184}%
+\special{pa 226 -184}\special{pa 226 -184}\special{pa 226 -185}\special{pa 226 -185}%
+\special{pa 226 -186}\special{pa 226 -186}\special{pa 227 -187}\special{pa 227 -187}%
+\special{pa 227 -188}\special{pa 227 -188}\special{pa 227 -189}\special{pa 227 -189}%
+\special{pa 227 -190}\special{pa 227 -190}\special{pa 227 -191}\special{pa 227 -191}%
+\special{pa 228 -192}\special{pa 228 -192}\special{pa 228 -192}\special{pa 228 -193}%
+\special{pa 228 -193}\special{pa 228 -194}\special{pa 228 -194}\special{pa 228 -195}%
+\special{pa 228 -195}\special{pa 229 -196}\special{pa 229 -196}\special{pa 229 -197}%
+\special{pa 229 -197}\special{pa 229 -198}%
+\special{fp}%
+\special{pn 8}%
+\end{picture}}%%
+}%
+\scalebox{#1}{\tmpcontents}%
+%
+}%
+\newcommand{\cautionmark}[1][1]{%
+\scalebox{#1}{%
+{\unitlength=1mm%
+\begin{picture}%
+( 4.60000, 3.98372)( -2.30000, 0.00000)%
+\special{pn 8}%
+%
+\special{pn 12}%
+\special{pa -91 -0}\special{pa 91 -0}\special{pa 0 -157}\special{pa -91 -0}%
+\special{fp}%
+\special{pn 2}%
+\special{pa 12 -22}\special{pa 11 -25}\special{pa 10 -29}\special{pa 7 -31}\special{pa 4 -33}%
+\special{pa 0 -33}\special{pa -4 -33}\special{pa -7 -31}\special{pa -10 -29}\special{pa -11 -25}%
+\special{pa -12 -22}\special{pa -11 -18}\special{pa -10 -15}\special{pa -7 -12}\special{pa -4 -10}%
+\special{pa -0 -10}\special{pa 4 -10}\special{pa 7 -12}\special{pa 10 -15}\special{pa 11 -18}%
+\special{pa 12 -22}%
+\special{fp}%
+\special{pa 0 -47}\special{pa 4 -49}\special{pa 8 -54}\special{pa 11 -60}\special{pa 13 -67}%
+\special{pa 14 -75}\special{pa 16 -82}\special{pa 17 -88}\special{pa 18 -94}\special{pa 18 -98}%
+\special{pa 16 -102}\special{pa 14 -105}\special{pa 11 -108}\special{pa 7 -110}\special{pa 2 -112}%
+\special{pa -3 -112}\special{pa -7 -110}\special{pa -11 -108}\special{pa -14 -105}%
+\special{pa -16 -102}\special{pa -17 -98}\special{pa -17 -93}\special{pa -17 -88}%
+\special{pa -16 -82}\special{pa -15 -75}\special{pa -13 -67}\special{pa -11 -60}\special{pa -8 -53}%
+\special{pa -4 -49}\special{pa 0 -47}%
+\special{fp}%
+\special{pn 8}%
+\special{pa 12 -22}\special{pa 11 -25}\special{pa 10 -29}\special{pa 7 -31}\special{pa 4 -33}%
+\special{pa 0 -33}\special{pa -4 -33}\special{pa -7 -31}\special{pa -10 -29}\special{pa -11 -25}%
+\special{pa -12 -22}\special{pa -11 -18}\special{pa -10 -15}\special{pa -7 -12}\special{pa -4 -10}%
+\special{pa -0 -10}\special{pa 4 -10}\special{pa 7 -12}\special{pa 10 -15}\special{pa 11 -18}%
+\special{pa 12 -22}\special{sh 1}\special{ip}%
+\special{pa 0 -47}\special{pa 4 -49}\special{pa 8 -54}\special{pa 11 -60}\special{pa 13 -67}%
+\special{pa 14 -75}\special{pa 16 -82}\special{pa 17 -88}\special{pa 18 -94}\special{pa 18 -98}%
+\special{pa 16 -102}\special{pa 14 -105}\special{pa 11 -108}\special{pa 7 -110}\special{pa 2 -112}%
+\special{pa -3 -112}\special{pa -7 -110}\special{pa -11 -108}\special{pa -14 -105}%
+\special{pa -16 -102}\special{pa -17 -98}\special{pa -17 -93}\special{pa -17 -88}%
+\special{pa -16 -82}\special{pa -15 -75}\special{pa -13 -67}\special{pa -11 -60}\special{pa -8 -53}%
+\special{pa -4 -49}\special{pa 0 -47}\special{sh 1}\special{ip}%
+\end{picture}}%%
+}%
+%
+}%
+\newcommand{\circlemark}[2][8]{%
+\scalebox{#2}{%
+{\unitlength=1mm%
+\begin{picture}%
+( 4.00000, 4.00000)( -2.00000, -2.00000)%
+\special{pn 8}%
+%
+\special{pn #1}%
+\special{pa 79 -0}\special{pa 78 -10}\special{pa 76 -20}\special{pa 73 -29}\special{pa 69 -38}%
+\special{pa 64 -46}\special{pa 57 -54}\special{pa 50 -61}\special{pa 42 -66}\special{pa 34 -71}%
+\special{pa 24 -75}\special{pa 15 -77}\special{pa 5 -79}\special{pa -5 -79}\special{pa -15 -77}%
+\special{pa -24 -75}\special{pa -34 -71}\special{pa -42 -66}\special{pa -50 -61}\special{pa -57 -54}%
+\special{pa -64 -46}\special{pa -69 -38}\special{pa -73 -29}\special{pa -76 -20}\special{pa -78 -10}%
+\special{pa -79 0}\special{pa -78 10}\special{pa -76 20}\special{pa -73 29}\special{pa -69 38}%
+\special{pa -64 46}\special{pa -57 54}\special{pa -50 61}\special{pa -42 66}\special{pa -34 71}%
+\special{pa -24 75}\special{pa -15 77}\special{pa -5 79}\special{pa 5 79}\special{pa 15 77}%
+\special{pa 24 75}\special{pa 34 71}\special{pa 42 66}\special{pa 50 61}\special{pa 57 54}%
+\special{pa 64 46}\special{pa 69 38}\special{pa 73 29}\special{pa 76 20}\special{pa 78 10}%
+\special{pa 79 -0}%
+\special{fp}%
+\end{picture}}%%
+}%
+%
+}%
+\newcommand{\circleshade}[3][8]{%
+\scalebox{#2}{%
+{\unitlength=1mm%
+\begin{picture}%
+( 4.00000, 4.00000)( -2.00000, -2.00000)%
+\special{pn 8}%
+%
+\special{pn #1}%
+\special{pa 79 -0}\special{pa 78 -10}\special{pa 76 -20}\special{pa 73 -29}\special{pa 69 -38}%
+\special{pa 64 -46}\special{pa 57 -54}\special{pa 50 -61}\special{pa 42 -66}\special{pa 34 -71}%
+\special{pa 24 -75}\special{pa 15 -77}\special{pa 5 -79}\special{pa -5 -79}\special{pa -15 -77}%
+\special{pa -24 -75}\special{pa -34 -71}\special{pa -42 -66}\special{pa -50 -61}\special{pa -57 -54}%
+\special{pa -64 -46}\special{pa -69 -38}\special{pa -73 -29}\special{pa -76 -20}\special{pa -78 -10}%
+\special{pa -79 0}\special{pa -78 10}\special{pa -76 20}\special{pa -73 29}\special{pa -69 38}%
+\special{pa -64 46}\special{pa -57 54}\special{pa -50 61}\special{pa -42 66}\special{pa -34 71}%
+\special{pa -24 75}\special{pa -15 77}\special{pa -5 79}\special{pa 5 79}\special{pa 15 77}%
+\special{pa 24 75}\special{pa 34 71}\special{pa 42 66}\special{pa 50 61}\special{pa 57 54}%
+\special{pa 64 46}\special{pa 69 38}\special{pa 73 29}\special{pa 76 20}\special{pa 78 10}%
+\special{pa 79 -0}\special{sh #3}\special{ip}%
+\special{pa 79 -0}\special{pa 78 -10}\special{pa 76 -20}\special{pa 73 -29}\special{pa 69 -38}%
+\special{pa 64 -46}\special{pa 57 -54}\special{pa 50 -61}\special{pa 42 -66}\special{pa 34 -71}%
+\special{pa 24 -75}\special{pa 15 -77}\special{pa 5 -79}\special{pa -5 -79}\special{pa -15 -77}%
+\special{pa -24 -75}\special{pa -34 -71}\special{pa -42 -66}\special{pa -50 -61}\special{pa -57 -54}%
+\special{pa -64 -46}\special{pa -69 -38}\special{pa -73 -29}\special{pa -76 -20}\special{pa -78 -10}%
+\special{pa -79 0}\special{pa -78 10}\special{pa -76 20}\special{pa -73 29}\special{pa -69 38}%
+\special{pa -64 46}\special{pa -57 54}\special{pa -50 61}\special{pa -42 66}\special{pa -34 71}%
+\special{pa -24 75}\special{pa -15 77}\special{pa -5 79}\special{pa 5 79}\special{pa 15 77}%
+\special{pa 24 75}\special{pa 34 71}\special{pa 42 66}\special{pa 50 61}\special{pa 57 54}%
+\special{pa 64 46}\special{pa 69 38}\special{pa 73 29}\special{pa 76 20}\special{pa 78 10}%
+\special{pa 79 -0}%
+\special{fp}%
+\end{picture}}%%
+}%
+%
+}%
+% 2016.04.07
+\newcommand{\nelarrow}[1][1]{%
+\scalebox{#1}{\raisebox{-2.5pt}{%
+{\unitlength=1pt%
+\begin{picture}%
+( 10.00000, 10.00000)( -5.00000, -5.00000)%
+\special{pn 8}%
+%
+\special{pa -55 55}\special{pa -40 54}\special{pa -24 51}\special{pa -10 45}\special{pa 4 38}%
+\special{pa 17 29}\special{pa 28 18}\special{pa 37 5}\special{pa 45 -9}\special{pa 51 -23}%
+\special{pa 54 -39}%
+\special{fp}%
+\special{pa 61 -16}\special{pa 55 -55}\special{pa 37 -20}\special{pa 49 -18}\special{pa 61 -16}%
+\special{sh 1}\special{ip}%
+\special{pn 1}%
+\special{pa 61 -16}\special{pa 55 -55}\special{pa 37 -20}\special{pa 49 -18}\special{pa 61 -16}%
+\special{pa 55 -55}%
+\special{fp}%
+\special{pn 8}%
+\end{picture}}%
+}}}%
+\newcommand{\nerarrow}[1][1]{%
+\scalebox{#1}{\raisebox{-2.5pt}{%
+{\unitlength=1pt%
+\begin{picture}%
+( 10.00000, 10.00000)( -5.00000, -5.00000)%
+\special{pn 8}%
+%
+\special{pa 39 -54}\special{pa 23 -51}\special{pa 9 -45}\special{pa -5 -37}\special{pa -18 -28}%
+\special{pa -29 -17}\special{pa -38 -4}\special{pa -45 10}\special{pa -51 24}\special{pa -54 40}%
+\special{pa -55 55}%
+\special{fp}%
+\special{pa 20 -37}\special{pa 55 -55}\special{pa 16 -61}\special{pa 18 -49}\special{pa 20 -37}%
+\special{sh 1}\special{ip}%
+\special{pn 1}%
+\special{pa 20 -37}\special{pa 55 -55}\special{pa 16 -61}\special{pa 18 -49}\special{pa 20 -37}%
+\special{pa 55 -55}%
+\special{fp}%
+\special{pn 8}%
+\end{picture}}%
+}}}%
+\newcommand{\selarrow}[1][1]{%
+\scalebox{#1}{\raisebox{-2.5pt}{%
+{\unitlength=1pt%
+\begin{picture}%
+( 10.00000, 10.00000)( -5.00000, -5.00000)%
+\special{pn 8}%
+%
+\special{pa -55 -55}\special{pa -54 -40}\special{pa -51 -24}\special{pa -45 -10}\special{pa -38 4}%
+\special{pa -29 17}\special{pa -18 28}\special{pa -5 37}\special{pa 9 45}\special{pa 23 51}%
+\special{pa 39 54}%
+\special{fp}%
+\special{pa 16 61}\special{pa 55 55}\special{pa 20 37}\special{pa 18 49}\special{pa 16 61}%
+\special{sh 1}\special{ip}%
+\special{pn 1}%
+\special{pa 16 61}\special{pa 55 55}\special{pa 20 37}\special{pa 18 49}\special{pa 16 61}%
+\special{pa 55 55}%
+\special{fp}%
+\special{pn 8}%
+\end{picture}}%
+}}}%
+\newcommand{\serarrow}[1][1]{%
+\scalebox{#1}{\raisebox{-2.5pt}{%
+{\unitlength=1pt%
+\begin{picture}%
+( 10.00000, 10.00000)( -5.00000, -5.00000)%
+\special{pn 8}%
+%
+\special{pa 54 39}\special{pa 51 23}\special{pa 45 9}\special{pa 37 -5}\special{pa 28 -18}%
+\special{pa 17 -29}\special{pa 4 -38}\special{pa -10 -45}\special{pa -24 -51}\special{pa -40 -54}%
+\special{pa -55 -55}%
+\special{fp}%
+\special{pa 37 20}\special{pa 55 55}\special{pa 61 16}\special{pa 49 18}\special{pa 37 20}%
+\special{sh 1}\special{ip}%
+\special{pn 1}%
+\special{pa 37 20}\special{pa 55 55}\special{pa 61 16}\special{pa 49 18}\special{pa 37 20}%
+\special{pa 55 55}%
+\special{fp}%
+\special{pn 8}%
+\end{picture}}%
+}}}%
+%%% bendingarrow.sty 2016-12-9 7:41
+%%% bendingarrow.sce 2016-12-9 7:41
+\newcommand{\NEarrow}[1][1]{%
+\scalebox{#1}{\raisebox{-2.5pt}{%
+{\unitlength=1pt%
+\begin{picture}%
+( 10.00000, 10.00000)( 0.00000, 0.00000)%
+\special{pn 8}%
+%
+\special{pa 28 -28}\special{pa 97 -97}%
+\special{fp}%
+\special{pa 91 -68}\special{pa 111 -111}\special{pa 68 -91}\special{pa 86 -86}\special{pa 91 -68}%
+\special{sh 1}\special{ip}%
+\special{pn 1}%
+\special{pa 91 -68}\special{pa 111 -111}\special{pa 68 -91}\special{pa 86 -86}\special{pa 91 -68}%
+\special{pa 111 -111}%
+\special{fp}%
+\special{pn 8}%
+\end{picture}}%%
+}%
+%
+}%
+%
+}%
+\newcommand{\SEarrow}[1][1]{%
+\scalebox{#1}{\raisebox{-2.5pt}{%
+{\unitlength=1pt%
+\begin{picture}%
+( 10.00000, 10.00000)( 0.00000, 0.00000)%
+\special{pn 8}%
+%
+\special{pa 28 -111}\special{pa 97 -42}%
+\special{fp}%
+\special{pa 68 -48}\special{pa 111 -28}\special{pa 91 -70}\special{pa 86 -53}\special{pa 68 -48}%
+\special{sh 1}\special{ip}%
+\special{pn 1}%
+\special{pa 68 -48}\special{pa 111 -28}\special{pa 91 -70}\special{pa 86 -53}\special{pa 68 -48}%
+\special{pa 111 -28}%
+\special{fp}%
+\special{pn 8}%
+\end{picture}}%%
+}%
+%
+}%
+%
+}%
+\newcommand{\NWarrow}[1][1]{%
+\scalebox{#1}{\raisebox{-2.5pt}{%
+{\unitlength=1pt%
+\begin{picture}%
+( 10.00000, 10.00000)( 0.00000, 0.00000)%
+\special{pn 8}%
+%
+\special{pa 111 -28}\special{pa 42 -97}%
+\special{fp}%
+\special{pa 70 -91}\special{pa 28 -111}\special{pa 48 -68}\special{pa 53 -86}\special{pa 70 -91}%
+\special{sh 1}\special{ip}%
+\special{pn 1}%
+\special{pa 70 -91}\special{pa 28 -111}\special{pa 48 -68}\special{pa 53 -86}\special{pa 70 -91}%
+\special{pa 28 -111}%
+\special{fp}%
+\special{pn 8}%
+\end{picture}}%%
+}%
+%
+}%
+%
+}%
+\newcommand{\SWarrow}[1][1]{%
+\scalebox{#1}{\raisebox{-2.5pt}{%
+{\unitlength=1pt%
+\begin{picture}%
+( 10.00000, 10.00000)( 0.00000, 0.00000)%
+\special{pn 8}%
+%
+\special{pa 111 -111}\special{pa 42 -42}%
+\special{fp}%
+\special{pa 48 -70}\special{pa 28 -28}\special{pa 70 -48}\special{pa 53 -53}\special{pa 48 -70}%
+\special{sh 1}\special{ip}%
+\special{pn 1}%
+\special{pa 48 -70}\special{pa 28 -28}\special{pa 70 -48}\special{pa 53 -53}\special{pa 48 -70}%
+\special{pa 28 -28}%
+\special{fp}%
+\special{pn 8}%
+\end{picture}}%%
+}%
+%
+}%
+%
+}%
+\newcommand{\NELarrow}[1][1]{%
+\scalebox{#1}{\raisebox{-2.5pt}{%
+{\unitlength=1pt%
+\begin{picture}%
+( 10.00000, 10.00000)( 0.00000, 0.00000)%
+\special{pn 8}%
+%
+\special{pa 28 -28}\special{pa 33 -28}\special{pa 39 -28}\special{pa 45 -29}\special{pa 50 -31}%
+\special{pa 56 -33}\special{pa 61 -35}\special{pa 66 -37}\special{pa 71 -40}\special{pa 76 -43}%
+\special{pa 80 -46}\special{pa 85 -50}\special{pa 89 -54}\special{pa 92 -59}\special{pa 96 -63}%
+\special{pa 99 -68}\special{pa 102 -73}\special{pa 104 -78}\special{pa 106 -83}\special{pa 108 -89}%
+\special{pa 109 -94}%
+\special{fp}%
+\special{pa 114 -64}\special{pa 111 -111}\special{pa 83 -72}\special{pa 101 -76}\special{pa 114 -64}%
+\special{sh 1}\special{ip}%
+\special{pn 1}%
+\special{pa 114 -64}\special{pa 111 -111}\special{pa 83 -72}\special{pa 101 -76}\special{pa 114 -64}%
+\special{pa 111 -111}%
+\special{fp}%
+\special{pn 8}%
+\end{picture}}%%
+}%
+%
+}%
+%
+}%
+\newcommand{\NERarrow}[1][1]{%
+\scalebox{#1}{\raisebox{-2.5pt}{%
+{\unitlength=1pt%
+\begin{picture}%
+( 10.00000, 10.00000)( 0.00000, 0.00000)%
+\special{pn 8}%
+%
+\special{pa 94 -109}\special{pa 89 -108}\special{pa 83 -106}\special{pa 78 -104}\special{pa 73 -102}%
+\special{pa 68 -99}\special{pa 63 -96}\special{pa 59 -92}\special{pa 54 -89}\special{pa 50 -85}%
+\special{pa 46 -80}\special{pa 43 -76}\special{pa 40 -71}\special{pa 37 -66}\special{pa 35 -61}%
+\special{pa 33 -56}\special{pa 31 -50}\special{pa 29 -45}\special{pa 28 -39}\special{pa 28 -33}%
+\special{pa 28 -28}%
+\special{fp}%
+\special{pa 72 -84}\special{pa 111 -111}\special{pa 64 -115}\special{pa 76 -102}\special{pa 72 -84}%
+\special{sh 1}\special{ip}%
+\special{pn 1}%
+\special{pa 72 -84}\special{pa 111 -111}\special{pa 64 -115}\special{pa 76 -102}\special{pa 72 -84}%
+\special{pa 111 -111}%
+\special{fp}%
+\special{pn 8}%
+\end{picture}}%%
+}%
+%
+}%
+%
+}%
+\newcommand{\SELarrow}[1][1]{%
+\scalebox{#1}{\raisebox{-2.5pt}{%
+{\unitlength=1pt%
+\begin{picture}%
+( 10.00000, 10.00000)( 0.00000, 0.00000)%
+\special{pn 8}%
+%
+\special{pa 28 -111}\special{pa 28 -105}\special{pa 28 -99}\special{pa 29 -94}\special{pa 31 -88}%
+\special{pa 33 -83}\special{pa 35 -78}\special{pa 37 -72}\special{pa 40 -67}\special{pa 43 -63}%
+\special{pa 46 -58}\special{pa 50 -54}\special{pa 54 -50}\special{pa 59 -46}\special{pa 63 -43}%
+\special{pa 68 -40}\special{pa 73 -37}\special{pa 78 -34}\special{pa 83 -32}\special{pa 89 -31}%
+\special{pa 94 -29}%
+\special{fp}%
+\special{pa 64 -24}\special{pa 111 -28}\special{pa 72 -55}\special{pa 76 -37}\special{pa 64 -24}%
+\special{sh 1}\special{ip}%
+\special{pn 1}%
+\special{pa 64 -24}\special{pa 111 -28}\special{pa 72 -55}\special{pa 76 -37}\special{pa 64 -24}%
+\special{pa 111 -28}%
+\special{fp}%
+\special{pn 8}%
+\end{picture}}%%
+}%
+%
+}%
+%
+}%
+\newcommand{\SERarrow}[1][1]{%
+\scalebox{#1}{\raisebox{-2.5pt}{%
+{\unitlength=1pt%
+\begin{picture}%
+( 10.00000, 10.00000)( 0.00000, 0.00000)%
+\special{pn 8}%
+%
+\special{pa 109 -44}\special{pa 108 -50}\special{pa 106 -55}\special{pa 104 -60}\special{pa 102 -66}%
+\special{pa 99 -71}\special{pa 96 -75}\special{pa 92 -80}\special{pa 89 -84}\special{pa 85 -88}%
+\special{pa 80 -92}\special{pa 76 -95}\special{pa 71 -99}\special{pa 66 -101}\special{pa 61 -104}%
+\special{pa 56 -106}\special{pa 50 -108}\special{pa 45 -109}\special{pa 39 -110}\special{pa 33 -111}%
+\special{pa 28 -111}%
+\special{fp}%
+\special{pa 83 -66}\special{pa 111 -28}\special{pa 114 -75}\special{pa 101 -62}\special{pa 83 -66}%
+\special{sh 1}\special{ip}%
+\special{pn 1}%
+\special{pa 83 -66}\special{pa 111 -28}\special{pa 114 -75}\special{pa 101 -62}\special{pa 83 -66}%
+\special{pa 111 -28}%
+\special{fp}%
+\special{pn 8}%
+\end{picture}}%%
+}%
+%
+}%
+%
+}%
+\newcommand{\SWRarrow}[1][1]{%
+\scalebox{#1}{\raisebox{-2.5pt}{%
+{\unitlength=1pt%
+\begin{picture}%
+( 10.00000, 10.00000)( 0.00000, 0.00000)%
+\special{pn 8}%
+%
+\special{pa 44 -29}\special{pa 50 -31}\special{pa 55 -32}\special{pa 60 -34}\special{pa 66 -37}%
+\special{pa 71 -40}\special{pa 75 -43}\special{pa 80 -46}\special{pa 84 -50}\special{pa 88 -54}%
+\special{pa 92 -58}\special{pa 95 -63}\special{pa 99 -67}\special{pa 101 -72}\special{pa 104 -78}%
+\special{pa 106 -83}\special{pa 108 -88}\special{pa 109 -94}\special{pa 110 -99}\special{pa 111 -105}%
+\special{pa 111 -111}%
+\special{fp}%
+\special{pa 67 -55}\special{pa 28 -28}\special{pa 75 -24}\special{pa 62 -37}\special{pa 67 -55}%
+\special{sh 1}\special{ip}%
+\special{pn 1}%
+\special{pa 67 -55}\special{pa 28 -28}\special{pa 75 -24}\special{pa 62 -37}\special{pa 67 -55}%
+\special{pa 28 -28}%
+\special{fp}%
+\special{pn 8}%
+\end{picture}}%%
+}%
+%
+}%
+%
+}%
+\newcommand{\SWLarrow}[1][1]{%
+\scalebox{#1}{\raisebox{-2.5pt}{%
+{\unitlength=1pt%
+\begin{picture}%
+( 10.00000, 10.00000)( 0.00000, 0.00000)%
+\special{pn 8}%
+%
+\special{pa 111 -111}\special{pa 105 -111}\special{pa 99 -110}\special{pa 94 -109}%
+\special{pa 88 -108}\special{pa 83 -106}\special{pa 78 -104}\special{pa 72 -101}\special{pa 67 -99}%
+\special{pa 63 -95}\special{pa 58 -92}\special{pa 54 -88}\special{pa 50 -84}\special{pa 46 -80}%
+\special{pa 43 -75}\special{pa 40 -71}\special{pa 37 -66}\special{pa 34 -60}\special{pa 32 -55}%
+\special{pa 31 -50}\special{pa 29 -44}%
+\special{fp}%
+\special{pa 24 -75}\special{pa 28 -28}\special{pa 55 -66}\special{pa 37 -62}\special{pa 24 -75}%
+\special{sh 1}\special{ip}%
+\special{pn 1}%
+\special{pa 24 -75}\special{pa 28 -28}\special{pa 55 -66}\special{pa 37 -62}\special{pa 24 -75}%
+\special{pa 28 -28}%
+\special{fp}%
+\special{pn 8}%
+\end{picture}}%%
+}%
+%
+}%
+%
+}%
+\newcommand{\NWRarrow}[1][1]{%
+\scalebox{#1}{\raisebox{-2.5pt}{%
+{\unitlength=1pt%
+\begin{picture}%
+( 10.00000, 10.00000)( 0.00000, 0.00000)%
+\special{pn 8}%
+%
+\special{pa 29 -94}\special{pa 31 -89}\special{pa 32 -83}\special{pa 34 -78}\special{pa 37 -73}%
+\special{pa 40 -68}\special{pa 43 -63}\special{pa 46 -59}\special{pa 50 -54}\special{pa 54 -50}%
+\special{pa 58 -46}\special{pa 63 -43}\special{pa 67 -40}\special{pa 72 -37}\special{pa 78 -35}%
+\special{pa 83 -33}\special{pa 88 -31}\special{pa 94 -29}\special{pa 99 -28}\special{pa 105 -28}%
+\special{pa 111 -28}%
+\special{fp}%
+\special{pa 55 -72}\special{pa 28 -111}\special{pa 24 -64}\special{pa 37 -76}\special{pa 55 -72}%
+\special{sh 1}\special{ip}%
+\special{pn 1}%
+\special{pa 55 -72}\special{pa 28 -111}\special{pa 24 -64}\special{pa 37 -76}\special{pa 55 -72}%
+\special{pa 28 -111}%
+\special{fp}%
+\special{pn 8}%
+\end{picture}}%%
+}%
+%
+}%
+%
+}%
+\newcommand{\NWLarrow}[1][1]{%
+\scalebox{#1}{\raisebox{-2.5pt}{%
+{\unitlength=1pt%
+\begin{picture}%
+( 10.00000, 10.00000)( 0.00000, 0.00000)%
+\special{pn 8}%
+%
+\special{pa 111 -28}\special{pa 111 -33}\special{pa 110 -39}\special{pa 109 -45}\special{pa 108 -50}%
+\special{pa 106 -56}\special{pa 104 -61}\special{pa 101 -66}\special{pa 99 -71}\special{pa 95 -76}%
+\special{pa 92 -80}\special{pa 88 -85}\special{pa 84 -89}\special{pa 80 -92}\special{pa 75 -96}%
+\special{pa 71 -99}\special{pa 66 -102}\special{pa 60 -104}\special{pa 55 -106}\special{pa 50 -108}%
+\special{pa 44 -109}%
+\special{fp}%
+\special{pa 75 -115}\special{pa 28 -111}\special{pa 67 -84}\special{pa 62 -102}\special{pa 75 -115}%
+\special{sh 1}\special{ip}%
+\special{pn 1}%
+\special{pa 75 -115}\special{pa 28 -111}\special{pa 67 -84}\special{pa 62 -102}\special{pa 75 -115}%
+\special{pa 28 -111}%
+\special{fp}%
+\special{pn 8}%
+\end{picture}}%%
+}%
+%
+}%
+%
+}%
diff --git a/graphics/ketcindy/ketcindyfolder/style/ketpic2e.sty b/graphics/ketcindy/ketcindyfolder/style/ketpic2e.sty
new file mode 100644
index 0000000000..5f90f97848
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/style/ketpic2e.sty
@@ -0,0 +1,699 @@
+%Copyright (C) 2014 Setsuo Takato, KETpic developer team
+%*
+%* This program is free software: you can redistribute it and/or modify
+%* it under the terms of the GNU General Public License as published by
+%* the Free Software Foundation; either version 3 of the License, or
+%* (at your option) any later version.
+%*
+%* This program is distributed in the hope that it will be useful,
+%* but WITHOUT ANY WARRANTY; without even the implied warranty of
+%* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+%* GNU General Public License for more details.
+%*
+%* You should have received a copy of the GNU General Public License
+%* along with this program. If not, see <http://www.gnu.org/licenses/>
+% 2018.09.20
+% setmargintrue added
+% 2016.12.08
+% NEarrow,..., NERarrow,... added
+% argument(option)=size
+% 2016.04.07
+% ketcindy, selarrow, serarrow, nelarrow, nerarrow
+% 2010.09.17 %
+%
+\newcounter{ketpicctra}%
+\newcounter{ketpicctrb}%
+\newcounter{ketpicctrc}%
+\newcounter{ketpicctrd}%
+\newcounter{ketpicctre}%
+\newcounter{ketpicctrf}%
+\newcounter{ketpicctrg}%
+\newcounter{ketpicctrh}%
+\newcounter{ketpicctri}%
+\newcounter{ketpicctrj}%
+\def\ketpic{%
+{K\kern-.20em\lower.5ex\hbox{E}\kern-.125em{Tpic}}%
+%
+}%
+\def\ketcindy{{K\kern-.20em%
+\lower.5ex\hbox{E}\kern-.125em{TCindy}}}%
+\def\KeTpic{\ketpic}%
+\def\KeTCindy{\ketcindy}%
+\newlength{\Width}%
+\newlength{\Height}%
+\newlength{\Depth}%
+\newcommand{\Ltab}[2]{%
+\settowidth{\Width}{#2}%
+\setlength{\Width}{-\Width}%
+\addtolength{\Width}{#1}%
+#2\hspace{\Width}\mbox{}%
+%
+}%
+\newcommand{\Rtab}[2]{%
+\settowidth{\Width}{#2}%
+\setlength{\Width}{-\Width}%
+\addtolength{\Width}{#1}%
+\hspace*{\Width}#2\mbox{}%
+%
+}%
+\newcommand{\Ctab}[2]{%
+\settowidth{\Width}{#2}%
+\setlength{\Width}{-\Width}%
+\addtolength{\Width}{#1}%
+\setlength{\Width}{0.5\Width}%
+\hspace*{\Width}#2\hspace{\Width}\mbox{}%
+%
+}%
+\newcommand{\vbackward}[1]{%
+\settoheight{\Height}{#1}%
+\vspace*{-\Height}%
+%
+}%
+\newcommand{\vforward}[1]{%
+\settoheight{\Height}{#1}%
+\vspace*{\Height}%
+%
+}%
+\newcommand{\usepack}{%
+\usepackage{amsmath,amssymb}%
+\usepackage{graphicx}%
+\usepackage{color}%
+%
+}%
+\newcommand{\setmargin}[4]{%
+\setlength{\oddsidemargin}{-25.4mm}%
+\addtolength{\oddsidemargin}{#1 mm}%
+\setlength{\textwidth}{\paperwidth}%
+\addtolength{\textwidth}{-#1 mm}%
+\addtolength{\textwidth}{-#2 mm}%
+\setlength{\headheight}{0mm}%
+\setlength{\headsep}{0mm}%
+\setlength{\topmargin}{-25.4mm}%
+\addtolength{\topmargin}{#3 mm}%
+\setlength{\textheight}{\paperheight}%
+\addtolength{\textheight}{-#3 mm}%
+\addtolength{\textheight}{-#4 mm}%
+%
+}%
+\newcommand{\setmargintrue}[4]{
+\setlength{\oddsidemargin}{-25.4truemm}%
+\addtolength{\oddsidemargin}{#1 truemm}%
+\setlength{\textwidth}{\paperwidth}%
+\addtolength{\textwidth}{-#1 truemm}%
+\addtolength{\textwidth}{-#2 truemm}%
+\setlength{\topmargin}{-25.4truemm}% 1in=25.4mm
+\addtolength{\topmargin}{#3 truemm}%
+\addtolength{\topmargin}{-\headheight}%
+\addtolength{\topmargin}{-\headsep}%
+\addtolength{\topmargin}{-\topskip}%
+\setlength{\textheight}{\paperheight}%
+\addtolength{\textheight}{-#3 truemm}%
+\addtolength{\textheight}{-#4 truemm}%
+\addtolength{\textheight}{\topskip}%
+%
+}%
+\newcommand{\ketcalcwidth}[2][0]{%
+\settowidth{\Depth}{#2}%
+\setlength{\Width}{0\unitlength}%
+\setcounter{ketpicctra}{0}%
+\setcounter{ketpicctra}{1}%
+\addtocounter{ketpicctra}{-1}%
+%
+{%
+\loop%
+\addtocounter{ketpicctra}{1}%
+\addtolength{\Width}{\unitlength}%
+%
+{%
+\ifdim %
+\Width>\Depth %
+\addtocounter{ketpicctra}{6000}%
+%
+\fi%
+}%
+%
+\ifnum\theketpicctra<5000%
+\repeat%
+}%
+\addtocounter{ketpicctra}{-6000}%
+%
+{%
+\ifnum %
+#1>0 %
+\theketpicctra%
+%
+\fi%
+}%
+%
+}%
+\newcommand{\ketcalcheight}[2][0]{%
+\settoheight{\Depth}{#2}%
+\setlength{\Height}{0\unitlength}%
+\setcounter{ketpicctra}{0}%
+\setcounter{ketpicctra}{1}%
+\addtocounter{ketpicctra}{-1}%
+%
+{%
+\loop%
+\addtocounter{ketpicctra}{1}%
+\addtolength{\Height}{\unitlength}%
+%
+{%
+\ifdim %
+\Height>\Depth %
+\addtocounter{ketpicctra}{6000}%
+%
+\fi%
+}%
+%
+\ifnum\theketpicctra<5000%
+\repeat%
+}%
+\addtocounter{ketpicctra}{-6000}%
+%
+{%
+\ifnum %
+#1>0 %
+\theketpicctra%
+%
+\fi%
+}%
+%
+}%
+\newcommand{\ketcalcdepth}[2][0]{%
+\settodepth{\Width}{#2}%
+\setlength{\Depth}{0\unitlength}%
+\setcounter{ketpicctra}{0}%
+\setcounter{ketpicctra}{1}%
+\addtocounter{ketpicctra}{-1}%
+%
+{%
+\loop%
+\addtocounter{ketpicctra}{1}%
+\addtolength{\Depth}{\unitlength}%
+%
+{%
+\ifdim %
+\Depth>\Width %
+\addtocounter{ketpicctra}{5000}%
+%
+\fi%
+}%
+%
+\ifnum\theketpicctra<5000%
+\repeat%
+}%
+\addtocounter{ketpicctra}{-5000}%
+%
+{%
+\ifnum %
+#1>0 %
+\theketpicctra%
+%
+\fi%
+}%
+%
+}%
+\newcommand{\ketcalcwh}[1]{%
+{\unitlength=0.1mm%
+\ketcalcwidth{#1}%
+\setcounter{ketpicctrb}{\value{ketpicctra}}%
+\divide\value{ketpicctrb} by 10%
+\addtocounter{ketpicctrb}{0}%
+\{\theketpicctrb.%
+\multiply\value{ketpicctrb} by 10%
+\addtocounter{ketpicctrb}{0}%
+\addtocounter{ketpicctra}{-\value{ketpicctrb}}%
+\theketpicctra\}\{%
+\ketcalcheight{#1}%
+\setcounter{ketpicctrb}{\value{ketpicctra}}%
+\ketcalcdepth{#1}%
+\addtocounter{ketpicctra}{\value{ketpicctrb}}%
+\setcounter{ketpicctrb}{\value{ketpicctra}}%
+\divide\value{ketpicctrb} by 10%
+\addtocounter{ketpicctrb}{0}%
+\theketpicctrb.%
+\multiply\value{ketpicctrb} by 10%
+\addtocounter{ketpicctrb}{0}%
+\addtocounter{ketpicctra}{-\value{ketpicctrb}}%
+\theketpicctra\}%
+%
+}%
+%
+}%
+\newcommand{\dangerbendmark}[1][1]{%
+\def\tmpcontents{%
+{\unitlength=0.911mm%
+\begin{picture}%
+( 3.85104, 4.34364)( 3.18983, 4.86836)%
+\linethickness{0.008in}%
+%
+\polygon*(6.38428,5.56800)(5.81904,5.70600)(5.36381,5.80921)(5.00440,5.88297)(4.72661,5.93266)%
+(4.51623,5.96364)(4.35907,5.98127)(4.24093,5.99092)(4.14761,5.99794)(4.06496,6.00771)%
+(3.98898,6.02518)(3.93831,6.05448)(3.93468,6.09958)(3.99978,6.16449)(4.15166,6.25226)%
+(4.38123,6.35904)(4.66723,6.47789)(4.98836,6.60185)(5.32339,6.72405)(5.65390,6.84014)%
+(5.96513,6.94907)(6.24257,7.05003)(6.47172,7.14220)(6.64276,7.22661)(6.76463,7.31164)%
+(6.85098,7.40753)(6.91544,7.52450)(6.97077,7.67186)(7.01627,7.84507)(7.04088,8.02894)%
+(7.03329,8.20802)(6.98222,8.36687)(6.88214,8.49624)(6.74033,8.60073)(6.56582,8.68676)%
+(6.36764,8.76079)(6.15404,8.82871)(5.92745,8.89231)(5.68774,8.95154)(5.43473,9.00634)%
+(5.16827,9.05667)(4.88820,9.10245)(4.59435,9.14364)(4.28655,9.18018)(3.96466,9.21200)%
+(3.94280,9.03709)(3.92093,8.86218)(3.89907,8.68727)(3.87720,8.51236)(4.48711,8.36772)%
+(4.97210,8.26299)(5.34677,8.19129)(5.62571,8.14578)(5.82354,8.11957)(5.95483,8.10581)%
+(6.03419,8.09764)(6.07621,8.08818)(6.09549,8.07060)(6.10389,8.04155)(6.10727,8.00555)%
+(6.11068,7.96817)(6.11914,7.93497)(6.13500,7.91026)(6.14070,7.88899)(6.10976,7.86195)%
+(6.01565,7.81987)(5.83248,7.75368)(5.55828,7.66096)(5.22221,7.54790)(4.85551,7.42131)%
+(4.48940,7.28796)(4.15131,7.15361)(3.85341,7.01988)(3.60406,6.88734)(3.41163,6.75659)%
+(3.28362,6.62808)(3.21473,6.50035)(3.18983,6.37048)(3.19352,6.23551)(3.21044,6.09250)%
+(3.23419,5.94135)(3.27834,5.78836)(3.35914,5.64069)(3.49285,5.50548)(3.69311,5.38901)%
+(3.95396,5.29113)(4.26069,5.20877)(4.59856,5.13885)(4.95280,5.07831)(5.30867,5.02406)%
+(5.65141,4.97304)(5.96628,4.92216)(6.23852,4.86836)(6.27496,5.02870)(6.31140,5.18904)%
+(6.34784,5.34938)(6.38428,5.50972)(6.38428,5.56800)\linethickness{0.008in}%
+\polyline(6.38428,5.56800)(5.81904,5.70600)(5.36381,5.80921)(5.00440,5.88297)(4.72661,5.93266)%
+(4.51623,5.96364)(4.35907,5.98127)(4.24093,5.99092)(4.14761,5.99794)(4.06496,6.00771)%
+(3.98898,6.02518)(3.93831,6.05448)(3.93468,6.09958)(3.99978,6.16449)(4.15166,6.25226)%
+(4.38123,6.35904)(4.66723,6.47789)(4.98836,6.60185)(5.32339,6.72405)(5.65390,6.84014)%
+(5.96513,6.94907)(6.24257,7.05003)(6.47172,7.14220)(6.64276,7.22661)(6.76463,7.31164)%
+(6.85098,7.40753)(6.91544,7.52450)(6.97077,7.67186)(7.01627,7.84507)(7.04088,8.02894)%
+(7.03329,8.20802)(6.98222,8.36687)(6.88214,8.49624)(6.74033,8.60073)(6.56582,8.68676)%
+(6.36764,8.76079)(6.15404,8.82871)(5.92745,8.89231)(5.68774,8.95154)(5.43473,9.00634)%
+(5.16827,9.05667)(4.88820,9.10245)(4.59435,9.14364)(4.28655,9.18018)(3.96466,9.21200)%
+\polyline(3.96466,9.21200)(3.94280,9.03709)(3.92093,8.86218)(3.89907,8.68727)(3.87720,8.51236)%
+\polyline(3.87720,8.51236)(4.48711,8.36772)(4.97210,8.26299)(5.34677,8.19129)(5.62571,8.14578)%
+(5.82354,8.11957)(5.95483,8.10581)(6.03419,8.09764)(6.07621,8.08818)(6.09549,8.07060)%
+(6.10389,8.04155)(6.10727,8.00555)(6.11068,7.96817)(6.11914,7.93497)(6.13500,7.91026)%
+(6.14070,7.88899)(6.10976,7.86195)(6.01565,7.81987)(5.83248,7.75368)(5.55828,7.66096)%
+(5.22221,7.54790)(4.85551,7.42131)(4.48940,7.28796)(4.15131,7.15361)(3.85341,7.01988)%
+(3.60406,6.88734)(3.41163,6.75659)(3.28362,6.62808)(3.21473,6.50035)(3.18983,6.37048)%
+(3.19352,6.23551)(3.21044,6.09250)(3.23419,5.94135)(3.27834,5.78836)(3.35914,5.64069)%
+(3.49285,5.50548)(3.69311,5.38901)(3.95396,5.29113)(4.26069,5.20877)(4.59856,5.13885)%
+(4.95280,5.07831)(5.30867,5.02406)(5.65141,4.97304)(5.96628,4.92216)(6.23852,4.86836)%
+\polyline(6.23852,4.86836)(6.27496,5.02870)(6.31140,5.18904)(6.34784,5.34938)(6.38428,5.50972)%
+%
+\linethickness{0.008in}%
+\end{picture}}%%
+}%
+\scalebox{#1}{\tmpcontents}%
+%
+}%
+\newcommand{\cautionmark}[1][1]{%
+\scalebox{#1}{%
+{\unitlength=1mm%
+\begin{picture}%
+( 4.60000, 3.98372)( -2.30000, 0.00000)%
+\linethickness{0.008in}%
+%
+\linethickness{0.012 in}%
+\polyline(-2.30000,0.00000)(2.30000,0.00000)(0.00000,3.98372)(-2.30000,0.00000)%
+%
+\linethickness{0.008in}%
+\linethickness{0.002in}%
+\polyline(0.30000,0.55000)(0.28532,0.64271)(0.24271,0.72634)(0.17634,0.79271)(0.09271,0.83532)%
+(0.00000,0.85000)(-0.09271,0.83532)(-0.17634,0.79271)(-0.24271,0.72634)(-0.28532,0.64271)%
+(-0.30000,0.55000)(-0.28532,0.45729)(-0.24271,0.37366)(-0.17634,0.30729)(-0.09271,0.26468)%
+(-0.00000,0.25000)(0.09271,0.26468)(0.17634,0.30729)(0.24271,0.37366)(0.28532,0.45729)%
+(0.30000,0.55000)%
+%
+\polyline(0.00000,1.20000)(0.09619,1.23889)(0.18421,1.33825)(0.25763,1.47869)(0.31127,1.64158)%
+(0.34897,1.81375)(0.37862,1.98450)(0.40754,2.14344)(0.43405,2.28492)(0.44959,2.40694)%
+(0.44551,2.50766)(0.41740,2.58913)(0.36636,2.65840)(0.29386,2.72283)(0.20281,2.78402)%
+(0.09933,2.83074)(-0.01000,2.85000)(-0.11855,2.83292)(-0.21932,2.78698)(-0.30522,2.72371)%
+(-0.36996,2.65337)(-0.41290,2.57639)(-0.43593,2.48886)(-0.44109,2.38691)(-0.43200,2.26815)%
+(-0.41354,2.13130)(-0.39047,1.97528)(-0.36270,1.80472)(-0.32377,1.63171)(-0.26686,1.46885)%
+(-0.18930,1.33045)(-0.09771,1.23462)(0.00000,1.20000)%
+%
+\linethickness{0.008in}%
+\polygon*(0.30000,0.55000)(0.28532,0.64271)(0.24271,0.72634)(0.17634,0.79271)(0.09271,0.83532)%
+(0.00000,0.85000)(-0.09271,0.83532)(-0.17634,0.79271)(-0.24271,0.72634)(-0.28532,0.64271)%
+(-0.30000,0.55000)(-0.28532,0.45729)(-0.24271,0.37366)(-0.17634,0.30729)(-0.09271,0.26468)%
+(-0.00000,0.25000)(0.09271,0.26468)(0.17634,0.30729)(0.24271,0.37366)(0.28532,0.45729)%
+(0.30000,0.55000)\polygon*(0.00000,1.20000)(0.09619,1.23889)(0.18421,1.33825)(0.25763,1.47869)(0.31127,1.64158)%
+(0.34897,1.81375)(0.37862,1.98450)(0.40754,2.14344)(0.43405,2.28492)(0.44959,2.40694)%
+(0.44551,2.50766)(0.41740,2.58913)(0.36636,2.65840)(0.29386,2.72283)(0.20281,2.78402)%
+(0.09933,2.83074)(-0.01000,2.85000)(-0.11855,2.83292)(-0.21932,2.78698)(-0.30522,2.72371)%
+(-0.36996,2.65337)(-0.41290,2.57639)(-0.43593,2.48886)(-0.44109,2.38691)(-0.43200,2.26815)%
+(-0.41354,2.13130)(-0.39047,1.97528)(-0.36270,1.80472)(-0.32377,1.63171)(-0.26686,1.46885)%
+(-0.18930,1.33045)(-0.09771,1.23462)(0.00000,1.20000)\end{picture}}%%
+}%
+%
+}%
+\newcommand{\circlemark}[2][8]{%
+\scalebox{#2}{%
+{\unitlength=1mm%
+\begin{picture}%
+( 4.00000, 4.00000)( -2.00000, -2.00000)%
+\linethickness{0.008in}%
+%
+\linethickness{#1 in}%
+\polyline(2.00000,0.00000)(1.98423,0.25067)(1.93717,0.49738)(1.85955,0.73625)(1.75261,0.96351)%
+(1.61803,1.17557)(1.45794,1.36909)(1.27485,1.54103)(1.07165,1.68866)(0.85156,1.80965)%
+(0.61803,1.90211)(0.37476,1.96457)(0.12558,1.99605)(-0.12558,1.99605)(-0.37476,1.96457)%
+(-0.61803,1.90211)(-0.85156,1.80965)(-1.07165,1.68866)(-1.27485,1.54103)(-1.45794,1.36909)%
+(-1.61803,1.17557)(-1.75261,0.96351)(-1.85955,0.73625)(-1.93717,0.49738)(-1.98423,0.25067)%
+(-2.00000,-0.00000)(-1.98423,-0.25067)(-1.93717,-0.49738)(-1.85955,-0.73625)(-1.75261,-0.96351)%
+(-1.61803,-1.17557)(-1.45794,-1.36909)(-1.27485,-1.54103)(-1.07165,-1.68866)(-0.85156,-1.80965)%
+(-0.61803,-1.90211)(-0.37476,-1.96457)(-0.12558,-1.99605)(0.12558,-1.99605)(0.37476,-1.96457)%
+(0.61803,-1.90211)(0.85156,-1.80965)(1.07165,-1.68866)(1.27485,-1.54103)(1.45794,-1.36909)%
+(1.61803,-1.17557)(1.75261,-0.96351)(1.85955,-0.73625)(1.93717,-0.49738)(1.98423,-0.25067)%
+(2.00000,0.00000)%
+%
+\linethickness{0.008in}%
+\end{picture}}%%
+}%
+%
+}%
+\newcommand{\circleshade}[3][8]{%
+\scalebox{#2}{%
+{\unitlength=1mm%
+\begin{picture}%
+( 4.00000, 4.00000)( -2.00000, -2.00000)%
+\linethickness{0.008in}%
+%
+\linethickness{#1 in}%
+{\color[cmyk]{,,,}%
+\polygon*(2.00000,0.00000)(1.98423,0.25067)(1.93717,0.49738)(1.85955,0.73625)(1.75261,0.96351)%
+(1.61803,1.17557)(1.45794,1.36909)(1.27485,1.54103)(1.07165,1.68866)(0.85156,1.80965)%
+(0.61803,1.90211)(0.37476,1.96457)(0.12558,1.99605)(-0.12558,1.99605)(-0.37476,1.96457)%
+(-0.61803,1.90211)(-0.85156,1.80965)(-1.07165,1.68866)(-1.27485,1.54103)(-1.45794,1.36909)%
+(-1.61803,1.17557)(-1.75261,0.96351)(-1.85955,0.73625)(-1.93717,0.49738)(-1.98423,0.25067)%
+(-2.00000,-0.00000)(-1.98423,-0.25067)(-1.93717,-0.49738)(-1.85955,-0.73625)(-1.75261,-0.96351)%
+(-1.61803,-1.17557)(-1.45794,-1.36909)(-1.27485,-1.54103)(-1.07165,-1.68866)(-0.85156,-1.80965)%
+(-0.61803,-1.90211)(-0.37476,-1.96457)(-0.12558,-1.99605)(0.12558,-1.99605)(0.37476,-1.96457)%
+(0.61803,-1.90211)(0.85156,-1.80965)(1.07165,-1.68866)(1.27485,-1.54103)(1.45794,-1.36909)%
+(1.61803,-1.17557)(1.75261,-0.96351)(1.85955,-0.73625)(1.93717,-0.49738)(1.98423,-0.25067)%
+(2.00000,0.00000)
+}%
+\polyline(2.00000,0.00000)(1.98423,0.25067)(1.93717,0.49738)(1.85955,0.73625)(1.75261,0.96351)%
+(1.61803,1.17557)(1.45794,1.36909)(1.27485,1.54103)(1.07165,1.68866)(0.85156,1.80965)%
+(0.61803,1.90211)(0.37476,1.96457)(0.12558,1.99605)(-0.12558,1.99605)(-0.37476,1.96457)%
+(-0.61803,1.90211)(-0.85156,1.80965)(-1.07165,1.68866)(-1.27485,1.54103)(-1.45794,1.36909)%
+(-1.61803,1.17557)(-1.75261,0.96351)(-1.85955,0.73625)(-1.93717,0.49738)(-1.98423,0.25067)%
+(-2.00000,-0.00000)(-1.98423,-0.25067)(-1.93717,-0.49738)(-1.85955,-0.73625)(-1.75261,-0.96351)%
+(-1.61803,-1.17557)(-1.45794,-1.36909)(-1.27485,-1.54103)(-1.07165,-1.68866)(-0.85156,-1.80965)%
+(-0.61803,-1.90211)(-0.37476,-1.96457)(-0.12558,-1.99605)(0.12558,-1.99605)(0.37476,-1.96457)%
+(0.61803,-1.90211)(0.85156,-1.80965)(1.07165,-1.68866)(1.27485,-1.54103)(1.45794,-1.36909)%
+(1.61803,-1.17557)(1.75261,-0.96351)(1.85955,-0.73625)(1.93717,-0.49738)(1.98423,-0.25067)%
+(2.00000,0.00000)%
+%
+\linethickness{0.008in}%
+\end{picture}}%%
+}%
+%
+}%
+%%% bendingarrow2e.sty 2016-12-9 7:43
+%%% bendingarrow2e.sce 2016-12-9 7:42
+\newcommand{\NEarrow}[1][1]{%
+\scalebox{#1}{\raisebox{-2.5pt}{%
+{\unitlength=1pt%
+\begin{picture}%
+( 10.00000, 10.00000)( 0.00000, 0.00000)%
+\linethickness{0.008in}%
+%
+\polyline(2.00000,2.00000)(7.00000,7.00000)%
+%
+\linethickness{0.008in}%
+\polygon*(6.54625,4.91062)(8.00000,8.00000)(4.91062,6.54625)(6.18275,6.18275)(6.54625,4.91062)%
+\linethickness{0.001in}%
+\polyline(6.54625,4.91062)(8.00000,8.00000)(4.91062,6.54625)(6.18275,6.18275)(6.54625,4.91062)%
+(8.00000,8.00000)%
+%
+\linethickness{0.008in}%
+\end{picture}}%%
+}%
+%
+}%
+%
+}%
+\newcommand{\SEarrow}[1][1]{%
+\scalebox{#1}{\raisebox{-2.5pt}{%
+{\unitlength=1pt%
+\begin{picture}%
+( 10.00000, 10.00000)( 0.00000, 0.00000)%
+\linethickness{0.008in}%
+%
+\polyline(2.00000,8.00000)(7.00000,3.00000)%
+%
+\linethickness{0.008in}%
+\polygon*(4.91062,3.45375)(8.00000,2.00000)(6.54625,5.08938)(6.18275,3.81725)(4.91062,3.45375)%
+\linethickness{0.001in}%
+\polyline(4.91062,3.45375)(8.00000,2.00000)(6.54625,5.08938)(6.18275,3.81725)(4.91062,3.45375)%
+(8.00000,2.00000)%
+%
+\linethickness{0.008in}%
+\end{picture}}%%
+}%
+%
+}%
+%
+}%
+\newcommand{\NWarrow}[1][1]{%
+\scalebox{#1}{\raisebox{-2.5pt}{%
+{\unitlength=1pt%
+\begin{picture}%
+( 10.00000, 10.00000)( 0.00000, 0.00000)%
+\linethickness{0.008in}%
+%
+\polyline(8.00000,2.00000)(3.00000,7.00000)%
+%
+\linethickness{0.008in}%
+\polygon*(5.08938,6.54625)(2.00000,8.00000)(3.45375,4.91062)(3.81725,6.18275)(5.08938,6.54625)%
+\linethickness{0.001in}%
+\polyline(5.08938,6.54625)(2.00000,8.00000)(3.45375,4.91062)(3.81725,6.18275)(5.08938,6.54625)%
+(2.00000,8.00000)%
+%
+\linethickness{0.008in}%
+\end{picture}}%%
+}%
+%
+}%
+%
+}%
+\newcommand{\SWarrow}[1][1]{%
+\scalebox{#1}{\raisebox{-2.5pt}{%
+{\unitlength=1pt%
+\begin{picture}%
+( 10.00000, 10.00000)( 0.00000, 0.00000)%
+\linethickness{0.008in}%
+%
+\polyline(8.00000,8.00000)(3.00000,3.00000)%
+%
+\linethickness{0.008in}%
+\polygon*(3.45375,5.08938)(2.00000,2.00000)(5.08938,3.45375)(3.81725,3.81725)(3.45375,5.08938)%
+\linethickness{0.001in}%
+\polyline(3.45375,5.08938)(2.00000,2.00000)(5.08938,3.45375)(3.81725,3.81725)(3.45375,5.08938)%
+(2.00000,2.00000)%
+%
+\linethickness{0.008in}%
+\end{picture}}%%
+}%
+%
+}%
+%
+}%
+\newcommand{\NELarrow}[1][1]{%
+\scalebox{#1}{\raisebox{-2.5pt}{%
+{\unitlength=1pt%
+\begin{picture}%
+( 10.00000, 10.00000)( 0.00000, 0.00000)%
+\linethickness{0.008in}%
+%
+\polyline(2.00000,2.00000)(2.41092,2.01409)(2.81990,2.05628)(3.22504,2.12639)(3.62443,2.22408)%
+(4.01618,2.34889)(4.39847,2.50024)(4.76950,2.67742)(5.12752,2.87959)(5.47085,3.10580)%
+(5.79789,3.35500)(6.10709,3.62601)(6.39700,3.91756)(6.66627,4.22827)(6.91363,4.55671)%
+(7.13791,4.90131)(7.33806,5.26046)(7.51315,5.63247)(7.66235,6.01561)(7.78496,6.40806)%
+(7.88040,6.80798)%
+%
+\linethickness{0.008in}%
+\polygon*(8.26407,4.59590)(8.00000,8.00000)(6.03361,5.20877)(7.31907,5.52187)(8.26407,4.59590)%
+\linethickness{0.001in}%
+\polyline(8.26407,4.59590)(8.00000,8.00000)(6.03361,5.20877)(7.31907,5.52187)(8.26407,4.59590)%
+(8.00000,8.00000)%
+%
+\linethickness{0.008in}%
+\end{picture}}%%
+}%
+%
+}%
+%
+}%
+\newcommand{\NERarrow}[1][1]{%
+\scalebox{#1}{\raisebox{-2.5pt}{%
+{\unitlength=1pt%
+\begin{picture}%
+( 10.00000, 10.00000)( 0.00000, 0.00000)%
+\linethickness{0.008in}%
+%
+\polyline(6.80798,7.88040)(6.40806,7.78496)(6.01561,7.66235)(5.63247,7.51315)(5.26046,7.33806)%
+(4.90131,7.13791)(4.55671,6.91363)(4.22827,6.66627)(3.91756,6.39700)(3.62601,6.10709)%
+(3.35500,5.79789)(3.10580,5.47085)(2.87959,5.12752)(2.67742,4.76950)(2.50024,4.39847)%
+(2.34889,4.01618)(2.22408,3.62443)(2.12639,3.22504)(2.05628,2.81990)(2.01409,2.41092)%
+(2.00000,2.00000)%
+%
+\linethickness{0.008in}%
+\polygon*(5.19160,6.05822)(8.00000,8.00000)(4.59835,8.29398)(5.51598,7.34088)(5.19160,6.05822)%
+\linethickness{0.001in}%
+\polyline(5.19160,6.05822)(8.00000,8.00000)(4.59835,8.29398)(5.51598,7.34088)(5.19160,6.05822)%
+(8.00000,8.00000)%
+%
+\linethickness{0.008in}%
+\end{picture}}%%
+}%
+%
+}%
+%
+}%
+\newcommand{\SELarrow}[1][1]{%
+\scalebox{#1}{\raisebox{-2.5pt}{%
+{\unitlength=1pt%
+\begin{picture}%
+( 10.00000, 10.00000)( 0.00000, 0.00000)%
+\linethickness{0.008in}%
+%
+\polyline(2.00000,8.00000)(2.01409,7.58908)(2.05628,7.18010)(2.12639,6.77496)(2.22408,6.37557)%
+(2.34889,5.98382)(2.50024,5.60153)(2.67742,5.23050)(2.87959,4.87248)(3.10580,4.52915)%
+(3.35500,4.20211)(3.62601,3.89291)(3.91756,3.60300)(4.22827,3.33373)(4.55671,3.08637)%
+(4.90131,2.86209)(5.26046,2.66194)(5.63247,2.48685)(6.01561,2.33765)(6.40806,2.21504)%
+(6.80798,2.11960)%
+%
+\linethickness{0.008in}%
+\polygon*(4.59835,1.70602)(8.00000,2.00000)(5.19160,3.94178)(5.51598,2.65912)(4.59835,1.70602)%
+\linethickness{0.001in}%
+\polyline(4.59835,1.70602)(8.00000,2.00000)(5.19160,3.94178)(5.51598,2.65912)(4.59835,1.70602)%
+(8.00000,2.00000)%
+%
+\linethickness{0.008in}%
+\end{picture}}%%
+}%
+%
+}%
+%
+}%
+\newcommand{\SERarrow}[1][1]{%
+\scalebox{#1}{\raisebox{-2.5pt}{%
+{\unitlength=1pt%
+\begin{picture}%
+( 10.00000, 10.00000)( 0.00000, 0.00000)%
+\linethickness{0.008in}%
+%
+\polyline(7.88040,3.19202)(7.78496,3.59194)(7.66235,3.98439)(7.51315,4.36753)(7.33806,4.73954)%
+(7.13791,5.09869)(6.91363,5.44329)(6.66627,5.77173)(6.39700,6.08244)(6.10709,6.37399)%
+(5.79789,6.64500)(5.47085,6.89420)(5.12752,7.12041)(4.76950,7.32258)(4.39847,7.49976)%
+(4.01618,7.65111)(3.62443,7.77592)(3.22504,7.87361)(2.81990,7.94372)(2.41092,7.98591)%
+(2.00000,8.00000)%
+%
+\linethickness{0.008in}%
+\polygon*(6.03361,4.79123)(8.00000,2.00000)(8.26407,5.40410)(7.31907,4.47813)(6.03361,4.79123)%
+\linethickness{0.001in}%
+\polyline(6.03361,4.79123)(8.00000,2.00000)(8.26407,5.40410)(7.31907,4.47813)(6.03361,4.79123)%
+(8.00000,2.00000)%
+%
+\linethickness{0.008in}%
+\end{picture}}%%
+}%
+%
+}%
+%
+}%
+\newcommand{\SWRarrow}[1][1]{%
+\scalebox{#1}{\raisebox{-2.5pt}{%
+{\unitlength=1pt%
+\begin{picture}%
+( 10.00000, 10.00000)( 0.00000, 0.00000)%
+\linethickness{0.008in}%
+%
+\polyline(3.19202,2.11960)(3.59194,2.21504)(3.98439,2.33765)(4.36753,2.48685)(4.73954,2.66194)%
+(5.09869,2.86209)(5.44329,3.08637)(5.77173,3.33373)(6.08244,3.60300)(6.37399,3.89291)%
+(6.64500,4.20211)(6.89420,4.52915)(7.12041,4.87248)(7.32258,5.23050)(7.49976,5.60153)%
+(7.65111,5.98382)(7.77592,6.37557)(7.87361,6.77496)(7.94372,7.18010)(7.98591,7.58908)%
+(8.00000,8.00000)%
+%
+\linethickness{0.008in}%
+\polygon*(4.80840,3.94178)(2.00000,2.00000)(5.40165,1.70602)(4.48402,2.65912)(4.80840,3.94178)%
+\linethickness{0.001in}%
+\polyline(4.80840,3.94178)(2.00000,2.00000)(5.40165,1.70602)(4.48402,2.65912)(4.80840,3.94178)%
+(2.00000,2.00000)%
+%
+\linethickness{0.008in}%
+\end{picture}}%%
+}%
+%
+}%
+%
+}%
+\newcommand{\SWLarrow}[1][1]{%
+\scalebox{#1}{\raisebox{-2.5pt}{%
+{\unitlength=1pt%
+\begin{picture}%
+( 10.00000, 10.00000)( 0.00000, 0.00000)%
+\linethickness{0.008in}%
+%
+\polyline(8.00000,8.00000)(7.58908,7.98591)(7.18010,7.94372)(6.77496,7.87361)(6.37557,7.77592)%
+(5.98382,7.65111)(5.60153,7.49976)(5.23050,7.32258)(4.87248,7.12041)(4.52915,6.89420)%
+(4.20211,6.64500)(3.89291,6.37399)(3.60300,6.08244)(3.33373,5.77173)(3.08637,5.44329)%
+(2.86209,5.09869)(2.66194,4.73954)(2.48685,4.36753)(2.33765,3.98439)(2.21504,3.59194)%
+(2.11960,3.19202)%
+%
+\linethickness{0.008in}%
+\polygon*(1.73593,5.40410)(2.00000,2.00000)(3.96639,4.79123)(2.68093,4.47813)(1.73593,5.40410)%
+\linethickness{0.001in}%
+\polyline(1.73593,5.40410)(2.00000,2.00000)(3.96639,4.79123)(2.68093,4.47813)(1.73593,5.40410)%
+(2.00000,2.00000)%
+%
+\linethickness{0.008in}%
+\end{picture}}%%
+}%
+%
+}%
+%
+}%
+\newcommand{\NWRarrow}[1][1]{%
+\scalebox{#1}{\raisebox{-2.5pt}{%
+{\unitlength=1pt%
+\begin{picture}%
+( 10.00000, 10.00000)( 0.00000, 0.00000)%
+\linethickness{0.008in}%
+%
+\polyline(2.11960,6.80798)(2.21504,6.40806)(2.33765,6.01561)(2.48685,5.63247)(2.66194,5.26046)%
+(2.86209,4.90131)(3.08637,4.55671)(3.33373,4.22827)(3.60300,3.91756)(3.89291,3.62601)%
+(4.20211,3.35500)(4.52915,3.10580)(4.87248,2.87959)(5.23050,2.67742)(5.60153,2.50024)%
+(5.98382,2.34889)(6.37557,2.22408)(6.77496,2.12639)(7.18010,2.05628)(7.58908,2.01409)%
+(8.00000,2.00000)%
+%
+\linethickness{0.008in}%
+\polygon*(3.96639,5.20877)(2.00000,8.00000)(1.73593,4.59590)(2.68093,5.52187)(3.96639,5.20877)%
+\linethickness{0.001in}%
+\polyline(3.96639,5.20877)(2.00000,8.00000)(1.73593,4.59590)(2.68093,5.52187)(3.96639,5.20877)%
+(2.00000,8.00000)%
+%
+\linethickness{0.008in}%
+\end{picture}}%%
+}%
+%
+}%
+%
+}%
+\newcommand{\NWLarrow}[1][1]{%
+\scalebox{#1}{\raisebox{-2.5pt}{%
+{\unitlength=1pt%
+\begin{picture}%
+( 10.00000, 10.00000)( 0.00000, 0.00000)%
+\linethickness{0.008in}%
+%
+\polyline(8.00000,2.00000)(7.98591,2.41092)(7.94372,2.81990)(7.87361,3.22504)(7.77592,3.62443)%
+(7.65111,4.01618)(7.49976,4.39847)(7.32258,4.76950)(7.12041,5.12752)(6.89420,5.47085)%
+(6.64500,5.79789)(6.37399,6.10709)(6.08244,6.39700)(5.77173,6.66627)(5.44329,6.91363)%
+(5.09869,7.13791)(4.73954,7.33806)(4.36753,7.51315)(3.98439,7.66235)(3.59194,7.78496)%
+(3.19202,7.88040)%
+%
+\linethickness{0.008in}%
+\polygon*(5.40165,8.29398)(2.00000,8.00000)(4.80840,6.05822)(4.48402,7.34088)(5.40165,8.29398)%
+\linethickness{0.001in}%
+\polyline(5.40165,8.29398)(2.00000,8.00000)(4.80840,6.05822)(4.48402,7.34088)(5.40165,8.29398)%
+(2.00000,8.00000)%
+%
+\linethickness{0.008in}%
+\end{picture}}%%
+}%
+%
+}%
+%
+}%
diff --git a/graphics/ketcindy/ketcindyfolder/style/ketslide.sty b/graphics/ketcindy/ketcindyfolder/style/ketslide.sty
new file mode 100644
index 0000000000..a6087747c3
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/style/ketslide.sty
@@ -0,0 +1,151 @@
+%Copyright (C) 2014 Setsuo Takato, KETpic developer team
+%*
+%* This program is free software: you can redistribute it and/or modify
+%* it under the terms of the GNU General Public License as published by
+%* the Free Software Foundation; either version 3 of the License, or
+%* (at your option) any later version.
+%*
+%* This program is distributed in the hope that it will be useful,
+%* but WITHOUT ANY WARRANTY; without even the implied warranty of
+%* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+%* GNU General Public License for more details.
+%*
+%* You should have received a copy of the GNU General Public License
+%* along with this program. If not, see <http://www.gnu.org/licenses/>
+%%% ketslide.sty 2017-1-9 11:50
+%%% ketslide170109.sce 2017-1-9 11:50
+% 2017.01.09 ketslide%
+% \documentclass[landscape,10pt]{jarticle}%
+% or \documentclass[landscape,10pt]{article}%
+%\special{papersize=297mm,210mm}%
+\mag=2000%
+\newcommand{\ketmarginJ}{%
+\setmargin{20}{150}{15}{100}%180701
+%
+}%
+\newcommand{\ketmarginE}{%
+\setmargin{20}{135}{15}{100}%180701
+%
+}%
+\newcommand{\ketslideinit}{%
+\definecolor{ketshadowclr}{cmyk}{0,0,0,0.5}%
+\def\ketcletter{black}%
+\def\ketcbox{black}%
+\def\ketdbox{}%
+\def\ketcframe{black}%
+\def\ketcshadow{ketshadowclr}%
+\def\ketdshadow{}%
+\def\ketslidew{130}%
+\def\slidetitlex{6}%
+\def\slidetitlesize{2}%
+\def\mketcletter{black}%
+\def\mketcbox{white}%
+\def\mketdbox{}%
+\def\mketcframe{white}%
+\def\mslidetitlex{62}%
+\def\mslidetitlesize{3}%
+%
+}%
+\newcommand{\newnewslide}[2][7]{%
+\def\slidetitle{{\color{\ketcletter}#2}}%
+{\unitlength=1mm%
+\ketcalcwidth{#2}%
+}%
+%
+{%
+\ifnum %
+\theketpicctra>1 %
+\begin{layer}{\ketslidew}{0}%
+\popframe{\slidetitlex}{#1}%
+{\ketdshadow}{\ketcshadow}%
+{\ketdbox}{\ketcbox}{\ketcframe}%
+{\scalebox{\slidetitlesize}{\slidetitle}}%
+\end{layer}%
+%
+\fi%
+}%
+%
+}%
+\newcommand{\newslide}[2][7]{%
+\newpage%
+\def\slidetitle{{\color{\ketcletter}#2}}%
+{\unitlength=1mm%
+\ketcalcwidth{#2}%
+}%
+%
+{%
+\ifnum %
+\theketpicctra>1 %
+\begin{layer}{\ketslidew}{0}%
+\popframe{\slidetitlex}{#1}%
+{\ketdshadow}{\ketcshadow}%
+{\ketdbox}{\ketcbox}{\ketcframe}%
+{\scalebox{\slidetitlesize}{\slidetitle}}%
+\end{layer}%
+%
+\fi%
+}%
+%
+}%
+\newcommand{\sameslide}[1][7]{%
+\newpage%
+\addtocounter{page}{-1}%
+\ketcalcwidth{\slidetitle}%
+{\unitlength=1mm%
+\ketcalcwidth{\slidetitle}%
+}%
+%
+{%
+\ifnum %
+\theketpicctra>1 %
+\begin{layer}{\ketslidew}{0}%
+\popframe{\slidetitlex}{#1}%
+{\ketdshadow}{\ketcshadow}%
+{\ketdbox}{\ketcbox}{\ketcframe}%
+{\scalebox{\slidetitlesize}{\slidetitle}}%
+\end{layer}%
+%
+\fi%
+}%
+%
+}%
+\newcommand{\mainslide}[2][35]{%
+\newpage%
+\def\slidetitle{{\color{\mketcletter}#2}}%
+{\unitlength=1mm%
+\ketcalcwidth{#2}%
+}%
+%
+{%
+\ifnum %
+\theketpicctra>1 %
+\begin{layer}{\ketslidew}{0}%
+\colorframes{\mslidetitlex}{#1}%
+{\mketdbox}{\mketcbox}{\mketcframe}%
+{\scalebox{\mslidetitlesize}{\slidetitle}}%
+\end{layer}%
+%
+\fi%
+}%
+%
+}%
+\newcommand{\mainsameslide}[1][35]{%
+\newpage%
+\addtocounter{page}{-1}%
+{\unitlength=1mm%
+\ketcalcwidth{\slidetitle}%
+}%
+%
+{%
+\ifnum %
+\theketpicctra>1 %
+\begin{layer}{\ketslidew}{0}%
+\colorframes{\mslidetitlex}{#1}%
+{\mketdbox}{\mketcbox}{\mketcframe}%
+{\scalebox{\mslidetitlesize}{\slidetitle}}%
+\end{layer}%
+%
+\fi%
+}%
+%
+}%
diff --git a/graphics/ketcindy/ketcindyfolder/style/ketslide2.sty b/graphics/ketcindy/ketcindyfolder/style/ketslide2.sty
new file mode 100644
index 0000000000..d6929592e7
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/style/ketslide2.sty
@@ -0,0 +1,151 @@
+%Copyright (C) 2014 Setsuo Takato, KETpic developer team
+%*
+%* This program is free software: you can redistribute it and/or modify
+%* it under the terms of the GNU General Public License as published by
+%* the Free Software Foundation; either version 3 of the License, or
+%* (at your option) any later version.
+%*
+%* This program is distributed in the hope that it will be useful,
+%* but WITHOUT ANY WARRANTY; without even the implied warranty of
+%* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+%* GNU General Public License for more details.
+%*
+%* You should have received a copy of the GNU General Public License
+%* along with this program. If not, see <http://www.gnu.org/licenses/>
+%%% ketslide.sty 2017-1-9 11:50
+%%% ketslide170109.sce 2017-1-9 11:50
+% 2017.01.09 ketslide%
+% \documentclass[landscape,10pt]{jarticle}%
+% or \documentclass[landscape,10pt]{article}%
+%\special{papersize=297mm,210mm}%
+\mag=2000%
+\newcommand{\ketmarginJ}{%
+\setmargin{25}{150}{15}{110}%
+%
+}%
+\newcommand{\ketmarginE}{%
+\setmargin{25}{135}{15}{115}%
+%
+}%
+\newcommand{\ketslideinit}{%
+\definecolor{ketshadowclr}{cmyk}{0,0,0,0.5}%
+\def\ketcletter{black}%
+\def\ketcbox{black}%
+\def\ketdbox{}%
+\def\ketcframe{black}%
+\def\ketcshadow{ketshadowclr}%
+\def\ketdshadow{}%
+\def\ketslidew{130}%
+\def\slidetitlex{6}%
+\def\slidetitlesize{2}%
+\def\mketcletter{black}%
+\def\mketcbox{white}%
+\def\mketdbox{}%
+\def\mketcframe{white}%
+\def\mslidetitlex{62}%
+\def\mslidetitlesize{3}%
+%
+}%
+\newcommand{\newnewslide}[2][7]{%
+\def\slidetitle{{\color{\ketcletter}#2}}%
+{\unitlength=1mm%
+\ketcalcwidth{#2}%
+}%
+%
+{%
+\ifnum %
+\theketpicctra>1 %
+\begin{layer}{\ketslidew}{0}%
+\popframe{\slidetitlex}{#1}%
+{\ketdshadow}{\ketcshadow}%
+{\ketdbox}{\ketcbox}{\ketcframe}%
+{\scalebox{\slidetitlesize}{\slidetitle}}%
+\end{layer}%
+%
+\fi%
+}%
+%
+}%
+\newcommand{\newslide}[2][7]{%
+%\newpage%
+\def\slidetitle{{\color{\ketcletter}#2}}%
+{\unitlength=1mm%
+\ketcalcwidth{#2}%
+}%
+%
+{%
+\ifnum %
+\theketpicctra>1 %
+\begin{layer}{\ketslidew}{0}%
+\popframe{\slidetitlex}{#1}%
+{\ketdshadow}{\ketcshadow}%
+{\ketdbox}{\ketcbox}{\ketcframe}%
+{\scalebox{\slidetitlesize}{\slidetitle}}%
+\end{layer}%
+%
+\fi%
+}%
+%
+}%
+\newcommand{\sameslide}[1][7]{%
+%\newpage%
+\addtocounter{page}{-1}%
+\ketcalcwidth{\slidetitle}%
+{\unitlength=1mm%
+\ketcalcwidth{\slidetitle}%
+}%
+%
+{%
+\ifnum %
+\theketpicctra>1 %
+\begin{layer}{\ketslidew}{0}%
+\popframe{\slidetitlex}{#1}%
+{\ketdshadow}{\ketcshadow}%
+{\ketdbox}{\ketcbox}{\ketcframe}%
+{\scalebox{\slidetitlesize}{\slidetitle}}%
+\end{layer}%
+%
+\fi%
+}%
+%
+}%
+\newcommand{\mainslide}[2][35]{%
+%\newpage%
+\def\slidetitle{{\color{\mketcletter}#2}}%
+{\unitlength=1mm%
+\ketcalcwidth{#2}%
+}%
+%
+{%
+\ifnum %
+\theketpicctra>1 %
+\begin{layer}{\ketslidew}{0}%
+\colorframes{\mslidetitlex}{#1}%
+{\mketdbox}{\mketcbox}{\mketcframe}%
+{\scalebox{\mslidetitlesize}{\slidetitle}}%
+\end{layer}%
+%
+\fi%
+}%
+%
+}%
+\newcommand{\mainsameslide}[1][35]{%
+%\newpage%
+\addtocounter{page}{-1}%
+{\unitlength=1mm%
+\ketcalcwidth{\slidetitle}%
+}%
+%
+{%
+\ifnum %
+\theketpicctra>1 %
+\begin{layer}{\ketslidew}{0}%
+\colorframes{\mslidetitlex}{#1}%
+{\mketdbox}{\mketcbox}{\mketcframe}%
+{\scalebox{\mslidetitlesize}{\slidetitle}}%
+\end{layer}%
+%
+\fi%
+}%
+%
+}%
diff --git a/graphics/ketcindy/ketcindyfolder/work/Scriptkelib.txt b/graphics/ketcindy/ketcindyfolder/work/Scriptkelib.txt
new file mode 100644
index 0000000000..b8fbed3869
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/Scriptkelib.txt
@@ -0,0 +1,4 @@
+use("KetCindyPlugin");
+Dircdy=loaddirectory;
+setdirectory(plugindirectory);
+import("ketcindy.ini");
diff --git a/graphics/ketcindy/ketcindyfolder/work/allbuttons.cdy b/graphics/ketcindy/ketcindyfolder/work/allbuttons.cdy
new file mode 100644
index 0000000000..71627998d8
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/allbuttons.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/ketcindy.conf b/graphics/ketcindy/ketcindyfolder/work/ketcindy.conf
new file mode 100644
index 0000000000..6b5c74511f
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/ketcindy.conf
@@ -0,0 +1,2 @@
+// Re-setting PathT,PathR,Pathpdf,PathM,PathAd,PathV3,PathC,Mackc
+//PathT=PathThead+"pdflatex";
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s01figure/s0101figure.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s01figure/s0101figure.cdy
new file mode 100644
index 0000000000..34416c0119
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s01figure/s0101figure.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s01figure/s0101figurepdf.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s01figure/s0101figurepdf.cdy
new file mode 100644
index 0000000000..f0f502e186
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s01figure/s0101figurepdf.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s01figure/s0102figure2.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s01figure/s0102figure2.cdy
new file mode 100644
index 0000000000..acfca15fed
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s01figure/s0102figure2.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s01figure/s0103polygon.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s01figure/s0103polygon.cdy
new file mode 100644
index 0000000000..8326d29690
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s01figure/s0103polygon.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s01figure/s0104shade.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s01figure/s0104shade.cdy
new file mode 100644
index 0000000000..7d5cded487
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s01figure/s0104shade.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s01figure/s0105vector.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s01figure/s0105vector.cdy
new file mode 100644
index 0000000000..e7ac5ea8f8
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s01figure/s0105vector.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s01figure/s0106bowdotfill.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s01figure/s0106bowdotfill.cdy
new file mode 100644
index 0000000000..e04f43efdf
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s01figure/s0106bowdotfill.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s01figure/s0106bowhatch.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s01figure/s0106bowhatch.cdy
new file mode 100644
index 0000000000..c671fb8362
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s01figure/s0106bowhatch.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s01figure/s0107hyperbolahatch.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s01figure/s0107hyperbolahatch.cdy
new file mode 100644
index 0000000000..1311dd9024
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s01figure/s0107hyperbolahatch.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s01figure/s0108cycloid.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s01figure/s0108cycloid.cdy
new file mode 100644
index 0000000000..0a20515ff8
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s01figure/s0108cycloid.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s01figure/s0109epitrochoid.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s01figure/s0109epitrochoid.cdy
new file mode 100644
index 0000000000..8bcf3f23d0
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s01figure/s0109epitrochoid.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s01figure/s0110hypotrochoid.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s01figure/s0110hypotrochoid.cdy
new file mode 100644
index 0000000000..b9e5ea7cd5
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s01figure/s0110hypotrochoid.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s02graph/s0201basic.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s02graph/s0201basic.cdy
new file mode 100644
index 0000000000..cde716542e
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s02graph/s0201basic.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s02graph/s0202graph1.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s02graph/s0202graph1.cdy
new file mode 100644
index 0000000000..e911d834fa
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s02graph/s0202graph1.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s02graph/s0203graph2.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s02graph/s0203graph2.cdy
new file mode 100644
index 0000000000..d7c4067c4c
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s02graph/s0203graph2.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s02graph/s0204graph3.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s02graph/s0204graph3.cdy
new file mode 100644
index 0000000000..68df43a92b
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s02graph/s0204graph3.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s02graph/s0205coniccurve.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s02graph/s0205coniccurve.cdy
new file mode 100644
index 0000000000..4278b2b8d0
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s02graph/s0205coniccurve.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s02graph/s0206defexp.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s02graph/s0206defexp.cdy
new file mode 100644
index 0000000000..e876808349
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s02graph/s0206defexp.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s02graph/s0207envelope.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s02graph/s0207envelope.cdy
new file mode 100644
index 0000000000..abb4f493fd
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s02graph/s0207envelope.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s02graph/s0208intersecthatch.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s02graph/s0208intersecthatch.cdy
new file mode 100644
index 0000000000..608aa8bebf
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s02graph/s0208intersecthatch.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s02graph/s0209diffeq.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s02graph/s0209diffeq.cdy
new file mode 100644
index 0000000000..12012bcb5f
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s02graph/s0209diffeq.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s02graph/s0210diffeq2.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s02graph/s0210diffeq2.cdy
new file mode 100644
index 0000000000..a1c3742e86
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s02graph/s0210diffeq2.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s02graph/s0212implicit.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s02graph/s0212implicit.cdy
new file mode 100644
index 0000000000..baa7d616ac
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s02graph/s0212implicit.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s02graph/s0213implicithatch.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s02graph/s0213implicithatch.cdy
new file mode 100644
index 0000000000..99c89d7bf9
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s02graph/s0213implicithatch.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s02graph/s0214inputvalue.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s02graph/s0214inputvalue.cdy
new file mode 100644
index 0000000000..3f14ee0499
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s02graph/s0214inputvalue.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s02graph/s0215quacurve.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s02graph/s0215quacurve.cdy
new file mode 100644
index 0000000000..6c73f3ee56
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s02graph/s0215quacurve.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s03table/s0301table.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s03table/s0301table.cdy
new file mode 100644
index 0000000000..858334b9e4
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s03table/s0301table.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s03table/s0302table2.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s03table/s0302table2.cdy
new file mode 100644
index 0000000000..d2db2b56d1
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s03table/s0302table2.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s03table/s0302table2line.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s03table/s0302table2line.cdy
new file mode 100644
index 0000000000..64af43ef94
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s03table/s0302table2line.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s03table/s0303gridpaper.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s03table/s0303gridpaper.cdy
new file mode 100644
index 0000000000..7e7d2c580f
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s03table/s0303gridpaper.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s03table/s0303gridpaper1.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s03table/s0303gridpaper1.cdy
new file mode 100644
index 0000000000..7d48ef5501
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s03table/s0303gridpaper1.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s03table/s0303gridpaperlog.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s03table/s0303gridpaperlog.cdy
new file mode 100644
index 0000000000..69c4125eb2
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s03table/s0303gridpaperlog.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s03table/s0303gridpaperloglog.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s03table/s0303gridpaperloglog.cdy
new file mode 100644
index 0000000000..75198a715c
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s03table/s0303gridpaperloglog.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s03table/s0304graphforincanddec.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s03table/s0304graphforincanddec.cdy
new file mode 100644
index 0000000000..4a32eb4d11
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s03table/s0304graphforincanddec.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s03table/s0304multitables.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s03table/s0304multitables.cdy
new file mode 100644
index 0000000000..03b61b2fa2
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s03table/s0304multitables.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s03table/s0305twotables.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s03table/s0305twotables.cdy
new file mode 100644
index 0000000000..3539bea4db
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s03table/s0305twotables.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s03table/s0306tenkey.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s03table/s0306tenkey.cdy
new file mode 100644
index 0000000000..00e735df69
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s03table/s0306tenkey.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s04bezier/dogwalk.png b/graphics/ketcindy/ketcindyfolder/work/samples/s04bezier/dogwalk.png
new file mode 100644
index 0000000000..4cb91fa046
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s04bezier/dogwalk.png
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s04bezier/heart.png b/graphics/ketcindy/ketcindyfolder/work/samples/s04bezier/heart.png
new file mode 100644
index 0000000000..1aa2d7fde1
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s04bezier/heart.png
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s04bezier/mtfuji.png b/graphics/ketcindy/ketcindyfolder/work/samples/s04bezier/mtfuji.png
new file mode 100644
index 0000000000..4a060da9e1
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s04bezier/mtfuji.png
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s04bezier/s0401bezierbasic.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s04bezier/s0401bezierbasic.cdy
new file mode 100644
index 0000000000..7e57eca083
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s04bezier/s0401bezierbasic.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s04bezier/s0402ospline.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s04bezier/s0402ospline.cdy
new file mode 100644
index 0000000000..7ea5d4bea1
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s04bezier/s0402ospline.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s04bezier/s0403oshimaspline.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s04bezier/s0403oshimaspline.cdy
new file mode 100644
index 0000000000..09f1fa5328
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s04bezier/s0403oshimaspline.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s04bezier/s0403osplinecrspline.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s04bezier/s0403osplinecrspline.cdy
new file mode 100644
index 0000000000..4239f32969
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s04bezier/s0403osplinecrspline.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s04bezier/s0404heart.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s04bezier/s0404heart.cdy
new file mode 100644
index 0000000000..c54c2db0e4
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s04bezier/s0404heart.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s04bezier/s0405dogwalk.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s04bezier/s0405dogwalk.cdy
new file mode 100644
index 0000000000..22ff6f3285
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s04bezier/s0405dogwalk.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s04bezier/s0406mtfuji.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s04bezier/s0406mtfuji.cdy
new file mode 100644
index 0000000000..c4a8a71108
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s04bezier/s0406mtfuji.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s05spacefigure/DownloadPolyhedrons_objE.txt b/graphics/ketcindy/ketcindyfolder/work/samples/s05spacefigure/DownloadPolyhedrons_objE.txt
new file mode 100644
index 0000000000..45e4e21f25
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s05spacefigure/DownloadPolyhedrons_objE.txt
@@ -0,0 +1,9 @@
+1) Data folder of polyhedra "polyhedrons_obj" is downloadable from the next website:
+ http://mitani.cs.tsukuba.ac.jp/polyhedron/
+
+2) Store the folder into someplace, for example, "ketcindy" in the user home.
+
+3) Open a cindy file and write scripts like the followings in the editor.
+ Setdirectory(Dirhead+"polyhedrons_obj"); // Dirhead is "ketcindy" in the user home.
+ poly=Readobj("r02.obj",["size=-3.5"]);
+ Setdirectory(Dirwork);
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s05spacefigure/DownloadPolyhedrons_objJ.txt b/graphics/ketcindy/ketcindyfolder/work/samples/s05spacefigure/DownloadPolyhedrons_objJ.txt
new file mode 100644
index 0000000000..7ae77d1046
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s05spacefigure/DownloadPolyhedrons_objJ.txt
@@ -0,0 +1,10 @@
+1)整面凸多面体のデータフォルダ「polyhedrons_obj」は以下のサイトからダウンロードできます.
+ http://mitani.cs.tsukuba.ac.jp/polyhedron/
+
+2)ダウンロードしたフォルダを適当な場所,例えばユーザフォームのketcindyに保存して下さい.
+
+3)Cindyファイルを開き,次のようなスクリプトを書いて読み込んで下さい.
+
+ Setdirectory(Dirhead+"polyhedrons_obj"); // Dirheadはユーザフォームのketcindy
+ poly=Readobj("r02.obj",["size=-3.5"]);
+ Setdirectory(Dirwork);
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s05spacefigure/s0501basic.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s05spacefigure/s0501basic.cdy
new file mode 100644
index 0000000000..0740de5396
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s05spacefigure/s0501basic.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s05spacefigure/s0501plane.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s05spacefigure/s0501plane.cdy
new file mode 100644
index 0000000000..d95310883e
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s05spacefigure/s0501plane.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s05spacefigure/s0502spacecurve.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s05spacefigure/s0502spacecurve.cdy
new file mode 100644
index 0000000000..e2b4e4c8e4
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s05spacefigure/s0502spacecurve.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s05spacefigure/s0503perp.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s05spacefigure/s0503perp.cdy
new file mode 100644
index 0000000000..c901787203
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s05spacefigure/s0503perp.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s05spacefigure/s0504embed.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s05spacefigure/s0504embed.cdy
new file mode 100644
index 0000000000..ccd43bf4c2
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s05spacefigure/s0504embed.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s05spacefigure/s0505bezier3d.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s05spacefigure/s0505bezier3d.cdy
new file mode 100644
index 0000000000..367609778f
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s05spacefigure/s0505bezier3d.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s05spacefigure/s0506embedhatch.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s05spacefigure/s0506embedhatch.cdy
new file mode 100644
index 0000000000..57ea801e0f
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s05spacefigure/s0506embedhatch.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s05spacefigure/s0507polyhedron.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s05spacefigure/s0507polyhedron.cdy
new file mode 100644
index 0000000000..ae8d089493
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s05spacefigure/s0507polyhedron.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s05spacefigure/s0508concatobj.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s05spacefigure/s0508concatobj.cdy
new file mode 100644
index 0000000000..658f07658f
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s05spacefigure/s0508concatobj.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s05spacefigure/s0509cubiccut.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s05spacefigure/s0509cubiccut.cdy
new file mode 100644
index 0000000000..9430f951c5
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s05spacefigure/s0509cubiccut.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s05spacefigure/s0510cubiccut2.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s05spacefigure/s0510cubiccut2.cdy
new file mode 100644
index 0000000000..1785b134cd
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s05spacefigure/s0510cubiccut2.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s05spacefigure/s0511tetra.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s05spacefigure/s0511tetra.cdy
new file mode 100644
index 0000000000..51b228bb18
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s05spacefigure/s0511tetra.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s05spacefigure/s0521totaldiffskeleton.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s05spacefigure/s0521totaldiffskeleton.cdy
new file mode 100644
index 0000000000..e8ec61e607
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s05spacefigure/s0521totaldiffskeleton.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s05spacefigure/s0522conecutmaxima.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s05spacefigure/s0522conecutmaxima.cdy
new file mode 100644
index 0000000000..de939df752
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s05spacefigure/s0522conecutmaxima.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s06animation/s0601cycloid.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s06animation/s0601cycloid.cdy
new file mode 100644
index 0000000000..3bf9cecd83
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s06animation/s0601cycloid.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s06animation/s0602diffeq.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s06animation/s0602diffeq.cdy
new file mode 100644
index 0000000000..152cce4d6d
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s06animation/s0602diffeq.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s06animation/s0603envelope.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s06animation/s0603envelope.cdy
new file mode 100644
index 0000000000..6b70a77121
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s06animation/s0603envelope.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s06animation/s0604diffeq2.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s06animation/s0604diffeq2.cdy
new file mode 100644
index 0000000000..3d899205a1
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s06animation/s0604diffeq2.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s06animation/s0605cycloid2.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s06animation/s0605cycloid2.cdy
new file mode 100644
index 0000000000..853c236c41
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s06animation/s0605cycloid2.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s06animation/s0606epitrochoid.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s06animation/s0606epitrochoid.cdy
new file mode 100644
index 0000000000..2de0c90fcd
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s06animation/s0606epitrochoid.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s06animation/s0607hypotrochoid.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s06animation/s0607hypotrochoid.cdy
new file mode 100644
index 0000000000..1e20d6dade
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s06animation/s0607hypotrochoid.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s06animation/s0608ellipsefocus.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s06animation/s0608ellipsefocus.cdy
new file mode 100644
index 0000000000..5d75d5096c
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s06animation/s0608ellipsefocus.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s06animation/s0609hyperbolafocus.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s06animation/s0609hyperbolafocus.cdy
new file mode 100644
index 0000000000..db6d484baa
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s06animation/s0609hyperbolafocus.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s06animation/s0610parabolafocus.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s06animation/s0610parabolafocus.cdy
new file mode 100644
index 0000000000..685344d411
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s06animation/s0610parabolafocus.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s06animation/s0611generalangle.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s06animation/s0611generalangle.cdy
new file mode 100644
index 0000000000..0180b8d44a
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s06animation/s0611generalangle.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s07slides/figwall/wallpaper.tex b/graphics/ketcindy/ketcindyfolder/work/samples/s07slides/figwall/wallpaper.tex
new file mode 100644
index 0000000000..5c08113b42
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s07slides/figwall/wallpaper.tex
@@ -0,0 +1,12 @@
+{\color[cmyk]{0.6,0.2,0.8,0}\huge\rm\normalsize
+
+\newpage
+
+\begin{layer}{120}{0}
+\lineseg{0}{2}{125}{0}
+\lineseg{0}{88}{125}{0}
+\putnotese{0}{90}{\ketcindy}
+\putnotesw{115}{90}{Mar. 31 2018}
+\end{layer}
+
+}
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s07slides/howtouseslideE.txt b/graphics/ketcindy/ketcindyfolder/work/samples/s07slides/howtouseslideE.txt
new file mode 100644
index 0000000000..bb94e93aad
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s07slides/howtouseslideE.txt
@@ -0,0 +1,79 @@
+Presentation with ketslide 2018.03.30
+
+0. Flow of making slides.
+
+ 1) Copy ketsample/s07slideのs0701basic.cdy to your work directory and rename it.
+ Ex) s0701basic.cdy , s0701basic.txt
+ Rem) Rename both files.
+ Here, let files sample.cdy and sample.txt.
+ 2) Double-click sample.cdy, edit Settitle.
+ 3) Press Gear mark on the top.
+ 4) Press button "Title" on the screen.
+ 5) Press button "Slide".
+
+1. Editing the .txt file.
+
+ 1) Put // at the last of every lines.
+ Rm) Use |||| for //.
+ http::||||.... //
+ 2) Use :: for separators of each command.
+ 3) Commands
+ title::titleslidename(::wallpaper)//
+ Rm) Put the first line.
+ main::mainttitlename//
+ new::pagetitlename//
+ enumerate//
+ =\begin{enumerate}
+ itemize//
+ =\begin{itemize}
+ layer::{xsize}{ysize}//
+ =\begin{layer}{xsize}{ysize}
+ item::sentence//
+ =\item sentence
+ putnote::dir{xpos}{ypos}::filename(,scale)//
+ =putnotedir{xpos}{ypos}{\input{fig/filename}}
+ end//
+ =\end{itemize,enumerate,layer}
+ Rm) Any other TeX command is available.
+ 4) Use ...// for inserting a blank line.
+ 5) To display a page step by step
+ Put just after new,
+ %repeat=number of steps//
+ Put at the head of each line as
+ %[2,-]::sentence
+ display at all steps from 2
+ %[-,2]::sentence
+ display at all steps until 2
+ %[1..3,5]::sentence
+ display at steps of 1,2,3 and 5
+ Use %thin to display with thin letters.
+ %thin::[2,-]::sentence
+ Rm) the dencity can be changed with Setslidebody.
+ 6) To display all figures in the sub folder in folder "fig"
+ %repeat=//
+ %para=subfig:{0}:s{60}{10}:input(:scale)//
+
+2. Setting commands described in the cdy file.
+ Setslidemain([letterc,boxc,boxd,framec,xpos,size]);
+ Setslidepage([letterc,boxc,boxd,framec,shadowc,shadowd,xpos,size]);
+ Setslidebody(bodycolor,bodystyle,density);
+ Setslidehyper("dvipdfmx",["cl=true,lc=blue,fc=blue",90,70,1]);
+
+3. Making flip animation
+
+ 1) Define Mf(s) the state at s.
+ 2) Add Setpara as
+ Setpara(foldername,funcitonstr,range,options);
+ options=["m/r", "Div=25"];
+ 3) Press button Flip
+ 4) Describe in the .txt file as 1. 6).
+ 5) Press button Slide.
+
+4. Making animation.
+
+ 1) Add in the .cdy file
+ Addpackage(["[dvipdfmx]{animate}"]);
+ 2) Add in the option of Setpara,
+ "Frate=num of frame in the second, "Scale=scale, "OpA=optin of animation"
+ 3) Define mf(s), Press button Anime.
+ 4) Use \input, not layer.
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s07slides/howtouseslideJ.txt b/graphics/ketcindy/ketcindyfolder/work/samples/s07slides/howtouseslideJ.txt
new file mode 100644
index 0000000000..78be82e34b
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s07slides/howtouseslideJ.txt
@@ -0,0 +1,140 @@
+ketslideによるプレゼンテーション  2018.12.25
+
+0.作成の流れ
+
+ 1)ketsample/s07slideの中の2つのファイルを作業ディレクトリにコピーして名称変更
+    例)s0701basic.cdy , s0701basic.txt
+    注)名称変更するときは,cdyとtxtを同名にする.
+   ここでは,ファイル名をsample.cdyとsample.txtとする.
+ 2)sample.cdyをダブルクリックで立ち上げ,1を参考にSettitleの中身を修正する.
+    注)Settitleのオプション(=の右はデフォルト値)
+         ["Title=slide0","Layery=0","Color=blue"]
+ 3)右上の歯車マークを押す.
+ 4)画面上のTitleボタンを押す.
+    タイトルスライドが作成され,画面が表示される.
+    必要なら,Settitleを修正する.
+ 5)Slideボタンを押すと,sample.pdfが作成される.
+
+1.txtファイルの編集
+
+ 1)すべての行の最後につける.
+    注)urlの指定で//を用いるとき,||||とすると//に変換される.
+ 2)各ブロックの引数の区切りは ::
+ 3)コマンド
+    ・タイトル(またはtitle)::読込ファイル名(::壁紙ファイル)//
+       タイトルページを作成(1行目におく)
+      注)壁紙(例えばwallpaperとする)を背景に入れるとき
+        ・例えばwallpaper.texを作成してfigフォルダに入れる.
+          (figにあるサンプルwallpaper.texを参照)
+        ・タイトル(title)::slide0::wallpaper//
+      注)preambleに追加するとき
+         1行目の//を外す.
+         次の行から,::区切りで書き加え,最後に//をおく.
+      注)タイトル画面が不要の場合は,
+         タイトル(またはtitle)::(//をつけてもよい)
+    ・main::段落タイトル名//
+      注)ページ番号を表示するときは,直後に\slidepage[1]//を入れる.
+    ・new(::行下げ)::タイトル((::位置)::読み込みファイル)//
+      例)new::[10]::最初に::{50}{20}::figure//
+      注)読み込みファイルのサイズ変更するとき
+         new::[10]::最初に::{50}{20}::figure,0.8//
+        他も同様
+      注)ページ番号を表示するときは,repeat文(5)の後に\slidepage//を入れる.
+    ・enumerate/
+      enumerate環境の始まり
+    ・itemize//
+      itemize環境の始まり
+    ・layer(::範囲)//
+      layer環境の始まり
+    ・item::文//
+      itemを追加
+    ・putnote::方向と位置::読み込みファイル//
+      layer環境の中に図を入れる
+      例)putonote::se{30}{10}::figure( , 倍率)//(inputのとき)
+          figの中のfigure.texを表示
+      例)putonote::se{30}{10}::include[width=5cm]::figure.pdf//
+          (includegraphicsのとき)
+      注)図はすべてfigに入れる.
+    ・end//
+      enumerate,itemize,layer環境の終わり
+    ・上記以外//
+      そのままTeXに書き出す.
+    ・コマンドをコメントアウトするときは,%%とする.
+
+ 4)空白行を入れたいときは,...// とする.
+
+ 5)newの後,ページを段階的に表示するとき,
+   ・newの次の行に
+     %repeat=(newを含むスライドの枚数),para//
+   ・表示したいページは
+      %[2,-]::本文//
+    のように書く.
+     注)[2,- ]は2ページ以降全部
+       [-, 2]は2ページまで表示
+       [1..3,5 ]は1ページから3ページと5ページ
+   ・repeat=...の後に「,para」を追加するとリンクを作成
+   ・指定以外のページで薄文字にしたいときは %thin[2]::本文
+     注)薄文字の濃さのデフォルトは0.1だが,Setslidebodyで変更可能
+     注)txtファイルに以下を記述すれば,以降の濃さが変わる.
+          \setthin{濃さ}//
+
+ 6)figの中にあるサブフォルダ(例えばsubfig)の図ファイルすべてを順に表示するとき
+   ・newの次の行に
+     %repeat=//
+     %para=subfig:{0}:s{60}{10}:input(:倍率)//
+       => layer{120}{0}, \putnotes{60}{10}{\input...}
+    注)%repeat=,para=...と続けて書いてもよい.
+    注)一時的に無効にするときは,%%とする.
+
+ 7)page番号を表示するとき
+    mainの場合 \slidepage[m]//
+    slideの場合 %repeatの後に \slidepage//
+  注)総ページ数を取得するため,TeXを2度通すことが必要である.
+
+2.スライドの設定
+
+ 1)cdyのfigureに記述する.
+ 2)コマンド
+   ・Setslidemain([letterc,boxc,boxd,framec,xpos,size]);
+     メイン(段落区切り)の設定
+     注)一部をデフォルト値とする場合は [,,]などとする.以下同様
+   ・Setslidepage([letterc,boxc,boxd,framec,shadowc,shadowd,xpos,size]);
+     ページの設定
+   ・Setslidebody(bodycolor,bodystyle,density);
+     全体の文字色と薄文字の濃さ(0-1)の設定
+     bodystyleのデフォルトは "\Large\bf\boldmath"
+   ・Setslidehyper("dvipdfmx",["cl=true,lc=blue,fc=blue",90,70,1]);
+     hyperrefを利用する,
+     注)Setslidehyper();とすると,hyperref.styを読み込み,
+      かつ,上のデフォルト値が与えられる.
+     注)数字は,ページ移動ボタン列について,右端の水平位置,垂直サイズ,倍率
+
+3.パラパラ動画の作成
+
+  (1)mf(s)にパラメータ値sのときの図を記述する.
+  (2)パラパラの設定
+    Setpara(foldername,funcitonstr,range,options,optionsanime);
+     options,optionsanimeのデフォルト値
+       options=["m/r", "Div=25"];
+       optionsanime=["Frate=10","Scale=1","OpA=[loop,controls,buttonsize=3mm]"]];
+    注)optionsanmieはanimation用のオプション
+       OpAに追加するときは,"+"を用いる
+        "OpA=+step" => "OpA=[loop,controls,buttonsize=3mm,step]"
+    注)rangeの記述
+     i) "s=[0,1]" 区間をDivで分割
+     ii) [0.2, 0.6] リストの各値をsに代入
+  (3)ParaFボタンを押すと,foldernameの中にパラパラの図が生成される.
+  (4)txtファイルに,1の6)のように記述する.
+  (5)Slideボタンを押す.
+
+4.animationの作成
+
+   注)PathAdにAdobeReaderのデフォルトのパスが設定されている.
+      println(PathAd)により,パスが確認できる.
+     変更するときは,changesetting.txtにパスを記述する.
+        PathAd="....";
+  (1)Addpackage(["[dvipdfmx]{animate}"]);を追加する.
+  (2)Setparaのオプション
+      "Frate="(1秒間のフレーム数), "Scale="(スケール倍率), "OpA=[loop]"
+  (3)mf(s)を定義して,Animeボタンを押す.
+  (4)読み込み場所に,\inputを使って入れる.(layerは使えない)
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s07slides/s0701basic.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s07slides/s0701basic.cdy
new file mode 100644
index 0000000000..9fce15badb
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s07slides/s0701basic.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s07slides/s0701basic.txt b/graphics/ketcindy/ketcindyfolder/work/samples/s07slides/s0701basic.txt
new file mode 100644
index 0000000000..681b16814c
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s07slides/s0701basic.txt
@@ -0,0 +1,24 @@
+タイトル::slide0::%wallpaper
+
+%%%%%%%%%%%%%%%%
+main::メインスライド1
+\slidepage[m]
+
+%%%%%%%%%%%%%%%%
+new::itemize環境の使い方
+\slidepage
+
+itemize
+item::内容
+item::結論
+end
+
+%%%%%%%%%%%%%%%%
+new::enumerate環境の使い方
+\slidepage
+
+enumerate::[(1)]
+item::番号を変えるには,例えば [(1)]
+item::後は同じ
+end
+
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s07slides/s0701basicE.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s07slides/s0701basicE.cdy
new file mode 100644
index 0000000000..6895d7cc25
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s07slides/s0701basicE.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s07slides/s0701basicE.txt b/graphics/ketcindy/ketcindyfolder/work/samples/s07slides/s0701basicE.txt
new file mode 100644
index 0000000000..d73a6f2908
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s07slides/s0701basicE.txt
@@ -0,0 +1,24 @@
+title::slide0::%wallpaper
+
+%%%%%%%%%%%%%%%%
+main::Main Slide
+\slidepage[m]
+
+%%%%%%%%%%%%%%%%
+new::How to use itemize
+\slidepage
+
+itemize
+item::Contents
+item::Conclusion
+end
+
+%%%%%%%%%%%%%%%%
+new::How to use enumerate
+\slidepage
+
+enumerate::[(1)]
+item::Change the style of items, for example, [(1)].
+item::Do same as usual.
+end
+
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s07slides/s0702graph.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s07slides/s0702graph.cdy
new file mode 100644
index 0000000000..38532a959e
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s07slides/s0702graph.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s07slides/s0702graph.txt b/graphics/ketcindy/ketcindyfolder/work/samples/s07slides/s0702graph.txt
new file mode 100644
index 0000000000..e5c6020bbe
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s07slides/s0702graph.txt
@@ -0,0 +1,28 @@
+%タイトル::slide0::kabegami
+タイトル::slide0
+
+%%%%%%%%%%%%%%%%
+main::メインスライド1
+\slidepage[m]
+
+%%%%%%%%%%%%%%%%
+new::$\bm{\sin x}$のグラフとlayer
+%repeat=2
+\slidepage
+
+%まず,sinecurveの図を作っておく(1)
+
+layer::{100}{0}
+%[1]::putnote::se{10}{15}::sinecurve,0.8
+%[2]::putnote::se{60}{25}::sinecurve,0.8
+end
+
+%%%%%%%%%%%%%%%%
+new::includegrpahicsとlayer
+\slidepage
+
+%まず,diffeq.pdfを作っておく(2)
+
+layer::{100}{0}
+putnote::s{60}{15}::include[bb=0.00 0.00 325.98 141.73,width=100mm]::diffeq.pdf
+end
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s07slides/s0702graphE.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s07slides/s0702graphE.cdy
new file mode 100644
index 0000000000..32a03c471b
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s07slides/s0702graphE.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s07slides/s0702graphE.txt b/graphics/ketcindy/ketcindyfolder/work/samples/s07slides/s0702graphE.txt
new file mode 100644
index 0000000000..e3b313d4f1
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s07slides/s0702graphE.txt
@@ -0,0 +1,23 @@
+title::slide0::%wallpaper
+
+%%%%%%%%%%%%%%%%
+main::Main Slide
+\slidepage[m]
+
+%%%%%%%%%%%%%%%%
+new::input and layer
+%repeat=2
+\slidepage
+
+layer::{100}{0} Change the 2nd {0} to a nonnegative number to change the position.
+%[1]::putnote::se{10}{15}::sine,0.8
+%[2]::putnote::se{60}{25}::sine,0.8
+end
+
+%%%%%%%%%%%%%%%%
+new::includegrpahics and layer
+\slidepage
+
+layer::{100}{0}
+putnote::s{60}{15}::include[bb=0.00 0.00 325.98 141.73,width=100mm]::diffeq.pdf
+end
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s07slides/s0703repeat.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s07slides/s0703repeat.cdy
new file mode 100644
index 0000000000..63c80909cd
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s07slides/s0703repeat.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s07slides/s0703repeat.txt b/graphics/ketcindy/ketcindyfolder/work/samples/s07slides/s0703repeat.txt
new file mode 100644
index 0000000000..786bffc20c
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s07slides/s0703repeat.txt
@@ -0,0 +1,36 @@
+タイトル::slide0::%wallpaper
+
+%%%%%%%%%%%%%%%%
+main::メインスライド1
+\slidepage[m]
+
+%%%%%%%%%%%%%%%%
+new::itemize環境の使い方
+%repeat=2,para
+\slidepage
+
+itemize
+item::内容
+%[2,-]::item::結論
+end
+
+%%%%%%%%%%%%%%%%
+new::enumerate環境の使い方
+%repeat=3,para
+\slidepage
+
+enumerate::[(1)]
+%thin[2,-]::item::番号を変えるには,例えば [(1)]
+%thin[3,-]::item::後は同じ
+end
+
+%%%%%%%%%%%%%%%%
+new::グラフとrepeat
+%repeat=2,para
+\slidepage
+
+layer::{100}{0}
+%[1]::putnote::se{10}{15}::sine,0.8
+%[2]::putnote::se{30}{40}::sine,0.8
+end
+
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s07slides/s0703repeatE.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s07slides/s0703repeatE.cdy
new file mode 100644
index 0000000000..f248e50b2e
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s07slides/s0703repeatE.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s07slides/s0703repeatE.txt b/graphics/ketcindy/ketcindyfolder/work/samples/s07slides/s0703repeatE.txt
new file mode 100644
index 0000000000..609920e4cf
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s07slides/s0703repeatE.txt
@@ -0,0 +1,35 @@
+title::slide0::%wallpaper
+
+%%%%%%%%%%%%%%%%
+main::Main Slide
+\slidepage[m]
+
+%%%%%%%%%%%%%%%%
+new::itemize and repeat
+%repeat=2,para
+\slidepage
+
+itemize
+item::Contents
+%[2,-]::item::Conclusions
+end
+
+%%%%%%%%%%%%%%%%
+new::enumerate and repeat
+%repeat=3,para
+\slidepage
+
+enumerate::[(1)]
+%thin[2,-]::item::Contents
+%thin[3,-]::item::Conclusions
+end
+
+%%%%%%%%%%%%%%%%
+new::Graph and repeat
+%repeat=2,para
+\slidepage
+
+layer::{100}{0}
+%[1]::putnote::se{10}{15}::sinecurve,0.8
+%[2]::putnote::se{30}{40}::sinecurve,0.8
+end \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s07slides/s0704thin.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s07slides/s0704thin.cdy
new file mode 100644
index 0000000000..c1c3982eed
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s07slides/s0704thin.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s07slides/s0704thin.txt b/graphics/ketcindy/ketcindyfolder/work/samples/s07slides/s0704thin.txt
new file mode 100644
index 0000000000..2c27d72302
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s07slides/s0704thin.txt
@@ -0,0 +1,45 @@
+タイトル::slide0::%wallpaper/
+
+%%%%%%%%%%%%%%%%
+main::メインスライド1
+\slidepage[m]
+
+%%%%%%%%%%%%%%%%
+new::enumerate環境の使い方
+%repeat=3,para
+\slidepage
+
+%[2,-]::enumerate::[(1)]
+%[2,-]::item::番号を変えるには,例えば [(1)]
+%[3,-]::item::表示ページはリストで与える\\
+%[3,-]::\hspace*{10mm}[1],\ [1,-],\ [1..3],\ [1..3,6]など
+%[2,- ]::end
+
+%%%%%%%%%%%%%%%%
+new::薄文字の使い方
+%repeat=4,para
+\slidepage
+
+itemize
+%thin[2,-]::item::Setslidebodyの3番目の引数で濃さを変更\\
+%thin[2,-]::\hspace*{10mm}\verb|Setslidebody(["","",0.2]);|
+%thin[3,-]::item::デフォルトは$0.1$
+%thin[4]::item::リストのページ以外が薄文字になる
+end
+
+%%%%%%%%%%%%%%%%
+new::layerの使い方
+%repeat=5,para
+\slidepage
+
+\setthin{0}
+
+itemize
+%thin[1,-]::item::layerの始まりは\verb+layer+{:}{:}\verb+{120}{0}+
+%thin[2,-]::item::layerの終わりは\verb|end|
+%thin[3,-]::item::図は\verb+putnote+{:}{:}\verb+se{80}{5}+{:}{:}\verb+grf+
+%thin[4,-]::item::図のサイズを変えるときは\\
+%thin[4,-]::\hspace*{10mm}{:}{:}\verb+grf,0.8+
+%thin[5]::item::通常の\verb|\putnote|文も使える
+end
+
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s07slides/s0704thinE.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s07slides/s0704thinE.cdy
new file mode 100644
index 0000000000..5c618db5b2
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s07slides/s0704thinE.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s07slides/s0704thinE.txt b/graphics/ketcindy/ketcindyfolder/work/samples/s07slides/s0704thinE.txt
new file mode 100644
index 0000000000..4ad669374b
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s07slides/s0704thinE.txt
@@ -0,0 +1,16 @@
+title::slide0::%wallpaper/
+
+%%%%%%%%%%%%%%%%
+main::Main slide
+\slidepage[m]
+
+%%%%%%%%%%%%%%%%
+new::How to use enumerate
+%repeat=3,para
+\slidepage
+
+%thin[2,-]::enumerate::[(1)]
+%thin[2,-]::item::Add :\hspace{0mm}:[(1)] to change the style of item.
+%thin[3,-]::item::Give a list of page numbers to be displayed.\\
+%thin[3,-]::\hspace*{10mm}[1],\ [1,-],\ [1..3],\ [1..3,6], etc
+%thin[2,- ]::end
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s07slides/s0705para.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s07slides/s0705para.cdy
new file mode 100644
index 0000000000..5f020d82c9
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s07slides/s0705para.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s07slides/s0705para.txt b/graphics/ketcindy/ketcindyfolder/work/samples/s07slides/s0705para.txt
new file mode 100644
index 0000000000..26e4350d23
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s07slides/s0705para.txt
@@ -0,0 +1,12 @@
+%%タイトル::slide0::kabegami
+タイトル::slide0
+
+%%%%%%%%%%%%%%%%
+new::Example 1
+%repeat=,para=sinemove:{0}:s{65}{10}:input:1.2
+\slidepage
+
+%%%%%%%%%%%%%%%%
+new::Example2
+%repeat=,para=sinemove2:{0}:s{65}{10}:input:1.2
+\slidepage
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s07slides/s0705paraE.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s07slides/s0705paraE.cdy
new file mode 100644
index 0000000000..b8035c68e7
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s07slides/s0705paraE.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s07slides/s0705paraE.txt b/graphics/ketcindy/ketcindyfolder/work/samples/s07slides/s0705paraE.txt
new file mode 100644
index 0000000000..4e385ff088
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s07slides/s0705paraE.txt
@@ -0,0 +1,11 @@
+title::slide0::%wallpaperi
+
+%%%%%%%%%%%%%%%%
+new::Example1
+%repeat=,para=sinemove:{0}:s{65}{10}:input:1.2
+\slidepage
+
+%%%%%%%%%%%%%%%%
+new::Example2
+%repeat=,para=sinemove2:{0}:s{65}{10}:input:1.2
+\slidepage
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s07slides/s0706animate.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s07slides/s0706animate.cdy
new file mode 100644
index 0000000000..29f07aa287
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s07slides/s0706animate.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s07slides/s0706animate.txt b/graphics/ketcindy/ketcindyfolder/work/samples/s07slides/s0706animate.txt
new file mode 100644
index 0000000000..41f5e41aa0
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s07slides/s0706animate.txt
@@ -0,0 +1,21 @@
+タイトル::slide0::%wallpaper
+
+%%%%%%%%%%%%%%%%
+main::メインスライド1
+\slidepage[m]
+
+%%%%%%%%%%%%%%%%
+new::Animation1
+\slidepage
+
+\begin{center}
+\input{fig/animsinemove}
+\end{center}
+
+%%%%%%%%%%%%%%%%
+%new::Animation2
+\slidepage
+
+%\begin{center}
+%\input{fig/animsinemove2}
+%\end{center}
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s07slides/s0706animateE.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s07slides/s0706animateE.cdy
new file mode 100644
index 0000000000..97d65a2665
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s07slides/s0706animateE.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s07slides/s0706animateE.txt b/graphics/ketcindy/ketcindyfolder/work/samples/s07slides/s0706animateE.txt
new file mode 100644
index 0000000000..5d005cdece
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s07slides/s0706animateE.txt
@@ -0,0 +1,21 @@
+Title::slide0::%wallpaper
+
+%%%%%%%%%%%%%%%%
+main::Main Slide
+\slidepage[m]
+
+%%%%%%%%%%%%%%%%
+new::Animation1
+\slidepage
+
+\begin{center}
+\input{fig/animsinemove}
+\end{center}
+
+%%%%%%%%%%%%%%%%
+new::Animation2
+\slidepage
+
+\begin{center}
+\input{fig/animsinemove2}
+\end{center} \ No newline at end of file
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s08R/s0801plotR.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s08R/s0801plotR.cdy
new file mode 100644
index 0000000000..265663ee1f
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s08R/s0801plotR.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s08R/s0802plotR2.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s08R/s0802plotR2.cdy
new file mode 100644
index 0000000000..af93176f55
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s08R/s0802plotR2.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s08R/s0803plotdiscR.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s08R/s0803plotdiscR.cdy
new file mode 100644
index 0000000000..ab1e2cad28
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s08R/s0803plotdiscR.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s08R/s0804boxplot.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s08R/s0804boxplot.cdy
new file mode 100644
index 0000000000..0b7a5eb3b9
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s08R/s0804boxplot.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s08R/s0805histplot.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s08R/s0805histplot.cdy
new file mode 100644
index 0000000000..560c851736
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s08R/s0805histplot.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s08R/s0806random.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s08R/s0806random.cdy
new file mode 100644
index 0000000000..a5491d88e2
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s08R/s0806random.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s08R/s0807dataframe.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s08R/s0807dataframe.cdy
new file mode 100644
index 0000000000..beef8e15ab
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s08R/s0807dataframe.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s08R/s0808ttest.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s08R/s0808ttest.cdy
new file mode 100644
index 0000000000..00f6f0ff1c
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s08R/s0808ttest.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s09surfaceC/s0901paraboloid.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s09surfaceC/s0901paraboloid.cdy
new file mode 100644
index 0000000000..50b9e7db67
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s09surfaceC/s0901paraboloid.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s09surfaceC/s0902cone.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s09surfaceC/s0902cone.cdy
new file mode 100644
index 0000000000..d0c99a48ac
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s09surfaceC/s0902cone.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s09surfaceC/s0903saddle.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s09surfaceC/s0903saddle.cdy
new file mode 100644
index 0000000000..450371c431
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s09surfaceC/s0903saddle.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s09surfaceC/s0904mant.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s09surfaceC/s0904mant.cdy
new file mode 100644
index 0000000000..74e8e3b4fa
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s09surfaceC/s0904mant.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s09surfaceC/s0905sphere.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s09surfaceC/s0905sphere.cdy
new file mode 100644
index 0000000000..ffc1dc7bdb
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s09surfaceC/s0905sphere.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s09surfaceC/s0906curveonsurf.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s09surfaceC/s0906curveonsurf.cdy
new file mode 100644
index 0000000000..b273998513
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s09surfaceC/s0906curveonsurf.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s09surfaceC/s0907intersectcrvsf.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s09surfaceC/s0907intersectcrvsf.cdy
new file mode 100644
index 0000000000..60409f6271
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s09surfaceC/s0907intersectcrvsf.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s09surfaceC/s0908wiredata.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s09surfaceC/s0908wiredata.cdy
new file mode 100644
index 0000000000..c552353d28
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s09surfaceC/s0908wiredata.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s09surfaceC/s0909conecut.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s09surfaceC/s0909conecut.cdy
new file mode 100644
index 0000000000..2bc9ed6dd2
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s09surfaceC/s0909conecut.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s09surfaceC/s0910multisurfaces.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s09surfaceC/s0910multisurfaces.cdy
new file mode 100644
index 0000000000..e406ef3d8e
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s09surfaceC/s0910multisurfaces.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s09surfaceC/s0911saddleskeleton.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s09surfaceC/s0911saddleskeleton.cdy
new file mode 100644
index 0000000000..cd325d0544
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s09surfaceC/s0911saddleskeleton.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s09surfaceC/s0912animesaddle.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s09surfaceC/s0912animesaddle.cdy
new file mode 100644
index 0000000000..758c80fad3
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s09surfaceC/s0912animesaddle.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s09surfaceC/s0913animeparaboloid.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s09surfaceC/s0913animeparaboloid.cdy
new file mode 100644
index 0000000000..bc830c4500
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s09surfaceC/s0913animeparaboloid.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s09surfaceC/s0914animemobius.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s09surfaceC/s0914animemobius.cdy
new file mode 100644
index 0000000000..df33c04a52
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s09surfaceC/s0914animemobius.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s09surfaceC/s0915discont.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s09surfaceC/s0915discont.cdy
new file mode 100644
index 0000000000..44081acb76
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s09surfaceC/s0915discont.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s09surfaceC/s0916multiandcut.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s09surfaceC/s0916multiandcut.cdy
new file mode 100644
index 0000000000..c4c554d106
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s09surfaceC/s0916multiandcut.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s10maxima/s1001basic.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s10maxima/s1001basic.cdy
new file mode 100644
index 0000000000..40a147200a
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s10maxima/s1001basic.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s10maxima/s1001factorial.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s10maxima/s1001factorial.cdy
new file mode 100644
index 0000000000..2e4e80ac82
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s10maxima/s1001factorial.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s10maxima/s1002equation.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s10maxima/s1002equation.cdy
new file mode 100644
index 0000000000..e675811908
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s10maxima/s1002equation.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s10maxima/s1003trig.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s10maxima/s1003trig.cdy
new file mode 100644
index 0000000000..be719ecd77
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s10maxima/s1003trig.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s10maxima/s1004calcby.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s10maxima/s1004calcby.cdy
new file mode 100644
index 0000000000..9cab7b2646
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s10maxima/s1004calcby.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s10maxima/s1005diffint.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s10maxima/s1005diffint.cdy
new file mode 100644
index 0000000000..3a028e8879
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s10maxima/s1005diffint.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s10maxima/s1005intplot.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s10maxima/s1005intplot.cdy
new file mode 100644
index 0000000000..1e99676e46
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s10maxima/s1005intplot.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s10maxima/s1006calculus.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s10maxima/s1006calculus.cdy
new file mode 100644
index 0000000000..bb5ff4e3ce
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s10maxima/s1006calculus.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s10maxima/s1007linalg.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s10maxima/s1007linalg.cdy
new file mode 100644
index 0000000000..0f13189ab5
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s10maxima/s1007linalg.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s10maxima/s1008idtable.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s10maxima/s1008idtable.cdy
new file mode 100644
index 0000000000..b8e1948fdf
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s10maxima/s1008idtable.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s10maxima/s1009diffeq.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s10maxima/s1009diffeq.cdy
new file mode 100644
index 0000000000..aad6e96599
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s10maxima/s1009diffeq.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s10maxima/s1010fourier.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s10maxima/s1010fourier.cdy
new file mode 100644
index 0000000000..124b792569
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s10maxima/s1010fourier.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s10maxima/s1011matrixop.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s10maxima/s1011matrixop.cdy
new file mode 100644
index 0000000000..725b187102
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s10maxima/s1011matrixop.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s10maxima/s1012for.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s10maxima/s1012for.cdy
new file mode 100644
index 0000000000..233fa6371b
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s10maxima/s1012for.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s10maxima/s1012odefor.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s10maxima/s1012odefor.cdy
new file mode 100644
index 0000000000..036677a427
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s10maxima/s1012odefor.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s10maxima/s1013incdec.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s10maxima/s1013incdec.cdy
new file mode 100644
index 0000000000..454e45d8d5
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s10maxima/s1013incdec.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s10maxima/s1014primenumber.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s10maxima/s1014primenumber.cdy
new file mode 100644
index 0000000000..5adc840c28
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s10maxima/s1014primenumber.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s11asir/s1100list.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s11asir/s1100list.cdy
new file mode 100644
index 0000000000..be024649c3
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s11asir/s1100list.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s11asir/s1101calculator1.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s11asir/s1101calculator1.cdy
new file mode 100644
index 0000000000..776d3c0d46
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s11asir/s1101calculator1.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s11asir/s1102calculator2.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s11asir/s1102calculator2.cdy
new file mode 100644
index 0000000000..96d661c1ed
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s11asir/s1102calculator2.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s11asir/s1103calcby.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s11asir/s1103calcby.cdy
new file mode 100644
index 0000000000..47f0b20cf5
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s11asir/s1103calcby.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s11asir/s1104diff.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s11asir/s1104diff.cdy
new file mode 100644
index 0000000000..fff2939ee3
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s11asir/s1104diff.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s11asir/s1105fint101.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s11asir/s1105fint101.cdy
new file mode 100644
index 0000000000..c07f0ed049
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s11asir/s1105fint101.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s11asir/s1105fzero109.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s11asir/s1105fzero109.cdy
new file mode 100644
index 0000000000..7d51533f51
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s11asir/s1105fzero109.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s11asir/s1106fmmx110.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s11asir/s1106fmmx110.cdy
new file mode 100644
index 0000000000..6ceb10fe84
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s11asir/s1106fmmx110.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s11asir/s1110integrate.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s11asir/s1110integrate.cdy
new file mode 100644
index 0000000000..f5def33c89
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s11asir/s1110integrate.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s11asir/s1111grobner1.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s11asir/s1111grobner1.cdy
new file mode 100644
index 0000000000..d8e397d839
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s11asir/s1111grobner1.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s11asir/s1112residue.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s11asir/s1112residue.cdy
new file mode 100644
index 0000000000..1f177c97ee
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s11asir/s1112residue.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s12fricas/s1201integrate.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s12fricas/s1201integrate.cdy
new file mode 100644
index 0000000000..95516f75e1
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s12fricas/s1201integrate.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s12fricas/s1201integrate2.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s12fricas/s1201integrate2.cdy
new file mode 100644
index 0000000000..d89a8f10fc
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s12fricas/s1201integrate2.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s12fricas/s1202calcby.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s12fricas/s1202calcby.cdy
new file mode 100644
index 0000000000..94b57a047a
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s12fricas/s1202calcby.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s12fricas/s1202equations.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s12fricas/s1202equations.cdy
new file mode 100644
index 0000000000..18c0f84a57
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s12fricas/s1202equations.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s13objview/s1301basic.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s13objview/s1301basic.cdy
new file mode 100644
index 0000000000..49d7c78e68
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s13objview/s1301basic.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s13objview/s1303objparts.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s13objview/s1303objparts.cdy
new file mode 100644
index 0000000000..068af73520
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s13objview/s1303objparts.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s13objview/s1304symbol.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s13objview/s1304symbol.cdy
new file mode 100644
index 0000000000..47bf089fee
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s13objview/s1304symbol.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s13objview/s1305hyperpara.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s13objview/s1305hyperpara.cdy
new file mode 100644
index 0000000000..07a912d609
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s13objview/s1305hyperpara.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s13objview/s1306poly.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s13objview/s1306poly.cdy
new file mode 100644
index 0000000000..daa44cf722
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s13objview/s1306poly.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s13objview/s1307poly2.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s13objview/s1307poly2.cdy
new file mode 100644
index 0000000000..35d8ec377c
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s13objview/s1307poly2.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s13objview/s1308discont.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s13objview/s1308discont.cdy
new file mode 100644
index 0000000000..1d1e697af0
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s13objview/s1308discont.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s13objview/s1309discont2.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s13objview/s1309discont2.cdy
new file mode 100644
index 0000000000..fabcbe8d3c
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s13objview/s1309discont2.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s13objview/s1310totaldiff.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s13objview/s1310totaldiff.cdy
new file mode 100644
index 0000000000..522352db39
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s13objview/s1310totaldiff.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s13objview/s1311plate.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s13objview/s1311plate.cdy
new file mode 100644
index 0000000000..dabf7d469f
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s13objview/s1311plate.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s13objview/s1312plane.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s13objview/s1312plane.cdy
new file mode 100644
index 0000000000..612333249c
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s13objview/s1312plane.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s13objview/s1313changescale.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s13objview/s1313changescale.cdy
new file mode 100644
index 0000000000..ca9b331175
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s13objview/s1313changescale.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s14dataprocessing/s1401csvprocessing.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s14dataprocessing/s1401csvprocessing.cdy
new file mode 100644
index 0000000000..a5a6ccaa5e
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s14dataprocessing/s1401csvprocessing.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s14dataprocessing/s1402copypaste.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s14dataprocessing/s1402copypaste.cdy
new file mode 100644
index 0000000000..b8ff97f3e2
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s14dataprocessing/s1402copypaste.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s14dataprocessing/s1403maketableJ.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s14dataprocessing/s1403maketableJ.cdy
new file mode 100644
index 0000000000..85b8068533
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s14dataprocessing/s1403maketableJ.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s14dataprocessing/sample1.csv b/graphics/ketcindy/ketcindyfolder/work/samples/s14dataprocessing/sample1.csv
new file mode 100644
index 0000000000..38d5fa8c71
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s14dataprocessing/sample1.csv
@@ -0,0 +1,10 @@
+63,33,59,64,52
+61,26,47,27,59
+40,52,24,48,26
+63,56,44,40,34
+75,34,64,76,61
+58,63,53,50,68
+65,38,81,59,23
+54,65,41,76,53
+75,61,42,58,40
+44,42,58,41,56
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s14dataprocessing/sample2.csv b/graphics/ketcindy/ketcindyfolder/work/samples/s14dataprocessing/sample2.csv
new file mode 100644
index 0000000000..f6273be2c7
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s14dataprocessing/sample2.csv
@@ -0,0 +1,10 @@
+50,68,57,65,60
+64,48,65,61,72
+41,45,31,51,47
+54,55,39,47,39
+34,52,43,50,47
+54,31,58,38,79
+14,36,56,46,63
+78,54,40,64,42
+40,44,68,59,46
+41,65,40,44,37
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s15surfaceR/s1501paraboloidR.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s15surfaceR/s1501paraboloidR.cdy
new file mode 100644
index 0000000000..04a39ce9d9
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s15surfaceR/s1501paraboloidR.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s15surfaceR/s1502coneR.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s15surfaceR/s1502coneR.cdy
new file mode 100644
index 0000000000..bd5af41c76
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s15surfaceR/s1502coneR.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s15surfaceR/s1503saddleR.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s15surfaceR/s1503saddleR.cdy
new file mode 100644
index 0000000000..6088e2d61a
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s15surfaceR/s1503saddleR.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s15surfaceR/s1504mantR.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s15surfaceR/s1504mantR.cdy
new file mode 100644
index 0000000000..295396f687
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s15surfaceR/s1504mantR.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s15surfaceR/s1505sphereR.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s15surfaceR/s1505sphereR.cdy
new file mode 100644
index 0000000000..d2fbc0e590
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s15surfaceR/s1505sphereR.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s15surfaceR/s1506curveonsurfR.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s15surfaceR/s1506curveonsurfR.cdy
new file mode 100644
index 0000000000..fd2a3f92bc
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s15surfaceR/s1506curveonsurfR.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s15surfaceR/s1507intersectcrvsfR.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s15surfaceR/s1507intersectcrvsfR.cdy
new file mode 100644
index 0000000000..8d265bfd95
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s15surfaceR/s1507intersectcrvsfR.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s15surfaceR/s1508multisurfacesR.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s15surfaceR/s1508multisurfacesR.cdy
new file mode 100644
index 0000000000..9773bde8b8
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s15surfaceR/s1508multisurfacesR.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s15surfaceR/s1509wiredataR.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s15surfaceR/s1509wiredataR.cdy
new file mode 100644
index 0000000000..ece4898b61
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s15surfaceR/s1509wiredataR.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s15surfaceR/s1510conecutR.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s15surfaceR/s1510conecutR.cdy
new file mode 100644
index 0000000000..56613fb35d
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s15surfaceR/s1510conecutR.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s16ketJSmisc/howtouseketcindyjsE.txt b/graphics/ketcindy/ketcindyfolder/work/samples/s16ketJSmisc/howtouseketcindyjsE.txt
new file mode 100644
index 0000000000..05c14c1af1
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s16ketJSmisc/howtouseketcindyjsE.txt
@@ -0,0 +1,24 @@
+How to use ketcindyjs 2019.02.26
+
+1. Process flow
+
+ 1) cdyファイルを開く.
+ Rem) In the case of no KeTJS,KeTJSoff buttons:
+ (i) open template2allbuttons.cdy
+ (ii) Copy KeTJS,KeTJSoff button using shift key.
+ (iii) Paste them to the cdy file.
+ (iv) Close once the file.
+ (v) Open the file again
+ 2) Select
+ File > Export to CindyJA
+ 3) Press KeTJS(online mode) or KeTJSoff(offline mode)
+ 4) Open the html file
+ Rem) Use GoogleChrome or Firefox in the case of Windows.
+
+2. Setting the option of ketcindyjs
+ Setketcindyjs([options list);
+ "Scale=(ratio)"
+ "Nolabel=[list of geometric elements]"
+ ex) ”Nolabel="+allpoints()
+ "Grid=(interval of grid)"
+ "Color=(back ground color)"
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s16ketJSmisc/howtouseketcindyjsJ.txt b/graphics/ketcindy/ketcindyfolder/work/samples/s16ketJSmisc/howtouseketcindyjsJ.txt
new file mode 100644
index 0000000000..2dde5c6fa1
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s16ketJSmisc/howtouseketcindyjsJ.txt
@@ -0,0 +1,24 @@
+ketcindyjsの使い方  2019.02.26
+
+1.作成の流れ
+
+ 1)cdyファイルを開く.
+    注)KeTJS,KeTJSoffのボタンがない場合
+      (1) template2allbuttons.cdyを同時に開く
+      (2) KeTJS,KeTJSoffのボタンをShiftを押しながら選んでコピー
+      (3) cdyファイルにコピー
+      (4) ファイルを一旦保存して終了する.
+      (5) 再びファイルを開く
+ 2)ファイル>「Cindyjsに書き出す」を実行
+ 3)KeTJS(オンライン)またはKeTJSoff(オフライン)を押す.
+ 4)htmlファイルを開く.
+    注)Windowsの場合,GoogleChromeかFirefoxで開く
+
+2.オプションの設定
+
+ Setketcindyjs([オプションリスト]); をKetinit() の下に入れる.
+   "Scale=(倍率)"
+   "Nolabel=[幾何要素のリスト]"
+     例)”Nolabel="+allpoints()
+   "Grid=(グリッドの間隔)"
+   "Color=(背景色)"
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s16ketJSmisc/s1601basic.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s16ketJSmisc/s1601basic.cdy
new file mode 100644
index 0000000000..527b7bc392
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s16ketJSmisc/s1601basic.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s16ketJSmisc/s1602diffeq2.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s16ketJSmisc/s1602diffeq2.cdy
new file mode 100644
index 0000000000..0c75637b4d
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s16ketJSmisc/s1602diffeq2.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s16ketJSmisc/s1603gamow.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s16ketJSmisc/s1603gamow.cdy
new file mode 100644
index 0000000000..5d7ee38cf3
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s16ketJSmisc/s1603gamow.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s16ketJSmisc/s1604putoncurve.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s16ketJSmisc/s1604putoncurve.cdy
new file mode 100644
index 0000000000..9564ca7995
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s16ketJSmisc/s1604putoncurve.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s16ketJSmisc/s1605triangle.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s16ketJSmisc/s1605triangle.cdy
new file mode 100644
index 0000000000..5279a0b3c3
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s16ketJSmisc/s1605triangle.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s16ketJSmisc/s1606morley.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s16ketJSmisc/s1606morley.cdy
new file mode 100644
index 0000000000..36d5d27c3a
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s16ketJSmisc/s1606morley.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s16ketJSmisc/s1607inputbox.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s16ketJSmisc/s1607inputbox.cdy
new file mode 100644
index 0000000000..77be31c3d0
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s16ketJSmisc/s1607inputbox.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s16ketJSmisc/s1608texcalc.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s16ketJSmisc/s1608texcalc.cdy
new file mode 100644
index 0000000000..eca4763b69
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s16ketJSmisc/s1608texcalc.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s16ketJSmisc/s1609trigratio.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s16ketJSmisc/s1609trigratio.cdy
new file mode 100644
index 0000000000..11afb67d79
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s16ketJSmisc/s1609trigratio.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s17spacekc/ReadmeE.txt b/graphics/ketcindy/ketcindyfolder/work/samples/s17spacekc/ReadmeE.txt
new file mode 100644
index 0000000000..22ef302445
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s17spacekc/ReadmeE.txt
@@ -0,0 +1,6 @@
+How to use Spacekc 20190101 Akira Iritani
+
+Spacekc is a plugin to KeTCindy for 3D rendering/drawing.
+
+See the following website for examples :
+ https://sites.google.com/site/ketcindy/home/cindy3d2
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s17spacekc/ReadmeJ.txt b/graphics/ketcindy/ketcindyfolder/work/samples/s17spacekc/ReadmeJ.txt
new file mode 100644
index 0000000000..3185f6e1f9
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s17spacekc/ReadmeJ.txt
@@ -0,0 +1,6 @@
+Spacekcの使い方    20190101 入谷昭
+
+Spacekc は、KeTCindyの3Dモードをベースに,面の色塗りなど,KeTCindyにはないコマンドを追加したものです。
+
+作成例は以下のサイトを見て下さい。
+ https://sites.google.com/site/ketcindy/home/cindy3d2
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s17spacekc/Spacekc.cdy b/graphics/ketcindy/ketcindyfolder/work/samples/s17spacekc/Spacekc.cdy
new file mode 100644
index 0000000000..4854986e5c
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s17spacekc/Spacekc.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s17spacekc/Spacekc.pdf b/graphics/ketcindy/ketcindyfolder/work/samples/s17spacekc/Spacekc.pdf
new file mode 100644
index 0000000000..7631f26640
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s17spacekc/Spacekc.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/samples/s17spacekc/SpacekcReference.pdf b/graphics/ketcindy/ketcindyfolder/work/samples/s17spacekc/SpacekcReference.pdf
new file mode 100644
index 0000000000..9fd170aaea
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/samples/s17spacekc/SpacekcReference.pdf
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/template0.cdy b/graphics/ketcindy/ketcindyfolder/work/template0.cdy
new file mode 100644
index 0000000000..7a86dd848d
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/template0.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/template1basic.cdy b/graphics/ketcindy/ketcindyfolder/work/template1basic.cdy
new file mode 100644
index 0000000000..367a6beefe
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/template1basic.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/template3Dfigure.cdy b/graphics/ketcindy/ketcindyfolder/work/template3Dfigure.cdy
new file mode 100644
index 0000000000..daf0cf639f
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/template3Dfigure.cdy
Binary files differ
diff --git a/graphics/ketcindy/ketcindyfolder/work/template4ketcindyjs.cdy b/graphics/ketcindy/ketcindyfolder/work/template4ketcindyjs.cdy
new file mode 100644
index 0000000000..eb7ee2d1c4
--- /dev/null
+++ b/graphics/ketcindy/ketcindyfolder/work/template4ketcindyjs.cdy
Binary files differ