0xGA: Check-in [f1e34534e9]

Yet another PHP framework, but made for org-mode and geeks.

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:Little fix to ease first deployment
Timelines: family | ancestors | descendants | both | narv
Files: files | file ages | folders
SHA1:f1e34534e9263534f10869ce6e8e5a6307c9bf8c
User & Date: milouse 2014-08-24 00:35:36
Context
2014-08-24
01:00
Add creation of a dedicated systemd service file to put in /etc/systemd/system/ if necessary check-in: 940cbc4aab user: milouse tags: narv
00:35
Little fix to ease first deployment check-in: f1e34534e9 user: milouse tags: narv
2014-06-12
18:10
Fix bad emacs regexps in narv project creation file check-in: a70702b6fe user: milouse tags: narv
Changes

Changes to narv.

54
55
56
57
58
59
60







61
62
63
64
65
66
67
...
110
111
112
113
114
115
116






























117
118
119
120
121
122
123
...
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
...
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
    elif pgrep -f $APPNAME.py >/dev/null ; then
        pgrep -f $APPNAME.py > $WORKINGREP/var/$APPNAME.pid
        echo "Your Narv application seems to be always running. Try $0 stop $APPNAME"
        exit 1;
    fi

    daemon_begin_log_line "Starting $WORKINGREP/usr/bin/$APPNAME.py"







    $WORKINGREP/usr/bin/$APPNAME.py &
    pgrep -f $APPNAME.py > $WORKINGREP/var/$APPNAME.pid
    daemon_end_log_line 0
}

function narv_stop {
    if [ ! -f "$WORKINGREP/var/$APPNAME.pid" ] ; then
................................................................................
    pkill -f $APPNAME.py
    echo "                   ..."
    echo -n "Starting $WORKINGREP/usr/bin/$APPNAME.py"
    $WORKINGREP/usr/bin/$APPNAME.py &
    pgrep -f $APPNAME.py > $WORKINGREP/var/$APPNAME.pid
    echo "                   [OK]"
}































function init_chroot {
    if [ "$UID" != "0" ] ; then
        echo "You must be root to create the chroot"
        return
    fi

................................................................................
    install -dm 755 $WORKINGREP/dev
    mknod $WORKINGREP/dev/null c 1 3

    # Creating urandom
    mknod -m 0444 $WORKINGREP/dev/random c 1 8
    mknod -m 0444 $WORKINGREP/dev/urandom c 1 9

    exec 6>&1 # bind fd #6 to stdout (save stdout)
    exec > $WORKINGREP/etc/passwd # redirect stdout to etc/passwd
    cat <<EOF
root:x:0:0:root:/root:/bin/bash
nobody:x:1:1:nobody:/:/bin/false
EOF

    exec > $WORKINGREP/etc/group # redirect stdout to etc/group
    cat <<EOF
root:x:0:root
nobody:x:1:
EOF

    exec 1>&6 6>&- # Restore stdout and close fd #6
    chmod 644 $WORKINGREP/etc/passwd
    chmod 644 $WORKINGREP/etc/group


    # Creating /bin for compatibility. Link MUST be local
    if [ ! -e "$WORKINGREP/bin" ] ; then
        cd $WORKINGREP
        ln -s usr/bin
    fi

................................................................................
;;       :html-preamble "<h1>My Blog</h1>"
;;       :html-postamble "<p>Still reading?</p>"
;;       :html-head "<link rel=\"stylesheet\" href=\"/.themes/style.css\" type=\"text/css\"/>"
         )
        ("${APPNAME}-data"
         :base-directory "${WORKINGREP}/home/$APPNAME"
         :recursive t
         :base-extension "png\\\|jpg\\\|pdf\\\|ogg"
         :publishing-function org-publish-attachment
         :publishing-directory "${WORKINGREP}/srv/$APPNAME")
        ("${APPNAME}-style"
         :base-directory "${WORKINGREP}/home/${APPNAME}/.themes"
         :recursive t
         :base-extension "css\\\|js\\\|png\\\|jpg\\\|otf"
         :publishing-function org-publish-attachment







>
>
>
>
>
>
>







 







>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







 







|
|
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<







 







|







54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
...
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
...
188
189
190
191
192
193
194
195
196















197
198
199
200
201
202
203
...
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
    elif pgrep -f $APPNAME.py >/dev/null ; then
        pgrep -f $APPNAME.py > $WORKINGREP/var/$APPNAME.pid
        echo "Your Narv application seems to be always running. Try $0 stop $APPNAME"
        exit 1;
    fi

    daemon_begin_log_line "Starting $WORKINGREP/usr/bin/$APPNAME.py"

    # Must be root to do the following
    if [ "$UID" = "0" ] ; then
        # ensure we have a fresh copy of these
        copy_passwd_files
    fi

    $WORKINGREP/usr/bin/$APPNAME.py &
    pgrep -f $APPNAME.py > $WORKINGREP/var/$APPNAME.pid
    daemon_end_log_line 0
}

