summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDirk Engling <erdgeist@erdgeist.org>2020-05-27 01:14:11 +0200
committerDirk Engling <erdgeist@erdgeist.org>2020-05-27 01:14:11 +0200
commit959576ad96a5a7a53cb9b9f6c5e5fbb6ecff1bda (patch)
treed3feefda46d2f3a61a0b3eefd194e2cea72ab5bd
parentdaf20dd652f9294273c1110f60ff4da6d99f67c5 (diff)
Remove circular dependency on makefile
-rw-r--r--Makefile6
-rw-r--r--bin/Makefile18
-rwxr-xr-xbin/cleaner.py62
-rwxr-xr-xbin/export.py158
-rw-r--r--doc/TODO.txt31
-rw-r--r--doc/redirects.json1
-rw-r--r--redirects.json1
7 files changed, 275 insertions, 2 deletions
diff --git a/Makefile b/Makefile
index dc8268d8..be32edaa 100644
--- a/Makefile
+++ b/Makefile
@@ -1,11 +1,13 @@
1all: install build serve 1all: install build serve
2 2
3install: venv 3install: venv
4 python3 -m venv ./venv
5 ./venv/bin/pip install -U "Nikola[extras]" 4 ./venv/bin/pip install -U "Nikola[extras]"
6 5
6venv:
7 python3 -m venv ./venv
8
7build: 9build:
8 ./venv/bin/nikola build --backend=sqlite3 10 ./venv/bin/nikola build --backend=sqlite3
9 11
10serve: 12serve:
11 ./venv/bin/nikola auto --backend=sqlite3 13 ./venv/bin/nikola serve
diff --git a/bin/Makefile b/bin/Makefile
new file mode 100644
index 00000000..10ac0d1e
--- /dev/null
+++ b/bin/Makefile
@@ -0,0 +1,18 @@
1all: rebuild nikola build
2
3rebuild:
4 rm -rf git dump
5 ./export.py
6 rm git/pages/updates.md
7
8nikola:
9 venv/bin/nikola init -q git
10 cp site/conf.py git
11 cd git; nikola plugin -i localsearch
12 cd git; nikola theme -n ccc --parent=bootstrap4
13 cp -r site/themes/ccc git/themes/
14 cp -r site/data site/shortcodes git/
15 cp -r site/index.rst site/index.en.rst site/search.html site/cpu site/themen git/pages/
16
17build:
18 cd git; nikola build --backend=sqlite3
diff --git a/bin/cleaner.py b/bin/cleaner.py
new file mode 100755
index 00000000..d8c999da
--- /dev/null
+++ b/bin/cleaner.py
@@ -0,0 +1,62 @@
1#! venv/bin/python
2import psycopg2
3import psycopg2.extras
4import pathlib
5import os.path
6import datetime
7import pypandoc
8from bs4 import BeautifulSoup
9from datetime import timedelta, datetime, tzinfo
10#from langdetect import detect
11import sys
12import re
13
14conn = psycopg2.connect(database="cccms_dev", user="postgres", password="", host="127.0.0.1")
15cursor = conn.cursor(cursor_factory=psycopg2.extras.DictCursor)
16
17cursor.execute("select * from page_translations")
18page_translations = cursor.fetchall()
19
20fo = open("orig.txt", "w")
21fm = open("modi.txt", "w")
22
23for translation in page_translations:
24 body = translation.get('body')
25 cursor.execute("select * from pages where id = %s", [translation['page_id']])
26 page = cursor.fetchone()
27
28 if not body:
29 continue
30
31 if not '<p id=' in body:
32 continue
33
34 fo.write(body)
35
36 print( 'Needing fixup: {}'.format(page['id']))
37 soup = BeautifulSoup(body, 'html5lib')
38
39 # https://stackoverflow.com/questions/10555932/how-do-i-use-beautifulsoup-to-replace-a-tag-with-its-contents
40 # for match in soup.findAll('div'):
41 # match.replaceWithChildren()
42
43 # https://stackoverflow.com/questions/33500888/how-to-remove-tags-that-have-no-content
44 [x.decompose() for x in soup.findAll(lambda tag: (not tag.contents or len(tag.get_text(strip=True)) <= 0) and not tag.name == 'br' )]
45
46 # for elm in soup.find_all('span', style=re.compile(r"text-decoration: underline;")):
47 # elm.name = 'u'
48 # del elm.attrs['style']
49
50 # for elm in soup.find_all('span', style=re.compile(r"font-weight: bold;")):
51 # elm.name = 'b'
52 # del elm.attrs['style']
53
54 # print(soup.prettify())
55
56 for elm in soup.find_all('p', id=re.compile(r"magic")):
57 del elm.attrs
58
59 if soup.body and soup.body.children:
60 fm.write("".join([str(x) for x in soup.body.children]))
61 cursor.execute("update page_translations set body = %s where id = %s", ["".join([str(x) for x in soup.body.children]), translation['id']])
62 conn.commit()
diff --git a/bin/export.py b/bin/export.py
new file mode 100755
index 00000000..26460e8f
--- /dev/null
+++ b/bin/export.py
@@ -0,0 +1,158 @@
1#! venv/bin/python
2import psycopg2
3import psycopg2.extras
4import pathlib
5import os.path
6import datetime
7import pypandoc
8import json
9from datetime import timedelta, datetime, tzinfo
10#from langdetect import detect
11import sys
12
13conn = psycopg2.connect(database="cccms_dev", user="postgres", password="", host="127.0.0.1")
14cursor = conn.cursor(cursor_factory=psycopg2.extras.DictCursor)
15lcursor = conn.cursor()
16cursor.execute("select id, login, email, admin from users", [])
17user = cursor.fetchall()
18
19page_list = []
20redirect_list = {}
21
22pathlib.Path(os.path.dirname('git/')).mkdir(parents=True, exist_ok=True)
23os.system("git -C git/ init")
24pathlib.Path(os.path.dirname('git/images/')).mkdir(parents=True, exist_ok=True)
25pathlib.Path(os.path.dirname('git/files/')).mkdir(parents=True, exist_ok=True)
26pathlib.Path(os.path.dirname('dump/images/')).mkdir(parents=True, exist_ok=True)
27pathlib.Path(os.path.dirname('dump/files/')).mkdir(parents=True, exist_ok=True)
28
29rev = 0
30cursor.execute("select id, name, upload_content_type, upload_file_name, upload_updated_at from assets order by id", [])
31assets = cursor.fetchall()
32for asset in assets:
33 if not asset.get('upload_file_name'):
34 continue
35 source = "/usr/local/www/cccms/public/system/uploads/{}/original/{}".format(asset['id'], asset['upload_file_name'])
36 destdir = 'files/'
37 if asset['upload_content_type'].startswith('image'):
38 destdir = 'images/'
39 page_list.append({ 'date': asset['upload_updated_at'], 'revision': rev, 'comment': "asset {}".format(asset['name']), 'fname': source, 'gname': destdir+asset['upload_file_name'], 'editor': 'admin', 'email': 'admin@cccms.de'})
40 rev = rev + 1
41 redirect_list['/public/system/uploads/{}/original/{}'.format(asset['id'], asset['upload_file_name'])] = destdir+asset['upload_file_name']
42
43with open('redirects.json', 'w') as outfile:
44 json.dump(redirect_list, outfile)
45
46cursor.execute("select id, unique_name, created_at from nodes order by id", [])
47nodes = cursor.fetchall()
48
49for node in nodes:
50 if not 'unique_name' in node:
51 print ("WARNING: NO unique_name in node " + str(node.id))
52 continue
53
54 if node['id'] == 1:
55 continue
56
57 if "/" in str(node['unique_name']):
58 pathlib.Path(os.path.dirname('dump/'+node['unique_name'])).mkdir(parents=True, exist_ok=True)
59 if str(node['unique_name']).startswith('updates/'):
60 pathlib.Path(os.path.dirname('git/'+node['unique_name'])).mkdir(parents=True, exist_ok=True)
61 else:
62 pathlib.Path(os.path.dirname('git/pages/'+node['unique_name'])).mkdir(parents=True, exist_ok=True)
63
64 cursor.execute("select id, revision, created_at, updated_at, published_at, user_id, editor_id from pages where node_id = %s", [node['id']])
65 pages = cursor.fetchall()
66
67 # print ( "WORKING ON NODE: " + str(node['id']))
68
69 for page in pages:
70
71 # ignoring unpublished pages
72 if not page['published_at']:
73 # print("UNPUBLISHED: {}\n".format(node['id']))
74 continue
75
76 cursor.execute("select name from tags where id in (select tag_id from taggings where taggable_id = %s)", [page['id']])
77 tags = cursor.fetchall()
78
79 editor = "admin"
80 if page['editor_id']:
81 cursor.execute("select login from users where id = %s", [page['editor_id']])
82 e = cursor.fetchall()
83 if len(e):
84 editor = e[0].get("login", "NO-LOGIN")
85
86 creator = "admin"
87 if page['user_id']:
88 cursor.execute("select login from users where id = %s", [page['user_id']])
89 c = cursor.fetchall()
90 if len(c):
91 creator = c[0].get("login", "NO-LOGIN")
92
93 previewimage = ''
94 cursor.execute("select upload_file_name from related_assets full join assets on related_assets.asset_id = assets.id where related_assets.page_id = %s and position = 1;", [page['id']])
95 related_asset = cursor.fetchall()
96 if len(related_asset):
97 previewimage = related_asset[0].get('upload_file_name')
98
99 cursor.execute("select locale, title, abstract, body, created_at, updated_at from page_translations where page_id = %s", [page['id']])
100 page_translations = cursor.fetchall()
101 for translation in page_translations:
102 if not translation.get("title"):
103 continue
104
105 if len(tags) and not isinstance(tags[0], str):
106 tags = [y for x in tags for y in x]
107
108 if translation['locale'] == 'en':
109 fname = "dump/" + node['unique_name'] + '.en.md:' + str(page['revision']) + '@' + str(int(page['updated_at'].timestamp()))
110 gitname = node['unique_name'] + '.en.md'
111 else:
112 fname = "dump/" + node['unique_name'] + '.md:' + str(page['revision']) + '@' + str(int(page['updated_at'].timestamp()))
113 gitname = node['unique_name'] + '.md'
114
115 if not gitname.startswith('updates/'):
116 gitname = 'pages/' + gitname
117
118 #lang = detect(translation.get('body'))
119 #print('{}:{} node_id {: 5d} revision {: 3d} with page_id {: 5d}, path {}'.format(lang, translation['locale'], node['id'], page['revision'], page['id'], node['unique_name']))
120
121 # md = pypandoc.convert_text(str(translation.get('body', "")), 'md', format='html', extra_args=['--atx-headers'])
122 # rst = pypandoc.convert_text(str(translation.get('body', "")), 'rst', format='html', extra_args=['--atx-headers'])
123 # with open( "dump/" + node['unique_name'] + '.' + translation['locale'] + '.md.html:' + str(page['revision']) + '@' + str(int(page['updated_at'].timestamp())), "w") as f:
124 # f.write(pypandoc.convert_text( md, 'html', format='md', extra_args=['--atx-headers']))
125 # with open( "dump/" + node['unique_name'] + '.' + translation['locale'] + '.rst.html:' + str(page['revision']) + '@' + str(int(page['updated_at'].timestamp())), "w") as f:
126 # f.write(pypandoc.convert_text( rst, 'html', format='rst', extra_args=['--atx-headers']))
127
128 with open(fname, "w") as f:
129 f.write("title: {}\n".format(' '.join(translation.get("title", "").split())))
130 f.write("date: {}\n".format(page['published_at'].strftime("%Y-%m-%d %H:%M:%S %z")))
131 if page.get('updated_at'):
132 f.write("updated: {}\n".format(page['updated_at'].strftime("%Y-%m-%d %H:%M:%S %z")))
133 f.write("author: {}\n".format(creator))
134 f.write("tags: {}\n".format(', '.join(tags).lower()))
135 if previewimage:
136 f.write("previewimage: /images/{}\n".format(previewimage))
137 f.write("\n")
138
139 # Add abstract, if one is there
140 if translation.get('abstract'):
141 f.write(str(translation.get('abstract', "")))
142 f.write("\n\n")
143 if translation.get('body'):
144 f.write("<!-- TEASER_END -->\n\n")
145
146 f.write(pypandoc.convert_text( str(translation.get('body', "")), 'markdown-smart', format='html-native_divs-native_spans', extra_args=['--atx-headers']))
147 userrec = next(filter(lambda person: person['login'] == editor, user))
148 page_list.append({ 'date': page['updated_at'], 'revision': page['revision'], 'comment': "page revision {}".format(page['revision']), 'fname': fname, 'gname': gitname, 'editor': editor, 'email': userrec['email']})
149
150page_list.sort(key=lambda tup: (tup['date'], tup['revision']))
151for page in page_list:
152 print(page)
153 os.system("cp {} git/{}".format(page['fname'], page['gname']))
154 os.system("git -C git/ add {}".format(page['gname']))
155 os.environ['GIT_COMMITTER_NAME'] = page['editor']
156 os.environ['GIT_COMMITTER_EMAIL'] = page['email']
157 os.system('git -C git/ commit -m "committing {}" --author="{} <{}>" --date="{}"'.format(page['comment'], page['editor'], page['email'], page['date']))
158
diff --git a/doc/TODO.txt b/doc/TODO.txt
new file mode 100644
index 00000000..93ee985f
--- /dev/null
+++ b/doc/TODO.txt
@@ -0,0 +1,31 @@
1* Tweet list
2* skin footer
3* language selector
4* sidebars in posts and pages
5* import images to /image/ dir
6
7https://alexwlchan.net/2019/11/saving-a-copy-of-a-tweet-by-typing-twurl/
8
9page_translations:
10id | page_id | locale | title | abstract | body | created_at | updated_at
11
12pages:
13id | node_id | revision | created_at | updated_at | published_at | user_id | template_name | editor_id
14
15nodes:
16id | slug | unique_name | created_at | updated_at | lft | rgt | parent_id | head_id | draft_id | locking_user_id | staged_slug | staged_parent_id
17
18
19users = select * from users
20
21tags = select * from tags
22taggings = select * from taggings
23
24nodes = select * from nodes
25 for node in nodes:
26 pages = select * from pages where node_id = node.id
27 for page in pages:
28 tag_ids = select tag_id from taggings where taggable_id = page.id
29 tags = select name from tags where id in tag_ids
30 translations = select * from page_translations where page_id = page.id
31
diff --git a/doc/redirects.json b/doc/redirects.json
new file mode 100644
index 00000000..a16d9d55
--- /dev/null
+++ b/doc/redirects.json
@@ -0,0 +1 @@
{"/public/system/uploads/2/original/sigint09.jpg": "images/sigint09.jpg", "/public/system/uploads/3/original/nedapReport54-1.pdf": "files/nedapReport54-1.pdf", "/public/system/uploads/4/original/51D-Ga9q_0L.jpg": "images/51D-Ga9q_0L.jpg", "/public/system/uploads/5/original/office-2009.asc": "files/office-2009.asc", "/public/system/uploads/6/original/wau.jpg": "images/wau.jpg", "/public/system/uploads/7/original/regionaleschaos.png": "images/regionaleschaos.png", "/public/system/uploads/14/original/01.jpg": "images/01.jpg", "/public/system/uploads/15/original/02.jpg": "images/02.jpg", "/public/system/uploads/16/original/03.jpg": "images/03.jpg", "/public/system/uploads/17/original/04.jpg": "images/04.jpg", "/public/system/uploads/18/original/05.jpg": "images/05.jpg", "/public/system/uploads/19/original/06.jpg": "images/06.jpg", "/public/system/uploads/20/original/07.jpg": "images/07.jpg", "/public/system/uploads/21/original/08.jpg": "images/08.jpg", "/public/system/uploads/22/original/09.jpg": "images/09.jpg", "/public/system/uploads/23/original/10.jpg": "images/10.jpg", "/public/system/uploads/24/original/11.jpg": "images/11.jpg", "/public/system/uploads/25/original/12.jpg": "images/12.jpg", "/public/system/uploads/28/original/13.jpg": "images/13.jpg", "/public/system/uploads/29/original/14.jpg": "images/14.jpg", "/public/system/uploads/30/original/15.jpg": "images/15.jpg", "/public/system/uploads/31/original/16.jpg": "images/16.jpg", "/public/system/uploads/32/original/17.jpg": "images/17.jpg", "/public/system/uploads/33/original/18.jpg": "images/18.jpg", "/public/system/uploads/34/original/19.jpg": "images/19.jpg", "/public/system/uploads/35/original/20.jpg": "images/20.jpg", "/public/system/uploads/36/original/21.jpg": "images/21.jpg", "/public/system/uploads/37/original/22.jpg": "images/22.jpg", "/public/system/uploads/38/original/23.jpg": "images/23.jpg", "/public/system/uploads/41/original/PE-Eisenberg-20091028.pdf": "files/PE-Eisenberg-20091028.pdf", "/public/system/uploads/45/original/office-2010.asc": "files/office-2010.asc", "/public/system/uploads/46/original/79823.png": "images/79823.png", "/public/system/uploads/48/original/404.jpeg": "images/404.jpeg", "/public/system/uploads/54/original/snafu.png": "images/snafu.png", "/public/system/uploads/55/original/in-berlin_logo_neu.png": "images/in-berlin_logo_neu.png", "/public/system/uploads/56/original/de-cix.png": "images/de-cix.png", "/public/system/uploads/57/original/ecix.png": "images/ecix.png", "/public/system/uploads/58/original/hosteurope.gif": "images/hosteurope.gif", "/public/system/uploads/59/original/71579.png": "images/71579.png", "/public/system/uploads/60/original/chaosknoten-4.0.jpg": "images/chaosknoten-4.0.jpg", "/public/system/uploads/61/original/pesthoernchen.jpg": "images/pesthoernchen.jpg", "/public/system/uploads/63/original/7ce64723f28574ab72a9c82bb162074f55094698.jpg": "images/7ce64723f28574ab72a9c82bb162074f55094698.jpg", "/public/system/uploads/64/original/CCC-de-mail-2011.pdf": "files/CCC-de-mail-2011.pdf", "/public/system/uploads/65/original/kulturwertmark-neu.pdf": "files/kulturwertmark-neu.pdf", "/public/system/uploads/66/original/office-2011.asc": "files/office-2011.asc", "/public/system/uploads/67/original/Len_Sassaman.jpg": "images/Len_Sassaman.jpg", "/public/system/uploads/68/original/sassaman.jpg": "images/sassaman.jpg", "/public/system/uploads/69/original/camp2011-3.png": "images/camp2011-3.png", "/public/system/uploads/70/original/ccc_banner.jpg": "images/ccc_banner.jpg", "/public/system/uploads/71/original/ip-vds.pdf": "files/ip-vds.pdf", "/public/system/uploads/72/original/vds-keine-chance.jpg": "images/vds-keine-chance.jpg", "/public/system/uploads/73/original/ip-vds.jpg": "images/ip-vds.jpg", "/public/system/uploads/74/original/sparkasse.png": "images/sparkasse.png", "/public/system/uploads/75/original/BTW2005-FahndungseCard.pdf": "files/BTW2005-FahndungseCard.pdf", "/public/system/uploads/76/original/staatstrojaner-report23.pdf": "files/staatstrojaner-report23.pdf", "/public/system/uploads/77/original/0zapftis-release.tgz": "files/0zapftis-release.tgz", "/public/system/uploads/78/original/0zapftis.png": "images/0zapftis.png", "/public/system/uploads/79/original/Chaosknoten.png": "images/Chaosknoten.png", "/public/system/uploads/80/original/Stellungnahme_DigiTask.pdf": "files/Stellungnahme_DigiTask.pdf", "/public/system/uploads/83/original/staatstrojaner-report42.pdf": "files/staatstrojaner-report42.pdf", "/public/system/uploads/84/original/0zapftis-3.6.44-binaries.tbz": "files/0zapftis-3.6.44-binaries.tbz", "/public/system/uploads/85/original/0zapftis-release-2.tbz": "files/0zapftis-release-2.tbz", "/public/system/uploads/86/original/0zapftisdiffed_1.png": "images/0zapftisdiffed_1.png", "/public/system/uploads/87/original/FSA09-Prozessgeschichte-V20120118.pdf": "files/FSA09-Prozessgeschichte-V20120118.pdf", "/public/system/uploads/88/original/FSA09-Beschreibung-Videosequenzen-V20120118.pdf": "files/FSA09-Beschreibung-Videosequenzen-V20120118.pdf", "/public/system/uploads/89/original/FSA09-Einlassung-Angeklagter-A.pdf": "files/FSA09-Einlassung-Angeklagter-A.pdf", "/public/system/uploads/90/original/FSA09-Einlassung-Angeklagter-B.pdf": "files/FSA09-Einlassung-Angeklagter-B.pdf", "/public/system/uploads/91/original/nessuslogo.png": "images/nessuslogo.png", "/public/system/uploads/92/original/CCC-Fahndungsplakat_v0.1-4c-A3.pdf": "files/CCC-Fahndungsplakat_v0.1-4c-A3.pdf", "/public/system/uploads/93/original/0zapftis-hannover.pdf": "files/0zapftis-hannover.pdf", "/public/system/uploads/95/original/ccc-regional.jpg": "images/ccc-regional.jpg", "/public/system/uploads/96/original/sigint-top.png": "images/sigint-top.png", "/public/system/uploads/100/original/sigint-top-small.jpg": "images/sigint-top-small.jpg", "/public/system/uploads/101/original/test.pdf": "files/test.pdf", "/public/system/uploads/102/original/Schaar-Bericht.pdf": "files/Schaar-Bericht.pdf", "/public/system/uploads/103/original/Schaar-Bericht.pdf": "files/Schaar-Bericht.pdf", "/public/system/uploads/104/original/CCC20010327.jpg": "images/CCC20010327.jpg", "/public/system/uploads/105/original/nedapReport54.pdf": "files/nedapReport54.pdf", "/public/system/uploads/106/original/office-2012.asc": "files/office-2012.asc", "/public/system/uploads/107/original/Speedbone.png": "images/Speedbone.png", "/public/system/uploads/108/original/logo_ecix_171x200.png": "images/logo_ecix_171x200.png", "/public/system/uploads/109/original/Supporter-eurotransit.png": "images/Supporter-eurotransit.png", "/public/system/uploads/110/original/Supporter-eurotransit_resize.png": "images/Supporter-eurotransit_resize.png", "/public/system/uploads/111/original/hotshot.jpg": "images/hotshot.jpg", "/public/system/uploads/112/original/admin_mourning.png": "images/admin_mourning.png", "/public/system/uploads/113/original/Stellungnahme_Wahlstift.pdf": "files/Stellungnahme_Wahlstift.pdf", "/public/system/uploads/114/original/neufassung-satzung.pdf": "files/neufassung-satzung.pdf", "/public/system/uploads/115/original/neufassung-satzung.html": "files/neufassung-satzung.html", "/public/system/uploads/116/original/Geschaeftsordnung_Erfa-Beirat.pdf": "files/Geschaeftsordnung_Erfa-Beirat.pdf", "/public/system/uploads/117/original/Geschaeftsordnung_Erfa-Beirat.html": "files/Geschaeftsordnung_Erfa-Beirat.html", "/public/system/uploads/119/original/UA-neueMedien-2strikes.pdf": "files/UA-neueMedien-2strikes.pdf", "/public/system/uploads/120/original/fullcircle.jpeg": "images/fullcircle.jpeg", "/public/system/uploads/121/original/christian-lightwall.jpg": "images/christian-lightwall.jpg", "/public/system/uploads/122/original/Schaar-Staatstrojaner.pdf": "files/Schaar-Staatstrojaner.pdf", "/public/system/uploads/123/original/PE_RAVOrgBueroCCC_wg_DJT_30Sept2012.pdf": "files/PE_RAVOrgBueroCCC_wg_DJT_30Sept2012.pdf", "/public/system/uploads/124/original/antiterrordatei-final.pdf": "files/antiterrordatei-final.pdf", "/public/system/uploads/125/original/Stellenausschreibung_Bundestrojaner.png": "images/Stellenausschreibung_Bundestrojaner.png", "/public/system/uploads/126/original/stellungnahme-demail2013.pdf": "files/stellungnahme-demail2013.pdf", "/public/system/uploads/127/original/office-2013.asc": "files/office-2013.asc", "/public/system/uploads/128/original/demail_april2013.pdf": "files/demail_april2013.pdf", "/public/system/uploads/129/original/logo-sigint.png": "images/logo-sigint.png", "/public/system/uploads/130/original/logo-sigint.jpg": "images/logo-sigint.jpg", "/public/system/uploads/131/original/against_stop.jpg": "images/against_stop.jpg", "/public/system/uploads/132/original/drosselkom.jpg": "images/drosselkom.jpg", "/public/system/uploads/133/original/wortwolke.png": "images/wortwolke.png", "/public/system/uploads/134/original/freebrad_june1.jpg": "images/freebrad_june1.jpg", "/public/system/uploads/135/original/FreeBradleyManning.pdf": "files/FreeBradleyManning.pdf", "/public/system/uploads/136/original/stoererhaftung-JM.pdf": "files/stoererhaftung-JM.pdf", "/public/system/uploads/137/original/ePA-antwort.pdf": "files/ePA-antwort.pdf", "/public/system/uploads/138/original/routerzwang.pdf": "files/routerzwang.pdf", "/public/system/uploads/139/original/routerzwang.pdf": "files/routerzwang.pdf", "/public/system/uploads/140/original/claus.jpg": "images/claus.jpg", "/public/system/uploads/141/original/logo-02.png": "images/logo-02.png", "/public/system/uploads/143/original/BNetzA-Konsultation-ITSicherheit-Stromnetz.pdf": "files/BNetzA-Konsultation-ITSicherheit-Stromnetz.pdf", "/public/system/uploads/145/original/Office-2014.asc": "files/Office-2014.asc", "/public/system/uploads/148/original/stellungnahmeTKTransparenzV.pdf": "files/stellungnahmeTKTransparenzV.pdf", "/public/system/uploads/149/original/StellungnahmeDigitaleAgenda.pdf": "files/StellungnahmeDigitaleAgenda.pdf", "/public/system/uploads/150/original/VDSfinal18.pdf": "files/VDSfinal18.pdf", "/public/system/uploads/151/original/GCHQ_attacking_providers_final_PR.pdf": "files/GCHQ_attacking_providers_final_PR.pdf", "/public/system/uploads/152/original/2014_07_01_Final_grounds.pdf": "files/2014_07_01_Final_grounds.pdf", "/public/system/uploads/153/original/NSA-GBA.pdf": "files/NSA-GBA.pdf", "/public/system/uploads/154/original/NSA-GBA2014.pdf": "files/NSA-GBA2014.pdf", "/public/system/uploads/163/original/logo9.png": "images/logo9.png", "/public/system/uploads/168/original/logo9-spaced.png": "images/logo9-spaced.png", "/public/system/uploads/170/original/handelskammer.pdf": "files/handelskammer.pdf", "/public/system/uploads/173/original/bene.jpg": "images/bene.jpg", "/public/system/uploads/174/original/Privacy_Greennet_Open_Response_6_Feb_2015.pdf": "files/Privacy_Greennet_Open_Response_6_Feb_2015.pdf", "/public/system/uploads/184/original/emerson_tan_fb.png": "images/emerson_tan_fb.png", "/public/system/uploads/186/original/ITSG_Stellungnahme.pdf": "files/ITSG_Stellungnahme.pdf", "/public/system/uploads/187/original/Office-2015.asc": "files/Office-2015.asc", "/public/system/uploads/188/original/05042015_karte.png": "images/05042015_karte.png", "/public/system/uploads/189/original/BKAG_Stellungnahme.pdf": "files/BKAG_Stellungnahme.pdf", "/public/system/uploads/190/original/GBA-redacted.pdf": "files/GBA-redacted.pdf", "/public/system/uploads/191/original/landesverrat.png": "images/landesverrat.png", "/public/system/uploads/192/original/CCC-presse-pgp.asc": "files/CCC-presse-pgp.asc", "/public/system/uploads/193/original/fatuma.png": "images/fatuma.png", "/public/system/uploads/194/original/FatumaAfrah.png": "images/FatumaAfrah.png", "/public/system/uploads/195/original/fatuma9.png": "images/fatuma9.png", "/public/system/uploads/196/original/10012016_karte.png": "images/10012016_karte.png", "/public/system/uploads/201/original/Office-2016.asc": "files/Office-2016.asc", "/public/system/uploads/202/original/2016-03-26_karte.png": "images/2016-03-26_karte.png", "/public/system/uploads/203/original/media.png": "images/media.png", "/public/system/uploads/209/original/192_M_Stellungnahme_C3W_f.pdf": "files/192_M_Stellungnahme_C3W_f.pdf", "/public/system/uploads/210/original/staatstrojanerAT.png": "images/staatstrojanerAT.png", "/public/system/uploads/211/original/pferdAT.png": "images/pferdAT.png", "/public/system/uploads/213/original/trojanerAT.png": "images/trojanerAT.png", "/public/system/uploads/214/original/pferd-oesterreich.png": "images/pferd-oesterreich.png", "/public/system/uploads/215/original/AT-trojaner.png": "images/AT-trojaner.png", "/public/system/uploads/216/original/quellen-tkue-CCC.pdf": "files/quellen-tkue-CCC.pdf", "/public/system/uploads/217/original/Abmahnbeantworter-Screenshot.png": "images/Abmahnbeantworter-Screenshot.png", "/public/system/uploads/218/original/2016-09-19_karte.png": "images/2016-09-19_karte.png", "/public/system/uploads/219/original/Stellungnahme-CCC_TK-entwurf.pdf": "files/Stellungnahme-CCC_TK-entwurf.pdf", "/public/system/uploads/220/original/beweisbeschluss-nsaua-ccc.pdf": "files/beweisbeschluss-nsaua-ccc.pdf", "/public/system/uploads/221/original/ccc-\u0430\u043d\u0430\u043b\u0438\u0437\u0430.pdf": "files/ccc-\u0430\u043d\u0430\u043b\u0438\u0437\u0430.pdf", "/public/system/uploads/224/original/Reisepass-zappen.mp4": "files/Reisepass-zappen.mp4", "/public/system/uploads/225/original/ccc-stellungnahme-eID.pdf": "files/ccc-stellungnahme-eID.pdf", "/public/system/uploads/226/original/chaos_macht_schule.png": "images/chaos_macht_schule.png", "/public/system/uploads/227/original/Stellungnahme_CCC-Staatstrojaner.pdf": "files/Stellungnahme_CCC-Staatstrojaner.pdf", "/public/system/uploads/228/original/Office-2017.asc": "files/Office-2017.asc", "/public/system/uploads/229/original/Logo-PC-Wahl.jpg": "images/Logo-PC-Wahl.jpg", "/public/system/uploads/230/original/PC-Wahl_Bericht_CCC.pdf": "files/PC-Wahl_Bericht_CCC.pdf", "/public/system/uploads/231/original/PC-Wahl-Logo.jpg": "images/PC-Wahl-Logo.jpg", "/public/system/uploads/232/original/LogoPC-wahl.jpg": "images/LogoPC-wahl.jpg", "/public/system/uploads/233/original/pmpc-logo.jpg": "images/pmpc-logo.jpg", "/public/system/uploads/234/original/pmpc.jpg": "images/pmpc.jpg", "/public/system/uploads/235/original/pcw_findefehler.png": "images/pcw_findefehler.png", "/public/system/uploads/236/original/holdmybeer.png": "images/holdmybeer.png", "/public/system/uploads/237/original/PC-Wahl_Bericht_CCC.pdf": "files/PC-Wahl_Bericht_CCC.pdf", "/public/system/uploads/238/original/ccc-presse-pgp.asc": "files/ccc-presse-pgp.asc", "/public/system/uploads/239/original/Analyse_der_Ladestationen.jpg": "images/Analyse_der_Ladestationen.jpg", "/public/system/uploads/240/original/Elektroauto-Simulator9.jpg": "images/Elektroauto-Simulator9.jpg", "/public/system/uploads/241/original/Ladekarten_von_NewMotion_und_Ladenetz.jpg": "images/Ladekarten_von_NewMotion_und_Ladenetz.jpg", "/public/system/uploads/242/original/Ladesa\u0308ule_in_Kaiserslautern9.jpg": "images/Ladesa\u0308ule_in_Kaiserslautern9.jpg", "/public/system/uploads/243/original/Ladestation_von_Hager_Oberseite.jpg": "images/Ladestation_von_Hager_Oberseite.jpg", "/public/system/uploads/244/original/Ladestation_von_Hager_unterseite9.jpg": "images/Ladestation_von_Hager_unterseite9.jpg", "/public/system/uploads/245/original/Ladestation_von_Hager.jpg": "images/Ladestation_von_Hager.jpg", "/public/system/uploads/246/original/MiniGratisLaden.gif": "images/MiniGratisLaden.gif", "/public/system/uploads/247/original/NFC-Karten-Analysewerkzeuge9.jpg": "images/NFC-Karten-Analysewerkzeuge9.jpg", "/public/system/uploads/248/original/USB-Port_in_der_Hager-Ladestation.jpg": "images/USB-Port_in_der_Hager-Ladestation.jpg", "/public/system/uploads/249/original/USB-Stick_bei_Manipulation_der_Ladestation.jpg": "images/USB-Stick_bei_Manipulation_der_Ladestation.jpg", "/public/system/uploads/250/original/CCC-netzneutralitaet-vodafone.pdf": "files/CCC-netzneutralitaet-vodafone.pdf", "/public/system/uploads/252/original/CCC-staatstrojaner-hessen.pdf": "files/CCC-staatstrojaner-hessen.pdf", "/public/system/uploads/253/original/Office-2018.asc": "files/Office-2018.asc", "/public/system/uploads/254/original/UploadFilter_Voss.pdf": "files/UploadFilter_Voss.pdf", "/public/system/uploads/255/original/Supporterform-de-v4.pdf": "files/Supporterform-de-v4.pdf", "/public/system/uploads/256/original/Supporterform-en-v4.pdf": "files/Supporterform-en-v4.pdf", "/public/system/uploads/257/original/Gruene-VerfSchG.pdf": "files/Gruene-VerfSchG.pdf", "/public/system/uploads/258/original/Protokoll_MV_2016_Hannover_unsigned.pdf": "files/Protokoll_MV_2016_Hannover_unsigned.pdf", "/public/system/uploads/259/original/Mehr_Demokratie.pdf": "files/Mehr_Demokratie.pdf", "/public/system/uploads/260/original/mv2018_vorlaeufige_top.pdf": "files/mv2018_vorlaeufige_top.pdf", "/public/system/uploads/261/original/Protokoll_MV_2018-1_Mainz_unsigned.pdf": "files/Protokoll_MV_2018-1_Mainz_unsigned.pdf", "/public/system/uploads/263/original/ctdo-charakter.jpg": "images/ctdo-charakter.jpg", "/public/system/uploads/264/original/ccc-staatstrojaner-niedersachsen.pdf": "files/ccc-staatstrojaner-niedersachsen.pdf", "/public/system/uploads/269/original/Supporterform-de-v5.pdf": "files/Supporterform-de-v5.pdf", "/public/system/uploads/270/original/Supporterform-en-v5.pdf": "files/Supporterform-en-v5.pdf", "/public/system/uploads/271/original/foerder.html": "files/foerder.html", "/public/system/uploads/273/original/Hello_Loop.gif": "images/Hello_Loop.gif", "/public/system/uploads/274/original/Hello_Loop.gif": "images/Hello_Loop.gif", "/public/system/uploads/275/original/Stellungnahme-CCC-Gemeinn\u00fctzigkeit-Freifunk.pdf": "files/Stellungnahme-CCC-Gemeinn\u00fctzigkeit-Freifunk.pdf", "/public/system/uploads/276/original/erfa_karte.png": "images/erfa_karte.png", "/public/system/uploads/277/original/share-botsbeautiful.jpg": "images/share-botsbeautiful.jpg", "/public/system/uploads/281/original/presse_ccc.de-2019-03-17.asc": "files/presse_ccc.de-2019-03-17.asc", "/public/system/uploads/283/original/2019_03_12_20_27_27_pw.pdf": "files/2019_03_12_20_27_27_pw.pdf", "/public/system/uploads/284/original/stellungnahme_TA_pw.pdf": "files/stellungnahme_TA_pw.pdf", "/public/system/uploads/285/original/Stellungnahme_des_Vorstands.pdf": "files/Stellungnahme_des_Vorstands.pdf", "/public/system/uploads/286/original/protokoll_2019-04-27.pdf": "files/protokoll_2019-04-27.pdf", "/public/system/uploads/287/original/BBA19_Technik.pdf": "files/BBA19_Technik.pdf", "/public/system/uploads/288/original/Stellungnahme-DigiPakt-Hessen-CmS.pdf": "files/Stellungnahme-DigiPakt-Hessen-CmS.pdf", "/public/system/uploads/290/original/BNDgesetz_CCC-Stellungnahme.pdf": "files/BNDgesetz_CCC-Stellungnahme.pdf", "/public/system/uploads/291/original/FinSpy_Report_CCC_v1.0.pdf": "files/FinSpy_Report_CCC_v1.0.pdf", "/public/system/uploads/294/original/CCC_Verschluesselung_staerken.pdf": "files/CCC_Verschluesselung_staerken.pdf", "/public/system/uploads/295/original/ccc-stellungnahme-europaausschuss.pdf": "files/ccc-stellungnahme-europaausschuss.pdf", "/public/system/uploads/296/original/Office-2020.asc": "files/Office-2020.asc", "/public/system/uploads/297/original/CCC_Analyse_Datenspende.pdf": "files/CCC_Analyse_Datenspende.pdf", "/public/system/uploads/298/original/Offener_Brief_CoronaTracingApp.pdf": "files/Offener_Brief_CoronaTracingApp.pdf", "/public/system/uploads/299/original/Offener_Brief_Corona_App_Bundeskanzleramt.pdf": "files/Offener_Brief_Corona_App_Bundeskanzleramt.pdf", "/public/system/uploads/300/original/Offener_Brief_Corona_App_BMG.pdf": "files/Offener_Brief_Corona_App_BMG.pdf", "/public/system/uploads/301/original/Stellungnahme_Patientendaten-Schutz-Gesetz_PDSG_CCC.pdf": "files/Stellungnahme_Patientendaten-Schutz-Gesetz_PDSG_CCC.pdf"} \ No newline at end of file
diff --git a/redirects.json b/redirects.json
new file mode 100644
index 00000000..a16d9d55
--- /dev/null
+++ b/redirects.json
@@ -0,0 +1 @@
{"/public/system/uploads/2/original/sigint09.jpg": "images/sigint09.jpg", "/public/system/uploads/3/original/nedapReport54-1.pdf": "files/nedapReport54-1.pdf", "/public/system/uploads/4/original/51D-Ga9q_0L.jpg": "images/51D-Ga9q_0L.jpg", "/public/system/uploads/5/original/office-2009.asc": "files/office-2009.asc", "/public/system/uploads/6/original/wau.jpg": "images/wau.jpg", "/public/system/uploads/7/original/regionaleschaos.png": "images/regionaleschaos.png", "/public/system/uploads/14/original/01.jpg": "images/01.jpg", "/public/system/uploads/15/original/02.jpg": "images/02.jpg", "/public/system/uploads/16/original/03.jpg": "images/03.jpg", "/public/system/uploads/17/original/04.jpg": "images/04.jpg", "/public/system/uploads/18/original/05.jpg": "images/05.jpg", "/public/system/uploads/19/original/06.jpg": "images/06.jpg", "/public/system/uploads/20/original/07.jpg": "images/07.jpg", "/public/system/uploads/21/original/08.jpg": "images/08.jpg", "/public/system/uploads/22/original/09.jpg": "images/09.jpg", "/public/system/uploads/23/original/10.jpg": "images/10.jpg", "/public/system/uploads/24/original/11.jpg": "images/11.jpg", "/public/system/uploads/25/original/12.jpg": "images/12.jpg", "/public/system/uploads/28/original/13.jpg": "images/13.jpg", "/public/system/uploads/29/original/14.jpg": "images/14.jpg", "/public/system/uploads/30/original/15.jpg": "images/15.jpg", "/public/system/uploads/31/original/16.jpg": "images/16.jpg", "/public/system/uploads/32/original/17.jpg": "images/17.jpg", "/public/system/uploads/33/original/18.jpg": "images/18.jpg", "/public/system/uploads/34/original/19.jpg": "images/19.jpg", "/public/system/uploads/35/original/20.jpg": "images/20.jpg", "/public/system/uploads/36/original/21.jpg": "images/21.jpg", "/public/system/uploads/37/original/22.jpg": "images/22.jpg", "/public/system/uploads/38/original/23.jpg": "images/23.jpg", "/public/system/uploads/41/original/PE-Eisenberg-20091028.pdf": "files/PE-Eisenberg-20091028.pdf", "/public/system/uploads/45/original/office-2010.asc": "files/office-2010.asc", "/public/system/uploads/46/original/79823.png": "images/79823.png", "/public/system/uploads/48/original/404.jpeg": "images/404.jpeg", "/public/system/uploads/54/original/snafu.png": "images/snafu.png", "/public/system/uploads/55/original/in-berlin_logo_neu.png": "images/in-berlin_logo_neu.png", "/public/system/uploads/56/original/de-cix.png": "images/de-cix.png", "/public/system/uploads/57/original/ecix.png": "images/ecix.png", "/public/system/uploads/58/original/hosteurope.gif": "images/hosteurope.gif", "/public/system/uploads/59/original/71579.png": "images/71579.png", "/public/system/uploads/60/original/chaosknoten-4.0.jpg": "images/chaosknoten-4.0.jpg", "/public/system/uploads/61/original/pesthoernchen.jpg": "images/pesthoernchen.jpg", "/public/system/uploads/63/original/7ce64723f28574ab72a9c82bb162074f55094698.jpg": "images/7ce64723f28574ab72a9c82bb162074f55094698.jpg", "/public/system/uploads/64/original/CCC-de-mail-2011.pdf": "files/CCC-de-mail-2011.pdf", "/public/system/uploads/65/original/kulturwertmark-neu.pdf": "files/kulturwertmark-neu.pdf", "/public/system/uploads/66/original/office-2011.asc": "files/office-2011.asc", "/public/system/uploads/67/original/Len_Sassaman.jpg": "images/Len_Sassaman.jpg", "/public/system/uploads/68/original/sassaman.jpg": "images/sassaman.jpg", "/public/system/uploads/69/original/camp2011-3.png": "images/camp2011-3.png", "/public/system/uploads/70/original/ccc_banner.jpg": "images/ccc_banner.jpg", "/public/system/uploads/71/original/ip-vds.pdf": "files/ip-vds.pdf", "/public/system/uploads/72/original/vds-keine-chance.jpg": "images/vds-keine-chance.jpg", "/public/system/uploads/73/original/ip-vds.jpg": "images/ip-vds.jpg", "/public/system/uploads/74/original/sparkasse.png": "images/sparkasse.png", "/public/system/uploads/75/original/BTW2005-FahndungseCard.pdf": "files/BTW2005-FahndungseCard.pdf", "/public/system/uploads/76/original/staatstrojaner-report23.pdf": "files/staatstrojaner-report23.pdf", "/public/system/uploads/77/original/0zapftis-release.tgz": "files/0zapftis-release.tgz", "/public/system/uploads/78/original/0zapftis.png": "images/0zapftis.png", "/public/system/uploads/79/original/Chaosknoten.png": "images/Chaosknoten.png", "/public/system/uploads/80/original/Stellungnahme_DigiTask.pdf": "files/Stellungnahme_DigiTask.pdf", "/public/system/uploads/83/original/staatstrojaner-report42.pdf": "files/staatstrojaner-report42.pdf", "/public/system/uploads/84/original/0zapftis-3.6.44-binaries.tbz": "files/0zapftis-3.6.44-binaries.tbz", "/public/system/uploads/85/original/0zapftis-release-2.tbz": "files/0zapftis-release-2.tbz", "/public/system/uploads/86/original/0zapftisdiffed_1.png": "images/0zapftisdiffed_1.png", "/public/system/uploads/87/original/FSA09-Prozessgeschichte-V20120118.pdf": "files/FSA09-Prozessgeschichte-V20120118.pdf", "/public/system/uploads/88/original/FSA09-Beschreibung-Videosequenzen-V20120118.pdf": "files/FSA09-Beschreibung-Videosequenzen-V20120118.pdf", "/public/system/uploads/89/original/FSA09-Einlassung-Angeklagter-A.pdf": "files/FSA09-Einlassung-Angeklagter-A.pdf", "/public/system/uploads/90/original/FSA09-Einlassung-Angeklagter-B.pdf": "files/FSA09-Einlassung-Angeklagter-B.pdf", "/public/system/uploads/91/original/nessuslogo.png": "images/nessuslogo.png", "/public/system/uploads/92/original/CCC-Fahndungsplakat_v0.1-4c-A3.pdf": "files/CCC-Fahndungsplakat_v0.1-4c-A3.pdf", "/public/system/uploads/93/original/0zapftis-hannover.pdf": "files/0zapftis-hannover.pdf", "/public/system/uploads/95/original/ccc-regional.jpg": "images/ccc-regional.jpg", "/public/system/uploads/96/original/sigint-top.png": "images/sigint-top.png", "/public/system/uploads/100/original/sigint-top-small.jpg": "images/sigint-top-small.jpg", "/public/system/uploads/101/original/test.pdf": "files/test.pdf", "/public/system/uploads/102/original/Schaar-Bericht.pdf": "files/Schaar-Bericht.pdf", "/public/system/uploads/103/original/Schaar-Bericht.pdf": "files/Schaar-Bericht.pdf", "/public/system/uploads/104/original/CCC20010327.jpg": "images/CCC20010327.jpg", "/public/system/uploads/105/original/nedapReport54.pdf": "files/nedapReport54.pdf", "/public/system/uploads/106/original/office-2012.asc": "files/office-2012.asc", "/public/system/uploads/107/original/Speedbone.png": "images/Speedbone.png", "/public/system/uploads/108/original/logo_ecix_171x200.png": "images/logo_ecix_171x200.png", "/public/system/uploads/109/original/Supporter-eurotransit.png": "images/Supporter-eurotransit.png", "/public/system/uploads/110/original/Supporter-eurotransit_resize.png": "images/Supporter-eurotransit_resize.png", "/public/system/uploads/111/original/hotshot.jpg": "images/hotshot.jpg", "/public/system/uploads/112/original/admin_mourning.png": "images/admin_mourning.png", "/public/system/uploads/113/original/Stellungnahme_Wahlstift.pdf": "files/Stellungnahme_Wahlstift.pdf", "/public/system/uploads/114/original/neufassung-satzung.pdf": "files/neufassung-satzung.pdf", "/public/system/uploads/115/original/neufassung-satzung.html": "files/neufassung-satzung.html", "/public/system/uploads/116/original/Geschaeftsordnung_Erfa-Beirat.pdf": "files/Geschaeftsordnung_Erfa-Beirat.pdf", "/public/system/uploads/117/original/Geschaeftsordnung_Erfa-Beirat.html": "files/Geschaeftsordnung_Erfa-Beirat.html", "/public/system/uploads/119/original/UA-neueMedien-2strikes.pdf": "files/UA-neueMedien-2strikes.pdf", "/public/system/uploads/120/original/fullcircle.jpeg": "images/fullcircle.jpeg", "/public/system/uploads/121/original/christian-lightwall.jpg": "images/christian-lightwall.jpg", "/public/system/uploads/122/original/Schaar-Staatstrojaner.pdf": "files/Schaar-Staatstrojaner.pdf", "/public/system/uploads/123/original/PE_RAVOrgBueroCCC_wg_DJT_30Sept2012.pdf": "files/PE_RAVOrgBueroCCC_wg_DJT_30Sept2012.pdf", "/public/system/uploads/124/original/antiterrordatei-final.pdf": "files/antiterrordatei-final.pdf", "/public/system/uploads/125/original/Stellenausschreibung_Bundestrojaner.png": "images/Stellenausschreibung_Bundestrojaner.png", "/public/system/uploads/126/original/stellungnahme-demail2013.pdf": "files/stellungnahme-demail2013.pdf", "/public/system/uploads/127/original/office-2013.asc": "files/office-2013.asc", "/public/system/uploads/128/original/demail_april2013.pdf": "files/demail_april2013.pdf", "/public/system/uploads/129/original/logo-sigint.png": "images/logo-sigint.png", "/public/system/uploads/130/original/logo-sigint.jpg": "images/logo-sigint.jpg", "/public/system/uploads/131/original/against_stop.jpg": "images/against_stop.jpg", "/public/system/uploads/132/original/drosselkom.jpg": "images/drosselkom.jpg", "/public/system/uploads/133/original/wortwolke.png": "images/wortwolke.png", "/public/system/uploads/134/original/freebrad_june1.jpg": "images/freebrad_june1.jpg", "/public/system/uploads/135/original/FreeBradleyManning.pdf": "files/FreeBradleyManning.pdf", "/public/system/uploads/136/original/stoererhaftung-JM.pdf": "files/stoererhaftung-JM.pdf", "/public/system/uploads/137/original/ePA-antwort.pdf": "files/ePA-antwort.pdf", "/public/system/uploads/138/original/routerzwang.pdf": "files/routerzwang.pdf", "/public/system/uploads/139/original/routerzwang.pdf": "files/routerzwang.pdf", "/public/system/uploads/140/original/claus.jpg": "images/claus.jpg", "/public/system/uploads/141/original/logo-02.png": "images/logo-02.png", "/public/system/uploads/143/original/BNetzA-Konsultation-ITSicherheit-Stromnetz.pdf": "files/BNetzA-Konsultation-ITSicherheit-Stromnetz.pdf", "/public/system/uploads/145/original/Office-2014.asc": "files/Office-2014.asc", "/public/system/uploads/148/original/stellungnahmeTKTransparenzV.pdf": "files/stellungnahmeTKTransparenzV.pdf", "/public/system/uploads/149/original/StellungnahmeDigitaleAgenda.pdf": "files/StellungnahmeDigitaleAgenda.pdf", "/public/system/uploads/150/original/VDSfinal18.pdf": "files/VDSfinal18.pdf", "/public/system/uploads/151/original/GCHQ_attacking_providers_final_PR.pdf": "files/GCHQ_attacking_providers_final_PR.pdf", "/public/system/uploads/152/original/2014_07_01_Final_grounds.pdf": "files/2014_07_01_Final_grounds.pdf", "/public/system/uploads/153/original/NSA-GBA.pdf": "files/NSA-GBA.pdf", "/public/system/uploads/154/original/NSA-GBA2014.pdf": "files/NSA-GBA2014.pdf", "/public/system/uploads/163/original/logo9.png": "images/logo9.png", "/public/system/uploads/168/original/logo9-spaced.png": "images/logo9-spaced.png", "/public/system/uploads/170/original/handelskammer.pdf": "files/handelskammer.pdf", "/public/system/uploads/173/original/bene.jpg": "images/bene.jpg", "/public/system/uploads/174/original/Privacy_Greennet_Open_Response_6_Feb_2015.pdf": "files/Privacy_Greennet_Open_Response_6_Feb_2015.pdf", "/public/system/uploads/184/original/emerson_tan_fb.png": "images/emerson_tan_fb.png", "/public/system/uploads/186/original/ITSG_Stellungnahme.pdf": "files/ITSG_Stellungnahme.pdf", "/public/system/uploads/187/original/Office-2015.asc": "files/Office-2015.asc", "/public/system/uploads/188/original/05042015_karte.png": "images/05042015_karte.png", "/public/system/uploads/189/original/BKAG_Stellungnahme.pdf": "files/BKAG_Stellungnahme.pdf", "/public/system/uploads/190/original/GBA-redacted.pdf": "files/GBA-redacted.pdf", "/public/system/uploads/191/original/landesverrat.png": "images/landesverrat.png", "/public/system/uploads/192/original/CCC-presse-pgp.asc": "files/CCC-presse-pgp.asc", "/public/system/uploads/193/original/fatuma.png": "images/fatuma.png", "/public/system/uploads/194/original/FatumaAfrah.png": "images/FatumaAfrah.png", "/public/system/uploads/195/original/fatuma9.png": "images/fatuma9.png", "/public/system/uploads/196/original/10012016_karte.png": "images/10012016_karte.png", "/public/system/uploads/201/original/Office-2016.asc": "files/Office-2016.asc", "/public/system/uploads/202/original/2016-03-26_karte.png": "images/2016-03-26_karte.png", "/public/system/uploads/203/original/media.png": "images/media.png", "/public/system/uploads/209/original/192_M_Stellungnahme_C3W_f.pdf": "files/192_M_Stellungnahme_C3W_f.pdf", "/public/system/uploads/210/original/staatstrojanerAT.png": "images/staatstrojanerAT.png", "/public/system/uploads/211/original/pferdAT.png": "images/pferdAT.png", "/public/system/uploads/213/original/trojanerAT.png": "images/trojanerAT.png", "/public/system/uploads/214/original/pferd-oesterreich.png": "images/pferd-oesterreich.png", "/public/system/uploads/215/original/AT-trojaner.png": "images/AT-trojaner.png", "/public/system/uploads/216/original/quellen-tkue-CCC.pdf": "files/quellen-tkue-CCC.pdf", "/public/system/uploads/217/original/Abmahnbeantworter-Screenshot.png": "images/Abmahnbeantworter-Screenshot.png", "/public/system/uploads/218/original/2016-09-19_karte.png": "images/2016-09-19_karte.png", "/public/system/uploads/219/original/Stellungnahme-CCC_TK-entwurf.pdf": "files/Stellungnahme-CCC_TK-entwurf.pdf", "/public/system/uploads/220/original/beweisbeschluss-nsaua-ccc.pdf": "files/beweisbeschluss-nsaua-ccc.pdf", "/public/system/uploads/221/original/ccc-\u0430\u043d\u0430\u043b\u0438\u0437\u0430.pdf": "files/ccc-\u0430\u043d\u0430\u043b\u0438\u0437\u0430.pdf", "/public/system/uploads/224/original/Reisepass-zappen.mp4": "files/Reisepass-zappen.mp4", "/public/system/uploads/225/original/ccc-stellungnahme-eID.pdf": "files/ccc-stellungnahme-eID.pdf", "/public/system/uploads/226/original/chaos_macht_schule.png": "images/chaos_macht_schule.png", "/public/system/uploads/227/original/Stellungnahme_CCC-Staatstrojaner.pdf": "files/Stellungnahme_CCC-Staatstrojaner.pdf", "/public/system/uploads/228/original/Office-2017.asc": "files/Office-2017.asc", "/public/system/uploads/229/original/Logo-PC-Wahl.jpg": "images/Logo-PC-Wahl.jpg", "/public/system/uploads/230/original/PC-Wahl_Bericht_CCC.pdf": "files/PC-Wahl_Bericht_CCC.pdf", "/public/system/uploads/231/original/PC-Wahl-Logo.jpg": "images/PC-Wahl-Logo.jpg", "/public/system/uploads/232/original/LogoPC-wahl.jpg": "images/LogoPC-wahl.jpg", "/public/system/uploads/233/original/pmpc-logo.jpg": "images/pmpc-logo.jpg", "/public/system/uploads/234/original/pmpc.jpg": "images/pmpc.jpg", "/public/system/uploads/235/original/pcw_findefehler.png": "images/pcw_findefehler.png", "/public/system/uploads/236/original/holdmybeer.png": "images/holdmybeer.png", "/public/system/uploads/237/original/PC-Wahl_Bericht_CCC.pdf": "files/PC-Wahl_Bericht_CCC.pdf", "/public/system/uploads/238/original/ccc-presse-pgp.asc": "files/ccc-presse-pgp.asc", "/public/system/uploads/239/original/Analyse_der_Ladestationen.jpg": "images/Analyse_der_Ladestationen.jpg", "/public/system/uploads/240/original/Elektroauto-Simulator9.jpg": "images/Elektroauto-Simulator9.jpg", "/public/system/uploads/241/original/Ladekarten_von_NewMotion_und_Ladenetz.jpg": "images/Ladekarten_von_NewMotion_und_Ladenetz.jpg", "/public/system/uploads/242/original/Ladesa\u0308ule_in_Kaiserslautern9.jpg": "images/Ladesa\u0308ule_in_Kaiserslautern9.jpg", "/public/system/uploads/243/original/Ladestation_von_Hager_Oberseite.jpg": "images/Ladestation_von_Hager_Oberseite.jpg", "/public/system/uploads/244/original/Ladestation_von_Hager_unterseite9.jpg": "images/Ladestation_von_Hager_unterseite9.jpg", "/public/system/uploads/245/original/Ladestation_von_Hager.jpg": "images/Ladestation_von_Hager.jpg", "/public/system/uploads/246/original/MiniGratisLaden.gif": "images/MiniGratisLaden.gif", "/public/system/uploads/247/original/NFC-Karten-Analysewerkzeuge9.jpg": "images/NFC-Karten-Analysewerkzeuge9.jpg", "/public/system/uploads/248/original/USB-Port_in_der_Hager-Ladestation.jpg": "images/USB-Port_in_der_Hager-Ladestation.jpg", "/public/system/uploads/249/original/USB-Stick_bei_Manipulation_der_Ladestation.jpg": "images/USB-Stick_bei_Manipulation_der_Ladestation.jpg", "/public/system/uploads/250/original/CCC-netzneutralitaet-vodafone.pdf": "files/CCC-netzneutralitaet-vodafone.pdf", "/public/system/uploads/252/original/CCC-staatstrojaner-hessen.pdf": "files/CCC-staatstrojaner-hessen.pdf", "/public/system/uploads/253/original/Office-2018.asc": "files/Office-2018.asc", "/public/system/uploads/254/original/UploadFilter_Voss.pdf": "files/UploadFilter_Voss.pdf", "/public/system/uploads/255/original/Supporterform-de-v4.pdf": "files/Supporterform-de-v4.pdf", "/public/system/uploads/256/original/Supporterform-en-v4.pdf": "files/Supporterform-en-v4.pdf", "/public/system/uploads/257/original/Gruene-VerfSchG.pdf": "files/Gruene-VerfSchG.pdf", "/public/system/uploads/258/original/Protokoll_MV_2016_Hannover_unsigned.pdf": "files/Protokoll_MV_2016_Hannover_unsigned.pdf", "/public/system/uploads/259/original/Mehr_Demokratie.pdf": "files/Mehr_Demokratie.pdf", "/public/system/uploads/260/original/mv2018_vorlaeufige_top.pdf": "files/mv2018_vorlaeufige_top.pdf", "/public/system/uploads/261/original/Protokoll_MV_2018-1_Mainz_unsigned.pdf": "files/Protokoll_MV_2018-1_Mainz_unsigned.pdf", "/public/system/uploads/263/original/ctdo-charakter.jpg": "images/ctdo-charakter.jpg", "/public/system/uploads/264/original/ccc-staatstrojaner-niedersachsen.pdf": "files/ccc-staatstrojaner-niedersachsen.pdf", "/public/system/uploads/269/original/Supporterform-de-v5.pdf": "files/Supporterform-de-v5.pdf", "/public/system/uploads/270/original/Supporterform-en-v5.pdf": "files/Supporterform-en-v5.pdf", "/public/system/uploads/271/original/foerder.html": "files/foerder.html", "/public/system/uploads/273/original/Hello_Loop.gif": "images/Hello_Loop.gif", "/public/system/uploads/274/original/Hello_Loop.gif": "images/Hello_Loop.gif", "/public/system/uploads/275/original/Stellungnahme-CCC-Gemeinn\u00fctzigkeit-Freifunk.pdf": "files/Stellungnahme-CCC-Gemeinn\u00fctzigkeit-Freifunk.pdf", "/public/system/uploads/276/original/erfa_karte.png": "images/erfa_karte.png", "/public/system/uploads/277/original/share-botsbeautiful.jpg": "images/share-botsbeautiful.jpg", "/public/system/uploads/281/original/presse_ccc.de-2019-03-17.asc": "files/presse_ccc.de-2019-03-17.asc", "/public/system/uploads/283/original/2019_03_12_20_27_27_pw.pdf": "files/2019_03_12_20_27_27_pw.pdf", "/public/system/uploads/284/original/stellungnahme_TA_pw.pdf": "files/stellungnahme_TA_pw.pdf", "/public/system/uploads/285/original/Stellungnahme_des_Vorstands.pdf": "files/Stellungnahme_des_Vorstands.pdf", "/public/system/uploads/286/original/protokoll_2019-04-27.pdf": "files/protokoll_2019-04-27.pdf", "/public/system/uploads/287/original/BBA19_Technik.pdf": "files/BBA19_Technik.pdf", "/public/system/uploads/288/original/Stellungnahme-DigiPakt-Hessen-CmS.pdf": "files/Stellungnahme-DigiPakt-Hessen-CmS.pdf", "/public/system/uploads/290/original/BNDgesetz_CCC-Stellungnahme.pdf": "files/BNDgesetz_CCC-Stellungnahme.pdf", "/public/system/uploads/291/original/FinSpy_Report_CCC_v1.0.pdf": "files/FinSpy_Report_CCC_v1.0.pdf", "/public/system/uploads/294/original/CCC_Verschluesselung_staerken.pdf": "files/CCC_Verschluesselung_staerken.pdf", "/public/system/uploads/295/original/ccc-stellungnahme-europaausschuss.pdf": "files/ccc-stellungnahme-europaausschuss.pdf", "/public/system/uploads/296/original/Office-2020.asc": "files/Office-2020.asc", "/public/system/uploads/297/original/CCC_Analyse_Datenspende.pdf": "files/CCC_Analyse_Datenspende.pdf", "/public/system/uploads/298/original/Offener_Brief_CoronaTracingApp.pdf": "files/Offener_Brief_CoronaTracingApp.pdf", "/public/system/uploads/299/original/Offener_Brief_Corona_App_Bundeskanzleramt.pdf": "files/Offener_Brief_Corona_App_Bundeskanzleramt.pdf", "/public/system/uploads/300/original/Offener_Brief_Corona_App_BMG.pdf": "files/Offener_Brief_Corona_App_BMG.pdf", "/public/system/uploads/301/original/Stellungnahme_Patientendaten-Schutz-Gesetz_PDSG_CCC.pdf": "files/Stellungnahme_Patientendaten-Schutz-Gesetz_PDSG_CCC.pdf"} \ No newline at end of file