#!/bin/sh # MetaCard 2.4 stack # The following is not ASCII text, # so now would be a good time to q out of more exec mc $0 "$@"  x StopTurtles7local x,y,angles,penDown,gPoints,labelCount,tName global radPerDeg,degPerRad local x0,y0 function convertLinesTurtleToMouse tLines repeat for each line tLine in tLines put item 1 of tLine into theX put item 2 of tLine into theY put round(x0 + theX)& comma& round(y0- theY) & return after results end repeat return results end convertLinesTurtleToMouse function convertLinesMouseToTurtle tLines repeat for each line tLine in tLines put item 1 of tLine into theX put item 2 of tLine into theY put round(theX-x0)& comma & round(y0 - theY) & return after results end repeat return results end convertLinesMouseToTurtle --on setColor tColor -- set the forecolor of grc tName to tColor --end setColor on startTurtle tName if tName is empty then put "turtle" into tName --lock messages put true into penDown -- put pi/180 into radPerDeg -- put 180/pi into degPerRad put round(the the width of this card /2) into x0 put round(the height of this card /2) into y0 put x0&comma&y0 & return into gPoints put 0 into x put 0 into y put 0 into angles put 0 into labelCount if there is no graphic tName then set the style of the templateGraphic to "line" create graphic tName end if --set the endArrow of graphic tName to false -- clean tName --unlock messages end startTurtle on startT temp startTurtle temp end startT on st temp startTurtle temp end st function ext pointList,d put the number of lines in pointList into n put line n - 1 of pointlist into pt1 put line n of pointList into pt2 put extension(pt1,pt2,d) into line n+1 of pointList -- put pointList & return into field "data" return pointList end ext function extension p1,p2,d repeat with i = 1 to 2 put param(i) into p[i] put item 1 of p[i] into x[i] put item 2 of p[i] into y[i] end repeat put atan2(y[2]-y[1] , x[2]-x[1]) into a put x[2] + d* cos(a) into x[3] put y[2] + d* sin(a) into y[3] put round(x[3]),round(y[3]) into tPt return tPt end extension on label inputText lock screen put the tool into tTool choose the browse tool set the textstyle of the templateField to "bold" set the style of the templateField to "transparent" set the textAlign of templateField to center put "fieldLabel" &tName& labelCount into nField if there is no field nField then create field nField add 1 to labelCount put inputText into field nField set the loc of field nField to turtlePtToMousePt(xycor()) set the width of field nField to the formattedwidth of field nField set the height of field nField to the formattedHeight of field nField set the tool to tTool unlock screen end label on stopTurtle tName --put tName&"Turtle" into tName set the points of graphic tName to gPoints --unlock screen end stopTurtle on stopT tName stopturtle tName end stopT on home setxy 0,0 end home on right temp subtract temp from angles end right on rt temp right temp end rt on left a add a to angles end left on lt a left a end lt on ffd temp forward temp end ffd on incXY dx,dy --if penDown then put round (x0 +x +dx) &comma &round(y0 -y - dy)& return after gPoints if penDown then put round (x0 +x +dx) &comma &round(y0 -y - dy)& return after gPoints else put return & round (x0 +x +dx) &comma &round(y0 -y - dy)& return after gPoints end if add dx to x add dy to y --create graphic tName -- set the points of graphic "myGraphic" to gPoints end incXY on setxy xnew,ynew get the paramCount if it = 1 then put item 2 of xnew into ynew put item 1 of xnew into xnew end if if penDown then put round(x0+xnew)&comma&round(y0 - ynew)& return after gPoints else put return & round(x0 + xnew)&comma&round(y0 - ynew)& return after gPoints end if put xnew into x put ynew into y --create graphic tName -- set the points of graphic "myGraphic" to gPoints end setxy on setRA rr,aa put rr*cosine(aa) into x put rr*Sine(aa) into y setXY x,y end setRA function distance xtemp,ytemp get the paramCount if it = 1 then put item 2 of xtemp into ytemp put item 1 of xtemp into xtemp end if return sqrt ((x-xtemp)^2 + (y-ytemp)^2) end distance function xycor return round(x) & comma & round(y) end xycor function xcor return x end xcor function ycor return y end ycor on pu put false into penDown end pu on penUp pu end penUp on penDown pd end penDown on pd put true into penDown end pd on forward distance put distance * cos(radPerDeg * angles) into dx put distance * sin(radPerDeg * angles) into dy --if penDown then drag from round(x0 + x),round(y0 - y) to round(x0 + x + dx), round(y0 - y - dy) add dx to x add dy to y if penDown then put round(x+x0)&comma&round(-y+y0)& return after gPoints else put return & round(x+x0)&comma&round(-y+y0)& return after gPoints end if -- set the points of graphic "myGraphic" to gPoints --put gPoints into field "points" end forward on seth temp put temp into angles end seth on bk temp fd - temp end bk on back temp bk temp end back function heading repeat while angles>360 subtract 360 from angles end repeat repeat while angles < 0 add 360 to angles end repeat return angles end heading function toward xTemp,yTemp return direction (xTemp,yTemp) end toward function direction xtemp,ytemp get the paramCount if it is 1 then put item 2 of xtemp into ytemp put item 1 of xtemp into xtemp end if put ytemp - y into dy put xtemp - x into dx if dx = 0 then if dy > 0 then return 90 else return 90 + 180 end if if dy = 0 then if dx > 0 then return 0 else return 180 end if put degPerRad * atan(abs(dy) / abs(dx)) into angl if dy > 0 then if dx > 0 then return angl else return 180 - angl end if if dx > 0 then return 360 - angl else return 180 + angl end if end direction on setHome xx,yy get the paramCount if it is 1 then put item 2 of xx into yy put item 1 of xx into xx end if put round((the width of this card)/2 + xx) into x0 put round((the height of this card)/2 - yy) into y0 put x0&comma&y0 & return into gPoints end setHome on st startTurtle end st on fd temp forward temp end fd on ct put empty into field 1 end ct on cleartext ct end cleartext on pr t put t& return after field 1 end pr on clean tName -- repeat while the number of images > 0 -- delete image 1 -- end repeat -- put "eyeball" into tSaveList -- put 1 into i -- set the points of graphic tName&"Turtle" to "" -- repeat number of graphics -- if the short name of graphic i is not in tSaveList then -- delete graphic i -- next repeat -- else add 1 to i -- end repeat -- repeat with i = the number of fields down to 1 -- if "label" is in the short name of field i then delete field i -- end repeat end clean on cleanAllGraphics repeat the number of graphics delete graphic 1 end repeat end cleanAllGraphics on cleanG tGraphic get the paramcount switch it case 1 repeat with i = the number of graphics down to 1 if tGraphic is in the short name of grc i then --set the points of grc tName to "" --delete grc i --put "" into gPoints put x0&comma&y0 & return into gPoints put 0 into x put 0 into y end if end repeat break case 0 repeat with i = the number of graphics down to 1 --delete grc i set the points of grc i to "" end repeat break end switch end cleanG on cleanGraphics temp cleanG temp end cleanGraphics on cleanL tLabel get the paramcount switch it case 1 repeat with i = the number of fields down to 1 if tLabel is in the short name of field i then delete field i end repeat break case 0 repeat with i = the number of fields down to 1 if "label" is in the short name of field i then delete field i end repeat break end switch end cleanL on cleanLabel temp cleanL temp end cleanLabel on cleanPts put empty into gPoints end cleanPts on centeredCircle r put the tool into savedTool choose the oval tool set the centered to true drag from round(x0+x),round(y0-y) to round(x0+x+r),round(y0-y-r) set the centered to false choose the savedTool end centeredCircle function mousePtToTurtlePt theX,theY get the paramcount if it is 1 then put item 2 of theX into theY put item 1 of theX into theX end if --sethome 0,0 put round(theX-x0) into item 1 of temp put round(y0 - theY) into item 2 of temp return temp end mousePtToTurtlePt function mpttp pt return mousePtToTurtlePt(pt) end mpttp function tptmp pt return turtlePtToMousePt(pt) end tptmp function mt theX, theY get the paramcount if it is 1 then put item 2 of theX into theY put item 1 of theX into theX end if -- sethome 0,0 put round(theX-x0) into item 1 of temp put round(y0 - theY) into item 2 of temp return temp end mt function mpttp theX,theY get the paramcount if it is 1 then put item 2 of theX into theY put item 1 of theX into theX end if sethome 0,0 put round(theX-x0) into item 1 of temp put round(y0 - theY) into item 2 of temp return temp end mpttp function tptmp theX,theY get the paramcount if it is 1 then put item 2 of theX into theY put item 1 of theX into theX end if put round(x0 + theX) into item 1 of temp put round(y0 - theY) into item 2 of temp return temp end tptmp function turtlePtToMousePt theX, theY get the paramcount if it is 1 then put item 2 of theX into theY put item 1 of theX into theX end if put round(x0 + theX) into item 1 of temp put round(y0 - theY) into item 2 of temp return temp end turtlePtToMousePt function tm theX,theY get the paramcount if it is 1 then put item 2 of theX into theY put item 1 of theX into theX end if put round(x0 + theX) into item 1 of temp put round(y0 - theY) into item 2 of temp return temp end tm function log x return ln(x)/ln(10) end log function sine a return sin(pi/180*a) end sine function cosine a return cos(radPerDeg*a) end cosine function tangent a return tan(radPerDeg*a) end tangent function arcSine temp return 180/pi* asin(temp) end arcSine function arcCos temp return degPerRad* acos(temp) end arcCos function arcTan temp return degPerRad* atan(temp) end arcTan function fact n put 1 into results repeat with i = 1 to n multiply results by i end repeat return results end fact function randomInRange b,t return random(t-b+1) + b-1 end randomInRange function commaFormat tNum put tNum mod 1 into remainder delete char 1 of remainder put trunc(tNum) into tNum put the Number of chars in tNum into n repeat with i = 1 to trunc((n-1)/3) put comma after char n - 3*i of tNum end repeat return tNum& remainder end commaformat function clickPoint set the cursor to cross wait until mouseClick() --Wait for the mouse click. return mousePtToTurtlePt(mouseLoc()) --Return the mouse coordinates converted to turtle coordinates. end clickPoint function intersection p1,p2,p1',p2' put the paramCount into tCount if tCount is 2 then put line 1 of p2 into p1' put line 2 of p2 into p2' put line 2 of p1 into p2 put line 1 of p1 into p1 end if put item 1 of p1 into x1 put item 2 of p1 into y1 put item 1 of p2 into x2 put item 2 of p2 into y2 if x1<> x2 then put x2-x1 into dx else put .00001 into dx put y2-y1 into dy put dy/dx into m put y1-m*x1 into b put item 1 of p1' into x1' put item 2 of p1' into y1' put item 1 of p2' into x2' put item 2 of p2' into y2' if x1'<> x2' then put x2'-x1' into dx' else put .00001 into dx' put y2'-y1' into dy' put dy'/dx' into m' if m' = m then add .00001 to m' put y1'-m'*x1' into b' put (b-b')/(m'-m) into x put m*x+b into y return x,y end intersection on functionKey tKey switch tKey case 8 if the tool is "browse tool" then choose the pointer tool else choose the browse tool end if break case 2 edit the script of this stack break case 3 edit the script of this card break case 5 go to next card break case 4 go to previous card break case 6 ct break end switch end functionKey --on openstack -- set the grid to false -- set the alwaysbuffer of this stack to true --end openstack -- --on openStack -- insert the script of me into back -- --hide stack "SmallPlugIn" --end openStack on myFind tWord put the number of fields into nFields repeat with i =1 to nFields put field i into tText if tWord is in tText then put wordoffset(tWord,tText)into tWordNum select word tWordNum in field i put the formattedtext of field i into tText replace return&return with return in tText put lineOffset(tWord,tText) into tLineNum put the effective textHeight of field i into tHeight set the scroll of field i to (tLineNum-1) * (tHeight) wait until the mouseClick else beep end if end repeat choose the browse tool end myFind on getFile answer file "What file" if it is not empty then put it into tFileName put "file:" & tFileName into tFileName get url tFileName put it into field 1 else exit getFile end getFile on putField ask "What field to save?" if it is not empty then put field it into tContents else put field 1 into tContents ask file "Put where?" if it is not empty then put "file:"& it into tFileName put tContents into url tFileName else beep exit putField end if end putField on preopenstack set the style of this stack to "toplevel" put pi/180 into radPerDeg put 180/pi into degPerRad put round(the the width of this card /2) into x0 put round(the height of this card /2) into y0 end preopenstack on tabKey if controlkey() = "down" then if the tool = "pointer tool" then choose browse tool else choose pointer tool else pass tabKey end tabKey lsm revstackfalse WGenevaUGeneva UGeneva ULucida Grande UGeneva UGeneva WLucida GrandeWLucida GrandeWLucida GrandecREVGeometryCachestackID2424 cREVGeneral scriptChecksumQvY debugObjects:button id 2347 of card id 2352 of stack "StartStopTurtles" breakPoints handlerListHconvertLinesTurtleToMouse convertLinesMouseToTurtle startTurtle startT st ext extension label stopTurtle stopT home right rt left lt ffd incXY setxy setRA distance xycor xcor ycor pu penUp penDown pd forward seth bk back heading toward direction setHome st fd ct cleartext pr clean cleanAllGraphics cleanG cleanGraphics cleanL cleanLabel cleanPts centeredCircle mousePtToTurtlePt mpttp tptmp mt mpttp tptmp turtlePtToMousePt tm log sine cosine tangent arcSine arcCos arcTan fact randomInRange commaFormat clickPoint intersection functionKey myFind getFile putField preopenstack tabKeyscriptSelectionchar 12073 to 12072 bookmarks tempScript prevHandler intersectionscripte

local x,y,angles,penDown,gPoints,labelCount,tName

global radPerDeg,degPerRad

local x0,y0

function convertLinesTurtleToMouse tLines

repeat for each line tLine in tLines

put item 1 of tLine into theX

put item 2 of tLine into theY

put round(x0 + theX)& comma& round(y0- theY) & return after results

end repeat

return results

end convertLinesTurtleToMouse

function convertLinesMouseToTurtle tLines

repeat for each line tLine in tLines

put item 1 of tLine into theX

put item 2 of tLine into theY

put round(theX-x0)& comma & round(y0 - theY) & return after results

end repeat

return results

end convertLinesMouseToTurtle

--on setColor tColor

-- set the forecolor of grc tName to tColor

--end setColor

on startTurtle tName

if tName is empty then put "turtle" into tName

--lock messages

put true into penDown

-- put pi/180 into radPerDeg

-- put 180/pi into degPerRad

put round(the the width of this card /2) into x0

put round(the height of this card /2) into y0

put x0&comma&y0 & return into gPoints

put 0 into x

put 0 into y

put 0 into angles

put 0 into labelCount

if there is no graphic tName then

set the style of the templateGraphic to "line"

create graphic tName

end if

--set the endArrow of graphic tName to false

-- clean tName

--unlock messages

end startTurtle

on startT temp

startTurtle temp

end startT

on st temp

startTurtle temp

end st

function ext pointList,d

put the number of lines in pointList into n

put line n - 1 of pointlist into pt1

put line n of pointList into pt2

put extension(pt1,pt2,d) into line n+1 of pointList

-- put pointList & return into field "data"

return pointList

end ext

function extension p1,p2,d

repeat with i = 1 to 2

put param(i) into p[i]

put item 1 of p[i] into x[i]

put item 2 of p[i] into y[i]

end repeat

put atan2(y[2]-y[1] , x[2]-x[1]) into a

put x[2] + d* cos(a) into x[3]

put y[2] + d* sin(a) into y[3]

put round(x[3]),round(y[3]) into tPt

return tPt

end extension

on label inputText

lock screen

put the tool into tTool

choose the browse tool

set the textstyle of the templateField to "bold"

set the style of the templateField to "transparent"

set the textAlign of templateField to center

put "fieldLabel" &tName& labelCount into nField

if there is no field nField then create field nField

add 1 to labelCount

put inputText into field nField

set the loc of field nField to turtlePtToMousePt(xycor())

set the width of field nField to the formattedwidth of field nField

set the height of field nField to the formattedHeight of field nField

set the tool to tTool

unlock screen

end label

on stopTurtle tName

--put tName&"Turtle" into tName

set the points of graphic tName to gPoints

--unlock screen

end stopTurtle

on stopT tName

stopturtle tName

end stopT

on home

setxy 0,0

end home

on right temp

subtract temp from angles

end right

on rt temp

right temp

end rt

on left a

add a to angles

end left

on lt a

left a

end lt

on ffd temp

forward temp

end ffd

on incXY dx,dy

--if penDown then put round (x0 +x +dx) &comma &round(y0 -y - dy)& return after gPoints

if penDown

then

put round (x0 +x +dx) &comma &round(y0 -y - dy)& return after gPoints

else

put return & round (x0 +x +dx) &comma &round(y0 -y - dy)& return after gPoints

end if

add dx to x

add dy to y

--create graphic tName

-- set the points of graphic "myGraphic" to gPoints

end incXY

on setxy xnew,ynew

get the paramCount

if it = 1 then

put item 2 of xnew into ynew

put item 1 of xnew into xnew

end if

if penDown

then

put round(x0+xnew)&comma&round(y0 - ynew)& return after gPoints

else

put return & round(x0 + xnew)&comma&round(y0 - ynew)& return after gPoints

end if

put xnew into x

put ynew into y

--create graphic tName

-- set the points of graphic "myGraphic" to gPoints

end setxy

on setRA rr,aa

put rr*cosine(aa) into x

put rr*Sine(aa) into y

setXY x,y

end setRA

function distance xtemp,ytemp

get the paramCount

if it = 1 then

put item 2 of xtemp into ytemp

put item 1 of xtemp into xtemp

end if

return sqrt ((x-xtemp)^2 + (y-ytemp)^2)

end distance

function xycor

return round(x) & comma & round(y)

end xycor

function xcor

return x

end xcor

function ycor

return y

end ycor

on pu

put false into penDown

end pu

on penUp

pu

end penUp

on penDown