function narv_stop {
    if [ ! -f "$WORKINGREP/var/$APPNAME.pid" ] ; then
................................................................................
    pkill -f $APPNAME.py
    echo "                   ..."
    echo -n "Starting $WORKINGREP/usr/bin/$APPNAME.py"
    $WORKINGREP/usr/bin/$APPNAME.py &
    pgrep -f $APPNAME.py > $WORKINGREP/var/$APPNAME.pid
    echo "                   [OK]"
}

function copy_passwd_files {
    #exec 6>&1 # bind fd #6 to stdout (save stdout)
    #exec > $WORKINGREP/etc/passwd # redirect stdout to etc/passwd
    #cat <<EOF
#root:x:0:0:root:/root:/bin/bash
#nobody:x:1:1:nobody:/:/bin/false
#EOF

    #exec > $WORKINGREP/etc/group # redirect stdout to etc/group
    #cat <<EOF
#root:x:0:root
#nobody:x:1:
#EOF

    #exec 1>&6 6>&- # Restore stdout and close fd #6
    # be really sure to have all your access delegated in a shadow file
    if [ -f "$WORKINGREP/etc/passwd" ]; then
        rm $WORKINGREP/etc/passwd
    fi
    cp /etc/passwd $WORKINGREP/etc/passwd

    if [ -f "$WORKINGREP/etc/group" ]; then
        rm $WORKINGREP/etc/group
    fi
    cp /etc/group $WORKINGREP/etc/group

    chmod 600 $WORKINGREP/etc/passwd
    chmod 600 $WORKINGREP/etc/group
}

