'      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                           ! " # $ % & ' ( ) * + , - . / 0 1 23456789:;<=>?@ABC D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { |}~                                                       ! " # $%&-Safe"  In degrees ! "   !     !Safe"#"##""#Safe $%&'()*+,-. $%&'()*+,-.$%&'()*+,-.Safe/0/0/0Safe123456781234567812345678Safe9:;<=>?@ABCDEFGHI9:;<=>?@ABCDEFGHI9:;<=>?@ABCDEFGHISafeQJ Opcode: 1900 K Opcode: 1901L Opcode: 1902M Opcode: 1800N Opcode: 1801O Opcode: 1802P Opcode: 2300Q Opcode: 2301R@Opcode: 2302 Usually this is the top left corner of the element T Opcode: 2201W Opcode: 2200Y Opcode: 1601Z Opcode: 1602[ Opcode: 1603\ Opcode: 1604] Opcode: 1605^ Opcode: 1606_ Opcode: 1607` Opcode: 1608b Opcode: 1600c Opcode: 1500d Opcode: 1501e Opcode: 1502f Opcode: 1503g Opcode: 1504h Opcode: 1505i Opcode: 2400j Opcode: 2401k Opcode: 2402m Opcode: 1401n Opcode: 1402p Opcode: 1400q Opcode: 1300r Opcode: 1301s Opcode: 1200t Opcode: 1201u Opcode: 1000vOpcode: 1001 First circle = inner circle, Second circle is enclosing circlew Opcode: 1002x Opcode: 0900y Opcode: 0901z Opcode: 0902{ Opcode: 0903| Opcode: 0904} Opcode: 0800~ Opcode: 0801Opcode: 0802 [ScreenPixel] should be as long as width * height * 4 Opcode: 0701 Opcode:0702 Opcode: 0703 Opcode: 0700 Opcode: 0601 Opcode: 0602 Opcode: 0600 Opcode: 0501 Opcode: 0502 Opcode: 0500 Opcode: 0400 Opcode: 0401 Opcode: 0402 Opcode: 0403 Opcode: 0404 Opcode: 0405 Opcode: 0406 Opcode: 0407 Opcode: 0300 Opcode: 0301  Opcode: 0302  Opcode: 0303  Opcode: 0304 Reserved type words Type: t | Opcode Arguments: a | List of arguments for that data type Route: r | Either s for system or u8 for user Object: o | The object that is beneathExample: {r: s, o: {SystemMeasuredText object}}SystemMeasuredText object: {t:2102, a1:[CanvasId, CanvasText object, ScreenDimensions]} Opcode: 0200 Opcode: 0201 Opcode: 0202 Opcode: 0203 Opcode: 0204 Opcode: 0100 Opcode: 0101 Opcode: 2000 Opcode: 2001 Opcode: 2100 Opcode: 2101JKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ In degreesJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~DJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~SafeZ| The point indications are from the perspective of a regular Cartesian cordinate system.| Rotation is around a point on the canvas. May be the centre of the boundingbox (enclosing rectangle) or an arbitrary point. Angle is in degrees and counter-clockwise in the cordinate system(from the x-axis to the y-axis) and visually on canvas clock-wise.Translation is upperleftcorner| Translation is the corner closes to origin. Visually in canvas, this is top left. In a Cartesian cordinate system, this is bottom left.Translation is centercThe first point of the polygon, always starts in the direction from the x-axis.(Towards x-infinity)Translation is horizontally the center and vertically the top of the text, does not have a boundingbox due to technical limitationsShould contain atleast 1 shape9: Safe'()*+,-./012345678'()*+,-./012345678'()*+,-./012345678 Safe"      !"#$%&'!      !"#$%&"     ' !"#$%&      !"#$%&'Safe ()*+,-./01 ()*+,-./01()*+,-./01None23456789:;<=>?@AB9:;<=>?@ABCDE23456789:;<=>?@AB23456789:;<=>?@AB9:;<=>?@ABCDESafeFGHIJKLMNOPQRSTUVWXYZ[FGFGHIJKLMNOPQRSTUVWXYZ[None\]^_`abcdefghijklmnopqrstuvw\\]^_`abcdefghijklmnopqrstuvwSafeCDEFGHIJKLMNOPQRSCDEFGHIJKLMNOPQRSCDEFGHIJKLMNOPQRSSafe&TUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxy2CDEFGHIJKLMNTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxy TUVWXYZ[\] ^_`abcdefghijklmnopqrstuvwxySafez{z{z{ Safexyz{|}~x{}~xyz{|}~!None"None#NoneNoneJ|}~J|}~R~}||}~   $None   NoneJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ύ}~xyz{|uvwstqrpolmnijkcdefghbaXYZ[\]^_`WVUSTPQRMNOJKL%None Nonez{z{&None   NoneCDEFGHIJKLMNOPQRSRSOPQGHIJKLMNCDEF'None    None()*+,-./0101,-./*+()(NoneNoneO23456789:;<=>?@ABY<=>?@A:;89B674523)NoneNone9:;<=>?@ABCDEFGHIIABCDEFGH9:;<=>?@*NoneNone 12345678 56781234+NoneNone/0/0,None  None$%&'()*+,-..-,+*()$%&'None-None GCheckes to see if there is a node on a certain position Abstracts the standardized ./ to u Abstracts q back to  BasicShapes and Canvas events'Translates color datatype to RGBA codes.Translates the thickness to a float Returns the point when making a step f long from the point start in the direction of the vector. The length between start pos and result pos is always f. Vector from p1 to p2 !Returns the vector perpendicular on the given vector between the 2 points. Always has positive y and vector length 1; y is inverted in canvas"Returns the vector perpendicular on the given vector between the 2 points. Always has negative y and vector length 1; y is inverted in canvas#8Returns the size of the vector #      !"##      !"##      !"# NoneUCDEFGHIJKLMNTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxy      !"#U      !"#yxuvwqrstponmghijkl]^_`abcdefZ[\WXYTUVGHIJKLMNCDEFNone$$$$None%&%&%&%&0123456789:;<<==>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvhwxyz{|}~:      !"#$% & ' ( ) * + , - . . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E FGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrsstuuvwxyz{|}~r($$$$$$$$$$%%%%%%&&&&&&'''''''''''(((())))))*****+++ , , , , ,,,-----D-4----------- -!-"-#-$-%-&-'-(-)-*-+-,---.-/-0-1-234567899:;<=>?@A4BCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~       !!!!!!!!!!!!!!!!!!!"""""""####%%&&&&&&''))))))))))**,,,,,event_Kb11uT8uKER5Qfl21ver5TEventloop.Utility.VectorsEventloop.Types.CommonEventloop.Module.TimerEventloop.Module.StdOutEventloop.Module.StdInEventloop.Module.File!Eventloop.Module.Websocket.CanvasEventloop.Module.BasicShapes#Eventloop.Utility.Trees.GeneralTreeEventloop.Module.DrawTrees Eventloop.Module.Websocket.MouseEventloop.Module.Graphs#Eventloop.Module.Websocket.KeyboardEventloop.Types.EventTypesEventloop.RouteEventEventloop.EventloopCoreEventloop.DefaultConfigurationEventloop.Module.Timer.TypesEventloop.Module.StdOut.TypesEventloop.Module.StdIn.TypesEventloop.Module.File.Types'Eventloop.Module.Websocket.Canvas.Types"Eventloop.Module.BasicShapes.Types"Eventloop.Utility.Trees.LayoutTree Eventloop.Module.DrawTrees.Types$Eventloop.Module.BasicShapes.Classes(Eventloop.Module.Websocket.Canvas.Opcode.Eventloop.Module.Websocket.Canvas.JSONEncoding&Eventloop.Module.Websocket.Mouse.TypesEventloop.Module.Graphs.Types)Eventloop.Module.Websocket.Keyboard.TypesEventloop.Utility.ConcurrentEventloop.Utility.Websockets$Eventloop.Utility.BufferedWebsocketsEventloop.Utility.Config(Eventloop.Module.Websocket.Canvas.Canvas,Eventloop.Module.Websocket.Keyboard.Keyboard&Eventloop.Module.Websocket.Mouse.Mouse$Eventloop.Module.DrawTrees.DrawTrees(Eventloop.Module.BasicShapes.BasicShapesEventloop.Module.File.FileEventloop.Module.StdIn.StdInEventloop.Module.StdOut.StdOutEventloop.Module.Timer.TimerEventloop.Module.Graphs.GraphsEventLoop.Types EventTypesRotateLeftAroundrotateLeftAround ToPolarCoord toPolarCoordToPointtoPointVector2D|+||-| negateVector Translate translatePoint PolarCoordOffsetYXLengthRadiansAngledegreesToRadiansradiansToDegrees lengthToPointlengthBetweenPointsdifferenceBetweenPoints originPoint$fRotateLeftAroundPoint$fRotateLeftAroundPolarCoord$fToPolarCoordPoint$fToPointPolarCoord$fVector2DPoint$fVector2DPolarCoord NumericIdNamedIdTimerOutSetTimerSetIntervalTimer UnsetTimerTimerInTickTimerStartFunction StartedTimerIncomingTickBufferTimerIdMicroSecondDelay StdOutOut StdOutMessageStdInOutStdInReceiveContentsStdInReceiveLineStdInReceiveCharStdInInStdInReceivedContentsStdInReceivedLineStdInReceivedCharFileOutOpenFile CloseFileRetrieveContents RetrieveLine RetrieveCharIfEOFWriteToFileIn FileOpened FileClosedRetrievedContents RetrievedLine RetrievedCharIsEOFWroteTo ClearPartClearRectangle ClearCanvasCSSUnit CSSPixels CSSPercentage CSSBindPoint CSSFromCenterCSSFromDefault CSSPositionCSSMeasurements CSSTopOffset CSSLeftOffsetCanvasTransformSaveRestoreRotateScale Transform SetTransformResetTransformTransformationMatrix TransformUnit Alignment AlignLeft AlignRight AlignCenter AlignStartAlignEndTextFill NoTextFill TextStroke NoTextStrokeTextFillRenderStyleTextStrokeRenderStyleFont CanvasTextCanvasGradientTypeRadialGradientLinearGradientPatternRepetitionRepeatRepeatXRepeatYNoRepeat CanvasImage CanvasElement ImageData RenderStyle CanvasColorCanvasGradient CanvasPatternCanvasColorStopPathFill NoPathFillPathRenderFillStyle PathStroke NoPathStrokePathRenderStrokeStyleScreenPathPartMoveToLineTo BezierCurveToQuadraticCurveToArcToArc RectangleCanvasOperationDrawPathDrawText DoTransformClear CanvasOut SetupCanvasTeardownCanvasCanvasOperations MeasureTextCanvasIn MeasuredTextSystemCanvasOutSystemMeasureTextSystemCanvasInSystemMeasuredTextRoutedMessageOut OutUserCanvasOutSystemCanvasRoutedMessageIn InUserCanvasInSystemCanvasFontSize FontFamilyScreenLineThicknessScaleYScaleX ScaleUnit ScreenCircleColorStopOffset ScreenPixel ScreenColor ScreenAlpha ScreenBlue ScreenGreen ScreenRedScreenColorMetricZIndexCanvasIdScreenEndAngleScreenStartingAngleScreenEndPointScreenControlPointScreenStartingPointScreenDimensions ScreenPoint ScreenAngle ScreenRadius ScreenHeight ScreenWidthScreenYScreenX ScreenMetricOpcodeCanvasSystemReceiveBufferCanvasUserReceiveBuffer BoundingBox RotatePoint AroundCenter AroundPointRotation Primitive translation dimensions fillColorCircleradiusPolygonamountOfPointsTexttext fontFamilyfontSizeLinepoint1point2 MultiLine otherPointsShape BaseShape primitivestrokeLineThickness strokeColor rotationMCompositeShapeshapes translationMBasicShapesOut DrawShapesAmountOfPoints LowerRight LowerLeft UpperRight UpperLeftStrokeLineThickness StrokeColor FillColorColorAlphaBlueGreenRedRadius DimensionsHeightWidth TranslationGraphicalNumericGeneralizeTreegeneralizeTreePosMiddle BottomOffset RightOffset TopOffset LeftOffset GeneralLineGeneralNodeContentGeneralNodeText GeneralNode GeneralTreeGeneralTreeBoxtextFont textHeight charWidthmarginBetweenTreesmarginBetweenNodeContentmarginBetweenNodeRowsmarginBetweenNodeColumnsgeneralNodeDimensionflattenDimensionsgeneralNodeContentDimensionlayoutGeneralTreelayoutGeneralTreeChildren layoutLinelayoutGeneralTreeslayoutGeneralNodeContentListlayoutGeneralNodeContenttextSize treeIndex$fGeneralizeTreeGeneralTreeRoseTreeRoseNodeRBTreeRBNode NodeColorNodeRed NodeBlackNodeGrey DrawTreesOut DrawTreesToScreenPathParttoScreenPathPartsToCanvasOperationstoCanvasOperations ToCanvasOut toCanvasOut ToBoundingBox toBoundingBoxToCentertoCenteraddBoundingBoxfoldBoundingBoxesopOnBoundingBoxallPolygonPoints roundPoint roundColorfindRotationPoint MouseButton MouseLeft MouseRight MouseMiddle MouseEventClick DoubleClick MouseMove MouseDownMouseUp MouseEnter MouseLeave MouseType MouseCanvasMouseSVGMouseInMouseWeighted UnweightedDirected Undirected ThicknessThinThickPurpleGreyYellowOrangeBlackWhiteGraphnodesedgesdirectedweightedEdgeNodeWeightLabel GraphsOut SetupGraphs DrawGraph InstructionsGraphsInKeyVectorKeyboard ParameterAPINameIOState MouseState receiveBuffer clientSocketclientConnection serverSocketbufferedReaderThread KeyboardState CanvasStatecommonReceiveBuffercanvasUserReceiveBuffercanvasSystemReceiveBufferunbufferedReaderThread routerThread StdInStatenewStdInInEvents TimerStatestartedIntervalTimers startedTimersincomingIntervalTickBufferincomingTickBuffer FileStatenewFileInEventsopenedNoState SharedIOState measureTextOutOutFileOutTimer OutStdOutOutStdIn OutCanvasOutBasicShapes OutDrawTrees OutGraphsStopInStart InKeyboardInMouseInFileInTimerInStdInInCanvasInGraphsEventloopConfiguration progState eventloopFunc outRouter sharedIOStatemoduleConfigurationsEventloopModuleConfigurationmoduleIdentifieriostate initializereventRetriever preprocessor postprocessorteardown eventSenderOutEventRouterTeardown EventSender PostProcessor PreProcessorEventRetriever InitializerEventloopModuleIdentifier defaultCanvasModuleConfigurationdefaultCanvasModuleIOStatecanvasModuleIdentifiercanvasInitializercanvasEventRetrievercanvasEventSendercanvasTeardownsendRoutedMessageOutrouter"defaultKeyboardModuleConfigurationdefaultKeyboardModuleIOStatekeyboardModuleIdentifierkeyboardInitializerkeyboardEventRetrieverkeyboardTeardowndefaultMouseModuleConfigurationdefaultMouseModuleIOStatemouseModuleIdentifiermouseInitializermouseEventRetriever mouseTeardown#defaultDrawTreesModuleConfigurationdefaultDrawTreesModuleIOStatedrawTreesModuleIdentifierdrawTreesPostProcessormaxWidthshowGeneralTreeListshowGeneralTreeList'showGeneralTreenodeColorToFillColor rbExampleTreeroseExampleTree%defaultBasicShapesModuleConfigurationdefaultBasicShapesModuleIOStatebasicShapesModuleIdentifierbasicShapesPostProcessordefaultFileModuleConfigurationdefaultFileModuleIOStatefileModuleIdentifierfileEventRetrieverfileEventSender fileTeardowndefaultStdInModuleConfigurationdefaultStdInModuleIOStatestdInModuleIdentifierstdInEventRetrieverstdInEventSender defaultStdOutModuleConfigurationstdOutModuleIdentifierstdOutEventSenderdefaultTimerModuleConfigurationdefaultTimerModuleIOStatetimerModuleIdentifiertimerInitializertimerEventRetrievertimerEventSender timerTeardown routeOutEvent defaultGraphsModuleConfigurationdefaultGraphsModuleIOStategraphsModuleIdentifier nodeRadius xArrowSize yArrowSize weightHeightdimCanvasGraphsroundDimCanvasGraphscanvasGraphsWidthcanvasGraphsHeightinstructionsHeightinstructionsBeginAtcanvasInstrWidthcanvasInstrHeightdimCanvasInstrroundDimCanvasInstrcanvasIdGraphscanvasIdInstructionsonNodegraphsPreProcessorgraphsPostProcessorcolorToRGBAColorthicknessToFloatfindNode graphToShapes nodeToShapes edgeToShapes posOnVector vectorizedownPerpendicularToupPerpendicularTo vectorSize startMainloop allModulesEventloopConfigurationdefaultSharedIOStateConnect BottomConnect TopConnect LayoutLineLayoutNodeContentLayoutNodeText LayoutNode LayoutTreeLBox marginLine lineThickness textThickness printTreeprintNodeContent printLinemarginizeLinePoints$fToScreenPathPartPrimitive$fToCanvasOperationsShape$fToCanvasOutBasicShapesOut$fToBoundingBoxShape$fToBoundingBoxPrimitive$fToBoundingBoxBoundingBox$fToCenterBoundingBox$fToCenterShape$fToCenterPrimitive$fRotateLeftAroundBoundingBox$fTranslatePrimitive$fTranslateShape$fTranslateBoundingBoxToOpcodetoOpcode$fToOpcodeCSSBindPoint$fToOpcodeCSSPosition$fToOpcodeClearPart$fToOpcodeCSSUnit$fToOpcodeCanvasTransform$fToOpcodeAlignment$fToOpcodeTextFill$fToOpcodeTextStroke$fToOpcodeFont$fToOpcodeCanvasText$fToOpcodeCanvasGradientType$fToOpcodePatternRepetition$fToOpcodeCanvasImage$fToOpcodeRenderStyle$fToOpcodePathFill$fToOpcodePathStroke$fToOpcodeScreenPathPart$fToOpcodeCanvasOperation$fToOpcodeCanvasOut$fToOpcodeSystemCanvasOutoperationObject$fToJSONClearPart$fToJSONCSSUnit$fToJSONCSSBindPoint$fToJSONCSSPosition$fToJSONCanvasTransform$fToJSONAlignment$fToJSONTextFill$fToJSONTextStroke $fToJSONFont$fToJSONCanvasText$fToJSONCanvasGradientType$fToJSONPatternRepetition$fToJSONCanvasImage$fToJSONRenderStyle$fToJSONPathFill$fToJSONPathStroke$fToJSONScreenPathPart$fToJSONCanvasOperation$fToJSONCanvasOut$fToJSONSystemCanvasOut$fToJSONRoutedMessageOut$fFromJSONAlignment$fFromJSONFont$fFromJSONCanvasText$fFromJSONCanvasIn$fFromJSONSystemCanvasIn$fFromJSONRoutedMessageInThreadWaitOnfork setTerminatedjointerminateThreadUnbufferedReaderThread ReaderThread ClientSocket ServerSocket ReceiveBufferMessagePortHostcreateBindListenServerSocketacceptFirstConnectionsetupWebsocketConnectionspawnUnbufferedReaderreadIntoBufferhandleCloseRequestException hasMessage takeMessage writeMessagewriteBinaryMessagecloseWebsocketConnectionwebso_2aOg3InAfA5ErBohnaPpn1Network.WebSockets.Connection ConnectionBufferedReaderThreadBufferedReceiveBufferspawnBufferedReaderbufferedReadIntoBuffer hasMessages takeMessages ipAddress keyboardPort mousePort canvasPortmessageToKeyboardIn$fFromJSONKeyboardmessageToMouseIn$fFromJSONPoint$fFromJSONMouseButton$fFromJSONMouseEvent$fFromJSONMouseType$fFromJSONMouseIn$fGeneralizeTreeRoseTree$fGeneralizeTreeRBTreefileEventSender' doReadAction getFromFilefileIsReadablefileIsWriteable fileIsOpenedretrieveContentsretrieveOpenedFileremoveOpenedFile closeAllFilesstdInEventSender' doStdInGettimerEventSender' registerTimerunregisterTimerfindStartedTimertickProcessingDescriptionPhaseDescription HasToStop putStrLnIfinitialisePhase teardownPhasehandlePhaseModuleConfigurationshandlePhaseModuleConfigurationstartMainloopWithStarthandleMainloopUsingSource receiveEventshandleInEventshandleSingleInEvent doEventloop sendOutEventssendOutEventWithModuleprocessEventModuleprocessEventsModules processEvents