
###############################################################################
#                                                                             #
#  Lout @Diag package for drawing diagrams                                    #
#  Version 1.1 (February 2000)                                                #
#  Jeffrey H. Kingston                                                        #
#                                                                             #
#  Version 1.0 (July 1996)                                                    #
#  Based on Version 2.0 of the @Fig package (Jeffrey H. Kingston, Dec 1992).  #
#                                                                             #
###############################################################################

@SysInclude { diagf.etc }		# @Geometry
@SysInclude { coltex }			# @ColourCommand and @TextureCommand
@SysPrependGraphic { diagf.lpg }


###############################################################################
#                                                                             #
#  @DiagSetup symbol                                                          #
#                                                                             #
###############################################################################

export @Diag @SyntaxDiag
def @DiagSetup
    named save		             	{ no	           	}
    named maxlabels             	{ 200           	}
    named title                         { "--titledft--"	}
    named titleformat
	left @Title
	right @Body
				{ Slope @Font @Title //0.7f ||0.35f @Body }

    ###########################################################################
    #                                                                         #
    #  @Node options of @DiagSetup                                            #
    #                                                                         #
    ###########################################################################

    import @Geometry named outline
	named margin {}
	named shadow {}
	named sides {}
	named angle {}
					{ box			}
    named margin			{ 0.6f          	}
    import @Geometry named shadow	{ 0.4f          	}
    import @Geometry named sides	{ 3			}
    import @Geometry named angle	{ "dup 180 exch div"	}
    named translate			{			}
    named outlinestyle
	named solid             { "/ldiagsolid"			}
	named dashed            { "/ldiagdashed"		}
	named cdashed           { "/ldiagcdashed"		}
	named dotdashed         { "/ldiagdotdashed"		}
	named dotcdashed        { "/ldiagdotcdashed"		}
	named dotdotdashed      { "/ldiagdotdotdashed"		}
	named dotdotcdashed     { "/ldiagdotdotcdashed"		}
	named dotdotdotdashed   { "/ldiagdotdotdotdashed"	}
	named dotdotdotcdashed  { "/ldiagdotdotdotcdashed"	}
	named dotted            { "/ldiagdotted"		}
	named noline            { "/ldiagnoline"		}
					{ solid         	}
    import @Geometry named outlinedashlength	{ 0.2f		}
    import @Geometry named outlinewidth
	named thin   { 0.04 ft }
	named medium { 0.08 ft }
	named thick  { 0.12 ft }
					{ thin	         	}
    named paint                 	{ none		       	}
    import @TextureImport named texture	{ solid			}
    named font				{			}
    named break				{			}
    named format right @Body    	{ @Body         	}

    named valign			{ ctr           	}
    named vsize                 	{               	}
    named vindent			{ ctr           	}
    named vstrut
	named no  { 0.0f }
	named yes { 1.0f }
					{ no            	}
    named vmargin               	{               	}
    named topmargin             	{               	}
    named footmargin            	{               	}

    named halign			{ ctr           	}
    named hsize                 	{               	}
    named hindent			{ ctr           	}
    named hstrut
	named no  { 0.0f }
	named yes { 1.0f }
					{ no            	}
    named hmargin               	{               	}
    named leftmargin            	{               	}
    named rightmargin           	{               	}

    named nodelabel			{			}
    named nodelabelmargin		{ 0.2f			}
    named nodelabelfont			{ -2p			}
    named nodelabelbreak		{ ragged nohyphen	}
    named nodelabelformat right @Body	{ @Body			}
    import @Geometry named nodelabelpos	{ 			}
    import @Geometry named nodelabelangle  { horizontal		}
    named nodelabelprox			{ outside		}
    named nodelabelctr			{ no			}
    import @Geometry named nodelabeladjust { 0 0		}

    named alabel			{			}
    named alabelmargin			{ 			}
    named alabelfont			{ 			}
    named alabelbreak			{ 			}
    named alabelformat right @Body	{ 			}
    import @Geometry named alabelpos	{ NE			}
    import @Geometry named alabelangle	{ 			}
    named alabelprox			{ 			}
    named alabelctr			{ 			}
    import @Geometry named alabeladjust	{ 			}

    named blabel			{			}
    named blabelmargin			{ 			}
    named blabelfont			{ 			}
    named blabelbreak			{ 			}
    named blabelformat right @Body	{ 			}
    import @Geometry named blabelpos	{ NW			}
    import @Geometry named blabelangle	{ 			}
    named blabelprox			{ 			}
    named blabelctr			{ 			}
    import @Geometry named blabeladjust	{ 			}

    named clabel			{			}
    named clabelmargin			{ 			}
    named clabelfont			{ 			}
    named clabelbreak			{ 			}
    named clabelformat right @Body	{ 			}
    import @Geometry named clabelpos	{ SW			}
    import @Geometry named clabelangle	{ 			}
    named clabelprox			{ 			}
    named clabelctr			{ 			}
    import @Geometry named clabeladjust	{ 			}

    named dlabel			{			}
    named dlabelmargin			{ 			}
    named dlabelfont			{ 			}
    named dlabelbreak			{ 			}
    named dlabelformat right @Body	{ 			}
    import @Geometry named dlabelpos	{ SE			}
    import @Geometry named dlabelangle	{ 			}
    named dlabelprox			{ 			}
    named dlabelctr			{ 			}
    import @Geometry named dlabeladjust	{ 			}

    ###########################################################################
    #                                                                         #
    #  @ANode options of @DiagSetup                                           #
    #                                                                         #
    ###########################################################################

    import @Geometry named aoutline
	named margin {}
	named shadow {}
	named sides {}
	named angle {}
					{ box			}
    named amargin			{ 0.6f          	}
    import @Geometry named ashadow	{ 0.4f          	}
    import @Geometry named asides	{ 3			}
    import @Geometry named aangle	{ "dup 180 exch div"	}
    named atranslate			{			}
    named aoutlinestyle
	named solid             { "/ldiagsolid"			}
	named dashed            { "/ldiagdashed"		}
	named cdashed           { "/ldiagcdashed"		}
	named dotdashed         { "/ldiagdotdashed"		}
	named dotcdashed        { "/ldiagdotcdashed"		}
	named dotdotdashed      { "/ldiagdotdotdashed"		}
	named dotdotcdashed     { "/ldiagdotdotcdashed"		}
	named dotdotdotdashed   { "/ldiagdotdotdotdashed"	}
	named dotdotdotcdashed  { "/ldiagdotdotdotcdashed"	}
	named dotted            { "/ldiagdotted"		}
	named noline            { "/ldiagnoline"		}
					{ solid         	}
    import @Geometry named aoutlinedashlength	{ 0.2f		}
    import @Geometry named aoutlinewidth
	named thin   { 0.04 ft }
	named medium { 0.08 ft }
	named thick  { 0.12 ft }
					{ thin	         	}
    named apaint                 	{ none		       	}
    import @TextureImport named atexture{ solid			}
    named afont				{			}
    named abreak			{			}
    named aformat right @Body    	{ @Body         	}

    named avalign			{ ctr           	}
    named avsize                 	{               	}
    named avindent			{ ctr           	}
    named avstrut
	named no  { 0.0f }
	named yes { 1.0f }
					{ no            	}
    named avmargin               	{               	}
    named atopmargin             	{               	}
    named afootmargin            	{               	}

    named ahalign			{ ctr           	}
    named ahsize                 	{               	}
    named ahindent			{ ctr           	}
    named ahstrut
	named no  { 0.0f }
	named yes { 1.0f }
					{ no            	}
    named ahmargin               	{               	}
    named aleftmargin            	{               	}
    named arightmargin           	{               	}

    named anodelabel			{			}
    named anodelabelmargin		{ 0.2f			}
    named anodelabelfont		{ -2p			}
    named anodelabelbreak		{ ragged nohyphen	}
    named anodelabelformat right @Body	{ @Body			}
    import @Geometry named anodelabelpos{ 			}
    import @Geometry named anodelabelangle  { horizontal	}
    named anodelabelprox		{ outside		}
    named anodelabelctr			{ no			}
    import @Geometry named anodelabeladjust { 0 0		}

    named aalabel			{			}
    named aalabelmargin			{ 			}
    named aalabelfont			{ 			}
    named aalabelbreak			{ 			}
    named aalabelformat right @Body	{ 			}
    import @Geometry named aalabelpos	{ NE			}
    import @Geometry named aalabelangle	{ 			}
    named aalabelprox			{ 			}
    named aalabelctr			{ 			}
    import @Geometry named aalabeladjust{ 			}

    named ablabel			{			}
    named ablabelmargin			{ 			}
    named ablabelfont			{ 			}
    named ablabelbreak			{ 			}
    named ablabelformat right @Body	{ 			}
    import @Geometry named ablabelpos	{ NW			}
    import @Geometry named ablabelangle	{ 			}
    named ablabelprox			{ 			}
    named ablabelctr			{ 			}
    import @Geometry named ablabeladjust{ 			}

    named aclabel			{			}
    named aclabelmargin			{ 			}
    named aclabelfont			{ 			}
    named aclabelbreak			{ 			}
    named aclabelformat right @Body	{ 			}
    import @Geometry named aclabelpos	{ SW			}
    import @Geometry named aclabelangle	{ 			}
    named aclabelprox			{ 			}
    named aclabelctr			{ 			}
    import @Geometry named aclabeladjust{ 			}

    named adlabel			{			}
    named adlabelmargin			{ 			}
    named adlabelfont			{ 			}
    named adlabelbreak			{ 			}
    named adlabelformat right @Body	{ 			}
    import @Geometry named adlabelpos	{ SE			}
    import @Geometry named adlabelangle	{ 			}
    named adlabelprox			{ 			}
    named adlabelctr			{ 			}
    import @Geometry named adlabeladjust{ 			}

    ###########################################################################
    #                                                                         #
    #  @BNode options of @DiagSetup                                           #
    #                                                                         #
    ###########################################################################

    import @Geometry named boutline
	named margin {}
	named shadow {}
	named sides {}
	named angle {}
					{ box			}
    named bmargin			{ 0.6f          	}
    import @Geometry named bshadow	{ 0.4f          	}
    import @Geometry named bsides	{ 3			}
    import @Geometry named bangle	{ "dup 180 exch div"	}
    named btranslate			{			}
    named boutlinestyle
	named solid             { "/ldiagsolid"			}
	named dashed            { "/ldiagdashed"		}
	named cdashed           { "/ldiagcdashed"		}
	named dotdashed         { "/ldiagdotdashed"		}
	named dotcdashed        { "/ldiagdotcdashed"		}
	named dotdotdashed      { "/ldiagdotdotdashed"		}
	named dotdotcdashed     { "/ldiagdotdotcdashed"		}
	named dotdotdotdashed   { "/ldiagdotdotdotdashed"	}
	named dotdotdotcdashed  { "/ldiagdotdotdotcdashed"	}
	named dotted            { "/ldiagdotted"		}
	named noline            { "/ldiagnoline"		}
					{ solid         	}
    import @Geometry named boutlinedashlength	{ 0.2f		}
    import @Geometry named boutlinewidth
	named thin   { 0.04 ft }
	named medium { 0.08 ft }
	named thick  { 0.12 ft }
					{ thin	         	}
    named bpaint                 	{ none		       	}
    import @TextureImport named btexture{ solid			}
    named bfont				{			}
    named bbreak			{			}
    named bformat right @Body    	{ @Body         	}

    named bvalign			{ ctr           	}
    named bvsize                 	{               	}
    named bvindent			{ ctr           	}
    named bvstrut
	named no  { 0.0f }
	named yes { 1.0f }
					{ no            	}
    named bvmargin               	{               	}
    named btopmargin             	{               	}
    named bfootmargin            	{               	}

    named bhalign			{ ctr           	}
    named bhsize                 	{               	}
    named bhindent			{ ctr           	}
    named bhstrut
	named no  { 0.0f }
	named yes { 1.0f }
					{ no            	}
    named bhmargin               	{               	}
    named bleftmargin            	{               	}
    named brightmargin           	{               	}

    named bnodelabel			{			}
    named bnodelabelmargin		{ 0.2f			}
    named bnodelabelfont		{ -2p			}
    named bnodelabelbreak		{ ragged nohyphen	}
    named bnodelabelformat right @Body	{ @Body			}
    import @Geometry named bnodelabelpos{ 			}
    import @Geometry named bnodelabelangle  { horizontal	}
    named bnodelabelprox		{ outside		}
    named bnodelabelctr			{ no			}
    import @Geometry named bnodelabeladjust { 0 0		}

    named balabel			{			}
    named balabelmargin			{ 			}
    named balabelfont			{ 			}
    named balabelbreak			{ 			}
    named balabelformat right @Body	{ 			}
    import @Geometry named balabelpos	{ NE			}
    named balabelprox			{ 			}
    import @Geometry named balabelangle	{ 			}
    named balabelctr			{ 			}
    import @Geometry named balabeladjust{ 			}

    named bblabel			{			}
    named bblabelmargin			{ 			}
    named bblabelfont			{ 			}
    named bblabelbreak			{ 			}
    named bblabelformat right @Body	{ 			}
    import @Geometry named bblabelpos	{ NW			}
    named bblabelprox			{ 			}
    import @Geometry named bblabelangle	{ 			}
    named bblabelctr			{ 			}
    import @Geometry named bblabeladjust{ 			}

    named bclabel			{			}
    named bclabelmargin			{ 			}
    named bclabelfont			{ 			}
    named bclabelbreak			{ 			}
    named bclabelformat right @Body	{ 			}
    import @Geometry named bclabelpos	{ SW			}
    named bclabelprox			{ 			}
    import @Geometry named bclabelangle	{ 			}
    named bclabelctr			{ 			}
    import @Geometry named bclabeladjust{ 			}

    named bdlabel			{			}
    named bdlabelmargin			{ 			}
    named bdlabelfont			{ 			}
    named bdlabelbreak			{ 			}
    named bdlabelformat right @Body	{ 			}
    import @Geometry named bdlabelpos	{ SE			}
    named bdlabelprox			{ 			}
    import @Geometry named bdlabelangle	{ 			}
    named bdlabelctr			{ 			}
    import @Geometry named bdlabeladjust{ 			}

    ###########################################################################
    #                                                                         #
    #  @CNode options of @DiagSetup                                           #
    #                                                                         #
    ###########################################################################

    import @Geometry named coutline
	named margin {}
	named shadow {}
	named sides {}
	named angle {}
					{ box			}
    named cmargin			{ 0.6f          	}
    import @Geometry named cshadow	{ 0.4f          	}
    import @Geometry named csides	{ 3			}
    import @Geometry named cangle	{ "dup 180 exch div"	}
    named ctranslate			{			}
    named coutlinestyle
	named solid             { "/ldiagsolid"			}
	named dashed            { "/ldiagdashed"		}
	named cdashed           { "/ldiagcdashed"		}
	named dotdashed         { "/ldiagdotdashed"		}
	named dotcdashed        { "/ldiagdotcdashed"		}
	named dotdotdashed      { "/ldiagdotdotdashed"		}
	named dotdotcdashed     { "/ldiagdotdotcdashed"		}
	named dotdotdotdashed   { "/ldiagdotdotdotdashed"	}
	named dotdotdotcdashed  { "/ldiagdotdotdotcdashed"	}
	named dotted            { "/ldiagdotted"		}
	named noline            { "/ldiagnoline"		}
					{ solid         	}
    import @Geometry named coutlinedashlength	{ 0.2f		}
    import @Geometry named coutlinewidth
	named thin   { 0.04 ft }
	named medium { 0.08 ft }
	named thick  { 0.12 ft }
					{ thin	         	}
    named cpaint                 	{ none		       	}
    import @TextureImport named ctexture{ solid			}
    named cfont				{			}
    named cbreak			{			}
    named cformat right @Body    	{ @Body         	}

    named cvalign			{ ctr           	}
    named cvsize                 	{               	}
    named cvindent			{ ctr           	}
    named cvstrut
	named no  { 0.0f }
	named yes { 1.0f }
					{ no            	}
    named cvmargin               	{               	}
    named ctopmargin             	{               	}
    named cfootmargin            	{               	}

    named chalign			{ ctr           	}
    named chsize                 	{               	}
    named chindent			{ ctr           	}
    named chstrut
	named no  { 0.0f }
	named yes { 1.0f }
					{ no            	}
    named chmargin               	{               	}
    named cleftmargin            	{               	}
    named crightmargin           	{               	}

    named cnodelabel			{			}
    named cnodelabelmargin		{ 0.2f			}
    named cnodelabelfont		{ -2p			}
    named cnodelabelbreak		{ ragged nohyphen	}
    named cnodelabelformat right @Body	{ @Body			}
    import @Geometry named cnodelabelpos{ 			}
    import @Geometry named cnodelabelangle  { horizontal	}
    named cnodelabelprox		{ outside		}
    named cnodelabelctr			{ no			}
    import @Geometry named cnodelabeladjust { 0 0		}

    named calabel			{			}
    named calabelmargin			{ 			}
    named calabelfont			{ 			}
    named calabelbreak			{ 			}
    named calabelformat right @Body	{ 			}
    import @Geometry named calabelpos	{ NE			}
    import @Geometry named calabelangle	{ 			}
    named calabelprox			{ 			}
    named calabelctr			{ 			}
    import @Geometry named calabeladjust{ 			}

    named cblabel			{			}
    named cblabelmargin			{ 			}
    named cblabelfont			{ 			}
    named cblabelbreak			{ 			}
    named cblabelformat right @Body	{ 			}
    import @Geometry named cblabelpos	{ NW			}
    import @Geometry named cblabelangle	{ 			}
    named cblabelprox			{ 			}
    named cblabelctr			{ 			}
    import @Geometry named cblabeladjust{ 			}

    named cclabel			{			}
    named cclabelmargin			{ 			}
    named cclabelfont			{ 			}
    named cclabelbreak			{ 			}
    named cclabelformat right @Body	{ 			}
    import @Geometry named cclabelpos	{ SW			}
    import @Geometry named cclabelangle	{ 			}
    named cclabelprox			{ 			}
    named cclabelctr			{ 			}
    import @Geometry named cclabeladjust{ 			}

    named cdlabel			{			}
    named cdlabelmargin			{ 			}
    named cdlabelfont			{ 			}
    named cdlabelbreak			{ 			}
    named cdlabelformat right @Body	{ 			}
    import @Geometry named cdlabelpos	{ SE			}
    import @Geometry named cdlabelangle	{ 			}
    named cdlabelprox			{ 			}
    named cdlabelctr			{ 			}
    import @Geometry named cdlabeladjust{ 			}

    ###########################################################################
    #                                                                         #
    #  @Link options of @DiagSetup                                            #
    #                                                                         #
    ###########################################################################

    import @Geometry named path
	named from {}
	named to {}
	named bias {}
	named fbias {}
	named tbias {}
	named hfrac {}
	named hbias {}
	named radius {}
	named xindent {}
	named zindent {}
	named frompt {}
	named topt {}
	named arrow {}
	named arrowlength {}
	named backarrowlength {}
					{ line			}
    import @Geometry named from		{ 0,0			}
    import @Geometry named to		{ 1,1			}
    import @Geometry named bias		{ 2.0f			}
    import @Geometry named fbias	{ 2.0f			}
    import @Geometry named tbias	{ 2.0f			}
    import @Geometry named hfrac	{ 0.5			}
    import @Geometry named hbias	{ 0.0f			}
    import @Geometry named radius	{ 1.0f			}
    import @Geometry named xindent	{ 0.8f			}
    import @Geometry named zindent	{ 0.8f			}
    import @Geometry named frompt	{ 0 0			}
    import @Geometry named topt		{ 0 0			}
    named pathstyle
	named solid             { "/ldiagsolid"			}
	named dashed            { "/ldiagdashed"		}
	named cdashed           { "/ldiagcdashed"		}
	named dotdashed         { "/ldiagdotdashed"		}
	named dotcdashed        { "/ldiagdotcdashed"		}
	named dotdotdashed      { "/ldiagdotdotdashed"		}
	named dotdotcdashed     { "/ldiagdotdotcdashed"		}
	named dotdotdotdashed   { "/ldiagdotdotdotdashed"	}
	named dotdotdotcdashed  { "/ldiagdotdotdotcdashed"	}
	named dotted            { "/ldiagdotted"		}
	named noline            { "/ldiagnoline"		}
					{ solid         	}
    import @Geometry named pathdashlength { 0.2f		}
    import @Geometry named pathwidth
	named thin   { 0.04 ft }
	named medium { 0.08 ft }
	named thick  { 0.12 ft }
					{ thin	         	}
    import @Geometry named pathgap
	named thin   { 0.08 ft }
	named medium { 0.16 ft }
	named thick  { 0.24 ft }
					{ thin	         	}
    named arrow                 	{ no			}
    named arrowstyle             	{ solid			}
    named arrowwidth             	{ 0.3f			}
    named arrowlength            	{ 0.5f			}
    named backarrowstyle             	{ solid			}
    named backarrowwidth             	{ 0.3f			}
    named backarrowlength            	{ 0.5f			}

    named linklabel			{			}
    named linklabelmargin		{ 0.2f			}
    named linklabelfont			{ -2p			}
    named linklabelbreak		{ ragged nohyphen	}
    named linklabelformat right @Body	{ @Body			}
    import @Geometry named linklabelpos	{ 			}
    import @Geometry named linklabelangle  { horizontal		}
    named linklabelprox			{ above			}
    named linklabelctr			{ no			}
    import @Geometry named linklabeladjust { 0 0		}

    named xlabel			{			}
    named xlabelmargin			{ 			}
    named xlabelfont			{ 			}
    named xlabelbreak			{ 			}
    named xlabelformat right @Body	{ 			}
    import @Geometry named xlabelpos	{ LFROM			}
    import @Geometry named xlabelangle	{ 			}
    named xlabelprox			{ 			}
    named xlabelctr			{			}
    import @Geometry named xlabeladjust	{ 			}

    named ylabel			{			}
    named ylabelmargin			{ 			}
    named ylabelfont			{ 			}
    named ylabelbreak			{ 			}
    named ylabelformat right @Body	{ 			}
    import @Geometry named ylabelpos	{ LMID			}
    import @Geometry named ylabelangle	{ 			}
    named ylabelprox			{ 			}
    named ylabelctr			{ yes			}
    import @Geometry named ylabeladjust	{ 			}

    named zlabel			{			}
    named zlabelmargin			{ 			}
    named zlabelfont			{ 			}
    named zlabelbreak			{ 			}
    named zlabelformat right @Body	{ 			}
    import @Geometry named zlabelpos	{ LTO			}
    import @Geometry named zlabelangle	{ 			}
    named zlabelprox			{ 			}
    named zlabelctr			{			}
    import @Geometry named zlabeladjust	{ 			}

    named fromlabel			{			}
    named fromlabelmargin		{ 0f			}
    named fromlabelfont			{			}
    named fromlabelbreak		{ ragged nohyphen	}
    named fromlabelformat right @Body	{ @Body			}
    import @Geometry named fromlabelpos	{ FROM			}
    import @Geometry named fromlabelangle  { antiparallel	}
    named fromlabelprox			{ W			}
    named fromlabelctr			{ no			}
    import @Geometry named fromlabeladjust { 0 0		}

    named tolabel			{			}
    named tolabelmargin			{ 0f			}
    named tolabelfont			{			}
    named tolabelbreak			{ ragged nohyphen	}
    named tolabelformat right @Body	{ @Body			}
    import @Geometry named tolabelpos	{ TO			}
    import @Geometry named tolabelangle	{ parallel		}
    named tolabelprox			{ W			}
    named tolabelctr			{ no			}
    import @Geometry named tolabeladjust { 0 0			}

    ###########################################################################
    #                                                                         #
    #  Tree and syntax diagram options of @DiagSetup                          #
    #                                                                         #
    ###########################################################################

    named treehsep			{ 0.5f			}
    named treevsep			{ 0.5f			}
    named treehindent
	named left  { 0.0rt }
	named ctr   { 0.5rt }
	named right { 1.0rt }
					{ ctr			}
    named treevindent
	named top   { 0.0rt }
	named ctr   { 0.5rt }
	named foot  { 1.0rt }
					{ ctr			}

    named syntaxgap			{ 0.35f			}
    named syntaxbias			{ 1.0f			}
    named syntaxradius			{ 0.3f			}
{


    ###########################################################################
    #                                                                         #
    #  @Diag symbol                                                           #
    #                                                                         #
    ###########################################################################

    export "::" @ShowPoints @ShowTags @ShowDirections @CatchTags @Transform

           @Node @ANode @BNode @CNode
           @Box @CurveBox @ShadowBox @Square @Diamond @Polygon
	   @Isosceles @Ellipse @Circle
	   @ArrowHead @SolidArrowHead @OpenArrowHead @HalfOpenArrowHead
	   @SolidCurvedArrowHead @OpenCurvedArrowHead @HalfOpenCurvedArrowHead
	   @CircleArrowHead @BoxArrowHead

	   @Link
	   @Line @DoubleLine @Arrow @DoubleArrow @Curve @CurveArrow
	   @ACurve @ACurveArrow @CCurve @CCurveArrow
	   @Bezier @BezierArrow
	   @HVLine @HVArrow @VHLine @VHArrow
	   @HVCurve @HVCurveArrow @VHCurve @VHCurveArrow
	   @LVRLine @LVRArrow @RVLLine @RVLArrow
	   @LVRCurve @LVRCurveArrow @RVLCurve @RVLCurveArrow
	   @HVHLine @HVHArrow @VHVLine @VHVArrow
	   @HVHCurve @HVHCurveArrow @VHVCurve @VHVCurveArrow
	   @DWrapLine @DWrapArrow @UWrapLine @UWrapArrow
	   @DWrapCurve @DWrapCurveArrow @UWrapCurve @UWrapCurveArrow

	   @Tree @HTree

	   @StartRight @StartUp @StartLeft @StartDown
	   @StartRightRight @StartRightRightRight @StartRightDown
	   @Skip @XCell @ACell @BCell @CCell
	   @Sequence @OneOrBoth @Select @Optional @OptionalDiverted @Diverted
	   @Loop @LoopOpposite @Repeat @RepeatOpposite @RepeatDiverted

    def @Diag
	named save		             	{ save	           	}
        named maxlabels             		{ maxlabels     	}
	named title                       	{ title			}
	named titleformat
	    left @Title
	    right @Body
						{ @Title titleformat @Body }

	#######################################################################
	#                                                                     #
	#  @Node options of @Diag                                             #
	#                                                                     #
	#######################################################################

	import @Geometry named outline
	    named margin {}
	    named shadow {}
	    named sides {}
	    named angle {}
						{ outline
						    margin { margin }
						    shadow { shadow }
						    sides  { sides  }
						    angle  { angle  }
						}
        named margin                		{ margin        	}
	import @Geometry named shadow		{ shadow		}
	import @Geometry named sides		{ sides			}
	import @Geometry named angle		{ angle			}
	named translate				{ translate		}
	named nodetag				{			}
        named outlinestyle
	    named solid             { "/ldiagsolid"		}
	    named dashed            { "/ldiagdashed"		}
	    named cdashed           { "/ldiagcdashed"		}
	    named dotdashed         { "/ldiagdotdashed"		}
	    named dotcdashed        { "/ldiagdotcdashed"	}
	    named dotdotdashed      { "/ldiagdotdotdashed"	}
	    named dotdotcdashed     { "/ldiagdotdotcdashed"	}
	    named dotdotdotdashed   { "/ldiagdotdotdotdashed"	}
	    named dotdotdotcdashed  { "/ldiagdotdotdotcdashed"	}
	    named dotted            { "/ldiagdotted"		}
	    named noline            { "/ldiagnoline"		}
						{ outlinestyle     	}
        import @Geometry named outlinedashlength{ outlinedashlength    	}
        import @Geometry named outlinewidth
	    named thin   { 0.04 ft }
	    named medium { 0.08 ft }
	    named thick  { 0.12 ft }
						{ outlinewidth     	}
        named paint                 		{ paint         	}
	import @TextureImport named texture	{ texture		}
	named font				{ font			}
	named break				{ break			}
        named format right @Body    		{ format @Body  	}
        named valign				{ valign        	}
        named vsize                 		{ vsize         	}
        named vindent				{ vindent       	}
        named vstrut
		named no  { 0.0f }
		named yes { 1.0f }
						{ vstrut	 	}
        named vmargin               		{ vmargin       	}
        named topmargin             		{ topmargin     	}
        named footmargin            		{ footmargin    	}
        named halign				{ halign        	}
        named hsize                 		{ hsize         	}
        named hindent				{ hindent       	}
        named hstrut
		named no  { 0.0f }
		named yes { 1.0f }
						{ hstrut	 	}
        named hmargin               		{ hmargin       	}
        named leftmargin            		{ leftmargin    	}
        named rightmargin           		{ rightmargin   	}

	#######################################################################
	#                                                                     #
	#  @ANode options of @Diag                                            #
	#                                                                     #
	#######################################################################

	import @Geometry named aoutline
	    named margin {}
	    named shadow {}
	    named sides {}
	    named angle {}
						{ aoutline
						    margin { margin }
						    shadow { shadow }
						    sides  { sides  }
						    angle  { angle  }
						}
        named amargin                		{ amargin        	}
	import @Geometry named ashadow		{ ashadow		}
	import @Geometry named asides		{ asides		}
	import @Geometry named aangle		{ aangle		}
	named atranslate			{ atranslate		}
	named anodetag				{			}
        named aoutlinestyle
	    named solid             { "/ldiagsolid"		}
	    named dashed            { "/ldiagdashed"		}
	    named cdashed           { "/ldiagcdashed"		}
	    named dotdashed         { "/ldiagdotdashed"		}
	    named dotcdashed        { "/ldiagdotcdashed"	}
	    named dotdotdashed      { "/ldiagdotdotdashed"	}
	    named dotdotcdashed     { "/ldiagdotdotcdashed"	}
	    named dotdotdotdashed   { "/ldiagdotdotdotdashed"	}
	    named dotdotdotcdashed  { "/ldiagdotdotdotcdashed"	}
	    named dotted            { "/ldiagdotted"		}
	    named noline            { "/ldiagnoline"		}
						{ aoutlinestyle     	}
        import @Geometry named aoutlinedashlength{ aoutlinedashlength  	}
        import @Geometry named aoutlinewidth
	    named thin   { 0.04 ft }
	    named medium { 0.08 ft }
	    named thick  { 0.12 ft }
						{ aoutlinewidth     	}
        named apaint                 		{ apaint         	}
	import @TextureImport named atexture	{ atexture		}
	named afont				{ afont			}
	named abreak				{ abreak		}
        named aformat right @Body    		{ aformat @Body  	}
        named avalign				{ avalign        	}
        named avsize                 		{ avsize         	}
        named avindent				{ avindent       	}
        named avstrut
		named no  { 0.0f }
		named yes { 1.0f }
						{ avstrut	 	}
        named avmargin               		{ avmargin       	}
        named atopmargin             		{ atopmargin     	}
        named afootmargin            		{ afootmargin    	}
        named ahalign				{ ahalign        	}
        named ahsize                 		{ ahsize         	}
        named ahindent				{ ahindent       	}
        named ahstrut
		named no  { 0.0f }
		named yes { 1.0f }
						{ ahstrut	 	}
        named ahmargin               		{ ahmargin       	}
        named aleftmargin            		{ aleftmargin    	}
        named arightmargin           		{ arightmargin   	}

	#######################################################################
	#                                                                     #
	#  @BNode options of @Diag                                            #
	#                                                                     #
	#######################################################################

	import @Geometry named boutline
	    named margin {}
	    named shadow {}
	    named sides {}
	    named angle {}
						{ boutline
						    margin { margin }
						    shadow { shadow }
						    sides  { sides  }
						    angle  { angle  }
						}
        named bmargin                		{ bmargin        	}
	import @Geometry named bshadow		{ bshadow		}
	import @Geometry named bsides		{ bsides		}
	import @Geometry named bangle		{ bangle		}
	named btranslate			{ btranslate		}
	named bnodetag				{			}
        named boutlinestyle
	    named solid             { "/ldiagsolid"		}
	    named dashed            { "/ldiagdashed"		}
	    named cdashed           { "/ldiagcdashed"		}
	    named dotdashed         { "/ldiagdotdashed"		}
	    named dotcdashed        { "/ldiagdotcdashed"	}
	    named dotdotdashed      { "/ldiagdotdotdashed"	}
	    named dotdotcdashed     { "/ldiagdotdotcdashed"	}
	    named dotdotdotdashed   { "/ldiagdotdotdotdashed"	}
	    named dotdotdotcdashed  { "/ldiagdotdotdotcdashed"	}
	    named dotted            { "/ldiagdotted"		}
	    named noline            { "/ldiagnoline"		}
						{ boutlinestyle     	}
        import @Geometry named boutlinedashlength{ boutlinedashlength  	}
        import @Geometry named boutlinewidth
	    named thin   { 0.04 ft }
	    named medium { 0.08 ft }
	    named thick  { 0.12 ft }
						{ boutlinewidth     	}
        named bpaint                 		{ bpaint         	}
	import @TextureImport named btexture	{ btexture		}
	named bfont				{ bfont			}
	named bbreak				{ bbreak		}
        named bformat right @Body    		{ bformat @Body  	}
        named bvalign				{ bvalign        	}
        named bvsize                 		{ bvsize         	}
        named bvindent				{ bvindent       	}
        named bvstrut
		named no  { 0.0f }
		named yes { 1.0f }
						{ bvstrut	 	}
        named bvmargin               		{ bvmargin       	}
        named btopmargin             		{ btopmargin     	}
        named bfootmargin            		{ bfootmargin    	}
        named bhalign				{ bhalign        	}
        named bhsize                 		{ bhsize         	}
        named bhindent				{ bhindent       	}
        named bhstrut
		named no  { 0.0f }
		named yes { 1.0f }
						{ bhstrut	 	}
        named bhmargin               		{ bhmargin       	}
        named bleftmargin            		{ bleftmargin    	}
        named brightmargin           		{ brightmargin   	}

	#######################################################################
	#                                                                     #
	#  @CNode options of @Diag                                            #
	#                                                                     #
	#######################################################################

	import @Geometry named coutline
	    named margin {}
	    named shadow {}
	    named sides {}
	    named angle {}
						{ coutline
						    margin { margin }
						    shadow { shadow }
						    sides  { sides  }
						    angle  { angle  }
						}
        named cmargin                		{ cmargin        	}
	import @Geometry named cshadow		{ cshadow		}
	import @Geometry named csides		{ csides		}
	import @Geometry named cangle		{ cangle		}
	named ctranslate			{ ctranslate		}
	named cnodetag				{			}
        named coutlinestyle
	    named solid             { "/ldiagsolid"		}
	    named dashed            { "/ldiagdashed"		}
	    named cdashed           { "/ldiagcdashed"		}
	    named dotdashed         { "/ldiagdotdashed"		}
	    named dotcdashed        { "/ldiagdotcdashed"	}
	    named dotdotdashed      { "/ldiagdotdotdashed"	}
	    named dotdotcdashed     { "/ldiagdotdotcdashed"	}
	    named dotdotdotdashed   { "/ldiagdotdotdotdashed"	}
	    named dotdotdotcdashed  { "/ldiagdotdotdotcdashed"	}
	    named dotted            { "/ldiagdotted"		}
	    named noline            { "/ldiagnoline"		}
						{ coutlinestyle     	}
        import @Geometry named coutlinedashlength{ coutlinedashlength  	}
        import @Geometry named coutlinewidth
	    named thin   { 0.04 ft }
	    named medium { 0.08 ft }
	    named thick  { 0.12 ft }
						{ coutlinewidth     	}
        named cpaint                 		{ cpaint         	}
	import @TextureImport named ctexture	{ ctexture		}
	named cfont				{ cfont			}
	named cbreak				{ cbreak		}
        named cformat right @Body    		{ cformat @Body  	}
        named cvalign				{ cvalign        	}
        named cvsize                 		{ cvsize         	}
        named cvindent				{ cvindent       	}
        named cvstrut
		named no  { 0.0f }
		named yes { 1.0f }
						{ cvstrut	 	}
        named cvmargin               		{ cvmargin       	}
        named ctopmargin             		{ ctopmargin     	}
        named cfootmargin            		{ cfootmargin    	}
        named chalign				{ chalign        	}
        named chsize                 		{ chsize         	}
        named chindent				{ chindent       	}
        named chstrut
		named no  { 0.0f }
		named yes { 1.0f }
						{ chstrut	 	}
        named chmargin               		{ chmargin       	}
        named cleftmargin            		{ cleftmargin    	}
        named crightmargin           		{ crightmargin   	}

	#######################################################################
	#                                                                     #
	#  @Link options of @Diag                                             #
	#                                                                     #
	#######################################################################

	import @Geometry named path
	    named from {}
	    named to {}
	    named bias {}
	    named fbias {}
	    named tbias {}
	    named hfrac {}
	    named hbias {}
	    named radius {}
	    named xindent {}
	    named zindent {}
	    named frompt {}
	    named topt {}
	    named arrow {}
	    named arrowlength {}
	    named backarrowlength {}
						{ path
						    from	{ from }
						    to		{ to   }
						    bias	{ bias }
						    fbias	{ fbias }
						    tbias	{ tbias }
						    hfrac	{ hfrac }
						    hbias	{ hbias }
						    radius	{ radius }
						    xindent	{ xindent }
						    zindent	{ zindent }
						    frompt	{ frompt }
						    topt	{ topt }
						    arrow	{ arrow }
						    arrowlength	{ arrowlength }
						    backarrowlength{ backarrowlength }
						}
	import @Geometry named from		{ from			}
	import @Geometry named to		{ to			}
	import @Geometry named bias		{ bias			}
	import @Geometry named fbias		{ fbias			}
	import @Geometry named tbias		{ tbias			}
	import @Geometry named hfrac		{ hfrac			}
	import @Geometry named hbias		{ hbias			}
	import @Geometry named radius		{ radius		}
	import @Geometry named xindent		{ xindent		}
	import @Geometry named zindent		{ zindent		}
	import @Geometry named frompt		{ frompt		}
	import @Geometry named topt		{ topt			}
        named pathstyle
	    named solid             { "/ldiagsolid"		}
	    named dashed            { "/ldiagdashed"		}
	    named cdashed           { "/ldiagcdashed"		}
	    named dotdashed         { "/ldiagdotdashed"		}
	    named dotcdashed        { "/ldiagdotcdashed"	}
	    named dotdotdashed      { "/ldiagdotdotdashed"	}
	    named dotdotcdashed     { "/ldiagdotdotcdashed"	}
	    named dotdotdotdashed   { "/ldiagdotdotdotdashed"	}
	    named dotdotdotcdashed  { "/ldiagdotdotdotcdashed"	}
	    named dotted            { "/ldiagdotted"		}
	    named noline            { "/ldiagnoline"		}
						{ pathstyle     	}
        import @Geometry named pathdashlength	{ pathdashlength    	}
        import @Geometry named pathwidth
	    named thin   { 0.04 ft }
	    named medium { 0.08 ft }
	    named thick  { 0.12 ft }
						{ pathwidth     	}
        import @Geometry named pathgap
	    named thin   { 0.08 ft }
	    named medium { 0.16 ft }
	    named thick  { 0.24 ft }
						{ pathgap	     	}
	named arrow				{ arrow			}
	named arrowstyle			{ arrowstyle		}
	named arrowwidth			{ arrowwidth		}
	named arrowlength			{ arrowlength		}
	named backarrowstyle			{ backarrowstyle	}
	named backarrowwidth			{ backarrowwidth	}
	named backarrowlength			{ backarrowlength	}

	named nodelabel				{ nodelabel		}
	named nodelabelmargin			{ nodelabelmargin	}
	named nodelabelfont			{ nodelabelfont		}
	named nodelabelbreak			{ nodelabelbreak	}
	named nodelabelformat right @Body	{ nodelabelformat @Body	}
	import @Geometry named nodelabelpos	{ nodelabelpos		}
	named nodelabelprox			{ nodelabelprox		}
	import @Geometry named nodelabelangle	{ nodelabelangle	}
	named nodelabelctr			{ nodelabelctr		}
	import @Geometry named nodelabeladjust	{ nodelabeladjust	}

        named alabel				{ alabel		}
        named alabelmargin			{ alabelmargin		}
        named alabelfont			{ alabelfont		}
        named alabelbreak			{ alabelbreak		}
	named alabelformat right @Body		{ alabelformat @Body	}
        import @Geometry named alabelpos	{ alabelpos		}
        named alabelprox			{ alabelprox		}
        import @Geometry named alabelangle	{ alabelangle		}
	named alabelctr				{ alabelctr		}
        import @Geometry named alabeladjust	{ alabeladjust		}

        named blabel				{ blabel		}
        named blabelmargin			{ blabelmargin		}
        named blabelfont			{ blabelfont		}
        named blabelbreak			{ blabelbreak		}
	named blabelformat right @Body		{ blabelformat @Body	}
        import @Geometry named blabelpos	{ blabelpos		}
        named blabelprox			{ blabelprox		}
        import @Geometry named blabelangle	{ blabelangle		}
	named blabelctr				{ blabelctr		}
        import @Geometry named blabeladjust	{ blabeladjust		}

        named clabel				{ clabel		}
        named clabelmargin			{ clabelmargin		}
        named clabelfont			{ clabelfont		}
        named clabelbreak			{ clabelbreak		}
	named clabelformat right @Body		{ clabelformat @Body	}
        import @Geometry named clabelpos	{ clabelpos		}
        named clabelprox			{ clabelprox		}
        import @Geometry named clabelangle	{ clabelangle		}
	named clabelctr				{ clabelctr		}
        import @Geometry named clabeladjust	{ clabeladjust		}

        named dlabel				{ dlabel		}
        named dlabelmargin			{ dlabelmargin		}
        named dlabelfont			{ dlabelfont		}
        named dlabelbreak			{ dlabelbreak		}
	named dlabelformat right @Body		{ dlabelformat @Body	}
        import @Geometry named dlabelpos	{ dlabelpos		}
        named dlabelprox			{ dlabelprox		}
        import @Geometry named dlabelangle	{ dlabelangle		}
	named dlabelctr				{ dlabelctr		}
        import @Geometry named dlabeladjust	{ dlabeladjust		}

        named fromlabel				{ fromlabel		}
        named fromlabelmargin			{ fromlabelmargin	}
        named fromlabelfont			{ fromlabelfont		}
        named fromlabelbreak			{ fromlabelbreak	}
	named fromlabelformat right @Body	{ fromlabelformat @Body	}
        import @Geometry named fromlabelpos	{ fromlabelpos		}
        named fromlabelprox			{ fromlabelprox		}
        import @Geometry named fromlabelangle	{ fromlabelangle	}
	named fromlabelctr			{ fromlabelctr		}
        import @Geometry named fromlabeladjust	{ fromlabeladjust	}

	named linklabel				{ linklabel		}
	named linklabelmargin			{ linklabelmargin	}
	named linklabelfont			{ linklabelfont		}
	named linklabelbreak			{ linklabelbreak	}
	named linklabelformat right @Body	{ linklabelformat @Body	}
	import @Geometry named linklabelpos	{ linklabelpos		}
	named linklabelprox			{ linklabelprox		}
	import @Geometry named linklabelangle	{ linklabelangle	}
	named linklabelctr			{ linklabelctr		}
	import @Geometry named linklabeladjust	{ linklabeladjust	}

        named xlabel				{ xlabel		}
        named xlabelmargin			{ xlabelmargin		}
        named xlabelfont			{ xlabelfont		}
        named xlabelbreak			{ xlabelbreak		}
	named xlabelformat right @Body		{ xlabelformat @Body	}
        import @Geometry named xlabelpos	{ xlabelpos		}
        named xlabelprox			{ xlabelprox		}
        import @Geometry named xlabelangle	{ xlabelangle		}
	named xlabelctr				{ xlabelctr		}
        import @Geometry named xlabeladjust	{ xlabeladjust		}

        named ylabel				{ ylabel		}
        named ylabelmargin			{ ylabelmargin		}
        named ylabelfont			{ ylabelfont		}
        named ylabelbreak			{ ylabelbreak		}
	named ylabelformat right @Body		{ ylabelformat @Body	}
        import @Geometry named ylabelpos	{ ylabelpos		}
        named ylabelprox			{ ylabelprox		}
        import @Geometry named ylabelangle	{ ylabelangle		}
	named ylabelctr				{ ylabelctr		}
        import @Geometry named ylabeladjust	{ ylabeladjust		}

        named zlabel				{ zlabel		}
        named zlabelmargin			{ zlabelmargin		}
        named zlabelfont			{ zlabelfont		}
        named zlabelbreak			{ zlabelbreak		}
	named zlabelformat right @Body		{ zlabelformat @Body	}
        import @Geometry named zlabelpos	{ zlabelpos		}
        named zlabelprox			{ zlabelprox		}
        import @Geometry named zlabelangle	{ zlabelangle		}
	named zlabelctr				{ zlabelctr		}
        import @Geometry named zlabeladjust	{ zlabeladjust		}

        named tolabel				{ tolabel		}
        named tolabelmargin			{ tolabelmargin		}
        named tolabelfont			{ tolabelfont		}
        named tolabelbreak			{ tolabelbreak		}
	named tolabelformat right @Body		{ tolabelformat @Body	}
        import @Geometry named tolabelpos	{ tolabelpos		}
        named tolabelprox			{ tolabelprox		}
        import @Geometry named tolabelangle	{ tolabelangle		}
	named tolabelctr			{ tolabelctr		}
        import @Geometry named tolabeladjust	{ tolabeladjust		}

	#######################################################################
	#                                                                     #
	#  Tree and syntax diagram options of @Diag                           #
	#                                                                     #
	#######################################################################

	named treehsep				{ treehsep		}
	named treevsep				{ treevsep		}
	named treehindent
	    named left  { 0.0rt }
	    named ctr   { 0.5rt }
	    named right { 1.0rt }
						{ treehindent		}
	named treevindent
	    named top   { 0.0rt }
	    named ctr   { 0.5rt }
	    named foot  { 1.0rt }
						{ treevindent		}
	named syntaxgap				{ syntaxgap		}
	named syntaxbias			{ syntaxbias		}
	named syntaxradius			{ syntaxradius		}
        body @Body
    @Begin


	#######################################################################
	#                                                                     #
	#  Miscellaneous helper definitions                                   #
	#                                                                     #
	#######################################################################

        def @PSAddPaint left col right tex
	{
	  col @Case {
	    { "no" "none" "nopaint" } @Yield "{}"
	    else             @Yield { "{" @ColourCommand col tex "fill }" }
	  }
	}

        # Like @Graphic, but affects the graphics state of right parameter
        def @InnerGraphic
            left ps
            right x
        {
          @BackEnd @Case {
            PostScript @Yield {
              { ps gsave // grestore } @Graphic x
            }
            PDF @Yield {
              { ps q // Q } @Graphic x
            }
          }
        }

	def @BoxLabels right x
	{
          @BackEnd @Case {
            PostScript @Yield {
	        "[ ldiagbox ] pop" @Graphic x
	      }
	      PDF @Yield {}
	    }
	}

	def @IfNonEmpty
	    left x
	    right y
	{
	    x @Case {
		""   @Yield @Null
		else @Yield y
	    }
	}

	def @Else
	    precedence 20
	    associativity right
	    left x
	    right y
	{
	    x @Case {
		""   @Yield y
		else @Yield x
	    }
	}

        def @ShowTags
	    right x
        {
          @BackEnd @Case {
            PostScript @Yield {
            {
	      "() ldiagpushtagdict"
              // "ldiagshowtags ldiagpopuptagdict"
	      } @Graphic x
	      }
	      PDF @Yield {}
	    }
        }

        def @ShowPoints
	    right x
        {
          @BackEnd @Case {
            PostScript @Yield {
            {
	      "() ldiagpushtagdict"
              // "ldiagshowpoints ldiagpopuptagdict"
	      } @Graphic x
	      }
	      PDF @Yield {}
	    }
        }

        def @ShowDirections
	    right x
        {
          @BackEnd @Case {
            PostScript @Yield {
            { "() ldiagpushtagdict"
              // "ldiagshowangles ldiagpopuptagdict" } @Graphic x
	      }
	      PDF @Yield {}
	    }
        }

	def @ShowMarks right x
	{
	  { "xmark -0.5 cm moveto xmark ysize 0.5 cm add lineto stroke" } @Graphic x
	}


        def "::"
            precedence 33
	    associativity right
            left name
	    named restrict {}
            right x
        {

	    def @PushCommand
	    {
		"("name") ldiagpushtagdict"
	    }

	    def @PopCommand
	    {
		restrict @Case {
		  "" @Yield "ldiagpopuptagdict"
		  else @Yield { "[" restrict "] ldiagpopsometagdict" }
		}
		# "ldiagpopuptagdict"
	    }

            @BackEnd @Case {
		PostScript @Yield { {@PushCommand // @PopCommand} @Graphic x }
		PDF @Yield {}
	    }
        }

        def @CatchTags
            precedence 33
	    associativity right
            right x
        {
          @BackEnd @Case {
            PostScript @Yield {
            {
	       "() ldiagpushtagdict"
               // "ldiagpoptagdict"
	      }
	      @Graphic x
	      }
	      PDF @Yield {}
	    }
        }

        def @ZeroWidth right x
        {
	    @HContract @VContract {
            ^|0io @HContract @VContract x |0io
	    }
        }

        def @ZeroSize right x
        {
	    @HContract @VContract {
            ^/0io ^|0io @HContract @VContract x |0io /0io
	    }
        }

	def @FromArrowLength
	    left arrow
	    right arrowlength
	{
        @BackEnd @Case {
          PostScript @Yield {
	    arrow @Case {
		{ no yes forward }   @Yield 0
		{ back both }	     @Yield {"("arrowlength") ldiagdecodelength"}
	    }
	    }
	    PDF @Yield {}
	  }
	}

	def @ToArrowLength
	    left arrow
	    right arrowlength
	{
        @BackEnd @Case {
          PostScript @Yield {
	    arrow @Case {
		{ no back }	     @Yield 0
		{ yes forward both } @Yield {"("arrowlength") ldiagdecodelength"}
	    }
	    }
	    PDF @Yield {}
	  }
	}

	def @AddMargins
	    named mtop {}
	    named mfoot {}
	    named mleft {}
	    named mright {}
	    right x
	{

	    @HContract @VContract {
			 ^|mleft    |mright
		^/mtop    |      x  |
		 /mfoot   |         |
	    }
	}

        def @Transform
            precedence 32
            import @Geometry named translate
#               named to precedence 10 left x right y { x y "ldiagpsub" }
                named to precedence 10 left x right y {
                  @BackEnd @Case {
                    PostScript @Yield { x y "ldiagpsub" }
                    PDF @Yield {""}
                  }
                }
            {}
            import @Geometry named rotate { 0d }
            named scale    { 1 1 }
            right x
        {
          @BackEnd @Case {

            PostScript @Yield {
            { rotate "rotate" scale "scale newpath clip" }
            @InnerGraphic
            {
                @ZeroSize x
            }
            //
            # { rotate "rotate" scale "scale" translate "translate" }
            { translate "translate" rotate "rotate" scale "scale" }
            @InnerGraphic
            {
                @ZeroSize x
            }
	      }

	      PDF @Yield { # presume that "rotate", "scale" and "translate" are not matrices
            { "__cos("rotate") __sin("rotate") __sub(0, __sin("rotate")) __cos("rotate") 0 0 cm"
              "__pick(1, "scale") 0 0 __pick(2, "scale") 0 0 cm n W" }
            @InnerGraphic
            {
                @ZeroSize x
            }
            //
            # { rotate "rotate" scale "scale" translate "translate" }
            { "1 0 0 1 "translate" cm"
              "__cos("rotate") __sin("rotate") __sub(0, __sin("rotate")) __cos("rotate") 0 0 cm"
              "__pick(1, "scale") 0 0 __pick(2, "scale") 0 0 cm" }
            @InnerGraphic
            {
                @ZeroSize x
            }
	      }

	    }
        }


	#######################################################################
	#                                                                     #
	#  @DoLabel definition for drawing one label                          #
	#                                                                     #
	#######################################################################

	def @DoLabel
	    named which				{}
	    named labeltag			{ LABEL }
	    named label				{}
	    named labelmargin			{}
	    named labelfont			{}
	    named labelbreak			{}
	    named labelformat right @Body	{}
	    named labelpos			{}
	    named labelprox			{}
	    named labelangle			{}
	    named labelctr			{}
	    named labeladjust			{}
	{

	    import @Geometry
            def alignedangle
            {
		labelpos??"ANGLE" quadcase 
			0	{ labelpos??"ANGLE"		}
			0-90	{ labelpos??"ANGLE"		}
			90	{ labelpos??"ANGLE"		}
			90-180	{ labelpos??"ANGLE" + 180d	}
			180	{ labelpos??"ANGLE" + 180d	}
			180-270	{ labelpos??"ANGLE" + 180d	}
			270	{ labelpos??"ANGLE" + 180d	}
			270-360	{ labelpos??"ANGLE"		}
	    }

	    import @Geometry
            def perpalignedangle
            {
		labelpos??"ANGLE" quadcase 
			0	{ labelpos??"ANGLE" - 90d	}
			0-90	{ labelpos??"ANGLE" - 90d	}
			90	{ labelpos??"ANGLE" - 90d	}
			90-180	{ labelpos??"ANGLE" - 90d	}
			180	{ labelpos??"ANGLE" + 90d	}
			180-270	{ labelpos??"ANGLE" + 90d	}
			270	{ labelpos??"ANGLE" + 90d	}
			270-360	{ labelpos??"ANGLE" + 90d	}
		    
	    }

	    import @Geometry
            def finalangle
            {
                labelangle @Case {

		    "horizontal"	@Yield { 0d				}
                    "aligned"		@Yield { alignedangle			}
                    "perpendicular"	@Yield { perpalignedangle		}
                    "parallel"		@Yield { labelpos??"ANGLE"		}
                    "antiparallel"	@Yield { labelpos??"ANGLE" + 180d	}
                    else		@Yield labelangle
                }
            }

	    import @Geometry
	    def @AlignedAboveProximity
	    {
		which @Case {
		  { x f } @Yield { labelpos??ANGLE quadcase
				0	{ (SW) }
				0-90	{ (SW) }
				90	{ (SW) }
				90-180	{ (SE) }
				180	{ (SE) }
				180-270	{ (SE) }
				270	{ (SE) }
				270-360	{ (SW) }
			  }
		  { z t } @Yield { labelpos??ANGLE quadcase
				0	{ (SE) }
				0-90	{ (SE) }
				90	{ (SE) }
				90-180	{ (SW) }
				180	{ (SW) }
				180-270	{ (SW) }
				270	{ (SW) }
				270-360	{ (SE) }
			  }
		  else @Yield (S)
		}
	    }

	    import @Geometry
	    def @AlignedBelowProximity
	    {
		which @Case {
		  { x f } @Yield { labelpos??ANGLE quadcase
				0	{ (NW) }
				0-90	{ (NW) }
				90	{ (NW) }
				90-180	{ (NE) }
				180	{ (NE) }
				180-270	{ (NE) }
				270	{ (NE) }
				270-360	{ (NW) }
			  }
		  { z t } @Yield { labelpos??ANGLE quadcase
				0	{ (NE) }
				0-90	{ (NE) }
				90	{ (NE) }
				90-180	{ (NW) }
				180	{ (NW) }
				180-270	{ (NW) }
				270	{ (NW) }
				270-360	{ (NE) }
			  }
		  else @Yield (N)
		}
	    }

	    import @Geometry
	    def @AlignedLeftProximity
	    {
		which @Case {
		  { x f } @Yield { labelpos??ANGLE quadcase
				0	{ (SW) }
				0-90	{ (SW) }
				90	{ (SW) }
				90-180	{ (NE) }
				180	{ (SE) }
				180-270	{ (SE) }
				270	{ (SE) }
				270-360	{ (NW) }
			  }
		  { z t } @Yield { labelpos??ANGLE quadcase
				0	{ (SE) }
				0-90	{ (SE) }
				90	{ (SE) }
				90-180	{ (NW) }
				180	{ (SW) }
				180-270	{ (SW) }
				270	{ (SW) }
				270-360	{ (NE) }
			  }
		  else @Yield { labelpos??ANGLE quadcase
				0	{ (S) }
				0-90	{ (S) }
				90	{ (S) }
				90-180	{ (N) }
				180	{ (S) }
				180-270	{ (S) }
				270	{ (S) }
				270-360	{ (N) }
			  }
		}
	    }

	    import @Geometry
	    def @AlignedRightProximity
	    {
		which @Case {
		  { x f } @Yield { labelpos??ANGLE quadcase
				0	{ (SW) }
				0-90	{ (NW) }
				90	{ (NW) }
				90-180	{ (SE) }
				180	{ (SE) }
				180-270	{ (NE) }
				270	{ (NE) }
				270-360	{ (SW) }
			  }
		  { z t } @Yield { labelpos??ANGLE quadcase
				0	{ (SE) }
				0-90	{ (NE) }
				90	{ (NE) }
				90-180	{ (SW) }
				180	{ (SW) }
				180-270	{ (NW) }
				270	{ (NW) }
				270-360	{ (SE) }
			  }
		  else @Yield { labelpos??ANGLE quadcase
				0	{ (S) }
				0-90	{ (N) }
				90	{ (N) }
				90-180	{ (S) }
				180	{ (S) }
				180-270	{ (N) }
				270	{ (N) }
				270-360	{ (S) }
			  }
		}
	    }

	    import @Geometry
	    def @AlignedInsideProximity
	    {
		which @Case {
		  { x f } @Yield { labelpos??ANGLE quadcase
				0	{ (SW) }
				0-90	{ (SW) }
				90	{ (SW) }
				90-180	{ (NE) }
				180	{ (NE) }
				180-270	{ (NE) }
				270	{ (NE) }
				270-360	{ (SW) }
			  }
		  { z t } @Yield { labelpos??ANGLE quadcase
				0	{ (SE) }
				0-90	{ (SE) }
				90	{ (SE) }
				90-180	{ (NW) }
				180	{ (NW) }
				180-270	{ (NW) }
				270	{ (NW) }
				270-360	{ (SE) }
			  }
		  else @Yield { labelpos??ANGLE quadcase
				0	{ (S) }
				0-90	{ (S) }
				90	{ (S) }
				90-180	{ (N) }
				180	{ (N) }
				180-270	{ (N) }
				270	{ (N) }
				270-360	{ (S) }
			  }
		}
	    }

	    import @Geometry
	    def @AlignedOutsideProximity
	    {
		which @Case {
		  { x f } @Yield { labelpos??ANGLE quadcase
				0	{ (NW) }
				0-90	{ (NW) }
				90	{ (NW) }
				90-180	{ (SE) }
				180	{ (SE) }
				180-270	{ (SE) }
				270	{ (SE) }
				270-360	{ (NW) }
			  }
		  { z t } @Yield { labelpos??ANGLE quadcase
				0	{ (NE) }
				0-90	{ (NE) }
				90	{ (NE) }
				90-180	{ (SW) }
				180	{ (SW) }
				180-270	{ (SW) }
				270	{ (SW) }
				270-360	{ (NE) }
			  }
		  else @Yield { labelpos??ANGLE quadcase
				0	{ (N) }
				0-90	{ (N) }
				90	{ (N) }
				90-180	{ (S) }
				180	{ (S) }
				180-270	{ (S) }
				270	{ (S) }
				270-360	{ (N) }
			  }
		}
	    }


	    import @Geometry
	    def @PerpendicularAboveProximity
	    {
		which @Case {
		  { x f } @Yield { labelpos??ANGLE quadcase
				0	{ (SE) }
				0-90	{ (SE) }
				90	{ (SE) }
				90-180	{ (SW) }
				180	{ (NE) }
				180-270	{ (NE) }
				270	{ (NE) }
				270-360	{ (NW) }
			  }
		  { z t } @Yield { labelpos??ANGLE quadcase
				0	{ (NE) }
				0-90	{ (NE) }
				90	{ (NE) }
				90-180	{ (NW) }
				180	{ (SE) }
				180-270	{ (SE) }
				270	{ (SE) }
				270-360	{ (SW) }
			  }
		  else @Yield { labelpos??ANGLE quadcase
				0	{ (E) }
				0-90	{ (E) }
				90	{ (E) }
				90-180	{ (W) }
				180	{ (E) }
				180-270	{ (E) }
				270	{ (E) }
				270-360	{ (W) }
			  }
		}
	    }

	    import @Geometry
	    def @PerpendicularBelowProximity
	    {
		which @Case {
		  { x f } @Yield { labelpos??ANGLE quadcase
				0	{ (SW) }
				0-90	{ (SW) }
				90	{ (SW) }
				90-180	{ (SE) }
				180	{ (NW) }
				180-270	{ (NW) }
				270	{ (NW) }
				270-360	{ (NE) }
			  }
		  { z t } @Yield { labelpos??ANGLE quadcase
				0	{ (NW) }
				0-90	{ (NW) }
				90	{ (NW) }
				90-180	{ (NE) }
				180	{ (SW) }
				180-270	{ (SW) }
				270	{ (SW) }
				270-360	{ (SE) }
			  }
		  else @Yield { labelpos??ANGLE quadcase
				0	{ (W) }
				0-90	{ (W) }
				90	{ (W) }
				90-180	{ (E) }
				180	{ (W) }
				180-270	{ (W) }
				270	{ (W) }
				270-360	{ (E) }
			  }
		}
	    }

	    import @Geometry
	    def @PerpendicularLeftProximity
	    {
		which @Case {
		  { x f } @Yield { labelpos??ANGLE quadcase
				0	{ (SE) }
				0-90	{ (SE) }
				90	{ (SE) }
				90-180	{ (SE) }
				180	{ (NE) }
				180-270	{ (NE) }
				270	{ (NE) }
				270-360	{ (NE) }
			  }
		  { z t } @Yield { labelpos??ANGLE quadcase
				0	{ (NE) }
				0-90	{ (NE) }
				90	{ (NE) }
				90-180	{ (NE) }
				180	{ (SE) }
				180-270	{ (SE) }
				270	{ (SE) }
				270-360	{ (SE) }
			  }
		  else @Yield (E)
		}
	    }

	    import @Geometry
	    def @PerpendicularRightProximity
	    {
		which @Case {
		  { x f } @Yield { labelpos??ANGLE quadcase
				0	{ (SW) }
				0-90	{ (SW) }
				90	{ (SW) }
				90-180	{ (SW) }
				180	{ (NW) }
				180-270	{ (NW) }
				270	{ (NW) }
				270-360	{ (NW) }
			  }
		  { z t } @Yield { labelpos??ANGLE quadcase
				0	{ (NW) }
				0-90	{ (NW) }
				90	{ (NW) }
				90-180	{ (NW) }
				180	{ (SW) }
				180-270	{ (SW) }
				270	{ (SW) }
				270-360	{ (SW) }
			  }
		  else @Yield (W)
		}
	    }

	    import @Geometry
	    def @PerpendicularInsideProximity
	    {
		which @Case {
		  { x f } @Yield { labelpos??ANGLE quadcase
				0	{ (SE) }
				0-90	{ (SE) }
				90	{ (SE) }
				90-180	{ (SE) }
				180	{ (NW) }
				180-270	{ (NW) }
				270	{ (NW) }
				270-360	{ (NW) }
			  }
		  { z t } @Yield { labelpos??ANGLE quadcase
				0	{ (NE) }
				0-90	{ (NE) }
				90	{ (NE) }
				90-180	{ (NE) }
				180	{ (SW) }
				180-270	{ (SW) }
				270	{ (SW) }
				270-360	{ (SW) }
			  }
		  else @Yield { labelpos??ANGLE quadcase
				0	{ (E) }
				0-90	{ (E) }
				90	{ (E) }
				90-180	{ (E) }
				180	{ (W) }
				180-270	{ (W) }
				270	{ (W) }
				270-360	{ (W) }
			  }
		}
	    }

	    import @Geometry
	    def @PerpendicularOutsideProximity
	    {
		which @Case {
		  { x f } @Yield { labelpos??ANGLE quadcase
				0	{ (SW) }
				0-90	{ (SW) }
				90	{ (SW) }
				90-180	{ (SW) }
				180	{ (NE) }
				180-270	{ (NE) }
				270	{ (NE) }
				270-360	{ (NE) }
			  }
		  { z t } @Yield { labelpos??ANGLE quadcase
				0	{ (NW) }
				0-90	{ (NW) }
				90	{ (NW) }
				90-180	{ (NW) }
				180	{ (SE) }
				180-270	{ (SE) }
				270	{ (SE) }
				270-360	{ (SE) }
			  }
		  else @Yield { labelpos??ANGLE quadcase
				0	{ (W) }
				0-90	{ (W) }
				90	{ (W) }
				90-180	{ (W) }
				180	{ (E) }
				180-270	{ (E) }
				270	{ (E) }
				270-360	{ (E) }
			  }
		}
	    }


	    import @Geometry
	    def @OtherAboveProximity
	    {
		which @Case {
		  { x f } @Yield { labelpos??ANGLE quadcase
				0	{ (SW) }
				0-90	{ (SE) }
				90	{ (SW) }
				90-180	{ (SW) }
				180	{ (SE) }
				180-270	{ (SE) }
				270	{ (NW) }
				270-360	{ (SW) }
			  }
		  { z t } @Yield { labelpos??ANGLE quadcase
				0	{ (SE) }
				0-90	{ (SE) }
				90	{ (NW) }
				90-180	{ (SW) }
				180	{ (SW) }
				180-270	{ (SE) }
				270	{ (SW) }
				270-360	{ (SW) }
			  }
		  else @Yield { labelpos??ANGLE quadcase
				0	{ (S) }
				0-90	{ (SE) }
				90	{ (W) }
				90-180	{ (SW) }
				180	{ (S) }
				180-270	{ (SE) }
				270	{ (W) }
				270-360	{ (SW) }
			  }
		}
	    }

	    import @Geometry
	    def @OtherBelowProximity
	    {
		which @Case {
		  { x f } @Yield { labelpos??ANGLE quadcase
				0	{ (NW) }
				0-90	{ (NW) }
				90	{ (SW) }
				90-180	{ (NE) }
				180	{ (NE) }
				180-270	{ (NW) }
				270	{ (NW) }
				270-360	{ (NE) }
			  }
		  { z t } @Yield { labelpos??ANGLE quadcase
				0	{ (NE) }
				0-90	{ (NW) }
				90	{ (NW) }
				90-180	{ (NE) }
				180	{ (NW) }
				180-270	{ (NW) }
				270	{ (SW) }
				270-360	{ (NE) }
			  }
		  else @Yield { labelpos??ANGLE quadcase
				0	{ (N) }
				0-90	{ (NW) }
				90	{ (W) }
				90-180	{ (NE) }
				180	{ (N) }
				180-270	{ (NW) }
				270	{ (W) }
				270-360	{ (NE) }
			  }
		}
	    }

	    import @Geometry
	    def @OtherLeftProximity
	    {
		which @Case {
		  { x f } @Yield { labelpos??ANGLE quadcase
				0	{ (SW) }
				0-90	{ (SE) }
				90	{ (SE) }
				90-180	{ (NE) }
				180	{ (SE) }
				180-270	{ (SE) }
				270	{ (NE) }
				270-360	{ (NE) }
			  }
		  { z t } @Yield { labelpos??ANGLE quadcase
				0	{ (SE) }
				0-90	{ (SE) }
				90	{ (NE) }
				90-180	{ (NE) }
				180	{ (SW) }
				180-270	{ (SE) }
				270	{ (SE) }
				270-360	{ (NE) }
			  }
		  else @Yield { labelpos??ANGLE quadcase
				0	{ (S) }
				0-90	{ (SE) }
				90	{ (E) }
				90-180	{ (NE) }
				180	{ (S) }
				180-270	{ (SE) }
				270	{ (E) }
				270-360	{ (NE) }
			  }
		}
	    }

	    import @Geometry
	    def @OtherRightProximity
	    {
		which @Case {
		  { x f } @Yield { labelpos??ANGLE quadcase
				0	{ (SW) }
				0-90	{ (NW) }
				90	{ (SW) }
				90-180	{ (SW) }
				180	{ (SE) }
				180-270	{ (NW) }
				270	{ (NW) }
				270-360	{ (SW) }
			  }
		  { z t } @Yield { labelpos??ANGLE quadcase
				0	{ (SE) }
				0-90	{ (NW) }
				90	{ (NW) }
				90-180	{ (SW) }
				180	{ (SW) }
				180-270	{ (NW) }
				270	{ (SW) }
				270-360	{ (SW) }
			  }
		  else @Yield { labelpos??ANGLE quadcase
				0	{ (S) }
				0-90	{ (NW) }
				90	{ (W) }
				90-180	{ (SW) }
				180	{ (S) }
				180-270	{ (NW) }
				270	{ (W) }
				270-360	{ (SW) }
			  }
		}
	    }

	    import @Geometry
	    def @OtherInsideProximity
	    {
		which @Case {
		  { x f } @Yield { labelpos??ANGLE quadcase
				0	{ (SW) }
				0-90	{ (SE) }
				90	{ (SE) }
				90-180	{ (NE) }
				180	{ (NE) }
				180-270	{ (NW) }
				270	{ (NW) }
				270-360	{ (SW) }
			  }
		  { z t } @Yield { labelpos??ANGLE quadcase
				0	{ (SE) }
				0-90	{ (SE) }
				90	{ (NE) }
				90-180	{ (NE) }
				180	{ (NW) }
				180-270	{ (NW) }
				270	{ (SW) }
				270-360	{ (SW) }
			  }
		  else @Yield { labelpos??ANGLE quadcase
				0	{ (S) }
				0-90	{ (SE) }
				90	{ (E) }
				90-180	{ (NE) }
				180	{ (N) }
				180-270	{ (NW) }
				270	{ (W) }
				270-360	{ (SW) }
			  }
		}
	    }

	    import @Geometry
	    def @OtherOutsideProximity
	    {
		which @Case {
		  { x f } @Yield { labelpos??ANGLE quadcase
				0	{ (NW) }
				0-90	{ (NW) }
				90	{ (SW) }
				90-180	{ (SW) }
				180	{ (SE) }
				180-270	{ (SE) }
				270	{ (NE) }
				270-360	{ (NE) }
			  }
		  { z t } @Yield { labelpos??ANGLE quadcase
				0	{ (NE) }
				0-90	{ (NW) }
				90	{ (NW) }
				90-180	{ (SW) }
				180	{ (SW) }
				180-270	{ (SE) }
				270	{ (SE) }
				270-360	{ (NE) }
			  }
		  else @Yield { labelpos??ANGLE quadcase
				0	{ (N) }
				0-90	{ (NW) }
				90	{ (W) }
				90-180	{ (SW) }
				180	{ (S) }
				180-270	{ (SE) }
				270	{ (E) }
				270-360	{ (NE) }
			  }
		}
	    }


	    import @Geometry
	    def @AboveProximity
	    {
                labelangle @Case {
                    "aligned"		@Yield @AlignedAboveProximity
		    "perpendicular"	@Yield @PerpendicularAboveProximity
                    else		@Yield @OtherAboveProximity
                }
	    }

	    import @Geometry
	    def @BelowProximity
	    {
                labelangle @Case {
                    "aligned"		@Yield @AlignedBelowProximity
		    "perpendicular"	@Yield @PerpendicularBelowProximity
                    else		@Yield @OtherBelowProximity
                }
	    }

	    import @Geometry
	    def @LeftProximity
	    {
                labelangle @Case {
                    "aligned"		@Yield @AlignedLeftProximity
		    "perpendicular"	@Yield @PerpendicularLeftProximity
                    else		@Yield @OtherLeftProximity
                }
	    }

	    import @Geometry
	    def @RightProximity
	    {
                labelangle @Case {
                    "aligned"		@Yield @AlignedRightProximity
		    "perpendicular"	@Yield @PerpendicularRightProximity
                    else		@Yield @OtherRightProximity
                }
	    }

	    import @Geometry
	    def @InsideProximity
	    {
                labelangle @Case {
                    "aligned"		@Yield @AlignedInsideProximity
		    "perpendicular"	@Yield @PerpendicularInsideProximity
                    else		@Yield @OtherInsideProximity
                }
	    }

	    import @Geometry
	    def @OutsideProximity
	    {
                labelangle @Case {
                    "aligned"		@Yield @AlignedOutsideProximity
		    "perpendicular"	@Yield @PerpendicularOutsideProximity
                    else		@Yield @OtherOutsideProximity
                }
	    }

	    import @Geometry
            def proximity
            {
                labelprox @Case {
                    above   @Yield @AboveProximity
                    below   @Yield @BelowProximity
                    left    @Yield @LeftProximity
                    right   @Yield @RightProximity
                    inside  @Yield @InsideProximity
                    outside @Yield @OutsideProximity
		    else    @Yield { "("labelprox")" }
                }
            }

	    import @Geometry
	    def dorotate
		left point
		right angle
	    {
		{ {0 0} distance point } atangle { {0 0} angleto point + angle }
	    }

	    import @Geometry
	    def translation
	    {
		labelctr @Case {
		    { no No } @Yield {
			labelpos -- labeltag?!?proximity
		    }
		    { yes Yes } @Yield {
			#P0	:= labelpos
			#P1	:= labeltag?!?proximity -- P0
			#P2	:= labeltag??CTR -- P0
			#TH	:= labelpos??ANGLE
			#P1A	:= P1 dorotate { 0 - TH }
			#P2A	:= P2 dorotate { 0 - TH }
			#PRA	:= { 0 - xcoord P2A 0 - ycoord P1A }
			#PRA dorotate TH ++ P0
			XP1	:= labeltag?!?proximity
			XP2	:= labeltag??CTR
			XANG	:= labelpos??ANGLE
			XTH	:= XANG - 90d - { XP1 angleto XP2 }
			XDIST	:= { XP1 distance XP2 } * sin XTH
			labelpos -- XP1 ++ XDIST atangle XANG
		    }
		}
	    }

	    @CatchTags @ZeroSize @Transform
		translate { translation ++ labeladjust }
		rotate { finalangle }
		scale { 1 1 }
	    labeltag:: @BoxLabels @CatchTags @AddMargins
		mtop { labelmargin }
		mfoot { labelmargin }
		mleft { labelmargin }
		mright { labelmargin }
	    labelfont @Font labelbreak @Break labelformat label
	}


	#######################################################################
	#                                                                     #
	#  @Node                                                              #
	#                                                                     #
	#######################################################################

        def @Node
            import @Geometry named translate
                named to precedence 10 left x right y {
                  @BackEnd @Case {
                    PostScript @Yield { x y "ldiagpsub" }
                    PDF @Yield {""}
                  }
                }
            {}
            import @Geometry named rotate	{ 0d			}
	    import @Geometry named outline
		named margin {}
		named shadow {}
		named sides {}
		named angle {}
						{ outline
						    margin { margin }
						    shadow { shadow }
						    sides  { sides  }
						    angle  { angle  }
						}
	    named margin               		{ margin        	}
	    import @Geometry named shadow	{ shadow		}
	    import @Geometry named sides	{ sides			}
	    import @Geometry named angle	{ angle			}
	    named nodetag			{ nodetag		}
            named outlinestyle
		named solid             { "/ldiagsolid"			}
		named dashed            { "/ldiagdashed"		}
		named cdashed           { "/ldiagcdashed"		}
		named dotdashed         { "/ldiagdotdashed"		}
		named dotcdashed        { "/ldiagdotcdashed"		}
		named dotdotdashed      { "/ldiagdotdotdashed"		}
		named dotdotcdashed     { "/ldiagdotdotcdashed"		}
		named dotdotdotdashed   { "/ldiagdotdotdotdashed"	}
		named dotdotdotcdashed  { "/ldiagdotdotdotcdashed"	}
		named dotted            { "/ldiagdotted"		}
		named noline            { "/ldiagnoline"		}
						{ outlinestyle     	}
            import @Geometry named outlinedashlength { outlinedashlength}
            import @Geometry named outlinewidth
		named thin   { 0.04 ft }
		named medium { 0.08 ft }
		named thick  { 0.12 ft }
						{ outlinewidth     	}
            named paint				{ paint         	}
            import @TextureImport named texture	{ texture         	}
	    named font				{ font			}
	    named break				{ break			}
            named format right @Body		{ format @Body  	}
            named valign			{ valign        	}
            named vsize				{ vsize         	}
            named vindent			{ vindent       	}
	    named vstrut
		named no  { 0.0f }
		named yes { 1.0f }
						{ vstrut	 	}
            named vmargin			{ vmargin       	}
            named topmargin			{ topmargin     	}
            named footmargin			{ footmargin    	}

            named halign			{ halign        	}
            named hsize				{ hsize         	}
            named hindent			{ hindent       	}
	    named hstrut
		named no  { 0.0f }
		named yes { 1.0f }
						{ hstrut	 	}
            named hmargin			{ hmargin       	}
            named leftmargin			{ leftmargin    	}
            named rightmargin			{ rightmargin   	}

	    named nodelabel			{ nodelabel		}
	    named nodelabelmargin		{ nodelabelmargin	}
	    named nodelabelfont			{ nodelabelfont		}
	    named nodelabelbreak		{ nodelabelbreak	}
	    named nodelabelformat right @Body	{ nodelabelformat @Body	}
	    import @Geometry named nodelabelpos	{ nodelabelpos		}
	    named nodelabelprox			{ nodelabelprox		}
	    import @Geometry named nodelabelangle  { nodelabelangle	}
	    named nodelabelctr			{ nodelabelctr		}
	    import @Geometry named nodelabeladjust { nodelabeladjust	}

            named alabel			{ alabel		}
            named alabelmargin			{ alabelmargin		}
            named alabelfont			{ alabelfont		}
            named alabelbreak			{ alabelbreak		}
	    named alabelformat right @Body	{ alabelformat @Body	}
            import @Geometry named alabelpos	{ alabelpos		}
            named alabelprox			{ alabelprox		}
            import @Geometry named alabelangle	{ alabelangle		}
	    named alabelctr			{ alabelctr		}
            import @Geometry named alabeladjust	{ alabeladjust		}

            named blabel			{ blabel		}
            named blabelmargin			{ blabelmargin		}
            named blabelfont			{ blabelfont		}
            named blabelbreak			{ blabelbreak		}
	    named blabelformat right @Body	{ blabelformat @Body	}
            import @Geometry named blabelpos	{ blabelpos		}
            named blabelprox			{ blabelprox		}
            import @Geometry named blabelangle	{ blabelangle		}
	    named blabelctr			{ blabelctr		}
            import @Geometry named blabeladjust	{ blabeladjust		}

            named clabel			{ clabel		}
            named clabelmargin			{ clabelmargin		}
            named clabelfont			{ clabelfont		}
            named clabelbreak			{ clabelbreak		}
	    named clabelformat right @Body	{ clabelformat @Body	}
            import @Geometry named clabelpos	{ clabelpos		}
            named clabelprox			{ clabelprox		}
            import @Geometry named clabelangle	{ clabelangle		}
	    named clabelctr			{ clabelctr		}
            import @Geometry named clabeladjust	{ clabeladjust		}

            named dlabel			{ dlabel		}
            named dlabelmargin			{ dlabelmargin		}
            named dlabelfont			{ dlabelfont		}
            named dlabelbreak			{ dlabelbreak		}
	    named dlabelformat right @Body	{ dlabelformat @Body	}
            import @Geometry named dlabelpos	{ dlabelpos		}
            named dlabelprox			{ dlabelprox		}
            import @Geometry named dlabelangle	{ dlabelangle		}
	    named dlabelctr			{ dlabelctr		}
            import @Geometry named dlabeladjust	{ dlabeladjust		}

            right @Body
        {

            def @LabelPos
		left x
		right y
            {
		nodelabelpos @Case {
		    x    @Yield y
		    else @Yield ""
		}
            }

            def @If
		left cond
		right x
            {
		cond @Case {
		    { yes Yes } @Yield x
		    else        @Yield ""
		}
            }


            def @Strut right x
            {
		def vs { 0.5w @VShift { vstrut @High } }
		def hs {                hstrut @Wide   }

		@HContract @VContract {
		    @HContract @VContract x | vs / hs |
		}
            }

	    def @Indent right x
	    {
		x @Case {
		    { top left   } @Yield 0.0rt
		    { ctr        } @Yield 0.5rt
		    { foot right } @Yield 1.0rt
		    { mctr	     } @Yield 0.5bx
		    else           @Yield x
		}
	    }

            def @VSize right x
            {
		vsize @Case {
		    ""   @Yield x
		    else @Yield { vsize @High { /{@Indent vindent} x / } }
		}
            }

            def @HSize right x
            {
		hsize @Case {
		    ""   @Yield x
		    else @Yield { hsize @Wide { |{@Indent hindent} x | } }
		}
            }

	    def @Align right x
	    {
		x @Case {
		    { top left   } @Yield 0.0w
		    { ctr        } @Yield 0.5w
		    { foot right } @Yield 1.0w
		    { mark       } @Yield "+0i"
		    else           @Yield x
		}
	    }

	    def @ALabel
	    {
		@DoLabel
		    which	{ "a"						}
		    label	{ alabel	     @Else nodelabel		}
		    labelmargin	{ alabelmargin	     @Else nodelabelmargin	}
		    labelfont	{ alabelfont	     @Else nodelabelfont	}
		    labelbreak	{ alabelbreak	     @Else nodelabelbreak	}
		    labelformat { alabelformat @Body @Else nodelabelformat @Body}
		    labelpos	{ alabelpos	     @Else nodelabelpos		}
		    labelprox	{ alabelprox	     @Else nodelabelprox	}
		    labelangle	{ alabelangle	     @Else nodelabelangle	}
		    labelctr	{ alabelctr	     @Else nodelabelctr		}
		    labeladjust	{ alabeladjust	     @Else nodelabeladjust	}
	    }

	    def @BLabel
	    {
		@DoLabel
		    which	{ "b"						}
		    label	{ blabel	     @Else nodelabel		}
		    labelmargin	{ blabelmargin	     @Else nodelabelmargin	}
		    labelfont	{ blabelfont	     @Else nodelabelfont	}
		    labelbreak	{ blabelbreak	     @Else nodelabelbreak	}
		    labelformat { blabelformat @Body @Else nodelabelformat @Body}
		    labelpos	{ blabelpos	     @Else nodelabelpos		}
		    labelprox	{ blabelprox	     @Else nodelabelprox	}
		    labelangle	{ blabelangle	     @Else nodelabelangle	}
		    labelctr	{ blabelctr	     @Else nodelabelctr		}
		    labeladjust	{ blabeladjust	     @Else nodelabeladjust	}
	    }

	    def @CLabel
	    {
		@DoLabel
		    which	{ "c"						}
		    label	{ clabel	     @Else nodelabel		}
		    labelmargin	{ clabelmargin	     @Else nodelabelmargin	}
		    labelfont	{ clabelfont	     @Else nodelabelfont	}
		    labelbreak	{ clabelbreak	     @Else nodelabelbreak	}
		    labelformat { clabelformat @Body @Else nodelabelformat @Body}
		    labelpos	{ clabelpos	     @Else nodelabelpos		}
		    labelprox	{ clabelprox	     @Else nodelabelprox	}
		    labelangle	{ clabelangle	     @Else nodelabelangle	}
		    labelctr	{ clabelctr	     @Else nodelabelctr		}
		    labeladjust	{ clabeladjust	     @Else nodelabeladjust	}
	    }

	    def @DLabel
	    {
		@DoLabel
		    which	{ "d"						}
		    label	{ dlabel	     @Else nodelabel		}
		    labelmargin	{ dlabelmargin	     @Else nodelabelmargin	}
		    labelfont	{ dlabelfont	     @Else nodelabelfont	}
		    labelbreak	{ dlabelbreak	     @Else nodelabelbreak	}
		    labelformat { dlabelformat @Body @Else nodelabelformat @Body}
		    labelpos	{ dlabelpos	     @Else nodelabelpos		}
		    labelprox	{ dlabelprox	     @Else nodelabelprox	}
		    labelangle	{ dlabelangle	     @Else nodelabelangle	}
		    labelctr	{ dlabelctr	     @Else nodelabelctr		}
		    labeladjust	{ dlabeladjust	     @Else nodelabeladjust	}
	    }

	    import @Geometry
	    def @OutLine
	    {
	      @BackEnd @Case {
	        PostScript @Yield {
		outline @Case {
		    box		@Yield { "ldiagbox"			}
		    curvebox	@Yield { "("margin") ldiagcurvebox"	}
		    shadowbox	@Yield { shadow "ldiagshadow ldiagbox"	}
		    square	@Yield { "ldiagsquare"			}
		    diamond	@Yield { "ldiagdiamond"			}
		    polygon	@Yield { sides angle "ldiagpolygon"	}
		    isosceles	@Yield { "ldiagisosceles"		}
		    ellipse	@Yield { "ldiagellipse"			}
		    circle	@Yield { "ldiagcircle"			}
		    else	    @Yield {
				    outline
					margin { "("margin") ldiagdecodelength" }
					shadow { shadow }
					sides  { sides  }
					angle  { angle  }
		    }
		}
		  }
		  PDF @Yield {}
		}
	    }

	    def @Value
            {
              @BackEnd @Case {
                PostScript @Yield {
		@HContract @VContract
		{
		    {
			"ldiagnodebegin [" @OutLine "]"
			outlinedashlength "[" outlinestyle "]"
			outlinewidth paint @PSAddPaint texture "ldiagnodeend"
			"(IN) ldiagpushtagdict"
			//
			"ldiagpopuptagdict"
		    }
		    @Graphic
		    {
			{@Align valign} @VShift {@Align halign} @HShift
			@AddMargins
			    mtop   { topmargin   @Else vmargin @Else margin }
			    mfoot  { footmargin  @Else vmargin @Else margin }
			    mleft  { leftmargin  @Else hmargin @Else margin }
			    mright { rightmargin @Else hmargin @Else margin }
			    @HSize @VSize @HContract @VContract
			    font @Font break @Break format @Strut @Body
		    }
		    / {alabel @Else nodelabel} @IfNonEmpty @ALabel
		    / {blabel @Else nodelabel} @IfNonEmpty @BLabel
		    / {clabel @Else nodelabel} @IfNonEmpty @CLabel
		    / {dlabel @Else nodelabel} @IfNonEmpty @DLabel
		}
                }
                PDF @Yield {}
              }
            }

	    def @TValue
	    {
		nodetag @Case {
		    ""   @Yield @Value
		    else @Yield { nodetag:: @Value }
		}
	    }

            translate @Case {
                  "" @Yield @TValue
                  else @Yield {
		    @Null & # so that preceding space gets chewed up
                    @Transform translate { translate } rotate { rotate } @TValue
                  }
            }
        }


	#######################################################################
	#                                                                     #
	#  @ANode                                                             #
	#                                                                     #
	#######################################################################

        def @ANode
            import @Geometry named translate
                named to precedence 10 left x right y {
                  @BackEnd @Case {
                    PostScript @Yield { x y "ldiagpsub" }
                    PDF @Yield {""}
                  }
                }
            {}
            import @Geometry named rotate	{ 0d			}
	    import @Geometry named outline
		named margin {}
		named shadow {}
		named sides {}
		named angle {}
						{ aoutline
						    margin { margin }
						    shadow { shadow }
						    sides  { sides  }
						    angle  { angle  }
						}
	    named margin               		{ amargin        	}
	    import @Geometry named shadow	{ ashadow		}
	    import @Geometry named sides	{ asides		}
	    import @Geometry named angle	{ aangle		}
	    named nodetag			{ anodetag		}
            named outlinestyle
		named solid             { "/ldiagsolid"			}
		named dashed            { "/ldiagdashed"		}
		named cdashed           { "/ldiagcdashed"		}
		named dotdashed         { "/ldiagdotdashed"		}
		named dotcdashed        { "/ldiagdotcdashed"		}
		named dotdotdashed      { "/ldiagdotdotdashed"		}
		named dotdotcdashed     { "/ldiagdotdotcdashed"		}
		named dotdotdotdashed   { "/ldiagdotdotdotdashed"	}
		named dotdotdotcdashed  { "/ldiagdotdotdotcdashed"	}
		named dotted            { "/ldiagdotted"		}
		named noline            { "/ldiagnoline"		}
						{ aoutlinestyle     	}
            import @Geometry named outlinedashlength { aoutlinedashlength}
            import @Geometry named outlinewidth
		named thin   { 0.04 ft }
		named medium { 0.08 ft }
		named thick  { 0.12 ft }
						{ aoutlinewidth     	}
            named paint				{ apaint         	}
            import @TextureImport named texture	{ atexture         	}
	    named font				{ afont			}
	    named break				{ abreak			}
            named format right @Body		{ aformat @Body  	}
            named valign			{ avalign        	}
            named vsize				{ avsize         	}
            named vindent			{ avindent       	}
	    named vstrut
		named no  { 0.0f }
		named yes { 1.0f }
						{ avstrut	 	}
            named vmargin			{ avmargin       	}
            named topmargin			{ atopmargin     	}
            named footmargin			{ afootmargin    	}

            named halign			{ ahalign        	}
            named hsize				{ ahsize         	}
            named hindent			{ ahindent       	}
	    named hstrut
		named no  { 0.0f }
		named yes { 1.0f }
						{ ahstrut	 	}
            named hmargin			{ ahmargin       	}
            named leftmargin			{ aleftmargin    	}
            named rightmargin			{ arightmargin   	}

	    named nodelabel			{ anodelabel		}
	    named nodelabelmargin		{ anodelabelmargin	}
	    named nodelabelfont			{ anodelabelfont		}
	    named nodelabelbreak		{ anodelabelbreak	}
	    named nodelabelformat right @Body	{ anodelabelformat @Body	}
	    import @Geometry named nodelabelpos	{ anodelabelpos		}
	    named nodelabelprox			{ anodelabelprox		}
	    import @Geometry named nodelabelangle  { anodelabelangle	}
	    named nodelabelctr			{ anodelabelctr		}
	    import @Geometry named nodelabeladjust { anodelabeladjust	}

            named alabel			{ aalabel		}
            named alabelmargin			{ aalabelmargin		}
            named alabelfont			{ aalabelfont		}
            named alabelbreak			{ aalabelbreak		}
	    named alabelformat right @Body	{ aalabelformat @Body	}
            import @Geometry named alabelpos	{ aalabelpos		}
            named alabelprox			{ aalabelprox		}
            import @Geometry named alabelangle	{ aalabelangle		}
	    named alabelctr			{ aalabelctr		}
            import @Geometry named alabeladjust	{ aalabeladjust		}

            named blabel			{ ablabel		}
            named blabelmargin			{ ablabelmargin		}
            named blabelfont			{ ablabelfont		}
            named blabelbreak			{ ablabelbreak		}
	    named blabelformat right @Body	{ ablabelformat @Body	}
            import @Geometry named blabelpos	{ ablabelpos		}
            named blabelprox			{ ablabelprox		}
            import @Geometry named blabelangle	{ ablabelangle		}
	    named blabelctr			{ ablabelctr		}
            import @Geometry named blabeladjust	{ ablabeladjust		}

            named clabel			{ aclabel		}
            named clabelmargin			{ aclabelmargin		}
            named clabelfont			{ aclabelfont		}
            named clabelbreak			{ aclabelbreak		}
	    named clabelformat right @Body	{ aclabelformat @Body	}
            import @Geometry named clabelpos	{ aclabelpos		}
            named clabelprox			{ aclabelprox		}
            import @Geometry named clabelangle	{ aclabelangle		}
	    named clabelctr			{ aclabelctr		}
            import @Geometry named clabeladjust	{ aclabeladjust		}

            named dlabel			{ adlabel		}
            named dlabelmargin			{ adlabelmargin		}
            named dlabelfont			{ adlabelfont		}
            named dlabelbreak			{ adlabelbreak		}
	    named dlabelformat right @Body	{ adlabelformat @Body	}
            import @Geometry named dlabelpos	{ adlabelpos		}
            named dlabelprox			{ adlabelprox		}
            import @Geometry named dlabelangle	{ adlabelangle		}
	    named dlabelctr			{ adlabelctr		}
            import @Geometry named dlabeladjust	{ adlabeladjust		}

            right @Body
        {

            def @LabelPos
		left x
		right y
            {
		nodelabelpos @Case {
		    x    @Yield y
		    else @Yield ""
		}
            }

            def @If
		left cond
		right x
            {
		cond @Case {
		    { yes Yes } @Yield x
		    else        @Yield ""
		}
            }


            def @Strut right x
            {
		def vs { 0.5w @VShift { vstrut @High } }
		def hs {                hstrut @Wide   }

		@HContract @VContract {
		    @HContract @VContract x | vs / hs |
		}
            }

	    def @Indent right x
	    {
		x @Case {
		    { top left   } @Yield 0.0rt
		    { ctr        } @Yield 0.5rt
		    { foot right } @Yield 1.0rt
		    { mctr	     } @Yield 0.5bx
		    else           @Yield x
		}
	    }

            def @VSize right x
            {
		vsize @Case {
		    ""   @Yield x
		    else @Yield { vsize @High { /{@Indent vindent} x / } }
		}
            }

            def @HSize right x
            {
		hsize @Case {
		    ""   @Yield x
		    else @Yield { hsize @Wide { |{@Indent hindent} x | } }
		}
            }

	    def @Align right x
	    {
		x @Case {
		    { top left   } @Yield 0.0w
		    { ctr        } @Yield 0.5w
		    { foot right } @Yield 1.0w
		    { mark       } @Yield "+0i"
		    else           @Yield x
		}
	    }

	    def @ALabel
	    {
		@DoLabel
		    which	{ "a"						}
		    label	{ alabel	     @Else nodelabel		}
		    labelmargin	{ alabelmargin	     @Else nodelabelmargin	}
		    labelfont	{ alabelfont	     @Else nodelabelfont	}
		    labelbreak	{ alabelbreak	     @Else nodelabelbreak	}
		    labelformat { alabelformat @Body @Else nodelabelformat @Body}
		    labelpos	{ alabelpos	     @Else nodelabelpos		}
		    labelprox	{ alabelprox	     @Else nodelabelprox	}
		    labelangle	{ alabelangle	     @Else nodelabelangle	}
		    labelctr	{ alabelctr	     @Else nodelabelctr		}
		    labeladjust	{ alabeladjust	     @Else nodelabeladjust	}
	    }

	    def @BLabel
	    {
		@DoLabel
		    which	{ "b"						}
		    label	{ blabel	     @Else nodelabel		}
		    labelmargin	{ blabelmargin	     @Else nodelabelmargin	}
		    labelfont	{ blabelfont	     @Else nodelabelfont	}
		    labelbreak	{ blabelbreak	     @Else nodelabelbreak	}
		    labelformat { blabelformat @Body @Else nodelabelformat @Body}
		    labelpos	{ blabelpos	     @Else nodelabelpos		}
		    labelprox	{ blabelprox	     @Else nodelabelprox	}
		    labelangle	{ blabelangle	     @Else nodelabelangle	}
		    labelctr	{ blabelctr	     @Else nodelabelctr		}
		    labeladjust	{ blabeladjust	     @Else nodelabeladjust	}
	    }

	    def @CLabel
	    {
		@DoLabel
		    which	{ "c"						}
		    label	{ clabel	     @Else nodelabel		}
		    labelmargin	{ clabelmargin	     @Else nodelabelmargin	}
		    labelfont	{ clabelfont	     @Else nodelabelfont	}
		    labelbreak	{ clabelbreak	     @Else nodelabelbreak	}
		    labelformat { clabelformat @Body @Else nodelabelformat @Body}
		    labelpos	{ clabelpos	     @Else nodelabelpos		}
		    labelprox	{ clabelprox	     @Else nodelabelprox	}
		    labelangle	{ clabelangle	     @Else nodelabelangle	}
		    labelctr	{ clabelctr	     @Else nodelabelctr		}
		    labeladjust	{ clabeladjust	     @Else nodelabeladjust	}
	    }

	    def @DLabel
	    {
		@DoLabel
		    which	{ "d"						}
		    label	{ dlabel	     @Else nodelabel		}
		    labelmargin	{ dlabelmargin	     @Else nodelabelmargin	}
		    labelfont	{ dlabelfont	     @Else nodelabelfont	}
		    labelbreak	{ dlabelbreak	     @Else nodelabelbreak	}
		    labelformat { dlabelformat @Body @Else nodelabelformat @Body}
		    labelpos	{ dlabelpos	     @Else nodelabelpos		}
		    labelprox	{ dlabelprox	     @Else nodelabelprox	}
		    labelangle	{ dlabelangle	     @Else nodelabelangle	}
		    labelctr	{ dlabelctr	     @Else nodelabelctr		}
		    labeladjust	{ dlabeladjust	     @Else nodelabeladjust	}
	    }

	    import @Geometry
	    def @OutLine
	    {
	      @BackEnd @Case {
	        PostScript @Yield {
		outline @Case {
		    box		@Yield { "ldiagbox"			}
		    curvebox	@Yield { "("margin") ldiagcurvebox"	}
		    shadowbox	@Yield { shadow "ldiagshadow ldiagbox"	}
		    square	@Yield { "ldiagsquare"			}
		    diamond	@Yield { "ldiagdiamond"			}
		    polygon	@Yield { sides angle "ldiagpolygon"	}
		    isosceles	@Yield { "ldiagisosceles"		}
		    ellipse	@Yield { "ldiagellipse"			}
		    circle	@Yield { "ldiagcircle"			}
		    else	    @Yield {
				    outline
					margin { "("margin") ldiagdecodelength" }
					shadow { shadow }
					sides  { sides  }
					angle  { angle  }
		    }
		}
		  }
		  PDF @Yield {}
		}
	    }

	    def @Value
            {
              @BackEnd @Case {
                PostScript @Yield {
		@HContract @VContract
		{
		    {
			"ldiagnodebegin [" @OutLine "]"
			outlinedashlength "[" outlinestyle "]"
			outlinewidth paint @PSAddPaint texture "ldiagnodeend"
			"(IN) ldiagpushtagdict"
			//
			"ldiagpopuptagdict"
		    }
		    @Graphic
		    {
			{@Align valign} @VShift {@Align halign} @HShift
			@AddMargins
			    mtop   { topmargin   @Else vmargin @Else margin }
			    mfoot  { footmargin  @Else vmargin @Else margin }
			    mleft  { leftmargin  @Else hmargin @Else margin }
			    mright { rightmargin @Else hmargin @Else margin }
			    @HSize @VSize @HContract @VContract
			    font @Font break @Break format @Strut @Body
		    }
		    / {alabel @Else nodelabel} @IfNonEmpty @ALabel
		    / {blabel @Else nodelabel} @IfNonEmpty @BLabel
		    / {clabel @Else nodelabel} @IfNonEmpty @CLabel
		    / {dlabel @Else nodelabel} @IfNonEmpty @DLabel
		}
                }
                PDF @Yield {}
              }
            }

	    def @TValue
	    {
		nodetag @Case {
		    ""   @Yield @Value
		    else @Yield { nodetag:: @Value }
		}
	    }

            translate @Case {
                  "" @Yield @TValue
                  else @Yield {
		    @Null & # so that preceding space gets chewed up
                    @Transform translate { translate } rotate { rotate } @TValue
                  }
            }
        }


	#######################################################################
	#                                                                     #
	#  @BNode                                                             #
	#                                                                     #
	#######################################################################

        def @BNode
            import @Geometry named translate
                named to precedence 10 left x right y {
                  @BackEnd @Case {
                    PostScript @Yield { x y "ldiagpsub" }
                    PDF @Yield {""}
                  }
                }
            {}
            import @Geometry named rotate	{ 0d			}
	    import @Geometry named outline
		named margin {}
		named shadow {}
		named sides {}
		named angle {}
						{ boutline
						    margin { margin }
						    shadow { shadow }
						    sides  { sides  }
						    angle  { angle  }
						}
	    named margin               		{ bmargin        	}
	    import @Geometry named shadow	{ bshadow		}
	    import @Geometry named sides	{ bsides		}
	    import @Geometry named angle	{ bangle		}
	    named nodetag			{ bnodetag		}
            named outlinestyle
		named solid             { "/ldiagsolid"			}
		named dashed            { "/ldiagdashed"		}
		named cdashed           { "/ldiagcdashed"		}
		named dotdashed         { "/ldiagdotdashed"		}
		named dotcdashed        { "/ldiagdotcdashed"		}
		named dotdotdashed      { "/ldiagdotdotdashed"		}
		named dotdotcdashed     { "/ldiagdotdotcdashed"		}
		named dotdotdotdashed   { "/ldiagdotdotdotdashed"	}
		named dotdotdotcdashed  { "/ldiagdotdotdotcdashed"	}
		named dotted            { "/ldiagdotted"		}
		named noline            { "/ldiagnoline"		}
						{ boutlinestyle     	}
            import @Geometry named outlinedashlength { boutlinedashlength}
            import @Geometry named outlinewidth
		named thin   { 0.04 ft }
		named medium { 0.08 ft }
		named thick  { 0.12 ft }
						{ boutlinewidth     	}
            named paint				{ bpaint         	}
            import @TextureImport named texture	{ btexture         	}
	    named font				{ bfont			}
	    named break				{ bbreak			}
            named format right @Body		{ bformat @Body  	}
            named valign			{ bvalign        	}
            named vsize				{ bvsize         	}
            named vindent			{ bvindent       	}
	    named vstrut
		named no  { 0.0f }
		named yes { 1.0f }
						{ bvstrut	 	}
            named vmargin			{ bvmargin       	}
            named topmargin			{ btopmargin     	}
            named footmargin			{ bfootmargin    	}

            named halign			{ bhalign        	}
            named hsize				{ bhsize         	}
            named hindent			{ bhindent       	}
	    named hstrut
		named no  { 0.0f }
		named yes { 1.0f }
						{ bhstrut	 	}
            named hmargin			{ bhmargin       	}
            named leftmargin			{ bleftmargin    	}
            named rightmargin			{ brightmargin   	}

	    named nodelabel			{ bnodelabel		}
	    named nodelabelmargin		{ bnodelabelmargin	}
	    named nodelabelfont			{ bnodelabelfont		}
	    named nodelabelbreak		{ bnodelabelbreak	}
	    named nodelabelformat right @Body	{ bnodelabelformat @Body	}
	    import @Geometry named nodelabelpos	{ bnodelabelpos		}
	    named nodelabelprox			{ bnodelabelprox		}
	    import @Geometry named nodelabelangle  { bnodelabelangle	}
	    named nodelabelctr			{ bnodelabelctr		}
	    import @Geometry named nodelabeladjust { bnodelabeladjust	}

            named alabel			{ balabel		}
            named alabelmargin			{ balabelmargin		}
            named alabelfont			{ balabelfont		}
            named alabelbreak			{ balabelbreak		}
	    named alabelformat right @Body	{ balabelformat @Body	}
            import @Geometry named alabelpos	{ balabelpos		}
            named alabelprox			{ balabelprox		}
            import @Geometry named alabelangle	{ balabelangle		}
	    named alabelctr			{ balabelctr		}
            import @Geometry named alabeladjust	{ balabeladjust		}

            named blabel			{ bblabel		}
            named blabelmargin			{ bblabelmargin		}
            named blabelfont			{ bblabelfont		}
            named blabelbreak			{ bblabelbreak		}
	    named blabelformat right @Body	{ bblabelformat @Body	}
            import @Geometry named blabelpos	{ bblabelpos		}
            named blabelprox			{ bblabelprox		}
            import @Geometry named blabelangle	{ bblabelangle		}
	    named blabelctr			{ bblabelctr		}
            import @Geometry named blabeladjust	{ bblabeladjust		}

            named clabel			{ bclabel		}
            named clabelmargin			{ bclabelmargin		}
            named clabelfont			{ bclabelfont		}
            named clabelbreak			{ bclabelbreak		}
	    named clabelformat right @Body	{ bclabelformat @Body	}
            import @Geometry named clabelpos	{ bclabelpos		}
            named clabelprox			{ bclabelprox		}
            import @Geometry named clabelangle	{ bclabelangle		}
	    named clabelctr			{ bclabelctr		}
            import @Geometry named clabeladjust	{ bclabeladjust		}

            named dlabel			{ bdlabel		}
            named dlabelmargin			{ bdlabelmargin		}
            named dlabelfont			{ bdlabelfont		}
            named dlabelbreak			{ bdlabelbreak		}
	    named dlabelformat right @Body	{ bdlabelformat @Body	}
            import @Geometry named dlabelpos	{ bdlabelpos		}
            named dlabelprox			{ bdlabelprox		}
            import @Geometry named dlabelangle	{ bdlabelangle		}
	    named dlabelctr			{ bdlabelctr		}
            import @Geometry named dlabeladjust	{ bdlabeladjust		}

            right @Body
        {

            def @LabelPos
		left x
		right y
            {
		nodelabelpos @Case {
		    x    @Yield y
		    else @Yield ""
		}
            }

            def @If
		left cond
		right x
            {
		cond @Case {
		    { yes Yes } @Yield x
		    else        @Yield ""
		}
            }


            def @Strut right x
            {
		def vs { 0.5w @VShift { vstrut @High } }
		def hs {                hstrut @Wide   }

		@HContract @VContract {
		    @HContract @VContract x | vs / hs |
		}
            }

	    def @Indent right x
	    {
		x @Case {
		    { top left   } @Yield 0.0rt
		    { ctr        } @Yield 0.5rt
		    { foot right } @Yield 1.0rt
		    { mctr	     } @Yield 0.5bx
		    else           @Yield x
		}
	    }

            def @VSize right x
            {
		vsize @Case {
		    ""   @Yield x
		    else @Yield { vsize @High { /{@Indent vindent} x / } }
		}
            }

            def @HSize right x
            {
		hsize @Case {
		    ""   @Yield x
		    else @Yield { hsize @Wide { |{@Indent hindent} x | } }
		}
            }

	    def @Align right x
	    {
		x @Case {
		    { top left   } @Yield 0.0w
		    { ctr        } @Yield 0.5w
		    { foot right } @Yield 1.0w
		    { mark       } @Yield "+0i"
		    else           @Yield x
		}
	    }

	    def @ALabel
	    {
		@DoLabel
		    which	{ "a"						}
		    label	{ alabel	     @Else nodelabel		}
		    labelmargin	{ alabelmargin	     @Else nodelabelmargin	}
		    labelfont	{ alabelfont	     @Else nodelabelfont	}
		    labelbreak	{ alabelbreak	     @Else nodelabelbreak	}
		    labelformat { alabelformat @Body @Else nodelabelformat @Body}
		    labelpos	{ alabelpos	     @Else nodelabelpos		}
		    labelprox	{ alabelprox	     @Else nodelabelprox	}
		    labelangle	{ alabelangle	     @Else nodelabelangle	}
		    labelctr	{ alabelctr	     @Else nodelabelctr		}
		    labeladjust	{ alabeladjust	     @Else nodelabeladjust	}
	    }

	    def @BLabel
	    {
		@DoLabel
		    which	{ "b"						}
		    label	{ blabel	     @Else nodelabel		}
		    labelmargin	{ blabelmargin	     @Else nodelabelmargin	}
		    labelfont	{ blabelfont	     @Else nodelabelfont	}
		    labelbreak	{ blabelbreak	     @Else nodelabelbreak	}
		    labelformat { blabelformat @Body @Else nodelabelformat @Body}
		    labelpos	{ blabelpos	     @Else nodelabelpos		}
		    labelprox	{ blabelprox	     @Else nodelabelprox	}
		    labelangle	{ blabelangle	     @Else nodelabelangle	}
		    labelctr	{ blabelctr	     @Else nodelabelctr		}
		    labeladjust	{ blabeladjust	     @Else nodelabeladjust	}
	    }

	    def @CLabel
	    {
		@DoLabel
		    which	{ "c"						}
		    label	{ clabel	     @Else nodelabel		}
		    labelmargin	{ clabelmargin	     @Else nodelabelmargin	}
		    labelfont	{ clabelfont	     @Else nodelabelfont	}
		    labelbreak	{ clabelbreak	     @Else nodelabelbreak	}
		    labelformat { clabelformat @Body @Else nodelabelformat @Body}
		    labelpos	{ clabelpos	     @Else nodelabelpos		}
		    labelprox	{ clabelprox	     @Else nodelabelprox	}
		    labelangle	{ clabelangle	     @Else nodelabelangle	}
		    labelctr	{ clabelctr	     @Else nodelabelctr		}
		    labeladjust	{ clabeladjust	     @Else nodelabeladjust	}
	    }

	    def @DLabel
	    {
		@DoLabel
		    which	{ "d"						}
		    label	{ dlabel	     @Else nodelabel		}
		    labelmargin	{ dlabelmargin	     @Else nodelabelmargin	}
		    labelfont	{ dlabelfont	     @Else nodelabelfont	}
		    labelbreak	{ dlabelbreak	     @Else nodelabelbreak	}
		    labelformat { dlabelformat @Body @Else nodelabelformat @Body}
		    labelpos	{ dlabelpos	     @Else nodelabelpos		}
		    labelprox	{ dlabelprox	     @Else nodelabelprox	}
		    labelangle	{ dlabelangle	     @Else nodelabelangle	}
		    labelctr	{ dlabelctr	     @Else nodelabelctr		}
		    labeladjust	{ dlabeladjust	     @Else nodelabeladjust	}
	    }

	    import @Geometry
	    def @OutLine
	    {
	      @BackEnd @Case {
	        PostScript @Yield {
		outline @Case {
		    box		@Yield { "ldiagbox"			}
		    curvebox	@Yield { "("margin") ldiagcurvebox"	}
		    shadowbox	@Yield { shadow "ldiagshadow ldiagbox"	}
		    square	@Yield { "ldiagsquare"			}
		    diamond	@Yield { "ldiagdiamond"			}
		    polygon	@Yield { sides angle "ldiagpolygon"	}
		    isosceles	@Yield { "ldiagisosceles"		}
		    ellipse	@Yield { "ldiagellipse"			}
		    circle	@Yield { "ldiagcircle"			}
		    else	    @Yield {
				    outline
					margin { "("margin") ldiagdecodelength" }
					shadow { shadow }
					sides  { sides  }
					angle  { angle  }
		    }
		}
		  }
		  PDF @Yield {}
		}
	    }

	    def @Value
            {
              @BackEnd @Case {
                PostScript @Yield {
		@HContract @VContract
		{
		    {
			"ldiagnodebegin [" @OutLine "]"
			outlinedashlength "[" outlinestyle "]"
			outlinewidth paint @PSAddPaint texture "ldiagnodeend"
			"(IN) ldiagpushtagdict"
			//
			"ldiagpopuptagdict"
		    }
		    @Graphic
		    {
			{@Align valign} @VShift {@Align halign} @HShift
			@AddMargins
			    mtop   { topmargin   @Else vmargin @Else margin }
			    mfoot  { footmargin  @Else vmargin @Else margin }
			    mleft  { leftmargin  @Else hmargin @Else margin }
			    mright { rightmargin @Else hmargin @Else margin }
			    @HSize @VSize @HContract @VContract
			    font @Font break @Break format @Strut @Body
		    }
		    / {alabel @Else nodelabel} @IfNonEmpty @ALabel
		    / {blabel @Else nodelabel} @IfNonEmpty @BLabel
		    / {clabel @Else nodelabel} @IfNonEmpty @CLabel
		    / {dlabel @Else nodelabel} @IfNonEmpty @DLabel
		}
                }
                PDF @Yield {}
              }
            }

	    def @TValue
	    {
		nodetag @Case {
		    ""   @Yield @Value
		    else @Yield { nodetag:: @Value }
		}
	    }

            translate @Case {
                  "" @Yield @TValue
                  else @Yield {
		    @Null & # so that preceding space gets chewed up
                    @Transform translate { translate } rotate { rotate } @TValue
                  }
            }
        }


	#######################################################################
	#                                                                     #
	#  @CNode                                                             #
	#                                                                     #
	#######################################################################

        def @CNode
            import @Geometry named translate
                named to precedence 10 left x right y {
                  @BackEnd @Case {
                    PostScript @Yield { x y "ldiagpsub" }
                    PDF @Yield {""}
                  }
                }
            {}
            import @Geometry named rotate	{ 0d			}
	    import @Geometry named outline
		named margin {}
		named shadow {}
		named sides {}
		named angle {}
						{ coutline
						    margin { margin }
						    shadow { shadow }
						    sides  { sides  }
						    angle  { angle  }
						}
	    named margin               		{ cmargin        	}
	    import @Geometry named shadow	{ cshadow		}
	    import @Geometry named sides	{ csides		}
	    import @Geometry named angle	{ cangle		}
	    named nodetag			{ cnodetag		}
            named outlinestyle
		named solid             { "/ldiagsolid"			}
		named dashed            { "/ldiagdashed"		}
		named cdashed           { "/ldiagcdashed"		}
		named dotdashed         { "/ldiagdotdashed"		}
		named dotcdashed        { "/ldiagdotcdashed"		}
		named dotdotdashed      { "/ldiagdotdotdashed"		}
		named dotdotcdashed     { "/ldiagdotdotcdashed"		}
		named dotdotdotdashed   { "/ldiagdotdotdotdashed"	}
		named dotdotdotcdashed  { "/ldiagdotdotdotcdashed"	}
		named dotted            { "/ldiagdotted"		}
		named noline            { "/ldiagnoline"		}
						{ coutlinestyle     	}
            import @Geometry named outlinedashlength { coutlinedashlength}
            import @Geometry named outlinewidth
		named thin   { 0.04 ft }
		named medium { 0.08 ft }
		named thick  { 0.12 ft }
						{ coutlinewidth     	}
            named paint				{ cpaint         	}
            import @TextureImport named texture	{ ctexture         	}
	    named font				{ cfont			}
	    named break				{ cbreak			}
            named format right @Body		{ cformat @Body  	}
            named valign			{ cvalign        	}
            named vsize				{ cvsize         	}
            named vindent			{ cvindent       	}
	    named vstrut
		named no  { 0.0f }
		named yes { 1.0f }
						{ cvstrut	 	}
            named vmargin			{ cvmargin       	}
            named topmargin			{ ctopmargin     	}
            named footmargin			{ cfootmargin    	}

            named halign			{ chalign        	}
            named hsize				{ chsize         	}
            named hindent			{ chindent       	}
	    named hstrut
		named no  { 0.0f }
		named yes { 1.0f }
						{ chstrut	 	}
            named hmargin			{ chmargin       	}
            named leftmargin			{ cleftmargin    	}
            named rightmargin			{ crightmargin   	}

	    named nodelabel			{ cnodelabel		}
	    named nodelabelmargin		{ cnodelabelmargin	}
	    named nodelabelfont			{ cnodelabelfont		}
	    named nodelabelbreak		{ cnodelabelbreak	}
	    named nodelabelformat right @Body	{ cnodelabelformat @Body	}
	    import @Geometry named nodelabelpos	{ cnodelabelpos		}
	    named nodelabelprox			{ cnodelabelprox		}
	    import @Geometry named nodelabelangle  { cnodelabelangle	}
	    named nodelabelctr			{ cnodelabelctr		}
	    import @Geometry named nodelabeladjust { cnodelabeladjust	}

            named alabel			{ calabel		}
            named alabelmargin			{ calabelmargin		}
            named alabelfont			{ calabelfont		}
            named alabelbreak			{ calabelbreak		}
	    named alabelformat right @Body	{ calabelformat @Body	}
            import @Geometry named alabelpos	{ calabelpos		}
            named alabelprox			{ calabelprox		}
            import @Geometry named alabelangle	{ calabelangle		}
	    named alabelctr			{ calabelctr		}
            import @Geometry named alabeladjust	{ calabeladjust		}

            named blabel			{ cblabel		}
            named blabelmargin			{ cblabelmargin		}
            named blabelfont			{ cblabelfont		}
            named blabelbreak			{ cblabelbreak		}
	    named blabelformat right @Body	{ cblabelformat @Body	}
            import @Geometry named blabelpos	{ cblabelpos		}
            named blabelprox			{ cblabelprox		}
            import @Geometry named blabelangle	{ cblabelangle		}
	    named blabelctr			{ cblabelctr		}
            import @Geometry named blabeladjust	{ cblabeladjust		}

            named clabel			{ cclabel		}
            named clabelmargin			{ cclabelmargin		}
            named clabelfont			{ cclabelfont		}
            named clabelbreak			{ cclabelbreak		}
	    named clabelformat right @Body	{ cclabelformat @Body	}
            import @Geometry named clabelpos	{ cclabelpos		}
            named clabelprox			{ cclabelprox		}
            import @Geometry named clabelangle	{ cclabelangle		}
	    named clabelctr			{ cclabelctr		}
            import @Geometry named clabeladjust	{ cclabeladjust		}

            named dlabel			{ cdlabel		}
            named dlabelmargin			{ cdlabelmargin		}
            named dlabelfont			{ cdlabelfont		}
            named dlabelbreak			{ cdlabelbreak		}
	    named dlabelformat right @Body	{ cdlabelformat @Body	}
            import @Geometry named dlabelpos	{ cdlabelpos		}
            named dlabelprox			{ cdlabelprox		}
            import @Geometry named dlabelangle	{ cdlabelangle		}
	    named dlabelctr			{ cdlabelctr		}
            import @Geometry named dlabeladjust	{ cdlabeladjust		}

            right @Body
        {

            def @LabelPos
		left x
		right y
            {
		nodelabelpos @Case {
		    x    @Yield y
		    else @Yield ""
		}
            }

            def @If
		left cond
		right x
            {
		cond @Case {
		    { yes Yes } @Yield x
		    else        @Yield ""
		}
            }


            def @Strut right x
            {
		def vs { 0.5w @VShift { vstrut @High } }
		def hs {                hstrut @Wide   }

		@HContract @VContract {
		    @HContract @VContract x | vs / hs |
		}
            }

	    def @Indent right x
	    {
		x @Case {
		    { top left   } @Yield 0.0rt
		    { ctr        } @Yield 0.5rt
		    { foot right } @Yield 1.0rt
		    { mctr	     } @Yield 0.5bx
		    else           @Yield x
		}
	    }

            def @VSize right x
            {
		vsize @Case {
		    ""   @Yield x
		    else @Yield { vsize @High { /{@Indent vindent} x / } }
		}
            }

            def @HSize right x
            {
		hsize @Case {
		    ""   @Yield x
		    else @Yield { hsize @Wide { |{@Indent hindent} x | } }
		}
            }

	    def @Align right x
	    {
		x @Case {
		    { top left   } @Yield 0.0w
		    { ctr        } @Yield 0.5w
		    { foot right } @Yield 1.0w
		    { mark       } @Yield "+0i"
		    else           @Yield x
		}
	    }

	    def @ALabel
	    {
		@DoLabel
		    which	{ "a"						}
		    label	{ alabel	     @Else nodelabel		}
		    labelmargin	{ alabelmargin	     @Else nodelabelmargin	}
		    labelfont	{ alabelfont	     @Else nodelabelfont	}
		    labelbreak	{ alabelbreak	     @Else nodelabelbreak	}
		    labelformat { alabelformat @Body @Else nodelabelformat @Body}
		    labelpos	{ alabelpos	     @Else nodelabelpos		}
		    labelprox	{ alabelprox	     @Else nodelabelprox	}
		    labelangle	{ alabelangle	     @Else nodelabelangle	}
		    labelctr	{ alabelctr	     @Else nodelabelctr		}
		    labeladjust	{ alabeladjust	     @Else nodelabeladjust	}
	    }

	    def @BLabel
	    {
		@DoLabel
		    which	{ "b"						}
		    label	{ blabel	     @Else nodelabel		}
		    labelmargin	{ blabelmargin	     @Else nodelabelmargin	}
		    labelfont	{ blabelfont	     @Else nodelabelfont	}
		    labelbreak	{ blabelbreak	     @Else nodelabelbreak	}
		    labelformat { blabelformat @Body @Else nodelabelformat @Body}
		    labelpos	{ blabelpos	     @Else nodelabelpos		}
		    labelprox	{ blabelprox	     @Else nodelabelprox	}
		    labelangle	{ blabelangle	     @Else nodelabelangle	}
		    labelctr	{ blabelctr	     @Else nodelabelctr		}
		    labeladjust	{ blabeladjust	     @Else nodelabeladjust	}
	    }

	    def @CLabel
	    {
		@DoLabel
		    which	{ "c"						}
		    label	{ clabel	     @Else nodelabel		}
		    labelmargin	{ clabelmargin	     @Else nodelabelmargin	}
		    labelfont	{ clabelfont	     @Else nodelabelfont	}
		    labelbreak	{ clabelbreak	     @Else nodelabelbreak	}
		    labelformat { clabelformat @Body @Else nodelabelformat @Body}
		    labelpos	{ clabelpos	     @Else nodelabelpos		}
		    labelprox	{ clabelprox	     @Else nodelabelprox	}
		    labelangle	{ clabelangle	     @Else nodelabelangle	}
		    labelctr	{ clabelctr	     @Else nodelabelctr		}
		    labeladjust	{ clabeladjust	     @Else nodelabeladjust	}
	    }

	    def @DLabel
	    {
		@DoLabel
		    which	{ "d"						}
		    label	{ dlabel	     @Else nodelabel		}
		    labelmargin	{ dlabelmargin	     @Else nodelabelmargin	}
		    labelfont	{ dlabelfont	     @Else nodelabelfont	}
		    labelbreak	{ dlabelbreak	     @Else nodelabelbreak	}
		    labelformat { dlabelformat @Body @Else nodelabelformat @Body}
		    labelpos	{ dlabelpos	     @Else nodelabelpos		}
		    labelprox	{ dlabelprox	     @Else nodelabelprox	}
		    labelangle	{ dlabelangle	     @Else nodelabelangle	}
		    labelctr	{ dlabelctr	     @Else nodelabelctr		}
		    labeladjust	{ dlabeladjust	     @Else nodelabeladjust	}
	    }

	    import @Geometry
	    def @OutLine
	    {
	      @BackEnd @Case {
	        PostScript @Yield {
		outline @Case {
		    box		@Yield { "ldiagbox"			}
		    curvebox	@Yield { "("margin") ldiagcurvebox"	}
		    shadowbox	@Yield { shadow "ldiagshadow ldiagbox"	}
		    square	@Yield { "ldiagsquare"			}
		    diamond	@Yield { "ldiagdiamond"			}
		    polygon	@Yield { sides angle "ldiagpolygon"	}
		    isosceles	@Yield { "ldiagisosceles"		}
		    ellipse	@Yield { "ldiagellipse"			}
		    circle	@Yield { "ldiagcircle"			}
		    else	    @Yield {
				    outline
					margin { "("margin") ldiagdecodelength" }
					shadow { shadow }
					sides  { sides  }
					angle  { angle  }
		    }
		}
		  }
		  PDF @Yield {}
		}
	    }

	    def @Value
            {
              @BackEnd @Case {
                PostScript @Yield {
		@HContract @VContract
		{
		    {
			"ldiagnodebegin [" @OutLine "]"
			outlinedashlength "[" outlinestyle "]"
			outlinewidth paint @PSAddPaint texture "ldiagnodeend"
			"(IN) ldiagpushtagdict"
			//
			"ldiagpopuptagdict"
		    }
		    @Graphic
		    {
			{@Align valign} @VShift {@Align halign} @HShift
			@AddMargins
			    mtop   { topmargin   @Else vmargin @Else margin }
			    mfoot  { footmargin  @Else vmargin @Else margin }
			    mleft  { leftmargin  @Else hmargin @Else margin }
			    mright { rightmargin @Else hmargin @Else margin }
			    @HSize @VSize @HContract @VContract
			    font @Font break @Break format @Strut @Body
		    }
		    / {alabel @Else nodelabel} @IfNonEmpty @ALabel
		    / {blabel @Else nodelabel} @IfNonEmpty @BLabel
		    / {clabel @Else nodelabel} @IfNonEmpty @CLabel
		    / {dlabel @Else nodelabel} @IfNonEmpty @DLabel
		}
                }
                PDF @Yield {}
              }
            }

	    def @TValue
	    {
		nodetag @Case {
		    ""   @Yield @Value
		    else @Yield { nodetag:: @Value }
		}
	    }

            translate @Case {
                  "" @Yield @TValue
                  else @Yield {
		    @Null & # so that preceding space gets chewed up
                    @Transform translate { translate } rotate { rotate } @TValue
                  }
            }
        }


	#######################################################################
	#                                                                     #
	#  @Box, @CurveBox, and other standard node abbreviations             #
	#                                                                     #
	#######################################################################

	macro @@Node	 { @Node			  }
        macro @Box	 { @Node outline { box		} }
        macro @CurveBox	 { @Node outline { curvebox	} }
	macro @ShadowBox { @Node outline { shadowbox	} }
        macro @Square	 { @Node outline { square	} }
        macro @Diamond	 { @Node outline { diamond	} }
        macro @Polygon	 { @Node outline { polygon	} }
        macro @Isosceles { @Node outline { isosceles	} }
        macro @Ellipse	 { @Node outline { ellipse	} }
        macro @Circle	 { @Node outline { circle	} }


        #######################################################################
        #                                                                     #
        #  Arrowheads                                                         #
        #                                                                     #
        #######################################################################
	
	macro @InsulatedNode {
	    @Node
		topmargin { 0i }
		footmargin { 0i }
		leftmargin { 0i }
		rightmargin { 0i }
		alabel {}
		blabel {}
		clabel {}
		dlabel {}
		hsize {}
		vsize {}
		vstrut { no }
		hstrut { no }
	}

	def @SolidArrowHead
	    named width { arrowwidth }
	    named length { arrowlength }
	    named pathwidth { pathwidth }
	{
	    @InsulatedNode
		paint { nochange }
		texture { solid }
		outlinestyle { noline }
		outlinewidth { pathwidth }
		outline {
		  @BackEnd @Case {
		    PostScript @Yield {
		    "ldiagsolidarrowhead"
		    # 0 0 xsize ysize * 0.5 0 ysize
		    }
		    PDF @Yield {}
		  }
		}
	    {
		length @Wide width @High
	    }
	}

	def @OpenArrowHead
	    named width { arrowwidth }
	    named length { arrowlength }
	    named pathwidth { pathwidth }
	{
	    @InsulatedNode
		outlinewidth { pathwidth }
		outlinestyle { noline }
		paint { nochange }
		texture { solid }
		outline {
		  @BackEnd @Case {
		    PostScript @Yield {
		    pathwidth "ldiagopenarrowhead"

		    # PSW := { 0 0 }
		    # PNW := { 0 ysize }
		    # PE  := { xsize ysize*0.5 }
		    # REL := pathwidth atangle { PE angleto PNW + 90d }
		    # PNA := { 0 ysize*0.5 + pathwidth*0.5 }
		    # PSA := { 0 ysize*0.5 - pathwidth*0.5 }
		    # PNI := {
		    #   PNA PNA ++ { xsize 0 }
		    #   PNW ++ REL PE ++ REL ldiaglineintersect
		    # }
		    # PSI := PNI -- { 0 pathwidth }
		    #
		    # PSW PE PNW PNI PNA PSA PSI PSW
		    }
		    PDF @Yield {}
		  }
		}
	    {
		length @Wide width @High
	    }
	}

	def @HalfOpenArrowHead
	    named width { arrowwidth }
	    named length { arrowlength }
	    named pathwidth { pathwidth }
	{
	    @InsulatedNode
		paint { nochange }
		texture { solid }
		outlinestyle { noline }
		outlinewidth { pathwidth }
		outline {
		  @BackEnd @Case {
		    PostScript @Yield {
		    pathwidth "ldiaghalfopenarrowhead"

		    # 0 0
		    # xsize ysize * 0.5
		    # 0 ysize
		    # xsize*0.3 ysize*0.5 + pathwidth*0.5
		    # 0         ysize*0.5 + pathwidth*0.5
		    # 0         ysize*0.5 - pathwidth*0.5
		    # xsize*0.3 ysize*0.5 - pathwidth*0.5
		    # 0 0
		    }
		    PDF @Yield {}
		  }
		}
	    {
		length @Wide width @High
	    }
	}

	def @SolidCurvedArrowHead
	    named width { arrowwidth }
	    named length { arrowlength }
	    named pathwidth { pathwidth }
	{
	    @InsulatedNode
		outlinestyle { noline }
		paint { nochange }
		texture { solid }
		outlinewidth { pathwidth }
		outline {
		  @BackEnd @Case {
		    PostScript @Yield {
		    "ldiagsolidcurvedarrowhead"
		    # 0 0
		    # [0 0 xsize ysize * 0.5 "ldiaglinebetween"
		    #  xsize 0 xsize ysize "ldiaglineintersect" clockwise]
		    # xsize ysize * 0.5
		    # [xsize ysize * 0.5 0 ysize "ldiaglinebetween"
		    #  xsize 0 xsize ysize "ldiaglineintersect" clockwise]
		    # 0 ysize
		    }
		    PDF @Yield {}
		  }
		}
	    {
		length @Wide width @High
	    }
	}

	def @OpenCurvedArrowHead
	    named width { arrowwidth }
	    named length { arrowlength }
	    named pathwidth { pathwidth }
	{
	    @InsulatedNode
		outlinestyle { noline }
		paint { nochange }
		texture { solid }
		outlinewidth { pathwidth }
		outline {
		  @BackEnd @Case {
		    PostScript @Yield {
		    pathwidth "ldiagopencurvedarrowhead"
		    # LR:= { 0 0 xsize ysize * 0.5 "ldiaglinebetween"
		    #    xsize 0 xsize ysize "ldiaglineintersect" }
		    # UR:= { xsize ysize * 0.5 0 ysize "ldiaglinebetween"
		    #      xsize 0 xsize ysize "ldiaglineintersect" }
		    # PW2  := pathwidth * 0.5
		    # UMID := {
		    # 0 ysize * 0.5 + PW2  xsize ysize * 0.5 + PW2
		    # {0 ysize} ++ 1f atangle { UR angleto {0 ysize} + 90d }
		    # { 0 ysize } ldiaglineintersect
		    # }
		    # LMID := UMID -- { 0 pathwidth }
		    # 0 0
		    # [LR clockwise]
		    # xsize ysize * 0.5
		    # [UR clockwise]
		    # 0 ysize
		    # UMID
		    # 0 ysize * 0.5 + PW2
		    # 0 ysize * 0.5 - PW2
		    # LMID
		    # 0 0
		    }
		    PDF @Yield {}
		  }
		}
	    {
		length @Wide width @High
	    }
	}

	def @HalfOpenCurvedArrowHead
	    named width { arrowwidth }
	    named length { arrowlength }
	    named pathwidth { pathwidth }
	{
	    @InsulatedNode
		outlinestyle { noline }
		paint { nochange }
		texture { solid }
		outlinewidth { pathwidth }
		outline {
		  @BackEnd @Case {
		    PostScript @Yield {
		    pathwidth "ldiaghalfopencurvedarrowhead"
		    # LR:= { 0 0 xsize ysize * 0.5 "ldiaglinebetween"
		    #      xsize 0 xsize ysize "ldiaglineintersect" }
		    # UR:= { xsize ysize * 0.5 0 ysize "ldiaglinebetween"
		    #      xsize 0 xsize ysize "ldiaglineintersect" }
		    # BR:= { 0 0 LR 0 ysize UR "ldiaglineintersect" }
		    # BRAD := { 0 0 } distance BR
		    # PW2  := pathwidth * 0.5
		    # XDIST := sqrt { BRAD*BRAD - PW2*PW2 }
		    # UMID := BR ++ { XDIST PW2 }
		    # LMID := BR ++ { XDIST 0 - PW2 }
		    # 0 0
		    # [LR clockwise]
		    # xsize ysize * 0.5
		    # [UR clockwise]
		    # 0 ysize
		    # [BR clockwise ]
		    # UMID
		    # 0 ysize * 0.5 + PW2
		    # 0 ysize * 0.5 - PW2
		    # LMID
		    # [BR clockwise ]
		    # 0 0
		    }
		    PDF @Yield {}
		  }
		}
	    {
		length @Wide width @High
	    }
	}

	def @CircleArrowHead
	    named width { arrowwidth }
	    named length { arrowlength }
	    named pathwidth { pathwidth }
	{
	    @InsulatedNode
		outlinestyle { noline }
		paint { nochange }
		texture { solid }
		outlinewidth { pathwidth }
		outline { circle }
	    { length @Wide length @High }
	}

	def @BoxArrowHead
	    named width { arrowwidth }
	    named length { arrowlength }
	    named pathwidth { pathwidth }
	{
	    @InsulatedNode
		outlinestyle { noline }
		paint { nochange }
		texture { solid }
		outlinewidth { pathwidth }
		outline { box }
	    { length @Wide width @High }
	}

	def @ArrowHead
	    named style { arrowstyle }
	    named width { arrowwidth }
	    named length { arrowlength }
	    named pathwidth { pathwidth }
	{
	    style @Case {
		solid          @Yield @SolidArrowHead
				  width { width } length { length }
				  pathwidth { pathwidth }
		halfopen       @Yield @HalfOpenArrowHead
				  width { width } length { length }
				  pathwidth { pathwidth }
		open           @Yield @OpenArrowHead
				  width { width } length { length }
				  pathwidth { pathwidth }
		curvedsolid    @Yield @SolidCurvedArrowHead
				  width { width } length { length }
				  pathwidth { pathwidth }
		curvedhalfopen @Yield @HalfOpenCurvedArrowHead
				  width { width } length { length }
				  pathwidth { pathwidth }
		curvedopen     @Yield @OpenCurvedArrowHead
				  width { width } length { length }
				  pathwidth { pathwidth }
		circle         @Yield @CircleArrowHead
				  width { width } length { length }
				  pathwidth { pathwidth }
		box            @Yield @BoxArrowHead
				  width { width } length { length }
				  pathwidth { pathwidth }
	    }
	}


        #######################################################################
        #                                                                     #
        #  @Link                                                              #
        #                                                                     #
        #######################################################################
	
        def @Link
            import @Geometry named path
                named from {}
                named to {}
                named bias {}
                named fbias {}
                named tbias {}
                named hfrac {}
                named hbias {}
                named radius {}
                named xindent {}
                named zindent {}
                named frompt {}
                named topt {}
                named arrow {}
                named arrowlength {}
                named backarrowlength {}
            					{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{ path
						    from { from 				{