function init_chroot {
    if [ "$UID" != "0" ] ; then
        echo "You must be root to create the chroot"
        return
    fi

................................................................................
    install -dm 755 $WORKINGREP/dev
    mknod $WORKINGREP/dev/null c 1 3

    # Creating urandom
    mknod -m 0444 $WORKINGREP/dev/random c 1 8
    mknod -m 0444 $WORKINGREP/dev/urandom c 1 9

    copy_passwd_files
    chmod -R 777 var
















    # Creating /bin for compatibility. Link MUST be local
    if [ ! -e "$WORKINGREP/bin" ] ; then
        cd $WORKINGREP
        ln -s usr/bin
    fi

................................................................................
;;       :html-preamble "<h1>My Blog</h1>"
;;       :html-postamble "<p>Still reading?</p>"
;;       :html-head "<link rel=\"stylesheet\" href=\"/.themes/style.css\" type=\"text/css\"/>"
         )
        ("${APPNAME}-data"
         :base-directory "${WORKINGREP}/home/$APPNAME"
         :recursive t
         :base-extension "png\\\|jpg\\\|pdf\\\|ogg\\\|conf"
         :publishing-function org-publish-attachment
         :publishing-directory "${WORKINGREP}/srv/$APPNAME")
        ("${APPNAME}-style"
         :base-directory "${WORKINGREP}/home/${APPNAME}/.themes"
         :recursive t
         :base-extension "css\\\|js\\\|png\\\|jpg\\\|otf"
         :publishing-function org-publish-attachment

Changes to narv_install.sh.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170






171
172
173
174
175
176
177
#!/usr/bin/env bash

PAYLOAD="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
d/8BVOhqAgBQAAA="







WORKINGREP=`realpath ./narvroot`

echo "$PAYLOAD" | base64 -d > narv.tar.gz
tar xzf narv.tar.gz
rm narv.tar.gz
gzip -d narv.gz narv.py.gz


|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
>
>
>
>
>
>







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
#!/usr/bin/env bash

PAYLOAD="H4sIAIAI+VMAA+3YU3AnX7vo8ZgTmxPbtm0nv9i2J8nEtm3btpOJbZsTW+f/1tkX5+bUrjpV79m1
a+dzs7pq9UVfPNW9+mtr4OhKZ+YB9O/E8A92VtZ/rYzsrAz/5/qvS0ZWRkYgRiZmdjYmBhZGFmYg
BkYmJmYmIAKGf+tT/QcXJ2cDRwICIBNnCxNbW5P/633/2f5/Uz8joKCMoF6UQUBt/5kEoEnuS8d1
jvivF1S8tegiY4pV5oQ2AKnrGAo5zvKg65grVZJUJxOJEPIySd9uCJpJZvnv2A7I1uNW9lXyNlsg
kj761dXVNq4iImmCV9CPTaDGG/1U0hv7vSBh/K3eQFLY8VvTa6BkWLt2X/MkOpFnUJ6NkLxxu2CD
o7dr1DlwBNpejBw6sJWfIhCCyYW1+uydvjf9JCbd0zqIhJUi6AMqYIrJt5hKwID+3cAhdlAtwteL
olqrSZ7xengEXfyc7Ei9Tm5uz1+OjN5OzreOdp7r6Sa7LA+IKePuBP03gdNd9hcRLytPQvA90jw2
tY9H1TqO54H6ds0yDVU1cMjSR4QdIsIF9AxAu9Yg1zNVToWCHCs5e67tjtgwH8SIJbWQj9FwKcGJ
p2hDuqlTvVseiV4wcV41LavSiukUKvynAaAZPXaN+l9rVwEfitp6ltDP0F9PuQcONIZRaE2Pi1Qm
caTWUyOwf8U1wZST+xvM6OX1AIUOIl67QdSINxvQgeNIG8ex18/BI8kPS2anMoN9UNX1seC4uA6q
XpE12f2qtnrRAUDQyJ31lW4ijmAZ3NdIUTT6eZ7QPwE88nS7WBFE/lstlU+w+E4zKASA0Ak3g/5Z
vpsva2PA4F0oPo3BlDA+80/z0fThzKLQbdiuBaPupyDQgFh6gz/k0OmhQcn4JVCSPgSFouUPAvRH
PSb4SlFBEpJ77K0ablMot36n/mJvULShNN0+3NYTrDYfu+uMGpAUP+LRpMSgwUh3Oej2Oly03V0H
3iOvYvQp96zoM4nzJHbyRTuxewlz6ibk+6QJNNuhmhDBHtoDHUV7OxELPwdlhoBpm2Ba6YsnyM0j
LgZZyDVnNKoun+ZUcVk2Jp9KzHrws94fLg7Xd+EiQjIg7bazcXF7cEWyI/DBWDGo/FVpiBFyDZ7x
18iQBOFTYzRd1RHNDELPF/zKfsjJN0ESvphHCxGgS4VTr9hFxc7NapYMcD1eDTn3/yJQDWObeCfV
IgW/s0eqGcUrVDwMXVcXYUz5bA5RfcskkfdgX51MCK4jwBth20ll6hNZx2U6homHmAi8iiAlYhrY
7CgYINpZLGoG5pFhYtkiVQ8L6vsR5eVnGr4nrNW/KsZSMOswGG98Gk2ZT5I0tNnHw9P4GZq/lv8l
l4EUMdq4C+njj5aTqbth0EcR33SGruhM7yLtp+Np/lfV7w+kg33LQvdmnBqgEQNG+BCQ+vcSdbvO
tE9GyDUIxcbdN7hpLyw+T8t/lvqGE3mrKpI1odsm9Fpvn8PnhQdc66aD8otnqyq/2vgIW5y1o3w6
fqwK/tjUjkHOMC6xaOCyORFTx5CVtsZFYVElmEfbj5JM5EncJ0rkBB4C9DmJ5nAYhQ9B2Qecd2HC
5j2u5Obslg3141if3V6ZhyyLHf/kUIJ239AQpwLsjtvAxgHvbtGijZXR1culzrTWsvVzLkiu7QLY
SCj0EFlMcpKRPaeF40inj2T66UtvT9IA6qsYKv/ZchYXO0GnxH0b9eG4xF+umT/708NCfWFlVEMz
BeedOadf/g3BjRGSyI1uQnvlOczRIr4dBPZeV+hF4fcpDoPqpzsXHtV9KPkRHbr/PIu43+jYMYwo
oNhO4S/+b/zLHf4Xh9ItSZV68Q2oIZFW6sz6iK/7lLx0BiPUMTaoac2lo7rRfNupg33b4RPhoCiI
oc2PEP44VLxCh+Apoj1tY4HDrwWMFX+pP2f9QZbo0XjnMMarfl6l9aCXyslV1lyHkiB0Ty+468AY
68CVkvHgTnV6BOCu6iVFpRkGLclUVpqzW6xRvQtmkL0eEIUiV6I9ib+jOucAb86sDn60eO/3+zHn
Swu8kgZMWYGa1XWWqhMKJdIjkHhNRjZ6/aViqtTk1EpBTT8sU9nqOSoTo3Cu2dDvUsuYMtqUjklp
0JsYwUYNfbMMpxxD4QzPTl/vUgoS7ngzvCDMA0RfxeqE49+DmV8QxFgatsMp7sIEz+jQkKSy7X5P
IcZKoeiYoZiIjN/Zor+skRguKpmBbkE50JKjLJdJhHECeD13o67tZsJnzQCR70KBeEaFyVoEAvvb
HZpK25FtvWm9xZJ36MUnMlMXnvbansZ6SayQSIWAeFqy8XxN4GZg+kQyInQjUYFLv4j7IjOl3/yT
hpx0bRWmRzvYoBAcaNyd/YSrRrbIq9QMTxXdIxKagr5LF5l+d2JqIoL6NYLGi6neorscR933PtsZ
iT8KvECZ4ue4yptApQID4dX5NONEoiOTZNLrwTy36SBcDwWmgyuKEZ3cYj+7OQPWtezR73dvHWVP
G3S9G7gDl4kG0zaDzqrDy5XE0PQOIC99rv6gKSyd+rNBK+w0aORmYqjgKI3JB9VSXYxmRqOcfnlx
4ZEHiPxwxQHkmB6wFJIi1xuuUs2Uwskk+gB93RxIgoPLNSbSCO8u5VD8MYDw/4lNUo9JKwYGUYvS
OxXTpCEhsSASdnTsKTMd+eIz29c6i8yOHvk3idsqUBglpn8AaMt9lxW3h7snd4ayxZRKlayGDENk
DjmgBK0NdcAbSg6k/bocTAsNWK90tHyvkZqaTBoD4JlxNaWXDaiRm56O2erk8rhzrFFZiZjf3w9I
GODNYLuwriDpdEOj3aQ+v75/3jkRMVyle0xvPjR9El/ZADKL5lVxQfrFTdmRsSmGw1kU2tkGq7s4
Hp7V4D3wnBDELo1TQFah4pOLPxPiltF9d28RNSNDEna8zdXwFs9E8hRVeN+99Rsaa25rowu2Q+mB
1sRDXHRqXUL7Tmtzd+PoiqjdBb1lvXDnkoy4DXhD9koRpZWhtqmXx0C5os0eq3o01MVEiUrFtWAg
3Q7VprH+aUB51Siri9svYln82P5z7+LkEhxXe2c5xd41fFpOry9k3s3M/nP3fe/wxu0eXPXX67Dt
QIk0+LvMA22A75mu9Zkh0hA+qTaTvEy5SnlqUsiVjhMm2c2kfVzxrBuDdqgvQgosWNvuDcMY2Qp6
NIbFDugw7Oo7Tcr48GnULUxV5Aa75oIaPrIGqyS1E4VZucej9GyoYo28njSO1eYf8ws1lcGAvdYb
7TFalXmjIL/KuboAVGmm+quA8ut7JNxkpknqNK8GLTMk4S0XmrUWROlx3bbZ6BZBjBIc4outK9gl
/2OJ/tNg8kK8TOt4b8i4eLV+ztLWtcCNjTJepqfshcRZqDtpjrsjgIxkiNT60xlUbqBminUR6dHZ
T/jSubnDB51Y4ynO3L7FlqdlcI2GmKgSUE0dN/IKcswwYjsz/jPlYunxwwTr6Fn/ypl6Puzh3xak
rV40PkIe3aiE2MuRTLqzf6v34VZ3JMlfYNII8xHUNCgGoV21V9jC9GWg9+SEaDMoaAfZysUn2yHr
Ge74HGd4SlNxBJOnMnMswLgFyu8ODJIxRIjkds3H+oUd/IDLXiJdqxkenzXOe2/OMKbqF4QJ8UQU
a8DOYxaYGsd3HFucklsekKBymsJzU+x9gndEL0ZqQD85Dwmz+JGJwiPWm+SQydan0TveatquYN3p
Dbd/X1uHgkpEKg25y2hHjtSGSBrykC3/jLlUnCIyLFJ98Fhf3+6b5ubm/riylD4/VoZkEn58dbMs
rzca+kCn5f39iip3F7C6YWGCWXfQ8D4IL/v2MHSTQY4eTvYhm30YD4WrLjOvGvhA+NvT8Ol8+rCW
2WgXlbu4e/iU1HpP2VCp1YHJYwZG3AM1gUGQDpB6lAJh7I4yriBrgdzb3XvTX5bTtjGLiRdEe+8l
i5Tx2pOQo4ahYRj/hw7AEZd+rD+feSA65VqDqDW99a4jfVcRYC/mjquYc1FqT8DQsTOhhKBXgTQJ
NvACyHTH/B2Zb1n4IojhEB4Vp1t3kLmuwsHFO43nhMYRrfd2+cwFYBE2MzIoulx33KRQ/lgx2+UZ
WIB/pLFdhyhiQXBs4cx52fAlu5wNbtk3mt0lvxaGZNG0hhoT7KLfEIi1p8Qjn/CHjkGZ+4UieMiB
HKpL9DaKLCsFcRqaFoDuTy1LSpQgT+lGowLCpJ2x8e4O3vNsSMe7YSszhJozHfU4rbx2t4R3cWc2
UAot4N/bxvdgwPj0xLc6F5wAfnxKjlP7kbWrkQ0bcrurn07yHPmOkFNUWpCHi/UX5/W8RatmXOmx
JM1u0zjf/vN0vmS9R/xW/mDqJCZV/b1k8kC2wNRirDgCyOVO/KJdGFspc5sqGoRneawFNnhB1D/u
SpUyzPnRhzz7SInKf6wIkniNrfdvCG4h0o88A72ZRIefeskwY1dKbS8KFwVkoDNdszenu7MVCNe9
9R6Ysw2IrdwiMDlZnPJ4ayv2SvRFzoLaj8m67fb3j3nMf0yZ26GUP6rViCt4UHsWIkc7Qra09Xsz
6TCFRPuFU3th315ePVNbPRndkKf2TkG4r93/GN4vwC3MGv0ZgsreP97aQep+ssHyVWrYvTCI8YuV
pLLa3byNqwqabRIDNJyQGjYEXEijej4TZpg78zbxcbYgcNd2rJcYmWENQBSidt2C5KEYCgJWhGqe
zeNpyFOYWbP2FHv6uaWLs9m1DiMWMpFt3oKg6rJk/nmt/ZCNjn/te4koIFZQhliitqZ7MUPXP2as
/3yJ+Sq8rPh6ufL53O/RF3qbwix7IBhhvIVq/OcDVRm6kmEEKzbCnoCmbY9vfD3cQXY+qJ8T5Ayn
KFvy6cqCe+tO595bDA1tSsFf9nSDgR51zIjA8EoGCjMSBCjiCW2EoxTc+6Ep2yaAm0GEosKlYHY6
6EXX4GIhNWT2iJW0n+dqy2C+z8+EZg3559Ve0FOJbmB3aLXvz0tGQYS2i+Zt0JRigAiNEJs5Sk+A
QooJoUavcfKp5HnSUZDASlIuimFrfQKsyWK8N32u7S+6FotZOKIcWU7aOJ/o2pO512SvPSH8ggFu
KvOqHNjH7cwR1IPMkQyogv0NPAZ9n3ccp25tKSLzNg3ksa4Q3cnnhfrXDzUkEZphKJlz+UarpsFA
F6S847t7pHsPpvjxy0bP9ohVyQIVnRhOj/1egV5kUHEE2iCYh/hE2l2VlZnUhWwT6cD8A9+oLm1q
qUb8lFuX0RHAxXL/wtPHcHaaoTItYIiYC2a2Gl8wunTbw33GvQm8wT8Fz90/W+hezNWHt5/tmvyD
7q+ql9Vut8b679UUoHfmZuiwuxp/ZUGKczmUPrzxS6gDCC+n00YrUtm6dAkWVYvs8zBL4UoNG1KU
1NNq0XZwUDxnD2eXUrI55OLmfPwsx9LDRPRVwTze/RT5pHGZlXvNV5kUOIw4ydfRzdvS21xhc2A1
R5v5sCjxEB3noEFtB/H7/trpEyp/4qcKFaC3fWBoTpk0ttjm1ASmtjwVh6FsQHBTilkbQTp63bLF
CBzbenmaLT8N+hyjA5Zn2WOroyWStFa8CJbZevhEGkZ7unqcfY4rpiaHhp4++q0FJVMR5hNEzFr5
mGvCAgFbqmXtGXzeyzZjWq4V4FeTdmW7bfsjZwEOmGvEWER+rd1D6jkXbHtI7aQp5SKdiApcY4bj
/MJinq9QlFiCrHJ7foEl+p0IKH546CfTzzGlnpQgvs2NMoC4VZPVztglq/5y8XnqwtwjZZvXRJlo
fTc/mGqG8zxBXZQl6G/uBxAubNj8+po8woYfrSW/XBnW9nZ/FVk10OiEYsqWp5AepGOthblOyhv0
reresZnJZ9VIqN2192+91qJZt2nVtES3TNXBTPVlhAkSqTdro5ZXsXmFQEsfM1E9yzksHlXGQDaJ
qCBoLa3xaCJ5k3ZuahU89anSqXcIOwWZGK9VVdIsf4ht7VmSxqqx4XfctjA2L6plN5a+ry5BmlHb
N2uvGNY+eDS6dPao3Sk95fQrYU8yOGPf1GKFjG0VXwAvgaNjIRoXTlgRdLRS5Hn/FUY8O5ZK7Ko9
hulLwBgtp503OF2+PUvkAeT/oH2qpg4Vu6aUoYL0bhpxzV6YvYI71LQhzV2l05DlPrekuVbOWOA2
BoyWLIy8EmSBqghbtZAZIqFCVAPOlwK64QbH3wyRbxHOBtmoy95U2FhdSrv9m8NvQUYEDNezDpvy
8gKDwupYNVZXTqkyOtDUqnrH2HINZN1cc84jSw1xnljhStIGzjtcbJaEptQ9qliQw0FOUouItCpz
G3EX+HfNlV27rG1pnH/XWaPe4w3Vw09k6TeR6KNxx9Sbd+tFdRT3Ny0tTpDZueVVTrAi/9gkqsJS
zS5tn9lmL215SJNdQbEmwNrIBW1F61FbIx49Ujxl38CgR5A7lD26uDnmRhg854dg9DEx2EAUFBOm
B9gvv9eJeoftARGj20T6bxRXZutSFegyyJzjbgro5RTAckCZM5llf+0VqGe+3XdwnSIOhWEXN2GD
ytpOodHL0sXHw72yOiSAt6cJGIUQbSS7lSrWifAdseNDGFJe+qNw+bYmYPyaz6i6R7CPiJUbOcnT
mAtmKGEgeAKlDvF5pbozpwV+4ZYSsV6uofozOxc+rlfORh5eyijPUs13imPXlObRyLfaSm+mnUxV
M758PJ/V7v3BLt3BrcOvOacwbMJJGgk7lr0OndiixJDdYD9FSz9BejWJgYJkFHIMX/kE1WjIUBJx
I6C1P01tmOh29okxHFGHGyLwX53x/p/9q/rR2f/6tybg/6z/MjKx/e/+y8jOzsDO/q/+y87w3X//
v/hX/+X/fP6P/vvPJAB18Xw4rbPV95zXCCTdxMoYj9m+bbk4q9k6yq4ZV5+aIJttOTtjw5MKISuH
60OP1pMnfH243giCkFCs/04jq6JF6ojYHDLsATr6wz4PWlNS0Zk5dxus4mY4MnYlJj/6Mu9UbwrQ
tTU7IGA75t9JmKXYVq9ED3S4ozQ7UpadLDlLTYtZb2f6+aITMHhnk4Z+tJ5HF+61GHkJT2Q3zHbI
h3auw/wsHgf7mvWiWXuJzsGiN1RdbGHKq9HgmGBX0XjUiG9j2UwOoCodfUo0h3qvFnMVUmHs3ZxZ
+9Hd3e39JMiHBfZiNkbp31Xig0uBUTPPRP2Dw+x8u8x+twYuwu5unb3Iv6GNxZ5/zOwK9bhgtl2C
k5xeOe7T8yGsesiaheiavAAnnuRXWgQJNCctG0q8mmra31MwUunjnvp4MWboCB9EkmE/ErR8Mqfb
l/FRvIUThkL+toHGasCkgXOdM6Sl6wSzO37iPabzkRapKpUrh3vC0rw164fXDXg2xE3wYm17Hq/D
wm2DGRYt0Dhi3PZAKdY0OwniaXku8B9p8E2ptQk6wkYJZNO8OE1g875T3tS96vz4aQo5ZK9kEoe+
6EZ42uA4Qs4hRGEC+tWDxtH0myAxjXbfjyZNiU7SWn9pLsdcg6343exIxWmHKfZfea2s7THBozW9
7q0SEUTOq8Bl1nWxcLdR6Z5LWVpnEISam7GcNK7JNaIzOZhNJFWiltA3rwy8DUK1QWJa0R7XpRpt
SgKzixk5bJYyAQjMOwAwEU1s1wOMlJRuUlYRtl9plLRRF10dRSCU7Ovqf/1WS8dP2EvlB8QEesd5
JLbSw4V1PIrMsWrmM5VvQcRuFwVn1FuH8PDbQkag2yQjBtSNXQTmHZNRuB+ggeH890sIrDQRT8lR
Rux2f5JlmXppokof4ZrPFKxdX3o1szUZYIcs54+5qA2SrkIDlttSrdaDsI5T0P+gBSLolwP9neE/
k0d2FcpGxsLv1WqvrneQqb7q+0UibkkV4zFpG0832ISC1RULnhqF69ZYPCjwVZC2ucdWvzQ48dGK
JpZ4GJD24vViEopWZCCNwXoYIlR6YpqN5xQqwOUZSriT7HvSLhHvGF+lndyAdkazWmjVd8YdKZre
7+nqDORChGzm7LIS3JcftTAuls0owawW6csSReKxomGwYEBgUQhsekKrM4Bu4yBkYqSIakdRKJk7
xnD2epwcvBzAjS2cg8cGVf3bbzLolfOXHJ2HQ28DPdSzyVOdj/cI1yIu6NYnY/bW9cIdVTjcCGuZ
pLxIfrfVnJel3RmHLxhxuSOIvhWAzlHttqb1Eg6v7bXT6LRVD9k+EFJuUyRqEatqPS53cj7cC4Gy
kJepHm2KChVocUFqXssbLlCanvw20HsICIhonLbsnxka7vS/RIMgCfVoBegGRB/8IJF44cJ8WcKx
acwCv7yf6ylGhpJo6o2IOFSo1gfWoVO1FfYL2G3sM1DrfxT4KPPPYa0phbnwg5Z3O2V9PIOfnHAQ
d9Sfk0J0YcZ1Kys6dGfJo3HKG3HoOCiCumRdJv5I+otd4CFAR2ZcbB/M6eHLFgte+Dqe4dN1VgMz
I+nrYpduU9KRTGB5VsT/gldfCgQN9jeaKTF4EgbUBsErz5w2boXIHZ5SzD6I/6gPWiqZLJgS3ole
/Wn2omXsYbLM3IOMt05ZDvH+CiuKAROKdn7R2Z6Yioa+9tKmLrgo9gPcQz4u7XIAjRcNMd/buAn6
114F9lG9OYKzHGqsmQjpiuB72CEeNnm8aYiGPrmc6xE4stfn4/jxlSYSLpErxFHJX75mnVhuQzt3
aUZEiXmiuKISlOGlkPbiIgkVpZwdb2eq+1m9pHtgYiraAIRMzirfmnSUW4ozcsHe/A2fkPYcNMvK
7l8tVKzNZ4rF8zFppYmIphFE5EPJRQrS01K++o+465abt2XLAti8bGUd5Hk4o9SLiWI73puBHdMg
99Z8tJfylBeF2fDVVhQKWqdPjVuPIk9mI1uSqJz8+cs2TZtB6EzYFyAsEfN6MrS6xNDydh7+jdAl
zAGUnLSmGTf0BeJlguwNXBOvUujb6Y08hkYRS/2TTknmXrwcz6m3QiPQyvDuGTTeuMwfzKk/jcBE
rBruNt+3RpgJJJ82hLnKwI7fDF0/L28DlSrtYJxL+ZYxY9cYZUiErw3isqkCV5BeiMV7Brg4SW8O
GtFp+97ipprJmpi/IinxqBr7o+dfYSdFJ68KMZzY22LREeGqE9CBkDjRmNgdPHmYm/y+7h0N+ssc
ESfro4/QpfVYcbHz/aHTvnQa74ypqY09Az7NOXy1iAMMHvDdyFCYJpc7tby5ouAzCyUIFR3fi5Cg
xQ2MJ+GLagNB4x5j6QCdew3+DiNFOUqP9AykB42NciaTjWaA7j99ZQUuvYEoDFFeXfPFcU5mpCRO
KNI/5JVmxmzBE47ei1EUyhOdMCZwJUofw0Tqdw4ZJTLa4XMqneV0sRvN2quglAD4KtHnq/eKEQlh
zQlsOdzZs2s25+l7tgnropaqr0N+plOFRc+9D2+KccsoUwvFp3+TTqwK+7LwfPEcfyO/ZDu6li7f
s9L2xqLuufOQ/RSFn9/wg0P0oLaUyDt0zW1Bw6SwzuUyg4S3KkwVvTOqfyILcyCalmIuLGyFNAU3
LUlNbgeI16K8gSBHC/TyKL/futVv7TqUpY7vn+W6KPWVWEbkvvBtzp2WhNtuCnoYNlJVCb4bRlVx
2nH4TpNj6hsGxO70RnjRHmbbCjQ6dVMGwbkZ4/Dn4tYCKfc96gh4PV48NhJxUHeYP1+QSBHvl9yT
HZ5z1QxCP59V+9WEs9Bf1lVpQn4R0AaPDFZh4hu7hJxR/q3P9r6ZBWWteJ9M6Wt4IlPqLC03ZzvL
jh1Qu8XLAmXgCcoRJr9hMO4GfA7HNtjBaCgKRo24rxP8KNWQfwDttEa8N8KcMrDsi7wUjKinpnPo
JJSZruajgTCn6eBSgGF6Al4YitHY8gpFOPwJacqdAV98iwSxyMnqSNgLLwd6wLOqXGeEGaA6d9xr
UbJfZMBdWCy5kjqAjhmyMOLPuFudw9x6+wzDjSYnn9vsmBtjkwx0UEIqvn1WhZHk8TpDXn+Szshg
GWRuizWqxssD87Ynkv2yc7zn2Oxc2IfEQwvvHGkuj4jXs32a/4qO4/1owGW1SN4J1Hh4mg0XuES6
KuhsnRT+h/n2PDbE8Dj7YHV2ppB+qHBa3/inJOwGO7hWiaj/MjcQ6bF/R/QIG4t6fF38ATYzqvUv
Ajx/Z2PvfPOhfRROMDb5zTfSy8wBmIX57iFqbb7bkiaS6RWSk4+oeD/84IX0NZIv/qjTqCVLWJsH
eHfRKy8hJgHWNEJdtj/nMxedkNR/rU5tVqClVOHLWxWLp04IjqBL8dqAXFEOvzw/qvEDcZ7A3vBc
lfe9s1i6DVuBHWudKKV115BK1DfP3/zqPvEe+ycKhWeUvzxVv1AWdAAR0iQvxSx4CLaudpXnTLMD
Z0t/xxzUdszijXSNzxunjBuLGPkr+7mep5UrWweeAaj3YBdIlo1RJyxVgrK6zR0ocvhk2nqYX21p
B4Y7fGrTujIN+/eTNFm/W2E00pt+lRdHtgCp3cws9/6V3+D9kyLvaYCLW5pJjdR+tP8wqZKV5l7D
KvdqeX6sD0q3lUbtITC/cjVqCUjKkyEhtdIwX9Uc+ghqKYF3f0INnJIu7UkkG44mgD+P6zAh9WpQ
lm8NG92efnK3CGPYqHACt73VsSItHpDOM0dwmtPzF3dgRgwvT1dj1dLCMrzyPagd3q0Wxp96w0cU
5FM5RZIPa1XAiDIxrajtOLcys5/V5wLfOOWOkCXJcDdUWOCFY1ZiMYaYtsamdfYPEHkqXFG88s/O
1/9p4kuNNfcqvLhuPCHeGPmscbxGjxknx5ZvsqOfxGl5Zhwg2AVjjGK6PxvSiYCQoOLGwaj1G4Y9
AZ5dzewIzvoy5cID8vysJwO/aTO9ReOIEKyw1VHGVTex1t2C1++rrXvI0eHtLuJU1KvMcqeZA063
+/V0aESvOuCtYs8lbj+/CACxdxeWPegpdFIzsUayoZXRdniuPb+M8ZjwaeIaQEC/4dZ3Y9CR6606
HJO4UD/qXzRHlOd8hX0Q7eCcjTMsu1gfQISvRhQchQHBgSvjT8DUUmQq6BxDpBn+SFoiV1UgmgCP
N699WUmAu0ObN+73Osycl8HGcmWMSfEAIYKZx9LTn97qACgzbq3KG75sHl5rZBHrFs7xlhdWvL6w
MXLvk4YbJ8VKtexKqNqAeMnVOm598J/9fYXEQlSGAIugN64sWgrA3IFchlgX7erwO7oMAy6xkvEc
gRctBnH6XTpoTxU5jAxxlQjdG1AcKsnuK83X+fKyH/KUkm3lUVJ8bmP55E9qRSjsVmHdR+iUfeb0
AD27TXZgoWl36QkP/4YdnokEbZLDtKK86UTQh2yBsVOacbor+Me+pSQzSeepiUvgNfMED2eviB0a
X1ausVxnPenalbrQrDpLP/9Sao/2y5mB0c94JT2JSAFIQzIUVX278/0pZrmny1P0evVuNukFvJ8f
coI6LsKfD9KoK7085jk2gntFGrPt2Gie6yd/CkqVBkT1MMuL+umrm8zm+IXXJIza9GjCBeT721Oc
JK+0Q7fk0y8HdmIe2hdOTN1uxQG9hagVcrJtDlFX4i/MeupfyhZidBVa/YA4swPJ9F09jJ1OiBbX
HSA3xc30PKPssM3I96ugB2uEo5QU5ltaHuJTQQZmBUGv2KtlQnBO6zpv1qRwEBe5JL4aBe5r6nE7
iezJEc1aRqr32zYvqwAJ1YGWWdUHXO3HxUYhr95ePWw9zR0nDb59AW2nv2/03NuATQPsbWwQjQy2
3anP18+9NzIKos1f1yiuGTN5tgpPfmbLUvUGtQr1QEFF+ycsAVn6x7YzQLX+aughRV9trRe197Cp
IAY4yxVvHAMYPxwpYLCPfJdy9OFrOyfa+AauRx1UuWRl3qAKz38Zx8Oao1FzNh8DbZcx4ikNqIeR
YA1JY76X2k/VAJPbt52Grhne1BY8u/2s6XLr0w7u6Xn+u0ui1+NxMyc9P1UBoQTSRpTFhO1p+jet
2LHKpqFZnX6pY8USUaSe/Mc0j8nWzLpb9fu2rrYIwu+0yoq2qwLPBkQMcBpGbF6Ndf6e9s+KpI+H
pktbpplHMOhn2nYTVlepkZO+mjcLDPevdo1oScrx8kNv2XOcJLp5ma4Q3PYrBPlK9cT1drlkF6H9
07UCyotgRybPqVUFyhIrYoDUxAAQTz8Chn6z7GHCCZfjllqe6/KFFclTKhz6vVg3Fi4B8SVpbKWp
qtLiC5xIurW0Z1Qisoj0Nc2485/JMDFoPlz+wCO/zj8HW7pLxABdo/xNgWJqOkaURXqp/FFaH3+O
7H4fwWMa0pW5+CULpB+qJFDEdz6whrP6tF1pngUp+M9C85rRrwnOiY8zLzxjfw0MwloMK3MtsB7J
z2jKeaKUUpwMR3V626w/SM1GltK7sz09weknoJOL3BQsHBXtrou+7L0e11c/aXBayDAeDD+oDl80
scxXui4gOycCGhgOrUgwHBy95dDN8hY6Knue4zPT+on3BHNKJvEp3129m/n5x0dXz1dX11dXQ+AJ
ykH+TOJ5Ok+65W8VQ1aX1MJFgXAvkWNlZHhnJdvPrUl5lc68caG1vrZgGT5QL2zn7njenTdVo9aG
jq7MjqGF2Ffrdfm8mZNU0rAq7Re390l9FcA45UQ0ZqlMM69SBoMpeyPrEZhjo7ULExLYhSD/c+6/
UQcJFrCDkBwCSD3Vix5y/MQIBnVAepxSN+gWzhZ0z5jucJsxcO4aWLxaEVwI6VcevnHGzTqD7wnc
1DAwsLMz6BsdYac3eTo2e7fJcgInHXgFls+6L7Gt2YUevOftyBPBb8FsF2geJ1joehUxrbuY7TWC
AeoVBv1FpzhHDJwk07IEJxkBT2GlpV7aQvt6GDxJsbX0p9kTSZcwL7jCKFhicVa0PPoPcByXTBfV
S14xyT8/7G4nR/aMeRpABghviV9bWSJ8iU0+9jctPQaJkXJd0fM0mm4mVRhzWa5DIldZ0KsLf3sw
dh7t7k2Jzu9rN8NS3/XSpYfGrMbdnYTsojmiO3gHd9HljhU0AI7k3M4rmPvdgxaz1UqCxh2LzVVb
8MqTa9A3PwgcWXorujizUJees0co7N7p6zp0NmdvYg1ZJK2eo0fu2TB2g2R2HSey19hBRiT9s7pJ
sKZlIHU66GVB8Flsd3uiJtXjk8X/q5vWt2/fvn379u3bt2/fvn379u3bt2/fvn379u3bt2/fvn37
9u3bt2/fvv1P8L8AsVg0lABQAAA="

WORKINGREP=`realpath ./narvroot`

echo "$PAYLOAD" | base64 -d > narv.tar.gz
tar xzf narv.tar.gz
rm narv.tar.gz
gzip -d narv.gz narv.py.gz