diff --git a/.gitignore b/.gitignore
index 6dd29b7f8d0522b9938dbcdf54dbfaea43ffc2f1..50b56319a5d3428e2d67caf5bc5543bb195d11ad 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,2 @@
-bin/
\ No newline at end of file
+bin/
+node_modules/
diff --git a/Makefile b/Makefile
index 4b98c5c745f010e864e56940eb1e773659e918df..3a62bb42b3b6b5165114500594d2617f3867cb1b 100644
--- a/Makefile
+++ b/Makefile
@@ -11,7 +11,7 @@ OUT		= bin
 # $^ := dependencie list
 # $< := first item in dependencies list
 
-all: $(OUT) $(BINS:%=$(OUT)/%)
+all: $(OUT) $(BINS:%=$(OUT)/%) Zettel.html
 
 $(OUT):
 	mkdir -p $(OUT)
@@ -23,6 +23,9 @@ $(OUT)/%: %.c
 $(OUT)/%.o: %.c
 	$(CC) -c -o $@ $< $(CFLAGS)
 
+Zettel.html: Zettel.md
+	./make-Zettel.js -m Readme.md -o $@ $<
+
 
 $(OUT)/threadpool: threadpool.c $(OUT)/jbuffer.o $(OUT)/sem.o
 	$(CC) -pthread -o $@ $^ $(CFLAGS)
@@ -33,6 +36,6 @@ $(OUT)/sem.o: sem.h
 
 
 clean:
-	rm -rf $(OUT)
+	rm -rf $(OUT) Zettel.html Readme.md
 
 .PHONY: all clean
