changeset 45018:28b32b8d67b6

Merge
author prr
date Fri, 28 Apr 2017 13:52:45 -0700
parents 7bd7767129ed 72e90db93f70
children 20ad074a423f
files
diffstat 127 files changed, 1679 insertions(+), 1103 deletions(-) [+]
line wrap: on
line diff
--- a/jdk/.hgtags	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/.hgtags	Fri Apr 28 13:52:45 2017 -0700
@@ -409,3 +409,4 @@
 6dea581453d7c0e767e3169cfec8b423a381e71d jdk-9+164
 a7942c3b1e59495dbf51dc7c41aab355fcd253d7 jdk-9+165
 5d2b48f1f0a322aca719b49ff02ab421705bffc7 jdk-9+166
+7828aedcb525df40b7c8122bcc3f997c75ebaf7f jdk-9+167
--- a/jdk/make/CompileTools.gmk	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/make/CompileTools.gmk	Fri Apr 28 13:52:45 2017 -0700
@@ -30,6 +30,8 @@
 include JavaCompilation.gmk
 include SetupJavaCompilers.gmk
 
+################################################################################
+
 $(eval $(call IncludeCustomExtension, jdk, CompileTools.gmk))
 
 ################################################################################
--- a/jdk/make/gensrc/GensrcCharsetCoder.gmk	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/make/gensrc/GensrcCharsetCoder.gmk	Fri Apr 28 13:52:45 2017 -0700
@@ -54,7 +54,7 @@
 	    -DOtherCoder='Encoder' \
 	    -DreplTypeName='string' \
 	    -DdefaultRepl='"\\uFFFD"' \
-	    -DdefaultReplName='<tt>"\&#92;uFFFD"<\/tt>' \
+	    -DdefaultReplName='<code>"\&#92;uFFFD"<\/code>' \
 	    -DreplType='String' \
 	    -DreplFQType='java.lang.String' \
 	    -DreplLength='length()' \
@@ -89,7 +89,7 @@
 	    -DOtherCoder='Decoder' \
 	    -DreplTypeName='byte array' \
 	    -DdefaultRepl='new byte[] { (byte)'"'"\\?"'"' }' \
-	    -DdefaultReplName='<tt>{<\/tt>\&nbsp;<tt>(byte)'"'"\\?"'"'<\/tt>\&nbsp;<tt>}<\/tt>' \
+	    -DdefaultReplName='<code>{<\/code>\&nbsp;<code>(byte)'"'"\\?"'"'<\/code>\&nbsp;<code>}<\/code>' \
 	    -DreplType='byte[]' \
 	    -DreplFQType='byte[]' \
 	    -DreplLength='length' \
--- a/jdk/make/launcher/Launcher-jdk.aot.gmk	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/make/launcher/Launcher-jdk.aot.gmk	Fri Apr 28 13:52:45 2017 -0700
@@ -25,9 +25,25 @@
 
 include LauncherCommon.gmk
 
+# The JVMCI exports are needed since JVMCI is normally dynamically exported
+# (see jdk.vm.ci.services.internal.ReflectionAccessJDK::openJVMCITo).
+
 $(eval $(call SetupBuildLauncher, jaotc, \
     MAIN_CLASS := jdk.tools.jaotc.Main, \
     JAVA_ARGS := -XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCI \
+        --add-exports=jdk.internal.vm.ci/jdk.vm.ci.aarch64=$(call CommaList, jdk.internal.vm.compiler  jdk.aot) \
+        --add-exports=jdk.internal.vm.ci/jdk.vm.ci.amd64=$(call CommaList, jdk.internal.vm.compiler  jdk.aot) \
+        --add-exports=jdk.internal.vm.ci/jdk.vm.ci.code=$(call CommaList, jdk.internal.vm.compiler  jdk.aot) \
+        --add-exports=jdk.internal.vm.ci/jdk.vm.ci.code.site=$(call CommaList, jdk.internal.vm.compiler  jdk.aot) \
+        --add-exports=jdk.internal.vm.ci/jdk.vm.ci.code.stack=$(call CommaList, jdk.internal.vm.compiler  jdk.aot) \
+        --add-exports=jdk.internal.vm.ci/jdk.vm.ci.common=$(call CommaList, jdk.internal.vm.compiler  jdk.aot) \
+        --add-exports=jdk.internal.vm.ci/jdk.vm.ci.hotspot=$(call CommaList, jdk.internal.vm.compiler  jdk.aot) \
+        --add-exports=jdk.internal.vm.ci/jdk.vm.ci.hotspot.aarch64=$(call CommaList, jdk.internal.vm.compiler  jdk.aot) \
+        --add-exports=jdk.internal.vm.ci/jdk.vm.ci.hotspot.amd64=$(call CommaList, jdk.internal.vm.compiler  jdk.aot) \
+        --add-exports=jdk.internal.vm.ci/jdk.vm.ci.hotspot.sparc=$(call CommaList, jdk.internal.vm.compiler  jdk.aot) \
+        --add-exports=jdk.internal.vm.ci/jdk.vm.ci.meta=$(call CommaList, jdk.internal.vm.compiler  jdk.aot) \
+        --add-exports=jdk.internal.vm.ci/jdk.vm.ci.runtime=$(call CommaList, jdk.internal.vm.compiler  jdk.aot) \
+        --add-exports=jdk.internal.vm.ci/jdk.vm.ci.sparc=$(call CommaList, jdk.internal.vm.compiler  jdk.aot) \
         -XX:+UseAOT \
         -Djvmci.UseProfilingInformation=false \
         -Dgraal.UseExceptionProbability=false \
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/make/src/classes/build/tools/taglet/ExtLink.java	Fri Apr 28 13:52:45 2017 -0700
@@ -0,0 +1,109 @@
+/*
+ * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package build.tools.taglet;
+
+import java.util.EnumSet;
+import java.util.List;
+import java.util.Set;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import javax.lang.model.element.Element;
+
+import com.sun.source.doctree.DocTree;
+import com.sun.source.doctree.UnknownInlineTagTree;
+import jdk.javadoc.doclet.Taglet;
+
+import static com.sun.source.doctree.DocTree.Kind.*;
+import static jdk.javadoc.doclet.Taglet.Location.*;
+
+/**
+ * An inline tag to conveniently insert an external link.
+ * The tag can be used as follows:
+ * {&#64;extLink name description}, for example
+ * <p>
+ * {@code Please see {@extLink Borealis a spectacular} sight.}
+ * <p>
+ * will produce the following html
+ * <p>
+ * {@code
+ * Please see <a href="https://www.oracle.com/pls/topic/lookup?ctx=javase9&id=Borealis">a spectacular</a> sight.
+ * }
+ */
+public class ExtLink implements Taglet {
+
+    static final String TAG_NAME = "extLink";
+
+    static final String URL = "https://www.oracle.com/pls/topic/lookup?ctx=javase9&id=";
+
+    static final Pattern TAG_PATTERN = Pattern.compile("(\\s*)(?<name>\\w+)(\\s+)(?<desc>.*)");
+
+    /**
+     * Returns the set of locations in which the tag may be used.
+     */
+    @Override
+    public Set<Location> getAllowedLocations() {
+        return EnumSet.allOf(jdk.javadoc.doclet.Taglet.Location.class);
+    }
+
+    @Override
+    public boolean isInlineTag() {
+        return true;
+    }
+
+    @Override
+    public String getName() {
+        return TAG_NAME;
+    }
+
+    @Override
+    public String toString(List<? extends DocTree> tags, Element elem) {
+
+        if (tags.isEmpty())
+            return "";
+
+        DocTree tag = tags.get(0);
+        if (tag.getKind() != UNKNOWN_INLINE_TAG)
+            return "";
+
+        UnknownInlineTagTree uitree = (UnknownInlineTagTree) tag;
+        if (uitree.getContent().isEmpty())
+            return "";
+
+        String tagText = uitree.getContent().get(0).toString();
+        Matcher m = TAG_PATTERN.matcher(tagText);
+        if (!m.find())
+            return "";
+
+        StringBuilder sb = new StringBuilder("<a href=\"");
+        sb.append(URL)
+          .append(m.group("name"))
+          .append("\">")
+          .append(m.group("desc"))
+          .append("</a>");
+
+        return sb.toString();
+    }
+}
--- a/jdk/src/java.base/share/classes/java/io/DataInput.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/io/DataInput.java	Fri Apr 28 13:52:45 2017 -0700
@@ -48,7 +48,7 @@
  * may be thrown if the input stream has been
  * closed.
  *
- * <h3><a name="modified-utf-8">Modified UTF-8</a></h3>
+ * <h3><a id="modified-utf-8">Modified UTF-8</a></h3>
  * <p>
  * Implementations of the DataInput and DataOutput interfaces represent
  * Unicode strings in a format that is a slight modification of UTF-8.
@@ -72,8 +72,8 @@
  *     </tr>
  *     <tr>
  *       <th id="byte1_a">Byte 1</th>
- *       <td><center>0</center>
- *       <td colspan="7"><center>bits 6-0</center>
+ *       <td style="text-align:center">0
+ *       <td colspan="7" style="text-align:center">bits 6-0
  *     </tr>
  *     <tr>
  *       <th colspan="9"><span style="font-weight:normal">
@@ -87,16 +87,16 @@
  *     </tr>
  *     <tr>
  *       <th id="byte1_b">Byte 1</th>
- *       <td><center>1</center>
- *       <td><center>1</center>
- *       <td><center>0</center>
- *       <td colspan="5"><center>bits 10-6</center>
+ *       <td style="text-align:center">1
+ *       <td style="text-align:center">1
+ *       <td style="text-align:center">0
+ *       <td colspan="5" style="text-align:center">bits 10-6
  *     </tr>
  *     <tr>
  *       <th id="byte2_a">Byte 2</th>
- *       <td><center>1</center>
- *       <td><center>0</center>
- *       <td colspan="6"><center>bits 5-0</center>
+ *       <td style="text-align:center">1
+ *       <td style="text-align:center">0
+ *       <td colspan="6" style="text-align:center">bits 5-0
  *     </tr>
  *     <tr>
  *       <th colspan="9"><span style="font-weight:normal">
@@ -109,23 +109,23 @@
  *     </tr>
  *     <tr>
  *       <th id="byte1_c">Byte 1</th>
- *       <td><center>1</center>
- *       <td><center>1</center>
- *       <td><center>1</center>
- *       <td><center>0</center>
- *       <td colspan="4"><center>bits 15-12</center>
+ *       <td style="text-align:center">1
+ *       <td style="text-align:center">1
+ *       <td style="text-align:center">1
+ *       <td style="text-align:center">0
+ *       <td colspan="4" style="text-align:center">bits 15-12
  *     </tr>
  *     <tr>
  *       <th id="byte2_b">Byte 2</th>
- *       <td><center>1</center>
- *       <td><center>0</center>
- *       <td colspan="6"><center>bits 11-6</center>
+ *       <td style="text-align:center">1
+ *       <td style="text-align:center">0
+ *       <td colspan="6" style="text-align:center">bits 11-6
  *     </tr>
  *     <tr>
  *       <th id="byte3">Byte 3</th>
- *       <td><center>1</center>
- *       <td><center>0</center>
- *       <td colspan="6"><center>bits 5-0</center>
+ *       <td style="text-align:center">1
+ *       <td style="text-align:center">0
+ *       <td colspan="6" style="text-align:center">bits 5-0
  *     </tr>
  *   </table>
  * </blockquote>
--- a/jdk/src/java.base/share/classes/java/io/File.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/io/File.java	Fri Apr 28 13:52:45 2017 -0700
@@ -113,7 +113,7 @@
  * operating system-specific portion of storage for a file system.  A single
  * storage device (e.g. a physical disk-drive, flash memory, CD-ROM) may
  * contain multiple partitions.  The object, if any, will reside on the
- * partition <a name="partName">named</a> by some ancestor of the absolute
+ * partition <a id="partName">named</a> by some ancestor of the absolute
  * form of this pathname.
  *
  * <p> A file system may implement restrictions to certain operations on the
--- a/jdk/src/java.base/share/classes/java/io/LineNumberReader.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/io/LineNumberReader.java	Fri Apr 28 13:52:45 2017 -0700
@@ -39,7 +39,7 @@
  * the stream; it only changes the value that will be returned by
  * {@code getLineNumber()}.
  *
- * <p> A line is considered to be <a name="lt">terminated</a> by any one of a
+ * <p> A line is considered to be <a id="lt">terminated</a> by any one of a
  * line feed ('\n'), a carriage return ('\r'), or a carriage return followed
  * immediately by a linefeed.
  *
--- a/jdk/src/java.base/share/classes/java/io/PipedInputStream.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/io/PipedInputStream.java	Fri Apr 28 13:52:45 2017 -0700
@@ -39,7 +39,7 @@
  * The piped input stream contains a buffer,
  * decoupling read operations from write operations,
  * within limits.
- * A pipe is said to be <a name="BROKEN"> <i>broken</i> </a> if a
+ * A pipe is said to be <a id="BROKEN"> <i>broken</i> </a> if a
  * thread that was providing data bytes to the connected
  * piped output stream is no longer alive.
  *
--- a/jdk/src/java.base/share/classes/java/io/PipedOutputStream.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/io/PipedOutputStream.java	Fri Apr 28 13:52:45 2017 -0700
@@ -35,7 +35,7 @@
  * read from the connected <code>PipedInputStream</code> by some
  * other thread. Attempting to use both objects from a single thread
  * is not recommended as it may deadlock the thread.
- * The pipe is said to be <a name=BROKEN> <i>broken</i> </a> if a
+ * The pipe is said to be <a id=BROKEN> <i>broken</i> </a> if a
  * thread that was reading data bytes from the connected piped input
  * stream is no longer alive.
  *
--- a/jdk/src/java.base/share/classes/java/io/RandomAccessFile.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/io/RandomAccessFile.java	Fri Apr 28 13:52:45 2017 -0700
@@ -132,24 +132,24 @@
      * write to, the file specified by the {@link File} argument.  A new {@link
      * FileDescriptor} object is created to represent this file connection.
      *
-     * <p>The <a name="mode">{@code mode}</a> argument specifies the access mode
+     * <p>The <a id="mode">{@code mode}</a> argument specifies the access mode
      * in which the file is to be opened.  The permitted values and their
      * meanings are:
      *
      * <table summary="Access mode permitted values and meanings">
-     * <tr><th align="left">Value</th><th align="left">Meaning</th></tr>
-     * <tr><td valign="top">{@code "r"}</td>
+     * <tr><th style="text-align:left">Value</th><th style="text-align:left">Meaning</th></tr>
+     * <tr><td style="vertical-align:top">{@code "r"}</td>
      *     <td> Open for reading only. Invoking any of the {@code write}
      *     methods of the resulting object will cause an
      *     {@link java.io.IOException} to be thrown.</td></tr>
-     * <tr><td valign="top">{@code "rw"}</td>
+     * <tr><td style="vertical-align:top">{@code "rw"}</td>
      *     <td> Open for reading and writing.  If the file does not already
      *     exist then an attempt will be made to create it.</td></tr>
-     * <tr><td valign="top">{@code "rws"}</td>
+     * <tr><td style="vertical-align:top">{@code "rws"}</td>
      *     <td> Open for reading and writing, as with {@code "rw"}, and also
      *     require that every update to the file's content or metadata be
      *     written synchronously to the underlying storage device.</td></tr>
-     * <tr><td valign="top">{@code "rwd"}</td>
+     * <tr><td style="vertical-align:top">{@code "rwd"}</td>
      *     <td> Open for reading and writing, as with {@code "rw"}, and also
      *     require that every update to the file's content be written
      *     synchronously to the underlying storage device.</td></tr>
--- a/jdk/src/java.base/share/classes/java/lang/Character.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/lang/Character.java	Fri Apr 28 13:52:45 2017 -0700
@@ -56,7 +56,7 @@
  * <li><a href="http://www.unicode.org">http://www.unicode.org</a>
  * </ul>
  *
- * <h3><a name="unicode">Unicode Character Representations</a></h3>
+ * <h3><a id="unicode">Unicode Character Representations</a></h3>
  *
  * <p>The {@code char} data type (and therefore the value that a
  * {@code Character} object encapsulates) are based on the
@@ -70,9 +70,9 @@
  * definition</i></a> of the U+<i>n</i> notation in the Unicode
  * Standard.)
  *
- * <p><a name="BMP">The set of characters from U+0000 to U+FFFF</a> is
+ * <p><a id="BMP">The set of characters from U+0000 to U+FFFF</a> is
  * sometimes referred to as the <em>Basic Multilingual Plane (BMP)</em>.
- * <a name="supplementary">Characters</a> whose code points are greater
+ * <a id="supplementary">Characters</a> whose code points are greater
  * than U+FFFF are called <em>supplementary character</em>s.  The Java
  * platform uses the UTF-16 representation in {@code char} arrays and
  * in the {@code String} and {@code StringBuffer} classes. In
--- a/jdk/src/java.base/share/classes/java/lang/Class.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/lang/Class.java	Fri Apr 28 13:52:45 2017 -0700
@@ -726,16 +726,16 @@
      *
      * <blockquote><table summary="Element types and encodings">
      * <tr><th> Element Type <th> &nbsp;&nbsp;&nbsp; <th> Encoding
-     * <tr><td> boolean      <td> &nbsp;&nbsp;&nbsp; <td align=center> Z
-     * <tr><td> byte         <td> &nbsp;&nbsp;&nbsp; <td align=center> B
-     * <tr><td> char         <td> &nbsp;&nbsp;&nbsp; <td align=center> C
+     * <tr><td> boolean      <td> &nbsp;&nbsp;&nbsp; <td style="text-align:center"> Z
+     * <tr><td> byte         <td> &nbsp;&nbsp;&nbsp; <td style="text-align:center"> B
+     * <tr><td> char         <td> &nbsp;&nbsp;&nbsp; <td style="text-align:center"> C
      * <tr><td> class or interface
-     *                       <td> &nbsp;&nbsp;&nbsp; <td align=center> L<i>classname</i>;
-     * <tr><td> double       <td> &nbsp;&nbsp;&nbsp; <td align=center> D
-     * <tr><td> float        <td> &nbsp;&nbsp;&nbsp; <td align=center> F
-     * <tr><td> int          <td> &nbsp;&nbsp;&nbsp; <td align=center> I
-     * <tr><td> long         <td> &nbsp;&nbsp;&nbsp; <td align=center> J
-     * <tr><td> short        <td> &nbsp;&nbsp;&nbsp; <td align=center> S
+     *                       <td> &nbsp;&nbsp;&nbsp; <td style="text-align:center"> L<i>classname</i>;
+     * <tr><td> double       <td> &nbsp;&nbsp;&nbsp; <td style="text-align:center"> D
+     * <tr><td> float        <td> &nbsp;&nbsp;&nbsp; <td style="text-align:center"> F
+     * <tr><td> int          <td> &nbsp;&nbsp;&nbsp; <td style="text-align:center"> I
+     * <tr><td> long         <td> &nbsp;&nbsp;&nbsp; <td style="text-align:center"> J
+     * <tr><td> short        <td> &nbsp;&nbsp;&nbsp; <td style="text-align:center"> S
      * </table></blockquote>
      *
      * <p> The class or interface name <i>classname</i> is the binary name of
--- a/jdk/src/java.base/share/classes/java/lang/ClassLoader.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/lang/ClassLoader.java	Fri Apr 28 13:52:45 2017 -0700
@@ -114,7 +114,7 @@
  * duration of the class loading process (see {@link #loadClass
  * loadClass} methods).
  *
- * <h3> <a name="builtinLoaders">Run-time Built-in Class Loaders</a></h3>
+ * <h3> <a id="builtinLoaders">Run-time Built-in Class Loaders</a></h3>
  *
  * The Java run-time has the following built-in class loaders:
  *
@@ -183,7 +183,7 @@
  *     }
  * </pre></blockquote>
  *
- * <h3> <a name="name">Binary names</a> </h3>
+ * <h3> <a id="name">Binary names</a> </h3>
  *
  * <p> Any class name provided as a {@code String} parameter to methods in
  * {@code ClassLoader} must be a binary name as defined by
--- a/jdk/src/java.base/share/classes/java/lang/Math.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/lang/Math.java	Fri Apr 28 13:52:45 2017 -0700
@@ -1277,7 +1277,7 @@
     }
 
     /**
-     * Returns the floor modulus of the {@code long} and {@int} arguments.
+     * Returns the floor modulus of the {@code long} and {@code int} arguments.
      * <p>
      * The floor modulus is {@code x - (floorDiv(x, y) * y)},
      * has the same sign as the divisor {@code y}, and
--- a/jdk/src/java.base/share/classes/java/lang/ProcessBuilder.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/lang/ProcessBuilder.java	Fri Apr 28 13:52:45 2017 -0700
@@ -71,7 +71,7 @@
  * working directory of the current process, usually the directory
  * named by the system property {@code user.dir}.
  *
- * <li><a name="redirect-input">a source of <i>standard input</i></a>.
+ * <li><a id="redirect-input">a source of <i>standard input</i></a>.
  * By default, the subprocess reads input from a pipe.  Java code
  * can access this pipe via the output stream returned by
  * {@link Process#getOutputStream()}.  However, standard input may
@@ -86,7 +86,7 @@
  * <li>the {@link OutputStream#close() close} method does nothing
  * </ul>
  *
- * <li><a name="redirect-output">a destination for <i>standard output</i>
+ * <li><a id="redirect-output">a destination for <i>standard output</i>
  * and <i>standard error</i></a>.  By default, the subprocess writes standard
  * output and standard error to pipes.  Java code can access these pipes
  * via the input streams returned by {@link Process#getOutputStream()} and
--- a/jdk/src/java.base/share/classes/java/lang/Runtime.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/lang/Runtime.java	Fri Apr 28 13:52:45 2017 -0700
@@ -950,7 +950,7 @@
      * Java&nbsp;SE Platform.  A version string consists of a version number
      * optionally followed by pre-release and build information.
      *
-     * <h2><a name="verNum">Version numbers</a></h2>
+     * <h2><a id="verNum">Version numbers</a></h2>
      *
      * <p> A <em>version number</em>, {@code $VNUM}, is a non-empty sequence
      * of elements separated by period characters (U+002E).  An element is
@@ -971,7 +971,7 @@
      *
      * <ul>
      *
-     * <li><p> <a name="major">{@code $MAJOR}</a> --- The major version
+     * <li><p> <a id="major">{@code $MAJOR}</a> --- The major version
      * number, incremented for a major release that contains significant new
      * features as specified in a new edition of the Java&#160;SE Platform
      * Specification, <em>e.g.</em>, <a
@@ -983,7 +983,7 @@
      * number of JDK&#160;9 is {@code 9}.  When {@code $MAJOR} is incremented,
      * all subsequent elements are removed. </p></li>
      *
-     * <li><p> <a name="minor">{@code $MINOR}</a> --- The minor version
+     * <li><p> <a id="minor">{@code $MINOR}</a> --- The minor version
      * number, incremented for a minor update release that may contain
      * compatible bug fixes, revisions to standard APIs mandated by a
      * <a href="https://jcp.org/en/procedures/jcp2#5.3">Maintenance Release</a>
@@ -992,7 +992,7 @@
      * additional service providers, new garbage collectors, and ports to new
      * hardware architectures. </p></li>
      *
-     * <li><p> <a name="security">{@code $SECURITY}</a> --- The security
+     * <li><p> <a id="security">{@code $SECURITY}</a> --- The security
      * level, incremented for a security update release that contains critical
      * fixes including those necessary to improve security.  {@code $SECURITY}
      * is <strong>not</strong> reset when {@code $MINOR} is incremented.  A
@@ -1021,7 +1021,7 @@
      * sequence; <em>e.g.</em>, {@code 9.1.2} is less than {@code 9.1.2.1}.
      * </p>
      *
-     * <h2><a name="verStr">Version strings</a></h2>
+     * <h2><a id="verStr">Version strings</a></h2>
      *
      * <p> A <em>version string</em>, {@code $VSTR}, consists of a version
      * number {@code $VNUM}, as described above, optionally followed by
@@ -1038,17 +1038,17 @@
      *
      * <ul>
      *
-     * <li><p> <a name="pre">{@code $PRE}</a>, matching {@code ([a-zA-Z0-9]+)}
+     * <li><p> <a id="pre">{@code $PRE}</a>, matching {@code ([a-zA-Z0-9]+)}
      * --- A pre-release identifier.  Typically {@code ea}, for a
      * potentially unstable early-access release under active development,
      * or {@code internal}, for an internal developer build. </p></li>
      *
-     * <li><p> <a name="build">{@code $BUILD}</a>, matching {@code
+     * <li><p> <a id="build">{@code $BUILD}</a>, matching {@code
      * (0|[1-9][0-9]*)} --- The build number, incremented for each promoted
      * build.  {@code $BUILD} is reset to {@code 1} when any portion of {@code
      * $VNUM} is incremented. </p></li>
      *
-     * <li><p> <a name="opt">{@code $OPT}</a>, matching {@code
+     * <li><p> <a id="opt">{@code $OPT}</a>, matching {@code
      * ([-a-zA-Z0-9.]+)} --- Additional build information, if desired.  In
      * the case of an {@code internal} build this will often contain the date
      * and time of the build. </p></li>
--- a/jdk/src/java.base/share/classes/java/lang/StrictMath.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/lang/StrictMath.java	Fri Apr 28 13:52:45 2017 -0700
@@ -975,7 +975,7 @@
     }
 
     /**
-     * Returns the floor modulus of the {@code long} and {@int} arguments.
+     * Returns the floor modulus of the {@code long} and {@code int} arguments.
      * <p>
      * The floor modulus is {@code x - (floorDiv(x, y) * y)},
      * has the same sign as the divisor {@code y}, and
--- a/jdk/src/java.base/share/classes/java/lang/String.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/lang/String.java	Fri Apr 28 13:52:45 2017 -0700
@@ -2209,23 +2209,23 @@
      *     <th>Limit</th>
      *     <th>Result</th>
      * </tr>
-     * <tr><td align=center>:</td>
-     *     <td align=center>2</td>
+     * <tr><td style="text-align:center">:</td>
+     *     <td style="text-align:center">2</td>
      *     <td>{@code { "boo", "and:foo" }}</td></tr>
-     * <tr><td align=center>:</td>
-     *     <td align=center>5</td>
+     * <tr><td style="text-align:center">:</td>
+     *     <td style="text-align:center">5</td>
      *     <td>{@code { "boo", "and", "foo" }}</td></tr>
-     * <tr><td align=center>:</td>
-     *     <td align=center>-2</td>
+     * <tr><td style="text-align:center">:</td>
+     *     <td style="text-align:center">-2</td>
      *     <td>{@code { "boo", "and", "foo" }}</td></tr>
-     * <tr><td align=center>o</td>
-     *     <td align=center>5</td>
+     * <tr><td style="text-align:center">o</td>
+     *     <td style="text-align:center">5</td>
      *     <td>{@code { "b", "", ":and:f", "", "" }}</td></tr>
-     * <tr><td align=center>o</td>
-     *     <td align=center>-2</td>
+     * <tr><td style="text-align:center">o</td>
+     *     <td style="text-align:center">-2</td>
      *     <td>{@code { "b", "", ":and:f", "", "" }}</td></tr>
-     * <tr><td align=center>o</td>
-     *     <td align=center>0</td>
+     * <tr><td style="text-align:center">o</td>
+     *     <td style="text-align:center">0</td>
      *     <td>{@code { "b", "", ":and:f" }}</td></tr>
      * </table></blockquote>
      *
@@ -2331,9 +2331,9 @@
      *  <th>Regex</th>
      *  <th>Result</th>
      * </tr>
-     * <tr><td align=center>:</td>
+     * <tr><td style="text-align:center">:</td>
      *     <td>{@code { "boo", "and", "foo" }}</td></tr>
-     * <tr><td align=center>o</td>
+     * <tr><td style="text-align:center">o</td>
      *     <td>{@code { "b", "", ":and:f" }}</td></tr>
      * </table></blockquote>
      *
--- a/jdk/src/java.base/share/classes/java/lang/System.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/lang/System.java	Fri Apr 28 13:52:45 2017 -0700
@@ -899,7 +899,7 @@
      * being thrown.  If no exception is thrown the value of the
      * variable <code>name</code> is returned.
      *
-     * <p><a name="EnvironmentVSSystemProperties"><i>System
+     * <p><a id="EnvironmentVSSystemProperties"><i>System
      * properties</i> and <i>environment variables</i></a> are both
      * conceptually mappings between names and values.  Both
      * mechanisms can be used to pass user-defined information to a
--- a/jdk/src/java.base/share/classes/java/lang/invoke/MethodHandle.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/lang/invoke/MethodHandle.java	Fri Apr 28 13:52:45 2017 -0700
@@ -310,7 +310,7 @@
  * throwables locally, rethrowing only those which are legal in the context,
  * and wrapping ones which are illegal.
  *
- * <h1><a name="sigpoly"></a>Signature polymorphism</h1>
+ * <h1><a id="sigpoly"></a>Signature polymorphism</h1>
  * The unusual compilation and linkage behavior of
  * {@code invokeExact} and plain {@code invoke}
  * is referenced by the term <em>signature polymorphism</em>.
@@ -404,7 +404,7 @@
  * genericity with a Java type parameter.</li>
  * </ul>
  *
- * <h1><a name="maxarity"></a>Arity limits</h1>
+ * <h1><a id="maxarity"></a>Arity limits</h1>
  * The JVM imposes on all methods and constructors of any kind an absolute
  * limit of 255 stacked arguments.  This limit can appear more restrictive
  * in certain cases:
--- a/jdk/src/java.base/share/classes/java/lang/invoke/MethodHandleInfo.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/lang/invoke/MethodHandleInfo.java	Fri Apr 28 13:52:45 2017 -0700
@@ -35,7 +35,7 @@
  * A symbolic reference obtained by cracking a direct method handle
  * into its consitutent symbolic parts.
  * To crack a direct method handle, call {@link Lookup#revealDirect Lookup.revealDirect}.
- * <h1><a name="directmh"></a>Direct Method Handles</h1>
+ * <h1><a id="directmh"></a>Direct Method Handles</h1>
  * A <em>direct method handle</em> represents a method, constructor, or field without
  * any intervening argument bindings or other transformations.
  * The method, constructor, or field referred to by a direct method handle is called
@@ -77,7 +77,7 @@
  * handle with symbolic information (or caller binding) from an unexpected scope.
  * Use {@link java.lang.invoke.MethodHandles#reflectAs} to override this limitation.
  *
- * <h1><a name="refkinds"></a>Reference kinds</h1>
+ * <h1><a id="refkinds"></a>Reference kinds</h1>
  * The <a href="MethodHandles.Lookup.html#lookups">Lookup Factory Methods</a>
  * correspond to all major use cases for methods, constructors, and fields.
  * These use cases may be distinguished using small integers as follows:
--- a/jdk/src/java.base/share/classes/java/lang/invoke/MethodHandles.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/lang/invoke/MethodHandles.java	Fri Apr 28 13:52:45 2017 -0700
@@ -257,7 +257,7 @@
      * This includes all methods, constructors, and fields which are allowed to the lookup class,
      * even private ones.
      *
-     * <h1><a name="lookups"></a>Lookup Factory Methods</h1>
+     * <h1><a id="lookups"></a>Lookup Factory Methods</h1>
      * The factory methods on a {@code Lookup} object correspond to all major
      * use cases for methods, constructors, and fields.
      * Each method handle created by a factory method is the functional
@@ -267,7 +267,7 @@
      * the behavior of the resulting method handles:
      * <table border=1 cellpadding=5 summary="lookup method behaviors">
      * <tr>
-     *     <th><a name="equiv"></a>lookup expression</th>
+     *     <th><a id="equiv"></a>lookup expression</th>
      *     <th>member</th>
      *     <th>bytecode behavior</th>
      * </tr>
@@ -378,7 +378,7 @@
      * type having too many parameters.
      * </ul>
      *
-     * <h1><a name="access"></a>Access checking</h1>
+     * <h1><a id="access"></a>Access checking</h1>
      * Access checks are applied in the factory methods of {@code Lookup},
      * when a method handle is created.
      * This is a key difference from the Core Reflection API, since
@@ -483,7 +483,7 @@
      * with fewer access modes than the original lookup object.
      *
      * <p style="font-size:smaller;">
-     * <a name="privacc"></a>
+     * <a id="privacc"></a>
      * <em>Discussion of private access:</em>
      * We say that a lookup has <em>private access</em>
      * if its {@linkplain #lookupModes lookup modes}
@@ -506,7 +506,7 @@
      * whose <a href="MethodHandles.Lookup.html#equiv">bytecode behaviors</a> and Java language access permissions
      * can be reliably determined and emulated by method handles.
      *
-     * <h1><a name="secmgr"></a>Security manager interactions</h1>
+     * <h1><a id="secmgr"></a>Security manager interactions</h1>
      * Although bytecode instructions can only refer to classes in
      * a related class loader, this API can search for methods in any
      * class, as long as a reference to its {@code Class} object is
@@ -565,7 +565,7 @@
      * or else that is being accessed from a lookup class that has
      * rights to access the member or class.
      *
-     * <h1><a name="callsens"></a>Caller sensitive methods</h1>
+     * <h1><a id="callsens"></a>Caller sensitive methods</h1>
      * A small number of Java methods have a special property called caller sensitivity.
      * A <em>caller-sensitive</em> method can behave differently depending on the
      * identity of its immediate caller.
@@ -4497,7 +4497,7 @@
      * The init functions can observe initial pre-loop state, in the form {@code (a...)}.
      * Most clause functions will not need all of this information, but they will be formally connected to it
      * as if by {@link #dropArguments}.
-     * <a name="astar"></a>
+     * <a id="astar"></a>
      * More specifically, we shall use the notation {@code (V*)} to express an arbitrary prefix of a full
      * sequence {@code (V...)} (and likewise for {@code (v*)}, {@code (A*)}, {@code (a*)}).
      * In that notation, the general form of an init function parameter list
@@ -4510,7 +4510,7 @@
      * met by the inputs to the loop combinator.
      * <p>
      * <em>Effectively identical sequences:</em>
-     * <a name="effid"></a>
+     * <a id="effid"></a>
      * A parameter list {@code A} is defined to be <em>effectively identical</em> to another parameter list {@code B}
      * if {@code A} and {@code B} are identical, or if {@code A} is shorter and is identical with a proper prefix of {@code B}.
      * When speaking of an unordered set of parameter lists, we say they the set is "effectively identical"
--- a/jdk/src/java.base/share/classes/java/lang/invoke/VarHandle.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/lang/invoke/VarHandle.java	Fri Apr 28 13:52:45 2017 -0700
@@ -247,7 +247,7 @@
  * except the null reference.
  *
  *
- * <h1><a name="invoke">Invocation of an access mode's method</a></h1>
+ * <h1><a id="invoke">Invocation of an access mode's method</a></h1>
  * The first time an {@code invokevirtual} instruction is executed it is linked
  * by symbolically resolving the names in the instruction and verifying that
  * the method call is statically legal.  This also holds for calls to access mode
--- a/jdk/src/java.base/share/classes/java/lang/ref/Cleaner.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/lang/ref/Cleaner.java	Fri Apr 28 13:52:45 2017 -0700
@@ -119,7 +119,7 @@
  * Using a static nested class, as above, will avoid accidentally retaining the
  * object reference.
  * <p>
- * <a name="compatible-cleaners"></a>
+ * <a id="compatible-cleaners"></a>
  * Cleaning actions should be prepared to be invoked concurrently with
  * other cleaning actions.
  * Typically the cleaning actions should be very quick to execute
--- a/jdk/src/java.base/share/classes/java/lang/ref/package-info.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/lang/ref/package-info.java	Fri Apr 28 13:52:45 2017 -0700
@@ -93,7 +93,7 @@
  * structure, this check will add little overhead to the hashtable
  * access methods.
  *
- * <a name="reachability"></a>
+ * <a id="reachability"></a>
  * <h3>Reachability</h3>
  *
  * Going from strongest to weakest, the different levels of
--- a/jdk/src/java.base/share/classes/java/lang/reflect/AnnotatedElement.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/lang/reflect/AnnotatedElement.java	Fri Apr 28 13:52:45 2017 -0700
@@ -109,22 +109,22 @@
  * <caption>Overview of kind of presence detected by different AnnotatedElement methods</caption>
  * <tr><th colspan=2></th><th colspan=4>Kind of Presence</th>
  * <tr><th colspan=2>Method</th><th>Directly Present</th><th>Indirectly Present</th><th>Present</th><th>Associated</th>
- * <tr><td align=right>{@code T}</td><td>{@link #getAnnotation(Class) getAnnotation(Class&lt;T&gt;)}
+ * <tr><td style="text-align:right">{@code T}</td><td>{@link #getAnnotation(Class) getAnnotation(Class&lt;T&gt;)}
  * <td></td><td></td><td>X</td><td></td>
  * </tr>
- * <tr><td align=right>{@code Annotation[]}</td><td>{@link #getAnnotations getAnnotations()}
+ * <tr><td style="text-align:right">{@code Annotation[]}</td><td>{@link #getAnnotations getAnnotations()}
  * <td></td><td></td><td>X</td><td></td>
  * </tr>
- * <tr><td align=right>{@code T[]}</td><td>{@link #getAnnotationsByType(Class) getAnnotationsByType(Class&lt;T&gt;)}
+ * <tr><td style="text-align:right">{@code T[]}</td><td>{@link #getAnnotationsByType(Class) getAnnotationsByType(Class&lt;T&gt;)}
  * <td></td><td></td><td></td><td>X</td>
  * </tr>
- * <tr><td align=right>{@code T}</td><td>{@link #getDeclaredAnnotation(Class) getDeclaredAnnotation(Class&lt;T&gt;)}
+ * <tr><td style="text-align:right">{@code T}</td><td>{@link #getDeclaredAnnotation(Class) getDeclaredAnnotation(Class&lt;T&gt;)}
  * <td>X</td><td></td><td></td><td></td>
  * </tr>
- * <tr><td align=right>{@code Annotation[]}</td><td>{@link #getDeclaredAnnotations getDeclaredAnnotations()}
+ * <tr><td style="text-align:right">{@code Annotation[]}</td><td>{@link #getDeclaredAnnotations getDeclaredAnnotations()}
  * <td>X</td><td></td><td></td><td></td>
  * </tr>
- * <tr><td align=right>{@code T[]}</td><td>{@link #getDeclaredAnnotationsByType(Class) getDeclaredAnnotationsByType(Class&lt;T&gt;)}
+ * <tr><td style="text-align:right">{@code T[]}</td><td>{@link #getDeclaredAnnotationsByType(Class) getDeclaredAnnotationsByType(Class&lt;T&gt;)}
  * <td>X</td><td>X</td><td></td><td></td>
  * </tr>
  * </table>
--- a/jdk/src/java.base/share/classes/java/lang/reflect/Proxy.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/lang/reflect/Proxy.java	Fri Apr 28 13:52:45 2017 -0700
@@ -157,7 +157,7 @@
  * like they do for instances of {@code java.lang.Object}.
  * </ul>
  *
- * <h3><a name="membership">Package and Module Membership of Proxy Class</a></h3>
+ * <h3><a id="membership">Package and Module Membership of Proxy Class</a></h3>
  *
  * The package and module to which a proxy class belongs are chosen such that
  * the accessibility of the proxy class is in line with the accessibility of
@@ -218,7 +218,7 @@
  * a package that either is not exported/open by its containing module or is
  * exported/open in a qualified fashion by its containing module.
  *
- * <h3><a name="dynamicmodule">Dynamic Modules</a></h3>
+ * <h3><a id="dynamicmodule">Dynamic Modules</a></h3>
  * <p>
  * A dynamic module is a named module generated at runtime. A proxy class
  * defined in a dynamic module is encapsulated and not accessible to any module.
@@ -894,7 +894,7 @@
      * that dispatches method invocations to the specified invocation
      * handler.
      * <p>
-     * <a name="restrictions">{@code IllegalArgumentException} will be thrown
+     * <a id="restrictions">{@code IllegalArgumentException} will be thrown
      * if any of the following restrictions is violated:</a>
      * <ul>
      * <li>All of {@code Class} objects in the given {@code interfaces} array
--- a/jdk/src/java.base/share/classes/java/math/RoundingMode.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/math/RoundingMode.java	Fri Apr 28 13:52:45 2017 -0700
@@ -55,7 +55,7 @@
  * <caption><b>Summary of Rounding Operations Under Different Rounding Modes</b></caption>
  * <tr><th></th><th colspan=8>Result of rounding input to one digit with the given
  *                           rounding mode</th>
- * <tr valign=top>
+ * <tr style="vertical-align:top">
  * <th>Input Number</th>         <th>{@code UP}</th>
  *                                           <th>{@code DOWN}</th>
  *                                                        <th>{@code CEILING}</th>
@@ -65,16 +65,16 @@
  *                                                                                                                    <th>{@code HALF_EVEN}</th>
  *                                                                                                                                     <th>{@code UNNECESSARY}</th>
  *
- * <tr align=right><td>5.5</td>  <td>6</td>  <td>5</td>    <td>6</td>    <td>5</td>  <td>6</td>      <td>5</td>       <td>6</td>       <td>throw {@code ArithmeticException}</td>
- * <tr align=right><td>2.5</td>  <td>3</td>  <td>2</td>    <td>3</td>    <td>2</td>  <td>3</td>      <td>2</td>       <td>2</td>       <td>throw {@code ArithmeticException}</td>
- * <tr align=right><td>1.6</td>  <td>2</td>  <td>1</td>    <td>2</td>    <td>1</td>  <td>2</td>      <td>2</td>       <td>2</td>       <td>throw {@code ArithmeticException}</td>
- * <tr align=right><td>1.1</td>  <td>2</td>  <td>1</td>    <td>2</td>    <td>1</td>  <td>1</td>      <td>1</td>       <td>1</td>       <td>throw {@code ArithmeticException}</td>
- * <tr align=right><td>1.0</td>  <td>1</td>  <td>1</td>    <td>1</td>    <td>1</td>  <td>1</td>      <td>1</td>       <td>1</td>       <td>1</td>
- * <tr align=right><td>-1.0</td> <td>-1</td> <td>-1</td>   <td>-1</td>   <td>-1</td> <td>-1</td>     <td>-1</td>      <td>-1</td>      <td>-1</td>
- * <tr align=right><td>-1.1</td> <td>-2</td> <td>-1</td>   <td>-1</td>   <td>-2</td> <td>-1</td>     <td>-1</td>      <td>-1</td>      <td>throw {@code ArithmeticException}</td>
- * <tr align=right><td>-1.6</td> <td>-2</td> <td>-1</td>   <td>-1</td>   <td>-2</td> <td>-2</td>     <td>-2</td>      <td>-2</td>      <td>throw {@code ArithmeticException}</td>
- * <tr align=right><td>-2.5</td> <td>-3</td> <td>-2</td>   <td>-2</td>   <td>-3</td> <td>-3</td>     <td>-2</td>      <td>-2</td>      <td>throw {@code ArithmeticException}</td>
- * <tr align=right><td>-5.5</td> <td>-6</td> <td>-5</td>   <td>-5</td>   <td>-6</td> <td>-6</td>     <td>-5</td>      <td>-6</td>      <td>throw {@code ArithmeticException}</td>
+ * <tr style="text-align:right"><td>5.5</td>  <td>6</td>  <td>5</td>    <td>6</td>    <td>5</td>  <td>6</td>      <td>5</td>       <td>6</td>       <td>throw {@code ArithmeticException}</td>
+ * <tr style="text-align:right"><td>2.5</td>  <td>3</td>  <td>2</td>    <td>3</td>    <td>2</td>  <td>3</td>      <td>2</td>       <td>2</td>       <td>throw {@code ArithmeticException}</td>
+ * <tr style="text-align:right"><td>1.6</td>  <td>2</td>  <td>1</td>    <td>2</td>    <td>1</td>  <td>2</td>      <td>2</td>       <td>2</td>       <td>throw {@code ArithmeticException}</td>
+ * <tr style="text-align:right"><td>1.1</td>  <td>2</td>  <td>1</td>    <td>2</td>    <td>1</td>  <td>1</td>      <td>1</td>       <td>1</td>       <td>throw {@code ArithmeticException}</td>
+ * <tr style="text-align:right"><td>1.0</td>  <td>1</td>  <td>1</td>    <td>1</td>    <td>1</td>  <td>1</td>      <td>1</td>       <td>1</td>       <td>1</td>
+ * <tr style="text-align:right"><td>-1.0</td> <td>-1</td> <td>-1</td>   <td>-1</td>   <td>-1</td> <td>-1</td>     <td>-1</td>      <td>-1</td>      <td>-1</td>
+ * <tr style="text-align:right"><td>-1.1</td> <td>-2</td> <td>-1</td>   <td>-1</td>   <td>-2</td> <td>-1</td>     <td>-1</td>      <td>-1</td>      <td>throw {@code ArithmeticException}</td>
+ * <tr style="text-align:right"><td>-1.6</td> <td>-2</td> <td>-1</td>   <td>-1</td>   <td>-2</td> <td>-2</td>     <td>-2</td>      <td>-2</td>      <td>throw {@code ArithmeticException}</td>
+ * <tr style="text-align:right"><td>-2.5</td> <td>-3</td> <td>-2</td>   <td>-2</td>   <td>-3</td> <td>-3</td>     <td>-2</td>      <td>-2</td>      <td>throw {@code ArithmeticException}</td>
+ * <tr style="text-align:right"><td>-5.5</td> <td>-6</td> <td>-5</td>   <td>-5</td>   <td>-6</td> <td>-6</td>     <td>-5</td>      <td>-6</td>      <td>throw {@code ArithmeticException}</td>
  *</table>
  *
  *
@@ -102,18 +102,18 @@
          *<p>Example:
          *<table border>
          * <caption><b>Rounding mode UP Examples</b></caption>
-         *<tr valign=top><th>Input Number</th>
+         *<tr style="vertical-align:top"><th>Input Number</th>
          *    <th>Input rounded to one digit<br> with {@code UP} rounding
-         *<tr align=right><td>5.5</td>  <td>6</td>
-         *<tr align=right><td>2.5</td>  <td>3</td>
-         *<tr align=right><td>1.6</td>  <td>2</td>
-         *<tr align=right><td>1.1</td>  <td>2</td>
-         *<tr align=right><td>1.0</td>  <td>1</td>
-         *<tr align=right><td>-1.0</td> <td>-1</td>
-         *<tr align=right><td>-1.1</td> <td>-2</td>
-         *<tr align=right><td>-1.6</td> <td>-2</td>
-         *<tr align=right><td>-2.5</td> <td>-3</td>
-         *<tr align=right><td>-5.5</td> <td>-6</td>
+         *<tr style="text-align:right"><td>5.5</td>  <td>6</td>
+         *<tr style="text-align:right"><td>2.5</td>  <td>3</td>
+         *<tr style="text-align:right"><td>1.6</td>  <td>2</td>
+         *<tr style="text-align:right"><td>1.1</td>  <td>2</td>
+         *<tr style="text-align:right"><td>1.0</td>  <td>1</td>
+         *<tr style="text-align:right"><td>-1.0</td> <td>-1</td>
+         *<tr style="text-align:right"><td>-1.1</td> <td>-2</td>
+         *<tr style="text-align:right"><td>-1.6</td> <td>-2</td>
+         *<tr style="text-align:right"><td>-2.5</td> <td>-3</td>
+         *<tr style="text-align:right"><td>-5.5</td> <td>-6</td>
          *</table>
          */
     UP(BigDecimal.ROUND_UP),
@@ -126,18 +126,18 @@
          *<p>Example:
          *<table border>
          * <caption><b>Rounding mode DOWN Examples</b></caption>
-         *<tr valign=top><th>Input Number</th>
+         *<tr style="vertical-align:top"><th>Input Number</th>
          *    <th>Input rounded to one digit<br> with {@code DOWN} rounding
-         *<tr align=right><td>5.5</td>  <td>5</td>
-         *<tr align=right><td>2.5</td>  <td>2</td>
-         *<tr align=right><td>1.6</td>  <td>1</td>
-         *<tr align=right><td>1.1</td>  <td>1</td>
-         *<tr align=right><td>1.0</td>  <td>1</td>
-         *<tr align=right><td>-1.0</td> <td>-1</td>
-         *<tr align=right><td>-1.1</td> <td>-1</td>
-         *<tr align=right><td>-1.6</td> <td>-1</td>
-         *<tr align=right><td>-2.5</td> <td>-2</td>
-         *<tr align=right><td>-5.5</td> <td>-5</td>
+         *<tr style="text-align:right"><td>5.5</td>  <td>5</td>
+         *<tr style="text-align:right"><td>2.5</td>  <td>2</td>
+         *<tr style="text-align:right"><td>1.6</td>  <td>1</td>
+         *<tr style="text-align:right"><td>1.1</td>  <td>1</td>
+         *<tr style="text-align:right"><td>1.0</td>  <td>1</td>
+         *<tr style="text-align:right"><td>-1.0</td> <td>-1</td>
+         *<tr style="text-align:right"><td>-1.1</td> <td>-1</td>
+         *<tr style="text-align:right"><td>-1.6</td> <td>-1</td>
+         *<tr style="text-align:right"><td>-2.5</td> <td>-2</td>
+         *<tr style="text-align:right"><td>-5.5</td> <td>-5</td>
          *</table>
          */
     DOWN(BigDecimal.ROUND_DOWN),
@@ -151,18 +151,18 @@
          *<p>Example:
          *<table border>
          * <caption><b>Rounding mode CEILING Examples</b></caption>
-         *<tr valign=top><th>Input Number</th>
+         *<tr style="vertical-align:top"><th>Input Number</th>
          *    <th>Input rounded to one digit<br> with {@code CEILING} rounding
-         *<tr align=right><td>5.5</td>  <td>6</td>
-         *<tr align=right><td>2.5</td>  <td>3</td>
-         *<tr align=right><td>1.6</td>  <td>2</td>
-         *<tr align=right><td>1.1</td>  <td>2</td>
-         *<tr align=right><td>1.0</td>  <td>1</td>
-         *<tr align=right><td>-1.0</td> <td>-1</td>
-         *<tr align=right><td>-1.1</td> <td>-1</td>
-         *<tr align=right><td>-1.6</td> <td>-1</td>
-         *<tr align=right><td>-2.5</td> <td>-2</td>
-         *<tr align=right><td>-5.5</td> <td>-5</td>
+         *<tr style="text-align:right"><td>5.5</td>  <td>6</td>
+         *<tr style="text-align:right"><td>2.5</td>  <td>3</td>
+         *<tr style="text-align:right"><td>1.6</td>  <td>2</td>
+         *<tr style="text-align:right"><td>1.1</td>  <td>2</td>
+         *<tr style="text-align:right"><td>1.0</td>  <td>1</td>
+         *<tr style="text-align:right"><td>-1.0</td> <td>-1</td>
+         *<tr style="text-align:right"><td>-1.1</td> <td>-1</td>
+         *<tr style="text-align:right"><td>-1.6</td> <td>-1</td>
+         *<tr style="text-align:right"><td>-2.5</td> <td>-2</td>
+         *<tr style="text-align:right"><td>-5.5</td> <td>-5</td>
          *</table>
          */
     CEILING(BigDecimal.ROUND_CEILING),
@@ -176,18 +176,18 @@
          *<p>Example:
          *<table border>
          * <caption><b>Rounding mode FLOOR Examples</b></caption>
-         *<tr valign=top><th>Input Number</th>
+         *<tr style="vertical-align:top"><th>Input Number</th>
          *    <th>Input rounded to one digit<br> with {@code FLOOR} rounding
-         *<tr align=right><td>5.5</td>  <td>5</td>
-         *<tr align=right><td>2.5</td>  <td>2</td>
-         *<tr align=right><td>1.6</td>  <td>1</td>
-         *<tr align=right><td>1.1</td>  <td>1</td>
-         *<tr align=right><td>1.0</td>  <td>1</td>
-         *<tr align=right><td>-1.0</td> <td>-1</td>
-         *<tr align=right><td>-1.1</td> <td>-2</td>
-         *<tr align=right><td>-1.6</td> <td>-2</td>
-         *<tr align=right><td>-2.5</td> <td>-3</td>
-         *<tr align=right><td>-5.5</td> <td>-6</td>
+         *<tr style="text-align:right"><td>5.5</td>  <td>5</td>
+         *<tr style="text-align:right"><td>2.5</td>  <td>2</td>
+         *<tr style="text-align:right"><td>1.6</td>  <td>1</td>
+         *<tr style="text-align:right"><td>1.1</td>  <td>1</td>
+         *<tr style="text-align:right"><td>1.0</td>  <td>1</td>
+         *<tr style="text-align:right"><td>-1.0</td> <td>-1</td>
+         *<tr style="text-align:right"><td>-1.1</td> <td>-2</td>
+         *<tr style="text-align:right"><td>-1.6</td> <td>-2</td>
+         *<tr style="text-align:right"><td>-2.5</td> <td>-3</td>
+         *<tr style="text-align:right"><td>-5.5</td> <td>-6</td>
          *</table>
          */
     FLOOR(BigDecimal.ROUND_FLOOR),
@@ -203,18 +203,18 @@
          *<p>Example:
          *<table border>
          * <caption><b>Rounding mode HALF_UP Examples</b></caption>
-         *<tr valign=top><th>Input Number</th>
+         *<tr style="vertical-align:top"><th>Input Number</th>
          *    <th>Input rounded to one digit<br> with {@code HALF_UP} rounding
-         *<tr align=right><td>5.5</td>  <td>6</td>
-         *<tr align=right><td>2.5</td>  <td>3</td>
-         *<tr align=right><td>1.6</td>  <td>2</td>
-         *<tr align=right><td>1.1</td>  <td>1</td>
-         *<tr align=right><td>1.0</td>  <td>1</td>
-         *<tr align=right><td>-1.0</td> <td>-1</td>
-         *<tr align=right><td>-1.1</td> <td>-1</td>
-         *<tr align=right><td>-1.6</td> <td>-2</td>
-         *<tr align=right><td>-2.5</td> <td>-3</td>
-         *<tr align=right><td>-5.5</td> <td>-6</td>
+         *<tr style="text-align:right"><td>5.5</td>  <td>6</td>
+         *<tr style="text-align:right"><td>2.5</td>  <td>3</td>
+         *<tr style="text-align:right"><td>1.6</td>  <td>2</td>
+         *<tr style="text-align:right"><td>1.1</td>  <td>1</td>
+         *<tr style="text-align:right"><td>1.0</td>  <td>1</td>
+         *<tr style="text-align:right"><td>-1.0</td> <td>-1</td>
+         *<tr style="text-align:right"><td>-1.1</td> <td>-1</td>
+         *<tr style="text-align:right"><td>-1.6</td> <td>-2</td>
+         *<tr style="text-align:right"><td>-2.5</td> <td>-3</td>
+         *<tr style="text-align:right"><td>-5.5</td> <td>-6</td>
          *</table>
          */
     HALF_UP(BigDecimal.ROUND_HALF_UP),
@@ -229,18 +229,18 @@
          *<p>Example:
          *<table border>
          * <caption><b>Rounding mode HALF_DOWN Examples</b></caption>
-         *<tr valign=top><th>Input Number</th>
+         *<tr style="vertical-align:top"><th>Input Number</th>
          *    <th>Input rounded to one digit<br> with {@code HALF_DOWN} rounding
-         *<tr align=right><td>5.5</td>  <td>5</td>
-         *<tr align=right><td>2.5</td>  <td>2</td>
-         *<tr align=right><td>1.6</td>  <td>2</td>
-         *<tr align=right><td>1.1</td>  <td>1</td>
-         *<tr align=right><td>1.0</td>  <td>1</td>
-         *<tr align=right><td>-1.0</td> <td>-1</td>
-         *<tr align=right><td>-1.1</td> <td>-1</td>
-         *<tr align=right><td>-1.6</td> <td>-2</td>
-         *<tr align=right><td>-2.5</td> <td>-2</td>
-         *<tr align=right><td>-5.5</td> <td>-5</td>
+         *<tr style="text-align:right"><td>5.5</td>  <td>5</td>
+         *<tr style="text-align:right"><td>2.5</td>  <td>2</td>
+         *<tr style="text-align:right"><td>1.6</td>  <td>2</td>
+         *<tr style="text-align:right"><td>1.1</td>  <td>1</td>
+         *<tr style="text-align:right"><td>1.0</td>  <td>1</td>
+         *<tr style="text-align:right"><td>-1.0</td> <td>-1</td>
+         *<tr style="text-align:right"><td>-1.1</td> <td>-1</td>
+         *<tr style="text-align:right"><td>-1.6</td> <td>-2</td>
+         *<tr style="text-align:right"><td>-2.5</td> <td>-2</td>
+         *<tr style="text-align:right"><td>-5.5</td> <td>-5</td>
          *</table>
          */
     HALF_DOWN(BigDecimal.ROUND_HALF_DOWN),
@@ -262,18 +262,18 @@
          *<p>Example:
          *<table border>
          * <caption><b>Rounding mode HALF_EVEN Examples</b></caption>
-         *<tr valign=top><th>Input Number</th>
+         *<tr style="vertical-align:top"><th>Input Number</th>
          *    <th>Input rounded to one digit<br> with {@code HALF_EVEN} rounding
-         *<tr align=right><td>5.5</td>  <td>6</td>
-         *<tr align=right><td>2.5</td>  <td>2</td>
-         *<tr align=right><td>1.6</td>  <td>2</td>
-         *<tr align=right><td>1.1</td>  <td>1</td>
-         *<tr align=right><td>1.0</td>  <td>1</td>
-         *<tr align=right><td>-1.0</td> <td>-1</td>
-         *<tr align=right><td>-1.1</td> <td>-1</td>
-         *<tr align=right><td>-1.6</td> <td>-2</td>
-         *<tr align=right><td>-2.5</td> <td>-2</td>
-         *<tr align=right><td>-5.5</td> <td>-6</td>
+         *<tr style="text-align:right"><td>5.5</td>  <td>6</td>
+         *<tr style="text-align:right"><td>2.5</td>  <td>2</td>
+         *<tr style="text-align:right"><td>1.6</td>  <td>2</td>
+         *<tr style="text-align:right"><td>1.1</td>  <td>1</td>
+         *<tr style="text-align:right"><td>1.0</td>  <td>1</td>
+         *<tr style="text-align:right"><td>-1.0</td> <td>-1</td>
+         *<tr style="text-align:right"><td>-1.1</td> <td>-1</td>
+         *<tr style="text-align:right"><td>-1.6</td> <td>-2</td>
+         *<tr style="text-align:right"><td>-2.5</td> <td>-2</td>
+         *<tr style="text-align:right"><td>-5.5</td> <td>-6</td>
          *</table>
          */
     HALF_EVEN(BigDecimal.ROUND_HALF_EVEN),
@@ -286,18 +286,18 @@
          *<p>Example:
          *<table border>
          * <caption><b>Rounding mode UNNECESSARY Examples</b></caption>
-         *<tr valign=top><th>Input Number</th>
+         *<tr style="vertical-align:top"><th>Input Number</th>
          *    <th>Input rounded to one digit<br> with {@code UNNECESSARY} rounding
-         *<tr align=right><td>5.5</td>  <td>throw {@code ArithmeticException}</td>
-         *<tr align=right><td>2.5</td>  <td>throw {@code ArithmeticException}</td>
-         *<tr align=right><td>1.6</td>  <td>throw {@code ArithmeticException}</td>
-         *<tr align=right><td>1.1</td>  <td>throw {@code ArithmeticException}</td>
-         *<tr align=right><td>1.0</td>  <td>1</td>
-         *<tr align=right><td>-1.0</td> <td>-1</td>
-         *<tr align=right><td>-1.1</td> <td>throw {@code ArithmeticException}</td>
-         *<tr align=right><td>-1.6</td> <td>throw {@code ArithmeticException}</td>
-         *<tr align=right><td>-2.5</td> <td>throw {@code ArithmeticException}</td>
-         *<tr align=right><td>-5.5</td> <td>throw {@code ArithmeticException}</td>
+         *<tr style="text-align:right"><td>5.5</td>  <td>throw {@code ArithmeticException}</td>
+         *<tr style="text-align:right"><td>2.5</td>  <td>throw {@code ArithmeticException}</td>
+         *<tr style="text-align:right"><td>1.6</td>  <td>throw {@code ArithmeticException}</td>
+         *<tr style="text-align:right"><td>1.1</td>  <td>throw {@code ArithmeticException}</td>
+         *<tr style="text-align:right"><td>1.0</td>  <td>1</td>
+         *<tr style="text-align:right"><td>-1.0</td> <td>-1</td>
+         *<tr style="text-align:right"><td>-1.1</td> <td>throw {@code ArithmeticException}</td>
+         *<tr style="text-align:right"><td>-1.6</td> <td>throw {@code ArithmeticException}</td>
+         *<tr style="text-align:right"><td>-2.5</td> <td>throw {@code ArithmeticException}</td>
+         *<tr style="text-align:right"><td>-5.5</td> <td>throw {@code ArithmeticException}</td>
          *</table>
          */
     UNNECESSARY(BigDecimal.ROUND_UNNECESSARY);
--- a/jdk/src/java.base/share/classes/java/net/Inet4Address.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/net/Inet4Address.java	Fri Apr 28 13:52:45 2017 -0700
@@ -36,7 +36,7 @@
  * and <a href="http://www.ietf.org/rfc/rfc2365.txt"><i>RFC&nbsp;2365:
  * Administratively Scoped IP Multicast</i></a>
  *
- * <h3> <A NAME="format">Textual representation of IP addresses</a> </h3>
+ * <h3> <a id="format">Textual representation of IP addresses</a> </h3>
  *
  * Textual representation of IPv4 address used as input to methods
  * takes one of the following forms:
--- a/jdk/src/java.base/share/classes/java/net/Inet6Address.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/net/Inet6Address.java	Fri Apr 28 13:52:45 2017 -0700
@@ -38,13 +38,13 @@
  * Defined by <a href="http://www.ietf.org/rfc/rfc2373.txt">
  * <i>RFC&nbsp;2373: IP Version 6 Addressing Architecture</i></a>.
  *
- * <h3> <A NAME="format">Textual representation of IP addresses</a> </h3>
+ * <h3> <a id="format">Textual representation of IP addresses</a> </h3>
  *
  * Textual representation of IPv6 address used as input to methods
  * takes one of the following forms:
  *
  * <ol>
- *   <li><p> <A NAME="lform">The preferred form</a> is x:x:x:x:x:x:x:x,
+ *   <li><p> <a id="lform">The preferred form</a> is x:x:x:x:x:x:x:x,
  *   where the 'x's are
  *   the hexadecimal values of the eight 16-bit pieces of the
  *   address. This is the full form.  For example,
@@ -134,7 +134,7 @@
  *         address.</td></tr>
  * </table></blockquote>
  *
- * <h4><A NAME="scoped">Textual representation of IPv6 scoped addresses</a></h4>
+ * <h4><a id="scoped">Textual representation of IPv6 scoped addresses</a></h4>
  *
  * <p> The textual representation of IPv6 addresses as described above can be
  * extended to specify IPv6 scoped addresses. This extension to the basic
--- a/jdk/src/java.base/share/classes/java/net/URI.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/net/URI.java	Fri Apr 28 13:52:45 2017 -0700
@@ -281,7 +281,7 @@
  *           limited to US-ASCII)</i></td></tr>
  * </table></blockquote>
  *
- * <p><a name="legal-chars"></a> The set of all legal URI characters consists of
+ * <p><a id="legal-chars"></a> The set of all legal URI characters consists of
  * the <i>unreserved</i>, <i>reserved</i>, <i>escaped</i>, and <i>other</i>
  * characters.
  *
@@ -308,20 +308,20 @@
  *
  * <ul>
  *
- *   <li><p><a name="encode"></a> A character is <i>encoded</i> by replacing it
+ *   <li><p><a id="encode"></a> A character is <i>encoded</i> by replacing it
  *   with the sequence of escaped octets that represent that character in the
  *   UTF-8 character set.  The Euro currency symbol ({@code '\u005Cu20AC'}),
  *   for example, is encoded as {@code "%E2%82%AC"}.  <i>(<b>Deviation from
  *   RFC&nbsp;2396</b>, which does not specify any particular character
  *   set.)</i> </p></li>
  *
- *   <li><p><a name="quote"></a> An illegal character is <i>quoted</i> simply by
+ *   <li><p><a id="quote"></a> An illegal character is <i>quoted</i> simply by
  *   encoding it.  The space character, for example, is quoted by replacing it
  *   with {@code "%20"}.  UTF-8 contains US-ASCII, hence for US-ASCII
  *   characters this transformation has exactly the effect required by
  *   RFC&nbsp;2396. </p></li>
  *
- *   <li><p><a name="decode"></a>
+ *   <li><p><a id="decode"></a>
  *   A sequence of escaped octets is <i>decoded</i> by
  *   replacing it with the sequence of characters that it represents in the
  *   UTF-8 character set.  UTF-8 contains US-ASCII, hence decoding has the
@@ -983,7 +983,7 @@
      * <p> If the given URI is already absolute, or if this URI is opaque, then
      * the given URI is returned.
      *
-     * <p><a name="resolve-frag"></a> If the given URI's fragment component is
+     * <p><a id="resolve-frag"></a> If the given URI's fragment component is
      * defined, its path component is empty, and its scheme, authority, and
      * query components are undefined, then a URI with the given fragment but
      * with all other components equal to those of this URI is returned.  This
--- a/jdk/src/java.base/share/classes/java/net/URLConnection.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/net/URLConnection.java	Fri Apr 28 13:52:45 2017 -0700
@@ -54,7 +54,7 @@
  * read from and to write to the resource referenced by the URL. In
  * general, creating a connection to a URL is a multistep process:
  *
- * <center><table border=2 summary="Describes the process of creating a connection to a URL: openConnection() and connect() over time.">
+ * <div style="text-align:center"><table style="margin:0 auto" border=2 summary="Describes the process of creating a connection to a URL: openConnection() and connect() over time.">
  * <tr><th>{@code openConnection()}</th>
  *     <th>{@code connect()}</th></tr>
  * <tr><td>Manipulate parameters that affect the connection to the remote
@@ -63,7 +63,7 @@
  *         contents.</td></tr>
  * </table>
  * ----------------------------&gt;
- * <br>time</center>
+ * <br>time</div>
  *
  * <ol>
  * <li>The connection object is created by invoking the
--- a/jdk/src/java.base/share/classes/java/nio/MappedByteBuffer.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/nio/MappedByteBuffer.java	Fri Apr 28 13:52:45 2017 -0700
@@ -45,7 +45,7 @@
  * this program or another.  Whether or not such changes occur, and when they
  * occur, is operating-system dependent and therefore unspecified.
  *
- * <a name="inaccess"></a><p> All or part of a mapped byte buffer may become
+ * <a id="inaccess"></a><p> All or part of a mapped byte buffer may become
  * inaccessible at any time, for example if the mapped file is truncated.  An
  * attempt to access an inaccessible region of a mapped byte buffer will not
  * change the buffer's content and will cause an unspecified exception to be
--- a/jdk/src/java.base/share/classes/java/nio/X-Buffer.java.template	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/nio/X-Buffer.java.template	Fri Apr 28 13:52:45 2017 -0700
@@ -93,7 +93,7 @@
  *
 #if[byte]
  *
- * <a name="direct"></a>
+ * <a id="direct"></a>
  * <h2> Direct <i>vs.</i> non-direct buffers </h2>
  *
  * <p> A byte buffer is either <i>direct</i> or <i>non-direct</i>.  Given a
@@ -128,7 +128,7 @@
  * that explicit buffer management can be done in performance-critical code.
  *
  *
- * <a name="bin"></a>
+ * <a id="bin"></a>
  * <h2> Access to binary data </h2>
  *
  * <p> This class defines methods for reading and writing values of all other
@@ -155,7 +155,7 @@
  * parameters of the absolute <i>get</i> and <i>put</i> methods are in terms of
  * bytes rather than of the type being read or written.
  *
- * <a name="views"></a>
+ * <a id="views"></a>
  *
  * <p> For access to homogeneous binary data, that is, sequences of values of
  * the same type, this class defines methods that can create <i>views</i> of a
--- a/jdk/src/java.base/share/classes/java/nio/channels/AsynchronousChannelGroup.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/nio/channels/AsynchronousChannelGroup.java	Fri Apr 28 13:52:45 2017 -0700
@@ -88,7 +88,7 @@
  *   </tr>
  * </table>
  *
- * <a name="threading"></a><h2>Threading</h2>
+ * <a id="threading"></a><h2>Threading</h2>
  *
  * <p> The completion handler for an I/O operation initiated on a channel bound
  * to a group is guaranteed to be invoked by one of the pooled threads in the
@@ -103,7 +103,7 @@
  * handler directly by the initiating thread (see {@link
  * AsynchronousServerSocketChannel#accept(Object,CompletionHandler) accept}).
  *
- * <a name="shutdown"></a><h2>Shutdown and Termination</h2>
+ * <a id="shutdown"></a><h2>Shutdown and Termination</h2>
  *
  * <p> The {@link #shutdown() shutdown} method is used to initiate an <em>orderly
  * shutdown</em> of a group. An orderly shutdown marks the group as shutdown;
--- a/jdk/src/java.base/share/classes/java/nio/channels/FileChannel.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/nio/channels/FileChannel.java	Fri Apr 28 13:52:45 2017 -0700
@@ -118,7 +118,7 @@
  * versa.  Changing the file's content by writing bytes will change the content
  * seen by the originating object, and vice versa.
  *
- * <a name="open-mode"></a> <p> At various points this class specifies that an
+ * <a id="open-mode"></a> <p> At various points this class specifies that an
  * instance that is "open for reading," "open for writing," or "open for
  * reading and writing" is required.  A channel obtained via the {@link
  * java.io.FileInputStream#getChannel getChannel} method of a {@link
@@ -131,7 +131,7 @@
  * was created with mode {@code "r"} and will be open for reading and writing
  * if the instance was created with mode {@code "rw"}.
  *
- * <a name="append-mode"></a><p> A file channel that is open for writing may be in
+ * <a id="append-mode"></a><p> A file channel that is open for writing may be in
  * <i>append mode</i>, for example if it was obtained from a file-output stream
  * that was created by invoking the {@link
  * java.io.FileOutputStream#FileOutputStream(java.io.File,boolean)
--- a/jdk/src/java.base/share/classes/java/nio/channels/FileLock.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/nio/channels/FileLock.java	Fri Apr 28 13:52:45 2017 -0700
@@ -73,7 +73,7 @@
  * <p> File-lock objects are safe for use by multiple concurrent threads.
  *
  *
- * <a name="pdep"></a><h2> Platform dependencies </h2>
+ * <a id="pdep"></a><h2> Platform dependencies </h2>
  *
  * <p> This file-locking API is intended to map directly to the native locking
  * facility of the underlying operating system.  Thus the locks held on a file
--- a/jdk/src/java.base/share/classes/java/nio/channels/SelectableChannel.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/nio/channels/SelectableChannel.java	Fri Apr 28 13:52:45 2017 -0700
@@ -64,7 +64,7 @@
  * threads. </p>
  *
  *
- * <a name="bm"></a>
+ * <a id="bm"></a>
  * <h2>Blocking mode</h2>
  *
  * A selectable channel is either in <i>blocking</i> mode or in
--- a/jdk/src/java.base/share/classes/java/nio/channels/SelectionKey.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/nio/channels/SelectionKey.java	Fri Apr 28 13:52:45 2017 -0700
@@ -40,7 +40,7 @@
  * next selection operation.  The validity of a key may be tested by invoking
  * its {@link #isValid isValid} method.
  *
- * <a name="opsets"></a>
+ * <a id="opsets"></a>
  *
  * <p> A selection key contains two <i>operation sets</i> represented as
  * integer values.  Each bit of an operation set denotes a category of
--- a/jdk/src/java.base/share/classes/java/nio/channels/Selector.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/nio/channels/Selector.java	Fri Apr 28 13:52:45 2017 -0700
@@ -42,7 +42,7 @@
  * method of a custom selector provider.  A selector remains open until it is
  * closed via its {@link #close close} method.
  *
- * <a name="ks"></a>
+ * <a id="ks"></a>
  *
  * <p> A selectable channel's registration with a selector is represented by a
  * {@link SelectionKey} object.  A selector maintains three sets of selection
@@ -80,7 +80,7 @@
  * during the next selection operation, at which time the key will removed from
  * all of the selector's key sets.
  *
- * <a name="sks"></a><p> Keys are added to the selected-key set by selection
+ * <a id="sks"></a><p> Keys are added to the selected-key set by selection
  * operations.  A key may be removed directly from the selected-key set by
  * invoking the set's {@link java.util.Set#remove(java.lang.Object) remove}
  * method or by invoking the {@link java.util.Iterator#remove() remove} method
@@ -90,7 +90,7 @@
  * operations.  Keys may not be added directly to the selected-key set. </p>
  *
  *
- * <a name="selop"></a>
+ * <a id="selop"></a>
  * <h2>Selection</h2>
  *
  * <p> During each selection operation, keys may be added to and removed from a
@@ -183,7 +183,7 @@
  * <p> The {@link #close close} method synchronizes on the selector and all
  * three key sets in the same order as in a selection operation.
  *
- * <a name="ksc"></a>
+ * <a id="ksc"></a>
  *
  * <p> A selector's key and selected-key sets are not, in general, safe for use
  * by multiple concurrent threads.  If such a thread might modify one of these
--- a/jdk/src/java.base/share/classes/java/nio/charset/Charset-X-Coder.java.template	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/nio/charset/Charset-X-Coder.java.template	Fri Apr 28 13:52:45 2017 -0700
@@ -41,7 +41,7 @@
  * An engine that can transform a sequence of $itypesPhrase$ into a sequence of
  * $otypesPhrase$.
  *
- * <a name="steps"></a>
+ * <a id="steps"></a>
  *
  * <p> The input $itype$ sequence is provided in a $itype$ buffer or a series
  * of such buffers.  The output $otype$ sequence is written to a $otype$ buffer
@@ -76,14 +76,14 @@
  * examine this object and fill the input buffer, flush the output buffer, or
  * attempt to recover from $a$ $coding$ error, as appropriate, and try again.
  *
- * <a name="ce"></a>
+ * <a id="ce"></a>
  *
  * <p> There are two general types of $coding$ errors.  If the input $itype$
  * sequence is $notLegal$ then the input is considered <i>malformed</i>.  If
  * the input $itype$ sequence is legal but cannot be mapped to a valid
  * $outSequence$ then an <i>unmappable character</i> has been encountered.
  *
- * <a name="cae"></a>
+ * <a id="cae"></a>
  *
  * <p> How $a$ $coding$ error is handled depends upon the action requested for
  * that type of error, which is described by an instance of the {@link
--- a/jdk/src/java.base/share/classes/java/nio/charset/Charset.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/nio/charset/Charset.java	Fri Apr 28 13:52:45 2017 -0700
@@ -67,7 +67,7 @@
  * concurrent threads.
  *
  *
- * <a name="names"></a><a name="charenc"></a>
+ * <a id="names"></a><a id="charenc"></a>
  * <h2>Charset names</h2>
  *
  * <p> Charsets are named by strings composed of the following characters:
@@ -113,14 +113,14 @@
  * The aliases of a charset are returned by the {@link #aliases() aliases}
  * method.
  *
- * <p><a name="hn">Some charsets have an <i>historical name</i> that is defined for
+ * <p><a id="hn">Some charsets have an <i>historical name</i> that is defined for
  * compatibility with previous versions of the Java platform.</a>  A charset's
  * historical name is either its canonical name or one of its aliases.  The
  * historical name is returned by the {@code getEncoding()} methods of the
  * {@link java.io.InputStreamReader#getEncoding InputStreamReader} and {@link
  * java.io.OutputStreamWriter#getEncoding OutputStreamWriter} classes.
  *
- * <p><a name="iana"> </a>If a charset listed in the <a
+ * <p><a id="iana"> </a>If a charset listed in the <a
  * href="http://www.iana.org/assignments/character-sets"><i>IANA Charset
  * Registry</i></a> is supported by an implementation of the Java platform then
  * its canonical name must be the name listed in the registry. Many charsets
@@ -142,27 +142,27 @@
  *
  *
  *
- * <p><a name="standard">Every implementation of the Java platform is required to support the
+ * <p><a id="standard">Every implementation of the Java platform is required to support the
  * following standard charsets.</a>  Consult the release documentation for your
  * implementation to see if any other charsets are supported.  The behavior
  * of such optional charsets may differ between implementations.
  *
- * <blockquote><table width="80%" summary="Description of standard charsets">
- * <tr><th align="left">Charset</th><th align="left">Description</th></tr>
- * <tr><td valign=top>{@code US-ASCII}</td>
+ * <blockquote><table style="width:80%" summary="Description of standard charsets">
+ * <tr><th style="text-align:left">Charset</th><th style="text-align:left">Description</th></tr>
+ * <tr><td style="vertical-align:top">{@code US-ASCII}</td>
  *     <td>Seven-bit ASCII, a.k.a. {@code ISO646-US},
  *         a.k.a. the Basic Latin block of the Unicode character set</td></tr>
- * <tr><td valign=top><code>ISO-8859-1&nbsp;&nbsp;</code></td>
+ * <tr><td style="vertical-align:top"><code>ISO-8859-1&nbsp;&nbsp;</code></td>
  *     <td>ISO Latin Alphabet No. 1, a.k.a. {@code ISO-LATIN-1}</td></tr>
- * <tr><td valign=top>{@code UTF-8}</td>
+ * <tr><td style="vertical-align:top">{@code UTF-8}</td>
  *     <td>Eight-bit UCS Transformation Format</td></tr>
- * <tr><td valign=top>{@code UTF-16BE}</td>
+ * <tr><td style="vertical-align:top">{@code UTF-16BE}</td>
  *     <td>Sixteen-bit UCS Transformation Format,
  *         big-endian byte&nbsp;order</td></tr>
- * <tr><td valign=top>{@code UTF-16LE}</td>
+ * <tr><td style="vertical-align:top">{@code UTF-16LE}</td>
  *     <td>Sixteen-bit UCS Transformation Format,
  *         little-endian byte&nbsp;order</td></tr>
- * <tr><td valign=top>{@code UTF-16}</td>
+ * <tr><td style="vertical-align:top">{@code UTF-16}</td>
  *     <td>Sixteen-bit UCS Transformation Format,
  *         byte&nbsp;order identified by an optional byte-order mark</td></tr>
  * </table></blockquote>
--- a/jdk/src/java.base/share/classes/java/nio/file/Path.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/nio/file/Path.java	Fri Apr 28 13:52:45 2017 -0700
@@ -76,7 +76,7 @@
  *     BufferedReader reader = Files.newBufferedReader(path, StandardCharsets.UTF_8);
  * </pre>
  *
- * <a name="interop"></a><h2>Interoperability</h2>
+ * <a id="interop"></a><h2>Interoperability</h2>
  * <p> Paths associated with the default {@link
  * java.nio.file.spi.FileSystemProvider provider} are generally interoperable
  * with the {@link java.io.File java.io.File} class. Paths created by other
--- a/jdk/src/java.base/share/classes/java/text/BreakIterator.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/text/BreakIterator.java	Fri Apr 28 13:52:45 2017 -0700
@@ -68,19 +68,19 @@
  * (word, line, sentence, and so on). You must use a different iterator
  * for each unit boundary analysis you wish to perform.
  *
- * <p><a name="line"></a>
+ * <p><a id="line"></a>
  * Line boundary analysis determines where a text string can be
  * broken when line-wrapping. The mechanism correctly handles
  * punctuation and hyphenated words. Actual line breaking needs
  * to also consider the available line width and is handled by
  * higher-level software.
  *
- * <p><a name="sentence"></a>
+ * <p><a id="sentence"></a>
  * Sentence boundary analysis allows selection with correct interpretation
  * of periods within numbers and abbreviations, and trailing punctuation
  * marks such as quotation marks and parentheses.
  *
- * <p><a name="word"></a>
+ * <p><a id="word"></a>
  * Word boundary analysis is used by search and replace functions, as
  * well as within text editing applications that allow the user to
  * select words with a double click. Word selection provides correct
@@ -88,7 +88,7 @@
  * words. Characters that are not part of a word, such as symbols
  * or punctuation marks, have word-breaks on both sides.
  *
- * <p><a name="character"></a>
+ * <p><a id="character"></a>
  * Character boundary analysis allows users to interact with characters
  * as they expect to, for example, when moving the cursor through a text
  * string. Character boundary analysis provides correct navigation
--- a/jdk/src/java.base/share/classes/java/text/ChoiceFormat.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/text/ChoiceFormat.java	Fri Apr 28 13:52:45 2017 -0700
@@ -151,7 +151,7 @@
  * }</pre>
  * </blockquote>
  *
- * <h3><a name="synchronization">Synchronization</a></h3>
+ * <h3><a id="synchronization">Synchronization</a></h3>
  *
  * <p>
  * Choice formats are not synchronized.
--- a/jdk/src/java.base/share/classes/java/text/DateFormat.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/text/DateFormat.java	Fri Apr 28 13:52:45 2017 -0700
@@ -133,7 +133,7 @@
  * on the screen.
  * </ul>
  *
- * <h3><a name="synchronization">Synchronization</a></h3>
+ * <h3><a id="synchronization">Synchronization</a></h3>
  *
  * <p>
  * Date formats are not synchronized.
--- a/jdk/src/java.base/share/classes/java/text/DecimalFormat.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/text/DecimalFormat.java	Fri Apr 28 13:52:45 2017 -0700
@@ -175,11 +175,11 @@
  * <table border=0 cellspacing=3 cellpadding=0 summary="Chart showing symbol,
  *  location, localized, and meaning.">
  *     <tr style="background-color: rgb(204, 204, 255);">
- *          <th align=left>Symbol
- *          <th align=left>Location
- *          <th align=left>Localized?
- *          <th align=left>Meaning
- *     <tr valign=top>
+ *          <th style="text-align:left">Symbol
+ *          <th style="text-align:left">Location
+ *          <th style="text-align:left">Localized?
+ *          <th style="text-align:left">Meaning
+ *     <tr style="vertical-align:top">
  *          <td><code>0</code>
  *          <td>Number
  *          <td>Yes
@@ -189,7 +189,7 @@
  *          <td>Number
  *          <td>Yes
  *          <td>Digit, zero shows as absent
- *     <tr valign=top>
+ *     <tr style="vertical-align:top">
  *          <td><code>.</code>
  *          <td>Number
  *          <td>Yes
@@ -199,7 +199,7 @@
  *          <td>Number
  *          <td>Yes
  *          <td>Minus sign
- *     <tr valign=top>
+ *     <tr style="vertical-align:top">
  *          <td><code>,</code>
  *          <td>Number
  *          <td>Yes
@@ -210,7 +210,7 @@
  *          <td>Yes
  *          <td>Separates mantissa and exponent in scientific notation.
  *              <em>Need not be quoted in prefix or suffix.</em>
- *     <tr valign=top>
+ *     <tr style="vertical-align:top">
  *          <td><code>;</code>
  *          <td>Subpattern boundary
  *          <td>Yes
@@ -220,7 +220,7 @@
  *          <td>Prefix or suffix
  *          <td>Yes
  *          <td>Multiply by 100 and show as percentage
- *     <tr valign=top>
+ *     <tr style="vertical-align:top">
  *          <td><code>&#92;u2030</code>
  *          <td>Prefix or suffix
  *          <td>Yes
@@ -233,7 +233,7 @@
  *              doubled, replaced by international currency symbol.
  *              If present in a pattern, the monetary decimal separator
  *              is used instead of the decimal separator.
- *     <tr valign=top>
+ *     <tr style="vertical-align:top">
  *          <td><code>'</code>
  *          <td>Prefix or suffix
  *          <td>No
@@ -327,7 +327,7 @@
  * and <code>isParseIntegerOnly()</code> are false.
  * </ul>
  *
- * <h4><a name="synchronization">Synchronization</a></h4>
+ * <h4><a id="synchronization">Synchronization</a></h4>
  *
  * <p>
  * Decimal formats are generally not synchronized.
--- a/jdk/src/java.base/share/classes/java/text/Format.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/text/Format.java	Fri Apr 28 13:52:45 2017 -0700
@@ -115,7 +115,7 @@
  * the field. For examples of these constants, see <code>ERA_FIELD</code> and its
  * friends in {@link DateFormat}.
  *
- * <h4><a name="synchronization">Synchronization</a></h4>
+ * <h4><a id="synchronization">Synchronization</a></h4>
  *
  * <p>
  * Formats are generally not synchronized.
--- a/jdk/src/java.base/share/classes/java/text/MessageFormat.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/text/MessageFormat.java	Fri Apr 28 13:52:45 2017 -0700
@@ -68,7 +68,7 @@
  * behavior is defined by the pattern that you provide as well as the
  * subformats used for inserted arguments.
  *
- * <h3><a name="patterns">Patterns and Their Interpretation</a></h3>
+ * <h3><a id="patterns">Patterns and Their Interpretation</a></h3>
  *
  * <code>MessageFormat</code> uses patterns of the following form:
  * <blockquote><pre>
@@ -321,7 +321,7 @@
  * // result now equals {new String("z")}
  * </pre></blockquote>
  *
- * <h4><a name="synchronization">Synchronization</a></h4>
+ * <h4><a id="synchronization">Synchronization</a></h4>
  *
  * <p>
  * Message formats are not synchronized.
--- a/jdk/src/java.base/share/classes/java/text/NumberFormat.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/text/NumberFormat.java	Fri Apr 28 13:52:45 2017 -0700
@@ -166,7 +166,7 @@
  *      numbers: "(12)" for -12.
  * </ol>
  *
- * <h3><a name="synchronization">Synchronization</a></h3>
+ * <h3><a id="synchronization">Synchronization</a></h3>
  *
  * <p>
  * Number formats are generally not synchronized.
--- a/jdk/src/java.base/share/classes/java/text/SimpleDateFormat.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/text/SimpleDateFormat.java	Fri Apr 28 13:52:45 2017 -0700
@@ -94,10 +94,10 @@
  * <blockquote>
  * <table border=0 cellspacing=3 cellpadding=0 summary="Chart shows pattern letters, date/time component, presentation, and examples.">
  *     <tr style="background-color: rgb(204, 204, 255);">
- *         <th align=left>Letter
- *         <th align=left>Date or Time Component
- *         <th align=left>Presentation
- *         <th align=left>Examples
+ *         <th style="text-align:left">Letter
+ *         <th style="text-align:left">Date or Time Component
+ *         <th style="text-align:left">Presentation
+ *         <th style="text-align:left">Examples
  *     <tr>
  *         <td><code>G</code>
  *         <td>Era designator
@@ -218,18 +218,18 @@
  * Pattern letters are usually repeated, as their number determines the
  * exact presentation:
  * <ul>
- * <li><strong><a name="text">Text:</a></strong>
+ * <li><strong><a id="text">Text:</a></strong>
  *     For formatting, if the number of pattern letters is 4 or more,
  *     the full form is used; otherwise a short or abbreviated form
  *     is used if available.
  *     For parsing, both forms are accepted, independent of the number
  *     of pattern letters.<br><br></li>
- * <li><strong><a name="number">Number:</a></strong>
+ * <li><strong><a id="number">Number:</a></strong>
  *     For formatting, the number of pattern letters is the minimum
  *     number of digits, and shorter numbers are zero-padded to this amount.
  *     For parsing, the number of pattern letters is ignored unless
  *     it's needed to separate two adjacent fields.<br><br></li>
- * <li><strong><a name="year">Year:</a></strong>
+ * <li><strong><a id="year">Year:</a></strong>
  *     If the formatter's {@link #getCalendar() Calendar} is the Gregorian
  *     calendar, the following rules are applied.<br>
  *     <ul>
@@ -270,7 +270,7 @@
  *     DateFormat#getCalendar() getCalendar()}.{@link
  *     java.util.Calendar#isWeekDateSupported()
  *     isWeekDateSupported()}.<br><br></li>
- * <li><strong><a name="month">Month:</a></strong>
+ * <li><strong><a id="month">Month:</a></strong>
  *     If the number of pattern letters is 3 or more, the month is
  *     interpreted as <a href="#text">text</a>; otherwise,
  *     it is interpreted as a <a href="#number">number</a>.<br>
@@ -291,12 +291,12 @@
  *     <li>Letter <em>L</em> produces the standalone form of month names.</li>
  *     </ul>
  *     <br></li>
- * <li><strong><a name="timezone">General time zone:</a></strong>
+ * <li><strong><a id="timezone">General time zone:</a></strong>
  *     Time zones are interpreted as <a href="#text">text</a> if they have
  *     names. For time zones representing a GMT offset value, the
  *     following syntax is used:
  *     <pre>
- *     <a name="GMTOffsetTimeZone"><i>GMTOffsetTimeZone:</i></a>
+ *     <a id="GMTOffsetTimeZone"><i>GMTOffsetTimeZone:</i></a>
  *             <code>GMT</code> <i>Sign</i> <i>Hours</i> <code>:</code> <i>Minutes</i>
  *     <i>Sign:</i> one of
  *             <code>+ -</code>
@@ -312,7 +312,7 @@
  *     from the Basic Latin block of the Unicode standard.
  *     <p>For parsing, <a href="#rfc822timezone">RFC 822 time zones</a> are also
  *     accepted.<br><br></li>
- * <li><strong><a name="rfc822timezone">RFC 822 time zone:</a></strong>
+ * <li><strong><a id="rfc822timezone">RFC 822 time zone:</a></strong>
  *     For formatting, the RFC 822 4-digit time zone format is used:
  *
  *     <pre>
@@ -325,7 +325,7 @@
  *
  *     <p>For parsing, <a href="#timezone">general time zones</a> are also
  *     accepted.
- * <li><strong><a name="iso8601timezone">ISO 8601 Time zone:</a></strong>
+ * <li><strong><a id="iso8601timezone">ISO 8601 Time zone:</a></strong>
  *     The number of pattern letters designates the format for both formatting
  *     and parsing as follows:
  *     <pre>
@@ -372,8 +372,8 @@
  * <blockquote>
  * <table border=0 cellspacing=3 cellpadding=0 summary="Examples of date and time patterns interpreted in the U.S. locale">
  *     <tr style="background-color: rgb(204, 204, 255);">
- *         <th align=left>Date and Time Pattern
- *         <th align=left>Result
+ *         <th style="text-align:left">Date and Time Pattern
+ *         <th style="text-align:left">Result
  *     <tr>
  *         <td><code>"yyyy.MM.dd G 'at' HH:mm:ss z"</code>
  *         <td><code>2001.07.04 AD at 12:08:56 PDT</code>
@@ -410,7 +410,7 @@
  * </table>
  * </blockquote>
  *
- * <h4><a name="synchronization">Synchronization</a></h4>
+ * <h4><a id="synchronization">Synchronization</a></h4>
  *
  * <p>
  * Date formats are not synchronized.
--- a/jdk/src/java.base/share/classes/java/time/chrono/HijrahChronology.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/time/chrono/HijrahChronology.java	Fri Apr 28 13:52:45 2017 -0700
@@ -106,10 +106,10 @@
  * <table cellpadding="2" summary="Variants of Hijrah Calendars">
  * <thead>
  * <tr class="tableSubHeadingColor">
- * <th class="colFirst" align="left" >Chronology ID</th>
- * <th class="colFirst" align="left" >Calendar Type</th>
- * <th class="colFirst" align="left" >Locale extension, see {@link java.util.Locale}</th>
- * <th class="colLast" align="left" >Description</th>
+ * <th class="colFirst" style="text-align:left" >Chronology ID</th>
+ * <th class="colFirst" style="text-align:left" >Calendar Type</th>
+ * <th class="colFirst" style="text-align:left" >Locale extension, see {@link java.util.Locale}</th>
+ * <th class="colLast" style="text-align:left" >Description</th>
  * </tr>
  * </thead>
  * <tbody>
@@ -150,9 +150,9 @@
  * <table cellpadding="2" summary="Configuration of Hijrah Calendar">
  * <thead>
  * <tr class="tableSubHeadingColor">
- * <th class="colFirst" align="left" > Property Name</th>
- * <th class="colFirst" align="left" > Property value</th>
- * <th class="colLast" align="left" > Description </th>
+ * <th class="colFirst" style="text-align:left" > Property Name</th>
+ * <th class="colFirst" style="text-align:left" > Property value</th>
+ * <th class="colLast" style="text-align:left" > Description </th>
  * </tr>
  * </thead>
  * <tbody>
--- a/jdk/src/java.base/share/classes/java/time/chrono/IsoEra.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/time/chrono/IsoEra.java	Fri Apr 28 13:52:45 2017 -0700
@@ -73,9 +73,9 @@
  * <table summary="ISO years and eras" cellpadding="2" cellspacing="3" border="0" >
  * <thead>
  * <tr class="tableSubHeadingColor">
- * <th class="colFirst" align="left">year-of-era</th>
- * <th class="colFirst" align="left">era</th>
- * <th class="colLast" align="left">proleptic-year</th>
+ * <th class="colFirst" style="text-align:left">year-of-era</th>
+ * <th class="colFirst" style="text-align:left">era</th>
+ * <th class="colLast" style="text-align:left">proleptic-year</th>
  * </tr>
  * </thead>
  * <tbody>
--- a/jdk/src/java.base/share/classes/java/time/chrono/MinguoEra.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/time/chrono/MinguoEra.java	Fri Apr 28 13:52:45 2017 -0700
@@ -74,10 +74,10 @@
  * <table summary="Minguo years and eras" cellpadding="2" cellspacing="3" border="0" >
  * <thead>
  * <tr class="tableSubHeadingColor">
- * <th class="colFirst" align="left">year-of-era</th>
- * <th class="colFirst" align="left">era</th>
- * <th class="colFirst" align="left">proleptic-year</th>
- * <th class="colLast" align="left">ISO proleptic-year</th>
+ * <th class="colFirst" style="text-align:left">year-of-era</th>
+ * <th class="colFirst" style="text-align:left">era</th>
+ * <th class="colFirst" style="text-align:left">proleptic-year</th>
+ * <th class="colLast" style="text-align:left">ISO proleptic-year</th>
  * </tr>
  * </thead>
  * <tbody>
--- a/jdk/src/java.base/share/classes/java/time/chrono/ThaiBuddhistEra.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/time/chrono/ThaiBuddhistEra.java	Fri Apr 28 13:52:45 2017 -0700
@@ -74,10 +74,10 @@
  * <table summary="Buddhist years and eras" cellpadding="2" cellspacing="3" border="0" >
  * <thead>
  * <tr class="tableSubHeadingColor">
- * <th class="colFirst" align="left">year-of-era</th>
- * <th class="colFirst" align="left">era</th>
- * <th class="colFirst" align="left">proleptic-year</th>
- * <th class="colLast" align="left">ISO proleptic-year</th>
+ * <th class="colFirst" style="text-align:left">year-of-era</th>
+ * <th class="colFirst" style="text-align:left">era</th>
+ * <th class="colFirst" style="text-align:left">proleptic-year</th>
+ * <th class="colLast" style="text-align:left">ISO proleptic-year</th>
  * </tr>
  * </thead>
  * <tbody>
--- a/jdk/src/java.base/share/classes/java/time/format/DateTimeFormatter.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/time/format/DateTimeFormatter.java	Fri Apr 28 13:52:45 2017 -0700
@@ -153,9 +153,9 @@
  * <table summary="Predefined Formatters" cellpadding="2" cellspacing="3" border="0" >
  * <thead>
  * <tr class="tableSubHeadingColor">
- * <th class="colFirst" align="left">Formatter</th>
- * <th class="colFirst" align="left">Description</th>
- * <th class="colLast" align="left">Example</th>
+ * <th class="colFirst" style="text-align:left">Formatter</th>
+ * <th class="colFirst" style="text-align:left">Description</th>
+ * <th class="colLast" style="text-align:left">Example</th>
  * </tr>
  * </thead>
  * <tbody>
--- a/jdk/src/java.base/share/classes/java/util/Base64.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/util/Base64.java	Fri Apr 28 13:52:45 2017 -0700
@@ -41,21 +41,21 @@
  * <a href="http://www.ietf.org/rfc/rfc2045.txt">RFC 2045</a>.
  *
  * <ul>
- * <li><a name="basic"><b>Basic</b></a>
+ * <li><a id="basic"><b>Basic</b></a>
  * <p> Uses "The Base64 Alphabet" as specified in Table 1 of
  *     RFC 4648 and RFC 2045 for encoding and decoding operation.
  *     The encoder does not add any line feed (line separator)
  *     character. The decoder rejects data that contains characters
  *     outside the base64 alphabet.</p></li>
  *
- * <li><a name="url"><b>URL and Filename safe</b></a>
+ * <li><a id="url"><b>URL and Filename safe</b></a>
  * <p> Uses the "URL and Filename safe Base64 Alphabet" as specified
  *     in Table 2 of RFC 4648 for encoding and decoding. The
  *     encoder does not add any line feed (line separator) character.
  *     The decoder rejects data that contains characters outside the
  *     base64 alphabet.</p></li>
  *
- * <li><a name="mime"><b>MIME</b></a>
+ * <li><a id="mime"><b>MIME</b></a>
  * <p> Uses the "The Base64 Alphabet" as specified in Table 1 of
  *     RFC 2045 for encoding and decoding operation. The encoded output
  *     must be represented in lines of no more than 76 characters each
--- a/jdk/src/java.base/share/classes/java/util/Calendar.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/util/Calendar.java	Fri Apr 28 13:52:45 2017 -0700
@@ -67,7 +67,7 @@
  * <code>DAY_OF_MONTH</code>, <code>HOUR</code>, and so on, and for
  * manipulating the calendar fields, such as getting the date of the next
  * week. An instant in time can be represented by a millisecond value that is
- * an offset from the <a name="Epoch"><em>Epoch</em></a>, January 1, 1970
+ * an offset from the <a id="Epoch"><em>Epoch</em></a>, January 1, 1970
  * 00:00:00.000 GMT (Gregorian).
  *
  * <p>The class also provides additional fields and methods for
@@ -124,7 +124,7 @@
  * calculating its time or calendar field values if any out-of-range field
  * value has been set.
  *
- * <h4><a name="first_week">First Week</a></h4>
+ * <h4><a id="first_week">First Week</a></h4>
  *
  * <code>Calendar</code> defines a locale-specific seven day week using two
  * parameters: the first day of the week and the minimal days in first week
@@ -154,13 +154,13 @@
  * calendar field values to determine the date and time in the
  * following way.
  *
- * <p><a name="resolution">If there is any conflict in calendar field values,
+ * <p><a id="resolution">If there is any conflict in calendar field values,
  * <code>Calendar</code> gives priorities to calendar fields that have been set
  * more recently.</a> The following are the default combinations of the
  * calendar fields. The most recent combination, as determined by the
  * most recently set single field, will be used.
  *
- * <p><a name="date_resolution">For the date fields</a>:
+ * <p><a id="date_resolution">For the date fields</a>:
  * <blockquote>
  * <pre>
  * YEAR + MONTH + DAY_OF_MONTH
@@ -170,7 +170,7 @@
  * YEAR + DAY_OF_WEEK + WEEK_OF_YEAR
  * </pre></blockquote>
  *
- * <a name="time_resolution">For the time of day fields</a>:
+ * <a id="time_resolution">For the time of day fields</a>:
  * <blockquote>
  * <pre>
  * HOUR_OF_DAY
--- a/jdk/src/java.base/share/classes/java/util/Collection.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/util/Collection.java	Fri Apr 28 13:52:45 2017 -0700
@@ -64,7 +64,7 @@
  * but is not required to, throw the exception if the collection to be added
  * is empty.
  *
- * <p><a name="optional-restrictions">
+ * <p><a id="optional-restrictions">
  * Some collection implementations have restrictions on the elements that
  * they may contain.</a>  For example, some implementations prohibit null elements,
  * and some have restrictions on the types of their elements.  Attempting to
--- a/jdk/src/java.base/share/classes/java/util/Deque.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/util/Deque.java	Fri Apr 28 13:52:45 2017 -0700
@@ -60,15 +60,15 @@
  * <caption>Summary of Deque methods</caption>
  *  <tr>
  *    <td></td>
- *    <td ALIGN=CENTER COLSPAN = 2> <b>First Element (Head)</b></td>
- *    <td ALIGN=CENTER COLSPAN = 2> <b>Last Element (Tail)</b></td>
+ *    <td style="text-align:center" COLSPAN = 2> <b>First Element (Head)</b></td>
+ *    <td style="text-align:center" COLSPAN = 2> <b>Last Element (Tail)</b></td>
  *  </tr>
  *  <tr>
  *    <td></td>
- *    <td ALIGN=CENTER><em>Throws exception</em></td>
- *    <td ALIGN=CENTER><em>Special value</em></td>
- *    <td ALIGN=CENTER><em>Throws exception</em></td>
- *    <td ALIGN=CENTER><em>Special value</em></td>
+ *    <td style="text-align:center"><em>Throws exception</em></td>
+ *    <td style="text-align:center"><em>Special value</em></td>
+ *    <td style="text-align:center"><em>Throws exception</em></td>
+ *    <td style="text-align:center"><em>Special value</em></td>
  *  </tr>
  *  <tr>
  *    <td><b>Insert</b></td>
@@ -102,8 +102,8 @@
  * <table BORDER CELLPADDING=3 CELLSPACING=1>
  * <caption>Comparison of Queue and Deque methods</caption>
  *  <tr>
- *    <td ALIGN=CENTER> <b>{@code Queue} Method</b></td>
- *    <td ALIGN=CENTER> <b>Equivalent {@code Deque} Method</b></td>
+ *    <td style="text-align:center"> <b>{@code Queue} Method</b></td>
+ *    <td style="text-align:center"> <b>Equivalent {@code Deque} Method</b></td>
  *  </tr>
  *  <tr>
  *    <td>{@link java.util.Queue#add add(e)}</td>
@@ -140,8 +140,8 @@
  * <table BORDER CELLPADDING=3 CELLSPACING=1>
  * <caption>Comparison of Stack and Deque methods</caption>
  *  <tr>
- *    <td ALIGN=CENTER> <b>Stack Method</b></td>
- *    <td ALIGN=CENTER> <b>Equivalent {@code Deque} Method</b></td>
+ *    <td style="text-align:center"> <b>Stack Method</b></td>
+ *    <td style="text-align:center"> <b>Equivalent {@code Deque} Method</b></td>
  *  </tr>
  *  <tr>
  *    <td>{@link #push push(e)}</td>
--- a/jdk/src/java.base/share/classes/java/util/Formatter.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/util/Formatter.java	Fri Apr 28 13:52:45 2017 -0700
@@ -137,7 +137,7 @@
  *   // -&gt; s == "Duke's Birthday: May 23, 1995"
  * </pre></blockquote>
  *
- * <h3><a name="org">Organization</a></h3>
+ * <h3><a id="org">Organization</a></h3>
  *
  * <p> This specification is divided into two sections.  The first section, <a
  * href="#summary">Summary</a>, covers the basic formatting concepts.  This
@@ -147,13 +147,13 @@
  * details.  It is intended for users who want more precise specification of
  * formatting behavior.
  *
- * <h3><a name="summary">Summary</a></h3>
+ * <h3><a id="summary">Summary</a></h3>
  *
  * <p> This section is intended to provide a brief overview of formatting
  * concepts.  For precise behavioral details, refer to the <a
  * href="#detail">Details</a> section.
  *
- * <h4><a name="syntax">Format String Syntax</a></h4>
+ * <h4><a id="syntax">Format String Syntax</a></h4>
  *
  * <p> Every method which produces formatted output requires a <i>format
  * string</i> and an <i>argument list</i>.  The format string is a {@link
@@ -292,77 +292,77 @@
  *
  * <table cellpadding=5 summary="genConv">
  *
- * <tr><th valign="bottom"> Conversion
- *     <th valign="bottom"> Argument Category
- *     <th valign="bottom"> Description
- *
- * <tr><td valign="top"> {@code 'b'}, {@code 'B'}
- *     <td valign="top"> general
+ * <tr><th style="vertical-align:bottom"> Conversion
+ *     <th style="vertical-align:bottom"> Argument Category
+ *     <th style="vertical-align:bottom"> Description
+ *
+ * <tr><td style="vertical-align:top"> {@code 'b'}, {@code 'B'}
+ *     <td style="vertical-align:top"> general
  *     <td> If the argument <i>arg</i> is {@code null}, then the result is
  *     "{@code false}".  If <i>arg</i> is a {@code boolean} or {@link
  *     Boolean}, then the result is the string returned by {@link
  *     String#valueOf(boolean) String.valueOf(arg)}.  Otherwise, the result is
  *     "true".
  *
- * <tr><td valign="top"> {@code 'h'}, {@code 'H'}
- *     <td valign="top"> general
+ * <tr><td style="vertical-align:top"> {@code 'h'}, {@code 'H'}
+ *     <td style="vertical-align:top"> general
  *     <td> The result is obtained by invoking
  *     {@code Integer.toHexString(arg.hashCode())}.
  *
- * <tr><td valign="top"> {@code 's'}, {@code 'S'}
- *     <td valign="top"> general
+ * <tr><td style="vertical-align:top"> {@code 's'}, {@code 'S'}
+ *     <td style="vertical-align:top"> general
  *     <td> If <i>arg</i> implements {@link Formattable}, then
  *     {@link Formattable#formatTo arg.formatTo} is invoked. Otherwise, the
  *     result is obtained by invoking {@code arg.toString()}.
  *
- * <tr><td valign="top">{@code 'c'}, {@code 'C'}
- *     <td valign="top"> character
+ * <tr><td style="vertical-align:top">{@code 'c'}, {@code 'C'}
+ *     <td style="vertical-align:top"> character
  *     <td> The result is a Unicode character
  *
- * <tr><td valign="top">{@code 'd'}
- *     <td valign="top"> integral
+ * <tr><td style="vertical-align:top">{@code 'd'}
+ *     <td style="vertical-align:top"> integral
  *     <td> The result is formatted as a decimal integer
  *
- * <tr><td valign="top">{@code 'o'}
- *     <td valign="top"> integral
+ * <tr><td style="vertical-align:top">{@code 'o'}
+ *     <td style="vertical-align:top"> integral
  *     <td> The result is formatted as an octal integer
  *
- * <tr><td valign="top">{@code 'x'}, {@code 'X'}
- *     <td valign="top"> integral
+ * <tr><td style="vertical-align:top">{@code 'x'}, {@code 'X'}
+ *     <td style="vertical-align:top"> integral
  *     <td> The result is formatted as a hexadecimal integer
  *
- * <tr><td valign="top">{@code 'e'}, {@code 'E'}
- *     <td valign="top"> floating point
+ * <tr><td style="vertical-align:top">{@code 'e'}, {@code 'E'}
+ *     <td style="vertical-align:top"> floating point
  *     <td> The result is formatted as a decimal number in computerized
  *     scientific notation
  *
- * <tr><td valign="top">{@code 'f'}
- *     <td valign="top"> floating point
+ * <tr><td style="vertical-align:top">{@code 'f'}
+ *     <td style="vertical-align:top"> floating point
  *     <td> The result is formatted as a decimal number
  *
- * <tr><td valign="top">{@code 'g'}, {@code 'G'}
- *     <td valign="top"> floating point
+ * <tr><td style="vertical-align:top">{@code 'g'}, {@code 'G'}
+ *     <td style="vertical-align:top"> floating point
  *     <td> The result is formatted using computerized scientific notation or
  *     decimal format, depending on the precision and the value after rounding.
  *
- * <tr><td valign="top">{@code 'a'}, {@code 'A'}
- *     <td valign="top"> floating point
+ * <tr><td style="vertical-align:top">{@code 'a'}, {@code 'A'}
+ *     <td style="vertical-align:top"> floating point
  *     <td> The result is formatted as a hexadecimal floating-point number with
  *     a significand and an exponent. This conversion is <b>not</b> supported
  *     for the {@code BigDecimal} type despite the latter's being in the
  *     <i>floating point</i> argument category.
  *
- * <tr><td valign="top">{@code 't'}, {@code 'T'}
- *     <td valign="top"> date/time
+ * <tr><td style="vertical-align:top">{@code 't'}, {@code 'T'}
+ *     <td style="vertical-align:top"> date/time
  *     <td> Prefix for date and time conversion characters.  See <a
  *     href="#dt">Date/Time Conversions</a>.
  *
- * <tr><td valign="top">{@code '%'}
- *     <td valign="top"> percent
+ * <tr><td style="vertical-align:top">{@code '%'}
+ *     <td style="vertical-align:top"> percent
  *     <td> The result is a literal {@code '%'} (<code>'&#92;u0025'</code>)
  *
- * <tr><td valign="top">{@code 'n'}
- *     <td valign="top"> line separator
+ * <tr><td style="vertical-align:top">{@code 'n'}
+ *     <td style="vertical-align:top"> line separator
  *     <td> The result is the platform-specific line separator
  *
  * </table>
@@ -370,7 +370,7 @@
  * <p> Any characters not explicitly defined as conversions are illegal and are
  * reserved for future extensions.
  *
- * <h4><a name="dt">Date/Time Conversions</a></h4>
+ * <h4><a id="dt">Date/Time Conversions</a></h4>
  *
  * <p> The following date and time conversion suffix characters are defined for
  * the {@code 't'} and {@code 'T'} conversions.  The types are similar to but
@@ -383,44 +383,44 @@
  *
  * <table cellpadding=5 summary="time">
  *
- * <tr><td valign="top"> {@code 'H'}
+ * <tr><td style="vertical-align:top"> {@code 'H'}
  *     <td> Hour of the day for the 24-hour clock, formatted as two digits with
  *     a leading zero as necessary i.e. {@code 00 - 23}.
  *
- * <tr><td valign="top">{@code 'I'}
+ * <tr><td style="vertical-align:top">{@code 'I'}
  *     <td> Hour for the 12-hour clock, formatted as two digits with a leading
  *     zero as necessary, i.e.  {@code 01 - 12}.
  *
- * <tr><td valign="top">{@code 'k'}
+ * <tr><td style="vertical-align:top">{@code 'k'}
  *     <td> Hour of the day for the 24-hour clock, i.e. {@code 0 - 23}.
  *
- * <tr><td valign="top">{@code 'l'}
+ * <tr><td style="vertical-align:top">{@code 'l'}
  *     <td> Hour for the 12-hour clock, i.e. {@code 1 - 12}.
  *
- * <tr><td valign="top">{@code 'M'}
+ * <tr><td style="vertical-align:top">{@code 'M'}
  *     <td> Minute within the hour formatted as two digits with a leading zero
  *     as necessary, i.e.  {@code 00 - 59}.
  *
- * <tr><td valign="top">{@code 'S'}
+ * <tr><td style="vertical-align:top">{@code 'S'}
  *     <td> Seconds within the minute, formatted as two digits with a leading
  *     zero as necessary, i.e. {@code 00 - 60} ("{@code 60}" is a special
  *     value required to support leap seconds).
  *
- * <tr><td valign="top">{@code 'L'}
+ * <tr><td style="vertical-align:top">{@code 'L'}
  *     <td> Millisecond within the second formatted as three digits with
  *     leading zeros as necessary, i.e. {@code 000 - 999}.
  *
- * <tr><td valign="top">{@code 'N'}
+ * <tr><td style="vertical-align:top">{@code 'N'}
  *     <td> Nanosecond within the second, formatted as nine digits with leading
  *     zeros as necessary, i.e. {@code 000000000 - 999999999}.
  *
- * <tr><td valign="top">{@code 'p'}
+ * <tr><td style="vertical-align:top">{@code 'p'}
  *     <td> Locale-specific {@linkplain
  *     java.text.DateFormatSymbols#getAmPmStrings morning or afternoon} marker
  *     in lower case, e.g."{@code am}" or "{@code pm}". Use of the conversion
  *     prefix {@code 'T'} forces this output to upper case.
  *
- * <tr><td valign="top">{@code 'z'}
+ * <tr><td style="vertical-align:top">{@code 'z'}
  *     <td> <a href="http://www.ietf.org/rfc/rfc0822.txt">RFC&nbsp;822</a>
  *     style numeric time zone offset from GMT, e.g. {@code -0800}.  This
  *     value will be adjusted as necessary for Daylight Saving Time.  For
@@ -428,7 +428,7 @@
  *     the {@linkplain TimeZone#getDefault() default time zone} for this
  *     instance of the Java virtual machine.
  *
- * <tr><td valign="top">{@code 'Z'}
+ * <tr><td style="vertical-align:top">{@code 'Z'}
  *     <td> A string representing the abbreviation for the time zone.  This
  *     value will be adjusted as necessary for Daylight Saving Time.  For
  *     {@code long}, {@link Long}, and {@link Date} the  time zone used is
@@ -436,12 +436,12 @@
  *     instance of the Java virtual machine.  The Formatter's locale will
  *     supersede the locale of the argument (if any).
  *
- * <tr><td valign="top">{@code 's'}
+ * <tr><td style="vertical-align:top">{@code 's'}
  *     <td> Seconds since the beginning of the epoch starting at 1 January 1970
  *     {@code 00:00:00} UTC, i.e. {@code Long.MIN_VALUE/1000} to
  *     {@code Long.MAX_VALUE/1000}.
  *
- * <tr><td valign="top">{@code 'Q'}
+ * <tr><td style="vertical-align:top">{@code 'Q'}
  *     <td> Milliseconds since the beginning of the epoch starting at 1 January
  *     1970 {@code 00:00:00} UTC, i.e. {@code Long.MIN_VALUE} to
  *     {@code Long.MAX_VALUE}.
@@ -452,54 +452,54 @@
  *
  * <table cellpadding=5 summary="date">
  *
- * <tr><td valign="top">{@code 'B'}
+ * <tr><td style="vertical-align:top">{@code 'B'}
  *     <td> Locale-specific {@linkplain java.text.DateFormatSymbols#getMonths
  *     full month name}, e.g. {@code "January"}, {@code "February"}.
  *
- * <tr><td valign="top">{@code 'b'}
+ * <tr><td style="vertical-align:top">{@code 'b'}
  *     <td> Locale-specific {@linkplain
  *     java.text.DateFormatSymbols#getShortMonths abbreviated month name},
  *     e.g. {@code "Jan"}, {@code "Feb"}.
  *
- * <tr><td valign="top">{@code 'h'}
+ * <tr><td style="vertical-align:top">{@code 'h'}
  *     <td> Same as {@code 'b'}.
  *
- * <tr><td valign="top">{@code 'A'}
+ * <tr><td style="vertical-align:top">{@code 'A'}
  *     <td> Locale-specific full name of the {@linkplain
  *     java.text.DateFormatSymbols#getWeekdays day of the week},
  *     e.g. {@code "Sunday"}, {@code "Monday"}
  *
- * <tr><td valign="top">{@code 'a'}
+ * <tr><td style="vertical-align:top">{@code 'a'}
  *     <td> Locale-specific short name of the {@linkplain
  *     java.text.DateFormatSymbols#getShortWeekdays day of the week},
  *     e.g. {@code "Sun"}, {@code "Mon"}
  *
- * <tr><td valign="top">{@code 'C'}
+ * <tr><td style="vertical-align:top">{@code 'C'}
  *     <td> Four-digit year divided by {@code 100}, formatted as two digits
  *     with leading zero as necessary, i.e. {@code 00 - 99}
  *
- * <tr><td valign="top">{@code 'Y'}
+ * <tr><td style="vertical-align:top">{@code 'Y'}
  *     <td> Year, formatted as at least four digits with leading zeros as
  *     necessary, e.g. {@code 0092} equals {@code 92} CE for the Gregorian
  *     calendar.
  *
- * <tr><td valign="top">{@code 'y'}
+ * <tr><td style="vertical-align:top">{@code 'y'}
  *     <td> Last two digits of the year, formatted with leading zeros as
  *     necessary, i.e. {@code 00 - 99}.
  *
- * <tr><td valign="top">{@code 'j'}
+ * <tr><td style="vertical-align:top">{@code 'j'}
  *     <td> Day of year, formatted as three digits with leading zeros as
  *     necessary, e.g. {@code 001 - 366} for the Gregorian calendar.
  *
- * <tr><td valign="top">{@code 'm'}
+ * <tr><td style="vertical-align:top">{@code 'm'}
  *     <td> Month, formatted as two digits with leading zeros as necessary,
  *     i.e. {@code 01 - 13}.
  *
- * <tr><td valign="top">{@code 'd'}
+ * <tr><td style="vertical-align:top">{@code 'd'}
  *     <td> Day of month, formatted as two digits with leading zeros as
  *     necessary, i.e. {@code 01 - 31}
  *
- * <tr><td valign="top">{@code 'e'}
+ * <tr><td style="vertical-align:top">{@code 'e'}
  *     <td> Day of month, formatted as two digits, i.e. {@code 1 - 31}.
  *
  * </table>
@@ -509,25 +509,25 @@
  *
  * <table cellpadding=5 summary="composites">
  *
- * <tr><td valign="top">{@code 'R'}
+ * <tr><td style="vertical-align:top">{@code 'R'}
  *     <td> Time formatted for the 24-hour clock as {@code "%tH:%tM"}
  *
- * <tr><td valign="top">{@code 'T'}
+ * <tr><td style="vertical-align:top">{@code 'T'}
  *     <td> Time formatted for the 24-hour clock as {@code "%tH:%tM:%tS"}.
  *
- * <tr><td valign="top">{@code 'r'}
+ * <tr><td style="vertical-align:top">{@code 'r'}
  *     <td> Time formatted for the 12-hour clock as {@code "%tI:%tM:%tS %Tp"}.
  *     The location of the morning or afternoon marker ({@code '%Tp'}) may be
  *     locale-dependent.
  *
- * <tr><td valign="top">{@code 'D'}
+ * <tr><td style="vertical-align:top">{@code 'D'}
  *     <td> Date formatted as {@code "%tm/%td/%ty"}.
  *
- * <tr><td valign="top">{@code 'F'}
+ * <tr><td style="vertical-align:top">{@code 'F'}
  *     <td> <a href="http://www.w3.org/TR/NOTE-datetime">ISO&nbsp;8601</a>
  *     complete date formatted as {@code "%tY-%tm-%td"}.
  *
- * <tr><td valign="top">{@code 'c'}
+ * <tr><td style="vertical-align:top">{@code 'c'}
  *     <td> Date and time formatted as {@code "%ta %tb %td %tT %tZ %tY"},
  *     e.g. {@code "Sun Jul 20 16:17:00 EDT 1969"}.
  *
@@ -543,60 +543,60 @@
  *
  * <table cellpadding=5 summary="genConv">
  *
- * <tr><th valign="bottom"> Flag <th valign="bottom"> General
- *     <th valign="bottom"> Character <th valign="bottom"> Integral
- *     <th valign="bottom"> Floating Point
- *     <th valign="bottom"> Date/Time
- *     <th valign="bottom"> Description
- *
- * <tr><td> '-' <td align="center" valign="top"> y
- *     <td align="center" valign="top"> y
- *     <td align="center" valign="top"> y
- *     <td align="center" valign="top"> y
- *     <td align="center" valign="top"> y
+ * <tr><th style="vertical-align:bottom"> Flag <th style="vertical-align:bottom"> General
+ *     <th style="vertical-align:bottom"> Character <th style="vertical-align:bottom"> Integral
+ *     <th style="vertical-align:bottom"> Floating Point
+ *     <th style="vertical-align:bottom"> Date/Time
+ *     <th style="vertical-align:bottom"> Description
+ *
+ * <tr><td> '-' <td style="text-align:center; vertical-align:top"> y
+ *     <td style="text-align:center; vertical-align:top"> y
+ *     <td style="text-align:center; vertical-align:top"> y
+ *     <td style="text-align:center; vertical-align:top"> y
+ *     <td style="text-align:center; vertical-align:top"> y
  *     <td> The result will be left-justified.
  *
- * <tr><td> '#' <td align="center" valign="top"> y<sup>1</sup>
- *     <td align="center" valign="top"> -
- *     <td align="center" valign="top"> y<sup>3</sup>
- *     <td align="center" valign="top"> y
- *     <td align="center" valign="top"> -
+ * <tr><td> '#' <td style="text-align:center; vertical-align:top"> y<sup>1</sup>
+ *     <td style="text-align:center; vertical-align:top"> -
+ *     <td style="text-align:center; vertical-align:top"> y<sup>3</sup>
+ *     <td style="text-align:center; vertical-align:top"> y
+ *     <td style="text-align:center; vertical-align:top"> -
  *     <td> The result should use a conversion-dependent alternate form
  *
- * <tr><td> '+' <td align="center" valign="top"> -
- *     <td align="center" valign="top"> -
- *     <td align="center" valign="top"> y<sup>4</sup>
- *     <td align="center" valign="top"> y
- *     <td align="center" valign="top"> -
+ * <tr><td> '+' <td style="text-align:center; vertical-align:top"> -
+ *     <td style="text-align:center; vertical-align:top"> -
+ *     <td style="text-align:center; vertical-align:top"> y<sup>4</sup>
+ *     <td style="text-align:center; vertical-align:top"> y
+ *     <td style="text-align:center; vertical-align:top"> -
  *     <td> The result will always include a sign
  *
- * <tr><td> '&nbsp;&nbsp;' <td align="center" valign="top"> -
- *     <td align="center" valign="top"> -
- *     <td align="center" valign="top"> y<sup>4</sup>
- *     <td align="center" valign="top"> y
- *     <td align="center" valign="top"> -
+ * <tr><td> '&nbsp;&nbsp;' <td style="text-align:center; vertical-align:top"> -
+ *     <td style="text-align:center; vertical-align:top"> -
+ *     <td style="text-align:center; vertical-align:top"> y<sup>4</sup>
+ *     <td style="text-align:center; vertical-align:top"> y
+ *     <td style="text-align:center; vertical-align:top"> -
  *     <td> The result will include a leading space for positive values
  *
- * <tr><td> '0' <td align="center" valign="top"> -
- *     <td align="center" valign="top"> -
- *     <td align="center" valign="top"> y
- *     <td align="center" valign="top"> y
- *     <td align="center" valign="top"> -
+ * <tr><td> '0' <td style="text-align:center; vertical-align:top"> -
+ *     <td style="text-align:center; vertical-align:top"> -
+ *     <td style="text-align:center; vertical-align:top"> y
+ *     <td style="text-align:center; vertical-align:top"> y
+ *     <td style="text-align:center; vertical-align:top"> -
  *     <td> The result will be zero-padded
  *
- * <tr><td> ',' <td align="center" valign="top"> -
- *     <td align="center" valign="top"> -
- *     <td align="center" valign="top"> y<sup>2</sup>
- *     <td align="center" valign="top"> y<sup>5</sup>
- *     <td align="center" valign="top"> -
+ * <tr><td> ',' <td style="text-align:center; vertical-align:top"> -
+ *     <td style="text-align:center; vertical-align:top"> -
+ *     <td style="text-align:center; vertical-align:top"> y<sup>2</sup>
+ *     <td style="text-align:center; vertical-align:top"> y<sup>5</sup>
+ *     <td style="text-align:center; vertical-align:top"> -
  *     <td> The result will include locale-specific {@linkplain
  *     java.text.DecimalFormatSymbols#getGroupingSeparator grouping separators}
  *
- * <tr><td> '(' <td align="center" valign="top"> -
- *     <td align="center" valign="top"> -
- *     <td align="center" valign="top"> y<sup>4</sup>
- *     <td align="center" valign="top"> y<sup>5</sup>
- *     <td align="center"> -
+ * <tr><td> '(' <td style="text-align:center; vertical-align:top"> -
+ *     <td style="text-align:center; vertical-align:top"> -
+ *     <td style="text-align:center; vertical-align:top"> y<sup>4</sup>
+ *     <td style="text-align:center; vertical-align:top"> y<sup>5</sup>
+ *     <td style="text-align:center"> -
  *     <td> The result will enclose negative numbers in parentheses
  *
  * </table>
@@ -659,7 +659,7 @@
  * </pre></blockquote>
  *
  * <hr>
- * <h3><a name="detail">Details</a></h3>
+ * <h3><a id="detail">Details</a></h3>
  *
  * <p> This section is intended to provide behavioral details for formatting,
  * including conditions and exceptions, supported data types, localization, and
@@ -701,14 +701,14 @@
  * <pre>
  *    out.toUpperCase(Locale.getDefault(Locale.Category.FORMAT)) </pre>
  *
- * <h4><a name="dgen">General</a></h4>
+ * <h4><a id="dgen">General</a></h4>
  *
  * <p> The following general conversions may be applied to any argument type:
  *
  * <table cellpadding=5 summary="dgConv">
  *
- * <tr><td valign="top"> {@code 'b'}
- *     <td valign="top"> <code>'&#92;u0062'</code>
+ * <tr><td style="vertical-align:top"> {@code 'b'}
+ *     <td style="vertical-align:top"> <code>'&#92;u0062'</code>
  *     <td> Produces either "{@code true}" or "{@code false}" as returned by
  *     {@link Boolean#toString(boolean)}.
  *
@@ -721,12 +721,12 @@
  *     <p> If the {@code '#'} flag is given, then a {@link
  *     FormatFlagsConversionMismatchException} will be thrown.
  *
- * <tr><td valign="top"> {@code 'B'}
- *     <td valign="top"> <code>'&#92;u0042'</code>
+ * <tr><td style="vertical-align:top"> {@code 'B'}
+ *     <td style="vertical-align:top"> <code>'&#92;u0042'</code>
  *     <td> The upper-case variant of {@code 'b'}.
  *
- * <tr><td valign="top"> {@code 'h'}
- *     <td valign="top"> <code>'&#92;u0068'</code>
+ * <tr><td style="vertical-align:top"> {@code 'h'}
+ *     <td style="vertical-align:top"> <code>'&#92;u0068'</code>
  *     <td> Produces a string representing the hash code value of the object.
  *
  *     <p> The result is obtained by invoking
@@ -735,12 +735,12 @@
  *     <p> If the {@code '#'} flag is given, then a {@link
  *     FormatFlagsConversionMismatchException} will be thrown.
  *
- * <tr><td valign="top"> {@code 'H'}
- *     <td valign="top"> <code>'&#92;u0048'</code>
+ * <tr><td style="vertical-align:top"> {@code 'H'}
+ *     <td style="vertical-align:top"> <code>'&#92;u0048'</code>
  *     <td> The upper-case variant of {@code 'h'}.
  *
- * <tr><td valign="top"> {@code 's'}
- *     <td valign="top"> <code>'&#92;u0073'</code>
+ * <tr><td style="vertical-align:top"> {@code 's'}
+ *     <td style="vertical-align:top"> <code>'&#92;u0073'</code>
  *     <td> Produces a string.
  *
  *     <p> If the argument implements {@link Formattable}, then
@@ -752,32 +752,32 @@
  *     Formattable} , then a {@link FormatFlagsConversionMismatchException}
  *     will be thrown.
  *
- * <tr><td valign="top"> {@code 'S'}
- *     <td valign="top"> <code>'&#92;u0053'</code>
+ * <tr><td style="vertical-align:top"> {@code 'S'}
+ *     <td style="vertical-align:top"> <code>'&#92;u0053'</code>
  *     <td> The upper-case variant of {@code 's'}.
  *
  * </table>
  *
- * <p> The following <a name="dFlags">flags</a> apply to general conversions:
+ * <p> The following <a id="dFlags">flags</a> apply to general conversions:
  *
  * <table cellpadding=5 summary="dFlags">
  *
- * <tr><td valign="top"> {@code '-'}
- *     <td valign="top"> <code>'&#92;u002d'</code>
+ * <tr><td style="vertical-align:top"> {@code '-'}
+ *     <td style="vertical-align:top"> <code>'&#92;u002d'</code>
  *     <td> Left justifies the output.  Spaces (<code>'&#92;u0020'</code>) will be
  *     added at the end of the converted value as required to fill the minimum
  *     width of the field.  If the width is not provided, then a {@link
  *     MissingFormatWidthException} will be thrown.  If this flag is not given
  *     then the output will be right-justified.
  *
- * <tr><td valign="top"> {@code '#'}
- *     <td valign="top"> <code>'&#92;u0023'</code>
+ * <tr><td style="vertical-align:top"> {@code '#'}
+ *     <td style="vertical-align:top"> <code>'&#92;u0023'</code>
  *     <td> Requires the output use an alternate form.  The definition of the
  *     form is specified by the conversion.
  *
  * </table>
  *
- * <p> The <a name="genWidth">width</a> is the minimum number of characters to
+ * <p> The <a id="genWidth">width</a> is the minimum number of characters to
  * be written to the
  * output.  If the length of the converted value is less than the width then
  * the output will be padded by <code>'&nbsp;&nbsp;'</code> (<code>'&#92;u0020'</code>)
@@ -792,7 +792,7 @@
  * the precision.  If the precision is not specified then there is no explicit
  * limit on the number of characters.
  *
- * <h4><a name="dchar">Character</a></h4>
+ * <h4><a id="dchar">Character</a></h4>
  *
  * This conversion may be applied to {@code char} and {@link Character}.  It
  * may also be applied to the types {@code byte}, {@link Byte},
@@ -803,8 +803,8 @@
  *
  * <table cellpadding=5 summary="charConv">
  *
- * <tr><td valign="top"> {@code 'c'}
- *     <td valign="top"> <code>'&#92;u0063'</code>
+ * <tr><td style="vertical-align:top"> {@code 'c'}
+ *     <td style="vertical-align:top"> <code>'&#92;u0063'</code>
  *     <td> Formats the argument as a Unicode character as described in <a
  *     href="../lang/Character.html#unicode">Unicode Character
  *     Representation</a>.  This may be more than one 16-bit {@code char} in
@@ -813,8 +813,8 @@
  *     <p> If the {@code '#'} flag is given, then a {@link
  *     FormatFlagsConversionMismatchException} will be thrown.
  *
- * <tr><td valign="top"> {@code 'C'}
- *     <td valign="top"> <code>'&#92;u0043'</code>
+ * <tr><td style="vertical-align:top"> {@code 'C'}
+ *     <td style="vertical-align:top"> <code>'&#92;u0043'</code>
  *     <td> The upper-case variant of {@code 'c'}.
  *
  * </table>
@@ -828,7 +828,7 @@
  * <p> The precision is not applicable.  If the precision is specified then an
  * {@link IllegalFormatPrecisionException} will be thrown.
  *
- * <h4><a name="dnum">Numeric</a></h4>
+ * <h4><a id="dnum">Numeric</a></h4>
  *
  * <p> Numeric conversions are divided into the following categories:
  *
@@ -846,7 +846,7 @@
  *
  * <p> Numeric types will be formatted according to the following algorithm:
  *
- * <p><b><a name="L10nAlgorithm"> Number Localization Algorithm</a></b>
+ * <p><b><a id="L10nAlgorithm"> Number Localization Algorithm</a></b>
  *
  * <p> After digits are obtained for the integer part, fractional part, and
  * exponent (as appropriate for the data type), the following transformation
@@ -865,7 +865,7 @@
  * substituted.
  *
  * <li> If the {@code ','} (<code>'&#92;u002c'</code>)
- * <a name="L10nGroup">flag</a> is given, then the locale-specific {@linkplain
+ * <a id="L10nGroup">flag</a> is given, then the locale-specific {@linkplain
  * java.text.DecimalFormatSymbols#getGroupingSeparator grouping separator} is
  * inserted by scanning the integer part of the string from least significant
  * to most significant digits and inserting a separator at intervals defined by
@@ -896,7 +896,7 @@
  * then the output will be "(Infinity)" if the {@code '('} flag is given
  * otherwise the output will be "-Infinity".  These values are not localized.
  *
- * <p><a name="dnint"><b> Byte, Short, Integer, and Long </b></a>
+ * <p><a id="dnint"><b> Byte, Short, Integer, and Long </b></a>
  *
  * <p> The following conversions may be applied to {@code byte}, {@link Byte},
  * {@code short}, {@link Short}, {@code int} and {@link Integer},
@@ -904,8 +904,8 @@
  *
  * <table cellpadding=5 summary="IntConv">
  *
- * <tr><td valign="top"> {@code 'd'}
- *     <td valign="top"> <code>'&#92;u0064'</code>
+ * <tr><td style="vertical-align:top"> {@code 'd'}
+ *     <td style="vertical-align:top"> <code>'&#92;u0064'</code>
  *     <td> Formats the argument as a decimal integer. The <a
  *     href="#L10nAlgorithm">localization algorithm</a> is applied.
  *
@@ -915,8 +915,8 @@
  *     <p> If the {@code '#'} flag is given then a {@link
  *     FormatFlagsConversionMismatchException} will be thrown.
  *
- * <tr><td valign="top"> {@code 'o'}
- *     <td valign="top"> <code>'&#92;u006f'</code>
+ * <tr><td style="vertical-align:top"> {@code 'o'}
+ *     <td style="vertical-align:top"> <code>'&#92;u006f'</code>
  *     <td> Formats the argument as an integer in base eight.  No localization
  *     is applied.
  *
@@ -937,8 +937,8 @@
  *     are given then a {@link FormatFlagsConversionMismatchException} will be
  *     thrown.
  *
- * <tr><td valign="top"> {@code 'x'}
- *     <td valign="top"> <code>'&#92;u0078'</code>
+ * <tr><td style="vertical-align:top"> {@code 'x'}
+ *     <td style="vertical-align:top"> <code>'&#92;u0078'</code>
  *     <td> Formats the argument as an integer in base sixteen. No
  *     localization is applied.
  *
@@ -960,8 +960,8 @@
  *     {@code ','} flags are given then a {@link
  *     FormatFlagsConversionMismatchException} will be thrown.
  *
- * <tr><td valign="top"> {@code 'X'}
- *     <td valign="top"> <code>'&#92;u0058'</code>
+ * <tr><td style="vertical-align:top"> {@code 'X'}
+ *     <td style="vertical-align:top"> <code>'&#92;u0058'</code>
  *     <td> The upper-case variant of {@code 'x'}.  The entire string
  *     representing the number will be converted to {@linkplain
  *     String#toUpperCase upper case} including the {@code 'x'} (if any) and
@@ -979,13 +979,13 @@
  * <p> If the {@code '-'} flag is not given, then the space padding will occur
  * before the sign.
  *
- * <p> The following <a name="intFlags">flags</a> apply to numeric integral
+ * <p> The following <a id="intFlags">flags</a> apply to numeric integral
  * conversions:
  *
  * <table cellpadding=5 summary="intFlags">
  *
- * <tr><td valign="top"> {@code '+'}
- *     <td valign="top"> <code>'&#92;u002b'</code>
+ * <tr><td style="vertical-align:top"> {@code '+'}
+ *     <td style="vertical-align:top"> <code>'&#92;u002b'</code>
  *     <td> Requires the output to include a positive sign for all positive
  *     numbers.  If this flag is not given then only negative values will
  *     include a sign.
@@ -993,16 +993,16 @@
  *     <p> If both the {@code '+'} and <code>'&nbsp;&nbsp;'</code> flags are given
  *     then an {@link IllegalFormatFlagsException} will be thrown.
  *
- * <tr><td valign="top"> <code>'&nbsp;&nbsp;'</code>
- *     <td valign="top"> <code>'&#92;u0020'</code>
+ * <tr><td style="vertical-align:top"> <code>'&nbsp;&nbsp;'</code>
+ *     <td style="vertical-align:top"> <code>'&#92;u0020'</code>
  *     <td> Requires the output to include a single extra space
  *     (<code>'&#92;u0020'</code>) for non-negative values.
  *
  *     <p> If both the {@code '+'} and <code>'&nbsp;&nbsp;'</code> flags are given
  *     then an {@link IllegalFormatFlagsException} will be thrown.
  *
- * <tr><td valign="top"> {@code '0'}
- *     <td valign="top"> <code>'&#92;u0030'</code>
+ * <tr><td style="vertical-align:top"> {@code '0'}
+ *     <td style="vertical-align:top"> <code>'&#92;u0030'</code>
  *     <td> Requires the output to be padded with leading {@linkplain
  *     java.text.DecimalFormatSymbols#getZeroDigit zeros} to the minimum field
  *     width following any sign or radix indicator except when converting NaN
@@ -1012,22 +1012,22 @@
  *     <p> If both the {@code '-'} and {@code '0'} flags are given then an
  *     {@link IllegalFormatFlagsException} will be thrown.
  *
- * <tr><td valign="top"> {@code ','}
- *     <td valign="top"> <code>'&#92;u002c'</code>
+ * <tr><td style="vertical-align:top"> {@code ','}
+ *     <td style="vertical-align:top"> <code>'&#92;u002c'</code>
  *     <td> Requires the output to include the locale-specific {@linkplain
  *     java.text.DecimalFormatSymbols#getGroupingSeparator group separators} as
  *     described in the <a href="#L10nGroup">"group" section</a> of the
  *     localization algorithm.
  *
- * <tr><td valign="top"> {@code '('}
- *     <td valign="top"> <code>'&#92;u0028'</code>
+ * <tr><td style="vertical-align:top"> {@code '('}
+ *     <td style="vertical-align:top"> <code>'&#92;u0028'</code>
  *     <td> Requires the output to prepend a {@code '('}
  *     (<code>'&#92;u0028'</code>) and append a {@code ')'}
  *     (<code>'&#92;u0029'</code>) to negative values.
  *
  * </table>
  *
- * <p> If no <a name="intdFlags">flags</a> are given the default formatting is
+ * <p> If no <a id="intdFlags">flags</a> are given the default formatting is
  * as follows:
  *
  * <ul>
@@ -1043,7 +1043,7 @@
  *
  * </ul>
  *
- * <p> The <a name="intWidth">width</a> is the minimum number of characters to
+ * <p> The <a id="intWidth">width</a> is the minimum number of characters to
  * be written to the output.  This includes any signs, digits, grouping
  * separators, radix indicator, and parentheses.  If the length of the
  * converted value is less than the width then the output will be padded by
@@ -1055,23 +1055,23 @@
  * <p> The precision is not applicable.  If precision is specified then an
  * {@link IllegalFormatPrecisionException} will be thrown.
  *
- * <p><a name="dnbint"><b> BigInteger </b></a>
+ * <p><a id="dnbint"><b> BigInteger </b></a>
  *
  * <p> The following conversions may be applied to {@link
  * java.math.BigInteger}.
  *
  * <table cellpadding=5 summary="BIntConv">
  *
- * <tr><td valign="top"> {@code 'd'}
- *     <td valign="top"> <code>'&#92;u0064'</code>
+ * <tr><td style="vertical-align:top"> {@code 'd'}
+ *     <td style="vertical-align:top"> <code>'&#92;u0064'</code>
  *     <td> Requires the output to be formatted as a decimal integer. The <a
  *     href="#L10nAlgorithm">localization algorithm</a> is applied.
  *
  *     <p> If the {@code '#'} flag is given {@link
  *     FormatFlagsConversionMismatchException} will be thrown.
  *
- * <tr><td valign="top"> {@code 'o'}
- *     <td valign="top"> <code>'&#92;u006f'</code>
+ * <tr><td style="vertical-align:top"> {@code 'o'}
+ *     <td style="vertical-align:top"> <code>'&#92;u006f'</code>
  *     <td> Requires the output to be formatted as an integer in base eight.
  *     No localization is applied.
  *
@@ -1093,8 +1093,8 @@
  *     <p> If the {@code ','} flag is given then a {@link
  *     FormatFlagsConversionMismatchException} will be thrown.
  *
- * <tr><td valign="top"> {@code 'x'}
- *     <td valign="top"> <code>'&#92;u0078'</code>
+ * <tr><td style="vertical-align:top"> {@code 'x'}
+ *     <td style="vertical-align:top"> <code>'&#92;u0078'</code>
  *     <td> Requires the output to be formatted as an integer in base
  *     sixteen.  No localization is applied.
  *
@@ -1117,8 +1117,8 @@
  *     <p> If the {@code ','} flag is given then a {@link
  *     FormatFlagsConversionMismatchException} will be thrown.
  *
- * <tr><td valign="top"> {@code 'X'}
- *     <td valign="top"> <code>'&#92;u0058'</code>
+ * <tr><td style="vertical-align:top"> {@code 'X'}
+ *     <td style="vertical-align:top"> <code>'&#92;u0058'</code>
  *     <td> The upper-case variant of {@code 'x'}.  The entire string
  *     representing the number will be converted to {@linkplain
  *     String#toUpperCase upper case} including the {@code 'x'} (if any) and
@@ -1149,17 +1149,17 @@
  * <p> The precision is not applicable.  If precision is specified then an
  * {@link IllegalFormatPrecisionException} will be thrown.
  *
- * <p><a name="dndec"><b> Float and Double</b></a>
+ * <p><a id="dndec"><b> Float and Double</b></a>
  *
  * <p> The following conversions may be applied to {@code float}, {@link
  * Float}, {@code double} and {@link Double}.
  *
  * <table cellpadding=5 summary="floatConv">
  *
- * <tr><td valign="top"> {@code 'e'}
- *     <td valign="top"> <code>'&#92;u0065'</code>
+ * <tr><td style="vertical-align:top"> {@code 'e'}
+ *     <td style="vertical-align:top"> <code>'&#92;u0065'</code>
  *     <td> Requires the output to be formatted using <a
- *     name="scientific">computerized scientific notation</a>.  The <a
+ *     id="scientific">computerized scientific notation</a>.  The <a
  *     href="#L10nAlgorithm">localization algorithm</a> is applied.
  *
  *     <p> The formatting of the magnitude <i>m</i> depends upon its value.
@@ -1204,13 +1204,13 @@
  *     <p>If the {@code ','} flag is given, then an {@link
  *     FormatFlagsConversionMismatchException} will be thrown.
  *
- * <tr><td valign="top"> {@code 'E'}
- *     <td valign="top"> <code>'&#92;u0045'</code>
+ * <tr><td style="vertical-align:top"> {@code 'E'}
+ *     <td style="vertical-align:top"> <code>'&#92;u0045'</code>
  *     <td> The upper-case variant of {@code 'e'}.  The exponent symbol
  *     will be {@code 'E'} (<code>'&#92;u0045'</code>).
  *
- * <tr><td valign="top"> {@code 'g'}
- *     <td valign="top"> <code>'&#92;u0067'</code>
+ * <tr><td style="vertical-align:top"> {@code 'g'}
+ *     <td style="vertical-align:top"> <code>'&#92;u0067'</code>
  *     <td> Requires the output to be formatted in general scientific notation
  *     as described below. The <a href="#L10nAlgorithm">localization
  *     algorithm</a> is applied.
@@ -1234,13 +1234,13 @@
  *     <p> If the {@code '#'} flag is given then an {@link
  *     FormatFlagsConversionMismatchException} will be thrown.
  *
- * <tr><td valign="top"> {@code 'G'}
- *     <td valign="top"> <code>'&#92;u0047'</code>
+ * <tr><td style="vertical-align:top"> {@code 'G'}
+ *     <td style="vertical-align:top"> <code>'&#92;u0047'</code>
  *     <td> The upper-case variant of {@code 'g'}.
  *
- * <tr><td valign="top"> {@code 'f'}
- *     <td valign="top"> <code>'&#92;u0066'</code>
- *     <td> Requires the output to be formatted using <a name="decimal">decimal
+ * <tr><td style="vertical-align:top"> {@code 'f'}
+ *     <td style="vertical-align:top"> <code>'&#92;u0066'</code>
+ *     <td> Requires the output to be formatted using <a id="decimal">decimal
  *     format</a>.  The <a href="#L10nAlgorithm">localization algorithm</a> is
  *     applied.
  *
@@ -1270,8 +1270,8 @@
  *     Float#toString(float)} or {@link Double#toString(double)} as
  *     appropriate.
  *
- * <tr><td valign="top"> {@code 'a'}
- *     <td valign="top"> <code>'&#92;u0061'</code>
+ * <tr><td style="vertical-align:top"> {@code 'a'}
+ *     <td style="vertical-align:top"> <code>'&#92;u0061'</code>
  *     <td> Requires the output to be formatted in hexadecimal exponential
  *     form.  No localization is applied.
  *
@@ -1323,8 +1323,8 @@
  *     <p> If the {@code '('} or {@code ','} flags are given, then a {@link
  *     FormatFlagsConversionMismatchException} will be thrown.
  *
- * <tr><td valign="top"> {@code 'A'}
- *     <td valign="top"> <code>'&#92;u0041'</code>
+ * <tr><td style="vertical-align:top"> {@code 'A'}
+ *     <td style="vertical-align:top"> <code>'&#92;u0041'</code>
  *     <td> The upper-case variant of {@code 'a'}.  The entire string
  *     representing the number will be converted to upper case including the
  *     {@code 'x'} (<code>'&#92;u0078'</code>) and {@code 'p'}
@@ -1339,7 +1339,7 @@
  * <p> If the {@code '#'} flag is given, then the decimal separator will
  * always be present.
  *
- * <p> If no <a name="floatdFlags">flags</a> are given the default formatting
+ * <p> If no <a id="floatdFlags">flags</a> are given the default formatting
  * is as follows:
  *
  * <ul>
@@ -1357,7 +1357,7 @@
  *
  * </ul>
  *
- * <p> The <a name="floatDWidth">width</a> is the minimum number of characters
+ * <p> The <a id="floatDWidth">width</a> is the minimum number of characters
  * to be written to the output.  This includes any signs, digits, grouping
  * separators, decimal separators, exponential symbol, radix indicator,
  * parentheses, and strings representing infinity and NaN as applicable.  If
@@ -1367,7 +1367,7 @@
  * {@code '-'} flag is given then the padding will be on the right.  If width
  * is not specified then there is no minimum.
  *
- * <p> If the <a name="floatDPrec">conversion</a> is {@code 'e'},
+ * <p> If the <a id="floatDPrec">conversion</a> is {@code 'e'},
  * {@code 'E'} or {@code 'f'}, then the precision is the number of digits
  * after the decimal separator.  If the precision is not specified, then it is
  * assumed to be {@code 6}.
@@ -1383,17 +1383,17 @@
  * precision is not provided, then all of the digits as returned by {@link
  * Double#toHexString(double)} will be output.
  *
- * <p><a name="dnbdec"><b> BigDecimal </b></a>
+ * <p><a id="dnbdec"><b> BigDecimal </b></a>
  *
  * <p> The following conversions may be applied {@link java.math.BigDecimal
  * BigDecimal}.
  *
  * <table cellpadding=5 summary="floatConv">
  *
- * <tr><td valign="top"> {@code 'e'}
- *     <td valign="top"> <code>'&#92;u0065'</code>
+ * <tr><td style="vertical-align:top"> {@code 'e'}
+ *     <td style="vertical-align:top"> <code>'&#92;u0065'</code>
  *     <td> Requires the output to be formatted using <a
- *     name="bscientific">computerized scientific notation</a>.  The <a
+ *     id="bscientific">computerized scientific notation</a>.  The <a
  *     href="#L10nAlgorithm">localization algorithm</a> is applied.
  *
  *     <p> The formatting of the magnitude <i>m</i> depends upon its value.
@@ -1432,13 +1432,13 @@
  *     <p> If the {@code ','} flag is given, then an {@link
  *     FormatFlagsConversionMismatchException} will be thrown.
  *
- * <tr><td valign="top"> {@code 'E'}
- *     <td valign="top"> <code>'&#92;u0045'</code>
+ * <tr><td style="vertical-align:top"> {@code 'E'}
+ *     <td style="vertical-align:top"> <code>'&#92;u0045'</code>
  *     <td> The upper-case variant of {@code 'e'}.  The exponent symbol
  *     will be {@code 'E'} (<code>'&#92;u0045'</code>).
  *
- * <tr><td valign="top"> {@code 'g'}
- *     <td valign="top"> <code>'&#92;u0067'</code>
+ * <tr><td style="vertical-align:top"> {@code 'g'}
+ *     <td style="vertical-align:top"> <code>'&#92;u0067'</code>
  *     <td> Requires the output to be formatted in general scientific notation
  *     as described below. The <a href="#L10nAlgorithm">localization
  *     algorithm</a> is applied.
@@ -1462,13 +1462,13 @@
  *     <p> If the {@code '#'} flag is given then an {@link
  *     FormatFlagsConversionMismatchException} will be thrown.
  *
- * <tr><td valign="top"> {@code 'G'}
- *     <td valign="top"> <code>'&#92;u0047'</code>
+ * <tr><td style="vertical-align:top"> {@code 'G'}
+ *     <td style="vertical-align:top"> <code>'&#92;u0047'</code>
  *     <td> The upper-case variant of {@code 'g'}.
  *
- * <tr><td valign="top"> {@code 'f'}
- *     <td valign="top"> <code>'&#92;u0066'</code>
- *     <td> Requires the output to be formatted using <a name="bdecimal">decimal
+ * <tr><td style="vertical-align:top"> {@code 'f'}
+ *     <td style="vertical-align:top"> <code>'&#92;u0066'</code>
+ *     <td> Requires the output to be formatted using <a id="bdecimal">decimal
  *     format</a>.  The <a href="#L10nAlgorithm">localization algorithm</a> is
  *     applied.
  *
@@ -1507,18 +1507,18 @@
  * href="#floatDPrec">precision</a> is the same as defined for Float and
  * Double.
  *
- * <h4><a name="ddt">Date/Time</a></h4>
+ * <h4><a id="ddt">Date/Time</a></h4>
  *
  * <p> This conversion may be applied to {@code long}, {@link Long}, {@link
  * Calendar}, {@link Date} and {@link TemporalAccessor TemporalAccessor}
  *
  * <table cellpadding=5 summary="DTConv">
  *
- * <tr><td valign="top"> {@code 't'}
- *     <td valign="top"> <code>'&#92;u0074'</code>
+ * <tr><td style="vertical-align:top"> {@code 't'}
+ *     <td style="vertical-align:top"> <code>'&#92;u0074'</code>
  *     <td> Prefix for date and time conversion characters.
- * <tr><td valign="top"> {@code 'T'}
- *     <td valign="top"> <code>'&#92;u0054'</code>
+ * <tr><td style="vertical-align:top"> {@code 'T'}
+ *     <td style="vertical-align:top"> <code>'&#92;u0054'</code>
  *     <td> The upper-case variant of {@code 't'}.
  *
  * </table>
@@ -1534,53 +1534,53 @@
  *
  * <table cellpadding=5 summary="time">
  *
- * <tr><td valign="top"> {@code 'H'}
- *     <td valign="top"> <code>'&#92;u0048'</code>
+ * <tr><td style="vertical-align:top"> {@code 'H'}
+ *     <td style="vertical-align:top"> <code>'&#92;u0048'</code>
  *     <td> Hour of the day for the 24-hour clock, formatted as two digits with
  *     a leading zero as necessary i.e. {@code 00 - 23}. {@code 00}
  *     corresponds to midnight.
  *
- * <tr><td valign="top">{@code 'I'}
- *     <td valign="top"> <code>'&#92;u0049'</code>
+ * <tr><td style="vertical-align:top">{@code 'I'}
+ *     <td style="vertical-align:top"> <code>'&#92;u0049'</code>
  *     <td> Hour for the 12-hour clock, formatted as two digits with a leading
  *     zero as necessary, i.e.  {@code 01 - 12}.  {@code 01} corresponds to
  *     one o'clock (either morning or afternoon).
  *
- * <tr><td valign="top">{@code 'k'}
- *     <td valign="top"> <code>'&#92;u006b'</code>
+ * <tr><td style="vertical-align:top">{@code 'k'}
+ *     <td style="vertical-align:top"> <code>'&#92;u006b'</code>
  *     <td> Hour of the day for the 24-hour clock, i.e. {@code 0 - 23}.
  *     {@code 0} corresponds to midnight.
  *
- * <tr><td valign="top">{@code 'l'}
- *     <td valign="top"> <code>'&#92;u006c'</code>
+ * <tr><td style="vertical-align:top">{@code 'l'}
+ *     <td style="vertical-align:top"> <code>'&#92;u006c'</code>
  *     <td> Hour for the 12-hour clock, i.e. {@code 1 - 12}.  {@code 1}
  *     corresponds to one o'clock (either morning or afternoon).
  *
- * <tr><td valign="top">{@code 'M'}
- *     <td valign="top"> <code>'&#92;u004d'</code>
+ * <tr><td style="vertical-align:top">{@code 'M'}
+ *     <td style="vertical-align:top"> <code>'&#92;u004d'</code>
  *     <td> Minute within the hour formatted as two digits with a leading zero
  *     as necessary, i.e.  {@code 00 - 59}.
  *
- * <tr><td valign="top">{@code 'S'}
- *     <td valign="top"> <code>'&#92;u0053'</code>
+ * <tr><td style="vertical-align:top">{@code 'S'}
+ *     <td style="vertical-align:top"> <code>'&#92;u0053'</code>
  *     <td> Seconds within the minute, formatted as two digits with a leading
  *     zero as necessary, i.e. {@code 00 - 60} ("{@code 60}" is a special
  *     value required to support leap seconds).
  *
- * <tr><td valign="top">{@code 'L'}
- *     <td valign="top"> <code>'&#92;u004c'</code>
+ * <tr><td style="vertical-align:top">{@code 'L'}
+ *     <td style="vertical-align:top"> <code>'&#92;u004c'</code>
  *     <td> Millisecond within the second formatted as three digits with
  *     leading zeros as necessary, i.e. {@code 000 - 999}.
  *
- * <tr><td valign="top">{@code 'N'}
- *     <td valign="top"> <code>'&#92;u004e'</code>
+ * <tr><td style="vertical-align:top">{@code 'N'}
+ *     <td style="vertical-align:top"> <code>'&#92;u004e'</code>
  *     <td> Nanosecond within the second, formatted as nine digits with leading
  *     zeros as necessary, i.e. {@code 000000000 - 999999999}.  The precision
  *     of this value is limited by the resolution of the underlying operating
  *     system or hardware.
  *
- * <tr><td valign="top">{@code 'p'}
- *     <td valign="top"> <code>'&#92;u0070'</code>
+ * <tr><td style="vertical-align:top">{@code 'p'}
+ *     <td style="vertical-align:top"> <code>'&#92;u0070'</code>
  *     <td> Locale-specific {@linkplain
  *     java.text.DateFormatSymbols#getAmPmStrings morning or afternoon} marker
  *     in lower case, e.g."{@code am}" or "{@code pm}".  Use of the
@@ -1589,8 +1589,8 @@
  *     GNU {@code date} and POSIX {@code strftime(3c)} which produce
  *     upper-case output.)
  *
- * <tr><td valign="top">{@code 'z'}
- *     <td valign="top"> <code>'&#92;u007a'</code>
+ * <tr><td style="vertical-align:top">{@code 'z'}
+ *     <td style="vertical-align:top"> <code>'&#92;u007a'</code>
  *     <td> <a href="http://www.ietf.org/rfc/rfc0822.txt">RFC&nbsp;822</a>
  *     style numeric time zone offset from GMT, e.g. {@code -0800}.  This
  *     value will be adjusted as necessary for Daylight Saving Time.  For
@@ -1598,8 +1598,8 @@
  *     the {@linkplain TimeZone#getDefault() default time zone} for this
  *     instance of the Java virtual machine.
  *
- * <tr><td valign="top">{@code 'Z'}
- *     <td valign="top"> <code>'&#92;u005a'</code>
+ * <tr><td style="vertical-align:top">{@code 'Z'}
+ *     <td style="vertical-align:top"> <code>'&#92;u005a'</code>
  *     <td> A string representing the abbreviation for the time zone.  This
  *     value will be adjusted as necessary for Daylight Saving Time.  For
  *     {@code long}, {@link Long}, and {@link Date} the time zone used is
@@ -1607,14 +1607,14 @@
  *     instance of the Java virtual machine.  The Formatter's locale will
  *     supersede the locale of the argument (if any).
  *
- * <tr><td valign="top">{@code 's'}
- *     <td valign="top"> <code>'&#92;u0073'</code>
+ * <tr><td style="vertical-align:top">{@code 's'}
+ *     <td style="vertical-align:top"> <code>'&#92;u0073'</code>
  *     <td> Seconds since the beginning of the epoch starting at 1 January 1970
  *     {@code 00:00:00} UTC, i.e. {@code Long.MIN_VALUE/1000} to
  *     {@code Long.MAX_VALUE/1000}.
  *
- * <tr><td valign="top">{@code 'Q'}
- *     <td valign="top"> <code>'&#92;u004f'</code>
+ * <tr><td style="vertical-align:top">{@code 'Q'}
+ *     <td style="vertical-align:top"> <code>'&#92;u004f'</code>
  *     <td> Milliseconds since the beginning of the epoch starting at 1 January
  *     1970 {@code 00:00:00} UTC, i.e. {@code Long.MIN_VALUE} to
  *     {@code Long.MAX_VALUE}. The precision of this value is limited by
@@ -1626,69 +1626,69 @@
  *
  * <table cellpadding=5 summary="date">
  *
- * <tr><td valign="top">{@code 'B'}
- *     <td valign="top"> <code>'&#92;u0042'</code>
+ * <tr><td style="vertical-align:top">{@code 'B'}
+ *     <td style="vertical-align:top"> <code>'&#92;u0042'</code>
  *     <td> Locale-specific {@linkplain java.text.DateFormatSymbols#getMonths
  *     full month name}, e.g. {@code "January"}, {@code "February"}.
  *
- * <tr><td valign="top">{@code 'b'}
- *     <td valign="top"> <code>'&#92;u0062'</code>
+ * <tr><td style="vertical-align:top">{@code 'b'}
+ *     <td style="vertical-align:top"> <code>'&#92;u0062'</code>
  *     <td> Locale-specific {@linkplain
  *     java.text.DateFormatSymbols#getShortMonths abbreviated month name},
  *     e.g. {@code "Jan"}, {@code "Feb"}.
  *
- * <tr><td valign="top">{@code 'h'}
- *     <td valign="top"> <code>'&#92;u0068'</code>
+ * <tr><td style="vertical-align:top">{@code 'h'}
+ *     <td style="vertical-align:top"> <code>'&#92;u0068'</code>
  *     <td> Same as {@code 'b'}.
  *
- * <tr><td valign="top">{@code 'A'}
- *     <td valign="top"> <code>'&#92;u0041'</code>
+ * <tr><td style="vertical-align:top">{@code 'A'}
+ *     <td style="vertical-align:top"> <code>'&#92;u0041'</code>
  *     <td> Locale-specific full name of the {@linkplain
  *     java.text.DateFormatSymbols#getWeekdays day of the week},
  *     e.g. {@code "Sunday"}, {@code "Monday"}
  *
- * <tr><td valign="top">{@code 'a'}
- *     <td valign="top"> <code>'&#92;u0061'</code>
+ * <tr><td style="vertical-align:top">{@code 'a'}
+ *     <td style="vertical-align:top"> <code>'&#92;u0061'</code>
  *     <td> Locale-specific short name of the {@linkplain
  *     java.text.DateFormatSymbols#getShortWeekdays day of the week},
  *     e.g. {@code "Sun"}, {@code "Mon"}
  *
- * <tr><td valign="top">{@code 'C'}
- *     <td valign="top"> <code>'&#92;u0043'</code>
+ * <tr><td style="vertical-align:top">{@code 'C'}
+ *     <td style="vertical-align:top"> <code>'&#92;u0043'</code>
  *     <td> Four-digit year divided by {@code 100}, formatted as two digits
  *     with leading zero as necessary, i.e. {@code 00 - 99}
  *
- * <tr><td valign="top">{@code 'Y'}
- *     <td valign="top"> <code>'&#92;u0059'</code> <td> Year, formatted to at least
+ * <tr><td style="vertical-align:top">{@code 'Y'}
+ *     <td style="vertical-align:top"> <code>'&#92;u0059'</code> <td> Year, formatted to at least
  *     four digits with leading zeros as necessary, e.g. {@code 0092} equals
  *     {@code 92} CE for the Gregorian calendar.
  *
- * <tr><td valign="top">{@code 'y'}
- *     <td valign="top"> <code>'&#92;u0079'</code>
+ * <tr><td style="vertical-align:top">{@code 'y'}
+ *     <td style="vertical-align:top"> <code>'&#92;u0079'</code>
  *     <td> Last two digits of the year, formatted with leading zeros as
  *     necessary, i.e. {@code 00 - 99}.
  *
- * <tr><td valign="top">{@code 'j'}
- *     <td valign="top"> <code>'&#92;u006a'</code>
+ * <tr><td style="vertical-align:top">{@code 'j'}
+ *     <td style="vertical-align:top"> <code>'&#92;u006a'</code>
  *     <td> Day of year, formatted as three digits with leading zeros as
  *     necessary, e.g. {@code 001 - 366} for the Gregorian calendar.
  *     {@code 001} corresponds to the first day of the year.
  *
- * <tr><td valign="top">{@code 'm'}
- *     <td valign="top"> <code>'&#92;u006d'</code>
+ * <tr><td style="vertical-align:top">{@code 'm'}
+ *     <td style="vertical-align:top"> <code>'&#92;u006d'</code>
  *     <td> Month, formatted as two digits with leading zeros as necessary,
  *     i.e. {@code 01 - 13}, where "{@code 01}" is the first month of the
  *     year and ("{@code 13}" is a special value required to support lunar
  *     calendars).
  *
- * <tr><td valign="top">{@code 'd'}
- *     <td valign="top"> <code>'&#92;u0064'</code>
+ * <tr><td style="vertical-align:top">{@code 'd'}
+ *     <td style="vertical-align:top"> <code>'&#92;u0064'</code>
  *     <td> Day of month, formatted as two digits with leading zeros as
  *     necessary, i.e. {@code 01 - 31}, where "{@code 01}" is the first day
  *     of the month.
  *
- * <tr><td valign="top">{@code 'e'}
- *     <td valign="top"> <code>'&#92;u0065'</code>
+ * <tr><td style="vertical-align:top">{@code 'e'}
+ *     <td style="vertical-align:top"> <code>'&#92;u0065'</code>
  *     <td> Day of month, formatted as two digits, i.e. {@code 1 - 31} where
  *     "{@code 1}" is the first day of the month.
  *
@@ -1699,31 +1699,31 @@
  *
  * <table cellpadding=5 summary="composites">
  *
- * <tr><td valign="top">{@code 'R'}
- *     <td valign="top"> <code>'&#92;u0052'</code>
+ * <tr><td style="vertical-align:top">{@code 'R'}
+ *     <td style="vertical-align:top"> <code>'&#92;u0052'</code>
  *     <td> Time formatted for the 24-hour clock as {@code "%tH:%tM"}
  *
- * <tr><td valign="top">{@code 'T'}
- *     <td valign="top"> <code>'&#92;u0054'</code>
+ * <tr><td style="vertical-align:top">{@code 'T'}
+ *     <td style="vertical-align:top"> <code>'&#92;u0054'</code>
  *     <td> Time formatted for the 24-hour clock as {@code "%tH:%tM:%tS"}.
  *
- * <tr><td valign="top">{@code 'r'}
- *     <td valign="top"> <code>'&#92;u0072'</code>
+ * <tr><td style="vertical-align:top">{@code 'r'}
+ *     <td style="vertical-align:top"> <code>'&#92;u0072'</code>
  *     <td> Time formatted for the 12-hour clock as {@code "%tI:%tM:%tS
  *     %Tp"}.  The location of the morning or afternoon marker
  *     ({@code '%Tp'}) may be locale-dependent.
  *
- * <tr><td valign="top">{@code 'D'}
- *     <td valign="top"> <code>'&#92;u0044'</code>
+ * <tr><td style="vertical-align:top">{@code 'D'}
+ *     <td style="vertical-align:top"> <code>'&#92;u0044'</code>
  *     <td> Date formatted as {@code "%tm/%td/%ty"}.
  *
- * <tr><td valign="top">{@code 'F'}
- *     <td valign="top"> <code>'&#92;u0046'</code>
+ * <tr><td style="vertical-align:top">{@code 'F'}
+ *     <td style="vertical-align:top"> <code>'&#92;u0046'</code>
  *     <td> <a href="http://www.w3.org/TR/NOTE-datetime">ISO&nbsp;8601</a>
  *     complete date formatted as {@code "%tY-%tm-%td"}.
  *
- * <tr><td valign="top">{@code 'c'}
- *     <td valign="top"> <code>'&#92;u0063'</code>
+ * <tr><td style="vertical-align:top">{@code 'c'}
+ *     <td style="vertical-align:top"> <code>'&#92;u0063'</code>
  *     <td> Date and time formatted as {@code "%ta %tb %td %tT %tZ %tY"},
  *     e.g. {@code "Sun Jul 20 16:17:00 EDT 1969"}.
  *
@@ -1744,13 +1744,13 @@
  * <p> The precision is not applicable.  If the precision is specified then an
  * {@link IllegalFormatPrecisionException} will be thrown.
  *
- * <h4><a name="dper">Percent</a></h4>
+ * <h4><a id="dper">Percent</a></h4>
  *
  * <p> The conversion does not correspond to any argument.
  *
  * <table cellpadding=5 summary="DTConv">
  *
- * <tr><td valign="top">{@code '%'}
+ * <tr><td style="vertical-align:top">{@code '%'}
  *     <td> The result is a literal {@code '%'} (<code>'&#92;u0025'</code>)
  *
  * <p> The width is the minimum number of characters to
@@ -1769,13 +1769,13 @@
  *
  * </table>
  *
- * <h4><a name="dls">Line Separator</a></h4>
+ * <h4><a id="dls">Line Separator</a></h4>
  *
  * <p> The conversion does not correspond to any argument.
  *
  * <table cellpadding=5 summary="DTConv">
  *
- * <tr><td valign="top">{@code 'n'}
+ * <tr><td style="vertical-align:top">{@code 'n'}
  *     <td> the platform-specific line separator as returned by {@link
  *     System#lineSeparator()}.
  *
@@ -1785,7 +1785,7 @@
  * {@link IllegalFormatFlagsException}, {@link IllegalFormatWidthException},
  * and {@link IllegalFormatPrecisionException}, respectively will be thrown.
  *
- * <h4><a name="dpos">Argument Index</a></h4>
+ * <h4><a id="dpos">Argument Index</a></h4>
  *
  * <p> Format specifiers can reference arguments in three ways:
  *
--- a/jdk/src/java.base/share/classes/java/util/GregorianCalendar.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/util/GregorianCalendar.java	Fri Apr 28 13:52:45 2017 -0700
@@ -91,7 +91,7 @@
  * adjustment may be made if desired for dates that are prior to the Gregorian
  * changeover and which fall between January 1 and March 24.
  *
- * <h3><a name="week_and_year">Week Of Year and Week Year</a></h3>
+ * <h3><a id="week_and_year">Week Of Year and Week Year</a></h3>
  *
  * <p>Values calculated for the {@link Calendar#WEEK_OF_YEAR
  * WEEK_OF_YEAR} field range from 1 to 53. The first week of a
@@ -108,7 +108,7 @@
  * <p>The {@code getFirstDayOfWeek()} and {@code
  * getMinimalDaysInFirstWeek()} values are initialized using
  * locale-dependent resources when constructing a {@code
- * GregorianCalendar}. <a name="iso8601_compatible_setting">The week
+ * GregorianCalendar}. <a id="iso8601_compatible_setting">The week
  * determination is compatible</a> with the ISO 8601 standard when {@code
  * getFirstDayOfWeek()} is {@code MONDAY} and {@code
  * getMinimalDaysInFirstWeek()} is 4, which values are used in locales
@@ -117,7 +117,7 @@
  * {@link Calendar#setMinimalDaysInFirstWeek(int)
  * setMinimalDaysInFirstWeek()}.
  *
- * <p>A <a name="week_year"><em>week year</em></a> is in sync with a
+ * <p>A <a id="week_year"><em>week year</em></a> is in sync with a
  * {@code WEEK_OF_YEAR} cycle. All weeks between the first and last
  * weeks (inclusive) have the same <em>week year</em> value.
  * Therefore, the first and last days of a week year may have
--- a/jdk/src/java.base/share/classes/java/util/List.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/util/List.java	Fri Apr 28 13:52:45 2017 -0700
@@ -87,7 +87,7 @@
  * Such exceptions are marked as "optional" in the specification for this
  * interface.
  *
- * <h2><a name="immutable">Immutable List Static Factory Methods</a></h2>
+ * <h2><a id="immutable">Immutable List Static Factory Methods</a></h2>
  * <p>The {@link List#of(Object...) List.of()} static factory methods
  * provide a convenient way to create immutable lists. The {@code List}
  * instances created by these methods have the following characteristics:
--- a/jdk/src/java.base/share/classes/java/util/ListResourceBundle.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/util/ListResourceBundle.java	Fri Apr 28 13:52:45 2017 -0700
@@ -56,7 +56,7 @@
  * that key.
  *
  * <p>
- * The following <a name="sample">example</a> shows two members of a resource
+ * The following <a id="sample">example</a> shows two members of a resource
  * bundle family with the base name "MyResources".
  * "MyResources" is the default member of the bundle family, and
  * "MyResources_fr" is the French member.
--- a/jdk/src/java.base/share/classes/java/util/Locale.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/util/Locale.java	Fri Apr 28 13:52:45 2017 -0700
@@ -83,7 +83,7 @@
  * described below.
  *
  * <dl>
- *   <dt><a name="def_language"><b>language</b></a></dt>
+ *   <dt><a id="def_language"><b>language</b></a></dt>
  *
  *   <dd>ISO 639 alpha-2 or alpha-3 language code, or registered
  *   language subtags up to 8 alpha letters (for future enhancements).
@@ -101,7 +101,7 @@
  *
  *   <dd>Example: "en" (English), "ja" (Japanese), "kok" (Konkani)</dd>
  *
- *   <dt><a name="def_script"><b>script</b></a></dt>
+ *   <dt><a id="def_script"><b>script</b></a></dt>
  *
  *   <dd>ISO 15924 alpha-4 script code.  You can find a full list of
  *   valid script codes in the IANA Language Subtag Registry (search
@@ -115,7 +115,7 @@
  *
  *   <dd>Example: "Latn" (Latin), "Cyrl" (Cyrillic)</dd>
  *
- *   <dt><a name="def_region"><b>country (region)</b></a></dt>
+ *   <dt><a id="def_region"><b>country (region)</b></a></dt>
  *
  *   <dd>ISO 3166 alpha-2 country code or UN M.49 numeric-3 area code.
  *   You can find a full list of valid country and region codes in the
@@ -129,7 +129,7 @@
  *   <dd>Example: "US" (United States), "FR" (France), "029"
  *   (Caribbean)</dd>
  *
- *   <dt><a name="def_variant"><b>variant</b></a></dt>
+ *   <dt><a id="def_variant"><b>variant</b></a></dt>
  *
  *   <dd>Any arbitrary value used to indicate a variation of a
  *   <code>Locale</code>.  Where there are two or more variant values
@@ -160,7 +160,7 @@
  *
  *   <dd>Example: "polyton" (Polytonic Greek), "POSIX"</dd>
  *
- *   <dt><a name="def_extensions"><b>extensions</b></a></dt>
+ *   <dt><a id="def_extensions"><b>extensions</b></a></dt>
  *
  *   <dd>A map from single character keys to string values, indicating
  *   extensions apart from language identification.  The extensions in
@@ -188,7 +188,7 @@
  * requirement (is well-formed), but does not validate the value
  * itself.  See {@link Builder} for details.
  *
- * <h3><a name="def_locale_extension">Unicode locale/language extension</a></h3>
+ * <h3><a id="def_locale_extension">Unicode locale/language extension</a></h3>
  *
  * <p>UTS#35, "Unicode Locale Data Markup Language" defines optional
  * attributes and keywords to override or refine the default behavior
@@ -269,7 +269,7 @@
  * </pre>
  * </blockquote>
  *
- * <h4><a name="LocaleMatching">Locale Matching</a></h4>
+ * <h4><a id="LocaleMatching">Locale Matching</a></h4>
  *
  * <p>If an application or a system is internationalized and provides localized
  * resources for multiple locales, it sometimes needs to find one or more
@@ -408,7 +408,7 @@
  * Clients desiring a string representation of the complete locale can
  * then always rely on <code>toLanguageTag</code> for this purpose.
  *
- * <h5><a name="special_cases_constructor">Special cases</a></h5>
+ * <h5><a id="special_cases_constructor">Special cases</a></h5>
  *
  * <p>For compatibility reasons, two
  * non-conforming locales are treated as special cases.  These are
@@ -1588,7 +1588,7 @@
      * <p>Grandfathered tags with canonical replacements are as follows:
      *
      * <table summary="Grandfathered tags with canonical replacements">
-     * <tbody align="center">
+     * <tbody style="text-align:center">
      * <tr><th>grandfathered tag</th><th>&nbsp;</th><th>modern replacement</th></tr>
      * <tr><td>art-lojban</td><td>&nbsp;</td><td>jbo</td></tr>
      * <tr><td>i-ami</td><td>&nbsp;</td><td>ami</td></tr>
@@ -1617,7 +1617,7 @@
      * converted as follows:
      *
      * <table summary="Grandfathered tags with no modern replacement">
-     * <tbody align="center">
+     * <tbody style="text-align:center">
      * <tr><th>grandfathered tag</th><th>&nbsp;</th><th>converts to</th></tr>
      * <tr><td>cel-gaulish</td><td>&nbsp;</td><td>xtg-x-cel-gaulish</td></tr>
      * <tr><td>en-GB-oed</td><td>&nbsp;</td><td>en-GB-x-oed</td></tr>
@@ -2774,60 +2774,60 @@
      * <th>Language Priority List: {@code "de-*-DE"}</th>
      * </tr>
      * <tr>
-     * <td valign=top>
+     * <td style="vertical-align:top">
      * {@link FilteringMode#AUTOSELECT_FILTERING AUTOSELECT_FILTERING}
      * </td>
-     * <td valign=top>
+     * <td style="vertical-align:top">
      * Performs <em>basic</em> filtering and returns {@code "de-DE"} and
      * {@code "de-DE-1996"}.
      * </td>
-     * <td valign=top>
+     * <td style="vertical-align:top">
      * Performs <em>extended</em> filtering and returns {@code "de-DE"},
      * {@code "de-Deva-DE"}, {@code "de-DE-1996"}, {@code "de-Latn-DE"}, and
      * {@code "de-Latn-DE-1996"}.
      * </td>
      * </tr>
      * <tr>
-     * <td valign=top>
+     * <td style="vertical-align:top">
      * {@link FilteringMode#EXTENDED_FILTERING EXTENDED_FILTERING}
      * </td>
-     * <td valign=top>
+     * <td style="vertical-align:top">
      * Performs <em>extended</em> filtering and returns {@code "de-DE"},
      * {@code "de-Deva-DE"}, {@code "de-DE-1996"}, {@code "de-Latn-DE"}, and
      * {@code "de-Latn-DE-1996"}.
      * </td>
-     * <td valign=top>Same as above.</td>
+     * <td style="vertical-align:top">Same as above.</td>
      * </tr>
      * <tr>
-     * <td valign=top>
+     * <td style="vertical-align:top">
      * {@link FilteringMode#IGNORE_EXTENDED_RANGES IGNORE_EXTENDED_RANGES}
      * </td>
-     * <td valign=top>
+     * <td style="vertical-align:top">
      * Performs <em>basic</em> filtering and returns {@code "de-DE"} and
      * {@code "de-DE-1996"}.
      * </td>
-     * <td valign=top>
+     * <td style="vertical-align:top">
      * Performs <em>basic</em> filtering and returns {@code null} because
      * nothing matches.
      * </td>
      * </tr>
      * <tr>
-     * <td valign=top>
+     * <td style="vertical-align:top">
      * {@link FilteringMode#MAP_EXTENDED_RANGES MAP_EXTENDED_RANGES}
      * </td>
-     * <td valign=top>Same as above.</td>
-     * <td valign=top>
+     * <td style="vertical-align:top">Same as above.</td>
+     * <td style="vertical-align:top">
      * Performs <em>basic</em> filtering and returns {@code "de-DE"} and
      * {@code "de-DE-1996"} because {@code "de-*-DE"} is mapped to
      * {@code "de-DE"}.
      * </td>
      * </tr>
      * <tr>
-     * <td valign=top>
+     * <td style="vertical-align:top">
      * {@link FilteringMode#REJECT_EXTENDED_RANGES REJECT_EXTENDED_RANGES}
      * </td>
-     * <td valign=top>Same as above.</td>
-     * <td valign=top>
+     * <td style="vertical-align:top">Same as above.</td>
+     * <td style="vertical-align:top">
      * Throws {@link IllegalArgumentException} because {@code "de-*-DE"} is
      * not a valid basic language range.
      * </td>
--- a/jdk/src/java.base/share/classes/java/util/Map.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/util/Map.java	Fri Apr 28 13:52:45 2017 -0700
@@ -110,7 +110,7 @@
  * Implementations may optionally handle the self-referential scenario, however
  * most current implementations do not do so.
  *
- * <h2><a name="immutable">Immutable Map Static Factory Methods</a></h2>
+ * <h2><a id="immutable">Immutable Map Static Factory Methods</a></h2>
  * <p>The {@link Map#of() Map.of()} and
  * {@link Map#ofEntries(Map.Entry...) Map.ofEntries()}
  * static factory methods provide a convenient way to create immutable maps.
--- a/jdk/src/java.base/share/classes/java/util/Properties.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/util/Properties.java	Fri Apr 28 13:52:45 2017 -0700
@@ -290,7 +290,7 @@
      * specifies that the key is {@code "cheeses"} and the associated
      * element is the empty string {@code ""}.
      * <p>
-     * <a name="unicodeescapes"></a>
+     * <a id="unicodeescapes"></a>
      * Characters in keys and elements can be represented in escape
      * sequences similar to those used for character and string literals
      * (see sections 3.3 and 3.10.6 of
--- a/jdk/src/java.base/share/classes/java/util/PropertyResourceBundle.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/util/PropertyResourceBundle.java	Fri Apr 28 13:52:45 2017 -0700
@@ -67,7 +67,7 @@
  * for a complete description of the search and instantiation strategy.
  *
  * <p>
- * The following <a name="sample">example</a> shows a member of a resource
+ * The following <a id="sample">example</a> shows a member of a resource
  * bundle family with the base name "MyResources".
  * The text defines the bundle "MyResources_de",
  * the German member of the bundle family.
--- a/jdk/src/java.base/share/classes/java/util/Queue.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/util/Queue.java	Fri Apr 28 13:52:45 2017 -0700
@@ -51,8 +51,8 @@
  * <caption>Summary of Queue methods</caption>
  *  <tr>
  *    <td></td>
- *    <td ALIGN=CENTER><em>Throws exception</em></td>
- *    <td ALIGN=CENTER><em>Returns special value</em></td>
+ *    <td style="text-align:center"><em>Throws exception</em></td>
+ *    <td style="text-align:center"><em>Returns special value</em></td>
  *  </tr>
  *  <tr>
  *    <td><b>Insert</b></td>
--- a/jdk/src/java.base/share/classes/java/util/ResourceBundle.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/util/ResourceBundle.java	Fri Apr 28 13:52:45 2017 -0700
@@ -204,7 +204,7 @@
  * known concrete subclasses {@code ListResourceBundle} and
  * {@code PropertyResourceBundle} are thread-safe.
  *
- * <h3><a name="bundleprovider">Resource Bundles in Named Modules</a></h3>
+ * <h3><a id="bundleprovider">Resource Bundles in Named Modules</a></h3>
  *
  * When resource bundles are deployed in named modules, the following
  * module-specific requirements and restrictions are applied.
@@ -239,7 +239,7 @@
  * </li>
  * </ul>
  *
- * <h3><a name="RBP_support">ResourceBundleProvider Service Providers</a></h3>
+ * <h3><a id="RBP_support">ResourceBundleProvider Service Providers</a></h3>
  *
  * The {@code getBundle} factory methods load service providers of
  * {@link ResourceBundleProvider}, if available, using {@link ServiceLoader}.
@@ -266,7 +266,7 @@
  * {@link #getBundle(String, Locale, ClassLoader, Control) getBundle}
  * factory method for details.
  *
- * <p><a name="modify_default_behavior">For the {@code getBundle} factory</a>
+ * <p><a id="modify_default_behavior">For the {@code getBundle} factory</a>
  * methods that take no {@link Control} instance, their <a
  * href="#default_behavior"> default behavior</a> of resource bundle loading
  * can be modified with custom {@link
@@ -1063,7 +1063,7 @@
      * description of <a href="#modify_default_behavior">modifying the default
      * behavior</a>.
      *
-     * <p><a name="default_behavior">The following describes the default
+     * <p><a id="default_behavior">The following describes the default
      * behavior</a>.
      *
      * <p>
@@ -1080,7 +1080,7 @@
      * <p><code>getBundle</code> uses the base name, the specified locale, and
      * the default locale (obtained from {@link java.util.Locale#getDefault()
      * Locale.getDefault}) to generate a sequence of <a
-     * name="candidates"><em>candidate bundle names</em></a>.  If the specified
+     * id="candidates"><em>candidate bundle names</em></a>.  If the specified
      * locale's language, script, country, and variant are all empty strings,
      * then the base name is the only candidate bundle name.  Otherwise, a list
      * of candidate locales is generated from the attribute values of the
@@ -1170,7 +1170,7 @@
      * <p>If still no result bundle is found, the base name alone is looked up. If
      * this still fails, a <code>MissingResourceException</code> is thrown.
      *
-     * <p><a name="parent_chain"> Once a result resource bundle has been found,
+     * <p><a id="parent_chain"> Once a result resource bundle has been found,
      * its <em>parent chain</em> is instantiated</a>.  If the result bundle already
      * has a parent (perhaps because it was returned from a cache) the chain is
      * complete.
@@ -1200,7 +1200,7 @@
      * path name (using "/") instead of a fully qualified class name (using
      * ".").
      *
-     * <p><a name="default_behavior_example">
+     * <p><a id="default_behavior_example">
      * <strong>Example:</strong></a>
      * <p>
      * The following class and property files are provided:
@@ -2481,7 +2481,7 @@
      * }
      * </pre>
      *
-     * @apiNote <a name="note">{@code ResourceBundle.Control} is not supported
+     * @apiNote <a id="note">{@code ResourceBundle.Control} is not supported
      * in named modules.</a> If the {@code ResourceBundle.getBundle} method with
      * a {@code ResourceBundle.Control} is called in a named module, the method
      * will throw an {@link UnsupportedOperationException}. Any service providers
--- a/jdk/src/java.base/share/classes/java/util/Scanner.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/util/Scanner.java	Fri Apr 28 13:52:45 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -95,7 +95,7 @@
  *     s.close();
  * }</pre></blockquote>
  *
- * <p>The <a name="default-delimiter">default whitespace delimiter</a> used
+ * <p>The <a id="default-delimiter">default whitespace delimiter</a> used
  * by a scanner is as recognized by {@link Character#isWhitespace(char)
  * Character.isWhitespace()}. The {@link #reset reset()}
  * method will reset the value of the scanner's delimiter to the default
@@ -152,11 +152,11 @@
  * {@link #reset} method will reset the value of the scanner's radix to
  * {@code 10} regardless of whether it was previously changed.
  *
- * <h3> <a name="localized-numbers">Localized numbers</a> </h3>
+ * <h3> <a id="localized-numbers">Localized numbers</a> </h3>
  *
  * <p> An instance of this class is capable of scanning numbers in the standard
  * formats as well as in the formats of the scanner's locale. A scanner's
- * <a name="initial-locale">initial locale </a>is the value returned by the {@link
+ * <a id="initial-locale">initial locale </a>is the value returned by the {@link
  * java.util.Locale#getDefault(Locale.Category)
  * Locale.getDefault(Locale.Category.FORMAT)} method; it may be changed via the {@link
  * #useLocale useLocale()} method. The {@link #reset} method will reset the value of the
@@ -213,7 +213,7 @@
  *         getInfinity()}
  * </dl></blockquote>
  *
- * <h4> <a name="number-syntax">Number syntax</a> </h4>
+ * <h4> <a id="number-syntax">Number syntax</a> </h4>
  *
  * <p> The strings that can be parsed as numbers by an instance of this class
  * are specified in terms of the following regular-expression grammar, where
@@ -244,7 +244,7 @@
  *       <dd>{@code ( ( }<i>Digit</i>{@code + )
  *               | }<i>GroupedNumeral</i>{@code  )}
  *
- *   <dt><a name="Integer-regex"><i>Integer</i>:</a>
+ *   <dt><a id="Integer-regex"><i>Integer</i>:</a>
  *       <dd>{@code ( [-+]? ( }<i>Numeral</i>{@code
  *                               ) )}
  *       <dd>{@code | }<i>LocalPositivePrefix</i> <i>Numeral</i>
@@ -263,7 +263,7 @@
  *   <dt><i>Exponent</i>:
  *       <dd>{@code ( [eE] [+-]? }<i>Digit</i>{@code + )}
  *
- *   <dt><a name="Decimal-regex"><i>Decimal</i>:</a>
+ *   <dt><a id="Decimal-regex"><i>Decimal</i>:</a>
  *       <dd>{@code ( [-+]? }<i>DecimalNumeral</i>
  *                         <i>Exponent</i>{@code ? )}
  *       <dd>{@code | }<i>LocalPositivePrefix</i>
@@ -294,7 +294,7 @@
  *                 <i>NonNumber</i>
  *                 <i>LocalNegativeSuffix</i>
  *
- *   <dt><a name="Float-regex"><i>Float</i></a>:
+ *   <dt><a id="Float-regex"><i>Float</i></a>:
  *       <dd><i>Decimal</i>
  *           {@code | }<i>HexFloat</i>
  *           {@code | }<i>SignedNonNumber</i>
@@ -2846,6 +2846,7 @@
     class FindSpliterator extends Spliterators.AbstractSpliterator<MatchResult> {
         final Pattern pattern;
         int expectedCount = -1;
+        private boolean advance = false; // true if we need to auto-advance
 
         FindSpliterator(Pattern pattern) {
             super(Long.MAX_VALUE,
@@ -2861,12 +2862,15 @@
                     throw new ConcurrentModificationException();
                 }
             } else {
+                // init
+                matchValid = false;
+                matcher.usePattern(pattern);
                 expectedCount = modCount;
             }
 
             while (true) {
                 // assert expectedCount == modCount
-                if (findPatternInBuffer(pattern, 0)) { // doesn't increment modCount
+                if (nextInBuffer()) { // doesn't increment modCount
                     cons.accept(matcher.toMatchResult());
                     if (expectedCount != modCount) {
                         throw new ConcurrentModificationException();
@@ -2879,6 +2883,29 @@
                     return false; // reached end of input
             }
         }
+
+        // reimplementation of findPatternInBuffer with auto-advance on zero-length matches
+        private boolean nextInBuffer() {
+            if (advance) {
+                if (position + 1 > buf.limit()) {
+                    if (!sourceClosed)
+                        needInput = true;
+                    return false;
+                }
+                position++;
+                advance = false;
+            }
+            matcher.region(position, buf.limit());
+            if (matcher.find() && (!matcher.hitEnd() || sourceClosed)) {
+                 // Did not hit end, or hit real end
+                 position = matcher.end();
+                 advance = matcher.start() == position;
+                 return true;
+            }
+            if (!sourceClosed)
+                needInput = true;
+            return false;
+        }
     }
 
     /** Small LRU cache of Patterns. */
--- a/jdk/src/java.base/share/classes/java/util/ServiceLoader.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/util/ServiceLoader.java	Fri Apr 28 13:52:45 2017 -0700
@@ -125,13 +125,13 @@
  *
  * <p> A service provider that is packaged as a JAR file for the class path is
  * identified by placing a <i>provider-configuration file</i> in the resource
- * directory <tt>META-INF/services</tt>. The file's name is the fully-qualified
+ * directory {@code META-INF/services}. The file's name is the fully-qualified
  * <a href="../lang/ClassLoader.html#name">binary name</a> of the service's
  * type. The file contains a list of fully-qualified binary names of concrete
  * provider classes, one per line.  Space and tab characters surrounding each
  * name, as well as blank lines, are ignored.  The comment character is
- * <tt>'#'</tt> (<tt>'&#92;u0023'</tt>,
- * <font style="font-size:smaller;">NUMBER SIGN</font>); on
+ * {@code '#'} (<code>'&#92;u0023'</code>,
+ * <span style="font-size:smaller;">NUMBER SIGN</span>); on
  * each line all characters following the first comment character are ignored.
  * The file must be encoded in UTF-8.
  * If a particular concrete provider class is named in more than one
@@ -257,7 +257,7 @@
  * method in this class will cause a {@link NullPointerException} to be thrown.
  *
  * <h2> Example </h2>
- * <p> Suppose we have a service type <tt>com.example.CodecSet</tt> which is
+ * <p> Suppose we have a service type {@code com.example.CodecSet} which is
  * intended to represent sets of encoder/decoder pairs for some protocol.  In
  * this case it is an abstract class with two abstract methods:
  *
@@ -265,11 +265,11 @@
  * public abstract Encoder getEncoder(String encodingName);
  * public abstract Decoder getDecoder(String encodingName);</pre></blockquote>
  *
- * Each method returns an appropriate object or <tt>null</tt> if the provider
+ * Each method returns an appropriate object or {@code null} if the provider
  * does not support the given encoding.  Typical providers support more than
  * one encoding.
  *
- * <p> The <tt>CodecSet</tt> class creates and saves a single service instance
+ * <p> The {@code CodecSet} class creates and saves a single service instance
  * at initialization:
  *
  * <pre>{@code
@@ -1402,7 +1402,7 @@
      *
      * @param  loader
      *         The class loader to be used to load provider-configuration files
-     *         and provider classes, or <tt>null</tt> if the system class
+     *         and provider classes, or {@code null} if the system class
      *         loader (or, failing that, the bootstrap class loader) is to be
      *         used
      *
--- a/jdk/src/java.base/share/classes/java/util/Set.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/util/Set.java	Fri Apr 28 13:52:45 2017 -0700
@@ -63,7 +63,7 @@
  * Such exceptions are marked as "optional" in the specification for this
  * interface.
  *
- * <h2><a name="immutable">Immutable Set Static Factory Methods</a></h2>
+ * <h2><a id="immutable">Immutable Set Static Factory Methods</a></h2>
  * <p>The {@link Set#of(Object...) Set.of()} static factory methods
  * provide a convenient way to create immutable sets. The {@code Set}
  * instances created by these methods have the following characteristics:
--- a/jdk/src/java.base/share/classes/java/util/Spliterator.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/util/Spliterator.java	Fri Apr 28 13:52:45 2017 -0700
@@ -62,7 +62,7 @@
  * New characteristics may be defined in the future, so implementors should not
  * assign meanings to unlisted values.
  *
- * <p><a name="binding">A Spliterator that does not report {@code IMMUTABLE} or
+ * <p><a id="binding">A Spliterator that does not report {@code IMMUTABLE} or
  * {@code CONCURRENT} is expected to have a documented policy concerning:
  * when the spliterator <em>binds</em> to the element source; and detection of
  * structural interference of the element source detected after binding.</a>  A
--- a/jdk/src/java.base/share/classes/java/util/TimeZone.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/util/TimeZone.java	Fri Apr 28 13:52:45 2017 -0700
@@ -74,7 +74,7 @@
  * produce a TimeZone. The syntax of a custom time zone ID is:
  *
  * <blockquote><pre>
- * <a name="CustomID"><i>CustomID:</i></a>
+ * <a id="CustomID"><i>CustomID:</i></a>
  *         <code>GMT</code> <i>Sign</i> <i>Hours</i> <code>:</code> <i>Minutes</i>
  *         <code>GMT</code> <i>Sign</i> <i>Hours</i> <i>Minutes</i>
  *         <code>GMT</code> <i>Sign</i> <i>Hours</i>
@@ -102,7 +102,7 @@
  * When creating a <code>TimeZone</code>, the specified custom time
  * zone ID is normalized in the following syntax:
  * <blockquote><pre>
- * <a name="NormalizedCustomID"><i>NormalizedCustomID:</i></a>
+ * <a id="NormalizedCustomID"><i>NormalizedCustomID:</i></a>
  *         <code>GMT</code> <i>Sign</i> <i>TwoDigitHours</i> <code>:</code> <i>Minutes</i>
  * <i>Sign:</i> one of
  *         <code>+ -</code>
--- a/jdk/src/java.base/share/classes/java/util/concurrent/BlockingDeque.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/util/concurrent/BlockingDeque.java	Fri Apr 28 13:52:45 2017 -0700
@@ -56,14 +56,14 @@
  * <table BORDER CELLPADDING=3 CELLSPACING=1>
  * <caption>Summary of BlockingDeque methods</caption>
  *  <tr>
- *    <td ALIGN=CENTER COLSPAN = 5> <b>First Element (Head)</b></td>
+ *    <td style="text-align:center" COLSPAN = 5> <b>First Element (Head)</b></td>
  *  </tr>
  *  <tr>
  *    <td></td>
- *    <td ALIGN=CENTER><em>Throws exception</em></td>
- *    <td ALIGN=CENTER><em>Special value</em></td>
- *    <td ALIGN=CENTER><em>Blocks</em></td>
- *    <td ALIGN=CENTER><em>Times out</em></td>
+ *    <td style="text-align:center"><em>Throws exception</em></td>
+ *    <td style="text-align:center"><em>Special value</em></td>
+ *    <td style="text-align:center"><em>Blocks</em></td>
+ *    <td style="text-align:center"><em>Times out</em></td>
  *  </tr>
  *  <tr>
  *    <td><b>Insert</b></td>
@@ -87,14 +87,14 @@
  *    <td><em>not applicable</em></td>
  *  </tr>
  *  <tr>
- *    <td ALIGN=CENTER COLSPAN = 5> <b>Last Element (Tail)</b></td>
+ *    <td style="text-align:center" COLSPAN = 5> <b>Last Element (Tail)</b></td>
  *  </tr>
  *  <tr>
  *    <td></td>
- *    <td ALIGN=CENTER><em>Throws exception</em></td>
- *    <td ALIGN=CENTER><em>Special value</em></td>
- *    <td ALIGN=CENTER><em>Blocks</em></td>
- *    <td ALIGN=CENTER><em>Times out</em></td>
+ *    <td style="text-align:center"><em>Throws exception</em></td>
+ *    <td style="text-align:center"><em>Special value</em></td>
+ *    <td style="text-align:center"><em>Blocks</em></td>
+ *    <td style="text-align:center"><em>Times out</em></td>
  *  </tr>
  *  <tr>
  *    <td><b>Insert</b></td>
@@ -131,11 +131,11 @@
  * <table BORDER CELLPADDING=3 CELLSPACING=1>
  * <caption>Comparison of BlockingQueue and BlockingDeque methods</caption>
  *  <tr>
- *    <td ALIGN=CENTER> <b>{@code BlockingQueue} Method</b></td>
- *    <td ALIGN=CENTER> <b>Equivalent {@code BlockingDeque} Method</b></td>
+ *    <td style="text-align:center"> <b>{@code BlockingQueue} Method</b></td>
+ *    <td style="text-align:center"> <b>Equivalent {@code BlockingDeque} Method</b></td>
  *  </tr>
  *  <tr>
- *    <td ALIGN=CENTER COLSPAN = 2> <b>Insert</b></td>
+ *    <td style="text-align:center" COLSPAN = 2> <b>Insert</b></td>
  *  </tr>
  *  <tr>
  *    <td>{@link #add(Object) add(e)}</td>
@@ -154,7 +154,7 @@
  *    <td>{@link #offerLast(Object, long, TimeUnit) offerLast(e, time, unit)}</td>
  *  </tr>
  *  <tr>
- *    <td ALIGN=CENTER COLSPAN = 2> <b>Remove</b></td>
+ *    <td style="text-align:center" COLSPAN = 2> <b>Remove</b></td>
  *  </tr>
  *  <tr>
  *    <td>{@link #remove() remove()}</td>
@@ -173,7 +173,7 @@
  *    <td>{@link #pollFirst(long, TimeUnit) pollFirst(time, unit)}</td>
  *  </tr>
  *  <tr>
- *    <td ALIGN=CENTER COLSPAN = 2> <b>Examine</b></td>
+ *    <td style="text-align:center" COLSPAN = 2> <b>Examine</b></td>
  *  </tr>
  *  <tr>
  *    <td>{@link #element() element()}</td>
--- a/jdk/src/java.base/share/classes/java/util/concurrent/BlockingQueue.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/util/concurrent/BlockingQueue.java	Fri Apr 28 13:52:45 2017 -0700
@@ -57,10 +57,10 @@
  * <caption>Summary of BlockingQueue methods</caption>
  *  <tr>
  *    <td></td>
- *    <td ALIGN=CENTER><em>Throws exception</em></td>
- *    <td ALIGN=CENTER><em>Special value</em></td>
- *    <td ALIGN=CENTER><em>Blocks</em></td>
- *    <td ALIGN=CENTER><em>Times out</em></td>
+ *    <td style="text-align:center"><em>Throws exception</em></td>
+ *    <td style="text-align:center"><em>Special value</em></td>
+ *    <td style="text-align:center"><em>Blocks</em></td>
+ *    <td style="text-align:center"><em>Times out</em></td>
  *  </tr>
  *  <tr>
  *    <td><b>Insert</b></td>
--- a/jdk/src/java.base/share/classes/java/util/concurrent/ForkJoinPool.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/util/concurrent/ForkJoinPool.java	Fri Apr 28 13:52:45 2017 -0700
@@ -113,8 +113,8 @@
  * <caption>Summary of task execution methods</caption>
  *  <tr>
  *    <td></td>
- *    <td ALIGN=CENTER> <b>Call from non-fork/join clients</b></td>
- *    <td ALIGN=CENTER> <b>Call from within fork/join computations</b></td>
+ *    <td style="text-align:center"> <b>Call from non-fork/join clients</b></td>
+ *    <td style="text-align:center"> <b>Call from within fork/join computations</b></td>
  *  </tr>
  *  <tr>
  *    <td> <b>Arrange async execution</b></td>
--- a/jdk/src/java.base/share/classes/java/util/jar/JarFile.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/util/jar/JarFile.java	Fri Apr 28 13:52:45 2017 -0700
@@ -48,7 +48,7 @@
  * processing multi-release jar files.  The {@code Manifest} can be used
  * to specify meta-information about the jar file and its entries.
  *
- * <p><a name="multirelease">A multi-release jar file</a> is a jar file that
+ * <p><a id="multirelease">A multi-release jar file</a> is a jar file that
  * contains a manifest with a main attribute named "Multi-Release",
  * a set of "base" entries, some of which are public classes with public
  * or protected methods that comprise the public interface of the jar file,
--- a/jdk/src/java.base/share/classes/java/util/regex/Pattern.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/util/regex/Pattern.java	Fri Apr 28 13:52:45 2017 -0700
@@ -77,310 +77,310 @@
  * such use.
  *
  *
- * <h3><a name="sum">Summary of regular-expression constructs</a></h3>
+ * <h3><a id="sum">Summary of regular-expression constructs</a></h3>
  *
  * <table border="0" cellpadding="1" cellspacing="0"
  *  summary="Regular expression constructs, and what they match">
  *
- * <tr align="left">
- * <th align="left" id="construct">Construct</th>
- * <th align="left" id="matches">Matches</th>
+ * <tr style="text-align:left">
+ * <th style="text-align:left" id="construct">Construct</th>
+ * <th style="text-align:left" id="matches">Matches</th>
  * </tr>
  *
  * <tr><th>&nbsp;</th></tr>
- * <tr align="left"><th colspan="2" id="characters">Characters</th></tr>
+ * <tr style="text-align:left"><th colspan="2" id="characters">Characters</th></tr>
  *
- * <tr><td valign="top" headers="construct characters"><i>x</i></td>
+ * <tr><td style="vertical-align:top" headers="construct characters"><i>x</i></td>
  *     <td headers="matches">The character <i>x</i></td></tr>
- * <tr><td valign="top" headers="construct characters">{@code \\}</td>
+ * <tr><td style="vertical-align:top" headers="construct characters">{@code \\}</td>
  *     <td headers="matches">The backslash character</td></tr>
- * <tr><td valign="top" headers="construct characters">{@code \0}<i>n</i></td>
+ * <tr><td style="vertical-align:top" headers="construct characters">{@code \0}<i>n</i></td>
  *     <td headers="matches">The character with octal value {@code 0}<i>n</i>
  *         (0&nbsp;{@code <=}&nbsp;<i>n</i>&nbsp;{@code <=}&nbsp;7)</td></tr>
- * <tr><td valign="top" headers="construct characters">{@code \0}<i>nn</i></td>
+ * <tr><td style="vertical-align:top" headers="construct characters">{@code \0}<i>nn</i></td>
  *     <td headers="matches">The character with octal value {@code 0}<i>nn</i>
  *         (0&nbsp;{@code <=}&nbsp;<i>n</i>&nbsp;{@code <=}&nbsp;7)</td></tr>
- * <tr><td valign="top" headers="construct characters">{@code \0}<i>mnn</i></td>
+ * <tr><td style="vertical-align:top" headers="construct characters">{@code \0}<i>mnn</i></td>
  *     <td headers="matches">The character with octal value {@code 0}<i>mnn</i>
  *         (0&nbsp;{@code <=}&nbsp;<i>m</i>&nbsp;{@code <=}&nbsp;3,
  *         0&nbsp;{@code <=}&nbsp;<i>n</i>&nbsp;{@code <=}&nbsp;7)</td></tr>
- * <tr><td valign="top" headers="construct characters">{@code \x}<i>hh</i></td>
+ * <tr><td style="vertical-align:top" headers="construct characters">{@code \x}<i>hh</i></td>
  *     <td headers="matches">The character with hexadecimal&nbsp;value&nbsp;{@code 0x}<i>hh</i></td></tr>
- * <tr><td valign="top" headers="construct characters"><code>&#92;u</code><i>hhhh</i></td>
+ * <tr><td style="vertical-align:top" headers="construct characters"><code>&#92;u</code><i>hhhh</i></td>
  *     <td headers="matches">The character with hexadecimal&nbsp;value&nbsp;{@code 0x}<i>hhhh</i></td></tr>
- * <tr><td valign="top" headers="construct characters"><code>&#92;x</code><i>{h...h}</i></td>
+ * <tr><td style="vertical-align:top" headers="construct characters"><code>&#92;x</code><i>{h...h}</i></td>
  *     <td headers="matches">The character with hexadecimal&nbsp;value&nbsp;{@code 0x}<i>h...h</i>
  *         ({@link java.lang.Character#MIN_CODE_POINT Character.MIN_CODE_POINT}
  *         &nbsp;&lt;=&nbsp;{@code 0x}<i>h...h</i>&nbsp;&lt;=&nbsp;
  *          {@link java.lang.Character#MAX_CODE_POINT Character.MAX_CODE_POINT})</td></tr>
- * <tr><td valign="top" headers="construct characters"><code>&#92;N{</code><i>name</i><code>}</code></td>
+ * <tr><td style="vertical-align:top" headers="construct characters"><code>&#92;N{</code><i>name</i><code>}</code></td>
  *     <td headers="matches">The character with Unicode character name <i>'name'</i></td></tr>
- * <tr><td valign="top" headers="matches">{@code \t}</td>
+ * <tr><td style="vertical-align:top" headers="matches">{@code \t}</td>
  *     <td headers="matches">The tab character (<code>'&#92;u0009'</code>)</td></tr>
- * <tr><td valign="top" headers="construct characters">{@code \n}</td>
+ * <tr><td style="vertical-align:top" headers="construct characters">{@code \n}</td>
  *     <td headers="matches">The newline (line feed) character (<code>'&#92;u000A'</code>)</td></tr>
- * <tr><td valign="top" headers="construct characters">{@code \r}</td>
+ * <tr><td style="vertical-align:top" headers="construct characters">{@code \r}</td>
  *     <td headers="matches">The carriage-return character (<code>'&#92;u000D'</code>)</td></tr>
- * <tr><td valign="top" headers="construct characters">{@code \f}</td>
+ * <tr><td style="vertical-align:top" headers="construct characters">{@code \f}</td>
  *     <td headers="matches">The form-feed character (<code>'&#92;u000C'</code>)</td></tr>
- * <tr><td valign="top" headers="construct characters">{@code \a}</td>
+ * <tr><td style="vertical-align:top" headers="construct characters">{@code \a}</td>
  *     <td headers="matches">The alert (bell) character (<code>'&#92;u0007'</code>)</td></tr>
- * <tr><td valign="top" headers="construct characters">{@code \e}</td>
+ * <tr><td style="vertical-align:top" headers="construct characters">{@code \e}</td>
  *     <td headers="matches">The escape character (<code>'&#92;u001B'</code>)</td></tr>
- * <tr><td valign="top" headers="construct characters">{@code \c}<i>x</i></td>
+ * <tr><td style="vertical-align:top" headers="construct characters">{@code \c}<i>x</i></td>
  *     <td headers="matches">The control character corresponding to <i>x</i></td></tr>
  *
  * <tr><th>&nbsp;</th></tr>
- * <tr align="left"><th colspan="2" id="classes">Character classes</th></tr>
+ * <tr style="text-align:left"><th colspan="2" id="classes">Character classes</th></tr>
  *
- * <tr><td valign="top" headers="construct classes">{@code [abc]}</td>
+ * <tr><td style="vertical-align:top" headers="construct classes">{@code [abc]}</td>
  *     <td headers="matches">{@code a}, {@code b}, or {@code c} (simple class)</td></tr>
- * <tr><td valign="top" headers="construct classes">{@code [^abc]}</td>
+ * <tr><td style="vertical-align:top" headers="construct classes">{@code [^abc]}</td>
  *     <td headers="matches">Any character except {@code a}, {@code b}, or {@code c} (negation)</td></tr>
- * <tr><td valign="top" headers="construct classes">{@code [a-zA-Z]}</td>
+ * <tr><td style="vertical-align:top" headers="construct classes">{@code [a-zA-Z]}</td>
  *     <td headers="matches">{@code a} through {@code z}
  *         or {@code A} through {@code Z}, inclusive (range)</td></tr>
- * <tr><td valign="top" headers="construct classes">{@code [a-d[m-p]]}</td>
+ * <tr><td style="vertical-align:top" headers="construct classes">{@code [a-d[m-p]]}</td>
  *     <td headers="matches">{@code a} through {@code d},
  *      or {@code m} through {@code p}: {@code [a-dm-p]} (union)</td></tr>
- * <tr><td valign="top" headers="construct classes">{@code [a-z&&[def]]}</td>
+ * <tr><td style="vertical-align:top" headers="construct classes">{@code [a-z&&[def]]}</td>
  *     <td headers="matches">{@code d}, {@code e}, or {@code f} (intersection)</tr>
- * <tr><td valign="top" headers="construct classes">{@code [a-z&&[^bc]]}</td>
+ * <tr><td style="vertical-align:top" headers="construct classes">{@code [a-z&&[^bc]]}</td>
  *     <td headers="matches">{@code a} through {@code z},
  *         except for {@code b} and {@code c}: {@code [ad-z]} (subtraction)</td></tr>
- * <tr><td valign="top" headers="construct classes">{@code [a-z&&[^m-p]]}</td>
+ * <tr><td style="vertical-align:top" headers="construct classes">{@code [a-z&&[^m-p]]}</td>
  *     <td headers="matches">{@code a} through {@code z},
  *          and not {@code m} through {@code p}: {@code [a-lq-z]}(subtraction)</td></tr>
  * <tr><th>&nbsp;</th></tr>
  *
- * <tr align="left"><th colspan="2" id="predef">Predefined character classes</th></tr>
+ * <tr style="text-align:left"><th colspan="2" id="predef">Predefined character classes</th></tr>
  *
- * <tr><td valign="top" headers="construct predef">{@code .}</td>
+ * <tr><td style="vertical-align:top" headers="construct predef">{@code .}</td>
  *     <td headers="matches">Any character (may or may not match <a href="#lt">line terminators</a>)</td></tr>
- * <tr><td valign="top" headers="construct predef">{@code \d}</td>
+ * <tr><td style="vertical-align:top" headers="construct predef">{@code \d}</td>
  *     <td headers="matches">A digit: {@code [0-9]}</td></tr>
- * <tr><td valign="top" headers="construct predef">{@code \D}</td>
+ * <tr><td style="vertical-align:top" headers="construct predef">{@code \D}</td>
  *     <td headers="matches">A non-digit: {@code [^0-9]}</td></tr>
- * <tr><td valign="top" headers="construct predef">{@code \h}</td>
+ * <tr><td style="vertical-align:top" headers="construct predef">{@code \h}</td>
  *     <td headers="matches">A horizontal whitespace character:
  *     <code>[ \t\xA0&#92;u1680&#92;u180e&#92;u2000-&#92;u200a&#92;u202f&#92;u205f&#92;u3000]</code></td></tr>
- * <tr><td valign="top" headers="construct predef">{@code \H}</td>
+ * <tr><td style="vertical-align:top" headers="construct predef">{@code \H}</td>
  *     <td headers="matches">A non-horizontal whitespace character: {@code [^\h]}</td></tr>
- * <tr><td valign="top" headers="construct predef">{@code \s}</td>
+ * <tr><td style="vertical-align:top" headers="construct predef">{@code \s}</td>
  *     <td headers="matches">A whitespace character: {@code [ \t\n\x0B\f\r]}</td></tr>
- * <tr><td valign="top" headers="construct predef">{@code \S}</td>
+ * <tr><td style="vertical-align:top" headers="construct predef">{@code \S}</td>
  *     <td headers="matches">A non-whitespace character: {@code [^\s]}</td></tr>
- * <tr><td valign="top" headers="construct predef">{@code \v}</td>
+ * <tr><td style="vertical-align:top" headers="construct predef">{@code \v}</td>
  *     <td headers="matches">A vertical whitespace character: <code>[\n\x0B\f\r\x85&#92;u2028&#92;u2029]</code>
  *     </td></tr>
- * <tr><td valign="top" headers="construct predef">{@code \V}</td>
+ * <tr><td style="vertical-align:top" headers="construct predef">{@code \V}</td>
  *     <td headers="matches">A non-vertical whitespace character: {@code [^\v]}</td></tr>
- * <tr><td valign="top" headers="construct predef">{@code \w}</td>
+ * <tr><td style="vertical-align:top" headers="construct predef">{@code \w}</td>
  *     <td headers="matches">A word character: {@code [a-zA-Z_0-9]}</td></tr>
- * <tr><td valign="top" headers="construct predef">{@code \W}</td>
+ * <tr><td style="vertical-align:top" headers="construct predef">{@code \W}</td>
  *     <td headers="matches">A non-word character: {@code [^\w]}</td></tr>
  * <tr><th>&nbsp;</th></tr>
- * <tr align="left"><th colspan="2" id="posix"><b>POSIX character classes (US-ASCII only)</b></th></tr>
+ * <tr style="text-align:left"><th colspan="2" id="posix"><b>POSIX character classes (US-ASCII only)</b></th></tr>
  *
- * <tr><td valign="top" headers="construct posix">{@code \p{Lower}}</td>
+ * <tr><td style="vertical-align:top" headers="construct posix">{@code \p{Lower}}</td>
  *     <td headers="matches">A lower-case alphabetic character: {@code [a-z]}</td></tr>
- * <tr><td valign="top" headers="construct posix">{@code \p{Upper}}</td>
+ * <tr><td style="vertical-align:top" headers="construct posix">{@code \p{Upper}}</td>
  *     <td headers="matches">An upper-case alphabetic character:{@code [A-Z]}</td></tr>
- * <tr><td valign="top" headers="construct posix">{@code \p{ASCII}}</td>
+ * <tr><td style="vertical-align:top" headers="construct posix">{@code \p{ASCII}}</td>
  *     <td headers="matches">All ASCII:{@code [\x00-\x7F]}</td></tr>
- * <tr><td valign="top" headers="construct posix">{@code \p{Alpha}}</td>
+ * <tr><td style="vertical-align:top" headers="construct posix">{@code \p{Alpha}}</td>
  *     <td headers="matches">An alphabetic character:{@code [\p{Lower}\p{Upper}]}</td></tr>
- * <tr><td valign="top" headers="construct posix">{@code \p{Digit}}</td>
+ * <tr><td style="vertical-align:top" headers="construct posix">{@code \p{Digit}}</td>
  *     <td headers="matches">A decimal digit: {@code [0-9]}</td></tr>
- * <tr><td valign="top" headers="construct posix">{@code \p{Alnum}}</td>
+ * <tr><td style="vertical-align:top" headers="construct posix">{@code \p{Alnum}}</td>
  *     <td headers="matches">An alphanumeric character:{@code [\p{Alpha}\p{Digit}]}</td></tr>
- * <tr><td valign="top" headers="construct posix">{@code \p{Punct}}</td>
+ * <tr><td style="vertical-align:top" headers="construct posix">{@code \p{Punct}}</td>
  *     <td headers="matches">Punctuation: One of {@code !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~}</td></tr>
  *     <!-- {@code [\!"#\$%&'\(\)\*\+,\-\./:;\<=\>\?@\[\\\]\^_`\{\|\}~]}
  *          {@code [\X21-\X2F\X31-\X40\X5B-\X60\X7B-\X7E]} -->
- * <tr><td valign="top" headers="construct posix">{@code \p{Graph}}</td>
+ * <tr><td style="vertical-align:top" headers="construct posix">{@code \p{Graph}}</td>
  *     <td headers="matches">A visible character: {@code [\p{Alnum}\p{Punct}]}</td></tr>
- * <tr><td valign="top" headers="construct posix">{@code \p{Print}}</td>
+ * <tr><td style="vertical-align:top" headers="construct posix">{@code \p{Print}}</td>
  *     <td headers="matches">A printable character: {@code [\p{Graph}\x20]}</td></tr>
- * <tr><td valign="top" headers="construct posix">{@code \p{Blank}}</td>
+ * <tr><td style="vertical-align:top" headers="construct posix">{@code \p{Blank}}</td>
  *     <td headers="matches">A space or a tab: {@code [ \t]}</td></tr>
- * <tr><td valign="top" headers="construct posix">{@code \p{Cntrl}}</td>
+ * <tr><td style="vertical-align:top" headers="construct posix">{@code \p{Cntrl}}</td>
  *     <td headers="matches">A control character: {@code [\x00-\x1F\x7F]}</td></tr>
- * <tr><td valign="top" headers="construct posix">{@code \p{XDigit}}</td>
+ * <tr><td style="vertical-align:top" headers="construct posix">{@code \p{XDigit}}</td>
  *     <td headers="matches">A hexadecimal digit: {@code [0-9a-fA-F]}</td></tr>
- * <tr><td valign="top" headers="construct posix">{@code \p{Space}}</td>
+ * <tr><td style="vertical-align:top" headers="construct posix">{@code \p{Space}}</td>
  *     <td headers="matches">A whitespace character: {@code [ \t\n\x0B\f\r]}</td></tr>
  *
  * <tr><th>&nbsp;</th></tr>
- * <tr align="left"><th colspan="2">java.lang.Character classes (simple <a href="#jcc">java character type</a>)</th></tr>
+ * <tr style="text-align:left"><th colspan="2">java.lang.Character classes (simple <a href="#jcc">java character type</a>)</th></tr>
  *
- * <tr><td valign="top">{@code \p{javaLowerCase}}</td>
+ * <tr><td style="vertical-align:top">{@code \p{javaLowerCase}}</td>
  *     <td>Equivalent to java.lang.Character.isLowerCase()</td></tr>
- * <tr><td valign="top">{@code \p{javaUpperCase}}</td>
+ * <tr><td style="vertical-align:top">{@code \p{javaUpperCase}}</td>
  *     <td>Equivalent to java.lang.Character.isUpperCase()</td></tr>
- * <tr><td valign="top">{@code \p{javaWhitespace}}</td>
+ * <tr><td style="vertical-align:top">{@code \p{javaWhitespace}}</td>
  *     <td>Equivalent to java.lang.Character.isWhitespace()</td></tr>
- * <tr><td valign="top">{@code \p{javaMirrored}}</td>
+ * <tr><td style="vertical-align:top">{@code \p{javaMirrored}}</td>
  *     <td>Equivalent to java.lang.Character.isMirrored()</td></tr>
  *
  * <tr><th>&nbsp;</th></tr>
- * <tr align="left"><th colspan="2" id="unicode">Classes for Unicode scripts, blocks, categories and binary properties</th></tr>
- * <tr><td valign="top" headers="construct unicode">{@code \p{IsLatin}}</td>
+ * <tr style="text-align:left"><th colspan="2" id="unicode">Classes for Unicode scripts, blocks, categories and binary properties</th></tr>
+ * <tr><td style="vertical-align:top" headers="construct unicode">{@code \p{IsLatin}}</td>
  *     <td headers="matches">A Latin&nbsp;script character (<a href="#usc">script</a>)</td></tr>
- * <tr><td valign="top" headers="construct unicode">{@code \p{InGreek}}</td>
+ * <tr><td style="vertical-align:top" headers="construct unicode">{@code \p{InGreek}}</td>
  *     <td headers="matches">A character in the Greek&nbsp;block (<a href="#ubc">block</a>)</td></tr>
- * <tr><td valign="top" headers="construct unicode">{@code \p{Lu}}</td>
+ * <tr><td style="vertical-align:top" headers="construct unicode">{@code \p{Lu}}</td>
  *     <td headers="matches">An uppercase letter (<a href="#ucc">category</a>)</td></tr>
- * <tr><td valign="top" headers="construct unicode">{@code \p{IsAlphabetic}}</td>
+ * <tr><td style="vertical-align:top" headers="construct unicode">{@code \p{IsAlphabetic}}</td>
  *     <td headers="matches">An alphabetic character (<a href="#ubpc">binary property</a>)</td></tr>
- * <tr><td valign="top" headers="construct unicode">{@code \p{Sc}}</td>
+ * <tr><td style="vertical-align:top" headers="construct unicode">{@code \p{Sc}}</td>
  *     <td headers="matches">A currency symbol</td></tr>
- * <tr><td valign="top" headers="construct unicode">{@code \P{InGreek}}</td>
+ * <tr><td style="vertical-align:top" headers="construct unicode">{@code \P{InGreek}}</td>
  *     <td headers="matches">Any character except one in the Greek block (negation)</td></tr>
- * <tr><td valign="top" headers="construct unicode">{@code [\p{L}&&[^\p{Lu}]]}</td>
+ * <tr><td style="vertical-align:top" headers="construct unicode">{@code [\p{L}&&[^\p{Lu}]]}</td>
  *     <td headers="matches">Any letter except an uppercase letter (subtraction)</td></tr>
  *
  * <tr><th>&nbsp;</th></tr>
- * <tr align="left"><th colspan="2" id="bounds">Boundary matchers</th></tr>
+ * <tr style="text-align:left"><th colspan="2" id="bounds">Boundary matchers</th></tr>
  *
- * <tr><td valign="top" headers="construct bounds">{@code ^}</td>
+ * <tr><td style="vertical-align:top" headers="construct bounds">{@code ^}</td>
  *     <td headers="matches">The beginning of a line</td></tr>
- * <tr><td valign="top" headers="construct bounds">{@code $}</td>
+ * <tr><td style="vertical-align:top" headers="construct bounds">{@code $}</td>
  *     <td headers="matches">The end of a line</td></tr>
- * <tr><td valign="top" headers="construct bounds">{@code \b}</td>
+ * <tr><td style="vertical-align:top" headers="construct bounds">{@code \b}</td>
  *     <td headers="matches">A word boundary</td></tr>
- * <tr><td valign="top" headers="construct bounds">{@code \b{g}}</td>
+ * <tr><td style="vertical-align:top" headers="construct bounds">{@code \b{g}}</td>
  *     <td headers="matches">A Unicode extended grapheme cluster boundary</td></tr>
- * <tr><td valign="top" headers="construct bounds">{@code \B}</td>
+ * <tr><td style="vertical-align:top" headers="construct bounds">{@code \B}</td>
  *     <td headers="matches">A non-word boundary</td></tr>
- * <tr><td valign="top" headers="construct bounds">{@code \A}</td>
+ * <tr><td style="vertical-align:top" headers="construct bounds">{@code \A}</td>
  *     <td headers="matches">The beginning of the input</td></tr>
- * <tr><td valign="top" headers="construct bounds">{@code \G}</td>
+ * <tr><td style="vertical-align:top" headers="construct bounds">{@code \G}</td>
  *     <td headers="matches">The end of the previous match</td></tr>
- * <tr><td valign="top" headers="construct bounds">{@code \Z}</td>
+ * <tr><td style="vertical-align:top" headers="construct bounds">{@code \Z}</td>
  *     <td headers="matches">The end of the input but for the final
  *         <a href="#lt">terminator</a>, if&nbsp;any</td></tr>
- * <tr><td valign="top" headers="construct bounds">{@code \z}</td>
+ * <tr><td style="vertical-align:top" headers="construct bounds">{@code \z}</td>
  *     <td headers="matches">The end of the input</td></tr>
  *
  * <tr><th>&nbsp;</th></tr>
- * <tr align="left"><th colspan="2" id="lineending">Linebreak matcher</th></tr>
- * <tr><td valign="top" headers="construct lineending">{@code \R}</td>
+ * <tr style="text-align:left"><th colspan="2" id="lineending">Linebreak matcher</th></tr>
+ * <tr><td style="vertical-align:top" headers="construct lineending">{@code \R}</td>
  *     <td headers="matches">Any Unicode linebreak sequence, is equivalent to
  *     <code>&#92;u000D&#92;u000A|[&#92;u000A&#92;u000B&#92;u000C&#92;u000D&#92;u0085&#92;u2028&#92;u2029]
  *     </code></td></tr>
  *
  * <tr><th>&nbsp;</th></tr>
- * <tr align="left"><th colspan="2" id="grapheme">Unicode Extended Grapheme matcher</th></tr>
- * <tr><td valign="top" headers="construct grapheme">{@code \X}</td>
+ * <tr style="text-align:left"><th colspan="2" id="grapheme">Unicode Extended Grapheme matcher</th></tr>
+ * <tr><td style="vertical-align:top" headers="construct grapheme">{@code \X}</td>
  *     <td headers="matches">Any Unicode extended grapheme cluster</td></tr>
  *
  * <tr><th>&nbsp;</th></tr>
- * <tr align="left"><th colspan="2" id="greedy">Greedy quantifiers</th></tr>
+ * <tr style="text-align:left"><th colspan="2" id="greedy">Greedy quantifiers</th></tr>
  *
- * <tr><td valign="top" headers="construct greedy"><i>X</i>{@code ?}</td>
+ * <tr><td style="vertical-align:top" headers="construct greedy"><i>X</i>{@code ?}</td>
  *     <td headers="matches"><i>X</i>, once or not at all</td></tr>
- * <tr><td valign="top" headers="construct greedy"><i>X</i>{@code *}</td>
+ * <tr><td style="vertical-align:top" headers="construct greedy"><i>X</i>{@code *}</td>
  *     <td headers="matches"><i>X</i>, zero or more times</td></tr>
- * <tr><td valign="top" headers="construct greedy"><i>X</i>{@code +}</td>
+ * <tr><td style="vertical-align:top" headers="construct greedy"><i>X</i>{@code +}</td>
  *     <td headers="matches"><i>X</i>, one or more times</td></tr>
- * <tr><td valign="top" headers="construct greedy"><i>X</i><code>{</code><i>n</i><code>}</code></td>
+ * <tr><td style="vertical-align:top" headers="construct greedy"><i>X</i><code>{</code><i>n</i><code>}</code></td>
  *     <td headers="matches"><i>X</i>, exactly <i>n</i> times</td></tr>
- * <tr><td valign="top" headers="construct greedy"><i>X</i><code>{</code><i>n</i>{@code ,}}</td>
+ * <tr><td style="vertical-align:top" headers="construct greedy"><i>X</i><code>{</code><i>n</i>{@code ,}}</td>
  *     <td headers="matches"><i>X</i>, at least <i>n</i> times</td></tr>
- * <tr><td valign="top" headers="construct greedy"><i>X</i><code>{</code><i>n</i>{@code ,}<i>m</i><code>}</code></td>
+ * <tr><td style="vertical-align:top" headers="construct greedy"><i>X</i><code>{</code><i>n</i>{@code ,}<i>m</i><code>}</code></td>
  *     <td headers="matches"><i>X</i>, at least <i>n</i> but not more than <i>m</i> times</td></tr>
  *
  * <tr><th>&nbsp;</th></tr>
- * <tr align="left"><th colspan="2" id="reluc">Reluctant quantifiers</th></tr>
+ * <tr style="text-align:left"><th colspan="2" id="reluc">Reluctant quantifiers</th></tr>
  *
- * <tr><td valign="top" headers="construct reluc"><i>X</i>{@code ??}</td>
+ * <tr><td style="vertical-align:top" headers="construct reluc"><i>X</i>{@code ??}</td>
  *     <td headers="matches"><i>X</i>, once or not at all</td></tr>
- * <tr><td valign="top" headers="construct reluc"><i>X</i>{@code *?}</td>
+ * <tr><td style="vertical-align:top" headers="construct reluc"><i>X</i>{@code *?}</td>
  *     <td headers="matches"><i>X</i>, zero or more times</td></tr>
- * <tr><td valign="top" headers="construct reluc"><i>X</i>{@code +?}</td>
+ * <tr><td style="vertical-align:top" headers="construct reluc"><i>X</i>{@code +?}</td>
  *     <td headers="matches"><i>X</i>, one or more times</td></tr>
- * <tr><td valign="top" headers="construct reluc"><i>X</i><code>{</code><i>n</i><code>}?</code></td>
+ * <tr><td style="vertical-align:top" headers="construct reluc"><i>X</i><code>{</code><i>n</i><code>}?</code></td>
  *     <td headers="matches"><i>X</i>, exactly <i>n</i> times</td></tr>
- * <tr><td valign="top" headers="construct reluc"><i>X</i><code>{</code><i>n</i><code>,}?</code></td>
+ * <tr><td style="vertical-align:top" headers="construct reluc"><i>X</i><code>{</code><i>n</i><code>,}?</code></td>
  *     <td headers="matches"><i>X</i>, at least <i>n</i> times</td></tr>
- * <tr><td valign="top" headers="construct reluc"><i>X</i><code>{</code><i>n</i>{@code ,}<i>m</i><code>}?</code></td>
+ * <tr><td style="vertical-align:top" headers="construct reluc"><i>X</i><code>{</code><i>n</i>{@code ,}<i>m</i><code>}?</code></td>
  *     <td headers="matches"><i>X</i>, at least <i>n</i> but not more than <i>m</i> times</td></tr>
  *
  * <tr><th>&nbsp;</th></tr>
- * <tr align="left"><th colspan="2" id="poss">Possessive quantifiers</th></tr>
+ * <tr style="text-align:left"><th colspan="2" id="poss">Possessive quantifiers</th></tr>
  *
- * <tr><td valign="top" headers="construct poss"><i>X</i>{@code ?+}</td>
+ * <tr><td style="vertical-align:top" headers="construct poss"><i>X</i>{@code ?+}</td>
  *     <td headers="matches"><i>X</i>, once or not at all</td></tr>
- * <tr><td valign="top" headers="construct poss"><i>X</i>{@code *+}</td>
+ * <tr><td style="vertical-align:top" headers="construct poss"><i>X</i>{@code *+}</td>
  *     <td headers="matches"><i>X</i>, zero or more times</td></tr>
- * <tr><td valign="top" headers="construct poss"><i>X</i>{@code ++}</td>
+ * <tr><td style="vertical-align:top" headers="construct poss"><i>X</i>{@code ++}</td>
  *     <td headers="matches"><i>X</i>, one or more times</td></tr>
- * <tr><td valign="top" headers="construct poss"><i>X</i><code>{</code><i>n</i><code>}+</code></td>
+ * <tr><td style="vertical-align:top" headers="construct poss"><i>X</i><code>{</code><i>n</i><code>}+</code></td>
  *     <td headers="matches"><i>X</i>, exactly <i>n</i> times</td></tr>
- * <tr><td valign="top" headers="construct poss"><i>X</i><code>{</code><i>n</i><code>,}+</code></td>
+ * <tr><td style="vertical-align:top" headers="construct poss"><i>X</i><code>{</code><i>n</i><code>,}+</code></td>
  *     <td headers="matches"><i>X</i>, at least <i>n</i> times</td></tr>
- * <tr><td valign="top" headers="construct poss"><i>X</i><code>{</code><i>n</i>{@code ,}<i>m</i><code>}+</code></td>
+ * <tr><td style="vertical-align:top" headers="construct poss"><i>X</i><code>{</code><i>n</i>{@code ,}<i>m</i><code>}+</code></td>
  *     <td headers="matches"><i>X</i>, at least <i>n</i> but not more than <i>m</i> times</td></tr>
  *
  * <tr><th>&nbsp;</th></tr>
- * <tr align="left"><th colspan="2" id="logical">Logical operators</th></tr>
+ * <tr style="text-align:left"><th colspan="2" id="logical">Logical operators</th></tr>
  *
- * <tr><td valign="top" headers="construct logical"><i>XY</i></td>
+ * <tr><td style="vertical-align:top" headers="construct logical"><i>XY</i></td>
  *     <td headers="matches"><i>X</i> followed by <i>Y</i></td></tr>
- * <tr><td valign="top" headers="construct logical"><i>X</i>{@code |}<i>Y</i></td>
+ * <tr><td style="vertical-align:top" headers="construct logical"><i>X</i>{@code |}<i>Y</i></td>
  *     <td headers="matches">Either <i>X</i> or <i>Y</i></td></tr>
- * <tr><td valign="top" headers="construct logical">{@code (}<i>X</i>{@code )}</td>
+ * <tr><td style="vertical-align:top" headers="construct logical">{@code (}<i>X</i>{@code )}</td>
  *     <td headers="matches">X, as a <a href="#cg">capturing group</a></td></tr>
  *
  * <tr><th>&nbsp;</th></tr>
- * <tr align="left"><th colspan="2" id="backref">Back references</th></tr>
+ * <tr style="text-align:left"><th colspan="2" id="backref">Back references</th></tr>
  *
- * <tr><td valign="bottom" headers="construct backref">{@code \}<i>n</i></td>
- *     <td valign="bottom" headers="matches">Whatever the <i>n</i><sup>th</sup>
+ * <tr><td style="vertical-align:bottom" headers="construct backref">{@code \}<i>n</i></td>
+ *     <td style="vertical-align:bottom" headers="matches">Whatever the <i>n</i><sup>th</sup>
  *     <a href="#cg">capturing group</a> matched</td></tr>
  *
- * <tr><td valign="bottom" headers="construct backref">{@code \}<i>k</i>&lt;<i>name</i>&gt;</td>
- *     <td valign="bottom" headers="matches">Whatever the
+ * <tr><td style="vertical-align:bottom" headers="construct backref">{@code \}<i>k</i>&lt;<i>name</i>&gt;</td>
+ *     <td style="vertical-align:bottom" headers="matches">Whatever the
  *     <a href="#groupname">named-capturing group</a> "name" matched</td></tr>
  *
  * <tr><th>&nbsp;</th></tr>
- * <tr align="left"><th colspan="2" id="quot">Quotation</th></tr>
+ * <tr style="text-align:left"><th colspan="2" id="quot">Quotation</th></tr>
  *
- * <tr><td valign="top" headers="construct quot">{@code \}</td>
+ * <tr><td style="vertical-align:top" headers="construct quot">{@code \}</td>
  *     <td headers="matches">Nothing, but quotes the following character</td></tr>
- * <tr><td valign="top" headers="construct quot">{@code \Q}</td>
+ * <tr><td style="vertical-align:top" headers="construct quot">{@code \Q}</td>
  *     <td headers="matches">Nothing, but quotes all characters until {@code \E}</td></tr>
- * <tr><td valign="top" headers="construct quot">{@code \E}</td>
+ * <tr><td style="vertical-align:top" headers="construct quot">{@code \E}</td>
  *     <td headers="matches">Nothing, but ends quoting started by {@code \Q}</td></tr>
  *     <!-- Metachars: !$()*+.<>?[\]^{|} -->
  *
  * <tr><th>&nbsp;</th></tr>
- * <tr align="left"><th colspan="2" id="special">Special constructs (named-capturing and non-capturing)</th></tr>
+ * <tr style="text-align:left"><th colspan="2" id="special">Special constructs (named-capturing and non-capturing)</th></tr>
  *
- * <tr><td valign="top" headers="construct special"><code>(?&lt;<a href="#groupname">name</a>&gt;</code><i>X</i>{@code )}</td>
+ * <tr><td style="vertical-align:top" headers="construct special"><code>(?&lt;<a href="#groupname">name</a>&gt;</code><i>X</i>{@code )}</td>
  *     <td headers="matches"><i>X</i>, as a named-capturing group</td></tr>
- * <tr><td valign="top" headers="construct special">{@code (?:}<i>X</i>{@code )}</td>
+ * <tr><td style="vertical-align:top" headers="construct special">{@code (?:}<i>X</i>{@code )}</td>
  *     <td headers="matches"><i>X</i>, as a non-capturing group</td></tr>
- * <tr><td valign="top" headers="construct special"><code>(?idmsuxU-idmsuxU)&nbsp;</code></td>
+ * <tr><td style="vertical-align:top" headers="construct special"><code>(?idmsuxU-idmsuxU)&nbsp;</code></td>
  *     <td headers="matches">Nothing, but turns match flags <a href="#CASE_INSENSITIVE">i</a>
  * <a href="#UNIX_LINES">d</a> <a href="#MULTILINE">m</a> <a href="#DOTALL">s</a>
  * <a href="#UNICODE_CASE">u</a> <a href="#COMMENTS">x</a> <a href="#UNICODE_CHARACTER_CLASS">U</a>
  * on - off</td></tr>
- * <tr><td valign="top" headers="construct special"><code>(?idmsux-idmsux:</code><i>X</i>{@code )}&nbsp;&nbsp;</td>
+ * <tr><td style="vertical-align:top" headers="construct special"><code>(?idmsux-idmsux:</code><i>X</i>{@code )}&nbsp;&nbsp;</td>
  *     <td headers="matches"><i>X</i>, as a <a href="#cg">non-capturing group</a> with the
  *         given flags <a href="#CASE_INSENSITIVE">i</a> <a href="#UNIX_LINES">d</a>
  * <a href="#MULTILINE">m</a> <a href="#DOTALL">s</a> <a href="#UNICODE_CASE">u</a >
  * <a href="#COMMENTS">x</a> on - off</td></tr>
- * <tr><td valign="top" headers="construct special">{@code (?=}<i>X</i>{@code )}</td>
+ * <tr><td style="vertical-align:top" headers="construct special">{@code (?=}<i>X</i>{@code )}</td>
  *     <td headers="matches"><i>X</i>, via zero-width positive lookahead</td></tr>
- * <tr><td valign="top" headers="construct special">{@code (?!}<i>X</i>{@code )}</td>
+ * <tr><td style="vertical-align:top" headers="construct special">{@code (?!}<i>X</i>{@code )}</td>
  *     <td headers="matches"><i>X</i>, via zero-width negative lookahead</td></tr>
- * <tr><td valign="top" headers="construct special">{@code (?<=}<i>X</i>{@code )}</td>
+ * <tr><td style="vertical-align:top" headers="construct special">{@code (?<=}<i>X</i>{@code )}</td>
  *     <td headers="matches"><i>X</i>, via zero-width positive lookbehind</td></tr>
- * <tr><td valign="top" headers="construct special">{@code (?<!}<i>X</i>{@code )}</td>
+ * <tr><td style="vertical-align:top" headers="construct special">{@code (?<!}<i>X</i>{@code )}</td>
  *     <td headers="matches"><i>X</i>, via zero-width negative lookbehind</td></tr>
- * <tr><td valign="top" headers="construct special">{@code (?>}<i>X</i>{@code )}</td>
+ * <tr><td style="vertical-align:top" headers="construct special">{@code (?>}<i>X</i>{@code )}</td>
  *     <td headers="matches"><i>X</i>, as an independent, non-capturing group</td></tr>
  *
  * </table>
@@ -388,7 +388,7 @@
  * <hr>
  *
  *
- * <h3><a name="bs">Backslashes, escapes, and quoting</a></h3>
+ * <h3><a id="bs">Backslashes, escapes, and quoting</a></h3>
  *
  * <p> The backslash character ({@code '\'}) serves to introduce escaped
  * constructs, as defined in the table above, as well as to quote characters
@@ -416,7 +416,7 @@
  * {@code (hello)} the string literal {@code "\\(hello\\)"}
  * must be used.
  *
- * <h3><a name="cc">Character Classes</a></h3>
+ * <h3><a id="cc">Character Classes</a></h3>
  *
  *    <p> Character classes may appear within other character classes, and
  *    may be composed by the union operator (implicit) and the intersection
@@ -454,7 +454,7 @@
  *    character class, while the expression {@code -} becomes a range
  *    forming metacharacter.
  *
- * <h3><a name="lt">Line terminators</a></h3>
+ * <h3><a id="lt">Line terminators</a></h3>
  *
  * <p> A <i>line terminator</i> is a one- or two-character sequence that marks
  * the end of a line of the input character sequence.  The following are
@@ -489,9 +489,9 @@
  * except at the end of input. When in {@link #MULTILINE} mode {@code $}
  * matches just before a line terminator or the end of the input sequence.
  *
- * <h3><a name="cg">Groups and capturing</a></h3>
+ * <h3><a id="cg">Groups and capturing</a></h3>
  *
- * <h4><a name="gnumber">Group number</a></h4>
+ * <h4><a id="gnumber">Group number</a></h4>
  * <p> Capturing groups are numbered by counting their opening parentheses from
  * left to right.  In the expression {@code ((A)(B(C)))}, for example, there
  * are four such groups: </p>
@@ -514,7 +514,7 @@
  * subsequence may be used later in the expression, via a back reference, and
  * may also be retrieved from the matcher once the match operation is complete.
  *
- * <h4><a name="groupname">Group name</a></h4>
+ * <h4><a id="groupname">Group name</a></h4>
  * <p>A capturing group can also be assigned a "name", a {@code named-capturing group},
  * and then be back-referenced later by the "name". Group names are composed of
  * the following characters. The first character must be a {@code letter}.
@@ -585,7 +585,7 @@
  * and outside of a character class.
  *
  * <p>
- * <b><a name="usc">Scripts</a></b> are specified either with the prefix {@code Is}, as in
+ * <b><a id="usc">Scripts</a></b> are specified either with the prefix {@code Is}, as in
  * {@code IsHiragana}, or by using  the {@code script} keyword (or its short
  * form {@code sc}) as in {@code script=Hiragana} or {@code sc=Hiragana}.
  * <p>
@@ -594,7 +594,7 @@
  * {@link java.lang.Character.UnicodeScript#forName(String) UnicodeScript.forName}.
  *
  * <p>
- * <b><a name="ubc">Blocks</a></b> are specified with the prefix {@code In}, as in
+ * <b><a id="ubc">Blocks</a></b> are specified with the prefix {@code In}, as in
  * {@code InMongolian}, or by using the keyword {@code block} (or its short
  * form {@code blk}) as in {@code block=Mongolian} or {@code blk=Mongolian}.
  * <p>
@@ -603,7 +603,7 @@
  * {@link java.lang.Character.UnicodeBlock#forName(String) UnicodeBlock.forName}.
  * <p>
  *
- * <b><a name="ucc">Categories</a></b> may be specified with the optional prefix {@code Is}:
+ * <b><a id="ucc">Categories</a></b> may be specified with the optional prefix {@code Is}:
  * Both {@code \p{L}} and {@code \p{IsL}} denote the category of Unicode
  * letters. Same as scripts and blocks, categories can also be specified
  * by using the keyword {@code general_category} (or its short form
@@ -616,7 +616,7 @@
  * defined in the Standard, both normative and informative.
  * <p>
  *
- * <b><a name="ubpc">Binary properties</a></b> are specified with the prefix {@code Is}, as in
+ * <b><a id="ubpc">Binary properties</a></b> are specified with the prefix {@code Is}, as in
  * {@code IsAlphabetic}. The supported binary properties by {@code Pattern}
  * are
  * <ul>
@@ -643,9 +643,9 @@
  *
  * <table border="0" cellpadding="1" cellspacing="0"
  *  summary="predefined and posix character classes in Unicode mode">
- * <tr align="left">
- * <th align="left" id="predef_classes">Classes</th>
- * <th align="left" id="predef_matches">Matches</th>
+ * <tr style="text-align:left">
+ * <th style="text-align:left" id="predef_classes">Classes</th>
+ * <th style="text-align:left" id="predef_matches">Matches</th>
  *</tr>
  * <tr><td>{@code \p{Lower}}</td>
  *     <td>A lowercase character:{@code \p{IsLowercase}}</td></tr>
@@ -687,7 +687,7 @@
  *     <td>A non-word character: {@code [^\w]}</td></tr>
  * </table>
  * <p>
- * <a name="jcc">
+ * <a id="jcc">
  * Categories that behave like the java.lang.Character
  * boolean is<i>methodname</i> methods (except for the deprecated ones) are
  * available through the same <code>\p{</code><i>prop</i><code>}</code> syntax where
@@ -1209,26 +1209,26 @@
      *
      * <blockquote><table cellpadding=1 cellspacing=0
      *              summary="Split examples showing regex, limit, and result">
-     * <tr><th align="left"><i>Regex&nbsp;&nbsp;&nbsp;&nbsp;</i></th>
-     *     <th align="left"><i>Limit&nbsp;&nbsp;&nbsp;&nbsp;</i></th>
-     *     <th align="left"><i>Result&nbsp;&nbsp;&nbsp;&nbsp;</i></th></tr>
-     * <tr><td align=center>:</td>
-     *     <td align=center>2</td>
+     * <tr><th style="text-align:left"><i>Regex&nbsp;&nbsp;&nbsp;&nbsp;</i></th>
+     *     <th style="text-align:left"><i>Limit&nbsp;&nbsp;&nbsp;&nbsp;</i></th>
+     *     <th style="text-align:left"><i>Result&nbsp;&nbsp;&nbsp;&nbsp;</i></th></tr>
+     * <tr><td style="text-align:center">:</td>
+     *     <td style="text-align:center">2</td>
      *     <td>{@code { "boo", "and:foo" }}</td></tr>
-     * <tr><td align=center>:</td>
-     *     <td align=center>5</td>
+     * <tr><td style="text-align:center">:</td>
+     *     <td style="text-align:center">5</td>
      *     <td>{@code { "boo", "and", "foo" }}</td></tr>
-     * <tr><td align=center>:</td>
-     *     <td align=center>-2</td>
+     * <tr><td style="text-align:center">:</td>
+     *     <td style="text-align:center">-2</td>
      *     <td>{@code { "boo", "and", "foo" }}</td></tr>
-     * <tr><td align=center>o</td>
-     *     <td align=center>5</td>
+     * <tr><td style="text-align:center">o</td>
+     *     <td style="text-align:center">5</td>
      *     <td>{@code { "b", "", ":and:f", "", "" }}</td></tr>
-     * <tr><td align=center>o</td>
-     *     <td align=center>-2</td>
+     * <tr><td style="text-align:center">o</td>
+     *     <td style="text-align:center">-2</td>
      *     <td>{@code { "b", "", ":and:f", "", "" }}</td></tr>
-     * <tr><td align=center>o</td>
-     *     <td align=center>0</td>
+     * <tr><td style="text-align:center">o</td>
+     *     <td style="text-align:center">0</td>
      *     <td>{@code { "b", "", ":and:f" }}</td></tr>
      * </table></blockquote>
      *
@@ -1296,11 +1296,11 @@
      *
      * <blockquote><table cellpadding=1 cellspacing=0
      *              summary="Split examples showing regex and result">
-     * <tr><th align="left"><i>Regex&nbsp;&nbsp;&nbsp;&nbsp;</i></th>
-     *     <th align="left"><i>Result</i></th></tr>
-     * <tr><td align=center>:</td>
+     * <tr><th style="text-align:left"><i>Regex&nbsp;&nbsp;&nbsp;&nbsp;</i></th>
+     *     <th style="text-align:left"><i>Result</i></th></tr>
+     * <tr><td style="text-align:center">:</td>
      *     <td>{@code { "boo", "and", "foo" }}</td></tr>
-     * <tr><td align=center>o</td>
+     * <tr><td style="text-align:center">o</td>
      *     <td>{@code { "b", "", ":and:f" }}</td></tr>
      * </table></blockquote>
      *
--- a/jdk/src/java.base/share/classes/java/util/spi/CalendarNameProvider.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/util/spi/CalendarNameProvider.java	Fri Apr 28 13:52:45 2017 -0700
@@ -33,7 +33,7 @@
  * An abstract class for service providers that provide localized string
  * representations (display names) of {@code Calendar} field values.
  *
- * <p><a name="calendartypes"><b>Calendar Types</b></a>
+ * <p><a id="calendartypes"><b>Calendar Types</b></a>
  *
  * <p>Calendar types are used to specify calendar systems for which the {@link
  * #getDisplayName(String, int, int, int, Locale) getDisplayName} and {@link
--- a/jdk/src/java.base/share/classes/java/util/stream/package-info.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/java.base/share/classes/java/util/stream/package-info.java	Fri Apr 28 13:52:45 2017 -0700
@@ -94,7 +94,7 @@
  * <p>Additional stream sources can be provided by third-party libraries using
  * <a href="package-summary.html#StreamSources">these techniques</a>.
  *
- * <h2><a name="StreamOps">Stream operations and pipelines</a></h2>
+ * <h2><a id="StreamOps">Stream operations and pipelines</a></h2>
  *
  * <p>Stream operations are divided into <em>intermediate</em> and
  * <em>terminal</em> operations, and are combined to form <em>stream
@@ -159,7 +159,7 @@
  * is a necessary, but not sufficient, condition for the processing of an infinite
  * stream to terminate normally in finite time.
  *
- * <h3><a name="Parallelism">Parallelism</a></h3>
+ * <h3><a id="Parallelism">Parallelism</a></h3>
  *
  * <p>Processing elements with an explicit {@code for-}loop is inherently serial.
  * Streams facilitate parallel execution by reframing the computation as a pipeline of
@@ -206,7 +206,7 @@
  * as {@link java.util.function.Function}, and are often lambda expressions or
  * method references.
  *
- * <h3><a name="NonInterference">Non-interference</a></h3>
+ * <h3><a id="NonInterference">Non-interference</a></h3>
  *
  * Streams enable you to execute possibly-parallel aggregate operations over a
  * variety of data sources, including even non-thread-safe collections such as
@@ -252,7 +252,7 @@
  * <a href="package-summary.html#StreamSources">Low-level stream
  * construction</a> for requirements for building well-behaved streams.
  *
- * <h3><a name="Statelessness">Stateless behaviors</a></h3>
+ * <h3><a id="Statelessness">Stateless behaviors</a></h3>
  *
  * Stream pipeline results may be nondeterministic or incorrect if the behavioral
  * parameters to the stream operations are <em>stateful</em>.  A stateful lambda
@@ -280,7 +280,7 @@
  * parameters to stream operations entirely; there is usually a way to
  * restructure the stream pipeline to avoid statefulness.
  *
- * <h3><a name="SideEffects">Side-effects</a></h3>
+ * <h3><a id="SideEffects">Side-effects</a></h3>
  *
  * Side-effects in behavioral parameters to stream operations are, in general,
  * discouraged, as they can often lead to unwitting violations of the
@@ -349,7 +349,7 @@
  *               .collect(Collectors.toList());  // No side-effects!
  * }</pre>
  *
- * <h3><a name="Ordering">Ordering</a></h3>
+ * <h3><a id="Ordering">Ordering</a></h3>
  *
  * <p>Streams may or may not have a defined <em>encounter order</em>.  Whether
  * or not a stream has an encounter order depends on the source and the
@@ -388,7 +388,7 @@
  * However, most stream pipelines, such as the "sum of weight of blocks" example
  * above, still parallelize efficiently even under ordering constraints.
  *
- * <h2><a name="Reduction">Reduction operations</a></h2>
+ * <h2><a id="Reduction">Reduction operations</a></h2>
  *
  * A <em>reduction</em> operation (also called a <em>fold</em>) takes a sequence
  * of input elements and combines them into a single summary result by repeated
@@ -493,7 +493,7 @@
  * significant work can be optimized away by combining mapping and reducing
  * into a single function.
  *
- * <h3><a name="MutableReduction">Mutable reduction</a></h3>
+ * <h3><a id="MutableReduction">Mutable reduction</a></h3>
  *
  * A <em>mutable reduction operation</em> accumulates input elements into a
  * mutable result container, such as a {@code Collection} or {@code StringBuilder},
@@ -620,7 +620,7 @@
  * but in some cases equivalence may be relaxed to account for differences in
  * order.
  *
- * <h3><a name="ConcurrentReduction">Reduction, concurrency, and ordering</a></h3>
+ * <h3><a id="ConcurrentReduction">Reduction, concurrency, and ordering</a></h3>
  *
  * With some complex reduction operations, for example a {@code collect()} that
  * produces a {@code Map}, such as:
@@ -675,7 +675,7 @@
  * We would then be constrained to implement either a sequential reduction or
  * a merge-based parallel reduction.
  *
- * <h3><a name="Associativity">Associativity</a></h3>
+ * <h3><a id="Associativity">Associativity</a></h3>
  *
  * An operator or function {@code op} is <em>associative</em> if the following
  * holds:
@@ -693,7 +693,7 @@
  * <p>Examples of associative operations include numeric addition, min, and
  * max, and string concatenation.
  *
- * <h2><a name="StreamSources">Low-level stream construction</a></h2>
+ * <h2><a id="StreamSources">Low-level stream construction</a></h2>
  *
  * So far, all the stream examples have used methods like
  * {@link java.util.Collection#stream()} or {@link java.util.Arrays#stream(Object[])}
--- a/jdk/src/java.base/share/classes/javax/net/ssl/TrustManagerFactory.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/java.base/share/classes/javax/net/ssl/TrustManagerFactory.java	Fri Apr 28 13:52:45 2017 -0700
@@ -40,7 +40,7 @@
  * <p> Every implementation of the Java platform is required to support the
  * following standard {@code TrustManagerFactory} algorithm:
  * <ul>
- * <li><tt>PKIX</tt></li>
+ * <li>{@code PKIX}</li>
  * </ul>
  * This algorithm is described in the <a href=
  * "{@docRoot}/../technotes/guides/security/StandardNames.html#TrustManagerFactory">
--- a/jdk/src/java.base/share/classes/jdk/internal/misc/VM.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/java.base/share/classes/jdk/internal/misc/VM.java	Fri Apr 28 13:52:45 2017 -0700
@@ -26,7 +26,10 @@
 package jdk.internal.misc;
 
 import static java.lang.Thread.State.*;
+import java.util.Map;
+import java.util.HashMap;
 import java.util.Properties;
+import java.util.Collections;
 
 public class VM {
 
@@ -132,25 +135,33 @@
      * Returns the system property of the specified key saved at
      * system initialization time.  This method should only be used
      * for the system properties that are not changed during runtime.
-     * It accesses a private copy of the system properties so
-     * that user's locking of the system properties object will not
-     * cause the library to deadlock.
      *
      * Note that the saved system properties do not include
-     * the ones set by sun.misc.Version.init().
-     *
+     * the ones set by java.lang.VersionProps.init().
      */
     public static String getSavedProperty(String key) {
-        if (savedProps.isEmpty())
-            throw new IllegalStateException("Should be non-empty if initialized");
+        if (savedProps == null)
+            throw new IllegalStateException("Not yet initialized");
 
-        return savedProps.getProperty(key);
+        return savedProps.get(key);
     }
 
-    // TODO: the Property Management needs to be refactored and
-    // the appropriate prop keys need to be accessible to the
-    // calling classes to avoid duplication of keys.
-    private static final Properties savedProps = new Properties();
+    /**
+     * Gets an unmodifiable view of the system properties saved at system
+     * initialization time. This method should only be used
+     * for the system properties that are not changed during runtime.
+     *
+     * Note that the saved system properties do not include
+     * the ones set by java.lang.VersionProps.init().
+     */
+    public static Map<String, String> getSavedProperties() {
+        if (savedProps == null)
+            throw new IllegalStateException("Not yet initialized");
+
+        return savedProps;
+    }
+
+    private static Map<String, String> savedProps;
 
     // Save a private copy of the system properties and remove
     // the system properties that are not intended for public access.
@@ -160,7 +171,12 @@
         if (initLevel() != 0)
             throw new IllegalStateException("Wrong init level");
 
-        savedProps.putAll(props);
+        @SuppressWarnings({"rawtypes", "unchecked"})
+        Map<String, String> sp =
+            Map.ofEntries(props.entrySet().toArray(new Map.Entry[0]));
+        // only main thread is running at this time, so savedProps and
+        // its content will be correctly published to threads started later
+        savedProps = sp;
 
         // Set the maximum amount of direct memory.  This value is controlled
         // by the vm option -XX:MaxDirectMemorySize=<size>.
--- a/jdk/src/java.base/unix/classes/module-info.java.extra	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/java.base/unix/classes/module-info.java.extra	Fri Apr 28 13:52:45 2017 -0700
@@ -23,14 +23,5 @@
  * questions.
  */
 
-// jdk.internal.vm.compiler uses Unsafe and VM classes from jdk.internal.misc
-exports jdk.internal.misc to jdk.internal.vm.compiler;
-opens   jdk.internal.misc to jdk.internal.vm.compiler;
-
-// jdk.internal.vm.compiler uses com.sun.crypto.provider to generate crypto intrinsics
-opens com.sun.crypto.provider to jdk.internal.vm.compiler;
-
-exports jdk.internal.module to jdk.internal.vm.compiler;
-
 // AOT uses jdk.internal.misc.Unsafe
 exports jdk.internal.misc to jdk.aot;
--- a/jdk/src/java.desktop/share/classes/java/awt/im/package-info.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/java.desktop/share/classes/java/awt/im/package-info.java	Fri Apr 28 13:52:45 2017 -0700
@@ -33,23 +33,9 @@
  * supports input methods for other languages and the use of entirely different
  * input mechanisms, such as handwriting or speech recognition.
  *
- * <h2>Package Specification</h2>
- * <ul>
- *     <li><a href="{@docRoot}/../technotes/guides/imf/spec.html">
- *         Input Method Framework Specification</a></li>
- *     <li><a href="{@docRoot}/../technotes/guides/imf/api-reference.html">
- *         Input Method Client API Reference</a></li>
- * </ul>
- *
  * <h2>Related Documentation</h2>
  * For overviews, tutorials, examples, guides, and tool documentation, please
- * see:
- * <ul>
- *     <li><a href="{@docRoot}/../technotes/guides/imf/overview.html">
- *         Input Method Framework Overview</a></li>
- *     <li><a href="{@docRoot}/../technotes/guides/imf/api-tutorial.html">
- *         Input Method Client API Tutorial</a></li>
- * </ul>
+ * see {@extLink imf_overview Input Method Framework Overview}.
  *
  * @since 1.2
  */
--- a/jdk/src/java.desktop/share/classes/java/awt/im/spi/package-info.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/java.desktop/share/classes/java/awt/im/spi/package-info.java	Fri Apr 28 13:52:45 2017 -0700
@@ -33,14 +33,6 @@
  * languages and the use of entirely different input mechanisms, such as
  * handwriting recognition.
  *
- * <h2><a name="package_specification"></a>Package Specification</h2>
- * <ul>
- *     <li><a href="../../../../../technotes/guides/imf/spec.html">
- *         Input Method Framework Specification</a></li>
- *     <li><a href="../../../../../technotes/guides/imf/spi-reference.html">
- *         Input Method Engine SPI Reference</a></li>
- * </ul>
- *
  * <h2><a name="Packaging"></a>Packaging Input Methods</h2>
  * Input methods can be made available by adding them to the application's class
  * path. The main JAR file of an input method must contain the file:
@@ -88,13 +80,7 @@
  *
  * <h2>Related Documentation</h2>
  * For overviews, tutorials, examples, guides, and tool documentation, please
- * see:
- * <ul>
- *     <li><a href="../../../../../technotes/guides/imf/overview.html">
- *         Input Method Framework Overview</a></li>
- *     <li><a href="../../../../../technotes/guides/imf/spi-tutorial.html">
- *         Input Method Engine SPI Tutorial</a></li>
- * </ul>
+ * see {@extLink imf_overview Input Method Framework Overview}.
  *
  * @since 1.3
  */
--- a/jdk/src/java.desktop/share/classes/javax/swing/colorchooser/package-info.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/colorchooser/package-info.java	Fri Apr 28 13:52:45 2017 -0700
@@ -42,10 +42,8 @@
  *     <li><a href="http://docs.oracle.com/javase/tutorial/uiswing/components/colorchooser.html"
  *     target="_top">How to Use Color Choosers</a>,
  *     a section in <em>The Java Tutorial</em></li>
- *     <li><a href="../../../../technotes/guides/intl/index.html"
- *     target="_top">Internationalization Documentation</a></li>
- *     <li><a href="../../../../technotes/guides/imf/index.html"
- *     target="_top">Input Method Framework Documentation</a></li>
+ *     <li>{@extLink i18n_overview Internationalization Overview}</li>
+ *     <li>{@extLink imf_overview Input Method Framework Overview}</li>
  * </ul>
  *
  * @since 1.2
--- a/jdk/src/java.desktop/share/classes/javax/swing/text/JTextComponent.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/text/JTextComponent.java	Fri Apr 28 13:52:45 2017 -0700
@@ -135,7 +135,7 @@
  * the action (In the case that the <code>ActionEvent</code>
  * sent to the action doesn't contain the target text component as its source).
  * <p>
- * The <a href="../../../../technotes/guides/imf/spec.html">input method framework</a>
+ * The {@extLink imf_overview Input Method Framework}
  * lets text components interact with input methods, separate software
  * components that preprocess events to let users enter thousands of
  * different characters using keyboards with far fewer keys.
--- a/jdk/src/java.security.jgss/share/classes/org/ietf/jgss/package.html	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/java.security.jgss/share/classes/org/ietf/jgss/package.html	Fri Apr 28 13:52:45 2017 -0700
@@ -2,7 +2,7 @@
 <html>
 <head>
 <!--
-Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
+Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
 DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 
 This code is free software; you can redistribute it and/or modify it
@@ -57,8 +57,7 @@
     produces tokens that the application must somehow transport to the
     other end.
 
-<h3>Credential Acquisition</h3>
-<a name=useSubjectCredsOnly></a>
+<h3 id="useSubjectCredsOnly">Credential Acquisition</h3>
     The GSS-API itself does not dictate how an underlying mechanism
     obtains the credentials that are needed for authentication. It is
     assumed that prior to calling the GSS-API, these credentials are
--- a/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/AbstractPushPublisher.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/AbstractPushPublisher.java	Fri Apr 28 13:52:45 2017 -0700
@@ -54,4 +54,4 @@
         }
     }
 
-        }
+}
--- a/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/AsyncConnection.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/AsyncConnection.java	Fri Apr 28 13:52:45 2017 -0700
@@ -71,6 +71,11 @@
     void startReading();
 
     /**
+     * Cancel asynchronous reading. Used to downgrade a HTTP/2 connection to HTTP/1
+     */
+    void stopAsyncReading();
+
+    /**
      * In async mode, this method puts buffers at the end of the send queue.
      * When in async mode, calling this method should later be followed by
      * subsequent flushAsync invocation.
@@ -80,6 +85,11 @@
     void writeAsync(ByteBufferReference[] buffers) throws IOException;
 
     /**
+     * Re-enable asynchronous reads through the callback
+     */
+    void enableCallback();
+
+    /**
      * In async mode, this method may put buffers at the beginning of send queue,
      * breaking frames sequence and allowing to write these buffers before other
      * buffers in the queue.
@@ -99,5 +109,4 @@
      * and continue execution.
      */
     void flushAsync() throws IOException;
-
 }
--- a/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/AsyncSSLConnection.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/AsyncSSLConnection.java	Fri Apr 28 13:52:45 2017 -0700
@@ -32,6 +32,7 @@
 import java.util.concurrent.CompletableFuture;
 import java.util.function.Consumer;
 import java.util.function.Supplier;
+import javax.net.ssl.SSLEngine;
 
 import jdk.incubator.http.internal.common.ByteBufferReference;
 import jdk.incubator.http.internal.common.ExceptionallyCloseable;
@@ -44,33 +45,48 @@
                          implements AsyncConnection, ExceptionallyCloseable {
 
     final AsyncSSLDelegate sslDelegate;
-    final PlainHttpConnection delegate;
+    final PlainHttpConnection plainConnection;
 
     AsyncSSLConnection(InetSocketAddress addr, HttpClientImpl client, String[] ap) {
         super(addr, client);
-        delegate = new PlainHttpConnection(addr, client);
-        sslDelegate = new AsyncSSLDelegate(delegate, client, ap);
+        plainConnection = new PlainHttpConnection(addr, client);
+        sslDelegate = new AsyncSSLDelegate(plainConnection, client, ap);
     }
 
     @Override
     synchronized void configureMode(Mode mode) throws IOException {
         super.configureMode(mode);
-        delegate.configureMode(mode);
+        plainConnection.configureMode(mode);
+    }
+
+    private CompletableFuture<Void> configureModeAsync(Void ignore) {
+        CompletableFuture<Void> cf = new CompletableFuture<>();
+        try {
+            configureMode(Mode.ASYNC);
+            cf.complete(null);
+        } catch (Throwable t) {
+            cf.completeExceptionally(t);
+        }
+        return cf;
     }
 
     @Override
     public void connect() throws IOException, InterruptedException {
-        delegate.connect();
+        plainConnection.connect();
+        configureMode(Mode.ASYNC);
+        startReading();
+        sslDelegate.connect();
     }
 
     @Override
     public CompletableFuture<Void> connectAsync() {
-        return delegate.connectAsync();
+        // not used currently
+        throw new InternalError();
     }
 
     @Override
     boolean connected() {
-        return delegate.connected();
+        return plainConnection.connected() && sslDelegate.connected();
     }
 
     @Override
@@ -85,7 +101,12 @@
 
     @Override
     SocketChannel channel() {
-        return delegate.channel();
+        return plainConnection.channel();
+    }
+
+    @Override
+    public void enableCallback() {
+        sslDelegate.enableCallback();
     }
 
     @Override
@@ -131,22 +152,26 @@
 
     @Override
     public void closeExceptionally(Throwable cause) {
-        Utils.close(cause, sslDelegate, delegate.channel());
+        Utils.close(cause, sslDelegate, plainConnection.channel());
     }
 
     @Override
     public void close() {
-        Utils.close(sslDelegate, delegate.channel());
+        Utils.close(sslDelegate, plainConnection.channel());
     }
 
     @Override
     void shutdownInput() throws IOException {
-        delegate.channel().shutdownInput();
+        plainConnection.channel().shutdownInput();
     }
 
     @Override
     void shutdownOutput() throws IOException {
-        delegate.channel().shutdownOutput();
+        plainConnection.channel().shutdownOutput();
+    }
+
+    SSLEngine getEngine() {
+        return sslDelegate.getEngine();
     }
 
     @Override
@@ -154,7 +179,7 @@
                                   Consumer<Throwable> errorReceiver,
                                   Supplier<ByteBufferReference> readBufferSupplier) {
         sslDelegate.setAsyncCallbacks(asyncReceiver, errorReceiver, readBufferSupplier);
-        delegate.setAsyncCallbacks(sslDelegate::asyncReceive, errorReceiver, sslDelegate::getNetBuffer);
+        plainConnection.setAsyncCallbacks(sslDelegate::asyncReceive, errorReceiver, sslDelegate::getNetBuffer);
     }
 
     // Blocking read functions not used here
@@ -176,7 +201,12 @@
 
     @Override
     public void startReading() {
-        delegate.startReading();
+        plainConnection.startReading();
         sslDelegate.startReading();
     }
+
+    @Override
+    public void stopAsyncReading() {
+        plainConnection.stopAsyncReading();
+    }
 }
--- a/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/AsyncSSLDelegate.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/AsyncSSLDelegate.java	Fri Apr 28 13:52:45 2017 -0700
@@ -28,8 +28,10 @@
 import java.io.IOException;
 import java.nio.ByteBuffer;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 import java.util.concurrent.Semaphore;
+import java.util.concurrent.CompletableFuture;
 import java.util.function.Consumer;
 import java.util.function.Supplier;
 
@@ -72,13 +74,13 @@
  *     channelInputQ
  *        /\
  *        ||
- * "lowerRead" method puts buffers into channelInputQ. It is invoked from
+ * "asyncReceive" method puts buffers into channelInputQ. It is invoked from
  * OP_READ events from the selector.
  *
  * Whenever handshaking is required, the doHandshaking() method is called
  * which creates a thread to complete the handshake. It takes over the
  * channelInputQ from upperRead, and puts outgoing packets on channelOutputQ.
- * Selector events are delivered to lowerRead and lowerWrite as normal.
+ * Selector events are delivered to asyncReceive and lowerWrite as normal.
  *
  * Errors
  *
@@ -92,9 +94,6 @@
     // while SSL handshaking happening.
     final AsyncWriteQueue appOutputQ = new AsyncWriteQueue(this::upperWrite);
 
-    // queue of wrapped ByteBuffers waiting to be sent on socket channel
-    //final Queue<ByteBuffer> channelOutputQ;
-
     // Bytes read into this queue before being unwrapped. Backup on this
     // Q should only happen when the engine is stalled due to delegated tasks
     final Queue<ByteBufferReference> channelInputQ;
@@ -107,35 +106,34 @@
 
     final SSLEngine engine;
     final SSLParameters sslParameters;
-    //final SocketChannel chan;
     final HttpConnection lowerOutput;
     final HttpClientImpl client;
     // should be volatile to provide proper synchronization(visibility) action
     volatile Consumer<ByteBufferReference> asyncReceiver;
     volatile Consumer<Throwable> errorHandler;
+    volatile boolean connected = false;
 
     // Locks.
     final Object reader = new Object();
     // synchronizing handshake state
     final Semaphore handshaker = new Semaphore(1);
-    // flag set when frame or writer is blocked waiting for handshake to finish
-    //boolean writerBlocked;
-    //boolean readerBlocked;
+    final String[] alpn;
 
     // alpn[] may be null. upcall is callback which receives incoming decoded bytes off socket
 
     AsyncSSLDelegate(HttpConnection lowerOutput, HttpClientImpl client, String[] alpn)
     {
         SSLContext context = client.sslContext();
-        //channelOutputQ = new Queue<>();
-        //channelOutputQ.registerPutCallback(this::lowerWrite);
         engine = context.createSSLEngine();
         engine.setUseClientMode(true);
         SSLParameters sslp = client.sslParameters()
                                    .orElseGet(context::getSupportedSSLParameters);
         sslParameters = Utils.copySSLParameters(sslp);
         if (alpn != null) {
+            Log.logSSL("AsyncSSLDelegate: Setting application protocols: " + Arrays.toString(alpn));
             sslParameters.setApplicationProtocols(alpn);
+        } else {
+            Log.logSSL("AsyncSSLDelegate: no applications set!");
         }
         logParams(sslParameters);
         engine.setSSLParameters(sslParameters);
@@ -143,6 +141,7 @@
         this.client = client;
         this.channelInputQ = new Queue<>();
         this.channelInputQ.registerPutCallback(this::upperRead);
+        this.alpn = alpn;
     }
 
     @Override
@@ -162,6 +161,10 @@
         }
     }
 
+    SSLEngine getEngine() {
+        return engine;
+    }
+
     @Override
     public void closeExceptionally(Throwable t) {
         Utils.close(t, appOutputQ, channelInputQ, lowerOutput);
@@ -223,6 +226,18 @@
         }
     }
 
+    // Connecting at this level means the initial handshake has completed.
+    // This means that the initial SSL parameters are available including
+    // ALPN result.
+    void connect() throws IOException, InterruptedException {
+        doHandshakeNow("Init");
+        connected = true;
+    }
+
+    boolean connected() {
+        return connected;
+    }
+
     private void startHandshake(String tag) {
         Runnable run = () -> {
             try {
@@ -241,22 +256,28 @@
     {
         handshaker.acquire();
         try {
-            channelInputQ.registerPutCallback(null);
+            channelInputQ.disableCallback();
             lowerOutput.flushAsync();
             Log.logTrace("{0}: Starting handshake...", tag);
             doHandshakeImpl();
             Log.logTrace("{0}: Handshake completed", tag);
-            channelInputQ.registerPutCallback(this::upperRead);
+            // don't unblock the channel here, as we aren't sure yet, whether ALPN
+            // negotiation succeeded. Caller will call enableCallback() externally
         } finally {
             handshaker.release();
         }
     }
 
+    public void enableCallback() {
+        channelInputQ.enableCallback();
+    }
+
      /**
      * Executes entire handshake in calling thread.
      * Returns after handshake is completed or error occurs
      */
     private void doHandshakeImpl() throws IOException {
+        engine.beginHandshake();
         while (true) {
             SSLEngineResult.HandshakeStatus status = engine.getHandshakeStatus();
             switch(status) {
@@ -272,7 +293,9 @@
                 case NEED_UNWRAP: case NEED_UNWRAP_AGAIN:
                     handshakeReceiveAndUnWrap();
                     break;
-                case FINISHED: case NOT_HANDSHAKING:
+                case FINISHED:
+                    return;
+                case NOT_HANDSHAKING:
                     return;
                 default:
                     throw new InternalError("Unexpected Handshake Status: "
@@ -311,6 +334,12 @@
         // maybe this class does not need to implement AsyncConnection
     }
 
+    @Override
+    public void stopAsyncReading() {
+        // maybe this class does not need to implement AsyncConnection
+    }
+
+
     static class EngineResult {
         final SSLEngineResult result;
         final ByteBufferReference destBuffer;
--- a/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/ConnectionPool.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/ConnectionPool.java	Fri Apr 28 13:52:45 2017 -0700
@@ -111,7 +111,8 @@
     }
 
     static CacheKey cacheKey(InetSocketAddress destination,
-                             InetSocketAddress proxy) {
+                             InetSocketAddress proxy)
+    {
         return new CacheKey(destination, proxy);
     }
 
--- a/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/Exchange.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/Exchange.java	Fri Apr 28 13:52:45 2017 -0700
@@ -549,7 +549,7 @@
     }
 
     HttpClient.Version version() {
-        return client.version();
+        return multi.version();
     }
 
     private static SocketPermission getSocketPermissionFor(URI url) {
--- a/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/ExchangeImpl.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/ExchangeImpl.java	Fri Apr 28 13:52:45 2017 -0700
@@ -81,7 +81,17 @@
         } else {
             Http2ClientImpl c2 = exchange.client().client2(); // TODO: improve
             HttpRequestImpl request = exchange.request();
-            Http2Connection c = c2.getConnectionFor(request);
+            Http2Connection c;
+            try {
+                c = c2.getConnectionFor(request);
+            } catch (Http2Connection.ALPNException e) {
+                // failed to negotiate "h2"
+                AsyncSSLConnection as = e.getConnection();
+                as.stopAsyncReading();
+                SSLConnection sslc = new SSLConnection(as);
+                ExchangeImpl<U> ex = new Http1Exchange<>(exchange, sslc);
+                return ex;
+            }
             if (c == null) {
                 // no existing connection. Send request with HTTP 1 and then
                 // upgrade if successful
--- a/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/Http2ClientImpl.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/Http2ClientImpl.java	Fri Apr 28 13:52:45 2017 -0700
@@ -104,7 +104,15 @@
             return connection;
         }
         // we are opening the connection here blocking until it is done.
-        connection = new Http2Connection(req, this);
+        try {
+            connection = new Http2Connection(req, this);
+        } catch (Throwable t) {
+            synchronized (opening) {
+                opening.remove(key);
+                opening.notifyAll();
+            }
+            throw t;
+        }
         synchronized (opening) {
             connections.put(key, connection);
             opening.remove(key);
--- a/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/Http2Connection.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/Http2Connection.java	Fri Apr 28 13:52:45 2017 -0700
@@ -43,6 +43,7 @@
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.CountDownLatch;
 import java.util.stream.Collectors;
+import javax.net.ssl.SSLEngine;
 import jdk.incubator.http.internal.common.*;
 import jdk.incubator.http.internal.frame.*;
 import jdk.incubator.http.internal.hpack.Encoder;
@@ -82,8 +83,6 @@
  * stream are provided by calling Stream.incoming().
  */
 class Http2Connection  {
-
-
     /*
      *  ByteBuffer pooling strategy for HTTP/2 protocol:
      *
@@ -258,15 +257,46 @@
                 keyFor(request.uri(), request.proxy(h2client.client())));
         Log.logTrace("Connection send window size {0} ", windowController.connectionWindowSize());
 
-        connection.connect();
         // start reading
         AsyncConnection asyncConn = (AsyncConnection)connection;
         asyncConn.setAsyncCallbacks(this::asyncReceive, this::shutdown, this::getReadBuffer);
-        connection.configureMode(Mode.ASYNC); // set mode only AFTER setAsyncCallbacks to provide visibility.
-        asyncConn.startReading();
+        connection.connect();
+        checkSSLConfig();
+        // safe to resume async reading now.
+        asyncConn.enableCallback();
         sendConnectionPreface();
     }
 
+    /**
+     * Throws an IOException if h2 was not negotiated
+     */
+    private void checkSSLConfig() throws IOException {
+        AsyncSSLConnection aconn = (AsyncSSLConnection)connection;
+        SSLEngine engine = aconn.getEngine();
+        String alpn = engine.getApplicationProtocol();
+        if (alpn == null || !alpn.equals("h2")) {
+            String msg;
+            if (alpn == null) {
+                Log.logSSL("ALPN not supported");
+                msg = "ALPN not supported";
+            } else switch (alpn) {
+              case "":
+                Log.logSSL("No ALPN returned");
+                msg = "No ALPN negotiated";
+                break;
+              case "http/1.1":
+                Log.logSSL("HTTP/1.1 ALPN returned");
+                msg = "HTTP/1.1 ALPN returned";
+                break;
+              default:
+                Log.logSSL("unknown ALPN returned");
+                msg = "Unexpected ALPN: " + alpn;
+                throw new IOException(msg);
+            }
+            throw new ALPNException(msg, aconn);
+        }
+    }
+
     static String keyFor(HttpConnection connection) {
         boolean isProxy = connection.isProxied();
         boolean isSecure = connection.isSecure();
@@ -858,4 +888,21 @@
             return 0;
         }
     }
+
+    /**
+     * Thrown when https handshake negotiates http/1.1 alpn instead of h2
+     */
+    static final class ALPNException extends IOException {
+        private static final long serialVersionUID = 23138275393635783L;
+        final AsyncSSLConnection connection;
+
+        ALPNException(String msg, AsyncSSLConnection connection) {
+            super(msg);
+            this.connection = connection;
+        }
+
+        AsyncSSLConnection getConnection() {
+            return connection;
+        }
+    }
 }
--- a/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/HttpClient.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/HttpClient.java	Fri Apr 28 13:52:45 2017 -0700
@@ -154,9 +154,9 @@
 
         /**
          * Requests a specific HTTP protocol version where possible. If not set,
-         * the version defaults to {@link HttpClient.Version#HTTP_1_1}. If
+         * the version defaults to {@link HttpClient.Version#HTTP_2}. If
          * {@link HttpClient.Version#HTTP_2} is set, then each request will
-         * attempt to upgrade to HTTP/2.  If the upgrade succeeds, then the
+         * attempt to upgrade to HTTP/2. If the upgrade succeeds, then the
          * response to this request will use HTTP/2 and all subsequent requests
          * and responses to the same
          * <a href="https://tools.ietf.org/html/rfc6454#section-4">origin server</a>
@@ -267,7 +267,7 @@
 
     /**
      * Returns the HTTP protocol version requested for this client. The default
-     * value is {@link HttpClient.Version#HTTP_1_1}
+     * value is {@link HttpClient.Version#HTTP_2}
      *
      * @return the HTTP protocol version requested
      */
--- a/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/HttpClientBuilderImpl.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/HttpClientBuilderImpl.java	Fri Apr 28 13:52:45 2017 -0700
@@ -40,7 +40,7 @@
     HttpClient.Redirect followRedirects;
     ProxySelector proxy;
     Authenticator authenticator;
-    HttpClient.Version version = HttpClient.Version.HTTP_1_1;
+    HttpClient.Version version;
     Executor executor;
     // Security parameters
     SSLContext sslContext;
--- a/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/HttpClientImpl.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/HttpClientImpl.java	Fri Apr 28 13:52:45 2017 -0700
@@ -125,7 +125,11 @@
                 Redirect.NEVER : builder.followRedirects;
         this.proxySelector = builder.proxy;
         authenticator = builder.authenticator;
-        version = builder.version;
+        if (builder.version == null) {
+            version = HttpClient.Version.HTTP_2;
+        } else {
+            version = builder.version;
+        }
         if (builder.sslParams == null) {
             sslParams = getDefaultParams(sslContext);
         } else {
--- a/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/HttpConnection.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/HttpConnection.java	Fri Apr 28 13:52:45 2017 -0700
@@ -152,15 +152,16 @@
             HttpClientImpl client,
             HttpRequestImpl request, boolean isHttp2)
     {
-        HttpConnection c;
+        HttpConnection c = null;
         InetSocketAddress proxy = request.proxy(client);
         boolean secure = request.secure();
         ConnectionPool pool = client.connectionPool();
         String[] alpn =  null;
 
-        if (secure && client.version() == HttpClient.Version.HTTP_2) {
-            alpn = new String[1];
+        if (secure && isHttp2) {
+            alpn = new String[2];
             alpn[0] = "h2";
+            alpn[1] = "http/1.1";
         }
 
         if (!secure) {
@@ -171,7 +172,9 @@
                 return getPlainConnection(addr, proxy, request, client);
             }
         } else {
-            c = pool.getConnection(true, addr, proxy);
+            if (!isHttp2) { // if http2 we don't cache connections
+                c = pool.getConnection(true, addr, proxy);
+            }
             if (c != null) {
                 return c;
             } else {
--- a/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/HttpRequest.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/HttpRequest.java	Fri Apr 28 13:52:45 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -303,10 +303,11 @@
         public abstract Builder expectContinue(boolean enable);
 
         /**
-         * Overrides the {@link HttpClient#version()  } setting for this
-         * request. This sets the version requested. The corresponding
-         * {@link HttpResponse} should be checked for the version that was
-         * used.
+         * Sets the preferred {@link HttpClient.Version} for this
+         * request. The corresponding {@link HttpResponse} should be checked
+         * for the version that was used. If the version is not set
+         * in a request, then the version requested will be that of the
+         * sending {@link HttpClient}.
          *
          * @param version the HTTP protocol version requested
          * @return this request builder
@@ -355,7 +356,7 @@
          * of not setting a timeout is the same as setting an infinite Duration, ie.
          * block forever.
          *
-         * @param duration
+         * @param duration the timeout duration
          * @return this request builder
          */
         public abstract Builder timeout(Duration duration);
@@ -497,13 +498,16 @@
     public abstract URI uri();
 
     /**
-     * Returns the HTTP protocol version that will be requested for this
-     * {@code HttpRequest}. The corresponding {@link HttpResponse} should be
+     * Returns an {@code Optional} containing the HTTP protocol version that
+     * will be requested for this {@code HttpRequest}. If the version was not
+     * set in the request's builder, then the {@code Optional} is empty.
+     * In that case, the version requested will be that of the sending
+     * {@link HttpClient}. The corresponding {@link HttpResponse} should be
      * queried to determine the version that was actually used.
      *
      * @return HTTP protocol version
      */
-    public abstract HttpClient.Version version();
+    public abstract Optional<HttpClient.Version> version();
 
     /**
      * The (user-accessible) request headers that this request was (or will be)
--- a/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/HttpRequestBuilderImpl.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/HttpRequestBuilderImpl.java	Fri Apr 28 13:52:45 2017 -0700
@@ -28,6 +28,7 @@
 import java.net.URI;
 import jdk.incubator.http.HttpRequest.BodyProcessor;
 import java.time.Duration;
+import java.util.Optional;
 import static java.util.Objects.requireNonNull;
 import jdk.incubator.http.internal.common.HttpHeadersImpl;
 import static jdk.incubator.http.internal.common.Utils.isValidName;
@@ -41,7 +42,7 @@
     //private HttpClient.Redirect followRedirects;
     private boolean expectContinue;
     private HttpRequest.BodyProcessor body;
-    private HttpClient.Version version;
+    private volatile Optional<HttpClient.Version> version;
     //private final HttpClientImpl client;
     //private ProxySelector proxy;
     private Duration duration;
@@ -52,10 +53,12 @@
         this.uri = uri;
         this.userHeaders = new HttpHeadersImpl();
         this.method = "GET"; // default, as per spec
+        this.version = Optional.empty();
     }
 
     public HttpRequestBuilderImpl() {
         this.userHeaders = new HttpHeadersImpl();
+        this.version = Optional.empty();
     }
 
     @Override
@@ -149,7 +152,7 @@
     @Override
     public HttpRequestBuilderImpl version(HttpClient.Version version) {
         requireNonNull(version);
-        this.version = version;
+        this.version = Optional.of(version);
         return this;
     }
 
@@ -169,7 +172,7 @@
 
     public HttpRequest.BodyProcessor body() { return body; }
 
-    HttpClient.Version version() { return version; }
+    Optional<HttpClient.Version> version() { return version; }
 
     @Override
     public HttpRequest.Builder GET() { return method("GET", null); }
--- a/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/HttpRequestImpl.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/HttpRequestImpl.java	Fri Apr 28 13:52:45 2017 -0700
@@ -52,7 +52,7 @@
     private boolean isWebSocket;
     private AccessControlContext acc;
     private final Duration duration;
-    private final HttpClient.Version version;
+    private final Optional<HttpClient.Version> version;
 
     /**
      * Creates an HttpRequestImpl from the given builder.
@@ -128,8 +128,8 @@
         this.authority = authority;
         this.secure = false;
         this.expectContinue = false;
-        this.duration = null; // block TODO: fix
-        this.version = client.version(); // TODO: ??
+        this.duration = null;
+        this.version = Optional.of(client.version());
     }
 
     /**
@@ -191,12 +191,6 @@
     @Override
     public boolean expectContinue() { return expectContinue; }
 
-    public boolean requestHttp2() {
-        return version.equals(HttpClient.Version.HTTP_2);
-    }
-
-//    AccessControlContext getAccessControlContext() { return acc; }
-
     InetSocketAddress proxy(HttpClientImpl client) {
         ProxySelector ps = client.proxy().orElse(null);
         if (ps == null) {
@@ -254,7 +248,7 @@
     HttpHeadersImpl getSystemHeaders() { return systemHeaders; }
 
     @Override
-    public HttpClient.Version version() { return version; }
+    public Optional<HttpClient.Version> version() { return version; }
 
     void addSystemHeader(String name, String value) {
         systemHeaders.addHeader(name, value);
--- a/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/HttpResponse.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/HttpResponse.java	Fri Apr 28 13:52:45 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -224,7 +224,7 @@
     public interface BodyHandler<T> {
 
         /**
-         * Return a {@link BodyProcessor BodyProcessor} considering the given response status
+         * Returns a {@link BodyProcessor BodyProcessor} considering the given response status
          * code and headers. This method is always called before the body is read
          * and its implementation can decide to keep the body and store it somewhere
          * or else discard it, by  returning the {@code BodyProcessor} returned
@@ -232,7 +232,7 @@
          *
          * @param statusCode the HTTP status code received
          * @param responseHeaders the response headers received
-         * @return
+         * @return a response body handler
          */
         public BodyProcessor<T> apply(int statusCode, HttpHeaders responseHeaders);
 
@@ -242,7 +242,7 @@
          *
          * @param <U> the response body type
          * @param value the value of U to return as the body
-         * @return
+         * @return a response body handler
          */
         public static <U> BodyHandler<U> discard(U value) {
             return (status, headers) -> BodyProcessor.discard(value);
@@ -260,7 +260,7 @@
          *
          * @param charset the name of the charset to interpret the body as. If
          * {@code null} then charset determined from Content-encoding header
-         * @return a response handler
+         * @return a response body handler
          */
         public static BodyHandler<String> asString(Charset charset) {
             return (status, headers) -> {
@@ -282,7 +282,7 @@
          * {@link Path}.
          *
          * @param file the file to store the body in
-         * @return a response handler
+         * @return a response body handler
          */
         public static BodyHandler<Path> asFile(Path file) {
             return (status, headers) -> BodyProcessor.asFile(file);
@@ -306,7 +306,7 @@
          *
          * @param directory the directory to store the file in
          * @param openOptions open options
-         * @return a response handler
+         * @return a response body handler
          */
         public static BodyHandler<Path> asFileDownload(Path directory, OpenOption... openOptions) {
             return (status, headers) -> {
@@ -343,7 +343,7 @@
          *
          * @param file the filename to store the body in
          * @param openOptions any options to use when opening/creating the file
-         * @return a response handler
+         * @return a response body handler
          */
         public static BodyHandler<Path> asFile(Path file, OpenOption... openOptions) {
             return (status, headers) -> BodyProcessor.asFile(file, openOptions);
@@ -359,7 +359,7 @@
          * written to the consumer.
          *
          * @param consumer a Consumer to accept the response body
-         * @return a a response handler
+         * @return a response body handler
          */
         public static BodyHandler<Void> asByteArrayConsumer(Consumer<Optional<byte[]>> consumer) {
             return (status, headers) -> BodyProcessor.asByteArrayConsumer(consumer);
@@ -373,7 +373,7 @@
          * When the {@code HttpResponse} object is returned, the body has been completely
          * written to the byte array.
          *
-         * @return a response handler
+         * @return a response body handler
          */
         public static BodyHandler<byte[]> asByteArray() {
             return (status, headers) -> BodyProcessor.asByteArray();
@@ -392,7 +392,7 @@
          * When the {@code HttpResponse} object is returned, the body has been completely
          * written to the string.
          *
-         * @return a response handler
+         * @return a response body handler
          */
         public static BodyHandler<String> asString() {
             return (status, headers) -> BodyProcessor.asString(charsetFrom(headers));
@@ -606,7 +606,7 @@
          * either one of onResponse() or onError() is guaranteed to be called,
          * but not both.
          *
-         * @param request
+         * @param request the main request or subsequent push promise
          * @param t the Throwable that caused the error
          */
         void onError(HttpRequest request, Throwable t);
@@ -717,7 +717,7 @@
          * join() call returns, all {@code HttpResponse}s and their associated
          * body objects are available.
          *
-         * @param <V>
+         * @param <V> the body type used for all responses
          * @param pushHandler a function invoked for each request or push
          * promise
          * @return a MultiProcessor
--- a/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/MultiExchange.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/MultiExchange.java	Fri Apr 28 13:52:45 2017 -0700
@@ -192,7 +192,7 @@
     }
 
     HttpClient.Version version() {
-        return client.version();
+        return request.version().orElse(client.version());
     }
 
     private synchronized void setExchange(Exchange<T> exchange) {
--- a/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/PlainHttpConnection.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/PlainHttpConnection.java	Fri Apr 28 13:52:45 2017 -0700
@@ -76,6 +76,11 @@
         }
     }
 
+    @Override
+    public void stopAsyncReading() {
+        client.cancelRegistration(chan);
+    }
+
     class ConnectEvent extends AsyncEvent {
         CompletableFuture<Void> cf;
 
@@ -213,6 +218,12 @@
         }
     }
 
+    @Override
+    public void enableCallback() {
+        // not used
+        assert false;
+    }
+
     void asyncOutput(ByteBufferReference[] refs, AsyncWriteQueue delayCallback) {
         try {
             ByteBuffer[] bufs = ByteBufferReference.toBuffers(refs);
@@ -246,7 +257,6 @@
         closed = true;
         try {
             Log.logError("Closing: " + toString());
-            //System.out.println("Closing: " + this);
             chan.close();
         } catch (IOException e) {}
     }
@@ -272,7 +282,6 @@
                 while (true) {
                     ByteBufferReference buf = readBufferSupplier.get();
                     int n = chan.read(buf.get());
-                    //System.err.printf("Read %d bytes from chan\n", n);
                     if (n == -1) {
                         throw new IOException();
                     }
--- a/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/SSLConnection.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/SSLConnection.java	Fri Apr 28 13:52:45 2017 -0700
@@ -69,6 +69,18 @@
         delegate = new PlainHttpConnection(addr, client);
     }
 
+    /**
+     * Create an SSLConnection from an existing connected AsyncSSLConnection.
+     * Used when downgrading from HTTP/2 to HTTP/1.1
+     */
+    SSLConnection(AsyncSSLConnection c) {
+        super(c.address, c.client);
+        this.delegate = c.plainConnection;
+        AsyncSSLDelegate adel = c.sslDelegate;
+        this.sslDelegate = new SSLDelegate(adel.engine, delegate.channel(), client);
+        this.alpn = adel.alpn;
+    }
+
     @Override
     SSLParameters sslParameters() {
         return sslDelegate.getSSLParameters();
--- a/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/SSLDelegate.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/SSLDelegate.java	Fri Apr 28 13:52:45 2017 -0700
@@ -51,6 +51,15 @@
     final SocketChannel chan;
     final HttpClientImpl client;
 
+    SSLDelegate(SSLEngine eng, SocketChannel chan, HttpClientImpl client)
+    {
+        this.engine = eng;
+        this.chan = chan;
+        this.client = client;
+        this.wrapper = new EngineWrapper(chan, engine);
+        this.sslParameters = engine.getSSLParameters();
+    }
+
     // alpn[] may be null
     SSLDelegate(SocketChannel chan, HttpClientImpl client, String[] alpn)
         throws IOException
@@ -63,9 +72,9 @@
         sslParameters = Utils.copySSLParameters(sslp);
         if (alpn != null) {
             sslParameters.setApplicationProtocols(alpn);
-            Log.logSSL(() -> "Setting application protocols: " + Arrays.toString(alpn));
+            Log.logSSL("SSLDelegate: Setting application protocols: {0}" + Arrays.toString(alpn));
         } else {
-            Log.logSSL("No application protocols proposed");
+            Log.logSSL("SSLDelegate: No application protocols proposed");
         }
         engine.setSSLParameters(sslParameters);
         wrapper = new EngineWrapper(chan, engine);
@@ -181,7 +190,7 @@
         boolean closed = false;
         int u_remaining; // the number of bytes left in unwrap_src after an unwrap()
 
-        EngineWrapper (SocketChannel chan, SSLEngine engine) throws IOException {
+        EngineWrapper (SocketChannel chan, SSLEngine engine) {
             this.chan = chan;
             this.engine = engine;
             wrapLock = new Object();
--- a/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/internal/common/Queue.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/internal/common/Queue.java	Fri Apr 28 13:52:45 2017 -0700
@@ -28,6 +28,7 @@
 import java.io.IOException;
 import java.util.LinkedList;
 import java.util.stream.Stream;
+import java.util.Objects;
 
 // Each stream has one of these for input. Each Http2Connection has one
 // for output. Can be used blocking or asynchronously.
@@ -38,33 +39,9 @@
     private volatile boolean closed = false;
     private volatile Throwable exception = null;
     private Runnable callback;
-    private boolean forceCallback;
+    private boolean callbackDisabled = false;
     private int waiters; // true if someone waiting
 
-    public synchronized void putAll(T[] objs) throws IOException {
-        if (closed) {
-            throw new IOException("stream closed");
-        }
-        boolean wasEmpty = q.isEmpty();
-
-        for (T obj : objs) {
-            q.add(obj);
-        }
-
-        if (waiters > 0) {
-            notifyAll();
-        }
-
-        if (wasEmpty || forceCallback) {
-            forceCallback = false;
-            if (callback != null) {
-                // Note: calling callback while holding the lock is
-                // dangerous and may lead to deadlocks.
-                callback.run();
-           }
-        }
-    }
-
     public synchronized int size() {
         return q.size();
     }
@@ -81,17 +58,30 @@
         }
 
         q.add(obj);
+
         if (waiters > 0) {
             notifyAll();
         }
 
-        if (q.size() == 1 || forceCallback) {
-            forceCallback = false;
-            if (callback != null) {
-                // Note: calling callback while holding the lock is
-                // dangerous and may lead to deadlocks.
-                callback.run();
-            }
+        if (callbackDisabled) {
+            return;
+        }
+
+        if (q.size() > 0 && callback != null) {
+            // Note: calling callback while holding the lock is
+            // dangerous and may lead to deadlocks.
+            callback.run();
+        }
+    }
+
+    public synchronized void disableCallback() {
+        callbackDisabled = true;
+    }
+
+    public synchronized void enableCallback() {
+        callbackDisabled = false;
+        while (q.size() > 0) {
+            callback.run();
         }
     }
 
@@ -100,8 +90,9 @@
      * the Queue was empty.
      */
     public synchronized void registerPutCallback(Runnable callback) {
+        Objects.requireNonNull(callback);
         this.callback = callback;
-        if (callback != null && q.size() > 0) {
+        if (q.size() > 0) {
             // Note: calling callback while holding the lock is
             // dangerous and may lead to deadlocks.
             callback.run();
@@ -167,12 +158,10 @@
     }
 
     public synchronized void pushback(T v) {
-        forceCallback = true;
         q.addFirst(v);
     }
 
     public synchronized void pushbackAll(T[] v) {
-        forceCallback = true;
         for (int i=v.length-1; i>=0; i--) {
             q.addFirst(v[i]);
         }
--- a/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/module/LdapLoginModule.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/module/LdapLoginModule.java	Fri Apr 28 13:52:45 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -201,7 +201,7 @@
  *
  * <p>
  * Arbitrary
- * <a href="{@docRoot}/../../../../../technotes/guides/jndi/jndi-ldap-gl.html#PROP">JNDI properties</a>
+ * {@extLink jndi_ldap_gl_prop "JNDI properties"}
  * may also be specified in the {@link Configuration}.
  * They are added to the environment and passed to the LDAP provider.
  * Note that the following four JNDI properties are set by this module directly
--- a/jdk/test/ProblemList.txt	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/test/ProblemList.txt	Fri Apr 28 13:52:45 2017 -0700
@@ -124,7 +124,6 @@
 # jdk_lang
 
 java/lang/StringCoding/CheckEncodings.sh                        7008363 generic-all
-java/lang/Class/getDeclaredField/FieldSetAccessibleTest.java    8178776 generic-all
 
 jdk/internal/misc/JavaLangAccess/NewUnsafeString.java           8176188 generic-all
 
@@ -256,8 +255,6 @@
 tools/jimage/JImageListTest.java                                8170120 generic-all
 tools/jimage/JImageVerifyTest.java                              8170120 generic-all
 
-tools/jimage/VerifyJimage.java                                  8178776 generic-all
-
 ############################################################################
 
 # jdk_jdi
--- a/jdk/test/java/lang/Class/getDeclaredField/FieldSetAccessibleTest.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/test/java/lang/Class/getDeclaredField/FieldSetAccessibleTest.java	Fri Apr 28 13:52:45 2017 -0700
@@ -24,6 +24,7 @@
 import java.io.FilePermission;
 import java.io.IOException;
 import java.io.UncheckedIOException;
+import java.lang.module.ModuleFinder;
 import java.lang.reflect.AccessibleObject;
 import java.lang.reflect.Field;
 import java.lang.reflect.Modifier;
@@ -46,9 +47,11 @@
 import java.util.Enumeration;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Set;
 import java.util.PropertyPermission;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.atomic.AtomicLong;
+import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
 import jdk.internal.module.Modules;
@@ -257,9 +260,11 @@
 
         final FileSystem jrt;
         final Path root;
+        final Set<String> modules;
         ClassNameJrtStreamBuilder() {
-             jrt = FileSystems.getFileSystem(URI.create("jrt:/"));
-             root = jrt.getPath("/modules");
+            jrt = FileSystems.getFileSystem(URI.create("jrt:/"));
+            root = jrt.getPath("/modules");
+            modules = systemModules();
         }
 
         @Override
@@ -267,7 +272,7 @@
             try {
                 return Files.walk(root)
                         .filter(p -> p.getNameCount() > 2)
-                        .filter(p -> ModuleLayer.boot().findModule(p.getName(1).toString()).isPresent())
+                        .filter(p -> modules.contains(p.getName(1).toString()))
                         .map(p -> p.subpath(2, p.getNameCount()))
                         .map(p -> p.toString())
                         .filter(s -> s.endsWith(".class") && !s.endsWith("module-info.class"))
@@ -276,6 +281,17 @@
                 throw new UncheckedIOException("Unable to walk \"/modules\"", x);
             }
         }
+
+        /*
+         * Filter deployment modules
+         */
+        static Set<String> systemModules() {
+            Set<String> mods = Set.of("javafx.deploy", "jdk.deploy", "jdk.plugin", "jdk.javaws");
+            return ModuleFinder.ofSystem().findAll().stream()
+                               .map(mref -> mref.descriptor().name())
+                               .filter(mn -> !mods.contains(mn))
+                               .collect(Collectors.toSet());
+        }
     }
 
     // Test with or without a security manager
--- a/jdk/test/java/net/httpclient/RequestBodyTest.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/test/java/net/httpclient/RequestBodyTest.java	Fri Apr 28 13:52:45 2017 -0700
@@ -104,6 +104,7 @@
         SSLContext ctx = LightWeightHttpServer.ctx;
         client = HttpClient.newBuilder()
                            .sslContext(ctx)
+                           .version(HttpClient.Version.HTTP_1_1)
                            .followRedirects(HttpClient.Redirect.ALWAYS)
                            .executor(exec)
                            .build();
--- a/jdk/test/java/net/httpclient/SmokeTest.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/test/java/net/httpclient/SmokeTest.java	Fri Apr 28 13:52:45 2017 -0700
@@ -165,6 +165,7 @@
         client = HttpClient.newBuilder()
                            .sslContext(ctx)
                            .executor(e)
+                           .version(HttpClient.Version.HTTP_1_1)
                            .sslParameters(sslparams)
                            .followRedirects(HttpClient.Redirect.ALWAYS)
                            .build();
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/net/httpclient/VersionTest.java	Fri Apr 28 13:52:45 2017 -0700
@@ -0,0 +1,140 @@
+/*
+ * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8175814
+ * @modules jdk.incubator.httpclient java.logging jdk.httpserver
+ * @run main/othervm -Djdk.httpclient.HttpClient.log=errors,requests,headers,trace VersionTest
+ */
+
+import com.sun.net.httpserver.Headers;
+import com.sun.net.httpserver.HttpContext;
+import com.sun.net.httpserver.HttpExchange;
+import com.sun.net.httpserver.HttpHandler;
+import com.sun.net.httpserver.HttpServer;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.net.URI;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ExecutorService;
+import java.net.InetSocketAddress;
+import jdk.incubator.http.HttpClient;
+import jdk.incubator.http.HttpRequest;
+import jdk.incubator.http.HttpResponse;
+import static jdk.incubator.http.HttpRequest.BodyProcessor.fromString;
+import static jdk.incubator.http.HttpResponse.*;
+import static jdk.incubator.http.HttpResponse.BodyHandler.asString;
+import static jdk.incubator.http.HttpResponse.BodyHandler.discard;
+import static jdk.incubator.http.HttpClient.Version.HTTP_1_1;
+import static jdk.incubator.http.HttpClient.Version.HTTP_2;
+
+/**
+ */
+public class VersionTest {
+    static HttpServer s1 ;
+    static ExecutorService executor;
+    static int port;
+    static HttpClient client;
+    static URI uri;
+    static volatile boolean error = false;
+
+    public static void main(String[] args) throws Exception {
+        initServer();
+
+        client = HttpClient.newBuilder()
+                           .executor(executor)
+                           .build();
+        // first check that the version is HTTP/2
+        if (client.version() != HttpClient.Version.HTTP_2) {
+            throw new RuntimeException("Default version not HTTP_2");
+        }
+        try {
+            test(HTTP_1_1);
+            test(HTTP_2);
+        } finally {
+            s1.stop(0);
+            executor.shutdownNow();
+        }
+        if (error)
+            throw new RuntimeException();
+    }
+
+    public static void test(HttpClient.Version version) throws Exception {
+        HttpRequest r = HttpRequest.newBuilder(uri)
+                .version(version)
+                .GET()
+                .build();
+        HttpResponse<Void> resp = client.send(r, discard(null));
+        System.out.printf("Client: response is %d\n", resp.statusCode());
+        if (resp.version() != HTTP_1_1) {
+            throw new RuntimeException();
+        }
+        //System.out.printf("Client: response body is %s\n", resp.body());
+    }
+
+    static void initServer() throws Exception {
+        InetSocketAddress addr = new InetSocketAddress (0);
+        s1 = HttpServer.create (addr, 0);
+        HttpHandler h = new Handler();
+
+        HttpContext c1 = s1.createContext("/", h);
+
+        executor = Executors.newCachedThreadPool();
+        s1.setExecutor(executor);
+        s1.start();
+
+        port = s1.getAddress().getPort();
+        uri = new URI("http://127.0.0.1:" + Integer.toString(port) + "/foo");
+        System.out.println("HTTP server port = " + port);
+    }
+}
+
+class Handler implements HttpHandler {
+    int counter = 0;
+
+    void checkHeader(Headers h) {
+        counter++;
+        if (counter == 1 && h.containsKey("Upgrade")) {
+            VersionTest.error = true;
+        }
+        if (counter > 1 && !h.containsKey("Upgrade")) {
+            VersionTest.error = true;
+        }
+    }
+
+    @Override
+    public synchronized void handle(HttpExchange t)
+        throws IOException
+    {
+        String reply = "Hello world";
+        int len = reply.length();
+        Headers h = t.getRequestHeaders();
+        checkHeader(h);
+        System.out.printf("Sending response 200\n");
+        t.sendResponseHeaders(200, len);
+        OutputStream o = t.getResponseBody();
+        o.write(reply.getBytes());
+        t.close();
+    }
+}
--- a/jdk/test/java/net/httpclient/http2/ErrorTest.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/test/java/net/httpclient/http2/ErrorTest.java	Fri Apr 28 13:52:45 2017 -0700
@@ -31,7 +31,7 @@
  *          jdk.incubator.httpclient/jdk.incubator.http.internal.frame
  *          jdk.incubator.httpclient/jdk.incubator.http.internal.hpack
  *          java.security.jgss
- * @run testng/othervm -Djdk.httpclient.HttpClient.log=ssl,errors ErrorTest
+ * @run testng/othervm/timeout=60 -Djavax.net.debug=ssl -Djdk.httpclient.HttpClient.log=all ErrorTest
  * @summary check exception thrown when bad TLS parameters selected
  */
 
@@ -76,10 +76,13 @@
 
         Http2TestServer httpsServer = null;
         try {
+            SSLContext serverContext = (new SimpleSSLContext()).get();
+            SSLParameters p = serverContext.getSupportedSSLParameters();
+            p.setApplicationProtocols(new String[]{"h2"});
             httpsServer = new Http2TestServer(true,
                                               0,
                                               exec,
-                                              sslContext);
+                                              serverContext);
             httpsServer.addHandler(new EchoHandler(), "/");
             int httpsPort = httpsServer.getAddress().getPort();
             String httpsURIString = "https://127.0.0.1:" + httpsPort + "/bar/";
--- a/jdk/test/java/net/httpclient/http2/Timeout.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/test/java/net/httpclient/http2/Timeout.java	Fri Apr 28 13:52:45 2017 -0700
@@ -32,6 +32,7 @@
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.CompletionException;
 import javax.net.ssl.SSLServerSocket;
+import javax.net.ssl.SSLParameters;
 import javax.net.ssl.SSLServerSocketFactory;
 import javax.net.ssl.SSLSocket;
 import static jdk.incubator.http.HttpRequest.BodyProcessor.fromString;
@@ -75,6 +76,9 @@
             Thread server = new Thread(() -> {
                 while (true) {
                     System.out.println("server: ready");
+                    SSLParameters params = ssocket.getSSLParameters();
+                    params.setApplicationProtocols(new String[]{"h2"});
+                    ssocket.setSSLParameters(params);
                     ready = true;
                     try (SSLSocket socket = (SSLSocket) ssocket.accept()) {
 
--- a/jdk/test/java/nio/channels/DatagramChannel/NetworkConfiguration.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/test/java/nio/channels/DatagramChannel/NetworkConfiguration.java	Fri Apr 28 13:52:45 2017 -0700
@@ -57,6 +57,9 @@
         return ip6Interfaces.get(nif);
     }
 
+    private static final boolean isMacOs =
+            System.getProperty("os.name").equals("Mac OS X");
+
     static NetworkConfiguration probe() throws IOException {
         Map<NetworkInterface,List<InetAddress>> ip4Interfaces =
             new HashMap<NetworkInterface,List<InetAddress>>();
@@ -68,7 +71,8 @@
             .list(NetworkInterface.getNetworkInterfaces());
         for (NetworkInterface nif: nifs) {
             // ignore intertaces that are down or don't support multicast
-            if (!nif.isUp() || !nif.supportsMulticast() || nif.isLoopback())
+            if (!nif.isUp() || !nif.supportsMulticast() || nif.isLoopback()
+                || (isMacOs && nif.getName().contains("awdl")))
                 continue;
 
             List<InetAddress> addrs = Collections.list(nif.getInetAddresses());
--- a/jdk/test/java/util/Scanner/ScannerStreamTest.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/test/java/util/Scanner/ScannerStreamTest.java	Fri Apr 28 13:52:45 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -33,6 +33,7 @@
 import java.util.Scanner;
 import java.util.function.Consumer;
 import java.util.function.Supplier;
+import java.util.regex.Matcher;
 import java.util.regex.MatchResult;
 import java.util.regex.Pattern;
 import java.util.stream.LambdaTestHelpers;
@@ -44,7 +45,7 @@
 
 /**
  * @test
- * @bug 8072722
+ * @bug 8072722 8150488
  * @summary Tests of stream support in java.util.Scanner
  * @library ../stream/bootlib
  * @build java.base/java.util.stream.OpTestCase
@@ -56,19 +57,22 @@
 
     static File inputFile = new File(System.getProperty("test.src", "."), "input.txt");
 
-    @DataProvider(name = "Patterns")
-    public static Object[][] makeStreamTestData() {
+    @DataProvider(name = "Tokens")
+    public static Object[][] makeTokensTestData() {
         // each inner array is [String description, String input, String delimiter]
         // delimiter may be null
         List<Object[]> data = new ArrayList<>();
 
         data.add(new Object[] { "default delimiter", "abc def ghi",           null });
         data.add(new Object[] { "fixed delimiter",   "abc,def,,ghi",          "," });
-        data.add(new Object[] { "regexp delimiter",  "###abc##def###ghi###j", "#+" });
+        data.add(new Object[] { "regex delimiter",   "###abc##def###ghi###j", "#+" });
 
         return data.toArray(new Object[0][]);
     }
 
+    /*
+     * Creates a scanner over the input, applying a delimiter if non-null.
+     */
     Scanner makeScanner(String input, String delimiter) {
         Scanner sc = new Scanner(input);
         if (delimiter != null) {
@@ -77,7 +81,11 @@
         return sc;
     }
 
-    @Test(dataProvider = "Patterns")
+    /*
+     * Given input and a delimiter, tests that tokens() returns the same
+     * results that would be provided by a Scanner hasNext/next loop.
+     */
+    @Test(dataProvider = "Tokens")
     public void tokensTest(String description, String input, String delimiter) {
         // derive expected result by using conventional loop
         Scanner sc = makeScanner(input, delimiter);
@@ -93,6 +101,9 @@
                 .exercise();
     }
 
+    /*
+     * Creates a Scanner over the given input file.
+     */
     Scanner makeFileScanner(File file) {
         try {
             return new Scanner(file, "UTF-8");
@@ -101,7 +112,12 @@
         }
     }
 
-    public void findAllTest() {
+    /*
+     * Tests that the matches produced by findAll(pat) are the same
+     * as what are returned by findWithinHorizon(pat, 0). This tests
+     * a single pattern against a single input file.
+     */
+    public void findAllFileTest() {
         // derive expected result by using conventional loop
         Pattern pat = Pattern.compile("[A-Z]{7,}");
         List<String> expected = new ArrayList<>();
@@ -116,10 +132,66 @@
         Supplier<Stream<String>> ss =
             () -> makeFileScanner(inputFile).findAll(pat).map(MatchResult::group);
 
-        withData(TestData.Factory.ofSupplier("findAllTest", ss))
+        withData(TestData.Factory.ofSupplier("findAllFileTest", ss))
                 .stream(LambdaTestHelpers.identity())
                 .expectedResult(expected)
                 .exercise();
     }
 
+    @DataProvider(name = "FindAllZero")
+    public static Object[][] makeFindAllZeroTestData() {
+        // each inner array is [String input, String patternString]
+        List<Object[]> data = new ArrayList<>();
+
+        data.add(new Object[] { "aaaaa",        "a*" });
+        data.add(new Object[] { "aaaaab",       "a*" });
+        data.add(new Object[] { "aaaaabb",      "a*" });
+        data.add(new Object[] { "aaaaabbb",     "a*" });
+        data.add(new Object[] { "aaabbaaaa",    "a*" });
+        data.add(new Object[] { "aaabbaaaab",   "a*" });
+        data.add(new Object[] { "aaabbaaaabb",  "a*" });
+        data.add(new Object[] { "aaabbaaaabbb", "a*" });
+        data.add(new Object[] { "aaabbaaaa",    "a*|b*" });
+        data.add(new Object[] { "aaabbaaaab",   "a*|b*" });
+        data.add(new Object[] { "aaabbaaaabb",  "a*|b*" });
+        data.add(new Object[] { "aaabbaaaabbb", "a*|b*" });
+
+        return data.toArray(new Object[0][]);
+    }
+
+    /*
+     * Tests findAll() using a pattern against an input string.
+     * The results from findAll() should equal the results obtained
+     * using a loop around Matcher.find().
+     *
+     * The provided regexes should allow zero-length matches.
+     * This primarily tests the auto-advance feature of findAll() that
+     * occurs if the regex match is of zero length to see if it has the
+     * same behavior as Matcher.find()'s auto-advance (JDK-8150488).
+     * Without auto-advance, findAll() would return an infinite stream
+     * of zero-length matches. Apply a limit to the stream so
+     * that an infinite stream will be truncated. The limit must be
+     * high enough that the resulting truncated stream won't be
+     * mistaken for a correct expected result.
+     */
+    @Test(dataProvider = "FindAllZero")
+    public void findAllZeroTest(String input, String patternString) {
+        Pattern pattern = Pattern.compile(patternString);
+
+        // generate expected result using Matcher.find()
+        Matcher m = pattern.matcher(input);
+        List<String> expected = new ArrayList<>();
+        while (m.find()) {
+            expected.add(m.group());
+        }
+
+        Supplier<Stream<String>> ss = () -> new Scanner(input).findAll(pattern)
+                                                              .limit(100)
+                                                              .map(MatchResult::group);
+
+        withData(TestData.Factory.ofSupplier("findAllZeroTest", ss))
+                .stream(LambdaTestHelpers.identity())
+                .expectedResult(expected)
+                .exercise();
+    }
 }
--- a/jdk/test/java/util/zip/TestExtraTime.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/test/java/util/zip/TestExtraTime.java	Fri Apr 28 13:52:45 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -31,9 +31,13 @@
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
+import java.nio.file.attribute.BasicFileAttributeView;
+import java.nio.file.attribute.FileOwnerAttributeView;
 import java.nio.file.attribute.FileTime;
+import java.nio.file.attribute.PosixFilePermission;
 import java.time.Instant;
 import java.util.Arrays;
+import java.util.Set;
 import java.util.TimeZone;
 import java.util.concurrent.TimeUnit;
 import java.util.zip.ZipEntry;
@@ -147,6 +151,28 @@
         // ZipFile
         Path zpath = Paths.get(System.getProperty("test.dir", "."),
                                "TestExtraTime.zip");
+        Path zparent = zpath.getParent();
+        if (zparent != null && !Files.isWritable(zparent)) {
+            System.err.format("zpath %s parent %s is not writable%n",
+                zpath, zparent);
+        }
+        if (Files.exists(zpath)) {
+            System.err.format("zpath %s already exists%n", zpath);
+            if (Files.isDirectory(zpath)) {
+                System.err.format("%n%s contents:%n", zpath);
+                Files.list(zpath).forEach(System.err::println);
+            }
+            FileOwnerAttributeView foav = Files.getFileAttributeView(zpath,
+                FileOwnerAttributeView.class);
+            System.err.format("zpath %s owner: %s%n", zpath, foav.getOwner());
+            System.err.format("zpath %s permissions:%n", zpath);
+            Set<PosixFilePermission> perms =
+                Files.getPosixFilePermissions(zpath);
+            perms.stream().forEach(System.err::println);
+        }
+        if (Files.isSymbolicLink(zpath)) {
+            System.err.format("zpath %s is a symbolic link%n", zpath);
+        }
         Files.copy(new ByteArrayInputStream(baos.toByteArray()), zpath);
         try (ZipFile zf = new ZipFile(zpath.toFile())) {
             ze = zf.getEntry("TestExtraTime.java");
--- a/jdk/test/jdk/modules/etc/JdkQualifiedExportTest.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/test/jdk/modules/etc/JdkQualifiedExportTest.java	Fri Apr 28 13:52:45 2017 -0700
@@ -35,6 +35,7 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.UncheckedIOException;
+import java.lang.module.Configuration;
 import java.lang.module.ModuleDescriptor;
 import java.lang.module.ModuleDescriptor.Exports;
 import java.lang.module.ModuleDescriptor.Opens;
@@ -69,9 +70,8 @@
 
     static Set<String> KNOWN_EXCEPTIONS =
         Set.of("java.xml/com.sun.xml.internal.stream.writers",
+               "jdk.internal.vm.ci/jdk.vm.ci.services",
                "jdk.jsobject/jdk.internal.netscape.javascript.spi");
-    static Set<String> DEPLOY_MODULES =
-        Set.of("jdk.deploy", "jdk.plugin", "jdk.javaws");
 
     static void checkExports(ModuleDescriptor md) {
         // build a map of upgradeable module to Exports that are qualified to it
@@ -80,8 +80,7 @@
         md.exports().stream()
           .filter(Exports::isQualified)
           .forEach(e -> e.targets().stream()
-                         .filter(mn -> !HashedModules.contains(mn) &&
-                                           ModuleFinder.ofSystem().find(mn).isPresent())
+                         .filter(mn -> accept(md, mn))
                          .forEach(t -> targetToExports.computeIfAbsent(t, _k -> new HashSet<>())
                                                       .add(e)));
 
@@ -97,10 +96,9 @@
                                                        exp.source(), e.getKey()));
                 });
 
-            // workaround until all qualified exports to upgradeable modules
-            // are eliminated
+            // no qualified exports to upgradeable modules are expected
+            // except the known exception cases
             if (targetToExports.entrySet().stream()
-                    .filter(e -> !DEPLOY_MODULES.contains(e.getKey()))
                     .flatMap(e -> e.getValue().stream())
                     .anyMatch(e -> !KNOWN_EXCEPTIONS.contains(mn + "/" + e.source()))) {
                 throw new RuntimeException(mn + " can't export package to upgradeable modules");
@@ -115,8 +113,7 @@
         md.opens().stream()
             .filter(Opens::isQualified)
             .forEach(e -> e.targets().stream()
-                           .filter(mn -> !HashedModules.contains(mn) &&
-                                            ModuleFinder.ofSystem().find(mn).isPresent())
+                           .filter(mn -> accept(md, mn))
                            .forEach(t -> targetToOpens.computeIfAbsent(t, _k -> new HashSet<>())
                                                       .add(e)));
 
@@ -136,6 +133,23 @@
         }
     }
 
+    /**
+     * Returns true if target is an upgradeable module but not required
+     * by the source module directly and indirectly.
+     */
+    private static boolean accept(ModuleDescriptor source, String target) {
+        if (HashedModules.contains(target))
+            return false;
+
+        if (!ModuleFinder.ofSystem().find(target).isPresent())
+            return false;
+
+        Configuration cf = Configuration.empty().resolve(ModuleFinder.of(),
+                                                         ModuleFinder.ofSystem(),
+                                                         Set.of(source.name()));
+        return !cf.findModule(target).isPresent();
+    }
+
     private static class HashedModules {
         static Set<String> HASHED_MODULES = hashedModules();
 
--- a/jdk/test/jdk/modules/incubator/ImageModules.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/test/jdk/modules/incubator/ImageModules.java	Fri Apr 28 13:52:45 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -26,6 +26,7 @@
  * @bug 8170859
  * @summary Basic test for incubator modules in jmods and images
  * @library /lib/testlibrary
+ * @key intermittent
  * @modules jdk.compiler jdk.jartool jdk.jlink
  * @build CompilerUtils
  * @run testng/othervm ImageModules
--- a/jdk/test/tools/jimage/VerifyJimage.java	Thu Apr 27 14:07:38 2017 -0700
+++ b/jdk/test/tools/jimage/VerifyJimage.java	Fri Apr 28 13:52:45 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -49,7 +49,7 @@
  * @test
  * @summary Verify jimage
  * @modules java.base/jdk.internal.jimage
- * @run main/othervm --add-modules=ALL-SYSTEM,jdk.incubator.httpclient VerifyJimage
+ * @run main/othervm --add-modules ALL-SYSTEM VerifyJimage
  */
 
 /**
@@ -76,8 +76,8 @@
 
         long start = System.nanoTime();
         int numThreads = Integer.getInteger("jdk.test.threads", 1);
-        List<JImageReader> readers = newJImageReaders();
-        VerifyJimage verify = new VerifyJimage(readers, numThreads);
+        JImageReader reader = newJImageReader();
+        VerifyJimage verify = new VerifyJimage(reader, numThreads);
         if (args.length == 0) {
             // load classes from jimage
             verify.loadClasses();
@@ -90,9 +90,7 @@
         }
         verify.waitForCompletion();
         long end = System.nanoTime();
-        int entries = readers.stream()
-                             .mapToInt(JImageReader::entries)
-                             .sum();
+        int entries = reader.entries();
         System.out.format("%d entries %d files verified: %d ms %d errors%n",
                           entries, verify.count.get(),
                           TimeUnit.NANOSECONDS.toMillis(end - start), failed.size());
@@ -105,11 +103,11 @@
     }
 
     private final AtomicInteger count = new AtomicInteger(0);
-    private final List<JImageReader> readers;
+    private final JImageReader reader;
     private final ExecutorService pool;
 
-    VerifyJimage(List<JImageReader> readers, int numThreads) {
-        this.readers = readers;
+    VerifyJimage(JImageReader reader, int numThreads) {
+        this.reader = reader;
         this.pool = Executors.newFixedThreadPool(numThreads);
     }
 
@@ -132,7 +130,7 @@
                                            -> !Files.isDirectory(p) &&
                                               !mdir.relativize(p).toString().startsWith("_") &&
                                               !p.getFileName().toString().equals("MANIFEST.MF"))
-                                     .forEach(p -> compare(mdir, p, readers));
+                                     .forEach(p -> compare(mdir, p, reader));
                             } catch (IOException e) {
                                 throw new UncheckedIOException(e);
                             }
@@ -154,7 +152,7 @@
         "jdk.jdi/META-INF/services/com.sun.jdi.connect.Connector"
     );
 
-    private void compare(Path mdir, Path p, List<JImageReader> readers) {
+    private void compare(Path mdir, Path p, JImageReader reader) {
         String entry = p.getFileName().toString().equals(MODULE_INFO)
                 ? mdir.getFileName().toString() + "/" + MODULE_INFO
                 : mdir.relativize(p).toString().replace(File.separatorChar, '/');
@@ -167,52 +165,59 @@
             return;
         }
 
-        String jimage = "modules";
-        JImageReader reader = readers.stream()
-                .filter(r -> r.findLocation(entry) != null)
-                .filter(r -> jimage.isEmpty() || r.imageName().equals(jimage))
-                .findFirst().orElse(null);
-        if (reader == null) {
-            failed.add(entry + " not found: " + p.getFileName().toString());
-        } else {
+        if (reader.findLocation(entry) != null) {
             reader.compare(entry, p);
         }
     }
 
     private void loadClasses() {
         ClassLoader loader = ClassLoader.getSystemClassLoader();
-        for (JImageReader reader : readers) {
-            Arrays.stream(reader.getEntryNames())
-                    .filter(n -> n.endsWith(".class") && !n.endsWith(MODULE_INFO))
-                    .forEach(n -> {
-                        String cn = removeModule(n).replaceAll("\\.class$", "").replace('/', '.');
-                        count.incrementAndGet();
-                        try {
-                            System.out.println("Loading " + cn);
-                            Class.forName(cn, false, loader);
-                        } catch (VerifyError ve) {
-                            System.err.println("VerifyError for " + cn);
-                            failed.add(reader.imageName() + ": " + cn + " not verified: " + ve.getMessage());
-                        } catch (ClassNotFoundException e) {
-                            failed.add(reader.imageName() + ": " + cn + " not found");
-                        }
-                    });
-        }
+        Stream.of(reader.getEntryNames())
+              .filter(this::accept)
+              .map(this::toClassName)
+              .forEach(cn -> {
+                  count.incrementAndGet();
+                  try {
+                      System.out.println("Loading " + cn);
+                      Class.forName(cn, false, loader);
+                  } catch (VerifyError ve) {
+                      System.err.println("VerifyError for " + cn);
+                      failed.add(reader.imageName() + ": " + cn + " not verified: " + ve.getMessage());
+                  } catch (ClassNotFoundException e) {
+                      failed.add(reader.imageName() + ": " + cn + " not found");
+                  }
+              });
     }
 
-    private String removeModule(String path) {
-        int index = path.indexOf('/', 1);
-        return path.substring(index + 1, path.length());
+    private String toClassName(String entry) {
+        int index = entry.indexOf('/', 1);
+        return entry.substring(index + 1, entry.length())
+                    .replaceAll("\\.class$", "").replace('/', '.');
     }
 
-    private static List<JImageReader> newJImageReaders() throws IOException {
+    private static Set<String> EXCLUDED_MODULES =
+        Set.of("javafx.deploy", "jdk.deploy", "jdk.plugin", "jdk.javaws",
+            // All JVMCI packages other than jdk.vm.ci.services are dynamically
+            // exported to jdk.internal.vm.compiler and jdk.aot
+            "jdk.internal.vm.compiler", "jdk.aot"
+        );
+
+    private boolean accept(String entry) {
+        int index = entry.indexOf('/', 1);
+        String mn = index > 1 ? entry.substring(1, index) : "";
+        // filter deployment modules
+
+        if (mn.isEmpty() || EXCLUDED_MODULES.contains(mn)) {
+            return false;
+        }
+        return entry.endsWith(".class") && !entry.endsWith(MODULE_INFO);
+    }
+
+    private static JImageReader newJImageReader() throws IOException {
         String home = System.getProperty("java.home");
         Path jimage = Paths.get(home, "lib", "modules");
-        JImageReader reader = new JImageReader(jimage);
-        List<JImageReader> result = new ArrayList<>();
         System.out.println("opened " + jimage);
-        result.add(reader);
-        return result;
+        return new JImageReader(jimage);
     }
 
     static class JImageReader extends BasicImageReader {