pd

end penDown

on pd

put true into penDown

end pd

on forward distance

put distance * cos(radPerDeg * angles) into dx

put distance * sin(radPerDeg * angles) into dy

--if penDown then drag from round(x0 + x),round(y0 - y) to round(x0 + x + dx), round(y0 - y - dy)

add dx to x

add dy to y

if penDown

then

put round(x+x0)&comma&round(-y+y0)& return after gPoints

else

put return & round(x+x0)&comma&round(-y+y0)& return after gPoints

end if

-- set the points of graphic "myGraphic" to gPoints

--put gPoints into field "points"

end forward

on seth temp

put temp into angles

end seth

on bk temp

fd - temp

end bk

on back temp

bk temp

end back

function heading

repeat while angles>360

subtract 360 from angles

end repeat

repeat while angles < 0

add 360 to angles

end repeat

return angles

end heading

function toward xTemp,yTemp

return direction (xTemp,yTemp)

end toward

function direction xtemp,ytemp

get the paramCount

if it is 1 then

put item 2 of xtemp into ytemp

put item 1 of xtemp into xtemp

end if

put ytemp - y into dy

put xtemp - x into dx

if dx = 0 then

if dy > 0 then return 90

else return 90 + 180

end if

if dy = 0 then

if dx > 0 then return 0

else return 180

end if

put degPerRad * atan(abs(dy) / abs(dx)) into angl

if dy > 0 then

if dx > 0 then return angl

else return 180 - angl

end if

if dx > 0 then

return 360 - angl

else

return 180 + angl

end if

end direction

on setHome xx,yy

get the paramCount

if it is 1 then

put item 2 of xx into yy

put item 1 of xx into xx

end if

put round((the width of this card)/2 + xx) into x0

put round((the height of this card)/2 - yy) into y0

put x0&comma&y0 & return into gPoints

end setHome

on st

startTurtle

end st

on fd temp

forward temp

end fd

on ct

put empty into field 1

end ct

on cleartext

ct

end cleartext

on pr t

put t& return after field 1

end pr

on clean tName

-- repeat while the number of images > 0

-- delete image 1

-- end repeat

-- put "eyeball" into tSaveList

-- put 1 into i

-- set the points of graphic tName&"Turtle" to ""

-- repeat number of graphics

-- if the short name of graphic i is not in tSaveList then

-- delete graphic i

-- next repeat

-- else add 1 to i

-- end repeat

-- repeat with i = the number of fields down to 1

-- if "label" is in the short name of field i then delete field i

-- end repeat

end clean

on cleanAllGraphics

repeat the number of graphics

delete graphic 1

end repeat

end cleanAllGraphics

on cleanG tGraphic

get the paramcount

switch it

case 1

repeat with i = the number of graphics down to 1

if tGraphic is in the short name of grc i then

--set the points of grc tName to "" --delete grc i

--put "" into gPoints

put x0&comma&y0 & return into gPoints

put 0 into x

put 0 into y

end if

end repeat

break

case 0

repeat with i = the number of graphics down to 1

--delete grc i

set the points of grc i to ""

end repeat

break

end switch

end cleanG

on cleanGraphics temp

cleanG temp

end cleanGraphics

on cleanL tLabel

get the paramcount

switch it

case 1

repeat with i = the number of fields down to 1

if tLabel is in the short name of field i then delete field i

end repeat

break

case 0

repeat with i = the number of fields down to 1

if "label" is in the short name of field i then delete field i

end repeat

break

end switch

end cleanL

on cleanLabel temp

cleanL temp

end cleanLabel

on cleanPts

put empty into gPoints

end cleanPts

on centeredCircle r

put the tool into savedTool

choose the oval tool

set the centered to true

drag from round(x0+x),round(y0-y) to round(x0+x+r),round(y0-y-r)

set the centered to false

choose the savedTool

end centeredCircle

function mousePtToTurtlePt theX,theY

get the paramcount

if it is 1 then

put item 2 of theX into theY

put item 1 of theX into theX

end if

--sethome 0,0

put round(theX-x0) into item 1 of temp

put round(y0 - theY) into item 2 of temp

return temp

end mousePtToTurtlePt

function mpttp pt

return mousePtToTurtlePt(pt)

end mpttp

function tptmp pt

return turtlePtToMousePt(pt)

end tptmp

function mt theX, theY

get the paramcount

if it is 1 then

put item 2 of theX into theY

put item 1 of theX into theX

end if

-- sethome 0,0

put round(theX-x0) into item 1 of temp

put round(y0 - theY) into item 2 of temp

return temp

end mt

function mpttp theX,theY

get the paramcount

if it is 1 then

put item 2 of theX into theY

put item 1 of theX into theX

end if

sethome 0,0

put round(theX-x0) into item 1 of temp

put round(y0 - theY) into item 2 of temp

return temp

end mpttp

function tptmp theX,theY

get the paramcount

if it is 1 then

put item 2 of theX into theY

put item 1 of theX into theX

end if

put round(x0 + theX) into item 1 of temp

put round(y0 - theY) into item 2 of temp

return temp

end tptmp

function turtlePtToMousePt theX, theY

get the paramcount

if it is 1 then

put item 2 of theX into theY

put item 1 of theX into theX

end if

put round(x0 + theX) into item 1 of temp

put round(y0 - theY) into item 2 of temp

return temp

end turtlePtToMousePt

function tm theX,theY

get the paramcount

if it is 1 then

put item 2 of theX into theY

put item 1 of theX into theX

end if

put round(x0 + theX) into item 1 of temp

put round(y0 - theY) into item 2 of temp

return temp

end tm

function log x

return ln(x)/ln(10)

end log

function sine a

return sin(pi/180*a)

end sine

function cosine a

return cos(radPerDeg*a)

end cosine

function tangent a

return tan(radPerDeg*a)

end tangent

function arcSine temp

return 180/pi* asin(temp)

end arcSine

function arcCos temp

return degPerRad* acos(temp)

end arcCos

function arcTan temp

return degPerRad* atan(temp)

end arcTan

function fact n

put 1 into results

repeat with i = 1 to n

multiply results by i

end repeat

return results

end fact

function randomInRange b,t

return random(t-b+1) + b-1

end randomInRange

function commaFormat tNum

put tNum mod 1 into remainder

delete char 1 of remainder

put trunc(tNum) into tNum

put the Number of chars in tNum into n

repeat with i = 1 to trunc((n-1)/3)

put comma after char n - 3*i of tNum

end repeat

return tNum& remainder

end commaformat

function clickPoint

set the cursor to cross

wait until mouseClick() --Wait for the mouse click.

return mousePtToTurtlePt(mouseLoc()) --Return the mouse coordinates converted to turtle coordinates.

end clickPoint

function intersection p1,p2,p1',p2'

put the paramCount into tCount

if tCount is 2 then

put line 1 of p2 into p1'

put line 2 of p2 into p2'

put line 2 of p1 into p2

put line 1 of p1 into p1

end if

put item 1 of p1 into x1

put item 2 of p1 into y1

put item 1 of p2 into x2

put item 2 of p2 into y2

if x1<> x2 then

put x2-x1 into dx

else put .00001 into dx

put y2-y1 into dy

put dy/dx into m

put y1-m*x1 into b

put item 1 of p1' into x1'

put item 2 of p1' into y1'

put item 1 of p2' into x2'

put item 2 of p2' into y2'

if x1'<> x2' then

put x2'-x1' into dx'

else put .00001 into dx'

put y2'-y1' into dy'

put dy'/dx' into m'

if m' = m then add .00001 to m'

put y1'-m'*x1' into b'

put (b-b')/(m'-m) into x

put m*x+b into y

return x,y

end intersection

on functionKey tKey

switch tKey

case 8

if the tool is "browse tool" then

choose the pointer tool

else

choose the browse tool

end if

break

case 2

edit the script of this stack

break

case 3

edit the script of this card

break

case 5

go to next card

break

case 4

go to previous card

break

case 6

ct

break

end switch

end functionKey

--on openstack

-- set the grid to false

-- set the alwaysbuffer of this stack to true

--end openstack

--

--on openStack

-- insert the script of me into back

-- --hide stack "SmallPlugIn"

--end openStack

on myFind tWord

put the number of fields into nFields

repeat with i =1 to nFields

put field i into tText

if tWord is in tText then

put wordoffset(tWord,tText)into tWordNum

select word tWordNum in field i

put the formattedtext of field i into tText

replace return&return with return in tText

put lineOffset(tWord,tText) into tLineNum

put the effective textHeight of field i into tHeight

set the scroll of field i to (tLineNum-1) * (tHeight)

wait until the mouseClick

else

beep

end if

end repeat

choose the browse tool

end myFind

on getFile

answer file "What file"

if it is not empty then

put it into tFileName

put "file:" & tFileName into tFileName

get url tFileName

put it into field 1

else exit getFile

end getFile

on putField

ask "What field to save?"

if it is not empty then

put field it into tContents

else put field 1 into tContents

ask file "Put where?"

if it is not empty then

put "file:"& it into tFileName

put tContents into url tFileName

else

beep

exit putField

end if

end putField

on preopenstack

set the style of this stack to "toplevel"

put pi/180 into radPerDeg

put 180/pi into degPerRad

put round(the the width of this card /2) into x0

put round(the height of this card /2) into y0

end preopenstack

on tabKey

if controlkey() = "down" then

if the tool = "pointer tool"

then choose browse tool

else choose pointer tool

else pass tabKey

end tabKey

 Poon drawSpring L,N,s,springAngle,curvature --lock screen startTurtle "spring" put L/N/2 into dy -- Vertical separation of coils if 2*N*s < L then answer "Can't stretch spring this far." exit to top end if put arcsine(dy/s) into tAngle --Coil angle seth tAngle - springAngle fd s/2 put 180 - 2*tAngle into da repeat (N-1) times left da fd s right da+curvature --Curvature of spring fd s end repeat left da fd s right da+curvature fd s/2 put xyCor() into tLoc put turtlePtToMousePt(tLoc) into tLoc stopturtle "spring" --unlock screen end drawSpring smcREVGeometryCacheIDs11202616976612222112042181961622981120259350941221411202593747892215112026096075422191120509058509238011202610025812221112025937698822161120260915272221811204212342982296112042114930322911120260613200221711202586500852207112026098796022201120422079352229911202589607672212cREVGeometrycacheorder total16 cREVGeneral bookmarks handlerList drawSpring tempScript prevHandler drawSpringscript Li @smspringConstant0.008 friction0.006cREVGeometryCacheIDs 11202637727462224112042121196422921120508488373237811202637727152223112026377283422261120410113441223911205071496662376112026377279222251120178507163215411202575009732205112018769818021701120318682725223211204248836072318cREVGeometryCachetotal13order  cREVGeneralzj  H J P@on preopencard set the loc of button "platform" to 411,443 set the loc of grc "spring" to 412,447 hide field "message" drawSpring 2,20,20 set the bottom of img "manWorking.png" to the top of button "platform" end preopencard on drawSpring L,N,s startTurtle "spring" pu setHome -30,-140 pd put L/N/2 into dy put arcsine(dy/s) into tAngle seth tAngle fd s/2 put 180 - 2*tAngle into da repeat (N-1) times left da fd s right da fd s end repeat left 180 - 2*tAngle fd s right da fd s/2 stopturtle "spring" end drawSpring sm cREVGeneral bookmarks handlerListpreopencard drawSpring prevHandler drawSpring tempScriptscriptcREVGeometryCacheIDs 112022973301121941120229678112219211202305469632196112042121495222931120227957016219111202297329232193112022985462921951120234551560220111202362326272203cREVGeometryCachetotal9order  Pon preopencard send "mouseUP" to button "reset Jack" end preopencard on drawSpring L,N,s,springAngle,curvature --lock screen startTurtle "spring" pu setHome -30,-200 pd put L/N/2 into dy if 2*N*s < L then answer "Can't stretch spring this far." exit to top end if put arcsine(dy/s) into tAngle seth tAngle - springAngle fd s/2 put 180 - 2*tAngle into da repeat (N-1) times left da fd s right da+curvature --Curvature of spring fd s end repeat left da fd s right da+curvature fd s/2 put xyCor() into tLoc put turtlePtToMousePt(tLoc) into tLoc stopturtle "spring" set the loc of image "jackAlone.png" to tLoc --unlock screen end drawSpring on drawSpring L,N,s,curvature --lock screen startTurtle "spring" pu setHome -30,-200 pd put L/N/2 into dy put arcsine(dy/s) into tAngle seth tAngle fd s/2 put 180 - 2*tAngle into da repeat (N-1) times left da+curvature --Curvature of spring fd s right da fd s end repeat left 180 - 2*tAngle fd s right da fd s/2 put xyCor() into tLoc put turtlePtToMousePt(tLoc) into tLoc stopturtle "spring" set the loc of image "jackAlone.png" to tLoc --unlock screen end drawSpring sm cREVGeneralcREVGeometryCacheIDs11204069908552237112042245357623001120407023780223811204212179852294112039576134222341120395789078223511204109819442241cREVGeometrycacheorder total7 card id 1002 @33smcREVGeometryCacheIDs 112042107095822891120517131208242410567233673681003106054578207718471120274299547144411204212202222295112027429954815071120274299549155210598574103571561cREVGeometrycachetotal9order  cREVGeneral7 xhelp @33smcREVGeometryCacheIDs100514348641315321005143499075153310146401402911531105983058334815361005143503767153410577709181931535cREVGeometryCacheorder total6Color pinwheelEqon mouseUP cleanallgraphics cleanG "test" --cleanLabel put "red,orange,black,green,blue,violet" into colorList repeat with i = 1 to 12 put "test" &i into tName startTurtle tName put 1+ (i-1) mod 6 into tNum set the forecolor of grc tName to item tNum of colorlist set the linesize of grc tName to 8 seth i*360/12 fd 100 stopturtle tName end repeat end mouseUP 3333\) cREVGeneral revUniqueID 1056723367368 bookmarks handlerListmouseUP tempScript prevHandlermouseUPscriptSelection char 1 to 10script Color circlesEqon mouseUP cleanG cleanL put "red,orange,yellow,green,blue,violet" into colorList startTurtle "blueTurtle" set the forecolor of grc "blueTurtle" to blue set the linesize of grc "blueTurtle" to 4 set the endarrow of grc "blueTurtle" to true repeat 180 fd 2 lt 2 end repeat stopTurtle "blueTurtle" startTurtle "redTurtle" set the forecolor of grc "redTurtle" to red set the linesize of grc "redTurtle" to 2 seth 180 repeat 180 fd 2 lt 2 end repeat stopturtle "redTurtle" end mouseUP 3333=\)Selection Descriptionfalse cREVGeneralscriptChecksum3vjeI} revUniqueID 1120274299547 bookmarks handlerListmouseUP tempScript prevHandlermouseUPscriptSelectionchar 326 to 325scriptW

on mouseUP

cleanG

cleanL

put "red,orange,yellow,green,blue,violet" into colorList

startTurtle "blueTurtle"

set the forecolor of grc "blueTurtle" to blue

set the linesize of grc "blueTurtle" to 4

set the endarrow of grc "blueTurtle" to true

repeat 180

fd 2

lt 2

end repeat

stopTurtle "blueTurtle"

startTurtle "redTurtle"

set the forecolor of grc "redTurtle" to red

set the linesize of grc "redTurtle" to 2

seth 180

repeat 180

fd 2

lt 2

end repeat

stopturtle "redTurtle"