diff --git a/Readme.md b/Readme.md
new file mode 100644
index 0000000000000000000000000000000000000000..dac0c428b61f6893681ca5a2bb6bbf1bb8102565
--- /dev/null
+++ b/Readme.md
@@ -0,0 +1,139 @@
+# Code
+
+## reading / handling strings
+printf formats
+
+fgets -> sscanf
+
+strncmp
+
+## parallel processing
+fork exec
+
+### pthread
+
+
+## networking
+### client
+getaddrinfo
+connect
+
+### server
+listen
+accept
+
+<!-- include (accept.c lang=c) -->
+```c
+# include "die.h"
+# include <netdb.h>
+# include <sys/socket.h>
+# include <unistd.h>
+# include <signal.h>
+# include <stdio.h>
+# include <stdlib.h>
+
+static void handleConnection(int clientSock, int listenSock);
+static void handleRequest(FILE *rx, FILE *tx);
+
+// Initialisiert den Server und nimmt Anfragen an
+static void initServer(short unsigned int port) {
+    //ignore SIGPIPE
+    struct sigaction sa;
+    sa.sa_handler = SIG_IGN;
+    sigemptyset(&sa.sa_mask);
+    sa.sa_flags = SA_RESTART;
+
+    if( sigaction(SIGPIPE, &sa, NULL) != 0 ) die("Could not set sigaction");
+
+    //init accept
+    int listenSock = socket(AF_INET6, SOCK_STREAM, 0);
+    if ( listenSock == -1 ) die("Fehler beim Aufbau des Servers");
+    struct sockaddr_in6 addr = {
+        .sin6_family = AF_INET6,
+        .sin6_port   = htons(port),
+        .sin6_addr   = in6addr_any,
+    };
+    if ( bind(listenSock, (struct sockaddr *) &addr, sizeof(addr)) != 0 ) die("Fehler beim Aufbau des Servers");
+    if ( listen(listenSock, SOMAXCONN) != 0 ) die("Fehler beim Aufbau des Servers");
+
+    while ( 1 ) {
+        int clientSock = accept(listenSock, NULL, NULL);
+        if ( clientSock == -1 ) { perror("Warnung: Client konnte nicht akzeptiert werden."); continue; }
+        handleConnection(clientSock, listenSock);
+    }
+}
+
+
+
+static void handleConnection(int clientSock, int listenSock) {
+    //if pthread just bbput
+
+    //fork()
+    pid_t pid;
+    if( (pid = fork()) == -1 ) die("fork");
+    if(pid != 0) {//parent process
+        close(clientSock);//only in parent process
+        return;
+    }
+    if( close(listenSock) ) perror("close listenSock");
+
+    //open file streams
+    FILE *rx, *tx;
+    int clientSock_Copy = dup(clientSock);
+    if(clientSock_Copy < 0) die("dup");
+
+    if( (rx = fdopen(clientSock, "r")) == NULL) die("fdopen");
+    if( (tx = fdopen(clientSock_Copy, "w")) == NULL) die("fdopen");
+
+    //handleRequest()
+    handleRequest(rx, tx);
+
+    //close connection
+    if( fclose(rx) ) die("fclose rx");
+    if( fclose(tx) ) die("fclose tx");
+    
+    //exit
+    exit(EXIT_SUCCESS);//child exits
+}
+
+static void handleRequest(FILE *rx, FILE *tx) {
+    rx = (FILE *) rx;
+    fprintf(tx, "hi\n");
+}
+
+int main() {
+    initServer(2020);
+}
+```
+<!-- /include -->
+
+## open File
+
+<!-- include (fopen.c lang=c) -->
+```c
+# include "die.h"
+# include <stdio.h>
+
+int main() {
+    FILE* file = fopen("../fopen.c", "w");
+    if ( file == NULL ) die("Fehler bei der Anpassung der Standardeingabe");
+
+    //do stuff
+
+    if (fclose(file)) perror("failed to save file");//errorhandling optional
+}
+```
+<!-- /include -->
+
+
+# RAID
+* RAID 0 : Daten werden ¨uber mehrere Platten gespeichert
+  keinerlei Datensicherung: Ausfall einer Platte l¨asst Gesamtsystem ausfallen
+* RAID 1 : Daten werden auf zwei Platten gleichzeitig gespeichert
+  eine Platte kann ausfallen, aber doppelter Speicherbedarf
+* RAID 4 : Daten werden ¨uber mehrere Platten gespeichert, eine enthält Parität
+  Paritätsblock aus byteweisen XOR-Verknüpfungen,
+  eine Platte kann ausfallen, prinzipiell beliebige Plattenanzahl (ab 3)
+  Nachteil: Paritätsplatte hoch belastet
+* RAID 5 : Paritätsblock wird über alle Platten verstreut
+* RAID 6 : doppelte Paritätsblöcke
diff --git a/Zettel.html b/Zettel.html
new file mode 100644
index 0000000000000000000000000000000000000000..c564ffdd547e1aeb03d1ff6503b416780d1d943f
--- /dev/null
+++ b/Zettel.html
@@ -0,0 +1,126 @@
+<link rel="stylesheet" href="node_modules/highlight.js/styles/default.css"><h1>Code</h1>
+<h2>reading / handling strings</h2>
+<p>printf formats</p>
+<p>fgets -&gt; sscanf</p>
+<p>strncmp</p>
+<h2>parallel processing</h2>
+<p>fork exec</p>
+<h3>pthread</h3>
+<h2>networking</h2>
+<h3>client</h3>
+<p>getaddrinfo
+connect</p>
+<h3>server</h3>
+<p>listen
+accept</p>
+<p>&lt;!-- include (accept.c lang=c) --&gt;</p>
+<pre><code class="hljs language-c"><span class="hljs-meta"># <span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">"die.h"</span></span>
+<span class="hljs-meta"># <span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;netdb.h&gt;</span></span>
+<span class="hljs-meta"># <span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;sys/socket.h&gt;</span></span>
+<span class="hljs-meta"># <span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;unistd.h&gt;</span></span>
+<span class="hljs-meta"># <span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;signal.h&gt;</span></span>
+<span class="hljs-meta"># <span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;stdio.h&gt;</span></span>
+<span class="hljs-meta"># <span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;stdlib.h&gt;</span></span>
+
+<span class="hljs-function"><span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">handleConnection</span><span class="hljs-params">(<span class="hljs-keyword">int</span> clientSock, <span class="hljs-keyword">int</span> listenSock)</span></span>;
+<span class="hljs-function"><span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">handleRequest</span><span class="hljs-params">(FILE *rx, FILE *tx)</span></span>;
+
+<span class="hljs-comment">// Initialisiert den Server und nimmt Anfragen an</span>
+<span class="hljs-function"><span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">initServer</span><span class="hljs-params">(short <span class="hljs-keyword">unsigned</span> <span class="hljs-keyword">int</span> port)</span> </span>{
+    <span class="hljs-comment">//ignore SIGPIPE</span>
+    <span class="hljs-class"><span class="hljs-keyword">struct</span> <span class="hljs-title">sigaction</span> <span class="hljs-title">sa</span>;</span>
+    sa.sa_handler = SIG_IGN;
+    sigemptyset(&amp;sa.sa_mask);
+    sa.sa_flags = SA_RESTART;
+
+    <span class="hljs-keyword">if</span>( sigaction(SIGPIPE, &amp;sa, <span class="hljs-literal">NULL</span>) != <span class="hljs-number">0</span> ) die(<span class="hljs-string">"Could not set sigaction"</span>);
+
+    <span class="hljs-comment">//init accept</span>
+    <span class="hljs-keyword">int</span> listenSock = socket(AF_INET6, SOCK_STREAM, <span class="hljs-number">0</span>);
+    <span class="hljs-keyword">if</span> ( listenSock == <span class="hljs-number">-1</span> ) die(<span class="hljs-string">"Fehler beim Aufbau des Servers"</span>);
+    <span class="hljs-class"><span class="hljs-keyword">struct</span> <span class="hljs-title">sockaddr_in6</span> <span class="hljs-title">addr</span> = {</span>
+        .sin6_family = AF_INET6,
+        .sin6_port   = htons(port),
+        .sin6_addr   = in6addr_any,
+    };
+    <span class="hljs-keyword">if</span> ( bind(listenSock, (struct sockaddr *) &amp;addr, <span class="hljs-keyword">sizeof</span>(addr)) != <span class="hljs-number">0</span> ) die(<span class="hljs-string">"Fehler beim Aufbau des Servers"</span>);
+    <span class="hljs-keyword">if</span> ( <span class="hljs-built_in">listen</span>(listenSock, SOMAXCONN) != <span class="hljs-number">0</span> ) die(<span class="hljs-string">"Fehler beim Aufbau des Servers"</span>);
+
+    <span class="hljs-keyword">while</span> ( <span class="hljs-number">1</span> ) {
+        <span class="hljs-keyword">int</span> clientSock = accept(listenSock, <span class="hljs-literal">NULL</span>, <span class="hljs-literal">NULL</span>);
+        <span class="hljs-keyword">if</span> ( clientSock == <span class="hljs-number">-1</span> ) { perror(<span class="hljs-string">"Warnung: Client konnte nicht akzeptiert werden."</span>); <span class="hljs-keyword">continue</span>; }
+        handleConnection(clientSock, listenSock);
+    }
+}
+
+
+
+<span class="hljs-function"><span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">handleConnection</span><span class="hljs-params">(<span class="hljs-keyword">int</span> clientSock, <span class="hljs-keyword">int</span> listenSock)</span> </span>{
+    <span class="hljs-comment">//if pthread just bbput</span>
+
+    <span class="hljs-comment">//fork()</span>
+    <span class="hljs-keyword">pid_t</span> pid;
+    <span class="hljs-keyword">if</span>( (pid = fork()) == <span class="hljs-number">-1</span> ) die(<span class="hljs-string">"fork"</span>);
+    <span class="hljs-keyword">if</span>(pid != <span class="hljs-number">0</span>) {<span class="hljs-comment">//parent process</span>
+        <span class="hljs-built_in">close</span>(clientSock);<span class="hljs-comment">//only in parent process</span>
+        <span class="hljs-keyword">return</span>;
+    }
+    <span class="hljs-keyword">if</span>( <span class="hljs-built_in">close</span>(listenSock) ) perror(<span class="hljs-string">"close listenSock"</span>);
+
+    <span class="hljs-comment">//open file streams</span>
+    FILE *rx, *tx;
+    <span class="hljs-keyword">int</span> clientSock_Copy = dup(clientSock);
+    <span class="hljs-keyword">if</span>(clientSock_Copy &lt; <span class="hljs-number">0</span>) die(<span class="hljs-string">"dup"</span>);
+
+    <span class="hljs-keyword">if</span>( (rx = fdopen(clientSock, <span class="hljs-string">"r"</span>)) == <span class="hljs-literal">NULL</span>) die(<span class="hljs-string">"fdopen"</span>);
+    <span class="hljs-keyword">if</span>( (tx = fdopen(clientSock_Copy, <span class="hljs-string">"w"</span>)) == <span class="hljs-literal">NULL</span>) die(<span class="hljs-string">"fdopen"</span>);
+
+    <span class="hljs-comment">//handleRequest()</span>
+    handleRequest(rx, tx);
+
+    <span class="hljs-comment">//close connection</span>
+    <span class="hljs-keyword">if</span>( fclose(rx) ) die(<span class="hljs-string">"fclose rx"</span>);
+    <span class="hljs-keyword">if</span>( fclose(tx) ) die(<span class="hljs-string">"fclose tx"</span>);
+    
+    <span class="hljs-comment">//exit</span>
+    <span class="hljs-built_in">exit</span>(EXIT_SUCCESS);<span class="hljs-comment">//child exits</span>
+}
+
+<span class="hljs-function"><span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">handleRequest</span><span class="hljs-params">(FILE *rx, FILE *tx)</span> </span>{
+    rx = (FILE *) rx;
+    <span class="hljs-built_in">fprintf</span>(tx, <span class="hljs-string">"hi\n"</span>);
+}
+
+<span class="hljs-function"><span class="hljs-keyword">int</span> <span class="hljs-title">main</span><span class="hljs-params">()</span> </span>{
+    initServer(<span class="hljs-number">2020</span>);
+}
+</code></pre>
+<p>&lt;!-- /include --&gt;</p>
+<h2>open File</h2>
+<p>&lt;!-- include (fopen.c lang=c) --&gt;</p>
+<pre><code class="hljs language-c"><span class="hljs-meta"># <span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">"die.h"</span></span>
+<span class="hljs-meta"># <span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;stdio.h&gt;</span></span>
+
+<span class="hljs-function"><span class="hljs-keyword">int</span> <span class="hljs-title">main</span><span class="hljs-params">()</span> </span>{
+    FILE* file = fopen(<span class="hljs-string">"../fopen.c"</span>, <span class="hljs-string">"w"</span>);
+    <span class="hljs-keyword">if</span> ( file == <span class="hljs-literal">NULL</span> ) die(<span class="hljs-string">"Fehler bei der Anpassung der Standardeingabe"</span>);
+
+    <span class="hljs-comment">//do stuff</span>
+
+    <span class="hljs-keyword">if</span> (fclose(file)) perror(<span class="hljs-string">"failed to save file"</span>);<span class="hljs-comment">//errorhandling optional</span>
+}
+</code></pre>
+<p>&lt;!-- /include --&gt;</p>
+<h1>RAID</h1>
+<ul>
+<li>RAID 0 : Daten werden ¨uber mehrere Platten gespeichert
+keinerlei Datensicherung: Ausfall einer Platte l¨asst Gesamtsystem ausfallen</li>
+<li>RAID 1 : Daten werden auf zwei Platten gleichzeitig gespeichert
+eine Platte kann ausfallen, aber doppelter Speicherbedarf</li>
+<li>RAID 4 : Daten werden ¨uber mehrere Platten gespeichert, eine enthält Parität
+Paritätsblock aus byteweisen XOR-Verknüpfungen,
+eine Platte kann ausfallen, prinzipiell beliebige Plattenanzahl (ab 3)
+Nachteil: Paritätsplatte hoch belastet</li>
+<li>RAID 5 : Paritätsblock wird über alle Platten verstreut</li>
+<li>RAID 6 : doppelte Paritätsblöcke</li>
+</ul>
diff --git a/Zettel.md b/Zettel.md
index dee42f8dbfe5cd09ceae8c76a2610b54ee0c5690..02f82921a1bd7c0d32b8b071e4feb4604589bbf2 100644
--- a/Zettel.md
+++ b/Zettel.md
@@ -14,14 +14,20 @@ fork exec
 
 
 ## networking
