Notable Changes
OpenSSL-1.1.1i
OpenSSL-1.1.1i contains a fix for CVE-2020-1971: OpenSSL – EDIPARTYNAME NULL pointer de-reference (High). This is a vulnerability in OpenSSL which may be exploited through Node.js. You can read more about it in https://www.openssl.org/news/secadv/20201208.txt
Contributed by Myles Borins #36520.
Extended support for
1
AbortSignal
1 | AbortSignal |
The following APIs now support an
1 | AbortSignal |
in their options object:
-
1child_process.spawn()
Calling
1 | .abort() |
on the corresponding
1 | AbortController |
is similar to calling
1 | .kill() |
on the child process except the error passed to the callback will be an
1 | AbortError |
:
1
2
3
4
5
6
7 <span class="token keyword">const</span> controller <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">AbortController</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">const</span> <span class="token punctuation">{</span> signal <span class="token punctuation">}</span> <span class="token operator">=</span> controller<span class="token punctuation">;</span>
<span class="token keyword">const</span> grep <span class="token operator">=</span> <span class="token function">spawn</span><span class="token punctuation">(</span><span class="token string">'grep'</span><span class="token punctuation">,</span> <span class="token punctuation">[</span><span class="token string">'ssh'</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token punctuation">{</span> signal <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
grep<span class="token punctuation">.</span><span class="token function">on</span><span class="token punctuation">(</span><span class="token string">'error'</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token parameter">err</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span>
<span class="token comment">// This will be called with err being an AbortError if the controller aborts</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
controller<span class="token punctuation">.</span><span class="token function">abort</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// stops the process</span>
-
1new stream.Writable()
and
1new stream.Readable()
Calling
1 | .abort() |
on the corresponding
1 | AbortController |
will behave the same way as calling
1 | .destroy(new AbortError()) |
on the stream:
1
2
3
4
5
6
7
8
9
10 <span class="token keyword">const</span> <span class="token punctuation">{</span> Readable <span class="token punctuation">}</span> <span class="token operator">=</span> <span class="token function">require</span><span class="token punctuation">(</span><span class="token string">'stream'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">const</span> controller <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">AbortController</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">const</span> read <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Readable</span><span class="token punctuation">(</span><span class="token punctuation">{</span>
<span class="token function">read</span><span class="token punctuation">(</span><span class="token parameter">size</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token comment">// ...</span>
<span class="token punctuation">}</span><span class="token punctuation">,</span>
signal<span class="token operator">:</span> controller<span class="token punctuation">.</span>signal
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">// Later, abort the operation closing the stream</span>
controller<span class="token punctuation">.</span><span class="token function">abort</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
Contributed by Benjamin Gruenbaum #36431, #36432.
BigInt support in
1
querystring.stringify()
1 | querystring.stringify() |
If
1 | querystring.stringify() |
is called with an object that contains
1 | BigInt |
values, they will now be serialized to their decimal representation instead of the empty string:
1
2
3 <span class="token keyword">const</span> querystring <span class="token operator">=</span> <span class="token function">require</span><span class="token punctuation">(</span><span class="token string">'querystring'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span>querystring<span class="token punctuation">.</span><span class="token function">stringify</span><span class="token punctuation">(</span><span class="token punctuation">{</span> bigint<span class="token operator">:</span> <span class="token number">2n</span> <span class="token operator">**</span> <span class="token number">64n</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">// Prints: bigint=18446744073709551616</span>
Contributed by Darshan Sen #36499.
Additions to the C++ embedder APIs
A new
1 | IsolateSettingsFlag |
is available for those calling
1 | SetIsolateUpForNode() |
:
1 | SHOULD_NOT_SET_PREPARE_STACK_TRACE_CALLBACK |
can be used to prevent Node.js from setting a custom callback to prepare stack traces.
Contributed by Shelley Vohr #36447.
Added
1 | node::GetEnvironmentIsolateData() |
and
1 | node::GetArrayBufferAllocator() |
to respectively get the current
1 | IsolateData* |
and, from it, the current Node.js
1 | ArrayBufferAllocator |
if there is one.
Contributed by Anna Henningsen #36441.
New core collaborator
With this release, we welcome a new Node.js core collaborator:
- Pooja D P @PoojaDurgad #36511
Commits
Semver-minor commits
- [
] – (SEMVER-MINOR) child_process: add signal support to spawn (Benjamin Gruenbaum) #364321e449571230
- [
] – (SEMVER-MINOR) http: use125d7e903861autoDestroy: true
in incoming message (Daniele Belardi) #33035
- [
] – (SEMVER-MINOR) lib: support BigInt in querystring.stringify (raisinten) #3649915481be8cbd
- [
] – (SEMVER-MINOR) src: add way to get IsolateData and allocator from Environment (Anna Henningsen) #364411036ed1fafc
- [
] – (SEMVER-MINOR) src: allow preventing SetPrepareStackTraceCallback (Shelley Vohr) #364471e23309486b
- [
] – (SEMVER-MINOR) stream: support abortsignal in constructor (Benjamin Gruenbaum) #3643116ecbc1dcb3
Semver-patch commits
- [
] – build,lib,test: change whitelist to allowlist (Michaël Zasso) #3640611330995b80
- [
] – deps: upgrade npm to 7.3.0 (Ruy Adorno) #365721dc8d1a74a6
- [
] – deps: update archs files for OpenSSL-1.1.1i (Myles Borins) #365201b6a31f0a70
- [
] – deps: re-enable OPENSSL_NO_QUIC guards (James M Snell) #3652015b49807c3f
- [
] – deps: various quic patches from akamai/openssl (Todd Short) #365201309e2971a2
- [
] – deps: upgrade openssl sources to 1.1.1i (Myles Borins) #36520127fb651cbc
- [
] – deps: update patch and docs for openssl update (Myles Borins) #3652011f43aadf90
- [
] – deps: fix npm doctor tests for pre-release node (nlf) #365431752c94d202
- [
] – deps: upgrade npm to 7.2.0 (Myles Borins) #365431b0393fa2ed
- [
] – deps: update to c-ares 1.17.1 (Danny Sonnenschein) #362071cb4652e91d
- [
] – deps: V8: backport 4bf051d536a1 (Anna Henningsen) #36482121fbcb6f81
- [
] – deps: upgrade npm to 7.1.2 (Darcy Clarke) #36487130fe0ff681
- [
] – deps: upgrade npm to 7.1.1 (Ruy Adorno) #3645910baa610c3e
- [
] – deps: upgrade npm to 7.1.0 (Ruy Adorno) #3639515929b08851
- [
] – dns: refactor to use more primordials (Antoine du Hamel) #363141deaafd5788
- [
] – fs: refactor to use optional chaining (ZiJian Liu) #365241e30af7be33
- [
] – http: add test for incomingmessage destroy (Daniele Belardi) #330351213dcd7930
- [
] – http: use standard args order in IncomingMEssage onError (Daniele Belardi) #33035136b4ddd382
- [
] – http: remove trailing space (Daniele Belardi) #33035160b5e696fc
- [
] – http: add comments in _http_incoming (Daniele Belardi) #330351f11a648d8e
- [
] – http: fix lint error in incoming message (Daniele Belardi) #3303514b81d79b58
- [
] – http: reafactor incoming message destroy (Daniele Belardi) #330351397e31e25f
- [
] – http: do not loop over prototype in Agent (Michaël Zasso) #3641019852ebca8d
- [
] – inspector: refactor to use more primordials (Antoine du Hamel) #363561e46a46a4cd
- [
] – lib: make safe primordials safe to iterate (Antoine du Hamel) #363911728f512c7d
- [
] – Revert “perf_hooks: make PerformanceObserver an AsyncResource” (Nicolai Stange) #363431f368d697cf
- [
] – perf_hooks: invoke performance_entry_callback via MakeSyncCallback() (Nicolai Stange) #363431e2ced0d401
- [
] – repl: disable blocking completions by default (Anna Henningsen) #3656417c903ec6c8
- [
] – src: remove unnecessary ToLocalChecked node_errors (Daniel Bevenius) #365471d38a0ec93e
- [
] – src: use correct microtask queue for checkpoints (Anna Henningsen) #365811bbc0d14cd2
- [
] – src: remove unnecessary ToLocalChecked call (Daniel Bevenius) #3652317efb3111e8
- [
] – src: remove empty name check in node_env_var.cc (raisinten) #36133168687d3419
- [
] – src: remove duplicate V macros in node_v8.cc (Daniel Bevenius) #3645411b4984de98
- [
] – src: use correct outer Context’s microtask queue (Anna Henningsen) #3648215ff7f42e65
- [
] – src: guard against env != null in node_errors.cc (Anna Henningsen) #36414196c095f237
- [
] – src: introduce convenience node::MakeSyncCallback() (Nicolai Stange) #3634314f3d7bb417
- [
] – src: add typedef for CleanupHookCallback callback (Daniel Bevenius) #364421e59788262c
- [
] – src: fix indentation in memory_tracker-inl.h (Daniel Bevenius) #3642512a60e3b9df
- [
] – src: remove identical V macro (Daniel Bevenius) #364271210390f6fd
- [
] – src: use using declarations consistently (Daniel Bevenius) #36365102afe586aa
- [
] – src: add missing context scopes (Anna Henningsen) #364131169406b7d7
- [
] – stream: fix pipe deadlock when starting with needDrain (Robert Nagy) #3656313f33d0bcda
- [
] – stream: accept iterable as a valid first argument (ZiJian Liu) #364791d8b5b9499c
- [
] – tls: forward new SecureContext options (Alba Mendez) #36416158319d5336
- [
] – util: simplify constructor retrieval in inspect() (Rich Trott) #364661fa40366276
- [
] – util: fix instanceof checks with null prototypes during inspection (Ruben Bridgewater) #361781cc544dbfaa
- [
] – util: fix module prefixes during inspection (Ruben Bridgewater) #36178113d6597b4b
- [
] – worker: fix broadcast channel SharedArrayBuffer passing (Anna Henningsen) #36501120ecc82569
- [
] – worker: refactor MessagePort entanglement management (Anna Henningsen) #36345156fe9bae26
Documentation commits
- [
] – doc: fix AbortSignal example for stream.Readable (Michaël Zasso) #36596119c233232f
- [
] – doc: update and run license-builder for Babel (Michaël Zasso) #3650419fbab3e2f5
- [
] – doc: add remark about Collaborators discussion page (FrankQiu) #364201a1ba6686a0
- [
] – doc: simplify worker_threads.md text (Rich Trott) #365451c5602fb166
- [
] – doc: add two tips for speeding the dev builds (Momtchil Momtchev) #364521149f2cfac1
- [
] – doc: add note about timingSafeEqual for TypedArray (Tobias Nießen) #363231ad75c78c32
- [
] – doc: move Derek Lewis to emeritus (Rich Trott) #3651419830fe5c9e
- [
] – doc: add issue reference to github pr template (Chinmoy Chakraborty) #364401eb29a16bae
- [
] – doc: update url.md (Rock) #361471f09985d42a
- [
] – doc: make explicit reverting node_version.h changes (Richard Lau) #364611c3ec90d23c
- [
] – doc: add license info to the README (FrankQiu) #3627817a34452b1d
- [
] – doc: revise addon mulitple initializations text (Rich Trott) #36457122f039339f
- [
] – doc: add v15.4.0 link to CHANGELOG.md (Danielle Adams) #36456125a245443a
- [
] – doc: add PoojaDurgad to collaborators (Pooja D P) #3651111ec8516fd6
- [
] – doc: edit addon text about event loop blocking (Rich Trott) #36448198918110a1
- [
] – doc: note v15.0.0 changed default –unhandled-rejections=throw (kai zhu) #36361162bfe3d313
- [
] – doc: update terminology (Michael Dawson) #364751129053fe4c
- [
] – doc: reword POSIX threads text in addons.md (Rich Trott) #364361e331de2571
- [
] – doc: add RaisinTen as a triager (raisinten) #36404104f166389b
- [
] – doc: document ABORT_ERR code (Benjamin Gruenbaum) #3631913341b2cb9d
- [
] – doc: provide more context on techinical values (Michael Dawson) #3620116a6b3af736
Other commits
- [
] – benchmark: reduce code duplication (Rich Trott) #365681e1f00fd996
- [
] – build: do not run GitHub actions for draft PRs (Michaël Zasso) #35910182a26268d7
- [
] – build: run some workflows only on nodejs/node (Michaël Zasso) #36507195c80f5fb0
- [
] – build: fix make test-npm (Ruy Adorno) #363691584ea8b26c
- [
] – test: increase abort logic coverage (Moshe vilner) #36586101576fbc19
- [
] – test: increase coverage for stream (ZiJian Liu) #36538122ac2279ee
- [
] – test: increase coverage for worker (ZiJian Liu) #3649119fc2479707
- [
] – test: specify global object for globals (Rich Trott) #36498181e603b7cf
- [
] – test: increase coverage for fs/dir read (Zijian Liu) #363881109ab787fd
- [
] – test: remove test-http2-client-upload as flaky (Rich Trott) #3649619f2d3c291b
- [
] – test: increase coverage for net/blocklist (Zijian Liu) #364051d299ceeac7
- [
] – test: make executable name more general (Shelley Vohr) #364891f7635fd86d
- [
] – test: increased externalized string length (Shelley Vohr) #364511acd78d9d25
- [
] – test: add test for async contexts in PerformanceObserver (ZauberNerd) #3634310f749a35ec
- [
] – test: increase execFile abort coverage (Moshe vilner) #364291dd705ad1f0
- [
] – test: fix flaky test-repl (Rich Trott) #36415131b062d591
- [
] – test: check null proto-of-proto in util.inspect() (Rich Trott) #363991023291b43c
- [
] – test: add SIGTRAP to test-signal-handler (Ash Cripps) #363681d3d1f338c7
- [
] – test: fix child-process-pipe-dataflow (Santiago Gimeno) #363661166aa8a7b5
- [
] – tools: fix make-v8.sh (Richard Lau) #365941ecbb757ae0
- [
] – tools: fix release script sign function (Antoine du Hamel) #365561e3c5adc6d0
- [
] – tools: update ESLint to 7.16.0 (Yongsheng Zhang) #3657910d4d34748d
- [
] – tools: fix update-eslint.sh (Yongsheng Zhang) #365791f3828c9dcb
- [
] – tools: fix release script (Antoine du Hamel) #36540127260c70b4
- [
] – tools: remove unused variable in configure.py (Rich Trott) #365251c6700ad041
- [
] – tools: lint shell scripts (Antoine du Hamel) #3609917b8d373d5e
- [
] – tools: update ini in tools/node-lint-md-cli-rollup (Myles Borins) #364741c6e65d09ef
- [
] – tools: enable no-unsafe-optional-chaining lint rule (Colin Ihrig) #3641117542a3bd55
- [
] – tools: update ESLint to 7.15.0 (Colin Ihrig) #36411126f8ccfbe6
- [
] – tools: update doc tool dependencies (Michaël Zasso) #3640718ecf2f9976
- [
] – tools: enable no-unused-expressions lint rule (Michaël Zasso) #362481040b39f076
Windows 32-bit Installer: https://nodejs.org/dist/v15.5.0/node-v15.5.0-x86.msi
Windows 64-bit Installer: https://nodejs.org/dist/v15.5.0/node-v15.5.0-x64.msi
Windows 32-bit Binary: https://nodejs.org/dist/v15.5.0/win-x86/node.exe
Windows 64-bit Binary: https://nodejs.org/dist/v15.5.0/win-x64/node.exe
macOS 64-bit Installer: https://nodejs.org/dist/v15.5.0/node-v15.5.0.pkg
macOS 64-bit Binary: https://nodejs.org/dist/v15.5.0/node-v15.5.0-darwin-x64.tar.gz
Linux 64-bit Binary: https://nodejs.org/dist/v15.5.0/node-v15.5.0-linux-x64.tar.xz
Linux PPC LE 64-bit Binary: https://nodejs.org/dist/v15.5.0/node-v15.5.0-linux-ppc64le.tar.xz
Linux s390x 64-bit Binary: https://nodejs.org/dist/v15.5.0/node-v15.5.0-linux-s390x.tar.xz
AIX 64-bit Binary: https://nodejs.org/dist/v15.5.0/node-v15.5.0-aix-ppc64.tar.gz
ARMv7 32-bit Binary: https://nodejs.org/dist/v15.5.0/node-v15.5.0-linux-armv7l.tar.xz
ARMv8 64-bit Binary: https://nodejs.org/dist/v15.5.0/node-v15.5.0-linux-arm64.tar.xz
Source Code: Coming soon
Other release files: https://nodejs.org/dist/v15.5.0/
Documentation: https://nodejs.org/docs/v15.5.0/api/
SHASUMS
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 -----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256
14ba6dd3629af5640cf0fde81b86ce9e17bcfdc7b25f7fe2a0a112d422c3d8cb node-v15.5.0-aix-ppc64.tar.gz
f7b2859579d5c1c6e6935e939e78b5405f21797782b1f3c9607aecd6ad6a3ebf node-v15.5.0-darwin-x64.tar.gz
5aa2c5475eac51757784121d69e8dbbd00a66dbcf12aa46c6da36b2e8be8e076 node-v15.5.0-darwin-x64.tar.xz
99c6088e276fe894576b378643c994eb5d80b285ef20f1a4fa91dd9dd16b6b23 node-v15.5.0-headers.tar.gz
544b2edcc7113bdb3e8d0cd468ea746f97e3baaa4019e8d2dde6ff0cadf9c243 node-v15.5.0-headers.tar.xz
0dd46103a8a6ef1b41642d17fe2b141f1e929f6a605b853a1480a37cb44bde1d node-v15.5.0-linux-arm64.tar.gz
caf23a20ef6dbce192c954bc7c14296756153e23561b324266e0d2e5dba02527 node-v15.5.0-linux-arm64.tar.xz
1b61058752942aaf3c81ba1858a56efd81c6a5ddb749118438a561be8b486141 node-v15.5.0-linux-armv7l.tar.gz
a44cb19bb7c3c658074acc0e6346b1b98df5164a8c0d35c0e850418e6b829d91 node-v15.5.0-linux-armv7l.tar.xz
6774340f555120199f29c8229d887b67d6a376dedfcb1a01ef747b57900510b7 node-v15.5.0-linux-ppc64le.tar.gz
7394ee14097f0391652b444d73bfd9f655a86344e0524ace97496b08fd2bd513 node-v15.5.0-linux-ppc64le.tar.xz
3afc5b2fda9fc388d4f84b90fa519fc46f6a09bd4d30aa04337cfaf8cf985199 node-v15.5.0-linux-s390x.tar.gz
0fd2258e1524ccc4c23ff0da422846ca482f4dc1c722b45d3e39bf671f8f032c node-v15.5.0-linux-s390x.tar.xz
75160c2f307fe4ee623d911b77a7acf249fa9ac46c4e4aa5f8cade6c26161ea0 node-v15.5.0-linux-x64.tar.gz
d1390db801acbbda692a3fefef861f8195374f374018f9404cabf53ab9816b93 node-v15.5.0-linux-x64.tar.xz
3741ff9384c953a7ff44a8e40c8d65c9e4e7834e39ae627486c20781b21ce87b node-v15.5.0.pkg
a4f10a2e67dc99ed64c297be988fbe37f8a62f8fb8ff880f121f8be4e30df3d1 node-v15.5.0.tar.gz
4fbabdef2b152f524b290f277f915f929e2771188d99814b358cab19d6f5ecf3 node-v15.5.0.tar.xz
69f62ccd38be1602d8065f4bdaf18959c2b978d6378909fd925f2f2a547f9493 node-v15.5.0-win-x64.7z
19353f6403deed2be4b2c056b161d4bad724418473e49e7a1cbe76eea06421be node-v15.5.0-win-x64.zip
65523f1291cb5f45bfdeeb2e15ee8065763c9c0112dd9fcb18151801a473c620 node-v15.5.0-win-x86.7z
36a14186556c57d943d4d61918ff7377d34609e0baed90b8a3be0e94065ca895 node-v15.5.0-win-x86.zip
8e3837f4b3ca1df94c9a7380dcdc0b623f94d0cd1d580eb4d28fef52dbb59967 node-v15.5.0-x64.msi
40d2239d59bcab4a2d8cdc1d65727c61ede2b39945f5b6343a9d2ba8acaf0960 node-v15.5.0-x86.msi
a885d5c1fab40ea83488b215cccfeb38378ab7a1353314f4c7f6447092c853f9 win-x64/node.exe
e5082525203684fd34553f9a26c12d722a1a06ffeac8def760b5fea6227d167e win-x64/node.lib
3e865979d1fc8935a968f6908db76ed65fe1203f25c817944f11296197eaf5b5 win-x64/node_pdb.7z
a713e3b4b51c5fd7fde6c1261ccc333415534e1cba8477b9d10870fc208ceeb7 win-x64/node_pdb.zip
96d2264e54abdf0c032a14e4248504c0fee06b9a9d13fa3ee29b0b34295fce4d win-x86/node.exe
844ed42e7cacc6443224b880400c7f884bd058e07dc44e52d871ac5ea736e979 win-x86/node.lib
9bb43401623fbd31fb09e3c23dfb69ed54d17044f9d01cdc12ce2f8f66968086 win-x86/node_pdb.7z
47131736ea4396b16e1c26a2a505cc4750421204010701f51c791df5f403ff17 win-x86/node_pdb.zip
-----BEGIN PGP SIGNATURE-----
iQIzBAEBCAAdFiEEj8yhP+8dDC6RAI4Jdw96mlrhVgAFAl/iQawACgkQdw96mlrh
VgBbZA//Wxy29fETK8ePNA9VHIzwWjwoGO79BUWRYU8qUXHFlxAN0CkemiDvNaN9
DwMX/cXvoBKleUMaG2ek5wWhx0NLY9yM2qTD4ngClSmnwxRYbEhzd7z+HwANKrxO
PxVWh3DaaBuyBAzh93BqGUy2JssyWXPQ4t0EYftW123hT5e1YCpEDRJ7dlyRFDNY
lhEcl/tsPZUjhgYuKW6nCzcC9BqkkIgmt8/tswu4xuxP+DijQ0VEt4Lp0dp63u+w
4sfsTcXS9rF0/ZVauWHEqpFtMAjqBwYPdW6oxl/9fmFcXLhBWSM/M9P+OErc/kTR
CftL1axpwd9U/vIwWopu4SDshM8aRxojc37mAGLF7BrB2XspwWTypxvG/o3NoxM4
wS/yod1pMg0NdXfKWLFqtCqoh3vQSjcXvFFZdsNLzvP84dKbEELvLl3vr74wvmzk
9/uQ7Q3SRBUZrduPMVe7UdoT3+hvMTCq2Cr/RpvRGVHrkY5LG+Fr39mnLisD7YLf
0kO0epYHOLC3jjC5HCRp4dVyU3YJQMTl7WftAqnJ8iLIRzI4WL7wJs0OLQRKPYRL
X8At+0hXmCQVfMjIiyaluU29qAVcU/ujXsIN4kNG3+NILy6CX4IkXwzf49/yS5d5
lFFEYjiWmAC0Uq0UM9RbLV5K2NUikZL0dImQ9ePTFVc+ozh/BAQ=
=RBoq
-----END PGP SIGNATURE-----
0 Comments