end mouseUP

 IntersectionEqon mouseUP answer "Click at four points to create two intersecting lines. I will move to the point of intersection." cleanallgraphics --cleanG "test" cleanL put the loc of me into theStartLoc startTurtle "blueTurtle" set the forecolor of grc "blueTurtle" to blue pu put clickPoint() into a setxy a put clickPoint() into b pd setxy b stopTurtle "blueTurtle" startTurtle "redTurtle" set the forecolor of grc "redTurtle" to red pu put clickPoint() into c setxy c pd put clickPoint() into d setxy d put intersection(a,b,c,d) into theIntersection stopturtle "redTurtle" move me to turtlePtToMousePt(theIntersection) in 1 sec wait 1 sec move me to theStartLoc in 1 sec end mouseUP 3333h\) cREVGeneral revUniqueID 1120274299548  New Field 2*T cREVGeneral revUniqueID 1014640140291  FThis card defines the main elements in the turtle graphic vocabulary. E   New Field 1)`,F cREVGeneral revUniqueID 1005143486413  0 Commands [and their abreviations]  !  forward 100 [fd 100]   4Moves the turtle 100 pixels at the current heading. 3 back 100 [bk 100]   9Moves the turtle back 100 pixels at the current heading. 8 right 30 [rt 30]   8Rotates the turtle clockwise through a 30 degree angle. 7 left 30 [lt 30]   ?Rotates the turtle counterclockwise through a 30 degree angle. > setHeading 45 [seth 45]   Directs the turtle to an angle of 45 degrees. (All angles are measured in the usual Cartesian manner, that is counterclockwise from 3 O'clock.)  setX 30   8Moves the turtle horizontally to the coordinate x = 30. 7 setY 40   6Moves the turtle vertically to the coordinate y = 40. 5 setXY 30,40   +Moves the turtle to the coordinates 30,40. * incXY 3,4   IIncreases the x coordinate of the turtle by 3 and the y coordinate by 4. H       New Field 3)`*Y cREVGeneral revUniqueID 1005143499075  % Functions   xcor ( )   #Returns the turtles x coordinate. ycor ( )   #Returns the turtles y coordinate. xyCor ( )   4Returns a list of the turtles x and y coordinates. heading ( )   Returns the turtle's heading. #direction (30,40) or toward(30,40)     qReturns the direction of the point 30,40 from the current location of the turtle. It does not rotate the turtle. distance (30,40)   QReturns the distance from the current location of the turtle to the point 30,40. clickPoint ( )    jReturns the x and y coordinates of the point of the mouse click--useful in importing data into a program. Intersection(ax,ay,bx,by)   MReturns the intersection of two lines whose endpoints are ax, ay and bx, by. L  New Field 4)`j cREVGeneral revUniqueID 1005143503767  8 Miscellaneous * * StartTurtle [st] tName   Initiates the turtle (control) with the name tName, giving the control the custom properties of x, y coordinates, heading, pen state (up or down) and graphic points. The associated graphic (trace)is {tName} &"grc"  StopTurtle [stopT] tName      @Sets the graphic points and end conversation with turtle tName. ? home  ;Moves the turtle to the origin and pointing to the right. : setHome 30,40   Sets the home position of the turtle a distance 30 to the right of screen-center, and a distance 40 above screen-center. (It does not move the turtle home.)  cleanG tName   }Clears the graphic points of the named turtle but not the graphic itself. If tName is omitted, it clears all graphic points. | penUp [pu]   MRaises the drawing pen. The turtle will no longer leave a track as he moves. L penDown [pd]   Lowers the drawing pen.  !TurtlePtToMousePt [tptmp](point)   {Converts turtle coordinates, measured from the screen's center, to mouse coordinates, measured from the upper left corner. z "MousePtToTurtlePt (point) [mpttp]     See above.  centeredCircle 5   IDraws a circle, centered about the current turtle position, of radius 5. H Label "x"   TPrints an x (or whatever you place within quotes) at the current turtle location. S sci (num,sig)   xReturns the input num in scientific notation with "sig" significant figures, e.g. sci(312345.67, 3) becomes 3.12*10^5. w commaFormat(num)    bReturns the num with commas delimiting each triplet, i.e. commaFormat(9999999) returns 9,999,999. a  ReturnEq.on mouseUP go to previous card end mouseUP 3333w(( cREVGeneral revUniqueID 1057770918193 Field 1)`X  cREVGeneral revUniqueID 1059830583348  IThe turtle is a metaphor for a drawing pen. The pen has four properties: ,x and y coordinates, heading, and pen state The x and y Cartesian coordinates are measured relative to the center of the screen, the heading is the traditional polar angle, i.e. due east is 0 degrees and due north 90 degrees. The pen state is either up or down--drawing or not. ITo make the graphic receptive to the Turtle Graphic vocabulary you must: W1) Initiate the turtle with StartTurtle (or st) and the turtle name, e.g. st "redLine" 02) Write instructions for the turlte "redLine." 3) Finally finish with stopTurtle, e.g. stopTurtle "redLine" Nothing appears on the screen until stopTurtle is executed. stopTurtle sets the graphic points. You may only speak to one turtle at a time. Do not start a second turtle until you have stopped the previous turtle. That is:  StartTurtle "redLine" doStuff  stopTurtle "redLline"  StartTurtel "blueLine" dostuff  stopTurtle "blueLine" Since the turtle represents a line graphic, you may set the color, line size, and end/start arrow. For example if the turtle's name is "redLine" then you would: . set the forecolor of grc "redLine" to "red" ) set the lineSize of grc "redLine" to 2 , set the endArrow of grc "redLine" to true  `YEllipseEqlocal phi,majorAxis,minorAxis on mouseUP cleanallgraphics --cleanG "test" put 300 into majorAxis put 100 into minorAxis ask "What angle?" with 0 put it into temp1 put the result into temp2 if the result is not "cancel" then put it into phi else exit to top startTurtle "ellipse" --Get from origin to ellipse with the pen down. pu setRA r(0,phi),0 --Now on the ellipse. pd repeat with a = 1 to 360 setRA r(a),a --Polar coordinates: r,a end repeat stopTurtle "ellipse" --Now set the points end mouseUP function r theAng put cosine(theAng-phi) into c put sine(theAng-phi) into s return sqrt(1/(c*c/majorAxis/majorAxis + s*s/minorAxis/minorAxis))-- Ellipse at angle phi end r 3333\) cREVGeneral scriptChecksum# {'NƱN_ breakPoints handlerList mouseUP rscriptSelectionchar 534 to 533 revUniqueID 1120274299549 bookmarks tempScript prevHandlermouseUPscript

local phi,majorAxis,minorAxis

on mouseUP

cleanallgraphics

--cleanG "test"

put 300 into majorAxis

put 100 into minorAxis

ask "What angle?" with 0

put it into temp1

put the result into temp2

if the result is not "cancel" then

put it into phi

else exit to top

startTurtle "ellipse"

--Get from origin to ellipse with the pen down.

pu

setRA r(0,phi),0

--Now on the ellipse.

pd

repeat with a = 1 to 360

setRA r(a),a --Polar coordinates: r,a

end repeat

stopTurtle "ellipse" --Now set the points

end mouseUP

function r theAng

put cosine(theAng-phi) into c

put sine(theAng-phi) into s

return sqrt(1/(c*c/majorAxis/majorAxis + s*s/minorAxis/minorAxis))-- Ellipse at angle phi

end r

