DIRECTORY Ascii USING [SP], BasicTime USING [GMT, nullGMT], Buttons USING [Button], Containers USING [Container], IO USING [STREAM], Labels USING [Label], Rope USING [ROPE], Plot USING [PlotSpec], TypeScript USING [TS], ViewerClasses USING [Viewer]; spGlobals: CEDAR DEFINITIONS = { itemType: TYPE = {name, comma, semi, colon, rightB, leftB, equal, number, leftC, rightC, eof, leftArrow, slash, upArrow, atSign, vertical, star, plus, minus, leftP, rightP, backSlash, greater, less, pound, squiggle, amperesand, quote, string, implies, greatEqual, lessEqual, maximum, minimum, nullItem}; keys: TYPE = {nodeKey, resKey, capKey, indKey, vsKey, isKey, runKey, printKey, circuitKey, modelKey, plotKey, icKey, dumpKey, assertsKey, checkPointKey, libraryKey, nullKey}; operators: TYPE = {load, neg, add, sub, mul, div, power, store, abs, exp, num, log, sqrt, not, grt, les, geq, leq, eq, neq, and, or, int, max, min, nullOpr}; expressionPtr: TYPE = REF expressionNode; expressionNode: TYPE = RECORD [ next: expressionPtr _ NIL, operands: SELECT operator: operators FROM add, sub, mul, div, power, and, or, grt, les, geq, leq, eq, neq, max, min => [leftOp: expressionPtr _ NIL, rightOp: expressionPtr _ NIL], abs, exp, neg, log, sqrt, not, int => [unaryOp: expressionPtr _ NIL], load, store => [var: namePtr _ NIL, expr: expressionPtr _ NIL], num => [v: REAL _ 0.0], ENDCASE ]; namePtr: TYPE = REF nameBlk; nameBlk: TYPE = RECORD [ nextName, srchLink: namePtr _ NIL, name: Rope.ROPE _ NIL, expExpr: expressionPtr _ NIL, realCopy: realThingPtr _ NIL, details: REF ANY _ NIL]; -- cf. the following 8 REF types RefNodeRec: TYPE = REF NodeRec; NodeRec: TYPE = RECORD []; RefBranchRec: TYPE = REF BranchRec; BranchRec: TYPE = RECORD [ branchType: elements _ nullElement, posNode, negNode, controller: namePtr _ NIL, modelIndex: NAT _ 0, valExpr: expressionPtr _ NIL]; RefCircuitRec: TYPE = REF CircuitRec; CircuitRec: TYPE = RECORD [ names, fakeNodes: namePtr _ NIL, conCount: NAT _ 0, parms, father: namePtr _ NIL, assertions: expressionPtr _ NIL]; RefConRec: TYPE = REF ConRec; ConRec: TYPE = RECORD []; RefParmRec: TYPE = REF ParmRec; ParmRec: TYPE = RECORD [ default: BOOL _ FALSE, dfltValue: REAL _ 0.0, nextParm: namePtr _ NIL]; RefCktInstRec: TYPE = REF CktInstance; CktInstance: TYPE = RECORD [ of: namePtr _ NIL, connections: conLinkPtr _ NIL, actualParms: expressionPtr _ NIL]; RefModelRec: TYPE = REF ModelRec; ModelRec: TYPE = RECORD [ modelProc: model _ NIL, modelResults: argList _ NIL, modelArgs: argNames _ NIL, modelArgVec, modelOldArgVec: argList _ NIL, modelParms: expressionPtr _ NIL]; RefFunctionRec: TYPE = REF FunctionRec; FunctionRec: TYPE = RECORD [ functionProc: function _ NIL, funcArgs: argNames _ NIL, funcArgVec: argList _ NIL, funcParms: expressionPtr _ NIL, branch: namePtr _ NIL]; nodePtr: TYPE = REF node; node: TYPE = RECORD [ nextNode: nodePtr _ NIL, nodeName: namePtr _ NIL, treeLevel: instTreePtr _ NIL, brotherNodes: nodePtr _ NIL, branches: branchLinkPtr _ NIL, curPtr: branchPtr _ NIL, -- vSource ptr nextIntNode: nodePtr _ NIL, nHist: history _ [], integrate, marked, converged: BOOL _ FALSE]; elements: TYPE = {resistor, capacitor, inductor, vSource, iSource, nullElement}; branchPtr: TYPE = REF branch; branch: TYPE = RECORD [ branchName: namePtr _ NIL, treeLevel: instTreePtr _ NIL, brotherBranches: branchPtr _ NIL, posNode, negNode: nodePtr _ NIL, comVal: REAL _ 0.0, controller: modFuncPtr _ NIL, modelIndex: NAT _ 0, body: REF ANY _ NIL]; -- cf. the following 5 REF types. RefR: TYPE = REF ResistorBody; ResistorBody: TYPE = RECORD []; RefC: TYPE = REF CapacitorBody; CapacitorBody: TYPE = RECORD [nextCapacitor: branchPtr _ NIL]; history: TYPE = RECORD [y, oldy, sumk, oldf, f0, f1, f2, f3, f4: REAL _ 0.0]; RefL: TYPE = REF InductorBody; InductorBody: TYPE = RECORD [ nextInductor: branchPtr _ NIL, iHist: history _ []]; RefV: TYPE = REF VSourceBody; VSourceBody: TYPE = RECORD [ nextvSource: branchPtr _ NIL, vsCurrent: REAL _ 0.0, oldCurrent: REAL _ 0.0]; RefI: TYPE = REF ISourceBody; ISourceBody: TYPE = RECORD [nextiSource: branchPtr _ NIL]; realThings: TYPE = {realNode, realBranch, realParm, realModel, unReal}; realThingPtr: TYPE = REF realThing; realThing: TYPE = RECORD [ nextThing: realThingPtr _ NIL, newLevel: BOOL _ TRUE, thing: REF ANY _ NIL]; -- cf. the following 5 REF types RefRealNode: TYPE = REF RealNode; RealNode: TYPE = RECORD [rn: nodePtr _ NIL]; RefRealBranch: TYPE = REF RealBranch; RealBranch: TYPE = RECORD [rb: branchPtr _ NIL]; RefRealParm: TYPE = REF RealParm; RealParm: TYPE = RECORD [rp: REAL _ 0.0]; RefRealModel: TYPE = REF RealModel; RealModel: TYPE = RECORD [rm: modFuncPtr _ NIL]; RefUnReal: TYPE = REF UnReal; UnReal: TYPE = RECORD []; branchLinkPtr: TYPE = REF branchLink; branchLink: TYPE = RECORD [ nextLink: branchLinkPtr _ NIL, branch: branchPtr _ NIL, otherNode: nodePtr _ NIL, pos: BOOL _ FALSE]; conLinkPtr: TYPE = REF conLink; conLink: TYPE = RECORD [ nextLink: conLinkPtr _ NIL, namedNode: namePtr _ NIL]; instTreePtr: TYPE = REF instTreeNode; instTreeNode: TYPE = RECORD [ father, brothers, sons: instTreePtr _ NIL, instance: namePtr _ NIL, nodes: nodePtr _ NIL, branches: branchPtr _ NIL]; modFuncPtr: TYPE = REF modFuncBlk; modFuncBlk: TYPE = RECORD [ nextMFPtr: modFuncPtr _ NIL, arguments: argNodes _ NIL, argVector, parmVector: argList _ NIL, actualParms: expressionPtr _ NIL, body: REF ANY _ NIL]; -- cf. the following two. RefFuncBody: TYPE = REF FunctionBody; FunctionBody: TYPE = RECORD [ functionProc: function _ NIL, branch: branchPtr _ NIL]; RefModBody: TYPE = REF ModelBody; ModelBody: TYPE = RECORD [ modelProc: model _ NIL, modelResults: argList _ NIL, modelName: namePtr _ NIL, oldArgVector: argList _ NIL, modelBranches: modBrPtr _ NIL]; modBrPtr: TYPE = REF modelBranch; modelBranch: TYPE = RECORD [ nextBranch: modBrPtr, b: branchPtr]; ModelTablePtr: TYPE = REF ModelTableBlk; ModelTableBlk: TYPE = RECORD [ next: ModelTablePtr, name: Rope.ROPE, proc: model, numArgs, numParms, numResults: NAT]; FuncTablePtr: TYPE = REF FuncTableBlk; FuncTableBlk: TYPE = RECORD [ next: FuncTablePtr, name: Rope.ROPE, proc: function, numArgs, numParms: NAT]; argList: TYPE = REF ValueSeq; ValueSeq: TYPE = RECORD [value: SEQUENCE size: NAT OF REAL]; argNames: TYPE = REF namePtrSeq; namePtrSeq: TYPE = RECORD [names: SEQUENCE size: NAT OF namePtr]; argNodes: TYPE = REF nodePtrSeq; nodePtrSeq: TYPE = RECORD [nodes: SEQUENCE size: NAT OF nodePtr]; model: TYPE = PROC[args, oldArgs, parms, results: argList]; function: TYPE = PROC[t: REAL, args, parms: argList] RETURNS [v: REAL]; Stages: TYPE = {idle, input, bomb, topo, run}; Handle: TYPE = REF ThymeToolRec; ThymeToolRec: TYPE = RECORD [ outer: Containers.Container _ NIL, wDir, input, progress: ViewerClasses.Viewer _ NIL, output, time, step: Labels.Label _ NIL, message: TypeScript.TS _ NIL, msgStream: IO.STREAM _ NIL, showDetailsButton: Buttons.Button _ NIL, showTimeStep: BOOL _ TRUE, stage: Stages _ idle, checkProcess, simulation: PROCESS _ NIL, checkPointCV: CONDITION, height: NAT _ 0, vars: REF Variables _ NIL]; Variables: TYPE = RECORD [ simTime: BasicTime.GMT _ BasicTime.nullGMT, runState: NAT[0..4) _ 0, forcedDump: BOOL _ FALSE, lastTime: REAL _ 0.0, checkPointInterval: REAL _ 60.0, fileStack: REF fileStackSeq _ NIL, fileStackTop: NAT _ 0, line: REF TEXT _ NIL, value: REAL _ 0.0, item: itemType _ nullItem, newString: REF TEXT _ NIL, char: CHAR _ Ascii.SP, cptr: NAT _ 0, -- pointer to "char" in "line" genSymCtr: LONG CARDINAL _ 10000, gndNodeName, undefNode, cktRoot, currentCkt: namePtr _ NIL, treeRoot: instTreePtr _ NIL, unusedNodes: nodePtr _ NIL, nodeCount, branchCount, modelCount, funcCount: LONG CARDINAL _ 0, n: nodePtr _ NIL, -- Real ones!!! b: branchPtr _ NIL, p: REAL _ 0.0, m: modFuncPtr _ NIL, gndNode, nodeList: nodePtr _ NIL, capacitorList, inductorList, vSourceList, iSourceList: branchPtr _ NIL, functionList: modFuncPtr _ NIL, errCount, warnCount: NAT _ 0, triedOnce: BOOL _ FALSE, inStream, thymeDotErrors: IO.STREAM _ NIL, topOfMsgStream: INT _ 0, type: {real, name} _ real, numPrints: NAT _ 0, prints: REF PrintSeq _ NIL, numPlots: NAT _ 0, plots: REF PlotSeq _ NIL, intNodeList: nodePtr _ NIL, intNodeModFunc, otherModFunc: modFuncPtr _ NIL, worstNode: nodePtr _ NIL, curLog: NAT _ 0, worstNodeLog: REF WorstNodeLog _ NIL, icsSet, checkPoint, canned: BOOL _ FALSE, numGoodSteps: LONG CARDINAL _ 0, modelsSkipped: NAT _ 0, dvdtTrunc, t, dT: REAL _ 0.0, AMcount, goodNodeCount, numberOfSteps, highStepCount, lowStepCount: INT _ 0, countsPerStep: INT _ 100000000, Vmin: REAL _ -100.0, Vmax: REAL _ 100.0, dvdtmax: REAL _ 1.0e15, dfltInts: NAT _ 200, retRatio: REAL _ 0.5, RKfac: REAL _ 1.0, minRatio: REAL _ 0.8, floor: REAL _ 0.01, AMerr: REAL _ 0.01, RKerr: REAL _ 0.01, tBreak: REAL _ 0.0, dvdtFac: REAL _ 5.0, squish: REAL _ 0.2, initStep: REAL _ 0.1, tol: REAL _ 0.001, intTol: REAL _ 0.001, AMup: REAL _ 1.25, AMdown: REAL _ 0.8, printdT: REAL _ 0.0, tMin: REAL _ 0.0, tMax: REAL _ 0.0, maxIter: INT _ 20, AMiter: NAT _ 2, AMdelay: NAT _ 5, printIter, printStep, doRungeKutta, printAll: BOOL _ FALSE, checkPointCV: CONDITION ]; argumentPtr: TYPE = REF argument; argument: TYPE = RECORD [ node: nodePtr _ NIL, branch: branchPtr _ NIL, getComVal, dvdt, current: BOOL _ FALSE]; fileStackSeq: TYPE = RECORD [f: SEQUENCE numFiles: NAT OF IO.STREAM]; maxInclude: NAT = 10; maxPlots: NAT = 10; maxPrints: NAT = 10; PlotSeq: TYPE = RECORD [SEQUENCE size: NAT OF PlotRec]; PlotRec: TYPE = RECORD [ plotList: plotBlkPtr _ NIL, plotTimeRelTo: REAL _ 0, plotCount: NAT _ 0, -- # curves plotViewer: ViewerClasses.Viewer _ NIL, plotSpec: Plot.PlotSpec _ NIL]; plotBlkPtr: TYPE = REF plotBlk; plotBlk: TYPE = RECORD [ nextBlk: plotBlkPtr _ NIL, relativeTo: REAL _ 0, arg: argumentPtr _ NIL]; PrintSeq: TYPE = RECORD [SEQUENCE size: NAT OF PrintRec]; PrintRec: TYPE = RECORD [ printList: printBlkPtr _ NIL, printTimeRelTo: REAL _ 0.0, printStream: IO.STREAM _ NIL]; printBlkPtr: TYPE = REF printBlk; printBlk: TYPE = RECORD [ nextBlk: printBlkPtr _ NIL, relativeTo: REAL _ 0, arg: argumentPtr _ NIL]; maxLog: NAT = 16; WorstNodeLog: TYPE = RECORD [SEQUENCE size: NAT OF WorstNodeRec]; WorstNodeRec: TYPE = RECORD [node: nodePtr _ NIL, t, v, dvdt: REAL _ 0]; maxCountsPerStep: INT = 1000000000; ErrorSignal: SIGNAL[error: NAT, s: Rope.ROPE]; Retreat: SIGNAL[cause: Rope.ROPE]; Failure: SIGNAL[errorNum: NAT]; Aborted: SIGNAL; -- spGlobalsImpl version: Rope.ROPE; refNodeRec: READONLY RefNodeRec; refConRec: READONLY RefConRec; refR: READONLY RefR; refUnReal: READONLY RefUnReal; modelTable: ModelTablePtr; functionTable: FuncTablePtr; openInputFile: PROC[handle: Handle]; OutputFileRoot: PROC[handle: Handle] RETURNS [Rope.ROPE]; WorkingDirectory: PROC[handle: Handle] RETURNS [Rope.ROPE]; FlushCloseNil: PROC[stream: IO.STREAM] RETURNS [IO.STREAM _ NIL]; CloseNil: PROC[stream: IO.STREAM] RETURNS [IO.STREAM _ NIL]; MsgTextsWithLook: PROC[handle: Handle, text: Rope.ROPE, look: CHAR['a..'z]]; next: PROC[handle: Handle]; searchKey: PROC[handle: Handle] RETURNS [index: keys]; getSignedNumber: PROC[handle: Handle] RETURNS [n: REAL _ 1.0]; GetLineAndCptr: PROC[handle: Handle] RETURNS [Rope.ROPE, NAT]; error: PROC[handle: Handle, err: NAT, skip, warning: BOOL _ FALSE]; error2: PROC[handle: Handle, err: NAT, n: namePtr]; ErrorStrings: PROC[handle: Handle, err: NAT, s1, s2: Rope.ROPE]; ErrorAtNB: PROC[handle: Handle, err: NAT, n: nodePtr, b: branchPtr]; ErrWarnSummary: PROC[handle: Handle]; expression: PROC[handle: Handle] RETURNS [e: expressionPtr]; assignExpr: PROC[handle: Handle, leftContext: namePtr] RETURNS [a: expressionPtr]; eval: PROC[handle: Handle, exp: expressionPtr] RETURNS [v: REAL]; variable: PROC[handle: Handle, string: REF TEXT, context: namePtr] RETURNS [nPtr: namePtr _ NIL]; output: PROC[handle: Handle, ckt: namePtr, level: NAT]; defineCircuit: PROC[handle: Handle, ckt: namePtr, root: BOOL]; bomb: PROC[handle: Handle]; printHole: PROC[handle: Handle]; findNodeOrBranch: PROC[handle: Handle] RETURNS [n: nodePtr, b: branchPtr]; makeStringNB: PROC[handle: Handle, n: nodePtr, b: branchPtr, ok: BOOL _ TRUE] RETURNS [Rope.ROPE]; getParmValue: PROC[handle: Handle, nPtr: namePtr] RETURNS [REAL]; putParmValue: PROC[handle: Handle, nPtr: namePtr, val: REAL]; topoAnalysis: PROC[handle: Handle]; runIt: PROC[handle: Handle] RETURNS [REAL]; setICs: PROC[handle: Handle]; initPlot: PROC[handle: Handle, tMin, tMax: REAL]; plotFromList: PROC[handle: Handle, t: REAL]; makePlotList: PROC[handle: Handle]; initPrint: PROC[handle: Handle, time: BasicTime.GMT]; printFromList: PROC[handle: Handle, ni: INT, t: REAL, printStep: BOOL]; makePrintList: PROC[handle: Handle]; PutMsgLine: PROC[handle: Handle, s: Rope.ROPE]; dumpAll: PROC[handle: Handle, t: REAL]; EnterModels: PROC[ name: Rope.ROPE, proc: model, numArgs, numParms, numResults: NAT]; EnterFunctions: PROC[ name: Rope.ROPE, proc: function, numArgs, numParms: NAT]; findModel: PROC[name: Rope.ROPE] RETURNS [model, NAT, NAT, NAT]; findFunction: PROC[name: Rope.ROPE] RETURNS [function, NAT, NAT]; ResetCheckPoint: PROC[handle: Handle]; Canned: PROC[handle: Handle] RETURNS [BOOL]; ForcedDump: PROC[handle: Handle] RETURNS [BOOL]; CheckPoint: PROC[handle: Handle] RETURNS [BOOL]; ShowDetails: PROC[handle: Handle] RETURNS [BOOL]; StopIt: PROC[handle: Handle]; DumpIt: PROC[handle: Handle]; ToggleShowDetails: PROC[handle: Handle]; SimulateIt: PROC[handle: Handle]; NextStage: PROC[handle: Handle]; SetCursor: PROC[handle: Handle, invert: BOOL _ FALSE]; AdvanceStage: PROC[handle: Handle]; spModels: PROGRAM; Level2Model: PROGRAM; spFunctions: PROGRAM; }. DFile: [Cherry]Cedar5.2>System>spGlobals.mesa Last Edited by: SChen, September 18, 1984 1:01:33 pm PDT types: expressionPtr namePtr nodePtr branchPtr realThingPtr branchLinkPtr, conLinkPtr, and instTreePtr modelFuncPtr modelBrPtr ModelTablePtr and FuncTablePtr argList, argNames, argNodes model and function Stages, Handle, ThymeToolRec and Variables spGlobalsImpl spInput spBomb spErrors spExpressions spOutput spSolve misc types and constants spSolve signals: global variables: Initialized in ThymeViewers procs: Exported by spGlobalsImpl: Exported by spErrors: Exported by spExpressions: Exported by spInput: Exported by spBomb: Exported by spAnalysis: Exported by spSolve: Exported by spOutput: Exported by spMain: Exported by ThymeViewers: Library Models and Functions: CHANGE LOG Wilhelm, April 27, 1982 4:05 PM Barth, 7-May-82 10:58:25 PDT Chen, 4/19/83:- modified itemType, operators, and expressionNode to support Max and Min operations. Chen, 2/12/84:- modified to support oldArgVector. Chen, June 12, 1984 10:05:25 am PDT, Cedarized. ส“– "Cedar" style˜Jšœ3™3Jšœ8™8J™šฯk ˜ Jšœœœ˜Jšœ œœ ˜Jšœœ ˜Jšœ œ ˜Jšœœœ˜Jšœœ ˜Jšœœœ˜Jšœœ ˜Jšœ œœ˜Jšœœ ˜—J˜Jšฯb œœ œ˜ J˜Jšžœ™J˜Jšœ œก˜ฏJ˜Jšœœค˜ฎJ™Jšœ ™ J˜Jšœ œŽ˜J˜Jšœœœ˜)šœœœ˜Jšœœ˜šœ œ˜)šœL˜LJšœœœ˜=—šœ%˜%Jšœœ˜—šœ˜Jšœœœ˜1—šœ˜Jšœœ˜—Jš˜—Jšœ˜J˜—Jšœ™J˜Jšœ œœ ˜šœ œœ˜Jšœ ˜ Jšœœ˜Jšœ œœ˜Jšœœ˜Jšœœ˜Jšœ œœœฯc ˜9J˜Jšœ œœ ˜Jšœ œœ˜Jšœœœ ˜#šœ œœ˜Jšœ#˜#Jšœ˜Jšœ˜Jšœœ˜Jšœ œ˜Jšœœ˜—J˜Jšœœœ ˜%šœ œœ˜Jšœ˜Jšœœ˜Jšœ œ˜Jšœ˜Jšœœ˜Jšœœ˜!—J˜Jšœ œœ˜Jšœœœ˜Jšœ œœ ˜šœ œœ˜Jšœ œœ˜Jšœ œ˜Jšœœ˜—J˜Jšœœœ ˜&šœ œœ˜Jšœœ˜Jšœœ˜Jšœœ˜#—Jšœ œœ ˜!šœ œœ˜Jšœœ˜Jšœœ˜Jšœœ˜Jšœ ˜ Jšœœ˜Jšœœ˜"—Jšœœœ ˜'šœ œœ˜Jšœœ˜Jšœœ˜Jšœœ˜Jšœœ˜Jšœœ˜——J™Jšœ™J˜Jšœ œœ˜šœœœ˜Jšœœ˜Jšœœ˜Jšœœ˜Jšœœ˜Jšœœ˜JšœœŸ˜'Jšœœ˜Jšœ˜Jšœ ˜ Jšœ˜Jšœ œœ˜—J™Jšœ ™ J˜Jšœ œB˜PJšœ œœ˜šœœœ˜Jšœœ˜Jšœœ˜Jšœœ˜!Jšœ˜Jšœœ˜Jšœœ˜Jšœœ˜Jšœ œ˜JšœœœœŸ!˜7J˜Jšœœœ˜Jšœœœ˜!Jšœœœ˜Jšœœœœ˜?Jšœ œœ+œ˜MJšœœœ˜šœœœ˜Jšœœ˜Jšœ˜—J˜Jšœœœ ˜šœ œœ˜Jšœœ˜Jšœ œ˜Jšœ œ˜—J˜Jšœœœ ˜Jšœ œœœ˜:J˜—Jšœ ™ J˜Jšœ œ7˜GJšœœœ ˜#šœ œœ˜Jšœœ˜Jšœ œœ˜JšœœœœŸ ˜7J˜Jšœ œœ ˜!Jšœ œœœ˜,J˜Jšœœœ ˜%Jšœ œœœ˜1Jšœ œœ ˜!Jšœ œœœ ˜*Jšœœœ ˜#Jšœ œœœ˜1Jšœ œœ˜Jšœœœ˜—Jšœ*™*J˜Jšœœœ ˜%šœ œœ˜Jšœœ˜Jšœœ˜Jšœœ˜Jšœœœ˜J˜—Jšœ œœ ˜šœ œœ˜Jšœœ˜Jšœœ˜—J˜Jšœ œœ˜%šœœœ˜Jšœ˜Jšœ ˜ Jšœœ˜Jšœœ˜Jšœœ˜Jšœœ˜—J™Jšœ ™ J˜Jšœ œœ ˜#šœ œœ˜Jšœœ˜Jšœœ˜Jšœ ˜ Jšœœ˜Jšœœ˜!JšœœœœŸ˜/J˜Jšœ œœ˜%šœœœ˜Jšœœ˜Jšœœ˜—J˜Jšœ œœ ˜!šœ œœ˜Jšœœ˜Jšœœ˜Jšœœ˜Jšœœ˜Jšœœ˜——J™Jšœ ™ J™Jšœ œœ ˜!šœ œœ˜Jšœ˜Jšœ˜—J™Jšœ™J™Jšœœœ˜(šœœœ˜Jšœ˜Jšœ œ˜Jšœ ˜ Jšœœ˜%—Jšœœœ˜&šœœœ˜Jšœ˜Jšœ œ˜Jšœ˜Jšœœ˜—J™Jšœ™J˜Jšœ œœ ˜Jš œ œœ œœœœ˜=Jšœ œœ ˜ Jš œ œœ œœœ ˜BJšœ œœ ˜ Jš œ œœ œœœ ˜BJšœ™J˜Jšœœœ)˜;Jš œ œœœœœ˜GJ˜Jšœ*™*J˜Jšœœ"˜.Jšœœœ˜ J˜šœœœ˜Jšœœ˜"Jšœ.œ˜2Jšœ#œ˜'Jšœœœ˜Jšœ œœœ˜Jšœ$œ˜(Jšœœœ˜Jšœ˜Jšœœœ˜(Jšœ œ˜Jšœœ˜Jšœœ œ˜—J˜šœ œœ˜Jšœœ˜+Jšœ œ ˜Jšœ œœ˜Jšœ œ˜Jšœœ˜ J™Jšœ ™ Jšœ œœ˜"Jšœœ˜Jšœœœœ˜Jšœœ˜Jšœ˜Jšœ œœœ˜Jšœœ œ˜JšœœŸ˜-Jšœ  œ ˜!J™Jšœ™Jšœ ˜ Jšœ ˜ Jšœ˜Jšœœ˜J™Jšœ™Jšœœ˜Jšœœ˜Jšœ/œœ˜BJšœ œŸ˜!Jšœœ˜Jšœœ˜Jšœœ˜Jšœ˜Jšœœ˜Jšœ˜Jšœ ˜ Jšœ ˜ Jšœœ˜Jšœœ˜J™Jšœ™Jšœœ˜Jšœ œœ˜Jšœœœœ˜*Jšœœ˜J™Jšœ ™ Jšœ˜Jšœ™Jšœ œ˜Jšœœ œ˜Jšœ œ˜Jšœœ œ˜J™Jšœ™Jšœœ˜Jšœ˜Jšœœ˜Jšœœ˜Jšœœ˜Jšœœœ˜%Jšœœœ˜)Jšœœœ˜ Jšœœ˜Jšœœ˜JšœDœ˜LJšœœ˜"Jšœœ ˜Jšœœ ˜Jšœ œ ˜Jšœ œ ˜Jšœ œ˜Jšœœ˜Jšœ œ˜Jšœœ˜Jšœœ˜Jšœœ˜Jšœœ˜Jšœ œ˜Jšœœ˜Jšœ œ˜Jšœœ ˜Jšœœ ˜Jšœœ˜Jšœœ˜Jšœ œ˜Jšœœ˜Jšœœ˜Jšœ œ˜Jšœœ˜Jšœ œ˜Jšœ.œœ˜;J™Jšœ ˜Jšœ˜—J™Jšœ™J˜Jšœ œœ ˜!šœ œœ˜Jšœœ˜Jšœœ˜Jšœ ˜ Jšœ˜Jšœ œœ˜—J˜Jšœœœœ œœœœ˜EJšœ œ˜J˜Jšœ œ˜Jšœ œ˜J˜Jš œ œœœœœ ˜7šœ œœ˜Jšœœ˜Jšœœ˜Jšœ œŸ ˜Jšœ#œ˜'Jšœœ˜—J˜Jšœ œœ ˜šœ œœ˜Jšœœœœ˜IJ˜—Jš œ œœœœœ ˜9šœ œœ˜Jšœœ˜Jšœœ˜Jšœ œœœ˜—J˜Jšœ œœ ˜!šœ œœ˜Jšœœ˜Jšœ œ˜Jšœœ˜—J˜Jšœ™Jšœœ˜Jš œœœœœœ˜AJš œœœœœ˜HJšœœ˜#J™Jšžœ™J˜Jšœ œœ œ˜.Jšœ œ œ˜"Jšœ œ œ˜Jšœ œŸ˜!J™Jšžœ™J˜Jšœ™Jšœœ˜Jšœ œ ˜ Jšœ œ ˜Jšœœ˜Jšœ œ ˜Jšœ˜Jšœ˜J™Jšžœ™J™Jšœ™Jšœœ˜$Jšฯnœœœœ˜9Jš œœœœ˜;Jš  œœ œœœœœœ˜AJš œœ œœœœœœ˜Jš  œœœœœ˜>J™Jšœ™Jš œœœœœ˜CJšœœœ˜3Jš  œœœœ˜@Jš  œœœ˜DJšœœ˜%J™Jšœ™Jšœ œœ˜