Skip to content

Interface

github-actions[bot] edited this page Feb 25, 2026 · 1 revision

This document was generated from 'src/documentation/wiki-interface.ts' on 2026-02-24, 16:22:20 UTC presenting an overview of flowR's interface (v2.9.12, using R v4.5.0). Please do not edit this file/wiki page directly.

Although far from being as detailed as the in-depth explanation of flowR, this wiki page explains how to interface with flowR in more detail. In general, command line arguments and other options provide short descriptions on hover over.

💻 Using the REPL

Note

To execute arbitrary R commands with a repl request, flowR has to be started explicitly with --r-session-access. Please be aware that this introduces a security risk and note that this relies on the r-shell engine .

Although primarily meant for users to explore, there is nothing which forbids simply calling flowR as a subprocess to use standard-in, -output, and -error for communication (although you can access the REPL using the server as well, with the REPL Request message).

The read-eval-print loop (REPL) works relatively simple. You can submit an expression (using Enter), which is interpreted as an R expression by default but interpreted as a command if it starts with a colon (:). The best command to get started with the REPL is :help. Besides, you can leave the REPL either with the command :quit or by pressing Ctrl+C twice. When writing a command, you may press Tab to get a list of completions, if available. Multiple commands can be entered in a single line by separating them with a semicolon (;), e.g. :parse "x<-2"; :df*. If a command is given without R code, the REPL will re-use R code given in a previous command. The prior example will hence return first the parsed AST of the program and then the dataflow graph for "x <- 2".

Note

If you develop flowR, you may want to launch the repl using the npm run main-dev command, this way, you get a non-minified version of flowR with debug information and hot-reloading of source files.

Available Commands

We currently offer the following commands (this with a [*] suffix are available with and without the star):

Command Description
:quit End the repl (aliases: :q, :exit)
:execute Execute the given code as R code. This requires the --r-session-access flag to be set and requires the r-shell engine. (aliases: :e, :r)
:controlflow[*] Get mermaid code for the control-flow graph of R code, start with 'file://' to indicate a file (star: Returns the URL to mermaid.live) (aliases: :cfg, :cf)
:controlflowbb[*] Get mermaid code for the control-flow graph with basic blocks, start with 'file://' to indicate a file (star: Returns the URL to mermaid.live) (aliases: :cfgb, :cfb)
:dataflow[*] Get mermaid code for the dataflow graph, start with 'file://' to indicate a file (star: Returns the URL to mermaid.live) (aliases: :d, :df)
:normalize[*] Get mermaid code for the normalized AST of R code, start with 'file://' to indicate a file (star: Returns the URL to mermaid.live) (alias: :n)
:dataflowsimple[*] Get mermaid code for the simplified dataflow graph, start with 'file://' to indicate a file (star: Returns the URL to mermaid.live) (aliases: :ds, :dfs)
:dataflowsilent Just calculates the DFG, but only prints summary info (aliases: :d#, :df#)
:parse Prints ASCII Art of the parsed, unmodified AST, start with 'file://' to indicate a file (alias: :p)
:version Prints the version of flowR as well as the current version of R
:query[*] Query the given R code, start with 'file://' to indicate a file. The query is to be a valid query in json format (use 'help' to get more information). (star: Similar to query, but returns the output in json format.)
:dataflowascii Returns an ASCII representation of the dataflow graph (alias: :df!)
:normalize# Returns summarization stats for the normalized AST (alias: :n#)
:help Show help information (aliases: :h, :?)

Tip

As indicated by the examples before, all REPL commands that operate on code keep track of the state. Hence, if you run a command like :dataflow* without providing R code, the REPL will re-use the R code provided in a previous command. Likewise, doing this will benefit from incrementality! If you request the dataflow graph with :df* x <- 2 * y and then want to see the parsed AST with :parse, the REPL will re-use previously obtained information and not re-parse the code again.

Generally, many commands offer shortcut versions in the REPL. Many queries, for example, offer a shortened format (see the example below). Of special note, the Config Query can be used to also modify the currently active configuration of flowR within the REPL (see the wiki page for more information).

Example: Retrieving the Dataflow Graph

To retrieve a URL to the mermaid diagram of the dataflow of a given expression, use :dataflow* (or :dataflow to get the mermaid code in the cli):

$ docker run -it --rm eagleoutice/flowr # or npm run flowr 
flowR repl using flowR v2.9.12, R grammar v14 (tree-sitter engine)
R> :dataflow* y <- 1 + x
Output
https://mermaid.live/view#base64:eyJjb2RlIjoiZmxvd2NoYXJ0IEJUXG4gICAgMXt7XCJgIzkxO1JOdW1iZXIjOTM7IDFcbiAgICAgICgxKVxuICAgICAgKjEuNipgXCJ9fVxuICAgJSUgTm8gZWRnZXMgZm91bmQgZm9yIDFcbiAgICAyKFtcImAjOTE7UlN5bWJvbCM5MzsgeFxuICAgICAgKDIpXG4gICAgICAqMS4xMCpgXCJdKVxuICAgJSUgTm8gZWRnZXMgZm91bmQgZm9yIDJcbiAgICAzW1tcImAjOTE7UkJpbmFyeU9wIzkzOyAjNDM7XG4gICAgICAoMylcbiAgICAgICoxLjYtMTAqXG4gICAgKDEsIDIpYFwiXV1cbiAgICBidWlsdC1pbjpfW1wiYEJ1aWx0LUluOlxuIzQzO2BcIl1cbiAgICBzdHlsZSBidWlsdC1pbjpfIHN0cm9rZTpncmF5LGZpbGw6Z3JheSxzdHJva2Utd2lkdGg6MnB4LG9wYWNpdHk6Ljg7XG4gICAgMFtcImAjOTE7UlN5bWJvbCM5MzsgeVxuICAgICAgKDApXG4gICAgICAqMS4xKmBcIl1cbiAgICA0W1tcImAjOTE7UkJpbmFyeU9wIzkzOyAjNjA7IzQ1O1xuICAgICAgKDQpXG4gICAgICAqMS4xLTEwKlxuICAgICgwLCAzKWBcIl1dXG4gICAgYnVpbHQtaW46Xy1bXCJgQnVpbHQtSW46XG4jNjA7IzQ1O2BcIl1cbiAgICBzdHlsZSBidWlsdC1pbjpfLSBzdHJva2U6Z3JheSxmaWxsOmdyYXksc3Ryb2tlLXdpZHRoOjJweCxvcGFjaXR5Oi44O1xuICAgIDMgLS0+fFwicmVhZHMsIGFyZ3VtZW50XCJ8IDFcbiAgICAzIC0tPnxcInJlYWRzLCBhcmd1bWVudFwifCAyXG4gICAgMyAtLi0+fFwicmVhZHMsIGNhbGxzXCJ8IGJ1aWx0LWluOl9cbiAgICBsaW5rU3R5bGUgMiBzdHJva2U6Z3JheTtcbiAgICAwIC0tPnxcImRlZmluZWQtYnlcInwgM1xuICAgIDAgLS0+fFwiZGVmaW5lZC1ieVwifCA0XG4gICAgNCAtLT58XCJyZWFkcywgYXJndW1lbnRcInwgM1xuICAgIDQgLS0+fFwicmV0dXJucywgYXJndW1lbnRcInwgMFxuICAgIDQgLS4tPnxcInJlYWRzLCBjYWxsc1wifCBidWlsdC1pbjpfLVxuICAgIGxpbmtTdHlsZSA3IHN0cm9rZTpncmF5OyIsIm1lcm1haWQiOnsiYXV0b1N5bmMiOnRydWV9fQ==

Retrieve the dataflow graph of the expression y <- 1 + x. It looks like this:

flowchart LR
    1{{"`#91;RNumber#93; 1
      (1)
      *1.6*`"}}
   %% No edges found for 1
    2(["`#91;RSymbol#93; x
      (2)
      *1.10*`"])
   %% No edges found for 2
    3[["`#91;RBinaryOp#93; #43;
      (3)
      *1.6-10*
    (1, 2)`"]]
    built-in:_["`Built-In:
#43;`"]
    style built-in:_ stroke:gray,fill:gray,stroke-width:2px,opacity:.8;
    0["`#91;RSymbol#93; y
      (0)
      *1.1*`"]
    4[["`#91;RBinaryOp#93; #60;#45;
      (4)
      *1.1-10*
    (0, 3)`"]]
    built-in:_-["`Built-In:
#60;#45;`"]
    style built-in:_- stroke:gray,fill:gray,stroke-width:2px,opacity:.8;
    3 -->|"reads, argument"| 1
    3 -->|"reads, argument"| 2
    3 -.->|"reads, calls"| built-in:_
    linkStyle 2 stroke:gray;
    0 -->|"defined-by"| 3
    0 -->|"defined-by"| 4
    4 -->|"reads, argument"| 3
    4 -->|"returns, argument"| 0
    4 -.->|"reads, calls"| built-in:_-
    linkStyle 7 stroke:gray;
Loading
R Code of the Dataflow Graph

The analysis required 0.5 ms (including parse and normalize, using the tree-sitter engine) within the generation environment. We encountered no unknown side effects during the analysis.

y <- 1 + x

For small graphs like this, :dataflowascii also provides an ASCII representation directly in the REPL:

$ docker run -it --rm eagleoutice/flowr # or npm run flowr 
flowR repl using flowR v2.9.12, R grammar v14 (tree-sitter engine)
R> :df! y <- 1 + x
Output
                        0<1>0
                   ┌────| 1 |
    ┌────────┐     │    0---0
 c<4>c       └──c<3>c
 |<- |  v<0>v┌──| + |
 c---c──| y |┘  c---c   u<2>u
        v---v      └────| x |
                        u---u
Edges:
3 -> 1: reads, argument  3 -> 2: reads, argument
4 -> 3: reads, argument  4 -> 0: returns, argument
0 -> 3: defined-by       0 -> 4: defined-by

Retrieve the dataflow graph of the expression y <- 1 + x as ASCII art.

For the slicing with :slicer, you have access to the same magic comments as with the slice request.

Example: Interfacing with the File System

Many commands that allow for an R-expression (like :dataflow*) allow for a file as well if the argument starts with file://. If you are working from the root directory of the flowR repository, the following gives you the parsed AST of the example file using the :parse command:

$ docker run -it --rm eagleoutice/flowr # or npm run flowr 
flowR repl using flowR v2.9.12, R grammar v14 (tree-sitter engine)
R> :parse file://test/testfiles/example.R
Output
File: test/testfiles/example.R

program
├ binaryoperator
│ ├ identifier "sum" (1:1─4)
│ ├ <- "<-" (1:5─7)
│ ╰ float "0" (1:8─9)
├ binaryoperator
│ ├ identifier "product" (2:1─8)
│ ├ <- "<-" (2:9─11)
│ ╰ float "1" (2:12─13)
├ binaryoperator
│ ├ identifier "w" (3:1─2)
│ ├ <- "<-" (3:3─5)
│ ╰ float "7" (3:6─7)
├ binaryoperator
│ ├ identifier "N" (4:1─2)
│ ├ <- "<-" (4:3─5)
│ ╰ float "10" (4:6─8)
├ forstatement
│ ├ for "for" (6:1─4)
│ ├ ( "(" (6:5─6)
│ ├ identifier "i" (6:6─7)
│ ├ in "in" (6:8─10)
│ ├ binaryoperator
│ │ ├ float "1" (6:11─12)
│ │ ├ : ":" (6:12─13)
│ │ ╰ parenthesizedexpression
│ │   ├ ( "(" (6:13─14)
│ │   ├ binaryoperator
│ │   │ ├ identifier "N" (6:14─15)
│ │   │ ├ - "-" (6:15─16)
│ │   │ ╰ float "1" (6:16─17)
│ │   ╰ ) ")" (6:17─18)
│ ├ ) ")" (6:18─19)
│ ╰ bracedexpression
│   ├ { "{" (6:20─21)
│   ├ binaryoperator
│   │ ├ identifier "sum" (7:3─6)
│   │ ├ <- "<-" (7:7─9)
│   │ ╰ binaryoperator
│   │   ├ binaryoperator
│   │   │ ├ identifier "sum" (7:10─13)
│   │   │ ├ + "+" (7:14─15)
│   │   │ ╰ identifier "i" (7:16─17)
│   │   ├ + "+" (7:18─19)
│   │   ╰ identifier "w" (7:20─21)
│   ├ binaryoperator
│   │ ├ identifier "product" (8:3─10)
│   │ ├ <- "<-" (8:11─13)
│   │ ╰ binaryoperator
│   │   ├ identifier "product" (8:14─21)
│   │   ├  "" (8:22─23)
│   │   ╰ identifier "i" (8:24─25)
│   ╰ } "}" (9:1─2)
├ call
│ ├ identifier "cat" (11:1─4)
│ ╰ arguments
│   ├ ( "(" (11:4─5)
│   ├ argument
│   │ ╰ string
│   │   ├ " "\"" (11:5─6)
│   │   ├ stringcontent "Sum:" (11:6─10)
│   │   ╰ " "\"" (11:10─11)
│   ├ comma "," (11:11─12)
│   ├ argument
│   │ ╰ identifier "sum" (11:13─16)
│   ├ comma "," (11:16─17)
│   ├ argument
│   │ ╰ string
│   │   ├ " "\"" (11:18─19)
│   │   ├ stringcontent
│   │   │ ╰ escapesequence "\\n" (11:19─21)
│   │   ╰ " "\"" (11:21─22)
│   ╰ ) ")" (11:22─23)
╰ call
  ├ identifier "cat" (12:1─4)
  ╰ arguments
    ├ ( "(" (12:4─5)
    ├ argument
    │ ╰ string
    │   ├ " "\"" (12:5─6)
    │   ├ stringcontent "Product:" (12:6─14)
    │   ╰ " "\"" (12:14─15)
    ├ comma "," (12:15─16)
    ├ argument
    │ ╰ identifier "product" (12:17─24)
    ├ comma "," (12:24─25)
    ├ argument
    │ ╰ string
    │   ├ " "\"" (12:26─27)
    │   ├ stringcontent
    │   │ ╰ escapesequence "\\n" (12:27─29)
    │   ╰ " "\"" (12:29─30)
    ╰ ) ")" (12:30─31)

Retrieve the parsed AST of the example file.

File Content
sum <- 0
product <- 1
w <- 7
N <- 10

for (i in 1:(N-1)) {
  sum <- sum + i + w
  product <- product * i
}

cat("Sum:", sum, "\n")
cat("Product:", product, "\n")

As flowR directly transforms this AST the output focuses on being human-readable instead of being machine-readable.

Example: Run a Query

You can run any query supported by flowR using the :query command. For example, to obtain the shapes of all data frames in a given piece of code, you can run:

$ docker run -it --rm eagleoutice/flowr # or npm run flowr 
flowR repl using flowR v2.9.12, R grammar v14 (tree-sitter engine)
R> :query @df-shape "x <- data.frame(a = 1:10, b = 1:10)\ny <- x$a"
Output
Query: df-shape (1 ms)
   ╰ 12: (colnames: [{"a", "b"}, {}], cols: [2, 2], rows: [10, 10])
   ╰ 0: (colnames: [{"a", "b"}, {}], cols: [2, 2], rows: [10, 10])
All queries together required ≈3 ms (1ms accuracy, total 4 ms)

Retrieve the shapes of all data frames in the given code.

To run the linter on a file, you can use (in this example, we just issue the dead-code linter on a small piece of code):

$ docker run -it --rm eagleoutice/flowr # or npm run flowr 
flowR repl using flowR v2.9.12, R grammar v14 (tree-sitter engine)
R> :query @linter rules:dead-code "if(FALSE) x <- 2"
Output
Query: linter (1 ms)
   ╰ Dead Code (dead-code):
       ╰ certain:
           ╰ Code at 1.11-16
       ╰ Metadata: consideredNodes: 7, searchTimeMs: 0, processTimeMs: 1
All queries together required ≈1 ms (1ms accuracy, total 2 ms)

Run the linter on the given code, with only the dead-code rule enabled.

For more information on the available queries, please check out the Query API.

⚙️ Configuring FlowR

When running flowR, you may want to specify some behaviors with a dedicated configuration file. By default, flowR looks for a file named flowr.json in the current working directory (or any higher directory). You can also specify a different file with --config-file or pass the configuration inline using --config-json. To inspect the current configuration, you can run flowr with the --verbose flag, or use the config Query. Within the REPL this works by running the following:

:query @config

The following summarizes the configuration options:

  • ignoreSourceCalls: If set to true, flowR will ignore source calls when analyzing the code, i.e., ignoring the inclusion of other files.
  • semantics: allows to configure the way flowR handles R, although we currently only support semantics/environment/overwriteBuiltIns. You may use this to overwrite flowR's handling of built-in function and even completely clear the preset definitions shipped with flowR. See Configure BuiltIn Semantics for more information.
  • solver: allows to configure how flowR resolves variables and their values (currently we support: disabled, alias, builtin), as well as if pointer analysis should be active.
  • engines: allows to configure the engines used by flowR to interact with R code. See the Engines wiki page for more information.
  • defaultEngine: allows to specify the default engine to use for interacting with R code. If not set, an arbitrary engine from the specified list will be used.
  • abstractInterpretation: allows to configure how flowR performs abstract interpretation, although we currently only support data frame shape inference through abstract interpretation.

So you can configure flowR by adding a file like the following:

Example Configuration File
{
  "ignoreSourceCalls": true,
  "semantics": {
    "environment": {
      "overwriteBuiltIns": {
        "definitions": [
          {
            "type": "function",
            "names": [
              "foo"
            ],
            "processor": "builtin:assignment",
            "config": {}
          }
        ]
      }
    }
  },
  "repl": {
    "quickStats": false,
    "dfProcessorHeat": false
  },
  "project": {
    "resolveUnknownPathsOnDisk": true
  },
  "engines": [
    {
      "type": "r-shell"
    }
  ],
  "solver": {
    "variables": "alias",
    "evalStrings": true,
    "resolveSource": {
      "dropPaths": "no",
      "ignoreCapitalization": true,
      "inferWorkingDirectory": "active-script",
      "searchPath": []
    },
    "instrument": {},
    "slicer": {
      "threshold": 50
    }
  },
  "abstractInterpretation": {
    "wideningThreshold": 4,
    "dataFrame": {
      "maxColNames": 20,
      "readLoadedData": {
        "readExternalFiles": true,
        "maxReadLines": 1000000
      }
    }
  }
}
Configure Built-In Semantics

semantics/environment/overwriteBuiltins accepts two keys:

  • loadDefaults (boolean, initially true): If set to true, the default built-in definitions are loaded before applying the custom definitions. Setting this flag to false explicitly disables the loading of the default definitions.

  • definitions (array, initially empty): Allows to overwrite or define new built-in elements. Each object within must have a type which is one of the below. Furthermore, they may define a string array of names which specifies the identifiers to bind the definitions to. You may use assumePrimitive to specify whether flowR should assume that this is a primitive non-library definition (so you probably just do not want to specify the key).

    Type Description Example
    constant Additionally allows for a value this should resolve to. { type: 'constant', names: ['NULL', 'NA'], value: null }
    function Is a rather flexible way to define and bind built-in functions. For the time, we do not have extensive documentation to cover all the cases, so please either consult the sources with the default-builtin-config.ts or open a new issue. { type: 'function', names: ['next'], processor: 'builtin:default', config: { cfg: ExitPointType.Next } }
    replacement A comfortable way to specify replacement functions like $<- or names<-. suffixes describes the... suffixes to attach automatically. { type: 'replacement', suffixes: ['<-', '<<-'], names: ['[', '[['] }
Full Configuration-File Schema
  • The configuration file format for flowR. (object)
    • ignoreSourceCalls [optional] Whether source calls should be ignored, causing {@link processSourceCall}'s behavior to be skipped. (boolean)
    • semantics Configure language semantics and how flowR handles them. (object)
      • environment [optional] Semantics regarding how to handle the R environment. (object)
        • overwriteBuiltIns [optional] Do you want to overwrite (parts) of the builtin definition? (object)
          • loadDefaults [optional] Should the default configuration still be loaded? (boolean)
          • definitions [optional] The definitions to load/overwrite. (array) Valid item types:
            • (object)
    • repl Configuration options for the REPL. (object)
      • quickStats [optional] Whether to show quick stats in the REPL after each evaluation. (boolean)
      • dfProcessorHeat [optional] This instruments the dataflow processors to count how often each processor is called. (boolean)
    • project Project specific configuration options. (object)
      • resolveUnknownPathsOnDisk [optional] Whether to resolve unknown paths loaded by the r project disk when trying to source/analyze files. (boolean)
    • engines The engine or set of engines to use for interacting with R code. An empty array means all available engines will be used. (array) Valid item types:
      • (alternatives)
        • The configuration for the tree sitter engine. (object)
          • type [required] Use the tree sitter engine. (string) Only allows: 'tree-sitter'
          • wasmPath [optional] The path to the tree-sitter-r WASM binary to use. If this is undefined, this uses the default path. (string)
          • treeSitterWasmPath [optional] The path to the tree-sitter WASM binary to use. If this is undefined, this uses the default path. (string)
          • lax [optional] Whether to use the lax parser for parsing R code (allowing for syntax errors). If this is undefined, the strict parser will be used. (boolean)
        • The configuration for the R shell engine. (object)
          • type [required] Use the R shell engine. (string) Only allows: 'r-shell'
          • rPath [optional] The path to the R executable to use. If this is undefined, this uses the default path. (string)
    • defaultEngine [optional] The default engine to use for interacting with R code. If this is undefined, an arbitrary engine from the specified list will be used. (string) Only allows: 'tree-sitter', 'r-shell'
    • solver How to resolve constants, constraints, cells, ... (object)
      • variables How to resolve variables and their values. (string) Only allows: 'disabled', 'alias', 'builtin'
      • evalStrings Should we include eval(parse(text="...")) calls in the dataflow graph? (boolean)
      • instrument (object)
        • dataflowExtractors [optional] These keys are only intended for use within code, allowing to instrument the dataflow analyzer! (any)
      • resolveSource [optional] If lax source calls are active, flowR searches for sourced files much more freely, based on the configurations you give it. This option is only in effect if ignoreSourceCalls is set to false. (object)
        • dropPaths Allow to drop the first or all parts of the sourced path, if it is relative. (string) Only allows: 'no', 'once', 'all'
        • ignoreCapitalization Search for filenames matching in the lowercase. (boolean)
        • inferWorkingDirectory Try to infer the working directory from the main or any script to analyze. (string) Only allows: 'no', 'main-script', 'active-script', 'any-script'
        • searchPath Additionally search in these paths. (array) Valid item types:
          • (string)
        • repeatedSourceLimit [optional] How often the same file can be sourced within a single run? Please be aware: in case of cyclic sources this may not reach a fixpoint so give this a sensible limit. (number)
        • applyReplacements Provide name replacements for loaded files (array) Valid item types:
          • (object)
      • slicer [optional] The configuration for the slicer. (object)
        • threshold [optional] The maximum number of iterations to perform on a single function call during slicing. (number)
    • abstractInterpretation The configuration options for abstract interpretation. (object)
      • dataFrame The configuration of the shape inference for data frames. (object)
        • maxColNames The maximum number of columns names to infer for data frames before over-approximating the column names to top. (number)
        • wideningThreshold The threshold for the number of visitations of a node at which widening should be performed to ensure the termination of the fixpoint iteration. (number)
        • readLoadedData Configuration options for reading data frame shapes from loaded external data files, such as CSV files. (object)
          • readExternalFiles Whether data frame shapes should be extracted from loaded external files, such as CSV files. (boolean)
          • maxReadLines The maximum number of lines to read when extracting data frame shapes from loaded files, such as CSV files. (number)

⚒️ Writing Code

flowR can be used as a module and offers several main classes and interfaces that are interesting for extension writers (see the Visual Studio Code extension or the Core wiki page for more information).

Creating Analyses with flowR

Nowadays, instances of the FlowrAnalyzer should be used as central frontend to get analysis results from flowR. For example, a program slice can be created like this:

const analyzer = await new FlowrAnalyzerBuilder()
    .setEngine('tree-sitter')
    .build();
analyzer.addRequest('x <- 1\ny <- x\nx');
const result = await analyzer.query([
    {
        type:     'static-slice',
        criteria: ['3@x']
    }
]);
//console.log(result['static-slice']);

For more information, please have a look at the Analyzer wiki page, which explains how to construct and use the FlowrAnalyzer in more detail. To work with specific perspectives, you can also consult the respective pages like the Dataflow Graph or the Abstract Interpretation wiki pages.

The Pipeline Executor (Low-Level Interface)

Once, in the beginning, flowR was meant to produce a dataflow graph merely to provide program slices. However, with continuous updates, the Dataflow Graph repeatedly proves to be the more interesting part. With this, we restructured flowR's originally hardcoded pipeline to be far more flexible. Now, it can be theoretically extended or replaced with arbitrary steps, optional steps, and what we call 'decorations' of these steps. In short, a slicing pipeline using the PipelineExecutor looks like this:

const slicer = new PipelineExecutor(DEFAULT_SLICING_PIPELINE, {
  parser:    new RShell(),
  request:   requestFromInput('x <- 1\nx + 1'),
  criterion: ['2@x']
})
const slice = await slicer.allRemainingSteps()
// console.log(slice.reconstruct.code)
More Information

If you compare this, with what you would have done with the old (and removed) SteppingSlicer, this essentially just requires you to replace the SteppingSlicer with the PipelineExecutor and to pass the DEFAULT_SLICING_PIPELINE as the first argument. The PipelineExecutor...

  1. Provides structures to investigate the results of all intermediate steps
  2. Can be executed step-by-step
  3. Can repeat steps (e.g., to calculate multiple slices on the same input)

See the in-code documentation for more information.

Using the RShell to Interact with R

The RShell class allows interfacing with the R ecosystem installed on the host system. Please have a look at flowR's Engines for more information on alternatives (for example, the TreeSitterExecutor).

Important

Each RShell controls a new instance of the R interpreter, make sure to call RShell::close() when you are done.

You can start a new "session" simply by constructing a new object with new RShell().

However, there are several options that may be of interest (e.g., to automatically revive the shell in case of errors or to control the name location of the R process on the system).

With a shell object (let's call it shell), you can execute R code by using RShell::sendCommand, for example shell.sendCommand("1 + 1"). However, this does not return anything, so if you want to collect the output of your command, use RShell::sendCommandWithOutput instead.

Besides that, the command RShell::tryToInjectHomeLibPath may be of interest, as it enables all libraries available on the host system.

Generate Statistics (No longer a Focus of flowR)

Adding a New Feature to Extract

In this example, we construct a new feature to extract, with the name "example". Whenever this name appears, you may substitute this with whatever name fits your feature best (as long as the name is unique).

  1. Create a new file in src/statistics/features/supported
    Create the file example.ts, and add its export to the index.ts file in the same directory (if not done automatically).

  2. Create the basic structure
    To get a better feel of what a feature must have, let's look at the basic structure (of course, due to TypeScript syntax, there are other ways to achieve the same goal):

    const initialExampleInfo = {
        /* whatever start value is good for you */
        someCounter: 0
    }
    
    export type ExampleInfo = Writable<typeof initialExampleInfo>
    
    export const example: Feature<ExampleInfo> = {
     name:        'Example Feature',
     description: 'A longer example description',
    
     process(existing: ExampleInfo, input: FeatureProcessorInput): ExampleInfo {
       /* perform analysis on the input */
       return existing
     },
    
     initialValue: initialExampleInfo
    }

    The initialExampleInfo type holds the initial values for each counter that you want to maintain during the feature extraction (they will usually be initialized with 0). The resulting ExampleInfo type holds the structure of the data that is to be counted. Due to the vast amount of data processed, information like the name and location of a function call is not stored here, but instead written to disk (see below).

    Every new feature must be of the Feature<Info> type, with Info referring to a FeatureInfo (like ExampleInfo in this example). Next to a name and a description, each Feature must provide:

    • a processor that extracts the information from the input, adding it to the existing information.
    • a function returning the initial value of the information (in this case, initialExampleInfo).
  3. Add it to the feature-mapping
    Now, in the feature.ts file in src/statistics/features, add your feature to the ALL_FEATURES object.

Now, we want to extract something. For the example feature created in the previous steps, we choose to count the amount of COMMENT tokens. So we define a corresponding XPath query:

const commentQuery: Query = xpath.parse('//COMMENT')

Within our feature's process function, running the query is as simple as:

const comments = commentQuery.select({ node: input.parsedRAst })

Now we could do a lot of further processing, but for simplicity, we only record every comment found this way:

appendStatisticsFile(example.name, 'comments', comments, input.filepath)

We use example.name to avoid duplication with the name that we’ve assigned to the feature. It corresponds to the name of the folder in the statistics output. 'comments' refers to a freely chosen (but unique) name, that will be used as the name for the output file within the folder. The comments variable holds the result of the query, which is an array of nodes. Finally, we pass the filepath of the file that was analyzed (if known), so that it can be added to the statistics file (as additional information).

💬 Communicating with the Server

As explained in the Overview, you can simply run the TCP server by adding the --server flag (and, due to the interactive mode, exit with the conventional CTRL+C). Currently, every connection is handled by the same underlying RShell - so the server is not designed to handle many clients at a time. Additionally, the server is not well guarded against attacks (e.g., you can theoretically spawn an arbitrary number of RShell sessions on the target machine).

Every message has to be given in a single line (i.e., without a newline in-between) and end with a newline character. Nevertheless, we will pretty-print example given in the following segments for the ease of reading.

Note

The default --server uses a simple TCP connection. If you want flowR to expose a WebSocket server instead, add the --ws flag (i.e., --server --ws) when starting flowR from the command line.

  • Hello Message (hello)
    View Details. The server informs the client about the successful connection and provides Meta-Information.
    sequenceDiagram
        autonumber
        participant Client
        participant Server
    
        
        Client-->Server: connects
        Server->>Client: hello
    	
    
    Loading

    After launching flowR, for example, with docker run -it --rm eagleoutice/flowr --server (🐳️), simply connecting should present you with a hello message, that amongst others should reveal the versions of flowR and R, using the semver 2.0 versioning scheme. The message looks like this:

    {
      "type": "hello",
      "clientName": "client-0",
      "versions": {
        "flowr": "2.9.12",
        "r": "4.5.0",
        "engine": "r-shell"
      }
    }

    There are currently a few messages that you can send after the hello message. If you want to slice a piece of R code you first have to send an analysis request, so that you can send one or multiple slice requests afterward. Requests for the REPL are independent of that.


    Message schema (hello)

    For the definition of the hello message, please see it's implementation at ./src/cli/repl/server/messages/message-hello.ts.

    • [required] (object)
      • type [required] The type of the hello message. (string) Only allows: 'hello'
      • id [forbidden] The id of the message is always undefined (as it is the initial message and not requested). (any)
      • clientName [required] A unique name that is assigned to each client. It has no semantic meaning and is only used/useful for debugging. (string)
      • versions [required] (object)
        • flowr [required] The version of the flowr server running in semver format. (string)
        • r [required] The version of the underlying R shell running in semver format. (string)
        • engine [required] The parser backend that is used to parse the R code. (string)

  • Analysis Message (request-file-analysis)
    View Details. The server builds the dataflow graph for a given input file (or a set of files).
    sequenceDiagram
        autonumber
        participant Client
        participant Server
    
        
        Client->>+Server: request-file-analysis
        alt
            Server-->>Client: response-file-analysis
        else
            Server-->>Client: error
        end
        deactivate  Server
    	
    
    Loading

    The request allows the server to analyze a file and prepare it for slicing. The message can contain a filetoken, which is used to identify the file in later slice or query requests (if you do not add one, the request will not be stored and therefore, it is not available for subsequent requests).

    Please note!
    If you want to send and process a lot of analysis requests, but do not want to slice them, please do not pass the filetoken field. This will save the server a lot of memory allocation.

    Furthermore, the request must contain either a content field to directly pass the file's content or a filepath field which contains the path to the file (this path must be accessible for the server to be useful). If you add the id field, the answer will use the same id so you can match requests and the corresponding answers. See the implementation of the request-file-analysis message for more information.

    Example of the request-file-analysis Message

    Note: even though we pretty-print these messages, they are sent as a single line, ending with a newline.

    The following lists all messages that were sent and received in case you want to reproduce the scenario:

    1. hello (response)
      Show Details

      The first message is always a hello message.

      {
        "type": "hello",
        "clientName": "client-0",
        "versions": {
          "flowr": "2.9.12",
          "r": "4.5.0",
          "engine": "r-shell"
        }
      }
    2. request-file-analysis (request)
      Show Details

      Let's suppose you simply want to analyze the following script:

      x <- 1
      x + 1

      For this, you can send the following request:

      {
        "type": "request-file-analysis",
        "id": "1",
        "filetoken": "x",
        "content": "x <- 1\nx + 1"
      }
    3. response-file-analysis (response)
      Show Details

      The results field of the response effectively contains three keys of importance:

      • parse: which contains 1:1 the parse result in CSV format that we received from the RShell (i.e., the AST produced by the parser of the R interpreter).
      • normalize: which contains the normalized AST, including ids (see the info field and the Normalized AST wiki page).
      • dataflow: especially important is the graph field which contains the dataflow graph as a set of root vertices (see the Dataflow Graph wiki page).

      As the code is pretty long, we inhibit pretty printing and syntax highlighting (JSON, hiding built-in):

      {"type":"response-file-analysis","format":"json","id":"1","results":{"parse":{"files":[{"parsed":"[1,1,1,6,7,0,\"expr\",false,\"x <- 1\"],[1,1,1,1,1,3,\"SYMBOL\",true,\"x\"],[1,1,1,1,3,7,\"expr\",false,\"x\"],[1,3,1,4,2,7,\"LEFT_ASSIGN\",true,\"<-\"],[1,6,1,6,4,5,\"NUM_CONST\",true,\"1\"],[1,6,1,6,5,7,\"expr\",false,\"1\"],[2,1,2,5,16,0,\"expr\",false,\"x + 1\"],[2,1,2,1,10,12,\"SYMBOL\",true,\"x\"],[2,1,2,1,12,16,\"expr\",false,\"x\"],[2,3,2,3,11,16,\"'+'\",true,\"+\"],[2,5,2,5,13,14,\"NUM_CONST\",true,\"1\"],[2,5,2,5,14,16,\"expr\",false,\"1\"]","filePath":"/tmp/tmp-8767-xFkzuuvA2SUt-.R"}],".meta":{"timing":2}},"normalize":{"ast":{"type":"RProject","files":[{"root":{"type":"RExpressionList","children":[{"type":"RBinaryOp","location":[1,3,1,4],"lhs":{"type":"RSymbol","location":[1,1,1,1],"content":"x","lexeme":"x","info":{"fullRange":[1,1,1,1],"adToks":[],"id":0,"parent":2,"role":"bin-l","index":0,"nesting":0,"file":"/tmp/tmp-8767-xFkzuuvA2SUt-.R"}},"rhs":{"location":[1,6,1,6],"lexeme":"1","info":{"fullRange":[1,6,1,6],"adToks":[],"id":1,"parent":2,"role":"bin-r","index":1,"nesting":0,"file":"/tmp/tmp-8767-xFkzuuvA2SUt-.R"},"type":"RNumber","content":{"num":1,"complexNumber":false,"markedAsInt":false}},"operator":"<-","lexeme":"<-","info":{"fullRange":[1,1,1,6],"adToks":[],"id":2,"parent":6,"nesting":0,"file":"/tmp/tmp-8767-xFkzuuvA2SUt-.R","index":0,"role":"el-c"}},{"type":"RBinaryOp","location":[2,3,2,3],"lhs":{"type":"RSymbol","location":[2,1,2,1],"content":"x","lexeme":"x","info":{"fullRange":[2,1,2,1],"adToks":[],"id":3,"parent":5,"role":"bin-l","index":0,"nesting":0,"file":"/tmp/tmp-8767-xFkzuuvA2SUt-.R"}},"rhs":{"location":[2,5,2,5],"lexeme":"1","info":{"fullRange":[2,5,2,5],"adToks":[],"id":4,"parent":5,"role":"bin-r","index":1,"nesting":0,"file":"/tmp/tmp-8767-xFkzuuvA2SUt-.R"},"type":"RNumber","content":{"num":1,"complexNumber":false,"markedAsInt":false}},"operator":"+","lexeme":"+","info":{"fullRange":[2,1,2,5],"adToks":[],"id":5,"parent":6,"nesting":0,"file":"/tmp/tmp-8767-xFkzuuvA2SUt-.R","index":1,"role":"el-c"}}],"info":{"adToks":[],"id":6,"nesting":0,"file":"/tmp/tmp-8767-xFkzuuvA2SUt-.R","role":"root","index":0}},"filePath":"/tmp/tmp-8767-xFkzuuvA2SUt-.R"}],"info":{"id":7}},".meta":{"timing":0}},"dataflow":{"unknownReferences":[],"in":[{"nodeId":2,"name":"<-","type":2},{"nodeId":5,"name":"+","type":2}],"out":[{"nodeId":0,"name":"x","type":4,"definedAt":2,"value":[1]}],"environment":{"current":{"id":1914,"parent":"<BuiltInEnvironment>","memory":[["x",[{"nodeId":0,"name":"x","type":4,"definedAt":2,"value":[1]}]]]},"level":0},"graph":{"rootVertices":[1,0,2,3,4,5],"vertexInformation":[[1,{"tag":"value","id":1}],[0,{"tag":"vdef","id":0}],[2,{"tag":"fcall","id":2,"name":"<-","onlyBuiltin":true,"args":[{"nodeId":0,"type":32},{"nodeId":1,"type":32}],"origin":["builtin:assignment"]}],[3,{"tag":"use","id":3}],[4,{"tag":"value","id":4}],[5,{"tag":"fcall","id":5,"name":"+","onlyBuiltin":true,"args":[{"nodeId":3,"type":32},{"nodeId":4,"type":32}],"origin":["builtin:default"]}]],"edgeInformation":[[2,[[1,{"types":65}],[0,{"types":72}],["built-in:<-",{"types":5}]]],[0,[[1,{"types":2}],[2,{"types":2}]]],[3,[[0,{"types":1}]]],[5,[[3,{"types":65}],[4,{"types":65}],["built-in:+",{"types":5}]]]],"_unknownSideEffects":[]},"entryPoint":2,"exitPoints":[{"type":0,"nodeId":5}],"hooks":[],".meta":{"timing":0}}}}
      

    The complete round-trip took 7.7 ms (including time required to validate the messages, start, and stop the internal mock server).

    You receive an error if, for whatever reason, the analysis fails (e.g., the message or code you sent contained syntax errors). It contains a human-readable description why the analysis failed (see the error message implementation for more details).

    Example Error Message

    Note: even though we pretty-print these messages, they are sent as a single line, ending with a newline.

    The following lists all messages that were sent and received in case you want to reproduce the scenario:

    1. hello (response)
      Show Details

      The first message is always a hello message.

      {
        "type": "hello",
        "clientName": "client-0",
        "versions": {
          "flowr": "2.9.12",
          "r": "4.5.0",
          "engine": "r-shell"
        }
      }
    2. request-file-analysis (request)
      Show Details
      {
        "type": "request-file-analysis",
        "id": "1",
        "filename": "sample.R",
        "content": "x <-"
      }
    3. error (response)
      Show Details
      {
        "id": "1",
        "type": "error",
        "fatal": false,
        "reason": "Error while analyzing file sample.R: GuardError: unable to parse R code (see the log for more information) for request {\"request\":\"text\",\"content\":\"x <-\"}}\n Report a Bug: https://github.com/flowr-analysis/flowr/issues/new?body=%3C!%2D%2D%20Please%20describe%20your%20issue%20in%20more%20detail%20below!%20%2D%2D%3E%0A%0A%0A%3C!%2D%2D%20Automatically%20generated%20issue%20metadata%2C%20please%20do%20not%20edit%20or%20delete%20content%20below%20this%20line%20%2D%2D%3E%0A%2D%2D%2D%0A%0AflowR%20version%3A%202.9.12%0Anode%20version%3A%20v25.6.1%0Anode%20arch%3A%20x64%0Anode%20platform%3A%20linux%0Amessage%3A%20%60unable%20to%20parse%20R%20code%20%28see%20the%20log%20for%20more%20information%29%20for%20request%20%7B%22request%22%3A%22text%22%2C%22content%22%3A%22x%20%3C%2D%22%7D%7D%60%0Astack%20trace%3A%0A%60%60%60%0A%20%20%20%20at%20guard%20%28%3C%3E%2Fsrc%2Futil%2Fassert.ts%3A128%3A9%29%0A%20%20%20%20at%20guardRetrievedOutput%20%28%3C%3E%2Fsrc%2Fr%2Dbridge%2Fretriever.ts%3A221%3A7%29%0A%20%20%20%20at%20%2Fhome%2Frunner%2Fwork%2Fflowr%2Fflowr%2Fsrc%2Fr%2Dbridge%2Fretriever.ts%3A182%3A4%0A%20%20%20%20at%20processTicksAndRejections%20%28node%3Ainternal%2Fprocess%2Ftask_queues%3A104%3A5%29%0A%20%20%20%20at%20async%20Object.parseRequests%20%5Bas%20processor%5D%20%28%3C%3E%2Fsrc%2Fr%2Dbridge%2Fparser.ts%3A104%3A19%29%0A%20%20%20%20at%20async%20PipelineExecutor.nextStep%20%28%3C%3E%2Fsrc%2Fcore%2Fpipeline%2Dexecutor.ts%3A192%3A25%29%0A%20%20%20%20at%20async%20FlowrAnalyzerCache.runTapeUntil%20%28%3C%3E%2Fsrc%2Fproject%2Fcache%2Fflowr%2Danalyzer%2Dcache.ts%3A93%3A4%29%0A%20%20%20%20at%20async%20FlowRServerConnection.sendFileAnalysisResponse%20%28%3C%3E%2Fsrc%2Fcli%2Frepl%2Fserver%2Fconnection.ts%3A163%3A52%29%0A%60%60%60%0A%0A%2D%2D%2D%0A%09"
      }

    The complete round-trip took 6.3 ms (including time required to validate the messages, start, and stop the internal mock server).

     

    Including the Control Flow Graph

    While flowR does (for the time being) not use an explicit control flow graph but instead relies on control-dependency edges within the dataflow graph, the respective structure can still be exposed using the server (note that, as this feature is not needed within flowR, it is tested significantly less - so please create a new issue for any bug you may encounter). For this, the analysis request may add cfg: true to its list of options.

    Requesting a Control Flow Graph

    Note: even though we pretty-print these messages, they are sent as a single line, ending with a newline.

    The following lists all messages that were sent and received in case you want to reproduce the scenario:

    1. hello (response)
      Show Details

      The first message is always a hello message.

      {
        "type": "hello",
        "clientName": "client-0",
        "versions": {
          "flowr": "2.9.12",
          "r": "4.5.0",
          "engine": "r-shell"
        }
      }
    2. request-file-analysis (request)
      Show Details
      {
        "type": "request-file-analysis",
        "id": "1",
        "filetoken": "x",
        "content": "if(unknown > 0) { x <- 2 } else { x <- 5 }\nfor(i in 1:x) { print(x); print(i) }",
        "cfg": true
      }
    3. response-file-analysis (response)
      Show Details

      The response looks basically the same as a response sent without the cfg flag. However, additionally it contains a cfg field. If you are interested in a visual representation of the control flow graph, see the visualization with mermaid.

      As the code is pretty long, we inhibit pretty printing and syntax highlighting (JSON, hiding built-in):

      {"type":"response-file-analysis","format":"json","id":"1","cfg":{"returns":[],"entryPoints":[32],"exitPoints":["32-e"],"breaks":[],"nexts":[],"graph":{"roots":[32,15,"15-e",0,1,2,"2-e",8,5,6,7,"7-e","8-e",14,11,12,13,"13-e","14-e",16,31,17,18,19,"19-e",30,22,25,"25-e",24,23,"24-e",26,29,"29-e",28,27,"28-e","30-e","31-e","32-e"],"vtxInfos":[[32,[2,32,null,["32-e"]]],[15,[1,15,["2-e"],["15-e"]]],["15-e","15-e"],[0,[2,0]],[1,[2,1]],[2,[2,2,null,["2-e"]]],["2-e","2-e"],[8,[2,8,null,["8-e"]]],[5,[2,5]],[6,[2,6]],[7,[2,7,null,["7-e"]]],["7-e","7-e"],["8-e","8-e"],[14,[2,14,null,["14-e"]]],[11,[2,11]],[12,[2,12]],[13,[2,13,null,["13-e"]]],["13-e","13-e"],["14-e","14-e"],[16,[2,16]],[31,[1,31,[16],["31-e"]]],[17,[2,17]],[18,[2,18]],[19,[2,19,null,["19-e"]]],["19-e","19-e"],[30,[2,30,null,["30-e"]]],[22,[2,22]],[25,[1,25,[22],["25-e"]]],["25-e","25-e"],[24,[2,24,[24],["24-e"]]],[23,[2,23]],["24-e","24-e"],[26,[2,26]],[29,[1,29,[26],["29-e"]]],["29-e","29-e"],[28,[2,28,[28],["28-e"]]],[27,[2,27]],["28-e","28-e"],["30-e","30-e"],["31-e","31-e"],["32-e","32-e"]],"bbChildren":[],"edgeInfos":[[15,[[32,0]]],[1,[[0,0]]],[0,[[2,0]]],["2-e",[[1,0]]],[7,[[8,0]]],[6,[[5,0]]],[5,[[7,0]]],["7-e",[[6,0]]],["8-e",[["7-e",0]]],[13,[[14,0]]],[12,[[11,0]]],[11,[[13,0]]],["13-e",[[12,0]]],["14-e",[["13-e",0]]],[8,[["2-e",[15,"TRUE"]]]],[14,[["2-e",[15,"FALSE"]]]],[2,[[15,0]]],["15-e",[["8-e",0],["14-e",0]]],[31,[["15-e",0],["30-e",0]]],[18,[[17,0]]],[17,[[19,0]]],["19-e",[[18,0]]],[25,[[30,0]]],[22,[[25,0]]],[23,[[24,0]]],["24-e",[[23,0]]],[24,[[22,0]]],["25-e",[["24-e",0]]],[29,[["25-e",0]]],[26,[[29,0]]],[27,[[28,0]]],["28-e",[[27,0]]],[28,[[26,0]]],["29-e",[["28-e",0]]],["30-e",[["29-e",0]]],[19,[[31,0]]],[16,[["19-e",0]]],[30,[[16,[31,"TRUE"]]]],["31-e",[[16,[31,"FALSE"]]]],["32-e",[["31-e",0]]]],"revEdgeInfos":[[32,[[15,0]]],[0,[[1,0]]],[2,[[0,0]]],[1,[["2-e",0]]],[8,[[7,0]]],[5,[[6,0]]],[7,[[5,0]]],[6,[["7-e",0]]],["7-e",[["8-e",0]]],[14,[[13,0]]],[11,[[12,0]]],[13,[[11,0]]],[12,[["13-e",0]]],["13-e",[["14-e",0]]],["2-e",[[8,[15,"TRUE"]],[14,[15,"FALSE"]]]],[15,[[2,0]]],["8-e",[["15-e",0]]],["14-e",[["15-e",0]]],["15-e",[[31,0]]],[17,[[18,0]]],[19,[[17,0]]],[18,[["19-e",0]]],[30,[[25,0]]],[25,[[22,0]]],[24,[[23,0]]],[23,[["24-e",0]]],[22,[[24,0]]],["24-e",[["25-e",0]]],["25-e",[[29,0]]],[29,[[26,0]]],[28,[[27,0]]],[27,[["28-e",0]]],[26,[[28,0]]],["28-e",[["29-e",0]]],["29-e",[["30-e",0]]],[31,[[19,0]]],["19-e",[[16,0]]],[16,[[30,[31,"TRUE"]],["31-e",[31,"FALSE"]]]],["30-e",[[31,0]]],["31-e",[["32-e",0]]]],"_mayBB":false}},"results":{"parse":{"files":[{"parsed":"[1,1,1,42,38,0,\"expr\",false,\"if(unknown > 0) { x <- 2 } else { x <- 5 }\"],[1,1,1,2,1,38,\"IF\",true,\"if\"],[1,3,1,3,2,38,\"'('\",true,\"(\"],[1,4,1,14,9,38,\"expr\",false,\"unknown > 0\"],[1,4,1,10,3,5,\"SYMBOL\",true,\"unknown\"],[1,4,1,10,5,9,\"expr\",false,\"unknown\"],[1,12,1,12,4,9,\"GT\",true,\">\"],[1,14,1,14,6,7,\"NUM_CONST\",true,\"0\"],[1,14,1,14,7,9,\"expr\",false,\"0\"],[1,15,1,15,8,38,\"')'\",true,\")\"],[1,17,1,26,22,38,\"expr\",false,\"{ x <- 2 }\"],[1,17,1,17,12,22,\"'{'\",true,\"{\"],[1,19,1,24,19,22,\"expr\",false,\"x <- 2\"],[1,19,1,19,13,15,\"SYMBOL\",true,\"x\"],[1,19,1,19,15,19,\"expr\",false,\"x\"],[1,21,1,22,14,19,\"LEFT_ASSIGN\",true,\"<-\"],[1,24,1,24,16,17,\"NUM_CONST\",true,\"2\"],[1,24,1,24,17,19,\"expr\",false,\"2\"],[1,26,1,26,18,22,\"'}'\",true,\"}\"],[1,28,1,31,23,38,\"ELSE\",true,\"else\"],[1,33,1,42,35,38,\"expr\",false,\"{ x <- 5 }\"],[1,33,1,33,25,35,\"'{'\",true,\"{\"],[1,35,1,40,32,35,\"expr\",false,\"x <- 5\"],[1,35,1,35,26,28,\"SYMBOL\",true,\"x\"],[1,35,1,35,28,32,\"expr\",false,\"x\"],[1,37,1,38,27,32,\"LEFT_ASSIGN\",true,\"<-\"],[1,40,1,40,29,30,\"NUM_CONST\",true,\"5\"],[1,40,1,40,30,32,\"expr\",false,\"5\"],[1,42,1,42,31,35,\"'}'\",true,\"}\"],[2,1,2,36,84,0,\"expr\",false,\"for(i in 1:x) { print(x); print(i) }\"],[2,1,2,3,41,84,\"FOR\",true,\"for\"],[2,4,2,13,53,84,\"forcond\",false,\"(i in 1:x)\"],[2,4,2,4,42,53,\"'('\",true,\"(\"],[2,5,2,5,43,53,\"SYMBOL\",true,\"i\"],[2,7,2,8,44,53,\"IN\",true,\"in\"],[2,10,2,12,51,53,\"expr\",false,\"1:x\"],[2,10,2,10,45,46,\"NUM_CONST\",true,\"1\"],[2,10,2,10,46,51,\"expr\",false,\"1\"],[2,11,2,11,47,51,\"':'\",true,\":\"],[2,12,2,12,48,50,\"SYMBOL\",true,\"x\"],[2,12,2,12,50,51,\"expr\",false,\"x\"],[2,13,2,13,49,53,\"')'\",true,\")\"],[2,15,2,36,81,84,\"expr\",false,\"{ print(x); print(i) }\"],[2,15,2,15,54,81,\"'{'\",true,\"{\"],[2,17,2,24,64,81,\"expr\",false,\"print(x)\"],[2,17,2,21,55,57,\"SYMBOL_FUNCTION_CALL\",true,\"print\"],[2,17,2,21,57,64,\"expr\",false,\"print\"],[2,22,2,22,56,64,\"'('\",true,\"(\"],[2,23,2,23,58,60,\"SYMBOL\",true,\"x\"],[2,23,2,23,60,64,\"expr\",false,\"x\"],[2,24,2,24,59,64,\"')'\",true,\")\"],[2,25,2,25,65,81,\"';'\",true,\";\"],[2,27,2,34,77,81,\"expr\",false,\"print(i)\"],[2,27,2,31,68,70,\"SYMBOL_FUNCTION_CALL\",true,\"print\"],[2,27,2,31,70,77,\"expr\",false,\"print\"],[2,32,2,32,69,77,\"'('\",true,\"(\"],[2,33,2,33,71,73,\"SYMBOL\",true,\"i\"],[2,33,2,33,73,77,\"expr\",false,\"i\"],[2,34,2,34,72,77,\"')'\",true,\")\"],[2,36,2,36,78,81,\"'}'\",true,\"}\"]","filePath":"/tmp/tmp-8767-oirGJhTq7l4I-.R"}],".meta":{"timing":2}},"normalize":{"ast":{"type":"RProject","files":[{"root":{"type":"RExpressionList","children":[{"type":"RIfThenElse","condition":{"type":"RBinaryOp","location":[1,12,1,12],"lhs":{"type":"RSymbol","location":[1,4,1,10],"content":"unknown","lexeme":"unknown","info":{"fullRange":[1,4,1,10],"adToks":[],"id":0,"parent":2,"role":"bin-l","index":0,"nesting":1,"file":"/tmp/tmp-8767-oirGJhTq7l4I-.R"}},"rhs":{"location":[1,14,1,14],"lexeme":"0","info":{"fullRange":[1,14,1,14],"adToks":[],"id":1,"parent":2,"role":"bin-r","index":1,"nesting":1,"file":"/tmp/tmp-8767-oirGJhTq7l4I-.R"},"type":"RNumber","content":{"num":0,"complexNumber":false,"markedAsInt":false}},"operator":">","lexeme":">","info":{"fullRange":[1,4,1,14],"adToks":[],"id":2,"parent":15,"nesting":1,"file":"/tmp/tmp-8767-oirGJhTq7l4I-.R","role":"if-c"}},"then":{"type":"RExpressionList","children":[{"type":"RBinaryOp","location":[1,21,1,22],"lhs":{"type":"RSymbol","location":[1,19,1,19],"content":"x","lexeme":"x","info":{"fullRange":[1,19,1,19],"adToks":[],"id":5,"parent":7,"role":"bin-l","index":0,"nesting":1,"file":"/tmp/tmp-8767-oirGJhTq7l4I-.R"}},"rhs":{"location":[1,24,1,24],"lexeme":"2","info":{"fullRange":[1,24,1,24],"adToks":[],"id":6,"parent":7,"role":"bin-r","index":1,"nesting":1,"file":"/tmp/tmp-8767-oirGJhTq7l4I-.R"},"type":"RNumber","content":{"num":2,"complexNumber":false,"markedAsInt":false}},"operator":"<-","lexeme":"<-","info":{"fullRange":[1,19,1,24],"adToks":[],"id":7,"parent":8,"nesting":1,"file":"/tmp/tmp-8767-oirGJhTq7l4I-.R","index":0,"role":"el-c"}}],"grouping":[{"type":"RSymbol","location":[1,17,1,17],"content":"{","lexeme":"{","info":{"fullRange":[1,17,1,26],"adToks":[],"id":3,"role":"el-g","index":0,"nesting":1,"file":"/tmp/tmp-8767-oirGJhTq7l4I-.R"}},{"type":"RSymbol","location":[1,26,1,26],"content":"}","lexeme":"}","info":{"fullRange":[1,17,1,26],"adToks":[],"id":4,"role":"el-g","index":0,"nesting":1,"file":"/tmp/tmp-8767-oirGJhTq7l4I-.R"}}],"info":{"adToks":[],"id":8,"parent":15,"nesting":1,"file":"/tmp/tmp-8767-oirGJhTq7l4I-.R","index":1,"role":"if-then"}},"location":[1,1,1,2],"lexeme":"if","info":{"fullRange":[1,1,1,42],"adToks":[],"id":15,"parent":32,"nesting":1,"file":"/tmp/tmp-8767-oirGJhTq7l4I-.R","index":0,"role":"el-c"},"otherwise":{"type":"RExpressionList","children":[{"type":"RBinaryOp","location":[1,37,1,38],"lhs":{"type":"RSymbol","location":[1,35,1,35],"content":"x","lexeme":"x","info":{"fullRange":[1,35,1,35],"adToks":[],"id":11,"parent":13,"role":"bin-l","index":0,"nesting":1,"file":"/tmp/tmp-8767-oirGJhTq7l4I-.R"}},"rhs":{"location":[1,40,1,40],"lexeme":"5","info":{"fullRange":[1,40,1,40],"adToks":[],"id":12,"parent":13,"role":"bin-r","index":1,"nesting":1,"file":"/tmp/tmp-8767-oirGJhTq7l4I-.R"},"type":"RNumber","content":{"num":5,"complexNumber":false,"markedAsInt":false}},"operator":"<-","lexeme":"<-","info":{"fullRange":[1,35,1,40],"adToks":[],"id":13,"parent":14,"nesting":1,"file":"/tmp/tmp-8767-oirGJhTq7l4I-.R","index":0,"role":"el-c"}}],"grouping":[{"type":"RSymbol","location":[1,33,1,33],"content":"{","lexeme":"{","info":{"fullRange":[1,33,1,42],"adToks":[],"id":9,"role":"el-g","index":0,"nesting":1,"file":"/tmp/tmp-8767-oirGJhTq7l4I-.R"}},{"type":"RSymbol","location":[1,42,1,42],"content":"}","lexeme":"}","info":{"fullRange":[1,33,1,42],"adToks":[],"id":10,"role":"el-g","index":0,"nesting":1,"file":"/tmp/tmp-8767-oirGJhTq7l4I-.R"}}],"info":{"adToks":[],"id":14,"parent":15,"nesting":1,"file":"/tmp/tmp-8767-oirGJhTq7l4I-.R","index":2,"role":"if-other"}}},{"type":"RForLoop","variable":{"type":"RSymbol","location":[2,5,2,5],"content":"i","lexeme":"i","info":{"adToks":[],"id":16,"parent":31,"role":"for-var","index":0,"nesting":1,"file":"/tmp/tmp-8767-oirGJhTq7l4I-.R"}},"vector":{"type":"RBinaryOp","location":[2,11,2,11],"lhs":{"location":[2,10,2,10],"lexeme":"1","info":{"fullRange":[2,10,2,10],"adToks":[],"id":17,"parent":19,"role":"bin-l","index":0,"nesting":1,"file":"/tmp/tmp-8767-oirGJhTq7l4I-.R"},"type":"RNumber","content":{"num":1,"complexNumber":false,"markedAsInt":false}},"rhs":{"type":"RSymbol","location":[2,12,2,12],"content":"x","lexeme":"x","info":{"fullRange":[2,12,2,12],"adToks":[],"id":18,"parent":19,"role":"bin-r","index":1,"nesting":1,"file":"/tmp/tmp-8767-oirGJhTq7l4I-.R"}},"operator":":","lexeme":":","info":{"fullRange":[2,10,2,12],"adToks":[],"id":19,"parent":31,"nesting":1,"file":"/tmp/tmp-8767-oirGJhTq7l4I-.R","index":1,"role":"for-vec"}},"body":{"type":"RExpressionList","children":[{"type":"RFunctionCall","named":true,"location":[2,17,2,21],"lexeme":"print","functionName":{"type":"RSymbol","location":[2,17,2,21],"content":"print","lexeme":"print","info":{"fullRange":[2,17,2,24],"adToks":[],"id":22,"parent":25,"role":"call-name","index":0,"nesting":1,"file":"/tmp/tmp-8767-oirGJhTq7l4I-.R"}},"arguments":[{"type":"RArgument","location":[2,23,2,23],"lexeme":"x","value":{"type":"RSymbol","location":[2,23,2,23],"content":"x","lexeme":"x","info":{"fullRange":[2,23,2,23],"adToks":[],"id":23,"parent":24,"role":"arg-v","index":0,"nesting":1,"file":"/tmp/tmp-8767-oirGJhTq7l4I-.R"}},"info":{"fullRange":[2,23,2,23],"adToks":[],"id":24,"parent":25,"nesting":1,"file":"/tmp/tmp-8767-oirGJhTq7l4I-.R","index":1,"role":"call-arg"}}],"info":{"fullRange":[2,17,2,24],"adToks":[],"id":25,"parent":30,"nesting":1,"file":"/tmp/tmp-8767-oirGJhTq7l4I-.R","index":0,"role":"el-c"}},{"type":"RFunctionCall","named":true,"location":[2,27,2,31],"lexeme":"print","functionName":{"type":"RSymbol","location":[2,27,2,31],"content":"print","lexeme":"print","info":{"fullRange":[2,27,2,34],"adToks":[],"id":26,"parent":29,"role":"call-name","index":0,"nesting":1,"file":"/tmp/tmp-8767-oirGJhTq7l4I-.R"}},"arguments":[{"type":"RArgument","location":[2,33,2,33],"lexeme":"i","value":{"type":"RSymbol","location":[2,33,2,33],"content":"i","lexeme":"i","info":{"fullRange":[2,33,2,33],"adToks":[],"id":27,"parent":28,"role":"arg-v","index":0,"nesting":1,"file":"/tmp/tmp-8767-oirGJhTq7l4I-.R"}},"info":{"fullRange":[2,33,2,33],"adToks":[],"id":28,"parent":29,"nesting":1,"file":"/tmp/tmp-8767-oirGJhTq7l4I-.R","index":1,"role":"call-arg"}}],"info":{"fullRange":[2,27,2,34],"adToks":[],"id":29,"parent":30,"nesting":1,"file":"/tmp/tmp-8767-oirGJhTq7l4I-.R","index":1,"role":"el-c"}}],"grouping":[{"type":"RSymbol","location":[2,15,2,15],"content":"{","lexeme":"{","info":{"fullRange":[2,15,2,36],"adToks":[],"id":20,"role":"el-g","index":0,"nesting":1,"file":"/tmp/tmp-8767-oirGJhTq7l4I-.R"}},{"type":"RSymbol","location":[2,36,2,36],"content":"}","lexeme":"}","info":{"fullRange":[2,15,2,36],"adToks":[],"id":21,"role":"el-g","index":0,"nesting":1,"file":"/tmp/tmp-8767-oirGJhTq7l4I-.R"}}],"info":{"adToks":[],"id":30,"parent":31,"nesting":1,"file":"/tmp/tmp-8767-oirGJhTq7l4I-.R","index":2,"role":"for-b"}},"lexeme":"for","info":{"fullRange":[2,1,2,36],"adToks":[],"id":31,"parent":32,"nesting":1,"file":"/tmp/tmp-8767-oirGJhTq7l4I-.R","index":1,"role":"el-c"},"location":[2,1,2,3]}],"info":{"adToks":[],"id":32,"nesting":0,"file":"/tmp/tmp-8767-oirGJhTq7l4I-.R","role":"root","index":0}},"filePath":"/tmp/tmp-8767-oirGJhTq7l4I-.R"}],"info":{"id":33}},".meta":{"timing":0}},"dataflow":{"unknownReferences":[],"in":[{"nodeId":15,"name":"if","type":2},{"nodeId":0,"name":"unknown","type":1},{"nodeId":2,"name":">","type":2},{"nodeId":7,"name":"<-","cds":[{"id":15,"when":true}],"type":2},{"nodeId":13,"name":"<-","cds":[{"id":15,"when":false}],"type":2},{"nodeId":8,"name":"{","cds":[{"id":15,"when":true}],"type":2},{"nodeId":14,"name":"{","cds":[{"id":15,"when":false}],"type":2},{"nodeId":31,"name":"for","type":2},{"nodeId":27,"name":"i","type":4},{"nodeId":19,"name":":","type":2},{"nodeId":25,"name":"print","type":2},{"nodeId":29,"name":"print","type":2}],"out":[{"nodeId":5,"name":"x","type":4,"definedAt":7,"cds":[{"id":15,"when":true}],"value":[6]},{"nodeId":11,"name":"x","type":4,"definedAt":13,"cds":[{"id":15,"when":true},{"id":15,"when":false}],"value":[12]},{"nodeId":16,"name":"i","type":1}],"environment":{"current":{"id":2000,"parent":"<BuiltInEnvironment>","memory":[["x",[{"nodeId":5,"name":"x","type":4,"definedAt":7,"cds":[{"id":15,"when":true},{"id":15,"when":false}],"value":[6]},{"nodeId":11,"name":"x","type":4,"definedAt":13,"cds":[{"id":15,"when":true},{"id":15,"when":false}],"value":[12]}]],["i",[{"nodeId":16,"name":"i","type":4,"definedAt":31}]]]},"level":0},"graph":{"rootVertices":[0,1,2,6,5,7,8,12,11,13,14,15,16,17,18,19,23,25,27,29,30,31],"vertexInformation":[[0,{"tag":"use","id":0}],[1,{"tag":"value","id":1}],[2,{"tag":"fcall","id":2,"name":">","onlyBuiltin":true,"args":[{"nodeId":0,"type":32},{"nodeId":1,"type":32}],"origin":["builtin:default"]}],[6,{"tag":"value","id":6}],[5,{"tag":"vdef","id":5,"cds":[{"id":15,"when":true}]}],[7,{"tag":"fcall","id":7,"name":"<-","onlyBuiltin":true,"cds":[{"id":15,"when":true}],"args":[{"nodeId":5,"type":32},{"nodeId":6,"type":32}],"origin":["builtin:assignment"]}],[8,{"tag":"fcall","id":8,"name":"{","onlyBuiltin":true,"cds":[{"id":15,"when":true}],"args":[{"nodeId":7,"type":32}],"origin":["builtin:expression-list"]}],[12,{"tag":"value","id":12}],[11,{"tag":"vdef","id":11,"cds":[{"id":15,"when":false}]}],[13,{"tag":"fcall","id":13,"name":"<-","onlyBuiltin":true,"cds":[{"id":15,"when":false}],"args":[{"nodeId":11,"type":32},{"nodeId":12,"type":32}],"origin":["builtin:assignment"]}],[14,{"tag":"fcall","id":14,"name":"{","onlyBuiltin":true,"cds":[{"id":15,"when":false}],"args":[{"nodeId":13,"type":32}],"origin":["builtin:expression-list"]}],[15,{"tag":"fcall","id":15,"name":"if","onlyBuiltin":true,"args":[{"nodeId":2,"type":32},{"nodeId":8,"type":32},{"nodeId":14,"type":32}],"origin":["builtin:if-then-else"]}],[16,{"tag":"vdef","id":16}],[17,{"tag":"value","id":17}],[18,{"tag":"use","id":18}],[19,{"tag":"fcall","id":19,"name":":","onlyBuiltin":true,"args":[{"nodeId":17,"type":32},{"nodeId":18,"type":32}],"origin":["builtin:default"]}],[23,{"tag":"use","id":23,"cds":[{"id":31,"when":true}]}],[25,{"tag":"fcall","id":25,"name":"print","onlyBuiltin":true,"cds":[{"id":31,"when":true}],"args":[{"nodeId":23,"type":32}],"origin":["builtin:default"]}],[27,{"tag":"use","id":27,"cds":[{"id":31,"when":true}]}],[29,{"tag":"fcall","id":29,"name":"print","onlyBuiltin":true,"cds":[{"id":31,"when":true}],"args":[{"nodeId":27,"type":32}],"origin":["builtin:default"]}],[30,{"tag":"fcall","id":30,"name":"{","onlyBuiltin":true,"cds":[{"id":31,"when":true}],"args":[{"nodeId":25,"type":32},{"nodeId":29,"type":32}],"origin":["builtin:expression-list"]}],[31,{"tag":"fcall","id":31,"name":"for","onlyBuiltin":true,"args":[{"nodeId":16,"type":32},{"nodeId":19,"type":32},{"nodeId":30,"type":32}],"origin":["builtin:for-loop"]}]],"edgeInformation":[[2,[[0,{"types":65}],[1,{"types":65}],["built-in:>",{"types":5}]]],[7,[[6,{"types":65}],[5,{"types":72}],["built-in:<-",{"types":5}]]],[5,[[6,{"types":2}],[7,{"types":2}]]],[8,[[7,{"types":72}],["built-in:{",{"types":5}]]],[15,[[8,{"types":72}],[14,{"types":72}],[2,{"types":65}],["built-in:if",{"types":5}]]],[13,[[12,{"types":65}],[11,{"types":72}],["built-in:<-",{"types":5}]]],[11,[[12,{"types":2}],[13,{"types":2}]]],[14,[[13,{"types":72}],["built-in:{",{"types":5}]]],[19,[[17,{"types":65}],[18,{"types":65}],["built-in::",{"types":5}]]],[18,[[5,{"types":1}],[11,{"types":1}]]],[25,[[23,{"types":73}],["built-in:print",{"types":5}]]],[23,[[5,{"types":1}],[11,{"types":1}]]],[29,[[27,{"types":73}],["built-in:print",{"types":5}]]],[27,[[16,{"types":1}]]],[30,[[25,{"types":64}],[29,{"types":72}],["built-in:{",{"types":5}]]],[16,[[19,{"types":2}]]],[31,[[16,{"types":64}],[19,{"types":65}],[30,{"types":320}],["built-in:for",{"types":5}]]]],"_unknownSideEffects":[{"id":25,"linkTo":{"type":"link-to-last-call","callName":{}}},{"id":29,"linkTo":{"type":"link-to-last-call","callName":{}}}]},"entryPoint":15,"exitPoints":[{"type":0,"nodeId":31}],"hooks":[],"cfgQuick":{"graph":{"roots":[32,15,"15-e",0,1,2,"2-e",8,5,6,7,"7-e","8-e",14,11,12,13,"13-e","14-e",16,31,17,18,19,"19-e",30,22,25,"25-e",24,23,"24-e",26,29,"29-e",28,27,"28-e","30-e","31-e","32-e"],"vtxInfos":[[32,[2,32,null,["32-e"]]],[15,[1,15,["2-e"],["15-e"]]],["15-e","15-e"],[0,[2,0]],[1,[2,1]],[2,[2,2,null,["2-e"]]],["2-e","2-e"],[8,[2,8,null,["8-e"]]],[5,[2,5]],[6,[2,6]],[7,[2,7,null,["7-e"]]],["7-e","7-e"],["8-e","8-e"],[14,[2,14,null,["14-e"]]],[11,[2,11]],[12,[2,12]],[13,[2,13,null,["13-e"]]],["13-e","13-e"],["14-e","14-e"],[16,[2,16]],[31,[1,31,[16],["31-e"]]],[17,[2,17]],[18,[2,18]],[19,[2,19,null,["19-e"]]],["19-e","19-e"],[30,[2,30,null,["30-e"]]],[22,[2,22]],[25,[1,25,[22],["25-e"]]],["25-e","25-e"],[24,[2,24,[24],["24-e"]]],[23,[2,23]],["24-e","24-e"],[26,[2,26]],[29,[1,29,[26],["29-e"]]],["29-e","29-e"],[28,[2,28,[28],["28-e"]]],[27,[2,27]],["28-e","28-e"],["30-e","30-e"],["31-e","31-e"],["32-e","32-e"]],"bbChildren":[],"edgeInfos":[[15,[[32,0]]],[1,[[0,0]]],[0,[[2,0]]],["2-e",[[1,0]]],[7,[[8,0]]],[6,[[5,0]]],[5,[[7,0]]],["7-e",[[6,0]]],["8-e",[["7-e",0]]],[13,[[14,0]]],[12,[[11,0]]],[11,[[13,0]]],["13-e",[[12,0]]],["14-e",[["13-e",0]]],[8,[["2-e",[15,"TRUE"]]]],[14,[["2-e",[15,"FALSE"]]]],[2,[[15,0]]],["15-e",[["8-e",0],["14-e",0]]],[31,[["15-e",0],["30-e",0]]],[18,[[17,0]]],[17,[[19,0]]],["19-e",[[18,0]]],[25,[[30,0]]],[22,[[25,0]]],[23,[[24,0]]],["24-e",[[23,0]]],[24,[[22,0]]],["25-e",[["24-e",0]]],[29,[["25-e",0]]],[26,[[29,0]]],[27,[[28,0]]],["28-e",[[27,0]]],[28,[[26,0]]],["29-e",[["28-e",0]]],["30-e",[["29-e",0]]],[19,[[31,0]]],[16,[["19-e",0]]],[30,[[16,[31,"TRUE"]]]],["31-e",[[16,[31,"FALSE"]]]],["32-e",[["31-e",0]]]],"revEdgeInfos":[[32,[[15,0]]],[0,[[1,0]]],[2,[[0,0]]],[1,[["2-e",0]]],[8,[[7,0]]],[5,[[6,0]]],[7,[[5,0]]],[6,[["7-e",0]]],["7-e",[["8-e",0]]],[14,[[13,0]]],[11,[[12,0]]],[13,[[11,0]]],[12,[["13-e",0]]],["13-e",[["14-e",0]]],["2-e",[[8,[15,"TRUE"]],[14,[15,"FALSE"]]]],[15,[[2,0]]],["8-e",[["15-e",0]]],["14-e",[["15-e",0]]],["15-e",[[31,0]]],[17,[[18,0]]],[19,[[17,0]]],[18,[["19-e",0]]],[30,[[25,0]]],[25,[[22,0]]],[24,[[23,0]]],[23,[["24-e",0]]],[22,[[24,0]]],["24-e",[["25-e",0]]],["25-e",[[29,0]]],[29,[[26,0]]],[28,[[27,0]]],[27,[["28-e",0]]],[26,[[28,0]]],["28-e",[["29-e",0]]],["29-e",[["30-e",0]]],[31,[[19,0]]],["19-e",[[16,0]]],[16,[[30,[31,"TRUE"]],["31-e",[31,"FALSE"]]]],["30-e",[[31,0]]],["31-e",[["32-e",0]]]],"_mayBB":false},"breaks":[],"nexts":[],"returns":[],"exitPoints":["32-e"],"entryPoints":[32]},".meta":{"timing":1}}}}
      

    The complete round-trip took 7.0 ms (including time required to validate the messages, start, and stop the internal mock server).

     

    Retrieve the Output as RDF N-Quads

    The default response is formatted as JSON. However, by specifying format: "n-quads", you can retrieve the individual results (e.g., the Normalized AST), as RDF N-Quads. This works with and without the control flow graph as described above.

    Requesting RDF N-Quads

    Note: even though we pretty-print these messages, they are sent as a single line, ending with a newline.

    The following lists all messages that were sent and received in case you want to reproduce the scenario:

    1. hello (response)
      Show Details

      The first message is always a hello message.

      {
        "type": "hello",
        "clientName": "client-0",
        "versions": {
          "flowr": "2.9.12",
          "r": "4.5.0",
          "engine": "r-shell"
        }
      }
    2. request-file-analysis (request)
      Show Details
      {
        "type": "request-file-analysis",
        "id": "1",
        "filetoken": "x",
        "content": "x <- 1\nx + 1",
        "format": "n-quads",
        "cfg": true
      }
    3. response-file-analysis (response)
      Show Details

      Please note, that the base message format is still JSON. Only the individual results get converted. While the context is derived from the filename, we currently offer no way to customize other parts of the quads (please open a new issue if you require this).

      As the code is pretty long, we inhibit pretty printing and syntax highlighting (JSON, hiding built-in):

      {"type":"response-file-analysis","format":"n-quads","id":"1","cfg":"<https://uni-ulm.de/r-ast/unknown/0> <https://uni-ulm.de/r-ast/rootIds> \"6\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/0> <https://uni-ulm.de/r-ast/rootIds> \"0\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/0> <https://uni-ulm.de/r-ast/rootIds> \"1\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/0> <https://uni-ulm.de/r-ast/rootIds> \"2\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/0> <https://uni-ulm.de/r-ast/rootIds> \"2-e\" <unknown> .\n<https://uni-ulm.de/r-ast/unknown/0> <https://uni-ulm.de/r-ast/rootIds> \"3\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/0> <https://uni-ulm.de/r-ast/rootIds> \"4\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/0> <https://uni-ulm.de/r-ast/rootIds> \"5\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/0> <https://uni-ulm.de/r-ast/rootIds> \"5-e\" <unknown> .\n<https://uni-ulm.de/r-ast/unknown/0> <https://uni-ulm.de/r-ast/rootIds> \"6-e\" <unknown> .\n<https://uni-ulm.de/r-ast/unknown/0> <https://uni-ulm.de/r-ast/vertices> <https://uni-ulm.de/r-ast/unknown/1> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/1> <https://uni-ulm.de/r-ast/next> <https://uni-ulm.de/r-ast/unknown/2> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/1> <https://uni-ulm.de/r-ast/id> \"6\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/0> <https://uni-ulm.de/r-ast/vertices> <https://uni-ulm.de/r-ast/unknown/2> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/2> <https://uni-ulm.de/r-ast/next> <https://uni-ulm.de/r-ast/unknown/3> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/2> <https://uni-ulm.de/r-ast/id> \"0\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/0> <https://uni-ulm.de/r-ast/vertices> <https://uni-ulm.de/r-ast/unknown/3> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/3> <https://uni-ulm.de/r-ast/next> <https://uni-ulm.de/r-ast/unknown/4> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/3> <https://uni-ulm.de/r-ast/id> \"1\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/0> <https://uni-ulm.de/r-ast/vertices> <https://uni-ulm.de/r-ast/unknown/4> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/4> <https://uni-ulm.de/r-ast/next> <https://uni-ulm.de/r-ast/unknown/5> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/4> <https://uni-ulm.de/r-ast/id> \"2\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/0> <https://uni-ulm.de/r-ast/vertices> <https://uni-ulm.de/r-ast/unknown/5> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/5> <https://uni-ulm.de/r-ast/next> <https://uni-ulm.de/r-ast/unknown/6> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/5> <https://uni-ulm.de/r-ast/id> \"2-e\" <unknown> .\n<https://uni-ulm.de/r-ast/unknown/0> <https://uni-ulm.de/r-ast/vertices> <https://uni-ulm.de/r-ast/unknown/6> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/6> <https://uni-ulm.de/r-ast/next> <https://uni-ulm.de/r-ast/unknown/7> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/6> <https://uni-ulm.de/r-ast/id> \"3\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/0> <https://uni-ulm.de/r-ast/vertices> <https://uni-ulm.de/r-ast/unknown/7> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/7> <https://uni-ulm.de/r-ast/next> <https://uni-ulm.de/r-ast/unknown/8> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/7> <https://uni-ulm.de/r-ast/id> \"4\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/0> <https://uni-ulm.de/r-ast/vertices> <https://uni-ulm.de/r-ast/unknown/8> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/8> <https://uni-ulm.de/r-ast/next> <https://uni-ulm.de/r-ast/unknown/9> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/8> <https://uni-ulm.de/r-ast/id> \"5\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/0> <https://uni-ulm.de/r-ast/vertices> <https://uni-ulm.de/r-ast/unknown/9> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/9> <https://uni-ulm.de/r-ast/next> <https://uni-ulm.de/r-ast/unknown/10> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/9> <https://uni-ulm.de/r-ast/id> \"5-e\" <unknown> .\n<https://uni-ulm.de/r-ast/unknown/0> <https://uni-ulm.de/r-ast/vertices> <https://uni-ulm.de/r-ast/unknown/10> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/10> <https://uni-ulm.de/r-ast/id> \"6-e\" <unknown> .\n<https://uni-ulm.de/r-ast/unknown/0> <https://uni-ulm.de/r-ast/edges> <https://uni-ulm.de/r-ast/unknown/11> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/11> <https://uni-ulm.de/r-ast/next> <https://uni-ulm.de/r-ast/unknown/12> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/11> <https://uni-ulm.de/r-ast/from> \"2\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/11> <https://uni-ulm.de/r-ast/to> \"6\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/11> <https://uni-ulm.de/r-ast/type> \"0\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/0> <https://uni-ulm.de/r-ast/edges> <https://uni-ulm.de/r-ast/unknown/12> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/12> <https://uni-ulm.de/r-ast/next> <https://uni-ulm.de/r-ast/unknown/13> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/12> <https://uni-ulm.de/r-ast/from> \"1\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/12> <https://uni-ulm.de/r-ast/to> \"0\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/12> <https://uni-ulm.de/r-ast/type> \"0\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/0> <https://uni-ulm.de/r-ast/edges> <https://uni-ulm.de/r-ast/unknown/13> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/13> <https://uni-ulm.de/r-ast/next> <https://uni-ulm.de/r-ast/unknown/14> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/13> <https://uni-ulm.de/r-ast/from> \"0\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/13> <https://uni-ulm.de/r-ast/to> \"2\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/13> <https://uni-ulm.de/r-ast/type> \"0\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/0> <https://uni-ulm.de/r-ast/edges> <https://uni-ulm.de/r-ast/unknown/14> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/14> <https://uni-ulm.de/r-ast/next> <https://uni-ulm.de/r-ast/unknown/15> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/14> <https://uni-ulm.de/r-ast/from> \"2-e\" <unknown> .\n<https://uni-ulm.de/r-ast/unknown/14> <https://uni-ulm.de/r-ast/to> \"1\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/14> <https://uni-ulm.de/r-ast/type> \"0\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/0> <https://uni-ulm.de/r-ast/edges> <https://uni-ulm.de/r-ast/unknown/15> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/15> <https://uni-ulm.de/r-ast/next> <https://uni-ulm.de/r-ast/unknown/16> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/15> <https://uni-ulm.de/r-ast/from> \"5\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/15> <https://uni-ulm.de/r-ast/to> \"2-e\" <unknown> .\n<https://uni-ulm.de/r-ast/unknown/15> <https://uni-ulm.de/r-ast/type> \"0\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/0> <https://uni-ulm.de/r-ast/edges> <https://uni-ulm.de/r-ast/unknown/16> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/16> <https://uni-ulm.de/r-ast/next> <https://uni-ulm.de/r-ast/unknown/17> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/16> <https://uni-ulm.de/r-ast/from> \"4\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/16> <https://uni-ulm.de/r-ast/to> \"3\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/16> <https://uni-ulm.de/r-ast/type> \"0\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/0> <https://uni-ulm.de/r-ast/edges> <https://uni-ulm.de/r-ast/unknown/17> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/17> <https://uni-ulm.de/r-ast/next> <https://uni-ulm.de/r-ast/unknown/18> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/17> <https://uni-ulm.de/r-ast/from> \"3\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/17> <https://uni-ulm.de/r-ast/to> \"5\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/17> <https://uni-ulm.de/r-ast/type> \"0\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/0> <https://uni-ulm.de/r-ast/edges> <https://uni-ulm.de/r-ast/unknown/18> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/18> <https://uni-ulm.de/r-ast/next> <https://uni-ulm.de/r-ast/unknown/19> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/18> <https://uni-ulm.de/r-ast/from> \"5-e\" <unknown> .\n<https://uni-ulm.de/r-ast/unknown/18> <https://uni-ulm.de/r-ast/to> \"4\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/18> <https://uni-ulm.de/r-ast/type> \"0\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/0> <https://uni-ulm.de/r-ast/edges> <https://uni-ulm.de/r-ast/unknown/19> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/19> <https://uni-ulm.de/r-ast/from> \"6-e\" <unknown> .\n<https://uni-ulm.de/r-ast/unknown/19> <https://uni-ulm.de/r-ast/to> \"5-e\" <unknown> .\n<https://uni-ulm.de/r-ast/unknown/19> <https://uni-ulm.de/r-ast/type> \"0\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/0> <https://uni-ulm.de/r-ast/entryPoints> \"6\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/0> <https://uni-ulm.de/r-ast/exitPoints> \"6-e\" <unknown> .\n","results":{"parse":"<https://uni-ulm.de/r-ast/unknown/0> <https://uni-ulm.de/r-ast/token> \"exprlist\" <unknown> .\n<https://uni-ulm.de/r-ast/unknown/0> <https://uni-ulm.de/r-ast/text> \"\" <unknown> .\n<https://uni-ulm.de/r-ast/unknown/0> <https://uni-ulm.de/r-ast/id> \"0\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/0> <https://uni-ulm.de/r-ast/parent> \"0\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/0> <https://uni-ulm.de/r-ast/line1> \"1\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/0> <https://uni-ulm.de/r-ast/col1> \"1\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/0> <https://uni-ulm.de/r-ast/line2> \"2\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/0> <https://uni-ulm.de/r-ast/col2> \"5\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/0> <https://uni-ulm.de/r-ast/children> <https://uni-ulm.de/r-ast/unknown/1> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/1> <https://uni-ulm.de/r-ast/next> <https://uni-ulm.de/r-ast/unknown/2> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/1> <https://uni-ulm.de/r-ast/line1> \"1\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/1> <https://uni-ulm.de/r-ast/col1> \"1\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/1> <https://uni-ulm.de/r-ast/line2> \"1\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/1> <https://uni-ulm.de/r-ast/col2> \"6\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/1> <https://uni-ulm.de/r-ast/id> \"7\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/1> <https://uni-ulm.de/r-ast/parent> \"0\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/1> <https://uni-ulm.de/r-ast/token> \"expr\" <unknown> .\n<https://uni-ulm.de/r-ast/unknown/1> <https://uni-ulm.de/r-ast/terminal> \"false\"^^<http://www.w3.org/2001/XMLSchema#boolean> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/1> <https://uni-ulm.de/r-ast/text> \"x <- 1\" <unknown> .\n<https://uni-ulm.de/r-ast/unknown/1> <https://uni-ulm.de/r-ast/children> <https://uni-ulm.de/r-ast/unknown/3> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/3> <https://uni-ulm.de/r-ast/next> <https://uni-ulm.de/r-ast/unknown/4> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/3> <https://uni-ulm.de/r-ast/line1> \"1\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/3> <https://uni-ulm.de/r-ast/col1> \"1\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/3> <https://uni-ulm.de/r-ast/line2> \"1\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/3> <https://uni-ulm.de/r-ast/col2> \"1\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/3> <https://uni-ulm.de/r-ast/id> \"3\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/3> <https://uni-ulm.de/r-ast/parent> \"7\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/3> <https://uni-ulm.de/r-ast/token> \"expr\" <unknown> .\n<https://uni-ulm.de/r-ast/unknown/3> <https://uni-ulm.de/r-ast/terminal> \"false\"^^<http://www.w3.org/2001/XMLSchema#boolean> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/3> <https://uni-ulm.de/r-ast/text> \"x\" <unknown> .\n<https://uni-ulm.de/r-ast/unknown/3> <https://uni-ulm.de/r-ast/children> <https://uni-ulm.de/r-ast/unknown/5> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/5> <https://uni-ulm.de/r-ast/line1> \"1\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/5> <https://uni-ulm.de/r-ast/col1> \"1\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/5> <https://uni-ulm.de/r-ast/line2> \"1\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/5> <https://uni-ulm.de/r-ast/col2> \"1\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/5> <https://uni-ulm.de/r-ast/id> \"1\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/5> <https://uni-ulm.de/r-ast/parent> \"3\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/5> <https://uni-ulm.de/r-ast/token> \"SYMBOL\" <unknown> .\n<https://uni-ulm.de/r-ast/unknown/5> <https://uni-ulm.de/r-ast/terminal> \"true\"^^<http://www.w3.org/2001/XMLSchema#boolean> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/5> <https://uni-ulm.de/r-ast/text> \"x\" <unknown> .\n<https://uni-ulm.de/r-ast/unknown/1> <https://uni-ulm.de/r-ast/children> <https://uni-ulm.de/r-ast/unknown/4> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/4> <https://uni-ulm.de/r-ast/next> <https://uni-ulm.de/r-ast/unknown/6> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/4> <https://uni-ulm.de/r-ast/line1> \"1\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/4> <https://uni-ulm.de/r-ast/col1> \"3\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/4> <https://uni-ulm.de/r-ast/line2> \"1\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/4> <https://uni-ulm.de/r-ast/col2> \"4\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/4> <https://uni-ulm.de/r-ast/id> \"2\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/4> <https://uni-ulm.de/r-ast/parent> \"7\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/4> <https://uni-ulm.de/r-ast/token> \"LEFT_ASSIGN\" <unknown> .\n<https://uni-ulm.de/r-ast/unknown/4> <https://uni-ulm.de/r-ast/terminal> \"true\"^^<http://www.w3.org/2001/XMLSchema#boolean> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/4> <https://uni-ulm.de/r-ast/text> \"<-\" <unknown> .\n<https://uni-ulm.de/r-ast/unknown/1> <https://uni-ulm.de/r-ast/children> <https://uni-ulm.de/r-ast/unknown/6> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/6> <https://uni-ulm.de/r-ast/line1> \"1\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/6> <https://uni-ulm.de/r-ast/col1> \"6\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/6> <https://uni-ulm.de/r-ast/line2> \"1\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/6> <https://uni-ulm.de/r-ast/col2> \"6\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/6> <https://uni-ulm.de/r-ast/id> \"5\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/6> <https://uni-ulm.de/r-ast/parent> \"7\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/6> <https://uni-ulm.de/r-ast/token> \"expr\" <unknown> .\n<https://uni-ulm.de/r-ast/unknown/6> <https://uni-ulm.de/r-ast/terminal> \"false\"^^<http://www.w3.org/2001/XMLSchema#boolean> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/6> <https://uni-ulm.de/r-ast/text> \"1\" <unknown> .\n<https://uni-ulm.de/r-ast/unknown/6> <https://uni-ulm.de/r-ast/children> <https://uni-ulm.de/r-ast/unknown/7> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/7> <https://uni-ulm.de/r-ast/line1> \"1\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/7> <https://uni-ulm.de/r-ast/col1> \"6\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/7> <https://uni-ulm.de/r-ast/line2> \"1\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/7> <https://uni-ulm.de/r-ast/col2> \"6\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/7> <https://uni-ulm.de/r-ast/id> \"4\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/7> <https://uni-ulm.de/r-ast/parent> \"5\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/7> <https://uni-ulm.de/r-ast/token> \"NUM_CONST\" <unknown> .\n<https://uni-ulm.de/r-ast/unknown/7> <https://uni-ulm.de/r-ast/terminal> \"true\"^^<http://www.w3.org/2001/XMLSchema#boolean> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/7> <https://uni-ulm.de/r-ast/text> \"1\" <unknown> .\n<https://uni-ulm.de/r-ast/unknown/0> <https://uni-ulm.de/r-ast/children> <https://uni-ulm.de/r-ast/unknown/2> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/2> <https://uni-ulm.de/r-ast/line1> \"2\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/2> <https://uni-ulm.de/r-ast/col1> \"1\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/2> <https://uni-ulm.de/r-ast/line2> \"2\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/2> <https://uni-ulm.de/r-ast/col2> \"5\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/2> <https://uni-ulm.de/r-ast/id> \"16\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/2> <https://uni-ulm.de/r-ast/parent> \"0\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/2> <https://uni-ulm.de/r-ast/token> \"expr\" <unknown> .\n<https://uni-ulm.de/r-ast/unknown/2> <https://uni-ulm.de/r-ast/terminal> \"false\"^^<http://www.w3.org/2001/XMLSchema#boolean> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/2> <https://uni-ulm.de/r-ast/text> \"x + 1\" <unknown> .\n<https://uni-ulm.de/r-ast/unknown/2> <https://uni-ulm.de/r-ast/children> <https://uni-ulm.de/r-ast/unknown/8> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/8> <https://uni-ulm.de/r-ast/next> <https://uni-ulm.de/r-ast/unknown/9> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/8> <https://uni-ulm.de/r-ast/line1> \"2\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/8> <https://uni-ulm.de/r-ast/col1> \"1\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/8> <https://uni-ulm.de/r-ast/line2> \"2\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/8> <https://uni-ulm.de/r-ast/col2> \"1\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/8> <https://uni-ulm.de/r-ast/id> \"12\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/8> <https://uni-ulm.de/r-ast/parent> \"16\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/8> <https://uni-ulm.de/r-ast/token> \"expr\" <unknown> .\n<https://uni-ulm.de/r-ast/unknown/8> <https://uni-ulm.de/r-ast/terminal> \"false\"^^<http://www.w3.org/2001/XMLSchema#boolean> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/8> <https://uni-ulm.de/r-ast/text> \"x\" <unknown> .\n<https://uni-ulm.de/r-ast/unknown/8> <https://uni-ulm.de/r-ast/children> <https://uni-ulm.de/r-ast/unknown/10> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/10> <https://uni-ulm.de/r-ast/line1> \"2\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/10> <https://uni-ulm.de/r-ast/col1> \"1\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/10> <https://uni-ulm.de/r-ast/line2> \"2\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/10> <https://uni-ulm.de/r-ast/col2> \"1\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/10> <https://uni-ulm.de/r-ast/id> \"10\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/10> <https://uni-ulm.de/r-ast/parent> \"12\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/10> <https://uni-ulm.de/r-ast/token> \"SYMBOL\" <unknown> .\n<https://uni-ulm.de/r-ast/unknown/10> <https://uni-ulm.de/r-ast/terminal> \"true\"^^<http://www.w3.org/2001/XMLSchema#boolean> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/10> <https://uni-ulm.de/r-ast/text> \"x\" <unknown> .\n<https://uni-ulm.de/r-ast/unknown/2> <https://uni-ulm.de/r-ast/children> <https://uni-ulm.de/r-ast/unknown/9> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/9> <https://uni-ulm.de/r-ast/next> <https://uni-ulm.de/r-ast/unknown/11> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/9> <https://uni-ulm.de/r-ast/line1> \"2\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/9> <https://uni-ulm.de/r-ast/col1> \"3\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/9> <https://uni-ulm.de/r-ast/line2> \"2\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/9> <https://uni-ulm.de/r-ast/col2> \"3\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/9> <https://uni-ulm.de/r-ast/id> \"11\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/9> <https://uni-ulm.de/r-ast/parent> \"16\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/9> <https://uni-ulm.de/r-ast/token> \"+\" <unknown> .\n<https://uni-ulm.de/r-ast/unknown/9> <https://uni-ulm.de/r-ast/terminal> \"true\"^^<http://www.w3.org/2001/XMLSchema#boolean> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/9> <https://uni-ulm.de/r-ast/text> \"+\" <unknown> .\n<https://uni-ulm.de/r-ast/unknown/2> <https://uni-ulm.de/r-ast/children> <https://uni-ulm.de/r-ast/unknown/11> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/11> <https://uni-ulm.de/r-ast/line1> \"2\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/11> <https://uni-ulm.de/r-ast/col1> \"5\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/11> <https://uni-ulm.de/r-ast/line2> \"2\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/11> <https://uni-ulm.de/r-ast/col2> \"5\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/11> <https://uni-ulm.de/r-ast/id> \"14\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/11> <https://uni-ulm.de/r-ast/parent> \"16\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/11> <https://uni-ulm.de/r-ast/token> \"expr\" <unknown> .\n<https://uni-ulm.de/r-ast/unknown/11> <https://uni-ulm.de/r-ast/terminal> \"false\"^^<http://www.w3.org/2001/XMLSchema#boolean> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/11> <https://uni-ulm.de/r-ast/text> \"1\" <unknown> .\n<https://uni-ulm.de/r-ast/unknown/11> <https://uni-ulm.de/r-ast/children> <https://uni-ulm.de/r-ast/unknown/12> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/12> <https://uni-ulm.de/r-ast/line1> \"2\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/12> <https://uni-ulm.de/r-ast/col1> \"5\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/12> <https://uni-ulm.de/r-ast/line2> \"2\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/12> <https://uni-ulm.de/r-ast/col2> \"5\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/12> <https://uni-ulm.de/r-ast/id> \"13\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/12> <https://uni-ulm.de/r-ast/parent> \"14\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/12> <https://uni-ulm.de/r-ast/token> \"NUM_CONST\" <unknown> .\n<https://uni-ulm.de/r-ast/unknown/12> <https://uni-ulm.de/r-ast/terminal> \"true\"^^<http://www.w3.org/2001/XMLSchema#boolean> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/12> <https://uni-ulm.de/r-ast/text> \"1\" <unknown> .\n<https://uni-ulm.de/r-ast/unknown/0> <https://uni-ulm.de/r-ast/terminal> \"false\"^^<http://www.w3.org/2001/XMLSchema#boolean> <unknown> .\n","normalize":"<https://uni-ulm.de/r-ast/unknown/0> <https://uni-ulm.de/r-ast/type> \"RExpressionList\" <unknown> .\n<https://uni-ulm.de/r-ast/unknown/0> <https://uni-ulm.de/r-ast/children> <https://uni-ulm.de/r-ast/unknown/1> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/1> <https://uni-ulm.de/r-ast/next> <https://uni-ulm.de/r-ast/unknown/2> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/1> <https://uni-ulm.de/r-ast/type> \"RBinaryOp\" <unknown> .\n<https://uni-ulm.de/r-ast/unknown/1> <https://uni-ulm.de/r-ast/location> \"1\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/1> <https://uni-ulm.de/r-ast/location> \"3\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/1> <https://uni-ulm.de/r-ast/location> \"1\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/1> <https://uni-ulm.de/r-ast/location> \"4\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/1> <https://uni-ulm.de/r-ast/lhs> <https://uni-ulm.de/r-ast/unknown/3> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/3> <https://uni-ulm.de/r-ast/type> \"RSymbol\" <unknown> .\n<https://uni-ulm.de/r-ast/unknown/3> <https://uni-ulm.de/r-ast/location> \"1\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/3> <https://uni-ulm.de/r-ast/location> \"1\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/3> <https://uni-ulm.de/r-ast/location> \"1\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/3> <https://uni-ulm.de/r-ast/location> \"1\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/3> <https://uni-ulm.de/r-ast/content> \"x\" <unknown> .\n<https://uni-ulm.de/r-ast/unknown/3> <https://uni-ulm.de/r-ast/lexeme> \"x\" <unknown> .\n<https://uni-ulm.de/r-ast/unknown/1> <https://uni-ulm.de/r-ast/rhs> <https://uni-ulm.de/r-ast/unknown/4> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/4> <https://uni-ulm.de/r-ast/location> \"1\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/4> <https://uni-ulm.de/r-ast/location> \"6\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/4> <https://uni-ulm.de/r-ast/location> \"1\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/4> <https://uni-ulm.de/r-ast/location> \"6\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/4> <https://uni-ulm.de/r-ast/lexeme> \"1\" <unknown> .\n<https://uni-ulm.de/r-ast/unknown/4> <https://uni-ulm.de/r-ast/type> \"RNumber\" <unknown> .\n<https://uni-ulm.de/r-ast/unknown/4> <https://uni-ulm.de/r-ast/content> <https://uni-ulm.de/r-ast/unknown/5> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/5> <https://uni-ulm.de/r-ast/num> \"1\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/1> <https://uni-ulm.de/r-ast/operator> \"<-\" <unknown> .\n<https://uni-ulm.de/r-ast/unknown/1> <https://uni-ulm.de/r-ast/lexeme> \"<-\" <unknown> .\n<https://uni-ulm.de/r-ast/unknown/0> <https://uni-ulm.de/r-ast/children> <https://uni-ulm.de/r-ast/unknown/2> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/2> <https://uni-ulm.de/r-ast/type> \"RBinaryOp\" <unknown> .\n<https://uni-ulm.de/r-ast/unknown/2> <https://uni-ulm.de/r-ast/location> \"2\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/2> <https://uni-ulm.de/r-ast/location> \"3\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/2> <https://uni-ulm.de/r-ast/location> \"2\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/2> <https://uni-ulm.de/r-ast/location> \"3\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/2> <https://uni-ulm.de/r-ast/lhs> <https://uni-ulm.de/r-ast/unknown/6> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/6> <https://uni-ulm.de/r-ast/type> \"RSymbol\" <unknown> .\n<https://uni-ulm.de/r-ast/unknown/6> <https://uni-ulm.de/r-ast/location> \"2\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/6> <https://uni-ulm.de/r-ast/location> \"1\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/6> <https://uni-ulm.de/r-ast/location> \"2\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/6> <https://uni-ulm.de/r-ast/location> \"1\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/6> <https://uni-ulm.de/r-ast/content> \"x\" <unknown> .\n<https://uni-ulm.de/r-ast/unknown/6> <https://uni-ulm.de/r-ast/lexeme> \"x\" <unknown> .\n<https://uni-ulm.de/r-ast/unknown/2> <https://uni-ulm.de/r-ast/rhs> <https://uni-ulm.de/r-ast/unknown/7> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/7> <https://uni-ulm.de/r-ast/location> \"2\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/7> <https://uni-ulm.de/r-ast/location> \"5\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/7> <https://uni-ulm.de/r-ast/location> \"2\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/7> <https://uni-ulm.de/r-ast/location> \"5\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/7> <https://uni-ulm.de/r-ast/lexeme> \"1\" <unknown> .\n<https://uni-ulm.de/r-ast/unknown/7> <https://uni-ulm.de/r-ast/type> \"RNumber\" <unknown> .\n<https://uni-ulm.de/r-ast/unknown/7> <https://uni-ulm.de/r-ast/content> <https://uni-ulm.de/r-ast/unknown/8> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/8> <https://uni-ulm.de/r-ast/num> \"1\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/2> <https://uni-ulm.de/r-ast/operator> \"+\" <unknown> .\n<https://uni-ulm.de/r-ast/unknown/2> <https://uni-ulm.de/r-ast/lexeme> \"+\" <unknown> .\n","dataflow":"<https://uni-ulm.de/r-ast/unknown/0> <https://uni-ulm.de/r-ast/rootIds> \"1\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/0> <https://uni-ulm.de/r-ast/rootIds> \"0\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/0> <https://uni-ulm.de/r-ast/rootIds> \"2\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/0> <https://uni-ulm.de/r-ast/rootIds> \"3\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/0> <https://uni-ulm.de/r-ast/rootIds> \"4\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/0> <https://uni-ulm.de/r-ast/rootIds> \"5\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/0> <https://uni-ulm.de/r-ast/vertices> <https://uni-ulm.de/r-ast/unknown/1> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/1> <https://uni-ulm.de/r-ast/next> <https://uni-ulm.de/r-ast/unknown/2> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/1> <https://uni-ulm.de/r-ast/tag> \"value\" <unknown> .\n<https://uni-ulm.de/r-ast/unknown/1> <https://uni-ulm.de/r-ast/id> \"1\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/0> <https://uni-ulm.de/r-ast/vertices> <https://uni-ulm.de/r-ast/unknown/2> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/2> <https://uni-ulm.de/r-ast/next> <https://uni-ulm.de/r-ast/unknown/3> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/2> <https://uni-ulm.de/r-ast/tag> \"vdef\" <unknown> .\n<https://uni-ulm.de/r-ast/unknown/2> <https://uni-ulm.de/r-ast/id> \"0\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/0> <https://uni-ulm.de/r-ast/vertices> <https://uni-ulm.de/r-ast/unknown/3> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/3> <https://uni-ulm.de/r-ast/next> <https://uni-ulm.de/r-ast/unknown/4> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/3> <https://uni-ulm.de/r-ast/tag> \"fcall\" <unknown> .\n<https://uni-ulm.de/r-ast/unknown/3> <https://uni-ulm.de/r-ast/id> \"2\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/3> <https://uni-ulm.de/r-ast/name> \"<-\" <unknown> .\n<https://uni-ulm.de/r-ast/unknown/3> <https://uni-ulm.de/r-ast/onlyBuiltin> \"true\"^^<http://www.w3.org/2001/XMLSchema#boolean> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/3> <https://uni-ulm.de/r-ast/args> <https://uni-ulm.de/r-ast/unknown/5> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/5> <https://uni-ulm.de/r-ast/next> <https://uni-ulm.de/r-ast/unknown/6> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/5> <https://uni-ulm.de/r-ast/nodeId> \"0\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/5> <https://uni-ulm.de/r-ast/type> \"32\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/3> <https://uni-ulm.de/r-ast/args> <https://uni-ulm.de/r-ast/unknown/6> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/6> <https://uni-ulm.de/r-ast/nodeId> \"1\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/6> <https://uni-ulm.de/r-ast/type> \"32\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/3> <https://uni-ulm.de/r-ast/origin> \"builtin:assignment\" <unknown> .\n<https://uni-ulm.de/r-ast/unknown/0> <https://uni-ulm.de/r-ast/vertices> <https://uni-ulm.de/r-ast/unknown/4> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/4> <https://uni-ulm.de/r-ast/next> <https://uni-ulm.de/r-ast/unknown/7> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/4> <https://uni-ulm.de/r-ast/tag> \"use\" <unknown> .\n<https://uni-ulm.de/r-ast/unknown/4> <https://uni-ulm.de/r-ast/id> \"3\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/0> <https://uni-ulm.de/r-ast/vertices> <https://uni-ulm.de/r-ast/unknown/7> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/7> <https://uni-ulm.de/r-ast/next> <https://uni-ulm.de/r-ast/unknown/8> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/7> <https://uni-ulm.de/r-ast/tag> \"value\" <unknown> .\n<https://uni-ulm.de/r-ast/unknown/7> <https://uni-ulm.de/r-ast/id> \"4\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/0> <https://uni-ulm.de/r-ast/vertices> <https://uni-ulm.de/r-ast/unknown/8> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/8> <https://uni-ulm.de/r-ast/tag> \"fcall\" <unknown> .\n<https://uni-ulm.de/r-ast/unknown/8> <https://uni-ulm.de/r-ast/id> \"5\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/8> <https://uni-ulm.de/r-ast/name> \"+\" <unknown> .\n<https://uni-ulm.de/r-ast/unknown/8> <https://uni-ulm.de/r-ast/onlyBuiltin> \"true\"^^<http://www.w3.org/2001/XMLSchema#boolean> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/8> <https://uni-ulm.de/r-ast/args> <https://uni-ulm.de/r-ast/unknown/9> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/9> <https://uni-ulm.de/r-ast/next> <https://uni-ulm.de/r-ast/unknown/10> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/9> <https://uni-ulm.de/r-ast/nodeId> \"3\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/9> <https://uni-ulm.de/r-ast/type> \"32\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/8> <https://uni-ulm.de/r-ast/args> <https://uni-ulm.de/r-ast/unknown/10> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/10> <https://uni-ulm.de/r-ast/nodeId> \"4\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/10> <https://uni-ulm.de/r-ast/type> \"32\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/8> <https://uni-ulm.de/r-ast/origin> \"builtin:default\" <unknown> .\n<https://uni-ulm.de/r-ast/unknown/0> <https://uni-ulm.de/r-ast/edges> <https://uni-ulm.de/r-ast/unknown/11> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/11> <https://uni-ulm.de/r-ast/next> <https://uni-ulm.de/r-ast/unknown/12> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/11> <https://uni-ulm.de/r-ast/from> \"2\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/11> <https://uni-ulm.de/r-ast/to> \"1\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/11> <https://uni-ulm.de/r-ast/type> \"reads\" <unknown> .\n<https://uni-ulm.de/r-ast/unknown/11> <https://uni-ulm.de/r-ast/type> \"argument\" <unknown> .\n<https://uni-ulm.de/r-ast/unknown/0> <https://uni-ulm.de/r-ast/edges> <https://uni-ulm.de/r-ast/unknown/12> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/12> <https://uni-ulm.de/r-ast/next> <https://uni-ulm.de/r-ast/unknown/13> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/12> <https://uni-ulm.de/r-ast/from> \"2\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/12> <https://uni-ulm.de/r-ast/to> \"0\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/12> <https://uni-ulm.de/r-ast/type> \"returns\" <unknown> .\n<https://uni-ulm.de/r-ast/unknown/12> <https://uni-ulm.de/r-ast/type> \"argument\" <unknown> .\n<https://uni-ulm.de/r-ast/unknown/0> <https://uni-ulm.de/r-ast/edges> <https://uni-ulm.de/r-ast/unknown/13> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/13> <https://uni-ulm.de/r-ast/next> <https://uni-ulm.de/r-ast/unknown/14> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/13> <https://uni-ulm.de/r-ast/from> \"2\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/13> <https://uni-ulm.de/r-ast/to> \"built-in:<-\" <unknown> .\n<https://uni-ulm.de/r-ast/unknown/13> <https://uni-ulm.de/r-ast/type> \"reads\" <unknown> .\n<https://uni-ulm.de/r-ast/unknown/13> <https://uni-ulm.de/r-ast/type> \"calls\" <unknown> .\n<https://uni-ulm.de/r-ast/unknown/0> <https://uni-ulm.de/r-ast/edges> <https://uni-ulm.de/r-ast/unknown/14> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/14> <https://uni-ulm.de/r-ast/next> <https://uni-ulm.de/r-ast/unknown/15> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/14> <https://uni-ulm.de/r-ast/from> \"0\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/14> <https://uni-ulm.de/r-ast/to> \"1\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/14> <https://uni-ulm.de/r-ast/type> \"defined-by\" <unknown> .\n<https://uni-ulm.de/r-ast/unknown/0> <https://uni-ulm.de/r-ast/edges> <https://uni-ulm.de/r-ast/unknown/15> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/15> <https://uni-ulm.de/r-ast/next> <https://uni-ulm.de/r-ast/unknown/16> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/15> <https://uni-ulm.de/r-ast/from> \"0\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/15> <https://uni-ulm.de/r-ast/to> \"2\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/15> <https://uni-ulm.de/r-ast/type> \"defined-by\" <unknown> .\n<https://uni-ulm.de/r-ast/unknown/0> <https://uni-ulm.de/r-ast/edges> <https://uni-ulm.de/r-ast/unknown/16> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/16> <https://uni-ulm.de/r-ast/next> <https://uni-ulm.de/r-ast/unknown/17> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/16> <https://uni-ulm.de/r-ast/from> \"3\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/16> <https://uni-ulm.de/r-ast/to> \"0\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/16> <https://uni-ulm.de/r-ast/type> \"reads\" <unknown> .\n<https://uni-ulm.de/r-ast/unknown/0> <https://uni-ulm.de/r-ast/edges> <https://uni-ulm.de/r-ast/unknown/17> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/17> <https://uni-ulm.de/r-ast/next> <https://uni-ulm.de/r-ast/unknown/18> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/17> <https://uni-ulm.de/r-ast/from> \"5\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/17> <https://uni-ulm.de/r-ast/to> \"3\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/17> <https://uni-ulm.de/r-ast/type> \"reads\" <unknown> .\n<https://uni-ulm.de/r-ast/unknown/17> <https://uni-ulm.de/r-ast/type> \"argument\" <unknown> .\n<https://uni-ulm.de/r-ast/unknown/0> <https://uni-ulm.de/r-ast/edges> <https://uni-ulm.de/r-ast/unknown/18> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/18> <https://uni-ulm.de/r-ast/next> <https://uni-ulm.de/r-ast/unknown/19> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/18> <https://uni-ulm.de/r-ast/from> \"5\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/18> <https://uni-ulm.de/r-ast/to> \"4\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/18> <https://uni-ulm.de/r-ast/type> \"reads\" <unknown> .\n<https://uni-ulm.de/r-ast/unknown/18> <https://uni-ulm.de/r-ast/type> \"argument\" <unknown> .\n<https://uni-ulm.de/r-ast/unknown/0> <https://uni-ulm.de/r-ast/edges> <https://uni-ulm.de/r-ast/unknown/19> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/19> <https://uni-ulm.de/r-ast/from> \"5\"^^<http://www.w3.org/2001/XMLSchema#integer> <unknown> .\n<https://uni-ulm.de/r-ast/unknown/19> <https://uni-ulm.de/r-ast/to> \"built-in:+\" <unknown> .\n<https://uni-ulm.de/r-ast/unknown/19> <https://uni-ulm.de/r-ast/type> \"reads\" <unknown> .\n<https://uni-ulm.de/r-ast/unknown/19> <https://uni-ulm.de/r-ast/type> \"calls\" <unknown> .\n"}}
      

    The complete round-trip took 5.8 ms (including time required to validate the messages, start, and stop the internal mock server).

    Retrieve the Output in a Compacted Form

    The default response is formatted as JSON. But this can get very big quickly. By specifying format: "compact", you can retrieve the results heavily compacted (using lz-string). This works with and without the control flow graph as described above.

    Requesting Compacted Results

    Note: even though we pretty-print these messages, they are sent as a single line, ending with a newline.

    The following lists all messages that were sent and received in case you want to reproduce the scenario:

    1. hello (response)
      Show Details

      The first message is always a hello message.

      {
        "type": "hello",
        "clientName": "client-0",
        "versions": {
          "flowr": "2.9.12",
          "r": "4.5.0",
          "engine": "r-shell"
        }
      }
    2. request-file-analysis (request)
      Show Details
      {
        "type": "request-file-analysis",
        "id": "1",
        "filetoken": "x",
        "content": "x <- 1\nx + 1",
        "format": "compact",
        "cfg": true
      }
    3. response-file-analysis (response)
      Show Details

      Please note, that the base message format is still JSON. Only the individual results are printed as binary objects.

      As the code is pretty long, we inhibit pretty printing and syntax highlighting (JSON, hiding built-in):

      {"type":"response-file-analysis","format":"compact","id":"1","cfg":"ᯡ࠳䅬̀坐ᶡ乀஠洢琣℥犸ŜHߐএ妔Ǔ㗠ߙ⣬啕㑡偍ȱ琢᩠ѐې矏ġ巊☼Ćモ<M⥡䊵ᖻ■ƫCଠጮ᧾ၸƸ堠壐ː獞姣柾䀻䨣D帠ڊ℃⃱ヰᚱ砸-幊ᗭャ╥ස܉㑳ᚑ䝂斱㎬❅ⷜ㥀઻㖊⩞斻㇪㦄Დ⹹坲劇ᷲ嶧椑З禲廕ਔ䠠䁠ె均䐠䵁炒稨㋢䈨ᨾੈ䞄猒桦͔愆⭂畳⪭朾ݛᴗ寡歺ỽ烰綑紬簧䧠ӄ䃔ဳ㏝瑨ߠʫ㛛࡬Ꮁะ䖠໚䰠懼瓙⋇ᵨധ渰翿ଛůᑥ眘⦿ࣣ攦䘯ᡊ೛栠㺠஌ሰA㽕ثԑ∢\"籅† ","results":"ᯡࠣ䄬Ԁ朥ᢠ⹰ڀ■㚑䤦檲ⲐŒ≎ĸó⻀ᬵǸ吠拀ຨ㠠禥Ꮚᐰᨀ㢦瀠‣怫₱⧠ᝪ劭᫺⨡䲂ƴŔƄ¤Ȅ�Ƞ峀˙憮牲凃㮓✾㸢䉧溔㤦⫋㗈L⨠ጳ౬怪ဣࠠ吡稠䄽ຠበเβ嫹籡㉮唦㴵᱀૦ᗨˈ඲â፼仂⃎晀吮㥳䰚呕睎⽟аⱊᔁ甥⏈兕ਦᬧ䲛敔Ⲱͳ敫玱畖Դ㎿Ⲏ㔊瀍吮❔ٕ垤柺㹃㻲䒦椾†犍倅㦩嬻䛈声←厯⩔ⵖ䏁᭸崹䰸㥍憅䱩玭፿ᯄ偬ₔଠH₶\"晠ȉᘠ᛬φᥒ#䣣儸ᥖ⣠䀠⼠Ꮰϑ娂ᑉᥨǬ㈠ຠɱ 待У៲火Ȥ䊡ᙔẶ䄫ዄᑈ噊吰ࡰϹ℔炭ЄშࠢƢ⳺䠲怵䂮䠮ⵅ₶䀪朠Ƭ漓Ⓗ䈁†狶畛Ἇⲧᛤ掌ئ䉺䋓പ甲⇪㌬Ⅰ灁㩑疚㻙⣠㝠ʳత⒁ᚰ抹䶷ࢀ䵪࣊ᡪ✠乷䦽�␠䚶䘩妍孹帥懀啁嚒敏搂ᎇ䎣善㜨䡔傶篅ǐ〸᳂і᷊஥⢣ࢩ◀ېྐᕺ੤⃸灔ۚ⃂ဠᦀ㈬㠺ᤪ㮺͸䄐␻礪氷⨺塂᪀ό䥒٬ǒ๫䤒繸⪪煪⫪մ殺⠿寚曵嬊㧳塴稷妎ᷱ ਿ㤪䏸窾珲穪毡䠔㯡筞埽窞樧碶ⅾᠡ⁇檡ⅦⅠ๚؎䐲⟡坠椺⿥ܡ噝߁汓䮒幰⢪ㅢ⭪祩⮺䓪嬄ᬼ㧠ᕜ歎᥏祚ᅾ䥀䥙㩒ⰻ䅙ᝅ♀垾悠孪Şስრ䲦╀࣌䒠䭻楠੺榰夳㮐淧欅䡓䔾❤禾௪篮用➺篱磞㰼⠞獰䆙آ桁ᵙܲ呖䪁捝䪹㱂昱歄䛉ᡏ☡䧧槠ద₦╬椊⇵䝶嫪϶䛼歱姣嬀⾰犈廲䘮⓽㒮燲㭮ᩝ娀ξㅎᗫ撎巙䔚㷸喑㋇䙵繁盼䗮咩䛓孕䐻Ⅹ⽆僭̈́ɉ灒㟉㡋啁槒ᰕ䙰㔁㍟ٹ≆暱㍰ֽ倯㛱ςੌ♟ᓑ㙃䔝启瘑毺䴬慁喩䡓箤梉ᙀ增⒡き撠⡊㚉㒗➞䲐搭䱄朁獀䕹扖撳ݙᢥㇵ栆ៀ⺠὏柙䭰ᔐᶏ⾥䶼步壘䏥䓞ᣅኝᛙⳌᒠ涯ᐵ㈻澝務䱵嚐ౌຄඓ⛇䵀墍含໋♁ᦟ◁օ䤭斟ත疁⬵㕄淣㧁㕍卽碵睾嚩⤜⺞Ԛⴕ㦄Ĺ䖃ḃ凍ⴳ≸⻑壼᮫ⅿᶞ哒᮲⩫ಁ甗ಭ喐䱭敠Ὶ࿩ɐ响⢊ⵡᨊ滈㲳戢䡠ᐹ堠瞗⎁Շ斉࿁❉怴ଆ䬰攻䈂幹ⶈᦲ㼠ᑈₚ㑴⬫儰⭢楍Ḛ㽌ᮟ㵗箟璔䀲咶䎁熿Ơ㐤窤ڝᅂ此І桎䄐ℍ㉼栠෸ℌẒᑜ禐Ⴤე,Ⅾ咦戠↦惀ᩫ捈ŏ∠䐶ˤ纆慕援掦慐ዢዌⅰ刦≨坴穭㐢䞡㠤Ȋೡ䰤慀昫傌ෞͧଋ䡃䉆‭ᄡᑪ䔰䤬㨱⍜獦䆄ಂ䒭紀И䂰䒀■ᣁ≑㪬兪䣀䄱⍲ᕦ嚥梈私愍࿡✿冦᮱織扐ᒦဥ䒀ᖩ缿⚩㬲Įᨘࣹ捼⩇粒匘湠䁼䀩栴䃡ሡ⅏Ͳᝤ牻䔸煪ኂன猳择Ὤ䕄勌⍆᲋ਈ䮯哮休䊺䣩�⮿䓀᥂䪚䚈温梨䠹㲶ᦾ⥓卖ᐂㅇ媊⚬磫䁕佩ᐷ榕᳒筀爪╡粒₶ェⳕ୺વ⤫Დᅝ揂㬅恍敔妪⁍䣔ᒳ㇃᎒ᠽ㎰㍆ᚎ◜偌粰⸹䮾礡☠䅮猢ㇲṶ䝴浭㳃ഹ䑼䗿ዳ㽍吞⏆煹奂伥̛ฉ沽䔨幫磂爴ℶ⥔`ᢅ㤴⭉䐮䘓Ḳ⽉㋁㥀଻ᒒ哨ይ久欺扌婋⮼⯚⤆榀唂烍㋬匵榴敀ࢰ犮冂ڄṼ斤䵨䌚䷵統ᖮ䥃孌䁍⃶ᖘᐪ摌ₛ⮥Ը䢦吳䛓૭ユ㵦杺慥嫶ိび☝ጋớⰂᕁ䰮䁚緮窰䣥枼啎嬻燁橠ᧇ扤⢦䠤暤汙❾丕ᑺۆ᫝ⴴ絺㙦禊嬄凖ታ甑ɺᇄ珼⷗㕠ț⭿䡤⭁⛞ⵕ板⦝媍ᱭƔ堠䧔咠ԏی俍䌷淺怌䧑桮࢖⪊㠒妌ᣈऒ琣ᶓ倫ⱪω㦖㮂Λ㛉䢞棲䇼ᵆ喪⫁筇┗㔹石ࠊ⻟⾑߽唠ը緻匛㻌㬬㐮㾔瞞䆉䈟檣眺Ϻ卨悙算⒕彫埁氽Ả毣⑐㸎ầ嫀Ĕᢇ㪾㾔垛䙱縿䆶歀ٜ⎔㢡ᒛ⨠Ⴊ䙀滔潯๑爡线␳㙐ᐎ删?䯦墕稠焠擰仮䆊⨑ụᥒ͐㧚Ϛ䜗㒔䤂̡戾Ộḳј䍷僇䚒☠ា构暬ഛ࿹绒亢ẃ噊玮击壕柘懬告ᜉ弽冡ᰫ䘵䱿庇ẄØ才ⴒเ㱼䦠Є㨝᧣窾䯪㉆搧៴敷化啨پ憥ᵋ峐ⶵ㡶⻔埕㕎ˮ䵞庿ᗄ岋㝝୊㬶ᶇ柏㬴㫩ⵕ灹㗰库᯵ေ㪆ẞ㭆緗竪嗭盈r㋻ᘙᩫ嗙殆㷷珋㜚慭㛪泲᫺؎⼣㥙Φ㳖➛㚆純䀭溽浿哇岳旜χ㳶ញ曒烤㼓潭医淯徻䏚݋よ径㚞獎໴᷽灘㸅塧ϙ嬨緋ⱬ睐㘽嬁䶃摿㧄㿆ʘ䰘祆▧㗞献绢乳扙䘙濇㒘㐔緋瀠Ľ殊矸玼ᨎ汝彙㏾㮠⺞柂粰堬姑涊燦渹杜䯲标㳚抪畎愉៵祿䗧ὄア晃↷ே᝜玛଀溰䫎拥彖ᗙ㷣෗䎙Ꮌ獉捛倘笶帛彻紎範嘷玚ណ璵嫒⢀ۡ䜧嶥癏ߨ祷˷ཱ砿㈂ể筵࿁〶㒟ฌ⳯㐭俞焗稐帽緤䰕ᎊ䢀怷⇠掕嵔眮䦚律慞拫㳠ᶛ៤ďᰭ嗤߈桎忉痏昛య終࿖羽ਕὉ狋㐅ጛ柦⺞卫䤛ෟ徑㘝Ἧ㏟琅檗筶洷梏旼箵⥟帟♷炟畊翕⾅࠸ㄇ圜⁇羠᠔〔戟↯峩維䀂羖㩧帡憦㽺㦋吢᪭㼿⇇䰣ᬀ垈ךᤜᒨ⼨՗僭㚩ひ礣冼簆䄊⇿僥堽侖㢓䨡怳ݦ稃垼ᐷ湜Ы庸〯⃤װ㊣ኁQ振媣␆㞌⦐⯝఺垇⎐ⶢ㟈Ⴊ㯠䂙〇➉ڰᰜ㺠౓灈㯝䨳ᄍ⨿ዱ奯⼰宿䙜⫅傽س䯌∴パ〠✕昹፧犀ᯉ㨺ᮝ܇䕵㘱䂛Ҹ➌∺焗ٸ㬵帴䊖㭮䡰栢䁹֋䡂℻Ò�ቱ䄺ंߘ䙂焹ᎄKঈฺ㜫磚啃椱焛寳݃戽䕢䞊姐䜁䃺Ӿ䳂儺把䑄ㄡ唺⣫≪ʠⰦࣣᦴ㗂㔲n䗔㻃㴹ፒ䑤᷃沄ᤎ䖬㿃䴼ᢰܙ͂㐶ᾓ㭙ᯂላᤎ磌㉭檩㰱䓾厃匇䤂㤚គ䔹㽯䦶᭴柦䀮㪰亂簵䤚䡼⬂ࠨ僒\\㬃帊碤Ί刡⺤碪䑌㬵强岎䘢⨃市өᢢ⿂缿悵⩢㠲⺪属䖢Ⅎ瀦植⣼墠㊢సȰ它壁䓌│㯂ҽ䓼⟴⒲䒸缸êᅄ碲啼惲➩崰擺⟴▲䲽唿ዙÜ璲畎╠޳伺択☪㯜⊲⸵硈䗰墾喖⯪垳畍ᒱ⢊干䊼璊❊⹲端⣅⛪Ⱶ᰽ⓓ䮊㨲眸ㆉ┺ⱹ䈰ⶓ⛌孳布㒩䨋᭵劶⢢笨Ų暽⓷⛖ȩ笿䄚ペ㧂溻瓿ӊ偓ኬಣ♒㵰ʾ䢳␸◵劾ᔎ䕆㧩岻䣰晆㪳䦼甊➀⁳⠋惭硉婳禶䁏刚⦢㺪Ⲫ‶㤂妶呺架⊽੠儘杘◴倪洂➖㲳嶹撠悿܃䖴䭁∮㯂掹㑁斪㲓᲼尨Ꮦ⸜椳㩕❎⑒㵀孞⟮╂孤桢Қ㷥嘠ᑝ攀⢣ᖰ䚊ᅞಠ㢤⑶⠯ଡ〮瑷ဦᏹ侼ーନ̠牊戯斾๥⥯ᵃ撾㓝ᦿ⥀᠎㭴㢮䲛匮⧢瀅ˮ磡㋒∰䊬懮ể⡿㩭ת❣ர十Ʀᣢ嚻ଢᙸᣣ⁸ㅲចᤝ㦡䱋㨁⥍窨䌛㬱㺔䱷⋃㮗嶫嵫䲹∏፰㊢䁬儎ᘫး㎉⠑∡ɼደ⛑∌ቿ庉ᐢ䝳咹ዅᔎ῝ੴጅᑑレ橽励ᝁ⃕穳ጚ柴䓪É擉ᖻഠ吾㮙䓢⾳噿否ե叢׍縹⃹䀜᮰卯យ⩢埤弣晀႒琄㋸妥㡋撵᳉祹㵰㰿㋻䑆㻅慷ጚ㎥⊫湇૩◅ਡ偦牽៑嫰ս梲嗺⭋࠮⪵ኴ㓑ኦṱ 㒂異檨埮䩽當㳪咕ⲙ亴ᑙ੕㋂ȿ檴播❲⍿潝₥⊝崳ᬚ䓭㔣嘬泡堜㌜䶱ⴔ嘼㶊晲ℍ啷埒䕳㴰挖ⷊྌ㫈ᄍ㷥東僼嗄㵴ⅷ㬈n㥳ᝰ䤷喜㢡焸㪠⚝㠳㽿⣐̝㭵ƭ璒䔶⸪ંܝ䮔⨻ᱹ⫸㑢㺫惶጖ᦠ֪湿䢿⇃⸻㹴䮌㙩䤘健᳤唃䇫⚾⽂㔿ࡢᣰ㣒ȳₙ䓺笚㜰ᆺ弹㑷⃠ѐʶ[ᚳ㥊ᶿ⥐ϓ㋡᳽曷ᔳ忲壼ᛱ㗀޻⽴ᚮ㖓㙺⠻䬎ƞ䖋๿⥕㗡䵳嫳䛅⯑佻ኊȦ⁠ઽ䣴檻梻㛰㭪㬚㍻⳻⽰盦憜⃝⮨Ⳅ咮レ怦皸ᇊ⟺᳁⳪吧㷺㘱:੺᥁õ窫㔭◣懰ై砝⻺㺪氨畇㹃帆令睧◽цۯ㑣⭽秼墲矴✲䚭啑扒ы嗻㛭咡ۛ男⺴䒤♛ײ䚻權ԡ᧰滶᎗㍛ᕰứᠠ͢䄌⃶祖ာ㴳楮夠柕甫滵ᗧ′悜䄪䬖⡝㶊䳾嬖廗㸋渦涶啛畊听㈕浏嵀ݞ斢啛幗澴益秖⺄楪憫䗔愥划䇕㯓䄹▸樖፟絉両仇�ठᶮ櫶㭕ㅷ槔⯷悛⬉Ⓠ॔忟䶏癡箃⧂ⷀօడ樼粷戴ຠ㼮ÑȎ怘ܦ櫤䛔␒刪ā獀⠅沶ᚸ᫬រ⫍䍢䙿⾨淉ਣⰡ縙䷟䐜砎᪰䰥đ͞ᢃ溺㒈Ⴑ咭剒䴔Ჴ᪄ְ媕ʼnࢥ碋秏⧱耆狀惢ᷱ攕忝扦ᬠࢯᓬ⍜q璮⦵ɉᏑ劯嬥⎊ὼ㱢㒅䐓僑喯㯷揚ᵈ熬Ҋκ汑කⲄ搇䢶㜣ᲆ⎔⓲Ꭾ⒞揎ᢁ箭䠳捺ᡍѭ粛嗡ᦗ㹮䲀ⶮ瑉瑬޶揩ᦑ䉯㙮Ꮺ᭩紨㲋捂ঠ⥮⫅厱ᡑ澫ࡣ十⼉微ᡆ揑᳉籬㬱ᐊ䗉橮咁匹᪉䆉窊Ꮅ⾹杮⹬悥ᰱ憪嚇叶ᦩ䓯⪅嫛ᨴᮯ⚕䒹ἑ䏺㚗Ꮨ汓׮ʗᕚ͹桭⟞獻ᭉ碯ځ挺⇉篮⚝ፇᶹ汻Ẓ獟滥⁎溗戠Ͱ㳧㭍嶪䡹㳠暖㸓㶿䣲ᜮ㽳埅᳨䌁㐫勷㇖ᛡ㦒⡻獷寸橳ѿᓰ朴㉓ᛇ洊ᚮㆫ羿介⛎㩫Ẻ㽱ᛰ㉫⼋ይ᪽ࢫ⩸糷碲かι᳦䛒㬶䵡㳰簒㷊䒠狩嵿屳眷䬜យ㻢੸᳭ᙱ㉋⳧匚䝑ぺ啹挏䱵ⲋɸ⢿�滓眲嫠㷯ቸ䬦プޒը絿䙌妈㜠ᔸ๓僯ஙᝠქ禂剣桇ჽ磣Xᇑ瑡傿̀㉏Ģጶ䳣睄繱⑸䭚H㶽域宫ᯱ曦揳Ġ�ᓻ簲勳ዸ㫦冽㌠坼剛嘻䘋ὺㄟ埭ޣ⃺ᄈ㛨ㅣ䣿㩆҃㺜磼婂㝽಻囼ズ㟯⦻洺ᜅ㝊幻拼粎⪯䴠悪⎔ᜃ匊ᗺ䀺睘偓䝹国㘻ㆬ⛸ㄏ噳㈠盼შ㝨㸻䨻盺栧㜻ӹ埈皝ᰉ矿✃凇ぺ淽滳᭷㏥旽⻨⬟㩃Ϲ漍㛽㺫Ƅ竴Ĉ㚛᛽穵瞣㖜⻻式㟮䐈㜬໫皳㼛糤仦㝭Ɂた呸༿湼勸⦡炯ඃ࡙㬔ໆ㘄㡘∃ݸ䆛ᑜ眍皛㉍߸崳皧㉛地ሊ㛯؛濲曯糈緾婘䊓ㆿ壋琸⦲ᔃ੃䏧䈗地燧燺燭監㯧⣾狀伐眛௼维癨灺啝有噽⎇祛䘭ጀљ᭼‭侼絙Ƹ槻࿯㯇䃾建ຘ焻㹚懹�紛懽㻨俬瑧濺娌ⱜ缤槮ݢ作祆渡䀲ᗔ∵䳞昜৴窛癛笒ย窧戾؝盢筱壺ਔ⻧㈛㣜䧨䌒玧偬喋⺒窡玈演ڤ㽽畹儆侻㏇彮塇敌༴碢ਾ琝㙴癰橒ⅅI俠⢭㶕䚘㶇Ⴛ㛪緧͙ױ倛ㄷ㫟戌⿤禇⥚涍將㤍⬖チ֞ᤓ㌹矝澄塗὚樑⹏㹗੢䷬澸㽗䠄堲湶瞠Ẫ炜栿ᠰኃ槰〖畷棾ḉ亂繛୞ህ滨Ӣ⠠㸋櫑环䠕娩㛼矈䗼ᘐ濔牷ఱ峄満ൗ姚乀ἶ糗ำⷤὖ狄淜弎瀔緻ϟ爖ྊ粯ۜሙ濱牁ኛ仫ᚏ⅏◽碤熘Ç嬌娢廴綃࿙ฅ‌䵯㿟向瀶簯暝⸘Ṗ甯亝䏥、禧䒜௴⽮窯⛞দἚⳏݞ㝫張翾㣦⪂主泇ⓑ㎉獷噯彚⇠㠐㠷஝珢ᾬ璯宛᨝彥缷➜咷念⮇䷯ᦊ㺣爡乆Ὃ䥽眇क柴琓磏㖚ᗿ佪縿狟∁候縷ᮞਐ廤熠ड़㰓⛯䗁␅᠊延᧿㴚䀣介崠̚㸒地٘ማ᠙珵煯濞氍„睗吧毨ṹ粏䢚淬Ῑ眯⤚寬㼻罷兘伂㾺灺䨜န罊冟∝斖ͧ篷ゾ澥ᅽ獟ଝ߶幆珏�⿰ỷ璏痚㠁柖绵稍柟⡽圕懮ἴ㴺畟州˳瀅㾴廸剀ᛇ㛉֣昺䝄塐ञ䞌⇘䐊᮸㸽夓憧Тࠒ䁉徃糱牯䑢ᰦ廇ₛ᳋䉠椟ᔔ㼵䃽瞗紨৻吡ሥ氍⮩仰ݗ抟⮜ព㓩䃷哸ಳᨨ渺泂ফǯ㭨ᆸ⟁䈔緲彂Ƀ痏侾縦搉⁹湂֫沅⦀䨨ൻ幥΄গ٤㣢⤣倭ࡇ榯朞డᘪ刦悪ℏ圓厡䶙㨃悎组ؽ椛ຢ䠓桍弿沍抐㫡嬤⫌䁪咮ވⴀ䑢㕵散摒ᖸK䥁砲ⵁ悙ṿ㰙渀撝㸯埦圪̢࡯彡ᨤ୦䡪∕ࡴႰ澨ᥢ旤ᕚ䈦燡弡唤䀅炑Şؐᤠ摽㨩ᑘႤ帇⒈㹺坃樽唨窚ʲٿᮽ挬䱗得˒୰㮡ລ爵梙ŝܴᬠ楢栕䖦ツΡㅵខ㐦嗅琴或щ䷠ৢ猬摀䃯ϭ瓰㩞⏚ဇ㟆戝݇憐氜ᶔ居⵿ॽ܆䈞批ீ圲檱᥼ᳰ洝太培ㄛ䐗璘⣁枤䘅墜Ŗ猢ሐ呢⻅籖⵻紅牞 乺ľ挸灘䝯潐䷣Ბ濥ネϚज़幞ឦ䐾㾱ᇝ筿惨矣ᝀ߶タ㴔ᔎ嬴㙧ऽ㢋ⅼߔᇀ敼ク硉為∱඘③Ṧᤶ䒆㺶ϒᕀ岁㢪⧫䮎⊵คⰱ༥䤻䢔ᆄۢỐ籂⸔䩘斕⊅࿸◴ęㄹ㤮Ī䖀ᢆෂ᪪疥傭㷕ત㡱㵦䔷Ҙ兦䗲ᬶς暫曻ટ≹ࡱೡ佢洶玸ㄢ䋺ᜟˢ洫屝棟Ȥ瀨ヱ愧഻଴ㅑ䙵⦸䟝㥰玢ᣓ䊲柬ㇱ㰧䄸墀兕穆ၰ䂣㴭剀惸妫ࠬ⻮窲ᬲ౨<炓䳈濝⪩⪣壷籩င㜁牦甴䱠幾䓠ᅈ濃珃癏ム掛ഌ㝑弰㬰Ⲝ䈃筎ቸ䴉享俧თ⍍焔㥑ㅤ✳璝ㇳ䛖῝ᨂ嗶⯥㢠⋙ॵṾᣤܲ瑮煢䘎ᩘ䎝措࡚䄍䐇⟜㚑曦౫籱憒笐୽࠳易䙀⢤捿໌║潥匵ᱣ沃䆡᷾ሲ⻵敶帶惛ഄ☶リ㯩䉦燧䆊ᴘ斃偮桐磯戽焨⦶㱄䌪䒙冪䣱ᖈ䊨㉁㓠幌ጼᗜㄜ皋䏋≡অℱᤨ䰃怫㹐傣⌀䬜⤱㙋㢶承焹碰ⵄ漲䁬岣࣐ǝ焪䕩㕇䂺⒑ঀࠄᙤ䠂听兀メ㦡ೲⶂ卅吉ፁ烬ሾƠㄡ汬摹瞋ዀג㻩㹆倠ኚ䅄✩ጤ礳٫䁊䒧妼䶒⺩㧤嵬઄炎╉ᦋ᩼ᜨ㑖ᒳ̿໼ど潅璵⑰弞♂ᠴ結ẓ䕀ത匼瓐ၪ正椪㰶傖䛃⚷ڽ╩垥⃇扲䷲㖁絧⤴㲜े䞆整䥲敯䭳咻⇚䬘䵎ᰰ‪㰧ᄼ━ᾇ⃳㟦൅扚厲䬒㇉䩥嘲橥ड✹Ꮄ擲䈡േ哇Ღ䫺₉᷇〤ࣜ⤧╄⭔䑃獭灑㔆剒䨨℩痄亴㪞⤯⛤⌎⛁ྰ啜湗叐㊔ⳑ磧ܵⲞ䦂⛕ᅄ癲瀲終ℐ㋋掬஢݅ᖆ罒為䆮࿸彃畨嵓僋卝ਦ▉ⳅ嚺仔ᥨ曩჆ɒレ⹒牐ʼn»䛺ڤ⦱␵᥺☮ᬈ傲楪ⵆ瓞䌎䫦䚹压⼋ᒁ䔄晳ᮗ⹴妖梶೟㰵或帨撆㔱ɰ煚䐣Ẵ患᥯♏溑㌀Ԫ䀑䒨喴扨Č䚅֘⨬⪯扆稽㍹䜚㓑佅ᘴ晳⦸杍ᣌ筒搦᭏⳷吽倂ަ䮰䬬寚ロ଩∵㯒▣慙㜿烮佌⨩὆Ƴ㚍樍⟳ఌ柒ǭⱲ喈琝伖㌑⾚弄垪㧸秝敌皲൬嵁焋㍹䯌ⳁ壐✮乮Ẏ窷᭏⬙✱େ壣秋侒⮑珄ⶺ䩵大䐹ᄼ冒汷坉壙Ꮧ朎ⷑ樳努㢊熏爯᥌俳曨噁㓜狻䫦㛹䤄紦ẁᥩㅏᴴ倀㑇歛壣㈡ၮ哹䷦纹ʟ槄⟫᭸攂௫ဲ-琅嗾⛢瓂✪垻仫䄫⃼䈒㋭湔Ჳ牖୞㏙㏉澼庁䱯柿ᛸ丢廬݃瓀掓͂噙℅纻ᚑ祌摋ᇼ砂ཱྀÚ̚䕰⩮べ啛ᠳ㲘樕ᆅ泸㬢姨㍇⓼牥඾㱙㚇侶坖Բ۰孵Ȑ堥൑攑糐ҁ☢窆冼溔稄ᖮ᝜别ቨ㶭䋣灘⼏ᡥ☴剏⑒⁐˒䒸㠪⫀㈺⋹୓䢾㩹䚄宱䙥ԥ枟Ტ䅤剉䣌涖岙䱜彥收હ᜼䇘ᚎ桍ʼᙉ䃐糘੟䡡㔙揤羿㪐ḫᬸ弇ⶪᛗ!➟⅍Šݐ⯫摱᩼〡ᔤ嚠࡫ㆮ杍ಪ⊇䰁㊥䌆瑵䛟䔡䉤崲橽慏ⓘዢ剨㇊⊰ሠ澡䱑VŬಔ斡祋ᕕ㢂ƪ⤜೅ᄣ汶纅妺ᙄ巂殪⥈彁❊䪋應⻅劷䩴窅▚䍴呲懲͌㓟㒦Ⅾᓾ㬩欶禰収抛昱ᛂ椫棨ⓝ礞ૈ⮑㕅㣡ᙽ媔斷䋛Ⴢ◀ྔ忡糢挬教⟞尧瞹Ṩ㧬杽ᢢ盫ᵍㄺ猓䯳灳ḅⶅ綱簭㧻擊䰒味㝉Ⳗጎ૨⿼ⷅ枷ቸᅴ㨃ᗋ᯼桵烍ፁ≮㊍冴ᢂ傷橦䕹娸啔廂伫჌泉ኽ஁⨔ܵ〡煾䆟ᦴ坬⮵ءţ䘳૗᰹⧓匵ᢴ䡳亚旜ᜲ廲孲㭏ױ䫫ǹ⼊䡵㩴縻ෟ於⠀奊䰓睊Ὁ拇䩼々㘅အ棄簢ᔪ㏊嗌篕ᘢ䫏̗璘ϵ⹵喵㥿९ᗂ⒲凲奊搥櫓⫄复⥥ℸ瞙ᥴ垪廢堂囒秊䓌嫏䪰㎑䤢׵ཱུ帎疘善攄唲卡ᤠ㑂᫇惃ⴕ⳵ᇦ精湫敖囑ߠ䅏䛀൸氃⪞䃰⾤䋈䉁㖼ᗭḪ睊㻉噋紋⭡䷕⃕筶೬⵶奨卐圬䪼㍭ᛉ峉牁⤲⫕哧絼侫㕝◖᥈Ⓛ竏䳝扱毧䭖㓵㢵፶๿啦❇敚耓沁⻍㴕歌ő䷮䷵⊄䩷㔯ᛗᔪ狊ωࡷ㪳͊坝㉬凵ಀ懍〫䩼囚擁㟈䙻簯汱䭍㯕૶筻ʐᥫ喾崚琡⿏㩾儻檠濝㬕䥣ᜢ慘疝㨸䩚琺Ὀ⛎㫙㎼⻍╵㓴䀠䎕偨㚡唦为嫭ໞ7⃓֣⨞䐡ࣹ礬Ä㒺嘪堋廉经撡஋ⶂክቕԠ浳痤㝱処友⏎䡘塰ઐ⯤㩵硖┠፠よᒒ嗢紻珌罟嬟欳朳㓐䅕⓹㶒䴣扩妢匂瓫㧣乚㏄洝ㄕ嚶祽։ᕌ㟖ႆ敵窈୉㣒᫇偼㐱唵棼㍦旞喹卺䂋Ɽ㧓狂拕䫘䃜൷޵ㅼฎဥ券ၺ争仅暥⬾⿮⏭౔⳾஄ⷞ㘹䲶囓䍫ᅾ朇嵒樾⩍㮶松ⵣ෩喌匪䖻㦌燂ℤऒ椽▎ᥣ‫噱ắ哾䢏㵺ⱁܳ嬀玂橝㓭᏶ᓻୋⴭ㒕巾⃻涊唳↊ङʮ嗐撢䂭䮘繈ɭ嵖䐡㎍䭶䛮⩰澡⥵瑖佰ⵂ渖䍍嫖敻壇淊㛵ቶ殻⧵受ᛲ૕渇㝁呶岺梈⧕㔄紎涌ᘊ矕㔡᭡渇㓌䛹㍺➊⷏皫啚涡㸙㣕㑰䮎浄⬣卖桛市緟盋ጁ楻㢤䋊Ǹナᷩσ儖治⢎淅皼㋾滧㜽窩ᇻ䝯浳㚫✠⫓䆉ী欗ৎ槇⺽糖䅱它洤知埶毺昲ⷅ伃嫑桛⁽⯕᛿␬涷㑼剜縴挈䯍㛖㰘䱋㼽⷗㧳実⸓卽幎䗻猍◝䙭㬅櫶㽽狅崄㝾᷎㑺基碳權Ֆ⼒匱淗┽ϕ㗼䝶ᖴ⫻匎憺ߎ痄朗᪙湇⾽➗懳კḎ瑽╮牡伋Ꮔ漗㫩洗⯍䜶⇼㵺巜瘍匾叴∌ߍ໇嗣滏۠ᾨㇽᝲ⳷㜇徾姛弋㧒滟橳涧ℍጕ濉⫑㶑኷帾䂻㞊ⷕ廐㨼⢧⟍得᏿瞊㴧㒗徎愚⪌䇂Ẍ㸆殟ࢭ篛❰⭬⴩甗奾癒䫨㶺㺩筷⦋⹜瘕垴ᛘ擓ᖭᅚ箽ᚣ濏຿岉珇䠞扢堈㞸Ạߓ洯❚⬊䏏溵窒也♨ู㱻彧綼ম۷ࡴ尷翓廯˯漟妞Ⱅ考㾇〻篿嚏㦚ᜍ给㻛㉘琟❎ᵪ偐⯑糚咥⽨㘧䀿俫罥綕璇䃾傛⁗㾉幀ޗ后匛珨૕䑼ڭ⯱嬣劫㑯彫֏燕泒拚璍�䇫稨劇䲣嚘丅心綪囋呮氚措䘿兖ٲኀ痽䏪ᑗཻ↜౿帡悧␿⿢䇑޵械稝㼗⑛㕪䍣楐㭵㼱䈉㋟㉱簐Ἵ嵣☘ᨋ羰䍚ී楡碧਍痈戄ښᇐ硝ㄵ籚⁞㕻噝桾掋㙶Į懑尷烰槣ࠬ屐{䎚ྻ奺戦琽⫗⠰䝾哨砨杫㠫䰠Йྐ㈄勚฾႙戍ܲᴰ砡༮៶䤓ൾ㝚ѱ毴ဦ㒍䵏故ݢ䷮栄ԩ棾挛垶ᙱ䂧堎ࢆȗࠔᴐ矝⤬籓棿␒橮௱崁洺稢䡂ךᡸ爠囈ٖ僬⎮ซ椡棧㨹咂㇚䚸浭⋭Ắ㙕檷紻໌ㄩᨡℹל䚿㑴⺫⎽ར癞⤜⎵໿咱燦⤼㇅᫒嬺ᦘ繺ެ⧧缯妰䵤㕯℧ㄿ沁ᇿ䟊ᢟ┃ᨯ橞㤃⍅䆟䛁⑇挄䨡厖ۻ⫷ᾄɮ俹礐挧໘㲩尦ఋ⊌爀➳瞠ἳ㗢㿿⊃屄䳒㧡଩ೲ⢑&媙ᵰ恱↮㑒ᣵ፠ӂ〩䥺囌◑刞⛉冈箳祯姪ᰤ炭ᜒ㌠ેᎦᒑ峡䟩ᤴ犳⪯䕓┕̵矂ラ獭᪻⪍ㅫ➮⾌⎼‭瓿㓺΢䲠㟉屦娿翩ৃ⛈ᦉ㓳穯䳸棧ㅠྗ䐹坼禨玪梘඙ᤌ㉓∷᳾礐后亪㢉氦㺸棏槀☣ṯ䙓዇伻೥᱈䥠র⅝༸㏐绬刓湌璾ᡮ䀋篟К乂㹡忦኿䂕ሟ❜湯䋓祱⭙ុᐎᆖ㬄྇ᗨ⢷⡄⣹瑄瑹癒䝗㾖叏搰㝹籆␼窉娊⛳᱅〳動㍒ე球侄㛖漇梱堠嵇䛇嗐ྖ࿵㭸䳢፟೎㸉浦璼暃妱ӯᡡ䤓毶䈋擭絕䲜㜩廦䮺䂄⇛東ᣬ玓⟮Ꮱ糨淀穾ልਇ侗䯬䧿曞ᤔ怫ㆯቚ泦珲䳣吘狜仱憊幗Қ疢粞欒旀䋢玟䱴㳙怷⦿庄׬៍濆ҫ溅筓漡଻ࣟ漞弽㲿忳䗹杇䫜耓䎯᭜㔏匨࿖㍉犜㱹῞光᚟決䮣ᰬ⤠北猢⹱㊥処ⶽ劎䗥毋殂䥫礬擟勶䣷嗠ڌド刵㛒㦶孬媱㦐㐀䅳惢㎎佾㕥樷缿↊⦽᠛栻⛫獏泚竟ࢆⷹ㨾⹵ź䣑⒄䁂'ⱃ㗶糑૴⮄⾿入矧⹸榄☔曤岜扫㏵拐㑄⯊੾宵僁祹ᦌ旌嶿Ռ惹兖❻猙⯑≅㘡劆ں窆䘀ᝒ崢筋䔒櫔ᛝ⯀㞕ㅵ楶前樲ᆽ殜帺瘃㨕᳘䋥Ꭽ佱㹑擆௎䏁䖿⃢幨᲋Í䛗樸㳞ⶂ㦅涓畅⶗㖦堋᪊皋㝎㓒㔛Ⱄ⼉㫞价傹෎瘀բ帒攐⪻埩䝫哋⻝㵫ષ乼ঌ⧶嘶徳⫽ᯏ榥竪✈⡝㚅矶๖消ᖠ慛惟䑊嗍㧎暬h漝㵕䎆㞻䶍׍ᛎ嬒磣噖糚䜂ᰉ畣㮅䉗棾柙痓ᛃࡪ琓彏槚僖换丝㛅傷⮽冀䷅坡奺榻⌦搰曥ᯩ͓㡕绘ᠼ喋㴊噈渒瀣杮姚瓶ᯇⴃ㺕穷殼禗丏᠇╺繻˙竖㋾寣䶁尅射嶷⟔㗓᛭壦旳秭ዔ䌒㍍⿭㈅拶〉碕㘋㟩届櫻湯䷓⢅搾漛㆟᫦ὸᶔ淀矀͜养㮎᫒猚䯢ⷎ㏺曖滾僄涿㙿ᘮ掋甏⴩仼᭲ᑟⲉ⢗炍禀嶬䎨⦳㕫ᓏ揕曻⮍䶅㖥淶晽ឋḜ癏堖慤嗌ᵔ⻭⮆⼦㴽綧泺垓䷀ᚡ庛␻涎ᯕᆐ㏾浯㘹澩⭺䙙ඡ㚄๰㌻牌ᷜ欍玠泛㰭喚ᏻΙ㸃ɻ崶灻攥珜䠪穒∕࣭妷៿ⶍ㸛㚆嵶测䔏㽼众䏉滍㞝瘖⋾羗ᇺ㛄⤌⦛對㧠缌㰟Ⳇ㴍繖痸疁嶣癠㹞栧琌㬹᜺ζ渠矎ᾖួ檙ⷘ瞧廾稧౎৞眏䭈Ὧ㘂堗ᡛ侀᷺噙ᠯᴧ椵梐狩⏜ฯ㲥縮停嶆Ћ堗怆泋☿࿔攔朇淿尣唖洖ᶑ㦮㘡崁瑫渿࢙缏䯂᰻㹃䛽拺䙄喻盄⣱硻缏≛䇤ݮ渃㗣儮嫺ᎍḍ཯場፧ᆌ璔࣠ݘ皆Χ᢯๜丠桩ྲ征晧挽撚㇪㰔౸笃玮⩚ԝ搓矊঑扇〼仗䈗䠎⸰缝瓧ਗ਼օ㢔䎯墩紛禚⟰半歹῍兽嬯໺澖⎬堄㭑撧㍍犓湮➑⴦幍眄婟ᦝ笒睟Ⳏ毧䠼粚⧿䜿氤犭䬄⋾湳Ꮊ积䆑瀝䯣≷刌ᐋ浟㪵䊗峻ᔟ揵⮒㸹獅਽拒娘嬸ᖠ僣囮熻㲀厣࿄㤉繇ጾኞἙ䟋⼌粝嗯柼别嶸埌孒漇֏ん夁杣淤熕澮杛澂珿ើ㿶摻�ෛ园摎἞ގ擯㖼㾛෹事崾炽玼⪕ᅤ៧滂纝䰠⠣ⶑ↦ད㻥箠昼畖稔某彷㉝伖揽紙ఉ૑㯠摻㱼塐燬ⅶӘ糫囧⽛㎝琖京㥙簇垌窔娍⮁ب籋稖砸ㄎ䯈⺟᥅敻㡿䦐䨟ᝩἔ癕榦歛ᦑ䰙眯娶碠撠䤥䁔⭤ⵯ嗋柀兽欓�⹜㣾洋᠏暝槲垢巳㖃槎站း縆㛭㳻廧䵽䳐ᒸ瀳䏝ㄓ沘㭻 毨㛅㮉棇岎禕槯杨ང畂濏绞ᾑᯅ䚹㾎僷᪽䫛溧ᝪ泪笳燮彙䜑⯄〃㧅灧傫俙㒝ᵵ⹓孍嵗⚬ጎ㦡盙㲭浻堏ૼⷵៅ嵶絳剸௸㜜ⷁᕥ戈旧⇾㬰夅坓ᶲ灣槯ᷛ䜙Ⰸ㙫ܽ珥ᙍ㻔巨眸廎ࡥ妇↋土⋍潇㵅控亼㗗Ḛ⎸㛍㐑㌶慫ތ喣濯巳㯛㷼⏸盔❲Ნ灻竖䧻ἁ刅殜嫓⵷⤵⦹䧡倬汐磄⺮㧙䞆Ꮳྪ㥝簗帏析瘘⯀㰵㠧櫺䊠▜綷机㧣盻曽玛ϴ㞥庾碧税ᚌᶍ禰乿ợ烓᜼ݖ⼜㌧ḱ璓低⒘−䯄ṏ㧺溯橝椞㼗緶�僣悿ඈ䶝伆ẁ㶵窗ኾ䤙搙ྭໍ㩇烺㏺䝳䗑ῥ尳旧ⵝ徙爋㝖廷㞋䦎௚䣇➱㛔緙濺ᶽ総䐞䝌㲞盧堎濹缃য়溾㧓畯અ眮ਊ⟬ႚ熋捯唯稕毽ọ㺞溇䍞掐叻俖⼙畒௎條⼄䷘徢笕暧䪼ⷔ縎⠄澦硳朗䒚㨃寒ᾟ㧪捏ଫ儔䜙箤ᏼ熻徏㹾嘅玶住ᯫ竷ࣜᆙᄑ俨㴃幣剾晸㘓Ƨ໺烳燇⇟ۻ䯫㠙㷖箋呾▚疗帍দ礶璏燔Თ䞴宓ᜎ犭檓↚优簈漄籥毗፟խ寠柉搩瞑据圼Ἒ⟝忸纓磏坞䬚㐅瀆㷼ぇ䋦猺帓矐滀硃橯糾ᴞ淳涧㶑照澷㌼䎕⟨㻮፭牼ा᪗䘒䟖㵬瀯儾厜䘅栓✆翱⬷撞唔䟤䞵嵸羵橾⹛夌侽庯㴙烏ႜ㬔㯷⼴籅看䥟仟ᬕ毪澼䐕爾犝㨒㞭澠緡翗䜿℞䘙矱㜙稇摇劷䜯栙笯惰䵾㫾ࠌ渔淔䔵粨政桿䂚揰怗㴵罇泾㹺宝〘ᵕ絳慿㎟ේ琥႞⿰甛䷟䄖֑尞ᙺ缫縷੾䘔㟿岺䅛熅䑓㜞㰕瓻㼷彴矿ᐌ埘䩿澖㷃篏䅿䄚珐戛⽐沗扟␏䯎ဂ箬ۻ焵垿橯ࠗΆῦ翓箷㶞樘俲㷩籹媿憞䇲磆応圓绯砾磌ඓ帙ഭ缵㤧卾㡙᠟⟖彝翇氿䚮㰓ㇻ☥縅㖧惓戙ⱺᒋ༴䟯盿娝次䏠怈簹绷功ᶙ⠆䀇ᄇ絿损☝砒忢翭綬䵀晧ᙏ㠕䄐罨㋞疛⶟▛࿣侅籇甞斟尞堖羫翬౟砾㰞〖ࠌިθ㽻㹀̿硦璻懟傟᜞ڜ㰙䀭Ď㉡p¬ẙ絠ӗ灔ڠ∠寞㥼㏙禔㸍䟹ࢮ㽬ľ㸋硯爴ӿ媟ພ㪽栦曱倽䁂㟋⼯㸪尨֎きͿ庠礞樣滈倩䎃ʰ彘㽞ǟ㲛笲皟橿幟㓾Ⲝ氥࠮Ϥ၏ㄷùİ涁礜ᜯ枈؉ⴡ㔣紻␕␃埥群䃬㻌ˠ壨࿷܁ᵠ刡悙ᨤ倪،柶䂕䄖㹌淔ދ熣朿䌿✞လ瀥䀔ࠂ䯦悙䄓ᙒ⇲঳獟泟䮈⚮Ģ䠛椧瀍濩䟋✼Œ㸀硝瑗攗嶠漞ࢢⰛא⠽ᅸ羨⃉繊Ȱۀ矶昰㠠售䁽䘙䐯砌恖㯁䃮囦˨㭚ヨ᭰₏⹡㾝縦⨴ᐷ灙Ⴣྜྷ乑̸ߛ瞵楰ㅀ愡ᾜ帤娯ᘂ拵ᾦ❊Ǡ砥ʧ玈ᵐ⫧ᬞᜣ値堨ఽ၈ぴ惰绞̆٧煠ᰰ㫧ᨡ㚣㬧ሢ怺⡗ₘ䃷Őϼܯ璄抰㾟ᘡಣܦ⠪㐹䡕ၶ桐Ḯ粎׶ʨᗰ㧏ཡ尣㊘䘒ဆ៹႘⃙缉˨Ңഘᚷ䅤⪞㱽䮠䫅嘪尢㧞歧㡓糑㧢࿪䂨㙣̡㼜値ࠖⰵ矩႑䃸⇺ࡑޟѤဿ堾ㅁ硢撥⌣ 柾悂羀㴔䍝㡌௰Ẑ㼰恁澜♨䐕㐃嗧恦℆ℶ岢ܪ痀᛫䩛⎡⠝✧䨫琿䁅ぱ䃕䇲ᑥܘ଴አⱻⴡ㕣墥䨭戱⡖⡡ს䇼䊹՚瑫掛䔰佁䤜㤧ᒷࠊి画ℋ⇹層ڒ燤ᓠ♰冎⪢灙䆵將㑂䢒⁏Ⅱϳ㭿皛䌨㻰瑡ᾢ亦稫怺瑎⢕₥↸川ۦୟ栝奿ܦ⵵戚ጭ㈶㡉ゟ⃝⇋ȭѿ㍉▝峿㡁怣禧囓 碱䢒ₒ慴綎磳玟悁匀偁挢喦簯ᘷ⑗䡥ホ༉䏅Ѧ࡛槨グ䋁仢耙吕䡂⫬翄ṹ㔐Kޮଠक़㫐惞索渥㱒堂Ὺ桹瀩慦ᓦێࡂ楘⡀噡Ⱌ㗚࿱䈷屋墖傷⇝䎀ռରℨ⮈ᲁ揢涧䴫爰摝⡱僪㺺䋅ھ਌ဨ⌐掁Ǣ⾧礪ᘼ᱄毃炶ↇ簷竰ଢ᜘㧠孁䳣㪥笯樼悼䂗僳纳ξѶླྀ䝘㶟ṁⳢ灤猨ℾࡖ碏䡀䅝ⲳԲ㈤ⓟ墨䨁杣ᾤሮ昿ᑗ᡽⬭慆䌲ჯ烂ᨤ㔯ց࡜ฤᴭ朅告䒟悺ᅘ⌈䘁࣠ᦧ声竒䐡Ḙ⴩ࢄ䑀ફ咕岜⵪᫤௛湿帟ጁ倝഻播㵩剉紥ᦕ⁘疯槗灜ᯛ䪰Ű終䯠ガⰵ䉖җ烎℥ঔ䗠͒ᙄㄵ঱㵃р಩⑯㉛ெŗᱎ∼䙂গ棄㠀屡憜ɤ沯瘰笷摷䣽㩽楜䠙ऒ᪄⶜ड़ߵǘᑴ礸䩖桓✰懝綘䞦ဂႏ嚨璁ࣂ楤ഢ┽䣸咐∬刑⌔䚸ೄߕ器場佂㕤ʭ㄄ਖ਼⑽ラ䛔ඌ䔚ҪᓴⳈ榱廂㩦綥犋牒䒎⤘䈙⌤䘵௒ᑔ㯜ࣱ䇂穧碣唳ᛲᒂ棱冟Ϧ䗳猪ἤ㯈枱嗃田嚩䁯ᩁ摠㦝懲涋㣍೪Կ宨琾矼ᦥⲬ䘰⩝梍啽冷⌚䑍කᒔ㑻㐠Ⴔ㹦㲫漣ਭ㒐⤝㺻∻֕ບ᪄䀈櫮ᙍᅦ↪唰牗幀剿准∱䜄⅘ᔤ⼈仁߃፥ắ睩牅౻椘㇏塓j☑ϴⱄ♰坘俙䦫悡♐౻⣩Ǝ䎶宣໊Ṭ∠੼⼵哤䠥匹穆恀ᩢ䩥啜䜓ဂ乇凫Ⓘ矢籤㚨堆剃悃⍨兢搙䠍శ៬⠲⟱䪐㘂ᾠ଺㉍Ɫ湚㇕䈹䕦০ለᏨ监ඃ૥㖫參噓瑧女儻㷨桽஠֔⭈梡熂捤䊨䴵婗Ѯ棳ᇶ戩䒣悖ᜬ㚍║ᓃ夲㲬ቋ噓篛⣳䜕油䜃൒ᘼ⳸庱㄃ὥᶁ․Ҹ㒌⢻É扥䓐犺昸㶈寑ႃ勦⼪罡之᲏墴煊排剥༿⡢ග↖愂൦䲩圷⹓傄歑㈈換؅౎ᕑ嵨犜欃瞐宭笼湁㞵䥵糌䡭榯઄䆄㨨緱珣⃧䊯匡瓵䥂ᵩ爞姐单㘄淫媘䙑㏢徧枮洶‫㱪礆國挶焿Ӫෛ䣨示཭柦徔䄻㩓岄壵ᅝ抅䗝啿䮜㬗㢱ᰂ៤㌇ⷫ䮯粖磧焥担䓟๎ᬶᮠ)漐၅㡅缵᪷䦤Әਗ挔碞଎ሢ㏈䌑俀渱掲磀䅐䒎⨡†ዼ瀰䦡ᠢ┤向竢䗤缨㶬⅙ṗ㰺ল〨◠䩁ᖢ㱘偞綃ཤ掩(慛ɫஎॎ炝ၙ஋䡭ᢠᕀ撡咤䃴០ᅟၫ丯惂Ꮴ⚅༘ᶴ◸纑悂桅䵔笽ࢪ≰䓹঴䃤⚲ण⛑୤皨愲片瑪丮未≾垉੻岄䓫㔆䱀Ǩ喩⯼੤媫朴م⑥ӰॴᎸቸ何涂㕹⭆♂ቦ籫ḯ煆㢟ҧ७᷍£柜đ䙨㍊ޜ則杆䒰๠㸺炖⪈房䖰両ᴜ㴤䈑㖐䥇澲䲪䥎ነ㕣঱Ꮂ✴䳪ڲ㹄䑩Ⱑ剋洠㤻㐤⠤䓤䦱ቓZƝ拲Ⅴ宑溢湇榨ᠰ㙓䊝䔚䤽ኺ♾�⅀䩤壩⺳ፄⱨ咿㹯枠簺㪉捄⑌二Ӓ㝐᝔ൡ姥ঔ㨳䩅≧䒮刊ኤ䗠⑉ᇒ⪄㋩液槧䩯咼䥓㉪攋㼇Ꮒ␠ฟ曒⼄兩琜殢耒₶௰犄㢧曐ᶦ❜䪹଒∟᭬ၲ彇瀖Ⳮфቨᑛ灖䃷Ϸ෋惎ิ滎址൒⿀䨹BⱮ⓯ঙቔ␴䲩ᖂℴ晉冢䅄䙬㢷煔䩲ᔖ皊哄✨݆⋖姄擩畬ೄ〢㊻᥀抆┄৘却✄䥙ᕔⴄ摩䙳ⳁ㥯⹦ᡝ䪇ᒶ⨎䨆⟴䫑ቲ【ᭉ扲繆ᕯ嫣敏犛䒠⧺ⷪ㫇㓅 䙄䵩棂弁八⪶汿⩬攁㈊◆♔䬚᎒⍴滾㶃̈́㡫玉兝劍哋⨅梍⚔䫕ᝊ⪴桩樰⮒猥䷍㕅⩠㒺࠿䆣⛰䢕ᵯ䉘笩沃䃅䍩ʨ൒ᩬ0楾劳♘爭ᚺ㵜⃒⤳尡囓樢≊斩哨䤥厕ȹ↭፸⹔珉ӳ⻅९咾ⵈ婴擒榥剔分䲩ᛷǨ㣉僳畅㭬嘣浔䉿ᓃ䥱抡⟶俅᧺㭤㞉ᥲዄ⥪ᢿȺ㩤擹⤽吊⚪价⑈༤⾉݂毄ㄔ溴ᵕ沟ᔜ⦢匭䠊䧽ᣄྔ淩淲᳅䕯ằ查㪜ᣯ䥞掵⒜二ղ㿸缉羳燄㶭Ჶ畅穪⒲怷嘋穢䨖᠊⩄徾㍲寅䃪咻ॉ⪏擧⥕匷֘䬦ჺ∔䗩䍳╄孫纾͚剦೰᧺ቤ✈䴕ἒつ熩ᴲ盆癪㜃࿹≶哏樛挩⑮䰍ᩦ€礹䱒⒇ጃᆻ畞穴Ⓣ䣮ሲ⑗ಗप㞬欩堝㒆⡮↰捕ڔⓁ᤹匟┑䧑ᘺ嘴竩梲⧇ᙯ⚼⍛䙶㓴樉匀曦䮁᭺㰔僉忳ኅ♡⦵ൕ䙦䳳ᥙ匊⑙হᮚヨ姱䏣廄Ძ妼ፁ㡥惑ᤸኬ摔䴉ጆ♬䶹孲⺆䃯岽͈橠㜴⧜熾➁䦣ፄୠ痱翝咄٬↰╇穪ೈᨈ㋷Ϩਣᓆ⩌桹歓剄䱭梳ᵒڞೱ॥㉟⓱俳ᝦ╌䒹糒撅䫬庻⭙䙱⳰᥶ፌ未䒣᫶≔檹咃壅ᒪ㪴䭘窂㔙⦞ዺ撆⋫᱖㱔皉盒ⶅ籫ᖾ半抝Ⳋ樓䏹ށࡓኚⴴ絹ࡳᧇ᫪熹⥓⚗⳨ᦛ㍦曙䥻ᶄ⫌憹哒䞅㫮ڶ᭒⩲䲳᧷㋳⒳๲⚪⬄揌拳䢦ቅ㶵奝癩沸ᅸ拶攭倕ሪฌ仩獒噆䇬圳硩暈嬿妀玿⠙䨕ᜮ㻴潹囃綇峪↹獕ᚅ唄㦬⏤䑺䤕ᮮ⽌喩当玅籭禳博婾䲡娂ⷶ暆䣇ᗖ⊌䡈䃒岆㫪䶿㍖沋Ŕ⦍㋘䕛࿹Ⴖ㴼䝁䂓揇畫㎵卉摶喎㦯㍥娅丫Ẫㄴ枰̕憇䷤䖿௣ઍᓟ姓挗䒙俩፶⹼䵉䖓暇痯⮸㝈ᚇ撾㦧㏭杫万ᣂ㧸䞑河߇๭厴݂暕峃㥶珹昅䡍᱌⋔䟹竂ʆ孩箼浜嚂Ⲭ㧩㉎擵众ᡲ埼禹⤓⮠揭Ƴ᥌੭墵㸽粁杇䳷᦬⺘仙穒Ԇ㩨枷獛晣䢬禘㊸暨䡏ỆⓌ溩̓ᔇᛯ綽体ຎ崝⥵狁☠౏ዾⓜ圹̵庡瑨ྦ絲ڗ㲧ሒፓ朏പẖ⺼棩攵㸄⃴ី὚㺟㳲稌㎸晣䰗គ㺔䲩昒䔄䏬஺孜㹫岶祋珬搿䩇ፖ㑄焙Ғۇ俭垹䉋ẖ峦秙狱╿䲇ᰮ㺜猉梓ᅇⲑ䞱㽓纐㴋禶⎏斯䧯ᵶ㽴候䍉倇ሥt神皋約凪獫⛩䦠剞㪨篑㸒⌆Ⅺ㾾᭘暂ˤ秖可柉䦹ᖞ⦌丙划⠵H䞷佈㹹䔓ᤤૈᖻ䭣᳒㢋ᑜఒ猄ᡏ㐊湂➿⒣䤵㊉杧ୠ嶶㌄搪㘫漇桌ࡿ㽱㹦糱ॡ牤剷䭏ᡦ㩜瀙∫耄䡎眾ག㹻಩֒ః期传傞㹢箉砓⯇⽩ⷁ⽍劁䋮⥕猴ᓯࠠ婡㼜瀥⥲拄毯s嵓幡䋌׮ፍ曞䬩ጂ㝘圥儒䌆偍焅獏㚛䋢秡ઌ★䧽ᢞ⌜摥⸒者ⱎ⡶兙湿˓ւ勂ᑕ䦨夒㢼復≓☴忬窷ࣇ㲒ʵ֣㎲ᘄ⡶ჶ∼网偒ׄ䬣᳋ᱝ♭⋘�ੈ曛獧Ⴆⱜ䥥䂫⦆ᩎ㑻གྷ牏⋳祀僭▥䠬ṟᑼ櫉᱒ᦅ၍₰ᕉᅷ⊺太卆ᓥ伧ᅑ㩌斠攢⾇嵩窷僕㺍㜪؄㋟搴⨡ᤎ㒔伮猽笵⑋掸䕢煮拜姶Ჲ࠺ǐ༢ᛤ廥⤳眴圤㱼磚㆙Ӈ㧜ఆᒠ⾈ᨑ⽝㦹瞪埸䔢籷⃀ၨ⌕ᦒ牢ᔼ⢗ቚ〴姥Ἥ竆慏Ѻ࣑㉼䲠䧒獞⛐⿟ⳡ㜲梥☫炷ݮ檳曱㎪㽨⦘䮩ហ⯻ᵩ⧲⻹䱫࠴ो↸⃕ຟⒽ禇㋨ᗈ⭫ᆡ⼌嘹⦱䐆䃮変㣒٨勻䗻珺᠘⼄匎㱲嚥〫ᠴ⁈ᱼ浜↗㓈䕒਷␮䭨妁ヂ䳥⏲猷乏⾶哖ᅮ䋉楺䩯晒⭣ᛶ㥜౅♫嚷㹋抻磌㪟拵㨛㋬撂⫔嵎㝔殥ጣ᳆䕎䑴ベ⦅㔖◞୙ᐣ䠨墉⑴悅罫椷⍍屶㝌ॳ拜竍狾✄Ⱔ帩㥒䖥ც̅╍澳ᓔ冚㋄斉匼ᙊ⢘冹㣒倞㐍ⴇ䧩ᘭ澩⺈抧ʈ勧˶⫥᜶⪬緙剫⊆汏ၴ泅妙ᔜ㧝䩼灒⨔坞ⓢ缹⿓浅⟪晶泇⁧㊣榨䪕⑲⻏浒⪒斅䁓粴泭⹽祊奯勚╻玍ᚘ⻴嶹⺒栉䫓禴嵎䁶䣖䦁ዬ䖰䬜笽䦄倰−䥅秪撴ᚐଉⓟ䅻勇姢િᝫ些ᣆㆬ曅ἒ掵恎䑄㓀㪔狞㥜⊓ᝳ䤈傉┲䐵၊段࿫᩼䋛㥬ᓝ㥬䭉ͼ⁜倰✪䭥䃂Ჶ獊牽泇䥼岢ᗟ䬜穱⼰偶㞔䡾൪ᨷ棉宻楔ᢈ㊲ᘁ䯯ᙦ⨢哥↼担ᜒⴆ睌粹⋑祴搱ᕏ䭯ᔐ⺔工⬢碵毫Ḵ棊瞵Ὄ奱㊡秪⩞ា⢔劑⤲䊮¼ᛇ哌♵磖㹡䫤჊⬏ᑝ䴗ᤙ㼒寙䥪灷╋ᅲ睎⹥岯▟䭝攀ⴉዅ⣪縥孳ṷō奲ፌ祣䪢敓᎜嘤䠼嗑∔憵恫Ⴕ♣䶶䳏㚂洃敹፛ᘥ⵰夅㐄曹勪᥵ᝯᢵ捒ᅢ夕ᨙ⩱擮⪐Ჵ㘒垅㓊ֵ૊屹ᝊ᥿勊䕼㏌㣐℀丞㩥⬤罊溇泌啱㳞剳⬖唭㌚咐⑯ᕞ㒼媅㨒ᔄ畎ᱰ峜䥧猅斳䬬⭑⻀剕⃰✉睋㬶᳨䕵勚㖛猅憬䲼杰ⲉᎩ㏢䇙㬥掷ɮ䁲㫕妔઻凜只囅ⴈ卅⍬旵绫圶Ⅾ㵴㫊♭䒱䕷拙杠⺑ᬶ㬊籹Ꮻ尷惋籸竌ᅠ⓬夻䩔栝⯫ፒ㔷ؙ碊惘㫍ᶹ拈ᕯ⫤㧻厱呕䩦娒༂拵囊፵ው嵹ዔඔ䫤ᔿ爩吭ⱺ屉㘼晥囊䞴䫌䨼ۏ慾㌔㖯⩥ᒺⱴ姭㜒幵䃫ⅶ⃩溰ᛅඝ㳛秽⬾唫⣲嫅ボ擕⣋㚻䙍Ҽᛌ亂嫉㕦⩄咣⬊儕⊺卙䋪櫷䁊墰ᛕ⥠瓅㖉䰛┗丶廍㖺椵熋嫷呎皱㛔榐૨嗆⩁ᙺ⪤彆⏢篕²᥇ৌ檵㛍൭嫝⧎䯄摕䭤帍␊勩४硶⏏䩸⋕抛૛ᖌ欣嘉ⶔ匹㹪䁡八晵綩➼䱋⹋勇榶櫣ᑗ乮嫊唲卅̋槷ワ笽⣒⹓≎䐷爫␬ℶ嗎〢筕宋䤢ᯋ坴䒼Ƈ㪶䒈䣘枛俼嚹゚絕䌊ᱷொ歴໐ṷᬈ㕃毎╠⡠劍ⴊ妕伪ᛶ⛈≶糈柋礆䲰刽喅⵾嫍㩊圹ⶀ᠄俋ླྀ仚涄窴疱ዯ垠⫶୭㛂䣢痋㯘Ō㽴‫㖆窹幸犊杸玞存㪺怕؋ኄ狭ᒷ捌֚ᆜ畫૪⟏⥪啅㤲唕ū榆橩㥲ǝቧ櫫䥱氂圂⢴庝⁊尭嵋◵⥉惾仃Ό㬔ൌ㍤呰淡姵⥚嘕䈻ិ䩉ჲ捆嵲笐ธᘓ✋Ⱂ嵣㔺䔕ъࡔᲨᚷ廖㶇ܙ㗎䬂坏⬱厵␚䕵㨻ᾶႌ敽ێ⹮沿▫૶ᖠ梌孵❺姉ᾊ䳴煫嵿䇗⪕竍൰ᩥ⩊⵱咊Ⅼ䋥ফ濇ᗊ౰͚⎝櫞൦᩿摷⭑嶃㌪䬕⾊㎧㻈㦲绘ᵷ檧ദ᪷ᒯ砑夭⪪噅漺ᇵ♥൱ᇋ祱᫽ඝ㏧喫ⶱ坕ㄦ張䔺䲶ӌ汰䃆፻ڠ祙᩶咥省婍㗚䦕㤺堷劋亽Ëᎀૌףଢ଼咥䵉ိ㛼罙ᚊ䗷ኊ㣿⇁Ɲ⚷ᖭ᫆ᖇ⧨嬳ㄦ繥ᠻ穕䧏䃼燍᚞⋪痄᪠㐺俄役⠊悁濓婣煎ᓲ滆慹⛴䶙઩ᙤᚦ儮㞆嵉伺絗渒೷⧊΀✑䴤ᯪ㒉䢣᯳⤦秉瘒瑶墈棷仒㩲糱ঋ殝埡䣞倽╆䡭瞺䱵Ҋ哳拙玁竱ณ⬄Ⰰ⭑⳽㫢煥人㝖ߪ⵸ㅫᆈ⒱ᗖ᪮ל┹婭㍺䉍涺ۅ擋㣶䗔䈱嫈ⷆ櫰嗧⨐嬥⼦嗭䌺嵕淊ฮ潂䭴⚴旋淃嚢䥢嬫⅂泥る淵早ᙱ䧍٫䌌䴮≷昮佳ᙋㅊ䉭㚫㽖碍狿懎䶜竡椭㍅㕨永嫫❚椱࣓ᧅ⃉㓳ˍ卲⛲丟ᬖ唊洅共⿤烍媺䪵ᯏ⦽㇩嶚曘ⶩఅ㙬毕嗽␲涕㼊禅䷎㦸⧃亊㳿啜⯛⟤氦廹Ⳋ乍娺磔ƌ۰ᵒ厘⬈浝犊㓵䷓ᰋ㽼㉕潊㺄厈⍰痛䮞匇⸔媫村⵭垭㚜䁹䳺惚槌೷䧂㦏⫊෸婕呦毭厓⹲䵵㞺㗖㣩穰ⵗᎋ更⧍厣㘊槚堍㷆凍䣺⛖᭪即滆䵲䪥嘊䫦啯䲆刻㚒墍竻៴䞉潹ה⭬窰ⶻ䯇㑺⨲嚦㧒儅䖻㹕叫䓷泒玎ᛦ渘嬅搾毌帳㚍ᨍᬋᗗ㮎櫶᷄㎗曽ᥔ婏㞳⡵圾◖侍基൴絋ૺ˙筪峨䧠㫭㗶瀖坋㰖擭࡚ᡷ䳯䇽Ղᅱ䋡㗈㫙㔴⪕嬧㽖嬉獓㢗喎䦱䗄ᵴແ涻ᮭ㗎槶刽㽺復⅒ㅷ澌Ự槞䞍皬ᶚ䪽ᑬ濭埖✖廭ⷺ᪅㤊ᳺ筓͹朙䵘ᩨ瘺歃嫛㶠䂽㈻؆⩋ჼ᫁㖘䛊渇⭇摉檱勧⠂槥殻磕柨⣳揇❺囗㖞㱾㕌欸嬉Ⰶ瓍手㋔㪌廵ෘʹ撀ⶑ嬌璨楣姪⼢媅ᷲ沴ⴈ❹緁宖ົ䴾㫈ᓫⰬ呉⮬喙拓㈷侍秾揆獸⻆ⴿᭋ怯⮊勵⇂剽曂哔ඊ姼᷆枈皡෉㬚᝕ⲙ妺㘺䘙✲ŗ唌㩹収䭭曲嶁᪄瓱栩娦✬徵畒䶗㱏㜴巚ޕ仟Ḙ孺瞹下庩ᨹ⬀䒠䛈䟁筈ᯎP溢⻃㯪瞉ⱼ孕㌳㣽䧛ᘣ✋⡨寄㝤ጹ࠯㧒Í暻圇Ӑ⛽㠡宔㼡ⷺᏓម伌巯䷗ͼ剛屠֎粒⯚宔眈淽㯅㜾䁈☧㪎痝榻巕⮚堩⚐ྖ།㷰䆠྇漇嶯㯬䘍椧儥唎侽ᗺប୧淲篜摮ጯ嵰ⴲࢲ৵摇宦⩢ಚ歺疳㗹惚䭭ۘ㷽㬺ᯂ೧徯㜾⹝ⲛ㚻䨋ᜋ擮侌ㄏ嶿櫄ݵ䲇塝௥㭝射╳ե⽨㩫ㄣỼ㷍䅈ᐓ溉嫥⥤䙽墚罔┏㞤៏佦〡㵹椅璫桷凑Ⅴᵝ琡祡綍杰ŷ྆廂䵐箩睫澧孏➾绝ও丁瘏ᙧ㵗戦廖ᚢ竭矻滭妧➶楝攘眖䣒呇埍䖴᤾㷩㔿㦽⯇怏⼘懝Ḻ嶗⌈姄࿈∤ⴠṌⳃ瘥嘣溯➾棘噳࿪爉⟽敝筵᳉㵐㩃疳潯勝ᚔ碱㪚ᨖ狍寻䟀ὲ仚㴦㕣璴潛圏⯢֝㰃ᕳⰍ姉㤮侓祬庡箑皗澀婌ゾ擝⎛㨕㔏柳柗彵ố綳䂉宷樇婴伊๝娛剓䔪秴⟌ὶ⺦縅ы畏梿徵ɝ㜝徛㰔热㒽濇佱纾䤼૸囏每弫⓾紈㪚栔砉欀翏唵偿㻯毨橾֟幱㛞䛭ᰚᰖ拤翾ᯅ冦瓀͏符矖ś欈೸&ဧ㼘›ゥ�㏘廛㤽㭨瘟毯岿အ尣ⳡိ䣁炴ोĞ桼ϰྀ۠Ṋ惧䘡堝䪁坂礖㯺插垐⛬ϐڨ౰Ἲ䕠戡䔣刦䐮ⰍǼ᪽䃮ƺ絹笋期櫣冠摢℣樧㈔࠾すႍ彴刹̰۪ጊ«⌑ㄝң䔧䴳ᐼ㔬柆⍬廆Ⱚڐൈᰫ☵ㄵ㪣䌧ᨯా᭭⪵ℎ眩愙⡦੥楇噀紞㖣屍瘮ὃޯ⪢ᇛ绉瓃咒ᩲ澋剭㦖燝耚㫹㰺撇䍿愄䱯gᘘ՞熨㍀塠䌍勊䄮㬏⿼炖ᘢ⇔ᑰ檢▄᫢䮵Ł从ⰳ㙰氿ᇈ⢕Ϋ䨢㶷笧痏濏冰纔㥣抦屻㯤㑕帯䝄੾·䂕㩲䤪买柁亣䜻㠔ợ瑐ᅕ用憧৷咤⍡Ո㰀檁噁‛໖帏呚彮ラ䆼介ة偿ර⧋ⓔ䫈ဃ嬮᰹ќ增䱞懑愋䪢⚼᳢嵼ⷧ㛝⵺ㅥᮩ屘㢘㽵⺫᫷ۼၻ沍⨄㪭㯣ăᒡ捂匹牏烳成絃笛䘢ᷛᐲ㉈偃係㰢ᾡʬ䮳Ȿ䣸␓↲Bᠸ㐳㺎塃千䢯愹㧫癇ऊᇜ⎿⌏䄧ੳ头⒱灃璧₯㝔礱⒁ᲃ䓂⍵挑䗐刑姮㨎⑱▝ଔᘹ曶揚䣩㤄ㅌ䞝䚒᭷和㓨啔䃡ࢬᲯਖ਼⒎僿ᇩⲾ⏅࿲Ṩൈ琈俄羦杴㤾ࠣ歅㽭∋緂܅ม⏦ᗈ桱燃促Т┺䝣䯨ℑʷ㷙孢വ൒Ẉ楱秃促参庯✺㉍棤g㈝媡囀ᬳ庠惱䏃㵂庯丿ह੔ᣠ㤏䏰ĺ┊睱劇⸜ᯣᣦມ挹䩘ಅ焌壏䍳稥჆Ც摜㭑沃㳦ク㠣䉑㒇ࣺ㈝⌹䛑ൂ᥌㽔ἱ涃㌛ᝂ⊭إ䰦敗䢠⏸䙜䇖᭫堰炖䂃䫧బ椼癚沉䕑哴凣䛍ʮ᪬㰏壽ރ㵃༚↖婔僖椏ᇊ捣䠇೮ᨾ᧘琈伣Ӧં⊬ࡓ咟棹演掣䠙ฉર㸸浈岣兦穧倠㷥␦䉇偘ó冊䑺῜㇈ა┤Š⾮┣㹞䒖䭹爙⏆≟๞Ἔ㰘耑泱婦栠Ἲ繜粕磻ㆆ捽䝧ཊ᱌૒⺑䎱ᛧᎮ⁵⅛㊠რ缃捙穡෎὜㦤礩丳紐㝅߄礵䊛夎ৈ㥭䝣䓚Ȑ㻨榩耕湦⮬ᠼ扞岙暓৿ㆳ碗Ւᤢ㽁ᾈ㰃ᅆ๐º综㢋汽爑፨⧈伩ᥰ䩄櫸䭔汨ᚯ䓱㘥⢂⾁ু緤⚠为἖᫄涁䏊巂䙬ά䀮⦨筻ሑ粱≌亵⒲㔷⡑瓱㵂癯㤊幘璋儐狦ጯڋ愆ᢂ冤穥ƃᓦᖭᘺ㥓ኆ晰⧂䴪⠇๥᪤ᒻ⪜扒㘴㘡哈⵸䪓牒⦧፮ۢ䶙䮿ᚴ碉㉍ἒ祯኿⫺犊攟圅䶹卪䲥ᯔ㵄毬喩⫆疖䉪啟Ꮗ幽ለ⴫⬉෰ᣳ叅⒩䷘ᗪᵭ焾ᥰ᪄簶㪢⎈䟹㔚ࢌ㡨毮ጃ碫ᱬ窿楘᜵楸槡叁檹ᓍ᤺㢇ⱪ竃╛ṗ⣎橜䢙䵮䧺䏇䟘乩欜吨攦盳呺⃀私⹡䗎甙缞緵ޮ上ᴪ㯴濼ᩉ䟆⬵᪻ᅨ沊殙䛰උⴠᯅᤋ᫑⋦灓䀕⃮㊺ᱝ䪕 ᨔ䦰暲䴝ᯑ囃⤹桓ᛇ烧഼⍼勛೷⦪崫⛮丕ώ寯⌠у䝚䩈ᛋ⩓㪚択硐㏁ሷཱུᵼ㣔柤兽䷧൬䅤㍕仈唇嫟Ṝ暁作ᦆ㱊ㄦ罓㗆梄禺杹⥃Ǎ懽䌰᫟ᕫ᧣䋥⌞皳咦栬ܺፙ窞⳱┉㎗娵䶧厖坆⺹攭䚆˭璸歔媏疛᧑㎿⬉亭ὂ㻸桮峙婆厮䶺剑窂洂܇㎰ᔏ㖛ᯬ໋㪹䥽㼲ǯ熽䷳᫗㕥ື秡柈癋ⵔ㵹㑄姉璇祮ο䝕Ǒ᳦⦰獟㫟啗䵕᪼瑹璓咆䛅去䍼勋#溁乒杞杉滽庍㓙糰⺦䳭㢿ݞ㪅❭㧆䖕栜ᮠ⮿ᓏ䳙經㩚൭烊䲠檃ᳫỦㄥ䬖支᪁峴殉旃䭇㳮޼祗濇᲏ㆿ䵤⛽䴫ᨨ哩⊙缕¢叭瞎䒺ʎӯ熤Ꭼ㨯䵞ᩞ㠘柑䄳喇綯庿⽙㭓犉稐Ꮷ栎㙟ᾢ㆜粦拃ȇ䪬怠䩚皖⤛姶㌨ଵཻ᪹ˈ檖侙ᎇ浬⁺孑択䄁ᧆ珤晻䳹䫖㧼檜坓樆ᩭ咺奼⥌擿秳匨᝕乀泡㲄耖厽户摖䋊᝙⇒䌈姸௽✆琰外㖡⚥䡓┆⁌䒊᝞嗜夒㦰⣼ឧ伈ᨸ㠢昜弫紇፮䬻凶檋Α櫵厔ᘩ䱐帎ᄼ樊櫳☺ᒮ䦎⃔㚑䖗㒳㐜ᜦ࿺ᨱ㵂⭥䨫繊ᓖ榼樬⺕ᔞ漕⃐஘ྡ⥆㹗ɀ嶃㰷櫮᡿棛䪒挃䖼㔩⟼〝᫢威㾹堓娷㍮畏僖ກ⌓㧌֙柗䵬䂶れ箬仓樷嫮ᖸ㝟ƌጂ؆னᘱ楐毶㎕զ傓ಶ嘹午᭿䦉ⴓ榵㎝䙯མ嵩㡢牙煫ᒆ煍ቺ杹Ɗ⌛嫃㍚ᙑ೘帶㔇㭥䳭匷徉掹ʩ纐勿䔀௒ᝣ䴍⫉㓢惴瀫儶恍瞺᧽䚂㔐㧱䮹杹甖⾶㞬柅畓ⴋ⿯便繑᪇㋤৫獏⟏䱴州㺌罥给ᡇᾭ侼᳗㷀猑稕⶷♑㙽ᮉ㠤紅杫ɻ擮廌暽Ҝ̜᢭㹺ᅻㅠ怙㖏佷㉫礷寷䉼卞㛀૸ᗁ卐坡⾺燆㇔纹漫⧆梮幺䥗ڊ授⒴⬼曤Ⳃᡤ㝧㩑徳ଇ缇⮋㡻જଈ◨⮉ᚁ啲忙剪癑礭渶忭硾ⳒẈ㉸积䥂ᛂⰲ娑㟔檄⭋暶纛奺ӕ᫓䫫咬㖉㎙⸪栨Ṹ絶羫↷ⅆɺṒ㦕㴟秛獘噡≤忹堂♅峫䈆罭枺䝬㖉拹斮䬻曰枝᫚㪊月ⓓ䯡䑀䵽㘥ℱ㣺嘒䬺堐ⱬ壙㓩◵友孶绍穻潒㧘⪵׏珺᫈⺂岒〢搅廹ࣷ㫌礋䛒㇓䌔秆⯡⟐⸥Ḓ㳪糵䵳汷ˎ㍾♕છ㳿佔歖穥㗅侭㫢捉䓳䫶僭塸狐ᆏ⌌㘒痩嘳ⱳ᮷᭺礹翓䝷㎭Ԉ᭳涚䬘旺⯵ᘭ☦寉㙚濙始〆㛍⍺敓ඊ欔Ⓓ殳枭ⷱ毥㛪紵䲫煶᯶᭽啟㺓慾ᘖୈ坷⿻᩺ᬑ㨢濓⎶敌垽楖庝狢痁⭇垟ᑞ夼㸌殥搋Ḷ㺧彽仛ڞ㬜᧟ष圊Ⱑ彵徒縙䠋ၗၬ᭽棛嶛⫹坸ፗឿ侺洩Ḧ烎儫崆嗌䵸❚喐瓾䜐涓囕〆峣㺦盵愻㫷䕯➼䣘皉䦇⧨ᰍ៝⽖季᧴柅檫墶ǭ㾺ⳕ嶖ͻ旫⮛埂╧ᰅ㗒翅穉剦㙍方歽⎃䛸曌⯟嚀湑婅弪ㆱ湫礇㡌㆏დ䶙䳽痟歪㝔䷴彁㝧⨅獫毆檎ᮻ凟㶈灷旭ි⨠團奩᳆惭勼尷忎ָ槝㎇̖丛䷚㙸氮廁㘆燭姓湖⺎稍㫔綐ᛳ嗚ᵄ㞱买漫㴬短渋罗䝔Ẍ䛔懊᜞⦢ᴬ嚨瑒妫㧊秭䋕了ᦎ䑽ᛗઇᛧׅ⮝園ⷫⲭ㍦殭䦻䵖⃀塽ᇞᶜ୪㗣⯿枟䱭᤹ㅆ眭個籗⺷♾ᛚƇ紛獕䗼㎱嫇᳉ᡚ砎瞩ᗍ⎍੨֍ᮕ穸紹竖ᘏĊ煭䏚䮝ℨ᭙笃ࠡⷚ䞣圐⇇ᰞ㛷梍婻㷖擠冝䑴䞎㛾ⷖ㮐哖㖎䘪㧓⪅嬕㱚揉ᲀ䟖奊Ⱓ曋䪲㼠碌乩ゞ漢圻㖼纬䁛䆔⻂䇺㫃㾡❜㈃浳棁滚剓㊲昍緔⨘ऌ債⏑番嵄㱈㎟㜬戨䐕斠᚝㋓ᐧ櫌潺旟玟໮ᶭ竸光渳尃⹆嚸栆ږ泦䒃㡦᰺㜤䒀梛Ꮊ⦕库㿦冽䣺暗᭮籦䗥຺富ḇ峂皩浚·㇮焠㔬䩓ᮊ獾䧕រ仪呵㮋撻⢽孅㳔㻕㛛嚖⇙旸⯟ᕪ⛶嗍㮑䃖沜᪼柎拽狻祘ᘧ㛿䕀瞄匙ᡣ㬽䆭测嗃㲮畅㏛懵ᜎⓡ䯬咀⥚৓喡矯䘁ᡗ㻮緽坛䖖㯏ㅻߜྏ简Ȳ晡癃氳摽䯯➺㌨ᙇ搒Ͻ㘥侄塄㷃㭑癭潦嫵㞾泺Ꮜ䌖沰叿柕⾘淔ࡢࡸ䥋澇庺䓱㧝䆛嶳㌏⏺琭枀䪿上寛傻混嶏㽕ᷝ䤛䌗縃导ӏ瑏㤟庉筝梫洗岪ା樭癋䜖干៻࿔澆㼄䰠4჈ࠏ椆囩Ψ第ฯⱂࢯ澗䁟㓱ἐࡴ曠砏Ⲁⶁ瞀䃎iࢼ秺剺ҟ㙂䰝屳ࠖ㮏ⱻ俑梷续淇筎汿瀒᎟㡰Н傪ီ៓㫃䂖幐Ⲧ偃灚眖ᓀ㦗㦯䈣䣼⠮瘠恞ち䄂⃁Б㡥☀ЙṾ凈ٰᤧ䰯倌䯸䅋䄎^ϘҴ࿈ᴰ㵀筮义䔀戠㬮⮺炓璓㣍Ͼ笧搸ᵐ㰭ⷡ眫㢧䴨╪ٱᯍᄊ榠晡݋睘ࢨ㭐䝁撥廚㔯儭⡠䝧℩⩻乲悡勓ͬ挠烋嬣皼ᔮ׀ౙ梜ㄅ儖䏺࣢ᶒ僪׷䯩䧣禼䇙਼⌦⢞羅ჷ捷ޓ㠴⃪ک�ôીᥡ⦣敧瞽ðሊ₀䟝ŵŖ́䴱癃桧碡嚡㈌⒔ऄሒ㹟ࠇ㘴愄㲳ر悷⮰缒⸿䉞ᒙ俙傧䏝䥂ຜṿ埨由獃屧䊮ᄿ嵀㒓ऄሙ假ܹ࿺ᵔ㵨祡᝹㝧撯夽䩙滠ㅒ啓␒䝞ᛚ᳘㡨犁皗ᦧ癘㔽຾▏⤀ሃ⏰䝃ག᷌㨈稱慃孧撯ᴽ穟⒟夋ᇨ䊉䟽烚ᾊ䆴ґ悃䮧ᮮ岯屟�ℕ缗䐅䟞ྨᮌ㡘竈ᎃ歧侮ᴿ扜ಟ礚燺⎡䝇࿁熼㿘现籨灇纮嬲⃆㒫梁ਖ晔䒑ᇀ䌊搜楂Ԫቇᚦࢽ⯠刪䡿ਗ獏㮟㫮刲㫮侩綼⅔叩橩⥝恡既懭屺⟷೦Ւ㢤敾疱祳爘ಓ䄁Ῐ掾孙綾偁䁰̉Ҳ޾寶ఠµ࿡炴笩ര扗Ꮻ希価癊㲀⺴Ὗ⫇欸抿护䪙癦⧮␴∊伸〉㹔ਁ纣敜儮欁㋰䍊唙椽䇳殊ލẨ擴煉恐ᓇ橕㪿ѧ檟⺨槶г⟏盭ᾨᢔ纡䵃䶤㜨ዻ͘㏺ഋ䅘㐓摮俕Ὢ㢥ਉ罐㟇㺁䈿絟ᑉഐ᧶㨬柡五䞮❮ឹ晓簠⵮⺼畘⚜所槰叽၉侴᷆㾴べ窩洄樝楢曷带嫱䭠䄆枳祑癒汌繉湓寇㋮ቦⵟ㤬䴗樄Ϻ杞絛Ỗ㷞噠⪓瞇ⓠ⪽䀡㚓嗾㐡⠹ႍ仩㝏⫫ⳙ柰嘠ڸᮾ癭䚒ⴞᨓ呤权介ᶮ㧠煙擩ᴇ差殿ȁ亙屖稊琝栗檻ᵎ㬌瞙羓佴ᄌ宿Ὓ準尩⹁傖⻭ү᳖Ռ窙糓埇௯唿⽘ℿ紞称௮呶也Ỗ㦜砥栓伄ḯ擏旹帽ㆯ纫か擌₏ᄍ柜䄀燾᠔㱏㍤漪㽫岰䄹䂆䑥唈庾₂纙姁ķࣕ垱䘠ۦ⌑礳偓㛷䦝夲؜䯃ࠒ㸊䂹宻ᣘᘪ挛ᆴ䯪⁒⼷Ფ▟囉柺ਠ敎檱‽⦞匜據⡅ឋ斋拙�竪໳漎͏ᐱ囖ᦒ䲳幁䮫ង佊冹㩒煩簍䷨ῂ俘ྈ䀡᧰㜸௷⟹⅀屯憒璹睨
琘ſᯀ֙撧ள瞘ဤ嵤㉶㩠ীѢ㑷㇦粳䱕敪7䧚⯙瓌⅒幵┠໮ᵁ⧑䌘վ癨ᨫ佭৲䄂ذིᶾʼ䓺០㍬拎ሪ᫞檠儷䧋Ⱃ撇甲䀯䊴缴ݠዴ璀⥠୧㖙⪡∫⯶垎㦐ϕ㠹䧵悘Ƙ氡㵿竝椨ᬖᙄ毷哋⿕†Łե嬚挬氎堓⺀ȕ㠴京ጳ䆈᷏币㛞檠 ∵܋滷檘嵽曙䀠嬘瘎䡳埑ㄎ得䇚礞᚝䓛崗䆧峅䖩ࢭ䤥㝼呁ਆ䏴⪝渭矠⢬⁔䚐㲢撧ੜ栯燿ⱈ濲↰˔೔Ô㑗耋ᕰ燞ᮎ䀮簬ᯭ爘澁徉攠­擣☢⸲俠槜翁䜈砻浲㠄畩徊䓨ʠᙀㅗ㝙泾㧟ㅘᮮป偪㠝栰䄲ͦ竤഻睨ڎ壾拡玜✛幌寡Ꮮၢጎ㲦稾欷ї嶲˽ᴢ஘✠㸤䧚㟖唪σ㨜䧐᩻紈斎᫾廀宓ܛ㖩䰒᪛⋒岻㙪瘽䷑᭛䳀硼奱܎真䈍᪒پ漋IJ2㔑Ɉી滉综棝敤巨≕㷨㴡㗋涅㡱Խ暤⡄ℎ⼢㘥ޕ煩Ḅ緼呥⃼爟9䌊棠ᰠᰀ掺ᾦᳮ笖㘿瑪哙⇕⌭䍚啖ႎ↗挎ᛥ䯚礡⼁瘢ⱏਮㅑ懷㩳墠Ǜ丬ᄩ緾廆ྛ䲴瓏፺碯⑚崡僴फrࡓ亗㸎洠ਠ\"℠ȎƠ歡粫寘٨䊬悝䯝睂䛠ቢ枘㪹⊣斠ᐏᇄ‖䶓ἂ緬ㆥ矘⺷徚᭾燝殛䣼ḏ䰽濝ᾞ՞忌篛ₚ湜㒊Pਘ搤㪲‾⁞せ㵈婎㷺'矴ᢻ岷㽶ᾙ滋梠ཡ㟾ឦဢ䘯㚫ڊ᫬ၕ䘒擡緋Ȍᕨ孈塲涠撫➺格师⇁qᨛ䜡畨ᐧ禔ؿᒢ䂚俓⼧磣塣瞍癘㷥܁綃ଂᲀ㠠㨢᫜㾙ਪϿ簙睰朷巠ʴ❼玧籰爏☫撛焚㩤噎㯇湲ȓ席悯ƴᅧ偤猎崌႙㞜䈌⏨䉍ཱུ滜⡸粳̀݌ᮼ嬿≐怡⻦$⏾ࠏⰣ戅ぐ憠䙃畖Ⴠ⌏࡜ᜄᤗ〤℣䠚䐮‏⋅䏑甛囧䅸ƹ㩞岧椛ࢨᐄ⡇྆楼㼭愑纣柧䔌㼿䷾䯝ᤑ缌䀬⟷哥῕†̓ᔒઢ吋Ḝၒ῭Ŕ⸰݈ῐ 甪㋫癤፴翈䵳糇啯ᪿʡ檚瀬椩召v俪烬㰶䓉痳牬 ᾉ佁⦆㸔缜䵣LJ稀ᚾ浜傝䤐ⴡ㐝∥俺儆㼒㟹纙ۜ㽯沾⭟ڝ഑氹㘜瑣侵⤆㸌窩皕㪇汯畸∱ẝ㵦稅㙊Ⲉ㢇⮶憜缈䰓稌╴~噩ᐭ巊؍⤼䃯嫀忕⏐0܇ᘷ睤ѿ田ᆞ⽤磄Ỳ仡࿥⪽ં紛伃҇涴䩠嵽⚡〢Ⴇఞ穔⿶絠ኄちξ懡ᕏ孈㓞䒁挞疿௵၂⽈恛玐⛅畤统㵏❸౬ᑣฦ☗䦰垪⽬幉㳒纉火綷氰ᄩ⋝Қ㭦☉儯力筓䂾亠˶稠ã瘄㬮䒠潆ᆝ挙Ἶ桼䝩ㆭ㵹ᗢ䔛䍮㝤⭿攋⣄䞚噢㜴ᎏ₄伀ず篒禽混宂紐⍹ᾖ笝乔䝁ぢ慌ⴝ㹊ᚏ㐪樗୔ヿ櫞ڂ櫭ᨬ簮᠔❒ễ੺ʭ笕቗䄼浰産怦Ę戍ȁ経澐�㻐糠秋擻㰰壨搢ⱗ♤␲核炀恏烾⧶緤扁×冏☿市官䄙ጷေ啖澙得㤖硅査治笼倠嗜⮞ᎎ⸔⥍㠚瀋䂇㼂㜚଄Ṁ�穠䴣ᬧ࿄സᏡ㑡澶Ƨ㿴⇽籛手刐◙▣⮝犌䮤篴瞣厘ի㿮䛑Ȳᝐ⛦ˠ⩑䠦Ⲵ縗≠宨悇愯䞞繯䆛粗棄䫉翞侘園ℛဨ࿤ㄮ籕Ρ竝牛森ḏ敉䒣㾙繫縙協ྨ 㞩᩸ƣ絻筴ຠ䘠瓷徙կ䐐䠞犋೽皳㰶䅃眛沯瞘機࿜⃄㢟琭僵新呒䆸糙▃粩渆⊏㣾䊠᎝̝䨏泄瀧峂ᄌᴸ㶚ै᧐├猲׃夘੩搌岥掮ῄ‑牘㪖॑涯䚿冯凟禄ਝ簾ᯥ៾ῴᦤ粀Գ瑈౤↧崯橑┝圛ᕎ⠖侲䜷༼緟䳙ԞĴ䐐婾㒒ᗨ稖䢰稟࿃ᾢ㿈ㄊ扰Მᰠ�潡መ噠䲫噵℥ထ你溜翿Г疍楏環ඃ縁岶憓᛻㜟♏ᜡ㺤㼹笇㟇渋ᄯ熸瓐՝ㄨኻ簎桗㮴㹓অ筭磷疣ϓ╚渳⧚彮氙渘♷毙⢏䊩掓俷淣獢磟՟嚥دċ抰濄ߖ筲ஔⓣ瀢䗼ۀ㨑ؓ᜞䕮㲸搞⠃䴙僰㶘篞畃惨໿孡ㅡಀਫ嘠㐒箷瞥廿徉挻益䶏䉴㘮㥰縰樥綦㄀ヷ怋㸫幾ࠑ犃箏玈ि箞悞䤝㘿࠴⠯ឥ忝྽绩禗綛痿ዡ濾ਣ∙〭矻ϴ㽄ྂ䎅罠禀ጿ汷῞祝႟縖ࠐ࿬ާ睧㹁纽级絣ᘿ気ҟ㞝ሟ〱吷ဓ޼㿵殰ồ破٩ᖏ䝟㉨ᮟ爘Ԛ漀Ⱞ澲䀗湡羳祛甯玗咨栎焞㟛吞掮矸ɬ㿜绺ㅓ碖ᮩң䱬〿ࡣ玦壩尐俷䢁㿗潩綫纍ಗ爿姿⦟㛠昝吝弁俭尭⁺繹綋糷煫ி吿ᶞ㰢稞縛䨀〉䟃㾛㹭總筗煯牿䗿ᮟ焝渚漐砓瀗5㿟澃粋羇笀䳉仝ᆑ㼛Ⱓ搛砏码徠㿦罥缧笧纏犿嗟炟⯾昙帐堞瀝ެ罏⫕⯏מ䒓⁰㕄Ⳡ㊠砥奮剹忷䩁₍耒ᨲ瑰熉䗟侟真嶞ቂ砚瀄㿤቎絪㪽྾‿綇௻᠚樚䶭ᴹ礻 ⇳搈羠⦇累↔㡌噖㪲О猽禔Ⱄ䀍ㄡ耔⑉箳川粠ࡵ樗ᚗ㠠㠜疮—ⷮ矣翇翆抑᧧㲟瓞ᜟ燖耖“庝⛝䀍#≑琝ㆀ#䀝倜䀍瞡‣亱㟱況ᒡ•ᏼࠢ֡䠢琝ᰝ᭜-⠢䠢倣”發㠢瀣桩㗐砢䀣扰␢॰耜怣ᠣ戬ᐣ堠吢⩰䐣㹁⸩ࠢ8㠣吣☽嘝牱氢㪱氣朰ᯄ㩰俘柡矜ᠣᰢ尜ཱྀ䈣࢝ᕱሣ稵Ⲩᩌᇝⵌᰜ戢堢㐁ⵍ妩㛭㥰Ѐ倠墱唐搣搀㑀㨢᎑㭅怢㐀أ孅౔幈娣أ�Ⲩ㑁䋁㨣印瘣昢壜砨☣䑜丢ร獰Ḣ䘣ኀ⎠᪱ᒠ㉁緝撈縢㊱Ģᰣ猼尣瓠™֠愣由儢Ģ汝㥰柠ᆐⅱ䤢栜䨢ᄣ戣瓠椢⍙田㤢垱ᨱ⡠㊡औ旨✈䔢┣䘢㐢箉攢ĕᾈ㔢ޔ器㔣矜攢堡䔣□࢜ᤢ⠝ᄢ㺡ᆠ洢∢จ䴣ᙱ㥱㴢俨夝ࠈ⌣楠㻼亠渣௤䔣⌢産ⴣ猣ԣⴢ⤢⓼⬣椣༽䨢昰䔣⬣ई㬢᠝䌢䔣䉑㘸ⴢ瀡疉ᙑ㘹∣ᤢ⨢䅨䜢ᜢᷬ幉㴣䜢㥍ᝀ℣ơ惜源漣惜圢崢夢㺠弣▜焢帝漣▝秉絰⍥䍤׈Ⴂ㼣〜崍⎝崢痉患癤箸䢣㻡ὤ࠰ậ玭≉ᴣィ㸍炢缣䳤㚅≉公䒣⻽懼ʠ籱䊡存俘滼疡ᒢ၁愣㼣ᅡ碢㜣瓡㒢孡璢恈扉撣Ტ硄䫽屑᪠枠㊡㠜価௑澝㨌ʣᾱ䊣況⊢⻩ಣ㢣䲢疜ঝ曽ኢ䊢⊢抣⦜㜘檢㊢᪣ᒐ媣<罼瀀ڡ窣犣⟙呐ⲣ挑⪢⛝ځ䚣ʢ㹍㚣ᾰ䮐ӝ爁㲸ຣ燭亣凅ᬣ圣㖜刍疜⪣窢亢咠⺣㊐嚣Ƣ㡵庴溝↢ᆰ寈⑅䔐冢ᄸ⑄ア暢炢䪢瞜溢䌴ণ㑄磽熢ㆢᆢੁ榣⮉ᘡɀᆈ᱈熢Ƣ⛱䖣ㅡ縝ᠢ㺣䘌ңⱠ֢ᖢ㘠▣␝瀁↢䶢ⶢȍ↣䱀ڣ噬䚣嶢倡凜唼ᚣ壼Σ嚣0探嶢ƣ冢ⅰ֢㎢〝䦢碣⦢ࢢජ㦣᪢皣Ƣ厢ᮢ㢰᲼樝匑↢㮣⚣忙暣䮣疣締ƣޢ沰ޣр⊬֢曝⺣↣瞢䦣䞢⦣㺣䪢ྀ瞢櫝殣ຢ曜窢ᮢ甴焭∍↢b䤭⸢㖢㇐澢榣䁢〈牬幈֢⁢⊭狥⮡ᚬᆈ᪣㲸䡢๥檢犢஢⾢䮣ၢ⮢†ᡢ⡣㊢墥刣䫥ᡢ㪢犢䡑䐜縜ⅰᐝ㑢倍娰䑽䒠䩡ᐜ畡擽⌠簠ᡜ塝᤭ۜ⃡ᾡ汁ѝὐ-།䏁卩仡ᬠⓠߡ犰ѝ橠䋐ư姤拡㭨㍨晝䨑瑢ḝ由橢涩㠠ᩜ杴㩢翁篑ὁ䐡ོ劼͝ᏼ䥜殠ඡ滠摱Ỡ翡䘜戝澣瓡䍼幉穣ኀ㩣㩢䪕湢٣ΐᢰ♢信呑晣嚝ᘠ噣ᥠ㙢㥠癣∝᜜红ཱྀ乢ⱸ幢湣⹢浽ॢ嗑瞠繢呐崍Ţ൐ⅢỠ㥠翁癢兣๢㺡⭽由፼㗽㥱╢Ṣ⊍畀ᕣ幣䴩㹣㍽♣奝ᥣᙢᥠ㥣ⱡ噝圜ጜբ瞝䕣帀㕣ኀ䐁ᕢ䀽沁ͣ㕢亩畣筽楣㸍䵢㉡奢慣浢祣ᅢ唜ѣᥰ幉⍢͢䰀ᵢ溑ͣ婜畢䙢楢晣߼奣ⵣ獣䔠ᅢ嵣䭢枣⭢ⱸ㭢䂁ᨣЁ᭢῁ᆨརॱ㭣捣筢ൣ繢ᥢ䝢ⵣ噣㹽䔡ୢᝢ匜动⽣④ᘣ⃢〠散㹁ఁ⽢䍣ڢ઀ャ堠ᵢ⥣䙣ὢ卣ᅠ㍣䅢❣罣䣣祣ᝣⲢ㺡ࣣ樼㟀䓣噝瀢䭱Ɂࢤ烢綢▱ผ⇘㓝ტ换砨።佽ݢ䤱䝢罣㙣â᜝磣戬瓣ᓢ惢ⱸ⨝瓢哢督䰣糢ೢ孢俙䋢ˣტ潣䳢ὣ።波ٝ㽣Ⅲ㣣杢㳣䃣嚰ዣ撥㰢ᓣዢ僣ӑฝ哣᲼瀀⨝狣ᮨⳣൢŢ㽣㍣壢峢䒠磢嫣堣᨜竢倡ۢ励䛢⛢箢Ȱ廢䳣ᛣૣⳢ䵣㛢壣᳣慣峢☝兢Ʊผⴸ绢↽㘁廢眬縰䓤ᛣ溠团彣卢⇢獢㣢ᇢ๢瞝㸁㤐⧢拣渔⧣ৣ㋭畁㸁䣣٣⥢棣䫢ᙢ盢懣浢᫣ᇣգᤐ䓥עৢợ㸸旭ೣ砌淬∡⧢亡槣棢畠姣監㥣໢䭣代浱緣䓣壁㗬ϣ䗢殑㏢勢杴௢狣绢槣ǣ団彣泣⫢浢杣㧣嵢ѣ毢婤⯢巢共⽢佣砝ㅱར㲼㗢䫣䇢篢෢櫢໣ᵣ᫢凢䨱㟣ྜㅰ䅰埣ű㝢掔翢䣣Ϣㆡ寢᧢ᣢ揣෣ߣᏢ䃣ῢ搡៣ˢ䅅ࡂᯣ㟨ᠡ正̕桂矣䠌࿢䇢㛣俣⇣⿢Ꮳ濢ⷣ秣Ꭱ坢䅅玱止僨塃ャ埣帕㑂⁃ᯢ䏣恂⏣檰у姣㙣䷢秢Ѣ呃殜⸕摃᭢巢簼旣㰼⁀ʡ⁃aⱂ痢䅣᱃䑃愜灃ⷣ休戼漑尽䉃扃⯢䪔≃ቃ䏢㉂᳢䑂䷢䟣㳢⸬⩂⡨ᩂ巢嘽瘼殡≂㡽ᙂኜ㉠㩃剂俢⫢⿢ߣ屃䟢枢療䅢挭抜䅢ᙃ㹂൑ᩂ啣ـ幃Ńใ㡂㯣᧢᱃揣كあῢ䩃ᑀ嚜㘽ᕱ⅃噂巣啨匠㙂㋸᥃௣矣⣣࿣硂⹃т湂䙃叢䅩ᨽ㛜㚡᥂䯢䎐ᥥ⡃ᯤ樼嗢㹢乃Ճ痣䕃❣㣢口灂㾰ᕃउൂ巣檡㧜奃㗙̓䗝慃祂硂䙝汑䢠憠渐櫉ఠ䒡ᣢ牂ୢ煃⑂ѣ⍃淝珐ၜ̓孃䍃ࠈᭃ䐠䵂筢ᅂ၃Ꮑ㼩䶢⤝̀ୃ⏣元偃ᵃੂ瞜݂穑㭂㕂᭼筃㯘潃䱂恂❂Π㮜䭂ㅂã⭂㱂枣杽ᕱὃኀ潃潃撉Ⴢ彂剂㽂᭜㝂䕃䭂あ⑃䃂Ӣ搡⃂幈ッኀ坼僂叱㣃ッ㩃ℝ⡝罂睃╃嵂‡ώᕰӂ㣂䅃䍢㟁㣃捂ݣ䓃၃㝂ق⣂੃煂瞜哂幉ೂ拣ᴑ剁㉁牀潠䡁ঀ灠ྀᖱᡁ㗁糀a㧀ɡ摀㹁ᴐ௣㋝暠ǩ擨槣ㄩ惑ټ䇣⨠氠䝡唠⪠杉滱ॠ᥂ὑ፽吠㪡䗐搠狃箠ቡ珡㠠氡ᛃ㩠㧀㡁㛃㋜猠吠仃ߥ䠐᱁牣ՠ翀妠徰䘠窽䰍汣଼䛡㣱御ᡁᨡ䅼ᇂ䝁ቡ凃ぁ暡嚡叁湙倹㊽湁ᣣ儐䄡娠廃Ⱡ押滃ს盃愠秂㧀㽁几塁盂㔡◂⠠㻂恀׀偁ǂʡ䇂ẽ⇃亡昼燂什僡ূ䁁ঀ糠㷂灀ʱ⿈愐ᧃࠡ䩢溠ૂ⪠␡籠⛃刼曃ݠ⨡⨡⣀Π琠唡盃ໃ偀Ρఠ䧃˜ᎀ῁䯂㇠Հ䄠氡曃ểᯃ羡盂儠߃᱀䟂⨡娡፼ᯂ๠Πᐡ㟃㠠㔡፽㧃柂㳀毂䄠◂心⯃盃ځ绡埂㿃ૃ暡ᖤ糘澠ⓠ殠孡⒡ᱸ㓐␜炂⠉ᶠ⎀灡㣰㿂淐䱣峡⪡͂ᯠ㪠寡棠ⓝ⚠䀠 "}
      

    The complete round-trip took 43.8 ms (including time required to validate the messages, start, and stop the internal mock server).


    Message schema (request-file-analysis)

    For the definition of the hello message, please see it's implementation at ./src/cli/repl/server/messages/message-analysis.ts.

    • (object)
      • type [required] The type of the message. (string) Only allows: 'request-file-analysis'
      • id [optional] You may pass an id to link requests with responses (they get the same id). (string)
      • filetoken [optional] A unique token to identify the file for subsequent requests. Only use this if you plan to send more queries! (string)
      • filename [optional] A human-readable name of the file, only for debugging purposes. (string)
      • content [optional] The content of the file or an R expression (either give this or the filepath). (string)
      • filepath [optional] The path to the file(s) on the local machine (either give this or the content). (alternatives)
        • (string)
        • (array) Valid item types:
          • (string)
      • cfg [optional] If you want to extract the control flow information of the file. (boolean)
      • format [optional] The format of the results, if missing we assume json. (string) Only allows: 'json', 'n-quads', 'compact'
    Message schema (response-file-analysis)

    For the definition of the hello message, please see it's implementation at ./src/cli/repl/server/messages/message-analysis.ts.

    • [required] The response to a file analysis request (based on the format field). (alternatives)
      • The response in JSON format. (object)
        • type [required] The type of the message. (string) Only allows: 'response-file-analysis'
        • id [optional] The id of the message, if you passed one in the request. (string)
        • format [required] The format of the results in json format. (string) Only allows: 'json'
        • results [required] The results of the analysis (one field per step). (object)
        • cfg [optional] The control flow information of the file, only present if requested. (object)
      • The response as n-quads. (object)
        • type [required] The type of the message. (string) Only allows: 'response-file-analysis'
        • id [optional] The id of the message, if you passed one in the request. (string)
        • format [required] The format of the results in n-quads format. (string) Only allows: 'n-quads'
        • results [required] The results of the analysis (one field per step). Quads are presented as string. (object)
        • cfg [optional] The control flow information of the file, only present if requested. (string)
      • (object)
        • type [required] The type of the message. (string) Only allows: 'response-file-analysis'
        • id [optional] The id of the message, if you passed one in the request. (string)
        • format [required] The format of the results in bson format. (string) Only allows: 'bson'
        • results [required] The results of the analysis (one field per step). (string)
        • cfg [optional] The control flow information of the file, only present if requested. (string)

  • Slice Message (request-slice)
    View Details. (deprecated) The server slices a file based on the given criteria.
    sequenceDiagram
        autonumber
        participant Client
        participant Server
    
        
        Client->>+Server: request-slice
    
        alt
            Server-->>Client: response-slice
        else
            Server-->>Client: error
        end
        deactivate  Server
    	
    
    Loading

    We deprecated the slice request in favor of the static-slice Query.

    To slice, you have to send a file analysis request first. The filetoken you assign is of use here as you can re-use it to repeatedly slice the same file. Besides that, you only need to add an array of slicing criteria, using one of the formats described on the terminology wiki page (however, instead of using ;, you can simply pass separate array elements). See the implementation of the request-slice message for more information.

    Additionally, you may pass "noMagicComments": true to disable the automatic selection of elements based on magic comments (see below).

    Example of the request-slice Message

    Note: even though we pretty-print these messages, they are sent as a single line, ending with a newline.

    The following lists all messages that were sent and received in case you want to reproduce the scenario:

    1. hello (response)
      Show Details

      The first message is always a hello message.

      {
        "type": "hello",
        "clientName": "client-0",
        "versions": {
          "flowr": "2.9.12",
          "r": "4.5.0",
          "engine": "r-shell"
        }
      }
    2. request-file-analysis (request)
      Show Details

      Let's assume you want to slice the following script:

      x <- 1
      x + 1

      For this we first request the analysis, using a filetoken of x to slice the file in the next request.

      {
        "type": "request-file-analysis",
        "id": "1",
        "filetoken": "x",
        "content": "x <- 1\nx + 1"
      }
    3. response-file-analysis (response)
      Show Details

      See above for the general structure of the response.

      As the code is pretty long, we inhibit pretty printing and syntax highlighting (JSON, hiding built-in):

      {"type":"response-file-analysis","format":"json","id":"1","results":{"parse":{"files":[{"parsed":"[1,1,1,6,7,0,\"expr\",false,\"x <- 1\"],[1,1,1,1,1,3,\"SYMBOL\",true,\"x\"],[1,1,1,1,3,7,\"expr\",false,\"x\"],[1,3,1,4,2,7,\"LEFT_ASSIGN\",true,\"<-\"],[1,6,1,6,4,5,\"NUM_CONST\",true,\"1\"],[1,6,1,6,5,7,\"expr\",false,\"1\"],[2,1,2,5,16,0,\"expr\",false,\"x + 1\"],[2,1,2,1,10,12,\"SYMBOL\",true,\"x\"],[2,1,2,1,12,16,\"expr\",false,\"x\"],[2,3,2,3,11,16,\"'+'\",true,\"+\"],[2,5,2,5,13,14,\"NUM_CONST\",true,\"1\"],[2,5,2,5,14,16,\"expr\",false,\"1\"]","filePath":"/tmp/tmp-8767-UBYE9Qgxxn8k-.R"}],".meta":{"timing":1}},"normalize":{"ast":{"type":"RProject","files":[{"root":{"type":"RExpressionList","children":[{"type":"RBinaryOp","location":[1,3,1,4],"lhs":{"type":"RSymbol","location":[1,1,1,1],"content":"x","lexeme":"x","info":{"fullRange":[1,1,1,1],"adToks":[],"id":0,"parent":2,"role":"bin-l","index":0,"nesting":0,"file":"/tmp/tmp-8767-UBYE9Qgxxn8k-.R"}},"rhs":{"location":[1,6,1,6],"lexeme":"1","info":{"fullRange":[1,6,1,6],"adToks":[],"id":1,"parent":2,"role":"bin-r","index":1,"nesting":0,"file":"/tmp/tmp-8767-UBYE9Qgxxn8k-.R"},"type":"RNumber","content":{"num":1,"complexNumber":false,"markedAsInt":false}},"operator":"<-","lexeme":"<-","info":{"fullRange":[1,1,1,6],"adToks":[],"id":2,"parent":6,"nesting":0,"file":"/tmp/tmp-8767-UBYE9Qgxxn8k-.R","index":0,"role":"el-c"}},{"type":"RBinaryOp","location":[2,3,2,3],"lhs":{"type":"RSymbol","location":[2,1,2,1],"content":"x","lexeme":"x","info":{"fullRange":[2,1,2,1],"adToks":[],"id":3,"parent":5,"role":"bin-l","index":0,"nesting":0,"file":"/tmp/tmp-8767-UBYE9Qgxxn8k-.R"}},"rhs":{"location":[2,5,2,5],"lexeme":"1","info":{"fullRange":[2,5,2,5],"adToks":[],"id":4,"parent":5,"role":"bin-r","index":1,"nesting":0,"file":"/tmp/tmp-8767-UBYE9Qgxxn8k-.R"},"type":"RNumber","content":{"num":1,"complexNumber":false,"markedAsInt":false}},"operator":"+","lexeme":"+","info":{"fullRange":[2,1,2,5],"adToks":[],"id":5,"parent":6,"nesting":0,"file":"/tmp/tmp-8767-UBYE9Qgxxn8k-.R","index":1,"role":"el-c"}}],"info":{"adToks":[],"id":6,"nesting":0,"file":"/tmp/tmp-8767-UBYE9Qgxxn8k-.R","role":"root","index":0}},"filePath":"/tmp/tmp-8767-UBYE9Qgxxn8k-.R"}],"info":{"id":7}},".meta":{"timing":0}},"dataflow":{"unknownReferences":[],"in":[{"nodeId":2,"name":"<-","type":2},{"nodeId":5,"name":"+","type":2}],"out":[{"nodeId":0,"name":"x","type":4,"definedAt":2,"value":[1]}],"environment":{"current":{"id":2026,"parent":"<BuiltInEnvironment>","memory":[["x",[{"nodeId":0,"name":"x","type":4,"definedAt":2,"value":[1]}]]]},"level":0},"graph":{"rootVertices":[1,0,2,3,4,5],"vertexInformation":[[1,{"tag":"value","id":1}],[0,{"tag":"vdef","id":0}],[2,{"tag":"fcall","id":2,"name":"<-","onlyBuiltin":true,"args":[{"nodeId":0,"type":32},{"nodeId":1,"type":32}],"origin":["builtin:assignment"]}],[3,{"tag":"use","id":3}],[4,{"tag":"value","id":4}],[5,{"tag":"fcall","id":5,"name":"+","onlyBuiltin":true,"args":[{"nodeId":3,"type":32},{"nodeId":4,"type":32}],"origin":["builtin:default"]}]],"edgeInformation":[[2,[[1,{"types":65}],[0,{"types":72}],["built-in:<-",{"types":5}]]],[0,[[1,{"types":2}],[2,{"types":2}]]],[3,[[0,{"types":1}]]],[5,[[3,{"types":65}],[4,{"types":65}],["built-in:+",{"types":5}]]]],"_unknownSideEffects":[]},"entryPoint":2,"exitPoints":[{"type":0,"nodeId":5}],"hooks":[],".meta":{"timing":1}}}}
      
    4. request-slice (request)
      Show Details

      Of course, the second slice criterion 2:1 is redundant for the input, as they refer to the same variable. It is only for demonstration purposes.

      {
        "type": "request-slice",
        "id": "2",
        "filetoken": "x",
        "criterion": [
          "2@x",
          "2:1"
        ]
      }
    5. response-slice (response)
      Show Details

      The results field of the response contains two keys of importance:

      • slice: which contains the result of the slicing (e.g., the ids included in the slice in result).
      • reconstruct: contains the reconstructed code, as well as additional meta information. The automatically selected lines correspond to additional filters (e.g., magic comments) which force the unconditiojnal inclusion of certain elements.
      {
        "type": "response-slice",
        "id": "2",
        "results": {}
      }

    The complete round-trip took 6.7 ms (including time required to validate the messages, start, and stop the internal mock server).

    The semantics of the error message are similar. If, for example, the slicing criterion is invalid or the filetoken is unknown, flowR will respond with an error.

     

    Magic Comments

    Within a document that is to be sliced, you can use magic comments to influence the slicing process:

    • # flowr@include_next_line will cause the next line to be included, independent of if it is important for the slice.
    • # flowr@include_this_line will cause the current line to be included, independent of if it is important for the slice.
    • # flowr@include_start and # flowr@include_end will cause the lines between them to be included, independent of if they are important for the slice. These magic comments can be nested but should appear on a separate line.

    Message schema (request-slice)

    For the definition of the hello message, please see it's implementation at ./src/cli/repl/server/messages/message-slice.ts.

    • (object)
      • type [required] The type of the message. (string) Only allows: 'request-slice'
      • id [optional] The id of the message, if you passed one in the request. (string)
      • filetoken [required] The filetoken of the file to slice must be the same as with the analysis request. (string)
      • criterion [required] The slicing criteria to use. (array) Valid item types:
        • (string)
      • direction The direction to slice in. Defaults to backward slicing if unset. (string) Only allows: 'backward', 'forward'
    Message schema (response-slice)

    For the definition of the hello message, please see it's implementation at ./src/cli/repl/server/messages/message-slice.ts.

    • The response to a slice request. (object)
      • type [required] The type of the message. (string) Only allows: 'response-slice'
      • id [optional] The id of the message, if you passed one in the request. (string)
      • results [required] The results of the slice (one field per step slicing step). (object)

  • REPL Message (request-repl-execution)
    View Details. Access the read evaluate print loop of flowR.
    sequenceDiagram
        autonumber
        participant Client
        participant Server
    
        
        Client->>+Server: request-repl-execution
    
        alt
            Server-->>Client: error
        else
    
        loop
            Server-->>Client: response-repl-execution
        end
            Server-->>Client: end-repl-execution
    
        end
    
        deactivate  Server
    	
    
    Loading

    [!WARNING] To execute arbitrary R commands with a request, the server has to be started explicitly with --r-session-access. Please be aware that this introduces a security risk.

    The REPL execution message allows to send a REPL command to receive its output. For more on the REPL, see the introduction, or the description below. You only have to pass the command you want to execute in the expression field. Furthermore, you can set the ansi field to true if you are interested in output formatted using ANSI escape codes. We strongly recommend you to make use of the id field to link answers with requests as you can theoretically request the execution of multiple scripts at the same time, which then happens in parallel.

    [!WARNING] There is currently no automatic sandboxing or safeguarding against such requests. They simply execute the respective R code on your machine. Please be very careful (and do not use --r-session-access if you are unsure).

    The answer on such a request is different from the other messages as the response-repl-execution message may be sent multiple times. This allows to better handle requests that require more time but already output intermediate results. You can detect the end of the execution by receiving the end-repl-execution message.

    The semantics of the error message are similar to that of the other messages.

    Example of the request-slice Message

    Note: even though we pretty-print these messages, they are sent as a single line, ending with a newline.

    The following lists all messages that were sent and received in case you want to reproduce the scenario:

    1. hello (response)
      Show Details

      The first message is always a hello message.

      {
        "type": "hello",
        "clientName": "client-0",
        "versions": {
          "flowr": "2.9.12",
          "r": "4.5.0",
          "engine": "r-shell"
        }
      }
    2. request-repl-execution (request)
      Show Details
      {
        "type": "request-repl-execution",
        "id": "1",
        "expression": ":help"
      }
    3. response-repl-execution (response)
      Show Details

      The stream field (either stdout or stderr) informs you of the output's origin: either the standard output or the standard error channel. After this message follows the end marker.

      Pretty-Printed Result
      
      If enabled ('--r-session-access' and if using the 'r-shell' engine), you can just enter R expressions which get evaluated right away:
      R> 1 + 1
      [1] 2
      
      Besides that, you can use the following commands. The scripts can accept further arguments. In general, those ending with [*] may be called with and without the star. 
      There are the following basic commands:
        :controlflow[*]     Get mermaid code for the control-flow graph of R code, start with 'file://' to indicate a file (star: Returns the URL to mermaid.live) (aliases: :cfg, :cf)
        :controlflowbb[*]   Get mermaid code for the control-flow graph with basic blocks, start with 'file://' to indicate a file (star: Returns the URL to mermaid.live) (aliases: :cfgb, :cfb)
        :dataflow[*]        Get mermaid code for the dataflow graph, start with 'file://' to indicate a file (star: Returns the URL to mermaid.live) (aliases: :d, :df)
        :dataflowascii      Returns an ASCII representation of the dataflow graph (alias: :df!)
        :dataflowsilent     Just calculates the DFG, but only prints summary info (aliases: :d#, :df#)
        :dataflowsimple[*]  Get mermaid code for the simplified dataflow graph, start with 'file://' to indicate a file (star: Returns the URL to mermaid.live) (aliases: :ds, :dfs)
        :execute            Execute the given code as R code. This requires the `--r-session-access` flag to be set and requires the r-shell engine. (aliases: :e, :r)
        :help               Show help information (aliases: :h, :?)
        :normalize#         Returns summarization stats for the normalized AST (alias: :n#)
        :normalize[*]       Get mermaid code for the normalized AST of R code, start with 'file://' to indicate a file (star: Returns the URL to mermaid.live) (alias: :n)
        :parse              Prints ASCII Art of the parsed, unmodified AST, start with 'file://' to indicate a file (alias: :p)
        :query[*]           Query the given R code, start with 'file://' to indicate a file. The query is to be a valid query in json format (use 'help' to get more information). (star: Similar to query, but returns the output in json format.)
        :quit               End the repl (aliases: :q, :exit)
        :version            Prints the version of flowR as well as the current version of R
      
      Furthermore, you can directly call the following scripts which accept arguments. If you are unsure, try to add --help after the command.
        :benchmark          Benchmark the static backwards slicer
        :export-quads       Export quads of the normalized AST of a given R code file
        :slicer             Static backwards executable slicer for R
        :stats              Generate usage Statistics for R scripts
        :summarizer         Summarize the results of the benchmark
      
      You can combine commands by separating them with a semicolon ;.
      
      {
        "type": "response-repl-execution",
        "id": "1",
        "result": "\nIf enabled ('--r-session-access' and if using the 'r-shell' engine), you can just enter R expressions which get evaluated right away:\nR> 1 + 1\n[1] 2\n\nBesides that, you can use the following commands. The scripts can accept further arguments. In general, those ending with [*] may be called with and without the star. \nThere are the following basic commands:\n  :controlflow[*]     Get mermaid code for the control-flow graph of R code, start with 'file://' to indicate a file (star: Returns the URL to mermaid.live) (aliases: :cfg, :cf)\n  :controlflowbb[*]   Get mermaid code for the control-flow graph with basic blocks, start with 'file://' to indicate a file (star: Returns the URL to mermaid.live) (aliases: :cfgb, :cfb)\n  :dataflow[*]        Get mermaid code for the dataflow graph, start with 'file://' to indicate a file (star: Returns the URL to mermaid.live) (aliases: :d, :df)\n  :dataflowascii      Returns an ASCII representation of the dataflow graph (alias: :df!)\n  :dataflowsilent     Just calculates the DFG, but only prints summary info (aliases: :d#, :df#)\n  :dataflowsimple[*]  Get mermaid code for the simplified dataflow graph, start with 'file://' to indicate a file (star: Returns the URL to mermaid.live) (aliases: :ds, :dfs)\n  :execute            Execute the given code as R code. This requires the `--r-session-access` flag to be set and requires the r-shell engine. (aliases: :e, :r)\n  :help               Show help information (aliases: :h, :?)\n  :normalize#         Returns summarization stats for the normalized AST (alias: :n#)\n  :normalize[*]       Get mermaid code for the normalized AST of R code, start with 'file://' to indicate a file (star: Returns the URL to mermaid.live) (alias: :n)\n  :parse              Prints ASCII Art of the parsed, unmodified AST, start with 'file://' to indicate a file (alias: :p)\n  :query[*]           Query the given R code, start with 'file://' to indicate a file. The query is to be a valid query in json format (use 'help' to get more information). (star: Similar to query, but returns the output in json format.)\n  :quit               End the repl (aliases: :q, :exit)\n  :version            Prints the version of flowR as well as the current version of R\n\nFurthermore, you can directly call the following scripts which accept arguments. If you are unsure, try to add --help after the command.\n  :benchmark          Benchmark the static backwards slicer\n  :export-quads       Export quads of the normalized AST of a given R code file\n  :slicer             Static backwards executable slicer for R\n  :stats              Generate usage Statistics for R scripts\n  :summarizer         Summarize the results of the benchmark\n\nYou can combine commands by separating them with a semicolon ;.\n",
        "stream": "stdout"
      }
    4. end-repl-execution (response)
      Show Details
      {
        "type": "end-repl-execution",
        "id": "1"
      }

    The complete round-trip took 1.0 ms (including time required to validate the messages, start, and stop the internal mock server).


    Message schema (request-repl-execution)

    For the definition of the hello message, please see it's implementation at ./src/cli/repl/server/messages/message-repl.ts.

    • (object)
      • type [required] The type of the message. (string) Only allows: 'request-repl-execution'
      • id [optional] The id of the message, will be the same for the request. (string)
      • ansi [optional] Should ansi formatting be enabled for the response? Is false by default. (boolean)
      • expression [required] The expression to execute. (string)
    Message schema (response-repl-execution)

    For the definition of the hello message, please see it's implementation at ./src/cli/repl/server/messages/message-repl.ts.

    • (object)
      • type [required] The type of the message. (string) Only allows: 'response-repl-execution'
      • id [optional] The id of the message, will be the same for the request. (string)
      • stream [required] The stream the message is from. (string) Only allows: 'stdout', 'stderr'
      • result [required] The output of the execution. (string)
    Message schema (end-repl-execution)

    For the definition of the hello message, please see it's implementation at ./src/cli/repl/server/messages/message-repl.ts.

    • (object)
      • type [required] The type of the message. (string) Only allows: 'end-repl-execution'
      • id [optional] The id of the message, will be the same for the request. (string)

  • Query Message (request-query)
    View Details. Query an analysis result for specific information.
    sequenceDiagram
        autonumber
        participant Client
        participant Server
    
        
        Client->>+Server: request-query
    
        alt
            Server-->>Client: response-query
        else
            Server-->>Client: error
        end
        deactivate  Server
    	
    
    Loading

    To send queries, you have to send an analysis request first. The filetoken you assign is of use here as you can re-use it to repeatedly query the same file. This message provides direct access to flowR's Query API. Please consult the Query API documentation for more information.

    Example of the request-query Message

    Note: even though we pretty-print these messages, they are sent as a single line, ending with a newline.

    The following lists all messages that were sent and received in case you want to reproduce the scenario:

    1. hello (response)
      Show Details

      The first message is always a hello message.

      {
        "type": "hello",
        "clientName": "client-0",
        "versions": {
          "flowr": "2.9.12",
          "r": "4.5.0",
          "engine": "r-shell"
        }
      }
    2. request-file-analysis (request)
      Show Details

      Let's assume you want to query the following script:

      library(ggplot)
      library(dplyr)
      library(readr)
      
      # read data with read_csv
      data <- read_csv('data.csv')
      data2 <- read_csv('data2.csv')
      
      m <- mean(data$x) 
      print(m)
      
      data %>%
      	ggplot(aes(x = x, y = y)) +
      	geom_point()
      	
      plot(data2$x, data2$y)
      points(data2$x, data2$y)
      	
      print(mean(data2$k))

      .

      For this we first request the analysis, using a dummy filetoken of x to slice the file in the next request.

      {
        "type": "request-file-analysis",
        "id": "1",
        "filetoken": "x",
        "content": "library(ggplot)\nlibrary(dplyr)\nlibrary(readr)\n\n# read data with read_csv\ndata <- read_csv('data.csv')\ndata2 <- read_csv('data2.csv')\n\nm <- mean(data$x) \nprint(m)\n\ndata %>%\n\tggplot(aes(x = x, y = y)) +\n\tgeom_point()\n\t\nplot(data2$x, data2$y)\npoints(data2$x, data2$y)\n\t\nprint(mean(data2$k))"
      }
    3. response-file-analysis (response)
      Show Details

      See above for the general structure of the response.

      As the code is pretty long, we inhibit pretty printing and syntax highlighting (JSON, hiding built-in):

      {"type":"response-file-analysis","format":"json","id":"1","results":{"parse":{"files":[{"parsed":"[1,1,1,15,10,0,\"expr\",false,\"library(ggplot)\"],[1,1,1,7,1,3,\"SYMBOL_FUNCTION_CALL\",true,\"library\"],[1,1,1,7,3,10,\"expr\",false,\"library\"],[1,8,1,8,2,10,\"'('\",true,\"(\"],[1,9,1,14,4,6,\"SYMBOL\",true,\"ggplot\"],[1,9,1,14,6,10,\"expr\",false,\"ggplot\"],[1,15,1,15,5,10,\"')'\",true,\")\"],[2,1,2,14,23,0,\"expr\",false,\"library(dplyr)\"],[2,1,2,7,14,16,\"SYMBOL_FUNCTION_CALL\",true,\"library\"],[2,1,2,7,16,23,\"expr\",false,\"library\"],[2,8,2,8,15,23,\"'('\",true,\"(\"],[2,9,2,13,17,19,\"SYMBOL\",true,\"dplyr\"],[2,9,2,13,19,23,\"expr\",false,\"dplyr\"],[2,14,2,14,18,23,\"')'\",true,\")\"],[3,1,3,14,36,0,\"expr\",false,\"library(readr)\"],[3,1,3,7,27,29,\"SYMBOL_FUNCTION_CALL\",true,\"library\"],[3,1,3,7,29,36,\"expr\",false,\"library\"],[3,8,3,8,28,36,\"'('\",true,\"(\"],[3,9,3,13,30,32,\"SYMBOL\",true,\"readr\"],[3,9,3,13,32,36,\"expr\",false,\"readr\"],[3,14,3,14,31,36,\"')'\",true,\")\"],[5,1,5,25,42,-59,\"COMMENT\",true,\"# read data with read_csv\"],[6,1,6,28,59,0,\"expr\",false,\"data <- read_csv('data.csv')\"],[6,1,6,4,45,47,\"SYMBOL\",true,\"data\"],[6,1,6,4,47,59,\"expr\",false,\"data\"],[6,6,6,7,46,59,\"LEFT_ASSIGN\",true,\"<-\"],[6,9,6,28,57,59,\"expr\",false,\"read_csv('data.csv')\"],[6,9,6,16,48,50,\"SYMBOL_FUNCTION_CALL\",true,\"read_csv\"],[6,9,6,16,50,57,\"expr\",false,\"read_csv\"],[6,17,6,17,49,57,\"'('\",true,\"(\"],[6,18,6,27,51,53,\"STR_CONST\",true,\"'data.csv'\"],[6,18,6,27,53,57,\"expr\",false,\"'data.csv'\"],[6,28,6,28,52,57,\"')'\",true,\")\"],[7,1,7,30,76,0,\"expr\",false,\"data2 <- read_csv('data2.csv')\"],[7,1,7,5,62,64,\"SYMBOL\",true,\"data2\"],[7,1,7,5,64,76,\"expr\",false,\"data2\"],[7,7,7,8,63,76,\"LEFT_ASSIGN\",true,\"<-\"],[7,10,7,30,74,76,\"expr\",false,\"read_csv('data2.csv')\"],[7,10,7,17,65,67,\"SYMBOL_FUNCTION_CALL\",true,\"read_csv\"],[7,10,7,17,67,74,\"expr\",false,\"read_csv\"],[7,18,7,18,66,74,\"'('\",true,\"(\"],[7,19,7,29,68,70,\"STR_CONST\",true,\"'data2.csv'\"],[7,19,7,29,70,74,\"expr\",false,\"'data2.csv'\"],[7,30,7,30,69,74,\"')'\",true,\")\"],[9,1,9,17,98,0,\"expr\",false,\"m <- mean(data$x)\"],[9,1,9,1,81,83,\"SYMBOL\",true,\"m\"],[9,1,9,1,83,98,\"expr\",false,\"m\"],[9,3,9,4,82,98,\"LEFT_ASSIGN\",true,\"<-\"],[9,6,9,17,96,98,\"expr\",false,\"mean(data$x)\"],[9,6,9,9,84,86,\"SYMBOL_FUNCTION_CALL\",true,\"mean\"],[9,6,9,9,86,96,\"expr\",false,\"mean\"],[9,10,9,10,85,96,\"'('\",true,\"(\"],[9,11,9,16,91,96,\"expr\",false,\"data$x\"],[9,11,9,14,87,89,\"SYMBOL\",true,\"data\"],[9,11,9,14,89,91,\"expr\",false,\"data\"],[9,15,9,15,88,91,\"'$'\",true,\"$\"],[9,16,9,16,90,91,\"SYMBOL\",true,\"x\"],[9,17,9,17,92,96,\"')'\",true,\")\"],[10,1,10,8,110,0,\"expr\",false,\"print(m)\"],[10,1,10,5,101,103,\"SYMBOL_FUNCTION_CALL\",true,\"print\"],[10,1,10,5,103,110,\"expr\",false,\"print\"],[10,6,10,6,102,110,\"'('\",true,\"(\"],[10,7,10,7,104,106,\"SYMBOL\",true,\"m\"],[10,7,10,7,106,110,\"expr\",false,\"m\"],[10,8,10,8,105,110,\"')'\",true,\")\"],[12,1,14,20,158,0,\"expr\",false,\"data %>%\\n\\tggplot(aes(x = x, y = y)) +\\n\\tgeom_point()\"],[12,1,13,33,149,158,\"expr\",false,\"data %>%\\n\\tggplot(aes(x = x, y = y))\"],[12,1,12,4,116,118,\"SYMBOL\",true,\"data\"],[12,1,12,4,118,149,\"expr\",false,\"data\"],[12,6,12,8,117,149,\"SPECIAL\",true,\"%>%\"],[13,9,13,33,147,149,\"expr\",false,\"ggplot(aes(x = x, y = y))\"],[13,9,13,14,120,122,\"SYMBOL_FUNCTION_CALL\",true,\"ggplot\"],[13,9,13,14,122,147,\"expr\",false,\"ggplot\"],[13,15,13,15,121,147,\"'('\",true,\"(\"],[13,16,13,32,142,147,\"expr\",false,\"aes(x = x, y = y)\"],[13,16,13,18,123,125,\"SYMBOL_FUNCTION_CALL\",true,\"aes\"],[13,16,13,18,125,142,\"expr\",false,\"aes\"],[13,19,13,19,124,142,\"'('\",true,\"(\"],[13,20,13,20,126,142,\"SYMBOL_SUB\",true,\"x\"],[13,22,13,22,127,142,\"EQ_SUB\",true,\"=\"],[13,24,13,24,128,130,\"SYMBOL\",true,\"x\"],[13,24,13,24,130,142,\"expr\",false,\"x\"],[13,25,13,25,129,142,\"','\",true,\",\"],[13,27,13,27,134,142,\"SYMBOL_SUB\",true,\"y\"],[13,29,13,29,135,142,\"EQ_SUB\",true,\"=\"],[13,31,13,31,136,138,\"SYMBOL\",true,\"y\"],[13,31,13,31,138,142,\"expr\",false,\"y\"],[13,32,13,32,137,142,\"')'\",true,\")\"],[13,33,13,33,143,147,\"')'\",true,\")\"],[13,35,13,35,148,158,\"'+'\",true,\"+\"],[14,9,14,20,156,158,\"expr\",false,\"geom_point()\"],[14,9,14,18,151,153,\"SYMBOL_FUNCTION_CALL\",true,\"geom_point\"],[14,9,14,18,153,156,\"expr\",false,\"geom_point\"],[14,19,14,19,152,156,\"'('\",true,\"(\"],[14,20,14,20,154,156,\"')'\",true,\")\"],[16,1,16,22,184,0,\"expr\",false,\"plot(data2$x, data2$y)\"],[16,1,16,4,163,165,\"SYMBOL_FUNCTION_CALL\",true,\"plot\"],[16,1,16,4,165,184,\"expr\",false,\"plot\"],[16,5,16,5,164,184,\"'('\",true,\"(\"],[16,6,16,12,170,184,\"expr\",false,\"data2$x\"],[16,6,16,10,166,168,\"SYMBOL\",true,\"data2\"],[16,6,16,10,168,170,\"expr\",false,\"data2\"],[16,11,16,11,167,170,\"'$'\",true,\"$\"],[16,12,16,12,169,170,\"SYMBOL\",true,\"x\"],[16,13,16,13,171,184,\"','\",true,\",\"],[16,15,16,21,179,184,\"expr\",false,\"data2$y\"],[16,15,16,19,175,177,\"SYMBOL\",true,\"data2\"],[16,15,16,19,177,179,\"expr\",false,\"data2\"],[16,20,16,20,176,179,\"'$'\",true,\"$\"],[16,21,16,21,178,179,\"SYMBOL\",true,\"y\"],[16,22,16,22,180,184,\"')'\",true,\")\"],[17,1,17,24,209,0,\"expr\",false,\"points(data2$x, data2$y)\"],[17,1,17,6,188,190,\"SYMBOL_FUNCTION_CALL\",true,\"points\"],[17,1,17,6,190,209,\"expr\",false,\"points\"],[17,7,17,7,189,209,\"'('\",true,\"(\"],[17,8,17,14,195,209,\"expr\",false,\"data2$x\"],[17,8,17,12,191,193,\"SYMBOL\",true,\"data2\"],[17,8,17,12,193,195,\"expr\",false,\"data2\"],[17,13,17,13,192,195,\"'$'\",true,\"$\"],[17,14,17,14,194,195,\"SYMBOL\",true,\"x\"],[17,15,17,15,196,209,\"','\",true,\",\"],[17,17,17,23,204,209,\"expr\",false,\"data2$y\"],[17,17,17,21,200,202,\"SYMBOL\",true,\"data2\"],[17,17,17,21,202,204,\"expr\",false,\"data2\"],[17,22,17,22,201,204,\"'$'\",true,\"$\"],[17,23,17,23,203,204,\"SYMBOL\",true,\"y\"],[17,24,17,24,205,209,\"')'\",true,\")\"],[19,1,19,20,235,0,\"expr\",false,\"print(mean(data2$k))\"],[19,1,19,5,215,217,\"SYMBOL_FUNCTION_CALL\",true,\"print\"],[19,1,19,5,217,235,\"expr\",false,\"print\"],[19,6,19,6,216,235,\"'('\",true,\"(\"],[19,7,19,19,230,235,\"expr\",false,\"mean(data2$k)\"],[19,7,19,10,218,220,\"SYMBOL_FUNCTION_CALL\",true,\"mean\"],[19,7,19,10,220,230,\"expr\",false,\"mean\"],[19,11,19,11,219,230,\"'('\",true,\"(\"],[19,12,19,18,225,230,\"expr\",false,\"data2$k\"],[19,12,19,16,221,223,\"SYMBOL\",true,\"data2\"],[19,12,19,16,223,225,\"expr\",false,\"data2\"],[19,17,19,17,222,225,\"'$'\",true,\"$\"],[19,18,19,18,224,225,\"SYMBOL\",true,\"k\"],[19,19,19,19,226,230,\"')'\",true,\")\"],[19,20,19,20,231,235,\"')'\",true,\")\"]","filePath":"/tmp/tmp-8767-aqSkVX8QRLiR-.R"}],".meta":{"timing":3}},"normalize":{"ast":{"type":"RProject","files":[{"root":{"type":"RExpressionList","children":[{"type":"RFunctionCall","named":true,"location":[1,1,1,7],"lexeme":"library","functionName":{"type":"RSymbol","location":[1,1,1,7],"content":"library","lexeme":"library","info":{"fullRange":[1,1,1,15],"adToks":[],"id":0,"parent":3,"role":"call-name","index":0,"nesting":0,"file":"/tmp/tmp-8767-aqSkVX8QRLiR-.R"}},"arguments":[{"type":"RArgument","location":[1,9,1,14],"lexeme":"ggplot","value":{"type":"RSymbol","location":[1,9,1,14],"content":"ggplot","lexeme":"ggplot","info":{"fullRange":[1,9,1,14],"adToks":[],"id":1,"parent":2,"role":"arg-v","index":0,"nesting":0,"file":"/tmp/tmp-8767-aqSkVX8QRLiR-.R"}},"info":{"fullRange":[1,9,1,14],"adToks":[],"id":2,"parent":3,"nesting":0,"file":"/tmp/tmp-8767-aqSkVX8QRLiR-.R","index":1,"role":"call-arg"}}],"info":{"fullRange":[1,1,1,15],"adToks":[],"id":3,"parent":90,"nesting":0,"file":"/tmp/tmp-8767-aqSkVX8QRLiR-.R","index":0,"role":"el-c"}},{"type":"RFunctionCall","named":true,"location":[2,1,2,7],"lexeme":"library","functionName":{"type":"RSymbol","location":[2,1,2,7],"content":"library","lexeme":"library","info":{"fullRange":[2,1,2,14],"adToks":[],"id":4,"parent":7,"role":"call-name","index":0,"nesting":0,"file":"/tmp/tmp-8767-aqSkVX8QRLiR-.R"}},"arguments":[{"type":"RArgument","location":[2,9,2,13],"lexeme":"dplyr","value":{"type":"RSymbol","location":[2,9,2,13],"content":"dplyr","lexeme":"dplyr","info":{"fullRange":[2,9,2,13],"adToks":[],"id":5,"parent":6,"role":"arg-v","index":0,"nesting":0,"file":"/tmp/tmp-8767-aqSkVX8QRLiR-.R"}},"info":{"fullRange":[2,9,2,13],"adToks":[],"id":6,"parent":7,"nesting":0,"file":"/tmp/tmp-8767-aqSkVX8QRLiR-.R","index":1,"role":"call-arg"}}],"info":{"fullRange":[2,1,2,14],"adToks":[],"id":7,"parent":90,"nesting":0,"file":"/tmp/tmp-8767-aqSkVX8QRLiR-.R","index":1,"role":"el-c"}},{"type":"RFunctionCall","named":true,"location":[3,1,3,7],"lexeme":"library","functionName":{"type":"RSymbol","location":[3,1,3,7],"content":"library","lexeme":"library","info":{"fullRange":[3,1,3,14],"adToks":[],"id":8,"parent":11,"role":"call-name","index":0,"nesting":0,"file":"/tmp/tmp-8767-aqSkVX8QRLiR-.R"}},"arguments":[{"type":"RArgument","location":[3,9,3,13],"lexeme":"readr","value":{"type":"RSymbol","location":[3,9,3,13],"content":"readr","lexeme":"readr","info":{"fullRange":[3,9,3,13],"adToks":[],"id":9,"parent":10,"role":"arg-v","index":0,"nesting":0,"file":"/tmp/tmp-8767-aqSkVX8QRLiR-.R"}},"info":{"fullRange":[3,9,3,13],"adToks":[],"id":10,"parent":11,"nesting":0,"file":"/tmp/tmp-8767-aqSkVX8QRLiR-.R","index":1,"role":"call-arg"}}],"info":{"fullRange":[3,1,3,14],"adToks":[],"id":11,"parent":90,"nesting":0,"file":"/tmp/tmp-8767-aqSkVX8QRLiR-.R","index":2,"role":"el-c"}},{"type":"RBinaryOp","location":[6,6,6,7],"lhs":{"type":"RSymbol","location":[6,1,6,4],"content":"data","lexeme":"data","info":{"fullRange":[6,1,6,4],"adToks":[],"id":12,"parent":17,"role":"bin-l","index":0,"nesting":0,"file":"/tmp/tmp-8767-aqSkVX8QRLiR-.R"}},"rhs":{"type":"RFunctionCall","named":true,"location":[6,9,6,16],"lexeme":"read_csv","functionName":{"type":"RSymbol","location":[6,9,6,16],"content":"read_csv","lexeme":"read_csv","info":{"fullRange":[6,9,6,28],"adToks":[],"id":13,"parent":16,"role":"call-name","index":0,"nesting":0,"file":"/tmp/tmp-8767-aqSkVX8QRLiR-.R"}},"arguments":[{"type":"RArgument","location":[6,18,6,27],"lexeme":"'data.csv'","value":{"type":"RString","location":[6,18,6,27],"content":{"str":"data.csv","quotes":"'"},"lexeme":"'data.csv'","info":{"fullRange":[6,18,6,27],"adToks":[],"id":14,"parent":15,"role":"arg-v","index":0,"nesting":0,"file":"/tmp/tmp-8767-aqSkVX8QRLiR-.R"}},"info":{"fullRange":[6,18,6,27],"adToks":[],"id":15,"parent":16,"nesting":0,"file":"/tmp/tmp-8767-aqSkVX8QRLiR-.R","index":1,"role":"call-arg"}}],"info":{"fullRange":[6,9,6,28],"adToks":[],"id":16,"parent":17,"nesting":0,"file":"/tmp/tmp-8767-aqSkVX8QRLiR-.R","index":1,"role":"bin-r"}},"operator":"<-","lexeme":"<-","info":{"fullRange":[6,1,6,28],"adToks":[{"type":"RComment","location":[5,1,5,25],"lexeme":"# read data with read_csv","info":{"fullRange":[6,1,6,28],"adToks":[]}}],"id":17,"parent":90,"nesting":0,"file":"/tmp/tmp-8767-aqSkVX8QRLiR-.R","index":3,"role":"el-c"}},{"type":"RBinaryOp","location":[7,7,7,8],"lhs":{"type":"RSymbol","location":[7,1,7,5],"content":"data2","lexeme":"data2","info":{"fullRange":[7,1,7,5],"adToks":[],"id":18,"parent":23,"role":"bin-l","index":0,"nesting":0,"file":"/tmp/tmp-8767-aqSkVX8QRLiR-.R"}},"rhs":{"type":"RFunctionCall","named":true,"location":[7,10,7,17],"lexeme":"read_csv","functionName":{"type":"RSymbol","location":[7,10,7,17],"content":"read_csv","lexeme":"read_csv","info":{"fullRange":[7,10,7,30],"adToks":[],"id":19,"parent":22,"role":"call-name","index":0,"nesting":0,"file":"/tmp/tmp-8767-aqSkVX8QRLiR-.R"}},"arguments":[{"type":"RArgument","location":[7,19,7,29],"lexeme":"'data2.csv'","value":{"type":"RString","location":[7,19,7,29],"content":{"str":"data2.csv","quotes":"'"},"lexeme":"'data2.csv'","info":{"fullRange":[7,19,7,29],"adToks":[],"id":20,"parent":21,"role":"arg-v","index":0,"nesting":0,"file":"/tmp/tmp-8767-aqSkVX8QRLiR-.R"}},"info":{"fullRange":[7,19,7,29],"adToks":[],"id":21,"parent":22,"nesting":0,"file":"/tmp/tmp-8767-aqSkVX8QRLiR-.R","index":1,"role":"call-arg"}}],"info":{"fullRange":[7,10,7,30],"adToks":[],"id":22,"parent":23,"nesting":0,"file":"/tmp/tmp-8767-aqSkVX8QRLiR-.R","index":1,"role":"bin-r"}},"operator":"<-","lexeme":"<-","info":{"fullRange":[7,1,7,30],"adToks":[],"id":23,"parent":90,"nesting":0,"file":"/tmp/tmp-8767-aqSkVX8QRLiR-.R","index":4,"role":"el-c"}},{"type":"RBinaryOp","location":[9,3,9,4],"lhs":{"type":"RSymbol","location":[9,1,9,1],"content":"m","lexeme":"m","info":{"fullRange":[9,1,9,1],"adToks":[],"id":24,"parent":32,"role":"bin-l","index":0,"nesting":0,"file":"/tmp/tmp-8767-aqSkVX8QRLiR-.R"}},"rhs":{"type":"RFunctionCall","named":true,"location":[9,6,9,9],"lexeme":"mean","functionName":{"type":"RSymbol","location":[9,6,9,9],"content":"mean","lexeme":"mean","info":{"fullRange":[9,6,9,17],"adToks":[],"id":25,"parent":31,"role":"call-name","index":0,"nesting":0,"file":"/tmp/tmp-8767-aqSkVX8QRLiR-.R"}},"arguments":[{"type":"RArgument","location":[9,11,9,16],"lexeme":"data$x","value":{"type":"RAccess","location":[9,15,9,15],"lexeme":"$","accessed":{"type":"RSymbol","location":[9,11,9,14],"content":"data","lexeme":"data","info":{"fullRange":[9,11,9,14],"adToks":[],"id":26,"parent":29,"role":"acc","index":0,"nesting":0,"file":"/tmp/tmp-8767-aqSkVX8QRLiR-.R"}},"operator":"$","access":[{"type":"RArgument","location":[9,16,9,16],"lexeme":"x","value":{"type":"RSymbol","location":[9,16,9,16],"content":"x","lexeme":"x","info":{"fullRange":[9,11,9,16],"adToks":[],"id":27,"parent":28,"role":"arg-v","index":0,"nesting":0,"file":"/tmp/tmp-8767-aqSkVX8QRLiR-.R"}},"info":{"fullRange":[9,16,9,16],"adToks":[],"id":28,"parent":29,"nesting":0,"file":"/tmp/tmp-8767-aqSkVX8QRLiR-.R","index":1,"role":"idx-acc"}}],"info":{"fullRange":[9,11,9,16],"adToks":[],"id":29,"parent":30,"nesting":0,"file":"/tmp/tmp-8767-aqSkVX8QRLiR-.R","index":0,"role":"arg-v"}},"info":{"fullRange":[9,11,9,16],"adToks":[],"id":30,"parent":31,"nesting":0,"file":"/tmp/tmp-8767-aqSkVX8QRLiR-.R","index":1,"role":"call-arg"}}],"info":{"fullRange":[9,6,9,17],"adToks":[],"id":31,"parent":32,"nesting":0,"file":"/tmp/tmp-8767-aqSkVX8QRLiR-.R","index":1,"role":"bin-r"}},"operator":"<-","lexeme":"<-","info":{"fullRange":[9,1,9,17],"adToks":[],"id":32,"parent":90,"nesting":0,"file":"/tmp/tmp-8767-aqSkVX8QRLiR-.R","index":5,"role":"el-c"}},{"type":"RFunctionCall","named":true,"location":[10,1,10,5],"lexeme":"print","functionName":{"type":"RSymbol","location":[10,1,10,5],"content":"print","lexeme":"print","info":{"fullRange":[10,1,10,8],"adToks":[],"id":33,"parent":36,"role":"call-name","index":0,"nesting":0,"file":"/tmp/tmp-8767-aqSkVX8QRLiR-.R"}},"arguments":[{"type":"RArgument","location":[10,7,10,7],"lexeme":"m","value":{"type":"RSymbol","location":[10,7,10,7],"content":"m","lexeme":"m","info":{"fullRange":[10,7,10,7],"adToks":[],"id":34,"parent":35,"role":"arg-v","index":0,"nesting":0,"file":"/tmp/tmp-8767-aqSkVX8QRLiR-.R"}},"info":{"fullRange":[10,7,10,7],"adToks":[],"id":35,"parent":36,"nesting":0,"file":"/tmp/tmp-8767-aqSkVX8QRLiR-.R","index":1,"role":"call-arg"}}],"info":{"fullRange":[10,1,10,8],"adToks":[],"id":36,"parent":90,"nesting":0,"file":"/tmp/tmp-8767-aqSkVX8QRLiR-.R","index":6,"role":"el-c"}},{"type":"RBinaryOp","location":[13,35,13,35],"lhs":{"type":"RFunctionCall","named":true,"infixSpecial":true,"lexeme":"data %>%\n\tggplot(aes(x = x, y = y))","location":[12,6,12,8],"functionName":{"type":"RSymbol","location":[12,6,12,8],"lexeme":"%>%","content":"%>%","info":{"id":37,"parent":52,"role":"call-name","index":0,"nesting":0,"file":"/tmp/tmp-8767-aqSkVX8QRLiR-.R"}},"arguments":[{"type":"RArgument","location":[12,1,12,4],"value":{"type":"RSymbol","location":[12,1,12,4],"content":"data","lexeme":"data","info":{"fullRange":[12,1,12,4],"adToks":[],"id":38,"parent":39,"role":"arg-v","index":0,"nesting":0,"file":"/tmp/tmp-8767-aqSkVX8QRLiR-.R"}},"lexeme":"data","info":{"id":39,"parent":52,"nesting":0,"file":"/tmp/tmp-8767-aqSkVX8QRLiR-.R","index":1,"role":"call-arg"}},{"type":"RArgument","location":[13,9,13,14],"value":{"type":"RFunctionCall","named":true,"location":[13,9,13,14],"lexeme":"ggplot","functionName":{"type":"RSymbol","location":[13,9,13,14],"content":"ggplot","lexeme":"ggplot","info":{"fullRange":[13,9,13,33],"adToks":[],"id":40,"parent":50,"role":"call-name","index":0,"nesting":0,"file":"/tmp/tmp-8767-aqSkVX8QRLiR-.R"}},"arguments":[{"type":"RArgument","location":[13,16,13,32],"lexeme":"aes(x = x, y = y)","value":{"type":"RFunctionCall","named":true,"location":[13,16,13,18],"lexeme":"aes","functionName":{"type":"RSymbol","location":[13,16,13,18],"content":"aes","lexeme":"aes","info":{"fullRange":[13,16,13,32],"adToks":[],"id":41,"parent":48,"role":"call-name","index":0,"nesting":0,"file":"/tmp/tmp-8767-aqSkVX8QRLiR-.R"}},"arguments":[{"type":"RArgument","location":[13,20,13,20],"lexeme":"x","name":{"type":"RSymbol","location":[13,20,13,20],"content":"x","lexeme":"x","info":{"fullRange":[13,20,13,20],"adToks":[],"id":42,"parent":44,"role":"arg-n","index":0,"nesting":0,"file":"/tmp/tmp-8767-aqSkVX8QRLiR-.R"}},"value":{"type":"RSymbol","location":[13,24,13,24],"content":"x","lexeme":"x","info":{"fullRange":[13,24,13,24],"adToks":[],"id":43,"parent":44,"role":"arg-v","index":1,"nesting":0,"file":"/tmp/tmp-8767-aqSkVX8QRLiR-.R"}},"info":{"fullRange":[13,20,13,20],"adToks":[],"id":44,"parent":48,"nesting":0,"file":"/tmp/tmp-8767-aqSkVX8QRLiR-.R","index":1,"role":"call-arg"}},{"type":"RArgument","location":[13,27,13,27],"lexeme":"y","name":{"type":"RSymbol","location":[13,27,13,27],"content":"y","lexeme":"y","info":{"fullRange":[13,27,13,27],"adToks":[],"id":45,"parent":47,"role":"arg-n","index":0,"nesting":0,"file":"/tmp/tmp-8767-aqSkVX8QRLiR-.R"}},"value":{"type":"RSymbol","location":[13,31,13,31],"content":"y","lexeme":"y","info":{"fullRange":[13,31,13,31],"adToks":[],"id":46,"parent":47,"role":"arg-v","index":1,"nesting":0,"file":"/tmp/tmp-8767-aqSkVX8QRLiR-.R"}},"info":{"fullRange":[13,27,13,27],"adToks":[],"id":47,"parent":48,"nesting":0,"file":"/tmp/tmp-8767-aqSkVX8QRLiR-.R","index":2,"role":"call-arg"}}],"info":{"fullRange":[13,16,13,32],"adToks":[],"id":48,"parent":49,"nesting":0,"file":"/tmp/tmp-8767-aqSkVX8QRLiR-.R","index":0,"role":"arg-v"}},"info":{"fullRange":[13,16,13,32],"adToks":[],"id":49,"parent":50,"nesting":0,"file":"/tmp/tmp-8767-aqSkVX8QRLiR-.R","index":1,"role":"call-arg"}}],"info":{"fullRange":[13,9,13,33],"adToks":[],"id":50,"parent":51,"nesting":0,"file":"/tmp/tmp-8767-aqSkVX8QRLiR-.R","index":0,"role":"arg-v"}},"lexeme":"ggplot","info":{"id":51,"parent":52,"nesting":0,"file":"/tmp/tmp-8767-aqSkVX8QRLiR-.R","index":2,"role":"call-arg"}}],"info":{"adToks":[],"id":52,"parent":55,"nesting":0,"file":"/tmp/tmp-8767-aqSkVX8QRLiR-.R","role":"bin-l"}},"rhs":{"type":"RFunctionCall","named":true,"location":[14,9,14,18],"lexeme":"geom_point","functionName":{"type":"RSymbol","location":[14,9,14,18],"content":"geom_point","lexeme":"geom_point","info":{"fullRange":[14,9,14,20],"adToks":[],"id":53,"parent":54,"role":"call-name","index":0,"nesting":0,"file":"/tmp/tmp-8767-aqSkVX8QRLiR-.R"}},"arguments":[],"info":{"fullRange":[14,9,14,20],"adToks":[],"id":54,"parent":55,"nesting":0,"file":"/tmp/tmp-8767-aqSkVX8QRLiR-.R","index":1,"role":"bin-r"}},"operator":"+","lexeme":"+","info":{"fullRange":[12,1,14,20],"adToks":[],"id":55,"parent":90,"nesting":0,"file":"/tmp/tmp-8767-aqSkVX8QRLiR-.R","index":7,"role":"el-c"}},{"type":"RFunctionCall","named":true,"location":[16,1,16,4],"lexeme":"plot","functionName":{"type":"RSymbol","location":[16,1,16,4],"content":"plot","lexeme":"plot","info":{"fullRange":[16,1,16,22],"adToks":[],"id":56,"parent":67,"role":"call-name","index":0,"nesting":0,"file":"/tmp/tmp-8767-aqSkVX8QRLiR-.R"}},"arguments":[{"type":"RArgument","location":[16,6,16,12],"lexeme":"data2$x","value":{"type":"RAccess","location":[16,11,16,11],"lexeme":"$","accessed":{"type":"RSymbol","location":[16,6,16,10],"content":"data2","lexeme":"data2","info":{"fullRange":[16,6,16,10],"adToks":[],"id":57,"parent":60,"role":"acc","index":0,"nesting":0,"file":"/tmp/tmp-8767-aqSkVX8QRLiR-.R"}},"operator":"$","access":[{"type":"RArgument","location":[16,12,16,12],"lexeme":"x","value":{"type":"RSymbol","location":[16,12,16,12],"content":"x","lexeme":"x","info":{"fullRange":[16,6,16,12],"adToks":[],"id":58,"parent":59,"role":"arg-v","index":0,"nesting":0,"file":"/tmp/tmp-8767-aqSkVX8QRLiR-.R"}},"info":{"fullRange":[16,12,16,12],"adToks":[],"id":59,"parent":60,"nesting":0,"file":"/tmp/tmp-8767-aqSkVX8QRLiR-.R","index":1,"role":"idx-acc"}}],"info":{"fullRange":[16,6,16,12],"adToks":[],"id":60,"parent":61,"nesting":0,"file":"/tmp/tmp-8767-aqSkVX8QRLiR-.R","index":0,"role":"arg-v"}},"info":{"fullRange":[16,6,16,12],"adToks":[],"id":61,"parent":67,"nesting":0,"file":"/tmp/tmp-8767-aqSkVX8QRLiR-.R","index":1,"role":"call-arg"}},{"type":"RArgument","location":[16,15,16,21],"lexeme":"data2$y","value":{"type":"RAccess","location":[16,20,16,20],"lexeme":"$","accessed":{"type":"RSymbol","location":[16,15,16,19],"content":"data2","lexeme":"data2","info":{"fullRange":[16,15,16,19],"adToks":[],"id":62,"parent":65,"role":"acc","index":0,"nesting":0,"file":"/tmp/tmp-8767-aqSkVX8QRLiR-.R"}},"operator":"$","access":[{"type":"RArgument","location":[16,21,16,21],"lexeme":"y","value":{"type":"RSymbol","location":[16,21,16,21],"content":"y","lexeme":"y","info":{"fullRange":[16,15,16,21],"adToks":[],"id":63,"parent":64,"role":"arg-v","index":0,"nesting":0,"file":"/tmp/tmp-8767-aqSkVX8QRLiR-.R"}},"info":{"fullRange":[16,21,16,21],"adToks":[],"id":64,"parent":65,"nesting":0,"file":"/tmp/tmp-8767-aqSkVX8QRLiR-.R","index":1,"role":"idx-acc"}}],"info":{"fullRange":[16,15,16,21],"adToks":[],"id":65,"parent":66,"nesting":0,"file":"/tmp/tmp-8767-aqSkVX8QRLiR-.R","index":0,"role":"arg-v"}},"info":{"fullRange":[16,15,16,21],"adToks":[],"id":66,"parent":67,"nesting":0,"file":"/tmp/tmp-8767-aqSkVX8QRLiR-.R","index":2,"role":"call-arg"}}],"info":{"fullRange":[16,1,16,22],"adToks":[],"id":67,"parent":90,"nesting":0,"file":"/tmp/tmp-8767-aqSkVX8QRLiR-.R","index":8,"role":"el-c"}},{"type":"RFunctionCall","named":true,"location":[17,1,17,6],"lexeme":"points","functionName":{"type":"RSymbol","location":[17,1,17,6],"content":"points","lexeme":"points","info":{"fullRange":[17,1,17,24],"adToks":[],"id":68,"parent":79,"role":"call-name","index":0,"nesting":0,"file":"/tmp/tmp-8767-aqSkVX8QRLiR-.R"}},"arguments":[{"type":"RArgument","location":[17,8,17,14],"lexeme":"data2$x","value":{"type":"RAccess","location":[17,13,17,13],"lexeme":"$","accessed":{"type":"RSymbol","location":[17,8,17,12],"content":"data2","lexeme":"data2","info":{"fullRange":[17,8,17,12],"adToks":[],"id":69,"parent":72,"role":"acc","index":0,"nesting":0,"file":"/tmp/tmp-8767-aqSkVX8QRLiR-.R"}},"operator":"$","access":[{"type":"RArgument","location":[17,14,17,14],"lexeme":"x","value":{"type":"RSymbol","location":[17,14,17,14],"content":"x","lexeme":"x","info":{"fullRange":[17,8,17,14],"adToks":[],"id":70,"parent":71,"role":"arg-v","index":0,"nesting":0,"file":"/tmp/tmp-8767-aqSkVX8QRLiR-.R"}},"info":{"fullRange":[17,14,17,14],"adToks":[],"id":71,"parent":72,"nesting":0,"file":"/tmp/tmp-8767-aqSkVX8QRLiR-.R","index":1,"role":"idx-acc"}}],"info":{"fullRange":[17,8,17,14],"adToks":[],"id":72,"parent":73,"nesting":0,"file":"/tmp/tmp-8767-aqSkVX8QRLiR-.R","index":0,"role":"arg-v"}},"info":{"fullRange":[17,8,17,14],"adToks":[],"id":73,"parent":79,"nesting":0,"file":"/tmp/tmp-8767-aqSkVX8QRLiR-.R","index":1,"role":"call-arg"}},{"type":"RArgument","location":[17,17,17,23],"lexeme":"data2$y","value":{"type":"RAccess","location":[17,22,17,22],"lexeme":"$","accessed":{"type":"RSymbol","location":[17,17,17,21],"content":"data2","lexeme":"data2","info":{"fullRange":[17,17,17,21],"adToks":[],"id":74,"parent":77,"role":"acc","index":0,"nesting":0,"file":"/tmp/tmp-8767-aqSkVX8QRLiR-.R"}},"operator":"$","access":[{"type":"RArgument","location":[17,23,17,23],"lexeme":"y","value":{"type":"RSymbol","location":[17,23,17,23],"content":"y","lexeme":"y","info":{"fullRange":[17,17,17,23],"adToks":[],"id":75,"parent":76,"role":"arg-v","index":0,"nesting":0,"file":"/tmp/tmp-8767-aqSkVX8QRLiR-.R"}},"info":{"fullRange":[17,23,17,23],"adToks":[],"id":76,"parent":77,"nesting":0,"file":"/tmp/tmp-8767-aqSkVX8QRLiR-.R","index":1,"role":"idx-acc"}}],"info":{"fullRange":[17,17,17,23],"adToks":[],"id":77,"parent":78,"nesting":0,"file":"/tmp/tmp-8767-aqSkVX8QRLiR-.R","index":0,"role":"arg-v"}},"info":{"fullRange":[17,17,17,23],"adToks":[],"id":78,"parent":79,"nesting":0,"file":"/tmp/tmp-8767-aqSkVX8QRLiR-.R","index":2,"role":"call-arg"}}],"info":{"fullRange":[17,1,17,24],"adToks":[],"id":79,"parent":90,"nesting":0,"file":"/tmp/tmp-8767-aqSkVX8QRLiR-.R","index":9,"role":"el-c"}},{"type":"RFunctionCall","named":true,"location":[19,1,19,5],"lexeme":"print","functionName":{"type":"RSymbol","location":[19,1,19,5],"content":"print","lexeme":"print","info":{"fullRange":[19,1,19,20],"adToks":[],"id":80,"parent":89,"role":"call-name","index":0,"nesting":0,"file":"/tmp/tmp-8767-aqSkVX8QRLiR-.R"}},"arguments":[{"type":"RArgument","location":[19,7,19,19],"lexeme":"mean(data2$k)","value":{"type":"RFunctionCall","named":true,"location":[19,7,19,10],"lexeme":"mean","functionName":{"type":"RSymbol","location":[19,7,19,10],"content":"mean","lexeme":"mean","info":{"fullRange":[19,7,19,19],"adToks":[],"id":81,"parent":87,"role":"call-name","index":0,"nesting":0,"file":"/tmp/tmp-8767-aqSkVX8QRLiR-.R"}},"arguments":[{"type":"RArgument","location":[19,12,19,18],"lexeme":"data2$k","value":{"type":"RAccess","location":[19,17,19,17],"lexeme":"$","accessed":{"type":"RSymbol","location":[19,12,19,16],"content":"data2","lexeme":"data2","info":{"fullRange":[19,12,19,16],"adToks":[],"id":82,"parent":85,"role":"acc","index":0,"nesting":0,"file":"/tmp/tmp-8767-aqSkVX8QRLiR-.R"}},"operator":"$","access":[{"type":"RArgument","location":[19,18,19,18],"lexeme":"k","value":{"type":"RSymbol","location":[19,18,19,18],"content":"k","lexeme":"k","info":{"fullRange":[19,12,19,18],"adToks":[],"id":83,"parent":84,"role":"arg-v","index":0,"nesting":0,"file":"/tmp/tmp-8767-aqSkVX8QRLiR-.R"}},"info":{"fullRange":[19,18,19,18],"adToks":[],"id":84,"parent":85,"nesting":0,"file":"/tmp/tmp-8767-aqSkVX8QRLiR-.R","index":1,"role":"idx-acc"}}],"info":{"fullRange":[19,12,19,18],"adToks":[],"id":85,"parent":86,"nesting":0,"file":"/tmp/tmp-8767-aqSkVX8QRLiR-.R","index":0,"role":"arg-v"}},"info":{"fullRange":[19,12,19,18],"adToks":[],"id":86,"parent":87,"nesting":0,"file":"/tmp/tmp-8767-aqSkVX8QRLiR-.R","index":1,"role":"call-arg"}}],"info":{"fullRange":[19,7,19,19],"adToks":[],"id":87,"parent":88,"nesting":0,"file":"/tmp/tmp-8767-aqSkVX8QRLiR-.R","index":0,"role":"arg-v"}},"info":{"fullRange":[19,7,19,19],"adToks":[],"id":88,"parent":89,"nesting":0,"file":"/tmp/tmp-8767-aqSkVX8QRLiR-.R","index":1,"role":"call-arg"}}],"info":{"fullRange":[19,1,19,20],"adToks":[],"id":89,"parent":90,"nesting":0,"file":"/tmp/tmp-8767-aqSkVX8QRLiR-.R","index":10,"role":"el-c"}}],"info":{"adToks":[],"id":90,"nesting":0,"file":"/tmp/tmp-8767-aqSkVX8QRLiR-.R","role":"root","index":0}},"filePath":"/tmp/tmp-8767-aqSkVX8QRLiR-.R"}],"info":{"id":91}},".meta":{"timing":0}},"dataflow":{"unknownReferences":[],"in":[{"nodeId":3,"name":"library","type":2},{"nodeId":7,"name":"library","type":2},{"nodeId":11,"name":"library","type":2},{"nodeId":17,"name":"<-","type":2},{"nodeId":23,"name":"<-","type":2},{"nodeId":32,"name":"<-","type":2},{"nodeId":16,"name":"read_csv","type":2},{"nodeId":22,"name":"read_csv","type":2},{"nodeId":29,"name":"$","type":2},{"nodeId":60,"name":"$","type":2},{"nodeId":65,"name":"$","type":2},{"nodeId":72,"name":"$","type":2},{"nodeId":77,"name":"$","type":2},{"nodeId":85,"name":"$","type":2},{"nodeId":31,"name":"mean","type":2},{"nodeId":87,"name":"mean","type":2},{"nodeId":36,"name":"print","type":2},{"nodeId":89,"name":"print","type":2},{"nodeId":43,"name":"x","type":1},{"nodeId":46,"name":"y","type":1},{"nodeId":48,"name":"aes","type":2},{"nodeId":50,"name":"ggplot","type":2},{"nodeId":52,"name":"%>%","type":2},{"nodeId":54,"name":"geom_point","type":2},{"nodeId":55,"name":"+","type":2},{"nodeId":67,"name":"plot","type":2},{"nodeId":79,"name":"points","type":2}],"out":[{"nodeId":12,"name":"data","type":1,"definedAt":17,"value":[]},{"nodeId":18,"name":"data2","type":1,"definedAt":23,"value":[]},{"nodeId":24,"name":"m","type":1,"definedAt":32,"value":[31]}],"environment":{"current":{"id":2070,"parent":"<BuiltInEnvironment>","memory":[["data",[{"nodeId":12,"name":"data","type":1,"definedAt":17,"value":[]}]],["data2",[{"nodeId":18,"name":"data2","type":1,"definedAt":23,"value":[]}]],["m",[{"nodeId":24,"name":"m","type":1,"definedAt":32,"value":[31]}]]]},"level":0},"graph":{"rootVertices":[1,3,5,7,9,11,14,16,12,17,20,22,18,23,26,27,29,31,24,32,34,36,38,43,44,46,47,48,50,52,54,55,57,58,60,62,63,65,67,69,70,72,74,75,77,79,82,83,85,87,89],"vertexInformation":[[1,{"tag":"value","id":1}],[3,{"tag":"fcall","id":3,"name":"library","onlyBuiltin":true,"args":[{"nodeId":1,"type":32}],"origin":["builtin:library"]}],[5,{"tag":"value","id":5}],[7,{"tag":"fcall","id":7,"name":"library","onlyBuiltin":true,"args":[{"nodeId":5,"type":32}],"origin":["builtin:library"]}],[9,{"tag":"value","id":9}],[11,{"tag":"fcall","id":11,"name":"library","onlyBuiltin":true,"args":[{"nodeId":9,"type":32}],"origin":["builtin:library"]}],[14,{"tag":"value","id":14}],[16,{"tag":"fcall","id":16,"environment":{"current":{"id":2046,"parent":"<BuiltInEnvironment>","memory":[]},"level":0},"name":"read_csv","onlyBuiltin":false,"args":[{"nodeId":14,"type":32}],"origin":["function"]}],[12,{"tag":"vdef","id":12}],[17,{"tag":"fcall","id":17,"name":"<-","onlyBuiltin":true,"args":[{"nodeId":12,"type":32},{"nodeId":16,"type":32}],"origin":["builtin:assignment"]}],[20,{"tag":"value","id":20}],[22,{"tag":"fcall","id":22,"environment":{"current":{"id":2054,"parent":"<BuiltInEnvironment>","memory":[["data",[{"nodeId":12,"name":"data","type":1,"definedAt":17,"value":[]}]]]},"level":0},"name":"read_csv","onlyBuiltin":false,"args":[{"nodeId":20,"type":32}],"origin":["function"]}],[18,{"tag":"vdef","id":18}],[23,{"tag":"fcall","id":23,"name":"<-","onlyBuiltin":true,"args":[{"nodeId":18,"type":32},{"nodeId":22,"type":32}],"origin":["builtin:assignment"]}],[26,{"tag":"use","id":26}],[27,{"tag":"value","id":27}],[29,{"tag":"fcall","id":29,"name":"$","onlyBuiltin":true,"args":[{"nodeId":26,"type":32},{"nodeId":27,"type":32}],"origin":["builtin:access"]}],[31,{"tag":"fcall","id":31,"name":"mean","onlyBuiltin":true,"args":[{"nodeId":29,"type":32}],"origin":["builtin:default"]}],[24,{"tag":"vdef","id":24}],[32,{"tag":"fcall","id":32,"name":"<-","onlyBuiltin":true,"args":[{"nodeId":24,"type":32},{"nodeId":31,"type":32}],"origin":["builtin:assignment"]}],[34,{"tag":"use","id":34}],[36,{"tag":"fcall","id":36,"name":"print","onlyBuiltin":true,"args":[{"nodeId":34,"type":32}],"origin":["builtin:default"]}],[38,{"tag":"use","id":38}],[43,{"tag":"use","id":43}],[44,{"tag":"use","id":44}],[46,{"tag":"use","id":46}],[47,{"tag":"use","id":47}],[48,{"tag":"fcall","id":48,"environment":{"current":{"id":2087,"parent":"<BuiltInEnvironment>","memory":[["data",[{"nodeId":12,"name":"data","type":1,"definedAt":17,"value":[]}]],["data2",[{"nodeId":18,"name":"data2","type":1,"definedAt":23,"value":[]}]],["m",[{"nodeId":24,"name":"m","type":1,"definedAt":32,"value":[31]}]]]},"level":0},"name":"aes","onlyBuiltin":false,"args":[{"nodeId":44,"name":"x","type":32},{"nodeId":47,"name":"y","type":32}],"origin":["function"]}],[50,{"tag":"fcall","id":50,"name":"ggplot","onlyBuiltin":true,"args":[{"nodeId":38,"type":2},{"nodeId":48,"type":32}],"origin":["builtin:default"]}],[52,{"tag":"fcall","id":52,"name":"%>%","onlyBuiltin":true,"args":[{"nodeId":38,"type":32},{"nodeId":50,"type":32}],"origin":["builtin:pipe"]}],[54,{"tag":"fcall","id":54,"name":"geom_point","onlyBuiltin":true,"args":[],"origin":["builtin:default"]}],[55,{"tag":"fcall","id":55,"name":"+","onlyBuiltin":true,"args":[{"nodeId":52,"type":32},{"nodeId":54,"type":32}],"origin":["builtin:default"]}],[57,{"tag":"use","id":57}],[58,{"tag":"value","id":58}],[60,{"tag":"fcall","id":60,"name":"$","onlyBuiltin":true,"args":[{"nodeId":57,"type":32},{"nodeId":58,"type":32}],"origin":["builtin:access"]}],[62,{"tag":"use","id":62}],[63,{"tag":"value","id":63}],[65,{"tag":"fcall","id":65,"name":"$","onlyBuiltin":true,"args":[{"nodeId":62,"type":32},{"nodeId":63,"type":32}],"origin":["builtin:access"]}],[67,{"tag":"fcall","id":67,"name":"plot","onlyBuiltin":true,"args":[{"nodeId":60,"type":32},{"nodeId":65,"type":32}],"origin":["builtin:default"]}],[69,{"tag":"use","id":69}],[70,{"tag":"value","id":70}],[72,{"tag":"fcall","id":72,"name":"$","onlyBuiltin":true,"args":[{"nodeId":69,"type":32},{"nodeId":70,"type":32}],"origin":["builtin:access"]}],[74,{"tag":"use","id":74}],[75,{"tag":"value","id":75}],[77,{"tag":"fcall","id":77,"name":"$","onlyBuiltin":true,"args":[{"nodeId":74,"type":32},{"nodeId":75,"type":32}],"origin":["builtin:access"]}],[79,{"tag":"fcall","id":79,"name":"points","onlyBuiltin":true,"args":[{"nodeId":72,"type":32},{"nodeId":77,"type":32}],"origin":["builtin:default"]}],[82,{"tag":"use","id":82}],[83,{"tag":"value","id":83}],[85,{"tag":"fcall","id":85,"name":"$","onlyBuiltin":true,"args":[{"nodeId":82,"type":32},{"nodeId":83,"type":32}],"origin":["builtin:access"]}],[87,{"tag":"fcall","id":87,"name":"mean","onlyBuiltin":true,"args":[{"nodeId":85,"type":32}],"origin":["builtin:default"]}],[89,{"tag":"fcall","id":89,"name":"print","onlyBuiltin":true,"args":[{"nodeId":87,"type":32}],"origin":["builtin:default"]}]],"edgeInformation":[[3,[[1,{"types":64}],["built-in:library",{"types":5}]]],[7,[[5,{"types":64}],["built-in:library",{"types":5}]]],[11,[[9,{"types":64}],["built-in:library",{"types":5}]]],[16,[[14,{"types":64}]]],[17,[[16,{"types":65}],[12,{"types":72}],["built-in:<-",{"types":5}]]],[12,[[16,{"types":2}],[17,{"types":2}]]],[22,[[20,{"types":64}]]],[23,[[22,{"types":65}],[18,{"types":72}],["built-in:<-",{"types":5}]]],[18,[[22,{"types":2}],[23,{"types":2}]]],[26,[[12,{"types":1}]]],[29,[[26,{"types":73}],[27,{"types":65}],["built-in:$",{"types":5}]]],[31,[[29,{"types":65}],["built-in:mean",{"types":5}]]],[32,[[31,{"types":65}],[24,{"types":72}],["built-in:<-",{"types":5}]]],[24,[[31,{"types":2}],[32,{"types":2}]]],[36,[[34,{"types":73}],["built-in:print",{"types":5}]]],[34,[[24,{"types":1}]]],[38,[[12,{"types":1}]]],[52,[[38,{"types":64}],[50,{"types":64}],["built-in:%>%",{"types":5}]]],[44,[[43,{"types":1}]]],[48,[[43,{"types":1}],[44,{"types":64}],[46,{"types":1}],[47,{"types":64}]]],[47,[[46,{"types":1}]]],[50,[[48,{"types":65}],[38,{"types":65}],["built-in:ggplot",{"types":5}]]],[55,[[52,{"types":65}],[54,{"types":65}],["built-in:+",{"types":5}]]],[54,[["built-in:geom_point",{"types":5}],[50,{"types":1}]]],[57,[[18,{"types":1}]]],[60,[[57,{"types":73}],[58,{"types":65}],["built-in:$",{"types":5}]]],[67,[[60,{"types":65}],[65,{"types":65}],["built-in:plot",{"types":5}]]],[62,[[18,{"types":1}]]],[65,[[62,{"types":73}],[63,{"types":65}],["built-in:$",{"types":5}]]],[69,[[18,{"types":1}]]],[72,[[69,{"types":73}],[70,{"types":65}],["built-in:$",{"types":5}]]],[79,[[72,{"types":65}],[77,{"types":65}],["built-in:points",{"types":5}],[67,{"types":1}]]],[74,[[18,{"types":1}]]],[77,[[74,{"types":73}],[75,{"types":65}],["built-in:$",{"types":5}]]],[82,[[18,{"types":1}]]],[85,[[82,{"types":73}],[83,{"types":65}],["built-in:$",{"types":5}]]],[87,[[85,{"types":65}],["built-in:mean",{"types":5}]]],[89,[[87,{"types":73}],["built-in:print",{"types":5}]]]],"_unknownSideEffects":[3,7,11,{"id":36,"linkTo":{"type":"link-to-last-call","callName":{}}},{"id":50,"linkTo":{"type":"link-to-last-call","callName":{}}},{"id":67,"linkTo":{"type":"link-to-last-call","callName":{}}},{"id":89,"linkTo":{"type":"link-to-last-call","callName":{}}}]},"entryPoint":3,"exitPoints":[{"type":0,"nodeId":89}],"hooks":[],"cfgQuick":{"graph":{"roots":[90,0,3,"3-e",2,1,"2-e",4,7,"7-e",6,5,"6-e",8,11,"11-e",10,9,"10-e",12,13,16,"16-e",15,14,"15-e",17,"17-e",18,19,22,"22-e",21,20,"21-e",23,"23-e",24,25,31,"31-e",30,26,29,28,27,"28-e","29-e","30-e",32,"32-e",33,36,"36-e",35,34,"35-e",37,52,"52-e",39,38,"39-e",51,40,50,"50-e",49,41,48,"48-e",44,42,43,"44-e",47,45,46,"47-e","49-e","51-e",53,54,"54-e",55,"55-e",56,67,"67-e",61,57,60,59,58,"59-e","60-e","61-e",66,62,65,64,63,"64-e","65-e","66-e",68,79,"79-e",73,69,72,71,70,"71-e","72-e","73-e",78,74,77,76,75,"76-e","77-e","78-e",80,89,"89-e",88,81,87,"87-e",86,82,85,84,83,"84-e","85-e","86-e","88-e","90-e"],"vtxInfos":[[90,[2,90,null,["90-e"]]],[0,[2,0]],[3,[1,3,[0],["3-e"]]],["3-e","3-e"],[2,[2,2,[2],["2-e"]]],[1,[2,1]],["2-e","2-e"],[4,[2,4]],[7,[1,7,[4],["7-e"]]],["7-e","7-e"],[6,[2,6,[6],["6-e"]]],[5,[2,5]],["6-e","6-e"],[8,[2,8]],[11,[1,11,[8],["11-e"]]],["11-e","11-e"],[10,[2,10,[10],["10-e"]]],[9,[2,9]],["10-e","10-e"],[12,[2,12]],[13,[2,13]],[16,[2,16,[13],["16-e"]]],["16-e","16-e"],[15,[2,15,[15],["15-e"]]],[14,[2,14]],["15-e","15-e"],[17,[2,17,null,["17-e"]]],["17-e","17-e"],[18,[2,18]],[19,[2,19]],[22,[2,22,[19],["22-e"]]],["22-e","22-e"],[21,[2,21,[21],["21-e"]]],[20,[2,20]],["21-e","21-e"],[23,[2,23,null,["23-e"]]],["23-e","23-e"],[24,[2,24]],[25,[2,25]],[31,[2,31,[25],["31-e"]]],["31-e","31-e"],[30,[2,30,[30],["30-e"]]],[26,[2,26]],[29,[2,29,[26],["29-e"]]],[28,[2,28,[28],["28-e"]]],[27,[2,27]],["28-e","28-e"],["29-e","29-e"],["30-e","30-e"],[32,[2,32,null,["32-e"]]],["32-e","32-e"],[33,[2,33]],[36,[1,36,[33],["36-e"]]],["36-e","36-e"],[35,[2,35,[35],["35-e"]]],[34,[2,34]],["35-e","35-e"],[37,[2,37]],[52,[2,52,[37],["52-e"]]],["52-e","52-e"],[39,[2,39,[39],["39-e"]]],[38,[2,38]],["39-e","39-e"],[51,[2,51,[51],["51-e"]]],[40,[2,40]],[50,[2,50,[40],["50-e"]]],["50-e","50-e"],[49,[2,49,[49],["49-e"]]],[41,[2,41]],[48,[2,48,[41],["48-e"]]],["48-e","48-e"],[44,[2,44,[42],["44-e"]]],[42,[2,42]],[43,[2,43]],["44-e","44-e"],[47,[2,47,[45],["47-e"]]],[45,[2,45]],[46,[2,46]],["47-e","47-e"],["49-e","49-e"],["51-e","51-e"],[53,[2,53]],[54,[2,54,[53],["54-e"]]],["54-e","54-e"],[55,[2,55,null,["55-e"]]],["55-e","55-e"],[56,[2,56]],[67,[1,67,[56],["67-e"]]],["67-e","67-e"],[61,[2,61,[61],["61-e"]]],[57,[2,57]],[60,[2,60,[57],["60-e"]]],[59,[2,59,[59],["59-e"]]],[58,[2,58]],["59-e","59-e"],["60-e","60-e"],["61-e","61-e"],[66,[2,66,[66],["66-e"]]],[62,[2,62]],[65,[2,65,[62],["65-e"]]],[64,[2,64,[64],["64-e"]]],[63,[2,63]],["64-e","64-e"],["65-e","65-e"],["66-e","66-e"],[68,[2,68]],[79,[1,79,[68],["79-e"]]],["79-e","79-e"],[73,[2,73,[73],["73-e"]]],[69,[2,69]],[72,[2,72,[69],["72-e"]]],[71,[2,71,[71],["71-e"]]],[70,[2,70]],["71-e","71-e"],["72-e","72-e"],["73-e","73-e"],[78,[2,78,[78],["78-e"]]],[74,[2,74]],[77,[2,77,[74],["77-e"]]],[76,[2,76,[76],["76-e"]]],[75,[2,75]],["76-e","76-e"],["77-e","77-e"],["78-e","78-e"],[80,[2,80]],[89,[1,89,[80],["89-e"]]],["89-e","89-e"],[88,[2,88,[88],["88-e"]]],[81,[2,81]],[87,[2,87,[81],["87-e"]]],["87-e","87-e"],[86,[2,86,[86],["86-e"]]],[82,[2,82]],[85,[2,85,[82],["85-e"]]],[84,[2,84,[84],["84-e"]]],[83,[2,83]],["84-e","84-e"],["85-e","85-e"],["86-e","86-e"],["88-e","88-e"],["90-e","90-e"]],"bbChildren":[],"edgeInfos":[[3,[[90,0]]],[0,[[3,0]]],[1,[[2,0]]],["2-e",[[1,0]]],[2,[[0,0]]],["3-e",[["2-e",0]]],[7,[["3-e",0]]],[4,[[7,0]]],[5,[[6,0]]],["6-e",[[5,0]]],[6,[[4,0]]],["7-e",[["6-e",0]]],[11,[["7-e",0]]],[8,[[11,0]]],[9,[[10,0]]],["10-e",[[9,0]]],[10,[[8,0]]],["11-e",[["10-e",0]]],[17,[["11-e",0]]],[13,[[16,0]]],[14,[[15,0]]],["15-e",[[14,0]]],[15,[[13,0]]],["16-e",[["15-e",0]]],[16,[[12,0]]],[12,[[17,0]]],["17-e",[["16-e",0]]],[23,[["17-e",0]]],[19,[[22,0]]],[20,[[21,0]]],["21-e",[[20,0]]],[21,[[19,0]]],["22-e",[["21-e",0]]],[22,[[18,0]]],[18,[[23,0]]],["23-e",[["22-e",0]]],[32,[["23-e",0]]],[25,[[31,0]]],[26,[[29,0]]],[27,[[28,0]]],["28-e",[[27,0]]],[28,[[26,0]]],["29-e",[["28-e",0]]],[29,[[30,0]]],["30-e",[["29-e",0]]],[30,[[25,0]]],["31-e",[["30-e",0]]],[31,[[24,0]]],[24,[[32,0]]],["32-e",[["31-e",0]]],[36,[["32-e",0]]],[33,[[36,0]]],[34,[[35,0]]],["35-e",[[34,0]]],[35,[[33,0]]],["36-e",[["35-e",0]]],[55,[["36-e",0]]],[37,[[52,0]]],[38,[[39,0]]],["39-e",[[38,0]]],[39,[[37,0]]],[40,[[50,0]]],[41,[[48,0]]],[42,[[44,0]]],[43,[[42,0]]],["44-e",[[43,0]]],[44,[[41,0]]],[45,[[47,0]]],[46,[[45,0]]],["47-e",[[46,0]]],[47,[["44-e",0]]],["48-e",[["47-e",0]]],[48,[[49,0]]],["49-e",[["48-e",0]]],[49,[[40,0]]],["50-e",[["49-e",0]]],[50,[[51,0]]],["51-e",[["50-e",0]]],[51,[["39-e",0]]],["52-e",[["51-e",0]]],[53,[[54,0]]],["54-e",[[53,0]]],[54,[["52-e",0]]],[52,[[55,0]]],["55-e",[["54-e",0]]],[67,[["55-e",0]]],[56,[[67,0]]],[57,[[60,0]]],[58,[[59,0]]],["59-e",[[58,0]]],[59,[[57,0]]],["60-e",[["59-e",0]]],[60,[[61,0]]],["61-e",[["60-e",0]]],[61,[[56,0]]],[62,[[65,0]]],[63,[[64,0]]],["64-e",[[63,0]]],[64,[[62,0]]],["65-e",[["64-e",0]]],[65,[[66,0]]],["66-e",[["65-e",0]]],[66,[["61-e",0]]],["67-e",[["66-e",0]]],[79,[["67-e",0]]],[68,[[79,0]]],[69,[[72,0]]],[70,[[71,0]]],["71-e",[[70,0]]],[71,[[69,0]]],["72-e",[["71-e",0]]],[72,[[73,0]]],["73-e",[["72-e",0]]],[73,[[68,0]]],[74,[[77,0]]],[75,[[76,0]]],["76-e",[[75,0]]],[76,[[74,0]]],["77-e",[["76-e",0]]],[77,[[78,0]]],["78-e",[["77-e",0]]],[78,[["73-e",0]]],["79-e",[["78-e",0]]],[89,[["79-e",0]]],[80,[[89,0]]],[81,[[87,0]]],[82,[[85,0]]],[83,[[84,0]]],["84-e",[[83,0]]],[84,[[82,0]]],["85-e",[["84-e",0]]],[85,[[86,0]]],["86-e",[["85-e",0]]],[86,[[81,0]]],["87-e",[["86-e",0]]],[87,[[88,0]]],["88-e",[["87-e",0]]],[88,[[80,0]]],["89-e",[["88-e",0]]],["90-e",[["89-e",0]]]],"revEdgeInfos":[[90,[[3,0]]],[3,[[0,0]]],[2,[[1,0]]],[1,[["2-e",0]]],[0,[[2,0]]],["2-e",[["3-e",0]]],["3-e",[[7,0]]],[7,[[4,0]]],[6,[[5,0]]],[5,[["6-e",0]]],[4,[[6,0]]],["6-e",[["7-e",0]]],["7-e",[[11,0]]],[11,[[8,0]]],[10,[[9,0]]],[9,[["10-e",0]]],[8,[[10,0]]],["10-e",[["11-e",0]]],["11-e",[[17,0]]],[16,[[13,0]]],[15,[[14,0]]],[14,[["15-e",0]]],[13,[[15,0]]],["15-e",[["16-e",0]]],[12,[[16,0]]],[17,[[12,0]]],["16-e",[["17-e",0]]],["17-e",[[23,0]]],[22,[[19,0]]],[21,[[20,0]]],[20,[["21-e",0]]],[19,[[21,0]]],["21-e",[["22-e",0]]],[18,[[22,0]]],[23,[[18,0]]],["22-e",[["23-e",0]]],["23-e",[[32,0]]],[31,[[25,0]]],[29,[[26,0]]],[28,[[27,0]]],[27,[["28-e",0]]],[26,[[28,0]]],["28-e",[["29-e",0]]],[30,[[29,0]]],["29-e",[["30-e",0]]],[25,[[30,0]]],["30-e",[["31-e",0]]],[24,[[31,0]]],[32,[[24,0]]],["31-e",[["32-e",0]]],["32-e",[[36,0]]],[36,[[33,0]]],[35,[[34,0]]],[34,[["35-e",0]]],[33,[[35,0]]],["35-e",[["36-e",0]]],["36-e",[[55,0]]],[52,[[37,0]]],[39,[[38,0]]],[38,[["39-e",0]]],[37,[[39,0]]],[50,[[40,0]]],[48,[[41,0]]],[44,[[42,0]]],[42,[[43,0]]],[43,[["44-e",0]]],[41,[[44,0]]],[47,[[45,0]]],[45,[[46,0]]],[46,[["47-e",0]]],["44-e",[[47,0]]],["47-e",[["48-e",0]]],[49,[[48,0]]],["48-e",[["49-e",0]]],[40,[[49,0]]],["49-e",[["50-e",0]]],[51,[[50,0]]],["50-e",[["51-e",0]]],["39-e",[[51,0]]],["51-e",[["52-e",0]]],[54,[[53,0]]],[53,[["54-e",0]]],["52-e",[[54,0]]],[55,[[52,0]]],["54-e",[["55-e",0]]],["55-e",[[67,0]]],[67,[[56,0]]],[60,[[57,0]]],[59,[[58,0]]],[58,[["59-e",0]]],[57,[[59,0]]],["59-e",[["60-e",0]]],[61,[[60,0]]],["60-e",[["61-e",0]]],[56,[[61,0]]],[65,[[62,0]]],[64,[[63,0]]],[63,[["64-e",0]]],[62,[[64,0]]],["64-e",[["65-e",0]]],[66,[[65,0]]],["65-e",[["66-e",0]]],["61-e",[[66,0]]],["66-e",[["67-e",0]]],["67-e",[[79,0]]],[79,[[68,0]]],[72,[[69,0]]],[71,[[70,0]]],[70,[["71-e",0]]],[69,[[71,0]]],["71-e",[["72-e",0]]],[73,[[72,0]]],["72-e",[["73-e",0]]],[68,[[73,0]]],[77,[[74,0]]],[76,[[75,0]]],[75,[["76-e",0]]],[74,[[76,0]]],["76-e",[["77-e",0]]],[78,[[77,0]]],["77-e",[["78-e",0]]],["73-e",[[78,0]]],["78-e",[["79-e",0]]],["79-e",[[89,0]]],[89,[[80,0]]],[87,[[81,0]]],[85,[[82,0]]],[84,[[83,0]]],[83,[["84-e",0]]],[82,[[84,0]]],["84-e",[["85-e",0]]],[86,[[85,0]]],["85-e",[["86-e",0]]],[81,[[86,0]]],["86-e",[["87-e",0]]],[88,[[87,0]]],["87-e",[["88-e",0]]],[80,[[88,0]]],["88-e",[["89-e",0]]],["89-e",[["90-e",0]]]],"_mayBB":false},"breaks":[],"nexts":[],"returns":[],"exitPoints":["90-e"],"entryPoints":[90]},".meta":{"timing":2}}}}
      
    4. request-query (request)
      Show Details
      {
        "type": "request-query",
        "id": "2",
        "filetoken": "x",
        "query": [
          {
            "type": "compound",
            "query": "call-context",
            "commonArguments": {
              "kind": "visualize",
              "subkind": "text",
              "callTargets": "global"
            },
            "arguments": [
              {
                "callName": "^mean$"
              },
              {
                "callName": "^print$",
                "callTargets": "local"
              }
            ]
          }
        ]
      }
    5. response-query (response)
      Show Details
      {
        "type": "response-query",
        "id": "2",
        "results": {
          "call-context": {
            ".meta": {
              "timing": 1
            },
            "kinds": {
              "visualize": {
                "subkinds": {
                  "text": [
                    {
                      "id": 31,
                      "name": "mean",
                      "calls": [
                        "built-in"
                      ]
                    },
                    {
                      "id": 87,
                      "name": "mean",
                      "calls": [
                        "built-in"
                      ]
                    }
                  ]
                }
              }
            }
          },
          ".meta": {
            "timing": 1
          }
        }
      }

    The complete round-trip took 19.1 ms (including time required to validate the messages, start, and stop the internal mock server).


    Message schema (request-query)

    For the definition of the hello message, please see it's implementation at ./src/cli/repl/server/messages/message-query.ts.

    • Request a query to be run on the file analysis information. (object)
      • type [required] The type of the message. (string) Only allows: 'request-query'
      • id [optional] If you give the id, the response will be sent to the client with the same id. (string)
      • filetoken [required] The filetoken of the file/data retrieved from the analysis request. (string)
      • query [required] The query to run on the file analysis information. (array) Valid item types:
        • A virtual or an active query! (alternatives)
          • Supported queries (alternatives)
            • Call context query used to find calls in the dataflow graph (object)
              • type [required] The type of the query. (string) Only allows: 'call-context'
              • callName [required] Regex regarding the function name! (string)
              • callNameExact [optional] Should we automatically add the ^ and $ anchors to the regex to make it an exact match? (boolean)
              • kind [optional] The kind of the call, this can be used to group calls together (e.g., linking plot to visualize). Defaults to . (string)
              • subkind [optional] The subkind of the call, this can be used to uniquely identify the respective call type when grouping the output (e.g., the normalized name, linking ggplot to plot). Defaults to . (string)
              • callTargets [optional] Call targets the function may have. This defaults to any. Request this specifically to gain all call targets we can resolve. (string) Only allows: 'global', 'must-include-global', 'local', 'must-include-local', 'any'
              • ignoreParameterValues [optional] Should we ignore default values for parameters in the results? (boolean)
              • includeAliases [optional] Consider a case like f <- function_of_interest, do you want uses of f to be included in the results? (boolean)
              • fileFilter [optional] Filter that, when set, a node's file attribute must match to be considered (object)
                • fileFilter [required] Regex that a node's file attribute must match to be considered (string)
                • includeUndefinedFiles [optional] If fileFilter is set, but a nodes file attribute is undefined, should we include it in the results? Defaults to true. (boolean)
              • linkTo [optional] Links the current call to the last call of the given kind. This way, you can link a call like points to the latest graphics plot etc. (alternatives)
                • (alternatives)
                  • Links the current call to the last call of the given kind. This way, you can link a call like points to the latest graphics plot etc. (object)
                    • type [required] The type of the linkTo sub-query. (string) Only allows: 'link-to-last-call'
                    • callName [required] Test regarding the function name of the last call. Similar to callName, strings are interpreted as a regular expression, and string arrays are checked for containment. (alternatives)
                    • (string)
                    • (array) Valid item types:
                    • (string)
                    • ignoreIf [optional] Should we ignore this (source) call? Currently, there is no well working serialization for this. (function)
                    • cascadeIf [optional] Should we continue searching after the link was created? Currently, there is no well working serialization for this. (function)
                    • attachLinkInfo [optional] Additional information to attach to the link. (object)
                  • Allows to link nested calls to their parent calls. This way, you can link an assert_equal call to the parent test_that call etc. (object)
                    • type [required] The type of the linkTo sub-query. (string) Only allows: 'link-to-nested-call'
                    • callName [required] Test regarding the function name of the last call. Similar to callName, strings are interpreted as a regular expression, and string arrays are checked for containment. (alternatives)
                    • (string)
                    • (array) Valid item types:
                    • (string)
                    • ignoreIf [optional] Should we ignore this (source) call? Currently, there is no well working serialization for this. (function)
                    • attachLinkInfo [optional] Additional information to attach to the link. (object)
                • (array) Valid item types:
                  • (alternatives)
                    • Links the current call to the last call of the given kind. This way, you can link a call like points to the latest graphics plot etc. (object)
                    • type [required] The type of the linkTo sub-query. (string) Only allows: 'link-to-last-call'
                    • callName [required] Test regarding the function name of the last call. Similar to callName, strings are interpreted as a regular expression, and string arrays are checked for containment. (alternatives)
                    • (string)
                    • (array) Valid item types:
                    • (string)
                    • ignoreIf [optional] Should we ignore this (source) call? Currently, there is no well working serialization for this. (function)
                    • cascadeIf [optional] Should we continue searching after the link was created? Currently, there is no well working serialization for this. (function)
                    • attachLinkInfo [optional] Additional information to attach to the link. (object)
                    • Allows to link nested calls to their parent calls. This way, you can link an assert_equal call to the parent test_that call etc. (object)
                    • type [required] The type of the linkTo sub-query. (string) Only allows: 'link-to-nested-call'
                    • callName [required] Test regarding the function name of the last call. Similar to callName, strings are interpreted as a regular expression, and string arrays are checked for containment. (alternatives)
                    • (string)
                    • (array) Valid item types:
                    • (string)
                    • ignoreIf [optional] Should we ignore this (source) call? Currently, there is no well working serialization for this. (function)
                    • attachLinkInfo [optional] Additional information to attach to the link. (object)
            • The config query retrieves the current configuration of the flowR instance and optionally also updates it. (object)
              • type [required] The type of the query. (string) Only allows: 'config'
              • update [optional] An optional partial configuration to update the current configuration with before returning it. Only the provided fields will be updated, all other fields will remain unchanged. (object)
            • The control flow query provides the control flow graph of the analysis, optionally simplified. (object)
              • type [required] The type of the query. (string) Only allows: 'control-flow'
              • config [optional] Optional configuration for the control flow query. (object)
                • simplificationPasses The simplification passes to apply to the control flow graph. If unset, the default simplification order will be used. (array) Valid item types:
                  • (string) Only allows: 'unique-cf-sets', 'analyze-dead-code', 'remove-dead-code', 'to-basic-blocks'
            • A query to compute the Call Graph of the analyzed project. (object)
              • type [required] The type of the query. (string) Only allows: 'call-graph'
            • The dataflow query simply returns the dataflow graph, there is no need to pass it multiple times! (object)
              • type [required] The type of the query. (string) Only allows: 'dataflow'
            • Either returns all function definitions alongside whether they are recursive, or just those matching the filters. (object)
              • type [required] The type of the query. (string) Only allows: 'does-call'
              • queryId [optional] An optional unique identifier for this query, to identify it in the output. (string)
              • call The function from which calls are being made. This is a slicing criterion that resolves to a function definition node. (string)
              • calls [required] The constraints on which functions are being called. This can be a combination of name-based or id-based constraints, combined with logical operators (and, or, one-of). (object)
            • The dataflow-lens query returns a simplified view on the dataflow graph (object)
              • type [required] The type of the query. (string) Only allows: 'dataflow-lens'
            • The df-shape query retrieves information on the shape of dataframes (object)
              • type [required] The type of the query. (string) Only allows: 'df-shape'
              • criterion [optional] The slicing criterion of the node to get the dataframe shape for. (string)
            • The file query finds files in the project based on their roles and path patterns. (object)
              • type [required] The type of the query. (string) Only allows: 'files'
              • roles [optional] Optional roles of the files to query. If not provided, all roles are considered. (array) Valid item types:
                • (string) Only allows: 'description', 'namespace', 'news', 'vignette', 'test', 'data', 'license', 'source', 'other'
              • matchesPathRegex [optional] An optional regular expression to match the file paths against. (string)
            • The id map query retrieves the id map from the normalized AST. (object)
              • type [required] The type of the query. (string) Only allows: 'id-map'
            • The normalized AST query simply returns the normalized AST, there is no need to pass it multiple times! (object)
              • type [required] The type of the query. (string) Only allows: 'normalized-ast'
            • The cluster query calculates and returns all clusters in the dataflow graph. (object)
              • type [required] The type of the query. (string) Only allows: 'dataflow-cluster'
            • Slice query used to slice the dataflow graph (object)
              • type [required] The type of the query. (string) Only allows: 'static-slice'
              • criteria [required] The slicing criteria to use. (array) Valid item types:
                • (string)
              • noReconstruction [optional] Do not reconstruct the slice into readable code. (boolean)
              • noMagicComments [optional] Should the magic comments (force-including lines within the slice) be ignored? (boolean)
              • direction [optional] The direction to slice in. Defaults to backward slicing if unset. (string) Only allows: 'backward', 'forward'
            • The dependencies query retrieves and returns the set of all dependencies in the dataflow graph, which includes libraries, sourced files, read data, and written data. (object)
              • type [required] The type of the query. (string) Only allows: 'dependencies'
              • ignoreDefaultFunctions [optional] Should the set of functions that are detected by default be ignored/skipped? Defaults to false. (boolean)
              • libraryFunctions [optional] The set of library functions to search for. (array) Valid item types:
                • (object)
                  • name [required] The name of the library function. (string)
                  • package [optional] The package name of the library function (string)
                  • argIdx [optional] The index of the argument that contains the library name. (number)
                  • argName [optional] The name of the argument that contains the library name. (string)
              • sourceFunctions [optional] The set of source functions to search for. (array) Valid item types:
                • (object)
                  • name [required] The name of the library function. (string)
                  • package [optional] The package name of the library function (string)
                  • argIdx [optional] The index of the argument that contains the library name. (number)
                  • argName [optional] The name of the argument that contains the library name. (string)
              • readFunctions [optional] The set of read functions to search for. (array) Valid item types:
                • (object)
                  • name [required] The name of the library function. (string)
                  • package [optional] The package name of the library function (string)
                  • argIdx [optional] The index of the argument that contains the library name. (number)
                  • argName [optional] The name of the argument that contains the library name. (string)
              • writeFunctions [optional] The set of write functions to search for. (array) Valid item types:
                • (object)
                  • name [required] The name of the library function. (string)
                  • package [optional] The package name of the library function (string)
                  • argIdx [optional] The index of the argument that contains the library name. (number)
                  • argName [optional] The name of the argument that contains the library name. (string)
              • visualizeFunctions [optional] The set of visualize functions to search for. (array) Valid item types:
                • (object)
                  • name [required] The name of the library function. (string)
                  • package [optional] The package name of the library function (string)
                  • argIdx [optional] The index of the argument that contains the library name. (number)
                  • argName [optional] The name of the argument that contains the library name. (string)
              • testFunctions [optional] The set of test functions to search for. (array) Valid item types:
                • (object)
                  • name [required] The name of the library function. (string)
                  • package [optional] The package name of the library function (string)
                  • argIdx [optional] The index of the argument that contains the library name. (number)
                  • argName [optional] The name of the argument that contains the library name. (string)
              • enabledCategories [optional] A set of flags that determines what types of dependencies are searched for. If unset, all dependency types are searched for. (array) Valid item types:
                • (string)
              • additionalCategories [optional] A set of additional, user-supplied dependency categories, whose results will be included in the query return value. (object) Only allows: '[object Object]'
            • The location map query retrieves the location of every id in the ast. (object)
              • type [required] The type of the query. (string) Only allows: 'location-map'
              • ids [optional] Optional list of ids to filter the results by. (array) Valid item types:
                • (string)
            • The search query searches the normalized AST and dataflow graph for nodes that match the given search query. (object)
              • type [required] The type of the query. (string) Only allows: 'search'
              • search [required] The search query to execute. (object)
            • Happens-Before tracks whether a always happens before b. (object)
              • type [required] The type of the query. (string) Only allows: 'happens-before'
              • a [required] The first slicing criterion. (string)
              • b [required] The second slicing criterion. (string)
            • Query to inspect which functions throw exceptions. (object)
              • type [required] The type of the query. (string) Only allows: 'inspect-exception'
              • filter [optional] If given, only function definitions that match one of the given slicing criteria are considered. Each criterion can be either line:column, line@variable-name, or $id, where the latter directly specifies the node id of the function definition to be considered. (array) Valid item types:
                • [required] (string)
            • Either returns all function definitions alongside whether they are higher-order functions, or just those matching the filters. (object)
              • type [required] The type of the query. (string) Only allows: 'inspect-higher-order'
              • filter [optional] If given, only function definitions that match one of the given slicing criteria are considered. Each criterion can be either line:column, line@variable-name, or $id, where the latter directly specifies the node id of the function definition to be considered. (array) Valid item types:
                • [required] (string)
            • Either returns all function definitions alongside whether they are recursive, or just those matching the filters. (object)
              • type [required] The type of the query. (string) Only allows: 'inspect-recursion'
              • filter [optional] If given, only function definitions that match one of the given slicing criteria are considered. Each criterion can be either line:column, line@variable-name, or $id, where the latter directly specifies the node id of the function definition to be considered. (array) Valid item types:
                • [required] (string)
            • The resolve value query used to get definitions of an identifier (object)
              • type [required] The type of the query. (string) Only allows: 'resolve-value'
              • criteria [required] The slicing criteria to use. (array) Valid item types:
                • (string)
            • The project query provides information on the analyzed project. (object)
              • type [required] The type of the query. (string) Only allows: 'project'
              • withDf [optional] Whether to include Dataflow information in the result. (boolean)
            • The resolve value query used to get definitions of an identifier (object)
              • type [required] The type of the query. (string) Only allows: 'origin'
              • criterion [required] The slicing criteria to use (string)
            • The linter query lints for the given set of rules and returns the result. (object)
              • type [required] The type of the query. (string) Only allows: 'linter'
              • rules The rules to lint for. If unset, all rules will be included. (array) Valid item types:
                • (string) Only allows: 'deprecated-functions', 'file-path-validity', 'seeded-randomness', 'absolute-file-paths', 'unused-definitions', 'naming-convention', 'network-functions', 'dataframe-access-validation', 'dead-code', 'useless-loop'
                • (object)
                  • name [required] (string) Only allows: 'deprecated-functions', 'file-path-validity', 'seeded-randomness', 'absolute-file-paths', 'unused-definitions', 'naming-convention', 'network-functions', 'dataframe-access-validation', 'dead-code', 'useless-loop'
                  • config (object)
          • Virtual queries (used for structure) (alternatives)
            • Compound query used to combine queries of the same type (object)
              • type [required] The type of the query. (string) Only allows: 'compound'
              • query [required] The query to run on the file analysis information. (string)
              • commonArguments [required] Common arguments for all queries. (object)
              • arguments [required] Arguments for each query. (array) Valid item types:
                • (object)
    Message schema (response-query)

    For the definition of the hello message, please see it's implementation at ./src/cli/repl/server/messages/message-query.ts.

    • The response to a query request. (object)
      • type [required] (string) Only allows: 'response-query'
      • id [optional] The id of the message, will be the same for the request. (string)
      • results [required] The results of the query. (object)

📡 Ways of Connecting

If you are interested in clients that communicate with flowR, please check out the R adapter as well as the Visual Studio Code extension.

  1. Using Netcat
    Without Websocket

    Suppose, you want to launch the server using a docker container. Then, start the server by (forwarding the internal default port):

    docker run -p1042:1042 -it --rm eagleoutice/flowr --server

    Now, using a tool like netcat to connect:

    nc 127.0.0.1 1042

    Within the started session, type the following message (as a single line) and press enter to see the response:

    {"type":"request-file-analysis","content":"x <- 1","id":"1"}
  2. Using Python
    Without Websocket

    In Python, a similar process would look like this. After starting the server as with using netcat, you can use the following script to connect:

    import socket
    
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
        s.connect(('127.0.0.1', 1042))
        print(s.recv(4096))  # for the hello message
    
        s.send(b'{"type":"request-file-analysis","content":"x <- 1","id":"1"}\n')
    
        print(s.recv(65536))  # for the response (please use a more sophisticated mechanism)

Clone this wiki locally