HelpEq,on mouseUP go to card "help" end mouseUP 3333\( cREVGeneral revUniqueID 1059857410357 7Rotate ellipseEp# on mouseUP startTurtle answer "Click at the center of rotation." put clickPoint() into tCenter setHome tCenter put the points of grc "ellipse" into tMousePoints put convertLinesMouseToTurtle(tMousePoints) into tTurtlePoints put the number of lines in tTurtlePoints into nPoints -- Ask "What angle?" with 90 -- put it into phi put 90 into phi repeat with i = 1 to nPoints put line i of tTurtlePoints into tTurtlePoint put distance(tTurtlePoint) into r --Radius in polar coordinates put direction(tTurtlePoint) into a --Angle in polar coordinates add phi to a put r*cosine(a)&comma&r*sine(a) into newPoint put turtlePtToMousePt(newPoint) into line i of newGraphicPoints end repeat set the points of grc "ellipse" to newGraphicPoints end mouseUP V"Selection Descriptionfalse cREVGeneral revUniqueID 1060545782077 zspringK6*7;CKT\dlt| cREVGeneral revUniqueID 1120187698180ChangingLight.png @*^_PNG  IHDR! pHYs  gAMA cHRMmsHw2 _IDATxYdu%Ϲf A !j")JI))LewvTU_Kϩ~ǮRJ9J-TD88@>{33\<"As=^{-/|v4Pf ^ιDzuݣz#*=[7/B o럀P1՗?xK9/={d65aL'?A?0p6rʽW<^G~'OGGȈrt5 Uڋ|**hKzW?T`ŧ͖QJB&Uav:\FlR;88xɧpkW/~ 7~W~|_?C7?zs7o>qxxЫAtŽ{3cEV^|\p_WK݀1{Yނ vst*Slx6+{ܢ:{'?+GG׮]u^˿'_=mow7}??"3ze\.;c1HDΩZ+"!_|~\-kgW͍1)|1:ٔB8pkƯu]LydP^A`lvpxh=99y׿oկ7~~7~D(ΎOW )2'OfxC?Pm,~&xטz Zf6_D=iz'\\MuO ?Í{-ז+s[:fwx!,hmj !fU,bb엇\3O`p׾y|ꓟ+WaqvgƊRaX: wc+. &LDyf6`T MƤb 5m>nYkRdPfq mM2S]U`ߛǗlvm`OL;$2{L&"c@fƐ`G=xpK__g|?s??sO~"ɩDL ~kn7ks4YXH7b'* PKNG]|p0~ƕ+>o|׾2qo |ãӻw=x`/ d sJYyM>/fc34Y׈Şή3B7LXٮlN^}/~Kܗ///O'>O=uz|zbX3Kሌ3X29gϻwҼӋS"uUW>ן׾˯_/;}ƕgw/_7-ǣ$r“=[ב#!%>+\n@{PV/k] 54}Eyd戃_Pץ+cmnHHW~po9Bok7g@J^GsfvgCglW^W~o?7'''o;~'/?dOgaa#""ƨ*Ag*WCĜ>-k3+L(p"5[Q}^!o~^N{Tenyw\"rzvj9::R|FD˯?տ{{?~}~}? C?:8ΥH"l\+fyUh]jj7 P+WZ+}3:}?g?_ʗOg~מ~i/?{s>Mo֏zl1K>?vlXkW^~> sݽw֭[3-|R%zAojSLj&DG|\9lYUc~+Ox~>ʯ3|ޭ޺ږ:ԑ[ Ԟl6cNMcfjj8 kWj^`nCMp'_ S&t"V5\<<7.8C}O>Y:u?~z>_o|~'~mܾ}Xk9].J+ZJnj-w%s n_6PbDTN#faN#! )eǗi!ۀ}qsM|n5x"O>L}e:LQ:.!C#i/Q3ҍO_-_ԯʯ<edY,?OƯr~x_= J^_gOs`BV1e^YDˤ;@h_Ha7(ېkEDï`m>>99zw=1"a~EɎIڣ< uQن3)CV}E|}mRZoHF1gUU)(kZP+:YMNMy~߂ DfX~mtUGdq6HXV3ݬ1>wl?}>p}1rb:cl|f7{8ͦ2JVqM\u#oc|K3a -4&b"Ɂ\2ߋ%Rr@ηdC&Wbj3X)w33i侼5OH.87}J'A[7VLDJ4%釭}*W͕c0 ]C+n>'g??w'}'~+dXk|TaEH"PTK/0fPUG,r[}3?oOӹd6-~1 7hɍyh-aݚ6WE~YN]Y['Dwݿ|ӟ&}c˿3@Ν\z9g9/ ]"^=S*YU8Ә%S$.W^u.B1xi=(4O# <v>xϧ:=S՜6oe1.?3`nvΝo~G_繓lp3 CЃXaU!NJjٸ:Q"!`}]y|hwvZ!}>N3 xN5l۷u`Z6ZԎ։≒a; GU SXUEW/,q4V1U9==gov/?߸qyZk^;aԹekgOœ0 ZҬjyb8^3'{W&y ?Zץ|ۿϽ?sK?|A7FgBukJqMAR5.ur9 l6#^ӟz?n߾˯B4@g۪n.,LQeϷb,q:l\:s/_+~p/ιCk0,'@8`kT?KoQ7חv@GGGKoȯS`fPUNlf\G j/ʊ-; &Y=GsfKWe;4Oj^9o'Lly z cvC $`J5Iaz+Y&(Fhӿγ 6ZuO@s#:Wo/ݧ?O[8UaV1q c6r!ʷh5R]sEosty$w#M^0Q>CՋ ?xX[f~9&y #ĹՇ2s6ͬ%k֭W?O|7Ɗ5 (#otdEU~^srTI.#<۳ʜejv8t.dء|צE3Y]ɢ5\re\__|x~?~||r綾\/ү# y3W.J,?Ƕ9(C+ o8Q>C3.TN 4rPU_zox_z9wtxxsiґ e~UA41x<apqO]9>1iO# W|3<v5l6;>dBGƃ2tX*^.ap([7"aSo$J'f dD,:bDs埡~c@ ?(ˍcDXd9R^;ӡ3ؔs?%7|N, C?t38{ыd1 Z.j:~ŋY1ƍ_|6WʕO_ۯ}}oǧ sth6 ۦŰ ^jŷ+"3a燃1]W$տj4 MKpbv>k8 b#yM 34tTJ3S*u(,qf;% D` 78&ws?9ΐ3 1y13_ :LrXt88>͏o|W^=],>c]}8tĚͭolw}`{c֜ ȧId eZ>֟G%FksSİ13^.NՏ}o5  Cv| ,bVx,(5 Àw[y{>31E^l6[.^oL*ozLP˚~?}l> B<٩6 CrEƈv>:#Ԥi$uB~ꬱVg u]fcY7:뛋,Z,c/޺usZn6ͯ\O޼yڵk7n8<<<<<<::_.c2#+"FUm1+/套^/ݾ}gl^]b sD,:_LQL-( "T{Zk}ZՓw9P܂F1f6n٫W^=:bf3+Bι~~qzz: ^/֭[gggxrr2 TLEDd^vW]^xw]~xK\SCc^8;~+oLJ>!?u2}`fAlA=PRVؙ 1=dfc,꫷^}W^Yu"g AW3FaNϜO~~o;99{d߾{?^|W^yΝ/w^ݻ|+W-llgϕd]XBe$@pX8isDD +C(̯ x*-8C!ثs@,br bYly|{wKu,33GG0[dq=߻+ܺڭo10]O<{{ǟx~xHR}5nz^k+?w_Kzw8B^98<7V, fNQ1Y&`8]W_zGoc>r|Bf[G[,F3ۮs+^@SfL 9hZƃήVy1BeYIF"ؗrG:m֓1c0|Swp>wέW_ypٵWNa೹#{0{j؈8z7,;cX:˳qswCW^{mo{>ԓOmO=w=o>qꕣ7ot*ʕKG$$l4iOJO>aۿ[w=׿~_?|;wݻ?z͛7UԂ!u1ggw޵z'OOO1l6~ 0f"ava `@Tҹĭ2E{߼!x3nblo5\Ј )wfa"g''f[.ggݻsޭwg}'xO\vm6]g=qfDJt=fcBL rիy睟Ovo??_zw>Go޼9͖}=7 ZӨT~\,_g}?~wޝ剥Mq|1>d1fqIs%Dde\~[ַq8{7g')i<=;=;9=޽{08ٽgk^;>>6FN>[;_|~NO%}pqgGлwcnJi/pv2`DSO^ԧ>oݻwݻ/޿'kShn +/wG:;;f\.mm QaɷP>OI3XzLhS`͈q? ^wunii|`>s˯޿wO98`߾㘯>7_>_Ǯ_>SgQ0̲\bqrr:(Բ}m0*I[Zgz5ټuO}_?9^xf1W=Ox嗬=_CDbXXkT8 ?蚖[F,I+xM-tn<6k5 SgXEĈ XQhg7o|~ |xu+t}ܿX,e\d^wʕw<{]ro}LrqvF޳Z泙o|*wVlYX,TԞfݵWӿSO3^{~'\zV{w/+O>}ߟ,{#TO^=66Vqd7l4ĴN̎V!hH[^Kde̓_o'-Ag=gi|<+GG^_zo6X 4H0kξ <غٌNNNSO=~p|3/l6@>q U.) y̾~߻xx30 ^nj@8z kή97Q/Ҝ@̪`9,E5p߲!$ U0Hӧn>qL]&O?W^3=-8f%Jf_?VSD޽{~~??}Wuֵk׼C1xff~K/|Ν+W^?zX,}ߋ0rCdetɨ7$JHE׊E4U8+)BB "fG4sNON>Κ;TLf{nD\.ˮ뺮;[,:>K_ʗl=::"lF^ڷf]D''o߿͛[} o 9ПfCSpFƤ}޹E_%C[mSqOYhȜGpF9a!H⦚3XFŤ/Z&ELΌ8w<+xtt+>̳E/pծ:=}O>3UhtF*|ƤNllگ|V#d3 ?*d A!ѧA2+pje1l *0@1՜)PW>]zu/szw]˧Rk?|iXܽ{gqxxTS"d=Fb|DEW07f?BZ) X؁1H0=Ѓ#0f%?%1q|XȄ3+*B/9E4@u>?q߽q'''C;NOO坻w5}?ܻ70xM.p$̱)=yPSko~Rdkj+Nk{Αsdcx j(G&$7XZ Sql;"7Αh#Ba%K׫ ֕a*M\ɡGNOOn ן;3ٳ<{r||w?οGMw@-u`xn]wY^|ۺ录ԠAOu"u|c+P7{Sk6êx̬G?m|]z7ͷmׯ__.?ׯ]py^"zLJ99W+|_>*1YLa mMS@.*Cm|f$[0:~!;_,a`ܟL3[ ̟}BC8.">3j3R1f}`]:d`E_;ʨ4i3'gIBk;)Y}q 03e<9rv3mKj&55O(%a;O4鯇[9DLh) գzJx 7_z: xqpHz|qUz͏jdݘ{y"H‡d[3Teg/T*ׯ~jƍ ~1y*@^Ne`[Ozs9k'5GΈ9 sD2HSiA5ftqڵ|<;ݸ~AT$"Gq)`i^=ɾɃ+uNFJxDeOl*אĐ⬳n׮׮]{mq:@n\>Dt-o@6b./P -+irJwKx}BEyiz: ʥGĘb6~*Q0fS!U+f޼d/z3#u)t=3+,Z+5HUN^!y[OuN% 7$z$sܴ {ڕ$y qOeQkh G)ŽW°DPq "!1E]Lf.vik$Lb}c(.+Oa2pk׷`zxg9*E3+cDGW\{ɵE Էcl{UQGE]P LE9QX6|~u󃃡/Ho蚚 ]^@>r. S tU P)8v""SĚ2$)7:.JLqIjy%X!VՎl6lGD9nUX\uUtxf#)w`N*h+Uچ;]|,q" p)=ũXktwvM[V:w8:[mS~'W*~@l-UZbx| }ОfzR'Cli/G'b !L%o \Ҧgzdg|e`]i޵6q' 6ҠLp>a%s2T͐tSy86Id>EQa1ĽfJB4=!QC|q:M z]F\Q׼Ktɚ#)^Mn)k=kt GdLbڭXzk@ԉؔ X)/KMcf1A9cEZ"nѿ/lמȼ'v 1ª i(3%Gt-9 aH[ZkzA&_9hw~f@$.-6U'cT(1s `Sw.q97dC Imb7@J ȫqS2V^ g5b^HmD*eNFMߊqN~WRw.."VEy|@¬ Ws1#{3L5Q ֔fzA?ɟe嘿5/0 C 3S?^vE8튲g0?͹\+*={<8'|zQb[ %4'n#s} l q}Hm bq9ZMCݿ<A;\Lg"K'vN#} PH-O,ϵUIJGtN~d88ֈV鿜I]?|9Eמ{Xq0F',z|I q#֑7/c6s溎 sլs- :mf eJ8oNL%ꭄ? p1hWggw{3;?dZ8U)iM;[LEꕹY ӑuiattgJ@UGqgCܱdK:q)al#țtqΛofFHF8jUкλ l6;<<:Caj_HڶjC)Ghbn2y *l]6T;DR,Xς#0y%N$s>̻tX4\bRbQߑ1Rɞ5h_zJ RIjqKĨF9@_gz޻Dxr+jWLq# @@\t8SA 3%6$ O b2+Wn!&6  $`Ϩ^X'(&nefSN8ev".-1 Sކ_5aQ43)NEs57j p/w^Mj^)$ X1g伞+RU"$ۙ=  Iot{:H6At 2afG66UQvڈ@-Oe'c)b+4t| 0VsXXo 9L7uD ~VUXLu[3dD`7IC]c'Ǯ5OrQIX_!1#W pjeryzzFlsq&z%7/ &g]DW!?.3Rkx+va^ J$cs75~bƘbU {~3D9Dyzzz08! k#EٕhEv?\]K쯖3,m$μVha%7wP`{cyf$Eőh5cs?!vvv8udIyp7ٵg{Ԃ֫#C iFk!+ SƟ5SCH+Uc۴cprɟ`=ZEL۪U@YgUgfiB.e!V&4L7 .L5fּvz}gl;8kOOh<9A&)ਾs(ӛ6N1*{!FbS 5kǝ3 KdSTizfqܒ&rg;떋0+ks]P4 f܈dی+[3$77ik.@՜pr*CqsQI(Z}m.@_cu BUEf "hVx7R<**Hh VgLn15$I7TMf4O|~uX1o/IR/8GBֻUjF_5(lԸv;_|;pI'*ݶx+lf%@owl!^K@g@3G%s %>%XB.ڈ|G>'<蝃fFu2- x UZo$QɮICu.X=sC`Ld\Qu3d*¾SB$Y WgcI(9h'Da|Gp6j(V&~06>ߣ ]UES4'_v}TX©WN>Snd I:mw ,_ąX`XY r.¬fn 6l:¬NկӾ+O1QBF 1)PaPmc1B "AB&еqcpUOOKcX'zβDX#0|M$OhPF Q>vD7;VmÙyQ2%8ұz9 831ɀxp0 ՘ 0}Ӷ5bA-8vRZ[yAg't (r1I%"N DMAVC5. P=Ӥ1)AK7fTv=]lxtʷ1sr N՜T>8jԕ# B'ʳshųi ~Q} y&/E+>{b~͜L_oS9֣J\&6 lZ4%MrFF<8$ qy (x'N+rq.0 ^""u]zխbDkbߤΘwHȖ_ɥ8XZb`!:Aq+FV_\CdLТN(Kgc r#H dOY ]1Tץ?Pk,T:k e!cx5"cnL쵐FVW%QkAJȄ \O܇Vz^DW 7U-+9oi`819id 1=G{9qeHpF@?#d+~6Q3&Q"7R;apgl,b1 aq`"CP-17߅˝siVЩLa$=**g\-vCZ7HF mx`+38ȵ` ]dy^ 9Nc t7V`Zώ0o/yUh^}4'Xe2< ׳8P񈣫m!*#0$eMXDy~i d\-&I2o_Leߣžosi9@$A>ϼWUxf))dSA+ %}m>4h4QokPxbO=Y$$,DoE'w ]# 4/b6OEtr'$0:CU1'`(W'uQHN>ÒFOl k@/|Rf$@`Ȉ(ۼ)2Ӧ{R@ bU! &aSmS2 9@% h#g5W>ƿqM[6m3_t$?kYˎ K5ƪeᇩ[˄H#{rcf Ps䔽zs1A GDwdRk!`b$rq=K,#=7 JQKxcQ[tAD8Vk<'#.2*xHĤb 7iiAza]pq2&DA+vӓO=>}VQǏSPkȡiV?HvR J"wZ1?p俞%1A<5G:UvY5K0M6cHU{DL}% A@&5"4_ _H:3J7ȕ'Ct9k22u Epw^oLЍ-KQ %gJF *NiEIT|rsq d1E9 PvΩ4 Wz5 T#M)R)`Iô@ȄHBn0nɼEtcXufnvVebCo|&ԣEG" jaʏtJOq .Upf hKAL}j Iqm/㛳z1t`_HCМiDȅs|$֑<7ݨ0 {a| Aa7[uLY3hs=hJ:tLL+W.A!TLIfJ5'-\y0k.uM{`qi[#`sN"dd{d:\I-%;~G6p?{ykL Vis;'Z =35yszf5%Fѿupi3AI0NHzrV(zJB9L{4eپ5v Zu3hϝ$d DϢ&uo9vv+ >c[%BT}mp)),:nPUQ1@FIiȡl`YJ8Ī0jdsJzp fd#<&bh\2sP$c23aJ[P4#3.ѵ^43|tU)6ACS#я+j4F)U#bu'S͈+<(b9LZu}οه0 ؂<:3L{3.þʑ\3GZTVM~}::Rp"ǧSd'j;-H$$ uXt5x;ܹ",EQGid%K(܅}8ʕ T)IAٴ2$mťfa(6NÚP Ϯ_{3vbp=J}B ȘS7ei09ǎMQۧ*ch~GWJ׌CONtrFi_FѾ816zV 7#&K缳f&oY^9~"l:G8"ŬLBDeWP0+;] "^/'{7Gt5ak7y?i`l?R=B[a,N)T>  5Xwł*)(3z4"U(Hl(p!;W08XLғhv 5bOOv@6骟ߚKԈ6k}醝&tT |Tȼŕ V{kwsi7gE&LDvaAtc0"buaB2VBI3 % %E|VDM]Wf@b:I䋄zN>p;FHh/KxG:oaDukrU]oEWL\,g>Z*K&Yi UJ"cŕ{ /X<R&r:u #9U\liMETpg3/{ taM1'o[vn}d[p"SK B8ɻzѶyc 2WItX|79zXN\H1MČ^}q~//3X8*gf^.f։02hD5df1",L unn63cȋ,fuMR1 VsHfer奓%Ykh$Ż5^-ld>A4 oiGikǪ3!Pg Չ0i#kZN9'9R?|其EtvYk@r8˛K;߷Vt]8)URc1%XOeC"+RrCo] N]añ;C!E]#l8d\d@z, ^Up&Lp6i~g;kOt!Lt]7>z/{+{a1~rP8OYrFMVJ>hF J#V,|M a&cz|߹9uF>aFp )/ KJfӢJGmFB:i+I#F2f _A%UqP DL?*Usc-ff6ֹ~ۚ){7iV@d[tKhȴm qhia.S* \% '0bH6AMG;ݦi*m1'"?5g2(Nלא֋x -Lŗu @i#؏Tј(*Ip^/(L+`IDwW;`LIy D";9;s8etΔ qDS 'h6Q5:fjmU G;@c12חR{j>>Vd>ZSazsG Vzc7T27u%9 A-l(;DK$v_ F lhϳ9л~mc; 9vޣ۝r]ٻ!yN/=-e҅Cc80{K t>Dğ"^ J71ouW*[2Mb$8' Kt$OAEU1gHxx- F!%F5[RU`jġ)DL#\9a:cXEܧfD[.6jc$DcWQi|fK7 KjG#+_$@@D"ryZhLBX Ձ38V]u|Zm*̷rf0Z_-"'(YJx0 u! unR(xŶtKz߳HlW J7}$}HkKQo*[-DZ[_4ó CdT/dG!mU]m=lb(EsU+O׌\ȏk9HznRd ( mlV$4h{Gs*S*ymeϼbBF^6b.8*snK^8jSu M~""-EB'.ʤ׫&nٷŸD}-hfB$V<% Znm4@d@5h )4%M]`2 +Dk# rřd0 j4I[퓍"zW\m7PylM VԂZ]>1qӱZJW[ޟƊvgJ4U'uty8YS4<&LLVkT[n\ui 2ͦ,5UC~}]~ٝ_lh|0zsMPIv@Ƙ|9Yǚ>&Uf1O%8#-oۦgJ M٬bYKeLٵi1H l5FW;9\Du6;aU1l:[*d\%3qE=*(8$sRkDX '_ȊGN Ƣݘ,0QAHtvNoq͇y-py)!pY=p(`[j%:ThreW2@{JEJ07&i'FkQ`G JTɣaIND!W)`c%-7k'L)*l6{-+&@YQabCǮatmE}8AĬqJ\up=cT 5-IX3ś w,+֭e'VL~0QV G@Kzec\P)G>qgIsyG,gYdO:U>(;qUC ʨ8e,6D~PB$S#ahB[t9t ez \ϽF,wZ\6]|˫ m`sa6Jt$NB'N1b(NZ\&bYUA-)IFI$xՂG"EPNDdiڬ^,C2֝Y`s"YA1T(;*+xZjbӕ.6~!|H'ه!m>r2iDÆa TK33c:=vF}ߟ.Sgrb~%6S;-r4fN3xQ^ub&2A<.,'XM}mX_DnjVt :ՂEpd䖐R}A:7vNKl*LKbT7>'H V&x$V>\hN9M& A}ILN\hVN*k L-D>q`wJ&N㠜۫jN8#YA 03f @aRm^#IYtgfHoG`!E)T(\(a(QJd#SW-|g=y,b׈sNc!1V4J4!;VfO/i vU6o%X#6c7%:7i9B2FN(ăMCL5&VaVQTIP{R/cUϠ YW*ܾĹ~DF`7ո#,3cAϯ50w}.}TPPc?RuHG": jӀ\)9M} #;LԅuQc*TcA5=&m:̱fyR\ygF^`")BdlEaP>J@!R#Ț{cm 3i{ ë22G7_[j>N DžP^c+bt<4Ɉ]$RuDLFN1[1)y6j.6r5BgeAQ4a!kJ5V.Iv@Nzn1wm 0 *eED*z1d]׮YZɿV%.H9›rQ;7/p2%(r2*_p(ZaI >0dd"ײ Ss񽧌L'C/N44k1LȜ(uHPZ+nj42Q˛ne)xhuYdz+?*ܧei[@@Ⴔ9e\̞ǐ0! b󫪙k?_VL*5!NWgD?vれ%q%; 3F= @) £i(;4G.:!mGfKJ:[uW6B9_j6d…UxrGY1M髍fE "(Lِ)rr?w3!.E#yW1'I?d \] iah]Oq4,11&X>D웁43ƈALQ(N,Ll%8& @;ȇ7Kh"PB9PyzX-J 1!.@!8:H 3#2(V 4 xq-oQ/ido2@FT: c0ڭ1,Ko_yW0sX[DX[?A ILDth!!%v齾G!&{UIH3"/u:b22qN跗q>$|_XVrFJѣѲ8[v@a904$Z䶇$TcۤIq.Ⱦ GA#s6&%@"hGlcӨBHFjnTIHd8]L 6ބ;f&7E#e9*Vw,!cAjjh_ޚ@VJ8"=ĘφXkXdۓkd!L<( H39 \ߨφDzLi\ X=VHϮF{g0}qszDIN˥$} F #f6Y@Li^^#^mUfH勈_S)k%:OtU gSi&)cL^}v1!5xvRQ Q9Y,Մo0e% 娵&u$Q ̐4P%,ʴAam8٭;NCG=ca}&٘辇PU87$T&mśAJ lgwNَr rKTb5rMa|3hK9H+u eK̦^ }ڼ' !´c׈d*3}zLA1 dF3}P jT]J ]\φQ5K`T&fy_%3Q NK$f!ìMFH]TAf_dĒˊf|qoB4 szT.ʯO|G2*2tFph'YIVFf4&EGC2>dj؆Y@zSjZON9&©2qu0IH" bhaƬGMҐґt92Ż0!7!JHm7G%/OT>몔N 8|i1 7HG缋Q;Aa&ks.VXO@d[1bx ~Tk^fϙ1SMNK9KXB5jC[-Vy=W.Y^a]?`29B8X*q+R}v=sѤ4Ɖ(bcw.b|s=_E1YtČ5ƘNMGXC 0` f6D(IWذ <2KC"b͒ 3F*흺l'jOVm o GzBRFYY;⺫kIt˒jLw c륛Yy:$:]ʑ8v 'g9mvGkO&e/:|1S =rЖFlcDpɎ) /qY&J]Ljհ3Ο9~ීԭᬼH}$&c;|[ZUpr\E$2Iv[)U2㤹Fm]0ɔ JmS;USjsDNPr2P߸*VD&,C=T}nP352&FwMƶڷ"ƫԠJgw6tYEEۜ&&$D2(1=gg8$xR2yӼG>FAe68ؖ^xOUΨ$K6!:Yu2Sp> bLXMaq]EIDGƕF#ֻ/KO#+%\ {޵BgyrSF A#8z X؟sw37dՆs9'0@HR6~0‚rtvf(%àrM&a`;"a4V(hl`s /2rZ2YjX/rqvvvvzzz||zzꜳF%TIys('δ}X/D~eė_7Q|ٻ-C`: e5YeȲ+v'@ȂVn`t"a(u2 0#ѕŵݕ+G r $617Μ^]޸qXG*|oK!=&f/:TGר<=Aoڢ[^I ._ ݾ67* m~9ZJZ}G PP5]uQWH B,w%1;ožTL$,kD1,28\.g1URǼ1TxaNY^BlA1W٦ ;2Gdψ1 , ,k8-D i՘p2# Y5bVqm2$54fK)Yi Q.+ԝ.s^HcWEAq*`畡9===&bb!bΊ0 IZ_tvT \a՜l9^Cih˄m~%M>C2~+w Hj|OLb?@<|r(t5TN^'e%>sHG)d5"l`>C¡ڝ󂁱۪΢5.zƛRuaeߕ ܬo]3J n D /.B<Ǧ{)7^?Hs hO64Yq &$ N.&/U%&6u5X8`BiB2@t|5DDcwnӳ_e5>"iR|+dk4m{Vh&k]c&ulQLJSG{B GMcxx)*.\Pb ' J!Eo2SS f HziU#rE2}&oϵa`f2my,L U[EA4E]Ӱ~D@jT=FV\ζY(&5GjxI\]i/m9Ph@5.L4cduxEA#lLpv{+p/r=eZ_Y(G癹`/{n{i+YrVwFHxҏ? lZ|M[]$x]v`@Y`Tz Zh;<=Z#L8ׅ*`nXؤ.!j wM]5;  unzyŘl36֝"F\¿O+]j?|tgjTϛUks4Pr ZAϏp>2K85ד";9Dc%^Dj=q $*eSH"7!?Zc :y!+8E2_D&+p 9]w ,ʀ8u4q_Tgir4a~ IT9 9+qiP,|HNcw)9'~qT-ăd=::<<<7(Umw:87MN(怶My&6Yn !Tm}o>}LPjFC.H_-3| AYdA>φ x+7O9O V&lDHKJPf D"2^A8&nX; 0t gЀZ{hE6cLةNJfݯZx9dQ9 o9BWxVbGVI*zb7'^))VgH3E%8?αhi%FXaC Re01FU1d:Gsnӳ3$-䛠{H,mJk+7„x2mA>ofʬd0emm9h$2(7Kb'L++yd'r#bX~ Wrqf_է$i1!oDw WIQ$/AQ MU{}/l+Ck3iu&zr%~meU Ŵ,sxB8ypzU2]7|*1&pq83dfo6(AU2$х4{j MdR)6CFvUf~iګUJ@,2 8^q+(Fs0y+L#HX;cE^_! gT+4ڪ7dz.R79(̆u6ފ@J}<%=15㽌1b5'{x@Pc5tj s@SK唐W~#{m:tvTήE)x P"hlV&E!nNf2cKXkGdu?d2zn `DMtWjj2y[U$^ZFJeoKW ƘMB݂7}f6&XjlX gѕ7HUU/Y3sz=!ŠVUT\6f~ׄo~Bc #u(R&r.?O&雇9lh@OB.ԹH%@Rp` .B Ofeq<7s:yec!UuKH6mNc<9h$s-`w)c K[C穀[ gJ}Fx^l(yVi ضNXwNS,1 bZ^Vτ"B|k5"_gn(=@}TZ۫sإc'L*4C+ C՗_:n.65YeWf)ɨf2-/ز>$dG5Habb8 )^ԗ)DiP}LT:ǑpԦ;hNx$:mlb.WqВF#m#Ck!$=Ȅl&j χHM3d{}¼f*;F!8؟"51bH+$3\]q DGJnޑc%V?hYI.'Mɮ5ȺaN mƣeQ Xuu3o?}ڍ1F "ْ]8Ev`m*Ll1EvO%39ݼD a՞9p ZVS(uws,PVXH9tPp R2 hQ\*L_n^ҏks&Wg¦Xc¹({LJ#2C!m^d_^g;V% oJ?@OP}Zʂu%:01-c^S69\Ԕ|Xu'oB0[UR>9<ÄZ8R:BTI#^?$$9<9+֗2yǿd^u0)+kYX"49%#TfkG>O,G'g^'ZFx $WNTu fI""*Y=wH!ȉzʰ`Veiq%yF!j(9vcZA1 .ΙK P!jYN5S,a#ւmL-f6D,֚n4P ]gmbFX0hXC/PIUY]w`i:a#f)6wc0X3}ͶzKrI#YôZ#tr8( `?eY]eQ7Oz" ԢtT9 j5S]dE.A0] }c)B+a KR2V)|=)$,ښk qK\ZhmS$O2>k?Qm[Sɸ uy" l;#&e?2Q"mh]y(xy1kL*  V W`H R۪QiUՆZ\V ~y0͕1s-p aQj uI ̴'1*s {TSUR#N9}-6~~/G\?Q7Ś/7鳜)-&)BA$#2×f8s0[cnd咈#t"fn H0g EΐiCUPYs&2ԽHb؝af ?=uӬ3Lߊ|&}tZ% y$u.~H0GN~. (F0YF,Mj!jgL5$5n]#"FrpnX֐H+U*+SGUr mIzT2ӆŽq3m5Y <>_)s3xDT^{:v?S!K 㤽P~eSD x“3TڨZw> %Z 9-Lf+1m`W$ L ِ NՓ+ q y_FR `q!s4/v$.1W}Gd&5"^̗d#`[vFɉ5PuG: gqϧk.SV0H(R<FflsGi#ĺIlkNdZOW7f@y&'x~#rAU"DH^Ww֖8G^MQ9Qfz5kClu/Sa@af*: u8e8aruF EJا?$`{!$reXRPf{P2i6!vShauWaRX9aI{V?̡mӍr&x_w2A7zqU9ruɒϢe'͉(!j^B/'L,lTf/O\ΐ(9Q%[mt&Wk ;\/'ɮPEnQvfg`/XZɰ8%7&]^hM">)J&67Nfr2_ \FtmǮD:͎X6G1S!޷-00t*a{RSU٪HȆZL(D!6DAdk`xլ<ù؝W taK\IH%e^àm>жElM}vhuTa藧'Y3?s&sΩz 7eR~^-k?A7T{PYu:/~7Xg(&Ajo ʪ9;# 9@ JРTE&&.{v(g kkfb}sFE`E#Zƙ̤TAnR)CCF; ٶ{30{"{=8"08߂d'$Yn$|`ޭndغBdx#ً9epMvi 's f1` |i((Dihuc BㄣGD18xHyB+PW*'h&Y {{טZv ނQ%b˹B٬#0 TX &ߪT&nB?~b/RM)zZ*sP&Q <{!L 9ޘε8'Jm5EQּcّ=2 Nu nfC?iO%x3//b"=q QKeZ+E.'ZHb/@A"gQbOdPe19c38y^T*7A,b|?MѤJ,V[.4P㯣VbN?xpFupPuEGW$uU[J.ϏX$WpeZ ]`O͋ T ?YNSd}q6EUOd ԹݛebRg5K^iF(M0sW'o/n_,On=XEK4%,/'NNp'K(*ͼW7D?fr 2@\ݟd|M/W)LKil]-Y=2 rCI(yD!@aftE6 eYu IEԆ(o!H);y?r1Lz5@HX:u`,6i1vpJZI& rȊR,* 7mh L"aFBx,g2LV NY?hE GrKph`ifhѦ5'lŖB15(TޓRKO^${}޹991 a V#Sz\m^rքi,4jM.%ڳYsx;~v!Q]U&h:uѵ584-IH_,jZ#*$J\`arPWmߙ! ^ŭ mԀw6W>=W@X5vw96w^ %-oeU՜,f4#$dš;D${SS!lR'@Sk|Wzo4R\2y'+ɷ}B^Hq?Yd((!) T%[Qpcz7⮛;C_oL\'D/Ddf`63w;oI)w]Zݬ...@MʷzY?80-:Ҍ~iw^;t-ӭ"%8AyKx;Df =8 lfch+?"{;wлk! {/6}/;xf&YRLccLYRjyy Ko@id{o[ X]wpzFOpX]%d2do15"hhwj5 v%Zڪ%ۛyIu\h=T$VB}lgy_Vfӏ?򗒳*9JNV~ yf \.3zw+piz7b6BNN&k`!̛esHBFZ{Ȭ0 y{~ N(ilp;- v,novqMQ ؇iW5?#@Tq"@cNx[nP |OR[q'>7)'4` N)5P{ ٙ=]OETnj"TDRPT0#L HJ4A}2bjp inE=5^ͭ\BmУ~!g%O@KnAif!_=¦;bGΞj6v05c癹D9\:2h%I2q hFD h$Yt8wڳwmd8z{(P{qaU)\?0 ,Ly/z`z`4&uڭ݇: VzUuL8@`}q$R3.EUQRYI ;X8@ "qlFNcK458;C*D޿ 1l"Z_Vl<@tVY%%eJ~/]`+Ͽ*R8:w1?; 񱋯ay@L &a_~A;~eӬfboh+"w}w58[:4F7vӘpݝbԲHJGo,w>a4孽߭ŋ֫ͭkbvMڧy:&*_\B7A~`ʟ&Z!"dJNQ,f ]Bf[[[)5hH1uۭ,OvIvg{{!8%68%guř"Ї_Z}bq4Xw9%_t"dGm܊={/!܄|׺39()-ބ!zgSM35i;SGpjrPLS="(11?r9U)4>@wۧw';g:R4~\Έ) v޿|/a?&~$|⵳Ie#2SڍiPzf~IN@jco{uvsj:$yZ'5Dce:U?X֐q?ڙlC1)-zݞc)}^ސ.ouvXn[osTp{t8NB1쑟",9 FuI G`?ʃzbzw1 =Y׭^< HDz99 ?x;}z?CX;1AO$ShV"$ u-3'BsyGL? پԻ`W>n:o f?k|kǝ~a<.tCS4%P4i" !39{ nd! z:*&EeY<= aw.}`ı 0xe>Pvv{IԔX)@{V ܍*~TЈE?P+!IznSm0J ae@: 9iC̶ vޔV2vQ,j1`&6T*`ދ_`ӮbiFA,F~|gj bpk@w>P_&1NLYzPC&.+lt< MK P:[m܎vk kٳ;-\r΢rnn۶pH@>!WWL\t{8SU)/Ǚ6ޔ9F䄇9ؽSq*>q ^"rzL،PhGnvT?T,}H2Mt ޳};ҡdCw$s7Hmb}_h;(,AqL]>ˍi"yMww{^w0\e>xM܅ &@*,z)<>fS*=v+d #pu#Bw4 2na}wvC7P! w D\U0 ‘" =R:0zg%C^oiwqv0}~#Zyw8gn;~Hnui轑ۛ$Ol BY»E쪺Dfw||2 /C1$z|=Gx$bfnd gg׭ %=^i2ģmֻ-|eo/zHxF[C)D@DP,K^ΉBܷ vy }(|2ހ {eՅEjjjx#cj{eCT (;>aDD\ VU۶koք.eીL&p[UᎴv(l}g>;_M6@6paZ vL1tYzGé?{UL4:m] Ԧ|xPM ](gK-GҭITW>"8;eڡuŃ趡6Ro_|q}}5 8"@БødG|Ue0m;wJD*R&`|n?îdʀ[FVC&;jlT?$̶e1e`8A2A<_*!mu<@/n64 1zE2-;~,w.tf)G 3o^C}p0x 6XY8k"2JwCD>L JXB=ԑ?-hpKK4S1Pq~{ɞ;[ ha`f9'jrpBަЈ^> aTҫkG\_uJ`wg]>֠Cno6nTp0b1h&DhHwkdE'g4zhEBD@x(듙(04BnCN}љB/\]ژdjǘG@ysIqܱo^p*c߻p- ]@ wws'l*ԌMyȅG[b`h6J:@s[%\ @2LTD( ZI{*4GS%qQ4Q%gQ5c"f:=9ڬ'ɀD \gԡ.Hw胇 D$M.@w&Hc!0^ bw; 嶵D=Ȏ^1Ϧ3QjJJJf˚&`v˴>g ;wG4n9Rw wyٝ*z+0eEPTbqm8U3=b^~ˣ:Q>x.Sd2q*q{B)e`PGGb>z؟-//'?9l\U>Ӳh\b=;,/ӿi\]l`R<'v}vx#SBU&4TCԃt;] W>@d܏ejBE,*:u;.$Oj2~l`catnlf{Rr0 *(dCj6G4hI2}PJEkDPxF'_j?@u[Ї'<`g?9~)I׽21~kW4]g{dTc( gzsivzܒ| "JID['rh Iٶ4mMH1lBV1D9zM-t[̎2[rpb`ӕiqxivK~y=Gw^1XbJ}4 JmN?HeV4N.0 !TuUejhB踵T TT'$&:4hưS!w;3 2U)g9 Ha2HGTV#5E"Բ5yw5nE c"m7T]n;U!fB%kfh\ D ~~Bw'C]gKfRYUq985O*8+r 8NUM!ہ.wp'0,VJc ~nM+pgfL&9!&JBhx`l$"cFف<sOS fswG'H$lDT>HT l &.HL)⸼~yBݝ&\DLx[J~y!Hq 鸻3 JñÃxՔGWd e?|u[hq=I }wc H.Z\T $]]i^3""gG/?_~wF;==lt,DݛOE1%4dAE j{$cߤEc4\`7R־WU? 'ˏry4|o9wR9LUz_*-1y5Y`$<==0b?Sڷm4Mc=U8nƍf# * I&iVh@P Uw-233$$$5EE4BBeG)$32f#Q[·33!B&Ge,75PG=(rPX!˗s痳fQ78s̤q0$gM`7* tO6SQLVc$(6s t$3R>N00?x4#Vlm5db4cB1i9W؁Mb)f&f^i~'`ĖYn7/9 ?y㧏?nn1BPE)XN%3c  Jncr̞Ǭ8 yl>߯|'`?ͽa02qA"de&pX42BB@tZW. Ĕd(/fG*Cq D q@Hr  !:h<\]?~<\v]3.g] r89> i,B eƌDhhs&04eW򬲈gS-t[I`@`hf"fRf4&%j(.Qr 5S}) Ԑm%ӰX$ܓtPLqG:77fhf}Jcoϻv|ڬ*=NMiaQ^f9iMSvi6yw:ʸiωm߾Gۉuu`뾓RJOAѢJ/i9wqu ʴl~lM/JY!fB*rP5>MU5l>rVONSUMbj\<(1ݴհUљfo|V''gubEy#3c B2QCcj@EMM/.\Ĕ0aNc̅j4d$SͪdW(N3^sׯ_Wz6$Z``XPFeж+''dĮvqh`ӔL4Lf{?T?|w/C|hӧ~8{R9a9[P;SJip09 ʱ)? Fv3/{"@ ju׍槳l^75!JJR!$(yZb8~ ȻnL{35sf&fIabaɒ98p ׊#׬RO!'gO!׮fD\{FXfŤJ9ݴ֊@LXeW4KڍSJb1F];sU]1cbUe &CiBb Y5_n^z5#ĥqTS$QfG\N1ŔRt"V1@]͌cPD ؀Psv}=bd@(ň@"r'?S=;nz9W! Ζͺ}9)%a.O{biN> x 2b1Ga o|hSi,Z"_ou'1'X`4Ĉڛdffv9'V0ExJc]P5I^fdXUוND0#So1+9TfUky,GyBʕ* ޯs\>^HsfUCxa!ٶoe4?Cm&4uYmEr%sDD%uȈ}$i{^]hAPWUVaL&fQEs/׵|uwU!x1+VɲY!v @2̖GYpE܃rꪣKt gcgGNHݾ5v9fH$W4#nWժcjB0 )1 2vƮ*t EbTx2{\Έ$CKfjUQԺ^exuuucz E/Ms4u Gi HJ(9a)ԭ!>n}'B_|%g?..עfl 88qf! gI?$rmqp$Z'$c.<019$TB!25wΈ'瘓:Ic̱t[XkOK8'nAN9AtȈqZ]-m:4>xh\7l&dV4!vs+攇p|pyr")uhjC2$n;{7Ĥ#Ŗ :n۹UZ_ocZcRDctBl6! qɪB3s 7$/^UubXo2ﺛ<~.E@ٺUYi춃-fh^AM$ܵm hf;&!aj,|lZ. $S)ˆM@)I64 "$ʅCbb”xH䐴ڥ .;TP`D$wfhЏi>ybYRۅ_aĂ RIـx],Ѭ0io^zywCo}Z CO|5ӏti.!<UӺb1;@Wy -P!eѧ!Ht#K=~Tfl7asjGbNs s,9=md/|]|֟Ъ~s6b3 f3Cbv\A"OU׭sƙX۸Ͷ=a}o[#RnSS Tsm!qN . 0fP iUf*frƤUSUUMD@ ;Ihf>Ս:g3f>0!IU qf&qzH&DfwR$XAPJ}-& H"rX.(xyQU"'(YȅʃXc;QZ$IETl̀D#GT*mtM(7 b1;9^_ 5web "1 ʎgS$rug\jKYSNDLb &x UƔ䉆k,s)uǁVS;>8Dž6Hkܽȟ $rzAʱDTE$)բm\KNGO~Sw]Z98^zMw}=}{\fi;lWib{agGMͳWedmۊ(vQHD}#_>B=ºv12sCؓю.YĜB 90TQU"J9!QF0 0w LtlyWِrJTrUSV5˩C虶HsJA 18&D"&&6C%նYD9lE]b5kʆCJ)nKއv{}uGV\IQT }lĀh9SbCTVGmDՂk}b",>F$, fL̎B`M-ȣG'MӸyCk۶mcJQT!n׈΋(331VB< x8=:>>:Jx}oY"SWt>T9oLEs}%>c@Д0l%͏|zh?~Cu۶{ Cw}?1G)sΓgr J>HFE!85˪bbkS%0ɤZ˛;ʇIš9w!@;u1{7qѵ5SH^#*.t;@ S -ahfӟ-̠ݾ#Y ׫+);clܳ6m!xohJjs!@ǕCŏ&T$2<_K$}kz+O@L+ֿ$nzKf$rji,~0'WMդjm>g!dA^dМR4#w. VƜ z۸.8r![ULUl!%Tb9FH&:!iC6y.'h5cBԡݶT<8` GhARRQ( E$( _mn6j,qά:Jk@L#JCwSErN]hT5IT DnFJ/.Ka[!&˃fC0A 1+& f!:W4c:D '& YW4V$cf*-qۧMısGqj}eT5 ܭ022U98f*$5SBTbF)@V#ge!g9O6t>ZBz-%GEt!"ȐRBxחW/__x͛v~H)T*Z2[p{R]ٟ=Ҝ * tV}4ѣE}2if"=R8ggY-9u}sdE3۶+@9IZoa[mϻnZ5^Q9"o) 82* "BtqIiۮ} *`jdaKIӐK" )E IvJ`fJEHL%JϨ :ڣ1 !{$F30e3hQJ&}!3Bp`TzC->UX2TCCFrYAbJ+d)1%/%0u]4G# bPU'bS)¼˹Q$s4c&Zp|].qQ I\tr:pFH?)~fnw}]{:/Zf)>"V!2 jڎjY϶u|}v8[ y]7I횔r|}b~rtzqyrb|:֛sf<Kb[B(`ι,#ٹ`{oDJ&1A5$@G"\yà _J13%Ǧpꘝ* V 6E!)0#o Y*$L%w21O$ɠB#0^ 21Se,Tb8 Y!f@ĊN-%0 9kH;U3ȁYAq+9'oj33D"4"Qd|#0iB4fH$*::Rf:ڏ4r ȹ<Sۭʂ<09D"&D`._|իj=VoRa2i%0!7,I<]H*33;vtOONgUm@99TkD^m;$SČ˟>hORrնmS!1M,m1"YLH%!c4 F(cICE1 RBD&@C#4du(*$RPG +FDd&ь|v>`P0¢J/@1=Ue% hPHHFR D"e&o fJ9ADSv#,)(c I<7Dѽنfl1f pUe)Aȶm׸06ϿZ>ौiPUhA^u.MԌFч ̬t\6YlF DعQT\,IVR cZy<j^_f5[Lb"G1Qќs? 0*RK1 Qǩ^Qto X U4Uy⣳Ofdɓ'O2h+r""hsJnon.6۫M{]mWo.`Coh9kJ9<\]]}B("9 `c29)"`FarLyd eU nˏO0I9F'WMm<CR""1s~epE;WMP3R 6mHn9?;StSߓH` *3U2qYz_4yX@GZ:R Ti`SSHm76PTAPdJQs%jlћGC WjDe5P3EA3q:5IM_ <32e)7 B5QRC̆Dff={3LlJlRLLSʪ: NH1%p,"mo3xQB"Bv+2OFddfb) vj% Y$@FHV"YvsđHT1EvroԳ"NeG)G?"3]D\RKrVPH9E_DbTBPrr{vm;Ebv uTU~^B׮ʱi|3Cl~8 4-kY>78^mW&m.˗u/8(qS;R'K=DL80'3:x}rZ=}|_ 8рm!+Eֈhve#`Hl=UUD3Fv"0@+^T#(*D04'\!fr|N% 1|`C5``Kk"ET&9YN ULT A,`NcS21Ij͙.Ȱ8Tu@4z4GsJQ,l 2W2zoU(53snjb:>,[9D]Lh{[f`dʤh*G_-fy-2ι R;=~r+XfU@W̶m[Q>ͪ&CU8T 7sfY@E @:IWf&`:(F\VGF61\^^ۣSڮǾ_GUW&_vC˾؊ON1p\_ ;(hPȟ||ӟZzyL`]][;NXE29MS׆H)nNeߵюhːCקBSઆ9:DsH؊a{2.oW ?yioU>?_}z*,nKG 7o޼Ym67osJ9I΅br sP+67Odqz:ɩ.'ʓKwDx;ۋ YM U낈bzCME2IL,V.-H@@ !R f[_DTw?#54͵qз#)!:d.ȁ#4<(i-#bٜ=zXW썜#@C`3&tΑ1)$9wpBΣ ;ꌆ*  tN(]7>q0Dr1PâFBn!TGO'g)C߶ơ8LeYW>^fMnӣ??877_|}s! 4M 09 Zggќnmylc;8: GW:@^3@dv}I#?ɸ-$h95UE8%,7D`.1ҳbc&4R!9&f+ y0ev ^#5 k67 )8fe]X!sW*#bԱQDDB!߻Wcw|sj@S®m+@D\oOz Ȧ]GUώǧ'>O7ϗ|tm7OW5UM}zUS5]=k%}vJ T-nVz\]\.fWO{o\/_{/߼VZvKm*Bp0j"E reU[_y?w&*n&4!U> ))M);Bf0`AЦ2Z| 0*8r"+Sg4U'zb1IUAr!hАG #i@Ș^{938bb5@~n,98}3B N`%yD6+r q6%m*:%rգl27z鄔rfi+ lbfHDΕC7mJ*M &,&йL08H&3  \:Ds%h˜a|u)^f;v"Ζw:ugGOfbYL=9~՛Չ,h JGR;WÊc%gg>}?츲Vo7G_)k./8N$ p&5E 䜂j9v ݙUb(=;@Ap=C`F5R͒5LWJ+Mtɒig@ ƅF0 93UYDgTdABGc0d%3f2iL9u}fg@8ǔğɘK* @1Z@9>YEH0jơ=tnr[ob*pȮȻ ŕ3rᲿW?g&+E*ԳY,z諿kfN]q3WmYJ}߮dM]mf˹5Gٓ'O|B"zun/~g.V|zϾ79uQqYp ;yM:BL%٠9L-g!S(ƘɹRz7E }yfv\puhHI@ՀLM@=ˀpPYV#-z&0(nB`fBs43hj.}i3VA+e6(ڙF#m@K9(2 $N+\7]ח'OhN?͵}w!nm+ B6r "d? |ݪ+(.e c~R07s5UuU`f!]2MAX*YTmga Lo>f&*ƈd@ c9:E$G7*jv:4B !7i|gjj3Q5&Sʹ>zkt3^_v L]E\R$$λaAUrxn*Bi8NJTLz#7q'/.; M0ɨ,I k :UA ȢDb8:;a2StΔ.WKmfX>>9zH+uOBOaل,ěˋ,BH6ġU'O<}ٟ̾Ǐ,~g\~v}cRA  0Cf*9#QJi쥦ZݹGuATR#6F&X{!B4k6Z%!͑I$1ۙ~QmрV\J(3# Ia*B j`ɶ'MFcO>gmX YSr rF$`"fr㐉sQ1>Dy$^Ybfğ~?~ɣ_W_}'}UL^2Z*?x,NQDDdl"~E8J*QYwCD&,"YAi O|ÇR$mX)$&2$!!9&"ieIC-MA I9,~ 7|ެљk@5Z4Ԏf*Qay.:_O]~}>y-m.W/^WcrRG^,HN$fywv WSF襆DP-V060"e#5A('ddDɁ_}nןGi3o^x3xȎ(8kL䑸-''fܶ (Bm*: hhHj&TT y_CP_5ݚ0]ɬS $'#g*/`, }MТCsPcI K0_ns*E C DF 9CH; ˞fl IU"b]8&FTTWd$1-vѢ:W] .~՟ӟŴ%bN'HV 8Q;[)(Q%Iw@6 R9vAUĕnȢJ̌FJ6w8piffD{r[*#n죏?Hf(y u"ԾϾzQ{~g^\Sip09f9B@1_!33ZEd,1AU/&``%Sgn}j26A@UCr΃TMӯ՛`չA2j0At}ptvQf6Y4籲 ̓,ח˫N|?!6l>x^oɿɳ/7kfz+31F4k@iWa'zBX.fyN7u IDLDKs D#}(C):}EB<lL tl=xO DĺEc׃"cq v;oy`'Ì2ӕolXE}^u]6jW5vus*Dn @ 1~*E#@}}}ϟ5[,WW^7߈j;7/٣Pq~ϿU߮e}84d/ 4vlU]o}K l6asU})Y Fty''!IqRpf[Ͱ饏p JyU*$].w7"9:)^<{6ͺ3S*arj3w]UU_ fl6+^|,gܫ%t)6q蜷fVܷ]?͗% \-kE۾?jjϜ6âjڮ.J2E"-9d1AuXu^w낫\W`]_?.r~uzs)mƔSUG3eˇ"I`EVpj`G( .j6#,5(=g4l^]ߋH v< !sU!f?8VF'E2a!w>Ub2jH?vmU13Bi3(dvِ UMJЂ64gq쪔:?; Kq2 %ͺmssS,ahX:ǫZTB?i3hVT!'!ufnWW M8ص$899fƛ뛛?or^ã?9]*eW2vo.1u5?YW '0Ce!8ZhLUU;%89dV.^lLLeD\Z)>Eb |Ĵ{0^JAaJDy~8J`*>S n 8N|u@>0(.1x$ݔa_b0&cW\F@Ā$/!RNM O/uuH7b**x@ɰ4jf4`jQ4~G#h׉!2Ό!!aV[΃sCf}}}cMyrȱtMcDŽ7LaV͎< sNrVSQ}t}뜛_zuil^%B$904lqM*ܑ*6r̃s{a",^{hL3?fb>?}Uݶm{$`Uuj\=CWlq7 y9]=nO3_ڮn¦ bk*it[RJ fv!ED&dhw۹_ą-'1. ~,R!4ff77+Uf*NQEuH<мor*XDQdLuAHAT6'%ŜmIUYu7k@89>y1EUEKC5sΣgqi%mI)i۵m1hINS1 I\ĘUآR:],MVasm7! }rvD.l>Q#[,rufL,bE$*@湡)^aW9phT 3ufcw Ӫ>>=7?vqCEj f>BfvJ.m!GR:K^=9拿ٗ_~g=&]v8<aɈv%&׿[٧Ot^sL#0NZ7B9P>cs2QkN0 Ͷnz+qC9%bQ-'>"YHň-P^h]Z8bU5$n"@{$4󟟞 2`d=^ -kNbHjdvuE(ARv8ⰽr֋9,>ҶbJGfɲ22c%p58_6[*VxqP") B"_xDNS (7GXpJכpIqj>nݬq?O>~rˋu78 eQT)5SDtc7tw:UJ܉p}ׁFsiRmf֨;Z8>9=~%o7[͒bm`U ]; /SoS#@1W#Yxˈ7'j#MMXA]?<ʁofl`]7)uG}I"CF{LQ DsrY[ KG^!Ê+Qvc}Ϋ6}k ry $1#U\>flc>%CT|/l#0;T^>s 7k%TUBnoNyno},TM϶b/rͪˣO?'y:q~?~dDC0%ڔhՋ#f6}*L2sιO҃yD/d`o, s,eW4ru L@Me̦=.__jp|25[&$pDn 1N*ʛ!1NDB33!0v`PhlGsEGS h3Ǚ$2&@!D0$1L|hݥm=FWiWm׸ޥ)HI\$>8GP<8V1sO :љ C lU3*1d&`L~ ))E5#8cT֫elJЖ α*AZʥ+^ebYk,/Bqn hsTCno91F @PGs)Z/yrsj7}vzz)uך91m۫__̞>=9>=Uh-*?}<]_guU-O飳Gٜa(!d[ +r4mlQ BsJ)&5V yUMf{W77_ b#|@9C2Y9%2#U1iz଼sې,L%+#_eL0MV6` зed"Qߧmko'Oct~n00ٜ3)8hHrT-+L4C.qf xLX,4 CC/%L35Ghf1ǒ cL)po{#u"&͒,M;{|)#BuW5@ w\rG ?BhvrwgB?,ipGyXم !d![kː V)y8FL6Bb$"mV?<3뉣[#pHXe]oߏv>}َ8,ǃlSȗN8Ґk?!5y9t!G⎑bmTvH@bCߍpRxb2@.Jf&f"9vi17/X |1鳽 -3l" xܟ_] @ $/p o%y ˕.m}c..,D"Ex`@ 2r4 MHsftE1N)ت6' wtE@Z~|JG; G܂׾jcw[wwPzj!W F^ }5rэ1!Rr[9z8o_x7&M;Nw歷sW_~Nt<~_~veE|bHcth5/&? #RE+oѺ"ffD c Q219"HxvCXiʙ]V0Dws0EW u&")uA}<~/TI̔.pG ܈ҸCIC6YB6А9U,\ 1!o{ ؍1:/~u^/ofN)NeYiBDIOb2*fIVkwW{Ø ČUkvRsz# =  5Y=iq(9c\ː;nI)QJ5ݼyb7X]k=@0̏hy~<ܝeycΛo?gvx8fsqYxmRo6Cbϩwڪg:)W=/0 a9! <0mDE&I- C.ď9.1Gr5`t (@J!HBlt|Q ОxiU3!0mvNm^=ZPpL ۅ;9dة—c7it[Wvx{E6g_Ykk&"Ef'rup3mZͬŏpJ j뺦eaϾU?甴oHn"-BED&\gjry=PV45( VS!01I}W_ov"NE6g-7ZLqŗ_K)ݞyܿۼ>|~gMT0xsU `9,GXgeYZS(,ΰ^?.?V;cMQƶ"s.d1A8 ᅴ 8q8iK5v税ANɑ<B2:@g6\6nQ9SW_yx<|!_W"|>% u6;}_؛znfQ)fT׻o"\R~eJ?-wx<=2g7MaY~ᄑ_&n`+9!yΈSյZs,)LjS5Ms$S<ɫ7<pzoݲGpsp$a$0oBp¥00d2jg'â$'wQVWG)ߟkэ|dfapp'%Ӹ\m%sUsg@ w' ]!ϋlNpHta` )싯^mpi ´Woߌ/w8R0 C.wE" tbY'ޓ1I%IS. Zf5"R7oP2.B V$<+i3GpMdB,ٶBW惮Kx.׹la Az(Yp3lSx7Ȁ)VUҵ}-!80@-E{) 0aBIԇv@zۛOaW^|/Rn?|S]ېLO=qK_0I7˅x>?ߕp۲˴<'W>=y{|;_}~{=mvn7G(Lֺ%knLJN6lk'oBay,Z4s$<"7/:6A亮D[TpH?L{̀1(ݟժ'@ WJynٺZD$ t}[9 K(^CnNDS)DX=!, ƔCX"  V55mQbD˺p[="ޟÜK*Y?UʰIqZL4CD8MƀQZyYBli٘ZD8N%]/Vk?w>M|nzU<aYꐧT~o>ǪGv>-ZL2MqM)7o_mEYfˠpF@hnۇO?i>Dax:^-n\4. (nC5εDRwp/W~kI4M;g $H~|ǨĄhS`$]Re8xrisDNB h0ޏ.BкGMϏ '#0EB"9aSNEJJr*۫+Ghv87k)麮Νؒ";(D#<4<qi3F㩞E尜߽8n1nv*okDX|WwP!ˈ/lHjV|xyuOibW^}ǚ|E@`n F, (?~c_fqX4 Þ4HKNHy ŏ[Ȍ,}$T3;aqQD;!l `  ;,\wl ]a@ =j@DH]u9a"7P`, )=Y pڵ Ҡ 0eTryUREtvDjWOzyb'Z9MM[3u^SP>2aL)@,  sɘ %D`03 [ ;V곗Gץv|p>L-Ů?Sn {4:ۛi#j"juVAMPƟ7A26kk=[VG7)\-{mh:8n3a[uYں3@J.WPJ+~wWm'/89]TDϞTpB90/c s7Zoo(TUQ }$RTf%@oHkjmRFД"E 'l(R!gXP*h-8A5rDLF q^SSmZ4YV2_UJL9o:Q/DsT:8<׵J&DO7tǺ{M9q_L:x9lue~<ov/_/jSݻ8Ά}7NwӇo?>|Kk0}@?UUW_>'|iTh豠`3 tE>!4@4 ~hMY>ptD@LČ@apЃw[C;R!U.Ǻ,Wۑ0Ȫy>ږZ+Ddֈw2G,1DDb*D4L#=و\9 < Х$_|@)Zӹ hLsE2w`˓' rVۏYg2ѝܣĐO^}˛ׯہӈͯo_aٗPG}Խ@0Th3 5\1B$pk^ ‰SD=] fyOa)SִJ)zD?y4Lw La쀧2eد-WौuI>7sGb̒{T (Iz[!آyԉH"TUܗoGU^N,Z@aum\D/MA 2w R TT @ʹw_qYv+LINw>y'ZTYyCST)z[DCZsP9 VD "U$ D@4rɜT(TZ>nKWLҧϐb[!+o 0Ʃyu-vy[4lO3}L}/?;}X#4vi{vuokdq;ՎsB@u3ε:tviKs["!լ* 3RZ8BM.0c#PԂirI֑. @&o>g"Nla.KUĆXFgOc?C݉af$4Klj0dC G CT+X;yr8| iLڼžBZS#<}x@{zÇ # YE2 u 2Nr>Xڞ=ߗtN"pZa9pD=!ȝL-BSU&la\ qǁHvOsDkzFioIøqqwݡǫ/ _﾿xEjHm]oϷ 2_oo?_y?L?ݘf(Ss_`֢ƠhȁORI@]n0g"xBa5`|"b 6IMR"b[׳7Ll.F1JD<2]a"V piQ94c|(2^O 3hFr_PeA : dC [`tRƌ|>USyne~;3HB0%7RÃmހ""#$ϊhU@/`7U]&lYd[=9=̷^?1K=ŏf32ini(B̧zTJ@O`u3MLV"NITۼ,jJ2HK &hr݁XJι9ik}]L麨!Bf vs[-x?4B .bVGXU8aOQ Ei>Wq||]k[D+Q. c&!VqYZ] D֟}#u\Ȝ|aEDh"32g>LݽOP 3"&InFv9n ;!p(.%\&4CA"(҆$Q Ն^M- $,@ Z͖g?{$>.'mR:O??ld!cOVպ !P׆gDP@b) D2BsP@  ت1;RGavF"!1=azYsNĀ%#N>ޟzN p͟?2qOpNx>ě /umm0m7̿oLW?wN꼐$ 53:#8BYᾝK]-U̻1ݓz_7]J063`fH"B~=Cs]`,)1Fo #@P{CǔR)YxaDlg J" 0M$-t7uP0P8 |^e_ꋿko!IAQ2)UP#T \f4#bJkk&n.'NYSOIb^V$"q$]>~<lf'ɏW)ȴۏ/5lE /r>K0 f ÇgZp*9F*dsZ W÷oۧceJ$S؊΍2 Hħs?f~q5`Nڢ 6#K)@,D\ q «[@$ƈV;ӯ<ZU,nqhv1_d-<{B2"K`d-#P `IB-\aV+ɀt#W&jxY)Rr\5L͌({bwRo^_ߜnK`r[frMnarwY@7aƜ$rN1f24'ʖ/ԞB@`uMAPWUMY /ƎYSc%.eU,i֙aw/w~[Oyw対ߞs4 w_}/?柾߭tyuown˯O>w$9/}īӦ$,2L?ڏ>뺬&vS2.'}o+>nF/^m{A7f"*t`c־,>>-sC> ,<'!aJ)҇"Gm] ,WvrjMlVkMeؼqTaP@R[Mk>T$0m;$:>~xxX3iawp@CrICG.Vv@U6"e)9Ky>"j[#)OHDAĥ1ѩy\&ƪQɉs2lGDr֢1"%Q*a50ϼ@~\TUy6i3|q_݌+L+v )!'3=s5_W^3۟N} w, y! !saItY ؁1&$|:TvfÏ:=rx>=1]O3k13ŘScrf'GH sI)sw 7/mԟk~tR4i歵~_?1l}OXI ٳs鹚L対$鼜N< !@8YM2PAhN9˜0Ͽڏh-$zCTJ.z~|x4$'yxx^]]] dϏ>=~ތ:Q "lVl弨HJO˲p)&Ͷ rfN%r+ӐSfôT,OǜSJ3Z]kkqnCyj]vy?c@)< l~bdׅw5'gNCy{} [o PyVA"- 뜴mʴwi72/5w׏>mve fT;D_~~̥  6q 7i9s*cD/*?v>>;z ?U/B\y>g';0 pi%?d[yRJ~r7NXNskk@pS$kMU I_17;o~׿,8^_]%y۴s\9vB= ҆7/J8~XNcnnҋ}zkpǙlh}Wym 4mw/Nß|Lhsf'7B:Rjk4ŅEf>tU״q, sJiDټ/鯅u]yq3xz!)2D=8vUGɚ0swϡ/툸ڣ7#NpBzJE)sŅjj3n~%"C)6,(u<`i%B(T͆Ӽ9#y@_}~igWږ#5кߌ^lae+!"!Z1c׵z>Z?g_\lU԰Ǹ@U""IkTAy}|m@+`U0?>)z֕H[k<Ř5odbmyx|i,C"Xu]WYhðM9q^vC à`9Sp٥fLN<|[l/ ~vۦ8Qx3Iu=qPl|z?CUCo׻i{8< j(")'+y JS"4Vѝ|Wl <$2N8}z$ZĵVu E8\rqIjn`MIMm745$3z0_J=NjDЭ)D@,RzRrεiDDYD00bOIrڧiy<)$u>]1 OۛϿ6pXWd*p>>ڦa!21͜AfVrǬ4ϫM0r{ \[lZ[kffHP{6Le-ό5E􄕵'G D&QT#cZ9M岞uqG\v$d\jS<0Vwc4 TovT?Wbd&/cGZda@8K%\9'0mdLdŮ9R>oF#"GGςKLgƘwz͙8ˀ Mee✥.1x$7F(ia3]yK*y= j 6["IUHWf`yHk9Zj[%hYӾFo'h,jR C@H͝J`}D@ (M I۪^:1.+ !Kv 6Fp8?SNi^ mޏEרf[9%²=)1d0 \OXo;)fz6álwwӸk2r*ǔbH+WbAedF4eȭe6UU2r8XmNY[]i ;j3 \G V; dZڪx#HCHñVhPғ[ eoW?{v:_eژ028g0im(&{8k'.TG=vB"ӝ!R۫X`u 4B”R%м|oӴ Mc.j"en Rp]յSQ6"ՆebH@AaDe4 }{lh ZEI8l7w`piYp_f[匚 MQ ( 2LFv,Z=}<ÖSJ E"u][f9kˡն)zci5]S)n.Q$mn23Ĵ)U! 2Ւ嫗anB&w6#0A+д-ܪKbP Í"x;g0_̛tH ! b#\XXE͎v3 *WŖp^+"l9$(x1%>>n}P,Ag5%KE]7l9E8%L Kq3^zxu|u7$劣!@iva9 1 #tImH sued [iO!Tkզkb܂+4(heaM ,LL-m^NstոtR8av5 F@r3m` n.!9$%D^eLa+DH2RLUy>i-TesVF0j U8TZYƒ)fav"zx5 B,^-K.fSc&rEk͐'Iռ6flѢ;۬ԡ]Ă"CƸKbKh N,:{hK]NAX.fF3z<HB2$nz%%˂<*`Te۔٩7@nXtE<8laV&Le!sI?M2l) 0w;ĨDWjC)IBNpU ʥtZgǁ63C@mrÃYiqviCHD$j[mYtsZUBm,*PuU2twIZ]PRJߔK\ S4wLIJjMv%%Ia1Ʈ͵<<ֲٌZ9''bo6 j0Hʒ~իI.,aZ*Yq3L2`=&][X0'9&4Y[;,3K<Pdh" ZzR!8R#VI+mnNK.CRJ)5Ъ`,p'FFdaA$)4%%jIh-AH0=,ִ3bU9ݕ9TFJbJ8186(P𺜕|#+TԪ`T{PC/rU[˴ݴC:epiv3Z\;ڈkk 65fL,czYfui:zhzT՜'^"MLT[3x{G\ 3D@D" P| GS֦7hZ+Sx67aRQ=DRr!#RZn{ ThJ)eJmS& T1NaL:@DXHrZW b$Z3ýq"ArnOG%^J,$"]ZOHPO $ SaHT4YUm V pI Z3b$ Z L42#!UXsȀ= g Xɣb{'4ff97nϟK/ꊬ! @ @j+!h`TY !8 D0d40k[3S@ ϥQӈX!jDWCUF%k3@x'R)PaDXOV+FIJ X6֊j<Sq2UAgF!hDY@~ZTq,emeiLJ38S}vWo/ \؅2,<ǁtF0 5;:q˒@$bFP nުvLg6~ " 0 @Ba-H 9ܷ.a ` `Ed^D68`<\MH4Ӑ36mn}2m9RqI9"$w VDxۥ6NWIENDB` cREVGeneral revUniqueID 1120227957016ManWorking.png e1M#PNG  IHDR1Mx{0 pHYs  gAMA cHRMmsHw2 #IDATxT/q!͵\J[bt?`irAnQBb T i*e Zw3h{4$I-V$>jb.6 `dj ï_x[Ri.K{n*6]R y*cog̍Y,;m,;fmsM3;e8N>G(=|ne 0#wprs*y| N= }Cn~6#K,9uTav3}e0s.i| mg !]\KSq?ͣE3,E̊jP$u$]]tХ D]"zW .rc\m眱}M{|xyy$KU v#.g0~Ǻ+TraK-TJSΎfڜ:1݊t*yt h,jVοe.QFA٥΃N+a`wGHJ5-PTʶJ$pޛC~6ycx\MtA<GggBU\_( W_n=|=}S+q'I[k ?r'J즋f|C_~9zYXLF3pF$ ^YB7ԣ>U* HXl6K(ℍ ms~6]ucVEgRAeBD aw ۄы"hC u̶ҴM$='9'YSx}*X"yd'2N4 oRkqM6 E:zpRm/ k? UmnxK51aVzLX]HSSćٴ甲sU5(tLG,9v?/wmFteHd{GGlC,8yζnٜSmK ~C!DD"E&eM Ŷ6ӭ9[sn;{=gn;9/[bsf]oVt|]rJZ^ >[ǟ)q> 7GuVO6y$HVNdUQk'ȉ nzK21i [AR-cdGxR/ID  FLJ "+PBvֶzLDȭ $ ( 5R)D唖is);x=g] Nk%ks_/\Yѱӈr01Q0xޚ3B!]<OEJvYReK.KmuLSRFvשnRu:::xIݕգ糔O8¡w`պDb02BgK3 -&Fhn31wUT$T4L MSRbp] '褓pj~:坎,\yKֈL¬tFP?"#qHSEJ" HMŴ O. g~XZUE`n]vaxAlF%3'2Q!11ma_@M]= QJy{"W6EJ^%~Et\p0L:}:zrܸ C %%d{վKcO'pI5qQg-+'1 r t7Mm|A (cZnI}-Czjͅ1meek P__(7gfGuϛkggw_'ANs@UR@Bj9*?RU U-QPDSD(Q MN c;ݝٝ8y3}JutQط˜<󓇷aUO%u<DyAҿPameMk8m6\@?;1NN>/?Pq]3G؞qn1Ut¡{o|XX/ > "m*7H_;$7rqba0Xr RraAR ;Z ,\uYH'IN(d C'\< F#|O>9 F "d\gh(ӳUs7Pc!P}d/b6>07D=LIHn)iN( 9Ӎx'_pmSx|`xwyE$ UH}?u֑\ŗ=z[EQ8(F_N`$gqs}?W.Zϯ}W1Rbs|6S?z T! 劍Z逖L#9 GZ(XNC 4M8$kN >$tOBHB,xU"d`%cv0] gX>z<rRظMK0 Ф i)W,ף&x9()y$3m'h$t&Bfw{7'}mTUV<`.Z2^p#)6!&IÅzij]$zF9}`՚CiD%+W0:9>tRuꤲei|tYhJU.&90"ݔB9Mߚ+pˏ~X&'㮖\dY!, UUgL$?V4m* #G)&t\ke+i]$6Ν;۷ؼy3V3,sfΙ9sg2wrv,&$PUEڠ/*TVAH &-) :qb;6;^rw;ۙ3s~؉+ͷy><7T<"PdC^yS_RLgyutt2mkP(|+o)\jQU'@;ˮoFj$]e8?׮&Dœ\Iьul'Z3+o~ޥ%4[(o^ubDbO.CJK6َ>ʵv Ј5fY"VY-ۅ&-wDcI{~\imbDI8" ]ED33 ı/ W|ҝL]>ȝ,jLO Ėr55~ | YF ʮw&H!VeپȪ6xeS2} >0'QJJ'/ \!mho9"ABXHBh(@>CyuN{1J%0=;$IuEBĘR' kم8Q7R[ g9|KZMWxOz臫 ,'5 ټK,I @  -ec'i/NZ"1*m}?xCk+;vпTikUk*(j4hk6uuh^Md^_v˚:)a5駟vر#/yZV<V&/~~;w+oYEXam`.ʴG2 E4 %зș3gx'즫={wI3zdRr#dF2[ R$9~s86Fc'n5w=֣(:( z'NwQs]Hh׌^F><Ϲ2{2˙m$xB u Lqw>Fv~_m^$I;*$'fY9ҞL"qLy_Z<3O౵kzJإ%,K`Z'j DFNE=Ӹ^ :rI@PYv-y^$yhooghJI"ΝrJUVgwHe.'>ѯ 3~'ۼy\V%I.c:%Flɼ~ %&HqXfZytZEC:r.baDHo nܳswmk})N?JRFCRicUyB ̌`/AD^@#DpYF2`(" *" B$~%p="?0±kt穕̌rYsPi҆N4Q,套Tkb-Ů:WDyIbFU|D|"uׂ$!0>>I"/P|JD@ mQw*DQ qLYCE\6):)PUZH.ߏ'TE"o~x.PsGeˆt腽tvv2^"F Jd-"ݝ]^Ia`_X6kg┙!șdVKd Z6"Y<2FbB{W/ 9;=[ރ"rѻ%SXiΰT"˹iV #TgnnaW4Y‹}ne`&NDOuT1XASnH&T#m`%u6 ɅhTxr}EFBiH4MQmֈUtq0 7үl\$m8L_|731=KOJjE΢'RܷwUZ-h48~(Z(xI~Slオ53)@DQt%l6]kPp];F׏BμE:hI3d UUhoːJ(S2j(PY\-k.VYCs>3>΋/-jfԪXӟbY+ENO_ &Q(}x+%T7-EʹEP +׏̸Qo^~"qZ\U4ť"Ӡj70)=N4)J1oUˆ7l5;;{`&G]=?1)Y $?fPy%΍OɘF^@ib^#@R/.uyQ,-Aտ_־}XT.U*R UUٺu+dݻwk׮;3T9I& ۫v&LJVG;,D<#*a@:aL@48֑,FO}e`{XέwTn8u!T ۶) qȆM8CHS*W{'"FGG￉Po,4}> LLg~~ tttkcY鬅e$i8M'4wߎT>{]/[* '(NRhF" ZqWWlEQq2eZyzH TMBF@Bd8$P&2 oue Pd՚q枾C8;; @UKQ<\׽A>~GS@dDQDK@(""!%zԢЊs LNNǐu4^|oIgϞ}رctuuQ((J ]שjLMM;mNkQTDDZmn1hUzjI$ U"zAD z]ulYٶFkdpp纮o8r?nUl6eYj5* FBmۈVhIENDB` cREVGeneral revUniqueID 1120229678112springK,  cREVGeneral revUniqueID 1120229732923 PlatFormd+xlocal MyName,x0,y0,s,N,L0,k,L,v on mouseDown put the name of me into myName put the width of this stack/2 into x0 put the height of this stack/2 into y0 put 10 into N put 40 into s put L/N into dy if the top of img "manWorking.png" <145 then set the top of img "manWorking.png" to 145 end if --startTurtle "spring" put arcsine(dy/s) into tAngle end mouseDown on mouseUP put "" into myName end mouseUP on mouseLeave put ""into myName end mouseLeave on mouseMove u,v if myName is "" then exit mouseMOve doMove u,v end mouseMove on doMove u,v put the loc of grc "base" into tBaseLoc if v< 225 then set the loc of me to item 1 of tBaseLoc,225 show field "message" exit to top else hide field "message" if v>445 then set the loc of me to item 1 of tBaseLoc, 445 exit to top end if set the loc of me to item 1 of tBaseLoc,v put line 1 of of the points of grc "spring" into tSpringBase put item 2 of tSpringBase -v into L drawSpring L,N,s set the bottom of img "manWorking.png" to the top of me end doMove on drawSpring L,N,s startTurtle "spring" pu setHome -30,-140 pd put L/N/2 into dy put arcsine(dy/s) into tAngle seth tAngle fd s/2 put 180 - 2*tAngle into da repeat (N-1) times left da fd s right da fd s end repeat left 180 - 2*tAngle fd s right da fd s/2 stopturtle "spring" end drawSpring ff33m\ Raise me cREVGeneral revUniqueID 1120229733011 breakPoints   Graphic 1K*^  cREVGeneral revUniqueID 1120229854629baseKF|>} cREVGeneral revUniqueID 1120230546963 message#`P~E cREVGeneral revUniqueID 1120234551560  Message to the programmer: @ @ #Choose the right tool for the job. @" (Runtime Revolution) @ Field+hC: cREVGeneral revUniqueID 1120236232627  5How many programmers does it take to change a light? Graphic 1K@ff33pO cREVGeneral revUniqueID 1120257500973OriginEpon mouseUP -- put the loc of me into tLoc put the width of this stack/2 into x0 put the height of this stack/2 into y0 set the loc of me to x0,y0 put the thumbposition of scrollbar "length" into L put the thumbposition of scrollbar "Number" into n put the thumbposition of scrollbar "width" into s drawSpring L,N,s end mouseUP on drawSpring L,N,s startTurtle "spring" put L/N/2 into dy put arcsine(dy/s) into tAngle seth tAngle fd s/2 put 180 - 2*tAngle into da repeat (N-1) times left da fd s right da fd s end repeat left 180 - 2*tAngle fd s right da fd s/2 stopturtle "spring" end drawSpring +R cREVGeneral revUniqueID 1120258650085 breakPoints springK; 71$ ui]PD= cREVGeneral revUniqueID 1120258960767 Length &m; cREVGeneral revUniqueID 1120260915272 Length Length d cREVGeneral revUniqueID 1120260960754 Number of coils Length d cREVGeneral revUniqueID 1120260987960 Width Length d cREVGeneral revUniqueID 1120261002581 AngleWidthq.on scrollBarDrag put the thumbpos of scrollbar "length" into L put the thumbpos of scrollbar "number" into N put the thumbpos of scrollbar "width" into S put the thumbpos of scrollbar "angle" into A put the thumbpos of scrollbar "curve"/2.8 into K drawSpring L,N,S,A,K end scrollBarDrag f%??1050 cREVGeneral revUniqueID 1120259374789Lengthq.on scrollBarDrag put the thumbpos of scrollbar "length" into L put the thumbpos of scrollbar "number" into N put the thumbpos of scrollbar "width" into S put the thumbpos of scrollbar "angle" into A put the thumbpos of scrollbar "curve"/2.8 into K drawSpring L,N,S,A,K end scrollBarDrag fn&10300 cREVGeneral revUniqueID 1120259350941Numberq.on scrollBarDrag put the thumbpos of scrollbar "length" into L put the thumbpos of scrollbar "number" into N put the thumbpos of scrollbar "width" into S put the thumbpos of scrollbar "angle" into A put the thumbpos of scrollbar "curve"/2.8 into K drawSpring L,N,S,A,K end scrollBarDrag f/.+47A47150 cREVGeneral revUniqueID 1120259376988angleq.on scrollBarDrag put the thumbpos of scrollbar "length" into L put the thumbpos of scrollbar "number" into N put the thumbpos of scrollbar "width" into S put the thumbpos of scrollbar "angle" into A put the thumbpos of scrollbar "curve"/2.8 into K drawSpring L,N,S,A,K end scrollBarDrag f*q0360 cREVGeneral revUniqueID 1120260613200 Coil scriptEp7on mouseUp edit the script of this card end mouseUp %CR cREVGeneral revUniqueID 1120261697661 Length b cREVGeneral revUniqueID 1120263772715 Sping stiffness Length+K& cREVGeneral revUniqueID 1120263772746 Friction (Damping) Frictionqion scrollBarDrag temp set the friction of this card to temp/500 put the springConstant of this card into k put sqrt(k) into tFreq put the friction of this card into tFrict put 2*tFreq into tCritFrict put "freq = "& tFreq & cr & "frict = " & tFrict & cr &"critFrict = " & tCritFrict into msg box --put "freq = "& tFreq & cr & "frict = " & tFrict & cr &"critFrict = " & tCritFrict switch case tFrict = (tCritFrict) put "Critically damped" & cr& "Critical damping value is " & round(500*tCritFrict) into field "critical" break case tFricttCritFrict put "Over damped" & cr& "Critical damping value is " & round(500*tCritFrict) into field "critical" break end switch end scrollBarDrag p&G 0200 cREVGeneral scriptChecksum DY"_fsgS handlerList scrollBarDrag breakPointsscriptSelectionchar 725 to 724 bookmarks revUniqueID 1120263772792 prevHandler scrollBarDrag tempScriptscript C

on scrollBarDrag temp

set the friction of this card to temp/500

put the springConstant of this card into k

put sqrt(k) into tFreq

put the friction of this card into tFrict

put 2*tFreq into tCritFrict

put "freq = "& tFreq & cr & "frict = " & tFrict & cr &"critFrict = " & tCritFrict into msg box

--put "freq = "& tFreq & cr & "frict = " & tFrict & cr &"critFrict = " & tCritFrict

switch

case tFrict = (tCritFrict)

put "Critically damped" & cr& "Critical damping value is " & round(500*tCritFrict) into field "critical"

break

case tFrict<tCritFrict

put "Under damped" & cr& "Critical damping value is " & round(500*tCritFrict) into field "critical"

break

case tFrict >tCritFrict

put "Over damped" & cr& "Critical damping value is " & round(500*tCritFrict) into field "critical"

break

end switch

end scrollBarDrag

SpringConstantqon scrollBarDrag temp set the springConstant of this card to temp/500 put the springConstant of this card into k put sqrt(k) into tFreq put the friction of this card into tFrict put 2*tFreq into tCritFrict put "freq = "& tFreq & cr & "frict = " & tFrict & cr &"critFrict = " & tCritFrict into msg box --put "freq = "& tFreq & cr & "frict = " & tFrict & cr &"critFrict = " & tCritFrict -- put tFrict) into tFrict -- put round(tCritFrict) into tcritFrict switch case tFrict = (tCritFrict) put "Critically damped" & cr& "Critical damping value is " & round(500*tCritFrict) into field "critical" break case tFricttCritFrict put "Over damped" & cr& "Critical damping value is " & round(500*tCritFrict) into field "critical" break end switch end scrollBarDrag r#/Tsp110 cREVGeneral scriptChecksum(H¯VF handlerList scrollBarDrag breakPointsscriptSelectionchar 658 to 657 bookmarks revUniqueID 1120263772834 prevHandler scrollBarDrag tempScriptscript

