原文:https://nodejs.org/en/blog/release/v5.0.0/
你好Node.js v5!没错,我们刚刚才发布了Node.js v4,但这次的新版本并不意味着v4版本要离我们而去。事实上,v4版本比v5版本将继续保持活跃更长的时间。
按照我们新的LTS计划,Node.js v4 Argon将继续被支持30个月,直到2018年4月。随着新的主要版本(v6)的在2016年4月的发布,这个新的Node.js版本(v5)将仅被支持8个月。Node.js v6将最终成为新的LTS版本,有着和v4一样的支持时间。通过这种方式,我们每6个月就有一个新的稳定版本,
如果你对我们的LTS计划较陌生,请阅读以了解它将怎样工作,以令你可以做出该使用哪个版本的正确决定。
决定采用哪个版本的通用规则是:
- 如果你需要稳定并且有复杂的产品环境,保持当前,或升级到Node.js v4.2.x。
- 如果你不用分发你的环境,能快速,轻松地升级版本,想玩转最新的特性,那么升级到Node.js v5.x。
下面的发布说明中标注了跳跃性升级到v5版本的主要破坏性改动。注意的是因为这个Node.js的新版本搭载了一个V8的新版本,你将需要重新编译所有已经安装的原生模块,否则加载原生模块时你将收到一个运行时错误。使用npm rebuild
或者简单的删除你的node_modules
目录然后执行npm install
即可。
主要改动
- buffer: (Breaking) 从
Buffer
中移除'raw’
和'raws'
编码类型,它们已经被弃用很长时间了。 (Sakthipriyan Vairamani) #2859. - console: (Breaking) 现在
console.time()
报告的值添加了3位精度小数 (Michaël Zasso) #3166. -
fs:
- 现在
fs.readFile*()
、fs.writeFile*()
和fs.appendFile*()
也接受一个文件描述符作为它们的第一个参数 (Johannes Wüller) #3163. - (Breaking) 在
fs.readFile()
中,如果一个编码被指定并且内部的toString()
失败的话,这个错误不再_thrown_出来,但会传递给回调函数。 (Evan Lucas) #3485. - (Breaking) 在
fs.read()
中 (使用fs.read(fd, length, position, encoding, callback)
形式),如果内部的toString()
失败,错误不再直接_thrown_,而是传递给回调函数。 (Evan Lucas) #3503.
- 现在
-
http:
-修复一个pipeliend的http请求失速的bug (Fedor Indutny) #3342.- (Breaking) When parsing HTTP, don't add duplicates of the following headers:
Retry-After
,ETag
,Last-Modified
,Server
,Age
,Expires
. This is in addition to the following headers which already block duplicates:Content-Type
,Content-Length
,User-Agent
,Referer
,Host
,Authorization
,Proxy-Authorization
,If-Modified-Since
,If-Unmodified-Since
,From
,Location
,Max-Forwards
(James M Snell) #3090. - (Breaking) The
callback
argument toOutgoingMessage#setTimeout()
must be a function or aTypeError
is thrown (James M Snell) #3090. - (Breaking) 现在HTTP 方法和header名必须满足RFC 2616 "token" 规则, a list of allowed characters that excludes control characters and a number of separator characters. Specifically, methods and header names must now match
/^[a-zA-Z0-9_!#$%&'*+.^`|~-]+$/
or aTypeError
will be thrown (James M Snell) #2526.
- (Breaking) When parsing HTTP, don't add duplicates of the following headers:
-
node:
- npm: 从2.14.7升级到3.3.6,更多细节参见https://github.com/npm/npm/releases/tag/v3.3.6。对npm而言这是一个主要的版本,它有大量重要的改进。主要改动列表请参见原始的npm 3.0.0发布说明 (Rebecca Turner) #3310.
- src: (Breaking) 改动
NODE_MODULE_VERSION
从46
到47
,这是必要的,因为v8的升级。原生模块需要重新编译。 (Rod Vagg) #3400. - timers: Attempt to reuse the timer handle for
setTimeout().unref()
. This fixes a long-standing known issue where unrefed timers would perviously holdbeforeExit
open (Fedor Indutny) #3407. -
tls:
-
util:
- (Breaking)
util.p()
已经弃用多年,现在已经被移除。 (Wyatt Preul) #3432. - (Breaking) 现在
util.inherits()
能和ES6的classes工作了。This is considered a breaking change because of potential subtle side-effects caused by a change from directly reassigning the prototype of the constructor usingctor.prototype = Object.create(superCtor.prototype, { constructor: { ... } })
to usingObject.setPrototypeOf(ctor.prototype, superCtor.prototype)
(Michaël Zasso) #3455.
- (Breaking)
-
v8: (Breaking) v8从4.5.103.35升级到4.6.85.25 (Ali Ijaz Sheikh) #3351.
- zlib: Decompression now throws on truncated input (e.g. unexpected end of file) (Yuval Brik) #2595.
Known issues
- Surrogate pair in REPL can freeze terminal. #690
- Calling
dns.setServers()
while a DNS query is in progress can cause the process to crash on a failed assertion. #894 -
url.resolve
may transfer the auth portion of the url when resolving between two full hosts, see #1435. - Unicode characters in filesystem paths are not handled consistently across platforms or Node.js APIs. See #2088, #3401 and #3519.
Commits
- [
6a04cc0a43
] - buffer: fix value check for writeUInt{B,L}E (Trevor Norris) #3500 - [
1a41feb559
] - buffer: don't CHECK on zero-sized realloc (Ben Noordhuis) #3499 - [
5f6579d366
] - (SEMVER-MAJOR) buffer: remove raw & raws encoding (Sakthipriyan Vairamani) #2859 - [
70fca2a81e
] - build: Updates for AIX npm support - part 1 (Michael Dawson) #3114 - [
b36b4f385a
] - build: rectify --link-module help text (P.S.V.R) #3379 - [
a89eeca590
] - console: rename argument of time and timeEnd (Michaël Zasso) #3166 - [
870108aaa8
] - (SEMVER-MAJOR) console: sub-millisecond accuracy for console.time (Michaël Zasso) #3166 - [
0a43697ce8
] - deps: backport 010897c from V8 upstream (Ali Ijaz Sheikh) #3520 - [
8c0318ce8d
] - deps: backport 8d6a228 from the v8's upstream (Fedor Indutny) #3549 - [
2974debc6e
] - deps: update V8 to 4.6.85.28 (Michaël Zasso) #3484 - [
f76af49b13
] - deps: fix upgrade to npm 3.3.6 (Rebecca Turner) #3494 - [
32b51c97ec
] - deps: upgrade npm to 3.3.6 (Rebecca Turner) #3310 - [
770cd229f9
] - deps: upgrade V8 to 4.6.85.25 (Ali Ijaz Sheikh) #3351 - [
972a0c8515
] - deps: backport 0d01728 from v8's upstream (Fedor Indutny) #3351 - [
1fdec65203
] - deps: improve ArrayBuffer performance in v8 (Fedor Indutny) #3351 - [
5cd1fd836a
] - deps: backport 56a0a79 from V8 upstream (Julien Gilli) #3351 - [
7fb128d8df
] - deps: cherry-pick backports to V8 (Michaël Zasso) #3351 - [
d8011d1683
] - (SEMVER-MAJOR) deps: upgrade V8 to 4.6.85.23 (Michaël Zasso) #3351 - [
a334ddc467
] - Revert "deps: backport 03ef3cd from V8 upstream" (Ali Ijaz Sheikh) #3237 - [
6fff47ffac
] - deps: backport 03ef3cd from V8 upstream (Ali Ijaz Sheikh) #3165 - [
680dda8023
] - dns: remove nonexistant exports.ADNAME (Roman Reiss) #3051 - [
239ad899a3
] - doc: add LTS info to COLLABORATOR_GUIDE.md (Myles Borins) #3442 - [
5e76587fdf
] - doc: createServer's key option can be an array (Sakthipriyan Vairamani) #3123 - [
0317c880da
] - doc: add TSC meeting minutes 2015-10-21 (Rod Vagg) #3480 - [
cd245b12e0
] - doc: clarify API buffer.concat (Martii) #3255 - [
ff9ef893fd
] - doc: add TSC meeting minutes 2015-10-14 (Rod Vagg) #3463 - [
605c5a7754
] - doc: clarify the use ofoption.detached
(Kyle Smith) #3250 - [
cf75a175e5
] - doc: more use-cases for promise events (Domenic Denicola) #3438 - [
1b75d4bda3
] - doc: update WORKING_GROUPS.md - add missing groups (Michael Dawson) #3450 - [
c658de2f99
] - doc: add TSC meeting minutes 2015-09-30 (Rod Vagg) #3235 - [
d0b8c5d3a4
] - doc: add TSC meeting minutes 2015-10-07 (Rod Vagg) #3364 - [
b483afcb20
] - doc: binary encoding is not deprecated (Trevor Norris) #3441 - [
b607366a1c
] - doc: add information about Assert behavior and maintenance (Rich Trott) #3330 - [
086103b32e
] - doc: show keylen in pbkdf2 as a byte length (calebboyd) #3334 - [
f6ebc8277b
] - doc: reword description of console.time (Michaël Zasso) #3166 - [
503f279527
] - doc: fix indent in tls resumption example (Roman Reiss) #3372 - [
dae9fae0fe
] - doc: label v4.2.1 as LTS in changelog heading (Phillip Johnsen) #3360 - [
4fc638804c
] - doc: update V8 options in man page (Michaël Zasso) #3351 - [
a441aa6e1d
] - doc: update WORKING_GROUPS.md to include Intl (Steven R. Loomis) #3251 - [
81503e597b
] - doc: fix typo in changelog (Timothy Gu) #3353 - [
3ef2e4acf3
] - doc: fix typos in changelog (reggi) #3291 - [
b9279aa193
] - doc: remove old note, 'cluster' is marked stable (Balázs Galambosi) #3314 - [
cdfa271164
] - doc: update AUTHORS list (Rod Vagg) - [
47b06f6bb1
] - docs: add missing shell option to execSync (fansworld-claudio) #3440 - [
4c9abbd1bb
] - fs: reduced duplicate code in fs.write() (ronkorving) #2947 - [
2bb147535e
] - (SEMVER-MAJOR) fs: don't throw in read if buffer too big (Evan Lucas) #3503 - [
7added3b39
] - (SEMVER-MAJOR) fs: pass err to callback if buffer is too big (Evan Lucas) #3485 - [
5e0759f6fd
] - (SEMVER-MINOR) fs: add file descriptor support to *File() funcs (Johannes Wüller) #3163 - [
d1a2e5357e
] - gitignore: don't ignore debug source directory in V8 (Michaël Zasso) #3351 - [
ab03635fb1
] - http: fix stalled pipeline bug (Fedor Indutny) #3342 - [
e655a437b3
] - (SEMVER-MAJOR) http: do not allow multiple instances of certain response headers (James M Snell) #3090 - [
0094a8dad7
] - (SEMVER-MAJOR) http: add callback is function check (James M Snell) #3090 - [
6192c9892f
] - (SEMVER-MAJOR) http: add checkIsHttpToken check for header fields (James M Snell) #2526 - [
c9786bb680
] - (SEMVER-MAJOR) http{s}: don't connect to localhost on invalid URL (Sakthipriyan Vairamani) #2967 - [
1929d5be73
] - lib: fix cluster handle leak (Rich Trott) #3510 - [
97d081709e
] - lib: avoid REPL exit on completion error (Rich Trott) #3358 - [
f236b3a904
] - (SEMVER-MINOR) lib,doc: return boolean from child.send() (Rich Trott) #3516 - [
6e887cc630
] - lib,test: update let to const where applicable (Sakthipriyan Vairamani) #3152 - [
47befffc53
] - (SEMVER-MAJOR) lib,test: deprecate _linklist (Rich Trott) #3078 - [
d5ce53458e
] - lttng: update flags for gc tracing (Glen Keane) #3388 - [
6ad458b752
] - (SEMVER-MAJOR) module: remove unnecessary property and method (Sakthipriyan Vairamani) #2922 - [
ae196175f4
] - node: improve GetActiveRequests performance (Trevor Norris) #3375 - [
bd4311bc9c
] - repl: handle comments properly (Sakthipriyan Vairamani) #3515 - [
ce391ed849
] - (SEMVER-MAJOR) repl: event ordering: delay 'close' until 'flushHistory' (Jeremiah Senkpiel) #3435 - [
4c80c02ac7
] - repl: limit persistent history correctly on load (Jeremiah Senkpiel) #2356 - [
134a60c785
] - src: fix race condition in debug signal on exit (Ben Noordhuis) #3528 - [
bf7c3dabb4
] - (SEMVER-MAJOR) src: bump NODE_MODULE_VERSION To 47 (Rod Vagg) #3400 - [
2d3560767e
] - src: fix exception message encoding on Windows (Brian White) #3288 - [
ff877e93e1
] - src: fix stuck debugger process (Liang-Chi Hsieh) #2778 - [
8854183fe5
] - stream: avoid unnecessary concat of a single buffer. (Calvin Metcalf) #3300 - [
85b74de9de
] - stream: fix signature of _write() in a comment (Fábio Santos) #3248 - [
b8cea49c88
] - test: fix heap-profiler link error LNK1194 on win (Junliang Yan) #3572 - [
4a5dbeab43
] - test: fix missing unistd.h on windows (Junliang Yan) #3532 - [
74e2328b3a
] - test: split independent tests into separate files (Rich Trott) #3548 - [
8c6c0f915a
] - test: use port number from env in tls socket test (Stefan Budeanu) #3557 - [
1a968e67a5
] - test: improve tests for util.inherits (Michaël Zasso) #3507 - [
9d8d752456
] - test: print helpful err msg on test-dns-ipv6.js (Junliang Yan) #3501 - [
60de9f8d7b
] - test: wrap assert.fail when passed to callback (Myles Borins) #3453 - [
cd83f7ed7f
] - test: add node::MakeCallback() test coverage (Ben Noordhuis) #3478 - [
08da5c2a06
] - test: disable test-tick-processor - aix and be ppc (Michael Dawson) #3491 - [
7c35fbcb14
] - test: harden test-child-process-fork-regr-gh-2847 (Michael Dawson) #3459 - [
ad2b272417
] - test: fix test-net-keepalive for AIX (Imran Iqbal) #3458 - [
04fb14cc35
] - test: fix flaky test-child-process-emfile (Rich Trott) #3430 - [
eef0f0cd63
] - test: remove flaky status from eval_messages test (Rich Trott) #3420 - [
bbbd81eab2
] - test: skip test-dns-ipv6.js if ipv6 is unavailable (Junliang Yan) #3444 - [
f78c8e7426
] - test: fix flaky test for symlinks (Rich Trott) #3418 - [
28e9a4f41b
] - test: repl-persistent-history is no longer flaky (Jeremiah Senkpiel) #3437 - [
9e981556e5
] - test: cleanup, improve repl-persistent-history (Jeremiah Senkpiel) #2356 - [
ee2e641e0a
] - test: add Symbol test for assert.deepEqual() (Rich Trott) #3327 - [
e2b8393ee8
] - test: port domains regression test from v0.10 (Jonas Dohse) #3356 - [
676e61872f
] - test: apply correct assert.fail() arguments (Rich Trott) #3378 - [
bbdbef9274
] - test: fix tests after V8 upgrade (Michaël Zasso) #3351 - [
6c032a8333
] - test: replace util with backtick strings (Myles Borins) #3359 - [
f45c315763
] - test: fix domain with abort-on-uncaught on PPC (Julien Gilli) #3354 - [
e3d9d25083
] - test: add test-child-process-emfile fail message (Rich Trott) #3335 - [
6f14b3a7db
] - test: remove util from common (Rich Trott) #3324 - [
7d94611ac9
] - test: split up buffer tests for reliability (Rich Trott) #3323 - [
3202456baa
] - test: remove util properties from common (Rich Trott) #3304 - [
31c971d641
] - test: parallelize long-running test (Rich Trott) #3287 - [
5bbc6df7de
] - test: change call to deprecated util.isError() (Rich Trott) #3084 - [
522e3d3cd3
] - timers: reuse timer insetTimeout().unref()
(Fedor Indutny) #3407 - [
b64ce5960f
] - tls: remove util and calls to util.format (Myles Borins) #3456 - [
c64af7d99e
] - tls: TLSSocket options default isServer false (Yuval Brik) #2614 - [
2296a4fc0f
] - (SEMVER-MINOR) tls: addoptions
argument to createSecurePair (Коренберг Марк) #2441 - [
0140e1b5e3
] - tls: output warning of setDHParam to console.trace (Shigeki Ohtsu) #1831 - [
f72e178a78
] - (SEMVER-MAJOR) tls: add minDHSize option to tls.connect() (Shigeki Ohtsu) #1831 - [
6d92ebac11
] - tls: add TLSSocket.getEphemeralKeyInfo() (Shigeki Ohtsu) #1831 - [
62ad1d0113
] - (SEMVER-MINOR) tls, crypto: add ALPN Support (Shigeki Ohtsu) #2564 - [
5029f41b2f
] - (SEMVER-MINOR) tls,crypto: move NPN protcol data to hidden value (Shigeki Ohtsu) #2564 - [
701e38c25f
] - tools: enable prefer-const eslint rule (Sakthipriyan Vairamani) #3152 - [
6e78382605
] - tools: ensure npm always uses the local node (Jeremiah Senkpiel) #3489 - [
3c3435d017
] - tools: update test-npm to work with npm 3 (Rebecca Turner) #3489 - [
b4f4c24539
] - tools: use absolute paths in test-npm (Rebecca Turner) #3309 - [
80573153b8
] - (SEMVER-MAJOR) util: make inherits work with classes (Michaël Zasso) #3455 - [
412252ca04
] - (SEMVER-MAJOR) util: Remove p, has been deprecated for years (Wyatt Preul) #3432 - [
718c304a4f
] - v8: pull fix for builtin code size on PPC (Michael Dawson) #3474 - [
6936468de2
] - vm: remove Watchdog dependency on Environment (Ido Ben-Yair) #3274 - [
80169b1f0a
] - (SEMVER-MAJOR) zlib: decompression throw on truncated input (Yuval Brik) #2595
Windows 32-bit Installer: https://nodejs.org/dist/v5.0.0/node-v5.0.0-x86.msi
Windows 64-bit Installer: https://nodejs.org/dist/v5.0.0/node-v5.0.0-x64.msi
Windows 32-bit Binary: https://nodejs.org/dist/v5.0.0/win-x86/node.exe
Windows 64-bit Binary: https://nodejs.org/dist/v5.0.0/win-x64/node.exe
Mac OS X 64-bit Installer: https://nodejs.org/dist/v5.0.0/node-v5.0.0.pkg
Mac OS X 64-bit Binary: https://nodejs.org/dist/v5.0.0/node-v5.0.0-darwin-x64.tar.gz
Linux 32-bit Binary: https://nodejs.org/dist/v5.0.0/node-v5.0.0-linux-x86.tar.gz
Linux 64-bit Binary: https://nodejs.org/dist/v5.0.0/node-v5.0.0-linux-x64.tar.gz
SunOS 32-bit Binary: https://nodejs.org/dist/v5.0.0/node-v5.0.0-sunos-x86.tar.gz
SunOS 64-bit Binary: https://nodejs.org/dist/v5.0.0/node-v5.0.0-sunos-x64.tar.gz
ARMv6 32-bit Binary: https://nodejs.org/dist/v5.0.0/node-v5.0.0-linux-armv6l.tar.gz
ARMv7 32-bit Binary: https://nodejs.org/dist/v5.0.0/node-v5.0.0-linux-armv7l.tar.gz
ARMv8 64-bit Binary: https://nodejs.org/dist/v5.0.0/node-v5.0.0-linux-arm64.tar.gz
Source Code: https://nodejs.org/dist/v5.0.0/node-v5.0.0.tar.gz
Other release files: https://nodejs.org/dist/v5.0.0/
Documentation: https://nodejs.org/docs/v5.0.0/api/
Shasums (GPG signing hash: SHA512, file hash: SHA256):
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
26f3e42df814b9b42f0b0045901c84eb79233d8196d0dcdf77a6a3c975c6f25d node-v5.0.0-darwin-x64.tar.gz
060d4bdf5872047ef74f3b1f3daaa466c2506e34ad916128f4b9279d005bc205 node-v5.0.0-darwin-x64.tar.xz
5133b6145df7083133e272e1b8c96b59c58a19d004d5aacdec80ea78e58c7e46 node-v5.0.0-headers.tar.gz
47dc88a17c416285de6c517ea6107322b65920618e8f59e1c49a83c6dd423f31 node-v5.0.0-headers.tar.xz
2c4517d3fdefc29b5c61aa6ea3386a0dafca831357d3bcd30fc14e97b49139d1 node-v5.0.0-linux-arm64.tar.gz
5fd1939b15406d537bf17828a707898f2d710c3c9ddf243b6070353fd13f5880 node-v5.0.0-linux-arm64.tar.xz
96629e271e34d14bdb7be93067a8770cb5326977b9168cf2344c80a721040784 node-v5.0.0-linux-armv6l.tar.gz
82178863010dba66076fdda215e5ad505c1b83571df1d018dce2060d24f260d7 node-v5.0.0-linux-armv6l.tar.xz
6bf5f19cac9f01cb31b7088685d9d6df6d24c9c2a4531ace839387763b8a28ec node-v5.0.0-linux-armv7l.tar.gz
97575c7ec3f042acf85f9b6de3ec6db027b0ef4a828eaa5e0f66504c72884bd9 node-v5.0.0-linux-armv7l.tar.xz
ef73b59048a0ed11d01633f0061627b7a9879257deb9add2255e4d0808f8b671 node-v5.0.0-linux-x64.tar.gz
1c3e8e7df3320e648f748d721115e6018e0701a206232a6a7332970d211e3706 node-v5.0.0-linux-x64.tar.xz
6484c4cac1724f2818354e3f2a8ede66308617b648cd3db624596b8cd58b5f6b node-v5.0.0-linux-x86.tar.gz
46a56d8c00a791f46666dd9d2401b7c26ee7ac8455762fbb106c1497867c9c4b node-v5.0.0-linux-x86.tar.xz
f23ca05d3d7e642ab9b0c8090b0b88fb29dec987b07d67f307bf3aef81e95b14 node-v5.0.0.pkg
7cfbed6e6658d8304f8593eae9dd28f8f83b57e7a6345b32f4d5e9830b80203f node-v5.0.0-sunos-x64.tar.gz
047bd9fbb25fc6a3349781bddf5210966943b06fa62c6e275d1221613c9f3423 node-v5.0.0-sunos-x64.tar.xz
2e9d65dff65843ebfa5c9d623c5b930bd0af7252101cc9c69c55aa8c880fa9eb node-v5.0.0-sunos-x86.tar.gz
c7038764010eba883b5fa638123b7b94e82b86960a0792a7b10123451d978e9a node-v5.0.0-sunos-x86.tar.xz
698d9662067ae6a20a2586e5c09659735fc0050769a0d8f76f979189ceaccdf4 node-v5.0.0.tar.gz
cf4f261618e19517c8cbf2fdde00d0b5160e271760abee00f387b11a0b3ca834 node-v5.0.0.tar.xz
8a066f8cf38f4dd979366c223d90d6242076d2446f48856abb091b2becc939ef node-v5.0.0-x64.msi
07826a6b60702a0ce9a77240103bf20091a06ee740e646e9f7d6ca760c64e45a node-v5.0.0-x86.msi
27c819be0958fdb4b63be29fb032525965e997da8e0f6b4a6e9123350b7b22e0 win-x64/node.exe
27992ac24ab67099d243e76fc52382b42caf4bf75b4b792d647359221dfa5d0f win-x64/node.lib
b2a5caab041d6e0a3fefc3a0b557df71ce9174c9ca344e5a690b9accb9f76d84 win-x86/node.exe
f79d9545ad99221d090c30e415af74431eae15c729e820a96385b051be3837f2 win-x86/node.lib
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1
iQEcBAEBAgAGBQJWMom1AAoJEMJzeS99g1RdsxAIAKcA3B14sgCa6qZ1LZfXN5Qj
hogNS6r1L6Mb15E4Gvknjej2n2At2PpdSmxPKIex2uhwGJHcidyakn3NzPwzhdJQ
VtgQKL7G7ZhsXYrKD78kS6GdGql1u4MroTbHSACthmZv+OdDhGEmL1UIN8+PU45V
gBDwg+JPRPYeSGzXcqOwmUHkqgvCaFvyGZfu0j18GT8TjaXkj5M8J9emtmtRBX15
Sp9jbOMRrt9gGHmIqcx/AzCIfqGyi4Lb/CwdyD5hXWfHFfeWspsOx+RFFh965JLy
F6Z13Zr5Oph2fdobiuXYN1WSmrHX2kfy1B2WAt80vwwVzEiIQcSUhEU9qu8z9Qg=
=v3xU
-----END PGP SIGNATURE-----