Bert Belder [Tue, 21 Aug 2012 22:54:15 +0000 (00:54 +0200)]
uv: upgrade to 564e7c7
Ben Noordhuis [Tue, 21 Aug 2012 11:29:53 +0000 (13:29 +0200)]
child_process: emit error on exec failure
libuv calls the exit cb with exit code == -1 when it fails to spawn the new
process. Anticipate that and emit the error on the ChildProcess object.
Ben Noordhuis [Tue, 21 Aug 2012 10:50:34 +0000 (12:50 +0200)]
signal_wrap: fix unused variable compiler warning
Bert Belder [Mon, 20 Aug 2012 22:37:59 +0000 (00:37 +0200)]
Remove node_io_watcher
Bert Belder [Mon, 20 Aug 2012 22:32:45 +0000 (00:32 +0200)]
Delete the old node_signal_watcher code
Bert Belder [Mon, 20 Aug 2012 21:59:21 +0000 (23:59 +0200)]
process: use uv_signal instead of ev_signal
Bert Belder [Mon, 20 Aug 2012 16:41:07 +0000 (18:41 +0200)]
uv: upgrade to 8073a26
Bert Belder [Mon, 20 Aug 2012 16:13:05 +0000 (19:13 +0300)]
unix: don't explicitly instantiate v8::Persistent<x> templates
These explicit instantiations were added to make MSVC happy. It turns
out that some older versions of gcc and llvm now complain about duplicate
symbols, so we instantiate these templates only when MSVC is used.
Ben Noordhuis [Fri, 17 Aug 2012 12:11:33 +0000 (14:11 +0200)]
timers: fix assertion in Timeout.unref()
Ensure that the delay >= 0 when detaching the timer from the queue. Fixes the
following assertion:
uv_timer_start: Assertion `timeout >= 0' failed.
No test included, it's timing sensitive.
Ben Noordhuis [Fri, 17 Aug 2012 12:03:01 +0000 (14:03 +0200)]
test: use common.PORT in simple/test-regress-GH-1697
Ben Noordhuis [Fri, 17 Aug 2012 12:02:16 +0000 (14:02 +0200)]
test: use common.PORT in pummel/test-net-timeout2
Ben Noordhuis [Fri, 17 Aug 2012 11:44:25 +0000 (13:44 +0200)]
test: fix function name typo
It doesn't affect the semantics of the test because it checks if that
particular bit of code throws an exception. It does, only it's a SyntaxError.
Ben Noordhuis [Fri, 17 Aug 2012 11:05:20 +0000 (13:05 +0200)]
Merge remote-tracking branch 'origin/v0.8'
Conflicts:
ChangeLog
src/node_version.h
test/message/stdin_messages.out
tools/install.py
Bert Belder [Fri, 17 Aug 2012 00:30:57 +0000 (02:30 +0200)]
windows: make junctions work again
Closes GH-3879
Bert Belder [Thu, 16 Aug 2012 23:08:06 +0000 (01:08 +0200)]
Avoid compiler warning about negating unsigned value
Bert Belder [Thu, 16 Aug 2012 22:46:52 +0000 (00:46 +0200)]
windows: avoid MSVC warnings about templates not having a dll interface
isaacs [Thu, 16 Aug 2012 16:56:31 +0000 (09:56 -0700)]
website: Improved install button behavior
Just install whatever's best for the OS.
Detect host os and architecture from the navigator properties. If we
can't make a good guess, then they get the tarball, and of course
everything we have is on the full download page.
isaacs [Tue, 24 Jul 2012 21:19:50 +0000 (14:19 -0700)]
v8: Reapply floating patches
isaacs [Thu, 16 Aug 2012 21:42:39 +0000 (14:42 -0700)]
v8: Upgrade to 3.11.10.18
isaacs [Thu, 16 Aug 2012 01:56:48 +0000 (18:56 -0700)]
blog: Fix binary links for 0.8.7 post
Nathan Rajlich [Thu, 16 Aug 2012 01:05:33 +0000 (18:05 -0700)]
email-footer: update the binary package links to x86/x64
isaacs [Thu, 16 Aug 2012 00:33:03 +0000 (17:33 -0700)]
website: fix font-size on 'explore' list items
isaacs [Thu, 16 Aug 2012 00:25:25 +0000 (17:25 -0700)]
Now working on 0.8.8
isaacs [Thu, 16 Aug 2012 00:25:01 +0000 (17:25 -0700)]
Merge branch 'v0.8.7-release' into v0.8
isaacs [Thu, 16 Aug 2012 00:23:59 +0000 (17:23 -0700)]
blog: release 0.8.7
isaacs [Wed, 15 Aug 2012 16:20:56 +0000 (09:20 -0700)]
2012.08.15, Version 0.8.7 (Stable)
* npm: Upgrade to 1.1.49
* website: download page (Golo Roden)
* crypto: fix uninitialized memory access in openssl (Ben Noordhuis)
* buffer, crypto: fix buffer decoding (Ben Noordhuis)
* build: compile with -fno-tree-vrp when gcc >= 4.0 (Ben Noordhuis)
* tls: handle multiple CN fields when verifying cert (Ben Noordhuis)
* doc: remove unused util from child_process (Kyle Robinson Young)
* build: rework -fvisibility=hidden detection (Ben Noordhuis)
* windows: don't duplicate invalid stdio handles (Bert Belder)
* windows: fix typos in process-stdio.c (Bert Belder)
isaacs [Wed, 15 Aug 2012 22:47:52 +0000 (15:47 -0700)]
website: Sharpen and clean up download page more
Retinaify the images!
isaacs [Wed, 15 Aug 2012 18:28:52 +0000 (11:28 -0700)]
build: Don't set gcc_version for Windows
isaacs [Wed, 15 Aug 2012 15:33:35 +0000 (08:33 -0700)]
website: Use table for download page
Paragraphs of text are too wordy.
Use big pretty images and clickable blocky links.
Golo Roden [Mon, 13 Aug 2012 15:43:26 +0000 (17:43 +0200)]
website: download page
- Improved styling of download links.
- index.html#download now redirects to /download/
- Added missing hyphens, and added the missing "and 64-bit" for the Mac
Installer.
isaacs [Wed, 15 Aug 2012 03:27:28 +0000 (20:27 -0700)]
npm: Upgrade to 1.1.49
- node-gyp@0.6.5
- abstracted-out configs
- publishing over proxies
- bugfixes to all the deps
Ben Noordhuis [Wed, 15 Aug 2012 00:10:02 +0000 (02:10 +0200)]
crypto: fix uninitialized memory access in openssl
ASN1_STRING_to_UTF8() passes an ASN1_STRING to ASN1_STRING_set() but forgot to
initialize the `length` field.
Fixes the following valgrind error:
$ valgrind -q --track-origins=yes --num-callers=19 \
out/Debug/node test/simple/test-tls-client-abort.js
==2690== Conditional jump or move depends on uninitialised value(s)
==2690== at 0x784B69: ASN1_STRING_set (asn1_lib.c:382)
==2690== by 0x809564: ASN1_mbstring_ncopy (a_mbstr.c:204)
==2690== by 0x8090F0: ASN1_mbstring_copy (a_mbstr.c:86)
==2690== by 0x782F1F: ASN1_STRING_to_UTF8 (a_strex.c:570)
==2690== by 0x78F090: asn1_string_canon (x_name.c:409)
==2690== by 0x78EF17: x509_name_canon (x_name.c:354)
==2690== by 0x78EA7D: x509_name_ex_d2i (x_name.c:210)
==2690== by 0x788058: ASN1_item_ex_d2i (tasn_dec.c:239)
==2690== by 0x7890D4: asn1_template_noexp_d2i (tasn_dec.c:746)
==2690== by 0x788CB6: asn1_template_ex_d2i (tasn_dec.c:607)
==2690== by 0x78877A: ASN1_item_ex_d2i (tasn_dec.c:448)
==2690== by 0x7890D4: asn1_template_noexp_d2i (tasn_dec.c:746)
==2690== by 0x788CB6: asn1_template_ex_d2i (tasn_dec.c:607)
==2690== by 0x78877A: ASN1_item_ex_d2i (tasn_dec.c:448)
==2690== by 0x787C93: ASN1_item_d2i (tasn_dec.c:136)
==2690== by 0x78F5E4: d2i_X509 (x_x509.c:141)
==2690== by 0x7C9B91: PEM_ASN1_read_bio (pem_oth.c:81)
==2690== by 0x7CA506: PEM_read_bio_X509 (pem_x509.c:67)
==2690== by 0x703C9A: node::crypto::SecureContext::AddRootCerts(v8::Arguments const&) (node_crypto.cc:497)
==2690== Uninitialised value was created by a stack allocation
==2690== at 0x782E89: ASN1_STRING_to_UTF8 (a_strex.c:560)
Ben Noordhuis [Tue, 14 Aug 2012 23:30:12 +0000 (01:30 +0200)]
test: fix up `make valgrind-test`
* valgrind complained too much about memory leaks from the V8 heap to be
useful, run it with --leak-check=no. Not ideal, needs to be revisited,
preferably with a suppression file.
* tools/run-valgrind.py didn't deal with tests that logged to stderr, rewrite
the heuristic and make valgrind write to a socket instead of stderr.
Fixes #3869.
Ben Noordhuis [Wed, 8 Aug 2012 22:01:38 +0000 (00:01 +0200)]
test: raise pummel/test-net-throttle write req size
pummel/test-net-throttle assumes that a couple of big write requests result in
some of them getting queued because the kernel's send buffer fills up.
Said assumption breaks on systems with large send buffers. Raise the size of
the write request to ameliorate the issue.
This is a back-port of commit 6770555 from the master branch.
Ben Noordhuis [Tue, 14 Aug 2012 21:06:32 +0000 (23:06 +0200)]
addon: remove node-waf, superseded by node-gyp
Ben Noordhuis [Tue, 14 Aug 2012 20:25:52 +0000 (22:25 +0200)]
buffer, crypto: fix buffer decoding
Before this commit, DecodeWrite() mistakenly tried to convert buffers to
UTF-8 strings which:
a) produced invalid character sequences when the buffer contained
octets > 127, and
b) lead to spurious test failures because DecodeWrite() wrote less bytes
than DecodeBytes() said it would, with the remainder either containing
zeros or garbage
Fix that by simply copying the buffer's data to the target buffer when the
encoding is BINARY or by converting the buffer to a binary string when it's
UTF8 or ASCII.
Fixes #3651, #3866.
isaacs [Sun, 12 Aug 2012 01:58:40 +0000 (18:58 -0700)]
module: use 'repl' as the filename arg if missing
Fix #3859
isaacs [Sat, 4 Aug 2012 20:32:18 +0000 (13:32 -0700)]
events: emitter.listeners() should not have side effects
Fixes #3803
jbergstroem [Mon, 14 Nov 2011 13:43:49 +0000 (14:43 +0100)]
bench: fetch port from env
http_simple.js honors $PORT, http_simple_bench.sh should too.
Ben Noordhuis [Mon, 13 Aug 2012 15:31:22 +0000 (17:31 +0200)]
tls: fix segfault in pummel/test-tls-ci-reneg-attack
Commit 4e5fe2d changed the way how process.nextTick() works:
process.nextTick(function foo() {
process.nextTick(function bar() {
// ...
});
});
Before said commit, foo() and bar() used to run on separate event loop ticks
but that is no longer the case.
However, that's exactly the behavior that the TLS renegotiation attack guard
relies on. It gets called by OpenSSL and needs to defer the 'error' event to a
later tick because the default action is to destroy the TLS context - the same
context that OpenSSL currently operates on.
When things change underneath your feet, bad things happen and OpenSSL is no
exception. Ergo, use setImmediate() instead of process.nextTick() to ensure
that the 'error' event is actually emitted at a later tick.
Fixes #3840.
Ben Noordhuis [Mon, 13 Aug 2012 13:04:03 +0000 (15:04 +0200)]
build: compile with -fno-tree-vrp when gcc >= 4.0
Ben Noordhuis [Mon, 13 Aug 2012 13:33:04 +0000 (15:33 +0200)]
deps: upgrade libuv to 2c3e8b6
Nathan Rajlich [Sun, 12 Aug 2012 21:43:12 +0000 (14:43 -0700)]
tools: remove "addon.gypi" and "gyp_addon"
They've been merged into `node-gyp` and aren't serving any purpose
in the node repo. Fixes #3760.
Ben Noordhuis [Sun, 12 Aug 2012 19:46:56 +0000 (21:46 +0200)]
tls: handle multiple CN fields when verifying cert
Fixes #3861.
Timothy J Fontaine [Sat, 11 Aug 2012 22:31:44 +0000 (18:31 -0400)]
timers: make unref'd timeouts execute in a domain
Kyle Robinson Young [Sat, 11 Aug 2012 17:56:04 +0000 (10:56 -0700)]
doc: remove unused util from child_process
Timothy J Fontaine [Wed, 8 Aug 2012 02:12:01 +0000 (22:12 -0400)]
timers: implement setImmediate
Felix Böhm [Sun, 20 May 2012 19:26:29 +0000 (22:26 +0300)]
path: small speed improvements
Nathan Rajlich [Thu, 9 Aug 2012 23:30:41 +0000 (16:30 -0700)]
Makefile: add a better check to ensure a node "release"
Closes #3841.
Closes #3842.
Ben Noordhuis [Thu, 9 Aug 2012 23:25:00 +0000 (01:25 +0200)]
node: remove process.uvCounters()
Ben Noordhuis [Wed, 8 Aug 2012 23:02:47 +0000 (01:02 +0200)]
test: fix pummel/test-net-connect-econnrefused
The test relied on a peculiarity of process.nextTick() that was changed in
commit 4e5fe2d. Before that commit, each nextTick callback corresponded with
the event loop moving forward one tick. That's no longer the case.
Ben Noordhuis [Wed, 8 Aug 2012 22:01:38 +0000 (00:01 +0200)]
test: raise pummel/test-net-throttle write req size
pummel/test-net-throttle assumes that a couple of big write requests result in
some of them getting queued because the kernel's send buffer fills up.
Said assumption breaks on systems with large send buffers. Raise the size of
the write request to ameliorate the issue.
Ben Noordhuis [Wed, 8 Aug 2012 21:07:18 +0000 (23:07 +0200)]
fs: fix ReferenceError in truncateSync()
Fixes a minor oversight introduced in 168a555, resulting in the following error:
fs.js:467
return fs.ftruncateSync(path, len, callback);
^
ReferenceError: callback is not defined
at Object.fs.truncateSync (fs.js:467:40)
Ben Noordhuis [Wed, 8 Aug 2012 18:23:27 +0000 (20:23 +0200)]
installer: remove c-ares header files
Fixes #3847.
isaacs [Tue, 7 Aug 2012 19:05:23 +0000 (12:05 -0700)]
blog post for 0.8.6
isaacs [Tue, 7 Aug 2012 19:02:49 +0000 (12:02 -0700)]
Now working on 0.8.7
isaacs [Tue, 7 Aug 2012 19:02:38 +0000 (12:02 -0700)]
Merge branch 'v0.8.6-release' into v0.8
isaacs [Mon, 6 Aug 2012 20:10:47 +0000 (13:10 -0700)]
2012.08.07, Version 0.8.6 (Stable)
* npm: Upgrade to v1.1.48
* Add 'make binary' to build binary tarballs for all Unixes (Nathan Rajlich)
* zlib: Emit 'close' on destroy(). (Dominic Tarr)
* child_process: Fix stdout=null when stdio=['pipe'] (Tyler Neylon)
* installer: prevent ETXTBSY errors (Ben Noordhuis)
* installer: honor --without-npm, default install path (Ben Noordhuis)
* net: make pause work with connecting sockets (Bert Belder)
* installer: fix cross-compile installs (Ben Noordhuis)
* net: fix .listen({fd:0}) (Ben Noordhuis)
* windows: map WSANO_DATA to UV_ENOENT (Bert Belder)
isaacs [Tue, 7 Aug 2012 02:09:36 +0000 (19:09 -0700)]
npm: Upgrade to 1.1.48
Fixes an issue with publishing readmes that are not called
'README.md', so that they still end up on the website
Bert Belder [Mon, 6 Aug 2012 23:36:31 +0000 (01:36 +0200)]
uv: upgrade to 41b1265
Bert Belder [Mon, 6 Aug 2012 23:35:10 +0000 (01:35 +0200)]
dns: use uv_inet_ntop/uv_inet_pton instead of c-ares equivalents
Bert Belder [Mon, 6 Aug 2012 23:25:06 +0000 (01:25 +0200)]
uv: upgrade to 3a8bb3b
Bert Belder [Mon, 6 Aug 2012 19:22:11 +0000 (21:22 +0200)]
dns: don't rely on libuv for c-ares integration
Bert Belder [Mon, 6 Aug 2012 23:48:15 +0000 (01:48 +0200)]
node.cc: include ares.h
Bert Belder [Mon, 6 Aug 2012 19:27:47 +0000 (21:27 +0200)]
Add c-ares dependency
This is the c-ares code that used to live in the libuv source tree.
It is based on c-ares 1.9.0.
Ben Noordhuis [Mon, 6 Aug 2012 21:43:47 +0000 (23:43 +0200)]
net: fix listen() regression, revert patches
This commit reverts the following commits (in reverse chronological order):
74d076c errnoException must be done immediately
ddb02b9 net: support Server.listen(Pipe)
085a098 cluster: do not use internal server API
d138875 net: lazy listen on handler
Commit d138875 introduced a backwards incompatible change that broke the
simple/test-net-socket-timeout and simple/test-net-lazy-listen tests - it
defers listening on the target port until the `net.Server` instance has at
least one 'connection' event listener.
The other patches had to be reverted in order to revert d138875.
Fixes #3832.
Josh Erickson [Mon, 6 Aug 2012 20:18:31 +0000 (15:18 -0500)]
net: add support for IPv6 addresses ending in ::
Modified net.isIP Ipv6 regex to allow for addresses ending in "::".
Added tests for new IPv6 matching reqex.
Nathan Rajlich [Mon, 6 Aug 2012 20:22:05 +0000 (13:22 -0700)]
install: prevent a KeyError from being thrown when PORTABLE is not set
isaacs [Mon, 6 Aug 2012 20:07:31 +0000 (13:07 -0700)]
npm: Upgrade to 1.1.47
isaacs [Mon, 6 Aug 2012 19:40:28 +0000 (12:40 -0700)]
uv: Upgrade to dfb6be0
Nathan Rajlich [Mon, 6 Aug 2012 19:25:45 +0000 (12:25 -0700)]
Merge branch 'binary-tarballs' into v0.8
Nathan Rajlich [Mon, 6 Aug 2012 18:57:47 +0000 (11:57 -0700)]
email-footer: add links to the expected common binary packages
We can do other OSs like 32 and 64-bit OS X, but we should encourage
users to use the installer on OS X so we'll omit it here.
Nathan Rajlich [Sat, 4 Aug 2012 22:34:04 +0000 (15:34 -0700)]
Makefile: move the release verification logic into a `make release-only` target
Nathan Rajlich [Sat, 4 Aug 2012 19:39:54 +0000 (12:39 -0700)]
Makefile: properly set the ARCH variable when forcing a DESTCPU
Nathan Rajlich [Sat, 4 Aug 2012 19:24:34 +0000 (12:24 -0700)]
Makefile: allow the dest-cpu to be specified for `make binary`
Needed for 64-bit Solaris, and 32-bit OS X
Nathan Rajlich [Sat, 4 Aug 2012 19:12:37 +0000 (12:12 -0700)]
Makefile: add `make binary` helper target
Nathan Rajlich [Sat, 4 Aug 2012 19:12:22 +0000 (12:12 -0700)]
Makefile: add `make tar` helper target
Nathan Rajlich [Sat, 4 Aug 2012 19:07:17 +0000 (12:07 -0700)]
Makefile: add target for precompiled binary tarballs
This target compiles node with "/" as the prefix and installs into a directory
like: "node-v0.8.6-darwin-x86_64". Then it creates a gzipped-tarball of that
directory, called something like: "node-v0.8.6-darwin-x86_64.tar.gz".
Nathan Rajlich [Mon, 6 Aug 2012 17:18:27 +0000 (10:18 -0700)]
install: add a "portable" mode to the shebang-rewriting logic
This "portable" mode rewrites the npm shebang to use the "node" executable
in the same directory relative to the "npm" script. This makes the "npm"
script "just work" even when "node" is not in the user's $PATH.
This mode is necessary for the precompiled binary packages that may potentially
be extracted to anywhere. The regular shebang-rewriting logic would normally
set the npm script's shebang to "/bin/node" which will not be present on anyone's
machine. In the end, we want the precompiled packages to be as user-friendly as
possible.
Nathan Rajlich [Sat, 4 Aug 2012 18:06:14 +0000 (11:06 -0700)]
install: install the "wafadmin/Tools" files into the correct dir
Previously they were going into just "wafadmin" and node-waf wasn't working.
isaacs [Sat, 4 Aug 2012 19:39:11 +0000 (12:39 -0700)]
fs: fix naming of truncate/ftruncate functions
For backwards compatibility, fs.truncate(<number>) will proxy to
fs.ftruncate.
Fix #3805
isaacs [Sun, 5 Aug 2012 21:47:23 +0000 (14:47 -0700)]
doc: util.pump is deprecated. Use Stream.pipe
Conflicts:
doc/api/util.markdown
Ben Noordhuis [Sun, 5 Aug 2012 22:45:30 +0000 (00:45 +0200)]
fs: remove undocumented .destroy callbacks
The destroy() method of fs.ReadStream and fs.WriteStream takes a callback.
It's a leftover from the node 0.1 days, undocumented and not part of the
streams API. Remove it.
Kyle Robinson Young [Sat, 4 Aug 2012 19:45:50 +0000 (12:45 -0700)]
doc: fix typos in child_process
isaacs [Sun, 5 Aug 2012 21:47:23 +0000 (14:47 -0700)]
doc: util.pump is deprecated. Use Stream.pipe
isaacs [Sun, 5 Aug 2012 21:22:44 +0000 (14:22 -0700)]
errnoException must be done immediately
Ben Noordhuis [Sun, 5 Aug 2012 21:40:20 +0000 (23:40 +0200)]
Makefile: DRY js lint
Ben Noordhuis [Sun, 5 Aug 2012 21:31:28 +0000 (23:31 +0200)]
util: mark util.pump() as deprecated
isaacs [Sun, 5 Aug 2012 18:26:18 +0000 (11:26 -0700)]
test-message: fix message output
1. The net changes add a stack frame to stdin errors.
2. The error line numbers were overly strict in many places.
isaacs [Sun, 5 Aug 2012 21:22:44 +0000 (14:22 -0700)]
errnoException must be done immediately
Nathan Rajlich [Sat, 4 Aug 2012 07:12:52 +0000 (00:12 -0700)]
install: use os.path.join() to create the npm shebang
Prettier formatting for the shebang if the "prefix" ends with a /
isaacs [Sun, 5 Aug 2012 18:26:18 +0000 (11:26 -0700)]
test-message: fix message output
1. The net changes add a stack frame to stdin errors.
2. The error line numbers were overly strict in many places.
Andreas Madsen [Sat, 14 Jul 2012 07:43:10 +0000 (09:43 +0200)]
net: support Server.listen(Pipe)
Andreas Madsen [Sat, 14 Jul 2012 07:38:00 +0000 (09:38 +0200)]
cluster: do not use internal server API
Andreas Madsen [Tue, 10 Jul 2012 10:06:13 +0000 (12:06 +0200)]
net: lazy listen on handler
This allow the server to be shared without the need to handle connection
from master
Dominic Tarr [Tue, 24 Jul 2012 14:40:58 +0000 (02:40 +1200)]
zlib: Emit 'close' on destroy().
Tyler Neylon [Fri, 3 Aug 2012 19:38:09 +0000 (12:38 -0700)]
child_process: Fix stdout=null when stdio=['pipe']
Previously, a command with a short stdio array would result in the child's
stdout and stderr objects set to null. For example:
var c = child_process.spawn(cmd, args, {stdio: ['pipe']});
// results in c.stdout === null.
The expected behavior is the above line functioning the same as this one:
var c = child_process.spawn(cmd, args, {stdio: ['pipe', null, null]});
// provides correct (non-null) c.stdout; as does the above, after this fix.
isaacs [Sat, 4 Aug 2012 18:30:44 +0000 (11:30 -0700)]
blog post for 0.6.21
Nathan Rajlich [Sat, 4 Aug 2012 07:10:58 +0000 (00:10 -0700)]
install: install the "wafadmin" files into the correct directory
Before they were just being copied into "lib/node/".
Now they go into "lib/node/wafadmin/".
Ben Noordhuis [Sat, 4 Aug 2012 00:41:32 +0000 (02:41 +0200)]
installer: prevent ETXTBSY errors
The installer does what amounts to `cp -p`. If the node binary is in use at
the time of the copy, it'd fail with a ETXTBSY error. That's why it's unlinked
first now.