on scrollBarDrag temp

set the springConstant of this card to temp/500

put the springConstant of this card into k

put sqrt(k) into tFreq

put the friction of this card into tFrict

put 2*tFreq into tCritFrict

put "freq = "& tFreq & cr & "frict = " & tFrict & cr &"critFrict = " & tCritFrict into msg box

--put "freq = "& tFreq & cr & "frict = " & tFrict & cr &"critFrict = " & tCritFrict

-- put tFrict) into tFrict

-- put round(tCritFrict) into tcritFrict

switch

case tFrict = (tCritFrict)

put "Critically damped" & cr& "Critical damping value is " & round(500*tCritFrict) into field "critical"

break

case tFrict<tCritFrict

put "Under damped" & cr& "Critical damping value is " & round(500*tCritFrict) into field "critical"

break

case tFrict >tCritFrict

put "Over damped" & cr& "Critical damping value is " & round(500*tCritFrict) into field "critical"

break

end switch

end scrollBarDrag

jWeightB+plocal MyName,x0,y0,s,tNum,L0,k,L,v,tFriction,tPreviousV,tFreq on mouseDown repeat the number of lines in the pendingmessages cancel item 1 of last line of the pendingMessages end repeat put the name of me into myName put the width of this stack/2 into x0 put the height of this stack/2 into y0 put 100 into L put 10 into tNum put 40 into s put L/tNum into dy put arcsine(dy/s) into tAngle end mouseDown on mouseUP put "" into myName put the loc of me into tLoc put item 1 of tLoc into x0 put item 2 of tLoc-y0 into L put 140 into L0 put the springConstant of this card into k put sqrt(k) into tFreq put the friction of this card into tFriction put 0 into v put 0 into tPreviousV oscillate 0 end mouseUP on oscillate tCount if tCount > 15 or the shiftkey is down then exit to top add v to L add -k*(L-L0)-tFriction*v to v set the loc of me to x0,y0+L drawSpring round(-L),tNum,s if v*tPreviousV < 0 then add 1 to tCount end if put v into tPreviousV --end repeat send "oscillate tCount" to me in 1 millisec end oscillate on mouseLeave --mouseUP put "" into myName end mouseLeave on mouseMove u,v if myName is "" then exit mouseMOve set the loc of me to x0,v put y0-v into L --put L into msg box drawSpring L,tNum,s --set the points of grc "spring" to "" end mouseMove on drawSpring L,N,s startTurtle "spring" put L/N/2 into dy put arcsine(dy/s) into tAngle seth tAngle fd s/2 put 180 - 2*tAngle into da repeat (N-1) times left da fd s right da fd s end repeat left 180 - 2*tAngle fd s right da fd s/2 -- seth 90 -- fd s stopturtle "spring" end drawSpring '#, cREVGeneral scriptChecksumPmZXk2G r handlerList;mouseDown mouseUP oscillate mouseLeave mouseMove drawSpring breakPointsscriptSelectionchar 780 to 779 bookmarks revUniqueID 1120178507163 prevHandler oscillate tempScriptscript