+### client
 getaddrinfo
 connect
 
+### server
 listen
 accept
 
+!include(accept.c lang=c)
+
 ## open File
 
+!include(fopen.c lang=c)
+
 
 # RAID
 * RAID 0 : Daten werden ¨uber mehrere Platten gespeichert
diff --git a/accept.c b/accept.c
index 2cf9fb439ead0f027de7d3c16e31143515e538fb..117013df4bc25b99b9ba9962eb24b9d4a4197d6b 100644
--- a/accept.c
+++ b/accept.c
@@ -77,4 +77,4 @@ static void handleRequest(FILE *rx, FILE *tx) {
 
 int main() {
     initServer(2020);
-}
\ No newline at end of file
+}
diff --git a/fopen.c b/fopen.c
new file mode 100644
index 0000000000000000000000000000000000000000..374da72be67056f45f87ac9280c4d834e44593db
--- /dev/null
+++ b/fopen.c
@@ -0,0 +1,11 @@
+#include "die.h"
+#include <stdio.h>
+
+int main() {
+    FILE* file = fopen("../fopen.c", "w");
+    if ( file == NULL ) die("Fehler bei der Anpassung der Standardeingabe");
+
+    //do stuff
+
+    if (fclose(file)) perror("failed to save file");//errorhandling optional
+}
diff --git a/make-Zettel.js b/make-Zettel.js
new file mode 100644
index 0000000000000000000000000000000000000000..5ee78ca9daf1c1b3c5b60f163cea9f1f003408f4
--- /dev/null
+++ b/make-Zettel.js
@@ -0,0 +1,77 @@
+#!/usr/bin/env node
+const fs = require('fs');
+const markedpp = require('markedpp');
+const markdownit = require('markdown-it')();
+
+markdownit.use(require('markdown-it-highlightjs'));
+
+let name = process.argv[1];
+let outfile;
+let infile;
+let preprocessorOutfile;
+
+//parse params
+for(let i=2; i < process.argv.length; i++) {
+    switch (process.argv[i]) {
+        case '-o':
+            i++
+            if(i >= process.argv.length) {
+                console.error("-o expected out file");
+                return -1;
+            }
+            outfile = process.argv[i];
+            break;
+        
+        case '-m':
+            i++
+            if(i >= process.argv.length) {
+                console.error("-m expected preprocessed md out file");
+                return -1;
+            }
+            preprocessorOutfile = process.argv[i];
+            break;
+
+        case '-h':
+            console.log("usage: " + name + " -o <outfile> [-m <preprocessor outfile>] <infile>");
+            break;
+    
+        default:
+            if(i == process.argv.length - 1) {
+                infile = process.argv[i];
+            } else {
+                console.error("unknown argument: " + process.argv[i]);
+            }
+            break;
+    }
+}
+
+//check required params
+if(!outfile) {
+    console.error("missing param outfile")
+    return -1;
+}
+if(!infile) {
+    console.error("missing param infile")
+    return -1;
+}
+
+
+fs.readFile(infile, {encoding: 'utf-8'}, (err, data) => {
+    //markdown preprocessor
+    markedpp(data, (err, result) => {
+        if(err) {
+            console.log(err);
+        } else {
+            if(preprocessorOutfile) {
+                fs.writeFileSync(preprocessorOutfile, result);
+            }
+            //markdown-it
+            let html = '<link rel="stylesheet" href="node_modules/highlight.js/styles/default.css">';
+            html += markdownit.render(result);
+
+            fs.writeFileSync(outfile, html);
+        }
+    });
+});
+
+
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 0000000000000000000000000000000000000000..d8b1b90bc1c826d76973231ab65c743c8989ab07
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,98 @@
+{
+  "requires": true,
+  "lockfileVersion": 1,
+  "dependencies": {
+    "argparse": {
+      "version": "1.0.10",
+      "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+      "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+      "requires": {
+        "sprintf-js": "~1.0.2"
+      }
+    },
+    "asyncc": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/asyncc/-/asyncc-2.0.4.tgz",
+      "integrity": "sha512-5ohHLrRC6ZJ7ypVlJh3XJlINBdErz7VeQnNNLXq2T9hVsph58x49oykgg+KNbpnOiMF0X2vDmR2i2LVtWBL7Mw=="
+    },
+    "emoji-regex": {
+      "version": "8.0.0",
+      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
+    },
+    "entities": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.0.tgz",
+      "integrity": "sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw=="
+    },
+    "highlight.js": {
+      "version": "9.18.1",
+      "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.18.1.tgz",
+      "integrity": "sha512-OrVKYz70LHsnCgmbXctv/bfuvntIKDz177h0Co37DQ5jamGZLVmoCVMtjMtNZY3X9DrCcKfklHPNeA0uPZhSJg=="
+    },
+    "html-entities": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.2.1.tgz",
+      "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8="
+    },
+    "linkify-it": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.2.0.tgz",
+      "integrity": "sha512-GnAl/knGn+i1U/wjBz3akz2stz+HrHLsxMwHQGofCDfPvlf+gDKN58UtfmUquTY4/MXeE2x7k19KQmeoZi94Iw==",
+      "requires": {
+        "uc.micro": "^1.0.1"
+      }
+    },
+    "lodash.flow": {
+      "version": "3.5.0",
+      "resolved": "https://registry.npmjs.org/lodash.flow/-/lodash.flow-3.5.0.tgz",
+      "integrity": "sha1-h79AKSuM+D5OjOGjrkIJ4gBxZ1o="
+    },
+    "markdown-it": {
+      "version": "10.0.0",
+      "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-10.0.0.tgz",
+      "integrity": "sha512-YWOP1j7UbDNz+TumYP1kpwnP0aEa711cJjrAQrzd0UXlbJfc5aAq0F/PZHjiioqDC1NKgvIMX+o+9Bk7yuM2dg==",
+      "requires": {
+        "argparse": "^1.0.7",
+        "entities": "~2.0.0",
+        "linkify-it": "^2.0.0",
+        "mdurl": "^1.0.1",
+        "uc.micro": "^1.0.5"
+      }
+    },
+    "markdown-it-highlightjs": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/markdown-it-highlightjs/-/markdown-it-highlightjs-3.0.0.tgz",
+      "integrity": "sha1-7T3WGcormOa/IRLRY79EQEM0AhA=",
+      "requires": {
+        "highlight.js": "^9.9.0",
+        "lodash.flow": "^3.1.0"
+      }
+    },
+    "markedpp": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/markedpp/-/markedpp-1.0.1.tgz",
+      "integrity": "sha512-nOebIjpw0YYIy+KE+vUOoW3gBVspiRjBPvHv+vqkCZAyURkVaI3aR3cVvZRZxAlZI8SrhsyFG5gBvVOCirRz9A==",
+      "requires": {
+        "asyncc": "^2.0.3",
+        "emoji-regex": "^8.0.0",
+        "html-entities": "^1.2.1"
+      }
+    },
+    "mdurl": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz",
+      "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4="
+    },
+    "sprintf-js": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+      "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw="
+    },
+    "uc.micro": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz",
+      "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA=="
+    }
+  }
+}