local MyName,x0,y0,s,tNum,L0,k,L,v,tFriction,tPreviousV,tFreq

on mouseDown

repeat the number of lines in the pendingmessages

cancel item 1 of last line of the pendingMessages

end repeat

put the name of me into myName

put the width of this stack/2 into x0

put the height of this stack/2 into y0

put 100 into L

put 10 into tNum

put 40 into s

put L/tNum into dy

put arcsine(dy/s) into tAngle

end mouseDown

on mouseUP

put "" into myName

put the loc of me into tLoc

put item 1 of tLoc into x0

put item 2 of tLoc-y0 into L

put 140 into L0

put the springConstant of this card into k

put sqrt(k) into tFreq

put the friction of this card into tFriction

put 0 into v

put 0 into tPreviousV

oscillate 0

end mouseUP

on oscillate tCount

if tCount > 15 or the shiftkey is down then exit to top

add v to L

add -k*(L-L0)-tFriction*v to v

set the loc of me to x0,y0+L

drawSpring round(-L),tNum,s

if v*tPreviousV < 0 then

add 1 to tCount

end if

put v into tPreviousV

--end repeat

send "oscillate tCount" to me in 1 millisec

end oscillate

on mouseLeave

--mouseUP

put "" into myName

end mouseLeave

on mouseMove u,v

if myName is "" then exit mouseMOve

set the loc of me to x0,v

put y0-v into L

--put L into msg box

drawSpring L,tNum,s

--set the points of grc "spring" to ""

end mouseMove

on drawSpring L,N,s

startTurtle "spring"

put L/N/2 into dy

put arcsine(dy/s) into tAngle

seth tAngle

fd s/2

put 180 - 2*tAngle into da

repeat (N-1) times

left da

fd s

right da

fd s

end repeat

left 180 - 2*tAngle

fd s

right da

fd s/2

-- seth 90

-- fd s

stopturtle "spring"

end drawSpring

i ballCT)local L, x,y,vx,vy,rMax,tFlex,tSpeed,tLines on mouseDown grab me end mouseDown on doMove v put v*cosine(45) into vx put v*sine(45) into vy put the loc of me into tLoc put item 1 of tLoc into x put item 2 of tLoc into y put the height of this stack into L put the width of me / 2 into rMax moveBall end doMove on moveBall switch case y + rMax > L multiply vy by -1 break case y - rMax < 0 multiply vy by -1 break case x - rMax < 0 multiply vx by -1 break case x + rMax > L multiply vx by -1 break end switch add vx to x add vy to y set the loc of me to x,y --put x,y into tPoint --setDiameter tPoint if the ShiftKey is down then exit to top else send "moveBall" to me in 10 millisec end moveBall  blue]%%25Box/0,0,0,479 0,0,479,0 0,479,479,479 479,0,479,479vx32525vy1h cREVGeneral revUniqueID 1120318682725 breakPoints240StartEpon mouseUp put the millisec into tStart repeat with i = 1 to 30 drawSpring i*10,20,20,1 wait i millisec --unlock screen end repeat --wait 5 ticks repeat with k = 1 to 5 repeat with j = 1 to 2 repeat with i = -10 to 10 if the shiftkey is down then exit to top drawSpring 300,20,20,(2*j-3)*i*.1 unlock screen wait .05*k ticks end repeat end repeat end repeat put the millisec - tStart end mouseUp on drawSpring L,N,s,alpha --lock screen startTurtle "spring" pu setHome -30,-200 pd put L/N/2 into dy put arcsine(dy/s) into tAngle seth tAngle fd s/2 put 180 - 2*tAngle into da repeat (N-1) times left da+alpha fd s right da fd s end repeat left 180 - 2*tAngle fd s right da fd s/2 put xyCor() into tLoc put turtlePtToMousePt(tLoc) into tLoc -- seth 90 -- fd s stopturtle "spring" set the loc of image "jackAlone.png" to tLoc --unlock screen choose the browse tool end drawSpring )R cREVGeneral revUniqueID 1120395761342 springK  cREVGeneral revUniqueID 1120395789078BoxWOjack.png PMon mouseUp --put the millisec into tStart put 1 into tCurvature repeat with i = 1 to 30 drawSpring i*10,20,20,-4,tCurvature wait i*.1 millisec end repeat put tCurvature into Amp repeat until amp < 0 repeat with tAngle = 0 to 360 step 15 --Use a cosine function to effect oscillating curvature. --drawSpring 300,20,20,0, amp*cos(tAngle/180*pi) drawSpring 300+60*amp*cos(tAngle/180*pi),20,20,0, amp*cos(tAngle/180*pi) unlock screen wait .16 ticks end repeat subtract .1 from amp end repeat end mouseUp zzXPNG  IHDRzOwgAMAOX2tEXtSoftwareAdobe ImageReadyqe<PLTE'''Ҽ­FFF000333^^^ xxxqqqΝAAAШ}}}```!!!yyy ̫zzzwwwHHH:::ccc555 oooIII@@@NNNVVVsss666 iiiƦlll(((///RRRZZZ\\\222888 EEEJJJ|||GGG%%%XXXKKKBBB### ggguuuDDD???SSS+++LLL"""rrrQQQ,,,fff>>>MMM;;;$$$bbb<<m),ƾ q㖙mH#Ι5MsXZK,mNGW nZ|7t7-CKuƒzT4A9\]kTo~]͑M?-~tQGDdvj.47 . ~@<!?U1]A^`f _1\\} 䦗}4 M*f5 i[`hhpPVؙ!  DEuI׭/rߗq4+:S)(pbEsچ 3|_"_TIhmH&m_H1S͎}خMq~֐6l9(?i;|릿'K9@ 6t׿da_:‡fF(9nbR hxtEB/: "õ)Ƣ$, m|`^f_dGBh_=#6#dv^,>N}dJ.3mue4=j UPJhHS LP6訽).5Vv:ʭ=X8s]2 :! єcѠqW-Ň}yq\z71Pͯ$M?` vȍ-)|U|I֋! Q^[kϫ~(\ *JϢs$ [ AzUSrSn\n&NE2GB0m@ejG^ ? 5Φ+ FVo"AekQZWlf%Q'ME6vhShՉ܇$F{ w/trea*X dS@ IF;5/T9!"E=?V>2=9485H`c>N6  QeRUNz \˕ѻOu4 {:~79U ͉mM[{=اLkLCnjvڸj>Z㽨}av>l R.EN sy,Z)xdz|_@5NٱTR6;yzg8+ ;(ORp:ԨŁ]H R^U i]qSJ`]4@< h x7ɠtң/CrLw{ok–eVݤִD)X*7X drT)<#+|<,@Qz: D:wOeFSf49ҷ+חܮo*@ xѻGD4Q&j XW. !9CV3|@;Ssu/JW j@{ -''}z.ufű0yu P ŕСEhcv[h<6 {y2?eު농FhδW(sw(%\aXK`qHŸh[2J*0[Y{H&VOzInуet ڊ+ɰR%8v`uC#J'ؕh~,fc,E\]t/9L'SoN,)>ZrХ ?yX\h\Xr, X-CogzMDoJ>xD(7P`W {A,`2uKټ4Ұ•߼)O}4sDO{ッqVq@c[KDb[bRbQ=.H 7[C"s8 _t,`69u=9{0cm!oBfءFF5k\xgFZYw94ջlhY0U~o]Rm϶sYn# oVo&!sZ,Zẋ 'Р ."¦u .QM0اGUszPK ]k\v `k; ڃ(4p,5̊/+SZ>픍j>&RCØ U4x!G OzRk( ?o> A- o~ZKP4+mhGyUux_lXԞTҖ)Q}/?u"4mI/.GOQ"5!ep3hش{Z 7% m_% o}`P}Ѿn8A=O G][N'KAAOSGuZ8 Խ9^SAC%y4h5OຍAl uNGn5)$ H+}fw:*Va7mTzrϋi??D 1:S; ` HX_ eVzR?`t|h?G}&٬U{@&S!/ Ď8Ib,Lb U y bnT|-C l0|cYu1 =dN#vDYCKiqfMIx; tuuōRs|%;Gh#)VY ˤj:cǬv[K8Щ'M?.3D lzl:!'9h.!b:Ja$A|w Cdt15=qt \ڌΛi*%pKF%85v-)a>G/uCQN=[sz^P Uk{S.۪ .T2F;# ?H i7:aʹtv- 5{='NgAXAlFGѻؔfiy+|2XټğkR8"f쉊.౵[$KLLhm{[Nn09, =?Y]c@ׇ\63h|Һ@ 6:y;9DZL/ ;GgFsYE(v#0^3p֐_rrEMQP.iu<"Aa@px꬈ٰw#>$X^7{kJy բh;f D`/|Q#Q ]qR3KoФr\՝\TO+wB l6?{ km\XX_!4Jd˲K$$S?kϝ=$fm'i`kkkggxZvK qPzxFܥ|#"zּ֧4YN{ fYۿ҄@%.idsE,28I6z0h>TDl J7]8mVk} w5#<7  56-$\2vٜ˴T !sH6S6o?)*Sظ) }BllWӿt+R'O㊸{I'nm_7䋚jy4>_-훟n^ۃꮂ^ֹttрe[oq-a0Ѐπ wl}>mpcϦ8,h8`bm&6' rOg߀G,wuZjh^eoc Vc䉸Bdw6Mk p#:6Zp4&s`vԕuV < :0Kӿ`(cX+N%+w4 W{ zz[htؒx掚 UtB+ChB /{39P .= ۘ.'vC6m9Bta5ٔӒ}ZTKlIOz`x f{ɞ/sݿ+n¸uBV>Iq2<HI*.BǨKOgFQQ 1f4qĽEM ~2n=Jǟ/oGhY vfgacᗆ=uIc KjoPi|D|3GrcՎ6w[n{/J nhKA^Ow (f)[=S+ì.:~S"V2C«8qqW=ɒ} %]PF qlީ5ub)311&Ohks6>^ADž(JzI,C ;qƌ)FlMV:'X| _MyuAb3zVzC3mQj5L:댊hF1`gD4,a 0tڟ~hyx;)CDGސ(:6WL8О j}ݷ̑gz_pʱ*w#}q_n=xZrt)ۖ(cKe>i rh1iU"u4 x୦ qoiMf=lN+G(7<9A],tvwY_Ϯ M:0T=`FG&It޹1XYqx7ZeUwI廼`I3&&Hg"ʜMF9RHTy7NN:-֬ت1'jۭ*>.$jqQ+x)KsoR6EH3S14D9\M {>s̈^iyG u6b Rx`|%*ߞ+O6HRP`WV#쾶npZ]8 [54-oG#9qK[rDbmmc1*>v:>)7TѾMCh?BјhtY}c/|jp&cjͫn3:*@7m]GkK-`iZFl3lAVͻ0)U[Z׉{C爯 *Nsy[~^s 4<]Vae+B1 *~}~FEu* LOp\+֞1 t6M`4{ε븠̖"A-8`1Z5ϙvS.Vz̞uFo6I [ zԭ^Ɋs*ЪBMɓv>eKbZjniRiM)bR=*,͠cg$1qVJK޻/ .aIENDB` cREVGeneral scriptChecksum)!/f breakPoints handlerListmouseUpscriptSelectionchar 414 to 413 revUniqueID 1120406990855 bookmarks tempScript prevHandlermouseUpscriptx

on mouseUp

--put the millisec into tStart

put 1 into tCurvature

repeat with i = 1 to 30

drawSpring i*10,20,20,-4,tCurvature

wait i*.1 millisec

end repeat

put tCurvature into Amp

repeat until amp < 0

repeat with tAngle = 0 to 360 step 15

--Use a cosine function to effect oscillating curvature.

--drawSpring 300,20,20,0, amp*cos(tAngle/180*pi)

drawSpring 300+60*amp*cos(tAngle/180*pi),20,20,0, amp*cos(tAngle/180*pi)

unlock screen

wait .16 ticks

end repeat

subtract .1 from amp

end repeat

end mouseUp

JackAlone.png @68 PNG  IHDR68gAMAOX2tEXtSoftwareAdobe ImageReadyqe<PLTE111$$$ QQQ౱@@@XXX444BBBﳳȝAAA\\\ ת븸555Ĉ000```fffRRRKKK[[[:::,,,yyy---777ߵ rrrsss|||bbbmmmJJJnnneee(((###222wwwGGGccc)))DDD ˔"""lllaaa'''tttiii{{{HHH;;;SSS>>> hhhƁNNNggg}}}LLLIIIMMMuuuᓓ!!!ܷ<<<]]]UUUqqq^^^pppFFFOOOzzzjjj~~~VVVCCCԗdddYYYPPP***===999???šZZZ꿿WWW֎oooЦ666kkk%%%vvvÖ...TTT&&&///+++ 888___333xxx&tRNS qyIDATxڌtd玕Q2I&m۶m^۶ml]w'M6Ϝ{_uTH+qB# Lk\$O|mƞ*@` c@"O\Íh*A^XGt-VXt 9bHtenTN1}Y-cXزB2@0TvR97ۜ`Xy@knSȕgSS:K+L1 EhmhMp"\STq9aj_>{kMnklChr,C[ mY'猐k*c?聁ҁYqclF3 +,G.57$g>SiK3 "OJ $PStf0NGӸC |bMҁE0dU#- @s=, cd}yىo `v~o>OLV@B5S 1vJ+@a'JF Z]70 n! t@b7B|7C[_@,e(Qҁ/w7/!co{xе OHEiGNQ(xd1LT rI,(r\isbeyZD=6\sjP[aL+xt6ˤ\g*lS`R zp yY T1y:VOaLݓNBlf2֖ HR;JSt4mj\bR Ve{v%8ng@ Njh \XWdN8|s[fu|DQ/oM=`Ck}iI~T0ҳAtGl'v\MNKvp*1GFs,2A57bBJ~zuNl9L4z4YVq<*.E>:PL7" WLT{EC0Pt W5)rX,oGv(ZV) ^Acml`GV0 C(+DB(؊؍"RBIKRV#AR I%s֮pU藴b \ğW^'_,:t1+ux=A+UɊeo<;Qd.tmʙ7F%5ghs,fCtYXao_douw#˭}4>1qi#RxRE]s=p>ƲnK5ERR*Į()p=m+-H8OY:Rp 恙CAw9ΠHmOgU]ϵ1H%7gb"ؚ,c{U}eMvĐH .d'w (E08x'`zTAY2',/'a{>IENDB` cREVGeneral revUniqueID 1120407023780 Field)`8 cREVGeneral revUniqueID 1120410113441 i dThis illustrates the simple harmonic oscillator. You may set the spring stiffness and the damping. 8(The total number of oscillations has been restricted.)  As an application, consider the shocks in your car. When you hit a bump, you want the springs to absorb the hit, but you don't want to bounce forever. You want the vibration to damp as soon as possible. This is called critical damping. If the sping is under-damped it will oscillate. If it is critally damped, it reaches equilibrium is the shortest possible time. If it is over-damped, it will not oscillate, but it will take longer to reach equilium. Pick a sping stiffness and adjust the damping for critical damping.`9 Reset JackEp0on mouseUp drawspring 20,10,10,1 end mouseUp BR cREVGeneral revUniqueID 1120410981944 Field)` n cREVGeneral revUniqueID 1120421070958  -A few (non-spring) examples of Stop Turtles. "See next card for TG volcabulary.NextEp*on mouseUp go to next card end mouseUp FR cREVGeneral revUniqueID 1120421149303 NextEp*on mouseUp go to next card end mouseUp FR cREVGeneral revUniqueID 1120421211964 NextEp*on mouseUp go to next card end mouseUp FR cREVGeneral revUniqueID 1120421214952 NextEp*on mouseUp go to next card end mouseUp FR cREVGeneral revUniqueID 1120421217985 NextEp*on mouseUp go to next card end mouseUp FR cREVGeneral revUniqueID 1120421220222 Field)`P cREVGeneral revUniqueID 1120421234298  9This card illustrates the options with a spring command. The command:  drawSpring 200,20,10,45, 2 will draw a sping 200 pixels long, with 20 coils which are 10 pixels wide, at an angle of 45 degrees, and with a curvature of 2 degrees, i.e.an increase of 2 degree with every coil.  `Acurveq-on scrollBarDrag put the thumbpos of scrollbar "length" into L put the thumbpos of scrollbar "number" into N put the thumbpos of scrollbar "width" into S put the thumbpos of scrollbar "angle" into A put the thumbpos of scrollbar "curve"/2.8 into K drawSpring L,N,S,A,K end scrollBarDrag h6&VV0101 cREVGeneral revUniqueID 1120421819616 Length 2d cREVGeneral revUniqueID 1120422079352 Curvature  Label Field ,Z( cREVGeneral revUniqueID 1120422453576 Open this box. (Click on it.)  Label Field Whiteh> cREVGeneral revUniqueID 1120424883607 Pull down on the weight.  Hit the shift key to stop  or wait for ten oscillations  H critical)`F8 cREVGeneral revUniqueID 1120507149666 i Under damped Critical damping value is 89 J Label Field xv cREVGeneral revUniqueID 1120508488373 Critical Damping LField( p" cREVGeneral revUniqueID 1120509058509  >drawSpring length, number of coils, width, angle, curvature  3 xellipseKz'  cREVGeneral revUniqueID 1120517131208